From 81ead52a7221a5dfac4d34f09178fce13f2b1a76 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Fri, 27 Feb 2026 11:13:07 +0000 Subject: [PATCH] feat(core): add table actions (edit, pause, delete confirmation) and global action log - Add Edit and Pause/Resume actions to connections table - Add delete confirmation modal to secrets table - Add 'paused' status to connections with full backend support - Skip paused connections in health checks and secrets scanning - Add global ActionLog service with filesystem persistence - Instrument all mutation handlers (connections, secrets, pipelines) with action logging - Add Action Log view with entity type filtering to dashboard --- ts/cache/classes.secrets.scan.service.ts | 1 + ts/classes/actionlog.ts | 57 +++++++++++ ts/classes/connectionmanager.ts | 15 ++- ts/classes/gitopsapp.ts | 3 + ts/opsserver/classes.opsserver.ts | 2 + ts/opsserver/handlers/actionlog.handler.ts | 30 ++++++ ts/opsserver/handlers/connections.handler.ts | 68 +++++++++++++ ts/opsserver/handlers/index.ts | 1 + ts/opsserver/handlers/pipelines.handler.ts | 20 ++++ ts/opsserver/handlers/secrets.handler.ts | 28 +++++ ts_bundled/bundle.ts | 2 +- ts_interfaces/data/actionlog.ts | 13 +++ ts_interfaces/data/connection.ts | 2 +- ts_interfaces/data/index.ts | 1 + ts_interfaces/requests/actionlog.ts | 19 ++++ ts_interfaces/requests/connections.ts | 15 +++ ts_interfaces/requests/index.ts | 1 + ts_web/appstate.ts | 93 +++++++++++++++++ ts_web/elements/gitops-dashboard.ts | 2 + ts_web/elements/views/actionlog/index.ts | 101 +++++++++++++++++++ ts_web/elements/views/connections/index.ts | 75 ++++++++++++++ ts_web/elements/views/secrets/index.ts | 23 ++++- 22 files changed, 564 insertions(+), 8 deletions(-) create mode 100644 ts/classes/actionlog.ts create mode 100644 ts/opsserver/handlers/actionlog.handler.ts create mode 100644 ts_interfaces/data/actionlog.ts create mode 100644 ts_interfaces/requests/actionlog.ts create mode 100644 ts_web/elements/views/actionlog/index.ts diff --git a/ts/cache/classes.secrets.scan.service.ts b/ts/cache/classes.secrets.scan.service.ts index 5436071..eea075d 100644 --- a/ts/cache/classes.secrets.scan.service.ts +++ b/ts/cache/classes.secrets.scan.service.ts @@ -84,6 +84,7 @@ export class SecretsScanService { try { const connections = this.connectionManager.getConnections(); for (const conn of connections) { + if (conn.status === 'paused') continue; try { const provider = this.connectionManager.getProvider(conn.id); connectionsScanned++; diff --git a/ts/classes/actionlog.ts b/ts/classes/actionlog.ts new file mode 100644 index 0000000..c9dc3d3 --- /dev/null +++ b/ts/classes/actionlog.ts @@ -0,0 +1,57 @@ +import { logger } from '../logging.ts'; +import type * as interfaces from '../../ts_interfaces/index.ts'; +import type { StorageManager } from '../storage/index.ts'; + +const ACTIONLOG_PREFIX = '/actionlog/'; + +/** + * Persists and queries action log entries via StorageManager. + * Entries are stored as individual JSON files keyed by timestamp-id. + */ +export class ActionLog { + private storageManager: StorageManager; + + constructor(storageManager: StorageManager) { + this.storageManager = storageManager; + } + + async append(entry: Omit): Promise { + const full: interfaces.data.IActionLogEntry = { + id: crypto.randomUUID(), + timestamp: Date.now(), + ...entry, + }; + const key = `${ACTIONLOG_PREFIX}${String(full.timestamp).padStart(16, '0')}-${full.id}.json`; + await this.storageManager.setJSON(key, full); + logger.debug(`Action logged: ${full.actionType} ${full.entityType} "${full.entityName}"`); + return full; + } + + async query(opts: { + limit?: number; + offset?: number; + entityType?: interfaces.data.TActionEntity; + } = {}): Promise<{ entries: interfaces.data.IActionLogEntry[]; total: number }> { + const limit = opts.limit ?? 50; + const offset = opts.offset ?? 0; + + const keys = await this.storageManager.list(ACTIONLOG_PREFIX); + // Sort by key descending (newest first — keys are timestamp-prefixed) + keys.sort((a, b) => b.localeCompare(a)); + + // Load all entries (or filter by entityType) + let entries: interfaces.data.IActionLogEntry[] = []; + for (const key of keys) { + const entry = await this.storageManager.getJSON(key); + if (entry) { + if (opts.entityType && entry.entityType !== opts.entityType) continue; + entries.push(entry); + } + } + + const total = entries.length; + entries = entries.slice(offset, offset + limit); + + return { entries, total }; + } +} diff --git a/ts/classes/connectionmanager.ts b/ts/classes/connectionmanager.ts index 3d115b9..cf1ee31 100644 --- a/ts/classes/connectionmanager.ts +++ b/ts/classes/connectionmanager.ts @@ -38,6 +38,7 @@ export class ConnectionManager { */ private async testAllConnections(): Promise { for (const conn of this.connections) { + if (conn.status === 'paused') continue; try { const provider = this.getProvider(conn.id); const result = await provider.testConnection(); @@ -178,10 +179,22 @@ export class ConnectionManager { logger.info(`Connection deleted: ${id}`); } + async pauseConnection(id: string, paused: boolean): Promise { + const conn = this.connections.find((c) => c.id === id); + if (!conn) throw new Error(`Connection not found: ${id}`); + conn.status = paused ? 'paused' : 'disconnected'; + await this.persistConnection(conn); + logger.info(`Connection ${paused ? 'paused' : 'resumed'}: ${conn.name}`); + return { ...conn, token: '***' }; + } + async testConnection(id: string): Promise<{ ok: boolean; error?: string }> { + const conn = this.connections.find((c) => c.id === id)!; + if (conn.status === 'paused') { + return { ok: false, error: 'Connection is paused' }; + } const provider = this.getProvider(id); const result = await provider.testConnection(); - const conn = this.connections.find((c) => c.id === id)!; conn.status = result.ok ? 'connected' : 'error'; await this.persistConnection(conn); return result; diff --git a/ts/classes/gitopsapp.ts b/ts/classes/gitopsapp.ts index 09a8d5e..d49e377 100644 --- a/ts/classes/gitopsapp.ts +++ b/ts/classes/gitopsapp.ts @@ -1,6 +1,7 @@ import * as plugins from '../plugins.ts'; import { logger } from '../logging.ts'; import { ConnectionManager } from './connectionmanager.ts'; +import { ActionLog } from './actionlog.ts'; import { OpsServer } from '../opsserver/index.ts'; import { StorageManager } from '../storage/index.ts'; import { CacheDb, CacheCleaner, CachedProject, CachedSecret, SecretsScanService } from '../cache/index.ts'; @@ -13,6 +14,7 @@ export class GitopsApp { public storageManager: StorageManager; public smartSecret: plugins.smartsecret.SmartSecret; public connectionManager: ConnectionManager; + public actionLog: ActionLog; public opsServer: OpsServer; public cacheDb: CacheDb; public cacheCleaner: CacheCleaner; @@ -27,6 +29,7 @@ export class GitopsApp { }); this.smartSecret = new plugins.smartsecret.SmartSecret({ service: 'gitops' }); this.connectionManager = new ConnectionManager(this.storageManager, this.smartSecret); + this.actionLog = new ActionLog(this.storageManager); this.cacheDb = CacheDb.getInstance({ storagePath: paths.defaultTsmDbPath, diff --git a/ts/opsserver/classes.opsserver.ts b/ts/opsserver/classes.opsserver.ts index 188f6ef..39c6573 100644 --- a/ts/opsserver/classes.opsserver.ts +++ b/ts/opsserver/classes.opsserver.ts @@ -19,6 +19,7 @@ export class OpsServer { public logsHandler!: handlers.LogsHandler; public webhookHandler!: handlers.WebhookHandler; public actionsHandler!: handlers.ActionsHandler; + public actionLogHandler!: handlers.ActionLogHandler; constructor(gitopsAppRef: GitopsApp) { this.gitopsAppRef = gitopsAppRef; @@ -61,6 +62,7 @@ export class OpsServer { this.pipelinesHandler = new handlers.PipelinesHandler(this); this.logsHandler = new handlers.LogsHandler(this); this.actionsHandler = new handlers.ActionsHandler(this); + this.actionLogHandler = new handlers.ActionLogHandler(this); logger.success('OpsServer TypedRequest handlers initialized'); } diff --git a/ts/opsserver/handlers/actionlog.handler.ts b/ts/opsserver/handlers/actionlog.handler.ts new file mode 100644 index 0000000..71730aa --- /dev/null +++ b/ts/opsserver/handlers/actionlog.handler.ts @@ -0,0 +1,30 @@ +import * as plugins from '../../plugins.ts'; +import type { OpsServer } from '../classes.opsserver.ts'; +import * as interfaces from '../../../ts_interfaces/index.ts'; +import { requireValidIdentity } from '../helpers/guards.ts'; + +export class ActionLogHandler { + public typedrouter = new plugins.typedrequest.TypedRouter(); + + constructor(private opsServerRef: OpsServer) { + this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter); + this.registerHandlers(); + } + + private registerHandlers(): void { + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getActionLog', + async (dataArg) => { + await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); + const result = await this.opsServerRef.gitopsAppRef.actionLog.query({ + limit: dataArg.limit, + offset: dataArg.offset, + entityType: dataArg.entityType, + }); + return result; + }, + ), + ); + } +} diff --git a/ts/opsserver/handlers/connections.handler.ts b/ts/opsserver/handlers/connections.handler.ts index 9f4b74f..92c4b3e 100644 --- a/ts/opsserver/handlers/connections.handler.ts +++ b/ts/opsserver/handlers/connections.handler.ts @@ -11,6 +11,10 @@ export class ConnectionsHandler { this.registerHandlers(); } + private get actionLog() { + return this.opsServerRef.gitopsAppRef.actionLog; + } + private registerHandlers(): void { // Get all connections this.typedrouter.addTypedHandler( @@ -36,6 +40,14 @@ export class ConnectionsHandler { dataArg.baseUrl, dataArg.token, ); + this.actionLog.append({ + actionType: 'create', + entityType: 'connection', + entityId: connection.id, + entityName: connection.name, + details: `Created ${dataArg.providerType} connection "${dataArg.name}" (${dataArg.baseUrl})`, + username: dataArg.identity.username, + }); return { connection }; }, ), @@ -55,6 +67,42 @@ export class ConnectionsHandler { token: dataArg.token, }, ); + const fields = [ + dataArg.name && 'name', + dataArg.baseUrl && 'baseUrl', + dataArg.token && 'token', + ].filter(Boolean).join(', '); + this.actionLog.append({ + actionType: 'update', + entityType: 'connection', + entityId: dataArg.connectionId, + entityName: connection.name, + details: `Updated connection "${connection.name}" (fields: ${fields})`, + username: dataArg.identity.username, + }); + return { connection }; + }, + ), + ); + + // Pause/resume connection + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'pauseConnection', + async (dataArg) => { + await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); + const connection = await this.opsServerRef.gitopsAppRef.connectionManager.pauseConnection( + dataArg.connectionId, + dataArg.paused, + ); + this.actionLog.append({ + actionType: dataArg.paused ? 'pause' : 'resume', + entityType: 'connection', + entityId: dataArg.connectionId, + entityName: connection.name, + details: `${dataArg.paused ? 'Paused' : 'Resumed'} connection "${connection.name}"`, + username: dataArg.identity.username, + }); return { connection }; }, ), @@ -69,6 +117,16 @@ export class ConnectionsHandler { const result = await this.opsServerRef.gitopsAppRef.connectionManager.testConnection( dataArg.connectionId, ); + const conn = this.opsServerRef.gitopsAppRef.connectionManager.getConnections() + .find((c) => c.id === dataArg.connectionId); + this.actionLog.append({ + actionType: 'test', + entityType: 'connection', + entityId: dataArg.connectionId, + entityName: conn?.name || dataArg.connectionId, + details: `Tested connection: ${result.ok ? 'success' : `failed — ${result.error || 'unknown error'}`}`, + username: dataArg.identity.username, + }); return result; }, ), @@ -80,9 +138,19 @@ export class ConnectionsHandler { 'deleteConnection', async (dataArg) => { await requireValidIdentity(this.opsServerRef.adminHandler, dataArg); + const conn = this.opsServerRef.gitopsAppRef.connectionManager.getConnections() + .find((c) => c.id === dataArg.connectionId); await this.opsServerRef.gitopsAppRef.connectionManager.deleteConnection( dataArg.connectionId, ); + this.actionLog.append({ + actionType: 'delete', + entityType: 'connection', + entityId: dataArg.connectionId, + entityName: conn?.name || dataArg.connectionId, + details: `Deleted connection "${conn?.name || dataArg.connectionId}"`, + username: dataArg.identity.username, + }); return { ok: true }; }, ), diff --git a/ts/opsserver/handlers/index.ts b/ts/opsserver/handlers/index.ts index 7e27dff..85fe2c9 100644 --- a/ts/opsserver/handlers/index.ts +++ b/ts/opsserver/handlers/index.ts @@ -7,3 +7,4 @@ export { PipelinesHandler } from './pipelines.handler.ts'; export { LogsHandler } from './logs.handler.ts'; export { WebhookHandler } from './webhook.handler.ts'; export { ActionsHandler } from './actions.handler.ts'; +export { ActionLogHandler } from './actionlog.handler.ts'; diff --git a/ts/opsserver/handlers/pipelines.handler.ts b/ts/opsserver/handlers/pipelines.handler.ts index ae4a015..d2a2ab1 100644 --- a/ts/opsserver/handlers/pipelines.handler.ts +++ b/ts/opsserver/handlers/pipelines.handler.ts @@ -11,6 +11,10 @@ export class PipelinesHandler { this.registerHandlers(); } + private get actionLog() { + return this.opsServerRef.gitopsAppRef.actionLog; + } + private registerHandlers(): void { // Get pipelines this.typedrouter.addTypedHandler( @@ -54,6 +58,14 @@ export class PipelinesHandler { dataArg.connectionId, ); await provider.retryPipeline(dataArg.projectId, dataArg.pipelineId); + this.actionLog.append({ + actionType: 'update', + entityType: 'pipeline', + entityId: dataArg.pipelineId, + entityName: `Pipeline #${dataArg.pipelineId}`, + details: `Retried pipeline #${dataArg.pipelineId} in project ${dataArg.projectId}`, + username: dataArg.identity.username, + }); return { ok: true }; }, ), @@ -69,6 +81,14 @@ export class PipelinesHandler { dataArg.connectionId, ); await provider.cancelPipeline(dataArg.projectId, dataArg.pipelineId); + this.actionLog.append({ + actionType: 'delete', + entityType: 'pipeline', + entityId: dataArg.pipelineId, + entityName: `Pipeline #${dataArg.pipelineId}`, + details: `Cancelled pipeline #${dataArg.pipelineId} in project ${dataArg.projectId}`, + username: dataArg.identity.username, + }); return { ok: true }; }, ), diff --git a/ts/opsserver/handlers/secrets.handler.ts b/ts/opsserver/handlers/secrets.handler.ts index a2fd1aa..9756d8a 100644 --- a/ts/opsserver/handlers/secrets.handler.ts +++ b/ts/opsserver/handlers/secrets.handler.ts @@ -11,6 +11,10 @@ export class SecretsHandler { this.registerHandlers(); } + private get actionLog() { + return this.opsServerRef.gitopsAppRef.actionLog; + } + private registerHandlers(): void { // Get all secrets (cache-first, falls back to live fetch) this.typedrouter.addTypedHandler( @@ -146,6 +150,14 @@ export class SecretsHandler { // Refresh cache for this entity const scanService = this.opsServerRef.gitopsAppRef.secretsScanService; scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {}); + this.actionLog.append({ + actionType: 'create', + entityType: 'secret', + entityId: `${dataArg.scopeId}/${dataArg.key}`, + entityName: dataArg.key, + details: `Created ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`, + username: dataArg.identity.username, + }); return { secret }; }, ), @@ -166,6 +178,14 @@ export class SecretsHandler { // Refresh cache for this entity const scanService = this.opsServerRef.gitopsAppRef.secretsScanService; scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {}); + this.actionLog.append({ + actionType: 'update', + entityType: 'secret', + entityId: `${dataArg.scopeId}/${dataArg.key}`, + entityName: dataArg.key, + details: `Updated ${dataArg.scope} secret "${dataArg.key}" in ${dataArg.scopeId}`, + username: dataArg.identity.username, + }); return { secret }; }, ), @@ -188,6 +208,14 @@ export class SecretsHandler { // Refresh cache for this entity const scanService = this.opsServerRef.gitopsAppRef.secretsScanService; scanService.scanEntity(dataArg.connectionId, dataArg.scope, dataArg.scopeId).catch(() => {}); + this.actionLog.append({ + actionType: 'delete', + entityType: 'secret', + entityId: `${dataArg.scopeId}/${dataArg.key}`, + entityName: dataArg.key, + details: `Deleted ${dataArg.scope} secret "${dataArg.key}" from ${dataArg.scopeId}`, + username: dataArg.identity.username, + }); return { ok: true }; }, ), diff --git a/ts_bundled/bundle.ts b/ts_bundled/bundle.ts index 91d2980..700fd54 100644 --- a/ts_bundled/bundle.ts +++ b/ts_bundled/bundle.ts @@ -2,7 +2,7 @@ export const files: { path: string; contentBase64: string }[] = [ { "path": "bundle.js", - "contentBase64": "dmFyIGtVPU9iamVjdC5jcmVhdGUseFU9T2JqZWN0LmZyZWV6ZSxfbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIFNVPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIExNdD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgJE10PU9iamVjdC5nZXRQcm90b3R5cGVPZixBTXQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgQ1U9KHQsZSk9PihlPVN5bWJvbFt0XSk/ZTpTeW1ib2wuZm9yKCJTeW1ib2wuIit0KSxNND10PT57dGhyb3cgVHlwZUVycm9yKHQpfTt2YXIgX1U9KHQsZSxhKT0+ZSBpbiB0P19vKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6YX0pOnRbZV09YTt2YXIgd1U9KHQsZSk9Pl9vKHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pLGhkPSh0PT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eSh0LHtnZXQ6KGUsYSk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTplKVthXX0pOnQpKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBiPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIGh0PSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksV2U9KHQsZSk9Pntmb3IodmFyIGEgaW4gZSlfbyh0LGEse2dldDplW2FdLGVudW1lcmFibGU6ITB9KX0sRE10PSh0LGUsYSxpKT0+e2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpZm9yKGxldCByIG9mIExNdChlKSkhQU10LmNhbGwodCxyKSYmciE9PWEmJl9vKHQscix7Z2V0OigpPT5lW3JdLGVudW1lcmFibGU6IShpPVNVKGUscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gdH07dmFyIFUxPSh0LGUsYSk9PihhPXQhPW51bGw/a1UoJE10KHQpKTp7fSxETXQoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/X28oYSwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOmEsdCkpO3ZhciBjMj10PT5bLCwsa1UodD8uW0NVKCJtZXRhZGF0YSIpXT8/bnVsbCldLFRVPVsiY2xhc3MiLCJtZXRob2QiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJhY2Nlc3NvciIsImZpZWxkIiwidmFsdWUiLCJnZXQiLCJzZXQiXSxhYz10PT50IT09dm9pZCAwJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIj9NNCgiRnVuY3Rpb24gZXhwZWN0ZWQiKTp0LEVNdD0odCxlLGEsaSxyKT0+KHtraW5kOlRVW3RdLG5hbWU6ZSxtZXRhZGF0YTppLGFkZEluaXRpYWxpemVyOnM9PmEuXz9NNCgiQWxyZWFkeSBpbml0aWFsaXplZCIpOnIucHVzaChhYyhzfHxudWxsKSl9KSxQTXQ9KHQsZSk9Pl9VKGUsQ1UoIm1ldGFkYXRhIiksdFszXSksUmU9KHQsZSxhLGkpPT57Zm9yKHZhciByPTAscz10W2U+PjFdLG49cyYmcy5sZW5ndGg7cjxuO3IrKyllJjE/c1tyXS5jYWxsKGEpOmk9c1tyXS5jYWxsKGEsaSk7cmV0dXJuIGl9LGR0PSh0LGUsYSxpLHIscyk9Pnt2YXIgbixvLGQsYyxwLGw9ZSY3LGY9ISEoZSY4KSxnPSEhKGUmMTYpLHk9bD4zP3QubGVuZ3RoKzE6bD9mPzE6MjowLHY9VFVbbCs1XSxtPWw+MyYmKHRbeS0xXT1bXSkseD10W3ldfHwodFt5XT1bXSksTT1sJiYoIWcmJiFmJiYocj1yLnByb3RvdHlwZSksbDw1JiYobD4zfHwhZykmJlNVKGw8ND9yOntnZXRbYV0oKXtyZXR1cm4gTVUodGhpcyxzKX0sc2V0W2FdKEYpe3JldHVybiB6VSh0aGlzLHMsRil9fSxhKSk7bD9nJiZsPDQmJndVKHMsKGw+Mj8ic2V0ICI6bD4xPyJnZXQgIjoiIikrYSk6d1UocixhKTtmb3IodmFyIFM9aS5sZW5ndGgtMTtTPj0wO1MtLSljPUVNdChsLGEsZD17fSx0WzNdLHgpLGwmJihjLnN0YXRpYz1mLGMucHJpdmF0ZT1nLHA9Yy5hY2Nlc3M9e2hhczpnP0Y9PklNdChyLEYpOkY9PmEgaW4gRn0sbF4zJiYocC5nZXQ9Zz9GPT4obF4xP01VOk5NdCkoRixyLGxeND9zOk0uZ2V0KTpGPT5GW2FdKSxsPjImJihwLnNldD1nPyhGLF8pPT56VShGLHIsXyxsXjQ/czpNLnNldCk6KEYsXyk9PkZbYV09XykpLG89KDAsaVtTXSkobD9sPDQ/Zz9zOk1bdl06bD40P3ZvaWQgMDp7Z2V0Ok0uZ2V0LHNldDpNLnNldH06cixjKSxkLl89MSxsXjR8fG89PT12b2lkIDA/YWMobykmJihsPjQ/bS51bnNoaWZ0KG8pOmw/Zz9zPW86TVt2XT1vOnI9byk6dHlwZW9mIG8hPSJvYmplY3QifHxvPT09bnVsbD9NNCgiT2JqZWN0IGV4cGVjdGVkIik6KGFjKG49by5nZXQpJiYoTS5nZXQ9biksYWMobj1vLnNldCkmJihNLnNldD1uKSxhYyhuPW8uaW5pdCkmJm0udW5zaGlmdChuKSk7cmV0dXJuIGx8fFBNdCh0LHIpLE0mJl9vKHIsYSxNKSxnP2xeND9zOk06cn0sVXQ9KHQsZSxhKT0+X1UodCx0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLGEpLEx3PSh0LGUsYSk9PmUuaGFzKHQpfHxNNCgiQ2Fubm90ICIrYSksSU10PSh0LGUpPT5PYmplY3QoZSkhPT1lP000KCdDYW5ub3QgdXNlIHRoZSAiaW4iIG9wZXJhdG9yIG9uIHRoaXMgdmFsdWUnKTp0LmhhcyhlKSxNVT0odCxlLGEpPT4oTHcodCxlLCJyZWFkIGZyb20gcHJpdmF0ZSBmaWVsZCIpLGE/YS5jYWxsKHQpOmUuZ2V0KHQpKSxTdD0odCxlLGEpPT5lLmhhcyh0KT9NNCgiQ2Fubm90IGFkZCB0aGUgc2FtZSBwcml2YXRlIG1lbWJlciBtb3JlIHRoYW4gb25jZSIpOmUgaW5zdGFuY2VvZiBXZWFrU2V0P2UuYWRkKHQpOmUuc2V0KHQsYSkselU9KHQsZSxhLGkpPT4oTHcodCxlLCJ3cml0ZSB0byBwcml2YXRlIGZpZWxkIiksaT9pLmNhbGwodCxhKTplLnNldCh0LGEpLGEpLE5NdD0odCxlLGEpPT4oTHcodCxlLCJhY2Nlc3MgcHJpdmF0ZSBtZXRob2QiKSxhKTt2YXIgejQ9KHQsZSk9PnhVKF9vKHQsInJhdyIse3ZhbHVlOnhVKGV8fHQuc2xpY2UoKSl9KSk7dmFyIHVkLGljLCR3LExVLGs0LHF0LFEsZmQscmMsQXc9YigoKT0+e3VkPWdsb2JhbFRoaXMsaWM9dWQuU2hhZG93Um9vdCYmKHVkLlNoYWR5Q1NTPT09dm9pZCAwfHx1ZC5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsJHc9U3ltYm9sKCksTFU9bmV3IFdlYWtNYXAsazQ9Y2xhc3N7Y29uc3RydWN0b3IoZSxhLGkpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGkhPT0kdyl0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTt0aGlzLmNzc1RleHQ9ZSx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBlPXRoaXMubyxhPXRoaXMudDtpZihpYyYmZT09PXZvaWQgMCl7bGV0IGk9YSE9PXZvaWQgMCYmYS5sZW5ndGg9PT0xO2kmJihlPUxVLmdldChhKSksZT09PXZvaWQgMCYmKCh0aGlzLm89ZT1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxpJiZMVS5zZXQoYSxlKSl9cmV0dXJuIGV9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX0scXQ9dD0+bmV3IGs0KHR5cGVvZiB0PT0ic3RyaW5nIj90OnQrIiIsdm9pZCAwLCR3KSxRPSh0LC4uLmUpPT57bGV0IGE9dC5sZW5ndGg9PT0xP3RbMF06ZS5yZWR1Y2UoKGkscixzKT0+aSsobj0+e2lmKG4uXyRjc3NSZXN1bHQkPT09ITApcmV0dXJuIG4uY3NzVGV4dDtpZih0eXBlb2Ygbj09Im51bWJlciIpcmV0dXJuIG47dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK24rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkocikrdFtzKzFdLHRbMF0pO3JldHVybiBuZXcgazQoYSx0LCR3KX0sZmQ9KHQsZSk9PntpZihpYyl0LmFkb3B0ZWRTdHlsZVNoZWV0cz1lLm1hcChhPT5hIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9hOmEuc3R5bGVTaGVldCk7ZWxzZSBmb3IobGV0IGEgb2YgZSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxyPXVkLmxpdE5vbmNlO3IhPT12b2lkIDAmJmkuc2V0QXR0cmlidXRlKCJub25jZSIsciksaS50ZXh0Q29udGVudD1hLmNzc1RleHQsdC5hcHBlbmRDaGlsZChpKX19LHJjPWljP3Q9PnQ6dD0+dCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/KGU9PntsZXQgYT0iIjtmb3IobGV0IGkgb2YgZS5jc3NSdWxlcylhKz1pLmNzc1RleHQ7cmV0dXJuIHF0KGEpfSkodCk6dH0pO3ZhciBGTXQsT010LFJNdCxCTXQsSE10LHFNdCxtZCwkVSxWTXQsak10LHNjLFM0LG5jLEFVLHVyLG9jPWIoKCk9PntBdygpO0F3KCk7KHtpczpGTXQsZGVmaW5lUHJvcGVydHk6T010LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpSTXQsZ2V0T3duUHJvcGVydHlOYW1lczpCTXQsZ2V0T3duUHJvcGVydHlTeW1ib2xzOkhNdCxnZXRQcm90b3R5cGVPZjpxTXR9PU9iamVjdCksbWQ9Z2xvYmFsVGhpcywkVT1tZC50cnVzdGVkVHlwZXMsVk10PSRVPyRVLmVtcHR5U2NyaXB0OiIiLGpNdD1tZC5yZWFjdGl2ZUVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQsc2M9KHQsZSk9PnQsUzQ9e3RvQXR0cmlidXRlKHQsZSl7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjp0PXQ/Vk10Om51bGw7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTp0PXQ9PW51bGw/dDpKU09OLnN0cmluZ2lmeSh0KX1yZXR1cm4gdH0sZnJvbUF0dHJpYnV0ZSh0LGUpe2xldCBhPXQ7c3dpdGNoKGUpe2Nhc2UgQm9vbGVhbjphPXQhPT1udWxsO2JyZWFrO2Nhc2UgTnVtYmVyOmE9dD09PW51bGw/bnVsbDpOdW1iZXIodCk7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKHQpfWNhdGNoe2E9bnVsbH19cmV0dXJuIGF9fSxuYz0odCxlKT0+IUZNdCh0LGUpLEFVPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOlM0LHJlZmxlY3Q6ITEsdXNlRGVmYXVsdDohMSxoYXNDaGFuZ2VkOm5jfTtTeW1ib2wubWV0YWRhdGE/Pz1TeW1ib2woIm1ldGFkYXRhIiksbWQubGl0UHJvcGVydHlNZXRhZGF0YT8/PW5ldyBXZWFrTWFwO3VyPWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIGFkZEluaXRpYWxpemVyKGUpe3RoaXMuXyRFaSgpLCh0aGlzLmw/Pz1bXSkucHVzaChlKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVybiB0aGlzLmZpbmFsaXplKCksdGhpcy5fJEVoJiZbLi4udGhpcy5fJEVoLmtleXMoKV19c3RhdGljIGNyZWF0ZVByb3BlcnR5KGUsYT1BVSl7aWYoYS5zdGF0ZSYmKGEuYXR0cmlidXRlPSExKSx0aGlzLl8kRWkoKSx0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShlKSYmKChhPU9iamVjdC5jcmVhdGUoYSkpLndyYXBwZWQ9ITApLHRoaXMuZWxlbWVudFByb3BlcnRpZXMuc2V0KGUsYSksIWEubm9BY2Nlc3Nvcil7bGV0IGk9U3ltYm9sKCkscj10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihlLGksYSk7ciE9PXZvaWQgMCYmT010KHRoaXMucHJvdG90eXBlLGUscil9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoZSxhLGkpe2xldHtnZXQ6cixzZXQ6c309Uk10KHRoaXMucHJvdG90eXBlLGUpPz97Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChuKXt0aGlzW2FdPW59fTtyZXR1cm57Z2V0OnIsc2V0KG4pe2xldCBvPXI/LmNhbGwodGhpcyk7cz8uY2FsbCh0aGlzLG4pLHRoaXMucmVxdWVzdFVwZGF0ZShlLG8saSl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKGUpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChlKT8/QVV9c3RhdGljIF8kRWkoKXtpZih0aGlzLmhhc093blByb3BlcnR5KHNjKCJlbGVtZW50UHJvcGVydGllcyIpKSlyZXR1cm47bGV0IGU9cU10KHRoaXMpO2UuZmluYWxpemUoKSxlLmwhPT12b2lkIDAmJih0aGlzLmw9Wy4uLmUubF0pLHRoaXMuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcChlLmVsZW1lbnRQcm9wZXJ0aWVzKX1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KHNjKCJmaW5hbGl6ZWQiKSkpcmV0dXJuO2lmKHRoaXMuZmluYWxpemVkPSEwLHRoaXMuXyRFaSgpLHRoaXMuaGFzT3duUHJvcGVydHkoc2MoInByb3BlcnRpZXMiKSkpe2xldCBhPXRoaXMucHJvcGVydGllcyxpPVsuLi5CTXQoYSksLi4uSE10KGEpXTtmb3IobGV0IHIgb2YgaSl0aGlzLmNyZWF0ZVByb3BlcnR5KHIsYVtyXSl9bGV0IGU9dGhpc1tTeW1ib2wubWV0YWRhdGFdO2lmKGUhPT1udWxsKXtsZXQgYT1saXRQcm9wZXJ0eU1ldGFkYXRhLmdldChlKTtpZihhIT09dm9pZCAwKWZvcihsZXRbaSxyXW9mIGEpdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQoaSxyKX10aGlzLl8kRWg9bmV3IE1hcDtmb3IobGV0W2EsaV1vZiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzKXtsZXQgcj10aGlzLl8kRXUoYSxpKTtyIT09dm9pZCAwJiZ0aGlzLl8kRWguc2V0KHIsYSl9dGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhlKXtsZXQgYT1bXTtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgaT1uZXcgU2V0KGUuZmxhdCgxLzApLnJldmVyc2UoKSk7Zm9yKGxldCByIG9mIGkpYS51bnNoaWZ0KHJjKHIpKX1lbHNlIGUhPT12b2lkIDAmJmEucHVzaChyYyhlKSk7cmV0dXJuIGF9c3RhdGljIF8kRXUoZSxhKXtsZXQgaT1hLmF0dHJpYnV0ZTtyZXR1cm4gaT09PSExP3ZvaWQgMDp0eXBlb2YgaT09InN0cmluZyI/aTp0eXBlb2YgZT09InN0cmluZyI/ZS50b0xvd2VyQ2FzZSgpOnZvaWQgMH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJEVwPXZvaWQgMCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVtPW51bGwsdGhpcy5fJEV2KCl9XyRFdigpe3RoaXMuXyRFUz1uZXcgUHJvbWlzZShlPT50aGlzLmVuYWJsZVVwZGF0aW5nPWUpLHRoaXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFXygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMuY29uc3RydWN0b3IubD8uZm9yRWFjaChlPT5lKHRoaXMpKX1hZGRDb250cm9sbGVyKGUpeyh0aGlzLl8kRU8/Pz1uZXcgU2V0KS5hZGQoZSksdGhpcy5yZW5kZXJSb290IT09dm9pZCAwJiZ0aGlzLmlzQ29ubmVjdGVkJiZlLmhvc3RDb25uZWN0ZWQ/LigpfXJlbW92ZUNvbnRyb2xsZXIoZSl7dGhpcy5fJEVPPy5kZWxldGUoZSl9XyRFXygpe2xldCBlPW5ldyBNYXAsYT10aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzO2ZvcihsZXQgaSBvZiBhLmtleXMoKSl0aGlzLmhhc093blByb3BlcnR5KGkpJiYoZS5zZXQoaSx0aGlzW2ldKSxkZWxldGUgdGhpc1tpXSk7ZS5zaXplPjAmJih0aGlzLl8kRXA9ZSl9Y3JlYXRlUmVuZGVyUm9vdCgpe2xldCBlPXRoaXMuc2hhZG93Um9vdD8/dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuIGZkKGUsdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50U3R5bGVzKSxlfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5yZW5kZXJSb290Pz89dGhpcy5jcmVhdGVSZW5kZXJSb290KCksdGhpcy5lbmFibGVVcGRhdGluZyghMCksdGhpcy5fJEVPPy5mb3JFYWNoKGU9PmUuaG9zdENvbm5lY3RlZD8uKCkpfWVuYWJsZVVwZGF0aW5nKGUpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuXyRFTz8uZm9yRWFjaChlPT5lLmhvc3REaXNjb25uZWN0ZWQ/LigpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soZSxhLGkpe3RoaXMuXyRBSyhlLGkpfV8kRVQoZSxhKXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChlKSxyPXRoaXMuY29uc3RydWN0b3IuXyRFdShlLGkpO2lmKHIhPT12b2lkIDAmJmkucmVmbGVjdD09PSEwKXtsZXQgcz0oaS5jb252ZXJ0ZXI/LnRvQXR0cmlidXRlIT09dm9pZCAwP2kuY29udmVydGVyOlM0KS50b0F0dHJpYnV0ZShhLGkudHlwZSk7dGhpcy5fJEVtPWUscz09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShyKTp0aGlzLnNldEF0dHJpYnV0ZShyLHMpLHRoaXMuXyRFbT1udWxsfX1fJEFLKGUsYSl7bGV0IGk9dGhpcy5jb25zdHJ1Y3RvcixyPWkuXyRFaC5nZXQoZSk7aWYociE9PXZvaWQgMCYmdGhpcy5fJEVtIT09cil7bGV0IHM9aS5nZXRQcm9wZXJ0eU9wdGlvbnMociksbj10eXBlb2Ygcy5jb252ZXJ0ZXI9PSJmdW5jdGlvbiI/e2Zyb21BdHRyaWJ1dGU6cy5jb252ZXJ0ZXJ9OnMuY29udmVydGVyPy5mcm9tQXR0cmlidXRlIT09dm9pZCAwP3MuY29udmVydGVyOlM0O3RoaXMuXyRFbT1yO2xldCBvPW4uZnJvbUF0dHJpYnV0ZShhLHMudHlwZSk7dGhpc1tyXT1vPz90aGlzLl8kRWo/LmdldChyKT8/byx0aGlzLl8kRW09bnVsbH19cmVxdWVzdFVwZGF0ZShlLGEsaSxyPSExLHMpe2lmKGUhPT12b2lkIDApe2xldCBuPXRoaXMuY29uc3RydWN0b3I7aWYocj09PSExJiYocz10aGlzW2VdKSxpPz89bi5nZXRQcm9wZXJ0eU9wdGlvbnMoZSksISgoaS5oYXNDaGFuZ2VkPz9uYykocyxhKXx8aS51c2VEZWZhdWx0JiZpLnJlZmxlY3QmJnM9PT10aGlzLl8kRWo/LmdldChlKSYmIXRoaXMuaGFzQXR0cmlidXRlKG4uXyRFdShlLGkpKSkpcmV0dXJuO3RoaXMuQyhlLGEsaSl9dGhpcy5pc1VwZGF0ZVBlbmRpbmc9PT0hMSYmKHRoaXMuXyRFUz10aGlzLl8kRVAoKSl9QyhlLGEse3VzZURlZmF1bHQ6aSxyZWZsZWN0OnIsd3JhcHBlZDpzfSxuKXtpJiYhKHRoaXMuXyRFaj8/PW5ldyBNYXApLmhhcyhlKSYmKHRoaXMuXyRFai5zZXQoZSxuPz9hPz90aGlzW2VdKSxzIT09ITB8fG4hPT12b2lkIDApfHwodGhpcy5fJEFMLmhhcyhlKXx8KHRoaXMuaGFzVXBkYXRlZHx8aXx8KGE9dm9pZCAwKSx0aGlzLl8kQUwuc2V0KGUsYSkpLHI9PT0hMCYmdGhpcy5fJEVtIT09ZSYmKHRoaXMuXyRFcT8/PW5ldyBTZXQpLmFkZChlKSl9YXN5bmMgXyRFUCgpe3RoaXMuaXNVcGRhdGVQZW5kaW5nPSEwO3RyeXthd2FpdCB0aGlzLl8kRVN9Y2F0Y2goYSl7UHJvbWlzZS5yZWplY3QoYSl9bGV0IGU9dGhpcy5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBlIT1udWxsJiZhd2FpdCBlLCF0aGlzLmlzVXBkYXRlUGVuZGluZ31zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjtpZighdGhpcy5oYXNVcGRhdGVkKXtpZih0aGlzLnJlbmRlclJvb3Q/Pz10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx0aGlzLl8kRXApe2ZvcihsZXRbcixzXW9mIHRoaXMuXyRFcCl0aGlzW3JdPXM7dGhpcy5fJEVwPXZvaWQgMH1sZXQgaT10aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzO2lmKGkuc2l6ZT4wKWZvcihsZXRbcixzXW9mIGkpe2xldHt3cmFwcGVkOm59PXMsbz10aGlzW3JdO24hPT0hMHx8dGhpcy5fJEFMLmhhcyhyKXx8bz09PXZvaWQgMHx8dGhpcy5DKHIsdm9pZCAwLHMsbyl9fWxldCBlPSExLGE9dGhpcy5fJEFMO3RyeXtlPXRoaXMuc2hvdWxkVXBkYXRlKGEpLGU/KHRoaXMud2lsbFVwZGF0ZShhKSx0aGlzLl8kRU8/LmZvckVhY2goaT0+aS5ob3N0VXBkYXRlPy4oKSksdGhpcy51cGRhdGUoYSkpOnRoaXMuXyRFTSgpfWNhdGNoKGkpe3Rocm93IGU9ITEsdGhpcy5fJEVNKCksaX1lJiZ0aGlzLl8kQUUoYSl9d2lsbFVwZGF0ZShlKXt9XyRBRShlKXt0aGlzLl8kRU8/LmZvckVhY2goYT0+YS5ob3N0VXBkYXRlZD8uKCkpLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChlKSksdGhpcy51cGRhdGVkKGUpfV8kRU0oKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFU31zaG91bGRVcGRhdGUoZSl7cmV0dXJuITB9dXBkYXRlKGUpe3RoaXMuXyRFcSYmPXRoaXMuXyRFcS5mb3JFYWNoKGE9PnRoaXMuXyRFVChhLHRoaXNbYV0pKSx0aGlzLl8kRU0oKX11cGRhdGVkKGUpe31maXJzdFVwZGF0ZWQoZSl7fX07dXIuZWxlbWVudFN0eWxlcz1bXSx1ci5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHVyW3NjKCJlbGVtZW50UHJvcGVydGllcyIpXT1uZXcgTWFwLHVyW3NjKCJmaW5hbGl6ZWQiKV09bmV3IE1hcCxqTXQ/Lih7UmVhY3RpdmVFbGVtZW50OnVyfSksKG1kLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPz89W10pLnB1c2goIjIuMS4yIil9KTtmdW5jdGlvbiBIVSh0LGUpe2lmKCFJdyh0KXx8IXQuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gRVUhPT12b2lkIDA/RVUuY3JlYXRlSFRNTChlKTplfWZ1bmN0aW9uIEFvKHQsZSxhPXQsaSl7aWYoZT09PWcxKXJldHVybiBlO2xldCByPWkhPT12b2lkIDA/YS5fJENvPy5baV06YS5fJENsLHM9Y2MoZSk/dm9pZCAwOmUuXyRsaXREaXJlY3RpdmUkO3JldHVybiByPy5jb25zdHJ1Y3RvciE9PXMmJihyPy5fJEFPPy4oITEpLHM9PT12b2lkIDA/cj12b2lkIDA6KHI9bmV3IHModCksci5fJEFUKHQsYSxpKSksaSE9PXZvaWQgMD8oYS5fJENvPz89W10pW2ldPXI6YS5fJENsPXIpLHIhPT12b2lkIDAmJihlPUFvKHQsci5fJEFTKHQsZS52YWx1ZXMpLHIsaSkpLGV9dmFyIER3LERVLGdkLEVVLEV3LGlzLFB3LFVNdCxUbyxsYyxjYyxJdyxQVSxOdyxkYyxJVSxOVSxMbyxGVSxPVSxSVSxGdyx3LE93LFJ3LGcxLFMxLEJVLCRvLHFVLHBjLGJkLEM0LERvLHZkLHlkLHhkLHdkLEJ3LFdNdCxsbixBaT1iKCgpPT57RHc9Z2xvYmFsVGhpcyxEVT10PT50LGdkPUR3LnRydXN0ZWRUeXBlcyxFVT1nZD9nZC5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDp0PT50fSk6dm9pZCAwLEV3PSIkbGl0JCIsaXM9YGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCxQdz0iPyIraXMsVU10PWA8JHtQd30+YCxUbz1kb2N1bWVudCxsYz0oKT0+VG8uY3JlYXRlQ29tbWVudCgiIiksY2M9dD0+dD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiIsSXc9QXJyYXkuaXNBcnJheSxQVT10PT5Jdyh0KXx8dHlwZW9mIHQ/LltTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24iLE53PWBbIAkKXGZccl1gLGRjPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLElVPS8tLT4vZyxOVT0vPi9nLExvPVJlZ0V4cChgPnwke053fSg/OihbXlxccyInPj0vXSspKCR7Tnd9Kj0ke053fSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSxGVT0vJy9nLE9VPS8iL2csUlU9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLEZ3PXQ9PihlLC4uLmEpPT4oe18kbGl0VHlwZSQ6dCxzdHJpbmdzOmUsdmFsdWVzOmF9KSx3PUZ3KDEpLE93PUZ3KDIpLFJ3PUZ3KDMpLGcxPVN5bWJvbC5mb3IoImxpdC1ub0NoYW5nZSIpLFMxPVN5bWJvbC5mb3IoImxpdC1ub3RoaW5nIiksQlU9bmV3IFdlYWtNYXAsJG89VG8uY3JlYXRlVHJlZVdhbGtlcihUbywxMjkpO3FVPSh0LGUpPT57bGV0IGE9dC5sZW5ndGgtMSxpPVtdLHIscz1lPT09Mj8iPHN2Zz4iOmU9PT0zPyI8bWF0aD4iOiIiLG49ZGM7Zm9yKGxldCBvPTA7bzxhO28rKyl7bGV0IGQ9dFtvXSxjLHAsbD0tMSxmPTA7Zm9yKDtmPGQubGVuZ3RoJiYobi5sYXN0SW5kZXg9ZixwPW4uZXhlYyhkKSxwIT09bnVsbCk7KWY9bi5sYXN0SW5kZXgsbj09PWRjP3BbMV09PT0iIS0tIj9uPUlVOnBbMV0hPT12b2lkIDA/bj1OVTpwWzJdIT09dm9pZCAwPyhSVS50ZXN0KHBbMl0pJiYocj1SZWdFeHAoIjwvIitwWzJdLCJnIikpLG49TG8pOnBbM10hPT12b2lkIDAmJihuPUxvKTpuPT09TG8/cFswXT09PSI+Ij8obj1yPz9kYyxsPS0xKTpwWzFdPT09dm9pZCAwP2w9LTI6KGw9bi5sYXN0SW5kZXgtcFsyXS5sZW5ndGgsYz1wWzFdLG49cFszXT09PXZvaWQgMD9MbzpwWzNdPT09JyInP09VOkZVKTpuPT09T1V8fG49PT1GVT9uPUxvOm49PT1JVXx8bj09PU5VP249ZGM6KG49TG8scj12b2lkIDApO2xldCBnPW49PT1MbyYmdFtvKzFdLnN0YXJ0c1dpdGgoIi8+Iik/IiAiOiIiO3MrPW49PT1kYz9kK1VNdDpsPj0wPyhpLnB1c2goYyksZC5zbGljZSgwLGwpK0V3K2Quc2xpY2UobCkraXMrZyk6ZCtpcysobD09PS0yP286Zyl9cmV0dXJuW0hVKHQscysodFthXXx8Ijw/PiIpKyhlPT09Mj8iPC9zdmc+IjplPT09Mz8iPC9tYXRoPiI6IiIpKSxpXX0scGM9Y2xhc3MgdHtjb25zdHJ1Y3Rvcih7c3RyaW5nczplLF8kbGl0VHlwZSQ6YX0saSl7bGV0IHI7dGhpcy5wYXJ0cz1bXTtsZXQgcz0wLG49MCxvPWUubGVuZ3RoLTEsZD10aGlzLnBhcnRzLFtjLHBdPXFVKGUsYSk7aWYodGhpcy5lbD10LmNyZWF0ZUVsZW1lbnQoYyxpKSwkby5jdXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsYT09PTJ8fGE9PT0zKXtsZXQgbD10aGlzLmVsLmNvbnRlbnQuZmlyc3RDaGlsZDtsLnJlcGxhY2VXaXRoKC4uLmwuY2hpbGROb2Rlcyl9Zm9yKDsocj0kby5uZXh0Tm9kZSgpKSE9PW51bGwmJmQubGVuZ3RoPG87KXtpZihyLm5vZGVUeXBlPT09MSl7aWYoci5oYXNBdHRyaWJ1dGVzKCkpZm9yKGxldCBsIG9mIHIuZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihsLmVuZHNXaXRoKEV3KSl7bGV0IGY9cFtuKytdLGc9ci5nZXRBdHRyaWJ1dGUobCkuc3BsaXQoaXMpLHk9LyhbLj9AXSk/KC4qKS8uZXhlYyhmKTtkLnB1c2goe3R5cGU6MSxpbmRleDpzLG5hbWU6eVsyXSxzdHJpbmdzOmcsY3Rvcjp5WzFdPT09Ii4iP3ZkOnlbMV09PT0iPyI/eWQ6eVsxXT09PSJAIj94ZDpEb30pLHIucmVtb3ZlQXR0cmlidXRlKGwpfWVsc2UgbC5zdGFydHNXaXRoKGlzKSYmKGQucHVzaCh7dHlwZTo2LGluZGV4OnN9KSxyLnJlbW92ZUF0dHJpYnV0ZShsKSk7aWYoUlUudGVzdChyLnRhZ05hbWUpKXtsZXQgbD1yLnRleHRDb250ZW50LnNwbGl0KGlzKSxmPWwubGVuZ3RoLTE7aWYoZj4wKXtyLnRleHRDb250ZW50PWdkP2dkLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgZz0wO2c8ZjtnKyspci5hcHBlbmQobFtnXSxsYygpKSwkby5uZXh0Tm9kZSgpLGQucHVzaCh7dHlwZToyLGluZGV4Oisrc30pO3IuYXBwZW5kKGxbZl0sbGMoKSl9fX1lbHNlIGlmKHIubm9kZVR5cGU9PT04KWlmKHIuZGF0YT09PVB3KWQucHVzaCh7dHlwZToyLGluZGV4OnN9KTtlbHNle2xldCBsPS0xO2Zvcig7KGw9ci5kYXRhLmluZGV4T2YoaXMsbCsxKSkhPT0tMTspZC5wdXNoKHt0eXBlOjcsaW5kZXg6c30pLGwrPWlzLmxlbmd0aC0xfXMrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQoZSxhKXtsZXQgaT1Uby5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBpLmlubmVySFRNTD1lLGl9fTtiZD1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1lLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUoZSl7bGV0e2VsOntjb250ZW50OmF9LHBhcnRzOml9PXRoaXMuXyRBRCxyPShlPy5jcmVhdGlvblNjb3BlPz9UbykuaW1wb3J0Tm9kZShhLCEwKTskby5jdXJyZW50Tm9kZT1yO2xldCBzPSRvLm5leHROb2RlKCksbj0wLG89MCxkPWlbMF07Zm9yKDtkIT09dm9pZCAwOyl7aWYobj09PWQuaW5kZXgpe2xldCBjO2QudHlwZT09PTI/Yz1uZXcgQzQocyxzLm5leHRTaWJsaW5nLHRoaXMsZSk6ZC50eXBlPT09MT9jPW5ldyBkLmN0b3IocyxkLm5hbWUsZC5zdHJpbmdzLHRoaXMsZSk6ZC50eXBlPT09NiYmKGM9bmV3IHdkKHMsdGhpcyxlKSksdGhpcy5fJEFWLnB1c2goYyksZD1pWysrb119biE9PWQ/LmluZGV4JiYocz0kby5uZXh0Tm9kZSgpLG4rKyl9cmV0dXJuICRvLmN1cnJlbnROb2RlPVRvLHJ9cChlKXtsZXQgYT0wO2ZvcihsZXQgaSBvZiB0aGlzLl8kQVYpaSE9PXZvaWQgMCYmKGkuc3RyaW5ncyE9PXZvaWQgMD8oaS5fJEFJKGUsaSxhKSxhKz1pLnN0cmluZ3MubGVuZ3RoLTIpOmkuXyRBSShlW2FdKSksYSsrfX0sQzQ9Y2xhc3MgdHtnZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0/Ll8kQVU/P3RoaXMuXyRDdn1jb25zdHJ1Y3RvcihlLGEsaSxyKXt0aGlzLnR5cGU9Mix0aGlzLl8kQUg9UzEsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUE9ZSx0aGlzLl8kQUI9YSx0aGlzLl8kQU09aSx0aGlzLm9wdGlvbnM9cix0aGlzLl8kQ3Y9cj8uaXNDb25uZWN0ZWQ/PyEwfWdldCBwYXJlbnROb2RlKCl7bGV0IGU9dGhpcy5fJEFBLnBhcmVudE5vZGUsYT10aGlzLl8kQU07cmV0dXJuIGEhPT12b2lkIDAmJmU/Lm5vZGVUeXBlPT09MTEmJihlPWEucGFyZW50Tm9kZSksZX1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShlLGE9dGhpcyl7ZT1Bbyh0aGlzLGUsYSksY2MoZSk/ZT09PVMxfHxlPT1udWxsfHxlPT09IiI/KHRoaXMuXyRBSCE9PVMxJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9UzEpOmUhPT10aGlzLl8kQUgmJmUhPT1nMSYmdGhpcy5fKGUpOmUuXyRsaXRUeXBlJCE9PXZvaWQgMD90aGlzLiQoZSk6ZS5ub2RlVHlwZSE9PXZvaWQgMD90aGlzLlQoZSk6UFUoZSk/dGhpcy5rKGUpOnRoaXMuXyhlKX1PKGUpe3JldHVybiB0aGlzLl8kQUEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLl8kQUIpfVQoZSl7dGhpcy5fJEFIIT09ZSYmKHRoaXMuXyRBUigpLHRoaXMuXyRBSD10aGlzLk8oZSkpfV8oZSl7dGhpcy5fJEFIIT09UzEmJmNjKHRoaXMuXyRBSCk/dGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGE9ZTp0aGlzLlQoVG8uY3JlYXRlVGV4dE5vZGUoZSkpLHRoaXMuXyRBSD1lfSQoZSl7bGV0e3ZhbHVlczphLF8kbGl0VHlwZSQ6aX09ZSxyPXR5cGVvZiBpPT0ibnVtYmVyIj90aGlzLl8kQUMoZSk6KGkuZWw9PT12b2lkIDAmJihpLmVsPXBjLmNyZWF0ZUVsZW1lbnQoSFUoaS5oLGkuaFswXSksdGhpcy5vcHRpb25zKSksaSk7aWYodGhpcy5fJEFIPy5fJEFEPT09cil0aGlzLl8kQUgucChhKTtlbHNle2xldCBzPW5ldyBiZChyLHRoaXMpLG49cy51KHRoaXMub3B0aW9ucyk7cy5wKGEpLHRoaXMuVChuKSx0aGlzLl8kQUg9c319XyRBQyhlKXtsZXQgYT1CVS5nZXQoZS5zdHJpbmdzKTtyZXR1cm4gYT09PXZvaWQgMCYmQlUuc2V0KGUuc3RyaW5ncyxhPW5ldyBwYyhlKSksYX1rKGUpe0l3KHRoaXMuXyRBSCl8fCh0aGlzLl8kQUg9W10sdGhpcy5fJEFSKCkpO2xldCBhPXRoaXMuXyRBSCxpLHI9MDtmb3IobGV0IHMgb2YgZSlyPT09YS5sZW5ndGg/YS5wdXNoKGk9bmV3IHQodGhpcy5PKGxjKCkpLHRoaXMuTyhsYygpKSx0aGlzLHRoaXMub3B0aW9ucykpOmk9YVtyXSxpLl8kQUkocykscisrO3I8YS5sZW5ndGgmJih0aGlzLl8kQVIoaSYmaS5fJEFCLm5leHRTaWJsaW5nLHIpLGEubGVuZ3RoPXIpfV8kQVIoZT10aGlzLl8kQUEubmV4dFNpYmxpbmcsYSl7Zm9yKHRoaXMuXyRBUD8uKCExLCEwLGEpO2UhPT10aGlzLl8kQUI7KXtsZXQgaT1EVShlKS5uZXh0U2libGluZztEVShlKS5yZW1vdmUoKSxlPWl9fXNldENvbm5lY3RlZChlKXt0aGlzLl8kQU09PT12b2lkIDAmJih0aGlzLl8kQ3Y9ZSx0aGlzLl8kQVA/LihlKSl9fSxEbz1jbGFzc3tnZXQgdGFnTmFtZSgpe3JldHVybiB0aGlzLmVsZW1lbnQudGFnTmFtZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1jb25zdHJ1Y3RvcihlLGEsaSxyLHMpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1TMSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD1lLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1yLHRoaXMub3B0aW9ucz1zLGkubGVuZ3RoPjJ8fGlbMF0hPT0iInx8aVsxXSE9PSIiPyh0aGlzLl8kQUg9QXJyYXkoaS5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9aSk6dGhpcy5fJEFIPVMxfV8kQUkoZSxhPXRoaXMsaSxyKXtsZXQgcz10aGlzLnN0cmluZ3Msbj0hMTtpZihzPT09dm9pZCAwKWU9QW8odGhpcyxlLGEsMCksbj0hY2MoZSl8fGUhPT10aGlzLl8kQUgmJmUhPT1nMSxuJiYodGhpcy5fJEFIPWUpO2Vsc2V7bGV0IG89ZSxkLGM7Zm9yKGU9c1swXSxkPTA7ZDxzLmxlbmd0aC0xO2QrKyljPUFvKHRoaXMsb1tpK2RdLGEsZCksYz09PWcxJiYoYz10aGlzLl8kQUhbZF0pLG58fD0hY2MoYyl8fGMhPT10aGlzLl8kQUhbZF0sYz09PVMxP2U9UzE6ZSE9PVMxJiYoZSs9KGM/PyIiKStzW2QrMV0pLHRoaXMuXyRBSFtkXT1jfW4mJiFyJiZ0aGlzLmooZSl9aihlKXtlPT09UzE/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGU/PyIiKX19LHZkPWNsYXNzIGV4dGVuZHMgRG97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWooZSl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09ZT09PVMxP3ZvaWQgMDplfX0seWQ9Y2xhc3MgZXh0ZW5kcyBEb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihlKXt0aGlzLmVsZW1lbnQudG9nZ2xlQXR0cmlidXRlKHRoaXMubmFtZSwhIWUmJmUhPT1TMSl9fSx4ZD1jbGFzcyBleHRlbmRzIERve2NvbnN0cnVjdG9yKGUsYSxpLHIscyl7c3VwZXIoZSxhLGkscixzKSx0aGlzLnR5cGU9NX1fJEFJKGUsYT10aGlzKXtpZigoZT1Bbyh0aGlzLGUsYSwwKT8/UzEpPT09ZzEpcmV0dXJuO2xldCBpPXRoaXMuXyRBSCxyPWU9PT1TMSYmaSE9PVMxfHxlLmNhcHR1cmUhPT1pLmNhcHR1cmV8fGUub25jZSE9PWkub25jZXx8ZS5wYXNzaXZlIT09aS5wYXNzaXZlLHM9ZSE9PVMxJiYoaT09PVMxfHxyKTtyJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxpKSxzJiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxlKSx0aGlzLl8kQUg9ZX1oYW5kbGVFdmVudChlKXt0eXBlb2YgdGhpcy5fJEFIPT0iZnVuY3Rpb24iP3RoaXMuXyRBSC5jYWxsKHRoaXMub3B0aW9ucz8uaG9zdD8/dGhpcy5lbGVtZW50LGUpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChlKX19LHdkPWNsYXNze2NvbnN0cnVjdG9yKGUsYSxpKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1hLHRoaXMub3B0aW9ucz1pfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkoZSl7QW8odGhpcyxlKX19LEJ3PXtNOkV3LFA6aXMsQTpQdyxDOjEsTDpxVSxSOmJkLEQ6UFUsVjpBbyxJOkM0LEg6RG8sTjp5ZCxVOnhkLEI6dmQsRjp3ZH0sV010PUR3LmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7V010Py4ocGMsQzQpLChEdy5saXRIdG1sVmVyc2lvbnM/Pz1bXSkucHVzaCgiMy4zLjIiKTtsbj0odCxlLGEpPT57bGV0IGk9YT8ucmVuZGVyQmVmb3JlPz9lLHI9aS5fJGxpdFBhcnQkO2lmKHI9PT12b2lkIDApe2xldCBzPWE/LnJlbmRlckJlZm9yZT8/bnVsbDtpLl8kbGl0UGFydCQ9cj1uZXcgQzQoZS5pbnNlcnRCZWZvcmUobGMoKSxzKSxzLHZvaWQgMCxhPz97fSl9cmV0dXJuIHIuXyRBSSh0KSxyfX0pO3ZhciBIdyxycyxHTXQsWU10LFZVPWIoKCk9PntvYygpO29jKCk7QWkoKTtBaSgpO0h3PWdsb2JhbFRoaXMscnM9Y2xhc3MgZXh0ZW5kcyB1cntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXtob3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe2xldCBlPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZT8/PWUuZmlyc3RDaGlsZCxlfXVwZGF0ZShlKXtsZXQgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUoZSksdGhpcy5fJERvPWxuKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fJERvPy5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBnMX19O3JzLl8kbGl0RWxlbWVudCQ9ITAscnMuZmluYWxpemVkPSEwLEh3LmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydD8uKHtMaXRFbGVtZW50OnJzfSk7R010PUh3LmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7R010Py4oe0xpdEVsZW1lbnQ6cnN9KTtZTXQ9e18kQUs6KHQsZSxhKT0+e3QuXyRBSyhlLGEpfSxfJEFMOnQ9PnQuXyRBTH07KEh3LmxpdEVsZW1lbnRWZXJzaW9ucz8/PVtdKS5wdXNoKCI0LjIuMiIpfSk7dmFyIFpNdCxqVT1iKCgpPT57Wk10PSExfSk7dmFyIGZyPWIoKCk9PntvYygpO0FpKCk7VlUoKTtqVSgpfSk7dmFyIHpkPWh0KE1kPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShNZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTWQudW5pPXZvaWQgMDt2YXIgWE10PSh0PSJ1bmkiKT0+YCR7dH1fJHsieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csZT0+e2xldCBhPU1hdGgucmFuZG9tKCkqMTZ8MDtyZXR1cm4oZT09PSJ4Ij9hOmEmM3w4KS50b1N0cmluZygxNil9KX1gO01kLnVuaT1YTXR9KTt2YXIga2QsY24sU2Q9YigoKT0+e2tkPWNsYXNze2NsYWltKCl7aWYodGhpcy5jbGFpbWVkKXRocm93IG5ldyBFcnJvcigiRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkIik7dGhpcy5jbGFpbWVkPSEwfWdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWRBdD90aGlzLnN0b3BwZWRBdC10aGlzLnN0YXJ0ZWRBdDpEYXRlLm5vdygpLXRoaXMuc3RhcnRlZEF0fWNvbnN0cnVjdG9yKCl7dGhpcy5jbGFpbWVkPSExLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxhKT0+e3RoaXMucmVzb2x2ZT1pPT57dGhpcy5zdGF0dXM9ImZ1bGZpbGxlZCIsdGhpcy5zdG9wcGVkQXQ9RGF0ZS5ub3coKSxlKGkpfSx0aGlzLnJlamVjdD1pPT57dGhpcy5zdGF0dXM9InJlamVjdGVkIix0aGlzLnN0b3BwZWRBdD1EYXRlLm5vdygpLGEoaSl9LHRoaXMuc3RhcnRlZEF0PURhdGUubm93KCksdGhpcy5zdGF0dXM9InBlbmRpbmcifSl9fSxjbj0oKT0+bmV3IGtkfSk7dmFyIENkLEtNdCxVVT1iKCgpPT57U2QoKTtDZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjdW11bGF0ZWRQcm9taXNlcz1bXSx0aGlzLmRlZmVycmVkPWNuKCksdGhpcy5wcm9taXNlPXRoaXMuZGVmZXJyZWQucHJvbWlzZSxzZXRUaW1lb3V0KGFzeW5jKCk9Pntmb3IoO3RoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5sZW5ndGg+MDspYXdhaXQgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnNoaWZ0KCk7dGhpcy5kZWZlcnJlZC5yZXNvbHZlKCl9LDApfXN1YkRlZmVyKCl7bGV0IGU9Y24oKTtyZXR1cm4gdGhpcy5hZGRQcm9taXNlKGUucHJvbWlzZSksZX1hZGRQcm9taXNlKGUpe3RoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKGUpfX0sS010PSgpPT5uZXcgQ2R9KTt2YXIgSGU9e307V2UoSGUse0N1bXVsYXRpdmVEZWZlcnJlZDooKT0+Q2QsRGVmZXJyZWQ6KCk9PmtkLGN1bXVsYXRpdmVEZWZlcjooKT0+S010LGRlZmVyOigpPT5jbixmcm9tQ2FsbGJhY2s6KCk9Pml6dCxnZXRGaXJzdFRydWVPckZhbHNlOigpPT5henQsbWFwOigpPT5lenQscmVqZWN0ZWRQcm9taXNlOigpPT5KTXQscmVzb2x2ZWRQcm9taXNlOigpPT5RTXQsdGltZW91dEFuZENvbnRpbnVlOigpPT50enQsdGltZW91dFdyYXA6KCk9PldVfSk7dmFyIFFNdCxKTXQsZXp0LFdVLHR6dCxhenQsaXp0LGQyPWIoKCk9PntTZCgpO1VVKCk7U2QoKTtRTXQ9dD0+UHJvbWlzZS5yZXNvbHZlKHQpLEpNdD10PT5Qcm9taXNlLnJlamVjdCh0KSxlenQ9YXN5bmModCxlKT0+e2xldCBhPVtdLGk9W107Zm9yKGxldCByIG9mIHQpe2xldCBzPWUocik7YS5wdXNoKHMpLHMudGhlbihuPT57aS5wdXNoKG4pfSl9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGEpLGl9LFdVPWFzeW5jKHQsZSxhPSEwKT0+bmV3IFByb21pc2UoKGkscik9PntzZXRUaW1lb3V0KCgpPT57YT9yKG5ldyBFcnJvcigidGltZW91dCIpKTppKG51bGwpfSxlKSx0LnRoZW4oaSxyKX0pLHR6dD1hc3luYyh0LGU9NmU0KT0+V1UodCxlLCExKSxhenQ9YXN5bmMgdD0+e2xldCBlPWNuKCk7Zm9yKGxldCBhIG9mIHQpYS50aGVuKGk9PntpPT09ITAmJmUucmVzb2x2ZSghMCl9KTtyZXR1cm4gUHJvbWlzZS5hbGwodCkudGhlbigoKT0+e2UucmVzb2x2ZSghMSl9KSxlLnByb21pc2V9LGl6dD10PT5uZXcgUHJvbWlzZSgoZSxhKT0+e3QoKGkscik9PntpP2EoaSk6ZShyKX0pfSl9KTt2YXIgX2Q9YigoKT0+e2QyKCl9KTtmdW5jdGlvbiBDdCh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iJiZlIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO3F3KHQsZSk7ZnVuY3Rpb24gYSgpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1lPT09bnVsbD9PYmplY3QuY3JlYXRlKGUpOihhLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgYSl9ZnVuY3Rpb24gc3p0KHQsZSl7dmFyIGE9e307Zm9yKHZhciBpIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJmUuaW5kZXhPZihpKTwwJiYoYVtpXT10W2ldKTtpZih0IT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHI9MCxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7cjxpLmxlbmd0aDtyKyspZS5pbmRleE9mKGlbcl0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LGlbcl0pJiYoYVtpW3JdXT10W2lbcl1dKTtyZXR1cm4gYX1mdW5jdGlvbiBuenQodCxlLGEsaSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aCxzPXI8Mz9lOmk9PT1udWxsP2k9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGEpOmksbjtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKXM9UmVmbGVjdC5kZWNvcmF0ZSh0LGUsYSxpKTtlbHNlIGZvcih2YXIgbz10Lmxlbmd0aC0xO28+PTA7by0tKShuPXRbb10pJiYocz0ocjwzP24ocyk6cj4zP24oZSxhLHMpOm4oZSxhKSl8fHMpO3JldHVybiByPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGEscyksc31mdW5jdGlvbiBvenQodCxlKXtyZXR1cm4gZnVuY3Rpb24oYSxpKXtlKGEsaSx0KX19ZnVuY3Rpb24gbHp0KHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH1mdW5jdGlvbiBjenQodCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9ZnVuY3Rpb24gZHp0KHQpe3JldHVybiB0eXBlb2YgdD09InN5bWJvbCI/dDoiIi5jb25jYXQodCl9ZnVuY3Rpb24gcHp0KHQsZSxhKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wiJiYoZT1lLmRlc2NyaXB0aW9uPyJbIi5jb25jYXQoZS5kZXNjcmlwdGlvbiwiXSIpOiIiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTphPyIiLmNvbmNhdChhLCIgIixlKTplfSl9ZnVuY3Rpb24gaHp0KHQsZSl7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YT09ImZ1bmN0aW9uIilyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIFd3KHQsZSxhLGkpe2Z1bmN0aW9uIHIocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBhP3M6bmV3IGEoZnVuY3Rpb24obil7bihzKX0pfXJldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKHMsbil7ZnVuY3Rpb24gbyhwKXt0cnl7YyhpLm5leHQocCkpfWNhdGNoKGwpe24obCl9fWZ1bmN0aW9uIGQocCl7dHJ5e2MoaS50aHJvdyhwKSl9Y2F0Y2gobCl7bihsKX19ZnVuY3Rpb24gYyhwKXtwLmRvbmU/cyhwLnZhbHVlKTpyKHAudmFsdWUpLnRoZW4obyxkKX1jKChpPWkuYXBwbHkodCxlfHxbXSkpLm5leHQoKSl9KX1mdW5jdGlvbiBoYyh0LGUpe3ZhciBhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihzWzBdJjEpdGhyb3cgc1sxXTtyZXR1cm4gc1sxXX0sdHJ5czpbXSxvcHM6W119LGkscixzLG49T2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yPT0iZnVuY3Rpb24iP0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKTtyZXR1cm4gbi5uZXh0PW8oMCksbi50aHJvdz1vKDEpLG4ucmV0dXJuPW8oMiksdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKG5bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksbjtmdW5jdGlvbiBvKGMpe3JldHVybiBmdW5jdGlvbihwKXtyZXR1cm4gZChbYyxwXSl9fWZ1bmN0aW9uIGQoYyl7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtuJiYobj0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYoaT0xLHImJihzPWNbMF0mMj9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgocz1yLnJldHVybikmJnMuY2FsbChyKSwwKTpyLm5leHQpJiYhKHM9cy5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIHM7c3dpdGNoKHI9MCxzJiYoYz1bY1swXSYyLHMudmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOnM9YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihzPWEudHJ5cywhKHM9cy5sZW5ndGg+MCYmc1tzLmxlbmd0aC0xXSkmJihjWzBdPT09Nnx8Y1swXT09PTIpKXthPTA7Y29udGludWV9aWYoY1swXT09PTMmJighc3x8Y1sxXT5zWzBdJiZjWzFdPHNbM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoY1swXT09PTYmJmEubGFiZWw8c1sxXSl7YS5sYWJlbD1zWzFdLHM9YzticmVha31pZihzJiZhLmxhYmVsPHNbMl0pe2EubGFiZWw9c1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfXNbMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPWUuY2FsbCh0LGEpfWNhdGNoKHApe2M9WzYscF0scj0wfWZpbmFsbHl7aT1zPTB9aWYoY1swXSY1KXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fWZ1bmN0aW9uIHV6dCh0LGUpe2Zvcih2YXIgYSBpbiB0KWEhPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKSYmancoZSx0LGEpfWZ1bmN0aW9uIEYyKHQpe3ZhciBlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixhPWUmJnRbZV0saT0wO2lmKGEpcmV0dXJuIGEuY2FsbCh0KTtpZih0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJmk+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W2krK10sZG9uZTohdH19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGU/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfWZ1bmN0aW9uIFcxKHQsZSl7dmFyIGE9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFhKXJldHVybiB0O3ZhciBpPWEuY2FsbCh0KSxyLHM9W10sbjt0cnl7Zm9yKDsoZT09PXZvaWQgMHx8ZS0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylzLnB1c2goci52YWx1ZSl9Y2F0Y2gobyl7bj17ZXJyb3I6b319ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGE9aS5yZXR1cm4pJiZhLmNhbGwoaSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBzfWZ1bmN0aW9uIGZ6dCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KFcxKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fWZ1bmN0aW9uIG16dCgpe2Zvcih2YXIgdD0wLGU9MCxhPWFyZ3VtZW50cy5sZW5ndGg7ZTxhO2UrKyl0Kz1hcmd1bWVudHNbZV0ubGVuZ3RoO2Zvcih2YXIgaT1BcnJheSh0KSxyPTAsZT0wO2U8YTtlKyspZm9yKHZhciBzPWFyZ3VtZW50c1tlXSxuPTAsbz1zLmxlbmd0aDtuPG87bisrLHIrKylpW3JdPXNbbl07cmV0dXJuIGl9ZnVuY3Rpb24gdzIodCxlLGEpe2lmKGF8fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgaT0wLHI9ZS5sZW5ndGgscztpPHI7aSsrKShzfHwhKGkgaW4gZSkpJiYoc3x8KHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwLGkpKSxzW2ldPWVbaV0pO3JldHVybiB0LmNvbmNhdChzfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9ZnVuY3Rpb24gc3ModCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBzcz8odGhpcy52PXQsdGhpcyk6bmV3IHNzKHQpfWZ1bmN0aW9uIEd3KHQsZSxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGk9YS5hcHBseSh0LGV8fFtdKSxyLHM9W107cmV0dXJuIHI9T2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3I9PSJmdW5jdGlvbiI/QXN5bmNJdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSksbygibmV4dCIpLG8oInRocm93IiksbygicmV0dXJuIixuKSxyW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIG4oZyl7cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihnLGwpfX1mdW5jdGlvbiBvKGcseSl7aVtnXSYmKHJbZ109ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG0seCl7cy5wdXNoKFtnLHYsbSx4XSk+MXx8ZChnLHYpfSl9LHkmJihyW2ddPXkocltnXSkpKX1mdW5jdGlvbiBkKGcseSl7dHJ5e2MoaVtnXSh5KSl9Y2F0Y2godil7ZihzWzBdWzNdLHYpfX1mdW5jdGlvbiBjKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBzcz9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKHAsbCk6ZihzWzBdWzJdLGcpfWZ1bmN0aW9uIHAoZyl7ZCgibmV4dCIsZyl9ZnVuY3Rpb24gbChnKXtkKCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZihnLHkpe2coeSkscy5zaGlmdCgpLHMubGVuZ3RoJiZkKHNbMF1bMF0sc1swXVsxXSl9fWZ1bmN0aW9uIGd6dCh0KXt2YXIgZSxhO3JldHVybiBlPXt9LGkoIm5leHQiKSxpKCJ0aHJvdyIsZnVuY3Rpb24ocil7dGhyb3cgcn0pLGkoInJldHVybiIpLGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlO2Z1bmN0aW9uIGkocixzKXtlW3JdPXRbcl0/ZnVuY3Rpb24obil7cmV0dXJuKGE9IWEpP3t2YWx1ZTpzcyh0W3JdKG4pKSxkb25lOiExfTpzP3Mobik6bn06c319ZnVuY3Rpb24gWXcodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlPXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLGE7cmV0dXJuIGU/ZS5jYWxsKHQpOih0PXR5cGVvZiBGMj09ImZ1bmN0aW9uIj9GMih0KTp0W1N5bWJvbC5pdGVyYXRvcl0oKSxhPXt9LGkoIm5leHQiKSxpKCJ0aHJvdyIpLGkoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGkocyl7YVtzXT10W3NdJiZmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxkKXtuPXRbc10obikscihvLGQsbi5kb25lLG4udmFsdWUpfSl9fWZ1bmN0aW9uIHIocyxuLG8sZCl7UHJvbWlzZS5yZXNvbHZlKGQpLnRoZW4oZnVuY3Rpb24oYyl7cyh7dmFsdWU6Yyxkb25lOm99KX0sbil9fWZ1bmN0aW9uIGJ6dCh0LGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJhdyIse3ZhbHVlOmV9KTp0LnJhdz1lLHR9ZnVuY3Rpb24geXp0KHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgYT1Vdyh0KSxpPTA7aTxhLmxlbmd0aDtpKyspYVtpXSE9PSJkZWZhdWx0IiYmancoZSx0LGFbaV0pO3JldHVybiB2enQoZSx0KSxlfWZ1bmN0aW9uIHh6dCh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19ZnVuY3Rpb24gd3p0KHQsZSxhLGkpe2lmKGE9PT0iYSImJiFpKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3QhPT1lfHwhaTohZS5oYXModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIGE9PT0ibSI/aTphPT09ImEiP2kuY2FsbCh0KTppP2kudmFsdWU6ZS5nZXQodCl9ZnVuY3Rpb24gTXp0KHQsZSxhLGkscil7aWYoaT09PSJtIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZihpPT09ImEiJiYhcil0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIj90IT09ZXx8IXI6IWUuaGFzKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIGk9PT0iYSI/ci5jYWxsKHQsYSk6cj9yLnZhbHVlPWE6ZS5zZXQodCxhKSxhfWZ1bmN0aW9uIHp6dCh0LGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCImJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP2U9PT10OnQuaGFzKGUpfWZ1bmN0aW9uIGt6dCh0LGUsYSl7aWYoZSE9bnVsbCl7aWYodHlwZW9mIGUhPSJvYmplY3QiJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQuIik7dmFyIGkscjtpZihhKXtpZighU3ltYm9sLmFzeW5jRGlzcG9zZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpO2k9ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXX1pZihpPT09dm9pZCAwKXtpZighU3ltYm9sLmRpc3Bvc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuIik7aT1lW1N5bWJvbC5kaXNwb3NlXSxhJiYocj1pKX1pZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuIik7ciYmKGk9ZnVuY3Rpb24oKXt0cnl7ci5jYWxsKHRoaXMpfWNhdGNoKHMpe3JldHVybiBQcm9taXNlLnJlamVjdChzKX19KSx0LnN0YWNrLnB1c2goe3ZhbHVlOmUsZGlzcG9zZTppLGFzeW5jOmF9KX1lbHNlIGEmJnQuc3RhY2sucHVzaCh7YXN5bmM6ITB9KTtyZXR1cm4gZX1mdW5jdGlvbiBDenQodCl7ZnVuY3Rpb24gZShzKXt0LmVycm9yPXQuaGFzRXJyb3I/bmV3IFN6dChzLHQuZXJyb3IsIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKTpzLHQuaGFzRXJyb3I9ITB9dmFyIGEsaT0wO2Z1bmN0aW9uIHIoKXtmb3IoO2E9dC5zdGFjay5wb3AoKTspdHJ5e2lmKCFhLmFzeW5jJiZpPT09MSlyZXR1cm4gaT0wLHQuc3RhY2sucHVzaChhKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKHIpO2lmKGEuZGlzcG9zZSl7dmFyIHM9YS5kaXNwb3NlLmNhbGwoYS52YWx1ZSk7aWYoYS5hc3luYylyZXR1cm4gaXw9MixQcm9taXNlLnJlc29sdmUocykudGhlbihyLGZ1bmN0aW9uKG4pe3JldHVybiBlKG4pLHIoKX0pfWVsc2UgaXw9MX1jYXRjaChuKXtlKG4pfWlmKGk9PT0xKXJldHVybiB0Lmhhc0Vycm9yP1Byb21pc2UucmVqZWN0KHQuZXJyb3IpOlByb21pc2UucmVzb2x2ZSgpO2lmKHQuaGFzRXJyb3IpdGhyb3cgdC5lcnJvcn1yZXR1cm4gcigpfWZ1bmN0aW9uIF96dCh0LGUpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJi9eXC5cLj9cLy8udGVzdCh0KT90LnJlcGxhY2UoL1wuKHRzeCkkfCgoPzpcLmQpPykoKD86XC5bXi4vXSs/KT8pXC4oW2NtXT8pdHMkL2ksZnVuY3Rpb24oYSxpLHIscyxuKXtyZXR1cm4gaT9lPyIuanN4IjoiLmpzIjpyJiYoIXN8fCFuKT9hOnIrcysiLiIrbi50b0xvd2VyQ2FzZSgpKyJqcyJ9KTp0fXZhciBxdyxWdyxqdyx2enQsVXcsU3p0LFJXdCxyMT1iKCgpPT57cXc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcXc9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGEsaSl7YS5fX3Byb3RvX189aX18fGZ1bmN0aW9uKGEsaSl7Zm9yKHZhciByIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscikmJihhW3JdPWlbcl0pfSxxdyh0LGUpfTtWdz1mdW5jdGlvbigpe3JldHVybiBWdz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIGEsaT0xLHI9YXJndW1lbnRzLmxlbmd0aDtpPHI7aSsrKXthPWFyZ3VtZW50c1tpXTtmb3IodmFyIHMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxzKSYmKGVbc109YVtzXSl9cmV0dXJuIGV9LFZ3LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07anc9T2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlLGEsaSl7aT09PXZvaWQgMCYmKGk9YSk7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGEpOyghcnx8KCJnZXQiaW4gcj8hZS5fX2VzTW9kdWxlOnIud3JpdGFibGV8fHIuY29uZmlndXJhYmxlKSkmJihyPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW2FdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkscil9KTooZnVuY3Rpb24odCxlLGEsaSl7aT09PXZvaWQgMCYmKGk9YSksdFtpXT1lW2FdfSk7dnp0PU9iamVjdC5jcmVhdGU/KGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KX0pOmZ1bmN0aW9uKHQsZSl7dC5kZWZhdWx0PWV9LFV3PWZ1bmN0aW9uKHQpe3JldHVybiBVdz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7dmFyIGE9W107Zm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJihhW2EubGVuZ3RoXT1pKTtyZXR1cm4gYX0sVXcodCl9O1N6dD10eXBlb2YgU3VwcHJlc3NlZEVycm9yPT0iZnVuY3Rpb24iP1N1cHByZXNzZWRFcnJvcjpmdW5jdGlvbih0LGUsYSl7dmFyIGk9bmV3IEVycm9yKGEpO3JldHVybiBpLm5hbWU9IlN1cHByZXNzZWRFcnJvciIsaS5lcnJvcj10LGkuc3VwcHJlc3NlZD1lLGl9O1JXdD17X19leHRlbmRzOkN0LF9fYXNzaWduOlZ3LF9fcmVzdDpzenQsX19kZWNvcmF0ZTpuenQsX19wYXJhbTpvenQsX19lc0RlY29yYXRlOmx6dCxfX3J1bkluaXRpYWxpemVyczpjenQsX19wcm9wS2V5OmR6dCxfX3NldEZ1bmN0aW9uTmFtZTpwenQsX19tZXRhZGF0YTpoenQsX19hd2FpdGVyOld3LF9fZ2VuZXJhdG9yOmhjLF9fY3JlYXRlQmluZGluZzpqdyxfX2V4cG9ydFN0YXI6dXp0LF9fdmFsdWVzOkYyLF9fcmVhZDpXMSxfX3NwcmVhZDpmenQsX19zcHJlYWRBcnJheXM6bXp0LF9fc3ByZWFkQXJyYXk6dzIsX19hd2FpdDpzcyxfX2FzeW5jR2VuZXJhdG9yOkd3LF9fYXN5bmNEZWxlZ2F0b3I6Z3p0LF9fYXN5bmNWYWx1ZXM6WXcsX19tYWtlVGVtcGxhdGVPYmplY3Q6Ynp0LF9faW1wb3J0U3Rhcjp5enQsX19pbXBvcnREZWZhdWx0Onh6dCxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Ond6dCxfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0Ok16dCxfX2NsYXNzUHJpdmF0ZUZpZWxkSW46enp0LF9fYWRkRGlzcG9zYWJsZVJlc291cmNlOmt6dCxfX2Rpc3Bvc2VSZXNvdXJjZXM6Q3p0LF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uOl96dH19KTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiJ9dmFyIHAyPWIoKCk9Pnt9KTtmdW5jdGlvbiBTYSh0KXt2YXIgZT1mdW5jdGlvbihpKXtFcnJvci5jYWxsKGkpLGkuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t9LGE9dChlKTtyZXR1cm4gYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsYX12YXIgZG49YigoKT0+e30pO3ZhciB1Yyxadz1iKCgpPT57ZG4oKTt1Yz1TYShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oYSl7dCh0aGlzKSx0aGlzLm1lc3NhZ2U9YT9hLmxlbmd0aCtgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246CmArYS5tYXAoZnVuY3Rpb24oaSxyKXtyZXR1cm4gcisxKyIpICIraS50b1N0cmluZygpfSkuam9pbihgCiAgYCk6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfX0pfSk7ZnVuY3Rpb24gRGkodCxlKXtpZih0KXt2YXIgYT10LmluZGV4T2YoZSk7MDw9YSYmdC5zcGxpY2UoYSwxKX19dmFyIF80PWIoKCk9Pnt9KTtmdW5jdGlvbiBUZCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE8xfHx0JiYiY2xvc2VkImluIHQmJnV0KHQucmVtb3ZlKSYmdXQodC5hZGQpJiZ1dCh0LnVuc3Vic2NyaWJlKX1mdW5jdGlvbiBHVSh0KXt1dCh0KT90KCk6dC51bnN1YnNjcmliZSgpfXZhciBPMSxYdyxtcj1iKCgpPT57cjEoKTtwMigpO1p3KCk7XzQoKTtPMT0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWUsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciBlLGEsaSxyLHM7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDt2YXIgbj10aGlzLl9wYXJlbnRhZ2U7aWYobilpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KG4pKXRyeXtmb3IodmFyIG89RjIobiksZD1vLm5leHQoKTshZC5kb25lO2Q9by5uZXh0KCkpe3ZhciBjPWQudmFsdWU7Yy5yZW1vdmUodGhpcyl9fWNhdGNoKHYpe2U9e2Vycm9yOnZ9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihhPW8ucmV0dXJuKSYmYS5jYWxsKG8pfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1lbHNlIG4ucmVtb3ZlKHRoaXMpO3ZhciBwPXRoaXMuaW5pdGlhbFRlYXJkb3duO2lmKHV0KHApKXRyeXtwKCl9Y2F0Y2godil7cz12IGluc3RhbmNlb2YgdWM/di5lcnJvcnM6W3ZdfXZhciBsPXRoaXMuX2ZpbmFsaXplcnM7aWYobCl7dGhpcy5fZmluYWxpemVycz1udWxsO3RyeXtmb3IodmFyIGY9RjIobCksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpe3ZhciB5PWcudmFsdWU7dHJ5e0dVKHkpfWNhdGNoKHYpe3M9cz8/W10sdiBpbnN0YW5jZW9mIHVjP3M9dzIodzIoW10sVzEocykpLFcxKHYuZXJyb3JzKSk6cy5wdXNoKHYpfX19Y2F0Y2godil7aT17ZXJyb3I6dn19ZmluYWxseXt0cnl7ZyYmIWcuZG9uZSYmKHI9Zi5yZXR1cm4pJiZyLmNhbGwoZil9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fX1pZihzKXRocm93IG5ldyB1YyhzKX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgYTtpZihlJiZlIT09dGhpcylpZih0aGlzLmNsb3NlZClHVShlKTtlbHNle2lmKGUgaW5zdGFuY2VvZiB0KXtpZihlLmNsb3NlZHx8ZS5faGFzUGFyZW50KHRoaXMpKXJldHVybjtlLl9hZGRQYXJlbnQodGhpcyl9KHRoaXMuX2ZpbmFsaXplcnM9KGE9dGhpcy5fZmluYWxpemVycykhPT1udWxsJiZhIT09dm9pZCAwP2E6W10pLnB1c2goZSl9fSx0LnByb3RvdHlwZS5faGFzUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMuX3BhcmVudGFnZTtyZXR1cm4gYT09PWV8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMoZSl9LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24oZSl7dmFyIGE9dGhpcy5fcGFyZW50YWdlO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2goZSksYSk6YT9bYSxlXTplfSx0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMuX3BhcmVudGFnZTthPT09ZT90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGEpJiZEaShhLGUpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIGE9dGhpcy5fZmluYWxpemVyczthJiZEaShhLGUpLGUgaW5zdGFuY2VvZiB0JiZlLl9yZW1vdmVQYXJlbnQodGhpcyl9LHQuRU1QVFk9KGZ1bmN0aW9uKCl7dmFyIGU9bmV3IHQ7cmV0dXJuIGUuY2xvc2VkPSEwLGV9KSgpLHR9KSgpLFh3PU8xLkVNUFRZfSk7dmFyIGlpLFQ0PWIoKCk9PntpaT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfX0pO3ZhciBMNCxLdz1iKCgpPT57cjEoKTtMND17c2V0VGltZW91dDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgYT1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKylhW2ktMl09YXJndW1lbnRzW2ldO3ZhciByPUw0LmRlbGVnYXRlO3JldHVybiByPy5zZXRUaW1lb3V0P3Iuc2V0VGltZW91dC5hcHBseShyLHcyKFt0LGVdLFcxKGEpKSk6c2V0VGltZW91dC5hcHBseSh2b2lkIDAsdzIoW3QsZV0sVzEoYSkpKX0sY2xlYXJUaW1lb3V0OmZ1bmN0aW9uKHQpe3ZhciBlPUw0LmRlbGVnYXRlO3JldHVybihlPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkodCl9LGRlbGVnYXRlOnZvaWQgMH19KTtmdW5jdGlvbiBMZCh0KXtMNC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9aWkub25VbmhhbmRsZWRFcnJvcjtpZihlKWUodCk7ZWxzZSB0aHJvdyB0fSl9dmFyIFF3PWIoKCk9PntUNCgpO0t3KCl9KTtmdW5jdGlvbiByaSgpe312YXIgRW89YigoKT0+e30pO2Z1bmN0aW9uIFpVKHQpe3JldHVybiBKdygiRSIsdm9pZCAwLHQpfWZ1bmN0aW9uIFhVKHQpe3JldHVybiBKdygiTiIsdCx2b2lkIDApfWZ1bmN0aW9uIEp3KHQsZSxhKXtyZXR1cm57a2luZDp0LHZhbHVlOmUsZXJyb3I6YX19dmFyIFlVLEtVPWIoKCk9PntZVT0oZnVuY3Rpb24oKXtyZXR1cm4gSncoIkMiLHZvaWQgMCx2b2lkIDApfSkoKX0pO2Z1bmN0aW9uICQ0KHQpe2lmKGlpLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe3ZhciBlPSFQbztpZihlJiYoUG89e2Vycm9yVGhyb3duOiExLGVycm9yOm51bGx9KSx0KCksZSl7dmFyIGE9UG8saT1hLmVycm9yVGhyb3duLHI9YS5lcnJvcjtpZihQbz1udWxsLGkpdGhyb3cgcn19ZWxzZSB0KCl9ZnVuY3Rpb24gUVUodCl7aWkudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmUG8mJihQby5lcnJvclRocm93bj0hMCxQby5lcnJvcj10KX12YXIgUG8sJGQ9YigoKT0+e1Q0KCk7UG89bnVsbH0pO2Z1bmN0aW9uIGVNKHQsZSl7cmV0dXJuIFR6dC5jYWxsKHQsZSl9ZnVuY3Rpb24gQWQodCl7aWkudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz9RVSh0KTpMZCh0KX1mdW5jdGlvbiAkenQodCl7dGhyb3cgdH1mdW5jdGlvbiB0TSh0LGUpe3ZhciBhPWlpLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjthJiZMNC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGEodCxlKX0pfXZhciBJbyxUenQsTHp0LGZjLEF6dCxEZD1iKCgpPT57cjEoKTtwMigpO21yKCk7VDQoKTtRdygpO0VvKCk7S1UoKTtLdygpOyRkKCk7SW89KGZ1bmN0aW9uKHQpe0N0KGUsdCk7ZnVuY3Rpb24gZShhKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuaXNTdG9wcGVkPSExLGE/KGkuZGVzdGluYXRpb249YSxUZChhKSYmYS5hZGQoaSkpOmkuZGVzdGluYXRpb249QXp0LGl9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKGEsaSxyKXtyZXR1cm4gbmV3IGZjKGEsaSxyKX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt0aGlzLmlzU3RvcHBlZD90TShYVShhKSx0aGlzKTp0aGlzLl9uZXh0KGEpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihhKXt0aGlzLmlzU3RvcHBlZD90TShaVShhKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IoYSkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkP3RNKFlVLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24oYSl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGEpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24oYSl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IoYSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX0sZX0pKE8xKSxUenQ9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7THp0PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpcy5wYXJ0aWFsT2JzZXJ2ZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt2YXIgYT10aGlzLnBhcnRpYWxPYnNlcnZlcjtpZihhLm5leHQpdHJ5e2EubmV4dChlKX1jYXRjaChpKXtBZChpKX19LHQucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMucGFydGlhbE9ic2VydmVyO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IoZSl9Y2F0Y2goaSl7QWQoaSl9ZWxzZSBBZChlKX0sdC5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcnRpYWxPYnNlcnZlcjtpZihlLmNvbXBsZXRlKXRyeXtlLmNvbXBsZXRlKCl9Y2F0Y2goYSl7QWQoYSl9fSx0fSkoKSxmYz0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSxyKXt2YXIgcz10LmNhbGwodGhpcyl8fHRoaXMsbjtpZih1dChhKXx8IWEpbj17bmV4dDphPz92b2lkIDAsZXJyb3I6aT8/dm9pZCAwLGNvbXBsZXRlOnI/P3ZvaWQgMH07ZWxzZXt2YXIgbztzJiZpaS51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/KG89T2JqZWN0LmNyZWF0ZShhKSxvLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7cmV0dXJuIHMudW5zdWJzY3JpYmUoKX0sbj17bmV4dDphLm5leHQmJmVNKGEubmV4dCxvKSxlcnJvcjphLmVycm9yJiZlTShhLmVycm9yLG8pLGNvbXBsZXRlOmEuY29tcGxldGUmJmVNKGEuY29tcGxldGUsbyl9KTpuPWF9cmV0dXJuIHMuZGVzdGluYXRpb249bmV3IEx6dChuKSxzfXJldHVybiBlfSkoSW8pO0F6dD17Y2xvc2VkOiEwLG5leHQ6cmksZXJyb3I6JHp0LGNvbXBsZXRlOnJpfX0pO3ZhciBObyxtYz1iKCgpPT57Tm89KGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIn0pKCl9KTtmdW5jdGlvbiBnYyh0KXtyZXR1cm4gdH12YXIgRWQ9YigoKT0+e30pO2Z1bmN0aW9uIER6dCgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYU0odCl9ZnVuY3Rpb24gYU0odCl7cmV0dXJuIHQubGVuZ3RoPT09MD9nYzp0Lmxlbmd0aD09PTE/dFswXTpmdW5jdGlvbihhKXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24oaSxyKXtyZXR1cm4gcihpKX0sYSl9fXZhciBpTT1iKCgpPT57RWQoKX0pO2Z1bmN0aW9uIEpVKHQpe3ZhciBlO3JldHVybihlPXQ/P2lpLlByb21pc2UpIT09bnVsbCYmZSE9PXZvaWQgMD9lOlByb21pc2V9ZnVuY3Rpb24gRXp0KHQpe3JldHVybiB0JiZ1dCh0Lm5leHQpJiZ1dCh0LmVycm9yKSYmdXQodC5jb21wbGV0ZSl9ZnVuY3Rpb24gUHp0KHQpe3JldHVybiB0JiZ0IGluc3RhbmNlb2YgSW98fEV6dCh0KSYmVGQodCl9dmFyIE10LENhPWIoKCk9PntEZCgpO21yKCk7bWMoKTtpTSgpO1Q0KCk7cDIoKTskZCgpO010PShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlmdD1mdW5jdGlvbihlKXt2YXIgYT1uZXcgdDtyZXR1cm4gYS5zb3VyY2U9dGhpcyxhLm9wZXJhdG9yPWUsYX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUsYSxpKXt2YXIgcj10aGlzLHM9UHp0KGUpP2U6bmV3IGZjKGUsYSxpKTtyZXR1cm4gJDQoZnVuY3Rpb24oKXt2YXIgbj1yLG89bi5vcGVyYXRvcixkPW4uc291cmNlO3MuYWRkKG8/by5jYWxsKHMsZCk6ZD9yLl9zdWJzY3JpYmUocyk6ci5fdHJ5U3Vic2NyaWJlKHMpKX0pLHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoZSl9Y2F0Y2goYSl7ZS5lcnJvcihhKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSxhKXt2YXIgaT10aGlzO3JldHVybiBhPUpVKGEpLG5ldyBhKGZ1bmN0aW9uKHIscyl7dmFyIG49bmV3IGZjKHtuZXh0OmZ1bmN0aW9uKG8pe3RyeXtlKG8pfWNhdGNoKGQpe3MoZCksbi51bnN1YnNjcmliZSgpfX0sZXJyb3I6cyxjb21wbGV0ZTpyfSk7aS5zdWJzY3JpYmUobil9KX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgYTtyZXR1cm4oYT10aGlzLnNvdXJjZSk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLnN1YnNjcmliZShlKX0sdC5wcm90b3R5cGVbTm9dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspZVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGFNKGUpKHRoaXMpfSx0LnByb3RvdHlwZS50b1Byb21pc2U9ZnVuY3Rpb24oZSl7dmFyIGE9dGhpcztyZXR1cm4gZT1KVShlKSxuZXcgZShmdW5jdGlvbihpLHIpe3ZhciBzO2Euc3Vic2NyaWJlKGZ1bmN0aW9uKG4pe3JldHVybiBzPW59LGZ1bmN0aW9uKG4pe3JldHVybiByKG4pfSxmdW5jdGlvbigpe3JldHVybiBpKHMpfSl9KX0sdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0fSkoKX0pO2Z1bmN0aW9uIHJNKHQpe3JldHVybiB1dCh0Py5saWZ0KX1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYock0oZSkpcmV0dXJuIGUubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIHQoYSx0aGlzKX1jYXRjaChpKXt0aGlzLmVycm9yKGkpfX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fXZhciBNMj1iKCgpPT57cDIoKX0pO2Z1bmN0aW9uIFZ0KHQsZSxhLGkscil7cmV0dXJuIG5ldyBlVyh0LGUsYSxpLHIpfXZhciBlVyxuYT1iKCgpPT57cjEoKTtEZCgpO2VXPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSxpLHIscyxuLG8pe3ZhciBkPXQuY2FsbCh0aGlzLGEpfHx0aGlzO3JldHVybiBkLm9uRmluYWxpemU9bixkLnNob3VsZFVuc3Vic2NyaWJlPW8sZC5fbmV4dD1pP2Z1bmN0aW9uKGMpe3RyeXtpKGMpfWNhdGNoKHApe2EuZXJyb3IocCl9fTp0LnByb3RvdHlwZS5fbmV4dCxkLl9lcnJvcj1zP2Z1bmN0aW9uKGMpe3RyeXtzKGMpfWNhdGNoKHApe2EuZXJyb3IocCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTp0LnByb3RvdHlwZS5fZXJyb3IsZC5fY29tcGxldGU9cj9mdW5jdGlvbigpe3RyeXtyKCl9Y2F0Y2goYyl7YS5lcnJvcihjKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnQucHJvdG90eXBlLl9jb21wbGV0ZSxkfXJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciBhO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe3ZhciBpPXRoaXMuY2xvc2VkO3QucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIWkmJigoYT10aGlzLm9uRmluYWxpemUpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5jYWxsKHRoaXMpKX19LGV9KShJbyl9KTtmdW5jdGlvbiBQZCgpe3JldHVybiBRdChmdW5jdGlvbih0LGUpe3ZhciBhPW51bGw7dC5fcmVmQ291bnQrKzt2YXIgaT1WdChlLHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7aWYoIXR8fHQuX3JlZkNvdW50PD0wfHwwPC0tdC5fcmVmQ291bnQpe2E9bnVsbDtyZXR1cm59dmFyIHI9dC5fY29ubmVjdGlvbixzPWE7YT1udWxsLHImJighc3x8cj09PXMpJiZyLnVuc3Vic2NyaWJlKCksZS51bnN1YnNjcmliZSgpfSk7dC5zdWJzY3JpYmUoaSksaS5jbG9zZWR8fChhPXQuY29ubmVjdCgpKX0pfXZhciBJZD1iKCgpPT57TTIoKTtuYSgpfSk7dmFyIHRXLGFXPWIoKCk9PntyMSgpO0NhKCk7bXIoKTtJZCgpO25hKCk7TTIoKTt0Vz0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnNvdXJjZT1hLHIuc3ViamVjdEZhY3Rvcnk9aSxyLl9zdWJqZWN0PW51bGwsci5fcmVmQ291bnQ9MCxyLl9jb25uZWN0aW9uPW51bGwsck0oYSkmJihyLmxpZnQ9YS5saWZ0KSxyfXJldHVybiBlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoYSl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdWJqZWN0O3JldHVybighYXx8YS5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLl90ZWFyZG93bj1mdW5jdGlvbigpe3RoaXMuX3JlZkNvdW50PTA7dmFyIGE9dGhpcy5fY29ubmVjdGlvbjt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxhPy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxpPXRoaXMuX2Nvbm5lY3Rpb247aWYoIWkpe2k9dGhpcy5fY29ubmVjdGlvbj1uZXcgTzE7dmFyIHI9dGhpcy5nZXRTdWJqZWN0KCk7aS5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKFZ0KHIsdm9pZCAwLGZ1bmN0aW9uKCl7YS5fdGVhcmRvd24oKSxyLmNvbXBsZXRlKCl9LGZ1bmN0aW9uKHMpe2EuX3RlYXJkb3duKCksci5lcnJvcihzKX0sZnVuY3Rpb24oKXtyZXR1cm4gYS5fdGVhcmRvd24oKX0pKSksaS5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsaT1PMS5FTVBUWSl9cmV0dXJuIGl9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIFBkKCkodGhpcyl9LGV9KShNdCl9KTt2YXIgc00saVc9YigoKT0+e3NNPXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4oc00uZGVsZWdhdGV8fHBlcmZvcm1hbmNlKS5ub3coKX0sZGVsZWdhdGU6dm9pZCAwfX0pO3ZhciBucyxuTT1iKCgpPT57cjEoKTttcigpO25zPXtzY2hlZHVsZTpmdW5jdGlvbih0KXt2YXIgZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZSxpPW5zLmRlbGVnYXRlO2kmJihlPWkucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9aS5jYW5jZWxBbmltYXRpb25GcmFtZSk7dmFyIHI9ZShmdW5jdGlvbihzKXthPXZvaWQgMCx0KHMpfSk7cmV0dXJuIG5ldyBPMShmdW5jdGlvbigpe3JldHVybiBhPy4ocil9KX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBhPW5zLmRlbGVnYXRlO3JldHVybihhPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLHcyKFtdLFcxKHQpKSl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBhPW5zLmRlbGVnYXRlO3JldHVybihhPy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCx3MihbXSxXMSh0KSkpfSxkZWxlZ2F0ZTp2b2lkIDB9fSk7ZnVuY3Rpb24gSXp0KHQpe3JldHVybiB0P3JXKHQpOk56dH1mdW5jdGlvbiByVyh0KXtyZXR1cm4gbmV3IE10KGZ1bmN0aW9uKGUpe3ZhciBhPXR8fHNNLGk9YS5ub3coKSxyPTAscz1mdW5jdGlvbigpe2UuY2xvc2VkfHwocj1ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24obil7cj0wO3ZhciBvPWEubm93KCk7ZS5uZXh0KHt0aW1lc3RhbXA6dD9vOm4sZWxhcHNlZDpvLWl9KSxzKCl9KSl9O3JldHVybiBzKCksZnVuY3Rpb24oKXtyJiZucy5jYW5jZWxBbmltYXRpb25GcmFtZShyKX19KX12YXIgTnp0LHNXPWIoKCk9PntDYSgpO2lXKCk7bk0oKTtOenQ9clcoKX0pO3ZhciBvTSxsTT1iKCgpPT57ZG4oKTtvTT1TYShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0KHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9fSl9KTt2YXIgX2EsY00sYmM9YigoKT0+e3IxKCk7Q2EoKTttcigpO2xNKCk7XzQoKTskZCgpO19hPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoKXt2YXIgYT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGEuY2xvc2VkPSExLGEuY3VycmVudE9ic2VydmVycz1udWxsLGEub2JzZXJ2ZXJzPVtdLGEuaXNTdG9wcGVkPSExLGEuaGFzRXJyb3I9ITEsYS50aHJvd25FcnJvcj1udWxsLGF9cmV0dXJuIGUucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oYSl7dmFyIGk9bmV3IGNNKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9YSxpfSxlLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZD1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBvTX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt2YXIgaT10aGlzOyQ0KGZ1bmN0aW9uKCl7dmFyIHIscztpZihpLl90aHJvd0lmQ2xvc2VkKCksIWkuaXNTdG9wcGVkKXtpLmN1cnJlbnRPYnNlcnZlcnN8fChpLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbShpLm9ic2VydmVycykpO3RyeXtmb3IodmFyIG49RjIoaS5jdXJyZW50T2JzZXJ2ZXJzKSxvPW4ubmV4dCgpOyFvLmRvbmU7bz1uLm5leHQoKSl7dmFyIGQ9by52YWx1ZTtkLm5leHQoYSl9fWNhdGNoKGMpe3I9e2Vycm9yOmN9fWZpbmFsbHl7dHJ5e28mJiFvLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX19fSl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGEpe3ZhciBpPXRoaXM7JDQoZnVuY3Rpb24oKXtpZihpLl90aHJvd0lmQ2xvc2VkKCksIWkuaXNTdG9wcGVkKXtpLmhhc0Vycm9yPWkuaXNTdG9wcGVkPSEwLGkudGhyb3duRXJyb3I9YTtmb3IodmFyIHI9aS5vYnNlcnZlcnM7ci5sZW5ndGg7KXIuc2hpZnQoKS5lcnJvcihhKX19KX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzOyQ0KGZ1bmN0aW9uKCl7aWYoYS5fdGhyb3dJZkNsb3NlZCgpLCFhLmlzU3RvcHBlZCl7YS5pc1N0b3BwZWQ9ITA7Zm9yKHZhciBpPWEub2JzZXJ2ZXJzO2kubGVuZ3RoOylpLnNoaWZ0KCkuY29tcGxldGUoKX19KX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJvYnNlcnZlZCIse2dldDpmdW5jdGlvbigpe3ZhciBhO3JldHVybigoYT10aGlzLm9ic2VydmVycyk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmxlbmd0aCk+MH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsYSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGEpfSxlLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmU9ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcyxyPXRoaXMscz1yLmhhc0Vycm9yLG49ci5pc1N0b3BwZWQsbz1yLm9ic2VydmVycztyZXR1cm4gc3x8bj9YdzoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGEpLG5ldyBPMShmdW5jdGlvbigpe2kuY3VycmVudE9ic2VydmVycz1udWxsLERpKG8sYSl9KSl9LGUucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzPWZ1bmN0aW9uKGEpe3ZhciBpPXRoaXMscj1pLmhhc0Vycm9yLHM9aS50aHJvd25FcnJvcixuPWkuaXNTdG9wcGVkO3I/YS5lcnJvcihzKTpuJiZhLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciBhPW5ldyBNdDtyZXR1cm4gYS5zb3VyY2U9dGhpcyxhfSxlLmNyZWF0ZT1mdW5jdGlvbihhLGkpe3JldHVybiBuZXcgY00oYSxpKX0sZX0pKE10KSxjTT0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmRlc3RpbmF0aW9uPWEsci5zb3VyY2U9aSxyfXJldHVybiBlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKGEpe3ZhciBpLHI7KHI9KGk9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm5leHQpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5jYWxsKGksYSl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGEpe3ZhciBpLHI7KHI9KGk9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmVycm9yKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChpLGEpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBhLGk7KGk9KGE9dGhpcy5kZXN0aW5hdGlvbik9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmNvbXBsZXRlKT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChhKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihhKXt2YXIgaSxyO3JldHVybihyPShpPXRoaXMuc291cmNlKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuc3Vic2NyaWJlKGEpKSE9PW51bGwmJnIhPT12b2lkIDA/cjpYd30sZX0pKF9hKX0pO3ZhciBuVyxvVz1iKCgpPT57cjEoKTtiYygpO25XPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl92YWx1ZT1hLGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oYSl7dmFyIGk9dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsYSk7cmV0dXJuIWkuY2xvc2VkJiZhLm5leHQodGhpcy5fdmFsdWUpLGl9LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxpPWEuaGFzRXJyb3Iscj1hLnRocm93bkVycm9yLHM9YS5fdmFsdWU7aWYoaSl0aHJvdyByO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1hKX0sZX0pKF9hKX0pO3ZhciB2YyxkTT1iKCgpPT57dmM9e25vdzpmdW5jdGlvbigpe3JldHVybih2Yy5kZWxlZ2F0ZXx8RGF0ZSkubm93KCl9LGRlbGVnYXRlOnZvaWQgMH19KTt2YXIgTmQsbFc9YigoKT0+e3IxKCk7YmMoKTtkTSgpO05kPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSxpLHIpe2E9PT12b2lkIDAmJihhPTEvMCksaT09PXZvaWQgMCYmKGk9MS8wKSxyPT09dm9pZCAwJiYocj12Yyk7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLl9idWZmZXJTaXplPWEscy5fd2luZG93VGltZT1pLHMuX3RpbWVzdGFtcFByb3ZpZGVyPXIscy5fYnVmZmVyPVtdLHMuX2luZmluaXRlVGltZVdpbmRvdz0hMCxzLl9pbmZpbml0ZVRpbWVXaW5kb3c9aT09PTEvMCxzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsYSkscy5fd2luZG93VGltZT1NYXRoLm1heCgxLGkpLHN9cmV0dXJuIGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcyxyPWkuaXNTdG9wcGVkLHM9aS5fYnVmZmVyLG49aS5faW5maW5pdGVUaW1lV2luZG93LG89aS5fdGltZXN0YW1wUHJvdmlkZXIsZD1pLl93aW5kb3dUaW1lO3J8fChzLnB1c2goYSksIW4mJnMucHVzaChvLm5vdygpK2QpKSx0aGlzLl90cmltQnVmZmVyKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsYSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oYSl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtmb3IodmFyIGk9dGhpcy5faW5uZXJTdWJzY3JpYmUoYSkscj10aGlzLHM9ci5faW5maW5pdGVUaW1lV2luZG93LG49ci5fYnVmZmVyLG89bi5zbGljZSgpLGQ9MDtkPG8ubGVuZ3RoJiYhYS5jbG9zZWQ7ZCs9cz8xOjIpYS5uZXh0KG9bZF0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpLGl9LGUucHJvdG90eXBlLl90cmltQnVmZmVyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxpPWEuX2J1ZmZlclNpemUscj1hLl90aW1lc3RhbXBQcm92aWRlcixzPWEuX2J1ZmZlcixuPWEuX2luZmluaXRlVGltZVdpbmRvdyxvPShuPzE6MikqaTtpZihpPDEvMCYmbzxzLmxlbmd0aCYmcy5zcGxpY2UoMCxzLmxlbmd0aC1vKSwhbil7Zm9yKHZhciBkPXIubm93KCksYz0wLHA9MTtwPHMubGVuZ3RoJiZzW3BdPD1kO3ArPTIpYz1wO2MmJnMuc3BsaWNlKDAsYysxKX19LGV9KShfYSl9KTt2YXIgY1csZFc9YigoKT0+e3IxKCk7YmMoKTtjVz0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKCl7dmFyIGE9dCE9PW51bGwmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBhLl92YWx1ZT1udWxsLGEuX2hhc1ZhbHVlPSExLGEuX2lzQ29tcGxldGU9ITEsYX1yZXR1cm4gZS5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXM9ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcyxyPWkuaGFzRXJyb3Iscz1pLl9oYXNWYWx1ZSxuPWkuX3ZhbHVlLG89aS50aHJvd25FcnJvcixkPWkuaXNTdG9wcGVkLGM9aS5faXNDb21wbGV0ZTtyP2EuZXJyb3Iobyk6KGR8fGMpJiYocyYmYS5uZXh0KG4pLGEuY29tcGxldGUoKSl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYSl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLl92YWx1ZT1hLHRoaXMuX2hhc1ZhbHVlPSEwKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGk9YS5faGFzVmFsdWUscj1hLl92YWx1ZSxzPWEuX2lzQ29tcGxldGU7c3x8KHRoaXMuX2lzQ29tcGxldGU9ITAsaSYmdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsciksdC5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKSl9LGV9KShfYSl9KTt2YXIgcE0scFc9YigoKT0+e3IxKCk7bXIoKTtwTT0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSl7cmV0dXJuIHQuY2FsbCh0aGlzKXx8dGhpc31yZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksdGhpc30sZX0pKE8xKX0pO3ZhciB5YyxoVz1iKCgpPT57cjEoKTt5Yz17c2V0SW50ZXJ2YWw6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGE9W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspYVtpLTJdPWFyZ3VtZW50c1tpXTt2YXIgcj15Yy5kZWxlZ2F0ZTtyZXR1cm4gcj8uc2V0SW50ZXJ2YWw/ci5zZXRJbnRlcnZhbC5hcHBseShyLHcyKFt0LGVdLFcxKGEpKSk6c2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLHcyKFt0LGVdLFcxKGEpKSl9LGNsZWFySW50ZXJ2YWw6ZnVuY3Rpb24odCl7dmFyIGU9eWMuZGVsZWdhdGU7cmV0dXJuKGU/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKHQpfSxkZWxlZ2F0ZTp2b2lkIDB9fSk7dmFyIEVpLEE0PWIoKCk9PntyMSgpO3BXKCk7aFcoKTtfNCgpO0VpPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSxpKXt2YXIgcj10LmNhbGwodGhpcyxhLGkpfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1hLHIud29yaz1pLHIucGVuZGluZz0hMSxyfXJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihhLGkpe3ZhciByO2lmKGk9PT12b2lkIDAmJihpPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9YTt2YXIgcz10aGlzLmlkLG49dGhpcy5zY2hlZHVsZXI7cmV0dXJuIHMhPW51bGwmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobixzLGkpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1pLHRoaXMuaWQ9KHI9dGhpcy5pZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6dGhpcy5yZXF1ZXN0QXN5bmNJZChuLHRoaXMuaWQsaSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0wKSx5Yy5zZXRJbnRlcnZhbChhLmZsdXNoLmJpbmQoYSx0aGlzKSxyKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe2lmKHI9PT12b2lkIDAmJihyPTApLHIhPW51bGwmJnRoaXMuZGVsYXk9PT1yJiZ0aGlzLnBlbmRpbmc9PT0hMSlyZXR1cm4gaTtpIT1udWxsJiZ5Yy5jbGVhckludGVydmFsKGkpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGEsaSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTt2YXIgcj10aGlzLl9leGVjdXRlKGEsaSk7aWYocilyZXR1cm4gcjt0aGlzLnBlbmRpbmc9PT0hMSYmdGhpcy5pZCE9bnVsbCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX0sZS5wcm90b3R5cGUuX2V4ZWN1dGU9ZnVuY3Rpb24oYSxpKXt2YXIgcj0hMSxzO3RyeXt0aGlzLndvcmsoYSl9Y2F0Y2gobil7cj0hMCxzPW58fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKHIpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxzfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe2lmKCF0aGlzLmNsb3NlZCl7dmFyIGE9dGhpcyxpPWEuaWQscj1hLnNjaGVkdWxlcixzPXIuYWN0aW9uczt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxEaShzLHRoaXMpLGkhPW51bGwmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQocixpLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKX19LGV9KShwTSl9KTtmdW5jdGlvbiB1Vyh0KXtyZXR1cm4gdCBpbiBGZD8oZGVsZXRlIEZkW3RdLCEwKTohMX12YXIgRnp0LGhNLEZkLHVNLFRZdCxmVz1iKCgpPT57Rnp0PTEsRmQ9e307dU09e3NldEltbWVkaWF0ZTpmdW5jdGlvbih0KXt2YXIgZT1GenQrKztyZXR1cm4gRmRbZV09ITAsaE18fChoTT1Qcm9taXNlLnJlc29sdmUoKSksaE0udGhlbihmdW5jdGlvbigpe3JldHVybiB1VyhlKSYmdCgpfSksZX0sY2xlYXJJbW1lZGlhdGU6ZnVuY3Rpb24odCl7dVcodCl9fSxUWXQ9e3BlbmRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoRmQpLmxlbmd0aH19fSk7dmFyIE96dCxSenQseGMsbVc9YigoKT0+e3IxKCk7ZlcoKTtPenQ9dU0uc2V0SW1tZWRpYXRlLFJ6dD11TS5jbGVhckltbWVkaWF0ZSx4Yz17c2V0SW1tZWRpYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBhPXhjLmRlbGVnYXRlO3JldHVybihhPy5zZXRJbW1lZGlhdGV8fE96dCkuYXBwbHkodm9pZCAwLHcyKFtdLFcxKHQpKSl9LGNsZWFySW1tZWRpYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXhjLmRlbGVnYXRlO3JldHVybihlPy5jbGVhckltbWVkaWF0ZXx8Unp0KSh0KX0sZGVsZWdhdGU6dm9pZCAwfX0pO3ZhciBmTSxnVz1iKCgpPT57cjEoKTtBNCgpO21XKCk7Zk09KGZ1bmN0aW9uKHQpe0N0KGUsdCk7ZnVuY3Rpb24gZShhLGkpe3ZhciByPXQuY2FsbCh0aGlzLGEsaSl8fHRoaXM7cmV0dXJuIHIuc2NoZWR1bGVyPWEsci53b3JrPWkscn1yZXR1cm4gZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0wKSxyIT09bnVsbCYmcj4wP3QucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcyxhLGkscik6KGEuYWN0aW9ucy5wdXNoKHRoaXMpLGEuX3NjaGVkdWxlZHx8KGEuX3NjaGVkdWxlZD14Yy5zZXRJbW1lZGlhdGUoYS5mbHVzaC5iaW5kKGEsdm9pZCAwKSkpKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe3ZhciBzO2lmKHI9PT12b2lkIDAmJihyPTApLHIhPW51bGw/cj4wOnRoaXMuZGVsYXk+MClyZXR1cm4gdC5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLGEsaSxyKTt2YXIgbj1hLmFjdGlvbnM7aSE9bnVsbCYmKChzPW5bbi5sZW5ndGgtMV0pPT09bnVsbHx8cz09PXZvaWQgMD92b2lkIDA6cy5pZCkhPT1pJiYoeGMuY2xlYXJJbW1lZGlhdGUoaSksYS5fc2NoZWR1bGVkPT09aSYmKGEuX3NjaGVkdWxlZD12b2lkIDApKX0sZX0pKEVpKX0pO3ZhciB3YyxtTT1iKCgpPT57ZE0oKTt3Yz0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsYSl7YT09PXZvaWQgMCYmKGE9dC5ub3cpLHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1lLHRoaXMubm93PWF9cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsYSxpKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9MCksbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLGUpLnNjaGVkdWxlKGksYSl9LHQubm93PXZjLm5vdyx0fSkoKX0pO3ZhciBQaSxEND1iKCgpPT57cjEoKTttTSgpO1BpPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSxpKXtpPT09dm9pZCAwJiYoaT13Yy5ub3cpO3ZhciByPXQuY2FsbCh0aGlzLGEsaSl8fHRoaXM7cmV0dXJuIHIuYWN0aW9ucz1bXSxyLl9hY3RpdmU9ITEscn1yZXR1cm4gZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcy5hY3Rpb25zO2lmKHRoaXMuX2FjdGl2ZSl7aS5wdXNoKGEpO3JldHVybn12YXIgcjt0aGlzLl9hY3RpdmU9ITA7ZG8gaWYocj1hLmV4ZWN1dGUoYS5zdGF0ZSxhLmRlbGF5KSlicmVhazt3aGlsZShhPWkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHIpe2Zvcig7YT1pLnNoaWZ0KCk7KWEudW5zdWJzY3JpYmUoKTt0aHJvdyByfX0sZX0pKHdjKX0pO3ZhciBnTSxiVz1iKCgpPT57cjEoKTtENCgpO2dNPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gdCE9PW51bGwmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbihhKXt0aGlzLl9hY3RpdmU9ITA7dmFyIGk9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7dmFyIHI9dGhpcy5hY3Rpb25zLHM7YT1hfHxyLnNoaWZ0KCk7ZG8gaWYocz1hLmV4ZWN1dGUoYS5zdGF0ZSxhLmRlbGF5KSlicmVhazt3aGlsZSgoYT1yWzBdKSYmYS5pZD09PWkmJnIuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHMpe2Zvcig7KGE9clswXSkmJmEuaWQ9PT1pJiZyLnNoaWZ0KCk7KWEudW5zdWJzY3JpYmUoKTt0aHJvdyBzfX0sZX0pKFBpKX0pO3ZhciB2VyxCenQseVc9YigoKT0+e2dXKCk7YlcoKTt2Vz1uZXcgZ00oZk0pLEJ6dD12V30pO3ZhciBncixiTSxGbz1iKCgpPT57QTQoKTtENCgpO2dyPW5ldyBQaShFaSksYk09Z3J9KTt2YXIgdk0seFc9YigoKT0+e3IxKCk7QTQoKTt2TT0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSl7dmFyIHI9dC5jYWxsKHRoaXMsYSxpKXx8dGhpcztyZXR1cm4gci5zY2hlZHVsZXI9YSxyLndvcms9aSxyfXJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihhLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT0wKSxpPjA/dC5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLGEsaSk6KHRoaXMuZGVsYXk9aSx0aGlzLnN0YXRlPWEsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT4wfHx0aGlzLmNsb3NlZD90LnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcyxhLGkpOnRoaXMuX2V4ZWN1dGUoYSxpKX0sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe3JldHVybiByPT09dm9pZCAwJiYocj0wKSxyIT1udWxsJiZyPjB8fHI9PW51bGwmJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsYSxpLHIpOihhLmZsdXNoKHRoaXMpLDApfSxlfSkoRWkpfSk7dmFyIHlNLHdXPWIoKCk9PntyMSgpO0Q0KCk7eU09KGZ1bmN0aW9uKHQpe0N0KGUsdCk7ZnVuY3Rpb24gZSgpe3JldHVybiB0IT09bnVsbCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGV9KShQaSl9KTt2YXIgTVcsSHp0LHpXPWIoKCk9Pnt4VygpO3dXKCk7TVc9bmV3IHlNKHZNKSxIenQ9TVd9KTt2YXIgeE0sa1c9YigoKT0+e3IxKCk7QTQoKTtuTSgpO3hNPShmdW5jdGlvbih0KXtDdChlLHQpO2Z1bmN0aW9uIGUoYSxpKXt2YXIgcj10LmNhbGwodGhpcyxhLGkpfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1hLHIud29yaz1pLHJ9cmV0dXJuIGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGEsaSxyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9MCksciE9PW51bGwmJnI+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsYSxpLHIpOihhLmFjdGlvbnMucHVzaCh0aGlzKSxhLl9zY2hlZHVsZWR8fChhLl9zY2hlZHVsZWQ9bnMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZmx1c2godm9pZCAwKX0pKSl9LGUucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkPWZ1bmN0aW9uKGEsaSxyKXt2YXIgcztpZihyPT09dm9pZCAwJiYocj0wKSxyIT1udWxsP3I+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcyxhLGkscik7dmFyIG49YS5hY3Rpb25zO2khPW51bGwmJmk9PT1hLl9zY2hlZHVsZWQmJigocz1uW24ubGVuZ3RoLTFdKT09PW51bGx8fHM9PT12b2lkIDA/dm9pZCAwOnMuaWQpIT09aSYmKG5zLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLGEuX3NjaGVkdWxlZD12b2lkIDApfSxlfSkoRWkpfSk7dmFyIHdNLFNXPWIoKCk9PntyMSgpO0Q0KCk7d009KGZ1bmN0aW9uKHQpe0N0KGUsdCk7ZnVuY3Rpb24gZSgpe3JldHVybiB0IT09bnVsbCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGEpe3RoaXMuX2FjdGl2ZT0hMDt2YXIgaTthP2k9YS5pZDooaT10aGlzLl9zY2hlZHVsZWQsdGhpcy5fc2NoZWR1bGVkPXZvaWQgMCk7dmFyIHI9dGhpcy5hY3Rpb25zLHM7YT1hfHxyLnNoaWZ0KCk7ZG8gaWYocz1hLmV4ZWN1dGUoYS5zdGF0ZSxhLmRlbGF5KSlicmVhazt3aGlsZSgoYT1yWzBdKSYmYS5pZD09PWkmJnIuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHMpe2Zvcig7KGE9clswXSkmJmEuaWQ9PT1pJiZyLnNoaWZ0KCk7KWEudW5zdWJzY3JpYmUoKTt0aHJvdyBzfX0sZX0pKFBpKX0pO3ZhciBDVyxxenQsX1c9YigoKT0+e2tXKCk7U1coKTtDVz1uZXcgd00oeE0pLHF6dD1DV30pO3ZhciBUVyxNTSxMVz1iKCgpPT57cjEoKTtBNCgpO21yKCk7RDQoKTtUVz0oZnVuY3Rpb24odCl7Q3QoZSx0KTtmdW5jdGlvbiBlKGEsaSl7YT09PXZvaWQgMCYmKGE9TU0pLGk9PT12b2lkIDAmJihpPTEvMCk7dmFyIHI9dC5jYWxsKHRoaXMsYSxmdW5jdGlvbigpe3JldHVybiByLmZyYW1lfSl8fHRoaXM7cmV0dXJuIHIubWF4RnJhbWVzPWksci5mcmFtZT0wLHIuaW5kZXg9LTEscn1yZXR1cm4gZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxpPWEuYWN0aW9ucyxyPWEubWF4RnJhbWVzLHMsbjsobj1pWzBdKSYmbi5kZWxheTw9ciYmKGkuc2hpZnQoKSx0aGlzLmZyYW1lPW4uZGVsYXksIShzPW4uZXhlY3V0ZShuLnN0YXRlLG4uZGVsYXkpKSk7KTtpZihzKXtmb3IoO249aS5zaGlmdCgpOyluLnVuc3Vic2NyaWJlKCk7dGhyb3cgc319LGUuZnJhbWVUaW1lRmFjdG9yPTEwLGV9KShQaSksTU09KGZ1bmN0aW9uKHQpe0N0KGUsdCk7ZnVuY3Rpb24gZShhLGkscil7cj09PXZvaWQgMCYmKHI9YS5pbmRleCs9MSk7dmFyIHM9dC5jYWxsKHRoaXMsYSxpKXx8dGhpcztyZXR1cm4gcy5zY2hlZHVsZXI9YSxzLndvcms9aSxzLmluZGV4PXIscy5hY3RpdmU9ITAscy5pbmRleD1hLmluZGV4PXIsc31yZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oYSxpKXtpZihpPT09dm9pZCAwJiYoaT0wKSxOdW1iZXIuaXNGaW5pdGUoaSkpe2lmKCF0aGlzLmlkKXJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsYSxpKTt0aGlzLmFjdGl2ZT0hMTt2YXIgcj1uZXcgZSh0aGlzLnNjaGVkdWxlcix0aGlzLndvcmspO3JldHVybiB0aGlzLmFkZChyKSxyLnNjaGVkdWxlKGEsaSl9ZWxzZSByZXR1cm4gTzEuRU1QVFl9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGEsaSxyKXtyPT09dm9pZCAwJiYocj0wKSx0aGlzLmRlbGF5PWEuZnJhbWUrcjt2YXIgcz1hLmFjdGlvbnM7cmV0dXJuIHMucHVzaCh0aGlzKSxzLnNvcnQoZS5zb3J0QWN0aW9ucyksMX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24oYSxpLHIpe3I9PT12b2lkIDAmJihyPTApfSxlLnByb3RvdHlwZS5fZXhlY3V0ZT1mdW5jdGlvbihhLGkpe2lmKHRoaXMuYWN0aXZlPT09ITApcmV0dXJuIHQucHJvdG90eXBlLl9leGVjdXRlLmNhbGwodGhpcyxhLGkpfSxlLnNvcnRBY3Rpb25zPWZ1bmN0aW9uKGEsaSl7cmV0dXJuIGEuZGVsYXk9PT1pLmRlbGF5P2EuaW5kZXg9PT1pLmluZGV4PzA6YS5pbmRleD5pLmluZGV4PzE6LTE6YS5kZWxheT5pLmRlbGF5PzE6LTF9LGV9KShFaSl9KTtmdW5jdGlvbiBWenQodCl7cmV0dXJuIHQ/anp0KHQpOk9kfWZ1bmN0aW9uIGp6dCh0KXtyZXR1cm4gbmV3IE10KGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9dmFyIE9kLFJkPWIoKCk9PntDYSgpO09kPW5ldyBNdChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSl9KTtmdW5jdGlvbiBCZCh0KXtyZXR1cm4gdCYmdXQodC5zY2hlZHVsZSl9dmFyIHpNPWIoKCk9PntwMigpfSk7ZnVuY3Rpb24ga00odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gX1p0KHQpe3JldHVybiB1dChrTSh0KSk/dC5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIEJkKGtNKHQpKT90LnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBUWnQodCxlKXtyZXR1cm4gdHlwZW9mIGtNKHQpPT0ibnVtYmVyIj90LnBvcCgpOmV9dmFyIE1jPWIoKCk9PntwMigpO3pNKCl9KTt2YXIgRTQsSGQ9YigoKT0+e0U0PShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIiYmdHlwZW9mIHQhPSJmdW5jdGlvbiJ9KX0pO2Z1bmN0aW9uIHFkKHQpe3JldHVybiB1dCh0Py50aGVuKX12YXIgU009YigoKT0+e3AyKCl9KTtmdW5jdGlvbiBWZCh0KXtyZXR1cm4gdXQodFtOb10pfXZhciBDTT1iKCgpPT57bWMoKTtwMigpfSk7ZnVuY3Rpb24gamQodCl7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZ1dCh0Py5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX12YXIgX009YigoKT0+e3AyKCl9KTtmdW5jdGlvbiBVZCh0KXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCI/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyIpKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS4iKX12YXIgVE09YigoKT0+e30pO2Z1bmN0aW9uIFV6dCgpe3JldHVybiB0eXBlb2YgU3ltYm9sIT0iZnVuY3Rpb24ifHwhU3ltYm9sLml0ZXJhdG9yPyJAQGl0ZXJhdG9yIjpTeW1ib2wuaXRlcmF0b3J9dmFyIFdkLExNPWIoKCk9PntXZD1VenQoKX0pO2Z1bmN0aW9uIEdkKHQpe3JldHVybiB1dCh0Py5bV2RdKX12YXIgJE09YigoKT0+e0xNKCk7cDIoKX0pO2Z1bmN0aW9uIFlkKHQpe3JldHVybiBHdyh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBhLGkscixzO3JldHVybiBoYyh0aGlzLGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6YT10LmdldFJlYWRlcigpLG4ubGFiZWw9MTtjYXNlIDE6bi50cnlzLnB1c2goWzEsLDksMTBdKSxuLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHNzKGEucmVhZCgpKV07Y2FzZSAzOnJldHVybiBpPW4uc2VudCgpLHI9aS52YWx1ZSxzPWkuZG9uZSxzP1s0LHNzKHZvaWQgMCldOlszLDVdO2Nhc2UgNDpyZXR1cm5bMixuLnNlbnQoKV07Y2FzZSA1OnJldHVybls0LHNzKHIpXTtjYXNlIDY6cmV0dXJuWzQsbi5zZW50KCldO2Nhc2UgNzpyZXR1cm4gbi5zZW50KCksWzMsMl07Y2FzZSA4OnJldHVyblszLDEwXTtjYXNlIDk6cmV0dXJuIGEucmVsZWFzZUxvY2soKSxbN107Y2FzZSAxMDpyZXR1cm5bMl19fSl9KX1mdW5jdGlvbiBaZCh0KXtyZXR1cm4gdXQodD8uZ2V0UmVhZGVyKX12YXIgWGQ9YigoKT0+e3IxKCk7cDIoKX0pO2Z1bmN0aW9uIEExKHQpe2lmKHQgaW5zdGFuY2VvZiBNdClyZXR1cm4gdDtpZih0IT1udWxsKXtpZihWZCh0KSlyZXR1cm4gV3p0KHQpO2lmKEU0KHQpKXJldHVybiBHenQodCk7aWYocWQodCkpcmV0dXJuIFl6dCh0KTtpZihqZCh0KSlyZXR1cm4gJFcodCk7aWYoR2QodCkpcmV0dXJuIFp6dCh0KTtpZihaZCh0KSlyZXR1cm4gWHp0KHQpfXRocm93IFVkKHQpfWZ1bmN0aW9uIFd6dCh0KXtyZXR1cm4gbmV3IE10KGZ1bmN0aW9uKGUpe3ZhciBhPXRbTm9dKCk7aWYodXQoYS5zdWJzY3JpYmUpKXJldHVybiBhLnN1YnNjcmliZShlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9ZnVuY3Rpb24gR3p0KHQpe3JldHVybiBuZXcgTXQoZnVuY3Rpb24oZSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmIWUuY2xvc2VkO2ErKyllLm5leHQodFthXSk7ZS5jb21wbGV0ZSgpfSl9ZnVuY3Rpb24gWXp0KHQpe3JldHVybiBuZXcgTXQoZnVuY3Rpb24oZSl7dC50aGVuKGZ1bmN0aW9uKGEpe2UuY2xvc2VkfHwoZS5uZXh0KGEpLGUuY29tcGxldGUoKSl9LGZ1bmN0aW9uKGEpe3JldHVybiBlLmVycm9yKGEpfSkudGhlbihudWxsLExkKX0pfWZ1bmN0aW9uIFp6dCh0KXtyZXR1cm4gbmV3IE10KGZ1bmN0aW9uKGUpe3ZhciBhLGk7dHJ5e2Zvcih2YXIgcj1GMih0KSxzPXIubmV4dCgpOyFzLmRvbmU7cz1yLm5leHQoKSl7dmFyIG49cy52YWx1ZTtpZihlLm5leHQobiksZS5jbG9zZWQpcmV0dXJufX1jYXRjaChvKXthPXtlcnJvcjpvfX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1yLnJldHVybikmJmkuY2FsbChyKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19ZS5jb21wbGV0ZSgpfSl9ZnVuY3Rpb24gJFcodCl7cmV0dXJuIG5ldyBNdChmdW5jdGlvbihlKXtLenQodCxlKS5jYXRjaChmdW5jdGlvbihhKXtyZXR1cm4gZS5lcnJvcihhKX0pfSl9ZnVuY3Rpb24gWHp0KHQpe3JldHVybiAkVyhZZCh0KSl9ZnVuY3Rpb24gS3p0KHQsZSl7dmFyIGEsaSxyLHM7cmV0dXJuIFd3KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLG87cmV0dXJuIGhjKHRoaXMsZnVuY3Rpb24oZCl7c3dpdGNoKGQubGFiZWwpe2Nhc2UgMDpkLnRyeXMucHVzaChbMCw1LDYsMTFdKSxhPVl3KHQpLGQubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsYS5uZXh0KCldO2Nhc2UgMjppZihpPWQuc2VudCgpLCEhaS5kb25lKXJldHVyblszLDRdO2lmKG49aS52YWx1ZSxlLm5leHQobiksZS5jbG9zZWQpcmV0dXJuWzJdO2QubGFiZWw9MztjYXNlIDM6cmV0dXJuWzMsMV07Y2FzZSA0OnJldHVyblszLDExXTtjYXNlIDU6cmV0dXJuIG89ZC5zZW50KCkscj17ZXJyb3I6b30sWzMsMTFdO2Nhc2UgNjpyZXR1cm4gZC50cnlzLnB1c2goWzYsLDksMTBdKSxpJiYhaS5kb25lJiYocz1hLnJldHVybik/WzQscy5jYWxsKGEpXTpbMyw4XTtjYXNlIDc6ZC5zZW50KCksZC5sYWJlbD04O2Nhc2UgODpyZXR1cm5bMywxMF07Y2FzZSA5OmlmKHIpdGhyb3cgci5lcnJvcjtyZXR1cm5bN107Y2FzZSAxMDpyZXR1cm5bN107Y2FzZSAxMTpyZXR1cm4gZS5jb21wbGV0ZSgpLFsyXX19KX0pfXZhciBzaT1iKCgpPT57cjEoKTtIZCgpO1NNKCk7Q2EoKTtDTSgpO19NKCk7VE0oKTskTSgpO1hkKCk7cDIoKTtRdygpO21jKCl9KTtmdW5jdGlvbiB6Mih0LGUsYSxpLHIpe2k9PT12b2lkIDAmJihpPTApLHI9PT12b2lkIDAmJihyPSExKTt2YXIgcz1lLnNjaGVkdWxlKGZ1bmN0aW9uKCl7YSgpLHI/dC5hZGQodGhpcy5zY2hlZHVsZShudWxsLGkpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGkpO2lmKHQuYWRkKHMpLCFyKXJldHVybiBzfXZhciBPbz1iKCgpPT57fSk7ZnVuY3Rpb24gUDQodCxlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksUXQoZnVuY3Rpb24oYSxpKXthLnN1YnNjcmliZShWdChpLGZ1bmN0aW9uKHIpe3JldHVybiB6MihpLHQsZnVuY3Rpb24oKXtyZXR1cm4gaS5uZXh0KHIpfSxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gejIoaSx0LGZ1bmN0aW9uKCl7cmV0dXJuIGkuY29tcGxldGUoKX0sZSl9LGZ1bmN0aW9uKHIpe3JldHVybiB6MihpLHQsZnVuY3Rpb24oKXtyZXR1cm4gaS5lcnJvcihyKX0sZSl9KSl9KX12YXIgemM9YigoKT0+e09vKCk7TTIoKTtuYSgpfSk7ZnVuY3Rpb24gSTQodCxlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCksUXQoZnVuY3Rpb24oYSxpKXtpLmFkZCh0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGEuc3Vic2NyaWJlKGkpfSxlKSl9KX12YXIga2M9YigoKT0+e00yKCl9KTtmdW5jdGlvbiBBVyh0LGUpe3JldHVybiBBMSh0KS5waXBlKEk0KGUpLFA0KGUpKX12YXIgRFc9YigoKT0+e3NpKCk7emMoKTtrYygpfSk7ZnVuY3Rpb24gRVcodCxlKXtyZXR1cm4gQTEodCkucGlwZShJNChlKSxQNChlKSl9dmFyIFBXPWIoKCk9PntzaSgpO3pjKCk7a2MoKX0pO2Z1bmN0aW9uIElXKHQsZSl7cmV0dXJuIG5ldyBNdChmdW5jdGlvbihhKXt2YXIgaT0wO3JldHVybiBlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PXQubGVuZ3RoP2EuY29tcGxldGUoKTooYS5uZXh0KHRbaSsrXSksYS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfXZhciBOVz1iKCgpPT57Q2EoKX0pO2Z1bmN0aW9uIEZXKHQsZSl7cmV0dXJuIG5ldyBNdChmdW5jdGlvbihhKXt2YXIgaTtyZXR1cm4gejIoYSxlLGZ1bmN0aW9uKCl7aT10W1dkXSgpLHoyKGEsZSxmdW5jdGlvbigpe3ZhciByLHMsbjt0cnl7cj1pLm5leHQoKSxzPXIudmFsdWUsbj1yLmRvbmV9Y2F0Y2gobyl7YS5lcnJvcihvKTtyZXR1cm59bj9hLmNvbXBsZXRlKCk6YS5uZXh0KHMpfSwwLCEwKX0pLGZ1bmN0aW9uKCl7cmV0dXJuIHV0KGk/LnJldHVybikmJmkucmV0dXJuKCl9fSl9dmFyIE9XPWIoKCk9PntDYSgpO0xNKCk7cDIoKTtPbygpfSk7ZnVuY3Rpb24gS2QodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBNdChmdW5jdGlvbihhKXt6MihhLGUsZnVuY3Rpb24oKXt2YXIgaT10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO3oyKGEsZSxmdW5jdGlvbigpe2kubmV4dCgpLnRoZW4oZnVuY3Rpb24ocil7ci5kb25lP2EuY29tcGxldGUoKTphLm5leHQoci52YWx1ZSl9KX0sMCwhMCl9KX0pfXZhciBBTT1iKCgpPT57Q2EoKTtPbygpfSk7ZnVuY3Rpb24gUlcodCxlKXtyZXR1cm4gS2QoWWQodCksZSl9dmFyIEJXPWIoKCk9PntBTSgpO1hkKCl9KTtmdW5jdGlvbiBETSh0LGUpe2lmKHQhPW51bGwpe2lmKFZkKHQpKXJldHVybiBBVyh0LGUpO2lmKEU0KHQpKXJldHVybiBJVyh0LGUpO2lmKHFkKHQpKXJldHVybiBFVyh0LGUpO2lmKGpkKHQpKXJldHVybiBLZCh0LGUpO2lmKEdkKHQpKXJldHVybiBGVyh0LGUpO2lmKFpkKHQpKXJldHVybiBSVyh0LGUpfXRocm93IFVkKHQpfXZhciBFTT1iKCgpPT57RFcoKTtQVygpO05XKCk7T1coKTtBTSgpO0NNKCk7U00oKTtIZCgpOyRNKCk7X00oKTtUTSgpO1hkKCk7QlcoKX0pO2Z1bmN0aW9uIFJvKHQsZSl7cmV0dXJuIGU/RE0odCxlKTpBMSh0KX12YXIgUWQ9YigoKT0+e0VNKCk7c2koKX0pO2Z1bmN0aW9uIFNjKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBhPXBuKHQpO3JldHVybiBSbyh0LGEpfXZhciBQTT1iKCgpPT57TWMoKTtRZCgpfSk7ZnVuY3Rpb24gSU0odCxlKXt2YXIgYT11dCh0KT90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGk9ZnVuY3Rpb24ocil7cmV0dXJuIHIuZXJyb3IoYSgpKX07cmV0dXJuIG5ldyBNdChlP2Z1bmN0aW9uKHIpe3JldHVybiBlLnNjaGVkdWxlKGksMCxyKX06aSl9dmFyIE5NPWIoKCk9PntDYSgpO3AyKCl9KTtmdW5jdGlvbiBRenQodCxlKXt2YXIgYSxpLHIscz10LG49cy5raW5kLG89cy52YWx1ZSxkPXMuZXJyb3I7aWYodHlwZW9mIG4hPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm90aWZpY2F0aW9uLCBtaXNzaW5nICJraW5kIicpO249PT0iTiI/KGE9ZS5uZXh0KT09PW51bGx8fGE9PT12b2lkIDB8fGEuY2FsbChlLG8pOm49PT0iRSI/KGk9ZS5lcnJvcik9PT1udWxsfHxpPT09dm9pZCAwfHxpLmNhbGwoZSxkKToocj1lLmNvbXBsZXRlKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChlKX12YXIgRk0sSFcscVc9YigoKT0+e1JkKCk7UE0oKTtOTSgpO3AyKCk7KGZ1bmN0aW9uKHQpe3QuTkVYVD0iTiIsdC5FUlJPUj0iRSIsdC5DT01QTEVURT0iQyJ9KShGTXx8KEZNPXt9KSk7SFc9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGEsaSl7dGhpcy5raW5kPWUsdGhpcy52YWx1ZT1hLHRoaXMuZXJyb3I9aSx0aGlzLmhhc1ZhbHVlPWU9PT0iTiJ9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24oZSl7cmV0dXJuIFF6dCh0aGlzLGUpfSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbihlLGEsaSl7dmFyIHI9dGhpcyxzPXIua2luZCxuPXIudmFsdWUsbz1yLmVycm9yO3JldHVybiBzPT09Ik4iP2U/LihuKTpzPT09IkUiP2E/LihvKTppPy4oKX0sdC5wcm90b3R5cGUuYWNjZXB0PWZ1bmN0aW9uKGUsYSxpKXt2YXIgcjtyZXR1cm4gdXQoKHI9ZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm5leHQpP3RoaXMub2JzZXJ2ZShlKTp0aGlzLmRvKGUsYSxpKX0sdC5wcm90b3R5cGUudG9PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxhPWUua2luZCxpPWUudmFsdWUscj1lLmVycm9yLHM9YT09PSJOIj9TYyhpKTphPT09IkUiP0lNKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTphPT09IkMiP09kOjA7aWYoIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCAiK2EpO3JldHVybiBzfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJOIixlKX0sdC5jcmVhdGVFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoIkUiLHZvaWQgMCxlKX0sdC5jcmVhdGVDb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiB0LmNvbXBsZXRlTm90aWZpY2F0aW9ufSx0LmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0KCJDIiksdH0pKCl9KTt2YXIgVlc9YigoKT0+e30pO3ZhciBKenQsalc9YigoKT0+e2RuKCk7Snp0PVNhKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3QodGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn19KX0pO3ZhciBVVz1iKCgpPT57fSk7dmFyIFdXPWIoKCk9Pnt9KTt2YXIgZWt0LEdXPWIoKCk9PntkbigpO2VrdD1TYShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0KHRoaXMpLHRoaXMubmFtZT0iQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiLHRoaXMubWVzc2FnZT0iYXJndW1lbnQgb3V0IG9mIHJhbmdlIn19KX0pO3ZhciB0a3QsWVc9YigoKT0+e2RuKCk7dGt0PVNhKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihhKXt0KHRoaXMpLHRoaXMubmFtZT0iTm90Rm91bmRFcnJvciIsdGhpcy5tZXNzYWdlPWF9fSl9KTt2YXIgYWt0LFpXPWIoKCk9PntkbigpO2FrdD1TYShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oYSl7dCh0aGlzKSx0aGlzLm5hbWU9IlNlcXVlbmNlRXJyb3IiLHRoaXMubWVzc2FnZT1hfX0pfSk7ZnVuY3Rpb24gSmQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4odCl9dmFyIE9NPWIoKCk9Pnt9KTtmdW5jdGlvbiBLVyh0LGUpe3ZhciBhPUpkKHQpP3tmaXJzdDp0fTp0eXBlb2YgdD09Im51bWJlciI/e2VhY2g6dH06dCxpPWEuZmlyc3Qscj1hLmVhY2gscz1hLndpdGgsbj1zPT09dm9pZCAwP2lrdDpzLG89YS5zY2hlZHVsZXIsZD1vPT09dm9pZCAwP2U/P2dyOm8sYz1hLm1ldGEscD1jPT09dm9pZCAwP251bGw6YztpZihpPT1udWxsJiZyPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIk5vIHRpbWVvdXQgcHJvdmlkZWQuIik7cmV0dXJuIFF0KGZ1bmN0aW9uKGwsZil7dmFyIGcseSx2PW51bGwsbT0wLHg9ZnVuY3Rpb24oTSl7eT16MihmLGQsZnVuY3Rpb24oKXt0cnl7Zy51bnN1YnNjcmliZSgpLEExKG4oe21ldGE6cCxsYXN0VmFsdWU6dixzZWVuOm19KSkuc3Vic2NyaWJlKGYpfWNhdGNoKFMpe2YuZXJyb3IoUyl9fSxNKX07Zz1sLnN1YnNjcmliZShWdChmLGZ1bmN0aW9uKE0pe3k/LnVuc3Vic2NyaWJlKCksbSsrLGYubmV4dCh2PU0pLHI+MCYmeChyKX0sdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3k/LmNsb3NlZHx8eT8udW5zdWJzY3JpYmUoKSx2PW51bGx9KSksIW0mJngoaSE9bnVsbD90eXBlb2YgaT09Im51bWJlciI/aToraS1kLm5vdygpOnIpfSl9ZnVuY3Rpb24gaWt0KHQpe3Rocm93IG5ldyBYVyh0KX12YXIgWFcsZTc9YigoKT0+e0ZvKCk7T00oKTtNMigpO3NpKCk7ZG4oKTtuYSgpO09vKCk7WFc9U2EoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGEpe2E9PT12b2lkIDAmJihhPW51bGwpLHQodGhpcyksdGhpcy5tZXNzYWdlPSJUaW1lb3V0IGhhcyBvY2N1cnJlZCIsdGhpcy5uYW1lPSJUaW1lb3V0RXJyb3IiLHRoaXMuaW5mbz1hfX0pfSk7ZnVuY3Rpb24gaG4odCxlKXtyZXR1cm4gUXQoZnVuY3Rpb24oYSxpKXt2YXIgcj0wO2Euc3Vic2NyaWJlKFZ0KGksZnVuY3Rpb24ocyl7aS5uZXh0KHQuY2FsbChlLHMscisrKSl9KSl9KX12YXIgQ2M9YigoKT0+e00yKCk7bmEoKX0pO2Z1bmN0aW9uIHNrdCh0LGUpe3JldHVybiBya3QoZSk/dC5hcHBseSh2b2lkIDAsdzIoW10sVzEoZSkpKTp0KGUpfWZ1bmN0aW9uIFFXKHQpe3JldHVybiBobihmdW5jdGlvbihlKXtyZXR1cm4gc2t0KHQsZSl9KX12YXIgcmt0LEpXPWIoKCk9PntyMSgpO0NjKCk7cmt0PUFycmF5LmlzQXJyYXl9KTt2YXIgZUc9YigoKT0+e30pO3ZhciB0Rz1iKCgpPT57fSk7dmFyIGFHPWIoKCk9Pnt9KTtmdW5jdGlvbiBpRyh0LGUsYSxpLHIscyxuLG8pe3ZhciBkPVtdLGM9MCxwPTAsbD0hMSxmPWZ1bmN0aW9uKCl7bCYmIWQubGVuZ3RoJiYhYyYmZS5jb21wbGV0ZSgpfSxnPWZ1bmN0aW9uKHYpe3JldHVybiBjPGk/eSh2KTpkLnB1c2godil9LHk9ZnVuY3Rpb24odil7cyYmZS5uZXh0KHYpLGMrKzt2YXIgbT0hMTtBMShhKHYscCsrKSkuc3Vic2NyaWJlKFZ0KGUsZnVuY3Rpb24oeCl7cj8uKHgpLHM/Zyh4KTplLm5leHQoeCl9LGZ1bmN0aW9uKCl7bT0hMH0sdm9pZCAwLGZ1bmN0aW9uKCl7aWYobSl0cnl7Yy0tO2Zvcih2YXIgeD1mdW5jdGlvbigpe3ZhciBNPWQuc2hpZnQoKTtuP3oyKGUsbixmdW5jdGlvbigpe3JldHVybiB5KE0pfSk6eShNKX07ZC5sZW5ndGgmJmM8aTspeCgpO2YoKX1jYXRjaChNKXtlLmVycm9yKE0pfX0pKX07cmV0dXJuIHQuc3Vic2NyaWJlKFZ0KGUsZyxmdW5jdGlvbigpe2w9ITAsZigpfSkpLGZ1bmN0aW9uKCl7bz8uKCl9fXZhciByRz1iKCgpPT57c2koKTtPbygpO25hKCl9KTtmdW5jdGlvbiBCbyh0LGUsYSl7cmV0dXJuIGE9PT12b2lkIDAmJihhPTEvMCksdXQoZSk/Qm8oZnVuY3Rpb24oaSxyKXtyZXR1cm4gaG4oZnVuY3Rpb24ocyxuKXtyZXR1cm4gZShpLHMscixuKX0pKEExKHQoaSxyKSkpfSxhKToodHlwZW9mIGU9PSJudW1iZXIiJiYoYT1lKSxRdChmdW5jdGlvbihpLHIpe3JldHVybiBpRyhpLHIsdCxhKX0pKX12YXIgX2M9YigoKT0+e0NjKCk7c2koKTtNMigpO3JHKCk7cDIoKX0pO2Z1bmN0aW9uIHQ3KHQpe3JldHVybiB0PT09dm9pZCAwJiYodD0xLzApLEJvKGdjLHQpfXZhciBhNz1iKCgpPT57X2MoKTtFZCgpfSk7ZnVuY3Rpb24gaTcoKXtyZXR1cm4gdDcoMSl9dmFyIHI3PWIoKCk9PnthNygpfSk7ZnVuY3Rpb24gczcoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGk3KCkoUm8odCxwbih0KSkpfXZhciBSTT1iKCgpPT57cjcoKTtNYygpO1FkKCl9KTt2YXIgc0c9YigoKT0+e30pO3ZhciBuRz1iKCgpPT57fSk7dmFyIG9HPWIoKCk9Pnt9KTtmdW5jdGlvbiBIbyh0LGUsYSxpKXtpZih1dChhKSYmKGk9YSxhPXZvaWQgMCksaSlyZXR1cm4gSG8odCxlLGEpLnBpcGUoUVcoaSkpO3ZhciByPVcxKHBrdCh0KT9va3QubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gdFtvXShlLGQsYSl9fSk6Y2t0KHQpP25rdC5tYXAobEcodCxlKSk6ZGt0KHQpP2xrdC5tYXAobEcodCxlKSk6W10sMikscz1yWzBdLG49clsxXTtpZighcyYmRTQodCkpcmV0dXJuIEJvKGZ1bmN0aW9uKG8pe3JldHVybiBIbyhvLGUsYSl9KShBMSh0KSk7aWYoIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IE10KGZ1bmN0aW9uKG8pe3ZhciBkPWZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLHA9MDtwPGFyZ3VtZW50cy5sZW5ndGg7cCsrKWNbcF09YXJndW1lbnRzW3BdO3JldHVybiBvLm5leHQoMTxjLmxlbmd0aD9jOmNbMF0pfTtyZXR1cm4gcyhkKSxmdW5jdGlvbigpe3JldHVybiBuKGQpfX0pfWZ1bmN0aW9uIGxHKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gdFthXShlLGkpfX19ZnVuY3Rpb24gY2t0KHQpe3JldHVybiB1dCh0LmFkZExpc3RlbmVyKSYmdXQodC5yZW1vdmVMaXN0ZW5lcil9ZnVuY3Rpb24gZGt0KHQpe3JldHVybiB1dCh0Lm9uKSYmdXQodC5vZmYpfWZ1bmN0aW9uIHBrdCh0KXtyZXR1cm4gdXQodC5hZGRFdmVudExpc3RlbmVyKSYmdXQodC5yZW1vdmVFdmVudExpc3RlbmVyKX12YXIgbmt0LG9rdCxsa3QsY0c9YigoKT0+e3IxKCk7c2koKTtDYSgpO19jKCk7SGQoKTtwMigpO0pXKCk7bmt0PVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLG9rdD1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sbGt0PVsib24iLCJvZmYiXX0pO3ZhciBkRz1iKCgpPT57fSk7dmFyIHBHPWIoKCk9Pnt9KTt2YXIgaEc9YigoKT0+e30pO2Z1bmN0aW9uIEJNKHQsZSxhKXt0PT09dm9pZCAwJiYodD0wKSxhPT09dm9pZCAwJiYoYT1iTSk7dmFyIGk9LTE7cmV0dXJuIGUhPW51bGwmJihCZChlKT9hPWU6aT1lKSxuZXcgTXQoZnVuY3Rpb24ocil7dmFyIHM9SmQodCk/K3QtYS5ub3coKTp0O3M8MCYmKHM9MCk7dmFyIG49MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe3IuY2xvc2VkfHwoci5uZXh0KG4rKyksMDw9aT90aGlzLnNjaGVkdWxlKHZvaWQgMCxpKTpyLmNvbXBsZXRlKCkpfSxzKX0pfXZhciBITT1iKCgpPT57Q2EoKTtGbygpO3pNKCk7T00oKX0pO3ZhciB1Rz1iKCgpPT57fSk7dmFyIGZHPWIoKCk9Pnt9KTtmdW5jdGlvbiBoa3QoKXtyZXR1cm4gbUd9dmFyIG1HLHFNPWIoKCk9PntDYSgpO0VvKCk7bUc9bmV3IE10KHJpKX0pO3ZhciBnRz1iKCgpPT57fSk7dmFyIGJHPWIoKCk9Pnt9KTtmdW5jdGlvbiBuNyh0LGUpe3JldHVybiBRdChmdW5jdGlvbihhLGkpe3ZhciByPTA7YS5zdWJzY3JpYmUoVnQoaSxmdW5jdGlvbihzKXtyZXR1cm4gdC5jYWxsKGUscyxyKyspJiZpLm5leHQocyl9KSl9KX12YXIgVk09YigoKT0+e00yKCk7bmEoKX0pO3ZhciB2Rz1iKCgpPT57fSk7dmFyIHlHPWIoKCk9Pnt9KTt2YXIgeEc9YigoKT0+e30pO3ZhciB3Rz1iKCgpPT57fSk7dmFyIE1HPWIoKCk9Pnt9KTt2YXIgekc9YigoKT0+e30pO3ZhciBqTT1iKCgpPT57fSk7dmFyIFVNPWIoKCk9Pnt9KTtmdW5jdGlvbiBvNyh0KXtyZXR1cm4gUXQoZnVuY3Rpb24oZSxhKXt2YXIgaT1bXTtyZXR1cm4gZS5zdWJzY3JpYmUoVnQoYSxmdW5jdGlvbihyKXtyZXR1cm4gaS5wdXNoKHIpfSxmdW5jdGlvbigpe2EubmV4dChpKSxhLmNvbXBsZXRlKCl9KSksQTEodCkuc3Vic2NyaWJlKFZ0KGEsZnVuY3Rpb24oKXt2YXIgcj1pO2k9W10sYS5uZXh0KHIpfSxyaSkpLGZ1bmN0aW9uKCl7aT1udWxsfX0pfXZhciBXTT1iKCgpPT57TTIoKTtFbygpO25hKCk7c2koKX0pO2Z1bmN0aW9uIGw3KHQsZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPW51bGwpLGU9ZT8/dCxRdChmdW5jdGlvbihhLGkpe3ZhciByPVtdLHM9MDthLnN1YnNjcmliZShWdChpLGZ1bmN0aW9uKG4pe3ZhciBvLGQsYyxwLGw9bnVsbDtzKyslZT09PTAmJnIucHVzaChbXSk7dHJ5e2Zvcih2YXIgZj1GMihyKSxnPWYubmV4dCgpOyFnLmRvbmU7Zz1mLm5leHQoKSl7dmFyIHk9Zy52YWx1ZTt5LnB1c2gobiksdDw9eS5sZW5ndGgmJihsPWw/P1tdLGwucHVzaCh5KSl9fWNhdGNoKHgpe289e2Vycm9yOnh9fWZpbmFsbHl7dHJ5e2cmJiFnLmRvbmUmJihkPWYucmV0dXJuKSYmZC5jYWxsKGYpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1pZihsKXRyeXtmb3IodmFyIHY9RjIobCksbT12Lm5leHQoKTshbS5kb25lO209di5uZXh0KCkpe3ZhciB5PW0udmFsdWU7RGkocix5KSxpLm5leHQoeSl9fWNhdGNoKHgpe2M9e2Vycm9yOnh9fWZpbmFsbHl7dHJ5e20mJiFtLmRvbmUmJihwPXYucmV0dXJuKSYmcC5jYWxsKHYpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX19LGZ1bmN0aW9uKCl7dmFyIG4sbzt0cnl7Zm9yKHZhciBkPUYyKHIpLGM9ZC5uZXh0KCk7IWMuZG9uZTtjPWQubmV4dCgpKXt2YXIgcD1jLnZhbHVlO2kubmV4dChwKX19Y2F0Y2gobCl7bj17ZXJyb3I6bH19ZmluYWxseXt0cnl7YyYmIWMuZG9uZSYmKG89ZC5yZXR1cm4pJiZvLmNhbGwoZCl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fWkuY29tcGxldGUoKX0sdm9pZCAwLGZ1bmN0aW9uKCl7cj1udWxsfSkpfSl9dmFyIEdNPWIoKCk9PntyMSgpO00yKCk7bmEoKTtfNCgpfSk7ZnVuY3Rpb24gYzcodCl7Zm9yKHZhciBlLGEsaT1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpW3ItMV09YXJndW1lbnRzW3JdO3ZhciBzPShlPXBuKGkpKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpncixuPShhPWlbMF0pIT09bnVsbCYmYSE9PXZvaWQgMD9hOm51bGwsbz1pWzFdfHwxLzA7cmV0dXJuIFF0KGZ1bmN0aW9uKGQsYyl7dmFyIHA9W10sbD0hMSxmPWZ1bmN0aW9uKHYpe3ZhciBtPXYuYnVmZmVyLHg9di5zdWJzO3gudW5zdWJzY3JpYmUoKSxEaShwLHYpLGMubmV4dChtKSxsJiZnKCl9LGc9ZnVuY3Rpb24oKXtpZihwKXt2YXIgdj1uZXcgTzE7Yy5hZGQodik7dmFyIG09W10seD17YnVmZmVyOm0sc3Viczp2fTtwLnB1c2goeCksejIodixzLGZ1bmN0aW9uKCl7cmV0dXJuIGYoeCl9LHQpfX07biE9PW51bGwmJm4+PTA/ejIoYyxzLGcsbiwhMCk6bD0hMCxnKCk7dmFyIHk9VnQoYyxmdW5jdGlvbih2KXt2YXIgbSx4LE09cC5zbGljZSgpO3RyeXtmb3IodmFyIFM9RjIoTSksRj1TLm5leHQoKTshRi5kb25lO0Y9Uy5uZXh0KCkpe3ZhciBfPUYudmFsdWUsaz1fLmJ1ZmZlcjtrLnB1c2godiksbzw9ay5sZW5ndGgmJmYoXyl9fWNhdGNoKE4pe209e2Vycm9yOk59fWZpbmFsbHl7dHJ5e0YmJiFGLmRvbmUmJih4PVMucmV0dXJuKSYmeC5jYWxsKFMpfWZpbmFsbHl7aWYobSl0aHJvdyBtLmVycm9yfX19LGZ1bmN0aW9uKCl7Zm9yKDtwPy5sZW5ndGg7KWMubmV4dChwLnNoaWZ0KCkuYnVmZmVyKTt5Py51bnN1YnNjcmliZSgpLGMuY29tcGxldGUoKSxjLnVuc3Vic2NyaWJlKCl9LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBwPW51bGx9KTtkLnN1YnNjcmliZSh5KX0pfXZhciBZTT1iKCgpPT57cjEoKTttcigpO00yKCk7bmEoKTtfNCgpO0ZvKCk7TWMoKTtPbygpfSk7dmFyIFpNPWIoKCk9Pnt9KTt2YXIgWE09YigoKT0+e30pO3ZhciBLTT1iKCgpPT57fSk7dmFyIFFNPWIoKCk9Pnt9KTt2YXIgSk09YigoKT0+e30pO3ZhciBlej1iKCgpPT57fSk7dmFyIHR6PWIoKCk9Pnt9KTt2YXIga0c9YigoKT0+e30pO3ZhciBhej1iKCgpPT57fSk7dmFyIGl6PWIoKCk9Pnt9KTt2YXIgcno9YigoKT0+e30pO3ZhciBTRz1iKCgpPT57fSk7dmFyIHN6PWIoKCk9Pnt9KTt2YXIgbno9YigoKT0+e30pO3ZhciBvej1iKCgpPT57fSk7ZnVuY3Rpb24gZDcodCl7cmV0dXJuIFF0KGZ1bmN0aW9uKGUsYSl7dmFyIGk9ITEscj1udWxsLHM9bnVsbCxuPWZ1bmN0aW9uKCl7aWYocz8udW5zdWJzY3JpYmUoKSxzPW51bGwsaSl7aT0hMTt2YXIgbz1yO3I9bnVsbCxhLm5leHQobyl9fTtlLnN1YnNjcmliZShWdChhLGZ1bmN0aW9uKG8pe3M/LnVuc3Vic2NyaWJlKCksaT0hMCxyPW8scz1WdChhLG4scmkpLEExKHQobykpLnN1YnNjcmliZShzKX0sZnVuY3Rpb24oKXtuKCksYS5jb21wbGV0ZSgpfSx2b2lkIDAsZnVuY3Rpb24oKXtyPXM9bnVsbH0pKX0pfXZhciBsej1iKCgpPT57TTIoKTtFbygpO25hKCk7c2koKX0pO2Z1bmN0aW9uIHA3KHQsZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPWdyKSxRdChmdW5jdGlvbihhLGkpe3ZhciByPW51bGwscz1udWxsLG49bnVsbCxvPWZ1bmN0aW9uKCl7aWYocil7ci51bnN1YnNjcmliZSgpLHI9bnVsbDt2YXIgYz1zO3M9bnVsbCxpLm5leHQoYyl9fTtmdW5jdGlvbiBkKCl7dmFyIGM9bit0LHA9ZS5ub3coKTtpZihwPGMpe3I9dGhpcy5zY2hlZHVsZSh2b2lkIDAsYy1wKSxpLmFkZChyKTtyZXR1cm59bygpfWEuc3Vic2NyaWJlKFZ0KGksZnVuY3Rpb24oYyl7cz1jLG49ZS5ub3coKSxyfHwocj1lLnNjaGVkdWxlKGQsdCksaS5hZGQocikpfSxmdW5jdGlvbigpe28oKSxpLmNvbXBsZXRlKCl9LHZvaWQgMCxmdW5jdGlvbigpe3M9cj1udWxsfSkpfSl9dmFyIGN6PWIoKCk9PntGbygpO00yKCk7bmEoKX0pO3ZhciBkej1iKCgpPT57fSk7dmFyIHB6PWIoKCk9Pnt9KTt2YXIgaHo9YigoKT0+e30pO3ZhciB1ej1iKCgpPT57fSk7dmFyIGZ6PWIoKCk9Pnt9KTt2YXIgbXo9YigoKT0+e30pO3ZhciBnej1iKCgpPT57fSk7dmFyIGJ6PWIoKCk9Pnt9KTt2YXIgdno9YigoKT0+e30pO3ZhciB5ej1iKCgpPT57fSk7dmFyIHh6PWIoKCk9Pnt9KTt2YXIgd3o9YigoKT0+e30pO3ZhciBNej1iKCgpPT57fSk7dmFyIHp6PWIoKCk9Pnt9KTt2YXIga3o9YigoKT0+e30pO3ZhciBTej1iKCgpPT57fSk7dmFyIEN6PWIoKCk9Pnt9KTt2YXIgX3o9YigoKT0+e30pO3ZhciBUej1iKCgpPT57fSk7dmFyIEx6PWIoKCk9Pnt9KTt2YXIgJHo9YigoKT0+e30pO3ZhciBBej1iKCgpPT57fSk7dmFyIER6PWIoKCk9Pnt9KTt2YXIgRXo9YigoKT0+e30pO3ZhciBQej1iKCgpPT57fSk7dmFyIEl6PWIoKCk9Pnt9KTt2YXIgTno9YigoKT0+e30pO3ZhciBGej1iKCgpPT57fSk7dmFyIE96PWIoKCk9Pnt9KTt2YXIgUno9YigoKT0+e30pO3ZhciBCej1iKCgpPT57fSk7dmFyIENHPWIoKCk9Pnt9KTt2YXIgSHo9YigoKT0+e30pO3ZhciBxej1iKCgpPT57fSk7dmFyIFZ6PWIoKCk9Pnt9KTt2YXIgano9YigoKT0+e30pO3ZhciBVej1iKCgpPT57fSk7dmFyIFd6PWIoKCk9Pnt9KTt2YXIgR3o9YigoKT0+e30pO3ZhciBZej1iKCgpPT57fSk7dmFyIFp6PWIoKCk9Pnt9KTt2YXIgWHo9YigoKT0+e30pO3ZhciBLej1iKCgpPT57fSk7dmFyIFF6PWIoKCk9Pnt9KTt2YXIgSno9YigoKT0+e30pO3ZhciBlaz1iKCgpPT57fSk7dmFyIHRrPWIoKCk9Pnt9KTt2YXIgYWs9YigoKT0+e30pO3ZhciBpaz1iKCgpPT57fSk7dmFyIHJrPWIoKCk9Pnt9KTt2YXIgc2s9YigoKT0+e30pO3ZhciBuaz1iKCgpPT57fSk7dmFyIG9rPWIoKCk9Pnt9KTt2YXIgbGs9YigoKT0+e30pO3ZhciBjaz1iKCgpPT57fSk7dmFyIGRrPWIoKCk9Pnt9KTt2YXIgcGs9YigoKT0+e30pO3ZhciBoaz1iKCgpPT57fSk7ZnVuY3Rpb24gaDcoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIGE9cG4odCk7cmV0dXJuIFF0KGZ1bmN0aW9uKGkscil7KGE/czcodCxpLGEpOnM3KHQsaSkpLnN1YnNjcmliZShyKX0pfXZhciB1az1iKCgpPT57Uk0oKTtNYygpO00yKCl9KTt2YXIgZms9YigoKT0+e30pO3ZhciBtaz1iKCgpPT57fSk7dmFyIGdrPWIoKCk9Pnt9KTt2YXIgYms9YigoKT0+e30pO2Z1bmN0aW9uIHU3KHQpe3JldHVybiBRdChmdW5jdGlvbihlLGEpe0ExKHQpLnN1YnNjcmliZShWdChhLGZ1bmN0aW9uKCl7cmV0dXJuIGEuY29tcGxldGUoKX0scmkpKSwhYS5jbG9zZWQmJmUuc3Vic2NyaWJlKGEpfSl9dmFyIHZrPWIoKCk9PntNMigpO25hKCk7c2koKTtFbygpfSk7dmFyIHlrPWIoKCk9Pnt9KTt2YXIgeGs9YigoKT0+e30pO2Z1bmN0aW9uIGY3KHQsZSl7cmV0dXJuIFF0KGZ1bmN0aW9uKGEsaSl7dmFyIHI9ZT8/e30scz1yLmxlYWRpbmcsbj1zPT09dm9pZCAwPyEwOnMsbz1yLnRyYWlsaW5nLGQ9bz09PXZvaWQgMD8hMTpvLGM9ITEscD1udWxsLGw9bnVsbCxmPSExLGc9ZnVuY3Rpb24oKXtsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxkJiYobSgpLGYmJmkuY29tcGxldGUoKSl9LHk9ZnVuY3Rpb24oKXtsPW51bGwsZiYmaS5jb21wbGV0ZSgpfSx2PWZ1bmN0aW9uKHgpe3JldHVybiBsPUExKHQoeCkpLnN1YnNjcmliZShWdChpLGcseSkpfSxtPWZ1bmN0aW9uKCl7aWYoYyl7Yz0hMTt2YXIgeD1wO3A9bnVsbCxpLm5leHQoeCksIWYmJnYoeCl9fTthLnN1YnNjcmliZShWdChpLGZ1bmN0aW9uKHgpe2M9ITAscD14LCEobCYmIWwuY2xvc2VkKSYmKG4/bSgpOnYoeCkpfSxmdW5jdGlvbigpe2Y9ITAsIShkJiZjJiZsJiYhbC5jbG9zZWQpJiZpLmNvbXBsZXRlKCl9KSl9KX12YXIgbTc9YigoKT0+e00yKCk7bmEoKTtzaSgpfSk7ZnVuY3Rpb24gZzcodCxlLGEpe2U9PT12b2lkIDAmJihlPWdyKTt2YXIgaT1CTSh0LGUpO3JldHVybiBmNyhmdW5jdGlvbigpe3JldHVybiBpfSxhKX12YXIgd2s9YigoKT0+e0ZvKCk7bTcoKTtITSgpfSk7dmFyIE1rPWIoKCk9Pnt9KTt2YXIgems9YigoKT0+e30pO3ZhciBraz1iKCgpPT57fSk7dmFyIFNrPWIoKCk9Pnt9KTt2YXIgQ2s9YigoKT0+e30pO3ZhciBfaz1iKCgpPT57fSk7dmFyIFRrPWIoKCk9Pnt9KTt2YXIgTGs9YigoKT0+e30pO3ZhciAkaz1iKCgpPT57fSk7dmFyIEFrPWIoKCk9Pnt9KTt2YXIgX0c9YigoKT0+e30pO3ZhciBEaz1iKCgpPT57fSk7dmFyIEVrPWIoKCk9PntDYSgpO2FXKCk7bWMoKTtzVygpO2JjKCk7b1coKTtsVygpO2RXKCk7eVcoKTtGbygpO3pXKCk7X1coKTtMVygpO21NKCk7bXIoKTtEZCgpO3FXKCk7aU0oKTtFbygpO0VkKCk7VlcoKTtVVygpO1dXKCk7R1coKTtqVygpO1lXKCk7bE0oKTtaVygpO2U3KCk7WncoKTtlRygpO3RHKCk7YUcoKTtSTSgpO25HKCk7c0coKTtSZCgpO29HKCk7UWQoKTtjRygpO2RHKCk7cEcoKTtoRygpO3VHKCk7ZkcoKTtxTSgpO1BNKCk7Z0coKTtiRygpO3ZHKCk7eUcoKTt4RygpO05NKCk7SE0oKTt3RygpO01HKCk7RU0oKTtSZCgpO3FNKCk7ekcoKTtUNCgpO2pNKCk7VU0oKTtXTSgpO0dNKCk7WU0oKTtaTSgpO1hNKCk7S00oKTt0eigpO2V6KCk7YXooKTtyNygpO2l6KCk7cnooKTtzeigpO256KCk7b3ooKTtseigpO2N6KCk7ZHooKTtteigpO2Z6KCk7Z3ooKTtieigpO3Z6KCk7eXooKTt3eigpO016KCk7enooKTtDeigpO1N6KCk7a3ooKTtfeigpO1ZNKCk7VHooKTtMeigpOyR6KCk7QXooKTtEeigpO2h6KCk7RXooKTtJeigpO0NjKCk7dXooKTtOeigpO0Z6KCk7YTcoKTtPeigpO19jKCk7UnooKTtCeigpO0h6KCk7cXooKTtWeigpO3pjKCk7anooKTtVeigpO1d6KCk7R3ooKTtZeigpO1p6KCk7WHooKTtLeigpO1FNKCk7UXooKTtKeigpO2VrKCk7dGsoKTtJZCgpO2FrKCk7aWsoKTtyaygpO3NrKCk7bmsoKTtvaygpO2xrKCk7Y2soKTtkaygpO3BrKCk7aGsoKTt1aygpO2tjKCk7bWsoKTtmaygpO2drKCk7YmsoKTtweigpO1B6KCk7dmsoKTt5aygpO3hrKCk7bTcoKTt3aygpO3h6KCk7TWsoKTtlNygpO3prKCk7a2soKTtKTSgpO1NrKCk7Q2soKTtfaygpO1RrKCk7TGsoKTskaygpO0FrKCk7RGsoKX0pO3ZhciBURz1iKCgpPT57fSk7dmFyIExHPWIoKCk9Pnt9KTt2YXIgJEc9YigoKT0+e2pNKCk7VU0oKTtXTSgpO0dNKCk7WU0oKTtaTSgpO1hNKCk7S00oKTt0eigpO2V6KCk7a0coKTtheigpO1NHKCk7cjcoKTtpeigpO3J6KCk7c3ooKTtueigpO296KCk7bHooKTtjeigpO2R6KCk7bXooKTtmeigpO2d6KCk7YnooKTt2eigpO3l6KCk7d3ooKTtNeigpO3p6KCk7Q3ooKTtTeigpO2t6KCk7X3ooKTtWTSgpO1R6KCk7THooKTskeigpO0F6KCk7RHooKTtoeigpO0V6KCk7SXooKTtDYygpO3V6KCk7TnooKTtGeigpO0NHKCk7YTcoKTtPeigpO19jKCk7UnooKTtCeigpO0h6KCk7cXooKTtWeigpO3pjKCk7anooKTtVeigpO1RHKCk7V3ooKTtHeigpO1l6KCk7WnooKTtYeigpO0xHKCk7S3ooKTtRTSgpO1F6KCk7SnooKTtlaygpO3RrKCk7SWQoKTthaygpO2lrKCk7cmsoKTtzaygpO25rKCk7b2soKTtsaygpO2NrKCk7ZGsoKTtwaygpO2hrKCk7dWsoKTtrYygpO21rKCk7ZmsoKTtnaygpO2JrKCk7cHooKTtQeigpO3ZrKCk7eWsoKTt4aygpO203KCk7d2soKTt4eigpO01rKCk7ZTcoKTt6aygpO2trKCk7Sk0oKTtTaygpO0NrKCk7X2soKTtUaygpO0xrKCk7JGsoKTtfRygpO0FrKCk7RGsoKX0pO3ZhciBOND17fTtXZShONCx7T2JzZXJ2YWJsZTooKT0+TXQsUmVwbGF5U3ViamVjdDooKT0+TmQsU3ViamVjdDooKT0+X2EsU3Vic2NyaXB0aW9uOigpPT5PMSxmcm9tOigpPT5Sbyxmcm9tRXZlbnQ6KCk9PkhvLG9mOigpPT5TYyxvcHM6KCk9PkdTdH0pO3ZhciBHU3QsYjc9YigoKT0+e0VrKCk7JEcoKTtHU3Q9e2J1ZmZlcjpvNyxidWZmZXJDb3VudDpsNyxidWZmZXJUaW1lOmM3LGRlYm91bmNlOmQ3LGRlYm91bmNlVGltZTpwNyxmaWx0ZXI6bjcsbWFwOmhuLHN0YXJ0V2l0aDpoNyx0YWtlVW50aWw6dTcsdGhyb3R0bGVUaW1lOmc3fX0pO3ZhciBQayxBRz1iKCgpPT57X2QoKTtiNygpO1BrPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXk9bmV3IEFycmF5LHRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXk9bmV3IEFycmF5fWdldFN1YmplY3RGb3JFbWl0dGVyRXZlbnQoZSxhKXtsZXQgaT10aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5maW5kKHI9PnIuZXZlbnRSZWY9PT1lJiZyLmV2ZW50PT09YSk7aWYoaSlyZXR1cm4gaS5zdWJqZWN0O3tsZXQgcj1IbyhlLGEpLHM9bmV3IF9hO3Iuc3Vic2NyaWJlKHMpO2xldCBuPXtzdWJqZWN0OnMsZXZlbnRSZWY6ZSxldmVudDphfTtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkucHVzaChuKSxuLnN1YmplY3R9fWdldFN1YmplY3RGb3JFdmVudFRhcmdldChlLGEpe2xldCBpPXRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkuZmluZChyPT5yLmV2ZW50UmVmPT09ZSYmci5ldmVudD09PWEpO2lmKGkpcmV0dXJuIGkuc3ViamVjdDt7bGV0IHM9e3N1YmplY3Q6bmV3IF9hLGV2ZW50UmVmOmUsZXZlbnQ6YX07cmV0dXJuIHRoaXMub2JzZXJ2YWJsZUV2ZW50VGFyZ2V0QnVuZGxlQXJyYXkucHVzaChzKSxzLnN1YmplY3R9fX19KTt2YXIgSWssREc9YigoKT0+e19kKCk7YjcoKTtJaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucz17bmV4dDplPT57fSxjb21wbGV0ZTplPT57fX0sdGhpcy5nZW5lcmF0b3I9bnVsbCx0aGlzLmJ1ZmZlcmVkPSExLHRoaXMucGF5bG9hZEJ1ZmZlcj1bXSx0aGlzLm9ic2VydmFibGU9bmV3IE10KGU9Pnt0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMubmV4dD0oLi4uYSk9PmUubmV4dChhKSx0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMuY29tcGxldGU9KCk9Pih0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKSxlLmNvbXBsZXRlKCkpfSksdGhpcy5jb21wbGV0ZWREZWZmZXJlZD1IZS5kZWZlcigpLHRoaXMuY29tcGxldGVkPXRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZX1zZXRPYnNlcnZhYmxlKGUpe3RoaXMub2JzZXJ2YWJsZT1lfXB1c2goZSl7dGhpcy5idWZmZXJlZD90aGlzLnBheWxvYWRCdWZmZXIucHVzaChlKTp0aGlzLmludGVybmFsUHVzaChlKX1wdXNoTWFueShlKXtmb3IobGV0IGEgb2YgZSl0aGlzLnB1c2goYSl9c2V0R2VuZXJhdG9yKGUpe3RoaXMuZ2VuZXJhdG9yPWV9bWFrZUJ1ZmZlcmVkKCl7dGhpcy5idWZmZXJlZD0hMH1zdWJzY3JpYmUoLi4uZSl7cmV0dXJuIHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoLi4uZSl9cmVxdWVzdChlKXtpZihlIT09MClmb3IobGV0IGE9MDthIT09ZTthKyspaWYodGhpcy5wYXlsb2FkQnVmZmVyLmxlbmd0aD4wKXRoaXMuaW50ZXJuYWxQdXNoKHRoaXMucGF5bG9hZEJ1ZmZlci5zaGlmdCgpKTtlbHNle2xldCBpPXRoaXMuZ2VuZXJhdG9yLm5leHQoKTt0aGlzLmludGVybmFsUHVzaChpLnZhbHVlKX19c2lnbmFsQ29tcGxldGUoKXt0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMuY29tcGxldGUoKX1pbnRlcm5hbFB1c2goZSl7dGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQoZSl9fX0pO2Z1bmN0aW9uIFlTdCh0KXtyZXR1cm4gbmV3IE10KGU9PntsZXQgYT0oKT0+dC5wYXVzZSgpLGk9KCk9PnByb2Nlc3MubmV4dFRpY2soKCk9PnQucmVzdW1lKCkpLHI9cz0+e2EoKSxlLm5leHQocyksaSgpfTtyZXR1cm4gdC5vbigiZGF0YSIsciksdC5vbigiZXJyb3IiLHM9PmUuZXJyb3IocykpLHQub24oImVuZCIsKCk9PmUuY29tcGxldGUoKSksdC5vbigiY2xvc2UiLCgpPT5lLmNvbXBsZXRlKCkpLCgpPT57dC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsciksdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGUuZXJyb3IpLHQucmVtb3ZlTGlzdGVuZXIoImVuZCIsZS5jb21wbGV0ZSksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGUuY29tcGxldGUpfX0pfXZhciBFRz1iKCgpPT57RWsoKX0pO3ZhciBEdD17fTtXZShEdCx7T2JzZXJ2YWJsZUludGFrZTooKT0+SWssT2JzZXJ2YWJsZW1hcDooKT0+UGssZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmU6KCk9PllTdCxyeGpzOigpPT5ONH0pO3ZhciBJaT1iKCgpPT57X2QoKTtBRygpO0RHKCk7RUcoKTtiNygpfSk7ZnVuY3Rpb24gSSh0KXtyZXR1cm4oZSxhKT0+dHlwZW9mIGE9PSJvYmplY3QiP1BHKHQsZSxhKTooKGkscixzKT0+e2xldCBuPXIuaGFzT3duUHJvcGVydHkocyk7cmV0dXJuIHIuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkocyxpKSxuP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTp2b2lkIDB9KSh0LGUsYSl9dmFyIFpTdCxQRyx2Nz1iKCgpPT57b2MoKTtaU3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6UzQscmVmbGVjdDohMSxoYXNDaGFuZ2VkOm5jfSxQRz0odD1aU3QsZSxhKT0+e2xldHtraW5kOmksbWV0YWRhdGE6cn09YSxzPWdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5nZXQocik7aWYocz09PXZvaWQgMCYmZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChyLHM9bmV3IE1hcCksaT09PSJzZXR0ZXIiJiYoKHQ9T2JqZWN0LmNyZWF0ZSh0KSkud3JhcHBlZD0hMCkscy5zZXQoYS5uYW1lLHQpLGk9PT0iYWNjZXNzb3IiKXtsZXR7bmFtZTpufT1hO3JldHVybntzZXQobyl7bGV0IGQ9ZS5nZXQuY2FsbCh0aGlzKTtlLnNldC5jYWxsKHRoaXMsbyksdGhpcy5yZXF1ZXN0VXBkYXRlKG4sZCx0LCEwLG8pfSxpbml0KG8pe3JldHVybiBvIT09dm9pZCAwJiZ0aGlzLkMobix2b2lkIDAsdCxvKSxvfX19aWYoaT09PSJzZXR0ZXIiKXtsZXR7bmFtZTpufT1hO3JldHVybiBmdW5jdGlvbihvKXtsZXQgZD10aGlzW25dO2UuY2FsbCh0aGlzLG8pLHRoaXMucmVxdWVzdFVwZGF0ZShuLGQsdCwhMCxvKX19dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGRlY29yYXRvciBsb2NhdGlvbjogIitpKX19KTt2YXIgSUc9YigoKT0+e3Y3KCl9KTt2YXIgTkc9YigoKT0+e30pO3ZhciBwdD17fTtXZShwdCx7VGltZW91dDooKT0+eTcsZGVsYXlGb3I6KCk9PkZHLGRlbGF5Rm9yUmFuZG9tOigpPT5YU3R9KTt2YXIgRkcsWFN0LHk3LGJyPWIoKCk9PntkMigpO0ZHPWFzeW5jKHQsZSxhPSExKT0+KGF3YWl0IG5ldyB5Nyh0LG51bGwsYSkucHJvbWlzZSxlKSxYU3Q9YXN5bmModCxlLGEsaT0hMSk9Pihhd2FpdCBGRyhNYXRoLnJhbmRvbSgpKihlLXQpK3QsbnVsbCxpKSxhKSx5Nz1jbGFzc3tjb25zdHJ1Y3RvcihlLGEsaT0hMSl7dGhpcy5fY2FuY2VsbGVkPSExLHRoaXMudGltZW91dEluTWlsbGlzPWUsdGhpcy5fZGVmZXJyZWQ9Y24oKSx0aGlzLnByb21pc2U9dGhpcy5fZGVmZXJyZWQucHJvbWlzZSx0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYW5jZWxsZWR8fHRoaXMuX2RlZmVycmVkLnJlc29sdmUoYSl9LGUpLHRoaXMuc3RhcnRlZD1EYXRlLm5vdygpLGkmJnRoaXMubWFrZVVucmVmZWQoKX1tYWtlVW5yZWZlZCgpe3RoaXMuX3RpbWVvdXQudW5yZWYoKX1jYW5jZWwoKXt0aGlzLl9jYW5jZWxsZWQ9ITAsY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpfWdldFRpbWVMZWZ0KCl7bGV0IGU9dGhpcy5zdGFydGVkK3RoaXMudGltZW91dEluTWlsbGlzLURhdGUubm93KCk7cmV0dXJuIGU+MD9lOjB9fX0pO3ZhciB1bj17fTt2YXIgVGM9YigoKT0+e30pO2Z1bmN0aW9uIHFvKHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpO3JldHVybiB0LnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCJcXCQmIikucmVwbGFjZSgvLS9nLCJcXHgyZCIpfXZhciB4Nz1iKCgpPT57fSk7dmFyIExjPXt9O1dlKExjLHtpc01hdGNoOigpPT5KU3QsbWF0Y2hlcjooKT0+UVN0fSk7ZnVuY3Rpb24gUVN0KHQsZSxhKXtyZXR1cm4gUkcodCxlLGEsITEpfWZ1bmN0aW9uIEpTdCh0LGUsYSl7cmV0dXJuIFJHKHQsZSxhLCEwKS5sZW5ndGg+MH12YXIgTmssT0csS1N0LFJHLEJHPWIoKCk9Pnt4NygpO05rPW5ldyBNYXAsT0c9KHQsZSk9PntpZighQXJyYXkuaXNBcnJheSh0KSlzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjp0PVt0XTticmVhaztjYXNlInVuZGVmaW5lZCI6dD1bXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICcke2V9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIHR9J2ApfXJldHVybiB0LmZpbHRlcihhPT57aWYodHlwZW9mIGEhPSJzdHJpbmciKXtpZih0eXBlb2YgYT4idSIpcmV0dXJuITE7dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7ZX0nIHRvIGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGJ1dCBmb3VuZCBhIHR5cGUgb2YgJyR7dHlwZW9mIGF9JyBpbiB0aGUgYXJyYXlgKX1yZXR1cm4hMH0pfSxLU3Q9KHQsZSk9PntlPXtjYXNlU2Vuc2l0aXZlOiExLC4uLmV9O2xldCBhPXQrSlNPTi5zdHJpbmdpZnkoZSk7aWYoTmsuaGFzKGEpKXJldHVybiBOay5nZXQoYSk7bGV0IGk9dFswXT09PSIhIjtpJiYodD10LnNsaWNlKDEpKSx0PXFvKHQpLnJlcGxhY2UoL1xcXCovZywiW1xcc1xcU10qIik7bGV0IHI9bmV3IFJlZ0V4cChgXiR7dH0kYCxlLmNhc2VTZW5zaXRpdmU/IiI6ImkiKTtyZXR1cm4gci5uZWdhdGVkPWksTmsuc2V0KGEscikscn0sUkc9KHQsZSxhLGkpPT57aWYodD1PRyh0LCJpbnB1dHMiKSxlPU9HKGUsInBhdHRlcm5zIiksZS5sZW5ndGg9PT0wKXJldHVybltdO2U9ZS5tYXAobj0+S1N0KG4sYSkpO2xldHthbGxQYXR0ZXJuczpyfT1hfHx7fSxzPVtdO2ZvcihsZXQgbiBvZiB0KXtsZXQgbyxkPVsuLi5lXS5maWxsKCExKTtmb3IobGV0W2MscF1vZiBlLmVudHJpZXMoKSlpZihwLnRlc3QobikmJihkW2NdPSEwLG89IXAubmVnYXRlZCwhbykpYnJlYWs7aWYoIShvPT09ITF8fG89PT12b2lkIDAmJmUuc29tZShjPT4hYy5uZWdhdGVkKXx8ciYmZC5zb21lKChjLHApPT4hYyYmIWVbcF0ubmVnYXRlZCkpJiYocy5wdXNoKG4pLGkpKWJyZWFrfXJldHVybiBzfX0pO3ZhciBIRz1iKCgpPT57QkcoKX0pO3ZhciBvcz17fTtXZShvcyx7U21hcnRNYXRjaDooKT0+Rmt9KTt2YXIgRmssT2s9YigoKT0+e0hHKCk7Rms9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy53aWxkY2FyZD1lfW1hdGNoKGUpe3JldHVybiBMYy5pc01hdGNoKGUsdGhpcy53aWxkY2FyZCl9fX0pO3ZhciBFYz17fTtXZShFYyx7Q3JvbjooKT0+R0csQ3JvbkRhdGU6KCk9PlExLENyb25QYXR0ZXJuOigpPT53NyxzY2hlZHVsZWRKb2JzOigpPT5GNH0pO2Z1bmN0aW9uICRjKHQpe3JldHVybiBEYXRlLlVUQyh0LnksdC5tLTEsdC5kLHQuaCx0LmksdC5zKX1mdW5jdGlvbiBSayh0LGUpe3JldHVybiB0Lnk9PT1lLnkmJnQubT09PWUubSYmdC5kPT09ZS5kJiZ0Lmg9PT1lLmgmJnQuaT09PWUuaSYmdC5zPT09ZS5zfWZ1bmN0aW9uIHRDdCh0LGUpe2xldCBhPW5ldyBEYXRlKERhdGUucGFyc2UodCkpO2lmKGlzTmFOKGEpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBJU084NjAxIHBhc3NlZCB0byB0aW1lem9uZSBwYXJzZXIuIik7bGV0IGk9dC5zdWJzdHJpbmcoOSk7cmV0dXJuIGkuaW5jbHVkZXMoIloiKXx8aS5pbmNsdWRlcygiKyIpfHxpLmluY2x1ZGVzKCItIik/QmsoYS5nZXRVVENGdWxsWWVhcigpLGEuZ2V0VVRDTW9udGgoKSsxLGEuZ2V0VVRDRGF0ZSgpLGEuZ2V0VVRDSG91cnMoKSxhLmdldFVUQ01pbnV0ZXMoKSxhLmdldFVUQ1NlY29uZHMoKSwiRXRjL1VUQyIpOkJrKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkrMSxhLmdldERhdGUoKSxhLmdldEhvdXJzKCksYS5nZXRNaW51dGVzKCksYS5nZXRTZWNvbmRzKCksZSl9ZnVuY3Rpb24gcUcodCxlLGEpe3JldHVybiBWRyh0Q3QodCxlKSxhKX1mdW5jdGlvbiBWRyh0LGUpe2xldCBhPW5ldyBEYXRlKCRjKHQpKSxpPUFjKGEsdC50eikscj0kYyh0KSxzPSRjKGkpLG49ci1zLG89bmV3IERhdGUoYS5nZXRUaW1lKCkrbiksZD1BYyhvLHQudHopO2lmKFJrKGQsdCkpe2xldCBsPW5ldyBEYXRlKG8uZ2V0VGltZSgpLTM2ZTUpLGY9QWMobCx0LnR6KTtyZXR1cm4gUmsoZix0KT9sOm99bGV0IGM9bmV3IERhdGUoby5nZXRUaW1lKCkrJGModCktJGMoZCkpLHA9QWMoYyx0LnR6KTtpZihSayhwLHQpKXJldHVybiBjO2lmKGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIGZyb21UWigpIik7cmV0dXJuIG8uZ2V0VGltZSgpPmMuZ2V0VGltZSgpP286Y31mdW5jdGlvbiBBYyh0LGUpe2xldCBhLGk7dHJ5e2E9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIix7dGltZVpvbmU6ZSx5ZWFyOiJudW1lcmljIixtb250aDoibnVtZXJpYyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsaG91cjEyOiExfSksaT1hLmZvcm1hdFRvUGFydHModCl9Y2F0Y2gocyl7bGV0IG49cyBpbnN0YW5jZW9mIEVycm9yP3MubWVzc2FnZTpTdHJpbmcocyk7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRvVFo6IEludmFsaWQgdGltZXpvbmUgJyR7ZX0nIG9yIGRhdGUuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgSUFOQSB0aW1lem9uZSAoZS5nLiwgJ0FtZXJpY2EvTmV3X1lvcmsnLCAnRXVyb3BlL1N0b2NraG9sbScpLiBPcmlnaW5hbCBlcnJvcjogJHtufWApfWxldCByPXt5ZWFyOjAsbW9udGg6MCxkYXk6MCxob3VyOjAsbWludXRlOjAsc2Vjb25kOjB9O2ZvcihsZXQgcyBvZiBpKShzLnR5cGU9PT0ieWVhciJ8fHMudHlwZT09PSJtb250aCJ8fHMudHlwZT09PSJkYXkifHxzLnR5cGU9PT0iaG91ciJ8fHMudHlwZT09PSJtaW51dGUifHxzLnR5cGU9PT0ic2Vjb25kIikmJihyW3MudHlwZV09cGFyc2VJbnQocy52YWx1ZSwxMCkpO2lmKGlzTmFOKHIueWVhcil8fGlzTmFOKHIubW9udGgpfHxpc05hTihyLmRheSl8fGlzTmFOKHIuaG91cil8fGlzTmFOKHIubWludXRlKXx8aXNOYU4oci5zZWNvbmQpKXRocm93IG5ldyBFcnJvcihgdG9UWjogRmFpbGVkIHRvIHBhcnNlIGFsbCBkYXRlIGNvbXBvbmVudHMgZnJvbSB0aW1lem9uZSAnJHtlfScuIFRoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgZGF0ZSBvciB0aW1lem9uZSBjb25maWd1cmF0aW9uLiBQYXJzZWQgY29tcG9uZW50czogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtyZXR1cm4gci5ob3VyPT09MjQmJihyLmhvdXI9MCkse3k6ci55ZWFyLG06ci5tb250aCxkOnIuZGF5LGg6ci5ob3VyLGk6ci5taW51dGUsczpyLnNlY29uZCx0ejplfX1mdW5jdGlvbiBCayh0LGUsYSxpLHIscyxuKXtyZXR1cm57eTp0LG06ZSxkOmEsaDppLGk6cixzLHR6Om59fWZ1bmN0aW9uIGFDdCh0KXtpZih0PT09dm9pZCAwJiYodD17fSksZGVsZXRlIHQubmFtZSx0LmxlZ2FjeU1vZGUhPT12b2lkIDAmJnQuZG9tQW5kRG93PT09dm9pZCAwP3QuZG9tQW5kRG93PSF0LmxlZ2FjeU1vZGU6dC5kb21BbmREb3c9PT12b2lkIDAmJih0LmRvbUFuZERvdz0hMSksdC5sZWdhY3lNb2RlPSF0LmRvbUFuZERvdyx0LnBhdXNlZD10LnBhdXNlZD09PXZvaWQgMD8hMTp0LnBhdXNlZCx0Lm1heFJ1bnM9dC5tYXhSdW5zPT09dm9pZCAwPzEvMDp0Lm1heFJ1bnMsdC5jYXRjaD10LmNhdGNoPT09dm9pZCAwPyExOnQuY2F0Y2gsdC5pbnRlcnZhbD10LmludGVydmFsPT09dm9pZCAwPzA6cGFyc2VJbnQodC5pbnRlcnZhbC50b1N0cmluZygpLDEwKSx0LnV0Y09mZnNldD10LnV0Y09mZnNldD09PXZvaWQgMD92b2lkIDA6cGFyc2VJbnQodC51dGNPZmZzZXQudG9TdHJpbmcoKSwxMCksdC5kYXlPZmZzZXQ9dC5kYXlPZmZzZXQ9PT12b2lkIDA/MDpwYXJzZUludCh0LmRheU9mZnNldC50b1N0cmluZygpLDEwKSx0LnVucmVmPXQudW5yZWY9PT12b2lkIDA/ITE6dC51bnJlZix0Lm1vZGU9dC5tb2RlPT09dm9pZCAwPyJhdXRvIjp0Lm1vZGUsdC5hbHRlcm5hdGl2ZVdlZWtkYXlzPXQuYWx0ZXJuYXRpdmVXZWVrZGF5cz09PXZvaWQgMD8hMTp0LmFsdGVybmF0aXZlV2Vla2RheXMsdC5zbG9wcHlSYW5nZXM9dC5zbG9wcHlSYW5nZXM9PT12b2lkIDA/ITE6dC5zbG9wcHlSYW5nZXMsIVsiYXV0byIsIjUtcGFydCIsIjYtcGFydCIsIjctcGFydCIsIjUtb3ItNi1wYXJ0cyIsIjYtb3ItNy1wYXJ0cyJdLmluY2x1ZGVzKHQubW9kZSkpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogbW9kZSBtdXN0IGJlIG9uZSBvZiAnYXV0bycsICc1LXBhcnQnLCAnNi1wYXJ0JywgJzctcGFydCcsICc1LW9yLTYtcGFydHMnLCBvciAnNi1vci03LXBhcnRzJy4iKTtpZih0LnN0YXJ0QXQmJih0LnN0YXJ0QXQ9bmV3IFExKHQuc3RhcnRBdCx0LnRpbWV6b25lKSksdC5zdG9wQXQmJih0LnN0b3BBdD1uZXcgUTEodC5zdG9wQXQsdC50aW1lem9uZSkpLHQuaW50ZXJ2YWwhPT1udWxsKXtpZihpc05hTih0LmludGVydmFsKSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgaXMgbm90IGEgbnVtYmVyIik7aWYodC5pbnRlcnZhbDwwKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBjYW4gbm90IGJlIG5lZ2F0aXZlIil9aWYodC51dGNPZmZzZXQhPT12b2lkIDApe2lmKGlzTmFOKHQudXRjT2Zmc2V0KSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgdXRjT2Zmc2V0LCBzaG91bGQgYmUgbnVtYmVyIHJlcHJlc2VudGluZyBtaW51dGVzIG9mZnNldCBmcm9tIFVUQy4iKTtpZih0LnV0Y09mZnNldDwtODcwfHx0LnV0Y09mZnNldD44NzApdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogdXRjT2Zmc2V0IG91dCBvZiBib3VuZHMuIik7aWYodC51dGNPZmZzZXQhPT12b2lkIDAmJnQudGltZXpvbmUpdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogQ29tYmluaW5nICd1dGNPZmZzZXQnIHdpdGggJ3RpbWV6b25lJyBpcyBub3QgYWxsb3dlZC4iKX1pZih0LnVucmVmIT09ITAmJnQudW5yZWYhPT0hMSl0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBVbnJlZiBzaG91bGQgYmUgZWl0aGVyIHRydWUsIGZhbHNlIG9yIHVuZGVmaW5lZChmYWxzZSkuIik7aWYodC5kYXlPZmZzZXQhPT12b2lkIDAmJnQuZGF5T2Zmc2V0IT09MCYmaXNOYU4odC5kYXlPZmZzZXQpKXRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciBkYXlPZmZzZXQsIHNob3VsZCBiZSBhIG51bWJlciByZXByZXNlbnRpbmcgZGF5cyB0byBvZmZzZXQuIik7cmV0dXJuIHR9ZnVuY3Rpb24gRGModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24ifHx0IGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gaUN0KHQpe3JldHVybiBEYyh0KX1mdW5jdGlvbiByQ3QodCl7dHlwZW9mIERlbm88InUiJiZ0eXBlb2YgRGVuby51bnJlZlRpbWVyPCJ1Ij9EZW5vLnVucmVmVGltZXIodCk6dCYmdHlwZW9mIHQudW5yZWY8InUiJiZ0LnVucmVmKCl9dmFyIGpHLHc3LEhrLGIxLFExLFVHLEY0LEdHLFlHPWIoKCk9PntqRz1bMSwyLDQsOCwxNl0sdzc9Y2xhc3N7cGF0dGVybjt0aW1lem9uZTttb2RlO2FsdGVybmF0aXZlV2Vla2RheXM7c2xvcHB5UmFuZ2VzO3NlY29uZDttaW51dGU7aG91cjtkYXk7bW9udGg7ZGF5T2ZXZWVrO3llYXI7bGFzdERheU9mTW9udGg7bGFzdFdlZWtkYXk7bmVhcmVzdFdlZWtkYXlzO3N0YXJET007c3RhckRPVztzdGFyWWVhcjt1c2VBbmRMb2dpYztjb25zdHJ1Y3Rvcih0LGUsYSl7dGhpcy5wYXR0ZXJuPXQsdGhpcy50aW1lem9uZT1lLHRoaXMubW9kZT1hPy5tb2RlPz8iYXV0byIsdGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzPWE/LmFsdGVybmF0aXZlV2Vla2RheXM/PyExLHRoaXMuc2xvcHB5UmFuZ2VzPWE/LnNsb3BweVJhbmdlcz8/ITEsdGhpcy5zZWNvbmQ9QXJyYXkoNjApLmZpbGwoMCksdGhpcy5taW51dGU9QXJyYXkoNjApLmZpbGwoMCksdGhpcy5ob3VyPUFycmF5KDI0KS5maWxsKDApLHRoaXMuZGF5PUFycmF5KDMxKS5maWxsKDApLHRoaXMubW9udGg9QXJyYXkoMTIpLmZpbGwoMCksdGhpcy5kYXlPZldlZWs9QXJyYXkoNykuZmlsbCgwKSx0aGlzLnllYXI9QXJyYXkoMWU0KS5maWxsKDApLHRoaXMubGFzdERheU9mTW9udGg9ITEsdGhpcy5sYXN0V2Vla2RheT0hMSx0aGlzLm5lYXJlc3RXZWVrZGF5cz1BcnJheSgzMSkuZmlsbCgwKSx0aGlzLnN0YXJET009ITEsdGhpcy5zdGFyRE9XPSExLHRoaXMuc3RhclllYXI9ITEsdGhpcy51c2VBbmRMb2dpYz0hMSx0aGlzLnBhcnNlKCl9cGFyc2UoKXtpZighKHR5cGVvZiB0aGlzLnBhdHRlcm49PSJzdHJpbmcifHx0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBQYXR0ZXJuIGhhcyB0byBiZSBvZiB0eXBlIHN0cmluZy4iKTt0aGlzLnBhdHRlcm4uaW5kZXhPZigiQCIpPj0wJiYodGhpcy5wYXR0ZXJuPXRoaXMuaGFuZGxlTmlja25hbWVzKHRoaXMucGF0dGVybikudHJpbSgpKTtsZXQgdD10aGlzLnBhdHRlcm4ubWF0Y2goL1xTKy9nKXx8WyIiXSxlPXQubGVuZ3RoO2lmKHQubGVuZ3RoPDV8fHQubGVuZ3RoPjcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCciK3RoaXMucGF0dGVybisiJyksIGV4YWN0bHkgZml2ZSwgc2l4LCBvciBzZXZlbiBzcGFjZSBzZXBhcmF0ZWQgcGFydHMgYXJlIHJlcXVpcmVkLiIpO2lmKHRoaXMubW9kZSE9PSJhdXRvIil7bGV0IGk7c3dpdGNoKHRoaXMubW9kZSl7Y2FzZSI1LXBhcnQiOmk9NTticmVhaztjYXNlIjYtcGFydCI6aT02O2JyZWFrO2Nhc2UiNy1wYXJ0IjppPTc7YnJlYWs7Y2FzZSI1LW9yLTYtcGFydHMiOmk9WzUsNl07YnJlYWs7Y2FzZSI2LW9yLTctcGFydHMiOmk9WzYsN107YnJlYWs7ZGVmYXVsdDppPTB9aWYoIShBcnJheS5pc0FycmF5KGkpP2kuaW5jbHVkZXMoZSk6ZT09PWkpKXtsZXQgcj1BcnJheS5pc0FycmF5KGkpP2kuam9pbigiIG9yICIpOmkudG9TdHJpbmcoKTt0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbW9kZSAnJHt0aGlzLm1vZGV9JyByZXF1aXJlcyBleGFjdGx5ICR7cn0gcGFydHMsIGJ1dCBwYXR0ZXJuICcke3RoaXMucGF0dGVybn0nIGhhcyAke2V9IHBhcnRzLmApfX1pZih0Lmxlbmd0aD09PTUmJnQudW5zaGlmdCgiMCIpLHQubGVuZ3RoPT09NiYmdC5wdXNoKCIqIiksdFszXS50b1VwcGVyQ2FzZSgpPT09IkxXIj8odGhpcy5sYXN0V2Vla2RheT0hMCx0WzNdPSIiKTp0WzNdLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTCIpPj0wJiYodFszXT10WzNdLnJlcGxhY2UoL0wvZ2ksIiIpLHRoaXMubGFzdERheU9mTW9udGg9ITApLHRbM109PSIqIiYmKHRoaXMuc3RhckRPTT0hMCksdFs2XT09IioiJiYodGhpcy5zdGFyWWVhcj0hMCksdFs0XS5sZW5ndGg+PTMmJih0WzRdPXRoaXMucmVwbGFjZUFscGhhTW9udGhzKHRbNF0pKSx0WzVdLmxlbmd0aD49MyYmKHRbNV09dGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzP3RoaXMucmVwbGFjZUFscGhhRGF5c1F1YXJ0eih0WzVdKTp0aGlzLnJlcGxhY2VBbHBoYURheXModFs1XSkpLHRbNV0uc3RhcnRzV2l0aCgiKyIpJiYodGhpcy51c2VBbmRMb2dpYz0hMCx0WzVdPXRbNV0uc3Vic3RyaW5nKDEpLHRbNV09PT0iIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IERheS1vZi13ZWVrIGZpZWxkIGNhbm5vdCBiZSBlbXB0eSBhZnRlciAnKycgbW9kaWZpZXIuIik7c3dpdGNoKHRbNV09PSIqIiYmKHRoaXMuc3RhckRPVz0hMCksdGhpcy5wYXR0ZXJuLmluZGV4T2YoIj8iKT49MCYmKHRbMF09dFswXS5yZXBsYWNlKC9cPy9nLCIqIiksdFsxXT10WzFdLnJlcGxhY2UoL1w/L2csIioiKSx0WzJdPXRbMl0ucmVwbGFjZSgvXD8vZywiKiIpLHRbM109dFszXS5yZXBsYWNlKC9cPy9nLCIqIiksdFs0XT10WzRdLnJlcGxhY2UoL1w/L2csIioiKSx0WzVdPXRbNV0ucmVwbGFjZSgvXD8vZywiKiIpLHRbNl0mJih0WzZdPXRbNl0ucmVwbGFjZSgvXD8vZywiKiIpKSksdGhpcy5tb2RlKXtjYXNlIjUtcGFydCI6dFswXT0iMCIsdFs2XT0iKiI7YnJlYWs7Y2FzZSI2LXBhcnQiOnRbNl09IioiO2JyZWFrO2Nhc2UiNS1vci02LXBhcnRzIjp0WzZdPSIqIjticmVhaztjYXNlIjYtb3ItNy1wYXJ0cyI6YnJlYWs7Y2FzZSI3LXBhcnQiOmNhc2UiYXV0byI6YnJlYWt9dGhpcy50aHJvd0F0SWxsZWdhbENoYXJhY3RlcnModCksdGhpcy5wYXJ0VG9BcnJheSgic2Vjb25kIix0WzBdLDAsMSksdGhpcy5wYXJ0VG9BcnJheSgibWludXRlIix0WzFdLDAsMSksdGhpcy5wYXJ0VG9BcnJheSgiaG91ciIsdFsyXSwwLDEpLHRoaXMucGFydFRvQXJyYXkoImRheSIsdFszXSwtMSwxKSx0aGlzLnBhcnRUb0FycmF5KCJtb250aCIsdFs0XSwtMSwxKTtsZXQgYT10aGlzLmFsdGVybmF0aXZlV2Vla2RheXM/LTE6MDt0aGlzLnBhcnRUb0FycmF5KCJkYXlPZldlZWsiLHRbNV0sYSw2MyksdGhpcy5wYXJ0VG9BcnJheSgieWVhciIsdFs2XSwwLDEpLCF0aGlzLmFsdGVybmF0aXZlV2Vla2RheXMmJnRoaXMuZGF5T2ZXZWVrWzddJiYodGhpcy5kYXlPZldlZWtbMF09dGhpcy5kYXlPZldlZWtbN10pfXBhcnRUb0FycmF5KHQsZSxhLGkpe2xldCByPXRoaXNbdF0scz10PT09ImRheSImJnRoaXMubGFzdERheU9mTW9udGgsbj10PT09ImRheSImJnRoaXMubGFzdFdlZWtkYXk7aWYoZT09PSIiJiYhcyYmIW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIit0KyIgKCIrZSsiKSBpcyBlbXB0eSwgY2hlY2sgZm9yIHRyYWlsaW5nIHNwYWNlcy4iKTtpZihlPT09IioiKXJldHVybiByLmZpbGwoaSk7bGV0IG89ZS5zcGxpdCgiLCIpO2lmKG8ubGVuZ3RoPjEpZm9yKGxldCBkPTA7ZDxvLmxlbmd0aDtkKyspdGhpcy5wYXJ0VG9BcnJheSh0LG9bZF0sYSxpKTtlbHNlIGUuaW5kZXhPZigiLSIpIT09LTEmJmUuaW5kZXhPZigiLyIpIT09LTE/dGhpcy5oYW5kbGVSYW5nZVdpdGhTdGVwcGluZyhlLHQsYSxpKTplLmluZGV4T2YoIi0iKSE9PS0xP3RoaXMuaGFuZGxlUmFuZ2UoZSx0LGEsaSk6ZS5pbmRleE9mKCIvIikhPT0tMT90aGlzLmhhbmRsZVN0ZXBwaW5nKGUsdCxhLGkpOmUhPT0iIiYmdGhpcy5oYW5kbGVOdW1iZXIoZSx0LGEsaSl9dGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKChlPT09Mz8vW14vKjAtOSxcLVd3TGxdKy86ZT09PTU/L1teLyowLTksXC0jTGxdKy86L1teLyowLTksXC1dKy8pLnRlc3QodFtlXSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIitlKyIgKCIrdFtlXSsiKSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIil9aGFuZGxlTnVtYmVyKHQsZSxhLGkpe2xldCByPXRoaXMuZXh0cmFjdE50aCh0LGUpLHM9dC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIik7aWYoZSE9PSJkYXkiJiZzKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBOZWFyZXN0IHdlZWtkYXkgbW9kaWZpZXIgKFcpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2YtbW9udGguIik7cyYmKGU9Im5lYXJlc3RXZWVrZGF5cyIpO2xldCBuPXBhcnNlSW50KHJbMF0sMTApK2E7aWYoaXNOYU4obikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46ICIrZSsiIGlzIG5vdCBhIG51bWJlcjogJyIrdCsiJyIpO3RoaXMuc2V0UGFydChlLG4sclsxXXx8aSl9c2V0UGFydCh0LGUsYSl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHBhcnQgc3BlY2lmaWVkOiAiK3QpO2lmKHQ9PT0iZGF5T2ZXZWVrIil7aWYoZT09PTcmJihlPTApLGU8MHx8ZT42KXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiAiK2UpO3RoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoZSxhKTtyZXR1cm59aWYodD09PSJzZWNvbmQifHx0PT09Im1pbnV0ZSIpe2lmKGU8MHx8ZT49NjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciAiK3QrIjogIitlKX1lbHNlIGlmKHQ9PT0iaG91ciIpe2lmKGU8MHx8ZT49MjQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciAiK3QrIjogIitlKX1lbHNlIGlmKHQ9PT0iZGF5Inx8dD09PSJuZWFyZXN0V2Vla2RheXMiKXtpZihlPDB8fGU+PTMxKXRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIit0KyI6ICIrZSl9ZWxzZSBpZih0PT09Im1vbnRoIil7aWYoZTwwfHxlPj0xMil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIrdCsiOiAiK2UpfWVsc2UgaWYodD09PSJ5ZWFyIiYmKGU8MXx8ZT49MWU0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIrdCsiOiAiK2UrIiAoc3VwcG9ydGVkIHJhbmdlOiAxLTk5OTkpIik7dGhpc1t0XVtlXT1hfXZhbGlkYXRlTm90TmFOKHQsZSl7aWYoaXNOYU4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcihlKX12YWxpZGF0ZVJhbmdlKHQsZSxhLGkscil7aWYodD5lKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIityKyInIik7aWYoYSE9PXZvaWQgMCl7aWYoYT09PTApdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpO2lmKGE+dGhpc1tpXS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKCIrdGhpc1tpXS5sZW5ndGgrIikiKX19aGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcodCxlLGEsaSl7aWYodC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgVyBpcyBub3QgYWxsb3dlZCBpbiByYW5nZXMgd2l0aCBzdGVwcGluZy4iKTtsZXQgcj10aGlzLmV4dHJhY3ROdGgodCxlKSxzPXJbMF0ubWF0Y2goL14oXGQrKS0oXGQrKVwvKFxkKykkLyk7aWYocz09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnIit0KyInIik7bGV0WyxuLG8sZF09cyxjPXBhcnNlSW50KG4sMTApK2EscD1wYXJzZUludChvLDEwKSthLGw9cGFyc2VJbnQoZCwxMCk7dGhpcy52YWxpZGF0ZU5vdE5hTihjLCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIiksdGhpcy52YWxpZGF0ZU5vdE5hTihwLCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pIiksdGhpcy52YWxpZGF0ZU5vdE5hTihsLCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpLHRoaXMudmFsaWRhdGVSYW5nZShjLHAsbCxlLHQpO2ZvcihsZXQgZj1jO2Y8PXA7Zis9bCl0aGlzLnNldFBhcnQoZSxmLHJbMV18fGkpfWV4dHJhY3ROdGgodCxlKXtsZXQgYT10LGk7aWYoYS5pbmNsdWRlcygiIyIpKXtpZihlIT09ImRheU9mV2VlayIpdGhyb3cgbmV3IEVycm9yKCJDcm9uUGF0dGVybjogbnRoICgjKSBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLXdlZWsgZmllbGQiKTtpPWEuc3BsaXQoIiMiKVsxXSxhPWEuc3BsaXQoIiMiKVswXX1lbHNlIGlmKGEudG9VcHBlckNhc2UoKS5lbmRzV2l0aCgiTCIpKXtpZihlIT09ImRheU9mV2VlayIpdGhyb3cgbmV3IEVycm9yKCJDcm9uUGF0dGVybjogTCBtb2RpZmllciBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLXdlZWsgZmllbGQgKHVzZSBMIGFsb25lIGZvciBkYXktb2YtbW9udGgpIik7aT0iTCIsYT1hLnNsaWNlKDAsLTEpfXJldHVyblthLGldfWhhbmRsZVJhbmdlKHQsZSxhLGkpe2lmKHQudG9VcHBlckNhc2UoKS5pbmNsdWRlcygiVyIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIFcgaXMgbm90IGFsbG93ZWQgaW4gYSByYW5nZS4iKTtsZXQgcj10aGlzLmV4dHJhY3ROdGgodCxlKSxzPXJbMF0uc3BsaXQoIi0iKTtpZihzLmxlbmd0aCE9PTIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJyIrdCsiJyIpO2xldCBuPXBhcnNlSW50KHNbMF0sMTApK2Esbz1wYXJzZUludChzWzFdLDEwKSthO3RoaXMudmFsaWRhdGVOb3ROYU4obiwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpLHRoaXMudmFsaWRhdGVOb3ROYU4obywiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKSIpLHRoaXMudmFsaWRhdGVSYW5nZShuLG8sdm9pZCAwLGUsdCk7Zm9yKGxldCBkPW47ZDw9bztkKyspdGhpcy5zZXRQYXJ0KGUsZCxyWzFdfHxpKX1oYW5kbGVTdGVwcGluZyh0LGUsYSxpKXtpZih0LnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIlciKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBXIGlzIG5vdCBhbGxvd2VkIGluIHBhcnRzIHdpdGggc3RlcHBpbmcuIik7bGV0IHI9dGhpcy5leHRyYWN0TnRoKHQsZSkscz1yWzBdLnNwbGl0KCIvIik7aWYocy5sZW5ndGghPT0yKXRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciK3QrIiciKTtpZih0aGlzLnNsb3BweVJhbmdlcylzWzBdPT09IiImJihzWzBdPSIqIik7ZWxzZXtpZihzWzBdPT09IiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHBpbmcgd2l0aCBtaXNzaW5nIHByZWZpeCAoJyIrdCsiJykgaXMgbm90IGFsbG93ZWQuIFVzZSB3aWxkY2FyZCAoKi9zdGVwKSBvciByYW5nZSAobWluLW1heC9zdGVwKSBpbnN0ZWFkLiIpO2lmKHNbMF0hPT0iKiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHBpbmcgd2l0aCBudW1lcmljIHByZWZpeCAoJyIrdCsiJykgaXMgbm90IGFsbG93ZWQuIFVzZSB3aWxkY2FyZCAoKi9zdGVwKSBvciByYW5nZSAobWluLW1heC9zdGVwKSBpbnN0ZWFkLiIpfWxldCBuPTA7c1swXSE9PSIqIiYmKG49cGFyc2VJbnQoc1swXSwxMCkrYSk7bGV0IG89cGFyc2VJbnQoc1sxXSwxMCk7dGhpcy52YWxpZGF0ZU5vdE5hTihvLCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpLHRoaXMudmFsaWRhdGVSYW5nZSgwLHRoaXNbZV0ubGVuZ3RoLTEsbyxlLHQpO2ZvcihsZXQgZD1uO2Q8dGhpc1tlXS5sZW5ndGg7ZCs9byl0aGlzLnNldFBhcnQoZSxkLHJbMV18fGkpfXJlcGxhY2VBbHBoYURheXModCl7cmV0dXJuIHQucmVwbGFjZSgvLXN1bi9naSwiLTciKS5yZXBsYWNlKC9zdW4vZ2ksIjAiKS5yZXBsYWNlKC9tb24vZ2ksIjEiKS5yZXBsYWNlKC90dWUvZ2ksIjIiKS5yZXBsYWNlKC93ZWQvZ2ksIjMiKS5yZXBsYWNlKC90aHUvZ2ksIjQiKS5yZXBsYWNlKC9mcmkvZ2ksIjUiKS5yZXBsYWNlKC9zYXQvZ2ksIjYiKX1yZXBsYWNlQWxwaGFEYXlzUXVhcnR6KHQpe3JldHVybiB0LnJlcGxhY2UoL3N1bi9naSwiMSIpLnJlcGxhY2UoL21vbi9naSwiMiIpLnJlcGxhY2UoL3R1ZS9naSwiMyIpLnJlcGxhY2UoL3dlZC9naSwiNCIpLnJlcGxhY2UoL3RodS9naSwiNSIpLnJlcGxhY2UoL2ZyaS9naSwiNiIpLnJlcGxhY2UoL3NhdC9naSwiNyIpfXJlcGxhY2VBbHBoYU1vbnRocyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9qYW4vZ2ksIjEiKS5yZXBsYWNlKC9mZWIvZ2ksIjIiKS5yZXBsYWNlKC9tYXIvZ2ksIjMiKS5yZXBsYWNlKC9hcHIvZ2ksIjQiKS5yZXBsYWNlKC9tYXkvZ2ksIjUiKS5yZXBsYWNlKC9qdW4vZ2ksIjYiKS5yZXBsYWNlKC9qdWwvZ2ksIjciKS5yZXBsYWNlKC9hdWcvZ2ksIjgiKS5yZXBsYWNlKC9zZXAvZ2ksIjkiKS5yZXBsYWNlKC9vY3QvZ2ksIjEwIikucmVwbGFjZSgvbm92L2dpLCIxMSIpLnJlcGxhY2UoL2RlYy9naSwiMTIiKX1oYW5kbGVOaWNrbmFtZXModCl7bGV0IGU9dC50cmltKCkudG9Mb3dlckNhc2UoKTtpZihlPT09IkB5ZWFybHkifHxlPT09IkBhbm51YWxseSIpcmV0dXJuIjAgMCAxIDEgKiI7aWYoZT09PSJAbW9udGhseSIpcmV0dXJuIjAgMCAxICogKiI7aWYoZT09PSJAd2Vla2x5IilyZXR1cm4iMCAwICogKiAwIjtpZihlPT09IkBkYWlseSJ8fGU9PT0iQG1pZG5pZ2h0IilyZXR1cm4iMCAwICogKiAqIjtpZihlPT09IkBob3VybHkiKXJldHVybiIwICogKiAqICoiO2lmKGU9PT0iQHJlYm9vdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IEByZWJvb3QgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiBUaGlzIGlzIGFuIGV2ZW50LWJhc2VkIHRyaWdnZXIgdGhhdCByZXF1aXJlcyBzeXN0ZW0gc3RhcnR1cCBkZXRlY3Rpb24uIik7cmV0dXJuIHR9c2V0TnRoV2Vla2RheU9mTW9udGgodCxlKXtpZih0eXBlb2YgZSE9Im51bWJlciImJmUudG9VcHBlckNhc2UoKT09PSJMIil0aGlzLmRheU9mV2Vla1t0XT10aGlzLmRheU9mV2Vla1t0XXwzMjtlbHNlIGlmKGU9PT02Myl0aGlzLmRheU9mV2Vla1t0XT02MztlbHNlIGlmKGU8NiYmZT4wKXRoaXMuZGF5T2ZXZWVrW3RdPXRoaXMuZGF5T2ZXZWVrW3RdfGpHW2UtMV07ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbnRoIHdlZWtkYXkgb3V0IG9mIHJhbmdlLCBzaG91bGQgYmUgMS01IG9yIEwuIFZhbHVlOiAke2V9LCBUeXBlOiAke3R5cGVvZiBlfWApfX0sSGs9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxiMT1bWyJtb250aCIsInllYXIiLDBdLFsiZGF5IiwibW9udGgiLC0xXSxbImhvdXIiLCJkYXkiLDBdLFsibWludXRlIiwiaG91ciIsMF0sWyJzZWNvbmQiLCJtaW51dGUiLDBdXSxRMT1jbGFzcyBXR3t0ejttcztzZWNvbmQ7bWludXRlO2hvdXI7ZGF5O21vbnRoO3llYXI7Y29uc3RydWN0b3IoZSxhKXtpZih0aGlzLnR6PWEsZSYmZSBpbnN0YW5jZW9mIERhdGUpaWYoIWlzTmFOKGUpKXRoaXMuZnJvbURhdGUoZSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uRGF0ZTogSW52YWxpZCBkYXRlIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpO2Vsc2UgaWYoZT09bnVsbCl0aGlzLmZyb21EYXRlKG5ldyBEYXRlKTtlbHNlIGlmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIil0aGlzLmZyb21TdHJpbmcoZSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgV0cpdGhpcy5mcm9tQ3JvbkRhdGUoZSk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uRGF0ZTogSW52YWxpZCB0eXBlICgiK3R5cGVvZiBlKyIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpfWdldExhc3REYXlPZk1vbnRoKGUsYSl7cmV0dXJuIGEhPT0xP0hrW2FdOm5ldyBEYXRlKERhdGUuVVRDKGUsYSsxLDApKS5nZXRVVENEYXRlKCl9Z2V0TGFzdFdlZWtkYXkoZSxhKXtsZXQgaT10aGlzLmdldExhc3REYXlPZk1vbnRoKGUsYSkscj1uZXcgRGF0ZShEYXRlLlVUQyhlLGEsaSkpLmdldFVUQ0RheSgpO3JldHVybiByPT09MD9pLTI6cj09PTY/aS0xOml9Z2V0TmVhcmVzdFdlZWtkYXkoZSxhLGkpe2xldCByPXRoaXMuZ2V0TGFzdERheU9mTW9udGgoZSxhKTtpZihpPnIpcmV0dXJuLTE7bGV0IHM9bmV3IERhdGUoRGF0ZS5VVEMoZSxhLGkpKS5nZXRVVENEYXkoKTtyZXR1cm4gcz09PTA/aT09PXI/aS0yOmkrMTpzPT09Nj9pPT09MT9pKzI6aS0xOml9aXNOdGhXZWVrZGF5T2ZNb250aChlLGEsaSxyKXtsZXQgcz1uZXcgRGF0ZShEYXRlLlVUQyhlLGEsaSkpLmdldFVUQ0RheSgpLG49MDtmb3IobGV0IG89MTtvPD1pO28rKyluZXcgRGF0ZShEYXRlLlVUQyhlLGEsbykpLmdldFVUQ0RheSgpPT09cyYmbisrO2lmKHImNjMmJmpHW24tMV0mcilyZXR1cm4hMDtpZihyJjMyKXtsZXQgbz10aGlzLmdldExhc3REYXlPZk1vbnRoKGUsYSk7Zm9yKGxldCBkPWkrMTtkPD1vO2QrKylpZihuZXcgRGF0ZShEYXRlLlVUQyhlLGEsZCkpLmdldFVUQ0RheSgpPT09cylyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mcm9tRGF0ZShlKXtpZih0aGlzLnR6IT09dm9pZCAwKWlmKHR5cGVvZiB0aGlzLnR6PT0ibnVtYmVyIil0aGlzLm1zPWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksdGhpcy5zZWNvbmQ9ZS5nZXRVVENTZWNvbmRzKCksdGhpcy5taW51dGU9ZS5nZXRVVENNaW51dGVzKCkrdGhpcy50eix0aGlzLmhvdXI9ZS5nZXRVVENIb3VycygpLHRoaXMuZGF5PWUuZ2V0VVRDRGF0ZSgpLHRoaXMubW9udGg9ZS5nZXRVVENNb250aCgpLHRoaXMueWVhcj1lLmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5hcHBseSgpO2Vsc2UgdHJ5e2xldCBhPUFjKGUsdGhpcy50eik7dGhpcy5tcz1lLmdldE1pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPWEucyx0aGlzLm1pbnV0ZT1hLmksdGhpcy5ob3VyPWEuaCx0aGlzLmRheT1hLmQsdGhpcy5tb250aD1hLm0tMSx0aGlzLnllYXI9YS55fWNhdGNoKGEpe2xldCBpPWEgaW5zdGFuY2VvZiBFcnJvcj9hLm1lc3NhZ2U6U3RyaW5nKGEpO3Rocm93IG5ldyBUeXBlRXJyb3IoYENyb25EYXRlOiBGYWlsZWQgdG8gY29udmVydCBkYXRlIHRvIHRpbWV6b25lICcke3RoaXMudHp9Jy4gVGhpcyBtYXkgaGFwcGVuIHdpdGggaW52YWxpZCB0aW1lem9uZSBuYW1lcyBvciBkYXRlcy4gT3JpZ2luYWwgZXJyb3I6ICR7aX1gKX1lbHNlIHRoaXMubXM9ZS5nZXRNaWxsaXNlY29uZHMoKSx0aGlzLnNlY29uZD1lLmdldFNlY29uZHMoKSx0aGlzLm1pbnV0ZT1lLmdldE1pbnV0ZXMoKSx0aGlzLmhvdXI9ZS5nZXRIb3VycygpLHRoaXMuZGF5PWUuZ2V0RGF0ZSgpLHRoaXMubW9udGg9ZS5nZXRNb250aCgpLHRoaXMueWVhcj1lLmdldEZ1bGxZZWFyKCl9ZnJvbUNyb25EYXRlKGUpe3RoaXMudHo9ZS50eix0aGlzLnllYXI9ZS55ZWFyLHRoaXMubW9udGg9ZS5tb250aCx0aGlzLmRheT1lLmRheSx0aGlzLmhvdXI9ZS5ob3VyLHRoaXMubWludXRlPWUubWludXRlLHRoaXMuc2Vjb25kPWUuc2Vjb25kLHRoaXMubXM9ZS5tc31hcHBseSgpe2lmKHRoaXMubW9udGg+MTF8fHRoaXMubW9udGg8MHx8dGhpcy5kYXk+SGtbdGhpcy5tb250aF18fHRoaXMuZGF5PDF8fHRoaXMuaG91cj41OXx8dGhpcy5taW51dGU+NTl8fHRoaXMuc2Vjb25kPjU5fHx0aGlzLmhvdXI8MHx8dGhpcy5taW51dGU8MHx8dGhpcy5zZWNvbmQ8MCl7bGV0IGU9bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMubXMpKTtyZXR1cm4gdGhpcy5tcz1lLmdldFVUQ01pbGxpc2Vjb25kcygpLHRoaXMuc2Vjb25kPWUuZ2V0VVRDU2Vjb25kcygpLHRoaXMubWludXRlPWUuZ2V0VVRDTWludXRlcygpLHRoaXMuaG91cj1lLmdldFVUQ0hvdXJzKCksdGhpcy5kYXk9ZS5nZXRVVENEYXRlKCksdGhpcy5tb250aD1lLmdldFVUQ01vbnRoKCksdGhpcy55ZWFyPWUuZ2V0VVRDRnVsbFllYXIoKSwhMH1lbHNlIHJldHVybiExfWZyb21TdHJpbmcoZSl7aWYodHlwZW9mIHRoaXMudHo9PSJudW1iZXIiKXtsZXQgYT1xRyhlKTt0aGlzLm1zPWEuZ2V0VVRDTWlsbGlzZWNvbmRzKCksdGhpcy5zZWNvbmQ9YS5nZXRVVENTZWNvbmRzKCksdGhpcy5taW51dGU9YS5nZXRVVENNaW51dGVzKCksdGhpcy5ob3VyPWEuZ2V0VVRDSG91cnMoKSx0aGlzLmRheT1hLmdldFVUQ0RhdGUoKSx0aGlzLm1vbnRoPWEuZ2V0VVRDTW9udGgoKSx0aGlzLnllYXI9YS5nZXRVVENGdWxsWWVhcigpLHRoaXMuYXBwbHkoKX1lbHNlIHJldHVybiB0aGlzLmZyb21EYXRlKHFHKGUsdGhpcy50eikpfWZpbmROZXh0KGUsYSxpLHIpe3JldHVybiB0aGlzLl9maW5kTWF0Y2goZSxhLGksciwxKX1fZmluZE1hdGNoKGUsYSxpLHIscyl7bGV0IG49dGhpc1thXSxvO2kubGFzdERheU9mTW9udGgmJihvPXRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpKTtsZXQgZD0haS5zdGFyRE9XJiZhPT0iZGF5Ij9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCwxLDAsMCwwLDApKS5nZXRVVENEYXkoKTp2b2lkIDAsYz10aGlzW2FdK3IscD1zPT09MT9sPT5sPGlbYV0ubGVuZ3RoOmw9Pmw+PTA7Zm9yKGxldCBsPWM7cChsKTtsKz1zKXtsZXQgZj1pW2FdW2xdO2lmKGE9PT0iZGF5IiYmIWYpe2ZvcihsZXQgZz0wO2c8aS5uZWFyZXN0V2Vla2RheXMubGVuZ3RoO2crKylpZihpLm5lYXJlc3RXZWVrZGF5c1tnXSl7bGV0IHk9dGhpcy5nZXROZWFyZXN0V2Vla2RheSh0aGlzLnllYXIsdGhpcy5tb250aCxnLXIpO2lmKHk9PT0tMSljb250aW51ZTtpZih5PT09bC1yKXtmPTE7YnJlYWt9fX1pZihhPT09ImRheSImJmkubGFzdFdlZWtkYXkpe2xldCBnPXRoaXMuZ2V0TGFzdFdlZWtkYXkodGhpcy55ZWFyLHRoaXMubW9udGgpO2wtcj09PWcmJihmPTEpfWlmKGE9PT0iZGF5IiYmaS5sYXN0RGF5T2ZNb250aCYmbC1yPT1vJiYoZj0xKSxhPT09ImRheSImJiFpLnN0YXJET1cpe2xldCBnPWkuZGF5T2ZXZWVrWyhkKyhsLXItMSkpJTddO2lmKGcmJmcmNjMpZz10aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgsbC1yLGcpPzE6MDtlbHNlIGlmKGcpdGhyb3cgbmV3IEVycm9yKGBDcm9uRGF0ZTogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrIGVuY291bnRlcmVkLiAke2d9YCk7aS51c2VBbmRMb2dpYz9mPWYmJmc6IWUuZG9tQW5kRG93JiYhaS5zdGFyRE9NP2Y9Znx8ZzpmPWYmJmd9aWYoZilyZXR1cm4gdGhpc1thXT1sLXIsbiE9PXRoaXNbYV0/MjoxfXJldHVybiAzfXJlY3Vyc2UoZSxhLGkpe2lmKGk9PT0wJiYhZS5zdGFyWWVhcil7aWYodGhpcy55ZWFyPj0wJiZ0aGlzLnllYXI8ZS55ZWFyLmxlbmd0aCYmZS55ZWFyW3RoaXMueWVhcl09PT0wKXtsZXQgcz0tMTtmb3IobGV0IG49dGhpcy55ZWFyKzE7bjxlLnllYXIubGVuZ3RoJiZuPDFlNDtuKyspaWYoZS55ZWFyW25dPT09MSl7cz1uO2JyZWFrfWlmKHM9PT0tMSlyZXR1cm4gbnVsbDt0aGlzLnllYXI9cyx0aGlzLm1vbnRoPTAsdGhpcy5kYXk9MSx0aGlzLmhvdXI9MCx0aGlzLm1pbnV0ZT0wLHRoaXMuc2Vjb25kPTAsdGhpcy5tcz0wfWlmKHRoaXMueWVhcj49MWU0KXJldHVybiBudWxsfWxldCByPXRoaXMuZmluZE5leHQoYSxiMVtpXVswXSxlLGIxW2ldWzJdKTtpZihyPjEpe2xldCBzPWkrMTtmb3IoO3M8YjEubGVuZ3RoOyl0aGlzW2IxW3NdWzBdXT0tYjFbc11bMl0scysrO2lmKHI9PT0zKXtpZih0aGlzW2IxW2ldWzFdXSsrLHRoaXNbYjFbaV1bMF1dPS1iMVtpXVsyXSx0aGlzLmFwcGx5KCksaT09PTAmJiFlLnN0YXJZZWFyKXtmb3IoO3RoaXMueWVhcj49MCYmdGhpcy55ZWFyPGUueWVhci5sZW5ndGgmJmUueWVhclt0aGlzLnllYXJdPT09MCYmdGhpcy55ZWFyPDFlNDspdGhpcy55ZWFyKys7aWYodGhpcy55ZWFyPj0xZTR8fHRoaXMueWVhcj49ZS55ZWFyLmxlbmd0aClyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5yZWN1cnNlKGUsYSwwKX1lbHNlIGlmKHRoaXMuYXBwbHkoKSlyZXR1cm4gdGhpcy5yZWN1cnNlKGUsYSxpLTEpfXJldHVybiBpKz0xLGk+PWIxLmxlbmd0aD90aGlzOihlLnN0YXJZZWFyP3RoaXMueWVhcj49M2UzOnRoaXMueWVhcj49MWU0KT9udWxsOnRoaXMucmVjdXJzZShlLGEsaSl9aW5jcmVtZW50KGUsYSxpKXtyZXR1cm4gdGhpcy5zZWNvbmQrPWEuaW50ZXJ2YWwhPT12b2lkIDAmJmEuaW50ZXJ2YWw+MSYmaT9hLmludGVydmFsOjEsdGhpcy5tcz0wLHRoaXMuYXBwbHkoKSx0aGlzLnJlY3Vyc2UoZSxhLDApfWRlY3JlbWVudChlLGEpe3JldHVybiB0aGlzLnNlY29uZC09YS5pbnRlcnZhbCE9PXZvaWQgMCYmYS5pbnRlcnZhbD4xP2EuaW50ZXJ2YWw6MSx0aGlzLm1zPTAsdGhpcy5hcHBseSgpLHRoaXMucmVjdXJzZUJhY2t3YXJkKGUsYSwwLDApfXJlY3Vyc2VCYWNrd2FyZChlLGEsaSxyPTApe2lmKHI+MWU0KXJldHVybiBudWxsO2lmKGk9PT0wJiYhZS5zdGFyWWVhcil7aWYodGhpcy55ZWFyPj0wJiZ0aGlzLnllYXI8ZS55ZWFyLmxlbmd0aCYmZS55ZWFyW3RoaXMueWVhcl09PT0wKXtsZXQgbj0tMTtmb3IobGV0IG89dGhpcy55ZWFyLTE7bz49MDtvLS0paWYoZS55ZWFyW29dPT09MSl7bj1vO2JyZWFrfWlmKG49PT0tMSlyZXR1cm4gbnVsbDt0aGlzLnllYXI9bix0aGlzLm1vbnRoPTExLHRoaXMuZGF5PTMxLHRoaXMuaG91cj0yMyx0aGlzLm1pbnV0ZT01OSx0aGlzLnNlY29uZD01OSx0aGlzLm1zPTB9aWYodGhpcy55ZWFyPDApcmV0dXJuIG51bGx9bGV0IHM9dGhpcy5maW5kUHJldmlvdXMoYSxiMVtpXVswXSxlLGIxW2ldWzJdKTtpZihzPjEpe2xldCBuPWkrMTtmb3IoO248YjEubGVuZ3RoOyl7bGV0IG89YjFbbl1bMF0sZD1iMVtuXVsyXSxjPXRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKG8sZSxkKTt0aGlzW29dPWMsbisrfWlmKHM9PT0zKXtpZih0aGlzW2IxW2ldWzFdXS0tLGk9PT0wKXtsZXQgcD10aGlzLmdldExhc3REYXlPZk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheT5wJiYodGhpcy5kYXk9cCl9aWYoaT09PTEpaWYodGhpcy5kYXk8PTApdGhpcy5kYXk9MTtlbHNle2xldCBwPXRoaXMueWVhcixsPXRoaXMubW9udGg7Zm9yKDtsPDA7KWwrPTEyLHAtLTtmb3IoO2w+MTE7KWwtPTEyLHArKztsZXQgZj1sIT09MT9Ia1tsXTpuZXcgRGF0ZShEYXRlLlVUQyhwLGwrMSwwKSkuZ2V0VVRDRGF0ZSgpO3RoaXMuZGF5PmYmJih0aGlzLmRheT1mKX10aGlzLmFwcGx5KCk7bGV0IG89YjFbaV1bMF0sZD1iMVtpXVsyXSxjPXRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKG8sZSxkKTtpZihvPT09ImRheSIpe2xldCBwPXRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpO3RoaXNbb109TWF0aC5taW4oYyxwKX1lbHNlIHRoaXNbb109YztpZih0aGlzLmFwcGx5KCksaT09PTApe2xldCBwPWIxWzFdWzJdLGw9dGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUoImRheSIsZSxwKSxmPXRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpLGc9TWF0aC5taW4obCxmKTtnIT09dGhpcy5kYXkmJih0aGlzLmRheT1nLHRoaXMuaG91cj10aGlzLmdldE1heFBhdHRlcm5WYWx1ZSgiaG91ciIsZSxiMVsyXVsyXSksdGhpcy5taW51dGU9dGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUoIm1pbnV0ZSIsZSxiMVszXVsyXSksdGhpcy5zZWNvbmQ9dGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUoInNlY29uZCIsZSxiMVs0XVsyXSkpfWlmKGk9PT0wJiYhZS5zdGFyWWVhcil7Zm9yKDt0aGlzLnllYXI+PTAmJnRoaXMueWVhcjxlLnllYXIubGVuZ3RoJiZlLnllYXJbdGhpcy55ZWFyXT09PTA7KXRoaXMueWVhci0tO2lmKHRoaXMueWVhcjwwKXJldHVybiBudWxsfXJldHVybiB0aGlzLnJlY3Vyc2VCYWNrd2FyZChlLGEsMCxyKzEpfWVsc2UgaWYodGhpcy5hcHBseSgpKXJldHVybiB0aGlzLnJlY3Vyc2VCYWNrd2FyZChlLGEsaS0xLHIrMSl9cmV0dXJuIGkrPTEsaT49YjEubGVuZ3RoP3RoaXM6dGhpcy55ZWFyPDA/bnVsbDp0aGlzLnJlY3Vyc2VCYWNrd2FyZChlLGEsaSxyKzEpfWdldE1heFBhdHRlcm5WYWx1ZShlLGEsaSl7aWYoZT09PSJkYXkiJiZhLmxhc3REYXlPZk1vbnRoKXJldHVybiB0aGlzLmdldExhc3REYXlPZk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoKTtpZihlPT09ImRheSImJiFhLnN0YXJET1cpcmV0dXJuIHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpO2ZvcihsZXQgcj1hW2VdLmxlbmd0aC0xO3I+PTA7ci0tKWlmKGFbZV1bcl0pcmV0dXJuIHItaTtyZXR1cm4gYVtlXS5sZW5ndGgtMS1pfWZpbmRQcmV2aW91cyhlLGEsaSxyKXtyZXR1cm4gdGhpcy5fZmluZE1hdGNoKGUsYSxpLHIsLTEpfWdldERhdGUoZSl7cmV0dXJuIGV8fHRoaXMudHo9PT12b2lkIDA/bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMubXMpOnR5cGVvZiB0aGlzLnR6PT0ibnVtYmVyIj9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUtdGhpcy50eix0aGlzLnNlY29uZCx0aGlzLm1zKSk6VkcoQmsodGhpcy55ZWFyLHRoaXMubW9udGgrMSx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy50eiksITEpfWdldFRpbWUoKXtyZXR1cm4gdGhpcy5nZXREYXRlKCExKS5nZXRUaW1lKCl9bWF0Y2goZSxhKXtpZighZS5zdGFyWWVhciYmKHRoaXMueWVhcjwwfHx0aGlzLnllYXI+PWUueWVhci5sZW5ndGh8fGUueWVhclt0aGlzLnllYXJdPT09MCkpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxiMS5sZW5ndGg7aSsrKXtsZXQgcj1iMVtpXVswXSxzPWIxW2ldWzJdLG49dGhpc1tyXTtpZihuK3M8MHx8bitzPj1lW3JdLmxlbmd0aClyZXR1cm4hMTtsZXQgbz1lW3JdW24rc107aWYocj09PSJkYXkiKXtpZighbyl7Zm9yKGxldCBkPTA7ZDxlLm5lYXJlc3RXZWVrZGF5cy5sZW5ndGg7ZCsrKWlmKGUubmVhcmVzdFdlZWtkYXlzW2RdKXtsZXQgYz10aGlzLmdldE5lYXJlc3RXZWVrZGF5KHRoaXMueWVhcix0aGlzLm1vbnRoLGQtcyk7aWYoYyE9PS0xJiZjPT09bil7bz0xO2JyZWFrfX19aWYoZS5sYXN0V2Vla2RheSl7bGV0IGQ9dGhpcy5nZXRMYXN0V2Vla2RheSh0aGlzLnllYXIsdGhpcy5tb250aCk7bj09PWQmJihvPTEpfWlmKGUubGFzdERheU9mTW9udGgpe2xldCBkPXRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgpO249PT1kJiYobz0xKX1pZighZS5zdGFyRE9XKXtsZXQgZD1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCwxLDAsMCwwLDApKS5nZXRVVENEYXkoKSxjPWUuZGF5T2ZXZWVrWyhkKyhuLTEpKSU3XTtjJiZjJjYzJiYoYz10aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLHRoaXMubW9udGgsbixjKT8xOjApLGUudXNlQW5kTG9naWM/bz1vJiZjOiFhLmRvbUFuZERvdyYmIWUuc3RhckRPTT9vPW98fGM6bz1vJiZjfX1pZighbylyZXR1cm4hMX1yZXR1cm4hMH19O1VHPTMwKjFlMyxGND1bXSxHRz1jbGFzc3tuYW1lO29wdGlvbnM7X3N0YXRlcztmbjtnZXRUeigpe3JldHVybiB0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXR9YXBwbHlEYXlPZmZzZXQodCl7aWYodGhpcy5vcHRpb25zLmRheU9mZnNldCE9PXZvaWQgMCYmdGhpcy5vcHRpb25zLmRheU9mZnNldCE9PTApe2xldCBlPXRoaXMub3B0aW9ucy5kYXlPZmZzZXQqMjQqNjAqNjAqMWUzO3JldHVybiBuZXcgRGF0ZSh0LmdldFRpbWUoKStlKX1yZXR1cm4gdH1jb25zdHJ1Y3Rvcih0LGUsYSl7bGV0IGkscjtpZihEYyhlKSlyPWU7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpaT1lO2Vsc2UgaWYoZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7aWYoRGMoYSkpcj1hO2Vsc2UgaWYodHlwZW9mIGE9PSJvYmplY3QiKWk9YTtlbHNlIGlmKGEhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3IgZnVuY0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLiIpO2lmKHRoaXMubmFtZT1pPy5uYW1lLHRoaXMub3B0aW9ucz1hQ3QoaSksdGhpcy5fc3RhdGVzPXtraWxsOiExLGJsb2NraW5nOiExLHByZXZpb3VzUnVuOnZvaWQgMCxjdXJyZW50UnVuOnZvaWQgMCxvbmNlOnZvaWQgMCxjdXJyZW50VGltZW91dDp2b2lkIDAsbWF4UnVuczppP2kubWF4UnVuczp2b2lkIDAscGF1c2VkOmk/aS5wYXVzZWQ6ITEscGF0dGVybjpuZXcgdzcoIiogKiAqICogKiIsdm9pZCAwLHttb2RlOiJhdXRvIn0pfSx0JiYodCBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiB0PT0ic3RyaW5nIiYmdC5pbmRleE9mKCI6Iik+MCk/dGhpcy5fc3RhdGVzLm9uY2U9bmV3IFExKHQsdGhpcy5nZXRUeigpKTp0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgdzcodCx0aGlzLm9wdGlvbnMudGltZXpvbmUse21vZGU6dGhpcy5vcHRpb25zLm1vZGUsYWx0ZXJuYXRpdmVXZWVrZGF5czp0aGlzLm9wdGlvbnMuYWx0ZXJuYXRpdmVXZWVrZGF5cyxzbG9wcHlSYW5nZXM6dGhpcy5vcHRpb25zLnNsb3BweVJhbmdlc30pLHRoaXMubmFtZSl7aWYoRjQuZmluZChzPT5zLm5hbWU9PT10aGlzLm5hbWUpKXRocm93IG5ldyBFcnJvcigiQ3JvbjogVHJpZWQgdG8gaW5pdGlhbGl6ZSBuZXcgbmFtZWQgam9iICciK3RoaXMubmFtZSsiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTtGNC5wdXNoKHRoaXMpfXJldHVybiByIT09dm9pZCAwJiZpQ3QocikmJih0aGlzLmZuPXIsdGhpcy5zY2hlZHVsZSgpKSx0aGlzfW5leHRSdW4odCl7bGV0IGU9dGhpcy5fbmV4dCh0KTtyZXR1cm4gZT90aGlzLmFwcGx5RGF5T2Zmc2V0KGUuZ2V0RGF0ZSghMSkpOm51bGx9bmV4dFJ1bnModCxlKXt0aGlzLl9zdGF0ZXMubWF4UnVucyE9PXZvaWQgMCYmdD50aGlzLl9zdGF0ZXMubWF4UnVucyYmKHQ9dGhpcy5fc3RhdGVzLm1heFJ1bnMpO2xldCBhPWV8fHRoaXMuX3N0YXRlcy5jdXJyZW50UnVufHx2b2lkIDA7cmV0dXJuIHRoaXMuX2VudW1lcmF0ZVJ1bnModCxhLCJuZXh0Iil9cHJldmlvdXNSdW5zKHQsZSl7cmV0dXJuIHRoaXMuX2VudW1lcmF0ZVJ1bnModCxlfHx2b2lkIDAsInByZXZpb3VzIil9X2VudW1lcmF0ZVJ1bnModCxlLGEpe2xldCBpPVtdLHI9ZT9uZXcgUTEoZSx0aGlzLmdldFR6KCkpOm51bGwscz1hPT09Im5leHQiP3RoaXMuX25leHQ6dGhpcy5fcHJldmlvdXM7Zm9yKDt0LS07KXtsZXQgbj1zLmNhbGwodGhpcyxyKTtpZighbilicmVhaztsZXQgbz1uLmdldERhdGUoITEpO2kucHVzaCh0aGlzLmFwcGx5RGF5T2Zmc2V0KG8pKSxyPW59cmV0dXJuIGl9bWF0Y2godCl7aWYodGhpcy5fc3RhdGVzLm9uY2Upe2xldCBhPW5ldyBRMSh0LHRoaXMuZ2V0VHooKSk7YS5tcz0wO2xldCBpPW5ldyBRMSh0aGlzLl9zdGF0ZXMub25jZSx0aGlzLmdldFR6KCkpO3JldHVybiBpLm1zPTAsYS5nZXRUaW1lKCk9PT1pLmdldFRpbWUoKX1sZXQgZT1uZXcgUTEodCx0aGlzLmdldFR6KCkpO3JldHVybiBlLm1zPTAsZS5tYXRjaCh0aGlzLl9zdGF0ZXMucGF0dGVybix0aGlzLm9wdGlvbnMpfWdldFBhdHRlcm4oKXtpZighdGhpcy5fc3RhdGVzLm9uY2UpcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXR0ZXJuP3RoaXMuX3N0YXRlcy5wYXR0ZXJuLnBhdHRlcm46dm9pZCAwfWdldE9uY2UoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLm9uY2U/dGhpcy5fc3RhdGVzLm9uY2UuZ2V0RGF0ZSgpOm51bGx9aXNSdW5uaW5nKCl7bGV0IHQ9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSxlPSF0aGlzLl9zdGF0ZXMucGF1c2VkLGE9dGhpcy5mbiE9PXZvaWQgMCxpPSF0aGlzLl9zdGF0ZXMua2lsbDtyZXR1cm4gZSYmYSYmaSYmdCE9PW51bGx9aXNTdG9wcGVkKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsfWlzQnVzeSgpe3JldHVybiB0aGlzLl9zdGF0ZXMuYmxvY2tpbmd9Y3VycmVudFJ1bigpe3JldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90aGlzLl9zdGF0ZXMuY3VycmVudFJ1bi5nZXREYXRlKCk6bnVsbH1wcmV2aW91c1J1bigpe3JldHVybiB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4/dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKTpudWxsfW1zVG9OZXh0KHQpe2xldCBlPXRoaXMuX25leHQodCk7cmV0dXJuIGU/dCBpbnN0YW5jZW9mIFExfHx0IGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKS10LmdldFRpbWUoKTplLmdldFRpbWUoKS1uZXcgUTEodCkuZ2V0VGltZSgpOm51bGx9c3RvcCgpe3RoaXMuX3N0YXRlcy5raWxsPSEwLHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCk7bGV0IHQ9RjQuaW5kZXhPZih0aGlzKTt0Pj0wJiZGNC5zcGxpY2UodCwxKX1wYXVzZSgpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF1c2VkPSEwLCF0aGlzLl9zdGF0ZXMua2lsbH1yZXN1bWUoKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZD0hMSwhdGhpcy5fc3RhdGVzLmtpbGx9c2NoZWR1bGUodCl7aWYodCYmdGhpcy5mbil0aHJvdyBuZXcgRXJyb3IoIkNyb246IEl0IGlzIG5vdCBhbGxvd2VkIHRvIHNjaGVkdWxlIHR3byBmdW5jdGlvbnMgdXNpbmcgdGhlIHNhbWUgQ3JvbmVyIGluc3RhbmNlLiIpO3QmJih0aGlzLmZuPXQpO2xldCBlPXRoaXMubXNUb05leHQoKSxhPXRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7cmV0dXJuIGU9PW51bGx8fGlzTmFOKGUpfHxhPT09bnVsbD90aGlzOihlPlVHJiYoZT1VRyksdGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2NoZWNrVHJpZ2dlcihhKSxlKSx0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQmJnRoaXMub3B0aW9ucy51bnJlZiYmckN0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCksdGhpcyl9YXN5bmMgX3RyaWdnZXIodCl7dGhpcy5fc3RhdGVzLmJsb2NraW5nPSEwLHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuPW5ldyBRMSh2b2lkIDAsdGhpcy5nZXRUeigpKTt0cnl7aWYodGhpcy5vcHRpb25zLmNhdGNoKXRyeXt0aGlzLmZuIT09dm9pZCAwJiZhd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpfWNhdGNoKGUpe2lmKERjKHRoaXMub3B0aW9ucy5jYXRjaCkpdHJ5e3RoaXMub3B0aW9ucy5jYXRjaChlLHRoaXMpfWNhdGNoe319ZWxzZSB0aGlzLmZuIT09dm9pZCAwJiZhd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpfWZpbmFsbHl7dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuPW5ldyBRMSh0LHRoaXMuZ2V0VHooKSksdGhpcy5fc3RhdGVzLmJsb2NraW5nPSExfX1hc3luYyB0cmlnZ2VyKCl7YXdhaXQgdGhpcy5fdHJpZ2dlcigpfXJ1bnNMZWZ0KCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5tYXhSdW5zfV9jaGVja1RyaWdnZXIodCl7bGV0IGU9bmV3IERhdGUsYT0hdGhpcy5fc3RhdGVzLnBhdXNlZCYmZS5nZXRUaW1lKCk+PXQuZ2V0VGltZSgpLGk9dGhpcy5fc3RhdGVzLmJsb2NraW5nJiZ0aGlzLm9wdGlvbnMucHJvdGVjdDthJiYhaT8odGhpcy5fc3RhdGVzLm1heFJ1bnMhPT12b2lkIDAmJnRoaXMuX3N0YXRlcy5tYXhSdW5zLS0sdGhpcy5fdHJpZ2dlcigpKTphJiZpJiZEYyh0aGlzLm9wdGlvbnMucHJvdGVjdCkmJnNldFRpbWVvdXQoKCk9PnRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLDApLHRoaXMuc2NoZWR1bGUoKX1fbmV4dCh0KXtsZXQgZT0hISh0fHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biksYT0hMTshdCYmdGhpcy5vcHRpb25zLnN0YXJ0QXQmJnRoaXMub3B0aW9ucy5pbnRlcnZhbCYmKFt0LGVdPXRoaXMuX2NhbGN1bGF0ZVByZXZpb3VzUnVuKHQsZSksYT0hdCksdD1uZXcgUTEodCx0aGlzLmdldFR6KCkpLHRoaXMub3B0aW9ucy5zdGFydEF0JiZ0JiZ0LmdldFRpbWUoKTx0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkmJih0PXRoaXMub3B0aW9ucy5zdGFydEF0KTtsZXQgaT10aGlzLl9zdGF0ZXMub25jZXx8bmV3IFExKHQsdGhpcy5nZXRUeigpKTtyZXR1cm4hYSYmaSE9PXRoaXMuX3N0YXRlcy5vbmNlJiYoaT1pLmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybix0aGlzLm9wdGlvbnMsZSkpLHRoaXMuX3N0YXRlcy5vbmNlJiZ0aGlzLl9zdGF0ZXMub25jZS5nZXRUaW1lKCk8PXQuZ2V0VGltZSgpfHxpPT09bnVsbHx8dGhpcy5fc3RhdGVzLm1heFJ1bnMhPT12b2lkIDAmJnRoaXMuX3N0YXRlcy5tYXhSdW5zPD0wfHx0aGlzLl9zdGF0ZXMua2lsbHx8dGhpcy5vcHRpb25zLnN0b3BBdCYmaS5nZXRUaW1lKCk+PXRoaXMub3B0aW9ucy5zdG9wQXQuZ2V0VGltZSgpP251bGw6aX1fcHJldmlvdXModCl7bGV0IGU9bmV3IFExKHQsdGhpcy5nZXRUeigpKTt0aGlzLm9wdGlvbnMuc3RvcEF0JiZlLmdldFRpbWUoKT50aGlzLm9wdGlvbnMuc3RvcEF0LmdldFRpbWUoKSYmKGU9dGhpcy5vcHRpb25zLnN0b3BBdCk7bGV0IGE9bmV3IFExKGUsdGhpcy5nZXRUeigpKTtyZXR1cm4gdGhpcy5fc3RhdGVzLm9uY2U/dGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpPGUuZ2V0VGltZSgpP3RoaXMuX3N0YXRlcy5vbmNlOm51bGw6KGE9YS5kZWNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zKSxhPT09bnVsbHx8dGhpcy5vcHRpb25zLnN0YXJ0QXQmJmEuZ2V0VGltZSgpPHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKT9udWxsOmEpfV9jYWxjdWxhdGVQcmV2aW91c1J1bih0LGUpe2xldCBhPW5ldyBRMSh2b2lkIDAsdGhpcy5nZXRUeigpKSxpPXQ7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpPD1hLmdldFRpbWUoKSl7aT10aGlzLm9wdGlvbnMuc3RhcnRBdDtsZXQgcj1pLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO2Zvcig7cjw9YS5nZXRUaW1lKCk7KWk9bmV3IFExKGksdGhpcy5nZXRUeigpKS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLCEwKSxyPWkuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTM7ZT0hMH1yZXR1cm4gaT09PW51bGwmJihpPXZvaWQgMCksW2ksZV19fX0pO3ZhciB6NyxQYyxzQ3QseHMxLHZyLGs3LE8yLElhLE80LHFrLGZuLFI0LFM3LEM3LF83LFQ3LFZvLEI0LE03LFpHLFZrLGprLFhHLFVrLHl0PWIoKCk9Pnt6Nz03LFBjPTM2NS4yNDI1LHNDdD1NYXRoLnBvdygxMCw4KSoyNCo2MCo2MCoxZTMseHMxPS1zQ3QsdnI9NjA0OGU1LGs3PTg2NGU1LE8yPTZlNCxJYT0zNmU1LE80PTFlMyxxaz01MjU2MDAsZm49NDMyMDAsUjQ9MTQ0MCxTNz02MCxDNz0zLF83PTEyLFQ3PTQsVm89MzYwMCxCND02MCxNNz1WbyoyNCxaRz1NNyo3LFZrPU03KjM2NS4yNDI1LGprPVZrLzEyLFhHPWprKjMsVWs9U3ltYm9sLmZvcigiY29uc3RydWN0RGF0ZUZyb20iKX0pO2Z1bmN0aW9uIExlKHQsZSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoZSk6dCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZVayBpbiB0P3RbVWtdKGUpOnQgaW5zdGFuY2VvZiBEYXRlP25ldyB0LmNvbnN0cnVjdG9yKGUpOm5ldyBEYXRlKGUpfXZhciB6czEsYXQ9YigoKT0+e3l0KCk7enMxPUxlfSk7ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gTGUoZXx8dCx0KX12YXIgQ3MxLEFlPWIoKCk9PnthdCgpO0NzMT1uZX0pO2Z1bmN0aW9uIEoxKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKTtyZXR1cm4gaXNOYU4oZSk/TGUoYT8uaW58fHQsTmFOKTooZSYmaS5zZXREYXRlKGkuZ2V0RGF0ZSgpK2UpLGkpfXZhciAkczEseXI9YigoKT0+e2F0KCk7QWUoKTskczE9SjF9KTtmdW5jdGlvbiB4cih0LGUsYSl7bGV0IGk9bmUodCxhPy5pbik7aWYoaXNOYU4oZSkpcmV0dXJuIExlKGE/LmlufHx0LE5hTik7aWYoIWUpcmV0dXJuIGk7bGV0IHI9aS5nZXREYXRlKCkscz1MZShhPy5pbnx8dCxpLmdldFRpbWUoKSk7cy5zZXRNb250aChpLmdldE1vbnRoKCkrZSsxLDApO2xldCBuPXMuZ2V0RGF0ZSgpO3JldHVybiByPj1uP3M6KGkuc2V0RnVsbFllYXIocy5nZXRGdWxsWWVhcigpLHMuZ2V0TW9udGgoKSxyKSxpKX12YXIgUHMxLEg0PWIoKCk9PnthdCgpO0FlKCk7UHMxPXhyfSk7ZnVuY3Rpb24gbW4odCxlLGEpe2xldHt5ZWFyczppPTAsbW9udGhzOnI9MCx3ZWVrczpzPTAsZGF5czpuPTAsaG91cnM6bz0wLG1pbnV0ZXM6ZD0wLHNlY29uZHM6Yz0wfT1lLHA9bmUodCxhPy5pbiksbD1yfHxpP3hyKHAscitpKjEyKTpwLGY9bnx8cz9KMShsLG4rcyo3KTpsLGc9ZCtvKjYwLHY9KGMrZyo2MCkqMWUzO3JldHVybiBMZShhPy5pbnx8dCwrZit2KX12YXIgQnMxLFdrPWIoKCk9Pnt5cigpO0g0KCk7YXQoKTtBZSgpO0JzMT1tbn0pO2Z1bmN0aW9uIEw3KHQsZSl7cmV0dXJuIG5lKHQsZT8uaW4pLmdldERheSgpPT09Nn12YXIgVnMxLEdrPWIoKCk9PntBZSgpO1ZzMT1MN30pO2Z1bmN0aW9uICQ3KHQsZSl7cmV0dXJuIG5lKHQsZT8uaW4pLmdldERheSgpPT09MH12YXIgV3MxLFlrPWIoKCk9PntBZSgpO1dzMT0kN30pO2Z1bmN0aW9uIHdyKHQsZSl7bGV0IGE9bmUodCxlPy5pbikuZ2V0RGF5KCk7cmV0dXJuIGE9PT0wfHxhPT09Nn12YXIgWnMxLEljPWIoKCk9PntBZSgpO1pzMT13cn0pO2Z1bmN0aW9uIEE3KHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKSxyPXdyKGksYSk7aWYoaXNOYU4oZSkpcmV0dXJuIExlKGE/LmluLE5hTik7bGV0IHM9aS5nZXRIb3VycygpLG49ZTwwPy0xOjEsbz1NYXRoLnRydW5jKGUvNSk7aS5zZXREYXRlKGkuZ2V0RGF0ZSgpK28qNyk7bGV0IGQ9TWF0aC5hYnMoZSU1KTtmb3IoO2Q+MDspaS5zZXREYXRlKGkuZ2V0RGF0ZSgpK24pLHdyKGksYSl8fChkLT0xKTtyZXR1cm4gciYmd3IoaSxhKSYmZSE9PTAmJihMNyhpLGEpJiZpLnNldERhdGUoaS5nZXREYXRlKCkrKG48MD8yOi0xKSksJDcoaSxhKSYmaS5zZXREYXRlKGkuZ2V0RGF0ZSgpKyhuPDA/MTotMikpKSxpLnNldEhvdXJzKHMpLGl9dmFyIGFuMSxaaz1iKCgpPT57YXQoKTtHaygpO1lrKCk7SWMoKTtBZSgpO2FuMT1BN30pO2Z1bmN0aW9uIGduKHQsZSxhKXtyZXR1cm4gTGUoYT8uaW58fHQsK25lKHQpK2UpfXZhciBubjEsTmM9YigoKT0+e2F0KCk7QWUoKTtubjE9Z259KTtmdW5jdGlvbiBENyh0LGUsYSl7cmV0dXJuIGduKHQsZSpJYSxhKX12YXIgZG4xLFhrPWIoKCk9PntOYygpO3l0KCk7ZG4xPUQ3fSk7ZnVuY3Rpb24gSnQoKXtyZXR1cm4gS0d9ZnVuY3Rpb24gUUcodCl7S0c9dH12YXIgS0csUjI9YigoKT0+e0tHPXt9fSk7ZnVuY3Rpb24gcDEodCxlKXtsZXQgYT1KdCgpLGk9ZT8ud2Vla1N0YXJ0c09uPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/YS53ZWVrU3RhcnRzT24/P2EubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAscj1uZSh0LGU/LmluKSxzPXIuZ2V0RGF5KCksbj0oczxpPzc6MCkrcy1pO3JldHVybiByLnNldERhdGUoci5nZXREYXRlKCktbiksci5zZXRIb3VycygwLDAsMCwwKSxyfXZhciBtbjEsTmk9YigoKT0+e1IyKCk7QWUoKTttbjE9cDF9KTtmdW5jdGlvbiBHMSh0LGUpe3JldHVybiBwMSh0LHsuLi5lLHdlZWtTdGFydHNPbjoxfSl9dmFyIHZuMSxNcj1iKCgpPT57TmkoKTt2bjE9RzF9KTtmdW5jdGlvbiBvYSh0LGUpe2xldCBhPW5lKHQsZT8uaW4pLGk9YS5nZXRGdWxsWWVhcigpLHI9TGUoYSwwKTtyLnNldEZ1bGxZZWFyKGkrMSwwLDQpLHIuc2V0SG91cnMoMCwwLDAsMCk7bGV0IHM9RzEociksbj1MZShhLDApO24uc2V0RnVsbFllYXIoaSwwLDQpLG4uc2V0SG91cnMoMCwwLDAsMCk7bGV0IG89RzEobik7cmV0dXJuIGEuZ2V0VGltZSgpPj1zLmdldFRpbWUoKT9pKzE6YS5nZXRUaW1lKCk+PW8uZ2V0VGltZSgpP2k6aS0xfXZhciB6bjEsYm49YigoKT0+e2F0KCk7TXIoKTtBZSgpO3puMT1vYX0pO2Z1bmN0aW9uIEQxKHQpe2xldCBlPW5lKHQpLGE9bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiBhLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSksK3QtK2F9dmFyIGxzPWIoKCk9PntBZSgpfSk7ZnVuY3Rpb24gSmUodCwuLi5lKXtsZXQgYT1MZS5iaW5kKG51bGwsdHx8ZS5maW5kKGk9PnR5cGVvZiBpPT0ib2JqZWN0IikpO3JldHVybiBlLm1hcChhKX12YXIgczE9YigoKT0+e2F0KCl9KTtmdW5jdGlvbiB6cih0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyICRuMSxGYz1iKCgpPT57QWUoKTskbjE9enJ9KTtmdW5jdGlvbiBoMih0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKSxzPXpyKGkpLG49enIociksbz0rcy1EMShzKSxkPStuLUQxKG4pO3JldHVybiBNYXRoLnJvdW5kKChvLWQpL2s3KX12YXIgTm4xLGNzPWIoKCk9PntscygpO3MxKCk7eXQoKTtGYygpO05uMT1oMn0pO2Z1bmN0aW9uIE5hKHQsZSl7bGV0IGE9b2EodCxlKSxpPUxlKGU/LmlufHx0LDApO3JldHVybiBpLnNldEZ1bGxZZWFyKGEsMCw0KSxpLnNldEhvdXJzKDAsMCwwLDApLEcxKGkpfXZhciBIbjEscTQ9YigoKT0+e2F0KCk7Ym4oKTtNcigpO0huMT1OYX0pO2Z1bmN0aW9uIEU3KHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKSxyPWgyKGksTmEoaSxhKSkscz1MZShhPy5pbnx8dCwwKTtyZXR1cm4gcy5zZXRGdWxsWWVhcihlLDAsNCkscy5zZXRIb3VycygwLDAsMCwwKSxpPU5hKHMpLGkuc2V0RGF0ZShpLmdldERhdGUoKStyKSxpfXZhciBHbjEsS2s9YigoKT0+e2F0KCk7Y3MoKTtxNCgpO0FlKCk7R24xPUU3fSk7ZnVuY3Rpb24gUDcodCxlLGEpe3JldHVybiBFNyh0LG9hKHQsYSkrZSxhKX12YXIgS24xLFFrPWIoKCk9PntibigpO0trKCk7S24xPVA3fSk7ZnVuY3Rpb24gVjQodCxlLGEpe2xldCBpPW5lKHQsYT8uaW4pO3JldHVybiBpLnNldFRpbWUoaS5nZXRUaW1lKCkrZSpPMiksaX12YXIgdG8xLEk3PWIoKCk9Pnt5dCgpO0FlKCk7dG8xPVY0fSk7ZnVuY3Rpb24gajQodCxlLGEpe3JldHVybiB4cih0LGUqMyxhKX12YXIgcm8xLE43PWIoKCk9PntINCgpO3JvMT1qNH0pO2Z1bmN0aW9uIEY3KHQsZSxhKXtyZXR1cm4gZ24odCxlKjFlMyxhKX12YXIgb28xLEprPWIoKCk9PntOYygpO29vMT1GN30pO2Z1bmN0aW9uIHZuKHQsZSxhKXtyZXR1cm4gSjEodCxlKjcsYSl9dmFyIGRvMSxPYz1iKCgpPT57eXIoKTtkbzE9dm59KTtmdW5jdGlvbiBPNyh0LGUsYSl7cmV0dXJuIHhyKHQsZSoxMixhKX12YXIgdW8xLGVTPWIoKCk9PntINCgpO3VvMT1PN30pO2Z1bmN0aW9uIEpHKHQsZSxhKXtsZXRbaSxyXT1bK25lKHQuc3RhcnQsYT8uaW4pLCtuZSh0LmVuZCxhPy5pbildLnNvcnQoKG8sZCk9Pm8tZCksW3Msbl09WytuZShlLnN0YXJ0LGE/LmluKSwrbmUoZS5lbmQsYT8uaW4pXS5zb3J0KChvLGQpPT5vLWQpO3JldHVybiBhPy5pbmNsdXNpdmU/aTw9biYmczw9cjppPG4mJnM8cn12YXIgZ28xLGVZPWIoKCk9PntBZSgpO2dvMT1KR30pO2Z1bmN0aW9uIFI3KHQsZSl7bGV0IGEsaT1lPy5pbjtyZXR1cm4gdC5mb3JFYWNoKHI9PnshaSYmdHlwZW9mIHI9PSJvYmplY3QiJiYoaT1MZS5iaW5kKG51bGwscikpO2xldCBzPW5lKHIsaSk7KCFhfHxhPHN8fGlzTmFOKCtzKSkmJihhPXMpfSksTGUoaSxhfHxOYU4pfXZhciB4bzEsdFM9YigoKT0+e2F0KCk7QWUoKTt4bzE9Ujd9KTtmdW5jdGlvbiBCNyh0LGUpe2xldCBhLGk9ZT8uaW47cmV0dXJuIHQuZm9yRWFjaChyPT57IWkmJnR5cGVvZiByPT0ib2JqZWN0IiYmKGk9TGUuYmluZChudWxsLHIpKTtsZXQgcz1uZShyLGkpOyghYXx8YT5zfHxpc05hTigrcykpJiYoYT1zKX0pLExlKGksYXx8TmFOKX12YXIga28xLGFTPWIoKCk9PnthdCgpO0FlKCk7a28xPUI3fSk7ZnVuY3Rpb24gdFkodCxlLGEpe2xldFtpLHIsc109SmUoYT8uaW4sdCxlLnN0YXJ0LGUuZW5kKTtyZXR1cm4gQjcoW1I3KFtpLHJdLGEpLHNdLGEpfXZhciBMbzEsYVk9YigoKT0+e3MxKCk7dFMoKTthUygpO0xvMT10WX0pO2Z1bmN0aW9uIEg3KHQsZSl7bGV0IGE9K25lKHQpO2lmKGlzTmFOKGEpKXJldHVybiBOYU47bGV0IGkscjtyZXR1cm4gZS5mb3JFYWNoKChzLG4pPT57bGV0IG89bmUocyk7aWYoaXNOYU4oK28pKXtpPU5hTixyPU5hTjtyZXR1cm59bGV0IGQ9TWF0aC5hYnMoYS0rbyk7KGk9PW51bGx8fGQ8cikmJihpPW4scj1kKX0pLGl9dmFyIERvMSxpUz1iKCgpPT57QWUoKTtEbzE9SDd9KTtmdW5jdGlvbiBpWSh0LGUsYSl7bGV0W2ksLi4ucl09SmUoYT8uaW4sdCwuLi5lKSxzPUg3KGkscik7aWYodHlwZW9mIHM9PSJudW1iZXIiJiZpc05hTihzKSlyZXR1cm4gTGUoaSxOYU4pO2lmKHMhPT12b2lkIDApcmV0dXJuIHJbc119dmFyIEZvMSxyWT1iKCgpPT57czEoKTtpUygpO2F0KCk7Rm8xPWlZfSk7ZnVuY3Rpb24gQjIodCxlKXtsZXQgYT0rbmUodCktK25lKGUpO3JldHVybiBhPDA/LTE6YT4wPzE6YX12YXIgQm8xLGpvPWIoKCk9PntBZSgpO0JvMT1CMn0pO2Z1bmN0aW9uIHNZKHQsZSl7bGV0IGE9K25lKHQpLStuZShlKTtyZXR1cm4gYT4wPy0xOmE8MD8xOmF9dmFyIFZvMSxuWT1iKCgpPT57QWUoKTtWbzE9c1l9KTtmdW5jdGlvbiBfdCh0KXtyZXR1cm4gTGUodCxEYXRlLm5vdygpKX12YXIgV28xLGUyPWIoKCk9PnthdCgpO1dvMT1fdH0pO2Z1bmN0aW9uIG9ZKHQpe2xldCBlPU1hdGgudHJ1bmModC83KTtyZXR1cm4gZT09PTA/MDplfXZhciBabzEsbFk9YigoKT0+e3l0KCk7Wm8xPW9ZfSk7ZnVuY3Rpb24ga3IodCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuK3pyKGkpPT0renIocil9dmFyIEpvMSxVND1iKCgpPT57czEoKTtGYygpO0pvMT1rcn0pO2Z1bmN0aW9uIHE3KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8dHlwZW9mIHQ9PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBEYXRlXSJ9dmFyIHQwMSxyUz1iKCgpPT57dDAxPXE3fSk7ZnVuY3Rpb24gazIodCl7cmV0dXJuISghcTcodCkmJnR5cGVvZiB0IT0ibnVtYmVyInx8aXNOYU4oK25lKHQpKSl9dmFyIHMwMSxkcz1iKCgpPT57clMoKTtBZSgpO3MwMT1rMn0pO2Z1bmN0aW9uIGNZKHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpO2lmKCFrMihpKXx8IWsyKHIpKXJldHVybiBOYU47bGV0IHM9aDIoaSxyKSxuPXM8MD8tMToxLG89TWF0aC50cnVuYyhzLzcpLGQ9byo1LGM9SjEocixvKjcpO2Zvcig7IWtyKGksYyk7KWQrPXdyKGMsYSk/MDpuLGM9SjEoYyxuKTtyZXR1cm4gZD09PTA/MDpkfXZhciB1MDEsZFk9YigoKT0+e3MxKCk7eXIoKTtjcygpO1U0KCk7ZHMoKTtJYygpO3UwMT1jWX0pO2Z1bmN0aW9uIFY3KHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpO3JldHVybiBvYShpLGEpLW9hKHIsYSl9dmFyIGIwMSxzUz1iKCgpPT57czEoKTtibigpO2IwMT1WN30pO2Z1bmN0aW9uIHBZKHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpLHM9RzEoaSksbj1HMShyKSxvPStzLUQxKHMpLGQ9K24tRDEobik7cmV0dXJuIE1hdGgucm91bmQoKG8tZCkvdnIpfXZhciB6MDEsaFk9YigoKT0+e2xzKCk7czEoKTt5dCgpO01yKCk7ejAxPXBZfSk7ZnVuY3Rpb24gVW8odCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSkscz1pLmdldEZ1bGxZZWFyKCktci5nZXRGdWxsWWVhcigpLG49aS5nZXRNb250aCgpLXIuZ2V0TW9udGgoKTtyZXR1cm4gcyoxMitufXZhciBDMDEsajc9YigoKT0+e3MxKCk7QzAxPVVvfSk7ZnVuY3Rpb24gUmModCxlKXtsZXQgYT1uZSh0LGU/LmluKTtyZXR1cm4gTWF0aC50cnVuYyhhLmdldE1vbnRoKCkvMykrMX12YXIgTDAxLG5TPWIoKCk9PntBZSgpO0wwMT1SY30pO2Z1bmN0aW9uIFc0KHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpLHM9aS5nZXRGdWxsWWVhcigpLXIuZ2V0RnVsbFllYXIoKSxuPVJjKGkpLVJjKHIpO3JldHVybiBzKjQrbn12YXIgRTAxLG9TPWIoKCk9PntzMSgpO25TKCk7RTAxPVc0fSk7ZnVuY3Rpb24gV28odCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSkscz1wMShpLGEpLG49cDEocixhKSxvPStzLUQxKHMpLGQ9K24tRDEobik7cmV0dXJuIE1hdGgucm91bmQoKG8tZCkvdnIpfXZhciBSMDEsVTc9YigoKT0+e2xzKCk7czEoKTt5dCgpO05pKCk7UjAxPVdvfSk7ZnVuY3Rpb24geW4odCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuIGkuZ2V0RnVsbFllYXIoKS1yLmdldEZ1bGxZZWFyKCl9dmFyIHEwMSxXNz1iKCgpPT57czEoKTtxMDE9eW59KTtmdW5jdGlvbiBHNCh0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKSxzPXVZKGksciksbj1NYXRoLmFicyhoMihpLHIpKTtpLnNldERhdGUoaS5nZXREYXRlKCktcypuKTtsZXQgbz0rKHVZKGkscik9PT0tcyksZD1zKihuLW8pO3JldHVybiBkPT09MD8wOmR9ZnVuY3Rpb24gdVkodCxlKXtsZXQgYT10LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfHx0LmdldE1vbnRoKCktZS5nZXRNb250aCgpfHx0LmdldERhdGUoKS1lLmdldERhdGUoKXx8dC5nZXRIb3VycygpLWUuZ2V0SG91cnMoKXx8dC5nZXRNaW51dGVzKCktZS5nZXRNaW51dGVzKCl8fHQuZ2V0U2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpfHx0LmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0TWlsbGlzZWNvbmRzKCk7cmV0dXJuIGE8MD8tMTphPjA/MTphfXZhciBXMDEsRzc9YigoKT0+e3MxKCk7Y3MoKTtXMDE9RzR9KTtmdW5jdGlvbiBIMih0KXtyZXR1cm4gZT0+e2xldCBpPSh0P01hdGhbdF06TWF0aC50cnVuYykoZSk7cmV0dXJuIGk9PT0wPzA6aX19dmFyIHBzPWIoKCk9Pnt9KTtmdW5jdGlvbiBHbyh0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKSxzPSgraS0rcikvSWE7cmV0dXJuIEgyKGE/LnJvdW5kaW5nTWV0aG9kKShzKX12YXIgUTAxLFk3PWIoKCk9PntwcygpO3MxKCk7eXQoKTtRMDE9R299KTtmdW5jdGlvbiBaNyh0LGUsYSl7cmV0dXJuIFA3KHQsLWUsYSl9dmFyIHQ0MSxsUz1iKCgpPT57UWsoKTt0NDE9Wjd9KTtmdW5jdGlvbiBmWSh0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKSxzPUIyKGksciksbj1NYXRoLmFicyhWNyhpLHIsYSkpLG89WjcoaSxzKm4sYSksZD0rKEIyKG8scik9PT0tcyksYz1zKihuLWQpO3JldHVybiBjPT09MD8wOmN9dmFyIG80MSxtWT1iKCgpPT57czEoKTtqbygpO3NTKCk7bFMoKTtvNDE9Zll9KTtmdW5jdGlvbiBZNCh0LGUpe3JldHVybituZSh0KS0rbmUoZSl9dmFyIGQ0MSxYNz1iKCgpPT57QWUoKTtkNDE9WTR9KTtmdW5jdGlvbiBZbyh0LGUsYSl7bGV0IGk9WTQodCxlKS9PMjtyZXR1cm4gSDIoYT8ucm91bmRpbmdNZXRob2QpKGkpfXZhciBtNDEsSzc9YigoKT0+e3BzKCk7eXQoKTtYNygpO200MT1Zb30pO2Z1bmN0aW9uIFo0KHQsZSl7bGV0IGE9bmUodCxlPy5pbik7cmV0dXJuIGEuc2V0SG91cnMoMjMsNTksNTksOTk5KSxhfXZhciB2NDEsUTc9YigoKT0+e0FlKCk7djQxPVo0fSk7ZnVuY3Rpb24gWDQodCxlKXtsZXQgYT1uZSh0LGU/LmluKSxpPWEuZ2V0TW9udGgoKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCksaSsxLDApLGEuc2V0SG91cnMoMjMsNTksNTksOTk5KSxhfXZhciB3NDEsSjc9YigoKT0+e0FlKCk7dzQxPVg0fSk7ZnVuY3Rpb24gZXAodCxlKXtsZXQgYT1uZSh0LGU/LmluKTtyZXR1cm4rWjQoYSxlKT09K1g0KGEsZSl9dmFyIEM0MSxjUz1iKCgpPT57UTcoKTtKNygpO0FlKCk7QzQxPWVwfSk7ZnVuY3Rpb24geG4odCxlLGEpe2xldFtpLHIsc109SmUoYT8uaW4sdCx0LGUpLG49QjIocixzKSxvPU1hdGguYWJzKFVvKHIscykpO2lmKG88MSlyZXR1cm4gMDtyLmdldE1vbnRoKCk9PT0xJiZyLmdldERhdGUoKT4yNyYmci5zZXREYXRlKDMwKSxyLnNldE1vbnRoKHIuZ2V0TW9udGgoKS1uKm8pO2xldCBkPUIyKHIscyk9PT0tbjtlcChpKSYmbz09PTEmJkIyKGkscyk9PT0xJiYoZD0hMSk7bGV0IGM9biooby0rZCk7cmV0dXJuIGM9PT0wPzA6Y312YXIgRDQxLEJjPWIoKCk9PntzMSgpO2pvKCk7ajcoKTtjUygpO0Q0MT14bn0pO2Z1bmN0aW9uIGdZKHQsZSxhKXtsZXQgaT14bih0LGUsYSkvMztyZXR1cm4gSDIoYT8ucm91bmRpbmdNZXRob2QpKGkpfXZhciBONDEsYlk9YigoKT0+e3BzKCk7QmMoKTtONDE9Z1l9KTtmdW5jdGlvbiBTcih0LGUsYSl7bGV0IGk9WTQodCxlKS8xZTM7cmV0dXJuIEgyKGE/LnJvdW5kaW5nTWV0aG9kKShpKX12YXIgQjQxLEhjPWIoKCk9PntwcygpO1g3KCk7QjQxPVNyfSk7ZnVuY3Rpb24gdlkodCxlLGEpe2xldCBpPUc0KHQsZSxhKS83O3JldHVybiBIMihhPy5yb3VuZGluZ01ldGhvZCkoaSl9dmFyIGo0MSx5WT1iKCgpPT57cHMoKTtHNygpO2o0MT12WX0pO2Z1bmN0aW9uIHRwKHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpLHM9QjIoaSxyKSxuPU1hdGguYWJzKHluKGkscikpO2kuc2V0RnVsbFllYXIoMTU4NCksci5zZXRGdWxsWWVhcigxNTg0KTtsZXQgbz1CMihpLHIpPT09LXMsZD1zKihuLStvKTtyZXR1cm4gZD09PTA/MDpkfXZhciBaNDEsZFM9YigoKT0+e3MxKCk7am8oKTtXNygpO1o0MT10cH0pO2Z1bmN0aW9uIHUyKHQsZSl7bGV0W2EsaV09SmUodCxlLnN0YXJ0LGUuZW5kKTtyZXR1cm57c3RhcnQ6YSxlbmQ6aX19dmFyIENyPWIoKCk9PntzMSgpfSk7ZnVuY3Rpb24gYXAodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6aX09dTIoZT8uaW4sdCkscj0rYT4raSxzPXI/K2E6K2ksbj1yP2k6YTtuLnNldEhvdXJzKDAsMCwwLDApO2xldCBvPWU/LnN0ZXA/PzE7aWYoIW8pcmV0dXJuW107bzwwJiYobz0tbyxyPSFyKTtsZXQgZD1bXTtmb3IoOytuPD1zOylkLnB1c2goTGUoYSxuKSksbi5zZXREYXRlKG4uZ2V0RGF0ZSgpK28pLG4uc2V0SG91cnMoMCwwLDAsMCk7cmV0dXJuIHI/ZC5yZXZlcnNlKCk6ZH12YXIgdDMxLHBTPWIoKCk9PntDcigpO2F0KCk7dDMxPWFwfSk7ZnVuY3Rpb24geFkodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6aX09dTIoZT8uaW4sdCkscj0rYT4raSxzPXI/K2E6K2ksbj1yP2k6YTtuLnNldE1pbnV0ZXMoMCwwLDApO2xldCBvPWU/LnN0ZXA/PzE7aWYoIW8pcmV0dXJuW107bzwwJiYobz0tbyxyPSFyKTtsZXQgZD1bXTtmb3IoOytuPD1zOylkLnB1c2goTGUoYSxuKSksbi5zZXRIb3VycyhuLmdldEhvdXJzKCkrbyk7cmV0dXJuIHI/ZC5yZXZlcnNlKCk6ZH12YXIgczMxLHdZPWIoKCk9PntDcigpO2F0KCk7czMxPXhZfSk7ZnVuY3Rpb24gTVkodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6aX09dTIoZT8uaW4sdCk7YS5zZXRTZWNvbmRzKDAsMCk7bGV0IHI9K2E+K2kscz1yPythOitpLG49cj9pOmEsbz1lPy5zdGVwPz8xO2lmKCFvKXJldHVybltdO288MCYmKG89LW8scj0hcik7bGV0IGQ9W107Zm9yKDsrbjw9czspZC5wdXNoKExlKGEsbikpLG49VjQobixvKTtyZXR1cm4gcj9kLnJldmVyc2UoKTpkfXZhciBkMzEselk9YigoKT0+e0NyKCk7STcoKTthdCgpO2QzMT1NWX0pO2Z1bmN0aW9uIGtZKHQsZSl7bGV0e3N0YXJ0OmEsZW5kOml9PXUyKGU/LmluLHQpLHI9K2E+K2kscz1yPythOitpLG49cj9pOmE7bi5zZXRIb3VycygwLDAsMCwwKSxuLnNldERhdGUoMSk7bGV0IG89ZT8uc3RlcD8/MTtpZighbylyZXR1cm5bXTtvPDAmJihvPS1vLHI9IXIpO2xldCBkPVtdO2Zvcig7K248PXM7KWQucHVzaChMZShhLG4pKSxuLnNldE1vbnRoKG4uZ2V0TW9udGgoKStvKTtyZXR1cm4gcj9kLnJldmVyc2UoKTpkfXZhciBmMzEsU1k9YigoKT0+e0NyKCk7YXQoKTtmMzE9a1l9KTtmdW5jdGlvbiBfcih0LGUpe2xldCBhPW5lKHQsZT8uaW4pLGk9YS5nZXRNb250aCgpLHI9aS1pJTM7cmV0dXJuIGEuc2V0TW9udGgociwxKSxhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIGIzMSxpcD1iKCgpPT57QWUoKTtiMzE9X3J9KTtmdW5jdGlvbiBDWSh0LGUpe2xldHtzdGFydDphLGVuZDppfT11MihlPy5pbix0KSxyPSthPitpLHM9cj8rX3IoYSk6K19yKGkpLG49cj9fcihpKTpfcihhKSxvPWU/LnN0ZXA/PzE7aWYoIW8pcmV0dXJuW107bzwwJiYobz0tbyxyPSFyKTtsZXQgZD1bXTtmb3IoOytuPD1zOylkLnB1c2goTGUoYSxuKSksbj1qNChuLG8pO3JldHVybiByP2QucmV2ZXJzZSgpOmR9dmFyIHozMSxfWT1iKCgpPT57Q3IoKTtONygpO2F0KCk7aXAoKTt6MzE9Q1l9KTtmdW5jdGlvbiBUWSh0LGUpe2xldHtzdGFydDphLGVuZDppfT11MihlPy5pbix0KSxyPSthPitpLHM9cj9wMShpLGUpOnAxKGEsZSksbj1yP3AxKGEsZSk6cDEoaSxlKTtzLnNldEhvdXJzKDE1KSxuLnNldEhvdXJzKDE1KTtsZXQgbz0rbi5nZXRUaW1lKCksZD1zLGM9ZT8uc3RlcD8/MTtpZighYylyZXR1cm5bXTtjPDAmJihjPS1jLHI9IXIpO2xldCBwPVtdO2Zvcig7K2Q8PW87KWQuc2V0SG91cnMoMCkscC5wdXNoKExlKGEsZCkpLGQ9dm4oZCxjKSxkLnNldEhvdXJzKDE1KTtyZXR1cm4gcj9wLnJldmVyc2UoKTpwfXZhciBMMzEsTFk9YigoKT0+e0NyKCk7T2MoKTthdCgpO05pKCk7TDMxPVRZfSk7ZnVuY3Rpb24gSzQodCxlKXtsZXR7c3RhcnQ6YSxlbmQ6aX09dTIoZT8uaW4sdCkscj1hcCh7c3RhcnQ6YSxlbmQ6aX0sZSkscz1bXSxuPTA7Zm9yKDtuPHIubGVuZ3RoOyl7bGV0IG89cltuKytdO3dyKG8pJiZzLnB1c2goTGUoYSxvKSl9cmV0dXJuIHN9dmFyIEkzMSxycD1iKCgpPT57Q3IoKTthdCgpO3BTKCk7SWMoKTtJMzE9SzR9KTtmdW5jdGlvbiB3bih0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBhLnNldERhdGUoMSksYS5zZXRIb3VycygwLDAsMCwwKSxhfXZhciBPMzEscWM9YigoKT0+e0FlKCk7TzMxPXdufSk7ZnVuY3Rpb24gJFkodCxlKXtsZXQgYT13bih0LGUpLGk9WDQodCxlKTtyZXR1cm4gSzQoe3N0YXJ0OmEsZW5kOml9LGUpfXZhciBWMzEsQVk9YigoKT0+e3JwKCk7SjcoKTtxYygpO1YzMT0kWX0pO2Z1bmN0aW9uIHNwKHQsZSl7bGV0IGE9bmUodCxlPy5pbiksaT1hLmdldEZ1bGxZZWFyKCk7cmV0dXJuIGEuc2V0RnVsbFllYXIoaSsxLDAsMCksYS5zZXRIb3VycygyMyw1OSw1OSw5OTkpLGF9dmFyIFczMSxoUz1iKCgpPT57QWUoKTtXMzE9c3B9KTtmdW5jdGlvbiBRNCh0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBhLnNldEZ1bGxZZWFyKGEuZ2V0RnVsbFllYXIoKSwwLDEpLGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgWjMxLG5wPWIoKCk9PntBZSgpO1ozMT1RNH0pO2Z1bmN0aW9uIERZKHQsZSl7bGV0IGE9UTQodCxlKSxpPXNwKHQsZSk7cmV0dXJuIEs0KHtzdGFydDphLGVuZDppfSxlKX12YXIgZWwxLEVZPWIoKCk9PntycCgpO2hTKCk7bnAoKTtlbDE9RFl9KTtmdW5jdGlvbiBQWSh0LGUpe2xldHtzdGFydDphLGVuZDppfT11MihlPy5pbix0KSxyPSthPitpLHM9cj8rYToraSxuPXI/aTphO24uc2V0SG91cnMoMCwwLDAsMCksbi5zZXRNb250aCgwLDEpO2xldCBvPWU/LnN0ZXA/PzE7aWYoIW8pcmV0dXJuW107bzwwJiYobz0tbyxyPSFyKTtsZXQgZD1bXTtmb3IoOytuPD1zOylkLnB1c2goTGUoYSxuKSksbi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrbyk7cmV0dXJuIHI/ZC5yZXZlcnNlKCk6ZH12YXIgcmwxLElZPWIoKCk9PntDcigpO2F0KCk7cmwxPVBZfSk7ZnVuY3Rpb24gTlkodCxlKXtsZXQgYT1uZSh0LGU/LmluKSxpPWEuZ2V0RnVsbFllYXIoKSxyPTkrTWF0aC5mbG9vcihpLzEwKSoxMDtyZXR1cm4gYS5zZXRGdWxsWWVhcihyLDExLDMxKSxhLnNldEhvdXJzKDIzLDU5LDU5LDk5OSksYX12YXIgb2wxLEZZPWIoKCk9PntBZSgpO29sMT1OWX0pO2Z1bmN0aW9uIE9ZKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7cmV0dXJuIGEuc2V0TWludXRlcyg1OSw1OSw5OTkpLGF9dmFyIGRsMSxSWT1iKCgpPT57QWUoKTtkbDE9T1l9KTtmdW5jdGlvbiBvcCh0LGUpe2xldCBhPUp0KCksaT1lPy53ZWVrU3RhcnRzT24/P2U/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9hLndlZWtTdGFydHNPbj8/YS5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxyPW5lKHQsZT8uaW4pLHM9ci5nZXREYXkoKSxuPShzPGk/LTc6MCkrNi0ocy1pKTtyZXR1cm4gci5zZXREYXRlKHIuZ2V0RGF0ZSgpK24pLHIuc2V0SG91cnMoMjMsNTksNTksOTk5KSxyfXZhciBmbDEsdVM9YigoKT0+e1IyKCk7QWUoKTtmbDE9b3B9KTtmdW5jdGlvbiBCWSh0LGUpe3JldHVybiBvcCh0LHsuLi5lLHdlZWtTdGFydHNPbjoxfSl9dmFyIGJsMSxIWT1iKCgpPT57dVMoKTtibDE9Qll9KTtmdW5jdGlvbiBxWSh0LGUpe2xldCBhPW9hKHQsZSksaT1MZShlPy5pbnx8dCwwKTtpLnNldEZ1bGxZZWFyKGErMSwwLDQpLGkuc2V0SG91cnMoMCwwLDAsMCk7bGV0IHI9RzEoaSxlKTtyZXR1cm4gci5zZXRNaWxsaXNlY29uZHMoci5nZXRNaWxsaXNlY29uZHMoKS0xKSxyfXZhciBNbDEsVlk9YigoKT0+e2F0KCk7Ym4oKTtNcigpO01sMT1xWX0pO2Z1bmN0aW9uIGpZKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7cmV0dXJuIGEuc2V0U2Vjb25kcyg1OSw5OTkpLGF9dmFyIFNsMSxVWT1iKCgpPT57QWUoKTtTbDE9all9KTtmdW5jdGlvbiBXWSh0LGUpe2xldCBhPW5lKHQsZT8uaW4pLGk9YS5nZXRNb250aCgpLHI9aS1pJTMrMztyZXR1cm4gYS5zZXRNb250aChyLDApLGEuc2V0SG91cnMoMjMsNTksNTksOTk5KSxhfXZhciBUbDEsR1k9YigoKT0+e0FlKCk7VGwxPVdZfSk7ZnVuY3Rpb24gWVkodCxlKXtsZXQgYT1uZSh0LGU/LmluKTtyZXR1cm4gYS5zZXRNaWxsaXNlY29uZHMoOTk5KSxhfXZhciBBbDEsWlk9YigoKT0+e0FlKCk7QWwxPVlZfSk7ZnVuY3Rpb24gWFkodCl7cmV0dXJuIFo0KERhdGUubm93KCksdCl9dmFyIFBsMSxLWT1iKCgpPT57UTcoKTtQbDE9WFl9KTtmdW5jdGlvbiBRWSh0KXtsZXQgZT1fdCh0Py5pbiksYT1lLmdldEZ1bGxZZWFyKCksaT1lLmdldE1vbnRoKCkscj1lLmdldERhdGUoKSxzPV90KHQ/LmluKTtyZXR1cm4gcy5zZXRGdWxsWWVhcihhLGkscisxKSxzLnNldEhvdXJzKDIzLDU5LDU5LDk5OSksdD8uaW4/dC5pbihzKTpzfXZhciBGbDEsSlk9YigoKT0+e2UyKCk7RmwxPVFZfSk7ZnVuY3Rpb24gZVoodCl7bGV0IGU9X3QodD8uaW4pLGE9TGUodD8uaW4sMCk7cmV0dXJuIGEuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKS0xKSxhLnNldEhvdXJzKDIzLDU5LDU5LDk5OSksYX12YXIgSGwxLHRaPWIoKCk9PnthdCgpO2UyKCk7SGwxPWVafSk7dmFyIG5DdCxhWixpWj1iKCgpPT57bkN0PXtsZXNzVGhhblhTZWNvbmRzOntvbmU6Imxlc3MgdGhhbiBhIHNlY29uZCIsb3RoZXI6Imxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcyJ9LHhTZWNvbmRzOntvbmU6IjEgc2Vjb25kIixvdGhlcjoie3tjb3VudH19IHNlY29uZHMifSxoYWxmQU1pbnV0ZToiaGFsZiBhIG1pbnV0ZSIsbGVzc1RoYW5YTWludXRlczp7b25lOiJsZXNzIHRoYW4gYSBtaW51dGUiLG90aGVyOiJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMifSx4TWludXRlczp7b25lOiIxIG1pbnV0ZSIsb3RoZXI6Int7Y291bnR9fSBtaW51dGVzIn0sYWJvdXRYSG91cnM6e29uZToiYWJvdXQgMSBob3VyIixvdGhlcjoiYWJvdXQge3tjb3VudH19IGhvdXJzIn0seEhvdXJzOntvbmU6IjEgaG91ciIsb3RoZXI6Int7Y291bnR9fSBob3VycyJ9LHhEYXlzOntvbmU6IjEgZGF5IixvdGhlcjoie3tjb3VudH19IGRheXMifSxhYm91dFhXZWVrczp7b25lOiJhYm91dCAxIHdlZWsiLG90aGVyOiJhYm91dCB7e2NvdW50fX0gd2Vla3MifSx4V2Vla3M6e29uZToiMSB3ZWVrIixvdGhlcjoie3tjb3VudH19IHdlZWtzIn0sYWJvdXRYTW9udGhzOntvbmU6ImFib3V0IDEgbW9udGgiLG90aGVyOiJhYm91dCB7e2NvdW50fX0gbW9udGhzIn0seE1vbnRoczp7b25lOiIxIG1vbnRoIixvdGhlcjoie3tjb3VudH19IG1vbnRocyJ9LGFib3V0WFllYXJzOntvbmU6ImFib3V0IDEgeWVhciIsb3RoZXI6ImFib3V0IHt7Y291bnR9fSB5ZWFycyJ9LHhZZWFyczp7b25lOiIxIHllYXIiLG90aGVyOiJ7e2NvdW50fX0geWVhcnMifSxvdmVyWFllYXJzOntvbmU6Im92ZXIgMSB5ZWFyIixvdGhlcjoib3ZlciB7e2NvdW50fX0geWVhcnMifSxhbG1vc3RYWWVhcnM6e29uZToiYWxtb3N0IDEgeWVhciIsb3RoZXI6ImFsbW9zdCB7e2NvdW50fX0geWVhcnMifX0sYVo9KHQsZSxhKT0+e2xldCBpLHI9bkN0W3RdO3JldHVybiB0eXBlb2Ygcj09InN0cmluZyI/aT1yOmU9PT0xP2k9ci5vbmU6aT1yLm90aGVyLnJlcGxhY2UoInt7Y291bnR9fSIsZS50b1N0cmluZygpKSxhPy5hZGRTdWZmaXg/YS5jb21wYXJpc29uJiZhLmNvbXBhcmlzb24+MD8iaW4gIitpOmkrIiBhZ28iOml9fSk7ZnVuY3Rpb24gbHAodCl7cmV0dXJuKGU9e30pPT57bGV0IGE9ZS53aWR0aD9TdHJpbmcoZS53aWR0aCk6dC5kZWZhdWx0V2lkdGg7cmV0dXJuIHQuZm9ybWF0c1thXXx8dC5mb3JtYXRzW3QuZGVmYXVsdFdpZHRoXX19dmFyIHJaPWIoKCk9Pnt9KTt2YXIgb0N0LGxDdCxjQ3Qsc1osblo9YigoKT0+e3JaKCk7b0N0PXtmdWxsOiJFRUVFLCBNTU1NIGRvLCB5Iixsb25nOiJNTU1NIGRvLCB5IixtZWRpdW06Ik1NTSBkLCB5IixzaG9ydDoiTU0vZGQveXl5eSJ9LGxDdD17ZnVsbDoiaDptbTpzcyBhIHp6enoiLGxvbmc6Img6bW06c3MgYSB6IixtZWRpdW06Img6bW06c3MgYSIsc2hvcnQ6Img6bW0gYSJ9LGNDdD17ZnVsbDoie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsbG9uZzoie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsbWVkaXVtOiJ7e2RhdGV9fSwge3t0aW1lfX0iLHNob3J0OiJ7e2RhdGV9fSwge3t0aW1lfX0ifSxzWj17ZGF0ZTpscCh7Zm9ybWF0czpvQ3QsZGVmYXVsdFdpZHRoOiJmdWxsIn0pLHRpbWU6bHAoe2Zvcm1hdHM6bEN0LGRlZmF1bHRXaWR0aDoiZnVsbCJ9KSxkYXRlVGltZTpscCh7Zm9ybWF0czpjQ3QsZGVmYXVsdFdpZHRoOiJmdWxsIn0pfX0pO3ZhciBkQ3Qsb1osbFo9YigoKT0+e2RDdD17bGFzdFdlZWs6IidsYXN0JyBlZWVlICdhdCcgcCIseWVzdGVyZGF5OiIneWVzdGVyZGF5IGF0JyBwIix0b2RheToiJ3RvZGF5IGF0JyBwIix0b21vcnJvdzoiJ3RvbW9ycm93IGF0JyBwIixuZXh0V2VlazoiZWVlZSAnYXQnIHAiLG90aGVyOiJQIn0sb1o9KHQsZSxhLGkpPT5kQ3RbdF19KTtmdW5jdGlvbiBKNCh0KXtyZXR1cm4oZSxhKT0+e2xldCBpPWE/LmNvbnRleHQ/U3RyaW5nKGEuY29udGV4dCk6InN0YW5kYWxvbmUiLHI7aWYoaT09PSJmb3JtYXR0aW5nIiYmdC5mb3JtYXR0aW5nVmFsdWVzKXtsZXQgbj10LmRlZmF1bHRGb3JtYXR0aW5nV2lkdGh8fHQuZGVmYXVsdFdpZHRoLG89YT8ud2lkdGg/U3RyaW5nKGEud2lkdGgpOm47cj10LmZvcm1hdHRpbmdWYWx1ZXNbb118fHQuZm9ybWF0dGluZ1ZhbHVlc1tuXX1lbHNle2xldCBuPXQuZGVmYXVsdFdpZHRoLG89YT8ud2lkdGg/U3RyaW5nKGEud2lkdGgpOnQuZGVmYXVsdFdpZHRoO3I9dC52YWx1ZXNbb118fHQudmFsdWVzW25dfWxldCBzPXQuYXJndW1lbnRDYWxsYmFjaz90LmFyZ3VtZW50Q2FsbGJhY2soZSk6ZTtyZXR1cm4gcltzXX19dmFyIGNaPWIoKCk9Pnt9KTt2YXIgcEN0LGhDdCx1Q3QsZkN0LG1DdCxnQ3QsYkN0LGRaLHBaPWIoKCk9PntjWigpO3BDdD17bmFycm93OlsiQiIsIkEiXSxhYmJyZXZpYXRlZDpbIkJDIiwiQUQiXSx3aWRlOlsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl19LGhDdD17bmFycm93OlsiMSIsIjIiLCIzIiwiNCJdLGFiYnJldmlhdGVkOlsiUTEiLCJRMiIsIlEzIiwiUTQiXSx3aWRlOlsiMXN0IHF1YXJ0ZXIiLCIybmQgcXVhcnRlciIsIjNyZCBxdWFydGVyIiwiNHRoIHF1YXJ0ZXIiXX0sdUN0PXtuYXJyb3c6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxhYmJyZXZpYXRlZDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHdpZGU6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSxmQ3Q9e25hcnJvdzpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxzaG9ydDpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sYWJicmV2aWF0ZWQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSx3aWRlOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sbUN0PXtuYXJyb3c6e2FtOiJhIixwbToicCIsbWlkbmlnaHQ6Im1pIixub29uOiJuIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In0sYWJicmV2aWF0ZWQ6e2FtOiJBTSIscG06IlBNIixtaWRuaWdodDoibWlkbmlnaHQiLG5vb246Im5vb24iLG1vcm5pbmc6Im1vcm5pbmciLGFmdGVybm9vbjoiYWZ0ZXJub29uIixldmVuaW5nOiJldmVuaW5nIixuaWdodDoibmlnaHQifSx3aWRlOnthbToiYS5tLiIscG06InAubS4iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoibW9ybmluZyIsYWZ0ZXJub29uOiJhZnRlcm5vb24iLGV2ZW5pbmc6ImV2ZW5pbmciLG5pZ2h0OiJuaWdodCJ9fSxnQ3Q9e25hcnJvdzp7YW06ImEiLHBtOiJwIixtaWRuaWdodDoibWkiLG5vb246Im4iLG1vcm5pbmc6ImluIHRoZSBtb3JuaW5nIixhZnRlcm5vb246ImluIHRoZSBhZnRlcm5vb24iLGV2ZW5pbmc6ImluIHRoZSBldmVuaW5nIixuaWdodDoiYXQgbmlnaHQifSxhYmJyZXZpYXRlZDp7YW06IkFNIixwbToiUE0iLG1pZG5pZ2h0OiJtaWRuaWdodCIsbm9vbjoibm9vbiIsbW9ybmluZzoiaW4gdGhlIG1vcm5pbmciLGFmdGVybm9vbjoiaW4gdGhlIGFmdGVybm9vbiIsZXZlbmluZzoiaW4gdGhlIGV2ZW5pbmciLG5pZ2h0OiJhdCBuaWdodCJ9LHdpZGU6e2FtOiJhLm0uIixwbToicC5tLiIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJpbiB0aGUgbW9ybmluZyIsYWZ0ZXJub29uOiJpbiB0aGUgYWZ0ZXJub29uIixldmVuaW5nOiJpbiB0aGUgZXZlbmluZyIsbmlnaHQ6ImF0IG5pZ2h0In19LGJDdD0odCxlKT0+e2xldCBhPU51bWJlcih0KSxpPWElMTAwO2lmKGk+MjB8fGk8MTApc3dpdGNoKGklMTApe2Nhc2UgMTpyZXR1cm4gYSsic3QiO2Nhc2UgMjpyZXR1cm4gYSsibmQiO2Nhc2UgMzpyZXR1cm4gYSsicmQifXJldHVybiBhKyJ0aCJ9LGRaPXtvcmRpbmFsTnVtYmVyOmJDdCxlcmE6SjQoe3ZhbHVlczpwQ3QsZGVmYXVsdFdpZHRoOiJ3aWRlIn0pLHF1YXJ0ZXI6SjQoe3ZhbHVlczpoQ3QsZGVmYXVsdFdpZHRoOiJ3aWRlIixhcmd1bWVudENhbGxiYWNrOnQ9PnQtMX0pLG1vbnRoOko0KHt2YWx1ZXM6dUN0LGRlZmF1bHRXaWR0aDoid2lkZSJ9KSxkYXk6SjQoe3ZhbHVlczpmQ3QsZGVmYXVsdFdpZHRoOiJ3aWRlIn0pLGRheVBlcmlvZDpKNCh7dmFsdWVzOm1DdCxkZWZhdWx0V2lkdGg6IndpZGUiLGZvcm1hdHRpbmdWYWx1ZXM6Z0N0LGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IndpZGUifSl9fSk7ZnVuY3Rpb24gZTModCl7cmV0dXJuKGUsYT17fSk9PntsZXQgaT1hLndpZHRoLHI9aSYmdC5tYXRjaFBhdHRlcm5zW2ldfHx0Lm1hdGNoUGF0dGVybnNbdC5kZWZhdWx0TWF0Y2hXaWR0aF0scz1lLm1hdGNoKHIpO2lmKCFzKXJldHVybiBudWxsO2xldCBuPXNbMF0sbz1pJiZ0LnBhcnNlUGF0dGVybnNbaV18fHQucGFyc2VQYXR0ZXJuc1t0LmRlZmF1bHRQYXJzZVdpZHRoXSxkPUFycmF5LmlzQXJyYXkobyk/eUN0KG8sbD0+bC50ZXN0KG4pKTp2Q3QobyxsPT5sLnRlc3QobikpLGM7Yz10LnZhbHVlQ2FsbGJhY2s/dC52YWx1ZUNhbGxiYWNrKGQpOmQsYz1hLnZhbHVlQ2FsbGJhY2s/YS52YWx1ZUNhbGxiYWNrKGMpOmM7bGV0IHA9ZS5zbGljZShuLmxlbmd0aCk7cmV0dXJue3ZhbHVlOmMscmVzdDpwfX19ZnVuY3Rpb24gdkN0KHQsZSl7Zm9yKGxldCBhIGluIHQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsYSkmJmUodFthXSkpcmV0dXJuIGF9ZnVuY3Rpb24geUN0KHQsZSl7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspaWYoZSh0W2FdKSlyZXR1cm4gYX12YXIgaFo9YigoKT0+e30pO2Z1bmN0aW9uIHVaKHQpe3JldHVybihlLGE9e30pPT57bGV0IGk9ZS5tYXRjaCh0Lm1hdGNoUGF0dGVybik7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9aVswXSxzPWUubWF0Y2godC5wYXJzZVBhdHRlcm4pO2lmKCFzKXJldHVybiBudWxsO2xldCBuPXQudmFsdWVDYWxsYmFjaz90LnZhbHVlQ2FsbGJhY2soc1swXSk6c1swXTtuPWEudmFsdWVDYWxsYmFjaz9hLnZhbHVlQ2FsbGJhY2sobik6bjtsZXQgbz1lLnNsaWNlKHIubGVuZ3RoKTtyZXR1cm57dmFsdWU6bixyZXN0Om99fX12YXIgZlo9YigoKT0+e30pO3ZhciB4Q3Qsd0N0LE1DdCx6Q3Qsa0N0LFNDdCxDQ3QsX0N0LFRDdCxMQ3QsJEN0LEFDdCxtWixnWj1iKCgpPT57aFooKTtmWigpO3hDdD0vXihcZCspKHRofHN0fG5kfHJkKT8vaSx3Q3Q9L1xkKy9pLE1DdD17bmFycm93Oi9eKGJ8YSkvaSxhYmJyZXZpYXRlZDovXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksd2lkZTovXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2l9LHpDdD17YW55OlsvXmIvaSwvXihhfGMpL2ldfSxrQ3Q9e25hcnJvdzovXlsxMjM0XS9pLGFiYnJldmlhdGVkOi9ecVsxMjM0XS9pLHdpZGU6L15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2l9LFNDdD17YW55OlsvMS9pLC8yL2ksLzMvaSwvNC9pXX0sQ0N0PXtuYXJyb3c6L15bamZtYXNvbmRdL2ksYWJicmV2aWF0ZWQ6L14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksd2lkZTovXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pfSxfQ3Q9e25hcnJvdzpbL15qL2ksL15mL2ksL15tL2ksL15hL2ksL15tL2ksL15qL2ksL15qL2ksL15hL2ksL15zL2ksL15vL2ksL15uL2ksL15kL2ldLGFueTpbL15qYS9pLC9eZi9pLC9ebWFyL2ksL15hcC9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYXUvaSwvXnMvaSwvXm8vaSwvXm4vaSwvXmQvaV19LFRDdD17bmFycm93Oi9eW3NtdHdmXS9pLHNob3J0Oi9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLGFiYnJldmlhdGVkOi9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSx3aWRlOi9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pfSxMQ3Q9e25hcnJvdzpbL15zL2ksL15tL2ksL150L2ksL153L2ksL150L2ksL15mL2ksL15zL2ldLGFueTpbL15zdS9pLC9ebS9pLC9edHUvaSwvXncvaSwvXnRoL2ksL15mL2ksL15zYS9pXX0sJEN0PXtuYXJyb3c6L14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLGFueTovXihbYXBdXC4/XHM/bVwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaX0sQUN0PXthbnk6e2FtOi9eYS9pLHBtOi9ecC9pLG1pZG5pZ2h0Oi9ebWkvaSxub29uOi9ebm8vaSxtb3JuaW5nOi9tb3JuaW5nL2ksYWZ0ZXJub29uOi9hZnRlcm5vb24vaSxldmVuaW5nOi9ldmVuaW5nL2ksbmlnaHQ6L25pZ2h0L2l9fSxtWj17b3JkaW5hbE51bWJlcjp1Wih7bWF0Y2hQYXR0ZXJuOnhDdCxwYXJzZVBhdHRlcm46d0N0LHZhbHVlQ2FsbGJhY2s6dD0+cGFyc2VJbnQodCwxMCl9KSxlcmE6ZTMoe21hdGNoUGF0dGVybnM6TUN0LGRlZmF1bHRNYXRjaFdpZHRoOiJ3aWRlIixwYXJzZVBhdHRlcm5zOnpDdCxkZWZhdWx0UGFyc2VXaWR0aDoiYW55In0pLHF1YXJ0ZXI6ZTMoe21hdGNoUGF0dGVybnM6a0N0LGRlZmF1bHRNYXRjaFdpZHRoOiJ3aWRlIixwYXJzZVBhdHRlcm5zOlNDdCxkZWZhdWx0UGFyc2VXaWR0aDoiYW55Iix2YWx1ZUNhbGxiYWNrOnQ9PnQrMX0pLG1vbnRoOmUzKHttYXRjaFBhdHRlcm5zOkNDdCxkZWZhdWx0TWF0Y2hXaWR0aDoid2lkZSIscGFyc2VQYXR0ZXJuczpfQ3QsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KSxkYXk6ZTMoe21hdGNoUGF0dGVybnM6VEN0LGRlZmF1bHRNYXRjaFdpZHRoOiJ3aWRlIixwYXJzZVBhdHRlcm5zOkxDdCxkZWZhdWx0UGFyc2VXaWR0aDoiYW55In0pLGRheVBlcmlvZDplMyh7bWF0Y2hQYXR0ZXJuczokQ3QsZGVmYXVsdE1hdGNoV2lkdGg6ImFueSIscGFyc2VQYXR0ZXJuczpBQ3QsZGVmYXVsdFBhcnNlV2lkdGg6ImFueSJ9KX19KTt2YXIgVGEsb2MxLGJaPWIoKCk9PntpWigpO25aKCk7bFooKTtwWigpO2daKCk7VGE9e2NvZGU6ImVuLVVTIixmb3JtYXREaXN0YW5jZTphWixmb3JtYXRMb25nOnNaLGZvcm1hdFJlbGF0aXZlOm9aLGxvY2FsaXplOmRaLG1hdGNoOm1aLG9wdGlvbnM6e3dlZWtTdGFydHNPbjowLGZpcnN0V2Vla0NvbnRhaW5zRGF0ZToxfX0sb2MxPVRhfSk7dmFyIFpvPWIoKCk9PntiWigpfSk7ZnVuY3Rpb24gY3AodCxlKXtsZXQgYT1uZSh0LGU/LmluKTtyZXR1cm4gaDIoYSxRNChhKSkrMX12YXIgZmMxLGZTPWIoKCk9PntjcygpO25wKCk7QWUoKTtmYzE9Y3B9KTtmdW5jdGlvbiB0Myh0LGUpe2xldCBhPW5lKHQsZT8uaW4pLGk9K0cxKGEpLStOYShhKTtyZXR1cm4gTWF0aC5yb3VuZChpL3ZyKSsxfXZhciB4YzEsZHA9YigoKT0+e3l0KCk7TXIoKTtxNCgpO0FlKCk7eGMxPXQzfSk7ZnVuY3Rpb24gTW4odCxlKXtsZXQgYT1uZSh0LGU/LmluKSxpPWEuZ2V0RnVsbFllYXIoKSxyPUp0KCkscz1lPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2U/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9yLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/ci5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxuPUxlKGU/LmlufHx0LDApO24uc2V0RnVsbFllYXIoaSsxLDAscyksbi5zZXRIb3VycygwLDAsMCwwKTtsZXQgbz1wMShuLGUpLGQ9TGUoZT8uaW58fHQsMCk7ZC5zZXRGdWxsWWVhcihpLDAscyksZC5zZXRIb3VycygwLDAsMCwwKTtsZXQgYz1wMShkLGUpO3JldHVybithPj0rbz9pKzE6K2E+PStjP2k6aS0xfXZhciBDYzEsVmM9YigoKT0+e1IyKCk7YXQoKTtOaSgpO0FlKCk7Q2MxPU1ufSk7ZnVuY3Rpb24gWG8odCxlKXtsZXQgYT1KdCgpLGk9ZT8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/YS5maXJzdFdlZWtDb250YWluc0RhdGU/P2EubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/PzEscj1Nbih0LGUpLHM9TGUoZT8uaW58fHQsMCk7cmV0dXJuIHMuc2V0RnVsbFllYXIociwwLGkpLHMuc2V0SG91cnMoMCwwLDAsMCkscDEocyxlKX12YXIgRGMxLHBwPWIoKCk9PntSMigpO2F0KCk7VmMoKTtOaSgpO0RjMT1Yb30pO2Z1bmN0aW9uIGEzKHQsZSl7bGV0IGE9bmUodCxlPy5pbiksaT0rcDEoYSxlKS0rWG8oYSxlKTtyZXR1cm4gTWF0aC5yb3VuZChpL3ZyKSsxfXZhciBPYzEsaHA9YigoKT0+e3l0KCk7TmkoKTtwcCgpO0FlKCk7T2MxPWEzfSk7ZnVuY3Rpb24gWWUodCxlKXtsZXQgYT10PDA/Ii0iOiIiLGk9TWF0aC5hYnModCkudG9TdHJpbmcoKS5wYWRTdGFydChlLCIwIik7cmV0dXJuIGEraX12YXIgS289YigoKT0+e30pO3ZhciBGYSxtUz1iKCgpPT57S28oKTtGYT17eSh0LGUpe2xldCBhPXQuZ2V0RnVsbFllYXIoKSxpPWE+MD9hOjEtYTtyZXR1cm4gWWUoZT09PSJ5eSI/aSUxMDA6aSxlLmxlbmd0aCl9LE0odCxlKXtsZXQgYT10LmdldE1vbnRoKCk7cmV0dXJuIGU9PT0iTSI/U3RyaW5nKGErMSk6WWUoYSsxLDIpfSxkKHQsZSl7cmV0dXJuIFllKHQuZ2V0RGF0ZSgpLGUubGVuZ3RoKX0sYSh0LGUpe2xldCBhPXQuZ2V0SG91cnMoKS8xMj49MT8icG0iOiJhbSI7c3dpdGNoKGUpe2Nhc2UiYSI6Y2FzZSJhYSI6cmV0dXJuIGEudG9VcHBlckNhc2UoKTtjYXNlImFhYSI6cmV0dXJuIGE7Y2FzZSJhYWFhYSI6cmV0dXJuIGFbMF07ZGVmYXVsdDpyZXR1cm4gYT09PSJhbSI/ImEubS4iOiJwLm0uIn19LGgodCxlKXtyZXR1cm4gWWUodC5nZXRIb3VycygpJTEyfHwxMixlLmxlbmd0aCl9LEgodCxlKXtyZXR1cm4gWWUodC5nZXRIb3VycygpLGUubGVuZ3RoKX0sbSh0LGUpe3JldHVybiBZZSh0LmdldE1pbnV0ZXMoKSxlLmxlbmd0aCl9LHModCxlKXtyZXR1cm4gWWUodC5nZXRTZWNvbmRzKCksZS5sZW5ndGgpfSxTKHQsZSl7bGV0IGE9ZS5sZW5ndGgsaT10LmdldE1pbGxpc2Vjb25kcygpLHI9TWF0aC50cnVuYyhpKk1hdGgucG93KDEwLGEtMykpO3JldHVybiBZZShyLGUubGVuZ3RoKX19fSk7ZnVuY3Rpb24gdloodCxlPSIiKXtsZXQgYT10PjA/Ii0iOiIrIixpPU1hdGguYWJzKHQpLHI9TWF0aC50cnVuYyhpLzYwKSxzPWklNjA7cmV0dXJuIHM9PT0wP2ErU3RyaW5nKHIpOmErU3RyaW5nKHIpK2UrWWUocywyKX1mdW5jdGlvbiB5Wih0LGUpe3JldHVybiB0JTYwPT09MD8odD4wPyItIjoiKyIpK1llKE1hdGguYWJzKHQpLzYwLDIpOlFvKHQsZSl9ZnVuY3Rpb24gUW8odCxlPSIiKXtsZXQgYT10PjA/Ii0iOiIrIixpPU1hdGguYWJzKHQpLHI9WWUoTWF0aC50cnVuYyhpLzYwKSwyKSxzPVllKGklNjAsMik7cmV0dXJuIGErcitlK3N9dmFyIGkzLGpjLHhaPWIoKCk9PntmUygpO2RwKCk7Ym4oKTtocCgpO1ZjKCk7S28oKTttUygpO2kzPXthbToiYW0iLHBtOiJwbSIsbWlkbmlnaHQ6Im1pZG5pZ2h0Iixub29uOiJub29uIixtb3JuaW5nOiJtb3JuaW5nIixhZnRlcm5vb246ImFmdGVybm9vbiIsZXZlbmluZzoiZXZlbmluZyIsbmlnaHQ6Im5pZ2h0In0samM9e0c6ZnVuY3Rpb24odCxlLGEpe2xldCBpPXQuZ2V0RnVsbFllYXIoKT4wPzE6MDtzd2l0Y2goZSl7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6cmV0dXJuIGEuZXJhKGkse3dpZHRoOiJhYmJyZXZpYXRlZCJ9KTtjYXNlIkdHR0dHIjpyZXR1cm4gYS5lcmEoaSx7d2lkdGg6Im5hcnJvdyJ9KTtkZWZhdWx0OnJldHVybiBhLmVyYShpLHt3aWR0aDoid2lkZSJ9KX19LHk6ZnVuY3Rpb24odCxlLGEpe2lmKGU9PT0ieW8iKXtsZXQgaT10LmdldEZ1bGxZZWFyKCkscj1pPjA/aToxLWk7cmV0dXJuIGEub3JkaW5hbE51bWJlcihyLHt1bml0OiJ5ZWFyIn0pfXJldHVybiBGYS55KHQsZSl9LFk6ZnVuY3Rpb24odCxlLGEsaSl7bGV0IHI9TW4odCxpKSxzPXI+MD9yOjEtcjtpZihlPT09IllZIil7bGV0IG49cyUxMDA7cmV0dXJuIFllKG4sMil9cmV0dXJuIGU9PT0iWW8iP2Eub3JkaW5hbE51bWJlcihzLHt1bml0OiJ5ZWFyIn0pOlllKHMsZS5sZW5ndGgpfSxSOmZ1bmN0aW9uKHQsZSl7bGV0IGE9b2EodCk7cmV0dXJuIFllKGEsZS5sZW5ndGgpfSx1OmZ1bmN0aW9uKHQsZSl7bGV0IGE9dC5nZXRGdWxsWWVhcigpO3JldHVybiBZZShhLGUubGVuZ3RoKX0sUTpmdW5jdGlvbih0LGUsYSl7bGV0IGk9TWF0aC5jZWlsKCh0LmdldE1vbnRoKCkrMSkvMyk7c3dpdGNoKGUpe2Nhc2UiUSI6cmV0dXJuIFN0cmluZyhpKTtjYXNlIlFRIjpyZXR1cm4gWWUoaSwyKTtjYXNlIlFvIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6InF1YXJ0ZXIifSk7Y2FzZSJRUVEiOnJldHVybiBhLnF1YXJ0ZXIoaSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiUVFRUVEiOnJldHVybiBhLnF1YXJ0ZXIoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBhLnF1YXJ0ZXIoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxxOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT1NYXRoLmNlaWwoKHQuZ2V0TW9udGgoKSsxKS8zKTtzd2l0Y2goZSl7Y2FzZSJxIjpyZXR1cm4gU3RyaW5nKGkpO2Nhc2UicXEiOnJldHVybiBZZShpLDIpO2Nhc2UicW8iOnJldHVybiBhLm9yZGluYWxOdW1iZXIoaSx7dW5pdDoicXVhcnRlciJ9KTtjYXNlInFxcSI6cmV0dXJuIGEucXVhcnRlcihpLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJxcXFxcSI6cmV0dXJuIGEucXVhcnRlcihpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGEucXVhcnRlcihpLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19LE06ZnVuY3Rpb24odCxlLGEpe2xldCBpPXQuZ2V0TW9udGgoKTtzd2l0Y2goZSl7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gRmEuTSh0LGUpO2Nhc2UiTW8iOnJldHVybiBhLm9yZGluYWxOdW1iZXIoaSsxLHt1bml0OiJtb250aCJ9KTtjYXNlIk1NTSI6cmV0dXJuIGEubW9udGgoaSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiTU1NTU0iOnJldHVybiBhLm1vbnRoKGkse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5tb250aChpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LEw6ZnVuY3Rpb24odCxlLGEpe2xldCBpPXQuZ2V0TW9udGgoKTtzd2l0Y2goZSl7Y2FzZSJMIjpyZXR1cm4gU3RyaW5nKGkrMSk7Y2FzZSJMTCI6cmV0dXJuIFllKGkrMSwyKTtjYXNlIkxvIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKGkrMSx7dW5pdDoibW9udGgifSk7Y2FzZSJMTEwiOnJldHVybiBhLm1vbnRoKGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtjYXNlIkxMTExMIjpyZXR1cm4gYS5tb250aChpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGEubW9udGgoaSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fSx3OmZ1bmN0aW9uKHQsZSxhLGkpe2xldCByPWEzKHQsaSk7cmV0dXJuIGU9PT0id28iP2Eub3JkaW5hbE51bWJlcihyLHt1bml0OiJ3ZWVrIn0pOlllKHIsZS5sZW5ndGgpfSxJOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10Myh0KTtyZXR1cm4gZT09PSJJbyI/YS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6IndlZWsifSk6WWUoaSxlLmxlbmd0aCl9LGQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBlPT09ImRvIj9hLm9yZGluYWxOdW1iZXIodC5nZXREYXRlKCkse3VuaXQ6ImRhdGUifSk6RmEuZCh0LGUpfSxEOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT1jcCh0KTtyZXR1cm4gZT09PSJEbyI/YS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6ImRheU9mWWVhciJ9KTpZZShpLGUubGVuZ3RoKX0sRTpmdW5jdGlvbih0LGUsYSl7bGV0IGk9dC5nZXREYXkoKTtzd2l0Y2goZSl7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6cmV0dXJuIGEuZGF5KGkse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFIjpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkVFRUVFRSI6cmV0dXJuIGEuZGF5KGkse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBhLmRheShpLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGU6ZnVuY3Rpb24odCxlLGEsaSl7bGV0IHI9dC5nZXREYXkoKSxzPShyLWkud2Vla1N0YXJ0c09uKzgpJTd8fDc7c3dpdGNoKGUpe2Nhc2UiZSI6cmV0dXJuIFN0cmluZyhzKTtjYXNlImVlIjpyZXR1cm4gWWUocywyKTtjYXNlImVvIjpyZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHMse3VuaXQ6ImRheSJ9KTtjYXNlImVlZSI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlIjpyZXR1cm4gYS5kYXkocix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImVlZWVlZSI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBhLmRheShyLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGM6ZnVuY3Rpb24odCxlLGEsaSl7bGV0IHI9dC5nZXREYXkoKSxzPShyLWkud2Vla1N0YXJ0c09uKzgpJTd8fDc7c3dpdGNoKGUpe2Nhc2UiYyI6cmV0dXJuIFN0cmluZyhzKTtjYXNlImNjIjpyZXR1cm4gWWUocyxlLmxlbmd0aCk7Y2FzZSJjbyI6cmV0dXJuIGEub3JkaW5hbE51bWJlcihzLHt1bml0OiJkYXkifSk7Y2FzZSJjY2MiOnJldHVybiBhLmRheShyLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjYyI6cmV0dXJuIGEuZGF5KHIse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJjY2NjY2MiOnJldHVybiBhLmRheShyLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXkocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fSxpOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldERheSgpLHI9aT09PTA/NzppO3N3aXRjaChlKXtjYXNlImkiOnJldHVybiBTdHJpbmcocik7Y2FzZSJpaSI6cmV0dXJuIFllKHIsZS5sZW5ndGgpO2Nhc2UiaW8iOnJldHVybiBhLm9yZGluYWxOdW1iZXIocix7dW5pdDoiZGF5In0pO2Nhc2UiaWlpIjpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiaWlpaWkiOnJldHVybiBhLmRheShpLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiaWlpaWlpIjpyZXR1cm4gYS5kYXkoaSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGEuZGF5KGkse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX0sYTpmdW5jdGlvbih0LGUsYSl7bGV0IHI9dC5nZXRIb3VycygpLzEyPj0xPyJwbSI6ImFtIjtzd2l0Y2goZSl7Y2FzZSJhIjpjYXNlImFhIjpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiYWFhIjpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLnRvTG93ZXJDYXNlKCk7Y2FzZSJhYWFhYSI6cmV0dXJuIGEuZGF5UGVyaW9kKHIse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxiOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldEhvdXJzKCkscjtzd2l0Y2goaT09PTEyP3I9aTMubm9vbjppPT09MD9yPWkzLm1pZG5pZ2h0OnI9aS8xMj49MT8icG0iOiJhbSIsZSl7Y2FzZSJiIjpjYXNlImJiIjpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiYmJiIjpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLnRvTG93ZXJDYXNlKCk7Y2FzZSJiYmJiYiI6cmV0dXJuIGEuZGF5UGVyaW9kKHIse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fSxCOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldEhvdXJzKCkscjtzd2l0Y2goaT49MTc/cj1pMy5ldmVuaW5nOmk+PTEyP3I9aTMuYWZ0ZXJub29uOmk+PTQ/cj1pMy5tb3JuaW5nOnI9aTMubmlnaHQsZSl7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6cmV0dXJuIGEuZGF5UGVyaW9kKHIse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlIkJCQkJCIjpyZXR1cm4gYS5kYXlQZXJpb2Qocix7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBhLmRheVBlcmlvZChyLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19LGg6ZnVuY3Rpb24odCxlLGEpe2lmKGU9PT0iaG8iKXtsZXQgaT10LmdldEhvdXJzKCklMTI7cmV0dXJuIGk9PT0wJiYoaT0xMiksYS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6ImhvdXIifSl9cmV0dXJuIEZhLmgodCxlKX0sSDpmdW5jdGlvbih0LGUsYSl7cmV0dXJuIGU9PT0iSG8iP2Eub3JkaW5hbE51bWJlcih0LmdldEhvdXJzKCkse3VuaXQ6ImhvdXIifSk6RmEuSCh0LGUpfSxLOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldEhvdXJzKCklMTI7cmV0dXJuIGU9PT0iS28iP2Eub3JkaW5hbE51bWJlcihpLHt1bml0OiJob3VyIn0pOlllKGksZS5sZW5ndGgpfSxrOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldEhvdXJzKCk7cmV0dXJuIGk9PT0wJiYoaT0yNCksZT09PSJrbyI/YS5vcmRpbmFsTnVtYmVyKGkse3VuaXQ6ImhvdXIifSk6WWUoaSxlLmxlbmd0aCl9LG06ZnVuY3Rpb24odCxlLGEpe3JldHVybiBlPT09Im1vIj9hLm9yZGluYWxOdW1iZXIodC5nZXRNaW51dGVzKCkse3VuaXQ6Im1pbnV0ZSJ9KTpGYS5tKHQsZSl9LHM6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBlPT09InNvIj9hLm9yZGluYWxOdW1iZXIodC5nZXRTZWNvbmRzKCkse3VuaXQ6InNlY29uZCJ9KTpGYS5zKHQsZSl9LFM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gRmEuUyh0LGUpfSxYOmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldFRpbWV6b25lT2Zmc2V0KCk7aWYoaT09PTApcmV0dXJuIloiO3N3aXRjaChlKXtjYXNlIlgiOnJldHVybiB5WihpKTtjYXNlIlhYWFgiOmNhc2UiWFgiOnJldHVybiBRbyhpKTtkZWZhdWx0OnJldHVybiBRbyhpLCI6Iil9fSx4OmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT10LmdldFRpbWV6b25lT2Zmc2V0KCk7c3dpdGNoKGUpe2Nhc2UieCI6cmV0dXJuIHlaKGkpO2Nhc2UieHh4eCI6Y2FzZSJ4eCI6cmV0dXJuIFFvKGkpO2RlZmF1bHQ6cmV0dXJuIFFvKGksIjoiKX19LE86ZnVuY3Rpb24odCxlLGEpe2xldCBpPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtzd2l0Y2goZSl7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6cmV0dXJuIkdNVCIrdlooaSwiOiIpO2RlZmF1bHQ6cmV0dXJuIkdNVCIrUW8oaSwiOiIpfX0sejpmdW5jdGlvbih0LGUsYSl7bGV0IGk9dC5nZXRUaW1lem9uZU9mZnNldCgpO3N3aXRjaChlKXtjYXNlInoiOmNhc2UienoiOmNhc2Uienp6IjpyZXR1cm4iR01UIit2WihpLCI6Iik7ZGVmYXVsdDpyZXR1cm4iR01UIitRbyhpLCI6Iil9fSx0OmZ1bmN0aW9uKHQsZSxhKXtsZXQgaT1NYXRoLnRydW5jKCt0LzFlMyk7cmV0dXJuIFllKGksZS5sZW5ndGgpfSxUOmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gWWUoK3QsZS5sZW5ndGgpfX19KTt2YXIgd1osTVosREN0LHpuLGdTPWIoKCk9Pnt3Wj0odCxlKT0+e3N3aXRjaCh0KXtjYXNlIlAiOnJldHVybiBlLmRhdGUoe3dpZHRoOiJzaG9ydCJ9KTtjYXNlIlBQIjpyZXR1cm4gZS5kYXRlKHt3aWR0aDoibWVkaXVtIn0pO2Nhc2UiUFBQIjpyZXR1cm4gZS5kYXRlKHt3aWR0aDoibG9uZyJ9KTtkZWZhdWx0OnJldHVybiBlLmRhdGUoe3dpZHRoOiJmdWxsIn0pfX0sTVo9KHQsZSk9Pntzd2l0Y2godCl7Y2FzZSJwIjpyZXR1cm4gZS50aW1lKHt3aWR0aDoic2hvcnQifSk7Y2FzZSJwcCI6cmV0dXJuIGUudGltZSh7d2lkdGg6Im1lZGl1bSJ9KTtjYXNlInBwcCI6cmV0dXJuIGUudGltZSh7d2lkdGg6ImxvbmcifSk7ZGVmYXVsdDpyZXR1cm4gZS50aW1lKHt3aWR0aDoiZnVsbCJ9KX19LERDdD0odCxlKT0+e2xldCBhPXQubWF0Y2goLyhQKykocCspPy8pfHxbXSxpPWFbMV0scj1hWzJdO2lmKCFyKXJldHVybiB3Wih0LGUpO2xldCBzO3N3aXRjaChpKXtjYXNlIlAiOnM9ZS5kYXRlVGltZSh7d2lkdGg6InNob3J0In0pO2JyZWFrO2Nhc2UiUFAiOnM9ZS5kYXRlVGltZSh7d2lkdGg6Im1lZGl1bSJ9KTticmVhaztjYXNlIlBQUCI6cz1lLmRhdGVUaW1lKHt3aWR0aDoibG9uZyJ9KTticmVhaztkZWZhdWx0OnM9ZS5kYXRlVGltZSh7d2lkdGg6ImZ1bGwifSk7YnJlYWt9cmV0dXJuIHMucmVwbGFjZSgie3tkYXRlfX0iLHdaKGksZSkpLnJlcGxhY2UoInt7dGltZX19IixNWihyLGUpKX0sem49e3A6TVosUDpEQ3R9fSk7ZnVuY3Rpb24gdXAodCl7cmV0dXJuIEVDdC50ZXN0KHQpfWZ1bmN0aW9uIGZwKHQpe3JldHVybiBQQ3QudGVzdCh0KX1mdW5jdGlvbiBVYyh0LGUsYSl7bGV0IGk9TkN0KHQsZSxhKTtpZihjb25zb2xlLndhcm4oaSksSUN0LmluY2x1ZGVzKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKGkpfWZ1bmN0aW9uIE5DdCh0LGUsYSl7bGV0IGk9dFswXT09PSJZIj8ieWVhcnMiOiJkYXlzIG9mIHRoZSBtb250aCI7cmV0dXJuYFVzZSBcYCR7dC50b0xvd2VyQ2FzZSgpfVxgIGluc3RlYWQgb2YgXGAke3R9XGAgKGluIFxgJHtlfVxgKSBmb3IgZm9ybWF0dGluZyAke2l9IHRvIHRoZSBpbnB1dCBcYCR7YX1cYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYH12YXIgRUN0LFBDdCxJQ3QsYlM9YigoKT0+e0VDdD0vXkQrJC8sUEN0PS9eWSskLyxJQ3Q9WyJEIiwiREQiLCJZWSIsIllZWVkiXX0pO2Z1bmN0aW9uIFdjKHQsZSxhKXtsZXQgaT1KdCgpLHI9YT8ubG9jYWxlPz9pLmxvY2FsZT8/VGEscz1hPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2E/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9pLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/aS5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxuPWE/LndlZWtTdGFydHNPbj8/YT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P2kud2Vla1N0YXJ0c09uPz9pLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLG89bmUodCxhPy5pbik7aWYoIWsyKG8pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgZD1lLm1hdGNoKE9DdCkubWFwKHA9PntsZXQgbD1wWzBdO2lmKGw9PT0icCJ8fGw9PT0iUCIpe2xldCBmPXpuW2xdO3JldHVybiBmKHAsci5mb3JtYXRMb25nKX1yZXR1cm4gcH0pLmpvaW4oIiIpLm1hdGNoKEZDdCkubWFwKHA9PntpZihwPT09IicnIilyZXR1cm57aXNUb2tlbjohMSx2YWx1ZToiJyJ9O2xldCBsPXBbMF07aWYobD09PSInIilyZXR1cm57aXNUb2tlbjohMSx2YWx1ZTpxQ3QocCl9O2lmKGpjW2xdKXJldHVybntpc1Rva2VuOiEwLHZhbHVlOnB9O2lmKGwubWF0Y2goSEN0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiK2wrImAiKTtyZXR1cm57aXNUb2tlbjohMSx2YWx1ZTpwfX0pO3IubG9jYWxpemUucHJlcHJvY2Vzc29yJiYoZD1yLmxvY2FsaXplLnByZXByb2Nlc3NvcihvLGQpKTtsZXQgYz17Zmlyc3RXZWVrQ29udGFpbnNEYXRlOnMsd2Vla1N0YXJ0c09uOm4sbG9jYWxlOnJ9O3JldHVybiBkLm1hcChwPT57aWYoIXAuaXNUb2tlbilyZXR1cm4gcC52YWx1ZTtsZXQgbD1wLnZhbHVlOyghYT8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zJiZmcChsKXx8IWE/LnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMmJnVwKGwpKSYmVWMobCxlLFN0cmluZyh0KSk7bGV0IGY9amNbbFswXV07cmV0dXJuIGYobyxsLHIubG9jYWxpemUsYyl9KS5qb2luKCIiKX1mdW5jdGlvbiBxQ3QodCl7bGV0IGU9dC5tYXRjaChSQ3QpO3JldHVybiBlP2VbMV0ucmVwbGFjZShCQ3QsIiciKTp0fXZhciBGQ3QsT0N0LFJDdCxCQ3QsSEN0LG42MSx2Uz1iKCgpPT57Wm8oKTtSMigpO3haKCk7Z1MoKTtiUygpO2RzKCk7QWUoKTtGQ3Q9L1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxPQ3Q9L1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2csUkN0PS9eJyhbXl0qPyknPyQvLEJDdD0vJycvZyxIQ3Q9L1thLXpBLVpdLztuNjE9V2N9KTtmdW5jdGlvbiBtcCh0LGUsYSl7bGV0IGk9SnQoKSxyPWE/LmxvY2FsZT8/aS5sb2NhbGU/P1RhLHM9MjUyMCxuPUIyKHQsZSk7aWYoaXNOYU4obikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBvPU9iamVjdC5hc3NpZ24oe30sYSx7YWRkU3VmZml4OmE/LmFkZFN1ZmZpeCxjb21wYXJpc29uOm59KSxbZCxjXT1KZShhPy5pbiwuLi5uPjA/W2UsdF06W3QsZV0pLHA9U3IoYyxkKSxsPShEMShjKS1EMShkKSkvMWUzLGY9TWF0aC5yb3VuZCgocC1sKS82MCksZztpZihmPDIpcmV0dXJuIGE/LmluY2x1ZGVTZWNvbmRzP3A8NT9yLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiw1LG8pOnA8MTA/ci5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YU2Vjb25kcyIsMTAsbyk6cDwyMD9yLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwyMCxvKTpwPDQwP3IuZm9ybWF0RGlzdGFuY2UoImhhbGZBTWludXRlIiwwLG8pOnA8NjA/ci5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YTWludXRlcyIsMSxvKTpyLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsMSxvKTpmPT09MD9yLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwxLG8pOnIuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIixmLG8pO2lmKGY8NDUpcmV0dXJuIHIuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIixmLG8pO2lmKGY8OTApcmV0dXJuIHIuZm9ybWF0RGlzdGFuY2UoImFib3V0WEhvdXJzIiwxLG8pO2lmKGY8UjQpe2xldCB5PU1hdGgucm91bmQoZi82MCk7cmV0dXJuIHIuZm9ybWF0RGlzdGFuY2UoImFib3V0WEhvdXJzIix5LG8pfWVsc2V7aWYoZjxzKXJldHVybiByLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsMSxvKTtpZihmPGZuKXtsZXQgeT1NYXRoLnJvdW5kKGYvUjQpO3JldHVybiByLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIseSxvKX1lbHNlIGlmKGY8Zm4qMilyZXR1cm4gZz1NYXRoLnJvdW5kKGYvZm4pLHIuZm9ybWF0RGlzdGFuY2UoImFib3V0WE1vbnRocyIsZyxvKX1pZihnPXhuKGMsZCksZzwxMil7bGV0IHk9TWF0aC5yb3VuZChmL2ZuKTtyZXR1cm4gci5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIseSxvKX1lbHNle2xldCB5PWclMTIsdj1NYXRoLnRydW5jKGcvMTIpO3JldHVybiB5PDM/ci5mb3JtYXREaXN0YW5jZSgiYWJvdXRYWWVhcnMiLHYsbyk6eTw5P3IuZm9ybWF0RGlzdGFuY2UoIm92ZXJYWWVhcnMiLHYsbyk6ci5mb3JtYXREaXN0YW5jZSgiYWxtb3N0WFllYXJzIix2KzEsbyl9fXZhciBnNjEseVM9YigoKT0+e1pvKCk7UjIoKTtscygpO3MxKCk7am8oKTt5dCgpO0JjKCk7SGMoKTtnNjE9bXB9KTtmdW5jdGlvbiBncCh0LGUsYSl7bGV0IGk9SnQoKSxyPWE/LmxvY2FsZT8/aS5sb2NhbGU/P1RhLHM9QjIodCxlKTtpZihpc05hTihzKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7bGV0IG49T2JqZWN0LmFzc2lnbih7fSxhLHthZGRTdWZmaXg6YT8uYWRkU3VmZml4LGNvbXBhcmlzb246c30pLFtvLGRdPUplKGE/LmluLC4uLnM+MD9bZSx0XTpbdCxlXSksYz1IMihhPy5yb3VuZGluZ01ldGhvZD8/InJvdW5kIikscD1kLmdldFRpbWUoKS1vLmdldFRpbWUoKSxsPXAvTzIsZj1EMShkKS1EMShvKSxnPShwLWYpL08yLHk9YT8udW5pdCx2O2lmKHk/dj15Omw8MT92PSJzZWNvbmQiOmw8NjA/dj0ibWludXRlIjpsPFI0P3Y9ImhvdXIiOmc8Zm4/dj0iZGF5IjpnPHFrP3Y9Im1vbnRoIjp2PSJ5ZWFyIix2PT09InNlY29uZCIpe2xldCBtPWMocC8xZTMpO3JldHVybiByLmZvcm1hdERpc3RhbmNlKCJ4U2Vjb25kcyIsbSxuKX1lbHNlIGlmKHY9PT0ibWludXRlIil7bGV0IG09YyhsKTtyZXR1cm4gci5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLG0sbil9ZWxzZSBpZih2PT09ImhvdXIiKXtsZXQgbT1jKGwvNjApO3JldHVybiByLmZvcm1hdERpc3RhbmNlKCJ4SG91cnMiLG0sbil9ZWxzZSBpZih2PT09ImRheSIpe2xldCBtPWMoZy9SNCk7cmV0dXJuIHIuZm9ybWF0RGlzdGFuY2UoInhEYXlzIixtLG4pfWVsc2UgaWYodj09PSJtb250aCIpe2xldCBtPWMoZy9mbik7cmV0dXJuIG09PT0xMiYmeSE9PSJtb250aCI/ci5mb3JtYXREaXN0YW5jZSgieFllYXJzIiwxLG4pOnIuZm9ybWF0RGlzdGFuY2UoInhNb250aHMiLG0sbil9ZWxzZXtsZXQgbT1jKGcvcWspO3JldHVybiByLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLG0sbil9fXZhciBTNjEseFM9YigoKT0+e1pvKCk7UjIoKTtwcygpO2xzKCk7czEoKTtqbygpO3l0KCk7UzYxPWdwfSk7ZnVuY3Rpb24geloodCxlKXtyZXR1cm4gbXAodCxfdCh0KSxlKX12YXIgTDYxLGtaPWIoKCk9PntlMigpO3lTKCk7TDYxPXpafSk7ZnVuY3Rpb24gU1oodCxlKXtyZXR1cm4gZ3AodCxfdCh0KSxlKX12YXIgRTYxLENaPWIoKCk9PntlMigpO3hTKCk7RTYxPVNafSk7ZnVuY3Rpb24gX1oodCxlKXtsZXQgYT1KdCgpLGk9ZT8ubG9jYWxlPz9hLmxvY2FsZT8/VGEscj1lPy5mb3JtYXQ/P1ZDdCxzPWU/Lnplcm8/PyExLG49ZT8uZGVsaW1pdGVyPz8iICI7cmV0dXJuIGkuZm9ybWF0RGlzdGFuY2U/ci5yZWR1Y2UoKGQsYyk9PntsZXQgcD1geCR7Yy5yZXBsYWNlKC8oXi4pLyxmPT5mLnRvVXBwZXJDYXNlKCkpfWAsbD10W2NdO3JldHVybiBsIT09dm9pZCAwJiYoc3x8dFtjXSk/ZC5jb25jYXQoaS5mb3JtYXREaXN0YW5jZShwLGwpKTpkfSxbXSkuam9pbihuKToiIn12YXIgVkN0LEY2MSxUWj1iKCgpPT57Wm8oKTtSMigpO1ZDdD1bInllYXJzIiwibW9udGhzIiwid2Vla3MiLCJkYXlzIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyJdO0Y2MT1fWn0pO2Z1bmN0aW9uIExaKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7aWYoaXNOYU4oK2EpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgaT1lPy5mb3JtYXQ/PyJleHRlbmRlZCIscj1lPy5yZXByZXNlbnRhdGlvbj8/ImNvbXBsZXRlIixzPSIiLG49IiIsbz1pPT09ImV4dGVuZGVkIj8iLSI6IiIsZD1pPT09ImV4dGVuZGVkIj8iOiI6IiI7aWYociE9PSJ0aW1lIil7bGV0IGM9WWUoYS5nZXREYXRlKCksMikscD1ZZShhLmdldE1vbnRoKCkrMSwyKTtzPWAke1llKGEuZ2V0RnVsbFllYXIoKSw0KX0ke299JHtwfSR7b30ke2N9YH1pZihyIT09ImRhdGUiKXtsZXQgYz1hLmdldFRpbWV6b25lT2Zmc2V0KCk7aWYoYyE9PTApe2xldCB2PU1hdGguYWJzKGMpLG09WWUoTWF0aC50cnVuYyh2LzYwKSwyKSx4PVllKHYlNjAsMik7bj1gJHtjPDA/IisiOiItIn0ke219OiR7eH1gfWVsc2Ugbj0iWiI7bGV0IHA9WWUoYS5nZXRIb3VycygpLDIpLGw9WWUoYS5nZXRNaW51dGVzKCksMiksZj1ZZShhLmdldFNlY29uZHMoKSwyKSxnPXM9PT0iIj8iIjoiVCIseT1bcCxsLGZdLmpvaW4oZCk7cz1gJHtzfSR7Z30ke3l9JHtufWB9cmV0dXJuIHN9dmFyIEg2MSwkWj1iKCgpPT57S28oKTtBZSgpO0g2MT1MWn0pO2Z1bmN0aW9uIEFaKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7aWYoIWsyKGEpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgaT1lPy5mb3JtYXQ/PyJleHRlbmRlZCIscj1lPy5yZXByZXNlbnRhdGlvbj8/ImNvbXBsZXRlIixzPSIiLG49aT09PSJleHRlbmRlZCI/Ii0iOiIiLG89aT09PSJleHRlbmRlZCI/IjoiOiIiO2lmKHIhPT0idGltZSIpe2xldCBkPVllKGEuZ2V0RGF0ZSgpLDIpLGM9WWUoYS5nZXRNb250aCgpKzEsMik7cz1gJHtZZShhLmdldEZ1bGxZZWFyKCksNCl9JHtufSR7Y30ke259JHtkfWB9aWYociE9PSJkYXRlIil7bGV0IGQ9WWUoYS5nZXRIb3VycygpLDIpLGM9WWUoYS5nZXRNaW51dGVzKCksMikscD1ZZShhLmdldFNlY29uZHMoKSwyKTtzPWAke3N9JHtzPT09IiI/IiI6IiAifSR7ZH0ke299JHtjfSR7b30ke3B9YH1yZXR1cm4gc312YXIgVzYxLERaPWIoKCk9PntLbygpO2RzKCk7QWUoKTtXNjE9QVp9KTtmdW5jdGlvbiBFWih0KXtsZXR7eWVhcnM6ZT0wLG1vbnRoczphPTAsZGF5czppPTAsaG91cnM6cj0wLG1pbnV0ZXM6cz0wLHNlY29uZHM6bj0wfT10O3JldHVybmBQJHtlfVkke2F9TSR7aX1EVCR7cn1IJHtzfU0ke259U2B9dmFyIFk2MSxQWj1iKCgpPT57WTYxPUVafSk7ZnVuY3Rpb24gSVoodCxlKXtsZXQgYT1uZSh0LGU/LmluKTtpZighazIoYSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBpPWU/LmZyYWN0aW9uRGlnaXRzPz8wLHI9WWUoYS5nZXREYXRlKCksMikscz1ZZShhLmdldE1vbnRoKCkrMSwyKSxuPWEuZ2V0RnVsbFllYXIoKSxvPVllKGEuZ2V0SG91cnMoKSwyKSxkPVllKGEuZ2V0TWludXRlcygpLDIpLGM9WWUoYS5nZXRTZWNvbmRzKCksMikscD0iIjtpZihpPjApe2xldCBnPWEuZ2V0TWlsbGlzZWNvbmRzKCkseT1NYXRoLnRydW5jKGcqTWF0aC5wb3coMTAsaS0zKSk7cD0iLiIrWWUoeSxpKX1sZXQgbD0iIixmPWEuZ2V0VGltZXpvbmVPZmZzZXQoKTtpZihmIT09MCl7bGV0IGc9TWF0aC5hYnMoZikseT1ZZShNYXRoLnRydW5jKGcvNjApLDIpLHY9WWUoZyU2MCwyKTtsPWAke2Y8MD8iKyI6Ii0ifSR7eX06JHt2fWB9ZWxzZSBsPSJaIjtyZXR1cm5gJHtufS0ke3N9LSR7cn1UJHtvfToke2R9OiR7Y30ke3B9JHtsfWB9dmFyIEo2MSxOWj1iKCgpPT57S28oKTtkcygpO0FlKCk7SjYxPUlafSk7ZnVuY3Rpb24gRloodCl7bGV0IGU9bmUodCk7aWYoIWsyKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgYT1qQ3RbZS5nZXRVVENEYXkoKV0saT1ZZShlLmdldFVUQ0RhdGUoKSwyKSxyPVVDdFtlLmdldFVUQ01vbnRoKCldLHM9ZS5nZXRVVENGdWxsWWVhcigpLG49WWUoZS5nZXRVVENIb3VycygpLDIpLG89WWUoZS5nZXRVVENNaW51dGVzKCksMiksZD1ZZShlLmdldFVUQ1NlY29uZHMoKSwyKTtyZXR1cm5gJHthfSwgJHtpfSAke3J9ICR7c30gJHtufToke299OiR7ZH0gR01UYH12YXIgakN0LFVDdCxyNTEsT1o9YigoKT0+e0tvKCk7ZHMoKTtBZSgpO2pDdD1bIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFVDdD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3I1MT1GWn0pO2Z1bmN0aW9uIFJaKHQsZSxhKXtsZXRbaSxyXT1KZShhPy5pbix0LGUpLHM9SnQoKSxuPWE/LmxvY2FsZT8/cy5sb2NhbGU/P1RhLG89YT8ud2Vla1N0YXJ0c09uPz9hPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/cy53ZWVrU3RhcnRzT24/P3MubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAsZD1oMihpLHIpO2lmKGlzTmFOKGQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTtsZXQgYztkPC02P2M9Im90aGVyIjpkPC0xP2M9Imxhc3RXZWVrIjpkPDA/Yz0ieWVzdGVyZGF5IjpkPDE/Yz0idG9kYXkiOmQ8Mj9jPSJ0b21vcnJvdyI6ZDw3P2M9Im5leHRXZWVrIjpjPSJvdGhlciI7bGV0IHA9bi5mb3JtYXRSZWxhdGl2ZShjLGkscix7bG9jYWxlOm4sd2Vla1N0YXJ0c09uOm99KTtyZXR1cm4gV2MoaSxwLHtsb2NhbGU6bix3ZWVrU3RhcnRzT246b30pfXZhciBwNTEsQlo9YigoKT0+e1pvKCk7UjIoKTtzMSgpO2NzKCk7dlMoKTtwNTE9Ulp9KTtmdW5jdGlvbiBIWih0LGUpe3JldHVybiBuZSh0KjFlMyxlPy5pbil9dmFyIGY1MSxxWj1iKCgpPT57QWUoKTtmNTE9SFp9KTtmdW5jdGlvbiBicCh0LGUpe3JldHVybiBuZSh0LGU/LmluKS5nZXREYXRlKCl9dmFyIGI1MSx3Uz1iKCgpPT57QWUoKTtiNTE9YnB9KTtmdW5jdGlvbiBrbih0LGUpe3JldHVybiBuZSh0LGU/LmluKS5nZXREYXkoKX12YXIgeDUxLEdjPWIoKCk9PntBZSgpO3g1MT1rbn0pO2Z1bmN0aW9uIHZwKHQsZSl7bGV0IGE9bmUodCxlPy5pbiksaT1hLmdldEZ1bGxZZWFyKCkscj1hLmdldE1vbnRoKCkscz1MZShhLDApO3JldHVybiBzLnNldEZ1bGxZZWFyKGkscisxLDApLHMuc2V0SG91cnMoMCwwLDAsMCkscy5nZXREYXRlKCl9dmFyIGs1MSxNUz1iKCgpPT57YXQoKTtBZSgpO2s1MT12cH0pO2Z1bmN0aW9uIHlwKHQsZSl7bGV0IGk9bmUodCxlPy5pbikuZ2V0RnVsbFllYXIoKTtyZXR1cm4gaSU0MDA9PT0wfHxpJTQ9PT0wJiZpJTEwMCE9PTB9dmFyIF81MSx6Uz1iKCgpPT57QWUoKTtfNTE9eXB9KTtmdW5jdGlvbiBWWih0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBOdW1iZXIuaXNOYU4oK2EpP05hTjp5cChhKT8zNjY6MzY1fXZhciBBNTEsalo9YigoKT0+e3pTKCk7QWUoKTtBNTE9Vlp9KTtmdW5jdGlvbiBVWih0LGUpe2xldCBpPW5lKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCk7cmV0dXJuIE1hdGguZmxvb3IoaS8xMCkqMTB9dmFyIFA1MSxXWj1iKCgpPT57QWUoKTtQNTE9VVp9KTtmdW5jdGlvbiB4cCgpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LEp0KCkpfXZhciBGNTEsa1M9YigoKT0+e1IyKCk7RjUxPXhwfSk7ZnVuY3Rpb24gR1oodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0SG91cnMoKX12YXIgQjUxLFlaPWIoKCk9PntBZSgpO0I1MT1HWn0pO2Z1bmN0aW9uIHdwKHQsZSl7bGV0IGE9bmUodCxlPy5pbikuZ2V0RGF5KCk7cmV0dXJuIGE9PT0wPzc6YX12YXIgVjUxLFNTPWIoKCk9PntBZSgpO1Y1MT13cH0pO2Z1bmN0aW9uIFpaKHQsZSl7bGV0IGE9TmEodCxlKSxyPStOYSh2bihhLDYwKSktK2E7cmV0dXJuIE1hdGgucm91bmQoci92cil9dmFyIFk1MSxYWj1iKCgpPT57T2MoKTt5dCgpO3E0KCk7WTUxPVpafSk7ZnVuY3Rpb24gS1oodCl7cmV0dXJuIG5lKHQpLmdldE1pbGxpc2Vjb25kcygpfXZhciBLNTEsUVo9YigoKT0+e0FlKCk7SzUxPUtafSk7ZnVuY3Rpb24gSloodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0TWludXRlcygpfXZhciBlODEsZVg9YigoKT0+e0FlKCk7ZTgxPUpafSk7ZnVuY3Rpb24gdFgodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0TW9udGgoKX12YXIgaTgxLGFYPWIoKCk9PntBZSgpO2k4MT10WH0pO2Z1bmN0aW9uIGlYKHQsZSl7bGV0W2EsaV09WytuZSh0LnN0YXJ0KSwrbmUodC5lbmQpXS5zb3J0KChsLGYpPT5sLWYpLFtyLHNdPVsrbmUoZS5zdGFydCksK25lKGUuZW5kKV0uc29ydCgobCxmKT0+bC1mKTtpZighKGE8cyYmcjxpKSlyZXR1cm4gMDtsZXQgbz1yPGE/YTpyLGQ9by1EMShvKSxjPXM+aT9pOnMscD1jLUQxKGMpO3JldHVybiBNYXRoLmNlaWwoKHAtZCkvazcpfXZhciBsODEsclg9YigoKT0+e2xzKCk7eXQoKTtBZSgpO2w4MT1pWH0pO2Z1bmN0aW9uIHNYKHQpe3JldHVybiBuZSh0KS5nZXRTZWNvbmRzKCl9dmFyIHA4MSxuWD1iKCgpPT57QWUoKTtwODE9c1h9KTtmdW5jdGlvbiBvWCh0KXtyZXR1cm4rbmUodCl9dmFyIGY4MSxsWD1iKCgpPT57QWUoKTtmODE9b1h9KTtmdW5jdGlvbiBjWCh0KXtyZXR1cm4gTWF0aC50cnVuYygrbmUodCkvMWUzKX12YXIgYjgxLGRYPWIoKCk9PntBZSgpO2I4MT1jWH0pO2Z1bmN0aW9uIHBYKHQsZSl7bGV0IGE9SnQoKSxpPWU/LndlZWtTdGFydHNPbj8/ZT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P2Eud2Vla1N0YXJ0c09uPz9hLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wLHI9YnAobmUodCxlPy5pbikpO2lmKGlzTmFOKHIpKXJldHVybiBOYU47bGV0IHM9a24od24odCxlKSksbj1pLXM7bjw9MCYmKG4rPTcpO2xldCBvPXItbjtyZXR1cm4gTWF0aC5jZWlsKG8vNykrMX12YXIgazgxLGhYPWIoKCk9PntSMigpO3dTKCk7R2MoKTtxYygpO0FlKCk7azgxPXBYfSk7ZnVuY3Rpb24gTXAodCxlKXtsZXQgYT1uZSh0LGU/LmluKSxpPWEuZ2V0TW9udGgoKTtyZXR1cm4gYS5zZXRGdWxsWWVhcihhLmdldEZ1bGxZZWFyKCksaSsxLDApLGEuc2V0SG91cnMoMCwwLDAsMCksbmUoYSxlPy5pbil9dmFyIF84MSxDUz1iKCgpPT57QWUoKTtfODE9TXB9KTtmdW5jdGlvbiB1WCh0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBXbyhNcChhLGUpLHduKGEsZSksZSkrMX12YXIgRTgxLGZYPWIoKCk9PntVNygpO0NTKCk7cWMoKTtBZSgpO0U4MT11WH0pO2Z1bmN0aW9uIG1YKHQsZSl7cmV0dXJuIG5lKHQsZT8uaW4pLmdldEZ1bGxZZWFyKCl9dmFyIE44MSxnWD1iKCgpPT57QWUoKTtOODE9bVh9KTtmdW5jdGlvbiBiWCh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KklhKX12YXIgUjgxLHZYPWIoKCk9Pnt5dCgpO1I4MT1iWH0pO2Z1bmN0aW9uIHlYKHQpe3JldHVybiBNYXRoLnRydW5jKHQqUzcpfXZhciBxODEseFg9YigoKT0+e3l0KCk7cTgxPXlYfSk7ZnVuY3Rpb24gd1godCl7cmV0dXJuIE1hdGgudHJ1bmModCpWbyl9dmFyIFU4MSxNWD1iKCgpPT57eXQoKTtVODE9d1h9KTtmdW5jdGlvbiB6WCh0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKTtpZihpc05hTigraSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7aWYoaXNOYU4oK3IpKXRocm93IG5ldyBUeXBlRXJyb3IoIkVuZCBkYXRlIGlzIGludmFsaWQiKTtpZihhPy5hc3NlcnRQb3NpdGl2ZSYmK2k+K3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgbXVzdCBiZSBhZnRlciBzdGFydCBkYXRlIik7cmV0dXJue3N0YXJ0OmksZW5kOnJ9fXZhciBZODEsa1g9YigoKT0+e3MxKCk7WTgxPXpYfSk7ZnVuY3Rpb24gU1godCxlKXtsZXR7c3RhcnQ6YSxlbmQ6aX09dTIoZT8uaW4sdCkscj17fSxzPXRwKGksYSk7cyYmKHIueWVhcnM9cyk7bGV0IG49bW4oYSx7eWVhcnM6ci55ZWFyc30pLG89eG4oaSxuKTtvJiYoci5tb250aHM9byk7bGV0IGQ9bW4obix7bW9udGhzOnIubW9udGhzfSksYz1HNChpLGQpO2MmJihyLmRheXM9Yyk7bGV0IHA9bW4oZCx7ZGF5czpyLmRheXN9KSxsPUdvKGkscCk7bCYmKHIuaG91cnM9bCk7bGV0IGY9bW4ocCx7aG91cnM6ci5ob3Vyc30pLGc9WW8oaSxmKTtnJiYoci5taW51dGVzPWcpO2xldCB5PW1uKGYse21pbnV0ZXM6ci5taW51dGVzfSksdj1TcihpLHkpO3JldHVybiB2JiYoci5zZWNvbmRzPXYpLHJ9dmFyIHJkMSxDWD1iKCgpPT57Q3IoKTtXaygpO0c3KCk7WTcoKTtLNygpO0JjKCk7SGMoKTtkUygpO3JkMT1TWH0pO2Z1bmN0aW9uIF9YKHQsZSxhKXtsZXQgaTtyZXR1cm4gV0N0KGUpP2k9ZTphPWUsbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoYT8ubG9jYWxlLGkpLmZvcm1hdChuZSh0KSl9ZnVuY3Rpb24gV0N0KHQpe3JldHVybiB0IT09dm9pZCAwJiYhKCJsb2NhbGUiaW4gdCl9dmFyIG9kMSxUWD1iKCgpPT57QWUoKTtvZDE9X1h9KTtmdW5jdGlvbiBMWCh0LGUsYSl7bGV0IGk9MCxyLFtzLG5dPUplKGE/LmluLHQsZSk7aWYoYT8udW5pdClyPWE/LnVuaXQscj09PSJzZWNvbmQiP2k9U3IocyxuKTpyPT09Im1pbnV0ZSI/aT1ZbyhzLG4pOnI9PT0iaG91ciI/aT1HbyhzLG4pOnI9PT0iZGF5Ij9pPWgyKHMsbik6cj09PSJ3ZWVrIj9pPVdvKHMsbik6cj09PSJtb250aCI/aT1VbyhzLG4pOnI9PT0icXVhcnRlciI/aT1XNChzLG4pOnI9PT0ieWVhciImJihpPXluKHMsbikpO2Vsc2V7bGV0IGQ9U3IocyxuKTtNYXRoLmFicyhkKTxCND8oaT1TcihzLG4pLHI9InNlY29uZCIpOk1hdGguYWJzKGQpPFZvPyhpPVlvKHMsbikscj0ibWludXRlIik6TWF0aC5hYnMoZCk8TTcmJk1hdGguYWJzKGgyKHMsbikpPDE/KGk9R28ocyxuKSxyPSJob3VyIik6TWF0aC5hYnMoZCk8WkcmJihpPWgyKHMsbikpJiZNYXRoLmFicyhpKTw3P3I9ImRheSI6TWF0aC5hYnMoZCk8ams/KGk9V28ocyxuKSxyPSJ3ZWVrIik6TWF0aC5hYnMoZCk8WEc/KGk9VW8ocyxuKSxyPSJtb250aCIpOk1hdGguYWJzKGQpPFZrP1c0KHMsbik8ND8oaT1XNChzLG4pLHI9InF1YXJ0ZXIiKTooaT15bihzLG4pLHI9InllYXIiKTooaT15bihzLG4pLHI9InllYXIiKX1yZXR1cm4gbmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGE/LmxvY2FsZSx7bnVtZXJpYzoiYXV0byIsLi4uYX0pLmZvcm1hdChpLHIpfXZhciB5ZDEsJFg9YigoKT0+e3MxKCk7eXQoKTtjcygpO2o3KCk7b1MoKTtVNygpO1c3KCk7WTcoKTtLNygpO0hjKCk7eWQxPUxYfSk7ZnVuY3Rpb24gQVgodCxlKXtyZXR1cm4rbmUodCk+K25lKGUpfXZhciBNZDEsRFg9YigoKT0+e0FlKCk7TWQxPUFYfSk7ZnVuY3Rpb24gRVgodCxlKXtyZXR1cm4rbmUodCk8K25lKGUpfXZhciBTZDEsUFg9YigoKT0+e0FlKCk7U2QxPUVYfSk7ZnVuY3Rpb24gSVgodCxlKXtyZXR1cm4rbmUodCk9PStuZShlKX12YXIgVGQxLE5YPWIoKCk9PntBZSgpO1RkMT1JWH0pO2Z1bmN0aW9uIEZYKHQsZSxhKXtsZXQgaT1uZXcgRGF0ZSh0LGUsYSk7cmV0dXJuIGkuZ2V0RnVsbFllYXIoKT09PXQmJmkuZ2V0TW9udGgoKT09PWUmJmkuZ2V0RGF0ZSgpPT09YX12YXIgJGQxLE9YPWIoKCk9PnskZDE9Rlh9KTtmdW5jdGlvbiBSWCh0LGUpe3JldHVybiBuZSh0LGU/LmluKS5nZXREYXRlKCk9PT0xfXZhciBFZDEsQlg9YigoKT0+e0FlKCk7RWQxPVJYfSk7ZnVuY3Rpb24gSFgodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0RGF5KCk9PT01fXZhciBOZDEscVg9YigoKT0+e0FlKCk7TmQxPUhYfSk7ZnVuY3Rpb24gVlgodCl7cmV0dXJuK25lKHQpPkRhdGUubm93KCl9dmFyIFJkMSxqWD1iKCgpPT57QWUoKTtSZDE9Vlh9KTtmdW5jdGlvbiB6cCh0LGUpe2xldCBhPUdDdChlKT9uZXcgZSgwKTpMZShlLDApO3JldHVybiBhLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGEuc2V0SG91cnModC5nZXRIb3VycygpLHQuZ2V0TWludXRlcygpLHQuZ2V0U2Vjb25kcygpLHQuZ2V0TWlsbGlzZWNvbmRzKCkpLGF9ZnVuY3Rpb24gR0N0KHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIiYmdC5wcm90b3R5cGU/LmNvbnN0cnVjdG9yPT09dH12YXIgcWQxLF9TPWIoKCk9PnthdCgpO3FkMT16cH0pO3ZhciBZQ3Qsa3AsU3AsQ3AsVFM9YigoKT0+e2F0KCk7X1MoKTtZQ3Q9MTAsa3A9Y2xhc3N7c3ViUHJpb3JpdHk9MDt2YWxpZGF0ZShlLGEpe3JldHVybiEwfX0sU3A9Y2xhc3MgZXh0ZW5kcyBrcHtjb25zdHJ1Y3RvcihlLGEsaSxyLHMpe3N1cGVyKCksdGhpcy52YWx1ZT1lLHRoaXMudmFsaWRhdGVWYWx1ZT1hLHRoaXMuc2V0VmFsdWU9aSx0aGlzLnByaW9yaXR5PXIscyYmKHRoaXMuc3ViUHJpb3JpdHk9cyl9dmFsaWRhdGUoZSxhKXtyZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGUsdGhpcy52YWx1ZSxhKX1zZXQoZSxhLGkpe3JldHVybiB0aGlzLnNldFZhbHVlKGUsYSx0aGlzLnZhbHVlLGkpfX0sQ3A9Y2xhc3MgZXh0ZW5kcyBrcHtwcmlvcml0eT1ZQ3Q7c3ViUHJpb3JpdHk9LTE7Y29uc3RydWN0b3IoZSxhKXtzdXBlcigpLHRoaXMuY29udGV4dD1lfHwoaT0+TGUoYSxpKSl9c2V0KGUsYSl7cmV0dXJuIGEudGltZXN0YW1wSXNTZXQ/ZTpMZShlLHpwKGUsdGhpcy5jb250ZXh0KSl9fX0pO3ZhciBVZSxqdD1iKCgpPT57VFMoKTtVZT1jbGFzc3tydW4oZSxhLGkscil7bGV0IHM9dGhpcy5wYXJzZShlLGEsaSxyKTtyZXR1cm4gcz97c2V0dGVyOm5ldyBTcChzLnZhbHVlLHRoaXMudmFsaWRhdGUsdGhpcy5zZXQsdGhpcy5wcmlvcml0eSx0aGlzLnN1YlByaW9yaXR5KSxyZXN0OnMucmVzdH06bnVsbH12YWxpZGF0ZShlLGEsaSl7cmV0dXJuITB9fX0pO3ZhciBfcCxVWD1iKCgpPT57anQoKTtfcD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTE0MDtwYXJzZShlLGEsaSl7c3dpdGNoKGEpe2Nhc2UiRyI6Y2FzZSJHRyI6Y2FzZSJHR0ciOnJldHVybiBpLmVyYShlLHt3aWR0aDoiYWJicmV2aWF0ZWQifSl8fGkuZXJhKGUse3dpZHRoOiJuYXJyb3cifSk7Y2FzZSJHR0dHRyI6cmV0dXJuIGkuZXJhKGUse3dpZHRoOiJuYXJyb3cifSk7ZGVmYXVsdDpyZXR1cm4gaS5lcmEoZSx7d2lkdGg6IndpZGUifSl8fGkuZXJhKGUse3dpZHRoOiJhYmJyZXZpYXRlZCJ9KXx8aS5lcmEoZSx7d2lkdGg6Im5hcnJvdyJ9KX19c2V0KGUsYSxpKXtyZXR1cm4gYS5lcmE9aSxlLnNldEZ1bGxZZWFyKGksMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiUiIsInUiLCJ0IiwiVCJdfX0pO3ZhciBPdCxuaSxxMj1iKCgpPT57T3Q9e21vbnRoOi9eKDFbMC0yXXwwP1xkKS8sZGF0ZTovXigzWzAtMV18WzAtMl0/XGQpLyxkYXlPZlllYXI6L14oMzZbMC02XXwzWzAtNV1cZHxbMC0yXT9cZD9cZCkvLHdlZWs6L14oNVswLTNdfFswLTRdP1xkKS8saG91cjIzaDovXigyWzAtM118WzAtMV0/XGQpLyxob3VyMjRoOi9eKDJbMC00XXxbMC0xXT9cZCkvLGhvdXIxMWg6L14oMVswLTFdfDA/XGQpLyxob3VyMTJoOi9eKDFbMC0yXXwwP1xkKS8sbWludXRlOi9eWzAtNV0/XGQvLHNlY29uZDovXlswLTVdP1xkLyxzaW5nbGVEaWdpdDovXlxkLyx0d29EaWdpdHM6L15cZHsxLDJ9Lyx0aHJlZURpZ2l0czovXlxkezEsM30vLGZvdXJEaWdpdHM6L15cZHsxLDR9LyxhbnlEaWdpdHNTaWduZWQ6L14tP1xkKy8sc2luZ2xlRGlnaXRTaWduZWQ6L14tP1xkLyx0d29EaWdpdHNTaWduZWQ6L14tP1xkezEsMn0vLHRocmVlRGlnaXRzU2lnbmVkOi9eLT9cZHsxLDN9Lyxmb3VyRGlnaXRzU2lnbmVkOi9eLT9cZHsxLDR9L30sbmk9e2Jhc2ljT3B0aW9uYWxNaW51dGVzOi9eKFsrLV0pKFxkezJ9KShcZHsyfSk/fFovLGJhc2ljOi9eKFsrLV0pKFxkezJ9KShcZHsyfSl8Wi8sYmFzaWNPcHRpb25hbFNlY29uZHM6L14oWystXSkoXGR7Mn0pKFxkezJ9KSgoXGR7Mn0pKT98Wi8sZXh0ZW5kZWQ6L14oWystXSkoXGR7Mn0pOihcZHsyfSl8Wi8sZXh0ZW5kZWRPcHRpb25hbFNlY29uZHM6L14oWystXSkoXGR7Mn0pOihcZHsyfSkoOihcZHsyfSkpP3xaL319KTtmdW5jdGlvbiBuMSh0LGUpe3JldHVybiB0JiZ7dmFsdWU6ZSh0LnZhbHVlKSxyZXN0OnQucmVzdH19ZnVuY3Rpb24gSXQodCxlKXtsZXQgYT1lLm1hdGNoKHQpO3JldHVybiBhP3t2YWx1ZTpwYXJzZUludChhWzBdLDEwKSxyZXN0OmUuc2xpY2UoYVswXS5sZW5ndGgpfTpudWxsfWZ1bmN0aW9uIG9pKHQsZSl7bGV0IGE9ZS5tYXRjaCh0KTtpZighYSlyZXR1cm4gbnVsbDtpZihhWzBdPT09IloiKXJldHVybnt2YWx1ZTowLHJlc3Q6ZS5zbGljZSgxKX07bGV0IGk9YVsxXT09PSIrIj8xOi0xLHI9YVsyXT9wYXJzZUludChhWzJdLDEwKTowLHM9YVszXT9wYXJzZUludChhWzNdLDEwKTowLG49YVs1XT9wYXJzZUludChhWzVdLDEwKTowO3JldHVybnt2YWx1ZTppKihyKklhK3MqTzIrbipPNCkscmVzdDplLnNsaWNlKGFbMF0ubGVuZ3RoKX19ZnVuY3Rpb24gVHAodCl7cmV0dXJuIEl0KE90LmFueURpZ2l0c1NpZ25lZCx0KX1mdW5jdGlvbiBidCh0LGUpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIEl0KE90LnNpbmdsZURpZ2l0LGUpO2Nhc2UgMjpyZXR1cm4gSXQoT3QudHdvRGlnaXRzLGUpO2Nhc2UgMzpyZXR1cm4gSXQoT3QudGhyZWVEaWdpdHMsZSk7Y2FzZSA0OnJldHVybiBJdChPdC5mb3VyRGlnaXRzLGUpO2RlZmF1bHQ6cmV0dXJuIEl0KG5ldyBSZWdFeHAoIl5cXGR7MSwiK3QrIn0iKSxlKX19ZnVuY3Rpb24gcjModCxlKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiBJdChPdC5zaW5nbGVEaWdpdFNpZ25lZCxlKTtjYXNlIDI6cmV0dXJuIEl0KE90LnR3b0RpZ2l0c1NpZ25lZCxlKTtjYXNlIDM6cmV0dXJuIEl0KE90LnRocmVlRGlnaXRzU2lnbmVkLGUpO2Nhc2UgNDpyZXR1cm4gSXQoT3QuZm91ckRpZ2l0c1NpZ25lZCxlKTtkZWZhdWx0OnJldHVybiBJdChuZXcgUmVnRXhwKCJeLT9cXGR7MSwiK3QrIn0iKSxlKX19ZnVuY3Rpb24gczModCl7c3dpdGNoKHQpe2Nhc2UibW9ybmluZyI6cmV0dXJuIDQ7Y2FzZSJldmVuaW5nIjpyZXR1cm4gMTc7Y2FzZSJwbSI6Y2FzZSJub29uIjpjYXNlImFmdGVybm9vbiI6cmV0dXJuIDEyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIExwKHQsZSl7bGV0IGE9ZT4wLGk9YT9lOjEtZSxyO2lmKGk8PTUwKXI9dHx8MTAwO2Vsc2V7bGV0IHM9aSs1MCxuPU1hdGgudHJ1bmMocy8xMDApKjEwMCxvPXQ+PXMlMTAwO3I9dCtuLShvPzEwMDowKX1yZXR1cm4gYT9yOjEtcn1mdW5jdGlvbiAkcCh0KXtyZXR1cm4gdCU0MDA9PT0wfHx0JTQ9PT0wJiZ0JTEwMCE9PTB9dmFyIGUxPWIoKCk9Pnt5dCgpO3EyKCl9KTt2YXIgQXAsV1g9YigoKT0+e2p0KCk7ZTEoKTtBcD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTEzMDtpbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInUiLCJ3IiwiSSIsImkiLCJlIiwiYyIsInQiLCJUIl07cGFyc2UoZSxhLGkpe2xldCByPXM9Pih7eWVhcjpzLGlzVHdvRGlnaXRZZWFyOmE9PT0ieXkifSk7c3dpdGNoKGEpe2Nhc2UieSI6cmV0dXJuIG4xKGJ0KDQsZSkscik7Y2FzZSJ5byI6cmV0dXJuIG4xKGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJ5ZWFyIn0pLHIpO2RlZmF1bHQ6cmV0dXJuIG4xKGJ0KGEubGVuZ3RoLGUpLHIpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhLmlzVHdvRGlnaXRZZWFyfHxhLnllYXI+MH1zZXQoZSxhLGkpe2xldCByPWUuZ2V0RnVsbFllYXIoKTtpZihpLmlzVHdvRGlnaXRZZWFyKXtsZXQgbj1McChpLnllYXIscik7cmV0dXJuIGUuc2V0RnVsbFllYXIobiwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1sZXQgcz0hKCJlcmEiaW4gYSl8fGEuZXJhPT09MT9pLnllYXI6MS1pLnllYXI7cmV0dXJuIGUuc2V0RnVsbFllYXIocywwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX19fSk7dmFyIERwLEdYPWIoKCk9PntWYygpO05pKCk7anQoKTtlMSgpO0RwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTMwO3BhcnNlKGUsYSxpKXtsZXQgcj1zPT4oe3llYXI6cyxpc1R3b0RpZ2l0WWVhcjphPT09IllZIn0pO3N3aXRjaChhKXtjYXNlIlkiOnJldHVybiBuMShidCg0LGUpLHIpO2Nhc2UiWW8iOnJldHVybiBuMShpLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoieWVhciJ9KSxyKTtkZWZhdWx0OnJldHVybiBuMShidChhLmxlbmd0aCxlKSxyKX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYS5pc1R3b0RpZ2l0WWVhcnx8YS55ZWFyPjB9c2V0KGUsYSxpLHIpe2xldCBzPU1uKGUscik7aWYoaS5pc1R3b0RpZ2l0WWVhcil7bGV0IG89THAoaS55ZWFyLHMpO3JldHVybiBlLnNldEZ1bGxZZWFyKG8sMCxyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSksZS5zZXRIb3VycygwLDAsMCwwKSxwMShlLHIpfWxldCBuPSEoImVyYSJpbiBhKXx8YS5lcmE9PT0xP2kueWVhcjoxLWkueWVhcjtyZXR1cm4gZS5zZXRGdWxsWWVhcihuLDAsci5maXJzdFdlZWtDb250YWluc0RhdGUpLGUuc2V0SG91cnMoMCwwLDAsMCkscDEoZSxyKX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ5IiwiUiIsInUiLCJRIiwicSIsIk0iLCJMIiwiSSIsImQiLCJEIiwiaSIsInQiLCJUIl19fSk7dmFyIEVwLFlYPWIoKCk9PntNcigpO2F0KCk7anQoKTtlMSgpO0VwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTMwO3BhcnNlKGUsYSl7cmV0dXJuIGE9PT0iUiI/cjMoNCxlKTpyMyhhLmxlbmd0aCxlKX1zZXQoZSxhLGkpe2xldCByPUxlKGUsMCk7cmV0dXJuIHIuc2V0RnVsbFllYXIoaSwwLDQpLHIuc2V0SG91cnMoMCwwLDAsMCksRzEocil9aW5jb21wYXRpYmxlVG9rZW5zPVsiRyIsInkiLCJZIiwidSIsIlEiLCJxIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIFBwLFpYPWIoKCk9PntqdCgpO2UxKCk7UHA9Y2xhc3MgZXh0ZW5kcyBVZXtwcmlvcml0eT0xMzA7cGFyc2UoZSxhKXtyZXR1cm4gYT09PSJ1Ij9yMyg0LGUpOnIzKGEubGVuZ3RoLGUpfXNldChlLGEsaSl7cmV0dXJuIGUuc2V0RnVsbFllYXIoaSwwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJHIiwieSIsIlkiLCJSIiwidyIsIkkiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfX0pO3ZhciBJcCxYWD1iKCgpPT57anQoKTtlMSgpO0lwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTIwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJRIjpjYXNlIlFRIjpyZXR1cm4gYnQoYS5sZW5ndGgsZSk7Y2FzZSJRbyI6cmV0dXJuIGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UiUVFRIjpyZXR1cm4gaS5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJRUVFRUSI6cmV0dXJuIGkucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGkucXVhcnRlcihlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTR9c2V0KGUsYSxpKXtyZXR1cm4gZS5zZXRNb250aCgoaS0xKSozLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJNIiwiTCIsInciLCJJIiwiZCIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfX0pO3ZhciBOcCxLWD1iKCgpPT57anQoKTtlMSgpO05wPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTIwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJxIjpjYXNlInFxIjpyZXR1cm4gYnQoYS5sZW5ndGgsZSk7Y2FzZSJxbyI6cmV0dXJuIGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJxdWFydGVyIn0pO2Nhc2UicXFxIjpyZXR1cm4gaS5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSk7Y2FzZSJxcXFxcSI6cmV0dXJuIGkucXVhcnRlcihlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGkucXVhcnRlcihlLHt3aWR0aDoid2lkZSIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8aS5xdWFydGVyKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTR9c2V0KGUsYSxpKXtyZXR1cm4gZS5zZXRNb250aCgoaS0xKSozLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsIlEiLCJNIiwiTCIsInciLCJJIiwiZCIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfX0pO3ZhciBGcCxRWD1iKCgpPT57cTIoKTtqdCgpO2UxKCk7RnA9Y2xhc3MgZXh0ZW5kcyBVZXtpbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwiTCIsInciLCJJIiwiRCIsImkiLCJlIiwiYyIsInQiLCJUIl07cHJpb3JpdHk9MTEwO3BhcnNlKGUsYSxpKXtsZXQgcj1zPT5zLTE7c3dpdGNoKGEpe2Nhc2UiTSI6cmV0dXJuIG4xKEl0KE90Lm1vbnRoLGUpLHIpO2Nhc2UiTU0iOnJldHVybiBuMShidCgyLGUpLHIpO2Nhc2UiTW8iOnJldHVybiBuMShpLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoibW9udGgifSkscik7Y2FzZSJNTU0iOnJldHVybiBpLm1vbnRoKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiTU1NTU0iOnJldHVybiBpLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gaS5tb250aChlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5tb250aChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9MTF9c2V0KGUsYSxpKXtyZXR1cm4gZS5zZXRNb250aChpLDEpLGUuc2V0SG91cnMoMCwwLDAsMCksZX19fSk7dmFyIE9wLEpYPWIoKCk9PntxMigpO2p0KCk7ZTEoKTtPcD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTExMDtwYXJzZShlLGEsaSl7bGV0IHI9cz0+cy0xO3N3aXRjaChhKXtjYXNlIkwiOnJldHVybiBuMShJdChPdC5tb250aCxlKSxyKTtjYXNlIkxMIjpyZXR1cm4gbjEoYnQoMixlKSxyKTtjYXNlIkxvIjpyZXR1cm4gbjEoaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6Im1vbnRoIn0pLHIpO2Nhc2UiTExMIjpyZXR1cm4gaS5tb250aChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fGkubW9udGgoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KTtjYXNlIkxMTExMIjpyZXR1cm4gaS5tb250aChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGkubW9udGgoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fGkubW9udGgoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxpLm1vbnRoKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6InN0YW5kYWxvbmUifSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTExfXNldChlLGEsaSl7cmV0dXJuIGUuc2V0TW9udGgoaSwxKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiWSIsIlIiLCJxIiwiUSIsIk0iLCJ3IiwiSSIsIkQiLCJpIiwiZSIsImMiLCJ0IiwiVCJdfX0pO2Z1bmN0aW9uIFJwKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKSxyPWEzKGksYSktZTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpLXIqNyksbmUoaSxhPy5pbil9dmFyIEU3MSxMUz1iKCgpPT57aHAoKTtBZSgpO0U3MT1ScH0pO3ZhciBCcCxlSz1iKCgpPT57TFMoKTtOaSgpO3EyKCk7anQoKTtlMSgpO0JwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTAwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJ3IjpyZXR1cm4gSXQoT3Qud2VlayxlKTtjYXNlIndvIjpyZXR1cm4gaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6IndlZWsifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTUzfXNldChlLGEsaSxyKXtyZXR1cm4gcDEoUnAoZSxpLHIpLHIpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJSIiwidSIsInEiLCJRIiwiTSIsIkwiLCJJIiwiZCIsIkQiLCJpIiwidCIsIlQiXX19KTtmdW5jdGlvbiBIcCh0LGUsYSl7bGV0IGk9bmUodCxhPy5pbikscj10MyhpLGEpLWU7cmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKS1yKjcpLGl9dmFyIFY3MSwkUz1iKCgpPT57ZHAoKTtBZSgpO1Y3MT1IcH0pO3ZhciBxcCx0Sz1iKCgpPT57JFMoKTtNcigpO3EyKCk7anQoKTtlMSgpO3FwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTAwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJJIjpyZXR1cm4gSXQoT3Qud2VlayxlKTtjYXNlIklvIjpyZXR1cm4gaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6IndlZWsifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTEmJmE8PTUzfXNldChlLGEsaSl7cmV0dXJuIEcxKEhwKGUsaSkpfWluY29tcGF0aWJsZVRva2Vucz1bInkiLCJZIiwidSIsInEiLCJRIiwiTSIsIkwiLCJ3IiwiZCIsIkQiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIFpDdCxYQ3QsVnAsYUs9YigoKT0+e3EyKCk7anQoKTtlMSgpO1pDdD1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLFhDdD1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLFZwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9OTA7c3ViUHJpb3JpdHk9MTtwYXJzZShlLGEsaSl7c3dpdGNoKGEpe2Nhc2UiZCI6cmV0dXJuIEl0KE90LmRhdGUsZSk7Y2FzZSJkbyI6cmV0dXJuIGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJkYXRlIn0pO2RlZmF1bHQ6cmV0dXJuIGJ0KGEubGVuZ3RoLGUpfX12YWxpZGF0ZShlLGEpe2xldCBpPWUuZ2V0RnVsbFllYXIoKSxyPSRwKGkpLHM9ZS5nZXRNb250aCgpO3JldHVybiByP2E+PTEmJmE8PVhDdFtzXTphPj0xJiZhPD1aQ3Rbc119c2V0KGUsYSxpKXtyZXR1cm4gZS5zZXREYXRlKGkpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJZIiwiUiIsInEiLCJRIiwidyIsIkkiLCJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTt2YXIganAsaUs9YigoKT0+e3EyKCk7anQoKTtlMSgpO2pwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9OTA7c3VicHJpb3JpdHk9MTtwYXJzZShlLGEsaSl7c3dpdGNoKGEpe2Nhc2UiRCI6Y2FzZSJERCI6cmV0dXJuIEl0KE90LmRheU9mWWVhcixlKTtjYXNlIkRvIjpyZXR1cm4gaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRhdGUifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7bGV0IGk9ZS5nZXRGdWxsWWVhcigpO3JldHVybiAkcChpKT9hPj0xJiZhPD0zNjY6YT49MSYmYTw9MzY1fXNldChlLGEsaSl7cmV0dXJuIGUuc2V0TW9udGgoMCxpKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiWSIsIlIiLCJxIiwiUSIsIk0iLCJMIiwidyIsIkkiLCJkIiwiRSIsImkiLCJlIiwiYyIsInQiLCJUIl19fSk7ZnVuY3Rpb24gU24odCxlLGEpe2xldCBpPUp0KCkscj1hPy53ZWVrU3RhcnRzT24/P2E/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz9pLndlZWtTdGFydHNPbj8/aS5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/MCxzPW5lKHQsYT8uaW4pLG49cy5nZXREYXkoKSxkPShlJTcrNyklNyxjPTctcixwPWU8MHx8ZT42P2UtKG4rYyklNzooZCtjKSU3LShuK2MpJTc7cmV0dXJuIEoxKHMscCxhKX12YXIgbHAxLFljPWIoKCk9PntSMigpO3lyKCk7QWUoKTtscDE9U259KTt2YXIgVXAscks9YigoKT0+e1ljKCk7anQoKTtVcD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTkwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUUiOnJldHVybiBpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiRUVFRUVFIjpyZXR1cm4gaS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9Nn1zZXQoZSxhLGkscil7cmV0dXJuIGU9U24oZSxpLHIpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJEIiwiaSIsImUiLCJjIiwidCIsIlQiXX19KTt2YXIgV3Asc0s9YigoKT0+e1ljKCk7anQoKTtlMSgpO1dwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9OTA7cGFyc2UoZSxhLGkscil7bGV0IHM9bj0+e2xldCBvPU1hdGguZmxvb3IoKG4tMSkvNykqNztyZXR1cm4obityLndlZWtTdGFydHNPbis2KSU3K299O3N3aXRjaChhKXtjYXNlImUiOmNhc2UiZWUiOnJldHVybiBuMShidChhLmxlbmd0aCxlKSxzKTtjYXNlImVvIjpyZXR1cm4gbjEoaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRheSJ9KSxzKTtjYXNlImVlZSI6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiZWVlZWUiOnJldHVybiBpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiZWVlZWVlIjpyZXR1cm4gaS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9Nn1zZXQoZSxhLGkscil7cmV0dXJuIGU9U24oZSxpLHIpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ5IiwiUiIsInUiLCJxIiwiUSIsIk0iLCJMIiwiSSIsImQiLCJEIiwiRSIsImkiLCJjIiwidCIsIlQiXX19KTt2YXIgR3Asbks9YigoKT0+e1ljKCk7anQoKTtlMSgpO0dwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9OTA7cGFyc2UoZSxhLGkscil7bGV0IHM9bj0+e2xldCBvPU1hdGguZmxvb3IoKG4tMSkvNykqNztyZXR1cm4obityLndlZWtTdGFydHNPbis2KSU3K299O3N3aXRjaChhKXtjYXNlImMiOmNhc2UiY2MiOnJldHVybiBuMShidChhLmxlbmd0aCxlKSxzKTtjYXNlImNvIjpyZXR1cm4gbjEoaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImRheSJ9KSxzKTtjYXNlImNjYyI6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8aS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2MiOnJldHVybiBpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2Nhc2UiY2NjY2NjIjpyZXR1cm4gaS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJzdGFuZGFsb25lIn0pO2RlZmF1bHQ6cmV0dXJuIGkuZGF5KGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJzdGFuZGFsb25lIn0pfHxpLmRheShlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6InN0YW5kYWxvbmUifSl8fGkuZGF5KGUse3dpZHRoOiJzaG9ydCIsY29udGV4dDoic3RhbmRhbG9uZSJ9KXx8aS5kYXkoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoic3RhbmRhbG9uZSJ9KX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MCYmYTw9Nn1zZXQoZSxhLGkscil7cmV0dXJuIGU9U24oZSxpLHIpLGUuc2V0SG91cnMoMCwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJ5IiwiUiIsInUiLCJxIiwiUSIsIk0iLCJMIiwiSSIsImQiLCJEIiwiRSIsImkiLCJlIiwidCIsIlQiXX19KTtmdW5jdGlvbiBZcCh0LGUsYSl7bGV0IGk9bmUodCxhPy5pbikscj13cChpLGEpLHM9ZS1yO3JldHVybiBKMShpLHMsYSl9dmFyIGtwMSxBUz1iKCgpPT57eXIoKTtTUygpO0FlKCk7a3AxPVlwfSk7dmFyIFpwLG9LPWIoKCk9PntBUygpO2p0KCk7ZTEoKTtacD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTkwO3BhcnNlKGUsYSxpKXtsZXQgcj1zPT5zPT09MD83OnM7c3dpdGNoKGEpe2Nhc2UiaSI6Y2FzZSJpaSI6cmV0dXJuIGJ0KGEubGVuZ3RoLGUpO2Nhc2UiaW8iOnJldHVybiBpLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiZGF5In0pO2Nhc2UiaWlpIjpyZXR1cm4gbjEoaS5kYXkoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSkscik7Y2FzZSJpaWlpaSI6cmV0dXJuIG4xKGkuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSkscik7Y2FzZSJpaWlpaWkiOnJldHVybiBuMShpLmRheShlLHt3aWR0aDoic2hvcnQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5KGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSkscik7ZGVmYXVsdDpyZXR1cm4gbjEoaS5kYXkoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5KGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXkoZSx7d2lkdGg6InNob3J0Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheShlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pLHIpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0xJiZhPD03fXNldChlLGEsaSl7cmV0dXJuIGU9WXAoZSxpKSxlLnNldEhvdXJzKDAsMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsieSIsIlkiLCJ1IiwicSIsIlEiLCJNIiwiTCIsInciLCJkIiwiRCIsIkUiLCJlIiwiYyIsInQiLCJUIl19fSk7dmFyIFhwLGxLPWIoKCk9PntqdCgpO2UxKCk7WHA9Y2xhc3MgZXh0ZW5kcyBVZXtwcmlvcml0eT04MDtwYXJzZShlLGEsaSl7c3dpdGNoKGEpe2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnJldHVybiBpLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7Y2FzZSJhYWFhYSI6cmV0dXJuIGkuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSk7ZGVmYXVsdDpyZXR1cm4gaS5kYXlQZXJpb2QoZSx7d2lkdGg6IndpZGUiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5UGVyaW9kKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KX19c2V0KGUsYSxpKXtyZXR1cm4gZS5zZXRIb3VycyhzMyhpKSwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJiIiwiQiIsIkgiLCJrIiwidCIsIlQiXX19KTt2YXIgS3AsY0s9YigoKT0+e2p0KCk7ZTEoKTtLcD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTgwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6cmV0dXJuIGkuZGF5UGVyaW9kKGUse3dpZHRoOiJhYmJyZXZpYXRlZCIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtjYXNlImJiYmJiIjpyZXR1cm4gaS5kYXlQZXJpb2QoZSx7d2lkdGg6Im5hcnJvdyIsY29udGV4dDoiZm9ybWF0dGluZyJ9KTtkZWZhdWx0OnJldHVybiBpLmRheVBlcmlvZChlLHt3aWR0aDoid2lkZSIsY29udGV4dDoiZm9ybWF0dGluZyJ9KXx8aS5kYXlQZXJpb2QoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfX1zZXQoZSxhLGkpe3JldHVybiBlLnNldEhvdXJzKHMzKGkpLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bImEiLCJCIiwiSCIsImsiLCJ0IiwiVCJdfX0pO3ZhciBRcCxkSz1iKCgpPT57anQoKTtlMSgpO1FwPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9ODA7cGFyc2UoZSxhLGkpe3N3aXRjaChhKXtjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjpyZXR1cm4gaS5kYXlQZXJpb2QoZSx7d2lkdGg6ImFiYnJldmlhdGVkIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2Nhc2UiQkJCQkIiOnJldHVybiBpLmRheVBlcmlvZChlLHt3aWR0aDoibmFycm93Iixjb250ZXh0OiJmb3JtYXR0aW5nIn0pO2RlZmF1bHQ6cmV0dXJuIGkuZGF5UGVyaW9kKGUse3dpZHRoOiJ3aWRlIixjb250ZXh0OiJmb3JtYXR0aW5nIn0pfHxpLmRheVBlcmlvZChlLHt3aWR0aDoiYWJicmV2aWF0ZWQiLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl8fGkuZGF5UGVyaW9kKGUse3dpZHRoOiJuYXJyb3ciLGNvbnRleHQ6ImZvcm1hdHRpbmcifSl9fXNldChlLGEsaSl7cmV0dXJuIGUuc2V0SG91cnMoczMoaSksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiYSIsImIiLCJ0IiwiVCJdfX0pO3ZhciBKcCxwSz1iKCgpPT57cTIoKTtqdCgpO2UxKCk7SnA9Y2xhc3MgZXh0ZW5kcyBVZXtwcmlvcml0eT03MDtwYXJzZShlLGEsaSl7c3dpdGNoKGEpe2Nhc2UiaCI6cmV0dXJuIEl0KE90LmhvdXIxMmgsZSk7Y2FzZSJobyI6cmV0dXJuIGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJob3VyIn0pO2RlZmF1bHQ6cmV0dXJuIGJ0KGEubGVuZ3RoLGUpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0xJiZhPD0xMn1zZXQoZSxhLGkpe2xldCByPWUuZ2V0SG91cnMoKT49MTI7cmV0dXJuIHImJmk8MTI/ZS5zZXRIb3VycyhpKzEyLDAsMCwwKTohciYmaT09PTEyP2Uuc2V0SG91cnMoMCwwLDAsMCk6ZS5zZXRIb3VycyhpLDAsMCwwKSxlfWluY29tcGF0aWJsZVRva2Vucz1bIkgiLCJLIiwiayIsInQiLCJUIl19fSk7dmFyIGVoLGhLPWIoKCk9PntxMigpO2p0KCk7ZTEoKTtlaD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTcwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJIIjpyZXR1cm4gSXQoT3QuaG91cjIzaCxlKTtjYXNlIkhvIjpyZXR1cm4gaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTIzfXNldChlLGEsaSl7cmV0dXJuIGUuc2V0SG91cnMoaSwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJhIiwiYiIsImgiLCJLIiwiayIsInQiLCJUIl19fSk7dmFyIHRoLHVLPWIoKCk9PntxMigpO2p0KCk7ZTEoKTt0aD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTcwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJLIjpyZXR1cm4gSXQoT3QuaG91cjExaCxlKTtjYXNlIktvIjpyZXR1cm4gaS5vcmRpbmFsTnVtYmVyKGUse3VuaXQ6ImhvdXIifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTExfXNldChlLGEsaSl7cmV0dXJuIGUuZ2V0SG91cnMoKT49MTImJmk8MTI/ZS5zZXRIb3VycyhpKzEyLDAsMCwwKTplLnNldEhvdXJzKGksMCwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsiaCIsIkgiLCJrIiwidCIsIlQiXX19KTt2YXIgYWgsZks9YigoKT0+e3EyKCk7anQoKTtlMSgpO2FoPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9NzA7cGFyc2UoZSxhLGkpe3N3aXRjaChhKXtjYXNlImsiOnJldHVybiBJdChPdC5ob3VyMjRoLGUpO2Nhc2Uia28iOnJldHVybiBpLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoiaG91ciJ9KTtkZWZhdWx0OnJldHVybiBidChhLmxlbmd0aCxlKX19dmFsaWRhdGUoZSxhKXtyZXR1cm4gYT49MSYmYTw9MjR9c2V0KGUsYSxpKXtsZXQgcj1pPD0yND9pJTI0Omk7cmV0dXJuIGUuc2V0SG91cnMociwwLDAsMCksZX1pbmNvbXBhdGlibGVUb2tlbnM9WyJhIiwiYiIsImgiLCJIIiwiSyIsInQiLCJUIl19fSk7dmFyIGloLG1LPWIoKCk9PntxMigpO2p0KCk7ZTEoKTtpaD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTYwO3BhcnNlKGUsYSxpKXtzd2l0Y2goYSl7Y2FzZSJtIjpyZXR1cm4gSXQoT3QubWludXRlLGUpO2Nhc2UibW8iOnJldHVybiBpLm9yZGluYWxOdW1iZXIoZSx7dW5pdDoibWludXRlIn0pO2RlZmF1bHQ6cmV0dXJuIGJ0KGEubGVuZ3RoLGUpfX12YWxpZGF0ZShlLGEpe3JldHVybiBhPj0wJiZhPD01OX1zZXQoZSxhLGkpe3JldHVybiBlLnNldE1pbnV0ZXMoaSwwLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiXX19KTt2YXIgcmgsZ0s9YigoKT0+e3EyKCk7anQoKTtlMSgpO3JoPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9NTA7cGFyc2UoZSxhLGkpe3N3aXRjaChhKXtjYXNlInMiOnJldHVybiBJdChPdC5zZWNvbmQsZSk7Y2FzZSJzbyI6cmV0dXJuIGkub3JkaW5hbE51bWJlcihlLHt1bml0OiJzZWNvbmQifSk7ZGVmYXVsdDpyZXR1cm4gYnQoYS5sZW5ndGgsZSl9fXZhbGlkYXRlKGUsYSl7cmV0dXJuIGE+PTAmJmE8PTU5fXNldChlLGEsaSl7cmV0dXJuIGUuc2V0U2Vjb25kcyhpLDApLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiXX19KTt2YXIgc2gsYks9YigoKT0+e2p0KCk7ZTEoKTtzaD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTMwO3BhcnNlKGUsYSl7bGV0IGk9cj0+TWF0aC50cnVuYyhyKk1hdGgucG93KDEwLC1hLmxlbmd0aCszKSk7cmV0dXJuIG4xKGJ0KGEubGVuZ3RoLGUpLGkpfXNldChlLGEsaSl7cmV0dXJuIGUuc2V0TWlsbGlzZWNvbmRzKGkpLGV9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiXX19KTt2YXIgbmgsdks9YigoKT0+e2F0KCk7bHMoKTtxMigpO2p0KCk7ZTEoKTtuaD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTEwO3BhcnNlKGUsYSl7c3dpdGNoKGEpe2Nhc2UiWCI6cmV0dXJuIG9pKG5pLmJhc2ljT3B0aW9uYWxNaW51dGVzLGUpO2Nhc2UiWFgiOnJldHVybiBvaShuaS5iYXNpYyxlKTtjYXNlIlhYWFgiOnJldHVybiBvaShuaS5iYXNpY09wdGlvbmFsU2Vjb25kcyxlKTtjYXNlIlhYWFhYIjpyZXR1cm4gb2kobmkuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsZSk7ZGVmYXVsdDpyZXR1cm4gb2kobmkuZXh0ZW5kZWQsZSl9fXNldChlLGEsaSl7cmV0dXJuIGEudGltZXN0YW1wSXNTZXQ/ZTpMZShlLGUuZ2V0VGltZSgpLUQxKGUpLWkpfWluY29tcGF0aWJsZVRva2Vucz1bInQiLCJUIiwieCJdfX0pO3ZhciBvaCx5Sz1iKCgpPT57YXQoKTtscygpO3EyKCk7anQoKTtlMSgpO29oPWNsYXNzIGV4dGVuZHMgVWV7cHJpb3JpdHk9MTA7cGFyc2UoZSxhKXtzd2l0Y2goYSl7Y2FzZSJ4IjpyZXR1cm4gb2kobmkuYmFzaWNPcHRpb25hbE1pbnV0ZXMsZSk7Y2FzZSJ4eCI6cmV0dXJuIG9pKG5pLmJhc2ljLGUpO2Nhc2UieHh4eCI6cmV0dXJuIG9pKG5pLmJhc2ljT3B0aW9uYWxTZWNvbmRzLGUpO2Nhc2UieHh4eHgiOnJldHVybiBvaShuaS5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcyxlKTtkZWZhdWx0OnJldHVybiBvaShuaS5leHRlbmRlZCxlKX19c2V0KGUsYSxpKXtyZXR1cm4gYS50aW1lc3RhbXBJc1NldD9lOkxlKGUsZS5nZXRUaW1lKCktRDEoZSktaSl9aW5jb21wYXRpYmxlVG9rZW5zPVsidCIsIlQiLCJYIl19fSk7dmFyIGxoLHhLPWIoKCk9PnthdCgpO2p0KCk7ZTEoKTtsaD1jbGFzcyBleHRlbmRzIFVle3ByaW9yaXR5PTQwO3BhcnNlKGUpe3JldHVybiBUcChlKX1zZXQoZSxhLGkpe3JldHVybltMZShlLGkqMWUzKSx7dGltZXN0YW1wSXNTZXQ6ITB9XX1pbmNvbXBhdGlibGVUb2tlbnM9IioifX0pO3ZhciBjaCx3Sz1iKCgpPT57YXQoKTtqdCgpO2UxKCk7Y2g9Y2xhc3MgZXh0ZW5kcyBVZXtwcmlvcml0eT0yMDtwYXJzZShlKXtyZXR1cm4gVHAoZSl9c2V0KGUsYSxpKXtyZXR1cm5bTGUoZSxpKSx7dGltZXN0YW1wSXNTZXQ6ITB9XX1pbmNvbXBhdGlibGVUb2tlbnM9IioifX0pO3ZhciBkaCxNSz1iKCgpPT57VVgoKTtXWCgpO0dYKCk7WVgoKTtaWCgpO1hYKCk7S1goKTtRWCgpO0pYKCk7ZUsoKTt0SygpO2FLKCk7aUsoKTtySygpO3NLKCk7bksoKTtvSygpO2xLKCk7Y0soKTtkSygpO3BLKCk7aEsoKTt1SygpO2ZLKCk7bUsoKTtnSygpO2JLKCk7dksoKTt5SygpO3hLKCk7d0soKTtkaD17RzpuZXcgX3AseTpuZXcgQXAsWTpuZXcgRHAsUjpuZXcgRXAsdTpuZXcgUHAsUTpuZXcgSXAscTpuZXcgTnAsTTpuZXcgRnAsTDpuZXcgT3AsdzpuZXcgQnAsSTpuZXcgcXAsZDpuZXcgVnAsRDpuZXcganAsRTpuZXcgVXAsZTpuZXcgV3AsYzpuZXcgR3AsaTpuZXcgWnAsYTpuZXcgWHAsYjpuZXcgS3AsQjpuZXcgUXAsaDpuZXcgSnAsSDpuZXcgZWgsSzpuZXcgdGgsazpuZXcgYWgsbTpuZXcgaWgsczpuZXcgcmgsUzpuZXcgc2gsWDpuZXcgbmgseDpuZXcgb2gsdDpuZXcgbGgsVDpuZXcgY2h9fSk7ZnVuY3Rpb24gcGgodCxlLGEsaSl7bGV0IHI9KCk9PkxlKGk/LmlufHxhLE5hTikscz14cCgpLG49aT8ubG9jYWxlPz9zLmxvY2FsZT8/VGEsbz1pPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2k/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/cy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/MSxkPWk/LndlZWtTdGFydHNPbj8/aT8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/P3Mud2Vla1N0YXJ0c09uPz9zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uPz8wO2lmKCFlKXJldHVybiB0P3IoKTpuZShhLGk/LmluKTtsZXQgYz17Zmlyc3RXZWVrQ29udGFpbnNEYXRlOm8sd2Vla1N0YXJ0c09uOmQsbG9jYWxlOm59LHA9W25ldyBDcChpPy5pbixhKV0sbD1lLm1hdGNoKFFDdCkubWFwKG09PntsZXQgeD1tWzBdO2lmKHggaW4gem4pe2xldCBNPXpuW3hdO3JldHVybiBNKG0sbi5mb3JtYXRMb25nKX1yZXR1cm4gbX0pLmpvaW4oIiIpLm1hdGNoKEtDdCksZj1bXTtmb3IobGV0IG0gb2YgbCl7IWk/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyYmZnAobSkmJlVjKG0sZSx0KSwhaT8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyYmdXAobSkmJlVjKG0sZSx0KTtsZXQgeD1tWzBdLE09ZGhbeF07aWYoTSl7bGV0e2luY29tcGF0aWJsZVRva2VuczpTfT1NO2lmKEFycmF5LmlzQXJyYXkoUykpe2xldCBfPWYuZmluZChrPT5TLmluY2x1ZGVzKGsudG9rZW4pfHxrLnRva2VuPT09eCk7aWYoXyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtfLmZ1bGxUb2tlbn1cYCBhbmQgXGAke219XGAgYXQgdGhlIHNhbWUgdGltZWApfWVsc2UgaWYoTS5pbmNvbXBhdGlibGVUb2tlbnM9PT0iKiImJmYubGVuZ3RoPjApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7bX1cYCBhbmQgYW55IG90aGVyIHRva2VuIGF0IHRoZSBzYW1lIHRpbWVgKTtmLnB1c2goe3Rva2VuOngsZnVsbFRva2VuOm19KTtsZXQgRj1NLnJ1bih0LG0sbi5tYXRjaCxjKTtpZighRilyZXR1cm4gcigpO3AucHVzaChGLnNldHRlciksdD1GLnJlc3R9ZWxzZXtpZih4Lm1hdGNoKGFfdCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIit4KyJgIik7aWYobT09PSInJyI/bT0iJyI6eD09PSInIiYmKG09aV90KG0pKSx0LmluZGV4T2YobSk9PT0wKXQ9dC5zbGljZShtLmxlbmd0aCk7ZWxzZSByZXR1cm4gcigpfX1pZih0Lmxlbmd0aD4wJiZ0X3QudGVzdCh0KSlyZXR1cm4gcigpO2xldCBnPXAubWFwKG09Pm0ucHJpb3JpdHkpLnNvcnQoKG0seCk9PngtbSkuZmlsdGVyKChtLHgsTSk9Pk0uaW5kZXhPZihtKT09PXgpLm1hcChtPT5wLmZpbHRlcih4PT54LnByaW9yaXR5PT09bSkuc29ydCgoeCxNKT0+TS5zdWJQcmlvcml0eS14LnN1YlByaW9yaXR5KSkubWFwKG09Pm1bMF0pLHk9bmUoYSxpPy5pbik7aWYoaXNOYU4oK3kpKXJldHVybiByKCk7bGV0IHY9e307Zm9yKGxldCBtIG9mIGcpe2lmKCFtLnZhbGlkYXRlKHksYykpcmV0dXJuIHIoKTtsZXQgeD1tLnNldCh5LHYsYyk7QXJyYXkuaXNBcnJheSh4KT8oeT14WzBdLE9iamVjdC5hc3NpZ24odix4WzFdKSk6eT14fXJldHVybiB5fWZ1bmN0aW9uIGlfdCh0KXtyZXR1cm4gdC5tYXRjaChKQ3QpWzFdLnJlcGxhY2UoZV90LCInIil9dmFyIEtDdCxRQ3QsSkN0LGVfdCx0X3QsYV90LHY5MSxEUz1iKCgpPT57Wm8oKTtnUygpO2JTKCk7YXQoKTtrUygpO0FlKCk7VFMoKTtNSygpO0tDdD0vW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLFFDdD0vUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZyxKQ3Q9L14nKFteXSo/KSc/JC8sZV90PS8nJy9nLHRfdD0vXFMvLGFfdD0vW2EtekEtWl0vO3Y5MT1waH0pO2Z1bmN0aW9uIHpLKHQsZSxhKXtyZXR1cm4gazIocGgodCxlLG5ldyBEYXRlLGEpKX12YXIgTTkxLGtLPWIoKCk9PntkcygpO0RTKCk7TTkxPXpLfSk7ZnVuY3Rpb24gU0sodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0RGF5KCk9PT0xfXZhciBTOTEsQ0s9YigoKT0+e0FlKCk7UzkxPVNLfSk7ZnVuY3Rpb24gX0sodCl7cmV0dXJuK25lKHQpPERhdGUubm93KCl9dmFyIFQ5MSxUSz1iKCgpPT57QWUoKTtUOTE9X0t9KTtmdW5jdGlvbiBaYyh0LGUpe2xldCBhPW5lKHQsZT8uaW4pO3JldHVybiBhLnNldE1pbnV0ZXMoMCwwLDApLGF9dmFyIEE5MSxFUz1iKCgpPT57QWUoKTtBOTE9WmN9KTtmdW5jdGlvbiBoaCh0LGUsYSl7bGV0W2kscl09SmUoYT8uaW4sdCxlKTtyZXR1cm4rWmMoaSk9PStaYyhyKX12YXIgSTkxLFBTPWIoKCk9PntzMSgpO0VTKCk7STkxPWhofSk7ZnVuY3Rpb24gbjModCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuK3AxKGksYSk9PStwMShyLGEpfXZhciBSOTEsdWg9YigoKT0+e3MxKCk7TmkoKTtSOTE9bjN9KTtmdW5jdGlvbiBmaCh0LGUsYSl7cmV0dXJuIG4zKHQsZSx7Li4uYSx3ZWVrU3RhcnRzT246MX0pfXZhciBxOTEsSVM9YigoKT0+e3VoKCk7cTkxPWZofSk7ZnVuY3Rpb24gTEsodCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuK05hKGkpPT0rTmEocil9dmFyIFc5MSwkSz1iKCgpPT57cTQoKTtzMSgpO1c5MT1MS30pO2Z1bmN0aW9uIFhjKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7cmV0dXJuIGEuc2V0U2Vjb25kcygwLDApLGF9dmFyIFo5MSxOUz1iKCgpPT57QWUoKTtaOTE9WGN9KTtmdW5jdGlvbiBtaCh0LGUpe3JldHVybitYYyh0KT09K1hjKGUpfXZhciBROTEsRlM9YigoKT0+e05TKCk7UTkxPW1ofSk7ZnVuY3Rpb24gZ2godCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuIGkuZ2V0RnVsbFllYXIoKT09PXIuZ2V0RnVsbFllYXIoKSYmaS5nZXRNb250aCgpPT09ci5nZXRNb250aCgpfXZhciB0dTEsT1M9YigoKT0+e3MxKCk7dHUxPWdofSk7ZnVuY3Rpb24gYmgodCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuK19yKGkpPT0rX3Iocil9dmFyIHN1MSxSUz1iKCgpPT57czEoKTtpcCgpO3N1MT1iaH0pO2Z1bmN0aW9uIEtjKHQsZSl7bGV0IGE9bmUodCxlPy5pbik7cmV0dXJuIGEuc2V0TWlsbGlzZWNvbmRzKDApLGF9dmFyIGx1MSxCUz1iKCgpPT57QWUoKTtsdTE9S2N9KTtmdW5jdGlvbiB2aCh0LGUpe3JldHVybitLYyh0KT09K0tjKGUpfXZhciBwdTEsSFM9YigoKT0+e0JTKCk7cHUxPXZofSk7ZnVuY3Rpb24geWgodCxlLGEpe2xldFtpLHJdPUplKGE/LmluLHQsZSk7cmV0dXJuIGkuZ2V0RnVsbFllYXIoKT09PXIuZ2V0RnVsbFllYXIoKX12YXIgZnUxLHFTPWIoKCk9PntzMSgpO2Z1MT15aH0pO2Z1bmN0aW9uIEFLKHQsZSl7cmV0dXJuIGhoKG5lKHQsZT8uaW4pLF90KGU/LmlufHx0KSl9dmFyIHl1MSxESz1iKCgpPT57ZTIoKTtQUygpO0FlKCk7eXUxPUFLfSk7ZnVuY3Rpb24gRUsodCxlKXtyZXR1cm4gZmgoTGUoZT8uaW58fHQsdCksX3QoZT8uaW58fHQpKX12YXIga3UxLFBLPWIoKCk9PnthdCgpO2UyKCk7SVMoKTtrdTE9RUt9KTtmdW5jdGlvbiBJSyh0KXtyZXR1cm4gbWgodCxfdCh0KSl9dmFyIFR1MSxOSz1iKCgpPT57ZTIoKTtGUygpO1R1MT1JS30pO2Z1bmN0aW9uIEZLKHQsZSl7cmV0dXJuIGdoKExlKGU/LmlufHx0LHQpLF90KGU/LmlufHx0KSl9dmFyIEV1MSxPSz1iKCgpPT57YXQoKTtlMigpO09TKCk7RXUxPUZLfSk7ZnVuY3Rpb24gUksodCxlKXtyZXR1cm4gYmgoTGUoZT8uaW58fHQsdCksX3QoZT8uaW58fHQpKX12YXIgT3UxLEJLPWIoKCk9PnthdCgpO2UyKCk7UlMoKTtPdTE9Ukt9KTtmdW5jdGlvbiBISyh0KXtyZXR1cm4gdmgodCxfdCh0KSl9dmFyIHF1MSxxSz1iKCgpPT57ZTIoKTtIUygpO3F1MT1IS30pO2Z1bmN0aW9uIFZLKHQsZSl7cmV0dXJuIG4zKExlKGU/LmlufHx0LHQpLF90KGU/LmlufHx0KSxlKX12YXIgR3UxLGpLPWIoKCk9PnthdCgpO2UyKCk7dWgoKTtHdTE9Vkt9KTtmdW5jdGlvbiBVSyh0LGUpe3JldHVybiB5aChMZShlPy5pbnx8dCx0KSxfdChlPy5pbnx8dCkpfXZhciBRdTEsV0s9YigoKT0+e2F0KCk7ZTIoKTtxUygpO1F1MT1VS30pO2Z1bmN0aW9uIEdLKHQsZSl7cmV0dXJuIG5lKHQsZT8uaW4pLmdldERheSgpPT09NH12YXIgdGYxLFlLPWIoKCk9PntBZSgpO3RmMT1HS30pO2Z1bmN0aW9uIFpLKHQsZSl7cmV0dXJuIGtyKExlKGU/LmlufHx0LHQpLF90KGU/LmlufHx0KSl9dmFyIG5mMSxYSz1iKCgpPT57YXQoKTtlMigpO1U0KCk7bmYxPVpLfSk7ZnVuY3Rpb24gS0sodCxlKXtyZXR1cm4ga3IodCxKMShfdChlPy5pbnx8dCksMSksZSl9dmFyIHBmMSxRSz1iKCgpPT57eXIoKTtlMigpO1U0KCk7cGYxPUtLfSk7ZnVuY3Rpb24gSksodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0RGF5KCk9PT0yfXZhciBmZjEsZVE9YigoKT0+e0FlKCk7ZmYxPUpLfSk7ZnVuY3Rpb24gdFEodCxlKXtyZXR1cm4gbmUodCxlPy5pbikuZ2V0RGF5KCk9PT0zfXZhciBiZjEsYVE9YigoKT0+e0FlKCk7YmYxPXRRfSk7ZnVuY3Rpb24gaVEodCxlLGEpe2xldCBpPStuZSh0LGE/LmluKSxbcixzXT1bK25lKGUuc3RhcnQsYT8uaW4pLCtuZShlLmVuZCxhPy5pbildLnNvcnQoKG4sbyk9Pm4tbyk7cmV0dXJuIGk+PXImJmk8PXN9dmFyIHhmMSxyUT1iKCgpPT57QWUoKTt4ZjE9aVF9KTtmdW5jdGlvbiBDbih0LGUsYSl7cmV0dXJuIEoxKHQsLWUsYSl9dmFyIHpmMSxRYz1iKCgpPT57eXIoKTt6ZjE9Q259KTtmdW5jdGlvbiBzUSh0LGUpe3JldHVybiBrcihMZShlPy5pbnx8dCx0KSxDbihfdChlPy5pbnx8dCksMSkpfXZhciBMZjEsblE9YigoKT0+e2F0KCk7ZTIoKTtVNCgpO1FjKCk7TGYxPXNRfSk7ZnVuY3Rpb24gb1EodCxlKXtsZXQgYT1uZSh0LGU/LmluKSxpPWEuZ2V0RnVsbFllYXIoKSxyPTkrTWF0aC5mbG9vcihpLzEwKSoxMDtyZXR1cm4gYS5zZXRGdWxsWWVhcihyKzEsMCwwKSxhLnNldEhvdXJzKDAsMCwwLDApLG5lKGEsZT8uaW4pfXZhciBEZjEsbFE9YigoKT0+e0FlKCk7RGYxPW9RfSk7ZnVuY3Rpb24geGgodCxlKXtsZXQgYT1KdCgpLGk9ZT8ud2Vla1N0YXJ0c09uPz9lPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbj8/YS53ZWVrU3RhcnRzT24/P2EubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24/PzAscj1uZSh0LGU/LmluKSxzPXIuZ2V0RGF5KCksbj0oczxpPy03OjApKzYtKHMtaSk7cmV0dXJuIHIuc2V0SG91cnMoMCwwLDAsMCksci5zZXREYXRlKHIuZ2V0RGF0ZSgpK24pLHJ9dmFyIE5mMSxWUz1iKCgpPT57UjIoKTtBZSgpO05mMT14aH0pO2Z1bmN0aW9uIGNRKHQsZSl7cmV0dXJuIHhoKHQsey4uLmUsd2Vla1N0YXJ0c09uOjF9KX12YXIgUmYxLGRRPWIoKCk9PntWUygpO1JmMT1jUX0pO2Z1bmN0aW9uIHBRKHQsZSl7bGV0IGE9b2EodCxlKSxpPUxlKGU/LmlufHx0LDApO2kuc2V0RnVsbFllYXIoYSsxLDAsNCksaS5zZXRIb3VycygwLDAsMCwwKTtsZXQgcj1HMShpLGUpO3JldHVybiByLnNldERhdGUoci5nZXREYXRlKCktMSkscn12YXIgamYxLGhRPWIoKCk9PnthdCgpO2JuKCk7TXIoKTtqZjE9cFF9KTtmdW5jdGlvbiB1USh0LGUpe2xldCBhPW5lKHQsZT8uaW4pLGk9YS5nZXRNb250aCgpLHI9aS1pJTMrMztyZXR1cm4gYS5zZXRNb250aChyLDApLGEuc2V0SG91cnMoMCwwLDAsMCksYX12YXIgR2YxLGZRPWIoKCk9PntBZSgpO0dmMT11UX0pO2Z1bmN0aW9uIG1RKHQsZSl7bGV0IGE9bmUodCxlPy5pbiksaT1hLmdldEZ1bGxZZWFyKCk7cmV0dXJuIGEuc2V0RnVsbFllYXIoaSsxLDAsMCksYS5zZXRIb3VycygwLDAsMCwwKSxhfXZhciBYZjEsZ1E9YigoKT0+e0FlKCk7WGYxPW1RfSk7ZnVuY3Rpb24gYlEodCxlKXtsZXQgYT1uZSh0KTtpZighazIoYSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO2xldCBpPWUubWF0Y2gocl90KTtyZXR1cm4gaT9pLm1hcChzPT57aWYocz09PSInJyIpcmV0dXJuIiciO2xldCBuPXNbMF07aWYobj09PSInIilyZXR1cm4gbF90KHMpO2xldCBvPUZhW25dO2lmKG8pcmV0dXJuIG8oYSxzKTtpZihuLm1hdGNoKG9fdCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIituKyJgIik7cmV0dXJuIHN9KS5qb2luKCIiKToiIn1mdW5jdGlvbiBsX3QodCl7bGV0IGU9dC5tYXRjaChzX3QpO3JldHVybiBlP2VbMV0ucmVwbGFjZShuX3QsIiciKTp0fXZhciByX3Qsc190LG5fdCxvX3QsdG0xLHZRPWIoKCk9PnttUygpO2RzKCk7QWUoKTtyX3Q9LyhcdylcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2csc190PS9eJyhbXl0qPyknPyQvLG5fdD0vJycvZyxvX3Q9L1thLXpBLVpdLzt0bTE9YlF9KTtmdW5jdGlvbiB5USh7eWVhcnM6dCxtb250aHM6ZSx3ZWVrczphLGRheXM6aSxob3VyczpyLG1pbnV0ZXM6cyxzZWNvbmRzOm59KXtsZXQgbz0wO3QmJihvKz10KjM2NS4yNDI1KSxlJiYobys9ZSooMzY1LjI0MjUvMTIpKSxhJiYobys9YSo3KSxpJiYobys9aSk7bGV0IGQ9byoyNCo2MCo2MDtyZXR1cm4gciYmKGQrPXIqNjAqNjApLHMmJihkKz1zKjYwKSxuJiYoZCs9biksTWF0aC50cnVuYyhkKjFlMyl9dmFyIHJtMSx4UT1iKCgpPT57eXQoKTtybTE9eVF9KTtmdW5jdGlvbiB3USh0KXtsZXQgZT10L0lhO3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBvbTEsTVE9YigoKT0+e3l0KCk7b20xPXdRfSk7ZnVuY3Rpb24gelEodCl7bGV0IGU9dC9PMjtyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgZG0xLGtRPWIoKCk9Pnt5dCgpO2RtMT16UX0pO2Z1bmN0aW9uIFNRKHQpe2xldCBlPXQvTzQ7cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIHVtMSxDUT1iKCgpPT57eXQoKTt1bTE9U1F9KTtmdW5jdGlvbiBfUSh0KXtsZXQgZT10L1M3O3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBnbTEsVFE9YigoKT0+e3l0KCk7Z20xPV9RfSk7ZnVuY3Rpb24gTFEodCl7cmV0dXJuIE1hdGgudHJ1bmModCpPMil9dmFyIHltMSwkUT1iKCgpPT57eXQoKTt5bTE9TFF9KTtmdW5jdGlvbiBBUSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KkI0KX12YXIgTW0xLERRPWIoKCk9Pnt5dCgpO01tMT1BUX0pO2Z1bmN0aW9uIEVRKHQpe2xldCBlPXQvQzc7cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIFNtMSxQUT1iKCgpPT57eXQoKTtTbTE9RVF9KTtmdW5jdGlvbiBJUSh0KXtsZXQgZT10L183O3JldHVybiBNYXRoLnRydW5jKGUpfXZhciBUbTEsTlE9YigoKT0+e3l0KCk7VG0xPUlRfSk7ZnVuY3Rpb24gVjIodCxlLGEpe2xldCBpPWUta24odCxhKTtyZXR1cm4gaTw9MCYmKGkrPTcpLEoxKHQsaSxhKX12YXIgRG0xLGhzPWIoKCk9Pnt5cigpO0djKCk7RG0xPVYyfSk7ZnVuY3Rpb24gRlEodCxlKXtyZXR1cm4gVjIodCw1LGUpfXZhciBJbTEsT1E9YigoKT0+e2hzKCk7SW0xPUZRfSk7ZnVuY3Rpb24gUlEodCxlKXtyZXR1cm4gVjIodCwxLGUpfXZhciBPbTEsQlE9YigoKT0+e2hzKCk7T20xPVJRfSk7ZnVuY3Rpb24gSFEodCxlKXtyZXR1cm4gVjIodCw2LGUpfXZhciBIbTEscVE9YigoKT0+e2hzKCk7SG0xPUhRfSk7ZnVuY3Rpb24gVlEodCxlKXtyZXR1cm4gVjIodCwwLGUpfXZhciBqbTEsalE9YigoKT0+e2hzKCk7am0xPVZRfSk7ZnVuY3Rpb24gVVEodCxlKXtyZXR1cm4gVjIodCw0LGUpfXZhciBHbTEsV1E9YigoKT0+e2hzKCk7R20xPVVRfSk7ZnVuY3Rpb24gR1EodCxlKXtyZXR1cm4gVjIodCwyLGUpfXZhciBYbTEsWVE9YigoKT0+e2hzKCk7WG0xPUdRfSk7ZnVuY3Rpb24gWlEodCxlKXtyZXR1cm4gVjIodCwzLGUpfXZhciBKbTEsWFE9YigoKT0+e2hzKCk7Sm0xPVpRfSk7ZnVuY3Rpb24gUVEodCxlKXtsZXQgYT0oKT0+TGUoZT8uaW4sTmFOKSxpPWU/LmFkZGl0aW9uYWxEaWdpdHM/PzIscj1oX3QodCkscztpZihyLmRhdGUpe2xldCBjPXVfdChyLmRhdGUsaSk7cz1mX3QoYy5yZXN0RGF0ZVN0cmluZyxjLnllYXIpfWlmKCFzfHxpc05hTigrcykpcmV0dXJuIGEoKTtsZXQgbj0rcyxvPTAsZDtpZihyLnRpbWUmJihvPW1fdChyLnRpbWUpLGlzTmFOKG8pKSlyZXR1cm4gYSgpO2lmKHIudGltZXpvbmUpe2lmKGQ9Z190KHIudGltZXpvbmUpLGlzTmFOKGQpKXJldHVybiBhKCl9ZWxzZXtsZXQgYz1uZXcgRGF0ZShuK28pLHA9bmUoMCxlPy5pbik7cmV0dXJuIHAuc2V0RnVsbFllYXIoYy5nZXRVVENGdWxsWWVhcigpLGMuZ2V0VVRDTW9udGgoKSxjLmdldFVUQ0RhdGUoKSkscC5zZXRIb3VycyhjLmdldFVUQ0hvdXJzKCksYy5nZXRVVENNaW51dGVzKCksYy5nZXRVVENTZWNvbmRzKCksYy5nZXRVVENNaWxsaXNlY29uZHMoKSkscH1yZXR1cm4gbmUobitvK2QsZT8uaW4pfWZ1bmN0aW9uIGhfdCh0KXtsZXQgZT17fSxhPXQuc3BsaXQod2guZGF0ZVRpbWVEZWxpbWl0ZXIpLGk7aWYoYS5sZW5ndGg+MilyZXR1cm4gZTtpZigvOi8udGVzdChhWzBdKT9pPWFbMF06KGUuZGF0ZT1hWzBdLGk9YVsxXSx3aC50aW1lWm9uZURlbGltaXRlci50ZXN0KGUuZGF0ZSkmJihlLmRhdGU9dC5zcGxpdCh3aC50aW1lWm9uZURlbGltaXRlcilbMF0saT10LnN1YnN0cihlLmRhdGUubGVuZ3RoLHQubGVuZ3RoKSkpLGkpe2xldCByPXdoLnRpbWV6b25lLmV4ZWMoaSk7cj8oZS50aW1lPWkucmVwbGFjZShyWzFdLCIiKSxlLnRpbWV6b25lPXJbMV0pOmUudGltZT1pfXJldHVybiBlfWZ1bmN0aW9uIHVfdCh0LGUpe2xldCBhPW5ldyBSZWdFeHAoIl4oPzooXFxkezR9fFsrLV1cXGR7IisoNCtlKSsifSl8KFxcZHsyfXxbKy1dXFxkeyIrKDIrZSkrIn0pJCkiKSxpPXQubWF0Y2goYSk7aWYoIWkpcmV0dXJue3llYXI6TmFOLHJlc3REYXRlU3RyaW5nOiIifTtsZXQgcj1pWzFdP3BhcnNlSW50KGlbMV0pOm51bGwscz1pWzJdP3BhcnNlSW50KGlbMl0pOm51bGw7cmV0dXJue3llYXI6cz09PW51bGw/cjpzKjEwMCxyZXN0RGF0ZVN0cmluZzp0LnNsaWNlKChpWzFdfHxpWzJdKS5sZW5ndGgpfX1mdW5jdGlvbiBmX3QodCxlKXtpZihlPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtsZXQgYT10Lm1hdGNoKGNfdCk7aWYoIWEpcmV0dXJuIG5ldyBEYXRlKE5hTik7bGV0IGk9ISFhWzRdLHI9SmMoYVsxXSkscz1KYyhhWzJdKS0xLG49SmMoYVszXSksbz1KYyhhWzRdKSxkPUpjKGFbNV0pLTE7aWYoaSlyZXR1cm4gd190KGUsbyxkKT9iX3QoZSxvLGQpOm5ldyBEYXRlKE5hTik7e2xldCBjPW5ldyBEYXRlKDApO3JldHVybiF5X3QoZSxzLG4pfHwheF90KGUscik/bmV3IERhdGUoTmFOKTooYy5zZXRVVENGdWxsWWVhcihlLHMsTWF0aC5tYXgocixuKSksYyl9fWZ1bmN0aW9uIEpjKHQpe3JldHVybiB0P3BhcnNlSW50KHQpOjF9ZnVuY3Rpb24gbV90KHQpe2xldCBlPXQubWF0Y2goZF90KTtpZighZSlyZXR1cm4gTmFOO2xldCBhPWpTKGVbMV0pLGk9alMoZVsyXSkscj1qUyhlWzNdKTtyZXR1cm4gTV90KGEsaSxyKT9hKklhK2kqTzIrcioxZTM6TmFOfWZ1bmN0aW9uIGpTKHQpe3JldHVybiB0JiZwYXJzZUZsb2F0KHQucmVwbGFjZSgiLCIsIi4iKSl8fDB9ZnVuY3Rpb24gZ190KHQpe2lmKHQ9PT0iWiIpcmV0dXJuIDA7bGV0IGU9dC5tYXRjaChwX3QpO2lmKCFlKXJldHVybiAwO2xldCBhPWVbMV09PT0iKyI/LTE6MSxpPXBhcnNlSW50KGVbMl0pLHI9ZVszXSYmcGFyc2VJbnQoZVszXSl8fDA7cmV0dXJuIHpfdChpLHIpP2EqKGkqSWErcipPMik6TmFOfWZ1bmN0aW9uIGJfdCh0LGUsYSl7bGV0IGk9bmV3IERhdGUoMCk7aS5zZXRVVENGdWxsWWVhcih0LDAsNCk7bGV0IHI9aS5nZXRVVENEYXkoKXx8NyxzPShlLTEpKjcrYSsxLXI7cmV0dXJuIGkuc2V0VVRDRGF0ZShpLmdldFVUQ0RhdGUoKStzKSxpfWZ1bmN0aW9uIEtRKHQpe3JldHVybiB0JTQwMD09PTB8fHQlND09PTAmJnQlMTAwIT09MH1mdW5jdGlvbiB5X3QodCxlLGEpe3JldHVybiBlPj0wJiZlPD0xMSYmYT49MSYmYTw9KHZfdFtlXXx8KEtRKHQpPzI5OjI4KSl9ZnVuY3Rpb24geF90KHQsZSl7cmV0dXJuIGU+PTEmJmU8PShLUSh0KT8zNjY6MzY1KX1mdW5jdGlvbiB3X3QodCxlLGEpe3JldHVybiBlPj0xJiZlPD01MyYmYT49MCYmYTw9Nn1mdW5jdGlvbiBNX3QodCxlLGEpe3JldHVybiB0PT09MjQ/ZT09PTAmJmE9PT0wOmE+PTAmJmE8NjAmJmU+PTAmJmU8NjAmJnQ+PTAmJnQ8MjV9ZnVuY3Rpb24gel90KHQsZSl7cmV0dXJuIGU+PTAmJmU8PTU5fXZhciB3aCxjX3QsZF90LHBfdCx2X3QscmcxLEpRPWIoKCk9Pnt5dCgpO2F0KCk7QWUoKTt3aD17ZGF0ZVRpbWVEZWxpbWl0ZXI6L1tUIF0vLHRpbWVab25lRGVsaW1pdGVyOi9bWiBdL2ksdGltZXpvbmU6LyhbWistXS4qKSQvfSxjX3Q9L14tPyg/OihcZHszfSl8KFxkezJ9KSg/Oi0/KFxkezJ9KSk/fFcoXGR7Mn0pKD86LT8oXGR7MX0pKT98KSQvLGRfdD0vXihcZHsyfSg/OlsuLF1cZCopPykoPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyg/Ojo/KFxkezJ9KD86Wy4sXVxkKik/KSk/JC8scF90PS9eKFsrLV0pKFxkezJ9KSg/Ojo/KFxkezJ9KSk/JC87dl90PVszMSxudWxsLDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtyZzE9UVF9KTtmdW5jdGlvbiBlSih0LGUpe2xldCBhPXQubWF0Y2goLyhcZHs0fSktKFxkezJ9KS0oXGR7Mn0pW1QgXShcZHsyfSk6KFxkezJ9KTooXGR7Mn0pKD86XC4oXGR7MCw3fSkpPyg/Olp8KC4pKFxkezJ9KTo/KFxkezJ9KT8pPy8pO3JldHVybiBhP25lKERhdGUuVVRDKCthWzFdLCthWzJdLTEsK2FbM10sK2FbNF0tKCthWzldfHwwKSooYVs4XT09Ii0iPy0xOjEpLCthWzVdLSgrYVsxMF18fDApKihhWzhdPT0iLSI/LTE6MSksK2FbNl0sKygoYVs3XXx8IjAiKSsiMDAiKS5zdWJzdHJpbmcoMCwzKSksZT8uaW4pOm5lKE5hTixlPy5pbil9dmFyIG9nMSx0Sj1iKCgpPT57QWUoKTtvZzE9ZUp9KTtmdW5jdGlvbiBqMih0LGUsYSl7bGV0IGk9a24odCxhKS1lO3JldHVybiBpPD0wJiYoaSs9NyksQ24odCxpLGEpfXZhciBwZzEsdXM9YigoKT0+e0djKCk7UWMoKTtwZzE9ajJ9KTtmdW5jdGlvbiBhSih0LGUpe3JldHVybiBqMih0LDUsZSl9dmFyIGZnMSxpSj1iKCgpPT57dXMoKTtmZzE9YUp9KTtmdW5jdGlvbiBySih0LGUpe3JldHVybiBqMih0LDEsZSl9dmFyIGJnMSxzSj1iKCgpPT57dXMoKTtiZzE9ckp9KTtmdW5jdGlvbiBuSih0LGUpe3JldHVybiBqMih0LDYsZSl9dmFyIHhnMSxvSj1iKCgpPT57dXMoKTt4ZzE9bkp9KTtmdW5jdGlvbiBsSih0LGUpe3JldHVybiBqMih0LDAsZSl9dmFyIHpnMSxjSj1iKCgpPT57dXMoKTt6ZzE9bEp9KTtmdW5jdGlvbiBkSih0LGUpe3JldHVybiBqMih0LDQsZSl9dmFyIENnMSxwSj1iKCgpPT57dXMoKTtDZzE9ZEp9KTtmdW5jdGlvbiBoSih0LGUpe3JldHVybiBqMih0LDIsZSl9dmFyIExnMSx1Sj1iKCgpPT57dXMoKTtMZzE9aEp9KTtmdW5jdGlvbiBmSih0LGUpe3JldHVybiBqMih0LDMsZSl9dmFyIERnMSxtSj1iKCgpPT57dXMoKTtEZzE9Zkp9KTtmdW5jdGlvbiBnSih0KXtyZXR1cm4gTWF0aC50cnVuYyh0KkM3KX12YXIgSWcxLGJKPWIoKCk9Pnt5dCgpO0lnMT1nSn0pO2Z1bmN0aW9uIHZKKHQpe2xldCBlPXQvVDc7cmV0dXJuIE1hdGgudHJ1bmMoZSl9dmFyIE9nMSx5Sj1iKCgpPT57eXQoKTtPZzE9dkp9KTtmdW5jdGlvbiB4Sih0LGUpe2xldCBhPWU/Lm5lYXJlc3RUbz8/MTtpZihhPDF8fGE+MTIpcmV0dXJuIExlKGU/LmlufHx0LE5hTik7bGV0IGk9bmUodCxlPy5pbikscj1pLmdldE1pbnV0ZXMoKS82MCxzPWkuZ2V0U2Vjb25kcygpLzYwLzYwLG49aS5nZXRNaWxsaXNlY29uZHMoKS8xZTMvNjAvNjAsbz1pLmdldEhvdXJzKCkrcitzK24sZD1lPy5yb3VuZGluZ01ldGhvZD8/InJvdW5kIixwPUgyKGQpKG8vYSkqYTtyZXR1cm4gaS5zZXRIb3VycyhwLDAsMCwwKSxpfXZhciBWZzEsd0o9YigoKT0+e3BzKCk7YXQoKTtBZSgpO1ZnMT14Sn0pO2Z1bmN0aW9uIE1KKHQsZSl7bGV0IGE9ZT8ubmVhcmVzdFRvPz8xO2lmKGE8MXx8YT4zMClyZXR1cm4gTGUodCxOYU4pO2xldCBpPW5lKHQsZT8uaW4pLHI9aS5nZXRTZWNvbmRzKCkvNjAscz1pLmdldE1pbGxpc2Vjb25kcygpLzFlMy82MCxuPWkuZ2V0TWludXRlcygpK3IrcyxvPWU/LnJvdW5kaW5nTWV0aG9kPz8icm91bmQiLGM9SDIobykobi9hKSphO3JldHVybiBpLnNldE1pbnV0ZXMoYywwLDApLGl9dmFyIFlnMSx6Sj1iKCgpPT57cHMoKTthdCgpO0FlKCk7WWcxPU1KfSk7ZnVuY3Rpb24ga0oodCl7bGV0IGU9dC9WbztyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgS2cxLFNKPWIoKCk9Pnt5dCgpO0tnMT1rSn0pO2Z1bmN0aW9uIENKKHQpe3JldHVybiB0Kk80fXZhciBlYjEsX0o9YigoKT0+e3l0KCk7ZWIxPUNKfSk7ZnVuY3Rpb24gVEoodCl7bGV0IGU9dC9CNDtyZXR1cm4gTWF0aC50cnVuYyhlKX12YXIgaWIxLExKPWIoKCk9Pnt5dCgpO2liMT1USn0pO2Z1bmN0aW9uIG8zKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKSxyPWkuZ2V0RnVsbFllYXIoKSxzPWkuZ2V0RGF0ZSgpLG49TGUoYT8uaW58fHQsMCk7bi5zZXRGdWxsWWVhcihyLGUsMTUpLG4uc2V0SG91cnMoMCwwLDAsMCk7bGV0IG89dnAobik7cmV0dXJuIGkuc2V0TW9udGgoZSxNYXRoLm1pbihzLG8pKSxpfXZhciBsYjEsTWg9YigoKT0+e2F0KCk7TVMoKTtBZSgpO2xiMT1vM30pO2Z1bmN0aW9uICRKKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKTtyZXR1cm4gaXNOYU4oK2kpP0xlKGE/LmlufHx0LE5hTik6KGUueWVhciE9bnVsbCYmaS5zZXRGdWxsWWVhcihlLnllYXIpLGUubW9udGghPW51bGwmJihpPW8zKGksZS5tb250aCkpLGUuZGF0ZSE9bnVsbCYmaS5zZXREYXRlKGUuZGF0ZSksZS5ob3VycyE9bnVsbCYmaS5zZXRIb3VycyhlLmhvdXJzKSxlLm1pbnV0ZXMhPW51bGwmJmkuc2V0TWludXRlcyhlLm1pbnV0ZXMpLGUuc2Vjb25kcyE9bnVsbCYmaS5zZXRTZWNvbmRzKGUuc2Vjb25kcyksZS5taWxsaXNlY29uZHMhPW51bGwmJmkuc2V0TWlsbGlzZWNvbmRzKGUubWlsbGlzZWNvbmRzKSxpKX12YXIgdWIxLEFKPWIoKCk9PnthdCgpO01oKCk7QWUoKTt1YjE9JEp9KTtmdW5jdGlvbiBESih0LGUsYSl7bGV0IGk9bmUodCxhPy5pbik7cmV0dXJuIGkuc2V0RGF0ZShlKSxpfXZhciBnYjEsRUo9YigoKT0+e0FlKCk7Z2IxPURKfSk7ZnVuY3Rpb24gUEoodCxlLGEpe2xldCBpPW5lKHQsYT8uaW4pO3JldHVybiBpLnNldE1vbnRoKDApLGkuc2V0RGF0ZShlKSxpfXZhciB5YjEsSUo9YigoKT0+e0FlKCk7eWIxPVBKfSk7ZnVuY3Rpb24gTkoodCl7bGV0IGU9e30sYT1KdCgpO2ZvcihsZXQgaSBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGkpJiYoZVtpXT1hW2ldKTtmb3IobGV0IGkgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKHRbaV09PT12b2lkIDA/ZGVsZXRlIGVbaV06ZVtpXT10W2ldKTtRRyhlKX12YXIgTWIxLEZKPWIoKCk9PntSMigpO01iMT1OSn0pO2Z1bmN0aW9uIE9KKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKTtyZXR1cm4gaS5zZXRIb3VycyhlKSxpfXZhciBTYjEsUko9YigoKT0+e0FlKCk7U2IxPU9KfSk7ZnVuY3Rpb24gQkoodCxlLGEpe2xldCBpPW5lKHQsYT8uaW4pO3JldHVybiBpLnNldE1pbGxpc2Vjb25kcyhlKSxpfXZhciBUYjEsSEo9YigoKT0+e0FlKCk7VGIxPUJKfSk7ZnVuY3Rpb24gcUoodCxlLGEpe2xldCBpPW5lKHQsYT8uaW4pO3JldHVybiBpLnNldE1pbnV0ZXMoZSksaX12YXIgQWIxLFZKPWIoKCk9PntBZSgpO0FiMT1xSn0pO2Z1bmN0aW9uIGpKKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKSxyPU1hdGgudHJ1bmMoaS5nZXRNb250aCgpLzMpKzEscz1lLXI7cmV0dXJuIG8zKGksaS5nZXRNb250aCgpK3MqMyl9dmFyIEliMSxVSj1iKCgpPT57TWgoKTtBZSgpO0liMT1qSn0pO2Z1bmN0aW9uIFdKKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKTtyZXR1cm4gaS5zZXRTZWNvbmRzKGUpLGl9dmFyIE9iMSxHSj1iKCgpPT57QWUoKTtPYjE9V0p9KTtmdW5jdGlvbiBZSih0LGUsYSl7bGV0IGk9SnQoKSxyPWE/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT8/YT8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGU/P2kuZmlyc3RXZWVrQ29udGFpbnNEYXRlPz9pLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlPz8xLHM9aDIobmUodCxhPy5pbiksWG8odCxhKSxhKSxuPUxlKGE/LmlufHx0LDApO24uc2V0RnVsbFllYXIoZSwwLHIpLG4uc2V0SG91cnMoMCwwLDAsMCk7bGV0IG89WG8obixhKTtyZXR1cm4gby5zZXREYXRlKG8uZ2V0RGF0ZSgpK3MpLG99dmFyIFViMSxaSj1iKCgpPT57UjIoKTthdCgpO2NzKCk7cHAoKTtBZSgpO1ViMT1ZSn0pO2Z1bmN0aW9uIFhKKHQsZSxhKXtsZXQgaT1uZSh0LGE/LmluKTtyZXR1cm4gaXNOYU4oK2kpP0xlKGE/LmlufHx0LE5hTik6KGkuc2V0RnVsbFllYXIoZSksaSl9dmFyIFpiMSxLSj1iKCgpPT57YXQoKTtBZSgpO1piMT1YSn0pO2Z1bmN0aW9uIFFKKHQsZSl7bGV0IGE9bmUodCxlPy5pbiksaT1hLmdldEZ1bGxZZWFyKCkscj1NYXRoLmZsb29yKGkvMTApKjEwO3JldHVybiBhLnNldEZ1bGxZZWFyKHIsMCwxKSxhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIFFiMSxKSj1iKCgpPT57QWUoKTtRYjE9UUp9KTtmdW5jdGlvbiBlZWUodCl7cmV0dXJuIHpyKERhdGUubm93KCksdCl9dmFyIHR2MSx0ZWU9YigoKT0+e0ZjKCk7dHYxPWVlZX0pO2Z1bmN0aW9uIGFlZSh0KXtsZXQgZT1fdCh0Py5pbiksYT1lLmdldEZ1bGxZZWFyKCksaT1lLmdldE1vbnRoKCkscj1lLmdldERhdGUoKSxzPUxlKHQ/LmluLDApO3JldHVybiBzLnNldEZ1bGxZZWFyKGEsaSxyKzEpLHMuc2V0SG91cnMoMCwwLDAsMCksc312YXIgc3YxLGllZT1iKCgpPT57YXQoKTtlMigpO3N2MT1hZWV9KTtmdW5jdGlvbiByZWUodCl7bGV0IGU9X3QodD8uaW4pLGE9ZS5nZXRGdWxsWWVhcigpLGk9ZS5nZXRNb250aCgpLHI9ZS5nZXREYXRlKCkscz1fdCh0Py5pbik7cmV0dXJuIHMuc2V0RnVsbFllYXIoYSxpLHItMSkscy5zZXRIb3VycygwLDAsMCwwKSxzfXZhciBsdjEsc2VlPWIoKCk9PntlMigpO2x2MT1yZWV9KTtmdW5jdGlvbiB6aCh0LGUsYSl7cmV0dXJuIHhyKHQsLWUsYSl9dmFyIHB2MSxVUz1iKCgpPT57SDQoKTtwdjE9emh9KTtmdW5jdGlvbiBuZWUodCxlLGEpe2xldHt5ZWFyczppPTAsbW9udGhzOnI9MCx3ZWVrczpzPTAsZGF5czpuPTAsaG91cnM6bz0wLG1pbnV0ZXM6ZD0wLHNlY29uZHM6Yz0wfT1lLHA9emgodCxyK2kqMTIsYSksbD1DbihwLG4rcyo3LGEpLGY9ZCtvKjYwLHk9KGMrZio2MCkqMWUzO3JldHVybiBMZShhPy5pbnx8dCwrbC15KX12YXIgZ3YxLG9lZT1iKCgpPT57YXQoKTtRYygpO1VTKCk7Z3YxPW5lZX0pO2Z1bmN0aW9uIGxlZSh0LGUsYSl7cmV0dXJuIEE3KHQsLWUsYSl9dmFyIHl2MSxjZWU9YigoKT0+e1prKCk7eXYxPWxlZX0pO2Z1bmN0aW9uIGRlZSh0LGUsYSl7cmV0dXJuIEQ3KHQsLWUsYSl9dmFyIE12MSxwZWU9YigoKT0+e1hrKCk7TXYxPWRlZX0pO2Z1bmN0aW9uIGhlZSh0LGUsYSl7cmV0dXJuIGduKHQsLWUsYSl9dmFyIFN2MSx1ZWU9YigoKT0+e05jKCk7U3YxPWhlZX0pO2Z1bmN0aW9uIGZlZSh0LGUsYSl7cmV0dXJuIFY0KHQsLWUsYSl9dmFyIFR2MSxtZWU9YigoKT0+e0k3KCk7VHYxPWZlZX0pO2Z1bmN0aW9uIGdlZSh0LGUsYSl7cmV0dXJuIGo0KHQsLWUsYSl9dmFyIEF2MSxiZWU9YigoKT0+e043KCk7QXYxPWdlZX0pO2Z1bmN0aW9uIHZlZSh0LGUsYSl7cmV0dXJuIEY3KHQsLWUsYSl9dmFyIFB2MSx5ZWU9YigoKT0+e0prKCk7UHYxPXZlZX0pO2Z1bmN0aW9uIHhlZSh0LGUsYSl7cmV0dXJuIHZuKHQsLWUsYSl9dmFyIEZ2MSx3ZWU9YigoKT0+e09jKCk7RnYxPXhlZX0pO2Z1bmN0aW9uIE1lZSh0LGUsYSl7cmV0dXJuIE83KHQsLWUsYSl9dmFyIEJ2MSx6ZWU9YigoKT0+e2VTKCk7QnYxPU1lZX0pO2Z1bmN0aW9uIGtlZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0KjcpfXZhciBWdjEsU2VlPWIoKCk9Pnt5dCgpO1Z2MT1rZWV9KTtmdW5jdGlvbiBDZWUodCl7cmV0dXJuIE1hdGgudHJ1bmModCozNjUuMjQyNSl9dmFyIFd2MSxfZWU9YigoKT0+e3l0KCk7V3YxPUNlZX0pO2Z1bmN0aW9uIFRlZSh0KXtyZXR1cm4gTWF0aC50cnVuYyh0Kl83KX12YXIgWnYxLExlZT1iKCgpPT57eXQoKTtadjE9VGVlfSk7ZnVuY3Rpb24gJGVlKHQpe3JldHVybiBNYXRoLnRydW5jKHQqVDcpfXZhciBRdjEsQWVlPWIoKCk9Pnt5dCgpO1F2MT0kZWV9KTt2YXIgZTY9e307V2UoZTYse2FkZDooKT0+bW4sYWRkQnVzaW5lc3NEYXlzOigpPT5BNyxhZGREYXlzOigpPT5KMSxhZGRIb3VyczooKT0+RDcsYWRkSVNPV2Vla1llYXJzOigpPT5QNyxhZGRNaWxsaXNlY29uZHM6KCk9PmduLGFkZE1pbnV0ZXM6KCk9PlY0LGFkZE1vbnRoczooKT0+eHIsYWRkUXVhcnRlcnM6KCk9Pmo0LGFkZFNlY29uZHM6KCk9PkY3LGFkZFdlZWtzOigpPT52bixhZGRZZWFyczooKT0+TzcsYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6KCk9PkpHLGNsYW1wOigpPT50WSxjbG9zZXN0SW5kZXhUbzooKT0+SDcsY2xvc2VzdFRvOigpPT5pWSxjb21wYXJlQXNjOigpPT5CMixjb21wYXJlRGVzYzooKT0+c1ksY29uc3RydWN0RnJvbTooKT0+TGUsY29uc3RydWN0Tm93OigpPT5fdCxkYXlzVG9XZWVrczooKT0+b1ksZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOigpPT5jWSxkaWZmZXJlbmNlSW5DYWxlbmRhckRheXM6KCk9PmgyLGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzOigpPT5WNyxkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzOigpPT5wWSxkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoczooKT0+VW8sZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczooKT0+VzQsZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczooKT0+V28sZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFyczooKT0+eW4sZGlmZmVyZW5jZUluRGF5czooKT0+RzQsZGlmZmVyZW5jZUluSG91cnM6KCk9PkdvLGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczooKT0+ZlksZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzOigpPT5ZNCxkaWZmZXJlbmNlSW5NaW51dGVzOigpPT5ZbyxkaWZmZXJlbmNlSW5Nb250aHM6KCk9PnhuLGRpZmZlcmVuY2VJblF1YXJ0ZXJzOigpPT5nWSxkaWZmZXJlbmNlSW5TZWNvbmRzOigpPT5TcixkaWZmZXJlbmNlSW5XZWVrczooKT0+dlksZGlmZmVyZW5jZUluWWVhcnM6KCk9PnRwLGVhY2hEYXlPZkludGVydmFsOigpPT5hcCxlYWNoSG91ck9mSW50ZXJ2YWw6KCk9PnhZLGVhY2hNaW51dGVPZkludGVydmFsOigpPT5NWSxlYWNoTW9udGhPZkludGVydmFsOigpPT5rWSxlYWNoUXVhcnRlck9mSW50ZXJ2YWw6KCk9PkNZLGVhY2hXZWVrT2ZJbnRlcnZhbDooKT0+VFksZWFjaFdlZWtlbmRPZkludGVydmFsOigpPT5LNCxlYWNoV2Vla2VuZE9mTW9udGg6KCk9PiRZLGVhY2hXZWVrZW5kT2ZZZWFyOigpPT5EWSxlYWNoWWVhck9mSW50ZXJ2YWw6KCk9PlBZLGVuZE9mRGF5OigpPT5aNCxlbmRPZkRlY2FkZTooKT0+TlksZW5kT2ZIb3VyOigpPT5PWSxlbmRPZklTT1dlZWs6KCk9PkJZLGVuZE9mSVNPV2Vla1llYXI6KCk9PnFZLGVuZE9mTWludXRlOigpPT5qWSxlbmRPZk1vbnRoOigpPT5YNCxlbmRPZlF1YXJ0ZXI6KCk9PldZLGVuZE9mU2Vjb25kOigpPT5ZWSxlbmRPZlRvZGF5OigpPT5YWSxlbmRPZlRvbW9ycm93OigpPT5RWSxlbmRPZldlZWs6KCk9Pm9wLGVuZE9mWWVhcjooKT0+c3AsZW5kT2ZZZXN0ZXJkYXk6KCk9PmVaLGZvcm1hdDooKT0+V2MsZm9ybWF0RGF0ZTooKT0+V2MsZm9ybWF0RGlzdGFuY2U6KCk9Pm1wLGZvcm1hdERpc3RhbmNlU3RyaWN0OigpPT5ncCxmb3JtYXREaXN0YW5jZVRvTm93OigpPT56Wixmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OigpPT5TWixmb3JtYXREdXJhdGlvbjooKT0+X1osZm9ybWF0SVNPOigpPT5MWixmb3JtYXRJU085MDc1OigpPT5BWixmb3JtYXRJU09EdXJhdGlvbjooKT0+RVosZm9ybWF0UkZDMzMzOTooKT0+SVosZm9ybWF0UkZDNzIzMTooKT0+RlosZm9ybWF0UmVsYXRpdmU6KCk9PlJaLGZvcm1hdHRlcnM6KCk9PmpjLGZyb21Vbml4VGltZTooKT0+SFosZ2V0RGF0ZTooKT0+YnAsZ2V0RGF5OigpPT5rbixnZXREYXlPZlllYXI6KCk9PmNwLGdldERheXNJbk1vbnRoOigpPT52cCxnZXREYXlzSW5ZZWFyOigpPT5WWixnZXREZWNhZGU6KCk9PlVaLGdldERlZmF1bHRPcHRpb25zOigpPT54cCxnZXRIb3VyczooKT0+R1osZ2V0SVNPRGF5OigpPT53cCxnZXRJU09XZWVrOigpPT50MyxnZXRJU09XZWVrWWVhcjooKT0+b2EsZ2V0SVNPV2Vla3NJblllYXI6KCk9PlpaLGdldE1pbGxpc2Vjb25kczooKT0+S1osZ2V0TWludXRlczooKT0+SlosZ2V0TW9udGg6KCk9PnRYLGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOigpPT5pWCxnZXRRdWFydGVyOigpPT5SYyxnZXRTZWNvbmRzOigpPT5zWCxnZXRUaW1lOigpPT5vWCxnZXRVbml4VGltZTooKT0+Y1gsZ2V0V2VlazooKT0+YTMsZ2V0V2Vla09mTW9udGg6KCk9PnBYLGdldFdlZWtZZWFyOigpPT5NbixnZXRXZWVrc0luTW9udGg6KCk9PnVYLGdldFllYXI6KCk9Pm1YLGhvdXJzVG9NaWxsaXNlY29uZHM6KCk9PmJYLGhvdXJzVG9NaW51dGVzOigpPT55WCxob3Vyc1RvU2Vjb25kczooKT0+d1gsaW50ZXJ2YWw6KCk9PnpYLGludGVydmFsVG9EdXJhdGlvbjooKT0+U1gsaW50bEZvcm1hdDooKT0+X1gsaW50bEZvcm1hdERpc3RhbmNlOigpPT5MWCxpc0FmdGVyOigpPT5BWCxpc0JlZm9yZTooKT0+RVgsaXNEYXRlOigpPT5xNyxpc0VxdWFsOigpPT5JWCxpc0V4aXN0czooKT0+RlgsaXNGaXJzdERheU9mTW9udGg6KCk9PlJYLGlzRnJpZGF5OigpPT5IWCxpc0Z1dHVyZTooKT0+VlgsaXNMYXN0RGF5T2ZNb250aDooKT0+ZXAsaXNMZWFwWWVhcjooKT0+eXAsaXNNYXRjaDooKT0+ekssaXNNb25kYXk6KCk9PlNLLGlzUGFzdDooKT0+X0ssaXNTYW1lRGF5OigpPT5rcixpc1NhbWVIb3VyOigpPT5oaCxpc1NhbWVJU09XZWVrOigpPT5maCxpc1NhbWVJU09XZWVrWWVhcjooKT0+TEssaXNTYW1lTWludXRlOigpPT5taCxpc1NhbWVNb250aDooKT0+Z2gsaXNTYW1lUXVhcnRlcjooKT0+YmgsaXNTYW1lU2Vjb25kOigpPT52aCxpc1NhbWVXZWVrOigpPT5uMyxpc1NhbWVZZWFyOigpPT55aCxpc1NhdHVyZGF5OigpPT5MNyxpc1N1bmRheTooKT0+JDcsaXNUaGlzSG91cjooKT0+QUssaXNUaGlzSVNPV2VlazooKT0+RUssaXNUaGlzTWludXRlOigpPT5JSyxpc1RoaXNNb250aDooKT0+RkssaXNUaGlzUXVhcnRlcjooKT0+UkssaXNUaGlzU2Vjb25kOigpPT5ISyxpc1RoaXNXZWVrOigpPT5WSyxpc1RoaXNZZWFyOigpPT5VSyxpc1RodXJzZGF5OigpPT5HSyxpc1RvZGF5OigpPT5aSyxpc1RvbW9ycm93OigpPT5LSyxpc1R1ZXNkYXk6KCk9PkpLLGlzVmFsaWQ6KCk9PmsyLGlzV2VkbmVzZGF5OigpPT50USxpc1dlZWtlbmQ6KCk9PndyLGlzV2l0aGluSW50ZXJ2YWw6KCk9PmlRLGlzWWVzdGVyZGF5OigpPT5zUSxsYXN0RGF5T2ZEZWNhZGU6KCk9Pm9RLGxhc3REYXlPZklTT1dlZWs6KCk9PmNRLGxhc3REYXlPZklTT1dlZWtZZWFyOigpPT5wUSxsYXN0RGF5T2ZNb250aDooKT0+TXAsbGFzdERheU9mUXVhcnRlcjooKT0+dVEsbGFzdERheU9mV2VlazooKT0+eGgsbGFzdERheU9mWWVhcjooKT0+bVEsbGlnaHRGb3JtYXQ6KCk9PmJRLGxpZ2h0Rm9ybWF0dGVyczooKT0+RmEsbG9uZ0Zvcm1hdHRlcnM6KCk9PnpuLG1heDooKT0+UjcsbWlsbGlzZWNvbmRzOigpPT55USxtaWxsaXNlY29uZHNUb0hvdXJzOigpPT53USxtaWxsaXNlY29uZHNUb01pbnV0ZXM6KCk9PnpRLG1pbGxpc2Vjb25kc1RvU2Vjb25kczooKT0+U1EsbWluOigpPT5CNyxtaW51dGVzVG9Ib3VyczooKT0+X1EsbWludXRlc1RvTWlsbGlzZWNvbmRzOigpPT5MUSxtaW51dGVzVG9TZWNvbmRzOigpPT5BUSxtb250aHNUb1F1YXJ0ZXJzOigpPT5FUSxtb250aHNUb1llYXJzOigpPT5JUSxuZXh0RGF5OigpPT5WMixuZXh0RnJpZGF5OigpPT5GUSxuZXh0TW9uZGF5OigpPT5SUSxuZXh0U2F0dXJkYXk6KCk9PkhRLG5leHRTdW5kYXk6KCk9PlZRLG5leHRUaHVyc2RheTooKT0+VVEsbmV4dFR1ZXNkYXk6KCk9PkdRLG5leHRXZWRuZXNkYXk6KCk9PlpRLHBhcnNlOigpPT5waCxwYXJzZUlTTzooKT0+UVEscGFyc2VKU09OOigpPT5lSixwYXJzZXJzOigpPT5kaCxwcmV2aW91c0RheTooKT0+ajIscHJldmlvdXNGcmlkYXk6KCk9PmFKLHByZXZpb3VzTW9uZGF5OigpPT5ySixwcmV2aW91c1NhdHVyZGF5OigpPT5uSixwcmV2aW91c1N1bmRheTooKT0+bEoscHJldmlvdXNUaHVyc2RheTooKT0+ZEoscHJldmlvdXNUdWVzZGF5OigpPT5oSixwcmV2aW91c1dlZG5lc2RheTooKT0+ZkoscXVhcnRlcnNUb01vbnRoczooKT0+Z0oscXVhcnRlcnNUb1llYXJzOigpPT52Sixyb3VuZFRvTmVhcmVzdEhvdXJzOigpPT54Sixyb3VuZFRvTmVhcmVzdE1pbnV0ZXM6KCk9Pk1KLHNlY29uZHNUb0hvdXJzOigpPT5rSixzZWNvbmRzVG9NaWxsaXNlY29uZHM6KCk9PkNKLHNlY29uZHNUb01pbnV0ZXM6KCk9PlRKLHNldDooKT0+JEosc2V0RGF0ZTooKT0+REosc2V0RGF5OigpPT5TbixzZXREYXlPZlllYXI6KCk9PlBKLHNldERlZmF1bHRPcHRpb25zOigpPT5OSixzZXRIb3VyczooKT0+T0osc2V0SVNPRGF5OigpPT5ZcCxzZXRJU09XZWVrOigpPT5IcCxzZXRJU09XZWVrWWVhcjooKT0+RTcsc2V0TWlsbGlzZWNvbmRzOigpPT5CSixzZXRNaW51dGVzOigpPT5xSixzZXRNb250aDooKT0+bzMsc2V0UXVhcnRlcjooKT0+akosc2V0U2Vjb25kczooKT0+V0osc2V0V2VlazooKT0+UnAsc2V0V2Vla1llYXI6KCk9PllKLHNldFllYXI6KCk9PlhKLHN0YXJ0T2ZEYXk6KCk9PnpyLHN0YXJ0T2ZEZWNhZGU6KCk9PlFKLHN0YXJ0T2ZIb3VyOigpPT5aYyxzdGFydE9mSVNPV2VlazooKT0+RzEsc3RhcnRPZklTT1dlZWtZZWFyOigpPT5OYSxzdGFydE9mTWludXRlOigpPT5YYyxzdGFydE9mTW9udGg6KCk9PnduLHN0YXJ0T2ZRdWFydGVyOigpPT5fcixzdGFydE9mU2Vjb25kOigpPT5LYyxzdGFydE9mVG9kYXk6KCk9PmVlZSxzdGFydE9mVG9tb3Jyb3c6KCk9PmFlZSxzdGFydE9mV2VlazooKT0+cDEsc3RhcnRPZldlZWtZZWFyOigpPT5YbyxzdGFydE9mWWVhcjooKT0+UTQsc3RhcnRPZlllc3RlcmRheTooKT0+cmVlLHN1YjooKT0+bmVlLHN1YkJ1c2luZXNzRGF5czooKT0+bGVlLHN1YkRheXM6KCk9PkNuLHN1YkhvdXJzOigpPT5kZWUsc3ViSVNPV2Vla1llYXJzOigpPT5aNyxzdWJNaWxsaXNlY29uZHM6KCk9PmhlZSxzdWJNaW51dGVzOigpPT5mZWUsc3ViTW9udGhzOigpPT56aCxzdWJRdWFydGVyczooKT0+Z2VlLHN1YlNlY29uZHM6KCk9PnZlZSxzdWJXZWVrczooKT0+eGVlLHN1YlllYXJzOigpPT5NZWUsdG9EYXRlOigpPT5uZSx0cmFuc3Bvc2U6KCk9PnpwLHdlZWtzVG9EYXlzOigpPT5rZWUseWVhcnNUb0RheXM6KCk9PkNlZSx5ZWFyc1RvTW9udGhzOigpPT5UZWUseWVhcnNUb1F1YXJ0ZXJzOigpPT4kZWV9KTt2YXIgRGVlPWIoKCk9PntXaygpO1prKCk7eXIoKTtYaygpO1FrKCk7TmMoKTtJNygpO0g0KCk7TjcoKTtKaygpO09jKCk7ZVMoKTtlWSgpO2FZKCk7aVMoKTtyWSgpO2pvKCk7blkoKTthdCgpO2UyKCk7bFkoKTtkWSgpO2NzKCk7c1MoKTtoWSgpO2o3KCk7b1MoKTtVNygpO1c3KCk7RzcoKTtZNygpO21ZKCk7WDcoKTtLNygpO0JjKCk7YlkoKTtIYygpO3lZKCk7ZFMoKTtwUygpO3dZKCk7elkoKTtTWSgpO19ZKCk7TFkoKTtycCgpO0FZKCk7RVkoKTtJWSgpO1E3KCk7RlkoKTtSWSgpO0hZKCk7VlkoKTtVWSgpO0o3KCk7R1koKTtaWSgpO0tZKCk7SlkoKTt1UygpO2hTKCk7dFooKTt2UygpO3lTKCk7eFMoKTtrWigpO0NaKCk7VFooKTskWigpO0RaKCk7UFooKTtOWigpO09aKCk7QlooKTtxWigpO3dTKCk7R2MoKTtmUygpO01TKCk7alooKTtXWigpO2tTKCk7WVooKTtTUygpO2RwKCk7Ym4oKTtYWigpO1FaKCk7ZVgoKTthWCgpO3JYKCk7blMoKTtuWCgpO2xYKCk7ZFgoKTtocCgpO2hYKCk7VmMoKTtmWCgpO2dYKCk7dlgoKTt4WCgpO01YKCk7a1goKTtDWCgpO1RYKCk7JFgoKTtEWCgpO1BYKCk7clMoKTtOWCgpO09YKCk7QlgoKTtxWCgpO2pYKCk7Y1MoKTt6UygpO2tLKCk7Q0soKTtUSygpO1U0KCk7UFMoKTtJUygpOyRLKCk7RlMoKTtPUygpO1JTKCk7SFMoKTt1aCgpO3FTKCk7R2soKTtZaygpO0RLKCk7UEsoKTtOSygpO09LKCk7QksoKTtxSygpO2pLKCk7V0soKTtZSygpO1hLKCk7UUsoKTtlUSgpO2RzKCk7YVEoKTtJYygpO3JRKCk7blEoKTtsUSgpO2RRKCk7aFEoKTtDUygpO2ZRKCk7VlMoKTtnUSgpO3ZRKCk7dFMoKTt4USgpO01RKCk7a1EoKTtDUSgpO2FTKCk7VFEoKTskUSgpO0RRKCk7UFEoKTtOUSgpO2hzKCk7T1EoKTtCUSgpO3FRKCk7alEoKTtXUSgpO1lRKCk7WFEoKTtEUygpO0pRKCk7dEooKTt1cygpO2lKKCk7c0ooKTtvSigpO2NKKCk7cEooKTt1SigpO21KKCk7YkooKTt5SigpO3dKKCk7ekooKTtTSigpO19KKCk7TEooKTtBSigpO0VKKCk7WWMoKTtJSigpO0ZKKCk7UkooKTtBUygpOyRTKCk7S2soKTtISigpO1ZKKCk7TWgoKTtVSigpO0dKKCk7TFMoKTtaSigpO0tKKCk7RmMoKTtKSigpO0VTKCk7TXIoKTtxNCgpO05TKCk7cWMoKTtpcCgpO0JTKCk7dGVlKCk7aWVlKCk7TmkoKTtwcCgpO25wKCk7c2VlKCk7b2VlKCk7Y2VlKCk7UWMoKTtwZWUoKTtsUygpO3VlZSgpO21lZSgpO1VTKCk7YmVlKCk7eWVlKCk7d2VlKCk7emVlKCk7QWUoKTtfUygpO1NlZSgpO19lZSgpO0xlZSgpO0FlZSgpfSk7dmFyIEVlZT1odCgoV1MsR1MpPT57KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIFdTPT0ib2JqZWN0IiYmdHlwZW9mIEdTPCJ1Ij9HUy5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqcz1lKCl9KShXUywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LGE9MzZlNSxpPSJtaWxsaXNlY29uZCIscj0ic2Vjb25kIixzPSJtaW51dGUiLG49ImhvdXIiLG89ImRheSIsZD0id2VlayIsYz0ibW9udGgiLHA9InF1YXJ0ZXIiLGw9InllYXIiLGY9ImRhdGUiLGc9IkludmFsaWQgRGF0ZSIseT0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx2PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csbT17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbih6KXt2YXIgRT1bInRoIiwic3QiLCJuZCIsInJkIl0sVD16JTEwMDtyZXR1cm4iWyIreisoRVsoVC0yMCklMTBdfHxFW1RdfHxFWzBdKSsiXSJ9fSx4PWZ1bmN0aW9uKHosRSxUKXt2YXIgJD1TdHJpbmcoeik7cmV0dXJuISR8fCQubGVuZ3RoPj1FP3o6IiIrQXJyYXkoRSsxLSQubGVuZ3RoKS5qb2luKFQpK3p9LE09e3M6eCx6OmZ1bmN0aW9uKHope3ZhciBFPS16LnV0Y09mZnNldCgpLFQ9TWF0aC5hYnMoRSksJD1NYXRoLmZsb29yKFQvNjApLFY9VCU2MDtyZXR1cm4oRTw9MD8iKyI6Ii0iKSt4KCQsMiwiMCIpKyI6Iit4KFYsMiwiMCIpfSxtOmZ1bmN0aW9uIHooRSxUKXtpZihFLmRhdGUoKTxULmRhdGUoKSlyZXR1cm4teihULEUpO3ZhciAkPTEyKihULnllYXIoKS1FLnllYXIoKSkrKFQubW9udGgoKS1FLm1vbnRoKCkpLFY9RS5jbG9uZSgpLmFkZCgkLGMpLFI9VC1WPDAsVT1FLmNsb25lKCkuYWRkKCQrKFI/LTE6MSksYyk7cmV0dXJuKygtKCQrKFQtVikvKFI/Vi1VOlUtVikpfHwwKX0sYTpmdW5jdGlvbih6KXtyZXR1cm4gejwwP01hdGguY2VpbCh6KXx8MDpNYXRoLmZsb29yKHopfSxwOmZ1bmN0aW9uKHope3JldHVybntNOmMseTpsLHc6ZCxkOm8sRDpmLGg6bixtOnMsczpyLG1zOmksUTpwfVt6XXx8U3RyaW5nKHp8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24oeil7cmV0dXJuIHo9PT12b2lkIDB9fSxTPSJlbiIsRj17fTtGW1NdPW07dmFyIF89IiRpc0RheWpzT2JqZWN0IixrPWZ1bmN0aW9uKHope3JldHVybiB6IGluc3RhbmNlb2YgcXx8ISghenx8IXpbX10pfSxOPWZ1bmN0aW9uIHooRSxULCQpe3ZhciBWO2lmKCFFKXJldHVybiBTO2lmKHR5cGVvZiBFPT0ic3RyaW5nIil7dmFyIFI9RS50b0xvd2VyQ2FzZSgpO0ZbUl0mJihWPVIpLFQmJihGW1JdPVQsVj1SKTt2YXIgVT1FLnNwbGl0KCItIik7aWYoIVYmJlUubGVuZ3RoPjEpcmV0dXJuIHooVVswXSl9ZWxzZXt2YXIgcmU9RS5uYW1lO0ZbcmVdPUUsVj1yZX1yZXR1cm4hJCYmViYmKFM9ViksVnx8ISQmJlN9LEw9ZnVuY3Rpb24oeixFKXtpZihrKHopKXJldHVybiB6LmNsb25lKCk7dmFyIFQ9dHlwZW9mIEU9PSJvYmplY3QiP0U6e307cmV0dXJuIFQuZGF0ZT16LFQuYXJncz1hcmd1bWVudHMsbmV3IHEoVCl9LEE9TTtBLmw9TixBLmk9ayxBLnc9ZnVuY3Rpb24oeixFKXtyZXR1cm4gTCh6LHtsb2NhbGU6RS4kTCx1dGM6RS4kdSx4OkUuJHgsJG9mZnNldDpFLiRvZmZzZXR9KX07dmFyIHE9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24geihUKXt0aGlzLiRMPU4oVC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShUKSx0aGlzLiR4PXRoaXMuJHh8fFQueHx8e30sdGhpc1tfXT0hMH12YXIgRT16LnByb3RvdHlwZTtyZXR1cm4gRS5wYXJzZT1mdW5jdGlvbihUKXt0aGlzLiRkPShmdW5jdGlvbigkKXt2YXIgVj0kLmRhdGUsUj0kLnV0YztpZihWPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihBLnUoVikpcmV0dXJuIG5ldyBEYXRlO2lmKFYgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShWKTtpZih0eXBlb2YgVj09InN0cmluZyImJiEvWiQvaS50ZXN0KFYpKXt2YXIgVT1WLm1hdGNoKHkpO2lmKFUpe3ZhciByZT1VWzJdLTF8fDAsaj0oVVs3XXx8IjAiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gUj9uZXcgRGF0ZShEYXRlLlVUQyhVWzFdLHJlLFVbM118fDEsVVs0XXx8MCxVWzVdfHwwLFVbNl18fDAsaikpOm5ldyBEYXRlKFVbMV0scmUsVVszXXx8MSxVWzRdfHwwLFVbNV18fDAsVVs2XXx8MCxqKX19cmV0dXJuIG5ldyBEYXRlKFYpfSkoVCksdGhpcy5pbml0KCl9LEUuaW5pdD1mdW5jdGlvbigpe3ZhciBUPXRoaXMuJGQ7dGhpcy4keT1ULmdldEZ1bGxZZWFyKCksdGhpcy4kTT1ULmdldE1vbnRoKCksdGhpcy4kRD1ULmdldERhdGUoKSx0aGlzLiRXPVQuZ2V0RGF5KCksdGhpcy4kSD1ULmdldEhvdXJzKCksdGhpcy4kbT1ULmdldE1pbnV0ZXMoKSx0aGlzLiRzPVQuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPVQuZ2V0TWlsbGlzZWNvbmRzKCl9LEUuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LEUuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1nfSxFLmlzU2FtZT1mdW5jdGlvbihULCQpe3ZhciBWPUwoVCk7cmV0dXJuIHRoaXMuc3RhcnRPZigkKTw9ViYmVjw9dGhpcy5lbmRPZigkKX0sRS5pc0FmdGVyPWZ1bmN0aW9uKFQsJCl7cmV0dXJuIEwoVCk8dGhpcy5zdGFydE9mKCQpfSxFLmlzQmVmb3JlPWZ1bmN0aW9uKFQsJCl7cmV0dXJuIHRoaXMuZW5kT2YoJCk8TChUKX0sRS4kZz1mdW5jdGlvbihULCQsVil7cmV0dXJuIEEudShUKT90aGlzWyRdOnRoaXMuc2V0KFYsVCl9LEUudW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LEUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sRS5zdGFydE9mPWZ1bmN0aW9uKFQsJCl7dmFyIFY9dGhpcyxSPSEhQS51KCQpfHwkLFU9QS5wKFQpLHJlPWZ1bmN0aW9uKEQsTyl7dmFyIFo9QS53KFYuJHU/RGF0ZS5VVEMoVi4keSxPLEQpOm5ldyBEYXRlKFYuJHksTyxEKSxWKTtyZXR1cm4gUj9aOlouZW5kT2Yobyl9LGo9ZnVuY3Rpb24oRCxPKXtyZXR1cm4gQS53KFYudG9EYXRlKClbRF0uYXBwbHkoVi50b0RhdGUoInMiKSwoUj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKE8pKSxWKX0sbWU9dGhpcy4kVyx3ZT10aGlzLiRNLEg9dGhpcy4kRCxjZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKFUpe2Nhc2UgbDpyZXR1cm4gUj9yZSgxLDApOnJlKDMxLDExKTtjYXNlIGM6cmV0dXJuIFI/cmUoMSx3ZSk6cmUoMCx3ZSsxKTtjYXNlIGQ6dmFyIGtlPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxXPShtZTxrZT9tZSs3Om1lKS1rZTtyZXR1cm4gcmUoUj9ILVc6SCsoNi1XKSx3ZSk7Y2FzZSBvOmNhc2UgZjpyZXR1cm4gaihjZSsiSG91cnMiLDApO2Nhc2UgbjpyZXR1cm4gaihjZSsiTWludXRlcyIsMSk7Y2FzZSBzOnJldHVybiBqKGNlKyJTZWNvbmRzIiwyKTtjYXNlIHI6cmV0dXJuIGooY2UrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sRS5lbmRPZj1mdW5jdGlvbihUKXtyZXR1cm4gdGhpcy5zdGFydE9mKFQsITEpfSxFLiRzZXQ9ZnVuY3Rpb24oVCwkKXt2YXIgVixSPUEucChUKSxVPSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKSxyZT0oVj17fSxWW29dPVUrIkRhdGUiLFZbZl09VSsiRGF0ZSIsVltjXT1VKyJNb250aCIsVltsXT1VKyJGdWxsWWVhciIsVltuXT1VKyJIb3VycyIsVltzXT1VKyJNaW51dGVzIixWW3JdPVUrIlNlY29uZHMiLFZbaV09VSsiTWlsbGlzZWNvbmRzIixWKVtSXSxqPVI9PT1vP3RoaXMuJEQrKCQtdGhpcy4kVyk6JDtpZihSPT09Y3x8Uj09PWwpe3ZhciBtZT10aGlzLmNsb25lKCkuc2V0KGYsMSk7bWUuJGRbcmVdKGopLG1lLmluaXQoKSx0aGlzLiRkPW1lLnNldChmLE1hdGgubWluKHRoaXMuJEQsbWUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgcmUmJnRoaXMuJGRbcmVdKGopO3JldHVybiB0aGlzLmluaXQoKSx0aGlzfSxFLnNldD1mdW5jdGlvbihULCQpe3JldHVybiB0aGlzLmNsb25lKCkuJHNldChULCQpfSxFLmdldD1mdW5jdGlvbihUKXtyZXR1cm4gdGhpc1tBLnAoVCldKCl9LEUuYWRkPWZ1bmN0aW9uKFQsJCl7dmFyIFYsUj10aGlzO1Q9TnVtYmVyKFQpO3ZhciBVPUEucCgkKSxyZT1mdW5jdGlvbih3ZSl7dmFyIEg9TChSKTtyZXR1cm4gQS53KEguZGF0ZShILmRhdGUoKStNYXRoLnJvdW5kKHdlKlQpKSxSKX07aWYoVT09PWMpcmV0dXJuIHRoaXMuc2V0KGMsdGhpcy4kTStUKTtpZihVPT09bClyZXR1cm4gdGhpcy5zZXQobCx0aGlzLiR5K1QpO2lmKFU9PT1vKXJldHVybiByZSgxKTtpZihVPT09ZClyZXR1cm4gcmUoNyk7dmFyIGo9KFY9e30sVltzXT1lLFZbbl09YSxWW3JdPXQsVilbVV18fDEsbWU9dGhpcy4kZC5nZXRUaW1lKCkrVCpqO3JldHVybiBBLncobWUsdGhpcyl9LEUuc3VidHJhY3Q9ZnVuY3Rpb24oVCwkKXtyZXR1cm4gdGhpcy5hZGQoLTEqVCwkKX0sRS5mb3JtYXQ9ZnVuY3Rpb24oVCl7dmFyICQ9dGhpcyxWPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gVi5pbnZhbGlkRGF0ZXx8Zzt2YXIgUj1UfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLFU9QS56KHRoaXMpLHJlPXRoaXMuJEgsaj10aGlzLiRtLG1lPXRoaXMuJE0sd2U9Vi53ZWVrZGF5cyxIPVYubW9udGhzLGNlPVYubWVyaWRpZW0sa2U9ZnVuY3Rpb24oTyxaLFksb2Upe3JldHVybiBPJiYoT1taXXx8TygkLFIpKXx8WVtaXS5zbGljZSgwLG9lKX0sVz1mdW5jdGlvbihPKXtyZXR1cm4gQS5zKHJlJTEyfHwxMixPLCIwIil9LEQ9Y2V8fGZ1bmN0aW9uKE8sWixZKXt2YXIgb2U9TzwxMj8iQU0iOiJQTSI7cmV0dXJuIFk/b2UudG9Mb3dlckNhc2UoKTpvZX07cmV0dXJuIFIucmVwbGFjZSh2LChmdW5jdGlvbihPLFope3JldHVybiBafHwoZnVuY3Rpb24oWSl7c3dpdGNoKFkpe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoJC4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEEucygkLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiBtZSsxO2Nhc2UiTU0iOnJldHVybiBBLnMobWUrMSwyLCIwIik7Y2FzZSJNTU0iOnJldHVybiBrZShWLm1vbnRoc1Nob3J0LG1lLEgsMyk7Y2FzZSJNTU1NIjpyZXR1cm4ga2UoSCxtZSk7Y2FzZSJEIjpyZXR1cm4gJC4kRDtjYXNlIkREIjpyZXR1cm4gQS5zKCQuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZygkLiRXKTtjYXNlImRkIjpyZXR1cm4ga2UoVi53ZWVrZGF5c01pbiwkLiRXLHdlLDIpO2Nhc2UiZGRkIjpyZXR1cm4ga2UoVi53ZWVrZGF5c1Nob3J0LCQuJFcsd2UsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gd2VbJC4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKHJlKTtjYXNlIkhIIjpyZXR1cm4gQS5zKHJlLDIsIjAiKTtjYXNlImgiOnJldHVybiBXKDEpO2Nhc2UiaGgiOnJldHVybiBXKDIpO2Nhc2UiYSI6cmV0dXJuIEQocmUsaiwhMCk7Y2FzZSJBIjpyZXR1cm4gRChyZSxqLCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoaik7Y2FzZSJtbSI6cmV0dXJuIEEucyhqLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoJC4kcyk7Y2FzZSJzcyI6cmV0dXJuIEEucygkLiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuIEEucygkLiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gVX1yZXR1cm4gbnVsbH0pKE8pfHxVLnJlcGxhY2UoIjoiLCIiKX0pKX0sRS51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sRS5kaWZmPWZ1bmN0aW9uKFQsJCxWKXt2YXIgUixVPXRoaXMscmU9QS5wKCQpLGo9TChUKSxtZT0oai51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSplLHdlPXRoaXMtaixIPWZ1bmN0aW9uKCl7cmV0dXJuIEEubShVLGopfTtzd2l0Y2gocmUpe2Nhc2UgbDpSPUgoKS8xMjticmVhaztjYXNlIGM6Uj1IKCk7YnJlYWs7Y2FzZSBwOlI9SCgpLzM7YnJlYWs7Y2FzZSBkOlI9KHdlLW1lKS82MDQ4ZTU7YnJlYWs7Y2FzZSBvOlI9KHdlLW1lKS84NjRlNTticmVhaztjYXNlIG46Uj13ZS9hO2JyZWFrO2Nhc2UgczpSPXdlL2U7YnJlYWs7Y2FzZSByOlI9d2UvdDticmVhaztkZWZhdWx0OlI9d2V9cmV0dXJuIFY/UjpBLmEoUil9LEUuZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihjKS4kRH0sRS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIEZbdGhpcy4kTF19LEUubG9jYWxlPWZ1bmN0aW9uKFQsJCl7aWYoIVQpcmV0dXJuIHRoaXMuJEw7dmFyIFY9dGhpcy5jbG9uZSgpLFI9TihULCQsITApO3JldHVybiBSJiYoVi4kTD1SKSxWfSxFLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIEEudyh0aGlzLiRkLHRoaXMpfSxFLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LEUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxFLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sRS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LHp9KSgpLEM9cS5wcm90b3R5cGU7cmV0dXJuIEwucHJvdG90eXBlPUMsW1siJG1zIixpXSxbIiRzIixyXSxbIiRtIixzXSxbIiRIIixuXSxbIiRXIixvXSxbIiRNIixjXSxbIiR5IixsXSxbIiREIixmXV0uZm9yRWFjaCgoZnVuY3Rpb24oeil7Q1t6WzFdXT1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy4kZyhFLHpbMF0selsxXSl9fSkpLEwuZXh0ZW5kPWZ1bmN0aW9uKHosRSl7cmV0dXJuIHouJGl8fCh6KEUscSxMKSx6LiRpPSEwKSxMfSxMLmxvY2FsZT1OLEwuaXNEYXlqcz1rLEwudW5peD1mdW5jdGlvbih6KXtyZXR1cm4gTCgxZTMqeil9LEwuZW49RltTXSxMLkxzPUYsTC5wPXt9LEx9KSl9KTt2YXIgUGVlPWh0KChZUyxaUyk9PnsoZnVuY3Rpb24odCxlKXt0eXBlb2YgWVM9PSJvYmplY3QiJiZ0eXBlb2YgWlM8InUiP1pTLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5PWUoKX0pKFlTLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlLGEpe2UucHJvdG90eXBlLmlzVG9kYXk9ZnVuY3Rpb24oKXt2YXIgaT0iWVlZWS1NTS1ERCIscj1hKCk7cmV0dXJuIHRoaXMuZm9ybWF0KGkpPT09ci5mb3JtYXQoaSl9fX0pKX0pO2Z1bmN0aW9uIGtfdCh0KXtyZXR1cm57ZGF5czpNYXRoLnRydW5jKHQvODY0ZTUpLGhvdXJzOk1hdGgudHJ1bmModC8zNmU1JTI0KSxtaW51dGVzOk1hdGgudHJ1bmModC82ZTQlNjApLHNlY29uZHM6TWF0aC50cnVuYyh0LzFlMyU2MCksbWlsbGlzZWNvbmRzOk1hdGgudHJ1bmModCUxZTMpLG1pY3Jvc2Vjb25kczpNYXRoLnRydW5jKEllZSh0KjFlMyklMWUzKSxuYW5vc2Vjb25kczpNYXRoLnRydW5jKEllZSh0KjFlNiklMWUzKX19ZnVuY3Rpb24gU190KHQpe3JldHVybntkYXlzOnQvODY0MDAwMDBuLGhvdXJzOnQvMzYwMDAwMG4lMjRuLG1pbnV0ZXM6dC82MDAwMG4lNjBuLHNlY29uZHM6dC8xMDAwbiU2MG4sbWlsbGlzZWNvbmRzOnQlMTAwMG4sbWljcm9zZWNvbmRzOjBuLG5hbm9zZWNvbmRzOjBufX1mdW5jdGlvbiBYUyh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjp7aWYoTnVtYmVyLmlzRmluaXRlKHQpKXJldHVybiBrX3QodCk7YnJlYWt9Y2FzZSJiaWdpbnQiOnJldHVybiBTX3QodCl9dGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCIpfXZhciBJZWUsTmVlPWIoKCk9PntJZWU9dD0+TnVtYmVyLmlzRmluaXRlKHQpP3Q6MH0pO2Z1bmN0aW9uIHQ2KHQsZSl7bGV0IGE9dHlwZW9mIHQ9PSJiaWdpbnQiO2lmKCFhJiYhTnVtYmVyLmlzRmluaXRlKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTtlPXsuLi5lfTtsZXQgaT10PDA/Ii0iOiIiO3Q9dDwwPy10OnQsZS5jb2xvbk5vdGF0aW9uJiYoZS5jb21wYWN0PSExLGUuZm9ybWF0U3ViTWlsbGlzZWNvbmRzPSExLGUuc2VwYXJhdGVNaWxsaXNlY29uZHM9ITEsZS52ZXJib3NlPSExKSxlLmNvbXBhY3QmJihlLnVuaXRDb3VudD0xLGUuc2Vjb25kc0RlY2ltYWxEaWdpdHM9MCxlLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHM9MCk7bGV0IHI9W10scz0ocCxsKT0+e2xldCBmPU1hdGguZmxvb3IocCoxMCoqbCtUX3QpO3JldHVybihNYXRoLnJvdW5kKGYpLzEwKipsKS50b0ZpeGVkKGwpfSxuPShwLGwsZixnKT0+e2lmKCEoKHIubGVuZ3RoPT09MHx8IWUuY29sb25Ob3RhdGlvbikmJkNfdChwKSYmIShlLmNvbG9uTm90YXRpb24mJmY9PT0ibSIpKSl7aWYoZz8/PVN0cmluZyhwKSxlLmNvbG9uTm90YXRpb24pe2xldCB5PWcuaW5jbHVkZXMoIi4iKT9nLnNwbGl0KCIuIilbMF0ubGVuZ3RoOmcubGVuZ3RoLHY9ci5sZW5ndGg+MD8yOjE7Zz0iMCIucmVwZWF0KE1hdGgubWF4KDAsdi15KSkrZ31lbHNlIGcrPWUudmVyYm9zZT8iICIrX190KGwscCk6ZjtyLnB1c2goZyl9fSxvPVhTKHQpLGQ9QmlnSW50KG8uZGF5cyk7aWYoZS5oaWRlWWVhckFuZERheXM/bihCaWdJbnQoZCkqMjRuK0JpZ0ludChvLmhvdXJzKSwiaG91ciIsImgiKTooZS5oaWRlWWVhcj9uKGQsImRheSIsImQiKToobihkLzM2NW4sInllYXIiLCJ5IiksbihkJTM2NW4sImRheSIsImQiKSksbihOdW1iZXIoby5ob3VycyksImhvdXIiLCJoIikpLG4oTnVtYmVyKG8ubWludXRlcyksIm1pbnV0ZSIsIm0iKSwhZS5oaWRlU2Vjb25kcylpZihlLnNlcGFyYXRlTWlsbGlzZWNvbmRzfHxlLmZvcm1hdFN1Yk1pbGxpc2Vjb25kc3x8IWUuY29sb25Ob3RhdGlvbiYmdDwxZTMmJiFlLnN1YlNlY29uZHNBc0RlY2ltYWxzKXtsZXQgcD1OdW1iZXIoby5zZWNvbmRzKSxsPU51bWJlcihvLm1pbGxpc2Vjb25kcyksZj1OdW1iZXIoby5taWNyb3NlY29uZHMpLGc9TnVtYmVyKG8ubmFub3NlY29uZHMpO2lmKG4ocCwic2Vjb25kIiwicyIpLGUuZm9ybWF0U3ViTWlsbGlzZWNvbmRzKW4obCwibWlsbGlzZWNvbmQiLCJtcyIpLG4oZiwibWljcm9zZWNvbmQiLCJceEI1cyIpLG4oZywibmFub3NlY29uZCIsIm5zIik7ZWxzZXtsZXQgeT1sK2YvMWUzK2cvMWU2LHY9dHlwZW9mIGUubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cz09Im51bWJlciI/ZS5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzOjAsbT15Pj0xP01hdGgucm91bmQoeSk6TWF0aC5jZWlsKHkpLHg9dj95LnRvRml4ZWQodik6bTtuKE51bWJlci5wYXJzZUZsb2F0KHgpLCJtaWxsaXNlY29uZCIsIm1zIix4KX19ZWxzZXtsZXQgcD0oYT9OdW1iZXIodCVMX3QpOnQpLzFlMyU2MCxsPXR5cGVvZiBlLnNlY29uZHNEZWNpbWFsRGlnaXRzPT0ibnVtYmVyIj9lLnNlY29uZHNEZWNpbWFsRGlnaXRzOjEsZj1zKHAsbCksZz1lLmtlZXBEZWNpbWFsc09uV2hvbGVTZWNvbmRzP2Y6Zi5yZXBsYWNlKC9cLjArJC8sIiIpO24oTnVtYmVyLnBhcnNlRmxvYXQoZyksInNlY29uZCIsInMiLGcpfWlmKHIubGVuZ3RoPT09MClyZXR1cm4gaSsiMCIrKGUudmVyYm9zZT8iIG1pbGxpc2Vjb25kcyI6Im1zIik7bGV0IGM9ZS5jb2xvbk5vdGF0aW9uPyI6IjoiICI7cmV0dXJuIHR5cGVvZiBlLnVuaXRDb3VudD09Im51bWJlciImJihyPXIuc2xpY2UoMCxNYXRoLm1heChlLnVuaXRDb3VudCwxKSkpLGkrci5qb2luKGMpfXZhciBDX3QsX190LFRfdCxMX3QsRmVlPWIoKCk9PntOZWUoKTtDX3Q9dD0+dD09PTB8fHQ9PT0wbixfX3Q9KHQsZSk9PmU9PT0xfHxlPT09MW4/dDpgJHt0fXNgLFRfdD0xZS03LExfdD0yNG4qNjBuKjYwbioxMDAwbn0pO3ZhciBKbyxPZWUsX249YigoKT0+e2E2KCk7YnIoKTtkMigpO1lHKCk7RGVlKCk7Sm89VTEoRWVlKCksMSksT2VlPVUxKFBlZSgpLDEpO0ZlZSgpO0pvLmRlZmF1bHQuZXh0ZW5kKE9lZS5kZWZhdWx0KX0pO3ZhciBpNixLUz1iKCgpPT57X24oKTtRUygpO2k2PWNsYXNze2NvbnN0cnVjdG9yKGUsYSxpKXt0aGlzLnN0YXR1cz0iaW5pdGlhbCIsdGhpcy5uZXh0RXhlY3V0aW9uVW5peD0wLHRoaXMuY3JvbkV4cHJlc3Npb249YSx0aGlzLmpvYkZ1bmN0aW9uPWksdGhpcy5jcm9uUGFyc2VyPW5ldyBFYy5Dcm9uKGEpfWNoZWNrRXhlY3V0aW9uKCl7aWYodGhpcy5zdGF0dXM9PT0ic3RvcHBlZCIpcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7aWYodGhpcy5uZXh0RXhlY3V0aW9uVW5peD09PTAmJnRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSxEYXRlLm5vdygpPnRoaXMubmV4dEV4ZWN1dGlvblVuaXgpe2xldCBlPXRoaXMuam9iRnVuY3Rpb24odGhpcy5uZXh0RXhlY3V0aW9uVW5peCk7ZSBpbnN0YW5jZW9mIFByb21pc2UmJmUuY2F0Y2goYT0+Y29uc29sZS5sb2coYSkpLHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9dGhpcy5nZXROZXh0RXhlY3V0aW9uVGltZSgpfXJldHVybiB0aGlzLm5leHRFeGVjdXRpb25Vbml4fWdldE5leHRFeGVjdXRpb25UaW1lKCl7cmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg9RGF0ZS5ub3coKSt0aGlzLmdldFRpbWVUb05leHRFeGVjdXRpb24oKX1nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCl7cmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpfXN0YXJ0KCl7dGhpcy5zdGF0dXM9InN0YXJ0ZWQifXN0b3AoKXt0aGlzLnN0YXR1cz0ic3RvcHBlZCJ9fX0pO3ZhciBKUyxRUz1iKCgpPT57X24oKTtLUygpO0pTPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0dXM9InN0b3BwZWQiLHRoaXMuY3JvbmpvYnM9bmV3IHQyLk9iamVjdE1hcCx0aGlzLmN5Y2xlV2FrZURlZmVycmVkPW51bGx9d2FrZUN5Y2xlKCl7dGhpcy5jeWNsZVdha2VEZWZlcnJlZCYmdGhpcy5jeWNsZVdha2VEZWZlcnJlZC5zdGF0dXM9PT0icGVuZGluZyImJnRoaXMuY3ljbGVXYWtlRGVmZXJyZWQucmVzb2x2ZSgpfWFkZENyb25qb2IoZSxhKXtsZXQgaT1uZXcgaTYodGhpcyxlLGEpO3JldHVybiB0aGlzLmNyb25qb2JzLmFkZChpKSx0aGlzLnN0YXR1cz09PSJzdGFydGVkIiYmKGkuc3RhcnQoKSx0aGlzLndha2VDeWNsZSgpKSxpfXJlbW92ZUNyb25qb2IoZSl7ZS5zdG9wKCksdGhpcy5jcm9uam9icy5yZW1vdmUoZSksdGhpcy5zdGF0dXM9PT0ic3RhcnRlZCImJnRoaXMud2FrZUN5Y2xlKCl9c3RhcnQoKXtpZih0aGlzLnN0YXR1cyE9PSJzdGFydGVkIil7dGhpcy5zdGF0dXM9InN0YXJ0ZWQiO2ZvcihsZXQgZSBvZiB0aGlzLmNyb25qb2JzLmdldEFycmF5KCkpZS5zdGFydCgpO3RoaXMucnVuQ3JvbkN5Y2xlKCl9fWFzeW5jIHJ1bkNyb25DeWNsZSgpe2Zvcig7dGhpcy5zdGF0dXM9PT0ic3RhcnRlZCI7KXt0aGlzLmN5Y2xlV2FrZURlZmVycmVkPW5ldyBIZS5EZWZlcnJlZDtsZXQgZT0xLzA7Zm9yKGxldCBhIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSl7YS5jaGVja0V4ZWN1dGlvbigpO2xldCBpPWEuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpO2k8ZSYmKGU9aSl9aWYoZTwxLzAmJmU+MCl0aGlzLmV4ZWN1dGlvblRpbWVvdXQ9bmV3IHB0LlRpbWVvdXQoZSksYXdhaXQgUHJvbWlzZS5yYWNlKFt0aGlzLmV4ZWN1dGlvblRpbWVvdXQucHJvbWlzZSx0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnByb21pc2VdKSx0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7ZWxzZXtpZihlPD0wKWNvbnRpbnVlO2F3YWl0IHRoaXMuY3ljbGVXYWtlRGVmZXJyZWQucHJvbWlzZX19dGhpcy5jeWNsZVdha2VEZWZlcnJlZD1udWxsfXN0b3AoKXt0aGlzLnN0YXR1cz09PSJzdGFydGVkIiYmKHRoaXMuc3RhdHVzPSJzdG9wcGVkIix0aGlzLmV4ZWN1dGlvblRpbWVvdXQmJnRoaXMuZXhlY3V0aW9uVGltZW91dC5jYW5jZWwoKSx0aGlzLndha2VDeWNsZSgpKTtmb3IobGV0IGUgb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKWUuc3RvcCgpfX19KTt2YXIgVG4sZUMsJF90LEFfdCx0Qz1iKCgpPT57X24oKTtUbj17eWVhcnM6KHQ9MSk9PnQqMzE1NGU3LG1vbnRoczoodD0xKT0+dCoyNjI4ZTYsd2Vla3M6KHQ9MSk9PnQqNjA0OGU1LGRheXM6KHQ9MSk9PnQqODY0ZTUsaG91cnM6KHQ9MSk9PnQqMzZlNSxtaW51dGVzOih0PTEpPT50KjZlNCxzZWNvbmRzOih0PTEpPT50KjFlM30sZUM9dD0+e2xldCBlPTAsYT1pPT57ZT1lK2l9O3JldHVybiB0LnllYXJzJiZhKFRuLnllYXJzKHQueWVhcnMpKSx0Lm1vbnRocyYmYShUbi5tb250aHModC5tb250aHMpKSx0LndlZWtzJiZhKFRuLndlZWtzKHQud2Vla3MpKSx0LmRheXMmJmEoVG4uZGF5cyh0LmRheXMpKSx0LmhvdXJzJiZhKFRuLmhvdXJzKHQuaG91cnMpKSx0Lm1pbnV0ZXMmJmEoVG4ubWludXRlcyh0Lm1pbnV0ZXMpKSx0LnNlY29uZHMmJmEoVG4uc2Vjb25kcyh0LnNlY29uZHMpKSxlfSwkX3Q9dD0+dDYodCksQV90PXQ9PmU2LmZvcm1hdERpc3RhbmNlVG9Ob3cobmV3IERhdGUodCkpfSk7dmFyIGFDLFJlZT1iKCgpPT57X24oKTt0QygpO2FDPWNsYXNzIHQgZXh0ZW5kcyBEYXRle3N0YXRpYyBmcm9tTWlsbGlzKGUpe3JldHVybiBuZXcgdChlKX1zdGF0aWMgZnJvbURhdGUoZSl7cmV0dXJuIG5ldyB0KGUuZ2V0VGltZSgpKX1zdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShlKXtsZXQgYT0vKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhlKSxyPW5ldyBEYXRlKHBhcnNlRmxvYXQoYVszXSkscGFyc2VGbG9hdChhWzJdKS0xLHBhcnNlRmxvYXQoYVsxXSkpLmdldFRpbWUoKTtyZXR1cm4gbmV3IHQocil9c3RhdGljIGZyb21IeXBoZWREYXRlKGUpe2xldCBhPW5ldyBEYXRlKGUpLmdldFRpbWUoKTtyZXR1cm4gbmV3IHQoYSl9c3RhdGljIGZyb21FdXJvcGVhbkRhdGVBbmRUaW1lKGUsYT0iMTI6MDA6MDAiLGk9IkV1cm9wZS9CZXJsaW4iKXtsZXQgcj0vKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhlKSxzPWM9PmAwJHtjfWAuc2xpY2UoLTIpLG49YCR7clszXX0tJHtzKHJbMl0pfS0ke3MoclsxXSl9VCR7YX1gLGQ9Sm8uZGVmYXVsdChuKS50b0RhdGUoKS5nZXRUaW1lKCk7cmV0dXJuIG5ldyB0KGQpfWNvbnN0cnVjdG9yKGU9RGF0ZS5ub3coKSl7c3VwZXIoZSl9ZXhwb3J0VG9FdXJvcGVhbkRhdGUoKXtsZXQgZT10aGlzLmV4cG9ydFRvVW5pdHMoKTtyZXR1cm5gJHtlLmRheVN0cmluZ30uJHtlLm1vbnRoU3RyaW5nfS4ke2UueWVhclN0cmluZ31gfWV4cG9ydFRvSHlwaGVkU29ydGFibGVEYXRlKCl7bGV0IGU9dGhpcy5leHBvcnRUb1VuaXRzKCk7cmV0dXJuYCR7ZS55ZWFyU3RyaW5nfS0ke2UubW9udGhTdHJpbmd9LSR7ZS5kYXlTdHJpbmd9YH1leHBvcnRUb1VuaXRzKCl7bGV0IGU9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLGE9WyJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSIsIlN1bmRheSJdO3JldHVybnt5ZWFyOnRoaXMuZ2V0RnVsbFllYXIoKSx5ZWFyU3RyaW5nOmAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLG1vbnRoOnRoaXMuZ2V0TW9udGgoKSsxLG1vbnRoU3RyaW5nOigiMCIrKHRoaXMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLG1vbnRoTmFtZTplW3RoaXMuZ2V0TW9udGgoKV0sZGF5OnRoaXMuZ2V0RGF0ZSgpLGRheVN0cmluZzooIjAiK3RoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksZGF5T2ZUaGVXZWVrOnRoaXMuZ2V0RGF5KCksZGF5T2ZUaGVXZWVrTmFtZTphW3RoaXMuZ2V0RGF5KCldfX1mb3JtYXQoZSl7cmV0dXJuIEpvLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChlKX1pc1RvZGF5KCl7cmV0dXJuIEpvLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKX1sZXNzVGltZVBhc3NlZFRvTm93KGUpe2xldCBhPWVDKGUpO3JldHVybiBEYXRlLm5vdygpLXRoaXMuZ2V0VGltZSgpPGF9bW9yZVRpbWVQYXNzZWRUb05vdyhlKXtyZXR1cm4hdGhpcy5sZXNzVGltZVBhc3NlZFRvTm93KGUpfX19KTt2YXIgaUMsQmVlPWIoKCk9PntpQz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubmFub1NlY29uZHM9bnVsbCx0aGlzLm1pbGxpU2Vjb25kcz1udWxsLHRoaXMuX21pbGxpU3RhcnQ9bnVsbCx0aGlzLl9taWxsaURpZmY9bnVsbCx0aGlzLl9zdGFydGVkPSExfXN0YXJ0KCl7dGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9taWxsaVN0YXJ0PURhdGUubm93KCl9c3RvcCgpe2lmKHRoaXMuX3N0YXJ0ZWQ9PT0hMSl7Y29uc29sZS5sb2coIkhhc24ndCBzdGFydGVkIHlldCIpO3JldHVybn1yZXR1cm4gdGhpcy5fbWlsbGlEaWZmPURhdGUubm93KCktdGhpcy5fbWlsbGlTdGFydCx0aGlzLm5hbm9TZWNvbmRzPXRoaXMuX21pbGxpRGlmZioxZTMsdGhpcy5taWxsaVNlY29uZHM9dGhpcy5fbWlsbGlEaWZmLHRoaXN9cmVzZXQoKXt0aGlzLm5hbm9TZWNvbmRzPW51bGwsdGhpcy5taWxsaVNlY29uZHM9bnVsbCx0aGlzLl9taWxsaVN0YXJ0PW51bGwsdGhpcy5fbWlsbGlEaWZmPW51bGwsdGhpcy5fc3RhcnRlZD0hMX19fSk7dmFyIHJDLEhlZT1iKCgpPT57X24oKTtyQz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnN0YXR1cz0iaW5pdGlhbCIsdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPW51bGwsdGhpcy5pbnRlcnZhbEpvYnM9W10sdGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcz1lfXN0YXJ0KCl7dGhpcy5zdGF0dXM9InN0YXJ0ZWQiO2xldCBlPW5ldyBEYXRlO3RoaXMuc3RhdHVzQXV0aG9yaXphdGlvbj1lLChhc3luYygpPT57Zm9yKDt0aGlzLnN0YXR1cz09PSJzdGFydGVkIiYmdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPT09ZTspYXdhaXQgcHQuZGVsYXlGb3IodGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyksdGhpcy5leGVjdXRlSW50ZXJ2YWxKb2JzKCl9KSgpfXN0b3AoKXt0aGlzLnN0YXR1cz0ic3RvcHBlZCIsdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uPW51bGx9YWRkSW50ZXJ2YWxKb2IoZSl7dGhpcy5pbnRlcnZhbEpvYnMucHVzaChlKX1leGVjdXRlSW50ZXJ2YWxKb2JzKCl7Zm9yKGxldCBlIG9mIHRoaXMuaW50ZXJ2YWxKb2JzKWUoKX19fSk7dmFyIGMzLHNDPWIoKCk9PntfbigpO2MzPWNsYXNzIHR7c3RhdGljIGZyb21NaWxsaVNlY29uZHMoZSl7cmV0dXJuIG5ldyB0KGUpfXN0YXRpYyBmcm9tVGltZVN0YW1wKGUpe2xldCBhPW5ldyB0O3JldHVybiBhLmNoYW5nZT1hLm1pbGxpU2Vjb25kcy1lLm1pbGxpU2Vjb25kcyxhfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlPW51bGwsZT90eXBlb2YgZT09Im51bWJlciImJih0aGlzLmRhdGU9bmV3IERhdGUoZSkpOnRoaXMuZGF0ZT1uZXcgRGF0ZSx0aGlzLm1pbGxpU2Vjb25kcz10aGlzLmRhdGUuZ2V0VGltZSgpLHRoaXMuZXBvY2h0aW1lPU1hdGguZmxvb3IodGhpcy5taWxsaVNlY29uZHMvMWUzKX1pc09sZGVyVGhhbk90aGVyVGltZVN0YW1wKGUsYT0wKXtyZXR1cm4gdGhpcy5taWxsaVNlY29uZHM8ZS5taWxsaVNlY29uZHMtYX1pc09sZGVyVGhhbihlLGE9MCl7cmV0dXJuIHRoaXMubWlsbGlTZWNvbmRzK2E8ZS5taWxsaVNlY29uZHN9aXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGUsYT0wKXtyZXR1cm4gdGhpcy5taWxsaVNlY29uZHM+ZS5taWxsaVNlY29uZHMrYX1pc1lvdW5nZXJUaGFuTWlsbGlTZWNvbmRzKGUpe2xldCBpPW5ldyB0KCkuZXBvY2h0aW1lLWUscj1uZXcgdChpKTtyZXR1cm4gdGhpcy5pc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAocil9fX0pO3ZhciBuQyxxZWU9YigoKT0+e19uKCk7c0MoKTtuQz1jbGFzc3tnZXQgdGltZUxlZnQoKXtyZXR1cm4gdGhpcy50aW1lSW5NaWxsaXNlY29uZHMtdGhpcy5wYXVzZWRBdC5jaGFuZ2V9Y29uc3RydWN0b3IoZSl7dGhpcy5zdGF0ZT0iaW5pdGlhdGVkIix0aGlzLmNvbXBsZXRlZERlZmVycmVkPUhlLmRlZmVyKCksdGhpcy50aW1lSW5NaWxsaXNlY29uZHM9ZSx0aGlzLmNvbXBsZXRlZD10aGlzLmNvbXBsZXRlZERlZmVycmVkLnByb21pc2V9c3RhcnQoKXtpZighdGhpcy5zdGFydGVkQXQpdGhpcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCl9LHRoaXMudGltZUluTWlsbGlzZWNvbmRzKSx0aGlzLnN0YXJ0ZWRBdD1uZXcgYzM7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInRpbWVyIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlLiBQbGVhc2UgdXNlIHJlc3VtZSBpbnN0ZWFkIil9cGF1c2UoKXt0aGlzLnN0YXJ0ZWRBdCYmKGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRUaW1lb3V0KSx0aGlzLmN1cnJlbnRUaW1lb3V0PW51bGwsdGhpcy5wYXVzZWRBdD1jMy5mcm9tVGltZVN0YW1wKHRoaXMuc3RhcnRlZEF0KSl9cmVzdW1lKCl7aWYodGhpcy5zdGFydGVkQXQpdGhpcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCl9LHRoaXMudGltZUxlZnQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpfXJlc2V0KCl7dGhpcy5wYXVzZSgpLHRoaXMuc3RhcnRlZEF0PW51bGwsdGhpcy5wYXVzZWRBdD1udWxsfX19KTt2YXIgZnM9e307V2UoZnMse0Nyb25Kb2I6KCk9Pmk2LENyb25NYW5hZ2VyOigpPT5KUyxFeHRlbmRlZERhdGU6KCk9PmFDLEhydE1lYXN1cmVtZW50OigpPT5pQyxJbnRlcnZhbDooKT0+ckMsVGltZVN0YW1wOigpPT5jMyxUaW1lcjooKT0+bkMsZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTooKT0+QV90LGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZzooKT0+JF90LGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0czooKT0+ZUMsdW5pdHM6KCk9PlRufSk7dmFyIG9DPWIoKCk9PntRUygpO0tTKCk7UmVlKCk7QmVlKCk7SGVlKCk7cWVlKCk7c0MoKTt0QygpfSk7dmFyIGplZT1odCgoZWsxLFZlZSk9PnsidXNlIHN0cmljdCI7VmVlLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnBhcmVudD1udWxsLHRoaXMucHJldmlvdXNTaWJsaW5nPW51bGwsdGhpcy5uZXh0U2libGluZz1udWxsLHRoaXMuZmlyc3RDaGlsZD1udWxsLHRoaXMubGFzdENoaWxkPW51bGwsdGhpcy5jaGlsZHJlblZlcnNpb249MCx0aGlzLmNoaWxkSW5kZXhDYWNoZWRVcFRvPW51bGwsdGhpcy5jYWNoZWRJbmRleD0tMSx0aGlzLmNhY2hlZEluZGV4VmVyc2lvbj1OYU59Z2V0IGlzQXR0YWNoZWQoKXtyZXR1cm4hISh0aGlzLnBhcmVudHx8dGhpcy5wcmV2aW91c1NpYmxpbmd8fHRoaXMubmV4dFNpYmxpbmcpfWdldCBoYXNDaGlsZHJlbigpe3JldHVybiEhdGhpcy5maXJzdENoaWxkfWNoaWxkcmVuQ2hhbmdlZCgpe3RoaXMuY2hpbGRyZW5WZXJzaW9uPXRoaXMuY2hpbGRyZW5WZXJzaW9uKzEmNDI5NDk2NzI5NSx0aGlzLmNoaWxkSW5kZXhDYWNoZWRVcFRvPW51bGx9Z2V0Q2FjaGVkSW5kZXgoZSl7cmV0dXJuIHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uIT09ZS5jaGlsZHJlblZlcnNpb24/KHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uPU5hTiwtMSk6dGhpcy5jYWNoZWRJbmRleH1zZXRDYWNoZWRJbmRleChlLGEpe3RoaXMuY2FjaGVkSW5kZXhWZXJzaW9uPWUuY2hpbGRyZW5WZXJzaW9uLHRoaXMuY2FjaGVkSW5kZXg9YX19fSk7dmFyIFdlZT1odCgodGsxLFVlZSk9PnsidXNlIHN0cmljdCI7VWVlLmV4cG9ydHM9T2JqZWN0LmZyZWV6ZSh7RElTQ09OTkVDVEVEOjEsUFJFQ0VESU5HOjIsRk9MTE9XSU5HOjQsQ09OVEFJTlM6OCxDT05UQUlORURfQlk6MTZ9KX0pO3ZhciBLZWU9aHQoKGFrMSxYZWUpPT57InVzZSBzdHJpY3QiO3ZhciBHZWU9U3ltYm9sKCksWWVlPVN5bWJvbCgpLExuPVN5bWJvbCgpLFplZT1TeW1ib2woKSxGaT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEsaSxyKXt0aGlzW0dlZV09ZSx0aGlzW1llZV09YSx0aGlzW0xuXT1pLHRoaXNbWmVlXT1yfW5leHQoKXtsZXQgZT10aGlzW0dlZV0sYT10aGlzW1plZV0saT10aGlzW1llZV07aWYoIXRoaXNbTG5dKXJldHVybntkb25lOiEwLHZhbHVlOml9O2xldCByPXRoaXNbTG5dO3JldHVybiBhPT09MT90aGlzW0xuXT1lLl9ub2RlKHIpLnByZXZpb3VzU2libGluZzphPT09Mj90aGlzW0xuXT1lLl9ub2RlKHIpLm5leHRTaWJsaW5nOmE9PT0zP3RoaXNbTG5dPWUuX25vZGUocikucGFyZW50OmE9PT00P3RoaXNbTG5dPWUucHJlY2VkaW5nKHIse3Jvb3Q6aX0pOnRoaXNbTG5dPWUuZm9sbG93aW5nKHIse3Jvb3Q6aX0pLHtkb25lOiExLHZhbHVlOnJ9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEZpLnByb3RvdHlwZSxTeW1ib2wuaXRlcmF0b3Ise3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHdyaXRhYmxlOiExfSksRmkuUFJFVj0xLEZpLk5FWFQ9MixGaS5QQVJFTlQ9MyxGaS5QUkVDRURJTkc9NCxGaS5GT0xMT1dJTkc9NSxPYmplY3QuZnJlZXplKEZpKSxPYmplY3QuZnJlZXplKEZpLnByb3RvdHlwZSksWGVlLmV4cG9ydHM9Rml9KTt2YXIgY0M9aHQoKGlrMSxRZWUpPT57InVzZSBzdHJpY3QiO3ZhciBFX3Q9amVlKCksJG49V2VlKCksbGk9S2VlKCk7ZnVuY3Rpb24gbEMoKXtyZXR1cm4hMH1mdW5jdGlvbiBkMyh0LGUpe3JldHVybiB0W3QubGVuZ3RoLTEtZV19dmFyIGtoPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3ltYm9sPVN5bWJvbChlfHwiU3ltYm9sVHJlZSBkYXRhIil9aW5pdGlhbGl6ZShlKXtyZXR1cm4gdGhpcy5fbm9kZShlKSxlfV9ub2RlKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCBhPWVbdGhpcy5zeW1ib2xdO3JldHVybiBhfHwoZVt0aGlzLnN5bWJvbF09bmV3IEVfdCl9aGFzQ2hpbGRyZW4oZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkuaGFzQ2hpbGRyZW59Zmlyc3RDaGlsZChlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5maXJzdENoaWxkfWxhc3RDaGlsZChlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5sYXN0Q2hpbGR9cHJldmlvdXNTaWJsaW5nKGUpe3JldHVybiB0aGlzLl9ub2RlKGUpLnByZXZpb3VzU2libGluZ31uZXh0U2libGluZyhlKXtyZXR1cm4gdGhpcy5fbm9kZShlKS5uZXh0U2libGluZ31wYXJlbnQoZSl7cmV0dXJuIHRoaXMuX25vZGUoZSkucGFyZW50fWxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGUpe2xldCBhLGk9ZTtmb3IoO2E9dGhpcy5fbm9kZShpKS5sYXN0Q2hpbGQ7KWk9YTtyZXR1cm4gaX1wcmVjZWRpbmcoZSxhKXtsZXQgaT1hJiZhLnJvb3Q7aWYoZT09PWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbm9kZShlKS5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIHI/dGhpcy5sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChyKTp0aGlzLl9ub2RlKGUpLnBhcmVudH1mb2xsb3dpbmcoZSxhKXtsZXQgaT1hJiZhLnJvb3Qscz0hKGEmJmEuc2tpcENoaWxkcmVuKSYmdGhpcy5fbm9kZShlKS5maXJzdENoaWxkO2lmKHMpcmV0dXJuIHM7bGV0IG49ZTtkb3tpZihuPT09aSlyZXR1cm4gbnVsbDtsZXQgbz10aGlzLl9ub2RlKG4pLm5leHRTaWJsaW5nO2lmKG8pcmV0dXJuIG87bj10aGlzLl9ub2RlKG4pLnBhcmVudH13aGlsZShuKTtyZXR1cm4gbnVsbH1jaGlsZHJlblRvQXJyYXkoZSxhKXtsZXQgaT1hJiZhLmFycmF5fHxbXSxyPWEmJmEuZmlsdGVyfHxsQyxzPWEmJmEudGhpc0FyZ3x8dm9pZCAwLG49dGhpcy5fbm9kZShlKSxvPW4uZmlyc3RDaGlsZCxkPTA7Zm9yKDtvOyl7bGV0IGM9dGhpcy5fbm9kZShvKTtjLnNldENhY2hlZEluZGV4KG4sZCksci5jYWxsKHMsbykmJmkucHVzaChvKSxvPWMubmV4dFNpYmxpbmcsKytkfXJldHVybiBpfWFuY2VzdG9yc1RvQXJyYXkoZSxhKXtsZXQgaT1hJiZhLmFycmF5fHxbXSxyPWEmJmEuZmlsdGVyfHxsQyxzPWEmJmEudGhpc0FyZ3x8dm9pZCAwLG49ZTtmb3IoO247KXIuY2FsbChzLG4pJiZpLnB1c2gobiksbj10aGlzLl9ub2RlKG4pLnBhcmVudDtyZXR1cm4gaX10cmVlVG9BcnJheShlLGEpe2xldCBpPWEmJmEuYXJyYXl8fFtdLHI9YSYmYS5maWx0ZXJ8fGxDLHM9YSYmYS50aGlzQXJnfHx2b2lkIDAsbj1lO2Zvcig7bjspci5jYWxsKHMsbikmJmkucHVzaChuKSxuPXRoaXMuZm9sbG93aW5nKG4se3Jvb3Q6ZX0pO3JldHVybiBpfWNoaWxkcmVuSXRlcmF0b3IoZSxhKXtsZXQgaT1hJiZhLnJldmVyc2Uscj10aGlzLl9ub2RlKGUpO3JldHVybiBuZXcgbGkodGhpcyxlLGk/ci5sYXN0Q2hpbGQ6ci5maXJzdENoaWxkLGk/bGkuUFJFVjpsaS5ORVhUKX1wcmV2aW91c1NpYmxpbmdzSXRlcmF0b3IoZSl7cmV0dXJuIG5ldyBsaSh0aGlzLGUsdGhpcy5fbm9kZShlKS5wcmV2aW91c1NpYmxpbmcsbGkuUFJFVil9bmV4dFNpYmxpbmdzSXRlcmF0b3IoZSl7cmV0dXJuIG5ldyBsaSh0aGlzLGUsdGhpcy5fbm9kZShlKS5uZXh0U2libGluZyxsaS5ORVhUKX1hbmNlc3RvcnNJdGVyYXRvcihlKXtyZXR1cm4gbmV3IGxpKHRoaXMsZSxlLGxpLlBBUkVOVCl9dHJlZUl0ZXJhdG9yKGUsYSl7bGV0IGk9YSYmYS5yZXZlcnNlO3JldHVybiBuZXcgbGkodGhpcyxlLGk/dGhpcy5sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChlKTplLGk/bGkuUFJFQ0VESU5HOmxpLkZPTExPV0lORyl9aW5kZXgoZSl7bGV0IGE9dGhpcy5fbm9kZShlKSxpPXRoaXMuX25vZGUoYS5wYXJlbnQpO2lmKCFpKXJldHVybi0xO2xldCByPWEuZ2V0Q2FjaGVkSW5kZXgoaSk7aWYocj49MClyZXR1cm4gcjtyPTA7bGV0IHM9aS5maXJzdENoaWxkO2lmKGkuY2hpbGRJbmRleENhY2hlZFVwVG8pe2xldCBuPXRoaXMuX25vZGUoaS5jaGlsZEluZGV4Q2FjaGVkVXBUbyk7cz1uLm5leHRTaWJsaW5nLHI9bi5nZXRDYWNoZWRJbmRleChpKSsxfWZvcig7czspe2xldCBuPXRoaXMuX25vZGUocyk7aWYobi5zZXRDYWNoZWRJbmRleChpLHIpLHM9PT1lKWJyZWFrOysrcixzPW4ubmV4dFNpYmxpbmd9cmV0dXJuIGkuY2hpbGRJbmRleENhY2hlZFVwVG89ZSxyfWNoaWxkcmVuQ291bnQoZSl7bGV0IGE9dGhpcy5fbm9kZShlKTtyZXR1cm4gYS5sYXN0Q2hpbGQ/dGhpcy5pbmRleChhLmxhc3RDaGlsZCkrMTowfWNvbXBhcmVUcmVlUG9zaXRpb24oZSxhKXtpZihlPT09YSlyZXR1cm4gMDtsZXQgaT1bXTt7bGV0IHA9ZTtmb3IoO3A7KXtpZihwPT09YSlyZXR1cm4gJG4uQ09OVEFJTlN8JG4uUFJFQ0VESU5HO2kucHVzaChwKSxwPXRoaXMucGFyZW50KHApfX1sZXQgcj1bXTt7bGV0IHA9YTtmb3IoO3A7KXtpZihwPT09ZSlyZXR1cm4gJG4uQ09OVEFJTkVEX0JZfCRuLkZPTExPV0lORztyLnB1c2gocCkscD10aGlzLnBhcmVudChwKX19bGV0IHM9ZDMoaSwwKTtpZighc3x8cyE9PWQzKHIsMCkpcmV0dXJuICRuLkRJU0NPTk5FQ1RFRDtsZXQgbj0wLG89TWF0aC5taW4oaS5sZW5ndGgsci5sZW5ndGgpO2ZvcihsZXQgcD0wO3A8bzsrK3Ape2xldCBsPWQzKGkscCksZj1kMyhyLHApO2lmKGwhPT1mKWJyZWFrO249cH1sZXQgZD10aGlzLmluZGV4KGQzKGksbisxKSk7cmV0dXJuIHRoaXMuaW5kZXgoZDMocixuKzEpKTxkPyRuLlBSRUNFRElORzokbi5GT0xMT1dJTkd9cmVtb3ZlKGUpe2xldCBhPXRoaXMuX25vZGUoZSksaT10aGlzLl9ub2RlKGEucGFyZW50KSxyPXRoaXMuX25vZGUoYS5wcmV2aW91c1NpYmxpbmcpLHM9dGhpcy5fbm9kZShhLm5leHRTaWJsaW5nKTtyZXR1cm4gaSYmKGkuZmlyc3RDaGlsZD09PWUmJihpLmZpcnN0Q2hpbGQ9YS5uZXh0U2libGluZyksaS5sYXN0Q2hpbGQ9PT1lJiYoaS5sYXN0Q2hpbGQ9YS5wcmV2aW91c1NpYmxpbmcpKSxyJiYoci5uZXh0U2libGluZz1hLm5leHRTaWJsaW5nKSxzJiYocy5wcmV2aW91c1NpYmxpbmc9YS5wcmV2aW91c1NpYmxpbmcpLGEucGFyZW50PW51bGwsYS5wcmV2aW91c1NpYmxpbmc9bnVsbCxhLm5leHRTaWJsaW5nPW51bGwsYS5jYWNoZWRJbmRleD0tMSxhLmNhY2hlZEluZGV4VmVyc2lvbj1OYU4saSYmaS5jaGlsZHJlbkNoYW5nZWQoKSxlfWluc2VydEJlZm9yZShlLGEpe2xldCBpPXRoaXMuX25vZGUoZSkscj10aGlzLl9ub2RlKGkucHJldmlvdXNTaWJsaW5nKSxzPXRoaXMuX25vZGUoYSksbj10aGlzLl9ub2RlKGkucGFyZW50KTtpZihzLmlzQXR0YWNoZWQpdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTtyZXR1cm4gcy5wYXJlbnQ9aS5wYXJlbnQscy5wcmV2aW91c1NpYmxpbmc9aS5wcmV2aW91c1NpYmxpbmcscy5uZXh0U2libGluZz1lLGkucHJldmlvdXNTaWJsaW5nPWEsciYmKHIubmV4dFNpYmxpbmc9YSksbiYmbi5maXJzdENoaWxkPT09ZSYmKG4uZmlyc3RDaGlsZD1hKSxuJiZuLmNoaWxkcmVuQ2hhbmdlZCgpLGF9aW5zZXJ0QWZ0ZXIoZSxhKXtsZXQgaT10aGlzLl9ub2RlKGUpLHI9dGhpcy5fbm9kZShpLm5leHRTaWJsaW5nKSxzPXRoaXMuX25vZGUoYSksbj10aGlzLl9ub2RlKGkucGFyZW50KTtpZihzLmlzQXR0YWNoZWQpdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTtyZXR1cm4gcy5wYXJlbnQ9aS5wYXJlbnQscy5wcmV2aW91c1NpYmxpbmc9ZSxzLm5leHRTaWJsaW5nPWkubmV4dFNpYmxpbmcsaS5uZXh0U2libGluZz1hLHImJihyLnByZXZpb3VzU2libGluZz1hKSxuJiZuLmxhc3RDaGlsZD09PWUmJihuLmxhc3RDaGlsZD1hKSxuJiZuLmNoaWxkcmVuQ2hhbmdlZCgpLGF9cHJlcGVuZENoaWxkKGUsYSl7bGV0IGk9dGhpcy5fbm9kZShlKSxyPXRoaXMuX25vZGUoYSk7aWYoci5pc0F0dGFjaGVkKXRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7cmV0dXJuIGkuaGFzQ2hpbGRyZW4/dGhpcy5pbnNlcnRCZWZvcmUoaS5maXJzdENoaWxkLGEpOihyLnBhcmVudD1lLGkuZmlyc3RDaGlsZD1hLGkubGFzdENoaWxkPWEsaS5jaGlsZHJlbkNoYW5nZWQoKSksYX1hcHBlbmRDaGlsZChlLGEpe2xldCBpPXRoaXMuX25vZGUoZSkscj10aGlzLl9ub2RlKGEpO2lmKHIuaXNBdHRhY2hlZCl0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpO3JldHVybiBpLmhhc0NoaWxkcmVuP3RoaXMuaW5zZXJ0QWZ0ZXIoaS5sYXN0Q2hpbGQsYSk6KHIucGFyZW50PWUsaS5maXJzdENoaWxkPWEsaS5sYXN0Q2hpbGQ9YSxpLmNoaWxkcmVuQ2hhbmdlZCgpKSxhfX07UWVlLmV4cG9ydHM9a2gsa2guVHJlZVBvc2l0aW9uPSRufSk7dmFyIFNoLGNpPWIoKCk9PnticigpO09rKCk7ZDIoKTtJaSgpO29DKCk7U2g9VTEoY0MoKSwxKX0pO3ZhciBkQyxKZWU9YigoKT0+e2NpKCk7ZEM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmV4ZWN1dGlvblNsb3RzPVtdLHRoaXMuaXNQcm9jZXNzaW5nPSExLHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k9MS8wLHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50PTAsdGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWU9W119YXN5bmMgZ2V0RXhjbHVzaXZlRXhlY3V0aW9uU2xvdChlLGEpe2xldCBpPUhlLmRlZmVyKCkscj17ZnVuY1RvRXhlY3V0ZTplLGV4ZWN1dGlvbkRlZmVycmVkOmksdGltZW91dDphLG1vZGU6ImV4Y2x1c2l2ZSJ9O3JldHVybiB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2gociksdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSxpLnByb21pc2V9YXN5bmMgZ2V0Tm9uRXhjbHVzaXZlRXhlY3V0aW9uU2xvdChlLGEpe2xldCBpPUhlLmRlZmVyKCkscj17ZnVuY1RvRXhlY3V0ZTplLGV4ZWN1dGlvbkRlZmVycmVkOmksdGltZW91dDphLG1vZGU6Im5vbmV4Y2x1c2l2ZSJ9O3JldHVybiB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2gociksdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSxpLnByb21pc2V9c2V0Tm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3koZSl7aWYoIU51bWJlci5pc0Zpbml0ZShlKXx8ZTwxKXRocm93IG5ldyBFcnJvcigibm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMSIpO3RoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k9ZX1nZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5fWdldEFjdGl2ZU5vbkV4Y2x1c2l2ZUNvdW50KCl7cmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50fWdldFBlbmRpbmdOb25FeGNsdXNpdmVDb3VudCgpe3JldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5sZW5ndGh9YXN5bmMgcHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCl7aWYoIXRoaXMuaXNQcm9jZXNzaW5nKXtmb3IodGhpcy5pc1Byb2Nlc3Npbmc9ITA7dGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGg+MDspe2xldCBlPXRoaXMuZXhlY3V0aW9uU2xvdHNbMF07aWYoZS5tb2RlPT09ImV4Y2x1c2l2ZSIpYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChlKSx0aGlzLmV4ZWN1dGlvblNsb3RzLnNoaWZ0KCk7ZWxzZXtsZXQgYT1bXTtmb3IoO3RoaXMuZXhlY3V0aW9uU2xvdHMubGVuZ3RoPjAmJnRoaXMuZXhlY3V0aW9uU2xvdHNbMF0ubW9kZT09PSJub25leGNsdXNpdmUiOylhLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTthd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhhKX19dGhpcy5pc1Byb2Nlc3Npbmc9ITF9fWFzeW5jIGV4ZWN1dGVFeGNsdXNpdmVTbG90KGUpe3RyeXtpZihlLnRpbWVvdXQpe2xldCBhPWF3YWl0IFByb21pc2UucmFjZShbZS5mdW5jVG9FeGVjdXRlKCkscHQuZGVsYXlGb3IoZS50aW1lb3V0KS50aGVuKCgpPT57dGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKX0pXSk7ZS5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKGEpfWVsc2V7bGV0IGE9YXdhaXQgZS5mdW5jVG9FeGVjdXRlKCk7ZS5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKGEpfX1jYXRjaChhKXtlLmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChhKX19YXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKGUpe2xldCBhPWUubWFwKGFzeW5jIGk9Pnthd2FpdCB0aGlzLndhaXRGb3JOb25FeGNsdXNpdmVTbG90KCk7dHJ5e2lmKGkudGltZW91dCl7bGV0IHI9YXdhaXQgUHJvbWlzZS5yYWNlKFtpLmZ1bmNUb0V4ZWN1dGUoKSxwdC5kZWxheUZvcihpLnRpbWVvdXQpLnRoZW4oKCk9Pnt0aHJvdyBuZXcgRXJyb3IoIlRpbWVvdXQgcmVhY2hlZCIpfSldKTtpLmV4ZWN1dGlvbkRlZmVycmVkLnJlc29sdmUocil9ZWxzZXtsZXQgcj1hd2FpdCBpLmZ1bmNUb0V4ZWN1dGUoKTtpLmV4ZWN1dGlvbkRlZmVycmVkLnJlc29sdmUocil9fWNhdGNoKHIpe2kuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KHIpfWZpbmFsbHl7dGhpcy5yZWxlYXNlTm9uRXhjbHVzaXZlU2xvdCgpfX0pO2F3YWl0IFByb21pc2UuYWxsKGEpfXdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCl7cmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50PHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3k/KHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50KyssUHJvbWlzZS5yZXNvbHZlKCkpOm5ldyBQcm9taXNlKGU9Pnt0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5wdXNoKCgpPT57dGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQrKyxlKCl9KX0pfXJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCl7dGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQtLTtsZXQgZT10aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpO2UmJmUoKX19fSk7dmFyIHBDLGV0ZT1iKCgpPT57Y2koKTtwQz1jbGFzc3tjb25zdHJ1Y3RvcihlPTE2KXt0aGlzLmhhc1NwYWNlPW5ldyBEdC5yeGpzLlN1YmplY3QsdGhpcy5pdGVtc0F2YWlsYWJsZT1uZXcgRHQucnhqcy5TdWJqZWN0LHRoaXMuZGF0YT1bXSx0aGlzLmhpZ2hXYXRlck1hcms9ZX1wdXNoKGUpe3RoaXMuZGF0YS5wdXNoKGUpLHRoaXMuaXRlbXNBdmFpbGFibGUubmV4dCgiaXRlbXNBdmFpbGFibGUiKTtsZXQgYT10aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKTtyZXR1cm4gYSYmdGhpcy5oYXNTcGFjZS5uZXh0KCJoYXNTcGFjZSIpLGF9c2hpZnQoKXtsZXQgZT10aGlzLmRhdGEuc2hpZnQoKTtyZXR1cm4gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCkmJnRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKSxlfWNoZWNrU3BhY2VBdmFpbGFibGUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDx0aGlzLmhpZ2hXYXRlck1hcmt9Y2hlY2tIYXNJdGVtcygpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoPjB9d2FpdEZvclNwYWNlKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntpZih0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKSllKCk7ZWxzZXtsZXQgYT10aGlzLmhhc1NwYWNlLnN1YnNjcmliZSgoKT0+e2EudW5zdWJzY3JpYmUoKSxlKCl9KX19KX13YWl0Rm9ySXRlbXMoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2lmKHRoaXMuZGF0YS5sZW5ndGg+MCllKCk7ZWxzZXtsZXQgYT10aGlzLml0ZW1zQXZhaWxhYmxlLnN1YnNjcmliZSgoKT0+e2EudW5zdWJzY3JpYmUoKSxlKCl9KX19KX19fSk7dmFyIHI2LGhDPWIoKCk9PntjaSgpO3I2PWNsYXNzIHR7Y29uc3RydWN0b3IoKXt0aGlzLm1hcE9iamVjdD17fX1pc1VuaXF1ZUtleShlKXtyZXR1cm4hdGhpcy5tYXBPYmplY3RbZV19YWRkVG9NYXAoZSxhLGkpe3JldHVybiB0aGlzLmlzVW5pcXVlS2V5KGUpfHxpJiZpLmZvcmNlPyh0aGlzLm1hcE9iamVjdFtlXT1hLCEwKTohMX1nZXRCeUtleShlKXtyZXR1cm4gdGhpcy5tYXBPYmplY3RbZV19cmVtb3ZlRnJvbU1hcChlKXtsZXQgYT10aGlzLmdldEJ5S2V5KGUpO3JldHVybiBkZWxldGUgdGhpcy5tYXBPYmplY3RbZV0sYX1nZXRLZXlzKCl7bGV0IGU9W107Zm9yKGxldCBhIGluIHRoaXMubWFwT2JqZWN0KXRoaXMubWFwT2JqZWN0W2FdJiZlLnB1c2goYSk7cmV0dXJuIGV9Y2xlYW4oKXt0aGlzLm1hcE9iamVjdD17fX1jb25jYXQoZSl7bGV0IGE9bmV3IHQ7Zm9yKGxldCBpIG9mIHRoaXMuZ2V0S2V5cygpKWEuYWRkVG9NYXAoaSx0aGlzLmdldEJ5S2V5KGkpKTtmb3IobGV0IGkgb2YgZS5nZXRLZXlzKCkpYS5hZGRUb01hcChpLGUuZ2V0QnlLZXkoaSkse2ZvcmNlOiEwfSk7cmV0dXJuIGF9YWRkQWxsRnJvbU90aGVyKGUpe2ZvcihsZXQgYSBvZiBlLmdldEtleXMoKSl0aGlzLmFkZFRvTWFwKGEsZS5nZXRCeUtleShhKSx7Zm9yY2U6ITB9KX1hc3luYyBmaW5kKGUpe2ZvcihsZXQgYSBvZiB0aGlzLmdldEtleXMoKSl7bGV0IGk9dGhpcy5nZXRCeUtleShhKTtpZihhd2FpdCBlKGkpKXJldHVybiBpfX19fSk7dmFyIHR0ZSxlMCxDaD1iKCgpPT57Y2koKTtoQygpO3R0ZT0odD0idW5pIik9PmAke3R9eHh4eHh4eHh4eHhgLnJlcGxhY2UoL1t4eV0vZyxlPT57bGV0IGE9TWF0aC5yYW5kb20oKSoxNnwwO3JldHVybihlPT09IngiP2E6YSYzfDgpLnRvU3RyaW5nKDE2KX0pLGUwPWNsYXNzIHR7Y29uc3RydWN0b3IoKXt0aGlzLmZhc3RNYXA9bmV3IHI2LHRoaXMuZXZlbnRTdWJqZWN0PW5ldyBEdC5yeGpzLlN1YmplY3R9YWRkTWFwcGVkVW5pcXVlKGUsYSl7dGhpcy5mYXN0TWFwLmFkZFRvTWFwKGUsYSl9Z2V0TWFwcGVkVW5pcXVlKGUpe3JldHVybiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoZSl9cmVtb3ZlTWFwcGVkVW5pcXVlKGUpe2xldCBhPXRoaXMuZ2V0TWFwcGVkVW5pcXVlKGUpfWFkZChlKXtmb3IobGV0IGkgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlpZih0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoaSk9PT1lKXJldHVybiBpO2xldCBhPXR0ZSgia2V5Iik7cmV0dXJuIHRoaXMuYWRkTWFwcGVkVW5pcXVlKGEsZSksdGhpcy5ldmVudFN1YmplY3QubmV4dCh7b3BlcmF0aW9uOiJhZGQiLHBheWxvYWQ6ZX0pLGF9YWRkQXJyYXkoZSl7Zm9yKGxldCBhIG9mIGUpdGhpcy5hZGQoYSl9Y2hlY2tGb3JPYmplY3QoZSl7cmV0dXJuISF0aGlzLmdldEtleUZvck9iamVjdChlKX1nZXRLZXlGb3JPYmplY3QoZSl7bGV0IGE9bnVsbDtmb3IobGV0IGkgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlpZighYSYmdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGkpPT09ZSlhPWk7ZWxzZSBjb250aW51ZTtyZXR1cm4gYX1hc3luYyBmaW5kKGUpe3JldHVybiB0aGlzLmZhc3RNYXAuZmluZChlKX1maW5kU3luYyhlKXtmb3IobGV0IGEgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlpZihlKHRoaXMuZmFzdE1hcC5nZXRCeUtleShhKSkpcmV0dXJuIHRoaXMuZ2V0TWFwcGVkVW5pcXVlKGEpfWFzeW5jIGZpbmRPbmVBbmRSZW1vdmUoZSl7bGV0IGE9YXdhaXQgdGhpcy5maW5kKGUpO3JldHVybiBhJiZ0aGlzLnJlbW92ZShhKSxhfWZpbmRPbmVBbmRSZW1vdmVTeW5jKGUpe2xldCBhPXRoaXMuZmluZFN5bmMoZSk7cmV0dXJuIGEmJnRoaXMucmVtb3ZlKGEpLGF9YXN5bmMgZm9yRWFjaChlKXtmb3IobGV0IGEgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSlhd2FpdCBlKHRoaXMuZmFzdE1hcC5nZXRCeUtleShhKSl9Z2V0T25lQW5kUmVtb3ZlKCl7bGV0IGU9dGhpcy5mYXN0TWFwLmdldEtleXMoKTtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7e2xldCBhPWVbMF0saT10aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChhKTtyZXR1cm4gdGhpcy5ldmVudFN1YmplY3QubmV4dCh7b3BlcmF0aW9uOiJyZW1vdmUiLHBheWxvYWQ6aX0pLGl9fWdldEFycmF5KCl7bGV0IGU9W107Zm9yKGxldCBhIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpZS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShhKSk7cmV0dXJuIGV9aXNFbXB0eSgpe3JldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aD09PTB9cmVtb3ZlKGUpe2lmKHRoaXMuY2hlY2tGb3JPYmplY3QoZSkpe2xldCBhPXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KGUpLGk9dGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoYSk7cmV0dXJuIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoe29wZXJhdGlvbjoicmVtb3ZlIixwYXlsb2FkOml9KSxpfXJldHVybiBudWxsfXdpcGUoKXtmb3IobGV0IGUgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSl0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChlKX1jb25jYXQoZSl7bGV0IGE9bmV3IHQ7cmV0dXJuIGEuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIodGhpcy5mYXN0TWFwKSxhLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKGUuZmFzdE1hcCksYX1hZGRBbGxGcm9tT3RoZXIoZSl7dGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihlLmZhc3RNYXApfX19KTt2YXIgczYsdUM9YigoKT0+e2NpKCk7ZkMoKTtzNj1jbGFzc3tnZXQgY29tcGFyaXNvblN0cmluZygpe3JldHVybiB0aGlzLmNvbXBhcmlzb25GdW5jKHRoaXMub3JpZ2luYWxJbnRlcmVzdCl9ZnVsbGZpbGxJbnRlcmVzdChlKXt0aGlzLmlzRnVsbGZpbGxlZD0hMCx0aGlzLmZ1bGxmaWxsbWVudFN0b3JlPVtdLHRoaXMuaW50ZXJlc3REZWZlcnJlZC5yZXNvbHZlKGUpfWNvbnN0cnVjdG9yKGUsYSxpLHIpe3RoaXMuZGVzdHJ1Y3Rpb25UaW1lcj1uZXcgZnMuVGltZXIoMWU0KSx0aGlzLmlzRnVsbGZpbGxlZD0hMSx0aGlzLmZ1bGxmaWxsbWVudFN0b3JlPVtdLHRoaXMuaW50ZXJlc3REZWZlcnJlZD1uZXcgSGUuRGVmZXJyZWQsdGhpcy5pbnRlcmVzdEZ1bGxmaWxsZWQ9dGhpcy5pbnRlcmVzdERlZmVycmVkLnByb21pc2UsdGhpcy5pbnRlcmVzdE1hcFJlZj1lLHRoaXMub3JpZ2luYWxJbnRlcmVzdD1hLHRoaXMuY29tcGFyaXNvbkZ1bmM9aSx0aGlzLm9wdGlvbnM9cix0aGlzLmRlc3RydWN0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCk9Pnt0aGlzLmRlc3Ryb3koKX0pLHRoaXMub3B0aW9ucz8ubWFya0xvc3RBZnRlckRlZmF1bHQmJnB0LmRlbGF5Rm9yKHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCkudGhlbih0aGlzLm1hcmtMb3N0KX1kZXN0cm95KCl7dGhpcy5pbnRlcmVzdE1hcFJlZi5yZW1vdmVJbnRlcmVzdCh0aGlzKSwhdGhpcy5pc0Z1bGxmaWxsZWQmJnRoaXMub3B0aW9ucy5kZWZhdWx0RnVsbGZpbGxtZW50JiZ0aGlzLmZ1bGxmaWxsSW50ZXJlc3QodGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpfW1hcmtMb3N0KCl7dGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCl9cmVuZXcoKXt0aGlzLmRlc3RydWN0aW9uVGltZXIucmVzZXQoKX19fSk7dmFyIG1DLGZDPWIoKCk9PntjaSgpO0NoKCk7dUMoKTttQz1jbGFzc3tjb25zdHJ1Y3RvcihlLGE9e30pe3RoaXMuaW50ZXJlc3RPYmplY3RNYXA9bmV3IGUwLHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlPW5ldyBEdC5PYnNlcnZhYmxlSW50YWtlLHRoaXMuY29tcGFyaXNvbkZ1bmM9ZSx0aGlzLm9wdGlvbnM9YX1hc3luYyBhZGRJbnRlcmVzdChlLGEpe2xldCBpPXRoaXMuY29tcGFyaXNvbkZ1bmMoZSkscixzPW5ldyBzNih0aGlzLGUsdGhpcy5jb21wYXJpc29uRnVuYyx7bWFya0xvc3RBZnRlckRlZmF1bHQ6dGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0LGRlZmF1bHRGdWxsZmlsbG1lbnQ6YX0pLG49ITE7cmV0dXJuIGF3YWl0IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZm9yRWFjaChvPT57IW4mJm8uY29tcGFyaXNvblN0cmluZz09PXMuY29tcGFyaXNvblN0cmluZyYmKGNvbnNvbGUubG9nKCJpbmZvIixgaW50ZXJlc3QgYWxyZWFkeSBleGlzdHMgZm9yICR7cy5jb21wYXJpc29uU3RyaW5nfWApLG49ITAscj1vLHIucmVuZXcoKSl9KSxyfHwocj1zLHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuYWRkKHIpKSx0aGlzLmludGVyZXN0T2JzZXJ2YWJsZS5wdXNoKHIpLHJ9cmVtb3ZlSW50ZXJlc3QoZSl7bGV0IGE9dGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kT25lQW5kUmVtb3ZlU3luYyhpPT5lLmNvbXBhcmlzb25TdHJpbmc9PT1pLmNvbXBhcmlzb25TdHJpbmcpfWNoZWNrSW50ZXJlc3QoZSl7bGV0IGE9dGhpcy5jb21wYXJpc29uRnVuYyhlKTtyZXR1cm4gdGhpcy5jaGVja0ludGVyZXN0QnlTdHJpbmcoYSl9Y2hlY2tJbnRlcmVzdEJ5U3RyaW5nKGUpe3JldHVybiEhdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYyhpPT5pLmNvbXBhcmlzb25TdHJpbmc9PT1lKX1pbmZvcm1Mb3N0SW50ZXJlc3QoZSl7bGV0IGE9dGhpcy5maW5kSW50ZXJlc3QoZSk7YSYmYS5tYXJrTG9zdCgpfWZpbmRJbnRlcmVzdChlKXtsZXQgYT10aGlzLmNvbXBhcmlzb25GdW5jKGUpO3JldHVybiB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKHI9PnIuY29tcGFyaXNvblN0cmluZz09PWEpfX19KTt2YXIgZ0MsYXRlPWIoKCk9PntjaSgpO2dDPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuYXJyYXk9W10sdGhpcy5hcnJheUxpbWl0PWV9YWRkT25lKGUpe3RoaXMuYXJyYXkudW5zaGlmdChlKSx0aGlzLmFycmF5Lmxlbmd0aD50aGlzLmFycmF5TGltaXQmJih0aGlzLmFycmF5Lmxlbmd0aD10aGlzLmFycmF5TGltaXQpfWFkZE1hbnkoZSl7Zm9yKGxldCBhIG9mIGUpdGhpcy5hZGRPbmUoYSl9c2V0TGltaXQoZSl7dGhpcy5hcnJheUxpbWl0PWUsdGhpcy5hcnJheS5sZW5ndGg+dGhpcy5hcnJheUxpbWl0JiYodGhpcy5hcnJheS5sZW5ndGg9dGhpcy5hcnJheUxpbWl0KX1nZXRBdmVyYWdlKCl7aWYodHlwZW9mIHRoaXMuYXJyYXlbMF09PSJudW1iZXIiKXtsZXQgZT0wO2ZvcihsZXQgYSBvZiB0aGlzLmFycmF5KWU9ZSthO3JldHVybiBlL3RoaXMuYXJyYXkubGVuZ3RofWVsc2UgcmV0dXJuIG51bGx9fX0pO3ZhciBiQyxpdGU9YigoKT0+e2NpKCk7Q2goKTtiQz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVmZXJlbmNlT2JqZWN0TWFwPW5ldyBlMH1jaGVja0FuZFRyYWNrKGUpe3JldHVybiB0aGlzLnJlZmVyZW5jZU9iamVjdE1hcC5jaGVja0Zvck9iamVjdChlKT8hMToodGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuYWRkKGUpLCEwKX19fSk7dmFyIHZDLHJ0ZT1iKCgpPT57Y2koKTt2Qz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ0FycmF5PVtdLHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5PVtdfWFkZFN0cmluZyhlKXt0aGlzLl9zdHJpbmdBcnJheS5wdXNoKGUpLHRoaXMubm90aWZ5VHJpZ2dlcigpfWFkZFN0cmluZ0FycmF5KGUpe2ZvcihsZXQgYSBvZiBlKXRoaXMuYWRkU3RyaW5nKGEpfXJlbW92ZVN0cmluZyhlKXtmb3IobGV0IGEgaW4gdGhpcy5fc3RyaW5nQXJyYXkpdGhpcy5fc3RyaW5nQXJyYXlbYV09PT1lJiZ0aGlzLl9zdHJpbmdBcnJheS5zcGxpY2UocGFyc2VJbnQoYSksMSk7dGhpcy5ub3RpZnlUcmlnZ2VyKCl9d2lwZSgpe3RoaXMuX3N0cmluZ0FycmF5PVtdLHRoaXMubm90aWZ5VHJpZ2dlcigpfWNoZWNrU3RyaW5nKGUpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5pbmRleE9mKGUpIT09LTF9Y2hlY2tNaW5pbWF0Y2goZSl7bGV0IGE9bmV3IG9zLlNtYXJ0TWF0Y2goZSksaT0hMTtmb3IobGV0IHIgb2YgdGhpcy5fc3RyaW5nQXJyYXkpYS5tYXRjaChyKSYmKGk9ITApO3JldHVybiBpfWNoZWNrSXNFbXB0eSgpe3JldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGg9PT0wfWdldFN0cmluZ0FycmF5KCl7bGV0IGU9W107Zm9yKGxldCBhIG9mIHRoaXMuX3N0cmluZ0FycmF5KWUucHVzaChhKTtyZXR1cm4gZX1yZWdpc3RlclVudGlsVHJ1ZShlLGEpe2xldCBpPUhlLmRlZmVyKCk7cmV0dXJuIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCk9PntsZXQgcj1lKHRoaXMuZ2V0U3RyaW5nQXJyYXkoKSk7cmV0dXJuIHI9PT0hMCYmKGEmJmEoKSxpLnJlc29sdmUoKSkscn0pLHRoaXMubm90aWZ5VHJpZ2dlcigpLGkucHJvbWlzZX1ub3RpZnlUcmlnZ2VyKCl7bGV0IGU9dGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkuZmlsdGVyKGE9PiFhKCkpO3RoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5PWV9fX0pO3ZhciB5QyxzdGU9YigoKT0+e2NpKCk7eUM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yYWdlQXJyYXk9W10sdGhpcy5vcHRpb25zPWV9Y2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpe2xldCBlPSgpPT57dGhpcy5hZ2dyZWdhdGlvblRpbWVyPW5ldyBmcy5UaW1lcih0aGlzLm9wdGlvbnMuYWdncmVnYXRpb25JbnRlcnZhbEluTWlsbGlzKSx0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCk9PntsZXQgYT10aGlzLnN0b3JhZ2VBcnJheTtpZihhLmxlbmd0aD09PTApe3RoaXMuYWdncmVnYXRpb25UaW1lcj1udWxsO3JldHVybn10aGlzLnN0b3JhZ2VBcnJheT1bXSxlKCksdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYSl9KSx0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuc3RhcnQoKX07dGhpcy5hZ2dyZWdhdGlvblRpbWVyfHxlKCl9YWRkKGUpe3RoaXMuc3RvcmFnZUFycmF5LnB1c2goZSksdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCl9fX0pO3ZhciB4QyxudGU9YigoKT0+e2NpKCk7eEM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN5bWJvbFRyZWU9bmV3IFNoLmRlZmF1bHR9aW5pdGlhbGl6ZShlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluaXRpYWxpemUoZSl9aGFzQ2hpbGRyZW4oZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5oYXNDaGlsZHJlbihlKX1maXJzdENoaWxkKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChlKX1sYXN0Q2hpbGQoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5sYXN0Q2hpbGQoZSl9cHJldmlvdXNTaWJsaW5nKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nKGUpfW5leHRTaWJsaW5nKGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcoZSl9cGFyZW50KGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUucGFyZW50KGUpfWxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQoZSl9cHJlY2VkaW5nKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVjZWRpbmcoZSxhKX1mb2xsb3dpbmcoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmZvbGxvd2luZyhlLGEpfWNoaWxkcmVuVG9BcnJheShlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KGUsYSl9YW5jZXN0b3JzVG9BcnJheShlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzVG9BcnJheShlLGEpfXRyZWVUb0FycmF5KGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlVG9BcnJheShlLGEpfWNoaWxkcmVuSXRlcmF0b3IoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IoZSxhKX1wcmV2aW91c1NpYmxpbmdzSXRlcmF0b3IoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmV2aW91c1NpYmxpbmdzSXRlcmF0b3IoZSl9bmV4dFNpYmxpbmdzSXRlcmF0b3IoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5uZXh0U2libGluZ3NJdGVyYXRvcigpfWFuY2VzdG9yc0l0ZXJhdG9yKGUpe3RoaXMuc3ltYm9sVHJlZS5hbmNlc3RvcnNJdGVyYXRvcigpfXRyZWVJdGVyYXRvcihlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKGUpfWluZGV4KGUpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5kZXgoZSl9Y2hpbGRyZW5Db3VudChlKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQoZSl9Y29tcGFyZVRyZWVQb3NpdGlvbihlLGEpe3JldHVybiB0aGlzLmNvbXBhcmVUcmVlUG9zaXRpb24oZSxhKX1yZW1vdmUoZSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5yZW1vdmUoZSl9aW5zZXJ0QmVmb3JlKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRCZWZvcmUoZSxhKX1pbnNlcnRBZnRlcihlLGEpe3JldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5zZXJ0QWZ0ZXIoZSxhKX1wcmVwZW5kQ2hpbGQoZSxhKXtyZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXBlbmRDaGlsZChlLGEpfWFwcGVuZENoaWxkKGUsYSl7cmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hcHBlbmRDaGlsZChlLGEpfXRvSnNvbldpdGhIaWVyYWNoeShlKXtsZXQgYT10aGlzLnRyZWVJdGVyYXRvcihlLHt9KTtmb3IobGV0IGkgb2YgYSljb25zb2xlLmxvZyhpKX1mcm9tSnNvbldpdGhIaWVyYWNoeShlKXt9fX0pO3ZhciB0Mj17fTtXZSh0Mix7QXN5bmNFeGVjdXRpb25TdGFjazooKT0+ZEMsQmFja3ByZXNzdXJlZEFycmF5OigpPT5wQyxGYXN0TWFwOigpPT5yNixJbnRlcmVzdDooKT0+czYsSW50ZXJlc3RNYXA6KCk9Pm1DLExpbWl0ZWRBcnJheTooKT0+Z0MsTG9vcFRyYWNrZXI6KCk9PmJDLE9iamVjdE1hcDooKT0+ZTAsU3RyaW5nbWFwOigpPT52QyxUaW1lZEFnZ3JlZ3RvcjooKT0+eUMsVHJlZTooKT0+eEMsdW5pOigpPT50dGV9KTt2YXIgYTY9YigoKT0+e0plZSgpO2V0ZSgpO2hDKCk7ZkMoKTt1QygpO2F0ZSgpO2l0ZSgpO0NoKCk7cnRlKCk7c3RlKCk7bnRlKCl9KTt2YXIgRW49e307V2UoRW4se2FyZVVpbnQ4QXJyYXlzRXF1YWw6KCk9PkhfdCxhc3NlcnRVaW50OEFycmF5OigpPT5Ebixhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjooKT0+cHRlLGJhc2U2NFRvU3RyaW5nOigpPT5HX3QsYmFzZTY0VG9VaW50OEFycmF5OigpPT5tdGUsY29tcGFyZVVpbnQ4QXJyYXlzOigpPT5xX3QsY29uY2F0VWludDhBcnJheXM6KCk9PkJfdCxnZXRVaW50QkU6KCk9PktfdCxoZXhUb1VpbnQ4QXJyYXk6KCk9PlhfdCxpbmNsdWRlczooKT0+UV90LGluZGV4T2Y6KCk9Pmd0ZSxpc1VpbnQ4QXJyYXk6KCk9PndDLHN0cmluZ1RvQmFzZTY0OigpPT5XX3Qsc3RyaW5nVG9VaW50OEFycmF5OigpPT51dGUsdG9VaW50OEFycmF5OigpPT5SX3QsdWludDhBcnJheVRvQmFzZTY0OigpPT5mdGUsdWludDhBcnJheVRvSGV4OigpPT5aX3QsdWludDhBcnJheVRvU3RyaW5nOigpPT5odGV9KTtmdW5jdGlvbiBvdGUodCxlLGEpe3JldHVybiB0P3QuY29uc3RydWN0b3I9PT1lPyEwOlBfdC5jYWxsKHQpPT09YTohMX1mdW5jdGlvbiB3Qyh0KXtyZXR1cm4gb3RlKHQsVWludDhBcnJheSxJX3QpfWZ1bmN0aW9uIEZfdCh0KXtyZXR1cm4gb3RlKHQsQXJyYXlCdWZmZXIsTl90KX1mdW5jdGlvbiBPX3QodCl7cmV0dXJuIHdDKHQpfHxGX3QodCl9ZnVuY3Rpb24gRG4odCl7aWYoIXdDKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgVWludDhBcnJheVxgLCBnb3QgXGAke3R5cGVvZiB0fVxgYCl9ZnVuY3Rpb24gcHRlKHQpe2lmKCFPX3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAgb3IgXGBBcnJheUJ1ZmZlclxgLCBnb3QgXGAke3R5cGVvZiB0fVxgYCl9ZnVuY3Rpb24gUl90KHQpe2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTt0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCB2YWx1ZSwgZ290IFxgJHt0eXBlb2YgdH1cYC5gKX1mdW5jdGlvbiBCX3QodCxlKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2U/Pz10LnJlZHVjZSgocixzKT0+citzLmxlbmd0aCwwKTtsZXQgYT1uZXcgVWludDhBcnJheShlKSxpPTA7Zm9yKGxldCByIG9mIHQpRG4ociksYS5zZXQocixpKSxpKz1yLmxlbmd0aDtyZXR1cm4gYX1mdW5jdGlvbiBIX3QodCxlKXtpZihEbih0KSxEbihlKSx0PT09ZSlyZXR1cm4hMDtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHRbYV0hPT1lW2FdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHFfdCh0LGUpe0RuKHQpLERuKGUpO2xldCBhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IobGV0IGk9MDtpPGE7aSsrKXtsZXQgcj10W2ldLWVbaV07aWYociE9PTApcmV0dXJuIE1hdGguc2lnbihyKX1yZXR1cm4gTWF0aC5zaWduKHQubGVuZ3RoLWUubGVuZ3RoKX1mdW5jdGlvbiBodGUodCxlPSJ1dGY4Iil7cmV0dXJuIHB0ZSh0KSxsdGVbZV0/Pz1uZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcihlKSxsdGVbZV0uZGVjb2RlKHQpfWZ1bmN0aW9uIG42KHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYHN0cmluZ1xgLCBnb3QgXGAke3R5cGVvZiB0fVxgYCl9ZnVuY3Rpb24gdXRlKHQpe3JldHVybiBuNih0KSxWX3QuZW5jb2RlKHQpfWZ1bmN0aW9uIGpfdCh0KXtyZXR1cm4gdC5yZXBsYWNlQWxsKCIrIiwiLSIpLnJlcGxhY2VBbGwoIi8iLCJfIikucmVwbGFjZSgvPSskLywiIil9ZnVuY3Rpb24gVV90KHQpe2xldCBlPXQucmVwbGFjZUFsbCgiLSIsIisiKS5yZXBsYWNlQWxsKCJfIiwiLyIpLGE9KDQtZS5sZW5ndGglNCklNDtyZXR1cm4gZSsiPSIucmVwZWF0KGEpfWZ1bmN0aW9uIGZ0ZSh0LHt1cmxTYWZlOmU9ITF9PXt9KXtEbih0KTtsZXQgYT0iIjtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPWN0ZSl7bGV0IHI9dC5zdWJhcnJheShpLGkrY3RlKTthKz1nbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodm9pZCAwLHIpKX1yZXR1cm4gZT9qX3QoYSk6YX1mdW5jdGlvbiBtdGUodCl7cmV0dXJuIG42KHQpLFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoVV90KHQpKSxlPT5lLmNvZGVQb2ludEF0KDApKX1mdW5jdGlvbiBXX3QodCx7dXJsU2FmZTplPSExfT17fSl7cmV0dXJuIG42KHQpLGZ0ZSh1dGUodCkse3VybFNhZmU6ZX0pfWZ1bmN0aW9uIEdfdCh0KXtyZXR1cm4gbjYodCksaHRlKG10ZSh0KSl9ZnVuY3Rpb24gWl90KHQpe0RuKHQpO2xldCBlPSIiO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKWUrPVlfdFt0W2FdXTtyZXR1cm4gZX1mdW5jdGlvbiBYX3QodCl7aWYobjYodCksdC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLiIpO2xldCBlPXQubGVuZ3RoLzIsYT1uZXcgVWludDhBcnJheShlKTtmb3IobGV0IGk9MDtpPGU7aSsrKXtsZXQgcj1kdGVbdFtpKjJdXSxzPWR0ZVt0W2kqMisxXV07aWYocj09PXZvaWQgMHx8cz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSGV4IGNoYXJhY3RlciBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiAke2kqMn1gKTthW2ldPXI8PDR8c31yZXR1cm4gYX1mdW5jdGlvbiBLX3QodCl7bGV0e2J5dGVMZW5ndGg6ZX09dDtpZihlPT09NilyZXR1cm4gdC5nZXRVaW50MTYoMCkqMioqMzIrdC5nZXRVaW50MzIoMik7aWYoZT09PTUpcmV0dXJuIHQuZ2V0VWludDgoMCkqMioqMzIrdC5nZXRVaW50MzIoMSk7aWYoZT09PTQpcmV0dXJuIHQuZ2V0VWludDMyKDApO2lmKGU9PT0zKXJldHVybiB0LmdldFVpbnQ4KDApKjIqKjE2K3QuZ2V0VWludDE2KDEpO2lmKGU9PT0yKXJldHVybiB0LmdldFVpbnQxNigwKTtpZihlPT09MSlyZXR1cm4gdC5nZXRVaW50OCgwKX1mdW5jdGlvbiBndGUodCxlKXtsZXQgYT10Lmxlbmd0aCxpPWUubGVuZ3RoO2lmKGk9PT0wfHxpPmEpcmV0dXJuLTE7bGV0IHI9YS1pO2ZvcihsZXQgcz0wO3M8PXI7cysrKXtsZXQgbj0hMDtmb3IobGV0IG89MDtvPGk7bysrKWlmKHRbcytvXSE9PWVbb10pe249ITE7YnJlYWt9aWYobilyZXR1cm4gc31yZXR1cm4tMX1mdW5jdGlvbiBRX3QodCxlKXtyZXR1cm4gZ3RlKHQsZSkhPT0tMX12YXIgUF90LElfdCxOX3QsbHRlLFZfdCxjdGUsWV90LGR0ZSxidGU9YigoKT0+e1BfdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLElfdD0iW29iamVjdCBVaW50OEFycmF5XSIsTl90PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI7bHRlPXt1dGY4Om5ldyBnbG9iYWxUaGlzLlRleHREZWNvZGVyKCJ1dGY4Iil9O1ZfdD1uZXcgZ2xvYmFsVGhpcy5UZXh0RW5jb2RlcjtjdGU9NjU1MzU7WV90PUFycmF5LmZyb20oe2xlbmd0aDoyNTZ9LCh0LGUpPT5lLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpO2R0ZT17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LGE6MTAsYjoxMSxjOjEyLGQ6MTMsZToxNCxmOjE1LEE6MTAsQjoxMSxDOjEyLEQ6MTMsRToxNCxGOjE1fX0pO3ZhciB2dGU9YigoKT0+e2J0ZSgpfSk7dmFyIHAzPXt9O1dlKHAzLHtiYXNlNjRUb1VpbnQ4QXJyYXk6KCk9PmFUdCxlbnN1cmVQdXJlVWludDhBcnJheTooKT0+c1R0LGlzQnVmZmVyTGlrZTooKT0+clR0LGlzVWludDhBcnJheTooKT0+aVR0LHVJbnQ4QXJyYXlFeHRyYXM6KCk9PmVUdCx1SW50OEFycmF5VG9CYXNlNjQ6KCk9PnRUdH0pO2Z1bmN0aW9uIHRUdCh0KXtyZXR1cm4gRW4udWludDhBcnJheVRvQmFzZTY0KHQpfWZ1bmN0aW9uIGFUdCh0KXtyZXR1cm4gRW4uYmFzZTY0VG9VaW50OEFycmF5KHQpfWZ1bmN0aW9uIHJUdCh0KXtyZXR1cm4gdCYmdHlwZW9mIHQuYnl0ZUxlbmd0aD09Im51bWJlciI/ITA6dHlwZW9mIEJ1ZmZlcjwidSImJkJ1ZmZlci5pc0J1ZmZlcj9CdWZmZXIuaXNCdWZmZXIodCk6ITF9ZnVuY3Rpb24gc1R0KHQpe2xldCBlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtyZXR1cm4gZS5zZXQodCksZX12YXIgZVR0LGlUdCx5dGU9YigoKT0+e3Z0ZSgpO2VUdD1FbjtpVHQ9dD0+RW4uaXNVaW50OEFycmF5KHQpfSk7dmFyIG82PWIoKCk9PntkMigpfSk7dmFyIGw2LF9oPWIoKCk9PntvNigpO2w2PWNsYXNze2NvbnN0cnVjdG9yKGUsYSl7dGhpcy5ndWFyZEZ1bmN0aW9uPWUsdGhpcy5vcHRpb25zPWF9YXN5bmMgZXhlYyhlKXtyZXR1cm4gYXdhaXQgdGhpcy5ndWFyZEZ1bmN0aW9uKGUpfWFzeW5jIGdldEZhaWxlZEhpbnQoZSl7cmV0dXJuIGF3YWl0IHRoaXMuZXhlYyhlKT9udWxsOnRoaXMub3B0aW9ucy5mYWlsZWRIaW50fX19KTt2YXIgYzYsTUM9YigoKT0+e282KCk7YzY9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5hbWU9Ikd1YXJkRXJyb3IifX19KTt2YXIgZDYsekM9YigoKT0+e282KCk7X2goKTtkNj1jbGFzcyBleHRlbmRzIGw2e2NvbnN0cnVjdG9yKGU9W10pe3N1cGVyKGFzeW5jIGE9PnRoaXMuYWxsR3VhcmRzUGFzcyhhKSksdGhpcy5ndWFyZHM9ZX1hc3luYyBleGVjQWxsV2l0aERhdGEoZSxhPXttb2RlOiJwYXJhbGxlbCIsc3RvcE9uRmFpbDohMX0pe2xldCBpPVtdO2ZvcihsZXQgcyBvZiB0aGlzLmd1YXJkcyl7bGV0IG49cy5leGVjKGUpO2lmKGEubW9kZT09PSJzZXJpYWwiJiZhd2FpdCBuLGkucHVzaChuKSxhLnN0b3BPbkZhaWwmJiFhd2FpdCBuKXJldHVybiBhd2FpdCBQcm9taXNlLmFsbChpKX1yZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoaSl9YXN5bmMgYWxsR3VhcmRzUGFzcyhlLGE9e21vZGU6InBhcmFsbGVsIixzdG9wT25GYWlsOiExfSl7cmV0dXJuKGF3YWl0IHRoaXMuZXhlY0FsbFdpdGhEYXRhKGUsYSkpLmV2ZXJ5KHI9PnIpfWFzeW5jIGFueUd1YXJkc1Bhc3MoZSl7cmV0dXJuKGF3YWl0IHRoaXMuZXhlY0FsbFdpdGhEYXRhKGUse21vZGU6InBhcmFsbGVsIixzdG9wT25GYWlsOiExfSkpLnNvbWUoaT0+aSl9Z2V0RmFpbGVkSGludChlKXtmb3IobGV0IGEgb2YgdGhpcy5ndWFyZHMpe2xldCBpPWEuZ2V0RmFpbGVkSGludChlKTtpZihpKXJldHVybiBpfX19fSk7dmFyIHA2PXt9O1dlKHA2LHtHdWFyZDooKT0+bDYsR3VhcmRFcnJvcjooKT0+YzYsR3VhcmRTZXQ6KCk9PmQ2LHBhc3NHdWFyZHNPclJlamVjdDooKT0+blR0fSk7dmFyIG5UdCx4dGU9YigoKT0+e282KCk7X2goKTtNQygpO19oKCk7ekMoKTt6QygpO01DKCk7blR0PWFzeW5jKHQsZSk9PntsZXQgYT1uZXcgZDYoZSk7aWYoIWF3YWl0IGEuYWxsR3VhcmRzUGFzcyh0KSl7bGV0IHI9YXdhaXQgYS5nZXRGYWlsZWRIaW50KHQpO3Rocm93IG5ldyBjNihgR3VhcmRzIGZhaWxlZDoKJHtyfQogICAgYCl9fX0pO3ZhciBoMyxrQz1iKCgpPT57aDM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnM9W10sdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycz1bXSx0aGlzLmVycm9ySW50ZXJjZXB0b3JzPVtdfWFkZFJlcXVlc3RJbnRlcmNlcHRvcihlKXt0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnMucHVzaChlKX1hZGRSZXNwb25zZUludGVyY2VwdG9yKGUpe3RoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMucHVzaChlKX1hZGRFcnJvckludGVyY2VwdG9yKGUpe3RoaXMuZXJyb3JJbnRlcmNlcHRvcnMucHVzaChlKX1yZW1vdmVSZXF1ZXN0SW50ZXJjZXB0b3IoZSl7bGV0IGE9dGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzLmluZGV4T2YoZSk7YT4tMSYmdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzLnNwbGljZShhLDEpfXJlbW92ZVJlc3BvbnNlSW50ZXJjZXB0b3IoZSl7bGV0IGE9dGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5pbmRleE9mKGUpO2E+LTEmJnRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMuc3BsaWNlKGEsMSl9cmVtb3ZlRXJyb3JJbnRlcmNlcHRvcihlKXtsZXQgYT10aGlzLmVycm9ySW50ZXJjZXB0b3JzLmluZGV4T2YoZSk7YT4tMSYmdGhpcy5lcnJvckludGVyY2VwdG9ycy5zcGxpY2UoYSwxKX1jbGVhckFsbCgpe3RoaXMucmVxdWVzdEludGVyY2VwdG9ycz1bXSx0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JzPVtdLHRoaXMuZXJyb3JJbnRlcmNlcHRvcnM9W119YXN5bmMgcHJvY2Vzc1JlcXVlc3QoZSl7bGV0IGE9ZTtmb3IobGV0IGkgb2YgdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzKXRyeXthPWF3YWl0IGkoYSl9Y2F0Y2gocil7dGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IociBpbnN0YW5jZW9mIEVycm9yP3I6bmV3IEVycm9yKFN0cmluZyhyKSkpfXJldHVybiBhfWFzeW5jIHByb2Nlc3NSZXNwb25zZShlKXtsZXQgYT1lO2ZvcihsZXQgaSBvZiB0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JzKXRyeXthPWF3YWl0IGkoYSl9Y2F0Y2gocil7dGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IociBpbnN0YW5jZW9mIEVycm9yP3I6bmV3IEVycm9yKFN0cmluZyhyKSkpfXJldHVybiBhfWFzeW5jIHByb2Nlc3NFcnJvcihlKXtsZXQgYT1lO2ZvcihsZXQgaSBvZiB0aGlzLmVycm9ySW50ZXJjZXB0b3JzKXRyeXthPWF3YWl0IGkoYSl9Y2F0Y2gocil7YT1yIGluc3RhbmNlb2YgRXJyb3I/cjpuZXcgRXJyb3IoU3RyaW5nKHIpKX1yZXR1cm4gYX1nZXRJbnRlcmNlcHRvckNvdW50cygpe3JldHVybntyZXF1ZXN0OnRoaXMucmVxdWVzdEludGVyY2VwdG9ycy5sZW5ndGgscmVzcG9uc2U6dGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5sZW5ndGgsZXJyb3I6dGhpcy5lcnJvckludGVyY2VwdG9ycy5sZW5ndGh9fX19KTt2YXIgd3RlPWIoKCk9PntkMigpfSk7dmFyIE10ZT1iKCgpPT57fSk7dmFyIFNDLHp0ZT1iKCgpPT57d3RlKCk7TXRlKCk7U0M9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRlZFNjcmlwdHM9W119YXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUoZSl7aWYodGhpcy5pc05vZGUpcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoZS5ub2RlTW9kdWxlTmFtZSk7aWYodGhpcy5pc0Jyb3dzZXIpcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShlLndlYlVybEFyZyxlLmdldEZ1bmN0aW9uKTtjb25zb2xlLmVycm9yKCJwbGF0Zm9ybSBmb3IgbG9hZGluZyBub3Qgc3VwcG9ydGVkIGJ5IHNtYXJ0ZW52Iil9YXN5bmMgZ2V0U2FmZU5vZGVNb2R1bGUoZSxhKXtpZighdGhpcy5pc05vZGUpe2NvbnNvbGUuZXJyb3IoYFlvdSB0cmllZCB0byBsb2FkIGEgbm9kZSBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0OiAke2V9LiBUaGlzIGRvZXMgbm90IHRocm93LmApO3JldHVybn1sZXQgaT1hd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7ZX0nKWApKCk7cmV0dXJuIGEmJmF3YWl0IGEoaSksaX1hc3luYyBnZXRTYWZlV2ViTW9kdWxlKGUsYSl7aWYoIXRoaXMuaXNCcm93c2VyKXtjb25zb2xlLmVycm9yKCJZb3UgdHJpZWQgdG8gbG9hZCBhIHdlYiBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0Iik7cmV0dXJufWlmKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyhlKSlyZXR1cm4gYSgpO3RoaXMubG9hZGVkU2NyaXB0cy5wdXNoKGUpO2xldCBpPUhlLmRlZmVyKCk7aWYoZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKWdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyhlKSxpLnJlc29sdmUoKTtlbHNle2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Iub25sb2FkPSgpPT57aS5yZXNvbHZlKCl9LHIuc3JjPWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX1yZXR1cm4gYXdhaXQgaS5wcm9taXNlLGEoKX1nZXQgcnVudGltZUVudigpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSI/Im5vZGUiOiJicm93c2VyIn1nZXQgaXNCcm93c2VyKCl7cmV0dXJuIXRoaXMuaXNOb2RlfWdldCB1c2VyQWdlbnQoKXtyZXR1cm4gdGhpcy5pc0Jyb3dzZXI/bmF2aWdhdG9yLnVzZXJBZ2VudDoidW5kZWZpbmVkIn1nZXQgaXNOb2RlKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJub2RlIn1nZXQgbm9kZVZlcnNpb24oKXtyZXR1cm4gcHJvY2Vzcy52ZXJzaW9ufWdldCBpc0NJKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyEhcHJvY2Vzcy5lbnYuQ0k6ITF9YXN5bmMgaXNNYWNBc3luYygpe3JldHVybiB0aGlzLmlzTm9kZT8oYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKSkucGxhdGZvcm0oKT09PSJkYXJ3aW4iOiExfWFzeW5jIGlzV2luZG93c0FzeW5jKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyhhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKCJvcyIpKS5wbGF0Zm9ybSgpPT09IndpbjMyIjohMX1hc3luYyBpc0xpbnV4QXN5bmMoKXtyZXR1cm4gdGhpcy5pc05vZGU/KGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIikpLnBsYXRmb3JtKCk9PT0ibGludXgiOiExfWFzeW5jIHByaW50RW52KCl7dGhpcy5pc05vZGU/KGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKSxjb25zb2xlLmxvZygibm9kZSB2ZXJzaW9uIGlzICIrdGhpcy5ub2RlVmVyc2lvbikpOihjb25zb2xlLmxvZygicnVubmluZyBvbiBCUk9XU0VSIiksY29uc29sZS5sb2coImJyb3dzZXIgaXMgIit0aGlzLnVzZXJBZ2VudCkpfX19KTt2YXIgT2E9e307V2UoT2Ese1NtYXJ0ZW52OigpPT5TQ30pO3ZhciB1Mz1iKCgpPT57enRlKCl9KTt2YXIgQ0MsZjM9YigoKT0+e0NDPVUxKHpkKCksMSl9KTt2YXIgVGg9e307V2UoVGgse2NyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZzooKT0+aFR0LGNyZWF0ZVJhbmRvbVN0cmluZzooKT0+cFR0fSk7dmFyIGNUdCxkVHQscFR0LGhUdCxrdGU9YigoKT0+e2YzKCk7Y1R0PSh0LGUpPT57aWYodHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtsZXQgYT1lLXQsaT1uZXcgVWludDMyQXJyYXkoMSk7cmV0dXJuIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpKSx0K2lbMF0lYX1lbHNlIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCkpK3R9LGRUdD0odCxlLGEpPT57bGV0IGk9e0E6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixhOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsMDoiMDEyMzQ1Njc4OSIsIiEiOiIhQCMkJV4mKigpXystPVtde318OzosLjw+PyIsIioiOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/In0scj10O2UmJmU+dC5sZW5ndGg/cj10LnJlcGVhdChNYXRoLmNlaWwoZS90Lmxlbmd0aCkpLnNsaWNlKDAsZSk6ZSYmKHI9dC5zbGljZSgwLGUpKTtsZXQgcz0iIjtmb3IobGV0IG4gb2YgcilpZihpW25dKXtsZXQgbz1pW25dLGQ9Y1R0KDAsby5sZW5ndGgpO3MrPW9bZF19ZWxzZSBzKz1uO3JldHVybiBzfSxwVHQ9KHQsZSxhKT0+ZFR0KHQsZSxhKSxoVHQ9KCk9PkNDLnVuaSgpfSk7dmFyIExoPXt9O1dlKExoLHttYWtlRW52T2JqZWN0OigpPT51VHR9KTt2YXIgdVR0LFN0ZT1iKCgpPT57ZjMoKTt1VHQ9ZnVuY3Rpb24odCl7bGV0IGU9e30sYT0vKC4qKT0oLiopLztpZih0eXBlb2YgdDwidSIpZm9yKGxldCBpIGluIHQpe2xldCByPWEuZXhlYyh0W2ldKTtlW3JbMV1dPXJbMl19cmV0dXJuIGV9fSk7dmFyIHQwPXt9O1dlKHQwLHtpbmRlbnQ6KCk9Pm1UdCxpbmRlbnRXaXRoUHJlZml4OigpPT5nVHQsbm9ybWFsaXplOigpPT5iVHR9KTt2YXIgX0MsVEMsZlR0LG1UdCxnVHQsYlR0LEN0ZT1iKCgpPT57ZjMoKTtfQz10PT57bGV0IGU9dC5zcGxpdChgCmApO3JldHVybiBmVHQoZSl9LFRDPXQ9PntsZXQgZT0iIjtmb3IobGV0IGEgb2YgdCllPWUrYStgCmA7cmV0dXJuIGV9LGZUdD10PT57bGV0IGU9L15bXHNdKiQvO3JldHVybiBlLnRlc3QodFswXSkmJnQuc2hpZnQoKSxlLnRlc3QodFt0Lmxlbmd0aC0xXSkmJnQucG9wKCksdH0sbVR0PSh0LGUpPT57bGV0IGE9X0ModCk7Zm9yKGxldCByIG9mIGEpcj0iICIucmVwZWF0KGUpK3I7cmV0dXJuIFRDKGEpfSxnVHQ9KHQsZSk9PntsZXQgYSxpPV9DKHQpLHI9W107Zm9yKGxldCBzIG9mIGkpci5wdXNoKGUrcyk7cmV0dXJuIGE9VEMociksYX0sYlR0PXQ9PntsZXQgZSxhPV9DKHQpLGkscj0vXihccyopLyxzPS9eKFxzKikkLztmb3IobGV0IG8gb2YgYSl7bGV0IGQ9ci5leGVjKG8pWzFdOyh0eXBlb2YgaT4idSJ8fGQubGVuZ3RoPGkpJiYhcy50ZXN0KG8pJiYoaT1kLmxlbmd0aCl9bGV0IG49W107Zm9yKGxldCBvIG9mIGEpbi5wdXNoKG8uc3Vic3RyKGkpKTtyZXR1cm4gZT1UQyhuKSxlfX0pO3ZhciAkaD17fTtXZSgkaCx7cmVwbGFjZUFsbDooKT0+X3RlLHN0YW5kYXJkOigpPT55VHR9KTt2YXIgX3RlLHZUdCx5VHQsVHRlPWIoKCk9PntfdGU9KHQsZSxhKT0+dC5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLGEpLHZUdD10PT57bGV0IGU9dC5zcGxpdChgCmApLGE9MS8wO2ZvcihsZXQgaSBvZiBlKWlmKGkudHJpbSgpLmxlbmd0aD4wKXtsZXQgcj1pLm1hdGNoKC9eKFxzKikvKTtyJiYoYT1NYXRoLm1pbihhLHJbMV0ubGVuZ3RoKSl9cmV0dXJuIGE9PT0xLzB8fGE9PT0wP3Q6ZS5tYXAoaT0+aS5sZW5ndGg+PWE/aS5zbGljZShhKTppKS5qb2luKGAKYCl9LHlUdD0odCxlKT0+e2xldCBhPXQ7cmV0dXJuKCFlfHxlLnN0cmlwSW5kZW50KSYmKGE9dlR0KGEpKSwoIWV8fGUubm9ybWFsaXplTmV3bGluZSkmJihhPWEucmVwbGFjZSgvXHJcbi9nLGAKYCkpLCghZXx8ZS5yZXBsYWNlVGFicykmJihhPV90ZShhLCIJLyIsIiAiKSksKCFlfHxlLnN0cmlwTGVhZGluZ1RyYWlsaW5nRW1wdHlMaW5lcykmJihhPWEucmVwbGFjZSgvXlxzKltcclxuXS9nbSwiIikucmVwbGFjZSgvXHMqW1xyXG5dJC9nbSwiIikpLCghZXx8ZS5zdHJpcEFsbEVtcHR5TGluZXMpJiYoYT1hLnJlcGxhY2UoL15ccypbXHJcbl0vZ20sIiIpKSxhfX0pO3ZhciBMQyxBaCxtMywkQz1iKCgpPT57TEM9e2VuY29kZTp0PT57aWYodHlwZW9mIEJ1ZmZlcjwidSIpcmV0dXJuIEJ1ZmZlci5mcm9tKHQsInV0ZjgiKS50b1N0cmluZygiYmFzZTY0Iik7aWYodHlwZW9mIGJ0b2E8InUiKXtsZXQgZT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCksYT1BcnJheS5mcm9tKGUsaT0+U3RyaW5nLmZyb21DaGFyQ29kZShpKSkuam9pbigiIik7cmV0dXJuIGJ0b2EoYSl9ZWxzZXtsZXQgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCksaT0iIixyPTA7Zm9yKDtyPGEubGVuZ3RoOyl7bGV0IHM9YVtyKytdLG49cjxhLmxlbmd0aD9hW3IrK106MCxvPXI8YS5sZW5ndGg/YVtyKytdOjAsZD1zPDwxNnxuPDw4fG87aSs9ZS5jaGFyQXQoZD4+MTgmNjMpLGkrPWUuY2hhckF0KGQ+PjEyJjYzKSxpKz1yLTI8YS5sZW5ndGg/ZS5jaGFyQXQoZD4+NiY2Myk6Ij0iLGkrPXItMTxhLmxlbmd0aD9lLmNoYXJBdChkJjYzKToiPSJ9cmV0dXJuIGl9fSxkZWNvZGU6dD0+e2xldCBlPXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucGFkRW5kKHQubGVuZ3RoKyg0LXQubGVuZ3RoJTQpJTQsIj0iKTtpZih0eXBlb2YgQnVmZmVyPCJ1IilyZXR1cm4gQnVmZmVyLmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoInV0ZjgiKTtpZih0eXBlb2YgYXRvYjwidSIpe2xldCBhPWF0b2IoZSksaT1uZXcgVWludDhBcnJheShhLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxhLmxlbmd0aDtyKyspaVtyXT1hLmNoYXJDb2RlQXQocik7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShpKX1lbHNle2xldCBhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixpPVtdLHI9MDtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgcz1hLmluZGV4T2YoZS5jaGFyQXQocisrKSksbj1hLmluZGV4T2YoZS5jaGFyQXQocisrKSksbz1hLmluZGV4T2YoZS5jaGFyQXQocisrKSksZD1hLmluZGV4T2YoZS5jaGFyQXQocisrKSksYz1zPDwxOHxuPDwxMnxvPDw2fGQ7aS5wdXNoKGM+PjE2JjI1NSksbyE9PTY0JiZpLnB1c2goYz4+OCYyNTUpLGQhPT02NCYmaS5wdXNoKGMmMjU1KX1yZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KGkpKX19fSxBaD1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3N3aXRjaChhKXtjYXNlInN0cmluZyI6dGhpcy5yZWZTdHJpbmc9ZTticmVhaztjYXNlImJhc2U2NCI6dGhpcy5yZWZTdHJpbmc9bTMuZGVjb2RlKGUpO2JyZWFrO2Nhc2UiYmFzZTY0dXJpIjp0aGlzLnJlZlN0cmluZz1tMy5kZWNvZGUoZSl9fWdldCBzaW1wbGVTdHJpbmcoKXtyZXR1cm4gdGhpcy5yZWZTdHJpbmd9Z2V0IGJhc2U2NFN0cmluZygpe3JldHVybiBtMy5lbmNvZGUodGhpcy5yZWZTdHJpbmcpfWdldCBiYXNlNjRVcmlTdHJpbmcoKXtyZXR1cm4gbTMuZW5jb2RlVXJpKHRoaXMucmVmU3RyaW5nKX19LG0zPXtlbmNvZGU6dD0+TEMuZW5jb2RlKHQpLGVuY29kZVVyaTp0PT5MQy5lbmNvZGUodCkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpLGRlY29kZTp0PT5MQy5kZWNvZGUodCksaXNCYXNlNjQ6dD0+L14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC8udGVzdCh0KX19KTt2YXIgRGg9e307V2UoRGgse2lzQmFzZTY0OigpPT53VHQsaXNVdGY4OigpPT54VHR9KTt2YXIgeFR0LHdUdCxMdGU9YigoKT0+e2YzKCk7JEMoKTt4VHQ9dD0+e2xldCBhPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxpPTA7Zm9yKDtpPGEubGVuZ3RoOyl7aWYoYVtpXT09PTl8fGFbaV09PT0xMHx8YVtpXT09PTEzfHwzMjw9YVtpXSYmYVtpXTw9MTI2KXtpKz0xO2NvbnRpbnVlfWlmKDE5NDw9YVtpXSYmYVtpXTw9MjIzJiYxMjg8PWFbaSsxXSYmYVtpKzFdPD0xOTEpe2krPTI7Y29udGludWV9aWYoYVtpXT09PTIyNCYmMTYwPD1hW2krMV0mJmFbaSsxXTw9MTkxJiYxMjg8PWFbaSsyXSYmYVtpKzJdPD0xOTF8fCgyMjU8PWFbaV0mJmFbaV08PTIzNnx8YVtpXT09PTIzOHx8YVtpXT09PTIzOSkmJjEyODw9YVtpKzFdJiZhW2krMV08PTE5MSYmMTI4PD1hW2krMl0mJmFbaSsyXTw9MTkxfHxhW2ldPT09MjM3JiYxMjg8PWFbaSsxXSYmYVtpKzFdPD0xNTkmJjEyODw9YVtpKzJdJiZhW2krMl08PTE5MSl7aSs9Mztjb250aW51ZX1pZihhW2ldPT09MjQwJiYxNDQ8PWFbaSsxXSYmYVtpKzFdPD0xOTEmJjEyODw9YVtpKzJdJiZhW2krMl08PTE5MSYmMTI4PD1hW2krM10mJmFbaSszXTw9MTkxfHwyNDE8PWFbaV0mJmFbaV08PTI0MyYmMTI4PD1hW2krMV0mJmFbaSsxXTw9MTkxJiYxMjg8PWFbaSsyXSYmYVtpKzJdPD0xOTEmJjEyODw9YVtpKzNdJiZhW2krM108PTE5MXx8YVtpXT09PTI0NCYmMTI4PD1hW2krMV0mJmFbaSsxXTw9MTQzJiYxMjg8PWFbaSsyXSYmYVtpKzJdPD0xOTEmJjEyODw9YVtpKzNdJiZhW2krM108PTE5MSl7aSs9NDtjb250aW51ZX1yZXR1cm4hMX1yZXR1cm4hMH0sd1R0PXQ9PntsZXQgZT0vW15BLVowLTkrXC89XS9pLGE9dC5sZW5ndGg7aWYoIWF8fGElNCE9PTB8fGUudGVzdCh0KSlyZXR1cm4hMTtsZXQgaT10LmluZGV4T2YoIj0iKTtyZXR1cm4gaT09PS0xfHxpPT09YS0xfHxpPT09YS0yJiZ0W2EtMV09PT0iPSJ9fSk7dmFyIEVoLCR0ZT1iKCgpPT57RWg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm90b2NvbD10aGlzLl9wcm90b2NvbFJlZ2V4KGUpLHRoaXMucHJvdG9jb2x8fChlPWBodHRwczovLyR7ZX1gKSx0aGlzLm5vZGVQYXJzZWRVcmw9bmV3IFVSTChlKSx0aGlzLnBvcnQ9dGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7bGV0IGE9dGhpcy5fZG9tYWluUmVnZXgoZS5yZXBsYWNlKHRoaXMubm9kZVBhcnNlZFVybC5wYXRobmFtZSwiIikpO3RoaXMuZnVsbE5hbWU9IiI7Zm9yKGxldCBpPTE7aTw9NTtpKyspaWYoYVtpLTFdKXtsZXQgcj1hW2ktMV07dGhpc1sibGV2ZWwiK2kudG9TdHJpbmcoKV09cix0aGlzLmZ1bGxOYW1lPT09IiI/dGhpcy5mdWxsTmFtZT1yOnRoaXMuZnVsbE5hbWU9cisiLiIrdGhpcy5mdWxsTmFtZX1lbHNlIHRoaXNbImxldmVsIitpLnRvU3RyaW5nKCldPXZvaWQgMDt0aGlzLnpvbmVOYW1lPXRoaXMubGV2ZWwyKyIuIit0aGlzLmxldmVsMSx0aGlzLnRvcExldmVsPXRoaXMubGV2ZWwxLHRoaXMuZG9tYWluTmFtZT10aGlzLmxldmVsMix0aGlzLnN1YkRvbWFpbj10aGlzLmxldmVsM31fZG9tYWluUmVnZXgoZSl7bGV0IGk9LyhbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9JC8uZXhlYyhlKTtyZXR1cm4gaS5yZXZlcnNlKCksaS5wb3AoKSxpLmZpbHRlcihmdW5jdGlvbihzKXtyZXR1cm4gcyE9PSIifSl9X3Byb3RvY29sUmVnZXgoZSl7bGV0IGk9L14oW2EtekEtWjAtOV0qKTpcL1wvLy5leGVjKGUpO2lmKGkpcmV0dXJuIGlbMV19X3BvcnRSZWdleChlKXtsZXQgaT0vXihbYS16QS1aMC05XSopOlwvXC8vLmV4ZWMoZSk7aWYoaSlyZXR1cm4gaVsxXX19fSk7dmFyIFBoLE1UdCxBdGUsRHRlPWIoKCk9PntmMygpO1BoPWNsYXNze2NvbnN0cnVjdG9yKGUsYSl7bGV0IGk9TVR0KGUpO3RoaXMuaG9zdD1pWzFdLHRoaXMudXNlcj1pWzJdLHRoaXMucmVwbz1pWzNdLHRoaXMuYWNjZXNzVG9rZW49YSx0aGlzLnNzaFVybD1BdGUodGhpcy5ob3N0LHRoaXMudXNlcix0aGlzLnJlcG8sdGhpcy5hY2Nlc3NUb2tlbiwic3NoIiksdGhpcy5odHRwc1VybD1BdGUodGhpcy5ob3N0LHRoaXMudXNlcix0aGlzLnJlcG8sdGhpcy5hY2Nlc3NUb2tlbiwiaHR0cHMiKX19LE1UdD1mdW5jdGlvbih0KXtyZXR1cm4vKFthLXpBLVowLTlcLV9cLl0qKSg/OlwvfFw6KShbYS16QS1aMC05XC1fXC5dKikoPzpcLykoW2EtekEtWjAtOVwtX1wuXSopKD86XC5naXQpLy5leGVjKHQpfSxBdGU9ZnVuY3Rpb24odCxlLGEsaT0iIixyKXtsZXQgcztzd2l0Y2goaSE9PSIiJiYoaT1pKyJAIikscil7Y2FzZSJodHRwcyI6cz0iaHR0cHM6Ly8iK2krdCsiLyIrZSsiLyIrYSsiLmdpdCI7YnJlYWs7Y2FzZSJzc2giOnM9ImdpdEAiK3QrIjoiK2UrIi8iK2ErIi5naXQiO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiTGluayBUeXBlICIrcisiIG5vdCBrbm93biIpO2JyZWFrfXJldHVybiBzfX0pO3ZhciBTMj17fTtXZShTMix7QmFzZTY0OigpPT5BaCxEb21haW46KCk9PkVoLEdpdFJlcG86KCk9PlBoLGJhc2U2NDooKT0+bTMsY3JlYXRlOigpPT5UaCxkb2NrZXI6KCk9PkxoLGluZGVudDooKT0+dDAsbm9ybWFsaXplOigpPT4kaCx0eXBlOigpPT5EaH0pO3ZhciBnMz1iKCgpPT57a3RlKCk7U3RlKCk7Q3RlKCk7VHRlKCk7THRlKCk7JEMoKTskdGUoKTtEdGUoKX0pO3ZhciBVQz1odCgoZjYseDMpPT57dmFyIHpUdD0yMDAsRXRlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixQdGU9OTAwNzE5OTI1NDc0MDk5MSxBQz0iW29iamVjdCBBcmd1bWVudHNdIixrVHQ9IltvYmplY3QgQXJyYXldIixJdGU9IltvYmplY3QgQm9vbGVhbl0iLE50ZT0iW29iamVjdCBEYXRlXSIsU1R0PSJbb2JqZWN0IEVycm9yXSIsREM9IltvYmplY3QgRnVuY3Rpb25dIixGdGU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixJaD0iW29iamVjdCBNYXBdIixPdGU9IltvYmplY3QgTnVtYmVyXSIsRUM9IltvYmplY3QgT2JqZWN0XSIsUnRlPSJbb2JqZWN0IFByb21pc2VdIixCdGU9IltvYmplY3QgUmVnRXhwXSIsTmg9IltvYmplY3QgU2V0XSIsSHRlPSJbb2JqZWN0IFN0cmluZ10iLHF0ZT0iW29iamVjdCBTeW1ib2xdIixQQz0iW29iamVjdCBXZWFrTWFwXSIsVnRlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsRmg9IltvYmplY3QgRGF0YVZpZXddIixqdGU9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsVXRlPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLFd0ZT0iW29iamVjdCBJbnQ4QXJyYXldIixHdGU9IltvYmplY3QgSW50MTZBcnJheV0iLFl0ZT0iW29iamVjdCBJbnQzMkFycmF5XSIsWnRlPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixYdGU9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixLdGU9IltvYmplY3QgVWludDE2QXJyYXldIixRdGU9IltvYmplY3QgVWludDMyQXJyYXldIixDVHQ9L1tcXF4kLiorPygpW1xde318XS9nLF9UdD0vXHcqJC8sVFR0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLExUdD0vXig/OjB8WzEtOV1cZCopJC8sZjE9e307ZjFbQUNdPWYxW2tUdF09ZjFbVnRlXT1mMVtGaF09ZjFbSXRlXT1mMVtOdGVdPWYxW2p0ZV09ZjFbVXRlXT1mMVtXdGVdPWYxW0d0ZV09ZjFbWXRlXT1mMVtJaF09ZjFbT3RlXT1mMVtFQ109ZjFbQnRlXT1mMVtOaF09ZjFbSHRlXT1mMVtxdGVdPWYxW1p0ZV09ZjFbWHRlXT1mMVtLdGVdPWYxW1F0ZV09ITAsZjFbU1R0XT1mMVtEQ109ZjFbUENdPSExO3ZhciAkVHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLEFUdD10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLG1zPSRUdHx8QVR0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLEp0ZT10eXBlb2YgZjY9PSJvYmplY3QiJiZmNiYmIWY2Lm5vZGVUeXBlJiZmNixlMWU9SnRlJiZ0eXBlb2YgeDM9PSJvYmplY3QiJiZ4MyYmIXgzLm5vZGVUeXBlJiZ4MyxEVHQ9ZTFlJiZlMWUuZXhwb3J0cz09PUp0ZTtmdW5jdGlvbiBFVHQodCxlKXtyZXR1cm4gdC5zZXQoZVswXSxlWzFdKSx0fWZ1bmN0aW9uIFBUdCh0LGUpe3JldHVybiB0LmFkZChlKSx0fWZ1bmN0aW9uIElUdCh0LGUpe2Zvcih2YXIgYT0tMSxpPXQ/dC5sZW5ndGg6MDsrK2E8aSYmZSh0W2FdLGEsdCkhPT0hMTspO3JldHVybiB0fWZ1bmN0aW9uIE5UdCh0LGUpe2Zvcih2YXIgYT0tMSxpPWUubGVuZ3RoLHI9dC5sZW5ndGg7KythPGk7KXRbcithXT1lW2FdO3JldHVybiB0fWZ1bmN0aW9uIHQxZSh0LGUsYSxpKXt2YXIgcj0tMSxzPXQ/dC5sZW5ndGg6MDtmb3IoaSYmcyYmKGE9dFsrK3JdKTsrK3I8czspYT1lKGEsdFtyXSxyLHQpO3JldHVybiBhfWZ1bmN0aW9uIEZUdCh0LGUpe2Zvcih2YXIgYT0tMSxpPUFycmF5KHQpOysrYTx0OylpW2FdPWUoYSk7cmV0dXJuIGl9ZnVuY3Rpb24gT1R0KHQsZSl7cmV0dXJuIHQ/LltlXX1mdW5jdGlvbiBhMWUodCl7dmFyIGU9ITE7aWYodCE9bnVsbCYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiIpdHJ5e2U9ISEodCsiIil9Y2F0Y2h7fXJldHVybiBlfWZ1bmN0aW9uIGkxZSh0KXt2YXIgZT0tMSxhPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihpLHIpe2FbKytlXT1bcixpXX0pLGF9ZnVuY3Rpb24gSUModCxlKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQoZShhKSl9fWZ1bmN0aW9uIHIxZSh0KXt2YXIgZT0tMSxhPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihpKXthWysrZV09aX0pLGF9dmFyIFJUdD1BcnJheS5wcm90b3R5cGUsQlR0PUZ1bmN0aW9uLnByb3RvdHlwZSxPaD1PYmplY3QucHJvdG90eXBlLE5DPW1zWyJfX2NvcmUtanNfc2hhcmVkX18iXSxzMWU9KGZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhOQyYmTkMua2V5cyYmTkMua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0pKCksbjFlPUJUdC50b1N0cmluZyxQbj1PaC5oYXNPd25Qcm9wZXJ0eSxSaD1PaC50b1N0cmluZyxIVHQ9UmVnRXhwKCJeIituMWUuY2FsbChQbikucmVwbGFjZShDVHQsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksbzFlPURUdD9tcy5CdWZmZXI6dm9pZCAwLGwxZT1tcy5TeW1ib2wsYzFlPW1zLlVpbnQ4QXJyYXkscVR0PUlDKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLFZUdD1PYmplY3QuY3JlYXRlLGpUdD1PaC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxVVHQ9UlR0LnNwbGljZSxkMWU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxXVHQ9bzFlP28xZS5pc0J1ZmZlcjp2b2lkIDAsR1R0PUlDKE9iamVjdC5rZXlzLE9iamVjdCksRkM9eTMobXMsIkRhdGFWaWV3IiksaDY9eTMobXMsIk1hcCIpLE9DPXkzKG1zLCJQcm9taXNlIiksUkM9eTMobXMsIlNldCIpLEJDPXkzKG1zLCJXZWFrTWFwIiksdTY9eTMoT2JqZWN0LCJjcmVhdGUiKSxZVHQ9cjAoRkMpLFpUdD1yMChoNiksWFR0PXIwKE9DKSxLVHQ9cjAoUkMpLFFUdD1yMChCQykscDFlPWwxZT9sMWUucHJvdG90eXBlOnZvaWQgMCxoMWU9cDFlP3AxZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBhMCh0KXt2YXIgZT0tMSxhPXQ/dC5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrZTxhOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1mdW5jdGlvbiBKVHQoKXt0aGlzLl9fZGF0YV9fPXU2P3U2KG51bGwpOnt9fWZ1bmN0aW9uIGVMdCh0KXtyZXR1cm4gdGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdfWZ1bmN0aW9uIHRMdCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHU2KXt2YXIgYT1lW3RdO3JldHVybiBhPT09RXRlP3ZvaWQgMDphfXJldHVybiBQbi5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9ZnVuY3Rpb24gYUx0KHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHU2P2VbdF0hPT12b2lkIDA6UG4uY2FsbChlLHQpfWZ1bmN0aW9uIGlMdCh0LGUpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIGFbdF09dTYmJmU9PT12b2lkIDA/RXRlOmUsdGhpc31hMC5wcm90b3R5cGUuY2xlYXI9SlR0LGEwLnByb3RvdHlwZS5kZWxldGU9ZUx0LGEwLnByb3RvdHlwZS5nZXQ9dEx0LGEwLnByb3RvdHlwZS5oYXM9YUx0LGEwLnByb3RvdHlwZS5zZXQ9aUx0O2Z1bmN0aW9uIGdzKHQpe3ZhciBlPS0xLGE9dD90Lmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7KytlPGE7KXt2YXIgaT10W2VdO3RoaXMuc2V0KGlbMF0saVsxXSl9fWZ1bmN0aW9uIHJMdCgpe3RoaXMuX19kYXRhX189W119ZnVuY3Rpb24gc0x0KHQpe3ZhciBlPXRoaXMuX19kYXRhX18sYT1CaChlLHQpO2lmKGE8MClyZXR1cm4hMTt2YXIgaT1lLmxlbmd0aC0xO3JldHVybiBhPT1pP2UucG9wKCk6VVR0LmNhbGwoZSxhLDEpLCEwfWZ1bmN0aW9uIG5MdCh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLGE9QmgoZSx0KTtyZXR1cm4gYTwwP3ZvaWQgMDplW2FdWzFdfWZ1bmN0aW9uIG9MdCh0KXtyZXR1cm4gQmgodGhpcy5fX2RhdGFfXyx0KT4tMX1mdW5jdGlvbiBsTHQodCxlKXt2YXIgYT10aGlzLl9fZGF0YV9fLGk9QmgoYSx0KTtyZXR1cm4gaTwwP2EucHVzaChbdCxlXSk6YVtpXVsxXT1lLHRoaXN9Z3MucHJvdG90eXBlLmNsZWFyPXJMdCxncy5wcm90b3R5cGUuZGVsZXRlPXNMdCxncy5wcm90b3R5cGUuZ2V0PW5MdCxncy5wcm90b3R5cGUuaGFzPW9MdCxncy5wcm90b3R5cGUuc2V0PWxMdDtmdW5jdGlvbiBiMyh0KXt2YXIgZT0tMSxhPXQ/dC5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrZTxhOyl7dmFyIGk9dFtlXTt0aGlzLnNldChpWzBdLGlbMV0pfX1mdW5jdGlvbiBjTHQoKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBhMCxtYXA6bmV3KGg2fHxncyksc3RyaW5nOm5ldyBhMH19ZnVuY3Rpb24gZEx0KHQpe3JldHVybiBIaCh0aGlzLHQpLmRlbGV0ZSh0KX1mdW5jdGlvbiBwTHQodCl7cmV0dXJuIEhoKHRoaXMsdCkuZ2V0KHQpfWZ1bmN0aW9uIGhMdCh0KXtyZXR1cm4gSGgodGhpcyx0KS5oYXModCl9ZnVuY3Rpb24gdUx0KHQsZSl7cmV0dXJuIEhoKHRoaXMsdCkuc2V0KHQsZSksdGhpc31iMy5wcm90b3R5cGUuY2xlYXI9Y0x0LGIzLnByb3RvdHlwZS5kZWxldGU9ZEx0LGIzLnByb3RvdHlwZS5nZXQ9cEx0LGIzLnByb3RvdHlwZS5oYXM9aEx0LGIzLnByb3RvdHlwZS5zZXQ9dUx0O2Z1bmN0aW9uIHYzKHQpe3RoaXMuX19kYXRhX189bmV3IGdzKHQpfWZ1bmN0aW9uIGZMdCgpe3RoaXMuX19kYXRhX189bmV3IGdzfWZ1bmN0aW9uIG1MdCh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5kZWxldGUodCl9ZnVuY3Rpb24gZ0x0KHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX1mdW5jdGlvbiBiTHQodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfWZ1bmN0aW9uIHZMdCh0LGUpe3ZhciBhPXRoaXMuX19kYXRhX187aWYoYSBpbnN0YW5jZW9mIGdzKXt2YXIgaT1hLl9fZGF0YV9fO2lmKCFoNnx8aS5sZW5ndGg8elR0LTEpcmV0dXJuIGkucHVzaChbdCxlXSksdGhpczthPXRoaXMuX19kYXRhX189bmV3IGIzKGkpfXJldHVybiBhLnNldCh0LGUpLHRoaXN9djMucHJvdG90eXBlLmNsZWFyPWZMdCx2My5wcm90b3R5cGUuZGVsZXRlPW1MdCx2My5wcm90b3R5cGUuZ2V0PWdMdCx2My5wcm90b3R5cGUuaGFzPWJMdCx2My5wcm90b3R5cGUuc2V0PXZMdDtmdW5jdGlvbiB5THQodCxlKXt2YXIgYT1WQyh0KXx8Vkx0KHQpP0ZUdCh0Lmxlbmd0aCxTdHJpbmcpOltdLGk9YS5sZW5ndGgscj0hIWk7Zm9yKHZhciBzIGluIHQpKGV8fFBuLmNhbGwodCxzKSkmJiEociYmKHM9PSJsZW5ndGgifHxSTHQocyxpKSkpJiZhLnB1c2gocyk7cmV0dXJuIGF9ZnVuY3Rpb24gdTFlKHQsZSxhKXt2YXIgaT10W2VdOyghKFBuLmNhbGwodCxlKSYmYjFlKGksYSkpfHxhPT09dm9pZCAwJiYhKGUgaW4gdCkpJiYodFtlXT1hKX1mdW5jdGlvbiBCaCh0LGUpe2Zvcih2YXIgYT10Lmxlbmd0aDthLS07KWlmKGIxZSh0W2FdWzBdLGUpKXJldHVybiBhO3JldHVybi0xfWZ1bmN0aW9uIHhMdCh0LGUpe3JldHVybiB0JiZmMWUoZSxqQyhlKSx0KX1mdW5jdGlvbiBIQyh0LGUsYSxpLHIscyxuKXt2YXIgbztpZihpJiYobz1zP2kodCxyLHMsbik6aSh0KSksbyE9PXZvaWQgMClyZXR1cm4gbztpZighcWgodCkpcmV0dXJuIHQ7dmFyIGQ9VkModCk7aWYoZCl7aWYobz1OTHQodCksIWUpcmV0dXJuIEVMdCh0LG8pfWVsc2V7dmFyIGM9aTAodCkscD1jPT1EQ3x8Yz09RnRlO2lmKFVMdCh0KSlyZXR1cm4gQ0x0KHQsZSk7aWYoYz09RUN8fGM9PUFDfHxwJiYhcyl7aWYoYTFlKHQpKXJldHVybiBzP3Q6e307aWYobz1GTHQocD97fTp0KSwhZSlyZXR1cm4gUEx0KHQseEx0KG8sdCkpfWVsc2V7aWYoIWYxW2NdKXJldHVybiBzP3Q6e307bz1PTHQodCxjLEhDLGUpfX1ufHwobj1uZXcgdjMpO3ZhciBsPW4uZ2V0KHQpO2lmKGwpcmV0dXJuIGw7aWYobi5zZXQodCxvKSwhZCl2YXIgZj1hP0lMdCh0KTpqQyh0KTtyZXR1cm4gSVR0KGZ8fHQsZnVuY3Rpb24oZyx5KXtmJiYoeT1nLGc9dFt5XSksdTFlKG8seSxIQyhnLGUsYSxpLHksdCxuKSl9KSxvfWZ1bmN0aW9uIHdMdCh0KXtyZXR1cm4gcWgodCk/VlR0KHQpOnt9fWZ1bmN0aW9uIE1MdCh0LGUsYSl7dmFyIGk9ZSh0KTtyZXR1cm4gVkModCk/aTpOVHQoaSxhKHQpKX1mdW5jdGlvbiB6THQodCl7cmV0dXJuIFJoLmNhbGwodCl9ZnVuY3Rpb24ga0x0KHQpe2lmKCFxaCh0KXx8SEx0KHQpKXJldHVybiExO3ZhciBlPXkxZSh0KXx8YTFlKHQpP0hUdDpUVHQ7cmV0dXJuIGUudGVzdChyMCh0KSl9ZnVuY3Rpb24gU0x0KHQpe2lmKCFnMWUodCkpcmV0dXJuIEdUdCh0KTt2YXIgZT1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KHQpKVBuLmNhbGwodCxhKSYmYSE9ImNvbnN0cnVjdG9yIiYmZS5wdXNoKGEpO3JldHVybiBlfWZ1bmN0aW9uIENMdCh0LGUpe2lmKGUpcmV0dXJuIHQuc2xpY2UoKTt2YXIgYT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCk7cmV0dXJuIHQuY29weShhKSxhfWZ1bmN0aW9uIHFDKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBjMWUoZSkuc2V0KG5ldyBjMWUodCkpLGV9ZnVuY3Rpb24gX0x0KHQsZSl7dmFyIGE9ZT9xQyh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKGEsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gVEx0KHQsZSxhKXt2YXIgaT1lP2EoaTFlKHQpLCEwKTppMWUodCk7cmV0dXJuIHQxZShpLEVUdCxuZXcgdC5jb25zdHJ1Y3Rvcil9ZnVuY3Rpb24gTEx0KHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLF9UdC5leGVjKHQpKTtyZXR1cm4gZS5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsZX1mdW5jdGlvbiAkTHQodCxlLGEpe3ZhciBpPWU/YShyMWUodCksITApOnIxZSh0KTtyZXR1cm4gdDFlKGksUFR0LG5ldyB0LmNvbnN0cnVjdG9yKX1mdW5jdGlvbiBBTHQodCl7cmV0dXJuIGgxZT9PYmplY3QoaDFlLmNhbGwodCkpOnt9fWZ1bmN0aW9uIERMdCh0LGUpe3ZhciBhPWU/cUModC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihhLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9ZnVuY3Rpb24gRUx0KHQsZSl7dmFyIGE9LTEsaT10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkoaSkpOysrYTxpOyllW2FdPXRbYV07cmV0dXJuIGV9ZnVuY3Rpb24gZjFlKHQsZSxhLGkpe2F8fChhPXt9KTtmb3IodmFyIHI9LTEscz1lLmxlbmd0aDsrK3I8czspe3ZhciBuPWVbcl0sbz1pP2koYVtuXSx0W25dLG4sYSx0KTp2b2lkIDA7dTFlKGEsbixvPT09dm9pZCAwP3Rbbl06byl9cmV0dXJuIGF9ZnVuY3Rpb24gUEx0KHQsZSl7cmV0dXJuIGYxZSh0LG0xZSh0KSxlKX1mdW5jdGlvbiBJTHQodCl7cmV0dXJuIE1MdCh0LGpDLG0xZSl9ZnVuY3Rpb24gSGgodCxlKXt2YXIgYT10Ll9fZGF0YV9fO3JldHVybiBCTHQoZSk/YVt0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTphLm1hcH1mdW5jdGlvbiB5Myh0LGUpe3ZhciBhPU9UdCh0LGUpO3JldHVybiBrTHQoYSk/YTp2b2lkIDB9dmFyIG0xZT1kMWU/SUMoZDFlLE9iamVjdCk6WUx0LGkwPXpMdDsoRkMmJmkwKG5ldyBGQyhuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Rmh8fGg2JiZpMChuZXcgaDYpIT1JaHx8T0MmJmkwKE9DLnJlc29sdmUoKSkhPVJ0ZXx8UkMmJmkwKG5ldyBSQykhPU5ofHxCQyYmaTAobmV3IEJDKSE9UEMpJiYoaTA9ZnVuY3Rpb24odCl7dmFyIGU9UmguY2FsbCh0KSxhPWU9PUVDP3QuY29uc3RydWN0b3I6dm9pZCAwLGk9YT9yMChhKTp2b2lkIDA7aWYoaSlzd2l0Y2goaSl7Y2FzZSBZVHQ6cmV0dXJuIEZoO2Nhc2UgWlR0OnJldHVybiBJaDtjYXNlIFhUdDpyZXR1cm4gUnRlO2Nhc2UgS1R0OnJldHVybiBOaDtjYXNlIFFUdDpyZXR1cm4gUEN9cmV0dXJuIGV9KTtmdW5jdGlvbiBOTHQodCl7dmFyIGU9dC5sZW5ndGgsYT10LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiZ0eXBlb2YgdFswXT09InN0cmluZyImJlBuLmNhbGwodCwiaW5kZXgiKSYmKGEuaW5kZXg9dC5pbmRleCxhLmlucHV0PXQuaW5wdXQpLGF9ZnVuY3Rpb24gRkx0KHQpe3JldHVybiB0eXBlb2YgdC5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIWcxZSh0KT93THQocVR0KHQpKTp7fX1mdW5jdGlvbiBPTHQodCxlLGEsaSl7dmFyIHI9dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSBWdGU6cmV0dXJuIHFDKHQpO2Nhc2UgSXRlOmNhc2UgTnRlOnJldHVybiBuZXcgcigrdCk7Y2FzZSBGaDpyZXR1cm4gX0x0KHQsaSk7Y2FzZSBqdGU6Y2FzZSBVdGU6Y2FzZSBXdGU6Y2FzZSBHdGU6Y2FzZSBZdGU6Y2FzZSBadGU6Y2FzZSBYdGU6Y2FzZSBLdGU6Y2FzZSBRdGU6cmV0dXJuIERMdCh0LGkpO2Nhc2UgSWg6cmV0dXJuIFRMdCh0LGksYSk7Y2FzZSBPdGU6Y2FzZSBIdGU6cmV0dXJuIG5ldyByKHQpO2Nhc2UgQnRlOnJldHVybiBMTHQodCk7Y2FzZSBOaDpyZXR1cm4gJEx0KHQsaSxhKTtjYXNlIHF0ZTpyZXR1cm4gQUx0KHQpfX1mdW5jdGlvbiBSTHQodCxlKXtyZXR1cm4gZT1lPz9QdGUsISFlJiYodHlwZW9mIHQ9PSJudW1iZXIifHxMVHQudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIEJMdCh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gZT09InN0cmluZyJ8fGU9PSJudW1iZXIifHxlPT0ic3ltYm9sInx8ZT09ImJvb2xlYW4iP3QhPT0iX19wcm90b19fIjp0PT09bnVsbH1mdW5jdGlvbiBITHQodCl7cmV0dXJuISFzMWUmJnMxZSBpbiB0fWZ1bmN0aW9uIGcxZSh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yLGE9dHlwZW9mIGU9PSJmdW5jdGlvbiImJmUucHJvdG90eXBlfHxPaDtyZXR1cm4gdD09PWF9ZnVuY3Rpb24gcjAodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBuMWUuY2FsbCh0KX1jYXRjaHt9dHJ5e3JldHVybiB0KyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gcUx0KHQpe3JldHVybiBIQyh0LCEwLCEwKX1mdW5jdGlvbiBiMWUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX1mdW5jdGlvbiBWTHQodCl7cmV0dXJuIGpMdCh0KSYmUG4uY2FsbCh0LCJjYWxsZWUiKSYmKCFqVHQuY2FsbCh0LCJjYWxsZWUiKXx8UmguY2FsbCh0KT09QUMpfXZhciBWQz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHYxZSh0KXtyZXR1cm4gdCE9bnVsbCYmV0x0KHQubGVuZ3RoKSYmIXkxZSh0KX1mdW5jdGlvbiBqTHQodCl7cmV0dXJuIEdMdCh0KSYmdjFlKHQpfXZhciBVTHQ9V1R0fHxaTHQ7ZnVuY3Rpb24geTFlKHQpe3ZhciBlPXFoKHQpP1JoLmNhbGwodCk6IiI7cmV0dXJuIGU9PURDfHxlPT1GdGV9ZnVuY3Rpb24gV0x0KHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciImJnQ+LTEmJnQlMT09MCYmdDw9UHRlfWZ1bmN0aW9uIHFoKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiEhdCYmKGU9PSJvYmplY3QifHxlPT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBHTHQodCl7cmV0dXJuISF0JiZ0eXBlb2YgdD09Im9iamVjdCJ9ZnVuY3Rpb24gakModCl7cmV0dXJuIHYxZSh0KT95THQodCk6U0x0KHQpfWZ1bmN0aW9uIFlMdCgpe3JldHVybltdfWZ1bmN0aW9uIFpMdCgpe3JldHVybiExfXgzLmV4cG9ydHM9cUx0fSk7dmFyIFdDPWh0KCh1UzEseDFlKT0+eyJ1c2Ugc3RyaWN0Ijt4MWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGU9e2NtcDplfSk7dmFyIGE9dHlwZW9mIGUuY3ljbGVzPT0iYm9vbGVhbiI/ZS5jeWNsZXM6ITEsaT1lLmNtcCYmKGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obyxkKXt2YXIgYz17a2V5Om8sdmFsdWU6bltvXX0scD17a2V5OmQsdmFsdWU6bltkXX07cmV0dXJuIHMoYyxwKX19fSkoZS5jbXApLHI9W107cmV0dXJuKGZ1bmN0aW9uIHMobil7aWYobiYmbi50b0pTT04mJnR5cGVvZiBuLnRvSlNPTj09ImZ1bmN0aW9uIiYmKG49bi50b0pTT04oKSksbiE9PXZvaWQgMCl7aWYodHlwZW9mIG49PSJudW1iZXIiKXJldHVybiBpc0Zpbml0ZShuKT8iIituOiJudWxsIjtpZih0eXBlb2YgbiE9Im9iamVjdCIpcmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pO3ZhciBvLGQ7aWYoQXJyYXkuaXNBcnJheShuKSl7Zm9yKGQ9IlsiLG89MDtvPG4ubGVuZ3RoO28rKylvJiYoZCs9IiwiKSxkKz1zKG5bb10pfHwibnVsbCI7cmV0dXJuIGQrIl0ifWlmKG49PT1udWxsKXJldHVybiJudWxsIjtpZihyLmluZGV4T2YobikhPT0tMSl7aWYoYSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoIl9fY3ljbGVfXyIpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04iKX12YXIgYz1yLnB1c2gobiktMSxwPU9iamVjdC5rZXlzKG4pLnNvcnQoaSYmaShuKSk7Zm9yKGQ9IiIsbz0wO288cC5sZW5ndGg7bysrKXt2YXIgbD1wW29dLGY9cyhuW2xdKTtmJiYoZCYmKGQrPSIsIiksZCs9SlNPTi5zdHJpbmdpZnkobCkrIjoiK2YpfXJldHVybiByLnNwbGljZShjLDEpLCJ7IitkKyJ9In19KSh0KX19KTt2YXIgVmgsdzFlLGpoLEdDPWIoKCk9Pnt1MygpO2czKCk7Vmg9VTEoVUMoKSwxKSx3MWU9VTEoV0MoKSwxKSxqaD13MWUuZGVmYXVsdH0pO2Z1bmN0aW9uIEtMdCh0KXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyLmZyb20odCkudG9TdHJpbmcoImJhc2U2NCIpOmJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi50KSl9ZnVuY3Rpb24gUUx0KHQpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXtsZXQgZT1CdWZmZXIuZnJvbSh0LCJiYXNlNjQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9cmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oYXRvYih0KSkubWFwKGU9PmUuY2hhckNvZGVBdCgwKSkpfWZ1bmN0aW9uIFpDKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQsVWgsZSl9ZnVuY3Rpb24gWEModCl7cmV0dXJuIEpTT04ucGFyc2UodCxNMWUpfWZ1bmN0aW9uIEpMdCh0KXtyZXR1cm4gazFlKHQpJiZ0LnR5cGU9PT0iRW5jb2RlZEJ1ZmZlciImJllDKHQuZGF0YSl9ZnVuY3Rpb24gZSR0KHQpe3JldHVybiBrMWUodCkmJnQudHlwZT09PSJCdWZmZXIiJiYoejFlKHQuZGF0YSl8fFlDKHQuZGF0YSkpfHx0IGluc3RhbmNlb2YgVWludDhBcnJheX1mdW5jdGlvbiB6MWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gWUModCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIn1mdW5jdGlvbiBrMWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGx9dmFyIFVoLE0xZSxTMWU9YigoKT0+e0dDKCk7VWg9KHQsZSk9PntpZihlJHQoZSkpe2xldCBhO2lmKCJkYXRhImluIGUmJnoxZShlLmRhdGEpKWE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KWE9ZTtlbHNlIHJldHVybiBlO3JldHVybnt0eXBlOiJFbmNvZGVkQnVmZmVyIixkYXRhOiJiYXNlNjQ6IitLTHQoYSl9fXJldHVybiBlfSxNMWU9KHQsZSk9PntpZihKTHQoZSkmJllDKGUuZGF0YSkmJmUuZGF0YS5zdGFydHNXaXRoKCJiYXNlNjQ6Iikpe2xldCBhPWUuZGF0YS5zbGljZSg3KTtyZXR1cm4gUUx0KGEpfXJldHVybiBlfX0pO3ZhciBDMT17fTtXZShDMSx7U21hcnRqc29uOigpPT5RQyxkZWVwRXF1YWxKc29uTFN0cmluZ3M6KCk9PmwkdCxkZWVwRXF1YWxPYmplY3RzOigpPT5DMWUsZm9sZERlYzooKT0+byR0LHBhcnNlOigpPT5XaCxwYXJzZUJhc2U2NDooKT0+biR0LHBhcnNlSnNvbkw6KCk9PktDLHN0YWJsZU9uZVdheVN0cmluZ2lmeTooKT0+aSR0LHN0cmluZ2lmeTooKT0+czAsc3RyaW5naWZ5QmFzZTY0OigpPT5zJHQsc3RyaW5naWZ5SnNvbkw6KCk9PmEkdCxzdHJpbmdpZnlQcmV0dHk6KCk9PnIkdH0pO3ZhciBXaCxLQyxhJHQsaSR0LHMwLHIkdCxzJHQsbiR0LFFDLG8kdCxDMWUsbCR0LHczPWIoKCk9PntHQygpO1MxZSgpO1doPVhDLEtDPXQ9PnQuc3BsaXQoYApgKS5yZWR1Y2UoKGkscik9PntsZXQgcz1yLnRyaW0oKTtyZXR1cm4gcy5sZW5ndGg+MCYmaS5wdXNoKFdoKHMpKSxpfSxbXSksYSR0PXQ9PnQubWFwKGU9PnMwKGUpKS5qb2luKGAKYCksaSR0PSh0LGUsYT17fSk9PntsZXQgaT1uZXcgV2Vha1NldCxyPW89PntpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXJldHVybiBvO2xldCBkPVVoKCIiLG8pO2lmKGQmJmQudHlwZT09PSJFbmNvZGVkQnVmZmVyIiYmdHlwZW9mIGQuZGF0YT09InN0cmluZyIpcmV0dXJuIGQ7aWYoaS5oYXMobykpcmV0dXJuIl9fY3ljbGVfXyI7aWYoaS5hZGQobyksQXJyYXkuaXNBcnJheShvKSlyZXR1cm4gby5tYXAocD0+cihwKSk7bGV0IGM9e307Zm9yKGxldCBwIG9mIE9iamVjdC5rZXlzKG8pKXRyeXtjW3BdPXIob1twXSl9Y2F0Y2h7Y1twXT0iX191bnNlcmlhbGl6YWJsZV9fIn1yZXR1cm4gY30scz1yKHQpLG49ey4uLmEsY3ljbGVzOiEwfTtpZihlJiYhbi5jbXApe2xldCBvPW5ldyBNYXA7ZS5mb3JFYWNoKChkLGMpPT5vLnNldChkLGMpKSxuLmNtcD0oZCxjKT0+e2xldCBwPW8uaGFzKGQua2V5KT9vLmdldChkLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9by5oYXMoYy5rZXkpP28uZ2V0KGMua2V5KTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHAhPT1sP3AtbDpkLmtleTxjLmtleT8tMTpkLmtleT5jLmtleT8xOjB9fXJldHVybiBqaChzLG4pfSxzMD0odCxlLGE9e30pPT57bGV0IGk9WkModCk7dD1KU09OLnBhcnNlKGkpO2xldCByPXsuLi5hfTtpZihlJiYhci5jbXApe2xldCBuPW5ldyBNYXA7ZS5mb3JFYWNoKChvLGQpPT5uLnNldChvLGQpKSxyLmNtcD0obyxkKT0+e2xldCBjPW4uaGFzKG8ua2V5KT9uLmdldChvLmtleSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHA9bi5oYXMoZC5rZXkpP24uZ2V0KGQua2V5KTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIGMhPT1wP2MtcDpvLmtleTxkLmtleT8tMTpvLmtleT5kLmtleT8xOjB9fXJldHVybiBqaCh0LHIpfSxyJHQ9dD0+e2xldCBlPXMwKHQpLGE9SlNPTi5wYXJzZShlKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfSxzJHQ9KC4uLnQpPT57bGV0IGU9czAoLi4udCk7cmV0dXJuIFMyLmJhc2U2NC5lbmNvZGVVcmkoZSl9LG4kdD10PT57bGV0IGU9UzIuYmFzZTY0LGk9KGUuZGVjb2RlVXJpfHxlLmRlY29kZSkodCk7cmV0dXJuIFdoKGkpfSxRQz1jbGFzcyB0e3N0YXRpYyBlbmZvbGRGcm9tT2JqZWN0KGUpe2xldCBhPW5ldyB0aGlzLGk9YS5zYXZlYWJsZVByb3BlcnRpZXN8fFtdO2ZvcihsZXQgciBpbiBlKWkuaW5kZXhPZihyKSE9PS0xJiYoYVtyXT1lW3JdKTtyZXR1cm4gYX1zdGF0aWMgZW5mb2xkRnJvbUpzb24oZSl7bGV0IGE9V2goZSk7cmV0dXJuIHRoaXMuZW5mb2xkRnJvbU9iamVjdChhKX1mb2xkVG9PYmplY3QoKXtsZXQgZT1uZXcgU2V0O3JldHVybiBlLmFkZCh0aGlzKSx0aGlzLmZvbGRUb09iamVjdEludGVybmFsKGUpfWZvbGRUb09iamVjdEludGVybmFsKGUpe2xldCBhPXt9LGk9cz0+e2lmKHMgaW5zdGFuY2VvZiB0KXtpZihlLmhhcyhzKSl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkIik7cmV0dXJuIGUuYWRkKHMpLHMuZm9sZFRvT2JqZWN0SW50ZXJuYWwoZSl9cmV0dXJuIEFycmF5LmlzQXJyYXkocyk/cy5tYXAobj0+aShuKSk6VmguZGVmYXVsdChzKX0scj10aGlzLnNhdmVhYmxlUHJvcGVydGllc3x8W107Zm9yKGxldCBzIG9mIHIpe2xldCBuPXRoaXNbc107YVtzXT1pKG4pfXJldHVybiBhfWZvbGRUb0pzb24oKXtsZXQgZT10aGlzLmZvbGRUb09iamVjdCgpO3JldHVybiBzMChlKX19LG8kdD0oKT0+KHQsZSk9Pnt0LnNhdmVhYmxlUHJvcGVydGllc3x8KHQuc2F2ZWFibGVQcm9wZXJ0aWVzPVtdKSx0LnNhdmVhYmxlUHJvcGVydGllcy5wdXNoKGUpfSxDMWU9KHQsZSk9PntsZXQgYT1zMCh0KSxpPXMwKGUpO3JldHVybiBhPT09aX0sbCR0PSh0LGUpPT57bGV0IGE9S0ModCksaT1LQyhlKTtyZXR1cm4gQzFlKGEsaSl9fSk7dmFyIGc2PXt9O1dlKGc2LHtkZWxldGVEQjooKT0+STFlLG9wZW5EQjooKT0+UDFlLHVud3JhcDooKT0+bTYsd3JhcDooKT0+VHJ9KTtmdW5jdGlvbiBjJHQoKXtyZXR1cm4gXzFlfHwoXzFlPVtJREJEYXRhYmFzZSxJREJPYmplY3RTdG9yZSxJREJJbmRleCxJREJDdXJzb3IsSURCVHJhbnNhY3Rpb25dKX1mdW5jdGlvbiBkJHQoKXtyZXR1cm4gVDFlfHwoVDFlPVtJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZSxJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlUHJpbWFyeUtleV0pfWZ1bmN0aW9uIHAkdCh0KXtsZXQgZT1uZXcgUHJvbWlzZSgoYSxpKT0+e2xldCByPSgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKCJzdWNjZXNzIixzKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixuKX0scz0oKT0+e2EoVHIodC5yZXN1bHQpKSxyKCl9LG49KCk9PntpKHQuZXJyb3IpLHIoKX07dC5hZGRFdmVudExpc3RlbmVyKCJzdWNjZXNzIixzKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuKX0pO3JldHVybiBHaC5zZXQoZSx0KSxlfWZ1bmN0aW9uIGgkdCh0KXtpZihlXy5oYXModCkpcmV0dXJuO2xldCBlPW5ldyBQcm9taXNlKChhLGkpPT57bGV0IHI9KCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIixzKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixuKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX0scz0oKT0+e2EoKSxyKCl9LG49KCk9PntpKHQuZXJyb3J8fG5ldyBET01FeGNlcHRpb24oIkFib3J0RXJyb3IiLCJBYm9ydEVycm9yIikpLHIoKX07dC5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIscyksdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbiksdC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9KTtlXy5zZXQodCxlKX1mdW5jdGlvbiBMMWUodCl7YV89dChhXyl9ZnVuY3Rpb24gdSR0KHQpe3JldHVybiBkJHQoKS5pbmNsdWRlcyh0KT9mdW5jdGlvbiguLi5lKXtyZXR1cm4gdC5hcHBseShtNih0aGlzKSxlKSxUcih0aGlzLnJlcXVlc3QpfTpmdW5jdGlvbiguLi5lKXtyZXR1cm4gVHIodC5hcHBseShtNih0aGlzKSxlKSl9fWZ1bmN0aW9uIGYkdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dSR0KHQpOih0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24mJmgkdCh0KSxKQyh0LGMkdCgpKT9uZXcgUHJveHkodCxhXyk6dCl9ZnVuY3Rpb24gVHIodCl7aWYodCBpbnN0YW5jZW9mIElEQlJlcXVlc3QpcmV0dXJuIHAkdCh0KTtpZih0Xy5oYXModCkpcmV0dXJuIHRfLmdldCh0KTtsZXQgZT1mJHQodCk7cmV0dXJuIGUhPT10JiYodF8uc2V0KHQsZSksR2guc2V0KGUsdCkpLGV9ZnVuY3Rpb24gUDFlKHQsZSx7YmxvY2tlZDphLHVwZ3JhZGU6aSxibG9ja2luZzpyLHRlcm1pbmF0ZWQ6c309e30pe2xldCBuPWluZGV4ZWREQi5vcGVuKHQsZSksbz1UcihuKTtyZXR1cm4gaSYmbi5hZGRFdmVudExpc3RlbmVyKCJ1cGdyYWRlbmVlZGVkIixkPT57aShUcihuLnJlc3VsdCksZC5vbGRWZXJzaW9uLGQubmV3VmVyc2lvbixUcihuLnRyYW5zYWN0aW9uKSxkKX0pLGEmJm4uYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2tlZCIsZD0+YShkLm9sZFZlcnNpb24sZC5uZXdWZXJzaW9uLGQpKSxvLnRoZW4oZD0+e3MmJmQuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT5zKCkpLHImJmQuYWRkRXZlbnRMaXN0ZW5lcigidmVyc2lvbmNoYW5nZSIsYz0+cihjLm9sZFZlcnNpb24sYy5uZXdWZXJzaW9uLGMpKX0pLmNhdGNoKCgpPT57fSksb31mdW5jdGlvbiBJMWUodCx7YmxvY2tlZDplfT17fSl7bGV0IGE9aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKHQpO3JldHVybiBlJiZhLmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLGk9PmUoaS5vbGRWZXJzaW9uLGkpKSxUcihhKS50aGVuKCgpPT57fSl9ZnVuY3Rpb24gJDFlKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgSURCRGF0YWJhc2UmJiEoZSBpbiB0KSYmdHlwZW9mIGU9PSJzdHJpbmciKSlyZXR1cm47aWYoaV8uZ2V0KGUpKXJldHVybiBpXy5nZXQoZSk7bGV0IGE9ZS5yZXBsYWNlKC9Gcm9tSW5kZXgkLywiIiksaT1lIT09YSxyPWckdC5pbmNsdWRlcyhhKTtpZighKGEgaW4oaT9JREJJbmRleDpJREJPYmplY3RTdG9yZSkucHJvdG90eXBlKXx8IShyfHxtJHQuaW5jbHVkZXMoYSkpKXJldHVybjtsZXQgcz1hc3luYyBmdW5jdGlvbihuLC4uLm8pe2xldCBkPXRoaXMudHJhbnNhY3Rpb24obixyPyJyZWFkd3JpdGUiOiJyZWFkb25seSIpLGM9ZC5zdG9yZTtyZXR1cm4gaSYmKGM9Yy5pbmRleChvLnNoaWZ0KCkpKSwoYXdhaXQgUHJvbWlzZS5hbGwoW2NbYV0oLi4ubyksciYmZC5kb25lXSkpWzBdfTtyZXR1cm4gaV8uc2V0KGUscyksc31hc3luYyBmdW5jdGlvbip5JHQoLi4udCl7bGV0IGU9dGhpcztpZihlIGluc3RhbmNlb2YgSURCQ3Vyc29yfHwoZT1hd2FpdCBlLm9wZW5DdXJzb3IoLi4udCkpLCFlKXJldHVybjtlPWU7bGV0IGE9bmV3IFByb3h5KGUsdiR0KTtmb3IoRDFlLnNldChhLGUpLEdoLnNldChhLG02KGUpKTtlOyl5aWVsZCBhLGU9YXdhaXQocl8uZ2V0KGEpfHxlLmNvbnRpbnVlKCkpLHJfLmRlbGV0ZShhKX1mdW5jdGlvbiBFMWUodCxlKXtyZXR1cm4gZT09PVN5bWJvbC5hc3luY0l0ZXJhdG9yJiZKQyh0LFtJREJJbmRleCxJREJPYmplY3RTdG9yZSxJREJDdXJzb3JdKXx8ZT09PSJpdGVyYXRlIiYmSkModCxbSURCSW5kZXgsSURCT2JqZWN0U3RvcmVdKX12YXIgSkMsXzFlLFQxZSxlXyx0XyxHaCxhXyxtNixtJHQsZyR0LGlfLGIkdCxBMWUscl8sRDFlLHYkdCxOMWU9YigoKT0+e0pDPSh0LGUpPT5lLnNvbWUoYT0+dCBpbnN0YW5jZW9mIGEpO2VfPW5ldyBXZWFrTWFwLHRfPW5ldyBXZWFrTWFwLEdoPW5ldyBXZWFrTWFwO2FfPXtnZXQodCxlLGEpe2lmKHQgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbil7aWYoZT09PSJkb25lIilyZXR1cm4gZV8uZ2V0KHQpO2lmKGU9PT0ic3RvcmUiKXJldHVybiBhLm9iamVjdFN0b3JlTmFtZXNbMV0/dm9pZCAwOmEub2JqZWN0U3RvcmUoYS5vYmplY3RTdG9yZU5hbWVzWzBdKX1yZXR1cm4gVHIodFtlXSl9LHNldCh0LGUsYSl7cmV0dXJuIHRbZV09YSwhMH0saGFzKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBJREJUcmFuc2FjdGlvbiYmKGU9PT0iZG9uZSJ8fGU9PT0ic3RvcmUiKT8hMDplIGluIHR9fTttNj10PT5HaC5nZXQodCk7bSR0PVsiZ2V0IiwiZ2V0S2V5IiwiZ2V0QWxsIiwiZ2V0QWxsS2V5cyIsImNvdW50Il0sZyR0PVsicHV0IiwiYWRkIiwiZGVsZXRlIiwiY2xlYXIiXSxpXz1uZXcgTWFwO0wxZSh0PT4oey4uLnQsZ2V0OihlLGEsaSk9PiQxZShlLGEpfHx0LmdldChlLGEsaSksaGFzOihlLGEpPT4hISQxZShlLGEpfHx0LmhhcyhlLGEpfSkpO2IkdD1bImNvbnRpbnVlIiwiY29udGludWVQcmltYXJ5S2V5IiwiYWR2YW5jZSJdLEExZT17fSxyXz1uZXcgV2Vha01hcCxEMWU9bmV3IFdlYWtNYXAsdiR0PXtnZXQodCxlKXtpZighYiR0LmluY2x1ZGVzKGUpKXJldHVybiB0W2VdO2xldCBhPUExZVtlXTtyZXR1cm4gYXx8KGE9QTFlW2VdPWZ1bmN0aW9uKC4uLmkpe3JfLnNldCh0aGlzLEQxZS5nZXQodGhpcylbZV0oLi4uaSkpfSksYX19O0wxZSh0PT4oey4uLnQsZ2V0KGUsYSxpKXtyZXR1cm4gRTFlKGUsYSk/eSR0OnQuZ2V0KGUsYSxpKX0saGFzKGUsYSl7cmV0dXJuIEUxZShlLGEpfHx0LmhhcyhlLGEpfX0pKX0pO3ZhciBzXz1iKCgpPT57YTYoKTt1MygpO3czKCk7ZDIoKTtJaSgpO1RjKCk7TjFlKCl9KTt2YXIgYjYsbl89YigoKT0+e3NfKCk7YjY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0Q2FsbGVkPSExLHRoaXMucmVhZHlEZWZlcnJlZD1IZS5kZWZlcigpLHRoaXMub3B0aW9ucz1lfWFzeW5jIGluaXQoKXtpZih0aGlzLmluaXRDYWxsZWQpe2F3YWl0IHRoaXMucmVhZHlEZWZlcnJlZC5wcm9taXNlO3JldHVybn10aGlzLmluaXRDYWxsZWQ9ITA7bGV0IGU9bmV3IE9hLlNtYXJ0ZW52O2lmKCFlLmlzQnJvd3NlciYmIWdsb2JhbFRoaXMuaW5kZXhlZERCJiYoY29uc29sZS5sb2coImhleSIpLGNvbnNvbGUubG9nKGdsb2JhbFRoaXMuaW5kZXhlZERCKSxhd2FpdCBlLmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYi9hdXRvIiksIWdsb2JhbFRoaXMuaW5kZXhlZERCKSl7bGV0IGE9YXdhaXQgZS5nZXRTYWZlTm9kZU1vZHVsZSgiZmFrZS1pbmRleGVkZGIiKTtnbG9iYWxUaGlzLmluZGV4ZWREQj1uZXcgYS5JREJGYWN0b3J5fXRoaXMuZGI9YXdhaXQgZzYub3BlbkRCKHRoaXMub3B0aW9ucy5kYk5hbWUsMSx7dXBncmFkZTphPT57YS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKX19KSx0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpfWFzeW5jIGdldChlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksdGhpcy5kYi5nZXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSxlKX1hc3luYyBjaGVjayhlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksISFhd2FpdCB0aGlzLmdldChlKX1hc3luYyBzZXQoZSxhKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksdGhpcy5kYi5wdXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSxhLGUpfWFzeW5jIGRlbGV0ZShlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksdGhpcy5kYi5kZWxldGUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSxlKX1hc3luYyBjbGVhcigpe3JldHVybiBhd2FpdCB0aGlzLmluaXQoKSx0aGlzLmRiLmNsZWFyKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpfWFzeW5jIGtleXMoKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0KCksdGhpcy5kYi5nZXRBbGxLZXlzKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpfX19KTt2YXIgb18sTzFlPWIoKCk9PntuXygpO3NfKCk7b189Y2xhc3N7Y29uc3RydWN0b3IoZT0iZGVmYXVsdCIpe3RoaXMud2Vic3RvcmU9bmV3IGI2KHtkYk5hbWU6InRyU3RvcmUiLHN0b3JlTmFtZTpgdHJTdG9yZS0ke2V9YH0pfWJ1aWxkS2V5KGUpe3JldHVybiBDMS5zdHJpbmdpZnkoe21ldGhvZDplLm1ldGhvZCxyZXF1ZXN0OmUucmVxdWVzdH0pfWFzeW5jIHNldEJ5UmVxdWVzdChlKXtpZighZS5yZXNwb25zZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc3RvcmUgcmVxdWVzdHMgd2l0aG91dCBhIHJlc3BvbnNlIHByZXNlbnQiKTthd2FpdCB0aGlzLndlYnN0b3JlLnNldCh0aGlzLmJ1aWxkS2V5KGUpLGUpfWFzeW5jIGdldEJ5UmVxdWVzdChlKXtyZXR1cm4gYXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQodGhpcy5idWlsZEtleShlKSl9fX0pO3ZhciBsYT17fTtXZShsYSx7VHlwZWRyZXF1ZXN0Q2FjaGU6KCk9Pm9fLFdlYlN0b3JlOigpPT5iNn0pO3ZhciB2Nj1iKCgpPT57TzFlKCk7bl8oKX0pO3ZhciB5Nj1iKCgpPT57YnIoKTt1MygpO3czKCk7ZDIoKTt2NigpfSk7dmFyIE0zLFpoPWIoKCk9Pnt5NigpO00zPWNsYXNze2NvbnN0cnVjdG9yKGU9IndlYnJlcXVlc3QtdjQiLGE9ImNhY2hlIil7dGhpcy53ZWJzdG9yZT1uZXcgbGEuV2ViU3RvcmUoe2RiTmFtZTplLHN0b3JlTmFtZTphfSksdGhpcy5pbml0UHJvbWlzZT10aGlzLmluaXQoKX1hc3luYyBpbml0KCl7fWdlbmVyYXRlQ2FjaGVLZXkoZSl7bGV0IGE9ZS51cmwsaT1lLm1ldGhvZDtyZXR1cm4gaT09PSJHRVQiP2E6YCR7aX06JHthfWB9YXN5bmMgc2V0KGUsYSl7YXdhaXQgdGhpcy5pbml0UHJvbWlzZSxhd2FpdCB0aGlzLndlYnN0b3JlLnNldChlLGEpfWFzeW5jIGdldChlKXthd2FpdCB0aGlzLmluaXRQcm9taXNlO3RyeXtyZXR1cm4gYXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQoZSl8fG51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWFzeW5jIGhhcyhlKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0UHJvbWlzZSxhd2FpdCB0aGlzLndlYnN0b3JlLmNoZWNrKGUpfWFzeW5jIGRlbGV0ZShlKXthd2FpdCB0aGlzLmluaXRQcm9taXNlLGF3YWl0IHRoaXMud2Vic3RvcmUuZGVsZXRlKGUpfWFzeW5jIGNsZWFyKCl7YXdhaXQgdGhpcy5pbml0UHJvbWlzZSxhd2FpdCB0aGlzLndlYnN0b3JlLmNsZWFyKCl9cmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShlKXtsZXQgYT1uZXcgSGVhZGVycyhlLmhlYWRlcnMpO3JldHVybiBuZXcgUmVzcG9uc2UoZS5yZXNwb25zZSx7c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0LGhlYWRlcnM6YX0pfWFzeW5jIGNhY2hlRW50cnlGcm9tUmVzcG9uc2UoZSxhLGkpe2xldCByPWEuY2xvbmUoKSxzPWF3YWl0IHIuYXJyYXlCdWZmZXIoKSxuPXt9O3JldHVybiByLmhlYWRlcnMuZm9yRWFjaCgobyxkKT0+e25bZF09b30pLHtyZXNwb25zZTpzLGhlYWRlcnM6bix0aW1lc3RhbXA6RGF0ZS5ub3coKSxldGFnOmk/LmV0YWd8fHIuaGVhZGVycy5nZXQoImV0YWciKXx8dm9pZCAwLGxhc3RNb2RpZmllZDppPy5sYXN0TW9kaWZpZWR8fHIuaGVhZGVycy5nZXQoImxhc3QtbW9kaWZpZWQiKXx8dm9pZCAwLG1heEFnZTppPy5tYXhBZ2UsdXJsOmUsc3RhdHVzOnIuc3RhdHVzLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fX1hc3luYyBwcnVuZUV4cGlyZWQoKXtyZXR1cm4gYXdhaXQgdGhpcy5pbml0UHJvbWlzZSwwfX19KTtmdW5jdGlvbiB4JHQodCl7bGV0IGU9e21heEFnZTowLGltbXV0YWJsZTohMSxub0NhY2hlOiExLG5vU3RvcmU6ITEsbXVzdFJldmFsaWRhdGU6ITF9O2lmKCF0KXJldHVybiBlO2xldCBhPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLCIpLm1hcChpPT5pLnRyaW0oKSk7Zm9yKGxldCBpIG9mIGEpaWYoaT09PSJuby1jYWNoZSIpZS5ub0NhY2hlPSEwO2Vsc2UgaWYoaT09PSJuby1zdG9yZSIpZS5ub1N0b3JlPSEwO2Vsc2UgaWYoaT09PSJpbW11dGFibGUiKWUuaW1tdXRhYmxlPSEwO2Vsc2UgaWYoaT09PSJtdXN0LXJldmFsaWRhdGUiKWUubXVzdFJldmFsaWRhdGU9ITA7ZWxzZSBpZihpLnN0YXJ0c1dpdGgoIm1heC1hZ2U9Iikpe2xldCByPXBhcnNlSW50KGkuc3BsaXQoIj0iKVsxXSwxMCk7aXNOYU4ocil8fChlLm1heEFnZT1yKjFlMyl9cmV0dXJuIGV9ZnVuY3Rpb24gdyR0KHQpe2lmKHQpdHJ5e3JldHVybiBuZXcgRGF0ZSh0KS5nZXRUaW1lKCl9Y2F0Y2h7cmV0dXJufX1mdW5jdGlvbiBMcih0KXtsZXQgZT10LmdldCgiY2FjaGUtY29udHJvbCIpLGE9dC5nZXQoImV4cGlyZXMiKSxpPXQuZ2V0KCJldGFnIikscj10LmdldCgibGFzdC1tb2RpZmllZCIpLHM9eCR0KGUpO2lmKHMubWF4QWdlPT09MCYmYSl7bGV0IG49dyR0KGEpO24mJihzLm1heEFnZT1NYXRoLm1heCgwLG4tRGF0ZS5ub3coKSkpfXJldHVybnttYXhBZ2U6cy5tYXhBZ2V8fDAsZXRhZzppfHx2b2lkIDAsbGFzdE1vZGlmaWVkOnJ8fHZvaWQgMCxpbW11dGFibGU6cy5pbW11dGFibGV8fCExLG5vQ2FjaGU6cy5ub0NhY2hlfHwhMSxub1N0b3JlOnMubm9TdG9yZXx8ITEsbXVzdFJldmFsaWRhdGU6cy5tdXN0UmV2YWxpZGF0ZXx8ITF9fWZ1bmN0aW9uIHg2KHQsZSl7aWYoZS5ub1N0b3JlKXJldHVybiExO2lmKGUuaW1tdXRhYmxlKXJldHVybiEwO2xldCBhPURhdGUubm93KCktdC50aW1lc3RhbXAsaT10Lm1heEFnZXx8ZS5tYXhBZ2V8fDA7cmV0dXJuIGk9PT0wPyExOmE8aX1mdW5jdGlvbiB3Nih0KXtyZXR1cm4gdC5ub0NhY2hlfHx0Lm11c3RSZXZhbGlkYXRlfWZ1bmN0aW9uIFhoKHQpe2xldCBlPXt9O3JldHVybiB0LmV0YWcmJihlWyJpZi1ub25lLW1hdGNoIl09dC5ldGFnKSx0Lmxhc3RNb2RpZmllZCYmKGVbImlmLW1vZGlmaWVkLXNpbmNlIl09dC5sYXN0TW9kaWZpZWQpLGV9ZnVuY3Rpb24gS2godCl7bGV0IGU9e307cmV0dXJuIHQuZm9yRWFjaCgoYSxpKT0+e2VbaV09YX0pLGV9ZnVuY3Rpb24gUjFlKHQpe2xldCBlPW5ldyBIZWFkZXJzO3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbYSxpXSk9PntlLnNldChhLGkpfSksZX12YXIgUWg9YigoKT0+e30pO2Z1bmN0aW9uIEIxZSh0KXtzd2l0Y2godCl7Y2FzZSJuZXR3b3JrLWZpcnN0IjpyZXR1cm4gbmV3IEpoO2Nhc2UiY2FjaGUtZmlyc3QiOnJldHVybiBuZXcgbF87Y2FzZSJzdGFsZS13aGlsZS1yZXZhbGlkYXRlIjpyZXR1cm4gbmV3IGNfO2Nhc2UibmV0d29yay1vbmx5IjpyZXR1cm4gbmV3IGRfO2Nhc2UiY2FjaGUtb25seSI6cmV0dXJuIG5ldyBwXztkZWZhdWx0OnJldHVybiBuZXcgSmh9fXZhciBKaCxsXyxjXyxkXyxwXyxIMWU9YigoKT0+e1poKCk7UWgoKTtKaD1jbGFzc3thc3luYyBleGVjdXRlKGUpe3RyeXtsZXQgYT1hd2FpdCBlLmZldGNoRm4oZS5yZXF1ZXN0KTtyZXR1cm4gYS5vayYmYXdhaXQgdGhpcy5jYWNoZVJlc3BvbnNlKGUsYSkse3Jlc3BvbnNlOmEsZnJvbUNhY2hlOiExLHJldmFsaWRhdGVkOiExfX1jYXRjaChhKXtlLmxvZ2dpbmcmJmNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gTmV0d29yayBmYWlsZWQsIHRyeWluZyBjYWNoZToiLGEpO2xldCBpPWF3YWl0IGUuY2FjaGVTdG9yZS5nZXQoZS5jYWNoZUtleSk7aWYoaSlyZXR1cm57cmVzcG9uc2U6ZS5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkoaSksZnJvbUNhY2hlOiEwLHJldmFsaWRhdGVkOiExfTt0aHJvdyBhfX1hc3luYyBjYWNoZVJlc3BvbnNlKGUsYSl7bGV0IGk9THIoYS5oZWFkZXJzKTtpZihpLm5vU3RvcmUpcmV0dXJuO2xldCByPWF3YWl0IGUuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGUucmVxdWVzdC51cmwsYSxpKTthd2FpdCBlLmNhY2hlU3RvcmUuc2V0KGUuY2FjaGVLZXkscil9fSxsXz1jbGFzc3thc3luYyBleGVjdXRlKGUpe2xldCBhPWF3YWl0IGUuY2FjaGVTdG9yZS5nZXQoZS5jYWNoZUtleSk7aWYoYSl7bGV0IHM9THIobmV3IEhlYWRlcnMoYS5oZWFkZXJzKSk7aWYoeDYoYSxzKSlyZXR1cm4gZS5sb2dnaW5nJiZjb25zb2xlLmxvZygiW3dlYnJlcXVlc3RdIENhY2hlIGhpdCAoZnJlc2gpOiIsZS5yZXF1ZXN0LnVybCkse3Jlc3BvbnNlOmUuY2FjaGVTdG9yZS5yZXNwb25zZUZyb21DYWNoZUVudHJ5KGEpLGZyb21DYWNoZTohMCxyZXZhbGlkYXRlZDohMX07aWYodzYocykmJihhLmV0YWd8fGEubGFzdE1vZGlmaWVkKSlyZXR1cm4gYXdhaXQgdGhpcy5yZXZhbGlkYXRlKGUsYSl9ZS5sb2dnaW5nJiZjb25zb2xlLmxvZygiW3dlYnJlcXVlc3RdIENhY2hlIG1pc3MsIGZldGNoaW5nOiIsZS5yZXF1ZXN0LnVybCk7bGV0IGk9YXdhaXQgZS5mZXRjaEZuKGUucmVxdWVzdCkscj1McihpLmhlYWRlcnMpO2lmKCFyLm5vU3RvcmUpe2xldCBzPWF3YWl0IGUuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGUucmVxdWVzdC51cmwsaSxyKTthd2FpdCBlLmNhY2hlU3RvcmUuc2V0KGUuY2FjaGVLZXkscyl9cmV0dXJue3Jlc3BvbnNlOmksZnJvbUNhY2hlOiExLHJldmFsaWRhdGVkOiExfX1hc3luYyByZXZhbGlkYXRlKGUsYSl7bGV0IGk9WGgoYSkscj1uZXcgUmVxdWVzdChlLnJlcXVlc3QudXJsLHttZXRob2Q6ZS5yZXF1ZXN0Lm1ldGhvZCxoZWFkZXJzOnsuLi5LaChlLnJlcXVlc3QuaGVhZGVycyksLi4uaX19KTt0cnl7bGV0IHM9YXdhaXQgZS5mZXRjaEZuKHIpO2lmKHMuc3RhdHVzPT09MzA0KXJldHVybiBlLmxvZ2dpbmcmJmNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gQ2FjaGUgcmV2YWxpZGF0ZWQgKDMwNCk6IixlLnJlcXVlc3QudXJsKSxhLnRpbWVzdGFtcD1EYXRlLm5vdygpLGF3YWl0IGUuY2FjaGVTdG9yZS5zZXQoZS5jYWNoZUtleSxhKSx7cmVzcG9uc2U6ZS5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkoYSksZnJvbUNhY2hlOiEwLHJldmFsaWRhdGVkOiEwfTtpZihzLm9rKXtsZXQgbj1McihzLmhlYWRlcnMpO2lmKCFuLm5vU3RvcmUpe2xldCBvPWF3YWl0IGUuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGUucmVxdWVzdC51cmwscyxuKTthd2FpdCBlLmNhY2hlU3RvcmUuc2V0KGUuY2FjaGVLZXksbyl9fXJldHVybntyZXNwb25zZTpzLGZyb21DYWNoZTohMSxyZXZhbGlkYXRlZDohMH19Y2F0Y2gocyl7cmV0dXJuIGUubG9nZ2luZyYmY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBSZXZhbGlkYXRpb24gZmFpbGVkLCB1c2luZyBjYWNoZToiLHMpLHtyZXNwb25zZTplLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShhKSxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITF9fX19LGNfPWNsYXNze2FzeW5jIGV4ZWN1dGUoZSl7bGV0IGE9YXdhaXQgZS5jYWNoZVN0b3JlLmdldChlLmNhY2hlS2V5KTtpZihhKXtsZXQgcz1lLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShhKTtyZXR1cm4gdGhpcy5yZXZhbGlkYXRlSW5CYWNrZ3JvdW5kKGUsYSkuY2F0Y2gobj0+e2UubG9nZ2luZyYmY29uc29sZS53YXJuKCJbd2VicmVxdWVzdF0gQmFja2dyb3VuZCByZXZhbGlkYXRpb24gZmFpbGVkOiIsbil9KSx7cmVzcG9uc2U6cyxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITF9fWxldCBpPWF3YWl0IGUuZmV0Y2hGbihlLnJlcXVlc3QpLHI9THIoaS5oZWFkZXJzKTtpZighci5ub1N0b3JlJiZpLm9rKXtsZXQgcz1hd2FpdCBlLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShlLnJlcXVlc3QudXJsLGkscik7YXdhaXQgZS5jYWNoZVN0b3JlLnNldChlLmNhY2hlS2V5LHMpfXJldHVybntyZXNwb25zZTppLGZyb21DYWNoZTohMSxyZXZhbGlkYXRlZDohMX19YXN5bmMgcmV2YWxpZGF0ZUluQmFja2dyb3VuZChlLGEpe2xldCBpPUxyKG5ldyBIZWFkZXJzKGEuaGVhZGVycykpO2lmKCEoeDYoYSxpKSYmIXc2KGkpKSl0cnl7bGV0IHI9YXdhaXQgZS5mZXRjaEZuKGUucmVxdWVzdCk7aWYoci5vayl7bGV0IHM9THIoci5oZWFkZXJzKTtpZighcy5ub1N0b3JlKXtsZXQgbj1hd2FpdCBlLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShlLnJlcXVlc3QudXJsLHIscyk7YXdhaXQgZS5jYWNoZVN0b3JlLnNldChlLmNhY2hlS2V5LG4pLGUubG9nZ2luZyYmY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBCYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiBjb21wbGV0ZToiLGUucmVxdWVzdC51cmwpfX19Y2F0Y2gocil7ZS5sb2dnaW5nJiZjb25zb2xlLndhcm4oIlt3ZWJyZXF1ZXN0XSBCYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiBmYWlsZWQ6IixyKX19fSxkXz1jbGFzc3thc3luYyBleGVjdXRlKGUpe3JldHVybntyZXNwb25zZTphd2FpdCBlLmZldGNoRm4oZS5yZXF1ZXN0KSxmcm9tQ2FjaGU6ITEscmV2YWxpZGF0ZWQ6ITF9fX0scF89Y2xhc3N7YXN5bmMgZXhlY3V0ZShlKXtsZXQgYT1hd2FpdCBlLmNhY2hlU3RvcmUuZ2V0KGUuY2FjaGVLZXkpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgQ2FjaGUgbWlzcyBmb3IgJHtlLnJlcXVlc3QudXJsfSAoY2FjaGUtb25seSBtb2RlKWApO3JldHVybntyZXNwb25zZTplLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShhKSxmcm9tQ2FjaGU6ITAscmV2YWxpZGF0ZWQ6ITF9fX19KTt2YXIgejMsaF89YigoKT0+e1poKCk7SDFlKCk7UWgoKTt6Mz1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuY2FjaGVTdG9yZT1uZXcgTTMoZSxhKX1hc3luYyBleGVjdXRlKGUsYSxpKXtsZXQgcj10aGlzLmRldGVybWluZVN0cmF0ZWd5KGUsYSk7aWYocj09PSJuZXR3b3JrLW9ubHkiKXJldHVybntyZXNwb25zZTphd2FpdCBpKGUpLGZyb21DYWNoZTohMSxyZXZhbGlkYXRlZDohMX07bGV0IHM9dGhpcy5nZW5lcmF0ZUNhY2hlS2V5KGUsYSksbj1CMWUociksbz17cmVxdWVzdDplLGNhY2hlS2V5OnMsY2FjaGVTdG9yZTp0aGlzLmNhY2hlU3RvcmUsZmV0Y2hGbjppLGxvZ2dpbmc6YS5sb2dnaW5nfTtyZXR1cm4gYXdhaXQgbi5leGVjdXRlKG8pfWRldGVybWluZVN0cmF0ZWd5KGUsYSl7cmV0dXJuIGEuY2FjaGVTdHJhdGVneT9hLmNhY2hlU3RyYXRlZ3k6YS5jYWNoZT90aGlzLm1hcENhY2hlTW9kZVRvU3RyYXRlZ3koYS5jYWNoZSk6ZS5jYWNoZT90aGlzLm1hcENhY2hlTW9kZVRvU3RyYXRlZ3koZS5jYWNoZSk6Im5ldHdvcmstZmlyc3QifW1hcENhY2hlTW9kZVRvU3RyYXRlZ3koZSl7c3dpdGNoKGUpe2Nhc2UiZGVmYXVsdCI6cmV0dXJuIm5ldHdvcmstZmlyc3QiO2Nhc2Uibm8tc3RvcmUiOmNhc2UicmVsb2FkIjpyZXR1cm4ibmV0d29yay1vbmx5IjtjYXNlIm5vLWNhY2hlIjpyZXR1cm4ibmV0d29yay1maXJzdCI7Y2FzZSJmb3JjZS1jYWNoZSI6cmV0dXJuImNhY2hlLWZpcnN0IjtjYXNlIm9ubHktaWYtY2FjaGVkIjpyZXR1cm4iY2FjaGUtb25seSI7ZGVmYXVsdDpyZXR1cm4ibmV0d29yay1maXJzdCJ9fWdlbmVyYXRlQ2FjaGVLZXkoZSxhKXtyZXR1cm4gYS5jYWNoZUtleT90eXBlb2YgYS5jYWNoZUtleT09ImZ1bmN0aW9uIj9hLmNhY2hlS2V5KGUpOmEuY2FjaGVLZXk6dGhpcy5jYWNoZVN0b3JlLmdlbmVyYXRlQ2FjaGVLZXkoZSl9YXN5bmMgY2xlYXIoKXthd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2xlYXIoKX1hc3luYyBkZWxldGUoZSl7YXdhaXQgdGhpcy5jYWNoZVN0b3JlLmRlbGV0ZShlKX1hc3luYyBoYXMoZSl7cmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5oYXMoZSl9Z2V0U3RvcmUoKXtyZXR1cm4gdGhpcy5jYWNoZVN0b3JlfX19KTtmdW5jdGlvbiBxMWUodCl7c3dpdGNoKHQpe2Nhc2UiZXhwb25lbnRpYWwiOnJldHVybiBuZXcgZTk7Y2FzZSJsaW5lYXIiOnJldHVybiBuZXcgdV87Y2FzZSJjb25zdGFudCI6cmV0dXJuIG5ldyBmXztkZWZhdWx0OnJldHVybiBuZXcgZTl9fWZ1bmN0aW9uIFYxZSh0LGU9LjEpe2xldCBhPXQqZSpNYXRoLnJhbmRvbSgpO3JldHVybiB0K2F9dmFyIGU5LHVfLGZfLGoxZT1iKCgpPT57ZTk9Y2xhc3N7Y2FsY3VsYXRlKGUsYSxpKXtsZXQgcj1hKk1hdGgucG93KDIsZS0xKTtyZXR1cm4gTWF0aC5taW4ocixpKX19LHVfPWNsYXNze2NhbGN1bGF0ZShlLGEsaSl7bGV0IHI9YSplO3JldHVybiBNYXRoLm1pbihyLGkpfX0sZl89Y2xhc3N7Y2FsY3VsYXRlKGUsYSxpKXtyZXR1cm4gTWF0aC5taW4oYSxpKX19fSk7dmFyIGszLG1fPWIoKCk9Pnt5NigpO2oxZSgpO2szPWNsYXNze2NvbnN0cnVjdG9yKGU9e30pe3RoaXMub3B0aW9ucz17bWF4QXR0ZW1wdHM6ZS5tYXhBdHRlbXB0cz8/MyxiYWNrb2ZmOmUuYmFja29mZj8/ImV4cG9uZW50aWFsIixpbml0aWFsRGVsYXk6ZS5pbml0aWFsRGVsYXk/PzFlMyxtYXhEZWxheTplLm1heERlbGF5Pz8zZTQscmV0cnlPbjplLnJldHJ5T24/P1s0MDgsNDI5LDUwMCw1MDIsNTAzLDUwNF0sb25SZXRyeTplLm9uUmV0cnk/PygoKT0+e30pfX1hc3luYyBleGVjdXRlKGUsYSl7bGV0IGkscjtmb3IobGV0IHM9MTtzPD10aGlzLm9wdGlvbnMubWF4QXR0ZW1wdHM7cysrKXRyeXtsZXQgbj1hd2FpdCBlKCk7aWYobiBpbnN0YW5jZW9mIFJlc3BvbnNlJiZ0aGlzLnNob3VsZFJldHJ5UmVzcG9uc2Uobikpe2lmKHI9bixzPT09dGhpcy5vcHRpb25zLm1heEF0dGVtcHRzKXJldHVybiBuO2xldCBvPXRoaXMuY2FsY3VsYXRlRGVsYXkocyk7dGhpcy5vcHRpb25zLm9uUmV0cnkocyxuZXcgRXJyb3IoYEhUVFAgJHtuLnN0YXR1c31gKSxvKSxhd2FpdCB0aGlzLmRlbGF5KG8pO2NvbnRpbnVlfXJldHVybiBufWNhdGNoKG4pe2k9biBpbnN0YW5jZW9mIEVycm9yP246bmV3IEVycm9yKFN0cmluZyhuKSk7bGV0IG89YT9hKG4scyk6dGhpcy5zaG91bGRSZXRyeUVycm9yKG4pO2lmKHM9PT10aGlzLm9wdGlvbnMubWF4QXR0ZW1wdHN8fCFvKXRocm93IGk7bGV0IGQ9dGhpcy5jYWxjdWxhdGVEZWxheShzKTt0aGlzLm9wdGlvbnMub25SZXRyeShzLGksZCksYXdhaXQgdGhpcy5kZWxheShkKX10aHJvdyBpfHxuZXcgRXJyb3IoIk1heCByZXRyeSBhdHRlbXB0cyByZWFjaGVkIil9YXN5bmMgZXhlY3V0ZVdpdGhGYWxsYmFja3MoZSxhLGkpe2lmKGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIk5vIFVSTHMgcHJvdmlkZWQgZm9yIGZhbGxiYWNrIGV4ZWN1dGlvbiIpO2xldCByLHM9W107Zm9yKGxldCBuIG9mIGUpdHJ5e2xldCBvPWF3YWl0IHRoaXMuZXhlY3V0ZShhc3luYygpPT5hd2FpdCBpKG4sYSkpO2lmKG8uc3RhdHVzPDQwMHx8by5zdGF0dXM+PTQwMCYmby5zdGF0dXM8NTAwJiZvLnN0YXR1cyE9PTQwOClyZXR1cm4gbztzLnB1c2gobikscj1uZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7by5zdGF0dXN9YCl9Y2F0Y2gobyl7cy5wdXNoKG4pLHI9byBpbnN0YW5jZW9mIEVycm9yP286bmV3IEVycm9yKFN0cmluZyhvKSl9dGhyb3cgbmV3IEVycm9yKGBBbGwgVVJMcyBmYWlsZWQ6ICR7cy5qb2luKCIsICIpfS4gTGFzdCBlcnJvcjogJHtyPy5tZXNzYWdlfHwiVW5rbm93biBlcnJvciJ9YCl9c2hvdWxkUmV0cnlSZXNwb25zZShlKXtsZXQgYT10aGlzLm9wdGlvbnMucmV0cnlPbjtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiI/YShlKTpBcnJheS5pc0FycmF5KGEpP2EuaW5jbHVkZXMoZS5zdGF0dXMpOiExfXNob3VsZFJldHJ5RXJyb3IoZSl7aWYoZSBpbnN0YW5jZW9mIFR5cGVFcnJvciYmZS5tZXNzYWdlLmluY2x1ZGVzKCJmZXRjaCIpfHxlLm5hbWU9PT0iQWJvcnRFcnJvciJ8fGUubWVzc2FnZS5pbmNsdWRlcygidGltZW91dCIpKXJldHVybiEwO2xldCBhPXRoaXMub3B0aW9ucy5yZXRyeU9uO3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIj9hKHZvaWQgMCxlKTohMX1jYWxjdWxhdGVEZWxheShlKXtsZXQgaT1xMWUodGhpcy5vcHRpb25zLmJhY2tvZmYpLmNhbGN1bGF0ZShlLHRoaXMub3B0aW9ucy5pbml0aWFsRGVsYXksdGhpcy5vcHRpb25zLm1heERlbGF5KTtyZXR1cm4gVjFlKGkpfWFzeW5jIGRlbGF5KGUpe2F3YWl0IHB0LmRlbGF5Rm9yKGUpfX19KTt2YXIgUzMsZ189YigoKT0+e3k2KCk7UzM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmluRmxpZ2h0UmVxdWVzdHM9bmV3IE1hcH1nZW5lcmF0ZUtleShlKXtsZXQgYT1lLnVybCxpPWUubWV0aG9kO3JldHVybiBpPT09IkdFVCJ8fGk9PT0iSEVBRCI/YCR7aX06JHthfWA6YCR7aX06JHthfToke0RhdGUubm93KCl9YH1hc3luYyBleGVjdXRlKGUsYSl7bGV0IGk9dGhpcy5pbkZsaWdodFJlcXVlc3RzLmdldChlKTtpZihpKXJldHVybntyZXNwb25zZTooYXdhaXQgaS5wcm9taXNlKS5jbG9uZSgpLHdhc0RlZHVwbGljYXRlZDohMH07bGV0IHI9SGUuZGVmZXIoKTt0aGlzLmluRmxpZ2h0UmVxdWVzdHMuc2V0KGUscik7dHJ5e2xldCBzPWF3YWl0IGEoKTtyZXR1cm4gci5yZXNvbHZlKHMpLHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5kZWxldGUoZSkse3Jlc3BvbnNlOnMsd2FzRGVkdXBsaWNhdGVkOiExfX1jYXRjaChzKXt0aHJvdyByLnJlamVjdChzKSx0aGlzLmluRmxpZ2h0UmVxdWVzdHMuZGVsZXRlKGUpLHN9fWlzSW5GbGlnaHQoZSl7cmV0dXJuIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5oYXMoZSl9Z2V0SW5GbGlnaHRDb3VudCgpe3JldHVybiB0aGlzLmluRmxpZ2h0UmVxdWVzdHMuc2l6ZX1jbGVhcigpe3RoaXMuaW5GbGlnaHRSZXF1ZXN0cy5jbGVhcigpfX19KTtmdW5jdGlvbiBNJHQodCl7bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixhPW5ldyBwdC5UaW1lb3V0KHQsbnVsbCk7cmV0dXJuIGEucHJvbWlzZS50aGVuKCgpPT57ZS5hYm9ydCgpfSkse2NvbnRyb2xsZXI6ZSxjbGVhbnVwOigpPT57YS5jYW5jZWwoKX19fWFzeW5jIGZ1bmN0aW9uIGJfKHQsZSxhKXtsZXR7Y29udHJvbGxlcjppLGNsZWFudXA6cn09TSR0KGEpO3RyeXtsZXQgcz1hd2FpdCBmZXRjaCh0LHsuLi5lLHNpZ25hbDppLnNpZ25hbH0pO3JldHVybiByKCksc31jYXRjaChzKXt0aHJvdyByKCkscyBpbnN0YW5jZW9mIEVycm9yJiZzLm5hbWU9PT0iQWJvcnRFcnJvciI/bmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXQgYWZ0ZXIgJHthfW1zOiAke3R9YCk6c319dmFyIFUxZT1iKCgpPT57eTYoKX0pO3ZhciBuMCx2Xz1iKCgpPT57a0MoKTtoXygpO21fKCk7Z18oKTtVMWUoKTtuMD1jbGFzc3tjb25zdHJ1Y3RvcihlPXt9KXt0aGlzLmRlZmF1bHRPcHRpb25zPWUsdGhpcy5pbnRlcmNlcHRvck1hbmFnZXI9bmV3IGgzLHRoaXMuY2FjaGVNYW5hZ2VyPW5ldyB6Myx0aGlzLmRlZHVwbGljYXRvcj1uZXcgUzN9YWRkUmVxdWVzdEludGVyY2VwdG9yKGUpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZFJlcXVlc3RJbnRlcmNlcHRvcihlKX1hZGRSZXNwb25zZUludGVyY2VwdG9yKGUpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZFJlc3BvbnNlSW50ZXJjZXB0b3IoZSl9YWRkRXJyb3JJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5hZGRFcnJvckludGVyY2VwdG9yKGUpfXJlbW92ZVJlcXVlc3RJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5yZW1vdmVSZXF1ZXN0SW50ZXJjZXB0b3IoZSl9cmVtb3ZlUmVzcG9uc2VJbnRlcmNlcHRvcihlKXt0aGlzLmludGVyY2VwdG9yTWFuYWdlci5yZW1vdmVSZXNwb25zZUludGVyY2VwdG9yKGUpfXJlbW92ZUVycm9ySW50ZXJjZXB0b3IoZSl7dGhpcy5pbnRlcmNlcHRvck1hbmFnZXIucmVtb3ZlRXJyb3JJbnRlcmNlcHRvcihlKX1jbGVhckludGVyY2VwdG9ycygpe3RoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLmNsZWFyQWxsKCl9YXN5bmMgY2xlYXJDYWNoZSgpe2F3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmNsZWFyKCl9YXN5bmMgcmVxdWVzdChlLGE9e30pe2xldCBpPXsuLi50aGlzLmRlZmF1bHRPcHRpb25zLC4uLmF9LHI7aWYodHlwZW9mIGU9PSJzdHJpbmciP3I9bmV3IFJlcXVlc3QoZSxpKTpyPWUscj1hd2FpdCB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzUmVxdWVzdChyKSxpLmludGVyY2VwdG9ycz8ucmVxdWVzdClmb3IobGV0IG4gb2YgaS5pbnRlcmNlcHRvcnMucmVxdWVzdClyPWF3YWl0IG4ocik7aWYoaS5kZWR1cGxpY2F0ZT8/ITEpe2xldCBuPXRoaXMuZGVkdXBsaWNhdG9yLmdlbmVyYXRlS2V5KHIpO3JldHVybihhd2FpdCB0aGlzLmRlZHVwbGljYXRvci5leGVjdXRlKG4sYXN5bmMoKT0+YXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyLGkpKSkucmVzcG9uc2V9cmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3QocixpKX1hc3luYyBleGVjdXRlUmVxdWVzdChlLGEpe3RyeXtsZXQgaT10eXBlb2YgYS5yZXRyeT09Im9iamVjdCI/YS5yZXRyeTphLnJldHJ5P3t9OnZvaWQgMCxyPWFzeW5jIG89PntsZXQgZD1hLnRpbWVvdXQ/PzZlNDtyZXR1cm4gYXdhaXQgYl8oby51cmwse21ldGhvZDpvLm1ldGhvZCxoZWFkZXJzOm8uaGVhZGVycyxib2R5Om8uYm9keSwuLi5hfSxkKX0scz1hc3luYyhvLGQpPT57bGV0IGM9YS50aW1lb3V0Pz82ZTQ7cmV0dXJuIGF3YWl0IGJfKG8sZCxjKX0sbjtpZihpKXtsZXQgbz1uZXcgazMoaSk7aWYoYS5mYWxsYmFja1VybHMmJmEuZmFsbGJhY2tVcmxzLmxlbmd0aD4wKXtsZXQgZD1bZS51cmwsLi4uYS5mYWxsYmFja1VybHNdO249YXdhaXQgby5leGVjdXRlV2l0aEZhbGxiYWNrcyhkLHttZXRob2Q6ZS5tZXRob2QsaGVhZGVyczplLmhlYWRlcnMsYm9keTplLmJvZHksLi4uYX0scyl9ZWxzZSBuPWF3YWl0IG8uZXhlY3V0ZShhc3luYygpPT4oYXdhaXQgdGhpcy5jYWNoZU1hbmFnZXIuZXhlY3V0ZShlLGEscikpLnJlc3BvbnNlKX1lbHNlIG49KGF3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmV4ZWN1dGUoZSxhLHIpKS5yZXNwb25zZTtpZihuPWF3YWl0IHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnByb2Nlc3NSZXNwb25zZShuKSxhLmludGVyY2VwdG9ycz8ucmVzcG9uc2UpZm9yKGxldCBvIG9mIGEuaW50ZXJjZXB0b3JzLnJlc3BvbnNlKW49YXdhaXQgbyhuKTtyZXR1cm4gbn1jYXRjaChpKXt0aHJvdyBhd2FpdCB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzRXJyb3IoaSBpbnN0YW5jZW9mIEVycm9yP2k6bmV3IEVycm9yKFN0cmluZyhpKSkpfX1hc3luYyBnZXRKc29uKGUsYT17fSl7bGV0IGk9YXdhaXQgdGhpcy5yZXF1ZXN0KGUsey4uLmEsbWV0aG9kOiJHRVQiLGhlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsLi4uYS5oZWFkZXJzfHx7fX19KTtpZighaS5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtpLnN0YXR1c306ICR7aS5zdGF0dXNUZXh0fWApO3JldHVybiBhd2FpdCBpLmpzb24oKX1hc3luYyBwb3N0SnNvbihlLGEsaT17fSl7bGV0IHI9YXdhaXQgdGhpcy5yZXF1ZXN0KGUsey4uLmksbWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwuLi5pLmhlYWRlcnN8fHt9fSxib2R5OkpTT04uc3RyaW5naWZ5KGEpfSk7aWYoIXIub2spdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7ci5zdGF0dXN9OiAke3Iuc3RhdHVzVGV4dH1gKTtyZXR1cm4gYXdhaXQgci5qc29uKCl9YXN5bmMgcHV0SnNvbihlLGEsaT17fSl7bGV0IHI9YXdhaXQgdGhpcy5yZXF1ZXN0KGUsey4uLmksbWV0aG9kOiJQVVQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIixBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLC4uLmkuaGVhZGVyc3x8e319LGJvZHk6SlNPTi5zdHJpbmdpZnkoYSl9KTtpZighci5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyLnN0YXR1c306ICR7ci5zdGF0dXNUZXh0fWApO3JldHVybiBhd2FpdCByLmpzb24oKX1hc3luYyBkZWxldGVKc29uKGUsYT17fSl7bGV0IGk9YXdhaXQgdGhpcy5yZXF1ZXN0KGUsey4uLmEsbWV0aG9kOiJERUxFVEUiLGhlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsLi4uYS5oZWFkZXJzfHx7fX19KTtpZighaS5vayl0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtpLnN0YXR1c306ICR7aS5zdGF0dXNUZXh0fWApO3JldHVybiBhd2FpdCBpLmpzb24oKX19fSk7YXN5bmMgZnVuY3Rpb24gUmEodCxlKXtsZXQgYT10IGluc3RhbmNlb2YgUmVxdWVzdD90LnVybDpTdHJpbmcodCksaT10IGluc3RhbmNlb2YgUmVxdWVzdD90Om5ldyBSZXF1ZXN0KGEsZSk7cmV0dXJuIGF3YWl0IE9pLnJlcXVlc3QoaSxlKX12YXIgT2ksVzFlPWIoKCk9Pnt2XygpO09pPW5ldyBuMDtSYS5nZXRKc29uPWFzeW5jIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGF3YWl0IE9pLmdldEpzb24odCxlKX0sUmEucG9zdEpzb249YXN5bmMgZnVuY3Rpb24odCxlLGEpe3JldHVybiBhd2FpdCBPaS5wb3N0SnNvbih0LGUsYSl9LFJhLnB1dEpzb249YXN5bmMgZnVuY3Rpb24odCxlLGEpe3JldHVybiBhd2FpdCBPaS5wdXRKc29uKHQsZSxhKX0sUmEuZGVsZXRlSnNvbj1hc3luYyBmdW5jdGlvbih0LGUpe3JldHVybiBhd2FpdCBPaS5kZWxldGVKc29uKHQsZSl9LFJhLmFkZFJlcXVlc3RJbnRlcmNlcHRvcj1mdW5jdGlvbih0KXtPaS5hZGRSZXF1ZXN0SW50ZXJjZXB0b3IodCl9LFJhLmFkZFJlc3BvbnNlSW50ZXJjZXB0b3I9ZnVuY3Rpb24odCl7T2kuYWRkUmVzcG9uc2VJbnRlcmNlcHRvcih0KX0sUmEuYWRkRXJyb3JJbnRlcmNlcHRvcj1mdW5jdGlvbih0KXtPaS5hZGRFcnJvckludGVyY2VwdG9yKHQpfSxSYS5jbGVhckludGVyY2VwdG9ycz1mdW5jdGlvbigpe09pLmNsZWFySW50ZXJjZXB0b3JzKCl9LFJhLmNsZWFyQ2FjaGU9YXN5bmMgZnVuY3Rpb24oKXthd2FpdCBPaS5jbGVhckNhY2hlKCl9LFJhLmNyZWF0ZUNsaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4wKHQpfSxSYS5nZXREZWZhdWx0Q2xpZW50PWZ1bmN0aW9uKCl7cmV0dXJuIE9pfX0pO3ZhciBNNj17fTtXZShNNix7Q2FjaGVNYW5hZ2VyOigpPT56MyxDYWNoZVN0b3JlOigpPT5NMyxJbnRlcmNlcHRvck1hbmFnZXI6KCk9PmgzLFJlcXVlc3REZWR1cGxpY2F0b3I6KCk9PlMzLFJldHJ5TWFuYWdlcjooKT0+azMsV2VicmVxdWVzdENsaWVudDooKT0+bjAsY3JlYXRlQ29uZGl0aW9uYWxIZWFkZXJzOigpPT5YaCxleHRyYWN0Q2FjaGVNZXRhZGF0YTooKT0+THIsaGVhZGVyc1RvT2JqZWN0OigpPT5LaCxpc0ZyZXNoOigpPT54NixvYmplY3RUb0hlYWRlcnM6KCk9PlIxZSxyZXF1aXJlc1JldmFsaWRhdGlvbjooKT0+dzYsd2VicmVxdWVzdDooKT0+UmF9KTt2YXIgRzFlPWIoKCk9PntXMWUoKTt2XygpO2hfKCk7WmgoKTttXygpO2tDKCk7Z18oKTtRaCgpfSk7dmFyIEluLE5uPWIoKCk9PntUYygpO0luPVUxKHpkKCksMSk7YTYoKTt5dGUoKTticigpO3h0ZSgpO2QyKCk7RzFlKCl9KTt2YXIgYnMsejY9YigoKT0+e05uKCk7YnM9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLmVycm9yVGV4dD1lLHRoaXMuZXJyb3JEYXRhPWF9fX0pO3ZhciBhOSxZMWU9YigoKT0+e3o2KCk7Tm4oKTthOT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9jYWxEYXRhPXt9fWFzeW5jIHBhc3NHdWFyZHMoZSxhKXtsZXQgaT1uZXcgcDYuR3VhcmRTZXQoZSk7aWYoIWF3YWl0IGkuYWxsR3VhcmRzUGFzcyhhKSl7bGV0IHM9YXdhaXQgaS5nZXRGYWlsZWRIaW50KGEpO3Rocm93IG5ldyBicyhgZ3VhcmQgZmFpbGVkOiAke3N9YCx7ZmFpbGVkSGludDpzfSl9fX19KTt2YXIgeV8seF89YigoKT0+e05uKCk7ejYoKTtZMWUoKTt5Xz1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMubWV0aG9kPWUsdGhpcy5oYW5kbGVyRnVuY3Rpb249YX1hc3luYyBhZGRSZXNwb25zZShlKXtpZihlLm1ldGhvZCE9PXRoaXMubWV0aG9kKXRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpO2xldCBhLGk9bmV3IGE5O2UubG9jYWxEYXRhJiYoaS5sb2NhbERhdGE9ZS5sb2NhbERhdGEpO2xldCByPWF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKGUucmVxdWVzdCxpKS5jYXRjaChzPT57cyBpbnN0YW5jZW9mIGJzP2E9czpjb25zb2xlLmxvZyhzKX0pO3JldHVybiBhJiYoZS5lcnJvcj17dGV4dDphLmVycm9yVGV4dCxkYXRhOmEuZXJyb3JEYXRhfSksciYmKGUucmVzcG9uc2U9ciksZT8uY29ycmVsYXRpb24/LnBoYXNlJiYoZS5jb3JyZWxhdGlvbi5waGFzZT0icmVzcG9uc2UiKSxlfX19KTt2YXIgbzAsazY9YigoKT0+e05uKCk7aTkoKTt4XygpO3dfKCk7bzA9Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMuaG9va3M9e30sdGhpcy5yb3V0ZXJNYXA9bmV3IHQyLk9iamVjdE1hcCx0aGlzLmhhbmRsZXJNYXA9bmV3IHQyLk9iamVjdE1hcCx0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcz1uZXcgdDIuT2JqZWN0TWFwLHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXA9bmV3IHQyLkludGVyZXN0TWFwKGU9PmUpfXN0YXRpYyBnZXQgZ2xvYmFsSG9va3MoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3N8fChnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz17fSksZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3N9c3RhdGljIHNldCBnbG9iYWxIb29rcyhlKXtnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz1lfXN0YXRpYyBzZXRHbG9iYWxIb29rcyhlKXtsZXQgYT10Lmdsb2JhbEhvb2tzO3QuZ2xvYmFsSG9va3M9ey4uLmEsLi4uZX19c3RhdGljIGNsZWFyR2xvYmFsSG9va3MoKXtnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcz17fX1zZXRIb29rcyhlKXt0aGlzLmhvb2tzPXsuLi50aGlzLmhvb2tzLC4uLmV9fWNhbGxIb29rKGUsYSl7dHJ5e3QuZ2xvYmFsSG9va3NbZV0/LihhKSx0aGlzLmhvb2tzW2VdPy4oYSl9Y2F0Y2goaSl7Y29uc29sZS5lcnJvcihgVHlwZWRSb3V0ZXIgaG9vayBlcnJvciAoJHtlfSk6YCxpKX19YWRkVHlwZWRIYW5kbGVyKGUpe2lmKHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUubWV0aG9kKSl0aHJvdyBuZXcgRXJyb3IoYGEgVHlwZWRIYW5kbGVyIGZvciAke2UubWV0aG9kfSBhbHJlZHkgZXhpc3RzISBDYW4ndCBhZGQgYW5vdGhlciBvbmUuYCk7dGhpcy5oYW5kbGVyTWFwLmFkZChlKX1hZGRUeXBlZFJvdXRlcihlKXt0aGlzLnJvdXRlck1hcC5maW5kU3luYyhpPT5pPT09ZSl8fCh0aGlzLnJvdXRlck1hcC5hZGQoZSksZS5hZGRUeXBlZFJvdXRlcih0aGlzKSl9Y2hlY2tGb3JUeXBlZEhhbmRsZXIoZSl7cmV0dXJuISF0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZChlKX1nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QoZSxhPVtdKXthLnB1c2godGhpcyk7bGV0IGk7cmV0dXJuIGk9dGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKHI9PnIubWV0aG9kPT09ZSksaXx8dGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKHI9PnshaSYmIWEuaW5jbHVkZXMocikmJihpPXIuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUsYSkpfSksaX1zdGF0aWN7dGhpcy5kZWZhdWx0Um91dGVPcHRpb25zPXtsb2NhbFJlcXVlc3Q6ITEsc2tpcEhvb2tzOiExfX1hc3luYyByb3V0ZUFuZEFkZFJlc3BvbnNlKGUsYT17fSl7bGV0IGk9ey4uLnQuZGVmYXVsdFJvdXRlT3B0aW9ucywuLi5hfTtpZihlPSRyLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksZS5sb2NhbERhdGE9ZS5sb2NhbERhdGF8fHt9LGUubG9jYWxEYXRhLmZpcnN0VHlwZWRyb3V0ZXI9dGhpcyxlLm1ldGhvZD09PSIjI1ZpcnR1YWxTdHJlYW0jIyIpe2xldCByPWF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KGUpO3JldHVybiByLmxvY2FsRGF0YT1udWxsLHJ9aWYoZT8uY29ycmVsYXRpb24/LnBoYXNlPT09InJlcXVlc3QifHxpLmxvY2FsUmVxdWVzdCl7bGV0IHI9RGF0ZS5ub3coKTtpLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1JlcXVlc3QiLHtjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkfHwidW5rbm93biIsbWV0aG9kOmUubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXF1ZXN0Iix0aW1lc3RhbXA6cixwYXlsb2FkOmUucmVxdWVzdH0pO2xldCBzPXRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKGUubWV0aG9kKTtyZXR1cm4gcz8oZT1hd2FpdCBzLmFkZFJlc3BvbnNlKGUpLGUubG9jYWxEYXRhPW51bGwsZT0kci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhlLHt0eXBlZHJvdXRlcjp0aGlzfSksaS5za2lwSG9va3N8fHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIse2NvcnJlbGF0aW9uSWQ6ZS5jb3JyZWxhdGlvbj8uaWR8fCJ1bmtub3duIixtZXRob2Q6ZS5tZXRob2QsZGlyZWN0aW9uOiJvdXRnb2luZyIscGhhc2U6InJlc3BvbnNlIix0aW1lc3RhbXA6RGF0ZS5ub3coKSxkdXJhdGlvbk1zOkRhdGUubm93KCktcixwYXlsb2FkOmUucmVzcG9uc2UsZXJyb3I6ZS5lcnJvcj8udGV4dH0pLGUpOihjb25zb2xlLmxvZyhgQ2Fubm90IGZpbmQgaGFuZGxlciBmb3IgbWV0aG9kbmFtZSAke2UubWV0aG9kfWApLGUuZXJyb3I9e3RleHQ6IlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLGRhdGE6e319LGUuY29ycmVsYXRpb24ucGhhc2U9InJlc3BvbnNlIixlLmxvY2FsRGF0YT1udWxsLGU9JHIuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoZSx7dHlwZWRyb3V0ZXI6dGhpc30pLGkuc2tpcEhvb2tzfHx0aGlzLmNhbGxIb29rKCJvbk91dGdvaW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOmUuY29ycmVsYXRpb24/LmlkfHwidW5rbm93biIsbWV0aG9kOmUubWV0aG9kLGRpcmVjdGlvbjoib3V0Z29pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLXIscGF5bG9hZDplLnJlc3BvbnNlLGVycm9yOmUuZXJyb3I/LnRleHR9KSxlKX1lbHNlIHJldHVybiBlPy5jb3JyZWxhdGlvbj8ucGhhc2U9PT0icmVzcG9uc2UiPyhpLnNraXBIb29rc3x8dGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIix7Y29ycmVsYXRpb25JZDplLmNvcnJlbGF0aW9uPy5pZHx8InVua25vd24iLG1ldGhvZDplLm1ldGhvZCxkaXJlY3Rpb246ImluY29taW5nIixwaGFzZToicmVzcG9uc2UiLHRpbWVzdGFtcDpEYXRlLm5vdygpLHBheWxvYWQ6ZS5yZXNwb25zZSxlcnJvcjplLmVycm9yPy50ZXh0fSksdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QoZS5jb3JyZWxhdGlvbi5pZCk/LmZ1bGxmaWxsSW50ZXJlc3QoZSksbnVsbCk6KGNvbnNvbGUubG9nKCJyZWNlaXZlZCB3ZWlyZGx5IHNoYXBlZCByZXF1ZXN0IiksY29uc29sZS5sb2coZSksbnVsbCl9YXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KGUpe2xldCBhPWF3YWl0IHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmZpbmQoYXN5bmMgcj0+ci5zdHJlYW1JZD09PWUucmVxdWVzdC5zdHJlYW1JZCk7aWYoYSljb25zb2xlLmxvZyhgc3VjY2VzczogZm91bmQgcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gd2l0aCBpZCAke2UucmVxdWVzdC5zdHJlYW1JZH1gKTtlbHNlIHJldHVybiBjb25zb2xlLmxvZyhgbm8gcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gZm91bmQgZm9yIHN0cmVhbSB3aXRoIGlkICR7ZS5yZXF1ZXN0LnN0cmVhbUlkfWApLGNvbnNvbGUubG9nKHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmdldEFycmF5KCkpLGU7cmV0dXJuIGF3YWl0IGEuaGFuZGxlU3RyZWFtVHIoZSl9fX0pO3ZhciBaMWUsJHIsaTk9YigoKT0+e05uKCk7azYoKTtaMWU9IiMjIyMjIyMjIyMjIyNDTE9TSU5HIEJJVCMjIyMjIyMjIyMjIyMiLCRyPWNsYXNzIHR7c3RhdGljIGVuY29kZVBheWxvYWRGb3JOZXR3b3JrKGUsYSxpLHI9W10pe3JldHVybiFlfHxwMy5pc0J1ZmZlckxpa2UoZSk/ZTplIGluc3RhbmNlb2YgdD8oIWUuc2lkZSYmYS5zZW5kTWV0aG9kJiYoZS5zaWRlPSJyZXF1ZXN0aW5nIixlLnNlbmRNZXRob2Q9YS5zZW5kTWV0aG9kKSwhZS5zaWRlJiZhLnR5cGVkcm91dGVyJiYoZS5zaWRlPSJyZXNwb25kaW5nIixlLnR5cGVkcm91dGVyPWEudHlwZWRyb3V0ZXIsYS50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuYWRkKGUpKSwhaS5yZXNwb25zZXx8ci5pbmNsdWRlcygicmVzcG9uc2UiKT8oZS5zdGFydEtlZXBBbGl2ZUxvb3AoKSx7X2lzVmlydHVhbFN0cmVhbTohMCxzdHJlYW1JZDplLnN0cmVhbUlkfSk6e19PQk1JVFRFRF9WSVJUVUFMX1NUUkVBTTohMCxyZWFzb246InBhdGggaXMgdW5kZXIgLnJlcXVlc3Q6IG9ibWl0dGVkIGZvciBkZWR1cGxpY2F0aW9uIHJlYXNvbnMgaW4gcmVzcG9uc2UgY3ljbGUuIn0pOkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKHMsbik9PnQuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsocyxhLGl8fGUsci5jb25jYXQoU3RyaW5nKG4pKSkpOmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmVudHJpZXMoZSkucmVkdWNlKChzLFtuLG9dKT0+e2xldCBkPXIuY29uY2F0KG4pO3JldHVybiBzW25dPXQuZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsobyxhLGl8fGUsZCksc30se30pOmV9c3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhlLGEpe2lmKHAzLmlzQnVmZmVyTGlrZShlKXx8ZSBpbnN0YW5jZW9mIG8wKXJldHVybiBlO2lmKGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKGUgaW5zdGFuY2VvZiBTZXR8fGUgaW5zdGFuY2VvZiBNYXB8fGUgaW5zdGFuY2VvZiBEYXRlfHxlIGluc3RhbmNlb2YgUmVnRXhwfHxlIGluc3RhbmNlb2YgRXJyb3J8fGUgaW5zdGFuY2VvZiBQcm9taXNlfHx0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iKXJldHVybiBlO2lmKGUuX2lzVmlydHVhbFN0cmVhbSl7bGV0IGk9bmV3IHQ7cmV0dXJuIGkuc3RyZWFtSWQ9ZS5zdHJlYW1JZCwhaS5zaWRlJiZhLnNlbmRNZXRob2QmJihpLnNpZGU9InJlcXVlc3RpbmciLGkuc2VuZE1ldGhvZD1hLnNlbmRNZXRob2QpLCFpLnNpZGUmJmEudHlwZWRyb3V0ZXImJihpLnNpZGU9InJlc3BvbmRpbmciLGkudHlwZWRyb3V0ZXI9YS50eXBlZHJvdXRlcixhLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQoaSkpLGkuc3RhcnRLZWVwQWxpdmVMb29wKCksaX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWkucHVzaCh0LmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhyLGEpKTtyZXR1cm4gaX1lbHNlIHJldHVybiBPYmplY3Qua2V5cyhlKS5yZWR1Y2UoKGkscik9PihpW3JdPXQuZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKGVbcl0sYSksaSkse30pfWVsc2UgcmV0dXJuIGV9Y29uc3RydWN0b3IoKXt0aGlzLnN0cmVhbUlkPUluLnVuaSgpLHRoaXMua2VlcEFsaXZlPSEwLHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheT1uZXcgdDIuQmFja3ByZXNzdXJlZEFycmF5KDE2KSx0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXk9bmV3IHQyLkJhY2twcmVzc3VyZWRBcnJheSgxNil9YXN5bmMgd29ya09uUXVldWUoKXtpZih0aGlzLndvcmtpbmdEZWZlcnJlZClyZXR1cm4gdGhpcy53b3JraW5nRGVmZXJyZWQucHJvbWlzZTtpZih0aGlzLndvcmtpbmdEZWZlcnJlZD1IZS5kZWZlcigpLHRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIil7bGV0IGU9IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCksYT0hMSxpPSExLHI9YXN5bmMoKT0+e2xldCBzPWF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7bWV0aG9kOiIjI1ZpcnR1YWxTdHJlYW0jIyIscmVxdWVzdDp7c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOkluLnVuaSgpLGN5Y2xlOiJyZXF1ZXN0IixtYWluUHVycG9zZToiZmVlZGJhY2siLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjAsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpfSxyZXNwb25zZTpudWxsfSkuY2F0Y2goKCk9Pntjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKSx0aGlzLmtlZXBBbGl2ZT0hMX0pO3MmJnMucmVzcG9uc2UmJihpPXMucmVzcG9uc2UuYmFja3ByZXNzdXJlLGE9cy5yZXNwb25zZS5uZXh0KX07Zm9yKGF3YWl0IHIoKTt0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MHx8YTspe2lmKGkpZm9yKDtpOyljb25zb2xlLmxvZygid2FpdGluZyBmb3IgZmVlZGJhY2sgYmVjYXVzZSBvZiBiYWNrcHJlc3N1cmUuLi4iKSxhd2FpdCBwdC5kZWxheUZvcig1MCksYXdhaXQgcigpO2xldCBzO3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wJiYocz10aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKSk7bGV0IG47bj1hd2FpdCB0aGlzLnNlbmRNZXRob2Qoe21ldGhvZDoiIyNWaXJ0dWFsU3RyZWFtIyMiLHJlcXVlc3Q6e3N0cmVhbUlkOnRoaXMuc3RyZWFtSWQsY3ljbGVJZDpJbi51bmkoKSxjeWNsZToicmVxdWVzdCIsbWFpblB1cnBvc2U6cz8iY2h1bmsiOiJyZWFkIixiYWNrcHJlc3N1cmU6ZSxuZXh0OnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wLC4uLnM/e2NodW5rRGF0YTpzfTp7fX0scmVzcG9uc2U6bnVsbH0pLmNhdGNoKCgpPT4oY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5IiksdGhpcy5rZWVwQWxpdmU9ITEsbnVsbCkpLG4mJm4ucmVzcG9uc2UmJm4ucmVzcG9uc2UuY2h1bmtEYXRhJiZ0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChuLnJlc3BvbnNlLmNodW5rRGF0YSksaT1uJiZuLnJlc3BvbnNlJiZuLnJlc3BvbnNlLmJhY2twcmVzc3VyZSxlPSF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLGE9biYmbi5yZXNwb25zZSYmbi5yZXNwb25zZS5uZXh0fX10aGlzLndvcmtpbmdEZWZlcnJlZC5yZXNvbHZlKCksdGhpcy53b3JraW5nRGVmZXJyZWQ9bnVsbH1hc3luYyBoYW5kbGVTdHJlYW1UcihlKXtpZihlLnJlcXVlc3Qua2VlcEFsaXZlPT09ITAmJnRoaXMua2VlcEFsaXZlPT09ITA/dGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQ9RGF0ZS5ub3coKTplLnJlcXVlc3Qua2VlcEFsaXZlPT09ITEmJih0aGlzLmtlZXBBbGl2ZT0hMSksZS5yZXF1ZXN0Lm1haW5QdXJwb3NlPT09ImtlZXBBbGl2ZSImJihlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToia2VlcEFsaXZlIixrZWVwQWxpdmU6dGhpcy5rZWVwQWxpdmUsbmV4dDp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGg+MCxiYWNrcHJlc3N1cmU6IXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCl9KSxlLnJlcXVlc3QubWFpblB1cnBvc2U9PT0iZmVlZGJhY2siJiYoZS5yZXNwb25zZT17c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOmUucmVxdWVzdC5jeWNsZUlkLGN5Y2xlOiJyZXNwb25zZSIsbWFpblB1cnBvc2U6ImZlZWRiYWNrIixuZXh0OnRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wLGJhY2twcmVzc3VyZTohdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKX0pLGUucmVxdWVzdC5tYWluUHVycG9zZT09PSJjaHVuayIpe2lmKHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKGUucmVxdWVzdC5jaHVua0RhdGEpLHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aD4wJiZlLnJlc3BvbnNlLmJhY2twcmVzc3VyZT09PSExKXtsZXQgYT10aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTtlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToiY2h1bmsiLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjEsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpLGNodW5rRGF0YTp0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKX19ZWxzZSBlLnJlc3BvbnNlPXtzdHJlYW1JZDp0aGlzLnN0cmVhbUlkLGN5Y2xlSWQ6ZS5yZXF1ZXN0LmN5Y2xlSWQsY3ljbGU6InJlc3BvbnNlIixtYWluUHVycG9zZToiZmVlZGJhY2siLG5leHQ6dGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoPjAsYmFja3ByZXNzdXJlOiF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpfTtlLnJlcXVlc3Q9bnVsbH1yZXR1cm4gZX1hc3luYyBjbGVhbnVwKCl7dGhpcy50eXBlZHJvdXRlciYmdGhpcy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKHRoaXMpfWFzeW5jIHN0YXJ0S2VlcEFsaXZlTG9vcCgpe2lmKHRoaXMuc2lkZT09PSJyZXNwb25kaW5nIilyZXR1cm47YXdhaXQgcHQuZGVsYXlGb3IoMCksY29uc29sZS5sb2coYHN0YXJ0aW5nIGtlZXBhbGl2ZSBsb29wIG9uIHNpZGUgJHt0aGlzLnNpZGV9YCk7bGV0IGU9MDtmb3IoO3RoaXMua2VlcEFsaXZlOylhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKSxhd2FpdCBwdC5kZWxheUZvcigxZTMpO2F3YWl0IHB0LmRlbGF5Rm9yKDFlMyksYXdhaXQgdGhpcy5jbGVhbnVwKCksY29uc29sZS5sb2coYGNsZWFuZWQgdXAgZm9yIHN0cmVhbSAke3RoaXMuc3RyZWFtSWR9YCl9YXN5bmMgdHJpZ2dlcktlZXBBbGl2ZSgpe2lmKHRoaXMuc2lkZT09PSJyZXF1ZXN0aW5nIil7Y29uc29sZS5sb2coImtlZXBhbGl2ZSBzZW50LiIpO2xldCBlPWF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7bWV0aG9kOiIjI1ZpcnR1YWxTdHJlYW0jIyIscmVxdWVzdDp7c3RyZWFtSWQ6dGhpcy5zdHJlYW1JZCxjeWNsZUlkOkluLnVuaSgpLGN5Y2xlOiJyZXF1ZXN0IixtYWluUHVycG9zZToia2VlcEFsaXZlIixrZWVwQWxpdmU6dGhpcy5rZWVwQWxpdmV9LHJlc3BvbnNlOm51bGx9KS5jYXRjaCgoKT0+e3RoaXMua2VlcEFsaXZlPSExfSk7ZSYmZS5yZXNwb25zZSYmZS5yZXNwb25zZS5rZWVwQWxpdmU9PT0hMT90aGlzLmtlZXBBbGl2ZT0hMTp0aGlzLmxhc3RLZWVwQWxpdmVFdmVudD1EYXRlLm5vdygpLGUmJmUucmVzcG9uc2UmJmUucmVzcG9uc2UubmV4dCYmdGhpcy53b3JrT25RdWV1ZSgpfURhdGUubm93KCktdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQ+MWU0JiYoY29uc29sZS5sb2coYGNsb3Npbmcgc3RyZWFtIGZvciAke3RoaXMuc3RyZWFtSWR9YCksdGhpcy5rZWVwQWxpdmU9ITEpfWFzeW5jIHNlbmREYXRhKGUpe3RoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5wdXNoKGUpLHRoaXMud29ya09uUXVldWUoKSxhd2FpdCB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvclNwYWNlKCl9YXN5bmMgZmV0Y2hEYXRhKCl7cmV0dXJuIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5oYXNTcGFjZSxhd2FpdCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvckl0ZW1zKCksdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCl9YXN5bmMgcmVhZEZyb21XZWJzdHJlYW0oZSxhPSEwKXtsZXQgaT1lLmdldFJlYWRlcigpLHI9ITE7Zm9yKDshcjspe2xldHt2YWx1ZTpzLGRvbmU6bn09YXdhaXQgaS5yZWFkKCk7cyYmYXdhaXQgdGhpcy5zZW5kRGF0YShzKSxyPW59YSYmYXdhaXQgdGhpcy5jbG9zZSghMCl9YXN5bmMgd3JpdGVUb1dlYnN0cmVhbShlKXtsZXQgYT1lLmdldFdyaXRlcigpO2Zvcig7dGhpcy5rZWVwQWxpdmV8fHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCk7KXtsZXQgaT1hd2FpdCB0aGlzLmZldGNoRGF0YSgpO2lmKGk9PT1aMWUpe2EucmVsZWFzZUxvY2soKSxhd2FpdCBlLmNsb3NlKCk7YnJlYWt9YXdhaXQgYS53cml0ZShpKX19YXN5bmMgY2xvc2UoZT0hMSl7ZSYmdGhpcy5zZW5kRGF0YShaMWUpLHRoaXMua2VlcEFsaXZlPSExfX19KTt2YXIgTV8sel89YigoKT0+e2s2KCk7Tm4oKTtNXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXtpZihlLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXImJiFlLnR5cGVkUm91dGVyUmVmKXRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7dGhpcy5vcHRpb25zPWV9YXN5bmMgcG9zdChlKXtsZXQgYTt0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYmJihhPWF3YWl0IHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZi5maXJlRXZlbnRJbnRlcmVzdE1hcC5hZGRJbnRlcmVzdChlLmNvcnJlbGF0aW9uLmlkLGUpKTtsZXQgcj1hd2FpdCh0aGlzLm9wdGlvbnMucG9zdE1ldGhvZHx8dGhpcy5vcHRpb25zLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXIpKGUpLHM7cmV0dXJuIGE/cz1hd2FpdCBhLmludGVyZXN0RnVsbGZpbGxlZDpyP3M9cjpzPWUsc319fSk7ZnVuY3Rpb24gWDFlKHQsZSl7dHJ5e28wLmdsb2JhbEhvb2tzW3RdPy4oZSl9Y2F0Y2goYSl7Y29uc29sZS5lcnJvcihgVHlwZWRSZXF1ZXN0IGhvb2sgZXJyb3IgKCR7dH0pOmAsYSl9fXZhciB6JHQsUzYsd189YigoKT0+e05uKCk7aTkoKTt6NigpO2s2KCk7el8oKTt6JHQ9bmV3IE02LldlYnJlcXVlc3RDbGllbnQ7UzY9Y2xhc3N7Y29uc3RydWN0b3IoZSxhKXt0aGlzLnNraXBIb29rcz0hMSx0eXBlb2YgZT09InN0cmluZyI/dGhpcy51cmxFbmRQb2ludD1lOnRoaXMudHlwZWRUYXJnZXQ9ZSx0aGlzLm1ldGhvZD1hfWFzeW5jIGZpcmUoZSxhPSExKXtsZXQgaT1EYXRlLm5vdygpLHI9e21ldGhvZDp0aGlzLm1ldGhvZCxyZXF1ZXN0OmUscmVzcG9uc2U6bnVsbCxjb3JyZWxhdGlvbjp7aWQ6SW4udW5pKCkscGhhc2U6InJlcXVlc3QifX07cj0kci5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhyLHtzZW5kTWV0aG9kOm49PnRoaXMucG9zdFRyT2JqZWN0KG4pfSksdGhpcy5za2lwSG9va3N8fFgxZSgib25PdXRnb2luZ1JlcXVlc3QiLHtjb3JyZWxhdGlvbklkOnIuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoib3V0Z29pbmciLHBoYXNlOiJyZXF1ZXN0Iix0aW1lc3RhbXA6aSxwYXlsb2FkOmV9KTtsZXQgcztyZXR1cm4gcz1hd2FpdCB0aGlzLnBvc3RUck9iamVjdChyLGEpLHM9JHIuZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHMse3NlbmRNZXRob2Q6bj0+dGhpcy5wb3N0VHJPYmplY3Qobil9KSx0aGlzLnNraXBIb29rc3x8WDFlKCJvbkluY29taW5nUmVzcG9uc2UiLHtjb3JyZWxhdGlvbklkOnIuY29ycmVsYXRpb24uaWQsbWV0aG9kOnRoaXMubWV0aG9kLGRpcmVjdGlvbjoiaW5jb21pbmciLHBoYXNlOiJyZXNwb25zZSIsdGltZXN0YW1wOkRhdGUubm93KCksZHVyYXRpb25NczpEYXRlLm5vdygpLWkscGF5bG9hZDpzPy5yZXNwb25zZSxlcnJvcjpzPy5lcnJvcj8udGV4dH0pLHMucmVzcG9uc2V9YXN5bmMgcG9zdFRyT2JqZWN0KGUsYT0hMSl7bGV0IGk7aWYodGhpcy51cmxFbmRQb2ludD9pPWF3YWl0IHokdC5wb3N0SnNvbih0aGlzLnVybEVuZFBvaW50LGUsYT97Y2FjaGVTdHJhdGVneToiY2FjaGUtZmlyc3QifTp7fSk6aT1hd2FpdCB0aGlzLnR5cGVkVGFyZ2V0LnBvc3QoZSksaS5lcnJvcil7aWYoY29uc29sZS5lcnJvcihgbWV0aG9kOiA+PiR7dGhpcy5tZXRob2R9PDwgZ290IGFuIEVSUk9SOiAiJHtpLmVycm9yLnRleHR9IiB3aXRoIGRhdGEgJHtKU09OLnN0cmluZ2lmeShpLmVycm9yLmRhdGEsbnVsbCwyKX1gKSwhaS5yZXRyeSl0aHJvdyBuZXcgYnMoaS5lcnJvci50ZXh0LGkuZXJyb3IuZGF0YSk7cmV0dXJuIG51bGx9cmV0dXJuIGkucmV0cnkmJihjb25zb2xlLmxvZyhgc2VydmVyIHJlcXVlc3RlZCByZXRyeSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICR7aS5yZXRyeS5yZWFzb259YCksYXdhaXQgcHQuZGVsYXlGb3IoaS5yZXRyeS53YWl0Rm9yTXMpLGk9YXdhaXQgdGhpcy5wb3N0VHJPYmplY3QoZSxhKSksaX19fSk7dmFyIGNhPXt9O1dlKGNhLHtUeXBlZEhhbmRsZXI6KCk9PnlfLFR5cGVkUmVxdWVzdDooKT0+UzYsVHlwZWRSZXNwb25zZUVycm9yOigpPT5icyxUeXBlZFJvdXRlcjooKT0+bzAsVHlwZWRUYXJnZXQ6KCk9Pk1fLFZpcnR1YWxTdHJlYW06KCk9PiRyfSk7dmFyIEM2PWIoKCk9Pnt3XygpO3hfKCk7azYoKTt6NigpO3pfKCk7aTkoKX0pO2Z1bmN0aW9uIEsxZSh0KXtyZXR1cm4gdCYmdHlwZW9mIHQudGhlbj09ImZ1bmN0aW9uIn1mdW5jdGlvbiBBcih0LGUpe3JldHVybiB0fHwodD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihhKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBhKGUpfSx0KX0pfWZ1bmN0aW9uIGUyZSh0LGUpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtdCsxKSt0KX1mdW5jdGlvbiB2cygpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMil9ZnVuY3Rpb24geXMoKXt2YXIgdD1EYXRlLm5vdygpKjFlMztyZXR1cm4gdDw9a18mJih0PWtfKzEpLGtfPXQsdH1mdW5jdGlvbiB0MmUoKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSImJnR5cGVvZiBuYXZpZ2F0b3IubG9ja3M8InUiJiZ0eXBlb2YgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3Q9PSJmdW5jdGlvbiJ9dmFyIFExZSxKMWUsQmEsa18sRm49YigoKT0+e1ExZT1Qcm9taXNlLnJlc29sdmUoITEpLEoxZT1Qcm9taXNlLnJlc29sdmUoITApLEJhPVByb21pc2UucmVzb2x2ZSgpO2tfPTB9KTtmdW5jdGlvbiBDJHQodCl7dmFyIGU9e3RpbWU6eXMoKSxtZXNzYWdlc0NhbGxiYWNrOm51bGwsYmM6bmV3IEJyb2FkY2FzdENoYW5uZWwodCksc3ViRm5zOltdfTtyZXR1cm4gZS5iYy5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7ZS5tZXNzYWdlc0NhbGxiYWNrJiZlLm1lc3NhZ2VzQ2FsbGJhY2soYS5kYXRhKX0sZX1mdW5jdGlvbiBfJHQodCl7dC5iYy5jbG9zZSgpLHQuc3ViRm5zPVtdfWZ1bmN0aW9uIFQkdCh0LGUpe3RyeXtyZXR1cm4gdC5iYy5wb3N0TWVzc2FnZShlLCExKSxCYX1jYXRjaChhKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYSl9fWZ1bmN0aW9uIEwkdCh0LGUpe3QubWVzc2FnZXNDYWxsYmFjaz1lfWZ1bmN0aW9uICQkdCgpe2lmKHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5EZW5vJiZnbG9iYWxUaGlzLkRlbm8uYXJncylyZXR1cm4hMDtpZigodHlwZW9mIHdpbmRvdzwidSJ8fHR5cGVvZiBzZWxmPCJ1IikmJnR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0iZnVuY3Rpb24iKXtpZihCcm9hZGNhc3RDaGFubmVsLl9wdWJrZXkpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsOiBEbyBub3Qgb3ZlcndyaXRlIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpcyBtb2R1bGUsIHRoaXMgaXMgbm90IGEgcG9seWZpbGwiKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIEEkdCgpe3JldHVybiAxNTB9dmFyIGskdCxTJHQsYTJlLGkyZT1iKCgpPT57Rm4oKTtrJHQ9eXMsUyR0PSJuYXRpdmUiO2EyZT17Y3JlYXRlOkMkdCxjbG9zZTpfJHQsb25NZXNzYWdlOkwkdCxwb3N0TWVzc2FnZTpUJHQsY2FuQmVVc2VkOiQkdCx0eXBlOlMkdCxhdmVyYWdlUmVzcG9uc2VUaW1lOkEkdCxtaWNyb1NlY29uZHM6ayR0fX0pO2Z1bmN0aW9uIEQkdCh0KXtsZXQgZT1TXygpLXQudHRsLGE9dC5tYXBbU3ltYm9sLml0ZXJhdG9yXSgpO2Zvcig7Oyl7bGV0IGk9YS5uZXh0KCkudmFsdWU7aWYoIWkpYnJlYWs7bGV0IHI9aVswXTtpZihpWzFdPGUpdC5tYXAuZGVsZXRlKHIpO2Vsc2UgYnJlYWt9fWZ1bmN0aW9uIFNfKCl7cmV0dXJuIERhdGUubm93KCl9dmFyIEMzLENfPWIoKCk9PntDMz1jbGFzc3t0dGw7bWFwPW5ldyBNYXA7X3RvPSExO2NvbnN0cnVjdG9yKGUpe3RoaXMudHRsPWV9aGFzKGUpe2xldCBhPXRoaXMubWFwLmdldChlKTtyZXR1cm4gdHlwZW9mIGE+InUiPyExOmE8U18oKS10aGlzLnR0bD8odGhpcy5tYXAuZGVsZXRlKGUpLCExKTohMH1hZGQoZSl7dGhpcy5tYXAuZGVsZXRlKGUpLHRoaXMubWFwLnNldChlLFNfKCkpLHRoaXMuX3RvfHwodGhpcy5fdG89ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuX3RvPSExLEQkdCh0aGlzKX0sMCkpfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19fSk7ZnVuY3Rpb24gbDAoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKTtyZXR1cm4gdHlwZW9mIGUud2ViV29ya2VyU3VwcG9ydD4idSImJihlLndlYldvcmtlclN1cHBvcnQ9ITApLGUuaWRifHwoZS5pZGI9e30pLGUuaWRiLnR0bHx8KGUuaWRiLnR0bD0xZTMqNDUpLGUuaWRiLmZhbGxiYWNrSW50ZXJ2YWx8fChlLmlkYi5mYWxsYmFja0ludGVydmFsPTE1MCksdC5pZGImJnR5cGVvZiB0LmlkYi5vbmNsb3NlPT0iZnVuY3Rpb24iJiYoZS5pZGIub25jbG9zZT10LmlkYi5vbmNsb3NlKSxlLmxvY2Fsc3RvcmFnZXx8KGUubG9jYWxzdG9yYWdlPXt9KSxlLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0fHwoZS5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dD0xZTMqNjApLHQubWV0aG9kcyYmKGUubWV0aG9kcz10Lm1ldGhvZHMpLGUubm9kZXx8KGUubm9kZT17fSksZS5ub2RlLnR0bHx8KGUubm9kZS50dGw9MWUzKjYwKjIpLGUubm9kZS5tYXhQYXJhbGxlbFdyaXRlc3x8KGUubm9kZS5tYXhQYXJhbGxlbFdyaXRlcz0yMDQ4KSx0eXBlb2YgZS5ub2RlLnVzZUZhc3RQYXRoPiJ1IiYmKGUubm9kZS51c2VGYXN0UGF0aD0hMCksZX12YXIgcjk9YigoKT0+e30pO2Z1bmN0aW9uIHIyZSgpe2lmKHR5cGVvZiBpbmRleGVkREI8InUiKXJldHVybiBpbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdzwidSIpe2lmKHR5cGVvZiB3aW5kb3cubW96SW5kZXhlZERCPCJ1IilyZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjtpZih0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy53ZWJraXRJbmRleGVkREI7aWYodHlwZW9mIHdpbmRvdy5tc0luZGV4ZWREQjwidSIpcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQn1yZXR1cm4hMX1mdW5jdGlvbiBzOSh0KXt0LmNvbW1pdCYmdC5jb21taXQoKX1mdW5jdGlvbiBOJHQodCl7dmFyIGU9cjJlKCksYT1QJHQrdCxpPWUub3BlbihhKTtyZXR1cm4gaS5vbnVwZ3JhZGVuZWVkZWQ9ZnVuY3Rpb24ocil7dmFyIHM9ci50YXJnZXQucmVzdWx0O3MuY3JlYXRlT2JqZWN0U3RvcmUoUmkse2tleVBhdGg6ImlkIixhdXRvSW5jcmVtZW50OiEwfSl9LG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5vbmVycm9yPWZ1bmN0aW9uKG4pe3JldHVybiBzKG4pfSxpLm9uc3VjY2Vzcz1mdW5jdGlvbigpe3IoaS5yZXN1bHQpfX0pfWZ1bmN0aW9uIEYkdCh0LGUsYSl7dmFyIGk9RGF0ZS5ub3coKSxyPXt1dWlkOmUsdGltZTppLGRhdGE6YX0scz10LnRyYW5zYWN0aW9uKFtSaV0sInJlYWR3cml0ZSIsXzYpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLG8pe3Mub25jb21wbGV0ZT1mdW5jdGlvbigpe3JldHVybiBuKCl9LHMub25lcnJvcj1mdW5jdGlvbihjKXtyZXR1cm4gbyhjKX07dmFyIGQ9cy5vYmplY3RTdG9yZShSaSk7ZC5hZGQociksczkocyl9KX1mdW5jdGlvbiBPQzEodCl7dmFyIGU9dC50cmFuc2FjdGlvbihSaSwicmVhZG9ubHkiLF82KSxhPWUub2JqZWN0U3RvcmUoUmkpLGk9W107cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe2Eub3BlbkN1cnNvcigpLm9uc3VjY2Vzcz1mdW5jdGlvbihzKXt2YXIgbj1zLnRhcmdldC5yZXN1bHQ7bj8oaS5wdXNoKG4udmFsdWUpLG4uY29udGludWUoKSk6KHM5KGUpLHIoaSkpfX0pfWZ1bmN0aW9uIE8kdCh0LGUpe3ZhciBhPXQudHJhbnNhY3Rpb24oUmksInJlYWRvbmx5IixfNiksaT1hLm9iamVjdFN0b3JlKFJpKSxyPVtdLHM9SURCS2V5UmFuZ2UuYm91bmQoZSsxLDEvMCk7aWYoaS5nZXRBbGwpe3ZhciBuPWkuZ2V0QWxsKHMpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGMpe24ub25lcnJvcj1mdW5jdGlvbihwKXtyZXR1cm4gYyhwKX0sbi5vbnN1Y2Nlc3M9ZnVuY3Rpb24ocCl7ZChwLnRhcmdldC5yZXN1bHQpfX0pfWZ1bmN0aW9uIG8oKXt0cnl7cmV0dXJuIHM9SURCS2V5UmFuZ2UuYm91bmQoZSsxLDEvMCksaS5vcGVuQ3Vyc29yKHMpfWNhdGNoe3JldHVybiBpLm9wZW5DdXJzb3IoKX19cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsYyl7dmFyIHA9bygpO3Aub25lcnJvcj1mdW5jdGlvbihsKXtyZXR1cm4gYyhsKX0scC5vbnN1Y2Nlc3M9ZnVuY3Rpb24obCl7dmFyIGY9bC50YXJnZXQucmVzdWx0O2Y/Zi52YWx1ZS5pZDxlKzE/Zi5jb250aW51ZShlKzEpOihyLnB1c2goZi52YWx1ZSksZi5jb250aW51ZSgpKTooczkoYSksZChyKSl9fSl9ZnVuY3Rpb24gUiR0KHQsZSl7aWYodC5jbG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7dmFyIGE9dC5kYi50cmFuc2FjdGlvbihSaSwicmVhZHdyaXRlIixfNiksaT1hLm9iamVjdFN0b3JlKFJpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24ocil7dmFyIHM9aS5kZWxldGUocik7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4pe3Mub25zdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKX19KX0pKX1mdW5jdGlvbiBCJHQodCxlKXt2YXIgYT1EYXRlLm5vdygpLWUsaT10LnRyYW5zYWN0aW9uKFJpLCJyZWFkb25seSIsXzYpLHI9aS5vYmplY3RTdG9yZShSaSkscz1bXTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obil7ci5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKG8pe3ZhciBkPW8udGFyZ2V0LnJlc3VsdDtpZihkKXt2YXIgYz1kLnZhbHVlO2MudGltZTxhPyhzLnB1c2goYyksZC5jb250aW51ZSgpKTooczkoaSksbihzKSl9ZWxzZSBuKHMpfX0pfWZ1bmN0aW9uIEgkdCh0KXtyZXR1cm4gQiR0KHQuZGIsdC5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFIkdCh0LGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlkfSkpfSl9ZnVuY3Rpb24gcSR0KHQsZSl7cmV0dXJuIGU9bDAoZSksTiR0KHQpLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGk9e2Nsb3NlZDohMSxsYXN0Q3Vyc29ySWQ6MCxjaGFubmVsTmFtZTp0LG9wdGlvbnM6ZSx1dWlkOnZzKCksZU1JczpuZXcgQzMoZS5pZGIudHRsKjIpLHdyaXRlQmxvY2tQcm9taXNlOkJhLG1lc3NhZ2VzQ2FsbGJhY2s6bnVsbCxyZWFkUXVldWVQcm9taXNlczpbXSxkYjphfTtyZXR1cm4gYS5vbmNsb3NlPWZ1bmN0aW9uKCl7aS5jbG9zZWQ9ITAsZS5pZGIub25jbG9zZSYmZS5pZGIub25jbG9zZSgpfSxzMmUoaSksaX0pfWZ1bmN0aW9uIHMyZSh0KXt0LmNsb3NlZHx8bjJlKHQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQXIodC5vcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gczJlKHQpfSl9ZnVuY3Rpb24gViR0KHQsZSl7cmV0dXJuISh0LnV1aWQ9PT1lLnV1aWR8fGUuZU1Jcy5oYXModC5pZCl8fHQuZGF0YS50aW1lPGUubWVzc2FnZXNDYWxsYmFja1RpbWUpfWZ1bmN0aW9uIG4yZSh0KXtyZXR1cm4gdC5jbG9zZWQ/QmE6dC5tZXNzYWdlc0NhbGxiYWNrP08kdCh0LmRiLHQubGFzdEN1cnNvcklkKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBhPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiEhaX0pLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS5pZD50Lmxhc3RDdXJzb3JJZCYmKHQubGFzdEN1cnNvcklkPWkuaWQpLGl9KS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIFYkdChpLHQpfSkuc29ydChmdW5jdGlvbihpLHIpe3JldHVybiBpLnRpbWUtci50aW1lfSk7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihpKXt0Lm1lc3NhZ2VzQ2FsbGJhY2smJih0LmVNSXMuYWRkKGkuaWQpLHQubWVzc2FnZXNDYWxsYmFjayhpLmRhdGEpKX0pLEJhfSk6QmF9ZnVuY3Rpb24gaiR0KHQpe3QuY2xvc2VkPSEwLHQuZGIuY2xvc2UoKX1mdW5jdGlvbiBVJHQodCxlKXtyZXR1cm4gdC53cml0ZUJsb2NrUHJvbWlzZT10LndyaXRlQmxvY2tQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gRiR0KHQuZGIsdC51dWlkLGUpfSkudGhlbihmdW5jdGlvbigpe2UyZSgwLDEwKT09PTAmJkgkdCh0KX0pLHQud3JpdGVCbG9ja1Byb21pc2V9ZnVuY3Rpb24gVyR0KHQsZSxhKXt0Lm1lc3NhZ2VzQ2FsbGJhY2tUaW1lPWEsdC5tZXNzYWdlc0NhbGxiYWNrPWUsbjJlKHQpfWZ1bmN0aW9uIEckdCgpe3JldHVybiEhcjJlKCl9ZnVuY3Rpb24gWSR0KHQpe3JldHVybiB0LmlkYi5mYWxsYmFja0ludGVydmFsKjJ9dmFyIEUkdCxQJHQsUmksXzYsSSR0LG8yZSxsMmU9YigoKT0+e0ZuKCk7Q18oKTtyOSgpO0UkdD15cyxQJHQ9InB1YmtleS5icm9hZGNhc3QtY2hhbm5lbC0wLSIsUmk9Im1lc3NhZ2VzIixfNj17ZHVyYWJpbGl0eToicmVsYXhlZCJ9LEkkdD0iaWRiIjtvMmU9e2NyZWF0ZTpxJHQsY2xvc2U6aiR0LG9uTWVzc2FnZTpXJHQscG9zdE1lc3NhZ2U6VSR0LGNhbkJlVXNlZDpHJHQsdHlwZTpJJHQsYXZlcmFnZVJlc3BvbnNlVGltZTpZJHQsbWljcm9TZWNvbmRzOkUkdH19KTtmdW5jdGlvbiBjMmUoKXt2YXIgdDtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gbnVsbDt0cnl7dD13aW5kb3cubG9jYWxTdG9yYWdlLHQ9d2luZG93WyJpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlIl18fHdpbmRvdy5sb2NhbFN0b3JhZ2V9Y2F0Y2h7fXJldHVybiB0fWZ1bmN0aW9uIGQyZSh0KXtyZXR1cm4gWCR0K3R9ZnVuY3Rpb24gUSR0KHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe0FyKCkudGhlbihmdW5jdGlvbigpe3ZhciBpPWQyZSh0LmNoYW5uZWxOYW1lKSxyPXt0b2tlbjp2cygpLHRpbWU6RGF0ZS5ub3coKSxkYXRhOmUsdXVpZDp0LnV1aWR9LHM9SlNPTi5zdHJpbmdpZnkocik7YzJlKCkuc2V0SXRlbShpLHMpO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO24uaW5pdEV2ZW50KCJzdG9yYWdlIiwhMCwhMCksbi5rZXk9aSxuLm5ld1ZhbHVlPXMsd2luZG93LmRpc3BhdGNoRXZlbnQobiksYSgpfSl9KX1mdW5jdGlvbiBKJHQodCxlKXt2YXIgYT1kMmUodCksaT1mdW5jdGlvbihzKXtzLmtleT09PWEmJmUoSlNPTi5wYXJzZShzLm5ld1ZhbHVlKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsaSksaX1mdW5jdGlvbiBlQXQodCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLHQpfWZ1bmN0aW9uIHRBdCh0LGUpe2lmKGU9bDAoZSksIXAyZSgpKXRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbDogbG9jYWxzdG9yYWdlIGNhbm5vdCBiZSB1c2VkIik7dmFyIGE9dnMoKSxpPW5ldyBDMyhlLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KSxyPXtjaGFubmVsTmFtZTp0LHV1aWQ6YSxlTUlzOml9O3JldHVybiByLmxpc3RlbmVyPUokdCh0LGZ1bmN0aW9uKHMpe3IubWVzc2FnZXNDYWxsYmFjayYmcy51dWlkIT09YSYmKCFzLnRva2VufHxpLmhhcyhzLnRva2VuKXx8cy5kYXRhLnRpbWUmJnMuZGF0YS50aW1lPHIubWVzc2FnZXNDYWxsYmFja1RpbWV8fChpLmFkZChzLnRva2VuKSxyLm1lc3NhZ2VzQ2FsbGJhY2socy5kYXRhKSkpfSkscn1mdW5jdGlvbiBhQXQodCl7ZUF0KHQubGlzdGVuZXIpfWZ1bmN0aW9uIGlBdCh0LGUsYSl7dC5tZXNzYWdlc0NhbGxiYWNrVGltZT1hLHQubWVzc2FnZXNDYWxsYmFjaz1lfWZ1bmN0aW9uIHAyZSgpe3ZhciB0PWMyZSgpO2lmKCF0KXJldHVybiExO3RyeXt2YXIgZT0iX19icm9hZGNhc3RjaGFubmVsX2NoZWNrIjt0LnNldEl0ZW0oZSwid29ya3MiKSx0LnJlbW92ZUl0ZW0oZSl9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gckF0KCl7dmFyIHQ9MTIwLGU9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO3JldHVybiBlLmluY2x1ZGVzKCJzYWZhcmkiKSYmIWUuaW5jbHVkZXMoImNocm9tZSIpP3QqMjp0fXZhciBaJHQsWCR0LEskdCxoMmUsdTJlPWIoKCk9PntDXygpO3I5KCk7Rm4oKTtaJHQ9eXMsWCR0PSJwdWJrZXkuYnJvYWRjYXN0Q2hhbm5lbC0iLEskdD0ibG9jYWxzdG9yYWdlIjtoMmU9e2NyZWF0ZTp0QXQsY2xvc2U6YUF0LG9uTWVzc2FnZTppQXQscG9zdE1lc3NhZ2U6USR0LGNhbkJlVXNlZDpwMmUsdHlwZTpLJHQsYXZlcmFnZVJlc3BvbnNlVGltZTpyQXQsbWljcm9TZWNvbmRzOlokdH19KTtmdW5jdGlvbiBuQXQodCl7dmFyIGU9e3RpbWU6ZjJlKCksbmFtZTp0LG1lc3NhZ2VzQ2FsbGJhY2s6bnVsbH07cmV0dXJuIF9fLmFkZChlKSxlfWZ1bmN0aW9uIG9BdCh0KXtfXy5kZWxldGUodCl9ZnVuY3Rpb24gbEF0KHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGk9QXJyYXkuZnJvbShfXyk7aS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IubmFtZT09PXQubmFtZSYmciE9PXQmJnIubWVzc2FnZXNDYWxsYmFjayYmci50aW1lPGUudGltZSYmci5tZXNzYWdlc0NhbGxiYWNrKGUpfSksYSgpfSxtMmUpfSl9ZnVuY3Rpb24gY0F0KHQsZSl7dC5tZXNzYWdlc0NhbGxiYWNrPWV9ZnVuY3Rpb24gZEF0KCl7cmV0dXJuITB9ZnVuY3Rpb24gcEF0KCl7cmV0dXJuIG0yZX12YXIgZjJlLHNBdCxfXyxtMmUsZzJlLGIyZT1iKCgpPT57Rm4oKTtmMmU9eXMsc0F0PSJzaW11bGF0ZSIsX189bmV3IFNldDttMmU9NTtnMmU9e2NyZWF0ZTpuQXQsY2xvc2U6b0F0LG9uTWVzc2FnZTpjQXQscG9zdE1lc3NhZ2U6bEF0LGNhbkJlVXNlZDpkQXQsdHlwZTpzQXQsYXZlcmFnZVJlc3BvbnNlVGltZTpwQXQsbWljcm9TZWNvbmRzOmYyZX19KTtmdW5jdGlvbiBUXyh0KXt2YXIgZT1bXS5jb25jYXQodC5tZXRob2RzLHYyZSkuZmlsdGVyKEJvb2xlYW4pO2lmKHQudHlwZSl7aWYodC50eXBlPT09InNpbXVsYXRlIilyZXR1cm4gZzJlO3ZhciBhPWUuZmluZChmdW5jdGlvbihyKXtyZXR1cm4gci50eXBlPT09dC50eXBlfSk7aWYoYSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZC10eXBlICIrdC50eXBlKyIgbm90IGZvdW5kIil9dC53ZWJXb3JrZXJTdXBwb3J0fHwoZT1lLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci50eXBlIT09ImlkYiJ9KSk7dmFyIGk9ZS5maW5kKGZ1bmN0aW9uKHIpe3JldHVybiByLmNhbkJlVXNlZCgpfSk7aWYoaSlyZXR1cm4gaTt0aHJvdyBuZXcgRXJyb3IoIk5vIHVzYWJsZSBtZXRob2QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeSh2MmUubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnR5cGV9KSkpfXZhciB2MmUseTJlPWIoKCk9PntpMmUoKTtsMmUoKTt1MmUoKTtiMmUoKTt2MmU9W2EyZSxvMmUsaDJlXX0pO2Z1bmN0aW9uIHVBdCh0KXt0PWwwKHQpO3ZhciBlPVRfKHQpO3JldHVybiBlLnR5cGU9PT0ibm9kZSI/ZS5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KTpRMWV9ZnVuY3Rpb24gZkF0KHQpe0xfPXR9ZnVuY3Rpb24geDJlKHQsZSxhKXt2YXIgaT10Lm1ldGhvZC5taWNyb1NlY29uZHMoKSxyPXt0aW1lOmksdHlwZTplLGRhdGE6YX0scz10Ll9wcmVwUD90Ll9wcmVwUDpCYTtyZXR1cm4gcy50aGVuKGZ1bmN0aW9uKCl7dmFyIG49dC5tZXRob2QucG9zdE1lc3NhZ2UodC5fc3RhdGUscik7cmV0dXJuIHQuX3VNUC5hZGQobiksbi5jYXRjaCgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fdU1QLmRlbGV0ZShuKX0pLG59KX1mdW5jdGlvbiBtQXQodCl7dmFyIGU9dC5tZXRob2QuY3JlYXRlKHQubmFtZSx0Lm9wdGlvbnMpO0sxZShlKT8odC5fcHJlcFA9ZSxlLnRoZW4oZnVuY3Rpb24oYSl7dC5fc3RhdGU9YX0pKTp0Ll9zdGF0ZT1lfWZ1bmN0aW9uIHcyZSh0KXtyZXR1cm4gdC5fYWRkRUwubWVzc2FnZS5sZW5ndGg+MHx8dC5fYWRkRUwuaW50ZXJuYWwubGVuZ3RoPjB9ZnVuY3Rpb24gTTJlKHQsZSxhKXt0Ll9hZGRFTFtlXS5wdXNoKGEpLGdBdCh0KX1mdW5jdGlvbiB6MmUodCxlLGEpe3QuX2FkZEVMW2VdPXQuX2FkZEVMW2VdLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9PWF9KSxiQXQodCl9ZnVuY3Rpb24gZ0F0KHQpe2lmKCF0Ll9pTCYmdzJlKHQpKXt2YXIgZT1mdW5jdGlvbihyKXt0Ll9hZGRFTFtyLnR5cGVdLmZvckVhY2goZnVuY3Rpb24ocyl7ci50aW1lPj1zLnRpbWUmJnMuZm4oci5kYXRhKX0pfSxhPXQubWV0aG9kLm1pY3JvU2Vjb25kcygpO3QuX3ByZXBQP3QuX3ByZXBQLnRoZW4oZnVuY3Rpb24oKXt0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxhKX0pOih0Ll9pTD0hMCx0Lm1ldGhvZC5vbk1lc3NhZ2UodC5fc3RhdGUsZSxhKSl9fWZ1bmN0aW9uIGJBdCh0KXtpZih0Ll9pTCYmIXcyZSh0KSl7dC5faUw9ITE7dmFyIGU9dC5tZXRob2QubWljcm9TZWNvbmRzKCk7dC5tZXRob2Qub25NZXNzYWdlKHQuX3N0YXRlLG51bGwsZSl9fXZhciAkXyxoQXQsYzAsTF8sazJlPWIoKCk9PntGbigpO3kyZSgpO3I5KCk7JF89bmV3IFNldCxoQXQ9MCxjMD1mdW5jdGlvbihlLGEpe3RoaXMuaWQ9aEF0KyssJF8uYWRkKHRoaXMpLHRoaXMubmFtZT1lLExfJiYoYT1MXyksdGhpcy5vcHRpb25zPWwwKGEpLHRoaXMubWV0aG9kPVRfKHRoaXMub3B0aW9ucyksdGhpcy5faUw9ITEsdGhpcy5fb25NTD1udWxsLHRoaXMuX2FkZEVMPXttZXNzYWdlOltdLGludGVybmFsOltdfSx0aGlzLl91TVA9bmV3IFNldCx0aGlzLl9iZWZDPVtdLHRoaXMuX3ByZXBQPW51bGwsbUF0KHRoaXMpfTtjMC5fcHVia2V5PSEwO2MwLnByb3RvdHlwZT17cG9zdE1lc3NhZ2U6ZnVuY3Rpb24oZSl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKCk6IENhbm5vdCBwb3N0IG1lc3NhZ2UgYWZ0ZXIgY2hhbm5lbCBoYXMgY2xvc2VkICIrSlNPTi5zdHJpbmdpZnkoZSkpO3JldHVybiB4MmUodGhpcywibWVzc2FnZSIsZSl9LHBvc3RJbnRlcm5hbDpmdW5jdGlvbihlKXtyZXR1cm4geDJlKHRoaXMsImludGVybmFsIixlKX0sc2V0IG9ubWVzc2FnZSh0KXt2YXIgZT10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxhPXt0aW1lOmUsZm46dH07ejJlKHRoaXMsIm1lc3NhZ2UiLHRoaXMuX29uTUwpLHQmJnR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9vbk1MPWEsTTJlKHRoaXMsIm1lc3NhZ2UiLGEpKTp0aGlzLl9vbk1MPW51bGx9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSxhKXt2YXIgaT10aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKSxyPXt0aW1lOmksZm46YX07TTJlKHRoaXMsZSxyKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLGEpe3ZhciBpPXRoaXMuX2FkZEVMW2VdLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIuZm49PT1hfSk7ejJlKHRoaXMsZSxpKX0sY2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmNsb3NlZCl7JF8uZGVsZXRlKHRoaXMpLHRoaXMuY2xvc2VkPSEwO3ZhciBhPXRoaXMuX3ByZXBQP3RoaXMuX3ByZXBQOkJhO3JldHVybiB0aGlzLl9vbk1MPW51bGwsdGhpcy5fYWRkRUwubWVzc2FnZT1bXSxhLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShlLl91TVApKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5hbGwoZS5fYmVmQy5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkoKX0pKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5tZXRob2QuY2xvc2UoZS5fc3RhdGUpfSl9fSxnZXQgdHlwZSgpe3JldHVybiB0aGlzLm1ldGhvZC50eXBlfSxnZXQgaXNDbG9zZWQoKXtyZXR1cm4gdGhpcy5jbG9zZWR9fX0pO2Z1bmN0aW9uIFMyZSh0KXtpZih0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU9PSJmdW5jdGlvbiImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSl7dmFyIGU9c2VsZi5jbG9zZS5iaW5kKHNlbGYpO3NlbGYuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGUoKX19ZWxzZXtpZih0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIhPSJmdW5jdGlvbiIpcmV0dXJuO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7dCgpfSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZnVuY3Rpb24oKXt0KCl9LCEwKX19dmFyIEMyZT1iKCgpPT57fSk7ZnVuY3Rpb24gXzJlKHQpe3Byb2Nlc3Mub24oImV4aXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0pLHByb2Nlc3Mub24oImJlZm9yZUV4aXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MuZXhpdCgpfSl9KSxwcm9jZXNzLm9uKCJTSUdJTlQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3MuZXhpdCgpfSl9KSxwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIHQoKS50aGVuKGZ1bmN0aW9uKCl7Y29uc29sZS50cmFjZShlKSxwcm9jZXNzLmV4aXQoMTAxKX0pfSl9dmFyIFQyZT1iKCgpPT57fSk7ZnVuY3Rpb24geEF0KCl7TDJlfHwoTDJlPSEwLHlBdCh3QXQpKX1mdW5jdGlvbiAkMmUodCl7aWYoeEF0KCksdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJMaXN0ZW5lciBpcyBubyBmdW5jdGlvbiIpO2QwLmFkZCh0KTt2YXIgZT17cmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGQwLmRlbGV0ZSh0KX0scnVuOmZ1bmN0aW9uKCl7cmV0dXJuIGQwLmRlbGV0ZSh0KSx0KCl9fTtyZXR1cm4gZX1mdW5jdGlvbiB3QXQoKXt2YXIgdD1bXTtyZXR1cm4gZDAuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSgpKSxkMC5kZWxldGUoZSl9KSxQcm9taXNlLmFsbCh0KX1mdW5jdGlvbiBzXzEoKXtkMC5jbGVhcigpfWZ1bmN0aW9uIG5fMSgpe3JldHVybiBkMC5zaXplfXZhciB2QXQseUF0LGQwLEwyZSxBMmU9YigoKT0+e0MyZSgpO1QyZSgpO3ZBdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3M8InUiP3Byb2Nlc3M6MCk9PT0iW29iamVjdCBwcm9jZXNzXSIseUF0PXZBdD9fMmU6UzJlLGQwPW5ldyBTZXQsTDJlPSExfSk7ZnVuY3Rpb24geHModCxlKXt2YXIgYT17Y29udGV4dDoibGVhZGVyIixhY3Rpb246ZSx0b2tlbjp0LnRva2VufTtyZXR1cm4gdC5icm9hZGNhc3RDaGFubmVsLnBvc3RJbnRlcm5hbChhKX1mdW5jdGlvbiBUNih0KXt0LmlzTGVhZGVyPSEwLHQuX2hhc0xlYWRlcj0hMDt2YXIgZT0kMmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5kaWUoKX0pO3QuX3VubC5wdXNoKGUpO3ZhciBhPWZ1bmN0aW9uKHIpe3IuY29udGV4dD09PSJsZWFkZXIiJiZyLmFjdGlvbj09PSJhcHBseSImJnhzKHQsInRlbGwiKSxyLmNvbnRleHQ9PT0ibGVhZGVyIiYmci5hY3Rpb249PT0idGVsbCImJiF0Ll9kcExDJiYodC5fZHBMQz0hMCx0Ll9kcEwoKSx4cyh0LCJ0ZWxsIikpfTtyZXR1cm4gdC5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIixhKSx0Ll9sc3Rucy5wdXNoKGEpLHhzKHQsInRlbGwiKX12YXIgbjk9YigoKT0+e0EyZSgpfSk7dmFyIEFfLEQyZSxFMmU9YigoKT0+e0ZuKCk7bjkoKTtBXz1mdW5jdGlvbihlLGEpe3ZhciBpPXRoaXM7dGhpcy5icm9hZGNhc3RDaGFubmVsPWUsZS5fYmVmQy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGllKCl9KSx0aGlzLl9vcHRpb25zPWEsdGhpcy5pc0xlYWRlcj0hMSx0aGlzLmlzRGVhZD0hMSx0aGlzLnRva2VuPXZzKCksdGhpcy5fbHN0bnM9W10sdGhpcy5fdW5sPVtdLHRoaXMuX2RwTD1mdW5jdGlvbigpe30sdGhpcy5fZHBMQz0hMSx0aGlzLl93S01DPXt9LHRoaXMubE49InB1YmtleS1iY3x8IitlLm1ldGhvZC50eXBlKyJ8fCIrZS5uYW1lfSxEMmU9IkxlYWRlckVsZWN0aW9uV2ViTG9jay5kaWUoKSBjYWxsZWQiO0FfLnByb3RvdHlwZT17aGFzTGVhZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmF2aWdhdG9yLmxvY2tzLnF1ZXJ5KCkudGhlbihmdW5jdGlvbihhKXt2YXIgaT1hLmhlbGQ/YS5oZWxkLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5uYW1lPT09ZS5sTn0pOltdO3JldHVybiEhKGkmJmkubGVuZ3RoPjApfSl9LGF3YWl0TGVhZGVyc2hpcDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX3dMTVApe3RoaXMuX3dLTUMuYz1uZXcgQWJvcnRDb250cm9sbGVyO3ZhciBhPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscil7ZS5fd0tNQy5yZXM9aSxlLl93S01DLnJlaj1yfSk7dGhpcy5fd0xNUD1uZXcgUHJvbWlzZShmdW5jdGlvbihpLHIpe25hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KGUubE4se3NpZ25hbDplLl93S01DLmMuc2lnbmFsfSxmdW5jdGlvbigpe3JldHVybiBlLl93S01DLmM9dm9pZCAwLFQ2KGUpLGkoKSxhfSkuY2F0Y2goZnVuY3Rpb24ocyl7cy5tZXNzYWdlJiZzLm1lc3NhZ2U9PT1EMmV8fChlLl93S01DLnJlaiYmZS5fd0tNQy5yZWoocykscihzKSl9KX0pfXJldHVybiB0aGlzLl93TE1QfSxzZXQgb25kdXBsaWNhdGUodCl7fSxkaWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBlLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLGEpfSksdGhpcy5fbHN0bnM9W10sdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVtb3ZlKCl9KSx0aGlzLl91bmw9W10sdGhpcy5pc0xlYWRlciYmKHRoaXMuaXNMZWFkZXI9ITEpLHRoaXMuaXNEZWFkPSEwLHRoaXMuX3dLTUMucmVzJiZ0aGlzLl93S01DLnJlcygpLHRoaXMuX3dLTUMuYyYmdGhpcy5fd0tNQy5jLmFib3J0KG5ldyBFcnJvcihEMmUpKSx4cyh0aGlzLCJkZWF0aCIpfX19KTtmdW5jdGlvbiBNQXQodCl7cmV0dXJuIHQuaXNMZWFkZXI/QmE6bmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dmFyIGE9ITE7ZnVuY3Rpb24gaSgpe2F8fChhPSEwLHQuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIscyksZSghMCkpfXQuYXBwbHlPbmNlKCkudGhlbihmdW5jdGlvbigpe3QuaXNMZWFkZXImJmkoKX0pO3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIEFyKHQuX29wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkudGhlbihmdW5jdGlvbigpe2lmKCEodC5pc0RlYWR8fGEpKWlmKHQuaXNMZWFkZXIpaSgpO2Vsc2UgcmV0dXJuIHQuYXBwbHlPbmNlKCEwKS50aGVuKGZ1bmN0aW9uKCl7dC5pc0xlYWRlcj9pKCk6cigpfSl9KX07cigpO3ZhciBzPWZ1bmN0aW9uKG8pe28uY29udGV4dD09PSJsZWFkZXIiJiZvLmFjdGlvbj09PSJkZWF0aCImJih0Ll9oYXNMZWFkZXI9ITEsdC5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uKCl7dC5pc0xlYWRlciYmaSgpfSkpfTt0LmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLHMpLHQuX2xzdG5zLnB1c2gocyl9KX1mdW5jdGlvbiB6QXQodCxlKXtyZXR1cm4gdHx8KHQ9e30pLHQ9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSksdC5mYWxsYmFja0ludGVydmFsfHwodC5mYWxsYmFja0ludGVydmFsPTNlMyksdC5yZXNwb25zZVRpbWV8fCh0LnJlc3BvbnNlVGltZT1lLm1ldGhvZC5hdmVyYWdlUmVzcG9uc2VUaW1lKGUub3B0aW9ucykpLHR9ZnVuY3Rpb24ga0F0KHQsZSl7aWYodC5fbGVhZGVyRWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwgYWxyZWFkeSBoYXMgYSBsZWFkZXItZWxlY3RvciIpO2U9ekF0KGUsdCk7dmFyIGE9dDJlKCk/bmV3IEFfKHQsZSk6bmV3IFAyZSh0LGUpO3JldHVybiB0Ll9iZWZDLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYS5kaWUoKX0pLHQuX2xlYWRlckVsZWN0b3I9YSxhfXZhciBQMmUsSTJlPWIoKCk9PntGbigpO245KCk7RTJlKCk7UDJlPWZ1bmN0aW9uKGUsYSl7dmFyIGk9dGhpczt0aGlzLmJyb2FkY2FzdENoYW5uZWw9ZSx0aGlzLl9vcHRpb25zPWEsdGhpcy5pc0xlYWRlcj0hMSx0aGlzLl9oYXNMZWFkZXI9ITEsdGhpcy5pc0RlYWQ9ITEsdGhpcy50b2tlbj12cygpLHRoaXMuX2FwbFE9QmEsdGhpcy5fYXBsUUM9MCx0aGlzLl91bmw9W10sdGhpcy5fbHN0bnM9W10sdGhpcy5fZHBMPWZ1bmN0aW9uKCl7fSx0aGlzLl9kcExDPSExO3ZhciByPWZ1bmN0aW9uKG4pe24uY29udGV4dD09PSJsZWFkZXIiJiYobi5hY3Rpb249PT0iZGVhdGgiJiYoaS5faGFzTGVhZGVyPSExKSxuLmFjdGlvbj09PSJ0ZWxsIiYmKGkuX2hhc0xlYWRlcj0hMCkpfTt0aGlzLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLHIpLHRoaXMuX2xzdG5zLnB1c2gocil9O1AyZS5wcm90b3R5cGU9e2hhc0xlYWRlcjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5faGFzTGVhZGVyKX0sYXBwbHlPbmNlOmZ1bmN0aW9uKGUpe3ZhciBhPXRoaXM7aWYodGhpcy5pc0xlYWRlcilyZXR1cm4gQXIoMCwhMCk7aWYodGhpcy5pc0RlYWQpcmV0dXJuIEFyKDAsITEpO2lmKHRoaXMuX2FwbFFDPjEpcmV0dXJuIHRoaXMuX2FwbFE7dmFyIGk9ZnVuY3Rpb24oKXtpZihhLmlzTGVhZGVyKXJldHVybiBKMWU7dmFyIHM9ITEsbixvPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHApe249ZnVuY3Rpb24oKXtzPSEwLHAoKX19KSxkPWZ1bmN0aW9uKGwpe2wuY29udGV4dD09PSJsZWFkZXIiJiZsLnRva2VuIT1hLnRva2VuJiYobC5hY3Rpb249PT0iYXBwbHkiJiZsLnRva2VuPmEudG9rZW4mJm4oKSxsLmFjdGlvbj09PSJ0ZWxsIiYmKG4oKSxhLl9oYXNMZWFkZXI9ITApKX07YS5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIixkKTt2YXIgYz1lP2EuX29wdGlvbnMucmVzcG9uc2VUaW1lKjQ6YS5fb3B0aW9ucy5yZXNwb25zZVRpbWU7cmV0dXJuIHhzKGEsImFwcGx5IikudGhlbihmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJhY2UoW0FyKGMpLG8udGhlbihmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IpfSldKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geHMoYSwiYXBwbHkiKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yYWNlKFtBcihjKSxvLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKX0pXSl9KS5jYXRjaChmdW5jdGlvbigpe30pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYS5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIixkKSxzPyExOlQ2KGEpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pfSl9O3JldHVybiB0aGlzLl9hcGxRQz10aGlzLl9hcGxRQysxLHRoaXMuX2FwbFE9dGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGkoKX0pLnRoZW4oZnVuY3Rpb24oKXthLl9hcGxRQz1hLl9hcGxRQy0xfSksdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNMZWFkZXJ9KX0sYXdhaXRMZWFkZXJzaGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FMUHx8KHRoaXMuX2FMUD1NQXQodGhpcykpLHRoaXMuX2FMUH0sc2V0IG9uZHVwbGljYXRlKHQpe3RoaXMuX2RwTD10fSxkaWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBlLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLGEpfSksdGhpcy5fbHN0bnM9W10sdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVtb3ZlKCl9KSx0aGlzLl91bmw9W10sdGhpcy5pc0xlYWRlciYmKHRoaXMuX2hhc0xlYWRlcj0hMSx0aGlzLmlzTGVhZGVyPSExKSx0aGlzLmlzRGVhZD0hMCx4cyh0aGlzLCJkZWF0aCIpfX19KTt2YXIgTjJlPWIoKCk9PntrMmUoKTtJMmUoKTtuOSgpfSk7dmFyIEYyZT1iKCgpPT57YnIoKTtUYygpO0M2KCk7TjJlKCl9KTt2YXIgRF8sRV8sTzJlPWIoKCk9PntGMmUoKTtEXz1nbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWw7RF98fChEXz1jMCk7RV89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJyb2FkY2FzdENoYW5uZWw9bmV3IERfKCJkZWVzLWNvbW1zIiksdGhpcy50eXBlZHJvdXRlcj1uZXcgY2EuVHlwZWRSb3V0ZXIsdGhpcy50eXBlZHRhcmdldD1uZXcgY2EuVHlwZWRUYXJnZXQoe3Bvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXI6YXN5bmMgZT0+e3RoaXMucG9zdE1lc3NhZ2UoZSl9LHR5cGVkUm91dGVyUmVmOnRoaXMudHlwZWRyb3V0ZXJ9KSx0aGlzLmJyb2FkY2FzdENoYW5uZWwub25tZXNzYWdlPWFzeW5jIGU9PntsZXQgYT1lLm1ldGhvZD9lOmUuZGF0YTtjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhKSk7bGV0IGk9YXdhaXQgdGhpcy50eXBlZHJvdXRlci5yb3V0ZUFuZEFkZFJlc3BvbnNlKGEse3NraXBIb29rczohMH0pO2kmJiFpLmVycm9yJiZ0aGlzLnBvc3RNZXNzYWdlKGkpfX1jcmVhdGVUeXBlZFJlcXVlc3QoZSl7cmV0dXJuIG5ldyBjYS5UeXBlZFJlcXVlc3QodGhpcy50eXBlZHRhcmdldCxlKX1hc3luYyBwb3N0TWVzc2FnZShlKXt0aGlzLmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UoZSl9YXN5bmMgY3JlYXRlVHlwZWRIYW5kbGVyKGUsYSl7dGhpcy50eXBlZHJvdXRlci5hZGRUeXBlZEhhbmRsZXIobmV3IGNhLlR5cGVkSGFuZGxlcihlLGEpKX19fSk7dmFyIEw2PXt9O1dlKEw2LHtEZWVzQ29tbXM6KCk9PkVffSk7dmFyIFIyZT1iKCgpPT57TzJlKCl9KTt2YXIgaDA9aHQoKGtfMSxwMCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQjJlKHQpe3JldHVybiB0eXBlb2YgdD4idSJ8fHQ9PT1udWxsfWZ1bmN0aW9uIENBdCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbH1mdW5jdGlvbiBfQXQodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpCMmUodCk/W106W3RdfWZ1bmN0aW9uIFRBdCh0LGUpe3ZhciBhLGkscixzO2lmKGUpZm9yKHM9T2JqZWN0LmtleXMoZSksYT0wLGk9cy5sZW5ndGg7YTxpO2ErPTEpcj1zW2FdLHRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBMQXQodCxlKXt2YXIgYT0iIixpO2ZvcihpPTA7aTxlO2krPTEpYSs9dDtyZXR1cm4gYX1mdW5jdGlvbiAkQXQodCl7cmV0dXJuIHQ9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL3R9cDAuZXhwb3J0cy5pc05vdGhpbmc9QjJlLHAwLmV4cG9ydHMuaXNPYmplY3Q9Q0F0LHAwLmV4cG9ydHMudG9BcnJheT1fQXQscDAuZXhwb3J0cy5yZXBlYXQ9TEF0LHAwLmV4cG9ydHMuaXNOZWdhdGl2ZVplcm89JEF0LHAwLmV4cG9ydHMuZXh0ZW5kPVRBdH0pO3ZhciBfMz1odCgoU18xLEgyZSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gJDYodCxlKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249dCx0aGlzLm1hcms9ZSx0aGlzLm1lc3NhZ2U9KHRoaXMucmVhc29ufHwiKHVua25vd24gcmVhc29uKSIpKyh0aGlzLm1hcms/IiAiK3RoaXMubWFyay50b1N0cmluZygpOiIiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t8fCIifSQ2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksJDYucHJvdG90eXBlLmNvbnN0cnVjdG9yPSQ2LCQ2LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgYT10aGlzLm5hbWUrIjogIjtyZXR1cm4gYSs9dGhpcy5yZWFzb258fCIodW5rbm93biByZWFzb24pIiwhZSYmdGhpcy5tYXJrJiYoYSs9IiAiK3RoaXMubWFyay50b1N0cmluZygpKSxhfSxIMmUuZXhwb3J0cz0kNn0pO3ZhciBqMmU9aHQoKENfMSxWMmUpPT57InVzZSBzdHJpY3QiO3ZhciBxMmU9aDAoKTtmdW5jdGlvbiBQXyh0LGUsYSxpLHIpe3RoaXMubmFtZT10LHRoaXMuYnVmZmVyPWUsdGhpcy5wb3NpdGlvbj1hLHRoaXMubGluZT1pLHRoaXMuY29sdW1uPXJ9UF8ucHJvdG90eXBlLmdldFNuaXBwZXQ9ZnVuY3Rpb24oZSxhKXt2YXIgaSxyLHMsbixvO2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gbnVsbDtmb3IoZT1lfHw0LGE9YXx8NzUsaT0iIixyPXRoaXMucG9zaXRpb247cj4wJiZgXDBccgpceDg1XHUyMDI4XHUyMDI5YC5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChyLTEpKT09PS0xOylpZihyLT0xLHRoaXMucG9zaXRpb24tcj5hLzItMSl7aT0iIC4uLiAiLHIrPTU7YnJlYWt9Zm9yKHM9IiIsbj10aGlzLnBvc2l0aW9uO248dGhpcy5idWZmZXIubGVuZ3RoJiZgXDBccgpceDg1XHUyMDI4XHUyMDI5YC5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChuKSk9PT0tMTspaWYobis9MSxuLXRoaXMucG9zaXRpb24+YS8yLTEpe3M9IiAuLi4gIixuLT01O2JyZWFrfXJldHVybiBvPXRoaXMuYnVmZmVyLnNsaWNlKHIsbikscTJlLnJlcGVhdCgiICIsZSkraStvK3MrYApgK3EyZS5yZXBlYXQoIiAiLGUrdGhpcy5wb3NpdGlvbi1yK2kubGVuZ3RoKSsiXiJ9LFBfLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgYSxpPSIiO3JldHVybiB0aGlzLm5hbWUmJihpKz0naW4gIicrdGhpcy5uYW1lKyciICcpLGkrPSJhdCBsaW5lICIrKHRoaXMubGluZSsxKSsiLCBjb2x1bW4gIisodGhpcy5jb2x1bW4rMSksZXx8KGE9dGhpcy5nZXRTbmlwcGV0KCksYSYmKGkrPWA6CmArYSkpLGl9LFYyZS5leHBvcnRzPVBffSk7dmFyIGEyPWh0KChfXzEsVzJlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVTJlPV8zKCksQUF0PVsia2luZCIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sREF0PVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07ZnVuY3Rpb24gRUF0KHQpe3ZhciBlPXt9O3JldHVybiB0IT09bnVsbCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihhKXt0W2FdLmZvckVhY2goZnVuY3Rpb24oaSl7ZVtTdHJpbmcoaSldPWF9KX0pLGV9ZnVuY3Rpb24gUEF0KHQsZSl7aWYoZT1lfHx7fSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKEFBdC5pbmRleE9mKGEpPT09LTEpdGhyb3cgbmV3IFUyZSgnVW5rbm93biBvcHRpb24gIicrYSsnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJyt0KyciIFlBTUwgdHlwZS4nKX0pLHRoaXMudGFnPXQsdGhpcy5raW5kPWUua2luZHx8bnVsbCx0aGlzLnJlc29sdmU9ZS5yZXNvbHZlfHxmdW5jdGlvbigpe3JldHVybiEwfSx0aGlzLmNvbnN0cnVjdD1lLmNvbnN0cnVjdHx8ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHRoaXMuaW5zdGFuY2VPZj1lLmluc3RhbmNlT2Z8fG51bGwsdGhpcy5wcmVkaWNhdGU9ZS5wcmVkaWNhdGV8fG51bGwsdGhpcy5yZXByZXNlbnQ9ZS5yZXByZXNlbnR8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9ZS5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5zdHlsZUFsaWFzZXM9RUF0KGUuc3R5bGVBbGlhc2VzfHxudWxsKSxEQXQuaW5kZXhPZih0aGlzLmtpbmQpPT09LTEpdGhyb3cgbmV3IFUyZSgnVW5rbm93biBraW5kICInK3RoaXMua2luZCsnIiBpcyBzcGVjaWZpZWQgZm9yICInK3QrJyIgWUFNTCB0eXBlLicpfVcyZS5leHBvcnRzPVBBdH0pO3ZhciB1MD1odCgoVF8xLFkyZSk9PnsidXNlIHN0cmljdCI7dmFyIEcyZT1oMCgpLG85PV8zKCksSUF0PWEyKCk7ZnVuY3Rpb24gSV8odCxlLGEpe3ZhciBpPVtdO3JldHVybiB0LmluY2x1ZGUuZm9yRWFjaChmdW5jdGlvbihyKXthPUlfKHIsZSxhKX0pLHRbZV0uZm9yRWFjaChmdW5jdGlvbihyKXthLmZvckVhY2goZnVuY3Rpb24ocyxuKXtzLnRhZz09PXIudGFnJiZzLmtpbmQ9PT1yLmtpbmQmJmkucHVzaChuKX0pLGEucHVzaChyKX0pLGEuZmlsdGVyKGZ1bmN0aW9uKHIscyl7cmV0dXJuIGkuaW5kZXhPZihzKT09PS0xfSl9ZnVuY3Rpb24gTkF0KCl7dmFyIHQ9e3NjYWxhcjp7fSxzZXF1ZW5jZTp7fSxtYXBwaW5nOnt9LGZhbGxiYWNrOnt9fSxlLGE7ZnVuY3Rpb24gaShyKXt0W3Iua2luZF1bci50YWddPXQuZmFsbGJhY2tbci50YWddPXJ9Zm9yKGU9MCxhPWFyZ3VtZW50cy5sZW5ndGg7ZTxhO2UrPTEpYXJndW1lbnRzW2VdLmZvckVhY2goaSk7cmV0dXJuIHR9ZnVuY3Rpb24gVDModCl7dGhpcy5pbmNsdWRlPXQuaW5jbHVkZXx8W10sdGhpcy5pbXBsaWNpdD10LmltcGxpY2l0fHxbXSx0aGlzLmV4cGxpY2l0PXQuZXhwbGljaXR8fFtdLHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmxvYWRLaW5kJiZlLmxvYWRLaW5kIT09InNjYWxhciIpdGhyb3cgbmV3IG85KCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKX0pLHRoaXMuY29tcGlsZWRJbXBsaWNpdD1JXyh0aGlzLCJpbXBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRFeHBsaWNpdD1JXyh0aGlzLCJleHBsaWNpdCIsW10pLHRoaXMuY29tcGlsZWRUeXBlTWFwPU5BdCh0aGlzLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5jb21waWxlZEV4cGxpY2l0KX1UMy5ERUZBVUxUPW51bGwsVDMuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGUsYTtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmU9VDMuREVGQVVMVCxhPWFyZ3VtZW50c1swXTticmVhaztjYXNlIDI6ZT1hcmd1bWVudHNbMF0sYT1hcmd1bWVudHNbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbzkoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24iKX1pZihlPUcyZS50b0FycmF5KGUpLGE9RzJlLnRvQXJyYXkoYSksIWUuZXZlcnkoZnVuY3Rpb24oaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBUM30pKXRocm93IG5ldyBvOSgiU3BlY2lmaWVkIGxpc3Qgb2Ygc3VwZXIgc2NoZW1hcyAob3IgYSBzaW5nbGUgU2NoZW1hIG9iamVjdCkgY29udGFpbnMgYSBub24tU2NoZW1hIG9iamVjdC4iKTtpZighYS5ldmVyeShmdW5jdGlvbihpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIElBdH0pKXRocm93IG5ldyBvOSgiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO3JldHVybiBuZXcgVDMoe2luY2x1ZGU6ZSxleHBsaWNpdDphfSl9LFkyZS5leHBvcnRzPVQzfSk7dmFyIFgyZT1odCgoTF8xLFoyZSk9PnsidXNlIHN0cmljdCI7dmFyIEZBdD1hMigpO1oyZS5leHBvcnRzPW5ldyBGQXQoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OiIifX0pfSk7dmFyIFEyZT1odCgoJF8xLEsyZSk9PnsidXNlIHN0cmljdCI7dmFyIE9BdD1hMigpO0syZS5leHBvcnRzPW5ldyBPQXQoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6W119fSl9KTt2YXIgZWFlPWh0KChBXzEsSjJlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUkF0PWEyKCk7SjJlLmV4cG9ydHM9bmV3IFJBdCgidGFnOnlhbWwub3JnLDIwMDI6bWFwIix7a2luZDoibWFwcGluZyIsY29uc3RydWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90Ont9fX0pfSk7dmFyIGw5PWh0KChEXzEsdGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQkF0PXUwKCk7dGFlLmV4cG9ydHM9bmV3IEJBdCh7ZXhwbGljaXQ6W1gyZSgpLFEyZSgpLGVhZSgpXX0pfSk7dmFyIGlhZT1odCgoRV8xLGFhZSk9PnsidXNlIHN0cmljdCI7dmFyIEhBdD1hMigpO2Z1bmN0aW9uIHFBdCh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT09PTEmJnQ9PT0ifiJ8fGU9PT00JiYodD09PSJudWxsInx8dD09PSJOdWxsInx8dD09PSJOVUxMIil9ZnVuY3Rpb24gVkF0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gakF0KHQpe3JldHVybiB0PT09bnVsbH1hYWUuZXhwb3J0cz1uZXcgSEF0KCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOnFBdCxjb25zdHJ1Y3Q6VkF0LHByZWRpY2F0ZTpqQXQscmVwcmVzZW50OntjYW5vbmljYWw6ZnVuY3Rpb24oKXtyZXR1cm4ifiJ9LGxvd2VyY2FzZTpmdW5jdGlvbigpe3JldHVybiJudWxsIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIk5VTEwifSxjYW1lbGNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTnVsbCJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0pO3ZhciBzYWU9aHQoKFBfMSxyYWUpPT57InVzZSBzdHJpY3QiO3ZhciBVQXQ9YTIoKTtmdW5jdGlvbiBXQXQodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT00JiYodD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIil8fGU9PT01JiYodD09PSJmYWxzZSJ8fHQ9PT0iRmFsc2UifHx0PT09IkZBTFNFIil9ZnVuY3Rpb24gR0F0KHQpe3JldHVybiB0PT09InRydWUifHx0PT09IlRydWUifHx0PT09IlRSVUUifWZ1bmN0aW9uIFlBdCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgQm9vbGVhbl0ifXJhZS5leHBvcnRzPW5ldyBVQXQoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6V0F0LGNvbnN0cnVjdDpHQXQscHJlZGljYXRlOllBdCxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbih0KXtyZXR1cm4gdD8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKHQpe3JldHVybiB0PyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0pO3ZhciBvYWU9aHQoKElfMSxuYWUpPT57InVzZSBzdHJpY3QiO3ZhciBaQXQ9aDAoKSxYQXQ9YTIoKTtmdW5jdGlvbiBLQXQodCl7cmV0dXJuIDQ4PD10JiZ0PD01N3x8NjU8PXQmJnQ8PTcwfHw5Nzw9dCYmdDw9MTAyfWZ1bmN0aW9uIFFBdCh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU1fWZ1bmN0aW9uIEpBdCh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fWZ1bmN0aW9uIGVEdCh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZT10Lmxlbmd0aCxhPTAsaT0hMSxyO2lmKCFlKXJldHVybiExO2lmKHI9dFthXSwocj09PSItInx8cj09PSIrIikmJihyPXRbKythXSkscj09PSIwIil7aWYoYSsxPT09ZSlyZXR1cm4hMDtpZihyPXRbKythXSxyPT09ImIiKXtmb3IoYSsrO2E8ZTthKyspaWYocj10W2FdLHIhPT0iXyIpe2lmKHIhPT0iMCImJnIhPT0iMSIpcmV0dXJuITE7aT0hMH1yZXR1cm4gaSYmciE9PSJfIn1pZihyPT09IngiKXtmb3IoYSsrO2E8ZTthKyspaWYocj10W2FdLHIhPT0iXyIpe2lmKCFLQXQodC5jaGFyQ29kZUF0KGEpKSlyZXR1cm4hMTtpPSEwfXJldHVybiBpJiZyIT09Il8ifWZvcig7YTxlO2ErKylpZihyPXRbYV0sciE9PSJfIil7aWYoIVFBdCh0LmNoYXJDb2RlQXQoYSkpKXJldHVybiExO2k9ITB9cmV0dXJuIGkmJnIhPT0iXyJ9aWYocj09PSJfIilyZXR1cm4hMTtmb3IoO2E8ZTthKyspaWYocj10W2FdLHIhPT0iXyIpe2lmKHI9PT0iOiIpYnJlYWs7aWYoIUpBdCh0LmNoYXJDb2RlQXQoYSkpKXJldHVybiExO2k9ITB9cmV0dXJuIWl8fHI9PT0iXyI/ITE6ciE9PSI6Ij8hMDovXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QodC5zbGljZShhKSl9ZnVuY3Rpb24gdER0KHQpe3ZhciBlPXQsYT0xLGkscixzPVtdO3JldHVybiBlLmluZGV4T2YoIl8iKSE9PS0xJiYoZT1lLnJlcGxhY2UoL18vZywiIikpLGk9ZVswXSwoaT09PSItInx8aT09PSIrIikmJihpPT09Ii0iJiYoYT0tMSksZT1lLnNsaWNlKDEpLGk9ZVswXSksZT09PSIwIj8wOmk9PT0iMCI/ZVsxXT09PSJiIj9hKnBhcnNlSW50KGUuc2xpY2UoMiksMik6ZVsxXT09PSJ4Ij9hKnBhcnNlSW50KGUsMTYpOmEqcGFyc2VJbnQoZSw4KTplLmluZGV4T2YoIjoiKSE9PS0xPyhlLnNwbGl0KCI6IikuZm9yRWFjaChmdW5jdGlvbihuKXtzLnVuc2hpZnQocGFyc2VJbnQobiwxMCkpfSksZT0wLHI9MSxzLmZvckVhY2goZnVuY3Rpb24obil7ZSs9bipyLHIqPTYwfSksYSplKTphKnBhcnNlSW50KGUsMTApfWZ1bmN0aW9uIGFEdCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJnQlMT09PTAmJiFaQXQuaXNOZWdhdGl2ZVplcm8odCl9bmFlLmV4cG9ydHM9bmV3IFhBdCgidGFnOnlhbWwub3JnLDIwMDI6aW50Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmVEdCxjb25zdHJ1Y3Q6dER0LHByZWRpY2F0ZTphRHQscmVwcmVzZW50OntiaW5hcnk6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTA/IjBiIit0LnRvU3RyaW5nKDIpOiItMGIiK3QudG9TdHJpbmcoMikuc2xpY2UoMSl9LG9jdGFsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwIit0LnRvU3RyaW5nKDgpOiItMCIrdC50b1N0cmluZyg4KS5zbGljZSgxKX0sZGVjaW1hbDpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIweCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pfSk7dmFyIGRhZT1odCgoTl8xLGNhZSk9PnsidXNlIHN0cmljdCI7dmFyIGxhZT1oMCgpLGlEdD1hMigpLHJEdD1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzowfFsxLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcLlswLTlfXSp8Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiKTtmdW5jdGlvbiBzRHQodCl7cmV0dXJuISh0PT09bnVsbHx8IXJEdC50ZXN0KHQpfHx0W3QubGVuZ3RoLTFdPT09Il8iKX1mdW5jdGlvbiBuRHQodCl7dmFyIGUsYSxpLHI7cmV0dXJuIGU9dC5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCksYT1lWzBdPT09Ii0iPy0xOjEscj1bXSwiKy0iLmluZGV4T2YoZVswXSk+PTAmJihlPWUuc2xpY2UoMSkpLGU9PT0iLmluZiI/YT09PTE/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWTplPT09Ii5uYW4iP05hTjplLmluZGV4T2YoIjoiKT49MD8oZS5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24ocyl7ci51bnNoaWZ0KHBhcnNlRmxvYXQocywxMCkpfSksZT0wLGk9MSxyLmZvckVhY2goZnVuY3Rpb24ocyl7ZSs9cyppLGkqPTYwfSksYSplKTphKnBhcnNlRmxvYXQoZSwxMCl9dmFyIG9EdD0vXlstK10/WzAtOV0rZS87ZnVuY3Rpb24gbER0KHQsZSl7dmFyIGE7aWYoaXNOYU4odCkpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLm5hbiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuTkFOIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5OYU4ifWVsc2UgaWYoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIuaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLkluZiJ9ZWxzZSBpZihOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT10KXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi0uaW5mIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi0uSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi0uSW5mIn1lbHNlIGlmKGxhZS5pc05lZ2F0aXZlWmVybyh0KSlyZXR1cm4iLTAuMCI7cmV0dXJuIGE9dC50b1N0cmluZygxMCksb0R0LnRlc3QoYSk/YS5yZXBsYWNlKCJlIiwiLmUiKTphfWZ1bmN0aW9uIGNEdCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJih0JTEhPT0wfHxsYWUuaXNOZWdhdGl2ZVplcm8odCkpfWNhZS5leHBvcnRzPW5ldyBpRHQoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOnNEdCxjb25zdHJ1Y3Q6bkR0LHByZWRpY2F0ZTpjRHQscmVwcmVzZW50OmxEdCxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KX0pO3ZhciBOXz1odCgoRl8xLHBhZSk9PnsidXNlIHN0cmljdCI7dmFyIGREdD11MCgpO3BhZS5leHBvcnRzPW5ldyBkRHQoe2luY2x1ZGU6W2w5KCldLGltcGxpY2l0OltpYWUoKSxzYWUoKSxvYWUoKSxkYWUoKV19KX0pO3ZhciBGXz1odCgoT18xLGhhZSk9PnsidXNlIHN0cmljdCI7dmFyIHBEdD11MCgpO2hhZS5leHBvcnRzPW5ldyBwRHQoe2luY2x1ZGU6W05fKCldfSl9KTt2YXIgZ2FlPWh0KChSXzEsbWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaER0PWEyKCksdWFlPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIiksZmFlPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIik7ZnVuY3Rpb24gdUR0KHQpe3JldHVybiB0PT09bnVsbD8hMTp1YWUuZXhlYyh0KSE9PW51bGx8fGZhZS5leGVjKHQpIT09bnVsbH1mdW5jdGlvbiBmRHQodCl7dmFyIGUsYSxpLHIscyxuLG8sZD0wLGM9bnVsbCxwLGwsZjtpZihlPXVhZS5leGVjKHQpLGU9PT1udWxsJiYoZT1mYWUuZXhlYyh0KSksZT09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJEYXRlIHJlc29sdmUgZXJyb3IiKTtpZihhPStlWzFdLGk9K2VbMl0tMSxyPStlWzNdLCFlWzRdKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhhLGkscikpO2lmKHM9K2VbNF0sbj0rZVs1XSxvPStlWzZdLGVbN10pe2ZvcihkPWVbN10uc2xpY2UoMCwzKTtkLmxlbmd0aDwzOylkKz0iMCI7ZD0rZH1yZXR1cm4gZVs5XSYmKHA9K2VbMTBdLGw9KyhlWzExXXx8MCksYz0ocCo2MCtsKSo2ZTQsZVs5XT09PSItIiYmKGM9LWMpKSxmPW5ldyBEYXRlKERhdGUuVVRDKGEsaSxyLHMsbixvLGQpKSxjJiZmLnNldFRpbWUoZi5nZXRUaW1lKCktYyksZn1mdW5jdGlvbiBtRHQodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1tYWUuZXhwb3J0cz1uZXcgaER0KCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6dUR0LGNvbnN0cnVjdDpmRHQsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDptRHR9KX0pO3ZhciB2YWU9aHQoKEJfMSxiYWUpPT57InVzZSBzdHJpY3QiO3ZhciBnRHQ9YTIoKTtmdW5jdGlvbiBiRHQodCl7cmV0dXJuIHQ9PT0iPDwifHx0PT09bnVsbH1iYWUuZXhwb3J0cz1uZXcgZ0R0KCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpiRHR9KX0pO3ZhciB3YWU9aHQoKEhfMSx4YWUpPT57InVzZSBzdHJpY3QiO3ZhciBmMDt0cnl7eWFlPWhkLGYwPXlhZSgiYnVmZmVyIikuQnVmZmVyfWNhdGNoe312YXIgdkR0PWEyKCksT189YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89ClxyYDtmdW5jdGlvbiB5RHQodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGUsYSxpPTAscj10Lmxlbmd0aCxzPU9fO2ZvcihhPTA7YTxyO2ErKylpZihlPXMuaW5kZXhPZih0LmNoYXJBdChhKSksIShlPjY0KSl7aWYoZTwwKXJldHVybiExO2krPTZ9cmV0dXJuIGklOD09PTB9ZnVuY3Rpb24geER0KHQpe3ZhciBlLGEsaT10LnJlcGxhY2UoL1tcclxuPV0vZywiIikscj1pLmxlbmd0aCxzPU9fLG49MCxvPVtdO2ZvcihlPTA7ZTxyO2UrKyllJTQ9PT0wJiZlJiYoby5wdXNoKG4+PjE2JjI1NSksby5wdXNoKG4+PjgmMjU1KSxvLnB1c2gobiYyNTUpKSxuPW48PDZ8cy5pbmRleE9mKGkuY2hhckF0KGUpKTtyZXR1cm4gYT1yJTQqNixhPT09MD8oby5wdXNoKG4+PjE2JjI1NSksby5wdXNoKG4+PjgmMjU1KSxvLnB1c2gobiYyNTUpKTphPT09MTg/KG8ucHVzaChuPj4xMCYyNTUpLG8ucHVzaChuPj4yJjI1NSkpOmE9PT0xMiYmby5wdXNoKG4+PjQmMjU1KSxmMD9mMC5mcm9tP2YwLmZyb20obyk6bmV3IGYwKG8pOm99ZnVuY3Rpb24gd0R0KHQpe3ZhciBlPSIiLGE9MCxpLHIscz10Lmxlbmd0aCxuPU9fO2ZvcihpPTA7aTxzO2krKylpJTM9PT0wJiZpJiYoZSs9blthPj4xOCY2M10sZSs9blthPj4xMiY2M10sZSs9blthPj42JjYzXSxlKz1uW2EmNjNdKSxhPShhPDw4KSt0W2ldO3JldHVybiByPXMlMyxyPT09MD8oZSs9blthPj4xOCY2M10sZSs9blthPj4xMiY2M10sZSs9blthPj42JjYzXSxlKz1uW2EmNjNdKTpyPT09Mj8oZSs9blthPj4xMCY2M10sZSs9blthPj40JjYzXSxlKz1uW2E8PDImNjNdLGUrPW5bNjRdKTpyPT09MSYmKGUrPW5bYT4+MiY2M10sZSs9blthPDw0JjYzXSxlKz1uWzY0XSxlKz1uWzY0XSksZX1mdW5jdGlvbiBNRHQodCl7cmV0dXJuIGYwJiZmMC5pc0J1ZmZlcih0KX14YWUuZXhwb3J0cz1uZXcgdkR0KCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6eUR0LGNvbnN0cnVjdDp4RHQscHJlZGljYXRlOk1EdCxyZXByZXNlbnQ6d0R0fSk7dmFyIHlhZX0pO3ZhciB6YWU9aHQoKFZfMSxNYWUpPT57InVzZSBzdHJpY3QiO3ZhciB6RHQ9YTIoKSxrRHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxTRHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBDRHQodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGU9W10sYSxpLHIscyxuLG89dDtmb3IoYT0wLGk9by5sZW5ndGg7YTxpO2ErPTEpe2lmKHI9b1thXSxuPSExLFNEdC5jYWxsKHIpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7Zm9yKHMgaW4gcilpZihrRHQuY2FsbChyLHMpKWlmKCFuKW49ITA7ZWxzZSByZXR1cm4hMTtpZighbilyZXR1cm4hMTtpZihlLmluZGV4T2Yocyk9PT0tMSllLnB1c2gocyk7ZWxzZSByZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBfRHQodCl7cmV0dXJuIHQhPT1udWxsP3Q6W119TWFlLmV4cG9ydHM9bmV3IHpEdCgidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOkNEdCxjb25zdHJ1Y3Q6X0R0fSl9KTt2YXIgU2FlPWh0KChqXzEsa2FlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVER0PWEyKCksTER0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gJER0KHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLGEsaSxyLHMsbj10O2ZvcihzPW5ldyBBcnJheShuLmxlbmd0aCksZT0wLGE9bi5sZW5ndGg7ZTxhO2UrPTEpe2lmKGk9bltlXSxMRHQuY2FsbChpKSE9PSJbb2JqZWN0IE9iamVjdF0ifHwocj1PYmplY3Qua2V5cyhpKSxyLmxlbmd0aCE9PTEpKXJldHVybiExO3NbZV09W3JbMF0saVtyWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gQUR0KHQpe2lmKHQ9PT1udWxsKXJldHVybltdO3ZhciBlLGEsaSxyLHMsbj10O2ZvcihzPW5ldyBBcnJheShuLmxlbmd0aCksZT0wLGE9bi5sZW5ndGg7ZTxhO2UrPTEpaT1uW2VdLHI9T2JqZWN0LmtleXMoaSksc1tlXT1bclswXSxpW3JbMF1dXTtyZXR1cm4gc31rYWUuZXhwb3J0cz1uZXcgVER0KCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlycyIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOiREdCxjb25zdHJ1Y3Q6QUR0fSl9KTt2YXIgX2FlPWh0KChVXzEsQ2FlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRER0PWEyKCksRUR0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gUER0KHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLGE9dDtmb3IoZSBpbiBhKWlmKEVEdC5jYWxsKGEsZSkmJmFbZV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIElEdCh0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX1DYWUuZXhwb3J0cz1uZXcgRER0KCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLHtraW5kOiJtYXBwaW5nIixyZXNvbHZlOlBEdCxjb25zdHJ1Y3Q6SUR0fSl9KTt2YXIgTDM9aHQoKFdfMSxUYWUpPT57InVzZSBzdHJpY3QiO3ZhciBORHQ9dTAoKTtUYWUuZXhwb3J0cz1uZXcgTkR0KHtpbmNsdWRlOltGXygpXSxpbXBsaWNpdDpbZ2FlKCksdmFlKCldLGV4cGxpY2l0Olt3YWUoKSx6YWUoKSxTYWUoKSxfYWUoKV19KX0pO3ZhciAkYWU9aHQoKEdfMSxMYWUpPT57InVzZSBzdHJpY3QiO3ZhciBGRHQ9YTIoKTtmdW5jdGlvbiBPRHQoKXtyZXR1cm4hMH1mdW5jdGlvbiBSRHQoKXt9ZnVuY3Rpb24gQkR0KCl7cmV0dXJuIiJ9ZnVuY3Rpb24gSER0KHQpe3JldHVybiB0eXBlb2YgdD4idSJ9TGFlLmV4cG9ydHM9bmV3IEZEdCgidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIix7a2luZDoic2NhbGFyIixyZXNvbHZlOk9EdCxjb25zdHJ1Y3Q6UkR0LHByZWRpY2F0ZTpIRHQscmVwcmVzZW50OkJEdH0pfSk7dmFyIERhZT1odCgoWV8xLEFhZSk9PnsidXNlIHN0cmljdCI7dmFyIHFEdD1hMigpO2Z1bmN0aW9uIFZEdCh0KXtpZih0PT09bnVsbHx8dC5sZW5ndGg9PT0wKXJldHVybiExO3ZhciBlPXQsYT0vXC8oW2dpbV0qKSQvLmV4ZWModCksaT0iIjtyZXR1cm4hKGVbMF09PT0iLyImJihhJiYoaT1hWzFdKSxpLmxlbmd0aD4zfHxlW2UubGVuZ3RoLWkubGVuZ3RoLTFdIT09Ii8iKSl9ZnVuY3Rpb24gakR0KHQpe3ZhciBlPXQsYT0vXC8oW2dpbV0qKSQvLmV4ZWModCksaT0iIjtyZXR1cm4gZVswXT09PSIvIiYmKGEmJihpPWFbMV0pLGU9ZS5zbGljZSgxLGUubGVuZ3RoLWkubGVuZ3RoLTEpKSxuZXcgUmVnRXhwKGUsaSl9ZnVuY3Rpb24gVUR0KHQpe3ZhciBlPSIvIit0LnNvdXJjZSsiLyI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lm11bHRpbGluZSYmKGUrPSJtIiksdC5pZ25vcmVDYXNlJiYoZSs9ImkiKSxlfWZ1bmN0aW9uIFdEdCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgUmVnRXhwXSJ9QWFlLmV4cG9ydHM9bmV3IHFEdCgidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwIix7a2luZDoic2NhbGFyIixyZXNvbHZlOlZEdCxjb25zdHJ1Y3Q6akR0LHByZWRpY2F0ZTpXRHQscmVwcmVzZW50OlVEdH0pfSk7dmFyIElhZT1odCgoWl8xLFBhZSk9PnsidXNlIHN0cmljdCI7dmFyIGM5O3RyeXtFYWU9aGQsYzk9RWFlKCJlc3ByaW1hIil9Y2F0Y2h7dHlwZW9mIHdpbmRvdzwidSImJihjOT13aW5kb3cuZXNwcmltYSl9dmFyIEdEdD1hMigpO2Z1bmN0aW9uIFlEdCh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt0cnl7dmFyIGU9IigiK3QrIikiLGE9YzkucGFyc2UoZSx7cmFuZ2U6ITB9KTtyZXR1cm4hKGEudHlwZSE9PSJQcm9ncmFtInx8YS5ib2R5Lmxlbmd0aCE9PTF8fGEuYm9keVswXS50eXBlIT09IkV4cHJlc3Npb25TdGF0ZW1lbnQifHxhLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlIT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiYmYS5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSE9PSJGdW5jdGlvbkV4cHJlc3Npb24iKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gWkR0KHQpe3ZhciBlPSIoIit0KyIpIixhPWM5LnBhcnNlKGUse3JhbmdlOiEwfSksaT1bXSxyO2lmKGEudHlwZSE9PSJQcm9ncmFtInx8YS5ib2R5Lmxlbmd0aCE9PTF8fGEuYm9keVswXS50eXBlIT09IkV4cHJlc3Npb25TdGF0ZW1lbnQifHxhLmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlIT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiYmYS5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSE9PSJGdW5jdGlvbkV4cHJlc3Npb24iKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24iKTtyZXR1cm4gYS5ib2R5WzBdLmV4cHJlc3Npb24ucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocyl7aS5wdXNoKHMubmFtZSl9KSxyPWEuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2UsYS5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS50eXBlPT09IkJsb2NrU3RhdGVtZW50Ij9uZXcgRnVuY3Rpb24oaSxlLnNsaWNlKHJbMF0rMSxyWzFdLTEpKTpuZXcgRnVuY3Rpb24oaSwicmV0dXJuICIrZS5zbGljZShyWzBdLHJbMV0pKX1mdW5jdGlvbiBYRHQodCl7cmV0dXJuIHQudG9TdHJpbmcoKX1mdW5jdGlvbiBLRHQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9UGFlLmV4cG9ydHM9bmV3IEdEdCgidGFnOnlhbWwub3JnLDIwMDI6anMvZnVuY3Rpb24iLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6WUR0LGNvbnN0cnVjdDpaRHQscHJlZGljYXRlOktEdCxyZXByZXNlbnQ6WER0fSk7dmFyIEVhZX0pO3ZhciBBNj1odCgoS18xLEZhZSk9PnsidXNlIHN0cmljdCI7dmFyIE5hZT11MCgpO0ZhZS5leHBvcnRzPU5hZS5ERUZBVUxUPW5ldyBOYWUoe2luY2x1ZGU6W0wzKCldLGV4cGxpY2l0OlskYWUoKSxEYWUoKSxJYWUoKV19KX0pO3ZhciBpaWU9aHQoKFFfMSxENik9PnsidXNlIHN0cmljdCI7dmFyIHdzPWgwKCksT2FlPV8zKCksUUR0PWoyZSgpLFJhZT1MMygpLEpEdD1BNigpLE9uPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZDk9MSxCYWU9MixIYWU9MyxwOT00LFJfPTEsZUV0PTIscWFlPTMsdEV0PS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sYUV0PS9bXHg4NVx1MjAyOFx1MjAyOV0vLGlFdD0vWyxcW1xdXHtcfV0vLFZhZT0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksamFlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7ZnVuY3Rpb24gVWFlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gRHIodCl7cmV0dXJuIHQ9PT0xMHx8dD09PTEzfWZ1bmN0aW9uIG0wKHQpe3JldHVybiB0PT09OXx8dD09PTMyfWZ1bmN0aW9uIExhKHQpe3JldHVybiB0PT09OXx8dD09PTMyfHx0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiAkMyh0KXtyZXR1cm4gdD09PTQ0fHx0PT09OTF8fHQ9PT05M3x8dD09PTEyM3x8dD09PTEyNX1mdW5jdGlvbiByRXQodCl7dmFyIGU7cmV0dXJuIDQ4PD10JiZ0PD01Nz90LTQ4OihlPXR8MzIsOTc8PWUmJmU8PTEwMj9lLTk3KzEwOi0xKX1mdW5jdGlvbiBzRXQodCl7cmV0dXJuIHQ9PT0xMjA/Mjp0PT09MTE3PzQ6dD09PTg1Pzg6MH1mdW5jdGlvbiBuRXQodCl7cmV0dXJuIDQ4PD10JiZ0PD01Nz90LTQ4Oi0xfWZ1bmN0aW9uIFdhZSh0KXtyZXR1cm4gdD09PTQ4PyJcMCI6dD09PTk3PyJceDA3Ijp0PT09OTg/IlxiIjp0PT09MTE2fHx0PT09OT8iCSI6dD09PTExMD9gCmA6dD09PTExOD8iXHYiOnQ9PT0xMDI/IlxmIjp0PT09MTE0PyJcciI6dD09PTEwMT8iXHgxQiI6dD09PTMyPyIgIjp0PT09MzQ/JyInOnQ9PT00Nz8iLyI6dD09PTkyPyJcXCI6dD09PTc4PyJceDg1Ijp0PT09OTU/Ilx4QTAiOnQ9PT03Nj8iXHUyMDI4Ijp0PT09ODA/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gb0V0KHQpe3JldHVybiB0PD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOlN0cmluZy5mcm9tQ2hhckNvZGUoKHQtNjU1MzY+PjEwKSs1NTI5NiwodC02NTUzNiYxMDIzKSs1NjMyMCl9ZnVuY3Rpb24gR2FlKHQsZSxhKXtlPT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6YX0pOnRbZV09YX12YXIgWWFlPW5ldyBBcnJheSgyNTYpLFphZT1uZXcgQXJyYXkoMjU2KTtmb3IoZzA9MDtnMDwyNTY7ZzArKylZYWVbZzBdPVdhZShnMCk/MTowLFphZVtnMF09V2FlKGcwKTtmdW5jdGlvbiBsRXQodCxlKXt0aGlzLmlucHV0PXQsdGhpcy5maWxlbmFtZT1lLmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPWUuc2NoZW1hfHxKRHQsdGhpcy5vbldhcm5pbmc9ZS5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9ZS5sZWdhY3l8fCExLHRoaXMuanNvbj1lLmpzb258fCExLHRoaXMubGlzdGVuZXI9ZS5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZG9jdW1lbnRzPVtdfWZ1bmN0aW9uIFhhZSh0LGUpe3JldHVybiBuZXcgT2FlKGUsbmV3IFFEdCh0LmZpbGVuYW1lLHQuaW5wdXQsdC5wb3NpdGlvbix0LmxpbmUsdC5wb3NpdGlvbi10LmxpbmVTdGFydCkpfWZ1bmN0aW9uIG50KHQsZSl7dGhyb3cgWGFlKHQsZSl9ZnVuY3Rpb24gaDkodCxlKXt0Lm9uV2FybmluZyYmdC5vbldhcm5pbmcuY2FsbChudWxsLFhhZSh0LGUpKX12YXIgS2FlPXtZQU1MOmZ1bmN0aW9uKGUsYSxpKXt2YXIgcixzLG47ZS52ZXJzaW9uIT09bnVsbCYmbnQoZSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIiksaS5sZW5ndGghPT0xJiZudChlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iikscj0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoaVswXSkscj09PW51bGwmJm50KGUsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIikscz1wYXJzZUludChyWzFdLDEwKSxuPXBhcnNlSW50KHJbMl0sMTApLHMhPT0xJiZudChlLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGUudmVyc2lvbj1pWzBdLGUuY2hlY2tMaW5lQnJlYWtzPW48MixuIT09MSYmbiE9PTImJmg5KGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sVEFHOmZ1bmN0aW9uKGUsYSxpKXt2YXIgcixzO2kubGVuZ3RoIT09MiYmbnQoZSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLHI9aVswXSxzPWlbMV0sVmFlLnRlc3Qocil8fG50KGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksT24uY2FsbChlLnRhZ01hcCxyKSYmbnQoZSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicrcisnIiB0YWcgaGFuZGxlJyksamFlLnRlc3Qocyl8fG50KGUsImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLGUudGFnTWFwW3JdPXN9fTtmdW5jdGlvbiBSbih0LGUsYSxpKXt2YXIgcixzLG4sbztpZihlPGEpe2lmKG89dC5pbnB1dC5zbGljZShlLGEpLGkpZm9yKHI9MCxzPW8ubGVuZ3RoO3I8cztyKz0xKW49by5jaGFyQ29kZUF0KHIpLG49PT05fHwzMjw9biYmbjw9MTExNDExMXx8bnQodCwiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTtlbHNlIHRFdC50ZXN0KG8pJiZudCh0LCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpO3QucmVzdWx0Kz1vfX1mdW5jdGlvbiBRYWUodCxlLGEsaSl7dmFyIHIscyxuLG87Zm9yKHdzLmlzT2JqZWN0KGEpfHxudCh0LCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLHI9T2JqZWN0LmtleXMoYSksbj0wLG89ci5sZW5ndGg7bjxvO24rPTEpcz1yW25dLE9uLmNhbGwoZSxzKXx8KEdhZShlLHMsYVtzXSksaVtzXT0hMCl9ZnVuY3Rpb24gQTModCxlLGEsaSxyLHMsbixvKXt2YXIgZCxjO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociksZD0wLGM9ci5sZW5ndGg7ZDxjO2QrPTEpQXJyYXkuaXNBcnJheShyW2RdKSYmbnQodCwibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpLHR5cGVvZiByPT0ib2JqZWN0IiYmVWFlKHJbZF0pPT09IltvYmplY3QgT2JqZWN0XSImJihyW2RdPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2Ygcj09Im9iamVjdCImJlVhZShyKT09PSJbb2JqZWN0IE9iamVjdF0iJiYocj0iW29iamVjdCBPYmplY3RdIikscj1TdHJpbmcociksZT09PW51bGwmJihlPXt9KSxpPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KHMpKWZvcihkPTAsYz1zLmxlbmd0aDtkPGM7ZCs9MSlRYWUodCxlLHNbZF0sYSk7ZWxzZSBRYWUodCxlLHMsYSk7ZWxzZSF0Lmpzb24mJiFPbi5jYWxsKGEscikmJk9uLmNhbGwoZSxyKSYmKHQubGluZT1ufHx0LmxpbmUsdC5wb3NpdGlvbj1vfHx0LnBvc2l0aW9uLG50KHQsImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSksR2FlKGUscixzKSxkZWxldGUgYVtyXTtyZXR1cm4gZX1mdW5jdGlvbiBCXyh0KXt2YXIgZTtlPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxlPT09MTA/dC5wb3NpdGlvbisrOmU9PT0xMz8odC5wb3NpdGlvbisrLHQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTEwJiZ0LnBvc2l0aW9uKyspOm50KHQsImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpLHQubGluZSs9MSx0LmxpbmVTdGFydD10LnBvc2l0aW9ufWZ1bmN0aW9uIFkxKHQsZSxhKXtmb3IodmFyIGk9MCxyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtyIT09MDspe2Zvcig7bTAocik7KXI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoZSYmcj09PTM1KWRvIHI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUociE9PTEwJiZyIT09MTMmJnIhPT0wKTtpZihEcihyKSlmb3IoQl8odCkscj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksaSsrLHQubGluZUluZGVudD0wO3I9PT0zMjspdC5saW5lSW5kZW50Kysscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtlbHNlIGJyZWFrfXJldHVybiBhIT09LTEmJmkhPT0wJiZ0LmxpbmVJbmRlbnQ8YSYmaDkodCwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksaX1mdW5jdGlvbiB1OSh0KXt2YXIgZT10LnBvc2l0aW9uLGE7cmV0dXJuIGE9dC5pbnB1dC5jaGFyQ29kZUF0KGUpLCEhKChhPT09NDV8fGE9PT00NikmJmE9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsxKSYmYT09PXQuaW5wdXQuY2hhckNvZGVBdChlKzIpJiYoZSs9MyxhPXQuaW5wdXQuY2hhckNvZGVBdChlKSxhPT09MHx8TGEoYSkpKX1mdW5jdGlvbiBIXyh0LGUpe2U9PT0xP3QucmVzdWx0Kz0iICI6ZT4xJiYodC5yZXN1bHQrPXdzLnJlcGVhdChgCmAsZS0xKSl9ZnVuY3Rpb24gY0V0KHQsZSxhKXt2YXIgaSxyLHMsbixvLGQsYyxwLGw9dC5raW5kLGY9dC5yZXN1bHQsZztpZihnPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxMYShnKXx8JDMoZyl8fGc9PT0zNXx8Zz09PTM4fHxnPT09NDJ8fGc9PT0zM3x8Zz09PTEyNHx8Zz09PTYyfHxnPT09Mzl8fGc9PT0zNHx8Zz09PTM3fHxnPT09NjR8fGc9PT05Nnx8KGc9PT02M3x8Zz09PTQ1KSYmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksTGEocil8fGEmJiQzKHIpKSlyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLHM9bj10LnBvc2l0aW9uLG89ITE7ZyE9PTA7KXtpZihnPT09NTgpe2lmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksTGEocil8fGEmJiQzKHIpKWJyZWFrfWVsc2UgaWYoZz09PTM1KXtpZihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uLTEpLExhKGkpKWJyZWFrfWVsc2V7aWYodC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZ1OSh0KXx8YSYmJDMoZykpYnJlYWs7aWYoRHIoZykpaWYoZD10LmxpbmUsYz10LmxpbmVTdGFydCxwPXQubGluZUluZGVudCxZMSh0LCExLC0xKSx0LmxpbmVJbmRlbnQ+PWUpe289ITAsZz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9ZWxzZXt0LnBvc2l0aW9uPW4sdC5saW5lPWQsdC5saW5lU3RhcnQ9Yyx0LmxpbmVJbmRlbnQ9cDticmVha319byYmKFJuKHQscyxuLCExKSxIXyh0LHQubGluZS1kKSxzPW49dC5wb3NpdGlvbixvPSExKSxtMChnKXx8KG49dC5wb3NpdGlvbisxKSxnPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pfXJldHVybiBSbih0LHMsbiwhMSksdC5yZXN1bHQ/ITA6KHQua2luZD1sLHQucmVzdWx0PWYsITEpfWZ1bmN0aW9uIGRFdCh0LGUpe3ZhciBhLGkscjtpZihhPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxhIT09MzkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKyssaT1yPXQucG9zaXRpb247KGE9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KWlmKGE9PT0zOSlpZihSbih0LGksdC5wb3NpdGlvbiwhMCksYT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxhPT09MzkpaT10LnBvc2l0aW9uLHQucG9zaXRpb24rKyxyPXQucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIERyKGEpPyhSbih0LGksciwhMCksSF8odCxZMSh0LCExLGUpKSxpPXI9dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZ1OSh0KT9udCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLHI9dC5wb3NpdGlvbik7bnQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIHBFdCh0LGUpe3ZhciBhLGkscixzLG4sbztpZihvPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxvIT09MzQpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKyssYT1pPXQucG9zaXRpb247KG89dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KXtpZihvPT09MzQpcmV0dXJuIFJuKHQsYSx0LnBvc2l0aW9uLCEwKSx0LnBvc2l0aW9uKyssITA7aWYobz09PTkyKXtpZihSbih0LGEsdC5wb3NpdGlvbiwhMCksbz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxEcihvKSlZMSh0LCExLGUpO2Vsc2UgaWYobzwyNTYmJllhZVtvXSl0LnJlc3VsdCs9WmFlW29dLHQucG9zaXRpb24rKztlbHNlIGlmKChuPXNFdChvKSk+MCl7Zm9yKHI9bixzPTA7cj4wO3ItLSlvPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLChuPXJFdChvKSk+PTA/cz0oczw8NCkrbjpudCh0LCJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTt0LnJlc3VsdCs9b0V0KHMpLHQucG9zaXRpb24rK31lbHNlIG50KHQsInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7YT1pPXQucG9zaXRpb259ZWxzZSBEcihvKT8oUm4odCxhLGksITApLEhfKHQsWTEodCwhMSxlKSksYT1pPXQucG9zaXRpb24pOnQucG9zaXRpb249PT10LmxpbmVTdGFydCYmdTkodCk/bnQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KHQucG9zaXRpb24rKyxpPXQucG9zaXRpb24pfW50KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBoRXQodCxlKXt2YXIgYT0hMCxpLHI9dC50YWcscyxuPXQuYW5jaG9yLG8sZCxjLHAsbCxmPXt9LGcseSx2LG07aWYobT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbT09PTkxKWQ9OTMsbD0hMSxzPVtdO2Vsc2UgaWYobT09PTEyMylkPTEyNSxsPSEwLHM9e307ZWxzZSByZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXMpLG09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7bSE9PTA7KXtpZihZMSh0LCEwLGUpLG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG09PT1kKXJldHVybiB0LnBvc2l0aW9uKyssdC50YWc9cix0LmFuY2hvcj1uLHQua2luZD1sPyJtYXBwaW5nIjoic2VxdWVuY2UiLHQucmVzdWx0PXMsITA7YXx8bnQodCwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSx5PWc9dj1udWxsLGM9cD0hMSxtPT09NjMmJihvPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLExhKG8pJiYoYz1wPSEwLHQucG9zaXRpb24rKyxZMSh0LCEwLGUpKSksaT10LmxpbmUsRDModCxlLGQ5LCExLCEwKSx5PXQudGFnLGc9dC5yZXN1bHQsWTEodCwhMCxlKSxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwocHx8dC5saW5lPT09aSkmJm09PT01OCYmKGM9ITAsbT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxZMSh0LCEwLGUpLEQzKHQsZSxkOSwhMSwhMCksdj10LnJlc3VsdCksbD9BMyh0LHMsZix5LGcsdik6Yz9zLnB1c2goQTModCxudWxsLGYseSxnLHYpKTpzLnB1c2goZyksWTEodCwhMCxlKSxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxtPT09NDQ/KGE9ITAsbT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6YT0hMX1udCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIHVFdCh0LGUpe3ZhciBhLGkscj1SXyxzPSExLG49ITEsbz1lLGQ9MCxjPSExLHAsbDtpZihsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxsPT09MTI0KWk9ITE7ZWxzZSBpZihsPT09NjIpaT0hMDtlbHNlIHJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiI7bCE9PTA7KWlmKGw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksbD09PTQzfHxsPT09NDUpUl89PT1yP3I9bD09PTQzP3FhZTplRXQ6bnQodCwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigocD1uRXQobCkpPj0wKXA9PT0wP250KHQsImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpuP250KHQsInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KG89ZStwLTEsbj0hMCk7ZWxzZSBicmVhaztpZihtMChsKSl7ZG8gbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShtMChsKSk7aWYobD09PTM1KWRvIGw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoIURyKGwpJiZsIT09MCl9Zm9yKDtsIT09MDspe2ZvcihCXyh0KSx0LmxpbmVJbmRlbnQ9MCxsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTsoIW58fHQubGluZUluZGVudDxvKSYmbD09PTMyOyl0LmxpbmVJbmRlbnQrKyxsPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKCFuJiZ0LmxpbmVJbmRlbnQ+byYmKG89dC5saW5lSW5kZW50KSxEcihsKSl7ZCsrO2NvbnRpbnVlfWlmKHQubGluZUluZGVudDxvKXtyPT09cWFlP3QucmVzdWx0Kz13cy5yZXBlYXQoYApgLHM/MStkOmQpOnI9PT1SXyYmcyYmKHQucmVzdWx0Kz1gCmApO2JyZWFrfWZvcihpP20wKGwpPyhjPSEwLHQucmVzdWx0Kz13cy5yZXBlYXQoYApgLHM/MStkOmQpKTpjPyhjPSExLHQucmVzdWx0Kz13cy5yZXBlYXQoYApgLGQrMSkpOmQ9PT0wP3MmJih0LnJlc3VsdCs9IiAiKTp0LnJlc3VsdCs9d3MucmVwZWF0KGAKYCxkKTp0LnJlc3VsdCs9d3MucmVwZWF0KGAKYCxzPzErZDpkKSxzPSEwLG49ITAsZD0wLGE9dC5wb3NpdGlvbjshRHIobCkmJmwhPT0wOylsPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO1JuKHQsYSx0LnBvc2l0aW9uLCExKX1yZXR1cm4hMH1mdW5jdGlvbiBKYWUodCxlKXt2YXIgYSxpPXQudGFnLHI9dC5hbmNob3Iscz1bXSxuLG89ITEsZDtmb3IodC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXMpLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2QhPT0wJiYhKGQhPT00NXx8KG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksIUxhKG4pKSk7KXtpZihvPSEwLHQucG9zaXRpb24rKyxZMSh0LCEwLC0xKSYmdC5saW5lSW5kZW50PD1lKXtzLnB1c2gobnVsbCksZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9aWYoYT10LmxpbmUsRDModCxlLEhhZSwhMSwhMCkscy5wdXNoKHQucmVzdWx0KSxZMSh0LCEwLC0xKSxkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiZkIT09MCludCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpO2Vsc2UgaWYodC5saW5lSW5kZW50PGUpYnJlYWt9cmV0dXJuIG8/KHQudGFnPWksdC5hbmNob3I9cix0LmtpbmQ9InNlcXVlbmNlIix0LnJlc3VsdD1zLCEwKTohMX1mdW5jdGlvbiBmRXQodCxlLGEpe3ZhciBpLHIscyxuLG89dC50YWcsZD10LmFuY2hvcixjPXt9LHA9e30sbD1udWxsLGY9bnVsbCxnPW51bGwseT0hMSx2PSExLG07Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1jKSxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTttIT09MDspe2lmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSkscz10LmxpbmUsbj10LnBvc2l0aW9uLChtPT09NjN8fG09PT01OCkmJkxhKGkpKW09PT02Mz8oeSYmKEEzKHQsYyxwLGwsZixudWxsKSxsPWY9Zz1udWxsKSx2PSEwLHk9ITAscj0hMCk6eT8oeT0hMSxyPSEwKTpudCh0LCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIiksdC5wb3NpdGlvbis9MSxtPWk7ZWxzZSBpZihEMyh0LGEsQmFlLCExLCEwKSlpZih0LmxpbmU9PT1zKXtmb3IobT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7bTAobSk7KW09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYobT09PTU4KW09dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksTGEobSl8fG50KHQsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLHkmJihBMyh0LGMscCxsLGYsbnVsbCksbD1mPWc9bnVsbCksdj0hMCx5PSExLHI9ITEsbD10LnRhZyxmPXQucmVzdWx0O2Vsc2UgaWYodiludCh0LCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpO2Vsc2UgcmV0dXJuIHQudGFnPW8sdC5hbmNob3I9ZCwhMH1lbHNlIGlmKHYpbnQodCwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gdC50YWc9byx0LmFuY2hvcj1kLCEwO2Vsc2UgYnJlYWs7aWYoKHQubGluZT09PXN8fHQubGluZUluZGVudD5lKSYmKEQzKHQsZSxwOSwhMCxyKSYmKHk/Zj10LnJlc3VsdDpnPXQucmVzdWx0KSx5fHwoQTModCxjLHAsbCxmLGcscyxuKSxsPWY9Zz1udWxsKSxZMSh0LCEwLC0xKSxtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSksdC5saW5lSW5kZW50PmUmJm0hPT0wKW50KHQsImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKHQubGluZUluZGVudDxlKWJyZWFrfXJldHVybiB5JiZBMyh0LGMscCxsLGYsbnVsbCksdiYmKHQudGFnPW8sdC5hbmNob3I9ZCx0LmtpbmQ9Im1hcHBpbmciLHQucmVzdWx0PWMpLHZ9ZnVuY3Rpb24gbUV0KHQpe3ZhciBlLGE9ITEsaT0hMSxyLHMsbjtpZihuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxuIT09MzMpcmV0dXJuITE7aWYodC50YWchPT1udWxsJiZudCh0LCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLG49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksbj09PTYwPyhhPSEwLG49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOm49PT0zMz8oaT0hMCxyPSIhISIsbj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cj0iISIsZT10LnBvc2l0aW9uLGEpe2RvIG49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUobiE9PTAmJm4hPT02Mik7dC5wb3NpdGlvbjx0Lmxlbmd0aD8ocz10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksbj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6bnQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7biE9PTAmJiFMYShuKTspbj09PTMzJiYoaT9udCh0LCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KHI9dC5pbnB1dC5zbGljZShlLTEsdC5wb3NpdGlvbisxKSxWYWUudGVzdChyKXx8bnQodCwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxpPSEwLGU9dC5wb3NpdGlvbisxKSksbj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtzPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxpRXQudGVzdChzKSYmbnQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9cmV0dXJuIHMmJiFqYWUudGVzdChzKSYmbnQodCwidGFnIG5hbWUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzOiAiK3MpLGE/dC50YWc9czpPbi5jYWxsKHQudGFnTWFwLHIpP3QudGFnPXQudGFnTWFwW3JdK3M6cj09PSIhIj90LnRhZz0iISIrczpyPT09IiEhIj90LnRhZz0idGFnOnlhbWwub3JnLDIwMDI6IitzOm50KHQsJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJytyKyciJyksITB9ZnVuY3Rpb24gZ0V0KHQpe3ZhciBlLGE7aWYoYT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYSE9PTM4KXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJm50KHQsImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpLGE9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZT10LnBvc2l0aW9uO2EhPT0wJiYhTGEoYSkmJiEkMyhhKTspYT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtyZXR1cm4gdC5wb3NpdGlvbj09PWUmJm50KHQsIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSx0LmFuY2hvcj10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksITB9ZnVuY3Rpb24gYkV0KHQpe3ZhciBlLGEsaTtpZihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxpIT09NDIpcmV0dXJuITE7Zm9yKGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZT10LnBvc2l0aW9uO2khPT0wJiYhTGEoaSkmJiEkMyhpKTspaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtyZXR1cm4gdC5wb3NpdGlvbj09PWUmJm50KHQsIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGE9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLE9uLmNhbGwodC5hbmNob3JNYXAsYSl8fG50KHQsJ3VuaWRlbnRpZmllZCBhbGlhcyAiJythKyciJyksdC5yZXN1bHQ9dC5hbmNob3JNYXBbYV0sWTEodCwhMCwtMSksITB9ZnVuY3Rpb24gRDModCxlLGEsaSxyKXt2YXIgcyxuLG8sZD0xLGM9ITEscD0hMSxsLGYsZyx5LHY7aWYodC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoIm9wZW4iLHQpLHQudGFnPW51bGwsdC5hbmNob3I9bnVsbCx0LmtpbmQ9bnVsbCx0LnJlc3VsdD1udWxsLHM9bj1vPXA5PT09YXx8SGFlPT09YSxpJiZZMSh0LCEwLC0xKSYmKGM9ITAsdC5saW5lSW5kZW50PmU/ZD0xOnQubGluZUluZGVudD09PWU/ZD0wOnQubGluZUluZGVudDxlJiYoZD0tMSkpLGQ9PT0xKWZvcig7bUV0KHQpfHxnRXQodCk7KVkxKHQsITAsLTEpPyhjPSEwLG89cyx0LmxpbmVJbmRlbnQ+ZT9kPTE6dC5saW5lSW5kZW50PT09ZT9kPTA6dC5saW5lSW5kZW50PGUmJihkPS0xKSk6bz0hMTtpZihvJiYobz1jfHxyKSwoZD09PTF8fHA5PT09YSkmJihkOT09PWF8fEJhZT09PWE/eT1lOnk9ZSsxLHY9dC5wb3NpdGlvbi10LmxpbmVTdGFydCxkPT09MT9vJiYoSmFlKHQsdil8fGZFdCh0LHYseSkpfHxoRXQodCx5KT9wPSEwOihuJiZ1RXQodCx5KXx8ZEV0KHQseSl8fHBFdCh0LHkpP3A9ITA6YkV0KHQpPyhwPSEwLCh0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbCkmJm50KHQsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOmNFdCh0LHksZDk9PT1hKSYmKHA9ITAsdC50YWc9PT1udWxsJiYodC50YWc9Ij8iKSksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6ZD09PTAmJihwPW8mJkphZSh0LHYpKSksdC50YWchPT1udWxsJiZ0LnRhZyE9PSIhIilpZih0LnRhZz09PSI/Iil7Zm9yKHQucmVzdWx0IT09bnVsbCYmdC5raW5kIT09InNjYWxhciImJm50KHQsJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJyt0LmtpbmQrJyInKSxsPTAsZj10LmltcGxpY2l0VHlwZXMubGVuZ3RoO2w8ZjtsKz0xKWlmKGc9dC5pbXBsaWNpdFR5cGVzW2xdLGcucmVzb2x2ZSh0LnJlc3VsdCkpe3QucmVzdWx0PWcuY29uc3RydWN0KHQucmVzdWx0KSx0LnRhZz1nLnRhZyx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpO2JyZWFrfX1lbHNlIE9uLmNhbGwodC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl0sdC50YWcpPyhnPXQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdW3QudGFnXSx0LnJlc3VsdCE9PW51bGwmJmcua2luZCE9PXQua2luZCYmbnQodCwidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiK3QudGFnKyc+IHRhZzsgaXQgc2hvdWxkIGJlICInK2cua2luZCsnIiwgbm90ICInK3Qua2luZCsnIicpLGcucmVzb2x2ZSh0LnJlc3VsdCk/KHQucmVzdWx0PWcuY29uc3RydWN0KHQucmVzdWx0KSx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpKTpudCh0LCJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIrdC50YWcrIj4gZXhwbGljaXQgdGFnIikpOm50KHQsInVua25vd24gdGFnICE8Iit0LnRhZysiPiIpO3JldHVybiB0Lmxpc3RlbmVyIT09bnVsbCYmdC5saXN0ZW5lcigiY2xvc2UiLHQpLHQudGFnIT09bnVsbHx8dC5hbmNob3IhPT1udWxsfHxwfWZ1bmN0aW9uIHZFdCh0KXt2YXIgZT10LnBvc2l0aW9uLGEsaSxyLHM9ITEsbjtmb3IodC52ZXJzaW9uPW51bGwsdC5jaGVja0xpbmVCcmVha3M9dC5sZWdhY3ksdC50YWdNYXA9e30sdC5hbmNob3JNYXA9e307KG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTAmJihZMSh0LCEwLC0xKSxuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwhKHQubGluZUluZGVudD4wfHxuIT09MzcpKTspe2ZvcihzPSEwLG49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksYT10LnBvc2l0aW9uO24hPT0wJiYhTGEobik7KW49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7Zm9yKGk9dC5pbnB1dC5zbGljZShhLHQucG9zaXRpb24pLHI9W10saS5sZW5ndGg8MSYmbnQodCwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7biE9PTA7KXtmb3IoO20wKG4pOyluPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKG49PT0zNSl7ZG8gbj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShuIT09MCYmIURyKG4pKTticmVha31pZihEcihuKSlicmVhaztmb3IoYT10LnBvc2l0aW9uO24hPT0wJiYhTGEobik7KW49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7ci5wdXNoKHQuaW5wdXQuc2xpY2UoYSx0LnBvc2l0aW9uKSl9biE9PTAmJkJfKHQpLE9uLmNhbGwoS2FlLGkpP0thZVtpXSh0LGkscik6aDkodCwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicraSsnIicpfWlmKFkxKHQsITAsLTEpLHQubGluZUluZGVudD09PTAmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisyKT09PTQ1Pyh0LnBvc2l0aW9uKz0zLFkxKHQsITAsLTEpKTpzJiZudCh0LCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIiksRDModCx0LmxpbmVJbmRlbnQtMSxwOSwhMSwhMCksWTEodCwhMCwtMSksdC5jaGVja0xpbmVCcmVha3MmJmFFdC50ZXN0KHQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSkmJmg5KHQsIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLHQuZG9jdW1lbnRzLnB1c2godC5yZXN1bHQpLHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmdTkodCkpe3QuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ2JiYodC5wb3NpdGlvbis9MyxZMSh0LCEwLC0xKSk7cmV0dXJufWlmKHQucG9zaXRpb248dC5sZW5ndGgtMSludCh0LCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uIGVpZSh0LGUpe3Q9U3RyaW5nKHQpLGU9ZXx8e30sdC5sZW5ndGghPT0wJiYodC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpIT09MTAmJnQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEzJiYodCs9YApgKSx0LmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKHQ9dC5zbGljZSgxKSkpO3ZhciBhPW5ldyBsRXQodCxlKSxpPXQuaW5kZXhPZigiXDAiKTtmb3IoaSE9PS0xJiYoYS5wb3NpdGlvbj1pLG50KGEsIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpKSxhLmlucHV0Kz0iXDAiO2EuaW5wdXQuY2hhckNvZGVBdChhLnBvc2l0aW9uKT09PTMyOylhLmxpbmVJbmRlbnQrPTEsYS5wb3NpdGlvbis9MTtmb3IoO2EucG9zaXRpb248YS5sZW5ndGgtMTspdkV0KGEpO3JldHVybiBhLmRvY3VtZW50c31mdW5jdGlvbiB0aWUodCxlLGEpe2UhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJnR5cGVvZiBhPiJ1IiYmKGE9ZSxlPW51bGwpO3ZhciBpPWVpZSh0LGEpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybiBpO2Zvcih2YXIgcj0wLHM9aS5sZW5ndGg7cjxzO3IrPTEpZShpW3JdKX1mdW5jdGlvbiBhaWUodCxlKXt2YXIgYT1laWUodCxlKTtpZihhLmxlbmd0aCE9PTApe2lmKGEubGVuZ3RoPT09MSlyZXR1cm4gYVswXTt0aHJvdyBuZXcgT2FlKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpfX1mdW5jdGlvbiB5RXQodCxlLGEpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZ0eXBlb2YgYT4idSImJihhPWUsZT1udWxsKSx0aWUodCxlLHdzLmV4dGVuZCh7c2NoZW1hOlJhZX0sYSkpfWZ1bmN0aW9uIHhFdCh0LGUpe3JldHVybiBhaWUodCx3cy5leHRlbmQoe3NjaGVtYTpSYWV9LGUpKX1ENi5leHBvcnRzLmxvYWRBbGw9dGllLEQ2LmV4cG9ydHMubG9hZD1haWUsRDYuZXhwb3J0cy5zYWZlTG9hZEFsbD15RXQsRDYuZXhwb3J0cy5zYWZlTG9hZD14RXQ7dmFyIGcwfSk7dmFyIENpZT1odCgoSl8xLFVfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRTY9aDAoKSxQNj1fMygpLHdFdD1BNigpLE1FdD1MMygpLHJpZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHNpZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHpFdD05LEk2PTEwLGtFdD0xMyxTRXQ9MzIsQ0V0PTMzLF9FdD0zNCxuaWU9MzUsVEV0PTM3LExFdD0zOCwkRXQ9MzksQUV0PTQyLG9pZT00NCxERXQ9NDUsbGllPTU4LEVFdD02MSxQRXQ9NjIsSUV0PTYzLE5FdD02NCxjaWU9OTEsZGllPTkzLEZFdD05NixwaWU9MTIzLE9FdD0xMjQsaGllPTEyNSxVMj17fTtVMlswXT0iXFwwIixVMls3XT0iXFxhIixVMls4XT0iXFxiIixVMls5XT0iXFx0IixVMlsxMF09IlxcbiIsVTJbMTFdPSJcXHYiLFUyWzEyXT0iXFxmIixVMlsxM109IlxcciIsVTJbMjddPSJcXGUiLFUyWzM0XT0nXFwiJyxVMls5Ml09IlxcXFwiLFUyWzEzM109IlxcTiIsVTJbMTYwXT0iXFxfIixVMls4MjMyXT0iXFxMIixVMls4MjMzXT0iXFxQIjt2YXIgUkV0PVsieSIsIlkiLCJ5ZXMiLCJZZXMiLCJZRVMiLCJvbiIsIk9uIiwiT04iLCJuIiwiTiIsIm5vIiwiTm8iLCJOTyIsIm9mZiIsIk9mZiIsIk9GRiJdO2Z1bmN0aW9uIEJFdCh0LGUpe3ZhciBhLGkscixzLG4sbyxkO2lmKGU9PT1udWxsKXJldHVybnt9O2ZvcihhPXt9LGk9T2JqZWN0LmtleXMoZSkscj0wLHM9aS5sZW5ndGg7cjxzO3IrPTEpbj1pW3JdLG89U3RyaW5nKGVbbl0pLG4uc2xpY2UoMCwyKT09PSIhISImJihuPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK24uc2xpY2UoMikpLGQ9dC5jb21waWxlZFR5cGVNYXAuZmFsbGJhY2tbbl0sZCYmc2llLmNhbGwoZC5zdHlsZUFsaWFzZXMsbykmJihvPWQuc3R5bGVBbGlhc2VzW29dKSxhW25dPW87cmV0dXJuIGF9ZnVuY3Rpb24gdWllKHQpe3ZhciBlLGEsaTtpZihlPXQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksdDw9MjU1KWE9IngiLGk9MjtlbHNlIGlmKHQ8PTY1NTM1KWE9InUiLGk9NDtlbHNlIGlmKHQ8PTQyOTQ5NjcyOTUpYT0iVSIsaT04O2Vsc2UgdGhyb3cgbmV3IFA2KCJjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGIik7cmV0dXJuIlxcIithK0U2LnJlcGVhdCgiMCIsaS1lLmxlbmd0aCkrZX1mdW5jdGlvbiBIRXQodCl7dGhpcy5zY2hlbWE9dC5zY2hlbWF8fHdFdCx0aGlzLmluZGVudD1NYXRoLm1heCgxLHQuaW5kZW50fHwyKSx0aGlzLm5vQXJyYXlJbmRlbnQ9dC5ub0FycmF5SW5kZW50fHwhMSx0aGlzLnNraXBJbnZhbGlkPXQuc2tpcEludmFsaWR8fCExLHRoaXMuZmxvd0xldmVsPUU2LmlzTm90aGluZyh0LmZsb3dMZXZlbCk/LTE6dC5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1CRXQodGhpcy5zY2hlbWEsdC5zdHlsZXN8fG51bGwpLHRoaXMuc29ydEtleXM9dC5zb3J0S2V5c3x8ITEsdGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGh8fDgwLHRoaXMubm9SZWZzPXQubm9SZWZzfHwhMSx0aGlzLm5vQ29tcGF0TW9kZT10Lm5vQ29tcGF0TW9kZXx8ITEsdGhpcy5jb25kZW5zZUZsb3c9dC5jb25kZW5zZUZsb3d8fCExLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMuZXhwbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0LHRoaXMudGFnPW51bGwsdGhpcy5yZXN1bHQ9IiIsdGhpcy5kdXBsaWNhdGVzPVtdLHRoaXMudXNlZER1cGxpY2F0ZXM9bnVsbH1mdW5jdGlvbiBmaWUodCxlKXtmb3IodmFyIGE9RTYucmVwZWF0KCIgIixlKSxpPTAscj0tMSxzPSIiLG4sbz10Lmxlbmd0aDtpPG87KXI9dC5pbmRleE9mKGAKYCxpKSxyPT09LTE/KG49dC5zbGljZShpKSxpPW8pOihuPXQuc2xpY2UoaSxyKzEpLGk9cisxKSxuLmxlbmd0aCYmbiE9PWAKYCYmKHMrPWEpLHMrPW47cmV0dXJuIHN9ZnVuY3Rpb24gcV8odCxlKXtyZXR1cm5gCmArRTYucmVwZWF0KCIgIix0LmluZGVudCplKX1mdW5jdGlvbiBxRXQodCxlKXt2YXIgYSxpLHI7Zm9yKGE9MCxpPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7YTxpO2ErPTEpaWYocj10LmltcGxpY2l0VHlwZXNbYV0sci5yZXNvbHZlKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZfKHQpe3JldHVybiB0PT09U0V0fHx0PT09ekV0fWZ1bmN0aW9uIEUzKHQpe3JldHVybiAzMjw9dCYmdDw9MTI2fHwxNjE8PXQmJnQ8PTU1Mjk1JiZ0IT09ODIzMiYmdCE9PTgyMzN8fDU3MzQ0PD10JiZ0PD02NTUzMyYmdCE9PTY1Mjc5fHw2NTUzNjw9dCYmdDw9MTExNDExMX1mdW5jdGlvbiBWRXQodCl7cmV0dXJuIEUzKHQpJiYhVl8odCkmJnQhPT02NTI3OSYmdCE9PWtFdCYmdCE9PUk2fWZ1bmN0aW9uIG1pZSh0LGUpe3JldHVybiBFMyh0KSYmdCE9PTY1Mjc5JiZ0IT09b2llJiZ0IT09Y2llJiZ0IT09ZGllJiZ0IT09cGllJiZ0IT09aGllJiZ0IT09bGllJiYodCE9PW5pZXx8ZSYmVkV0KGUpKX1mdW5jdGlvbiBqRXQodCl7cmV0dXJuIEUzKHQpJiZ0IT09NjUyNzkmJiFWXyh0KSYmdCE9PURFdCYmdCE9PUlFdCYmdCE9PWxpZSYmdCE9PW9pZSYmdCE9PWNpZSYmdCE9PWRpZSYmdCE9PXBpZSYmdCE9PWhpZSYmdCE9PW5pZSYmdCE9PUxFdCYmdCE9PUFFdCYmdCE9PUNFdCYmdCE9PU9FdCYmdCE9PUVFdCYmdCE9PVBFdCYmdCE9PSRFdCYmdCE9PV9FdCYmdCE9PVRFdCYmdCE9PU5FdCYmdCE9PUZFdH1mdW5jdGlvbiBnaWUodCl7dmFyIGU9L15cbiogLztyZXR1cm4gZS50ZXN0KHQpfXZhciBiaWU9MSx2aWU9Mix5aWU9Myx4aWU9NCxmOT01O2Z1bmN0aW9uIFVFdCh0LGUsYSxpLHIpe3ZhciBzLG4sbyxkPSExLGM9ITEscD1pIT09LTEsbD0tMSxmPWpFdCh0LmNoYXJDb2RlQXQoMCkpJiYhVl8odC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpKTtpZihlKWZvcihzPTA7czx0Lmxlbmd0aDtzKyspe2lmKG49dC5jaGFyQ29kZUF0KHMpLCFFMyhuKSlyZXR1cm4gZjk7bz1zPjA/dC5jaGFyQ29kZUF0KHMtMSk6bnVsbCxmPWYmJm1pZShuLG8pfWVsc2V7Zm9yKHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYobj10LmNoYXJDb2RlQXQocyksbj09PUk2KWQ9ITAscCYmKGM9Y3x8cy1sLTE+aSYmdFtsKzFdIT09IiAiLGw9cyk7ZWxzZSBpZighRTMobikpcmV0dXJuIGY5O289cz4wP3QuY2hhckNvZGVBdChzLTEpOm51bGwsZj1mJiZtaWUobixvKX1jPWN8fHAmJnMtbC0xPmkmJnRbbCsxXSE9PSIgIn1yZXR1cm4hZCYmIWM/ZiYmIXIodCk/YmllOnZpZTphPjkmJmdpZSh0KT9mOTpjP3hpZTp5aWV9ZnVuY3Rpb24gV0V0KHQsZSxhLGkpe3QuZHVtcD0oZnVuY3Rpb24oKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIicnIjtpZighdC5ub0NvbXBhdE1vZGUmJlJFdC5pbmRleE9mKGUpIT09LTEpcmV0dXJuIiciK2UrIiciO3ZhciByPXQuaW5kZW50Kk1hdGgubWF4KDEsYSkscz10LmxpbmVXaWR0aD09PS0xPy0xOk1hdGgubWF4KE1hdGgubWluKHQubGluZVdpZHRoLDQwKSx0LmxpbmVXaWR0aC1yKSxuPWl8fHQuZmxvd0xldmVsPi0xJiZhPj10LmZsb3dMZXZlbDtmdW5jdGlvbiBvKGQpe3JldHVybiBxRXQodCxkKX1zd2l0Y2goVUV0KGUsbix0LmluZGVudCxzLG8pKXtjYXNlIGJpZTpyZXR1cm4gZTtjYXNlIHZpZTpyZXR1cm4iJyIrZS5yZXBsYWNlKC8nL2csIicnIikrIiciO2Nhc2UgeWllOnJldHVybiJ8Iit3aWUoZSx0LmluZGVudCkrTWllKGZpZShlLHIpKTtjYXNlIHhpZTpyZXR1cm4iPiIrd2llKGUsdC5pbmRlbnQpK01pZShmaWUoR0V0KGUscykscikpO2Nhc2UgZjk6cmV0dXJuJyInK1lFdChlLHMpKyciJztkZWZhdWx0OnRocm93IG5ldyBQNigiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKX19KSgpfWZ1bmN0aW9uIHdpZSh0LGUpe3ZhciBhPWdpZSh0KT9TdHJpbmcoZSk6IiIsaT10W3QubGVuZ3RoLTFdPT09YApgLHI9aSYmKHRbdC5sZW5ndGgtMl09PT1gCmB8fHQ9PT1gCmApLHM9cj8iKyI6aT8iIjoiLSI7cmV0dXJuIGErcytgCmB9ZnVuY3Rpb24gTWllKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdPT09YApgP3Quc2xpY2UoMCwtMSk6dH1mdW5jdGlvbiBHRXQodCxlKXtmb3IodmFyIGE9LyhcbispKFteXG5dKikvZyxpPShmdW5jdGlvbigpe3ZhciBjPXQuaW5kZXhPZihgCmApO3JldHVybiBjPWMhPT0tMT9jOnQubGVuZ3RoLGEubGFzdEluZGV4PWMsemllKHQuc2xpY2UoMCxjKSxlKX0pKCkscj10WzBdPT09YApgfHx0WzBdPT09IiAiLHMsbjtuPWEuZXhlYyh0KTspe3ZhciBvPW5bMV0sZD1uWzJdO3M9ZFswXT09PSIgIixpKz1vKyghciYmIXMmJmQhPT0iIj9gCmA6IiIpK3ppZShkLGUpLHI9c31yZXR1cm4gaX1mdW5jdGlvbiB6aWUodCxlKXtpZih0PT09IiJ8fHRbMF09PT0iICIpcmV0dXJuIHQ7Zm9yKHZhciBhPS8gW14gXS9nLGkscj0wLHMsbj0wLG89MCxkPSIiO2k9YS5leGVjKHQpOylvPWkuaW5kZXgsby1yPmUmJihzPW4+cj9uOm8sZCs9YApgK3Quc2xpY2UocixzKSxyPXMrMSksbj1vO3JldHVybiBkKz1gCmAsdC5sZW5ndGgtcj5lJiZuPnI/ZCs9dC5zbGljZShyLG4pK2AKYCt0LnNsaWNlKG4rMSk6ZCs9dC5zbGljZShyKSxkLnNsaWNlKDEpfWZ1bmN0aW9uIFlFdCh0KXtmb3IodmFyIGU9IiIsYSxpLHIscz0wO3M8dC5sZW5ndGg7cysrKXtpZihhPXQuY2hhckNvZGVBdChzKSxhPj01NTI5NiYmYTw9NTYzMTkmJihpPXQuY2hhckNvZGVBdChzKzEpLGk+PTU2MzIwJiZpPD01NzM0Mykpe2UrPXVpZSgoYS01NTI5NikqMTAyNCtpLTU2MzIwKzY1NTM2KSxzKys7Y29udGludWV9cj1VMlthXSxlKz0hciYmRTMoYSk/dFtzXTpyfHx1aWUoYSl9cmV0dXJuIGV9ZnVuY3Rpb24gWkV0KHQsZSxhKXt2YXIgaT0iIixyPXQudGFnLHMsbjtmb3Iocz0wLG49YS5sZW5ndGg7czxuO3MrPTEpYjAodCxlLGFbc10sITEsITEpJiYocyE9PTAmJihpKz0iLCIrKHQuY29uZGVuc2VGbG93PyIiOiIgIikpLGkrPXQuZHVtcCk7dC50YWc9cix0LmR1bXA9IlsiK2krIl0ifWZ1bmN0aW9uIFhFdCh0LGUsYSxpKXt2YXIgcj0iIixzPXQudGFnLG4sbztmb3Iobj0wLG89YS5sZW5ndGg7bjxvO24rPTEpYjAodCxlKzEsYVtuXSwhMCwhMCkmJigoIWl8fG4hPT0wKSYmKHIrPXFfKHQsZSkpLHQuZHVtcCYmSTY9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9yKz0iLSI6cis9Ii0gIixyKz10LmR1bXApO3QudGFnPXMsdC5kdW1wPXJ8fCJbXSJ9ZnVuY3Rpb24gS0V0KHQsZSxhKXt2YXIgaT0iIixyPXQudGFnLHM9T2JqZWN0LmtleXMoYSksbixvLGQsYyxwO2ZvcihuPTAsbz1zLmxlbmd0aDtuPG87bis9MSlwPSIiLG4hPT0wJiYocCs9IiwgIiksdC5jb25kZW5zZUZsb3cmJihwKz0nIicpLGQ9c1tuXSxjPWFbZF0sYjAodCxlLGQsITEsITEpJiYodC5kdW1wLmxlbmd0aD4xMDI0JiYocCs9Ij8gIikscCs9dC5kdW1wKyh0LmNvbmRlbnNlRmxvdz8nIic6IiIpKyI6IisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSxiMCh0LGUsYywhMSwhMSkmJihwKz10LmR1bXAsaSs9cCkpO3QudGFnPXIsdC5kdW1wPSJ7IitpKyJ9In1mdW5jdGlvbiBRRXQodCxlLGEsaSl7dmFyIHI9IiIscz10LnRhZyxuPU9iamVjdC5rZXlzKGEpLG8sZCxjLHAsbCxmO2lmKHQuc29ydEtleXM9PT0hMCluLnNvcnQoKTtlbHNlIGlmKHR5cGVvZiB0LnNvcnRLZXlzPT0iZnVuY3Rpb24iKW4uc29ydCh0LnNvcnRLZXlzKTtlbHNlIGlmKHQuc29ydEtleXMpdGhyb3cgbmV3IFA2KCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKG89MCxkPW4ubGVuZ3RoO288ZDtvKz0xKWY9IiIsKCFpfHxvIT09MCkmJihmKz1xXyh0LGUpKSxjPW5bb10scD1hW2NdLGIwKHQsZSsxLGMsITAsITAsITApJiYobD10LnRhZyE9PW51bGwmJnQudGFnIT09Ij8ifHx0LmR1bXAmJnQuZHVtcC5sZW5ndGg+MTAyNCxsJiYodC5kdW1wJiZJNj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP2YrPSI/IjpmKz0iPyAiKSxmKz10LmR1bXAsbCYmKGYrPXFfKHQsZSkpLGIwKHQsZSsxLHAsITAsbCkmJih0LmR1bXAmJkk2PT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/Zis9IjoiOmYrPSI6ICIsZis9dC5kdW1wLHIrPWYpKTt0LnRhZz1zLHQuZHVtcD1yfHwie30ifWZ1bmN0aW9uIGtpZSh0LGUsYSl7dmFyIGkscixzLG4sbyxkO2ZvcihyPWE/dC5leHBsaWNpdFR5cGVzOnQuaW1wbGljaXRUeXBlcyxzPTAsbj1yLmxlbmd0aDtzPG47cys9MSlpZihvPXJbc10sKG8uaW5zdGFuY2VPZnx8by5wcmVkaWNhdGUpJiYoIW8uaW5zdGFuY2VPZnx8dHlwZW9mIGU9PSJvYmplY3QiJiZlIGluc3RhbmNlb2Ygby5pbnN0YW5jZU9mKSYmKCFvLnByZWRpY2F0ZXx8by5wcmVkaWNhdGUoZSkpKXtpZih0LnRhZz1hP28udGFnOiI/IixvLnJlcHJlc2VudCl7aWYoZD10LnN0eWxlTWFwW28udGFnXXx8by5kZWZhdWx0U3R5bGUscmllLmNhbGwoby5yZXByZXNlbnQpPT09IltvYmplY3QgRnVuY3Rpb25dIilpPW8ucmVwcmVzZW50KGUsZCk7ZWxzZSBpZihzaWUuY2FsbChvLnJlcHJlc2VudCxkKSlpPW8ucmVwcmVzZW50W2RdKGUsZCk7ZWxzZSB0aHJvdyBuZXcgUDYoIiE8IitvLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrZCsnIiBzdHlsZScpO3QuZHVtcD1pfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGIwKHQsZSxhLGkscixzKXt0LnRhZz1udWxsLHQuZHVtcD1hLGtpZSh0LGEsITEpfHxraWUodCxhLCEwKTt2YXIgbj1yaWUuY2FsbCh0LmR1bXApO2kmJihpPXQuZmxvd0xldmVsPDB8fHQuZmxvd0xldmVsPmUpO3ZhciBvPW49PT0iW29iamVjdCBPYmplY3RdInx8bj09PSJbb2JqZWN0IEFycmF5XSIsZCxjO2lmKG8mJihkPXQuZHVwbGljYXRlcy5pbmRleE9mKGEpLGM9ZCE9PS0xKSwodC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8Y3x8dC5pbmRlbnQhPT0yJiZlPjApJiYocj0hMSksYyYmdC51c2VkRHVwbGljYXRlc1tkXSl0LmR1bXA9IipyZWZfIitkO2Vsc2V7aWYobyYmYyYmIXQudXNlZER1cGxpY2F0ZXNbZF0mJih0LnVzZWREdXBsaWNhdGVzW2RdPSEwKSxuPT09IltvYmplY3QgT2JqZWN0XSIpaSYmT2JqZWN0LmtleXModC5kdW1wKS5sZW5ndGghPT0wPyhRRXQodCxlLHQuZHVtcCxyKSxjJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKTooS0V0KHQsZSx0LmR1bXApLGMmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKG49PT0iW29iamVjdCBBcnJheV0iKXt2YXIgcD10Lm5vQXJyYXlJbmRlbnQmJmU+MD9lLTE6ZTtpJiZ0LmR1bXAubGVuZ3RoIT09MD8oWEV0KHQscCx0LmR1bXAsciksYyYmKHQuZHVtcD0iJnJlZl8iK2QrdC5kdW1wKSk6KFpFdCh0LHAsdC5kdW1wKSxjJiYodC5kdW1wPSImcmVmXyIrZCsiICIrdC5kdW1wKSl9ZWxzZSBpZihuPT09IltvYmplY3QgU3RyaW5nXSIpdC50YWchPT0iPyImJldFdCh0LHQuZHVtcCxlLHMpO2Vsc2V7aWYodC5za2lwSW52YWxpZClyZXR1cm4hMTt0aHJvdyBuZXcgUDYoInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIrbil9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/IiYmKHQuZHVtcD0iITwiK3QudGFnKyI+ICIrdC5kdW1wKX1yZXR1cm4hMH1mdW5jdGlvbiBKRXQodCxlKXt2YXIgYT1bXSxpPVtdLHIscztmb3Ioal8odCxhLGkpLHI9MCxzPWkubGVuZ3RoO3I8cztyKz0xKWUuZHVwbGljYXRlcy5wdXNoKGFbaVtyXV0pO2UudXNlZER1cGxpY2F0ZXM9bmV3IEFycmF5KHMpfWZ1bmN0aW9uIGpfKHQsZSxhKXt2YXIgaSxyLHM7aWYodCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IilpZihyPWUuaW5kZXhPZih0KSxyIT09LTEpYS5pbmRleE9mKHIpPT09LTEmJmEucHVzaChyKTtlbHNlIGlmKGUucHVzaCh0KSxBcnJheS5pc0FycmF5KHQpKWZvcihyPTAscz10Lmxlbmd0aDtyPHM7cis9MSlqXyh0W3JdLGUsYSk7ZWxzZSBmb3IoaT1PYmplY3Qua2V5cyh0KSxyPTAscz1pLmxlbmd0aDtyPHM7cis9MSlqXyh0W2lbcl1dLGUsYSl9ZnVuY3Rpb24gU2llKHQsZSl7ZT1lfHx7fTt2YXIgYT1uZXcgSEV0KGUpO3JldHVybiBhLm5vUmVmc3x8SkV0KHQsYSksYjAoYSwwLHQsITAsITApP2EuZHVtcCtgCmA6IiJ9ZnVuY3Rpb24gZVB0KHQsZSl7cmV0dXJuIFNpZSh0LEU2LmV4dGVuZCh7c2NoZW1hOk1FdH0sZSkpfVVfLmV4cG9ydHMuZHVtcD1TaWUsVV8uZXhwb3J0cy5zYWZlRHVtcD1lUHR9KTt2YXIgVGllPWh0KChlVDEsRTEpPT57InVzZSBzdHJpY3QiO3ZhciBtOT1paWUoKSxfaWU9Q2llKCk7ZnVuY3Rpb24gZzkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiAiK3QrIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKX19RTEuZXhwb3J0cy5UeXBlPWEyKCksRTEuZXhwb3J0cy5TY2hlbWE9dTAoKSxFMS5leHBvcnRzLkZBSUxTQUZFX1NDSEVNQT1sOSgpLEUxLmV4cG9ydHMuSlNPTl9TQ0hFTUE9Tl8oKSxFMS5leHBvcnRzLkNPUkVfU0NIRU1BPUZfKCksRTEuZXhwb3J0cy5ERUZBVUxUX1NBRkVfU0NIRU1BPUwzKCksRTEuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BPUE2KCksRTEuZXhwb3J0cy5sb2FkPW05LmxvYWQsRTEuZXhwb3J0cy5sb2FkQWxsPW05LmxvYWRBbGwsRTEuZXhwb3J0cy5zYWZlTG9hZD1tOS5zYWZlTG9hZCxFMS5leHBvcnRzLnNhZmVMb2FkQWxsPW05LnNhZmVMb2FkQWxsLEUxLmV4cG9ydHMuZHVtcD1faWUuZHVtcCxFMS5leHBvcnRzLnNhZmVEdW1wPV9pZS5zYWZlRHVtcCxFMS5leHBvcnRzLllBTUxFeGNlcHRpb249XzMoKSxFMS5leHBvcnRzLk1JTklNQUxfU0NIRU1BPWw5KCksRTEuZXhwb3J0cy5TQUZFX1NDSEVNQT1MMygpLEUxLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUE9QTYoKSxFMS5leHBvcnRzLnNjYW49ZzkoInNjYW4iKSxFMS5leHBvcnRzLnBhcnNlPWc5KCJwYXJzZSIpLEUxLmV4cG9ydHMuY29tcG9zZT1nOSgiY29tcG9zZSIpLEUxLmV4cG9ydHMuYWRkQ29uc3RydWN0b3I9ZzkoImFkZENvbnN0cnVjdG9yIil9KTt2YXIgJGllPWh0KCh0VDEsTGllKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdFB0PVRpZSgpO0xpZS5leHBvcnRzPXRQdH0pO3ZhciBBaWU9aHQoRXI9PnsidXNlIHN0cmljdCI7dmFyIGFQdD1FciYmRXIuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlLGEsaSl7aT09PXZvaWQgMCYmKGk9YSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVthXX19KX0pOihmdW5jdGlvbih0LGUsYSxpKXtpPT09dm9pZCAwJiYoaT1hKSx0W2ldPWVbYV19KSksaVB0PUVyJiZFci5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlvbih0LGUpe3QuZGVmYXVsdD1lfSksclB0PUVyJiZFci5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgYSBpbiB0KWEhPT0iZGVmYXVsdCImJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsYSkmJmFQdChlLHQsYSk7cmV0dXJuIGlQdChlLHQpLGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShFciwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRXIuanNZYW1sPXZvaWQgMDt2YXIgc1B0PXJQdCgkaWUoKSk7RXIuanNZYW1sPXNQdH0pO3ZhciBFaWU9aHQoZGk9PnsidXNlIHN0cmljdCI7dmFyIG5QdD1kaSYmZGkuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT8oZnVuY3Rpb24odCxlLGEsaSl7aT09PXZvaWQgMCYmKGk9YSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVthXX19KX0pOihmdW5jdGlvbih0LGUsYSxpKXtpPT09dm9pZCAwJiYoaT1hKSx0W2ldPWVbYV19KSksb1B0PWRpJiZkaS5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlPyhmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSl9KTpmdW5jdGlvbih0LGUpe3QuZGVmYXVsdD1lfSksbFB0PWRpJiZkaS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT17fTtpZih0IT1udWxsKWZvcih2YXIgYSBpbiB0KWEhPT0iZGVmYXVsdCImJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsYSkmJm5QdChlLHQsYSk7cmV0dXJuIG9QdChlLHQpLGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShkaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZGkub2JqZWN0VG9ZYW1sU3RyaW5nPWRpLnlhbWxTdHJpbmdUb09iamVjdD12b2lkIDA7dmFyIERpZT1sUHQoQWllKCkpO2RpLnlhbWxTdHJpbmdUb09iamVjdD1hc3luYyh0LGU9e30pPT5EaWUuanNZYW1sLnNhZmVMb2FkKHQpLGRpLm9iamVjdFRvWWFtbFN0cmluZz1hc3luYyh0LGU9e30pPT5EaWUuanNZYW1sLnNhZmVEdW1wKHQpfSk7ZnVuY3Rpb24gV18odCl7aWYodCl0aHJvdyB0fXZhciBQaWU9YigoKT0+e30pO3ZhciBWaWU9aHQoKHNUMSxxaWUpPT57InVzZSBzdHJpY3QiO3ZhciBiOT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LElpZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLE5pZT1PYmplY3QuZGVmaW5lUHJvcGVydHksRmllPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsT2llPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgQXJyYXkuaXNBcnJheT09ImZ1bmN0aW9uIj9BcnJheS5pc0FycmF5KGUpOklpZS5jYWxsKGUpPT09IltvYmplY3QgQXJyYXldIn0sUmllPWZ1bmN0aW9uKGUpe2lmKCFlfHxJaWUuY2FsbChlKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO3ZhciBhPWI5LmNhbGwoZSwiY29uc3RydWN0b3IiKSxpPWUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IucHJvdG90eXBlJiZiOS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIik7aWYoZS5jb25zdHJ1Y3RvciYmIWEmJiFpKXJldHVybiExO3ZhciByO2ZvcihyIGluIGUpO3JldHVybiB0eXBlb2Ygcj4idSJ8fGI5LmNhbGwoZSxyKX0sQmllPWZ1bmN0aW9uKGUsYSl7TmllJiZhLm5hbWU9PT0iX19wcm90b19fIj9OaWUoZSxhLm5hbWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOmEubmV3VmFsdWUsd3JpdGFibGU6ITB9KTplW2EubmFtZV09YS5uZXdWYWx1ZX0sSGllPWZ1bmN0aW9uKGUsYSl7aWYoYT09PSJfX3Byb3RvX18iKWlmKGI5LmNhbGwoZSxhKSl7aWYoRmllKXJldHVybiBGaWUoZSxhKS52YWx1ZX1lbHNlIHJldHVybjtyZXR1cm4gZVthXX07cWllLmV4cG9ydHM9ZnVuY3Rpb24gdCgpe3ZhciBlLGEsaSxyLHMsbixvPWFyZ3VtZW50c1swXSxkPTEsYz1hcmd1bWVudHMubGVuZ3RoLHA9ITE7Zm9yKHR5cGVvZiBvPT0iYm9vbGVhbiImJihwPW8sbz1hcmd1bWVudHNbMV18fHt9LGQ9MiksKG89PW51bGx8fHR5cGVvZiBvIT0ib2JqZWN0IiYmdHlwZW9mIG8hPSJmdW5jdGlvbiIpJiYobz17fSk7ZDxjOysrZClpZihlPWFyZ3VtZW50c1tkXSxlIT1udWxsKWZvcihhIGluIGUpaT1IaWUobyxhKSxyPUhpZShlLGEpLG8hPT1yJiYocCYmciYmKFJpZShyKXx8KHM9T2llKHIpKSk/KHM/KHM9ITEsbj1pJiZPaWUoaSk/aTpbXSk6bj1pJiZSaWUoaSk/aTp7fSxCaWUobyx7bmFtZTphLG5ld1ZhbHVlOnQocCxuLHIpfSkpOnR5cGVvZiByPCJ1IiYmQmllKG8se25hbWU6YSxuZXdWYWx1ZTpyfSkpO3JldHVybiBvfX0pO3ZhciBCbj1iKCgpPT57fSk7ZnVuY3Rpb24gTjYodCl7aWYodHlwZW9mIHQhPSJvYmplY3QifHx0PT09bnVsbClyZXR1cm4hMTtsZXQgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHQpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiB0KX12YXIgamllPWIoKCk9Pnt9KTtmdW5jdGlvbiBHXygpe2xldCB0PVtdLGU9e3J1bjphLHVzZTppfTtyZXR1cm4gZTtmdW5jdGlvbiBhKC4uLnIpe2xldCBzPS0xLG49ci5wb3AoKTtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiBhcyBsYXN0IGFyZ3VtZW50LCBub3QgIituKTtvKG51bGwsLi4ucik7ZnVuY3Rpb24gbyhkLC4uLmMpe2xldCBwPXRbKytzXSxsPS0xO2lmKGQpe24oZCk7cmV0dXJufWZvcig7KytsPHIubGVuZ3RoOykoY1tsXT09PW51bGx8fGNbbF09PT12b2lkIDApJiYoY1tsXT1yW2xdKTtyPWMscD9VaWUocCxvKSguLi5jKTpuKG51bGwsLi4uYyl9fWZ1bmN0aW9uIGkocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYG1pZGRlbHdhcmVgIHRvIGJlIGEgZnVuY3Rpb24sIG5vdCAiK3IpO3JldHVybiB0LnB1c2gociksZX19ZnVuY3Rpb24gVWllKHQsZSl7bGV0IGE7cmV0dXJuIGk7ZnVuY3Rpb24gaSguLi5uKXtsZXQgbz10Lmxlbmd0aD5uLmxlbmd0aCxkO28mJm4ucHVzaChyKTt0cnl7ZD10LmFwcGx5KHRoaXMsbil9Y2F0Y2goYyl7bGV0IHA9YztpZihvJiZhKXRocm93IHA7cmV0dXJuIHIocCl9b3x8KGQmJmQudGhlbiYmdHlwZW9mIGQudGhlbj09ImZ1bmN0aW9uIj9kLnRoZW4ocyxyKTpkIGluc3RhbmNlb2YgRXJyb3I/cihkKTpzKGQpKX1mdW5jdGlvbiByKG4sLi4ubyl7YXx8KGE9ITAsZShuLC4uLm8pKX1mdW5jdGlvbiBzKG4pe3IobnVsbCxuKX19dmFyIFdpZT1iKCgpPT57fSk7dmFyIEdpZT1iKCgpPT57V2llKCl9KTtmdW5jdGlvbiBIbih0KXtyZXR1cm4hdHx8dHlwZW9mIHQhPSJvYmplY3QiPyIiOiJwb3NpdGlvbiJpbiB0fHwidHlwZSJpbiB0P1lpZSh0LnBvc2l0aW9uKToic3RhcnQiaW4gdHx8ImVuZCJpbiB0P1lpZSh0KToibGluZSJpbiB0fHwiY29sdW1uImluIHQ/WV8odCk6IiJ9ZnVuY3Rpb24gWV8odCl7cmV0dXJuIFppZSh0JiZ0LmxpbmUpKyI6IitaaWUodCYmdC5jb2x1bW4pfWZ1bmN0aW9uIFlpZSh0KXtyZXR1cm4gWV8odCYmdC5zdGFydCkrIi0iK1lfKHQmJnQuZW5kKX1mdW5jdGlvbiBaaWUodCl7cmV0dXJuIHQmJnR5cGVvZiB0PT0ibnVtYmVyIj90OjF9dmFyIFhpZT1iKCgpPT57fSk7dmFyIFpfPWIoKCk9PntYaWUoKX0pO3ZhciBmMixLaWU9YigoKT0+e1pfKCk7ZjI9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLGEsaSl7c3VwZXIoKSx0eXBlb2YgYT09InN0cmluZyImJihpPWEsYT12b2lkIDApO2xldCByPSIiLHM9e30sbj0hMTtpZihhJiYoImxpbmUiaW4gYSYmImNvbHVtbiJpbiBhP3M9e3BsYWNlOmF9OiJzdGFydCJpbiBhJiYiZW5kImluIGE/cz17cGxhY2U6YX06InR5cGUiaW4gYT9zPXthbmNlc3RvcnM6W2FdLHBsYWNlOmEucG9zaXRpb259OnM9ey4uLmF9KSx0eXBlb2YgZT09InN0cmluZyI/cj1lOiFzLmNhdXNlJiZlJiYobj0hMCxyPWUubWVzc2FnZSxzLmNhdXNlPWUpLCFzLnJ1bGVJZCYmIXMuc291cmNlJiZ0eXBlb2YgaT09InN0cmluZyIpe2xldCBkPWkuaW5kZXhPZigiOiIpO2Q9PT0tMT9zLnJ1bGVJZD1pOihzLnNvdXJjZT1pLnNsaWNlKDAsZCkscy5ydWxlSWQ9aS5zbGljZShkKzEpKX1pZighcy5wbGFjZSYmcy5hbmNlc3RvcnMmJnMuYW5jZXN0b3JzKXtsZXQgZD1zLmFuY2VzdG9yc1tzLmFuY2VzdG9ycy5sZW5ndGgtMV07ZCYmKHMucGxhY2U9ZC5wb3NpdGlvbil9bGV0IG89cy5wbGFjZSYmInN0YXJ0ImluIHMucGxhY2U/cy5wbGFjZS5zdGFydDpzLnBsYWNlO3RoaXMuYW5jZXN0b3JzPXMuYW5jZXN0b3JzfHx2b2lkIDAsdGhpcy5jYXVzZT1zLmNhdXNlfHx2b2lkIDAsdGhpcy5jb2x1bW49bz9vLmNvbHVtbjp2b2lkIDAsdGhpcy5mYXRhbD12b2lkIDAsdGhpcy5maWxlPSIiLHRoaXMubWVzc2FnZT1yLHRoaXMubGluZT1vP28ubGluZTp2b2lkIDAsdGhpcy5uYW1lPUhuKHMucGxhY2UpfHwiMToxIix0aGlzLnBsYWNlPXMucGxhY2V8fHZvaWQgMCx0aGlzLnJlYXNvbj10aGlzLm1lc3NhZ2UsdGhpcy5ydWxlSWQ9cy5ydWxlSWR8fHZvaWQgMCx0aGlzLnNvdXJjZT1zLnNvdXJjZXx8dm9pZCAwLHRoaXMuc3RhY2s9biYmcy5jYXVzZSYmdHlwZW9mIHMuY2F1c2Uuc3RhY2s9PSJzdHJpbmciP3MuY2F1c2Uuc3RhY2s6IiIsdGhpcy5hY3R1YWw9dm9pZCAwLHRoaXMuZXhwZWN0ZWQ9dm9pZCAwLHRoaXMubm90ZT12b2lkIDAsdGhpcy51cmw9dm9pZCAwfX07ZjIucHJvdG90eXBlLmZpbGU9IiIsZjIucHJvdG90eXBlLm5hbWU9IiIsZjIucHJvdG90eXBlLnJlYXNvbj0iIixmMi5wcm90b3R5cGUubWVzc2FnZT0iIixmMi5wcm90b3R5cGUuc3RhY2s9IiIsZjIucHJvdG90eXBlLmNvbHVtbj12b2lkIDAsZjIucHJvdG90eXBlLmxpbmU9dm9pZCAwLGYyLnByb3RvdHlwZS5hbmNlc3RvcnM9dm9pZCAwLGYyLnByb3RvdHlwZS5jYXVzZT12b2lkIDAsZjIucHJvdG90eXBlLmZhdGFsPXZvaWQgMCxmMi5wcm90b3R5cGUucGxhY2U9dm9pZCAwLGYyLnByb3RvdHlwZS5ydWxlSWQ9dm9pZCAwLGYyLnByb3RvdHlwZS5zb3VyY2U9dm9pZCAwfSk7dmFyIFFpZT1iKCgpPT57S2llKCl9KTtmdW5jdGlvbiBjUHQodCxlKXtpZihlIT09dm9pZCAwJiZ0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO0Y2KHQpO2xldCBhPTAsaT0tMSxyPXQubGVuZ3RoLHM7aWYoZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD50Lmxlbmd0aCl7Zm9yKDtyLS07KWlmKHQuY29kZVBvaW50QXQocik9PT00Nyl7aWYocyl7YT1yKzE7YnJlYWt9fWVsc2UgaTwwJiYocz0hMCxpPXIrMSk7cmV0dXJuIGk8MD8iIjp0LnNsaWNlKGEsaSl9aWYoZT09PXQpcmV0dXJuIiI7bGV0IG49LTEsbz1lLmxlbmd0aC0xO2Zvcig7ci0tOylpZih0LmNvZGVQb2ludEF0KHIpPT09NDcpe2lmKHMpe2E9cisxO2JyZWFrfX1lbHNlIG48MCYmKHM9ITAsbj1yKzEpLG8+LTEmJih0LmNvZGVQb2ludEF0KHIpPT09ZS5jb2RlUG9pbnRBdChvLS0pP288MCYmKGk9cik6KG89LTEsaT1uKSk7cmV0dXJuIGE9PT1pP2k9bjppPDAmJihpPXQubGVuZ3RoKSx0LnNsaWNlKGEsaSl9ZnVuY3Rpb24gZFB0KHQpe2lmKEY2KHQpLHQubGVuZ3RoPT09MClyZXR1cm4iLiI7bGV0IGU9LTEsYT10Lmxlbmd0aCxpO2Zvcig7LS1hOylpZih0LmNvZGVQb2ludEF0KGEpPT09NDcpe2lmKGkpe2U9YTticmVha319ZWxzZSBpfHwoaT0hMCk7cmV0dXJuIGU8MD90LmNvZGVQb2ludEF0KDApPT09NDc/Ii8iOiIuIjplPT09MSYmdC5jb2RlUG9pbnRBdCgwKT09PTQ3PyIvLyI6dC5zbGljZSgwLGUpfWZ1bmN0aW9uIHBQdCh0KXtGNih0KTtsZXQgZT10Lmxlbmd0aCxhPS0xLGk9MCxyPS0xLHM9MCxuO2Zvcig7ZS0tOyl7bGV0IG89dC5jb2RlUG9pbnRBdChlKTtpZihvPT09NDcpe2lmKG4pe2k9ZSsxO2JyZWFrfWNvbnRpbnVlfWE8MCYmKG49ITAsYT1lKzEpLG89PT00Nj9yPDA/cj1lOnMhPT0xJiYocz0xKTpyPi0xJiYocz0tMSl9cmV0dXJuIHI8MHx8YTwwfHxzPT09MHx8cz09PTEmJnI9PT1hLTEmJnI9PT1pKzE/IiI6dC5zbGljZShyLGEpfWZ1bmN0aW9uIGhQdCguLi50KXtsZXQgZT0tMSxhO2Zvcig7KytlPHQubGVuZ3RoOylGNih0W2VdKSx0W2VdJiYoYT1hPT09dm9pZCAwP3RbZV06YSsiLyIrdFtlXSk7cmV0dXJuIGE9PT12b2lkIDA/Ii4iOnVQdChhKX1mdW5jdGlvbiB1UHQodCl7RjYodCk7bGV0IGU9dC5jb2RlUG9pbnRBdCgwKT09PTQ3LGE9ZlB0KHQsIWUpO3JldHVybiBhLmxlbmd0aD09PTAmJiFlJiYoYT0iLiIpLGEubGVuZ3RoPjAmJnQuY29kZVBvaW50QXQodC5sZW5ndGgtMSk9PT00NyYmKGErPSIvIiksZT8iLyIrYTphfWZ1bmN0aW9uIGZQdCh0LGUpe2xldCBhPSIiLGk9MCxyPS0xLHM9MCxuPS0xLG8sZDtmb3IoOysrbjw9dC5sZW5ndGg7KXtpZihuPHQubGVuZ3RoKW89dC5jb2RlUG9pbnRBdChuKTtlbHNle2lmKG89PT00NylicmVhaztvPTQ3fWlmKG89PT00Nyl7aWYoIShyPT09bi0xfHxzPT09MSkpaWYociE9PW4tMSYmcz09PTIpe2lmKGEubGVuZ3RoPDJ8fGkhPT0yfHxhLmNvZGVQb2ludEF0KGEubGVuZ3RoLTEpIT09NDZ8fGEuY29kZVBvaW50QXQoYS5sZW5ndGgtMikhPT00Nil7aWYoYS5sZW5ndGg+Mil7aWYoZD1hLmxhc3RJbmRleE9mKCIvIiksZCE9PWEubGVuZ3RoLTEpe2Q8MD8oYT0iIixpPTApOihhPWEuc2xpY2UoMCxkKSxpPWEubGVuZ3RoLTEtYS5sYXN0SW5kZXhPZigiLyIpKSxyPW4scz0wO2NvbnRpbnVlfX1lbHNlIGlmKGEubGVuZ3RoPjApe2E9IiIsaT0wLHI9bixzPTA7Y29udGludWV9fWUmJihhPWEubGVuZ3RoPjA/YSsiLy4uIjoiLi4iLGk9Mil9ZWxzZSBhLmxlbmd0aD4wP2ErPSIvIit0LnNsaWNlKHIrMSxuKTphPXQuc2xpY2UocisxLG4pLGk9bi1yLTE7cj1uLHM9MH1lbHNlIG89PT00NiYmcz4tMT9zKys6cz0tMX1yZXR1cm4gYX1mdW5jdGlvbiBGNih0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHQpKX12YXIgQmksSmllPWIoKCk9PntCaT17YmFzZW5hbWU6Y1B0LGRpcm5hbWU6ZFB0LGV4dG5hbWU6cFB0LGpvaW46aFB0LHNlcDoiLyJ9fSk7ZnVuY3Rpb24gbVB0KCl7cmV0dXJuIi8ifXZhciBlcmUsdHJlPWIoKCk9PntlcmU9e2N3ZDptUHR9fSk7ZnVuY3Rpb24gUDModCl7cmV0dXJuISEodCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IiYmImhyZWYiaW4gdCYmdC5ocmVmJiYicHJvdG9jb2wiaW4gdCYmdC5wcm90b2NvbCYmdC5hdXRoPT09dm9pZCAwKX12YXIgWF89YigoKT0+e30pO2Z1bmN0aW9uIGFyZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyIpdD1uZXcgVVJMKHQpO2Vsc2UgaWYoIVAzKHQpKXtsZXQgZT1uZXcgVHlwZUVycm9yKCdUaGUgInBhdGgiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyt0KyJgIik7dGhyb3cgZS5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZX1pZih0LnByb3RvY29sIT09ImZpbGU6Iil7bGV0IGU9bmV3IFR5cGVFcnJvcigiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlIik7dGhyb3cgZS5jb2RlPSJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIixlfXJldHVybiBnUHQodCl9ZnVuY3Rpb24gZ1B0KHQpe2lmKHQuaG9zdG5hbWUhPT0iIil7bGV0IGk9bmV3IFR5cGVFcnJvcignRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uIGRhcndpbicpO3Rocm93IGkuY29kZT0iRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCIsaX1sZXQgZT10LnBhdGhuYW1lLGE9LTE7Zm9yKDsrK2E8ZS5sZW5ndGg7KWlmKGUuY29kZVBvaW50QXQoYSk9PT0zNyYmZS5jb2RlUG9pbnRBdChhKzEpPT09NTApe2xldCBpPWUuY29kZVBvaW50QXQoYSsyKTtpZihpPT09NzB8fGk9PT0xMDIpe2xldCByPW5ldyBUeXBlRXJyb3IoIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIpO3Rocm93IHIuY29kZT0iRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCIscn19cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX12YXIgaXJlPWIoKCk9PntYXygpO1hfKCl9KTtmdW5jdGlvbiBRXyh0LGUpe2lmKHQmJnQuaW5jbHVkZXMoQmkuc2VwKSl0aHJvdyBuZXcgRXJyb3IoImAiK2UrImAgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYCIrQmkuc2VwKyJgIil9ZnVuY3Rpb24gSl8odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImAiK2UrImAgY2Fubm90IGJlIGVtcHR5Iil9ZnVuY3Rpb24gcnJlKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIGAiK2UrImAgcmVxdWlyZXMgYHBhdGhgIHRvIGJlIHNldCB0b28iKX1mdW5jdGlvbiBiUHQodCl7cmV0dXJuISEodCYmdHlwZW9mIHQ9PSJvYmplY3QiJiYiYnl0ZUxlbmd0aCJpbiB0JiYiYnl0ZU9mZnNldCJpbiB0KX12YXIgS18sTzYsc3JlPWIoKCk9PntRaWUoKTtKaWUoKTt0cmUoKTtpcmUoKTtLXz1bImhpc3RvcnkiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdGVtIiwiZXh0bmFtZSIsImRpcm5hbWUiXSxPNj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtsZXQgYTtlP1AzKGUpP2E9e3BhdGg6ZX06dHlwZW9mIGU9PSJzdHJpbmcifHxiUHQoZSk/YT17dmFsdWU6ZX06YT1lOmE9e30sdGhpcy5jd2Q9ImN3ZCJpbiBhPyIiOmVyZS5jd2QoKSx0aGlzLmRhdGE9e30sdGhpcy5oaXN0b3J5PVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy52YWx1ZSx0aGlzLm1hcCx0aGlzLnJlc3VsdCx0aGlzLnN0b3JlZDtsZXQgaT0tMTtmb3IoOysraTxLXy5sZW5ndGg7KXtsZXQgcz1LX1tpXTtzIGluIGEmJmFbc10hPT12b2lkIDAmJmFbc10hPT1udWxsJiYodGhpc1tzXT1zPT09Imhpc3RvcnkiP1suLi5hW3NdXTphW3NdKX1sZXQgcjtmb3IociBpbiBhKUtfLmluY2x1ZGVzKHIpfHwodGhpc1tyXT1hW3JdKX1nZXQgYmFzZW5hbWUoKXtyZXR1cm4gdHlwZW9mIHRoaXMucGF0aD09InN0cmluZyI/QmkuYmFzZW5hbWUodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGJhc2VuYW1lKGUpe0pfKGUsImJhc2VuYW1lIiksUV8oZSwiYmFzZW5hbWUiKSx0aGlzLnBhdGg9Qmkuam9pbih0aGlzLmRpcm5hbWV8fCIiLGUpfWdldCBkaXJuYW1lKCl7cmV0dXJuIHR5cGVvZiB0aGlzLnBhdGg9PSJzdHJpbmciP0JpLmRpcm5hbWUodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGRpcm5hbWUoZSl7cnJlKHRoaXMuYmFzZW5hbWUsImRpcm5hbWUiKSx0aGlzLnBhdGg9Qmkuam9pbihlfHwiIix0aGlzLmJhc2VuYW1lKX1nZXQgZXh0bmFtZSgpe3JldHVybiB0eXBlb2YgdGhpcy5wYXRoPT0ic3RyaW5nIj9CaS5leHRuYW1lKHRoaXMucGF0aCk6dm9pZCAwfXNldCBleHRuYW1lKGUpe2lmKFFfKGUsImV4dG5hbWUiKSxycmUodGhpcy5kaXJuYW1lLCJleHRuYW1lIiksZSl7aWYoZS5jb2RlUG9pbnRBdCgwKSE9PTQ2KXRocm93IG5ldyBFcnJvcigiYGV4dG5hbWVgIG11c3Qgc3RhcnQgd2l0aCBgLmAiKTtpZihlLmluY2x1ZGVzKCIuIiwxKSl0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzIil9dGhpcy5wYXRoPUJpLmpvaW4odGhpcy5kaXJuYW1lLHRoaXMuc3RlbSsoZXx8IiIpKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aC0xXX1zZXQgcGF0aChlKXtQMyhlKSYmKGU9YXJlKGUpKSxKXyhlLCJwYXRoIiksdGhpcy5wYXRoIT09ZSYmdGhpcy5oaXN0b3J5LnB1c2goZSl9Z2V0IHN0ZW0oKXtyZXR1cm4gdHlwZW9mIHRoaXMucGF0aD09InN0cmluZyI/QmkuYmFzZW5hbWUodGhpcy5wYXRoLHRoaXMuZXh0bmFtZSk6dm9pZCAwfXNldCBzdGVtKGUpe0pfKGUsInN0ZW0iKSxRXyhlLCJzdGVtIiksdGhpcy5wYXRoPUJpLmpvaW4odGhpcy5kaXJuYW1lfHwiIixlKyh0aGlzLmV4dG5hbWV8fCIiKSl9ZmFpbChlLGEsaSl7bGV0IHI9dGhpcy5tZXNzYWdlKGUsYSxpKTt0aHJvdyByLmZhdGFsPSEwLHJ9aW5mbyhlLGEsaSl7bGV0IHI9dGhpcy5tZXNzYWdlKGUsYSxpKTtyZXR1cm4gci5mYXRhbD12b2lkIDAscn1tZXNzYWdlKGUsYSxpKXtsZXQgcj1uZXcgZjIoZSxhLGkpO3JldHVybiB0aGlzLnBhdGgmJihyLm5hbWU9dGhpcy5wYXRoKyI6IityLm5hbWUsci5maWxlPXRoaXMucGF0aCksci5mYXRhbD0hMSx0aGlzLm1lc3NhZ2VzLnB1c2gocikscn10b1N0cmluZyhlKXtyZXR1cm4gdGhpcy52YWx1ZT09PXZvaWQgMD8iIjp0eXBlb2YgdGhpcy52YWx1ZT09InN0cmluZyI/dGhpcy52YWx1ZTpuZXcgVGV4dERlY29kZXIoZXx8dm9pZCAwKS5kZWNvZGUodGhpcy52YWx1ZSl9fX0pO3ZhciBucmU9YigoKT0+e3NyZSgpfSk7dmFyIG9yZSxscmU9YigoKT0+e29yZT0oZnVuY3Rpb24odCl7bGV0IGk9dGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUscj1pW3RdLHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseShzLGFyZ3VtZW50cyl9O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocyxpKSxzfSl9KTtmdW5jdGlvbiB0VCh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIit0KyJgIHdpdGhvdXQgYHBhcnNlcmAiKX1mdW5jdGlvbiBhVCh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIit0KyJgIHdpdGhvdXQgYGNvbXBpbGVyYCIpfWZ1bmN0aW9uIGlUKHQsZSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxsIGAiK3QrImAgb24gYSBmcm96ZW4gcHJvY2Vzc29yLlxuQ3JlYXRlIGEgbmV3IHByb2Nlc3NvciBmaXJzdCwgYnkgY2FsbGluZyBpdDogdXNlIGBwcm9jZXNzb3IoKWAgaW5zdGVhZCBvZiBgcHJvY2Vzc29yYC4iKX1mdW5jdGlvbiBjcmUodCl7aWYoIU42KHQpfHx0eXBlb2YgdC50eXBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBub2RlLCBnb3QgYCIrdCsiYCIpfWZ1bmN0aW9uIGRyZSh0LGUsYSl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJgIit0KyJgIGZpbmlzaGVkIGFzeW5jLiBVc2UgYCIrZSsiYCBpbnN0ZWFkIil9ZnVuY3Rpb24gdjkodCl7cmV0dXJuIHlQdCh0KT90Om5ldyBPNih0KX1mdW5jdGlvbiB5UHQodCl7cmV0dXJuISEodCYmdHlwZW9mIHQ9PSJvYmplY3QiJiYibWVzc2FnZSJpbiB0JiYibWVzc2FnZXMiaW4gdCl9ZnVuY3Rpb24geFB0KHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fHdQdCh0KX1mdW5jdGlvbiB3UHQodCl7cmV0dXJuISEodCYmdHlwZW9mIHQ9PSJvYmplY3QiJiYiYnl0ZUxlbmd0aCJpbiB0JiYiYnl0ZU9mZnNldCJpbiB0KX12YXIgeTksdlB0LGVULFI2LHByZT1iKCgpPT57UGllKCk7eTk9VTEoVmllKCksMSk7Qm4oKTtqaWUoKTtHaWUoKTtucmUoKTtscmUoKTt2UHQ9e30uaGFzT3duUHJvcGVydHksZVQ9Y2xhc3MgdCBleHRlbmRzIG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJjb3B5IiksdGhpcy5Db21waWxlcj12b2lkIDAsdGhpcy5QYXJzZXI9dm9pZCAwLHRoaXMuYXR0YWNoZXJzPVtdLHRoaXMuY29tcGlsZXI9dm9pZCAwLHRoaXMuZnJlZXplSW5kZXg9LTEsdGhpcy5mcm96ZW49dm9pZCAwLHRoaXMubmFtZXNwYWNlPXt9LHRoaXMucGFyc2VyPXZvaWQgMCx0aGlzLnRyYW5zZm9ybWVycz1HXygpfWNvcHkoKXtsZXQgZT1uZXcgdCxhPS0xO2Zvcig7KythPHRoaXMuYXR0YWNoZXJzLmxlbmd0aDspe2xldCBpPXRoaXMuYXR0YWNoZXJzW2FdO2UudXNlKC4uLmkpfXJldHVybiBlLmRhdGEoKDAseTkuZGVmYXVsdCkoITAse30sdGhpcy5uYW1lc3BhY2UpKSxlfWRhdGEoZSxhKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP2FyZ3VtZW50cy5sZW5ndGg9PT0yPyhpVCgiZGF0YSIsdGhpcy5mcm96ZW4pLHRoaXMubmFtZXNwYWNlW2VdPWEsdGhpcyk6dlB0LmNhbGwodGhpcy5uYW1lc3BhY2UsZSkmJnRoaXMubmFtZXNwYWNlW2VdfHx2b2lkIDA6ZT8oaVQoImRhdGEiLHRoaXMuZnJvemVuKSx0aGlzLm5hbWVzcGFjZT1lLHRoaXMpOnRoaXMubmFtZXNwYWNlfWZyZWV6ZSgpe2lmKHRoaXMuZnJvemVuKXJldHVybiB0aGlzO2xldCBlPXRoaXM7Zm9yKDsrK3RoaXMuZnJlZXplSW5kZXg8dGhpcy5hdHRhY2hlcnMubGVuZ3RoOyl7bGV0W2EsLi4uaV09dGhpcy5hdHRhY2hlcnNbdGhpcy5mcmVlemVJbmRleF07aWYoaVswXT09PSExKWNvbnRpbnVlO2lbMF09PT0hMCYmKGlbMF09dm9pZCAwKTtsZXQgcj1hLmNhbGwoZSwuLi5pKTt0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmdGhpcy50cmFuc2Zvcm1lcnMudXNlKHIpfXJldHVybiB0aGlzLmZyb3plbj0hMCx0aGlzLmZyZWV6ZUluZGV4PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx0aGlzfXBhcnNlKGUpe3RoaXMuZnJlZXplKCk7bGV0IGE9djkoZSksaT10aGlzLnBhcnNlcnx8dGhpcy5QYXJzZXI7cmV0dXJuIHRUKCJwYXJzZSIsaSksaShTdHJpbmcoYSksYSl9cHJvY2VzcyhlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHRoaXMuZnJlZXplKCksdFQoInByb2Nlc3MiLHRoaXMucGFyc2VyfHx0aGlzLlBhcnNlciksYVQoInByb2Nlc3MiLHRoaXMuY29tcGlsZXJ8fHRoaXMuQ29tcGlsZXIpLGE/cih2b2lkIDAsYSk6bmV3IFByb21pc2Uocik7ZnVuY3Rpb24gcihzLG4pe2xldCBvPXY5KGUpLGQ9aS5wYXJzZShvKTtpLnJ1bihkLG8sZnVuY3Rpb24ocCxsLGYpe2lmKHB8fCFsfHwhZilyZXR1cm4gYyhwKTtsZXQgZz1sLHk9aS5zdHJpbmdpZnkoZyxmKTt4UHQoeSk/Zi52YWx1ZT15OmYucmVzdWx0PXksYyhwLGYpfSk7ZnVuY3Rpb24gYyhwLGwpe3B8fCFsP24ocCk6cz9zKGwpOmEodm9pZCAwLGwpfX19cHJvY2Vzc1N5bmMoZSl7bGV0IGE9ITEsaTtyZXR1cm4gdGhpcy5mcmVlemUoKSx0VCgicHJvY2Vzc1N5bmMiLHRoaXMucGFyc2VyfHx0aGlzLlBhcnNlciksYVQoInByb2Nlc3NTeW5jIix0aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyKSx0aGlzLnByb2Nlc3MoZSxyKSxkcmUoInByb2Nlc3NTeW5jIiwicHJvY2VzcyIsYSksaTtmdW5jdGlvbiByKHMsbil7YT0hMCxXXyhzKSxpPW59fXJ1bihlLGEsaSl7Y3JlKGUpLHRoaXMuZnJlZXplKCk7bGV0IHI9dGhpcy50cmFuc2Zvcm1lcnM7cmV0dXJuIWkmJnR5cGVvZiBhPT0iZnVuY3Rpb24iJiYoaT1hLGE9dm9pZCAwKSxpP3Modm9pZCAwLGkpOm5ldyBQcm9taXNlKHMpO2Z1bmN0aW9uIHMobixvKXtsZXQgZD12OShhKTtyLnJ1bihlLGQsYyk7ZnVuY3Rpb24gYyhwLGwsZil7bGV0IGc9bHx8ZTtwP28ocCk6bj9uKGcpOmkodm9pZCAwLGcsZil9fX1ydW5TeW5jKGUsYSl7bGV0IGk9ITEscjtyZXR1cm4gdGhpcy5ydW4oZSxhLHMpLGRyZSgicnVuU3luYyIsInJ1biIsaSkscjtmdW5jdGlvbiBzKG4sbyl7V18obikscj1vLGk9ITB9fXN0cmluZ2lmeShlLGEpe3RoaXMuZnJlZXplKCk7bGV0IGk9djkoYSkscj10aGlzLmNvbXBpbGVyfHx0aGlzLkNvbXBpbGVyO3JldHVybiBhVCgic3RyaW5naWZ5IixyKSxjcmUoZSkscihlLGkpfXVzZShlLC4uLmEpe2xldCBpPXRoaXMuYXR0YWNoZXJzLHI9dGhpcy5uYW1lc3BhY2U7aWYoaVQoInVzZSIsdGhpcy5mcm96ZW4pLGUhPW51bGwpaWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpZChlLGEpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKUFycmF5LmlzQXJyYXkoZSk/byhlKTpuKGUpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYCIrZSsiYCIpO3JldHVybiB0aGlzO2Z1bmN0aW9uIHMoYyl7aWYodHlwZW9mIGM9PSJmdW5jdGlvbiIpZChjLFtdKTtlbHNlIGlmKHR5cGVvZiBjPT0ib2JqZWN0IilpZihBcnJheS5pc0FycmF5KGMpKXtsZXRbcCwuLi5sXT1jO2QocCxsKX1lbHNlIG4oYyk7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIitjKyJgIil9ZnVuY3Rpb24gbihjKXtpZighKCJwbHVnaW5zImluIGMpJiYhKCJzZXR0aW5ncyJpbiBjKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSBidXQgcmVjZWl2ZWQgYW4gZW1wdHkgcHJlc2V0LCB3aGljaCBpcyBwcm9iYWJseSBhIG1pc3Rha2U6IHByZXNldHMgdHlwaWNhbGx5IGNvbWUgd2l0aCBgcGx1Z2luc2AgYW5kIHNvbWV0aW1lcyB3aXRoIGBzZXR0aW5nc2AsIGJ1dCB0aGlzIGhhcyBuZWl0aGVyIik7byhjLnBsdWdpbnMpLGMuc2V0dGluZ3MmJihyLnNldHRpbmdzPSgwLHk5LmRlZmF1bHQpKCEwLHIuc2V0dGluZ3MsYy5zZXR0aW5ncykpfWZ1bmN0aW9uIG8oYyl7bGV0IHA9LTE7aWYoYyE9bnVsbClpZihBcnJheS5pc0FycmF5KGMpKWZvcig7KytwPGMubGVuZ3RoOyl7bGV0IGw9Y1twXTtzKGwpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgIitjKyJgIil9ZnVuY3Rpb24gZChjLHApe2xldCBsPS0xLGY9LTE7Zm9yKDsrK2w8aS5sZW5ndGg7KWlmKGlbbF1bMF09PT1jKXtmPWw7YnJlYWt9aWYoZj09PS0xKWkucHVzaChbYywuLi5wXSk7ZWxzZSBpZihwLmxlbmd0aD4wKXtsZXRbZywuLi55XT1wLHY9aVtmXVsxXTtONih2KSYmTjYoZykmJihnPSgwLHk5LmRlZmF1bHQpKCEwLHYsZykpLGlbZl09W2MsZywuLi55XX19fX0sUjY9bmV3IGVUKCkuZnJlZXplKCl9KTt2YXIgaHJlPWIoKCk9PntwcmUoKX0pO2Z1bmN0aW9uIE4zKHQsZSl7bGV0IGE9U3RyaW5nKHQpO2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBjaGFyYWN0ZXIiKTtsZXQgaT0wLHI9YS5pbmRleE9mKGUpO2Zvcig7ciE9PS0xOylpKysscj1hLmluZGV4T2YoZSxyK2UubGVuZ3RoKTtyZXR1cm4gaX12YXIgclQ9YigoKT0+e30pO2Z1bmN0aW9uIHYwKHQpe3JldHVybiB0IT09bnVsbCYmKHQ8MzJ8fHQ9PT0xMjcpfWZ1bmN0aW9uIE9lKHQpe3JldHVybiB0IT09bnVsbCYmdDwtMn1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gdCE9PW51bGwmJih0PDB8fHQ9PT0zMil9ZnVuY3Rpb24gUWUodCl7cmV0dXJuIHQ9PT0tMnx8dD09PS0xfHx0PT09MzJ9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIGU7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSE9PW51bGwmJmE+LTEmJnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKX19dmFyIGkyLFAxLHVyZSxCNixmcmUsbXJlLHkwLFByLEF0PWIoKCk9PntpMj1xbigvW0EtWmEtel0vKSxQMT1xbigvW1xkQS1aYS16XS8pLHVyZT1xbigvWyMtJyorXC0tOT0/QS1aXi1+XS8pO0I2PXFuKC9cZC8pLGZyZT1xbigvW1xkQS1GYS1mXS8pLG1yZT1xbigvWyEtLzotQFstYHstfl0vKTt5MD1xbigvXHB7UH18XHB7U30vdSksUHI9cW4oL1xzLyl9KTtmdW5jdGlvbiBNUHQodCl7bGV0IGU9W10sYT0tMTtmb3IoOysrYTx0Lmxlbmd0aDspZVthXT1Ncyh0W2FdKTtyZXR1cm4geDkoaSk7ZnVuY3Rpb24gaSguLi5yKXtsZXQgcz0tMTtmb3IoOysrczxlLmxlbmd0aDspaWYoZVtzXS5hcHBseSh0aGlzLHIpKXJldHVybiEwO3JldHVybiExfX1mdW5jdGlvbiB6UHQodCl7bGV0IGU9dDtyZXR1cm4geDkoYSk7ZnVuY3Rpb24gYShpKXtsZXQgcj1pLHM7Zm9yKHMgaW4gdClpZihyW3NdIT09ZVtzXSlyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24ga1B0KHQpe3JldHVybiB4OShlKTtmdW5jdGlvbiBlKGEpe3JldHVybiBhJiZhLnR5cGU9PT10fX1mdW5jdGlvbiB4OSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEsaSxyKXtyZXR1cm4hIShncmUoYSkmJnQuY2FsbCh0aGlzLGEsdHlwZW9mIGk9PSJudW1iZXIiP2k6dm9pZCAwLHJ8fHZvaWQgMCkpfX1mdW5jdGlvbiBTUHQoKXtyZXR1cm4hMH1mdW5jdGlvbiBncmUodCl7cmV0dXJuIHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJiJ0eXBlImluIHR9dmFyIGJyZSxNcyx2cmU9YigoKT0+e2JyZT0oZnVuY3Rpb24odCxlLGEsaSxyKXtsZXQgcz1NcyhlKTtpZihhIT1udWxsJiYodHlwZW9mIGEhPSJudW1iZXIifHxhPDB8fGE9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcG9zaXRpdmUgZmluaXRlIGluZGV4Iik7aWYoaSE9bnVsbCYmKCFicmUoaSl8fCFpLmNoaWxkcmVuKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHBhcmVudCBub2RlIik7aWYoaT09bnVsbCE9KGE9PW51bGwpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgYm90aCBwYXJlbnQgYW5kIGluZGV4Iik7cmV0dXJuIGdyZSh0KT9zLmNhbGwocix0LGEsaSk6ITF9KSxNcz0oZnVuY3Rpb24odCl7aWYodD09bnVsbClyZXR1cm4gU1B0O2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiB4OSh0KTtpZih0eXBlb2YgdD09Im9iamVjdCIpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/TVB0KHQpOnpQdCh0KTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIGtQdCh0KTt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0Iil9KX0pO3ZhciB3OT1iKCgpPT57dnJlKCl9KTt2YXIgeXJlPWIoKCk9Pnt9KTtmdW5jdGlvbiBINih0LGUsYSxpKXtsZXQgcjt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGEhPSJmdW5jdGlvbiI/KGk9YSxhPWUpOnI9ZTtsZXQgcz1NcyhyKSxuPWk/LTE6MTtvKHQsdm9pZCAwLFtdKSgpO2Z1bmN0aW9uIG8oZCxjLHApe2xldCBsPWQmJnR5cGVvZiBkPT0ib2JqZWN0Ij9kOnt9O2lmKHR5cGVvZiBsLnR5cGU9PSJzdHJpbmciKXtsZXQgZz10eXBlb2YgbC50YWdOYW1lPT0ic3RyaW5nIj9sLnRhZ05hbWU6dHlwZW9mIGwubmFtZT09InN0cmluZyI/bC5uYW1lOnZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwibmFtZSIse3ZhbHVlOiJub2RlICgiKyhkLnR5cGUrKGc/IjwiK2crIj4iOiIiKSkrIikifSl9cmV0dXJuIGY7ZnVuY3Rpb24gZigpe2xldCBnPXhyZSx5LHYsbTtpZigoIWV8fHMoZCxjLHBbcC5sZW5ndGgtMV18fHZvaWQgMCkpJiYoZz1DUHQoYShkLHApKSxnWzBdPT09eDApKXJldHVybiBnO2lmKCJjaGlsZHJlbiJpbiBkJiZkLmNoaWxkcmVuKXtsZXQgeD1kO2lmKHguY2hpbGRyZW4mJmdbMF0hPT16OSlmb3Iodj0oaT94LmNoaWxkcmVuLmxlbmd0aDotMSkrbixtPXAuY29uY2F0KHgpO3Y+LTEmJnY8eC5jaGlsZHJlbi5sZW5ndGg7KXtsZXQgTT14LmNoaWxkcmVuW3ZdO2lmKHk9byhNLHYsbSkoKSx5WzBdPT09eDApcmV0dXJuIHk7dj10eXBlb2YgeVsxXT09Im51bWJlciI/eVsxXTp2K259fXJldHVybiBnfX19ZnVuY3Rpb24gQ1B0KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6dHlwZW9mIHQ9PSJudW1iZXIiP1tNOSx0XTp0PT1udWxsP3hyZTpbdF19dmFyIHhyZSxNOSx4MCx6OSx3cmU9YigoKT0+e3c5KCk7eXJlKCk7eHJlPVtdLE05PSEwLHgwPSExLHo5PSJza2lwIn0pO3ZhciBrOT1iKCgpPT57d3JlKCl9KTtmdW5jdGlvbiBzVCh0LGUsYSl7bGV0IHI9TXMoKGF8fHt9KS5pZ25vcmV8fFtdKSxzPV9QdChlKSxuPS0xO2Zvcig7KytuPHMubGVuZ3RoOylINih0LCJ0ZXh0IixvKTtmdW5jdGlvbiBvKGMscCl7bGV0IGw9LTEsZjtmb3IoOysrbDxwLmxlbmd0aDspe2xldCBnPXBbbF0seT1mP2YuY2hpbGRyZW46dm9pZCAwO2lmKHIoZyx5P3kuaW5kZXhPZihnKTp2b2lkIDAsZikpcmV0dXJuO2Y9Z31pZihmKXJldHVybiBkKGMscCl9ZnVuY3Rpb24gZChjLHApe2xldCBsPXBbcC5sZW5ndGgtMV0sZj1zW25dWzBdLGc9c1tuXVsxXSx5PTAsbT1sLmNoaWxkcmVuLmluZGV4T2YoYykseD0hMSxNPVtdO2YubGFzdEluZGV4PTA7bGV0IFM9Zi5leGVjKGMudmFsdWUpO2Zvcig7Uzspe2xldCBGPVMuaW5kZXgsXz17aW5kZXg6Uy5pbmRleCxpbnB1dDpTLmlucHV0LHN0YWNrOlsuLi5wLGNdfSxrPWcoLi4uUyxfKTtpZih0eXBlb2Ygaz09InN0cmluZyImJihrPWsubGVuZ3RoPjA/e3R5cGU6InRleHQiLHZhbHVlOmt9OnZvaWQgMCksaz09PSExP2YubGFzdEluZGV4PUYrMTooeSE9PUYmJk0ucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6Yy52YWx1ZS5zbGljZSh5LEYpfSksQXJyYXkuaXNBcnJheShrKT9NLnB1c2goLi4uayk6ayYmTS5wdXNoKGspLHk9RitTWzBdLmxlbmd0aCx4PSEwKSwhZi5nbG9iYWwpYnJlYWs7Uz1mLmV4ZWMoYy52YWx1ZSl9cmV0dXJuIHg/KHk8Yy52YWx1ZS5sZW5ndGgmJk0ucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6Yy52YWx1ZS5zbGljZSh5KX0pLGwuY2hpbGRyZW4uc3BsaWNlKG0sMSwuLi5NKSk6TT1bY10sbStNLmxlbmd0aH19ZnVuY3Rpb24gX1B0KHQpe2xldCBlPVtdO2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZpbmQgYW5kIHJlcGxhY2UgdHVwbGUgb3IgbGlzdCBvZiB0dXBsZXMiKTtsZXQgYT0hdFswXXx8QXJyYXkuaXNBcnJheSh0WzBdKT90Olt0XSxpPS0xO2Zvcig7KytpPGEubGVuZ3RoOyl7bGV0IHI9YVtpXTtlLnB1c2goW1RQdChyWzBdKSxMUHQoclsxXSldKX1yZXR1cm4gZX1mdW5jdGlvbiBUUHQodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgUmVnRXhwKHFvKHQpLCJnIik6dH1mdW5jdGlvbiBMUHQodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIE1yZT1iKCgpPT57eDcoKTtrOSgpO3c5KCl9KTt2YXIgenJlPWIoKCk9PntNcmUoKX0pO2Z1bmN0aW9uIGNUKCl7cmV0dXJue3RyYW5zZm9ybXM6W0lQdF0sZW50ZXI6e2xpdGVyYWxBdXRvbGluazokUHQsbGl0ZXJhbEF1dG9saW5rRW1haWw6bFQsbGl0ZXJhbEF1dG9saW5rSHR0cDpsVCxsaXRlcmFsQXV0b2xpbmtXd3c6bFR9LGV4aXQ6e2xpdGVyYWxBdXRvbGluazpQUHQsbGl0ZXJhbEF1dG9saW5rRW1haWw6RVB0LGxpdGVyYWxBdXRvbGlua0h0dHA6QVB0LGxpdGVyYWxBdXRvbGlua1d3dzpEUHR9fX1mdW5jdGlvbiBkVCgpe3JldHVybnt1bnNhZmU6W3tjaGFyYWN0ZXI6IkAiLGJlZm9yZToiWytcXC0uXFx3XSIsYWZ0ZXI6IltcXC0uXFx3XSIsaW5Db25zdHJ1Y3Q6blQsbm90SW5Db25zdHJ1Y3Q6b1R9LHtjaGFyYWN0ZXI6Ii4iLGJlZm9yZToiW1d3XSIsYWZ0ZXI6IltcXC0uXFx3XSIsaW5Db25zdHJ1Y3Q6blQsbm90SW5Db25zdHJ1Y3Q6b1R9LHtjaGFyYWN0ZXI6IjoiLGJlZm9yZToiW3BzXSIsYWZ0ZXI6IlxcLyIsaW5Db25zdHJ1Y3Q6blQsbm90SW5Db25zdHJ1Y3Q6b1R9XX19ZnVuY3Rpb24gJFB0KHQpe3RoaXMuZW50ZXIoe3R5cGU6ImxpbmsiLHRpdGxlOm51bGwsdXJsOiIiLGNoaWxkcmVuOltdfSx0KX1mdW5jdGlvbiBsVCh0KXt0aGlzLmNvbmZpZy5lbnRlci5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBUHQodCl7dGhpcy5jb25maWcuZXhpdC5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBEUHQodCl7dGhpcy5jb25maWcuZXhpdC5kYXRhLmNhbGwodGhpcyx0KTtsZXQgZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2UudHlwZSxlLnVybD0iaHR0cDovLyIrdGhpcy5zbGljZVNlcmlhbGl6ZSh0KX1mdW5jdGlvbiBFUHQodCl7dGhpcy5jb25maWcuZXhpdC5hdXRvbGlua0VtYWlsLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBQUHQodCl7dGhpcy5leGl0KHQpfWZ1bmN0aW9uIElQdCh0KXtzVCh0LFtbLyhodHRwcz86XC9cL3x3d3coPz1cLikpKFstLlx3XSspKFteIFx0XHJcbl0qKS9naSxOUHRdLFsvKD88PV58XHN8XHB7UH18XHB7U30pKFstLlx3K10rKUAoWy1cd10rKD86XC5bLVx3XSspKykvZ3UsRlB0XV0se2lnbm9yZTpbImxpbmsiLCJsaW5rUmVmZXJlbmNlIl19KX1mdW5jdGlvbiBOUHQodCxlLGEsaSxyKXtsZXQgcz0iIjtpZigha3JlKHIpfHwoL153L2kudGVzdChlKSYmKGE9ZSthLGU9IiIscz0iaHR0cDovLyIpLCFPUHQoYSkpKXJldHVybiExO2xldCBuPVJQdChhK2kpO2lmKCFuWzBdKXJldHVybiExO2xldCBvPXt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDpzK2UrblswXSxjaGlsZHJlbjpbe3R5cGU6InRleHQiLHZhbHVlOmUrblswXX1dfTtyZXR1cm4gblsxXT9bbyx7dHlwZToidGV4dCIsdmFsdWU6blsxXX1dOm99ZnVuY3Rpb24gRlB0KHQsZSxhLGkpe3JldHVybiFrcmUoaSwhMCl8fC9bLVxkX10kLy50ZXN0KGEpPyExOnt0eXBlOiJsaW5rIix0aXRsZTpudWxsLHVybDoibWFpbHRvOiIrZSsiQCIrYSxjaGlsZHJlbjpbe3R5cGU6InRleHQiLHZhbHVlOmUrIkAiK2F9XX19ZnVuY3Rpb24gT1B0KHQpe2xldCBlPXQuc3BsaXQoIi4iKTtyZXR1cm4hKGUubGVuZ3RoPDJ8fGVbZS5sZW5ndGgtMV0mJigvXy8udGVzdChlW2UubGVuZ3RoLTFdKXx8IS9bYS16QS1aXGRdLy50ZXN0KGVbZS5sZW5ndGgtMV0pKXx8ZVtlLmxlbmd0aC0yXSYmKC9fLy50ZXN0KGVbZS5sZW5ndGgtMl0pfHwhL1thLXpBLVpcZF0vLnRlc3QoZVtlLmxlbmd0aC0yXSkpKX1mdW5jdGlvbiBSUHQodCl7bGV0IGU9L1shIiYnKSwuOjs8Pj9cXX1dKyQvLmV4ZWModCk7aWYoIWUpcmV0dXJuW3Qsdm9pZCAwXTt0PXQuc2xpY2UoMCxlLmluZGV4KTtsZXQgYT1lWzBdLGk9YS5pbmRleE9mKCIpIikscj1OMyh0LCIoIikscz1OMyh0LCIpIik7Zm9yKDtpIT09LTEmJnI+czspdCs9YS5zbGljZSgwLGkrMSksYT1hLnNsaWNlKGkrMSksaT1hLmluZGV4T2YoIikiKSxzKys7cmV0dXJuW3QsYV19ZnVuY3Rpb24ga3JlKHQsZSl7bGV0IGE9dC5pbnB1dC5jaGFyQ29kZUF0KHQuaW5kZXgtMSk7cmV0dXJuKHQuaW5kZXg9PT0wfHxQcihhKXx8eTAoYSkpJiYoIWV8fGEhPT00Nyl9dmFyIG5ULG9ULFNyZT1iKCgpPT57clQoKTtCbigpO0F0KCk7enJlKCk7blQ9InBocmFzaW5nIixvVD1bImF1dG9saW5rIiwibGluayIsImltYWdlIiwibGFiZWwiXX0pO3ZhciBDcmU9YigoKT0+e1NyZSgpfSk7ZnVuY3Rpb24gSTEodCl7cmV0dXJuIHQucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfXZhciBWbj1iKCgpPT57fSk7ZnVuY3Rpb24gQlB0KCl7dGhpcy5idWZmZXIoKX1mdW5jdGlvbiBIUHQodCl7dGhpcy5lbnRlcih7dHlwZToiZm9vdG5vdGVSZWZlcmVuY2UiLGlkZW50aWZpZXI6IiIsbGFiZWw6IiJ9LHQpfWZ1bmN0aW9uIHFQdCgpe3RoaXMuYnVmZmVyKCl9ZnVuY3Rpb24gVlB0KHQpe3RoaXMuZW50ZXIoe3R5cGU6ImZvb3Rub3RlRGVmaW5pdGlvbiIsaWRlbnRpZmllcjoiIixsYWJlbDoiIixjaGlsZHJlbjpbXX0sdCl9ZnVuY3Rpb24galB0KHQpe2xldCBlPXRoaXMucmVzdW1lKCksYT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2EudHlwZSxhLmlkZW50aWZpZXI9STEodGhpcy5zbGljZVNlcmlhbGl6ZSh0KSkudG9Mb3dlckNhc2UoKSxhLmxhYmVsPWV9ZnVuY3Rpb24gVVB0KHQpe3RoaXMuZXhpdCh0KX1mdW5jdGlvbiBXUHQodCl7bGV0IGU9dGhpcy5yZXN1bWUoKSxhPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07YS50eXBlLGEuaWRlbnRpZmllcj1JMSh0aGlzLnNsaWNlU2VyaWFsaXplKHQpKS50b0xvd2VyQ2FzZSgpLGEubGFiZWw9ZX1mdW5jdGlvbiBHUHQodCl7dGhpcy5leGl0KHQpfWZ1bmN0aW9uIFlQdCgpe3JldHVybiJbIn1mdW5jdGlvbiBfcmUodCxlLGEsaSl7bGV0IHI9YS5jcmVhdGVUcmFja2VyKGkpLHM9ci5tb3ZlKCJbXiIpLG49YS5lbnRlcigiZm9vdG5vdGVSZWZlcmVuY2UiKSxvPWEuZW50ZXIoInJlZmVyZW5jZSIpO3JldHVybiBzKz1yLm1vdmUoYS5zYWZlKGEuYXNzb2NpYXRpb25JZCh0KSx7YWZ0ZXI6Il0iLGJlZm9yZTpzfSkpLG8oKSxuKCkscys9ci5tb3ZlKCJdIiksc31mdW5jdGlvbiBwVCgpe3JldHVybntlbnRlcjp7Z2ZtRm9vdG5vdGVDYWxsU3RyaW5nOkJQdCxnZm1Gb290bm90ZUNhbGw6SFB0LGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOnFQdCxnZm1Gb290bm90ZURlZmluaXRpb246VlB0fSxleGl0OntnZm1Gb290bm90ZUNhbGxTdHJpbmc6alB0LGdmbUZvb3Rub3RlQ2FsbDpVUHQsZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmc6V1B0LGdmbUZvb3Rub3RlRGVmaW5pdGlvbjpHUHR9fX1mdW5jdGlvbiBoVCh0KXtsZXQgZT0hMTtyZXR1cm4gdCYmdC5maXJzdExpbmVCbGFuayYmKGU9ITApLHtoYW5kbGVyczp7Zm9vdG5vdGVEZWZpbml0aW9uOmEsZm9vdG5vdGVSZWZlcmVuY2U6X3JlfSx1bnNhZmU6W3tjaGFyYWN0ZXI6IlsiLGluQ29uc3RydWN0OlsibGFiZWwiLCJwaHJhc2luZyIsInJlZmVyZW5jZSJdfV19O2Z1bmN0aW9uIGEoaSxyLHMsbil7bGV0IG89cy5jcmVhdGVUcmFja2VyKG4pLGQ9by5tb3ZlKCJbXiIpLGM9cy5lbnRlcigiZm9vdG5vdGVEZWZpbml0aW9uIikscD1zLmVudGVyKCJsYWJlbCIpO3JldHVybiBkKz1vLm1vdmUocy5zYWZlKHMuYXNzb2NpYXRpb25JZChpKSx7YmVmb3JlOmQsYWZ0ZXI6Il0ifSkpLHAoKSxkKz1vLm1vdmUoIl06IiksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5sZW5ndGg+MCYmKG8uc2hpZnQoNCksZCs9by5tb3ZlKChlP2AKYDoiICIpK3MuaW5kZW50TGluZXMocy5jb250YWluZXJGbG93KGksby5jdXJyZW50KCkpLGU/VHJlOlpQdCkpKSxjKCksZH19ZnVuY3Rpb24gWlB0KHQsZSxhKXtyZXR1cm4gZT09PTA/dDpUcmUodCxlLGEpfWZ1bmN0aW9uIFRyZSh0LGUsYSl7cmV0dXJuKGE/IiI6IiAgICAiKSt0fXZhciBMcmU9YigoKT0+e0JuKCk7Vm4oKTtfcmUucGVlaz1ZUHR9KTt2YXIgJHJlPWIoKCk9PntMcmUoKX0pO2Z1bmN0aW9uIHVUKCl7cmV0dXJue2NhbkNvbnRhaW5Fb2xzOlsiZGVsZXRlIl0sZW50ZXI6e3N0cmlrZXRocm91Z2g6S1B0fSxleGl0OntzdHJpa2V0aHJvdWdoOlFQdH19fWZ1bmN0aW9uIGZUKCl7cmV0dXJue3Vuc2FmZTpbe2NoYXJhY3RlcjoifiIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDpYUHR9XSxoYW5kbGVyczp7ZGVsZXRlOkFyZX19fWZ1bmN0aW9uIEtQdCh0KXt0aGlzLmVudGVyKHt0eXBlOiJkZWxldGUiLGNoaWxkcmVuOltdfSx0KX1mdW5jdGlvbiBRUHQodCl7dGhpcy5leGl0KHQpfWZ1bmN0aW9uIEFyZSh0LGUsYSxpKXtsZXQgcj1hLmNyZWF0ZVRyYWNrZXIoaSkscz1hLmVudGVyKCJzdHJpa2V0aHJvdWdoIiksbj1yLm1vdmUoIn5+Iik7cmV0dXJuIG4rPWEuY29udGFpbmVyUGhyYXNpbmcodCx7Li4uci5jdXJyZW50KCksYmVmb3JlOm4sYWZ0ZXI6In4ifSksbis9ci5tb3ZlKCJ+fiIpLHMoKSxufWZ1bmN0aW9uIEpQdCgpe3JldHVybiJ+In12YXIgWFB0LERyZT1iKCgpPT57WFB0PVsiYXV0b2xpbmsiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJkZXN0aW5hdGlvblJhdyIsInJlZmVyZW5jZSIsInRpdGxlUXVvdGUiLCJ0aXRsZUFwb3N0cm9waGUiXTtBcmUucGVlaz1KUHR9KTt2YXIgRXJlPWIoKCk9PntEcmUoKX0pO2Z1bmN0aW9uIGVJdCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gSXJlKHQsZSl7bGV0IGE9ZXx8e30saT0oYS5hbGlnbnx8W10pLmNvbmNhdCgpLHI9YS5zdHJpbmdMZW5ndGh8fGVJdCxzPVtdLG49W10sbz1bXSxkPVtdLGM9MCxwPS0xO2Zvcig7KytwPHQubGVuZ3RoOyl7bGV0IHY9W10sbT1bXSx4PS0xO2Zvcih0W3BdLmxlbmd0aD5jJiYoYz10W3BdLmxlbmd0aCk7Kyt4PHRbcF0ubGVuZ3RoOyl7bGV0IE09dEl0KHRbcF1beF0pO2lmKGEuYWxpZ25EZWxpbWl0ZXJzIT09ITEpe2xldCBTPXIoTSk7bVt4XT1TLChkW3hdPT09dm9pZCAwfHxTPmRbeF0pJiYoZFt4XT1TKX12LnB1c2goTSl9bltwXT12LG9bcF09bX1sZXQgbD0tMTtpZih0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaSlmb3IoOysrbDxjOylzW2xdPVByZShpW2xdKTtlbHNle2xldCB2PVByZShpKTtmb3IoOysrbDxjOylzW2xdPXZ9bD0tMTtsZXQgZj1bXSxnPVtdO2Zvcig7KytsPGM7KXtsZXQgdj1zW2xdLG09IiIseD0iIjt2PT09OTk/KG09IjoiLHg9IjoiKTp2PT09MTA4P209IjoiOnY9PT0xMTQmJih4PSI6Iik7bGV0IE09YS5hbGlnbkRlbGltaXRlcnM9PT0hMT8xOk1hdGgubWF4KDEsZFtsXS1tLmxlbmd0aC14Lmxlbmd0aCksUz1tKyItIi5yZXBlYXQoTSkreDthLmFsaWduRGVsaW1pdGVycyE9PSExJiYoTT1tLmxlbmd0aCtNK3gubGVuZ3RoLE0+ZFtsXSYmKGRbbF09TSksZ1tsXT1NKSxmW2xdPVN9bi5zcGxpY2UoMSwwLGYpLG8uc3BsaWNlKDEsMCxnKSxwPS0xO2xldCB5PVtdO2Zvcig7KytwPG4ubGVuZ3RoOyl7bGV0IHY9bltwXSxtPW9bcF07bD0tMTtsZXQgeD1bXTtmb3IoOysrbDxjOyl7bGV0IE09dltsXXx8IiIsUz0iIixGPSIiO2lmKGEuYWxpZ25EZWxpbWl0ZXJzIT09ITEpe2xldCBfPWRbbF0tKG1bbF18fDApLGs9c1tsXTtrPT09MTE0P1M9IiAiLnJlcGVhdChfKTprPT09OTk/XyUyPyhTPSIgIi5yZXBlYXQoXy8yKy41KSxGPSIgIi5yZXBlYXQoXy8yLS41KSk6KFM9IiAiLnJlcGVhdChfLzIpLEY9Uyk6Rj0iICIucmVwZWF0KF8pfWEuZGVsaW1pdGVyU3RhcnQhPT0hMSYmIWwmJngucHVzaCgifCIpLGEucGFkZGluZyE9PSExJiYhKGEuYWxpZ25EZWxpbWl0ZXJzPT09ITEmJk09PT0iIikmJihhLmRlbGltaXRlclN0YXJ0IT09ITF8fGwpJiZ4LnB1c2goIiAiKSxhLmFsaWduRGVsaW1pdGVycyE9PSExJiZ4LnB1c2goUykseC5wdXNoKE0pLGEuYWxpZ25EZWxpbWl0ZXJzIT09ITEmJngucHVzaChGKSxhLnBhZGRpbmchPT0hMSYmeC5wdXNoKCIgIiksKGEuZGVsaW1pdGVyRW5kIT09ITF8fGwhPT1jLTEpJiZ4LnB1c2goInwiKX15LnB1c2goYS5kZWxpbWl0ZXJFbmQ9PT0hMT94LmpvaW4oIiIpLnJlcGxhY2UoLyArJC8sIiIpOnguam9pbigiIikpfXJldHVybiB5LmpvaW4oYApgKX1mdW5jdGlvbiB0SXQodCl7cmV0dXJuIHQ9PW51bGw/IiI6U3RyaW5nKHQpfWZ1bmN0aW9uIFByZSh0KXtsZXQgZT10eXBlb2YgdD09InN0cmluZyI/dC5jb2RlUG9pbnRBdCgwKTowO3JldHVybiBlPT09Njd8fGU9PT05OT85OTplPT09NzZ8fGU9PT0xMDg/MTA4OmU9PT04Mnx8ZT09PTExND8xMTQ6MH12YXIgTnJlPWIoKCk9Pnt9KTtmdW5jdGlvbiBTOSh0LGUpe2xldCBhPWV8fHt9O2Z1bmN0aW9uIGkociwuLi5zKXtsZXQgbj1pLmludmFsaWQsbz1pLmhhbmRsZXJzO2lmKHImJkZyZS5jYWxsKHIsdCkpe2xldCBkPVN0cmluZyhyW3RdKTtuPUZyZS5jYWxsKG8sZCk/b1tkXTppLnVua25vd259aWYobilyZXR1cm4gbi5jYWxsKHRoaXMsciwuLi5zKX1yZXR1cm4gaS5oYW5kbGVycz1hLmhhbmRsZXJzfHx7fSxpLmludmFsaWQ9YS5pbnZhbGlkLGkudW5rbm93bj1hLnVua25vd24saX12YXIgRnJlLG1UPWIoKCk9PntGcmU9e30uaGFzT3duUHJvcGVydHl9KTtmdW5jdGlvbiBnVCh0LGUpe2xldCBhPS0xLGk7aWYoZS5leHRlbnNpb25zKWZvcig7KythPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KWdUKHQsZS5leHRlbnNpb25zW2FdKTtmb3IoaSBpbiBlKWlmKGFJdC5jYWxsKGUsaSkpc3dpdGNoKGkpe2Nhc2UiZXh0ZW5zaW9ucyI6YnJlYWs7Y2FzZSJ1bnNhZmUiOntPcmUodFtpXSxlW2ldKTticmVha31jYXNlImpvaW4iOntPcmUodFtpXSxlW2ldKTticmVha31jYXNlImhhbmRsZXJzIjp7aUl0KHRbaV0sZVtpXSk7YnJlYWt9ZGVmYXVsdDp0Lm9wdGlvbnNbaV09ZVtpXX1yZXR1cm4gdH1mdW5jdGlvbiBPcmUodCxlKXtlJiZ0LnB1c2goLi4uZSl9ZnVuY3Rpb24gaUl0KHQsZSl7ZSYmT2JqZWN0LmFzc2lnbih0LGUpfXZhciBhSXQsUnJlPWIoKCk9PnthSXQ9e30uaGFzT3duUHJvcGVydHl9KTtmdW5jdGlvbiBCcmUodCxlLGEsaSl7bGV0IHI9YS5lbnRlcigiYmxvY2txdW90ZSIpLHM9YS5jcmVhdGVUcmFja2VyKGkpO3MubW92ZSgiPiAiKSxzLnNoaWZ0KDIpO2xldCBuPWEuaW5kZW50TGluZXMoYS5jb250YWluZXJGbG93KHQscy5jdXJyZW50KCkpLHJJdCk7cmV0dXJuIHIoKSxufWZ1bmN0aW9uIHJJdCh0LGUsYSl7cmV0dXJuIj4iKyhhPyIiOiIgIikrdH12YXIgSHJlPWIoKCk9Pnt9KTtmdW5jdGlvbiBDOSh0LGUpe3JldHVybiBxcmUodCxlLmluQ29uc3RydWN0LCEwKSYmIXFyZSh0LGUubm90SW5Db25zdHJ1Y3QsITEpfWZ1bmN0aW9uIHFyZSh0LGUsYSl7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYoZT1bZV0pLCFlfHxlLmxlbmd0aD09PTApcmV0dXJuIGE7bGV0IGk9LTE7Zm9yKDsrK2k8ZS5sZW5ndGg7KWlmKHQuaW5jbHVkZXMoZVtpXSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIGJUPWIoKCk9Pnt9KTtmdW5jdGlvbiB2VCh0LGUsYSxpKXtsZXQgcj0tMTtmb3IoOysrcjxhLnVuc2FmZS5sZW5ndGg7KWlmKGEudW5zYWZlW3JdLmNoYXJhY3Rlcj09PWAKYCYmQzkoYS5zdGFjayxhLnVuc2FmZVtyXSkpcmV0dXJuL1sgXHRdLy50ZXN0KGkuYmVmb3JlKT8iIjoiICI7cmV0dXJuYFxcCmB9dmFyIFZyZT1iKCgpPT57YlQoKX0pO2Z1bmN0aW9uIGpyZSh0LGUpe2xldCBhPVN0cmluZyh0KSxpPWEuaW5kZXhPZihlKSxyPWkscz0wLG49MDtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgc3Vic3RyaW5nIik7Zm9yKDtpIT09LTE7KWk9PT1yPysrcz5uJiYobj1zKTpzPTEscj1pK2UubGVuZ3RoLGk9YS5pbmRleE9mKGUscik7cmV0dXJuIG59dmFyIFVyZT1iKCgpPT57fSk7ZnVuY3Rpb24gcTYodCxlKXtyZXR1cm4hIShlLm9wdGlvbnMuZmVuY2VzPT09ITEmJnQudmFsdWUmJiF0LmxhbmcmJi9bXiBcclxuXS8udGVzdCh0LnZhbHVlKSYmIS9eW1x0IF0qKD86W1xyXG5dfCQpfCg/Ol58W1xyXG5dKVtcdCBdKiQvLnRlc3QodC52YWx1ZSkpfXZhciB5VD1iKCgpPT57fSk7ZnVuY3Rpb24gV3JlKHQpe2xldCBlPXQub3B0aW9ucy5mZW5jZXx8ImAiO2lmKGUhPT0iYCImJmUhPT0ifiIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGNvZGUgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5mZW5jZWAsIGV4cGVjdGVkIGBgIGAgYGAgb3IgYH5gIik7cmV0dXJuIGV9dmFyIEdyZT1iKCgpPT57fSk7ZnVuY3Rpb24gWXJlKHQsZSxhLGkpe2xldCByPVdyZShhKSxzPXQudmFsdWV8fCIiLG49cj09PSJgIj8iR3JhdmVBY2NlbnQiOiJUaWxkZSI7aWYocTYodCxhKSl7bGV0IGw9YS5lbnRlcigiY29kZUluZGVudGVkIiksZj1hLmluZGVudExpbmVzKHMsc0l0KTtyZXR1cm4gbCgpLGZ9bGV0IG89YS5jcmVhdGVUcmFja2VyKGkpLGQ9ci5yZXBlYXQoTWF0aC5tYXgoanJlKHMscikrMSwzKSksYz1hLmVudGVyKCJjb2RlRmVuY2VkIikscD1vLm1vdmUoZCk7aWYodC5sYW5nKXtsZXQgbD1hLmVudGVyKGBjb2RlRmVuY2VkTGFuZyR7bn1gKTtwKz1vLm1vdmUoYS5zYWZlKHQubGFuZyx7YmVmb3JlOnAsYWZ0ZXI6IiAiLGVuY29kZTpbImAiXSwuLi5vLmN1cnJlbnQoKX0pKSxsKCl9aWYodC5sYW5nJiZ0Lm1ldGEpe2xldCBsPWEuZW50ZXIoYGNvZGVGZW5jZWRNZXRhJHtufWApO3ArPW8ubW92ZSgiICIpLHArPW8ubW92ZShhLnNhZmUodC5tZXRhLHtiZWZvcmU6cCxhZnRlcjpgCmAsZW5jb2RlOlsiYCJdLC4uLm8uY3VycmVudCgpfSkpLGwoKX1yZXR1cm4gcCs9by5tb3ZlKGAKYCkscyYmKHArPW8ubW92ZShzK2AKYCkpLHArPW8ubW92ZShkKSxjKCkscH1mdW5jdGlvbiBzSXQodCxlLGEpe3JldHVybihhPyIiOiIgICAgIikrdH12YXIgWnJlPWIoKCk9PntVcmUoKTt5VCgpO0dyZSgpfSk7ZnVuY3Rpb24gRjModCl7bGV0IGU9dC5vcHRpb25zLnF1b3RlfHwnIic7aWYoZSE9PSciJyYmZSE9PSInIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgdGl0bGUgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5xdW90ZWAsIGV4cGVjdGVkIGBcImAsIG9yIGAnYCIpO3JldHVybiBlfXZhciBfOT1iKCgpPT57fSk7ZnVuY3Rpb24gWHJlKHQsZSxhLGkpe2xldCByPUYzKGEpLHM9cj09PSciJz8iUXVvdGUiOiJBcG9zdHJvcGhlIixuPWEuZW50ZXIoImRlZmluaXRpb24iKSxvPWEuZW50ZXIoImxhYmVsIiksZD1hLmNyZWF0ZVRyYWNrZXIoaSksYz1kLm1vdmUoIlsiKTtyZXR1cm4gYys9ZC5tb3ZlKGEuc2FmZShhLmFzc29jaWF0aW9uSWQodCkse2JlZm9yZTpjLGFmdGVyOiJdIiwuLi5kLmN1cnJlbnQoKX0pKSxjKz1kLm1vdmUoIl06ICIpLG8oKSwhdC51cmx8fC9bXDAtIFx1MDA3Rl0vLnRlc3QodC51cmwpPyhvPWEuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpLGMrPWQubW92ZSgiPCIpLGMrPWQubW92ZShhLnNhZmUodC51cmwse2JlZm9yZTpjLGFmdGVyOiI+IiwuLi5kLmN1cnJlbnQoKX0pKSxjKz1kLm1vdmUoIj4iKSk6KG89YS5lbnRlcigiZGVzdGluYXRpb25SYXciKSxjKz1kLm1vdmUoYS5zYWZlKHQudXJsLHtiZWZvcmU6YyxhZnRlcjp0LnRpdGxlPyIgIjpgCmAsLi4uZC5jdXJyZW50KCl9KSkpLG8oKSx0LnRpdGxlJiYobz1hLmVudGVyKGB0aXRsZSR7c31gKSxjKz1kLm1vdmUoIiAiK3IpLGMrPWQubW92ZShhLnNhZmUodC50aXRsZSx7YmVmb3JlOmMsYWZ0ZXI6ciwuLi5kLmN1cnJlbnQoKX0pKSxjKz1kLm1vdmUociksbygpKSxuKCksY312YXIgS3JlPWIoKCk9PntfOSgpfSk7ZnVuY3Rpb24gUXJlKHQpe2xldCBlPXQub3B0aW9ucy5lbXBoYXNpc3x8IioiO2lmKGUhPT0iKiImJmUhPT0iXyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGVtcGhhc2lzIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuZW1waGFzaXNgLCBleHBlY3RlZCBgKmAsIG9yIGBfYCIpO3JldHVybiBlfXZhciBKcmU9YigoKT0+e30pO2Z1bmN0aW9uIEhhKHQpe3JldHVybiImI3giK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifXZhciBPMz1iKCgpPT57fSk7ZnVuY3Rpb24genModCl7aWYodD09PW51bGx8fFR0KHQpfHxQcih0KSlyZXR1cm4gMTtpZih5MCh0KSlyZXR1cm4gMn12YXIgVDk9YigoKT0+e0F0KCl9KTtmdW5jdGlvbiBSMyh0LGUsYSl7bGV0IGk9enModCkscj16cyhlKTtyZXR1cm4gaT09PXZvaWQgMD9yPT09dm9pZCAwP2E9PT0iXyI/e2luc2lkZTohMCxvdXRzaWRlOiEwfTp7aW5zaWRlOiExLG91dHNpZGU6ITF9OnI9PT0xP3tpbnNpZGU6ITAsb3V0c2lkZTohMH06e2luc2lkZTohMSxvdXRzaWRlOiEwfTppPT09MT9yPT09dm9pZCAwP3tpbnNpZGU6ITEsb3V0c2lkZTohMX06cj09PTE/e2luc2lkZTohMCxvdXRzaWRlOiEwfTp7aW5zaWRlOiExLG91dHNpZGU6ITF9OnI9PT12b2lkIDA/e2luc2lkZTohMSxvdXRzaWRlOiExfTpyPT09MT97aW5zaWRlOiEwLG91dHNpZGU6ITF9OntpbnNpZGU6ITEsb3V0c2lkZTohMX19dmFyIHhUPWIoKCk9PntUOSgpfSk7ZnVuY3Rpb24gd1QodCxlLGEsaSl7bGV0IHI9UXJlKGEpLHM9YS5lbnRlcigiZW1waGFzaXMiKSxuPWEuY3JlYXRlVHJhY2tlcihpKSxvPW4ubW92ZShyKSxkPW4ubW92ZShhLmNvbnRhaW5lclBocmFzaW5nKHQse2FmdGVyOnIsYmVmb3JlOm8sLi4ubi5jdXJyZW50KCl9KSksYz1kLmNoYXJDb2RlQXQoMCkscD1SMyhpLmJlZm9yZS5jaGFyQ29kZUF0KGkuYmVmb3JlLmxlbmd0aC0xKSxjLHIpO3AuaW5zaWRlJiYoZD1IYShjKStkLnNsaWNlKDEpKTtsZXQgbD1kLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSksZj1SMyhpLmFmdGVyLmNoYXJDb2RlQXQoMCksbCxyKTtmLmluc2lkZSYmKGQ9ZC5zbGljZSgwLC0xKStIYShsKSk7bGV0IGc9bi5tb3ZlKHIpO3JldHVybiBzKCksYS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm89e2FmdGVyOmYub3V0c2lkZSxiZWZvcmU6cC5vdXRzaWRlfSxvK2QrZ31mdW5jdGlvbiBuSXQodCxlLGEpe3JldHVybiBhLm9wdGlvbnMuZW1waGFzaXN8fCIqIn12YXIgZXNlPWIoKCk9PntKcmUoKTtPMygpO3hUKCk7d1QucGVlaz1uSXR9KTtmdW5jdGlvbiBWNih0LGUsYSxpKXtsZXQgcixzLG47dHlwZW9mIGU9PSJmdW5jdGlvbiImJnR5cGVvZiBhIT0iZnVuY3Rpb24iPyhzPXZvaWQgMCxuPWUscj1hKToocz1lLG49YSxyPWkpLEg2KHQscyxvLHIpO2Z1bmN0aW9uIG8oZCxjKXtsZXQgcD1jW2MubGVuZ3RoLTFdLGw9cD9wLmNoaWxkcmVuLmluZGV4T2YoZCk6dm9pZCAwO3JldHVybiBuKGQsbCxwKX19dmFyIHRzZT1iKCgpPT57azkoKTtrOSgpfSk7dmFyIE1UPWIoKCk9Pnt0c2UoKX0pO2Z1bmN0aW9uIHcwKHQsZSl7bGV0IGE9ZXx8b0l0LGk9dHlwZW9mIGEuaW5jbHVkZUltYWdlQWx0PT0iYm9vbGVhbiI/YS5pbmNsdWRlSW1hZ2VBbHQ6ITAscj10eXBlb2YgYS5pbmNsdWRlSHRtbD09ImJvb2xlYW4iP2EuaW5jbHVkZUh0bWw6ITA7cmV0dXJuIGFzZSh0LGkscil9ZnVuY3Rpb24gYXNlKHQsZSxhKXtpZihsSXQodCkpe2lmKCJ2YWx1ZSJpbiB0KXJldHVybiB0LnR5cGU9PT0iaHRtbCImJiFhPyIiOnQudmFsdWU7aWYoZSYmImFsdCJpbiB0JiZ0LmFsdClyZXR1cm4gdC5hbHQ7aWYoImNoaWxkcmVuImluIHQpcmV0dXJuIGlzZSh0LmNoaWxkcmVuLGUsYSl9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/aXNlKHQsZSxhKToiIn1mdW5jdGlvbiBpc2UodCxlLGEpe2xldCBpPVtdLHI9LTE7Zm9yKDsrK3I8dC5sZW5ndGg7KWlbcl09YXNlKHRbcl0sZSxhKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBsSXQodCl7cmV0dXJuISEodCYmdHlwZW9mIHQ9PSJvYmplY3QiKX12YXIgb0l0LHJzZT1iKCgpPT57b0l0PXt9fSk7dmFyIEw5PWIoKCk9Pntyc2UoKX0pO2Z1bmN0aW9uICQ5KHQsZSl7bGV0IGE9ITE7cmV0dXJuIFY2KHQsZnVuY3Rpb24oaSl7aWYoInZhbHVlImluIGkmJi9ccj9cbnxcci8udGVzdChpLnZhbHVlKXx8aS50eXBlPT09ImJyZWFrIilyZXR1cm4gYT0hMCx4MH0pLCEhKCghdC5kZXB0aHx8dC5kZXB0aDwzKSYmdzAodCkmJihlLm9wdGlvbnMuc2V0ZXh0fHxhKSl9dmFyIHpUPWIoKCk9PntNVCgpO0w5KCl9KTtmdW5jdGlvbiBzc2UodCxlLGEsaSl7bGV0IHI9TWF0aC5tYXgoTWF0aC5taW4oNix0LmRlcHRofHwxKSwxKSxzPWEuY3JlYXRlVHJhY2tlcihpKTtpZigkOSh0LGEpKXtsZXQgcD1hLmVudGVyKCJoZWFkaW5nU2V0ZXh0IiksbD1hLmVudGVyKCJwaHJhc2luZyIpLGY9YS5jb250YWluZXJQaHJhc2luZyh0LHsuLi5zLmN1cnJlbnQoKSxiZWZvcmU6YApgLGFmdGVyOmAKYH0pO3JldHVybiBsKCkscCgpLGYrYApgKyhyPT09MT8iPSI6Ii0iKS5yZXBlYXQoZi5sZW5ndGgtKE1hdGgubWF4KGYubGFzdEluZGV4T2YoIlxyIiksZi5sYXN0SW5kZXhPZihgCmApKSsxKSl9bGV0IG49IiMiLnJlcGVhdChyKSxvPWEuZW50ZXIoImhlYWRpbmdBdHgiKSxkPWEuZW50ZXIoInBocmFzaW5nIik7cy5tb3ZlKG4rIiAiKTtsZXQgYz1hLmNvbnRhaW5lclBocmFzaW5nKHQse2JlZm9yZToiIyAiLGFmdGVyOmAKYCwuLi5zLmN1cnJlbnQoKX0pO3JldHVybi9eW1x0IF0vLnRlc3QoYykmJihjPUhhKGMuY2hhckNvZGVBdCgwKSkrYy5zbGljZSgxKSksYz1jP24rIiAiK2M6bixhLm9wdGlvbnMuY2xvc2VBdHgmJihjKz0iICIrbiksZCgpLG8oKSxjfXZhciBuc2U9YigoKT0+e08zKCk7elQoKX0pO2Z1bmN0aW9uIGtUKHQpe3JldHVybiB0LnZhbHVlfHwiIn1mdW5jdGlvbiBjSXQoKXtyZXR1cm4iPCJ9dmFyIG9zZT1iKCgpPT57a1QucGVlaz1jSXR9KTtmdW5jdGlvbiBTVCh0LGUsYSxpKXtsZXQgcj1GMyhhKSxzPXI9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIsbj1hLmVudGVyKCJpbWFnZSIpLG89YS5lbnRlcigibGFiZWwiKSxkPWEuY3JlYXRlVHJhY2tlcihpKSxjPWQubW92ZSgiIVsiKTtyZXR1cm4gYys9ZC5tb3ZlKGEuc2FmZSh0LmFsdCx7YmVmb3JlOmMsYWZ0ZXI6Il0iLC4uLmQuY3VycmVudCgpfSkpLGMrPWQubW92ZSgiXSgiKSxvKCksIXQudXJsJiZ0LnRpdGxlfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8obz1hLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSxjKz1kLm1vdmUoIjwiKSxjKz1kLm1vdmUoYS5zYWZlKHQudXJsLHtiZWZvcmU6YyxhZnRlcjoiPiIsLi4uZC5jdXJyZW50KCl9KSksYys9ZC5tb3ZlKCI+IikpOihvPWEuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksYys9ZC5tb3ZlKGEuc2FmZSh0LnVybCx7YmVmb3JlOmMsYWZ0ZXI6dC50aXRsZT8iICI6IikiLC4uLmQuY3VycmVudCgpfSkpKSxvKCksdC50aXRsZSYmKG89YS5lbnRlcihgdGl0bGUke3N9YCksYys9ZC5tb3ZlKCIgIityKSxjKz1kLm1vdmUoYS5zYWZlKHQudGl0bGUse2JlZm9yZTpjLGFmdGVyOnIsLi4uZC5jdXJyZW50KCl9KSksYys9ZC5tb3ZlKHIpLG8oKSksYys9ZC5tb3ZlKCIpIiksbigpLGN9ZnVuY3Rpb24gZEl0KCl7cmV0dXJuIiEifXZhciBsc2U9YigoKT0+e185KCk7U1QucGVlaz1kSXR9KTtmdW5jdGlvbiBDVCh0LGUsYSxpKXtsZXQgcj10LnJlZmVyZW5jZVR5cGUscz1hLmVudGVyKCJpbWFnZVJlZmVyZW5jZSIpLG49YS5lbnRlcigibGFiZWwiKSxvPWEuY3JlYXRlVHJhY2tlcihpKSxkPW8ubW92ZSgiIVsiKSxjPWEuc2FmZSh0LmFsdCx7YmVmb3JlOmQsYWZ0ZXI6Il0iLC4uLm8uY3VycmVudCgpfSk7ZCs9by5tb3ZlKGMrIl1bIiksbigpO2xldCBwPWEuc3RhY2s7YS5zdGFjaz1bXSxuPWEuZW50ZXIoInJlZmVyZW5jZSIpO2xldCBsPWEuc2FmZShhLmFzc29jaWF0aW9uSWQodCkse2JlZm9yZTpkLGFmdGVyOiJdIiwuLi5vLmN1cnJlbnQoKX0pO3JldHVybiBuKCksYS5zdGFjaz1wLHMoKSxyPT09ImZ1bGwifHwhY3x8YyE9PWw/ZCs9by5tb3ZlKGwrIl0iKTpyPT09InNob3J0Y3V0Ij9kPWQuc2xpY2UoMCwtMSk6ZCs9by5tb3ZlKCJdIiksZH1mdW5jdGlvbiBwSXQoKXtyZXR1cm4iISJ9dmFyIGNzZT1iKCgpPT57Q1QucGVlaz1wSXR9KTtmdW5jdGlvbiBfVCh0LGUsYSl7bGV0IGk9dC52YWx1ZXx8IiIscj0iYCIscz0tMTtmb3IoO25ldyBSZWdFeHAoIihefFteYF0pIityKyIoW15gXXwkKSIpLnRlc3QoaSk7KXIrPSJgIjtmb3IoL1teIFxyXG5dLy50ZXN0KGkpJiYoL15bIFxyXG5dLy50ZXN0KGkpJiYvWyBcclxuXSQvLnRlc3QoaSl8fC9eYHxgJC8udGVzdChpKSkmJihpPSIgIitpKyIgIik7KytzPGEudW5zYWZlLmxlbmd0aDspe2xldCBuPWEudW5zYWZlW3NdLG89YS5jb21waWxlUGF0dGVybihuKSxkO2lmKG4uYXRCcmVhaylmb3IoO2Q9by5leGVjKGkpOyl7bGV0IGM9ZC5pbmRleDtpLmNoYXJDb2RlQXQoYyk9PT0xMCYmaS5jaGFyQ29kZUF0KGMtMSk9PT0xMyYmYy0tLGk9aS5zbGljZSgwLGMpKyIgIitpLnNsaWNlKGQuaW5kZXgrMSl9fXJldHVybiByK2krcn1mdW5jdGlvbiBoSXQoKXtyZXR1cm4iYCJ9dmFyIGRzZT1iKCgpPT57X1QucGVlaz1oSXR9KTtmdW5jdGlvbiBUVCh0LGUpe2xldCBhPXcwKHQpO3JldHVybiEhKCFlLm9wdGlvbnMucmVzb3VyY2VMaW5rJiZ0LnVybCYmIXQudGl0bGUmJnQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPT09MSYmdC5jaGlsZHJlblswXS50eXBlPT09InRleHQiJiYoYT09PXQudXJsfHwibWFpbHRvOiIrYT09PXQudXJsKSYmL15bYS16XVthLXorLi1dKzovaS50ZXN0KHQudXJsKSYmIS9bXDAtIDw+XHUwMDdGXS8udGVzdCh0LnVybCkpfXZhciBwc2U9YigoKT0+e0w5KCl9KTtmdW5jdGlvbiBMVCh0LGUsYSxpKXtsZXQgcj1GMyhhKSxzPXI9PT0nIic/IlF1b3RlIjoiQXBvc3Ryb3BoZSIsbj1hLmNyZWF0ZVRyYWNrZXIoaSksbyxkO2lmKFRUKHQsYSkpe2xldCBwPWEuc3RhY2s7YS5zdGFjaz1bXSxvPWEuZW50ZXIoImF1dG9saW5rIik7bGV0IGw9bi5tb3ZlKCI8Iik7cmV0dXJuIGwrPW4ubW92ZShhLmNvbnRhaW5lclBocmFzaW5nKHQse2JlZm9yZTpsLGFmdGVyOiI+IiwuLi5uLmN1cnJlbnQoKX0pKSxsKz1uLm1vdmUoIj4iKSxvKCksYS5zdGFjaz1wLGx9bz1hLmVudGVyKCJsaW5rIiksZD1hLmVudGVyKCJsYWJlbCIpO2xldCBjPW4ubW92ZSgiWyIpO3JldHVybiBjKz1uLm1vdmUoYS5jb250YWluZXJQaHJhc2luZyh0LHtiZWZvcmU6YyxhZnRlcjoiXSgiLC4uLm4uY3VycmVudCgpfSkpLGMrPW4ubW92ZSgiXSgiKSxkKCksIXQudXJsJiZ0LnRpdGxlfHwvW1wwLSBcdTAwN0ZdLy50ZXN0KHQudXJsKT8oZD1hLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKSxjKz1uLm1vdmUoIjwiKSxjKz1uLm1vdmUoYS5zYWZlKHQudXJsLHtiZWZvcmU6YyxhZnRlcjoiPiIsLi4ubi5jdXJyZW50KCl9KSksYys9bi5tb3ZlKCI+IikpOihkPWEuZW50ZXIoImRlc3RpbmF0aW9uUmF3IiksYys9bi5tb3ZlKGEuc2FmZSh0LnVybCx7YmVmb3JlOmMsYWZ0ZXI6dC50aXRsZT8iICI6IikiLC4uLm4uY3VycmVudCgpfSkpKSxkKCksdC50aXRsZSYmKGQ9YS5lbnRlcihgdGl0bGUke3N9YCksYys9bi5tb3ZlKCIgIityKSxjKz1uLm1vdmUoYS5zYWZlKHQudGl0bGUse2JlZm9yZTpjLGFmdGVyOnIsLi4ubi5jdXJyZW50KCl9KSksYys9bi5tb3ZlKHIpLGQoKSksYys9bi5tb3ZlKCIpIiksbygpLGN9ZnVuY3Rpb24gdUl0KHQsZSxhKXtyZXR1cm4gVFQodCxhKT8iPCI6IlsifXZhciBoc2U9YigoKT0+e185KCk7cHNlKCk7TFQucGVlaz11SXR9KTtmdW5jdGlvbiAkVCh0LGUsYSxpKXtsZXQgcj10LnJlZmVyZW5jZVR5cGUscz1hLmVudGVyKCJsaW5rUmVmZXJlbmNlIiksbj1hLmVudGVyKCJsYWJlbCIpLG89YS5jcmVhdGVUcmFja2VyKGkpLGQ9by5tb3ZlKCJbIiksYz1hLmNvbnRhaW5lclBocmFzaW5nKHQse2JlZm9yZTpkLGFmdGVyOiJdIiwuLi5vLmN1cnJlbnQoKX0pO2QrPW8ubW92ZShjKyJdWyIpLG4oKTtsZXQgcD1hLnN0YWNrO2Euc3RhY2s9W10sbj1hLmVudGVyKCJyZWZlcmVuY2UiKTtsZXQgbD1hLnNhZmUoYS5hc3NvY2lhdGlvbklkKHQpLHtiZWZvcmU6ZCxhZnRlcjoiXSIsLi4uby5jdXJyZW50KCl9KTtyZXR1cm4gbigpLGEuc3RhY2s9cCxzKCkscj09PSJmdWxsInx8IWN8fGMhPT1sP2QrPW8ubW92ZShsKyJdIik6cj09PSJzaG9ydGN1dCI/ZD1kLnNsaWNlKDAsLTEpOmQrPW8ubW92ZSgiXSIpLGR9ZnVuY3Rpb24gZkl0KCl7cmV0dXJuIlsifXZhciB1c2U9YigoKT0+eyRULnBlZWs9Zkl0fSk7ZnVuY3Rpb24gQjModCl7bGV0IGU9dC5vcHRpb25zLmJ1bGxldHx8IioiO2lmKGUhPT0iKiImJmUhPT0iKyImJmUhPT0iLSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuYnVsbGV0YCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIpO3JldHVybiBlfXZhciBBOT1iKCgpPT57fSk7ZnVuY3Rpb24gZnNlKHQpe2xldCBlPUIzKHQpLGE9dC5vcHRpb25zLmJ1bGxldE90aGVyO2lmKCFhKXJldHVybiBlPT09IioiPyItIjoiKiI7aWYoYSE9PSIqIiYmYSE9PSIrIiYmYSE9PSItIil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIithKyJgIGZvciBgb3B0aW9ucy5idWxsZXRPdGhlcmAsIGV4cGVjdGVkIGAqYCwgYCtgLCBvciBgLWAiKTtpZihhPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGBidWxsZXRgIChgIitlKyJgKSBhbmQgYGJ1bGxldE90aGVyYCAoYCIrYSsiYCkgdG8gYmUgZGlmZmVyZW50Iik7cmV0dXJuIGF9dmFyIG1zZT1iKCgpPT57QTkoKX0pO2Z1bmN0aW9uIGdzZSh0KXtsZXQgZT10Lm9wdGlvbnMuYnVsbGV0T3JkZXJlZHx8Ii4iO2lmKGUhPT0iLiImJmUhPT0iKSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3JkZXJlZGAsIGV4cGVjdGVkIGAuYCBvciBgKWAiKTtyZXR1cm4gZX12YXIgYnNlPWIoKCk9Pnt9KTtmdW5jdGlvbiBEOSh0KXtsZXQgZT10Lm9wdGlvbnMucnVsZXx8IioiO2lmKGUhPT0iKiImJmUhPT0iLSImJmUhPT0iXyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggYCIrZSsiYCBmb3IgYG9wdGlvbnMucnVsZWAsIGV4cGVjdGVkIGAqYCwgYC1gLCBvciBgX2AiKTtyZXR1cm4gZX12YXIgQVQ9YigoKT0+e30pO2Z1bmN0aW9uIHZzZSh0LGUsYSxpKXtsZXQgcj1hLmVudGVyKCJsaXN0Iikscz1hLmJ1bGxldEN1cnJlbnQsbj10Lm9yZGVyZWQ/Z3NlKGEpOkIzKGEpLG89dC5vcmRlcmVkP249PT0iLiI/IikiOiIuIjpmc2UoYSksZD1lJiZhLmJ1bGxldExhc3RVc2VkP249PT1hLmJ1bGxldExhc3RVc2VkOiExO2lmKCF0Lm9yZGVyZWQpe2xldCBwPXQuY2hpbGRyZW4/dC5jaGlsZHJlblswXTp2b2lkIDA7aWYoKG49PT0iKiJ8fG49PT0iLSIpJiZwJiYoIXAuY2hpbGRyZW58fCFwLmNoaWxkcmVuWzBdKSYmYS5zdGFja1thLnN0YWNrLmxlbmd0aC0xXT09PSJsaXN0IiYmYS5zdGFja1thLnN0YWNrLmxlbmd0aC0yXT09PSJsaXN0SXRlbSImJmEuc3RhY2tbYS5zdGFjay5sZW5ndGgtM109PT0ibGlzdCImJmEuc3RhY2tbYS5zdGFjay5sZW5ndGgtNF09PT0ibGlzdEl0ZW0iJiZhLmluZGV4U3RhY2tbYS5pbmRleFN0YWNrLmxlbmd0aC0xXT09PTAmJmEuaW5kZXhTdGFja1thLmluZGV4U3RhY2subGVuZ3RoLTJdPT09MCYmYS5pbmRleFN0YWNrW2EuaW5kZXhTdGFjay5sZW5ndGgtM109PT0wJiYoZD0hMCksRDkoYSk9PT1uJiZwKXtsZXQgbD0tMTtmb3IoOysrbDx0LmNoaWxkcmVuLmxlbmd0aDspe2xldCBmPXQuY2hpbGRyZW5bbF07aWYoZiYmZi50eXBlPT09Imxpc3RJdGVtIiYmZi5jaGlsZHJlbiYmZi5jaGlsZHJlblswXSYmZi5jaGlsZHJlblswXS50eXBlPT09InRoZW1hdGljQnJlYWsiKXtkPSEwO2JyZWFrfX19fWQmJihuPW8pLGEuYnVsbGV0Q3VycmVudD1uO2xldCBjPWEuY29udGFpbmVyRmxvdyh0LGkpO3JldHVybiBhLmJ1bGxldExhc3RVc2VkPW4sYS5idWxsZXRDdXJyZW50PXMscigpLGN9dmFyIHlzZT1iKCgpPT57QTkoKTttc2UoKTtic2UoKTtBVCgpfSk7ZnVuY3Rpb24geHNlKHQpe2xldCBlPXQub3B0aW9ucy5saXN0SXRlbUluZGVudHx8Im9uZSI7aWYoZSE9PSJ0YWIiJiZlIT09Im9uZSImJmUhPT0ibWl4ZWQiKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiK2UrImAgZm9yIGBvcHRpb25zLmxpc3RJdGVtSW5kZW50YCwgZXhwZWN0ZWQgYHRhYmAsIGBvbmVgLCBvciBgbWl4ZWRgIik7cmV0dXJuIGV9dmFyIHdzZT1iKCgpPT57fSk7ZnVuY3Rpb24gTXNlKHQsZSxhLGkpe2xldCByPXhzZShhKSxzPWEuYnVsbGV0Q3VycmVudHx8QjMoYSk7ZSYmZS50eXBlPT09Imxpc3QiJiZlLm9yZGVyZWQmJihzPSh0eXBlb2YgZS5zdGFydD09Im51bWJlciImJmUuc3RhcnQ+LTE/ZS5zdGFydDoxKSsoYS5vcHRpb25zLmluY3JlbWVudExpc3RNYXJrZXI9PT0hMT8wOmUuY2hpbGRyZW4uaW5kZXhPZih0KSkrcyk7bGV0IG49cy5sZW5ndGgrMTsocj09PSJ0YWIifHxyPT09Im1peGVkIiYmKGUmJmUudHlwZT09PSJsaXN0IiYmZS5zcHJlYWR8fHQuc3ByZWFkKSkmJihuPU1hdGguY2VpbChuLzQpKjQpO2xldCBvPWEuY3JlYXRlVHJhY2tlcihpKTtvLm1vdmUocysiICIucmVwZWF0KG4tcy5sZW5ndGgpKSxvLnNoaWZ0KG4pO2xldCBkPWEuZW50ZXIoImxpc3RJdGVtIiksYz1hLmluZGVudExpbmVzKGEuY29udGFpbmVyRmxvdyh0LG8uY3VycmVudCgpKSxwKTtyZXR1cm4gZCgpLGM7ZnVuY3Rpb24gcChsLGYsZyl7cmV0dXJuIGY/KGc/IiI6IiAiLnJlcGVhdChuKSkrbDooZz9zOnMrIiAiLnJlcGVhdChuLXMubGVuZ3RoKSkrbH19dmFyIHpzZT1iKCgpPT57QTkoKTt3c2UoKX0pO2Z1bmN0aW9uIGtzZSh0LGUsYSxpKXtsZXQgcj1hLmVudGVyKCJwYXJhZ3JhcGgiKSxzPWEuZW50ZXIoInBocmFzaW5nIiksbj1hLmNvbnRhaW5lclBocmFzaW5nKHQsaSk7cmV0dXJuIHMoKSxyKCksbn12YXIgU3NlPWIoKCk9Pnt9KTt2YXIgRFQsQ3NlPWIoKCk9Pnt3OSgpO0RUPU1zKFsiYnJlYWsiLCJkZWxldGUiLCJlbXBoYXNpcyIsImZvb3Rub3RlIiwiZm9vdG5vdGVSZWZlcmVuY2UiLCJpbWFnZSIsImltYWdlUmVmZXJlbmNlIiwiaW5saW5lQ29kZSIsImlubGluZU1hdGgiLCJsaW5rIiwibGlua1JlZmVyZW5jZSIsIm1keEpzeFRleHRFbGVtZW50IiwibWR4VGV4dEV4cHJlc3Npb24iLCJzdHJvbmciLCJ0ZXh0IiwidGV4dERpcmVjdGl2ZSJdKX0pO3ZhciBfc2U9YigoKT0+e0NzZSgpfSk7ZnVuY3Rpb24gVHNlKHQsZSxhLGkpe3JldHVybih0LmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIERUKG4pfSk/YS5jb250YWluZXJQaHJhc2luZzphLmNvbnRhaW5lckZsb3cpLmNhbGwoYSx0LGkpfXZhciBMc2U9YigoKT0+e19zZSgpfSk7ZnVuY3Rpb24gJHNlKHQpe2xldCBlPXQub3B0aW9ucy5zdHJvbmd8fCIqIjtpZihlIT09IioiJiZlIT09Il8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNlcmlhbGl6ZSBzdHJvbmcgd2l0aCBgIitlKyJgIGZvciBgb3B0aW9ucy5zdHJvbmdgLCBleHBlY3RlZCBgKmAsIG9yIGBfYCIpO3JldHVybiBlfXZhciBBc2U9YigoKT0+e30pO2Z1bmN0aW9uIEVUKHQsZSxhLGkpe2xldCByPSRzZShhKSxzPWEuZW50ZXIoInN0cm9uZyIpLG49YS5jcmVhdGVUcmFja2VyKGkpLG89bi5tb3ZlKHIrciksZD1uLm1vdmUoYS5jb250YWluZXJQaHJhc2luZyh0LHthZnRlcjpyLGJlZm9yZTpvLC4uLm4uY3VycmVudCgpfSkpLGM9ZC5jaGFyQ29kZUF0KDApLHA9UjMoaS5iZWZvcmUuY2hhckNvZGVBdChpLmJlZm9yZS5sZW5ndGgtMSksYyxyKTtwLmluc2lkZSYmKGQ9SGEoYykrZC5zbGljZSgxKSk7bGV0IGw9ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTEpLGY9UjMoaS5hZnRlci5jaGFyQ29kZUF0KDApLGwscik7Zi5pbnNpZGUmJihkPWQuc2xpY2UoMCwtMSkrSGEobCkpO2xldCBnPW4ubW92ZShyK3IpO3JldHVybiBzKCksYS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm89e2FmdGVyOmYub3V0c2lkZSxiZWZvcmU6cC5vdXRzaWRlfSxvK2QrZ31mdW5jdGlvbiBtSXQodCxlLGEpe3JldHVybiBhLm9wdGlvbnMuc3Ryb25nfHwiKiJ9dmFyIERzZT1iKCgpPT57QXNlKCk7TzMoKTt4VCgpO0VULnBlZWs9bUl0fSk7ZnVuY3Rpb24gRXNlKHQsZSxhLGkpe3JldHVybiBhLnNhZmUodC52YWx1ZSxpKX12YXIgUHNlPWIoKCk9Pnt9KTtmdW5jdGlvbiBJc2UodCl7bGV0IGU9dC5vcHRpb25zLnJ1bGVSZXBldGl0aW9ufHwzO2lmKGU8Myl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgcnVsZXMgd2l0aCByZXBldGl0aW9uIGAiK2UrImAgZm9yIGBvcHRpb25zLnJ1bGVSZXBldGl0aW9uYCwgZXhwZWN0ZWQgYDNgIG9yIG1vcmUiKTtyZXR1cm4gZX12YXIgTnNlPWIoKCk9Pnt9KTtmdW5jdGlvbiBGc2UodCxlLGEpe2xldCBpPShEOShhKSsoYS5vcHRpb25zLnJ1bGVTcGFjZXM/IiAiOiIiKSkucmVwZWF0KElzZShhKSk7cmV0dXJuIGEub3B0aW9ucy5ydWxlU3BhY2VzP2kuc2xpY2UoMCwtMSk6aX12YXIgT3NlPWIoKCk9PntOc2UoKTtBVCgpfSk7dmFyIE0wLFBUPWIoKCk9PntIcmUoKTtWcmUoKTtacmUoKTtLcmUoKTtlc2UoKTtuc2UoKTtvc2UoKTtsc2UoKTtjc2UoKTtkc2UoKTtoc2UoKTt1c2UoKTt5c2UoKTt6c2UoKTtTc2UoKTtMc2UoKTtEc2UoKTtQc2UoKTtPc2UoKTtNMD17YmxvY2txdW90ZTpCcmUsYnJlYWs6dlQsY29kZTpZcmUsZGVmaW5pdGlvbjpYcmUsZW1waGFzaXM6d1QsaGFyZEJyZWFrOnZULGhlYWRpbmc6c3NlLGh0bWw6a1QsaW1hZ2U6U1QsaW1hZ2VSZWZlcmVuY2U6Q1QsaW5saW5lQ29kZTpfVCxsaW5rOkxULGxpbmtSZWZlcmVuY2U6JFQsbGlzdDp2c2UsbGlzdEl0ZW06TXNlLHBhcmFncmFwaDprc2Uscm9vdDpUc2Usc3Ryb25nOkVULHRleHQ6RXNlLHRoZW1hdGljQnJlYWs6RnNlfX0pO2Z1bmN0aW9uIGdJdCh0LGUsYSxpKXtpZihlLnR5cGU9PT0iY29kZSImJnE2KGUsaSkmJih0LnR5cGU9PT0ibGlzdCJ8fHQudHlwZT09PWUudHlwZSYmcTYodCxpKSkpcmV0dXJuITE7aWYoInNwcmVhZCJpbiBhJiZ0eXBlb2YgYS5zcHJlYWQ9PSJib29sZWFuIilyZXR1cm4gdC50eXBlPT09InBhcmFncmFwaCImJih0LnR5cGU9PT1lLnR5cGV8fGUudHlwZT09PSJkZWZpbml0aW9uInx8ZS50eXBlPT09ImhlYWRpbmciJiYkOShlLGkpKT92b2lkIDA6YS5zcHJlYWQ/MTowfXZhciBSc2UsQnNlPWIoKCk9Pnt5VCgpO3pUKCk7UnNlPVtnSXRdfSk7dmFyIHowLEhzZSxxc2U9YigoKT0+e3owPVsiYXV0b2xpbmsiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJkZXN0aW5hdGlvblJhdyIsInJlZmVyZW5jZSIsInRpdGxlUXVvdGUiLCJ0aXRsZUFwb3N0cm9waGUiXSxIc2U9W3tjaGFyYWN0ZXI6IgkiLGFmdGVyOiJbXFxyXFxuXSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiCSIsYmVmb3JlOiJbXFxyXFxuXSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiCSIsaW5Db25zdHJ1Y3Q6WyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwiY29kZUZlbmNlZExhbmdUaWxkZSJdfSx7Y2hhcmFjdGVyOiJcciIsaW5Db25zdHJ1Y3Q6WyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwiY29kZUZlbmNlZExhbmdUaWxkZSIsImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTWV0YVRpbGRlIiwiZGVzdGluYXRpb25MaXRlcmFsIiwiaGVhZGluZ0F0eCJdfSx7Y2hhcmFjdGVyOmAKYCxpbkNvbnN0cnVjdDpbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwiY29kZUZlbmNlZE1ldGFHcmF2ZUFjY2VudCIsImNvZGVGZW5jZWRNZXRhVGlsZGUiLCJkZXN0aW5hdGlvbkxpdGVyYWwiLCJoZWFkaW5nQXR4Il19LHtjaGFyYWN0ZXI6IiAiLGFmdGVyOiJbXFxyXFxuXSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiICIsYmVmb3JlOiJbXFxyXFxuXSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIn0se2NoYXJhY3RlcjoiICIsaW5Db25zdHJ1Y3Q6WyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwiY29kZUZlbmNlZExhbmdUaWxkZSJdfSx7Y2hhcmFjdGVyOiIhIixhZnRlcjoiXFxbIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OnowfSx7Y2hhcmFjdGVyOiciJyxpbkNvbnN0cnVjdDoidGl0bGVRdW90ZSJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiIyJ9LHtjaGFyYWN0ZXI6IiMiLGluQ29uc3RydWN0OiJoZWFkaW5nQXR4IixhZnRlcjpgKD86W1xyCl18JClgfSx7Y2hhcmFjdGVyOiImIixhZnRlcjoiWyNBLVphLXpdIixpbkNvbnN0cnVjdDoicGhyYXNpbmcifSx7Y2hhcmFjdGVyOiInIixpbkNvbnN0cnVjdDoidGl0bGVBcG9zdHJvcGhlIn0se2NoYXJhY3RlcjoiKCIsaW5Db25zdHJ1Y3Q6ImRlc3RpbmF0aW9uUmF3In0se2JlZm9yZToiXFxdIixjaGFyYWN0ZXI6IigiLGluQ29uc3RydWN0OiJwaHJhc2luZyIsbm90SW5Db25zdHJ1Y3Q6ejB9LHthdEJyZWFrOiEwLGJlZm9yZToiXFxkKyIsY2hhcmFjdGVyOiIpIn0se2NoYXJhY3RlcjoiKSIsaW5Db25zdHJ1Y3Q6ImRlc3RpbmF0aW9uUmF3In0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiIqIixhZnRlcjpgKD86WyAJXHIKKl0pYH0se2NoYXJhY3RlcjoiKiIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDp6MH0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiIrIixhZnRlcjpgKD86WyAJXHIKXSlgfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6Ii0iLGFmdGVyOmAoPzpbIAlccgotXSlgfSx7YXRCcmVhazohMCxiZWZvcmU6IlxcZCsiLGNoYXJhY3RlcjoiLiIsYWZ0ZXI6YCg/OlsgCVxyCl18JClgfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6IjwiLGFmdGVyOiJbIS8/QS1aYS16XSJ9LHtjaGFyYWN0ZXI6IjwiLGFmdGVyOiJbIS8/QS1aYS16XSIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDp6MH0se2NoYXJhY3RlcjoiPCIsaW5Db25zdHJ1Y3Q6ImRlc3RpbmF0aW9uTGl0ZXJhbCJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiPSJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiPiJ9LHtjaGFyYWN0ZXI6Ij4iLGluQ29uc3RydWN0OiJkZXN0aW5hdGlvbkxpdGVyYWwifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6IlsifSx7Y2hhcmFjdGVyOiJbIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OnowfSx7Y2hhcmFjdGVyOiJbIixpbkNvbnN0cnVjdDpbImxhYmVsIiwicmVmZXJlbmNlIl19LHtjaGFyYWN0ZXI6IlxcIixhZnRlcjoiW1xcclxcbl0iLGluQ29uc3RydWN0OiJwaHJhc2luZyJ9LHtjaGFyYWN0ZXI6Il0iLGluQ29uc3RydWN0OlsibGFiZWwiLCJyZWZlcmVuY2UiXX0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiJfIn0se2NoYXJhY3RlcjoiXyIsaW5Db25zdHJ1Y3Q6InBocmFzaW5nIixub3RJbkNvbnN0cnVjdDp6MH0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiJgIn0se2NoYXJhY3RlcjoiYCIsaW5Db25zdHJ1Y3Q6WyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwiY29kZUZlbmNlZE1ldGFHcmF2ZUFjY2VudCJdfSx7Y2hhcmFjdGVyOiJgIixpbkNvbnN0cnVjdDoicGhyYXNpbmciLG5vdEluQ29uc3RydWN0OnowfSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6In4ifV19KTtmdW5jdGlvbiBqbih0KXtsZXQgZT0iJiIrdCsiOyI7VnNlLmlubmVySFRNTD1lO2xldCBhPVZzZS50ZXh0Q29udGVudDtyZXR1cm4gYS5jaGFyQ29kZUF0KGEubGVuZ3RoLTEpPT09NTkmJnQhPT0ic2VtaSJ8fGE9PT1lPyExOmF9dmFyIFZzZSxqNj1iKCgpPT57VnNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImkiKX0pO2Z1bmN0aW9uIEgzKHQsZSl7bGV0IGE9TnVtYmVyLnBhcnNlSW50KHQsZSk7cmV0dXJuIGE8OXx8YT09PTExfHxhPjEzJiZhPDMyfHxhPjEyNiYmYTwxNjB8fGE+NTUyOTUmJmE8NTczNDR8fGE+NjQ5NzUmJmE8NjUwMDh8fChhJjY1NTM1KT09PTY1NTM1fHwoYSY2NTUzNSk9PT02NTUzNHx8YT4xMTE0MTExPyJcdUZGRkQiOlN0cmluZy5mcm9tQ29kZVBvaW50KGEpfXZhciBFOT1iKCgpPT57fSk7ZnVuY3Rpb24gUDkodCl7cmV0dXJuIHQucmVwbGFjZShiSXQsdkl0KX1mdW5jdGlvbiB2SXQodCxlLGEpe2lmKGUpcmV0dXJuIGU7aWYoYS5jaGFyQ29kZUF0KDApPT09MzUpe2xldCByPWEuY2hhckNvZGVBdCgxKSxzPXI9PT0xMjB8fHI9PT04ODtyZXR1cm4gSDMoYS5zbGljZShzPzI6MSkscz8xNjoxMCl9cmV0dXJuIGpuKGEpfHx0fXZhciBiSXQsSVQ9YigoKT0+e2o2KCk7RTkoKTtiSXQ9L1xcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcZHsxLDd9fHhbXGRhLWZdezEsNn0pfFtcZGEtel17MSwzMX0pOy9naX0pO2Z1bmN0aW9uIGpzZSh0KXtyZXR1cm4gdC5sYWJlbHx8IXQuaWRlbnRpZmllcj90LmxhYmVsfHwiIjpQOSh0LmlkZW50aWZpZXIpfXZhciBVc2U9YigoKT0+e0lUKCl9KTtmdW5jdGlvbiBXc2UodCl7aWYoIXQuX2NvbXBpbGVkKXtsZXQgZT0odC5hdEJyZWFrPyJbXFxyXFxuXVtcXHQgXSoiOiIiKSsodC5iZWZvcmU/Iig/OiIrdC5iZWZvcmUrIikiOiIiKTt0Ll9jb21waWxlZD1uZXcgUmVnRXhwKChlPyIoIitlKyIpIjoiIikrKC9bfFxce30oKVtcXV4kKyo/Li1dLy50ZXN0KHQuY2hhcmFjdGVyKT8iXFwiOiIiKSt0LmNoYXJhY3RlcisodC5hZnRlcj8iKD86Iit0LmFmdGVyKyIpIjoiIiksImciKX1yZXR1cm4gdC5fY29tcGlsZWR9dmFyIEdzZT1iKCgpPT57fSk7ZnVuY3Rpb24gWXNlKHQsZSxhKXtsZXQgaT1lLmluZGV4U3RhY2sscj10LmNoaWxkcmVufHxbXSxzPVtdLG49LTEsbz1hLmJlZm9yZSxkO2kucHVzaCgtMSk7bGV0IGM9ZS5jcmVhdGVUcmFja2VyKGEpO2Zvcig7KytuPHIubGVuZ3RoOyl7bGV0IHA9cltuXSxsO2lmKGlbaS5sZW5ndGgtMV09bixuKzE8ci5sZW5ndGgpe2xldCB5PWUuaGFuZGxlLmhhbmRsZXJzW3JbbisxXS50eXBlXTt5JiZ5LnBlZWsmJih5PXkucGVlayksbD15P3kocltuKzFdLHQsZSx7YmVmb3JlOiIiLGFmdGVyOiIiLC4uLmMuY3VycmVudCgpfSkuY2hhckF0KDApOiIifWVsc2UgbD1hLmFmdGVyO3MubGVuZ3RoPjAmJihvPT09IlxyInx8bz09PWAKYCkmJnAudHlwZT09PSJodG1sIiYmKHNbcy5sZW5ndGgtMV09c1tzLmxlbmd0aC0xXS5yZXBsYWNlKC8oXHI/XG58XHIpJC8sIiAiKSxvPSIgIixjPWUuY3JlYXRlVHJhY2tlcihhKSxjLm1vdmUocy5qb2luKCIiKSkpO2xldCBmPWUuaGFuZGxlKHAsdCxlLHsuLi5jLmN1cnJlbnQoKSxhZnRlcjpsLGJlZm9yZTpvfSk7ZCYmZD09PWYuc2xpY2UoMCwxKSYmKGY9SGEoZC5jaGFyQ29kZUF0KDApKStmLnNsaWNlKDEpKTtsZXQgZz1lLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbztlLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbz12b2lkIDAsZD12b2lkIDAsZyYmKHMubGVuZ3RoPjAmJmcuYmVmb3JlJiZvPT09c1tzLmxlbmd0aC0xXS5zbGljZSgtMSkmJihzW3MubGVuZ3RoLTFdPXNbcy5sZW5ndGgtMV0uc2xpY2UoMCwtMSkrSGEoby5jaGFyQ29kZUF0KDApKSksZy5hZnRlciYmKGQ9bCkpLGMubW92ZShmKSxzLnB1c2goZiksbz1mLnNsaWNlKC0xKX1yZXR1cm4gaS5wb3AoKSxzLmpvaW4oIiIpfXZhciBac2U9YigoKT0+e08zKCl9KTtmdW5jdGlvbiBYc2UodCxlLGEpe2xldCBpPWUuaW5kZXhTdGFjayxyPXQuY2hpbGRyZW58fFtdLHM9ZS5jcmVhdGVUcmFja2VyKGEpLG49W10sbz0tMTtmb3IoaS5wdXNoKC0xKTsrK288ci5sZW5ndGg7KXtsZXQgZD1yW29dO2lbaS5sZW5ndGgtMV09byxuLnB1c2gocy5tb3ZlKGUuaGFuZGxlKGQsdCxlLHtiZWZvcmU6YApgLGFmdGVyOmAKYCwuLi5zLmN1cnJlbnQoKX0pKSksZC50eXBlIT09Imxpc3QiJiYoZS5idWxsZXRMYXN0VXNlZD12b2lkIDApLG88ci5sZW5ndGgtMSYmbi5wdXNoKHMubW92ZSh5SXQoZCxyW28rMV0sdCxlKSkpfXJldHVybiBpLnBvcCgpLG4uam9pbigiIil9ZnVuY3Rpb24geUl0KHQsZSxhLGkpe2xldCByPWkuam9pbi5sZW5ndGg7Zm9yKDtyLS07KXtsZXQgcz1pLmpvaW5bcl0odCxlLGEsaSk7aWYocz09PSEwfHxzPT09MSlicmVhaztpZih0eXBlb2Ygcz09Im51bWJlciIpcmV0dXJuYApgLnJlcGVhdCgxK3MpO2lmKHM9PT0hMSlyZXR1cm5gCgo8IS0tLS0+CgpgfXJldHVybmAKCmB9dmFyIEtzZT1iKCgpPT57fSk7ZnVuY3Rpb24gUXNlKHQsZSl7bGV0IGE9W10saT0wLHI9MCxzO2Zvcig7cz14SXQuZXhlYyh0KTspbih0LnNsaWNlKGkscy5pbmRleCkpLGEucHVzaChzWzBdKSxpPXMuaW5kZXgrc1swXS5sZW5ndGgscisrO3JldHVybiBuKHQuc2xpY2UoaSkpLGEuam9pbigiIik7ZnVuY3Rpb24gbihvKXthLnB1c2goZShvLHIsIW8pKX19dmFyIHhJdCxKc2U9YigoKT0+e3hJdD0vXHI/XG58XHIvZ30pO2Z1bmN0aW9uIHRuZSh0LGUsYSl7bGV0IGk9KGEuYmVmb3JlfHwiIikrKGV8fCIiKSsoYS5hZnRlcnx8IiIpLHI9W10scz1bXSxuPXt9LG89LTE7Zm9yKDsrK288dC51bnNhZmUubGVuZ3RoOyl7bGV0IHA9dC51bnNhZmVbb107aWYoIUM5KHQuc3RhY2sscCkpY29udGludWU7bGV0IGw9dC5jb21waWxlUGF0dGVybihwKSxmO2Zvcig7Zj1sLmV4ZWMoaSk7KXtsZXQgZz0iYmVmb3JlImluIHB8fCEhcC5hdEJyZWFrLHk9ImFmdGVyImluIHAsdj1mLmluZGV4KyhnP2ZbMV0ubGVuZ3RoOjApO3IuaW5jbHVkZXModik/KG5bdl0uYmVmb3JlJiYhZyYmKG5bdl0uYmVmb3JlPSExKSxuW3ZdLmFmdGVyJiYheSYmKG5bdl0uYWZ0ZXI9ITEpKTooci5wdXNoKHYpLG5bdl09e2JlZm9yZTpnLGFmdGVyOnl9KX19ci5zb3J0KHdJdCk7bGV0IGQ9YS5iZWZvcmU/YS5iZWZvcmUubGVuZ3RoOjAsYz1pLmxlbmd0aC0oYS5hZnRlcj9hLmFmdGVyLmxlbmd0aDowKTtmb3Iobz0tMTsrK288ci5sZW5ndGg7KXtsZXQgcD1yW29dO3A8ZHx8cD49Y3x8cCsxPGMmJnJbbysxXT09PXArMSYmbltwXS5hZnRlciYmIW5bcCsxXS5iZWZvcmUmJiFuW3ArMV0uYWZ0ZXJ8fHJbby0xXT09PXAtMSYmbltwXS5iZWZvcmUmJiFuW3AtMV0uYmVmb3JlJiYhbltwLTFdLmFmdGVyfHwoZCE9PXAmJnMucHVzaChlbmUoaS5zbGljZShkLHApLCJcXCIpKSxkPXAsL1shLS86LUBbLWB7LX5dLy50ZXN0KGkuY2hhckF0KHApKSYmKCFhLmVuY29kZXx8IWEuZW5jb2RlLmluY2x1ZGVzKGkuY2hhckF0KHApKSk/cy5wdXNoKCJcXCIpOihzLnB1c2goSGEoaS5jaGFyQ29kZUF0KHApKSksZCsrKSl9cmV0dXJuIHMucHVzaChlbmUoaS5zbGljZShkLGMpLGEuYWZ0ZXIpKSxzLmpvaW4oIiIpfWZ1bmN0aW9uIHdJdCh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gZW5lKHQsZSl7bGV0IGE9L1xcKD89WyEtLzotQFstYHstfl0pL2csaT1bXSxyPVtdLHM9dCtlLG49LTEsbz0wLGQ7Zm9yKDtkPWEuZXhlYyhzKTspaS5wdXNoKGQuaW5kZXgpO2Zvcig7KytuPGkubGVuZ3RoOylvIT09aVtuXSYmci5wdXNoKHQuc2xpY2UobyxpW25dKSksci5wdXNoKCJcXCIpLG89aVtuXTtyZXR1cm4gci5wdXNoKHQuc2xpY2UobykpLHIuam9pbigiIil9dmFyIGFuZT1iKCgpPT57TzMoKTtiVCgpfSk7ZnVuY3Rpb24gaW5lKHQpe2xldCBlPXR8fHt9LGE9ZS5ub3d8fHt9LGk9ZS5saW5lU2hpZnR8fDAscj1hLmxpbmV8fDEscz1hLmNvbHVtbnx8MTtyZXR1cm57bW92ZTpkLGN1cnJlbnQ6bixzaGlmdDpvfTtmdW5jdGlvbiBuKCl7cmV0dXJue25vdzp7bGluZTpyLGNvbHVtbjpzfSxsaW5lU2hpZnQ6aX19ZnVuY3Rpb24gbyhjKXtpKz1jfWZ1bmN0aW9uIGQoYyl7bGV0IHA9Y3x8IiIsbD1wLnNwbGl0KC9ccj9cbnxcci9nKSxmPWxbbC5sZW5ndGgtMV07cmV0dXJuIHIrPWwubGVuZ3RoLTEscz1sLmxlbmd0aD09PTE/cytmLmxlbmd0aDoxK2YubGVuZ3RoK2kscH19dmFyIHJuZT1iKCgpPT57fSk7ZnVuY3Rpb24gTlQodCxlKXtsZXQgYT1lfHx7fSxpPXthc3NvY2lhdGlvbklkOmpzZSxjb250YWluZXJQaHJhc2luZzpTSXQsY29udGFpbmVyRmxvdzpDSXQsY3JlYXRlVHJhY2tlcjppbmUsY29tcGlsZVBhdHRlcm46V3NlLGVudGVyOnMsaGFuZGxlcnM6ey4uLk0wfSxoYW5kbGU6dm9pZCAwLGluZGVudExpbmVzOlFzZSxpbmRleFN0YWNrOltdLGpvaW46Wy4uLlJzZV0sb3B0aW9uczp7fSxzYWZlOl9JdCxzdGFjazpbXSx1bnNhZmU6Wy4uLkhzZV19O2dUKGksYSksaS5vcHRpb25zLnRpZ2h0RGVmaW5pdGlvbnMmJmkuam9pbi5wdXNoKGtJdCksaS5oYW5kbGU9UzkoInR5cGUiLHtpbnZhbGlkOk1JdCx1bmtub3duOnpJdCxoYW5kbGVyczppLmhhbmRsZXJzfSk7bGV0IHI9aS5oYW5kbGUodCx2b2lkIDAsaSx7YmVmb3JlOmAKYCxhZnRlcjpgCmAsbm93OntsaW5lOjEsY29sdW1uOjF9LGxpbmVTaGlmdDowfSk7cmV0dXJuIHImJnIuY2hhckNvZGVBdChyLmxlbmd0aC0xKSE9PTEwJiZyLmNoYXJDb2RlQXQoci5sZW5ndGgtMSkhPT0xMyYmKHIrPWAKYCkscjtmdW5jdGlvbiBzKG4pe3JldHVybiBpLnN0YWNrLnB1c2gobiksbztmdW5jdGlvbiBvKCl7aS5zdGFjay5wb3AoKX19fWZ1bmN0aW9uIE1JdCh0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBoYW5kbGUgdmFsdWUgYCIrdCsiYCwgZXhwZWN0ZWQgbm9kZSIpfWZ1bmN0aW9uIHpJdCh0KXtsZXQgZT10O3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGhhbmRsZSB1bmtub3duIG5vZGUgYCIrZS50eXBlKyJgIil9ZnVuY3Rpb24ga0l0KHQsZSl7aWYodC50eXBlPT09ImRlZmluaXRpb24iJiZ0LnR5cGU9PT1lLnR5cGUpcmV0dXJuIDB9ZnVuY3Rpb24gU0l0KHQsZSl7cmV0dXJuIFlzZSh0LHRoaXMsZSl9ZnVuY3Rpb24gQ0l0KHQsZSl7cmV0dXJuIFhzZSh0LHRoaXMsZSl9ZnVuY3Rpb24gX0l0KHQsZSl7cmV0dXJuIHRuZSh0aGlzLHQsZSl9dmFyIHNuZT1iKCgpPT57bVQoKTtScmUoKTtQVCgpO0JzZSgpO3FzZSgpO1VzZSgpO0dzZSgpO1pzZSgpO0tzZSgpO0pzZSgpO2FuZSgpO3JuZSgpfSk7dmFyIEk5PWIoKCk9PntzbmUoKTtQVCgpfSk7ZnVuY3Rpb24gT1QoKXtyZXR1cm57ZW50ZXI6e3RhYmxlOlRJdCx0YWJsZURhdGE6bm5lLHRhYmxlSGVhZGVyOm5uZSx0YWJsZVJvdzokSXR9LGV4aXQ6e2NvZGVUZXh0OkFJdCx0YWJsZTpMSXQsdGFibGVEYXRhOkZULHRhYmxlSGVhZGVyOkZULHRhYmxlUm93OkZUfX19ZnVuY3Rpb24gVEl0KHQpe2xldCBlPXQuX2FsaWduO3RoaXMuZW50ZXIoe3R5cGU6InRhYmxlIixhbGlnbjplLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYT09PSJub25lIj9udWxsOmF9KSxjaGlsZHJlbjpbXX0sdCksdGhpcy5kYXRhLmluVGFibGU9ITB9ZnVuY3Rpb24gTEl0KHQpe3RoaXMuZXhpdCh0KSx0aGlzLmRhdGEuaW5UYWJsZT12b2lkIDB9ZnVuY3Rpb24gJEl0KHQpe3RoaXMuZW50ZXIoe3R5cGU6InRhYmxlUm93IixjaGlsZHJlbjpbXX0sdCl9ZnVuY3Rpb24gRlQodCl7dGhpcy5leGl0KHQpfWZ1bmN0aW9uIG5uZSh0KXt0aGlzLmVudGVyKHt0eXBlOiJ0YWJsZUNlbGwiLGNoaWxkcmVuOltdfSx0KX1mdW5jdGlvbiBBSXQodCl7bGV0IGU9dGhpcy5yZXN1bWUoKTt0aGlzLmRhdGEuaW5UYWJsZSYmKGU9ZS5yZXBsYWNlKC9cXChbXFx8XSkvZyxESXQpKTtsZXQgYT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2EudHlwZSxhLnZhbHVlPWUsdGhpcy5leGl0KHQpfWZ1bmN0aW9uIERJdCh0LGUpe3JldHVybiBlPT09InwiP2U6dH1mdW5jdGlvbiBSVCh0KXtsZXQgZT10fHx7fSxhPWUudGFibGVDZWxsUGFkZGluZyxpPWUudGFibGVQaXBlQWxpZ24scj1lLnN0cmluZ0xlbmd0aCxzPWE/IiAiOiJ8IjtyZXR1cm57dW5zYWZlOlt7Y2hhcmFjdGVyOiJcciIsaW5Db25zdHJ1Y3Q6InRhYmxlQ2VsbCJ9LHtjaGFyYWN0ZXI6YApgLGluQ29uc3RydWN0OiJ0YWJsZUNlbGwifSx7YXRCcmVhazohMCxjaGFyYWN0ZXI6InwiLGFmdGVyOiJbCSA6LV0ifSx7Y2hhcmFjdGVyOiJ8IixpbkNvbnN0cnVjdDoidGFibGVDZWxsIn0se2F0QnJlYWs6ITAsY2hhcmFjdGVyOiI6IixhZnRlcjoiLSJ9LHthdEJyZWFrOiEwLGNoYXJhY3RlcjoiLSIsYWZ0ZXI6Ils6fC1dIn1dLGhhbmRsZXJzOntpbmxpbmVDb2RlOmYsdGFibGU6bix0YWJsZUNlbGw6ZCx0YWJsZVJvdzpvfX07ZnVuY3Rpb24gbihnLHksdixtKXtyZXR1cm4gYyhwKGcsdixtKSxnLmFsaWduKX1mdW5jdGlvbiBvKGcseSx2LG0pe2xldCB4PWwoZyx2LG0pLE09YyhbeF0pO3JldHVybiBNLnNsaWNlKDAsTS5pbmRleE9mKGAKYCkpfWZ1bmN0aW9uIGQoZyx5LHYsbSl7bGV0IHg9di5lbnRlcigidGFibGVDZWxsIiksTT12LmVudGVyKCJwaHJhc2luZyIpLFM9di5jb250YWluZXJQaHJhc2luZyhnLHsuLi5tLGJlZm9yZTpzLGFmdGVyOnN9KTtyZXR1cm4gTSgpLHgoKSxTfWZ1bmN0aW9uIGMoZyx5KXtyZXR1cm4gSXJlKGcse2FsaWduOnksYWxpZ25EZWxpbWl0ZXJzOmkscGFkZGluZzphLHN0cmluZ0xlbmd0aDpyfSl9ZnVuY3Rpb24gcChnLHksdil7bGV0IG09Zy5jaGlsZHJlbix4PS0xLE09W10sUz15LmVudGVyKCJ0YWJsZSIpO2Zvcig7Kyt4PG0ubGVuZ3RoOylNW3hdPWwobVt4XSx5LHYpO3JldHVybiBTKCksTX1mdW5jdGlvbiBsKGcseSx2KXtsZXQgbT1nLmNoaWxkcmVuLHg9LTEsTT1bXSxTPXkuZW50ZXIoInRhYmxlUm93Iik7Zm9yKDsrK3g8bS5sZW5ndGg7KU1beF09ZChtW3hdLGcseSx2KTtyZXR1cm4gUygpLE19ZnVuY3Rpb24gZihnLHksdil7bGV0IG09TTAuaW5saW5lQ29kZShnLHksdik7cmV0dXJuIHYuc3RhY2suaW5jbHVkZXMoInRhYmxlQ2VsbCIpJiYobT1tLnJlcGxhY2UoL1x8L2csIlxcJCYiKSksbX19dmFyIG9uZT1iKCgpPT57Qm4oKTtOcmUoKTtJOSgpfSk7dmFyIGxuZT1iKCgpPT57b25lKCl9KTtmdW5jdGlvbiBCVCgpe3JldHVybntleGl0Ont0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkOmNuZSx0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQ6Y25lLHBhcmFncmFwaDpFSXR9fX1mdW5jdGlvbiBIVCgpe3JldHVybnt1bnNhZmU6W3thdEJyZWFrOiEwLGNoYXJhY3RlcjoiLSIsYWZ0ZXI6Ils6fC1dIn1dLGhhbmRsZXJzOntsaXN0SXRlbTpQSXR9fX1mdW5jdGlvbiBjbmUodCl7bGV0IGU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTtlLnR5cGUsZS5jaGVja2VkPXQudHlwZT09PSJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIn1mdW5jdGlvbiBFSXQodCl7bGV0IGU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTtpZihlJiZlLnR5cGU9PT0ibGlzdEl0ZW0iJiZ0eXBlb2YgZS5jaGVja2VkPT0iYm9vbGVhbiIpe2xldCBhPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07YS50eXBlO2xldCBpPWEuY2hpbGRyZW5bMF07aWYoaSYmaS50eXBlPT09InRleHQiKXtsZXQgcj1lLmNoaWxkcmVuLHM9LTEsbjtmb3IoOysrczxyLmxlbmd0aDspe2xldCBvPXJbc107aWYoby50eXBlPT09InBhcmFncmFwaCIpe249bzticmVha319bj09PWEmJihpLnZhbHVlPWkudmFsdWUuc2xpY2UoMSksaS52YWx1ZS5sZW5ndGg9PT0wP2EuY2hpbGRyZW4uc2hpZnQoKTphLnBvc2l0aW9uJiZpLnBvc2l0aW9uJiZ0eXBlb2YgaS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ9PSJudW1iZXIiJiYoaS5wb3NpdGlvbi5zdGFydC5jb2x1bW4rKyxpLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCsrLGEucG9zaXRpb24uc3RhcnQ9T2JqZWN0LmFzc2lnbih7fSxpLnBvc2l0aW9uLnN0YXJ0KSkpfX10aGlzLmV4aXQodCl9ZnVuY3Rpb24gUEl0KHQsZSxhLGkpe2xldCByPXQuY2hpbGRyZW5bMF0scz10eXBlb2YgdC5jaGVja2VkPT0iYm9vbGVhbiImJnImJnIudHlwZT09PSJwYXJhZ3JhcGgiLG49IlsiKyh0LmNoZWNrZWQ/IngiOiIgIikrIl0gIixvPWEuY3JlYXRlVHJhY2tlcihpKTtzJiZvLm1vdmUobik7bGV0IGQ9TTAubGlzdEl0ZW0odCxlLGEsey4uLmksLi4uby5jdXJyZW50KCl9KTtyZXR1cm4gcyYmKGQ9ZC5yZXBsYWNlKC9eKD86WyorLV18XGQrXC4pKFtcclxuXXwgezEsM30pLyxjKSksZDtmdW5jdGlvbiBjKHApe3JldHVybiBwK259fXZhciBkbmU9YigoKT0+e0JuKCk7STkoKX0pO3ZhciBwbmU9YigoKT0+e2RuZSgpfSk7ZnVuY3Rpb24gcVQoKXtyZXR1cm5bY1QoKSxwVCgpLHVUKCksT1QoKSxCVCgpXX1mdW5jdGlvbiBWVCh0KXtyZXR1cm57ZXh0ZW5zaW9uczpbZFQoKSxoVCh0KSxmVCgpLFJUKHQpLEhUKCldfX12YXIgaG5lPWIoKCk9PntDcmUoKTskcmUoKTtFcmUoKTtsbmUoKTtwbmUoKX0pO3ZhciB1bmU9YigoKT0+e2huZSgpfSk7ZnVuY3Rpb24gUjEodCxlLGEsaSl7bGV0IHI9dC5sZW5ndGgscz0wLG47aWYoZTwwP2U9LWU+cj8wOnIrZTplPWU+cj9yOmUsYT1hPjA/YTowLGkubGVuZ3RoPDFlNCluPUFycmF5LmZyb20oaSksbi51bnNoaWZ0KGUsYSksdC5zcGxpY2UoLi4ubik7ZWxzZSBmb3IoYSYmdC5zcGxpY2UoZSxhKTtzPGkubGVuZ3RoOyluPWkuc2xpY2UocyxzKzFlNCksbi51bnNoaWZ0KGUsMCksdC5zcGxpY2UoLi4ubikscys9MWU0LGUrPTFlNH1mdW5jdGlvbiBaMSh0LGUpe3JldHVybiB0Lmxlbmd0aD4wPyhSMSh0LHQubGVuZ3RoLDAsZSksdCk6ZX12YXIgSXI9YigoKT0+e30pO2Z1bmN0aW9uIE45KHQpe2xldCBlPXt9LGE9LTE7Zm9yKDsrK2E8dC5sZW5ndGg7KUlJdChlLHRbYV0pO3JldHVybiBlfWZ1bmN0aW9uIElJdCh0LGUpe2xldCBhO2ZvcihhIGluIGUpe2xldCByPShqVC5jYWxsKHQsYSk/dFthXTp2b2lkIDApfHwodFthXT17fSkscz1lW2FdLG47aWYocylmb3IobiBpbiBzKXtqVC5jYWxsKHIsbil8fChyW25dPVtdKTtsZXQgbz1zW25dO05JdChyW25dLEFycmF5LmlzQXJyYXkobyk/bzpvP1tvXTpbXSl9fX1mdW5jdGlvbiBOSXQodCxlKXtsZXQgYT0tMSxpPVtdO2Zvcig7KythPGUubGVuZ3RoOykoZVthXS5hZGQ9PT0iYWZ0ZXIiP3Q6aSkucHVzaChlW2FdKTtSMSh0LDAsMCxpKX1mdW5jdGlvbiBGOSh0KXtsZXQgZT17fSxhPS0xO2Zvcig7KythPHQubGVuZ3RoOylGSXQoZSx0W2FdKTtyZXR1cm4gZX1mdW5jdGlvbiBGSXQodCxlKXtsZXQgYTtmb3IoYSBpbiBlKXtsZXQgcj0oalQuY2FsbCh0LGEpP3RbYV06dm9pZCAwKXx8KHRbYV09e30pLHM9ZVthXSxuO2lmKHMpZm9yKG4gaW4gcylyW25dPXNbbl19fXZhciBqVCxPOT1iKCgpPT57SXIoKTtqVD17fS5oYXNPd25Qcm9wZXJ0eX0pO2Z1bmN0aW9uIEdUKCl7cmV0dXJue3RleHQ6TnJ9fWZ1bmN0aW9uIEJJdCh0LGUsYSl7bGV0IGk9dGhpcyxyLHM7cmV0dXJuIG47ZnVuY3Rpb24gbihsKXtyZXR1cm4hVVQobCl8fCF3bmUuY2FsbChpLGkucHJldmlvdXMpfHxXVChpLmV2ZW50cyk/YShsKToodC5lbnRlcigibGl0ZXJhbEF1dG9saW5rIiksdC5lbnRlcigibGl0ZXJhbEF1dG9saW5rRW1haWwiKSxvKGwpKX1mdW5jdGlvbiBvKGwpe3JldHVybiBVVChsKT8odC5jb25zdW1lKGwpLG8pOmw9PT02ND8odC5jb25zdW1lKGwpLGQpOmEobCl9ZnVuY3Rpb24gZChsKXtyZXR1cm4gbD09PTQ2P3QuY2hlY2soUkl0LHAsYykobCk6bD09PTQ1fHxsPT09OTV8fFAxKGwpPyhzPSEwLHQuY29uc3VtZShsKSxkKTpwKGwpfWZ1bmN0aW9uIGMobCl7cmV0dXJuIHQuY29uc3VtZShsKSxyPSEwLGR9ZnVuY3Rpb24gcChsKXtyZXR1cm4gcyYmciYmaTIoaS5wcmV2aW91cyk/KHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rRW1haWwiKSx0LmV4aXQoImxpdGVyYWxBdXRvbGluayIpLGUobCkpOmEobCl9fWZ1bmN0aW9uIEhJdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gcjtmdW5jdGlvbiByKG4pe3JldHVybiBuIT09ODcmJm4hPT0xMTl8fCF5bmUuY2FsbChpLGkucHJldmlvdXMpfHxXVChpLmV2ZW50cyk/YShuKToodC5lbnRlcigibGl0ZXJhbEF1dG9saW5rIiksdC5lbnRlcigibGl0ZXJhbEF1dG9saW5rV3d3IiksdC5jaGVjayhPSXQsdC5hdHRlbXB0KGZuZSx0LmF0dGVtcHQobW5lLHMpLGEpLGEpKG4pKX1mdW5jdGlvbiBzKG4pe3JldHVybiB0LmV4aXQoImxpdGVyYWxBdXRvbGlua1d3dyIpLHQuZXhpdCgibGl0ZXJhbEF1dG9saW5rIiksZShuKX19ZnVuY3Rpb24gcUl0KHQsZSxhKXtsZXQgaT10aGlzLHI9IiIscz0hMTtyZXR1cm4gbjtmdW5jdGlvbiBuKGwpe3JldHVybihsPT09NzJ8fGw9PT0xMDQpJiZ4bmUuY2FsbChpLGkucHJldmlvdXMpJiYhV1QoaS5ldmVudHMpPyh0LmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKSx0LmVudGVyKCJsaXRlcmFsQXV0b2xpbmtIdHRwIikscis9U3RyaW5nLmZyb21Db2RlUG9pbnQobCksdC5jb25zdW1lKGwpLG8pOmEobCl9ZnVuY3Rpb24gbyhsKXtpZihpMihsKSYmci5sZW5ndGg8NSlyZXR1cm4gcis9U3RyaW5nLmZyb21Db2RlUG9pbnQobCksdC5jb25zdW1lKGwpLG87aWYobD09PTU4KXtsZXQgZj1yLnRvTG93ZXJDYXNlKCk7aWYoZj09PSJodHRwInx8Zj09PSJodHRwcyIpcmV0dXJuIHQuY29uc3VtZShsKSxkfXJldHVybiBhKGwpfWZ1bmN0aW9uIGQobCl7cmV0dXJuIGw9PT00Nz8odC5jb25zdW1lKGwpLHM/Yzoocz0hMCxkKSk6YShsKX1mdW5jdGlvbiBjKGwpe3JldHVybiBsPT09bnVsbHx8djAobCl8fFR0KGwpfHxQcihsKXx8eTAobCk/YShsKTp0LmF0dGVtcHQoZm5lLHQuYXR0ZW1wdChtbmUscCksYSkobCl9ZnVuY3Rpb24gcChsKXtyZXR1cm4gdC5leGl0KCJsaXRlcmFsQXV0b2xpbmtIdHRwIiksdC5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKSxlKGwpfX1mdW5jdGlvbiBWSXQodCxlLGEpe2xldCBpPTA7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4obj09PTg3fHxuPT09MTE5KSYmaTwzPyhpKyssdC5jb25zdW1lKG4pLHIpOm49PT00NiYmaT09PTM/KHQuY29uc3VtZShuKSxzKTphKG4pfWZ1bmN0aW9uIHMobil7cmV0dXJuIG49PT1udWxsP2Eobik6ZShuKX19ZnVuY3Rpb24gakl0KHQsZSxhKXtsZXQgaSxyLHM7cmV0dXJuIG47ZnVuY3Rpb24gbihjKXtyZXR1cm4gYz09PTQ2fHxjPT09OTU/dC5jaGVjayhnbmUsZCxvKShjKTpjPT09bnVsbHx8VHQoYyl8fFByKGMpfHxjIT09NDUmJnkwKGMpP2QoYyk6KHM9ITAsdC5jb25zdW1lKGMpLG4pfWZ1bmN0aW9uIG8oYyl7cmV0dXJuIGM9PT05NT9pPSEwOihyPWksaT12b2lkIDApLHQuY29uc3VtZShjKSxufWZ1bmN0aW9uIGQoYyl7cmV0dXJuIHJ8fGl8fCFzP2EoYyk6ZShjKX19ZnVuY3Rpb24gVUl0KHQsZSl7bGV0IGE9MCxpPTA7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbj09PTQwPyhhKyssdC5jb25zdW1lKG4pLHIpOm49PT00MSYmaTxhP3Mobik6bj09PTMzfHxuPT09MzR8fG49PT0zOHx8bj09PTM5fHxuPT09NDF8fG49PT00Mnx8bj09PTQ0fHxuPT09NDZ8fG49PT01OHx8bj09PTU5fHxuPT09NjB8fG49PT02M3x8bj09PTkzfHxuPT09OTV8fG49PT0xMjY/dC5jaGVjayhnbmUsZSxzKShuKTpuPT09bnVsbHx8VHQobil8fFByKG4pP2Uobik6KHQuY29uc3VtZShuKSxyKX1mdW5jdGlvbiBzKG4pe3JldHVybiBuPT09NDEmJmkrKyx0LmNvbnN1bWUobikscn19ZnVuY3Rpb24gV0l0KHQsZSxhKXtyZXR1cm4gaTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPT09MzN8fG89PT0zNHx8bz09PTM5fHxvPT09NDF8fG89PT00Mnx8bz09PTQ0fHxvPT09NDZ8fG89PT01OHx8bz09PTU5fHxvPT09NjN8fG89PT05NXx8bz09PTEyNj8odC5jb25zdW1lKG8pLGkpOm89PT0zOD8odC5jb25zdW1lKG8pLHMpOm89PT05Mz8odC5jb25zdW1lKG8pLHIpOm89PT02MHx8bz09PW51bGx8fFR0KG8pfHxQcihvKT9lKG8pOmEobyl9ZnVuY3Rpb24gcihvKXtyZXR1cm4gbz09PW51bGx8fG89PT00MHx8bz09PTkxfHxUdChvKXx8UHIobyk/ZShvKTppKG8pfWZ1bmN0aW9uIHMobyl7cmV0dXJuIGkyKG8pP24obyk6YShvKX1mdW5jdGlvbiBuKG8pe3JldHVybiBvPT09NTk/KHQuY29uc3VtZShvKSxpKTppMihvKT8odC5jb25zdW1lKG8pLG4pOmEobyl9fWZ1bmN0aW9uIEdJdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gdC5jb25zdW1lKHMpLHJ9ZnVuY3Rpb24gcihzKXtyZXR1cm4gUDEocyk/YShzKTplKHMpfX1mdW5jdGlvbiB5bmUodCl7cmV0dXJuIHQ9PT1udWxsfHx0PT09NDB8fHQ9PT00Mnx8dD09PTk1fHx0PT09OTF8fHQ9PT05M3x8dD09PTEyNnx8VHQodCl9ZnVuY3Rpb24geG5lKHQpe3JldHVybiFpMih0KX1mdW5jdGlvbiB3bmUodCl7cmV0dXJuISh0PT09NDd8fFVUKHQpKX1mdW5jdGlvbiBVVCh0KXtyZXR1cm4gdD09PTQzfHx0PT09NDV8fHQ9PT00Nnx8dD09PTk1fHxQMSh0KX1mdW5jdGlvbiBXVCh0KXtsZXQgZT10Lmxlbmd0aCxhPSExO2Zvcig7ZS0tOyl7bGV0IGk9dFtlXVsxXTtpZigoaS50eXBlPT09ImxhYmVsTGluayJ8fGkudHlwZT09PSJsYWJlbEltYWdlIikmJiFpLl9iYWxhbmNlZCl7YT0hMDticmVha31pZihpLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvKXthPSExO2JyZWFrfX1yZXR1cm4gdC5sZW5ndGg+MCYmIWEmJih0W3QubGVuZ3RoLTFdWzFdLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvPSEwKSxhfXZhciBPSXQsZm5lLG1uZSxnbmUsUkl0LGJuZSx2bmUsa3MsTnIsTW5lPWIoKCk9PntBdCgpO09JdD17dG9rZW5pemU6Vkl0LHBhcnRpYWw6ITB9LGZuZT17dG9rZW5pemU6akl0LHBhcnRpYWw6ITB9LG1uZT17dG9rZW5pemU6VUl0LHBhcnRpYWw6ITB9LGduZT17dG9rZW5pemU6V0l0LHBhcnRpYWw6ITB9LFJJdD17dG9rZW5pemU6R0l0LHBhcnRpYWw6ITB9LGJuZT17bmFtZToid3d3QXV0b2xpbmsiLHRva2VuaXplOkhJdCxwcmV2aW91czp5bmV9LHZuZT17bmFtZToicHJvdG9jb2xBdXRvbGluayIsdG9rZW5pemU6cUl0LHByZXZpb3VzOnhuZX0sa3M9e25hbWU6ImVtYWlsQXV0b2xpbmsiLHRva2VuaXplOkJJdCxwcmV2aW91czp3bmV9LE5yPXt9O2Zvcih2YXIgazA9NDg7azA8MTIzOylOcltrMF09a3MsazArKyxrMD09PTU4P2swPTY1OmswPT09OTEmJihrMD05Nyk7TnJbNDNdPWtzLE5yWzQ1XT1rcyxOcls0Nl09a3MsTnJbOTVdPWtzLE5yWzcyXT1ba3Msdm5lXSxOclsxMDRdPVtrcyx2bmVdLE5yWzg3XT1ba3MsYm5lXSxOclsxMTldPVtrcyxibmVdfSk7ZnVuY3Rpb24gUjkodCl7cmV0dXJuIHQucmVwbGFjZSgvWyImPD5dL2csZSk7ZnVuY3Rpb24gZShhKXtyZXR1cm4iJiIrWUl0W2FdKyI7In19dmFyIFlJdCxZVD1iKCgpPT57WUl0PXsnIic6InF1b3QiLCImIjoiYW1wIiwiPCI6Imx0IiwiPiI6Imd0In19KTtmdW5jdGlvbiBGcih0LGUpe2xldCBhPVI5KHFhKHR8fCIiKSk7aWYoIWUpcmV0dXJuIGE7bGV0IGk9YS5pbmRleE9mKCI6Iikscj1hLmluZGV4T2YoIj8iKSxzPWEuaW5kZXhPZigiIyIpLG49YS5pbmRleE9mKCIvIik7cmV0dXJuIGk8MHx8bj4tMSYmaT5ufHxyPi0xJiZpPnJ8fHM+LTEmJmk+c3x8ZS50ZXN0KGEuc2xpY2UoMCxpKSk/YToiIn1mdW5jdGlvbiBxYSh0KXtsZXQgZT1bXSxhPS0xLGk9MCxyPTA7Zm9yKDsrK2E8dC5sZW5ndGg7KXtsZXQgcz10LmNoYXJDb2RlQXQoYSksbj0iIjtpZihzPT09MzcmJlAxKHQuY2hhckNvZGVBdChhKzEpKSYmUDEodC5jaGFyQ29kZUF0KGErMikpKXI9MjtlbHNlIGlmKHM8MTI4KS9bISMkJi07PT8tWl9hLXp+XS8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKHMpKXx8KG49U3RyaW5nLmZyb21DaGFyQ29kZShzKSk7ZWxzZSBpZihzPjU1Mjk1JiZzPDU3MzQ0KXtsZXQgbz10LmNoYXJDb2RlQXQoYSsxKTtzPDU2MzIwJiZvPjU2MzE5JiZvPDU3MzQ0PyhuPVN0cmluZy5mcm9tQ2hhckNvZGUocyxvKSxyPTEpOm49Ilx1RkZGRCJ9ZWxzZSBuPVN0cmluZy5mcm9tQ2hhckNvZGUocyk7biYmKGUucHVzaCh0LnNsaWNlKGksYSksZW5jb2RlVVJJQ29tcG9uZW50KG4pKSxpPWErcisxLG49IiIpLHImJihhKz1yLHI9MCl9cmV0dXJuIGUuam9pbigiIikrdC5zbGljZShpKX12YXIgT3I9YigoKT0+e0F0KCk7WVQoKX0pO2Z1bmN0aW9uIFhUKCl7cmV0dXJue2V4aXQ6e2xpdGVyYWxBdXRvbGlua0VtYWlsOlhJdCxsaXRlcmFsQXV0b2xpbmtIdHRwOktJdCxsaXRlcmFsQXV0b2xpbmtXd3c6Wkl0fX19ZnVuY3Rpb24gWkl0KHQpe1pULmNhbGwodGhpcyx0LCJodHRwOi8vIil9ZnVuY3Rpb24gWEl0KHQpe1pULmNhbGwodGhpcyx0LCJtYWlsdG86Iil9ZnVuY3Rpb24gS0l0KHQpe1pULmNhbGwodGhpcyx0KX1mdW5jdGlvbiBaVCh0LGUpe2xldCBhPXRoaXMuc2xpY2VTZXJpYWxpemUodCk7dGhpcy50YWcoJzxhIGhyZWY9IicrRnIoKGV8fCIiKSthKSsnIj4nKSx0aGlzLnJhdyh0aGlzLmVuY29kZShhKSksdGhpcy50YWcoIjwvYT4iKX12YXIgem5lPWIoKCk9PntPcigpfSk7dmFyIGtuZT1iKCgpPT57TW5lKCk7em5lKCl9KTtmdW5jdGlvbiBVbih0LGUsYSl7bGV0IGk9W10scj0tMTtmb3IoOysrcjx0Lmxlbmd0aDspe2xldCBzPXRbcl0ucmVzb2x2ZUFsbDtzJiYhaS5pbmNsdWRlcyhzKSYmKGU9cyhlLGEpLGkucHVzaChzKSl9cmV0dXJuIGV9dmFyIFU2PWIoKCk9Pnt9KTtmdW5jdGlvbiBRSXQodCxlKXtsZXQgYT0tMSxpLHIscyxuLG8sZCxjLHA7Zm9yKDsrK2E8dC5sZW5ndGg7KWlmKHRbYV1bMF09PT0iZW50ZXIiJiZ0W2FdWzFdLnR5cGU9PT0iYXR0ZW50aW9uU2VxdWVuY2UiJiZ0W2FdWzFdLl9jbG9zZSl7Zm9yKGk9YTtpLS07KWlmKHRbaV1bMF09PT0iZXhpdCImJnRbaV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJnRbaV1bMV0uX29wZW4mJmUuc2xpY2VTZXJpYWxpemUodFtpXVsxXSkuY2hhckNvZGVBdCgwKT09PWUuc2xpY2VTZXJpYWxpemUodFthXVsxXSkuY2hhckNvZGVBdCgwKSl7aWYoKHRbaV1bMV0uX2Nsb3NlfHx0W2FdWzFdLl9vcGVuKSYmKHRbYV1bMV0uZW5kLm9mZnNldC10W2FdWzFdLnN0YXJ0Lm9mZnNldCklMyYmISgodFtpXVsxXS5lbmQub2Zmc2V0LXRbaV1bMV0uc3RhcnQub2Zmc2V0K3RbYV1bMV0uZW5kLm9mZnNldC10W2FdWzFdLnN0YXJ0Lm9mZnNldCklMykpY29udGludWU7ZD10W2ldWzFdLmVuZC5vZmZzZXQtdFtpXVsxXS5zdGFydC5vZmZzZXQ+MSYmdFthXVsxXS5lbmQub2Zmc2V0LXRbYV1bMV0uc3RhcnQub2Zmc2V0PjE/MjoxO2xldCBsPXsuLi50W2ldWzFdLmVuZH0sZj17Li4udFthXVsxXS5zdGFydH07U25lKGwsLWQpLFNuZShmLGQpLG49e3R5cGU6ZD4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OmwsZW5kOnsuLi50W2ldWzFdLmVuZH19LG89e3R5cGU6ZD4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OnsuLi50W2FdWzFdLnN0YXJ0fSxlbmQ6Zn0scz17dHlwZTpkPjE/InN0cm9uZ1RleHQiOiJlbXBoYXNpc1RleHQiLHN0YXJ0OnsuLi50W2ldWzFdLmVuZH0sZW5kOnsuLi50W2FdWzFdLnN0YXJ0fX0scj17dHlwZTpkPjE/InN0cm9uZyI6ImVtcGhhc2lzIixzdGFydDp7Li4ubi5zdGFydH0sZW5kOnsuLi5vLmVuZH19LHRbaV1bMV0uZW5kPXsuLi5uLnN0YXJ0fSx0W2FdWzFdLnN0YXJ0PXsuLi5vLmVuZH0sYz1bXSx0W2ldWzFdLmVuZC5vZmZzZXQtdFtpXVsxXS5zdGFydC5vZmZzZXQmJihjPVoxKGMsW1siZW50ZXIiLHRbaV1bMV0sZV0sWyJleGl0Iix0W2ldWzFdLGVdXSkpLGM9WjEoYyxbWyJlbnRlciIscixlXSxbImVudGVyIixuLGVdLFsiZXhpdCIsbixlXSxbImVudGVyIixzLGVdXSksYz1aMShjLFVuKGUucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLHQuc2xpY2UoaSsxLGEpLGUpKSxjPVoxKGMsW1siZXhpdCIscyxlXSxbImVudGVyIixvLGVdLFsiZXhpdCIsbyxlXSxbImV4aXQiLHIsZV1dKSx0W2FdWzFdLmVuZC5vZmZzZXQtdFthXVsxXS5zdGFydC5vZmZzZXQ/KHA9MixjPVoxKGMsW1siZW50ZXIiLHRbYV1bMV0sZV0sWyJleGl0Iix0W2FdWzFdLGVdXSkpOnA9MCxSMSh0LGktMSxhLWkrMyxjKSxhPWkrYy5sZW5ndGgtcC0yO2JyZWFrfX1mb3IoYT0tMTsrK2E8dC5sZW5ndGg7KXRbYV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJih0W2FdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gdH1mdW5jdGlvbiBKSXQodCxlKXtsZXQgYT10aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbCxpPXRoaXMucHJldmlvdXMscj16cyhpKSxzO3JldHVybiBuO2Z1bmN0aW9uIG4oZCl7cmV0dXJuIHM9ZCx0LmVudGVyKCJhdHRlbnRpb25TZXF1ZW5jZSIpLG8oZCl9ZnVuY3Rpb24gbyhkKXtpZihkPT09cylyZXR1cm4gdC5jb25zdW1lKGQpLG87bGV0IGM9dC5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpLHA9enMoZCksbD0hcHx8cD09PTImJnJ8fGEuaW5jbHVkZXMoZCksZj0hcnx8cj09PTImJnB8fGEuaW5jbHVkZXMoaSk7cmV0dXJuIGMuX29wZW49ISEocz09PTQyP2w6bCYmKHJ8fCFmKSksYy5fY2xvc2U9ISEocz09PTQyP2Y6ZiYmKHB8fCFsKSksZShkKX19ZnVuY3Rpb24gU25lKHQsZSl7dC5jb2x1bW4rPWUsdC5vZmZzZXQrPWUsdC5fYnVmZmVySW5kZXgrPWV9dmFyIFc2LENuZT1iKCgpPT57SXIoKTtUOSgpO1U2KCk7VzY9e25hbWU6ImF0dGVudGlvbiIscmVzb2x2ZUFsbDpRSXQsdG9rZW5pemU6Skl0fX0pO2Z1bmN0aW9uIGVOdCh0LGUsYSl7bGV0IGk9MDtyZXR1cm4gcjtmdW5jdGlvbiByKGcpe3JldHVybiB0LmVudGVyKCJhdXRvbGluayIpLHQuZW50ZXIoImF1dG9saW5rTWFya2VyIiksdC5jb25zdW1lKGcpLHQuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKSx0LmVudGVyKCJhdXRvbGlua1Byb3RvY29sIiksc31mdW5jdGlvbiBzKGcpe3JldHVybiBpMihnKT8odC5jb25zdW1lKGcpLG4pOmc9PT02ND9hKGcpOmMoZyl9ZnVuY3Rpb24gbihnKXtyZXR1cm4gZz09PTQzfHxnPT09NDV8fGc9PT00Nnx8UDEoZyk/KGk9MSxvKGcpKTpjKGcpfWZ1bmN0aW9uIG8oZyl7cmV0dXJuIGc9PT01OD8odC5jb25zdW1lKGcpLGk9MCxkKTooZz09PTQzfHxnPT09NDV8fGc9PT00Nnx8UDEoZykpJiZpKys8MzI/KHQuY29uc3VtZShnKSxvKTooaT0wLGMoZykpfWZ1bmN0aW9uIGQoZyl7cmV0dXJuIGc9PT02Mj8odC5leGl0KCJhdXRvbGlua1Byb3RvY29sIiksdC5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSx0LmNvbnN1bWUoZyksdC5leGl0KCJhdXRvbGlua01hcmtlciIpLHQuZXhpdCgiYXV0b2xpbmsiKSxlKTpnPT09bnVsbHx8Zz09PTMyfHxnPT09NjB8fHYwKGcpP2EoZyk6KHQuY29uc3VtZShnKSxkKX1mdW5jdGlvbiBjKGcpe3JldHVybiBnPT09NjQ/KHQuY29uc3VtZShnKSxwKTp1cmUoZyk/KHQuY29uc3VtZShnKSxjKTphKGcpfWZ1bmN0aW9uIHAoZyl7cmV0dXJuIFAxKGcpP2woZyk6YShnKX1mdW5jdGlvbiBsKGcpe3JldHVybiBnPT09NDY/KHQuY29uc3VtZShnKSxpPTAscCk6Zz09PTYyPyh0LmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlPSJhdXRvbGlua0VtYWlsIix0LmVudGVyKCJhdXRvbGlua01hcmtlciIpLHQuY29uc3VtZShnKSx0LmV4aXQoImF1dG9saW5rTWFya2VyIiksdC5leGl0KCJhdXRvbGluayIpLGUpOmYoZyl9ZnVuY3Rpb24gZihnKXtpZigoZz09PTQ1fHxQMShnKSkmJmkrKzw2Myl7bGV0IHk9Zz09PTQ1P2Y6bDtyZXR1cm4gdC5jb25zdW1lKGcpLHl9cmV0dXJuIGEoZyl9fXZhciBLVCxfbmU9YigoKT0+e0F0KCk7S1Q9e25hbWU6ImF1dG9saW5rIix0b2tlbml6ZTplTnR9fSk7ZnVuY3Rpb24gaXQodCxlLGEsaSl7bGV0IHI9aT9pLTE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHM9MDtyZXR1cm4gbjtmdW5jdGlvbiBuKGQpe3JldHVybiBRZShkKT8odC5lbnRlcihhKSxvKGQpKTplKGQpfWZ1bmN0aW9uIG8oZCl7cmV0dXJuIFFlKGQpJiZzKys8cj8odC5jb25zdW1lKGQpLG8pOih0LmV4aXQoYSksZShkKSl9fXZhciBCMT1iKCgpPT57QXQoKX0pO2Z1bmN0aW9uIHROdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gUWUocyk/aXQodCxyLCJsaW5lUHJlZml4Iikocyk6cihzKX1mdW5jdGlvbiByKHMpe3JldHVybiBzPT09bnVsbHx8T2Uocyk/ZShzKTphKHMpfX12YXIgUnIsQjk9YigoKT0+e0IxKCk7QXQoKTtScj17cGFydGlhbDohMCx0b2tlbml6ZTp0TnR9fSk7ZnVuY3Rpb24gYU50KHQsZSxhKXtsZXQgaT10aGlzO3JldHVybiByO2Z1bmN0aW9uIHIobil7aWYobj09PTYyKXtsZXQgbz1pLmNvbnRhaW5lclN0YXRlO3JldHVybiBvLm9wZW58fCh0LmVudGVyKCJibG9ja1F1b3RlIix7X2NvbnRhaW5lcjohMH0pLG8ub3Blbj0hMCksdC5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpLHQuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKSx0LmNvbnN1bWUobiksdC5leGl0KCJibG9ja1F1b3RlTWFya2VyIiksc31yZXR1cm4gYShuKX1mdW5jdGlvbiBzKG4pe3JldHVybiBRZShuKT8odC5lbnRlcigiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSx0LmNvbnN1bWUobiksdC5leGl0KCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLHQuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLGUpOih0LmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxlKG4pKX19ZnVuY3Rpb24gaU50KHQsZSxhKXtsZXQgaT10aGlzO3JldHVybiByO2Z1bmN0aW9uIHIobil7cmV0dXJuIFFlKG4pP2l0KHQscywibGluZVByZWZpeCIsaS5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShuKTpzKG4pfWZ1bmN0aW9uIHMobil7cmV0dXJuIHQuYXR0ZW1wdChIOSxlLGEpKG4pfX1mdW5jdGlvbiByTnQodCl7dC5leGl0KCJibG9ja1F1b3RlIil9dmFyIEg5LFRuZT1iKCgpPT57QjEoKTtBdCgpO0g5PXtjb250aW51YXRpb246e3Rva2VuaXplOmlOdH0sZXhpdDpyTnQsbmFtZToiYmxvY2tRdW90ZSIsdG9rZW5pemU6YU50fX0pO2Z1bmN0aW9uIHNOdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gdC5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIiksdC5lbnRlcigiZXNjYXBlTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgiZXNjYXBlTWFya2VyIikscn1mdW5jdGlvbiByKHMpe3JldHVybiBtcmUocyk/KHQuZW50ZXIoImNoYXJhY3RlckVzY2FwZVZhbHVlIiksdC5jb25zdW1lKHMpLHQuZXhpdCgiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSx0LmV4aXQoImNoYXJhY3RlckVzY2FwZSIpLGUpOmEocyl9fXZhciBxOSxMbmU9YigoKT0+e0F0KCk7cTk9e25hbWU6ImNoYXJhY3RlckVzY2FwZSIsdG9rZW5pemU6c050fX0pO2Z1bmN0aW9uIG5OdCh0LGUsYSl7bGV0IGk9dGhpcyxyPTAscyxuO3JldHVybiBvO2Z1bmN0aW9uIG8obCl7cmV0dXJuIHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZSIpLHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLHQuY29uc3VtZShsKSx0LmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGR9ZnVuY3Rpb24gZChsKXtyZXR1cm4gbD09PTM1Pyh0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiksdC5jb25zdW1lKGwpLHQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLGMpOih0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLHM9MzEsbj1QMSxwKGwpKX1mdW5jdGlvbiBjKGwpe3JldHVybiBsPT09ODh8fGw9PT0xMjA/KHQuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksdC5jb25zdW1lKGwpLHQuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKSx0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpLHM9NixuPWZyZSxwKToodC5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSxzPTcsbj1CNixwKGwpKX1mdW5jdGlvbiBwKGwpe2lmKGw9PT01OSYmcil7bGV0IGY9dC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpO3JldHVybiBuPT09UDEmJiFqbihpLnNsaWNlU2VyaWFsaXplKGYpKT9hKGwpOih0LmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSx0LmNvbnN1bWUobCksdC5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSx0LmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZSIpLGUpfXJldHVybiBuKGwpJiZyKys8cz8odC5jb25zdW1lKGwpLHApOmEobCl9fXZhciBWOSwkbmU9YigoKT0+e2o2KCk7QXQoKTtWOT17bmFtZToiY2hhcmFjdGVyUmVmZXJlbmNlIix0b2tlbml6ZTpuTnR9fSk7ZnVuY3Rpb24gb050KHQsZSxhKXtsZXQgaT10aGlzLHI9e3BhcnRpYWw6ITAsdG9rZW5pemU6X30scz0wLG49MCxvO3JldHVybiBkO2Z1bmN0aW9uIGQoayl7cmV0dXJuIGMoayl9ZnVuY3Rpb24gYyhrKXtsZXQgTj1pLmV2ZW50c1tpLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIHM9TiYmTlsxXS50eXBlPT09ImxpbmVQcmVmaXgiP05bMl0uc2xpY2VTZXJpYWxpemUoTlsxXSwhMCkubGVuZ3RoOjAsbz1rLHQuZW50ZXIoImNvZGVGZW5jZWQiKSx0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSx0LmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpLHAoayl9ZnVuY3Rpb24gcChrKXtyZXR1cm4gaz09PW8/KG4rKyx0LmNvbnN1bWUoaykscCk6bjwzP2Eoayk6KHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxRZShrKT9pdCh0LGwsIndoaXRlc3BhY2UiKShrKTpsKGspKX1mdW5jdGlvbiBsKGspe3JldHVybiBrPT09bnVsbHx8T2Uoayk/KHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksaS5pbnRlcnJ1cHQ/ZShrKTp0LmNoZWNrKEFuZSx2LEYpKGspKToodC5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpLHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxmKGspKX1mdW5jdGlvbiBmKGspe3JldHVybiBrPT09bnVsbHx8T2Uoayk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKSxsKGspKTpRZShrKT8odC5leGl0KCJjaHVua1N0cmluZyIpLHQuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLGl0KHQsZywid2hpdGVzcGFjZSIpKGspKTprPT09OTYmJms9PT1vP2Eoayk6KHQuY29uc3VtZShrKSxmKX1mdW5jdGlvbiBnKGspe3JldHVybiBrPT09bnVsbHx8T2Uoayk/bChrKToodC5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSx5KGspKX1mdW5jdGlvbiB5KGspe3JldHVybiBrPT09bnVsbHx8T2Uoayk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQoImNvZGVGZW5jZWRGZW5jZU1ldGEiKSxsKGspKTprPT09OTYmJms9PT1vP2Eoayk6KHQuY29uc3VtZShrKSx5KX1mdW5jdGlvbiB2KGspe3JldHVybiB0LmF0dGVtcHQocixGLG0pKGspfWZ1bmN0aW9uIG0oayl7cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoayksdC5leGl0KCJsaW5lRW5kaW5nIikseH1mdW5jdGlvbiB4KGspe3JldHVybiBzPjAmJlFlKGspP2l0KHQsTSwibGluZVByZWZpeCIscysxKShrKTpNKGspfWZ1bmN0aW9uIE0oayl7cmV0dXJuIGs9PT1udWxsfHxPZShrKT90LmNoZWNrKEFuZSx2LEYpKGspOih0LmVudGVyKCJjb2RlRmxvd1ZhbHVlIiksUyhrKSl9ZnVuY3Rpb24gUyhrKXtyZXR1cm4gaz09PW51bGx8fE9lKGspPyh0LmV4aXQoImNvZGVGbG93VmFsdWUiKSxNKGspKToodC5jb25zdW1lKGspLFMpfWZ1bmN0aW9uIEYoayl7cmV0dXJuIHQuZXhpdCgiY29kZUZlbmNlZCIpLGUoayl9ZnVuY3Rpb24gXyhrLE4sTCl7bGV0IEE9MDtyZXR1cm4gcTtmdW5jdGlvbiBxKCQpe3JldHVybiBrLmVudGVyKCJsaW5lRW5kaW5nIiksay5jb25zdW1lKCQpLGsuZXhpdCgibGluZUVuZGluZyIpLEN9ZnVuY3Rpb24gQygkKXtyZXR1cm4gay5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksUWUoJCk/aXQoayx6LCJsaW5lUHJlZml4IixpLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKCQpOnooJCl9ZnVuY3Rpb24geigkKXtyZXR1cm4gJD09PW8/KGsuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksRSgkKSk6TCgkKX1mdW5jdGlvbiBFKCQpe3JldHVybiAkPT09bz8oQSsrLGsuY29uc3VtZSgkKSxFKTpBPj1uPyhrLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksUWUoJCk/aXQoayxULCJ3aGl0ZXNwYWNlIikoJCk6VCgkKSk6TCgkKX1mdW5jdGlvbiBUKCQpe3JldHVybiAkPT09bnVsbHx8T2UoJCk/KGsuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksTigkKSk6TCgkKX19fWZ1bmN0aW9uIGxOdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gcjtmdW5jdGlvbiByKG4pe3JldHVybiBuPT09bnVsbD9hKG4pOih0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKG4pLHQuZXhpdCgibGluZUVuZGluZyIpLHMpfWZ1bmN0aW9uIHMobil7cmV0dXJuIGkucGFyc2VyLmxhenlbaS5ub3coKS5saW5lXT9hKG4pOmUobil9fXZhciBBbmUsajksRG5lPWIoKCk9PntCMSgpO0F0KCk7QW5lPXtwYXJ0aWFsOiEwLHRva2VuaXplOmxOdH0sajk9e2NvbmNyZXRlOiEwLG5hbWU6ImNvZGVGZW5jZWQiLHRva2VuaXplOm9OdH19KTtmdW5jdGlvbiBkTnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHI7ZnVuY3Rpb24gcihjKXtyZXR1cm4gdC5lbnRlcigiY29kZUluZGVudGVkIiksaXQodCxzLCJsaW5lUHJlZml4Iiw1KShjKX1mdW5jdGlvbiBzKGMpe2xldCBwPWkuZXZlbnRzW2kuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gcCYmcFsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZwWzJdLnNsaWNlU2VyaWFsaXplKHBbMV0sITApLmxlbmd0aD49ND9uKGMpOmEoYyl9ZnVuY3Rpb24gbihjKXtyZXR1cm4gYz09PW51bGw/ZChjKTpPZShjKT90LmF0dGVtcHQoY050LG4sZCkoYyk6KHQuZW50ZXIoImNvZGVGbG93VmFsdWUiKSxvKGMpKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjPT09bnVsbHx8T2UoYyk/KHQuZXhpdCgiY29kZUZsb3dWYWx1ZSIpLG4oYykpOih0LmNvbnN1bWUoYyksbyl9ZnVuY3Rpb24gZChjKXtyZXR1cm4gdC5leGl0KCJjb2RlSW5kZW50ZWQiKSxlKGMpfX1mdW5jdGlvbiBwTnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4gaS5wYXJzZXIubGF6eVtpLm5vdygpLmxpbmVdP2Eobik6T2Uobik/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUobiksdC5leGl0KCJsaW5lRW5kaW5nIikscik6aXQodCxzLCJsaW5lUHJlZml4Iiw1KShuKX1mdW5jdGlvbiBzKG4pe2xldCBvPWkuZXZlbnRzW2kuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gbyYmb1sxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZvWzJdLnNsaWNlU2VyaWFsaXplKG9bMV0sITApLmxlbmd0aD49ND9lKG4pOk9lKG4pP3Iobik6YShuKX19dmFyIEc2LGNOdCxFbmU9YigoKT0+e0IxKCk7QXQoKTtHNj17bmFtZToiY29kZUluZGVudGVkIix0b2tlbml6ZTpkTnR9LGNOdD17cGFydGlhbDohMCx0b2tlbml6ZTpwTnR9fSk7ZnVuY3Rpb24gaE50KHQpe2xldCBlPXQubGVuZ3RoLTQsYT0zLGkscjtpZigodFthXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHx0W2FdWzFdLnR5cGU9PT0ic3BhY2UiKSYmKHRbZV1bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8dFtlXVsxXS50eXBlPT09InNwYWNlIikpe2ZvcihpPWE7KytpPGU7KWlmKHRbaV1bMV0udHlwZT09PSJjb2RlVGV4dERhdGEiKXt0W2FdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsdFtlXVsxXS50eXBlPSJjb2RlVGV4dFBhZGRpbmciLGErPTIsZS09MjticmVha319Zm9yKGk9YS0xLGUrKzsrK2k8PWU7KXI9PT12b2lkIDA/aSE9PWUmJnRbaV1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmKHI9aSk6KGk9PT1lfHx0W2ldWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiYodFtyXVsxXS50eXBlPSJjb2RlVGV4dERhdGEiLGkhPT1yKzImJih0W3JdWzFdLmVuZD10W2ktMV1bMV0uZW5kLHQuc3BsaWNlKHIrMixpLXItMiksZS09aS1yLTIsaT1yKzIpLHI9dm9pZCAwKTtyZXR1cm4gdH1mdW5jdGlvbiB1TnQodCl7cmV0dXJuIHQhPT05Nnx8dGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoLTFdWzFdLnR5cGU9PT0iY2hhcmFjdGVyRXNjYXBlIn1mdW5jdGlvbiBmTnQodCxlLGEpe2xldCBpPXRoaXMscj0wLHMsbjtyZXR1cm4gbztmdW5jdGlvbiBvKGYpe3JldHVybiB0LmVudGVyKCJjb2RlVGV4dCIpLHQuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxkKGYpfWZ1bmN0aW9uIGQoZil7cmV0dXJuIGY9PT05Nj8odC5jb25zdW1lKGYpLHIrKyxkKToodC5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIiksYyhmKSl9ZnVuY3Rpb24gYyhmKXtyZXR1cm4gZj09PW51bGw/YShmKTpmPT09MzI/KHQuZW50ZXIoInNwYWNlIiksdC5jb25zdW1lKGYpLHQuZXhpdCgic3BhY2UiKSxjKTpmPT09OTY/KG49dC5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpLHM9MCxsKGYpKTpPZShmKT8odC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShmKSx0LmV4aXQoImxpbmVFbmRpbmciKSxjKToodC5lbnRlcigiY29kZVRleHREYXRhIikscChmKSl9ZnVuY3Rpb24gcChmKXtyZXR1cm4gZj09PW51bGx8fGY9PT0zMnx8Zj09PTk2fHxPZShmKT8odC5leGl0KCJjb2RlVGV4dERhdGEiKSxjKGYpKToodC5jb25zdW1lKGYpLHApfWZ1bmN0aW9uIGwoZil7cmV0dXJuIGY9PT05Nj8odC5jb25zdW1lKGYpLHMrKyxsKTpzPT09cj8odC5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIiksdC5leGl0KCJjb2RlVGV4dCIpLGUoZikpOihuLnR5cGU9ImNvZGVUZXh0RGF0YSIscChmKSl9fXZhciBRVCxQbmU9YigoKT0+e0F0KCk7UVQ9e25hbWU6ImNvZGVUZXh0IixwcmV2aW91czp1TnQscmVzb2x2ZTpoTnQsdG9rZW5pemU6Zk50fX0pO2Z1bmN0aW9uIFk2KHQsZSl7bGV0IGE9MDtpZihlLmxlbmd0aDwxZTQpdC5wdXNoKC4uLmUpO2Vsc2UgZm9yKDthPGUubGVuZ3RoOyl0LnB1c2goLi4uZS5zbGljZShhLGErMWU0KSksYSs9MWU0fXZhciBaNixKVD1iKCgpPT57WjY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5sZWZ0PWU/Wy4uLmVdOltdLHRoaXMucmlnaHQ9W119Z2V0KGUpe2lmKGU8MHx8ZT49dGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLnJpZ2h0Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2Fubm90IGFjY2VzcyBpbmRleCBgIitlKyJgIGluIGEgc3BsaWNlIGJ1ZmZlciBvZiBzaXplIGAiKyh0aGlzLmxlZnQubGVuZ3RoK3RoaXMucmlnaHQubGVuZ3RoKSsiYCIpO3JldHVybiBlPHRoaXMubGVmdC5sZW5ndGg/dGhpcy5sZWZ0W2VdOnRoaXMucmlnaHRbdGhpcy5yaWdodC5sZW5ndGgtZSt0aGlzLmxlZnQubGVuZ3RoLTFdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLnJpZ2h0Lmxlbmd0aH1zaGlmdCgpe3JldHVybiB0aGlzLnNldEN1cnNvcigwKSx0aGlzLnJpZ2h0LnBvcCgpfXNsaWNlKGUsYSl7bGV0IGk9YT8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBpPHRoaXMubGVmdC5sZW5ndGg/dGhpcy5sZWZ0LnNsaWNlKGUsaSk6ZT50aGlzLmxlZnQubGVuZ3RoP3RoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGgtaSt0aGlzLmxlZnQubGVuZ3RoLHRoaXMucmlnaHQubGVuZ3RoLWUrdGhpcy5sZWZ0Lmxlbmd0aCkucmV2ZXJzZSgpOnRoaXMubGVmdC5zbGljZShlKS5jb25jYXQodGhpcy5yaWdodC5zbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aC1pK3RoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKSl9c3BsaWNlKGUsYSxpKXtsZXQgcj1hfHwwO3RoaXMuc2V0Q3Vyc29yKE1hdGgudHJ1bmMoZSkpO2xldCBzPXRoaXMucmlnaHQuc3BsaWNlKHRoaXMucmlnaHQubGVuZ3RoLXIsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtyZXR1cm4gaSYmWTYodGhpcy5sZWZ0LGkpLHMucmV2ZXJzZSgpfXBvcCgpe3JldHVybiB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHRoaXMubGVmdC5wb3AoKX1wdXNoKGUpe3RoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksdGhpcy5sZWZ0LnB1c2goZSl9cHVzaE1hbnkoZSl7dGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxZNih0aGlzLmxlZnQsZSl9dW5zaGlmdChlKXt0aGlzLnNldEN1cnNvcigwKSx0aGlzLnJpZ2h0LnB1c2goZSl9dW5zaGlmdE1hbnkoZSl7dGhpcy5zZXRDdXJzb3IoMCksWTYodGhpcy5yaWdodCxlLnJldmVyc2UoKSl9c2V0Q3Vyc29yKGUpe2lmKCEoZT09PXRoaXMubGVmdC5sZW5ndGh8fGU+dGhpcy5sZWZ0Lmxlbmd0aCYmdGhpcy5yaWdodC5sZW5ndGg9PT0wfHxlPDAmJnRoaXMubGVmdC5sZW5ndGg9PT0wKSlpZihlPHRoaXMubGVmdC5sZW5ndGgpe2xldCBhPXRoaXMubGVmdC5zcGxpY2UoZSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1k2KHRoaXMucmlnaHQsYS5yZXZlcnNlKCkpfWVsc2V7bGV0IGE9dGhpcy5yaWdodC5zcGxpY2UodGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLnJpZ2h0Lmxlbmd0aC1lLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7WTYodGhpcy5sZWZ0LGEucmV2ZXJzZSgpKX19fX0pO2Z1bmN0aW9uIFU5KHQpe2xldCBlPXt9LGE9LTEsaSxyLHMsbixvLGQsYyxwPW5ldyBaNih0KTtmb3IoOysrYTxwLmxlbmd0aDspe2Zvcig7YSBpbiBlOylhPWVbYV07aWYoaT1wLmdldChhKSxhJiZpWzFdLnR5cGU9PT0iY2h1bmtGbG93IiYmcC5nZXQoYS0xKVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKGQ9aVsxXS5fdG9rZW5pemVyLmV2ZW50cyxzPTAsczxkLmxlbmd0aCYmZFtzXVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayImJihzKz0yKSxzPGQubGVuZ3RoJiZkW3NdWzFdLnR5cGU9PT0iY29udGVudCIpKWZvcig7KytzPGQubGVuZ3RoJiZkW3NdWzFdLnR5cGUhPT0iY29udGVudCI7KWRbc11bMV0udHlwZT09PSJjaHVua1RleHQiJiYoZFtzXVsxXS5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITAscysrKTtpZihpWzBdPT09ImVudGVyIilpWzFdLmNvbnRlbnRUeXBlJiYoT2JqZWN0LmFzc2lnbihlLG1OdChwLGEpKSxhPWVbYV0sYz0hMCk7ZWxzZSBpZihpWzFdLl9jb250YWluZXIpe2ZvcihzPWEscj12b2lkIDA7cy0tOylpZihuPXAuZ2V0KHMpLG5bMV0udHlwZT09PSJsaW5lRW5kaW5nInx8blsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpblswXT09PSJlbnRlciImJihyJiYocC5nZXQocilbMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIiksblsxXS50eXBlPSJsaW5lRW5kaW5nIixyPXMpO2Vsc2UgaWYoIShuWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fG5bMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCIpKWJyZWFrO3ImJihpWzFdLmVuZD17Li4ucC5nZXQocilbMV0uc3RhcnR9LG89cC5zbGljZShyLGEpLG8udW5zaGlmdChpKSxwLnNwbGljZShyLGEtcisxLG8pKX19cmV0dXJuIFIxKHQsMCxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscC5zbGljZSgwKSksIWN9ZnVuY3Rpb24gbU50KHQsZSl7bGV0IGE9dC5nZXQoZSlbMV0saT10LmdldChlKVsyXSxyPWUtMSxzPVtdLG49YS5fdG9rZW5pemVyO258fChuPWkucGFyc2VyW2EuY29udGVudFR5cGVdKGEuc3RhcnQpLGEuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nJiYobi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmc9ITApKTtsZXQgbz1uLmV2ZW50cyxkPVtdLGM9e30scCxsLGY9LTEsZz1hLHk9MCx2PTAsbT1bdl07Zm9yKDtnOyl7Zm9yKDt0LmdldCgrK3IpWzFdIT09ZzspO3MucHVzaChyKSxnLl90b2tlbml6ZXJ8fChwPWkuc2xpY2VTdHJlYW0oZyksZy5uZXh0fHxwLnB1c2gobnVsbCksbCYmbi5kZWZpbmVTa2lwKGcuc3RhcnQpLGcuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtJiYobi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtPSEwKSxuLndyaXRlKHApLGcuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtJiYobi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtPXZvaWQgMCkpLGw9ZyxnPWcubmV4dH1mb3IoZz1hOysrZjxvLmxlbmd0aDspb1tmXVswXT09PSJleGl0IiYmb1tmLTFdWzBdPT09ImVudGVyIiYmb1tmXVsxXS50eXBlPT09b1tmLTFdWzFdLnR5cGUmJm9bZl1bMV0uc3RhcnQubGluZSE9PW9bZl1bMV0uZW5kLmxpbmUmJih2PWYrMSxtLnB1c2godiksZy5fdG9rZW5pemVyPXZvaWQgMCxnLnByZXZpb3VzPXZvaWQgMCxnPWcubmV4dCk7Zm9yKG4uZXZlbnRzPVtdLGc/KGcuX3Rva2VuaXplcj12b2lkIDAsZy5wcmV2aW91cz12b2lkIDApOm0ucG9wKCksZj1tLmxlbmd0aDtmLS07KXtsZXQgeD1vLnNsaWNlKG1bZl0sbVtmKzFdKSxNPXMucG9wKCk7ZC5wdXNoKFtNLE0reC5sZW5ndGgtMV0pLHQuc3BsaWNlKE0sMix4KX1mb3IoZC5yZXZlcnNlKCksZj0tMTsrK2Y8ZC5sZW5ndGg7KWNbeStkW2ZdWzBdXT15K2RbZl1bMV0seSs9ZFtmXVsxXS1kW2ZdWzBdLTE7cmV0dXJuIGN9dmFyIGVMPWIoKCk9PntJcigpO0pUKCk7SlQoKX0pO2Z1bmN0aW9uIGJOdCh0KXtyZXR1cm4gVTkodCksdH1mdW5jdGlvbiB2TnQodCxlKXtsZXQgYTtyZXR1cm4gaTtmdW5jdGlvbiBpKG8pe3JldHVybiB0LmVudGVyKCJjb250ZW50IiksYT10LmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCJ9KSxyKG8pfWZ1bmN0aW9uIHIobyl7cmV0dXJuIG89PT1udWxsP3Mobyk6T2Uobyk/dC5jaGVjayhnTnQsbixzKShvKToodC5jb25zdW1lKG8pLHIpfWZ1bmN0aW9uIHMobyl7cmV0dXJuIHQuZXhpdCgiY2h1bmtDb250ZW50IiksdC5leGl0KCJjb250ZW50IiksZShvKX1mdW5jdGlvbiBuKG8pe3JldHVybiB0LmNvbnN1bWUobyksdC5leGl0KCJjaHVua0NvbnRlbnQiKSxhLm5leHQ9dC5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQiLHByZXZpb3VzOmF9KSxhPWEubmV4dCxyfX1mdW5jdGlvbiB5TnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdC5leGl0KCJjaHVua0NvbnRlbnQiKSx0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKG4pLHQuZXhpdCgibGluZUVuZGluZyIpLGl0KHQscywibGluZVByZWZpeCIpfWZ1bmN0aW9uIHMobil7aWYobj09PW51bGx8fE9lKG4pKXJldHVybiBhKG4pO2xldCBvPWkuZXZlbnRzW2kuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4haS5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpJiZvJiZvWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJm9bMl0uc2xpY2VTZXJpYWxpemUob1sxXSwhMCkubGVuZ3RoPj00P2Uobik6dC5pbnRlcnJ1cHQoaS5wYXJzZXIuY29uc3RydWN0cy5mbG93LGEsZSkobil9fXZhciB0TCxnTnQsSW5lPWIoKCk9PntCMSgpO0F0KCk7ZUwoKTt0TD17cmVzb2x2ZTpiTnQsdG9rZW5pemU6dk50fSxnTnQ9e3BhcnRpYWw6ITAsdG9rZW5pemU6eU50fX0pO2Z1bmN0aW9uIFc5KHQsZSxhLGkscixzLG4sbyxkKXtsZXQgYz1kfHxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscD0wO3JldHVybiBsO2Z1bmN0aW9uIGwoeCl7cmV0dXJuIHg9PT02MD8odC5lbnRlcihpKSx0LmVudGVyKHIpLHQuZW50ZXIocyksdC5jb25zdW1lKHgpLHQuZXhpdChzKSxmKTp4PT09bnVsbHx8eD09PTMyfHx4PT09NDF8fHYwKHgpP2EoeCk6KHQuZW50ZXIoaSksdC5lbnRlcihuKSx0LmVudGVyKG8pLHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSx2KHgpKX1mdW5jdGlvbiBmKHgpe3JldHVybiB4PT09NjI/KHQuZW50ZXIocyksdC5jb25zdW1lKHgpLHQuZXhpdChzKSx0LmV4aXQociksdC5leGl0KGkpLGUpOih0LmVudGVyKG8pLHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxnKHgpKX1mdW5jdGlvbiBnKHgpe3JldHVybiB4PT09NjI/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQobyksZih4KSk6eD09PW51bGx8fHg9PT02MHx8T2UoeCk/YSh4KToodC5jb25zdW1lKHgpLHg9PT05Mj95OmcpfWZ1bmN0aW9uIHkoeCl7cmV0dXJuIHg9PT02MHx8eD09PTYyfHx4PT09OTI/KHQuY29uc3VtZSh4KSxnKTpnKHgpfWZ1bmN0aW9uIHYoeCl7cmV0dXJuIXAmJih4PT09bnVsbHx8eD09PTQxfHxUdCh4KSk/KHQuZXhpdCgiY2h1bmtTdHJpbmciKSx0LmV4aXQobyksdC5leGl0KG4pLHQuZXhpdChpKSxlKHgpKTpwPGMmJng9PT00MD8odC5jb25zdW1lKHgpLHArKyx2KTp4PT09NDE/KHQuY29uc3VtZSh4KSxwLS0sdik6eD09PW51bGx8fHg9PT0zMnx8eD09PTQwfHx2MCh4KT9hKHgpOih0LmNvbnN1bWUoeCkseD09PTkyP206dil9ZnVuY3Rpb24gbSh4KXtyZXR1cm4geD09PTQwfHx4PT09NDF8fHg9PT05Mj8odC5jb25zdW1lKHgpLHYpOnYoeCl9fXZhciBhTD1iKCgpPT57QXQoKX0pO2Z1bmN0aW9uIEc5KHQsZSxhLGkscixzKXtsZXQgbj10aGlzLG89MCxkO3JldHVybiBjO2Z1bmN0aW9uIGMoZyl7cmV0dXJuIHQuZW50ZXIoaSksdC5lbnRlcihyKSx0LmNvbnN1bWUoZyksdC5leGl0KHIpLHQuZW50ZXIocykscH1mdW5jdGlvbiBwKGcpe3JldHVybiBvPjk5OXx8Zz09PW51bGx8fGc9PT05MXx8Zz09PTkzJiYhZHx8Zz09PTk0JiYhbyYmIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiaW4gbi5wYXJzZXIuY29uc3RydWN0cz9hKGcpOmc9PT05Mz8odC5leGl0KHMpLHQuZW50ZXIociksdC5jb25zdW1lKGcpLHQuZXhpdChyKSx0LmV4aXQoaSksZSk6T2UoZyk/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoZyksdC5leGl0KCJsaW5lRW5kaW5nIikscCk6KHQuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxsKGcpKX1mdW5jdGlvbiBsKGcpe3JldHVybiBnPT09bnVsbHx8Zz09PTkxfHxnPT09OTN8fE9lKGcpfHxvKys+OTk5Pyh0LmV4aXQoImNodW5rU3RyaW5nIikscChnKSk6KHQuY29uc3VtZShnKSxkfHwoZD0hUWUoZykpLGc9PT05Mj9mOmwpfWZ1bmN0aW9uIGYoZyl7cmV0dXJuIGc9PT05MXx8Zz09PTkyfHxnPT09OTM/KHQuY29uc3VtZShnKSxvKyssbCk6bChnKX19dmFyIGlMPWIoKCk9PntBdCgpfSk7ZnVuY3Rpb24gWTkodCxlLGEsaSxyLHMpe2xldCBuO3JldHVybiBvO2Z1bmN0aW9uIG8oZil7cmV0dXJuIGY9PT0zNHx8Zj09PTM5fHxmPT09NDA/KHQuZW50ZXIoaSksdC5lbnRlcihyKSx0LmNvbnN1bWUoZiksdC5leGl0KHIpLG49Zj09PTQwPzQxOmYsZCk6YShmKX1mdW5jdGlvbiBkKGYpe3JldHVybiBmPT09bj8odC5lbnRlcihyKSx0LmNvbnN1bWUoZiksdC5leGl0KHIpLHQuZXhpdChpKSxlKToodC5lbnRlcihzKSxjKGYpKX1mdW5jdGlvbiBjKGYpe3JldHVybiBmPT09bj8odC5leGl0KHMpLGQobikpOmY9PT1udWxsP2EoZik6T2UoZik/KHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUoZiksdC5leGl0KCJsaW5lRW5kaW5nIiksaXQodCxjLCJsaW5lUHJlZml4IikpOih0LmVudGVyKCJjaHVua1N0cmluZyIse2NvbnRlbnRUeXBlOiJzdHJpbmcifSkscChmKSl9ZnVuY3Rpb24gcChmKXtyZXR1cm4gZj09PW58fGY9PT1udWxsfHxPZShmKT8odC5leGl0KCJjaHVua1N0cmluZyIpLGMoZikpOih0LmNvbnN1bWUoZiksZj09PTkyP2w6cCl9ZnVuY3Rpb24gbChmKXtyZXR1cm4gZj09PW58fGY9PT05Mj8odC5jb25zdW1lKGYpLHApOnAoZil9fXZhciByTD1iKCgpPT57QjEoKTtBdCgpfSk7ZnVuY3Rpb24gUzAodCxlKXtsZXQgYTtyZXR1cm4gaTtmdW5jdGlvbiBpKHIpe3JldHVybiBPZShyKT8odC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShyKSx0LmV4aXQoImxpbmVFbmRpbmciKSxhPSEwLGkpOlFlKHIpP2l0KHQsaSxhPyJsaW5lUHJlZml4IjoibGluZVN1ZmZpeCIpKHIpOmUocil9fXZhciBzTD1iKCgpPT57QjEoKTtBdCgpfSk7ZnVuY3Rpb24gd050KHQsZSxhKXtsZXQgaT10aGlzLHI7cmV0dXJuIHM7ZnVuY3Rpb24gcyhnKXtyZXR1cm4gdC5lbnRlcigiZGVmaW5pdGlvbiIpLG4oZyl9ZnVuY3Rpb24gbihnKXtyZXR1cm4gRzkuY2FsbChpLHQsbyxhLCJkZWZpbml0aW9uTGFiZWwiLCJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLCJkZWZpbml0aW9uTGFiZWxTdHJpbmciKShnKX1mdW5jdGlvbiBvKGcpe3JldHVybiByPUkxKGkuc2xpY2VTZXJpYWxpemUoaS5ldmVudHNbaS5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSksZz09PTU4Pyh0LmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksdC5jb25zdW1lKGcpLHQuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLGQpOmEoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gVHQoZyk/UzAodCxjKShnKTpjKGcpfWZ1bmN0aW9uIGMoZyl7cmV0dXJuIFc5KHQscCxhLCJkZWZpbml0aW9uRGVzdGluYXRpb24iLCJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsImRlZmluaXRpb25EZXN0aW5hdGlvblJhdyIsImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIpKGcpfWZ1bmN0aW9uIHAoZyl7cmV0dXJuIHQuYXR0ZW1wdCh4TnQsbCxsKShnKX1mdW5jdGlvbiBsKGcpe3JldHVybiBRZShnKT9pdCh0LGYsIndoaXRlc3BhY2UiKShnKTpmKGcpfWZ1bmN0aW9uIGYoZyl7cmV0dXJuIGc9PT1udWxsfHxPZShnKT8odC5leGl0KCJkZWZpbml0aW9uIiksaS5wYXJzZXIuZGVmaW5lZC5wdXNoKHIpLGUoZykpOmEoZyl9fWZ1bmN0aW9uIE1OdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShvKXtyZXR1cm4gVHQobyk/UzAodCxyKShvKTphKG8pfWZ1bmN0aW9uIHIobyl7cmV0dXJuIFk5KHQscyxhLCJkZWZpbml0aW9uVGl0bGUiLCJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCJkZWZpbml0aW9uVGl0bGVTdHJpbmciKShvKX1mdW5jdGlvbiBzKG8pe3JldHVybiBRZShvKT9pdCh0LG4sIndoaXRlc3BhY2UiKShvKTpuKG8pfWZ1bmN0aW9uIG4obyl7cmV0dXJuIG89PT1udWxsfHxPZShvKT9lKG8pOmEobyl9fXZhciBuTCx4TnQsTm5lPWIoKCk9PnthTCgpO2lMKCk7QjEoKTtyTCgpO3NMKCk7QXQoKTtWbigpO25MPXtuYW1lOiJkZWZpbml0aW9uIix0b2tlbml6ZTp3TnR9LHhOdD17cGFydGlhbDohMCx0b2tlbml6ZTpNTnR9fSk7ZnVuY3Rpb24gek50KHQsZSxhKXtyZXR1cm4gaTtmdW5jdGlvbiBpKHMpe3JldHVybiB0LmVudGVyKCJoYXJkQnJlYWtFc2NhcGUiKSx0LmNvbnN1bWUocykscn1mdW5jdGlvbiByKHMpe3JldHVybiBPZShzKT8odC5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKSxlKHMpKTphKHMpfX12YXIgb0wsRm5lPWIoKCk9PntBdCgpO29MPXtuYW1lOiJoYXJkQnJlYWtFc2NhcGUiLHRva2VuaXplOnpOdH19KTtmdW5jdGlvbiBrTnQodCxlKXtsZXQgYT10Lmxlbmd0aC0yLGk9MyxyLHM7cmV0dXJuIHRbaV1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIiYmKGkrPTIpLGEtMj5pJiZ0W2FdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihhLT0yKSx0W2FdWzFdLnR5cGU9PT0iYXR4SGVhZGluZ1NlcXVlbmNlIiYmKGk9PT1hLTF8fGEtND5pJiZ0W2EtMl1bMV0udHlwZT09PSJ3aGl0ZXNwYWNlIikmJihhLT1pKzE9PT1hPzI6NCksYT5pJiYocj17dHlwZToiYXR4SGVhZGluZ1RleHQiLHN0YXJ0OnRbaV1bMV0uc3RhcnQsZW5kOnRbYV1bMV0uZW5kfSxzPXt0eXBlOiJjaHVua1RleHQiLHN0YXJ0OnRbaV1bMV0uc3RhcnQsZW5kOnRbYV1bMV0uZW5kLGNvbnRlbnRUeXBlOiJ0ZXh0In0sUjEodCxpLGEtaSsxLFtbImVudGVyIixyLGVdLFsiZW50ZXIiLHMsZV0sWyJleGl0IixzLGVdLFsiZXhpdCIscixlXV0pKSx0fWZ1bmN0aW9uIFNOdCh0LGUsYSl7bGV0IGk9MDtyZXR1cm4gcjtmdW5jdGlvbiByKHApe3JldHVybiB0LmVudGVyKCJhdHhIZWFkaW5nIikscyhwKX1mdW5jdGlvbiBzKHApe3JldHVybiB0LmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxuKHApfWZ1bmN0aW9uIG4ocCl7cmV0dXJuIHA9PT0zNSYmaSsrPDY/KHQuY29uc3VtZShwKSxuKTpwPT09bnVsbHx8VHQocCk/KHQuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIiksbyhwKSk6YShwKX1mdW5jdGlvbiBvKHApe3JldHVybiBwPT09MzU/KHQuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLGQocCkpOnA9PT1udWxsfHxPZShwKT8odC5leGl0KCJhdHhIZWFkaW5nIiksZShwKSk6UWUocCk/aXQodCxvLCJ3aGl0ZXNwYWNlIikocCk6KHQuZW50ZXIoImF0eEhlYWRpbmdUZXh0IiksYyhwKSl9ZnVuY3Rpb24gZChwKXtyZXR1cm4gcD09PTM1Pyh0LmNvbnN1bWUocCksZCk6KHQuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIiksbyhwKSl9ZnVuY3Rpb24gYyhwKXtyZXR1cm4gcD09PW51bGx8fHA9PT0zNXx8VHQocCk/KHQuZXhpdCgiYXR4SGVhZGluZ1RleHQiKSxvKHApKToodC5jb25zdW1lKHApLGMpfX12YXIgbEwsT25lPWIoKCk9PntCMSgpO0F0KCk7SXIoKTtsTD17bmFtZToiaGVhZGluZ0F0eCIscmVzb2x2ZTprTnQsdG9rZW5pemU6U050fX0pO3ZhciBSbmUsY0wsQm5lPWIoKCk9PntSbmU9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmFzZSIsImJhc2Vmb250IiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYXB0aW9uIiwiY2VudGVyIiwiY29sIiwiY29sZ3JvdXAiLCJkZCIsImRldGFpbHMiLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImZyYW1lIiwiZnJhbWVzZXQiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaHIiLCJodG1sIiwiaWZyYW1lIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFpbiIsIm1lbnUiLCJtZW51aXRlbSIsIm5hdiIsIm5vZnJhbWVzIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsInAiLCJwYXJhbSIsInNlYXJjaCIsInNlY3Rpb24iLCJzdW1tYXJ5IiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidWwiXSxjTD1bInByZSIsInNjcmlwdCIsInN0eWxlIiwidGV4dGFyZWEiXX0pO2Z1bmN0aW9uIFROdCh0KXtsZXQgZT10Lmxlbmd0aDtmb3IoO2UtLSYmISh0W2VdWzBdPT09ImVudGVyIiYmdFtlXVsxXS50eXBlPT09Imh0bWxGbG93Iik7KTtyZXR1cm4gZT4xJiZ0W2UtMl1bMV0udHlwZT09PSJsaW5lUHJlZml4IiYmKHRbZV1bMV0uc3RhcnQ9dFtlLTJdWzFdLnN0YXJ0LHRbZSsxXVsxXS5zdGFydD10W2UtMl1bMV0uc3RhcnQsdC5zcGxpY2UoZS0yLDIpKSx0fWZ1bmN0aW9uIExOdCh0LGUsYSl7bGV0IGk9dGhpcyxyLHMsbixvLGQ7cmV0dXJuIGM7ZnVuY3Rpb24gYyhIKXtyZXR1cm4gcChIKX1mdW5jdGlvbiBwKEgpe3JldHVybiB0LmVudGVyKCJodG1sRmxvdyIpLHQuZW50ZXIoImh0bWxGbG93RGF0YSIpLHQuY29uc3VtZShIKSxsfWZ1bmN0aW9uIGwoSCl7cmV0dXJuIEg9PT0zMz8odC5jb25zdW1lKEgpLGYpOkg9PT00Nz8odC5jb25zdW1lKEgpLHM9ITAsdik6SD09PTYzPyh0LmNvbnN1bWUoSCkscj0zLGkuaW50ZXJydXB0P2U6aik6aTIoSCk/KHQuY29uc3VtZShIKSxuPVN0cmluZy5mcm9tQ2hhckNvZGUoSCksbSk6YShIKX1mdW5jdGlvbiBmKEgpe3JldHVybiBIPT09NDU/KHQuY29uc3VtZShIKSxyPTIsZyk6SD09PTkxPyh0LmNvbnN1bWUoSCkscj01LG89MCx5KTppMihIKT8odC5jb25zdW1lKEgpLHI9NCxpLmludGVycnVwdD9lOmopOmEoSCl9ZnVuY3Rpb24gZyhIKXtyZXR1cm4gSD09PTQ1Pyh0LmNvbnN1bWUoSCksaS5pbnRlcnJ1cHQ/ZTpqKTphKEgpfWZ1bmN0aW9uIHkoSCl7bGV0IGNlPSJDREFUQVsiO3JldHVybiBIPT09Y2UuY2hhckNvZGVBdChvKyspPyh0LmNvbnN1bWUoSCksbz09PWNlLmxlbmd0aD9pLmludGVycnVwdD9lOno6eSk6YShIKX1mdW5jdGlvbiB2KEgpe3JldHVybiBpMihIKT8odC5jb25zdW1lKEgpLG49U3RyaW5nLmZyb21DaGFyQ29kZShIKSxtKTphKEgpfWZ1bmN0aW9uIG0oSCl7aWYoSD09PW51bGx8fEg9PT00N3x8SD09PTYyfHxUdChIKSl7bGV0IGNlPUg9PT00NyxrZT1uLnRvTG93ZXJDYXNlKCk7cmV0dXJuIWNlJiYhcyYmY0wuaW5jbHVkZXMoa2UpPyhyPTEsaS5pbnRlcnJ1cHQ/ZShIKTp6KEgpKTpSbmUuaW5jbHVkZXMobi50b0xvd2VyQ2FzZSgpKT8ocj02LGNlPyh0LmNvbnN1bWUoSCkseCk6aS5pbnRlcnJ1cHQ/ZShIKTp6KEgpKToocj03LGkuaW50ZXJydXB0JiYhaS5wYXJzZXIubGF6eVtpLm5vdygpLmxpbmVdP2EoSCk6cz9NKEgpOlMoSCkpfXJldHVybiBIPT09NDV8fFAxKEgpPyh0LmNvbnN1bWUoSCksbis9U3RyaW5nLmZyb21DaGFyQ29kZShIKSxtKTphKEgpfWZ1bmN0aW9uIHgoSCl7cmV0dXJuIEg9PT02Mj8odC5jb25zdW1lKEgpLGkuaW50ZXJydXB0P2U6eik6YShIKX1mdW5jdGlvbiBNKEgpe3JldHVybiBRZShIKT8odC5jb25zdW1lKEgpLE0pOnEoSCl9ZnVuY3Rpb24gUyhIKXtyZXR1cm4gSD09PTQ3Pyh0LmNvbnN1bWUoSCkscSk6SD09PTU4fHxIPT09OTV8fGkyKEgpPyh0LmNvbnN1bWUoSCksRik6UWUoSCk/KHQuY29uc3VtZShIKSxTKTpxKEgpfWZ1bmN0aW9uIEYoSCl7cmV0dXJuIEg9PT00NXx8SD09PTQ2fHxIPT09NTh8fEg9PT05NXx8UDEoSCk/KHQuY29uc3VtZShIKSxGKTpfKEgpfWZ1bmN0aW9uIF8oSCl7cmV0dXJuIEg9PT02MT8odC5jb25zdW1lKEgpLGspOlFlKEgpPyh0LmNvbnN1bWUoSCksXyk6UyhIKX1mdW5jdGlvbiBrKEgpe3JldHVybiBIPT09bnVsbHx8SD09PTYwfHxIPT09NjF8fEg9PT02Mnx8SD09PTk2P2EoSCk6SD09PTM0fHxIPT09Mzk/KHQuY29uc3VtZShIKSxkPUgsTik6UWUoSCk/KHQuY29uc3VtZShIKSxrKTpMKEgpfWZ1bmN0aW9uIE4oSCl7cmV0dXJuIEg9PT1kPyh0LmNvbnN1bWUoSCksZD1udWxsLEEpOkg9PT1udWxsfHxPZShIKT9hKEgpOih0LmNvbnN1bWUoSCksTil9ZnVuY3Rpb24gTChIKXtyZXR1cm4gSD09PW51bGx8fEg9PT0zNHx8SD09PTM5fHxIPT09NDd8fEg9PT02MHx8SD09PTYxfHxIPT09NjJ8fEg9PT05Nnx8VHQoSCk/XyhIKToodC5jb25zdW1lKEgpLEwpfWZ1bmN0aW9uIEEoSCl7cmV0dXJuIEg9PT00N3x8SD09PTYyfHxRZShIKT9TKEgpOmEoSCl9ZnVuY3Rpb24gcShIKXtyZXR1cm4gSD09PTYyPyh0LmNvbnN1bWUoSCksQyk6YShIKX1mdW5jdGlvbiBDKEgpe3JldHVybiBIPT09bnVsbHx8T2UoSCk/eihIKTpRZShIKT8odC5jb25zdW1lKEgpLEMpOmEoSCl9ZnVuY3Rpb24geihIKXtyZXR1cm4gSD09PTQ1JiZyPT09Mj8odC5jb25zdW1lKEgpLFYpOkg9PT02MCYmcj09PTE/KHQuY29uc3VtZShIKSxSKTpIPT09NjImJnI9PT00Pyh0LmNvbnN1bWUoSCksbWUpOkg9PT02MyYmcj09PTM/KHQuY29uc3VtZShIKSxqKTpIPT09OTMmJnI9PT01Pyh0LmNvbnN1bWUoSCkscmUpOk9lKEgpJiYocj09PTZ8fHI9PT03KT8odC5leGl0KCJodG1sRmxvd0RhdGEiKSx0LmNoZWNrKENOdCx3ZSxFKShIKSk6SD09PW51bGx8fE9lKEgpPyh0LmV4aXQoImh0bWxGbG93RGF0YSIpLEUoSCkpOih0LmNvbnN1bWUoSCkseil9ZnVuY3Rpb24gRShIKXtyZXR1cm4gdC5jaGVjayhfTnQsVCx3ZSkoSCl9ZnVuY3Rpb24gVChIKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShIKSx0LmV4aXQoImxpbmVFbmRpbmciKSwkfWZ1bmN0aW9uICQoSCl7cmV0dXJuIEg9PT1udWxsfHxPZShIKT9FKEgpOih0LmVudGVyKCJodG1sRmxvd0RhdGEiKSx6KEgpKX1mdW5jdGlvbiBWKEgpe3JldHVybiBIPT09NDU/KHQuY29uc3VtZShIKSxqKTp6KEgpfWZ1bmN0aW9uIFIoSCl7cmV0dXJuIEg9PT00Nz8odC5jb25zdW1lKEgpLG49IiIsVSk6eihIKX1mdW5jdGlvbiBVKEgpe2lmKEg9PT02Mil7bGV0IGNlPW4udG9Mb3dlckNhc2UoKTtyZXR1cm4gY0wuaW5jbHVkZXMoY2UpPyh0LmNvbnN1bWUoSCksbWUpOnooSCl9cmV0dXJuIGkyKEgpJiZuLmxlbmd0aDw4Pyh0LmNvbnN1bWUoSCksbis9U3RyaW5nLmZyb21DaGFyQ29kZShIKSxVKTp6KEgpfWZ1bmN0aW9uIHJlKEgpe3JldHVybiBIPT09OTM/KHQuY29uc3VtZShIKSxqKTp6KEgpfWZ1bmN0aW9uIGooSCl7cmV0dXJuIEg9PT02Mj8odC5jb25zdW1lKEgpLG1lKTpIPT09NDUmJnI9PT0yPyh0LmNvbnN1bWUoSCksaik6eihIKX1mdW5jdGlvbiBtZShIKXtyZXR1cm4gSD09PW51bGx8fE9lKEgpPyh0LmV4aXQoImh0bWxGbG93RGF0YSIpLHdlKEgpKToodC5jb25zdW1lKEgpLG1lKX1mdW5jdGlvbiB3ZShIKXtyZXR1cm4gdC5leGl0KCJodG1sRmxvdyIpLGUoSCl9fWZ1bmN0aW9uICROdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gcjtmdW5jdGlvbiByKG4pe3JldHVybiBPZShuKT8odC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShuKSx0LmV4aXQoImxpbmVFbmRpbmciKSxzKTphKG4pfWZ1bmN0aW9uIHMobil7cmV0dXJuIGkucGFyc2VyLmxhenlbaS5ub3coKS5saW5lXT9hKG4pOmUobil9fWZ1bmN0aW9uIEFOdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShyKXtyZXR1cm4gdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShyKSx0LmV4aXQoImxpbmVFbmRpbmciKSx0LmF0dGVtcHQoUnIsZSxhKX19dmFyIGRMLENOdCxfTnQsSG5lPWIoKCk9PntBdCgpO0JuZSgpO0I5KCk7ZEw9e2NvbmNyZXRlOiEwLG5hbWU6Imh0bWxGbG93IixyZXNvbHZlVG86VE50LHRva2VuaXplOkxOdH0sQ050PXtwYXJ0aWFsOiEwLHRva2VuaXplOkFOdH0sX050PXtwYXJ0aWFsOiEwLHRva2VuaXplOiROdH19KTtmdW5jdGlvbiBETnQodCxlLGEpe2xldCBpPXRoaXMscixzLG47cmV0dXJuIG87ZnVuY3Rpb24gbyhqKXtyZXR1cm4gdC5lbnRlcigiaHRtbFRleHQiKSx0LmVudGVyKCJodG1sVGV4dERhdGEiKSx0LmNvbnN1bWUoaiksZH1mdW5jdGlvbiBkKGope3JldHVybiBqPT09MzM/KHQuY29uc3VtZShqKSxjKTpqPT09NDc/KHQuY29uc3VtZShqKSxfKTpqPT09NjM/KHQuY29uc3VtZShqKSxTKTppMihqKT8odC5jb25zdW1lKGopLEwpOmEoail9ZnVuY3Rpb24gYyhqKXtyZXR1cm4gaj09PTQ1Pyh0LmNvbnN1bWUoaikscCk6aj09PTkxPyh0LmNvbnN1bWUoaikscz0wLHkpOmkyKGopPyh0LmNvbnN1bWUoaiksTSk6YShqKX1mdW5jdGlvbiBwKGope3JldHVybiBqPT09NDU/KHQuY29uc3VtZShqKSxnKTphKGopfWZ1bmN0aW9uIGwoail7cmV0dXJuIGo9PT1udWxsP2Eoaik6aj09PTQ1Pyh0LmNvbnN1bWUoaiksZik6T2Uoaik/KG49bCxSKGopKToodC5jb25zdW1lKGopLGwpfWZ1bmN0aW9uIGYoail7cmV0dXJuIGo9PT00NT8odC5jb25zdW1lKGopLGcpOmwoail9ZnVuY3Rpb24gZyhqKXtyZXR1cm4gaj09PTYyP1Yoaik6aj09PTQ1P2Yoaik6bChqKX1mdW5jdGlvbiB5KGope2xldCBtZT0iQ0RBVEFbIjtyZXR1cm4gaj09PW1lLmNoYXJDb2RlQXQocysrKT8odC5jb25zdW1lKGopLHM9PT1tZS5sZW5ndGg/djp5KTphKGopfWZ1bmN0aW9uIHYoail7cmV0dXJuIGo9PT1udWxsP2Eoaik6aj09PTkzPyh0LmNvbnN1bWUoaiksbSk6T2Uoaik/KG49dixSKGopKToodC5jb25zdW1lKGopLHYpfWZ1bmN0aW9uIG0oail7cmV0dXJuIGo9PT05Mz8odC5jb25zdW1lKGopLHgpOnYoail9ZnVuY3Rpb24geChqKXtyZXR1cm4gaj09PTYyP1Yoaik6aj09PTkzPyh0LmNvbnN1bWUoaikseCk6dihqKX1mdW5jdGlvbiBNKGope3JldHVybiBqPT09bnVsbHx8aj09PTYyP1Yoaik6T2Uoaik/KG49TSxSKGopKToodC5jb25zdW1lKGopLE0pfWZ1bmN0aW9uIFMoail7cmV0dXJuIGo9PT1udWxsP2Eoaik6aj09PTYzPyh0LmNvbnN1bWUoaiksRik6T2Uoaik/KG49UyxSKGopKToodC5jb25zdW1lKGopLFMpfWZ1bmN0aW9uIEYoail7cmV0dXJuIGo9PT02Mj9WKGopOlMoail9ZnVuY3Rpb24gXyhqKXtyZXR1cm4gaTIoaik/KHQuY29uc3VtZShqKSxrKTphKGopfWZ1bmN0aW9uIGsoail7cmV0dXJuIGo9PT00NXx8UDEoaik/KHQuY29uc3VtZShqKSxrKTpOKGopfWZ1bmN0aW9uIE4oail7cmV0dXJuIE9lKGopPyhuPU4sUihqKSk6UWUoaik/KHQuY29uc3VtZShqKSxOKTpWKGopfWZ1bmN0aW9uIEwoail7cmV0dXJuIGo9PT00NXx8UDEoaik/KHQuY29uc3VtZShqKSxMKTpqPT09NDd8fGo9PT02Mnx8VHQoaik/QShqKTphKGopfWZ1bmN0aW9uIEEoail7cmV0dXJuIGo9PT00Nz8odC5jb25zdW1lKGopLFYpOmo9PT01OHx8aj09PTk1fHxpMihqKT8odC5jb25zdW1lKGopLHEpOk9lKGopPyhuPUEsUihqKSk6UWUoaik/KHQuY29uc3VtZShqKSxBKTpWKGopfWZ1bmN0aW9uIHEoail7cmV0dXJuIGo9PT00NXx8aj09PTQ2fHxqPT09NTh8fGo9PT05NXx8UDEoaik/KHQuY29uc3VtZShqKSxxKTpDKGopfWZ1bmN0aW9uIEMoail7cmV0dXJuIGo9PT02MT8odC5jb25zdW1lKGopLHopOk9lKGopPyhuPUMsUihqKSk6UWUoaik/KHQuY29uc3VtZShqKSxDKTpBKGopfWZ1bmN0aW9uIHooail7cmV0dXJuIGo9PT1udWxsfHxqPT09NjB8fGo9PT02MXx8aj09PTYyfHxqPT09OTY/YShqKTpqPT09MzR8fGo9PT0zOT8odC5jb25zdW1lKGopLHI9aixFKTpPZShqKT8obj16LFIoaikpOlFlKGopPyh0LmNvbnN1bWUoaikseik6KHQuY29uc3VtZShqKSxUKX1mdW5jdGlvbiBFKGope3JldHVybiBqPT09cj8odC5jb25zdW1lKGopLHI9dm9pZCAwLCQpOmo9PT1udWxsP2Eoaik6T2Uoaik/KG49RSxSKGopKToodC5jb25zdW1lKGopLEUpfWZ1bmN0aW9uIFQoail7cmV0dXJuIGo9PT1udWxsfHxqPT09MzR8fGo9PT0zOXx8aj09PTYwfHxqPT09NjF8fGo9PT05Nj9hKGopOmo9PT00N3x8aj09PTYyfHxUdChqKT9BKGopOih0LmNvbnN1bWUoaiksVCl9ZnVuY3Rpb24gJChqKXtyZXR1cm4gaj09PTQ3fHxqPT09NjJ8fFR0KGopP0Eoaik6YShqKX1mdW5jdGlvbiBWKGope3JldHVybiBqPT09NjI/KHQuY29uc3VtZShqKSx0LmV4aXQoImh0bWxUZXh0RGF0YSIpLHQuZXhpdCgiaHRtbFRleHQiKSxlKTphKGopfWZ1bmN0aW9uIFIoail7cmV0dXJuIHQuZXhpdCgiaHRtbFRleHREYXRhIiksdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShqKSx0LmV4aXQoImxpbmVFbmRpbmciKSxVfWZ1bmN0aW9uIFUoail7cmV0dXJuIFFlKGopP2l0KHQscmUsImxpbmVQcmVmaXgiLGkucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoaik6cmUoail9ZnVuY3Rpb24gcmUoail7cmV0dXJuIHQuZW50ZXIoImh0bWxUZXh0RGF0YSIpLG4oail9fXZhciBwTCxxbmU9YigoKT0+e0IxKCk7QXQoKTtwTD17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOkROdH19KTtmdW5jdGlvbiBOTnQodCl7bGV0IGU9LTEsYT1bXTtmb3IoOysrZTx0Lmxlbmd0aDspe2xldCBpPXRbZV1bMV07aWYoYS5wdXNoKHRbZV0pLGkudHlwZT09PSJsYWJlbEltYWdlInx8aS50eXBlPT09ImxhYmVsTGluayJ8fGkudHlwZT09PSJsYWJlbEVuZCIpe2xldCByPWkudHlwZT09PSJsYWJlbEltYWdlIj80OjI7aS50eXBlPSJkYXRhIixlKz1yfX1yZXR1cm4gdC5sZW5ndGghPT1hLmxlbmd0aCYmUjEodCwwLHQubGVuZ3RoLGEpLHR9ZnVuY3Rpb24gRk50KHQsZSl7bGV0IGE9dC5sZW5ndGgsaT0wLHIscyxuLG87Zm9yKDthLS07KWlmKHI9dFthXVsxXSxzKXtpZihyLnR5cGU9PT0ibGluayJ8fHIudHlwZT09PSJsYWJlbExpbmsiJiZyLl9pbmFjdGl2ZSlicmVhazt0W2FdWzBdPT09ImVudGVyIiYmci50eXBlPT09ImxhYmVsTGluayImJihyLl9pbmFjdGl2ZT0hMCl9ZWxzZSBpZihuKXtpZih0W2FdWzBdPT09ImVudGVyIiYmKHIudHlwZT09PSJsYWJlbEltYWdlInx8ci50eXBlPT09ImxhYmVsTGluayIpJiYhci5fYmFsYW5jZWQmJihzPWEsci50eXBlIT09ImxhYmVsTGluayIpKXtpPTI7YnJlYWt9fWVsc2Ugci50eXBlPT09ImxhYmVsRW5kIiYmKG49YSk7bGV0IGQ9e3R5cGU6dFtzXVsxXS50eXBlPT09ImxhYmVsTGluayI/ImxpbmsiOiJpbWFnZSIsc3RhcnQ6ey4uLnRbc11bMV0uc3RhcnR9LGVuZDp7Li4udFt0Lmxlbmd0aC0xXVsxXS5lbmR9fSxjPXt0eXBlOiJsYWJlbCIsc3RhcnQ6ey4uLnRbc11bMV0uc3RhcnR9LGVuZDp7Li4udFtuXVsxXS5lbmR9fSxwPXt0eXBlOiJsYWJlbFRleHQiLHN0YXJ0OnsuLi50W3MraSsyXVsxXS5lbmR9LGVuZDp7Li4udFtuLTJdWzFdLnN0YXJ0fX07cmV0dXJuIG89W1siZW50ZXIiLGQsZV0sWyJlbnRlciIsYyxlXV0sbz1aMShvLHQuc2xpY2UocysxLHMraSszKSksbz1aMShvLFtbImVudGVyIixwLGVdXSksbz1aMShvLFVuKGUucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLHQuc2xpY2UocytpKzQsbi0zKSxlKSksbz1aMShvLFtbImV4aXQiLHAsZV0sdFtuLTJdLHRbbi0xXSxbImV4aXQiLGMsZV1dKSxvPVoxKG8sdC5zbGljZShuKzEpKSxvPVoxKG8sW1siZXhpdCIsZCxlXV0pLFIxKHQscyx0Lmxlbmd0aCxvKSx0fWZ1bmN0aW9uIE9OdCh0LGUsYSl7bGV0IGk9dGhpcyxyPWkuZXZlbnRzLmxlbmd0aCxzLG47Zm9yKDtyLS07KWlmKChpLmV2ZW50c1tyXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UifHxpLmV2ZW50c1tyXVsxXS50eXBlPT09ImxhYmVsTGluayIpJiYhaS5ldmVudHNbcl1bMV0uX2JhbGFuY2VkKXtzPWkuZXZlbnRzW3JdWzFdO2JyZWFrfXJldHVybiBvO2Z1bmN0aW9uIG8oZil7cmV0dXJuIHM/cy5faW5hY3RpdmU/bChmKToobj1pLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKEkxKGkuc2xpY2VTZXJpYWxpemUoe3N0YXJ0OnMuZW5kLGVuZDppLm5vdygpfSkpKSx0LmVudGVyKCJsYWJlbEVuZCIpLHQuZW50ZXIoImxhYmVsTWFya2VyIiksdC5jb25zdW1lKGYpLHQuZXhpdCgibGFiZWxNYXJrZXIiKSx0LmV4aXQoImxhYmVsRW5kIiksZCk6YShmKX1mdW5jdGlvbiBkKGYpe3JldHVybiBmPT09NDA/dC5hdHRlbXB0KEVOdCxwLG4/cDpsKShmKTpmPT09OTE/dC5hdHRlbXB0KFBOdCxwLG4/YzpsKShmKTpuP3AoZik6bChmKX1mdW5jdGlvbiBjKGYpe3JldHVybiB0LmF0dGVtcHQoSU50LHAsbCkoZil9ZnVuY3Rpb24gcChmKXtyZXR1cm4gZShmKX1mdW5jdGlvbiBsKGYpe3JldHVybiBzLl9iYWxhbmNlZD0hMCxhKGYpfX1mdW5jdGlvbiBSTnQodCxlLGEpe3JldHVybiBpO2Z1bmN0aW9uIGkobCl7cmV0dXJuIHQuZW50ZXIoInJlc291cmNlIiksdC5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSx0LmNvbnN1bWUobCksdC5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHJ9ZnVuY3Rpb24gcihsKXtyZXR1cm4gVHQobCk/UzAodCxzKShsKTpzKGwpfWZ1bmN0aW9uIHMobCl7cmV0dXJuIGw9PT00MT9wKGwpOlc5KHQsbixvLCJyZXNvdXJjZURlc3RpbmF0aW9uIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWwiLCJyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsInJlc291cmNlRGVzdGluYXRpb25SYXciLCJyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nIiwzMikobCl9ZnVuY3Rpb24gbihsKXtyZXR1cm4gVHQobCk/UzAodCxkKShsKTpwKGwpfWZ1bmN0aW9uIG8obCl7cmV0dXJuIGEobCl9ZnVuY3Rpb24gZChsKXtyZXR1cm4gbD09PTM0fHxsPT09Mzl8fGw9PT00MD9ZOSh0LGMsYSwicmVzb3VyY2VUaXRsZSIsInJlc291cmNlVGl0bGVNYXJrZXIiLCJyZXNvdXJjZVRpdGxlU3RyaW5nIikobCk6cChsKX1mdW5jdGlvbiBjKGwpe3JldHVybiBUdChsKT9TMCh0LHApKGwpOnAobCl9ZnVuY3Rpb24gcChsKXtyZXR1cm4gbD09PTQxPyh0LmVudGVyKCJyZXNvdXJjZU1hcmtlciIpLHQuY29uc3VtZShsKSx0LmV4aXQoInJlc291cmNlTWFya2VyIiksdC5leGl0KCJyZXNvdXJjZSIpLGUpOmEobCl9fWZ1bmN0aW9uIEJOdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gcjtmdW5jdGlvbiByKG8pe3JldHVybiBHOS5jYWxsKGksdCxzLG4sInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hcmtlciIsInJlZmVyZW5jZVN0cmluZyIpKG8pfWZ1bmN0aW9uIHMobyl7cmV0dXJuIGkucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMoSTEoaS5zbGljZVNlcmlhbGl6ZShpLmV2ZW50c1tpLmV2ZW50cy5sZW5ndGgtMV1bMV0pLnNsaWNlKDEsLTEpKSk/ZShvKTphKG8pfWZ1bmN0aW9uIG4obyl7cmV0dXJuIGEobyl9fWZ1bmN0aW9uIEhOdCh0LGUsYSl7cmV0dXJuIGk7ZnVuY3Rpb24gaShzKXtyZXR1cm4gdC5lbnRlcigicmVmZXJlbmNlIiksdC5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksdC5jb25zdW1lKHMpLHQuZXhpdCgicmVmZXJlbmNlTWFya2VyIikscn1mdW5jdGlvbiByKHMpe3JldHVybiBzPT09OTM/KHQuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpLHQuY29uc3VtZShzKSx0LmV4aXQoInJlZmVyZW5jZU1hcmtlciIpLHQuZXhpdCgicmVmZXJlbmNlIiksZSk6YShzKX19dmFyIEMwLEVOdCxQTnQsSU50LFo5PWIoKCk9PnthTCgpO2lMKCk7ckwoKTtzTCgpO0F0KCk7SXIoKTtWbigpO1U2KCk7QzA9e25hbWU6ImxhYmVsRW5kIixyZXNvbHZlQWxsOk5OdCxyZXNvbHZlVG86Rk50LHRva2VuaXplOk9OdH0sRU50PXt0b2tlbml6ZTpSTnR9LFBOdD17dG9rZW5pemU6Qk50fSxJTnQ9e3Rva2VuaXplOkhOdH19KTtmdW5jdGlvbiBxTnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHI7ZnVuY3Rpb24gcihvKXtyZXR1cm4gdC5lbnRlcigibGFiZWxJbWFnZSIpLHQuZW50ZXIoImxhYmVsSW1hZ2VNYXJrZXIiKSx0LmNvbnN1bWUobyksdC5leGl0KCJsYWJlbEltYWdlTWFya2VyIiksc31mdW5jdGlvbiBzKG8pe3JldHVybiBvPT09OTE/KHQuZW50ZXIoImxhYmVsTWFya2VyIiksdC5jb25zdW1lKG8pLHQuZXhpdCgibGFiZWxNYXJrZXIiKSx0LmV4aXQoImxhYmVsSW1hZ2UiKSxuKTphKG8pfWZ1bmN0aW9uIG4obyl7cmV0dXJuIG89PT05NCYmIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiaW4gaS5wYXJzZXIuY29uc3RydWN0cz9hKG8pOmUobyl9fXZhciBoTCxWbmU9YigoKT0+e1o5KCk7aEw9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIscmVzb2x2ZUFsbDpDMC5yZXNvbHZlQWxsLHRva2VuaXplOnFOdH19KTtmdW5jdGlvbiBWTnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIHI7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdC5lbnRlcigibGFiZWxMaW5rIiksdC5lbnRlcigibGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUobiksdC5leGl0KCJsYWJlbE1hcmtlciIpLHQuZXhpdCgibGFiZWxMaW5rIiksc31mdW5jdGlvbiBzKG4pe3JldHVybiBuPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGkucGFyc2VyLmNvbnN0cnVjdHM/YShuKTplKG4pfX12YXIgdUwsam5lPWIoKCk9PntaOSgpO3VMPXtuYW1lOiJsYWJlbFN0YXJ0TGluayIscmVzb2x2ZUFsbDpDMC5yZXNvbHZlQWxsLHRva2VuaXplOlZOdH19KTtmdW5jdGlvbiBqTnQodCxlKXtyZXR1cm4gYTtmdW5jdGlvbiBhKGkpe3JldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKGkpLHQuZXhpdCgibGluZUVuZGluZyIpLGl0KHQsZSwibGluZVByZWZpeCIpfX12YXIgWDYsVW5lPWIoKCk9PntCMSgpO0F0KCk7WDY9e25hbWU6ImxpbmVFbmRpbmciLHRva2VuaXplOmpOdH19KTtmdW5jdGlvbiBVTnQodCxlLGEpe2xldCBpPTAscjtyZXR1cm4gcztmdW5jdGlvbiBzKGMpe3JldHVybiB0LmVudGVyKCJ0aGVtYXRpY0JyZWFrIiksbihjKX1mdW5jdGlvbiBuKGMpe3JldHVybiByPWMsbyhjKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjPT09cj8odC5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksZChjKSk6aT49MyYmKGM9PT1udWxsfHxPZShjKSk/KHQuZXhpdCgidGhlbWF0aWNCcmVhayIpLGUoYykpOmEoYyl9ZnVuY3Rpb24gZChjKXtyZXR1cm4gYz09PXI/KHQuY29uc3VtZShjKSxpKyssZCk6KHQuZXhpdCgidGhlbWF0aWNCcmVha1NlcXVlbmNlIiksUWUoYyk/aXQodCxvLCJ3aGl0ZXNwYWNlIikoYyk6byhjKSl9fXZhciBfMCxmTD1iKCgpPT57QjEoKTtBdCgpO18wPXtuYW1lOiJ0aGVtYXRpY0JyZWFrIix0b2tlbml6ZTpVTnR9fSk7ZnVuY3Rpb24gWU50KHQsZSxhKXtsZXQgaT10aGlzLHI9aS5ldmVudHNbaS5ldmVudHMubGVuZ3RoLTFdLHM9ciYmclsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3JbMl0uc2xpY2VTZXJpYWxpemUoclsxXSwhMCkubGVuZ3RoOjAsbj0wO3JldHVybiBvO2Z1bmN0aW9uIG8oZyl7bGV0IHk9aS5jb250YWluZXJTdGF0ZS50eXBlfHwoZz09PTQyfHxnPT09NDN8fGc9PT00NT8ibGlzdFVub3JkZXJlZCI6Imxpc3RPcmRlcmVkIik7aWYoeT09PSJsaXN0VW5vcmRlcmVkIj8haS5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fGc9PT1pLmNvbnRhaW5lclN0YXRlLm1hcmtlcjpCNihnKSl7aWYoaS5jb250YWluZXJTdGF0ZS50eXBlfHwoaS5jb250YWluZXJTdGF0ZS50eXBlPXksdC5lbnRlcih5LHtfY29udGFpbmVyOiEwfSkpLHk9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksZz09PTQyfHxnPT09NDU/dC5jaGVjayhfMCxhLGMpKGcpOmMoZyk7aWYoIWkuaW50ZXJydXB0fHxnPT09NDkpcmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksdC5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLGQoZyl9cmV0dXJuIGEoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gQjYoZykmJisrbjwxMD8odC5jb25zdW1lKGcpLGQpOighaS5pbnRlcnJ1cHR8fG48MikmJihpLmNvbnRhaW5lclN0YXRlLm1hcmtlcj9nPT09aS5jb250YWluZXJTdGF0ZS5tYXJrZXI6Zz09PTQxfHxnPT09NDYpPyh0LmV4aXQoImxpc3RJdGVtVmFsdWUiKSxjKGcpKTphKGcpfWZ1bmN0aW9uIGMoZyl7cmV0dXJuIHQuZW50ZXIoImxpc3RJdGVtTWFya2VyIiksdC5jb25zdW1lKGcpLHQuZXhpdCgibGlzdEl0ZW1NYXJrZXIiKSxpLmNvbnRhaW5lclN0YXRlLm1hcmtlcj1pLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Zyx0LmNoZWNrKFJyLGkuaW50ZXJydXB0P2E6cCx0LmF0dGVtcHQoV050LGYsbCkpfWZ1bmN0aW9uIHAoZyl7cmV0dXJuIGkuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZT0hMCxzKyssZihnKX1mdW5jdGlvbiBsKGcpe3JldHVybiBRZShnKT8odC5lbnRlcigibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIiksdC5jb25zdW1lKGcpLHQuZXhpdCgibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIiksZik6YShnKX1mdW5jdGlvbiBmKGcpe3JldHVybiBpLmNvbnRhaW5lclN0YXRlLnNpemU9cytpLnNsaWNlU2VyaWFsaXplKHQuZXhpdCgibGlzdEl0ZW1QcmVmaXgiKSwhMCkubGVuZ3RoLGUoZyl9fWZ1bmN0aW9uIFpOdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gaS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCx0LmNoZWNrKFJyLHIscyk7ZnVuY3Rpb24gcihvKXtyZXR1cm4gaS5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1pLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxpLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsaXQodCxlLCJsaXN0SXRlbUluZGVudCIsaS5jb250YWluZXJTdGF0ZS5zaXplKzEpKG8pfWZ1bmN0aW9uIHMobyl7cmV0dXJuIGkuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFRZShvKT8oaS5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsaS5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxuKG8pKTooaS5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsaS5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCx0LmF0dGVtcHQoR050LGUsbikobykpfWZ1bmN0aW9uIG4obyl7cmV0dXJuIGkuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxpLmludGVycnVwdD12b2lkIDAsaXQodCx0LmF0dGVtcHQoVzIsZSxhKSwibGluZVByZWZpeCIsaS5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShvKX19ZnVuY3Rpb24gWE50KHQsZSxhKXtsZXQgaT10aGlzO3JldHVybiBpdCh0LHIsImxpc3RJdGVtSW5kZW50IixpLmNvbnRhaW5lclN0YXRlLnNpemUrMSk7ZnVuY3Rpb24gcihzKXtsZXQgbj1pLmV2ZW50c1tpLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIG4mJm5bMV0udHlwZT09PSJsaXN0SXRlbUluZGVudCImJm5bMl0uc2xpY2VTZXJpYWxpemUoblsxXSwhMCkubGVuZ3RoPT09aS5jb250YWluZXJTdGF0ZS5zaXplP2Uocyk6YShzKX19ZnVuY3Rpb24gS050KHQpe3QuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpfWZ1bmN0aW9uIFFOdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gaXQodCxyLCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLGkucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NSk7ZnVuY3Rpb24gcihzKXtsZXQgbj1pLmV2ZW50c1tpLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIVFlKHMpJiZuJiZuWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIj9lKHMpOmEocyl9fXZhciBXMixXTnQsR050LFduZT1iKCgpPT57QjEoKTtBdCgpO0I5KCk7ZkwoKTtXMj17Y29udGludWF0aW9uOnt0b2tlbml6ZTpaTnR9LGV4aXQ6S050LG5hbWU6Imxpc3QiLHRva2VuaXplOllOdH0sV050PXtwYXJ0aWFsOiEwLHRva2VuaXplOlFOdH0sR050PXtwYXJ0aWFsOiEwLHRva2VuaXplOlhOdH19KTtmdW5jdGlvbiBKTnQodCxlKXtsZXQgYT10Lmxlbmd0aCxpLHIscztmb3IoO2EtLTspaWYodFthXVswXT09PSJlbnRlciIpe2lmKHRbYV1bMV0udHlwZT09PSJjb250ZW50Iil7aT1hO2JyZWFrfXRbYV1bMV0udHlwZT09PSJwYXJhZ3JhcGgiJiYocj1hKX1lbHNlIHRbYV1bMV0udHlwZT09PSJjb250ZW50IiYmdC5zcGxpY2UoYSwxKSwhcyYmdFthXVsxXS50eXBlPT09ImRlZmluaXRpb24iJiYocz1hKTtsZXQgbj17dHlwZToic2V0ZXh0SGVhZGluZyIsc3RhcnQ6ey4uLnRbaV1bMV0uc3RhcnR9LGVuZDp7Li4udFt0Lmxlbmd0aC0xXVsxXS5lbmR9fTtyZXR1cm4gdFtyXVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIscz8odC5zcGxpY2UociwwLFsiZW50ZXIiLG4sZV0pLHQuc3BsaWNlKHMrMSwwLFsiZXhpdCIsdFtpXVsxXSxlXSksdFtpXVsxXS5lbmQ9ey4uLnRbc11bMV0uZW5kfSk6dFtpXVsxXT1uLHQucHVzaChbImV4aXQiLG4sZV0pLHR9ZnVuY3Rpb24gZUZ0KHQsZSxhKXtsZXQgaT10aGlzLHI7cmV0dXJuIHM7ZnVuY3Rpb24gcyhjKXtsZXQgcD1pLmV2ZW50cy5sZW5ndGgsbDtmb3IoO3AtLTspaWYoaS5ldmVudHNbcF1bMV0udHlwZSE9PSJsaW5lRW5kaW5nIiYmaS5ldmVudHNbcF1bMV0udHlwZSE9PSJsaW5lUHJlZml4IiYmaS5ldmVudHNbcF1bMV0udHlwZSE9PSJjb250ZW50Iil7bD1pLmV2ZW50c1twXVsxXS50eXBlPT09InBhcmFncmFwaCI7YnJlYWt9cmV0dXJuIWkucGFyc2VyLmxhenlbaS5ub3coKS5saW5lXSYmKGkuaW50ZXJydXB0fHxsKT8odC5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmUiKSxyPWMsbihjKSk6YShjKX1mdW5jdGlvbiBuKGMpe3JldHVybiB0LmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksbyhjKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjPT09cj8odC5jb25zdW1lKGMpLG8pOih0LmV4aXQoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKSxRZShjKT9pdCh0LGQsImxpbmVTdWZmaXgiKShjKTpkKGMpKX1mdW5jdGlvbiBkKGMpe3JldHVybiBjPT09bnVsbHx8T2UoYyk/KHQuZXhpdCgic2V0ZXh0SGVhZGluZ0xpbmUiKSxlKGMpKTphKGMpfX12YXIgWDksR25lPWIoKCk9PntCMSgpO0F0KCk7WDk9e25hbWU6InNldGV4dFVuZGVybGluZSIscmVzb2x2ZVRvOkpOdCx0b2tlbml6ZTplRnR9fSk7dmFyIEs5PWIoKCk9PntDbmUoKTtfbmUoKTtCOSgpO1RuZSgpO0xuZSgpOyRuZSgpO0RuZSgpO0VuZSgpO1BuZSgpO0luZSgpO05uZSgpO0ZuZSgpO09uZSgpO0huZSgpO3FuZSgpO1o5KCk7Vm5lKCk7am5lKCk7VW5lKCk7V25lKCk7R25lKCk7ZkwoKX0pO2Z1bmN0aW9uIG1MKCl7cmV0dXJue2RvY3VtZW50Ons5MTp7bmFtZToiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIix0b2tlbml6ZTpzRnQsY29udGludWF0aW9uOnt0b2tlbml6ZTpuRnR9LGV4aXQ6b0Z0fX0sdGV4dDp7OTE6e25hbWU6ImdmbUZvb3Rub3RlQ2FsbCIsdG9rZW5pemU6ckZ0fSw5Mzp7bmFtZToiZ2ZtUG90ZW50aWFsRm9vdG5vdGVDYWxsIixhZGQ6ImFmdGVyIix0b2tlbml6ZTphRnQscmVzb2x2ZVRvOmlGdH19fX1mdW5jdGlvbiBhRnQodCxlLGEpe2xldCBpPXRoaXMscj1pLmV2ZW50cy5sZW5ndGgscz1pLnBhcnNlci5nZm1Gb290bm90ZXN8fChpLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLG47Zm9yKDtyLS07KXtsZXQgZD1pLmV2ZW50c1tyXVsxXTtpZihkLnR5cGU9PT0ibGFiZWxJbWFnZSIpe249ZDticmVha31pZihkLnR5cGU9PT0iZ2ZtRm9vdG5vdGVDYWxsInx8ZC50eXBlPT09ImxhYmVsTGluayJ8fGQudHlwZT09PSJsYWJlbCJ8fGQudHlwZT09PSJpbWFnZSJ8fGQudHlwZT09PSJsaW5rIilicmVha31yZXR1cm4gbztmdW5jdGlvbiBvKGQpe2lmKCFufHwhbi5fYmFsYW5jZWQpcmV0dXJuIGEoZCk7bGV0IGM9STEoaS5zbGljZVNlcmlhbGl6ZSh7c3RhcnQ6bi5lbmQsZW5kOmkubm93KCl9KSk7cmV0dXJuIGMuY29kZVBvaW50QXQoMCkhPT05NHx8IXMuaW5jbHVkZXMoYy5zbGljZSgxKSk/YShkKToodC5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUoZCksdC5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLGUoZCkpfX1mdW5jdGlvbiBpRnQodCxlKXtsZXQgYT10Lmxlbmd0aCxpO2Zvcig7YS0tOylpZih0W2FdWzFdLnR5cGU9PT0ibGFiZWxJbWFnZSImJnRbYV1bMF09PT0iZW50ZXIiKXtpPXRbYV1bMV07YnJlYWt9dFthKzFdWzFdLnR5cGU9ImRhdGEiLHRbYSszXVsxXS50eXBlPSJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciI7bGV0IHI9e3R5cGU6ImdmbUZvb3Rub3RlQ2FsbCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx0W2ErM11bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LHRbdC5sZW5ndGgtMV1bMV0uZW5kKX0scz17dHlwZToiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIixzdGFydDpPYmplY3QuYXNzaWduKHt9LHRbYSszXVsxXS5lbmQpLGVuZDpPYmplY3QuYXNzaWduKHt9LHRbYSszXVsxXS5lbmQpfTtzLmVuZC5jb2x1bW4rKyxzLmVuZC5vZmZzZXQrKyxzLmVuZC5fYnVmZmVySW5kZXgrKztsZXQgbj17dHlwZToiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIixzdGFydDpPYmplY3QuYXNzaWduKHt9LHMuZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx0W3QubGVuZ3RoLTFdWzFdLnN0YXJ0KX0sbz17dHlwZToiY2h1bmtTdHJpbmciLGNvbnRlbnRUeXBlOiJzdHJpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sbi5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30sbi5lbmQpfSxkPVt0W2ErMV0sdFthKzJdLFsiZW50ZXIiLHIsZV0sdFthKzNdLHRbYSs0XSxbImVudGVyIixzLGVdLFsiZXhpdCIscyxlXSxbImVudGVyIixuLGVdLFsiZW50ZXIiLG8sZV0sWyJleGl0IixvLGVdLFsiZXhpdCIsbixlXSx0W3QubGVuZ3RoLTJdLHRbdC5sZW5ndGgtMV0sWyJleGl0IixyLGVdXTtyZXR1cm4gdC5zcGxpY2UoYSx0Lmxlbmd0aC1hKzEsLi4uZCksdH1mdW5jdGlvbiByRnQodCxlLGEpe2xldCBpPXRoaXMscj1pLnBhcnNlci5nZm1Gb290bm90ZXN8fChpLnBhcnNlci5nZm1Gb290bm90ZXM9W10pLHM9MCxuO3JldHVybiBvO2Z1bmN0aW9uIG8obCl7cmV0dXJuIHQuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbCIpLHQuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksdC5jb25zdW1lKGwpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKSxkfWZ1bmN0aW9uIGQobCl7cmV0dXJuIGwhPT05ND9hKGwpOih0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKSx0LmNvbnN1bWUobCksdC5leGl0KCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKSx0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKSx0LmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlPSJzdHJpbmciLGMpfWZ1bmN0aW9uIGMobCl7aWYocz45OTl8fGw9PT05MyYmIW58fGw9PT1udWxsfHxsPT09OTF8fFR0KGwpKXJldHVybiBhKGwpO2lmKGw9PT05Myl7dC5leGl0KCJjaHVua1N0cmluZyIpO2xldCBmPXQuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIik7cmV0dXJuIHIuaW5jbHVkZXMoSTEoaS5zbGljZVNlcmlhbGl6ZShmKSkpPyh0LmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpLHQuY29uc3VtZShsKSx0LmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIiksdC5leGl0KCJnZm1Gb290bm90ZUNhbGwiKSxlKTphKGwpfXJldHVybiBUdChsKXx8KG49ITApLHMrKyx0LmNvbnN1bWUobCksbD09PTkyP3A6Y31mdW5jdGlvbiBwKGwpe3JldHVybiBsPT09OTF8fGw9PT05Mnx8bD09PTkzPyh0LmNvbnN1bWUobCkscysrLGMpOmMobCl9fWZ1bmN0aW9uIHNGdCh0LGUsYSl7bGV0IGk9dGhpcyxyPWkucGFyc2VyLmdmbUZvb3Rub3Rlc3x8KGkucGFyc2VyLmdmbUZvb3Rub3Rlcz1bXSkscyxuPTAsbztyZXR1cm4gZDtmdW5jdGlvbiBkKHkpe3JldHVybiB0LmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb24iKS5fY29udGFpbmVyPSEwLHQuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsIiksdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUoeSksdC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpLGN9ZnVuY3Rpb24gYyh5KXtyZXR1cm4geT09PTk0Pyh0LmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKSx0LmNvbnN1bWUoeSksdC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKSx0LmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpLHQuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGU9InN0cmluZyIscCk6YSh5KX1mdW5jdGlvbiBwKHkpe2lmKG4+OTk5fHx5PT09OTMmJiFvfHx5PT09bnVsbHx8eT09PTkxfHxUdCh5KSlyZXR1cm4gYSh5KTtpZih5PT09OTMpe3QuZXhpdCgiY2h1bmtTdHJpbmciKTtsZXQgdj10LmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nIik7cmV0dXJuIHM9STEoaS5zbGljZVNlcmlhbGl6ZSh2KSksdC5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKSx0LmNvbnN1bWUoeSksdC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpLHQuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwiKSxmfXJldHVybiBUdCh5KXx8KG89ITApLG4rKyx0LmNvbnN1bWUoeSkseT09PTkyP2w6cH1mdW5jdGlvbiBsKHkpe3JldHVybiB5PT09OTF8fHk9PT05Mnx8eT09PTkzPyh0LmNvbnN1bWUoeSksbisrLHApOnAoeSl9ZnVuY3Rpb24gZih5KXtyZXR1cm4geT09PTU4Pyh0LmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksdC5jb25zdW1lKHkpLHQuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLHIuaW5jbHVkZXMocyl8fHIucHVzaChzKSxpdCh0LGcsImdmbUZvb3Rub3RlRGVmaW5pdGlvbldoaXRlc3BhY2UiKSk6YSh5KX1mdW5jdGlvbiBnKHkpe3JldHVybiBlKHkpfX1mdW5jdGlvbiBuRnQodCxlLGEpe3JldHVybiB0LmNoZWNrKFJyLGUsdC5hdHRlbXB0KHRGdCxlLGEpKX1mdW5jdGlvbiBvRnQodCl7dC5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb24iKX1mdW5jdGlvbiBsRnQodCxlLGEpe2xldCBpPXRoaXM7cmV0dXJuIGl0KHQsciwiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uSW5kZW50Iiw1KTtmdW5jdGlvbiByKHMpe2xldCBuPWkuZXZlbnRzW2kuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gbiYmblsxXS50eXBlPT09ImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCImJm5bMl0uc2xpY2VTZXJpYWxpemUoblsxXSwhMCkubGVuZ3RoPT09ND9lKHMpOmEocyl9fXZhciB0RnQsWW5lPWIoKCk9PntLOSgpO0IxKCk7QXQoKTtWbigpO3RGdD17dG9rZW5pemU6bEZ0LHBhcnRpYWw6ITB9fSk7ZnVuY3Rpb24gWm5lKHQsZSl7cmV0dXJuIkJhY2sgdG8gcmVmZXJlbmNlICIrKHQrMSkrKGU+MT8iLSIrZToiIil9ZnVuY3Rpb24gZ0wodCl7bGV0IGU9dHx8ZEZ0LGE9ZS5sYWJlbHx8IkZvb3Rub3RlcyIsaT1lLmxhYmVsVGFnTmFtZXx8ImgyIixyPWUubGFiZWxBdHRyaWJ1dGVzPT09bnVsbHx8ZS5sYWJlbEF0dHJpYnV0ZXM9PT12b2lkIDA/J2NsYXNzPSJzci1vbmx5Iic6ZS5sYWJlbEF0dHJpYnV0ZXMscz1lLmJhY2tMYWJlbHx8Wm5lLG49ZS5jbG9iYmVyUHJlZml4PT09bnVsbHx8ZS5jbG9iYmVyUHJlZml4PT09dm9pZCAwPyJ1c2VyLWNvbnRlbnQtIjplLmNsb2JiZXJQcmVmaXg7cmV0dXJue2VudGVyOntnZm1Gb290bm90ZURlZmluaXRpb24oKXt0aGlzLmdldERhdGEoInRpZ2h0U3RhY2siKS5wdXNoKCExKX0sZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcoKXt0aGlzLmJ1ZmZlcigpfSxnZm1Gb290bm90ZUNhbGxTdHJpbmcoKXt0aGlzLmJ1ZmZlcigpfX0sZXhpdDp7Z2ZtRm9vdG5vdGVEZWZpbml0aW9uKCl7bGV0IG89dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIiksZD10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIiksYz10aGlzLmdldERhdGEoInRpZ2h0U3RhY2siKSxwPWQucG9wKCksbD10aGlzLnJlc3VtZSgpO298fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIsbz17fSksY0Z0LmNhbGwobyxwKXx8KG9bcF09bCksYy5wb3AoKSx0aGlzLnNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsITApLHRoaXMuc2V0RGF0YSgibGFzdFdhc1RhZyIpfSxnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyhvKXtsZXQgZD10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7ZHx8dGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIsZD1bXSksZC5wdXNoKEkxKHRoaXMuc2xpY2VTZXJpYWxpemUobykpKSx0aGlzLnJlc3VtZSgpLHRoaXMuYnVmZmVyKCl9LGdmbUZvb3Rub3RlQ2FsbFN0cmluZyhvKXtsZXQgZD10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIiksYz10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbENvdW50cyIpLHA9STEodGhpcy5zbGljZVNlcmlhbGl6ZShvKSksbDt0aGlzLnJlc3VtZSgpLGR8fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiLGQ9W10pLGN8fHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIixjPXt9KTtsZXQgZj1kLmluZGV4T2YocCksZz1GcihwLnRvTG93ZXJDYXNlKCkpO2Y9PT0tMT8oZC5wdXNoKHApLGNbcF09MSxsPWQubGVuZ3RoKTooY1twXSsrLGw9ZisxKTtsZXQgeT1jW3BdO3RoaXMudGFnKCc8c3VwPjxhIGhyZWY9IiMnK24rImZuLSIrZysnIiBpZD0iJytuKyJmbnJlZi0iK2crKHk+MT8iLSIreToiIikrJyIgZGF0YS1mb290bm90ZS1yZWY9IiIgYXJpYS1kZXNjcmliZWRieT0iZm9vdG5vdGUtbGFiZWwiPicrU3RyaW5nKGwpKyI8L2E+PC9zdXA+Iil9LG51bGwoKXtsZXQgbz10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIil8fFtdLGQ9dGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKXx8e30sYz10aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiKXx8e30scD0tMTtmb3Ioby5sZW5ndGg+MCYmKHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoJzxzZWN0aW9uIGRhdGEtZm9vdG5vdGVzPSIiIGNsYXNzPSJmb290bm90ZXMiPjwnK2krJyBpZD0iZm9vdG5vdGUtbGFiZWwiJysocj8iICIrcjoiIikrIj4iKSx0aGlzLnJhdyh0aGlzLmVuY29kZShhKSksdGhpcy50YWcoIjwvIitpKyI+IiksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPG9sPiIpKTsrK3A8by5sZW5ndGg7KXtsZXQgbD1vW3BdLGY9RnIobC50b0xvd2VyQ2FzZSgpKSxnPTAseT1bXTtmb3IoOysrZzw9ZFtsXTspeS5wdXNoKCc8YSBocmVmPSIjJytuKyJmbnJlZi0iK2YrKGc+MT8iLSIrZzoiIikrJyIgZGF0YS1mb290bm90ZS1iYWNrcmVmPSIiIGFyaWEtbGFiZWw9IicrdGhpcy5lbmNvZGUodHlwZW9mIHM9PSJzdHJpbmciP3M6cyhwLGcpKSsnIiBjbGFzcz0iZGF0YS1mb290bm90ZS1iYWNrcmVmIj5cdTIxQTknKyhnPjE/IjxzdXA+IitnKyI8L3N1cD4iOiIiKSsiPC9hPiIpO2xldCB2PXkuam9pbigiICIpLG09ITE7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygnPGxpIGlkPSInK24rImZuLSIrZisnIj4nKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKGNbbF0ucmVwbGFjZSgvPFwvcD4oPzpccj9cbnxccik/JC8sZnVuY3Rpb24oeCl7cmV0dXJuIG09ITAsIiAiK3YreH0pKSxtfHwodGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZyh2KSksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC9saT4iKX1vLmxlbmd0aD4wJiYodGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC9vbD4iKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3NlY3Rpb24+IikpfX19fXZhciBjRnQsZEZ0LFhuZT1iKCgpPT57Vm4oKTtPcigpO2NGdD17fS5oYXNPd25Qcm9wZXJ0eSxkRnQ9e319KTt2YXIgS25lPWIoKCk9PntZbmUoKTtYbmUoKX0pO2Z1bmN0aW9uIGJMKCl7cmV0dXJue2VudGVyOntzdHJpa2V0aHJvdWdoKCl7dGhpcy50YWcoIjxkZWw+Iil9fSxleGl0OntzdHJpa2V0aHJvdWdoKCl7dGhpcy50YWcoIjwvZGVsPiIpfX19fXZhciBRbmU9YigoKT0+e30pO2Z1bmN0aW9uIHZMKHQpe2xldCBhPSh0fHx7fSkuc2luZ2xlVGlsZGUsaT17bmFtZToic3RyaWtldGhyb3VnaCIsdG9rZW5pemU6cyxyZXNvbHZlQWxsOnJ9O3JldHVybiBhPT1udWxsJiYoYT0hMCkse3RleHQ6ezEyNjppfSxpbnNpZGVTcGFuOntudWxsOltpXX0sYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbMTI2XX19O2Z1bmN0aW9uIHIobixvKXtsZXQgZD0tMTtmb3IoOysrZDxuLmxlbmd0aDspaWYobltkXVswXT09PSJlbnRlciImJm5bZF1bMV0udHlwZT09PSJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiJiZuW2RdWzFdLl9jbG9zZSl7bGV0IGM9ZDtmb3IoO2MtLTspaWYobltjXVswXT09PSJleGl0IiYmbltjXVsxXS50eXBlPT09InN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSImJm5bY11bMV0uX29wZW4mJm5bZF1bMV0uZW5kLm9mZnNldC1uW2RdWzFdLnN0YXJ0Lm9mZnNldD09PW5bY11bMV0uZW5kLm9mZnNldC1uW2NdWzFdLnN0YXJ0Lm9mZnNldCl7bltkXVsxXS50eXBlPSJzdHJpa2V0aHJvdWdoU2VxdWVuY2UiLG5bY11bMV0udHlwZT0ic3RyaWtldGhyb3VnaFNlcXVlbmNlIjtsZXQgcD17dHlwZToic3RyaWtldGhyb3VnaCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxuW2NdWzFdLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxuW2RdWzFdLmVuZCl9LGw9e3R5cGU6InN0cmlrZXRocm91Z2hUZXh0IixzdGFydDpPYmplY3QuYXNzaWduKHt9LG5bY11bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxuW2RdWzFdLnN0YXJ0KX0sZj1bWyJlbnRlciIscCxvXSxbImVudGVyIixuW2NdWzFdLG9dLFsiZXhpdCIsbltjXVsxXSxvXSxbImVudGVyIixsLG9dXSxnPW8ucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsO2cmJlIxKGYsZi5sZW5ndGgsMCxVbihnLG4uc2xpY2UoYysxLGQpLG8pKSxSMShmLGYubGVuZ3RoLDAsW1siZXhpdCIsbCxvXSxbImVudGVyIixuW2RdWzFdLG9dLFsiZXhpdCIsbltkXVsxXSxvXSxbImV4aXQiLHAsb11dKSxSMShuLGMtMSxkLWMrMyxmKSxkPWMrZi5sZW5ndGgtMjticmVha319Zm9yKGQ9LTE7KytkPG4ubGVuZ3RoOyluW2RdWzFdLnR5cGU9PT0ic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiYmKG5bZF1bMV0udHlwZT0iZGF0YSIpO3JldHVybiBufWZ1bmN0aW9uIHMobixvLGQpe2xldCBjPXRoaXMucHJldmlvdXMscD10aGlzLmV2ZW50cyxsPTA7cmV0dXJuIGY7ZnVuY3Rpb24gZih5KXtyZXR1cm4gYz09PTEyNiYmcFtwLmxlbmd0aC0xXVsxXS50eXBlIT09ImNoYXJhY3RlckVzY2FwZSI/ZCh5KToobi5lbnRlcigic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiksZyh5KSl9ZnVuY3Rpb24gZyh5KXtsZXQgdj16cyhjKTtpZih5PT09MTI2KXJldHVybiBsPjE/ZCh5KToobi5jb25zdW1lKHkpLGwrKyxnKTtpZihsPDImJiFhKXJldHVybiBkKHkpO2xldCBtPW4uZXhpdCgic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IikseD16cyh5KTtyZXR1cm4gbS5fb3Blbj0heHx8eD09PTImJiEhdixtLl9jbG9zZT0hdnx8dj09PTImJiEheCxvKHkpfX19dmFyIEpuZT1iKCgpPT57SXIoKTtUOSgpO1U2KCl9KTt2YXIgZW9lPWIoKCk9PntRbmUoKTtKbmUoKX0pO2Z1bmN0aW9uIHhMKCl7cmV0dXJue2VudGVyOnt0YWJsZSh0KXtsZXQgZT10Ll9hbGlnbjt0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8dGFibGU+IiksdGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIixlKX0sdGFibGVCb2R5KCl7dGhpcy50YWcoIjx0Ym9keT4iKX0sdGFibGVEYXRhKCl7bGV0IHQ9dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIiksZT10aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIiksYT15TFt0W2VdXTthPT09dm9pZCAwP3RoaXMuYnVmZmVyKCk6KHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0ZCIrYSsiPiIpKX0sdGFibGVIZWFkKCl7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRoZWFkPiIpfSx0YWJsZUhlYWRlcigpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpLGU9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpLGE9eUxbdFtlXV07dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRoIithKyI+Iil9LHRhYmxlUm93KCl7dGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsMCksdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPHRyPiIpfX0sZXhpdDp7Y29kZVRleHREYXRhKHQpe2xldCBlPXRoaXMuc2xpY2VTZXJpYWxpemUodCk7dGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIikmJihlPWUucmVwbGFjZSgvXFwoW1xcfF0pL2cscEZ0KSksdGhpcy5yYXcodGhpcy5lbmNvZGUoZSkpfSx0YWJsZSgpe3RoaXMuc2V0RGF0YSgidGFibGVBbGlnbiIpLHRoaXMuc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpLHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvdGFibGU+Iil9LHRhYmxlQm9keSgpe3RoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjwvdGJvZHk+Iil9LHRhYmxlRGF0YSgpe2xldCB0PXRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpLGU9dGhpcy5nZXREYXRhKCJ0YWJsZUNvbHVtbiIpO2UgaW4gdD8odGhpcy50YWcoIjwvdGQ+IiksdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsZSsxKSk6dGhpcy5yZXN1bWUoKX0sdGFibGVIZWFkKCl7dGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKSx0aGlzLnRhZygiPC90aGVhZD4iKX0sdGFibGVIZWFkZXIoKXtsZXQgdD10aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7dGhpcy50YWcoIjwvdGg+IiksdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsdCsxKX0sdGFibGVSb3coKXtsZXQgdD10aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKSxlPXRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTtmb3IoO2U8dC5sZW5ndGg7KXRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCksdGhpcy50YWcoIjx0ZCIreUxbdFtlXV0rIj48L3RkPiIpLGUrKzt0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIixlKSx0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpLHRoaXMudGFnKCI8L3RyPiIpfX19fWZ1bmN0aW9uIHBGdCh0LGUpe3JldHVybiBlPT09InwiP2U6dH12YXIgeUwsdG9lPWIoKCk9Pnt5TD17bm9uZToiIixsZWZ0OicgYWxpZ249ImxlZnQiJyxyaWdodDonIGFsaWduPSJyaWdodCInLGNlbnRlcjonIGFsaWduPSJjZW50ZXIiJ319KTtmdW5jdGlvbiBoRnQodCxlLGEsaSl7bGV0IHI9MDtpZighKGE9PT0wJiZpLmxlbmd0aD09PTApKXtmb3IoO3I8dC5tYXAubGVuZ3RoOyl7aWYodC5tYXBbcl1bMF09PT1lKXt0Lm1hcFtyXVsxXSs9YSx0Lm1hcFtyXVsyXS5wdXNoKC4uLmkpO3JldHVybn1yKz0xfXQubWFwLnB1c2goW2UsYSxpXSl9fXZhciBROSxhb2U9YigoKT0+e1E5PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9W119YWRkKGUsYSxpKXtoRnQodGhpcyxlLGEsaSl9Y29uc3VtZShlKXtpZih0aGlzLm1hcC5zb3J0KGZ1bmN0aW9uKHMsbil7cmV0dXJuIHNbMF0tblswXX0pLHRoaXMubWFwLmxlbmd0aD09PTApcmV0dXJuO2xldCBhPXRoaXMubWFwLmxlbmd0aCxpPVtdO2Zvcig7YT4wOylhLT0xLGkucHVzaChlLnNsaWNlKHRoaXMubWFwW2FdWzBdK3RoaXMubWFwW2FdWzFdKSx0aGlzLm1hcFthXVsyXSksZS5sZW5ndGg9dGhpcy5tYXBbYV1bMF07aS5wdXNoKGUuc2xpY2UoKSksZS5sZW5ndGg9MDtsZXQgcj1pLnBvcCgpO2Zvcig7cjspe2ZvcihsZXQgcyBvZiByKWUucHVzaChzKTtyPWkucG9wKCl9dGhpcy5tYXAubGVuZ3RoPTB9fX0pO2Z1bmN0aW9uIGlvZSh0LGUpe2xldCBhPSExLGk9W107Zm9yKDtlPHQubGVuZ3RoOyl7bGV0IHI9dFtlXTtpZihhKXtpZihyWzBdPT09ImVudGVyIilyWzFdLnR5cGU9PT0idGFibGVDb250ZW50IiYmaS5wdXNoKHRbZSsxXVsxXS50eXBlPT09InRhYmxlRGVsaW1pdGVyTWFya2VyIj8ibGVmdCI6Im5vbmUiKTtlbHNlIGlmKHJbMV0udHlwZT09PSJ0YWJsZUNvbnRlbnQiKXtpZih0W2UtMV1bMV0udHlwZT09PSJ0YWJsZURlbGltaXRlck1hcmtlciIpe2xldCBzPWkubGVuZ3RoLTE7aVtzXT1pW3NdPT09ImxlZnQiPyJjZW50ZXIiOiJyaWdodCJ9fWVsc2UgaWYoclsxXS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93IilicmVha31lbHNlIHJbMF09PT0iZW50ZXIiJiZyWzFdLnR5cGU9PT0idGFibGVEZWxpbWl0ZXJSb3ciJiYoYT0hMCk7ZSs9MX1yZXR1cm4gaX12YXIgcm9lPWIoKCk9Pnt9KTtmdW5jdGlvbiB3TCgpe3JldHVybntmbG93OntudWxsOntuYW1lOiJ0YWJsZSIsdG9rZW5pemU6dUZ0LHJlc29sdmVBbGw6ZkZ0fX19fWZ1bmN0aW9uIHVGdCh0LGUsYSl7bGV0IGk9dGhpcyxyPTAscz0wLG47cmV0dXJuIG87ZnVuY3Rpb24gbyhxKXtsZXQgQz1pLmV2ZW50cy5sZW5ndGgtMTtmb3IoO0M+LTE7KXtsZXQgVD1pLmV2ZW50c1tDXVsxXS50eXBlO2lmKFQ9PT0ibGluZUVuZGluZyJ8fFQ9PT0ibGluZVByZWZpeCIpQy0tO2Vsc2UgYnJlYWt9bGV0IHo9Qz4tMT9pLmV2ZW50c1tDXVsxXS50eXBlOm51bGwsRT16PT09InRhYmxlSGVhZCJ8fHo9PT0idGFibGVSb3ciP2s6ZDtyZXR1cm4gRT09PWsmJmkucGFyc2VyLmxhenlbaS5ub3coKS5saW5lXT9hKHEpOkUocSl9ZnVuY3Rpb24gZChxKXtyZXR1cm4gdC5lbnRlcigidGFibGVIZWFkIiksdC5lbnRlcigidGFibGVSb3ciKSxjKHEpfWZ1bmN0aW9uIGMocSl7cmV0dXJuIHE9PT0xMjR8fChuPSEwLHMrPTEpLHAocSl9ZnVuY3Rpb24gcChxKXtyZXR1cm4gcT09PW51bGw/YShxKTpPZShxKT9zPjE/KHM9MCxpLmludGVycnVwdD0hMCx0LmV4aXQoInRhYmxlUm93IiksdC5lbnRlcigibGluZUVuZGluZyIpLHQuY29uc3VtZShxKSx0LmV4aXQoImxpbmVFbmRpbmciKSxnKTphKHEpOlFlKHEpP2l0KHQscCwid2hpdGVzcGFjZSIpKHEpOihzKz0xLG4mJihuPSExLHIrPTEpLHE9PT0xMjQ/KHQuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKSx0LmNvbnN1bWUocSksdC5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIiksbj0hMCxwKToodC5lbnRlcigiZGF0YSIpLGwocSkpKX1mdW5jdGlvbiBsKHEpe3JldHVybiBxPT09bnVsbHx8cT09PTEyNHx8VHQocSk/KHQuZXhpdCgiZGF0YSIpLHAocSkpOih0LmNvbnN1bWUocSkscT09PTkyP2Y6bCl9ZnVuY3Rpb24gZihxKXtyZXR1cm4gcT09PTkyfHxxPT09MTI0Pyh0LmNvbnN1bWUocSksbCk6bChxKX1mdW5jdGlvbiBnKHEpe3JldHVybiBpLmludGVycnVwdD0hMSxpLnBhcnNlci5sYXp5W2kubm93KCkubGluZV0/YShxKToodC5lbnRlcigidGFibGVEZWxpbWl0ZXJSb3ciKSxuPSExLFFlKHEpP2l0KHQseSwibGluZVByZWZpeCIsaS5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KShxKTp5KHEpKX1mdW5jdGlvbiB5KHEpe3JldHVybiBxPT09NDV8fHE9PT01OD9tKHEpOnE9PT0xMjQ/KG49ITAsdC5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpLHQuY29uc3VtZShxKSx0LmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKSx2KTpfKHEpfWZ1bmN0aW9uIHYocSl7cmV0dXJuIFFlKHEpP2l0KHQsbSwid2hpdGVzcGFjZSIpKHEpOm0ocSl9ZnVuY3Rpb24gbShxKXtyZXR1cm4gcT09PTU4PyhzKz0xLG49ITAsdC5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSx0LmNvbnN1bWUocSksdC5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpLHgpOnE9PT00NT8ocys9MSx4KHEpKTpxPT09bnVsbHx8T2UocSk/RihxKTpfKHEpfWZ1bmN0aW9uIHgocSl7cmV0dXJuIHE9PT00NT8odC5lbnRlcigidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSxNKHEpKTpfKHEpfWZ1bmN0aW9uIE0ocSl7cmV0dXJuIHE9PT00NT8odC5jb25zdW1lKHEpLE0pOnE9PT01OD8obj0hMCx0LmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIiksdC5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSx0LmNvbnN1bWUocSksdC5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpLFMpOih0LmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIiksUyhxKSl9ZnVuY3Rpb24gUyhxKXtyZXR1cm4gUWUocSk/aXQodCxGLCJ3aGl0ZXNwYWNlIikocSk6RihxKX1mdW5jdGlvbiBGKHEpe3JldHVybiBxPT09MTI0P3kocSk6cT09PW51bGx8fE9lKHEpPyFufHxyIT09cz9fKHEpOih0LmV4aXQoInRhYmxlRGVsaW1pdGVyUm93IiksdC5leGl0KCJ0YWJsZUhlYWQiKSxlKHEpKTpfKHEpfWZ1bmN0aW9uIF8ocSl7cmV0dXJuIGEocSl9ZnVuY3Rpb24gayhxKXtyZXR1cm4gdC5lbnRlcigidGFibGVSb3ciKSxOKHEpfWZ1bmN0aW9uIE4ocSl7cmV0dXJuIHE9PT0xMjQ/KHQuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKSx0LmNvbnN1bWUocSksdC5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIiksTik6cT09PW51bGx8fE9lKHEpPyh0LmV4aXQoInRhYmxlUm93IiksZShxKSk6UWUocSk/aXQodCxOLCJ3aGl0ZXNwYWNlIikocSk6KHQuZW50ZXIoImRhdGEiKSxMKHEpKX1mdW5jdGlvbiBMKHEpe3JldHVybiBxPT09bnVsbHx8cT09PTEyNHx8VHQocSk/KHQuZXhpdCgiZGF0YSIpLE4ocSkpOih0LmNvbnN1bWUocSkscT09PTkyP0E6TCl9ZnVuY3Rpb24gQShxKXtyZXR1cm4gcT09PTkyfHxxPT09MTI0Pyh0LmNvbnN1bWUocSksTCk6TChxKX19ZnVuY3Rpb24gZkZ0KHQsZSl7bGV0IGE9LTEsaT0hMCxyPTAscz1bMCwwLDAsMF0sbj1bMCwwLDAsMF0sbz0hMSxkPTAsYyxwLGwsZj1uZXcgUTk7Zm9yKDsrK2E8dC5sZW5ndGg7KXtsZXQgZz10W2FdLHk9Z1sxXTtnWzBdPT09ImVudGVyIj95LnR5cGU9PT0idGFibGVIZWFkIj8obz0hMSxkIT09MCYmKHNvZShmLGUsZCxjLHApLHA9dm9pZCAwLGQ9MCksYz17dHlwZToidGFibGUiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30seS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30seS5lbmQpfSxmLmFkZChhLDAsW1siZW50ZXIiLGMsZV1dKSk6eS50eXBlPT09InRhYmxlUm93Inx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93Ij8oaT0hMCxsPXZvaWQgMCxzPVswLDAsMCwwXSxuPVswLGErMSwwLDBdLG8mJihvPSExLHA9e3R5cGU6InRhYmxlQm9keSIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSx5LnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx5LmVuZCl9LGYuYWRkKGEsMCxbWyJlbnRlciIscCxlXV0pKSxyPXkudHlwZT09PSJ0YWJsZURlbGltaXRlclJvdyI/MjpwPzM6MSk6ciYmKHkudHlwZT09PSJkYXRhInx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyTWFya2VyInx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyRmlsbGVyIik/KGk9ITEsblsyXT09PTAmJihzWzFdIT09MCYmKG5bMF09blsxXSxsPUo5KGYsZSxzLHIsdm9pZCAwLGwpLHM9WzAsMCwwLDBdKSxuWzJdPWEpKTp5LnR5cGU9PT0idGFibGVDZWxsRGl2aWRlciImJihpP2k9ITE6KHNbMV0hPT0wJiYoblswXT1uWzFdLGw9SjkoZixlLHMscix2b2lkIDAsbCkpLHM9bixuPVtzWzFdLGEsMCwwXSkpOnkudHlwZT09PSJ0YWJsZUhlYWQiPyhvPSEwLGQ9YSk6eS50eXBlPT09InRhYmxlUm93Inx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyUm93Ij8oZD1hLHNbMV0hPT0wPyhuWzBdPW5bMV0sbD1KOShmLGUscyxyLGEsbCkpOm5bMV0hPT0wJiYobD1KOShmLGUsbixyLGEsbCkpLHI9MCk6ciYmKHkudHlwZT09PSJkYXRhInx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyTWFya2VyInx8eS50eXBlPT09InRhYmxlRGVsaW1pdGVyRmlsbGVyIikmJihuWzNdPWEpfWZvcihkIT09MCYmc29lKGYsZSxkLGMscCksZi5jb25zdW1lKGUuZXZlbnRzKSxhPS0xOysrYTxlLmV2ZW50cy5sZW5ndGg7KXtsZXQgZz1lLmV2ZW50c1thXTtnWzBdPT09ImVudGVyIiYmZ1sxXS50eXBlPT09InRhYmxlIiYmKGdbMV0uX2FsaWduPWlvZShlLmV2ZW50cyxhKSl9cmV0dXJuIHR9ZnVuY3Rpb24gSjkodCxlLGEsaSxyLHMpe2xldCBuPWk9PT0xPyJ0YWJsZUhlYWRlciI6aT09PTI/InRhYmxlRGVsaW1pdGVyIjoidGFibGVEYXRhIixvPSJ0YWJsZUNvbnRlbnQiO2FbMF0hPT0wJiYocy5lbmQ9T2JqZWN0LmFzc2lnbih7fSxxMyhlLmV2ZW50cyxhWzBdKSksdC5hZGQoYVswXSwwLFtbImV4aXQiLHMsZV1dKSk7bGV0IGQ9cTMoZS5ldmVudHMsYVsxXSk7aWYocz17dHlwZTpuLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sZCksZW5kOk9iamVjdC5hc3NpZ24oe30sZCl9LHQuYWRkKGFbMV0sMCxbWyJlbnRlciIscyxlXV0pLGFbMl0hPT0wKXtsZXQgYz1xMyhlLmV2ZW50cyxhWzJdKSxwPXEzKGUuZXZlbnRzLGFbM10pLGw9e3R5cGU6byxzdGFydDpPYmplY3QuYXNzaWduKHt9LGMpLGVuZDpPYmplY3QuYXNzaWduKHt9LHApfTtpZih0LmFkZChhWzJdLDAsW1siZW50ZXIiLGwsZV1dKSxpIT09Mil7bGV0IGY9ZS5ldmVudHNbYVsyXV0sZz1lLmV2ZW50c1thWzNdXTtpZihmWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LGdbMV0uZW5kKSxmWzFdLnR5cGU9ImNodW5rVGV4dCIsZlsxXS5jb250ZW50VHlwZT0idGV4dCIsYVszXT5hWzJdKzEpe2xldCB5PWFbMl0rMSx2PWFbM10tYVsyXS0xO3QuYWRkKHksdixbXSl9fXQuYWRkKGFbM10rMSwwLFtbImV4aXQiLGwsZV1dKX1yZXR1cm4gciE9PXZvaWQgMCYmKHMuZW5kPU9iamVjdC5hc3NpZ24oe30scTMoZS5ldmVudHMscikpLHQuYWRkKHIsMCxbWyJleGl0IixzLGVdXSkscz12b2lkIDApLHN9ZnVuY3Rpb24gc29lKHQsZSxhLGkscil7bGV0IHM9W10sbj1xMyhlLmV2ZW50cyxhKTtyJiYoci5lbmQ9T2JqZWN0LmFzc2lnbih7fSxuKSxzLnB1c2goWyJleGl0IixyLGVdKSksaS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxuKSxzLnB1c2goWyJleGl0IixpLGVdKSx0LmFkZChhKzEsMCxzKX1mdW5jdGlvbiBxMyh0LGUpe2xldCBhPXRbZV0saT1hWzBdPT09ImVudGVyIj8ic3RhcnQiOiJlbmQiO3JldHVybiBhWzFdW2ldfXZhciBub2U9YigoKT0+e0IxKCk7QXQoKTthb2UoKTtyb2UoKX0pO3ZhciBvb2U9YigoKT0+e3RvZSgpO25vZSgpfSk7ZnVuY3Rpb24gTUwoKXtyZXR1cm57ZXhpdDp7aHRtbEZsb3dEYXRhKHQpe2NvZS5jYWxsKHRoaXMsdCxsb2UpfSxodG1sVGV4dERhdGEodCl7Y29lLmNhbGwodGhpcyx0LG1GdCl9fX19ZnVuY3Rpb24gY29lKHQsZSl7bGV0IGE9dGhpcy5zbGljZVNlcmlhbGl6ZSh0KTt0aGlzLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sJiYoYT1hLnJlcGxhY2UoZSwiJmx0OyQxJDIiKSksdGhpcy5yYXcodGhpcy5lbmNvZGUoYSkpfXZhciBsb2UsbUZ0LGRvZT1iKCgpPT57bG9lPS88KFwvPykoaWZyYW1lfG5vZW1iZWR8bm9mcmFtZXN8cGxhaW50ZXh0fHNjcmlwdHxzdHlsZXx0aXRsZXx0ZXh0YXJlYXx4bXApKD89W1x0XG5cZlxyIC8+XSkvZ2ksbUZ0PW5ldyBSZWdFeHAoIl4iK2xvZS5zb3VyY2UsImkiKX0pO3ZhciBwb2U9YigoKT0+e2RvZSgpfSk7ZnVuY3Rpb24gekwoKXtyZXR1cm57ZW50ZXI6e3Rhc2tMaXN0Q2hlY2soKXt0aGlzLnRhZygnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD0iIiAnKX19LGV4aXQ6e3Rhc2tMaXN0Q2hlY2soKXt0aGlzLnRhZygiLz4iKX0sdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCgpe3RoaXMudGFnKCdjaGVja2VkPSIiICcpfX19fXZhciBob2U9YigoKT0+e30pO2Z1bmN0aW9uIGtMKCl7cmV0dXJue3RleHQ6ezkxOmdGdH19fWZ1bmN0aW9uIGJGdCh0LGUsYSl7bGV0IGk9dGhpcztyZXR1cm4gcjtmdW5jdGlvbiByKGQpe3JldHVybiBpLnByZXZpb3VzIT09bnVsbHx8IWkuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT9hKGQpOih0LmVudGVyKCJ0YXNrTGlzdENoZWNrIiksdC5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpLHQuY29uc3VtZShkKSx0LmV4aXQoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKSxzKX1mdW5jdGlvbiBzKGQpe3JldHVybiBUdChkKT8odC5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIiksdC5jb25zdW1lKGQpLHQuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIiksbik6ZD09PTg4fHxkPT09MTIwPyh0LmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIiksdC5jb25zdW1lKGQpLHQuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpLG4pOmEoZCl9ZnVuY3Rpb24gbihkKXtyZXR1cm4gZD09PTkzPyh0LmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIiksdC5jb25zdW1lKGQpLHQuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpLHQuZXhpdCgidGFza0xpc3RDaGVjayIpLG8pOmEoZCl9ZnVuY3Rpb24gbyhkKXtyZXR1cm4gT2UoZCk/ZShkKTpRZShkKT90LmNoZWNrKHt0b2tlbml6ZTp2RnR9LGUsYSkoZCk6YShkKX19ZnVuY3Rpb24gdkZ0KHQsZSxhKXtyZXR1cm4gaXQodCxpLCJ3aGl0ZXNwYWNlIik7ZnVuY3Rpb24gaShyKXtyZXR1cm4gcj09PW51bGw/YShyKTplKHIpfX12YXIgZ0Z0LHVvZT1iKCgpPT57QjEoKTtBdCgpO2dGdD17bmFtZToidGFza2xpc3RDaGVjayIsdG9rZW5pemU6YkZ0fX0pO3ZhciBmb2U9YigoKT0+e2hvZSgpO3VvZSgpfSk7ZnVuY3Rpb24gbW9lKHQpe3JldHVybiBOOShbR1QoKSxtTCgpLHZMKHQpLHdMKCksa0woKV0pfWZ1bmN0aW9uIEZJMSh0KXtyZXR1cm4gRjkoW1hUKCksZ0wodCksYkwoKSx4TCgpLE1MKCksekwoKV0pfXZhciBnb2U9YigoKT0+e085KCk7a25lKCk7S25lKCk7ZW9lKCk7b29lKCk7cG9lKCk7Zm9lKCl9KTtmdW5jdGlvbiBWMyh0KXtsZXQgZT10aGlzLGE9dHx8eUZ0LGk9ZS5kYXRhKCkscj1pLm1pY3JvbWFya0V4dGVuc2lvbnN8fChpLm1pY3JvbWFya0V4dGVuc2lvbnM9W10pLHM9aS5mcm9tTWFya2Rvd25FeHRlbnNpb25zfHwoaS5mcm9tTWFya2Rvd25FeHRlbnNpb25zPVtdKSxuPWkudG9NYXJrZG93bkV4dGVuc2lvbnN8fChpLnRvTWFya2Rvd25FeHRlbnNpb25zPVtdKTtyLnB1c2gobW9lKGEpKSxzLnB1c2gocVQoKSksbi5wdXNoKFZUKGEpKX12YXIgeUZ0LGJvZT1iKCgpPT57dW5lKCk7Z29lKCk7eUZ0PXt9fSk7dmFyIHZvZT1iKCgpPT57Ym9lKCl9KTtmdW5jdGlvbiBTTCh0KXtsZXQgZT10fHx7fSxhPSEwLGk9e30scj1bW11dLHM9W10sbj1bXSxkPUY5KFt7ZW50ZXI6e2Jsb2NrUXVvdGU6JCxjb2RlRmVuY2VkOnJlLGNvZGVGZW5jZWRGZW5jZUluZm86bSxjb2RlRmVuY2VkRmVuY2VNZXRhOm0sY29kZUluZGVudGVkOndlLGNvZGVUZXh0OmllLGNvbnRlbnQ6X2UsZGVmaW5pdGlvbjokZSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6UCxkZWZpbml0aW9uTGFiZWxTdHJpbmc6bSxkZWZpbml0aW9uVGl0bGVTdHJpbmc6bSxlbXBoYXNpczokdCxodG1sRmxvdzpqZSxodG1sVGV4dDpvdCxpbWFnZTpjZSxsYWJlbDptLGxpbms6a2UsbGlzdEl0ZW1NYXJrZXI6QyxsaXN0SXRlbVZhbHVlOnEsbGlzdE9yZGVyZWQ6TCxsaXN0VW5vcmRlcmVkOkEscGFyYWdyYXBoOlIscmVmZXJlbmNlOm0scmVzb3VyY2U6WixyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOlkscmVzb3VyY2VUaXRsZVN0cmluZzptLHNldGV4dEhlYWRpbmc6dGUsc3Ryb25nOkt0fSxleGl0OnthdHhIZWFkaW5nOkZlLGF0eEhlYWRpbmdTZXF1ZW5jZTpoZSxhdXRvbGlua0VtYWlsOmFzLGF1dG9saW5rUHJvdG9jb2w6dHMsYmxvY2tRdW90ZTpWLGNoYXJhY3RlckVzY2FwZVZhbHVlOmVlLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOm0xLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6bTEsY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6YWksY29kZUZlbmNlZDpILGNvZGVGZW5jZWRGZW5jZTptZSxjb2RlRmVuY2VkRmVuY2VJbmZvOmosY29kZUZlbmNlZEZlbmNlTWV0YTpOLGNvZGVGbG93VmFsdWU6dmUsY29kZUluZGVudGVkOkgsY29kZVRleHQ6c2UsY29kZVRleHREYXRhOmVlLGRhdGE6ZWUsZGVmaW5pdGlvbjpkZSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6SixkZWZpbml0aW9uTGFiZWxTdHJpbmc6QixkZWZpbml0aW9uVGl0bGVTdHJpbmc6ZmUsZW1waGFzaXM6VGUsaGFyZEJyZWFrRXNjYXBlOlBlLGhhcmRCcmVha1RyYWlsaW5nOlBlLGh0bWxGbG93Ond0LGh0bWxGbG93RGF0YTplZSxodG1sVGV4dDp3dCxodG1sVGV4dERhdGE6ZWUsaW1hZ2U6YmUsbGFiZWw6RCxsYWJlbFRleHQ6VyxsaW5lRW5kaW5nOmFlLGxpbms6YmUsbGlzdE9yZGVyZWQ6eixsaXN0VW5vcmRlcmVkOkUscGFyYWdyYXBoOlUscmVmZXJlbmNlOk4scmVmZXJlbmNlU3RyaW5nOk8scmVzb3VyY2U6TixyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOm9lLHJlc291cmNlVGl0bGVTdHJpbmc6Z2Usc2V0ZXh0SGVhZGluZzp5ZSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOkdlLHNldGV4dEhlYWRpbmdUZXh0OnplLHN0cm9uZzpsdCx0aGVtYXRpY0JyZWFrOmN0fX0sLi4uZS5odG1sRXh0ZW5zaW9uc3x8W11dKSxjPXtkZWZpbml0aW9uczppLHRpZ2h0U3RhY2s6bn0scD17YnVmZmVyOm0sZW5jb2RlOmssZ2V0RGF0YTp2LGxpbmVFbmRpbmdJZk5lZWRlZDpfLG9wdGlvbnM6ZSxyYXc6UyxyZXN1bWU6eCxzZXREYXRhOnksdGFnOk19LGw9ZS5kZWZhdWx0TGluZUVuZGluZztyZXR1cm4gZjtmdW5jdGlvbiBmKEllKXtsZXQgWmU9LTEsJDE9MCx4Mj1bXSxJMj1bXSxpYT1bXTtmb3IoOysrWmU8SWUubGVuZ3RoOykhbCYmKEllW1plXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxJZVtaZV1bMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiKSYmKGw9SWVbWmVdWzJdLnNsaWNlU2VyaWFsaXplKEllW1plXVsxXSkpLChJZVtaZV1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fEllW1plXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKSYmKEllW1plXVswXT09PSJlbnRlciI/eDIucHVzaChaZSk6ZyhJZS5zbGljZSh4Mi5wb3AoKSxaZSkpKSxJZVtaZV1bMV0udHlwZT09PSJkZWZpbml0aW9uIiYmKEllW1plXVswXT09PSJlbnRlciI/KGlhPVoxKGlhLEllLnNsaWNlKCQxLFplKSksJDE9WmUpOihJMj1aMShJMixJZS5zbGljZSgkMSxaZSsxKSksJDE9WmUrMSkpO0kyPVoxKEkyLGlhKSxJMj1aMShJMixJZS5zbGljZSgkMSkpLFplPS0xO2xldCBOMj1JMjtmb3IoZC5lbnRlci5udWxsJiZkLmVudGVyLm51bGwuY2FsbChwKTsrK1plPEllLmxlbmd0aDspe2xldCBzbj1kW04yW1plXVswXV0sbm49TjJbWmVdWzFdLnR5cGUsb249c25bbm5dO3lvZS5jYWxsKHNuLG5uKSYmb24mJm9uLmNhbGwoe3NsaWNlU2VyaWFsaXplOk4yW1plXVsyXS5zbGljZVNlcmlhbGl6ZSwuLi5wfSxOMltaZV1bMV0pfXJldHVybiBkLmV4aXQubnVsbCYmZC5leGl0Lm51bGwuY2FsbChwKSxyWzBdLmpvaW4oIiIpfWZ1bmN0aW9uIGcoSWUpe2xldCBaZT1JZS5sZW5ndGgsJDE9MCx4Mj0wLEkyPSExLGlhO2Zvcig7KyskMTxaZTspe2xldCBOMj1JZVskMV07aWYoTjJbMV0uX2NvbnRhaW5lcilpYT12b2lkIDAsTjJbMF09PT0iZW50ZXIiP3gyKys6eDItLTtlbHNlIHN3aXRjaChOMlsxXS50eXBlKXtjYXNlImxpc3RJdGVtUHJlZml4Ijp7TjJbMF09PT0iZXhpdCImJihpYT0hMCk7YnJlYWt9Y2FzZSJsaW5lUHJlZml4IjpicmVhaztjYXNlImxpbmVFbmRpbmdCbGFuayI6e04yWzBdPT09ImVudGVyIiYmIXgyJiYoaWE/aWE9dm9pZCAwOkkyPSEwKTticmVha31kZWZhdWx0OmlhPXZvaWQgMH19SWVbMF1bMV0uX2xvb3NlPUkyfWZ1bmN0aW9uIHkoSWUsWmUpe2NbSWVdPVplfWZ1bmN0aW9uIHYoSWUpe3JldHVybiBjW0llXX1mdW5jdGlvbiBtKCl7ci5wdXNoKFtdKX1mdW5jdGlvbiB4KCl7cmV0dXJuIHIucG9wKCkuam9pbigiIil9ZnVuY3Rpb24gTShJZSl7YSYmKHkoImxhc3RXYXNUYWciLCEwKSxyW3IubGVuZ3RoLTFdLnB1c2goSWUpKX1mdW5jdGlvbiBTKEllKXt5KCJsYXN0V2FzVGFnIikscltyLmxlbmd0aC0xXS5wdXNoKEllKX1mdW5jdGlvbiBGKCl7UyhsfHxgCmApfWZ1bmN0aW9uIF8oKXtsZXQgSWU9cltyLmxlbmd0aC0xXSxaZT1JZVtJZS5sZW5ndGgtMV0sJDE9WmU/WmUuY2hhckNvZGVBdChaZS5sZW5ndGgtMSk6bnVsbDskMT09PTEwfHwkMT09PTEzfHwkMT09PW51bGx8fEYoKX1mdW5jdGlvbiBrKEllKXtyZXR1cm4gdigiaWdub3JlRW5jb2RlIik/SWU6UjkoSWUpfWZ1bmN0aW9uIE4oKXt4KCl9ZnVuY3Rpb24gTChJZSl7bi5wdXNoKCFJZS5fbG9vc2UpLF8oKSxNKCI8b2wiKSx5KCJleHBlY3RGaXJzdEl0ZW0iLCEwKX1mdW5jdGlvbiBBKEllKXtuLnB1c2goIUllLl9sb29zZSksXygpLE0oIjx1bCIpLHkoImV4cGVjdEZpcnN0SXRlbSIsITApfWZ1bmN0aW9uIHEoSWUpe2lmKHYoImV4cGVjdEZpcnN0SXRlbSIpKXtsZXQgWmU9TnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUoSWUpLDEwKTtaZSE9PTEmJk0oJyBzdGFydD0iJytrKFN0cmluZyhaZSkpKyciJyl9fWZ1bmN0aW9uIEMoKXt2KCJleHBlY3RGaXJzdEl0ZW0iKT9NKCI+Iik6VCgpLF8oKSxNKCI8bGk+IikseSgiZXhwZWN0Rmlyc3RJdGVtIikseSgibGFzdFdhc1RhZyIpfWZ1bmN0aW9uIHooKXtUKCksbi5wb3AoKSxGKCksTSgiPC9vbD4iKX1mdW5jdGlvbiBFKCl7VCgpLG4ucG9wKCksRigpLE0oIjwvdWw+Iil9ZnVuY3Rpb24gVCgpe3YoImxhc3RXYXNUYWciKSYmIXYoInNsdXJwQWxsTGluZUVuZGluZ3MiKSYmXygpLE0oIjwvbGk+IikseSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uICQoKXtuLnB1c2goITEpLF8oKSxNKCI8YmxvY2txdW90ZT4iKX1mdW5jdGlvbiBWKCl7bi5wb3AoKSxfKCksTSgiPC9ibG9ja3F1b3RlPiIpLHkoInNsdXJwQWxsTGluZUVuZGluZ3MiKX1mdW5jdGlvbiBSKCl7bltuLmxlbmd0aC0xXXx8KF8oKSxNKCI8cD4iKSkseSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpfWZ1bmN0aW9uIFUoKXtuW24ubGVuZ3RoLTFdP3koInNsdXJwQWxsTGluZUVuZGluZ3MiLCEwKTpNKCI8L3A+Iil9ZnVuY3Rpb24gcmUoKXtfKCksTSgiPHByZT48Y29kZSIpLHkoImZlbmNlc0NvdW50IiwwKX1mdW5jdGlvbiBqKCl7bGV0IEllPXgoKTtNKCcgY2xhc3M9Imxhbmd1YWdlLScrSWUrJyInKX1mdW5jdGlvbiBtZSgpe2xldCBJZT12KCJmZW5jZXNDb3VudCIpfHwwO0llfHwoTSgiPiIpLHkoInNsdXJwT25lTGluZUVuZGluZyIsITApKSx5KCJmZW5jZXNDb3VudCIsSWUrMSl9ZnVuY3Rpb24gd2UoKXtfKCksTSgiPHByZT48Y29kZT4iKX1mdW5jdGlvbiBIKCl7bGV0IEllPXYoImZlbmNlc0NvdW50Iik7SWUhPT12b2lkIDAmJkllPDImJmMudGlnaHRTdGFjay5sZW5ndGg+MCYmIXYoImxhc3RXYXNUYWciKSYmRigpLHYoImZsb3dDb2RlU2VlbkRhdGEiKSYmXygpLE0oIjwvY29kZT48L3ByZT4iKSxJZSE9PXZvaWQgMCYmSWU8MiYmXygpLHkoImZsb3dDb2RlU2VlbkRhdGEiKSx5KCJmZW5jZXNDb3VudCIpLHkoInNsdXJwT25lTGluZUVuZGluZyIpfWZ1bmN0aW9uIGNlKCl7cy5wdXNoKHtpbWFnZTohMH0pLGE9dm9pZCAwfWZ1bmN0aW9uIGtlKCl7cy5wdXNoKHt9KX1mdW5jdGlvbiBXKEllKXtzW3MubGVuZ3RoLTFdLmxhYmVsSWQ9dGhpcy5zbGljZVNlcmlhbGl6ZShJZSl9ZnVuY3Rpb24gRCgpe3Nbcy5sZW5ndGgtMV0ubGFiZWw9eCgpfWZ1bmN0aW9uIE8oSWUpe3Nbcy5sZW5ndGgtMV0ucmVmZXJlbmNlSWQ9dGhpcy5zbGljZVNlcmlhbGl6ZShJZSl9ZnVuY3Rpb24gWigpe20oKSxzW3MubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPSIifWZ1bmN0aW9uIFkoKXttKCkseSgiaWdub3JlRW5jb2RlIiwhMCl9ZnVuY3Rpb24gb2UoKXtzW3MubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPXgoKSx5KCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiBnZSgpe3Nbcy5sZW5ndGgtMV0udGl0bGU9eCgpfWZ1bmN0aW9uIGJlKCl7bGV0IEllPXMubGVuZ3RoLTEsWmU9c1tJZV0sJDE9WmUucmVmZXJlbmNlSWR8fFplLmxhYmVsSWQseDI9WmUuZGVzdGluYXRpb249PT12b2lkIDA/aVtJMSgkMSldOlplO2ZvcihhPSEwO0llLS07KWlmKHNbSWVdLmltYWdlKXthPXZvaWQgMDticmVha31aZS5pbWFnZT8oTSgnPGltZyBzcmM9IicrRnIoeDIuZGVzdGluYXRpb24sZS5hbGxvd0Rhbmdlcm91c1Byb3RvY29sP3ZvaWQgMDp4RnQpKyciIGFsdD0iJyksUyhaZS5sYWJlbCksTSgnIicpKTpNKCc8YSBocmVmPSInK0ZyKHgyLmRlc3RpbmF0aW9uLGUuYWxsb3dEYW5nZXJvdXNQcm90b2NvbD92b2lkIDA6eG9lKSsnIicpLE0oeDIudGl0bGU/JyB0aXRsZT0iJyt4Mi50aXRsZSsnIic6IiIpLFplLmltYWdlP00oIiAvPiIpOihNKCI+IiksUyhaZS5sYWJlbCksTSgiPC9hPiIpKSxzLnBvcCgpfWZ1bmN0aW9uICRlKCl7bSgpLHMucHVzaCh7fSl9ZnVuY3Rpb24gQihJZSl7eCgpLHNbcy5sZW5ndGgtMV0ubGFiZWxJZD10aGlzLnNsaWNlU2VyaWFsaXplKEllKX1mdW5jdGlvbiBQKCl7bSgpLHkoImlnbm9yZUVuY29kZSIsITApfWZ1bmN0aW9uIEooKXtzW3MubGVuZ3RoLTFdLmRlc3RpbmF0aW9uPXgoKSx5KCJpZ25vcmVFbmNvZGUiKX1mdW5jdGlvbiBmZSgpe3Nbcy5sZW5ndGgtMV0udGl0bGU9eCgpfWZ1bmN0aW9uIGRlKCl7bGV0IEllPXNbcy5sZW5ndGgtMV0sWmU9STEoSWUubGFiZWxJZCk7eCgpLHlvZS5jYWxsKGksWmUpfHwoaVtaZV09c1tzLmxlbmd0aC0xXSkscy5wb3AoKX1mdW5jdGlvbiBfZSgpe3koInNsdXJwQWxsTGluZUVuZGluZ3MiLCEwKX1mdW5jdGlvbiBoZShJZSl7digiaGVhZGluZ1JhbmsiKXx8KHkoImhlYWRpbmdSYW5rIix0aGlzLnNsaWNlU2VyaWFsaXplKEllKS5sZW5ndGgpLF8oKSxNKCI8aCIrdigiaGVhZGluZ1JhbmsiKSsiPiIpKX1mdW5jdGlvbiB0ZSgpe20oKSx5KCJzbHVycEFsbExpbmVFbmRpbmdzIil9ZnVuY3Rpb24gemUoKXt5KCJzbHVycEFsbExpbmVFbmRpbmdzIiwhMCl9ZnVuY3Rpb24gRmUoKXtNKCI8L2giK3YoImhlYWRpbmdSYW5rIikrIj4iKSx5KCJoZWFkaW5nUmFuayIpfWZ1bmN0aW9uIEdlKEllKXt5KCJoZWFkaW5nUmFuayIsdGhpcy5zbGljZVNlcmlhbGl6ZShJZSkuY2hhckNvZGVBdCgwKT09PTYxPzE6Mil9ZnVuY3Rpb24geWUoKXtsZXQgSWU9eCgpO18oKSxNKCI8aCIrdigiaGVhZGluZ1JhbmsiKSsiPiIpLFMoSWUpLE0oIjwvaCIrdigiaGVhZGluZ1JhbmsiKSsiPiIpLHkoInNsdXJwQWxsTGluZUVuZGluZ3MiKSx5KCJoZWFkaW5nUmFuayIpfWZ1bmN0aW9uIGVlKEllKXtTKGsodGhpcy5zbGljZVNlcmlhbGl6ZShJZSkpKX1mdW5jdGlvbiBhZShJZSl7aWYoIXYoInNsdXJwQWxsTGluZUVuZGluZ3MiKSl7aWYodigic2x1cnBPbmVMaW5lRW5kaW5nIikpe3koInNsdXJwT25lTGluZUVuZGluZyIpO3JldHVybn1pZih2KCJpbkNvZGVUZXh0Iikpe1MoIiAiKTtyZXR1cm59UyhrKHRoaXMuc2xpY2VTZXJpYWxpemUoSWUpKSl9fWZ1bmN0aW9uIHZlKEllKXtTKGsodGhpcy5zbGljZVNlcmlhbGl6ZShJZSkpKSx5KCJmbG93Q29kZVNlZW5EYXRhIiwhMCl9ZnVuY3Rpb24gUGUoKXtNKCI8YnIgLz4iKX1mdW5jdGlvbiBqZSgpe18oKSxvdCgpfWZ1bmN0aW9uIHd0KCl7eSgiaWdub3JlRW5jb2RlIil9ZnVuY3Rpb24gb3QoKXtlLmFsbG93RGFuZ2Vyb3VzSHRtbCYmeSgiaWdub3JlRW5jb2RlIiwhMCl9ZnVuY3Rpb24gJHQoKXtNKCI8ZW0+Iil9ZnVuY3Rpb24gS3QoKXtNKCI8c3Ryb25nPiIpfWZ1bmN0aW9uIGllKCl7eSgiaW5Db2RlVGV4dCIsITApLE0oIjxjb2RlPiIpfWZ1bmN0aW9uIHNlKCl7eSgiaW5Db2RlVGV4dCIpLE0oIjwvY29kZT4iKX1mdW5jdGlvbiBUZSgpe00oIjwvZW0+Iil9ZnVuY3Rpb24gbHQoKXtNKCI8L3N0cm9uZz4iKX1mdW5jdGlvbiBjdCgpe18oKSxNKCI8aHIgLz4iKX1mdW5jdGlvbiBtMShJZSl7eSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsSWUudHlwZSl9ZnVuY3Rpb24gYWkoSWUpe2xldCBaZT10aGlzLnNsaWNlU2VyaWFsaXplKEllKSwkMT12KCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIik/SDMoWmUsdigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KTpqbihaZSk7UyhrKCQxKSkseSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIHRzKEllKXtsZXQgWmU9dGhpcy5zbGljZVNlcmlhbGl6ZShJZSk7TSgnPGEgaHJlZj0iJytGcihaZSxlLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2w/dm9pZCAwOnhvZSkrJyI+JyksUyhrKFplKSksTSgiPC9hPiIpfWZ1bmN0aW9uIGFzKEllKXtsZXQgWmU9dGhpcy5zbGljZVNlcmlhbGl6ZShJZSk7TSgnPGEgaHJlZj0iJytGcigibWFpbHRvOiIrWmUpKyciPicpLFMoayhaZSkpLE0oIjwvYT4iKX19dmFyIHlvZSx4b2UseEZ0LENMPWIoKCk9PntqNigpO0lyKCk7TzkoKTtFOSgpO1lUKCk7Vm4oKTtPcigpO3lvZT17fS5oYXNPd25Qcm9wZXJ0eSx4b2U9L14oaHR0cHM/fGlyY3M/fG1haWx0b3x4bXBwKSQvaSx4RnQ9L15odHRwcz8kL2l9KTtmdW5jdGlvbiB3RnQodCl7bGV0IGU9dC5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwsaSxyKSxhO3JldHVybiBlO2Z1bmN0aW9uIGkobyl7aWYobz09PW51bGwpe3QuY29uc3VtZShvKTtyZXR1cm59cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmciKSx0LmNvbnN1bWUobyksdC5leGl0KCJsaW5lRW5kaW5nIiksaXQodCxlLCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gcihvKXtyZXR1cm4gdC5lbnRlcigicGFyYWdyYXBoIikscyhvKX1mdW5jdGlvbiBzKG8pe2xldCBkPXQuZW50ZXIoImNodW5rVGV4dCIse2NvbnRlbnRUeXBlOiJ0ZXh0IixwcmV2aW91czphfSk7cmV0dXJuIGEmJihhLm5leHQ9ZCksYT1kLG4obyl9ZnVuY3Rpb24gbihvKXtpZihvPT09bnVsbCl7dC5leGl0KCJjaHVua1RleHQiKSx0LmV4aXQoInBhcmFncmFwaCIpLHQuY29uc3VtZShvKTtyZXR1cm59cmV0dXJuIE9lKG8pPyh0LmNvbnN1bWUobyksdC5leGl0KCJjaHVua1RleHQiKSxzKToodC5jb25zdW1lKG8pLG4pfX12YXIgd29lLE1vZT1iKCgpPT57QjEoKTtBdCgpO3dvZT17dG9rZW5pemU6d0Z0fX0pO2Z1bmN0aW9uIE1GdCh0KXtsZXQgZT10aGlzLGE9W10saT0wLHIscyxuO3JldHVybiBvO2Z1bmN0aW9uIG8oUyl7aWYoaTxhLmxlbmd0aCl7bGV0IEY9YVtpXTtyZXR1cm4gZS5jb250YWluZXJTdGF0ZT1GWzFdLHQuYXR0ZW1wdChGWzBdLmNvbnRpbnVhdGlvbixkLGMpKFMpfXJldHVybiBjKFMpfWZ1bmN0aW9uIGQoUyl7aWYoaSsrLGUuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyl7ZS5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxyJiZNKCk7bGV0IEY9ZS5ldmVudHMubGVuZ3RoLF89RixrO2Zvcig7Xy0tOylpZihlLmV2ZW50c1tfXVswXT09PSJleGl0IiYmZS5ldmVudHNbX11bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtrPWUuZXZlbnRzW19dWzFdLmVuZDticmVha314KGkpO2xldCBOPUY7Zm9yKDtOPGUuZXZlbnRzLmxlbmd0aDspZS5ldmVudHNbTl1bMV0uZW5kPXsuLi5rfSxOKys7cmV0dXJuIFIxKGUuZXZlbnRzLF8rMSwwLGUuZXZlbnRzLnNsaWNlKEYpKSxlLmV2ZW50cy5sZW5ndGg9TixjKFMpfXJldHVybiBvKFMpfWZ1bmN0aW9uIGMoUyl7aWYoaT09PWEubGVuZ3RoKXtpZighcilyZXR1cm4gZihTKTtpZihyLmN1cnJlbnRDb25zdHJ1Y3QmJnIuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSlyZXR1cm4geShTKTtlLmludGVycnVwdD0hIShyLmN1cnJlbnRDb25zdHJ1Y3QmJiFyLl9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKX1yZXR1cm4gZS5jb250YWluZXJTdGF0ZT17fSx0LmNoZWNrKHpvZSxwLGwpKFMpfWZ1bmN0aW9uIHAoUyl7cmV0dXJuIHImJk0oKSx4KGkpLGYoUyl9ZnVuY3Rpb24gbChTKXtyZXR1cm4gZS5wYXJzZXIubGF6eVtlLm5vdygpLmxpbmVdPWkhPT1hLmxlbmd0aCxuPWUubm93KCkub2Zmc2V0LHkoUyl9ZnVuY3Rpb24gZihTKXtyZXR1cm4gZS5jb250YWluZXJTdGF0ZT17fSx0LmF0dGVtcHQoem9lLGcseSkoUyl9ZnVuY3Rpb24gZyhTKXtyZXR1cm4gaSsrLGEucHVzaChbZS5jdXJyZW50Q29uc3RydWN0LGUuY29udGFpbmVyU3RhdGVdKSxmKFMpfWZ1bmN0aW9uIHkoUyl7aWYoUz09PW51bGwpe3ImJk0oKSx4KDApLHQuY29uc3VtZShTKTtyZXR1cm59cmV0dXJuIHI9cnx8ZS5wYXJzZXIuZmxvdyhlLm5vdygpKSx0LmVudGVyKCJjaHVua0Zsb3ciLHtfdG9rZW5pemVyOnIsY29udGVudFR5cGU6ImZsb3ciLHByZXZpb3VzOnN9KSx2KFMpfWZ1bmN0aW9uIHYoUyl7aWYoUz09PW51bGwpe20odC5leGl0KCJjaHVua0Zsb3ciKSwhMCkseCgwKSx0LmNvbnN1bWUoUyk7cmV0dXJufXJldHVybiBPZShTKT8odC5jb25zdW1lKFMpLG0odC5leGl0KCJjaHVua0Zsb3ciKSksaT0wLGUuaW50ZXJydXB0PXZvaWQgMCxvKToodC5jb25zdW1lKFMpLHYpfWZ1bmN0aW9uIG0oUyxGKXtsZXQgXz1lLnNsaWNlU3RyZWFtKFMpO2lmKEYmJl8ucHVzaChudWxsKSxTLnByZXZpb3VzPXMscyYmKHMubmV4dD1TKSxzPVMsci5kZWZpbmVTa2lwKFMuc3RhcnQpLHIud3JpdGUoXyksZS5wYXJzZXIubGF6eVtTLnN0YXJ0LmxpbmVdKXtsZXQgaz1yLmV2ZW50cy5sZW5ndGg7Zm9yKDtrLS07KWlmKHIuZXZlbnRzW2tdWzFdLnN0YXJ0Lm9mZnNldDxuJiYoIXIuZXZlbnRzW2tdWzFdLmVuZHx8ci5ldmVudHNba11bMV0uZW5kLm9mZnNldD5uKSlyZXR1cm47bGV0IE49ZS5ldmVudHMubGVuZ3RoLEw9TixBLHE7Zm9yKDtMLS07KWlmKGUuZXZlbnRzW0xdWzBdPT09ImV4aXQiJiZlLmV2ZW50c1tMXVsxXS50eXBlPT09ImNodW5rRmxvdyIpe2lmKEEpe3E9ZS5ldmVudHNbTF1bMV0uZW5kO2JyZWFrfUE9ITB9Zm9yKHgoaSksaz1OO2s8ZS5ldmVudHMubGVuZ3RoOyllLmV2ZW50c1trXVsxXS5lbmQ9ey4uLnF9LGsrKztSMShlLmV2ZW50cyxMKzEsMCxlLmV2ZW50cy5zbGljZShOKSksZS5ldmVudHMubGVuZ3RoPWt9fWZ1bmN0aW9uIHgoUyl7bGV0IEY9YS5sZW5ndGg7Zm9yKDtGLS0gPlM7KXtsZXQgXz1hW0ZdO2UuY29udGFpbmVyU3RhdGU9X1sxXSxfWzBdLmV4aXQuY2FsbChlLHQpfWEubGVuZ3RoPVN9ZnVuY3Rpb24gTSgpe3Iud3JpdGUoW251bGxdKSxzPXZvaWQgMCxyPXZvaWQgMCxlLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3c9dm9pZCAwfX1mdW5jdGlvbiB6RnQodCxlLGEpe3JldHVybiBpdCh0LHQuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LGUsYSksImxpbmVQcmVmaXgiLHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCl9dmFyIGtvZSx6b2UsU29lPWIoKCk9PntCMSgpO0F0KCk7SXIoKTtrb2U9e3Rva2VuaXplOk1GdH0sem9lPXt0b2tlbml6ZTp6RnR9fSk7ZnVuY3Rpb24ga0Z0KHQpe2xldCBlPXRoaXMsYT10LmF0dGVtcHQoUnIsaSx0LmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCxyLGl0KHQsdC5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxyLHQuYXR0ZW1wdCh0TCxyKSksImxpbmVQcmVmaXgiKSkpO3JldHVybiBhO2Z1bmN0aW9uIGkocyl7aWYocz09PW51bGwpe3QuY29uc3VtZShzKTtyZXR1cm59cmV0dXJuIHQuZW50ZXIoImxpbmVFbmRpbmdCbGFuayIpLHQuY29uc3VtZShzKSx0LmV4aXQoImxpbmVFbmRpbmdCbGFuayIpLGUuY3VycmVudENvbnN0cnVjdD12b2lkIDAsYX1mdW5jdGlvbiByKHMpe2lmKHM9PT1udWxsKXt0LmNvbnN1bWUocyk7cmV0dXJufXJldHVybiB0LmVudGVyKCJsaW5lRW5kaW5nIiksdC5jb25zdW1lKHMpLHQuZXhpdCgibGluZUVuZGluZyIpLGUuY3VycmVudENvbnN0cnVjdD12b2lkIDAsYX19dmFyIENvZSxfb2U9YigoKT0+e0s5KCk7QjEoKTtBdCgpO0NvZT17dG9rZW5pemU6a0Z0fX0pO2Z1bmN0aW9uIFRvZSh0KXtyZXR1cm57cmVzb2x2ZUFsbDpMb2UodD09PSJ0ZXh0Ij9TRnQ6dm9pZCAwKSx0b2tlbml6ZTplfTtmdW5jdGlvbiBlKGEpe2xldCBpPXRoaXMscj10aGlzLnBhcnNlci5jb25zdHJ1Y3RzW3RdLHM9YS5hdHRlbXB0KHIsbixvKTtyZXR1cm4gbjtmdW5jdGlvbiBuKHApe3JldHVybiBjKHApP3MocCk6byhwKX1mdW5jdGlvbiBvKHApe2lmKHA9PT1udWxsKXthLmNvbnN1bWUocCk7cmV0dXJufXJldHVybiBhLmVudGVyKCJkYXRhIiksYS5jb25zdW1lKHApLGR9ZnVuY3Rpb24gZChwKXtyZXR1cm4gYyhwKT8oYS5leGl0KCJkYXRhIikscyhwKSk6KGEuY29uc3VtZShwKSxkKX1mdW5jdGlvbiBjKHApe2lmKHA9PT1udWxsKXJldHVybiEwO2xldCBsPXJbcF0sZj0tMTtpZihsKWZvcig7KytmPGwubGVuZ3RoOyl7bGV0IGc9bFtmXTtpZighZy5wcmV2aW91c3x8Zy5wcmV2aW91cy5jYWxsKGksaS5wcmV2aW91cykpcmV0dXJuITB9cmV0dXJuITF9fX1mdW5jdGlvbiBMb2UodCl7cmV0dXJuIGU7ZnVuY3Rpb24gZShhLGkpe2xldCByPS0xLHM7Zm9yKDsrK3I8PWEubGVuZ3RoOylzPT09dm9pZCAwP2Fbcl0mJmFbcl1bMV0udHlwZT09PSJkYXRhIiYmKHM9cixyKyspOighYVtyXXx8YVtyXVsxXS50eXBlIT09ImRhdGEiKSYmKHIhPT1zKzImJihhW3NdWzFdLmVuZD1hW3ItMV1bMV0uZW5kLGEuc3BsaWNlKHMrMixyLXMtMikscj1zKzIpLHM9dm9pZCAwKTtyZXR1cm4gdD90KGEsaSk6YX19ZnVuY3Rpb24gU0Z0KHQsZSl7bGV0IGE9MDtmb3IoOysrYTw9dC5sZW5ndGg7KWlmKChhPT09dC5sZW5ndGh8fHRbYV1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJnRbYS0xXVsxXS50eXBlPT09ImRhdGEiKXtsZXQgaT10W2EtMV1bMV0scj1lLnNsaWNlU3RyZWFtKGkpLHM9ci5sZW5ndGgsbj0tMSxvPTAsZDtmb3IoO3MtLTspe2xldCBjPXJbc107aWYodHlwZW9mIGM9PSJzdHJpbmciKXtmb3Iobj1jLmxlbmd0aDtjLmNoYXJDb2RlQXQobi0xKT09PTMyOylvKyssbi0tO2lmKG4pYnJlYWs7bj0tMX1lbHNlIGlmKGM9PT0tMilkPSEwLG8rKztlbHNlIGlmKGMhPT0tMSl7cysrO2JyZWFrfX1pZihlLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyYmYT09PXQubGVuZ3RoJiYobz0wKSxvKXtsZXQgYz17dHlwZTphPT09dC5sZW5ndGh8fGR8fG88Mj8ibGluZVN1ZmZpeCI6ImhhcmRCcmVha1RyYWlsaW5nIixzdGFydDp7X2J1ZmZlckluZGV4OnM/bjppLnN0YXJ0Ll9idWZmZXJJbmRleCtuLF9pbmRleDppLnN0YXJ0Ll9pbmRleCtzLGxpbmU6aS5lbmQubGluZSxjb2x1bW46aS5lbmQuY29sdW1uLW8sb2Zmc2V0OmkuZW5kLm9mZnNldC1vfSxlbmQ6ey4uLmkuZW5kfX07aS5lbmQ9ey4uLmMuc3RhcnR9LGkuc3RhcnQub2Zmc2V0PT09aS5lbmQub2Zmc2V0P09iamVjdC5hc3NpZ24oaSxjKToodC5zcGxpY2UoYSwwLFsiZW50ZXIiLGMsZV0sWyJleGl0IixjLGVdKSxhKz0yKX1hKyt9cmV0dXJuIHR9dmFyICRvZSxBb2UsRG9lLF9MPWIoKCk9Pnskb2U9e3Jlc29sdmVBbGw6TG9lKCl9LEFvZT1Ub2UoInN0cmluZyIpLERvZT1Ub2UoInRleHQiKX0pO3ZhciBUTD17fTtXZShUTCx7YXR0ZW50aW9uTWFya2VyczooKT0+RUZ0LGNvbnRlbnRJbml0aWFsOigpPT5fRnQsZGlzYWJsZTooKT0+UEZ0LGRvY3VtZW50OigpPT5DRnQsZmxvdzooKT0+TEZ0LGZsb3dJbml0aWFsOigpPT5URnQsaW5zaWRlU3BhbjooKT0+REZ0LHN0cmluZzooKT0+JEZ0LHRleHQ6KCk9PkFGdH0pO3ZhciBDRnQsX0Z0LFRGdCxMRnQsJEZ0LEFGdCxERnQsRUZ0LFBGdCxFb2U9YigoKT0+e0s5KCk7X0woKTtDRnQ9ezQyOlcyLDQzOlcyLDQ1OlcyLDQ4OlcyLDQ5OlcyLDUwOlcyLDUxOlcyLDUyOlcyLDUzOlcyLDU0OlcyLDU1OlcyLDU2OlcyLDU3OlcyLDYyOkg5fSxfRnQ9ezkxOm5MfSxURnQ9e1stMl06RzYsWy0xXTpHNiwzMjpHNn0sTEZ0PXszNTpsTCw0MjpfMCw0NTpbWDksXzBdLDYwOmRMLDYxOlg5LDk1Ol8wLDk2Omo5LDEyNjpqOX0sJEZ0PXszODpWOSw5MjpxOX0sQUZ0PXtbLTVdOlg2LFstNF06WDYsWy0zXTpYNiwzMzpoTCwzODpWOSw0MjpXNiw2MDpbS1QscExdLDkxOnVMLDkyOltvTCxxOV0sOTM6QzAsOTU6VzYsOTY6UVR9LERGdD17bnVsbDpbVzYsJG9lXX0sRUZ0PXtudWxsOls0Miw5NV19LFBGdD17bnVsbDpbXX19KTtmdW5jdGlvbiBQb2UodCxlLGEpe2xldCBpPXtfYnVmZmVySW5kZXg6LTEsX2luZGV4OjAsbGluZTphJiZhLmxpbmV8fDEsY29sdW1uOmEmJmEuY29sdW1ufHwxLG9mZnNldDphJiZhLm9mZnNldHx8MH0scj17fSxzPVtdLG49W10sbz1bXSxkPSEwLGM9e2F0dGVtcHQ6QShOKSxjaGVjazpBKEwpLGNvbnN1bWU6RixlbnRlcjpfLGV4aXQ6ayxpbnRlcnJ1cHQ6QShMLHtpbnRlcnJ1cHQ6ITB9KX0scD17Y29kZTpudWxsLGNvbnRhaW5lclN0YXRlOnt9LGRlZmluZVNraXA6eCxldmVudHM6W10sbm93Om0scGFyc2VyOnQscHJldmlvdXM6bnVsbCxzbGljZVNlcmlhbGl6ZTp5LHNsaWNlU3RyZWFtOnYsd3JpdGU6Z30sbD1lLnRva2VuaXplLmNhbGwocCxjKSxmO3JldHVybiBlLnJlc29sdmVBbGwmJnMucHVzaChlKSxwO2Z1bmN0aW9uIGcoRSl7cmV0dXJuIG49WjEobixFKSxNKCksbltuLmxlbmd0aC0xXSE9PW51bGw/W106KHEoZSwwKSxwLmV2ZW50cz1VbihzLHAuZXZlbnRzLHApLHAuZXZlbnRzKX1mdW5jdGlvbiB5KEUsVCl7cmV0dXJuIE5GdCh2KEUpLFQpfWZ1bmN0aW9uIHYoRSl7cmV0dXJuIElGdChuLEUpfWZ1bmN0aW9uIG0oKXtsZXR7X2J1ZmZlckluZGV4OkUsX2luZGV4OlQsbGluZTokLGNvbHVtbjpWLG9mZnNldDpSfT1pO3JldHVybntfYnVmZmVySW5kZXg6RSxfaW5kZXg6VCxsaW5lOiQsY29sdW1uOlYsb2Zmc2V0OlJ9fWZ1bmN0aW9uIHgoRSl7cltFLmxpbmVdPUUuY29sdW1uLHooKX1mdW5jdGlvbiBNKCl7bGV0IEU7Zm9yKDtpLl9pbmRleDxuLmxlbmd0aDspe2xldCBUPW5baS5faW5kZXhdO2lmKHR5cGVvZiBUPT0ic3RyaW5nIilmb3IoRT1pLl9pbmRleCxpLl9idWZmZXJJbmRleDwwJiYoaS5fYnVmZmVySW5kZXg9MCk7aS5faW5kZXg9PT1FJiZpLl9idWZmZXJJbmRleDxULmxlbmd0aDspUyhULmNoYXJDb2RlQXQoaS5fYnVmZmVySW5kZXgpKTtlbHNlIFMoVCl9fWZ1bmN0aW9uIFMoRSl7ZD12b2lkIDAsZj1FLGw9bChFKX1mdW5jdGlvbiBGKEUpe09lKEUpPyhpLmxpbmUrKyxpLmNvbHVtbj0xLGkub2Zmc2V0Kz1FPT09LTM/MjoxLHooKSk6RSE9PS0xJiYoaS5jb2x1bW4rKyxpLm9mZnNldCsrKSxpLl9idWZmZXJJbmRleDwwP2kuX2luZGV4Kys6KGkuX2J1ZmZlckluZGV4KyssaS5fYnVmZmVySW5kZXg9PT1uW2kuX2luZGV4XS5sZW5ndGgmJihpLl9idWZmZXJJbmRleD0tMSxpLl9pbmRleCsrKSkscC5wcmV2aW91cz1FLGQ9ITB9ZnVuY3Rpb24gXyhFLFQpe2xldCAkPVR8fHt9O3JldHVybiAkLnR5cGU9RSwkLnN0YXJ0PW0oKSxwLmV2ZW50cy5wdXNoKFsiZW50ZXIiLCQscF0pLG8ucHVzaCgkKSwkfWZ1bmN0aW9uIGsoRSl7bGV0IFQ9by5wb3AoKTtyZXR1cm4gVC5lbmQ9bSgpLHAuZXZlbnRzLnB1c2goWyJleGl0IixULHBdKSxUfWZ1bmN0aW9uIE4oRSxUKXtxKEUsVC5mcm9tKX1mdW5jdGlvbiBMKEUsVCl7VC5yZXN0b3JlKCl9ZnVuY3Rpb24gQShFLFQpe3JldHVybiAkO2Z1bmN0aW9uICQoVixSLFUpe2xldCByZSxqLG1lLHdlO3JldHVybiBBcnJheS5pc0FycmF5KFYpP2NlKFYpOiJ0b2tlbml6ZSJpbiBWP2NlKFtWXSk6SChWKTtmdW5jdGlvbiBIKE8pe3JldHVybiBaO2Z1bmN0aW9uIFooWSl7bGV0IG9lPVkhPT1udWxsJiZPW1ldLGdlPVkhPT1udWxsJiZPLm51bGwsYmU9Wy4uLkFycmF5LmlzQXJyYXkob2UpP29lOm9lP1tvZV06W10sLi4uQXJyYXkuaXNBcnJheShnZSk/Z2U6Z2U/W2dlXTpbXV07cmV0dXJuIGNlKGJlKShZKX19ZnVuY3Rpb24gY2UoTyl7cmV0dXJuIHJlPU8saj0wLE8ubGVuZ3RoPT09MD9VOmtlKE9bal0pfWZ1bmN0aW9uIGtlKE8pe3JldHVybiBaO2Z1bmN0aW9uIFooWSl7cmV0dXJuIHdlPUMoKSxtZT1PLE8ucGFydGlhbHx8KHAuY3VycmVudENvbnN0cnVjdD1PKSxPLm5hbWUmJnAucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKE8ubmFtZSk/RChZKTpPLnRva2VuaXplLmNhbGwoVD9PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocCksVCk6cCxjLFcsRCkoWSl9fWZ1bmN0aW9uIFcoTyl7cmV0dXJuIGQ9ITAsRShtZSx3ZSksUn1mdW5jdGlvbiBEKE8pe3JldHVybiBkPSEwLHdlLnJlc3RvcmUoKSwrK2o8cmUubGVuZ3RoP2tlKHJlW2pdKTpVfX19ZnVuY3Rpb24gcShFLFQpe0UucmVzb2x2ZUFsbCYmIXMuaW5jbHVkZXMoRSkmJnMucHVzaChFKSxFLnJlc29sdmUmJlIxKHAuZXZlbnRzLFQscC5ldmVudHMubGVuZ3RoLVQsRS5yZXNvbHZlKHAuZXZlbnRzLnNsaWNlKFQpLHApKSxFLnJlc29sdmVUbyYmKHAuZXZlbnRzPUUucmVzb2x2ZVRvKHAuZXZlbnRzLHApKX1mdW5jdGlvbiBDKCl7bGV0IEU9bSgpLFQ9cC5wcmV2aW91cywkPXAuY3VycmVudENvbnN0cnVjdCxWPXAuZXZlbnRzLmxlbmd0aCxSPUFycmF5LmZyb20obyk7cmV0dXJue2Zyb206VixyZXN0b3JlOlV9O2Z1bmN0aW9uIFUoKXtpPUUscC5wcmV2aW91cz1ULHAuY3VycmVudENvbnN0cnVjdD0kLHAuZXZlbnRzLmxlbmd0aD1WLG89Uix6KCl9fWZ1bmN0aW9uIHooKXtpLmxpbmUgaW4gciYmaS5jb2x1bW48MiYmKGkuY29sdW1uPXJbaS5saW5lXSxpLm9mZnNldCs9cltpLmxpbmVdLTEpfX1mdW5jdGlvbiBJRnQodCxlKXtsZXQgYT1lLnN0YXJ0Ll9pbmRleCxpPWUuc3RhcnQuX2J1ZmZlckluZGV4LHI9ZS5lbmQuX2luZGV4LHM9ZS5lbmQuX2J1ZmZlckluZGV4LG47aWYoYT09PXIpbj1bdFthXS5zbGljZShpLHMpXTtlbHNle2lmKG49dC5zbGljZShhLHIpLGk+LTEpe2xldCBvPW5bMF07dHlwZW9mIG89PSJzdHJpbmciP25bMF09by5zbGljZShpKTpuLnNoaWZ0KCl9cz4wJiZuLnB1c2godFtyXS5zbGljZSgwLHMpKX1yZXR1cm4gbn1mdW5jdGlvbiBORnQodCxlKXtsZXQgYT0tMSxpPVtdLHI7Zm9yKDsrK2E8dC5sZW5ndGg7KXtsZXQgcz10W2FdLG47aWYodHlwZW9mIHM9PSJzdHJpbmciKW49cztlbHNlIHN3aXRjaChzKXtjYXNlLTU6e249IlxyIjticmVha31jYXNlLTQ6e249YApgO2JyZWFrfWNhc2UtMzp7bj1gXHIKYDticmVha31jYXNlLTI6e249ZT8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIWUmJnIpY29udGludWU7bj0iICI7YnJlYWt9ZGVmYXVsdDpuPVN0cmluZy5mcm9tQ2hhckNvZGUocyl9cj1zPT09LTIsaS5wdXNoKG4pfXJldHVybiBpLmpvaW4oIiIpfXZhciBJb2U9YigoKT0+e0F0KCk7SXIoKTtVNigpfSk7ZnVuY3Rpb24gSzYodCl7bGV0IGk9e2NvbnN0cnVjdHM6TjkoW1RMLC4uLih0fHx7fSkuZXh0ZW5zaW9uc3x8W11dKSxjb250ZW50OnIod29lKSxkZWZpbmVkOltdLGRvY3VtZW50OnIoa29lKSxmbG93OnIoQ29lKSxsYXp5Ont9LHN0cmluZzpyKEFvZSksdGV4dDpyKERvZSl9O3JldHVybiBpO2Z1bmN0aW9uIHIocyl7cmV0dXJuIG47ZnVuY3Rpb24gbihvKXtyZXR1cm4gUG9lKGkscyxvKX19fXZhciBMTD1iKCgpPT57TzkoKTtNb2UoKTtTb2UoKTtfb2UoKTtfTCgpO0VvZSgpO0lvZSgpfSk7ZnVuY3Rpb24gUTYodCl7Zm9yKDshVTkodCk7KTtyZXR1cm4gdH12YXIgJEw9YigoKT0+e2VMKCl9KTtmdW5jdGlvbiBKNigpe2xldCB0PTEsZT0iIixhPSEwLGk7cmV0dXJuIHI7ZnVuY3Rpb24gcihzLG4sbyl7bGV0IGQ9W10sYyxwLGwsZixnO2ZvcihzPWUrKHR5cGVvZiBzPT0ic3RyaW5nIj9zLnRvU3RyaW5nKCk6bmV3IFRleHREZWNvZGVyKG58fHZvaWQgMCkuZGVjb2RlKHMpKSxsPTAsZT0iIixhJiYocy5jaGFyQ29kZUF0KDApPT09NjUyNzkmJmwrKyxhPXZvaWQgMCk7bDxzLmxlbmd0aDspe2lmKE5vZS5sYXN0SW5kZXg9bCxjPU5vZS5leGVjKHMpLGY9YyYmYy5pbmRleCE9PXZvaWQgMD9jLmluZGV4OnMubGVuZ3RoLGc9cy5jaGFyQ29kZUF0KGYpLCFjKXtlPXMuc2xpY2UobCk7YnJlYWt9aWYoZz09PTEwJiZsPT09ZiYmaSlkLnB1c2goLTMpLGk9dm9pZCAwO2Vsc2Ugc3dpdGNoKGkmJihkLnB1c2goLTUpLGk9dm9pZCAwKSxsPGYmJihkLnB1c2gocy5zbGljZShsLGYpKSx0Kz1mLWwpLGcpe2Nhc2UgMDp7ZC5wdXNoKDY1NTMzKSx0Kys7YnJlYWt9Y2FzZSA5Ontmb3IocD1NYXRoLmNlaWwodC80KSo0LGQucHVzaCgtMik7dCsrPHA7KWQucHVzaCgtMSk7YnJlYWt9Y2FzZSAxMDp7ZC5wdXNoKC00KSx0PTE7YnJlYWt9ZGVmYXVsdDppPSEwLHQ9MX1sPWYrMX1yZXR1cm4gbyYmKGkmJmQucHVzaCgtNSksZSYmZC5wdXNoKGUpLGQucHVzaChudWxsKSksZH19dmFyIE5vZSxBTD1iKCgpPT57Tm9lPS9bXDBcdFxuXHJdL2d9KTtmdW5jdGlvbiBBTjEodCxlLGEpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihhPWUsZT12b2lkIDApLFNMKGEpKFE2KEs2KGEpLmRvY3VtZW50KCkud3JpdGUoSjYoKSh0LGUsITApKSkpfXZhciBGb2U9YigoKT0+e0NMKCk7TEwoKTskTCgpO0FMKCk7Q0woKTtMTCgpOyRMKCk7QUwoKX0pO2Z1bmN0aW9uIERMKHQsZSxhKXtyZXR1cm4gZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYoYT1lLGU9dm9pZCAwKSxGRnQoYSkoUTYoSzYoYSkuZG9jdW1lbnQoKS53cml0ZShKNigpKHQsZSwhMCkpKSl9ZnVuY3Rpb24gRkZ0KHQpe2xldCBlPXt0cmFuc2Zvcm1zOltdLGNhbkNvbnRhaW5Fb2xzOlsiZW1waGFzaXMiLCJmcmFnbWVudCIsImhlYWRpbmciLCJwYXJhZ3JhcGgiLCJzdHJvbmciXSxlbnRlcjp7YXV0b2xpbms6cyhkZSksYXV0b2xpbmtQcm90b2NvbDpBLGF1dG9saW5rRW1haWw6QSxhdHhIZWFkaW5nOnMoQiksYmxvY2tRdW90ZTpzKFkpLGNoYXJhY3RlckVzY2FwZTpBLGNoYXJhY3RlclJlZmVyZW5jZTpBLGNvZGVGZW5jZWQ6cyhvZSksY29kZUZlbmNlZEZlbmNlSW5mbzpuLGNvZGVGZW5jZWRGZW5jZU1ldGE6bixjb2RlSW5kZW50ZWQ6cyhvZSxuKSxjb2RlVGV4dDpzKGdlLG4pLGNvZGVUZXh0RGF0YTpBLGRhdGE6QSxjb2RlRmxvd1ZhbHVlOkEsZGVmaW5pdGlvbjpzKGJlKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6bixkZWZpbml0aW9uTGFiZWxTdHJpbmc6bixkZWZpbml0aW9uVGl0bGVTdHJpbmc6bixlbXBoYXNpczpzKCRlKSxoYXJkQnJlYWtFc2NhcGU6cyhQKSxoYXJkQnJlYWtUcmFpbGluZzpzKFApLGh0bWxGbG93OnMoSixuKSxodG1sRmxvd0RhdGE6QSxodG1sVGV4dDpzKEosbiksaHRtbFRleHREYXRhOkEsaW1hZ2U6cyhmZSksbGFiZWw6bixsaW5rOnMoZGUpLGxpc3RJdGVtOnMoaGUpLGxpc3RJdGVtVmFsdWU6ZixsaXN0T3JkZXJlZDpzKF9lLGwpLGxpc3RVbm9yZGVyZWQ6cyhfZSkscGFyYWdyYXBoOnModGUpLHJlZmVyZW5jZTpILHJlZmVyZW5jZVN0cmluZzpuLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6bixyZXNvdXJjZVRpdGxlU3RyaW5nOm4sc2V0ZXh0SGVhZGluZzpzKEIpLHN0cm9uZzpzKHplKSx0aGVtYXRpY0JyZWFrOnMoR2UpfSxleGl0OnthdHhIZWFkaW5nOmQoKSxhdHhIZWFkaW5nU2VxdWVuY2U6XyxhdXRvbGluazpkKCksYXV0b2xpbmtFbWFpbDpaLGF1dG9saW5rUHJvdG9jb2w6TyxibG9ja1F1b3RlOmQoKSxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTpxLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOmtlLGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6a2UsY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6VyxjaGFyYWN0ZXJSZWZlcmVuY2U6RCxjb2RlRmVuY2VkOmQobSksY29kZUZlbmNlZEZlbmNlOnYsY29kZUZlbmNlZEZlbmNlSW5mbzpnLGNvZGVGZW5jZWRGZW5jZU1ldGE6eSxjb2RlRmxvd1ZhbHVlOnEsY29kZUluZGVudGVkOmQoeCksY29kZVRleHQ6ZCgkKSxjb2RlVGV4dERhdGE6cSxkYXRhOnEsZGVmaW5pdGlvbjpkKCksZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOkYsZGVmaW5pdGlvbkxhYmVsU3RyaW5nOk0sZGVmaW5pdGlvblRpdGxlU3RyaW5nOlMsZW1waGFzaXM6ZCgpLGhhcmRCcmVha0VzY2FwZTpkKHopLGhhcmRCcmVha1RyYWlsaW5nOmQoeiksaHRtbEZsb3c6ZChFKSxodG1sRmxvd0RhdGE6cSxodG1sVGV4dDpkKFQpLGh0bWxUZXh0RGF0YTpxLGltYWdlOmQoUiksbGFiZWw6cmUsbGFiZWxUZXh0OlUsbGluZUVuZGluZzpDLGxpbms6ZChWKSxsaXN0SXRlbTpkKCksbGlzdE9yZGVyZWQ6ZCgpLGxpc3RVbm9yZGVyZWQ6ZCgpLHBhcmFncmFwaDpkKCkscmVmZXJlbmNlU3RyaW5nOmNlLHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6aixyZXNvdXJjZVRpdGxlU3RyaW5nOm1lLHJlc291cmNlOndlLHNldGV4dEhlYWRpbmc6ZChMKSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOk4sc2V0ZXh0SGVhZGluZ1RleHQ6ayxzdHJvbmc6ZCgpLHRoZW1hdGljQnJlYWs6ZCgpfX07Um9lKGUsKHR8fHt9KS5tZGFzdEV4dGVuc2lvbnN8fFtdKTtsZXQgYT17fTtyZXR1cm4gaTtmdW5jdGlvbiBpKHllKXtsZXQgZWU9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfSxhZT17c3RhY2s6W2VlXSx0b2tlblN0YWNrOltdLGNvbmZpZzplLGVudGVyOm8sZXhpdDpjLGJ1ZmZlcjpuLHJlc3VtZTpwLGRhdGE6YX0sdmU9W10sUGU9LTE7Zm9yKDsrK1BlPHllLmxlbmd0aDspaWYoeWVbUGVdWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHx5ZVtQZV1bMV0udHlwZT09PSJsaXN0VW5vcmRlcmVkIilpZih5ZVtQZV1bMF09PT0iZW50ZXIiKXZlLnB1c2goUGUpO2Vsc2V7bGV0IGplPXZlLnBvcCgpO1BlPXIoeWUsamUsUGUpfWZvcihQZT0tMTsrK1BlPHllLmxlbmd0aDspe2xldCBqZT1lW3llW1BlXVswXV07T29lLmNhbGwoamUseWVbUGVdWzFdLnR5cGUpJiZqZVt5ZVtQZV1bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtzbGljZVNlcmlhbGl6ZTp5ZVtQZV1bMl0uc2xpY2VTZXJpYWxpemV9LGFlKSx5ZVtQZV1bMV0pfWlmKGFlLnRva2VuU3RhY2subGVuZ3RoPjApe2xldCBqZT1hZS50b2tlblN0YWNrW2FlLnRva2VuU3RhY2subGVuZ3RoLTFdOyhqZVsxXXx8Qm9lKS5jYWxsKGFlLHZvaWQgMCxqZVswXSl9Zm9yKGVlLnBvc2l0aW9uPXtzdGFydDpXbih5ZS5sZW5ndGg+MD95ZVswXVsxXS5zdGFydDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSksZW5kOlduKHllLmxlbmd0aD4wP3llW3llLmxlbmd0aC0yXVsxXS5lbmQ6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0pfSxQZT0tMTsrK1BlPGUudHJhbnNmb3Jtcy5sZW5ndGg7KWVlPWUudHJhbnNmb3Jtc1tQZV0oZWUpfHxlZTtyZXR1cm4gZWV9ZnVuY3Rpb24gcih5ZSxlZSxhZSl7bGV0IHZlPWVlLTEsUGU9LTEsamU9ITEsd3Qsb3QsJHQsS3Q7Zm9yKDsrK3ZlPD1hZTspe2xldCBpZT15ZVt2ZV07c3dpdGNoKGllWzFdLnR5cGUpe2Nhc2UibGlzdFVub3JkZXJlZCI6Y2FzZSJsaXN0T3JkZXJlZCI6Y2FzZSJibG9ja1F1b3RlIjp7aWVbMF09PT0iZW50ZXIiP1BlKys6UGUtLSxLdD12b2lkIDA7YnJlYWt9Y2FzZSJsaW5lRW5kaW5nQmxhbmsiOntpZVswXT09PSJlbnRlciImJih3dCYmIUt0JiYhUGUmJiEkdCYmKCR0PXZlKSxLdD12b2lkIDApO2JyZWFrfWNhc2UibGluZVByZWZpeCI6Y2FzZSJsaXN0SXRlbVZhbHVlIjpjYXNlImxpc3RJdGVtTWFya2VyIjpjYXNlImxpc3RJdGVtUHJlZml4IjpjYXNlImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI6YnJlYWs7ZGVmYXVsdDpLdD12b2lkIDB9aWYoIVBlJiZpZVswXT09PSJlbnRlciImJmllWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxQZT09PS0xJiZpZVswXT09PSJleGl0IiYmKGllWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fGllWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQiKSl7aWYod3Qpe2xldCBzZT12ZTtmb3Iob3Q9dm9pZCAwO3NlLS07KXtsZXQgVGU9eWVbc2VdO2lmKFRlWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fFRlWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoVGVbMF09PT0iZXhpdCIpY29udGludWU7b3QmJih5ZVtvdF1bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixqZT0hMCksVGVbMV0udHlwZT0ibGluZUVuZGluZyIsb3Q9c2V9ZWxzZSBpZighKFRlWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fFRlWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fFRlWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxUZVsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxUZVsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9JHQmJighb3R8fCR0PG90KSYmKHd0Ll9zcHJlYWQ9ITApLHd0LmVuZD1PYmplY3QuYXNzaWduKHt9LG90P3llW290XVsxXS5zdGFydDppZVsxXS5lbmQpLHllLnNwbGljZShvdHx8dmUsMCxbImV4aXQiLHd0LGllWzJdXSksdmUrKyxhZSsrfWlmKGllWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiKXtsZXQgc2U9e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saWVbMV0uc3RhcnQpLGVuZDp2b2lkIDB9O3d0PXNlLHllLnNwbGljZSh2ZSwwLFsiZW50ZXIiLHNlLGllWzJdXSksdmUrKyxhZSsrLCR0PXZvaWQgMCxLdD0hMH19fXJldHVybiB5ZVtlZV1bMV0uX3NwcmVhZD1qZSxhZX1mdW5jdGlvbiBzKHllLGVlKXtyZXR1cm4gYWU7ZnVuY3Rpb24gYWUodmUpe28uY2FsbCh0aGlzLHllKHZlKSx2ZSksZWUmJmVlLmNhbGwodGhpcyx2ZSl9fWZ1bmN0aW9uIG4oKXt0aGlzLnN0YWNrLnB1c2goe3R5cGU6ImZyYWdtZW50IixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIG8oeWUsZWUsYWUpe3RoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0uY2hpbGRyZW4ucHVzaCh5ZSksdGhpcy5zdGFjay5wdXNoKHllKSx0aGlzLnRva2VuU3RhY2sucHVzaChbZWUsYWV8fHZvaWQgMF0pLHllLnBvc2l0aW9uPXtzdGFydDpXbihlZS5zdGFydCksZW5kOnZvaWQgMH19ZnVuY3Rpb24gZCh5ZSl7cmV0dXJuIGVlO2Z1bmN0aW9uIGVlKGFlKXt5ZSYmeWUuY2FsbCh0aGlzLGFlKSxjLmNhbGwodGhpcyxhZSl9fWZ1bmN0aW9uIGMoeWUsZWUpe2xldCBhZT10aGlzLnN0YWNrLnBvcCgpLHZlPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZih2ZSl2ZVswXS50eXBlIT09eWUudHlwZSYmKGVlP2VlLmNhbGwodGhpcyx5ZSx2ZVswXSk6KHZlWzFdfHxCb2UpLmNhbGwodGhpcyx5ZSx2ZVswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIreWUudHlwZSsiYCAoIitIbih7c3RhcnQ6eWUuc3RhcnQsZW5kOnllLmVuZH0pKyIpOiBpdFx1MjAxOXMgbm90IG9wZW4iKTthZS5wb3NpdGlvbi5lbmQ9V24oeWUuZW5kKX1mdW5jdGlvbiBwKCl7cmV0dXJuIHcwKHRoaXMuc3RhY2sucG9wKCkpfWZ1bmN0aW9uIGwoKXt0aGlzLmRhdGEuZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlPSEwfWZ1bmN0aW9uIGYoeWUpe2lmKHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUpe2xldCBlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO2VlLnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKHllKSwxMCksdGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZT12b2lkIDB9fWZ1bmN0aW9uIGcoKXtsZXQgeWU9dGhpcy5yZXN1bWUoKSxlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLmxhbmc9eWV9ZnVuY3Rpb24geSgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUubWV0YT15ZX1mdW5jdGlvbiB2KCl7dGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlfHwodGhpcy5idWZmZXIoKSx0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGU9ITApfWZ1bmN0aW9uIG0oKXtsZXQgeWU9dGhpcy5yZXN1bWUoKSxlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLnZhbHVlPXllLnJlcGxhY2UoL14oXHI/XG58XHIpfChccj9cbnxccikkL2csIiIpLHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZT12b2lkIDB9ZnVuY3Rpb24geCgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudmFsdWU9eWUucmVwbGFjZSgvKFxyP1xufFxyKSQvZywiIil9ZnVuY3Rpb24gTSh5ZSl7bGV0IGVlPXRoaXMucmVzdW1lKCksYWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTthZS5sYWJlbD1lZSxhZS5pZGVudGlmaWVyPUkxKHRoaXMuc2xpY2VTZXJpYWxpemUoeWUpKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFMoKXtsZXQgeWU9dGhpcy5yZXN1bWUoKSxlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLnRpdGxlPXllfWZ1bmN0aW9uIEYoKXtsZXQgeWU9dGhpcy5yZXN1bWUoKSxlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLnVybD15ZX1mdW5jdGlvbiBfKHllKXtsZXQgZWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZighZWUuZGVwdGgpe2xldCBhZT10aGlzLnNsaWNlU2VyaWFsaXplKHllKS5sZW5ndGg7ZWUuZGVwdGg9YWV9fWZ1bmN0aW9uIGsoKXt0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZz0hMH1mdW5jdGlvbiBOKHllKXtsZXQgZWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtlZS5kZXB0aD10aGlzLnNsaWNlU2VyaWFsaXplKHllKS5jb2RlUG9pbnRBdCgwKT09PTYxPzE6Mn1mdW5jdGlvbiBMKCl7dGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmc9dm9pZCAwfWZ1bmN0aW9uIEEoeWUpe2xldCBhZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLmNoaWxkcmVuLHZlPWFlW2FlLmxlbmd0aC0xXTsoIXZlfHx2ZS50eXBlIT09InRleHQiKSYmKHZlPUZlKCksdmUucG9zaXRpb249e3N0YXJ0OlduKHllLnN0YXJ0KSxlbmQ6dm9pZCAwfSxhZS5wdXNoKHZlKSksdGhpcy5zdGFjay5wdXNoKHZlKX1mdW5jdGlvbiBxKHllKXtsZXQgZWU9dGhpcy5zdGFjay5wb3AoKTtlZS52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZSh5ZSksZWUucG9zaXRpb24uZW5kPVduKHllLmVuZCl9ZnVuY3Rpb24gQyh5ZSl7bGV0IGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYodGhpcy5kYXRhLmF0SGFyZEJyZWFrKXtsZXQgYWU9ZWUuY2hpbGRyZW5bZWUuY2hpbGRyZW4ubGVuZ3RoLTFdO2FlLnBvc2l0aW9uLmVuZD1Xbih5ZS5lbmQpLHRoaXMuZGF0YS5hdEhhcmRCcmVhaz12b2lkIDA7cmV0dXJufSF0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyYmZS5jYW5Db250YWluRW9scy5pbmNsdWRlcyhlZS50eXBlKSYmKEEuY2FsbCh0aGlzLHllKSxxLmNhbGwodGhpcyx5ZSkpfWZ1bmN0aW9uIHooKXt0aGlzLmRhdGEuYXRIYXJkQnJlYWs9ITB9ZnVuY3Rpb24gRSgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudmFsdWU9eWV9ZnVuY3Rpb24gVCgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudmFsdWU9eWV9ZnVuY3Rpb24gJCgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudmFsdWU9eWV9ZnVuY3Rpb24gVigpe2xldCB5ZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHRoaXMuZGF0YS5pblJlZmVyZW5jZSl7bGV0IGVlPXRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlfHwic2hvcnRjdXQiO3llLnR5cGUrPSJSZWZlcmVuY2UiLHllLnJlZmVyZW5jZVR5cGU9ZWUsZGVsZXRlIHllLnVybCxkZWxldGUgeWUudGl0bGV9ZWxzZSBkZWxldGUgeWUuaWRlbnRpZmllcixkZWxldGUgeWUubGFiZWw7dGhpcy5kYXRhLnJlZmVyZW5jZVR5cGU9dm9pZCAwfWZ1bmN0aW9uIFIoKXtsZXQgeWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZih0aGlzLmRhdGEuaW5SZWZlcmVuY2Upe2xldCBlZT10aGlzLmRhdGEucmVmZXJlbmNlVHlwZXx8InNob3J0Y3V0Ijt5ZS50eXBlKz0iUmVmZXJlbmNlIix5ZS5yZWZlcmVuY2VUeXBlPWVlLGRlbGV0ZSB5ZS51cmwsZGVsZXRlIHllLnRpdGxlfWVsc2UgZGVsZXRlIHllLmlkZW50aWZpZXIsZGVsZXRlIHllLmxhYmVsO3RoaXMuZGF0YS5yZWZlcmVuY2VUeXBlPXZvaWQgMH1mdW5jdGlvbiBVKHllKXtsZXQgZWU9dGhpcy5zbGljZVNlcmlhbGl6ZSh5ZSksYWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0yXTthZS5sYWJlbD1QOShlZSksYWUuaWRlbnRpZmllcj1JMShlZSkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiByZSgpe2xldCB5ZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdLGVlPXRoaXMucmVzdW1lKCksYWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZih0aGlzLmRhdGEuaW5SZWZlcmVuY2U9ITAsYWUudHlwZT09PSJsaW5rIil7bGV0IHZlPXllLmNoaWxkcmVuO2FlLmNoaWxkcmVuPXZlfWVsc2UgYWUuYWx0PWVlfWZ1bmN0aW9uIGooKXtsZXQgeWU9dGhpcy5yZXN1bWUoKSxlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLnVybD15ZX1mdW5jdGlvbiBtZSgpe2xldCB5ZT10aGlzLnJlc3VtZSgpLGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudGl0bGU9eWV9ZnVuY3Rpb24gd2UoKXt0aGlzLmRhdGEuaW5SZWZlcmVuY2U9dm9pZCAwfWZ1bmN0aW9uIEgoKXt0aGlzLmRhdGEucmVmZXJlbmNlVHlwZT0iY29sbGFwc2VkIn1mdW5jdGlvbiBjZSh5ZSl7bGV0IGVlPXRoaXMucmVzdW1lKCksYWU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTthZS5sYWJlbD1lZSxhZS5pZGVudGlmaWVyPUkxKHRoaXMuc2xpY2VTZXJpYWxpemUoeWUpKS50b0xvd2VyQ2FzZSgpLHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlPSJmdWxsIn1mdW5jdGlvbiBrZSh5ZSl7dGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU9eWUudHlwZX1mdW5jdGlvbiBXKHllKXtsZXQgZWU9dGhpcy5zbGljZVNlcmlhbGl6ZSh5ZSksYWU9dGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUsdmU7YWU/KHZlPUgzKGVlLGFlPT09ImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiPzEwOjE2KSx0aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZT12b2lkIDApOnZlPWpuKGVlKTtsZXQgUGU9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtQZS52YWx1ZSs9dmV9ZnVuY3Rpb24gRCh5ZSl7bGV0IGVlPXRoaXMuc3RhY2sucG9wKCk7ZWUucG9zaXRpb24uZW5kPVduKHllLmVuZCl9ZnVuY3Rpb24gTyh5ZSl7cS5jYWxsKHRoaXMseWUpO2xldCBlZT10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2VlLnVybD10aGlzLnNsaWNlU2VyaWFsaXplKHllKX1mdW5jdGlvbiBaKHllKXtxLmNhbGwodGhpcyx5ZSk7bGV0IGVlPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07ZWUudXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKHllKX1mdW5jdGlvbiBZKCl7cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBvZSgpe3JldHVybnt0eXBlOiJjb2RlIixsYW5nOm51bGwsbWV0YTpudWxsLHZhbHVlOiIifX1mdW5jdGlvbiBnZSgpe3JldHVybnt0eXBlOiJpbmxpbmVDb2RlIix2YWx1ZToiIn19ZnVuY3Rpb24gYmUoKXtyZXR1cm57dHlwZToiZGVmaW5pdGlvbiIsaWRlbnRpZmllcjoiIixsYWJlbDpudWxsLHRpdGxlOm51bGwsdXJsOiIifX1mdW5jdGlvbiAkZSgpe3JldHVybnt0eXBlOiJlbXBoYXNpcyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEIoKXtyZXR1cm57dHlwZToiaGVhZGluZyIsZGVwdGg6MCxjaGlsZHJlbjpbXX19ZnVuY3Rpb24gUCgpe3JldHVybnt0eXBlOiJicmVhayJ9fWZ1bmN0aW9uIEooKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIGZlKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gZGUoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIF9lKHllKXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDp5ZS50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDp5ZS5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBoZSh5ZSl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6eWUuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIHRlKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHplKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEZlKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBHZSgpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIFduKHQpe3JldHVybntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW4sb2Zmc2V0OnQub2Zmc2V0fX1mdW5jdGlvbiBSb2UodCxlKXtsZXQgYT0tMTtmb3IoOysrYTxlLmxlbmd0aDspe2xldCBpPWVbYV07QXJyYXkuaXNBcnJheShpKT9Sb2UodCxpKTpPRnQodCxpKX19ZnVuY3Rpb24gT0Z0KHQsZSl7bGV0IGE7Zm9yKGEgaW4gZSlpZihPb2UuY2FsbChlLGEpKXN3aXRjaChhKXtjYXNlImNhbkNvbnRhaW5Fb2xzIjp7bGV0IGk9ZVthXTtpJiZ0W2FdLnB1c2goLi4uaSk7YnJlYWt9Y2FzZSJ0cmFuc2Zvcm1zIjp7bGV0IGk9ZVthXTtpJiZ0W2FdLnB1c2goLi4uaSk7YnJlYWt9Y2FzZSJlbnRlciI6Y2FzZSJleGl0Ijp7bGV0IGk9ZVthXTtpJiZPYmplY3QuYXNzaWduKHRbYV0saSk7YnJlYWt9fX1mdW5jdGlvbiBCb2UodCxlKXt0aHJvdyB0P25ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiK3QudHlwZSsiYCAoIitIbih7c3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmR9KSsiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiK2UudHlwZSsiYCwgIitIbih7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSsiKSBpcyBvcGVuIik6bmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiK2UudHlwZSsiYCwgIitIbih7c3RhcnQ6ZS5zdGFydCxlbmQ6ZS5lbmR9KSsiKSBpcyBzdGlsbCBvcGVuIil9dmFyIE9vZSxIb2U9YigoKT0+e0w5KCk7Rm9lKCk7RTkoKTtJVCgpO1ZuKCk7ajYoKTtaXygpO09vZT17fS5oYXNPd25Qcm9wZXJ0eX0pO3ZhciBxb2U9YigoKT0+e0hvZSgpfSk7ZnVuY3Rpb24gajModCl7bGV0IGU9dGhpcztlLnBhcnNlcj1hO2Z1bmN0aW9uIGEoaSl7cmV0dXJuIERMKGksey4uLmUuZGF0YSgic2V0dGluZ3MiKSwuLi50LGV4dGVuc2lvbnM6ZS5kYXRhKCJtaWNyb21hcmtFeHRlbnNpb25zIil8fFtdLG1kYXN0RXh0ZW5zaW9uczplLmRhdGEoImZyb21NYXJrZG93bkV4dGVuc2lvbnMiKXx8W119KX19dmFyIFZvZT1iKCgpPT57cW9lKCl9KTt2YXIgam9lPWIoKCk9PntWb2UoKX0pO3ZhciBVb2U9aHQoKEtOMSxFTCk9PnsoZnVuY3Rpb24oKXt2YXIgdDt0eXBlb2YgRUw8InUiP3Q9RUwuZXhwb3J0cz1pOnQ9KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgwLGV2YWwpKCJ0aGlzIil9KSgpLHQuZm9ybWF0PWksdC52c3ByaW50Zj1hLHR5cGVvZiBjb25zb2xlPCJ1IiYmdHlwZW9mIGNvbnNvbGUubG9nPT0iZnVuY3Rpb24iJiYodC5wcmludGY9ZSk7ZnVuY3Rpb24gZSgpe2NvbnNvbGUubG9nKGkuYXBwbHkobnVsbCxhcmd1bWVudHMpKX1mdW5jdGlvbiBhKHIscyl7cmV0dXJuIGkuYXBwbHkobnVsbCxbcl0uY29uY2F0KHMpKX1mdW5jdGlvbiBpKHIpe2Zvcih2YXIgcz0xLG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLG89MCxkPXIubGVuZ3RoLGM9IiIscCxsPSExLGYsZyx5PSExLHYsbT1mdW5jdGlvbigpe3JldHVybiBuW3MrK119LHg9ZnVuY3Rpb24oKXtmb3IodmFyIE09IiI7L1xkLy50ZXN0KHJbb10pOylNKz1yW28rK10scD1yW29dO3JldHVybiBNLmxlbmd0aD4wP3BhcnNlSW50KE0pOm51bGx9O288ZDsrK28paWYocD1yW29dLGwpc3dpdGNoKGw9ITEscD09Ii4iPyh5PSExLHA9clsrK29dKTpwPT0iMCImJnJbbysxXT09Ii4iPyh5PSEwLG8rPTIscD1yW29dKTp5PSEwLHY9eCgpLHApe2Nhc2UiYiI6Yys9cGFyc2VJbnQobSgpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOmY9bSgpLHR5cGVvZiBmPT0ic3RyaW5nInx8ZiBpbnN0YW5jZW9mIFN0cmluZz9jKz1mOmMrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZiwxMCkpO2JyZWFrO2Nhc2UiZCI6Yys9cGFyc2VJbnQobSgpLDEwKTticmVhaztjYXNlImYiOmc9U3RyaW5nKHBhcnNlRmxvYXQobSgpKS50b0ZpeGVkKHZ8fDYpKSxjKz15P2c6Zy5yZXBsYWNlKC9eMC8sIiIpO2JyZWFrO2Nhc2UiaiI6Yys9SlNPTi5zdHJpbmdpZnkobSgpKTticmVhaztjYXNlIm8iOmMrPSIwIitwYXJzZUludChtKCksMTApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6Yys9bSgpO2JyZWFrO2Nhc2UieCI6Yys9IjB4IitwYXJzZUludChtKCksMTApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmMrPSIweCIrcGFyc2VJbnQobSgpLDEwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTticmVhaztkZWZhdWx0OmMrPXA7YnJlYWt9ZWxzZSBwPT09IiUiP2w9ITA6Yys9cDtyZXR1cm4gY319KSgpfSk7ZnVuY3Rpb24gVDAodCl7cmV0dXJuIGUuZGlzcGxheU5hbWU9dC5kaXNwbGF5TmFtZXx8dC5uYW1lLGU7ZnVuY3Rpb24gZShhLC4uLmkpe2xldCByPWEmJigwLFdvZS5kZWZhdWx0KShhLC4uLmkpO3JldHVybiBuZXcgdChyKX19dmFyIFdvZSxlNSxHb2U9YigoKT0+e1dvZT1VMShVb2UoKSwxKSxlNT1PYmplY3QuYXNzaWduKFQwKEVycm9yKSx7ZXZhbDpUMChFdmFsRXJyb3IpLHJhbmdlOlQwKFJhbmdlRXJyb3IpLHJlZmVyZW5jZTpUMChSZWZlcmVuY2VFcnJvciksc3ludGF4OlQwKFN5bnRheEVycm9yKSx0eXBlOlQwKFR5cGVFcnJvciksdXJpOlQwKFVSSUVycm9yKX0pfSk7ZnVuY3Rpb24gVTModCl7bGV0IGU9W10sYT0tMSxpPUFycmF5LmlzQXJyYXkodCk/dDp0P1t0XTpbInlhbWwiXTtmb3IoOysrYTxpLmxlbmd0aDspZVthXT1SRnQoaVthXSk7cmV0dXJuIGV9ZnVuY3Rpb24gUkZ0KHQpe2xldCBlPXQ7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtpZighZXUuY2FsbChZb2UsZSkpdGhyb3cgZTUoIk1pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AiLGUpO2U9e3R5cGU6ZSxtYXJrZXI6WW9lW2VdfX1lbHNlIGlmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBlNSgiRXhwZWN0ZWQgbWF0dGVyIHRvIGJlIGFuIG9iamVjdCwgbm90IGAlamAiLGUpO2lmKCFldS5jYWxsKGUsInR5cGUiKSl0aHJvdyBlNSgiTWlzc2luZyBgdHlwZWAgaW4gbWF0dGVyIGAlamAiLGUpO2lmKCFldS5jYWxsKGUsImZlbmNlIikmJiFldS5jYWxsKGUsIm1hcmtlciIpKXRocm93IGU1KCJNaXNzaW5nIGBtYXJrZXJgIG9yIGBmZW5jZWAgaW4gbWF0dGVyIGAlamAiLGUpO3JldHVybiBlfXZhciBldSxZb2UsUEw9YigoKT0+e0dvZSgpO2V1PXt9Lmhhc093blByb3BlcnR5LFlvZT17eWFtbDoiLSIsdG9tbDoiKyJ9fSk7ZnVuY3Rpb24gTkwodCl7bGV0IGU9VTModCksYT17fSxpPS0xO2Zvcig7KytpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpXSxzPUlMKHIsIm9wZW4iKS5jaGFyQ29kZUF0KDApLG49QkZ0KHIpLG89YVtzXTtBcnJheS5pc0FycmF5KG8pP28ucHVzaChuKTphW3NdPVtuXX1yZXR1cm57ZmxvdzphfX1mdW5jdGlvbiBCRnQodCl7bGV0IGU9dC5hbnl3aGVyZSxhPXQudHlwZSxpPWErIkZlbmNlIixyPWkrIlNlcXVlbmNlIixzPWErIlZhbHVlIixuPXt0b2tlbml6ZTpwLHBhcnRpYWw6ITB9LG8sZD0wO3JldHVybnt0b2tlbml6ZTpjLGNvbmNyZXRlOiEwfTtmdW5jdGlvbiBjKGwsZixnKXtsZXQgeT10aGlzO3JldHVybiB2O2Z1bmN0aW9uIHYoTil7bGV0IEw9eS5ub3coKTtyZXR1cm4gTC5jb2x1bW49PT0xJiYoTC5saW5lPT09MXx8ZSkmJihvPUlMKHQsIm9wZW4iKSxkPTAsTj09PW8uY2hhckNvZGVBdChkKSk/KGwuZW50ZXIoYSksbC5lbnRlcihpKSxsLmVudGVyKHIpLG0oTikpOmcoTil9ZnVuY3Rpb24gbShOKXtyZXR1cm4gZD09PW8ubGVuZ3RoPyhsLmV4aXQociksUWUoTik/KGwuZW50ZXIoIndoaXRlc3BhY2UiKSx4KE4pKTpNKE4pKTpOPT09by5jaGFyQ29kZUF0KGQrKyk/KGwuY29uc3VtZShOKSxtKTpnKE4pfWZ1bmN0aW9uIHgoTil7cmV0dXJuIFFlKE4pPyhsLmNvbnN1bWUoTikseCk6KGwuZXhpdCgid2hpdGVzcGFjZSIpLE0oTikpfWZ1bmN0aW9uIE0oTil7cmV0dXJuIE9lKE4pPyhsLmV4aXQoaSksbC5lbnRlcigibGluZUVuZGluZyIpLGwuY29uc3VtZShOKSxsLmV4aXQoImxpbmVFbmRpbmciKSxvPUlMKHQsImNsb3NlIiksZD0wLGwuYXR0ZW1wdChuLGssUykpOmcoTil9ZnVuY3Rpb24gUyhOKXtyZXR1cm4gTj09PW51bGx8fE9lKE4pP18oTik6KGwuZW50ZXIocyksRihOKSl9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTj09PW51bGx8fE9lKE4pPyhsLmV4aXQocyksXyhOKSk6KGwuY29uc3VtZShOKSxGKX1mdW5jdGlvbiBfKE4pe3JldHVybiBOPT09bnVsbD9nKE4pOihsLmVudGVyKCJsaW5lRW5kaW5nIiksbC5jb25zdW1lKE4pLGwuZXhpdCgibGluZUVuZGluZyIpLGwuYXR0ZW1wdChuLGssUykpfWZ1bmN0aW9uIGsoTil7cmV0dXJuIGwuZXhpdChhKSxmKE4pfX1mdW5jdGlvbiBwKGwsZixnKXtsZXQgeT0wO3JldHVybiB2O2Z1bmN0aW9uIHYoUyl7cmV0dXJuIFM9PT1vLmNoYXJDb2RlQXQoeSk/KGwuZW50ZXIoaSksbC5lbnRlcihyKSxtKFMpKTpnKFMpfWZ1bmN0aW9uIG0oUyl7cmV0dXJuIHk9PT1vLmxlbmd0aD8obC5leGl0KHIpLFFlKFMpPyhsLmVudGVyKCJ3aGl0ZXNwYWNlIikseChTKSk6TShTKSk6Uz09PW8uY2hhckNvZGVBdCh5KyspPyhsLmNvbnN1bWUoUyksbSk6ZyhTKX1mdW5jdGlvbiB4KFMpe3JldHVybiBRZShTKT8obC5jb25zdW1lKFMpLHgpOihsLmV4aXQoIndoaXRlc3BhY2UiKSxNKFMpKX1mdW5jdGlvbiBNKFMpe3JldHVybiBTPT09bnVsbHx8T2UoUyk/KGwuZXhpdChpKSxmKFMpKTpnKFMpfX19ZnVuY3Rpb24gSUwodCxlKXtyZXR1cm4gdC5tYXJrZXI/Wm9lKHQubWFya2VyLGUpLnJlcGVhdCgzKTpab2UodC5mZW5jZSxlKX1mdW5jdGlvbiBab2UodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dFtlXX12YXIgWG9lPWIoKCk9PntBdCgpO1BMKCl9KTt2YXIgS29lPWIoKCk9Pnt9KTt2YXIgRkw9YigoKT0+e1hvZSgpO0tvZSgpO1BMKCl9KTtmdW5jdGlvbiBSTCh0KXtsZXQgZT1VMyh0KSxhPXt9LGk9e30scj0tMTtmb3IoOysrcjxlLmxlbmd0aDspe2xldCBzPWVbcl07YVtzLnR5cGVdPUhGdChzKSxpW3MudHlwZV09cUZ0LGlbcy50eXBlKyJWYWx1ZSJdPVZGdH1yZXR1cm57ZW50ZXI6YSxleGl0Oml9fWZ1bmN0aW9uIEhGdCh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEpe3RoaXMuZW50ZXIoe3R5cGU6dC50eXBlLHZhbHVlOiIifSxhKSx0aGlzLmJ1ZmZlcigpfX1mdW5jdGlvbiBxRnQodCl7bGV0IGU9dGhpcy5yZXN1bWUoKSxhPXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07InZhbHVlImluIGEsdGhpcy5leGl0KHQpLGEudmFsdWU9ZS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBWRnQodCl7dGhpcy5jb25maWcuZW50ZXIuZGF0YS5jYWxsKHRoaXMsdCksdGhpcy5jb25maWcuZXhpdC5kYXRhLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBCTCh0KXtsZXQgZT1bXSxhPXt9LGk9VTModCkscj0tMTtmb3IoOysrcjxpLmxlbmd0aDspe2xldCBzPWlbcl07YVtzLnR5cGVdPWpGdChzKTtsZXQgbj1PTChzLCJvcGVuIik7ZS5wdXNoKHthdEJyZWFrOiEwLGNoYXJhY3RlcjpuLmNoYXJBdCgwKSxhZnRlcjpxbyhuLmNoYXJBdCgxKSl9KX1yZXR1cm57dW5zYWZlOmUsaGFuZGxlcnM6YX19ZnVuY3Rpb24gakZ0KHQpe2xldCBlPU9MKHQsIm9wZW4iKSxhPU9MKHQsImNsb3NlIik7cmV0dXJuIGk7ZnVuY3Rpb24gaShyKXtyZXR1cm4gZSsoci52YWx1ZT9gCmArci52YWx1ZToiIikrYApgK2F9fWZ1bmN0aW9uIE9MKHQsZSl7cmV0dXJuIHQubWFya2VyP1FvZSh0Lm1hcmtlcixlKS5yZXBlYXQoMyk6UW9lKHQuZmVuY2UsZSl9ZnVuY3Rpb24gUW9lKHQsZSl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnRbZV19dmFyIEpvZT1iKCgpPT57Qm4oKTtGTCgpO3g3KCl9KTt2YXIgZTBlPWIoKCk9PntKb2UoKX0pO2Z1bmN0aW9uIFczKHQpe2xldCBlPXRoaXMsYT10fHxVRnQsaT1lLmRhdGEoKSxyPWkubWljcm9tYXJrRXh0ZW5zaW9uc3x8KGkubWljcm9tYXJrRXh0ZW5zaW9ucz1bXSkscz1pLmZyb21NYXJrZG93bkV4dGVuc2lvbnN8fChpLmZyb21NYXJrZG93bkV4dGVuc2lvbnM9W10pLG49aS50b01hcmtkb3duRXh0ZW5zaW9uc3x8KGkudG9NYXJrZG93bkV4dGVuc2lvbnM9W10pO3IucHVzaChOTChhKSkscy5wdXNoKFJMKGEpKSxuLnB1c2goQkwoYSkpfXZhciBVRnQsdDBlPWIoKCk9PntlMGUoKTtGTCgpO1VGdD0ieWFtbCJ9KTt2YXIgYTBlPWIoKCk9Pnt0MGUoKX0pO3ZhciBITD1iKCgpPT57fSk7dmFyIGkwZSxXRnQsc3UscjBlPWIoKCk9PntITCgpO2kwZT10eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjpnbG9iYWxUaGlzLFdGdD0odCxlKT0+e2xldCBhPShyLHMpPT4odC5zZXQocyxyKSxyKSxpPXI9PntpZih0LmhhcyhyKSlyZXR1cm4gdC5nZXQocik7bGV0W3Msbl09ZVtyXTtzd2l0Y2gocyl7Y2FzZSAwOmNhc2UtMTpyZXR1cm4gYShuLHIpO2Nhc2UgMTp7bGV0IG89YShbXSxyKTtmb3IobGV0IGQgb2YgbilvLnB1c2goaShkKSk7cmV0dXJuIG99Y2FzZSAyOntsZXQgbz1hKHt9LHIpO2ZvcihsZXRbZCxjXW9mIG4pb1tpKGQpXT1pKGMpO3JldHVybiBvfWNhc2UgMzpyZXR1cm4gYShuZXcgRGF0ZShuKSxyKTtjYXNlIDQ6e2xldHtzb3VyY2U6byxmbGFnczpkfT1uO3JldHVybiBhKG5ldyBSZWdFeHAobyxkKSxyKX1jYXNlIDU6e2xldCBvPWEobmV3IE1hcCxyKTtmb3IobGV0W2QsY11vZiBuKW8uc2V0KGkoZCksaShjKSk7cmV0dXJuIG99Y2FzZSA2OntsZXQgbz1hKG5ldyBTZXQscik7Zm9yKGxldCBkIG9mIG4pby5hZGQoaShkKSk7cmV0dXJuIG99Y2FzZSA3OntsZXR7bmFtZTpvLG1lc3NhZ2U6ZH09bjtyZXR1cm4gYShuZXcgaTBlW29dKGQpLHIpfWNhc2UgODpyZXR1cm4gYShCaWdJbnQobikscik7Y2FzZSJCaWdJbnQiOnJldHVybiBhKE9iamVjdChCaWdJbnQobikpLHIpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybiBhKG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcixuKTtjYXNlIkRhdGFWaWV3Ijp7bGV0e2J1ZmZlcjpvfT1uZXcgVWludDhBcnJheShuKTtyZXR1cm4gYShuZXcgRGF0YVZpZXcobyksbil9fXJldHVybiBhKG5ldyBpMGVbc10obikscil9O3JldHVybiBpfSxzdT10PT5XRnQobmV3IE1hcCx0KSgwKX0pO3ZhciBZMyxHRnQsWUZ0LGk1LG51LFpGdCxvdSxzMGU9YigoKT0+e0hMKCk7WTM9IiIse3RvU3RyaW5nOkdGdH09e30se2tleXM6WUZ0fT1PYmplY3QsaTU9dD0+e2xldCBlPXR5cGVvZiB0O2lmKGUhPT0ib2JqZWN0Inx8IXQpcmV0dXJuWzAsZV07bGV0IGE9R0Z0LmNhbGwodCkuc2xpY2UoOCwtMSk7c3dpdGNoKGEpe2Nhc2UiQXJyYXkiOnJldHVyblsxLFkzXTtjYXNlIk9iamVjdCI6cmV0dXJuWzIsWTNdO2Nhc2UiRGF0ZSI6cmV0dXJuWzMsWTNdO2Nhc2UiUmVnRXhwIjpyZXR1cm5bNCxZM107Y2FzZSJNYXAiOnJldHVybls1LFkzXTtjYXNlIlNldCI6cmV0dXJuWzYsWTNdO2Nhc2UiRGF0YVZpZXciOnJldHVyblsxLGFdfXJldHVybiBhLmluY2x1ZGVzKCJBcnJheSIpP1sxLGFdOmEuaW5jbHVkZXMoIkVycm9yIik/WzcsYV06WzIsYV19LG51PShbdCxlXSk9PnQ9PT0wJiYoZT09PSJmdW5jdGlvbiJ8fGU9PT0ic3ltYm9sIiksWkZ0PSh0LGUsYSxpKT0+e2xldCByPShuLG8pPT57bGV0IGQ9aS5wdXNoKG4pLTE7cmV0dXJuIGEuc2V0KG8sZCksZH0scz1uPT57aWYoYS5oYXMobikpcmV0dXJuIGEuZ2V0KG4pO2xldFtvLGRdPWk1KG4pO3N3aXRjaChvKXtjYXNlIDA6e2xldCBwPW47c3dpdGNoKGQpe2Nhc2UiYmlnaW50IjpvPTgscD1uLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOmlmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIHNlcmlhbGl6ZSAiK2QpO3A9bnVsbDticmVhaztjYXNlInVuZGVmaW5lZCI6cmV0dXJuIHIoWy0xXSxuKX1yZXR1cm4gcihbbyxwXSxuKX1jYXNlIDE6e2lmKGQpe2xldCBmPW47cmV0dXJuIGQ9PT0iRGF0YVZpZXciP2Y9bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpOmQ9PT0iQXJyYXlCdWZmZXIiJiYoZj1uZXcgVWludDhBcnJheShuKSkscihbZCxbLi4uZl1dLG4pfWxldCBwPVtdLGw9cihbbyxwXSxuKTtmb3IobGV0IGYgb2YgbilwLnB1c2gocyhmKSk7cmV0dXJuIGx9Y2FzZSAyOntpZihkKXN3aXRjaChkKXtjYXNlIkJpZ0ludCI6cmV0dXJuIHIoW2Qsbi50b1N0cmluZygpXSxuKTtjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6cmV0dXJuIHIoW2Qsbi52YWx1ZU9mKCldLG4pfWlmKGUmJiJ0b0pTT04iaW4gbilyZXR1cm4gcyhuLnRvSlNPTigpKTtsZXQgcD1bXSxsPXIoW28scF0sbik7Zm9yKGxldCBmIG9mIFlGdChuKSkodHx8IW51KGk1KG5bZl0pKSkmJnAucHVzaChbcyhmKSxzKG5bZl0pXSk7cmV0dXJuIGx9Y2FzZSAzOnJldHVybiByKFtvLG4udG9JU09TdHJpbmcoKV0sbik7Y2FzZSA0OntsZXR7c291cmNlOnAsZmxhZ3M6bH09bjtyZXR1cm4gcihbbyx7c291cmNlOnAsZmxhZ3M6bH1dLG4pfWNhc2UgNTp7bGV0IHA9W10sbD1yKFtvLHBdLG4pO2ZvcihsZXRbZixnXW9mIG4pKHR8fCEobnUoaTUoZikpfHxudShpNShnKSkpKSYmcC5wdXNoKFtzKGYpLHMoZyldKTtyZXR1cm4gbH1jYXNlIDY6e2xldCBwPVtdLGw9cihbbyxwXSxuKTtmb3IobGV0IGYgb2YgbikodHx8IW51KGk1KGYpKSkmJnAucHVzaChzKGYpKTtyZXR1cm4gbH19bGV0e21lc3NhZ2U6Y309bjtyZXR1cm4gcihbbyx7bmFtZTpkLG1lc3NhZ2U6Y31dLG4pfTtyZXR1cm4gc30sb3U9KHQse2pzb246ZSxsb3NzeTphfT17fSk9PntsZXQgaT1bXTtyZXR1cm4gWkZ0KCEoZXx8YSksISFlLG5ldyBNYXAsaSkodCksaX19KTt2YXIgR24sbHU9YigoKT0+e3IwZSgpO3MwZSgpO0duPXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiI/KHQsZSk9PmUmJigianNvbiJpbiBlfHwibG9zc3kiaW4gZSk/c3Uob3UodCxlKSk6c3RydWN0dXJlZENsb25lKHQpOih0LGUpPT5zdShvdSh0LGUpKX0pO2Z1bmN0aW9uIG4wZSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEpe2xldCBpPWEmJmEucG9zaXRpb24mJmEucG9zaXRpb25bdF18fHt9O2lmKHR5cGVvZiBpLmxpbmU9PSJudW1iZXIiJiZpLmxpbmU+MCYmdHlwZW9mIGkuY29sdW1uPT0ibnVtYmVyIiYmaS5jb2x1bW4+MClyZXR1cm57bGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1uLG9mZnNldDp0eXBlb2YgaS5vZmZzZXQ9PSJudW1iZXIiJiZpLm9mZnNldD4tMT9pLm9mZnNldDp2b2lkIDB9fX1mdW5jdGlvbiByNSh0KXtsZXQgZT1kdSh0KSxhPWN1KHQpO2lmKGUmJmEpcmV0dXJue3N0YXJ0OmUsZW5kOmF9fXZhciBjdSxkdSxvMGU9YigoKT0+e2N1PW4wZSgiZW5kIiksZHU9bjBlKCJzdGFydCIpfSk7dmFyIHB1PWIoKCk9PntvMGUoKX0pO3ZhciBMMCxodSxVTD1iKCgpPT57TDA9WyJhcmlhRGVzY3JpYmVkQnkiLCJhcmlhTGFiZWwiLCJhcmlhTGFiZWxsZWRCeSJdLGh1PXthbmNlc3RvcnM6e3Rib2R5OlsidGFibGUiXSx0ZDpbInRhYmxlIl0sdGg6WyJ0YWJsZSJdLHRoZWFkOlsidGFibGUiXSx0Zm9vdDpbInRhYmxlIl0sdHI6WyJ0YWJsZSJdfSxhdHRyaWJ1dGVzOnthOlsuLi5MMCwiZGF0YUZvb3Rub3RlQmFja3JlZiIsImRhdGFGb290bm90ZVJlZiIsWyJjbGFzc05hbWUiLCJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwiaHJlZiJdLGJsb2NrcXVvdGU6WyJjaXRlIl0sY29kZTpbWyJjbGFzc05hbWUiLC9ebGFuZ3VhZ2UtLi9dXSxkZWw6WyJjaXRlIl0sZGl2OlsiaXRlbVNjb3BlIiwiaXRlbVR5cGUiXSxkbDpbLi4uTDBdLGgyOltbImNsYXNzTmFtZSIsInNyLW9ubHkiXV0saW1nOlsuLi5MMCwibG9uZ0Rlc2MiLCJzcmMiXSxpbnB1dDpbWyJkaXNhYmxlZCIsITBdLFsidHlwZSIsImNoZWNrYm94Il1dLGluczpbImNpdGUiXSxsaTpbWyJjbGFzc05hbWUiLCJ0YXNrLWxpc3QtaXRlbSJdXSxvbDpbLi4uTDAsWyJjbGFzc05hbWUiLCJjb250YWlucy10YXNrLWxpc3QiXV0scTpbImNpdGUiXSxzZWN0aW9uOlsiZGF0YUZvb3Rub3RlcyIsWyJjbGFzc05hbWUiLCJmb290bm90ZXMiXV0sc291cmNlOlsic3JjU2V0Il0sc3VtbWFyeTpbLi4uTDBdLHRhYmxlOlsuLi5MMF0sdWw6Wy4uLkwwLFsiY2xhc3NOYW1lIiwiY29udGFpbnMtdGFzay1saXN0Il1dLCIqIjpbImFiYnIiLCJhY2NlcHQiLCJhY2NlcHRDaGFyc2V0IiwiYWNjZXNzS2V5IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJheGlzIiwiYm9yZGVyIiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNoYXIiLCJjaGFyT2ZmIiwiY2hhclNldCIsImNoZWNrZWQiLCJjbGVhciIsImNvbFNwYW4iLCJjb2xvciIsImNvbHMiLCJjb21wYWN0IiwiY29vcmRzIiwiZGF0ZVRpbWUiLCJkaXIiLCJlbmNUeXBlIiwiZnJhbWUiLCJoU3BhY2UiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaHJlZkxhbmciLCJodG1sRm9yIiwiaWQiLCJpc01hcCIsIml0ZW1Qcm9wIiwibGFiZWwiLCJsYW5nIiwibWF4TGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtdWx0aXBsZSIsIm5hbWUiLCJub0hyZWYiLCJub1NoYWRlIiwibm9XcmFwIiwib3BlbiIsInByb21wdCIsInJlYWRPbmx5IiwicmV2Iiwicm93U3BhbiIsInJvd3MiLCJydWxlcyIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzcGFuIiwic3RhcnQiLCJzdW1tYXJ5IiwidGFiSW5kZXgiLCJ0aXRsZSIsInVzZU1hcCIsInZBbGlnbiIsInZhbHVlIiwid2lkdGgiXX0sY2xvYmJlcjpbImFyaWFEZXNjcmliZWRCeSIsImFyaWFMYWJlbGxlZEJ5IiwiaWQiLCJuYW1lIl0sY2xvYmJlclByZWZpeDoidXNlci1jb250ZW50LSIscHJvdG9jb2xzOntjaXRlOlsiaHR0cCIsImh0dHBzIl0saHJlZjpbImh0dHAiLCJodHRwcyIsImlyYyIsImlyY3MiLCJtYWlsdG8iLCJ4bXBwIl0sbG9uZ0Rlc2M6WyJodHRwIiwiaHR0cHMiXSxzcmM6WyJodHRwIiwiaHR0cHMiXX0scmVxdWlyZWQ6e2lucHV0OntkaXNhYmxlZDohMCx0eXBlOiJjaGVja2JveCJ9fSxzdHJpcDpbInNjcmlwdCJdLHRhZ05hbWVzOlsiYSIsImIiLCJibG9ja3F1b3RlIiwiYnIiLCJjb2RlIiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaHIiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsaSIsIm9sIiwicCIsInBpY3R1cmUiLCJwcmUiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzb3VyY2UiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRyIiwidHQiLCJ1bCIsInZhciJdfX0pO2Z1bmN0aW9uIFdMKHQsZSl7bGV0IGE9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfSxpPXtzY2hlbWE6ZT97Li4uaHUsLi4uZX06aHUsc3RhY2s6W119LHI9bDBlKGksdCk7cmV0dXJuIHImJihBcnJheS5pc0FycmF5KHIpP3IubGVuZ3RoPT09MT9hPXJbMF06YS5jaGlsZHJlbj1yOmE9ciksYX1mdW5jdGlvbiBsMGUodCxlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2xldCBhPWU7c3dpdGNoKHR5cGVvZiBhLnR5cGU9PSJzdHJpbmciP2EudHlwZToiIil7Y2FzZSJjb21tZW50IjpyZXR1cm4gWEZ0KHQsYSk7Y2FzZSJkb2N0eXBlIjpyZXR1cm4gS0Z0KHQsYSk7Y2FzZSJlbGVtZW50IjpyZXR1cm4gUUZ0KHQsYSk7Y2FzZSJyb290IjpyZXR1cm4gSkZ0KHQsYSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gZU90KHQsYSk7ZGVmYXVsdDp9fX1mdW5jdGlvbiBYRnQodCxlKXtpZih0LnNjaGVtYS5hbGxvd0NvbW1lbnRzKXtsZXQgYT10eXBlb2YgZS52YWx1ZT09InN0cmluZyI/ZS52YWx1ZToiIixpPWEuaW5kZXhPZigiLS0+Iikscz17dHlwZToiY29tbWVudCIsdmFsdWU6aTwwP2E6YS5zbGljZSgwLGkpfTtyZXR1cm4gczUocyxlKSxzfX1mdW5jdGlvbiBLRnQodCxlKXtpZih0LnNjaGVtYS5hbGxvd0RvY3R5cGVzKXtsZXQgYT17dHlwZToiZG9jdHlwZSJ9O3JldHVybiBzNShhLGUpLGF9fWZ1bmN0aW9uIFFGdCh0LGUpe2xldCBhPXR5cGVvZiBlLnRhZ05hbWU9PSJzdHJpbmciP2UudGFnTmFtZToiIjt0LnN0YWNrLnB1c2goYSk7bGV0IGk9YzBlKHQsZS5jaGlsZHJlbikscj10T3QodCxlLnByb3BlcnRpZXMpO3Quc3RhY2sucG9wKCk7bGV0IHM9ITE7aWYoYSYmYSE9PSIqIiYmKCF0LnNjaGVtYS50YWdOYW1lc3x8dC5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMoYSkpJiYocz0hMCx0LnNjaGVtYS5hbmNlc3RvcnMmJlluLmNhbGwodC5zY2hlbWEuYW5jZXN0b3JzLGEpKSl7bGV0IG89dC5zY2hlbWEuYW5jZXN0b3JzW2FdLGQ9LTE7Zm9yKHM9ITE7KytkPG8ubGVuZ3RoOyl0LnN0YWNrLmluY2x1ZGVzKG9bZF0pJiYocz0hMCl9aWYoIXMpcmV0dXJuIHQuc2NoZW1hLnN0cmlwJiYhdC5zY2hlbWEuc3RyaXAuaW5jbHVkZXMoYSk/aTp2b2lkIDA7bGV0IG49e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6YSxwcm9wZXJ0aWVzOnIsY2hpbGRyZW46aX07cmV0dXJuIHM1KG4sZSksbn1mdW5jdGlvbiBKRnQodCxlKXtsZXQgaT17dHlwZToicm9vdCIsY2hpbGRyZW46YzBlKHQsZS5jaGlsZHJlbil9O3JldHVybiBzNShpLGUpLGl9ZnVuY3Rpb24gZU90KHQsZSl7bGV0IGk9e3R5cGU6InRleHQiLHZhbHVlOnR5cGVvZiBlLnZhbHVlPT0ic3RyaW5nIj9lLnZhbHVlOiIifTtyZXR1cm4gczUoaSxlKSxpfWZ1bmN0aW9uIGMwZSh0LGUpe2xldCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCBpPWUscj0tMTtmb3IoOysrcjxpLmxlbmd0aDspe2xldCBzPWwwZSh0LGlbcl0pO3MmJihBcnJheS5pc0FycmF5KHMpP2EucHVzaCguLi5zKTphLnB1c2gocykpfX1yZXR1cm4gYX1mdW5jdGlvbiB0T3QodCxlKXtsZXQgYT10LnN0YWNrW3Quc3RhY2subGVuZ3RoLTFdLGk9dC5zY2hlbWEuYXR0cmlidXRlcyxyPXQuc2NoZW1hLnJlcXVpcmVkLHM9aSYmWW4uY2FsbChpLGEpP2lbYV06dm9pZCAwLG49aSYmWW4uY2FsbChpLCIqIik/aVsiKiJdOnZvaWQgMCxvPWUmJnR5cGVvZiBlPT0ib2JqZWN0Ij9lOnt9LGQ9e30sYztmb3IoYyBpbiBvKWlmKFluLmNhbGwobyxjKSl7bGV0IHA9b1tjXSxsPWQwZSh0LGgwZShzLGMpLGMscCk7bD09bnVsbCYmKGw9ZDBlKHQsaDBlKG4sYyksYyxwKSksbCE9bnVsbCYmKGRbY109bCl9aWYociYmWW4uY2FsbChyLGEpKXtsZXQgcD1yW2FdO2ZvcihjIGluIHApWW4uY2FsbChwLGMpJiYhWW4uY2FsbChkLGMpJiYoZFtjXT1wW2NdKX1yZXR1cm4gZH1mdW5jdGlvbiBkMGUodCxlLGEsaSl7cmV0dXJuIGU/QXJyYXkuaXNBcnJheShpKT9hT3QodCxlLGEsaSk6cDBlKHQsZSxhLGkpOnZvaWQgMH1mdW5jdGlvbiBhT3QodCxlLGEsaSl7bGV0IHI9LTEscz1bXTtmb3IoOysrcjxpLmxlbmd0aDspe2xldCBuPXAwZSh0LGUsYSxpW3JdKTsodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyIpJiZzLnB1c2gobil9cmV0dXJuIHN9ZnVuY3Rpb24gcDBlKHQsZSxhLGkpe2lmKCEodHlwZW9mIGkhPSJib29sZWFuIiYmdHlwZW9mIGkhPSJudW1iZXIiJiZ0eXBlb2YgaSE9InN0cmluZyIpJiZpT3QodCxhLGkpKXtpZih0eXBlb2YgZT09Im9iamVjdCImJmUubGVuZ3RoPjEpe2xldCByPSExLHM9MDtmb3IoOysrczxlLmxlbmd0aDspe2xldCBuPWVbc107aWYobiYmdHlwZW9mIG49PSJvYmplY3QiJiYiZmxhZ3MiaW4gbil7aWYobi50ZXN0KFN0cmluZyhpKSkpe3I9ITA7YnJlYWt9fWVsc2UgaWYobj09PWkpe3I9ITA7YnJlYWt9fWlmKCFyKXJldHVybn1yZXR1cm4gdC5zY2hlbWEuY2xvYmJlciYmdC5zY2hlbWEuY2xvYmJlclByZWZpeCYmdC5zY2hlbWEuY2xvYmJlci5pbmNsdWRlcyhhKT90LnNjaGVtYS5jbG9iYmVyUHJlZml4K2k6aX19ZnVuY3Rpb24gaU90KHQsZSxhKXtsZXQgaT10LnNjaGVtYS5wcm90b2NvbHMmJlluLmNhbGwodC5zY2hlbWEucHJvdG9jb2xzLGUpP3Quc2NoZW1hLnByb3RvY29sc1tlXTp2b2lkIDA7aWYoIWl8fGkubGVuZ3RoPT09MClyZXR1cm4hMDtsZXQgcj1TdHJpbmcoYSkscz1yLmluZGV4T2YoIjoiKSxuPXIuaW5kZXhPZigiPyIpLG89ci5pbmRleE9mKCIjIiksZD1yLmluZGV4T2YoIi8iKTtpZihzPDB8fGQ+LTEmJnM+ZHx8bj4tMSYmcz5ufHxvPi0xJiZzPm8pcmV0dXJuITA7bGV0IGM9LTE7Zm9yKDsrK2M8aS5sZW5ndGg7KXtsZXQgcD1pW2NdO2lmKHM9PT1wLmxlbmd0aCYmci5zbGljZSgwLHAubGVuZ3RoKT09PXApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gczUodCxlKXtsZXQgYT1yNShlKTtlLmRhdGEmJih0LmRhdGE9R24oZS5kYXRhKSksYSYmKHQucG9zaXRpb249YSl9ZnVuY3Rpb24gaDBlKHQsZSl7bGV0IGEsaT0tMTtpZih0KWZvcig7KytpPHQubGVuZ3RoOyl7bGV0IHI9dFtpXSxzPXR5cGVvZiByPT0ic3RyaW5nIj9yOnJbMF07aWYocz09PWUpcmV0dXJuIHI7cz09PSJkYXRhKiImJihhPXIpfWlmKGUubGVuZ3RoPjQmJmUuc2xpY2UoMCw0KS50b0xvd2VyQ2FzZSgpPT09ImRhdGEiKXJldHVybiBhfXZhciBZbix1MGU9YigoKT0+e2x1KCk7cHUoKTtVTCgpO1luPXt9Lmhhc093blByb3BlcnR5fSk7dmFyIGYwZT1iKCgpPT57dTBlKCk7VUwoKX0pO2Z1bmN0aW9uIG0wZSh0LGUpe2xldCBhPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJibG9ja3F1b3RlIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcCh0LmFsbChlKSwhMCl9O3JldHVybiB0LnBhdGNoKGUsYSksdC5hcHBseURhdGEoZSxhKX12YXIgZzBlPWIoKCk9Pnt9KTtmdW5jdGlvbiBiMGUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYnIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsYSksW3QuYXBwbHlEYXRhKGUsYSkse3R5cGU6InRleHQiLHZhbHVlOmAKYH1dfXZhciB2MGU9YigoKT0+e30pO2Z1bmN0aW9uIHkwZSh0LGUpe2xldCBhPWUudmFsdWU/ZS52YWx1ZStgCmA6IiIsaT17fSxyPWUubGFuZz9lLmxhbmcuc3BsaXQoL1xzKy8pOltdO3IubGVuZ3RoPjAmJihpLmNsYXNzTmFtZT1bImxhbmd1YWdlLSIrclswXV0pO2xldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJjb2RlIixwcm9wZXJ0aWVzOmksY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTphfV19O3JldHVybiBlLm1ldGEmJihzLmRhdGE9e21ldGE6ZS5tZXRhfSksdC5wYXRjaChlLHMpLHM9dC5hcHBseURhdGEoZSxzKSxzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwcmUiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W3NdfSx0LnBhdGNoKGUscyksc312YXIgeDBlPWIoKCk9Pnt9KTtmdW5jdGlvbiB3MGUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZGVsIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIE0wZT1iKCgpPT57fSk7ZnVuY3Rpb24gejBlKHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImVtIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIGswZT1iKCgpPT57fSk7ZnVuY3Rpb24gUzBlKHQsZSl7bGV0IGE9dHlwZW9mIHQub3B0aW9ucy5jbG9iYmVyUHJlZml4PT0ic3RyaW5nIj90Lm9wdGlvbnMuY2xvYmJlclByZWZpeDoidXNlci1jb250ZW50LSIsaT1TdHJpbmcoZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpLHI9cWEoaS50b0xvd2VyQ2FzZSgpKSxzPXQuZm9vdG5vdGVPcmRlci5pbmRleE9mKGkpLG4sbz10LmZvb3Rub3RlQ291bnRzLmdldChpKTtvPT09dm9pZCAwPyhvPTAsdC5mb290bm90ZU9yZGVyLnB1c2goaSksbj10LmZvb3Rub3RlT3JkZXIubGVuZ3RoKTpuPXMrMSxvKz0xLHQuZm9vdG5vdGVDb3VudHMuc2V0KGksbyk7bGV0IGQ9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6e2hyZWY6IiMiK2ErImZuLSIrcixpZDphKyJmbnJlZi0iK3IrKG8+MT8iLSIrbzoiIiksZGF0YUZvb3Rub3RlUmVmOiEwLGFyaWFEZXNjcmliZWRCeTpbImZvb3Rub3RlLWxhYmVsIl19LGNoaWxkcmVuOlt7dHlwZToidGV4dCIsdmFsdWU6U3RyaW5nKG4pfV19O3QucGF0Y2goZSxkKTtsZXQgYz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToic3VwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltkXX07cmV0dXJuIHQucGF0Y2goZSxjKSx0LmFwcGx5RGF0YShlLGMpfXZhciBDMGU9YigoKT0+e09yKCl9KTtmdW5jdGlvbiBfMGUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiaCIrZS5kZXB0aCxwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIFQwZT1iKCgpPT57fSk7ZnVuY3Rpb24gTDBlKHQsZSl7aWYodC5vcHRpb25zLmFsbG93RGFuZ2Vyb3VzSHRtbCl7bGV0IGE9e3R5cGU6InJhdyIsdmFsdWU6ZS52YWx1ZX07cmV0dXJuIHQucGF0Y2goZSxhKSx0LmFwcGx5RGF0YShlLGEpfX12YXIgJDBlPWIoKCk9Pnt9KTtmdW5jdGlvbiB1dSh0LGUpe2xldCBhPWUucmVmZXJlbmNlVHlwZSxpPSJdIjtpZihhPT09ImNvbGxhcHNlZCI/aSs9IltdIjphPT09ImZ1bGwiJiYoaSs9IlsiKyhlLmxhYmVsfHxlLmlkZW50aWZpZXIpKyJdIiksZS50eXBlPT09ImltYWdlUmVmZXJlbmNlIilyZXR1cm5be3R5cGU6InRleHQiLHZhbHVlOiIhWyIrZS5hbHQraX1dO2xldCByPXQuYWxsKGUpLHM9clswXTtzJiZzLnR5cGU9PT0idGV4dCI/cy52YWx1ZT0iWyIrcy52YWx1ZTpyLnVuc2hpZnQoe3R5cGU6InRleHQiLHZhbHVlOiJbIn0pO2xldCBuPXJbci5sZW5ndGgtMV07cmV0dXJuIG4mJm4udHlwZT09PSJ0ZXh0Ij9uLnZhbHVlKz1pOnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6aX0pLHJ9dmFyIEdMPWIoKCk9Pnt9KTtmdW5jdGlvbiBBMGUodCxlKXtsZXQgYT1TdHJpbmcoZS5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpLGk9dC5kZWZpbml0aW9uQnlJZC5nZXQoYSk7aWYoIWkpcmV0dXJuIHV1KHQsZSk7bGV0IHI9e3NyYzpxYShpLnVybHx8IiIpLGFsdDplLmFsdH07aS50aXRsZSE9PW51bGwmJmkudGl0bGUhPT12b2lkIDAmJihyLnRpdGxlPWkudGl0bGUpO2xldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJpbWciLHByb3BlcnRpZXM6cixjaGlsZHJlbjpbXX07cmV0dXJuIHQucGF0Y2goZSxzKSx0LmFwcGx5RGF0YShlLHMpfXZhciBEMGU9YigoKT0+e09yKCk7R0woKX0pO2Z1bmN0aW9uIEUwZSh0LGUpe2xldCBhPXtzcmM6cWEoZS51cmwpfTtlLmFsdCE9PW51bGwmJmUuYWx0IT09dm9pZCAwJiYoYS5hbHQ9ZS5hbHQpLGUudGl0bGUhPT1udWxsJiZlLnRpdGxlIT09dm9pZCAwJiYoYS50aXRsZT1lLnRpdGxlKTtsZXQgaT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiaW1nIixwcm9wZXJ0aWVzOmEsY2hpbGRyZW46W119O3JldHVybiB0LnBhdGNoKGUsaSksdC5hcHBseURhdGEoZSxpKX12YXIgUDBlPWIoKCk9PntPcigpfSk7ZnVuY3Rpb24gSTBlKHQsZSl7bGV0IGE9e3R5cGU6InRleHQiLHZhbHVlOmUudmFsdWUucmVwbGFjZSgvXHI/XG58XHIvZywiICIpfTt0LnBhdGNoKGUsYSk7bGV0IGk9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImNvZGUiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W2FdfTtyZXR1cm4gdC5wYXRjaChlLGkpLHQuYXBwbHlEYXRhKGUsaSl9dmFyIE4wZT1iKCgpPT57fSk7ZnVuY3Rpb24gRjBlKHQsZSl7bGV0IGE9U3RyaW5nKGUuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKSxpPXQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGEpO2lmKCFpKXJldHVybiB1dSh0LGUpO2xldCByPXtocmVmOnFhKGkudXJsfHwiIil9O2kudGl0bGUhPT1udWxsJiZpLnRpdGxlIT09dm9pZCAwJiYoci50aXRsZT1pLnRpdGxlKTtsZXQgcz17dHlwZToiZWxlbWVudCIsdGFnTmFtZToiYSIscHJvcGVydGllczpyLGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLHMpLHQuYXBwbHlEYXRhKGUscyl9dmFyIE8wZT1iKCgpPT57T3IoKTtHTCgpfSk7ZnVuY3Rpb24gUjBlKHQsZSl7bGV0IGE9e2hyZWY6cWEoZS51cmwpfTtlLnRpdGxlIT09bnVsbCYmZS50aXRsZSE9PXZvaWQgMCYmKGEudGl0bGU9ZS50aXRsZSk7bGV0IGk9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6YSxjaGlsZHJlbjp0LmFsbChlKX07cmV0dXJuIHQucGF0Y2goZSxpKSx0LmFwcGx5RGF0YShlLGkpfXZhciBCMGU9YigoKT0+e09yKCl9KTtmdW5jdGlvbiBxMGUodCxlLGEpe2xldCBpPXQuYWxsKGUpLHI9YT9yT3QoYSk6SDBlKGUpLHM9e30sbj1bXTtpZih0eXBlb2YgZS5jaGVja2VkPT0iYm9vbGVhbiIpe2xldCBwPWlbMF0sbDtwJiZwLnR5cGU9PT0iZWxlbWVudCImJnAudGFnTmFtZT09PSJwIj9sPXA6KGw9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W119LGkudW5zaGlmdChsKSksbC5jaGlsZHJlbi5sZW5ndGg+MCYmbC5jaGlsZHJlbi51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix2YWx1ZToiICJ9KSxsLmNoaWxkcmVuLnVuc2hpZnQoe3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImlucHV0Iixwcm9wZXJ0aWVzOnt0eXBlOiJjaGVja2JveCIsY2hlY2tlZDplLmNoZWNrZWQsZGlzYWJsZWQ6ITB9LGNoaWxkcmVuOltdfSkscy5jbGFzc05hbWU9WyJ0YXNrLWxpc3QtaXRlbSJdfWxldCBvPS0xO2Zvcig7KytvPGkubGVuZ3RoOyl7bGV0IHA9aVtvXTsocnx8byE9PTB8fHAudHlwZSE9PSJlbGVtZW50Inx8cC50YWdOYW1lIT09InAiKSYmbi5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9KSxwLnR5cGU9PT0iZWxlbWVudCImJnAudGFnTmFtZT09PSJwIiYmIXI/bi5wdXNoKC4uLnAuY2hpbGRyZW4pOm4ucHVzaChwKX1sZXQgZD1pW2kubGVuZ3RoLTFdO2QmJihyfHxkLnR5cGUhPT0iZWxlbWVudCJ8fGQudGFnTmFtZSE9PSJwIikmJm4ucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSk7bGV0IGM9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImxpIixwcm9wZXJ0aWVzOnMsY2hpbGRyZW46bn07cmV0dXJuIHQucGF0Y2goZSxjKSx0LmFwcGx5RGF0YShlLGMpfWZ1bmN0aW9uIHJPdCh0KXtsZXQgZT0hMTtpZih0LnR5cGU9PT0ibGlzdCIpe2U9dC5zcHJlYWR8fCExO2xldCBhPXQuY2hpbGRyZW4saT0tMTtmb3IoOyFlJiYrK2k8YS5sZW5ndGg7KWU9SDBlKGFbaV0pfXJldHVybiBlfWZ1bmN0aW9uIEgwZSh0KXtsZXQgZT10LnNwcmVhZDtyZXR1cm4gZT8/dC5jaGlsZHJlbi5sZW5ndGg+MX12YXIgVjBlPWIoKCk9Pnt9KTtmdW5jdGlvbiBqMGUodCxlKXtsZXQgYT17fSxpPXQuYWxsKGUpLHI9LTE7Zm9yKHR5cGVvZiBlLnN0YXJ0PT0ibnVtYmVyIiYmZS5zdGFydCE9PTEmJihhLnN0YXJ0PWUuc3RhcnQpOysrcjxpLmxlbmd0aDspe2xldCBuPWlbcl07aWYobi50eXBlPT09ImVsZW1lbnQiJiZuLnRhZ05hbWU9PT0ibGkiJiZuLnByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkobi5wcm9wZXJ0aWVzLmNsYXNzTmFtZSkmJm4ucHJvcGVydGllcy5jbGFzc05hbWUuaW5jbHVkZXMoInRhc2stbGlzdC1pdGVtIikpe2EuY2xhc3NOYW1lPVsiY29udGFpbnMtdGFzay1saXN0Il07YnJlYWt9fWxldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOmUub3JkZXJlZD8ib2wiOiJ1bCIscHJvcGVydGllczphLGNoaWxkcmVuOnQud3JhcChpLCEwKX07cmV0dXJuIHQucGF0Y2goZSxzKSx0LmFwcGx5RGF0YShlLHMpfXZhciBVMGU9YigoKT0+e30pO2Z1bmN0aW9uIFcwZSh0LGUpe2xldCBhPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJwIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIEcwZT1iKCgpPT57fSk7ZnVuY3Rpb24gWTBlKHQsZSl7bGV0IGE9e3R5cGU6InJvb3QiLGNoaWxkcmVuOnQud3JhcCh0LmFsbChlKSl9O3JldHVybiB0LnBhdGNoKGUsYSksdC5hcHBseURhdGEoZSxhKX12YXIgWjBlPWIoKCk9Pnt9KTtmdW5jdGlvbiBYMGUodCxlKXtsZXQgYT17dHlwZToiZWxlbWVudCIsdGFnTmFtZToic3Ryb25nIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIEswZT1iKCgpPT57fSk7ZnVuY3Rpb24gUTBlKHQsZSl7bGV0IGE9dC5hbGwoZSksaT1hLnNoaWZ0KCkscj1bXTtpZihpKXtsZXQgbj17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidGhlYWQiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKFtpXSwhMCl9O3QucGF0Y2goZS5jaGlsZHJlblswXSxuKSxyLnB1c2gobil9aWYoYS5sZW5ndGg+MCl7bGV0IG49e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRib2R5Iixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQud3JhcChhLCEwKX0sbz1kdShlLmNoaWxkcmVuWzFdKSxkPWN1KGUuY2hpbGRyZW5bZS5jaGlsZHJlbi5sZW5ndGgtMV0pO28mJmQmJihuLnBvc2l0aW9uPXtzdGFydDpvLGVuZDpkfSksci5wdXNoKG4pfWxldCBzPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJ0YWJsZSIscHJvcGVydGllczp7fSxjaGlsZHJlbjp0LndyYXAociwhMCl9O3JldHVybiB0LnBhdGNoKGUscyksdC5hcHBseURhdGEoZSxzKX12YXIgSjBlPWIoKCk9PntwdSgpfSk7ZnVuY3Rpb24gZTRlKHQsZSxhKXtsZXQgaT1hP2EuY2hpbGRyZW46dm9pZCAwLHM9KGk/aS5pbmRleE9mKGUpOjEpPT09MD8idGgiOiJ0ZCIsbj1hJiZhLnR5cGU9PT0idGFibGUiP2EuYWxpZ246dm9pZCAwLG89bj9uLmxlbmd0aDplLmNoaWxkcmVuLmxlbmd0aCxkPS0xLGM9W107Zm9yKDsrK2Q8bzspe2xldCBsPWUuY2hpbGRyZW5bZF0sZj17fSxnPW4/bltkXTp2b2lkIDA7ZyYmKGYuYWxpZ249Zyk7bGV0IHk9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6cyxwcm9wZXJ0aWVzOmYsY2hpbGRyZW46W119O2wmJih5LmNoaWxkcmVuPXQuYWxsKGwpLHQucGF0Y2gobCx5KSx5PXQuYXBwbHlEYXRhKGwseSkpLGMucHVzaCh5KX1sZXQgcD17dHlwZToiZWxlbWVudCIsdGFnTmFtZToidHIiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKGMsITApfTtyZXR1cm4gdC5wYXRjaChlLHApLHQuYXBwbHlEYXRhKGUscCl9dmFyIHQ0ZT1iKCgpPT57fSk7ZnVuY3Rpb24gYTRlKHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InRkIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIGk0ZT1iKCgpPT57fSk7ZnVuY3Rpb24gczRlKHQpe2xldCBlPVN0cmluZyh0KSxhPS9ccj9cbnxcci9nLGk9YS5leGVjKGUpLHI9MCxzPVtdO2Zvcig7aTspcy5wdXNoKHI0ZShlLnNsaWNlKHIsaS5pbmRleCkscj4wLCEwKSxpWzBdKSxyPWkuaW5kZXgraVswXS5sZW5ndGgsaT1hLmV4ZWMoZSk7cmV0dXJuIHMucHVzaChyNGUoZS5zbGljZShyKSxyPjAsITEpKSxzLmpvaW4oIiIpfWZ1bmN0aW9uIHI0ZSh0LGUsYSl7bGV0IGk9MCxyPXQubGVuZ3RoO2lmKGUpe2xldCBzPXQuY29kZVBvaW50QXQoaSk7Zm9yKDtzPT09OXx8cz09PTMyOylpKysscz10LmNvZGVQb2ludEF0KGkpfWlmKGEpe2xldCBzPXQuY29kZVBvaW50QXQoci0xKTtmb3IoO3M9PT05fHxzPT09MzI7KXItLSxzPXQuY29kZVBvaW50QXQoci0xKX1yZXR1cm4gcj5pP3Quc2xpY2UoaSxyKToiIn12YXIgZ08xLGJPMSxuNGU9YigoKT0+e2dPMT05LGJPMT0zMn0pO2Z1bmN0aW9uIG80ZSh0LGUpe2xldCBhPXt0eXBlOiJ0ZXh0Iix2YWx1ZTpzNGUoU3RyaW5nKGUudmFsdWUpKX07cmV0dXJuIHQucGF0Y2goZSxhKSx0LmFwcGx5RGF0YShlLGEpfXZhciBsNGU9YigoKT0+e240ZSgpfSk7ZnVuY3Rpb24gYzRlKHQsZSl7bGV0IGE9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImhyIixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOltdfTtyZXR1cm4gdC5wYXRjaChlLGEpLHQuYXBwbHlEYXRhKGUsYSl9dmFyIGQ0ZT1iKCgpPT57fSk7ZnVuY3Rpb24gZnUoKXt9dmFyIFlMLFpMPWIoKCk9PntnMGUoKTt2MGUoKTt4MGUoKTtNMGUoKTtrMGUoKTtDMGUoKTtUMGUoKTskMGUoKTtEMGUoKTtQMGUoKTtOMGUoKTtPMGUoKTtCMGUoKTtWMGUoKTtVMGUoKTtHMGUoKTtaMGUoKTtLMGUoKTtKMGUoKTt0NGUoKTtpNGUoKTtsNGUoKTtkNGUoKTtZTD17YmxvY2txdW90ZTptMGUsYnJlYWs6YjBlLGNvZGU6eTBlLGRlbGV0ZTp3MGUsZW1waGFzaXM6ejBlLGZvb3Rub3RlUmVmZXJlbmNlOlMwZSxoZWFkaW5nOl8wZSxodG1sOkwwZSxpbWFnZVJlZmVyZW5jZTpBMGUsaW1hZ2U6RTBlLGlubGluZUNvZGU6STBlLGxpbmtSZWZlcmVuY2U6RjBlLGxpbms6UjBlLGxpc3RJdGVtOnEwZSxsaXN0OmowZSxwYXJhZ3JhcGg6VzBlLHJvb3Q6WTBlLHN0cm9uZzpYMGUsdGFibGU6UTBlLHRhYmxlQ2VsbDphNGUsdGFibGVSb3c6ZTRlLHRleHQ6bzRlLHRoZW1hdGljQnJlYWs6YzRlLHRvbWw6ZnUseWFtbDpmdSxkZWZpbml0aW9uOmZ1LGZvb3Rub3RlRGVmaW5pdGlvbjpmdX19KTtmdW5jdGlvbiBwNGUodCxlKXtsZXQgYT1be3R5cGU6InRleHQiLHZhbHVlOiJcdTIxQTkifV07cmV0dXJuIGU+MSYmYS5wdXNoKHt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOiJzdXAiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46W3t0eXBlOiJ0ZXh0Iix2YWx1ZTpTdHJpbmcoZSl9XX0pLGF9ZnVuY3Rpb24gaDRlKHQsZSl7cmV0dXJuIkJhY2sgdG8gcmVmZXJlbmNlICIrKHQrMSkrKGU+MT8iLSIrZToiIil9ZnVuY3Rpb24gdTRlKHQpe2xldCBlPXR5cGVvZiB0Lm9wdGlvbnMuY2xvYmJlclByZWZpeD09InN0cmluZyI/dC5vcHRpb25zLmNsb2JiZXJQcmVmaXg6InVzZXItY29udGVudC0iLGE9dC5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnR8fHA0ZSxpPXQub3B0aW9ucy5mb290bm90ZUJhY2tMYWJlbHx8aDRlLHI9dC5vcHRpb25zLmZvb3Rub3RlTGFiZWx8fCJGb290bm90ZXMiLHM9dC5vcHRpb25zLmZvb3Rub3RlTGFiZWxUYWdOYW1lfHwiaDIiLG49dC5vcHRpb25zLmZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzfHx7Y2xhc3NOYW1lOlsic3Itb25seSJdfSxvPVtdLGQ9LTE7Zm9yKDsrK2Q8dC5mb290bm90ZU9yZGVyLmxlbmd0aDspe2xldCBjPXQuZm9vdG5vdGVCeUlkLmdldCh0LmZvb3Rub3RlT3JkZXJbZF0pO2lmKCFjKWNvbnRpbnVlO2xldCBwPXQuYWxsKGMpLGw9U3RyaW5nKGMuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKSxmPXFhKGwudG9Mb3dlckNhc2UoKSksZz0wLHk9W10sdj10LmZvb3Rub3RlQ291bnRzLmdldChsKTtmb3IoO3YhPT12b2lkIDAmJisrZzw9djspe3kubGVuZ3RoPjAmJnkucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6IiAifSk7bGV0IE09dHlwZW9mIGE9PSJzdHJpbmciP2E6YShkLGcpO3R5cGVvZiBNPT0ic3RyaW5nIiYmKE09e3R5cGU6InRleHQiLHZhbHVlOk19KSx5LnB1c2goe3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImEiLHByb3BlcnRpZXM6e2hyZWY6IiMiK2UrImZucmVmLSIrZisoZz4xPyItIitnOiIiKSxkYXRhRm9vdG5vdGVCYWNrcmVmOiIiLGFyaWFMYWJlbDp0eXBlb2YgaT09InN0cmluZyI/aTppKGQsZyksY2xhc3NOYW1lOlsiZGF0YS1mb290bm90ZS1iYWNrcmVmIl19LGNoaWxkcmVuOkFycmF5LmlzQXJyYXkoTSk/TTpbTV19KX1sZXQgbT1wW3AubGVuZ3RoLTFdO2lmKG0mJm0udHlwZT09PSJlbGVtZW50IiYmbS50YWdOYW1lPT09InAiKXtsZXQgTT1tLmNoaWxkcmVuW20uY2hpbGRyZW4ubGVuZ3RoLTFdO00mJk0udHlwZT09PSJ0ZXh0Ij9NLnZhbHVlKz0iICI6bS5jaGlsZHJlbi5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZToiICJ9KSxtLmNoaWxkcmVuLnB1c2goLi4ueSl9ZWxzZSBwLnB1c2goLi4ueSk7bGV0IHg9e3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6ImxpIixwcm9wZXJ0aWVzOntpZDplKyJmbi0iK2Z9LGNoaWxkcmVuOnQud3JhcChwLCEwKX07dC5wYXRjaChjLHgpLG8ucHVzaCh4KX1pZihvLmxlbmd0aCE9PTApcmV0dXJue3R5cGU6ImVsZW1lbnQiLHRhZ05hbWU6InNlY3Rpb24iLHByb3BlcnRpZXM6e2RhdGFGb290bm90ZXM6ITAsY2xhc3NOYW1lOlsiZm9vdG5vdGVzIl19LGNoaWxkcmVuOlt7dHlwZToiZWxlbWVudCIsdGFnTmFtZTpzLHByb3BlcnRpZXM6ey4uLkduKG4pLGlkOiJmb290bm90ZS1sYWJlbCJ9LGNoaWxkcmVuOlt7dHlwZToidGV4dCIsdmFsdWU6cn1dfSx7dHlwZToidGV4dCIsdmFsdWU6YApgfSx7dHlwZToiZWxlbWVudCIsdGFnTmFtZToib2wiLHByb3BlcnRpZXM6e30sY2hpbGRyZW46dC53cmFwKG8sITApfSx7dHlwZToidGV4dCIsdmFsdWU6YApgfV19fXZhciBYTD1iKCgpPT57bHUoKTtPcigpfSk7ZnVuY3Rpb24gbTRlKHQsZSl7bGV0IGE9ZXx8c090LGk9bmV3IE1hcCxyPW5ldyBNYXAscz1uZXcgTWFwLG49ey4uLllMLC4uLmEuaGFuZGxlcnN9LG89e2FsbDpjLGFwcGx5RGF0YTpvT3QsZGVmaW5pdGlvbkJ5SWQ6aSxmb290bm90ZUJ5SWQ6cixmb290bm90ZUNvdW50czpzLGZvb3Rub3RlT3JkZXI6W10saGFuZGxlcnM6bixvbmU6ZCxvcHRpb25zOmEscGF0Y2g6bk90LHdyYXA6Y090fTtyZXR1cm4gVjYodCxmdW5jdGlvbihwKXtpZihwLnR5cGU9PT0iZGVmaW5pdGlvbiJ8fHAudHlwZT09PSJmb290bm90ZURlZmluaXRpb24iKXtsZXQgbD1wLnR5cGU9PT0iZGVmaW5pdGlvbiI/aTpyLGY9U3RyaW5nKHAuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTtsLmhhcyhmKXx8bC5zZXQoZixwKX19KSxvO2Z1bmN0aW9uIGQocCxsKXtsZXQgZj1wLnR5cGUsZz1vLmhhbmRsZXJzW2ZdO2lmKEtMLmNhbGwoby5oYW5kbGVycyxmKSYmZylyZXR1cm4gZyhvLHAsbCk7aWYoby5vcHRpb25zLnBhc3NUaHJvdWdoJiZvLm9wdGlvbnMucGFzc1Rocm91Z2guaW5jbHVkZXMoZikpe2lmKCJjaGlsZHJlbiJpbiBwKXtsZXR7Y2hpbGRyZW46diwuLi5tfT1wLHg9R24obSk7cmV0dXJuIHguY2hpbGRyZW49by5hbGwocCkseH1yZXR1cm4gR24ocCl9cmV0dXJuKG8ub3B0aW9ucy51bmtub3duSGFuZGxlcnx8bE90KShvLHAsbCl9ZnVuY3Rpb24gYyhwKXtsZXQgbD1bXTtpZigiY2hpbGRyZW4iaW4gcCl7bGV0IGY9cC5jaGlsZHJlbixnPS0xO2Zvcig7KytnPGYubGVuZ3RoOyl7bGV0IHk9by5vbmUoZltnXSxwKTtpZih5KXtpZihnJiZmW2ctMV0udHlwZT09PSJicmVhayImJighQXJyYXkuaXNBcnJheSh5KSYmeS50eXBlPT09InRleHQiJiYoeS52YWx1ZT1mNGUoeS52YWx1ZSkpLCFBcnJheS5pc0FycmF5KHkpJiZ5LnR5cGU9PT0iZWxlbWVudCIpKXtsZXQgdj15LmNoaWxkcmVuWzBdO3YmJnYudHlwZT09PSJ0ZXh0IiYmKHYudmFsdWU9ZjRlKHYudmFsdWUpKX1BcnJheS5pc0FycmF5KHkpP2wucHVzaCguLi55KTpsLnB1c2goeSl9fX1yZXR1cm4gbH19ZnVuY3Rpb24gbk90KHQsZSl7dC5wb3NpdGlvbiYmKGUucG9zaXRpb249cjUodCkpfWZ1bmN0aW9uIG9PdCh0LGUpe2xldCBhPWU7aWYodCYmdC5kYXRhKXtsZXQgaT10LmRhdGEuaE5hbWUscj10LmRhdGEuaENoaWxkcmVuLHM9dC5kYXRhLmhQcm9wZXJ0aWVzO2lmKHR5cGVvZiBpPT0ic3RyaW5nIilpZihhLnR5cGU9PT0iZWxlbWVudCIpYS50YWdOYW1lPWk7ZWxzZXtsZXQgbj0iY2hpbGRyZW4iaW4gYT9hLmNoaWxkcmVuOlthXTthPXt0eXBlOiJlbGVtZW50Iix0YWdOYW1lOmkscHJvcGVydGllczp7fSxjaGlsZHJlbjpufX1hLnR5cGU9PT0iZWxlbWVudCImJnMmJk9iamVjdC5hc3NpZ24oYS5wcm9wZXJ0aWVzLEduKHMpKSwiY2hpbGRyZW4iaW4gYSYmYS5jaGlsZHJlbiYmciE9PW51bGwmJnIhPT12b2lkIDAmJihhLmNoaWxkcmVuPXIpfXJldHVybiBhfWZ1bmN0aW9uIGxPdCh0LGUpe2xldCBhPWUuZGF0YXx8e30saT0idmFsdWUiaW4gZSYmIShLTC5jYWxsKGEsImhQcm9wZXJ0aWVzIil8fEtMLmNhbGwoYSwiaENoaWxkcmVuIikpP3t0eXBlOiJ0ZXh0Iix2YWx1ZTplLnZhbHVlfTp7dHlwZToiZWxlbWVudCIsdGFnTmFtZToiZGl2Iixwcm9wZXJ0aWVzOnt9LGNoaWxkcmVuOnQuYWxsKGUpfTtyZXR1cm4gdC5wYXRjaChlLGkpLHQuYXBwbHlEYXRhKGUsaSl9ZnVuY3Rpb24gY090KHQsZSl7bGV0IGE9W10saT0tMTtmb3IoZSYmYS5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpgCmB9KTsrK2k8dC5sZW5ndGg7KWkmJmEucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6YApgfSksYS5wdXNoKHRbaV0pO3JldHVybiBlJiZ0Lmxlbmd0aD4wJiZhLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0pLGF9ZnVuY3Rpb24gZjRlKHQpe2xldCBlPTAsYT10LmNoYXJDb2RlQXQoZSk7Zm9yKDthPT09OXx8YT09PTMyOyllKyssYT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIHQuc2xpY2UoZSl9dmFyIEtMLHNPdCxnNGU9YigoKT0+e2x1KCk7TVQoKTtwdSgpO1pMKCk7S0w9e30uaGFzT3duUHJvcGVydHksc090PXt9fSk7ZnVuY3Rpb24gUUwodCxlKXtsZXQgYT1tNGUodCxlKSxpPWEub25lKHQsdm9pZCAwKSxyPXU0ZShhKSxzPUFycmF5LmlzQXJyYXkoaSk/e3R5cGU6InJvb3QiLGNoaWxkcmVuOml9Oml8fHt0eXBlOiJyb290IixjaGlsZHJlbjpbXX07cmV0dXJuIHImJigiY2hpbGRyZW4iaW4gcyxzLmNoaWxkcmVuLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOmAKYH0scikpLHN9dmFyIGI0ZT1iKCgpPT57Qm4oKTtYTCgpO2c0ZSgpfSk7dmFyIHY0ZT1iKCgpPT57WkwoKTtiNGUoKTtYTCgpfSk7dmFyIHk0ZSx4NGU9YigoKT0+e3k0ZT1bImFyZWEiLCJiYXNlIiwiYmFzZWZvbnQiLCJiZ3NvdW5kIiwiYnIiLCJjb2wiLCJjb21tYW5kIiwiZW1iZWQiLCJmcmFtZSIsImhyIiwiaW1hZ2UiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdfSk7dmFyIFNzLEpMPWIoKCk9PntTcz1jbGFzc3tjb25zdHJ1Y3RvcihlLGEsaSl7dGhpcy5ub3JtYWw9YSx0aGlzLnByb3BlcnR5PWUsaSYmKHRoaXMuc3BhY2U9aSl9fTtTcy5wcm90b3R5cGUubm9ybWFsPXt9LFNzLnByb3RvdHlwZS5wcm9wZXJ0eT17fSxTcy5wcm90b3R5cGUuc3BhY2U9dm9pZCAwfSk7ZnVuY3Rpb24gZSQodCxlKXtsZXQgYT17fSxpPXt9O2ZvcihsZXQgciBvZiB0KU9iamVjdC5hc3NpZ24oYSxyLnByb3BlcnR5KSxPYmplY3QuYXNzaWduKGksci5ub3JtYWwpO3JldHVybiBuZXcgU3MoYSxpLGUpfXZhciB3NGU9YigoKT0+e0pMKCl9KTtmdW5jdGlvbiBaMyh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfXZhciBtdT1iKCgpPT57fSk7dmFyIG0yLHQkPWIoKCk9PnttMj1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuYXR0cmlidXRlPWEsdGhpcy5wcm9wZXJ0eT1lfX07bTIucHJvdG90eXBlLmF0dHJpYnV0ZT0iIixtMi5wcm90b3R5cGUuYm9vbGVhbmlzaD0hMSxtMi5wcm90b3R5cGUuYm9vbGVhbj0hMSxtMi5wcm90b3R5cGUuY29tbWFPclNwYWNlU2VwYXJhdGVkPSExLG0yLnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZD0hMSxtMi5wcm90b3R5cGUuZGVmaW5lZD0hMSxtMi5wcm90b3R5cGUubXVzdFVzZVByb3BlcnR5PSExLG0yLnByb3RvdHlwZS5udW1iZXI9ITEsbTIucHJvdG90eXBlLm92ZXJsb2FkZWRCb29sZWFuPSExLG0yLnByb3RvdHlwZS5wcm9wZXJ0eT0iIixtMi5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQ9ITEsbTIucHJvdG90eXBlLnNwYWNlPXZvaWQgMH0pO3ZhciBuNT17fTtXZShuNSx7Ym9vbGVhbjooKT0+bXQsYm9vbGVhbmlzaDooKT0+TjEsY29tbWFPclNwYWNlU2VwYXJhdGVkOigpPT4kYSxjb21tYVNlcGFyYXRlZDooKT0+Wm4sbnVtYmVyOigpPT5FZSxvdmVybG9hZGVkQm9vbGVhbjooKT0+Z3Usc3BhY2VTZXBhcmF0ZWQ6KCk9Pm8xfSk7ZnVuY3Rpb24gJDAoKXtyZXR1cm4gMioqKytkT3R9dmFyIGRPdCxtdCxOMSxndSxFZSxvMSxabiwkYSxvNT1iKCgpPT57ZE90PTAsbXQ9JDAoKSxOMT0kMCgpLGd1PSQwKCksRWU9JDAoKSxvMT0kMCgpLFpuPSQwKCksJGE9JDAoKX0pO2Z1bmN0aW9uIE00ZSh0LGUsYSl7YSYmKHRbZV09YSl9dmFyIGEkLEEwLGkkPWIoKCk9Pnt0JCgpO281KCk7YSQ9T2JqZWN0LmtleXMobjUpLEEwPWNsYXNzIGV4dGVuZHMgbTJ7Y29uc3RydWN0b3IoZSxhLGkscil7bGV0IHM9LTE7aWYoc3VwZXIoZSxhKSxNNGUodGhpcywic3BhY2UiLHIpLHR5cGVvZiBpPT0ibnVtYmVyIilmb3IoOysrczxhJC5sZW5ndGg7KXtsZXQgbj1hJFtzXTtNNGUodGhpcyxhJFtzXSwoaSZuNVtuXSk9PT1uNVtuXSl9fX07QTAucHJvdG90eXBlLmRlZmluZWQ9ITB9KTtmdW5jdGlvbiBwaSh0KXtsZXQgZT17fSxhPXt9O2ZvcihsZXRbaSxyXW9mIE9iamVjdC5lbnRyaWVzKHQucHJvcGVydGllcykpe2xldCBzPW5ldyBBMChpLHQudHJhbnNmb3JtKHQuYXR0cmlidXRlc3x8e30saSkscix0LnNwYWNlKTt0Lm11c3RVc2VQcm9wZXJ0eSYmdC5tdXN0VXNlUHJvcGVydHkuaW5jbHVkZXMoaSkmJihzLm11c3RVc2VQcm9wZXJ0eT0hMCksZVtpXT1zLGFbWjMoaSldPWksYVtaMyhzLmF0dHJpYnV0ZSldPWl9cmV0dXJuIG5ldyBTcyhlLGEsdC5zcGFjZSl9dmFyIEQwPWIoKCk9PnttdSgpO2kkKCk7SkwoKX0pO3ZhciByJCx6NGU9YigoKT0+e0QwKCk7bzUoKTtyJD1waSh7cHJvcGVydGllczp7YXJpYUFjdGl2ZURlc2NlbmRhbnQ6bnVsbCxhcmlhQXRvbWljOk4xLGFyaWFBdXRvQ29tcGxldGU6bnVsbCxhcmlhQnVzeTpOMSxhcmlhQ2hlY2tlZDpOMSxhcmlhQ29sQ291bnQ6RWUsYXJpYUNvbEluZGV4OkVlLGFyaWFDb2xTcGFuOkVlLGFyaWFDb250cm9sczpvMSxhcmlhQ3VycmVudDpudWxsLGFyaWFEZXNjcmliZWRCeTpvMSxhcmlhRGV0YWlsczpudWxsLGFyaWFEaXNhYmxlZDpOMSxhcmlhRHJvcEVmZmVjdDpvMSxhcmlhRXJyb3JNZXNzYWdlOm51bGwsYXJpYUV4cGFuZGVkOk4xLGFyaWFGbG93VG86bzEsYXJpYUdyYWJiZWQ6TjEsYXJpYUhhc1BvcHVwOm51bGwsYXJpYUhpZGRlbjpOMSxhcmlhSW52YWxpZDpudWxsLGFyaWFLZXlTaG9ydGN1dHM6bnVsbCxhcmlhTGFiZWw6bnVsbCxhcmlhTGFiZWxsZWRCeTpvMSxhcmlhTGV2ZWw6RWUsYXJpYUxpdmU6bnVsbCxhcmlhTW9kYWw6TjEsYXJpYU11bHRpTGluZTpOMSxhcmlhTXVsdGlTZWxlY3RhYmxlOk4xLGFyaWFPcmllbnRhdGlvbjpudWxsLGFyaWFPd25zOm8xLGFyaWFQbGFjZWhvbGRlcjpudWxsLGFyaWFQb3NJblNldDpFZSxhcmlhUHJlc3NlZDpOMSxhcmlhUmVhZE9ubHk6TjEsYXJpYVJlbGV2YW50Om51bGwsYXJpYVJlcXVpcmVkOk4xLGFyaWFSb2xlRGVzY3JpcHRpb246bzEsYXJpYVJvd0NvdW50OkVlLGFyaWFSb3dJbmRleDpFZSxhcmlhUm93U3BhbjpFZSxhcmlhU2VsZWN0ZWQ6TjEsYXJpYVNldFNpemU6RWUsYXJpYVNvcnQ6bnVsbCxhcmlhVmFsdWVNYXg6RWUsYXJpYVZhbHVlTWluOkVlLGFyaWFWYWx1ZU5vdzpFZSxhcmlhVmFsdWVUZXh0Om51bGwscm9sZTpudWxsfSx0cmFuc2Zvcm0odCxlKXtyZXR1cm4gZT09PSJyb2xlIj9lOiJhcmlhLSIrZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpfX0pfSk7ZnVuY3Rpb24gYnUodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06ZX12YXIgcyQ9YigoKT0+e30pO2Z1bmN0aW9uIHZ1KHQsZSl7cmV0dXJuIGJ1KHQsZS50b0xvd2VyQ2FzZSgpKX12YXIgbiQ9YigoKT0+e3MkKCl9KTt2YXIgazRlLFM0ZT1iKCgpPT57biQoKTtEMCgpO281KCk7azRlPXBpKHthdHRyaWJ1dGVzOnthY2NlcHRjaGFyc2V0OiJhY2NlcHQtY2hhcnNldCIsY2xhc3NuYW1lOiJjbGFzcyIsaHRtbGZvcjoiZm9yIixodHRwZXF1aXY6Imh0dHAtZXF1aXYifSxtdXN0VXNlUHJvcGVydHk6WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0scHJvcGVydGllczp7YWJicjpudWxsLGFjY2VwdDpabixhY2NlcHRDaGFyc2V0Om8xLGFjY2Vzc0tleTpvMSxhY3Rpb246bnVsbCxhbGxvdzpudWxsLGFsbG93RnVsbFNjcmVlbjptdCxhbGxvd1BheW1lbnRSZXF1ZXN0Om10LGFsbG93VXNlck1lZGlhOm10LGFsdDpudWxsLGFzOm51bGwsYXN5bmM6bXQsYXV0b0NhcGl0YWxpemU6bnVsbCxhdXRvQ29tcGxldGU6bzEsYXV0b0ZvY3VzOm10LGF1dG9QbGF5Om10LGJsb2NraW5nOm8xLGNhcHR1cmU6bnVsbCxjaGFyU2V0Om51bGwsY2hlY2tlZDptdCxjaXRlOm51bGwsY2xhc3NOYW1lOm8xLGNvbHM6RWUsY29sU3BhbjpudWxsLGNvbnRlbnQ6bnVsbCxjb250ZW50RWRpdGFibGU6TjEsY29udHJvbHM6bXQsY29udHJvbHNMaXN0Om8xLGNvb3JkczpFZXxabixjcm9zc09yaWdpbjpudWxsLGRhdGE6bnVsbCxkYXRlVGltZTpudWxsLGRlY29kaW5nOm51bGwsZGVmYXVsdDptdCxkZWZlcjptdCxkaXI6bnVsbCxkaXJOYW1lOm51bGwsZGlzYWJsZWQ6bXQsZG93bmxvYWQ6Z3UsZHJhZ2dhYmxlOk4xLGVuY1R5cGU6bnVsbCxlbnRlcktleUhpbnQ6bnVsbCxmZXRjaFByaW9yaXR5Om51bGwsZm9ybTpudWxsLGZvcm1BY3Rpb246bnVsbCxmb3JtRW5jVHlwZTpudWxsLGZvcm1NZXRob2Q6bnVsbCxmb3JtTm9WYWxpZGF0ZTptdCxmb3JtVGFyZ2V0Om51bGwsaGVhZGVyczpvMSxoZWlnaHQ6RWUsaGlkZGVuOmd1LGhpZ2g6RWUsaHJlZjpudWxsLGhyZWZMYW5nOm51bGwsaHRtbEZvcjpvMSxodHRwRXF1aXY6bzEsaWQ6bnVsbCxpbWFnZVNpemVzOm51bGwsaW1hZ2VTcmNTZXQ6bnVsbCxpbmVydDptdCxpbnB1dE1vZGU6bnVsbCxpbnRlZ3JpdHk6bnVsbCxpczpudWxsLGlzTWFwOm10LGl0ZW1JZDpudWxsLGl0ZW1Qcm9wOm8xLGl0ZW1SZWY6bzEsaXRlbVNjb3BlOm10LGl0ZW1UeXBlOm8xLGtpbmQ6bnVsbCxsYWJlbDpudWxsLGxhbmc6bnVsbCxsYW5ndWFnZTpudWxsLGxpc3Q6bnVsbCxsb2FkaW5nOm51bGwsbG9vcDptdCxsb3c6RWUsbWFuaWZlc3Q6bnVsbCxtYXg6bnVsbCxtYXhMZW5ndGg6RWUsbWVkaWE6bnVsbCxtZXRob2Q6bnVsbCxtaW46bnVsbCxtaW5MZW5ndGg6RWUsbXVsdGlwbGU6bXQsbXV0ZWQ6bXQsbmFtZTpudWxsLG5vbmNlOm51bGwsbm9Nb2R1bGU6bXQsbm9WYWxpZGF0ZTptdCxvbkFib3J0Om51bGwsb25BZnRlclByaW50Om51bGwsb25BdXhDbGljazpudWxsLG9uQmVmb3JlTWF0Y2g6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWZvcmVUb2dnbGU6bnVsbCxvbkJlZm9yZVVubG9hZDpudWxsLG9uQmx1cjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvbnRleHRMb3N0Om51bGwsb25Db250ZXh0TWVudTpudWxsLG9uQ29udGV4dFJlc3RvcmVkOm51bGwsb25Db3B5Om51bGwsb25DdWVDaGFuZ2U6bnVsbCxvbkN1dDpudWxsLG9uRGJsQ2xpY2s6bnVsbCxvbkRyYWc6bnVsbCxvbkRyYWdFbmQ6bnVsbCxvbkRyYWdFbnRlcjpudWxsLG9uRHJhZ0V4aXQ6bnVsbCxvbkRyYWdMZWF2ZTpudWxsLG9uRHJhZ092ZXI6bnVsbCxvbkRyYWdTdGFydDpudWxsLG9uRHJvcDpudWxsLG9uRHVyYXRpb25DaGFuZ2U6bnVsbCxvbkVtcHRpZWQ6bnVsbCxvbkVuZGVkOm51bGwsb25FcnJvcjpudWxsLG9uRm9jdXM6bnVsbCxvbkZvcm1EYXRhOm51bGwsb25IYXNoQ2hhbmdlOm51bGwsb25JbnB1dDpudWxsLG9uSW52YWxpZDpudWxsLG9uS2V5RG93bjpudWxsLG9uS2V5UHJlc3M6bnVsbCxvbktleVVwOm51bGwsb25MYW5ndWFnZUNoYW5nZTpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRFbmQ6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTWVzc2FnZUVycm9yOm51bGwsb25Nb3VzZURvd246bnVsbCxvbk1vdXNlRW50ZXI6bnVsbCxvbk1vdXNlTGVhdmU6bnVsbCxvbk1vdXNlTW92ZTpudWxsLG9uTW91c2VPdXQ6bnVsbCxvbk1vdXNlT3ZlcjpudWxsLG9uTW91c2VVcDpudWxsLG9uT2ZmbGluZTpudWxsLG9uT25saW5lOm51bGwsb25QYWdlSGlkZTpudWxsLG9uUGFnZVNob3c6bnVsbCxvblBhc3RlOm51bGwsb25QYXVzZTpudWxsLG9uUGxheTpudWxsLG9uUGxheWluZzpudWxsLG9uUG9wU3RhdGU6bnVsbCxvblByb2dyZXNzOm51bGwsb25SYXRlQ2hhbmdlOm51bGwsb25SZWplY3Rpb25IYW5kbGVkOm51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNjcm9sbEVuZDpudWxsLG9uU2VjdXJpdHlQb2xpY3lWaW9sYXRpb246bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TbG90Q2hhbmdlOm51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5oYW5kbGVkUmVqZWN0aW9uOm51bGwsb25VbmxvYWQ6bnVsbCxvblZvbHVtZUNoYW5nZTpudWxsLG9uV2FpdGluZzpudWxsLG9uV2hlZWw6bnVsbCxvcGVuOm10LG9wdGltdW06RWUscGF0dGVybjpudWxsLHBpbmc6bzEscGxhY2Vob2xkZXI6bnVsbCxwbGF5c0lubGluZTptdCxwb3BvdmVyOm51bGwscG9wb3ZlclRhcmdldDpudWxsLHBvcG92ZXJUYXJnZXRBY3Rpb246bnVsbCxwb3N0ZXI6bnVsbCxwcmVsb2FkOm51bGwscmVhZE9ubHk6bXQscmVmZXJyZXJQb2xpY3k6bnVsbCxyZWw6bzEscmVxdWlyZWQ6bXQscmV2ZXJzZWQ6bXQscm93czpFZSxyb3dTcGFuOkVlLHNhbmRib3g6bzEsc2NvcGU6bnVsbCxzY29wZWQ6bXQsc2VhbWxlc3M6bXQsc2VsZWN0ZWQ6bXQsc2hhZG93Um9vdENsb25hYmxlOm10LHNoYWRvd1Jvb3REZWxlZ2F0ZXNGb2N1czptdCxzaGFkb3dSb290TW9kZTpudWxsLHNoYXBlOm51bGwsc2l6ZTpFZSxzaXplczpudWxsLHNsb3Q6bnVsbCxzcGFuOkVlLHNwZWxsQ2hlY2s6TjEsc3JjOm51bGwsc3JjRG9jOm51bGwsc3JjTGFuZzpudWxsLHNyY1NldDpudWxsLHN0YXJ0OkVlLHN0ZXA6bnVsbCxzdHlsZTpudWxsLHRhYkluZGV4OkVlLHRhcmdldDpudWxsLHRpdGxlOm51bGwsdHJhbnNsYXRlOm51bGwsdHlwZTpudWxsLHR5cGVNdXN0TWF0Y2g6bXQsdXNlTWFwOm51bGwsdmFsdWU6TjEsd2lkdGg6RWUsd3JhcDpudWxsLHdyaXRpbmdTdWdnZXN0aW9uczpudWxsLGFsaWduOm51bGwsYUxpbms6bnVsbCxhcmNoaXZlOm8xLGF4aXM6bnVsbCxiYWNrZ3JvdW5kOm51bGwsYmdDb2xvcjpudWxsLGJvcmRlcjpFZSxib3JkZXJDb2xvcjpudWxsLGJvdHRvbU1hcmdpbjpFZSxjZWxsUGFkZGluZzpudWxsLGNlbGxTcGFjaW5nOm51bGwsY2hhcjpudWxsLGNoYXJPZmY6bnVsbCxjbGFzc0lkOm51bGwsY2xlYXI6bnVsbCxjb2RlOm51bGwsY29kZUJhc2U6bnVsbCxjb2RlVHlwZTpudWxsLGNvbG9yOm51bGwsY29tcGFjdDptdCxkZWNsYXJlOm10LGV2ZW50Om51bGwsZmFjZTpudWxsLGZyYW1lOm51bGwsZnJhbWVCb3JkZXI6bnVsbCxoU3BhY2U6RWUsbGVmdE1hcmdpbjpFZSxsaW5rOm51bGwsbG9uZ0Rlc2M6bnVsbCxsb3dTcmM6bnVsbCxtYXJnaW5IZWlnaHQ6RWUsbWFyZ2luV2lkdGg6RWUsbm9SZXNpemU6bXQsbm9IcmVmOm10LG5vU2hhZGU6bXQsbm9XcmFwOm10LG9iamVjdDpudWxsLHByb2ZpbGU6bnVsbCxwcm9tcHQ6bnVsbCxyZXY6bnVsbCxyaWdodE1hcmdpbjpFZSxydWxlczpudWxsLHNjaGVtZTpudWxsLHNjcm9sbGluZzpOMSxzdGFuZGJ5Om51bGwsc3VtbWFyeTpudWxsLHRleHQ6bnVsbCx0b3BNYXJnaW46RWUsdmFsdWVUeXBlOm51bGwsdmVyc2lvbjpudWxsLHZBbGlnbjpudWxsLHZMaW5rOm51bGwsdlNwYWNlOkVlLGFsbG93VHJhbnNwYXJlbmN5Om51bGwsYXV0b0NvcnJlY3Q6bnVsbCxhdXRvU2F2ZTpudWxsLGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlOm10LGRpc2FibGVSZW1vdGVQbGF5YmFjazptdCxwcmVmaXg6bnVsbCxwcm9wZXJ0eTpudWxsLHJlc3VsdHM6RWUsc2VjdXJpdHk6bnVsbCx1bnNlbGVjdGFibGU6bnVsbH0sc3BhY2U6Imh0bWwiLHRyYW5zZm9ybTp2dX0pfSk7dmFyIEM0ZSxfNGU9YigoKT0+e3MkKCk7RDAoKTtvNSgpO0M0ZT1waSh7YXR0cmlidXRlczp7YWNjZW50SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhbGlnbm1lbnRCYXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIsYmFzZWxpbmVTaGlmdDoiYmFzZWxpbmUtc2hpZnQiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xhc3NOYW1lOiJjbGFzcyIsY2xpcFBhdGg6ImNsaXAtcGF0aCIsY2xpcFJ1bGU6ImNsaXAtcnVsZSIsY29sb3JJbnRlcnBvbGF0aW9uOiJjb2xvci1pbnRlcnBvbGF0aW9uIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLGNvbG9yUHJvZmlsZToiY29sb3ItcHJvZmlsZSIsY29sb3JSZW5kZXJpbmc6ImNvbG9yLXJlbmRlcmluZyIsY3Jvc3NPcmlnaW46ImNyb3Nzb3JpZ2luIixkYXRhVHlwZToiZGF0YXR5cGUiLGRvbWluYW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3VuZCIsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1bGU6ImZpbGwtcnVsZSIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxvb2Qtb3BhY2l0eSIsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXplOiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRjaDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0IixnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixocmVmTGFuZzoiaHJlZmxhbmciLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoiaG9yaXotb3JpZ2luLXgiLGhvcml6T3JpZ2luWToiaG9yaXotb3JpZ2luLXkiLGltYWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGxldHRlclNwYWNpbmc6ImxldHRlci1zcGFjaW5nIixsaWdodGluZ0NvbG9yOiJsaWdodGluZy1jb2xvciIsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG5hdkRvd246Im5hdi1kb3duIixuYXZEb3duTGVmdDoibmF2LWRvd24tbGVmdCIsbmF2RG93blJpZ2h0OiJuYXYtZG93bi1yaWdodCIsbmF2TGVmdDoibmF2LWxlZnQiLG5hdk5leHQ6Im5hdi1uZXh0IixuYXZQcmV2OiJuYXYtcHJldiIsbmF2UmlnaHQ6Im5hdi1yaWdodCIsbmF2VXA6Im5hdi11cCIsbmF2VXBMZWZ0OiJuYXYtdXAtbGVmdCIsbmF2VXBSaWdodDoibmF2LXVwLXJpZ2h0IixvbkFib3J0OiJvbmFib3J0IixvbkFjdGl2YXRlOiJvbmFjdGl2YXRlIixvbkFmdGVyUHJpbnQ6Im9uYWZ0ZXJwcmludCIsb25CZWZvcmVQcmludDoib25iZWZvcmVwcmludCIsb25CZWdpbjoib25iZWdpbiIsb25DYW5jZWw6Im9uY2FuY2VsIixvbkNhblBsYXk6Im9uY2FucGxheSIsb25DYW5QbGF5VGhyb3VnaDoib25jYW5wbGF5dGhyb3VnaCIsb25DaGFuZ2U6Im9uY2hhbmdlIixvbkNsaWNrOiJvbmNsaWNrIixvbkNsb3NlOiJvbmNsb3NlIixvbkNvcHk6Im9uY29weSIsb25DdWVDaGFuZ2U6Im9uY3VlY2hhbmdlIixvbkN1dDoib25jdXQiLG9uRGJsQ2xpY2s6Im9uZGJsY2xpY2siLG9uRHJhZzoib25kcmFnIixvbkRyYWdFbmQ6Im9uZHJhZ2VuZCIsb25EcmFnRW50ZXI6Im9uZHJhZ2VudGVyIixvbkRyYWdFeGl0OiJvbmRyYWdleGl0IixvbkRyYWdMZWF2ZToib25kcmFnbGVhdmUiLG9uRHJhZ092ZXI6Im9uZHJhZ292ZXIiLG9uRHJhZ1N0YXJ0OiJvbmRyYWdzdGFydCIsb25Ecm9wOiJvbmRyb3AiLG9uRHVyYXRpb25DaGFuZ2U6Im9uZHVyYXRpb25jaGFuZ2UiLG9uRW1wdGllZDoib25lbXB0aWVkIixvbkVuZDoib25lbmQiLG9uRW5kZWQ6Im9uZW5kZWQiLG9uRXJyb3I6Im9uZXJyb3IiLG9uRm9jdXM6Im9uZm9jdXMiLG9uRm9jdXNJbjoib25mb2N1c2luIixvbkZvY3VzT3V0OiJvbmZvY3Vzb3V0Iixvbkhhc2hDaGFuZ2U6Im9uaGFzaGNoYW5nZSIsb25JbnB1dDoib25pbnB1dCIsb25JbnZhbGlkOiJvbmludmFsaWQiLG9uS2V5RG93bjoib25rZXlkb3duIixvbktleVByZXNzOiJvbmtleXByZXNzIixvbktleVVwOiJvbmtleXVwIixvbkxvYWQ6Im9ubG9hZCIsb25Mb2FkZWREYXRhOiJvbmxvYWRlZGRhdGEiLG9uTG9hZGVkTWV0YWRhdGE6Im9ubG9hZGVkbWV0YWRhdGEiLG9uTG9hZFN0YXJ0OiJvbmxvYWRzdGFydCIsb25NZXNzYWdlOiJvbm1lc3NhZ2UiLG9uTW91c2VEb3duOiJvbm1vdXNlZG93biIsb25Nb3VzZUVudGVyOiJvbm1vdXNlZW50ZXIiLG9uTW91c2VMZWF2ZToib25tb3VzZWxlYXZlIixvbk1vdXNlTW92ZToib25tb3VzZW1vdmUiLG9uTW91c2VPdXQ6Im9ubW91c2VvdXQiLG9uTW91c2VPdmVyOiJvbm1vdXNlb3ZlciIsb25Nb3VzZVVwOiJvbm1vdXNldXAiLG9uTW91c2VXaGVlbDoib25tb3VzZXdoZWVsIixvbk9mZmxpbmU6Im9ub2ZmbGluZSIsb25PbmxpbmU6Im9ub25saW5lIixvblBhZ2VIaWRlOiJvbnBhZ2VoaWRlIixvblBhZ2VTaG93OiJvbnBhZ2VzaG93IixvblBhc3RlOiJvbnBhc3RlIixvblBhdXNlOiJvbnBhdXNlIixvblBsYXk6Im9ucGxheSIsb25QbGF5aW5nOiJvbnBsYXlpbmciLG9uUG9wU3RhdGU6Im9ucG9wc3RhdGUiLG9uUHJvZ3Jlc3M6Im9ucHJvZ3Jlc3MiLG9uUmF0ZUNoYW5nZToib25yYXRlY2hhbmdlIixvblJlcGVhdDoib25yZXBlYXQiLG9uUmVzZXQ6Im9ucmVzZXQiLG9uUmVzaXplOiJvbnJlc2l6ZSIsb25TY3JvbGw6Im9uc2Nyb2xsIixvblNlZWtlZDoib25zZWVrZWQiLG9uU2Vla2luZzoib25zZWVraW5nIixvblNlbGVjdDoib25zZWxlY3QiLG9uU2hvdzoib25zaG93IixvblN0YWxsZWQ6Im9uc3RhbGxlZCIsb25TdG9yYWdlOiJvbnN0b3JhZ2UiLG9uU3VibWl0OiJvbnN1Ym1pdCIsb25TdXNwZW5kOiJvbnN1c3BlbmQiLG9uVGltZVVwZGF0ZToib250aW1ldXBkYXRlIixvblRvZ2dsZToib250b2dnbGUiLG9uVW5sb2FkOiJvbnVubG9hZCIsb25Wb2x1bWVDaGFuZ2U6Im9udm9sdW1lY2hhbmdlIixvbldhaXRpbmc6Im9ud2FpdGluZyIsb25ab29tOiJvbnpvb20iLG92ZXJsaW5lUG9zaXRpb246Im92ZXJsaW5lLXBvc2l0aW9uIixvdmVybGluZVRoaWNrbmVzczoib3ZlcmxpbmUtdGhpY2tuZXNzIixwYWludE9yZGVyOiJwYWludC1vcmRlciIscGFub3NlMToicGFub3NlLTEiLHBvaW50ZXJFdmVudHM6InBvaW50ZXItZXZlbnRzIixyZWZlcnJlclBvbGljeToicmVmZXJyZXJwb2xpY3kiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5nLWludGVudCIsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc3RvcENvbG9yOiJzdG9wLWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIixzdHJva2VEYXNoQXJyYXk6InN0cm9rZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hPZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VMaW5lQ2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZUpvaW46InN0cm9rZS1saW5lam9pbiIsc3Ryb2tlTWl0ZXJMaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9rZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIix0YWJJbmRleDoidGFiaW5kZXgiLHRleHRBbmNob3I6InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVyaW5nOiJ0ZXh0LXJlbmRlcmluZyIsdHJhbnNmb3JtT3JpZ2luOiJ0cmFuc2Zvcm0tb3JpZ2luIix0eXBlT2Y6InR5cGVvZiIsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5kZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlQmlkaToidW5pY29kZS1iaWRpIix1bmljb2RlUmFuZ2U6InVuaWNvZGUtcmFuZ2UiLHVuaXRzUGVyRW06InVuaXRzLXBlci1lbSIsdkFscGhhYmV0aWM6InYtYWxwaGFiZXRpYyIsdkhhbmdpbmc6InYtaGFuZ2luZyIsdklkZW9ncmFwaGljOiJ2LWlkZW9ncmFwaGljIix2TWF0aGVtYXRpY2FsOiJ2LW1hdGhlbWF0aWNhbCIsdmVjdG9yRWZmZWN0OiJ2ZWN0b3ItZWZmZWN0Iix2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4SGVpZ2h0OiJ4LWhlaWdodCIscGxheWJhY2tPcmRlcjoicGxheWJhY2tvcmRlciIsdGltZWxpbmVCZWdpbjoidGltZWxpbmViZWdpbiJ9LHByb3BlcnRpZXM6e2Fib3V0OiRhLGFjY2VudEhlaWdodDpFZSxhY2N1bXVsYXRlOm51bGwsYWRkaXRpdmU6bnVsbCxhbGlnbm1lbnRCYXNlbGluZTpudWxsLGFscGhhYmV0aWM6RWUsYW1wbGl0dWRlOkVlLGFyYWJpY0Zvcm06bnVsbCxhc2NlbnQ6RWUsYXR0cmlidXRlTmFtZTpudWxsLGF0dHJpYnV0ZVR5cGU6bnVsbCxhemltdXRoOkVlLGJhbmR3aWR0aDpudWxsLGJhc2VsaW5lU2hpZnQ6bnVsbCxiYXNlRnJlcXVlbmN5Om51bGwsYmFzZVByb2ZpbGU6bnVsbCxiYm94Om51bGwsYmVnaW46bnVsbCxiaWFzOkVlLGJ5Om51bGwsY2FsY01vZGU6bnVsbCxjYXBIZWlnaHQ6RWUsY2xhc3NOYW1lOm8xLGNsaXA6bnVsbCxjbGlwUGF0aDpudWxsLGNsaXBQYXRoVW5pdHM6bnVsbCxjbGlwUnVsZTpudWxsLGNvbG9yOm51bGwsY29sb3JJbnRlcnBvbGF0aW9uOm51bGwsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczpudWxsLGNvbG9yUHJvZmlsZTpudWxsLGNvbG9yUmVuZGVyaW5nOm51bGwsY29udGVudDpudWxsLGNvbnRlbnRTY3JpcHRUeXBlOm51bGwsY29udGVudFN0eWxlVHlwZTpudWxsLGNyb3NzT3JpZ2luOm51bGwsY3Vyc29yOm51bGwsY3g6bnVsbCxjeTpudWxsLGQ6bnVsbCxkYXRhVHlwZTpudWxsLGRlZmF1bHRBY3Rpb246bnVsbCxkZXNjZW50OkVlLGRpZmZ1c2VDb25zdGFudDpFZSxkaXJlY3Rpb246bnVsbCxkaXNwbGF5Om51bGwsZHVyOm51bGwsZGl2aXNvcjpFZSxkb21pbmFudEJhc2VsaW5lOm51bGwsZG93bmxvYWQ6bXQsZHg6bnVsbCxkeTpudWxsLGVkZ2VNb2RlOm51bGwsZWRpdGFibGU6bnVsbCxlbGV2YXRpb246RWUsZW5hYmxlQmFja2dyb3VuZDpudWxsLGVuZDpudWxsLGV2ZW50Om51bGwsZXhwb25lbnQ6RWUsZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDpudWxsLGZpbGw6bnVsbCxmaWxsT3BhY2l0eTpFZSxmaWxsUnVsZTpudWxsLGZpbHRlcjpudWxsLGZpbHRlclJlczpudWxsLGZpbHRlclVuaXRzOm51bGwsZmxvb2RDb2xvcjpudWxsLGZsb29kT3BhY2l0eTpudWxsLGZvY3VzYWJsZTpudWxsLGZvY3VzSGlnaGxpZ2h0Om51bGwsZm9udEZhbWlseTpudWxsLGZvbnRTaXplOm51bGwsZm9udFNpemVBZGp1c3Q6bnVsbCxmb250U3RyZXRjaDpudWxsLGZvbnRTdHlsZTpudWxsLGZvbnRWYXJpYW50Om51bGwsZm9udFdlaWdodDpudWxsLGZvcm1hdDpudWxsLGZyOm51bGwsZnJvbTpudWxsLGZ4Om51bGwsZnk6bnVsbCxnMTpabixnMjpabixnbHlwaE5hbWU6Wm4sZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6bnVsbCxnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6bnVsbCxnbHlwaFJlZjpudWxsLGdyYWRpZW50VHJhbnNmb3JtOm51bGwsZ3JhZGllbnRVbml0czpudWxsLGhhbmRsZXI6bnVsbCxoYW5naW5nOkVlLGhhdGNoQ29udGVudFVuaXRzOm51bGwsaGF0Y2hVbml0czpudWxsLGhlaWdodDpudWxsLGhyZWY6bnVsbCxocmVmTGFuZzpudWxsLGhvcml6QWR2WDpFZSxob3Jpek9yaWdpblg6RWUsaG9yaXpPcmlnaW5ZOkVlLGlkOm51bGwsaWRlb2dyYXBoaWM6RWUsaW1hZ2VSZW5kZXJpbmc6bnVsbCxpbml0aWFsVmlzaWJpbGl0eTpudWxsLGluOm51bGwsaW4yOm51bGwsaW50ZXJjZXB0OkVlLGs6RWUsazE6RWUsazI6RWUsazM6RWUsazQ6RWUsa2VybmVsTWF0cml4OiRhLGtlcm5lbFVuaXRMZW5ndGg6bnVsbCxrZXlQb2ludHM6bnVsbCxrZXlTcGxpbmVzOm51bGwsa2V5VGltZXM6bnVsbCxrZXJuaW5nOm51bGwsbGFuZzpudWxsLGxlbmd0aEFkanVzdDpudWxsLGxldHRlclNwYWNpbmc6bnVsbCxsaWdodGluZ0NvbG9yOm51bGwsbGltaXRpbmdDb25lQW5nbGU6RWUsbG9jYWw6bnVsbCxtYXJrZXJFbmQ6bnVsbCxtYXJrZXJNaWQ6bnVsbCxtYXJrZXJTdGFydDpudWxsLG1hcmtlckhlaWdodDpudWxsLG1hcmtlclVuaXRzOm51bGwsbWFya2VyV2lkdGg6bnVsbCxtYXNrOm51bGwsbWFza0NvbnRlbnRVbml0czpudWxsLG1hc2tVbml0czpudWxsLG1hdGhlbWF0aWNhbDpudWxsLG1heDpudWxsLG1lZGlhOm51bGwsbWVkaWFDaGFyYWN0ZXJFbmNvZGluZzpudWxsLG1lZGlhQ29udGVudEVuY29kaW5nczpudWxsLG1lZGlhU2l6ZTpFZSxtZWRpYVRpbWU6bnVsbCxtZXRob2Q6bnVsbCxtaW46bnVsbCxtb2RlOm51bGwsbmFtZTpudWxsLG5hdkRvd246bnVsbCxuYXZEb3duTGVmdDpudWxsLG5hdkRvd25SaWdodDpudWxsLG5hdkxlZnQ6bnVsbCxuYXZOZXh0Om51bGwsbmF2UHJldjpudWxsLG5hdlJpZ2h0Om51bGwsbmF2VXA6bnVsbCxuYXZVcExlZnQ6bnVsbCxuYXZVcFJpZ2h0Om51bGwsbnVtT2N0YXZlczpudWxsLG9ic2VydmVyOm51bGwsb2Zmc2V0Om51bGwsb25BYm9ydDpudWxsLG9uQWN0aXZhdGU6bnVsbCxvbkFmdGVyUHJpbnQ6bnVsbCxvbkJlZm9yZVByaW50Om51bGwsb25CZWdpbjpudWxsLG9uQ2FuY2VsOm51bGwsb25DYW5QbGF5Om51bGwsb25DYW5QbGF5VGhyb3VnaDpudWxsLG9uQ2hhbmdlOm51bGwsb25DbGljazpudWxsLG9uQ2xvc2U6bnVsbCxvbkNvcHk6bnVsbCxvbkN1ZUNoYW5nZTpudWxsLG9uQ3V0Om51bGwsb25EYmxDbGljazpudWxsLG9uRHJhZzpudWxsLG9uRHJhZ0VuZDpudWxsLG9uRHJhZ0VudGVyOm51bGwsb25EcmFnRXhpdDpudWxsLG9uRHJhZ0xlYXZlOm51bGwsb25EcmFnT3ZlcjpudWxsLG9uRHJhZ1N0YXJ0Om51bGwsb25Ecm9wOm51bGwsb25EdXJhdGlvbkNoYW5nZTpudWxsLG9uRW1wdGllZDpudWxsLG9uRW5kOm51bGwsb25FbmRlZDpudWxsLG9uRXJyb3I6bnVsbCxvbkZvY3VzOm51bGwsb25Gb2N1c0luOm51bGwsb25Gb2N1c091dDpudWxsLG9uSGFzaENoYW5nZTpudWxsLG9uSW5wdXQ6bnVsbCxvbkludmFsaWQ6bnVsbCxvbktleURvd246bnVsbCxvbktleVByZXNzOm51bGwsb25LZXlVcDpudWxsLG9uTG9hZDpudWxsLG9uTG9hZGVkRGF0YTpudWxsLG9uTG9hZGVkTWV0YWRhdGE6bnVsbCxvbkxvYWRTdGFydDpudWxsLG9uTWVzc2FnZTpudWxsLG9uTW91c2VEb3duOm51bGwsb25Nb3VzZUVudGVyOm51bGwsb25Nb3VzZUxlYXZlOm51bGwsb25Nb3VzZU1vdmU6bnVsbCxvbk1vdXNlT3V0Om51bGwsb25Nb3VzZU92ZXI6bnVsbCxvbk1vdXNlVXA6bnVsbCxvbk1vdXNlV2hlZWw6bnVsbCxvbk9mZmxpbmU6bnVsbCxvbk9ubGluZTpudWxsLG9uUGFnZUhpZGU6bnVsbCxvblBhZ2VTaG93Om51bGwsb25QYXN0ZTpudWxsLG9uUGF1c2U6bnVsbCxvblBsYXk6bnVsbCxvblBsYXlpbmc6bnVsbCxvblBvcFN0YXRlOm51bGwsb25Qcm9ncmVzczpudWxsLG9uUmF0ZUNoYW5nZTpudWxsLG9uUmVwZWF0Om51bGwsb25SZXNldDpudWxsLG9uUmVzaXplOm51bGwsb25TY3JvbGw6bnVsbCxvblNlZWtlZDpudWxsLG9uU2Vla2luZzpudWxsLG9uU2VsZWN0Om51bGwsb25TaG93Om51bGwsb25TdGFsbGVkOm51bGwsb25TdG9yYWdlOm51bGwsb25TdWJtaXQ6bnVsbCxvblN1c3BlbmQ6bnVsbCxvblRpbWVVcGRhdGU6bnVsbCxvblRvZ2dsZTpudWxsLG9uVW5sb2FkOm51bGwsb25Wb2x1bWVDaGFuZ2U6bnVsbCxvbldhaXRpbmc6bnVsbCxvblpvb206bnVsbCxvcGFjaXR5Om51bGwsb3BlcmF0b3I6bnVsbCxvcmRlcjpudWxsLG9yaWVudDpudWxsLG9yaWVudGF0aW9uOm51bGwsb3JpZ2luOm51bGwsb3ZlcmZsb3c6bnVsbCxvdmVybGF5Om51bGwsb3ZlcmxpbmVQb3NpdGlvbjpFZSxvdmVybGluZVRoaWNrbmVzczpFZSxwYWludE9yZGVyOm51bGwscGFub3NlMTpudWxsLHBhdGg6bnVsbCxwYXRoTGVuZ3RoOkVlLHBhdHRlcm5Db250ZW50VW5pdHM6bnVsbCxwYXR0ZXJuVHJhbnNmb3JtOm51bGwscGF0dGVyblVuaXRzOm51bGwscGhhc2U6bnVsbCxwaW5nOm8xLHBpdGNoOm51bGwscGxheWJhY2tPcmRlcjpudWxsLHBvaW50ZXJFdmVudHM6bnVsbCxwb2ludHM6bnVsbCxwb2ludHNBdFg6RWUscG9pbnRzQXRZOkVlLHBvaW50c0F0WjpFZSxwcmVzZXJ2ZUFscGhhOm51bGwscHJlc2VydmVBc3BlY3RSYXRpbzpudWxsLHByaW1pdGl2ZVVuaXRzOm51bGwscHJvcGFnYXRlOm51bGwscHJvcGVydHk6JGEscjpudWxsLHJhZGl1czpudWxsLHJlZmVycmVyUG9saWN5Om51bGwscmVmWDpudWxsLHJlZlk6bnVsbCxyZWw6JGEscmV2OiRhLHJlbmRlcmluZ0ludGVudDpudWxsLHJlcGVhdENvdW50Om51bGwscmVwZWF0RHVyOm51bGwscmVxdWlyZWRFeHRlbnNpb25zOiRhLHJlcXVpcmVkRmVhdHVyZXM6JGEscmVxdWlyZWRGb250czokYSxyZXF1aXJlZEZvcm1hdHM6JGEscmVzb3VyY2U6bnVsbCxyZXN0YXJ0Om51bGwscmVzdWx0Om51bGwscm90YXRlOm51bGwscng6bnVsbCxyeTpudWxsLHNjYWxlOm51bGwsc2VlZDpudWxsLHNoYXBlUmVuZGVyaW5nOm51bGwsc2lkZTpudWxsLHNsb3BlOm51bGwsc25hcHNob3RUaW1lOm51bGwsc3BlY3VsYXJDb25zdGFudDpFZSxzcGVjdWxhckV4cG9uZW50OkVlLHNwcmVhZE1ldGhvZDpudWxsLHNwYWNpbmc6bnVsbCxzdGFydE9mZnNldDpudWxsLHN0ZERldmlhdGlvbjpudWxsLHN0ZW1oOm51bGwsc3RlbXY6bnVsbCxzdGl0Y2hUaWxlczpudWxsLHN0b3BDb2xvcjpudWxsLHN0b3BPcGFjaXR5Om51bGwsc3RyaWtldGhyb3VnaFBvc2l0aW9uOkVlLHN0cmlrZXRocm91Z2hUaGlja25lc3M6RWUsc3RyaW5nOm51bGwsc3Ryb2tlOm51bGwsc3Ryb2tlRGFzaEFycmF5OiRhLHN0cm9rZURhc2hPZmZzZXQ6bnVsbCxzdHJva2VMaW5lQ2FwOm51bGwsc3Ryb2tlTGluZUpvaW46bnVsbCxzdHJva2VNaXRlckxpbWl0OkVlLHN0cm9rZU9wYWNpdHk6RWUsc3Ryb2tlV2lkdGg6bnVsbCxzdHlsZTpudWxsLHN1cmZhY2VTY2FsZTpFZSxzeW5jQmVoYXZpb3I6bnVsbCxzeW5jQmVoYXZpb3JEZWZhdWx0Om51bGwsc3luY01hc3RlcjpudWxsLHN5bmNUb2xlcmFuY2U6bnVsbCxzeW5jVG9sZXJhbmNlRGVmYXVsdDpudWxsLHN5c3RlbUxhbmd1YWdlOiRhLHRhYkluZGV4OkVlLHRhYmxlVmFsdWVzOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0WDpFZSx0YXJnZXRZOkVlLHRleHRBbmNob3I6bnVsbCx0ZXh0RGVjb3JhdGlvbjpudWxsLHRleHRSZW5kZXJpbmc6bnVsbCx0ZXh0TGVuZ3RoOm51bGwsdGltZWxpbmVCZWdpbjpudWxsLHRpdGxlOm51bGwsdHJhbnNmb3JtQmVoYXZpb3I6bnVsbCx0eXBlOm51bGwsdHlwZU9mOiRhLHRvOm51bGwsdHJhbnNmb3JtOm51bGwsdHJhbnNmb3JtT3JpZ2luOm51bGwsdTE6bnVsbCx1MjpudWxsLHVuZGVybGluZVBvc2l0aW9uOkVlLHVuZGVybGluZVRoaWNrbmVzczpFZSx1bmljb2RlOm51bGwsdW5pY29kZUJpZGk6bnVsbCx1bmljb2RlUmFuZ2U6bnVsbCx1bml0c1BlckVtOkVlLHZhbHVlczpudWxsLHZBbHBoYWJldGljOkVlLHZNYXRoZW1hdGljYWw6RWUsdmVjdG9yRWZmZWN0Om51bGwsdkhhbmdpbmc6RWUsdklkZW9ncmFwaGljOkVlLHZlcnNpb246bnVsbCx2ZXJ0QWR2WTpFZSx2ZXJ0T3JpZ2luWDpFZSx2ZXJ0T3JpZ2luWTpFZSx2aWV3Qm94Om51bGwsdmlld1RhcmdldDpudWxsLHZpc2liaWxpdHk6bnVsbCx3aWR0aDpudWxsLHdpZHRoczpudWxsLHdvcmRTcGFjaW5nOm51bGwsd3JpdGluZ01vZGU6bnVsbCx4Om51bGwseDE6bnVsbCx4MjpudWxsLHhDaGFubmVsU2VsZWN0b3I6bnVsbCx4SGVpZ2h0OkVlLHk6bnVsbCx5MTpudWxsLHkyOm51bGwseUNoYW5uZWxTZWxlY3RvcjpudWxsLHo6bnVsbCx6b29tQW5kUGFuOm51bGx9LHNwYWNlOiJzdmciLHRyYW5zZm9ybTpidX0pfSk7dmFyIG8kLFQ0ZT1iKCgpPT57RDAoKTtvJD1waSh7cHJvcGVydGllczp7eExpbmtBY3R1YXRlOm51bGwseExpbmtBcmNSb2xlOm51bGwseExpbmtIcmVmOm51bGwseExpbmtSb2xlOm51bGwseExpbmtTaG93Om51bGwseExpbmtUaXRsZTpudWxsLHhMaW5rVHlwZTpudWxsfSxzcGFjZToieGxpbmsiLHRyYW5zZm9ybSh0LGUpe3JldHVybiJ4bGluazoiK2Uuc2xpY2UoNSkudG9Mb3dlckNhc2UoKX19KX0pO3ZhciBsJCxMNGU9YigoKT0+e0QwKCk7biQoKTtsJD1waSh7YXR0cmlidXRlczp7eG1sbnN4bGluazoieG1sbnM6eGxpbmsifSxwcm9wZXJ0aWVzOnt4bWxuc1hMaW5rOm51bGwseG1sbnM6bnVsbH0sc3BhY2U6InhtbG5zIix0cmFuc2Zvcm06dnV9KX0pO3ZhciBjJCwkNGU9YigoKT0+e0QwKCk7YyQ9cGkoe3Byb3BlcnRpZXM6e3htbEJhc2U6bnVsbCx4bWxMYW5nOm51bGwseG1sU3BhY2U6bnVsbH0sc3BhY2U6InhtbCIsdHJhbnNmb3JtKHQsZSl7cmV0dXJuInhtbDoiK2Uuc2xpY2UoMykudG9Mb3dlckNhc2UoKX19KX0pO3ZhciBBNGU9YigoKT0+e30pO2Z1bmN0aW9uIGQkKHQsZSl7bGV0IGE9WjMoZSksaT1lLHI9bTI7aWYoYSBpbiB0Lm5vcm1hbClyZXR1cm4gdC5wcm9wZXJ0eVt0Lm5vcm1hbFthXV07aWYoYS5sZW5ndGg+NCYmYS5zbGljZSgwLDQpPT09ImRhdGEiJiZoT3QudGVzdChlKSl7aWYoZS5jaGFyQXQoNCk9PT0iLSIpe2xldCBzPWUuc2xpY2UoNSkucmVwbGFjZShENGUsZk90KTtpPSJkYXRhIitzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Muc2xpY2UoMSl9ZWxzZXtsZXQgcz1lLnNsaWNlKDQpO2lmKCFENGUudGVzdChzKSl7bGV0IG49cy5yZXBsYWNlKHBPdCx1T3QpO24uY2hhckF0KDApIT09Ii0iJiYobj0iLSIrbiksZT0iZGF0YSIrbn19cj1BMH1yZXR1cm4gbmV3IHIoaSxlKX1mdW5jdGlvbiB1T3QodCl7cmV0dXJuIi0iK3QudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmT3QodCl7cmV0dXJuIHQuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCl9dmFyIHBPdCxENGUsaE90LEU0ZT1iKCgpPT57aSQoKTt0JCgpO211KCk7cE90PS9bQS1aXS9nLEQ0ZT0vLVthLXpdL2csaE90PS9eZGF0YVstXHcuOl0rJC9pfSk7dmFyIFA0ZSx5dSxwJD1iKCgpPT57dzRlKCk7ejRlKCk7UzRlKCk7XzRlKCk7VDRlKCk7TDRlKCk7JDRlKCk7QTRlKCk7RTRlKCk7bXUoKTtQNGU9ZSQoW3IkLGs0ZSxvJCxsJCxjJF0sImh0bWwiKSx5dT1lJChbciQsQzRlLG8kLGwkLGMkXSwic3ZnIil9KTtmdW5jdGlvbiBoJCh0LGUpe2lmKHQ9dC5yZXBsYWNlKGUuc3Vic2V0P3lPdChlLnN1YnNldCk6bU90LGkpLGUuc3Vic2V0fHxlLmVzY2FwZU9ubHkpcmV0dXJuIHQ7cmV0dXJuIHQucmVwbGFjZShnT3QsYSkucmVwbGFjZShiT3QsaSk7ZnVuY3Rpb24gYShyLHMsbil7cmV0dXJuIGUuZm9ybWF0KChyLmNoYXJDb2RlQXQoMCktNTUyOTYpKjEwMjQrci5jaGFyQ29kZUF0KDEpLTU2MzIwKzY1NTM2LG4uY2hhckNvZGVBdChzKzIpLGUpfWZ1bmN0aW9uIGkocixzLG4pe3JldHVybiBlLmZvcm1hdChyLmNoYXJDb2RlQXQoMCksbi5jaGFyQ29kZUF0KHMrMSksZSl9fWZ1bmN0aW9uIHlPdCh0KXtsZXQgZT1JNGUuZ2V0KHQpO3JldHVybiBlfHwoZT14T3QodCksSTRlLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHhPdCh0KXtsZXQgZT1bXSxhPS0xO2Zvcig7KythPHQubGVuZ3RoOyllLnB1c2godFthXS5yZXBsYWNlKHZPdCwiXFwkJiIpKTtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86IitlLmpvaW4oInwiKSsiKSIsImciKX12YXIgbU90LGdPdCxiT3Qsdk90LEk0ZSxONGU9YigoKT0+e21PdD0vWyImJzw+YF0vZyxnT3Q9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGJPdD0vW1x4MDEtXHRcdlxmXHgwRS1ceDFGXHg3Rlx4ODFceDhEXHg4Rlx4OTBceDlEXHhBMC1cdUZGRkZdL2csdk90PS9bfFxce30oKVtcXV4kKyo/Ll0vZyxJNGU9bmV3IFdlYWtNYXB9KTtmdW5jdGlvbiBGNGUodCxlLGEpe2xldCBpPSImI3giK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGEmJmUmJiF3T3QudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKT9pOmkrIjsifXZhciB3T3QsTzRlPWIoKCk9Pnt3T3Q9L1tcZEEtRmEtZl0vfSk7ZnVuY3Rpb24gUjRlKHQsZSxhKXtsZXQgaT0iJiMiK1N0cmluZyh0KTtyZXR1cm4gYSYmZSYmIU1PdC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpP2k6aSsiOyJ9dmFyIE1PdCxCNGU9YigoKT0+e01PdD0vXGQvfSk7dmFyIEg0ZSxxNGU9YigoKT0+e0g0ZT1bIkFFbGlnIiwiQU1QIiwiQWFjdXRlIiwiQWNpcmMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkF1bWwiLCJDT1BZIiwiQ2NlZGlsIiwiRVRIIiwiRWFjdXRlIiwiRWNpcmMiLCJFZ3JhdmUiLCJFdW1sIiwiR1QiLCJJYWN1dGUiLCJJY2lyYyIsIklncmF2ZSIsIkl1bWwiLCJMVCIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjIiwiT2dyYXZlIiwiT3NsYXNoIiwiT3RpbGRlIiwiT3VtbCIsIlFVT1QiLCJSRUciLCJUSE9STiIsIlVhY3V0ZSIsIlVjaXJjIiwiVWdyYXZlIiwiVXVtbCIsIllhY3V0ZSIsImFhY3V0ZSIsImFjaXJjIiwiYWN1dGUiLCJhZWxpZyIsImFncmF2ZSIsImFtcCIsImFyaW5nIiwiYXRpbGRlIiwiYXVtbCIsImJydmJhciIsImNjZWRpbCIsImNlZGlsIiwiY2VudCIsImNvcHkiLCJjdXJyZW4iLCJkZWciLCJkaXZpZGUiLCJlYWN1dGUiLCJlY2lyYyIsImVncmF2ZSIsImV0aCIsImV1bWwiLCJmcmFjMTIiLCJmcmFjMTQiLCJmcmFjMzQiLCJndCIsImlhY3V0ZSIsImljaXJjIiwiaWV4Y2wiLCJpZ3JhdmUiLCJpcXVlc3QiLCJpdW1sIiwibGFxdW8iLCJsdCIsIm1hY3IiLCJtaWNybyIsIm1pZGRvdCIsIm5ic3AiLCJub3QiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyYyIsIm9ncmF2ZSIsIm9yZGYiLCJvcmRtIiwib3NsYXNoIiwib3RpbGRlIiwib3VtbCIsInBhcmEiLCJwbHVzbW4iLCJwb3VuZCIsInF1b3QiLCJyYXF1byIsInJlZyIsInNlY3QiLCJzaHkiLCJzdXAxIiwic3VwMiIsInN1cDMiLCJzemxpZyIsInRob3JuIiwidGltZXMiLCJ1YWN1dGUiLCJ1Y2lyYyIsInVncmF2ZSIsInVtbCIsInV1bWwiLCJ5YWN1dGUiLCJ5ZW4iLCJ5dW1sIl19KTt2YXIgeHUsVjRlPWIoKCk9Pnt4dT17bmJzcDoiXHhBMCIsaWV4Y2w6Ilx4QTEiLGNlbnQ6Ilx4QTIiLHBvdW5kOiJceEEzIixjdXJyZW46Ilx4QTQiLHllbjoiXHhBNSIsYnJ2YmFyOiJceEE2IixzZWN0OiJceEE3Iix1bWw6Ilx4QTgiLGNvcHk6Ilx4QTkiLG9yZGY6Ilx4QUEiLGxhcXVvOiJceEFCIixub3Q6Ilx4QUMiLHNoeToiXHhBRCIscmVnOiJceEFFIixtYWNyOiJceEFGIixkZWc6Ilx4QjAiLHBsdXNtbjoiXHhCMSIsc3VwMjoiXHhCMiIsc3VwMzoiXHhCMyIsYWN1dGU6Ilx4QjQiLG1pY3JvOiJceEI1IixwYXJhOiJceEI2IixtaWRkb3Q6Ilx4QjciLGNlZGlsOiJceEI4IixzdXAxOiJceEI5IixvcmRtOiJceEJBIixyYXF1bzoiXHhCQiIsZnJhYzE0OiJceEJDIixmcmFjMTI6Ilx4QkQiLGZyYWMzNDoiXHhCRSIsaXF1ZXN0OiJceEJGIixBZ3JhdmU6Ilx4QzAiLEFhY3V0ZToiXHhDMSIsQWNpcmM6Ilx4QzIiLEF0aWxkZToiXHhDMyIsQXVtbDoiXHhDNCIsQXJpbmc6Ilx4QzUiLEFFbGlnOiJceEM2IixDY2VkaWw6Ilx4QzciLEVncmF2ZToiXHhDOCIsRWFjdXRlOiJceEM5IixFY2lyYzoiXHhDQSIsRXVtbDoiXHhDQiIsSWdyYXZlOiJceENDIixJYWN1dGU6Ilx4Q0QiLEljaXJjOiJceENFIixJdW1sOiJceENGIixFVEg6Ilx4RDAiLE50aWxkZToiXHhEMSIsT2dyYXZlOiJceEQyIixPYWN1dGU6Ilx4RDMiLE9jaXJjOiJceEQ0IixPdGlsZGU6Ilx4RDUiLE91bWw6Ilx4RDYiLHRpbWVzOiJceEQ3IixPc2xhc2g6Ilx4RDgiLFVncmF2ZToiXHhEOSIsVWFjdXRlOiJceERBIixVY2lyYzoiXHhEQiIsVXVtbDoiXHhEQyIsWWFjdXRlOiJceEREIixUSE9STjoiXHhERSIsc3psaWc6Ilx4REYiLGFncmF2ZToiXHhFMCIsYWFjdXRlOiJceEUxIixhY2lyYzoiXHhFMiIsYXRpbGRlOiJceEUzIixhdW1sOiJceEU0IixhcmluZzoiXHhFNSIsYWVsaWc6Ilx4RTYiLGNjZWRpbDoiXHhFNyIsZWdyYXZlOiJceEU4IixlYWN1dGU6Ilx4RTkiLGVjaXJjOiJceEVBIixldW1sOiJceEVCIixpZ3JhdmU6Ilx4RUMiLGlhY3V0ZToiXHhFRCIsaWNpcmM6Ilx4RUUiLGl1bWw6Ilx4RUYiLGV0aDoiXHhGMCIsbnRpbGRlOiJceEYxIixvZ3JhdmU6Ilx4RjIiLG9hY3V0ZToiXHhGMyIsb2NpcmM6Ilx4RjQiLG90aWxkZToiXHhGNSIsb3VtbDoiXHhGNiIsZGl2aWRlOiJceEY3Iixvc2xhc2g6Ilx4RjgiLHVncmF2ZToiXHhGOSIsdWFjdXRlOiJceEZBIix1Y2lyYzoiXHhGQiIsdXVtbDoiXHhGQyIseWFjdXRlOiJceEZEIix0aG9ybjoiXHhGRSIseXVtbDoiXHhGRiIsZm5vZjoiXHUwMTkyIixBbHBoYToiXHUwMzkxIixCZXRhOiJcdTAzOTIiLEdhbW1hOiJcdTAzOTMiLERlbHRhOiJcdTAzOTQiLEVwc2lsb246Ilx1MDM5NSIsWmV0YToiXHUwMzk2IixFdGE6Ilx1MDM5NyIsVGhldGE6Ilx1MDM5OCIsSW90YToiXHUwMzk5IixLYXBwYToiXHUwMzlBIixMYW1iZGE6Ilx1MDM5QiIsTXU6Ilx1MDM5QyIsTnU6Ilx1MDM5RCIsWGk6Ilx1MDM5RSIsT21pY3JvbjoiXHUwMzlGIixQaToiXHUwM0EwIixSaG86Ilx1MDNBMSIsU2lnbWE6Ilx1MDNBMyIsVGF1OiJcdTAzQTQiLFVwc2lsb246Ilx1MDNBNSIsUGhpOiJcdTAzQTYiLENoaToiXHUwM0E3IixQc2k6Ilx1MDNBOCIsT21lZ2E6Ilx1MDNBOSIsYWxwaGE6Ilx1MDNCMSIsYmV0YToiXHUwM0IyIixnYW1tYToiXHUwM0IzIixkZWx0YToiXHUwM0I0IixlcHNpbG9uOiJcdTAzQjUiLHpldGE6Ilx1MDNCNiIsZXRhOiJcdTAzQjciLHRoZXRhOiJcdTAzQjgiLGlvdGE6Ilx1MDNCOSIsa2FwcGE6Ilx1MDNCQSIsbGFtYmRhOiJcdTAzQkIiLG11OiJcdTAzQkMiLG51OiJcdTAzQkQiLHhpOiJcdTAzQkUiLG9taWNyb246Ilx1MDNCRiIscGk6Ilx1MDNDMCIscmhvOiJcdTAzQzEiLHNpZ21hZjoiXHUwM0MyIixzaWdtYToiXHUwM0MzIix0YXU6Ilx1MDNDNCIsdXBzaWxvbjoiXHUwM0M1IixwaGk6Ilx1MDNDNiIsY2hpOiJcdTAzQzciLHBzaToiXHUwM0M4IixvbWVnYToiXHUwM0M5Iix0aGV0YXN5bToiXHUwM0QxIix1cHNpaDoiXHUwM0QyIixwaXY6Ilx1MDNENiIsYnVsbDoiXHUyMDIyIixoZWxsaXA6Ilx1MjAyNiIscHJpbWU6Ilx1MjAzMiIsUHJpbWU6Ilx1MjAzMyIsb2xpbmU6Ilx1MjAzRSIsZnJhc2w6Ilx1MjA0NCIsd2VpZXJwOiJcdTIxMTgiLGltYWdlOiJcdTIxMTEiLHJlYWw6Ilx1MjExQyIsdHJhZGU6Ilx1MjEyMiIsYWxlZnN5bToiXHUyMTM1IixsYXJyOiJcdTIxOTAiLHVhcnI6Ilx1MjE5MSIscmFycjoiXHUyMTkyIixkYXJyOiJcdTIxOTMiLGhhcnI6Ilx1MjE5NCIsY3JhcnI6Ilx1MjFCNSIsbEFycjoiXHUyMUQwIix1QXJyOiJcdTIxRDEiLHJBcnI6Ilx1MjFEMiIsZEFycjoiXHUyMUQzIixoQXJyOiJcdTIxRDQiLGZvcmFsbDoiXHUyMjAwIixwYXJ0OiJcdTIyMDIiLGV4aXN0OiJcdTIyMDMiLGVtcHR5OiJcdTIyMDUiLG5hYmxhOiJcdTIyMDciLGlzaW46Ilx1MjIwOCIsbm90aW46Ilx1MjIwOSIsbmk6Ilx1MjIwQiIscHJvZDoiXHUyMjBGIixzdW06Ilx1MjIxMSIsbWludXM6Ilx1MjIxMiIsbG93YXN0OiJcdTIyMTciLHJhZGljOiJcdTIyMUEiLHByb3A6Ilx1MjIxRCIsaW5maW46Ilx1MjIxRSIsYW5nOiJcdTIyMjAiLGFuZDoiXHUyMjI3IixvcjoiXHUyMjI4IixjYXA6Ilx1MjIyOSIsY3VwOiJcdTIyMkEiLGludDoiXHUyMjJCIix0aGVyZTQ6Ilx1MjIzNCIsc2ltOiJcdTIyM0MiLGNvbmc6Ilx1MjI0NSIsYXN5bXA6Ilx1MjI0OCIsbmU6Ilx1MjI2MCIsZXF1aXY6Ilx1MjI2MSIsbGU6Ilx1MjI2NCIsZ2U6Ilx1MjI2NSIsc3ViOiJcdTIyODIiLHN1cDoiXHUyMjgzIixuc3ViOiJcdTIyODQiLHN1YmU6Ilx1MjI4NiIsc3VwZToiXHUyMjg3IixvcGx1czoiXHUyMjk1IixvdGltZXM6Ilx1MjI5NyIscGVycDoiXHUyMkE1IixzZG90OiJcdTIyQzUiLGxjZWlsOiJcdTIzMDgiLHJjZWlsOiJcdTIzMDkiLGxmbG9vcjoiXHUyMzBBIixyZmxvb3I6Ilx1MjMwQiIsbGFuZzoiXHUyMzI5IixyYW5nOiJcdTIzMkEiLGxvejoiXHUyNUNBIixzcGFkZXM6Ilx1MjY2MCIsY2x1YnM6Ilx1MjY2MyIsaGVhcnRzOiJcdTI2NjUiLGRpYW1zOiJcdTI2NjYiLHF1b3Q6JyInLGFtcDoiJiIsbHQ6IjwiLGd0OiI+IixPRWxpZzoiXHUwMTUyIixvZWxpZzoiXHUwMTUzIixTY2Fyb246Ilx1MDE2MCIsc2Nhcm9uOiJcdTAxNjEiLFl1bWw6Ilx1MDE3OCIsY2lyYzoiXHUwMkM2Iix0aWxkZToiXHUwMkRDIixlbnNwOiJcdTIwMDIiLGVtc3A6Ilx1MjAwMyIsdGhpbnNwOiJcdTIwMDkiLHp3bmo6Ilx1MjAwQyIsendqOiJcdTIwMEQiLGxybToiXHUyMDBFIixybG06Ilx1MjAwRiIsbmRhc2g6Ilx1MjAxMyIsbWRhc2g6Ilx1MjAxNCIsbHNxdW86Ilx1MjAxOCIscnNxdW86Ilx1MjAxOSIsc2JxdW86Ilx1MjAxQSIsbGRxdW86Ilx1MjAxQyIscmRxdW86Ilx1MjAxRCIsYmRxdW86Ilx1MjAxRSIsZGFnZ2VyOiJcdTIwMjAiLERhZ2dlcjoiXHUyMDIxIixwZXJtaWw6Ilx1MjAzMCIsbHNhcXVvOiJcdTIwMzkiLHJzYXF1bzoiXHUyMDNBIixldXJvOiJcdTIwQUMifX0pO3ZhciBqNGUsVTRlPWIoKCk9PntqNGU9WyJjZW50IiwiY29weSIsImRpdmlkZSIsImd0IiwibHQiLCJub3QiLCJwYXJhIiwidGltZXMiXX0pO2Z1bmN0aW9uIEc0ZSh0LGUsYSxpKXtsZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKFc0ZS5jYWxsKHUkLHIpKXtsZXQgcz11JFtyXSxuPSImIitzO3JldHVybiBhJiZINGUuaW5jbHVkZXMocykmJiFqNGUuaW5jbHVkZXMocykmJighaXx8ZSYmZSE9PTYxJiZ6T3QudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSk/bjpuKyI7In1yZXR1cm4iIn12YXIgVzRlLHUkLHd1LHpPdCxZNGU9YigoKT0+e3E0ZSgpO1Y0ZSgpO1U0ZSgpO1c0ZT17fS5oYXNPd25Qcm9wZXJ0eSx1JD17fTtmb3Iod3UgaW4geHUpVzRlLmNhbGwoeHUsd3UpJiYodSRbeHVbd3VdXT13dSk7ek90PS9bXlxkQS1aYS16XS99KTtmdW5jdGlvbiBaNGUodCxlLGEpe2xldCBpPUY0ZSh0LGUsYS5vbWl0T3B0aW9uYWxTZW1pY29sb25zKSxyO2lmKChhLnVzZU5hbWVkUmVmZXJlbmNlc3x8YS51c2VTaG9ydGVzdFJlZmVyZW5jZXMpJiYocj1HNGUodCxlLGEub21pdE9wdGlvbmFsU2VtaWNvbG9ucyxhLmF0dHJpYnV0ZSkpLChhLnVzZVNob3J0ZXN0UmVmZXJlbmNlc3x8IXIpJiZhLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyl7bGV0IHM9UjRlKHQsZSxhLm9taXRPcHRpb25hbFNlbWljb2xvbnMpO3MubGVuZ3RoPGkubGVuZ3RoJiYoaT1zKX1yZXR1cm4gciYmKCFhLnVzZVNob3J0ZXN0UmVmZXJlbmNlc3x8ci5sZW5ndGg8aS5sZW5ndGgpP3I6aX12YXIgWDRlPWIoKCk9PntPNGUoKTtCNGUoKTtZNGUoKX0pO2Z1bmN0aW9uIEs0ZSh0KXtyZXR1cm4iJiN4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In12YXIgUTRlPWIoKCk9Pnt9KTtmdW5jdGlvbiBDcyh0LGUpe3JldHVybiBoJCh0LE9iamVjdC5hc3NpZ24oe2Zvcm1hdDpaNGV9LGUpKX1mdW5jdGlvbiBNQjEodCxlKXtyZXR1cm4gaCQodCxPYmplY3QuYXNzaWduKHtmb3JtYXQ6SzRlfSxlKSl9dmFyIEo0ZT1iKCgpPT57TjRlKCk7WDRlKCk7UTRlKCl9KTt2YXIgTXU9YigoKT0+e0o0ZSgpfSk7ZnVuY3Rpb24gZTNlKHQsZSxhLGkpe3JldHVybiBpLnNldHRpbmdzLmJvZ3VzQ29tbWVudHM/Ijw/IitDcyh0LnZhbHVlLE9iamVjdC5hc3NpZ24oe30saS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6U090fSkpKyI+IjoiPCEtLSIrdC52YWx1ZS5yZXBsYWNlKGtPdCxyKSsiLS0+IjtmdW5jdGlvbiByKHMpe3JldHVybiBDcyhzLE9iamVjdC5hc3NpZ24oe30saS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6Q090fSkpfX12YXIga090LFNPdCxDT3QsdDNlPWIoKCk9PntNdSgpO2tPdD0vXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nLFNPdD1bIj4iXSxDT3Q9WyI8IiwiPiJdfSk7ZnVuY3Rpb24gYTNlKHQsZSxhLGkpe3JldHVybiI8ISIrKGkuc2V0dGluZ3MudXBwZXJEb2N0eXBlPyJET0NUWVBFIjoiZG9jdHlwZSIpKyhpLnNldHRpbmdzLnRpZ2h0RG9jdHlwZT8iIjoiICIpKyJodG1sPiJ9dmFyIGkzZT1iKCgpPT57fSk7ZnVuY3Rpb24gTEIxKHQpe2xldCBlPVtdLGE9U3RyaW5nKHR8fCIiKSxpPWEuaW5kZXhPZigiLCIpLHI9MCxzPSExO2Zvcig7IXM7KXtpPT09LTEmJihpPWEubGVuZ3RoLHM9ITApO2xldCBuPWEuc2xpY2UocixpKS50cmltKCk7KG58fCFzKSYmZS5wdXNoKG4pLHI9aSsxLGk9YS5pbmRleE9mKCIsIixyKX1yZXR1cm4gZX1mdW5jdGlvbiByM2UodCxlKXtsZXQgYT1lfHx7fTtyZXR1cm4odFt0Lmxlbmd0aC0xXT09PSIiP1suLi50LCIiXTp0KS5qb2luKChhLnBhZFJpZ2h0PyIgIjoiIikrIiwiKyhhLnBhZExlZnQ9PT0hMT8iIjoiICIpKS50cmltKCl9dmFyIHMzZT1iKCgpPT57fSk7ZnVuY3Rpb24gQUIxKHQpe2xldCBlPVN0cmluZyh0fHwiIikudHJpbSgpO3JldHVybiBlP2Uuc3BsaXQoL1sgXHRcblxyXGZdKy9nKTpbXX1mdW5jdGlvbiBuM2UodCl7cmV0dXJuIHQuam9pbigiICIpLnRyaW0oKX12YXIgbzNlPWIoKCk9Pnt9KTtmdW5jdGlvbiBFMCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiP3QudHlwZT09PSJ0ZXh0Ij9sM2UodC52YWx1ZSk6ITE6bDNlKHQpfWZ1bmN0aW9uIGwzZSh0KXtyZXR1cm4gdC5yZXBsYWNlKF9PdCwiIik9PT0iIn12YXIgX090LGMzZT1iKCgpPT57X090PS9bIFx0XG5cZlxyXS9nfSk7dmFyIHp1PWIoKCk9PntjM2UoKX0pO2Z1bmN0aW9uIGQzZSh0KXtyZXR1cm4gZTtmdW5jdGlvbiBlKGEsaSxyKXtsZXQgcz1hP2EuY2hpbGRyZW46VE90LG49KGl8fDApK3Qsbz1zW25dO2lmKCFyKWZvcig7byYmRTAobyk7KW4rPXQsbz1zW25dO3JldHVybiBvfX12YXIgSDEsZiQsVE90LG0kPWIoKCk9Pnt6dSgpO0gxPWQzZSgxKSxmJD1kM2UoLTEpLFRPdD1bXX0pO2Z1bmN0aW9uIGt1KHQpe3JldHVybiBlO2Z1bmN0aW9uIGUoYSxpLHIpe3JldHVybiBMT3QuY2FsbCh0LGEudGFnTmFtZSkmJnRbYS50YWdOYW1lXShhLGkscil9fXZhciBMT3QsZyQ9YigoKT0+e0xPdD17fS5oYXNPd25Qcm9wZXJ0eX0pO2Z1bmN0aW9uIGIkKHQsZSxhKXtsZXQgaT1IMShhLGUsITApO3JldHVybiFpfHxpLnR5cGUhPT0iY29tbWVudCImJiEoaS50eXBlPT09InRleHQiJiZFMChpLnZhbHVlLmNoYXJBdCgwKSkpfWZ1bmN0aW9uICRPdCh0LGUsYSl7bGV0IGk9SDEoYSxlKTtyZXR1cm4haXx8aS50eXBlIT09ImNvbW1lbnQifWZ1bmN0aW9uIEFPdCh0LGUsYSl7bGV0IGk9SDEoYSxlKTtyZXR1cm4haXx8aS50eXBlIT09ImNvbW1lbnQifWZ1bmN0aW9uIERPdCh0LGUsYSl7bGV0IGk9SDEoYSxlKTtyZXR1cm4gaT9pLnR5cGU9PT0iZWxlbWVudCImJihpLnRhZ05hbWU9PT0iYWRkcmVzcyJ8fGkudGFnTmFtZT09PSJhcnRpY2xlInx8aS50YWdOYW1lPT09ImFzaWRlInx8aS50YWdOYW1lPT09ImJsb2NrcXVvdGUifHxpLnRhZ05hbWU9PT0iZGV0YWlscyJ8fGkudGFnTmFtZT09PSJkaXYifHxpLnRhZ05hbWU9PT0iZGwifHxpLnRhZ05hbWU9PT0iZmllbGRzZXQifHxpLnRhZ05hbWU9PT0iZmlnY2FwdGlvbiJ8fGkudGFnTmFtZT09PSJmaWd1cmUifHxpLnRhZ05hbWU9PT0iZm9vdGVyInx8aS50YWdOYW1lPT09ImZvcm0ifHxpLnRhZ05hbWU9PT0iaDEifHxpLnRhZ05hbWU9PT0iaDIifHxpLnRhZ05hbWU9PT0iaDMifHxpLnRhZ05hbWU9PT0iaDQifHxpLnRhZ05hbWU9PT0iaDUifHxpLnRhZ05hbWU9PT0iaDYifHxpLnRhZ05hbWU9PT0iaGVhZGVyInx8aS50YWdOYW1lPT09Imhncm91cCJ8fGkudGFnTmFtZT09PSJociJ8fGkudGFnTmFtZT09PSJtYWluInx8aS50YWdOYW1lPT09Im1lbnUifHxpLnRhZ05hbWU9PT0ibmF2Inx8aS50YWdOYW1lPT09Im9sInx8aS50YWdOYW1lPT09InAifHxpLnRhZ05hbWU9PT0icHJlInx8aS50YWdOYW1lPT09InNlY3Rpb24ifHxpLnRhZ05hbWU9PT0idGFibGUifHxpLnRhZ05hbWU9PT0idWwiKTohYXx8IShhLnR5cGU9PT0iZWxlbWVudCImJihhLnRhZ05hbWU9PT0iYSJ8fGEudGFnTmFtZT09PSJhdWRpbyJ8fGEudGFnTmFtZT09PSJkZWwifHxhLnRhZ05hbWU9PT0iaW5zInx8YS50YWdOYW1lPT09Im1hcCJ8fGEudGFnTmFtZT09PSJub3NjcmlwdCJ8fGEudGFnTmFtZT09PSJ2aWRlbyIpKX1mdW5jdGlvbiBFT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuIWl8fGkudHlwZT09PSJlbGVtZW50IiYmaS50YWdOYW1lPT09ImxpIn1mdW5jdGlvbiBQT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuISEoaSYmaS50eXBlPT09ImVsZW1lbnQiJiYoaS50YWdOYW1lPT09ImR0Inx8aS50YWdOYW1lPT09ImRkIikpfWZ1bmN0aW9uIElPdCh0LGUsYSl7bGV0IGk9SDEoYSxlKTtyZXR1cm4haXx8aS50eXBlPT09ImVsZW1lbnQiJiYoaS50YWdOYW1lPT09ImR0Inx8aS50YWdOYW1lPT09ImRkIil9ZnVuY3Rpb24gcDNlKHQsZSxhKXtsZXQgaT1IMShhLGUpO3JldHVybiFpfHxpLnR5cGU9PT0iZWxlbWVudCImJihpLnRhZ05hbWU9PT0icnAifHxpLnRhZ05hbWU9PT0icnQiKX1mdW5jdGlvbiBOT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuIWl8fGkudHlwZT09PSJlbGVtZW50IiYmaS50YWdOYW1lPT09Im9wdGdyb3VwIn1mdW5jdGlvbiBGT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuIWl8fGkudHlwZT09PSJlbGVtZW50IiYmKGkudGFnTmFtZT09PSJvcHRpb24ifHxpLnRhZ05hbWU9PT0ib3B0Z3JvdXAiKX1mdW5jdGlvbiBPT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuISEoaSYmaS50eXBlPT09ImVsZW1lbnQiJiYoaS50YWdOYW1lPT09InRib2R5Inx8aS50YWdOYW1lPT09InRmb290IikpfWZ1bmN0aW9uIFJPdCh0LGUsYSl7bGV0IGk9SDEoYSxlKTtyZXR1cm4haXx8aS50eXBlPT09ImVsZW1lbnQiJiYoaS50YWdOYW1lPT09InRib2R5Inx8aS50YWdOYW1lPT09InRmb290Iil9ZnVuY3Rpb24gQk90KHQsZSxhKXtyZXR1cm4hSDEoYSxlKX1mdW5jdGlvbiBIT3QodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuIWl8fGkudHlwZT09PSJlbGVtZW50IiYmaS50YWdOYW1lPT09InRyIn1mdW5jdGlvbiBoM2UodCxlLGEpe2xldCBpPUgxKGEsZSk7cmV0dXJuIWl8fGkudHlwZT09PSJlbGVtZW50IiYmKGkudGFnTmFtZT09PSJ0ZCJ8fGkudGFnTmFtZT09PSJ0aCIpfXZhciBsNSx2JD1iKCgpPT57enUoKTttJCgpO2ckKCk7bDU9a3Uoe2JvZHk6QU90LGNhcHRpb246YiQsY29sZ3JvdXA6YiQsZGQ6SU90LGR0OlBPdCxoZWFkOmIkLGh0bWw6JE90LGxpOkVPdCxvcHRncm91cDpOT3Qsb3B0aW9uOkZPdCxwOkRPdCxycDpwM2UscnQ6cDNlLHRib2R5OlJPdCx0ZDpoM2UsdGZvb3Q6Qk90LHRoOmgzZSx0aGVhZDpPT3QsdHI6SE90fSl9KTtmdW5jdGlvbiBxT3QodCl7bGV0IGU9SDEodCwtMSk7cmV0dXJuIWV8fGUudHlwZSE9PSJjb21tZW50In1mdW5jdGlvbiBWT3QodCl7bGV0IGU9bmV3IFNldDtmb3IobGV0IGkgb2YgdC5jaGlsZHJlbilpZihpLnR5cGU9PT0iZWxlbWVudCImJihpLnRhZ05hbWU9PT0iYmFzZSJ8fGkudGFnTmFtZT09PSJ0aXRsZSIpKXtpZihlLmhhcyhpLnRhZ05hbWUpKXJldHVybiExO2UuYWRkKGkudGFnTmFtZSl9bGV0IGE9dC5jaGlsZHJlblswXTtyZXR1cm4hYXx8YS50eXBlPT09ImVsZW1lbnQifWZ1bmN0aW9uIGpPdCh0KXtsZXQgZT1IMSh0LC0xLCEwKTtyZXR1cm4hZXx8ZS50eXBlIT09ImNvbW1lbnQiJiYhKGUudHlwZT09PSJ0ZXh0IiYmRTAoZS52YWx1ZS5jaGFyQXQoMCkpKSYmIShlLnR5cGU9PT0iZWxlbWVudCImJihlLnRhZ05hbWU9PT0ibWV0YSJ8fGUudGFnTmFtZT09PSJsaW5rInx8ZS50YWdOYW1lPT09InNjcmlwdCJ8fGUudGFnTmFtZT09PSJzdHlsZSJ8fGUudGFnTmFtZT09PSJ0ZW1wbGF0ZSIpKX1mdW5jdGlvbiBVT3QodCxlLGEpe2xldCBpPWYkKGEsZSkscj1IMSh0LC0xLCEwKTtyZXR1cm4gYSYmaSYmaS50eXBlPT09ImVsZW1lbnQiJiZpLnRhZ05hbWU9PT0iY29sZ3JvdXAiJiZsNShpLGEuY2hpbGRyZW4uaW5kZXhPZihpKSxhKT8hMTohIShyJiZyLnR5cGU9PT0iZWxlbWVudCImJnIudGFnTmFtZT09PSJjb2wiKX1mdW5jdGlvbiBXT3QodCxlLGEpe2xldCBpPWYkKGEsZSkscj1IMSh0LC0xKTtyZXR1cm4gYSYmaSYmaS50eXBlPT09ImVsZW1lbnQiJiYoaS50YWdOYW1lPT09InRoZWFkInx8aS50YWdOYW1lPT09InRib2R5IikmJmw1KGksYS5jaGlsZHJlbi5pbmRleE9mKGkpLGEpPyExOiEhKHImJnIudHlwZT09PSJlbGVtZW50IiYmci50YWdOYW1lPT09InRyIil9dmFyIHUzZSxmM2U9YigoKT0+e3p1KCk7bSQoKTt2JCgpO2ckKCk7dTNlPWt1KHtib2R5OmpPdCxjb2xncm91cDpVT3QsaGVhZDpWT3QsaHRtbDpxT3QsdGJvZHk6V090fSl9KTtmdW5jdGlvbiBtM2UodCxlLGEsaSl7bGV0IHI9aS5zY2hlbWEscz1yLnNwYWNlPT09InN2ZyI/ITE6aS5zZXR0aW5ncy5vbWl0T3B0aW9uYWxUYWdzLG49ci5zcGFjZT09PSJzdmciP2kuc2V0dGluZ3MuY2xvc2VFbXB0eUVsZW1lbnRzOmkuc2V0dGluZ3Mudm9pZHMuaW5jbHVkZXModC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpLG89W10sZDtyLnNwYWNlPT09Imh0bWwiJiZ0LnRhZ05hbWU9PT0ic3ZnIiYmKGkuc2NoZW1hPXl1KTtsZXQgYz1HT3QoaSx0LnByb3BlcnRpZXMpLHA9aS5hbGwoci5zcGFjZT09PSJodG1sIiYmdC50YWdOYW1lPT09InRlbXBsYXRlIj90LmNvbnRlbnQ6dCk7cmV0dXJuIGkuc2NoZW1hPXIscCYmKG49ITEpLChjfHwhc3x8IXUzZSh0LGUsYSkpJiYoby5wdXNoKCI8Iix0LnRhZ05hbWUsYz8iICIrYzoiIiksbiYmKHIuc3BhY2U9PT0ic3ZnInx8aS5zZXR0aW5ncy5jbG9zZVNlbGZDbG9zaW5nKSYmKGQ9Yy5jaGFyQXQoYy5sZW5ndGgtMSksKCFpLnNldHRpbmdzLnRpZ2h0U2VsZkNsb3Npbmd8fGQ9PT0iLyJ8fGQmJmQhPT0nIicmJmQhPT0iJyIpJiZvLnB1c2goIiAiKSxvLnB1c2goIi8iKSksby5wdXNoKCI+IikpLG8ucHVzaChwKSwhbiYmKCFzfHwhbDUodCxlLGEpKSYmby5wdXNoKCI8LyIrdC50YWdOYW1lKyI+Iiksby5qb2luKCIiKX1mdW5jdGlvbiBHT3QodCxlKXtsZXQgYT1bXSxpPS0xLHI7aWYoZSl7Zm9yKHIgaW4gZSlpZihlW3JdIT09bnVsbCYmZVtyXSE9PXZvaWQgMCl7bGV0IHM9WU90KHQscixlW3JdKTtzJiZhLnB1c2gocyl9fWZvcig7KytpPGEubGVuZ3RoOyl7bGV0IHM9dC5zZXR0aW5ncy50aWdodEF0dHJpYnV0ZXM/YVtpXS5jaGFyQXQoYVtpXS5sZW5ndGgtMSk6dm9pZCAwO2khPT1hLmxlbmd0aC0xJiZzIT09JyInJiZzIT09IiciJiYoYVtpXSs9IiAiKX1yZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBZT3QodCxlLGEpe2xldCBpPWQkKHQuc2NoZW1hLGUpLHI9dC5zZXR0aW5ncy5hbGxvd1BhcnNlRXJyb3JzJiZ0LnNjaGVtYS5zcGFjZT09PSJodG1sIj8wOjEscz10LnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycz8wOjEsbj10LnF1b3RlLG87aWYoaS5vdmVybG9hZGVkQm9vbGVhbiYmKGE9PT1pLmF0dHJpYnV0ZXx8YT09PSIiKT9hPSEwOihpLmJvb2xlYW58fGkub3ZlcmxvYWRlZEJvb2xlYW4pJiYodHlwZW9mIGEhPSJzdHJpbmcifHxhPT09aS5hdHRyaWJ1dGV8fGE9PT0iIikmJihhPSEhYSksYT09bnVsbHx8YT09PSExfHx0eXBlb2YgYT09Im51bWJlciImJk51bWJlci5pc05hTihhKSlyZXR1cm4iIjtsZXQgZD1DcyhpLmF0dHJpYnV0ZSxPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcyx7c3Vic2V0OlN1Lm5hbWVbcl1bc119KSk7cmV0dXJuIGE9PT0hMHx8KGE9QXJyYXkuaXNBcnJheShhKT8oaS5jb21tYVNlcGFyYXRlZD9yM2U6bjNlKShhLHtwYWRMZWZ0OiF0LnNldHRpbmdzLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0c30pOlN0cmluZyhhKSx0LnNldHRpbmdzLmNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzJiYhYSk/ZDoodC5zZXR0aW5ncy5wcmVmZXJVbnF1b3RlZCYmKG89Q3MoYSxPYmplY3QuYXNzaWduKHt9LHQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcyx7YXR0cmlidXRlOiEwLHN1YnNldDpTdS51bnF1b3RlZFtyXVtzXX0pKSksbyE9PWEmJih0LnNldHRpbmdzLnF1b3RlU21hcnQmJk4zKGEsbik+TjMoYSx0LmFsdGVybmF0aXZlKSYmKG49dC5hbHRlcm5hdGl2ZSksbz1uK0NzKGEsT2JqZWN0LmFzc2lnbih7fSx0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMse3N1YnNldDoobj09PSInIj9TdS5zaW5nbGU6U3UuZG91YmxlKVtyXVtzXSxhdHRyaWJ1dGU6ITB9KSkrbiksZCsobyYmIj0iK28pKX12YXIgU3UsZzNlPWIoKCk9PntyVCgpO3MzZSgpO3AkKCk7bzNlKCk7TXUoKTt2JCgpO2YzZSgpO1N1PXtuYW1lOltbYAkKXGZcciAmLz0+YC5zcGxpdCgiIiksYAkKXGZcciAiJicvPT5cYGAuc3BsaXQoIiIpXSxbYFwwCQpcZlxyICImJy88PT5gLnNwbGl0KCIiKSxgXDAJClxmXHIgIiYnLzw9PlxgYC5zcGxpdCgiIildXSx1bnF1b3RlZDpbW2AJClxmXHIgJj5gLnNwbGl0KCIiKSxgXDAJClxmXHIgIiYnPD0+XGBgLnNwbGl0KCIiKV0sW2BcMAkKXGZcciAiJic8PT5cYGAuc3BsaXQoIiIpLGBcMAkKXGZcciAiJic8PT5cYGAuc3BsaXQoIiIpXV0sc2luZ2xlOltbIiYnIi5zcGxpdCgiIiksIlwiJidgIi5zcGxpdCgiIildLFsiXDAmJyIuc3BsaXQoIiIpLCJcMFwiJidgIi5zcGxpdCgiIildXSxkb3VibGU6W1snIiYnLnNwbGl0KCIiKSwiXCImJ2AiLnNwbGl0KCIiKV0sWydcMCImJy5zcGxpdCgiIiksIlwwXCImJ2AiLnNwbGl0KCIiKV1dfX0pO2Z1bmN0aW9uIEN1KHQsZSxhLGkpe3JldHVybiBhJiZhLnR5cGU9PT0iZWxlbWVudCImJihhLnRhZ05hbWU9PT0ic2NyaXB0Inx8YS50YWdOYW1lPT09InN0eWxlIik/dC52YWx1ZTpDcyh0LnZhbHVlLE9iamVjdC5hc3NpZ24oe30saS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLHtzdWJzZXQ6Wk90fSkpfXZhciBaT3QseSQ9YigoKT0+e011KCk7Wk90PVsiPCIsIiYiXX0pO2Z1bmN0aW9uIGIzZSh0LGUsYSxpKXtyZXR1cm4gaS5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWw/dC52YWx1ZTpDdSh0LGUsYSxpKX12YXIgdjNlPWIoKCk9Pnt5JCgpfSk7ZnVuY3Rpb24geTNlKHQsZSxhLGkpe3JldHVybiBpLmFsbCh0KX12YXIgeDNlPWIoKCk9Pnt9KTtmdW5jdGlvbiBYT3QodCl7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlLCBub3QgYCIrdCsiYCIpfWZ1bmN0aW9uIEtPdCh0KXtsZXQgZT10O3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBpbGUgdW5rbm93biBub2RlIGAiK2UudHlwZSsiYCIpfXZhciB3M2UsTTNlPWIoKCk9PnttVCgpO3QzZSgpO2kzZSgpO2czZSgpO3YzZSgpO3gzZSgpO3kkKCk7dzNlPVM5KCJ0eXBlIix7aW52YWxpZDpYT3QsdW5rbm93bjpLT3QsaGFuZGxlcnM6e2NvbW1lbnQ6ZTNlLGRvY3R5cGU6YTNlLGVsZW1lbnQ6bTNlLHJhdzpiM2Uscm9vdDp5M2UsdGV4dDpDdX19KX0pO2Z1bmN0aW9uIHgkKHQsZSl7bGV0IGE9ZXx8UU90LGk9YS5xdW90ZXx8JyInLHI9aT09PSciJz8iJyI6JyInO2lmKGkhPT0nIicmJmkhPT0iJyIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHF1b3RlIGAiK2krImAsIGV4cGVjdGVkIGAnYCBvciBgXCJgIik7cmV0dXJue29uZTp0UnQsYWxsOmFSdCxzZXR0aW5nczp7b21pdE9wdGlvbmFsVGFnczphLm9taXRPcHRpb25hbFRhZ3N8fCExLGFsbG93UGFyc2VFcnJvcnM6YS5hbGxvd1BhcnNlRXJyb3JzfHwhMSxhbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM6YS5hbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnN8fCExLHF1b3RlU21hcnQ6YS5xdW90ZVNtYXJ0fHwhMSxwcmVmZXJVbnF1b3RlZDphLnByZWZlclVucXVvdGVkfHwhMSx0aWdodEF0dHJpYnV0ZXM6YS50aWdodEF0dHJpYnV0ZXN8fCExLHVwcGVyRG9jdHlwZTphLnVwcGVyRG9jdHlwZXx8ITEsdGlnaHREb2N0eXBlOmEudGlnaHREb2N0eXBlfHwhMSxib2d1c0NvbW1lbnRzOmEuYm9ndXNDb21tZW50c3x8ITEsdGlnaHRDb21tYVNlcGFyYXRlZExpc3RzOmEudGlnaHRDb21tYVNlcGFyYXRlZExpc3RzfHwhMSx0aWdodFNlbGZDbG9zaW5nOmEudGlnaHRTZWxmQ2xvc2luZ3x8ITEsY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXM6YS5jb2xsYXBzZUVtcHR5QXR0cmlidXRlc3x8ITEsYWxsb3dEYW5nZXJvdXNIdG1sOmEuYWxsb3dEYW5nZXJvdXNIdG1sfHwhMSx2b2lkczphLnZvaWRzfHx5NGUsY2hhcmFjdGVyUmVmZXJlbmNlczphLmNoYXJhY3RlclJlZmVyZW5jZXN8fEpPdCxjbG9zZVNlbGZDbG9zaW5nOmEuY2xvc2VTZWxmQ2xvc2luZ3x8ITEsY2xvc2VFbXB0eUVsZW1lbnRzOmEuY2xvc2VFbXB0eUVsZW1lbnRzfHwhMX0sc2NoZW1hOmEuc3BhY2U9PT0ic3ZnIj95dTpQNGUscXVvdGU6aSxhbHRlcm5hdGl2ZTpyfS5vbmUoQXJyYXkuaXNBcnJheSh0KT97dHlwZToicm9vdCIsY2hpbGRyZW46dH06dCx2b2lkIDAsdm9pZCAwKX1mdW5jdGlvbiB0UnQodCxlLGEpe3JldHVybiB3M2UodCxlLGEsdGhpcyl9ZnVuY3Rpb24gYVJ0KHQpe2xldCBlPVtdLGE9dCYmdC5jaGlsZHJlbnx8ZVJ0LGk9LTE7Zm9yKDsrK2k8YS5sZW5ndGg7KWVbaV09dGhpcy5vbmUoYVtpXSxpLHQpO3JldHVybiBlLmpvaW4oIiIpfXZhciBRT3QsSk90LGVSdCx6M2U9YigoKT0+e3g0ZSgpO3AkKCk7TTNlKCk7UU90PXt9LEpPdD17fSxlUnQ9W119KTt2YXIgazNlPWIoKCk9Pnt6M2UoKX0pO2Z1bmN0aW9uIFgzKHQpe2xldCBlPXRoaXMse2hhbmRsZXJzOmEsc2FuaXRpemU6aSwuLi5yfT10fHxpUnQscz0hMSxuO3R5cGVvZiBpPT0iYm9vbGVhbiI/cz0haTppJiYobj1pKSxlLmNvbXBpbGVyPW87ZnVuY3Rpb24gbyhkLGMpe2xldCBwPVFMKGQse2hhbmRsZXJzOmEsYWxsb3dEYW5nZXJvdXNIdG1sOnN9KSxsPXM/cDpXTChwLG4pLGY9eCQobCx7Li4ucixhbGxvd0Rhbmdlcm91c0h0bWw6c30pO3JldHVybiBjLmV4dG5hbWUmJihjLmV4dG5hbWU9Ii5odG1sIiksZCYmZC50eXBlPT09InJvb3QiJiZmJiYvW15cclxuXS8udGVzdChmLmNoYXJBdChmLmxlbmd0aC0xKSk/ZitgCmA6Zn19dmFyIGlSdCxTM2U9YigoKT0+e2YwZSgpO3Y0ZSgpO2szZSgpO2lSdD17fX0pO3ZhciBDM2U9YigoKT0+e1MzZSgpfSk7ZnVuY3Rpb24gSzModCl7bGV0IGU9dGhpcztlLmNvbXBpbGVyPWE7ZnVuY3Rpb24gYShpKXtyZXR1cm4gTlQoaSx7Li4uZS5kYXRhKCJzZXR0aW5ncyIpLC4uLnQsZXh0ZW5zaW9uczplLmRhdGEoInRvTWFya2Rvd25FeHRlbnNpb25zIil8fFtdfSl9fXZhciBfM2U9YigoKT0+e0k5KCl9KTt2YXIgVDNlPWIoKCk9PntfM2UoKX0pO2Z1bmN0aW9uIHJSdCh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgYT1hcmd1bWVudHNbZV07Zm9yKHZhciBpIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09YVtpXSl9cmV0dXJuIHR9ZnVuY3Rpb24gdyQodCxlKXtyZXR1cm4gQXJyYXkoZSsxKS5qb2luKHQpfWZ1bmN0aW9uIEwzZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9eXG4qLywiIil9ZnVuY3Rpb24gJDNlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjAmJnRbZS0xXT09PWAKYDspZS0tO3JldHVybiB0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIEEzZSh0KXtyZXR1cm4gJDNlKEwzZSh0KSl9ZnVuY3Rpb24gTSQodCl7cmV0dXJuIHokKHQsc1J0KX1mdW5jdGlvbiBFM2UodCl7cmV0dXJuIHokKHQsRDNlKX1mdW5jdGlvbiBuUnQodCl7cmV0dXJuIEkzZSh0LEQzZSl9ZnVuY3Rpb24gb1J0KHQpe3JldHVybiB6JCh0LFAzZSl9ZnVuY3Rpb24gbFJ0KHQpe3JldHVybiBJM2UodCxQM2UpfWZ1bmN0aW9uIHokKHQsZSl7cmV0dXJuIGUuaW5kZXhPZih0Lm5vZGVOYW1lKT49MH1mdW5jdGlvbiBJM2UodCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpLmxlbmd0aH0pfWZ1bmN0aW9uIF91KHQpe3JldHVybiB0P3QucmVwbGFjZSgvKFxuK1xzKikrL2csYApgKToiIn1mdW5jdGlvbiBOM2UodCl7dGhpcy5vcHRpb25zPXQsdGhpcy5fa2VlcD1bXSx0aGlzLl9yZW1vdmU9W10sdGhpcy5ibGFua1J1bGU9e3JlcGxhY2VtZW50OnQuYmxhbmtSZXBsYWNlbWVudH0sdGhpcy5rZWVwUmVwbGFjZW1lbnQ9dC5rZWVwUmVwbGFjZW1lbnQsdGhpcy5kZWZhdWx0UnVsZT17cmVwbGFjZW1lbnQ6dC5kZWZhdWx0UmVwbGFjZW1lbnR9LHRoaXMuYXJyYXk9W107Zm9yKHZhciBlIGluIHQucnVsZXMpdGhpcy5hcnJheS5wdXNoKHQucnVsZXNbZV0pfWZ1bmN0aW9uIGskKHQsZSxhKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFtpXTtpZihjUnQocixlLGEpKXJldHVybiByfX1mdW5jdGlvbiBjUnQodCxlLGEpe3ZhciBpPXQuZmlsdGVyO2lmKHR5cGVvZiBpPT0ic3RyaW5nIil7aWYoaT09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2lmKGkuaW5kZXhPZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPi0xKXJldHVybiEwfWVsc2UgaWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpe2lmKGkuY2FsbCh0LGUsYSkpcmV0dXJuITB9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJgZmlsdGVyYCBuZWVkcyB0byBiZSBhIHN0cmluZywgYXJyYXksIG9yIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZFJ0KHQpe3ZhciBlPXQuZWxlbWVudCxhPXQuaXNCbG9jayxpPXQuaXNWb2lkLHI9dC5pc1ByZXx8ZnVuY3Rpb24obCl7cmV0dXJuIGwubm9kZU5hbWU9PT0iUFJFIn07aWYoISghZS5maXJzdENoaWxkfHxyKGUpKSl7Zm9yKHZhciBzPW51bGwsbj0hMSxvPW51bGwsZD1GM2UobyxlLHIpO2QhPT1lOyl7aWYoZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT00KXt2YXIgYz1kLmRhdGEucmVwbGFjZSgvWyBcclxuXHRdKy9nLCIgIik7aWYoKCFzfHwvICQvLnRlc3Qocy5kYXRhKSkmJiFuJiZjWzBdPT09IiAiJiYoYz1jLnN1YnN0cigxKSksIWMpe2Q9UyQoZCk7Y29udGludWV9ZC5kYXRhPWMscz1kfWVsc2UgaWYoZC5ub2RlVHlwZT09PTEpYShkKXx8ZC5ub2RlTmFtZT09PSJCUiI/KHMmJihzLmRhdGE9cy5kYXRhLnJlcGxhY2UoLyAkLywiIikpLHM9bnVsbCxuPSExKTppKGQpfHxyKGQpPyhzPW51bGwsbj0hMCk6cyYmKG49ITEpO2Vsc2V7ZD1TJChkKTtjb250aW51ZX12YXIgcD1GM2UobyxkLHIpO289ZCxkPXB9cyYmKHMuZGF0YT1zLmRhdGEucmVwbGFjZSgvICQvLCIiKSxzLmRhdGF8fFMkKHMpKX19ZnVuY3Rpb24gUyQodCl7dmFyIGU9dC5uZXh0U2libGluZ3x8dC5wYXJlbnROb2RlO3JldHVybiB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksZX1mdW5jdGlvbiBGM2UodCxlLGEpe3JldHVybiB0JiZ0LnBhcmVudE5vZGU9PT1lfHxhKGUpP2UubmV4dFNpYmxpbmd8fGUucGFyZW50Tm9kZTplLmZpcnN0Q2hpbGR8fGUubmV4dFNpYmxpbmd8fGUucGFyZW50Tm9kZX1mdW5jdGlvbiBwUnQoKXt2YXIgdD1DJC5ET01QYXJzZXIsZT0hMTt0cnl7bmV3IHQoKS5wYXJzZUZyb21TdHJpbmcoIiIsInRleHQvaHRtbCIpJiYoZT0hMCl9Y2F0Y2h7fXJldHVybiBlfWZ1bmN0aW9uIGhSdCgpe3ZhciB0PWZ1bmN0aW9uKCl7fTtyZXR1cm4gdVJ0KCk/dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBhPW5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTtyZXR1cm4gYS5kZXNpZ25Nb2RlPSJvbiIsYS5vcGVuKCksYS53cml0ZShlKSxhLmNsb3NlKCksYX06dC5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBhPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7cmV0dXJuIGEub3BlbigpLGEud3JpdGUoZSksYS5jbG9zZSgpLGF9LHR9ZnVuY3Rpb24gdVJ0KCl7dmFyIHQ9ITE7dHJ5e2RvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpfWNhdGNoe0MkLkFjdGl2ZVhPYmplY3QmJih0PSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBtUnQodCxlKXt2YXIgYTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciBpPWdSdCgpLnBhcnNlRnJvbVN0cmluZygnPHgtdHVybmRvd24gaWQ9InR1cm5kb3duLXJvb3QiPicrdCsiPC94LXR1cm5kb3duPiIsInRleHQvaHRtbCIpO2E9aS5nZXRFbGVtZW50QnlJZCgidHVybmRvd24tcm9vdCIpfWVsc2UgYT10LmNsb25lTm9kZSghMCk7cmV0dXJuIGRSdCh7ZWxlbWVudDphLGlzQmxvY2s6TSQsaXNWb2lkOkUzZSxpc1ByZTplLnByZWZvcm1hdHRlZENvZGU/YlJ0Om51bGx9KSxhfWZ1bmN0aW9uIGdSdCgpe3JldHVybiBfJD1fJHx8bmV3IGZSdCxfJH1mdW5jdGlvbiBiUnQodCl7cmV0dXJuIHQubm9kZU5hbWU9PT0iUFJFInx8dC5ub2RlTmFtZT09PSJDT0RFIn1mdW5jdGlvbiB2UnQodCxlKXtyZXR1cm4gdC5pc0Jsb2NrPU0kKHQpLHQuaXNDb2RlPXQubm9kZU5hbWU9PT0iQ09ERSJ8fHQucGFyZW50Tm9kZS5pc0NvZGUsdC5pc0JsYW5rPXlSdCh0KSx0LmZsYW5raW5nV2hpdGVzcGFjZT14UnQodCxlKSx0fWZ1bmN0aW9uIHlSdCh0KXtyZXR1cm4hRTNlKHQpJiYhb1J0KHQpJiYvXlxzKiQvaS50ZXN0KHQudGV4dENvbnRlbnQpJiYhblJ0KHQpJiYhbFJ0KHQpfWZ1bmN0aW9uIHhSdCh0LGUpe2lmKHQuaXNCbG9ja3x8ZS5wcmVmb3JtYXR0ZWRDb2RlJiZ0LmlzQ29kZSlyZXR1cm57bGVhZGluZzoiIix0cmFpbGluZzoiIn07dmFyIGE9d1J0KHQudGV4dENvbnRlbnQpO3JldHVybiBhLmxlYWRpbmdBc2NpaSYmTzNlKCJsZWZ0Iix0LGUpJiYoYS5sZWFkaW5nPWEubGVhZGluZ05vbkFzY2lpKSxhLnRyYWlsaW5nQXNjaWkmJk8zZSgicmlnaHQiLHQsZSkmJihhLnRyYWlsaW5nPWEudHJhaWxpbmdOb25Bc2NpaSkse2xlYWRpbmc6YS5sZWFkaW5nLHRyYWlsaW5nOmEudHJhaWxpbmd9fWZ1bmN0aW9uIHdSdCh0KXt2YXIgZT10Lm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7cmV0dXJue2xlYWRpbmc6ZVsxXSxsZWFkaW5nQXNjaWk6ZVsyXSxsZWFkaW5nTm9uQXNjaWk6ZVszXSx0cmFpbGluZzplWzRdLHRyYWlsaW5nTm9uQXNjaWk6ZVs1XSx0cmFpbGluZ0FzY2lpOmVbNl19fWZ1bmN0aW9uIE8zZSh0LGUsYSl7dmFyIGkscixzO3JldHVybiB0PT09ImxlZnQiPyhpPWUucHJldmlvdXNTaWJsaW5nLHI9LyAkLyk6KGk9ZS5uZXh0U2libGluZyxyPS9eIC8pLGkmJihpLm5vZGVUeXBlPT09Mz9zPXIudGVzdChpLm5vZGVWYWx1ZSk6YS5wcmVmb3JtYXR0ZWRDb2RlJiZpLm5vZGVOYW1lPT09IkNPREUiP3M9ITE6aS5ub2RlVHlwZT09PTEmJiFNJChpKSYmKHM9ci50ZXN0KGkudGV4dENvbnRlbnQpKSksc31mdW5jdGlvbiBUdSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBUdSkpcmV0dXJuIG5ldyBUdSh0KTt2YXIgZT17cnVsZXM6RzIsaGVhZGluZ1N0eWxlOiJzZXRleHQiLGhyOiIqICogKiIsYnVsbGV0TGlzdE1hcmtlcjoiKiIsY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIixmZW5jZToiYGBgIixlbURlbGltaXRlcjoiXyIsc3Ryb25nRGVsaW1pdGVyOiIqKiIsbGlua1N0eWxlOiJpbmxpbmVkIixsaW5rUmVmZXJlbmNlU3R5bGU6ImZ1bGwiLGJyOiIgICIscHJlZm9ybWF0dGVkQ29kZTohMSxibGFua1JlcGxhY2VtZW50OmZ1bmN0aW9uKGEsaSl7cmV0dXJuIGkuaXNCbG9jaz9gCgpgOiIifSxrZWVwUmVwbGFjZW1lbnQ6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaS5pc0Jsb2NrP2AKCmAraS5vdXRlckhUTUwrYAoKYDppLm91dGVySFRNTH0sZGVmYXVsdFJlcGxhY2VtZW50OmZ1bmN0aW9uKGEsaSl7cmV0dXJuIGkuaXNCbG9jaz9gCgpgK2ErYAoKYDphfX07dGhpcy5vcHRpb25zPXJSdCh7fSxlLHQpLHRoaXMucnVsZXM9bmV3IE4zZSh0aGlzLm9wdGlvbnMpfWZ1bmN0aW9uIFIzZSh0KXt2YXIgZT10aGlzO3JldHVybiBNUnQuY2FsbCh0LmNoaWxkTm9kZXMsZnVuY3Rpb24oYSxpKXtpPW5ldyB2UnQoaSxlLm9wdGlvbnMpO3ZhciByPSIiO3JldHVybiBpLm5vZGVUeXBlPT09Mz9yPWkuaXNDb2RlP2kubm9kZVZhbHVlOmUuZXNjYXBlKGkubm9kZVZhbHVlKTppLm5vZGVUeXBlPT09MSYmKHI9U1J0LmNhbGwoZSxpKSksQjNlKGEscil9LCIiKX1mdW5jdGlvbiBrUnQodCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3R5cGVvZiBhLmFwcGVuZD09ImZ1bmN0aW9uIiYmKHQ9QjNlKHQsYS5hcHBlbmQoZS5vcHRpb25zKSkpfSksdC5yZXBsYWNlKC9eW1x0XHJcbl0rLywiIikucmVwbGFjZSgvW1x0XHJcblxzXSskLywiIil9ZnVuY3Rpb24gU1J0KHQpe3ZhciBlPXRoaXMucnVsZXMuZm9yTm9kZSh0KSxhPVIzZS5jYWxsKHRoaXMsdCksaT10LmZsYW5raW5nV2hpdGVzcGFjZTtyZXR1cm4oaS5sZWFkaW5nfHxpLnRyYWlsaW5nKSYmKGE9YS50cmltKCkpLGkubGVhZGluZytlLnJlcGxhY2VtZW50KGEsdCx0aGlzLm9wdGlvbnMpK2kudHJhaWxpbmd9ZnVuY3Rpb24gQjNlKHQsZSl7dmFyIGE9JDNlKHQpLGk9TDNlKGUpLHI9TWF0aC5tYXgodC5sZW5ndGgtYS5sZW5ndGgsZS5sZW5ndGgtaS5sZW5ndGgpLHM9YAoKYC5zdWJzdHJpbmcoMCxyKTtyZXR1cm4gYStzK2l9ZnVuY3Rpb24gQ1J0KHQpe3JldHVybiB0IT1udWxsJiYodHlwZW9mIHQ9PSJzdHJpbmcifHx0Lm5vZGVUeXBlJiYodC5ub2RlVHlwZT09PTF8fHQubm9kZVR5cGU9PT05fHx0Lm5vZGVUeXBlPT09MTEpKX12YXIgc1J0LEQzZSxQM2UsRzIsQyQsZlJ0LF8kLE1SdCx6UnQsTHUsSDNlPWIoKCk9PntzUnQ9WyJBRERSRVNTIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCTE9DS1FVT1RFIiwiQk9EWSIsIkNBTlZBUyIsIkNFTlRFUiIsIkREIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPT1RFUiIsIkZPUk0iLCJGUkFNRVNFVCIsIkgxIiwiSDIiLCJIMyIsIkg0IiwiSDUiLCJINiIsIkhFQURFUiIsIkhHUk9VUCIsIkhSIiwiSFRNTCIsIklTSU5ERVgiLCJMSSIsIk1BSU4iLCJNRU5VIiwiTkFWIiwiTk9GUkFNRVMiLCJOT1NDUklQVCIsIk9MIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlNFQ1RJT04iLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURk9PVCIsIlRIIiwiVEhFQUQiLCJUUiIsIlVMIl07RDNlPVsiQVJFQSIsIkJBU0UiLCJCUiIsIkNPTCIsIkNPTU1BTkQiLCJFTUJFRCIsIkhSIiwiSU1HIiwiSU5QVVQiLCJLRVlHRU4iLCJMSU5LIiwiTUVUQSIsIlBBUkFNIiwiU09VUkNFIiwiVFJBQ0siLCJXQlIiXTtQM2U9WyJBIiwiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUSCIsIlREIiwiSUZSQU1FIiwiU0NSSVBUIiwiQVVESU8iLCJWSURFTyJdO0cyPXt9O0cyLnBhcmFncmFwaD17ZmlsdGVyOiJwIixyZXBsYWNlbWVudDpmdW5jdGlvbih0KXtyZXR1cm5gCgpgK3QrYAoKYH19LEcyLmxpbmVCcmVhaz17ZmlsdGVyOiJiciIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiBhLmJyK2AKYH19LEcyLmhlYWRpbmc9e2ZpbHRlcjpbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXt2YXIgaT1OdW1iZXIoZS5ub2RlTmFtZS5jaGFyQXQoMSkpO2lmKGEuaGVhZGluZ1N0eWxlPT09InNldGV4dCImJmk8Myl7dmFyIHI9dyQoaT09PTE/Ij0iOiItIix0Lmxlbmd0aCk7cmV0dXJuYAoKYCt0K2AKYCtyK2AKCmB9ZWxzZSByZXR1cm5gCgpgK3ckKCIjIixpKSsiICIrdCtgCgpgfX0sRzIuYmxvY2txdW90ZT17ZmlsdGVyOiJibG9ja3F1b3RlIixyZXBsYWNlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdD1BM2UodCkucmVwbGFjZSgvXi9nbSwiPiAiKSxgCgpgK3QrYAoKYH19LEcyLmxpc3Q9e2ZpbHRlcjpbInVsIiwib2wiXSxyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUpe3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gYS5ub2RlTmFtZT09PSJMSSImJmEubGFzdEVsZW1lbnRDaGlsZD09PWU/YApgK3Q6YAoKYCt0K2AKCmB9fSxHMi5saXN0SXRlbT17ZmlsdGVyOiJsaSIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe3ZhciBpPWEuYnVsbGV0TGlzdE1hcmtlcisiICAgIixyPWUucGFyZW50Tm9kZTtpZihyLm5vZGVOYW1lPT09Ik9MIil7dmFyIHM9ci5nZXRBdHRyaWJ1dGUoInN0YXJ0Iiksbj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHIuY2hpbGRyZW4sZSk7aT0ocz9OdW1iZXIocykrbjpuKzEpKyIuICAifXZhciBvPS9cbiQvLnRlc3QodCk7cmV0dXJuIHQ9QTNlKHQpKyhvP2AKYDoiIiksdD10LnJlcGxhY2UoL1xuL2dtLGAKYCsiICIucmVwZWF0KGkubGVuZ3RoKSksaSt0KyhlLm5leHRTaWJsaW5nP2AKYDoiIil9fSxHMi5pbmRlbnRlZENvZGVCbG9jaz17ZmlsdGVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29kZUJsb2NrU3R5bGU9PT0iaW5kZW50ZWQiJiZ0Lm5vZGVOYW1lPT09IlBSRSImJnQuZmlyc3RDaGlsZCYmdC5maXJzdENoaWxkLm5vZGVOYW1lPT09IkNPREUifSxyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUsYSl7cmV0dXJuYAoKICAgIGArZS5maXJzdENoaWxkLnRleHRDb250ZW50LnJlcGxhY2UoL1xuL2csYAogICAgYCkrYAoKYH19LEcyLmZlbmNlZENvZGVCbG9jaz17ZmlsdGVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29kZUJsb2NrU3R5bGU9PT0iZmVuY2VkIiYmdC5ub2RlTmFtZT09PSJQUkUiJiZ0LmZpcnN0Q2hpbGQmJnQuZmlyc3RDaGlsZC5ub2RlTmFtZT09PSJDT0RFIn0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIixyPShpLm1hdGNoKC9sYW5ndWFnZS0oXFMrKS8pfHxbbnVsbCwiIl0pWzFdLHM9ZS5maXJzdENoaWxkLnRleHRDb250ZW50LG49YS5mZW5jZS5jaGFyQXQoMCksbz0zLGQ9bmV3IFJlZ0V4cCgiXiIrbisiezMsfSIsImdtIiksYztjPWQuZXhlYyhzKTspY1swXS5sZW5ndGg+PW8mJihvPWNbMF0ubGVuZ3RoKzEpO3ZhciBwPXckKG4sbyk7cmV0dXJuYAoKYCtwK3IrYApgK3MucmVwbGFjZSgvXG4kLywiIikrYApgK3ArYAoKYH19LEcyLmhvcml6b250YWxSdWxlPXtmaWx0ZXI6ImhyIixyZXBsYWNlbWVudDpmdW5jdGlvbih0LGUsYSl7cmV0dXJuYAoKYCthLmhyK2AKCmB9fSxHMi5pbmxpbmVMaW5rPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5saW5rU3R5bGU9PT0iaW5saW5lZCImJnQubm9kZU5hbWU9PT0iQSImJnQuZ2V0QXR0cmlidXRlKCJocmVmIil9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKTthJiYoYT1hLnJlcGxhY2UoLyhbKCldKS9nLCJcXCQxIikpO3ZhciBpPV91KGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTtyZXR1cm4gaSYmKGk9JyAiJytpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInKSwiWyIrdCsiXSgiK2EraSsiKSJ9fSxHMi5yZWZlcmVuY2VMaW5rPXtmaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5saW5rU3R5bGU9PT0icmVmZXJlbmNlZCImJnQubm9kZU5hbWU9PT0iQSImJnQuZ2V0QXR0cmlidXRlKCJocmVmIil9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXt2YXIgaT1lLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHI9X3UoZS5nZXRBdHRyaWJ1dGUoInRpdGxlIikpO3ImJihyPScgIicrcisnIicpO3ZhciBzLG47c3dpdGNoKGEubGlua1JlZmVyZW5jZVN0eWxlKXtjYXNlImNvbGxhcHNlZCI6cz0iWyIrdCsiXVtdIixuPSJbIit0KyJdOiAiK2krcjticmVhaztjYXNlInNob3J0Y3V0IjpzPSJbIit0KyJdIixuPSJbIit0KyJdOiAiK2krcjticmVhaztkZWZhdWx0OnZhciBvPXRoaXMucmVmZXJlbmNlcy5sZW5ndGgrMTtzPSJbIit0KyJdWyIrbysiXSIsbj0iWyIrbysiXTogIitpK3J9cmV0dXJuIHRoaXMucmVmZXJlbmNlcy5wdXNoKG4pLHN9LHJlZmVyZW5jZXM6W10sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSIiO3JldHVybiB0aGlzLnJlZmVyZW5jZXMubGVuZ3RoJiYoZT1gCgpgK3RoaXMucmVmZXJlbmNlcy5qb2luKGAKYCkrYAoKYCx0aGlzLnJlZmVyZW5jZXM9W10pLGV9fSxHMi5lbXBoYXNpcz17ZmlsdGVyOlsiZW0iLCJpIl0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlLGEpe3JldHVybiB0LnRyaW0oKT9hLmVtRGVsaW1pdGVyK3QrYS5lbURlbGltaXRlcjoiIn19LEcyLnN0cm9uZz17ZmlsdGVyOlsic3Ryb25nIiwiYiJdLHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gdC50cmltKCk/YS5zdHJvbmdEZWxpbWl0ZXIrdCthLnN0cm9uZ0RlbGltaXRlcjoiIn19LEcyLmNvZGU9e2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT10LnByZXZpb3VzU2libGluZ3x8dC5uZXh0U2libGluZyxhPXQucGFyZW50Tm9kZS5ub2RlTmFtZT09PSJQUkUiJiYhZTtyZXR1cm4gdC5ub2RlTmFtZT09PSJDT0RFIiYmIWF9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiIiO3Q9dC5yZXBsYWNlKC9ccj9cbnxcci9nLCIgIik7Zm9yKHZhciBlPS9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KHQpPyIgIjoiIixhPSJgIixpPXQubWF0Y2goL2ArL2dtKXx8W107aS5pbmRleE9mKGEpIT09LTE7KWE9YSsiYCI7cmV0dXJuIGErZSt0K2UrYX19LEcyLmltYWdlPXtmaWx0ZXI6ImltZyIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlKXt2YXIgYT1fdShlLmdldEF0dHJpYnV0ZSgiYWx0IikpLGk9ZS5nZXRBdHRyaWJ1dGUoInNyYyIpfHwiIixyPV91KGUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKSxzPXI/JyAiJytyKyciJzoiIjtyZXR1cm4gaT8iIVsiK2ErIl0oIitpK3MrIikiOiIifX07TjNlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQsZSl7dGhpcy5hcnJheS51bnNoaWZ0KGUpfSxrZWVwOmZ1bmN0aW9uKHQpe3RoaXMuX2tlZXAudW5zaGlmdCh7ZmlsdGVyOnQscmVwbGFjZW1lbnQ6dGhpcy5rZWVwUmVwbGFjZW1lbnR9KX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZS51bnNoaWZ0KHtmaWx0ZXI6dCxyZXBsYWNlbWVudDpmdW5jdGlvbigpe3JldHVybiIifX0pfSxmb3JOb2RlOmZ1bmN0aW9uKHQpe2lmKHQuaXNCbGFuaylyZXR1cm4gdGhpcy5ibGFua1J1bGU7dmFyIGU7cmV0dXJuKGU9ayQodGhpcy5hcnJheSx0LHRoaXMub3B0aW9ucykpfHwoZT1rJCh0aGlzLl9rZWVwLHQsdGhpcy5vcHRpb25zKSl8fChlPWskKHRoaXMuX3JlbW92ZSx0LHRoaXMub3B0aW9ucykpP2U6dGhpcy5kZWZhdWx0UnVsZX0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJyYXkubGVuZ3RoO2UrKyl0KHRoaXMuYXJyYXlbZV0sZSl9fTtDJD10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e307ZlJ0PXBSdCgpP0MkLkRPTVBhcnNlcjpoUnQoKTtNUnQ9QXJyYXkucHJvdG90eXBlLnJlZHVjZSx6UnQ9W1svXFwvZywiXFxcXCJdLFsvXCovZywiXFwqIl0sWy9eLS9nLCJcXC0iXSxbL15cKyAvZywiXFwrICJdLFsvXig9KykvZywiXFwkMSJdLFsvXigjezEsNn0pIC9nLCJcXCQxICJdLFsvYC9nLCJcXGAiXSxbL15+fn4vZywiXFx+fn4iXSxbL1xbL2csIlxcWyJdLFsvXF0vZywiXFxdIl0sWy9ePi9nLCJcXD4iXSxbL18vZywiXFxfIl0sWy9eKFxkKylcLiAvZywiJDFcXC4gIl1dO1R1LnByb3RvdHlwZT17dHVybmRvd246ZnVuY3Rpb24odCl7aWYoIUNSdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBzdHJpbmcsIG9yIGFuIGVsZW1lbnQvZG9jdW1lbnQvZnJhZ21lbnQgbm9kZS4iKTtpZih0PT09IiIpcmV0dXJuIiI7dmFyIGU9UjNlLmNhbGwodGhpcyxuZXcgbVJ0KHQsdGhpcy5vcHRpb25zKSk7cmV0dXJuIGtSdC5jYWxsKHRoaXMsZSl9LHVzZTpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMudXNlKHRbZV0pO2Vsc2UgaWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdCh0aGlzKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoInBsdWdpbiBtdXN0IGJlIGEgRnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgRnVuY3Rpb25zIik7cmV0dXJuIHRoaXN9LGFkZFJ1bGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ydWxlcy5hZGQodCxlKSx0aGlzfSxrZWVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJ1bGVzLmtlZXAodCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJ1bGVzLnJlbW92ZSh0KSx0aGlzfSxlc2NhcGU6ZnVuY3Rpb24odCl7cmV0dXJuIHpSdC5yZWR1Y2UoZnVuY3Rpb24oZSxhKXtyZXR1cm4gZS5yZXBsYWNlKGFbMF0sYVsxXSl9LHQpfX07THU9VHV9KTt2YXIgYzU9e307V2UoYzUse2dmbTooKT0+ajNlLGhpZ2hsaWdodGVkQ29kZUJsb2NrOigpPT5MJCxzdHJpa2V0aHJvdWdoOigpPT4kJCx0YWJsZXM6KCk9PkEkLHRhc2tMaXN0SXRlbXM6KCk9PkQkfSk7ZnVuY3Rpb24gTCQodCl7dC5hZGRSdWxlKCJoaWdobGlnaHRlZENvZGVCbG9jayIse2ZpbHRlcjpmdW5jdGlvbihlKXt2YXIgYT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGUubm9kZU5hbWU9PT0iRElWIiYmcTNlLnRlc3QoZS5jbGFzc05hbWUpJiZhJiZhLm5vZGVOYW1lPT09IlBSRSJ9LHJlcGxhY2VtZW50OmZ1bmN0aW9uKGUsYSxpKXt2YXIgcj1hLmNsYXNzTmFtZXx8IiIscz0oci5tYXRjaChxM2UpfHxbbnVsbCwiIl0pWzFdO3JldHVybmAKCmAraS5mZW5jZStzK2AKYCthLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQrYApgK2kuZmVuY2UrYAoKYH19KX1mdW5jdGlvbiAkJCh0KXt0LmFkZFJ1bGUoInN0cmlrZXRocm91Z2giLHtmaWx0ZXI6WyJkZWwiLCJzIiwic3RyaWtlIl0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIn4iK2UrIn4ifX0pfWZ1bmN0aW9uIFQkKHQpe3ZhciBlPXQucGFyZW50Tm9kZTtyZXR1cm4gZS5ub2RlTmFtZT09PSJUSEVBRCJ8fGUuZmlyc3RDaGlsZD09PXQmJihlLm5vZGVOYW1lPT09IlRBQkxFInx8TFJ0KGUpKSYmVFJ0LmNhbGwodC5jaGlsZE5vZGVzLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lPT09IlRIIn0pfWZ1bmN0aW9uIExSdCh0KXt2YXIgZT10LnByZXZpb3VzU2libGluZztyZXR1cm4gdC5ub2RlTmFtZT09PSJUQk9EWSImJighZXx8ZS5ub2RlTmFtZT09PSJUSEVBRCImJi9eXHMqJC9pLnRlc3QoZS50ZXh0Q29udGVudCkpfWZ1bmN0aW9uIFYzZSh0LGUpe3ZhciBhPV9SdC5jYWxsKGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGUpLGk9IiAiO3JldHVybiBhPT09MCYmKGk9InwgIiksaSt0KyIgfCJ9ZnVuY3Rpb24gQSQodCl7dC5rZWVwKGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lPT09IlRBQkxFIiYmIVQkKGEucm93c1swXSl9KTtmb3IodmFyIGUgaW4gUTMpdC5hZGRSdWxlKGUsUTNbZV0pfWZ1bmN0aW9uIEQkKHQpe3QuYWRkUnVsZSgidGFza0xpc3RJdGVtcyIse2ZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImNoZWNrYm94IiYmZS5wYXJlbnROb2RlLm5vZGVOYW1lPT09IkxJIn0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24oZSxhKXtyZXR1cm4oYS5jaGVja2VkPyJbeF0iOiJbIF0iKSsiICJ9fSl9ZnVuY3Rpb24gajNlKHQpe3QudXNlKFtMJCwkJCxBJCxEJF0pfXZhciBxM2UsX1J0LFRSdCxRMyxVM2U9YigoKT0+e3EzZT0vaGlnaGxpZ2h0LSg/OnRleHR8c291cmNlKS0oW2EtejAtOV0rKS87X1J0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mLFRSdD1BcnJheS5wcm90b3R5cGUuZXZlcnksUTM9e307UTMudGFibGVDZWxsPXtmaWx0ZXI6WyJ0aCIsInRkIl0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVjNlKHQsZSl9fSxRMy50YWJsZVJvdz17ZmlsdGVyOiJ0ciIscmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCxlKXt2YXIgYT0iIixpPXtsZWZ0OiI6LS0iLHJpZ2h0OiItLToiLGNlbnRlcjoiOi06In07aWYoVCQoZSkpZm9yKHZhciByPTA7cjxlLmNoaWxkTm9kZXMubGVuZ3RoO3IrKyl7dmFyIHM9Ii0tLSIsbj0oZS5jaGlsZE5vZGVzW3JdLmdldEF0dHJpYnV0ZSgiYWxpZ24iKXx8IiIpLnRvTG93ZXJDYXNlKCk7biYmKHM9aVtuXXx8cyksYSs9VjNlKHMsZS5jaGlsZE5vZGVzW3JdKX1yZXR1cm5gCmArdCsoYT9gCmArYToiIil9fSxRMy50YWJsZT17ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVOYW1lPT09IlRBQkxFIiYmVCQodC5yb3dzWzBdKX0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKGAKCmAsYApgKSxgCgpgK3QrYAoKYH19LFEzLnRhYmxlU2VjdGlvbj17ZmlsdGVyOlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0scmVwbGFjZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fX0pO3ZhciBFJCxQJD1iKCgpPT57RSQ9VTEoRWllKCksMSk7aHJlKCk7dm9lKCk7am9lKCk7YTBlKCk7QzNlKCk7VDNlKCk7SDNlKCk7VTNlKCl9KTt2YXIgJHUsRzNlPWIoKCk9PntQJCgpOyR1PWNsYXNzIHR7c3RhdGljIGFzeW5jIGNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhlKXtsZXQgYT1uZXcgdDtyZXR1cm4gYXdhaXQgYS51cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSksYX1hc3luYyB1cGRhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSl7bGV0IGEsaT1hd2FpdCBSNigpLnVzZShqMykudXNlKFYzKS51c2UoVzMsWyJ5YW1sIiwidG9tbCJdKS51c2UoSzMpLnVzZShYMykudXNlKCgpPT5yPT57Y29uc29sZS5kaXIocik7bGV0IHM9ci5jaGlsZHJlbi5maW5kKG49Pm4udHlwZT09PSJ5YW1sIik7cyYmKGE9cy52YWx1ZSl9KS5wcm9jZXNzKGUpO3RoaXMuaHRtbD1pLnRvU3RyaW5nKCksYT90aGlzLmZyb250bWF0dGVyRGF0YT1hd2FpdCBFJC55YW1sU3RyaW5nVG9PYmplY3QoYSk6dGhpcy5mcm9udG1hdHRlckRhdGE9e319fX0pO3ZhciBKMz17fTtXZShKMyx7U21hcnRNYXJrZG93bjooKT0+SSR9KTt2YXIgSSQsTiQ9YigoKT0+e1AkKCk7RzNlKCk7SSQ9Y2xhc3MgdHtzdGF0aWMgYXN5bmMgZWFzeU1hcmtkb3duVG9IdG1sKGUpe3JldHVybihhd2FpdCBuZXcgdCgpLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKGUpKS5odG1sfWNvbnN0cnVjdG9yKCl7fWFzeW5jIGdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKGUpe3JldHVybiBhd2FpdCAkdS5jcmVhdGVGcm9tTWFya2Rvd25TdHJpbmcoZSl9aHRtbFRvTWFya2Rvd24oZSl7bGV0IGE9bmV3IEx1KHtoZWFkaW5nU3R5bGU6ImF0eCIsY29kZUJsb2NrU3R5bGU6ImZlbmNlZCJ9KTtyZXR1cm4gYS51c2UoYzUuZ2ZtKSxhLnR1cm5kb3duKGUpfX19KTt2YXIgSjNlPWh0KEhpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSGkuUGF0aEVycm9yPUhpLlRva2VuRGF0YT12b2lkIDAsSGkucGFyc2U9QiQsSGkuY29tcGlsZT1EUnQsSGkubWF0Y2g9UFJ0LEhpLnBhdGhUb1JlZ2V4cD1YM2UsSGkuc3RyaW5naWZ5PUZSdDt2YXIgRiQ9Ii8iLE8kPXQ9PnQsWTNlPS9eWyRfXHB7SURfU3RhcnR9XSQvdSxSJD0vXlskXHUyMDBjXHUyMDBkXHB7SURfQ29udGludWV9XSQvdSwkUnQ9eyJ7IjoieyIsIn0iOiJ9IiwiKCI6IigiLCIpIjoiKSIsIlsiOiJbIiwiXSI6Il0iLCIrIjoiKyIsIj8iOiI/IiwiISI6IiEifTtmdW5jdGlvbiBBUnQodCl7cmV0dXJuIHQucmVwbGFjZSgvW3t9KClcW1xdKz8hOipcXF0vZywiXFwkJiIpfWZ1bmN0aW9uIEJyKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKyo/XiR7fSgpW1xdfC9cXF0vZywiXFwkJiIpfXZhciBBdT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMudG9rZW5zPWUsdGhpcy5vcmlnaW5hbFBhdGg9YX19O0hpLlRva2VuRGF0YT1BdTt2YXIgUDA9Y2xhc3MgZXh0ZW5kcyBUeXBlRXJyb3J7Y29uc3RydWN0b3IoZSxhKXtsZXQgaT1lO2EmJihpKz1gOiAke2F9YCksaSs9IjsgdmlzaXQgaHR0cHM6Ly9naXQubmV3L3BhdGhUb1JlZ2V4cEVycm9yIGZvciBpbmZvIixzdXBlcihpKSx0aGlzLm9yaWdpbmFsUGF0aD1hfX07SGkuUGF0aEVycm9yPVAwO2Z1bmN0aW9uIEIkKHQsZT17fSl7bGV0e2VuY29kZVBhdGg6YT1PJH09ZSxpPVsuLi50XSxyPVtdLHM9MCxuPTA7ZnVuY3Rpb24gbygpe2xldCBjPSIiO2lmKFkzZS50ZXN0KGlbc10pKWRvIGMrPWlbcysrXTt3aGlsZShSJC50ZXN0KGlbc10pKTtlbHNlIGlmKGlbc109PT0nIicpe2xldCBwPXM7Zm9yKDtzKys8aS5sZW5ndGg7KXtpZihpW3NdPT09JyInKXtzKysscD0wO2JyZWFrfWlbc109PT0iXFwiJiZzKyssYys9aVtzXX1pZihwKXRocm93IG5ldyBQMChgVW50ZXJtaW5hdGVkIHF1b3RlIGF0IGluZGV4ICR7cH1gLHQpfWlmKCFjKXRocm93IG5ldyBQMChgTWlzc2luZyBwYXJhbWV0ZXIgbmFtZSBhdCBpbmRleCAke3N9YCx0KTtyZXR1cm4gY31mb3IoO3M8aS5sZW5ndGg7KXtsZXQgYz1pW3NdLHA9JFJ0W2NdO3A/ci5wdXNoKHt0eXBlOnAsaW5kZXg6cysrLHZhbHVlOmN9KTpjPT09IlxcIj9yLnB1c2goe3R5cGU6ImVzY2FwZSIsaW5kZXg6cysrLHZhbHVlOmlbcysrXX0pOmM9PT0iOiI/ci5wdXNoKHt0eXBlOiJwYXJhbSIsaW5kZXg6cysrLHZhbHVlOm8oKX0pOmM9PT0iKiI/ci5wdXNoKHt0eXBlOiJ3aWxkY2FyZCIsaW5kZXg6cysrLHZhbHVlOm8oKX0pOnIucHVzaCh7dHlwZToiY2hhciIsaW5kZXg6cysrLHZhbHVlOmN9KX1yLnB1c2goe3R5cGU6ImVuZCIsaW5kZXg6cyx2YWx1ZToiIn0pO2Z1bmN0aW9uIGQoYyl7bGV0IHA9W107Zm9yKDs7KXtsZXQgbD1yW24rK107aWYobC50eXBlPT09YylicmVhaztpZihsLnR5cGU9PT0iY2hhciJ8fGwudHlwZT09PSJlc2NhcGUiKXtsZXQgZj1sLnZhbHVlLGc9cltuXTtmb3IoO2cudHlwZT09PSJjaGFyInx8Zy50eXBlPT09ImVzY2FwZSI7KWYrPWcudmFsdWUsZz1yWysrbl07cC5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTphKGYpfSk7Y29udGludWV9aWYobC50eXBlPT09InBhcmFtInx8bC50eXBlPT09IndpbGRjYXJkIil7cC5wdXNoKHt0eXBlOmwudHlwZSxuYW1lOmwudmFsdWV9KTtjb250aW51ZX1pZihsLnR5cGU9PT0ieyIpe3AucHVzaCh7dHlwZToiZ3JvdXAiLHRva2VuczpkKCJ9Iil9KTtjb250aW51ZX10aHJvdyBuZXcgUDAoYFVuZXhwZWN0ZWQgJHtsLnR5cGV9IGF0IGluZGV4ICR7bC5pbmRleH0sIGV4cGVjdGVkICR7Y31gLHQpfXJldHVybiBwfXJldHVybiBuZXcgQXUoZCgiZW5kIiksdCl9ZnVuY3Rpb24gRFJ0KHQsZT17fSl7bGV0e2VuY29kZTphPWVuY29kZVVSSUNvbXBvbmVudCxkZWxpbWl0ZXI6aT1GJH09ZSxyPXR5cGVvZiB0PT0ib2JqZWN0Ij90OkIkKHQsZSkscz1aM2Uoci50b2tlbnMsaSxhKTtyZXR1cm4gZnVuY3Rpb24obz17fSl7bGV0W2QsLi4uY109cyhvKTtpZihjLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBhcmFtZXRlcnM6ICR7Yy5qb2luKCIsICIpfWApO3JldHVybiBkfX1mdW5jdGlvbiBaM2UodCxlLGEpe2xldCBpPXQubWFwKHI9PkVSdChyLGUsYSkpO3JldHVybiByPT57bGV0IHM9WyIiXTtmb3IobGV0IG4gb2YgaSl7bGV0W28sLi4uZF09bihyKTtzWzBdKz1vLHMucHVzaCguLi5kKX1yZXR1cm4gc319ZnVuY3Rpb24gRVJ0KHQsZSxhKXtpZih0LnR5cGU9PT0idGV4dCIpcmV0dXJuKCk9Plt0LnZhbHVlXTtpZih0LnR5cGU9PT0iZ3JvdXAiKXtsZXQgcj1aM2UodC50b2tlbnMsZSxhKTtyZXR1cm4gcz0+e2xldFtuLC4uLm9dPXIocyk7cmV0dXJuIG8ubGVuZ3RoP1siIl06W25dfX1sZXQgaT1hfHxPJDtyZXR1cm4gdC50eXBlPT09IndpbGRjYXJkIiYmYSE9PSExP3I9PntsZXQgcz1yW3QubmFtZV07aWYocz09bnVsbClyZXR1cm5bIiIsdC5uYW1lXTtpZighQXJyYXkuaXNBcnJheShzKXx8cy5sZW5ndGg9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3QubmFtZX0iIHRvIGJlIGEgbm9uLWVtcHR5IGFycmF5YCk7cmV0dXJuW3MubWFwKChuLG8pPT57aWYodHlwZW9mIG4hPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3QubmFtZX0vJHtvfSIgdG8gYmUgYSBzdHJpbmdgKTtyZXR1cm4gaShuKX0pLmpvaW4oZSldfTpyPT57bGV0IHM9clt0Lm5hbWVdO2lmKHM9PW51bGwpcmV0dXJuWyIiLHQubmFtZV07aWYodHlwZW9mIHMhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3QubmFtZX0iIHRvIGJlIGEgc3RyaW5nYCk7cmV0dXJuW2kocyldfX1mdW5jdGlvbiBQUnQodCxlPXt9KXtsZXR7ZGVjb2RlOmE9ZGVjb2RlVVJJQ29tcG9uZW50LGRlbGltaXRlcjppPUYkfT1lLHtyZWdleHA6cixrZXlzOnN9PVgzZSh0LGUpLG49cy5tYXAobz0+YT09PSExP08kOm8udHlwZT09PSJwYXJhbSI/YTpkPT5kLnNwbGl0KGkpLm1hcChhKSk7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBjPXIuZXhlYyhkKTtpZighYylyZXR1cm4hMTtsZXQgcD1jWzBdLGw9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGY9MTtmPGMubGVuZ3RoO2YrKyl7aWYoY1tmXT09PXZvaWQgMCljb250aW51ZTtsZXQgZz1zW2YtMV0seT1uW2YtMV07bFtnLm5hbWVdPXkoY1tmXSl9cmV0dXJue3BhdGg6cCxwYXJhbXM6bH19fWZ1bmN0aW9uIFgzZSh0LGU9e30pe2xldHtkZWxpbWl0ZXI6YT1GJCxlbmQ6aT0hMCxzZW5zaXRpdmU6cj0hMSx0cmFpbGluZzpzPSEwfT1lLG49W10sbz1yPyIiOiJpIixkPVtdO2ZvcihsZXQgbCBvZiBLM2UodCxbXSkpe2xldCBmPXR5cGVvZiBsPT0ib2JqZWN0Ij9sOkIkKGwsZSk7Zm9yKGxldCBnIG9mIER1KGYudG9rZW5zLDAsW10pKWQucHVzaChJUnQoZyxhLG4sZi5vcmlnaW5hbFBhdGgpKX1sZXQgYz1gXig/OiR7ZC5qb2luKCJ8Iil9KWA7cmV0dXJuIHMmJihjKz1gKD86JHtCcihhKX0kKT9gKSxjKz1pPyIkIjpgKD89JHtCcihhKX18JClgLHtyZWdleHA6bmV3IFJlZ0V4cChjLG8pLGtleXM6bn19ZnVuY3Rpb24gSzNlKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGEgb2YgdClLM2UoYSxlKTtlbHNlIGUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbipEdSh0LGUsYSl7aWYoZT09PXQubGVuZ3RoKXJldHVybiB5aWVsZCBhO2xldCBpPXRbZV07aWYoaS50eXBlPT09Imdyb3VwIilmb3IobGV0IHIgb2YgRHUoaS50b2tlbnMsMCxhLnNsaWNlKCkpKXlpZWxkKkR1KHQsZSsxLHIpO2Vsc2UgYS5wdXNoKGkpO3lpZWxkKkR1KHQsZSsxLGEpfWZ1bmN0aW9uIElSdCh0LGUsYSxpKXtsZXQgcj0iIixzPSIiLG49ITA7Zm9yKGxldCBvIG9mIHQpe2lmKG8udHlwZT09PSJ0ZXh0Iil7cis9QnIoby52YWx1ZSkscys9by52YWx1ZSxufHwobj1vLnZhbHVlLmluY2x1ZGVzKGUpKTtjb250aW51ZX1pZihvLnR5cGU9PT0icGFyYW0ifHxvLnR5cGU9PT0id2lsZGNhcmQiKXtpZighbiYmIXMpdGhyb3cgbmV3IFAwKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke28ubmFtZX0iICR7by50eXBlfWAsaSk7by50eXBlPT09InBhcmFtIj9yKz1gKCR7TlJ0KGUsbj8iIjpzKX0rKWA6cis9IihbXFxzXFxTXSspIixhLnB1c2gobykscz0iIixuPSExO2NvbnRpbnVlfX1yZXR1cm4gcn1mdW5jdGlvbiBOUnQodCxlKXtyZXR1cm4gZS5sZW5ndGg8Mj90Lmxlbmd0aDwyP2BbXiR7QnIodCtlKX1dYDpgKD86KD8hJHtCcih0KX0pW14ke0JyKGUpfV0pYDp0Lmxlbmd0aDwyP2AoPzooPyEke0JyKGUpfSlbXiR7QnIodCl9XSlgOmAoPzooPyEke0JyKGUpfXwke0JyKHQpfSlbXFxzXFxTXSlgfWZ1bmN0aW9uIFEzZSh0KXtsZXQgZT0iIixhPTA7ZnVuY3Rpb24gaShyKXtyZXR1cm4gT1J0KHIpJiZSUnQodFthXSk/cjpKU09OLnN0cmluZ2lmeShyKX1mb3IoO2E8dC5sZW5ndGg7KXtsZXQgcj10W2ErK107aWYoci50eXBlPT09InRleHQiKXtlKz1BUnQoci52YWx1ZSk7Y29udGludWV9aWYoci50eXBlPT09Imdyb3VwIil7ZSs9YHske1EzZShyLnRva2Vucyl9fWA7Y29udGludWV9aWYoci50eXBlPT09InBhcmFtIil7ZSs9YDoke2koci5uYW1lKX1gO2NvbnRpbnVlfWlmKHIudHlwZT09PSJ3aWxkY2FyZCIpe2UrPWAqJHtpKHIubmFtZSl9YDtjb250aW51ZX10aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7ci50eXBlfWApfXJldHVybiBlfWZ1bmN0aW9uIEZSdCh0KXtyZXR1cm4gUTNlKHQudG9rZW5zKX1mdW5jdGlvbiBPUnQodCl7bGV0W2UsLi4uYV09dDtyZXR1cm4gWTNlLnRlc3QoZSkmJmEuZXZlcnkoaT0+UiQudGVzdChpKSl9ZnVuY3Rpb24gUlJ0KHQpe3JldHVybiB0JiZ0LnR5cGU9PT0idGV4dCI/IVIkLnRlc3QodC52YWx1ZVswXSk6ITB9fSk7dmFyIEgkLHEkPWIoKCk9PnthNigpO0lpKCk7SCQ9VTEoSjNlKCksMSl9KTt2YXIgRXUsZWxlPWIoKCk9PntxJCgpO0V1PWNsYXNze2NvbnN0cnVjdG9yKCl7fWdldEFsbEFzT2JqZWN0KCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUuZW50cmllcygpKX1zZXRRdWVyeVBhcmFtKGUsYSxpPSJyZXBsYWNlIil7dmFyIHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtyLnNldChlLGEpLGk9PT0icHVzaCI/aGlzdG9yeS5wdXNoU3RhdGUobnVsbCxudWxsLCI/IityLnRvU3RyaW5nKCkpOmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsbnVsbCwiPyIrci50b1N0cmluZygpKX1kZWxldGVRdWVyeVBhcmFtKGUsYT0icmVwbGFjZSIpe3ZhciBpPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7aS5kZWxldGUoZSksYT09PSJwdXNoIj9oaXN0b3J5LnB1c2hTdGF0ZShudWxsLG51bGwsIj8iK2kudG9TdHJpbmcoKSk6aGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxudWxsLCI/IitpLnRvU3RyaW5nKCkpfWdldFF1ZXJ5UGFyYW0oZSl7cmV0dXJuIHRoaXMuZ2V0QWxsQXNPYmplY3QoKVtlXX19fSk7dmFyIFVIMSxWJCx0bGU9YigoKT0+e3EkKCk7ZWxlKCk7VUgxPXQ9Pntjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7dH1gLCJjb2xvcjogcmdiKDI1NSwgMTA1LCAxMDApOyIsImNvbG9yOiBpbmhlcml0Iil9LFYkPWNsYXNzIHR7Y29uc3RydWN0b3IoZSxhPSIiKXt0aGlzLm9wdGlvbnM9e2RlYnVnOiExfSx0aGlzLnF1ZXJ5UGFyYW1zPW5ldyBFdSx0aGlzLnJvdXRlcz1bXSx0aGlzLm9wdGlvbnM9ey4uLnRoaXMub3B0aW9ucywuLi5lfSx0aGlzLmJhc2VQYXRoPWEsdGhpcy5wb3BzdGF0ZUxpc3RlbmVyPWk9PntpLnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHRoaXMucG9wc3RhdGVMaXN0ZW5lcil9Y3JlYXRlU3ViUm91dGVyKGUsYSl7bGV0IGk9YCR7dGhpcy5iYXNlUGF0aH0ke2V9YDtyZXR1cm4gbmV3IHQoey4uLnRoaXMub3B0aW9ucywuLi5hfSxpKX1hc3luYyBwdXNoVXJsKGU9Ii8iLGE9e30pe2xldCBpPWAke3RoaXMuYmFzZVBhdGh9JHtlfWA7aSE9PXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZT93aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoYSx3aW5kb3cuZG9jdW1lbnQudGl0bGUsaSk6d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGEsd2luZG93LmRvY3VtZW50LnRpdGxlLGkpLGF3YWl0IHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKX1vbihlLGEpe2xldCBpPWAke3RoaXMuYmFzZVBhdGh9JHtlfWAscj17bWF0Y2hGdW5jdGlvbjpIJC5tYXRjaChpKSxoYW5kbGVyOmF9O3JldHVybiB0aGlzLnJvdXRlcy5wdXNoKHIpLCgpPT57dGhpcy5yb3V0ZXMuc3BsaWNlKHRoaXMucm91dGVzLmluZGV4T2YociksMSl9fWFzeW5jIF9oYW5kbGVSb3V0ZVN0YXRlKCl7bGV0IGU9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLGE9dGhpcy5yb3V0ZXMuZmlsdGVyKGk9PiEhaS5tYXRjaEZ1bmN0aW9uKGUpKTtmb3IobGV0IGkgb2YgYSl7bGV0IHI9aS5tYXRjaEZ1bmN0aW9uKGUpO2kuaGFuZGxlcih7Li4uci52YWx1ZU9mKCkscXVlcnlQYXJhbXM6dGhpcy5xdWVyeVBhcmFtcy5nZXRBbGxBc09iamVjdCgpfSl9fWRlc3Ryb3koKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHRoaXMucG9wc3RhdGVMaXN0ZW5lciksdGhpcy5yb3V0ZXM9W119fX0pO3ZhciBYbj17fTtXZShYbix7U21hcnRSb3V0ZXI6KCk9PlYkfSk7dmFyIGokPWIoKCk9Pnt0bGUoKX0pO3ZhciBhbGU9YigoKT0+e3UzKCk7dzMoKX0pO2Z1bmN0aW9uIEhyKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24galJ0KHQsZSl7bGV0IGE9ZVswXSxpPWVbMV0scj1lWzJdLHM9ZVszXSxuPWVbNF0sbz1lWzVdLGQ9ZVs2XSxjPWVbN107Zm9yKGxldCBwPTA7cDw2NDtwKyspe2lmKHA+PTE2KXtsZXQgeD1Icih0W3AtMTVdLDcpXkhyKHRbcC0xNV0sMTgpXnRbcC0xNV0+Pj4zLE09SHIodFtwLTJdLDE3KV5Icih0W3AtMl0sMTkpXnRbcC0yXT4+PjEwO3RbcF09dFtwLTE2XSt4K3RbcC03XStNPj4+MH1sZXQgbD1IcihuLDYpXkhyKG4sMTEpXkhyKG4sMjUpLGY9biZvXn5uJmQsZz1jK2wrZitxUnRbcF0rdFtwXT4+PjAseT1IcihhLDIpXkhyKGEsMTMpXkhyKGEsMjIpLHY9YSZpXmEmcl5pJnIsbT15K3Y+Pj4wO2M9ZCxkPW8sbz1uLG49cytnPj4+MCxzPXIscj1pLGk9YSxhPWcrbT4+PjB9ZVswXT1lWzBdK2E+Pj4wLGVbMV09ZVsxXStpPj4+MCxlWzJdPWVbMl0rcj4+PjAsZVszXT1lWzNdK3M+Pj4wLGVbNF09ZVs0XStuPj4+MCxlWzVdPWVbNV0rbz4+PjAsZVs2XT1lWzZdK2Q+Pj4wLGVbN109ZVs3XStjPj4+MH1mdW5jdGlvbiBVJCh0KXtsZXQgZT1bLi4uVlJ0XSxhPXQubGVuZ3RoLGk9YSo4LHI9YSU2NDw1Nj81Ni1hJTY0OjEyMC1hJTY0LHM9bmV3IFVpbnQ4QXJyYXkoYStyKzgpO3Muc2V0KHQpLHNbYV09MTI4O2xldCBuPW5ldyBEYXRhVmlldyhzLmJ1ZmZlcik7bi5zZXRVaW50MzIocy5sZW5ndGgtOCwwLCExKSxuLnNldFVpbnQzMihzLmxlbmd0aC00LGk+Pj4wLCExKTtmb3IobGV0IGQ9MDtkPHMubGVuZ3RoO2QrPTY0KXtsZXQgYz1uZXcgQXJyYXkoNjQpO2ZvcihsZXQgcD0wO3A8MTY7cCsrKWNbcF09bi5nZXRVaW50MzIoZCtwKjQsITEpO2pSdChjLGUpfWxldCBvPSIiO2ZvcihsZXQgZD0wO2Q8ODtkKyspbys9ZVtkXS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpO3JldHVybiBvfXZhciBxUnQsVlJ0LGlsZT1iKCgpPT57cVJ0PVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFZSdD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdfSk7dmFyIGQ1PXt9O1dlKGQ1LHttZDVGcm9tU3RyaW5nOigpPT5YUnQsc2hhMjU2RnJvbUJ1ZmZlcjooKT0+V1J0LHNoYTI1NkZyb21GaWxlOigpPT5aUnQsc2hhMjU2RnJvbVN0cmVhbTooKT0+WVJ0LHNoYTI1NkZyb21TdHJpbmc6KCk9Pm5sZSxzaGEyNTZGcm9tU3RyaW5nU3luYzooKT0+VVJ0LHNoYTI2NUZyb21PYmplY3Q6KCk9PkdSdH0pO3ZhciBybGUsc2xlLG5sZSxVUnQsV1J0LEdSdCxZUnQsWlJ0LFhSdCxvbGU9YigoKT0+e2FsZSgpO2lsZSgpO3JsZT10PT57bGV0IGU9W10sYT1uZXcgRGF0YVZpZXcodCk7Zm9yKGxldCBpPTA7aTxhLmJ5dGVMZW5ndGg7aSs9NCl7bGV0IHM9YS5nZXRVaW50MzIoaSkudG9TdHJpbmcoMTYpLG49IjAwMDAwMDAwIixvPShuK3MpLnNsaWNlKC1uLmxlbmd0aCk7ZS5wdXNoKG8pfXJldHVybiBlLmpvaW4oIiIpfSxzbGU9KCk9PnR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8uc3VidGxlIT09dm9pZCAwLG5sZT1hc3luYyB0PT57bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO2lmKHNsZSgpKXtsZXQgYT1hd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsZSk7cmV0dXJuIHJsZShhKX1lbHNlIHJldHVybiBVJChlKX0sVVJ0PXQ9Pnt0aHJvdyBjb25zb2xlLndhcm4oInNoYTI1NkZyb21TdHJpbmdTeW5jIGlzIG5vdCB0cnVseSBzeW5jaHJvbm91cyBpbiBicm93c2VyIGVudmlyb25tZW50IiksbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFVzZSBzaGEyNTZGcm9tU3RyaW5nIGluc3RlYWQuIil9LFdSdD1hc3luYyB0PT57aWYoc2xlKCkpe2xldCBlO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtsZXQgcj10O2U9ci5idWZmZXIuc2xpY2Uoci5ieXRlT2Zmc2V0LHIuYnl0ZU9mZnNldCtyLmJ5dGVMZW5ndGgpfWVsc2UgZT10O2xldCBhPWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlKTtyZXR1cm4gcmxlKGEpfWVsc2V7bGV0IGU9dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/dDpuZXcgVWludDhBcnJheSh0KTtyZXR1cm4gVSQoZSl9fSxHUnQ9YXN5bmMgdD0+e2xldCBlPUMxLnN0cmluZ2lmeSh0KTtyZXR1cm4gYXdhaXQgbmxlKGUpfSxZUnQ9dD0+e3Rocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbVN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKX0sWlJ0PWFzeW5jIHQ9Pnt0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21GaWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpfSxYUnQ9YXN5bmMgdD0+e3Rocm93IG5ldyBFcnJvcigibWQ1RnJvbVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFdlYiBDcnlwdG8gQVBJIGRvZXMgbm90IHN1cHBvcnQgTUQ1LiIpfX0pO3ZhciBsbGU9YigoKT0+e2QyKCl9KTt2YXIgY2xlPWIoKCk9Pnt9KTt2YXIgVyQsZGxlPWIoKCk9PntsbGUoKTtjbGUoKTtXJD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGVkU2NyaXB0cz1bXX1hc3luYyBnZXRFbnZBd2FyZU1vZHVsZShlKXtpZih0aGlzLmlzTm9kZSlyZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZShlLm5vZGVNb2R1bGVOYW1lKTtpZih0aGlzLmlzQnJvd3NlcilyZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlV2ViTW9kdWxlKGUud2ViVXJsQXJnLGUuZ2V0RnVuY3Rpb24pO2NvbnNvbGUuZXJyb3IoInBsYXRmb3JtIGZvciBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQgYnkgc21hcnRlbnYiKX1hc3luYyBnZXRTYWZlTm9kZU1vZHVsZShlLGEpe2lmKCF0aGlzLmlzTm9kZSYmIXRoaXMuaXNEZW5vJiYhdGhpcy5pc0J1bil7Y29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBzZXJ2ZXIgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHtlfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTtyZXR1cm59bGV0IGk9YXdhaXQgbmV3IEZ1bmN0aW9uKGByZXR1cm4gaW1wb3J0KCcke2V9JylgKSgpO3JldHVybiBhJiZhd2FpdCBhKGkpLGl9YXN5bmMgZ2V0U2FmZVdlYk1vZHVsZShlLGEpe2lmKCF0aGlzLmlzQnJvd3Nlcil7Y29uc29sZS5lcnJvcigiWW91IHRyaWVkIHRvIGxvYWQgYSB3ZWIgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dCIpO3JldHVybn1pZih0aGlzLmxvYWRlZFNjcmlwdHMuaW5jbHVkZXMoZSkpcmV0dXJuIGEoKTt0aGlzLmxvYWRlZFNjcmlwdHMucHVzaChlKTtsZXQgaT1IZS5kZWZlcigpO2lmKGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cylnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMoZSksaS5yZXNvbHZlKCk7ZWxzZXtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyLm9ubG9hZD0oKT0+e2kucmVzb2x2ZSgpfSxyLnNyYz1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocil9cmV0dXJuIGF3YWl0IGkucHJvbWlzZSxhKCl9Z2V0IHJ1bnRpbWVFbnYoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXMuRGVubzwidSImJnR5cGVvZiBnbG9iYWxUaGlzLkRlbm8/LnZlcnNpb248InUiPyJkZW5vIjp0eXBlb2YgZ2xvYmFsVGhpcy5CdW48InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5CdW4/LnZlcnNpb248InUiPyJidW4iOnR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3M8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzPy52ZXJzaW9ucz8ubm9kZTwidSI/Im5vZGUiOih0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3c8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5kb2N1bWVudDwidSIsImJyb3dzZXIiKX1nZXQgaXNCcm93c2VyKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJicm93c2VyIn1nZXQgaXNOb2RlKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJub2RlIn1nZXQgaXNEZW5vKCl7cmV0dXJuIHRoaXMucnVudGltZUVudj09PSJkZW5vIn1nZXQgaXNCdW4oKXtyZXR1cm4gdGhpcy5ydW50aW1lRW52PT09ImJ1biJ9Z2V0IHVzZXJBZ2VudCgpe3JldHVybiB0aGlzLmlzQnJvd3Nlcj9uYXZpZ2F0b3IudXNlckFnZW50OiJ1bmRlZmluZWQifWdldCBub2RlVmVyc2lvbigpe3JldHVybiB0aGlzLmlzTm9kZT9wcm9jZXNzLnZlcnNpb246InVuZGVmaW5lZCJ9Z2V0IGRlbm9WZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNEZW5vP2dsb2JhbFRoaXMuRGVuby52ZXJzaW9uLmRlbm86InVuZGVmaW5lZCJ9Z2V0IGJ1blZlcnNpb24oKXtyZXR1cm4gdGhpcy5pc0J1bj9nbG9iYWxUaGlzLkJ1bi52ZXJzaW9uOiJ1bmRlZmluZWQifWFzeW5jIGdldFNhZmVNb2R1bGVGb3IoZSxhLGkpe2xldCByO2lmKEFycmF5LmlzQXJyYXkoZSk/cj1lLmZsYXRNYXAocz0+cz09PSJzZXJ2ZXIiP1sibm9kZSIsImRlbm8iLCJidW4iXTpbc10pOmU9PT0ic2VydmVyIj9yPVsibm9kZSIsImRlbm8iLCJidW4iXTpyPVtlXSwhci5pbmNsdWRlcyh0aGlzLnJ1bnRpbWVFbnYpKXtjb25zb2xlLndhcm4oYE1vZHVsZSAiJHthfSIgcmVxdWVzdGVkIGZvciBydW50aW1lKHMpIFske3Iuam9pbigiLCAiKX1dIGJ1dCBjdXJyZW50IHJ1bnRpbWUgaXMgIiR7dGhpcy5ydW50aW1lRW52fSIuIFNraXBwaW5nIGxvYWQuYCk7cmV0dXJufWlmKHRoaXMuaXNOb2RlfHx0aGlzLmlzRGVub3x8dGhpcy5pc0J1bilyZXR1cm4gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZShhKTtpZih0aGlzLmlzQnJvd3Nlcil7aWYoIWkpe2NvbnNvbGUuZXJyb3IoYEJyb3dzZXIgbW9kdWxlIGxvYWQgcmVxdWlyZXMgZ2V0RnVuY3Rpb24gcGFyYW1ldGVyIGZvciAiJHthfSJgKTtyZXR1cm59cmV0dXJuIGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShhLGkpfX1nZXQgaXNDSSgpe3JldHVybiB0aGlzLmlzTm9kZT8hIXByb2Nlc3MuZW52LkNJOiExfWFzeW5jIGlzTWFjQXN5bmMoKXtyZXR1cm4gdGhpcy5pc05vZGU/KGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIikpLnBsYXRmb3JtKCk9PT0iZGFyd2luIjohMX1hc3luYyBpc1dpbmRvd3NBc3luYygpe3JldHVybiB0aGlzLmlzTm9kZT8oYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKSkucGxhdGZvcm0oKT09PSJ3aW4zMiI6ITF9YXN5bmMgaXNMaW51eEFzeW5jKCl7cmV0dXJuIHRoaXMuaXNOb2RlPyhhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKCJvcyIpKS5wbGF0Zm9ybSgpPT09ImxpbnV4IjohMX1hc3luYyBwcmludEVudigpe3RoaXMuaXNOb2RlPyhjb25zb2xlLmxvZygicnVubmluZyBvbiBOT0RFIiksY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiK3RoaXMubm9kZVZlcnNpb24pKTp0aGlzLmlzRGVubz8oY29uc29sZS5sb2coInJ1bm5pbmcgb24gREVOTyIpLGNvbnNvbGUubG9nKCJkZW5vIHZlcnNpb24gaXMgIit0aGlzLmRlbm9WZXJzaW9uKSk6dGhpcy5pc0J1bj8oY29uc29sZS5sb2coInJ1bm5pbmcgb24gQlVOIiksY29uc29sZS5sb2coImJ1biB2ZXJzaW9uIGlzICIrdGhpcy5idW5WZXJzaW9uKSk6KGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIEJST1dTRVIiKSxjb25zb2xlLmxvZygiYnJvd3NlciBpcyAiK3RoaXMudXNlckFnZW50KSl9fX0pO3ZhciBHJD17fTtXZShHJCx7U21hcnRlbnY6KCk9PlckfSk7dmFyIHBsZT1iKCgpPT57ZGxlKCl9KTt2YXIgUHUsaGxlLEl1LFkkPWIoKCk9PntwbGUoKTtnMygpO1B1PVUxKFVDKCksMSksaGxlPVUxKFdDKCksMSksSXU9aGxlLmRlZmF1bHR9KTtmdW5jdGlvbiBKUnQodCl7cmV0dXJuIHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlci5mcm9tKHQpLnRvU3RyaW5nKCJiYXNlNjQiKTpidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4udCkpfWZ1bmN0aW9uIGVCdCh0KXtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7bGV0IGU9QnVmZmVyLmZyb20odCwiYmFzZTY0Iik7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5mcm9tKGF0b2IodCkpLm1hcChlPT5lLmNoYXJDb2RlQXQoMCkpKX1mdW5jdGlvbiBYJCh0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0LE51LGUpfWZ1bmN0aW9uIEskKHQpe3JldHVybiBKU09OLnBhcnNlKHQsdWxlKX1mdW5jdGlvbiB0QnQodCl7cmV0dXJuIG1sZSh0KSYmdC50eXBlPT09IkVuY29kZWRCdWZmZXIiJiZaJCh0LmRhdGEpfWZ1bmN0aW9uIGFCdCh0KXtyZXR1cm4gbWxlKHQpJiZ0LnR5cGU9PT0iQnVmZmVyIiYmKGZsZSh0LmRhdGEpfHxaJCh0LmRhdGEpKXx8dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9ZnVuY3Rpb24gZmxlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIFokKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ9ZnVuY3Rpb24gbWxlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfXZhciBOdSx1bGUsZ2xlPWIoKCk9PntZJCgpO051PSh0LGUpPT57aWYoYUJ0KGUpKXtsZXQgYTtpZigiZGF0YSJpbiBlJiZmbGUoZS5kYXRhKSlhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSlhPWU7ZWxzZSByZXR1cm4gZTtyZXR1cm57dHlwZToiRW5jb2RlZEJ1ZmZlciIsZGF0YToiYmFzZTY0OiIrSlJ0KGEpfX1yZXR1cm4gZX0sdWxlPSh0LGUpPT57aWYodEJ0KGUpJiZaJChlLmRhdGEpJiZlLmRhdGEuc3RhcnRzV2l0aCgiYmFzZTY0OiIpKXtsZXQgYT1lLmRhdGEuc2xpY2UoNyk7cmV0dXJuIGVCdChhKX1yZXR1cm4gZX19KTt2YXIgcDU9e307V2UocDUse1NtYXJ0anNvbjooKT0+SiQsZGVlcEVxdWFsSnNvbkxTdHJpbmdzOigpPT5kQnQsZGVlcEVxdWFsT2JqZWN0czooKT0+YmxlLGZvbGREZWM6KCk9PmNCdCxwYXJzZTooKT0+RnUscGFyc2VCYXNlNjQ6KCk9PmxCdCxwYXJzZUpzb25MOigpPT5RJCxzdGFibGVPbmVXYXlTdHJpbmdpZnk6KCk9PnNCdCxzdHJpbmdpZnk6KCk9PkkwLHN0cmluZ2lmeUJhc2U2NDooKT0+b0J0LHN0cmluZ2lmeUpzb25MOigpPT5yQnQsc3RyaW5naWZ5UHJldHR5OigpPT5uQnR9KTt2YXIgRnUsUSQsckJ0LHNCdCxJMCxuQnQsb0J0LGxCdCxKJCxjQnQsYmxlLGRCdCx2bGU9YigoKT0+e1kkKCk7Z2xlKCk7RnU9SyQsUSQ9dD0+dC5zcGxpdChgCmApLnJlZHVjZSgoaSxyKT0+e2xldCBzPXIudHJpbSgpO3JldHVybiBzLmxlbmd0aD4wJiZpLnB1c2goRnUocykpLGl9LFtdKSxyQnQ9dD0+dC5tYXAoZT0+STAoZSkpLmpvaW4oYApgKSxzQnQ9KHQsZSxhPXt9KT0+e2xldCBpPW5ldyBXZWFrU2V0LHI9bz0+e2lmKG89PT1udWxsfHx0eXBlb2YgbyE9Im9iamVjdCIpcmV0dXJuIG87bGV0IGQ9TnUoIiIsbyk7aWYoZCYmZC50eXBlPT09IkVuY29kZWRCdWZmZXIiJiZ0eXBlb2YgZC5kYXRhPT0ic3RyaW5nIilyZXR1cm4gZDtpZihpLmhhcyhvKSlyZXR1cm4iX19jeWNsZV9fIjtpZihpLmFkZChvKSxBcnJheS5pc0FycmF5KG8pKXJldHVybiBvLm1hcChwPT5yKHApKTtsZXQgYz17fTtmb3IobGV0IHAgb2YgT2JqZWN0LmtleXMobykpdHJ5e2NbcF09cihvW3BdKX1jYXRjaHtjW3BdPSJfX3Vuc2VyaWFsaXphYmxlX18ifXJldHVybiBjfSxzPXIodCksbj17Li4uYSxjeWNsZXM6ITB9O2lmKGUmJiFuLmNtcCl7bGV0IG89bmV3IE1hcDtlLmZvckVhY2goKGQsYyk9Pm8uc2V0KGQsYykpLG4uY21wPShkLGMpPT57bGV0IHA9by5oYXMoZC5rZXkpP28uZ2V0KGQua2V5KTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbD1vLmhhcyhjLmtleSk/by5nZXQoYy5rZXkpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gcCE9PWw/cC1sOmQua2V5PGMua2V5Py0xOmQua2V5PmMua2V5PzE6MH19cmV0dXJuIEl1KHMsbil9LEkwPSh0LGUsYT17fSk9PntsZXQgaT1YJCh0KTt0PUpTT04ucGFyc2UoaSk7bGV0IHI9ey4uLmF9O2lmKGUmJiFyLmNtcCl7bGV0IG49bmV3IE1hcDtlLmZvckVhY2goKG8sZCk9Pm4uc2V0KG8sZCkpLHIuY21wPShvLGQpPT57bGV0IGM9bi5oYXMoby5rZXkpP24uZ2V0KG8ua2V5KTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscD1uLmhhcyhkLmtleSk/bi5nZXQoZC5rZXkpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gYyE9PXA/Yy1wOm8ua2V5PGQua2V5Py0xOm8ua2V5PmQua2V5PzE6MH19cmV0dXJuIEl1KHQscil9LG5CdD10PT57bGV0IGU9STAodCksYT1KU09OLnBhcnNlKGUpO3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9LG9CdD0oLi4udCk9PntsZXQgZT1JMCguLi50KTtyZXR1cm4gUzIuYmFzZTY0LmVuY29kZVVyaShlKX0sbEJ0PXQ9PntsZXQgZT1TMi5iYXNlNjQsaT0oZS5kZWNvZGVVcml8fGUuZGVjb2RlKSh0KTtyZXR1cm4gRnUoaSl9LEokPWNsYXNzIHR7c3RhdGljIGVuZm9sZEZyb21PYmplY3QoZSl7bGV0IGE9bmV3IHRoaXMsaT1hLnNhdmVhYmxlUHJvcGVydGllc3x8W107Zm9yKGxldCByIGluIGUpaS5pbmRleE9mKHIpIT09LTEmJihhW3JdPWVbcl0pO3JldHVybiBhfXN0YXRpYyBlbmZvbGRGcm9tSnNvbihlKXtsZXQgYT1GdShlKTtyZXR1cm4gdGhpcy5lbmZvbGRGcm9tT2JqZWN0KGEpfXNhdmVhYmxlUHJvcGVydGllcztmb2xkVG9PYmplY3QoKXtsZXQgZT1uZXcgU2V0O3JldHVybiBlLmFkZCh0aGlzKSx0aGlzLmZvbGRUb09iamVjdEludGVybmFsKGUpfWZvbGRUb09iamVjdEludGVybmFsKGUpe2xldCBhPXt9LGk9cz0+e2lmKHMgaW5zdGFuY2VvZiB0KXtpZihlLmhhcyhzKSl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkIik7cmV0dXJuIGUuYWRkKHMpLHMuZm9sZFRvT2JqZWN0SW50ZXJuYWwoZSl9cmV0dXJuIEFycmF5LmlzQXJyYXkocyk/cy5tYXAobj0+aShuKSk6UHUuZGVmYXVsdChzKX0scj10aGlzLnNhdmVhYmxlUHJvcGVydGllc3x8W107Zm9yKGxldCBzIG9mIHIpe2xldCBuPXRoaXNbc107YVtzXT1pKG4pfXJldHVybiBhfWZvbGRUb0pzb24oKXtsZXQgZT10aGlzLmZvbGRUb09iamVjdCgpO3JldHVybiBJMChlKX19LGNCdD0oKT0+KHQsZSk9PntsZXQgYT1TdHJpbmcoZS5uYW1lKTtlLmFkZEluaXRpYWxpemVyKGZ1bmN0aW9uKCl7dGhpcy5zYXZlYWJsZVByb3BlcnRpZXN8fCh0aGlzLnNhdmVhYmxlUHJvcGVydGllcz1bXSksdGhpcy5zYXZlYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMoYSl8fHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzLnB1c2goYSl9KX0sYmxlPSh0LGUpPT57bGV0IGE9STAodCksaT1JMChlKTtyZXR1cm4gYT09PWl9LGRCdD0odCxlKT0+e2xldCBhPVEkKHQpLGk9USQoZSk7cmV0dXJuIGJsZShhLGkpfX0pO3ZhciBPdT1iKCgpPT57b2xlKCk7dmxlKCk7ZDIoKTtJaSgpO3Y2KCl9KTt2YXIgaDUsZUE9YigoKT0+e091KCk7UnUoKTtoNT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuc3RhdGVQYXJ0UmVmPWUsdGhpcy5hY3Rpb25EZWY9YX10cmlnZ2VyKGUpe3JldHVybiB0aGlzLnN0YXRlUGFydFJlZi5kaXNwYXRjaEFjdGlvbih0aGlzLGUpfX19KTt2YXIgdTUsUnU9YigoKT0+e091KCk7ZUEoKTt1NT1jbGFzc3tjb25zdHJ1Y3RvcihlLGEpe3RoaXMuc3RhdGU9bmV3IER0LnJ4anMuU3ViamVjdCx0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZD1IZS5jdW11bGF0aXZlRGVmZXIoKSx0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uPW51bGwsdGhpcy53ZWJTdG9yZT1udWxsLHRoaXMubmFtZT1lLGEmJih0aGlzLndlYlN0b3JlT3B0aW9ucz1hKX1hc3luYyBpbml0KCl7aWYodGhpcy53ZWJTdG9yZU9wdGlvbnMpe3RoaXMud2ViU3RvcmU9bmV3IGxhLldlYlN0b3JlKHRoaXMud2ViU3RvcmVPcHRpb25zKSxhd2FpdCB0aGlzLndlYlN0b3JlLmluaXQoKTtsZXQgZT1hd2FpdCB0aGlzLndlYlN0b3JlLmdldChTdHJpbmcodGhpcy5uYW1lKSk7ZSYmdGhpcy52YWxpZGF0ZVN0YXRlKGUpJiYodGhpcy5zdGF0ZVN0b3JlPWUsYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKSl9fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVTdG9yZX1hc3luYyBzZXRTdGF0ZShlKXtpZighdGhpcy52YWxpZGF0ZVN0YXRlKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSdgKTtyZXR1cm4gdGhpcy53ZWJTdG9yZSYmYXdhaXQgdGhpcy53ZWJTdG9yZS5zZXQoU3RyaW5nKHRoaXMubmFtZSksZSksdGhpcy5zdGF0ZVN0b3JlPWUsYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKSx0aGlzLnN0YXRlU3RvcmV9dmFsaWRhdGVTdGF0ZShlKXtyZXR1cm4gZSE9bnVsbH1hc3luYyBub3RpZnlDaGFuZ2UoKXtpZighdGhpcy5zdGF0ZVN0b3JlKXJldHVybjtsZXQgYT1hd2FpdChhc3luYyBpPT5hd2FpdCBkNS5zaGEyNTZGcm9tU3RyaW5nKHA1LnN0YWJsZU9uZVdheVN0cmluZ2lmeShpKSkpKHRoaXMuc3RhdGVTdG9yZSk7dGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCYmYT09PXRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2h8fCh0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoPWEsdGhpcy5zdGF0ZS5uZXh0KHRoaXMuc3RhdGVTdG9yZSkpfW5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKXt0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uJiZjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbiksdGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbj1zZXRUaW1lb3V0KGFzeW5jKCk9Pnt0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uPW51bGwsdGhpcy5zdGF0ZVN0b3JlJiZhd2FpdCB0aGlzLm5vdGlmeUNoYW5nZSgpfSwwKX1zZWxlY3QoZSl7cmV0dXJuIGV8fChlPWk9PmkpLHRoaXMuc3RhdGUucGlwZShEdC5yeGpzLm9wcy5zdGFydFdpdGgodGhpcy5nZXRTdGF0ZSgpKSxEdC5yeGpzLm9wcy5maWx0ZXIoaT0+aSE9PXZvaWQgMCksRHQucnhqcy5vcHMubWFwKGk9Pnt0cnl7cmV0dXJuIGUoaSl9Y2F0Y2gocil7Y29uc29sZS5lcnJvcihgU2VsZWN0b3IgZXJyb3IgaW4gc3RhdGUgcGFydCAnJHt0aGlzLm5hbWV9JzpgLHIpO3JldHVybn19KSl9Y3JlYXRlQWN0aW9uKGUpe3JldHVybiBuZXcgaDUodGhpcyxlKX1hc3luYyBkaXNwYXRjaEFjdGlvbihlLGEpe2F3YWl0IHRoaXMuY3VtdWxhdGl2ZURlZmVycmVkLnByb21pc2U7bGV0IGk9YXdhaXQgZS5hY3Rpb25EZWYodGhpcyxhKTtyZXR1cm4gYXdhaXQgdGhpcy5zZXRTdGF0ZShpKSx0aGlzLmdldFN0YXRlKCl9YXN5bmMgd2FpdFVudGlsUHJlc2VudChlLGEpe2xldCBpPUhlLmRlZmVyKCkscj10aGlzLnNlbGVjdChlKSxzPSExLG49ci5zdWJzY3JpYmUoZD0+e2QmJiFzJiYocz0hMCxpLnJlc29sdmUoZCkpfSksbzthJiYobz1zZXRUaW1lb3V0KCgpPT57c3x8KHM9ITAsbi51bnN1YnNjcmliZSgpLGkucmVqZWN0KG5ldyBFcnJvcihgd2FpdFVudGlsUHJlc2VudCB0aW1lZCBvdXQgYWZ0ZXIgJHthfW1zYCkpKX0sYSkpO3RyeXtyZXR1cm4gYXdhaXQgaS5wcm9taXNlfWZpbmFsbHl7bi51bnN1YnNjcmliZSgpLG8mJmNsZWFyVGltZW91dChvKX19YXN5bmMgc3RhdGVTZXR1cChlKXtsZXQgYT1lKHRoaXMpO3RoaXMuY3VtdWxhdGl2ZURlZmVycmVkLmFkZFByb21pc2UoYSksYXdhaXQgdGhpcy5zZXRTdGF0ZShhd2FpdCBhKX19fSk7dmFyIHRBLHlsZT1iKCgpPT57T3UoKTtSdSgpO3RBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZVBhcnRNYXA9e30sdGhpcy5wZW5kaW5nU3RhdGVQYXJ0Q3JlYXRpb249bmV3IE1hcH1hc3luYyBnZXRTdGF0ZVBhcnQoZSxhLGk9InNvZnQiKXtsZXQgcj10aGlzLnBlbmRpbmdTdGF0ZVBhcnRDcmVhdGlvbi5nZXQoZSk7aWYocilyZXR1cm4gcjtsZXQgcz10aGlzLnN0YXRlUGFydE1hcFtlXTtpZihzKXN3aXRjaChpKXtjYXNlIm1hbmRhdG9yeSI6dGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBwYXJ0ICcke2V9JyBhbHJlYWR5IGV4aXN0cywgYnV0IGluaXRNb2RlIGlzICdtYW5kYXRvcnknYCk7Y2FzZSJmb3JjZSI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gc31lbHNlIGlmKCFhKXRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtlfScgZG9lcyBub3QgZXhpc3QgYW5kIG5vIGluaXRpYWwgc3RhdGUgcHJvdmlkZWRgKTtsZXQgbj10aGlzLmNyZWF0ZVN0YXRlUGFydChlLGEsaSk7dGhpcy5wZW5kaW5nU3RhdGVQYXJ0Q3JlYXRpb24uc2V0KGUsbik7dHJ5e3JldHVybiBhd2FpdCBufWZpbmFsbHl7dGhpcy5wZW5kaW5nU3RhdGVQYXJ0Q3JlYXRpb24uZGVsZXRlKGUpfX1hc3luYyBjcmVhdGVTdGF0ZVBhcnQoZSxhLGk9InNvZnQiKXtsZXQgcj1uZXcgdTUoZSxpPT09InBlcnNpc3RlbnQiP3tkYk5hbWU6InNtYXJ0c3RhdGUiLHN0b3JlTmFtZTplfTpudWxsKTthd2FpdCByLmluaXQoKTtsZXQgcz1yLmdldFN0YXRlKCk7cmV0dXJuIGk9PT0icGVyc2lzdGVudCImJnMhPT12b2lkIDA/YXdhaXQgci5zZXRTdGF0ZSh7Li4uYSwuLi5zfSk6YXdhaXQgci5zZXRTdGF0ZShhKSx0aGlzLnN0YXRlUGFydE1hcFtlXT1yLHJ9fX0pO3ZhciBLbj17fTtXZShLbix7U21hcnRzdGF0ZTooKT0+dEEsU3RhdGVBY3Rpb246KCk9Pmg1LFN0YXRlUGFydDooKT0+dTV9KTt2YXIgYUE9YigoKT0+e3lsZSgpO1J1KCk7ZUEoKX0pO3ZhciB4bGU9YigoKT0+e30pO3ZhciBpQSx3bGU9YigoKT0+e3hsZSgpO2lBPWNsYXNzIHR7c3RhdGljIGNyZWF0ZUZyb21VcmwoZSxhKXtsZXQgaT1uZXcgVVJMKGUpLHI9e30scz1bXTtpLnNlYXJjaCYmaS5zZWFyY2gucmVwbGFjZSgiPyIsIiIpLnNwbGl0KCImIikubWFwKGM9PntzLnB1c2goe2tleTpjLnNwbGl0KCI9IilbMF0sdmFsdWU6Yy5zcGxpdCgiPSIpWzFdfSl9KTtmb3IobGV0IGMgb2YgcylyW2Mua2V5XT1jLnZhbHVlO2lmKGE/LnNlYXJjaFBhcmFtcylmb3IobGV0IGMgb2YgT2JqZWN0LmtleXMoYS5zZWFyY2hQYXJhbXMpKXJbY109YS5zZWFyY2hQYXJhbXNbY107bGV0IG49aS5wYXRobmFtZXx8IiI7aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjApe24rPSI/IjtsZXQgYz0hMDtmb3IobGV0IHAgb2YgT2JqZWN0LmtleXMocikpYz9jPSExOm4rPSImIixuKz1gJHtwfT0ke3JbcF19YH1sZXQgbz17Li4uaSxocmVmOmkuaHJlZixvcmlnaW46aS5vcmlnaW4scHJvdG9jb2w6aS5wcm90b2NvbCx1c2VybmFtZTppLnVzZXJuYW1lLHBhc3N3b3JkOmkucGFzc3dvcmQsaG9zdDppLmhvc3QsaG9zdG5hbWU6aS5ob3N0bmFtZSxwb3J0OmkucG9ydCxwYXRoOm4scGF0aG5hbWU6aS5wYXRobmFtZSxzZWFyY2g6aS5zZWFyY2gsc2VhcmNoUGFyYW1zOnIsaGFzaDppLmhhc2h9OyFvLnBvcnQmJm8ucHJvdG9jb2w9PT0iaHR0cHM6IiYmKG8ucG9ydD0iNDQzIiksIW8ucG9ydCYmby5wcm90b2NvbD09PSJodHRwOiImJihvLnBvcnQ9IjgwIik7bGV0IGQ9bmV3IHQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oZCxvKSxkfXN0YXRpYyBjcmVhdGVGcm9tUGFyc2VkVXJsKGUpe2xldCBhPW5ldyB0O3JldHVybiBPYmplY3QuYXNzaWduKGEsZSksYX1jb25zdHJ1Y3Rvcigpe3RoaXMuc2VhcmNoUGFyYW1zPXt9fWNsb25lKCl7bGV0IGU9bmV3IHQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx0aGlzKSxlLnNlYXJjaFBhcmFtcz17Li4udGhpcy5zZWFyY2hQYXJhbXN9LGV9c2V0KGUsYSl7cmV0dXJuIHRoaXNbZV09YSx0aGlzfXRvU3RyaW5nKCl7bGV0IGU9IiI7cmV0dXJuIHRoaXMudXNlcm5hbWUmJiF0aGlzLnBhc3N3b3JkJiYoZT1gJHt0aGlzLnVzZXJuYW1lfUBgKSx0aGlzLnVzZXJuYW1lJiZ0aGlzLnBhc3N3b3JkJiYoZT1gJHt0aGlzLnVzZXJuYW1lfToke3RoaXMucGFzc3dvcmR9QGApLGAke3RoaXMucHJvdG9jb2x9Ly8ke2V9JHt0aGlzLmhvc3RuYW1lfToke3RoaXMucG9ydH0ke3RoaXMucGF0aH1gfX19KTt2YXIgUW49e307V2UoUW4se1NtYXJ0dXJsOigpPT5pQX0pO3ZhciByQT1iKCgpPT57d2xlKCl9KTt2YXIgTWxlPWIoKCk9PnticigpO3UzKCk7dzMoKTtkMigpO3Y2KCl9KTt2YXIgbkE9e307V2UobkEse1dlYlJlcXVlc3Q6KCk9PnNBfSk7dmFyIHNBLHpsZT1iKCgpPT57TWxlKCk7c0E9Y2xhc3N7Y29uc3RydWN0b3IoZT17fSl7dGhpcy5vcHRpb25zQXJnPWUsdGhpcy5jYWNoZVN0b3JlPW5ldyBsYS5XZWJTdG9yZSh7ZGJOYW1lOiJ3ZWJyZXF1ZXN0IixzdG9yZU5hbWU6IndlYnJlcXVlc3QifSksdGhpcy5vcHRpb25zPXtsb2dnaW5nOiEwLC4uLmV9fWFzeW5jIGdldEpzb24oZSxhPSExKXtsZXQgcj1hd2FpdChhd2FpdCB0aGlzLnJlcXVlc3QoZSx7bWV0aG9kOiJHRVQiLHVzZUNhY2hlOmF9KSkudGV4dCgpO3JldHVybiBDMS5wYXJzZShyKX1hc3luYyBwb3N0SnNvbihlLGEsaT0hMSl7bGV0IHM9YXdhaXQoYXdhaXQgdGhpcy5yZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkMxLnN0cmluZ2lmeShhKSx1c2VDYWNoZTppfSkpLnRleHQoKTtyZXR1cm4gQzEucGFyc2Uocyl9YXN5bmMgcHV0SnNvbihlLGEsaT0hMSl7bGV0IHM9YXdhaXQoYXdhaXQgdGhpcy5yZXF1ZXN0KGUse21ldGhvZDoiUFVUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6QzEuc3RyaW5naWZ5KGEpfSkpLnRleHQoKTtyZXR1cm4gQzEucGFyc2Uocyl9YXN5bmMgZGVsZXRlSnNvbihlLGE9ITEpe2xldCByPWF3YWl0KGF3YWl0IHRoaXMucmVxdWVzdChlLHtoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LG1ldGhvZDoiR0VUIn0pKS50ZXh0KCk7cmV0dXJuIEMxLnBhcnNlKHIpfWFzeW5jIHJlcXVlc3QoZSxhKXthPXt0aW1lb3V0TXM6NmU0LHVzZUNhY2hlOiExLC4uLmF9O2xldCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7cHQuZGVsYXlGb3IoYS50aW1lb3V0TXMpLnRoZW4oKCk9PntpLmFib3J0KCl9KTtsZXQgcj1IZS5kZWZlcigpLHM9ITE7aWYoYS51c2VDYWNoZSYmYXdhaXQgdGhpcy5jYWNoZVN0b3JlLmNoZWNrKGUpKXtsZXQgbz1hd2FpdCB0aGlzLmNhY2hlU3RvcmUuZ2V0KGUpO3IucmVzb2x2ZShuZXcgUmVzcG9uc2Uobyx7fSkpfWVsc2Ugci5yZXNvbHZlKG51bGwpO2xldCBuPWF3YWl0IGZldGNoKGUse3NpZ25hbDppLnNpZ25hbCxtZXRob2Q6YS5tZXRob2QsaGVhZGVyczp7Li4uYS5oZWFkZXJzfHx7fX0sYm9keTphLmJvZHl9KS5jYXRjaChhc3luYyBvPT5hLnVzZUNhY2hlJiZhd2FpdCByLnByb21pc2U/KHM9ITAsci5wcm9taXNlKTpvKTtpZihhLnVzZUNhY2hlJiZhd2FpdCByLnByb21pc2UmJm4uc3RhdHVzPT09NTAwJiYocz0hMCxuPWF3YWl0IHIucHJvbWlzZSksIXMmJmEudXNlQ2FjaGUmJm4uc3RhdHVzPDMwMCl7bGV0IG89YXdhaXQgbi5jbG9uZSgpLmFycmF5QnVmZmVyKCk7YXdhaXQgdGhpcy5jYWNoZVN0b3JlLnNldChlLG8pfXJldHVybiB0aGlzLmxvZyhgJHtlfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke24uc3RhdHVzfWApLG59YXN5bmMgcmVxdWVzdE11bHRpRW5kcG9pbnQoZSxhKXtsZXQgaSxyPTA7QXJyYXkuaXNBcnJheShlKT9pPWU6aT1bZV07bGV0IHM9W10sbj1hc3luYyBjPT57cy5wdXNoKGMpLGM9PT0iNDI5IiYmKGNvbnNvbGUubG9nKCJnb3QgNDI5LCBzbyB3YWl0aW5nIGEgbGl0dGxlIGJpdC4iKSxhd2FpdCBwdC5kZWxheUZvcihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMSkrMWUzKSk7bGV0IHA9MDtmb3IobGV0IGwgb2YgcylsPT09YyYmcCsrO3A+MippLmxlbmd0aCpyJiZyKyt9LG89YXN5bmMgYz0+e2lmKCFjKXRocm93IG5ldyBFcnJvcigicmVxdWVzdCBmYWlsZWQgcGVybWFuZW50bHkiKTt0aGlzLmxvZyhgR2V0dGluZyAke2N9IHdpdGggbWV0aG9kICR7YS5tZXRob2R9YCk7bGV0IHA9YXdhaXQgZmV0Y2goYyx7bWV0aG9kOmEubWV0aG9kLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwuLi5hLmhlYWRlcnN8fHt9fSxib2R5OmEuYm9keX0pO3JldHVybiB0aGlzLmxvZyhgJHtjfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke3Auc3RhdHVzfWApLHAuc3RhdHVzPj0yMDAmJnAuc3RhdHVzPDMwMD9wOihhd2FpdCBuKHAuc3RhdHVzLnRvU3RyaW5nKCkpLGF3YWl0IG8oaVtyXSkpfTtyZXR1cm4gYXdhaXQgbyhpW3JdKX1sb2coZSl7dGhpcy5vcHRpb25zLmxvZ2dpbmcmJmNvbnNvbGUubG9nKGUpfX19KTt2YXIgQnUsTjAsSHU9YigoKT0+e0J1PWNsYXNze2NsYWltKCl7aWYodGhpcy5jbGFpbWVkKXRocm93IG5ldyBFcnJvcigiRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkIik7dGhpcy5jbGFpbWVkPSEwfWdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWRBdD90aGlzLnN0b3BwZWRBdC10aGlzLnN0YXJ0ZWRBdDpEYXRlLm5vdygpLXRoaXMuc3RhcnRlZEF0fWNvbnN0cnVjdG9yKCl7dGhpcy5jbGFpbWVkPSExLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxhKT0+e3RoaXMucmVzb2x2ZT1pPT57dGhpcy5zdGF0dXM9ImZ1bGZpbGxlZCIsdGhpcy5zdG9wcGVkQXQ9RGF0ZS5ub3coKSxlKGkpfSx0aGlzLnJlamVjdD1pPT57dGhpcy5zdGF0dXM9InJlamVjdGVkIix0aGlzLnN0b3BwZWRBdD1EYXRlLm5vdygpLGEoaSl9LHRoaXMuc3RhcnRlZEF0PURhdGUubm93KCksdGhpcy5zdGF0dXM9InBlbmRpbmcifSl9fSxOMD0oKT0+bmV3IEJ1fSk7dmFyIHF1LHVCdCxrbGU9YigoKT0+e0h1KCk7cXU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXM9W10sdGhpcy5kZWZlcnJlZD1OMCgpLHRoaXMucHJvbWlzZT10aGlzLmRlZmVycmVkLnByb21pc2Usc2V0VGltZW91dChhc3luYygpPT57Zm9yKDt0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoPjA7KWF3YWl0IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpO3RoaXMuZGVmZXJyZWQucmVzb2x2ZSgpfSwwKX1hZGRQcm9taXNlKGUpe3RoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKGUpfX0sdUJ0PSgpPT5uZXcgcXV9KTt2YXIgRjA9e307V2UoRjAse0N1bXVsYXRpdmVEZWZlcnJlZDooKT0+cXUsRGVmZXJyZWQ6KCk9PkJ1LGN1bXVsYXRpdmVEZWZlcjooKT0+dUJ0LGRlZmVyOigpPT5OMCxnZXRGaXJzdFRydWVPckZhbHNlOigpPT52QnQsbWFwOigpPT5nQnQscmVqZWN0ZWRQcm9taXNlOigpPT5tQnQscmVzb2x2ZWRQcm9taXNlOigpPT5mQnQsdGltZW91dEFuZENvbnRpbnVlOigpPT5iQnQsdGltZW91dFdyYXA6KCk9PlNsZX0pO3ZhciBmQnQsbUJ0LGdCdCxTbGUsYkJ0LHZCdCxvQT1iKCgpPT57SHUoKTtrbGUoKTtIdSgpO2ZCdD10PT5Qcm9taXNlLnJlc29sdmUodCksbUJ0PXQ9PlByb21pc2UucmVqZWN0KHQpLGdCdD1hc3luYyh0LGUpPT57bGV0IGE9W10saT1bXTtmb3IobGV0IHIgb2YgdCl7bGV0IHM9ZShyKTthLnB1c2gocykscy50aGVuKG49PntpLnB1c2gobil9KX1yZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYSksaX0sU2xlPWFzeW5jKHQsZSxhPSEwKT0+bmV3IFByb21pc2UoKGkscik9PntzZXRUaW1lb3V0KCgpPT57YT9yKG5ldyBFcnJvcigidGltZW91dCIpKTppKG51bGwpfSxlKSx0LnRoZW4oaSxyKX0pLGJCdD1hc3luYyh0LGU9NmU0KT0+U2xlKHQsZSwhMSksdkJ0PWFzeW5jIHQ9PntsZXQgZT1OMCgpO2ZvcihsZXQgYSBvZiB0KWEudGhlbihpPT57aT09PSEwJiZlLnJlc29sdmUoITApfSk7cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKCk9PntlLnJlc29sdmUoITEpfSksZS5wcm9taXNlfX0pO3ZhciBsQT17fTtXZShsQSx7VGltZW91dDooKT0+VnUsZGVsYXlGb3I6KCk9PkNsZSxkZWxheUZvclJhbmRvbTooKT0+eUJ0fSk7dmFyIENsZSx5QnQsVnUsX2xlPWIoKCk9PntvQSgpO0NsZT1hc3luYyh0LGUsYT0hMSk9Pihhd2FpdCBuZXcgVnUodCxudWxsLGEpLnByb21pc2UsZSkseUJ0PWFzeW5jKHQsZSxhLGk9ITEpPT4oYXdhaXQgQ2xlKE1hdGgucmFuZG9tKCkqKGUtdCkrdCxudWxsLGkpLGEpLFZ1PWNsYXNze2NvbnN0cnVjdG9yKGUsYSxpPSExKXt0aGlzLl9jYW5jZWxsZWQ9ITEsdGhpcy50aW1lb3V0SW5NaWxsaXM9ZSx0aGlzLl9kZWZlcnJlZD1OMCgpLHRoaXMucHJvbWlzZT10aGlzLl9kZWZlcnJlZC5wcm9taXNlLHRoaXMuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbmNlbGxlZHx8dGhpcy5fZGVmZXJyZWQucmVzb2x2ZShhKX0sZSksdGhpcy5zdGFydGVkPURhdGUubm93KCksaSYmdGhpcy5tYWtlVW5yZWZlZCgpfW1ha2VVbnJlZmVkKCl7dGhpcy5fdGltZW91dC51bnJlZigpfWNhbmNlbCgpe3RoaXMuX2NhbmNlbGxlZD0hMCxjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCl9Z2V0VGltZUxlZnQoKXtsZXQgZT10aGlzLnN0YXJ0ZWQrdGhpcy50aW1lb3V0SW5NaWxsaXMtRGF0ZS5ub3coKTtyZXR1cm4gZT4wP2U6MH19fSk7dmFyIFRsZT1iKCgpPT57fSk7dmFyIGp1PWIoKCk9PntxcigpfSk7dmFyIFV1PWIoKCk9PntxcigpO3FyKCl9KTt2YXIgTGxlPWIoKCk9PntxcigpfSk7dmFyICRsZT1iKCgpPT57fSk7dmFyIEFsZT1iKCgpPT57cXIoKX0pO3ZhciBEbGU9YigoKT0+e3FyKCl9KTt2YXIgRWxlPWIoKCk9Pnt9KTt2YXIgUGxlPWIoKCk9Pnt9KTt2YXIgY0E9e307dmFyIFd1PWIoKCk9PntMbGUoKTskbGUoKTtBbGUoKTtEbGUoKTtFbGUoKTtQbGUoKX0pO3ZhciBkQSxJbGU9YigoKT0+e1d1KCk7anUoKTtVdSgpO2RBPWNsYXNze319KTt2YXIgTmxlPWIoKCk9Pnt9KTt2YXIgRmxlPWIoKCk9Pnt9KTt2YXIgT2xlPWIoKCk9Pnt9KTt2YXIgUmxlPWIoKCk9Pnt9KTt2YXIgcEE9e307dmFyIGhBPWIoKCk9PntObGUoKTtGbGUoKTtPbGUoKTtSbGUoKX0pO3ZhciBCbGU9YigoKT0+e3VBKCk7V3UoKTtoQSgpfSk7dmFyIEhsZT1iKCgpPT57fSk7dmFyIHFsZT1iKCgpPT57VXUoKX0pO3ZhciBWbGU9YigoKT0+e30pO3ZhciBHdT17fTtXZShHdSx7SUpvYjooKT0+ZEF9KTt2YXIgdUE9YigoKT0+e1RsZSgpO2p1KCk7VXUoKTtJbGUoKTtCbGUoKTtIbGUoKTtxbGUoKTtWbGUoKX0pO3ZhciBqbGU9YigoKT0+e30pO3ZhciBVbGU9YigoKT0+e30pO3ZhciBmQT17fTt2YXIgV2xlPWIoKCk9PntqbGUoKTtVbGUoKX0pO3ZhciBHbGU9YigoKT0+e30pO3ZhciBZbGU9YigoKT0+e30pO3ZhciBtQT17fTt2YXIgWmxlPWIoKCk9PntHbGUoKTtZbGUoKX0pO3ZhciBnQT1iKCgpPT57cXIoKX0pO3ZhciBYbGU9YigoKT0+e3FyKCl9KTt2YXIgS2xlPWIoKCk9PntnQSgpfSk7dmFyIGJBPXt9O3ZhciBRbGU9YigoKT0+e2dBKCk7WGxlKCk7S2xlKCl9KTt2YXIgSmxlPWIoKCk9Pnt9KTt2YXIgZWNlPWIoKCk9Pnt9KTt2YXIgdkE9e307dmFyIHRjZT1iKCgpPT57SmxlKCk7ZWNlKCl9KTt2YXIgeUE9YigoKT0+e30pO3ZhciB4QSxhY2U9YigoKT0+e3lBKCk7eEE9Y2xhc3N7fX0pO3ZhciBpY2U9YigoKT0+e30pO3ZhciByY2U9YigoKT0+e30pO3ZhciBzY2U9YigoKT0+e30pO3ZhciBuY2U9YigoKT0+e30pO3ZhciBvY2U9YigoKT0+e30pO3ZhciBsY2U9YigoKT0+e30pO3ZhciBjY2U9YigoKT0+e30pO3ZhciBkY2U9YigoKT0+e30pO3ZhciBwY2U9YigoKT0+e30pO3ZhciBZdT17fTtXZShZdSx7SUNuYW1lRGVzY3JpcHRvcjooKT0+eEF9KTt2YXIgaGNlPWIoKCk9Pnt5QSgpO2FjZSgpO2ljZSgpO3JjZSgpO3NjZSgpO25jZSgpO29jZSgpO2xjZSgpO2NjZSgpO2RjZSgpO3BjZSgpfSk7dmFyIHdBPWIoKCk9PntqdSgpfSk7dmFyIHVjZT1iKCgpPT57d0EoKX0pO3ZhciBNQT17fTt2YXIgZmNlPWIoKCk9Pnt1Y2UoKTt3QSgpfSk7dmFyIHpBPXt9O3ZhciBtY2U9YigoKT0+e30pO3ZhciBnY2U9YigoKT0+e30pO3ZhciBiY2U9YigoKT0+e30pO3ZhciB2Y2U9YigoKT0+e30pO3ZhciBrQT17fTt2YXIgeWNlPWIoKCk9PntnY2UoKTtiY2UoKTt2Y2UoKX0pO3ZhciB4Y2U9YigoKT0+e30pO3ZhciBTQT17fTtXZShTQSx7YnVzaW5lc3M6KCk9Pkd1LGNvZGU6KCk9PmZBLGNvbnRhaW5lcjooKT0+bUEsY29udGVudDooKT0+YkEsZGF0YWJhc2U6KCk9PnBBLGZpbmFuY2U6KCk9PmNBLGdlbmVyYWw6KCk9PnZBLG5ldHdvcms6KCk9Pll1LHNhYXM6KCk9Pk1BLHN0b3JhZ2U6KCk9PnpBLHdlYnNpdGU6KCk9PmtBfSk7dmFyIHFyPWIoKCk9Pnt1QSgpO1dsZSgpO1psZSgpO2hBKCk7V3UoKTtRbGUoKTt0Y2UoKTtoY2UoKTtmY2UoKTttY2UoKTt5Y2UoKTt4Y2UoKX0pO3ZhciBfcz1iKCgpPT57X2xlKCk7b0EoKTtxcigpfSk7dmFyIFp1PWIoKCk9PntfcygpfSk7dmFyIEpuLGY1PWIoKCk9PntfcygpO0puPWNsYXNze2FwcGVuZFRvRG9tKCl7IXRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50JiYhdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmKX1yZW1vdmVGcm9tRG9tKCl7dGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQ/dGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKTp0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZSYmdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKX19fSk7dmFyIE8wLFh1PWIoKCk9PntfcygpO1p1KCk7ZjUoKTtPMD1jbGFzcyB0IGV4dGVuZHMgSm57c3RhdGljIGNyZWF0ZUNvbXBhbnlKc29uTGQoZSl7bGV0IGE9eyJAY29udGV4dCI6Imh0dHBzOi8vc2NoZW1hLm9yZyIsIkB0eXBlIjoiQ29ycG9yYXRpb24iLG5hbWU6ZS5uYW1lLGFsdGVybmF0ZU5hbWU6ZS5uYW1lLnJlcGxhY2UoIiBHbWJIIiwiIiksdXJsOmUuY29udGFjdC53ZWJzaXRlLGxvZ286ZS5jb250YWN0LmxvZ29VcmwsY29udGFjdFBvaW50OnsiQHR5cGUiOiJDb250YWN0UG9pbnQiLHRlbGVwaG9uZTplLmNvbnRhY3QucGhvbmUsY29udGFjdFR5cGU6ImN1c3RvbWVyIHNlcnZpY2UiLGFyZWFTZXJ2ZWQ6IkRFIixhdmFpbGFibGVMYW5ndWFnZTpbImVuIiwiR2VybWFuIl19LHNhbWVBczpbXX07cmV0dXJuIGUuY29udGFjdC5mYWNlYm9va1VybCYmYS5zYW1lQXMucHVzaChlLmNvbnRhY3QuZmFjZWJvb2tVcmwpLGUuY29udGFjdC50d2l0dGVyVXJsJiZhLnNhbWVBcy5wdXNoKGUuY29udGFjdC50d2l0dGVyVXJsKSxuZXcgdChhKX1zdGF0aWMgY3JlYXRlTmV3c0FydGljbGVKc29uTGQoZSl7bGV0IGE9eyJAY29udGV4dCI6Imh0dHBzOi8vc2NoZW1hLm9yZyIsIkB0eXBlIjoiTmV3c0FydGljbGUiLG1haW5FbnRpdHlPZlBhZ2U6eyJAdHlwZSI6IldlYlBhZ2UiLCJAaWQiOndpbmRvdy5sb2NhdGlvbi5ocmVmfSxoZWFkbGluZToiQXJ0aWNsZSBoZWFkbGluZSIsaW1hZ2U6W2UuZmVhdHVyZWRJbWFnZVVybF0sZGF0ZVB1Ymxpc2hlZDpuZXcgRGF0ZShlLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSxkYXRlTW9kaWZpZWQ6bmV3IERhdGUoZS50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksYXV0aG9yOnsiQHR5cGUiOiJQZXJzb24iLG5hbWU6YCR7ZS5hdXRob3IuZmlyc3ROYW1lfSAke2UuYXV0aG9yLnN1ck5hbWV9YH0scHVibGlzaGVyOnsiQHR5cGUiOiJPcmdhbml6YXRpb24iLG5hbWU6ZS5hdXRob3Iuc3VyTmFtZSxsb2dvOnsiQHR5cGUiOiJJbWFnZU9iamVjdCIsdXJsOmUuYXV0aG9yLnN1ck5hbWV9fSxkZXNjcmlwdGlvbjplLmF1dGhvci5maXJzdE5hbWV9O3JldHVybiBuZXcgdChhKX1zdGF0aWMgY3JlYXRlUHJvZHVjdEpzb25MZChlLGEpe2xldCBpPXsiQGNvbnRleHQiOiJodHRwczovL3NjaGVtYS5vcmciLCJAdHlwZSI6IlNvZnR3YXJlQXBwbGljYXRpb24iLG5hbWU6ZS5uYW1lLGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb24sb3BlcmF0aW5nU3lzdGVtOmUub3MsYXBwbGljYXRpb25DYXRlZ29yeTplLmNhdGVnb3J5LG9mZmVyczp7IkB0eXBlIjoiT2ZmZXIiLG5hbWU6IlVzZXItYmFzZWQgUGxhbiIscHJpY2VTcGVjaWZpY2F0aW9uOnsiQHR5cGUiOiJQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbiIsdmFsdWVOYW1lOiJOdW1iZXIgb2YgVXNlcnMiLHZhbHVlUmVxdWlyZWQ6ITAscHJpY2U6IjQuOTkiLHByaWNlQ3VycmVuY3k6IkVVUiJ9fSxwdWJsaXNoZXI6dGhpcy5jcmVhdGVDb21wYW55SnNvbkxkKGEpLmVsZW1lbnRSZWYudGV4dENvbnRlbnQsc2NyZWVuc2hvdDoiaHR0cHM6Ly93d3cuc29jaWFsLmlvL3NjcmVlbnNob3QucG5nIix1cmw6Imh0dHBzOi8vd3d3LnNvY2lhbC5pby8ifTtyZXR1cm4gbmV3IHQoaSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoKTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLnR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iLGEudGV4dD1KU09OLnN0cmluZ2lmeShlKSx0aGlzLmVsZW1lbnRSZWY9YX19fSk7dmFyIGRhLEt1PWIoKCk9PntfcygpO2Y1KCk7ZGE9Y2xhc3MgdCBleHRlbmRzIEpue3N0YXRpYyBjcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhlKXtsZXQgYT1bXTtyZXR1cm4gYS5wdXNoKG5ldyB0KCJvZzp1cmwiLGUudXJsKSksYS5wdXNoKG5ldyB0KCJvZzp0aXRsZSIsZS50aXRsZSkpLGEucHVzaChuZXcgdCgib2c6ZGVzY3JpcHRpb24iLGUuY29udGVudCkpLGEucHVzaChuZXcgdCgib2c6aW1hZ2UiLGUuZmVhdHVyZWRJbWFnZVVybCkpLGF9c3RhdGljIGNyZWF0ZVByb2R1Y3RPZ1RhZ3MoZSl7bGV0IGE9W107cmV0dXJuIGEucHVzaChuZXcgdCgib2c6dXJsIixnbG9iYWxUaGlzLmxvY2F0aW9uLmhyZWYpKSxhLnB1c2gobmV3IHQoIm9nOnRpdGxlIixgJHtlLm5hbWV9IC0gJHtlLnNsb2dhbn1gKSksYS5wdXNoKG5ldyB0KCJvZzpzaXRlX25hbWUiLGUubmFtZSkpLGEucHVzaChuZXcgdCgib2c6ZGVzY3JpcHRpb24iLGUuZGVzY3JpcHRpb24pKSxhLnB1c2gobmV3IHQoIm9nOmltYWdlIixlLmxvZ29MaW5rKSksYX1jb25zdHJ1Y3RvcihlLGEpe3N1cGVyKCk7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibWV0YSIpO2kuc2V0QXR0cmlidXRlKCJwcm9wZXJ0eSIsZSksaS5jb250ZW50PWEsdGhpcy5lbGVtZW50UmVmPWl9fX0pO3ZhciBlbCxDQT1iKCgpPT57ZjUoKTtYdSgpO0t1KCk7X0EoKTtfcygpO2VsPWNsYXNze3NldCB0aXRsZShlKXt0aGlzLnRpdGxlU3RvcmU9ZSx0aGlzLnN0YXRlPT09ImVuYWJsZWQiJiYoZG9jdW1lbnQudGl0bGU9dGhpcy50aXRsZVN0b3JlKX1nZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZVN0b3JlfWNvbnN0cnVjdG9yKGUsYSl7dGhpcy50YWdzPVtdLHRoaXMuc3RhdGU9ImRpc2FibGVkIix0aGlzLnRhZ01hbmFnZXJSZWY9ZX1hZGRUYWcoZSl7aWYoZSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYSBvZiBlKXRoaXMuYWRkVGFnKGEpO2Vsc2UgdGhpcy50YWdzLnB1c2goZSksdGhpcy5zdGF0ZT09PSJlbmFibGVkIiYmZS5hcHBlbmRUb0RvbSgpfWFzeW5jIGFkZENvbXBhbnlJbmZvKGUpe3RoaXMuYWRkVGFnKE8wLmNyZWF0ZUNvbXBhbnlKc29uTGQoZSkpLHRoaXMuYWRkVGFnKG5ldyBkYSgib2c6dHlwZSIsImJ1c2luZXNzLmJ1c2luZXNzIikpLHRoaXMuYWRkVGFnKG5ldyBkYSgib2c6dGl0bGUiLGUubmFtZSkpLHRoaXMuYWRkVGFnKG5ldyBkYSgib2c6dXJsIixlLmNvbnRhY3Qud2Vic2l0ZSkpLHRoaXMuYWRkVGFnKG5ldyBkYSgib2c6aW1hZ2UiLGUuY29udGFjdC5sb2dvVXJsKSksdGhpcy5hZGRUYWcobmV3IGRhKCJidXNpbmVzczpjb250YWN0X2RhdGE6c3RyZWV0X2FkZHJlc3MiLGAke2UuY29udGFjdC5hZGRyZXNzLnN0cmVldE5hbWV9ICR7ZS5jb250YWN0LmFkZHJlc3MuaG91c2VOdW1iZXJ9YCkpLHRoaXMuYWRkVGFnKG5ldyBkYSgiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmxvY2FsaXR5IixlLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKSksdGhpcy5hZGRUYWcobmV3IGRhKCJidXNpbmVzczpjb250YWN0X2RhdGE6cmVnaW9uIixlLmNvbnRhY3QuYWRkcmVzcy5jaXR5KSksdGhpcy5hZGRUYWcobmV3IGRhKCJidXNpbmVzczpjb250YWN0X2RhdGE6cG9zdGFsX2NvZGUiLGUuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKSx0aGlzLmFkZFRhZyhuZXcgZGEoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpjb3VudHJ5X25hbWUiLGUuY29udGFjdC5hZGRyZXNzLmNvdW50cnkpKX1hZGROZXdzQXJ0aWNsZUluZm8oZSl7dGhpcy5hZGRUYWcoTzAuY3JlYXRlTmV3c0FydGljbGVKc29uTGQoZSkpLHRoaXMuYWRkVGFnKGRhLmNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKGUpKX1hZGRQcm9kdWN0SW5mbyhlLGEpe3RoaXMuYWRkVGFnKE8wLmNyZWF0ZVByb2R1Y3RKc29uTGQoZSxhKSksdGhpcy5hZGRUYWcoZGEuY3JlYXRlUHJvZHVjdE9nVGFncyhlKSl9YXN5bmMgZW5hYmxlKCl7dGhpcy50aXRsZSYmKGRvY3VtZW50LnRpdGxlPXRoaXMudGl0bGUpO2ZvcihsZXQgZSBvZiB0aGlzLnRhZ3MpZS5hcHBlbmRUb0RvbSgpO3RoaXMuc3RhdGU9ImVuYWJsZWQifWFzeW5jIGRpc2FibGUoKXtmb3IobGV0IGUgb2YgdGhpcy50YWdzKWUucmVtb3ZlRnJvbURvbSgpO3RoaXMuc3RhdGU9ImRpc2FibGVkIn19fSk7dmFyIGhpLFRBPWIoKCk9PntmNSgpO2hpPWNsYXNzIGV4dGVuZHMgSm57Y29uc3RydWN0b3IoZSxhKXtzdXBlcigpO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTtpLm5hbWU9ZSxpLmNvbnRlbnQ9YSx0aGlzLmVsZW1lbnRSZWY9aX19fSk7dmFyIFF1LF9BPWIoKCk9PntDQSgpO19zKCk7WnUoKTtUQSgpO1h1KCk7S3UoKTtRdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZ2xvYmFsTGV2ZWw9bmV3IGVsKHRoaXMsImdsb2JhbCIpLHRoaXMuYmFzZUxldmVsPW5ldyBlbCh0aGlzLCJiYXNlIil9YXN5bmMgc2V0dXAoZSl7c3dpdGNoKHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBoaSgiZ29vZ2xlIiwibm90cmFuc2xhdGUiKSksdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IGhpKCJyZXZpc2l0LWFmdGVyIiwiMSBkYXlzIikpLGUudHdpdHRlckhhbmRsZSYmKHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBoaSgidHdpdHRlcjpjYXJkIiwic3VtbWFyeV9sYXJnZV9pbWFnZSIpKSx0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgaGkoInR3aXR0ZXI6c2l0ZSIsZS50d2l0dGVySGFuZGxlKSksdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IGhpKCJ0d2l0dGVyOmNyZWF0b3IiLGUudHdpdHRlckhhbmRsZSkpKSx0aGlzLmJhc2VMZXZlbC50aXRsZT1lLnRpdGxlLGUuZGVzY3JpcHRpb24mJnRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgaGkoImRlc2NyaXB0aW9uIixlLmRlc2NyaXB0aW9uKSksZS5jYW5vbmljYWxEb21haW4mJnRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgaGkoImNhbm9uaWNhbCIsZS5jYW5vbmljYWxEb21haW4pKSwhMCl7Y2FzZShlLmxkQ29tcGFueSYmIWUubGRQcm9kdWN0KTp0aGlzLmJhc2VMZXZlbC5hZGRDb21wYW55SW5mbyhlLmxkQ29tcGFueSk7YnJlYWs7Y2FzZSEhZS5sZFByb2R1Y3Q6dGhpcy5iYXNlTGV2ZWwuYWRkUHJvZHVjdEluZm8oZS5sZFByb2R1Y3QsZS5sZENvbXBhbnkpO2JyZWFrfWF3YWl0IHRoaXMuZ2xvYmFsTGV2ZWwuZW5hYmxlKCksdGhpcy5hY3RpdmVMZXZlbD10aGlzLmJhc2VMZXZlbCxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpfWFzeW5jIHNldFN1YlBhZ2VMZXZlbChlKXtsZXQgYT1uZXcgZWwodGhpcywic3VicGFnZSIpO3JldHVybiBhLnRpdGxlPWUudGl0bGUsZS5kZXNjcmlwdGlvbiYmYS5hZGRUYWcobmV3IGhpKCJkZXNjcmlwdGlvbiIsZS5kZXNjcmlwdGlvbikpLGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZGlzYWJsZSgpLHRoaXMuYWN0aXZlTGV2ZWw9YSxhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpLGF9YXN5bmMgcmV2ZXJ0VG9CYXNlTGV2ZWwoKXt0aGlzLmFjdGl2ZUxldmVsIT09dGhpcy5iYXNlTGV2ZWwmJihhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKSx0aGlzLmFjdGl2ZUxldmVsPXRoaXMuYmFzZUxldmVsLGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCkpfX19KTt2YXIgbTUsd2NlPWIoKCk9PntfcygpO1p1KCk7X0EoKTtDQSgpO201PWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMudGFnTWFuYWdlcj1uZXcgUXUsdGhpcy5yZWFkeURlZmVycmVkPUYwLmRlZmVyKCksdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQ9RjAuZGVmZXIoKSx0aGlzLnJlYWR5UHJvbWlzZT10aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZSx0aGlzLnJlYWR5Rm9yU21hcnRzc3JQcm9taXNlPXRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnByb21pc2UsdGhpcy5vcHRpb25zPWUsdGhpcy5zZXR1cCgpLnRoZW4oKCk9Pnt0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpLHRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbHx8dGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpfSl9YXN5bmMgc2V0dXAoZSl7ZSYmKHRoaXMub3B0aW9ucz1lKSxhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0dXAodGhpcy5vcHRpb25zLm1ldGFPYmplY3QpfXJldmVydFRvQmFzZUxldmVsKCl7dGhpcy50YWdNYW5hZ2VyLnJldmVydFRvQmFzZUxldmVsKCl9YXN5bmMgc2V0U3ViTGV2ZWwoZSl7cmV0dXJuIGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXRTdWJQYWdlTGV2ZWwoZSl9Zmxhc2hUaXRsZShlKXt9aW5mb3JtUmVhZHlGb3JTbWFydHNzcigpe3RoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbHx8Y29uc29sZS5lcnJvcigiWW91IGhhdmUgbm90IGluZGljYXRlZCB0aGF0IHlvdSBpbmZvcm0gc21hcnRzc3IgYnkgYSBkZWRpY2F0ZWQgc2lnbmFsISBQbGVhc2UgY29uc2lkZXIgZG9pbmcgc28hIiksdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpfX19KTt2YXIgTEEsTWNlPWIoKCk9PntfcygpO0xBPWNsYXNze319KTt2YXIgJEE9e307V2UoJEEse0pzb25MZFRhZzooKT0+TzAsTWV0YVRhZzooKT0+aGksT3BlbmdyYXBoVGFnOigpPT5kYSxUaXRsZTooKT0+TEEsV2ViU2V0dXA6KCk9Pm01fSk7dmFyIEp1PWIoKCk9Pnt3Y2UoKTtUQSgpO0t1KCk7WHUoKTtNY2UoKX0pO3ZhciB6Y2UsZWY9YigoKT0+e2JyKCk7T2soKTtkMigpO0lpKCk7b0MoKTt6Y2U9VTEoY0MoKSwxKX0pO3ZhciB0bCxBQT1iKCgpPT57ZWYoKTt0bD1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7dGhpcy5tYXBPYmplY3Q9e319aXNVbmlxdWVLZXkoZSl7cmV0dXJuIXRoaXMubWFwT2JqZWN0W2VdfWFkZFRvTWFwKGUsYSxpKXtyZXR1cm4gdGhpcy5pc1VuaXF1ZUtleShlKXx8aSYmaS5mb3JjZT8odGhpcy5tYXBPYmplY3RbZV09YSwhMCk6ITF9Z2V0QnlLZXkoZSl7cmV0dXJuIHRoaXMubWFwT2JqZWN0W2VdfXJlbW92ZUZyb21NYXAoZSl7bGV0IGE9dGhpcy5nZXRCeUtleShlKTtyZXR1cm4gZGVsZXRlIHRoaXMubWFwT2JqZWN0W2VdLGF9Z2V0S2V5cygpe2xldCBlPVtdO2ZvcihsZXQgYSBpbiB0aGlzLm1hcE9iamVjdCl0aGlzLm1hcE9iamVjdFthXSYmZS5wdXNoKGEpO3JldHVybiBlfWNsZWFuKCl7dGhpcy5tYXBPYmplY3Q9e319Y29uY2F0KGUpe2xldCBhPW5ldyB0O2ZvcihsZXQgaSBvZiB0aGlzLmdldEtleXMoKSlhLmFkZFRvTWFwKGksdGhpcy5nZXRCeUtleShpKSk7Zm9yKGxldCBpIG9mIGUuZ2V0S2V5cygpKWEuYWRkVG9NYXAoaSxlLmdldEJ5S2V5KGkpLHtmb3JjZTohMH0pO3JldHVybiBhfWFkZEFsbEZyb21PdGhlcihlKXtmb3IobGV0IGEgb2YgZS5nZXRLZXlzKCkpdGhpcy5hZGRUb01hcChhLGUuZ2V0QnlLZXkoYSkse2ZvcmNlOiEwfSl9YXN5bmMgZmluZChlKXtmb3IobGV0IGEgb2YgdGhpcy5nZXRLZXlzKCkpe2xldCBpPXRoaXMuZ2V0QnlLZXkoYSk7aWYoYXdhaXQgZShpKSlyZXR1cm4gaX19fX0pO3ZhciB3QnQsdGYsU2NlPWIoKCk9PntlZigpO0FBKCk7d0J0PSh0PSJ1bmkiKT0+YCR7dH14eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLGU9PntsZXQgYT1NYXRoLnJhbmRvbSgpKjE2fDA7cmV0dXJuKGU9PT0ieCI/YTphJjN8OCkudG9TdHJpbmcoMTYpfSksdGY9Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZmFzdE1hcD1uZXcgdGwsdGhpcy5ldmVudFN1YmplY3Q9bmV3IER0LnJ4anMuU3ViamVjdH1hZGRNYXBwZWRVbmlxdWUoZSxhKXt0aGlzLmZhc3RNYXAuYWRkVG9NYXAoZSxhKX1nZXRNYXBwZWRVbmlxdWUoZSl7cmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRCeUtleShlKX1yZW1vdmVNYXBwZWRVbmlxdWUoZSl7bGV0IGE9dGhpcy5nZXRNYXBwZWRVbmlxdWUoZSl9YWRkKGUpe2ZvcihsZXQgaSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWlmKHRoaXMuZmFzdE1hcC5nZXRCeUtleShpKT09PWUpcmV0dXJuIGk7bGV0IGE9d0J0KCJrZXkiKTtyZXR1cm4gdGhpcy5hZGRNYXBwZWRVbmlxdWUoYSxlKSx0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtvcGVyYXRpb246ImFkZCIscGF5bG9hZDplfSksYX1hZGRBcnJheShlKXtmb3IobGV0IGEgb2YgZSl0aGlzLmFkZChhKX1jaGVja0Zvck9iamVjdChlKXtyZXR1cm4hIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KGUpfWdldEtleUZvck9iamVjdChlKXtsZXQgYT1udWxsO2ZvcihsZXQgaSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWlmKCFhJiZ0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoaSk9PT1lKWE9aTtlbHNlIGNvbnRpbnVlO3JldHVybiBhfWFzeW5jIGZpbmQoZSl7cmV0dXJuIHRoaXMuZmFzdE1hcC5maW5kKGUpfWZpbmRTeW5jKGUpe2ZvcihsZXQgYSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWlmKGUodGhpcy5mYXN0TWFwLmdldEJ5S2V5KGEpKSlyZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoYSl9YXN5bmMgZmluZE9uZUFuZFJlbW92ZShlKXtsZXQgYT1hd2FpdCB0aGlzLmZpbmQoZSk7cmV0dXJuIGEmJnRoaXMucmVtb3ZlKGEpLGF9ZmluZE9uZUFuZFJlbW92ZVN5bmMoZSl7bGV0IGE9dGhpcy5maW5kU3luYyhlKTtyZXR1cm4gYSYmdGhpcy5yZW1vdmUoYSksYX1hc3luYyBmb3JFYWNoKGUpe2ZvcihsZXQgYSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKWF3YWl0IGUodGhpcy5mYXN0TWFwLmdldEJ5S2V5KGEpKX1nZXRPbmVBbmRSZW1vdmUoKXtsZXQgZT10aGlzLmZhc3RNYXAuZ2V0S2V5cygpO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gbnVsbDt7bGV0IGE9ZVswXSxpPXRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGEpO3JldHVybiB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHtvcGVyYXRpb246InJlbW92ZSIscGF5bG9hZDppfSksaX19Z2V0QXJyYXkoKXtsZXQgZT1bXTtmb3IobGV0IGEgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSllLnB1c2godGhpcy5mYXN0TWFwLmdldEJ5S2V5KGEpKTtyZXR1cm4gZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkubGVuZ3RoPT09MH1yZW1vdmUoZSl7aWYodGhpcy5jaGVja0Zvck9iamVjdChlKSl7bGV0IGE9dGhpcy5nZXRLZXlGb3JPYmplY3QoZSksaT10aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChhKTtyZXR1cm4gdGhpcy5ldmVudFN1YmplY3QubmV4dCh7b3BlcmF0aW9uOiJyZW1vdmUiLHBheWxvYWQ6aX0pLGl9cmV0dXJuIG51bGx9d2lwZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKXRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGUpfWNvbmNhdChlKXtsZXQgYT1uZXcgdDtyZXR1cm4gYS5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApLGEuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIoZS5mYXN0TWFwKSxhfWFkZEFsbEZyb21PdGhlcihlKXt0aGlzLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKGUuZmFzdE1hcCl9fX0pO3ZhciBhZixDY2U9YigoKT0+e2VmKCk7YWY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdBcnJheT1bXSx0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheT1bXX1hZGRTdHJpbmcoZSl7dGhpcy5fc3RyaW5nQXJyYXkucHVzaChlKSx0aGlzLm5vdGlmeVRyaWdnZXIoKX1hZGRTdHJpbmdBcnJheShlKXtmb3IobGV0IGEgb2YgZSl0aGlzLmFkZFN0cmluZyhhKX1yZW1vdmVTdHJpbmcoZSl7Zm9yKGxldCBhIGluIHRoaXMuX3N0cmluZ0FycmF5KXRoaXMuX3N0cmluZ0FycmF5W2FdPT09ZSYmdGhpcy5fc3RyaW5nQXJyYXkuc3BsaWNlKHBhcnNlSW50KGEpLDEpO3RoaXMubm90aWZ5VHJpZ2dlcigpfXdpcGUoKXt0aGlzLl9zdHJpbmdBcnJheT1bXSx0aGlzLm5vdGlmeVRyaWdnZXIoKX1jaGVja1N0cmluZyhlKXtyZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkuaW5kZXhPZihlKSE9PS0xfWNoZWNrTWluaW1hdGNoKGUpe2xldCBhPW5ldyBvcy5TbWFydE1hdGNoKGUpLGk9ITE7Zm9yKGxldCByIG9mIHRoaXMuX3N0cmluZ0FycmF5KWEubWF0Y2gocikmJihpPSEwKTtyZXR1cm4gaX1jaGVja0lzRW1wdHkoKXtyZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoPT09MH1nZXRTdHJpbmdBcnJheSgpe2xldCBlPVtdO2ZvcihsZXQgYSBvZiB0aGlzLl9zdHJpbmdBcnJheSllLnB1c2goYSk7cmV0dXJuIGV9cmVnaXN0ZXJVbnRpbFRydWUoZSxhKXtsZXQgaT1IZS5kZWZlcigpO3JldHVybiB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5wdXNoKCgpPT57bGV0IHI9ZSh0aGlzLmdldFN0cmluZ0FycmF5KCkpO3JldHVybiByPT09ITAmJihhJiZhKCksaS5yZXNvbHZlKCkpLHJ9KSx0aGlzLm5vdGlmeVRyaWdnZXIoKSxpLnByb21pc2V9bm90aWZ5VHJpZ2dlcigpe2xldCBlPXRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcihhPT4hYSgpKTt0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheT1lfX19KTtmdW5jdGlvbiBfY2UodCxlLGEpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsYSkpfWZ1bmN0aW9uIHpCdCh0LGUsYSl7cmV0dXJuKDEtYSkqdCthKmV9ZnVuY3Rpb24ga0J0KHQsZSxhLGkpe3JldHVybiB6QnQodCxlLDEtTWF0aC5leHAoLWEqaSkpfWZ1bmN0aW9uIFNCdCh0LGUpe3JldHVybih0JWUrZSklZX1mdW5jdGlvbiBfQnQodCxlKXtsZXQgYTtyZXR1cm4gZnVuY3Rpb24oLi4uaSl7bGV0IHI9dGhpcztjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57YT12b2lkIDAsdC5hcHBseShyLGkpfSxlKX19dmFyIE1CdCxDQnQsVEJ0LFRjZSxMY2UsZW8sTEJ0LCRjZSxnNSxBY2U9YigoKT0+e01CdD0iMS4zLjE3IjtDQnQ9Y2xhc3N7aXNSdW5uaW5nPSExO3ZhbHVlPTA7ZnJvbT0wO3RvPTA7Y3VycmVudFRpbWU9MDtsZXJwO2R1cmF0aW9uO2Vhc2luZztvblVwZGF0ZTthZHZhbmNlKHQpe2lmKCF0aGlzLmlzUnVubmluZylyZXR1cm47bGV0IGU9ITE7aWYodGhpcy5kdXJhdGlvbiYmdGhpcy5lYXNpbmcpe3RoaXMuY3VycmVudFRpbWUrPXQ7bGV0IGE9X2NlKDAsdGhpcy5jdXJyZW50VGltZS90aGlzLmR1cmF0aW9uLDEpO2U9YT49MTtsZXQgaT1lPzE6dGhpcy5lYXNpbmcoYSk7dGhpcy52YWx1ZT10aGlzLmZyb20rKHRoaXMudG8tdGhpcy5mcm9tKSppfWVsc2UgdGhpcy5sZXJwPyh0aGlzLnZhbHVlPWtCdCh0aGlzLnZhbHVlLHRoaXMudG8sdGhpcy5sZXJwKjYwLHQpLE1hdGgucm91bmQodGhpcy52YWx1ZSk9PT10aGlzLnRvJiYodGhpcy52YWx1ZT10aGlzLnRvLGU9ITApKToodGhpcy52YWx1ZT10aGlzLnRvLGU9ITApO2UmJnRoaXMuc3RvcCgpLHRoaXMub25VcGRhdGU/Lih0aGlzLnZhbHVlLGUpfXN0b3AoKXt0aGlzLmlzUnVubmluZz0hMX1mcm9tVG8odCxlLHtsZXJwOmEsZHVyYXRpb246aSxlYXNpbmc6cixvblN0YXJ0OnMsb25VcGRhdGU6bn0pe3RoaXMuZnJvbT10aGlzLnZhbHVlPXQsdGhpcy50bz1lLHRoaXMubGVycD1hLHRoaXMuZHVyYXRpb249aSx0aGlzLmVhc2luZz1yLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmlzUnVubmluZz0hMCxzPy4oKSx0aGlzLm9uVXBkYXRlPW59fTtUQnQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHthdXRvUmVzaXplOmE9ITAsZGVib3VuY2U6aT0yNTB9PXt9KXt0aGlzLndyYXBwZXI9dCx0aGlzLmNvbnRlbnQ9ZSxhJiYodGhpcy5kZWJvdW5jZWRSZXNpemU9X0J0KHRoaXMucmVzaXplLGkpLHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdz93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmRlYm91bmNlZFJlc2l6ZSwhMSk6KHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSksdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLndyYXBwZXIpKSx0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpLHRoaXMuY29udGVudFJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250ZW50KSksdGhpcy5yZXNpemUoKX13aWR0aD0wO2hlaWdodD0wO3Njcm9sbEhlaWdodD0wO3Njcm9sbFdpZHRoPTA7ZGVib3VuY2VkUmVzaXplO3dyYXBwZXJSZXNpemVPYnNlcnZlcjtjb250ZW50UmVzaXplT2JzZXJ2ZXI7ZGVzdHJveSgpe3RoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCksdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLndyYXBwZXI9PT13aW5kb3cmJnRoaXMuZGVib3VuY2VkUmVzaXplJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmRlYm91bmNlZFJlc2l6ZSwhMSl9cmVzaXplPSgpPT57dGhpcy5vbldyYXBwZXJSZXNpemUoKSx0aGlzLm9uQ29udGVudFJlc2l6ZSgpfTtvbldyYXBwZXJSZXNpemU9KCk9Pnt0aGlzLndyYXBwZXIgaW5zdGFuY2VvZiBXaW5kb3c/KHRoaXMud2lkdGg9d2luZG93LmlubmVyV2lkdGgsdGhpcy5oZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0KToodGhpcy53aWR0aD10aGlzLndyYXBwZXIuY2xpZW50V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy53cmFwcGVyLmNsaWVudEhlaWdodCl9O29uQ29udGVudFJlc2l6ZT0oKT0+e3RoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdz8odGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5jb250ZW50LnNjcm9sbEhlaWdodCx0aGlzLnNjcm9sbFdpZHRoPXRoaXMuY29udGVudC5zY3JvbGxXaWR0aCk6KHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMud3JhcHBlci5zY3JvbGxIZWlnaHQsdGhpcy5zY3JvbGxXaWR0aD10aGlzLndyYXBwZXIuc2Nyb2xsV2lkdGgpfTtnZXQgbGltaXQoKXtyZXR1cm57eDp0aGlzLnNjcm9sbFdpZHRoLXRoaXMud2lkdGgseTp0aGlzLnNjcm9sbEhlaWdodC10aGlzLmhlaWdodH19fSxUY2U9Y2xhc3N7ZXZlbnRzPXt9O2VtaXQodCwuLi5lKXtsZXQgYT10aGlzLmV2ZW50c1t0XXx8W107Zm9yKGxldCBpPTAscj1hLmxlbmd0aDtpPHI7aSsrKWFbaV0/LiguLi5lKX1vbih0LGUpe3JldHVybiB0aGlzLmV2ZW50c1t0XT8ucHVzaChlKXx8KHRoaXMuZXZlbnRzW3RdPVtlXSksKCk9Pnt0aGlzLmV2ZW50c1t0XT10aGlzLmV2ZW50c1t0XT8uZmlsdGVyKGE9PmUhPT1hKX19b2ZmKHQsZSl7dGhpcy5ldmVudHNbdF09dGhpcy5ldmVudHNbdF0/LmZpbHRlcihhPT5lIT09YSl9ZGVzdHJveSgpe3RoaXMuZXZlbnRzPXt9fX0sTGNlPTEwMC82LGVvPXtwYXNzaXZlOiExfSxMQnQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt3aGVlbE11bHRpcGxpZXI6MSx0b3VjaE11bHRpcGxpZXI6MX0pe3RoaXMuZWxlbWVudD10LHRoaXMub3B0aW9ucz1lLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMub25XaW5kb3dSZXNpemUsITEpLHRoaXMub25XaW5kb3dSZXNpemUoKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMub25XaGVlbCxlbyksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMub25Ub3VjaFN0YXJ0LGVvKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlLGVvKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMub25Ub3VjaEVuZCxlbyl9dG91Y2hTdGFydD17eDowLHk6MH07bGFzdERlbHRhPXt4OjAseTowfTt3aW5kb3c9e3dpZHRoOjAsaGVpZ2h0OjB9O2VtaXR0ZXI9bmV3IFRjZTtvbih0LGUpe3JldHVybiB0aGlzLmVtaXR0ZXIub24odCxlKX1kZXN0cm95KCl7dGhpcy5lbWl0dGVyLmRlc3Ryb3koKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLm9uV2luZG93UmVzaXplLCExKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMub25XaGVlbCxlbyksdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMub25Ub3VjaFN0YXJ0LGVvKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLm9uVG91Y2hNb3ZlLGVvKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMub25Ub3VjaEVuZCxlbyl9b25Ub3VjaFN0YXJ0PXQ9PntsZXR7Y2xpZW50WDplLGNsaWVudFk6YX09dC50YXJnZXRUb3VjaGVzP3QudGFyZ2V0VG91Y2hlc1swXTp0O3RoaXMudG91Y2hTdGFydC54PWUsdGhpcy50b3VjaFN0YXJ0Lnk9YSx0aGlzLmxhc3REZWx0YT17eDowLHk6MH0sdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIse2RlbHRhWDowLGRlbHRhWTowLGV2ZW50OnR9KX07b25Ub3VjaE1vdmU9dD0+e2xldHtjbGllbnRYOmUsY2xpZW50WTphfT10LnRhcmdldFRvdWNoZXM/dC50YXJnZXRUb3VjaGVzWzBdOnQsaT0tKGUtdGhpcy50b3VjaFN0YXJ0LngpKnRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXIscj0tKGEtdGhpcy50b3VjaFN0YXJ0LnkpKnRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7dGhpcy50b3VjaFN0YXJ0Lng9ZSx0aGlzLnRvdWNoU3RhcnQueT1hLHRoaXMubGFzdERlbHRhPXt4OmkseTpyfSx0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIix7ZGVsdGFYOmksZGVsdGFZOnIsZXZlbnQ6dH0pfTtvblRvdWNoRW5kPXQ9Pnt0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIix7ZGVsdGFYOnRoaXMubGFzdERlbHRhLngsZGVsdGFZOnRoaXMubGFzdERlbHRhLnksZXZlbnQ6dH0pfTtvbldoZWVsPXQ9PntsZXR7ZGVsdGFYOmUsZGVsdGFZOmEsZGVsdGFNb2RlOml9PXQscj1pPT09MT9MY2U6aT09PTI/dGhpcy53aW5kb3cud2lkdGg6MSxzPWk9PT0xP0xjZTppPT09Mj90aGlzLndpbmRvdy5oZWlnaHQ6MTtlKj1yLGEqPXMsZSo9dGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcixhKj10aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyLHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHtkZWx0YVg6ZSxkZWx0YVk6YSxldmVudDp0fSl9O29uV2luZG93UmVzaXplPSgpPT57dGhpcy53aW5kb3c9e3dpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHR9fX0sJGNlPXQ9Pk1hdGgubWluKDEsMS4wMDEtTWF0aC5wb3coMiwtMTAqdCkpLGc1PWNsYXNze19pc1Njcm9sbGluZz0hMTtfaXNTdG9wcGVkPSExO19pc0xvY2tlZD0hMTtfcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMTtfcmVzZXRWZWxvY2l0eVRpbWVvdXQ9bnVsbDtfcmFmSWQ9bnVsbDtpc1RvdWNoaW5nO3RpbWU9MDt1c2VyRGF0YT17fTtsYXN0VmVsb2NpdHk9MDt2ZWxvY2l0eT0wO2RpcmVjdGlvbj0wO29wdGlvbnM7dGFyZ2V0U2Nyb2xsO2FuaW1hdGVkU2Nyb2xsO2FuaW1hdGU9bmV3IENCdDtlbWl0dGVyPW5ldyBUY2U7ZGltZW5zaW9uczt2aXJ0dWFsU2Nyb2xsO2NvbnN0cnVjdG9yKHt3cmFwcGVyOnQ9d2luZG93LGNvbnRlbnQ6ZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZXZlbnRzVGFyZ2V0OmE9dCxzbW9vdGhXaGVlbDppPSEwLHN5bmNUb3VjaDpyPSExLHN5bmNUb3VjaExlcnA6cz0uMDc1LHRvdWNoSW5lcnRpYUV4cG9uZW50Om49MS43LGR1cmF0aW9uOm8sZWFzaW5nOmQsbGVycDpjPS4xLGluZmluaXRlOnA9ITEsb3JpZW50YXRpb246bD0idmVydGljYWwiLGdlc3R1cmVPcmllbnRhdGlvbjpmPWw9PT0iaG9yaXpvbnRhbCI/ImJvdGgiOiJ2ZXJ0aWNhbCIsdG91Y2hNdWx0aXBsaWVyOmc9MSx3aGVlbE11bHRpcGxpZXI6eT0xLGF1dG9SZXNpemU6dj0hMCxwcmV2ZW50Om0sdmlydHVhbFNjcm9sbDp4LG92ZXJzY3JvbGw6TT0hMCxhdXRvUmFmOlM9ITEsYW5jaG9yczpGPSExLGF1dG9Ub2dnbGU6Xz0hMSxhbGxvd05lc3RlZFNjcm9sbDprPSExLF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnM6Tj0hMSxuYWl2ZURpbWVuc2lvbnM6TD1OLHN0b3BJbmVydGlhT25OYXZpZ2F0ZTpBPSExfT17fSl7d2luZG93LmxlbmlzVmVyc2lvbj1NQnQsKCF0fHx0PT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQ9d2luZG93KSx0eXBlb2Ygbz09Im51bWJlciImJnR5cGVvZiBkIT0iZnVuY3Rpb24iP2Q9JGNlOnR5cGVvZiBkPT0iZnVuY3Rpb24iJiZ0eXBlb2YgbyE9Im51bWJlciImJihvPTEpLHRoaXMub3B0aW9ucz17d3JhcHBlcjp0LGNvbnRlbnQ6ZSxldmVudHNUYXJnZXQ6YSxzbW9vdGhXaGVlbDppLHN5bmNUb3VjaDpyLHN5bmNUb3VjaExlcnA6cyx0b3VjaEluZXJ0aWFFeHBvbmVudDpuLGR1cmF0aW9uOm8sZWFzaW5nOmQsbGVycDpjLGluZmluaXRlOnAsZ2VzdHVyZU9yaWVudGF0aW9uOmYsb3JpZW50YXRpb246bCx0b3VjaE11bHRpcGxpZXI6Zyx3aGVlbE11bHRpcGxpZXI6eSxhdXRvUmVzaXplOnYscHJldmVudDptLHZpcnR1YWxTY3JvbGw6eCxvdmVyc2Nyb2xsOk0sYXV0b1JhZjpTLGFuY2hvcnM6RixhdXRvVG9nZ2xlOl8sYWxsb3dOZXN0ZWRTY3JvbGw6ayxuYWl2ZURpbWVuc2lvbnM6TCxzdG9wSW5lcnRpYU9uTmF2aWdhdGU6QX0sdGhpcy5kaW1lbnNpb25zPW5ldyBUQnQodCxlLHthdXRvUmVzaXplOnZ9KSx0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpLHRoaXMudGFyZ2V0U2Nyb2xsPXRoaXMuYW5pbWF0ZWRTY3JvbGw9dGhpcy5hY3R1YWxTY3JvbGwsdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLm9uTmF0aXZlU2Nyb2xsLCExKSx0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGxlbmQiLHRoaXMub25TY3JvbGxFbmQse2NhcHR1cmU6ITB9KSwodGhpcy5vcHRpb25zLmFuY2hvcnN8fHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpJiZ0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5vbkNsaWNrLCExKSx0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5vblBvaW50ZXJEb3duLCExKSx0aGlzLnZpcnR1YWxTY3JvbGw9bmV3IExCdChhLHt0b3VjaE11bHRpcGxpZXI6Zyx3aGVlbE11bHRpcGxpZXI6eX0pLHRoaXMudmlydHVhbFNjcm9sbC5vbigic2Nyb2xsIix0aGlzLm9uVmlydHVhbFNjcm9sbCksdGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUmJih0aGlzLmNoZWNrT3ZlcmZsb3coKSx0aGlzLnJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMub25UcmFuc2l0aW9uRW5kLHtwYXNzaXZlOiEwfSkpLHRoaXMub3B0aW9ucy5hdXRvUmFmJiYodGhpcy5fcmFmSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKSl9ZGVzdHJveSgpe3RoaXMuZW1pdHRlci5kZXN0cm95KCksdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLm9uTmF0aXZlU2Nyb2xsLCExKSx0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGxlbmQiLHRoaXMub25TY3JvbGxFbmQse2NhcHR1cmU6ITB9KSx0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5vblBvaW50ZXJEb3duLCExKSwodGhpcy5vcHRpb25zLmFuY2hvcnN8fHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpJiZ0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5vbkNsaWNrLCExKSx0aGlzLnZpcnR1YWxTY3JvbGwuZGVzdHJveSgpLHRoaXMuZGltZW5zaW9ucy5kZXN0cm95KCksdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCksdGhpcy5fcmFmSWQmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZklkKX1vbih0LGUpe3JldHVybiB0aGlzLmVtaXR0ZXIub24odCxlKX1vZmYodCxlKXtyZXR1cm4gdGhpcy5lbWl0dGVyLm9mZih0LGUpfW9uU2Nyb2xsRW5kPXQ9Pnt0IGluc3RhbmNlb2YgQ3VzdG9tRXZlbnR8fCh0aGlzLmlzU2Nyb2xsaW5nPT09InNtb290aCJ8fHRoaXMuaXNTY3JvbGxpbmc9PT0hMSkmJnQuc3RvcFByb3BhZ2F0aW9uKCl9O2Rpc3BhdGNoU2Nyb2xsZW5kRXZlbnQ9KCk9Pnt0aGlzLm9wdGlvbnMud3JhcHBlci5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsZW5kIix7YnViYmxlczp0aGlzLm9wdGlvbnMud3JhcHBlcj09PXdpbmRvdyxkZXRhaWw6e2xlbmlzU2Nyb2xsRW5kOiEwfX0pKX07Z2V0IG92ZXJmbG93KCl7bGV0IHQ9dGhpcy5pc0hvcml6b250YWw/Im92ZXJmbG93LXgiOiJvdmVyZmxvdy15IjtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KVt0XX1jaGVja092ZXJmbG93KCl7WyJoaWRkZW4iLCJjbGlwIl0uaW5jbHVkZXModGhpcy5vdmVyZmxvdyk/dGhpcy5pbnRlcm5hbFN0b3AoKTp0aGlzLmludGVybmFsU3RhcnQoKX1vblRyYW5zaXRpb25FbmQ9dD0+e3QucHJvcGVydHlOYW1lLmluY2x1ZGVzKCJvdmVyZmxvdyIpJiZ0aGlzLmNoZWNrT3ZlcmZsb3coKX07c2V0U2Nyb2xsKHQpe3RoaXMuaXNIb3Jpem9udGFsP3RoaXMub3B0aW9ucy53cmFwcGVyLnNjcm9sbFRvKHtsZWZ0OnQsYmVoYXZpb3I6Imluc3RhbnQifSk6dGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oe3RvcDp0LGJlaGF2aW9yOiJpbnN0YW50In0pfW9uQ2xpY2s9dD0+e2xldCBhPXQuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCYmaS5nZXRBdHRyaWJ1dGUoImhyZWYiKSk7aWYodGhpcy5vcHRpb25zLmFuY2hvcnMpe2xldCBpPWEuZmluZChyPT5yLmdldEF0dHJpYnV0ZSgiaHJlZiIpPy5pbmNsdWRlcygiIyIpKTtpZihpKXtsZXQgcj1pLmdldEF0dHJpYnV0ZSgiaHJlZiIpO2lmKHIpe2xldCBzPXR5cGVvZiB0aGlzLm9wdGlvbnMuYW5jaG9ycz09Im9iamVjdCImJnRoaXMub3B0aW9ucy5hbmNob3JzP3RoaXMub3B0aW9ucy5hbmNob3JzOnZvaWQgMCxuPWAjJHtyLnNwbGl0KCIjIilbMV19YDt0aGlzLnNjcm9sbFRvKG4scyl9fX10aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlJiZhLmZpbmQocj0+ci5ob3N0PT09d2luZG93LmxvY2F0aW9uLmhvc3QpJiZ0aGlzLnJlc2V0KCl9O29uUG9pbnRlckRvd249dD0+e3QuYnV0dG9uPT09MSYmdGhpcy5yZXNldCgpfTtvblZpcnR1YWxTY3JvbGw9dD0+e2lmKHR5cGVvZiB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbD09ImZ1bmN0aW9uIiYmdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwodCk9PT0hMSlyZXR1cm47bGV0e2RlbHRhWDplLGRlbHRhWTphLGV2ZW50Oml9PXQ7aWYodGhpcy5lbWl0dGVyLmVtaXQoInZpcnR1YWwtc2Nyb2xsIix7ZGVsdGFYOmUsZGVsdGFZOmEsZXZlbnQ6aX0pLGkuY3RybEtleXx8aS5sZW5pc1N0b3BQcm9wYWdhdGlvbilyZXR1cm47bGV0IHI9aS50eXBlLmluY2x1ZGVzKCJ0b3VjaCIpLHM9aS50eXBlLmluY2x1ZGVzKCJ3aGVlbCIpO3RoaXMuaXNUb3VjaGluZz1pLnR5cGU9PT0idG91Y2hzdGFydCJ8fGkudHlwZT09PSJ0b3VjaG1vdmUiO2xldCBuPWU9PT0wJiZhPT09MDtpZih0aGlzLm9wdGlvbnMuc3luY1RvdWNoJiZyJiZpLnR5cGU9PT0idG91Y2hzdGFydCImJm4mJiF0aGlzLmlzU3RvcHBlZCYmIXRoaXMuaXNMb2NrZWQpe3RoaXMucmVzZXQoKTtyZXR1cm59bGV0IGQ9dGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJmE9PT0wfHx0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiZlPT09MDtpZihufHxkKXJldHVybjtsZXQgYz1pLmNvbXBvc2VkUGF0aCgpO2M9Yy5zbGljZSgwLGMuaW5kZXhPZih0aGlzLnJvb3RFbGVtZW50KSk7bGV0IHA9dGhpcy5vcHRpb25zLnByZXZlbnQ7aWYoYy5maW5kKG09Pm0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmKHR5cGVvZiBwPT0iZnVuY3Rpb24iJiZwPy4obSl8fG0uaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudCIpfHxyJiZtLmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQtdG91Y2giKXx8cyYmbS5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXdoZWVsIil8fHRoaXMub3B0aW9ucy5hbGxvd05lc3RlZFNjcm9sbCYmdGhpcy5jaGVja05lc3RlZFNjcm9sbChtLHtkZWx0YVg6ZSxkZWx0YVk6YX0pKSkpcmV0dXJuO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmlzTG9ja2VkKXtpLmNhbmNlbGFibGUmJmkucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoISh0aGlzLm9wdGlvbnMuc3luY1RvdWNoJiZyfHx0aGlzLm9wdGlvbnMuc21vb3RoV2hlZWwmJnMpKXt0aGlzLmlzU2Nyb2xsaW5nPSJuYXRpdmUiLHRoaXMuYW5pbWF0ZS5zdG9wKCksaS5sZW5pc1N0b3BQcm9wYWdhdGlvbj0hMDtyZXR1cm59bGV0IGY9YTt0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uPT09ImJvdGgiP2Y9TWF0aC5hYnMoYSk+TWF0aC5hYnMoZSk/YTplOnRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJihmPWUpLCghdGhpcy5vcHRpb25zLm92ZXJzY3JvbGx8fHRoaXMub3B0aW9ucy5pbmZpbml0ZXx8dGhpcy5vcHRpb25zLndyYXBwZXIhPT13aW5kb3cmJnRoaXMubGltaXQ+MCYmKHRoaXMuYW5pbWF0ZWRTY3JvbGw+MCYmdGhpcy5hbmltYXRlZFNjcm9sbDx0aGlzLmxpbWl0fHx0aGlzLmFuaW1hdGVkU2Nyb2xsPT09MCYmYT4wfHx0aGlzLmFuaW1hdGVkU2Nyb2xsPT09dGhpcy5saW1pdCYmYTwwKSkmJihpLmxlbmlzU3RvcFByb3BhZ2F0aW9uPSEwKSxpLmNhbmNlbGFibGUmJmkucHJldmVudERlZmF1bHQoKTtsZXQgZz1yJiZ0aGlzLm9wdGlvbnMuc3luY1RvdWNoLHY9ciYmaS50eXBlPT09InRvdWNoZW5kIjt2JiYoZj1NYXRoLnNpZ24odGhpcy52ZWxvY2l0eSkqTWF0aC5wb3coTWF0aC5hYnModGhpcy52ZWxvY2l0eSksdGhpcy5vcHRpb25zLnRvdWNoSW5lcnRpYUV4cG9uZW50KSksdGhpcy5zY3JvbGxUbyh0aGlzLnRhcmdldFNjcm9sbCtmLHtwcm9ncmFtbWF0aWM6ITEsLi4uZz97bGVycDp2P3RoaXMub3B0aW9ucy5zeW5jVG91Y2hMZXJwOjF9OntsZXJwOnRoaXMub3B0aW9ucy5sZXJwLGR1cmF0aW9uOnRoaXMub3B0aW9ucy5kdXJhdGlvbixlYXNpbmc6dGhpcy5vcHRpb25zLmVhc2luZ319KX07cmVzaXplKCl7dGhpcy5kaW1lbnNpb25zLnJlc2l6ZSgpLHRoaXMuYW5pbWF0ZWRTY3JvbGw9dGhpcy50YXJnZXRTY3JvbGw9dGhpcy5hY3R1YWxTY3JvbGwsdGhpcy5lbWl0KCl9ZW1pdCgpe3RoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLHRoaXMpfW9uTmF0aXZlU2Nyb2xsPSgpPT57aWYodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQhPT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0KSx0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dD1udWxsKSx0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KXt0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50PSExO3JldHVybn1pZih0aGlzLmlzU2Nyb2xsaW5nPT09ITF8fHRoaXMuaXNTY3JvbGxpbmc9PT0ibmF0aXZlIil7bGV0IHQ9dGhpcy5hbmltYXRlZFNjcm9sbDt0aGlzLmFuaW1hdGVkU2Nyb2xsPXRoaXMudGFyZ2V0U2Nyb2xsPXRoaXMuYWN0dWFsU2Nyb2xsLHRoaXMubGFzdFZlbG9jaXR5PXRoaXMudmVsb2NpdHksdGhpcy52ZWxvY2l0eT10aGlzLmFuaW1hdGVkU2Nyb2xsLXQsdGhpcy5kaXJlY3Rpb249TWF0aC5zaWduKHRoaXMuYW5pbWF0ZWRTY3JvbGwtdCksdGhpcy5pc1N0b3BwZWR8fCh0aGlzLmlzU2Nyb2xsaW5nPSJuYXRpdmUiKSx0aGlzLmVtaXQoKSx0aGlzLnZlbG9jaXR5IT09MCYmKHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmxhc3RWZWxvY2l0eT10aGlzLnZlbG9jaXR5LHRoaXMudmVsb2NpdHk9MCx0aGlzLmlzU2Nyb2xsaW5nPSExLHRoaXMuZW1pdCgpfSw0MDApKX19O3Jlc2V0KCl7dGhpcy5pc0xvY2tlZD0hMSx0aGlzLmlzU2Nyb2xsaW5nPSExLHRoaXMuYW5pbWF0ZWRTY3JvbGw9dGhpcy50YXJnZXRTY3JvbGw9dGhpcy5hY3R1YWxTY3JvbGwsdGhpcy5sYXN0VmVsb2NpdHk9dGhpcy52ZWxvY2l0eT0wLHRoaXMuYW5pbWF0ZS5zdG9wKCl9c3RhcnQoKXtpZih0aGlzLmlzU3RvcHBlZCl7aWYodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpe3RoaXMucm9vdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIm92ZXJmbG93Iik7cmV0dXJufXRoaXMuaW50ZXJuYWxTdGFydCgpfX1pbnRlcm5hbFN0YXJ0KCl7dGhpcy5pc1N0b3BwZWQmJih0aGlzLnJlc2V0KCksdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5lbWl0KCkpfXN0b3AoKXtpZighdGhpcy5pc1N0b3BwZWQpe2lmKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKXt0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJvdmVyZmxvdyIsImNsaXAiKTtyZXR1cm59dGhpcy5pbnRlcm5hbFN0b3AoKX19aW50ZXJuYWxTdG9wKCl7dGhpcy5pc1N0b3BwZWR8fCh0aGlzLnJlc2V0KCksdGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5lbWl0KCkpfXJhZj10PT57bGV0IGU9dC0odGhpcy50aW1lfHx0KTt0aGlzLnRpbWU9dCx0aGlzLmFuaW1hdGUuYWR2YW5jZShlKi4wMDEpLHRoaXMub3B0aW9ucy5hdXRvUmFmJiYodGhpcy5fcmFmSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKSl9O3Njcm9sbFRvKHQse29mZnNldDplPTAsaW1tZWRpYXRlOmE9ITEsbG9jazppPSExLHByb2dyYW1tYXRpYzpyPSEwLGxlcnA6cz1yP3RoaXMub3B0aW9ucy5sZXJwOnZvaWQgMCxkdXJhdGlvbjpuPXI/dGhpcy5vcHRpb25zLmR1cmF0aW9uOnZvaWQgMCxlYXNpbmc6bz1yP3RoaXMub3B0aW9ucy5lYXNpbmc6dm9pZCAwLG9uU3RhcnQ6ZCxvbkNvbXBsZXRlOmMsZm9yY2U6cD0hMSx1c2VyRGF0YTpsfT17fSl7aWYoISgodGhpcy5pc1N0b3BwZWR8fHRoaXMuaXNMb2NrZWQpJiYhcCkpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIiYmWyJ0b3AiLCJsZWZ0Iiwic3RhcnQiLCIjIl0uaW5jbHVkZXModCkpdD0wO2Vsc2UgaWYodHlwZW9mIHQ9PSJzdHJpbmciJiZbImJvdHRvbSIsInJpZ2h0IiwiZW5kIl0uaW5jbHVkZXModCkpdD10aGlzLmxpbWl0O2Vsc2V7bGV0IGY7aWYodHlwZW9mIHQ9PSJzdHJpbmciPyhmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCksZnx8KHQ9PT0iI3RvcCI/dD0wOmNvbnNvbGUud2FybigiTGVuaXM6IFRhcmdldCBub3QgZm91bmQiLHQpKSk6dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ0Py5ub2RlVHlwZSYmKGY9dCksZil7aWYodGhpcy5vcHRpb25zLndyYXBwZXIhPT13aW5kb3cpe2xldCB5PXRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS09dGhpcy5pc0hvcml6b250YWw/eS5sZWZ0OnkudG9wfWxldCBnPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD0odGhpcy5pc0hvcml6b250YWw/Zy5sZWZ0OmcudG9wKSt0aGlzLmFuaW1hdGVkU2Nyb2xsfX1pZih0eXBlb2YgdD09Im51bWJlciIpe2lmKHQrPWUsdD1NYXRoLnJvdW5kKHQpLHRoaXMub3B0aW9ucy5pbmZpbml0ZSl7aWYocil7dGhpcy50YXJnZXRTY3JvbGw9dGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnNjcm9sbDtsZXQgZj10LXRoaXMuYW5pbWF0ZWRTY3JvbGw7Zj50aGlzLmxpbWl0LzI/dD10LXRoaXMubGltaXQ6ZjwtdGhpcy5saW1pdC8yJiYodD10K3RoaXMubGltaXQpfX1lbHNlIHQ9X2NlKDAsdCx0aGlzLmxpbWl0KTtpZih0PT09dGhpcy50YXJnZXRTY3JvbGwpe2Q/Lih0aGlzKSxjPy4odGhpcyk7cmV0dXJufWlmKHRoaXMudXNlckRhdGE9bD8/e30sYSl7dGhpcy5hbmltYXRlZFNjcm9sbD10aGlzLnRhcmdldFNjcm9sbD10LHRoaXMuc2V0U2Nyb2xsKHRoaXMuc2Nyb2xsKSx0aGlzLnJlc2V0KCksdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCksdGhpcy5lbWl0KCksYz8uKHRoaXMpLHRoaXMudXNlckRhdGE9e30scmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCl9KTtyZXR1cm59cnx8KHRoaXMudGFyZ2V0U2Nyb2xsPXQpLHR5cGVvZiBuPT0ibnVtYmVyIiYmdHlwZW9mIG8hPSJmdW5jdGlvbiI/bz0kY2U6dHlwZW9mIG89PSJmdW5jdGlvbiImJnR5cGVvZiBuIT0ibnVtYmVyIiYmKG49MSksdGhpcy5hbmltYXRlLmZyb21Ubyh0aGlzLmFuaW1hdGVkU2Nyb2xsLHQse2R1cmF0aW9uOm4sZWFzaW5nOm8sbGVycDpzLG9uU3RhcnQ6KCk9PntpJiYodGhpcy5pc0xvY2tlZD0hMCksdGhpcy5pc1Njcm9sbGluZz0ic21vb3RoIixkPy4odGhpcyl9LG9uVXBkYXRlOihmLGcpPT57dGhpcy5pc1Njcm9sbGluZz0ic21vb3RoIix0aGlzLmxhc3RWZWxvY2l0eT10aGlzLnZlbG9jaXR5LHRoaXMudmVsb2NpdHk9Zi10aGlzLmFuaW1hdGVkU2Nyb2xsLHRoaXMuZGlyZWN0aW9uPU1hdGguc2lnbih0aGlzLnZlbG9jaXR5KSx0aGlzLmFuaW1hdGVkU2Nyb2xsPWYsdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpLHImJih0aGlzLnRhcmdldFNjcm9sbD1mKSxnfHx0aGlzLmVtaXQoKSxnJiYodGhpcy5yZXNldCgpLHRoaXMuZW1pdCgpLGM/Lih0aGlzKSx0aGlzLnVzZXJEYXRhPXt9LHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCgpfSksdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCkpfX0pfX19cHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpe3RoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudD0hMX0pfWNoZWNrTmVzdGVkU2Nyb2xsKHQse2RlbHRhWDplLGRlbHRhWTphfSl7bGV0IGk9RGF0ZS5ub3coKSxyPXQuX2xlbmlzPz89e30scyxuLG8sZCxjLHAsbCxmLGc9dGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbjtpZihpLShyLnRpbWU/PzApPjJlMyl7ci50aW1lPURhdGUubm93KCk7bGV0IF89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7ci5jb21wdXRlZFN0eWxlPV87bGV0IGs9Xy5vdmVyZmxvd1gsTj1fLm92ZXJmbG93WTtpZihzPVsiYXV0byIsIm92ZXJsYXkiLCJzY3JvbGwiXS5pbmNsdWRlcyhrKSxuPVsiYXV0byIsIm92ZXJsYXkiLCJzY3JvbGwiXS5pbmNsdWRlcyhOKSxyLmhhc092ZXJmbG93WD1zLHIuaGFzT3ZlcmZsb3dZPW4sIXMmJiFufHxnPT09InZlcnRpY2FsIiYmIW58fGc9PT0iaG9yaXpvbnRhbCImJiFzKXJldHVybiExO2M9dC5zY3JvbGxXaWR0aCxwPXQuc2Nyb2xsSGVpZ2h0LGw9dC5jbGllbnRXaWR0aCxmPXQuY2xpZW50SGVpZ2h0LG89Yz5sLGQ9cD5mLHIuaXNTY3JvbGxhYmxlWD1vLHIuaXNTY3JvbGxhYmxlWT1kLHIuc2Nyb2xsV2lkdGg9YyxyLnNjcm9sbEhlaWdodD1wLHIuY2xpZW50V2lkdGg9bCxyLmNsaWVudEhlaWdodD1mfWVsc2Ugbz1yLmlzU2Nyb2xsYWJsZVgsZD1yLmlzU2Nyb2xsYWJsZVkscz1yLmhhc092ZXJmbG93WCxuPXIuaGFzT3ZlcmZsb3dZLGM9ci5zY3JvbGxXaWR0aCxwPXIuc2Nyb2xsSGVpZ2h0LGw9ci5jbGllbnRXaWR0aCxmPXIuY2xpZW50SGVpZ2h0O2lmKCFzJiYhbnx8IW8mJiFkfHxnPT09InZlcnRpY2FsIiYmKCFufHwhZCl8fGc9PT0iaG9yaXpvbnRhbCImJighc3x8IW8pKXJldHVybiExO2xldCB5O2lmKGc9PT0iaG9yaXpvbnRhbCIpeT0ieCI7ZWxzZSBpZihnPT09InZlcnRpY2FsIil5PSJ5IjtlbHNle2xldCBfPWUhPT0wLGs9YSE9PTA7XyYmcyYmbyYmKHk9IngiKSxrJiZuJiZkJiYoeT0ieSIpfWlmKCF5KXJldHVybiExO2xldCB2LG0seCxNLFM7aWYoeT09PSJ4Iil2PXQuc2Nyb2xsTGVmdCxtPWMtbCx4PWUsTT1zLFM9bztlbHNlIGlmKHk9PT0ieSIpdj10LnNjcm9sbFRvcCxtPXAtZix4PWEsTT1uLFM9ZDtlbHNlIHJldHVybiExO3JldHVybih4PjA/djxtOnY+MCkmJk0mJlN9Z2V0IHJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy53cmFwcGVyPT09d2luZG93P2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDp0aGlzLm9wdGlvbnMud3JhcHBlcn1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLm5haXZlRGltZW5zaW9ucz90aGlzLmlzSG9yaXpvbnRhbD90aGlzLnJvb3RFbGVtZW50LnNjcm9sbFdpZHRoLXRoaXMucm9vdEVsZW1lbnQuY2xpZW50V2lkdGg6dGhpcy5yb290RWxlbWVudC5zY3JvbGxIZWlnaHQtdGhpcy5yb290RWxlbWVudC5jbGllbnRIZWlnaHQ6dGhpcy5kaW1lbnNpb25zLmxpbWl0W3RoaXMuaXNIb3Jpem9udGFsPyJ4IjoieSJdfWdldCBpc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwifWdldCBhY3R1YWxTY3JvbGwoKXtsZXQgdD10aGlzLm9wdGlvbnMud3JhcHBlcjtyZXR1cm4gdGhpcy5pc0hvcml6b250YWw/dC5zY3JvbGxYPz90LnNjcm9sbExlZnQ6dC5zY3JvbGxZPz90LnNjcm9sbFRvcH1nZXQgc2Nyb2xsKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5pbmZpbml0ZT9TQnQodGhpcy5hbmltYXRlZFNjcm9sbCx0aGlzLmxpbWl0KTp0aGlzLmFuaW1hdGVkU2Nyb2xsfWdldCBwcm9ncmVzcygpe3JldHVybiB0aGlzLmxpbWl0PT09MD8xOnRoaXMuc2Nyb2xsL3RoaXMubGltaXR9Z2V0IGlzU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX2lzU2Nyb2xsaW5nfXNldCBpc1Njcm9sbGluZyh0KXt0aGlzLl9pc1Njcm9sbGluZyE9PXQmJih0aGlzLl9pc1Njcm9sbGluZz10LHRoaXMudXBkYXRlQ2xhc3NOYW1lKCkpfWdldCBpc1N0b3BwZWQoKXtyZXR1cm4gdGhpcy5faXNTdG9wcGVkfXNldCBpc1N0b3BwZWQodCl7dGhpcy5faXNTdG9wcGVkIT09dCYmKHRoaXMuX2lzU3RvcHBlZD10LHRoaXMudXBkYXRlQ2xhc3NOYW1lKCkpfWdldCBpc0xvY2tlZCgpe3JldHVybiB0aGlzLl9pc0xvY2tlZH1zZXQgaXNMb2NrZWQodCl7dGhpcy5faXNMb2NrZWQhPT10JiYodGhpcy5faXNMb2NrZWQ9dCx0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpKX1nZXQgaXNTbW9vdGgoKXtyZXR1cm4gdGhpcy5pc1Njcm9sbGluZz09PSJzbW9vdGgifWdldCBjbGFzc05hbWUoKXtsZXQgdD0ibGVuaXMiO3JldHVybiB0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSYmKHQrPSIgbGVuaXMtYXV0b1RvZ2dsZSIpLHRoaXMuaXNTdG9wcGVkJiYodCs9IiBsZW5pcy1zdG9wcGVkIiksdGhpcy5pc0xvY2tlZCYmKHQrPSIgbGVuaXMtbG9ja2VkIiksdGhpcy5pc1Njcm9sbGluZyYmKHQrPSIgbGVuaXMtc2Nyb2xsaW5nIiksdGhpcy5pc1Njcm9sbGluZz09PSJzbW9vdGgiJiYodCs9IiBsZW5pcy1zbW9vdGgiKSx0fXVwZGF0ZUNsYXNzTmFtZSgpe3RoaXMuY2xlYW5VcENsYXNzTmFtZSgpLHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lPWAke3RoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lfSAke3RoaXMuY2xhc3NOYW1lfWAudHJpbSgpfWNsZWFuVXBDbGFzc05hbWUoKXt0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZT10aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9sZW5pcygtXHcrKT8vZywiIikudHJpbSgpfX19KTt2YXIgUEE9aHQoKERBLEVBKT0+eyhmdW5jdGlvbih0LGUpe3R5cGVvZiBEQT09Im9iamVjdCImJnR5cGVvZiBFQTwidSI/RUEuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHx8c2VsZix0LlN3ZWV0U2Nyb2xsPWUoKSl9KShEQSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbigpe3JldHVybiB0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKE8pe2Zvcih2YXIgWixZPTEsb2U9YXJndW1lbnRzLmxlbmd0aDtZPG9lO1krKyl7Wj1hcmd1bWVudHNbWV07Zm9yKHZhciBnZSBpbiBaKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChaLGdlKSYmKE9bZ2VdPVpbZ2VdKX1yZXR1cm4gT30sdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGU9ISEodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGE9ZT93aW5kb3cuaGlzdG9yeSYmInB1c2hTdGF0ZSJpbiB3aW5kb3cuaGlzdG9yeSYmd2luZG93LmxvY2F0aW9uLnByb3RvY29sIT09ImZpbGU6IjohMSxpPShmdW5jdGlvbigpe3ZhciBEPSExO2lmKCFlKXJldHVybiBEO3RyeXt2YXIgTz13aW5kb3csWj1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtEPSEwfX0pO08uYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxaKSxPLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsWil9Y2F0Y2h7fXJldHVybiBEfSkoKSxyPWZ1bmN0aW9uKEQpe3JldHVybiB0eXBlb2YgRD09InN0cmluZyJ9LHM9ZnVuY3Rpb24oRCl7cmV0dXJuIHR5cGVvZiBEPT0iZnVuY3Rpb24ifSxuPWZ1bmN0aW9uKEQpe3JldHVybiBBcnJheS5pc0FycmF5KEQpfSxvPWZ1bmN0aW9uKEQpe3JldHVybiFuKEQpJiZELXBhcnNlRmxvYXQoRCkrMT49MH0sZD1mdW5jdGlvbihELE8pe3JldHVybiBEJiZELmhhc093blByb3BlcnR5KE8pfSxjPWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6bnVsbCxwPWU/d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpudWxsLGw9TWF0aC5jb3MsZj1NYXRoLnNpbixnPU1hdGgucG93LHk9TWF0aC5zcXJ0LHY9TWF0aC5QSSxtPXtsaW5lYXI6ZnVuY3Rpb24oRCl7cmV0dXJuIER9LGVhc2VJblF1YWQ6ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuIFkqKE8vPW9lKSpPK1p9LGVhc2VPdXRRdWFkOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybi1ZKihPLz1vZSkqKE8tMikrWn0sZWFzZUluT3V0UXVhZDpmdW5jdGlvbihELE8sWixZLG9lKXtyZXR1cm4oTy89b2UvMik8MT9ZLzIqTypPK1o6LVkvMiooLS1PKihPLTIpLTEpK1p9LGVhc2VJbkN1YmljOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybiBZKihPLz1vZSkqTypPK1p9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbihELE8sWixZLG9lKXtyZXR1cm4gWSooKE89Ty9vZS0xKSpPKk8rMSkrWn0sZWFzZUluT3V0Q3ViaWM6ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuKE8vPW9lLzIpPDE/WS8yKk8qTypPK1o6WS8yKigoTy09MikqTypPKzIpK1p9LGVhc2VJblF1YXJ0OmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybiBZKihPLz1vZSkqTypPKk8rWn0sZWFzZU91dFF1YXJ0OmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybi1ZKigoTz1PL29lLTEpKk8qTypPLTEpK1p9LGVhc2VJbk91dFF1YXJ0OmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybihPLz1vZS8yKTwxP1kvMipPKk8qTypPK1o6LVkvMiooKE8tPTIpKk8qTypPLTIpK1p9LGVhc2VJblF1aW50OmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybiBZKihPLz1vZSkqTypPKk8qTytafSxlYXNlT3V0UXVpbnQ6ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuIFkqKChPPU8vb2UtMSkqTypPKk8qTysxKStafSxlYXNlSW5PdXRRdWludDpmdW5jdGlvbihELE8sWixZLG9lKXtyZXR1cm4oTy89b2UvMik8MT9ZLzIqTypPKk8qTypPK1o6WS8yKigoTy09MikqTypPKk8qTysyKStafSxlYXNlSW5TaW5lOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybi1ZKmwoTy9vZSoodi8yKSkrWStafSxlYXNlT3V0U2luZTpmdW5jdGlvbihELE8sWixZLG9lKXtyZXR1cm4gWSpmKE8vb2UqKHYvMikpK1p9LGVhc2VJbk91dFNpbmU6ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuLVkvMioobCh2Kk8vb2UpLTEpK1p9LGVhc2VJbkV4cG86ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuIE89PT0wP1o6WSpnKDIsMTAqKE8vb2UtMSkpK1p9LGVhc2VPdXRFeHBvOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybiBPPT09b2U/WitZOlkqKC1nKDIsLTEwKk8vb2UpKzEpK1p9LGVhc2VJbk91dEV4cG86ZnVuY3Rpb24oRCxPLFosWSxvZSl7cmV0dXJuIE89PT0wP1o6Tz09PW9lP1orWTooTy89b2UvMik8MT9ZLzIqZygyLDEwKihPLTEpKStaOlkvMiooLWcoMiwtMTAqLS1PKSsyKStafSxlYXNlSW5DaXJjOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybi1ZKih5KDEtKE8vPW9lKSpPKS0xKStafSxlYXNlT3V0Q2lyYzpmdW5jdGlvbihELE8sWixZLG9lKXtyZXR1cm4gWSp5KDEtKE89Ty9vZS0xKSpPKStafSxlYXNlSW5PdXRDaXJjOmZ1bmN0aW9uKEQsTyxaLFksb2Upe3JldHVybihPLz1vZS8yKTwxPy1ZLzIqKHkoMS1PKk8pLTEpK1o6WS8yKih5KDEtKE8tPTIpKk8pKzEpK1p9fSx4PWZ1bmN0aW9uKEQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChEP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRCk6W10pfSxNPWZ1bmN0aW9uKEQpe3JldHVybiB4KEQpLnNoaWZ0KCl8fG51bGx9LFM9ZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBFbGVtZW50fSxGPWZ1bmN0aW9uKEQpe3JldHVybiBEPT09d2luZG93fSxfPWZ1bmN0aW9uKEQpe3JldHVybiBEPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxEPT09ZG9jdW1lbnQuYm9keX0saz1mdW5jdGlvbihELE8pe2lmKFMoTykpcmV0dXJuIEQ9PT1PO2Zvcih2YXIgWj14KE8pLFk9Wi5sZW5ndGg7LS1ZPj0wJiZaW1ldIT09RDspO3JldHVybiBZPi0xfSxOPWZ1bmN0aW9uKEQpe3JldHVybiBNYXRoLm1heChELnNjcm9sbEhlaWdodCxELmNsaWVudEhlaWdodCxELm9mZnNldEhlaWdodCl9LEw9ZnVuY3Rpb24oRCl7cmV0dXJuIE1hdGgubWF4KEQuc2Nyb2xsV2lkdGgsRC5jbGllbnRXaWR0aCxELm9mZnNldFdpZHRoKX0sQT1mdW5jdGlvbihEKXtyZXR1cm57d2lkdGg6TChEKSxoZWlnaHQ6TihEKX19LHE9ZnVuY3Rpb24oRCl7dmFyIE89RihEKXx8XyhEKTtyZXR1cm57dmlld3BvcnQ6e3dpZHRoOk8/TWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKTpELmNsaWVudFdpZHRoLGhlaWdodDpPP3dpbmRvdy5pbm5lckhlaWdodDpELmNsaWVudEhlaWdodH0sc2l6ZTpPP3t3aWR0aDpNYXRoLm1heChMKGRvY3VtZW50LmJvZHkpLEwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSksaGVpZ2h0Ok1hdGgubWF4KE4oZG9jdW1lbnQuYm9keSksTihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX06QShEKX19LEM9e3k6InNjcm9sbFRvcCIseDoic2Nyb2xsTGVmdCJ9LHo9e3k6InBhZ2VZT2Zmc2V0Iix4OiJwYWdlWE9mZnNldCJ9LEU9ZnVuY3Rpb24oRCxPKXtyZXR1cm4gRihEKT9EW3pbT11dOkRbQ1tPXV19LFQ9ZnVuY3Rpb24oRCxPLFope2lmKEYoRCkpe3ZhciBZPVo9PT0ieSI7RC5zY3JvbGxUbyhZP0QucGFnZVhPZmZzZXQ6TyxZP086RC5wYWdlWU9mZnNldCl9ZWxzZSBEW0NbWl1dPU99LCQ9ZnVuY3Rpb24oRCxPKXt2YXIgWj1ELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFoud2lkdGh8fFouaGVpZ2h0KXt2YXIgWT17dG9wOjAsbGVmdDowfSxvZT12b2lkIDA7aWYoRihPKXx8XyhPKSlvZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsWS50b3A9d2luZG93W3oueV0sWS5sZWZ0PXdpbmRvd1t6LnhdO2Vsc2V7b2U9Tzt2YXIgZ2U9b2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7WS50b3A9Z2UudG9wKi0xK29lW0MueV0sWS5sZWZ0PWdlLmxlZnQqLTErb2VbQy54XX1yZXR1cm57dG9wOloudG9wK1kudG9wLW9lLmNsaWVudFRvcCxsZWZ0OloubGVmdCtZLmxlZnQtb2UuY2xpZW50TGVmdH19cmV0dXJuIFp9LFY9KGZ1bmN0aW9uKCl7cmV0dXJuIGU/Im9ud2hlZWwiaW4gZG9jdW1lbnQ/IndoZWVsIjoibW91c2V3aGVlbCI6IndoZWVsIn0pKCksUj1mdW5jdGlvbihEKXtyZXR1cm4gRD09PSJ3aGVlbCI/VjpEfSxVPWZ1bmN0aW9uKEQsTyxaLFksb2Upe1ouc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtEW09dKFIoZ2UpLFksaT97cGFzc2l2ZTpvZX06ITEpfSl9LHJlPWZ1bmN0aW9uKEQsTyxaLFkpe3JldHVybiBVKEQsImFkZEV2ZW50TGlzdGVuZXIiLE8sWixZKX0saj1mdW5jdGlvbihELE8sWixZKXtyZXR1cm4gVShELCJyZW1vdmVFdmVudExpc3RlbmVyIixPLFosWSl9LG1lPS9eKFwrfC0pPShcZCsoPzpcLlxkKyk/KSQvLHdlPWZ1bmN0aW9uKEQsTyl7dmFyIFo9e3RvcDowLGxlZnQ6MCxyZWxhdGl2ZTohMX07aWYoZChELCJ0b3AiKXx8ZChELCJsZWZ0IikpWj10KHt9LFosRCk7ZWxzZSBpZihuKEQpKWlmKEQubGVuZ3RoPjEpWi50b3A9RFswXSxaLmxlZnQ9RFsxXTtlbHNlIGlmKEQubGVuZ3RoPT09MSlaLnRvcD1PP0RbMF06MCxaLmxlZnQ9Tz8wOkRbMF07ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKG8oRCkpTz9aLnRvcD1EOloubGVmdD1EO2Vsc2UgaWYocihEKSl7dmFyIFk9RC50cmltKCkubWF0Y2gobWUpO2lmKCFZKXJldHVybiBudWxsO3ZhciBvZT1ZWzFdLGdlPXBhcnNlSW50KFlbMl0sMTApO29lPT09IisiPyhaLnRvcD1PP2dlOjAsWi5sZWZ0PU8/MDpnZSk6KFoudG9wPU8/LWdlOjAsWi5sZWZ0PU8/MDotZ2UpLFoucmVsYXRpdmU9ITB9ZWxzZSByZXR1cm4gbnVsbDtyZXR1cm4gWn0sSD17dHJpZ2dlcjoiW2RhdGEtc2Nyb2xsXSIsaGVhZGVyOiJbZGF0YS1zY3JvbGwtaGVhZGVyXSIsZHVyYXRpb246MWUzLGVhc2luZzoiZWFzZU91dFF1aW50IixvZmZzZXQ6MCx2ZXJ0aWNhbDohMCxob3Jpem9udGFsOiExLGNhbmNlbGxhYmxlOiEwLHVwZGF0ZVVSTDohMSxwcmV2ZW50RGVmYXVsdDohMCxzdG9wUHJvcGFnYXRpb246ITAsYmVmb3JlOm51bGwsYWZ0ZXI6bnVsbCxjYW5jZWw6bnVsbCxjb21wbGV0ZTpudWxsLHN0ZXA6bnVsbH0sY2U9ImNsaWNrIixrZT0id2hlZWwgdG91Y2hzdGFydCB0b3VjaG1vdmUiLFc9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRChPLFope3ZhciBZPXRoaXM7dGhpcy4kZWw9bnVsbCx0aGlzLmN0eD17JHRyaWdnZXI6bnVsbCxvcHRzOm51bGwscHJvZ3Jlc3M6ITEscG9zOm51bGwsc3RhcnRQb3M6bnVsbCxlYXNpbmc6bnVsbCxzdGFydDowLGlkOjAsY2FuY2VsOiExLGhhc2g6bnVsbH0sdGhpcy5sb29wPWZ1bmN0aW9uKGdlKXt2YXIgYmU9WSwkZT1iZS4kZWwsQj1iZS5jdHg7aWYoQi5zdGFydHx8KEIuc3RhcnQ9Z2UpLCFCLnByb2dyZXNzfHwhJGUpe1kuc3RvcCgpO3JldHVybn12YXIgUD1CLm9wdHMsSj1CLnBvcyxmZT1CLnN0YXJ0LGRlPUIuc3RhcnRQb3MsX2U9Qi5lYXNpbmcsaGU9UC5kdXJhdGlvbix0ZT17dG9wOiJ5IixsZWZ0OiJ4In0semU9Z2UtZmUsRmU9TWF0aC5taW4oMSxNYXRoLm1heCh6ZS9oZSwwKSk7T2JqZWN0LmtleXMoSikuZm9yRWFjaChmdW5jdGlvbihHZSl7dmFyIHllPUpbR2VdLGVlPWRlW0dlXSxhZT15ZS1lZTtpZihhZSE9PTApe3ZhciB2ZT1fZShGZSxoZSpGZSwwLDEsaGUpO1QoJGUsTWF0aC5yb3VuZChlZSthZSp2ZSksdGVbR2VdKX19KSx6ZTw9aGU/KFkuaG9vayhQLCJzdGVwIixGZSksQi5pZD1ELnJhZihZLmxvb3ApKTpZLnN0b3AoITApfSx0aGlzLmhhbmRsZUNsaWNrPWZ1bmN0aW9uKGdlKXtmb3IodmFyIGJlPVkub3B0cywkZT1nZS50YXJnZXQ7JGUmJiRlIT09ZG9jdW1lbnQ7JGU9JGUucGFyZW50Tm9kZSlpZihrKCRlLGJlLnRyaWdnZXIpKXt2YXIgQj1KU09OLnBhcnNlKCRlLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpfHwie30iKSxQPSRlLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwiKSxKPVB8fCRlLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGZlPXQoe30sYmUsQiksZGU9ZmUucHJldmVudERlZmF1bHQsX2U9ZmUuc3RvcFByb3BhZ2F0aW9uLGhlPWZlLnZlcnRpY2FsLHRlPWZlLmhvcml6b250YWw7ZGUmJmdlLnByZXZlbnREZWZhdWx0KCksX2UmJmdlLnN0b3BQcm9wYWdhdGlvbigpLFkuY3R4LiR0cmlnZ2VyPSRlLHRlJiZoZT9ZLnRvKEosZmUpOmhlP1kudG9Ub3AoSixmZSk6dGUmJlkudG9MZWZ0KEosZmUpO2JyZWFrfX0sdGhpcy5oYW5kbGVTdG9wPWZ1bmN0aW9uKGdlKXt2YXIgYmU9WS5jdHgsJGU9YmUub3B0czskZSYmJGUuY2FuY2VsbGFibGU/KGJlLmNhbmNlbD0hMCxZLnN0b3AoKSk6Z2UucHJldmVudERlZmF1bHQoKX0sdGhpcy5vcHRzPXQoe30sSCxPfHx7fSk7dmFyIG9lPW51bGw7ZSYmKHR5cGVvZiBaPT0ic3RyaW5nIj9vZT1NKFopOlohPW51bGw/b2U9WjpvZT13aW5kb3cpLHRoaXMuJGVsPW9lLG9lJiZ0aGlzLmJpbmQoITAsITEpfXJldHVybiBELmNyZWF0ZT1mdW5jdGlvbihPLFope3JldHVybiBuZXcgRChPLFopfSxELnByb3RvdHlwZS50bz1mdW5jdGlvbihPLFope2lmKGUpe3ZhciBZPXRoaXMsb2U9WS4kZWwsZ2U9WS5jdHgsYmU9WS5vcHRzLCRlPWdlLiR0cmlnZ2VyLEI9dCh7fSxiZSxafHx7fSksUD1CLm9mZnNldCxKPUIudmVydGljYWwsZmU9Qi5ob3Jpem9udGFsLGRlPVMoQi5oZWFkZXIpP0IuaGVhZGVyOk0oQi5oZWFkZXIpLF9lPS9eIy8saGU9cihPKSYmX2UudGVzdChPKT9POm51bGw7aWYoZ2Uub3B0cz1CLGdlLmNhbmNlbD0hMSxnZS5oYXNoPWhlLHRoaXMuc3RvcCgpLCEhb2Upe3ZhciB0ZT13ZShQLEopLHplPXdlKE8sSiksRmU9e3RvcDowLGxlZnQ6MH07aWYoemUpaWYoemUucmVsYXRpdmUpe3ZhciBHZT1FKG9lLEo/InkiOiJ4Iik7RmUudG9wPUo/R2UremUudG9wOnplLnRvcCxGZS5sZWZ0PUo/emUubGVmdDpHZSt6ZS5sZWZ0fWVsc2UgRmU9emU7ZWxzZSBpZihyKE8pJiZPIT09IiMiKXt2YXIgeWU9TShPKTtpZigheWUpcmV0dXJuO0ZlPSQoeWUsb2UpfXRlJiYoRmUudG9wKz10ZS50b3AsRmUubGVmdCs9dGUubGVmdCksZGUmJihGZS50b3A9TWF0aC5tYXgoMCxGZS50b3AtQShkZSkuaGVpZ2h0KSk7dmFyIGVlPXEob2UpLGFlPWVlLnZpZXdwb3J0LHZlPWVlLnNpemU7aWYoRmUudG9wPUo/TWF0aC5tYXgoMCxNYXRoLm1pbih2ZS5oZWlnaHQtYWUuaGVpZ2h0LEZlLnRvcCkpOkUob2UsInkiKSxGZS5sZWZ0PWZlP01hdGgubWF4KDAsTWF0aC5taW4odmUud2lkdGgtYWUud2lkdGgsRmUubGVmdCkpOkUob2UsIngiKSx0aGlzLmhvb2soQiwiYmVmb3JlIixGZSwkZSk9PT0hMSl7Z2Uub3B0cz1udWxsO3JldHVybn1nZS5wb3M9RmUsdGhpcy5zdGFydChCKSx0aGlzLmJpbmQoITEsITApfX19LEQucHJvdG90eXBlLnRvVG9wPWZ1bmN0aW9uKE8sWil7dGhpcy50byhPLHQoe30sWnx8e30se3ZlcnRpY2FsOiEwLGhvcml6b250YWw6ITF9KSl9LEQucHJvdG90eXBlLnRvTGVmdD1mdW5jdGlvbihPLFope3RoaXMudG8oTyx0KHt9LFp8fHt9LHt2ZXJ0aWNhbDohMSxob3Jpem9udGFsOiEwfSkpfSxELnByb3RvdHlwZS50b0VsZW1lbnQ9ZnVuY3Rpb24oTyxaKXt2YXIgWT10aGlzLiRlbDshZXx8IVl8fHRoaXMudG8oJChPLFkpLFp8fHt9KX0sRC5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihPKXtPPT09dm9pZCAwJiYoTz0hMSk7dmFyIFo9dGhpcyxZPVouJGVsLG9lPVouY3R4LGdlPW9lLnBvczshWXx8IW9lLnByb2dyZXNzfHwoRC5jYWYob2UuaWQpLG9lLnByb2dyZXNzPSExLG9lLnN0YXJ0PTAsb2UuaWQ9MCxPJiZnZSYmKFQoWSxnZS5sZWZ0LCJ4IiksVChZLGdlLnRvcCwieSIpKSx0aGlzLmNvbXBsZXRlKCkpfSxELnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyl7aWYodGhpcy4kZWwpe3ZhciBaPXQoe30sdGhpcy5vcHRzLE8pO3RoaXMuc3RvcCgpLHRoaXMudW5iaW5kKCEwLCEwKSx0aGlzLm9wdHM9Wix0aGlzLmJpbmQoITAsITEpfX0sRC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuJGVsJiYodGhpcy5zdG9wKCksdGhpcy51bmJpbmQoITAsITApLHRoaXMuJGVsPW51bGwpfSxELnByb3RvdHlwZS5vbkJlZm9yZT1mdW5jdGlvbihPLFope3JldHVybiEwfSxELnByb3RvdHlwZS5vblN0ZXA9ZnVuY3Rpb24oTyl7fSxELnByb3RvdHlwZS5vbkFmdGVyPWZ1bmN0aW9uKE8sWil7fSxELnByb3RvdHlwZS5vbkNhbmNlbD1mdW5jdGlvbigpe30sRC5wcm90b3R5cGUub25Db21wbGV0ZT1mdW5jdGlvbihPKXt9LEQucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKE8pe3ZhciBaPXRoaXMuY3R4O1oub3B0cz1PLFoucHJvZ3Jlc3M9ITAsWi5lYXNpbmc9cyhPLmVhc2luZyk/Ty5lYXNpbmc6bVtPLmVhc2luZ107dmFyIFk9dGhpcy4kZWwsb2U9e3RvcDpFKFksInkiKSxsZWZ0OkUoWSwieCIpfTtaLnN0YXJ0UG9zPW9lLFouaWQ9RC5yYWYodGhpcy5sb29wKX0sRC5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLFo9Ty4kZWwsWT1PLmN0eCxvZT1ZLmhhc2gsZ2U9WS5jYW5jZWwsYmU9WS5vcHRzLCRlPVkucG9zLEI9WS4kdHJpZ2dlcjtpZighKCFafHwhYmUpKXtpZihvZSE9bnVsbCYmb2UhPT13aW5kb3cubG9jYXRpb24uaGFzaCl7dmFyIFA9YmUudXBkYXRlVVJMO2UmJmEmJlAhPT0hMSYmd2luZG93Lmhpc3RvcnlbUD09PSJyZXBsYWNlIj8icmVwbGFjZVN0YXRlIjoicHVzaFN0YXRlIl0obnVsbCwiIixvZSl9dGhpcy51bmJpbmQoITEsITApLFkub3B0cz1udWxsLFkuJHRyaWdnZXI9bnVsbCxnZT90aGlzLmhvb2soYmUsImNhbmNlbCIpOnRoaXMuaG9vayhiZSwiYWZ0ZXIiLCRlLEIpLHRoaXMuaG9vayhiZSwiY29tcGxldGUiLGdlKX19LEQucHJvdG90eXBlLmhvb2s9ZnVuY3Rpb24oTyxaKXtmb3IodmFyIFk9W10sb2U9MjtvZTxhcmd1bWVudHMubGVuZ3RoO29lKyspWVtvZS0yXT1hcmd1bWVudHNbb2VdO3ZhciBnZSxiZT1PW1pdLCRlLEI7cmV0dXJuIHMoYmUpJiYoJGU9YmUuYXBwbHkodGhpcyxZLmNvbmNhdChbdGhpc10pKSksQj0oZ2U9dGhpcylbIm9uIisoWlswXS50b1VwcGVyQ2FzZSgpK1ouc2xpY2UoMSkpXS5hcHBseShnZSxZKSwkZSE9PXZvaWQgMD8kZTpCfSxELnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKE8sWil7dmFyIFk9dGhpcyxvZT1ZLiRlbCxnZT1ZLmN0eC5vcHRzO29lJiYoTyYmcmUob2UsY2UsdGhpcy5oYW5kbGVDbGljaywhMSksWiYmcmUob2Usa2UsdGhpcy5oYW5kbGVTdG9wLGdlP2dlLmNhbmNlbGxhYmxlOiEwKSl9LEQucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbihPLFope3ZhciBZPXRoaXMsb2U9WS4kZWwsZ2U9WS5jdHgub3B0cztvZSYmKE8mJmoob2UsY2UsdGhpcy5oYW5kbGVDbGljaywhMSksWiYmaihvZSxrZSx0aGlzLmhhbmRsZVN0b3AsZ2U/Z2UuY2FuY2VsbGFibGU6ITApKX0sRC5yYWY9YyxELmNhZj1wLER9KSgpO3JldHVybiBXfSl9KTt2YXIgcmYsYjUsYWw9YigoKT0+e1IyZSgpO0M2KCk7YnIoKTt3MygpO04kKCk7ZDIoKTtqJCgpO0lpKCk7YUEoKTtnMygpO3JBKCk7emxlKCk7SnUoKTt2NigpO1NjZSgpO0NjZSgpO0FBKCk7QWNlKCk7cmY9VTEoUEEoKSwxKSxiNT17T2JqZWN0TWFwOnRmLFN0cmluZ21hcDphZixGYXN0TWFwOnRsfX0pO3ZhciBWcj17fTtXZShWcix7Y3NzRm9yRGVza3RvcDooKT0+JEJ0LGNzc0Zvck5vdGVib29rOigpPT5BQnQsY3NzRm9yUGhhYmxldDooKT0+RUJ0LGNzc0ZvclBob25lOigpPT5QQnQsY3NzRm9yVGFibGV0OigpPT5EQnQsZGVza3RvcDooKT0+SUEsbm90ZWJvb2s6KCk9Pk5BLHBoYWJsZXQ6KCk9Pk9BLHBob25lOigpPT5SQSx0YWJsZXQ6KCk9PkZBfSk7dmFyIElBLE5BLEZBLE9BLFJBLCRCdCxBQnQsREJ0LEVCdCxQQnQsQkE9YigoKT0+e2lsKCk7ZnIoKTtJQT0xNjAwLE5BPTEyNDAsRkE9MTAyNCxPQT02MDAsUkE9NDAwLCRCdD10PT5xdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1pbi13aWR0aDogJHtJQX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiAke0lBfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLEFCdD10PT5xdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtOQX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke05BfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLERCdD10PT5xdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtGQX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke0ZBfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLEVCdD10PT5xdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtPQX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke09BfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApLFBCdD10PT5xdChgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtSQX1weCkgewogICAgICAke3QuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke1JBfXB4KSB7CiAgICAgICR7dC5jc3NUZXh0fQogICAgfQogIGApfSk7dmFyIG5mLERjZT1iKCgpPT57YWwoKTtuZj1jbGFzc3tkb210b29sc0luc3RhbmNlO3Njcm9sbENhbGxiYWNrcz1bXTtsZW5pc0luc3RhbmNlPW51bGw7aGFuZGxlTmF0aXZlU2Nyb2xsPWU9Pnt0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKX07aGFuZGxlTGVuaXNTY3JvbGw9ZT0+e3RoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpfTtjb25zdHJ1Y3RvcihlKXt0aGlzLmRvbXRvb2xzSW5zdGFuY2U9ZSx0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCl9c3dlZXRTY3JvbGxlcj1uZXcgcmYuZGVmYXVsdCh7fSk7YXN5bmMgdG9FbGVtZW50KGUsYSl7dGhpcy5zd2VldFNjcm9sbGVyLnRvRWxlbWVudChlLGEpLGF3YWl0IHB0LmRlbGF5Rm9yKGEuZHVyYXRpb24pfWFzeW5jIGRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpe2xldCBlPUhlLmRlZmVyKCksYT0xMDAsaT0zLHI9Ljc1LHM9W107ZnVuY3Rpb24gbihkKXtzLnB1c2goZC5kZWx0YVkpLHMubGVuZ3RoPj1hJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixuKSxvKCkpfWZ1bmN0aW9uIG8oKXtsZXQgZD1zLmxlbmd0aC0xLGM9MDtmb3IobGV0IGw9MDtsPGQ7bCsrKU1hdGguYWJzKHNbbCsxXS1zW2xdKTw9aSYmYysrO2MvZD49cj8oY29uc29sZS5sb2coIlNtb290aCBzY3JvbGxpbmcgZGV0ZWN0ZWQuIiksZS5yZXNvbHZlKCEwKSk6KGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIE5PVCBkZXRlY3RlZC4iKSxlLnJlc29sdmUoITEpKX1yZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixuKSxlLnByb21pc2V9YXN5bmMgZW5hYmxlTGVuaXNTY3JvbGwoZSl7bGV0IGE9bmV3IGc1KHthdXRvUmFmOiEwfSk7aWYoZT8uZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsJiZhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKXthLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5sZW5pc0luc3RhbmNlPWEsdGhpcy5kZXRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMuYXR0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpO2xldCBpPWEuZGVzdHJveS5iaW5kKGEpO2EuZGVzdHJveT0oKT0+e2koKSx0aGlzLmRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5sZW5pc0luc3RhbmNlPW51bGx9fW9uU2Nyb2xsKGUpe3RoaXMuc2Nyb2xsQ2FsbGJhY2tzLnB1c2goZSl9ZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpe3RoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goZT0+e3RyeXtlKCl9Y2F0Y2goYSl7Y29uc29sZS5lcnJvcigiRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOiIsYSl9fSl9YXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCl9ZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCl9YXR0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpe3RoaXMubGVuaXNJbnN0YW5jZSYmdGhpcy5sZW5pc0luc3RhbmNlLm9uKCJzY3JvbGwiLHRoaXMuaGFuZGxlTGVuaXNTY3JvbGwpfWRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLmxlbmlzSW5zdGFuY2UmJnRoaXMubGVuaXNJbnN0YW5jZS5vZmYoInNjcm9sbCIsdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCl9fX0pO3ZhciBvZixFY2U9YigoKT0+e2lsKCk7YWwoKTtvZj1jbGFzc3tkb210b29sc1JlZjtnb0JyaWdodEJvb2xlYW49ITE7cHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpO3RoZW1lT2JzZXJ2YWJsZT1uZXcgRHQucnhqcy5SZXBsYXlTdWJqZWN0KDEpO2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tdG9vbHNSZWY9ZSx0aGlzLmdvQnJpZ2h0Qm9vbGVhbj10aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaC5tYXRjaGVzLHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYT0+e3RoaXMuZ29CcmlnaHRCb29sZWFuPWEubWF0Y2hlcyx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9KSx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9YXN5bmMgZW5hYmxlQXV0b21hdGljR2xvYmFsVGhlbWVDaGFuZ2UoKXtkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LnN0eWxlJiZ0aGlzLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoe25leHQ6ZT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZD1lPyIjZmZmIjoiIzAwMCJ9fSl9YXN5bmMgdXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKXt0aGlzLnRoZW1lT2JzZXJ2YWJsZS5uZXh0KHRoaXMuZ29CcmlnaHRCb29sZWFuKX1nb0JyaWdodCgpe3RoaXMuZ29CcmlnaHRCb29sZWFuPSEwLHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKX1nb0RhcmsoKXt0aGlzLmdvQnJpZ2h0Qm9vbGVhbj0hMSx0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9dG9nZ2xlRGFya0JyaWdodCgpe3RoaXMuZ29CcmlnaHRCb29sZWFuPSF0aGlzLmdvQnJpZ2h0Qm9vbGVhbix0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCl9fX0pO3ZhciBIQSxsZixQY2U9YigoKT0+e2FsKCk7KGZ1bmN0aW9uKHQpe3RbdC5CYWNrc3BhY2U9OF09IkJhY2tzcGFjZSIsdFt0LlRhYj05XT0iVGFiIix0W3QuRW50ZXI9MTNdPSJFbnRlciIsdFt0LlNoaWZ0PTE2XT0iU2hpZnQiLHRbdC5DdHJsPTE3XT0iQ3RybCIsdFt0LkFsdD0xOF09IkFsdCIsdFt0LlBhdXNlQnJlYWs9MTldPSJQYXVzZUJyZWFrIix0W3QuQ2Fwc0xvY2s9MjBdPSJDYXBzTG9jayIsdFt0LkVzY2FwZT0yN109IkVzY2FwZSIsdFt0LlNwYWNlPTMyXT0iU3BhY2UiLHRbdC5QYWdlVXA9MzNdPSJQYWdlVXAiLHRbdC5QYWdlRG93bj0zNF09IlBhZ2VEb3duIix0W3QuRW5kPTM1XT0iRW5kIix0W3QuSG9tZT0zNl09IkhvbWUiLHRbdC5MZWZ0QXJyb3c9MzddPSJMZWZ0QXJyb3ciLHRbdC5VcEFycm93PTM4XT0iVXBBcnJvdyIsdFt0LlJpZ2h0QXJyb3c9MzldPSJSaWdodEFycm93Iix0W3QuRG93bkFycm93PTQwXT0iRG93bkFycm93Iix0W3QuSW5zZXJ0PTQ1XT0iSW5zZXJ0Iix0W3QuRGVsZXRlPTQ2XT0iRGVsZXRlIix0W3QuWmVybz00OF09Ilplcm8iLHRbdC5DbG9zZWRQYXJlbj00OF09IkNsb3NlZFBhcmVuIix0W3QuT25lPTQ5XT0iT25lIix0W3QuRXhjbGFtYXRpb25NYXJrPTQ5XT0iRXhjbGFtYXRpb25NYXJrIix0W3QuVHdvPTUwXT0iVHdvIix0W3QuQXRTaWduPTUwXT0iQXRTaWduIix0W3QuVGhyZWU9NTFdPSJUaHJlZSIsdFt0LlBvdW5kU2lnbj01MV09IlBvdW5kU2lnbiIsdFt0Lkhhc2g9NTFdPSJIYXNoIix0W3QuRm91cj01Ml09IkZvdXIiLHRbdC5Eb2xsYXJTaWduPTUyXT0iRG9sbGFyU2lnbiIsdFt0LkZpdmU9NTNdPSJGaXZlIix0W3QuUGVyY2VudFNpZ249NTNdPSJQZXJjZW50U2lnbiIsdFt0LlNpeD01NF09IlNpeCIsdFt0LkNhcmV0PTU0XT0iQ2FyZXQiLHRbdC5IYXQ9NTRdPSJIYXQiLHRbdC5TZXZlbj01NV09IlNldmVuIix0W3QuQW1wZXJzYW5kPTU1XT0iQW1wZXJzYW5kIix0W3QuRWlnaHQ9NTZdPSJFaWdodCIsdFt0LlN0YXI9NTZdPSJTdGFyIix0W3QuQXN0ZXJpaz01Nl09IkFzdGVyaWsiLHRbdC5OaW5lPTU3XT0iTmluZSIsdFt0Lk9wZW5QYXJlbj01N109Ik9wZW5QYXJlbiIsdFt0LkE9NjVdPSJBIix0W3QuQj02Nl09IkIiLHRbdC5DPTY3XT0iQyIsdFt0LkQ9NjhdPSJEIix0W3QuRT02OV09IkUiLHRbdC5GPTcwXT0iRiIsdFt0Lkc9NzFdPSJHIix0W3QuSD03Ml09IkgiLHRbdC5JPTczXT0iSSIsdFt0Lko9NzRdPSJKIix0W3QuSz03NV09IksiLHRbdC5MPTc2XT0iTCIsdFt0Lk09NzddPSJNIix0W3QuTj03OF09Ik4iLHRbdC5PPTc5XT0iTyIsdFt0LlA9ODBdPSJQIix0W3QuUT04MV09IlEiLHRbdC5SPTgyXT0iUiIsdFt0LlM9ODNdPSJTIix0W3QuVD04NF09IlQiLHRbdC5VPTg1XT0iVSIsdFt0LlY9ODZdPSJWIix0W3QuVz04N109IlciLHRbdC5YPTg4XT0iWCIsdFt0Llk9ODldPSJZIix0W3QuWj05MF09IloiLHRbdC5MZWZ0V2luZG93S2V5PTkxXT0iTGVmdFdpbmRvd0tleSIsdFt0LlJpZ2h0V2luZG93S2V5PTkyXT0iUmlnaHRXaW5kb3dLZXkiLHRbdC5TZWxlY3RLZXk9OTNdPSJTZWxlY3RLZXkiLHRbdC5OdW1wYWQwPTk2XT0iTnVtcGFkMCIsdFt0Lk51bXBhZDE9OTddPSJOdW1wYWQxIix0W3QuTnVtcGFkMj05OF09Ik51bXBhZDIiLHRbdC5OdW1wYWQzPTk5XT0iTnVtcGFkMyIsdFt0Lk51bXBhZDQ9MTAwXT0iTnVtcGFkNCIsdFt0Lk51bXBhZDU9MTAxXT0iTnVtcGFkNSIsdFt0Lk51bXBhZDY9MTAyXT0iTnVtcGFkNiIsdFt0Lk51bXBhZDc9MTAzXT0iTnVtcGFkNyIsdFt0Lk51bXBhZDg9MTA0XT0iTnVtcGFkOCIsdFt0Lk51bXBhZDk9MTA1XT0iTnVtcGFkOSIsdFt0Lk11bHRpcGx5PTEwNl09Ik11bHRpcGx5Iix0W3QuQWRkPTEwN109IkFkZCIsdFt0LlN1YnRyYWN0PTEwOV09IlN1YnRyYWN0Iix0W3QuRGVjaW1hbFBvaW50PTExMF09IkRlY2ltYWxQb2ludCIsdFt0LkRpdmlkZT0xMTFdPSJEaXZpZGUiLHRbdC5GMT0xMTJdPSJGMSIsdFt0LkYyPTExM109IkYyIix0W3QuRjM9MTE0XT0iRjMiLHRbdC5GND0xMTVdPSJGNCIsdFt0LkY1PTExNl09IkY1Iix0W3QuRjY9MTE3XT0iRjYiLHRbdC5GNz0xMThdPSJGNyIsdFt0LkY4PTExOV09IkY4Iix0W3QuRjk9MTIwXT0iRjkiLHRbdC5GMTA9MTIxXT0iRjEwIix0W3QuRjExPTEyMl09IkYxMSIsdFt0LkYxMj0xMjNdPSJGMTIiLHRbdC5OdW1Mb2NrPTE0NF09Ik51bUxvY2siLHRbdC5TY3JvbGxMb2NrPTE0NV09IlNjcm9sbExvY2siLHRbdC5TZW1pQ29sb249MTg2XT0iU2VtaUNvbG9uIix0W3QuRXF1YWxzPTE4N109IkVxdWFscyIsdFt0LkNvbW1hPTE4OF09IkNvbW1hIix0W3QuRGFzaD0xODldPSJEYXNoIix0W3QuUGVyaW9kPTE5MF09IlBlcmlvZCIsdFt0LlVuZGVyU2NvcmU9MTg5XT0iVW5kZXJTY29yZSIsdFt0LlBsdXNTaWduPTE4N109IlBsdXNTaWduIix0W3QuRm9yd2FyZFNsYXNoPTE5MV09IkZvcndhcmRTbGFzaCIsdFt0LlRpbGRlPTE5Ml09IlRpbGRlIix0W3QuR3JhdmVBY2NlbnQ9MTkyXT0iR3JhdmVBY2NlbnQiLHRbdC5PcGVuQnJhY2tldD0yMTldPSJPcGVuQnJhY2tldCIsdFt0LkNsb3NlZEJyYWNrZXQ9MjIxXT0iQ2xvc2VkQnJhY2tldCIsdFt0LlF1b3RlPTIyMl09IlF1b3RlIn0pKEhBfHwoSEE9e30pKTtsZj1jbGFzc3tkb21Ob2RlO21hcENvbWJvc1RvSGFuZGxlcnM9bmV3IE1hcDtwcmVzc2VkS2V5cz1uZXcgU2V0O2NvbnN0cnVjdG9yKGUpe3RoaXMuZG9tTm9kZT1lLHRoaXMuc3RhcnRMaXN0ZW5pbmcoKX1rZXlFbnVtPUhBO29uKGUpe2xldCBhPW5ldyBEdC5yeGpzLlN1YmplY3Q7cmV0dXJuIHRoaXMucmVnaXN0ZXJLZXlzKGUsYSksYX10cmlnZ2VyS2V5UHJlc3MoZSl7Zm9yKGxldCBhIG9mIGUpdGhpcy5wcmVzc2VkS2V5cy5hZGQoYSk7dGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cygpO2ZvcihsZXQgYSBvZiBlKXRoaXMucHJlc3NlZEtleXMuZGVsZXRlKGEpfXN0YXJ0TGlzdGVuaW5nKCl7dGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuaGFuZGxlS2V5RG93biksdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmhhbmRsZUtleVVwKX1zdG9wTGlzdGVuaW5nKCl7dGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuaGFuZGxlS2V5RG93biksdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmhhbmRsZUtleVVwKX1jbGVhcigpe3RoaXMuc3RvcExpc3RlbmluZygpLHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5jbGVhcigpLHRoaXMucHJlc3NlZEtleXMuY2xlYXIoKX1oYW5kbGVLZXlEb3duPWU9Pnt0aGlzLnByZXNzZWRLZXlzLmFkZChlLmtleUNvZGUpLHRoaXMuY2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMoZSl9O2NoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKGUpe3RoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5mb3JFYWNoKChhLGkpPT57dGhpcy5hcmVBbGxLZXlzUHJlc3NlZChpKSYmYS5uZXh0KGUpfSl9aGFuZGxlS2V5VXA9ZT0+e3RoaXMucHJlc3NlZEtleXMuZGVsZXRlKGUua2V5Q29kZSl9O2FyZUFsbEtleXNQcmVzc2VkKGUpe2xldCBhPSEwO3JldHVybiBlLmZvckVhY2goaT0+e3RoaXMucHJlc3NlZEtleXMuaGFzKGkpfHwoYT0hMSl9KSxhfXJlZ2lzdGVyS2V5cyhlLGEpe2lmKCF0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuaGFzKGUpKXRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5zZXQoZSxhKTtlbHNlIHJldHVybiB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuZ2V0KGUpfX19KTt2YXIgWTIsaWw9YigoKT0+e2FsKCk7QkEoKTtEY2UoKTtKdSgpO0VjZSgpO1BjZSgpO1kyPWNsYXNzIHR7c3RhdGljIGluaXRpYWxpemF0aW9uUHJvbWlzZT1udWxsO3N0YXRpYyBhc3luYyBzZXR1cERvbVRvb2xzKGU9e30pe3JldHVybiFlLmlnbm9yZUdsb2JhbCYmdC5pbml0aWFsaXphdGlvblByb21pc2U/YXdhaXQgdC5pbml0aWFsaXphdGlvblByb21pc2U6ZS5pZ25vcmVHbG9iYWw/bmV3IHQoZSk6KHQuaW5pdGlhbGl6YXRpb25Qcm9taXNlPShhc3luYygpPT57bGV0IGE7aWYoZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHMpYT1nbG9iYWxUaGlzLmRlZXNEb21Ub29scztlbHNle2dsb2JhbFRoaXMuZGVlc0RvbVRvb2xzPW5ldyB0KGUpLGE9Z2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7bGV0IGk9KCk9PnsoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJpbnRlcmFjdGl2ZSJ8fGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKSYmKGEuZWxlbWVudHMuaGVhZEVsZW1lbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLGEuZWxlbWVudHMuYm9keUVsZW1lbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpLGEua2V5Ym9hcmQ9bmV3IGxmKGRvY3VtZW50LmJvZHkpLGEuZG9tUmVhZHkucmVzb2x2ZSgpKX07ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJpbnRlcmFjdGl2ZSJ8fGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP2koKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixpKSxhLmRvbVRvb2xzUmVhZHkucmVzb2x2ZSgpfXJldHVybiBhd2FpdCBhLmRvbVRvb2xzUmVhZHkucHJvbWlzZSxhfSkoKSxhd2FpdCB0LmluaXRpYWxpemF0aW9uUHJvbWlzZSl9c3RhdGljIGdldEdsb2JhbERvbVRvb2xzU3luYygpe2lmKCFnbG9iYWxUaGlzLmRlZXNEb21Ub29scyl0aHJvdyBuZXcgRXJyb3IoIllvdSB0cmllZCB0byBhY2Nlc3MgZG9tdG9vbHMgc3luY2hyb25vdXNseSB0b28gZWFybHkiKTtyZXR1cm4gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHN9ZWxlbWVudHM9e2hlYWRFbGVtZW50Om51bGwsYm9keUVsZW1lbnQ6bnVsbH07d2Vic2V0dXA9bmV3IG01KHttZXRhT2JqZWN0Ont0aXRsZToiIn19KTtzbWFydHN0YXRlPW5ldyBLbi5TbWFydHN0YXRlO2RvbVRvb2xzU3RhdGVQYXJ0PXRoaXMuc21hcnRzdGF0ZS5nZXRTdGF0ZVBhcnQoImRvbXRvb2xzIix7dmlydHVhbFZpZXdwb3J0OiJuYXRpdmUiLGp3dDpudWxsfSk7cm91dGVyPW5ldyBYbi5TbWFydFJvdXRlcih7ZGVidWc6ITF9KTtjb252ZW5pZW5jZT17dHlwZWRyZXF1ZXN0OmNhLHNtYXJ0ZGVsYXk6cHQsc21hcnRqc29uOkMxLHNtYXJ0dXJsOlFufTtkZWVzQ29tbXM9bmV3IEw2LkRlZXNDb21tcztzY3JvbGxlcj1uZXcgbmYodGhpcyk7dGhlbWVNYW5hZ2VyPW5ldyBvZih0aGlzKTtrZXlib2FyZD1udWxsO2RvbVRvb2xzUmVhZHk9SGUuZGVmZXIoKTtkb21SZWFkeT1IZS5kZWZlcigpO2dsb2JhbFN0eWxlc1JlYWR5PUhlLmRlZmVyKCk7Y29uc3RydWN0b3IoZSl7fXJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwPW5ldyBiNS5TdHJpbmdtYXA7cnVuT25jZVJlc3VsdE1hcD1uZXcgYjUuRmFzdE1hcDtydW5PbmNlRXJyb3JNYXA9bmV3IGI1LkZhc3RNYXA7YXN5bmMgcnVuT25jZShlLGEpe2xldCBpPWAke2V9K3J1bm5pbmdDaGVja2A7aWYoIXRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuY2hlY2tTdHJpbmcoZSkpe3RoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGUpLHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGkpO3RyeXtsZXQgcj1hd2FpdCBhKCk7dGhpcy5ydW5PbmNlUmVzdWx0TWFwLmFkZFRvTWFwKGUscil9Y2F0Y2gocil7dGhpcy5ydW5PbmNlRXJyb3JNYXAuYWRkVG9NYXAoZSxyKX1maW5hbGx5e3RoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAucmVtb3ZlU3RyaW5nKGkpfX1yZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZShyPT4hci5pbmNsdWRlcyhpKSwoKT0+e2xldCByPXRoaXMucnVuT25jZUVycm9yTWFwLmdldEJ5S2V5KGUpO2lmKHIpdGhyb3cgcjtyZXR1cm4gdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmdldEJ5S2V5KGUpfSl9YXN5bmMgc2V0R2xvYmFsU3R5bGVzKGUpe2F3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2EudHlwZT0idGV4dC9jc3MiLGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpLHRoaXMuZWxlbWVudHMuaGVhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSl9YXN5bmMgc2V0RXh0ZXJuYWxTY3JpcHQoZSl7YXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlO2xldCBhPUhlLmRlZmVyKCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpLnNyYz1lLGkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXthLnJlc29sdmUoKX0pLChkb2N1bWVudC5oZWFkfHxkb2N1bWVudC5ib2R5KS5hcHBlbmQoaSksYXdhaXQgYS5wcm9taXNlfWFzeW5jIHNldEV4dGVybmFsQ3NzKGUpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTthLnJlbD0ic3R5bGVzaGVldCIsYS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixhLmhyZWY9ZSxkb2N1bWVudC5oZWFkLmFwcGVuZChhKX1hc3luYyBzZXRXZWJzaXRlSW5mbyhlKXthd2FpdCB0aGlzLndlYnNldHVwLnNldHVwKGUpLGF3YWl0IHRoaXMud2Vic2V0dXAucmVhZHlQcm9taXNlfX19KTt2YXIgY2YsSWNlLE5jZT1iKCgpPT57aWwoKTtmcigpO2NmPSgoKT0+e2xldCB0PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTWFjIE9TIFgiKT09PS0xP1FgYC5jc3NUZXh0OiIiO3JldHVybiBRYAogICAgLyogd2lkdGggKi8KICAgIDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMHB4OwogICAgfQogICAgYm9keSB7CiAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKICAgIH0KICBgLmNzc1RleHR9KSgpLEljZT1RYAogIC8qCiAgQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbWF0ZXJpYWxpY29ucy92NDIvZmxVaFJxNnR6WmNsUUVKLVZkZy1JdWlhRHNOY0loUTh0US53b2ZmMikKICAgICAgZm9ybWF0KCd3b2ZmMicpOwogIH0gKi8KCiAgLyogZ2xvYmFsIGJvZHkgc3R5bGVzICovCiAgYm9keSB7CiAgICBtYXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi8KICAke3F0KGNmKX0KYC5jc3NUZXh0fSk7dmFyIHYxPXt9O1dlKHYxLHtzZXR1cDooKT0+RkJ0LHN0YXRpY1N0eWxlczooKT0+SUJ0LHN0eWxlczooKT0+TkJ0fSk7dmFyIElCdCxOQnQsRkJ0LEZjZT1iKCgpPT57YWwoKTtpbCgpO05jZSgpO2ZyKCk7SUJ0PVFgCiAgKiB7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMsIGNvbG9yIDAuMXM7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgOmhvc3QgewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgfQoKICAke3F0KGNmKX0KYCxOQnQ9d2AKICA8c3R5bGU+CiAgICAqIHsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAke2NmfQogIDwvc3R5bGU+CmAsRkJ0PWFzeW5jKHQsZT17fSk9PntsZXQgYT1hd2FpdCBZMi5zZXR1cERvbVRvb2xzKGUpO3JldHVybiBhLnJ1bk9uY2UoImVsZW1lbnRCYXNpY1NldHVwIixhc3luYygpPT57YS5zZXRHbG9iYWxTdHlsZXMoSWNlKX0pLGF9fSk7dmFyIGRmPXt9O1dlKGRmLHtjc3NHcmlkQ29sdW1uczooKT0+T0J0fSk7dmFyIE9CdCxPY2U9YigoKT0+e09CdD0odCxlKT0+e2xldCBhPSIiO2ZvcihsZXQgaT0wO2k8dDtpKyspYSs9YCBjYWxjKCgxMDAlLyR7dH0pIC0gKCR7ZSoodC0xKX1weC8ke3R9KSlgO3JldHVybiBhfX0pO3ZhciB6dD17fTtXZSh6dCx7U3dlZXRTY3JvbGw6KCk9PnFBLmRlZmF1bHQsc21hcnRkZWxheTooKT0+cHQsc21hcnRtYXJrZG93bjooKT0+SjMsc21hcnRwcm9taXNlOigpPT5IZSxzbWFydHJvdXRlcjooKT0+WG4sc21hcnRyeDooKT0+RHQsc21hcnRzdGF0ZTooKT0+S24sc21hcnRzdHJpbmc6KCk9PlMyLHNtYXJ0dXJsOigpPT5Rbix0eXBlZHJlcXVlc3Q6KCk9PmNhfSk7dmFyIHFBLFJjZT1iKCgpPT57YnIoKTtOJCgpO2QyKCk7cUE9VTEoUEEoKSwxKTthQSgpO2okKCk7SWkoKTtnMygpO3JBKCk7QzYoKX0pO3ZhciBydD17fTtXZShydCx7RG9tVG9vbHM6KCk9PlkyLFR5cGVkUmVxdWVzdDooKT0+UzYsYnJlYWtwb2ludHM6KCk9PlZyLGNzczooKT0+ZGYsZWxlbWVudEJhc2ljOigpPT52MSxwbHVnaW5zOigpPT56dH0pO3ZhciBMdD1iKCgpPT57TkcoKTtGY2UoKTtCQSgpO09jZSgpO2lsKCk7QzYoKTtKdSgpO1JjZSgpfSk7dmFyIFZBLHRvLGpBPWIoKCk9PntWQT1VMSh6ZCgpLDEpO0lpKCk7ZnIoKTtJRygpO0x0KCk7dG89e2NzczpRLHVuc2FmZUNTUzpxdCxMaXRFbGVtZW50OnJzLHByb3BlcnR5Okl9fSk7dmFyIHBmLEhjZT1iKCgpPT57ZnIoKTtqQSgpO0x0KCk7cGY9Y2xhc3MgdHtzdGF0aWMgaW5zdGFuY2U9bnVsbDtzdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIHQuaW5zdGFuY2V8fCh0Lmluc3RhbmNlPW5ldyB0KSx0Lmluc3RhbmNlfWRvbXRvb2xzUHJvbWlzZT1ZMi5zZXR1cERvbVRvb2xzKCk7Z29CcmlnaHQ9ITE7YmRWYXJUcmlwbGV0U3RvcmU9W107Y29uc3RydWN0b3IoKXt0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIGU9PntlLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKGFzeW5jIGE9Pnt0aGlzLmdvQnJpZ2h0PWEsYXdhaXQgZS5kb21SZWFkeS5wcm9taXNlO2ZvcihsZXQgaSBvZiB0aGlzLmJkVmFyVHJpcGxldFN0b3JlKWRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoaS5jc3NWYXJOYW1lLHRoaXMuZ29CcmlnaHQ/aS5icmlnaHRWYWx1ZTppLmRhcmtWYWx1ZSl9KX0pfWdldCBkZWZhdWx0U3R5bGVzKCl7cmV0dXJuIHYxLnN0YXRpY1N0eWxlc31jc3NGb3JEZXNrdG9wKGUpe3JldHVybiBxdChWci5jc3NGb3JEZXNrdG9wKGUpKX1jc3NGb3JOb3RlYm9vayhlKXtyZXR1cm4gcXQoVnIuY3NzRm9yTm90ZWJvb2soZSkpfWNzc0ZvclRhYmxldChlKXtyZXR1cm4gcXQoVnIuY3NzRm9yVGFibGV0KGUpKX1jc3NGb3JQaGFibGV0KGUpe3JldHVybiBxdChWci5jc3NGb3JQaGFibGV0KGUpKX1jc3NGb3JQaG9uZShlKXtyZXR1cm4gcXQoVnIuY3NzRm9yUGhvbmUoZSkpfWJkVGhlbWUoZSxhKXtsZXQgaSxyO1kyLmdldEdsb2JhbERvbVRvb2xzU3luYygpP3I9WTIuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbj9lOmE6cj1hO2xldCBzPXRoaXMuYmRWYXJUcmlwbGV0U3RvcmUuZmluZChuPT5uLmRhcmtWYWx1ZT09PWEmJm4uYnJpZ2h0VmFsdWU9PT1lKTtpZihzKWk9cy5jc3NWYXJOYW1lO2Vsc2V7bGV0IG49e2Nzc1Zhck5hbWU6YC0tJHtWQS51bmkoKX1gLGJyaWdodFZhbHVlOmUsZGFya1ZhbHVlOmF9O3RoaXMuYmRWYXJUcmlwbGV0U3RvcmUucHVzaChuKSx0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIG89Pnthd2FpdCBvLmRvbVJlYWR5LnByb21pc2UsZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShuLmNzc1Zhck5hbWUscil9KSxpPW4uY3NzVmFyTmFtZX1yZXR1cm4gdG8udW5zYWZlQ1NTKGB2YXIoJHtpfSwgJHtyfSlgKX1jc3NHcmlkQ29sdW1ucz0oZSxhKT0+e2xldCBpPSIiO2ZvcihsZXQgcj0wO3I8ZTtyKyspaSs9YCBjYWxjKCgxMDAlLyR7ZX0pIC0gKCR7YSooZS0xKX1weC8ke2V9KSlgO3JldHVybiB0by51bnNhZmVDU1MoaSl9fX0pO3ZhciBVQSxSQnQsV0EsQkJ0LHFjZSxoZixUcyxIQnQscUJ0LFZjZT1iKCgpPT57QWkoKTtVQT1TeW1ib2wuZm9yKCIiKSxSQnQ9dD0+e2lmKHQ/LnI9PT1VQSlyZXR1cm4gdD8uXyRsaXRTdGF0aWMkfSxXQT10PT4oe18kbGl0U3RhdGljJDp0LHI6VUF9KSxCQnQ9KHQsLi4uZSk9Pih7XyRsaXRTdGF0aWMkOmUucmVkdWNlKChhLGkscik9PmErKHM9PntpZihzLl8kbGl0U3RhdGljJCE9PXZvaWQgMClyZXR1cm4gcy5fJGxpdFN0YXRpYyQ7dGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7c30uIFVzZSAndW5zYWZlU3RhdGljJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0pKGkpK3RbcisxXSx0WzBdKSxyOlVBfSkscWNlPW5ldyBNYXAsaGY9dD0+KGUsLi4uYSk9PntsZXQgaT1hLmxlbmd0aCxyLHMsbj1bXSxvPVtdLGQsYz0wLHA9ITE7Zm9yKDtjPGk7KXtmb3IoZD1lW2NdO2M8aSYmKHM9YVtjXSwocj1SQnQocykpIT09dm9pZCAwKTspZCs9citlWysrY10scD0hMDtjIT09aSYmby5wdXNoKHMpLG4ucHVzaChkKSxjKyt9aWYoYz09PWkmJm4ucHVzaChlW2ldKSxwKXtsZXQgbD1uLmpvaW4oIiQkbGl0JCQiKTsoZT1xY2UuZ2V0KGwpKT09PXZvaWQgMCYmKG4ucmF3PW4scWNlLnNldChsLGU9bikpLGE9b31yZXR1cm4gdChlLC4uLmEpfSxUcz1oZih3KSxIQnQ9aGYoT3cpLHFCdD1oZihSdyl9KTt2YXIgamNlPWIoKCk9PntWY2UoKX0pO3ZhciBqcixYMSx1aSxMcz1iKCgpPT57anI9e0FUVFJJQlVURToxLENISUxEOjIsUFJPUEVSVFk6MyxCT09MRUFOX0FUVFJJQlVURTo0LEVWRU5UOjUsRUxFTUVOVDo2fSxYMT10PT4oLi4uZSk9Pih7XyRsaXREaXJlY3RpdmUkOnQsdmFsdWVzOmV9KSx1aT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBVChlLGEsaSl7dGhpcy5fJEN0PWUsdGhpcy5fJEFNPWEsdGhpcy5fJENpPWl9XyRBUyhlLGEpe3JldHVybiB0aGlzLnVwZGF0ZShlLGEpfXVwZGF0ZShlLGEpe3JldHVybiB0aGlzLnJlbmRlciguLi5hKX19fSk7dmFyIHJsLHY1LFVjZT1iKCgpPT57QWkoKTtMcygpO3JsPWNsYXNzIGV4dGVuZHMgdWl7Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksdGhpcy5pdD1TMSxlLnR5cGUhPT1qci5DSElMRCl0aHJvdyBFcnJvcih0aGlzLmNvbnN0cnVjdG9yLmRpcmVjdGl2ZU5hbWUrIigpIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgYmluZGluZ3MiKX1yZW5kZXIoZSl7aWYoZT09PVMxfHxlPT1udWxsKXJldHVybiB0aGlzLl90PXZvaWQgMCx0aGlzLml0PWU7aWYoZT09PWcxKXJldHVybiBlO2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBFcnJvcih0aGlzLmNvbnN0cnVjdG9yLmRpcmVjdGl2ZU5hbWUrIigpIGNhbGxlZCB3aXRoIGEgbm9uLXN0cmluZyB2YWx1ZSIpO2lmKGU9PT10aGlzLml0KXJldHVybiB0aGlzLl90O3RoaXMuaXQ9ZTtsZXQgYT1bZV07cmV0dXJuIGEucmF3PWEsdGhpcy5fdD17XyRsaXRUeXBlJDp0aGlzLmNvbnN0cnVjdG9yLnJlc3VsdFR5cGUsc3RyaW5nczphLHZhbHVlczpbXX19fTtybC5kaXJlY3RpdmVOYW1lPSJ1bnNhZmVIVE1MIixybC5yZXN1bHRUeXBlPTE7djU9WDEocmwpfSk7dmFyIFdjZT1iKCgpPT57VWNlKCl9KTt2YXIgcGUsR0E9YigoKT0+e3BlPXQ9PihlLGEpPT57YSE9PXZvaWQgMD9hLmFkZEluaXRpYWxpemVyKCgpPT57Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHQsZSl9KTpjdXN0b21FbGVtZW50cy5kZWZpbmUodCxlKX19KTt2YXIgR2NlPWIoKCk9PntHQSgpfSk7ZnVuY3Rpb24gSyh0KXtyZXR1cm4gSSh7Li4udCxzdGF0ZTohMCxhdHRyaWJ1dGU6ITF9KX12YXIgWWNlPWIoKCk9Pnt2NygpO30pO2Z1bmN0aW9uIFZCdCh0KXtyZXR1cm4oZSxhKT0+e2xldCBpPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZVthXTtPYmplY3QuYXNzaWduKGksdCl9fXZhciBaY2U9YigoKT0+e30pO3ZhciBmaSxzbD1iKCgpPT57Zmk9KHQsZSxhKT0+KGEuY29uZmlndXJhYmxlPSEwLGEuZW51bWVyYWJsZT0hMCxSZWZsZWN0LmRlY29yYXRlJiZ0eXBlb2YgZSE9Im9iamVjdCImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsYSksYSl9KTtmdW5jdGlvbiBZQSh0LGUpe3JldHVybihhLGkscik9PntsZXQgcz1uPT5uLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IodCk/P251bGw7aWYoZSl7bGV0e2dldDpuLHNldDpvfT10eXBlb2YgaT09Im9iamVjdCI/YTpyPz8oKCk9PntsZXQgZD1TeW1ib2woKTtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbZF19LHNldChjKXt0aGlzW2RdPWN9fX0pKCk7cmV0dXJuIGZpKGEsaSx7Z2V0KCl7bGV0IGQ9bi5jYWxsKHRoaXMpO3JldHVybiBkPT09dm9pZCAwJiYoZD1zKHRoaXMpLChkIT09bnVsbHx8dGhpcy5oYXNVcGRhdGVkKSYmby5jYWxsKHRoaXMsZCkpLGR9fSl9cmV0dXJuIGZpKGEsaSx7Z2V0KCl7cmV0dXJuIHModGhpcyl9fSl9fXZhciBYY2U9YigoKT0+e3NsKCk7fSk7ZnVuY3Rpb24gWkEodCl7cmV0dXJuKGUsYSk9PmZpKGUsYSx7Z2V0KCl7cmV0dXJuKHRoaXMucmVuZGVyUm9vdD8/KGpCdD8/PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkpLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSl9dmFyIGpCdCxLY2U9YigoKT0+e3NsKCk7fSk7ZnVuY3Rpb24gWEEodCl7cmV0dXJuKGUsYSk9PmZpKGUsYSx7YXN5bmMgZ2V0KCl7cmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKHQpPz9udWxsfX0pfXZhciBRY2U9YigoKT0+e3NsKCk7fSk7ZnVuY3Rpb24gVUJ0KHQpe3JldHVybihlLGEpPT57bGV0e3Nsb3Q6aSxzZWxlY3RvcjpyfT10Pz97fSxzPSJzbG90IisoaT9gW25hbWU9JHtpfV1gOiI6bm90KFtuYW1lXSkiKTtyZXR1cm4gZmkoZSxhLHtnZXQoKXtsZXQgbj10aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3Iocyksbz1uPy5hc3NpZ25lZEVsZW1lbnRzKHQpPz9bXTtyZXR1cm4gcj09PXZvaWQgMD9vOm8uZmlsdGVyKGQ9PmQubWF0Y2hlcyhyKSl9fSl9fXZhciBKY2U9YigoKT0+e3NsKCk7fSk7ZnVuY3Rpb24gV0J0KHQpe3JldHVybihlLGEpPT57bGV0e3Nsb3Q6aX09dD8/e30scj0ic2xvdCIrKGk/YFtuYW1lPSR7aX1dYDoiOm5vdChbbmFtZV0pIik7cmV0dXJuIGZpKGUsYSx7Z2V0KCl7cmV0dXJuIHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihyKT8uYXNzaWduZWROb2Rlcyh0KT8/W119fSl9fXZhciBlNmU9YigoKT0+e3NsKCk7fSk7dmFyIHQ2ZT1iKCgpPT57R0EoKTt2NygpO1ljZSgpO1pjZSgpO1hjZSgpO0tjZSgpO1FjZSgpO0pjZSgpO2U2ZSgpfSk7dmFyIGE2ZSx1Zix4ZSxpNmU9YigoKT0+e2pBKCk7YTZlPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sdWY9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LHhlPSgoKT0+e2xldCB0PXRvLkxpdEVsZW1lbnQsZSxhPVtdLGk9W10scixzPVtdLG49W107cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtzdGF0aWN7bGV0IGQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUodFtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7ZT1bdG8ucHJvcGVydHkoe3R5cGU6Qm9vbGVhbn0pXSxyPVt0by5wcm9wZXJ0eSgpXSxhNmUodGhpcyxudWxsLGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJnb0JyaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Yz0+ImdvQnJpZ2h0ImluIGMsZ2V0OmM9PmMuZ29CcmlnaHQsc2V0OihjLHApPT57Yy5nb0JyaWdodD1wfX0sbWV0YWRhdGE6ZH0sYSxpKSxhNmUodGhpcyxudWxsLHIse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkb210b29scyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Yz0+ImRvbXRvb2xzImluIGMsZ2V0OmM9PmMuZG9tdG9vbHMsc2V0OihjLHApPT57Yy5kb210b29scz1wfX0sbWV0YWRhdGE6ZH0scyxuKSxkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmR9KX0jZT11Zih0aGlzLGEsITEpO2dldCBnb0JyaWdodCgpe3JldHVybiB0aGlzLiNlfXNldCBnb0JyaWdodChkKXt0aGlzLiNlPWR9ZG9tdG9vbHNQcm9taXNlPXVmKHRoaXMsaSk7I3Q9dWYodGhpcyxzLHZvaWQgMCk7Z2V0IGRvbXRvb2xzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGRvbXRvb2xzKGQpe3RoaXMuI3Q9ZH1yeFN1YnNjcmlwdGlvbnM9KHVmKHRoaXMsbiksW10pO3RoZW1lU3Vic2NyaXB0aW9uO2VsZW1lbnREb21SZWFkeURlZmVycmVkPXJ0LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7ZWxlbWVudERvbVJlYWR5PXRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucHJvbWlzZTtjb25zdHJ1Y3RvcihkPXt9KXtzdXBlcigpLHRoaXMuZG9tdG9vbHNQcm9taXNlPXJ0LmVsZW1lbnRCYXNpYy5zZXR1cCh0aGlzLGQpLHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYz0+e3RoaXMuZG9tdG9vbHM9Y30pfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtsZXQgZD1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLnRoZW1lU3Vic2NyaXB0aW9uPWQudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoYz0+e3RoaXMuZ29CcmlnaHQ9Yyx0aGlzLnRoZW1lQ2hhbmdlZCYmdGhpcy50aGVtZUNoYW5nZWQoYyl9KSx0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pO2ZvcihsZXQgYyBvZiB0aGlzLnN0YXJ0dXBGdW5jdGlvbnMpYXdhaXQgYygpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50Q29ubmVjdGVkIikpfWZpcnN0VXBkYXRlZChkKXtzdXBlci5maXJzdFVwZGF0ZWQoZCksdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCl9c3RhcnR1cEZ1bmN0aW9ucz1bXTtyZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihkKXt0aGlzLnN0YXJ0dXBGdW5jdGlvbnMucHVzaChkKX1nYXJiYWdlRnVuY3Rpb25zPVtdO3JlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGQpe3RoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGQpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2Usc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtmb3IobGV0IGQgb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpZC51bnN1YnNjcmliZSgpO2ZvcihsZXQgZCBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpYXdhaXQgZCgpO3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50RGlzY29ubmVjdGVkIikpfX19KSgpfSk7dmFyIEdCdCxyNmUsS0EsWUJ0LFpCdCxYQnQsS0J0LFFCdCxRQSxzNmUsJHMscWksSkJ0LHk1LEpBLHg1LGVELG5sPWIoKCk9PntBaSgpOyh7STpHQnR9PUJ3KSxyNmU9dD0+dCxLQT10PT50PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIixZQnQ9e0hUTUw6MSxTVkc6MixNQVRITUw6M30sWkJ0PSh0LGUpPT5lPT09dm9pZCAwP3Q/Ll8kbGl0VHlwZSQhPT12b2lkIDA6dD8uXyRsaXRUeXBlJD09PWUsWEJ0PXQ9PnQ/Ll8kbGl0VHlwZSQ/LmghPW51bGwsS0J0PXQ9PnQ/Ll8kbGl0RGlyZWN0aXZlJCE9PXZvaWQgMCxRQnQ9dD0+dD8uXyRsaXREaXJlY3RpdmUkLFFBPXQ9PnQuc3RyaW5ncz09PXZvaWQgMCxzNmU9KCk9PmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLCRzPSh0LGUsYSk9PntsZXQgaT10Ll8kQUEucGFyZW50Tm9kZSxyPWU9PT12b2lkIDA/dC5fJEFCOmUuXyRBQTtpZihhPT09dm9pZCAwKXtsZXQgcz1pLmluc2VydEJlZm9yZShzNmUoKSxyKSxuPWkuaW5zZXJ0QmVmb3JlKHM2ZSgpLHIpO2E9bmV3IEdCdChzLG4sdCx0Lm9wdGlvbnMpfWVsc2V7bGV0IHM9YS5fJEFCLm5leHRTaWJsaW5nLG49YS5fJEFNLG89biE9PXQ7aWYobyl7bGV0IGQ7YS5fJEFRPy4odCksYS5fJEFNPXQsYS5fJEFQIT09dm9pZCAwJiYoZD10Ll8kQVUpIT09bi5fJEFVJiZhLl8kQVAoZCl9aWYocyE9PXJ8fG8pe2xldCBkPWEuXyRBQTtmb3IoO2QhPT1zOyl7bGV0IGM9cjZlKGQpLm5leHRTaWJsaW5nO3I2ZShpKS5pbnNlcnRCZWZvcmUoZCxyKSxkPWN9fX1yZXR1cm4gYX0scWk9KHQsZSxhPXQpPT4odC5fJEFJKGUsYSksdCksSkJ0PXt9LHk1PSh0LGU9SkJ0KT0+dC5fJEFIPWUsSkE9dD0+dC5fJEFILHg1PXQ9Pnt0Ll8kQVIoKSx0Ll8kQUEucmVtb3ZlKCl9LGVEPXQ9Pnt0Ll8kQVIoKX19KTtmdW5jdGlvbiBlSHQodCl7dGhpcy5fJEFOIT09dm9pZCAwPyhmZih0aGlzKSx0aGlzLl8kQU09dCxuNmUodGhpcykpOnRoaXMuXyRBTT10fWZ1bmN0aW9uIHRIdCh0LGU9ITEsYT0wKXtsZXQgaT10aGlzLl8kQUgscj10aGlzLl8kQU47aWYociE9PXZvaWQgMCYmci5zaXplIT09MClpZihlKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBzPWE7czxpLmxlbmd0aDtzKyspdzUoaVtzXSwhMSksZmYoaVtzXSk7ZWxzZSBpIT1udWxsJiYodzUoaSwhMSksZmYoaSkpO2Vsc2UgdzUodGhpcyx0KX12YXIgdzUsZmYsbjZlLGFIdCxWYSxtZj1iKCgpPT57bmwoKTtMcygpO0xzKCk7dzU9KHQsZSk9PntsZXQgYT10Ll8kQU47aWYoYT09PXZvaWQgMClyZXR1cm4hMTtmb3IobGV0IGkgb2YgYSlpLl8kQU8/LihlLCExKSx3NShpLGUpO3JldHVybiEwfSxmZj10PT57bGV0IGUsYTtkb3tpZigoZT10Ll8kQU0pPT09dm9pZCAwKWJyZWFrO2E9ZS5fJEFOLGEuZGVsZXRlKHQpLHQ9ZX13aGlsZShhPy5zaXplPT09MCl9LG42ZT10PT57Zm9yKGxldCBlO2U9dC5fJEFNO3Q9ZSl7bGV0IGE9ZS5fJEFOO2lmKGE9PT12b2lkIDApZS5fJEFOPWE9bmV3IFNldDtlbHNlIGlmKGEuaGFzKHQpKWJyZWFrO2EuYWRkKHQpLGFIdChlKX19O2FIdD10PT57dC50eXBlPT1qci5DSElMRCYmKHQuXyRBUD8/PXRIdCx0Ll8kQVE/Pz1lSHQpfSxWYT1jbGFzcyBleHRlbmRzIHVpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl8kQU49dm9pZCAwfV8kQVQoZSxhLGkpe3N1cGVyLl8kQVQoZSxhLGkpLG42ZSh0aGlzKSx0aGlzLmlzQ29ubmVjdGVkPWUuXyRBVX1fJEFPKGUsYT0hMCl7ZSE9PXRoaXMuaXNDb25uZWN0ZWQmJih0aGlzLmlzQ29ubmVjdGVkPWUsZT90aGlzLnJlY29ubmVjdGVkPy4oKTp0aGlzLmRpc2Nvbm5lY3RlZD8uKCkpLGEmJih3NSh0aGlzLGUpLGZmKHRoaXMpKX1zZXRWYWx1ZShlKXtpZihRQSh0aGlzLl8kQ3QpKXRoaXMuXyRDdC5fJEFJKGUsdGhpcyk7ZWxzZXtsZXQgYT1bLi4udGhpcy5fJEN0Ll8kQUhdO2FbdGhpcy5fJENpXT1lLHRoaXMuXyRDdC5fJEFJKGEsdGhpcywwKX19ZGlzY29ubmVjdGVkKCl7fXJlY29ubmVjdGVkKCl7fX19KTt2YXIgZ2Y9YigoKT0+e21mKCl9KTt2YXIgdEQsbzZlLGlIdCxsNmU9YigoKT0+e2ZyKCk7Z2YoKTt0RD1jbGFzcyBleHRlbmRzIFZhe3Byb21pc2U7aGFzUHJvbWlzZVNldHRsZWQ9ITE7cmVuZGVyKGUpe3JldHVybiB0aGlzLnByb21pc2UhPT1lJiYodGhpcy5wcm9taXNlPWUsdGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5oYW5kbGVQcm9taXNlKGUpKSxnMX1oYW5kbGVQcm9taXNlKGUpe3RoaXMuaGFzUHJvbWlzZVNldHRsZWQ9ITEsZS50aGVuKGE9Pnt0aGlzLnByb21pc2U9PT1lJiYhdGhpcy5oYXNQcm9taXNlU2V0dGxlZCYmKHRoaXMuc2V0VmFsdWUoYSksdGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMCl9KS5jYXRjaChhPT57dGhpcy5wcm9taXNlPT09ZSYmIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQmJih0aGlzLnNldFZhbHVlKGEpLHRoaXMuaGFzUHJvbWlzZVNldHRsZWQ9ITApfSl9ZGlzY29ubmVjdGVkKCl7dGhpcy5oYXNQcm9taXNlU2V0dGxlZD0hMH1yZWNvbm5lY3RlZCgpe3RoaXMuaGFzUHJvbWlzZVNldHRsZWR8fHRoaXMuaGFuZGxlUHJvbWlzZSh0aGlzLnByb21pc2UpfX0sbzZlPVgxKHREKSxpSHQ9dD0+bzZlKHQoKSl9KTt2YXIgYUQsckh0LGM2ZT1iKCgpPT57ZnIoKTtnZigpO0lpKCk7YUQ9Y2xhc3MgZXh0ZW5kcyBWYXtvYnNlcnZhYmxlO3N1Yj1udWxsO3JlbmRlcihlKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlIT09ZSYmKHRoaXMuc3ViPy51bnN1YnNjcmliZSgpLHRoaXMub2JzZXJ2YWJsZT1lLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuc3Vic2NyaWJlKGUpKSxnMX1zdWJzY3JpYmUoZSl7dGhpcy5zdWI9ZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2V0VmFsdWUoYSl9KX1kaXNjb25uZWN0ZWQoKXt0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKX1yZWNvbm5lY3RlZCgpe3RoaXMuc3Vic2NyaWJlKHRoaXMub2JzZXJ2YWJsZSl9fSxySHQ9WDEoYUQpfSk7dmFyIGlELGQ2ZSxwNmU9YigoKT0+e2ZyKCk7Z2YoKTtJaSgpO2lEPWNsYXNzIGV4dGVuZHMgVmF7b2JzZXJ2YWJsZTt0ZW1wbGF0ZUZuO3N1Yj1udWxsO3JlbmRlcihlLGEpe3JldHVybih0aGlzLm9ic2VydmFibGUhPT1lfHx0aGlzLnRlbXBsYXRlRm4hPT1hKSYmKHRoaXMuc3ViPy51bnN1YnNjcmliZSgpLHRoaXMub2JzZXJ2YWJsZT1lLHRoaXMudGVtcGxhdGVGbj1hLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuc3RhcnRTdWJzY3JpcHRpb24oKSksZzF9c3RhcnRTdWJzY3JpcHRpb24oKXt0aGlzLnN1Yj10aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKGU9PntsZXQgYT10aGlzLnRlbXBsYXRlRm4oZSk7dGhpcy5zZXRWYWx1ZShhKX0pfWRpc2Nvbm5lY3RlZCgpe3RoaXMuc3ViPy51bnN1YnNjcmliZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5zdGFydFN1YnNjcmlwdGlvbigpfX0sZDZlPVgxKGlEKX0pO3ZhciByRCxSMCxCMCxzRD1iKCgpPT57ckQ9YXN5bmModCxlKT0+e2ZvciBhd2FpdChsZXQgYSBvZiB0KWlmKGF3YWl0IGUoYSk9PT0hMSlyZXR1cm59LFIwPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuRz1lfWRpc2Nvbm5lY3QoKXt0aGlzLkc9dm9pZCAwfXJlY29ubmVjdChlKXt0aGlzLkc9ZX1kZXJlZigpe3JldHVybiB0aGlzLkd9fSxCMD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuWT12b2lkIDAsdGhpcy5aPXZvaWQgMH1nZXQoKXtyZXR1cm4gdGhpcy5ZfXBhdXNlKCl7dGhpcy5ZPz89bmV3IFByb21pc2UoZT0+dGhpcy5aPWUpfXJlc3VtZSgpe3RoaXMuWj8uKCksdGhpcy5ZPXRoaXMuWj12b2lkIDB9fX0pO3ZhciBoNmUsdTZlLGJmLG5ELGY2ZT1iKCgpPT57QWkoKTtubCgpO21mKCk7c0QoKTtMcygpO2g2ZT10PT4hS0EodCkmJnR5cGVvZiB0LnRoZW49PSJmdW5jdGlvbiIsdTZlPTEwNzM3NDE4MjMsYmY9Y2xhc3MgZXh0ZW5kcyBWYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fJEN3dD11NmUsdGhpcy5fJENidD1bXSx0aGlzLl8kQ0s9bmV3IFIwKHRoaXMpLHRoaXMuXyRDWD1uZXcgQjB9cmVuZGVyKC4uLmUpe3JldHVybiBlLmZpbmQoYT0+IWg2ZShhKSk/P2cxfXVwZGF0ZShlLGEpe2xldCBpPXRoaXMuXyRDYnQscj1pLmxlbmd0aDt0aGlzLl8kQ2J0PWE7bGV0IHM9dGhpcy5fJENLLG49dGhpcy5fJENYO3RoaXMuaXNDb25uZWN0ZWR8fHRoaXMuZGlzY29ubmVjdGVkKCk7Zm9yKGxldCBvPTA7bzxhLmxlbmd0aCYmIShvPnRoaXMuXyRDd3QpO28rKyl7bGV0IGQ9YVtvXTtpZighaDZlKGQpKXJldHVybiB0aGlzLl8kQ3d0PW8sZDtvPHImJmQ9PT1pW29dfHwodGhpcy5fJEN3dD11NmUscj0wLFByb21pc2UucmVzb2x2ZShkKS50aGVuKGFzeW5jIGM9Pntmb3IoO24uZ2V0KCk7KWF3YWl0IG4uZ2V0KCk7bGV0IHA9cy5kZXJlZigpO2lmKHAhPT12b2lkIDApe2xldCBsPXAuXyRDYnQuaW5kZXhPZihkKTtsPi0xJiZsPHAuXyRDd3QmJihwLl8kQ3d0PWwscC5zZXRWYWx1ZShjKSl9fSkpfXJldHVybiBnMX1kaXNjb25uZWN0ZWQoKXt0aGlzLl8kQ0suZGlzY29ubmVjdCgpLHRoaXMuXyRDWC5wYXVzZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSx0aGlzLl8kQ1gucmVzdW1lKCl9fSxuRD1YMShiZil9KTt2YXIgbTZlPWIoKCk9PntmNmUoKX0pO3ZhciBvbCxzSHQsZzZlPWIoKCk9PntBaSgpO21mKCk7c0QoKTtMcygpO29sPWNsYXNzIGV4dGVuZHMgVmF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuXyRDSz1uZXcgUjAodGhpcyksdGhpcy5fJENYPW5ldyBCMH1yZW5kZXIoZSxhKXtyZXR1cm4gZzF9dXBkYXRlKGUsW2EsaV0pe2lmKHRoaXMuaXNDb25uZWN0ZWR8fHRoaXMuZGlzY29ubmVjdGVkKCksYT09PXRoaXMuXyRDSilyZXR1cm4gZzE7dGhpcy5fJENKPWE7bGV0IHI9MCx7XyRDSzpzLF8kQ1g6bn09dGhpcztyZXR1cm4gckQoYSxhc3luYyBvPT57Zm9yKDtuLmdldCgpOylhd2FpdCBuLmdldCgpO2xldCBkPXMuZGVyZWYoKTtpZihkIT09dm9pZCAwKXtpZihkLl8kQ0ohPT1hKXJldHVybiExO2khPT12b2lkIDAmJihvPWkobyxyKSksZC5jb21taXRWYWx1ZShvLHIpLHIrK31yZXR1cm4hMH0pLGcxfWNvbW1pdFZhbHVlKGUsYSl7dGhpcy5zZXRWYWx1ZShlKX1kaXNjb25uZWN0ZWQoKXt0aGlzLl8kQ0suZGlzY29ubmVjdCgpLHRoaXMuXyRDWC5wYXVzZSgpfXJlY29ubmVjdGVkKCl7dGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSx0aGlzLl8kQ1gucmVzdW1lKCl9fSxzSHQ9WDEob2wpfSk7dmFyIG9ELGI2ZT1iKCgpPT57THMoKTtnNmUoKTtubCgpO29EPVgxKGNsYXNzIGV4dGVuZHMgb2x7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIodCksdC50eXBlIT09anIuQ0hJTEQpdGhyb3cgRXJyb3IoImFzeW5jQXBwZW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgZXhwcmVzc2lvbnMiKX11cGRhdGUodCxlKXtyZXR1cm4gdGhpcy5fJEN0dD10LHN1cGVyLnVwZGF0ZSh0LGUpfWNvbW1pdFZhbHVlKHQsZSl7ZT09PTAmJmVEKHRoaXMuXyRDdHQpO2xldCBhPSRzKHRoaXMuXyRDdHQpO3FpKGEsdCl9fSl9KTt2YXIgdjZlPWIoKCk9PntiNmUoKX0pO3ZhciBsRCx5NmU9YigoKT0+e0FpKCk7THMoKTtubCgpO2xEPVgxKGNsYXNzIGV4dGVuZHMgdWl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMua2V5PVMxfXJlbmRlcih0LGUpe3JldHVybiB0aGlzLmtleT10LGV9dXBkYXRlKHQsW2UsYV0pe3JldHVybiBlIT09dGhpcy5rZXkmJih5NSh0KSx0aGlzLmtleT1lKSxhfX0pfSk7dmFyIHg2ZT1iKCgpPT57eTZlKCl9KTt2YXIgdzZlLGNELE02ZT1iKCgpPT57QWkoKTtMcygpO25sKCk7dzZlPSh0LGUsYSk9PntsZXQgaT1uZXcgTWFwO2ZvcihsZXQgcj1lO3I8PWE7cisrKWkuc2V0KHRbcl0scik7cmV0dXJuIGl9LGNEPVgxKGNsYXNzIGV4dGVuZHMgdWl7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIodCksdC50eXBlIT09anIuQ0hJTEQpdGhyb3cgRXJyb3IoInJlcGVhdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGV4dCBleHByZXNzaW9ucyIpfWR0KHQsZSxhKXtsZXQgaTthPT09dm9pZCAwP2E9ZTplIT09dm9pZCAwJiYoaT1lKTtsZXQgcj1bXSxzPVtdLG49MDtmb3IobGV0IG8gb2YgdClyW25dPWk/aShvLG4pOm4sc1tuXT1hKG8sbiksbisrO3JldHVybnt2YWx1ZXM6cyxrZXlzOnJ9fXJlbmRlcih0LGUsYSl7cmV0dXJuIHRoaXMuZHQodCxlLGEpLnZhbHVlc311cGRhdGUodCxbZSxhLGldKXtsZXQgcj1KQSh0KSx7dmFsdWVzOnMsa2V5czpufT10aGlzLmR0KGUsYSxpKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gdGhpcy51dD1uLHM7bGV0IG89dGhpcy51dD8/PVtdLGQ9W10sYyxwLGw9MCxmPXIubGVuZ3RoLTEsZz0wLHk9cy5sZW5ndGgtMTtmb3IoO2w8PWYmJmc8PXk7KWlmKHJbbF09PT1udWxsKWwrKztlbHNlIGlmKHJbZl09PT1udWxsKWYtLTtlbHNlIGlmKG9bbF09PT1uW2ddKWRbZ109cWkocltsXSxzW2ddKSxsKyssZysrO2Vsc2UgaWYob1tmXT09PW5beV0pZFt5XT1xaShyW2ZdLHNbeV0pLGYtLSx5LS07ZWxzZSBpZihvW2xdPT09blt5XSlkW3ldPXFpKHJbbF0sc1t5XSksJHModCxkW3krMV0scltsXSksbCsrLHktLTtlbHNlIGlmKG9bZl09PT1uW2ddKWRbZ109cWkocltmXSxzW2ddKSwkcyh0LHJbbF0scltmXSksZi0tLGcrKztlbHNlIGlmKGM9PT12b2lkIDAmJihjPXc2ZShuLGcseSkscD13NmUobyxsLGYpKSxjLmhhcyhvW2xdKSlpZihjLmhhcyhvW2ZdKSl7bGV0IHY9cC5nZXQobltnXSksbT12IT09dm9pZCAwP3Jbdl06bnVsbDtpZihtPT09bnVsbCl7bGV0IHg9JHModCxyW2xdKTtxaSh4LHNbZ10pLGRbZ109eH1lbHNlIGRbZ109cWkobSxzW2ddKSwkcyh0LHJbbF0sbSksclt2XT1udWxsO2crK31lbHNlIHg1KHJbZl0pLGYtLTtlbHNlIHg1KHJbbF0pLGwrKztmb3IoO2c8PXk7KXtsZXQgdj0kcyh0LGRbeSsxXSk7cWkodixzW2ddKSxkW2crK109dn1mb3IoO2w8PWY7KXtsZXQgdj1yW2wrK107diE9PW51bGwmJng1KHYpfXJldHVybiB0aGlzLnV0PW4seTUodCxkKSxnMX19KX0pO3ZhciB6NmU9YigoKT0+e002ZSgpfSk7dmFyIGphPXt9O1dlKGphLHthc3luY0FwcGVuZDooKT0+b0Qsa2V5ZWQ6KCk9PmxELHJlcGVhdDooKT0+Y0QscmVzb2x2ZTooKT0+bzZlLHJlc29sdmVFeGVjOigpPT5pSHQsc3Vic2NyaWJlOigpPT5ySHQsc3Vic2NyaWJlV2l0aFRlbXBsYXRlOigpPT5kNmUsdW50aWw6KCk9Pm5EfSk7dmFyIGs2ZT1iKCgpPT57bDZlKCk7YzZlKCk7cDZlKCk7bTZlKCk7djZlKCk7eDZlKCk7ejZlKCl9KTt2YXIgTTU9e307V2UoTTUse0RlZXNFbGVtZW50OigpPT54ZSxjc3M6KCk9PlEsY3NzTWFuYWdlcjooKT0+aCxjdXN0b21FbGVtZW50OigpPT5wZSxkaXJlY3RpdmVzOigpPT5qYSxkb210b29sczooKT0+cnQsaHRtbDooKT0+dyxwcm9wZXJ0eTooKT0+SSxxdWVyeTooKT0+WUEscXVlcnlBbGw6KCk9PlpBLHF1ZXJ5QXN5bmM6KCk9PlhBLHJlbmRlcjooKT0+bG4sc3RhdGU6KCk9Pkssc3RhdGljOigpPT5Ucyx1bnNhZmVDU1M6KCk9PnF0LHVuc2FmZUhUTUw6KCk9PnY1LHVuc2FmZVN0YXRpYzooKT0+V0F9KTt2YXIgaCx1ZT1iKCgpPT57SGNlKCk7ZnIoKTtqY2UoKTtXY2UoKTtHY2UoKTt0NmUoKTtMdCgpO2k2ZSgpO2s2ZSgpO2g9cGYuZ2V0U2luZ2xldG9uKCl9KTtmdW5jdGlvbiBuSHQodCxlKXtsZXQgYT1yMlt0XTtyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiJiZlP2FbZV18fCJhdXRvIjp0eXBlb2YgYT09Im51bWJlciI/YToiYXV0byJ9dmFyIHIyLG9IdCx2ZixoMSxtaT1iKCgpPT57cjI9e2Jhc2U6e2NvbnRlbnQ6ImF1dG8iLGlucHV0RWxlbWVudHM6MX0sZml4ZWQ6e2FwcEJhcjoxMCxzaWRlTWVudToxMCxtb2JpbGVOYXY6MjUwfSxiYWNrZHJvcDp7ZHJvcGRvd246MTk5OSxtb2RhbDoyOTk5LGNvbnRleHRNZW51OjM5OTl9LG92ZXJsYXk6e2Ryb3Bkb3duOjJlMyxtb2RhbDozZTMsY29udGV4dE1lbnU6NGUzLHRvYXN0OjVlM30sbW9kYWxEcm9wZG93bjozNTAwLHd5c2l3eWdNZW51czo0NTAwfTtvSHQ9eyJkZWVzLW1vZGFsIjpyMi5vdmVybGF5Lm1vZGFsLCJkZWVzLXdpbmRvd2xheWVyIjpyMi5vdmVybGF5LmRyb3Bkb3duLCJkZWVzLWNvbnRleHRtZW51IjpyMi5vdmVybGF5LmNvbnRleHRNZW51LCJkZWVzLXRvYXN0IjpyMi5vdmVybGF5LnRvYXN0LCJkZWVzLWFwcHVpLW1haW5tZW51IjpyMi5maXhlZC5hcHBCYXIsImRlZXMtbW9iaWxlbmF2aWdhdGlvbiI6cjIuZml4ZWQubW9iaWxlTmF2LCJkZWVzLXNsYXNoLW1lbnUiOnIyLnd5c2l3eWdNZW51cywiZGVlcy1mb3JtYXR0aW5nLW1lbnUiOnIyLnd5c2l3eWdNZW51c30sdmY9Y2xhc3MgdHtzdGF0aWMgaW5zdGFuY2U7YWN0aXZlRWxlbWVudHM9bmV3IFNldDtlbGVtZW50WkluZGV4TWFwPW5ldyBXZWFrTWFwO2N1cnJlbnRaSW5kZXg9MWUzO2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0Lmluc3RhbmNlfHwodC5pbnN0YW5jZT1uZXcgdCksdC5pbnN0YW5jZX1nZXROZXh0WkluZGV4KCl7cmV0dXJuIHRoaXMuY3VycmVudFpJbmRleCs9MTAsdGhpcy5jdXJyZW50WkluZGV4fXJlZ2lzdGVyKGUsYSl7dGhpcy5hY3RpdmVFbGVtZW50cy5hZGQoZSksdGhpcy5lbGVtZW50WkluZGV4TWFwLnNldChlLGEpfXVucmVnaXN0ZXIoZSl7dGhpcy5hY3RpdmVFbGVtZW50cy5kZWxldGUoZSksdGhpcy5lbGVtZW50WkluZGV4TWFwLmRlbGV0ZShlKSx0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemU9PT0wJiYodGhpcy5jdXJyZW50WkluZGV4PTFlMyl9Z2V0RWxlbWVudFpJbmRleChlKXtyZXR1cm4gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChlKX1nZXRBY3RpdmVDb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemV9Z2V0Q3VycmVudFpJbmRleCgpe3JldHVybiB0aGlzLmN1cnJlbnRaSW5kZXh9Y2xlYXIoKXt0aGlzLmFjdGl2ZUVsZW1lbnRzLmNsZWFyKCksdGhpcy5lbGVtZW50WkluZGV4TWFwPW5ldyBXZWFrTWFwLHRoaXMuY3VycmVudFpJbmRleD0xZTN9Z2V0QWN0aXZlRWxlbWVudHNJbk9yZGVyKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5hY3RpdmVFbGVtZW50cykuc29ydCgoZSxhKT0+e2xldCBpPXRoaXMuZWxlbWVudFpJbmRleE1hcC5nZXQoZSl8fDAscj10aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGEpfHwwO3JldHVybiBpLXJ9KX19LGgxPXZmLmdldEluc3RhbmNlKCl9KTt2YXIgYW8sQ2UsVmU9YigoKT0+e3VlKCk7YW89e2NvbG9yczp7bGlnaHQ6e2JnUHJpbWFyeToiI2ZmZmZmZiIsYmdTZWNvbmRhcnk6IiNmYWZhZmEiLGJnVGVydGlhcnk6IiNmNGY0ZjUiLHRleHRQcmltYXJ5OiIjMDkwOTBiIix0ZXh0U2Vjb25kYXJ5OiIjMzc0MTUxIix0ZXh0TXV0ZWQ6IiM3MTcxN2EiLGJvcmRlckRlZmF1bHQ6IiNlNWU3ZWIiLGJvcmRlclN1YnRsZToiI2Y0ZjRmNSIsYm9yZGVyU3Ryb25nOiIjZDFkNWRiIixhY2NlbnRQcmltYXJ5OiIjM2I4MmY2IixhY2NlbnRTdWNjZXNzOiIjMjJjNTVlIixhY2NlbnRXYXJuaW5nOiIjZjU5ZTBiIixhY2NlbnRFcnJvcjoiI2VmNDQ0NCJ9LGRhcms6e2JnUHJpbWFyeToiIzA5MDkwYiIsYmdTZWNvbmRhcnk6IiMwYTBhMGEiLGJnVGVydGlhcnk6IiMxODE4MWIiLHRleHRQcmltYXJ5OiIjZmFmYWZhIix0ZXh0U2Vjb25kYXJ5OiIjZDRkNGQ4Iix0ZXh0TXV0ZWQ6IiNhMWExYWEiLGJvcmRlckRlZmF1bHQ6IiMyNzI3MmEiLGJvcmRlclN1YnRsZToiIzFhMWExYSIsYm9yZGVyU3Ryb25nOiIjM2YzZjQ2IixhY2NlbnRQcmltYXJ5OiIjM2I4MmY2IixhY2NlbnRTdWNjZXNzOiIjMjJjNTVlIixhY2NlbnRXYXJuaW5nOiIjZjU5ZTBiIixhY2NlbnRFcnJvcjoiI2VmNDQ0NCJ9fSxzcGFjaW5nOnt4czoiNHB4IixzbToiOHB4IixtZDoiMTJweCIsbGc6IjE2cHgiLHhsOiIyNHB4IiwiMnhsIjoiMzJweCIsIjN4bCI6IjQ4cHgifSxyYWRpdXM6e3hzOiIycHgiLHNtOiI0cHgiLG1kOiI2cHgiLGxnOiI4cHgiLHhsOiIxMnB4IixmdWxsOiI5OTlweCJ9LHNoYWRvd3M6e3hzOiIwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KSIsc206IjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSkiLG1kOiIwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsbGc6IjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSJ9LHRyYW5zaXRpb25zOntmYXN0OiIwLjFzIixkZWZhdWx0OiIwLjE1cyIsc2xvdzoiMC4ycyIsc2xvd2VyOiIwLjNzIn0sY29udHJvbEhlaWdodHM6e3NtOiIzMnB4IixtZDoiMzZweCIsbGc6IjQwcHgiLHhsOiI0OHB4In19LENlPVFgCiAgOmhvc3QgewogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU3BhY2luZyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNwYWNpbmcteHM6IDRweDsKICAgIC0tZGVlcy1zcGFjaW5nLXNtOiA4cHg7CiAgICAtLWRlZXMtc3BhY2luZy1tZDogMTJweDsKICAgIC0tZGVlcy1zcGFjaW5nLWxnOiAxNnB4OwogICAgLS1kZWVzLXNwYWNpbmcteGw6IDI0cHg7CiAgICAtLWRlZXMtc3BhY2luZy0yeGw6IDMycHg7CiAgICAtLWRlZXMtc3BhY2luZy0zeGw6IDQ4cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogQm9yZGVyIFJhZGl1cyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXJhZGl1cy14czogMnB4OwogICAgLS1kZWVzLXJhZGl1cy1zbTogNHB4OwogICAgLS1kZWVzLXJhZGl1cy1tZDogNnB4OwogICAgLS1kZWVzLXJhZGl1cy1sZzogOHB4OwogICAgLS1kZWVzLXJhZGl1cy14bDogMTJweDsKICAgIC0tZGVlcy1yYWRpdXMtZnVsbDogOTk5cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU2hhZG93IEVsZXZhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNoYWRvdy14czogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7CiAgICAtLWRlZXMtc2hhZG93LXNtOiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgLS1kZWVzLXNoYWRvdy1tZDogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAtLWRlZXMtc2hhZG93LWxnOiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogVHJhbnNpdGlvbiBEdXJhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXRyYW5zaXRpb24tZmFzdDogMC4xczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLWRlZmF1bHQ6IDAuMTVzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvdzogMC4yczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjogMC4zczsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBDb250cm9sIEhlaWdodCBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtOiAzMnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LW1kOiAzNnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LWxnOiA0MHB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsOiA0OHB4OwogIH0KYH0pO3ZhciBTNmU9YigoKT0+e30pO3ZhciBkRD1iKCgpPT57VmkoKTtWaSgpfSk7dmFyIEM2ZT1iKCgpPT57fSk7dmFyIF82ZT1iKCgpPT57fSk7dmFyIFQ2ZT1iKCgpPT57fSk7dmFyIEw2ZT1iKCgpPT57fSk7dmFyIHBEPXt9O3ZhciBoRD1iKCgpPT57QzZlKCk7XzZlKCk7VDZlKCk7TDZlKCl9KTt2YXIgJDZlPWIoKCk9PntoRCgpO3lmKCl9KTt2YXIgQTZlPWIoKCk9PntWaSgpfSk7dmFyIEQ2ZT1iKCgpPT57fSk7dmFyIEU2ZT1iKCgpPT57VmkoKX0pO3ZhciBQNmU9YigoKT0+e1ZpKCl9KTt2YXIgSTZlPWIoKCk9Pnt9KTt2YXIgTjZlPWIoKCk9Pnt9KTt2YXIgRjZlPWIoKCk9Pnt9KTt2YXIgdUQ9e307dmFyIHhmPWIoKCk9PntBNmUoKTtENmUoKTtFNmUoKTtQNmUoKTtJNmUoKTtONmUoKTtGNmUoKX0pO3ZhciBPNmU9YigoKT0+e3hmKCk7ZEQoKX0pO3ZhciBSNmU9YigoKT0+e3lmKCk7eGYoKX0pO3ZhciBCNmU9YigoKT0+e30pO3ZhciBINmU9YigoKT0+e30pO3ZhciBmRD17fTt2YXIgeWY9YigoKT0+e1M2ZSgpO2REKCk7JDZlKCk7TzZlKCk7UjZlKCk7QjZlKCk7SDZlKCl9KTt2YXIgcTZlPWIoKCk9Pnt9KTt2YXIgVjZlPWIoKCk9Pnt9KTt2YXIgbUQ9e307dmFyIGo2ZT1iKCgpPT57cTZlKCk7VjZlKCl9KTt2YXIgVTZlPWIoKCk9Pnt9KTt2YXIgVzZlPWIoKCk9Pnt9KTt2YXIgZ0Q9e307dmFyIEc2ZT1iKCgpPT57VTZlKCk7VzZlKCl9KTt2YXIgYkQ9e307dmFyIFk2ZT1iKCgpPT57fSk7dmFyIHZEPWIoKCk9PntWaSgpfSk7dmFyIFo2ZT1iKCgpPT57VmkoKX0pO3ZhciBYNmU9YigoKT0+e3ZEKCl9KTt2YXIgeUQ9e307dmFyIEs2ZT1iKCgpPT57dkQoKTtaNmUoKTtYNmUoKX0pO3ZhciBRNmU9YigoKT0+e30pO3ZhciBKNmU9YigoKT0+e30pO3ZhciB4RD17fTt2YXIgZTVlPWIoKCk9PntRNmUoKTtKNmUoKX0pO3ZhciB3RD1iKCgpPT57fSk7dmFyIE1ELHQ1ZT1iKCgpPT57d0QoKTtNRD1jbGFzc3t9fSk7dmFyIGE1ZT1iKCgpPT57fSk7dmFyIGk1ZT1iKCgpPT57fSk7dmFyIHI1ZT1iKCgpPT57fSk7dmFyIHM1ZT1iKCgpPT57fSk7dmFyIG41ZT1iKCgpPT57fSk7dmFyIG81ZT1iKCgpPT57fSk7dmFyIGw1ZT1iKCgpPT57fSk7dmFyIGM1ZT1iKCgpPT57fSk7dmFyIGQ1ZT1iKCgpPT57fSk7dmFyIHA1ZT1iKCgpPT57fSk7dmFyIHdmPXt9O1dlKHdmLHtJQ25hbWVEZXNjcmlwdG9yOigpPT5NRH0pO3ZhciBoNWU9YigoKT0+e3dEKCk7dDVlKCk7YTVlKCk7aTVlKCk7cjVlKCk7czVlKCk7bjVlKCk7bzVlKCk7bDVlKCk7YzVlKCk7ZDVlKCk7cDVlKCl9KTt2YXIgekQ9YigoKT0+e30pO3ZhciB1NWU9YigoKT0+e3pEKCl9KTt2YXIga0Q9e307dmFyIGY1ZT1iKCgpPT57dTVlKCk7ekQoKX0pO3ZhciBTRD17fTt2YXIgbTVlPWIoKCk9Pnt9KTt2YXIgZzVlPWIoKCk9Pnt9KTt2YXIgYjVlPWIoKCk9Pnt9KTt2YXIgdjVlPWIoKCk9Pnt9KTt2YXIgQ0Q9e307dmFyIHk1ZT1iKCgpPT57ZzVlKCk7YjVlKCk7djVlKCl9KTt2YXIgeDVlPWIoKCk9Pnt9KTt2YXIgX0Q9e307V2UoX0Qse2J1c2luZXNzOigpPT5mRCxjb2RlOigpPT5tRCxjb250YWluZXI6KCk9PmdELGNvbnRlbnQ6KCk9PnlELGRhdGFiYXNlOigpPT5wRCxkZXNjcmlwdG9yczooKT0+YkQsZmluYW5jZTooKT0+dUQsZ2VuZXJhbDooKT0+eEQsbmV0d29yazooKT0+d2Ysc2FhczooKT0+a0Qsc3RvcmFnZTooKT0+U0Qsd2Vic2l0ZTooKT0+Q0R9KTt2YXIgVmk9YigoKT0+e3lmKCk7ajZlKCk7RzZlKCk7aEQoKTtZNmUoKTt4ZigpO0s2ZSgpO2U1ZSgpO2g1ZSgpO2Y1ZSgpO201ZSgpO3k1ZSgpO3g1ZSgpfSk7dmFyIHMyPWIoKCk9PntkMigpO1ZpKCl9KTt2YXIgdzVlLE01ZT1iKCgpPT57dWUoKTtzMigpO24yKCk7dzVlPSgpPT53YAo8c3R5bGU+CiAgLndpdGhNYXJnaW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDIwcHg7CiAgfQogIC5kZW1vLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMjBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICB9CiAgLmRlbW8tYXJlYSB7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgfQogIC5kZW1vLWFyZWE6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKICB9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJCYXNpYyBDb250ZXh0IE1lbnUgd2l0aCBOZXN0ZWQgU3VibWVudXMiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHt0PT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModCxbe25hbWU6IkZpbGUiLGljb25OYW1lOiJmaWxlVGV4dCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXciLGljb25OYW1lOiJmaWxlUGx1cyIsc2hvcnRjdXQ6IkNtZCtOIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk5ldyBmaWxlIil9LHtuYW1lOiJPcGVuIixpY29uTmFtZToiZm9sZGVyT3BlbiIsc2hvcnRjdXQ6IkNtZCtPIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gZmlsZSIpfSx7bmFtZToiU2F2ZSIsaWNvbk5hbWU6InNhdmUiLHNob3J0Y3V0OiJDbWQrUyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTYXZlIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXhwb3J0IGFzIFBERiIsaWNvbk5hbWU6ImRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkV4cG9ydCBQREYiKX0se25hbWU6IkV4cG9ydCBhcyBIVE1MIixpY29uTmFtZToiY29kZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJFeHBvcnQgSFRNTCIpfV19LHtuYW1lOiJFZGl0IixpY29uTmFtZToiZWRpdDMiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiQ3V0IixpY29uTmFtZToic2Npc3NvcnMiLHNob3J0Y3V0OiJDbWQrWCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDdXQiKX0se25hbWU6IkNvcHkiLGljb25OYW1lOiJjb3B5IixzaG9ydGN1dDoiQ21kK0MiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ29weSIpfSx7bmFtZToiUGFzdGUiLGljb25OYW1lOiJjbGlwYm9hcmQiLHNob3J0Y3V0OiJDbWQrViIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJQYXN0ZSIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkZpbmQiLGljb25OYW1lOiJzZWFyY2giLHNob3J0Y3V0OiJDbWQrRiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJGaW5kIil9LHtuYW1lOiJSZXBsYWNlIixpY29uTmFtZToicmVwZWF0IixzaG9ydGN1dDoiQ21kK0giLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVwbGFjZSIpfV19LHtuYW1lOiJWaWV3IixpY29uTmFtZToiZXllIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6Ilpvb20gSW4iLGljb25OYW1lOiJ6b29tSW4iLHNob3J0Y3V0OiJDbWQrKyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIGluIil9LHtuYW1lOiJab29tIE91dCIsaWNvbk5hbWU6Inpvb21PdXQiLHNob3J0Y3V0OiJDbWQrLSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIG91dCIpfSx7bmFtZToiUmVzZXQgWm9vbSIsaWNvbk5hbWU6Im1heGltaXplMiIsc2hvcnRjdXQ6IkNtZCswIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlc2V0IHpvb20iKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJGdWxsIFNjcmVlbiIsaWNvbk5hbWU6Im1heGltaXplIixzaG9ydGN1dDoiRjExIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkZ1bGwgc2NyZWVuIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTZXR0aW5ncyIsaWNvbk5hbWU6InNldHRpbmdzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNldHRpbmdzIil9LHtuYW1lOiJIZWxwIixpY29uTmFtZToiaGVscENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJEb2N1bWVudGF0aW9uIixpY29uTmFtZToiYm9vayIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJEb2N1bWVudGF0aW9uIil9LHtuYW1lOiJLZXlib2FyZCBTaG9ydGN1dHMiLGljb25OYW1lOiJrZXlib2FyZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJBYm91dCIsaWNvbk5hbWU6ImluZm8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQWJvdXQiKX1dfV0pfX0+CiAgICAgIDxoMz5SaWdodC1jbGljayBhbnl3aGVyZSBpbiB0aGlzIGFyZWE8L2gzPgogICAgICA8cD5BIGNvbnRleHQgbWVudSB3aXRoIG5lc3RlZCBzdWJtZW51cyB3aWxsIGFwcGVhcjwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJDb21wb25lbnQtU3BlY2lmaWMgQ29udGV4dCBNZW51Ij4KICAgIDxkZWVzLWJ1dHRvbiBzdHlsZT0ibWFyZ2luOiAyMHB4OyIgQGNvbnRleHRtZW51PSR7dD0+e1d0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKHQsW3tuYW1lOiJCdXR0b24gQWN0aW9ucyIsaWNvbk5hbWU6Im1vdXNlUG9pbnRlciIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJDbGljayIsaWNvbk5hbWU6Im1vdXNlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkNsaWNrIGFjdGlvbiIpfSx7bmFtZToiRG91YmxlIENsaWNrIixpY29uTmFtZToiemFwIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRvdWJsZSBjbGljayIpfSx7bmFtZToiTG9uZyBQcmVzcyIsaWNvbk5hbWU6ImNsb2NrIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkxvbmcgcHJlc3MiKX1dfSx7bmFtZToiQnV0dG9uIFN0YXRlIixpY29uTmFtZToidG9nZ2xlTGVmdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJFbmFibGUiLGljb25OYW1lOiJjaGVja0NpcmNsZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJFbmFibGUiKX0se25hbWU6IkRpc2FibGUiLGljb25OYW1lOiJ4Q2lyY2xlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRpc2FibGUiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTaG93IixpY29uTmFtZToiZXllIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNob3ciKX0se25hbWU6IkhpZGUiLGljb25OYW1lOiJleWVPZmYiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiSGlkZSIpfV19LHtkaXZpZGVyOiEwfSx7bmFtZToiRGlzYWJsZWQgQWN0aW9uIixpY29uTmFtZToiYmFuIixkaXNhYmxlZDohMCxhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRoaXMgc2hvdWxkIG5vdCBydW4iKX0se25hbWU6IlByb3BlcnRpZXMiLGljb25OYW1lOiJzZXR0aW5ncyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJCdXR0b24gcHJvcGVydGllcyIpfV0pfX0+UmlnaHQtY2xpY2sgb24gdGhpcyBidXR0b248L2RlZXMtYnV0dG9uPgogIDwvZGVlcy1wYW5lbD4KCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iQWR2YW5jZWQgQ29udGV4dCBNZW51IEV4YW1wbGUiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHt0PT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModCxbe25hbWU6IkZvcm1hdCIsaWNvbk5hbWU6InR5cGUiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiQm9sZCIsaWNvbk5hbWU6ImJvbGQiLHNob3J0Y3V0OiJDbWQrQiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJCb2xkIil9LHtuYW1lOiJJdGFsaWMiLGljb25OYW1lOiJpdGFsaWMiLHNob3J0Y3V0OiJDbWQrSSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJJdGFsaWMiKX0se25hbWU6IlVuZGVybGluZSIsaWNvbk5hbWU6InVuZGVybGluZSIsc2hvcnRjdXQ6IkNtZCtVIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlVuZGVybGluZSIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkZvbnQgU2l6ZSIsaWNvbk5hbWU6InR5cGUiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRm9udCBzaXplIG1lbnUiKX0se25hbWU6IkZvbnQgQ29sb3IiLGljb25OYW1lOiJwYWxldHRlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkZvbnQgY29sb3IgbWVudSIpfV19LHtuYW1lOiJUcmFuc2Zvcm0iLGljb25OYW1lOiJzaHVmZmxlIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlRvIFVwcGVyY2FzZSIsaWNvbk5hbWU6ImFycm93VXAiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiVXBwZXJjYXNlIil9LHtuYW1lOiJUbyBMb3dlcmNhc2UiLGljb25OYW1lOiJhcnJvd0Rvd24iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiTG93ZXJjYXNlIil9LHtuYW1lOiJDYXBpdGFsaXplIixpY29uTmFtZToidHlwZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDYXBpdGFsaXplIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJEZWxldGUiLGljb25OYW1lOiJ0cmFzaDIiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRGVsZXRlIil9XSl9fT4KICAgICAgPGgzPkFkdmFuY2VkIE5lc3RlZCBNZW51IEV4YW1wbGU8L2gzPgogICAgICA8cD5UaGlzIHNob3dzIGRlZXBseSBuZXN0ZWQgc3VibWVudXMgYW5kIHZhcmlvdXMgZm9ybWF0dGluZyBvcHRpb25zPC9wPgogICAgPC9kaXY+CiAgPC9kZWVzLXBhbmVsPgogIAogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IlN0YXRpYyBDb250ZXh0IE1lbnUgKEFsd2F5cyBWaXNpYmxlKSI+CiAgICA8ZGVlcy1jb250ZXh0bWVudQogICAgICBjbGFzcz0id2l0aE1hcmdpbiIKICAgICAgLm1lbnVJdGVtcz0ke1t7bmFtZToiUHJvamVjdCIsaWNvbk5hbWU6ImZvbGRlciIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXcgUHJvamVjdCIsaWNvbk5hbWU6ImZvbGRlclBsdXMiLHNob3J0Y3V0OiJDbWQrU2hpZnQrTiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJOZXcgcHJvamVjdCIpfSx7bmFtZToiT3BlbiBQcm9qZWN0IixpY29uTmFtZToiZm9sZGVyT3BlbiIsc2hvcnRjdXQ6IkNtZCtTaGlmdCtPIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcHJvamVjdCIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlJlY2VudCBQcm9qZWN0cyIsaWNvbk5hbWU6ImNsb2NrIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlByb2plY3QgQWxwaGEiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiT3BlbiBBbHBoYSIpfSx7bmFtZToiUHJvamVjdCBCZXRhIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gQmV0YSIpfSx7bmFtZToiUHJvamVjdCBHYW1tYSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIEdhbW1hIil9XX1dfSx7bmFtZToiVG9vbHMiLGljb25OYW1lOiJ0b29sIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlRlcm1pbmFsIixpY29uTmFtZToidGVybWluYWwiLHNob3J0Y3V0OiJDbWQrVCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJUZXJtaW5hbCIpfSx7bmFtZToiQ29uc29sZSIsaWNvbk5hbWU6Im1vbml0b3IiLHNob3J0Y3V0OiJDbWQrSyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDb25zb2xlIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXh0ZW5zaW9ucyIsaWNvbk5hbWU6InBhY2thZ2UiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRXh0ZW5zaW9ucyIpfV19LHtkaXZpZGVyOiEwfSx7bmFtZToiUHJlZmVyZW5jZXMiLGljb25OYW1lOiJzbGlkZXJzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlByZWZlcmVuY2VzIil9XX0KICAgID48L2RlZXMtY29udGV4dG1lbnU+CiAgPC9kZWVzLXBhbmVsPgo8L2Rpdj4KYH0pO3ZhciB6NSxBcyxnaSxEcz1iKCgpPT57dWUoKTttaSgpO3o1PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sQXM9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGdpPSgoKT0+e2xldCB0PVtwZSgiZGVlcy13aW5kb3dsYXllciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdO3ZhciB4PWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtLKCldLGQ9W0soKV0sbD1bSygpXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0sejUodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4ib3B0aW9ucyJpbiBTLGdldDpTPT5TLm9wdGlvbnMsc2V0OihTLEYpPT57Uy5vcHRpb25zPUZ9fSxtZXRhZGF0YTpNfSxuLG8pLHo1KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYmFja2Ryb3BaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJiYWNrZHJvcFpJbmRleCJpbiBTLGdldDpTPT5TLmJhY2tkcm9wWkluZGV4LHNldDooUyxGKT0+e1MuYmFja2Ryb3BaSW5kZXg9Rn19LG1ldGFkYXRhOk19LGMscCksejUodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50WkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iY29udGVudFpJbmRleCJpbiBTLGdldDpTPT5TLmNvbnRlbnRaSW5kZXgsc2V0OihTLEYpPT57Uy5jb250ZW50WkluZGV4PUZ9fSxtZXRhZGF0YTpNfSxmLGcpLHo1KHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InZpc2libGUiaW4gUyxnZXQ6Uz0+Uy52aXNpYmxlLHNldDooUyxGKT0+e1MudmlzaWJsZT1GfX0sbWV0YWRhdGE6TX0sdixtKSx6NShudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vPSgpPT53YDxkZWVzLXdpbmRvd2xheWVyPjwvZGVlcy13aW5kb3dsYXllcj5gO3N0YXRpYyBkZW1vR3JvdXBzPVsiT3ZlcmxheSJdO3N0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KE0pe2xldCBTPXJ0LkRvbVRvb2xzLmdldEdsb2JhbERvbVRvb2xzU3luYygpLEY9bmV3IHg7cmV0dXJuIEYub3B0aW9ucz17Li4uRi5vcHRpb25zLC4uLk19LGRvY3VtZW50LmJvZHkuYXBwZW5kKEYpLGF3YWl0IFMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKSxGLnNob3coKSxGfSNlPUFzKHRoaXMsbix7Ymx1cjohMX0pO2dldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuI2V9c2V0IG9wdGlvbnMoTSl7dGhpcy4jZT1NfSN0PShBcyh0aGlzLG8pLEFzKHRoaXMsYywxZTMpKTtnZXQgYmFja2Ryb3BaSW5kZXgoKXtyZXR1cm4gdGhpcy4jdH1zZXQgYmFja2Ryb3BaSW5kZXgoTSl7dGhpcy4jdD1NfSNhPShBcyh0aGlzLHApLEFzKHRoaXMsZiwxMDAxKSk7Z2V0IGNvbnRlbnRaSW5kZXgoKXtyZXR1cm4gdGhpcy4jYX1zZXQgY29udGVudFpJbmRleChNKXt0aGlzLiNhPU19I2k9KEFzKHRoaXMsZyksQXModGhpcyx2LCExKSk7Z2V0IHZpc2libGUoKXtyZXR1cm4gdGhpcy4jaX1zZXQgdmlzaWJsZShNKXt0aGlzLiNpPU19Y29uc3RydWN0b3IoKXtzdXBlcigpLEFzKHRoaXMsbSkscnQuZWxlbWVudEJhc2ljLnNldHVwKCl9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgICR7cnQuZWxlbWVudEJhc2ljLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIC53aW5kb3dPdmVybGF5IHsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogMHB4OwogICAgICAgICAgbGVmdDogMHB4OwogICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMCk7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJyaWdodG5lc3MoMSkgJHt0aGlzLm9wdGlvbnMuYmx1cj8iYmx1cigwcHgpIjoiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5iYWNrZHJvcFpJbmRleH07CiAgICAgICAgfQogICAgICAgIC5zbG90Q29udGVudCB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5jb250ZW50WkluZGV4fTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2xvdENvbnRlbnQgPiAqIHsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudmlzaWJsZSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJyaWdodG5lc3MoMC45KSAke3RoaXMub3B0aW9ucy5ibHVyPyJibHVyKDJweCkiOiIifTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuZGlzcGF0Y2hDbGlja2VkfSBjbGFzcz0id2luZG93T3ZlcmxheSAke3RoaXMudmlzaWJsZT8idmlzaWJsZSI6bnVsbH0iPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdENvbnRlbnQiPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgfWZpcnN0VXBkYXRlZCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnZpc2libGU9ITB9LDEwMCl9ZGlzcGF0Y2hDbGlja2VkKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2xpY2tlZCIpKX10b2dnbGVWaXNpYmlsaXR5KCl7dGhpcy52aXNpYmxlPSF0aGlzLnZpc2libGV9Z2V0Q29udGVudFpJbmRleCgpe3JldHVybiB0aGlzLmNvbnRlbnRaSW5kZXh9YXN5bmMgc2hvdygpe2xldCBNPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO3RoaXMuYmFja2Ryb3BaSW5kZXg9aDEuZ2V0TmV4dFpJbmRleCgpLHRoaXMuY29udGVudFpJbmRleD1oMS5nZXROZXh0WkluZGV4KCksaDEucmVnaXN0ZXIodGhpcyx0aGlzLmJhY2tkcm9wWkluZGV4KSxhd2FpdCBNLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksdGhpcy52aXNpYmxlPSEwfWFzeW5jIGhpZGUoKXthd2FpdChhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSkuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKSx0aGlzLnZpc2libGU9ITF9YXN5bmMgZGVzdHJveSgpe2xldCBNPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO2F3YWl0IHRoaXMuaGlkZSgpLGF3YWl0IE0uY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApLGgxLnVucmVnaXN0ZXIodGhpcyksdGhpcy5yZW1vdmUoKX1zdGF0aWN7QXMoaSxhKX19O3JldHVybiB4PWl9KSgpfSk7ZnVuY3Rpb24gVEQodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIGE9MCxpPUFycmF5KGUpO2E8ZTthKyspaVthXT10W2FdO3JldHVybiBpfWZ1bmN0aW9uIGNIdCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIGRIdCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBURCh0KX1mdW5jdGlvbiBwSHQodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiB6NWUodCxlKXtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGk9ZVthXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFM1ZShpLmtleSksaSl9fWZ1bmN0aW9uIGhIdCh0LGUsYSl7cmV0dXJuIGUmJno1ZSh0LnByb3RvdHlwZSxlKSxhJiZ6NWUodCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIE1mKHQsZSl7dmFyIGE9dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFhKXtpZihBcnJheS5pc0FycmF5KHQpfHwoYT1MRCh0KSl8fGUmJnQmJnR5cGVvZiB0Lmxlbmd0aD09Im51bWJlciIpe2EmJih0PWEpO3ZhciBpPTAscj1mdW5jdGlvbigpe307cmV0dXJue3M6cixuOmZ1bmN0aW9uKCl7cmV0dXJuIGk+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W2krK119fSxlOmZ1bmN0aW9uKGQpe3Rocm93IGR9LGY6cn19dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIHMsbj0hMCxvPSExO3JldHVybntzOmZ1bmN0aW9uKCl7YT1hLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgZD1hLm5leHQoKTtyZXR1cm4gbj1kLmRvbmUsZH0sZTpmdW5jdGlvbihkKXtvPSEwLHM9ZH0sZjpmdW5jdGlvbigpe3RyeXtufHxhLnJldHVybj09bnVsbHx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKG8pdGhyb3cgc319fX1mdW5jdGlvbiBndCh0LGUsYSl7cmV0dXJuKGU9UzVlKGUpKWluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09YSx0fWZ1bmN0aW9uIHVIdCh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iJiZlIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZ6Zih0LGUpfWZ1bmN0aW9uIGZIdCh0KXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHx0WyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gbUh0KHQsZSl7dmFyIGE9dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihhIT1udWxsKXt2YXIgaSxyLHMsbixvPVtdLGQ9ITAsYz0hMTt0cnl7aWYocz0oYT1hLmNhbGwodCkpLm5leHQsZT09PTApe2lmKE9iamVjdChhKSE9PWEpcmV0dXJuO2Q9ITF9ZWxzZSBmb3IoOyEoZD0oaT1zLmNhbGwoYSkpLmRvbmUpJiYoby5wdXNoKGkudmFsdWUpLG8ubGVuZ3RoIT09ZSk7ZD0hMCk7fWNhdGNoKHApe2M9ITAscj1wfWZpbmFsbHl7dHJ5e2lmKCFkJiZhLnJldHVybiE9bnVsbCYmKG49YS5yZXR1cm4oKSxPYmplY3QobikhPT1uKSlyZXR1cm59ZmluYWxseXtpZihjKXRocm93IHJ9fXJldHVybiBvfX1mdW5jdGlvbiBnSHQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gYkh0KCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBrNWUodCxlKXt2YXIgYT1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscikuZW51bWVyYWJsZX0pKSxhLnB1c2guYXBwbHkoYSxpKX1yZXR1cm4gYX1mdW5jdGlvbiBOZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgYT1hcmd1bWVudHNbZV0hPW51bGw/YXJndW1lbnRzW2VdOnt9O2UlMj9rNWUoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2d0KHQsaSxhW2ldKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOms1ZShPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oaSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsaSkpfSl9cmV0dXJuIHR9ZnVuY3Rpb24gemYodCxlKXtyZXR1cm4gemY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gYS5fX3Byb3RvX189aSxhfSx6Zih0LGUpfWZ1bmN0aW9uIGtmKHQsZSl7cmV0dXJuIGNIdCh0KXx8bUh0KHQsZSl8fExEKHQsZSl8fGdIdCgpfWZ1bmN0aW9uIGppKHQpe3JldHVybiBkSHQodCl8fGZIdCh0KXx8TEQodCl8fGJIdCgpfWZ1bmN0aW9uIHZIdCh0LGUpe2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8IXQpcmV0dXJuIHQ7dmFyIGE9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKGEhPT12b2lkIDApe3ZhciBpPWEuY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYodHlwZW9mIGkhPSJvYmplY3QiKXJldHVybiBpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKGU9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKSh0KX1mdW5jdGlvbiBTNWUodCl7dmFyIGU9dkh0KHQsInN0cmluZyIpO3JldHVybiB0eXBlb2YgZT09InN5bWJvbCI/ZTplKyIifWZ1bmN0aW9uIFNmKHQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIFNmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxTZih0KX1mdW5jdGlvbiBMRCh0LGUpe2lmKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gVEQodCxlKTt2YXIgYT17fS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpO3JldHVybiBhPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihhPXQuY29uc3RydWN0b3IubmFtZSksYT09PSJNYXAifHxhPT09IlNldCI/QXJyYXkuZnJvbSh0KTphPT09IkFyZ3VtZW50cyJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP1REKHQsZSk6dm9pZCAwfX1mdW5jdGlvbiBaMigpe1oyPWZ1bmN0aW9uKHIscyl7cmV0dXJuIG5ldyBhKHIsdm9pZCAwLHMpfTt2YXIgdD1SZWdFeHAucHJvdG90eXBlLGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShyLHMsbil7dmFyIG89UmVnRXhwKHIscyk7cmV0dXJuIGUuc2V0KG8sbnx8ZS5nZXQocikpLHpmKG8sYS5wcm90b3R5cGUpfWZ1bmN0aW9uIGkocixzKXt2YXIgbj1lLmdldChzKTtyZXR1cm4gT2JqZWN0LmtleXMobikucmVkdWNlKGZ1bmN0aW9uKG8sZCl7dmFyIGM9bltkXTtpZih0eXBlb2YgYz09Im51bWJlciIpb1tkXT1yW2NdO2Vsc2V7Zm9yKHZhciBwPTA7cltjW3BdXT09PXZvaWQgMCYmcCsxPGMubGVuZ3RoOylwKys7b1tkXT1yW2NbcF1dfXJldHVybiBvfSxPYmplY3QuY3JlYXRlKG51bGwpKX1yZXR1cm4gdUh0KGEsUmVnRXhwKSxhLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKHIpe3ZhciBzPXQuZXhlYy5jYWxsKHRoaXMscik7aWYocyl7cy5ncm91cHM9aShzLHRoaXMpO3ZhciBuPXMuaW5kaWNlcztuJiYobi5ncm91cHM9aShuLHRoaXMpKX1yZXR1cm4gc30sYS5wcm90b3R5cGVbU3ltYm9sLnJlcGxhY2VdPWZ1bmN0aW9uKHIscyl7aWYodHlwZW9mIHM9PSJzdHJpbmciKXt2YXIgbj1lLmdldCh0aGlzKTtyZXR1cm4gdFtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLHIscy5yZXBsYWNlKC9cJDwoW14+XSspKD58JCkvZyxmdW5jdGlvbihkLGMscCl7aWYocD09PSIiKXJldHVybiBkO3ZhciBsPW5bY107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/IiQiK2wuam9pbigiJCIpOnR5cGVvZiBsPT0ibnVtYmVyIj8iJCIrbDoiIn0pKX1pZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7dmFyIG89dGhpcztyZXR1cm4gdFtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLHIsZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHM7cmV0dXJuIHR5cGVvZiBkW2QubGVuZ3RoLTFdIT0ib2JqZWN0IiYmKGQ9W10uc2xpY2UuY2FsbChkKSkucHVzaChpKGQsbykpLHMuYXBwbHkodGhpcyxkKX0pfXJldHVybiB0W1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMscixzKX0sWjIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFM1KHQpe3JldHVybiBuZXcgUHJveHkodCx7Z2V0OmZ1bmN0aW9uKGEsaSl7cmV0dXJuIGkgaW4gYT9hW2ldOmFbQzJdfX0pfWZ1bmN0aW9uIG5WdCh0KXt2YXIgZT15MS5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbIit0KyJdIik7aWYoZSlyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCl9ZnVuY3Rpb24gb1Z0KHQpe3JldHVybiB0PT09IiI/ITA6dD09PSJmYWxzZSI/ITE6dD09PSJ0cnVlIj8hMDp0fWZ1bmN0aW9uIGxWdCh0KXtyZXR1cm4gXzUucHVzaCh0KSxmdW5jdGlvbigpe181LnNwbGljZShfNS5pbmRleE9mKHQpLDEpfX1mdW5jdGlvbiBjVnQodCl7aWYoISghdHx8IUVzKSl7dmFyIGU9eTEuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksZS5pbm5lckhUTUw9dDtmb3IodmFyIGE9eTEuaGVhZC5jaGlsZE5vZGVzLGk9bnVsbCxyPWEubGVuZ3RoLTE7cj4tMTtyLS0pe3ZhciBzPWFbcl0sbj0ocy50YWdOYW1lfHwiIikudG9VcHBlckNhc2UoKTtbIlNUWUxFIiwiTElOSyJdLmluZGV4T2Yobik+LTEmJihpPXMpfXJldHVybiB5MS5oZWFkLmluc2VydEJlZm9yZShlLGkpLHR9fWZ1bmN0aW9uIG04ZSgpe2Zvcih2YXIgdD0xMixlPSIiO3QtLSA+MDspZSs9ZFZ0W01hdGgucmFuZG9tKCkqNjJ8MF07cmV0dXJuIGV9ZnVuY3Rpb24gY2wodCl7Zm9yKHZhciBlPVtdLGE9KHR8fFtdKS5sZW5ndGg+Pj4wO2EtLTspZVthXT10W2FdO3JldHVybiBlfWZ1bmN0aW9uIFZEKHQpe3JldHVybiB0LmNsYXNzTGlzdD9jbCh0LmNsYXNzTGlzdCk6KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX1mdW5jdGlvbiBnOGUodCl7cmV0dXJuIiIuY29uY2F0KHQpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpLnJlcGxhY2UoLycvZywiJiMzOTsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBwVnQodCl7cmV0dXJuIE9iamVjdC5rZXlzKHR8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSxhKXtyZXR1cm4gZSsiIi5jb25jYXQoYSwnPSInKS5jb25jYXQoZzhlKHRbYV0pLCciICcpfSwiIikudHJpbSgpfWZ1bmN0aW9uIFRmKHQpe3JldHVybiBPYmplY3Qua2V5cyh0fHx7fSkucmVkdWNlKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIGUrIiIuY29uY2F0KGEsIjogIikuY29uY2F0KHRbYV0udHJpbSgpLCI7Iil9LCIiKX1mdW5jdGlvbiBqRCh0KXtyZXR1cm4gdC5zaXplIT09VXIuc2l6ZXx8dC54IT09VXIueHx8dC55IT09VXIueXx8dC5yb3RhdGUhPT1Vci5yb3RhdGV8fHQuZmxpcFh8fHQuZmxpcFl9ZnVuY3Rpb24gaFZ0KHQpe3ZhciBlPXQudHJhbnNmb3JtLGE9dC5jb250YWluZXJXaWR0aCxpPXQuaWNvbldpZHRoLHI9e3RyYW5zZm9ybToidHJhbnNsYXRlKCIuY29uY2F0KGEvMiwiIDI1NikiKX0scz0idHJhbnNsYXRlKCIuY29uY2F0KGUueCozMiwiLCAiKS5jb25jYXQoZS55KjMyLCIpICIpLG49InNjYWxlKCIuY29uY2F0KGUuc2l6ZS8xNiooZS5mbGlwWD8tMToxKSwiLCAiKS5jb25jYXQoZS5zaXplLzE2KihlLmZsaXBZPy0xOjEpLCIpICIpLG89InJvdGF0ZSgiLmNvbmNhdChlLnJvdGF0ZSwiIDAgMCkiKSxkPXt0cmFuc2Zvcm06IiIuY29uY2F0KHMsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChvKX0sYz17dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIi5jb25jYXQoaS8yKi0xLCIgLTI1NikiKX07cmV0dXJue291dGVyOnIsaW5uZXI6ZCxwYXRoOmN9fWZ1bmN0aW9uIHVWdCh0KXt2YXIgZT10LnRyYW5zZm9ybSxhPXQud2lkdGgsaT1hPT09dm9pZCAwP1BEOmEscj10LmhlaWdodCxzPXI9PT12b2lkIDA/UEQ6cixuPXQuc3RhcnRDZW50ZXJlZCxvPW49PT12b2lkIDA/ITE6bixkPSIiO3JldHVybiBvJiZFNWU/ZCs9InRyYW5zbGF0ZSgiLmNvbmNhdChlLngvcm8taS8yLCJlbSwgIikuY29uY2F0KGUueS9yby1zLzIsImVtKSAiKTpvP2QrPSJ0cmFuc2xhdGUoY2FsYygtNTAlICsgIi5jb25jYXQoZS54L3JvLCJlbSksIGNhbGMoLTUwJSArICIpLmNvbmNhdChlLnkvcm8sImVtKSkgIik6ZCs9InRyYW5zbGF0ZSgiLmNvbmNhdChlLngvcm8sImVtLCAiKS5jb25jYXQoZS55L3JvLCJlbSkgIiksZCs9InNjYWxlKCIuY29uY2F0KGUuc2l6ZS9ybyooZS5mbGlwWD8tMToxKSwiLCAiKS5jb25jYXQoZS5zaXplL3JvKihlLmZsaXBZPy0xOjEpLCIpICIpLGQrPSJyb3RhdGUoIi5jb25jYXQoZS5yb3RhdGUsImRlZykgIiksZH1mdW5jdGlvbiBiOGUoKXt2YXIgdD1zOGUsZT1uOGUsYT1ldC5jc3NQcmVmaXgsaT1ldC5yZXBsYWNlbWVudENsYXNzLHI9ZlZ0O2lmKGEhPT10fHxpIT09ZSl7dmFyIHM9bmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQodCwiXFwtIiksImciKSxuPW5ldyBSZWdFeHAoIlxcLS0iLmNvbmNhdCh0LCJcXC0iKSwiZyIpLG89bmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQoZSksImciKTtyPXIucmVwbGFjZShzLCIuIi5jb25jYXQoYSwiLSIpKS5yZXBsYWNlKG4sIi0tIi5jb25jYXQoYSwiLSIpKS5yZXBsYWNlKG8sIi4iLmNvbmNhdChpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gVUQoKXtldC5hdXRvQWRkQ3NzJiYhdjhlJiYoY1Z0KGI4ZSgpKSx2OGU9ITApfWZ1bmN0aW9uIGdWdCh0KXtFcyYmKExmP3NldFRpbWVvdXQodCwwKTp5OGUucHVzaCh0KSl9ZnVuY3Rpb24gVDUodCl7dmFyIGU9dC50YWcsYT10LmF0dHJpYnV0ZXMsaT1hPT09dm9pZCAwP3t9OmEscj10LmNoaWxkcmVuLHM9cj09PXZvaWQgMD9bXTpyO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZzhlKHQpOiI8Ii5jb25jYXQoZSwiICIpLmNvbmNhdChwVnQoaSksIj4iKS5jb25jYXQocy5tYXAoVDUpLmpvaW4oIiIpLCI8LyIpLmNvbmNhdChlLCI+Iil9ZnVuY3Rpb24gdzhlKHQsZSxhKXtpZih0JiZ0W2VdJiZ0W2VdW2FdKXJldHVybntwcmVmaXg6ZSxpY29uTmFtZTphLGljb246dFtlXVthXX19ZnVuY3Rpb24gTThlKHQpe3JldHVybiBqaSh0KS5sZW5ndGghPT0xP251bGw6dC5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNil9ZnVuY3Rpb24gejhlKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5yZWR1Y2UoZnVuY3Rpb24oZSxhKXt2YXIgaT10W2FdLHI9ISFpLmljb247cmV0dXJuIHI/ZVtpLmljb25OYW1lXT1pLmljb246ZVthXT1pLGV9LHt9KX1mdW5jdGlvbiBHRCh0LGUpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fSxpPWEuc2tpcEhvb2tzLHI9aT09PXZvaWQgMD8hMTppLHM9ejhlKGUpO3R5cGVvZiBVaS5ob29rcy5hZGRQYWNrPT0iZnVuY3Rpb24iJiYhcj9VaS5ob29rcy5hZGRQYWNrKHQsejhlKGUpKTpVaS5zdHlsZXNbdF09TmUoTmUoe30sVWkuc3R5bGVzW3RdfHx7fSkscyksdD09PSJmYXMiJiZHRCgiZmEiLGUpfWZ1bmN0aW9uIHhWdCh0KXtyZXR1cm5+c1Z0LmluZGV4T2YodCl9ZnVuY3Rpb24gd1Z0KHQsZSl7dmFyIGE9ZS5zcGxpdCgiLSIpLGk9YVswXSxyPWEuc2xpY2UoMSkuam9pbigiLSIpO3JldHVybiBpPT09dCYmciE9PSIiJiYheFZ0KHIpP3I6bnVsbH1mdW5jdGlvbiBYRCh0LGUpe3JldHVybihTOGVbdF18fHt9KVtlXX1mdW5jdGlvbiBNVnQodCxlKXtyZXR1cm4oQzhlW3RdfHx7fSlbZV19ZnVuY3Rpb24gcTAodCxlKXtyZXR1cm4oTDhlW3RdfHx7fSlbZV19ZnVuY3Rpb24gQThlKHQpe3JldHVybiBfOGVbdF18fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiB6VnQodCl7dmFyIGU9VDhlW3RdLGE9WEQoImZhcyIsdCk7cmV0dXJuIGV8fChhP3twcmVmaXg6ImZhcyIsaWNvbk5hbWU6YX06bnVsbCl8fHtwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsfX1mdW5jdGlvbiBzbygpe3JldHVybiBaRH1mdW5jdGlvbiBrVnQodCl7dmFyIGU9QzIsYT1rOGUucmVkdWNlKGZ1bmN0aW9uKGkscil7cmV0dXJuIGlbcl09IiIuY29uY2F0KGV0LmNzc1ByZWZpeCwiLSIpLmNvbmNhdChyKSxpfSx7fSk7cmV0dXJuIEo1ZS5mb3JFYWNoKGZ1bmN0aW9uKGkpeyh0LmluY2x1ZGVzKGFbaV0pfHx0LnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIHlWdFtpXS5pbmNsdWRlcyhyKX0pKSYmKGU9aSl9KSxlfWZ1bmN0aW9uICRmKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxhPWUuZmFtaWx5LGk9YT09PXZvaWQgMD9DMjphLHI9ZVZ0W2ldW3RdO2lmKGk9PT1rNSYmIXQpcmV0dXJuImZhZCI7dmFyIHM9cDhlW2ldW3RdfHxwOGVbaV1bcl0sbj10IGluIFVpLnN0eWxlcz90Om51bGwsbz1zfHxufHxudWxsO3JldHVybiBvfWZ1bmN0aW9uIFNWdCh0KXt2YXIgZT1bXSxhPW51bGw7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj13VnQoZXQuY3NzUHJlZml4LGkpO3I/YT1yOmkmJmUucHVzaChpKX0pLHtpY29uTmFtZTphLHJlc3Q6ZX19ZnVuY3Rpb24gRThlKHQpe3JldHVybiB0LnNvcnQoKS5maWx0ZXIoZnVuY3Rpb24oZSxhLGkpe3JldHVybiBpLmluZGV4T2YoZSk9PT1hfSl9ZnVuY3Rpb24gQWYodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGE9ZS5za2lwTG9va3VwcyxpPWE9PT12b2lkIDA/ITE6YSxyPW51bGwscz1FOGUodC5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIFA4ZS5pbmNsdWRlcyhnKX0pKSxuPUU4ZSh0LmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4hUDhlLmluY2x1ZGVzKGcpfSkpLG89cy5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI9ZywhSTVlLmluY2x1ZGVzKGcpfSksZD1rZihvLDEpLGM9ZFswXSxwPWM9PT12b2lkIDA/bnVsbDpjLGw9a1Z0KHMpLGY9TmUoTmUoe30sU1Z0KG4pKSx7fSx7cHJlZml4OiRmKHAse2ZhbWlseTpsfSl9KTtyZXR1cm4gTmUoTmUoTmUoe30sZiksTFZ0KHt2YWx1ZXM6dCxmYW1pbHk6bCxzdHlsZXM6TDUsY29uZmlnOmV0LGNhbm9uaWNhbDpmLGdpdmVuUHJlZml4OnJ9KSksQ1Z0KGkscixmKSl9ZnVuY3Rpb24gQ1Z0KHQsZSxhKXt2YXIgaT1hLnByZWZpeCxyPWEuaWNvbk5hbWU7aWYodHx8IWl8fCFyKXJldHVybntwcmVmaXg6aSxpY29uTmFtZTpyfTt2YXIgcz1lPT09ImZhIj9BOGUocik6e30sbj1xMChpLHIpO3JldHVybiByPXMuaWNvbk5hbWV8fG58fHIsaT1zLnByZWZpeHx8aSxpPT09ImZhciImJiFMNS5mYXImJkw1LmZhcyYmIWV0LmF1dG9GZXRjaFN2ZyYmKGk9ImZhcyIpLHtwcmVmaXg6aSxpY29uTmFtZTpyfX1mdW5jdGlvbiBMVnQodCl7dmFyIGU9dC52YWx1ZXMsYT10LmZhbWlseSxpPXQuY2Fub25pY2FsLHI9dC5naXZlblByZWZpeCxzPXI9PT12b2lkIDA/IiI6cixuPXQuc3R5bGVzLG89bj09PXZvaWQgMD97fTpuLGQ9dC5jb25maWcsYz1kPT09dm9pZCAwP3t9OmQscD1hPT09azUsbD1lLmluY2x1ZGVzKCJmYS1kdW90b25lIil8fGUuaW5jbHVkZXMoImZhZCIpLGY9Yy5mYW1pbHlEZWZhdWx0PT09ImR1b3RvbmUiLGc9aS5wcmVmaXg9PT0iZmFkInx8aS5wcmVmaXg9PT0iZmEtZHVvdG9uZSI7aWYoIXAmJihsfHxmfHxnKSYmKGkucHJlZml4PSJmYWQiKSwoZS5pbmNsdWRlcygiZmEtYnJhbmRzIil8fGUuaW5jbHVkZXMoImZhYiIpKSYmKGkucHJlZml4PSJmYWIiKSwhaS5wcmVmaXgmJl9WdC5pbmNsdWRlcyhhKSl7dmFyIHk9T2JqZWN0LmtleXMobykuZmluZChmdW5jdGlvbihtKXtyZXR1cm4gVFZ0LmluY2x1ZGVzKG0pfSk7aWYoeXx8Yy5hdXRvRmV0Y2hTdmcpe3ZhciB2PWpIdC5nZXQoYSkuZGVmYXVsdFNob3J0UHJlZml4SWQ7aS5wcmVmaXg9dixpLmljb25OYW1lPXEwKGkucHJlZml4LGkuaWNvbk5hbWUpfHxpLmljb25OYW1lfX1yZXR1cm4oaS5wcmVmaXg9PT0iZmEifHxzPT09ImZhIikmJihpLnByZWZpeD1zbygpfHwiZmFzIiksaX1mdW5jdGlvbiBEVnQodCxlKXt2YXIgYT1lLm1peG91dHNUbztyZXR1cm4gSThlPXQsZGw9e30sT2JqZWN0LmtleXMocGwpLmZvckVhY2goZnVuY3Rpb24oaSl7QVZ0LmluZGV4T2YoaSk9PT0tMSYmZGVsZXRlIHBsW2ldfSksSThlLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHI9aS5taXhvdXQ/aS5taXhvdXQoKTp7fTtpZihPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3R5cGVvZiByW25dPT0iZnVuY3Rpb24iJiYoYVtuXT1yW25dKSxTZihyW25dKT09PSJvYmplY3QiJiZPYmplY3Qua2V5cyhyW25dKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Fbbl18fChhW25dPXt9KSxhW25dW29dPXJbbl1bb119KX0pLGkuaG9va3Mpe3ZhciBzPWkuaG9va3MoKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2RsW25dfHwoZGxbbl09W10pLGRsW25dLnB1c2goc1tuXSl9KX1pLnByb3ZpZGVzJiZpLnByb3ZpZGVzKHBsKX0pLGF9ZnVuY3Rpb24gS0QodCxlKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShhPjI/YS0yOjApLHI9MjtyPGE7cisrKWlbci0yXT1hcmd1bWVudHNbcl07dmFyIHM9ZGxbdF18fFtdO3JldHVybiBzLmZvckVhY2goZnVuY3Rpb24obil7ZT1uLmFwcGx5KG51bGwsW2VdLmNvbmNhdChpKSl9KSxlfWZ1bmN0aW9uIFYwKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGU+MT9lLTE6MCksaT0xO2k8ZTtpKyspYVtpLTFdPWFyZ3VtZW50c1tpXTt2YXIgcj1kbFt0XXx8W107ci5mb3JFYWNoKGZ1bmN0aW9uKHMpe3MuYXBwbHkobnVsbCxhKX0pfWZ1bmN0aW9uIG5vKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBwbFt0XT9wbFt0XS5hcHBseShudWxsLGUpOnZvaWQgMH1mdW5jdGlvbiBRRCh0KXt0LnByZWZpeD09PSJmYSImJih0LnByZWZpeD0iZmFzIik7dmFyIGU9dC5pY29uTmFtZSxhPXQucHJlZml4fHxzbygpO2lmKGUpcmV0dXJuIGU9cTAoYSxlKXx8ZSx3OGUoTjhlLmRlZmluaXRpb25zLGEsZSl8fHc4ZShVaS5zdHlsZXMsYSxlKX1mdW5jdGlvbiBEZih0LGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiYWJzdHJhY3QiLHtnZXQ6ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJodG1sIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBUNShpKX0pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7aWYoRXMpe3ZhciBpPXkxLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBpLmlubmVySFRNTD10Lmh0bWwsaS5jaGlsZHJlbn19fSksdH1mdW5jdGlvbiBGVnQodCl7dmFyIGU9dC5jaGlsZHJlbixhPXQubWFpbixpPXQubWFzayxyPXQuYXR0cmlidXRlcyxzPXQuc3R5bGVzLG49dC50cmFuc2Zvcm07aWYoakQobikmJmEuZm91bmQmJiFpLmZvdW5kKXt2YXIgbz1hLndpZHRoLGQ9YS5oZWlnaHQsYz17eDpvL2QvMix5Oi41fTtyLnN0eWxlPVRmKE5lKE5lKHt9LHMpLHt9LHsidHJhbnNmb3JtLW9yaWdpbiI6IiIuY29uY2F0KGMueCtuLngvMTYsImVtICIpLmNvbmNhdChjLnkrbi55LzE2LCJlbSIpfSkpfXJldHVyblt7dGFnOiJzdmciLGF0dHJpYnV0ZXM6cixjaGlsZHJlbjplfV19ZnVuY3Rpb24gT1Z0KHQpe3ZhciBlPXQucHJlZml4LGE9dC5pY29uTmFtZSxpPXQuY2hpbGRyZW4scj10LmF0dHJpYnV0ZXMscz10LnN5bWJvbCxuPXM9PT0hMD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdChldC5jc3NQcmVmaXgsIi0iKS5jb25jYXQoYSk6cztyZXR1cm5be3RhZzoic3ZnIixhdHRyaWJ1dGVzOntzdHlsZToiZGlzcGxheTogbm9uZTsifSxjaGlsZHJlbjpbe3RhZzoic3ltYm9sIixhdHRyaWJ1dGVzOk5lKE5lKHt9LHIpLHt9LHtpZDpufSksY2hpbGRyZW46aX1dfV19ZnVuY3Rpb24gUlZ0KHQpe3ZhciBlPVsiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsInRpdGxlIiwicm9sZSJdO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW4gdH0pfWZ1bmN0aW9uIEpEKHQpe3ZhciBlPXQuaWNvbnMsYT1lLm1haW4saT1lLm1hc2sscj10LnByZWZpeCxzPXQuaWNvbk5hbWUsbj10LnRyYW5zZm9ybSxvPXQuc3ltYm9sLGQ9dC5tYXNrSWQsYz10LmV4dHJhLHA9dC53YXRjaGFibGUsbD1wPT09dm9pZCAwPyExOnAsZj1pLmZvdW5kP2k6YSxnPWYud2lkdGgseT1mLmhlaWdodCx2PVtldC5yZXBsYWNlbWVudENsYXNzLHM/IiIuY29uY2F0KGV0LmNzc1ByZWZpeCwiLSIpLmNvbmNhdChzKToiIl0uZmlsdGVyKGZ1bmN0aW9uKF8pe3JldHVybiBjLmNsYXNzZXMuaW5kZXhPZihfKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKF8pe3JldHVybiBfIT09IiJ8fCEhX30pLmNvbmNhdChjLmNsYXNzZXMpLmpvaW4oIiAiKSxtPXtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOk5lKE5lKHt9LGMuYXR0cmlidXRlcykse30seyJkYXRhLXByZWZpeCI6ciwiZGF0YS1pY29uIjpzLGNsYXNzOnYscm9sZTpjLmF0dHJpYnV0ZXMucm9sZXx8ImltZyIsdmlld0JveDoiMCAwICIuY29uY2F0KGcsIiAiKS5jb25jYXQoeSl9KX07IVJWdChjLmF0dHJpYnV0ZXMpJiYhYy5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdJiYobS5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdPSJ0cnVlIiksbCYmKG0uYXR0cmlidXRlc1tIMF09IiIpO3ZhciB4PU5lKE5lKHt9LG0pLHt9LHtwcmVmaXg6cixpY29uTmFtZTpzLG1haW46YSxtYXNrOmksbWFza0lkOmQsdHJhbnNmb3JtOm4sc3ltYm9sOm8sc3R5bGVzOk5lKHt9LGMuc3R5bGVzKX0pLE09aS5mb3VuZCYmYS5mb3VuZD9ubygiZ2VuZXJhdGVBYnN0cmFjdE1hc2siLHgpfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06bm8oImdlbmVyYXRlQWJzdHJhY3RJY29uIix4KXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319LFM9TS5jaGlsZHJlbixGPU0uYXR0cmlidXRlcztyZXR1cm4geC5jaGlsZHJlbj1TLHguYXR0cmlidXRlcz1GLG8/T1Z0KHgpOkZWdCh4KX1mdW5jdGlvbiBGOGUodCl7dmFyIGU9dC5jb250ZW50LGE9dC53aWR0aCxpPXQuaGVpZ2h0LHI9dC50cmFuc2Zvcm0scz10LmV4dHJhLG49dC53YXRjaGFibGUsbz1uPT09dm9pZCAwPyExOm4sZD1OZShOZSh7fSxzLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczpzLmNsYXNzZXMuam9pbigiICIpfSk7byYmKGRbSDBdPSIiKTt2YXIgYz1OZSh7fSxzLnN0eWxlcyk7akQocikmJihjLnRyYW5zZm9ybT11VnQoe3RyYW5zZm9ybTpyLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6YSxoZWlnaHQ6aX0pLGNbIi13ZWJraXQtdHJhbnNmb3JtIl09Yy50cmFuc2Zvcm0pO3ZhciBwPVRmKGMpO3AubGVuZ3RoPjAmJihkLnN0eWxlPXApO3ZhciBsPVtdO3JldHVybiBsLnB1c2goe3RhZzoic3BhbiIsYXR0cmlidXRlczpkLGNoaWxkcmVuOltlXX0pLGx9ZnVuY3Rpb24gQlZ0KHQpe3ZhciBlPXQuY29udGVudCxhPXQuZXh0cmEsaT1OZShOZSh7fSxhLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczphLmNsYXNzZXMuam9pbigiICIpfSkscj1UZihhLnN0eWxlcyk7ci5sZW5ndGg+MCYmKGkuc3R5bGU9cik7dmFyIHM9W107cmV0dXJuIHMucHVzaCh7dGFnOiJzcGFuIixhdHRyaWJ1dGVzOmksY2hpbGRyZW46W2VdfSksc31mdW5jdGlvbiB0RSh0KXt2YXIgZT10WzBdLGE9dFsxXSxpPXQuc2xpY2UoNCkscj1rZihpLDEpLHM9clswXSxuPW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkocyk/bj17dGFnOiJnIixhdHRyaWJ1dGVzOntjbGFzczoiIi5jb25jYXQoZXQuY3NzUHJlZml4LCItIikuY29uY2F0KHFELkdST1VQKX0sY2hpbGRyZW46W3t0YWc6InBhdGgiLGF0dHJpYnV0ZXM6e2NsYXNzOiIiLmNvbmNhdChldC5jc3NQcmVmaXgsIi0iKS5jb25jYXQocUQuU0VDT05EQVJZKSxmaWxsOiJjdXJyZW50Q29sb3IiLGQ6c1swXX19LHt0YWc6InBhdGgiLGF0dHJpYnV0ZXM6e2NsYXNzOiIiLmNvbmNhdChldC5jc3NQcmVmaXgsIi0iKS5jb25jYXQocUQuUFJJTUFSWSksZmlsbDoiY3VycmVudENvbG9yIixkOnNbMV19fV19Om49e3RhZzoicGF0aCIsYXR0cmlidXRlczp7ZmlsbDoiY3VycmVudENvbG9yIixkOnN9fSx7Zm91bmQ6ITAsd2lkdGg6ZSxoZWlnaHQ6YSxpY29uOm59fWZ1bmN0aW9uIHFWdCh0LGUpeyFjOGUmJiFldC5zaG93TWlzc2luZ0ljb25zJiZ0JiZjb25zb2xlLmVycm9yKCdJY29uIHdpdGggbmFtZSAiJy5jb25jYXQodCwnIiBhbmQgcHJlZml4ICInKS5jb25jYXQoZSwnIiBpcyBtaXNzaW5nLicpKX1mdW5jdGlvbiBhRSh0LGUpe3ZhciBhPWU7cmV0dXJuIGU9PT0iZmEiJiZldC5zdHlsZURlZmF1bHQhPT1udWxsJiYoZT1zbygpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihpLHIpe2lmKGE9PT0iZmEiKXt2YXIgcz1BOGUodCl8fHt9O3Q9cy5pY29uTmFtZXx8dCxlPXMucHJlZml4fHxlfWlmKHQmJmUmJmVFW2VdJiZlRVtlXVt0XSl7dmFyIG49ZUVbZV1bdF07cmV0dXJuIGkodEUobikpfXFWdCh0LGUpLGkoTmUoTmUoe30sSFZ0KSx7fSx7aWNvbjpldC5zaG93TWlzc2luZ0ljb25zJiZ0P25vKCJtaXNzaW5nSWNvbkFic3RyYWN0Iil8fHt9Ont9fSkpfSl9ZnVuY3Rpb24gQjhlKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlP3QuZ2V0QXR0cmlidXRlKEgwKTpudWxsO3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ9ZnVuY3Rpb24galZ0KHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlP3QuZ2V0QXR0cmlidXRlKE5EKTpudWxsLGE9dC5nZXRBdHRyaWJ1dGU/dC5nZXRBdHRyaWJ1dGUoRkQpOm51bGw7cmV0dXJuIGUmJmF9ZnVuY3Rpb24gVVZ0KHQpe3JldHVybiB0JiZ0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMmJnQuY2xhc3NMaXN0LmNvbnRhaW5zKGV0LnJlcGxhY2VtZW50Q2xhc3MpfWZ1bmN0aW9uIFdWdCgpe2lmKGV0LmF1dG9SZXBsYWNlU3ZnPT09ITApcmV0dXJuIFBmLnJlcGxhY2U7dmFyIHQ9UGZbZXQuYXV0b1JlcGxhY2VTdmddO3JldHVybiB0fHxQZi5yZXBsYWNlfWZ1bmN0aW9uIEdWdCh0KXtyZXR1cm4geTEuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCl9ZnVuY3Rpb24gWVZ0KHQpe3JldHVybiB5MS5jcmVhdGVFbGVtZW50KHQpfWZ1bmN0aW9uIEg4ZSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sYT1lLmNlRm4saT1hPT09dm9pZCAwP3QudGFnPT09InN2ZyI/R1Z0OllWdDphO2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4geTEuY3JlYXRlVGV4dE5vZGUodCk7dmFyIHI9aSh0LnRhZyk7T2JqZWN0LmtleXModC5hdHRyaWJ1dGVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXtyLnNldEF0dHJpYnV0ZShuLHQuYXR0cmlidXRlc1tuXSl9KTt2YXIgcz10LmNoaWxkcmVufHxbXTtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3IuYXBwZW5kQ2hpbGQoSDhlKG4se2NlRm46aX0pKX0pLHJ9ZnVuY3Rpb24gWlZ0KHQpe3ZhciBlPSIgIi5jb25jYXQodC5vdXRlckhUTUwsIiAiKTtyZXR1cm4gZT0iIi5jb25jYXQoZSwiRm9udCBBd2Vzb21lIGZvbnRhd2Vzb21lLmNvbSAiKSxlfWZ1bmN0aW9uIHE4ZSh0KXt0KCl9ZnVuY3Rpb24gVjhlKHQsZSl7dmFyIGE9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpFZjtpZih0Lmxlbmd0aD09PTApYSgpO2Vsc2V7dmFyIGk9cThlO2V0Lm11dGF0ZUFwcHJvYWNoPT09UXF0JiYoaT1pby5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHE4ZSksaShmdW5jdGlvbigpe3ZhciByPVdWdCgpLHM9ckUuYmVnaW4oIm11dGF0ZSIpO3QubWFwKHIpLHMoKSxhKCl9KX19ZnVuY3Rpb24gajhlKCl7c0U9ITB9ZnVuY3Rpb24gbkUoKXtzRT0hMX1mdW5jdGlvbiBVOGUodCl7aWYoRDVlJiZldC5vYnNlcnZlTXV0YXRpb25zKXt2YXIgZT10LnRyZWVDYWxsYmFjayxhPWU9PT12b2lkIDA/RWY6ZSxpPXQubm9kZUNhbGxiYWNrLHI9aT09PXZvaWQgMD9FZjppLHM9dC5wc2V1ZG9FbGVtZW50c0NhbGxiYWNrLG49cz09PXZvaWQgMD9FZjpzLG89dC5vYnNlcnZlTXV0YXRpb25zUm9vdCxkPW89PT12b2lkIDA/eTE6bztJZj1uZXcgRDVlKGZ1bmN0aW9uKGMpe2lmKCFzRSl7dmFyIHA9c28oKTtjbChjKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKGwudHlwZT09PSJjaGlsZExpc3QiJiZsLmFkZGVkTm9kZXMubGVuZ3RoPjAmJiFCOGUobC5hZGRlZE5vZGVzWzBdKSYmKGV0LnNlYXJjaFBzZXVkb0VsZW1lbnRzJiZuKGwudGFyZ2V0KSxhKGwudGFyZ2V0KSksbC50eXBlPT09ImF0dHJpYnV0ZXMiJiZsLnRhcmdldC5wYXJlbnROb2RlJiZldC5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmbihbbC50YXJnZXRdLCEwKSxsLnR5cGU9PT0iYXR0cmlidXRlcyImJkI4ZShsLnRhcmdldCkmJn5yVnQuaW5kZXhPZihsLmF0dHJpYnV0ZU5hbWUpKWlmKGwuYXR0cmlidXRlTmFtZT09PSJjbGFzcyImJmpWdChsLnRhcmdldCkpe3ZhciBmPUFmKFZEKGwudGFyZ2V0KSksZz1mLnByZWZpeCx5PWYuaWNvbk5hbWU7bC50YXJnZXQuc2V0QXR0cmlidXRlKE5ELGd8fHApLHkmJmwudGFyZ2V0LnNldEF0dHJpYnV0ZShGRCx5KX1lbHNlIFVWdChsLnRhcmdldCkmJnIobC50YXJnZXQpfSl9fSksRXMmJklmLm9ic2VydmUoZCx7Y2hpbGRMaXN0OiEwLGF0dHJpYnV0ZXM6ITAsY2hhcmFjdGVyRGF0YTohMCxzdWJ0cmVlOiEwfSl9fWZ1bmN0aW9uIFhWdCgpe0lmJiZJZi5kaXNjb25uZWN0KCl9ZnVuY3Rpb24gS1Z0KHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpLGE9W107cmV0dXJuIGUmJihhPWUuc3BsaXQoIjsiKS5yZWR1Y2UoZnVuY3Rpb24oaSxyKXt2YXIgcz1yLnNwbGl0KCI6Iiksbj1zWzBdLG89cy5zbGljZSgxKTtyZXR1cm4gbiYmby5sZW5ndGg+MCYmKGlbbl09by5qb2luKCI6IikudHJpbSgpKSxpfSx7fSkpLGF9ZnVuY3Rpb24gUVZ0KHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXByZWZpeCIpLGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaWNvbiIpLGk9dC5pbm5lclRleHQhPT12b2lkIDA/dC5pbm5lclRleHQudHJpbSgpOiIiLHI9QWYoVkQodCkpO3JldHVybiByLnByZWZpeHx8KHIucHJlZml4PXNvKCkpLGUmJmEmJihyLnByZWZpeD1lLHIuaWNvbk5hbWU9YSksci5pY29uTmFtZSYmci5wcmVmaXh8fChyLnByZWZpeCYmaS5sZW5ndGg+MCYmKHIuaWNvbk5hbWU9TVZ0KHIucHJlZml4LHQuaW5uZXJUZXh0KXx8WEQoci5wcmVmaXgsTThlKHQuaW5uZXJUZXh0KSkpLCFyLmljb25OYW1lJiZldC5hdXRvRmV0Y2hTdmcmJnQuZmlyc3RDaGlsZCYmdC5maXJzdENoaWxkLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJihyLmljb25OYW1lPXQuZmlyc3RDaGlsZC5kYXRhKSkscn1mdW5jdGlvbiBKVnQodCl7dmFyIGU9Y2wodC5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24oYSxpKXtyZXR1cm4gYS5uYW1lIT09ImNsYXNzIiYmYS5uYW1lIT09InN0eWxlIiYmKGFbaS5uYW1lXT1pLnZhbHVlKSxhfSx7fSk7cmV0dXJuIGV9ZnVuY3Rpb24gZWp0KCl7cmV0dXJue2ljb25OYW1lOm51bGwscHJlZml4Om51bGwsdHJhbnNmb3JtOlVyLHN5bWJvbDohMSxtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLGV4dHJhOntjbGFzc2VzOltdLHN0eWxlczp7fSxhdHRyaWJ1dGVzOnt9fX19ZnVuY3Rpb24gVzhlKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7c3R5bGVQYXJzZXI6ITB9LGE9UVZ0KHQpLGk9YS5pY29uTmFtZSxyPWEucHJlZml4LHM9YS5yZXN0LG49SlZ0KHQpLG89S0QoInBhcnNlTm9kZUF0dHJpYnV0ZXMiLHt9LHQpLGQ9ZS5zdHlsZVBhcnNlcj9LVnQodCk6W107cmV0dXJuIE5lKHtpY29uTmFtZTppLHByZWZpeDpyLHRyYW5zZm9ybTpVcixtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLHN5bWJvbDohMSxleHRyYTp7Y2xhc3NlczpzLHN0eWxlczpkLGF0dHJpYnV0ZXM6bn19LG8pfWZ1bmN0aW9uIEc4ZSh0KXt2YXIgZT1ldC5hdXRvUmVwbGFjZVN2Zz09PSJuZXN0Ij9XOGUodCx7c3R5bGVQYXJzZXI6ITF9KTpXOGUodCk7cmV0dXJufmUuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKGg4ZSk/bm8oImdlbmVyYXRlTGF5ZXJzVGV4dCIsdCxlKTpubygiZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uIix0LGUpfWZ1bmN0aW9uIGFqdCgpe3JldHVybltdLmNvbmNhdChqaShlOGUpLGppKGk4ZSkpfWZ1bmN0aW9uIFk4ZSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtpZighRXMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPXkxLmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QsaT1mdW5jdGlvbihsKXtyZXR1cm4gYS5hZGQoIiIuY29uY2F0KG84ZSwiLSIpLmNvbmNhdChsKSl9LHI9ZnVuY3Rpb24obCl7cmV0dXJuIGEucmVtb3ZlKCIiLmNvbmNhdChvOGUsIi0iKS5jb25jYXQobCkpfSxzPWV0LmF1dG9GZXRjaFN2Zz9hanQoKTpJNWUuY29uY2F0KE9iamVjdC5rZXlzKHRqdCkpO3MuaW5jbHVkZXMoImZhIil8fHMucHVzaCgiZmEiKTt2YXIgbj1bIi4iLmNvbmNhdChoOGUsIjpub3QoWyIpLmNvbmNhdChIMCwiXSkiKV0uY29uY2F0KHMubWFwKGZ1bmN0aW9uKHApe3JldHVybiIuIi5jb25jYXQocCwiOm5vdChbIikuY29uY2F0KEgwLCJdKSIpfSkpLmpvaW4oIiwgIik7aWYobi5sZW5ndGg9PT0wKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgbz1bXTt0cnl7bz1jbCh0LnF1ZXJ5U2VsZWN0b3JBbGwobikpfWNhdGNoe31pZihvLmxlbmd0aD4wKWkoInBlbmRpbmciKSxyKCJjb21wbGV0ZSIpO2Vsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBkPXJFLmJlZ2luKCJvblRyZWUiKSxjPW8ucmVkdWNlKGZ1bmN0aW9uKHAsbCl7dHJ5e3ZhciBmPUc4ZShsKTtmJiZwLnB1c2goZil9Y2F0Y2goZyl7YzhlfHxnLm5hbWU9PT0iTWlzc2luZ0ljb24iJiZjb25zb2xlLmVycm9yKGcpfXJldHVybiBwfSxbXSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHAsbCl7UHJvbWlzZS5hbGwoYykudGhlbihmdW5jdGlvbihmKXtWOGUoZixmdW5jdGlvbigpe2koImFjdGl2ZSIpLGkoImNvbXBsZXRlIikscigicGVuZGluZyIpLHR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlKCksZCgpLHAoKX0pfSkuY2F0Y2goZnVuY3Rpb24oZil7ZCgpLGwoZil9KX0pfWZ1bmN0aW9uIGlqdCh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtHOGUodCkudGhlbihmdW5jdGlvbihhKXthJiZWOGUoW2FdLGUpfSl9ZnVuY3Rpb24gcmp0KHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30saT0oZXx8e30pLmljb24/ZTpRRChlfHx7fSkscj1hLm1hc2s7cmV0dXJuIHImJihyPShyfHx7fSkuaWNvbj9yOlFEKHJ8fHt9KSksdChpLE5lKE5lKHt9LGEpLHt9LHttYXNrOnJ9KSl9fWZ1bmN0aW9uIHBqdCh0KXt2YXIgZT10LnJlcGxhY2UoWjhlLCIiKTtyZXR1cm4gTThlKGppKGUpWzBdfHwiIil9ZnVuY3Rpb24gaGp0KHQpe3ZhciBlPXQuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mZWF0dXJlLXNldHRpbmdzIikuaW5jbHVkZXMoInNzMDEiKSxhPXQuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpLGk9YS5yZXBsYWNlKFo4ZSwiIikscj1pLmNvZGVQb2ludEF0KDApLHM9cj49WDhlWzBdJiZyPD1YOGVbMV0sbj1pLmxlbmd0aD09PTI/aVswXT09PWlbMV06ITE7cmV0dXJuIHN8fG58fGV9ZnVuY3Rpb24gdWp0KHQsZSl7dmFyIGE9dC5yZXBsYWNlKC9eWyciXXxbJyJdJC9nLCIiKS50b0xvd2VyQ2FzZSgpLGk9cGFyc2VJbnQoZSkscj1pc05hTihpKT8ibm9ybWFsIjppO3JldHVybihvRVthXXx8e30pW3JdfHxkanRbYV19ZnVuY3Rpb24gUThlKHQsZSl7dmFyIGE9IiIuY29uY2F0KEtxdCkuY29uY2F0KGUucmVwbGFjZSgiOiIsIi0iKSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscil7aWYodC5nZXRBdHRyaWJ1dGUoYSkhPT1udWxsKXJldHVybiBpKCk7dmFyIHM9Y2wodC5jaGlsZHJlbiksbj1zLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5nZXRBdHRyaWJ1dGUoSUQpPT09ZX0pWzBdLG89aW8uZ2V0Q29tcHV0ZWRTdHlsZSh0LGUpLGQ9by5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LWZhbWlseSIpLGM9ZC5tYXRjaChhVnQpLHA9by5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LXdlaWdodCIpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iik7aWYobiYmIWMpcmV0dXJuIHQucmVtb3ZlQ2hpbGQobiksaSgpO2lmKGMmJmwhPT0ibm9uZSImJmwhPT0iIil7dmFyIGY9by5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50IiksZz11anQoZCxwKSx5PXBqdChmKSx2PWNbMF0uc3RhcnRzV2l0aCgiRm9udEF3ZXNvbWUiKSxtPWhqdChvKSx4PVhEKGcseSksTT14O2lmKHYpe3ZhciBTPXpWdCh5KTtTLmljb25OYW1lJiZTLnByZWZpeCYmKHg9Uy5pY29uTmFtZSxnPVMucHJlZml4KX1pZih4JiYhbSYmKCFufHxuLmdldEF0dHJpYnV0ZShORCkhPT1nfHxuLmdldEF0dHJpYnV0ZShGRCkhPT1NKSl7dC5zZXRBdHRyaWJ1dGUoYSxNKSxuJiZ0LnJlbW92ZUNoaWxkKG4pO3ZhciBGPWVqdCgpLF89Ri5leHRyYTtfLmF0dHJpYnV0ZXNbSURdPWUsYUUoeCxnKS50aGVuKGZ1bmN0aW9uKGspe3ZhciBOPUpEKE5lKE5lKHt9LEYpLHt9LHtpY29uczp7bWFpbjprLG1hc2s6RDhlKCl9LHByZWZpeDpnLGljb25OYW1lOk0sZXh0cmE6Xyx3YXRjaGFibGU6ITB9KSksTD15MS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7ZT09PSI6OmJlZm9yZSI/dC5pbnNlcnRCZWZvcmUoTCx0LmZpcnN0Q2hpbGQpOnQuYXBwZW5kQ2hpbGQoTCksTC5vdXRlckhUTUw9Ti5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIFQ1KEEpfSkuam9pbihgCmApLHQucmVtb3ZlQXR0cmlidXRlKGEpLGkoKX0pLmNhdGNoKHIpfWVsc2UgaSgpfWVsc2UgaSgpfSl9ZnVuY3Rpb24gZmp0KHQpe3JldHVybiBQcm9taXNlLmFsbChbUThlKHQsIjo6YmVmb3JlIiksUThlKHQsIjo6YWZ0ZXIiKV0pfWZ1bmN0aW9uIG1qdCh0KXtyZXR1cm4gdC5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmIX5KcXQuaW5kZXhPZih0LnRhZ05hbWUudG9VcHBlckNhc2UoKSkmJiF0LmdldEF0dHJpYnV0ZShJRCkmJighdC5wYXJlbnROb2RlfHx0LnBhcmVudE5vZGUudGFnTmFtZSE9PSJzdmciKX1mdW5jdGlvbiBKOGUodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2lmKEVzKXt2YXIgYTtpZihlKWE9dDtlbHNlIGlmKGV0LnNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4pYT10LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTtlbHNle3ZhciBpPW5ldyBTZXQscj1NZihkb2N1bWVudC5zdHlsZVNoZWV0cyksczt0cnl7Zm9yKHIucygpOyEocz1yLm4oKSkuZG9uZTspe3ZhciBuPXMudmFsdWU7dHJ5e3ZhciBvPU1mKG4uY3NzUnVsZXMpLGQ7dHJ5e2ZvcihvLnMoKTshKGQ9by5uKCkpLmRvbmU7KXt2YXIgYz1kLnZhbHVlLHA9Ymp0KGMuc2VsZWN0b3JUZXh0KSxsPU1mKHApLGY7dHJ5e2ZvcihsLnMoKTshKGY9bC5uKCkpLmRvbmU7KXt2YXIgZz1mLnZhbHVlO2kuYWRkKGcpfX1jYXRjaCh2KXtsLmUodil9ZmluYWxseXtsLmYoKX19fWNhdGNoKHYpe28uZSh2KX1maW5hbGx5e28uZigpfX1jYXRjaCh2KXtldC5zZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzJiZjb25zb2xlLndhcm4oIkZvbnQgQXdlc29tZTogY2Fubm90IHBhcnNlIHN0eWxlc2hlZXQ6ICIuY29uY2F0KG4uaHJlZiwiICgiKS5jb25jYXQodi5tZXNzYWdlLGApCklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLmApKX19fWNhdGNoKHYpe3IuZSh2KX1maW5hbGx5e3IuZigpfWlmKCFpLnNpemUpcmV0dXJuO3ZhciB5PUFycmF5LmZyb20oaSkuam9pbigiLCAiKTt0cnl7YT10LnF1ZXJ5U2VsZWN0b3JBbGwoeSl9Y2F0Y2h7fX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odixtKXt2YXIgeD1jbChhKS5maWx0ZXIobWp0KS5tYXAoZmp0KSxNPXJFLmJlZ2luKCJzZWFyY2hQc2V1ZG9FbGVtZW50cyIpO2o4ZSgpLFByb21pc2UuYWxsKHgpLnRoZW4oZnVuY3Rpb24oKXtNKCksbkUoKSx2KCl9KS5jYXRjaChmdW5jdGlvbigpe00oKSxuRSgpLG0oKX0pfSl9fWZ1bmN0aW9uIGFkZSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHQuYXR0cmlidXRlcyYmKHQuYXR0cmlidXRlcy5maWxsfHxlKSYmKHQuYXR0cmlidXRlcy5maWxsPSJibGFjayIpLHR9ZnVuY3Rpb24gd2p0KHQpe3JldHVybiB0LnRhZz09PSJnIj90LmNoaWxkcmVuOlt0XX12YXIgQzVlLCRELF81ZSxUNWUsTDVlLHlIdCwkNWUsQTVlLGlvLHkxLEQ1ZSxDZixLWTEsRXMsRTVlLEFELHhIdCx3SHQsUDVlLE1IdCxJNWUsQzIsazUsTjVlLEY1ZSxPNWUsUjVlLEI1ZSxINWUscTVlLFY1ZSxqNWUsVTVlLFc1ZSxHNWUsWTVlLFo1ZSxYNWUsSzVlLFE1ZSx6SHQsa0h0LFNIdCxDSHQsX0h0LFRIdCxMSHQsJEh0LEFIdCxESHQsRUh0LFBIdCxJSHQsTkh0LEZIdCxPSHQsUkh0LEJIdCxISHQsSjVlLFFZMSxxSHQsVkh0LGpIdCxVSHQsZThlLHQ4ZSxXSHQsR0h0LFlIdCxaSHQsWEh0LEpZMSxLSHQsUUh0LEpIdCxhOGUsREQsX2YsZXF0LHRxdCxhcXQsaXF0LHJxdCxzcXQsbnF0LG9xdCxscXQsY3F0LGRxdCxwcXQsaHF0LHVxdCxmcXQsbXF0LGdxdCxicXQsdnF0LHlxdCx4cXQsd3F0LE1xdCx6cXQsa3F0LFNxdCxDcXQsX3F0LFRxdCxMcXQsJHF0LEFxdCxEcXQsRXF0LFBxdCxJcXQsTnF0LEZxdCxPcXQsZVoxLFJxdCxCcXQsSHF0LHFxdCx0WjEsVnF0LGpxdCxFRCxVcXQsaThlLFdxdCxyOGUsR3F0LFlxdCxacXQsWHF0LFBzLFBELHM4ZSxuOGUsSDAsSUQsS3F0LE5ELEZELG84ZSxRcXQsSnF0LGw4ZSxjOGUsZDhlLGVWdCxPRCxwOGUsUkQsQkQsSEQsYVoxLHRWdCxoOGUsYVZ0LGlWdCxpWjEsclZ0LHFELHNWdCxDNSxmOGUsbGwsZXQsXzUscm8sVXIsZFZ0LGZWdCx2OGUsbVZ0LElzLFVpLHk4ZSx4OGUsTGYsYlZ0LFdELFlELFdpLHJaMSxzWjEsTDUsdlZ0LGs4ZSx5VnQsWkQsUzhlLEM4ZSxfOGUsVDhlLEw4ZSwkOGUsRDhlLFA4ZSxfVnQsVFZ0LCRWdCxJOGUsZGwscGwsQVZ0LE44ZSxFVnQsUFZ0LElWdCxBYSxOVnQsZUUsSFZ0LE84ZSxpRSwkNSxWVnQsUjhlLHJFLEVmLFBmLHNFLElmLHRqdCxzanQsbmp0LG9qdCxsanQsY2p0LFo4ZSxYOGUsSzhlLG9FLGRqdCxnanQsYmp0LHZqdCxlZGUseWp0LHRkZSx4anQsbEUsTWp0LHpqdCxranQsU2p0LENqdCxfanQsVGp0LExqdCwkanQsQWp0LERqdCxjRSxFanQsUGp0LElqdCx1OGUsaWRlPWIoKCk9PntDNWU9ZnVuY3Rpb24oKXt9LCREPXt9LF81ZT17fSxUNWU9bnVsbCxMNWU9e21hcms6QzVlLG1lYXN1cmU6QzVlfTt0cnl7dHlwZW9mIHdpbmRvdzwidSImJigkRD13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDwidSImJihfNWU9ZG9jdW1lbnQpLHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyPCJ1IiYmKFQ1ZT1NdXRhdGlvbk9ic2VydmVyKSx0eXBlb2YgcGVyZm9ybWFuY2U8InUiJiYoTDVlPXBlcmZvcm1hbmNlKX1jYXRjaHt9eUh0PSRELm5hdmlnYXRvcnx8e30sJDVlPXlIdC51c2VyQWdlbnQsQTVlPSQ1ZT09PXZvaWQgMD8iIjokNWUsaW89JEQseTE9XzVlLEQ1ZT1UNWUsQ2Y9TDVlLEtZMT0hIWlvLmRvY3VtZW50LEVzPSEheTEuZG9jdW1lbnRFbGVtZW50JiYhIXkxLmhlYWQmJnR5cGVvZiB5MS5hZGRFdmVudExpc3RlbmVyPT0iZnVuY3Rpb24iJiZ0eXBlb2YgeTEuY3JlYXRlRWxlbWVudD09ImZ1bmN0aW9uIixFNWU9fkE1ZS5pbmRleE9mKCJNU0lFIil8fH5BNWUuaW5kZXhPZigiVHJpZGVudC8iKSx4SHQ9L2ZhKGt8a2R8c3xyfGx8dHxkfGRyfGRsfGR0fGJ8c2xyfHNscHJ8d3NifHRsfG5zfG5kc3xlc3xndHxqcnxqZnJ8amRyfHVzYnx1ZnNifHVkc2J8Y3J8c3N8c3J8c2x8c3R8c2RzfHNkcnxzZGx8c2R0KT9bXC1cIF0vLHdIdD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxXaGl0ZWJvYXJkKT8uKi9pLFA1ZT17Y2xhc3NpYzp7ZmE6InNvbGlkIixmYXM6InNvbGlkIiwiZmEtc29saWQiOiJzb2xpZCIsZmFyOiJyZWd1bGFyIiwiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhbDoibGlnaHQiLCJmYS1saWdodCI6ImxpZ2h0IixmYXQ6InRoaW4iLCJmYS10aGluIjoidGhpbiIsZmFiOiJicmFuZHMiLCJmYS1icmFuZHMiOiJicmFuZHMifSxkdW90b25lOntmYToic29saWQiLGZhZDoic29saWQiLCJmYS1zb2xpZCI6InNvbGlkIiwiZmEtZHVvdG9uZSI6InNvbGlkIixmYWRyOiJyZWd1bGFyIiwiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhZGw6ImxpZ2h0IiwiZmEtbGlnaHQiOiJsaWdodCIsZmFkdDoidGhpbiIsImZhLXRoaW4iOiJ0aGluIn0sc2hhcnA6e2ZhOiJzb2xpZCIsZmFzczoic29saWQiLCJmYS1zb2xpZCI6InNvbGlkIixmYXNyOiJyZWd1bGFyIiwiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhc2w6ImxpZ2h0IiwiZmEtbGlnaHQiOiJsaWdodCIsZmFzdDoidGhpbiIsImZhLXRoaW4iOiJ0aGluIn0sInNoYXJwLWR1b3RvbmUiOntmYToic29saWQiLGZhc2RzOiJzb2xpZCIsImZhLXNvbGlkIjoic29saWQiLGZhc2RyOiJyZWd1bGFyIiwiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhc2RsOiJsaWdodCIsImZhLWxpZ2h0IjoibGlnaHQiLGZhc2R0OiJ0aGluIiwiZmEtdGhpbiI6InRoaW4ifSxzbGFiOnsiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhc2xyOiJyZWd1bGFyIn0sInNsYWItcHJlc3MiOnsiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhc2xwcjoicmVndWxhciJ9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6ImxpZ2h0IixmYXRsOiJsaWdodCJ9LHdoaXRlYm9hcmQ6eyJmYS1zZW1pYm9sZCI6InNlbWlib2xkIixmYXdzYjoic2VtaWJvbGQifSxub3Rkb2c6eyJmYS1zb2xpZCI6InNvbGlkIixmYW5zOiJzb2xpZCJ9LCJub3Rkb2ctZHVvIjp7ImZhLXNvbGlkIjoic29saWQiLGZhbmRzOiJzb2xpZCJ9LGV0Y2g6eyJmYS1zb2xpZCI6InNvbGlkIixmYWVzOiJzb2xpZCJ9LGdyYXBoaXRlOnsiZmEtdGhpbiI6InRoaW4iLGZhZ3Q6InRoaW4ifSxqZWxseTp7ImZhLXJlZ3VsYXIiOiJyZWd1bGFyIixmYWpyOiJyZWd1bGFyIn0sImplbGx5LWZpbGwiOnsiZmEtcmVndWxhciI6InJlZ3VsYXIiLGZhamZyOiJyZWd1bGFyIn0sImplbGx5LWR1byI6eyJmYS1yZWd1bGFyIjoicmVndWxhciIsZmFqZHI6InJlZ3VsYXIifSxjaGlzZWw6eyJmYS1yZWd1bGFyIjoicmVndWxhciIsZmFjcjoicmVndWxhciJ9LHV0aWxpdHk6eyJmYS1zZW1pYm9sZCI6InNlbWlib2xkIixmYXVzYjoic2VtaWJvbGQifSwidXRpbGl0eS1kdW8iOnsiZmEtc2VtaWJvbGQiOiJzZW1pYm9sZCIsZmF1ZHNiOiJzZW1pYm9sZCJ9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOiJzZW1pYm9sZCIsZmF1ZnNiOiJzZW1pYm9sZCJ9fSxNSHQ9e0dST1VQOiJkdW90b25lLWdyb3VwIixTV0FQX09QQUNJVFk6InN3YXAtb3BhY2l0eSIsUFJJTUFSWToicHJpbWFyeSIsU0VDT05EQVJZOiJzZWNvbmRhcnkifSxJNWU9WyJmYS1jbGFzc2ljIiwiZmEtZHVvdG9uZSIsImZhLXNoYXJwIiwiZmEtc2hhcnAtZHVvdG9uZSIsImZhLXRodW1icHJpbnQiLCJmYS13aGl0ZWJvYXJkIiwiZmEtbm90ZG9nIiwiZmEtbm90ZG9nLWR1byIsImZhLWNoaXNlbCIsImZhLWV0Y2giLCJmYS1ncmFwaGl0ZSIsImZhLWplbGx5IiwiZmEtamVsbHktZmlsbCIsImZhLWplbGx5LWR1byIsImZhLXNsYWIiLCJmYS1zbGFiLXByZXNzIiwiZmEtdXRpbGl0eSIsImZhLXV0aWxpdHktZHVvIiwiZmEtdXRpbGl0eS1maWxsIl0sQzI9ImNsYXNzaWMiLGs1PSJkdW90b25lIixONWU9InNoYXJwIixGNWU9InNoYXJwLWR1b3RvbmUiLE81ZT0iY2hpc2VsIixSNWU9ImV0Y2giLEI1ZT0iZ3JhcGhpdGUiLEg1ZT0iamVsbHkiLHE1ZT0iamVsbHktZHVvIixWNWU9ImplbGx5LWZpbGwiLGo1ZT0ibm90ZG9nIixVNWU9Im5vdGRvZy1kdW8iLFc1ZT0ic2xhYiIsRzVlPSJzbGFiLXByZXNzIixZNWU9InRodW1icHJpbnQiLFo1ZT0idXRpbGl0eSIsWDVlPSJ1dGlsaXR5LWR1byIsSzVlPSJ1dGlsaXR5LWZpbGwiLFE1ZT0id2hpdGVib2FyZCIsekh0PSJDbGFzc2ljIixrSHQ9IkR1b3RvbmUiLFNIdD0iU2hhcnAiLENIdD0iU2hhcnAgRHVvdG9uZSIsX0h0PSJDaGlzZWwiLFRIdD0iRXRjaCIsTEh0PSJHcmFwaGl0ZSIsJEh0PSJKZWxseSIsQUh0PSJKZWxseSBEdW8iLERIdD0iSmVsbHkgRmlsbCIsRUh0PSJOb3Rkb2ciLFBIdD0iTm90ZG9nIER1byIsSUh0PSJTbGFiIixOSHQ9IlNsYWIgUHJlc3MiLEZIdD0iVGh1bWJwcmludCIsT0h0PSJVdGlsaXR5IixSSHQ9IlV0aWxpdHkgRHVvIixCSHQ9IlV0aWxpdHkgRmlsbCIsSEh0PSJXaGl0ZWJvYXJkIixKNWU9W0MyLGs1LE41ZSxGNWUsTzVlLFI1ZSxCNWUsSDVlLHE1ZSxWNWUsajVlLFU1ZSxXNWUsRzVlLFk1ZSxaNWUsWDVlLEs1ZSxRNWVdLFFZMT0oQUQ9e30sZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoQUQsQzIsekh0KSxrNSxrSHQpLE41ZSxTSHQpLEY1ZSxDSHQpLE81ZSxfSHQpLFI1ZSxUSHQpLEI1ZSxMSHQpLEg1ZSwkSHQpLHE1ZSxBSHQpLFY1ZSxESHQpLGd0KGd0KGd0KGd0KGd0KGd0KGd0KGd0KGd0KEFELGo1ZSxFSHQpLFU1ZSxQSHQpLFc1ZSxJSHQpLEc1ZSxOSHQpLFk1ZSxGSHQpLFo1ZSxPSHQpLFg1ZSxSSHQpLEs1ZSxCSHQpLFE1ZSxISHQpKSxxSHQ9e2NsYXNzaWM6ezkwMDoiZmFzIiw0MDA6ImZhciIsbm9ybWFsOiJmYXIiLDMwMDoiZmFsIiwxMDA6ImZhdCJ9LGR1b3RvbmU6ezkwMDoiZmFkIiw0MDA6ImZhZHIiLDMwMDoiZmFkbCIsMTAwOiJmYWR0In0sc2hhcnA6ezkwMDoiZmFzcyIsNDAwOiJmYXNyIiwzMDA6ImZhc2wiLDEwMDoiZmFzdCJ9LCJzaGFycC1kdW90b25lIjp7OTAwOiJmYXNkcyIsNDAwOiJmYXNkciIsMzAwOiJmYXNkbCIsMTAwOiJmYXNkdCJ9LHNsYWI6ezQwMDoiZmFzbHIifSwic2xhYi1wcmVzcyI6ezQwMDoiZmFzbHByIn0sd2hpdGVib2FyZDp7NjAwOiJmYXdzYiJ9LHRodW1icHJpbnQ6ezMwMDoiZmF0bCJ9LG5vdGRvZzp7OTAwOiJmYW5zIn0sIm5vdGRvZy1kdW8iOns5MDA6ImZhbmRzIn0sZXRjaDp7OTAwOiJmYWVzIn0sZ3JhcGhpdGU6ezEwMDoiZmFndCJ9LGNoaXNlbDp7NDAwOiJmYWNyIn0samVsbHk6ezQwMDoiZmFqciJ9LCJqZWxseS1maWxsIjp7NDAwOiJmYWpmciJ9LCJqZWxseS1kdW8iOns0MDA6ImZhamRyIn0sdXRpbGl0eTp7NjAwOiJmYXVzYiJ9LCJ1dGlsaXR5LWR1byI6ezYwMDoiZmF1ZHNiIn0sInV0aWxpdHktZmlsbCI6ezYwMDoiZmF1ZnNiIn19LFZIdD17IkZvbnQgQXdlc29tZSA3IEZyZWUiOns5MDA6ImZhcyIsNDAwOiJmYXIifSwiRm9udCBBd2Vzb21lIDcgUHJvIjp7OTAwOiJmYXMiLDQwMDoiZmFyIixub3JtYWw6ImZhciIsMzAwOiJmYWwiLDEwMDoiZmF0In0sIkZvbnQgQXdlc29tZSA3IEJyYW5kcyI6ezQwMDoiZmFiIixub3JtYWw6ImZhYiJ9LCJGb250IEF3ZXNvbWUgNyBEdW90b25lIjp7OTAwOiJmYWQiLDQwMDoiZmFkciIsbm9ybWFsOiJmYWRyIiwzMDA6ImZhZGwiLDEwMDoiZmFkdCJ9LCJGb250IEF3ZXNvbWUgNyBTaGFycCI6ezkwMDoiZmFzcyIsNDAwOiJmYXNyIixub3JtYWw6ImZhc3IiLDMwMDoiZmFzbCIsMTAwOiJmYXN0In0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOns5MDA6ImZhc2RzIiw0MDA6ImZhc2RyIixub3JtYWw6ImZhc2RyIiwzMDA6ImZhc2RsIiwxMDA6ImZhc2R0In0sIkZvbnQgQXdlc29tZSA3IEplbGx5Ijp7NDAwOiJmYWpyIixub3JtYWw6ImZhanIifSwiRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCI6ezQwMDoiZmFqZnIiLG5vcm1hbDoiZmFqZnIifSwiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjp7NDAwOiJmYWpkciIsbm9ybWFsOiJmYWpkciJ9LCJGb250IEF3ZXNvbWUgNyBTbGFiIjp7NDAwOiJmYXNsciIsbm9ybWFsOiJmYXNsciJ9LCJGb250IEF3ZXNvbWUgNyBTbGFiIFByZXNzIjp7NDAwOiJmYXNscHIiLG5vcm1hbDoiZmFzbHByIn0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6ImZhdGwiLG5vcm1hbDoiZmF0bCJ9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6ImZhbnMiLG5vcm1hbDoiZmFucyJ9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOiJmYW5kcyIsbm9ybWFsOiJmYW5kcyJ9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOiJmYWVzIixub3JtYWw6ImZhZXMifSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6ImZhZ3QiLG5vcm1hbDoiZmFndCJ9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6ImZhY3IiLG5vcm1hbDoiZmFjciJ9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOiJmYXdzYiIsbm9ybWFsOiJmYXdzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOiJmYXVzYiIsbm9ybWFsOiJmYXVzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDoiZmF1ZHNiIixub3JtYWw6ImZhdWRzYiJ9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6ImZhdWZzYiIsbm9ybWFsOiJmYXVmc2IifX0sakh0PW5ldyBNYXAoW1siY2xhc3NpYyIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXMiLGRlZmF1bHRTdHlsZUlkOiJzb2xpZCIsc3R5bGVJZHM6WyJzb2xpZCIsInJlZ3VsYXIiLCJsaWdodCIsInRoaW4iLCJicmFuZHMiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbImR1b3RvbmUiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmFkIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzaGFycCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXNzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzaGFycC1kdW90b25lIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2RzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiLCJyZWd1bGFyIiwibGlnaHQiLCJ0aGluIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJjaGlzZWwiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmFjciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsiZXRjaCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWVzIixkZWZhdWx0U3R5bGVJZDoic29saWQiLHN0eWxlSWRzOlsic29saWQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbImdyYXBoaXRlIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhZ3QiLGRlZmF1bHRTdHlsZUlkOiJ0aGluIixzdHlsZUlkczpbInRoaW4iXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDoxMDB9XSxbImplbGx5Iix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhanIiLGRlZmF1bHRTdHlsZUlkOiJyZWd1bGFyIixzdHlsZUlkczpbInJlZ3VsYXIiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbImplbGx5LWR1byIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWpkciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsiamVsbHktZmlsbCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYWpmciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsibm90ZG9nIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhbnMiLGRlZmF1bHRTdHlsZUlkOiJzb2xpZCIsc3R5bGVJZHM6WyJzb2xpZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFsibm90ZG9nLWR1byIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYW5kcyIsZGVmYXVsdFN0eWxlSWQ6InNvbGlkIixzdHlsZUlkczpbInNvbGlkIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sWyJzbGFiIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2xyIixkZWZhdWx0U3R5bGVJZDoicmVndWxhciIsc3R5bGVJZHM6WyJyZWd1bGFyIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sWyJzbGFiLXByZXNzIix7ZGVmYXVsdFNob3J0UHJlZml4SWQ6ImZhc2xwciIsZGVmYXVsdFN0eWxlSWQ6InJlZ3VsYXIiLHN0eWxlSWRzOlsicmVndWxhciJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFsidGh1bWJwcmludCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXRsIixkZWZhdWx0U3R5bGVJZDoibGlnaHQiLHN0eWxlSWRzOlsibGlnaHQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDozMDB9XSxbInV0aWxpdHkiLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmF1c2IiLGRlZmF1bHRTdHlsZUlkOiJzZW1pYm9sZCIsc3R5bGVJZHM6WyJzZW1pYm9sZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dLFsidXRpbGl0eS1kdW8iLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDoiZmF1ZHNiIixkZWZhdWx0U3R5bGVJZDoic2VtaWJvbGQiLHN0eWxlSWRzOlsic2VtaWJvbGQiXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbInV0aWxpdHktZmlsbCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXVmc2IiLGRlZmF1bHRTdHlsZUlkOiJzZW1pYm9sZCIsc3R5bGVJZHM6WyJzZW1pYm9sZCJdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dLFsid2hpdGVib2FyZCIse2RlZmF1bHRTaG9ydFByZWZpeElkOiJmYXdzYiIsZGVmYXVsdFN0eWxlSWQ6InNlbWlib2xkIixzdHlsZUlkczpbInNlbWlib2xkIl0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV1dKSxVSHQ9e2NoaXNlbDp7cmVndWxhcjoiZmFjciJ9LGNsYXNzaWM6e2JyYW5kczoiZmFiIixsaWdodDoiZmFsIixyZWd1bGFyOiJmYXIiLHNvbGlkOiJmYXMiLHRoaW46ImZhdCJ9LGR1b3RvbmU6e2xpZ2h0OiJmYWRsIixyZWd1bGFyOiJmYWRyIixzb2xpZDoiZmFkIix0aGluOiJmYWR0In0sZXRjaDp7c29saWQ6ImZhZXMifSxncmFwaGl0ZTp7dGhpbjoiZmFndCJ9LGplbGx5OntyZWd1bGFyOiJmYWpyIn0sImplbGx5LWR1byI6e3JlZ3VsYXI6ImZhamRyIn0sImplbGx5LWZpbGwiOntyZWd1bGFyOiJmYWpmciJ9LG5vdGRvZzp7c29saWQ6ImZhbnMifSwibm90ZG9nLWR1byI6e3NvbGlkOiJmYW5kcyJ9LHNoYXJwOntsaWdodDoiZmFzbCIscmVndWxhcjoiZmFzciIsc29saWQ6ImZhc3MiLHRoaW46ImZhc3QifSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OiJmYXNkbCIscmVndWxhcjoiZmFzZHIiLHNvbGlkOiJmYXNkcyIsdGhpbjoiZmFzZHQifSxzbGFiOntyZWd1bGFyOiJmYXNsciJ9LCJzbGFiLXByZXNzIjp7cmVndWxhcjoiZmFzbHByIn0sdGh1bWJwcmludDp7bGlnaHQ6ImZhdGwifSx1dGlsaXR5OntzZW1pYm9sZDoiZmF1c2IifSwidXRpbGl0eS1kdW8iOntzZW1pYm9sZDoiZmF1ZHNiIn0sInV0aWxpdHktZmlsbCI6e3NlbWlib2xkOiJmYXVmc2IifSx3aGl0ZWJvYXJkOntzZW1pYm9sZDoiZmF3c2IifX0sZThlPVsiZmFrIiwiZmEta2l0IiwiZmFrZCIsImZhLWtpdC1kdW90b25lIl0sdDhlPXtraXQ6e2Zhazoia2l0IiwiZmEta2l0Ijoia2l0In0sImtpdC1kdW90b25lIjp7ZmFrZDoia2l0LWR1b3RvbmUiLCJmYS1raXQtZHVvdG9uZSI6ImtpdC1kdW90b25lIn19LFdIdD1bImtpdCJdLEdIdD0ia2l0IixZSHQ9ImtpdC1kdW90b25lIixaSHQ9IktpdCIsWEh0PSJLaXQgRHVvdG9uZSIsSlkxPWd0KGd0KHt9LEdIdCxaSHQpLFlIdCxYSHQpLEtIdD17a2l0OnsiZmEta2l0IjoiZmFrIn0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjoiZmFrZCJ9fSxRSHQ9eyJGb250IEF3ZXNvbWUgS2l0Ijp7NDAwOiJmYWsiLG5vcm1hbDoiZmFrIn0sIkZvbnQgQXdlc29tZSBLaXQgRHVvdG9uZSI6ezQwMDoiZmFrZCIsbm9ybWFsOiJmYWtkIn19LEpIdD17a2l0OntmYWs6ImZhLWtpdCJ9LCJraXQtZHVvdG9uZSI6e2Zha2Q6ImZhLWtpdC1kdW90b25lIn19LGE4ZT17a2l0OntraXQ6ImZhayJ9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6ImZha2QifX0sX2Y9e0dST1VQOiJkdW90b25lLWdyb3VwIixTV0FQX09QQUNJVFk6InN3YXAtb3BhY2l0eSIsUFJJTUFSWToicHJpbWFyeSIsU0VDT05EQVJZOiJzZWNvbmRhcnkifSxlcXQ9WyJmYS1jbGFzc2ljIiwiZmEtZHVvdG9uZSIsImZhLXNoYXJwIiwiZmEtc2hhcnAtZHVvdG9uZSIsImZhLXRodW1icHJpbnQiLCJmYS13aGl0ZWJvYXJkIiwiZmEtbm90ZG9nIiwiZmEtbm90ZG9nLWR1byIsImZhLWNoaXNlbCIsImZhLWV0Y2giLCJmYS1ncmFwaGl0ZSIsImZhLWplbGx5IiwiZmEtamVsbHktZmlsbCIsImZhLWplbGx5LWR1byIsImZhLXNsYWIiLCJmYS1zbGFiLXByZXNzIiwiZmEtdXRpbGl0eSIsImZhLXV0aWxpdHktZHVvIiwiZmEtdXRpbGl0eS1maWxsIl0sdHF0PSJjbGFzc2ljIixhcXQ9ImR1b3RvbmUiLGlxdD0ic2hhcnAiLHJxdD0ic2hhcnAtZHVvdG9uZSIsc3F0PSJjaGlzZWwiLG5xdD0iZXRjaCIsb3F0PSJncmFwaGl0ZSIsbHF0PSJqZWxseSIsY3F0PSJqZWxseS1kdW8iLGRxdD0iamVsbHktZmlsbCIscHF0PSJub3Rkb2ciLGhxdD0ibm90ZG9nLWR1byIsdXF0PSJzbGFiIixmcXQ9InNsYWItcHJlc3MiLG1xdD0idGh1bWJwcmludCIsZ3F0PSJ1dGlsaXR5IixicXQ9InV0aWxpdHktZHVvIix2cXQ9InV0aWxpdHktZmlsbCIseXF0PSJ3aGl0ZWJvYXJkIix4cXQ9IkNsYXNzaWMiLHdxdD0iRHVvdG9uZSIsTXF0PSJTaGFycCIsenF0PSJTaGFycCBEdW90b25lIixrcXQ9IkNoaXNlbCIsU3F0PSJFdGNoIixDcXQ9IkdyYXBoaXRlIixfcXQ9IkplbGx5IixUcXQ9IkplbGx5IER1byIsTHF0PSJKZWxseSBGaWxsIiwkcXQ9Ik5vdGRvZyIsQXF0PSJOb3Rkb2cgRHVvIixEcXQ9IlNsYWIiLEVxdD0iU2xhYiBQcmVzcyIsUHF0PSJUaHVtYnByaW50IixJcXQ9IlV0aWxpdHkiLE5xdD0iVXRpbGl0eSBEdW8iLEZxdD0iVXRpbGl0eSBGaWxsIixPcXQ9IldoaXRlYm9hcmQiLGVaMT0oREQ9e30sZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoREQsdHF0LHhxdCksYXF0LHdxdCksaXF0LE1xdCkscnF0LHpxdCksc3F0LGtxdCksbnF0LFNxdCksb3F0LENxdCksbHF0LF9xdCksY3F0LFRxdCksZHF0LExxdCksZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoZ3QoREQscHF0LCRxdCksaHF0LEFxdCksdXF0LERxdCksZnF0LEVxdCksbXF0LFBxdCksZ3F0LElxdCksYnF0LE5xdCksdnF0LEZxdCkseXF0LE9xdCkpLFJxdD0ia2l0IixCcXQ9ImtpdC1kdW90b25lIixIcXQ9IktpdCIscXF0PSJLaXQgRHVvdG9uZSIsdFoxPWd0KGd0KHt9LFJxdCxIcXQpLEJxdCxxcXQpLFZxdD17Y2xhc3NpYzp7ImZhLWJyYW5kcyI6ImZhYiIsImZhLWR1b3RvbmUiOiJmYWQiLCJmYS1saWdodCI6ImZhbCIsImZhLXJlZ3VsYXIiOiJmYXIiLCJmYS1zb2xpZCI6ImZhcyIsImZhLXRoaW4iOiJmYXQifSxkdW90b25lOnsiZmEtcmVndWxhciI6ImZhZHIiLCJmYS1saWdodCI6ImZhZGwiLCJmYS10aGluIjoiZmFkdCJ9LHNoYXJwOnsiZmEtc29saWQiOiJmYXNzIiwiZmEtcmVndWxhciI6ImZhc3IiLCJmYS1saWdodCI6ImZhc2wiLCJmYS10aGluIjoiZmFzdCJ9LCJzaGFycC1kdW90b25lIjp7ImZhLXNvbGlkIjoiZmFzZHMiLCJmYS1yZWd1bGFyIjoiZmFzZHIiLCJmYS1saWdodCI6ImZhc2RsIiwiZmEtdGhpbiI6ImZhc2R0In0sc2xhYjp7ImZhLXJlZ3VsYXIiOiJmYXNsciJ9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOiJmYXNscHIifSx3aGl0ZWJvYXJkOnsiZmEtc2VtaWJvbGQiOiJmYXdzYiJ9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6ImZhdGwifSxub3Rkb2c6eyJmYS1zb2xpZCI6ImZhbnMifSwibm90ZG9nLWR1byI6eyJmYS1zb2xpZCI6ImZhbmRzIn0sZXRjaDp7ImZhLXNvbGlkIjoiZmFlcyJ9LGdyYXBoaXRlOnsiZmEtdGhpbiI6ImZhZ3QifSxqZWxseTp7ImZhLXJlZ3VsYXIiOiJmYWpyIn0sImplbGx5LWZpbGwiOnsiZmEtcmVndWxhciI6ImZhamZyIn0sImplbGx5LWR1byI6eyJmYS1yZWd1bGFyIjoiZmFqZHIifSxjaGlzZWw6eyJmYS1yZWd1bGFyIjoiZmFjciJ9LHV0aWxpdHk6eyJmYS1zZW1pYm9sZCI6ImZhdXNiIn0sInV0aWxpdHktZHVvIjp7ImZhLXNlbWlib2xkIjoiZmF1ZHNiIn0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6ImZhdWZzYiJ9fSxqcXQ9e2NsYXNzaWM6WyJmYXMiLCJmYXIiLCJmYWwiLCJmYXQiLCJmYWQiXSxkdW90b25lOlsiZmFkciIsImZhZGwiLCJmYWR0Il0sc2hhcnA6WyJmYXNzIiwiZmFzciIsImZhc2wiLCJmYXN0Il0sInNoYXJwLWR1b3RvbmUiOlsiZmFzZHMiLCJmYXNkciIsImZhc2RsIiwiZmFzZHQiXSxzbGFiOlsiZmFzbHIiXSwic2xhYi1wcmVzcyI6WyJmYXNscHIiXSx3aGl0ZWJvYXJkOlsiZmF3c2IiXSx0aHVtYnByaW50OlsiZmF0bCJdLG5vdGRvZzpbImZhbnMiXSwibm90ZG9nLWR1byI6WyJmYW5kcyJdLGV0Y2g6WyJmYWVzIl0sZ3JhcGhpdGU6WyJmYWd0Il0samVsbHk6WyJmYWpyIl0sImplbGx5LWZpbGwiOlsiZmFqZnIiXSwiamVsbHktZHVvIjpbImZhamRyIl0sY2hpc2VsOlsiZmFjciJdLHV0aWxpdHk6WyJmYXVzYiJdLCJ1dGlsaXR5LWR1byI6WyJmYXVkc2IiXSwidXRpbGl0eS1maWxsIjpbImZhdWZzYiJdfSxFRD17Y2xhc3NpYzp7ZmFiOiJmYS1icmFuZHMiLGZhZDoiZmEtZHVvdG9uZSIsZmFsOiJmYS1saWdodCIsZmFyOiJmYS1yZWd1bGFyIixmYXM6ImZhLXNvbGlkIixmYXQ6ImZhLXRoaW4ifSxkdW90b25lOntmYWRyOiJmYS1yZWd1bGFyIixmYWRsOiJmYS1saWdodCIsZmFkdDoiZmEtdGhpbiJ9LHNoYXJwOntmYXNzOiJmYS1zb2xpZCIsZmFzcjoiZmEtcmVndWxhciIsZmFzbDoiZmEtbGlnaHQiLGZhc3Q6ImZhLXRoaW4ifSwic2hhcnAtZHVvdG9uZSI6e2Zhc2RzOiJmYS1zb2xpZCIsZmFzZHI6ImZhLXJlZ3VsYXIiLGZhc2RsOiJmYS1saWdodCIsZmFzZHQ6ImZhLXRoaW4ifSxzbGFiOntmYXNscjoiZmEtcmVndWxhciJ9LCJzbGFiLXByZXNzIjp7ZmFzbHByOiJmYS1yZWd1bGFyIn0sd2hpdGVib2FyZDp7ZmF3c2I6ImZhLXNlbWlib2xkIn0sdGh1bWJwcmludDp7ZmF0bDoiZmEtbGlnaHQifSxub3Rkb2c6e2ZhbnM6ImZhLXNvbGlkIn0sIm5vdGRvZy1kdW8iOntmYW5kczoiZmEtc29saWQifSxldGNoOntmYWVzOiJmYS1zb2xpZCJ9LGdyYXBoaXRlOntmYWd0OiJmYS10aGluIn0samVsbHk6e2ZhanI6ImZhLXJlZ3VsYXIifSwiamVsbHktZmlsbCI6e2ZhamZyOiJmYS1yZWd1bGFyIn0sImplbGx5LWR1byI6e2ZhamRyOiJmYS1yZWd1bGFyIn0sY2hpc2VsOntmYWNyOiJmYS1yZWd1bGFyIn0sdXRpbGl0eTp7ZmF1c2I6ImZhLXNlbWlib2xkIn0sInV0aWxpdHktZHVvIjp7ZmF1ZHNiOiJmYS1zZW1pYm9sZCJ9LCJ1dGlsaXR5LWZpbGwiOntmYXVmc2I6ImZhLXNlbWlib2xkIn19LFVxdD1bImZhLXNvbGlkIiwiZmEtcmVndWxhciIsImZhLWxpZ2h0IiwiZmEtdGhpbiIsImZhLWR1b3RvbmUiLCJmYS1icmFuZHMiLCJmYS1zZW1pYm9sZCJdLGk4ZT1bImZhIiwiZmFzIiwiZmFyIiwiZmFsIiwiZmF0IiwiZmFkIiwiZmFkciIsImZhZGwiLCJmYWR0IiwiZmFiIiwiZmFzcyIsImZhc3IiLCJmYXNsIiwiZmFzdCIsImZhc2RzIiwiZmFzZHIiLCJmYXNkbCIsImZhc2R0IiwiZmFzbHIiLCJmYXNscHIiLCJmYXdzYiIsImZhdGwiLCJmYW5zIiwiZmFuZHMiLCJmYWVzIiwiZmFndCIsImZhanIiLCJmYWpmciIsImZhamRyIiwiZmFjciIsImZhdXNiIiwiZmF1ZHNiIiwiZmF1ZnNiIl0uY29uY2F0KGVxdCxVcXQpLFdxdD1bInNvbGlkIiwicmVndWxhciIsImxpZ2h0IiwidGhpbiIsImR1b3RvbmUiLCJicmFuZHMiLCJzZW1pYm9sZCJdLHI4ZT1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLEdxdD1yOGUuY29uY2F0KFsxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0pLFlxdD1bImF3IiwiZnciLCJwdWxsLWxlZnQiLCJwdWxsLXJpZ2h0Il0sWnF0PVtdLmNvbmNhdChqaShPYmplY3Qua2V5cyhqcXQpKSxXcXQsWXF0LFsiMnhzIiwieHMiLCJzbSIsImxnIiwieGwiLCIyeGwiLCJiZWF0IiwiYm9yZGVyIiwiZmFkZSIsImJlYXQtZmFkZSIsImJvdW5jZSIsImZsaXAtYm90aCIsImZsaXAtaG9yaXpvbnRhbCIsImZsaXAtdmVydGljYWwiLCJmbGlwIiwiaW52ZXJzZSIsImxheWVycyIsImxheWVycy1ib3R0b20tbGVmdCIsImxheWVycy1ib3R0b20tcmlnaHQiLCJsYXllcnMtY291bnRlciIsImxheWVycy10ZXh0IiwibGF5ZXJzLXRvcC1sZWZ0IiwibGF5ZXJzLXRvcC1yaWdodCIsImxpIiwicHVsbC1lbmQiLCJwdWxsLXN0YXJ0IiwicHVsc2UiLCJyb3RhdGUtMTgwIiwicm90YXRlLTI3MCIsInJvdGF0ZS05MCIsInJvdGF0ZS1ieSIsInNoYWtlIiwic3Bpbi1wdWxzZSIsInNwaW4tcmV2ZXJzZSIsInNwaW4iLCJzdGFjay0xeCIsInN0YWNrLTJ4Iiwic3RhY2siLCJ1bCIsIndpZHRoLWF1dG8iLCJ3aWR0aC1maXhlZCIsX2YuR1JPVVAsX2YuU1dBUF9PUEFDSVRZLF9mLlBSSU1BUlksX2YuU0VDT05EQVJZXSkuY29uY2F0KHI4ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiIuY29uY2F0KHQsIngiKX0pKS5jb25jYXQoR3F0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4idy0iLmNvbmNhdCh0KX0pKSxYcXQ9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOiJmYXMiLDQwMDoiZmFyIn0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDoiZmFzIiw0MDA6ImZhciIsbm9ybWFsOiJmYXIiLDMwMDoiZmFsIn0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDoiZmFiIixub3JtYWw6ImZhYiJ9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOiJmYWQifX0sUHM9Il9fX0ZPTlRfQVdFU09NRV9fXyIsUEQ9MTYsczhlPSJmYSIsbjhlPSJzdmctaW5saW5lLS1mYSIsSDA9ImRhdGEtZmEtaTJzdmciLElEPSJkYXRhLWZhLXBzZXVkby1lbGVtZW50IixLcXQ9ImRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZyIsTkQ9ImRhdGEtcHJlZml4IixGRD0iZGF0YS1pY29uIixvOGU9ImZvbnRhd2Vzb21lLWkyc3ZnIixRcXQ9ImFzeW5jIixKcXQ9WyJIVE1MIiwiSEVBRCIsIlNUWUxFIiwiU0NSSVBUIl0sbDhlPVsiOjpiZWZvcmUiLCI6OmFmdGVyIiwiOmJlZm9yZSIsIjphZnRlciJdLGM4ZT0oZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSkoKTtkOGU9TmUoe30sUDVlKTtkOGVbQzJdPU5lKE5lKE5lKE5lKHt9LHsiZmEtZHVvdG9uZSI6ImR1b3RvbmUifSksUDVlW0MyXSksdDhlLmtpdCksdDhlWyJraXQtZHVvdG9uZSJdKTtlVnQ9UzUoZDhlKSxPRD1OZSh7fSxVSHQpO09EW0MyXT1OZShOZShOZShOZSh7fSx7ZHVvdG9uZToiZmFkIn0pLE9EW0MyXSksYThlLmtpdCksYThlWyJraXQtZHVvdG9uZSJdKTtwOGU9UzUoT0QpLFJEPU5lKHt9LEVEKTtSRFtDMl09TmUoTmUoe30sUkRbQzJdKSxKSHQua2l0KTtCRD1TNShSRCksSEQ9TmUoe30sVnF0KTtIRFtDMl09TmUoTmUoe30sSERbQzJdKSxLSHQua2l0KTthWjE9UzUoSEQpLHRWdD14SHQsaDhlPSJmYS1sYXllcnMtdGV4dCIsYVZ0PXdIdCxpVnQ9TmUoe30scUh0KSxpWjE9UzUoaVZ0KSxyVnQ9WyJjbGFzcyIsImRhdGEtcHJlZml4IiwiZGF0YS1pY29uIiwiZGF0YS1mYS10cmFuc2Zvcm0iLCJkYXRhLWZhLW1hc2siXSxxRD1NSHQsc1Z0PVtdLmNvbmNhdChqaShXSHQpLGppKFpxdCkpLEM1PWlvLkZvbnRBd2Vzb21lQ29uZmlnfHx7fTt5MSYmdHlwZW9mIHkxLnF1ZXJ5U2VsZWN0b3I9PSJmdW5jdGlvbiImJih1OGU9W1siZGF0YS1mYW1pbHktcHJlZml4IiwiZmFtaWx5UHJlZml4Il0sWyJkYXRhLWNzcy1wcmVmaXgiLCJjc3NQcmVmaXgiXSxbImRhdGEtZmFtaWx5LWRlZmF1bHQiLCJmYW1pbHlEZWZhdWx0Il0sWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCJzdHlsZURlZmF1bHQiXSxbImRhdGEtcmVwbGFjZW1lbnQtY2xhc3MiLCJyZXBsYWNlbWVudENsYXNzIl0sWyJkYXRhLWF1dG8tcmVwbGFjZS1zdmciLCJhdXRvUmVwbGFjZVN2ZyJdLFsiZGF0YS1hdXRvLWFkZC1jc3MiLCJhdXRvQWRkQ3NzIl0sWyJkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHMiLCJzZWFyY2hQc2V1ZG9FbGVtZW50cyJdLFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzIiwic2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncyJdLFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbiIsInNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4iXSxbImRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnMiLCJvYnNlcnZlTXV0YXRpb25zIl0sWyJkYXRhLW11dGF0ZS1hcHByb2FjaCIsIm11dGF0ZUFwcHJvYWNoIl0sWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwia2VlcE9yaWdpbmFsU291cmNlIl0sWyJkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2UiLCJtZWFzdXJlUGVyZm9ybWFuY2UiXSxbImRhdGEtc2hvdy1taXNzaW5nLWljb25zIiwic2hvd01pc3NpbmdJY29ucyJdXSx1OGUuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1rZih0LDIpLGE9ZVswXSxpPWVbMV0scj1vVnQoblZ0KGEpKTtyIT1udWxsJiYoQzVbaV09cil9KSk7ZjhlPXtzdHlsZURlZmF1bHQ6InNvbGlkIixmYW1pbHlEZWZhdWx0OkMyLGNzc1ByZWZpeDpzOGUscmVwbGFjZW1lbnRDbGFzczpuOGUsYXV0b1JlcGxhY2VTdmc6ITAsYXV0b0FkZENzczohMCxzZWFyY2hQc2V1ZG9FbGVtZW50czohMSxzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46ITEsb2JzZXJ2ZU11dGF0aW9uczohMCxtdXRhdGVBcHByb2FjaDoiYXN5bmMiLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07QzUuZmFtaWx5UHJlZml4JiYoQzUuY3NzUHJlZml4PUM1LmZhbWlseVByZWZpeCk7bGw9TmUoTmUoe30sZjhlKSxDNSk7bGwuYXV0b1JlcGxhY2VTdmd8fChsbC5vYnNlcnZlTXV0YXRpb25zPSExKTtldD17fTtPYmplY3Qua2V5cyhmOGUpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV0LHQse2VudW1lcmFibGU6ITAsc2V0OmZ1bmN0aW9uKGEpe2xsW3RdPWEsXzUuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gaShldCl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGxsW3RdfX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGV0LCJmYW1pbHlQcmVmaXgiLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihlKXtsbC5jc3NQcmVmaXg9ZSxfNS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhKGV0KX0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbGwuY3NzUHJlZml4fX0pLGlvLkZvbnRBd2Vzb21lQ29uZmlnPWV0O181PVtdO3JvPVBELFVyPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2RWdD0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiO2ZWdD1gOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJzsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFBybyc7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJzsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBCcmFuZHMnOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWInOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MnOwogIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkJzsKICAtLWZhLWZvbnQtdGh1bWJwcmludC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCc7CiAgLS1mYS1mb250LW5vdGRvZy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nJzsKICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byc7CiAgLS1mYS1mb250LWV0Y2gtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEV0Y2gnOwogIC0tZmEtZm9udC1ncmFwaGl0ZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBHcmFwaGl0ZSc7CiAgLS1mYS1mb250LWplbGx5LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5JzsKICAtLWZhLWZvbnQtamVsbHktZmlsbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsJzsKICAtLWZhLWZvbnQtamVsbHktZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5IER1byc7CiAgLS1mYS1mb250LWNoaXNlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBDaGlzZWwnOwogIC0tZmEtZm9udC11dGlsaXR5LXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5JzsKICAtLWZhLWZvbnQtdXRpbGl0eS1kdW8tc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRHVvJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1maWxsLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwnOwp9Cgouc3ZnLWlubGluZS0tZmEgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGRpc3BsYXk6IHZhcigtLWZhLWRpc3BsYXksIGlubGluZS1ibG9jayk7CiAgaGVpZ2h0OiAxZW07CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zbSB7CiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MTRlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGcgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLWxlZnQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGkgewogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgaW5zZXQtYmxvY2stc3RhcnQ6IDAuMjVlbTsgLyogc3luY2luZyB2ZXJ0aWNhbCBhbGlnbm1lbnQgd2l0aCBXZWIgRm9udCByZW5kZXJpbmcgKi8KfQoKLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouZmEtbGF5ZXJzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5mYS1sYXllcnMgLnN2Zy1pbmxpbmUtLWZhIHsKICBpbnNldDogMDsKICBtYXJnaW46IGF1dG87CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtdGV4dCB7CiAgbGVmdDogNTAlOwogIHRvcDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtY291bnRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmEtY291bnRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmYyNTNhKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7CiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpOwogIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7CiAgbWluLXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1pbi13aWR0aCwgMS41ZW0pOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtY291bnRlci1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tbGVmdCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0Owp9CgouZmEtbGF5ZXJzLXRvcC1yaWdodCB7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtdG9wLWxlZnQgewogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgouZmEtMXggewogIGZvbnQtc2l6ZTogMWVtOwp9CgouZmEtMnggewogIGZvbnQtc2l6ZTogMmVtOwp9CgouZmEtM3ggewogIGZvbnQtc2l6ZTogM2VtOwp9CgouZmEtNHggewogIGZvbnQtc2l6ZTogNGVtOwp9CgouZmEtNXggewogIGZvbnQtc2l6ZTogNWVtOwp9CgouZmEtNnggewogIGZvbnQtc2l6ZTogNmVtOwp9CgouZmEtN3ggewogIGZvbnQtc2l6ZTogN2VtOwp9CgouZmEtOHggewogIGZvbnQtc2l6ZTogOGVtOwp9CgouZmEtOXggewogIGZvbnQtc2l6ZTogOWVtOwp9CgouZmEtMTB4IHsKICBmb250LXNpemU6IDEwZW07Cn0KCi5mYS0yeHMgewogIGZvbnQtc2l6ZTogY2FsYygxMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14cyB7CiAgZm9udC1zaXplOiBjYWxjKDEyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXNtIHsKICBmb250LXNpemU6IGNhbGMoMTQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtbGcgewogIGZvbnQtc2l6ZTogY2FsYygyMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDIwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14bCB7CiAgZm9udC1zaXplOiBjYWxjKDI0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDI0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDI0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLTJ4bCB7CiAgZm9udC1zaXplOiBjYWxjKDMyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDMycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMzIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDMyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXdpZHRoLWF1dG8gewogIC0tZmEtd2lkdGg6IGF1dG87Cn0KCi5mYS1mdywKLmZhLXdpZHRoLWZpeGVkIHsKICAtLWZhLXdpZHRoOiAxLjI1ZW07Cn0KCi5mYS11bCB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLWxpLW1hcmdpbiwgMi41ZW0pOwogIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGxpbmUtaGVpZ2h0OiBpbmhlcml0Owp9CgovKiBIZWFkcyBVcDogQm9yZGVyZWQgSWNvbnMgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXR1cmUhCiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhCiAgLSBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCBpbiB0aGlzIHZlcnNpb24gKnY3KSwgYnV0IGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBGb250IEF3ZXNvbWUgdjguCiovCi8qIE5vdGVzOgoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItd2lkdGggPSAxLzE2IGJ5IGRlZmF1bHQgKHRvIHJlbmRlciBhcyB+MXB4IGJhc2VkIG9uIGEgMTZweCBkZWZhdWx0IGZvbnQtc2l6ZSkKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXBhZGRpbmcgPQogICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KQogICoqIDQvMTYgZm9yIGhvcml6b250YWwgcGFkZGluZyAodG8gZ2l2ZSB+NHB4IG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbikKKi8KLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA2MjVlbSk7CiAgYm94LXNpemluZzogdmFyKC0tZmEtYm9yZGVyLWJveC1zaXppbmcsIGNvbnRlbnQtYm94KTsKICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCwKLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1wdWxsLXJpZ2h0LAouZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KCi5mYS1iZWF0IHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpOwp9CgouZmEtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpOwp9CgouZmEtYmVhdC1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTsKfQoKLmZhLWZsaXAgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbGlwOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1zaGFrZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNoYWtlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtc3BpbiB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLmZhLWJlYXQsCiAgLmZhLWJvdW5jZSwKICAuZmEtZmFkZSwKICAuZmEtYmVhdC1mYWRlLAogIC5mYS1mbGlwLAogIC5mYS1wdWxzZSwKICAuZmEtc2hha2UsCiAgLmZhLXNwaW4sCiAgLmZhLXNwaW4tcHVsc2UgewogICAgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdCB7CiAgMCUsIDkwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICA0NSUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYm91bmNlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDEwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApOwogIH0KICA1NyUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpOwogIH0KICA2NCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mYWRlIHsKICA1MCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7CiAgMCUsIDEwMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICA1MCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAgewogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zaGFrZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTsKICB9CiAgNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpOwogIH0KICA4JSwgMjQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7CiAgfQogIDEyJSwgMjglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTsKICB9CiAgMTYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZyk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7CiAgfQogIDMyJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTJkZWcpOwogIH0KICAzNiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTJkZWcpOwogIH0KICA0MCUsIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3BpbiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KLmZhLXJvdGF0ZS05MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwp9CgouZmEtcm90YXRlLTE4MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKfQoKLmZhLXJvdGF0ZS0yNzAgewogIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7Cn0KCi5mYS1mbGlwLWhvcml6b250YWwgewogIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpOwp9CgouZmEtZmxpcC12ZXJ0aWNhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7Cn0KCi5mYS1mbGlwLWJvdGgsCi5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgLTEpOwp9CgouZmEtcm90YXRlLWJ5IHsKICB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1yb3RhdGUtYW5nbGUsIDApKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wcmltYXJ5IHsKICBmaWxsOiB2YXIoLS1mYS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXByaW1hcnktb3BhY2l0eSwgMSk7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtc2Vjb25kYXJ5IHsKICBmaWxsOiB2YXIoLS1mYS1zZWNvbmRhcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXByaW1hcnkgewogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1zZWNvbmRhcnkgewogIG9wYWNpdHk6IHZhcigtLWZhLXByaW1hcnktb3BhY2l0eSwgMSk7Cn0KCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1wcmltYXJ5LAouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtc2Vjb25kYXJ5IHsKICBmaWxsOiBibGFjazsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLWludmVyc2UgewogIGZpbGw6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9CgouZmEtc3RhY2sgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDJlbTsKICBsaW5lLWhlaWdodDogMmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiAyLjVlbTsKfQoKLmZhLWludmVyc2UgewogIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTF4IHsKICAtLWZhLXdpZHRoOiAxLjI1ZW07CiAgaGVpZ2h0OiAxZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMnggewogIC0tZmEtd2lkdGg6IDIuNWVtOwogIGhlaWdodDogMmVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7Cn0KCi5mYS1zdGFjay0xeCwKLmZhLXN0YWNrLTJ4IHsKICBpbnNldDogMDsKICBtYXJnaW46IGF1dG87CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IHZhcigtLWZhLXN0YWNrLXotaW5kZXgsIGF1dG8pOwp9YDt2OGU9ITE7bVZ0PXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9tOntjc3M6YjhlLGluc2VydENzczpVRH19fSxob29rczpmdW5jdGlvbigpe3JldHVybntiZWZvcmVET01FbGVtZW50Q3JlYXRpb246ZnVuY3Rpb24oKXtVRCgpfSxiZWZvcmVJMnN2ZzpmdW5jdGlvbigpe1VEKCl9fX19LElzPWlvfHx7fTtJc1tQc118fChJc1tQc109e30pLElzW1BzXS5zdHlsZXN8fChJc1tQc10uc3R5bGVzPXt9KSxJc1tQc10uaG9va3N8fChJc1tQc10uaG9va3M9e30pLElzW1BzXS5zaGltc3x8KElzW1BzXS5zaGltcz1bXSk7VWk9SXNbUHNdLHk4ZT1bXSx4OGU9ZnVuY3Rpb24oKXt5MS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix4OGUpLExmPTEseThlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSl9LExmPSExO0VzJiYoTGY9KHkxLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD8vXmxvYWRlZHxeYy86L15sb2FkZWR8Xml8XmMvKS50ZXN0KHkxLnJlYWR5U3RhdGUpLExmfHx5MS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix4OGUpKTtiVnQ9ZnVuY3Rpb24oZSxhKXtyZXR1cm4gZnVuY3Rpb24oaSxyLHMsbil7cmV0dXJuIGUuY2FsbChhLGkscixzLG4pfX0sV0Q9ZnVuY3Rpb24oZSxhLGkscil7dmFyIHM9T2JqZWN0LmtleXMoZSksbj1zLmxlbmd0aCxvPXIhPT12b2lkIDA/YlZ0KGEscik6YSxkLGMscDtmb3IoaT09PXZvaWQgMD8oZD0xLHA9ZVtzWzBdXSk6KGQ9MCxwPWkpO2Q8bjtkKyspYz1zW2RdLHA9byhwLGVbY10sYyxlKTtyZXR1cm4gcH07WUQ9MSxXaT0yLHJaMT1bW1dpLFoyKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi4qcGF0aC4qZD0iKFteIl0qKSIvLHtkMjoyLGQxOjN9KV0sW1dpLFoyKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi8se2QyOjJ9KV0sW1lELFoyKC9wYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIuKmQ9IihbXiJdKykiLyx7ZDE6MX0pXV0sc1oxPVtbV2ksWjIoL3BhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLipwYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLHthdHRyMjoxLGQyOjIsYXR0cjE6MyxkMTo0fSldLFtXaSxaMigvcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLipwYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi8se2F0dHIxOjEsZDE6MixhdHRyMjozLGQyOjR9KV0sW1dpLFoyKC9wYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLHthdHRyMToxLGQxOjJ9KV0sW1dpLFoyKC9wYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi8se2F0dHIyOjEsZDI6Mn0pXSxbV2ksWjIoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLHtkMjoxLGF0dHIyOjIsZDE6MyxhdHRyMTo0fSldLFtXaSxaMigvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi8se2QxOjEsYXR0cjE6MixkMjozLGF0dHIyOjR9KV0sW1dpLFoyKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLHtkMToxLGF0dHIxOjJ9KV0sW1dpLFoyKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi8se2QyOjEsYXR0cjI6Mn0pXSxbV2ksWjIoL3BhdGggZD0iKFteIl0rKSIuKnBhdGggZD0iKFteIl0rKSIvLHtkMToxLGQyOjJ9KV0sW1lELFoyKC9wYXRoIGQ9IihbXiJdKykiLyx7ZDE6MX0pXSxbWUQsWjIoL3BhdGggc3R5bGU9IihbXiJdKykiLipkPSIoW14iXSspIi8se2F0dHIxOjEsZDE6Mn0pXV0sTDU9VWkuc3R5bGVzLHZWdD1VaS5zaGltcyxrOGU9T2JqZWN0LmtleXMoQkQpLHlWdD1rOGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV09T2JqZWN0LmtleXMoQkRbZV0pLHR9LHt9KSxaRD1udWxsLFM4ZT17fSxDOGU9e30sXzhlPXt9LFQ4ZT17fSxMOGU9e307JDhlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24ocyl7cmV0dXJuIFdEKEw1LGZ1bmN0aW9uKG4sbyxkKXtyZXR1cm4gbltkXT1XRChvLHMse30pLG59LHt9KX07UzhlPWUoZnVuY3Rpb24ocixzLG4pe2lmKHNbM10mJihyW3NbM11dPW4pLHNbMl0pe3ZhciBvPXNbMl0uZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiB0eXBlb2YgZD09Im51bWJlciJ9KTtvLmZvckVhY2goZnVuY3Rpb24oZCl7cltkLnRvU3RyaW5nKDE2KV09bn0pfXJldHVybiByfSksQzhlPWUoZnVuY3Rpb24ocixzLG4pe2lmKHJbbl09bixzWzJdKXt2YXIgbz1zWzJdLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmcifSk7by5mb3JFYWNoKGZ1bmN0aW9uKGQpe3JbZF09bn0pfXJldHVybiByfSksTDhlPWUoZnVuY3Rpb24ocixzLG4pe3ZhciBvPXNbMl07cmV0dXJuIHJbbl09bixvLmZvckVhY2goZnVuY3Rpb24oZCl7cltkXT1ufSkscn0pO3ZhciBhPSJmYXIiaW4gTDV8fGV0LmF1dG9GZXRjaFN2ZyxpPVdEKHZWdCxmdW5jdGlvbihyLHMpe3ZhciBuPXNbMF0sbz1zWzFdLGQ9c1syXTtyZXR1cm4gbz09PSJmYXIiJiYhYSYmKG89ImZhcyIpLHR5cGVvZiBuPT0ic3RyaW5nIiYmKHIubmFtZXNbbl09e3ByZWZpeDpvLGljb25OYW1lOmR9KSx0eXBlb2Ygbj09Im51bWJlciImJihyLnVuaWNvZGVzW24udG9TdHJpbmcoMTYpXT17cHJlZml4Om8saWNvbk5hbWU6ZH0pLHJ9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO184ZT1pLm5hbWVzLFQ4ZT1pLnVuaWNvZGVzLFpEPSRmKGV0LnN0eWxlRGVmYXVsdCx7ZmFtaWx5OmV0LmZhbWlseURlZmF1bHR9KX07bFZ0KGZ1bmN0aW9uKHQpe1pEPSRmKHQuc3R5bGVEZWZhdWx0LHtmYW1pbHk6ZXQuZmFtaWx5RGVmYXVsdH0pfSksJDhlKCk7RDhlPWZ1bmN0aW9uKCl7cmV0dXJue3ByZWZpeDpudWxsLGljb25OYW1lOm51bGwscmVzdDpbXX19O1A4ZT1pOGUuY29uY2F0KGU4ZSk7X1Z0PUo1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1DMnx8dCE9PWs1fSksVFZ0PU9iamVjdC5rZXlzKEVEKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1DMn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXMoRURbdF0pfSkuZmxhdCgpOyRWdD0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cEh0KHRoaXMsdCksdGhpcy5kZWZpbml0aW9ucz17fX1yZXR1cm4gaEh0KHQsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxpPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoaSkscz0wO3M8aTtzKyspcltzXT1hcmd1bWVudHNbc107dmFyIG49ci5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLHt9KTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2EuZGVmaW5pdGlvbnNbb109TmUoTmUoe30sYS5kZWZpbml0aW9uc1tvXXx8e30pLG5bb10pLEdEKG8sbltvXSk7dmFyIGQ9QkRbQzJdW29dO2QmJkdEKGQsbltvXSksJDhlKCl9KX19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnM9e319fSx7a2V5OiJfcHVsbERlZmluaXRpb25zIix2YWx1ZTpmdW5jdGlvbihhLGkpe3ZhciByPWkucHJlZml4JiZpLmljb25OYW1lJiZpLmljb24/ezA6aX06aTtyZXR1cm4gT2JqZWN0LmtleXMocikubWFwKGZ1bmN0aW9uKHMpe3ZhciBuPXJbc10sbz1uLnByZWZpeCxkPW4uaWNvbk5hbWUsYz1uLmljb24scD1jWzJdO2Fbb118fChhW29dPXt9KSxwLmxlbmd0aD4wJiZwLmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGw9PSJzdHJpbmciJiYoYVtvXVtsXT1jKX0pLGFbb11bZF09Y30pLGF9fV0pfSkoKSxJOGU9W10sZGw9e30scGw9e30sQVZ0PU9iamVjdC5rZXlzKHBsKTtOOGU9bmV3ICRWdCxFVnQ9ZnVuY3Rpb24oKXtldC5hdXRvUmVwbGFjZVN2Zz0hMSxldC5vYnNlcnZlTXV0YXRpb25zPSExLFYwKCJub0F1dG8iKX0sUFZ0PXtpMnN2ZzpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gRXM/KFYwKCJiZWZvcmVJMnN2ZyIsZSksbm8oInBzZXVkb0VsZW1lbnRzMnN2ZyIsZSksbm8oImkyc3ZnIixlKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLiIpKX0sd2F0Y2g6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e30sYT1lLmF1dG9SZXBsYWNlU3ZnUm9vdDtldC5hdXRvUmVwbGFjZVN2Zz09PSExJiYoZXQuYXV0b1JlcGxhY2VTdmc9ITApLGV0Lm9ic2VydmVNdXRhdGlvbnM9ITAsZ1Z0KGZ1bmN0aW9uKCl7TlZ0KHthdXRvUmVwbGFjZVN2Z1Jvb3Q6YX0pLFYwKCJ3YXRjaCIsZSl9KX19LElWdD17aWNvbjpmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZihTZihlKT09PSJvYmplY3QiJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm57cHJlZml4OmUucHJlZml4LGljb25OYW1lOnEwKGUucHJlZml4LGUuaWNvbk5hbWUpfHxlLmljb25OYW1lfTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpe3ZhciBhPWVbMV0uaW5kZXhPZigiZmEtIik9PT0wP2VbMV0uc2xpY2UoMyk6ZVsxXSxpPSRmKGVbMF0pO3JldHVybntwcmVmaXg6aSxpY29uTmFtZTpxMChpLGEpfHxhfX1pZih0eXBlb2YgZT09InN0cmluZyImJihlLmluZGV4T2YoIiIuY29uY2F0KGV0LmNzc1ByZWZpeCwiLSIpKT4tMXx8ZS5tYXRjaCh0VnQpKSl7dmFyIHI9QWYoZS5zcGxpdCgiICIpLHtza2lwTG9va3VwczohMH0pO3JldHVybntwcmVmaXg6ci5wcmVmaXh8fHNvKCksaWNvbk5hbWU6cTAoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWV9fWlmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIHM9c28oKTtyZXR1cm57cHJlZml4OnMsaWNvbk5hbWU6cTAocyxlKXx8ZX19fX0sQWE9e25vQXV0bzpFVnQsY29uZmlnOmV0LGRvbTpQVnQscGFyc2U6SVZ0LGxpYnJhcnk6TjhlLGZpbmRJY29uRGVmaW5pdGlvbjpRRCx0b0h0bWw6VDV9LE5WdD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxhPWUuYXV0b1JlcGxhY2VTdmdSb290LGk9YT09PXZvaWQgMD95MTphOyhPYmplY3Qua2V5cyhVaS5zdHlsZXMpLmxlbmd0aD4wfHxldC5hdXRvRmV0Y2hTdmcpJiZFcyYmZXQuYXV0b1JlcGxhY2VTdmcmJkFhLmRvbS5pMnN2Zyh7bm9kZTppfSl9O2VFPVVpLnN0eWxlcztIVnQ9e2ZvdW5kOiExLHdpZHRoOjUxMixoZWlnaHQ6NTEyfTtPOGU9ZnVuY3Rpb24oKXt9LGlFPWV0Lm1lYXN1cmVQZXJmb3JtYW5jZSYmQ2YmJkNmLm1hcmsmJkNmLm1lYXN1cmU/Q2Y6e21hcms6TzhlLG1lYXN1cmU6TzhlfSwkNT0nRkEgIjcuMi4wIicsVlZ0PWZ1bmN0aW9uKGUpe3JldHVybiBpRS5tYXJrKCIiLmNvbmNhdCgkNSwiICIpLmNvbmNhdChlLCIgYmVnaW5zIikpLGZ1bmN0aW9uKCl7cmV0dXJuIFI4ZShlKX19LFI4ZT1mdW5jdGlvbihlKXtpRS5tYXJrKCIiLmNvbmNhdCgkNSwiICIpLmNvbmNhdChlLCIgZW5kcyIpKSxpRS5tZWFzdXJlKCIiLmNvbmNhdCgkNSwiICIpLmNvbmNhdChlKSwiIi5jb25jYXQoJDUsIiAiKS5jb25jYXQoZSwiIGJlZ2lucyIpLCIiLmNvbmNhdCgkNSwiICIpLmNvbmNhdChlLCIgZW5kcyIpKX0sckU9e2JlZ2luOlZWdCxlbmQ6UjhlfSxFZj1mdW5jdGlvbigpe307UGY9e3JlcGxhY2U6ZnVuY3Rpb24oZSl7dmFyIGE9ZVswXTtpZihhLnBhcmVudE5vZGUpaWYoZVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoSDhlKHIpLGEpfSksYS5nZXRBdHRyaWJ1dGUoSDApPT09bnVsbCYmZXQua2VlcE9yaWdpbmFsU291cmNlKXt2YXIgaT15MS5jcmVhdGVDb21tZW50KFpWdChhKSk7YS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpLGEpfWVsc2UgYS5yZW1vdmUoKX0sbmVzdDpmdW5jdGlvbihlKXt2YXIgYT1lWzBdLGk9ZVsxXTtpZih+VkQoYSkuaW5kZXhPZihldC5yZXBsYWNlbWVudENsYXNzKSlyZXR1cm4gUGYucmVwbGFjZShlKTt2YXIgcj1uZXcgUmVnRXhwKCIiLmNvbmNhdChldC5jc3NQcmVmaXgsIi0uKiIpKTtpZihkZWxldGUgaVswXS5hdHRyaWJ1dGVzLmlkLGlbMF0uYXR0cmlidXRlcy5jbGFzcyl7dmFyIHM9aVswXS5hdHRyaWJ1dGVzLmNsYXNzLnNwbGl0KCIgIikucmVkdWNlKGZ1bmN0aW9uKG8sZCl7cmV0dXJuIGQ9PT1ldC5yZXBsYWNlbWVudENsYXNzfHxkLm1hdGNoKHIpP28udG9TdmcucHVzaChkKTpvLnRvTm9kZS5wdXNoKGQpLG99LHt0b05vZGU6W10sdG9Tdmc6W119KTtpWzBdLmF0dHJpYnV0ZXMuY2xhc3M9cy50b1N2Zy5qb2luKCIgIikscy50b05vZGUubGVuZ3RoPT09MD9hLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKTphLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMudG9Ob2RlLmpvaW4oIiAiKSl9dmFyIG49aS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIFQ1KG8pfSkuam9pbihgCmApO2Euc2V0QXR0cmlidXRlKEgwLCIiKSxhLmlubmVySFRNTD1ufX07c0U9ITE7SWY9bnVsbDt0anQ9VWkuc3R5bGVzO3NqdD1mdW5jdGlvbihlKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30saT1hLnRyYW5zZm9ybSxyPWk9PT12b2lkIDA/VXI6aSxzPWEuc3ltYm9sLG49cz09PXZvaWQgMD8hMTpzLG89YS5tYXNrLGQ9bz09PXZvaWQgMD9udWxsOm8sYz1hLm1hc2tJZCxwPWM9PT12b2lkIDA/bnVsbDpjLGw9YS5jbGFzc2VzLGY9bD09PXZvaWQgMD9bXTpsLGc9YS5hdHRyaWJ1dGVzLHk9Zz09PXZvaWQgMD97fTpnLHY9YS5zdHlsZXMsbT12PT09dm9pZCAwP3t9OnY7aWYoZSl7dmFyIHg9ZS5wcmVmaXgsTT1lLmljb25OYW1lLFM9ZS5pY29uO3JldHVybiBEZihOZSh7dHlwZToiaWNvbiJ9LGUpLGZ1bmN0aW9uKCl7cmV0dXJuIFYwKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLHtpY29uRGVmaW5pdGlvbjplLHBhcmFtczphfSksSkQoe2ljb25zOnttYWluOnRFKFMpLG1hc2s6ZD90RShkLmljb24pOntmb3VuZDohMSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGljb246e319fSxwcmVmaXg6eCxpY29uTmFtZTpNLHRyYW5zZm9ybTpOZShOZSh7fSxVciksciksc3ltYm9sOm4sbWFza0lkOnAsZXh0cmE6e2F0dHJpYnV0ZXM6eSxzdHlsZXM6bSxjbGFzc2VzOmZ9fSl9KX19LG5qdD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2ljb246cmp0KHNqdCl9fSxob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRyZWVDYWxsYmFjaz1ZOGUsYS5ub2RlQ2FsbGJhY2s9aWp0LGF9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5pMnN2Zz1mdW5jdGlvbihhKXt2YXIgaT1hLm5vZGUscj1pPT09dm9pZCAwP3kxOmkscz1hLmNhbGxiYWNrLG49cz09PXZvaWQgMD9mdW5jdGlvbigpe306cztyZXR1cm4gWThlKHIsbil9LGUuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uPWZ1bmN0aW9uKGEsaSl7dmFyIHI9aS5pY29uTmFtZSxzPWkucHJlZml4LG49aS50cmFuc2Zvcm0sbz1pLnN5bWJvbCxkPWkubWFzayxjPWkubWFza0lkLHA9aS5leHRyYTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obCxmKXtQcm9taXNlLmFsbChbYUUocixzKSxkLmljb25OYW1lP2FFKGQuaWNvbk5hbWUsZC5wcmVmaXgpOlByb21pc2UucmVzb2x2ZSh7Zm91bmQ6ITEsd2lkdGg6NTEyLGhlaWdodDo1MTIsaWNvbjp7fX0pXSkudGhlbihmdW5jdGlvbihnKXt2YXIgeT1rZihnLDIpLHY9eVswXSxtPXlbMV07bChbYSxKRCh7aWNvbnM6e21haW46dixtYXNrOm19LHByZWZpeDpzLGljb25OYW1lOnIsdHJhbnNmb3JtOm4sc3ltYm9sOm8sbWFza0lkOmMsZXh0cmE6cCx3YXRjaGFibGU6ITB9KV0pfSkuY2F0Y2goZil9KX0sZS5nZW5lcmF0ZUFic3RyYWN0SWNvbj1mdW5jdGlvbihhKXt2YXIgaT1hLmNoaWxkcmVuLHI9YS5hdHRyaWJ1dGVzLHM9YS5tYWluLG49YS50cmFuc2Zvcm0sbz1hLnN0eWxlcyxkPVRmKG8pO2QubGVuZ3RoPjAmJihyLnN0eWxlPWQpO3ZhciBjO3JldHVybiBqRChuKSYmKGM9bm8oImdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyIse21haW46cyx0cmFuc2Zvcm06bixjb250YWluZXJXaWR0aDpzLndpZHRoLGljb25XaWR0aDpzLndpZHRofSkpLGkucHVzaChjfHxzLmljb24pLHtjaGlsZHJlbjppLGF0dHJpYnV0ZXM6cn19fX0sb2p0PXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57bGF5ZXI6ZnVuY3Rpb24oYSl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9aS5jbGFzc2VzLHM9cj09PXZvaWQgMD9bXTpyO3JldHVybiBEZih7dHlwZToibGF5ZXIifSxmdW5jdGlvbigpe1YwKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLHthc3NlbWJsZXI6YSxwYXJhbXM6aX0pO3ZhciBuPVtdO3JldHVybiBhKGZ1bmN0aW9uKG8pe0FycmF5LmlzQXJyYXkobyk/by5tYXAoZnVuY3Rpb24oZCl7bj1uLmNvbmNhdChkLmFic3RyYWN0KX0pOm49bi5jb25jYXQoby5hYnN0cmFjdCl9KSxbe3RhZzoic3BhbiIsYXR0cmlidXRlczp7Y2xhc3M6WyIiLmNvbmNhdChldC5jc3NQcmVmaXgsIi1sYXllcnMiKV0uY29uY2F0KGppKHMpKS5qb2luKCIgIil9LGNoaWxkcmVuOm59XX0pfX19fSxsanQ9e21peG91dDpmdW5jdGlvbigpe3JldHVybntjb3VudGVyOmZ1bmN0aW9uKGEpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxyPWkudGl0bGUscz1yPT09dm9pZCAwP251bGw6cixuPWkuY2xhc3NlcyxvPW49PT12b2lkIDA/W106bixkPWkuYXR0cmlidXRlcyxjPWQ9PT12b2lkIDA/e306ZCxwPWkuc3R5bGVzLGw9cD09PXZvaWQgMD97fTpwO3JldHVybiBEZih7dHlwZToiY291bnRlciIsY29udGVudDphfSxmdW5jdGlvbigpe3JldHVybiBWMCgiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIix7Y29udGVudDphLHBhcmFtczppfSksQlZ0KHtjb250ZW50OmEudG9TdHJpbmcoKSx0aXRsZTpzLGV4dHJhOnthdHRyaWJ1dGVzOmMsc3R5bGVzOmwsY2xhc3NlczpbIiIuY29uY2F0KGV0LmNzc1ByZWZpeCwiLWxheWVycy1jb3VudGVyIildLmNvbmNhdChqaShvKSl9fSl9KX19fX0sY2p0PXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57dGV4dDpmdW5jdGlvbihhKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj1pLnRyYW5zZm9ybSxzPXI9PT12b2lkIDA/VXI6cixuPWkuY2xhc3NlcyxvPW49PT12b2lkIDA/W106bixkPWkuYXR0cmlidXRlcyxjPWQ9PT12b2lkIDA/e306ZCxwPWkuc3R5bGVzLGw9cD09PXZvaWQgMD97fTpwO3JldHVybiBEZih7dHlwZToidGV4dCIsY29udGVudDphfSxmdW5jdGlvbigpe3JldHVybiBWMCgiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIix7Y29udGVudDphLHBhcmFtczppfSksRjhlKHtjb250ZW50OmEsdHJhbnNmb3JtOk5lKE5lKHt9LFVyKSxzKSxleHRyYTp7YXR0cmlidXRlczpjLHN0eWxlczpsLGNsYXNzZXM6WyIiLmNvbmNhdChldC5jc3NQcmVmaXgsIi1sYXllcnMtdGV4dCIpXS5jb25jYXQoamkobykpfX0pfSl9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5nZW5lcmF0ZUxheWVyc1RleHQ9ZnVuY3Rpb24oYSxpKXt2YXIgcj1pLnRyYW5zZm9ybSxzPWkuZXh0cmEsbj1udWxsLG89bnVsbDtpZihFNWUpe3ZhciBkPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZm9udFNpemUsMTApLGM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtuPWMud2lkdGgvZCxvPWMuaGVpZ2h0L2R9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbYSxGOGUoe2NvbnRlbnQ6YS5pbm5lckhUTUwsd2lkdGg6bixoZWlnaHQ6byx0cmFuc2Zvcm06cixleHRyYTpzLHdhdGNoYWJsZTohMH0pXSl9fX0sWjhlPW5ldyBSZWdFeHAoJyInLCJ1ZyIpLFg4ZT1bMTEwNTkyMCwxMTEyMzE5XSxLOGU9TmUoTmUoTmUoTmUoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6ImZhcyIsNDAwOiJmYXMifX0pLFZIdCksWHF0KSxRSHQpLG9FPU9iamVjdC5rZXlzKEs4ZSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXT1LOGVbZV0sdH0se30pLGRqdD1PYmplY3Qua2V5cyhvRSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIGE9b0VbZV07cmV0dXJuIHRbZV09YVs5MDBdfHxqaShPYmplY3QuZW50cmllcyhhKSlbMF1bMV0sdH0se30pO2dqdD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJmw4ZS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBlLmluY2x1ZGVzKGEpfSl9LGJqdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgYT1uZXcgU2V0LGk9ZS5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gZC50cmltKCl9KTtpPWkuZmxhdE1hcChmdW5jdGlvbihkKXtyZXR1cm4gZC5pbmNsdWRlcygiKCIpP2Q6ZC5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy50cmltKCl9KX0pO3ZhciByPU1mKGkpLHM7dHJ5e2ZvcihyLnMoKTshKHM9ci5uKCkpLmRvbmU7KXt2YXIgbj1zLnZhbHVlO2lmKGdqdChuKSl7dmFyIG89bDhlLnJlZHVjZShmdW5jdGlvbihkLGMpe3JldHVybiBkLnJlcGxhY2UoYywiIil9LG4pO28hPT0iIiYmbyE9PSIqIiYmYS5hZGQobyl9fX1jYXRjaChkKXtyLmUoZCl9ZmluYWxseXtyLmYoKX1yZXR1cm4gYX07dmp0PXtob29rczpmdW5jdGlvbigpe3JldHVybnttdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2s9SjhlLGF9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5wc2V1ZG9FbGVtZW50czJzdmc9ZnVuY3Rpb24oYSl7dmFyIGk9YS5ub2RlLHI9aT09PXZvaWQgMD95MTppO2V0LnNlYXJjaFBzZXVkb0VsZW1lbnRzJiZKOGUocil9fX0sZWRlPSExLHlqdD17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbTp7dW53YXRjaDpmdW5jdGlvbigpe2o4ZSgpLGVkZT0hMH19fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57Ym9vdHN0cmFwOmZ1bmN0aW9uKCl7VThlKEtEKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIix7fSkpfSxub0F1dG86ZnVuY3Rpb24oKXtYVnQoKX0sd2F0Y2g6ZnVuY3Rpb24oYSl7dmFyIGk9YS5vYnNlcnZlTXV0YXRpb25zUm9vdDtlZGU/bkUoKTpVOGUoS0QoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLHtvYnNlcnZlTXV0YXRpb25zUm9vdDppfSkpfX19fSx0ZGU9ZnVuY3Rpb24oZSl7dmFyIGE9e3NpemU6MTYseDowLHk6MCxmbGlwWDohMSxmbGlwWTohMSxyb3RhdGU6MH07cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihpLHIpe3ZhciBzPXIudG9Mb3dlckNhc2UoKS5zcGxpdCgiLSIpLG49c1swXSxvPXMuc2xpY2UoMSkuam9pbigiLSIpO2lmKG4mJm89PT0iaCIpcmV0dXJuIGkuZmxpcFg9ITAsaTtpZihuJiZvPT09InYiKXJldHVybiBpLmZsaXBZPSEwLGk7aWYobz1wYXJzZUZsb2F0KG8pLGlzTmFOKG8pKXJldHVybiBpO3N3aXRjaChuKXtjYXNlImdyb3ciOmkuc2l6ZT1pLnNpemUrbzticmVhaztjYXNlInNocmluayI6aS5zaXplPWkuc2l6ZS1vO2JyZWFrO2Nhc2UibGVmdCI6aS54PWkueC1vO2JyZWFrO2Nhc2UicmlnaHQiOmkueD1pLngrbzticmVhaztjYXNlInVwIjppLnk9aS55LW87YnJlYWs7Y2FzZSJkb3duIjppLnk9aS55K287YnJlYWs7Y2FzZSJyb3RhdGUiOmkucm90YXRlPWkucm90YXRlK287YnJlYWt9cmV0dXJuIGl9LGEpfSx4anQ9e21peG91dDpmdW5jdGlvbigpe3JldHVybntwYXJzZTp7dHJhbnNmb3JtOmZ1bmN0aW9uKGEpe3JldHVybiB0ZGUoYSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSxpKXt2YXIgcj1pLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS10cmFuc2Zvcm0iKTtyZXR1cm4gciYmKGEudHJhbnNmb3JtPXRkZShyKSksYX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZz1mdW5jdGlvbihhKXt2YXIgaT1hLm1haW4scj1hLnRyYW5zZm9ybSxzPWEuY29udGFpbmVyV2lkdGgsbj1hLmljb25XaWR0aCxvPXt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiLmNvbmNhdChzLzIsIiAyNTYpIil9LGQ9InRyYW5zbGF0ZSgiLmNvbmNhdChyLngqMzIsIiwgIikuY29uY2F0KHIueSozMiwiKSAiKSxjPSJzY2FsZSgiLmNvbmNhdChyLnNpemUvMTYqKHIuZmxpcFg/LTE6MSksIiwgIikuY29uY2F0KHIuc2l6ZS8xNiooci5mbGlwWT8tMToxKSwiKSAiKSxwPSJyb3RhdGUoIi5jb25jYXQoci5yb3RhdGUsIiAwIDApIiksbD17dHJhbnNmb3JtOiIiLmNvbmNhdChkLCIgIikuY29uY2F0KGMsIiAiKS5jb25jYXQocCl9LGY9e3RyYW5zZm9ybToidHJhbnNsYXRlKCIuY29uY2F0KG4vMiotMSwiIC0yNTYpIil9LGc9e291dGVyOm8saW5uZXI6bCxwYXRoOmZ9O3JldHVybnt0YWc6ImciLGF0dHJpYnV0ZXM6TmUoe30sZy5vdXRlciksY2hpbGRyZW46W3t0YWc6ImciLGF0dHJpYnV0ZXM6TmUoe30sZy5pbm5lciksY2hpbGRyZW46W3t0YWc6aS5pY29uLnRhZyxjaGlsZHJlbjppLmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpOZShOZSh7fSxpLmljb24uYXR0cmlidXRlcyksZy5wYXRoKX1dfV19fX19LGxFPXt4OjAseTowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifTtNanQ9e2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSxpKXt2YXIgcj1pLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1tYXNrIikscz1yP0FmKHIuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4udHJpbSgpfSkpOkQ4ZSgpO3JldHVybiBzLnByZWZpeHx8KHMucHJlZml4PXNvKCkpLGEubWFzaz1zLGEubWFza0lkPWkuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLW1hc2staWQiKSxhfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVBYnN0cmFjdE1hc2s9ZnVuY3Rpb24oYSl7dmFyIGk9YS5jaGlsZHJlbixyPWEuYXR0cmlidXRlcyxzPWEubWFpbixuPWEubWFzayxvPWEubWFza0lkLGQ9YS50cmFuc2Zvcm0sYz1zLndpZHRoLHA9cy5pY29uLGw9bi53aWR0aCxmPW4uaWNvbixnPWhWdCh7dHJhbnNmb3JtOmQsY29udGFpbmVyV2lkdGg6bCxpY29uV2lkdGg6Y30pLHk9e3RhZzoicmVjdCIsYXR0cmlidXRlczpOZShOZSh7fSxsRSkse30se2ZpbGw6IndoaXRlIn0pfSx2PXAuY2hpbGRyZW4/e2NoaWxkcmVuOnAuY2hpbGRyZW4ubWFwKGFkZSl9Ont9LG09e3RhZzoiZyIsYXR0cmlidXRlczpOZSh7fSxnLmlubmVyKSxjaGlsZHJlbjpbYWRlKE5lKHt0YWc6cC50YWcsYXR0cmlidXRlczpOZShOZSh7fSxwLmF0dHJpYnV0ZXMpLGcucGF0aCl9LHYpKV19LHg9e3RhZzoiZyIsYXR0cmlidXRlczpOZSh7fSxnLm91dGVyKSxjaGlsZHJlbjpbbV19LE09Im1hc2stIi5jb25jYXQob3x8bThlKCkpLFM9ImNsaXAtIi5jb25jYXQob3x8bThlKCkpLEY9e3RhZzoibWFzayIsYXR0cmlidXRlczpOZShOZSh7fSxsRSkse30se2lkOk0sbWFza1VuaXRzOiJ1c2VyU3BhY2VPblVzZSIsbWFza0NvbnRlbnRVbml0czoidXNlclNwYWNlT25Vc2UifSksY2hpbGRyZW46W3kseF19LF89e3RhZzoiZGVmcyIsY2hpbGRyZW46W3t0YWc6ImNsaXBQYXRoIixhdHRyaWJ1dGVzOntpZDpTfSxjaGlsZHJlbjp3anQoZil9LEZdfTtyZXR1cm4gaS5wdXNoKF8se3RhZzoicmVjdCIsYXR0cmlidXRlczpOZSh7ZmlsbDoiY3VycmVudENvbG9yIiwiY2xpcC1wYXRoIjoidXJsKCMiLmNvbmNhdChTLCIpIiksbWFzazoidXJsKCMiLmNvbmNhdChNLCIpIil9LGxFKX0pLHtjaGlsZHJlbjppLGF0dHJpYnV0ZXM6cn19fX0semp0PXtwcm92aWRlczpmdW5jdGlvbihlKXt2YXIgYT0hMTtpby5tYXRjaE1lZGlhJiYoYT1pby5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMpLGUubWlzc2luZ0ljb25BYnN0cmFjdD1mdW5jdGlvbigpe3ZhciBpPVtdLHI9e2ZpbGw6ImN1cnJlbnRDb2xvciJ9LHM9e2F0dHJpYnV0ZVR5cGU6IlhNTCIscmVwZWF0Q291bnQ6ImluZGVmaW5pdGUiLGR1cjoiMnMifTtpLnB1c2goe3RhZzoicGF0aCIsYXR0cmlidXRlczpOZShOZSh7fSxyKSx7fSx7ZDoiTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40eiJ9KX0pO3ZhciBuPU5lKE5lKHt9LHMpLHt9LHthdHRyaWJ1dGVOYW1lOiJvcGFjaXR5In0pLG89e3RhZzoiY2lyY2xlIixhdHRyaWJ1dGVzOk5lKE5lKHt9LHIpLHt9LHtjeDoiMjU2IixjeToiMzY0IixyOiIyOCJ9KSxjaGlsZHJlbjpbXX07cmV0dXJuIGF8fG8uY2hpbGRyZW4ucHVzaCh7dGFnOiJhbmltYXRlIixhdHRyaWJ1dGVzOk5lKE5lKHt9LHMpLHt9LHthdHRyaWJ1dGVOYW1lOiJyIix2YWx1ZXM6IjI4OzE0OzI4OzI4OzE0OzI4OyJ9KX0se3RhZzoiYW5pbWF0ZSIsYXR0cmlidXRlczpOZShOZSh7fSxuKSx7fSx7dmFsdWVzOiIxOzA7MTsxOzA7MTsifSl9KSxpLnB1c2gobyksaS5wdXNoKHt0YWc6InBhdGgiLGF0dHJpYnV0ZXM6TmUoTmUoe30scikse30se29wYWNpdHk6IjEiLGQ6Ik0yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnoifSksY2hpbGRyZW46YT9bXTpbe3RhZzoiYW5pbWF0ZSIsYXR0cmlidXRlczpOZShOZSh7fSxuKSx7fSx7dmFsdWVzOiIxOzA7MDswOzA7MTsifSl9XX0pLGF8fGkucHVzaCh7dGFnOiJwYXRoIixhdHRyaWJ1dGVzOk5lKE5lKHt9LHIpLHt9LHtvcGFjaXR5OiIwIixkOiJNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6In0pLGNoaWxkcmVuOlt7dGFnOiJhbmltYXRlIixhdHRyaWJ1dGVzOk5lKE5lKHt9LG4pLHt9LHt2YWx1ZXM6IjA7MDsxOzE7MDswOyJ9KX1dfSkse3RhZzoiZyIsYXR0cmlidXRlczp7Y2xhc3M6Im1pc3NpbmcifSxjaGlsZHJlbjppfX19fSxranQ9e2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSxpKXt2YXIgcj1pLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1zeW1ib2wiKSxzPXI9PT1udWxsPyExOnI9PT0iIj8hMDpyO3JldHVybiBhLnN5bWJvbD1zLGF9fX19LFNqdD1bbVZ0LG5qdCxvanQsbGp0LGNqdCx2anQseWp0LHhqdCxNanQsemp0LGtqdF07RFZ0KFNqdCx7bWl4b3V0c1RvOkFhfSk7Q2p0PUFhLm5vQXV0byxfanQ9QWEuY29uZmlnLFRqdD1BYS5saWJyYXJ5LExqdD1BYS5kb20sJGp0PUFhLnBhcnNlLEFqdD1BYS5maW5kSWNvbkRlZmluaXRpb24sRGp0PUFhLnRvSHRtbCxjRT1BYS5pY29uLEVqdD1BYS5sYXllcixQanQ9QWEudGV4dCxJanQ9QWEuY291bnRlcn0pO3ZhciBOanQsZEUscmRlLHNkZSxuZGUsb2RlLHBFLGxkZSxjZGUsZGRlLHBkZSxoZGUsdWRlLGZkZSxtZGUsZ2RlLGJkZSx2ZGUseWRlLHhkZSx3ZGUsTWRlLHpkZSxrZGUsU2RlLENkZSxfZGUsVGRlLExkZSxoRSwkZGUsQWRlLERkZSxFZGUsUGRlLElkZSxOZGUsRmRlLE9kZSxSZGUsQmRlLEhkZSxxZGUsVmRlLGpkZSxVZGUsV2RlLEdkZSxZZGUsdUUsWmRlLFhkZSxLZGUsUWRlLEpkZSxlN2UsdDdlLGE3ZSxpN2UscjdlLHM3ZSxuN2UsbzdlLGw3ZSxjN2UsZDdlLHA3ZSxoN2UsdTdlLGY3ZSxtN2UsZkUsZzdlLGI3ZSx2N2UseTdlLHg3ZSx3N2UsTTdlLHo3ZSxrN2UsUzdlLEM3ZSxfN2UsVDdlLEw3ZSwkN2UsQTdlLEQ3ZSxFN2UsUDdlLEk3ZSxON2UsRjdlLE83ZSxSN2UsQjdlLEg3ZSxxN2UsVjdlLGo3ZSxVN2UsVzdlLEc3ZSxZN2UsWjdlLFg3ZSxLN2UsUTdlLEo3ZSxlcGUsdHBlLGFwZSxGZixpcGUscnBlLG1FLHNwZSxucGUsb3BlLGdFLGxwZSxjcGUsTmYsZHBlLHBwZSxiRSxocGUsdXBlLGZwZSxtcGUsZ3BlLHZFLGJwZSx2cGUseXBlLHhwZSx3cGUsTXBlLHpwZSxrcGUsU3BlLENwZSx5RSxfcGUsVHBlLExwZSwkcGUsQXBlLERwZSxFcGUsUHBlLElwZSx4RSxOcGUsRnBlLE9wZSxScGUsQnBlLEhwZSxxcGUsVnBlLHdFLGpwZSxVcGUsV3BlLE1FLEdwZSxZcGUsWnBlLFhwZSxLcGUsUXBlLEpwZSxlaGUsdGhlLGFoZSxpaGUscmhlLHNoZSxuaGUsb2hlLGxoZSxjaGUsZGhlLHBoZSxoaGUsdWhlLGZoZSxtaGUsZ2hlLGJoZSx2aGUseWhlLHpFLHhoZSx3aGUsTWhlLHpoZSxraGUsU2hlLENoZSxrRSxfaGUsVGhlLExoZSwkaGUsQWhlLERoZSxFaGUsUGhlLEloZSxOaGUsRmhlLE9oZSxSaGUsQmhlLEhoZSxxaGUsVmhlLGpoZSxVaGUsV2hlLEdoZSxZaGUsWmhlLFhoZSxLaGUsUWhlLEpoZSxlOWUsdDllLGE5ZSxpOWUscjllLHM5ZSxuOWUsbzllLGw5ZSxjOWUsZDllLHA5ZSxoOWUsdTllLGY5ZSxPZixtOWUsZzllLGI5ZSx2OWUseTllLFNFLHg5ZSx3OWUsTTllLFJmLHo5ZSxrOWUsUzllLEM5ZSxfOWUsVDllLENFLEw5ZSwkOWUsQTllLEQ5ZSxFOWUsUDllLEk5ZSxOOWUsRjllLE85ZSxSOWUsQjllLEg5ZSxxOWUsVjllLGo5ZSxBNSxVOWUsVzllLEc5ZSxZOWUsWjllLFg5ZSxLOWUsUTllLEo5ZSxldWUsdHVlLGF1ZSxpdWUscnVlLHN1ZSxudWUsb3VlLGx1ZSxjdWUsZHVlLHB1ZSxodWUsdXVlLGZ1ZSxtdWUsZ3VlLGJ1ZSx2dWUseXVlLHh1ZSx3dWUsTXVlLHp1ZSxrdWUsU3VlLEN1ZSxfdWUsVHVlLEx1ZSxfRSwkdWUsQXVlLER1ZSxFdWUsUHVlLEl1ZSxOdWUsRnVlLE91ZSxSdWUsQnVlLEh1ZSxxdWUsVnVlLGp1ZSxURSxVdWUsV3VlLEd1ZSxZdWUsWnVlLFh1ZSxMRSxLdWUsUXVlLEp1ZSxlZmUsdGZlLGFmZSxpZmUscmZlLHNmZSxuZmUsb2ZlLGxmZSxjZmUsZGZlLHBmZSxoZmUsdWZlLGZmZSxtZmUsZ2ZlLGJmZSx2ZmUseWZlLHhmZSx3ZmUsTWZlLHpmZSxrZmUsJEUsQmYsU2ZlLENmZSxfZmUsVGZlLExmZSwkZmUsQWZlLERmZSxFZmUsUGZlLElmZSxOZmUsQUUsRmZlLE9mZSxSZmUsQmZlLEhmZSxxZmUsVmZlLGpmZSxIZixVZmUsV2ZlLEdmZSxZZmUsWmZlLFhmZSxLZmUsUWZlLEpmZSxlbWUsdG1lLGFtZSxpbWUsREUscm1lLHNtZSxubWUsb21lLGxtZSxjbWUsZG1lLHBtZSxobWUsdW1lLGZtZSxtbWUsZ21lLGJtZSx2bWUseW1lLHhtZSxFRSx3bWUsTW1lLHptZSxQRSxrbWUsU21lLENtZSxfbWUscWYsVG1lLElFLExtZSwkbWUsQW1lLERtZSxFbWUsUG1lLE5FLEltZSxObWUsRm1lLE9tZSxSbWUsQm1lLEhtZSxxbWUsVm1lLGptZSxVbWUsV21lLEdtZSxZbWUsWm1lLFhtZSxLbWUsUW1lLEptZSxlZ2UsdGdlLGFnZSxpZ2UscmdlLHNnZSxGRSxuZ2Usb2dlLGxnZSxjZ2UsZGdlLHBnZSxoZ2UsdWdlLE9FLGZnZSxtZ2UsZ2dlLGJnZSx2Z2UseWdlLHhnZSx3Z2UsTWdlLHpnZSxrZ2UsU2dlLENnZSxfZ2UsUkUsVGdlLExnZSwkZ2UsQWdlLERnZSxFZ2UsUGdlLElnZSxOZ2UsRmdlLE9nZSxSZ2UsQmdlLEhnZSxxZ2UsQkUsVmdlLGpnZSxVZ2UsV2dlLEdnZSxZZ2UsWmdlLFhnZSxLZ2UsUWdlLEpnZSxlYmUsdGJlLGFiZSxWZixpYmUscmJlLHNiZSxuYmUsb2JlLGxiZSxjYmUsZGJlLHBiZSxoYmUsSEUsdWJlLGZiZSxtYmUsZ2JlLGJiZSx2YmUseWJlLHhiZSx3YmUsTWJlLHpiZSxrYmUsU2JlLENiZSxfYmUsVGJlLExiZSwkYmUsQWJlLERiZSxFYmUsUGJlLEliZSxOYmUsRmJlLE9iZSxSYmUsQmJlLEhiZSxxYmUsVmJlLGpiZSxVYmUsV2JlLEdiZSxZYmUsWmJlLFhiZSxxRSxLYmUsUWJlLEpiZSxldmUsdHZlLFZFLGF2ZSxpdmUscnZlLHN2ZSxudmUsb3ZlLEZqdCxsdmU9YigoKT0+e05qdD0iZmFiIixkRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZ2l0aHViIixpY29uOls0NDgsNTEyLFsiZ2l0aHViLXNxdWFyZSJdLCJmMDkyIiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNjUuOCA0MDcuN2MwLTEuOCAwLTYgLjEtMTEuNiAuMS0xMS40IC4xLTI4LjggLjEtNDMuNyAwLTE1LjYtNS4yLTI1LjUtMTEuMy0zMC43IDM3LTQuMSA3Ni05LjIgNzYtNzMuMSAwLTE4LjItNi41LTI3LjMtMTcuMS0zOSAxLjctNC4zIDcuNC0yMi0xLjctNDUtMTMuOS00LjMtNDUuNyAxNy45LTQ1LjcgMTcuOS0yNi42LTcuNS01Ni42LTcuNS04My4yIDAgMCAwLTMxLjgtMjIuMi00NS43LTE3LjktOS4xIDIyLjktMy41IDQwLjYtMS43IDQ1LTEwLjYgMTEuNy0xNS42IDIwLjgtMTUuNiAzOSAwIDYzLjYgMzcuMyA2OSA3NC4zIDczLjEtNC44IDQuMy05LjEgMTEuNy0xMC42IDIyLjMtOS41IDQuMy0zMy44IDExLjctNDguMy0xMy45LTkuMS0xNS44LTI1LjUtMTcuMS0yNS41LTE3LjEtMTYuMi0uMi0xLjEgMTAuMi0xLjEgMTAuMiAxMC44IDUgMTguNCAyNC4yIDE4LjQgMjQuMiA5LjcgMjkuNyA1Ni4xIDE5LjcgNTYuMSAxOS43IDAgOSAuMSAyMS43IC4xIDMwLjYgMCA0LjggLjEgOC42IC4xIDEwIDAgNC4zLTMgOS41LTExLjUgOC02Ni0yMi4xLTExMi4yLTg0LjktMTEyLjItMTU4LjMgMC05MS44IDcwLjItMTYxLjUgMTYyLTE2MS41UzM4OCAxNjUuNiAzODggMjU3LjRjLjEgNzMuNC00NC43IDEzNi4zLTExMC43IDE1OC4zLTguNCAxLjUtMTEuNS0zLjctMTEuNS04em0tOTAuNS01NC44Yy0uMi0xLjUgMS4xLTIuOCAzLTMuMiAxLjktLjIgMy43IC42IDMuOSAxLjkgLjMgMS4zLTEgMi42LTMgMy0xLjkgLjQtMy43LS40LTMuOS0xLjd6bS05LjEgMy4yYy0yLjIgLjItMy43LS45LTMuNy0yLjQgMC0xLjMgMS41LTIuNCAzLjUtMi40IDEuOS0uMiAzLjcgLjkgMy43IDIuNCAwIDEuMy0xLjUgMi40LTMuNSAyLjR6bS0xNC4zLTIuMmMtMS45LS40LTMuMi0xLjktMi44LTMuMnMyLjQtMS45IDQuMS0xLjVjMiAuNiAzLjMgMi4xIDIuOCAzLjQtLjQgMS4zLTIuNCAxLjktNC4xIDEuM3ptLTEyLjUtNy4zYy0xLjUtMS4zLTEuOS0zLjItLjktNC4xIC45LTEuMSAyLjgtLjkgNC4zIC42IDEuMyAxLjMgMS44IDMuMyAuOSA0LjEtLjkgMS4xLTIuOCAuOS00LjMtLjZ6bS04LjUtMTBjLTEuMS0xLjUtMS4xLTMuMiAwLTMuOSAxLjEtLjkgMi44LS4yIDMuNyAxLjMgMS4xIDEuNSAxLjEgMy4zIDAgNC4xLS45IC42LTIuNiAwLTMuNy0xLjV6bS02LjMtOC44Yy0xLjEtMS4zLTEuMy0yLjgtLjQtMy41IC45LS45IDIuNC0uNCAzLjUgLjYgMS4xIDEuMyAxLjMgMi44IC40IDMuNS0uOSAuOS0yLjQgLjQtMy41LS42em0tNi02LjRjLTEuMy0uNi0xLjktMS43LTEuNS0yLjYgLjQtLjYgMS41LS45IDIuOC0uNCAxLjMgLjcgMS45IDEuOCAxLjUgMi42LS40IC45LTEuNyAxLjEtMi44IC40eiJdfSxyZGU9ZEUsc2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRoaW5rLXBlYWtzIixpY29uOls1NzYsNTEyLFtdLCJmNzMxIiwiTTQ2NS40IDQwOS40bDg3LjEtMTUwLjItMzItLjMtNTUuMSA5NS0yMDYuMi0zNTMuOS0yMzYuMiA0MDcuNCAzMiAuMyAyMDQuMi0zNTIuMSAyMDYuMiAzNTMuOHpNMTEwLjEgMzY1LjNsMzIuMSAwIDExNy40LTIwMi41IDIwMy40IDM0OS4xIDMyLjUgLjEtMjM1LjgtNDA0LjYtMTQ5LjYgMjU3Ljl6Il19LG5kZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtZHJpdmUiLGljb246WzUxMiw1MTIsW10sImYzYWEiLCJNMzM5IDMxNC45TDE3NS40IDMyIDMzNi42IDMyIDUwMC4yIDMxNC45IDMzOSAzMTQuOXpNMjAxLjUgMzM4LjVsLTgwLjYgMTQxLjUgMzEwLjUgMCA4MC42LTE0MS41LTMxMC41IDB6TTE1NC4xIDY3LjRMMCAzMzguNSA4MC42IDQ4MCAyMzcgMjA4LjggMTU0LjEgNjcuNHoiXX0sb2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImF1dG9wcmVmaXhlciIsaWNvbjpbNjQwLDUxMixbXSwiZjQxYyIsIk0zMTguNCAxNmwtMTYxIDQ4MCA3Ny41IDAgMjUuNC04MS40IDExOS41IDAgMjUuMiA4MS40IDc3LjUgMC0xNjQuMS00ODB6TTI3OC4xIDM1Ny45bDQxLjItMTMwLjQgMS41IDAgNDAuOSAxMzAuNC04My42IDB6TTY0MCA0MDVMNjMwIDM3My42IDQ2Mi4xIDM1OCA0ODEuNSA0MTQuNSA2NDAgNDA1ek0xNzcuOSAzNThMMTAgMzczLjcgMCA0MDUgMTU4LjUgNDE0LjQgMTc3LjkgMzU4eiJdfSxwRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtdmlhZGVvIixpY29uOls0NDgsNTEyLFsidmlhZGVvLXNxdWFyZSJdLCJmMmFhIiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0xMTguMyAzODEuMmMtNjgtNzMuNi0xOS44LTE5Ni4xIDgxLjItMTk2LjEgMTMuMyAwIDI2LjYgMi4xIDM5LjEgNi43LTQuMyA4LjQtNy4zIDE3LjYtOC40IDI3LjEtOS43LTQuMS0yMC4yLTYtMzAuNy02LTQ4LjggMC04NC42IDQxLjctODQuNiA4OC45IDAgNDMgMjguNSA3OC43IDY5LjUgODUuOSA2MS41LTI0IDcyLjktMTE3LjYgNzIuOS0xNzUgMC03LjMgMC0xNC44LS42LTIyLjEtMTEuMi0zMi45LTI2LjYtNjQuNi00NC4yLTk0LjUgMjcuMSAxOC4zIDQxLjkgNjIuNSA0NC4yIDk0LjFsMCAuNGM3LjcgMjIuNSAxMS44IDQ2LjIgMTEuOCA3MCAwIDU0LjEtMjEuOSA5OS02OC4zIDEyOC4ybC0yLjQgLjJjNTAgMSA4Ni4yLTM4LjYgODYuMi04Ny4yIDAtMTIuMi0yLjEtMjQuMy02LjktMzUuNyA5LjUtMS45IDE4LjUtNS42IDI2LjQtMTAuNSAxNS4zIDM2LjYgMTIuNiA4Ny4zLTIyLjggMTI1LjYtNDIuNCA0Ni4yLTEyMCA0Ni42LTE2Mi40IDB6TTI3NC42IDIxNy42YzIxLjktMTIgNDkuNi0zMC43IDYyLjMtNTMgMS41LTMgNC4xLTguNiA0LjUtMTItMTIuNSAyNy45LTQ0LjIgNDkuOC03My45IDU2LjctNC43LTcuMy03LjUtMTUuNS03LjUtMjQuMyAwLTEwLjMgNS4yLTI0LjEgMTIuOS0zMS42IDguMy03LjkgMTgtMTAuOSAyNy45LTE0LjEgMTYtNS4xIDMyLjUtMTAuMyA0NC41LTM1LjkgMzIuNSA0Ni4yIDEzLjEgMTMwLjMtMzYuMyAxMzAuMy0xMy4zIDAtMjUuMS03LjEtMzQuNC0xNi4xeiJdfSxsZGU9cEUsY2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNwYW5lbCIsaWNvbjpbNjQwLDUxMixbXSwiZjM4OCIsIk0yMTAuMyAyMjAuMmMtNS42LTI0LjgtMjYuOS00MS4yLTUxLTQxLjJsLTM3IDBjLTcuMSAwLTEyLjUgNC41LTE0LjMgMTAuOUw3My4xIDMyMCA5Ny44IDMxOS45YzYuOCAwIDEyLjMtNC41IDE0LjItMTAuN2wyNS44LTk1LjcgMTkuOCAwYzguNCAwIDE2LjIgNS42IDE4LjMgMTQuOCAyLjUgMTAuOS01LjkgMjIuNi0xOC4zIDIyLjZsLTEwLjMgMGMtNyAwLTEyLjUgNC42LTE0LjMgMTAuOGwtNi40IDIzLjggMzIgMGMzNy4yIDAgNTguMy0zNi4yIDUxLjctNjUuM3ptLTE1Ni41IDI4bDE4LjYgMGM2LjkgMCAxMi40LTQuNCAxNC4zLTEwLjlsNi4yLTIzLjYtNDAgMEMzMCAyMTMuNyA5IDIyNy44IDEuNyAyNTQuOC03IDI4OC42IDE4LjUgMzIwIDUyIDMyMGwxMi40IDAgNy4xLTI2LjFjMS4yLTQuNC0yLjItOC4zLTYuNC04LjNsLTExLjMgMGMtMjQuNyAwLTI0LjktMzcuNCAwLTM3LjR6bTI0Ny41LTM0LjhsLTc3LjkgMC0zLjUgMTMuNGMtMi40IDkuNiA0LjUgMTguNSAxNC4yIDE4LjVsNTcuNSAwYzQgMCAyLjQgNC4zIDIuMSA1LjNsLTguNiAzMS44Yy0uNCAxLjQtLjkgNS4zLTUuNSA1LjNsLTM0LjkgMGMtNS4zIDAtNS4zLTcuOSAwLTcuOWwyMS42IDBjNi44IDAgMTIuMy00LjYgMTQuMi0xMC44bDMuNS0xMy4yLTQ4LjQgMGMtMzkuMiAwLTQzLjYgNjMuOC0uNyA2My44bDU3LjUgLjJjMTEuMiAwIDIwLjYtNy4yIDIzLjQtMTcuOGwxNC01MS44YzQuOC0xOS4yLTkuNy0zNi44LTI4LjUtMzYuOHpNNjMzLjEgMTc5bC0xOC45IDBjLTQuOSAwLTkuMiAzLjItMTAuNCA3LjlMNTY4LjIgMzIwYzIwLjcgMCAzOS44LTEzLjggNDQuOS0zNC41bDI2LjUtOTguMmMxLjItNC4zLTItOC4zLTYuNS04LjN6TTM5Ni44IDIxMy43bDAgLjEtNDguMyAwLTI2LjIgOThjLTEuMiA0LjQgMi4yIDguMyA2LjQgOC4zbDE4LjkgMGM0LjggMCA5LjItMyAxMC40LTcuOGwxNy4yLTY0IDE5LjggMGMxMi41IDAgMjEuNCAxMS44IDE4LjEgMjMuNGwtMTAuNiA0MGMtMS4yIDQuMyAxLjkgOC4zIDYuNCA4LjNsMTkuMSAwYzQuNiAwIDkuMS0yLjkgMTAuMy03LjhsOC44LTMzLjFjOS0zMy4xLTE1LjktNjUuNC01MC4zLTY1LjR6bTk4LjMgNzQuNmMtMy42IDAtNi0zLjQtNS4xLTYuN2w4LTMwYy45LTMuOSAzLjctNiA3LjgtNmwzMi45IDBjMi42IDAgNC42IDIuNCAzLjkgNS4xbC0uNyAyLjZjLS42IDItMS45IDMtMy45IDNsLTIxLjYgMGMtNyAwLTEyLjYgNC42LTE0LjIgMTAuOGwtMy41IDEzIDUzLjQgMGMxMC41IDAgMjAuMy02LjYgMjMuMi0xNy42bDMuMi0xMmM0LjktMTkuMS05LjMtMzYuOC0yOC4zLTM2LjhsLTQ3LjMgMGMtMTcuOSAwLTMzLjggMTItMzguNiAyOS42bC0xMC44IDQwYy01IDE3LjcgOC4zIDM2LjcgMjguMyAzNi43bDY2LjcgMGM2LjggMCAxMi4zLTQuNSAxNC4yLTEwLjdsNS43LTIxLTczLjMgMHoiXX0sZGRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1lbmRlbGV5IixpY29uOls2NDAsNTEyLFtdLCJmN2IzIiwiTTYyNC42IDMyNS4yYy0xMi4zLTEyLjQtMjkuNy0xOS4yLTQ4LjQtMTcuMi00My4zLTEtNDkuNy0zNC45LTM3LjUtOTguOCAyMi44LTU3LjUtMTQuOS0xMzEuNS04Ny40LTEzMC44LTc3LjQgLjctODEuNyA4Mi0xMzAuOSA4Mi00OC4xIDAtNTQtODEuMy0xMzAuOS04Mi03Mi45LS44LTExMC4xIDczLjMtODcuNCAxMzAuOCAxMi4yIDYzLjkgNS44IDk3LjgtMzcuNSA5OC44LTIxLjItMi4zLTM3IDYuNS01MyAyMi41LTE5LjkgMTkuNy0xOS4zIDk0LjggNDIuNiAxMDIuNiA0Ny4xIDUuOSA4MS42LTQyLjkgNjEuMi04Ny44LTQ3LjMtMTAzLjcgMTg1LjktMTA2LjEgMTQ2LjUtOC4yLS4xIC4xLS4yIC4yLS4zIC40LTI2LjggNDIuOCA2LjggOTcuNCA1OC44IDk1LjIgNTIuMSAyLjEgODUuNC01Mi42IDU4LjgtOTUuMi0uMS0uMi0uMi0uMy0uMy0uNC0zOS40LTk3LjkgMTkzLjgtOTUuNSAxNDYuNSA4LjItNC42IDEwLTYuNyAyMS4zLTUuNyAzMyA0LjkgNTMuNCA2OC43IDc0LjEgMTA0LjkgMzUuMiAxNy44LTE0LjggMjMuMS02NS42IDAtODguM3pNMzIwLjcgMzA2LjFsLS42IDBjLTQzLjQgMC02Mi44LTM3LjUtNjIuOC02Mi44IDAtMzQuNyAyOC4yLTYyLjggNjIuOC02Mi44bC42IDBjMzQuNyAwIDYyLjggMjguMSA2Mi44IDYyLjggMCAyNS0xOS4yIDYyLjgtNjIuOCA2Mi44eiJdfSxwZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZHJhZnQyZGlnaXRhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjM5NiIsIk00OTYgMzk4LjFsLTE0NC04Mi4yIDAgNjQuNy05MS4zIDBjMzAuOC0zNSA4MS44LTk1LjkgMTExLjgtMTQ5LjMgMzUuMi02Mi42IDE2LjEtMTIzLjQtMTIuOC0xNTMuMy00LjQtNC42LTYyLjItNjIuOS0xNjYtNDEuMi01OS4xIDEyLjQtODkuNCA0My40LTEwNC4zIDY3LjMtMTMuMSAyMC45LTE3IDM5LjgtMTguMiA0Ny43LTUuNSAzMyAxOS40IDY3LjEgNTYuNyA2Ny4xIDMxLjcgMCA1Ny4zLTI1LjcgNTcuMy01Ny40IDAtMjcuMS0xOS43LTUyLjEtNDgtNTYuOCAxLjgtNy4zIDE3LjctMjEuMSAyNi4zLTI0LjcgNDEuMS0xNy4zIDc4IDUuMiA4My4zIDMzLjUgOC4zIDQ0LjMtMzcuMSA5MC40LTY5LjcgMTI3LjYtNzYuNiA4Ny0xNDIuOCAxNTUuNy0xNjEuMSAxNzQuOGwzMzYtLjEgMCA2NC4yIDE0NC04MS45ek0zODUuOSAzNzFsNDcuMSAyNy4yLTQ3LjEgMjcuMiAwLTU0LjR6TTEwNS40IDE2MS40YTIyLjQgMjIuNCAwIDEgMSA0NC44IDAgMjIuNCAyMi40IDAgMSAxIC00NC44IDB6TTk4LjUgMzgwLjVjMjUuNi0yNy40IDk3LjctMTA0LjcgMTUwLjgtMTY5LjkgMzUuMS00My4xIDQwLjMtODIuNCAyOC40LTExMi43LTcuNC0xOC44LTE3LjUtMzAuMi0yNC4zLTM1LjcgNDUuMyAyLjEgNjggMjMuNCA4Mi4yIDM4LjMgMCAwIDQyLjQgNDguMiA1LjggMTEzLjMtMzcgNjUuOS0xMTAuOSAxNDcuNS0xMjguNSAxNjYuN2wtMTE0LjQgMHoiXX0saGRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlcGx5ZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlNiIsIk0zMjAgNDgwbC0xOTIgMEM1Ny42IDQ4MCAwIDQyMi40IDAgMzUyTDAgMTYwQzAgODkuNiA1Ny42IDMyIDEyOCAzMmwxOTIgMGM3MC40IDAgMTI4IDU3LjYgMTI4IDEyOGwwIDE5MmMwIDcwLjQtNTcuNiAxMjgtMTI4IDEyOHpNMTkzLjQgMjczLjJjLTYuMS0yLTExLjYtMy4xLTE2LjQtMy4xLTcuMiAwLTEzLjUgMS45LTE4LjkgNS42cy05LjYgOS0xMi44IDE1LjhsLTEuMSAwLTQuMi0xOC4zLTI4IDAgMCAxMzguOSAzNi4xIDAgMC04OS43YzEuNS01LjQgNC40LTkuOCA4LjctMTMuMnM5LjgtNS4xIDE2LjItNS4xYzQuNiAwIDkuOCAxIDE1LjYgMy4xbDQuOC0zNHpNMzA4LjYgMzc2LjZjLTMuMiAyLjQtNy43IDQuOC0xMy43IDcuMXMtMTIuOCAzLjUtMjAuNCAzLjVjLTEyLjIgMC0yMS4xLTMtMjYuNS04LjktNS41LTUuOS04LjUtMTQuNy05LTI2LjRsODMuMyAwYy45LTQuOCAxLjYtOS40IDIuMS0xMy45IC41LTQuNCAuNy04LjYgLjctMTIuNSAwLTEwLjctMS42LTE5LjctNC43LTI2LjktMy4yLTcuMi03LjMtMTMtMTIuNS0xNy4yLTUuMi00LjMtMTEuMS03LjMtMTcuOC05LjItNi43LTEuOC0xMy41LTIuOC0yMC42LTIuOC0yMS4xIDAtMzcuNSA2LjEtNDkuMiAxOC4zcy0xNy41IDMwLjUtMTcuNSA1NWMwIDIyLjggNS4yIDQwLjcgMTUuNiA1My43IDEwLjQgMTMuMSAyNi44IDE5LjYgNDkuMiAxOS42IDEwLjcgMCAyMC45LTEuNSAzMC40LTQuNnMxNy4xLTYuOCAyMi42LTExLjJsLTEyLTIzLjZ6bS0yMS44LTcwLjNjMy44IDUuNCA1LjMgMTMuMSA0LjYgMjMuMWwtNTEuNyAwYy45LTkuNCAzLjctMTcgOC4yLTIyLjZzMTEuNS04LjUgMjEtOC41YzguMi0uMSAxNC4xIDIuNiAxNy45IDh6bTc5LjkgMi41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjQtOS42LTUuNy0xNi43LTUuN2MtNi43IDAtMTIgMS45LTE2LjEgNS43cy02LjEgOC45LTYuMSAxNS40IDIgMTEuNyA2LjEgMTUuNnptMCAxMDAuNWM0LjEgMy45IDkuNCA1LjggMTYuMSA1LjggNyAwIDEyLjYtMS45IDE2LjctNS44czYuMS05LjEgNi4xLTE1LjYtMi0xMS42LTYuMS0xNS40LTkuNi01LjctMTYuNy01LjdjLTYuNyAwLTEyIDEuOS0xNi4xIDUuN3MtNi4xIDguOS02LjEgMTUuNGMwIDYuNiAyIDExLjcgNi4xIDE1LjZ6Il19LHVkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbXBpcmUiLGljb246WzUxMiw1MTIsW10sImYxZDEiLCJNMjk1LjYgNTQuMmMtMTAuOC0yLjItMjIuMS0zLjMtMzMuNS0zLjZsMC0xOC4yYzc4LjEgMi4yIDE0Ni4xIDQ0IDE4NC42IDEwNi42bC0xNS44IDkuMWMtNi4xLTkuNy0xMi43LTE4LjgtMjAuMi0yNy4xbC0xOCAxNS41Yy0yNi0yOS42LTYxLjQtNTAuNy0xMDEuOS01OC40bDQuOC0yMy45ek02MS40IDMyMi40bDIzLTcuN2MtNi40LTE4LjMtMTAtMzguMi0xMC01OC43czMuMy00MC40IDkuNy01OC43bC0yMi43LTcuN2MzLjYtMTAuOCA4LjMtMjEuMyAxMy42LTMxbC0xNS44LTkuMUM0MiAxODEgMzIuMSAyMTcuNSAzMi4xIDI1NnMxMCA3NSAyNy4xIDEwNi42TDc1IDM1My41Yy01LjMtMTAtOS43LTIwLjMtMTMuNi0zMS4xek0yMjEuMSA0MzRjLTQwLjQtOC03NS44LTI5LjEtMTAxLjktNTguN2wtMTggMTUuOGMtNy41LTguNi0xNC40LTE3LjctMjAuMi0yNy40bC0xNiA5LjRjMzguNSA2Mi4zIDEwNi44IDEwNC4zIDE4NC45IDEwNi42bDAtMTguM2MtMTEuMy0uMy0yMi43LTEuNy0zMy41LTMuNmw0LjctMjMuOHpNMTAxLjMgMTIwLjlsMTggMTUuNWMyNi0yOS42IDYxLjQtNTAuNyAxMDEuOS01OC40bC00LjctMjMuOGMxMC44LTIuMiAyMi4xLTMuMyAzMy41LTMuNmwwLTE4LjJDMTcxLjkgMzQuNiAxMDMuOSA3Ni40IDY1LjQgMTM5bDE1LjggOS4xYzYtOS43IDEyLjYtMTguOSAyMC4xLTI3LjJ6TTQxMC43IDM5MS4xbC0xOC0xNS44Yy0yNiAyOS42LTYxLjQgNTAuNy0xMDEuOSA1OC43bDQuNyAyMy44Yy0xMC44IDEuOS0yMi4xIDMuMy0zMy41IDMuNmwwIDE4LjNjNzguMS0yLjIgMTQ2LjQtNDQuMyAxODQuOS0xMDYuNmwtMTYuMS05LjRjLTUuNyA5LjctMTIuNiAxOC44LTIwLjEgMjcuNHpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptNDgzLjggMGEyMzUuOCAyMzUuOCAwIDEgMCAtNDcxLjYgMCAyMzUuOCAyMzUuOCAwIDEgMCA0NzEuNiAwem0tMzktMTA2LjZMNDM3IDE1OC41YzUuMyA5LjcgMTAgMjAuMiAxMy42IDMxbC0yMi43IDcuN2M2LjQgMTguMyA5LjcgMzguMiA5LjcgNTguN3MtMy42IDQwLjQtMTAgNTguN2wyMyA3LjdjLTMuOSAxMC44LTguMyAyMS0xMy42IDMxbDE1LjggOS4xQzQ3MCAzMzEgNDc5LjkgMjk0LjUgNDc5LjkgMjU2cy05LjktNzUtMjcuMS0xMDYuNnptLTE4MyAxNzcuN2MxNi4zLTMuMyAzMC40LTExLjYgNDAuNy0yMy41bDUxLjIgNDQuOGMxMS45LTEzLjYgMjEuMy0yOS4zIDI3LjEtNDYuOGwtNjQuMi0yMi4xYzIuNS03LjUgMy45LTE1LjIgMy45LTIzLjVzLTEuNC0xNi4xLTMuOS0yMy41bDY0LjUtMjIuMWMtNi4xLTE3LjQtMTUuNS0zMy4yLTI3LjQtNDYuOGwtNTEuMiA0NC44Yy0xMC4yLTExLjktMjQuNC0yMC41LTQwLjctMjMuOGwxMy4zLTY2LjRjLTguNi0xLjktMTcuNy0yLjgtMjcuMS0yLjhzLTE4LjUgLjgtMjcuMSAyLjhsMTMuMyA2Ni40Yy0xNi4zIDMuMy0zMC40IDExLjktNDAuNyAyMy44bC01MS4yLTQ0LjhjLTExLjkgMTMuNi0yMS4zIDI5LjMtMjcuNCA0Ni44bDY0LjUgMjIuMWMtMi41IDcuNS0zLjkgMTUuMi0zLjkgMjMuNXMxLjQgMTYuMSAzLjkgMjMuNWwtNjQuMiAyMi4xYzUuOCAxNy40IDE1LjIgMzMuMiAyNy4xIDQ2LjhsNTEuMi00NC44YzEwLjIgMTEuOSAyNC40IDIwLjIgNDAuNyAyMy41bC0xMy4zIDY2LjdjOC42IDEuNyAxNy43IDIuOCAyNy4xIDIuOHMxOC41LTEuMSAyNy4xLTIuOGwtMTMuMy02Ni43eiJdfSxmZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYWNjZXNzaWJsZS1pY29uIixpY29uOls0NDgsNTEyLFs2MjEwN10sImYzNjgiLCJNNDIzLjkgMjU1LjhMNDExIDQxMy4xYy0zLjMgNDAuNy02My45IDM1LjEtNjAuNi00LjlsMTAtMTIyLjUtNDEuMSAyLjNjMTAuMSAyMC43IDE1LjggNDMuOSAxNS44IDY4LjUgMCA0MS4yLTE2LjEgNzguNy00Mi4zIDEwNi41bC0zOS4zLTM5LjNjNTcuOS02My43IDEzLjEtMTY3LjItNzQtMTY3LjItMjUuOSAwLTQ5LjUgOS45LTY3LjIgMjZMNzMgMjQzLjJjMjItMjAuNyA1MC4xLTM1LjEgODEuNC00MC4ybDc1LjMtODUuNy00Mi42LTI0LjgtNTEuNiA0NkMxMDUuNSAxNjUuMyA2NC45IDEyMCA5NSA5My4xbDY4LTYwLjdjOS44LTguOCAyNC4xLTEwLjIgMzUuNS0zLjYgMCAwIDEzOS4zIDgwLjkgMTM5LjUgODEuMSAxNi4yIDEwLjEgMjAuNyAzNiA2LjEgNTIuNmwtNTguNCA2Ni41IDEwNi4xLTUuOWMxOC41LTEuMSAzMy42IDE0LjQgMzIuMSAzMi43ek0zNTkgMTAxLjhBNTAuOSA1MC45IDAgMSAwIDM1OSAwIDUwLjkgNTAuOSAwIDEgMCAzNTkgMTAxLjh6TTE3OS42IDQ1Ni41Yy04MC42IDAtMTI3LjQtOTAuNi04Mi43LTE1Ni4xTDU3LjIgMjYwLjdDMzYuNCAyODcgMjQgMzIwLjMgMjQgMzU2LjQgMjQgNDg3LjEgMTc0LjcgNTU3LjggMjc1LjQgNDc4LjlsLTM5LjctMzkuN2MtMTYgMTAuOS0zNS4zIDE3LjMtNTYuMSAxNy4zeiJdfSxtZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicXVvcmEiLGljb246WzQ0OCw1MTIsW10sImYyYzQiLCJNNDQwLjcgMzg2LjdsLTI5LjMgMGMtMS41IDEzLjUtMTAuNSAzMC44LTMzIDMwLjgtMjAuNSAwLTM1LjMtMTQuMi00OS41LTM1LjggNDQuMi0zNC4yIDc0LjctODcuNSA3NC43LTE1MyAuMS0xMTcuNS05Ni42LTE5Ni43LTE5OC40LTE5Ni43LTk5LjcgMC0xOTcuNyA3OS43LTE5Ny43IDE5Ni43IDAgMTM0LjEgMTMxLjMgMjIxLjYgMjQ5IDE4OSAxOS43IDMzLjYgNDUuNyA2Mi4zIDk1LjIgNjIuMyA4MS44IDAgOTAuOC03NS4zIDg5LTkzLjN6TTI5Ny4yIDMyOS4yYy0xOS41LTI5LjItNDMuNy01Mi4yLTkxLjUtNTIuMi0zMC41IDAtNTQuMyAxMC02OSAyMi44bDEyLjIgMjQuM2M2LjItMyAxMy00IDE5LjgtNCAzNS41IDAgNTMuNyAzMC44IDY5LjIgNjEuMy0xMCAzLTIwLjcgNC4yLTMyLjcgNC4yLTc1IDAtMTA3LjUtNTMtMTA3LjUtMTU2LjcgMC0xMDQuNCAzMi41LTE1Ny45IDEwNy41LTE1Ny45IDc2LjIgMCAxMDguNyA1My41IDEwOC43IDE1Ny43IC4xIDQxLjgtNS40IDc1LjYtMTYuNyAxMDAuNXoiXX0sZ2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLWpjYiIsaWNvbjpbNTc2LDUxMixbXSwiZjI0YiIsIk00MzEuNSAyNDQuM2wwLTMyLjNjNDEuMiAwIDM4LjUgLjIgMzguNSAuMiA3LjMgMS4zIDEzLjMgNy4zIDEzLjMgMTYgMCA4LjgtNiAxNC41LTEzLjMgMTUuOC0xLjIgLjQtMy4zIC4zLTM4LjUgLjN6bTQyLjggMjAuMmMtMi44LS43LTMuMy0uNS00Mi44LS41bDAgMzVjMzkuNiAwIDQwIC4yIDQyLjgtLjUgNy41LTEuNSAxMy41LTggMTMuNS0xNyAwLTguNy02LTE1LjUtMTMuNS0xN3pNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTgyIDE5Mi4zbC01NyAwYzAgNjcuMSAxMC43IDEwOS43LTM1LjggMTA5LjctMTkuNSAwLTM4LjgtNS43LTU3LjItMTQuOGwwIDI4YzMwIDguMyA2OCA4LjMgNjggOC4zIDk3LjkgMCA4Mi00Ny43IDgyLTEzMS4yem0xNzguNSA0LjVjLTYzLjQtMTYtMTY1LTE0LjktMTY1IDU5LjMgMCA3Ny4xIDEwOC4yIDczLjYgMTY1IDU5LjJsMC0yOC4zQzMxMi45IDMxMS43IDI1MyAzMDkgMjUzIDI1NnM1OS44LTU1LjYgMTA3LjUtMzEuMmwwLTI4ek01NDQgMjg2LjVjMC0xOC41LTE2LjUtMzAuNS0zOC0zMmwwLS44YzE5LjUtMi43IDMwLjMtMTUuNSAzMC4zLTMwLjIgMC0xOS0xNS43LTMwLTM3LTMxIDAgMCA2LjMtLjMtMTIwLjMtLjNsMCAxMjcuNSAxMjIuNyAwYzI0LjMgLjEgNDIuMy0xMi45IDQyLjMtMzMuMnoiXX0sYmRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZlZG9yYSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc5OCIsIk0wIDI1NS44Qy4xIDEzMi4yIDEwMC4zIDMyIDIyNCAzMlM0NDggMTMyLjMgNDQ4IDI1NiAzNDcuOCA0NzkuOSAyMjQuMSA0ODBMNTAuOSA0ODBDMjIuOCA0ODAgLjEgNDU3LjMgMCA0MjkuMmwwIDAgMC0xNzMuNCAwIDB6bTM0Mi42LTYzLjFjMC0zOS43LTM1LjYtNjguNS03My4yLTY4LjUtMzQuOSAwLTY1LjggMjYuMy03MC4xIDU5LjktLjIgMy44LS40IDUtLjQgOC41LS4xIDIxLjEgMCA0Mi44LS44IDY0LjQgLjkgMjYuMSAxIDUyLjEgMCA3Ni42IDAgMjcuMS0xOS40IDQ1LjUtNDQuNyA0NS41cy00NS44LTIwLjItNDUuOC00NS41Yy41LTI3LjcgMjIuNi00NS4zIDQ4LjUtNDYuMWwuMiAwIDI2LjMtLjIgMC0zNy4zLTI2LjMgLjJjLTQ3LjEtLjQtODQuNiAzNi41LTg1LjkgODMuNCAwIDQ1LjYgMzcuNSA4Mi45IDgzIDgyLjkgNDMgMCA3OC43LTMzLjYgODIuNi03NS42bC4yLTUzLjUgMzIuNi0uM2MyNS4zIC4yIDI1LTM3LjgtLjItMzcuM2wtMzIuNCAuM2MwLTYuNCAuMS0xMi44IC4xLTE5LjIgLjEtMTIuNyAuMS0yNS40LS4xLTM4LjIgLjEtMTYuNSAxNS44LTMxLjIgMzMuMi0zMS4yIDE3LjUgMCAzNS45IDguNyAzNS45IDMxLjIgMCAzLjItLjEgNS4xLS4zIDYuMy0xLjkgMTAuNSA1LjIgMjAuNCAxNS43IDIxLjkgMTAuNiAxLjUgMjAuMi02LjEgMjEuMi0xNi42IC42LTQuMiAuNy03LjkgLjctMTEuNnoiXX0sdmRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImR1b2xpbmdvIixpY29uOls1NzYsNTEyLFtdLCJlODEyIiwiTTUwNC4zIDIzMC41YzEwLjQgODguNS00My40IDE3Mi4xLTEyOC4yIDE5OXMtMTc2LjYtMTAuMy0yMTguOS04OC43Yy03MiAzLTEzNy40LTM5LjgtMTYzLjItMTA1LjUtMi42LTYuNi0xLjktMTQgMS45LTE5LjlzMTAuMi05LjcgMTcuMi0xMC4xbDk2LjEtNi0yMy44LTc1LjljLTYuMy0yMC0yLjItNDEuOSAxMS01OC4zczMzLjctMjUgNTQuNS0yM2M1Mi4yIDUgODYuOCA0LjggMTA0LS42UzMwMCAxNi43IDMzOS0xNi45YzE1LjktMTMuNyAzNy43LTE4LjUgNTcuOC0xMi43czM2LjEgMjEuMyA0Mi40IDQxLjRMNDYyLjggODcgNTQzLjYgMzcuM2M2LTMuNyAxMy40LTQuMyAxOS45LTEuNnMxMS4zIDguMyAxMi45IDE1LjJjMTYuMiA2OC4yLTEyLjQgMTQwLjMtNzIuMSAxNzkuNXpNMjU4LjUgNDc1LjlsMCAwYzE1LjEgNy41IDIxLjUgMjUuOCAxNC4yIDQxcy0yNS40IDIxLjktNDAuNyAxNC45bC00My45LTIxYy0xNS4xLTcuNS0yMS41LTI1LjgtMTQuMi00MXMyNS40LTIxLjkgNDAuNy0xNC45bDQzLjggMjF6TTU2NC42IDM0NS43YzE0LjggOC40IDIwIDI3LjMgMTEuNiA0Mi4ybC0yMy45IDQyLjRjLTguNyAxNC4zLTI3LjEgMTkuMi00MS42IDEwLjlzLTE5LjktMjYuNi0xMi00MS40bDIzLjktNDIuNGM0LTcuMSAxMC43LTEyLjQgMTguNi0xNC42czE2LjMtMS4yIDIzLjQgMi45eiJdfSx5ZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmlyc3RkcmFmdCIsaWNvbjpbMzg0LDUxMixbXSwiZjNhMSIsIk0zODQgMTkybC02NCAwIDAgMTI4LTEyOCAwIDAgMTI4LTE5MiAwIDAtMjUuNiAxNjYuNCAwIDAtMTI4IDEyOCAwIDAtMTI4IDg5LjYgMCAwIDI1LjZ6bS0yNS42IDM4LjRsMCAxMjgtMTI4IDAgMCAxMjgtMTY2LjQgMCAwIDI1LjYgMTkyIDAgMC0xMjggMTI4IDAgMC0xNTMuNi0yNS42IDB6bTI1LjYgMTkybC04OS42IDAgMCA4OS42IDI1LjYgMCAwLTY0IDY0IDAgMC0yNS42ek0wIDBsMCAzODQgMTI4IDAgMC0xMjggMTI4IDAgMC0xMjggMTI4IDAgMC0xMjgtMzg0IDB6Il19LHhkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmcmVlYnNkIixpY29uOls0NDgsNTEyLFtdLCJmM2E0IiwiTTMwMy43IDk2LjJjMTEuMS0xMS4xIDExNS41LTc3IDEzOS4yLTUzLjIgMjMuNyAyMy43LTQyLjEgMTI4LjEtNTMuMiAxMzkuMnMtMzkuNCAuOS02My4xLTIyLjljLTIzLjgtMjMuNy0zNC4xLTUyLTIyLjktNjMuMXpNMTA5LjkgNjguMUM3My42IDQ3LjUgMjIgMjQuNiA1LjYgNDEuMS0xMSA1Ny43IDEyLjcgMTEwLjUgMzMuNSAxNDYuOCA1MiAxMTQuNiA3OC4zIDg3LjUgMTA5LjkgNjguMXpNNDA2LjcgMTc0YzMuMyAxMS4zIDIuNyAyMC43LTIuNyAyNi4xLTIwLjMgMjAuMy04Ny41LTI3LTEwOS4zLTcwLjEtMTgtMzIuMy0xMS4xLTUzLjQgMTQuOS00OC43IDUuNy0zLjYgMTIuMy03LjYgMTkuNi0xMS42LTI5LjgtMTUuNS02My42LTI0LjMtOTkuNS0yNC4zLTExOS4xIDAtMjE1LjYgOTYuNS0yMTUuNiAyMTUuNiAwIDExOSA5Ni41IDIxNS42IDIxNS42IDIxNS42UzQ0NS4zIDM4MC4xIDQ0NS4zIDI2MWMwLTM4LjQtMTAuMS03NC41LTI3LjctMTA1LjgtMy45IDctNy42IDEzLjMtMTAuOSAxOC44eiJdfSx3ZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib2R5c2VlIixpY29uOls1MTIsNTEyLFtdLCJlNWM2IiwiTTQwNi43IDQ2M2MtNDIuMyAzMC44LTk0LjQgNDktMTUwLjcgNDktMTExLjEgMC0yMDUuNy03MC44LTI0MS4xLTE2OS44IDIuNCAxLjcgNS45IDMuNiA3LjkgNC40IDE2LjMgNy40IDQwLjEtNS40IDYyLjktMjguNyA2LjktNi45IDE0LjQtMTIuNCAyMi44LTE3LjMgMTguMy0xMS45IDM3LjYtMjAuOCA1OC40LTI3LjIgMCAwIDIyLjMgMzQuMiA0My4xIDc0LjhzLTIyLjMgNTQtMjcuMiA1NGMtLjMgMC0uOCAwLTEuNS0uMS0xMS0uNS03MC0zLTU2IDUxLjEgMTQuOSA1Ny40IDk3LjUgMzYuNiAxMzkuNiA4LjlzMzEuNy0xMTguMyAzMS43LTExOC4zYzQxLjEtNi40IDU0IDM3LjEgNTcuOSA1OS40IC44IDQuNiAxLjEgOS45IDEuNCAxNS41IDEuMSAyMS4yIDIuMyA0NS42IDM1LjMgNDYuNCA1LjMgMCAxMC42LS44IDE1LjUtMmwwLS4xem0tOTUuMy0yMy43Yy0yLS41LTMuNS0yLjUtMy01IDEtMi41IDMtMy41IDUtM3MzLjUgMyAzIDUtMi41IDMuNS01IDN6bS0yMDctOTUuNmMxLjUtLjUgMy41IDEgNCAzIDAgMi0xIDQtMyA0LTEuNSAuNS0zLjUtMS00LTMtLjUtMS41IDEtMy41IDMtNHpNNDUxLjggNDIxYzM3LjUtNDQuNiA2MC4yLTEwMi4yIDYwLjItMTY1IDAtNjcuNS0yNi4xLTEyOC45LTY4LjgtMTc0LjctLjEgMjMuNS02LjEgNDguMi0xNi44IDY5LjItMTEuOSAyMC4zLTQ5IDU4LjktNjkuOCA3OC43LS43IC4zLTEuMSAuOS0xLjUgMS40LS4yIC4yLS4zIC40LS41IC42LTUgNi45LTQgMTYuOCAzIDIxLjggMjEuMyAxNS44IDU2LjQgNDUuNiA1OS40IDcyLjggMy41IDM0LjkgMjcuOSA3NS42IDM0LjIgODYuMiAuOCAxLjMgMS4zIDIuMSAxLjQgMi40IDAgMi4yLS40IDQuMy0uOCA2LjVsMCAuMXpNMzkwLjcgMjUxYy0uNSAzIDEgNS45IDQgNi40czUuOS0xIDYuNC00LTEtNS45LTQtNi40Yy0zLTEtNS45IDEtNi40IDR6bTYxLjQtNjAuOWwtMTEuNCA1LjQtMyAxMi45LTUuNC0xMS40LTEyLjktMyAxMS40LTUuNCAzLTEyLjkgNS40IDExLjQgMTIuOSAzek0zOTUuNSA0MS4zYy0xNi4yIDguMi0yMi4xIDMyLjgtMjkgNjEuNC0uMyAxLjQtLjcgMi44LTEgNC4yLTkuNSAzOC41LTMwLjYgMzcuNi00MS43IDM3LjItMS4xIDAtMi0uMS0yLjktLjEtNS4xIDAtNi00LTguOS0xNy4xLTIuNi0xMi4xLTYuOS0zMi0xNy45LTYzLjYtMjIuNy02NS44LTgyLjctNDkuNC0xMjguMi0yMi4yLTU1LjMgMzMuMS0zNC40IDEwMS45LTE5LjggMTQ5LjQgLjcgMi4yIDEuNCA0LjQgMiA2LjYtNCA0LTEzLjggNy41LTI2IDExLjktMTIuMSA0LjMtMjYuNiA5LjUtNDAuMyAxNi45LTMzLjkgMTgtNzAuMyA0OS03OS44IDYyLjYtMS4zLTEwLjctMi0yMS41LTItMzIuNSAwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDUxLjQgMCA5OS40IDE1LjIgMTM5LjUgNDEuM3pNNTguOSAxODkuNmMtMS41LTItNC41LTMtNi40LTEuNXMtMyA0LjUtMS41IDYuNCA0LjUgMyA2LjQgMS41YzIuNS0xLjUgMy00LjUgMS41LTYuNHpNMzI3LjMgNjQuOWMyLTEuNSA1LS41IDYuNCAxLjUgMS41IDIuNSAxIDUuNC0xLjUgNi40LTIgMS41LTUgLjUtNi40LTEuNXMtLjUtNSAxLjUtNi40ek05NS4xIDEwNWMtLjUgMS41IC41IDMgMiAzIDEuNSAuNSAzLS41IDMtMiAuNS0xLjUtLjUtMy0yLTNzLTMgLjUtMyAyem04NC43LS41Yy0zLjUtNDMuMSAzNy4xLTU0IDM3LjEtNTQgNDQuMS0xNS40IDU2IDUuOSA2Ni40IDM3LjZzMyA0Mi42LTM4LjYgNTguOS02MS45LTQuNS02NC45LTQyLjZsMCAuMXptODkuNiAxNC45bDEgMGMyLjUgMCA1LTIgNS01IDItNi45IDEtMTQuNC0yLTIwLjgtMS41LTItNC0zLjUtNi40LTIuNS0zIDEtNC41IDQtMy41IDYuOSAyIDQuNSAzIDkuOSAxLjUgMTQuOS0uNSAzIDEuNSA1LjkgNC41IDYuNGwtLjEgLjF6bS05LjktNDEuNmMtMiAwLTQtMS01LTNzLTItMy41LTMtNWMtMi0yLTItNS40IDAtNy40czUuNC0yIDcuNCAwYzIgMi41IDMuNSA1IDUgNy40cy41IDUuOS0yLjUgNy40Yy0uNiAwLTEgLjItMS4zIC4zLS4yIC4xLS40IC4yLS42IC4ybDAgLjF6Il19LE1kZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnZy1jaXJjbGUiLGljb246WzUxMiw1MTIsW10sImYyNjEiLCJNMjU3LjUgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTIwOCAzODIuOGwtMTI1LjctMTI1LjcgMTI1LjctMTI1LjcgMzUuMiAzNS40LTI0LjIgMjQuMi0xMS4xLTExLjEtNzcuMiA3Ny4yIDc3LjIgNzcuMiAyNi42LTI2LjYtNTMuMS01Mi45IDI0LjQtMjQuNCA3Ny4yIDc3LjItNzUgNzUuMnptOTktMi4ybC0zNS4yLTM1LjIgMjQuMS0yNC40IDExLjEgMTEuMSA3Ny4yLTc3LjItNzcuMi03Ny4yLTI2LjUgMjYuNSA1My4xIDUyLjktMjQuNCAyNC40LTc3LjItNzcuMiA3NS03NSAxMjUuNyAxMjUuNy0xMjUuNyAxMjUuNnoiXX0semRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNsb3VkZmxhcmUiLGljb246WzY0MCw1MTIsW10sImUwN2QiLCJNNDA3LjkgMzE5LjlMMTc3LjEgMzE3Yy0uNyAwLTEuNC0uMi0yLS41cy0xLjItLjgtMS42LTEuNGMtLjQtLjYtLjctMS4zLS43LTJzMC0xLjQgLjItMi4xYy40LTEuMSAxLjEtMi4xIDIuMS0yLjhzMi4xLTEuMiAzLjMtMS4ybDIzMi45LTIuOWMyNy42LTEuMyA1Ny41LTIzLjYgNjgtNTAuOGwxMy4zLTM0LjVjLjQtLjkgLjUtMS45IC41LTIuOSAwLS41LS4xLTEuMS0uMi0xLjYtNy40LTMyLjItMjUtNjEuMS01MC4zLTgyLjNzLTU2LjctMzMuNy04OS43LTM1LjUtNjUuNiA3LjMtOTMgMjUuNy00OCA0NS4zLTU4LjggNzYuNWMtMTEuMy04LjUtMjQuOS0xMy4zLTM5LTEzLjdzLTI4IDMuNS0zOS44IDExLjQtMjAuOCAxOS4xLTI1LjkgMzIuMy01LjkgMjcuNi0yLjQgNDEuM2MtNTIuMyAxLjUtOTQuMiA0NC4xLTk0LjIgOTYuNSAwIDQuNyAuMyA5LjMgMSAxNCAuMiAxLjEgLjcgMi4xIDEuNSAyLjhzMS45IDEuMSAyLjkgMS4xbDQyNi4xIC4xYzAgMCAuMSAwIC4xIDAgMS4yIDAgMi4zLS40IDMuMy0xLjFzMS42LTEuNyAyLTIuOWwzLjMtMTEuM2MzLjktMTMuNCAyLjQtMjUuOC00LjEtMzQuOS02LTguNC0xNi4xLTEzLjMtMjguMi0xMy45em0xMDUuOS05OC44Yy0yLjEgMC00LjMgLjEtNi40IC4yLS44IC4xLTEuNSAuMy0yLjEgLjhzLTEgMS4xLTEuMyAxLjhsLTkuMSAzMS4yYy0zLjkgMTMuNC0yLjQgMjUuOCA0LjEgMzQuOSA2IDguNCAxNi4xIDEzLjMgMjguMiAxMy45bDQ5LjIgMi45Yy43IDAgMS40IC4yIDIgLjVzMS4xIC44IDEuNSAxLjRjLjQgLjYgLjcgMS4zIC44IDJzMCAxLjUtLjIgMi4xYy0uNCAxLjEtMS4xIDIuMS0yLjEgMi44cy0yLjEgMS4yLTMuMyAxLjJsLTUxLjEgMi45Yy0yNy44IDEuMy01Ny43IDIzLjYtNjguMSA1MC44bC0zLjcgOS42Yy0uMiAuNC0uMiAuOC0uMiAxLjNzLjIgLjggLjQgMS4yIC42IC43IC45IC45IC44IC4zIDEuMiAuM2MwIDAgLjEgMCAuMSAwbDE3NS45IDBjMSAwIDItLjMgMi44LS45czEuNC0xLjUgMS43LTIuNGMzLjEtMTEuMSA0LjctMjIuNSA0LjctMzQgMC02OS4zLTU2LjUtMTI1LjUtMTI2LjEtMTI1LjV6Il19LGtkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJoYWNrZXJyYW5rIixpY29uOls1MTIsNTEyLFtdLCJmNWY3IiwiTTQ3Ny45IDEyOEM0NjMuNCAxMDMgMjg1LjUgMCAyNTYuNSAwcy0yMDYuOSAxMDIuOC0yMjEuMyAxMjgtMTQuNSAyMzAuOCAwIDI1NiAxOTIuNCAxMjggMjIxLjMgMTI4IDIwNi44LTEwMi45IDIyMS4zLTEyOCAxNC41LTIzMSAwLTI1NnpNMzE2LjUgNDE0LjJjLTQgMC00MC45LTM1LjgtMzgtMzguNyAuOS0uOSA2LjMtMS41IDE3LjUtMS44IDAtMjYuMiAuNi02OC42IC45LTg2LjMgMC0yLS40LTMuNC0uNC01LjhsLTc5LjkgMGMwIDcuMS0uNSAzNi4yIDEuNCA3Mi45IC4yIDQuNS0xLjYgNi01LjcgNS45LTEwLjEgMC0yMC4zLS4xLTMwLjQtLjEtNC4xIDAtNS45LTEuNS01LjctNi4xIC45LTMzLjQgMy04NC0uMi0yMTIuN2wwLTMuMmMtOS43LS40LTE2LjQtMS0xNy4zLTEuOC0yLjktMi45IDM0LjUtMzguNyAzOC41LTM4LjdzNDEuMiAzNS44IDM4LjMgMzguN2MtLjkgLjktNy45IDEuNS0xNi44IDEuOGwwIDMuMmMtMi40IDI1LjgtMiA3OS42LTIuNiAxMDUuNGw4MC4zIDBjMC00LjYgLjQtMzQuNy0xLjItODMuNi0uMS0zLjQgMS01LjIgNC4yLTUuMiAxMS4xLS4xIDIyLjItLjEgMzMuMi0uMSAzLjUgMCA0LjYgMS43IDQuNSA1LjQtMy43IDE5MS4zLS43IDE3Ny45LS43IDIxMC4zIDguOSAuNCAxNi44IDEgMTcuNyAxLjggMi45IDIuOS0zMy42IDM4LjctMzcuNiAzOC43bDAgMHoiXX0sU2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNreWF0bGFzIixpY29uOls2NDAsNTEyLFtdLCJmMjE2IiwiTTY0MCAzMjkuM2MwIDY1LjktNTIuNSAxMTQuNC0xMTcuNSAxMTQuNC0xNjUuOSAwLTE5Ni42LTI0OS43LTM1OS43LTI0OS43LTE0Ni45IDAtMTQ3LjEgMjEyLjIgNS42IDIxMi4yIDQyLjUgMCA5MC45LTE3LjggMTI1LjMtNDIuNSA1LjYtNC4xIDE2LjktMTYuMyAyMi44LTE2LjNzMTAuOSA1IDEwLjkgMTAuOWMwIDcuOC0xMy4xIDE5LjEtMTguNyAyNC4xLTQwLjkgMzUuNi0xMDAuMyA2MS4yLTE1NC43IDYxLjItODMuNCAuMS0xNTQtNTktMTU0LTE0NC45UzY3LjUgMTQ5LjYgMTUyLjggMTQ5LjZjMTg1LjMgMCAyMjIuNSAyNDUuOSAzNjEuOSAyNDUuOSA5OS45IDAgOTQuOC0xMzkuNyAzLjQtMTM5LjctMTcuNSAwLTM1IDExLjYtNDYuOSAxMS42LTguNCAwLTE1LjktNy4yLTE1LjktMTUuNiAwLTExLjYgNS4zLTIzLjcgNS4zLTM2LjMgMC02Ni42LTUwLjktMTE0LjctMTE2LjktMTE0LjctNTMuMSAwLTgwIDM2LjktODguOCAzNi45LTYuMiAwLTExLjItNS0xMS4yLTExLjIgMC01LjYgNC4xLTEwLjMgNy44LTE0LjQgMjUuMy0yOC44IDY0LjctNDMuNyAxMDIuOC00My43IDc5LjQgMCAxMzkuMSA1OC40IDEzOS4xIDEzNy44IDAgNi45LS4zIDEzLjctMS4yIDIwLjYgMTEuOS0zLjEgMjQuMS00LjcgMzUuOS00LjcgNjAuNyAwIDExMS45IDQ1LjMgMTExLjkgMTA3LjJ6Il19LENkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkZXNrcHJvIixpY29uOls0NDgsNTEyLFtdLCJmMzhmIiwiTTEyMiA0MDYuMmw4NCAwYzIzLjEgMCA0My45LTMuNSA2Mi42LTEwLjcgMTguNy03LjEgMzQuNy0xNy4xIDQ4LTMwLjEgMTMuMy0xMy40IDIzLjYtMjkuMiAzMC43LTQ3LjUgMy45LTkuNiA2LjgtMTkuOCA4LjYtMzAuNmw3My43IDBjLTIuNSAyMS4zLTcuNyA0MS4zLTE1LjUgNjAtMTEuMSAyNy4yLTI2LjkgNTAuOC00Ny4zIDcwLjktMjAgMTkuNi00NC4yIDM0LjgtNzIuNiA0NS40cy02MCAxNi05NC43IDE2bC0xNDkuOCAuMiAwLTE5Mi40IDcyLjMtLjIgMCAxMTguOHpNMTk5LjQgMzJjMzQuNyAwIDY2LjIgNS40IDk0LjcgMTYgMjguNSAxMC43IDUyLjkgMjYuMSA3My4zIDQ2LjIgMjAuNCAxOS42IDM2LjIgNDMuMiA0Ny4zIDcwLjkgNy41IDE4LjMgMTIuNCAzOC4xIDE0LjkgNTkuM2wtNzMuNy0uMWMtMS45LTEwLjUtNC43LTIwLjUtOC42LTI5LjktNy4xLTE4LjctMTcuMy0zNC41LTMwLjctNDcuNS0xMy4zLTEzLjQtMjkuMy0yMy42LTQ4LTMwLjgtMTguNi03LjEtMzkuNS0xMC43LTYyLjctMTAuN2wtODQgMCAwIDExOC44LTcyLjIgLjIgMC0xOTIuMyAxNDkuNy0uMXoiXX0sX2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJlc29sdmluZyIsaWNvbjpbNTEyLDUxMixbXSwiZjNlNyIsIk0yODkuMiAyNzguMmM0Ni0xMy4zIDQ5LjYtMjMuNSA0NC00My40TDMyMiAxOTUuNWMtNi4xLTIwLjktMTguNC0yOC4xLTcxLjEtMTIuOGwtMTg4LjIgNTQuMSAyOC42IDk4LjYgMTk3LjktNTcuMnpNMjU2LjUgOEMxMzkuNCA4IDQxLjIgODguNyAxNS4yIDE5Ny41bDIyMS45LTYzLjljMzQuOC0xMC4yIDU0LjItMTEuNyA3OS4zLTguMiAzNi4zIDYuMSA1Mi43IDI1IDYxLjQgNTUuMmwxMC43IDM3LjhjOC4yIDI4LjEgMSA1MC42LTIzLjUgNzMuNi0xOS40IDE3LjQtMzEuMiAyNC41LTYxLjQgMzMuMmwtOTIuNiAyNi42IDIyMC40IDI3LjEgOS43IDM0LjItNDguMSAxMy4zLTI4Ni44LTM3LjMgMjMgODAuMkMxNjYgNDkxLjMgMjA5LjUgNTA0IDI1NS41IDUwNCAzOTIuNSA1MDQgNTA0IDM5Mi42IDUwNCAyNTUuNyA1MDUgMTE5LjQgMzkzLjUgOCAyNTYuNSA4ek00Ni4zIDM4OC42TDggMjU2LjhjMCA0OC41IDE0LjMgOTMuNCAzOC4zIDEzMS44eiJdfSxUZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYmxhY2tiZXJyeSIsaWNvbjpbNTEyLDUxMixbXSwiZjM3YiIsIk0xNjYgMTE2LjljMCAyMy40LTE2LjQgNDkuMS03Mi41IDQ5LjFsLTcwLjEgMCAyMS04OC44IDY3LjggMGM0Mi4xIDAgNTMuOCAyMy4zIDUzLjggMzkuN3pNMjkyLjIgNzcuMmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuNC0xMS42LTM5LjctNTMuNy0zOS43ek04OC44IDIwOC4xbC02Ny44IDAtMjEgODguOCA3MC4xIDBjNTYuMSAwIDcyLjUtMjMuNCA3Mi41LTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My44LTM5Ljd6bTE4MC4xIDBsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS43LTM5LjctNTMuNy0zOS43em0xODkuMy01My44bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yMy40IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6bS0yOCAxMzcuOWwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6TTI0MC44IDM0NmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuMy0xMS42LTM5LjctNTMuNy0zOS43eiJdfSxMZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3RyaXBlLXMiLGljb246WzM4NCw1MTIsW10sImY0MmEiLCJNMTU1LjYgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43bDAtMTM0LjNjLTQ3LjMtMTguOS05NC41LTI2LjEtMTQxLjgtMjYuMS0xMTUuNyAwLTE5Mi44IDYwLjQtMTkyLjggMTYxLjQgMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41bDAgMTI4LjVjNDkuMyAyMS4zIDEwMi4zIDMyLjMgMTU2IDMyLjQgMTE4LjYgMCAyMDAuMy01MSAyMDAuMy0xNTMuNiAwLTE3MC4yLTIxOC0xMzkuNy0yMTgtMjAzLjl6Il19LGhFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1iZWhhbmNlIixpY29uOls0NDgsNTEyLFsiYmVoYW5jZS1zcXVhcmUiXSwiZjFiNSIsIk0xNTUuMyAzMTguNGMxNy4yIDAgMzEuMi02LjEgMzEuMi0yNS40IDAtMTkuNy0xMS43LTI3LjQtMzAuMy0yNy41bC00NiAwIDAgNTIuOSA0NS4xIDB6bS01LjQtMTI5LjZsLTM5LjYgMCAwIDQ0LjggNDIuNyAwYzE1LjEgMCAyNS44LTYuNiAyNS44LTIyLjkgMC0xNy43LTEzLjctMjEuOS0yOC45LTIxLjl6bTEyOS41IDc0LjhsNjIuMiAwYy0xLjctMTguNS0xMS4zLTI5LjctMzAuNS0yOS43LTE4LjMgMC0zMC41IDExLjQtMzEuNyAyOS43ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMzQ5LjUgMTg1bC03Ny44IDAgMC0xOC45IDc3LjggMCAwIDE4Ljl6TTE5My43IDI0My43YzIzLjYgNi43IDM1IDI3LjUgMzUgNTEuNiAwIDM5LTMyLjcgNTUuNy02Ny42IDU1LjlsLTkzLjEgMCAwLTE5MiA5MC41IDBjMzIuOSAwIDYxLjQgOS4zIDYxLjQgNDcuNSAwIDE5LjMtOSAyOC44LTI2LjIgMzd6bTExOC43LTM4LjZjNDMuNSAwIDY3LjYgMzQuMyA2Ny42IDc1LjQgMCAxLjYtLjEgMy4zLS4yIDUgMCAuOC0uMSAxLjUtLjEgMi4ybC0xMDAuMiAwYzAgMjIuMiAxMS43IDM1LjMgMzQuMSAzNS4zIDExLjYgMCAyNi41LTYuMiAzMC4yLTE4LjFsMzMuNyAwYy0xMC40IDMxLjktMzEuOSA0Ni44LTY1LjEgNDYuOC00My44IDAtNzEuMS0yOS43LTcxLjEtNzMgMC00MS44IDI4LjctNzMuNiA3MS4xLTczLjZ6Il19LCRkZT1oRSxBZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2VydmljZXN0YWNrIixpY29uOls1MTIsNTEyLFtdLCJmM2VjIiwiTTk2IDIxNmM4MS43IDEwLjIgMjczLjcgMTAyLjMgMzA0IDIzMkw4IDQ0OGM5OS41LTguMSAxODQuNS0xMzcgODgtMjMyek0xMjggNjRjMzIuMyAzNS42IDQ3LjcgODMuOSA0Ni40IDEzMy42IDgyLjkgMzMuNyAyMDcuMyAxMjMuNyAyMzMuNiAyNTAuNGw5NiAwQzQ2My4zIDIzMS45IDIzMC44IDc5LjUgMTI4IDY0eiJdfSxEZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicm9ja2V0Y2hhdCIsaWNvbjpbNTc2LDUxMixbXSwiZjNlOCIsIk0yODQuNSAyMjQuOGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTkuOXptLTExMC40IDBjLTYuNyAwLTEzLjMgMi4xLTE4LjkgNS44cy05LjkgOS4xLTEyLjUgMTUuNC0zLjIgMTMuMS0xLjkgMTkuNyA0LjYgMTIuNyA5LjQgMTcuNCAxMC45IDggMTcuNSA5LjMgMTMuNSAuNiAxOS43LTIgMTEuNS03IDE1LjMtMTIuNiA1LjctMTIuMiA1LjctMTguOWMwLTkuMS0zLjctMTcuOC0xMC4xLTI0LjJzLTE1LjEtMTAtMjQuMi0xMGwwIDB6bTIyMC45IDBhMzQuMSAzNC4xIDAgMSAwIC40IDY4LjIgMzQuMSAzNC4xIDAgMSAwIC0uNC02OC4yem0xNTMuOC01NS4zYy0xNS41LTI0LjItMzcuMy00NS42LTY0LjctNjMuNi01Mi45LTM0LjgtMTIyLjQtNTQtMTk1LjctNTQtMjQuMiAwLTQ4LjMgMi4xLTcyIDYuNC0xNC45LTE0LjMtMzEuNS0yNi42LTQ5LjUtMzYuNi02Ni44LTMzLjMtMTI1LjYtMjAuOS0xNTUuMy0xMC4yLTIuMyAuOC00LjMgMi4xLTUuOSAzLjlzLTIuNyAzLjktMy4zIDYuMi0uNSA0LjcgLjEgNy4xIDEuOCA0LjQgMy41IDYuMUMyNyA1Ni41IDYxLjYgOTkuMyA1My4xIDEzOC4zIDIwIDE3Mi4yIDIgMjEzIDIgMjU1LjYgMiAyOTkgMjAgMzM5LjggNTMuMSAzNzMuNyA2MS42IDQxMi43IDI3IDQ1NS42IDYgNDc3LjIgNC4zIDQ3OSAzLjIgNDgxLjEgMi41IDQ4My40cy0uNyA0LjctLjEgNyAxLjcgNC41IDMuMyA2LjIgMy42IDMuMSA1LjkgMy45YzI5LjcgMTAuNyA4OC41IDIzLjEgMTU1LjMtMTAuMiAxOC0xMCAzNC43LTIyLjMgNDkuNS0zNi42IDIzLjggNC4zIDQ3LjkgNi40IDcyIDYuNCA3My4zIDAgMTQyLjgtMTkuMiAxOTUuNy01NCAyNy40LTE4IDQ5LjEtMzkuNCA2NC43LTYzLjYgMTcuMy0yNi45IDI2LjEtNTUuOSAyNi4xLTg2LjEgMC0zMS04LjgtNjAtMjYuMS04Ni45bDAgMHpNMjg1LjQgNDA5LjljLTMwLjIgLjEtNjAuMy0zLjgtODkuNC0xMS41bC0yMC4xIDE5LjRjLTExLjIgMTAuNy0yMy42IDIwLTM3LjEgMjcuNi0xNi40IDguMi0zNC4yIDEzLjMtNTIuNSAxNC45IDEtMS44IDEuOS0zLjYgMi44LTUuNCAyMC4yLTM3LjEgMjUuNi03MC41IDE2LjMtMTAwLjEtMzMtMjYtNTIuOC01OS4yLTUyLjgtOTUuNCAwLTgzLjEgMTA0LjMtMTUwLjUgMjMyLjgtMTUwLjVzMjMyLjkgNjcuNCAyMzIuOSAxNTAuNWMwIDgzLjEtMTA0LjMgMTUwLjUtMjMyLjkgMTUwLjV6Il19LEVkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWJlbCIsaWNvbjpbNTEyLDUxMixbXSwiZjFkMCIsIk0yNTYuOSA1MDRjLTEzOS4zIDAtMjQ3LjUtMTE2LjItMjQzLjMtMjU0LjEgMi44LTc5LjIgNDMuMi0xNTIuMiAxMTYuNS0yMDAuNCAuMyAwIDEuOS0uNiAxLjEgLjgtNS44IDUuNS0xMTEuMyAxMjkuOC0xNC4xIDIyNi40IDQ5LjggNDkuNSA5MCAyLjUgOTAgMi41IDM4LjUtNTAuMS0uNi0xMjUuOS0uNi0xMjUuOS0xMC0yNC45LTQ1LjctNDAuMS00NS43LTQwLjFsMjguOC0zMS44YzI0LjQgMTAuNSA0My4yIDM4LjcgNDMuMiAzOC43IC44LTI5LjYtMjEuOS02MS40LTIxLjktNjEuNEwyNTUuNSA4IDI5OS44IDU4LjFjLTIwLjUgMjguOC0yMS45IDYyLjYtMjEuOSA2Mi42IDEzLjgtMjMgNDMuNS0zOS4zIDQzLjUtMzkuM2wyOC41IDMxLjhjLTI3LjQgOC45LTQ1LjQgMzkuOS00NS40IDM5LjktMTUuOCAyOC41LTI3LjEgODkuNCAuNiAxMjcuMyAzMi40IDQ0LjYgODcuNy0yLjggODcuNy0yLjggMTAyLjctOTEuOS0xMC41LTIyNS0xMC41LTIyNS02LjEtNS41IC44LTIuOCAuOC0yLjggNTAuMSAzNi41IDExNC42IDg0LjQgMTE2LjIgMjA0LjggMiAxNDUuNi05OS45IDI0OS40LTI0Mi40IDI0OS40eiJdfSxQZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXdlYi1hd2Vzb21lIixpY29uOls0NDgsNTEyLFtdLCJlNjgzIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIzNSAxNzcuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdfSxJZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibGlua3RyZWUiLGljb246WzQ0OCw1MTIsW10sImU3ZDgiLCJNMTYgMTczLjRsMTI1LjggMC04OS40LTg1LjQgNDkuNS01MSA4NS4yIDg3LjggMC0xMjQuOCA3My45IDAgMCAxMjQuOCA4NS4yLTg3LjYgNDkuNCA1MC44LTg5LjQgODUuMiAxMjUuNyAwIDAgNzAuNS0xMjYuNCAwIDkwIDg3LjYtNDkuMyA0OS44LTEyMi4yLTEyMy0xMjIuMiAxMjMtNDkuNS00OS42IDkwLTg3LjYtMTI2LjQgMCAwLTcwLjV6TTE4Ni45IDM0NC44bDczLjkgMCAwIDE2Ny4yLTczLjkgMCAwLTE2Ny4yeiJdfSxOZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2ltcGx5YnVpbHQiLGljb246WzUxMiw1MTIsW10sImYyMTUiLCJNNDgxLjYgNjRsLTEwNiAwQzM2MS4xIDY0IDM0OSA3NS44IDM0OSA5MC4zbDAgMzkuNi0xODUuMyAwIDAtMzkuNmMwLTE0LjUtMTItMjYuMy0yNi42LTI2LjNsLTEwNiAwQzE2LjUgNjQgNC43IDc1LjggNC43IDkwLjNsMCAzMzEuNGMwIDE0LjUgMTEuOCAyNi4zIDI2LjYgMjYuM2w0NTAuNCAwYzE0LjggMCAyNi42LTExLjggMjYuNi0yNi4zbDAtMzMxLjRjLS4yLTE0LjUtMTItMjYuMy0yNi43LTI2LjN6TTE1MC41IDIyMi43YTY2LjUgNjYuNSAwIDEgMSAtLjMgMTMzLjEgNjYuNSA2Ni41IDAgMSAxIC4zLTEzMy4xem0yMTEuOSAuMWE2Ni41IDY2LjUgMCAxIDEgLjMgMTMyLjkgNjYuNSA2Ni41IDAgMSAxIC0uMy0xMzIuOXoiXX0sRmRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0dWJiZXIiLGljb246WzQ0OCw1MTIsW10sImU1YzciLCJNMTM2LjUgMjk0LjJsNTguOCAyMi45YzkuMS0zNi44IDI1LjQtNjEuMSA1NS02MS4xIDQ5LjQgMCA3MS40IDYzLjYgMTQyLjQgNjMuNiAxNS42IDAgMzUuOS0yLjggNTUuMy0xMy4zbDAgNjEuN2MwIDYxLjgtNTAuNCAxMTItMTEyLjMgMTEyTDAgNDgwIDQxLjggNDI0IDAgMzY4IDQxLjcgMzEyIDAgMjU2LjEgNDEuOCAyMDAuMSAwIDE0NC4xIDQxLjggODggMCAzMiAzMzUuNyAzMkMzOTcuNiAzMiA0NDggODIuMyA0NDggMTQ0LjFsMCA1MS4zYy05LjIgMzYuMy0yNS45IDYwLjYtNTUgNjAuNi00OS42IDAtNzEuNi02My41LTE0Mi40LTYzLjUtMzUuOSAwLTk1LjIgMTQuNi0xMTQuMSAxMDEuNmwwIC4xeiJdfSxPZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXBwZXIiLGljb246WzY0MCw1MTIsW10sImYzNzEiLCJNNDIuMSAyMzkuMWMyMi4yIDAgMjkgMi44IDMzLjUgMTQuNmwuOCAwIDAtMjIuOWMwLTExLjMtNC44LTE1LjQtMTcuOS0xNS40LTExLjMgMC0xNC40IDIuNS0xNS4xIDEyLjhsLTM4LjYgMGMuMy0xMy45IDEuNS0xOS4xIDUuOC0yNC40IDcuMy04LjggMTguOS0xMS44IDQ2LjEtMTEuOCAzMyAwIDQ3LjEgNSA1My45IDE4LjkgMiA0LjMgNCAxNS42IDQgMjMuN2wwIDc2LjMtMzguMyAwIDEuMy0xOS4xLTEgMGMtNS4zIDE1LjYtMTMuNiAyMC40LTM1LjUgMjAuNC0zMC4zIDAtNDEuMS0xMC4xLTQxLjEtMzcuMyAwLTI1LjIgMTIuMy0zNS44IDQyLjEtMzUuOHptMTcuMSA0OC4xYzEzLjEgMCAxNi45LTMgMTYuOS0xMy40IDAtOS4xLTQuMy0xMS42LTE5LjYtMTEuNi0xMy4xIDAtMTcuOSAzLTE3LjkgMTIuMS0uMSAxMC40IDMuNyAxMi45IDIwLjYgMTIuOXpNMTM3IDE5Mi4zbDM4LjMgMC0xLjUgMjAuNiAuOCAwYzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjIgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4ybC0uOCAwIDAgNzAuMy0zOS41IDAgMC0xNjl6TTIxNy45IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTU3LjktNjAuN2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4zIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5IC4xIDB6TTM1Ni43IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTUzLjgtMy44YzAtMjUuNCAzLjMtMzcuOCAxMi4zLTQ1LjggOC44LTguMSAyMi4yLTExLjMgNDUuMS0xMS4zIDQyLjggMCA1NS43IDEyLjggNTUuNyA1NS43bDAgMTEuMS03NS4zIDBjLS4zIDItLjMgNC0uMyA0LjggMCAxNi45IDQuNSAyMS45IDIwLjEgMjEuOSAxMy45IDAgMTcuOS0zIDE3LjktMTMuOWwzNy41IDAgMCAyLjNjMCA5LjgtMi41IDE4LjktNi44IDI0LjctNy4zIDkuOC0xOS42IDEzLjYtNDQuMyAxMy42LTI3LjUgMC00MS42LTMuMy01MC42LTEyLjMtOC41LTguNS0xMS4zLTIxLjMtMTEuMy01MC44em03Ni40LTExLjZjLS4zLTEuOC0uMy0zLjMtLjMtMy44IDAtMTIuMy0zLjMtMTQuNi0xOS42LTE0LjYtMTQuNCAwLTE3LjEgMy0xOC4xIDE1LjFsLS4zIDMuMyAzOC4zIDB6bTU1LjYtNDUuM2wzOC4zIDAtMS44IDE5LjkgLjcgMGM2LjgtMTQuOSAxNC40LTIwLjIgMjkuNy0yMC4yIDEwLjggMCAxOS4xIDMuMyAyMy40IDkuMyA1LjMgNy4zIDYuOCAxNC40IDYuOCAzNCAwIDEuNSAwIDUgLjIgOS4zbC0zNSAwYy4zLTEuOCAuMy0zLjMgLjMtNCAwLTE1LjQtMi0xOS40LTEwLjMtMTkuNC02LjMgMC0xMC44IDMuMy0xMy4xIDkuMy0xIDMtMSA0LjMtMSAxMi4zbDAgNjgtMzguMyAwIDAtMTE4LjUgLjEgMHoiXX0sUmRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2dsZS1zY2hvbGFyIixpY29uOls1MTIsNTEyLFtdLCJlNjNiIiwiTTM5MC45IDI5OC41czAgLjEgLjEgLjFjOS4yIDE5LjQgMTQuNCA0MS4xIDE0LjQgNjQtLjEgODIuNS02Ni45IDE0OS40LTE0OS40IDE0OS40UzEwNi43IDQ0NS4xIDEwNi43IDM2Mi43YzAtMjIuOSA1LjItNDQuNiAxNC40LTY0IDEuNy0zLjYgMy42LTcuMiA1LjYtMTAuNyA0LjQtNy42IDkuNC0xNC43IDE1LTIxLjMgMjcuNC0zMi42IDY4LjUtNTMuMyAxMTQuNC01My4zIDMzLjYgMCA2NC42IDExLjEgODkuNiAyOS45IDkuMSA2LjkgMTcuNCAxNC43IDI0LjggMjMuNSA1LjYgNi42IDEwLjYgMTMuOCAxNSAyMS4zIDIgMy40IDMuOCA3IDUuNSAxMC41bC0uMS0uMXptMjYuNC0xOC44Yy0zMC4xLTU4LjQtOTEtOTguNC0xNjEuMy05OC40cy0xMzEuMiA0MC0xNjEuMyA5OC40bC05NC43LTc3IDI1Ni0yMDIuNyAyNTYgMjAyLjctOTQuNyA3Ny4xIDAtLjF6Il19LEJkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5YXJuIixpY29uOls1MTIsNTEyLFtdLCJmN2UzIiwiTTQwMS45IDM0NS4yYy0zOSA5LjMtNDguNCAzMi4xLTEwNCA0Ny40IDAgMC0yLjcgNC0xMC40IDUuOC0xMy40IDMuMy02My45IDYtNjguNSA2LjEtMTIuNCAuMS0xOS45LTMuMi0yMi04LjItNi40LTE1LjMgOS4yLTIyIDkuMi0yMi04LjEtNS05LTkuOS05LjgtOC4xLTIuNCA1LjgtMy42IDIwLjEtMTAuMSAyNi41LTguOCA4LjktMjUuNSA1LjktMzUuMyAuOC0xMC44LTUuNyAuOC0xOS4yIC44LTE5LjJzLTUuOCAzLjQtMTAuNS0zLjZjLTYtOS4zLTE3LjEtMzcuMyAxMS41LTYyLTEuMy0xMC4xLTQuNi01My43IDQwLjYtODUuNiAwIDAtMjAuNi0yMi44LTEyLjktNDMuMyA1LTEzLjQgNy0xMy4zIDguNi0xMy45IDUuNy0yLjIgMTEuMy00LjYgMTUuNC05LjEgMjAuNi0yMi4yIDQ2LjgtMTggNDYuOC0xOHMxMi40LTM3LjggMjMuOS0zMC40YzMuNSAyLjMgMTYuMyAzMC42IDE2LjMgMzAuNnMxMy42LTcuOSAxNS4xLTVjOC4yIDE2IDkuMiA0Ni41IDUuNiA2NS4xLTYuMSAzMC42LTIxLjQgNDcuMS0yNy42IDU3LjUtMS40IDIuNCAxNi41IDEwIDI3LjggNDEuMyAxMC40IDI4LjYgMS4xIDUyLjcgMi44IDU1LjMgLjggMS40IDEzLjcgLjggMzYuNC0xMy4yIDEyLjgtNy45IDI4LjEtMTYuOSA0NS40LTE3IDE2LjctLjUgMTcuNiAxOS4yIDQuOSAyMi4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00MTYuNyA3NS4yYy0xLjctMTMuNi0xMy4yLTIzLTI4LTIyLjgtMjIgLjMtNDAuNSAxMS43LTUyLjggMTkuMi00LjggMy04LjkgNS4yLTEyLjQgNi44IDMuMS00NC41LTIyLjUtNzMuMS0yOC43LTc5LjQgNy44LTExLjMgMTguNC0yNy44IDIzLjQtNTMuMiA0LjMtMjEuNyAzLTU1LjUtNi45LTc0LjUtMS42LTMuMS03LjQtMTEuMi0yMS03LjQtOS43LTIwLTEzLTIyLjEtMTUuNi0yMy44LTEuMS0uNy0yMy42LTE2LjQtNDEuNCAyOC0xMi4yIC45LTMxLjMgNS4zLTQ3LjUgMjIuOC0yIDIuMi01LjkgMy44LTEwLjEgNS40bC4xIDBjLTguNCAzLTEyLjMgOS45LTE2LjkgMjIuMy02LjUgMTcuNCAuMiAzNC42IDYuOCA0NS43LTE3LjggMTUuOS0zNyAzOS44LTM1LjcgODIuNS0zNCAzNi0xMS44IDczLTUuNiA3OS42LTEuNiAxMS4xIDMuNyAxOS40IDEyIDIzLjggMTIuNiA2LjcgMzAuMyA5LjYgNDMuOSAyLjggNC45IDUuMiAxMy44IDEwLjEgMzAgMTAuMSA2LjggMCA1OC0yLjkgNzIuNi02LjUgNi44LTEuNiAxMS41LTQuNSAxNC42LTcuMSA5LjgtMy4xIDM2LjgtMTIuMyA2Mi4yLTI4LjcgMTgtMTEuNyAyNC4yLTE0LjIgMzcuNi0xNy40IDEyLjktMy4yIDIxLTE1LjEgMTkuNC0yOC4yeiJdfSxIZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3RhY2stb3ZlcmZsb3ciLGljb246WzM4NCw1MTIsW10sImYxNmMiLCJNMjkxIDMxMWwtMTk1LjctNDEuMy04LjIgMzkuMyAxOTUuNyA0MSA4LjItMzl6bTUxLTg3TDE4OC41IDk1LjcgMTYzIDEyNi41IDMxNi41IDI1NC44IDM0MiAyMjR6bS0zMS4yIDM5LjdMMTI5LjUgMTc5IDExMi44IDIxNS41IDI5NCAzMDAgMzEwLjggMjYzLjd6TTI2Mi4zIDMybC0zMiAyNCAxMTkuMyAxNjAuMyAzMi0yNC0xMTkuMy0xNjAuM3ptMjAuNSAzMjhsLTIwMCAwIDAgMzkuNyAyMDAgMCAwLTM5Ljd6bTM5LjcgODBsLTI3OS41IDAgMC0xMjAtNDAgMCAwIDE2MCAzNTkuNSAwIDAtMTYwLTQwIDAgMCAxMjB6Il19LHFkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibHVldG9vdGgiLGljb246WzM4NCw1MTIsW10sImYyOTMiLCJNMjYwLjYgMTcxLjFsLTQyLjkgNDIuOS0uMy04NiA0My4yIDQzLjF6TTIxNy40IDM5MC45bDQzLjEtNDMuMS00Mi45LTQyLjktLjIgODZ6TTM4NCAyNTkuNEMzODQgNDY1IDMxMi4xIDUxMiAxOTguOSA1MTJTMCA0NjUgMCAyNTkuNCA4My40IDAgMTk2LjYgMCAzODQgNTMuOSAzODQgMjU5LjR6bS0xNTguNSAwbDc5LjQtODguNi0xMjUuMS0xMzQuMyAwIDE3Ni45LTczLjgtNzMuOC0yNyAyNi45IDkyLjcgOTMtOTIuNyA5MyAyNi45IDI2LjkgNzMuOC03My44IDIuMyAxNzAgMTI3LjQtMTI3LjUtODMuOS04OC43eiJdfSxWZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1uYy1qcCIsaWNvbjpbNTEyLDUxMixbXSwiZjRlYSIsIk0yNTUuNyA4QzExMS42IDggOCAxMjQuOCA4IDI1NiA4IDM5Mi40IDExOS44IDUwNCAyNTUuNyA1MDQgMzg1LjkgNTA0IDUwNCA0MDMuMiA1MDQgMjU2IDUwNCAxMTcuMiAzOTYuNSA4IDI1NS43IDh6bS42IDQ1MC43Yy0xMTIgMC0yMDMuNi05Mi41LTIwMy42LTIwMi43IDAtMjEuMSAzLTQxLjIgOS02MC4zbDEyNyA1Ni41LTI3LjkgMCAwIDM4LjYgNTguMSAwIDUuNyAxMS44IDAgMTguNy02My44IDAgMCAzOC43IDYzLjggMCAwIDU2IDYxLjcgMCAwLTU2IDY0LjIgMCAwLTM1LjcgODEgMzYuMWMtMS41IDIuMi01Ny4xIDk4LjMtMTc1LjIgOTguM3ptODcuNi0xMzcuM2wtNTcuNiAwIDAtMTguNyAyLjktNS42IDU0LjcgMjQuM3ptNi41LTUxLjRsMC0xNy44LTM4LjYgMCA2My0xMTYtNjUuOCAwLTQzLjQgOTYtMjMtMTAuMi0zOS42LTg1LjctNjUuOCAwIDI3LjMgNTEtODEuOS0zNi41YzI3LjgtNDQuMSA4Mi42LTk4LjEgMTczLjctOTguMSAxMTIuOCAwIDIwMyA5MCAyMDMgMjAzLjQgMCAyMS0yLjcgNDAuNi03LjkgNTlMMzUwLjQgMjcweiJdfSxqZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVkZGl0IixpY29uOls1MTIsNTEyLFtdLCJmMWExIiwiTTAgMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NiAzOTcuNCA1MTIgMjU2IDUxMkwzNy4xIDUxMmMtMTMuNyAwLTIwLjUtMTYuNS0xMC45LTI2LjJMNzUgNDM3QzI4LjcgMzkwLjcgMCAzMjYuNyAwIDI1NnpNMzQ5LjYgMTUzLjZjMjMuNiAwIDQyLjctMTkuMSA0Mi43LTQyLjdzLTE5LjEtNDIuNy00Mi43LTQyLjdjLTIwLjYgMC0zNy44IDE0LjYtNDEuOCAzNC0zNC41IDMuNy02MS40IDMzLTYxLjQgNjguNGwwIC4yYy0zNy41IDEuNi03MS44IDEyLjMtOTkgMjkuMS0xMC4xLTcuOC0yMi44LTEyLjUtMzYuNS0xMi41LTMzIDAtNTkuOCAyNi44LTU5LjggNTkuOCAwIDI0IDE0LjEgNDQuNiAzNC40IDU0LjEgMiA2OS40IDc3LjYgMTI1LjIgMTcwLjYgMTI1LjJzMTY4LjctNTUuOSAxNzAuNi0xMjUuM2MyMC4yLTkuNiAzNC4xLTMwLjIgMzQuMS01NCAwLTMzLTI2LjgtNTkuOC01OS44LTU5LjgtMTMuNyAwLTI2LjMgNC42LTM2LjQgMTIuNC0yNy40LTE3LTYyLjEtMjcuNy0xMDAtMjkuMWwwLS4yYzAtMjUuNCAxOC45LTQ2LjUgNDMuNC00OS45IDQuNCAxOC44IDIxLjMgMzIuOCA0MS41IDMyLjhsLjEgLjJ6TTE3Ny4xIDI0Ni45YzE2LjcgMCAyOS41IDE3LjYgMjguNSAzOS4zcy0xMy41IDI5LjYtMzAuMyAyOS42LTMxLjQtOC44LTMwLjQtMzAuNSAxNS40LTM4LjMgMzIuMS0zOC4zbC4xLS4xem0xOTAuMSAzOC4zYzEgMjEuNy0xMy43IDMwLjUtMzAuNCAzMC41cy0yOS4zLTcuOS0zMC4zLTI5LjYgMTEuOC0zOS4zIDI4LjUtMzkuMyAzMS4yIDE2LjYgMzIuMSAzOC4zbC4xIC4xem0tNDguMSA1Ni43Yy0xMC4zIDI0LjYtMzQuNiA0MS45LTYzIDQxLjlzLTUyLjctMTcuMy02My00MS45Yy0xLjItMi45IC44LTYuMiAzLjktNi41IDE4LjQtMS45IDM4LjMtMi45IDU5LjEtMi45czQwLjcgMSA1OS4xIDIuOWMzLjEgLjMgNS4xIDMuNiAzLjkgNi41eiJdfSxVZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY29ubmVjdGRldmVsb3AiLGljb246WzU3Niw1MTIsW10sImYyMGUiLCJNNTUwLjggMjQxbC01MC4xLTg2LjhjMS4xLTIuMSAxLjktNC42IDEuOS03LjIgMC04LTYuNy0xNC43LTE0LjctMTVMNDMyLjQgMzYuMWMuNS0xLjYgMS4xLTMuMiAxLjEtNC44IDAtOC42LTctMTUuMy0xNS4zLTE1LjMtNC44IDAtOC44IDIuMS0xMS44IDUuNmwtMTA2LjYgMGMtMi43LTMuNS02LjctNS42LTExLjUtNS42cy04LjggMi4xLTExLjUgNS42bC0xMDYuMSAwYy0yLjktMy41LTctNS42LTExLjgtNS42LTguMyAwLTE1LjMgNi43LTE1LjMgMTUuMyAwIDEuNiAuNSAzLjUgMS4xIDQuOGwtNTYgOTcuMmMtNS40IDIuNC05LjEgNy41LTkuMSAxMy43IDAgLjUgLjMgMS4xIC4zIDEuNkwyNi42IDI0MC43Yy03LjIgMS4zLTEyLjYgNy41LTEyLjYgMTUgMCA3LjIgNS4xIDEzLjQgMTIuMSAxNWw1NS4yIDk1LjRjLS41IDEuNi0uOCAyLjktLjggNC44IDAgNy4yIDUuMSAxMy40IDEyLjEgMTQuN2w1MS43IDg5LjdjLS41IDEuNi0xLjEgMy41LTEuMSA1LjQgMCA4LjYgNyAxNS4zIDE1LjMgMTUuMyA0LjggMCA4LjgtMi4xIDExLjUtNS40bDEwNi45IDBjMi43IDMuMiA3IDUuNCAxMS41IDUuNHM4LjgtMi4xIDExLjUtNS40bDEwNy4xIDBjMi43IDIuOSA2LjcgNC44IDExIDQuOCA4LjYgMCAxNS4zLTcgMTUuMy0xNS4zIDAtMS42LS4zLTIuOS0uOC00LjNsNTEuNy05MC4zYzctMS4zIDEyLjEtNy41IDEyLjEtMTQuNyAwLTEuNi0uMy0zLjItLjgtNC44bDU0LjktOTUuNGM3LTEuMyAxMi4zLTcuNSAxMi4zLTE1IDAtNy4yLTUuMS0xMy40LTExLjgtMTQuN3ptLTM5NyAyMDkuN2wtNDMuNy03NS44IDQzLjcgMCAwIDc1Ljh6bTAtODMuOGwtNDMuNyAwYy0uMy0xLjEtLjgtMi4xLTEuMy0zLjJsNDUtNDcuNCAwIDUwLjZ6bTAtNjIuNGwtNTAuNCA1My4zYy0xLjMtLjUtMi43LTEuMy00LTEuNkw0My43IDI1OS44Yy41LTEuMyAuNS0yLjcgLjUtNHMwLTIuNC0uMy0zLjVsNTItOTBjMi43LS4zIDUuNC0xLjEgNy44LTIuN2w1MC4xIDUyIDAgOTIuOXptMC0xMDIuM0wxMDggMTU0LjhjMS4zLTIuMSAyLjEtNC44IDIuMS03LjggMC0uMy0uMy0uOC0uMy0xLjFsNDMuOS0xNS44IDAgNzIuMXptMC04MC42bC00My43IDE1LjggNDMuNy03NS41IDAgNTkuN3ptMzI2LjUgMzkuMWwuOCAxLjMtMzUuNCAxNjcuMS02My44LTY3LjIgOTgtMTAxLjUgLjMgLjN6TTI5Mi4xIDM1NS4xbDExLjUgMTEuOC0yMi44IDAgMTEuMy0xMS44em0tLjMtMTEuM2wtODMuMy04NS40IDc5LjYtODQuNCA4MyA4Ny42LTc5LjMgODIuMnptNS40IDUuOWw3OS4zLTgyLjIgNjcuNSA3MS4zLTUuOSAyOC4xLTEyNCAwLTE2LjktMTcuMXpNNDEwLjcgNDQuNGMxLjEgLjUgMi4xIDEuMSAzLjUgMS4zbDU3LjkgMTAwLjcgMCAuNWMwIDIuOSAuOCA1LjYgMi4xIDcuOGwtOTcuNSAxMDEuMi04My04Ny42IDExNy4xLTEyNHptLTkuMS0yLjFsLTExMy42IDEyMC4zLTU3LjEtNjAuMyAxNjYuMy02MCA0LjMgMHptLTEyMy41IDBjMi43IDIuNyA2LjIgNC4zIDEwLjIgNC4zczcuNS0xLjYgMTAuMi00LjNsNzUgMC0xNDguNCA1My42LTUwLjktNTMuNiAxMDMuOSAwek0xNjEuOSA0Ny45bDEuMS0yLjFjLjktLjIgMS44LS41IDIuNy0uOGw1MS4yIDUzLjgtNTQuOSAxOS44IDAtNzAuN3ptMCA3OS4zbDYwLjgtMjIgNTkuNyA2My4yLTc5LjYgODQuMS00MS00Mi4xIDAtODMuM3ptMCA5Mi43bDM2LjQgMzcuOC0zNi40IDM4LjMgMC03Ni4xem0wIDg3LjlsNDIuMS00NC41IDgyLjggODYtMTcuMSAxNy43LTEwNy43IDAgMC01OS4yem03IDE2Mi4xYy0xLjYtMS42LTMuNS0yLjctNS45LTMuNWwtMS4xLTEuNiAwLTg5LjcgOTkuOSAwLTkxLjYgOTQuOC0xLjMgMHptMTI5LjkgMGMtMi43LTIuNC02LjQtNC4zLTEwLjQtNC4zcy03LjggMS45LTEwLjQgNC4zbC05Ni40IDAgOTEuNi05NC44IDM4LjMgMCA5MS42IDk0LjgtMTA0LjIgMHptMTIwLTExLjhsLTQuMyA3LjVjLTEuMyAuMy0yLjQgLjgtMy41IDEuM2wtODkuMi05MS45IDExNC40IDAtMTcuNCA4M3ptMTIuOS0yMi4ybDEyLjktNjAuOCAyMiAwLTM0LjggNjAuOHptMzQuOC02OC44bC0yMC40IDAgNC42LTIxLjIgMTcuMSAxOC4yYy0uNSAuOC0xLjEgMS45LTEuMyAyLjl6bTY2LjItMTA3LjRsLTU1LjQgOTYuN2MtMS4zIC41LTIuNyAxLjEtNCAxLjlsLTIwLjYtMjIgMzQuNi0xNjMuOSA0NS44IDc5LjNjLS4zIDEuMy0uOCAyLjctLjggNC4zIDAgMS4zIC4zIDIuNCAuNSAzLjd6Il19LFdkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZXNlYXJjaGdhdGUiLGljb246WzQ0OCw1MTIsW10sImY0ZjgiLCJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjYyLjIgMzY2LjRjLTYuNiAzLTMzLjIgNi01MC0xNC4yLTkuMi0xMC42LTI1LjMtMzMuMy00Mi4yLTYzLjYtOC45IDAtMTQuNyAwLTIxLjQtLjZsMCA0Ni40YzAgMjMuNSA2IDIxLjIgMjUuOCAyMy45bDAgOC4xYy02LjktLjMtMjMuMS0uOC0zNS42LS44LTEzLjEgMC0yNi4xIC42LTMzLjYgLjhsMC04LjFjMTUuNS0yLjkgMjItMS4zIDIyLTIzLjlsMC0xMDkuNGMwLTIyLjYtNi40LTIxLTIyLTIzLjlsMC04LjFjMjUuOCAxIDUzLjEtLjYgNzAuOS0uNiAzMS43IDAgNTUuOSAxNC40IDU1LjkgNDUuNiAwIDIxLjEtMTYuNyA0Mi4yLTM5LjIgNDcuNSAxMy42IDI0LjIgMzAgNDUuNiA0Mi4yIDU4LjkgNy4yIDcuOCAxNy4yIDE0LjcgMjcuMiAxNC43bDAgNy4zem0yMi45LTEzNWMtMjMuMyAwLTMyLjItMTUuNy0zMi4yLTMyLjJsMC0zMi4yYzAtMTIuMiA4LjgtMzAuNCAzNC0zMC40czMwLjQgMTcuOSAzMC40IDE3LjlsLTEwLjcgNy4ycy01LjUtMTIuNS0xOS43LTEyLjVjLTcuOSAwLTE5LjcgNy4zLTE5LjcgMTkuN2wwIDI2LjhjMCAxMy40IDYuNiAyMy4zIDE3LjkgMjMuMyAxNC4xIDAgMjEuNS0xMC45IDIxLjUtMjYuOGwtMTcuOSAwIDAtMTAuNyAzMC40IDBjMCAyMC41IDQuNyA0OS45LTM0IDQ5Ljl6TTE2OC42IDI3Ni4xYy05LjQgMC0xMy42LS4zLTIwLS44bDAtNjkuN2M2LjQtLjYgMTUtLjYgMjIuNS0uNiAyMy4zIDAgMzcuMiAxMi4yIDM3LjIgMzQuNSAwIDIxLjktMTUgMzYuNi0zOS43IDM2LjZ6Il19LEdkZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaWduYWwtbWVzc2VuZ2VyIixpY29uOls1MTIsNTEyLFtdLCJlNjYzIiwiTTI1NiAwYy0xMy4zIDAtMjYuMyAxLTM5LjEgM2wzLjcgMjMuN0MyMzIuMSAyNC45IDI0NCAyNCAyNTYgMjRzMjMuOSAuOSAzNS40IDIuN0wyOTUuMSAzQzI4Mi4zIDEgMjY5LjMgMCAyNTYgMHptNjAuOCA3LjNsLTUuNyAyMy4zYzIzLjQgNS43IDQ1LjQgMTQuOSA2NS40IDI3LjFsMTIuNS0yMC41Yy0yMi4xLTEzLjQtNDYuNC0yMy42LTcyLjItMjkuOXptNzYuNCA2MS42YzE5LjEgMTQgMzYgMzAuOSA1MC4xIDUwLjFsMTkuNC0xNC4yQzQ0NyA4My42IDQyOC40IDY1IDQwNy4zIDQ5LjVMMzkzLjEgNjguOHptODEuNyA1NC4ybC0yMC41IDEyLjVjMTIuMiAyMCAyMS40IDQyIDI3LjEgNjUuNGwyMy4zLTUuN2MtNi4zLTI1LjgtMTYuNS01MC4xLTI5LjktNzIuMnptMTAuNSA5Ny41YzEuOCAxMS41IDIuNyAyMy40IDIuNyAzNS40cy0uOSAyMy45LTIuNyAzNS40bDIzLjcgMy43YzEuOS0xMi43IDMtMjUuOCAzLTM5LjFzLTEtMjYuMy0zLTM5LjFsLTIzLjcgMy43em0tMzEgMTU1LjlsMjAuNSAxMi41YzEzLjQtMjIuMSAyMy42LTQ2LjQgMjkuOS03Mi4ybC0yMy4zLTUuN2MtNS43IDIzLjQtMTQuOSA0NS40LTI3LjEgNjUuNHptOC4yIDMwLjhsLTE5LjQtMTQuMmMtMTQgMTkuMS0zMC45IDM2LTUwLjEgNTAuMWwxNC4yIDE5LjRjMjEuMS0xNS41IDM5LjgtMzQuMSA1NS4yLTU1LjJ6bS04Ni4xIDQ3Yy0yMCAxMi4yLTQyIDIxLjQtNjUuNCAyNy4xbDUuNyAyMy4zYzI1LjgtNi4zIDUwLjEtMTYuNSA3Mi4yLTI5LjlsLTEyLjUtMjAuNXpNMjk1LjEgNTA5bC0zLjctMjMuN0MyNzkuOSA0ODcuMSAyNjggNDg4IDI1NiA0ODhzLTIzLjktLjktMzUuNC0yLjdMMjE2LjkgNTA5YzEyLjcgMS45IDI1LjggMyAzOS4xIDNzMjYuMy0xIDM5LjEtM3ptLTk0LjEtMjcuNmMtMTcuNi00LjMtMzQuNC0xMC42LTUwLjEtMTguNmwtNy44LTQtMzIuOCA3LjcgNS41IDIzLjQgMjQuMy01LjdjMTcuNCA4LjkgMzUuOSAxNS44IDU1LjMgMjAuNWw1LjctMjMuM3pNOTUuNCA0OTQuNkw5MCA0NzEuMyA0OC4zIDQ4MWMtMTAuNCAyLjQtMTkuNy02LjktMTcuMy0xNy4zbDkuNy00MS42LTIzLjQtNS41LTkuNyA0MS42QzEuMiA0ODYgMjYgNTEwLjggNTMuOCA1MDQuNGw0MS42LTkuN3ptLTUwLTkyLjlsNy43LTMyLjgtNC03LjhjLTgtMTUuNy0xNC4zLTMyLjUtMTguNi01MC4xTDcuMyAzMTYuN0MxMiAzMzYuMSAxOC45IDM1NC43IDI3LjcgMzcybC01LjcgMjQuMyAyMy40IDUuNXpNMyAyOTUuMWwyMy43LTMuN0MyNC45IDI3OS45IDI0IDI2OCAyNCAyNTZzLjktMjMuOSAyLjctMzUuNEwzIDIxNi45QzEgMjI5LjcgMCAyNDIuNyAwIDI1NnMxIDI2LjMgMyAzOS4xem0yNy42LTk0LjFjNS43LTIzLjQgMTQuOS00NS40IDI3LjEtNjUuNEwzNy4yIDEyMy4xYy0xMy40IDIyLjEtMjMuNiA0Ni40LTI5LjkgNzIuMmwyMy4zIDUuN3ptMTguOS05Ni4ybDE5LjQgMTQuMmMxNC0xOS4xIDMwLjktMzYgNTAuMS01MC4xTDEwNC43IDQ5LjVDODMuNiA2NSA2NSA4My42IDQ5LjUgMTA0Ljd6bTg2LjEtNDdjMjAtMTIuMiA0Mi0yMS40IDY1LjQtMjcuMUwxOTUuMiA3LjNjLTI1LjggNi4zLTUwLjEgMTYuNS03Mi4yIDI5LjlsMTIuNSAyMC41ek0yNTYgNDY0YzExNC45IDAgMjA4LTkzLjEgMjA4LTIwOFMzNzAuOSA0OCAyNTYgNDggNDggMTQxLjEgNDggMjU2YzAgMzYuNCA5LjQgNzAuNyAyNS44IDEwMC41IDEuNiAyLjkgMi4xIDYuMiAxLjQgOS40bC0yMS42IDkyLjUgOTIuNS0yMS42YzMuMi0uNyA2LjUtLjIgOS40IDEuNCAyOS44IDE2LjUgNjQgMjUuOCAxMDAuNSAyNS44eiJdfSxZZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToieGluZyIsaWNvbjpbMzg0LDUxMixbXSwiZjE2OCIsIk0xNjIuNyAyMTBjLTEuOCAzLjMtMjUuMiA0NC40LTcwLjEgMTIzLjUtNC45IDguMy0xMC44IDEyLjUtMTcuNyAxMi41TDkuOCAzNDZjLTcuNyAwLTEyLjEtNy41LTguNS0xNC40bDY5LTEyMS4zYy4yIDAgLjItLjEgMC0uM0wyNi40IDEzNC40Yy00LjMtNy44IC4zLTE0LjEgOC41LTE0LjFsNjUuMSAwYzcuMyAwIDEzLjMgNC4xIDE4IDEyLjJMMTYyLjcgMjEwek0zODIuNiA0Ni4xbC0xNDQgMjUzIDAgLjMgOTEuNiAxNjYuNmMzLjkgNy4xIC4yIDE0LjEtOC41IDE0LjFsLTY1LjIgMGMtNy42IDAtMTMuNi00LTE4LTEyLjJMMTQ2LjEgMjk5LjRjMy4zLTUuOCA1MS41LTkwLjggMTQ0LjgtMjU1LjIgNC42LTguMSAxMC40LTEyLjIgMTcuNS0xMi4ybDY1LjcgMGM4IDAgMTIuMyA2LjcgOC41IDE0LjF6Il19LHVFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1qcyIsaWNvbjpbNDQ4LDUxMixbImpzLXNxdWFyZSJdLCJmM2I5IiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0xODAuOSA0NDQuOWMtMzMuNyAwLTUzLjItMTcuNC02My4yLTM4LjVMMTUyIDM4NS43YzYuNiAxMS43IDEyLjYgMjEuNiAyNy4xIDIxLjYgMTMuOCAwIDIyLjYtNS40IDIyLjYtMjYuNWwwLTE0My4xIDQyLjEgMCAwIDE0My43YzAgNDMuNi0yNS42IDYzLjUtNjIuOSA2My41em04NS44LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjYtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzeiJdfSxaZGU9dUUsWGRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvbnRpY29ucyIsaWNvbjpbNDQ4LDUxMixbXSwiZjI4MCIsIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0xODcgMTcyLjljLTE4LjQgMC0xOSA5LjktMTkgMjcuNGwwIDIzLjNjMCAyLjQtMy41IDQuNC0uNiA0LjRsNjcuNCAwLTExLjEgMzcuMy01NS43IDAgMCAxMTIuOWMwIDUuOC0yIDYuNyAzLjIgNy4zbDQzLjUgNC4xIDAgMjUuMS0xMzAuNyAwIDAtMjUuNyAyMS4zLTJjNS4yLS42IDYuNy0yLjMgNi43LTcuOWwwLTExMS40YzAtMi4zLTIuOS0yLjMtNS44LTIuM2wtMjIuMiAwIDAtMzcuNCAyOCAwIDAtMjFjMC00OS42IDI2LjUtNzAgNzcuMy03MCAzNC4xIDAgNjQuNyA4LjIgNjQuNyA1Mi44bC01MC43IDYuMWMuMy0xOC43LTQuNC0yMy0xNi4zLTIzem03NC4zIDI0MS44bDAtMjUuMSAyMC40LTIuNmM1LjItLjYgNy42LTEuNyA3LjYtNy4zbDAtMTA3LjljMC00LjEtMi45LTYuNy02LjctNy45bC0yNC4yLTYuNCA2LjctMjkuNSA4MC4yIDAgMCAxNTEuN2MwIDUuOC0yLjYgNi40IDIuOSA3LjNsMTUuNyAyLjYgMCAyNS4xLTEwMi42IDB6bTgwLjgtMjU1LjVsOSAzMy4yLTcuMyA3LjMtMzEuMi0xNi42LTMxLjIgMTYuNi03LjMtNy4zIDktMzMuMi0yMS44LTI0LjIgMy41LTkuNiAyNy43IDAgMTUuNS0yOCA5LjMgMCAxNS41IDI4IDI3LjcgMCAzLjUgOS42LTIxLjkgMjQuMnoiXX0sS2RlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InVwcyIsaWNvbjpbMzg0LDUxMixbXSwiZjdlMCIsIk0xMDMuMiAzMDNjLTUuMiAzLjYtMzIuNiAxMy4xLTMyLjYtMTlsMC0xMDQtMzIuNyAwIDAgMTAyLjZjMCA3NC45IDgwLjIgNTEuMSA5Ny45IDM5bDAtMTQxLjYtMzIuNiAwIDAgMTIzek00IDc0LjhMNCAyOTUuN2MwIDEwMy43IDc0LjkgMTM1LjIgMTg3LjcgMTg0LjEgMTEyLjQtNDguOSAxODcuNy04MC4yIDE4Ny43LTE4NC4xbDAtMjIwLjlDMjYzLjEgMTMuMiA5Ny42IDI1LjIgNCA3NC44ek0zNjIuMSAyOTUuN2MwIDg2LjYtNTMuMiAxMTMuNi0xNzAuNCAxNjUuMy0xMTcuNS01MS44LTE3MC41LTc4LjctMTcwLjUtMTY1LjNsMC0xMjYuNGMxMDIuMy05My44IDIzMS42LTEwMCAzNDAuOS04OS44bDAgMjE2LjJ6TTE1Mi41IDE4OC4zbDAgMjEyLjggMzIuNyAwIDAtNjguN2MyNC40IDcuMyA3MS43LTIuNiA3MS43LTc4LjUgMC05Ny40LTgwLjctODAuOS0xMDQuNC02NS42em0zMi43IDExNy4zbDAtMTAwLjNjOC40LTQuMiAzOC40LTEyLjcgMzguNCA0OS4zIDAgNjcuOS0zNi40IDUxLjgtMzguNCA1MXptNzkuMS04Ni40Yy4xIDQ3LjMgNTEuNiA0Mi41IDUyLjIgNzAuNCAuNiAyMy41LTMwLjQgMjMtNTAuOCA0LjlsMCAzMC4xYzM2LjIgMjEuNSA4MS45IDguMSA4My4yLTMzLjUgMS43LTUxLjUtNTQuMS00Ni42LTUzLjQtNzMuMiAuNi0yMC4zIDMwLjYtMjAuNSA0OC41LTIuMmwwLTI4LjRjLTI4LjUtMjItNzkuOS05LjItNzkuNyAzMS45eiJdfSxRZGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW1hem9uLXBheSIsaWNvbjpbNjQwLDUxMixbXSwiZjQyYyIsIk0xNCAzMjUuM2MyLjMtNC4yIDUuMi00LjkgOS43LTIuNSAxMC40IDUuNiAyMC42IDExLjQgMzEuMiAxNi43IDQwLjYgMjAuMiA4My4zIDM1LjggMTI3LjQgNDYuMyAyMC44IDUgNDEuOSA5IDYzLjIgMTEuOCAzMS41IDQuMiA2My4yIDYgOTUgNS4yIDE3LjQtLjQgMzQuOC0xLjggNTIuMS0zLjggNTYuMi02LjYgMTExLjEtMjEgMTYzLjMtNDIuOCAyLjktMS4yIDUuOS0yIDkuMS0xLjIgNi43IDEuOCA5IDkgNC4xIDEzLjktMyAyLjctNi4yIDUuMi05LjYgNy40LTMwLjcgMjEuMS02NC4yIDM2LjQtOTkuNiA0Ny45LTI0LjUgNy45LTQ5LjYgMTMuOC03NS4xIDE3LjYtMTcuNiAyLjctMzUuNCA0LjMtNTMuMiA0LjgtLjggMC0xLjcgLjItMi41IC4zbC0yMS4xIDBjLS44LS4xLTEuNy0uMi0yLjUtLjMtMy42LS4yLTcuMi0uMy0xMC43LS40LTE2LjktLjgtMzMuNy0yLjUtNTAuNC01LjMtMjcuNC00LjUtNTQuMy0xMS41LTgwLjQtMjAuOS01My43LTE5LjQtMTAzLjEtNDguOS0xNDUuNi04Ny0xLjgtMS42LTMtMy44LTQuNC01LjdsMC0yek0xNzIgNjUuMWwtNC4zIC42Yy0xMy44IDEuNy0yNi44IDYuOS0zOCAxNS4xLTIuNCAxLjctNC42IDMuNS03LjEgNS40LS4yLS40LS4zLS45LS40LTEuNC0uNC0yLjctLjgtNS41LTEuMy04LjItLjctNC42LTMtNi42LTcuNi02LjZsLTExLjUgMGMtNi45IDAtOC4yIDEuMy04LjIgOC4ybDAgMjA5LjNjMCAxIDAgMiAuMSAzIC4yIDMgMiA0LjkgNC45IDUgNyAuMSAxNC4xIC4xIDIxLjEgMCAyLjkgMCA0LjctMiA1LTUgLjEtMSAuMS0yIC4xLTNsMC03Mi40YzEuMSAuOSAxLjcgMS40IDIuMiAxLjkgMTcuOSAxNC45IDM4LjUgMTkuOCA2MSAxNS40IDIwLjQtNCAzNC42LTE2LjUgNDMuOC0zNC45IDctMTMuOSA5LjktMjguNyAxMC4zLTQ0LjEgLjUtMTcuMS0xLjItMzMuOS04LjEtNDkuOC04LjUtMTkuNi0yMi42LTMyLjUtNDMuOS0zNi45LTMuMi0uNy02LjUtMS05LjgtMS41LTIuOC0uMS01LjUtLjEtOC4zLS4xek0xMjQuNiAxMDdjLS4xLS43IC4xLTEuMyAuNC0xLjlzLjgtMS4xIDEuMy0xLjRjMTMuNy05LjUgMjguOC0xNC41IDQ1LjYtMTMuMiAxNC45IDEuMSAyNy4xIDguNCAzMy41IDI1LjkgMy45IDEwLjcgNC45IDIxLjggNC45IDMzIDAgMTAuNC0uOCAyMC42LTQgMzAuNi02LjggMjEuMy0yMi40IDI5LjQtNDIuNiAyOC41LTE0LS42LTI2LjItNi0zNy40LTEzLjktLjYtLjMtMS0uOC0xLjMtMS40cy0uNC0xLjItLjQtMS45Yy4xLTE0LjEgMC0yOC4xIDAtNDIuMnMuMS0yOCAwLTQyLjF6TTMzMC4zIDY1LjFjLTEgLjEtMiAuMy0yLjkgLjQtOS43IC40LTE5LjQgMS44LTI4LjkgNC4xLTYuMSAxLjYtMTIgMy44LTE3LjkgNS44LTMuNiAxLjItNS40IDMuOC01LjMgNy43IC4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNC44IDIuMSA2LjEgNi44IDQuOSA3LjgtMiAxNS42LTQuMiAyMy41LTUuNyAxMi4zLTIuMyAyNC43LTMuMyAzNy4yLTEuNCA2LjUgMSAxMi42IDIuOSAxNi44IDguNCAzLjcgNC44IDUuMSAxMC41IDUuMyAxNi40IC4zIDguMyAuMiAxNi42IC4zIDI0LjkgMCAuNS0uMSAuOS0uMiAxLjQtLjUtLjEtLjkgMC0xLjMtLjEtMTAuNS0yLjYtMjEuMi00LjItMzItNC45LTExLjMtLjYtMjIuNSAuMS0zMy4zIDMuOS0xMi45IDQuNS0yMy4zIDEyLjMtMjkuNCAyNC45LTQuNyA5LjgtNS40IDIwLjItMy45IDMwLjcgMiAxNCA5IDI0LjggMjEuNCAzMS43IDExLjkgNi42IDI0LjggNy40IDM3LjkgNS40IDE1LjEtMi4zIDI4LjUtOC43IDQwLjMtMTguNCAuNS0uNCAxLS44IDEuNi0xLjEgLjYgMy44IDEuMSA3LjQgMS44IDExIC42IDMuMSAyLjUgNS4xIDUuNCA1LjIgNS40IC4xIDEwLjkgLjEgMTYuMyAwIDEuMyAwIDIuNS0uNSAzLjQtMS40czEuNC0yLjEgMS41LTMuM2MuMS0uOSAuMS0xLjkgLjEtMi44bDAtMTA2YzAtNC4zLS4zLTguNi0uOS0xMi45LTEuOS0xMi45LTcuNC0yMy41LTE5LTMwLjQtNi43LTQtMTQuMS02LTIxLjgtNy4xLTMuNi0uNS03LjItLjgtMTAuOC0xLjMtMy45IC4xLTcuOSAuMS0xMS45IC4xem0zNSAxMjcuN2MwIC42LS4xIDEuMi0uMyAxLjdzLS43IDEtMS4yIDEuM2MtMTEuMiA4LjEtMjMuNSAxMy41LTM3LjQgMTQuOS01LjcgLjYtMTEuNCAuNC0xNi44LTEuOC0zLTEuMS01LjYtMi45LTcuOC01LjJzLTMuNy01LjEtNC42LTguMWMtMi02LjMtMi0xMy4xLS4xLTE5LjQgMi41LTguMyA4LjQtMTMgMTYuNC0xNS42IDgtMi40IDE2LjUtMy4yIDI0LjgtMi4yIDguNCAuNyAxNi42IDIuMyAyNSAzLjQgMS42IC4yIDIuMSAxIDIuMSAyLjYtLjEgNC44IDAgOS41IDAgMTQuM3MtLjIgOS40LS4xIDE0LjF6TTYyNS4yIDMyMi4yYy0xLTUtNC44LTYuOS05LjEtOC4zLTYuOC0yLjEtMTMuOS0zLjUtMjEtMy45LTEzLjEtMS4xLTI2LjMtLjUtMzkuMiAxLjktMTQuMyAyLjctMjcuOSA3LjMtNDAgMTUuNi0xLjQgLjktMi43IDIuMS0zLjcgMy41LS40IC42LS42IDEuMy0uNyAxLjlzMCAxLjQgLjIgMi4xYy40IDEuNSAyLjEgMS45IDMuNiAxLjggLjcgMCAxLjUgMCAyLjItLjEgNy44LS44IDE1LjUtMS43IDIzLjMtMi41IDExLjQtMS4xIDIyLjktMS44IDM0LjMtLjkgNC45IC40IDkuNyAxLjMgMTQuNCAyLjcgNS4xIDEuNCA3LjQgNS4yIDcuNiAxMC40IC40IDgtMS40IDE1LjctMy41IDIzLjMtNC4xIDE1LjQtMTAgMzAuMy0xNS44IDQ1LjEtLjQgMS0uOCAyLTEgMy0uNSAyLjkgMS4yIDQuOCA0LjEgNC4xIDEuOC0uNCAzLjQtMS4zIDQuOC0yLjUgNC41LTQuMiA4LjgtOC43IDEyLjctMTMuNCAxMi44LTE2LjQgMjAuMy0zNS4zIDI0LjctNTUuNiAuOC0zLjYgMS40LTcuMyAyLjEtMTAuOWwwLTE3LjN6TTQ5My4xIDE5OWMtMTIuOS0zNS43LTI1LjgtNzEuNC0zOC43LTEwNy4yLTItNS43LTQuMi0xMS4zLTYuMy0xNi45LTEuMS0yLjktMy4yLTQuOC02LjQtNC44LTcuNi0uMS0xNS4yLS4yLTIyLjktLjEtMi41IDAtMy43IDItMy4yIDQuNSAuNSAyLjEgMS4xIDQuMSAxLjkgNi4xIDE5LjYgNDguNSAzOS4zIDk3IDU5LjEgMTQ1LjUgMS43IDQuMSAyLjEgNy42IC4yIDExLjgtMy4zIDcuMy01LjkgMTUtOS4zIDIyLjMtMyA2LjUtOCAxMS40LTE1LjIgMTMuMy01IDEuMy0xMC4yIDEuNy0xNS40IDEuMS0yLjUtLjItNS0uOC03LjUtMS0zLjQtLjItNS4xIDEuMy01LjIgNC44LS4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNS41IDIgOCA3LjQgOC45IDUuNiAxLjEgMTEuMiAxLjggMTYuOSAyIDE3LjEgLjQgMzAuNy02LjUgMzkuNS0yMS40IDMuNS01LjkgNi42LTEyIDkuMi0xOC40IDIzLjctNTkuOCA0Ny4yLTExOS43IDcwLjYtMTc5LjYgLjctMS44IDEuMy0zLjYgMS42LTUuNSAuNC0yLjgtLjktNC40LTMuNy00LjQtNi42LS4xLTEzLjMgMC0xOS45IDAtMS43LS4xLTMuNCAuMy00LjcgMS4zcy0yLjQgMi4zLTMgMy45Yy0uNSAxLjQtMS4xIDIuNy0xLjYgNC4xbC0zNC44IDEwMGMtMi41IDcuMi01LjEgMTQuNS03LjcgMjIuMi0uNC0xLjEtLjYtMS43LS45LTIuNHoiXX0sSmRlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBhbmRvcmEiLGljb246WzM4NCw1MTIsW10sImU3ZGEiLCJNMjAxLjMgMzJMMCAzMiAwIDQ4MCAxMjAuMiA0ODBjMTEuMiAwIDIwLjMtOS4xIDIwLjMtMjAuM2wwLTg2LjEgMzAuMSAwYzE0Ny4xIDAgMjA3LjMtODIuOSAyMDcuMy0xNzkuOSAwLTExOS43LTkwLjktMTYxLjgtMTc2LjUtMTYxLjh6Il19LGU3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuaWQiLGljb246WzQ0OCw1MTIsW10sImYxOWIiLCJNMjcxLjUgNDMybC02OCAzMkM4OC41IDQ1My43IDAgMzkyLjUgMCAzMTguMiAwIDI0Ni43IDgyLjUgMTg3LjIgMTkxLjcgMTczLjlsMCA0M2MtNzEuNSAxMi41LTEyNCA1My0xMjQgMTAxLjMgMCA1MSA1OC41IDkzLjMgMTM1LjcgMTAzbDAtMzQwIDY4LTMzLjIgMCAzODQgLjEgMHpNNDQ4IDI5MWwtMTMxLjMtMjguNSAzNi44LTIwLjdjLTE5LjUtMTEuNS00My41LTIwLTcwLTI0LjhsMC00M2M0Ni4yIDUuNSA4Ny43IDE5LjUgMTIwLjMgMzkuM2wzNS0xOS44IDkuMiA5Ny41eiJdfSx0N2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidnNjbyIsaWNvbjpbNTEyLDUxMixbXSwiZTdkZCIsIk0zNTcuNiAyNTZjMC0yNy4xLTEwLjYtNTIuNS0yOS43LTcxLjdzLTQ0LjYtMjkuNy03MS43LTI5LjdsLS4xIDBjLTI3LjEgMC01Mi42IDEwLjYtNzEuNyAyOS43cy0yOS43IDQ0LjYtMjkuNyA3MS43YzAgMjcuMSAxMC42IDUyLjUgMjkuNyA3MS43IDE5LjIgMTkuMiA0NC42IDI5LjcgNzEuNyAyOS43bC4xIDBjMjcuMSAwIDUyLjYtMTAuNiA3MS43LTI5LjcgMTkuMi0xOS4yIDI5LjctNDQuNiAyOS43LTcxLjd6TTE3Ni4zIDQ4Mi4xYzIzIDguMSA0NyAxMi42IDcxLjYgMTMuNGwwLTU5LjFjLTE3LjEtLjctMzMuNS0zLjgtNDktOC45bC0yMi42IDU0LjZ6bTEzNy01NC42Yy0xNS41IDUuMS0zMiA4LjItNDkgOC45bDAgNTkuMWMyNC42LS44IDQ4LjYtNS4zIDcxLjYtMTMuNGwtMjIuNi01NC42ek05Mi41IDQzMS4yYzIwLjIgMTguOSA0My4zIDM0IDY4LjcgNDVsMjIuNS01NC41Yy0xOC4zLTcuOS0zNS4xLTE4LjgtNDkuOC0zMS45TDkyLjUgNDMxLjJ6bTI4NS45LTQxLjRjLTE0LjYgMTMuMi0zMS40IDI0LTQ5LjggMzEuOWwyMi41IDU0LjVjMjUuNC0xMSA0OC40LTI2LjEgNjguNy00NWwtNDEuNC00MS40ek0xNDUuNCAzNzguMmMxMy42IDEyLjEgMjkgMjEuOSA0NS44IDI5IDE4IDcuNiAzNy4xIDEyIDU2LjcgMTIuOWwwLTQ2LjhjLTI2LjQtMS44LTUwLjMtMTIuMy02OS4xLTI4LjZsLTMzLjQgMzMuNHptMTg4LTMzLjRjLTE4LjggMTYuMy00Mi43IDI2LjgtNjkuMSAyOC42bDAgNDYuOGMxOS42LS45IDM4LjctNS4zIDU2LjctMTIuOSAxNi44LTcuMSAzMi4yLTE2LjkgNDUuOC0yOWwtMzMuNC0zMy40ek0zOC41IDM1Ni42YzEwLjcgMjMuMiAyNSA0NC4zIDQyLjUgNjMuMWw0MS4zLTQxLjNjLTEyLjQtMTMuNC0yMi45LTI4LjYtMzAuOS00NS4yTDM4LjUgMzU2LjZ6bTM4Mi40LTIzLjVjLTggMTYuNi0xOC41IDMxLjktMzAuOSA0NS4ybDQxLjMgNDEuM2MxNy41LTE4LjcgMzEuOC0zOS45IDQyLjUtNjMuMWwtNTIuOS0yMy41em0tMzMxLTY5YzEuMSAxOC44IDUuNCAzNy4yIDEyLjggNTQuNSA3LjUgMTcuOCAxOCAzNCAzMS4yIDQ4LjJsMzMuNS0zMy41Yy0xNi40LTE4LjgtMjYuOS00Mi44LTI4LjctNjkuMmwtNDguOCAwem0yODMuNyAwYy0xLjggMjYuNC0xMi4zIDUwLjQtMjguNyA2OS4ybDMzLjUgMzMuNWMxMy4xLTE0LjIgMjMuNi0zMC40IDMxLjItNDguMiA3LjMtMTcuNCAxMS42LTM1LjcgMTIuNy01NC41bC00OC43IDB6bS0zNTcuMSAwYy45IDI2LjcgNi4xIDUyLjcgMTUuNiA3Ny41TDg1IDMxOC4yYy02LjQtMTctMTAuMy0zNS4xLTExLjMtNTRsLTU3LjEgMHptNDIyLjEgMGMtMSAxOC45LTUgMzcuMS0xMS4zIDU0bDUyLjggMjMuNWM5LjUtMjQuOCAxNC43LTUwLjggMTUuNi03Ny41bC01Ny4xIDB6TTMyLjEgMTcwLjRjLTkuNSAyNC44LTE0LjcgNTAuOC0xNS42IDc3LjVsNTcuMSAwYzEtMTguOSA1LTM3LjEgMTEuMy01NEwzMi4xIDE3MC40em0xMDEuNy0yNS4yYy0xMy4xIDE0LjItMjMuNiAzMC40LTMxLjIgNDguMi03LjMgMTcuNC0xMS42IDM1LjctMTIuOCA1NC41bDQ4LjggMGMxLjgtMjYuNCAxMi4zLTUwLjQgMjguNy02OS4ybC0zMy41LTMzLjV6bTIxMS4xIDMzLjVjMTYuNCAxOC44IDI2LjkgNDIuOCAyOC43IDY5LjJsNDguNyAwYy0xLjEtMTguOC01LjQtMzcuMi0xMi43LTU0LjUtNy41LTE3LjgtMTgtMzQtMzEuMi00OC4ybC0zMy41IDMzLjV6bTgyLjQgMTUuMmM2LjQgMTcgMTAuMyAzNS4xIDExLjMgNTRsNTcuMSAwYy0uOS0yNi43LTYuMS01Mi43LTE1LjYtNzcuNWwtNTIuOCAyMy41ek04MSA5Mi4zQzYzLjQgMTExIDQ5LjIgMTMyLjIgMzguNSAxNTUuNGw1Mi45IDIzLjVjOC0xNi42IDE4LjUtMzEuOSAzMC45LTQ1LjJMODEgOTIuM3ptMzA5IDQxLjNjMTIuNCAxMy40IDIyLjkgMjguNiAzMC45IDQ1LjJsNTIuOS0yMy41Yy0xMC43LTIzLjItMjUtNDQuMy00Mi41LTYzLjFMMzkwIDEzMy43ek0yNDggOTEuOGMtMTkuNiAuOS0zOC43IDUuMy01Ni43IDEyLjktMTYuOCA3LjEtMzIuMiAxNi45LTQ1LjggMjlsMzMuNCAzMy40YzE4LjgtMTYuMyA0Mi43LTI2LjggNjkuMS0yOC42bDAtNDYuN3ptMTYuMyA0Ni43YzI2LjQgMS44IDUwLjMgMTIuMyA2OS4xIDI4LjZsMzMuNC0zMy40Yy0xMy42LTEyLjEtMjktMjEuOS00NS44LTI5LTE4LTcuNi0zNy4xLTEyLTU2LjctMTIuOWwwIDQ2Ljd6TTE2MS4yIDM1LjhjLTI1LjQgMTEtNDguNCAyNi4xLTY4LjcgNDVsNDEuNCA0MS40YzE0LjctMTMuMiAzMS40LTI0IDQ5LjgtMzEuOUwxNjEuMiAzNS44ek0zMjguNiA5MC4zYzE4LjMgNy45IDM1LjEgMTguOCA0OS44IDMxLjlsNDEuNC00MS40Yy0yMC4yLTE4LjktNDMuMy0zNC02OC43LTQ1TDMyOC42IDkwLjN6TTI0OCAxNi40Yy0yNC42IC44LTQ4LjYgNS4zLTcxLjYgMTMuNGwyMi42IDU0LjZjMTUuNS01LjEgMzItOC4yIDQ5LTguOWwwLTU5LjF6bTE2LjMgNTkuMWMxNy4xIC43IDMzLjUgMy44IDQ5IDguOWwyMi42LTU0LjZjLTIzLTguMS00Ny0xMi42LTcxLjYtMTMuNGwwIDU5LjF6TTUxMi4yIDI2NC4ybC0uMiAwQzUwNy44IDM5OSAzOTkuMiA1MDcuNyAyNjQuMyA1MTEuOWwwIC4xLTE2LjMgMCAwLS4xQzExMy4xIDUwNy43IDQuNSAzOTkgLjIgMjY0LjFsLS4yIDAgMC0xNi4zIC4yIDBDNC41IDExMyAxMTMuMSA0LjMgMjQ4IC4xbDAtLjEgMTYuMyAwIDAgLjFDMzk5LjIgNC4zIDUwNy44IDExMyA1MTIgMjQ3LjlsLjIgMCAwIDE2LjN6Il19LGE3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnbG9iYWxlYWtzIixpY29uOls0NDgsNTEyLFtdLCJlODVkIiwiTTQxMS4yIDMyLjJjMjAuMiAwIDM2LjggMTYuNiAzNi44IDM2LjlsMCAzNzMuOGMwIDIwLjItMTYuNiAzNi45LTM2LjggMzYuOWwtOTQuNCAwIDI4LTc5LjRjMy4xLTguOC0xLjYtMTguNy0xMC40LTIxLjgtMS42LS41LTIuNi0xLTQuMi0xcy0zLjYgMC01LjIgLjVjLTUuMiAxLTkuOSA1LjItMTEuOSAxMC45bC02LjIgMTYuNiAwLTY3LjVjMC0xMC45LTcuOC0xOS43LTE4LjItMjEuOGwtNy4yIDBjLS41IDAtMSAwLTEuNiAuNS0uNSAwLTEgLjUtMS42IC41LTIuNiAxLTUuMiAyLjYtNy4yIDQuMWwwLTQuMWMwLTUuNy0yLjYtMTAuNC01LjctMTRsLTEtMWMtMS0xLTIuNi0yLjEtNC4yLTIuNmwwLTI2LjVjMC01LjItNC4xLTkuMy05LjMtOS4zbC0zOS45IDBjLTYuNyAwLTExLjQtNy4zLTguMy0xMy41TDI4My4xIDg0LjFjMTQuNS0zMS4xIDQ1LjYtNTEuNCA4MC40LTUxLjlsNDcuNyAwem0tMTY2IDBjMTcuNiAwIDMwLjEgMTYuMSAyOCAzMi4yLTIuNiAzLjYtNC43IDcuOC02LjIgMTAuOUwxODYuNiAyNDEuNWMtOC44IDE4LjcgNC4yIDQwIDI0LjQgNDBsMzAuNiAwIDAgMTYuMWMtNy44IDMuMS0xMyAxMC45LTEzIDE5LjdsMCAzLjZjLTMuNi0zLjYtOC44LTUuNy0xNC41LTUuNy0xMS45IDAtMjEuOCA5LjktMjEuOCAyMS44bDAgMTkuMi0zLjEgMGMtOS4zIDAtMTcuMSA3LjgtMTcuMSAxNy4xbDAgMTA1LjktOTUuNCAwYy00MiAwLTcyLjYtNDAuNS02MS4yLTgxLjUgMS0zLjEgNC4yLTUuMiA3LjMtNC43bDIxLjIgMGMyNC40IDAgNDQuNi0yMC4yIDQ0LjYtNDUuMmwwLTQuMmMwLTI0LjktMTkuNy00NS4yLTQ0LjYtNDUuMi0uNSAwLTEtLjUtMS0xbDguOC0zMi43YzIuMS02LjItMi42LTExLjktOC44LTExLjlsLTMzLjIgMGMtNi43IDAtMTEuNC03LjMtOC4zLTEzLjVMNzYuNyA4NC43YzE2LjEtMzIuMiA0OC4yLTUyLjQgODQtNTIuNGw4NC41IDB6TTEzMy43IDE0NC40Yy0xMC40IDAtMTguNyA4LjMtMTguNyAxOC43IDAgOS45IDguMyAxOC43IDE4LjcgMTguNyAxMC40IDAgMTguNy04LjMgMTguNy0xOC43cy04LjMtMTguNy0xOC43LTE4Ljd6bTIwMi44IDBhMTguNiAxOC42IDAgMSAwIC0uMiAzNy4yIDE4LjYgMTguNiAwIDEgMCAuMi0zNy4yeiJdfSxpN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmVubW8iLGljb246WzY0MCw1MTIsW10sImU4NWEiLCJNNjcuOCAyMDIuN2MyLjQgNSAzLjkgMTEgMy45IDE5LjggMCAxNi4yLTExLjUgMzkuOC0yMC43IDU0LjlsLTkuOS03OS43LTQxIDMuOSAxOC44IDExMiA0Ni45IDBjMjAuNS0yNi45IDQ1LjgtNjUuMyA0NS44LTk0LjggMC05LjMtMS45LTE2LjYtNi4zLTIzLjdsLTM3LjQgNy41em0xMTMtNy4xYy00Mi44IDAtNjMuNSAzNy02My41IDcxLjkgMCAyNi45IDEyLjggNDguNSA0OC40IDQ4LjUgMTQgMCAyOC41LTMgMzcuOC03LjVsNS0zMy42Yy0xMy4yIDYuNy0yMy4zIDkuMy0zMy45IDkuMy05LjcgMC0xNy4xLTUuMi0xNy4xLTE4LjMgMjItLjIgNjAtOS4zIDYwLTM4LjggMC0xOC4zLTEzLjItMzEuNS0zNi43LTMxLjVsMCAwem0tMjIuNSA0OC45YzEuMS0xMi45IDExLTIyIDE4LjYtMjIgNC4zIDAgOCAyLjYgOCA3LjcgMCAxMC44LTE5IDE0LjItMjYuNiAxNC4ybDAgMHptMTUwLjItNDguOWMtMTUuMyAwLTI2LjEgNS44LTM0LjMgMTEuMmwtLjQtOS4zLTM0LjggMC0xOC40IDExNi4xIDQwLjIgMCAxMi43LTgxLjRjMy41LTEuNyA4LjYtNC4xIDEzLjgtNC4xIDMuOSAwIDcuMSAxLjMgNy4xIDYuNSAwIDIuMi0uNyA2LS45IDhsLTExLjIgNzEuMSA0MCAwIDEyLjMtNzcuNWMuNy00LjEgMS4zLTEwLjMgMS4zLTE0LjYgMC0xNS41LTcuMS0yNS45LTI3LjQtMjUuOXptMTgzLjIgMGMtMTQuOSAwLTI1LjcgNC41LTM3LjIgMTIuNy00LjEtNy4zLTEyLjMtMTIuNy0yNC44LTEyLjctMTQuNSAwLTI1LjMgNS44LTMzLjMgMTEuNmwtMS4xLTkuNy0zNC40IDAtMTguNCAxMTYuMSA0MC4yIDAgMTIuOC04MS40YzMuNS0xLjcgOC42LTQuMSAxMy44LTQuMSAzLjkgMCA3LjEgMS4zIDcuMSA3LjEgMCAxLjUtLjQgMy45LS42IDUuOGwtMTEuNCA3Mi42IDQwIDAgMTIuNy04MS40YzMuNy0xLjkgOC42LTQuMSAxMy42LTQuMSAzLjkgMCA3LjEgMS4zIDcuMSA3LjEgMCAxLjUtLjQgMy45LS43IDUuOGwtMTEuNCA3Mi42IDQwIDAgMTIuMy03Ny41Yy43LTQuMSAxLjMtMTAuMyAxLjMtMTQuNiAwLTE1LjUtNy4xLTI1LjktMjcuNy0yNS45bDAgMHptMTAyLjIgMGMtNDQuNyAwLTY0LjIgMzQuMy02NC4yIDcwLjkgMCAyNy44IDExLjIgNTAgNDUuMSA1MCA0NS44IDAgNjUtMzcuNSA2NS03My43IDAtMjcuNC0xMi4zLTQ3LjItNDYtNDcuMnptLTEzLjQgOTBjLTcuMSAwLTEwLjEtNi43LTEwLjEtMTcuNSAwLTE0LjIgMy4yLTQyIDE5LTQyIDcuMSAwIDkuNSA2LjUgOS41IDE1LjkgMCAxNC4yLTMuNSA0My41LTE4LjQgNDMuNXoiXX0scjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InVidW50dSIsaWNvbjpbNTc2LDUxMixbXSwiZjdkZiIsIk00NjkuMiA3NWMwLTIwLjEtOC0zOS4zLTIyLjItNTMuNXMtMzMuNC0yMi4yLTUzLjUtMjIuMi0zOS4zIDgtNTMuNSAyMi4yLTIyLjIgMzMuNC0yMi4yIDUzLjVjMCAyMC4xIDggMzkuMyAyMi4xIDUzLjVzMzMuNCAyMi4xIDUzLjUgMjIuMSAzOS4zLTggNTMuNS0yMi4xIDIyLjEtMzMuNCAyMi4xLTUzLjVsLjEgMHptLTMxNSAxNjUuN2E3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTU3IDM0NmMxOC42IDQ2LjkgNTEgODcgOTMgMTE1LjFzOTEuNSA0Mi42IDE0MiA0MS43Yy0xNC43LTE4LjYtMjIuOS00MS41LTIzLjItNjUuMi02LjgtLjktMTMuMy0yLjEtMTkuNS0zLjQtMjYuOC01LjctNTEuOS0xNy4zLTczLjYtMzRzLTM5LjMtMzguMS01MS43LTYyLjVjLTIwLjkgOS45LTQ0LjUgMTIuOC02Ny4xIDguMmwuMSAuMXptMzk1LjEgODkuOGE3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTQ0NCAzNTEuNmMxOC41IDE0LjggMzEuNiAzNS4yIDM3LjIgNTguMiAzMy4zLTQxLjMgNTIuNi05Mi4yIDU0LjgtMTQ1LjJzLTEyLjUtMTA1LjQtNDIuMi0xNDkuNGMtOC42IDIxLjUtMjQgMzkuNi00My44IDUxLjYgMTUuNCAyOC42IDIyLjkgNjAuOCAyMS45IDkzLjJzLTEwLjcgNjQtMjggOTEuNmwuMSAwek0xMDEuMSAxMzUuNGMxMi40IDIuNyAyNC4zIDcuNSAzNS4xIDE0LjMgMTYuNi0yNC4yIDM4LjktNDQuMSA2NC44LTU4UzI1NS44IDcwLjQgMjg1LjIgNzBjLjItNS45IC45LTExLjkgMi0xNy43IDMuNi0xNi43IDExLjEtMzIuMyAyMS44LTQ1LjUtNDcuNy0zLjgtOTUuNCA2LTEzNy42IDI4LjVTOTQuMyA5MS43IDcwLjggMTMzLjRjMi43LS4yIDUuMy0uMyA4LS4zIDcuNSAwIDE1IC44IDIyLjQgMi4zbC0uMSAweiJdfSxzN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmlhY29pbiIsaWNvbjpbMzg0LDUxMixbXSwiZjIzNyIsIk0zODQgMzJsLTY0IDAtODAuNyAxOTItOTQuNSAwLTgwLjgtMTkyLTY0IDAgNDggMTEyLTQ4IDAgMCA0OCA2OC41IDAgMTMuOCAzMi04Mi4zIDAgMCA0OCAxMDIuOCAwIDg5LjIgMjA4IDg5LjItMjA4IDEwMi44IDAgMC00OC04Mi4zIDAgMTMuOC0zMiA2OC41IDAgMC00OC00OCAwIDQ4LTExMnpNMTkyIDMzNmwtMjctNjQgNTQgMC0yNyA2NHoiXX0sbjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InpoaWh1IixpY29uOls2NDAsNTEyLFtdLCJmNjNmIiwiTTE3MC41IDE0OC4xbDAgMjE3LjUgMjMuNCAwIDcuNyAyNi40IDQyLTI2LjQgNDkuNSAwIDAtMjE3LjUtMTIyLjcgMHptOTcuOCAxOTMuOWwtMjcuOSAwLTI3LjkgMTcuNS01LjEtMTcuNS0xMS45IDAgMC0xNzAuMyA3Mi44IDAgMCAxNzAuM3pNMTQ5LjggMjQ3LjdsLTUyLjMgMGMxLjctMjcuMSAyLjItNTEuNiAyLjItNzMuNWw1MS4yIDBzMi0yMi42LTguNi0yMi4zbC04OC41IDBjMy41LTEzLjEgNy45LTI2LjcgMTMuMS00MC43IDAgMC0yNC4xIDAtMzIuMyAyMS42LTMuNCA4LjktMTMuMiA0My4xLTMwLjcgNzguMSA1LjktLjYgMjUuNC0xLjIgMzYuOC0yMi4yIDIuMS01LjkgMi41LTYuNyA1LjEtMTQuNWwyOC45IDBjMCAxMC41LTEuMiA2Ni45LTEuNyA3My40bC01Mi4zIDBjLTExLjcgMC0xNS42IDIzLjYtMTUuNiAyMy42bDY1LjYgMGMtNC40IDQ5LjktMjggOTEuOS03MC44IDEyNS4xIDIwLjUgNS45IDQwLjktLjkgNTEtOS45IDAgMCAyMy0yMC45IDM1LjYtNjkuM2w1NCA2NC45czcuOS0yNi45LTEuMi00MGMtNy42LTguOS0yOC4xLTMzLjEtMzYuOC00MS44TDg3LjkgMzEyYzQuNC0xNCA3LTI3LjYgNy45LTQwLjdsNjEuNiAwcy0uMS0yMy42LTcuNi0yMy42bDAgMHptNDEyLTEuNmMyMC44LTI1LjYgNDUtNTguNiA0NS01OC42cy0xOC42LTE0LjgtMjcuNC00LjFjLTYgOC4yLTM2LjggNDguMi0zNi44IDQ4LjJsMTkuMiAxNC40ek00MTEuOCAxODdjLTktOC4yLTI1LjkgMi4xLTI1LjkgMi4xczM5LjUgNTUgNDEuMSA1Ny40bDE5LjUtMTMuN3MtMjUuNy0zNy42LTM0LjctNDUuOWwwIDAgMCAwek02NDAgMjU4LjRjLTE5LjggMC0xMzAuOSAuOS0xMzEuMSAuOWwwLTEwMWM0LjggMCAxMi40LS40IDIyLjgtMS4yIDQwLjktMi40IDcwLjEtNCA4Ny44LTQuOCAwIDAgMTIuMi0yNy4yLS42LTMzLjQtMy4xLTEuMi0yMy4yIDQuNi0yMy4yIDQuNnMtMTY1LjIgMTYuNS0yMzIuNCAxOGMxLjYgOC44IDcuNiAxNy4xIDE1LjggMTkuNiAxMy4zIDMuNSAyMi43IDEuNyA0OS4yIC45IDI0LjgtMS42IDQzLjctMi40IDU2LjUtMi40bDAgOTkuOC0xMzMuNSAwczIuOCAyMi4zIDI1LjUgMjIuOWwxMDcuOSAwIDAgNzAuOWMwIDE0LTExLjIgMjItMjQuNSAyMS4xLTE0LjEgLjEtMjYuMS0xLjEtNDEuNy0xLjggMiA0IDYuMyAxNC40IDE5LjMgMjEuOCA5LjkgNC44IDE2LjIgNi42IDI2IDYuNiAyOS42IDAgNDUuNy0xNy4zIDQ0LjktNDUuM2wwLTczLjMgMTIyLjQgMGM5LjcgMCA4LjctMjMuOCA4LjctMjMuOGwwIDB6Il19LG83ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5YW5kZXgiLGljb246WzI1Niw1MTIsW10sImY0MTMiLCJNMTUzLjEgMzE1LjhMNjUuNyA1MTIgMiA1MTIgOTggMzAyLjJDNTIuOSAyNzkuMyAyMi44IDIzNy44IDIyLjggMTYxLjEgMjIuNyA1My43IDkwLjggMCAxNzEuNyAwbDgyLjMgMCAwIDUxMi01NS4xIDAgMC0xOTYuMi00NS44IDB6TTE5OC45IDQ2LjVsLTI5LjQgMGMtNDQuNCAwLTg3LjQgMjkuNC04Ny40IDExNC42IDAgODIuMyAzOS40IDEwOC44IDg3LjQgMTA4LjhsMjkuNCAwIDAtMjIzLjR6Il19LGw3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaXhpdiIsaWNvbjpbNDQ4LDUxMixbXSwiZTY0MCIsIk05NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2TDk2IDMyem03Ny43IDIxNy4zYTYwLjEgNjAuMSAwIDEgMCAxMjAuMyAwIDYwLjEgNjAuMSAwIDEgMCAtMTIwLjMgMHpNMTE5LjEgMzg3LjhjLS4zLS44LS41LTEuNy0uNS0yLjZsMC0yNDQuM2MwLTEuOCAuNy0zLjYgMi00LjlzMy0yIDQuOS0ybDE2LjkgMGMxLjIgMCAyLjMgLjMgMy4zIC44czEuOSAxLjMgMi41IDIuM2wxNCAyMS44YzE5LjctMTUuNiA0NC41LTI1IDcxLjYtMjUgNjMuNiAwIDExNS4yIDUxLjYgMTE1LjIgMTE1LjJTMjk3LjUgMzY0LjUgMjMzLjggMzY0LjVjLTIyIDAtNDIuNi02LjItNjAuMS0xNi45bDAgMzcuNmMwIC45LS4yIDEuOC0uNSAyLjZzLS45IDEuNi0xLjUgMi4yLTEuNCAxLjEtMi4yIDEuNS0xLjcgLjUtMi42IC41bC00MS4zIDBjLS45IDAtMS44LS4yLTIuNi0uNXMtMS42LS45LTIuMi0xLjUtMS4xLTEuNC0xLjUtMi4yeiJdfSxjN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3BlbmFpIixpY29uOls1MTIsNTEyLFtdLCJlN2NmIiwiTTE5Ni40IDE4NS44bDAtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44TDM0My4zIDExMS4xYy02LjEtMy42LTEyLjMtMy42LTE4LjQgMEwxOTYuNCAxODUuOHpNNDI0LjcgMzc1LjJsMC0xMTYuMmMwLTcuMi0zLjEtMTIuMy05LjItMTUuOUwyODcgMTY4LjQgMzI5IDE0NC4zYzMuNi0yIDYuNy0yIDEwLjIgMEw0MzcgMjAwLjdjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNmwwIDB6TTE2Ni4yIDI3Mi44bC00Mi0yNC42Yy0zLjYtMi01LjEtNS4xLTUuMS05LjJsMC0xMTIuNmMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBMMTc1LjQgMTA4LjVjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOWwwIDE0OC41IDAgMHptOTAuNCA1Mi4ybC02MC4yLTMzLjggMC03MS43IDYwLjItMzMuOCA2MC4yIDMzLjggMCA3MS43LTYwLjIgMzMuOHptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlsMC0xNDguNSA0Mi41IDI0LjZjMy42IDIgNS4xIDUuMSA1LjEgOS4ybDAgMTEyLjZjMCA1NC44LTQyLjUgOTYuMy05OS4zIDk2LjNsMCAwek0xNzMuOCAzNjYuNUw3Ni4xIDMxMC4yYy0yOC4yLTE2LjQtNDcuMS01MS4yLTQ3LjEtODUgMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZsMCAxMTYuN2MwIDcuMiAzLjEgMTIuMyA5LjIgMTUuOWwxMjggNzQuMi00MiAyNC4xYy0zLjYgMi02LjcgMi0xMC4yIDB6bS01LjYgODRjLTU3LjkgMC0xMDAuNC00My41LTEwMC40LTk3LjMgMC00LjEgLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjIgMCA0OC42YzAgNC4xLTEuNSA3LjItNS4xIDkuMmwtOTcuOCA1Ni4zYy0xMy4zIDcuNy0yOS4yIDExLjMtNDUuNiAxMS4zbDAgMHptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiXX0sZDdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNpdGgiLGljb246WzQ0OCw1MTIsW10sImY1MTIiLCJNMCAzMmw2OS43IDExOC44LTU4LjktMTEuNSA2OS44IDkxYy0zIDE3LTMgMzQuNCAwIDUxLjRsLTY5LjggOTEgNTguOS0xMS41LTY5LjcgMTE4LjggMTE4LjgtNjkuNy0xMS41IDU4LjkgOTEtNjkuOGMxNyAzIDM0LjUgMyA1MS41IDBsOTEgNjkuOC0xMS41LTU4LjkgMTE4LjcgNjkuNy02OS43LTExOC44IDU4LjkgMTEuNS02OS44LTkxYzMtMTcgMy0zNC40IDAtNTEuNGw2OS44LTkxLTU4LjkgMTEuNSA2OS43LTExOC44LTExOC43IDY5LjcgMTEuNS01OC45LTkxLjEgNjkuOWMtOC41LTEuNS0xNy4xLTIuMy0yNS43LTIuM3MtMTcuMiAuOC0yNS43IDIuM0wxMDcuMiA0Mi44IDExOC44IDEwMS43IDAgMzJ6TTIyNCAzODAuMmExMjQuMiAxMjQuMiAwIDEgMSAwLTI0OC40IDEyNC4yIDEyNC4yIDAgMSAxIDAgMjQ4LjR6bTAtMjExLjhhODcuNiA4Ny42IDAgMSAwIDAgMTc1LjEgODcuNiA4Ny42IDAgMSAwIDAtMTc1LjF6Il19LHA3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqdWxpYSIsaWNvbjpbNjQwLDUxMixbXSwiZTg1MiIsIk0xMjQgNDA2LjVjMCAxNi4xLTEuOCAyOS4xLTUuNCAzOXMtOC44IDE3LjYtMTUuNSAyMy4xLTE0LjcgOS4xLTI0LjEgMTEtMTkuOCAyLjgtMzEuMiAyLjhjLTE1LjUgMC0yNy4zLTIuNC0zNS41LTcuM1MwIDQ2NC41IDAgNDU3LjdjMC01LjYgMi4zLTEwLjQgNi45LTE0LjNzMTAuOC01LjggMTguNS01LjhjNS44IDAgMTAuNCAxLjYgMTMuOSA0LjdzNi4zIDYuMiA4LjYgOS4zYzIuNiAzLjQgNC44IDUuNiA2LjUgNi44czMuNCAxLjcgNC44IDEuN2MzLjEgMCA1LjQtMS44IDctNS40czIuNC0xMC43IDIuNC0yMS4ybDAtMTk4LjcgNTUuNC0xNS4yIDAgMTg2Ljl6bTc4LjktMTgxLjZsMCAxMjcuOWMwIDMuNiAuNyA2LjkgMi4xIDEwczMuMyA1LjggNS43IDguMSA1LjIgNC4xIDguNSA1LjQgNi43IDIuMSAxMC40IDIuMWM0LjIgMCA4LjktMi4zIDE0LjctNi40IDkuMi02LjQgMTQuNy0xMC45IDE0LjctMTYuMWwwLTEzMSA1NS4xIDAgMCAxODEuNi01NS4xIDAgMC0xNi45Yy03LjMgNi4xLTE1IDExLTIzLjIgMTQuN3MtMTYuMiA1LjYtMjMuOSA1LjZjLTkgMC0xNy40LTEuNS0yNS4xLTQuNXMtMTQuNS03LTIwLjMtMTIuMi0xMC40LTExLjItMTMuNy0xOC4xYy0zLjMtNi45LTUtMTQuMy01LTIyLjJsMC0xMjcuOSA1NS4xIDB6TTM5MS40IDQwNi41bC01NC45IDAgMC0yNTQuNiA1NC45LTE1LjIgMCAyNjkuOHptMjIuOS0xNzEuN2w1NS4xLTE1LjIgMCAxODYuOS01NS4xIDAgMC0xNzEuN3ptMTcwLjMgNzcuOWMtNS4zIDIuMy0xMC43IDQuOS0xNi4xIDcuOXMtMTAuMyA2LjItMTQuNyA5LjgtOCA3LjMtMTAuOCAxMS40LTQuMSA4LjItNC4xIDEyLjZjMCAzLjQgLjQgNi42IDEuMyA5LjhzMi4xIDUuOCAzLjggOC4xIDMuNCA0LjEgNS4zIDUuNCA0IDIuMSA2LjMgMi4xYzQuNSAwIDkuMS0xLjQgMTMuNy00LjFzOS43LTYuMiAxNS40LTEwLjRsMC01Mi41ek02NDAgNDA2LjVsLTU1LjQgMCAwLTE0LjVjLTMuMSAyLjYtNiA1LTguOSA3LjFzLTYuMiA0LjEtOS44IDUuNy03LjcgMi45LTEyLjIgMy44Yy00LjUgLjktOS44IDEuMy0xNS45IDEuMy04LjQgMC0xNS45LTEuMi0yMi42LTMuNi02LjctMi40LTEyLjQtNS43LTE3LTkuOXMtOC4zLTkuMS0xMC44LTE0LjljLTIuNS01LjctMy44LTEyLTMuOC0xOC43IDAtNi45IDEuMy0xMy4yIDQtMTguOSAyLjctNS42IDYuMy0xMC43IDEwLjktMTUuMiA0LjYtNC41IDkuOS04LjUgMTYuMS0xMi4xczEyLjctNi44IDE5LjctOS44IDE0LjMtNS43IDIxLjktOC4yIDE1LjEtNC45IDIyLjUtNy4xbDYtMS41IDAtMTcuOWMwLTExLjYtMi4yLTE5LjgtNi42LTI0LjdzLTEwLjQtNy4zLTE3LjgtNy4zYy04LjcgMC0xNC44IDIuMS0xOC4xIDYuM3MtNS4xIDkuMy01LjEgMTUuMmMwIDMuNC0uNCA2LjctMS4xIDkuOS0uNyAzLjItMiA2LTMuNyA4LjVzLTQuMyA0LjQtNy42IDUuOGMtMy4zIDEuNS03LjUgMi4yLTEyLjUgMi4yLTcuNyAwLTE0LTIuMi0xOC45LTYuNi00LjgtNC40LTcuMy0xMC03LjMtMTYuOCAwLTYuMyAyLjEtMTIuMSA2LjQtMTcuNSA0LjMtNS40IDEwLTEwIDE3LjMtMTMuOSA3LjMtMy45IDE1LjYtNi45IDI1LjEtOS4yczE5LjYtMy40IDMwLjItMy40YzEzLjEgMCAyNC4zIDEuMiAzMy43IDMuNXMxNy4yIDUuNyAyMy4zIDEwIDEwLjYgOS42IDEzLjUgMTUuNyA0LjQgMTMgNC40IDIwLjZsMCAxMzYuMXpNNjAgMTcyLjlhMzcuNCAzNy40IDAgMSAxIDc0LjkgMCAzNy40IDM3LjQgMCAxIDEgLTc0LjkgMHpNNDUyLjIgOTVhMzcuNCAzNy40IDAgMSAxIDc0LjkgMCAzNy40IDM3LjQgMCAxIDEgLTc0LjkgMHptNDUgNzcuOWEzNy40IDM3LjQgMCAxIDEgNzQuOSAwIDM3LjQgMzcuNCAwIDEgMSAtNzQuOSAwem0tODkuOSAwYTM3LjQgMzcuNCAwIDEgMSA3NC45IDAgMzcuNCAzNy40IDAgMSAxIC03NC45IDB6Il19LGg3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJuZmMtZGlyZWN0aW9uYWwiLGljb246WzUxMiw1MTIsW10sImU1MzAiLCJNMjExLjggNDg4LjZjMS42IDIuNSAyLjEgNS42IDEuNCA4LjUtLjYgMi45LTIuNCA1LjUtNC45IDcuMS0yLjYgMS42LTUuNiAyLjEtOC42IDEuNS02MS40LTEzLjktMTE1LjYtNDkuOS0xNTIuMi0xMDEuMlMtNS40IDI5MC4zIDEuNiAyMjcuN2M3LTYyLjcgMzYuOC0xMjAuNSA4My43LTE2Mi41IDQ2LjktNDIgMTA3LjctNjUuMiAxNzAuNy02NS4yIDEuNSAwIDIuMSAuMyA0LjMgLjkgMS40IC42IDEuOCAxLjQgMy43IDIuNSAxLjEgMS4xIDEuOSAyLjMgMi41IDMuNyAuNSAxLjQgLjggMi44IC44IDQuM2wwIDEwMSAyNC41LTI1LjljMS0xLjEgMi4yLTIgMy42LTIuNiAxLjMtLjYgMi44LS45IDQuMy0xIDEuNS0uMSAyLjkgLjIgNC4zIC43czIuNyAxLjMgMy44IDIuNGMxIDEgMS45IDIuMiAyLjUgMy42IC42IDEuMyAxIDIuOCAxIDQuM3MtLjIgMy0uNyA0LjNjLS42IDEuNC0xLjQgMi42LTIuNCAzLjdsLTQ0IDQ2LjZjLTEuMSAxLjEtMi4zIDItMy43IDIuNi0xLjUgLjYtMyAuOS01LjQgLjktLjYgMC0yLjItLjMtMy42LS45cy0yLjctMS41LTMuNy0yLjZsLTQ0LjEtNDYuNmMtMi0yLjItMy4xLTUuMS0zLTguMSAwLTMgMS4zLTYuNyAzLjUtNy45IDIuMi0yLjEgNS4xLTMuMiA4LjEtMy4xIDMgLjEgNS44IDEuMyA3LjkgMy41bDI0LjUgMjYgMC04OS41Yy01Ni40IDIuOC0xMDkuOCAyNS44LTE1MC41IDY1LTQwLjYgMzkuMS02NS43IDkxLjctNzAuNiAxNDcuOVMzNC40IDM0OC4xIDY3LjcgMzkzLjdjMzIuNCA0NS41IDgyIDc3LjUgMTM3IDg5LjkgMi45IC43IDUuNSAyLjUgNy4xIDV6TTE3MS40IDEyNi4xYy0uOCAxLjMtMS45IDIuNC0zLjEgMy4yLTIwLjUgMTMuOS0zNy4yIDMyLjYtNDguOCA1NC41cy0xNy43IDQ2LjMtMTcuNyA3MS4xIDYuMSA0OS4yIDE3LjcgNzAuMmMxMS42IDIyLjggMjguMyA0MS41IDQ4LjggNTUuNCAyLjUgMS43IDQuMiA0LjMgNC43IDcuMyAuNiAyLjktLjkgNi0xLjcgOC40LTEuNyAyLjUtNS4yIDQuMi03LjMgMy45LTIuOSAxLjQtNiAuOC04LjQtLjktMjMuNi0xNi00Mi44LTM3LjUtNTYuMS02Mi43LTEzLjMtMjUuMS0yMC4zLTUzLjEtMjAuMy04MS42IDAtMjguNCA3LTU2LjUgMjAuMy04MS42IDEzLjMtMjUuMiAzMi41LTQ2LjcgNTYuMS02Mi43IDEuMi0uOCAyLjYtMS40IDQtMS44IDEuNS0uMyAzLS4zIDQuNSAwIDEuNCAuMiAyLjggLjggNC4xIDEuNnMyLjMgMS45IDMuMiAzLjFjLjggMS4yIDEuNCAyLjYgMS43IDQuMXMuMyAzIDAgNC40Yy0uMyAxLjUtLjggMi45LTEuNyA0LjF6TTM0MC45IDM4My41Yy44LTEuMiAxLjktMi4zIDIuMi0zLjFsMC0uMWMyMS4zLTE0IDM4LTMyLjcgNDkuNi01NC42IDExLjUtMjEuOCAxNy41LTQ2LjIgMTcuNS03MC45cy02LTQ5LjEtMTcuNS03MWMtMTEuNi0yMi43LTI4LjMtNDAuNS00OS42LTU0LjUtLjMtLjgtMS40LTEuOS0yLjItMy4xLS44LTEuMy0xLjQtMi43LTEuNi00LjEtMS4yLTEuNS0uMy0zIDAtNC40IC4zLTEuNSAuOS0yLjkgMS43LTQuMSAuOS0xLjIgMS4xLTIuMyAzLjItMy4xIDEuMi0uOCAyLjYtMS4zIDQuMS0xLjZzMi45LS4zIDQuNCAwIDIuOCAuOSA0LjEgMS44YzIzLjQgMTYgNDIuNyAzNy41IDU1LjkgNjIuNiAxMy4zIDI1LjEgMTkuNCA1My4xIDE5LjQgODEuNSAwIDI4LjUtNi4xIDU2LjUtMTkuNCA4MS42LTEzLjIgMjUuMS0zMi41IDQ2LjYtNTUuOSA2Mi42LTEuMyAuOS0yLjYgMS41LTQuMSAxLjhzLTIuOSAuMy00LjQgMC0yLjktMS43LTQuMS0xLjZjLTIuMS0uOC0yLjMtMS45LTMuMi0zLjEtLjgtMS4yLTEuNC0yLjYtMS43LTQuMS0uMy0xLjQtMS4yLTIuOSAwLTQuNCAuMi0xLjQgLjgtMi44IDEuNi00LjF6TTMxMi4zIDYuM2M1Ni4yIDEyLjcgMTA2LjQgNDQgMTQyLjcgODguNyAzMC40IDM3LjYgNDkuNiA4MyA1NS4zIDEzMSA1LjYgNDgtMi40IDk2LjctMjMuMiAxNDAuMy0yMC45IDQzLjYtNTMuNiA4MC41LTk0LjUgMTA2LjMtNDAuOSAyNS43LTg4LjIgMzkuNC0xMzYuNiAzOS40LTEuNSAwLTIuOS0uMy00LjMtLjktMS40LS41LTIuNi0xLjQtMy43LTIuNC0xLjktMS4xLTEuOS0yLjMtMi40LTMuNy0uNi0xLjQtLjktMi44LS45LTQuM2wwLTk5LjItMjQuNSAyNmMtMi4xIDIuMi00LjkgMi42LTcuOSAzLjYtMyAuMS01LjktMS4xLTguMS00LTIuMi0xLjItMy41LTQtMy41LTctLjEtMyAxLTUuOSAzLTguMWw0NC4xLTQ2LjZjMS4zLTIuMiA1LjEtMy40IDcuMy0zLjQgNCAwIDYuOSAxLjIgOS4xIDMuNGw0NCA0Ni42YzIuMSAyLjIgMy4yIDUuMSAzLjEgOC4xcy0xLjQgNS44LTMuNSA3Yy0yLjIgMi45LTUuMSA0LjEtOC4xIDQtMy0xLTUuOS0xLjQtNy45LTMuNmwtMjQuNS0yNS45IDAgODcuNWM1Ni40LTIuOCAxMDkuOC0yNS44IDE1MC41LTY1IDQwLjctNDAgNjUuOC05MS43IDcwLjctMTQ3LjkgNC44LTU3LjEtMTAuOC0xMTIuMy00NC4xLTE1Ny45LTMzLjMtNDUuNi04Mi03Ny41LTEzNy04OS45LTEuNS0uMy0yLjgtLjktNC4xLTEuOC0xLjItLjktMi4yLTEuOS0zLTMuMi0uOC0xLjItMi4yLTIuNi0xLjYtNC4xLS4yLTEuNS0uMi0zIC4xLTQuNCAuNC0xLjQgMS0yLjggMS44LTQgLjktMS4yIDItMi4yIDMuMi0zIDEuMy0uOCAyLjctMS4zIDQuMS0xLjYgMS41LS4zIDMtLjIgNC40IC4xem00MC44IDI0OS44YzAgMzEuNC0xNy41IDYxLjEtNDkuMyA4My41LTIuMSAxLjUtNC44IDIuMy03LjQgMi0yLjctLjItNS4yLTEuMy03LTMuMmwtNzAuMS02OS44Yy0yLjItMi4xLTQuMi01LTMuNC04IDAtMyAxLjItNS45IDMuMy04IDIuMi0yLjEgNS0zLjMgOC0zLjNzNS45IDEuMiA4IDMuM2w2My4xIDYyLjhjMjAuOC0xNy4xIDMyLjItMzcuOSAzMi4yLTU5LjMgMC0yMy45LTE0LjEtNDctMzkuNy02NS4xLTIuNS0xLjctNC4xLTQuMy00LjYtNy4zLS41LTIuOSAuMS02IDEuOS04LjQgMS43LTIuNSA0LjMtNC4xIDcuMy00LjYgMi45LS41IDYgLjEgOC40IDEuOSAzMS44IDIyLjQgNDkuMyA1Mi4xIDQ5LjMgODMuNXpNMjE2LjcgMzQxLjVjLTMgLjUtNi0uMi04LjUtMS45LTMxLjctMjIuNC01MC4xLTUyLjEtNTAuMS04My41czE4LjQtNjEuMSA1MC4xLTgzLjVjMi4yLTEuNiA0LjktMi4zIDcuNS0yLjEgMi43IC4zIDUuMSAxLjQgNyAzLjNsNzAuMSA2OS44YzIuMSAyLjEgMy4zIDUgMy4zIDhzLTIgNS44LTMuMyA4Yy0yLjEgMi4xLTUgMy4zLTcuOSAzLjMtMyAwLTYuOC0xLjItOC0zLjNsLTYzLjEtNjIuOWMtMjAuOSAxNy4zLTMyLjIgMzgtMzIuMiA1OS40IDAgMjMgMTQuMSA0NyAzOS43IDY1IDIuNCAxLjggNC4xIDQuNCA0LjYgNy40IC41IDIuOS0uMiA1LjktMS45IDguNC0xLjcgMi40LTQuNCA0LjEtNy4zIDQuNnoiXX0sdTdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtYnkiLGljb246WzUxMiw1MTIsW10sImY0ZTciLCJNMzIyLjkgMTk0LjRsMCAxMDEuNC0yOC4zIDAgMCAxMjAuNS03Ny4xIDAgMC0xMjAuNC0yOC4zIDAgMC0xMDEuNWMwLTQuNCAxLjYtOC4yIDQuNi0xMS4zIDMuMS0zLjEgNi45LTQuNyAxMS4zLTQuN2wxMDEuOSAwYzQuMSAwIDcuOCAxLjYgMTEuMSA0LjcgMy4xIDMuMiA0LjggNi45IDQuOCAxMS4zem0tMzIuNS02NC41YTM0LjUgMzQuNSAwIDEgMSAtNjkgLjggMzQuNSAzNC41IDAgMSAxIDY5LS44ek0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6Il19LGY3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bWJyYWNvIixpY29uOls1MTIsNTEyLFtdLCJmOGU4IiwiTTI1Ni4zIDhhMjQ4IDI0OCAwIDEgMCAtLjcgNDk2IDI0OCAyNDggMCAxIDAgLjctNDk2em0xNDUgMjY2Yy0uOCAyNy4xLTUuNCA0OC44LTE0IDY1cy0yMy4xIDI3LjktNDMuNSAzNWMtMjAuNCA3LjEtNDguOSAxMC42LTg1LjQgMTAuNWwtNC42IDBjLTM2LjUgLjEtNjUtMy4zLTg1LjQtMTAuNXMtMzQuOS0xOC44LTQzLjUtMzVjLTguNi0xNi4yLTEzLjItMzcuOS0xNC02NS0uNy0xMC4yLS43LTIwLjUgMC0zMC43IC40LTE0LjcgMS42LTI5LjMgMy42LTQzLjkgMS45LTEzLjQgMy42LTIyLjYgNS40LTMyIDEtNC45IDEuMy02LjQgMS44LTguNCAuMy0xLjEgLjktMi4xIDEuOC0yLjhzMi0xLjEgMy4xLTEuMWwuNyAwIDMyIDVjMS4yIC4yIDIuMiAuOCAzIDEuN3MxLjIgMi4xIDEuMiAzLjNjMCAuMyAwIC41IDAgLjhsLTEuNyA4LjhjLTEuNiA4LjgtMy4yIDIwLjEtNC44IDMzLjctMS43IDE0LTIuNSAyOC4xLTIuNiA0Mi4yLS4yIDI3IDIuNSA0Ni45IDguMSA1OS44IDIuOCA2LjQgNy4yIDEyIDEyLjYgMTYuNHMxMS45IDcuNCAxOC43IDguOGMxOC44IDQgMzguMSA1LjcgNTcuMyA1LjFsMTAuMyAwYzE5LjIgLjYgMzguNS0xLjIgNTcuMy01LjIgNi44LTEuNCAxMy4yLTQuNSAxOC42LTguOHM5LjctMTAgMTIuNS0xNi40YzUuNy0xMi45IDguNC0zMi45IDguMS01OS44LS4xLTE0LjEtMS0yOC4yLTIuNi00Mi4xLTEuNy0xMy42LTMuMy0yNC44LTQuOS0zMy43bC0xLjctOC44YzAtLjMgMC0uNSAwLS44IDAtMS4yIC40LTIuNCAxLjItMy4zczEuOC0xLjUgMy0xLjdsMzItNSAuOCAwYzEuMSAwIDIuMiAuNCAzLjEgMS4xczEuNSAxLjcgMS44IDIuOGMuNiAyIC44IDMuNiAxLjggOC40IDEuOCA5LjYgMy41IDE4LjggNS40IDMyIDIgMTQuNiAzLjIgMjkuMiAzLjYgNDMuOSAuNyAxMC4yIC43IDIwLjUgMCAzMC43bDAgMHoiXX0sbTdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imhvb2xpIixpY29uOls2NDAsNTEyLFtdLCJmNDI3IiwiTTE0NC41IDM1MmwzOC4zIC44Yy0xMy4yLTQuNi0yNi0xMC4yLTM4LjMtMTYuOGwwIDE2em01Ny43LTUuM2wwIDUuMy0xOS40IC44YzM2LjUgMTIuNSA2OS45IDE0LjIgOTQuNyA3LjItMTkuOSAuMi00NS44LTIuNi03NS4zLTEzLjN6TTYxMS4xIDIzMS41YzE1LjkgMCAyOC45LTEyLjkgMjguOS0yOC45cy0xMi45LTI0LjUtMjguOS0yNC41Yy0xNS45IDAtMjguOSA4LjYtMjguOSAyNC41czEyLjkgMjguOSAyOC45IDI4Ljl6TTU4Mi4xIDM1Mmw1Ny45IDAgMC0xMTAuNS01Ny45IDAgMCAxMTAuNXptLTczLjcgMGw1Ny45IDAgMC0xOTUuMy01Ny45IDI3LjMgMCAxNjh6bS0zMS0xMTkuNGMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjMtMS4xLTUwLjQgMTcuMWMtMTguMiAxOC4yLTE2LjggMzMuOS0xNi44IDUyLjZzLTEuNCAzNC4zIDE2LjggNTIuNSA1MC40IDE3LjEgNTAuNCAxNy4xIDMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuOC0zMy44IDE2LjgtNTIuNS0uMS0xOC44IDEuMy0zNC41LTE2LjgtNTIuNnptLTM5LjggNzEuOWMwIDMuNi0xLjggMTIuNS0xMC43IDEyLjVzLTEwLjctOC45LTEwLjctMTIuNWwwLTQwLjRjMC04LjcgNy4zLTEwLjkgMTAuNy0xMC45czEwLjcgMi4xIDEwLjcgMTAuOWwwIDQwLjR6TTMzMS40IDIzMi42Yy0xOC4yLTE4LjItNTAuNC0xNy4xLTUwLjQtMTcuMXMtMzIuMi0xLjEtNTAuNCAxNy4xYy0xLjkgMS45LTMuNyAzLjktNS4zIDYtMzguMi0yOS42LTcyLjUtNDYuNS0xMDIuMS02MS4xbDAtMjAuNy0yMi41IDEwLjZjLTU0LjQtMjIuMS04OS0xOC4yLTk3LjMgLjEgMCAwLTI0LjkgMzIuOCA2MS44IDExMC44bDAgNzMuNyA1Ny45IDAgMC0yOC42Yy02LjUtNC4yLTEzLTguNy0xOS40LTEzLjYtMTQuOC0xMS4yLTI3LjQtMjEuNi0zOC40LTMxLjRsMC0zMWMxMy4xIDE0LjcgMzAuNSAzMS40IDUzLjQgNTAuM2w0LjUgMy42IDAtMjkuOGMwLTYuOSAxLjctMTguMiAxMC44LTE4LjJzMTAuNiA2LjkgMTAuNiAxNWwwIDQ4LjdjMTggMTIuMiAzNy4zIDIyLjEgNTcuNyAyOS42bDAtOTMuOWMwLTE4LjctMTMuNC0zNy40LTQwLjYtMzcuNC0xNS44LS4xLTMwLjUgOC4yLTM4LjUgMjEuOWwwLTU0LjNjNDEuOSAyMC45IDgzLjkgNDYuNSA5OS45IDU4LjMtMTAuMiAxNC42LTkuMyAyOC4xLTkuMyA0My43IDAgMTguNy0xLjQgMzQuMyAxNi44IDUyLjVzNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjctMzMuOCAxNi43LTUyLjUgMC0xOC41IDEuNS0zNC4yLTE2LjctNTIuM3pNNjUuMiAxODRsMCA2My4zYy00OC43LTU0LjUtMzguOS03Ni0zNS4yLTc5LjEgMTMuNS0xMS40IDM3LjUtOCA2NC40IDIuMUw2NS4yIDE4NHpNMjkxLjcgMzA0LjVjMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40eiJdfSxmRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZ2l0IixpY29uOls0NDgsNTEyLFsiZ2l0LXNxdWFyZSJdLCJmMWQyIiwiTTEyMC44IDMzNS41Yy01LjktLjQtMTIuNi0uOC0yMC4yLTEuMy0zLjMgNC4xLTYuNiA4LjQtNi42IDEzLjUgMCAxOC41IDY1LjUgMTguNSA2NS41LTEuNSAwLTguMy03LjQtOC43LTM4LjgtMTAuN2wuMSAwem03LjgtMTE3LjljLTMyLjMgMC0zMy43IDQ0LjUtLjcgNDQuNSAzMi41IDAgMzEuNy00NC41IC43LTQ0LjV6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0yNDMuOSAxNzIuMmMtMTQuNSAwLTIyLjktOC40LTIyLjktMjIuOXM4LjQtMjIuMyAyMi45LTIyLjNjMTQuNyAwIDIzLjEgNy44IDIzLjEgMjIuM3MtOC40IDIyLjktMjMuMSAyMi45ek0xNDkuNiAxOTVsNDkuNSAwIDAgMjEuNi0yMy40IDEuOGM0LjYgNS44IDkuNCAxNCA5LjQgMjUuNyAwIDQ4LjctNTcuMiA0Ny4yLTc0LjIgNDIuNGwtOC40IDEzLjRjNSAuMyA5LjggLjYgMTQuMyAuOCA1Ni4zIDMuMiA4MC41IDQuNiA4MC41IDM4LjUgMCAyOS4yLTI1LjcgNDUuNy02OS45IDQ1LjctNDYgMC02My41LTExLjYtNjMuNS0zMS43IDAtMTEuNCA1LjEtMTcuNSAxNC0yNS45LTguNC0zLjUtMTEuMi05LjktMTEuMi0xNi44IDAtOS42IDcuNC0xNi4zIDIzLTMwLjZsLjItLjJjLTEyLjQtNi4xLTIxLjgtMTkuMy0yMS44LTM4LjEgMC01MS42IDU2LjYtNTMuMyA4MS42LTQ2LjhsLS4xIC4yek0yNzAuNSAzMDMuMWwxMyAxLjggMCAyMC4xLTcyLjQgMCAwLTIwLjFjMi43LS40IDUtLjcgNi45LS45IDkuOS0xLjIgMTAuMS0xLjMgMTAuMS02bDAtNzQuN2MwLTQuNC0uOS00LjctMTAuMS03LjgtMS45LS43LTQuMi0xLjQtNi45LTIuNGwyLjgtMjAuNiA1Mi42IDAgMCAxMDUuNWMwIDQuMSAuMiA0LjYgNC4xIDUuMWwtLjEgMHptMTA2LjYtMTAuNEwzODQgMzE1Yy0xMC45IDUuNC0yNi45IDEwLjItNDEuNCAxMC4yLTMwLjIgMC00MS43LTEyLjItNDEuNy00MC45bDAtNjYuNmMwLS44IDAtMS40LS4yLTEuOC0uOC0xLjItNC4yLS43LTE5LjYtLjdsMC0yMi42YzIyLjMtMi41IDMxLjItMTMuNyAzNC00MS40bDI0LjIgMGMwIDMzLjMtLjYgMzggLjcgMzguNiAuMyAuMSAuNyAwIDEuMyAwbDM1LjggMCAwIDI1LjQtMzcuOCAwIDAgNjEuNmMtLjIgNi4zLS45IDMwLjQgMzcuOSAxNS45bC0uMSAweiJdfSxnN2U9ZkUsYjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9kbm9rbGFzc25pa2kiLGljb246WzMyMCw1MTIsW10sImYyNjMiLCJNMjc1LjEgMzM0Yy0yNy40IDE3LjQtNjUuMSAyNC4zLTkwIDI2LjlsMjAuOSAyMC42IDc2LjMgNzYuM2MyNy45IDI4LjYtMTcuNSA3My4zLTQ1LjcgNDUuNy0xOS4xLTE5LjQtNDcuMS00Ny40LTc2LjMtNzYuNkw4NCA1MDMuNGMtMjguMiAyNy41LTczLjYtMTcuNi00NS40LTQ1LjcgMTkuNC0xOS40IDQ3LjEtNDcuNCA3Ni4zLTc2LjNsMjAuNi0yMC42Yy0yNC42LTIuNi02Mi45LTkuMS05MC42LTI2LjktMzIuNi0yMS00Ni45LTMzLjMtMzQuMy01OSA3LjQtMTQuNiAyNy43LTI2LjkgNTQuNi01LjcgMCAwIDM2LjMgMjguOSA5NC45IDI4LjlTMjU1IDI2OS4yIDI1NSAyNjkuMmMyNi45LTIxLjEgNDcuMS04LjkgNTQuNiA1LjcgMTIuNCAyNS43LTEuOSAzOC0zNC41IDU5LjF6bTE0LjYtMjA0LjdhMTI5LjcgMTI5LjcgMCAxIDEgLTI1OS40IC40IDEyOS43IDEyOS43IDAgMSAxIDI1OS40LS40em0tMTkzLjQgLjRhNjMuNyA2My43IDAgMSAwIDEyNy40LS40IDYzLjcgNjMuNyAwIDEgMCAtMTI3LjQgLjR6Il19LHY3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkcnVwYWwiLGljb246WzM4NCw1MTIsW10sImYxYTkiLCJNMjcyLjMgMTA4LjFDMjM2LjUgNzIuNSAyMDIuNSAzOC40IDE5Mi40IDAgMTgyLjQgMzguNCAxNDguMSA3Mi41IDExMi40IDEwOC4xIDU4LjggMTYxLjctMS45IDIyMi40LTEuOSAzMTMuNC00LjMgNDIwLjcgODAuOCA1MDkuNiAxODguMSA1MTJzMTk2LjItODIuOCAxOTguNS0xOTAuMWMuMS0yLjggLjEtNS42IDAtOC41IDAtOTEuMS02MC44LTE1MS43LTExNC4zLTIwNS4zek05OCAzMzEuMWMtNS45IDcuNS0xMSAxNS42LTE1LjIgMjQuMi0uMyAuNy0uOCAxLjMtMS4zIDEuOHMtMS4yIC44LTIgMWwtMS43IDBjLTQuMyAwLTkuMi04LjUtOS4yLTguNS0xLjMtMi0yLjUtNC4yLTMuNy02LjRsLS44LTEuOGMtMTEuMi0yNS43LTEuNS02Mi4zLTEuNS02Mi4zIDQuOC0xNy44IDEyLjctMzQuNyAyMy4yLTQ5LjkgNi40LTkuNiAxMy41LTE4LjkgMjEtMjcuN2w5LjIgOS4yIDQzLjUgNDQuNGMuOCAuOSAxLjMgMi4xIDEuMyAzLjNzLS41IDIuNC0xLjMgMy4zTDExNC4xIDMxMi4zIDk4IDMzMS4xem05Ni42IDEyNy4zYy0xMi45LS4xLTI1LjYtMy45LTM2LjQtMTFzLTE5LjQtMTcuMS0yNC42LTI4LjktNy0yNC45LTUtMzcuNyA3LjYtMjQuNyAxNi4yLTM0LjRjMTQuMi0xNi45IDMxLjUtMzMuNSA1MC4zLTU1LjMgMjIuMyAyMy44IDM2LjkgNDAuMSA1MS4yIDU4IDEuMSAxLjQgMi4xIDIuOSAzIDQuNCA3LjggMTEuMSAxMiAyNC40IDEyIDM4IDAgOC44LTEuNyAxNy40LTUgMjUuNXMtOC4yIDE1LjUtMTQuNCAyMS43LTEzLjUgMTEuMS0yMS42IDE0LjUtMTYuNyA1LjEtMjUuNSA1LjFsLS4yIDB6TTMyMC43IDM1MS42Yy0uNCAxLjQtMS4yIDIuNi0yLjMgMy42cy0yLjQgMS42LTMuOCAxLjhsLTEuMyAwYy0yLjYtLjktNC45LTIuNy02LjMtNS4xLTExLjYtMTcuNS0yNC45LTMzLjktMzkuNS00OWwtMTcuOC0xOC40LTU5LjEtNjEuM2MtMTIuNC0xMS41LTI0LjItMjMuNi0zNS40LTM2LjMtLjMtLjUtLjYtLjktLjktMS40LTItMi44LTMuNi01LjktNC43LTkuMmwwLTEuOGMtLjgtNS0uNC0xMC4xIDEuMi0xNXM0LjQtOS4yIDgtMTIuN2MxMS40LTExLjQgMjMtMjMgMzMuOC0zNC45IDEyIDEzLjMgMjQuOCAyNiAzNy40IDM4LjYgMjUuOCAyNCA0OS4xIDUwLjUgNjkuNiA3OS4xIDE3LjMgMjQuNSAyNi43IDUzLjggMjcgODMuOC0uMSAxMi45LTIuMiAyNS44LTYgMzguMnoiXX0seTdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsb2dnZXItYiIsaWNvbjpbNDQ4LDUxMixbXSwiZjM3ZCIsIk00NDYuNiAyMjIuN2MtMS44LTgtNi44LTE1LjQtMTIuNS0xOC41LTEuOC0xLTEzLTIuMi0yNS0yLjctMjAuMS0uOS0yMi4zLTEuMy0yOC43LTUtMTAuMS01LjktMTIuOC0xMi4zLTEyLjktMjkuNS0uMS0zMy0xMy44LTYzLjctNDAuOS05MS4zLTE5LjMtMTkuNy00MC45LTMzLTY1LjUtNDAuNS01LjktMS44LTE5LjEtMi40LTYzLjMtMi45LTY5LjQtLjgtODQuOCAuNi0xMDguNCAxMC00My41IDE3LjItNzQuNyA1My44LTg2LjEgMTAwLjYtMi4xIDguOC0yLjYgMjIuOS0zLjEgMTAzLjktLjYgMTAxLjUgLjEgMTE2LjQgNi40IDEzNi41IDE1LjYgNDkuNiA1OS45IDg2LjMgMTA0LjQgOTQuMyAxNC44IDIuNyAxOTcuMyAzLjMgMjE2IC44IDMyLjUtNC40IDU4LTE3LjUgODEuOS00MS45IDE3LjMtMTcuNyAyOC4xLTM2LjggMzUuMi02Mi4xIDQuOS0xNy42IDQuNS0xNDIuOCAyLjUtMTUxLjd6TTEyNC41IDE1OS4xYzcuOC03LjkgMTAtOC4yIDU4LjgtOC4yIDQzLjkgMCA0NS40IC4xIDUxLjggMy40IDkuMyA0LjcgMTMuNCAxMS4zIDEzLjQgMjEuOSAwIDkuNS0zLjggMTYuMi0xMi4zIDIxLjYtNC42IDIuOS03LjMgMy4xLTUwLjMgMy4zLTI2LjUgLjItNDcuNy0uNC01MC44LTEuMi0xNi42LTQuNy0yMi44LTI4LjUtMTAuNi00MC44ek0zMTYuMyAzNTguOWwtMTQuOSAyLjQtNzcuNSAuOWMtNjguMSAuOC04Ny4zLS40LTkwLjktMi03LjEtMy4xLTEzLjgtMTEuNy0xNC45LTE5LjQtMS4xLTcuMyAyLjYtMTcuMyA4LjItMjIuNCA3LjEtNi40IDEwLjItNi42IDk3LjMtNi43IDg5LjYtLjEgODkuMS0uMSA5Ny42IDcuOCAxMi4xIDExLjMgOS41IDMxLjItNC45IDM5LjR6Il19LHg3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpbnZpc2lvbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjdiMCIsIk00MDcuNCAzMkw0MC42IDMyQzE4LjIgMzIgMCA1MC4yIDAgNzIuNkwwIDQzOS40QzAgNDYxLjggMTguMiA0ODAgNDAuNiA0ODBsMzY2LjggMGMyMi40IDAgNDAuNi0xOC4yIDQwLjYtNDAuNmwwLTM2Ni44QzQ0OCA1MC4yIDQyOS44IDMyIDQwNy40IDMyek0xNzYuMSAxNDUuNmMuNCAyMy40LTIyLjQgMjcuMy0yNi42IDI3LjQtMTQuOSAwLTI3LjEtMTItMjcuMS0yNyAuMS0zNS4yIDUzLjEtMzUuNSA1My43LS40ek0zMzIuOCAzNzdjLTY1LjYgMC0zNC4xLTc0LTI1LTEwNi42IDE0LjEtNDYuNC00NS4yLTU5LTU5LjkgLjdsLTI1LjggMTAzLjMtNDUuMSAwIDguMS0zMi41Yy0zMS41IDUxLjgtOTQuNiA0NC40LTk0LjYtNC4zIC4xLTE0LjMgLjktMTQgMjMtMTA0LjFsLTMxLjggMCA5LjctMzUuNiA3Ni40IDBjLTMzLjYgMTMzLjctMzIuNiAxMjYuOS0zMi45IDEzOC4yIDAgMjAuOSA0MC45IDEzLjUgNTcuNC0yMy4ybDE5LjgtNzkuNC0zMi4zIDAgOS43LTM1LjYgNjguOCAwLTguOSA0MC41YzQwLjUtNzUuNSAxMjcuOS00Ny44IDEwMS44IDM4LTE0LjIgNTEuMS0xNC42IDUwLjctMTQuOSA1OC44IDAgMTUuNSAxNy41IDIyLjYgMzEuOC0xNi45TDM4NiAzMjVjLTEwLjUgMzYuNy0yOS40IDUyLTUzLjIgNTJ6Il19LHc3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmYWNlYm9vay1mIixpY29uOlszMjAsNTEyLFtdLCJmMzllIiwiTTgwIDI5OS4zbDAgMjEyLjcgMTE2IDAgMC0yMTIuNyA4Ni41IDAgMTgtOTcuOC0xMDQuNSAwIDAtMzQuNmMwLTUxLjcgMjAuMy03MS41IDcyLjctNzEuNSAxNi4zIDAgMjkuNCAuNCAzNyAxLjJsMC04OC43QzI5MS40IDQgMjU2LjQgMCAyMzYuMiAwIDEyOS4zIDAgODAgNTAuNSA4MCAxNTkuNGwwIDQyLjEtNjYgMCAwIDk3LjggNjYgMHoiXX0sTTdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNlbnRvcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjc4OSIsIk0yODkuNiA5Ny41bDMxLjYgMzEuNy03Ni4zIDc2LjUgMC0xMDguMiA0NC43IDB6TTEyNy4yIDEyOS4ybDc2LjMgNzYuNSAwLTEwOC4yLTQ0LjcgMC0zMS42IDMxLjd6bTQxLjUtNDEuNmw0NC43IDAgMCAxMjcuOSAxMC44IDEwLjggMTAuOC0xMC44IDAtMTI3LjkgNDQuNyAwLTU1LjUtNTUuNi01NS41IDU1LjZ6bTI2LjIgMTY4LjFsLTEwLjgtMTAuOC0xMjguNiAwIDAtNDQuOC01NS41IDU1LjYgNTUuNSA1NS42IDAtNDQuOCAxMjguNiAwIDEwLjgtMTAuOHpNMjc0LjIgMjM1bDEwNy45IDAgMC00NC44LTMxLjYtMzEuNy03Ni4zIDc2LjV6bTE3My4zIDIwLjdsLTU1LjUtNTUuNiAwIDQ0LjgtMTI3LjcgMC0xMC44IDEwLjggMTAuOCAxMC44IDEyNy43IDAgMCA0NC44IDU1LjUtNTUuNnpNNjUuNCAxNzYuMmwzMi41LTMxLjcgOTAuMyA5MC41IDE1LjMgMCAwLTE1LjMtOTAuMy05MC41IDMxLjYtMzEuNy03OS40IDAgMCA3OC43ek0zODIuMSA5Ny41bC03OC41IDAgMzEuNiAzMS43LTkwLjMgOTAuNSAwIDE1LjMgMTUuMyAwIDkwLjMtOTAuNSAzMS42IDMxLjcgMC03OC43ek0yMDMuNSA0MTMuOWwwLTEwOC4xLTc2LjMgNzYuNSAzMS42IDMxLjcgNDQuNyAwIDAtLjF6TTY1LjQgMjM1bDEwOC44IDAtNzYuMy03Ni41LTMyLjUgMzEuNyAwIDQ0Ljh6TTM4Mi4xIDMzNS4ybC0zMS42IDMxLjctOTAuMy05MC41LTE1LjMgMCAwIDE1LjMgOTAuMyA5MC41LTMxLjYgMzEuNyA3OC41IDAgMC03OC43em0wLTU4LjhsLTEwNy45IDAgNzYuMyA3Ni41IDMxLjYtMzEuNyAwLTQ0Ljh6TTMyMS4yIDM4Mi4ybC03Ni4zLTc2LjUgMCAxMDguMSA0NC43IDAgMzEuNi0zMS42ek05Ny45IDM1Mi45bDc2LjMtNzYuNS0xMDguOCAwIDAgNDQuOCAzMi41IDMxLjd6bTE4MS44IDcwLjlsLTQ0LjcgMCAwLTEyNy45LTEwLjgtMTAuOC0xMC44IDEwLjggMCAxMjcuOS00NC43IDAgNTUuNSA1NS42IDU1LjUtNTUuNnpNMTEzLjIgMzgyLjJsOTAuMy05MC41IDAtMTUuMy0xNS4zIDAtOTAuMyA5MC41LTMyLjUtMzEuNyAwIDc4LjcgNzkuNCAwLTMxLjYtMzEuN3oiXX0sejdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNjYWxld2F5IixpY29uOls0NDgsNTEyLFtdLCJlODU5IiwiTTI0My40IDExNy4zbC04NC4zIDBjLTE4LjUgMi4xLTMyLjcgMTcuNS0zMy40IDM2bDAgMTIxLjljMCA4LjIgMy4yIDE1LjMgOC41IDIwLjdzMTIuNSA4LjYgMjAuNiA4LjZjMTYgMCAyOS4yLTEzLjIgMjkuMi0yOS4ybDAtNzcuNGMwLTEyLjEgMTAtMjIuMSAyMi4xLTIyLjFsMzguMSAwYzguMiAwIDE1LjMtMy4yIDIwLjYtOC42czguNS0xMi44IDguNS0yMWMwLTE2LTEzLjktMjguOS0yOS45LTI4Ljl6TTIwNS4zIDM5NS40bDg0LjMgMGMxOC41LTIuMSAzMi43LTE3LjUgMzMuNC0zNmwwLTEyMS45YzAtOC4yLTMuMi0xNS4zLTguNS0yMC43cy0xMi41LTguNi0yMC42LTguNmMtMTYgMC0yOS4yIDEzLjItMjkuMiAyOS4ybDAgNzcuNGMwIDEyLjEtMTAgMjIuMS0yMi4xIDIyLjFsLTM4LjEgMGMtOC4yIDAtMTUuMyAzLjItMjAuNiA4LjZzLTguNSAxMi44LTguNSAyMWMuNCAxNiAxMy45IDI4LjkgMjkuOSAyOC45ek0xMDQuMyAwTDI1Ny42IDBjMTAxIDAgMTgyLjUgODEuNiAxODIuMSAxODIuOWwwIDI0Mi44Yy00LjYgNDYtNDIgODIuNC04OC4yIDg2LjNMMTkwIDUxMkM4OS4zIDUxMiA3LjUgNDMwIDcuNSAzMjkuMUw3LjUgOTdjMC01My41IDQzLjQtOTcgOTYuOC05N3pNMzgxLjcgMTgyLjljMC02OC41LTU1LjktMTI0LjQtMTI0LjItMTI0LjRsLTE1MyAwQzgzLjMgNTguNSA2Ni4yIDc1LjYgNjYuMiA5N2wwIDIzMi4xYzAgNjguOCA1NS41IDEyNC40IDEyNC4yIDEyNC40bDE1OC43IDBjMTYuNy0yLjEgMjkuOS0xNSAzMi43LTMxLjRsMC0yMzkuMnoiXX0sazdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLWFtYXpvbi1wYXkiLGljb246WzU3Niw1MTIsW10sImY0MmQiLCJNMTI0LjcgMjAxLjhjLjEtMTEuOCAwLTIzLjUgMC0zNS4zbDAtMzUuM2MwLTEuMyAuNC0yIDEuNC0yLjcgMTEuNS04IDI0LjEtMTIuMSAzOC4yLTExLjEgMTIuNSAuOSAyMi43IDcgMjguMSAyMS43IDMuMyA4LjkgNC4xIDE4LjIgNC4xIDI3LjcgMCA4LjctLjcgMTcuMy0zLjQgMjUuNi01LjcgMTcuOC0xOC43IDI0LjctMzUuNyAyMy45LTExLjctLjUtMjEuOS01LTMxLjQtMTEuNy0uOS0uOC0xLjQtMS42LTEuMy0yLjh6bTE1NC45IDE0LjZjNC42IDEuOCA5LjMgMiAxNC4xIDEuNSAxMS42LTEuMiAyMS45LTUuNyAzMS4zLTEyLjUgLjktLjYgMS4zLTEuMyAxLjMtMi41LS4xLTMuOSAwLTcuOSAwLTExLjggMC00LS4xLTggMC0xMiAwLTEuNC0uNC0yLTEuOC0yLjItNy0uOS0xMy45LTIuMi0yMC45LTIuOS03LS42LTE0LS4zLTIwLjggMS45LTYuNyAyLjItMTEuNyA2LjItMTMuNyAxMy4xLTEuNiA1LjQtMS42IDEwLjggLjEgMTYuMiAxLjYgNS41IDUuMiA5LjIgMTAuNCAxMS4yek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zNjguNSAxMDMuOWMuNCAxLjcgLjkgMy40IDEuNiA1LjEgMTYuNSA0MC42IDMyLjkgODEuMyA0OS41IDEyMS45IDEuNCAzLjUgMS43IDYuNCAuMiA5LjktMi44IDYuMi00LjkgMTIuNi03LjggMTguNy0yLjYgNS41LTYuNyA5LjUtMTIuNyAxMS4yLTQuMiAxLjEtOC41IDEuMy0xMi45IC45LTIuMS0uMi00LjItLjctNi4zLS44LTIuOC0uMi00LjIgMS4xLTQuMyA0LS4xIDIuOC0uMSA1LjYgMCA4LjMgLjEgNC42IDEuNiA2LjcgNi4yIDcuNSA0LjcgLjggOS40IDEuNiAxNC4yIDEuNyAxNC4zIC4zIDI1LjctNS40IDMzLjEtMTcuOSAyLjktNC45IDUuNi0xMC4xIDcuNy0xNS40IDE5LjgtNTAuMSAzOS41LTEwMC4zIDU5LjItMTUwLjUgLjYtMS41IDEuMS0zIDEuMy00LjYgLjQtMi40LS43LTMuNi0zLjEtMy43LTUuNi0uMS0xMS4xIDAtMTYuNyAwLTMuMSAwLTUuMyAxLjQtNi40IDQuMy0uNCAxLjEtLjkgMi4zLTEuMyAzLjRsLTI5LjEgODMuN2MtMi4xIDYuMS00LjIgMTIuMS02LjUgMTguNi0uNC0uOS0uNi0xLjQtLjgtMS45LTEwLjgtMjkuOS0yMS42LTU5LjktMzIuNC04OS44LTEuNy00LjctMy41LTkuNS01LjMtMTQuMi0uOS0yLjUtMi43LTQtNS40LTQtNi40LS4xLTEyLjgtLjItMTkuMi0uMS0yLjIgMC0zLjMgMS42LTIuOCAzLjd6TTI0Mi40IDIwNmMxLjcgMTEuNyA3LjYgMjAuOCAxOCAyNi42IDkuOSA1LjUgMjAuNyA2LjIgMzEuNyA0LjYgMTIuNy0xLjkgMjMuOS03LjMgMzMuOC0xNS41IC40LS4zIC44LS42IDEuNC0xIC41IDMuMiAuOSA2LjIgMS41IDkuMiAuNSAyLjYgMi4xIDQuMyA0LjUgNC40IDQuNiAuMSA5LjEgLjEgMTMuNyAwIDIuMy0uMSAzLjgtMS42IDQtMy45IC4xLS44IC4xLTEuNiAuMS0yLjNsMC04OC44YzAtMy42LS4yLTcuMi0uNy0xMC44LTEuNi0xMC44LTYuMi0xOS43LTE1LjktMjUuNC01LjYtMy4zLTExLjgtNS0xOC4yLTUuOS0zLS40LTYtLjctOS4xLTEuMWwtMTAgMGMtLjggLjEtMS42IC4zLTIuNSAuMy04LjIgLjQtMTYuMyAxLjQtMjQuMiAzLjUtNS4xIDEuMy0xMCAzLjItMTUgNC45LTMgMS00LjUgMy4yLTQuNCA2LjUgLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjEgMS44IDUuMiA1LjcgNC4xIDYuNS0xLjcgMTMuMS0zLjUgMTkuNy00LjggMTAuMy0xLjkgMjAuNy0yLjcgMzEuMS0xLjIgNS40IC44IDEwLjUgMi40IDE0LjEgNyAzLjEgNCA0LjIgOC44IDQuNCAxMy43IC4zIDYuOSAuMiAxMy45IC4zIDIwLjggMCAuNC0uMSAuNy0uMiAxLjItLjQgMC0uOCAwLTEuMS0uMS04LjgtMi4xLTE3LjctMy42LTI2LjgtNC4xLTkuNS0uNS0xOC45IC4xLTI3LjkgMy4yLTEwLjggMy44LTE5LjUgMTAuMy0yNC42IDIwLjgtNC4xIDguMy00LjYgMTctMy40IDI1Ljh6TTk4LjcgMTA2LjlsMCAxNzUuM2MwIC44IDAgMS43IC4xIDIuNSAuMiAyLjUgMS43IDQuMSA0LjEgNC4yIDUuOSAuMSAxMS44IC4xIDE3LjcgMCAyLjUgMCA0LTEuNyA0LjEtNC4xIC4xLS44IC4xLTEuNyAuMS0yLjVsMC02MC43Yy45IC43IDEuNCAxLjIgMS45IDEuNiAxNSAxMi41IDMyLjIgMTYuNiA1MS4xIDEyLjkgMTcuMS0zLjQgMjguOS0xMy45IDM2LjctMjkuMiA1LjgtMTEuNiA4LjMtMjQuMSA4LjctMzcgLjUtMTQuMy0xLTI4LjQtNi44LTQxLjctNy4xLTE2LjQtMTguOS0yNy4zLTM2LjctMzAuOS0yLjctLjYtNS41LS44LTguMi0xLjJsLTcgMGMtMS4yIC4yLTIuNCAuMy0zLjYgLjUtMTEuNyAxLjQtMjIuMyA1LjgtMzEuOCAxMi43LTIgMS40LTMuOSAzLTUuOSA0LjUtLjEtLjUtLjMtLjgtLjQtMS4yLS40LTIuMy0uNy00LjYtMS4xLTYuOS0uNi0zLjktMi41LTUuNS02LjQtNS42bC05LjcgMGMtNS45LS4xLTYuOSAxLTYuOSA2Ljh6TTQ5My42IDMzOWMtMi43LS43LTUuMSAwLTcuNiAxLTQzLjkgMTguNC04OS41IDMwLjItMTM2LjggMzUuOC0xNC41IDEuNy0yOS4xIDIuOC00My43IDMuMi0yNi42IC43LTUzLjItLjgtNzkuNi00LjMtMTcuOC0yLjQtMzUuNS01LjctNTMtOS45LTM3LTguOS03Mi43LTIxLjctMTA2LjctMzguOC04LjgtNC40LTE3LjQtOS4zLTI2LjEtMTQtMy44LTIuMS02LjItMS41LTguMiAyLjFsMCAxLjdjMS4yIDEuNiAyLjIgMy40IDMuNyA0LjggMzYgMzIuMiA3Ni42IDU2LjUgMTIyIDcyLjkgMjEuOSA3LjkgNDQuNCAxMy43IDY3LjMgMTcuNSAxNCAyLjMgMjggMy44IDQyLjIgNC41IDMgLjEgNiAuMiA5IC40IC43IDAgMS40IC4yIDIuMSAuM2wxNy43IDBjLjctLjEgMS40LS4zIDIuMS0uMyAxNC45LS40IDI5LjgtMS44IDQ0LjYtNCAyMS40LTMuMiA0Mi40LTguMSA2Mi45LTE0LjcgMjkuNi05LjYgNTcuNy0yMi40IDgzLjQtNDAuMSAyLjgtMS45IDUuNy0zLjggOC02LjIgNC4zLTQuNCAyLjMtMTAuNC0zLjMtMTEuOXpNNTQ0IDMxMS4zYy0uOC00LjItNC01LjgtNy42LTctNS43LTEuOS0xMS42LTIuOC0xNy42LTMuMy0xMS0uOS0yMi0uNC0zMi44IDEuNi0xMiAyLjItMjMuNCA2LjEtMzMuNSAxMy4xLTEuMiAuOC0yLjQgMS44LTMuMSAzLS42IC45LS43IDIuMy0uNSAzLjQgLjMgMS4zIDEuNyAxLjYgMyAxLjUgLjYgMCAxLjIgMCAxLjgtLjFsMTkuNS0yLjFjOS42LS45IDE5LjItMS41IDI4LjgtLjggNC4xIC4zIDguMSAxLjIgMTIgMi4yIDQuMyAxLjEgNi4yIDQuNCA2LjQgOC43IC4zIDYuNy0xLjIgMTMuMS0yLjkgMTkuNS0zLjUgMTIuOS04LjMgMjUuNC0xMy4zIDM3LjgtLjMgLjgtLjcgMS43LS44IDIuNS0uNCAyLjUgMSA0IDMuNCAzLjUgMS40LS4zIDMtMS4xIDQtMi4xIDMuNy0zLjYgNy41LTcuMiAxMC42LTExLjIgMTAuNy0xMy44IDE3LTI5LjYgMjAuNy00Ni42IC43LTMgMS4yLTYuMSAxLjctOS4xIC4yLTQuNyAuMi05LjYgLjItMTQuNXoiXX0sUzdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImViYXkiLGljb246WzY0MCw1MTIsW10sImY0ZjQiLCJNNjA2LjUgMTg5LjVsLTU0LjggMTA5LjktNTQuOS0xMDkuOS0zNy41IDAgMTAuOSAyMC42Yy0xMS41LTE5LTM1LjktMjYtNjMuMy0yNi0zMS44IDAtNjcuOSA4LjctNzEuNSA0My4xbDMzLjcgMGMxLjQtMTMuOCAxNS43LTIxLjggMzUtMjEuOCAyNiAwIDQxIDkuNiA0MSAzM2wwIDMuNGMtMTIuNyAwLTI4IC4xLTQxLjcgLjQtNDIuNCAuOS02OS42IDEwLTc2LjcgMzQuNCAxLTUuMiAxLjUtMTAuNiAxLjUtMTYuMiAwLTUyLjEtMzkuNy03Ni4yLTc1LjQtNzYuMi0yMS4zIDAtNDMgNS41LTU4LjcgMjQuMmwwLTgwLjYtMzIuMSAwIDAgMTY5LjVjMCAxMC4zLS42IDIyLjktMS4xIDMzLjFsMzEuNSAwYy43LTYuMyAxLjEtMTIuOSAxLjEtMTkuNSAxMy42IDE2LjYgMzUuNCAyNC45IDU4LjcgMjQuOSAzNi45IDAgNjQuOS0yMS45IDczLjMtNTQuMi0uNSAyLjgtLjcgNS44LS43IDkgMCAyNC4xIDIxLjEgNDUgNjAuNiA0NSAyNi42IDAgNDUuOC01LjcgNjEuOS0yNS41IDAgNi42IC4zIDEzLjMgMS4xIDIwLjJsMjkuOCAwYy0uNy04LjItMS0xNy41LTEtMjYuOGwwLTY1LjZjMC05LjMtMS43LTE3LjItNC44LTIzLjhsNjEuNSAxMTYuMS0yOC41IDU0LjEgMzUuOSAwIDk5LjItMTk0LjgtMzQgMHpNMjQ0LjIgMzEzLjhjLTI5LjYgMC01MC4yLTIxLjUtNTAuMi01My44IDAtMzIuNCAyMC42LTUzLjggNTAuMi01My44IDI5LjggMCA1MC4yIDIxLjQgNTAuMiA1My44IDAgMzIuMy0yMC40IDUzLjgtNTAuMiA1My44em0yMDAuOS00Ny4zYzAgMzAtMTcuOSA0OC40LTUxLjYgNDguNC0yNS4xIDAtMzUtMTMuNC0zNS0yNS44IDAtMTkuMSAxOC4xLTI0LjQgNDcuMi0yNS4zIDEzLjEtLjUgMjcuNi0uNiAzOS40LS42bDAgMy4zek0zMy4yIDI2OC4xbDEyOC44IDAgMC04LjVjMC01MS43LTMzLjEtNzUuNC03OC40LTc1LjQtNTYuOCAwLTgzIDMwLjgtODMgNzcuNiAwIDQyLjUgMjUuMyA3NCA4Mi41IDc0IDMxLjQgMCA2OC0xMS43IDc0LjQtNDYuMWwtMzMuMSAwYy0xMiAzNS44LTg3LjcgMzYuNy05MS4yLTIxLjZ6bTk1LTIxLjRsLTk0LjQgMGM2LjktNTYuNiA5Mi4xLTU0LjcgOTQuNCAweiJdfSxDN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY29udGFvIixpY29uOls1MTIsNTEyLFtdLCJmMjZkIiwiTTQ1LjQgMzA1YzE0LjQgNjcuMSAyNi40IDEyOSA2OC4yIDE3NUwzNCA0ODBjLTE4LjcgMC0zNC0xNS4yLTM0LTM0TDAgNjZDMCA0Ny4zIDE1LjIgMzIgMzQgMzJsNTcuNyAwYy0xMy44IDEyLjYtMjYuMSAyNy4yLTM2LjkgNDMuNi00NS40IDcwLTI3IDE0Ni44LTkuNCAyMjkuNHpNNDc4IDMybC05MC4yIDBjMjEuNCAyMS40IDM5LjIgNDkuNSA1Mi43IDg0LjFMMzAzLjQgMTQ1LjRjLTE0LjktMjktMzcuOC01My4zLTgyLjYtNDMuOS0yNC42IDUuMy00MSAxOS4zLTQ4LjMgMzQuNi04LjggMTguNy0xMy4yIDM5LjggOC4yIDE0MC4zIDIxLjEgMTAwLjIgMzMuNyAxMTcuNyA0OS41IDEzMS4yIDEyLjkgMTEuMSAzMy40IDE3IDU4LjMgMTEuNyA0NC41LTkuNCA1NS43LTQwLjcgNTcuNC03My4ybDEzNy40LTI5LjZjMy4yIDcxLjUtMTguNyAxMjUuMi01Ny40IDE2My42bDUyLjEgMGMxOC43IDAgMzQtMTUuMiAzNC0zNEw1MTIgNjZjMC0xOC44LTE1LjItMzQtMzQtMzR6Il19LF83ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbGxvIixpY29uOls1MTIsNTEyLFtdLCJmNWYxIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzk5LjggMjkzLjJDMzgzLjMgMzU4LjUgMzIzLjggNDA0LjggMjU2IDQwNC44UzEyOC43IDM1OC41IDExMi4yIDI5My4yYy0xLjYtNy40IDIuNS0xNS43IDkuOS0xNy40czE1LjcgMi41IDE3LjQgOS45YzE0IDUyLjkgNjIgOTAuMSAxMTYuNiA5MC4xczEwMi41LTM3LjIgMTE2LjYtOTAuMWMxLjctNy40IDkuOS0xMi40IDE3LjQtOS45IDcuNCAxLjcgMTIuNCA5LjkgOS45IDE3LjR6Il19LFQ3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaXN0cml4IixpY29uOls0NDgsNTEyLFtdLCJmM2VlIiwiTTQ0OCA0NDlMMzAxLjIgMzAwLjJjMjAtMjcuOSAzMS45LTYyLjIgMzEuOS05OS4yIDAtOTMuMS03NC43LTE2OC45LTE2Ni41LTE2OC45LTkxLjktLjEtMTY2LjYgNzUuNy0xNjYuNiAxNjguOFM3NC43IDM2OS44IDE2Ni41IDM2OS44YzM5LjggMCA3Ni4zLTE0LjIgMTA1LTM3LjlMNDE3LjUgNDgwIDQ0OCA0NDl6TTE2Ni41IDMzMC44Yy03MC42IDAtMTI4LjEtNTguMy0xMjguMS0xMjkuOVM5NS45IDcxIDE2Ni41IDcxIDI5NC42IDEyOS4zIDI5NC42IDIwMC45IDIzNy4yIDMzMC44IDE2Ni41IDMzMC44eiJdfSxMN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGVyaXNjb3BlIixpY29uOls0NDgsNTEyLFtdLCJmM2RhIiwiTTM3MCA2My42Yy0zOC42LTQxLTg5LjUtNjMuNi0xNDMuNC02My42LTExNC43IDAtMjA4LjEgOTYuMi0yMDguMSAyMTQuNCAwIDc1LjEgNTcuOCAxNTkuOCA4Mi43IDE5Mi43IDM2LjYgNDguNCA5MS40IDEwNC45IDEyNS40IDEwNC45IDQxLjYgMCAxMTIuOS05NC4yIDEyMC45LTEwNSAyNC42LTMzLjEgODItMTE4LjMgODItMTkyLjYgMC01Ni41LTIxLjEtMTEwLjEtNTkuNS0xNTAuOHpNMjI2LjYgNDkzLjljLTQyLjUgMC0xOTAtMTY3LjMtMTkwLTI3OS40IDAtMTA3LjQgODMuOS0xOTYuMyAxOTAtMTk2LjMgMTAwLjggMCAxODQuNyA4OSAxODQuNyAxOTYuMyAuMSAxMTIuMS0xNDcuNCAyNzkuNC0xODQuNyAyNzkuNHpNMzM4IDIwNi44YzAgNTkuMS01MS4xIDEwOS43LTExMC44IDEwOS43LTEwMC42IDAtMTUwLjctMTA4LjItOTIuOS0xODEuOGwwIC40YzAgMjQuNSAyMC4xIDQ0LjQgNDQuOCA0NC40czQ0LjgtMTkuOSA0NC44LTQ0LjRjMC0xOC4yLTExLjEtMzMuOC0yNi45LTQwLjcgNzYuNi0xOS4yIDE0MSAzOS4zIDE0MSAxMTIuNHoiXX0sJDdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImV4cGVkaXRlZHNzbCIsaWNvbjpbNTEyLDUxMixbXSwiZjIzZSIsIk0yNTYgNDMuNGEyMTIuNiAyMTIuNiAwIDEgMCAwIDQyNS4yIDIxMi42IDIxMi42IDAgMSAwIDAtNDI1LjJ6TTE1OC42IDE3Ni4zYzAtNTMuNyA0My43LTk3LjQgOTcuNC05Ny40czk3LjQgNDMuNyA5Ny40IDk3LjRsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjZjMC04Mi4xLTEyNC04Mi4xLTEyNCAwbDAgMjYuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi42IC4yIDB6TTM5Ny43IDM4MGMwIDkuNy04IDE3LjctMTcuNyAxNy43bC0yNDggMGMtOS43IDAtMTcuNy04LTE3LjctMTcuN2wwLTE0MS43YzAtOS43IDgtMTcuNyAxNy43LTE3LjdsMjQ4IDBjOS43IDAgMTcuNyA4IDE3LjcgMTcuN2wwIDE0MS43em0tMjQ4LTEzNy4zbDAgMTMyLjljMCAyLjUtMS45IDQuNC00LjQgNC40bC04LjkgMGMtMi41IDAtNC40LTEuOS00LjQtNC40bDAtMTMyLjljMC0yLjUgMS45LTQuNCA0LjQtNC40bDguOSAwYzIuNSAwIDQuNCAxLjkgNC40IDQuNHptMTQxLjcgNDguN2MwIDEzLTcuMiAyNC40LTE3LjcgMzAuNGwwIDMxLjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMzEuNmMtMTAuNS02LjEtMTcuNy0xNy40LTE3LjctMzAuNCAwLTE5LjcgMTUuOC0zNS40IDM1LjQtMzUuNHMzNS41IDE1LjggMzUuNSAzNS40ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTcuN2EyMzAuMyAyMzAuMyAwIDEgMSAwIDQ2MC42IDIzMC4zIDIzMC4zIDAgMSAxIDAtNDYwLjZ6Il19LEE3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJuYXBzdGVyIixpY29uOls1MTIsNTEyLFtdLCJmM2QyIiwiTTMwNi4zIDM3My42Yy0xNC4yIDEzLjYtMzEuMyAyNC4xLTUwLjQgMzAuNS0xOS02LjQtMzYuMi0xNi45LTUwLjMtMzAuNWwxMDAuNyAwem00NC0xOTkuNmMyMC0xNi45IDQzLjYtMjkuMiA2OS42LTM2LjJsMCAxNjEuMmMwIDIxOS40LTMyOCAyMTcuNi0zMjggLjNsMC0xNjEuNmMyNS45IDYuOSA0OS42IDE5LjYgNjkuNSAzNi40IDU2LjgtNDAgMTMyLjUtMzkuOSAxODguOS0uMXpNMTQxLjUgMTE1LjVjNjQuNC02MCAxNjQuMy02MC4xIDIyOC45LS4yLTcuMSAzLjUtMTMuOSA3LjMtMjAuNiAxMS41LTU4LjctMzAuNS0xMjkuMi0zMC40LTE4Ny45IC4xLTYuMy00LTEzLjktOC4yLTIwLjQtMTEuNHpNNTEuOCA5My4ybDAgNjkuM2MtNTguNCAzNi41LTU4LjQgMTIxLjEgLjEgMTU4LjMgMjYuNCAyNDUuMSAzODEuNyAyNDAuMyA0MDcuNiAxLjVsLjMtMS43YzU4LjctMzYuMyA1OC45LTEyMS43IC4yLTE1OC4ybDAtNjkuMmMtMTcuMyAuNS0zNCAzLTUwLjEgNy40LTgyLTkxLjUtMjI1LjUtOTEuNS0zMDcuNSAuMS0xNi4zLTQuNC0zMy4xLTctNTAuNi03LjV6TTI2Ny4yIDM1MnMzNi0uMyA2MS4zLTEuNWMxMC4yLS41IDIxLjEtNCAyNS41LTYuNSAyNi4zLTE1LjEgMjUuNC0zOS4yIDI2LjItNDcuNC03OS41LS42LTk5LjktMy45LTExMyA1NS40ek0xMzEuNyAyOTYuN2MuOCA4LjItLjEgMzIuMyAyNi4yIDQ3LjQgNC40IDIuNSAxNS4yIDYgMjUuNSA2LjUgMjUuMyAxLjEgNjEuMyAxLjUgNjEuMyAxLjUtMTMuMi01OS40LTMzLjctNTYuMS0xMTMtNTUuNHpNMzAwLjggNDIwLjFjLTMuMi01LjMtNi45LTcuMy02LjktNy4zLTI0LjggNy4zLTUyLjIgNi45LTc1LjkgMCAwIDAtMi45IDEuNS02LjQgNi42LTIuOCA0LjEtMy43IDkuNi0zLjcgOS42IDI5LjEgMTcuNiA2Ny4xIDE3LjYgOTYuMiAwLS4xLS4xLS4zLTQtMy4zLTguOXoiXX0sRDdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRlbGljaW91cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjFhNSIsIk00NDYuNiA2OGMtLjQtMS41LS45LTMtMS40LTQuNS0uOS0yLjUtMi00LjgtMy4zLTcuMS0xLjQtMi40LTMtNC44LTQuNy02LjktMi4xLTIuNS00LjQtNC44LTYuOS02LjgtMS4xLS45LTIuMi0xLjctMy4zLTIuNS0xLjMtLjktMi42LTEuNy00LTIuNC0xLjgtMS0zLjYtMS44LTUuNS0yLjUtMS43LS43LTMuNS0xLjMtNS40LTEuNy0zLjgtMS03LjktMS41LTEyLTEuNWwtMzUyIDBDMjEuNiAzMiAuMSA1My41IC4xIDgwbDAgMzUyYzAgNC4xIC41IDguMiAxLjUgMTIgMiA3LjcgNS44IDE0LjYgMTEgMjAuMyAxIDEuMSAyLjEgMi4yIDMuMyAzLjMgNS43IDUuMiAxMi42IDkgMjAuMyAxMSAzLjggMSA3LjkgMS41IDEyIDEuNWwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1Mi4xYy0uMS00LjEtLjYtOC4yLTEuNi0xMnpNNDE2LjEgNDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC0xOTItMTkyIDAgMC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDE3NiAwIDAgMTkyIDE5MiAwIDAgMTc2eiJdfSxFN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3VpbGRlZCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA3ZSIsIk00NDMuOSA2NEw1IDY0YzAgMTAzLjMgMjIuMiAxODAuMSA0My40IDIyMi40IDY0LjEgMTI3LjggMTc2IDE2MS42IDE3Ny4zIDE2MS42IDU1LjctMjAuNSAxMDQuNS01Ni4zIDE0MC42LTEwMy41IDI1LjktMzMuOSA1My4xLTg3LjIgNjUuOS0xNDUuOGwtMjU5LjkgMGM0LjEgMzYuNCAyMi4yIDY3LjkgNDUuMSA4Ni45bDg4LjYgMGMtMTcgMjguMi00OC4yIDU0LjQtODAuNSA2OS41LTMxLjItMTMuMy02OS4xLTQ2LjUtOTYuNS05OC40LTI2LjctNTMuOC0yNy4xLTEwNS45LTI3LjEtMTA1LjlsMzM2LjEgMGM0LTI4LjggNS45LTU3LjkgNS45LTg2Ljl6Il19LFA3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvYnNpZGlhbiIsaWNvbjpbMzg0LDUxMixbXSwiZTg3OSIsIk0xNDIuMyAzMjAuM2MzNi4xLTguMiA3MC4zLTExIDEwMS4zIC43IDMxLjggMTEuOSA2MS43IDM5LjYgODYuNyA5Ni04LjEgMTcuNy0xMi40IDM2LjktMTQuNyA1My44LTMuMSAyMi45LTI1LjQgNDAuNy00Ny43IDM0LjYtMzEuNy04LjctNjguMy0yMi4zLTEwMS4zLTI0LjktNC40LS4zLTUwLjYtMy44LTUwLjYtMy44LTEuNy0uMS0zLjQtLjQtNS4xLS44IDMxLjUtNjQuMiAzOC4yLTExNS4xIDMxLjMtMTU1LjR6TTU1IDIxOS41YzIyLjMgMTQuOCA0OS41IDM3LjggNjQuMSA3My42IDE2LjEgMzkuNCAxNy44IDk1LjctMjEuNiAxNzYuMS0xLS44LTIuMS0xLjctMy0yLjdMNy40IDM3Ni44Yy05LjUtOS44LTEyLjEtMjQuNC02LjUtMzYuOSAuNi0xLjMgNDQuNi05OC4zIDU0LjEtMTIwLjR6bTI2NC4zLTkxLjNjNC45IDYuMiA3LjQgMTQgNy40IDIxLjkgLjEgMjAuOCAxLjggNjMuNiAxMy4zIDkxLjIgMTEuMiAyNi44IDMxLjggNTUuOCA0Mi41IDcwIDQuMSA1LjUgNC44IDEyLjkgMS4zIDE4LjctNy42IDEyLjgtMjIuNiAzNy41LTQzLjggNjkuMi0uMyAuNC0uNiAuOS0uOCAxLjMtMjUuMi01Mi4yLTU1LjktODAuNy05MC40LTkzLjYtOS42LTMuNi0xOS41LTYtMjkuNC03LjMtMTcuOC00NS44LTIzLjItNzkuNy0yMi0xMDYuNCAxLjItMjcuNCA5LjItNDcuOCAxOC4yLTY2LjMgOC45LTE4LjEgMTkuOC0zNS45IDI0LjktNTUuNyAzLjItMTIuNSA0LjItMjUuOCAxLjctNDAuOWw3Ny4xIDk4ek0xODQuMiAxNC4xYzEwLjMtOS4yIDI0LjYtMTAuOCAzNi4zLTUuNSA5LjYgMjQuNiA5LjcgNDIuOCA1LjYgNTguOC00LjYgMTcuOC0xNC4xIDMzLTIzLjkgNTIuOC05LjYgMTkuNS0xOC40IDQyLTE5LjcgNzIuMy0xLjIgMjcuOSA0LjEgNjEuOSAyMC40IDEwNS44LTIxLS42LTQyLjUgMi42LTYzLjcgNy40LTEuNy02LjQtMy44LTEyLjQtNi4xLTE4LjItMTcuMy00Mi4yLTQ5LjktNjcuOS03NC4xLTgzLjMgMy4xLTE4LjcgOC4yLTU1LjQgMTEuNi03Ny41IDEuMi03LjYgNC45LTE0LjYgMTAuNy0xOS44TDE4NC4yIDE0LjF6Il19LEk3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ4Ym94IixpY29uOls1MTIsNTEyLFtdLCJmNDEyIiwiTTM2OS45IDMxOC4yYzQ0LjMgNTQuMyA2NC43IDk4LjggNTQuNCAxMTguNy03LjkgMTUuMS01Ni43IDQ0LjYtOTIuNiA1NS45LTI5LjYgOS4zLTY4LjQgMTMuMy0xMDAuNCAxMC4yLTM4LjItMy43LTc2LjktMTcuNC0xMTAuMS0zOS0yNy45LTE4LjItMzQuMi0yNS43LTM0LjItNDAuNiAwLTI5LjkgMzIuOS04Mi4zIDg5LjItMTQyLjEgMzItMzMuOSA3Ni41LTczLjcgODEuNC03Mi42IDkuNCAyLjEgODQuMyA3NS4xIDExMi4zIDEwOS41ek0xODguNiAxNDMuOGMtMjkuNy0yNi45LTU4LjEtNTMuOS04Ni40LTYzLjQtMTUuMi01LjEtMTYuMy00LjgtMjguNyA4LjEtMjkuMiAzMC40LTUzLjUgNzkuNy02MC4zIDEyMi40LTUuNCAzNC4yLTYuMSA0My44LTQuMiA2MC41IDUuNiA1MC41IDE3LjMgODUuNCA0MC41IDEyMC45IDkuNSAxNC42IDEyLjEgMTcuMyA5LjMgOS45LTQuMi0xMS0uMy0zNy41IDkuNS02NCAxNC4zLTM5IDUzLjktMTEyLjkgMTIwLjMtMTk0LjR6bTMxMS42IDYzLjVjLTE2LjktODAtNjcuNS0xMzAuMy03NC42LTEzMC4zLTcuMyAwLTI0LjIgNi41LTM2IDEzLjktMjMuMyAxNC41LTQxIDMxLjQtNjQuMyA1Mi44IDQyLjQgNTMuMyAxMDIuMiAxMzkuNCAxMjIuOSAyMDIuMyA2LjggMjAuNyA5LjcgNDEuMSA3LjQgNTIuMy0xLjcgOC41LTEuNyA4LjUgMS40IDQuNiA2LjEtNy43IDE5LjktMzEuMyAyNS40LTQzLjUgNy40LTE2LjIgMTUtNDAuMiAxOC42LTU4LjcgNC4zLTIyLjUgMy45LTcwLjgtLjgtOTMuNHpNMTQxLjMgNDNjNDcuNy0yLjUgMTA5LjcgMzQuNSAxMTQuMyAzNS40IC43IC4xIDEwLjQtNC4yIDIxLjYtOS43IDYzLjktMzEuMSA5NC0yNS44IDEwNy40LTI1LjItNjMuOS0zOS4zLTE1Mi43LTUwLTIzMy45LTExLjctMjMuNCAxMS4xLTI0IDExLjktOS40IDExLjJ6Il19LE43ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bnRhcHBkIixpY29uOls2NDAsNTEyLFtdLCJmNDA1IiwiTTQwMS41IDQ5LjlDMzIxLjcgMjEwIDMxNi45IDIwMi40IDMxMy42IDIyMy4xbC01LjIgMzIuOGMtMS45IDEyLTYuNiAyMy41LTEzLjcgMzMuNEwxNDUuOCA0OTcuMWMtNy42IDEwLjYtMjAuNCAxNi4yLTMzLjQgMTQuNi00MC4zLTUtNzcuOC0zMi4yLTk1LjMtNjguNS01LjctMTEuOC00LjUtMjUuOCAzLjEtMzYuNEwxNjkuMSAxOTguOWM3LjEtOS45IDE2LjQtMTggMjcuMi0yMy43bDI5LjMtMTUuNWMxOC41LTkuOCA5LjctMTEuOSAxMzUuNi0xMzguOSAxLTQuOCAxLTcuMyAzLjYtOCAzLS43IDYuNi0xIDYuMy00LjZsLS40LTQuNmMtLjItMS45IDEuMy0zLjYgMy4yLTMuNiA0LjUtLjEgMTMuMiAxLjIgMjUuNiAxMCAxMi4zIDguOSAxNi40IDE2LjggMTcuNyAyMS4xIC42IDEuOC0uNiAzLjctMi40IDQuMmwtNC41IDEuMWMtMy40IC45LTIuNSA0LjQtMi4zIDcuNCAuMSAyLjgtMi4zIDMuNi02LjUgNi4xek0yMzAuMyAzNi40YzMuNCAuOSAyLjUgNC40IDIuMyA3LjQtLjIgMi43IDIuMSAzLjUgNi40IDYgNy45IDE1LjkgMTUuMyAzMC41IDIyLjIgNDQgLjcgMS4zIDIuMyAxLjUgMy4zIC41IDExLjItMTIgMjQuNi0yNi4yIDQwLjUtNDIuNiAxLjMtMS40IDEuNC0zLjUgLjEtNC45LTgtOC4yLTE2LjUtMTYuOS0yNS42LTI2LjEtMS00LjctMS03LjMtMy42LTgtMy0uOC02LjYtMS02LjMtNC42IC4zLTMuMyAxLjQtOC4xLTIuOC04LjItNC41LS4xLTEzLjIgMS4xLTI1LjYgMTAtMTIuMyA4LjktMTYuNCAxNi44LTE3LjcgMjEuMS0xLjQgNC4yIDMuNiA0LjYgNi44IDUuNHpNNjIwLjIgNDA2LjdMNDcxLjQgMTk4LjhjLTEzLjItMTguNS0yNi42LTIzLjQtNTYuNC0zOS4xLTExLjItNS45LTE0LjItMTAuOS0zMC41LTI4LjktMS0xLjEtMi45LS45LTMuNiAuNS00Ni4zIDg4LjgtNDcuMSA4Mi44LTQ5IDk0LjgtMS43IDEwLjctMS4zIDIwIC4zIDI5LjggMS45IDEyIDYuNiAyMy41IDEzLjcgMzMuNEw0OTQuOCA0OTcuMmM3LjYgMTAuNiAyMC4yIDE2LjIgMzMuMSAxNC43IDQwLjMtNC45IDc4LTMyIDk1LjctNjguNiA1LjQtMTEuOSA0LjMtMjUuOS0zLjQtMzYuNnoiXX0sRjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2dsZS1wbHVzLWciLGljb246WzY0MCw1MTIsW10sImYwZDUiLCJNMzg2LjMgMjI4LjVjMS44IDkuNyAzLjEgMTkuNCAzLjEgMzIgMCAxMDkuOC03My42IDE4Ny41LTE4NC40IDE4Ny41LTEwNi4xIDAtMTkyLTg1LjktMTkyLTE5MlM5OC45IDY0IDIwNSA2NGM1MS45IDAgOTUuMSAxOC45IDEyOC42IDUwLjNsLTUyLjEgNTBjLTE0LjEtMTMuNi0zOS0yOS42LTc2LjUtMjkuNi02NS41IDAtMTE4LjkgNTQuMi0xMTguOSAxMjEuM1MxMzkuNSAzNzcuMyAyMDUgMzc3LjNjNzYgMCAxMDQuNS01NC43IDEwOS04Mi44bC0xMDkgMCAwLTY2IDE4MS4zIDAgMCAwem0xODUuNCA2LjRsMC01NS43LTU2IDAgMCA1NS43LTU1LjcgMCAwIDU2IDU1LjcgMCAwIDU1LjcgNTYgMCAwLTU1LjcgNTUuNyAwIDAtNTYtNTUuNyAweiJdfSxPN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2l0aHViLWFsdCIsaWNvbjpbNTEyLDUxMixbXSwiZjExMyIsIk0yMDIuMSAzMjguN2MwIDIwLjktMTAuOSA1NS4xLTM2LjcgNTUuMXMtMzYuNy0zNC4yLTM2LjctNTUuMSAxMC45LTU1LjEgMzYuNy01NS4xIDM2LjcgMzQuMiAzNi43IDU1LjF6TTQ5NiAyNzguMmMwIDMxLjktMy4yIDY1LjctMTcuNSA5NS0zNy45IDc2LjYtMTQyLjEgNzQuOC0yMTYuNyA3NC44LTc1LjggMC0xODYuMiAyLjctMjI1LjYtNzQuOC0xNC42LTI5LTIwLjItNjMuMS0yMC4yLTk1IDAtNDEuOSAxMy45LTgxLjUgNDEuNS0xMTMuNi01LjItMTUuOC03LjctMzIuNC03LjctNDguOCAwLTIxLjUgNC45LTMyLjMgMTQuNi01MS44IDQ1LjMgMCA3NC4zIDkgMTA4LjggMzYgMjktNi45IDU4LjgtMTAgODguNy0xMCAyNyAwIDU0LjIgMi45IDgwLjQgOS4yIDM0LTI2LjcgNjMtMzUuMiAxMDcuOC0zNS4yIDkuOCAxOS41IDE0LjYgMzAuMyAxNC42IDUxLjggMCAxNi40LTIuNiAzMi43LTcuNyA0OC4yIDI3LjUgMzIuNCAzOSA3Mi4zIDM5IDExNC4yem0tNjQuMyA1MC41YzAtNDMuOS0yNi43LTgyLjYtNzMuNS04Mi42LTE4LjkgMC0zNyAzLjQtNTYgNi0xNC45IDIuMy0yOS44IDMuMi00NS4xIDMuMi0xNS4yIDAtMzAuMS0uOS00NS4xLTMuMi0xOC43LTIuNi0zNy02LTU2LTYtNDYuOCAwLTczLjUgMzguNy03My41IDgyLjYgMCA4Ny44IDgwLjQgMTAxLjMgMTUwLjQgMTAxLjNsNDguMiAwYzcwLjMgMCAxNTAuNi0xMy40IDE1MC42LTEwMS4zem0tODIuNi01NS4xYy0yNS44IDAtMzYuNyAzNC4yLTM2LjcgNTUuMXMxMC45IDU1LjEgMzYuNyA1NS4xIDM2LjctMzQuMiAzNi43LTU1LjEtMTAuOS01NS4xLTM2LjctNTUuMXoiXX0sUjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdldC1wb2NrZXQiLGljb246WzQ0OCw1MTIsW10sImYyNjUiLCJNNDA3LjYgNjRsLTM2NyAwQzE4LjUgNjQgMCA4Mi41IDAgMTA0LjZMMCAyMzkuOEMwIDM2NC41IDk5LjcgNDY0IDIyNC4yIDQ2NCAzNDguMiA0NjQgNDQ4IDM2NC41IDQ0OCAyMzkuOGwwLTEzNS4yQzQ0OCA4Mi4yIDQzMC4zIDY0IDQwNy42IDY0em0tMTYyIDI2OC41Yy0xMi40IDExLjgtMzEuNCAxMS4xLTQyLjQgMC0xMTMuNy0xMDguOS0xMTQuOS0xMDUuMS0xMTQuOS0xMjMuMiAwLTE2LjkgMTMuOC0zMC43IDMwLjctMzAuNyAxNyAwIDE2LjEgMy44IDEwNS4yIDg5LjMgOTAuNi04Ni45IDg4LjYtODkuMyAxMDUuNS04OS4zczMwLjcgMTMuOCAzMC43IDMwLjdjMCAxNy44LTIuOSAxNS43LTExNC44IDEyMy4yeiJdfSxCN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2xpZGUiLGljb246WzQ0OCw1MTIsW10sImYyYTUiLCJNMjUyLjggMTQ4LjZjMCA4LjgtMS42IDE3LjctMy40IDI2LjQtNS44IDI3LjgtMTEuNiA1NS44LTE3LjMgODMuNi0xLjQgNi4zLTguMyA0LjktMTMuNyA0LjktMjMuOCAwLTMwLjUtMjYtMzAuNS00NS41IDAtMjkuMyAxMS4yLTY4LjEgMzguNS04My4xIDQuMy0yLjUgOS4yLTQuMiAxNC4xLTQuMiAxMS40IDAgMTIuMyA4LjMgMTIuMyAxNy45ek00NDggODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zODQgMjY3YzAtNS4xLTIwLjgtMzcuNy0yNS41LTM5LjUtMi4yLS45LTcuMi0yLjMtOS42LTIuMy0yMy4xIDAtMzguNyAxMC41LTU4LjIgMjEuNWwtLjUtLjVjNC4zLTI5LjQgMTQuNi01Ny4yIDE0LjYtODcuNCAwLTQ0LjYtMjMuOC02Mi43LTY3LjUtNjIuNy03MS43IDAtMTA4IDcwLjgtMTA4IDEyMy41IDAgNTQuNyAzMiA4NSA4Ni4zIDg1IDcuNSAwIDYuOS0uNiA2LjkgMi4zLTEwLjUgODAuMy01Ni41IDgyLjktNTYuNSA1OC45IDAtMjQuNCAyOC0zNi41IDI4LjMtMzgtLjItNy42LTI5LjMtMTcuMi0zNi43LTE3LjItMjEuMSAwLTMyLjcgMzMtMzIuNyA1MC42IDAgMzIuMyAyMC40IDU0LjcgNTMuMyA1NC43IDQ4LjIgMCA4My40LTQ5LjcgOTQuMy05MS43IDkuNC0zNy43IDctMzkuNCAxMi4zLTQyLjEgMjAtMTAuMSAzNS44LTE2LjggNTguNC0xNi44IDExLjEgMCAxOSAyLjMgMzYuNyA1LjIgMS44IC4xIDQuMS0xLjcgNC4xLTMuNXoiXX0sSDdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJpdHkiLGljb246WzUxMiw1MTIsW10sImYzN2EiLCJNODYuNSA2Ny4yYzk1LjQtODkuMiAyNDYuMS05MS4yIDM0My4xIDMuOCAxNC4zIDE0LjEtNi40IDM3LjEtMjIuNCAyMS41LTg0LjgtODIuNC0yMTUuOC04MC4zLTI5OC45LTMuMi0xNi4zIDE1LjEtMzYuNS04LjMtMjEuOC0yMi4xem05OC45IDQxOC42YzE5LjMgNS43IDI5LjMtMjMuNiA3LjktMzAtMTEyLjItMzMuOS0xNzUuOC0xNDkuNy0xNDcuNS0yNjEgNS0xOS42LTI0LjktMjguMS0zMC4yLTcuMS0zMi4xIDEyNy40IDQxLjEgMjU5LjggMTY5LjggMjk4LjF6bTE0OC4xLTJjMTIxLjktNDAuMiAxOTIuOS0xNjYuOSAxNjQuNC0yOTEtNC41LTE5LjctMzQuOS0xMy44LTMwIDcuOSAyNC4yIDEwNy43LTM3LjEgMjE3LjktMTQzLjIgMjUzLjQtMjEuMiA3LTEwLjQgMzYgOC44IDI5Ljd6bS02Mi45LTc5bC4yLTcxLjhjMC04LjItNi42LTE0LjgtMTQuOC0xNC44cy0xNC44IDYuNy0xNC44IDE0LjhsLS4yIDcxLjhjMCA4LjIgNi42IDE0LjggMTQuOCAxNC44czE0LjgtNi42IDE0LjgtMTQuOHptNzEtMjY5YzIuMSA5MC45IDQuNyAxMzEuOS04NS41IDEzMi41LTkyLjUtLjctODYuOS00NC4zLTg1LjUtMTMyLjUgMC0yMS44LTMyLjUtMTkuNi0zMi41IDBsMCA3MS42YzAgNjkuMyA2MC43IDkwLjkgMTE4IDkwLjEgNTcuMyAuOCAxMTgtMjAuOCAxMTgtOTAuMWwwLTcxLjZjMC0xOS42LTMyLjUtMjEuOC0zMi41IDB6Il19LHE3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3cGV4cGxvcmVyIixpY29uOls1MTIsNTEyLFtdLCJmMmRlIiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTQ4MCAwYTIyNCAyMjQgMCAxIDAgLTQ0OCAwIDIyNCAyMjQgMCAxIDAgNDQ4IDB6TTE2MC45IDEyNC42bDg2LjkgMzcuMS0zNy4xIDg2LjktODYuOS0zNy4xIDM3LjEtODYuOXptMTEwIDE2OS4xbDQ2LjYgOTQtMTQuNiAwLTUwLTEwMC00OC45IDEwMC0xNCAwIDUxLjEtMTA2LjktMjIuMy05LjQgNi0xNCA2OC42IDI5LjEtNiAxNC4zLTE2LjUtNy4xek0yNTkuMSAxNzcuNGw2OC42IDI5LjQtMjkuNCA2OC4zLTY4LjMtMjkuMSAyOS4xLTY4LjZ6bTgwLjMgNDIuOWw1NC42IDIzLjEtMjMuNCA1NC4zLTU0LjMtMjMuMSAyMy4xLTU0LjN6Il19LFY3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtZWdhcG9ydCIsaWNvbjpbNTEyLDUxMixbXSwiZjVhMyIsIk0yMjIuNSAyMDkuNmwwIDY2LjIgMzMuNSAzMy41IDMzLjMtMzMuMyAwLTY2LjQtMzMuNC0zMy40LTMzLjQgMzMuNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MDEuMSA0MjIuNGwtMjYuMSAxOS4yLTI2LTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy40IDMzLjQgMCA2NS41LTI2LjIgMTkuMi0yNi4xLTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy41IDMzLjQgMCA2NS41LTI2LjEgMTkuMi0yNi4xLTE5LjIgMC04NyA1OS41LTU5LjUgMC04Ny45IDU5LjUtNTkuNSAwLTc1LjYgMjYuMS0xOS4yIDI2LjEgMTkuMiAwIDc1LjYgNTkuNSA1OS41IDAgODcuNiA1OS43IDU5LjcgMCA4Ny4xLS4xIDB6Il19LGo3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsZWV0Y29kZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTg2YSIsIk0yMzUuNCA5LjNDMjQ2LjUtMi41IDI2NS4xLTMuMiAyNzcgNy45czEyLjUgMjkuOCAxLjQgNDEuNmwtNDMgNDZjMjEuNSAzLjMgNDIuMSAxMS44IDU5LjEgMjUuNmw3NC42IDYwLjNjMTIuNiAxMC4yIDE0LjYgMjguOCA0LjQgNDEuNHMtMjguNyAxNC42LTQxLjQgNC40bC03NC42LTYwLjNjLTI2LjItMjEuMS03MS45LTE4LjItOTQuNSA1LjlMODEgMjYxYy0yMS41IDIzLTE5LjEgNjAgNS42IDg0LjJsOTEuMiA4OS40YzI0LjkgMjQgNjUuNiAyNCA5MC4xLS40bDUxLjEtNTFjMTEuNS0xMS41IDMwLjEtMTEuNSA0MS42IC4xczExLjQgMzAuMi0uMSA0MS43bC01MS4xIDUxYy00Ny4xIDQ3LjEtMTI0IDQ3LjctMTcxLjkgMS42bC05Mi05MC4yQy0xLjQgMzQxLjMtNiAyNjcuOSAzOCAyMjAuN0wyMzUuNCA5LjN6TTQxMS43IDI3My4yYzE2LjIgMCAyOS40IDEzLjIgMjkuNCAyOS41cy0xMy4yIDI5LjUtMjkuNCAyOS41bC0yMTYuOSAwYy0xNi4yIDAtMjkuNC0xMy4yLTI5LjQtMjkuNXMxMy4yLTI5LjUgMjkuNC0yOS41bDIxNi45IDB6Il19LFU3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtZGIiLGljb246WzU3Niw1MTIsW10sImY4Y2EiLCJNMTcuNCAxNjAuNGwtMTAuNCAxOTEuNiA0My45IDAgNS42LTc5LjggMjcuOSA3OS44IDQ0LjcgMCAyNS41LTc3LjQgNC44IDc3LjQgNDUuNSAwLTEyLjgtMTkxLjYtNDUuNSAwLTQwLjcgMTE3LjMtNDIuMy0xMTcuMy00Ni4zIDB6bTI4MSAwbC00Ny45IDAgMCAxOTEuNiA0Ny45IDBzOTUgLjggOTQuMi05NS44Yy0uOC05NC4yLTk0LjItOTUuOC05NC4yLTk1LjhsMCAwem0tMS4yIDE0Ni41bDAtMTAyLjFzNDYgNC4zIDQ2LjggNTAuNi00Ni44IDUxLjUtNDYuOCA1MS41bDAgMHptMjM4LjMtNzQuMmM3LjItMTEuNCAxMC0yNSA4LTM4LjMtNS4zLTM1LjgtNTUuMS0zNC4zLTU1LjEtMzQuM2wtNTEuOSAwIDAgMTkxLjYgNDUuNSAwczg3IDQuOCA4Ny02My44YzAtNDMuMS0zMy41LTU1LjEtMzMuNS01NS4xbDAgMHptLTUxLjktMzEuOXMxMy42LTEuNiAxNiA5LjZjMS40IDYuNy00IDEyLTQgMTJsLTEyIDAgMC0yMS42em0tLjEgMTA5LjVsLjEtMjQuOSAwLTE4LjIgLjEgMHM0MS42LTQuNyA0MS4yIDIyLjRjLS4zIDI1LjctNDEuMyAyMC43LTQxLjMgMjAuN2wwIDB6Il19LFc3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYWdlNCIsaWNvbjpbNTEyLDUxMixbXSwiZjNkNyIsIk0yNTYgNTA0QzExOSA1MDQgOCAzOTMgOCAyNTZTMTE5IDggMjU2IDhjMjAuOSAwIDQxLjMgMi42IDYwLjcgNy41TDUwLjMgMzkyIDI1NiAzOTIgMjU2IDUwNHptMC0xNDMuNmwwLTIxMy42LTE0OS40IDIxMy42IDE0OS40IDB6TTM1MiAzOTJsMCA5Mi43YzQ1LjctMTkuMiA4NC41LTUxLjcgMTExLjQtOTIuN0wzNTIgMzkyem01Ny40LTEzOC4ybC0yMS4yIDguNCAyMS4yIDguMyAwLTE2Ljd6bS0yMC4zIDU0LjVjLTYuNyAwLTggNi4zLTggMTIuOWwwIDcuNyAxNi4yIDAgMC0xMGMwLTUuOS0yLjMtMTAuNi04LjItMTAuNnpNNTA0IDI1NmMwIDM3LjMtOC4yIDcyLjctMjMgMTA0LjRsLTEyOSAwIDAtMzMzLjFDNDQxLjMgNjQuOCA1MDQgMTUzLjEgNTA0IDI1NnpNMzY4LjQgMTQzLjZsNjguMiAwIDAtNDcuNi0xMy45IDAgMCAzMi42LTEzLjkgMCAwLTI5LjYtMTMuOSAwIDAgMjkuNi0xMi43IDAgMC0zMi42LTEzLjkgMCAwIDQ3LjYgLjEgMHptNjguMSAxODUuM2wtMjYuNSAwIDAtMTFjMC0xNS40LTUuNi0yNS4yLTIwLjktMjUuMi0xNS40IDAtMjAuNyAxMC42LTIwLjcgMjUuOWwwIDI1LjMgNjguMiAwIDAtMTUtLjEgMHptMC0xMDNsLTY4LjIgMjkuNyAwIDEyLjQgNjguMiAyOS41IDAtMTYuNi0xNC40LTUuNyAwLTI2LjUgMTQuNC01LjkgMC0xNi45em0tNC44LTY4LjVsLTM1LjYgMCAwIDI2LjYgMTMuOSAwIDAtMTIuMiAxMSAwYzguNiAxNS44IDEuMyAzNS4zLTE4LjYgMzUuMy0yMi41IDAtMjguMy0yNS4zLTE1LjUtMzcuN2wtMTEuNi0xMC42Yy0xNi4yIDE3LjUtMTIuMiA2My45IDI3LjEgNjMuOSAzNCAwIDQ0LjctMzUuOSAyOS4zLTY1LjN6Il19LEc3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0aGUtcmVkLXlldGkiLGljb246WzUxMiw1MTIsW10sImY2OWQiLCJNNDg4LjcgMjQxLjdsMjAuNyA3LjFjLTkuNi0yMy45LTIzLjktMzctMzEuNy00NC44bDcuMS0xOC4yYy4yIDAgMTIuMy0yNy44LTIuNS0zMC43LS42LTExLjMtNi42LTI3LTE4LjQtMjctNy42LTEwLjYtMTcuNy0xMi4zLTMwLjctNS45LTkuMSA0LjQtMTcuNiAxMC0yNS4zIDE2LjUtNS4zLTYuNC0zIC40LTMtMjkuOC0zNy4xLTI0LjMtNDUuNC0xMS43LTc0LjggM2wuNSAuNWMtMjItNy43LTQ1LjEtMTIuMi02OC40LTEzLjMtNS41LTguNy0xOC42LTE5LjEtMjUuMS0yNS4xbDI0LjggNy4xYy01LjUtNS41LTI2LjgtMTIuOS0zNC4yLTE1LjIgMTguMi00LjEgMjkuOC0yMC44IDQyLjUtMzMtMzQuOS0xMC4xLTY3LjktNS45LTk3LjkgMTEuOGwxMi00NC4yLTEuOC0uNWMtMzEuNiAyNC4yLTMzIDQxLjktMzMuNyA0NS41LS45LTIuNC02LjMtMTkuNi0xNS4yLTI3LTMuMyA4LjEtMy41IDE3LjEtLjUgMjUuMyAzIDguNCA1LjkgMTQuOCA4LjQgMTguOS0xNi0zLjMtMjguMy00LjktNDkuMiAwbC0zLjcgMCAzMyAxNC4zYy0yMC4yIDE4LjktMzYuMSA0MS45LTQ2LjcgNjcuNGwtMS43IDguNCAxLjcgMS43IDcuNi00LjdjLTMuMyAxMS42LTUuMyAxOS40LTYuNiAyNS44LTEwLjkgMTIuMi0yMC4yIDI1LjgtMjcuOCA0MC4zLTE1IDEtMzEuOCAxMC44LTQwLjMgMTQuM2wzIDMuNCAyOC44IDFjLS41IDEtLjcgMi4yLTEuMiAzLjItNy4zIDYuNC0zOS44IDM3LjctMzMgODAuN2wyMC4yLTIyLjRjLjUgMS43IC43IDMuNCAxLjIgNS4yIDAgMjUuNSAuNCA4OS42IDY0LjkgMTUwLjUgNDMuNiA0MCA5NiA2MC4yIDE1Ny41IDYwLjIgMTIxLjcgMCAyMjMtODcuMyAyMjMtMjExLjUgNi44LTkuNy0xLjIgMyAxNi43LTI1LjFsMTMgMTQuMyAyLjUtLjVjLTEuOC0xMS43LTQuOC0yMy4xLTguOS0zNC4yLTEuNS00LjgtMy44LTkuMy02LjgtMTMuM2wwIDB6TTM5OC41IDExMS4ybC0uNSAyMS45YzUuNSAxOC4xIDE2LjkgMTcuMiAyMi40IDE3LjJsLTMuNC00LjcgMjIuNC01LjRjLTkgLjUtMTggLjUtMjcgMCAxMi44LTIuMSAzMy4zLTI5IDQzLTExLjMgMy40IDcuNiA2LjQgMTcuMiA5LjMgMjcuOGwxLjctNS45Yy0xLjMtNS0xLjgtMTAuMS0xLjctMTUuMiA1LjQgLjUgOC44IDMuNCA5LjMgMTAuMSAuNSA2LjQgMS43IDE0LjggMy40IDI1LjNsNC43LTExLjNjNC42IDAgNC41LTMuNi0yLjUgMjAuNy0yMC45LTguNy0zNS4xLTguNC00Ni41LTguNGwxOC4yLTE2Yy0yNS4zIDguMi0zMyAxMC44LTU0LjggMjAuOS0xLjEtNS40LTUtMTMuNS0xNi0xOS45LTMuMiAzLjgtMi44IC45LS43IDE0LjhsLTIuNSAwYy0xLjItOC4yLTQuMS0xNi04LjQtMjMuMWw0LjItMy40YzguNC03LjEgMTEuOC0xNC4zIDEwLjYtMjEuOS0uNS02LjQtNS40LTEzLjUtMTMuNS0yMC43IDUuNi0zLjQgMTUuMi0uNCAyOC4zIDguNXptLTM5LjYtMTAuMWMyLjcgMS45IDExLjQgNS40IDE4LjkgMTcuMiA0LjIgOC40IDQgOS44IDMuNCAxMS4xLS41IDIuNC0uNSA0LjMtMyA3LjEtMS43IDIuNS01LjQgNC43LTExLjggNy42LTcuNi0xMy0xNi41LTIzLjYtMjcuOC0zMS4ybDIwLjMtMTEuOHptLTI2Ny40IDQybDEuMi0xLjdjMS4yLTIuOSA0LjItNy42IDkuMy0xNS4ybDIuNS0zLjQtMTMgMTIuMyA1LjQtNC43LTEwLjEgOS4zLTQuMiAxLjJjMTIuMy0yNC4xIDIzLjEtNDEuMyAzMi41LTUwLjIgOS4zLTkuMyAxNi0xNiAyMC4yLTE5LjRsLTYuNCAxLjJjLTExLjMtNC4yLTE5LjQtNy4xLTI0LjgtOC40IDIuNS0uNSAzLjctLjUgMy4yLS41IDEwLjMgMCAxNy41IC41IDIwLjkgMS4yIDUuMiAxLjcgMTAuNiAyLjUgMTYgMi41bC41LTEuNy04LjQtMzUuOCAxMy41IDI5YzIuOC00LjQgNC44LTkuMiA1LjktMTQuMyAxLjctNi40IDUuNC0xMyAxMC4xLTE5LjRzNy42LTEwLjYgOS4zLTExLjNjLTIuNiA4LjMtNC43IDE2LjgtNi40IDI1LjNsLTEuNyA3LjEtLjUgNC43IDIuNSAyLjVjMjEuOS0xMy41IDQ1LjUtMTkuNCA3MS4zLTE4LjlsMjEuMSAuNWMtMTEuOCAxMy41LTI3LjggMjEuOS00OC41IDI0LjgtNy43IDEuNC0xNS42IDIuNC0yMy40IDIuOWwtLjItLjUtMi41LTEuMmMtNC44LTEtOS43LS4zLTE0IDItMi41LS4yLTQuOS0uNS03LjEtLjdsLTIuNSAxLjcgLjUgMS4yYzIgLjIgMy45IC41IDYuMiAuN2wtMiAzLjQgMy40LS41LTEwLjYgMTEuM2MtNC4yIDMtNS40IDYuNC00LjIgOS4zbDUuNC0zLjQgMS4yIDBjNi4xLTguMiAxNS4yLTEzLjYgMjUuMy0xNS4ybDAtM2M2LjQgLjUgMTMgMSAxOS40IDEuMiA2LjQgMCA4LjQgLjUgNS40IDEuMiA3LjIgNCAxNC4xIDguNiAyMC43IDEzLjUgMTMuNSAxMC4xIDIzLjYgMjEuOSAzMCAzNS40IDguOCAxOC4yIDEzLjUgMzcuMSAxMy41IDU2LjYgMCA5LjUtMSAxOS0zIDI4LjMtMy41IDE1LjktOC45IDMxLjMtMTYgNDZsMi41IC41YzE4LjItMTkuNyA0MS45LTE2IDQ5LjItMTZsLTYuNCA1LjkgMjIuNCAxNy43LTEuNyAzMC43Yy01LjQtMTIuMy0xNi41LTIxLjEtMzMtMjcuOCAxNi41IDE0LjggMjMuNiAyMS4xIDIxLjkgMjAuMi00LjgtMi44LTMuNS0xLjktMTAuOC0zLjcgNC4xIDQuMSAxNy41IDE4LjggMTguMiAyMC43bC4yIC4yLS4yIC4yYzAgMS44IDEuNi0xLjItMTQgMjIuOS03NS4yLTE1LjMtMTA2LjMtNDIuNy0xNDEuMi02My4ybDExLjggMS4yYy0xMS44LTE4LjUtMTUuNi0xNy43LTM4LjQtMjYuMWwxMC42LTguNGMtOC44LTMtMTguMi0zLTI4LjMgLjVsNy42LTEwLjYtMS4yLTEuN2MtMTQuOSA0LjMtMTkuOCA5LjItMjIuNiAxMS4zLTEuMS01LjUtMi44LTEyLjQtMTIuMy0yOC44bC0xLjIgMjctMTMuMi01YzEuNS0yNS4yIDUuNC01MC41IDEzLjItNzQuNnpNMzY4IDQ3My4xYy00OS45IDI1LTU2LjEgMjIuNC01OSAyMy45LTI5LjgtMTEuOC01MC45LTMxLjctNjMuNS01OC44bDMwIDE2LjVjLTkuOC05LjMtMTguMy0xNi41LTM4LjQtNDQuM2wxMS44IDIzLjEtMTcuNy03LjZjMTQuMiAyMS4xIDIzLjUgNTEuNyA2Ni42IDczLjUtMTIwLjggMjQuMi0xOTktNzIuMS0yMDAuOS03NC4zIDExLjEgOS4yIDIyLjkgMTcuNSAzNS40IDI0LjggMy40IDEuNyA3LjEgMi41IDEwLjEgMS4ybC0xNi0yMC43YzkuMiA0LjIgOS41IDQuNSA2OS4xIDI5LTQyLjUtMjAuNy03My44LTQwLjgtOTMuMi02MC4yLS41IDYuNC0xLjIgMTAuMS0xLjIgMTAuMSA4LjcgNy4zIDE1LjggMTYuNCAyMC43IDI2LjYtMzktMTguOS01Ny42LTQ3LjYtNzEuMy04Mi42IDQ5LjkgNTUuMSAxMTguOSAzNy41IDEyMC41IDM3LjEgMzQuOCAxNi40IDY5LjkgMjMuNiAxMTMuOSAxMC42IDMuMyAwIDIwLjMgMTcgMjUuMyAzOS4xbDQuMi0zLTIuNS0yMy42YzkgOSAyNC45IDIyLjYgMzQuNCAxMy0xNS42LTUuMy0yMy41LTkuNS0yOS41LTMxLjcgNC42IDQuMiA3LjYgOSAyNy44IDE1bDEuMi0xLjItMTAuNS0xNC4yYzExLjctNC44LTMuNSAxIDMyLTEwLjggNC4zIDM0LjMgOSA0OS4yIC43IDg5LjV6TTQ4My4zIDI1OC43bC0yLjUgLjUgMyA5LjNjLTMuNSA1LjktMjMuNyA0NC4zLTcxLjYgNzkuNy0zOS41IDI5LjgtNzYuNiAzOS4xLTgwLjkgNDAuM2wtNy42LTcuMS0xLjIgMyAxNC4zIDE2LTcuMS00LjcgMy40IDQuMi0xLjIgMC0yMS45LTEzLjUgOS4zIDI2LjYtMTktMjcuOS0xLjIgMi41IDcuNiAyOWMtNi4xLTguMi0yMS0zMi42LTU2LjgtMzkuNmwzMi41IDIxLjJjLTMxLjIgNC43LTYzIDIuNS05My4yLTYuNC00LjItMS4yLTguOS0yLjUtMTMuNS00LjJsMS4yLTMtNDQuOC0yMi40IDI2LjEgMjIuNGMtNTcuNyA5LjEtMTEzLTI1LjQtMTI2LjQtODMuNEwyOS4zIDI4NC44IDcgMzA3LjFjMTkuNS01Ny41IDI1LjYtNTcuOSA1MS40LTcwLjEtOS4xLTUuMy0xLjYtMy4zLTM4LjQtOS4zIDE1LjgtNS44IDMzLTE1LjQgNzMgNS4yIDEuMi0uNyAyLjQtMS4zIDMuNy0xLjcgLjYtMy4yIC40LS44IDEtMTEuOCAzLjkgMTAgMy42IDguNyAzIDkuM2wxLjcgLjVjMTIuNy02LjUgOC45LTQuNSAxNy04LjlsLTUuNCAxMy41IDIyLjMtNS44LTguNCA4LjQgMi41IDIuNWM0LjUtMS44IDMwLjMgMy40IDQwLjggMTZsLTIzLjYtMi41YzM5LjQgMjMgNTEuNSA1NCA1NS44IDY5LjZsMS43LTEuMmMtMi44LTIyLjMtMTIuNC0zMy45LTE2LTQwLjEgNC4yIDUgMzkuMiAzNC42IDExMC40IDQ2LTExLjMtLjUtMjMuMSA1LjQtMzQuOSAxOC45bDQ2LjctMjAuMi05LjMgMjEuOWM3LjYtMTAuMSAxNC44LTIzLjYgMjEuMi0zOS42bDAtLjUgMS4yLTMtMS4yIDE2YzEzLjUtNDEuOCAyNS4zLTc4LjUgMzUuNC0xMDkuN2wxMy41LTI3LjggMC0yLTUuNC00LjIgMTAuMSAwIDUuOSA0LjIgMi41LTEuMi0zLjQtMTYgMTIuMyAxOC45IDQxLjgtMjAuMi0xNC44IDEzIC41IDIuOSAxNy43LS41YzExLjEgLjQgMjIuMSAxLjggMzMgNC4ybC0yMy42IDIuNS0xLjIgMyAyNi42IDIzLjFjOS45IDkuOSAxOC45IDIwLjYgMjcgMzItMTEuMi0zLjMtMTAuMy0zLjQtMjEuMi0zLjRsMTIuMyAzMi41LTguOS0xMi44em0tNi4xLTcxLjNsLTMuOSAxMy0xNC4zLTExLjggMTguMi0xLjJ6bS0yNTQuOCA3LjFjMS43IDEwLjYgNC43IDE3LjcgOC44IDIxLjktOS4zIDYuNi0yNy41IDEzLjktNDYuNSAxNmwuNSAxLjJjOC4zIDEuMyAxNi45IC40IDI0LjgtMi41bC03LjEgMTNjNC4yLTEuNyAxMC4xLTcuMSAxNy43LTE0LjggMTEuOS01LjUgMTIuNy01LjEgMjAuMi0xNi0xMi43LTYuNC0xNS43LTEzLjctMTguNC0xOC44em0zLjctMTAyLjNjLTYuNC0zLjQtMTAuNiAzLTEyLjMgMTguOXMyLjUgMjkuNSAxMS44IDM5LjYgMTguMiAxMC42IDI2LjEgMyAzLjQtMjMuNi0xMS4zLTQ3LjdjLTMuNS01LjctOC40LTEwLjUtMTQuMy0xMy44bDAgMHptLTQuNyA0Ni4zYzUuNCAyLjIgMTAuNSAxLjkgMTIuMy0xMC42bDAtNC43LTEuMiAuNWMtNC4zLTMuMS0yLjUtNC41LTEuNy02LjJsLjUtLjVjLS45LTEuMi01LTguMS0xMi41IDQuNy0uNS0xMy41IC41LTIxLjkgMy0yNC44IDEuMi0yLjUgNC43LTEuMiAxMS4zIDQuMiA2LjQgNS40IDExLjMgMTYgMTUuMiAzMi41IDYuNSAyOC0xOS44IDI2LjItMjYuOSA0Ljl6bS00NS01LjVjMS42IC4zIDkuMy0xLjEgOS4zLTE0LjhsLS41IDBjLTUuNC0xLjEtMi4yLTUuNS0uNy01LjktMS43LTMtMy40LTQuMi01LjQtNC43LTguMSAwLTExLjYgMTIuNy04LjEgMjEuMiAuNSAxLjEgMS4zIDIgMi4yIDIuOHMyIDEuMiAzLjIgMS40bDAgMHptNDAuMS01MC4xbC0yLjUgLjUgLjUgM2M5LjEtLjUgMTguMSAxLjUgMjYuMSA1LjktMi41LTUuNS0xMC0xNC4zLTI4LjMtMTQuM2wuNSAyLjUgMy43IDIuNHptLTcxLjggNDkuNGMyMS43IDE2LjggMTYuNSAyMS40IDQ2LjUgMjMuNmwtMi45LTQuN2M4LjQtNy4yIDEzLjctMTcuMyAxNC44LTI4LjMgMS43LTE2LTEuMi0yOS41LTguOC00MS4zbDEzLTcuNmMwLS4zIDAtLjYtLjEtLjlzLS4yLS42LS40LS44Yy0yLjItLjktNC42LTEuMi03LS45cy00LjYgMS4yLTYuNSAyLjZjLTEyLjcgNi43LTI4IDIwLjktMjkgMjIuNC0xLjcgMS43LTMuNCA1LjktNS40IDEzLjUtMS45IDcuNy0yLjkgMTUuNi0yLjkgMjMuNi00LjctOC0xMC41LTYuNC0xOS45LTUuOWw3LjEgNy42Yy0xNi41IDAtMjMuMyAxNS40LTIzLjYgMTYgNi44IDAgNC42LTcuNiAzMC0xMi4zLTQuMy02LjMtMy4zLTUtNC45LTYuNnptMTguNy0xOC43YzEuMi03LjYgMy40LTEzIDYuNC0xNy4yIDUuNC02LjQgMTAuNi0xMC4xIDE2LTExLjggNC4yLTEuNyA3LjEgMS4yIDEwLjEgOS4zIDIuNSA4LjIgMy41IDE2LjggMyAyNS4zLS41IDkuMy0zLjQgMTcuMi04LjQgMjMuMS0yLjkgMy40LTUuNCA1LjktNi40IDcuNi0zLjggLjQtNy42IC4yLTExLjMtLjVsLTcuMS0zLjQtNS40LTYuNGMuOC0xMCAxLjMtMTguOCAzLjEtMjZ6bTQyIDU2LjFjLTM0LjggMTQuNC0zNC43IDE0LTM2LjEgMTQuMy0yMC44IDQuNy0xOS0yNC40LTE4LjktMjQuOGw1LjktMS4yLS41LTIuNWMtMjAuMi0yLjYtMzEgNC4yLTMyLjUgNC45IC41IC41IDMgMy40IDUuOSA5LjMgNC4yLTYuNCA4LjgtMTAuMSAxNS4yLTEwLjYtMS43IDExLjItMS4yIDIyLjcgMS43IDMzLjcgLjEgLjUgMi42IDE3LjQgMjcuNSAyNC4xIDExLjMgMyAyNyAxLjIgNDguOS01LjRsLTkuMiAuNWMtNC4yLTE0LjgtNi40LTI0LjgtNS45LTI5LjUgMTEuMy04LjggMjEuOS0xMS4zIDMwLjctNy42bDIuNSAwLTExLjgtNy42LTcuMSAuNWMtNS45IDEuMi0xMi4zIDQuMi0xOS40IDguNGwzLjEtNi41eiJdfSxZN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiamlyYSIsaWNvbjpbNTEyLDUxMixbXSwiZjdiMSIsIk00OTguNSAyNDEuN2MtNzIuOS03Mi43LTE2OS40LTE2OS45LTI0MS41LTI0MS43LTE2NS41IDE2NC45LTI0Mi41IDI0MS43LTI0Mi41IDI0MS43LTcuOSA3LjktNy45IDIwLjcgMCAyOC43IDEzMi44IDEzMi4zIDYxLjggNjEuNSAyNDIuNSAyNDEuNiAzNzkuNC0zNzggMTUuNy0xNi43IDI0MS41LTI0MS43IDgtNy45IDgtMjAuNyAwLTI4LjZ6TTI1NyAzMzEuN2wtNzYtNzUuNyA3Ni03NS43IDc2IDc1LjctNzYgNzUuN3oiXX0sWjdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZlZGV4IixpY29uOls2NDAsNTEyLFtdLCJmNzk3IiwiTTU4NiAyODQuNWw1My4zLTU5LjktNjIuNCAwLTIxLjcgMjQuOC0yMi41LTI0LjgtMTE4LjcgMCAwLTE2IDU2LjEgMCAwLTQ4LjEtMTUxLjIgMCAwIDc1LjUtLjUgMGMtOS42LTExLTIxLjUtMTQuOC0zNS40LTE0LjgtMjguNCAwLTQ5LjggMTkuNC01Ny4zIDQ0LjktMTgtNTkuNC05Ny40LTU3LjYtMTIxLjktMTRsMC0yNC4yLTU0LjggMCAwLTI2LjIgNjAgMCAwLTQxLjEtMTA5IDAgMCAxODQuNCA0OSAwIDAtNzcuNSA0OC45IDBjLTEuNSA1LjctMi4zIDExLjgtMi4zIDE4LjIgMCA3My4xIDEwMi42IDkxLjQgMTMwLjIgMjMuN2wtNDIgMGMtMTQuNyAyMC45LTQ1LjggOC45LTQ1LjgtMTQuNmw4NS41IDBjMy43IDMwLjUgMjcuNCA1Ni45IDYwLjEgNTYuOSAxNC4xIDAgMjctNi45IDM0LjktMTguNmwuNSAwIDAgMTEuOSAyMTIuMiAwIDIyLjEtMjUgMjIuMyAyNSA2NC40IDAtNTQtNjAuNXpNMTM5LjMgMjY3LjljNi4xLTI2LjMgNDEuNy0yNS42IDQ2LjUgMGwtNDYuNSAwem0xNTMuNCA0OC45Yy0zNC42IDAtMzQtNjIuOCAwLTYyLjggMzIuNiAwIDM0LjUgNjIuOCAwIDYyLjh6bTE2Ny44IDE5LjFsLTk0LjQgMCAwLTE2Ni41IDk1IDAgMCAzMC4yLTU2LjEgMCAwIDMzLjkgNTUuNSAwIDAgMjguMS01Ni4xIDAgMCA0NC43IDU2LjEgMCAwIDI5LjZ6bS00NS45LTM5LjhsMC0yNC40IDU2LjEgMCAwLTQ0IDUwLjcgNTctNTAuNyA1NyAwLTQ1LjYtNTYuMSAwem0xMzguNiAxMC4zbC0yNi4xIDI5LjUtMzguMSAwIDQ1LjYtNTEuMi00NS42LTUxLjIgMzkuNyAwIDI2LjYgMjkuMyAyNS42LTI5LjMgMzguNSAwLTQ1LjQgNTEgNDYgNTEuNC00MC41IDAtMjYuMy0yOS41eiJdfSxYN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZXZlcm5vdGUiLGljb246WzM4NCw1MTIsW10sImY4MzkiLCJNMTIxLjEgMTMyLjJjMS42IDIyLjMtMTcuNiAyMS42LTIxLjYgMjEuNi02OC45IDAtNzMuNi0xLTgzLjYgMy4zLS42IC4yLS43IDAtLjQtLjRMMTI0LjEgNDYuNGMuNC0uNCAuNi0uMiAuNCAuNC00LjQgMTAtMy40IDE1LjEtMy40IDg1LjR6bTc5IDMwOGMtMTQuNy0zNy4xIDEzLTc2LjkgNTIuNS03Ni42IDE3LjUgMCAyMi42IDIzLjIgNy45IDMxLjQtNi4yIDMuMy0yNC45IDEuNy0yNS4xIDE5LjIgMCAxNy4xIDE5LjcgMjUgMzEuMiAyNC45IDYgMCAxMS45LTEuMiAxNy41LTMuNXMxMC42LTUuNyAxNC44LTkuOSA3LjYtOS4zIDkuOS0xNC44IDMuNS0xMS41IDMuNS0xNy41bDAtLjFjMC0xMS42LTcuOC00Ny4yLTQ3LjUtNTUuMy03LjctMS41LTY1LTYuMy02OC40LTUwLjUtMy43IDE2LjktMTcuNCA2My41LTQzLjEgNjkuMS04LjcgMS45LTY5LjcgNy42LTExMi45LTM2LjggMCAwLTE4LjYtMTUuMi0yOC4yLTU4LTMuNC0xNS43LTkuMy0zOS43LTExLjEtNjIgMC0xOCAxMS4xLTMwLjQgMjUuMS0zMi4yIDgxIDAgOTAgMi4zIDEwMS03LjggOS44LTkuMiA3LjgtMTUuNSA3LjgtMTAyLjggMS04LjMgNy44LTMwLjggNTMuNC0yNC4xIDYgLjkgMzEuOSA0LjIgMzcuNSAzMC42TDI5MCA3NC44YzIwLjQgMy43IDcwLjkgNyA4MC42IDU3LjkgMjIuNyAxMjEuMSA4LjkgMjM4LjUgNy44IDIzOC41LTE2IDExNC40LTExMS4xIDEwOC45LTExMS4xIDEwOC45LTE5LS4yLTU0LjItOS40LTY3LjMtMzkuOGwwIDB6TTI4MSAyMzUuNGMtMSAxLjktMi4yIDYgLjkgNyAxNC4xIDQuOSAzOS44IDYuOCA0NS45IDUuNSAzLjEtLjIgMy4xLTQuNCAyLjUtNi42LTMuNS0yMS44LTQwLjgtMjYuNS00OS4yLTUuOWwwIDB6Il19LEs3ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1c2IiLGljb246WzY0MCw1MTIsW10sImYyODciLCJNNjMzLjUgMjU2YzAgMy4xLTEuNyA2LjEtNC41IDcuNUw1MzkuOSAzMTdjLTEuNCAuOC0yLjggMS40LTQuNSAxLjQtMS40IDAtMy4xLS4zLTQuNS0xLjEtMi44LTEuNy00LjUtNC41LTQuNS03LjhsMC0zNS42LTIzMC43IDBjMjUuMyAzOS42IDQwLjUgMTA2LjkgNjkuNiAxMDYuOWwyNi43IDAgMC0yNi44YzAtNSAzLjktOC45IDguOS04LjlsODkuMSAwYzUgMCA4LjkgMy45IDguOSA4LjlsMCA4OS4xYzAgNS0zLjkgOC45LTguOSA4LjlsLTg5LjEgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjctMjYuNyAwYy03NS40IDAtODEuMS0xNDIuNS0xMjQuNy0xNDIuNWwtMTAwLjMgMGMtOC4xIDMwLjYtMzUuOSA1My41LTY5IDUzLjUtMzkuMy0uMS03MS4zLTMyLjEtNzEuMy03MS40czMyLTcxLjMgNzEuMy03MS4zYzMzLjEgMCA2MSAyMi44IDY5IDUzLjUgMzkuMSAwIDQzLjkgOS41IDc0LjYtNjAuNCA0MC4xLTg5LjEgNTguMS04Mi4xIDEwOC45LTgyLjEgNy41LTIwLjkgMjctMzUuNiA1MC40LTM1LjYgMjkuNSAwIDUzLjUgMjMuOSA1My41IDUzLjVzLTIzLjkgNTMuNS01My41IDUzLjVjLTIzLjQgMC00Mi45LTE0LjgtNTAuNC0zNS42bC0yOS44IDBjLTI5LjEgMC00NC4zIDY3LjQtNjkuNiAxMDYuOWwzMDIuMSAwIDAtMzUuNmMwLTMuMyAxLjctNi4xIDQuNS03LjhzNi40LTEuNCA4LjkgLjNMNjI5IDI0OC44YzIuOCAxLjEgNC41IDQuMSA0LjUgNy4yeiJdfSxRN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW5ncnljcmVhdGl2ZSIsaWNvbjpbNjQwLDUxMixbXSwiZjM2ZSIsIk02NDAgMjM4LjJsLTMuMiAyOC4yLTM0LjUgMi4zLTIgMTguMSAzNC41LTIuMy0zLjIgMjguMi0zNC40IDIuMi0yLjMgMjAuMSAzNC40LTIuMi0zIDI2LjEtNjQuNyA0LjEgMTIuNy0xMTMuMi00Ny4zIDExNS40LTMxLjkgMi0yMy44LTExNy44IDMwLjMtMiAxMy42IDc5LjQgMzEuNy04Mi40IDkzLjEtNi4yek00MjYuOCAzNzEuNWwyOC4zLTEuOCAxMi45LTEyMC4xLTI4LjQgMS45LTEyLjggMTIwek0xNjIgMzg4LjFsLTE5LjQtMzYtMy41IDM3LjQtMjguMiAxLjcgMi43LTI5LjFjLTExIDE4LTMyIDM0LjMtNTYuOSAzNS44LTMyLjggMi01OS43LTIwLjktNTYuNC01OC4yIDIuNi0yOS4zIDI2LjctNjIuOCA2Ny41LTY1LjQgMzcuNy0yLjQgNDcuNiAyMy4yIDUxLjMgMjguOGwyLjgtMzAuOCAzOC45LTIuNWMyMC4xLTEuMyAzOC43IDMuNyA0Mi41IDIzLjdsMi42LTI2LjYgNjQuOC00LjItMi43IDI3LjktMzYuNCAyLjQtMS43IDE3LjkgMzYuNC0yLjMtMi43IDI3LjktMzYuNCAyLjMtMS45IDE5LjkgMzYuMy0yLjMtMi4xIDIwLjggNTUtMTE3LjIgMjMuOC0xLjYgMzIuMSAxMTAuNiA4LjktODUuNi0yMi4zIDEuNCAyLjktMjcuOSA3NS00LjktMyAyOC0yNC4zIDEuNi05LjcgOTEuOS01OCAzLjctNC4zLTE1LjYtMzkuNCAyLjUtOCAxNi4zLTEyNi4yIDcuN3ptLTQ0LjMtNzAuMmwtMjYuNCAxLjdjLTYuNy0xMi40LTE0LjQtMTYuNi0yNi4zLTE1LjgtMTkgMS4yLTMzLjMgMTcuNS0zNC42IDMzLjMtMS40IDE2IDcuMyAzMi41IDI4LjcgMzEuMiAxMi44LS44IDIxLjMtOC42IDI4LjktMTguOWwyNy0xLjcgMi43LTI5Ljh6bTU2LjEtNy43YzEuMi0xMi45LTcuNi0xMy42LTI2LjEtMTIuNEwxNDUgMzI2LjNjMTQuMi0uOSAyNy41LTIuMSAyOC44LTE2LjF6TTE5NC45IDM4MWw1LjgtNjBjLTUgMTMuNS0xNC43IDIxLjEtMjcuOSAyNi42TDE5NC45IDM4MXptMTM1LjQtNDVsLTcuOS0zNy44LTE1LjggMzkuMyAyMy43LTEuNXpNMTYwLjIgMjYxLjRsLTQuMy0xNy41LTM5LjYgMi42LTguMSAxOC4yLTMxLjkgMi4xIDU3LTEyMS45IDIzLjktMS42IDMwLjcgMTAyIDkuOS0xMDQuNyAyNy0xLjggMzcuOCA2My42IDYuNS02Ni42IDI4LjUtMS45LTQgNDEuMmM3LjQtMTMuNSAyMi45LTQ0LjcgNjMuNi00Ny41IDQwLjUtMi44IDUyLjQgMjkuMyA1My40IDMwLjNsMy4zLTMyIDM5LjMtMi43YzEyLjctLjkgMjcuOCAuMyAzNi4zIDkuN2wtNC40LTExLjkgMzIuMi0yLjIgMTIuOSA0My4yIDIzLTQ1LjcgMzEtMi4yLTQzLjYgNzguNC00LjggNDQuMy0yOC40IDEuOSA0LjgtNDQuMy0xNS44LTQzYzEgMjIuMy05LjIgNDAuMS0zMiA0OS42bDI1LjIgMzguOC0zNi40IDIuNC0xOS4yLTM2LjgtNCAzOC4zLTI4LjQgMS45IDMuMy0zMS41Yy02LjcgOS4zLTE5LjcgMzUuNC01OS42IDM4LTI2LjIgMS43LTQ1LjYtMTAuMy01NS40LTM5LjJsLTQgNDAuMy0yNSAxLjYtMzcuNi02My4zLTYuMyA2Ni4yLTU2LjggMy43em0yNzYuNi04Mi4xYzEwLjItLjcgMTcuNS0yLjEgMjEuNi00LjMgNC41LTIuNCA3LTYuNCA3LjYtMTIuMSAuNi01LjMtLjYtOC44LTMuNC0xMC40LTMuNi0yLjEtMTAuNi0yLjgtMjIuOS0ybC0yLjkgMjguOHpNMzI3LjcgMjE0YzUuNiA1LjkgMTIuNyA4LjUgMjEuMyA3LjkgNC43LS4zIDkuMS0xLjggMTMuMy00LjEgNS41LTMgMTAuNi04IDE1LjEtMTQuM2wtMzQuMiAyLjMgMi40LTIzLjkgNjMuMS00LjMgMS4yLTEyLTMxLjIgMi4xYy00LjEtMy43LTcuOC02LjYtMTEuMS04LjEtNC0xLjctOC4xLTIuOC0xMi4yLTIuNS04IC41LTE1LjMgMy42LTIyIDkuMi03LjcgNi40LTEyIDE0LjUtMTIuOSAyNC40LTEuMSA5LjYgMS40IDE3LjMgNy4yIDIzLjN6bS0yMDEuMyA4LjJsMjMuOC0xLjYtOC4zLTM3LjYtMTUuNSAzOS4yeiJdfSxKN2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWl6dW5pIixpY29uOls1MTIsNTEyLFtdLCJmM2NjIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc2IDM1OS45Yy0zMS40IDEwLjYtNTguOCAyNy4zLTgwIDQ4LjJMOTYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMjMuOXpNMjk2IDM1MGMtMTIuOS0yLTI2LjItMy4xLTM5LjgtMy4xLTEzLjggMC0yNy4yIDEuMS00MC4yIDMuMWwwLTIxNGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjE0em0xMjAgNTcuN2MtMjEuMi0yMC44LTQ4LjYtMzcuNC04MC00OEwzMzYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyNzEuN3oiXX0sZXBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Iml0Y2gtaW8iLGljb246WzUxMiw1MTIsW10sImY4M2EiLCJNNzEuOSAzNC44QzUwLjIgNDcuNyA3LjQgOTYuOCA3IDEwOS43bDAgMjEuM2MwIDI3LjEgMjUuMyA1MC44IDQ4LjIgNTAuOCAyNy42IDAgNTAuNS0yMi44IDUwLjUtNTAgMCAyNy4xIDIyLjIgNTAgNDkuOCA1MHM0OS0yMi44IDQ5LTUwYzAgMjcuMSAyMy42IDUwIDUxLjIgNTBsLjUgMGMyNy42IDAgNTEuMi0yMi44IDUxLjItNTAgMCAyNy4xIDIxLjUgNTAgNDkgNTBzNDkuOC0yMi44IDQ5LjgtNTBjMCAyNy4xIDIzIDUwIDUwLjUgNTAgMjMgMCA0OC4zLTIzLjggNDguMy01MC44bDAtMjEuM2MtLjQtMTIuOS00My4yLTYyLjEtNjQuOS03NS02Ny40LTIuMy0xMTQuMi0yLjctMTg0LTIuN1M5MS4xIDMzLjEgNzEuOSAzNC44ek0yMDQuMiAxNjkuMmMtMjIgMzguNC03Ny45IDM4LjctOTkuOCAuMi0xMy4yIDIzLjEtNDMuMiAzMi4xLTU2IDI3LjctMy45IDQwLjItMTMuNyAyMzcuMSAxNy43IDI2OS4yIDgwIDE4LjcgMzAyLjEgMTguMSAzNzkuOCAwIDMxLjYtMzIuMyAyMS4zLTIzMiAxNy43LTI2OS4yLTEyLjkgNC40LTQyLjktNC42LTU2LTI3LjctMjIgMzguNS03Ny44IDM4LjEtOTkuOC0uMi03LjEgMTIuNS0yMyAyOC45LTUxLjggMjguOS0xMC40IC4zLTIwLjgtMi4yLTI5LjktNy4zcy0xNi43LTEyLjYtMjEuOS0yMS42bDAgMHptLTQxLjYgNTMuOGMxNi41IDAgMzEuMSAwIDQ5LjIgMTkuOCAyOS4zLTMgNTguOS0zIDg4LjIgMCAxOC4yLTE5LjcgMzIuOC0xOS43IDQ5LjItMTkuNyA1Mi4zIDAgNjUuMiA3Ny41IDgzLjkgMTQ0LjQgMTcuMyA2Mi4yLTUuNSA2My43LTM0IDYzLjctNDIuMS0xLjYtNjUuNS0zMi4yLTY1LjUtNjIuOC0zOS4zIDYuNC0xMDEuOSA4LjgtMTU1LjYgMCAwIDMwLjYtMjMuMyA2MS4yLTY1LjUgNjIuOC0yOC40LS4xLTUxLjItMS42LTMzLjktNjMuNyAxOC43LTY3IDMxLjYtMTQ0LjQgODMuOS0xNDQuNGwwLS4xek0yNTYgMjcwLjhzLTQ0LjQgNDAuOC01Mi40IDU1LjJsMjktMS4yIDAgMjUuM2MwIDEuNSAyMS4zIC4yIDIzLjMgLjIgMTEuNiAuNSAyMy4zIDEgMjMuMy0uMmwwLTI1LjMgMjkgMS4yYy04LTE0LjUtNTIuNC01NS4yLTUyLjQtNTUuMmwuMSAweiJdfSx0cGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2luZG93cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjE3YSIsIk0wIDkzLjdsMTgzLjYtMjUuMyAwIDE3Ny40LTE4My42IDAgMC0xNTIuMXpNMCA0MTguM2wxODMuNiAyNS4zIDAtMTc1LjItMTgzLjYgMCAwIDE0OS45em0yMDMuOCAyOGwyNDQuMiAzMy43IDAtMjExLjYtMjQ0LjIgMCAwIDE3Ny45em0wLTM4MC42bDAgMTgwLjEgMjQ0LjIgMCAwLTIxMy44LTI0NC4yIDMzLjd6Il19LGFwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdHVtYmxldXBvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjFhNCIsIk01MDIuOSAyNjZsMCA2OS43YzAgNjIuMS01MC4zIDExMi40LTExMi40IDExMi40LTYxLjggMC0xMTIuNC00OS44LTExMi40LTExMS4zbDAtNzAuMiAzNC4zIDE2IDUxLjEtMTUuMiAwIDcwLjZjMCAxNC43IDEyIDI2LjUgMjYuNyAyNi41UzQxNyAzNTIuNyA0MTcgMzM4bDAtNzIgODUuOSAwek0yNzguMiAyMDcuOGwzNC4zIDE2IDUxLjEtMTUuMiAwLTM1LjZjMC02MC41LTUxLjEtMTA5LTExMi4xLTEwOS02MC44IDAtMTEyLjEgNDguMi0xMTIuMSAxMDguMmwwIDE2Mi40YzAgMTQuOS0xMiAyNi43LTI2LjcgMjYuN1M4NiAzNDkuNSA4NiAzMzQuNmwwLTY4LjYtODYgMCAwIDY5LjdjMCA2MiA1MC4zIDExMi4zIDExMi40IDExMi4zIDYxLjYgMCAxMTIuNC00OS41IDExMi40LTExMC44bDAtMTYwLjNjMC0xNC43IDEyLTI2LjcgMjYuNy0yNi43czI2LjcgMTIgMjYuNyAyNi43bDAgMzAuOXoiXX0sRmY9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29vZ2xlIixpY29uOls1MTIsNTEyLFtdLCJmMWEwIiwiTTUwMCAyNjEuOEM1MDAgNDAzLjMgNDAzLjEgNTA0IDI2MCA1MDQgMTIyLjggNTA0IDEyIDM5My4yIDEyIDI1NlMxMjIuOCA4IDI2MCA4YzY2LjggMCAxMjMgMjQuNSAxNjYuMyA2NC45bC02Ny41IDY0LjljLTg4LjMtODUuMi0yNTIuNS0yMS4yLTI1Mi41IDExOC4yIDAgODYuNSA2OS4xIDE1Ni42IDE1My43IDE1Ni42IDk4LjIgMCAxMzUtNzAuNCAxNDAuOC0xMDYuOWwtMTQwLjggMCAwLTg1LjMgMjM2LjEgMGMyLjMgMTIuNyAzLjkgMjQuOSAzLjkgNDEuNHoiXX0saXBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRpc2NvcmQiLGljb246WzU3Niw1MTIsW10sImYzOTIiLCJNNDkyLjUgNjkuOGMtLjItLjMtLjQtLjYtLjgtLjctMzguMS0xNy41LTc4LjQtMzAtMTE5LjctMzcuMS0uNC0uMS0uOCAwLTEuMSAuMXMtLjYgLjQtLjggLjhjLTUuNSA5LjktMTAuNSAyMC4yLTE0LjkgMzAuNi00NC42LTYuOC04OS45LTYuOC0xMzQuNCAwLTQuNS0xMC41LTkuNS0yMC43LTE1LjEtMzAuNi0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjItMS4xLS4yYy00MS4zIDcuMS04MS42IDE5LjYtMTE5LjcgMzcuMS0uMyAuMS0uNiAuNC0uOCAuNy03Ni4yIDExMy44LTk3LjEgMjI0LjktODYuOSAzMzQuNSAwIC4zIC4xIC41IC4yIC44cy4zIC40IC41IC42YzQ0LjQgMzIuOSA5NCA1OCAxNDYuOCA3NC4yIC40IC4xIC44IC4xIDEuMSAwcy43LS40IC45LS43YzExLjMtMTUuNCAyMS40LTMxLjggMzAtNDguOCAuMS0uMiAuMi0uNSAuMi0uOHMwLS41LS4xLS44LS4yLS41LS40LS42LS40LS4zLS43LS40Yy0xNS44LTYuMS0zMS4yLTEzLjQtNDUuOS0yMS45LS4zLS4yLS41LS40LS43LS42cy0uMy0uNi0uMy0uOSAwLS42IC4yLS45IC4zLS41IC42LS43YzMuMS0yLjMgNi4yLTQuNyA5LjEtNy4xIC4zLS4yIC42LS40IC45LS40cy43IDAgMSAuMWM5Ni4yIDQzLjkgMjAwLjQgNDMuOSAyOTUuNSAwIC4zLS4xIC43LS4yIDEtLjJzLjcgLjIgLjkgLjRjMi45IDIuNCA2IDQuOSA5LjEgNy4yIC4yIC4yIC40IC40IC42IC43cy4yIC42IC4yIC45LS4xIC42LS4zIC45LS40IC41LS42IC42Yy0xNC43IDguNi0zMCAxNS45LTQ1LjkgMjEuOC0uMiAuMS0uNSAuMi0uNyAuNHMtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjggLjEgLjUgLjIgLjhjOC44IDE3IDE4LjggMzMuMyAzMCA0OC44IC4yIC4zIC42IC42IC45IC43cy44IC4xIDEuMSAwYzUyLjktMTYuMiAxMDIuNi00MS4zIDE0Ny4xLTc0LjIgLjItLjIgLjQtLjQgLjUtLjZzLjItLjUgLjItLjhjMTIuMy0xMjYuOC0yMC41LTIzNi45LTg2LjktMzM0LjV6bS0zMDIgMjY3LjdjLTI5IDAtNTIuOC0yNi42LTUyLjgtNTkuMnMyMy40LTU5LjIgNTIuOC01OS4yYzI5LjcgMCA1My4zIDI2LjggNTIuOCA1OS4yIDAgMzIuNy0yMy40IDU5LjItNTIuOCA1OS4yem0xOTUuNCAwYy0yOSAwLTUyLjgtMjYuNi01Mi44LTU5LjJzMjMuNC01OS4yIDUyLjgtNTkuMmMyOS43IDAgNTMuMyAyNi44IDUyLjggNTkuMiAwIDMyLjctMjMuMiA1OS4yLTUyLjggNTkuMnoiXX0scnBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImhhY2tlci1uZXdzIixpY29uOls0NDgsNTEyLFtdLCJmMWQ0IiwiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTIxLjIgMjI5LjJsLS4yIDBjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40em0yMTggNTMuOWwwIDEwMC45LTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzUyLjUgOTguMyA0OS4yIDEwMS4yIDU5LjMgMTI1LjYgMTIuMy0yNyA1LjgtMjQuNCA2MC42LTEyNS42bDM0LjggMC04MC44IDE1NS4xeiJdfSxtRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbGV2ZW50eSIsaWNvbjpbNjQwLDUxMixbIjExdHkiXSwiZTdkNiIsIk02MTUuMyAxNjguNWMyLjMgMCA0LjYgLjcgNi42IDIuMiAxLjkgMS40IDMuMSAzLjMgMy44IDUgMS40IDMuMyAxLjggNy4zIDEuOCAxMS4zIDAgMi4yLS4zIDQuOS0uNyA3LjZsMCAuNC01MC45IDI2NC45IDAgMGMtNCAyMi4xLTguNSAzOS40LTEzLjYgNTEuNy01IDEyLjEtMTAuOSAyMS42LTE4LjYgMjdsMCAwYy03LjUgNS4zLTE2LjkgNy43LTI3LjYgOGwtMyAwYy0xNiAwLTI5LjMtNC4yLTM2LjktMTQuOC0uMS0uMS0uMS0uMS0uMi0uMi0uMS0uMi0uMy0uNC0uNS0uNmwwIDBjLTEuOC0yLjQtMi41LTUuMi0yLjktNy40LS41LTIuOC0uNy02LjEtLjctOS44IDAtNy4zIC42LTEzLjUgMi4xLTE4LjIgMS40LTQuNCA0LjgtMTAuNCAxMi4yLTEwLjRsMS4zIC4xYy4yIDAgLjQgLjEgLjUgLjEgLjMgLjEgLjYgLjEgLjggLjIgLjYgLjEgMS4zIC4zIDIuMiAuNmw3LjYgMi4yIC4xIDAgNy42IDIuMWMuOSAuMiAxLjcgLjQgMi4yIC41IC40IC4xIC42IC4xIC43IC4xIDAgMCAuMSAwIC4yLS4xIC4xLS4xIC40LS4yIC44LS42IC45LS45IDIuMi0yLjYgMy42LTUuNyAyLjYtNS44IDQuMi0xNC43IDQuMi0yNy40IDAtLjctLjMtMy40LTEuMy04LjktLjktNS4xLTIuMy0xMi4yLTQuMi0yMS4xbC01Ni0yMzIuOS0uMS0uNCAwLS4zYy0uNC0yLjctLjctNS4zLS43LTcuMyAwLTMuNyAuNC03LjUgMS43LTEwLjYgLjctMS42IDEuOC0zLjQgMy41LTQuOSAxLjktMS41IDQuMi0yLjMgNi41LTIuM2wzNC42IDBjNC42IDAgOC43IDEuNyAxMS45IDVsMS4zIDEuNWMxLjIgMS42IDIgMy40IDIuNyA1LjIgLjkgMi40IDEuNSA1LjEgMiA4LjFsMzAuNCAxNjEuMiAyMy44LTE2MGMuOC01LjggMi4yLTExLjQgNS4xLTE1LjEgMy0zLjggNy4yLTUuOCAxMi01LjhsMjQgMHpNMzc1LjEgMzQuNmMyLjYgMCA1LjEgLjcgNy40IDIuMyAyLjIgMS41IDMuNyAzLjYgNC43IDUuNyAxLjkgNCAyLjUgOS4xIDIuNSAxNC41bDAgMTExLjJjMCAuMSAwIC4yIDAgLjNsMzIuNCAwYzIuNSAwIDUgLjYgNy4yIDIuMSAyLjIgMS40IDMuNyAzLjQgNC44IDUuNSAyIDMuOSAyLjYgOC44IDIuNiAxMy45bDAgMTUuNGMwIDUtLjYgOS44LTIuNiAxMy43LTEuMSAyLTIuNiA0LTQuOCA1LjQtMi4yIDEuNC00LjcgMi03LjEgMmwtMzIuNSAwIDAgMTQ1LjhjMCAxMC44IC43IDE5LjUgMiAyNi4yIDEuNCA2LjkgMy4xIDEwLjkgNC43IDEyLjkgMS4yIDEuNSAyLjIgMi41IDMuMSAzLjJsMi4yIDEuNCAuMSAuMSAyLjkgLjhjMS4yIC4yIDIuNiAuMyA0LjMgLjNsMjAuMyAwYzQuNSAwIDguOSAxLjcgMTEuOCA1LjggMi42IDMuNiAzLjMgOC4xIDMuMyAxMi4ybDAgMTcuMmMwIDQuNS0uOCA5LjMtMy40IDEzLjEtMyA0LjItNy41IDYtMTIuMyA2bDAgMC0yOS4xIC4xYy04IDAtMTUtLjYtMjEuMi0xLjctNi43LTEuMy0xMy40LTQuMS0yMC4xLTguMS03LjItNC40LTEzLTEwLjMtMTcuNS0xNy44LTQuNS03LjUtNy45LTE3LjUtMTAuNS0yOS41LTIuNi0xMi4yLTMuOS0yNi42LTMuOS00M2wwLTE0NC45LTEzLjQgMGMtMi40IDAtNC45LS42LTcuMS0yLTIuMi0xLjQtMy43LTMuNC00LjgtNS40LTItMy45LTIuNi04LjctMi42LTEzLjdsMC0xNS40YzAtNS4xIC42LTEwIDIuNi0xMy45IDEuMS0yLjEgMi42LTQgNC44LTUuNSAyLjItMS41IDQuNy0yLjEgNy4yLTIuMWwxMy40IDAgMC0uNiA1LjItMTExLjIgMC0uMSAuMy0zLjljLjUtMy44IDEuMy03LjQgMi43LTEwLjMgMi4xLTQuMiA2LTcuOSAxMS44LTcuOWwyOC42IDB6bS0yNjggMTEuN2MxLjggLjMgMy42IC45IDUuMyAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjMgOC40IDIuMyAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEgMCAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMyAwLS40IDAtLjEgMC0uMiAwLS4yIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguNC0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguOCAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS41LTE5LjVjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xem0xNDMuOC0uNWMxLjggLjMgMy42IC45IDUuMiAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjIgOC40IDIuMiAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4yIDAtLjQgMGwwIDBjLS4xIDAtLjIgMC0uMyAwLS4xIDAtLjIgMC0uMyAwLTIuMiAuMS00LjUtLjQtNi42LTEuNy0yLjMtMS40LTMuOC0zLjQtNC43LTUuMy0xLjgtMy43LTIuMy04LjMtMi4zLTEzbDAtMjcuNGMwLTQuNCAuNy04LjcgMi42LTEyLjQgMi4xLTMuOSA1LjUtNi42IDkuOC03LjZsNzUuNC0xOS40YzEuNC0uNCAyLjktLjUgNC40LS41bDEuOCAuMXoiXX0sc3BlPW1FLG5wZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZWFtc3BlYWsiLGljb246WzU3Niw1MTIsW10sImY0ZjkiLCJNMTUyLjggMzcuMmMtMzIuMiAzOC4xLTU2LjEgODIuNi02OS45IDEzMC41IDAgLjItLjEgLjMtLjEgLjUtMzkuMyAxNi4yLTY2LjggNTQuOC02Ni44IDk5LjggMCA1OS42IDQ4LjQgMTA4IDEwOCAxMDhzMTA4LTQ4LjQgMTA4LTEwOGMwLTUzLjUtMzguOS05Ny45LTkwLTEwNi41IDE1LjctNDEuOCA0MC40LTc5LjYgNzIuMy0xMTAuNyAxLjgtMS42IDQtMi42IDYuMy0zLjEgMzcuMi0xMS41IDc2LjctMTMuMyAxMTQuOC01LjIgMTE5LjMgMjUuMSAxOTguNiAxMzguMiAxODEuNyAyNTguOC04LjQgNjIuNi0zOC42IDExMi43LTg3LjcgMTUxLjQtNTAuMSAzOS43LTEwNy41IDU0LjMtMTcwLjIgNTIuMmwtMjQtMWMxMi40IDIuOCAyNSA0LjkgMzcuNiA2LjMgNDAuNyA0LjIgODEuNCAyLjEgMTIwLjEtMTIuNSA5NC0zNS41IDE0OS4zLTEwMi4zIDE2Mi45LTIwMi41IDQuOC01Mi42LTUuOC0xMDUuNC0zMC44LTE1Mi03MC40LTEzMS45LTIzNC4yLTE4MS42LTM2Ni0xMTEuMi0yLjQgMS40LTQuNSAzLjEtNi4zIDUuMmwuMSAwek0zMDkuNCA0MzMuOWMtMi4xIDExLjUtNC4yIDIxLjktMTQuNiAzMS4zIDUzLjItMSAxMjMuMi0yOS4yIDE2MS44LTk3LjEgMzkuNy02OS45IDM3LjYtMTM5LjktNi4zLTIwNy44LTM2LjUtNTUuMy04OS44LTgyLjQtMTU2LjYtODYuNiAxLjUgMi4zIDMuMiA0LjQgNS4yIDYuM2w1LjIgNi4zYzI1LjEgMzEuMyAzNy42IDY3LjkgNDIuOCAxMDcuNSAyLjEgMTUuNy0xIDMwLjMtMTMuNiA0MS44LTQuMiAzLjEtNS4yIDYuMy00LjIgMTAuNGw3LjMgMTcuNyAyOS4zIDU0LjNjNS4yIDExLjUgNC4yIDE5LjgtNi4zIDI4LjItMy4yIDIuNS02LjcgNC42LTEwLjQgNi4zbC0xOC44IDguNCAzLjEgMTMuNmMzLjEgNi4zIDEgMTIuNS0zLjEgMTcuNy0yLjUgMi40LTMuOCA1LjktMy4xIDkuNCAyLjEgMTEuNS0yLjEgMTkuOC0xMi41IDI1LjEtMi4xIDEtNC4yIDUuMi01LjIgNy4zbDAtLjF6bS0xMzMuNi0zLjFjMTYuNyAxMS41IDM0LjUgMjAuOSA1My4yIDI2LjEgMjQgNS4yIDQxLjgtNi4zIDQ0LjktMzAuMyAxLTguNCA1LjItMTQuNiAxMi41LTE3LjcgNy4zLTQuMiA4LjQtNy4zIDIuMS0xMy42bC05LjQtOC40IDEzLjYtNC4yYzYuMy0yLjEgNy4zLTUuMiA1LjItMTEuNS0xLjQtMy0yLjQtNi4yLTMuMS05LjQtMy4xLTE0LjYtMi4xLTE1LjcgMTEuNS0xOC44IDguNC0zLjEgMTUuNy02LjMgMjEuOS0xMi41IDMuMS0yLjEgMy4xLTQuMiAxLTguNGwtMTYuNy0zMC4zYy0xLTEuOS0yLjEtMy44LTMuMS01LjctNi40LTExLjctMTMtMjMuNi0xNS43LTM3LjEtMi4xLTkuNC0xLTE3LjcgOC40LTI0IDUuMi00LjIgOC40LTkuNCA4LjQtMTYuNy0uNC0xMC4xLTEuNS0yMC4zLTMuMS0zMC4zLTYuMy0zNy42LTIzLTY4LjktNTEuMi05NS01LjItNC4yLTkuNC02LjMtMTYuNy00LjJsLTM1LjYgMTIuNyA2IDMuNmM2LjMgMy43IDEyLjIgNy4zIDE3IDEyLjEgMzAuMyAyNi4xIDQxLjggNjEuNiA0NS45IDEwMC4yIDEgOC40IDAgMTYuNy03LjMgMjEuOS04LjQgNS4yLTEwLjQgMTIuNS03LjMgMjAuOSA0LjkgMTMuMiAxMC40IDI2IDE2LjcgMzguNkwyOTEuNiAzMThjLTYuMyA4LjQtMTMuNiAxMS41LTIxLjkgMTQuNi0xMi41IDMuMS0xNC42IDcuMy0xMC40IDIwLjkgLjYgMS41IDEuNCAyLjggMi4xIDQuMiAyLjEgNS4yIDEgOC40LTQuMiAxMC40bC0xMi41IDMuMSA1LjIgNC4yIDQuMiA0LjJjNC4yIDUuMiA0LjIgOC40LTIuMSAxMC40LTcuMyA0LjItMTEuNSA5LjQtMTEuNSAxNy43IDAgMTIuNS03LjMgMTkuOC0xOC44IDI0LTMuOCAxLTcuNiAxLjUtMTEuNSAxbC0zNC41LTIuMSAuMSAuMnoiXX0sb3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1cHBsZSIsaWNvbjpbNjQwLDUxMixbXSwiZjNmOSIsIk02NDAgMjYyLjVjMCA2NC4xLTEwOSAxMTYuMS0yNDMuNSAxMTYuMS0yNC44IDAtNDguNi0xLjgtNzEuMS01IDcuNyAuNCAxNS41IC42IDIzLjQgLjYgMTM0LjUgMCAyNDMuNS01Ni45IDI0My41LTEyNy4xIDAtMjkuNC0xOS4xLTU2LjQtNTEuMi03OCA2MCAyMS4xIDk4LjkgNTUuMSA5OC45IDkzLjR6TTQ3LjcgMjI3LjljLS4xLTcwLjIgMTA4LjgtMTI3LjMgMjQzLjMtMTI3LjYgNy45IDAgMTUuNiAuMiAyMy4zIC41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOS0xMzQuNSAuNC0yNDMuNCA1Mi42LTI0My4zIDExNi43IC4xIDM4LjMgMzkuMSA3Mi4zIDk5LjMgOTMuMy0zMi4zLTIxLjUtNTEuNS00OC42LTUxLjYtNzh6bTYwLjIgMzkuOVMxMTguNCAyODEgMTM3LjIgMjgxYzE3LjkgMCAyOC40LTExLjUgMjguNC0yNS4xIDAtMjgtNDAuMi0yNS4xLTQwLjItMzkuNyAwLTUuNCA1LjMtOS4xIDEyLjUtOS4xIDUuNyAwIDExLjMgMi42IDExLjMgNi42bDAgMy45IDE0LjIgMCAwLTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42bDAgNTQuNGMwIDExLjMtNy4xIDE3LjgtMTcuOCAxNy44cy0xNy44LTYuNS0xNy44LTE3LjdsMC01NC41LTE1LjggMCAwIDU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOWwwLTU1LTE1LjcgMHptMzQuNCA4NS40bDE1LjggMCAwLTI5LjUgMTUuNSAwYzE2IDAgMjcuMi0xMS41IDI3LjItMjguMXMtMTEuMi0yNy44LTI3LjItMjcuOGwtMzkuMSAwIDAgMTMuNCA3LjggMCAwIDcyem0xNS44LTQzbDAtMjkuMSAxMi45IDBjOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcgNDNsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjctNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcuMSAzNC44YzAgNS44IDIuNCA4LjIgOC4yIDguMmwzNy42IDBjNS44IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE4LjYgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTYxLjJjMC01LjctMi40LTguMi04LjItOC4ybC0xNS40IDAgMCAxMy40IDUuMiAwYzEuNyAwIDIuNiAxIDIuNiAyLjZsMCA2MS4yLS4xIDB6bTYzLjQgMGMwIDUuOCAyLjQgOC4yIDguMiA4LjJsMzguNyAwYzUuNyAwIDguMi0yLjQgOC4yLTguMmwwLTEzLTE0LjMgMCAwIDUuMmMwIDEuNy0xIDIuNi0yLjYgMi42bC0xOS43IDBjLTEuNyAwLTIuNi0xLTIuNi0yLjZsMC0yMC4zIDI3LjcgMCAwLTEzLjQtMjcuNyAwIDAtMjIuNCAxOS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDUuMiAxNC4yIDAgMC0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJsLTUxLjYgMCAwIDEzLjQgNy44IDAgMCA2My45IC4xIDB6bTU4LjktNzZsMCA1LjkgMS42IDAgMC01LjkgMi43IDAgMC0xLjItNyAwIDAgMS4yIDIuNyAwem01LjctMS4ybDAgNy4xIDEuNSAwIDAtNS43IDIuMyA1LjcgMS4zIDAgMi4zLTUuNyAwIDUuNyAxLjUgMCAwLTcuMS0yLjMgMC0yLjEgNS4xLTIuMS01LjEtMi40IDB6Il19LGdFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS10d2l0dGVyIixpY29uOls0NDgsNTEyLFsidHdpdHRlci1zcXVhcmUiXSwiZjA4MSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zNTEuMyAxOTkuM2MwIDg2LjctNjYgMTg2LjYtMTg2LjYgMTg2LjYtMzcuMiAwLTcxLjctMTAuOC0xMDAuNy0yOS40IDUuMyAuNiAxMC40IC44IDE1LjggLjggMzAuNyAwIDU4LjktMTAuNCA4MS40LTI4LTI4LjgtLjYtNTMtMTkuNS02MS4zLTQ1LjUgMTAuMSAxLjUgMTkuMiAxLjUgMjkuNi0xLjItMzAtNi4xLTUyLjUtMzIuNS01Mi41LTY0LjRsMC0uOGM4LjcgNC45IDE4LjkgNy45IDI5LjYgOC4zLTktNi0xNi40LTE0LjEtMjEuNS0yMy42cy03LjgtMjAuMi03LjctMzFjMC0xMi4yIDMuMi0yMy40IDguOS0zMy4xIDMyLjMgMzkuOCA4MC44IDY1LjggMTM1LjIgNjguNi05LjMtNDQuNSAyNC04MC42IDY0LTgwLjYgMTguOSAwIDM1LjkgNy45IDQ3LjkgMjAuNyAxNC44LTIuOCAyOS04LjMgNDEuNi0xNS44LTQuOSAxNS4yLTE1LjIgMjgtMjguOCAzNi4xIDEzLjItMS40IDI2LTUuMSAzNy44LTEwLjItOC45IDEzLjEtMjAuMSAyNC43LTMyLjkgMzQgLjIgMi44IC4yIDUuNyAuMiA4LjV6Il19LGxwZT1nRSxjcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmltIixpY29uOls1MTIsNTEyLFtdLCJlODhhIiwiTTMwMy4zIDU0LjVsMC0xMi4zIDQtMy43IDcuOS03LjIgMy41LTMuMiAxNjggMCAxNS4xIDE1LjEgMCAzOC45LTMuNSAzLjYtODAuOSA4Mi45IDg2LjkgODYuOS05MS4yIDkxLjIgOC45IDAgNy42LTguMyAxLS45YzEuMS0uOCAyLjUtMS4yIDMuOS0xLjJsMjguOSAwIDEuNSAuMmMxLjUgLjQgMi44IDEuMiAzLjggMi41bDcuNiAxMC4yYzEuMyAxLjcgMS42IDMuOSAxIDUuOWwtMjIuMyA3Mi41IDEuMiAwYzIuMiAwIDQuMiAxLjEgNS41IDIuOXMxLjUgNC4xIC43IDYuMUw0NTkgNDQ1Yy0xIDIuNi0zLjQgNC4yLTYuMiA0LjJsLTQwLjQgMGMtMi4xIDAtNC4xLTEtNS4zLTIuN3MtMS42LTMuOS0xLTUuOWwyMC02My4yLTIyLjIgMC0xNi4yIDUwLjdjMi4xIC4xIDQuMSAxLjEgNS4zIDIuOSAxLjIgMS44IDEuNCA0LjIgLjYgNi4ybC0zLjMgNy45Yy0xIDIuNS0zLjUgNC4xLTYuMSA0LjFsLTM2LjggMGMtMi4xIDAtNC4xLTEtNS40LTIuN3MtMS42LTMuOS0xLTUuOWwxMC0zMi4xLTIzLjkgMjMuOGMuMyAxLjIgLjMgMi41LS4xIDMuOGwtMi45IDguNmMtLjkgMi43LTMuNCA0LjUtNi4zIDQuNWwtNy40IDAtNTQuNiA1NC42LTgzLjgtODMuOC0zMS42IDMyLjUtMy42IDMuNy00OS4yIDAtMi44LTEuN2MtOC44LTUuMS0xNC44LTguNS0xNy45LTEwLjNsMC0xMjkuMy01OC41LTU4LjUgMi42LTIuNiA1NS45LTU2IDAtOTkuNC0xMi42IDAtMTAuOC0xMC44LTMuNi0zLjYgMC00MC43IDMuMi0zLjUgNy45LTguNSAzLjctMy45IDE2Ni42IDAgOCA4IDI3LjQtMjcuNCA0Ni40IDQ2LjR6bS0yNTEtNS42bDAgMzAuMyA5LjQgNy44IDE4LjkgMCAwIDM0Ny45IDExLjQgMTAuMyAzOC4yIDAgOTEtOTNjMC0uNCAuMS0uOCAuMi0xLjFsMi42LTEwLjVjLjctMi45IDMuNC01IDYuNC01bDcuMSAwIDE1LjUtMTUuOS0yLTJjLTEuOC0xLjgtMi40LTQuNS0xLjUtNi45bDYuOS0xOS4zYy40LTEuMSAxLjEtMiAxLjktMi44bDYuOS01LjljMS4yLTEgMi44LTEuNiA0LjMtMS42bDE5LjcgMCAxLjMgLjJjLjEgMCAuMSAuMSAuMiAuMWwxOTkuMi0yMDMuNSAwLTI4LjctOC4yLTcuNC0xNTYuMiAwLTcuOCA3LjggMCAzMC41IDguMiA3LjQgMjEgMC0xNDcgMTQ2LjQgMC0xNDYuNiAxNi45IDAgOC43LTguNyAwLTI3LjctNy40LTkuOS0xNTcuNiAwLTggOHpNMjI3LjYgMzUyLjdsMTQuOCAwLTMxLjggOTAuOSA0NS4zIDAgMy05LjYtMTIuNSAwIDMxLjUtOTEuOS00Ny42IDAtMi42IDEwLjV6bTEzNi45IDFsLTE2LjQgMC0xMC41LTEwLjgtMzUuOCAwLTMuMyA5LjggMTEuOCAwLTMwLjUgODkuOSAzOC4xIDAgMi45LTguNi04LjggMCAyMC02MyAzNy44IDAtMjIuMyA3MS42IDM2LjggMCAzLjMtNy45LTguOCAwIDIwLjMtNjQgMzYuMSAwLTIyLjcgNzEuOSA0MC40IDAgMy4zLTguNi0xMC4yIDAgMjUtODEuMS03LjUtMTAuMi0yOC45IDAtOS41IDEwLjUtMTcuNCAwLTkuOS0xMC44LTIzLjMgMC05LjggMTEuMnpNMjYyLjUgMjkzLjZsLTYuOSAxOS4zIDUuMyA1LjMgMjEuMyAwIDUuNi01LjYgNS45LTIwLjMtNC42LTQuNi0xOS43IDAtNi45IDUuOXoiXX0sTmY9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZm9udC1hd2Vzb21lIixpY29uOls1MTIsNTEyLFs2MjUwMSw2MjY5NCwiZm9udC1hd2Vzb21lLWZsYWciLCJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sImYyYjQiLCJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6Il19LGRwZT1OZixwcGU9TmYsYkU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2lyc2luZGhhbmR3ZXJrIixpY29uOls0NDgsNTEyLFsid3NoIl0sImUyZDAiLCJNMTguOSA0NzkuOGw4My40IDAgMC0xMTItODMuNCA0NyAwIDY1em0zMjkgMGw4Mi40IDAgMC02NS04Mi40LTQ3IDAgMTEyem0wLTQ0OGwwIDIxOS44LTEyMy42LTcyLjQtMTIxLjcgNzIuNCAwLTIxOS44LTgzLjcgMCAwIDM2MC44IDIwNS40LTEyMi4zIDIwNiAxMjIuMyAwLTM2MC44LTgyLjMgMHoiXX0saHBlPWJFLHVwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ6b29tIixpY29uOls2NDAsNTEyLFtdLCJlODdiIiwiTTEzNC4yIDMyNi42bC0xMTQuNCAwYy04IDAtMTUuMi00LjgtMTguMy0xMi4yUy4xIDI5OC42IDUuOCAyOTIuOWw3OS4zLTc5LjMtNTYuOCAwQzEyLjcgMjEzLjYgMCAyMDEgMCAxODUuNGwxMDUuNSAwYzggMCAxNS4yIDQuOCAxOC4zIDEyLjJzMS40IDE1LjktNC4zIDIxLjZsLTc5LjMgNzkuMyA2NS43IDBjMTUuNiAwIDI4LjMgMTIuNiAyOC4zIDI4LjN6TTY0MCAyMzguM2MwLTMwLjQtMjQuNy01NS4xLTU1LjEtNTUuMS0xNi4yIDAtMzAuOSA3LjEtNDEgMTguMy0xMC4xLTExLjItMjQuNy0xOC4zLTQxLTE4LjMtMzAuNCAwLTU1LjEgMjQuNy01NS4xIDU1LjFsMCA4OC4zYzE1LjYgMCAyOC4zLTEyLjcgMjguMy0yOC4zbDAtNjBjMC0xNC44IDEyLTI2LjggMjYuOC0yNi44czI2LjggMTIgMjYuOCAyNi44bDAgNjBjMCAxNS42IDEyLjYgMjguMyAyOC4zIDI4LjNsMC04OC4zYzAtMTQuOCAxMi0yNi44IDI2LjgtMjYuOHMyNi44IDEyIDI2LjggMjYuOGwwIDYwYzAgMTUuNiAxMi42IDI4LjMgMjguMyAyOC4zbDAtODguM3pNMjg4LjIgMjU2YTcyLjggNzIuOCAwIDEgMSAxNDUuNSAwIDcyLjggNzIuOCAwIDEgMSAtMTQ1LjUgMHptMTE3LjMgMGE0NC41IDQ0LjUgMCAxIDAgLTg5IDAgNDQuNSA0NC41IDAgMSAwIDg5IDB6bS0yNzQuMSAwYTcyLjggNzIuOCAwIDEgMSAxNDUuNSAwIDcyLjggNzIuOCAwIDEgMSAtMTQ1LjUgMHptMTE3LjMgMGE0NC41IDQ0LjUgMCAxIDAgLTg5IDAgNDQuNSA0NC41IDAgMSAwIDg5IDB6Il19LGZwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjb25mbHVlbmNlIixpY29uOls1MTIsNTEyLFtdLCJmNzhkIiwiTTIuOCA0MTIuMmMtNC41IDcuNi0yLjEgMTcuNSA1LjUgMjIuMmwxMDUuOSA2NS4yYzcuNyA0LjcgMTcuNyAyLjQgMjIuNC01LjMgMC0uMSAuMS0uMiAuMS0uMiA2Ny4xLTExMi4yIDgwLjUtOTUuOSAyODAuOS0uNyA4LjEgMy45IDE3LjggLjQgMjEuNy03LjcgLjEtLjEgLjEtLjMgLjItLjRsNTAuNC0xMTQuMWMzLjYtOC4xLS4xLTE3LjYtOC4xLTIxLjMtMjIuMi0xMC40LTY2LjItMzEuMi0xMDUuOS01MC4zLTI0Ny45LTEyMC42LTMzMC44IDQ1LjctMzczLjEgMTEyLjZ6TTUxMC4yIDEwMC4xYzQuNS03LjYgMi4xLTE3LjUtNS41LTIyLjJMMzk4LjkgMTIuOGMtNy41LTUtMTcuNi0zLjEtMjIuNiA0LjQtLjIgLjMtLjQgLjYtLjYgMS02Ny4zIDExMi42LTgxLjEgOTUuNi0yODAuNiAuOS04LjEtMy45LTE3LjgtLjQtMjEuNyA3LjctLjEgLjEtLjEgLjMtLjIgLjRMMjIuNyAxNDEuM2MtMy42IDguMSAuMSAxNy42IDguMSAyMS4zIDIyLjIgMTAuNCA2Ni4zIDMxLjIgMTA2IDUwLjQgMjQ4IDEyMCAzMzAuOC00NS40IDM3My40LTExMi45eiJdfSxtcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGlnZyIsaWNvbjpbNTEyLDUxMixbXSwiZjFhNiIsIk04MS43IDE3Mi4zbC04MS43IDAgMCAxNzQuNCAxMzIuNyAwIDAtMjUwLjctNTEgMCAwIDc2LjN6bTAgMTMzLjRsLTMwLjggMCAwLTkyLjMgMzAuOCAwIDAgOTIuM3pNMzc4LjkgMTcyLjNsMCAxNzQuNCA4MS44IDAgMCAyOC41LTgxLjggMCAwIDQwLjggMTMzLjEgMCAwLTI0My43LTEzMy4xIDB6bTgxLjggMTMzLjRsLTMwLjggMCAwLTkyLjMgMzAuOCAwIDAgOTIuM3ptLTIzNS42IDQxbDgyLjEgMCAwIDI4LjUtODIuMSAwIDAgNDAuOCAxMzMuMyAwIDAtMjQzLjctMTMzLjMgMCAwIDE3NC40em01MS4yLTEzMy4zbDMwLjggMCAwIDkyLjMtMzAuOCAwIDAtOTIuM3pNMTUzLjMgOTZsNTEuMyAwIDAgNTEtNTEuMyAwIDAtNTF6bTAgNzYuM2w1MS4zIDAgMCAxNzQuNC01MS4zIDAgMC0xNzQuNHoiXX0sZ3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRocmVhZHMiLGljb246WzQ0OCw1MTIsW10sImU2MTgiLCJNMzMxLjUgMjM1LjdjMi4yIC45IDQuMiAxLjkgNi4zIDIuOCAyOS4yIDE0LjEgNTAuNiAzNS4yIDYxLjggNjEuNCAxNS43IDM2LjUgMTcuMiA5NS44LTMwLjMgMTQzLjItMzYuMiAzNi4yLTgwLjMgNTIuNS0xNDIuNiA1M2wtLjMgMGMtNzAuMi0uNS0xMjQuMS0yNC4xLTE2MC40LTcwLjItMzIuMy00MS00OC45LTk4LjEtNDkuNS0xNjkuNmwwLS41QzE3IDE4NC4zIDMzLjYgMTI3LjIgNjUuOSA4Ni4yIDEwMi4yIDQwLjEgMTU2LjIgMTYuNSAyMjYuNCAxNmwuMyAwYzcwLjMgLjUgMTI0LjkgMjQgMTYyLjMgNjkuOSAxOC40IDIyLjcgMzIgNTAgNDAuNiA4MS43bC00MC40IDEwLjhjLTcuMS0yNS44LTE3LjgtNDcuOC0zMi4yLTY1LjQtMjkuMi0zNS44LTczLTU0LjItMTMwLjUtNTQuNi01NyAuNS0xMDAuMSAxOC44LTEyOC4yIDU0LjQtMjYuMiAzMy4zLTM5LjggODEuNS00MC4zIDE0My4yIC41IDYxLjcgMTQuMSAxMDkuOSA0MC4zIDE0My4zIDI4IDM1LjYgNzEuMiA1My45IDEyOC4yIDU0LjQgNTEuNC0uNCA4NS40LTEyLjYgMTEzLjctNDAuOSAzMi4zLTMyLjIgMzEuNy03MS44IDIxLjQtOTUuOS02LjEtMTQuMi0xNy4xLTI2LTMxLjktMzQuOS0zLjcgMjYuOS0xMS44IDQ4LjMtMjQuNyA2NC44LTE3LjEgMjEuOC00MS40IDMzLjYtNzIuNyAzNS4zLTIzLjYgMS4zLTQ2LjMtNC40LTYzLjktMTYtMjAuOC0xMy44LTMzLTM0LjgtMzQuMy01OS4zLTIuNS00OC4zIDM1LjctODMgOTUuMi04Ni40IDIxLjEtMS4yIDQwLjktLjMgNTkuMiAyLjgtMi40LTE0LjgtNy4zLTI2LjYtMTQuNi0zNS4yLTEwLTExLjctMjUuNi0xNy43LTQ2LjItMTcuOGwtLjcgMGMtMTYuNiAwLTM5IDQuNi01My4zIDI2LjNsLTM0LjQtMjMuNmMxOS4yLTI5LjEgNTAuMy00NS4xIDg3LjgtNDUuMWwuOCAwYzYyLjYgLjQgOTkuOSAzOS41IDEwMy43IDEwNy43bC0uMiAuMiAuMSAwem0tMTU2IDY4LjhjMS4zIDI1LjEgMjguNCAzNi44IDU0LjYgMzUuMyAyNS42LTEuNCA1NC42LTExLjQgNTkuNS03My4yLTEzLjItMi45LTI3LjgtNC40LTQzLjQtNC40LTQuOCAwLTkuNiAuMS0xNC40IC40LTQyLjkgMi40LTU3LjIgMjMuMi01Ni4yIDQxLjhsLS4xIC4xeiJdfSx2RT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3cHJlc3NyIixpY29uOls1MTIsNTEyLFsicmVuZGFjdCJdLCJmM2U0IiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDI3LjMgMTY2LjZjLTE1LjIgMzQuNS0zMC40IDY5LTQ1LjYgMTAzLjUtMi40IDUuNS02LjkgOC4yLTEzIDguMi0yMyAwLTQ2IC4xLTY5IDAtNS4xIDAtOC4yIDEuOS0xMC4zIDYuNy0xMC4yIDIzLjYtMjAuNiA0Ny0zMSA3MC41LTEuNSAzLjUtNC4xIDUuMy03LjkgNS4zLTQ1LjkgMC05MS45IDAtMTM3LjggMC0zLjEgMC01LjYtMS4xLTcuNy0zLjQtMTEuMi0xMi4zLTIyLjUtMjQuNi0zMy43LTM2LjktMi43LTMtMi44LTYuMi0xLjItOS43IDguNy0xOS41IDE3LjMtMzkuMSAyNS45LTU4LjcgMTIuOS0yOS40IDI1LjktNTguNyAzOC43LTg4LjEgMS43LTMuOSA0LjMtNS43IDguNS01LjcgMTQuMiAuMSAyOC41IDAgNDIuNyAwIDYuMiAwIDkuMiA0LjggNi43IDEwLjYtMTMuNiAzMC44LTI3LjIgNjEuNi00MC43IDkyLjMtNS43IDEzLTExLjQgMjYtMTcuMSAzOS0zLjkgOSA3LjEgMTIgMTEgNS42IC4yLS40LTEuNCA0LjIgMzAtNjcuNyAxLjQtMy4xIDMuNC00LjQgNi44LTQuNCAxNS4yIC4xIDMwLjQgMCA0NS42IDAgNS42IDAgNy45IDMuNiA1LjcgOC43LTguMyAxOS0xNi43IDM3LjktMjUgNTYuOS01IDExLjQgOC4xIDEyLjUgMTEuMyA1LjMgMC0uMSAyNy45LTYzLjMgMzIuMi03My4yIDItNC42IDUuNC02LjUgMTAuMy02LjUgMjYuNCAuMSA1Mi45IDAgNzkuMyAwIDEyLjQgMCAxMy45LTEzLjYgMy45LTEzLjYtMjUuMyAwLTUwLjUgMC03NS44IDAtNi4zIDAtNy44LTIuNS01LjMtOC4zIDUuOC0xMy4xIDExLjYtMjYuMSAxNy4zLTM5LjIgMS43LTQgNC41LTUuOCA4LjgtNS44IDIzLjEgLjEgMjYgMCAxMzAuOCAwIDYuMSAwIDggMi44IDUuNiA4LjN6Il19LGJwZT12RSx2cGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToieW9hc3QiLGljb246WzQ0OCw1MTIsW10sImYyYjEiLCJNOTEuMyA3NmwxODYgMC03IDE4LjktMTc5IDBjLTM5LjcgMC03MS45IDMxLjYtNzEuOSA3MC4zbDAgMjA1LjRjMCAzNS40IDI0LjkgNzAuMyA4NCA3MC4zbDAgMTkuMS0xMi4xIDBDNDEuMiA0NjAgMCA0MTkuOCAwIDM3MC41TDAgMTY1LjJDMCAxMTUuOSA0MC43IDc2IDkxLjMgNzZ6TTMyMC40IDIwbDY2LjUgMGMtMTQzLjggMzc4LjEtMTQ1LjcgMzk4LjktMTg0LjcgNDM5LjMtMjAuOCAyMS42LTQ5LjMgMzEuNy03OC4zIDMyLjdsMC01MS4xYzQ5LjItNy43IDY0LjYtNDkuOSA2NC42LTc1LjMgMC0yMC4xIC42LTEyLjYtODIuMS0yMjMuMmw2MS40IDAgNTAuNCAxNTYuNiAxMDIuMi0yNzl6TTQ0OCAxNjEuNWwwIDI5OC41LTIxNCAwYzYuNi05LjYgMTAuNy0xNi4zIDEyLjEtMTkuNGwxODIuNSAwIDAtMjc5LjFjMC0zMi41LTE3LjEtNTEuOS00OC4yLTYyLjlMMzg3LjEgODFjNDEuNyAxMy42IDYwLjkgNDMuMSA2MC45IDgwLjV6Il19LHlwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJuaW1ibHIiLGljb246WzM4NCw1MTIsW10sImY1YTgiLCJNMjQ2LjYgMzUzLjNhMjcgMjcgMCAxIDEgMC01NCAyNyAyNyAwIDEgMSAwIDU0em0tNzkuNC0yN2EyNy4xIDI3LjEgMCAxIDEgLTU0LjMgMCAyNy4xIDI3LjEgMCAxIDEgNTQuMyAwek0xOTEuOCAxNTlDMTU3IDE1OSA4OS40IDE3OC44IDU5LjIgMjI3TDE0IDAgMTQgMzM1LjVDMTQgNDMzLjEgOTMuNiA1MTIgMTkxLjggNTEyUzM2OS41IDQzMyAzNjkuNSAzMzUuNSAyOTAuMSAxNTkgMTkxLjggMTU5em0wIDMwOC4xYy03My4zIDAtMTMyLjUtNTguOS0xMzIuNS0xMzEuNnM1OS4yLTEzMS42IDEzMi41LTEzMS42IDEzMi41IDU4LjkgMTMyLjUgMTMxLjUtNTkuMyAxMzEuNi0xMzIuNSAxMzEuNmwwIC4xeiJdfSx4cGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGl4ZWxmZWQiLGljb246WzUxMiw1MTIsW10sImU3ZGIiLCJNMjU2IDBhMjU2IDI1NiAwIDEgMSAwIDUxMiAyNTYgMjU2IDAgMSAxIDAtNTEyek0yMzUuNyAzMTEuOWw0NyAwYzQ0LjIgMCA4MC4xLTM0LjkgODAuMS03OHMtMzUuOS03OC04MC4xLTc4bC02Ny44IDBjLTI1LjUgMC00Ni4yIDIwLjEtNDYuMiA0NWwwIDE3NS4xIDY3LTY0LjF6Il19LHdwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5YWhvbyIsaWNvbjpbNTEyLDUxMixbXSwiZjE5ZSIsIk0yMjMuOCAxNDEuMWwtNTYuNyAxNDMuMi01Ni0xNDMuMi05Ni4xIDAgMTA1LjggMjQ5LjEtMzguNiA4OS44IDk0LjIgMCAxNDAuOS0zMzguOS05My42IDB6TTMyOS4yIDI3Ni45YTU4LjIgNTguMiAwIDEgMCAwIDExNi40IDU4LjIgNTguMiAwIDEgMCAwLTExNi40ek0zOTQuNyAzMmwtOTMgMjIzLjUgMTA0LjggMCA5Mi42LTIyMy41LTEwNC40IDB6Il19LE1wZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibHVlc2t5IixpY29uOls1NzYsNTEyLFtdLCJlNjcxIiwiTTQwNy44IDI5NC43Yy0zLjMtLjQtNi43LS44LTEwLTEuMyAzLjQgLjQgNi43IC45IDEwIDEuM3pNMjg4IDIyNy4xQzI2MS45IDE3Ni40IDE5MC45IDgxLjkgMTI0LjkgMzUuMyA2MS42LTkuNCAzNy41LTEuNyAyMS42IDUuNSAzLjMgMTMuOCAwIDQxLjkgMCA1OC40UzkuMSAxOTQgMTUgMjEzLjljMTkuNSA2NS43IDg5LjEgODcuOSAxNTMuMiA4MC43IDMuMy0uNSA2LjYtLjkgMTAtMS40LTMuMyAuNS02LjYgMS0xMCAxLjQtOTMuOSAxNC0xNzcuMyA0OC4yLTY3LjkgMTY5LjkgMTIwLjMgMTI0LjYgMTY0LjgtMjYuNyAxODcuNy0xMDMuNCAyMi45IDc2LjcgNDkuMiAyMjIuNSAxODUuNiAxMDMuNCAxMDIuNC0xMDMuNCAyOC4xLTE1Ni02NS44LTE2OS45LTMuMy0uNC02LjctLjgtMTAtMS4zIDMuNCAuNCA2LjcgLjkgMTAgMS4zIDY0LjEgNy4xIDEzMy42LTE1LjEgMTUzLjItODAuNyA1LjktMTkuOSAxNS0xMzguOSAxNS0xNTUuNXMtMy4zLTQ0LjctMjEuNi01Mi45Yy0xNS44LTcuMS00MC0xNC45LTEwMy4yIDI5LjgtNjYuMSA0Ni42LTEzNy4xIDE0MS4xLTE2My4yIDE5MS44eiJdfSx6cGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2NyaWJkIixpY29uOlszODQsNTEyLFtdLCJmMjhhIiwiTTQyLjYgMjUyLjdjLTE2LjEtMTktMjQuNy00NS45LTI0LjgtNzkuOSAwLTEwMC40IDc1LjItMTUzLjEgMTY3LjItMTUzLjEgOTguNi0xLjYgMTU2LjggNDkgMTg0LjMgNzAuNmwtNTAuNSA3Mi4xLTM3LjMtMjQuNiAyNi45LTM4LjZjLTM2LjUtMjQtNzkuNC0zNi41LTEyMy0zNS44LTUwLjctLjgtMTExLjcgMjcuMi0xMTEuNyA3Ni4yIDAgMTguNyAxMS4yIDIwLjcgMjguNiAxNS42IDIzLjMtNS4zIDQxLjkgLjYgNTUuOCAxNCAyNi40IDI0LjMgMjMuMiA2Ny42LS43IDkxLjktMjkuMiAyOS41LTg1LjIgMjcuMy0xMTQuOC04LjR6bTMxNy43IDUuOWMtMTUuNS0xOC44LTM4LjktMjkuNC02My4yLTI4LjYtMzguMS0yLTcxLjEgMjgtNzAuNSA2Ny4yLS43IDE2LjggNiAzMyAxOC40IDQ0LjMgMTQuMSAxMy45IDMzIDE5LjcgNTYuMyAxNC40IDE3LjQtNS4xIDI4LjYtMy4xIDI4LjYgMTUuNiAwIDQuMy0uNSA4LjUtMS40IDEyLjctMTYuNyA0MC45LTU5LjUgNjQuNC0xMjEuNCA2NC40LTUxLjkgLjItMTAyLjQtMTYuNC0xNDQuMS00Ny4zbDMzLjctMzkuNC0zNS42LTI3LjQtNjAuOCA3MS44IDE1LjQgMTMuOGM1Mi41IDQ2LjggMTIwLjQgNzIuNSAxOTAuNyA3Mi4yIDUxLjQgMCA5NC40LTEwLjUgMTMzLjYtNDQuMSA1Ny4xLTUxLjQgNTQuMi0xNDkuMiAyMC4zLTE4OS42eiJdfSxrcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1wZCIsaWNvbjpbNTEyLDUxMixbXSwiZjRlYyIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgNDQ5LjVjLTEzOS4yIDAtMjM1LjgtMTM4LTE5MC4yLTI2Ny45bDc4LjggMzUuMWMtMi4xIDEwLjUtMy4zIDIxLjUtMy4zIDMyLjkgMCA5OSA3My45IDEyNi45IDEyMC40IDEyNi45IDIyLjkgMCA1My41LTYuNyA3OS40LTI5LjVMMzA1IDMxMS4xYy01LjUgNi4zLTE3LjYgMTYuNy0zNi4zIDE2LjctMzcuOCAwLTUzLjctMzkuOS01My45LTcxLjkgMjMwLjQgMTAyLjYgMjE2LjUgOTYuNSAyMTcuOSA5Ni44LTM0LjMgNjIuNC0xMDAuNiAxMDQuOC0xNzYuNyAxMDQuOHptMTk0LjItMTUwbC0yMjQtMTAwYzE4LjgtMzQgNTQuOS0zMC43IDc0LjctMTFsNDAuNC00MS42Yy0yNy4xLTIzLjMtNTgtMjcuNS03OC4xLTI3LjUtNDcuNCAwLTgwLjkgMjAuNS0xMDAuNyA1MS42TDg3LjYgMTQ1LjZjMzYuMS01NC45IDk4LjEtOTEuMiAxNjguNS05MS4yIDExMS4xIDAgMjAxLjUgOTAuNCAyMDEuNSAyMDEuNSAwIDE4LTIuNCAzNS40LTYuOCA1Mi0uMy0uMS0uNC0uMi0uNi0uNHoiXX0sU3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImVhcmx5YmlyZHMiLGljb246WzUxMiw1MTIsW10sImYzOWEiLCJNMzI5LjMgNDcuNWMxLjItMTMgMjEuMy0xNCAzNi42LTguNyAuOSAuMyAyNi4yIDkuNyAxOSAxNS4yLTI3LjktNy40LTU2LjQgMTguMi01NS42LTYuNXptLTIwMSA2LjljMzAuNy04LjEgNjIgMjAgNjEuMS03LjEtMS4zLTE0LjItMjMuNC0xNS4zLTQwLjItOS42LTEgLjMtMjguNyAxMC41LTIwLjkgMTYuN3pNMzM1LjUgMTYwYTE2IDE2IDAgMSAwIDAgMzIgMTYgMTYgMCAxIDAgMC0zMnptLTE1OS43IDBhMTYgMTYgMCAxIDAgMCAzMiAxNiAxNiAwIDEgMCAwLTMyek00OTQuMyAzMjMuMmMtOS45IDI0LTQwLjcgMTEtNjMuOS0xLjItMTMuNSA2OS4xLTU4LjEgMTExLjQtMTI2LjMgMTI0LjIgLjMgLjktMi0uMSAyNCAxIDMzLjYgMS40IDYzLjgtMy4xIDk3LjQtOC0xOS44LTEzLjgtMTEuNC0zNy4xLTkuOC0zOC4xIDEuNC0uOSAxNC43IDEuNyAyMS42IDExLjUgOC42LTEyLjUgMjguNC0xNC44IDMwLjItMTMuNiAxLjYgMS4xIDYuNiAyMC45LTYuOSAzNC42IDQuNy0uOSA4LjItMS42IDkuOC0yLjEgMi42LS44IDE3LjcgMTEuMyAzLjEgMTMuMy0xNC4zIDIuMy0yMi42IDUuMS00Ny4xIDEwLjgtNDUuOSAxMC43LTg1LjkgMTEuOC0xMTcuNyAxMi44bDEgMTEuNmMzLjggMTguMS0yMy40IDI0LjMtMjcuNiA2LjIgLjggMTcuOS0yNy4xIDIxLjgtMjguNC0xbC0uNSA1LjNjLS43IDE4LjQtMjguNCAxNy45LTI4LjMtLjYtNy41IDEzLjUtMjguMSA2LjgtMjYuNC04LjVsMS4yLTEyLjRjLTM2LjcgLjktNTkuNyAzLjEtNjEuOCAzLjEtMjAuOSAwLTIwLjktMzEuNiAwLTMxLjYgMi40IDAgMjcuNyAxLjMgNjMuMiAyLjgtNjEuMS0xNS41LTEwMy43LTU1LTExNC45LTExOC4yLTI1IDEyLjgtNTcuNSAyNi44LTY4LjIgLjgtMTAuNS0yNS40IDIxLjUtNDIuNiA2Ni44LTczLjQgLjctNi42IDEuNi0xMy4zIDIuNy0xOS44LTE0LjQtMTkuNi0xMS42LTM2LjMtMTYuMS02MC40LTE2LjggMi40LTIzLjItOS4xLTIzLjYtMjMuMSAuMy03LjMgMi4xLTE0LjkgMi40LTE1LjQgMS4xLTEuOCAxMC4xLTIgMTIuNy0yLjYgNi0zMS43IDUwLjYtMzMuMiA5MC45LTM0LjUgMTkuNy0yMS44IDQ1LjItNDEuNSA4MC45LTQ4LjMtMTUuMy0xOS40LTMuNC0zOS45LTIuNC00MC40IDEuNy0uOCAyMS4yIDQuMyAyNi4zIDIzLjIgNS4yLTguOCAxOC4zLTExLjQgMTkuNi0xMC43IDEuMSAuNiA2LjQgMTUtNC45IDI1LjkgNDAuMyAzLjUgNzIuMiAyNC43IDk2IDUwLjcgMzYuMSAxLjUgNzEuOCA1LjkgNzcuMSAzNCAyLjcgLjYgMTEuNiAuOCAxMi43IDIuNiAuMyAuNSAyLjEgOC4xIDIuNCAxNS40LS41IDEzLjktNi44IDI1LjQtMjMuNiAyMy4xLTMuMiAxNy4zLTIuNyAzMi45LTguNyA0Ny43IDIuNCAxMS43IDQgMjMuOCA0LjggMzYuNCAzNyAyNS40IDcwLjMgNDIuNSA2MC4zIDY2Ljl6TTIyMy41IDE1OS45Yy45LTQ0LTM3LjktNDIuMi03OC42LTQwLjMtMjEuNyAxLTM4LjkgMS45LTQ1LjUgMTMuOS0xMS40IDIwLjkgNS45IDkyLjkgMjMuMiAxMDEuMiA5LjggNC43IDczLjQgNy45IDg2LjMtNy4xIDguMi05LjQgMTUtNDkuNCAxNC42LTY3Ljd6bTUyIDU4LjNjLTQuMy0xMi40LTYtMzAuMS0xNS4zLTMyLjctMi0uNS05LS41LTExIDAtMTAgMi44LTEwLjggMjIuMS0xNyAzNy4yIDE1LjQgMCAxOS4zIDkuNyAyMy43IDkuNyA0LjMgMCA2LjMtMTEuMyAxOS42LTE0LjJ6bTEzNS43LTg0LjdjLTYuNi0xMi4xLTI0LjgtMTIuOS00Ni41LTEzLjktNDAuMi0xLjktNzguMi0zLjgtNzcuMyA0MC4zLS41IDE4LjMgNSA1OC4zIDEzLjIgNjcuOCAxMyAxNC45IDc2LjYgMTEuOCA4Ni4zIDcuMSAxNS44LTcuNiAzNi41LTc4LjkgMjQuMy0xMDEuM3oiXX0sQ3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN5bWZvbnljYXN0cyIsaWNvbjpbNTc2LDUxMixbXSwiZThhYiIsIk0yOTMuOCAzNDIuNWMzLjQtMS41IDYuOC0xLjUgMTAuMiAwbDU0LjIgMjIuNmMyLjYgLjkgNC43IDIuNiA2LjIgNC44czIuMyA0LjggMi4zIDcuNmMwIDE5LjQtMy42IDM3LjItMTAuNyA1My40LTYuMiAxMy42LTE0LjUgMjUuNC0yNC44IDM1LjYtOC43IDguNS0xNy43IDE0LjYtMjcuMSAxOC40LTMuNCAxLjUtNi44IDEuNS0xMC4yIDAtMTAuNy00LjMtMjAuNi0xMS4zLTI5LjctMjAuOS0xMC0xMC40LTE3LjgtMjIuNS0yMy41LTM2LjQtNi40LTE1LjYtOS42LTMyLjMtOS42LTUwIDAtMi44IC43LTUuNCAyLjItNy42IDEuNS0yLjMgMy42LTMuOSA2LjItNC44bDU0LjItMjIuNnpNNDc5LjcgNDgzLjhhNzAuMSA3MC4xIDAgMSAxIDAtMTQwLjIgNzAuMSA3MC4xIDAgMSAxIDAgMTQwLjJ6TTI0NC42IDM3Ny42YzAgMTUuMyAyLjYgMjkuNyA3LjkgNDMuMiA0LjkgMTIuNCAxMS42IDIzLjMgMjAuMSAzMi41IDguMSA4LjkgMTYuOSAxNS4zIDI2LjMgMTkuMiA5LjItMy44IDE3LjgtMTAgMjUuNy0xOC43IDguNy05LjIgMTUuNC0xOS45IDIwLjMtMzIuMiA1LjUtMTMuNyA4LjItMjguNCA4LjItNDQuMWwtNTQuMi0yMi42LTU0LjIgMjIuNnptMjM1LjEtMjAuM2E1Ni41IDU2LjUgMCAxIDAgMCAxMTMgNTYuNSA1Ni41IDAgMSAwIDAtMTEzem0tMzUyLjggMi4zYzQuMSAwIDcuNiAxLjMgMTAuNCAzLjkgMi44IDIuNiA0LjIgNS45IDQuMiA5LjZsMCAxNi40IDMxLjEtMTkuMmMxLjUtMS4xIDMuMi0xLjcgNS4xLTEuNyAyLjQgMCA0LjYgLjggNi4zIDIuNXMyLjcgMy44IDIuNyA2LjJsMCA3Mi42YzAgMi42LS45IDQuOC0yLjcgNi41cy0zLjkgMi41LTYuMyAyLjVjLTEuOSAwLTMuNi0uNi01LjEtMS43bC0zMS4xLTE5LjIgMCAxNi40YzAgMy44LTEuNCA3LTQuMiA5LjZzLTYuMyA0LTEwLjQgNGwtODguMiAwYy00LjEgMC03LjYtMS4zLTEwLjUtNHMtNC4yLTUuOC00LjItOS42bDAtODEuM2MwLTMuOCAxLjQtNyA0LjItOS42czYuMy0zLjkgMTAuNS0zLjlsODguMiAwem0xNzIgOTcuOGMtMTEuMy03LTIwLjQtMTYuNC0yNy40LTI4LjMtNy41LTEyLjQtMTEuOS0yNi42LTEzLTQyLjRsNDAuNC0xNyAwIDg3LjZ6TTM3LjUgMzczLjRsMCA4MC44Yy4yIC4yIC42IC4zIDEuMiAuM2w4OC4yIDBjLjQgMCAuNy0uMSAxLjEtLjNsMC04MC44Yy0uMi0uMi0uNi0uMy0xLjItLjNsLTg4LjEgMGMtLjQgMC0uOCAuMS0xLjIgLjN6bTQxOC40IDUuMWMyLjMtMS4zIDQuNS0xLjMgNi44IDBsNDkuOCAzMC4yYzIuMyAxLjMgMy40IDMuMyAzLjQgNS45cy0xLjEgNC42LTMuNCA1LjlsLTQ5LjggMjguNmMtMi4zIDEuMy00LjUgMS4zLTYuOCAwcy0zLjQtMy4zLTMuNC01LjlsMC01OC44YzAtMi42IDEuMS00LjYgMy40LTUuOXpNMTQxLjUgNDA1LjVsMCAxNi40IDMxLjcgMTkuOCAwLTU2LTMxLjcgMTkuOHpNNDUxLjEgNS4yYzM1LjgtMS4yIDYyLjkgMTUuMSA2My44IDQwLjggLjQgMTAuOS01LjkgMzIuMi0yNy44IDMzLTE2LjMgLjYtMjcuNi05LjItMjguMS0yNC4xLS4yLTUuNCAxLjItMTAuMiA0LjktMTUuOCAzLjYtNy4xIDQuNC03LjkgNC4zLTExLS4zLTkuNC0xNC41LTkuNy0xOC4zLTkuNS01MyAxLjgtNjYuOSA3My4zLTc4LjIgMTMxLjVsLTUuNiAzMC43YzMwLjUgNC41IDUyLjItMSA2NC4yLTguOCAxNy0xMS00LjgtMjIuNC0yLTM1IDIuOC0xMi44IDE0LjQtMTkgMjMuNy0xOS4yIDEyLjktLjMgMjIuMiAxMy4xIDIxLjkgMjYuNy0uNSAyMi42LTMwLjQgNTMuNi05MC4yIDUyLjMtNy4zLS4yLTE0LS43LTIwLjItMS40bC0xMS4zIDYyLjNjLTMgMTQtNi4zIDI5LjUtMTAuNyA0NS44bDIwNCAwIC45IC4xYy4zIC4xIC42IC4xIC44IC4yIDIuMiAuNiA0IDIuNSA0LjUgNC44IC42IDIuOC0xIDYtMy43IDcuMi0uNSAuMi0xLjEgLjQtMS43IC41LS4zIDAtLjYgMC0uOSAuMWwtNTE1LjMgMGMtLjctLjEtLjkgMC0xLjctLjItMi41LS43LTQuNC0zLjEtNC42LTUuNy0uMi0yLjMgMS00LjYgMy01LjggLjctLjUgMS42LS44IDIuNC0uOSAuMyAwIC42IDAgLjgtLjFsNDguNCAwYy0xNy4yLTE2LjgtMjAtMzcuMi0xNi01MC41IDUuNC0xNy42IDE5LjQtMjAuOSAzMy0xNi43IDE0LjYgNC41IDIwLjMgMjIuMyAxNi4yIDM2LS41IDEuNS0xLjIgMy45LTIuOCA3LjItMS43IDMuOC00LjggNy4xLTYuMiAxMS41LTEuNSA0LjkgLjcgOS4xIDQuNSAxMi42bDU4LjkgMGM0LjItNCA3LjQtOSA5LjEtMTQuNiA1LjMtMTctNS41LTI4LjktMTAtMzMuNWwtMjEuNy0yMy4yYy05LjktMTEuMS0zMS43LTQxLjktMjEuMS03Ni41IDQuMS0xMy40IDEyLjgtMjcuNSAyNS4zLTM2LjkgMjYuNS0xOS43IDU1LjMtMjMgODIuNy0xNS4xIDM1LjUgMTAuMiA1Mi41IDMzLjcgNzQuNiA1MS44IDEyLjQtMzYuMyAyOS41LTcxLjkgNTUuMy0xMDEuOSAyMy4zLTI3LjMgNTQuNi00Ny4xIDkwLjQtNDguM3pNMjI5LjYgMTIxLjNjLTIyLjItNi0zNS43LS45LTQ1LjIgMTEuMi0xMS4zIDE0LjMtNy41IDMyLjggMy4zIDQzLjdsMTggMTkuOWMyMiAyNS41IDM0LjEgNDUuMyAyOS42IDcyLTIuMiAxMy4xLTguNSAyNS4yLTE3LjkgMzUuM2w1NC4yIDBjMS01LjEgMi0xMC40IDMuMS0xNS44bDMuNi0yMS45YzUuOS0yOS40IDEyLjQtNjIuMiAyMi4zLTk0LjgtMjQuMS0xOC4xLTM4LjUtNDAuNy03MC45LTQ5LjV6Il19LHlFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1vZG5va2xhc3NuaWtpIixpY29uOls0NDgsNTEyLFsib2Rub2tsYXNzbmlraS1zcXVhcmUiXSwiZjI2NCIsIk0yMjQgMTM3LjFjLTUuNC0uMy0xMC44IC42LTE1LjkgMi40cy05LjcgNC44LTEzLjYgOC41LTcgOC4yLTkuMiAxMy4yLTMuMiAxMC4zLTMuMiAxNS43IDEuMSAxMC44IDMuMiAxNS43IDUuMyA5LjUgOS4yIDEzLjIgOC42IDYuNiAxMy42IDguNSAxMC41IDIuNyAxNS45IDIuNGM1LjQgLjMgMTAuOC0uNiAxNS45LTIuNHM5LjctNC44IDEzLjYtOC41IDctOC4yIDkuMi0xMy4yIDMuMi0xMC4zIDMuMi0xNS43LTEuMS0xMC44LTMuMi0xNS43LTUuMy05LjUtOS4yLTEzLjItOC42LTYuNi0xMy42LTguNS0xMC41LTIuNy0xNS45LTIuNHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCAyNThhODEgODEgMCAxIDEgMC0xNjIuMSA4MSA4MSAwIDEgMSAwIDE2Mi4xem01OS4zIDYuMmMxNi44LTEzLjIgMjkuNS01LjUgMzQuMSAzLjYgNy44IDE2LTEuMSAyMy43LTIxLjUgMzctMTcuMSAxMC45LTQwLjcgMTUuMi01Ni4yIDE2LjhsMTMgMTIuOSA0Ny43IDQ3LjdjMTcuNCAxNy45LTExIDQ1LjgtMjguNiAyOC42LTEyLTEyLjItMjkuNS0yOS43LTQ3LjctNDcuOWwtNDcuNyA0Ny45Yy0xNy43IDE3LjItNDYtMTEtMjguNC0yOC42IDMuNy0zLjcgNy45LTcuOSAxMi41LTEyLjUgMTAuNC0xMC40IDIyLjYtMjIuNyAzNS4yLTM1LjJsMTIuOS0xMi45Yy0xNS40LTEuNi0zOS4zLTUuNy01Ni42LTE2LjgtMjAuMy0xMy4zLTI5LjMtMjAuOS0yMS40LTM3IDQuNi05LjEgMTcuMy0xNi44IDM0LjEtMy42IDAgMCAyMi43IDE4IDU5LjMgMThzNTkuMy0xOCA1OS4zLTE4eiJdfSxfcGU9eUUsVHBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1hcmtkb3duIixpY29uOls2NDAsNTEyLFtdLCJmNjBmIiwiTTU5My44IDU5LjFsLTU0Ny42IDBDMjAuNyA1OS4xIDAgNzkuOCAwIDEwNS4yTDAgNDA2LjdjMCAyNS41IDIwLjcgNDYuMiA0Ni4yIDQ2LjJsNTQ3LjcgMGMyNS41IDAgNDYuMi0yMC43IDQ2LjEtNDYuMWwwLTMwMS42YzAtMjUuNC0yMC43LTQ2LjEtNDYuMi00Ni4xek0zMzguNSAzNjAuNmwtNjEuNSAwIDAtMTIwLTYxLjUgNzYuOS02MS41LTc2LjkgMCAxMjAtNjEuNyAwIDAtMjA5LjIgNjEuNSAwIDYxLjUgNzYuOSA2MS41LTc2LjkgNjEuNSAwIDAgMjA5LjIgLjIgMHptMTM1LjMgMy4xbC05Mi4zLTEwNy43IDYxLjUgMCAwLTEwNC42IDYxLjUgMCAwIDEwNC42IDYxLjUgMC05Mi4yIDEwNy43eiJdfSxMcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHlwbzMiLGljb246WzQ0OCw1MTIsW10sImY0MmIiLCJNMTc4LjcgNzguNGMwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMSAwIDEwMy41IDEwNi44IDMzNy41IDE4NC4xIDMzNy41IDM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5LTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOXpNMzAxLjUgMzJjLTMwLjEgMC00MS43IDUuNC00MS43IDM2LjMgMCA2Ni40IDUzLjggMTk4LjUgMTAxLjcgMTk4LjUgMjYuMyAwIDc4LjgtOTkuNyA3OC44LTE4Mi4zIDAtNDAuOS02Ny01Mi41LTEzOC44LTUyLjV6Il19LCRwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqb29tbGEiLGljb246WzQ0OCw1MTIsW10sImYxYWEiLCJNLjYgOTIuMWMwLTMzLjMgMjYuOC02MC4xIDU5LjgtNjAuMSAzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMSAuNiA5Ni41IDMwbC00NC4zIDQ0LjNjLTIwLjUtMjAuNS00Mi42LTE2LjMtNTUuNC0zLjUtMTQuMyAxNC4zLTE0LjMgMzcuOSAwIDUyLjJsOTkuNSA5OS41LTQ0IDQ0LjNjLTg3LjctODcuMi00OS43LTQ5LjctOTkuOC05OS43LTI2LjgtMjYuNS0zNS02NC44LTI0LjgtOTguOS0yNi45LTUuOC00Ni43LTI5LjctNDYuNy01OC4zek0xMzAuMSAyMDguNWw0NC4zIDQ0LjNjMTAtMTAgODkuNy04OS43IDk5LjctOTkuOCAxNC4zLTE0LjMgMzcuNi0xNC4zIDUxLjkgMCAxMi44IDEyLjggMTcgMzUtMy41IDU1LjRsNDQgNDQuM2MzMS4yLTMxLjIgMzguNS02Ny42IDI4LjktMTAxLjIgMjkuMi00LjEgNTEuOS0yOS4yIDUxLjktNTkuNSAwLTMzLjItMjYuOC02MC4xLTU5LjgtNjAuMS0zMC4zIDAtNTUuNCAyMi41LTU5LjUgNTEuNi0zMy44LTkuOS03MS43LTEuNS05OC4zIDI1LjEtMTguMyAxOS4xLTcxLjEgNzEuNS05OS42IDk5Ljl6TTM5Ni40IDM2MC43YzguMi0zMi43LS45LTY4LjUtMjYuMy05My45LTExLjgtMTIuMiA1IDQuNy05OS41LTk5LjdsLTQ0LjMgNDQuMyA5OS43IDk5LjdjMTQuMyAxNC4zIDE0LjMgMzcuNiAwIDUxLjktMTIuOCAxMi44LTM1IDE3LTU1LjQtMy41bC00NCA0NC4zYzI3LjYgMzAuMiA2OCAzOC44IDEwMi43IDI4IDUuNSAyNy40IDI5LjcgNDguMSA1OC45IDQ4LjEgMzMgMCA1OS44LTI2LjggNTkuOC02MC4xIDAtMzAuMi0yMi41LTU1LTUxLjYtNTkuMXptLTg0LjMtNTMuMWwtNDQtNDQuM2MtODcgODYuNC01MC40IDUwLjQtOTkuNyA5OS44LTE0LjMgMTQuMy0zNy42IDE0LjMtNTEuOSAwLTEzLjEtMTMuNC0xNi45LTM1LjMgMy4yLTU1LjRsLTQ0LTQ0LjNjLTMwLjIgMzAuMi0zOCA2NS4yLTI5LjUgOTguMy0yNi43IDYtNDYuMiAyOS45LTQ2LjIgNTguMiAwIDMzLjMgMjYuOCA2MC4xIDU5LjggNjAuMSAyOC42IDAgNTIuNS0xOS44IDU4LjYtNDYuNyAzMi43IDguMiA2OC41LS42IDk0LjItMjYgMzIuMS0zMiAxMi4yLTEyLjQgOTkuNS05OS43eiJdfSxBcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2VpeGluIixpY29uOls1NzYsNTEyLFtdLCJmMWQ3IiwiTTM4NS4yIDE2Ny42YzYuNCAwIDEyLjYgLjMgMTguOCAxLjEtMTYuNi03OC40LTEwMC43LTEzNi43LTE5Ni4zLTEzNi43LTEwNy4yIDAtMTk0LjcgNzIuOC0xOTQuNyAxNjUuNCAwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6TTI4MC43IDExNC43YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yIC4xLTE0LjcgMTQuNi0yNC40IDI5LjMtMjQuNHpNMTQ0LjMgMTYzLjNjLTE0LjUgMC0yOS4zLTkuNy0yOS4zLTI0LjIgMC0xNC44IDE0LjgtMjQuNCAyOS4zLTI0LjQgMTQuOCAwIDI0LjQgOS43IDI0LjQgMjQuNCAwIDE0LjYtOS42IDI0LjItMjQuNCAyNC4yek01NjMgMzE5LjRjMC03Ny45LTc3LjktMTQxLjMtMTY1LjQtMTQxLjMtOTIuNyAwLTE2NS40IDYzLjQtMTY1LjQgMTQxLjNTMzA1IDQ2MC43IDM5Ny42IDQ2MC43YzE5LjMgMCAzOC45LTUuMSA1OC42LTkuOWw1My40IDI5LjMtMTQuOC00OC42QzUzNCA0MDIuMSA1NjMgMzYzLjIgNTYzIDMxOS40ek0zNDMuOSAyOTQuOWMtOS43IDAtMTkuMy05LjctMTkuMy0xOS42IDAtOS43IDkuNy0xOS4zIDE5LjMtMTkuMyAxNC44IDAgMjQuNCA5LjcgMjQuNCAxOS4zIDAgMTAtOS43IDE5LjYtMjQuNCAxOS42em0xMDcuMSAwYy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjUgMCAyNC40IDkuNyAyNC40IDE5LjMgLjEgMTAtOS45IDE5LjYtMjQuNCAxOS42eiJdfSxEcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3J1bnQiLGljb246WzM4NCw1MTIsW10sImYzYWQiLCJNNjEuNiAxODkuM2MtMS4xIDEwIDUuMiAxOS4xIDUuMiAxOS4xIC43LTcuNSAyLjItMTIuOCA0LTE2LjYgLjQgMTAuMyAzLjIgMjMuNSAxMi44IDM0LjEgNi45IDcuNiAzNS42IDIzLjMgNTQuOSA2LjEgMSAyLjQgMi4xIDUuMyAzIDguNSAyLjkgMTAuMy0yLjcgMjUuMy0yLjcgMjUuM3MxNS4xLTE3LjEgMTMuOS0zMi41YzEwLjgtLjUgMjEuNC04LjQgMjEuMS0xOS41IDAgMC0xOC45IDEwLjQtMzUuNS04LjgtOS43LTExLjItNDAuOS00Mi04My4xLTMxLjggNC4zIDEgOC45IDIuNCAxMy41IDQuMWwtLjEgMGMtNC4yIDItNi41IDcuMS03IDEyem0yOC4zLTEuOGMxOS41IDExIDM3LjQgMjUuNyA0NC45IDM3LTUuNyAzLjMtMjEuNyAxMC40LTM4LTEuNy0xMC4zLTcuNi05LjgtMjYuMi02LjktMzUuM3pNMjMyIDIzMy4zYy0xLjIgMTUuNSAxMy45IDMyLjUgMTMuOSAzMi41cy01LjYtMTUtMi43LTI1LjNjLjktMy4yIDItNiAzLTguNSAxOS4zIDE3LjMgNDggMS41IDU0LjgtNi4xIDkuNi0xMC42IDEyLjMtMjMuOCAxMi44LTM0LjEgMS44IDMuOCAzLjQgOS4xIDQgMTYuNiAwIDAgNi40LTkuMSA1LjItMTkuMS0uNi01LTIuOS0xMC03LTExLjhsLS4xIDBjNC42LTEuOCA5LjItMy4yIDEzLjUtNC4xLTQyLjMtMTAuMi03My40IDIwLjYtODMuMSAzMS44LTE2LjcgMTkuMi0zNS41IDguOC0zNS41IDguOC0uMiAxMC45IDEwLjQgMTguOSAyMS4yIDE5LjN6bTYyLjctNDUuOGMzIDkuMSAzLjQgMjcuNy03IDM1LjQtMTYuMyAxMi4xLTMyLjIgNS0zNy45IDEuNiA3LjUtMTEuNCAyNS40LTI2IDQ0LjktMzd6bS0xMzQuNCAyMzFsLTI5LjQgMGMtNS41IDAtOC4yIDEuNi05LjUgMi45LTEuOSAyLTIuMiA0LjctLjkgOC4xIDMuNSA5LjEgMTEuNCAxNi41IDEzLjcgMTguNiAzLjEgMi43IDcuNSA0LjMgMTEuOCA0LjMgNC40IDAgOC4zLTEuNyAxMS00LjYgNy41LTguMiAxMS45LTE3LjEgMTMtMTkuOCAuNi0xLjUgMS4zLTQuNS0uOS02LjgtMS44LTEuOC00LjctMi43LTguOC0yLjd6TTM0OS41IDMxNy4zYy0yLjQgMTcuOS0xMyAzMy44LTI0LjYgNDMuNy0zLjEtMjIuNy0zLjctNTUuNS0zLjctNjIuNCAwLTE0LjcgOS41LTI0LjUgMTIuMi0yNi4xIDIuNS0xLjUgNS40LTMgOC4zLTQuNiAxOC05LjYgNDAuNC0yMS42IDQwLjQtNDMuNyAwLTE2LjItOS4zLTIzLjItMTUuNC0yNy44LS44LS42LTEuNS0xLjEtMi4yLTEuNy0yLjEtMS43LTMuNy0zLTQuMy00LjQtNC40LTkuOC0zLjYtMzQuMi0xLjctMzcuNiAuNi0uNiAxNi43LTIwLjkgMTEuOC0zOS4yLTItNy40LTYuOS0xMy4zLTE0LjEtMTctNS4zLTIuNy0xMS45LTQuMi0xOS41LTQuNS0uMS0yLS41LTMuOS0uOS01LjktLjYtMi42LTEuMS01LjMtLjktOC4xIC40LTQuNyAuOC05IDIuMi0xMS4zIDguNC0xMy4zIDI4LjgtMTcuNiAyOS0xNy42bDEyLjMtMi40LTguMS05LjVjLS4xLS4yLTE3LjMtMTcuNS00Ni4zLTE3LjUtNy45IDAtMTYgMS4zLTI0LjEgMy45LTI0LjIgNy44LTQyLjkgMzAuNS00OS40IDM5LjMtMy4xLTEtNi4zLTEuOS05LjYtMi43LTQuMi0xNS44IDktMzguNSA5LTM4LjVzLTEzLjYtMy0zMy43IDE1LjJjLTIuNi02LjUtOC4xLTIwLjUtMS44LTM3LjItMjkuNSAxMC40LTM2LjkgMjYuMy0zOS4xIDQwLjctNy42LTUuNC02LjctMjMuMS03LjItMjcuNi03LjUgLjktMjkuMiAyMS45LTI4LjIgNDguMy0yIC41LTMuOSAxLjEtNS45IDEuNy02LjUtOC44LTI1LjEtMzEuNS00OS40LTM5LjMtNy45LTIuMi0xNi0zLjUtMjMuOS0zLjUtMjkgMC00Ni4xIDE3LjMtNDYuMyAxNy41bC04LjEgOS40IDEyLjMgMi40Yy4yIDAgMjAuNiA0LjMgMjkgMTcuNiAxLjQgMi4yIDEuOCA2LjYgMi4yIDExLjMgLjIgMi44LS40IDUuNS0uOSA4LjEtLjQgMS45LS44IDMuOS0uOSA1LjktNy43IC4zLTE0LjIgMS44LTE5LjUgNC41LTcuMiAzLjctMTIuMSA5LjYtMTQuMSAxNy01IDE4LjIgMTEuMiAzOC41IDExLjggMzkuMiAxLjkgMy40IDIuNyAyNy44LTEuNyAzNy42LS42IDEuNC0yLjIgMi43LTQuMyA0LjQtLjcgLjUtMS40IDEuMS0yLjIgMS43LTYuMSA0LjYtMTUuNCAxMS43LTE1LjQgMjcuOCAwIDIyLjEgMjIuNCAzNC4xIDQwLjQgNDMuNyAzIDEuNiA1LjggMy4xIDguMyA0LjYgMi43IDEuNiAxMi4yIDExLjQgMTIuMiAyNi4xIDAgNi45LS42IDM5LjctMy43IDYyLjQtMTEuNi05LjktMjIuMi0yNS45LTI0LjYtNDMuOCAwIDAtMjkuMiAyMi42LTIwLjYgNzAuOCA1LjIgMjkuNSAyMy4yIDQ2LjEgNDcgNTQuNyA4LjggMTkuMSAyOS40IDQ1LjcgNjcuMyA0OS42IDE0LjQgMTEuOCAzNC40IDE5LjUgNjMuNiAxOS41bC4yIDBjMjkuMSAwIDQ5LjEtNy43IDYzLjYtMTkuNSAzNy45LTMuOSA1OC41LTMwLjUgNjcuMy00OS42IDIzLjgtOC43IDQxLjctMjUuMiA0Ny01NC43IDguMi00OC40LTIxLjEtNzAuOS0yMS4xLTcwLjl6TTMwNiAzNy43YzUuNi0xLjggMTEuNi0yLjcgMTcuNy0yLjcgMTEgMCAxOS45IDMgMjQuNyA1LTMuMSAxLjQtNi40IDMuMi05LjcgNS4zLTIuNC0uNC01LjYtLjgtOS4yLS44LTEwLjUgMC0yMC41IDMuMS0yOC43IDguOS0xMi4zIDguNy0xOCAxNi45LTIwLjcgMjIuNC0yLjItMS4zLTQuNS0yLjUtNy4xLTMuNy0xLjYtLjgtMy4xLTEuNS00LjctMi4yIDYuMS05LjEgMTkuOS0yNi41IDM3LjctMzIuMnptMjEgMTguMmMtLjggMS0xLjYgMi4xLTIuMyAzLjItMy4zIDUuMi0zLjkgMTEuNi00LjQgMTcuOC0uNSA2LjQtMS4xIDEyLjUtNC40IDE3LTQuMiAuOC04LjEgMS43LTExLjUgMi43LTIuMy0zLjEtNS42LTctMTAuNS0xMS4yIDEuNC00LjggNS41LTE2LjEgMTMuNS0yMi41IDUuNi00LjMgMTIuMi02LjcgMTkuNi03ek00NS45IDQ1LjNjLTMuMy0yLjItNi42LTQtOS43LTUuMyA0LjgtMiAxMy43LTUgMjQuNy01IDYuMSAwIDEyIC45IDE3LjcgMi43IDE3LjggNS44IDMxLjYgMjMuMiAzNy43IDMyLjEtMS42IC43LTMuMiAxLjQtNC44IDIuMi0yLjUgMS4yLTQuOSAyLjUtNy4xIDMuNy0yLjYtNS40LTguMy0xMy43LTIwLjctMjIuNC04LjMtNS44LTE4LjItOC45LTI4LjgtOC45LTMuNCAuMS02LjYgLjUtOSAuOXpNOTAuNiA4NS40Yy00LjkgNC4yLTguMyA4LTEwLjUgMTEuMi0zLjQtLjktNy4zLTEuOS0xMS41LTIuNy0zLjMtNC40LTMuOC0xMC41LTQuMy0xNi45LS41LTYuMi0xLjEtMTIuNi00LjQtMTcuOC0uNy0xLjEtMS41LTIuMi0yLjMtMy4yIDcuNCAuMyAxNCAyLjYgMTkuNSA3IDggNi4zIDEyLjEgMTcuNiAxMy41IDIyLjR6TTU4LjQgMjU5LjljLTIuNy0xLjYtNS42LTMuMS04LjQtNC42LTE0LjktOC0zMC4yLTE2LjMtMzAuMi0zMC41IDAtMTEuMSA0LjMtMTQuNiA4LjktMTguMmwuNS0uNGMuNy0uNiAxLjQtMS4yIDIuMi0xLjgtLjkgNy4yLTEuOSAxMy4zLTIuNyAxNC45IDAgMCAxMi4xLTE1IDE1LjctNDQuMyAxLjQtMTEuNS0xLjEtMzQuMy01LjEtNDMgLjIgNC45IDAgOS44LS4zIDE0LjQtLjQtLjgtLjgtMS42LTEuMy0yLjItMy4yLTQtMTEuOC0xNy41LTkuNC0yNi42IC45LTMuNSAzLjEtNiA2LjctNy44IDMuOC0xLjkgOC44LTIuOSAxNS4xLTIuOSAxMi4zIDAgMjUuOSAzLjcgMzIuOSA2IDI1LjEgOCA1NS40IDMwLjkgNjQuMSAzNy43IC4yIC4yIC40IC4zIC40IC4zbDUuNiAzLjktMy41LTUuOGMtLjItLjMtMTkuMS0zMS40LTUzLjItNDYuNSAyLTIuOSA3LjQtOC4xIDIxLjYtMTUuMSAyMS40LTEwLjUgNDYuNS0xNS44IDc0LjMtMTUuOCAyNy45IDAgNTIuOSA1LjMgNzQuMyAxNS44IDE0LjIgNi45IDE5LjYgMTIuMiAyMS42IDE1LjEtMzQgMTUuMS01Mi45IDQ2LjItNTMuMSA0Ni41bC0zLjUgNS44IDUuNi0zLjlzLjItLjEgLjQtLjNjOC43LTYuOCAzOS0yOS44IDY0LjEtMzcuNyA3LTIuMiAyMC42LTYgMzIuOS02IDYuMyAwIDExLjMgMSAxNS4xIDIuOSAzLjUgMS44IDUuNyA0LjQgNi43IDcuOCAyLjUgOS4xLTYuMSAyMi42LTkuNCAyNi42LS41IC42LS45IDEuMy0xLjMgMi4yLS4zLTQuNi0uNS05LjUtLjMtMTQuNC00IDguOC02LjUgMzEuNS01LjEgNDMgMy42IDI5LjMgMTUuNyA0NC4zIDE1LjcgNDQuMy0uOC0xLjYtMS44LTcuNy0yLjctMTQuOSAuNyAuNiAxLjUgMS4yIDIuMiAxLjhsLjUgLjRjNC42IDMuNyA4LjkgNy4xIDguOSAxOC4yIDAgMTQuMi0xNS40IDIyLjUtMzAuMiAzMC41LTIuOSAxLjUtNS43IDMuMS04LjQgNC42LTguNyA1LTE4IDE2LjctMTkuMSAzNC4yLS45IDE0LjYgLjkgNDkuOSAzLjQgNzUuOS0xMi40IDQuOC0yNi43IDYuNC0zOS43IDYuOC0yLTQuMS0zLjktOC41LTUuNS0xMy4xLS43LTItMTkuNi01MS4xLTI2LjQtNjIuMiA1LjUgMzkgMTcuNSA3My43IDIzLjUgODkuNi0zLjUtLjUtNy4zLS43LTExLjctLjdsLTExNyAwYy00LjQgMC04LjMgLjMtMTEuNyAuNyA2LTE1LjkgMTguMS01MC42IDIzLjUtODkuNi02LjggMTEuMi0yNS43IDYwLjMtMjYuNCA2Mi4yLTEuNiA0LjYtMy41IDktNS41IDEzLjEtMTMtLjQtMjcuMi0yLTM5LjctNi44IDIuNS0yNiA0LjMtNjEuMiAzLjQtNzUuOS0uOS0xNy40LTEwLjMtMjkuMi0xOS0zNC4yek0zNS4xIDQwNC42Yy0xMi4xLTIwLTguNy01NC4xLTMuNy01OS4xIDEwLjkgMzQuNCA0Ny4yIDQ0LjMgNzQuNCA0NS40LTIuNyA0LjItNS4yIDcuNi03IDEwbC0xLjQgMS40Yy03LjIgNy44LTguNiAxOC41LTQuMSAzMS44LTIyLjctLjEtNDYuMy05LjgtNTguMi0yOS41em00NS43IDQzLjVjNiAxLjEgMTIuMiAxLjkgMTguNiAyLjQgMy41IDggNy40IDE1LjkgMTIuMyAyMy4xLTE0LjQtNS45LTI0LjQtMTYtMzAuOS0yNS41em0xMTEuNSA1MC4xYy02MC42LS4xLTc4LjMtNDUuOC04NC45LTY0LjctMy43LTEwLjUtMy40LTE4LjIgLjktMjMuMSAyLjktMy4zIDkuNS03LjIgMjQuNi03LjJsMTE4LjggMGMxNS4xIDAgMjEuOCAzLjkgMjQuNiA3LjIgNC4yIDQuOCA0LjUgMTIuNiAuOSAyMy4xLTYuNiAxOC44LTI0LjMgNjQuNi04NC45IDY0Ljd6bTgwLjYtMjQuNmM0LjktNy4yIDguOC0xNS4xIDEyLjMtMjMuMSA2LjQtLjUgMTIuNi0xLjMgMTguNi0yLjQtNi41IDkuNS0xNi41IDE5LjYtMzAuOSAyNS41em03Ni42LTY5Yy0xMiAxOS43LTM1LjYgMjkuMy01OC4xIDI5LjcgNC41LTEzLjMgMy4xLTI0LjEtNC4xLTMxLjgtLjQtLjUtLjktMS0xLjQtMS41LTEuOC0yLjQtNC4zLTUuOC03LTEwIDI3LjItMS4yIDYzLjUtMTEgNzQuNC00NS40IDUgNSA4LjQgMzkuMS0zLjggNTl6TTE5Mi4yIDE4Ny43bC4yIDBjMTIuNy0uMSAyNy4yLTE3LjggMjcuMi0xNy44LTkuOSA2LTE4LjggOC4xLTI3LjMgOC4zLTguNS0uMi0xNy40LTIuMy0yNy4zLTguMyAwIDAgMTQuNSAxNy42IDI3LjIgMTcuOHptNjEuNyAyMzAuN2wtMjkuNCAwYy00LjIgMC03LjIgLjktOC45IDIuNy0yLjIgMi4zLTEuNSA1LjItLjkgNi43IDEgMi42IDUuNSAxMS4zIDEzIDE5LjMgMi43IDIuOSA2LjYgNC41IDExIDQuNXM4LjctMS42IDExLjgtNC4yYzIuMy0yIDEwLjItOS4yIDEzLjctMTguMSAxLjMtMy4zIDEtNi0uOS03LjktMS4zLTEuMy00LTIuOS05LjQtM3oiXX0sRXBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1cHBvcnRub3ciLGljb246WzY0MCw1MTIsW10sImU4MzMiLCJNMCAxOTEuOWwyMDMuOS0uMWMxLjgtLjYgMi41LTkuNSAzLjItMTIuMiAzLjMtMTMuNSA4LjQtMjYuNCAxNC44LTM4LjdsLTE2MC4yIDAgMC00OC4yIDIzNC41IDAgMCAzOWMtNTEuMiAzNi4xLTU2LjQgOTIuNi0yMy42IDE0My45IDMzLjEgNTEuNyA5My40IDg4LjEgMTQ5LjUgMTEwLjUgNjcuOC0yNS4yIDE2NC45LTg5LjkgMTY5LjQtMTY5LjYgMy4xLTU1LjMtNDIuMi0xMDEuOC05OC43LTkxLjgtNDEuNSA3LjQtNjIuMSA0Ni43LTU0LjggODYuNGwtNDguMiAwYy03LjMtNTYuNiAyMi44LTExMi42IDc4LjQtMTMwLjMgNzguNy0yNS4xIDE1OS41IDI4IDE3MC40IDEwOC44IDE1LjIgMTEyLjMtOTUuNSAxOTkuOS0xODguMSAyMzcuOC00LjQgMS44LTI0LjQgMTAuMS0yNy41IDEwLjFsLTI4MC4zIDAgMC00OC4yIDE3OC41IDAtMzguMS0yOC45LTIzLjItMjIuMS0xOTguMyAwIDAtNDguMiAxNjMuMSAwYy03LjEtMTEuNi0xMi4zLTI0LjMtMTYuMS0zNy40LS43LTIuNS0yLjEtMTItMy44LTEyLjZsLTIwNC45LS4xIDAtNDguMiAwIDB6Il19LFBwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyb2Nrcm1zIixpY29uOls1MTIsNTEyLFtdLCJmM2U5IiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDEzLjQgNDI3LjVsLTkwIDAtMTEyLTEzMS4zYy0xNy45LTIwLjQtMy45LTU2LjEgMjYuNi01Ni4xbDc1LjMgMC04NC42LTk5LjMtODQuMyA5OC45LTkwIDAgMTQ3LjEtMTcyLjVjMTQuNC0xOC40IDQxLjMtMTcuMyA1NC41IDBMNDEzLjcgMjUyLjNjMTkgMjIuOCAyIDU3LjItMjcuNiA1Ni4xLS42IDAtNzQuMiAuMi03NC4yIC4yTDQxMy40IDQyNy41eiJdfSxJcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5zcGxhc2giLGljb246WzQ0OCw1MTIsW10sImUwN2MiLCJNNDQ4IDIzMC4ybDAgMjQ5LjgtNDQ4IDAgMC0yNDkuOCAxNDEuMSAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45IDE0MS4xIDB6TTMwNi45IDMybC0xNjUuNyAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45eiJdfSx4RT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtaW5zdGFncmFtIixpY29uOls0NDgsNTEyLFsiaW5zdGFncmFtLXNxdWFyZSJdLCJlMDU1IiwiTTE5NC40IDIxMS43YTUzLjMgNTMuMyAwIDEgMCA1OS4yIDg4LjYgNTMuMyA1My4zIDAgMSAwIC01OS4yLTg4LjZ6bTE0Mi4zLTY4LjRjLTUuMi01LjItMTEuNS05LjMtMTguNC0xMi0xOC4xLTcuMS01Ny42LTYuOC04My4xLTYuNS00LjEgMC03LjkgLjEtMTEuMiAuMXMtNy4yIDAtMTEuNC0uMWMtMjUuNS0uMy02NC44LS43LTgyLjkgNi41LTYuOSAyLjctMTMuMSA2LjgtMTguNCAxMnMtOS4zIDExLjUtMTIgMTguNGMtNy4xIDE4LjEtNi43IDU3LjctNi41IDgzLjIgMCA0LjEgLjEgNy45IC4xIDExLjFzMCA3LS4xIDExLjFjLS4yIDI1LjUtLjYgNjUuMSA2LjUgODMuMiAyLjcgNi45IDYuOCAxMy4xIDEyIDE4LjRzMTEuNSA5LjMgMTguNCAxMmMxOC4xIDcuMSA1Ny42IDYuOCA4My4xIDYuNSA0LjEgMCA3LjktLjEgMTEuMi0uMXM3LjIgMCAxMS40IC4xYzI1LjUgLjMgNjQuOCAuNyA4Mi45LTYuNSA2LjktMi43IDEzLjEtNi44IDE4LjQtMTJzOS4zLTExLjUgMTItMTguNGM3LjItMTggNi44LTU3LjQgNi41LTgzIDAtNC4yLS4xLTguMS0uMS0xMS40czAtNy4xIC4xLTExLjRjLjMtMjUuNSAuNy02NC45LTYuNS04My0yLjctNi45LTYuOC0xMy4xLTEyLTE4LjRsMCAuMnptLTY3LjEgNDQuNWMxOC4xIDEyLjEgMzAuNiAzMC45IDM0LjkgNTIuMnMtLjIgNDMuNS0xMi4zIDYxLjZjLTYgOS0xMy43IDE2LjYtMjIuNiAyMi42cy0xOSAxMC4xLTI5LjYgMTIuMmMtMjEuMyA0LjItNDMuNS0uMi02MS42LTEyLjNzLTMwLjYtMzAuOS0zNC45LTUyLjIgLjItNDMuNSAxMi4yLTYxLjYgMzAuOS0zMC42IDUyLjItMzQuOSA0My41IC4yIDYxLjYgMTIuMmwuMSAwem0yOS4yLTEuM2MtMy4xLTIuMS01LjYtNS4xLTcuMS04LjZzLTEuOC03LjMtMS4xLTExLjEgMi42LTcuMSA1LjItOS44IDYuMS00LjUgOS44LTUuMiA3LjYtLjQgMTEuMSAxLjEgNi41IDMuOSA4LjYgNyAzLjIgNi44IDMuMiAxMC42YzAgMi41LS41IDUtMS40IDcuM3MtMi40IDQuNC00LjEgNi4yLTMuOSAzLjItNi4yIDQuMi00LjggMS41LTcuMyAxLjVjLTMuOCAwLTcuNS0xLjEtMTAuNi0zLjJsLS4xIDB6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0zNTcgMzg5Yy0xOC43IDE4LjctNDEuNCAyNC42LTY3IDI1LjktMjYuNCAxLjUtMTA1LjYgMS41LTEzMiAwLTI1LjYtMS4zLTQ4LjMtNy4yLTY3LTI1LjlzLTI0LjYtNDEuNC0yNS44LTY3Yy0xLjUtMjYuNC0xLjUtMTA1LjYgMC0xMzIgMS4zLTI1LjYgNy4xLTQ4LjMgMjUuOC02N3M0MS41LTI0LjYgNjctMjUuOGMyNi40LTEuNSAxMDUuNi0xLjUgMTMyIDAgMjUuNiAxLjMgNDguMyA3LjEgNjcgMjUuOHMyNC42IDQxLjQgMjUuOCA2N2MxLjUgMjYuMyAxLjUgMTA1LjQgMCAxMzEuOS0xLjMgMjUuNi03LjEgNDguMy0yNS44IDY3bDAgLjF6Il19LE5wZT14RSxGcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmlyc3Qtb3JkZXItYWx0IixpY29uOls1MTIsNTEyLFtdLCJmNTBhIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCA3LjhhMjQwLjIgMjQwLjIgMCAxIDEgMCA0ODAuNCAyNDAuMiAyNDAuMiAwIDEgMSAwLTQ4MC40em0wIDIwLjVhMjE5LjcgMjE5LjcgMCAxIDAgMCA0MzkuNCAyMTkuNyAyMTkuNyAwIDEgMCAwLTQzOS40em0wIDguMmEyMTEuNSAyMTEuNSAwIDEgMSAwIDQyMyAyMTEuNSAyMTEuNSAwIDEgMSAwLTQyM3ptMTg2LjIgMjYwYy00LjQgMTcuMS0xMS4yIDMzLjUtMjAuMSA0OC43bC03NC4xLTM1LjkgNjEuNSA1NC44Yy0xMC42IDE0LjEtMjMuMiAyNi42LTM3LjIgMzcuM2wtNTQuOC02MS42IDM1LjkgNzQuM2MtMTUuMiA5LTMxLjYgMTUuOC00OC42IDIwLjJsLTI3LjMtNzguNSA0LjggODIuOWMtOC42IDEuMi0xNy40IDEuOC0yNi4zIDEuOHMtMTcuNy0uNi0yNi4zLTEuOGw0LjgtODIuNS0yNy4yIDc4Yy0xNy4xLTQuNS0zMy40LTExLjMtNDguNy0yMC4ybDM1LjktNzQuMy01NC45IDYxLjZjLTE0LTEwLjctMjYuNi0yMy4yLTM3LjItMzcuM2w2MS42LTU0LjktNzQuMyAzNS45QzgwLjcgMzM4IDc0IDMyMS43IDY5LjUgMzA0LjZsNzcuOC0yNy4xLTgyLjIgNC44Yy0xLjItOC42LTEuOC0xNy4zLTEuOC0yNi4yIDAtOSAuNi0xNy44IDEuOC0yNi41bDgyLjQgNC44LTc3LjktMjcuMmM0LjUtMTcuMSAxMS4zLTMzLjUgMjAuMi00OC43bDc0LjIgMzUuOS02MS41LTU0LjljMTAuNy0xNCAyMy4yLTI2LjYgMzcuMy0zNy4ybDU0LjggNjEuNS0zNS44LTc0LjJjMTUuMi04LjkgMzEuNi0xNS43IDQ4LjYtMjAuMWwyNi45IDc3LjItNC43LTgxLjZjOC42LTEuMiAxNy40LTEuOCAyNi4zLTEuOHMxNy43IC42IDI2LjMgMS44bC00LjcgODIuMiAyNy03Ny44YzE3LjMgNC41IDMzLjYgMTEuNCA0OC42IDIwLjJsLTM1LjggNzQuMSA1NC43LTYxLjVjMTQuMSAxMC43IDI2LjYgMjMuMiAzNy4yIDM3LjJsLTYxLjQgNTQuOCA3NC4xLTM1LjljOC45IDE1LjIgMTUuNyAzMS42IDIwLjIgNDguNmwtNzcuOCAyNy4xIDgyLjItNC43YzEuMiA4LjcgMS44IDE3LjUgMS44IDI2LjUgMCA4LjktLjYgMTcuNi0xLjggMjYuMmwtODIuMS00LjcgNzcuNyAyNy4xeiJdfSxPcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZnVsY3J1bSIsaWNvbjpbMjU2LDUxMixbXSwiZjUwYiIsIk02My44IDE2NC4xTDI4LjQgMjA3LjctNyAxNjQuMSAyOC40IDEyMC42IDYzLjggMTY0LjF6TTExMi4yIDBsLTIwLjUgMTk4LjItNTEgNTcuOCA1MSA1Ny44IDIwLjUgMTk4LjIgMC0yMTEuMS00MS4xLTQ0LjkgNDEuMS00NC45IDAtMjExLjF6bTc5LjcgMTY0LjFsMzUuNCA0My42IDM1LjQtNDMuNi0zNS40LTQzLjUtMzUuNCA0My41em0tNDguNSA0N2w0MS4xIDQ0LjktNDEuMSA0NC45IDAgMjExLjEgMjAuNi0xOTguMiA1MS01Ny44LTUxLTU3LjgtMjAuNi0xOTguMiAwIDIxMS4xeiJdfSxScGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXJjaC1saW51eCIsaWNvbjpbNTc2LDUxMixbXSwiZTg2NyIsIk0yODguNy03LjhjLTI0LjEgNTktMzguNiA5Ny43LTY1LjQgMTU1IDE2LjQgMTcuNCAzNi42IDM3LjYgNjkuNCA2MC41LTM1LjItMTQuNS01OS4yLTI4LjktNzcuMi00NC0zNC4zIDcxLjYtODguMSAxNzMuNS0xOTcuMiAzNjkuNCA4NS43LTQ5LjUgMTUyLjItODAgMjE0LjEtOTEuNi0yLjctMTEuNC00LjEtMjMuOC00LTM2LjdsLjEtMi43YzEuNC01NC45IDI5LjktOTcuMiA2My44LTk0LjRzNjAuMiA0OS44IDU4LjggMTA0LjdjLS4zIDEwLjMtMS40IDIwLjItMy40IDI5LjQgNjEuMiAxMiAxMjcgNDIuNCAyMTEuNiA5MS4yLTE2LjctMzAuNy0zMS42LTU4LjMtNDUuOC04NC43LTIyLjQtMTcuNC00NS43LTM5LjktOTMuMy02NC40IDMyLjcgOC41IDU2LjMgMTguMyA3NC41IDI5LjMtMTQ0LjUtMjY5LjEtMTU2LjItMzA0LjgtMjA1LjgtNDIxLjF6Il19LEJwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmZWRpdmVyc2UiLGljb246WzU3Niw1MTIsW10sImU4NjUiLCJNMzk0LjggNTI2LjlhNTQgNTQgMCAxIDEgNS44LTEwNy44IDU0IDU0IDAgMSAxIC01LjggMTA3Ljh6bS01MC4xLTgwLjZjLTUuNSAxMC45LTcuNCAyMy4zLTUuNiAzNS40TDE2OC43IDQ1NC40YzUuNS0xMC45IDcuNS0yMy4zIDUuNy0zNS40bDE3MC4zIDI3LjN6TTExMi43IDQ4MS42YTU0IDU0IDAgMSAxIDUuOS0xMDcuOCA1NCA1NCAwIDEgMSAtNS45IDEwNy44em0yNTcuNy02MS40Yy0xMC45IDUuNi0xOS43IDE0LjQtMjUuNCAyNS4zbC03MC42LTcwLjkgMzMuNi0xNyA2Mi40IDYyLjd6TTQ4Ni4xIDI2MWM4LjcgOC42IDE5LjggMTQuMyAzMS45IDE2LjRMNDM5LjQgNDMwLjhjLTguNy04LjYtMTkuOC0xNC4zLTMxLjktMTYuNEw0ODYuMSAyNjF6TTM3Ni43IDIxOS4zbDMwLjUgMTk1LjFjLTEyLjEtMS45LTI0LjUtLjEtMzUuNCA1LjNsLTMyLjItMjA2LjMgMzcuMiA2ek0zNTAuNCAzMjguOUwxNzQuMiA0MTguMmMtMi0xMi4xLTcuNi0yMy4yLTE2LjItMzJsMTg2LjYtOTQuNiA1LjggMzcuMnptLTE1Mi43LTIybC00MC4zIDc4LjdjLTguNy04LjYtMTkuOC0xNC4zLTMxLjktMTYuM2w0NS42LTg5IDI2LjYgMjYuN3pNMTI0LjcgMzY5Yy0xMi4xLTEuOC0yNC40IC4yLTM1LjQgNS42TDYyLjcgMjA0LjNjMTIuMSAxLjggMjQuNS0uMSAzNS40LTUuNkwxMjQuNyAzNjl6bTE0Ny4xLTQ3LjhsLTMzLjYgMTctMTM5LjQtMTM5LjljMTAuOS01LjYgMTkuNy0xNC40IDI1LjQtMjUuM0wyNzEuOCAzMjEuMnptMTk3LjUtOTIuOGMyIDEyLjEgNy42IDIzLjIgMTYuMiAzMS45bC04OS4zIDQ1LjItNS44LTM3LjIgNzguOS00MHptNTUuNiA0NC4zYTU0IDU0IDAgMSAxIDUuOS0xMDcuOCA1NCA1NCAwIDEgMSAtNS45IDEwNy44ek0yODQuNiA1OC43YzguNyA4LjYgMTkuOCAxNC4zIDMxLjggMTYuM2wtOTUuMyAxODYuMS0yNi42LTI2LjcgOTAtMTc1Ljh6TTQ3NC45IDE5Mi4xYy01LjUgMTAuOS03LjUgMjMuMy01LjcgMzUuM2wtMjA2LjQtMzMuMSAxNy4yLTMzLjUgMTk1IDMxLjN6TTY4LjcgMTk5LjZBNTQgNTQgMCAxIDEgNzQuNiA5MS44IDU0IDU0IDAgMSAxIDY4LjcgMTk5LjZ6bTQzMi0zMy40Yy0xMC45IDUuNi0xOS43IDE0LjQtMjUuNCAyNS4zTDM1My41IDY5LjNjMTAuOS01LjYgMTkuNy0xNC40IDI1LjQtMjUuM0w1MDAuNiAxNjYuMnpNMjI5LjMgMTUyLjZsLTE3LjIgMzMuNS04Ny40LTE0YzUuNC0xMC45IDcuNC0yMy4zIDUuNS0zNS40bDk5IDE1Ljl6bTEzOS41IDE1LjlsLTM3LjItNi0xMy42LTg3LjJjMTIuMSAxLjcgMjQuNS0uMyAzNS4zLTUuOWwxNS41IDk5LjF6TTI2Ny44IDI2LjJjMiAxMi4xIDcuNiAyMy4yIDE2LjIgMzEuOWwtMTUzLjkgNzhjLTItMTIuMS03LjYtMjMuMi0xNi4yLTMxLjlsMTUzLjktNzh6bTU1LjYgNDQuM2E1NCA1NCAwIDEgMSA1LjgtMTA3LjggNTQgNTQgMCAxIDEgLTUuOCAxMDcuOHoiXX0sSHBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJyYXZlLXJldmVyc2UiLGljb246WzQ0OCw1MTIsW10sImU2M2QiLCJNMjk4LjUgMGMzIDAgNS44IDEuMyA3LjggMy42bDM4LjEgNDRjLjUtLjEgMS0uMiAxLjUtLjMgOS4yLTEuNiAxOC42LTIuMiAyNy43LTEuMiAxMS42IDEuNCAyMS41IDUuNCAyOC45IDEyLjkgNy43IDcuOCAxNS40IDE1LjggMjIuNiAyMy42IDIuNSAyLjcgNC45IDUuMiA2LjkgNy40IC43IC44IDEuNCAxLjUgMS45IDIgMy40IDMuNyA0LjIgOC4xIDIuNyAxMS45bC05LjggMjQuNiAxMy4xIDM4LjFjLjcgMiAuOCA0LjEgLjIgNi4yLS4xIC40LS4xIC40LS41IDIuMWwtMS41IDUuOGMtMS42IDYuMy0zLjUgMTMuMy01LjQgMjAuOS01LjYgMjEuNi0xMS4yIDQzLjItMTYuNCA2My40LTEyLjkgNDkuOS0yMS40IDgyLjctMjMuNCA5MC45LTExLjEgNDQuNS0xOS45IDYwLTQ4LjMgODAuMy0yNC45IDE3LjgtNzYuOCA1My42LTg2LjggNjAtMSAuNi0yIDEuMy0zLjQgMi4zLS41IC40LTMuMiAyLjItMy45IDIuNy00LjkgMy4zLTguMyA1LjUtMTIuMSA3LjMtNC43IDIuMi05LjMgMy41LTEzLjkgMy41cy05LjEtMS4yLTEzLjktMy41Yy0zLjctMS44LTcuMi0zLjktMTIuMS03LjMtLjgtLjUtMy40LTIuNC0zLjktMi43LTEuNC0xLTIuNS0xLjctMy40LTIuMy0xMC02LjQtNjEuOS00Mi4xLTg2LjgtNjAtMjguNC0yMC40LTM3LjItMzUuOC00OC4zLTgwLjMtMi04LjItMTAuNS00MS0yMy4zLTkwLjUtNS4zLTIwLjYtMTAuOS00Mi4yLTE2LjUtNjMuOC0yLTcuNi0zLjgtMTQuNi01LjQtMjAuOWwtMS41LTUuOC0uNS0yLjFjLS41LTItLjQtNC4yIC4yLTYuMmwxMy4xLTM4LjEtOS45LTI0LjVjLTEuNS0zLjgtLjctOC4yIDItMTEuMiAxLjItMS4zIDEuOC0yIDIuNi0yLjggMi0yLjIgNC40LTQuNyA2LjktNy40IDcuMy03LjcgMTUtMTUuNyAyMi43LTIzLjUgNy40LTcuNSAxNy4zLTExLjYgMjguOS0xMi45IDkuMS0xLjEgMTguNS0uNSAyNy43IDEuMiAuNSAuMSAxIC4yIDEuNSAuM2wzOC4xLTQ0YzItMi40IDQuOC0zLjcgNy44LTMuN2wxNDggMHptLTQuNyAyMS4xbC0xMzguNiAwLTM5LjEgNDUuMWMtMi42IDMtNi43IDQuMy0xMC42IDMuMi0uMi0uMS0uNy0uMi0xLjUtLjQtMS4zLS4zLTIuOS0uNi00LjUtLjktNy40LTEuMy0xNC45LTEuOC0yMS43LTEtNy4zIC45LTEzIDMuMi0xNi42IDYuOS03LjYgNy43LTE1LjIgMTUuNi0yMi4zIDIzLjMtMS43IDEuOC0zLjMgMy41LTQuOCA1LjFsOC44IDIyYzEgMi40IDEgNSAuMiA3LjVMMjkuNyAxNzAuNmMuNCAxLjQgLjUgMS45IDEuMiA0LjggMS42IDYuMyAzLjUgMTMuMyA1LjQgMjAuOSA1LjYgMjEuNiAxMS4yIDQzLjIgMTYuNCA2My40IDEyLjkgNTAgMjEuNCA4Mi44IDIzLjQgOTEgMTAuMSA0MC4xIDE2LjQgNTEuMyA0MC4yIDY4LjMgMjQuNiAxNy42IDc2LjMgNTMuMiA4NS45IDU5LjMgMS4yIC44IDIuNSAxLjYgNCAyLjcgLjYgLjQgMy4yIDIuMiAzLjkgMi43IDQgMi44IDYuNyA0LjQgOS4yIDUuNiAyLjIgMSAzLjkgMS41IDUuMSAxLjVzMi45LS41IDUuMS0xLjVjMi41LTEuMiA1LjItMi44IDkuMi01LjYgLjctLjUgMy4zLTIuMyAzLjktMi43IDEuNi0xLjEgMi44LTEuOSA0LTIuNyA5LjYtNi4xIDYxLjMtNDEuNyA4NS45LTU5LjMgMjMuOC0xNy4xIDMwLjItMjguMiA0MC4xLTY4LjMgMi4xLTguMyAxMC41LTQxLjEgMjMuMy05MC43IDUuMy0yMC42IDEwLjktNDIuMiAxNi41LTYzLjggMi03LjYgMy44LTE0LjYgNS40LTIwLjkgLjctMi45IC45LTMuNCAxLjItNC44bC0xMy4zLTM4LjhjLS44LTIuNC0uOC01LjEgLjItNy41bDguOC0yMmMtMS41LTEuNi0zLjEtMy4zLTQuOC01LjEtNy4yLTcuNi0xNC43LTE1LjUtMjIuMy0yMy4zLTMuNy0zLjctOS4zLTYtMTYuNi02LjktNi44LS44LTE0LjQtLjMtMjEuNyAxLTEuNyAuMy0zLjIgLjYtNC41IC45LS44IC4yLTEuMyAuMy0xLjUgLjQtMy44IDEuMS03LjktLjItMTAuNi0zLjJMMjkzLjggMjEuMXpNMjI0LjUgMzE2YzIuOCAwIDIwLjkgNi41IDM1LjQgMTQuMXMyNSAxMyAyOC4zIDE1LjIgMS4zIDYuMi0xLjcgOC40LTQ0LjEgMzQuNi00OC4xIDM4LjItOS44IDkuNS0xMy44IDkuNS05LjgtNS45LTEzLjgtOS41LTQ1LjEtMzYtNDguMS0zOC4yLTUuMS02LjItMS43LTguNCAxMy45LTcuNSAyOC4zLTE1LjIgMzIuNS0xNC4xIDM1LjQtMTQuMWwtLjIgMHptLjEtMjMwLjdjLjcgMCA4LjggLjIgMjAuNSA0LjIgMTIuMyA0LjIgMjUuNyA5LjQgMzEuOSA5LjRzNTEuOS04LjkgNTEuOS04LjkgNTQuMiA2Ni43IDU0LjIgODEtNi44IDE4LTEzLjcgMjUuNC0zNi44IDM5LjgtNDAuNyA0My45LTExLjkgMTAuNS03LjEgMjEuOCAxMS43IDI1LjggMy45IDQwLjQtMjEgMjQuNC0yOS40IDIyLjgtMjguNC0xMi4yLTM1LjctMTcuMS0zMC41LTI0LjMtMzAuNS0zMS44IDI0LTIwLjggMjguNC0yMy45IDI0LjctMTQuOCAyNS4xLTE5LjQgLjMtNi01LjctMTcuNC0xNi43LTI2LjctMTQuOS0zNi44IDE5LjEtMTUuNCAzMS41LTIwLjIgMzYuMi0xMy43IDM5LjItMTUuMSAyLjItMi43LTYuOC0zLjYtMzQuNi00LjMtNDYuMS0xLjEtMzEuMiA4LjItMzIuOCAxMC45LTMgMi43LTEuNCAxMS44IDEwLjEgNTIuOCAxMC45IDYwLjYgMi40IDEyLjktNS44IDE0LjgtMjIuMSA1LjItMjYuOCA1LjItMTguNi0zLjMtMjYuOC01LjItNi42LTctNS44LTE0LjggOS4zLTUxLjUgMTAuOS02MC42IC4yLTkuMi0xLjQtMTEuOC0yMS4zLTcuNi0zMi44LTEwLjktMzcuMSAuMi00Ni4xIDEuMS05LjggMi4yLTYuOCAzLjYgMjYuOCAxMC40IDM5LjIgMTUuMSAyOS43IDEwIDMxLjUgMjAuMi05IDI1LjQtMTQuOSAzNi44LTYuMSAxMi44LTUuNyAxNy40IDIwLjYgMTYuNCAyNS4xIDE5LjQgMjguNCAxNi40IDI4LjQgMjMuOS0yMy4yIDI3LTMwLjUgMzEuOC0yNy4yIDE1LjQtMzUuNyAxNy4xLTIxLjctOC4yLTI5LjQtMjIuOC0uOC0yOS4xIDMuOS00MC40LTMuMy0xNy43LTcuMS0yMS44LTMzLjgtMzYuNS00MC43LTQzLjktMTMuNy0xMS4yLTEzLjctMjUuNCA1NC4yLTgxIDU0LjItODEgNDUuOCA4LjkgNTEuOSA4LjkgMTkuNS01LjIgMzEuOS05LjQgMjAuNi00LjIgMjAuNi00LjJsLS4zIDB6Il19LHFwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhdmlhbmV4IixpY29uOls1MTIsNTEyLFtdLCJmMzc0IiwiTTQ1My4yIDMybC0zMTIgMEMxMDIuMyAzMiA2NSA2My4yIDU3LjkgMTAxLjdMMS4zIDQxMC4zQy01LjggNDQ4LjggMjAgNDgwIDU5IDQ4MGwzMTIgMGMzOC45IDAgNzYuMi0zMS4yIDgzLjMtNjkuN0w1MTEgMTAxLjhDNTE4IDYzLjIgNDkyLjIgMzIgNDUzLjIgMzJ6TTM5NSAzNzkuM2wtMzIgMTMuNS0xMTUuNC0xMTBjLTE0LjcgMTAtMjkuMiAxOS41LTQxLjcgMjcuMWwyMi4xIDY0LjItMTcuOSAxMi43LTQwLjYtNjEtNTIuNC00OC4xIDE1LjctMTUuNCA1OCAzMS4xYzkuMy0xMC41IDIwLjgtMjIuNiAzMi44LTM0LjlsLTIwLjUtMjkuNi02OC44LTk5LjggMTguOC0yOC45IDguOS00LjggMTAzLjEgMTEyLjQgNC45IDQuNWMxOS40LTE4LjggMzMuOC0zMi40IDMzLjgtMzIuNCA3LjctNi41IDIxLjUtMi45IDMwLjcgNy45IDkgMTAuNSAxMC42IDI0LjcgMi43IDMxLjMtMS44IDEuMy0xNS41IDExLjQtMzUuMyAyNS42bDQuNSA3LjMgOTQuOSAxMTkuNC02LjMgNy45eiJdfSxWcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibnM4IixpY29uOls2NDAsNTEyLFtdLCJmM2Q1IiwiTTEwNC4zIDI2OS4ybDI2LjEgMCAwLTI2LjItMjYuMSAwIDAgMjYuMnpNMTU2LjggMjQzbC0uMS0yNi4yIDAtLjljLS4yLTEwLjQtNC40LTIwLjMtMTEuOS0yNy42cy0xNy41LTExLjMtMjcuOS0xMS4xLTIwLjMgNC40LTI3LjYgMTEuOC0xMS4zIDE3LjUtMTEuMiAyNy45bDAgLjIgMjYuNCAwIDAtLjJjLjEtMy40IDEuNS02LjYgMy45LTlzNS43LTMuNyA5LjEtMy43IDYuNyAxLjMgOS4xIDMuNyAzLjggNS42IDMuOSA5bDAgMjYuMiAyNi4zIDB6bTUyLjQgMjUuOGMwIDEyLTIuNCAyMy44LTYuOSAzNC45cy0xMS4zIDIxLjEtMTkuNyAyOS42LTE4LjUgMTUuMi0yOS42IDE5LjctMjIuOSA2LjktMzQuOSA2LjlsLS42IDBjLTI0LjIgMC00Ny4zLTkuNi02NC40LTI2LjdTMjYuMyAyOTMgMjYuMyAyNjguOGwtMjYuMyAwIDAgLjJjMCAxNS40IDMuMSAzMC43IDkgNDQuOXMxNC42IDI3LjIgMjUuNSAzOC4xIDIzLjkgMTkuNSAzOC4xIDI1LjQgMjkuNSA4LjkgNDQuOSA4LjlsLjggMGMxNS40IDAgMzAuNy0zIDQ0LjktOXMyNy4yLTE0LjYgMzguMS0yNS41IDE5LjUtMjMuOCAyNS40LTM4LjEgOC45LTI5LjUgOC45LTQ0LjlsMC0yNi0yNi4zIDAgMCAyNnptLTE1Ny4yIDBjLjEgMTcuMyA3IDMzLjkgMTkuMiA0Ni4xczI4LjggMTkuMSA0Ni4xIDE5LjEgMzMuOS02LjkgNDYuMS0xOS4xIDE5LjItMjguOCAxOS4yLTQ2LjFsLTI2LjMgMGMtLjIgMTAuMi00LjQgMjAtMTEuNyAyNy4ycy0xNy4xIDExLjItMjcuNCAxMS4yLTIwLjEtNC0yNy40LTExLjItMTEuNS0xNi45LTExLjctMjcuMmwwLTI2LTI2LjMgMCAwLTI2LjZjLjMtMTcuMyA3LjQtMzMuOCAxOS43LTQ1LjhzMjktMTguOCA0Ni4zLTE4LjYgMzMuOCA3LjIgNDUuOSAxOS41IDE4LjkgMjguOSAxOC45IDQ2LjJsMCAyNS4zIDI2LjMgMCAwLTI1LjNjMC0yNC4zLTkuNy00Ny43LTI2LjktNjQuOXMtNDAuNS0yNi45LTY0LjktMjYuOS00Ny43IDkuNy02NC45IDI2LjktMjYuOSA0MC41LTI2LjkgNjQuOWwwIDI1LjQgMjYuMyAwIDAgMjZ6bTQxOC40LTcxLjJjMTMuNyAwIDI0LjYgNi42IDMwLjEgMTguM2wuNyAxLjUgMjMuMi0xMS41LS42LTEuNGMtOC0xOS4zLTI4LjUtMzEuMy01My40LTMxLjMtMjMuMSAwLTQzLjYgMTEuNC01MSAyOC40LS4xIDI2LjktLjIgMjMuOSAwIDI0LjggNC43IDExIDE0LjYgMTkuNCAyOC43IDI0LjIgNi41IDIgMTMuMSAzLjMgMTkuOCA0IDUuNSAuNyAxMC42IDEuNCAxNS44IDMuMSA2LjQgMi4xIDEwLjUgNS4zIDEyLjggOS44bDAgOS45Yy0zLjcgNy41LTEzLjggMTIuMy0yNS44IDEyLjMtMTQuMyAwLTI2LTYuOS0zMS45LTE5bC0uNy0xLjUtMjMgMTEuNSAuNiAxLjRjNy45IDE5LjQgMjkuNiAzMiA1NS4zIDMyIDIzLjYgMCA0NC42LTExLjQgNTIuMy0yOC40bC4yLTI1LjktLjItLjdjLTQuOS0xMS0xNS4yLTE5LjYtMjguOS0yNC4yLTcuNy0yLjctMTQuMy0zLjYtMjAuNy00LjQtNS0uNS0xMC0xLjUtMTQuOC0yLjktNi4zLTEuOS0xMC40LTUuMS0xMi42LTkuNmwwLTguNGMzLjQtNy40IDEyLjktMTIuMSAyNC4yLTEyLjFsMCAwek0yODcuNiAzMTEuM2wyNi4xIDAgMC02OC40LTI2LjEgMCAwIDY4LjR6TTYzOS44IDI1OGMtMi45LTYuMy04LjMtMTItMTUuNC0xNi43IDUuNi0zLjggMTAuMS05LjEgMTMtMTUuM2wuMi0yNS4zLS4yLS43Yy03LjQtMTYtMjYuNy0yNi43LTQ4LjItMjYuN1M1NDguNSAxODQgNTQxLjEgMjAwbC0uMiAyNS4zIC4yIC43YzIuOSA2LjEgNy40IDExLjQgMTMgMTUuMy03LjIgNC43LTEyLjUgMTAuNS0xNS40IDE2LjdsLS4yIDI4LjkgLjIgLjdjNy42IDE2IDI3LjkgMjYuNyA1MC42IDI2LjdzNDMuMS0xMC43IDUwLjYtMjYuN2wuMi0yOC45LS4yLS43em0tNzMuMi01MC44YzMuNi02LjMgMTIuNi0xMC41IDIyLjYtMTAuNXMxOSA0LjIgMjIuNiAxMC41bDAgMTMuN2MtMy41IDYuMi0xMi42IDEwLjMtMjIuNiAxMC4zcy0xOS4xLTQuMi0yMi42LTEwLjNsMC0xMy43em00Ny4zIDcyLjJjLTMuOCA2LjYtMTMuMyAxMC45LTI0LjcgMTAuOS0xMS4xIDAtMjEtNC40LTI0LjctMTAuOWwwLTE2LjJjMy43LTYuMyAxMy41LTEwLjUgMjQuNy0xMC41IDExLjMgMCAyMC45IDQuMSAyNC43IDEwLjVsMCAxNi4yek0zNzYuNCAyNjZsLTU5LjgtODkuNy0yOSAwIDAgNDAuNiAyNi41IDAgMCAuNCA2Mi41IDk0LjEgMjUuNyAwIDAtMTM1LjEtMjUuOSAwIDAgODkuN3oiXX0sd0U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXBpbnRlcmVzdCIsaWNvbjpbNDQ4LDUxMixbInBpbnRlcmVzdC1zcXVhcmUiXSwiZjBkMyIsIk0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw3Mi42IDAtMi4yLS44Yy01LjQtNDguMS0zLjEtNTcuNSAxNS43LTEzNC43IDMuOS0xNiA4LjUtMzUgMTMuOS01Ny45IDAgMC03LjMtMTQuOC03LjMtMzYuNSAwLTcwLjcgNzUuNS03OCA3NS41LTI1IDAgMTMuNS01LjQgMzEuMS0xMS4yIDQ5LjgtMy4zIDEwLjYtNi42IDIxLjUtOS4xIDMyLTUuNyAyNC41IDEyLjMgNDQuNCAzNi40IDQ0LjQgNDMuNyAwIDc3LjItNDYgNzcuMi0xMTIuNCAwLTU4LjgtNDIuMy05OS45LTEwMi42LTk5LjktNjkuOSAwLTExMC45IDUyLjQtMTEwLjkgMTA2LjYgMCAyMS4xIDguMiA0My43IDE4LjMgNTYgMiAyLjQgMi4zIDQuNSAxLjcgNy0xLjEgNC43LTMuMSAxMi45LTQuNyAxOS4yLTEgNC0xLjggNy4zLTIuMSA4LjYtMS4xIDQuNS0zLjUgNS41LTguMiAzLjMtMzAuNi0xNC4zLTQ5LjgtNTkuMS00OS44LTk1LjEgMC03Ny41IDU2LjItMTQ4LjYgMTYyLjItMTQ4LjYgODUuMiAwIDE1MS40IDYwLjcgMTUxLjQgMTQxLjggMCA4NC42LTUzLjMgMTUyLjctMTI3LjQgMTUyLjctMjQuOSAwLTQ4LjMtMTIuOS01Ni4zLTI4LjIgMCAwLTEyLjMgNDYuOS0xNS4zIDU4LjQtNSAxOS4zLTE3LjYgNDIuOS0yNy40IDU5LjNMMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHoiXX0sanBlPXdFLFVwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibHVldG9vdGgtYiIsaWNvbjpbMjU2LDUxMixbXSwiZjI5NCIsIk0xNjQuOSAyNjBMMjU3LjUgMTU2LjcgMTExLjYgMCAxMTEuNiAyMDYuMyAyNS40IDEyMC4yLTYgMTUxLjYgMTAyLjEgMjYwLTYgMzY4LjQgMjUuNCAzOTkuOCAxMTEuNiAzMTMuNyAxMTQuMyA1MTIgMjYyLjggMzYzLjQgMTY0LjkgMjYwem00MC45LTEwM2wtNTAgNTAtLjMtMTAwLjMgNTAuMyA1MC4zem0tNTAgMTU2bDUwIDUwLTUwLjMgNTAuMyAuMy0xMDAuM3oiXX0sV3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdyaXBmaXJlIixpY29uOlszMjAsNTEyLFtdLCJmM2FjIiwiTTgwLjUgMzAxLjRjMC03My44IDEwNS4xLTEyMi41IDEwNS4xLTIwMyAwLTQ3LjEtMzQtODgtMzkuMS05MC40IC40IDMuMyAuNiA2LjcgLjYgMTAgMCA5Mi4xLTE0Ny4xIDE1My45LTE0Ny4xIDI2OC42IDAgNDkuOCAzMi4yIDc5LjIgNjYuNSAxMDguMyA2NS4xIDQ2LjcgNzguMSA3MS40IDc4LjEgODYuNiAwIDEwLjEtNC44IDE3LTQuOCAyMi4zIDEzLjEtMTYuNyAxNy40LTMxLjkgMTcuNS00Ni40IDAtMjkuNi0yMS43LTU2LjMtNDQuMi04Ni41LTE2LTIyLjMtMzIuNi00Mi42LTMyLjYtNjkuNXptMjA1LjMtMzljLTEyLjEtNjYuOC03OC0xMjQuNC05NC43LTEzMC45bDQgNy4yYzIuNCA1LjEgMy40IDEwLjkgMy40IDE3LjEgMCA0NC43LTU0LjIgMTExLjItNTYuNiAxMTYuNy0yLjIgNS4xLTMuMiAxMC41LTMuMiAxNS44IDAgMjAuMSAxNS4yIDQyLjEgMTcuOSA0Mi4xIDIuNCAwIDU2LjYtNTUuNCA1OC4xLTg3LjcgNi40IDExLjcgOS4xIDIyLjYgOS4xIDMzLjQgMCA0MS4yLTQxLjggOTYuOS00MS44IDk2LjkgMCAxMS42IDMxLjkgNTMuMiAzNS41IDUzLjIgMSAwIDIuMi0xLjQgMy4yLTIuNCAzNy45LTM5LjMgNjcuMy04NSA2Ny4zLTEzNi44IDAtOC0uNy0xNi4yLTIuMi0yNC42eiJdfSxNRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZ29vZ2xlLXBsdXMiLGljb246WzQ0OCw1MTIsWyJnb29nbGUtcGx1cy1zcXVhcmUiXSwiZjBkNCIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNNjQgMjU2YzAtNTUuMyA0NC43LTEwMCAxMDAtMTAwIDI3IDAgNDkuNSA5LjggNjcgMjYuMmwtMjcuMSAyNi4xYy03LjQtNy4xLTIwLjMtMTUuNC0zOS44LTE1LjQtMzQuMSAwLTYxLjkgMjguMi02MS45IDYzLjIgMCAzNC45IDI3LjggNjMuMiA2MS45IDYzLjIgMzkuNiAwIDU0LjQtMjguNSA1Ni44LTQzLjFsLTU2LjkgMCAwLTM0LjQgOTQuNCAwYzEgNSAxLjYgMTAuMSAxLjYgMTYuNiAwIDU3LjEtMzguMyA5Ny42LTk2IDk3LjYtNTUuMyAwLTEwMC00NC43LTEwMC0xMDB6bTI5MSAxOC4ybDAgMjktMjkuMiAwIDAtMjktMjkgMCAwLTI5LjIgMjkgMCAwLTI5IDI5LjIgMCAwIDI5IDI5IDAgMCAyOS4yLTI5IDB6Il19LEdwZT1NRSxZcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2l0ZWUiLGljb246WzUxMiw1MTIsW10sImU4NjMiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6TTM4NS42IDExMy44bDAgMC0xNzcgMGMtNTIuNCAwLTk0LjggNDIuNC05NC44IDk0LjhsMCAxNzdjMCA3IDUuNyAxMi42IDEyLjYgMTIuNmwxODYuNSAwYzQ3LjEgMCA4NS4zLTM4LjIgODUuMy04NS4zbDAtNzIuN2MwLTctNS43LTEyLjYtMTIuNi0xMi42bC0xNDUuNCAwYy03IDAtMTIuNiA1LjctMTIuNiAxMi42bDAgMzEuNmMwIDYuNiA1LjEgMTIuMSAxMS42IDEyLjZsMSAwIDg4LjUgMGM2LjYgMCAxMi4xIDUuMSAxMi42IDExLjZsMCAxIDAgNi4zYzAgMjAuOS0xNyAzNy45LTM3LjkgMzcuOWwtMTIwLjEgMGMtNyAwLTEyLjYtNS43LTEyLjYtMTIuNmwwLTEyMC4xYzAtMjAuNCAxNi4xLTM3LjEgMzYuNC0zNy45bDEuNiAwIDE3NyAwYzcgMCAxMi42LTUuNyAxMi42LTEyLjZsMC0zMS42YzAtNy01LjYtMTIuNi0xMi42LTEyLjZ6Il19LFpwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ4bXBwIixpY29uOls1NzYsNTEyLFtdLCJlODY0IiwiTTAgNDcuMmMzLjUgMTM3LjEgMTE3LjEgMjc4LjYgMjUyLjkgMzU2LjctMzEuNSAyNS02Ny4yIDQ0LjEtMTA2LjIgNTMuOWwwIDUuNGM1Ni40LTIuMyA5OC4xLTIwLjEgMTQxLjMtNDAuNyA2NS43IDM0LjYgMTIyLjIgMzkuOSAxNDEuNCA0MC43bDAtNS40Yy0zOS05LjgtNzQuNy0yOC44LTEwNi4yLTUzLjggMTM1LjctNzguMiAyNDkuMy0yMTkuOCAyNTIuOC0zNTYuOC01OC40IDI1LjctMTE5LjEgNDQuMi0xODAuMSA2Mi4zbDAgMGMzLjQgNTktMjAuMiAxNzAuNC0xMDcuOSAyNjIuMy04OC40LTkyLjMtMTExLjItMjA0LjEtMTA3LjgtMjYyLjNsMCAwQzExNy43IDkyLjYgNTkuMyA3MC4yIDAgNDcuMnpNOTMuOSA5N2w3My42IDIxLjhDMTY1LjQgMjE2IDIyNi44IDM1OCAzNDEuMyA0MzIuMiAxOTAuNSAzNzYuOSA4OS45IDIxNS43IDkzLjkgOTd6bTM4OC4zIDBjMy4zIDk5LTY1LjYgMjI0LjctMTcxLjcgMjk2LjQtNC43LTQuMS05LjMtOC40LTEzLjgtMTIuNyA3Ny04MC4yIDExMy4yLTE4Ni4zIDExMS45LTI2MS45TDQ4Mi4xIDk3ek0yNjQuNSA0MTAuNWMzIDEuNiA1LjkgMy4yIDguOSA0LjctMTIuNSA2LjQtMjUuNCAxMi4xLTM4LjYgMTcgMTAuMy02LjcgMjAuMi0xMy45IDI5LjctMjEuN3oiXX0sWHBlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFwcC1zdG9yZSIsaWNvbjpbNTEyLDUxMixbXSwiZjM2ZiIsIk0yNTUuOSAxMjAuOWw5LjEtMTUuN2M1LjYtOS44IDE4LjEtMTMuMSAyNy45LTcuNXMxMy4xIDE4LjEgNy41IDI3LjlsLTg3LjUgMTUxLjUgNjMuMyAwYzIwLjUgMCAzMiAyNC4xIDIzLjEgNDAuOGwtMTg1LjUgMGMtMTEuMyAwLTIwLjQtOS4xLTIwLjQtMjAuNHM5LjEtMjAuNCAyMC40LTIwLjRsNTIgMCA2Ni42LTExNS40LTIwLjgtMzYuMWMtNS42LTkuOC0yLjMtMjIuMiA3LjUtMjcuOSA5LjgtNS42IDIyLjItMi4zIDI3LjkgNy41bDguOSAxNS43em0tNzguNyAyMThsLTE5LjYgMzRjLTUuNiA5LjgtMTguMSAxMy4xLTI3LjkgNy41cy0xMy4xLTE4LjEtNy41LTI3LjlsMTQuNi0yNS4yYzE2LjQtNS4xIDI5LjgtMS4yIDQwLjQgMTEuNnptMTY4LjktNjEuN2w1My4xIDBjMTEuMyAwIDIwLjQgOS4xIDIwLjQgMjAuNFM0MTAuNSAzMTggMzk5LjIgMzE4bC0yOS41IDAgMTkuOSAzNC41YzUuNiA5LjggMi4zIDIyLjItNy41IDI3LjktOS44IDUuNi0yMi4yIDIuMy0yNy45LTcuNS0zMy41LTU4LjEtNTguNy0xMDEuNi03NS40LTEzMC42LTE3LjEtMjkuNS00LjktNTkuMSA3LjItNjkuMSAxMy40IDIzIDMzLjQgNTcuNyA2MC4xIDEwNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MCAyNTZhMjE2IDIxNiAwIDEgMSA0MzIgMCAyMTYgMjE2IDAgMSAxIC00MzIgMHoiXX0sS3BlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndpeCIsaWNvbjpbNjQwLDUxMixbXSwiZjVjZiIsIk0zOTMuNCAxMzEuN2MwIDEzIDIuMSAzMi43LTI4LjcgNDMuOC05LjUgMy40LTE2IDkuNy0xNiA5LjcgMC0zMSA0LjctNDIuMiAxNy40LTQ4LjkgOS44LTUuMSAyNy4yLTQuNiAyNy4yLTQuNnpNMjc3LjYgMTY3LjJsLTM0LjIgMTMyLjctMjguNS0xMDguNmMtNy43LTMyLTIwLjgtNDguNS00OC40LTQ4LjUtMjcuNCAwLTQwLjcgMTYuMi00OC40IDQ4LjVMODkuNSAyOTkuOSA1NS4zIDE2Ny4yQzQ5LjcgMTQwLjUgMjMuOSAxMjkgMCAxMzJMNjUuNiAzNzkuOXMyMS42IDEuNiAzMi41LTRjMTQuMi03LjIgMjEtMTIuOCAyOS42LTQ2LjYgNy43LTMwLjEgMjkuMS0xMTguNCAzMS4xLTEyNC43IDQuOC0xNC45IDExLjEtMTMuOCAxNS40IDAgMiA2LjMgMjMuNSA5NC42IDMxLjEgMTI0LjcgOC42IDMzLjcgMTUuNCAzOS4zIDI5LjYgNDYuNiAxMC44IDUuNSAzMi41IDQgMzIuNSA0TDMzMi45IDEzMmMtMjQuNC0zLjEtNDkuOCA4LjktNTUuMyAzNS4zem0xMTUuOCA1LjJzLTQuMSA2LjMtMTMuNSAxMS42Yy02IDMuNC0xMS44IDUuNi0xOCA4LjYtMTUuMSA3LjMtMTMuMiAxMy45LTEzLjIgMzUuMmwwIDE1Mi4xczE2LjYgMi4xIDI3LjQtMy40YzEzLjktNy4xIDE3LjEtMTQgMTcuMy00NC44bDAtMTUwLjMgMCAwIDAtOXptMTYzLjQgODQuMUw2NDAgMTMyLjhzLTM1LjEtNi01Mi41IDkuOGMtMTMuMyAxMi4xLTI0LjQgMjkuNi01NC4yIDcyLjUtLjUgLjctNi4zIDEwLjUtMTMuMSAwLTI5LjMtNDIuMi00MC44LTYwLjMtNTQuMi03Mi41LTE3LjQtMTUuOC01Mi41LTkuOC01Mi41LTkuOGw4My4yIDEyMy43LTgzIDEyMy40czM2LjYgNC42IDU0LTExLjJjMTEuNS0xMC41IDE3LjYtMjAuNCA1Mi41LTcwLjcgNi44LTEwLjUgMTIuNi0uOCAxMy4xIDAgMjkuNCA0Mi40IDM5LjIgNTguMSA1My4xIDcwLjcgMTcuNCAxNS44IDUzLjMgMTEuMiA1My4zIDExLjJsLTgzLTEyMy40eiJdfSxRcGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW50ZXJjb20iLGljb246WzQ0OCw1MTIsW10sImY3YWYiLCJNMzkyIDMyTDU2IDMyQzI1LjEgMzIgMCA1Ny4xIDAgODhMMCA0MjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0zMzZjMC0zMC45LTI1LjEtNTYtNTYtNTZ6TTI4My43IDExNC4xYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXptLTc0LjYtNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMjE2LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0yMTYuNXptLTc0LjcgNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXpNNTkuNyAxNDRjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM2MwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zek0zODMuMSAzNzEuOGMtNzIuOCA2My0yNDEuNyA2NS40LTMxOC4xIDAtMTUtMTIuOCA0LjQtMzUuNSAxOS40LTIyLjcgNjUuOSA1NS4zIDIxNi4xIDUzLjkgMjc5LjMgMCAxNC45LTEyLjkgMzQuMyA5LjggMTkuNCAyMi43em01LjItOTMuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTM0LjN6Il19LEpwZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWFjdGV1cm9wZSIsaWNvbjpbNTc2LDUxMixbXSwiZjc1ZCIsIk0yNTAuNyAyMTEuN2w1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMiA2Ljh6bTYzLjcgMGw1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMi0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMS45IDYuOHptLTkxLjMgNTAuNWwtMy40IDBjLTQuOCAwLTMuOCA0LTMuOCAxMi4xIDAgNC43LTIuMyA2LjEtNS44IDYuMXMtNS44LTEuNC01LjgtNi4xbDAtMzYuNmMwLTQuNyAyLjMtNi4xIDUuOC02LjFzNS44IDEuNCA1LjggNi4xYzAgNy4yLS43IDEwLjUgMy44IDEwLjVsMy40IDBjNC43LS4xIDMuOC0zLjkgMy44LTEyLjMgMC05LjktNi43LTE0LjEtMTYuOC0xNC4xbC0uMiAwYy0xMC4xIDAtMTYuOCA0LjItMTYuOCAxNC4xbDAgNDAuMWMwIDEwLjQgNi43IDE0LjEgMTYuOCAxNC4xbC4yIDBjMTAuMSAwIDE2LjgtMy44IDE2LjgtMTQuMSAwLTkuOSAxLjEtMTMuOC0zLjgtMTMuOHptLTgwLjcgMTcuNGwtMTQuNyAwIDAtMTkuMyAxMS40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMTEuNCAwIDAtMTguMyAxNC40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMjEuNyAwYy0yLjQtLjEtMy43IDEuMy0zLjcgMy44bDAgNTkuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMjEuOSAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjh6bS00Mi0xOC41YzQuNi0yIDcuMy02IDcuMy0xMi40bDAtMTEuOWMwLTEwLjEtNi43LTE0LjEtMTYuOC0xNC4xbC0xMy40IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDU5LjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDMuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIyLjkgNS42IDAgNy40IDIzLjVjLjIgMSAuOCAxLjggMS42IDIuNHMxLjggLjkgMi43IC44bDMuMyAwYzIuOCAwIDQtMS44IDMuMi00LjRsLTguMS0yMy45em0tMy44LTE0YzAgNC44LTIuNSA2LjEtNi4xIDYuMWwtNS44IDAgMC0yMC45IDUuOCAwYzMuNiAwIDYuMSAxLjMgNi4xIDYuMWwwIDguN3pNMTc2LjEgMjI2Yy0uMS0uNS0uMi0xLS40LTEuNHMtLjYtLjgtMS0xLjEtLjgtLjYtMS4zLS43LTEtLjItMS41LS4xbC02LjkgMGMtLjUgMC0xIDAtMS40IC4ycy0uOSAuNC0xLjMgLjctLjcgLjctLjkgMS4xLS40IC45LS40IDEuNGwtMTEgNTkuMmMtLjUgMi43IC45IDQuMSAzLjQgNC4xbDMgMGMuNSAuMSAxIDAgMS41LS4ycy45LS40IDEuMy0uNyAuNy0uNyAuOS0xLjIgLjQtLjkgLjQtMS40bDEuOC0xMS4zIDEyLjIgMCAxLjggMTEuM2MwIC41IC4yIDEgLjQgMS40cy41IC45IC45IDEuMiAuOCAuNiAxLjMgLjcgMSAuMiAxLjUgLjJsMy41IDBjMi42IDAgMy45LTEuNCAzLjQtNC4xTDE3Ni4xIDIyNnptLTEyLjMgMzkuM2w0LjctMjkuNyA0LjcgMjkuNy05LjQgMHptODkuMyAyMC4ybDAtNTMuMiA3LjUgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0yNS44IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDIuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsNy4zIDAgMCA1My4yYzAgMi41IDEuMyAzLjggMy44IDMuOGwzLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMCAwem0yNDgtLjhsLTE5LjQgMCAwLTI2LjcgMTYuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTE2LjEgMCAwLTI1LjggMTkuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTIyLjIgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMjIuNSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsMCAwek00MDggMjIxLjhsLS44IDBjLTEwLjEgMC0xNS4zIDQuNy0xNS4zIDE0LjFsMCA0MC4xYzAgOS4zIDUuMiAxNC4xIDE1LjMgMTQuMWwuOCAwYzEwLjEgMCAxNS4zLTQuOCAxNS4zLTE0LjFsMC00MC4xYzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMWwwIDB6bTEwLjIgNTIuNGMtLjEgOC0zIDExLjEtMTAuNSAxMS4xcy0xMC41LTMuMS0xMC41LTExLjFsMC0zNi42YzAtNy45IDMtMTEuMSAxMC41LTExLjFzMTAuNSAzLjIgMTAuNSAxMS4xbDAgMzYuNnptLTQ2LjUtMTQuNWM2LjEtMS42IDkuMi02LjEgOS4yLTEzLjNsMC05LjdjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xbC0xMy43IDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuOSAxMS42IDAgMTAuNCAyNy4yYy4yIC41IC41IC45IC45IDEuMXMuOSAuNCAxLjQgLjRsMS41IDBjMS40IDAgMi0xIDEuNS0yLjNsLTEwLjYtMjcuM3ptLTYuNC0zLjlsLTEwLjIgMCAwLTI4LjUgMTAuMiAwYzcuNSAwIDEwLjUgMy4xIDEwLjUgMTEuMWwwIDYuNGMwIDcuOC0zIDExLTEwLjUgMTFsMCAwem04NS45LTMzLjFsLTEzLjcgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuMSAxMC42IDBjMTAuMSAwIDE1LjMtNC44IDE1LjMtMTQuMWwwLTEwLjVjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xem0xMC4yIDIyLjhjMCA3LjktMyAxMS4xLTEwLjUgMTEuMWwtMTAuMiAwIDAtMjkuMiAxMC4yIDBjNy41LS4xIDEwLjUgMy4xIDEwLjUgMTFsMCA3LjF6TTI1OS42IDMwOGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6TTQ4Ny4yIDE3MS45Yy0xMS43LTQuNC0yMy41LTguMS0zNS42LTExLjMgMTkuNi03OCAxMS42LTEzNC43LTIyLjMtMTUzLjktMzQuNS0xOS40LTg1LjkgNC4zLTEzOC4yIDU1LjIgMy40IDMuMyA2LjggNi43IDEwLjIgMTAuMiA4Mi41LTgwIDExOS42LTUzLjUgMTIwLjktNTIuOCAyMi40IDEyLjcgMzYgNTUuOCAxNS41IDEzNy44LTI3LjgtNi40LTU2LjEtMTAuNy04NC42LTEzLTcxLjktMTAwLjUtMTQwLjYtMTQyLjEtMTgyLjItMTQyLjEtMzAuOCAwLTQzLjggMjEtNDcuNiAyNy43LTE4LjEgMzItMTMuMyA4NC4yIC4xIDEzMy44LTcwLjUgMjAuMy0xMjAuNyA1NC4xLTEyMC4zIDk1IC41IDU5LjYgMTAzLjIgODcuOCAxMjIuMSA5Mi44LTIwLjUgODEuOS0xMC4xIDEzNS42IDIyLjMgMTUzLjkgMjggMTUuOCA3NS4xIDYgMTM4LjItNTUuMi0zLjQtMy4zLTYuOC02LjctMTAuMi0xMC4yLTgyLjUgODAtMTE5LjcgNTMuNS0xMjAuOSA1Mi44LTIyLjMtMTIuNi0zNi01NS42LTE1LjUtMTM3LjkgMTIuNCAyLjkgNDEuOCA5LjUgODQuNiAxMyA3MS45IDEwMC40IDE0MC42IDE0MiAxODIuMSAxNDIgMzAuOCAwIDQzLjgtMjEgNDcuNi0yNy43IDE4LTMxLjkgMTMuMy04NC4xLS4xLTEzMy44IDE1Mi4zLTQzLjggMTU2LjItMTMwLjIgMzMuOS0xNzYuM2wwIDB6TTEzNiAzNi44YzIuOS01LjEgMTEuOS0yMC4zIDM0LjktMjAuMyAzNi44IDAgOTguOCAzOS42IDE2My4zIDEyNi4yLTMxLjMtMS44LTYyLjctMS41LTkzLjkgLjkgMTMtMTguMyAyNy4xLTM1LjggNDIuMi01Mi40LTMuNC0zLjUtNi44LTYuOS0xMC4yLTEwLjItMTguMyAyMC4yLTM1LjMgNDEuNy01MC43IDY0LjItMjguNSAyLjctNTYuNyA3LjYtODQuNCAxNC42LS4yLTEuNC0yNC4zLTgyLjItMS4yLTEyM2wwIDB6TTQ0MC44IDQ3NS4xYy0yLjkgNS4xLTExLjggMjAuMy0zNC45IDIwLjMtMzYuNyAwLTk4LjctMzkuNC0xNjMuMy0xMjYuMiAzMS4zIDEuOCA2Mi43IDEuNSA5My45LS45LTEzIDE4LjMtMjcuMSAzNS44LTQyLjIgNTIuNCAzLjQgMy41IDYuOCA2LjkgMTAuMiAxMC4yIDE4LjQtMjAuMiAzNS4zLTQxLjcgNTAuNy02NC4yIDQ3LjMtNC43IDgwLjMtMTMuNSA4NC40LTE0LjYgMjIuNyA4NC40IDQuNSAxMTcgMS4yIDEyM3ptOS4xLTEzOC42Yy0zLjYtMTEuOS03LjctMjQuMS0xMi40LTM2LjQtMi4xIDAtNC4yLS41LTYuMS0xLjVzLTMuNS0yLjQtNC42LTQuMmwtLjEgLjFjLTEuNiAxLjUtMy40IDIuNy01LjQgMy42IDUuNyAxNC4zIDEwLjYgMjguNCAxNC43IDQyLjItMjMuNyA2LTQ3LjcgMTAuMy03MiAxMyAzLjUtNS4zIDE3LjItMjYuMiAzMi4yLTU0LjItMi4xLS44LTQuMi0xLjktNi0zLjItMS4xIDEuMi0zLjYgNC4yLTEwLjkgNC4yLTYuMiAxMS4yLTE3LjQgMzAuOS0zMy45IDU1LjItMzcuNCAzLjMtNzUgMy42LTExMi40IDEtNy45LTExLjItMjEuNS0zMS4xLTM2LjgtNTcuOC0xLS40LTItLjktMy0xLjUtMS45IDEuNi0zLjkgMy4yLTEyLjYgMy4yIDYuMyAxMS4yIDE3LjUgMzAuNyAzMy44IDU0LjYtMjQuMy0yLjMtNDguNC02LjItNzIuMi0xMS43IDMuOS0xNCA4LjYtMjguMyAxNC4xLTQyLjktMy4yIDAtNS40IC4yLTguNC0xLTIuMiAuOC00LjYgMS4xLTYuOSAxLTQuOSAxMy40LTkuMSAyNi41LTEyLjcgMzkuNC0xNTkuOS00Mi42LTE0MC4zLTEyMy42LTEuNS0xNjQgMy42IDExLjkgNy43IDI0LjEgMTIuNCAzNi40IDEwLjQgMCAxMi45IDMuNCAxNC40IDUuMyAuNy0uOCAxLjQtMS42IDIuMy0yLjItNS44LTE0LjctMTAuOS0yOS4yLTE1LjItNDMuMyA3LTEuOCAzMi40LTguNCA3Mi0xMy0xNS45IDI0LjMtMjYuNyA0My45LTMyLjggNTUuMyAzLjEgMS44IDUuMyA0LjYgNi40IDggMi41LTMuNyA2LjEtNi42IDEwLjItOC40IDYuNS0xMS43IDE3LjktMzEuOSAzNC44LTU2LjkgMzcuNC0zLjMgNzUtMy42IDExMi40LTEgMzEuNSA0NC42IDI4LjkgNDguMSA0Mi41IDY0LjUgMi42LTMuNSA2LjMtNiAxMC40LTcuNC02LjQtMTEuNC0xNy42LTMxLTM0LjMtNTUuNSA0MC40IDQuMSA2NSAxMCA3Mi4yIDExLjctNCAxNC40LTguOSAyOS4yLTE0LjYgNDQuMiAyLjUgMSA0LjggMi40IDYuOCA0LjNsLjEgLjFjMS0xLjUgMi4zLTIuOCAzLjgtMy44czMuMy0xLjYgNS4xLTEuOGM0LjktMTMuNCA5LjItMjYuNiAxMi44LTM5LjUgMTEuNyAzLjEgMjMuMiA2LjggMzQuNSAxMSAxMDYuMSAzOS45IDc0IDg3LjkgNzIuNiA5MC40LTE5LjggMzUuMS04MC4xIDU1LjItMTA1LjcgNjIuNXptLTExNC40LTExNGwtMS4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjYgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA0OS44YzAgNy45LTIuNiAxMS4xLTEwLjEgMTEuMXMtMTAuMS0zLjEtMTAuMS0xMS4xbDAtNDkuOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDUxLjVjMCA5LjYgNSAxNC4xIDE1LjEgMTQuMWwuNCAwYzEwLjEgMCAxNS4xLTQuNiAxNS4xLTE0LjFsMC01MS41YzAtLjMtLjEtLjUtLjItLjhzLS4zLS41LS41LS42LS40LS4zLS43LS40LS41LS4xLS44LS4xek0zMjEuOCAzMDhsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem0tMzEuMSA3LjRsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem01LjEtMzAuOGwtMTkuNCAwIDAtMjYuNyAxNi4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMTYuMSAwIDAtMjUuOCAxOS4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMjIuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDIyLjUgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjYtLjEtLjhzLS4yLS41LS40LS43LS40LS40LS43LS40LS41LS4xLS44LS4xbDAgMHptLTcuNC05OS40bC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjEtMi4zLTYuOHoiXX0sZWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndhemUiLGljb246WzUxMiw1MTIsW10sImY4M2YiLCJNNTAyLjYgMjAxLjdjMTQuNSA4NS45LTMwLjkgMTY3LjktMTEzLjIgMjA4LjEgMTMgMzQuMS0xMi40IDcwLjItNDguMyA3MC4yLTEzLjIgMC0yNi01LjEtMzUuNi0xNC4ycy0xNS4zLTIxLjYtMTYtMzQuOGMtNi40IC4yLTY0LjIgMC03Ni4zLS42LS4zIDYuOC0xLjkgMTMuNS00LjcgMTkuNnMtNi45IDExLjctMTEuOSAxNi4zLTEwLjggOC4yLTE3LjIgMTAuNS0xMy4yIDMuNC0xOS45IDMuMWMtMzMuOS0xLjQtNTgtMzQuOC00Ny02Ny45LTM3LjItMTMuMS03Mi41LTM0LjktOTkuNi03MC44LTEzLTE3LjMtLjUtNDEuOCAyMC44LTQxLjggNDYuMyAwIDMyLjItNTQuMiA0My4yLTExMC4zIDE4LjQtOTMuOSAxMTYuOC0xNTcuMSAyMTEuNy0xNTcuMSAxMDIuNSAwIDE5Ny4yIDcwLjcgMjE0LjEgMTY5Ljd6TTM3My45IDM4OC4zYzQyLTE5LjIgODEuMy01Ni43IDk2LjMtMTAyLjEgNDAuNS0xMjMuMS02NC4yLTIyOC0xODEuNy0yMjgtODMuNCAwLTE3MC4zIDU1LjQtMTg2LjEgMTM2LTkuNSA0OC45IDUgMTMxLjQtNjguNyAxMzEuNCAyNC45IDMzLjEgNTguMyA1Mi42IDkzLjcgNjQgMjQuNy0yMS44IDYzLjktMTUuNSA3OS44IDE0LjMgMTQuMiAxIDc5LjIgMS4yIDg3LjkgLjggMy41LTYuOSA4LjUtMTIuOSAxNC43LTE3LjVzMTMuMi03LjkgMjAuOC05LjUgMTUuNC0xLjQgMjIuOSAuNCAxNC41IDUuMyAyMC41IDEwLjJ6TTIwNS41IDE4Ny4xYzAtMzQuNyA1MC44LTM0LjcgNTAuOCAwcy01MC44IDM0LjctNTAuOCAwem0xMTYuNiAwYzAtMzQuNyA1MC45LTM0LjcgNTAuOSAwcy01MC45IDM0LjgtNTAuOSAwek0xOTkuNSAyNTcuOGMtMy40LTE2LjkgMjIuMi0yMi4yIDI1LjYtNS4ybC4xIC4zYzQuMSAyMS40IDI5LjggNDQgNjQuMSA0My4xIDM1LjctLjkgNTkuMy0yMi4yIDY0LjEtNDIuOCA0LjUtMTYuMSAyOC42LTEwLjQgMjUuNSA2LTUuMiAyMi4yLTMxLjIgNjItOTEuNSA2Mi45LTQyLjYgMC04MC45LTI3LjgtODcuOS02NC4ybDAgMHoiXX0sdGhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtcmVtaXgiLGljb246WzUxMiw1MTIsW10sImY0ZWUiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek00MTguMSAyNjAuNGw0LjkgMi4yIDAgNzBjLTcuMiAzLjYtNjMuNCAyNy41LTY3LjMgMjguOC02LjUtMS44LTExMy43LTQ2LjgtMTM3LjMtNTYuMmwtNjQuMiAyNi42LTYzLjMtMjcuNSAwLTYzLjggNTkuMy0yNC44Yy0uNy0uNy0uNCA1LS40LTcwLjRsNjcuMy0yOS43IDE1MS45IDYyLjkgMCA2MS42IDQ5LjEgMjAuM3ptLTcwLjQgODEuNWwwLTQzLjgtLjQgMCAwLTEuOC0xMTMuOC00Ni41IDAgNDUuMiAxMTMuOCA0Ni45IDAtLjQgLjQgLjR6bTcuNS01Ny42bDM5LjktMTYuNC0zNi44LTE1LjUtMzkgMTYuNCAzNS45IDE1LjV6bTUyLjMgMzguMWwwLTQzLTQ0LjMgMTguNiAwIDQzLjQgNDQuMy0xOXoiXX0sYWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJhbmRjYW1wIixpY29uOls1MTIsNTEyLFtdLCJmMmQ1IiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptNDguMiAzMjYuMWwtMTgxIDAgODQuNy0xNTYuMSAxODEgMC04NC43IDE1Ni4xeiJdfSxpaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXdlYi1hd2Vzb21lLXN0cm9rZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTY4NCIsIk02NCA2NEM0Ni4zIDY0IDMyIDc4LjMgMzIgOTZsMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMNjQgNjR6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMzUgODEuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdfSxyaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmltZW8tdiIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3ZCIsIk00NDcuOCAxNTMuNmMtMiA0My42LTMyLjQgMTAzLjMtOTEuNCAxNzkuMS02MC45IDc5LjItMTEyLjQgMTE4LjgtMTU0LjYgMTE4LjgtMjYuMSAwLTQ4LjItMjQuMS02Ni4zLTcyLjMtMzUuMi0xMjkuMi01MC4yLTIwNC45LTc5LjMtMjA0LjktMy40IDAtMTUuMSA3LjEtMzUuMiAyMS4xTDAgMTY4LjJjNTEuNi00NS4zIDEwMC45LTk1LjcgMTMxLjgtOTguNSAzNC45LTMuNCA1Ni4zIDIwLjUgNjQuNCA3MS41IDI4LjcgMTgxLjUgNDEuNCAyMDguOSA5My42IDEyNi43IDE4LjctMjkuNiAyOC44LTUyLjEgMzAuMi02Ny42IDQuOC00NS45LTM1LjgtNDIuOC02My4zLTMxIDIyLTcyLjEgNjQuMS0xMDcuMSAxMjYuMi0xMDUuMSA0NS44IDEuMiA2Ny41IDMxLjEgNjQuOSA4OS40eiJdfSxzaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3RyYXZhIixpY29uOlszODQsNTEyLFtdLCJmNDI4IiwiTTE1OC40IDBMNyAyOTIgOTYuMiAyOTIgMTU4LjQgMTc1LjkgMjIwLjEgMjkyIDMwOC42IDI5MiAxNTguNCAwek0zMDguNiAyOTJsLTQzLjkgODguMi00NC42LTg4LjItNjcuNiAwIDExMi4yIDIyMCAxMTEuNS0yMjAtNjcuNiAweiJdfSxuaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5pcmVnaXN0cnkiLGljb246WzM4NCw1MTIsW10sImY0MDQiLCJNMTkyIDQ4MGMzOS41IDAgNzYuMi0xMS44IDEwNi44LTMyLjJsLTIxMy41IDBDMTE1LjggNDY4LjIgMTUyLjUgNDgwIDE5MiA0ODB6TTEwMi45IDI4Ni45bDAtMTIuNC0xMDIuOSAwIDAgMTIuNGMwIDIuNSAwIDUgLjEgNy40bDEwMy4xIDBjLS4yLTIuNC0uMy00LjktLjMtNy40em0yMC41IDU3bC0xMTQuOSAwYzIuNiA4LjUgNS44IDE2LjggOS42IDI0LjhsMTM4LjMgMGMtMTIuOS01LjctMjQuMS0xNC4yLTMzLTI0Ljh6bS0xNy43LTM0LjdsLTEwNC40IDBjLjkgNy42IDIuMiAxNSAzLjkgMjIuM2wxMDkuNyAwYy00LTYuOS03LjItMTQuNC05LjItMjIuM3ptLTIuOC02OS4zbC0xMDIuOSAwIDAgMTcuMyAxMDIuOSAwIDAtMTcuM3ptMC0xNzMuMmwtMTAyLjkgMCAwIDQuOSAxMDIuOSAwIDAtNC45em0wLTM0LjdsLTEwMi45IDAgMCAyLjUgMTAyLjkgMCAwLTIuNXptMCA2OS4zbC0xMDIuOSAwIDAgNy40IDEwMi45IDAgMC03LjR6bTAgMTA0bC0xMDIuOSAwIDAgMTQuOCAxMDIuOSAwIDAtMTQuOHptMC02OS4zbC0xMDIuOSAwIDAgOS45IDEwMi45IDAgMC05Ljl6bTAgMzQuNmwtMTAyLjkgMCAwIDEyLjQgMTAyLjkgMCAwLTEyLjR6TTI2OS4xIDMzMS41bDEwOS43IDBjMS44LTcuMyAzLjEtMTQuNyAzLjktMjIuM2wtMTA0LjQgMGMtMi4xIDcuOS01LjIgMTUuNC05LjIgMjIuM3ptMTItMTg1LjdsMTAyLjkgMCAwLTkuOC0xMDIuOSAwIDAgOS44em0wIDM3LjJsMTAyLjkgMCAwLTEyLjQtMTAyLjkgMCAwIDEyLjR6bTAtNzQuM2wxMDIuOSAwIDAtNy40LTEwMi45IDAgMCA3LjR6bTAtNzYuN2wwIDIuNSAxMDIuOSAwIDAtMi41LTEwMi45IDB6TTc4LjEgNDQyLjlsMjI3LjcgMGMxMS44LTguNyAyMi43LTE4LjYgMzIuMi0yOS43bC0yOTMuMSAwYzkuNiAxMSAyMS40IDIxIDMzLjIgMjkuN3ptMjAzLTM3MS4zbDEwMi45IDAgMC00LjktMTAyLjkgMCAwIDQuOXptMCAxNDguNWwxMDIuOSAwIDAtMTQuOC0xMDIuOSAwIDAgMTQuOHpNMzguOCA0MDUuN2wzMDUuMyAwYzYuNy04LjUgMTIuNi0xNy42IDE3LjgtMjcuMkwyMyAzNzguNWM1LjIgOS42IDkuMiAxOC43IDE1LjggMjcuMnptMTg4LjgtMzcuMWwxMzkuNCAwYzMuNy04IDUuOC0xNi4yIDguNS0yNC44bC0xMTUgMGMtOC44IDEwLjctMjAuMSAxOS4yLTMyLjkgMjQuOHptNTMuNS04MS43YzAgMi41LS4xIDUtLjQgNy40bDEwMy4xIDBjLjEtMi41IC4yLTQuOSAuMi03LjRsMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTI5LjdsMTAyLjkgMCAwLTE3LjMtMTAyLjkgMCAwIDE3LjN6Il19LG9oZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1kaW5lcnMtY2x1YiIsaWNvbjpbNTc2LDUxMixbXSwiZjI0YyIsIk0yMzkuNyA3OS45YTE3NS44IDE3NS44IDAgMSAwIDAgMzUxLjYgMTc1LjggMTc1LjggMCAxIDAgMC0zNTEuNnpNMTk5LjggMzU5LjVjLTQxLjctMTUuOS03MS40LTU2LjQtNzEuNC0xMDMuOHMyOS43LTg3LjkgNzEuNC0xMDQuMWwwIDIwNy45em03OS44IC4zbDAtMjA4LjJjNDEuNyAxNi4yIDcxLjQgNTYuNyA3MS40IDEwNC4xcy0yOS43IDg3LjktNzEuNCAxMDQuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTMyOS43IDQ0OGwtOTAuMyAwQzEzMy4yIDQ0OCA0NS42IDM2Mi41IDQ1LjYgMjU3LjggNDUuNiAxNDMuMiAxMzMuMiA2NCAyMzkuNCA2NGw5MC4zIDBjMTA1IDAgMjAwLjcgNzkuMiAyMDAuNyAxOTMuOCAwIDEwNC43LTk1LjcgMTkwLjItMjAwLjcgMTkwLjJ6Il19LGxoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJrdWJlcm5ldGVzIixpY29uOls1MTIsNTEyLFtdLCJlODU3IiwiTTI1NiAzMTYuMWMzLjUtLjEgNy4yIDIgOC45IDUuMUwyOTMgMzcxLjdjLTMuNiAxLjItNy4zIDIuMy0xMS4yIDMuMS0yMS40IDQuOS00Mi43IDMuNC02Mi0zLjJsMjcuOS01MC40YzEuNy0zLjEgNC45LTUgOC4yLTUuMXptNTAuNS0yMy40bDU3LjIgOS43Yy04LjQgMjMuNS0yNC40IDQzLjktNDUuOCA1Ny41bC0yMi4yLTUzLjZjLTItNC43IC4xLTEwLjQgNC44LTEyLjYgMS45LS45IDQuMS0xLjMgNi0uOXptLTg5LjEgNy43Yy41IDIuMSAuMyA0LjItLjUgNmwtMjEuOCA1My4zYy0yMC41LTEzLjItMzYuOS0zMi45LTQ1LjctNTcuMWw1Ni43LTkuNmM1LjEtLjkgMTAuMSAyLjQgMTEuMyA3LjV6bTU4LjgtNDFsLTMuOSAxNy4xLTE1LjggNy42LTE1LjktNy43LTQtMTcuMSAxMS0xMy43IDE3LjcgMCAxMSAxMy43em0tNzMuNy0xNi43YzMuOSAzLjQgNC40IDkuNSAxLjIgMTMuNi0xLjMgMS43LTMuMSAyLjgtNSAzLjNsLTU1LjMgMTYuMmMtMi44LTI1LjcgMy4zLTUwLjcgMTYuMS03MS42bDQzLjEgMzguNnptMTUwLjctMzguNWM2LjQgMTAuNCAxMS4yIDIyIDE0LjEgMzQuNiAyLjkgMTIuNCAzLjYgMjQuOCAyLjQgMzYuOGwtNTUuNi0xNmMtNS0xLjQtOC4xLTYuNy02LjktMTEuNyAuNS0yLjEgMS42LTMuOCAzLjEtNS4xbDQyLjktMzguNXptLTExMy44IDQuNGMtLjIgNS4yLTQuNyA5LjQtOS45IDkuNC0yLjEgMC00LjEtLjctNS43LTEuOGwtNDcuMy0zMy40YzE0LjUtMTQuMyAzMy4xLTI0LjggNTQuNS0yOS43IDMuOS0uOSA3LjgtMS42IDExLjctMmwtMy4zIDU3LjZ6bTMwLjgtNTcuNmMyNSAzLjEgNDguMSAxNC40IDY1LjggMzEuN2wtNDcuMSAzMy4yYy00LjIgMy0xMCAyLjMtMTMuMy0xLjgtMS4zLTEuNy0yLTMuNi0yLjEtNS42bC0zLjMtNTcuNXpNMjU0LjUtMS4zYzUuOS0uMyAxMS43IC45IDE3IDMuNEw0NTUgODkuN2M0LjcgMi4zIDguOSA1LjYgMTIuMiA5LjdzNS42IDguOCA2LjggMTMuOWw0NS4zIDE5Ni45YzEuMiA1LjEgMS4yIDEwLjQgMCAxNS41cy0zLjUgOS45LTYuOCAxMy45TDM4NS42IDQ5Ny42Yy0zLjMgNC4xLTcuNSA3LjQtMTIuMiA5LjZzLTEwIDMuNC0xNS4yIDMuNGwtMjAzLjYgMGMtNS4zIDAtMTAuNS0xLjItMTUuMi0zLjRzLTguOS01LjUtMTIuMi05LjZMLjIgMzM5LjdjLS43LS45LTEuNC0xLjgtMi0yLjgtMi42LTMuOS00LjMtOC4zLTUuMS0xMi45cy0uNy05LjMgLjMtMTMuOEwzOC43IDExMy40YzEuMi01LjEgMy41LTkuOSA2LjgtMTMuOXM3LjUtNy40IDEyLjItOS43TDI0MS4xIDIuMWM0LjItMiA4LjgtMy4yIDEzLjQtMy40em0xLjggNjdjLTYuMSAwLTExIDUuNS0xMSAxMi4yIDAgLjEgMCAuMiAwIC4zIDAgLjktLjEgMiAwIDIuOCAuMSAzLjkgMSA2LjkgMS41IDEwLjQgLjkgNy43IDEuNyAxNCAxLjIgMTkuOS0uNSAyLjItMi4xIDQuMy0zLjYgNS43bC0uMiA0LjZjLTYuNiAuNS0xMy4yIDEuNi0xOS44IDMuMS0yOC41IDYuNS01My4xIDIxLjEtNzEuOCA0MS0xLjItLjgtMy4zLTIuMy00LTIuOC0yIC4zLTQgLjktNi41LS42LTQuOS0zLjMtOS40LTcuOS0xNC44LTEzLjQtMi41LTIuNi00LjMtNS4xLTcuMi03LjctLjctLjYtMS43LTEuNC0yLjQtMi0yLjMtMS44LTUtMi44LTcuNy0yLjktMy40LS4xLTYuNiAxLjItOC44IDMuOS0zLjggNC43LTIuNSAxMiAyLjcgMTYuMiAuMSAwIC4xIC4xIC4yIC4xIC43IC42IDEuNiAxLjMgMi4zIDEuOCAzLjEgMi4zIDYgMy41IDkuMSA1LjMgNi42IDQuMSAxMiA3LjQgMTYuMyAxMS41IDEuNyAxLjggMiA0LjkgMi4yIDYuM2wzLjUgMy4yYy0xOC44IDI4LjQtMjcuNiA2My40LTIyLjQgOTkuMWwtNC42IDEuM2MtMS4yIDEuNi0yLjkgNC00LjcgNC43LTUuNiAxLjgtMTIgMi40LTE5LjcgMy4zLTMuNiAuMy02LjcgLjEtMTAuNSAuOC0uOCAuMi0yIC40LTIuOSAuN2wtLjEgMC0uMiAuMWMtNi41IDEuNi0xMC43IDcuNS05LjMgMTMuNCAxLjMgNS45IDcuNyA5LjQgMTQuMiA4bC4yIDBjLjEgMCAuMS0uMSAuMi0uMSAuOS0uMiAyLjEtLjQgMi44LS42IDMuOC0xIDYuNS0yLjUgOS44LTMuOCA3LjMtMi42IDEzLjMtNC44IDE5LjItNS42IDIuNC0uMiA1IDEuNSA2LjMgMi4ybDQuOC0uOGMxMSAzNC4xIDM0LjEgNjEuNyA2My4zIDc5LjFsLTIgNC44Yy43IDEuOSAxLjUgNC40IDEgNi4yLTIuMSA1LjUtNS44IDExLjQtOS45IDE3LjktMiAzLTQuMSA1LjMtNS45IDguOC0uNCAuOC0xIDIuMS0xLjQgMy0yLjggNi0uOCAxMyA0LjcgMTUuNiA1LjUgMi42IDEyLjItLjEgMTUuMi02LjJsMCAwYy40LS45IDEtMiAxLjQtMi44IDEuNi0zLjYgMi4xLTYuNiAzLjItMTAuMSAyLjktNy4zIDQuNS0xNC45IDguNS0xOS43IDEuMS0xLjMgMi45LTEuOCA0LjgtMi4zbDIuNS00LjVjMjUuNSA5LjggNTQgMTIuNCA4Mi41IDUuOSA2LjUtMS41IDEyLjgtMy40IDE4LjgtNS43IC43IDEuMiAyIDMuNiAyLjMgNC4yIDEuOSAuNiAzLjkgLjkgNS42IDMuNCAzIDUuMSA1IDExLjIgNy41IDE4LjUgMS4xIDMuNCAxLjYgNi41IDMuMiAxMC4xIC40IC44IDEgMiAxLjQgMi44IDIuOSA2LjEgOS43IDguOCAxNS4yIDYuMiA1LjQtMi42IDcuNS05LjYgNC43LTE1LjYtLjQtLjktMS0yLjEtMS40LTMtMS44LTMuNC0zLjktNS43LTUuOS04LjctNC4yLTYuNS03LjYtMTEuOS05LjgtMTcuNC0uOS0yLjggLjItNC42IC44LTYuNS0uNC0uNS0xLjMtMy4yLTEuOC00LjQgMzAuNC0xNy45IDUyLjgtNDYuNiA2My4zLTc5LjYgMS40IC4yIDMuOSAuNyA0LjcgLjggMS43LTEuMSAzLjItMi41IDYuMi0yLjMgNS45IC44IDExLjkgMyAxOS4yIDUuNiAzLjQgMS4zIDYuMSAyLjggOS44IDMuOCAuOCAuMiAxLjkgLjQgMi44IC42IC4xIDAgLjEgMCAuMiAuMWwuMiAwYzYuNSAxLjQgMTIuOC0yLjIgMTQuMi04cy0yLjgtMTEuOC05LjMtMTMuNGMtLjktLjItMi4zLS42LTMuMi0uNy0zLjgtLjctNi45LS41LTEwLjUtLjgtNy43LS44LTE0LTEuNC0xOS43LTMuMi0yLjMtLjktNC0zLjctNC44LTQuOGwtNC40LTEuM2MyLjMtMTYuNiAxLjctMzMuOS0yLjMtNTEuMy00LTE3LjUtMTEuMS0zMy41LTIwLjYtNDcuNiAxLjEtMSAzLjMtMi45IDMuOS0zLjUgLjItMiAwLTQgMi4xLTYuMiA0LjMtNC4xIDkuOC03LjQgMTYuMy0xMS41IDMuMS0xLjggNi0zIDkuMS01LjMgLjctLjUgMS43LTEuMyAyLjQtMS45IDUuMy00LjIgNi41LTExLjQgMi43LTE2LjJzLTExLjEtNS4yLTE2LjQtMWMtLjcgLjYtMS44IDEuNC0yLjQgMi0yLjkgMi41LTQuOCA1LTcuMiA3LjctNS40IDUuNS05LjkgMTAuMS0xNC44IDEzLjQtMi4xIDEuMi01LjMgLjgtNi43IC43bC00LjIgM2MtMjMuOC0yNS01Ni4yLTQxLTkxLjItNDQuMS0uMS0xLjUtLjItNC4xLS4yLTQuOS0xLjQtMS40LTMuMi0yLjUtMy42LTUuNS0uNS01LjkgLjMtMTIuMyAxLjMtMTkuOSAuNS0zLjYgMS40LTYuNiAxLjUtMTAuNCAwLS45IDAtMi4yIDAtMy4xIDAtNi43LTQuOS0xMi4yLTExLTEyLjJ6Il19LGNoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaW50ZXJlc3QiLGljb246WzUxMiw1MTIsW10sImYwZDIiLCJNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDgtMjUuNiAwLTUwLjItMy45LTczLjQtMTEuMSAxMC4xLTE2LjUgMjUuMi00My41IDMwLjgtNjUgMy0xMS42IDE1LjQtNTkgMTUuNC01OSA4LjEgMTUuNCAzMS43IDI4LjUgNTYuOCAyOC41IDc0LjggMCAxMjguNy02OC44IDEyOC43LTE1NC4zIDAtODEuOS02Ni45LTE0My4yLTE1Mi45LTE0My4yLTEwNyAwLTE2My45IDcxLjgtMTYzLjkgMTUwLjEgMCAzNi40IDE5LjQgODEuNyA1MC4zIDk2LjEgNC43IDIuMiA3LjIgMS4yIDguMy0zLjMgLjgtMy40IDUtMjAuMyA2LjktMjguMSAuNi0yLjUgLjMtNC43LTEuNy03LjEtMTAuMS0xMi41LTE4LjMtMzUuMy0xOC4zLTU2LjYgMC01NC43IDQxLjQtMTA3LjYgMTEyLTEwNy42IDYwLjkgMCAxMDMuNiA0MS41IDEwMy42IDEwMC45IDAgNjcuMS0zMy45IDExMy42LTc4IDExMy42LTI0LjMgMC00Mi42LTIwLjEtMzYuNy00NC44IDctMjkuNSAyMC41LTYxLjMgMjAuNS04Mi42IDAtMTktMTAuMi0zNC45LTMxLjQtMzQuOS0yNC45IDAtNDQuOSAyNS43LTQ0LjkgNjAuMiAwIDIyIDcuNCAzNi44IDcuNCAzNi44cy0yNC41IDEwMy44LTI5IDEyMy4yQzE2MS41IDQzNy4yIDE2My41IDQ2Ny40IDE2NS42IDQ4NyA3My40IDQ1MC45IDggMzYxLjEgOCAyNTYgOCAxMTkgMTE5IDggMjU2IDhTNTA0IDExOSA1MDQgMjU2eiJdfSxkaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYWxnb2xpYSIsaWNvbjpbNTEyLDUxMixbXSwiZjM2YyIsIk0yNTYgMGMtMTM5LjkgMC0yNTQgMTEyLjctMjU2IDI1Mi4xLTIgMTQxLjUgMTEyLjkgMjU4LjcgMjU0LjUgMjU5LjUgNDMuNyAuMyA4NS45LTEwLjQgMTIzLjMtMzAuNyAzLjYtMiA0LjItNyAxLjEtOS43bC0yNC0yMS4yYy00LjktNC4zLTExLjgtNS41LTE3LjgtMy0yNi4xIDExLjEtNTQuNSAxNi44LTgzLjcgMTYuNC0xMTQuNC0xLjUtMjA2LjktOTYuNi0yMDUuMS0yMTEgMS44LTExMi45IDk0LjMtMjA0LjIgMjA3LjctMjA0LjJsMjA3LjcgMCAwIDM2OS0xMTcuOC0xMDQuN2MtMy44LTMuNC05LjctMi43LTEyLjcgMS4zLTE4LjkgMjUtNDkuNyA0MC42LTgzLjkgMzguMi00Ny41LTMuMy04NS45LTQxLjUtODkuNS04OC45LTQuMi01Ni42IDQwLjYtMTAzLjkgOTYuMy0xMDMuOSA1MC40IDAgOTEuOSAzOC44IDk2LjIgODggLjQgNC40IDIuNCA4LjUgNS43IDExLjRsMzAuNyAyNy4yYzMuNSAzLjEgOSAxLjIgOS45LTMuNCAyLjItMTEuOCAzLTI0LjIgMi4xLTM2LjgtNC45LTcyLTYzLjMtMTMwLTEzNS40LTEzNC40LTgyLjctNS4xLTE1MS44IDU5LjUtMTU0IDE0MC42LTIuMSA3OC45IDYyLjYgMTQ3IDE0MS42IDE0OC43IDMzIC43IDYzLjYtOS42IDg4LjMtMjcuNkw0OTUgNTA5LjRjNi42IDUuOCAxNyAxLjIgMTctNy43bDAtNDkyYzAtNS40LTQuNC05LjctOS43LTkuN0wyNTYgMHoiXX0scGhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0YWNrcGF0aCIsaWNvbjpbNDQ4LDUxMixbXSwiZjg0MiIsIk0yNDQuNiAyMzIuNGMwIDguNS00LjMgMjAuNS0yMS4zIDIwLjVsLTE5LjYgMCAwLTQxLjUgMTkuNiAwYzE3LjEgMCAyMS4zIDEyLjQgMjEuMyAyMXpNNDQ4IDMybDAgNDQ4LTQ0OCAwIDAtNDQ4IDQ0OCAwek0xNTEuMyAyODcuOGMwLTIxLjItMTIuMS0zNC41LTQ2LjctNDQuOC0yMC42LTcuNC0yNi0xMC45LTI2LTE4LjZzNy0xNC42IDIwLjQtMTQuNmMxNC4xIDAgMjAuOCA4LjQgMjAuOCAxOC40bDMwLjcgMCAuMi0uNmMuNS0xOS42LTE1LjEtNDEuNi01MS4xLTQxLjYtMjMuNCAwLTUyLjYgMTAuOC01Mi42IDM4LjMgMCAxOS40IDkuMiAzMS4zIDUwLjcgNDQuNCAxNy4zIDYuMiAyMS45IDEwLjQgMjEuOSAxOS41IDAgMTUuMi0xOS4xIDE0LjItMTkuNSAxNC4yLTIwLjQgMC0yNS43LTkuMS0yNS43LTIxLjlsLTMwLjggMC0uMiAuNmMtLjcgMzEuMyAyOC40IDQ1LjIgNTYuNiA0NS4yIDMwIDAgNTEuMS0xMy42IDUxLjEtMzguM3ptMTI1LjQtNTUuNmMwLTI1LjMtMTguNC00NS41LTUzLjQtNDUuNWwtNTEuOCAwIDAgMTM4LjIgMzIuMiAwIDAtNDcuNCAxOS42IDBjMzAuMyAwIDUzLjQtMTYgNTMuNC00NS40ek0yOTcuOSAzMjVsNDkuMS0xMzguMi0zMS4xIDAtNDcuOSAxMzguMiAyOS45IDB6TTQwNC41IDE4Ni44bC0zMS4xIDAtNDcuOSAxMzguMiAyOS45IDAgNDkuMS0xMzguMnoiXX0saGhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9jdG9wdXMtZGVwbG95IixpY29uOls1MTIsNTEyLFtdLCJlMDgyIiwiTTQ1NS43IDM0OS4yYy00NS45LTM5LjEtMzYuNy03Ny45LTE2LjEtMTI4LjEgMzUuNy04Ny0yMy41LTE4Ni45LTEwOS42LTIxMi44LTkyLjktMjcuOS0xOTUuNyAxNi0yMzAuMyAxMDguOC04LjcgMjMuNS0xMi41IDQ4LjUtMTEgNzMuNSAxLjcgMjkuNSAxNC43IDUzIDI0LjEgODAuMyAxNy4yIDUwLjItMjguMSA5Mi43LTY2LjcgMTE3LjYtNDYuOCAzMC4yLTM2LjMgMzkuOS04LjQgNDEuOSAyMy40IDEuNyA0NC41LTQuNSA2NS4zLTE1IDkuMi00LjYgNDAuNy0xOC45IDQ1LjEtMjguNi0xMi4yIDI2LjYtMzcgNzIuNy0yMS41IDEwMi4xIDE5LjEgMzYuMiA2Ny4xLTMxLjggNzYuNy00NS44IDguNi0xMi42IDQzLTgxLjMgNjMuNi00Ni45IDE4LjkgMzEuNCA4LjYgNzYuNCAzNS43IDEwNC42IDMyLjkgMzQuMiA1MS4yLTE4LjMgNTEuNC00NC4yIC4yLTE2LjQtNi4xLTk1LjkgMjkuOS01OS45IDIxLjQgMjEuNCA1Mi45IDcxLjIgODguNiA2NyAzOC43LTQuNS0yMi4xLTY4LTI4LjMtNzguNyA1LjQgNC4zIDUzLjcgMzQuMSA1My44IDkuNSAuMS0xOC44LTMwLjEtMzQuNy00Mi41LTQ1LjN6Il19LHVoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ5YW1tZXIiLGljb246WzUxMiw1MTIsW10sImY4NDAiLCJNNTAwLjcgMTU5LjVjLS40LTEuOC0xLjItMy40LTIuMy00LjhzLTIuNS0yLjYtNC4xLTMuNWMtMy4xLTEuNi02LjctMi0xMC4xLTEuMWwtMjYuNCA2LjYgMC0uMi0yMi4zIDUuOC0xLjIgLjMtLjYtMi4yYy0xNS41LTU4LjMtNDUtMTExLjktODYuMS0xNTYuMi0yLjYtMi43LTYuMS00LjItOS44LTQuM3MtNy4zIDEuMy0xMCAzLjhsLTEwMi45IDEwMi43LTE5OS45IDBjLTYuNiAwLTEyLjkgMi42LTE3LjYgNy4zUzAgMTI0LjggMCAxMzEuNGwwIDI0OUMwIDM4NyAyLjYgMzkzLjMgNy4zIDM5OHMxMSA3LjMgMTcuNiA3LjNMMjI1IDQwNS4zIDMyOC4xIDUwOGMyLjYgMi42IDYgNCA5LjcgNHM3LjEtMS40IDkuNy00Yy4xLS4xIC4yLS4zIC40LS40IDI5LjMtMzEuNSA1Mi44LTY3LjggNjkuNi0xMDcuNCA2LjktMTYuNSAxMi43LTMzLjUgMTcuMy01MC44bDAgMCAyMC40IDUuMyAwLS4xIDI4LjMgNy4zYy45IC4yIDEuNyAuNCAyLjYgLjUgMS40IC4yIDIuOCAuMiA0LjEtLjEgMi41LS41IDQuOC0xLjcgNi43LTMuNHMzLjItNCAzLjgtNi41YzE1LjItNjMuNCAxNS4yLTEyOS42IC4xLTE5M2wwIDB6TTMzNy4xIDI0LjdsMCAwIDAgMCAwIDB6TTIyNi45IDE4OS44bC01Mi42IDkxLjNjLTEgMS43LTEuNSAzLjctMS41IDUuN2wwIDQ2LjJjMCA1LjgtMi4zIDExLjQtNi41IDE1LjZzLTkuNyA2LjQtMTUuNiA2LjRsLTMuNCAwYy01LjggMC0xMS40LTIuMy0xNS42LTYuNHMtNi41LTkuNy02LjUtMTUuNmwwLTQ1LjdjMC0xLjktLjUtMy44LTEuNC01LjVMNzIuMyAxODkuNmMtMS45LTMuNC0yLjgtNy4xLTIuOC0xMXMxLjEtNy42IDMtMTAuOSA0LjctNi4xIDguMS04IDcuMS0yLjkgMTEtMi45bDMuMyAwYzQgMCA4IDEuMSAxMS41IDMuMnM2LjMgNS4xIDguMSA4LjdsMzYuNCA3MC4zIDM3LjUtNzAuNWMxLjgtMy41IDQuNi02LjQgNy45LTguNHM3LjItMy4yIDExLjEtMy4yIDcuOCAuOSAxMS4yIDIuOCA2LjMgNC43IDguMiA4LjFjMiAzLjMgMyA3LjEgMyAxMXMtMSA3LjctMyAxMWwwIDB6TTMzNy4xIDI0LjdjMzUuOSA0MC42IDYxLjkgODkgNzUuOCAxNDEuM2wuNiAyLTExNC4xIDI5LjYgMC02Ni4xYzAtNi42LTIuNy0xMi45LTcuMy0xNy42cy0xMS03LjMtMTcuNi03LjNsLTE5LjQgMCA4Mi4xLTgxLjh6TTM5Ny42IDM5MmwwIDAgMCAwYy0xNC43IDM0LjgtMzUuMSA2Ny02MC4yIDk1LjJsLTgyLjItODEuOSAxOS4yIDBjNi42IDAgMTIuOS0yLjYgMTcuNi03LjNzNy4zLTExIDcuMy0xNy42bDAtNjYuMiAxMTQuNiAyOS45Yy00LjQgMTYuMy05LjggMzIuMy0xNi4zIDQ3LjlsMCAwem04NC01Mi40bDAgMC01MC42LTEzLjEtMTMxLjctMzQuMyAwLTcyLjUgMTE5LjctMzEgNC41LTEuMmMyOS45LTcuNyA0OS4yLTEyLjggNTguMS0xNS4xIDEyIDU1LjEgMTIgMTEyLjEgMCAxNjcuMnoiXX0sZmhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1vZHgiLGljb246WzQ0OCw1MTIsW10sImYyODUiLCJNMzU2IDI0MS44bDM2LjcgMjMuNyAwIDIxNC41LTEzMy04My44IDk2LjMtMTU0LjR6TTQ0MCA3NWwtMjEzLjcgMC0yMyAzNy44IDE1My41IDk2LjUgODMuMi0xMzQuM3pNMzUxIDIxNy44bC0yOTUuOC0xODUuOCAwIDIxNC41IDQ2IDI5IDI0OS44LTU3Ljd6TTk3IDI5NC4yTDggNDM3IDIyMS43IDQzNyAzNDYuNyAyMzYuNSA5NyAyOTQuMnoiXX0sbWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS10aHJlYWRzIixpY29uOls0NDgsNTEyLFtdLCJlNjE5IiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTI5NC4yIDI0NC4zYzE5LjUgOS4zIDMzLjcgMjMuNSA0MS4yIDQwLjkgMTAuNCAyNC4zIDExLjQgNjMuOS0yMC4yIDk1LjQtMjQuMiAyNC4xLTUzLjUgMzUtOTUuMSAzNS4zbC0uMiAwYy00Ni44LS4zLTgyLjgtMTYuMS0xMDYuOS00Ni44LTIxLjUtMjcuMy0zMi42LTY1LjQtMzMtMTEzLjFsMC0uMmMuNC00Ny43IDExLjUtODUuNyAzMy0xMTMuMSAyNC4yLTMwLjcgNjAuMi00Ni41IDEwNi45LTQ2LjhsLjIgMGM0Ni45IC4zIDgzLjMgMTYgMTA4LjIgNDYuNiAxMi4zIDE1LjEgMjEuMyAzMy4zIDI3IDU0LjRsLTI2LjkgNy4yYy00LjctMTcuMi0xMS45LTMxLjktMjEuNC00My42LTE5LjQtMjMuOS00OC43LTM2LjEtODctMzYuNC0zOCAuMy02Ni44IDEyLjUtODUuNSAzNi4yLTE3LjUgMjIuMy0yNi42IDU0LjQtMjYuOSA5NS41IC4zIDQxLjEgOS40IDczLjMgMjYuOSA5NS41IDE4LjcgMjMuOCA0Ny40IDM2IDg1LjUgMzYuMiAzNC4zLS4zIDU2LjktOC40IDc1LjgtMjcuMyAyMS41LTIxLjUgMjEuMS00Ny45IDE0LjItNjQtNC05LjQtMTEuNC0xNy4zLTIxLjMtMjMuMy0yLjQgMTgtNy45IDMyLjItMTYuNSA0My4yLTExLjQgMTQuNS0yNy43IDIyLjQtNDguNCAyMy41LTE1LjcgLjktMzAuOC0yLjktNDIuNi0xMC43LTEzLjktOS4yLTIyLTIzLjItMjIuOS0zOS41LTEuNy0zMi4yIDIzLjgtNTUuMyA2My41LTU3LjYgMTQuMS0uOCAyNy4zLS4yIDM5LjUgMS45LTEuNi05LjktNC45LTE3LjctOS44LTIzLjQtNi43LTcuOC0xNy4xLTExLjgtMzAuOC0xMS45bC0uNCAwYy0xMSAwLTI2IDMuMS0zNS42IDE3LjZsLTIzLTE1LjhjMTIuOC0xOS40IDMzLjYtMzAuMSA1OC41LTMwLjFsLjYgMGM0MS44IC4zIDY2LjYgMjYuMyA2OS4xIDcxLjggMS40IC42IDIuOCAxLjIgNC4yIDEuOWwuMSAuNXptLTcxLjggNjcuNWMxNy0uOSAzNi40LTcuNiAzOS43LTQ4LjgtOC44LTEuOS0xOC42LTIuOS0yOS0yLjktMy4yIDAtNi40IC4xLTkuNiAuMy0yOC42IDEuNi0zOC4xIDE1LjUtMzcuNCAyNy45IC45IDE2LjcgMTkgMjQuNSAzNi40IDIzLjZsLS4xLS4xeiJdfSxnaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib2xkLXJlcHVibGljIixpY29uOls1MTIsNTEyLFtdLCJmNTEwIiwiTTI0My44IDEwLjJjNy41LS4zIDE1LS4zIDIyLjUtLjEgMy42IC4xIDcuMiAuNCAxMC44IC43IDQuOSAuMyA5LjggMSAxNC43IDEuNiAyLjkgLjQgNS44IDEgOC43IDEuNSA3LjkgMS4zIDE1LjcgMy4zIDIzLjQgNS40IDEyLjIgMy41IDI0LjIgNy45IDM1LjggMTMuMiAyNi42IDEyLjIgNTAuOSAyOS4yIDcxLjYgNDkuOSAyMCAyMC4xIDM2LjcgNDMuNSA0OC45IDY5LjIgMS4xIDIuNiAyLjQgNS4xIDMuNSA3LjcgMi44IDYuNCA1LjQgMTMgNy42IDE5LjYgNC4xIDEyLjMgNy4zIDI1IDkuNCAzNy44IC42IDMuMSAxIDYuMyAxLjQgOS41IC41IDMuOCAuOSA3LjcgMS4yIDExLjYgLjggOC4zIC44IDE2LjcgLjggMjUuMS0uMSA1LS4zIDkuOS0uNyAxNC45LS4yIDMuNC0uNSA2LjgtMSAxMC4xLS40IDIuNy0uNiA1LjUtMS4xIDguMi0uOSA1LjEtMS43IDEwLjMtMi45IDE1LjQtNC4xIDE4LjUtMTAuMyAzNi42LTE4LjUgNTMuNi0xNS44IDMyLjgtMzguOCA2Mi4yLTY3LjEgODUuMS0xNy4zIDE0LjEtMzYuNCAyNS45LTU2LjkgMzQuOS02LjIgMi43LTEyLjUgNS4zLTE4LjkgNy40LTMuNSAxLjItNyAyLjQtMTAuNiAzLjQtNi42IDEuOS0xMy4zIDMuNi0yMCA1LTQuNyAuOS05LjMgMS43LTE0IDIuNS01LjMgLjctMTAuNSAxLjQtMTUuOCAxLjctNi43IC43LTEzLjQgLjgtMjAuMSAuOC02LjggMC0xMy42LS4xLTIwLjQtLjgtMy4zLS4yLTYuNi0uNS05LjgtMS0yLjctLjQtNS41LS42LTguMi0xLjEtNC4xLS43LTguMi0xLjQtMTIuNC0yLjItNC4yLS45LTguNS0xLjktMTIuNy0zLTguNi0yLjItMTcuMS01LTI1LjQtOC4xLTEwLjUtNC4xLTIwLjgtOC43LTMwLjYtMTQuMi0yLjEtMS4yLTQuMy0yLjMtNi40LTMuNi0xMS4yLTYuNi0yMS45LTE0LjEtMzEuOS0yMi4zLTM0LjctMjguNC02MS40LTY2LjQtNzYuNC0xMDguNy0zLjEtOC43LTUuNy0xNy42LTcuOC0yNi43LTEuNS02LjItMi41LTEyLjQtMy42LTE4LjctLjQtMi4zLS42LTQuNy0xLTcuMS0uNi00LS44LTgtMS4yLTExLjktLjgtOS41LS43LTE5LS41LTI4LjUgLjEtMy41IC4zLTcgLjctMTAuNSAuMy0zLjIgLjUtNi40IC45LTkuNSAuNC0yLjggLjctNS42IDEuMi04LjQgLjctMy45IDEuMy03LjkgMi4xLTExLjggMy40LTE2LjUgOC41LTMyLjcgMTUuMy00OC4yIDEuMi0yLjkgMi42LTUuNyAzLjktOC42IDguMS0xNi43IDE3LjktMzIuNiAyOS41LTQ3LjEgMjAtMjUuNCA0NS4xLTQ2LjcgNzMuMy02Mi41IDcuNS00LjIgMTUuMi04IDIzLjEtMTEuNCAxNS44LTYuOSAzMi40LTEyIDQ5LjMtMTUuNCAzLjUtLjcgNy0xLjIgMTAuNi0xLjggMi42LS41IDUuMy0uNyA3LjktMS4xIDMuNS0uNSA3LjEtLjcgMTAuNi0xIDIuNS0uMiA0LjktLjQgNy40LS41em04LjYgMjQuNGMtOS4yIC4xLTE4LjQgMS0yNy42IDIuMi03LjMgMS4xLTE0LjUgMi42LTIxLjcgNC4zLTEzLjkgMy41LTI3LjUgOC4zLTQwLjUgMTQuNC0xMC41IDUtMjAuNiAxMC43LTMwLjIgMTcuMi00LjIgMi45LTguNCA1LjgtMTIuMyA5LTUuMSA0LTEwIDguMi0xNC43IDEyLjYtMi41IDIuMi00LjggNC43LTcuMiA3LjEtMjguMiAyOC44LTQ4LjQgNjUuNC01Ny41IDEwNC43LTIgOC40LTMuNSAxNy00LjQgMjUuNi0xLjEgOC45LTEuNCAxNy45LTEuNCAyNi44IC4xIDcuMSAuNCAxNC4zIDEuMiAyMS40IC42IDcuMSAxLjkgMTQuMiAzLjIgMjEuMiAxLjEgNC42IDIgOS4zIDMuMyAxMy45IDYuMyAyMy40IDE2LjUgNDUuNyAzMC4xIDY1LjggOC42IDEzIDE4LjggMjQuOSAzMCAzNS44IDE2LjMgMTUuOCAzNSAyOSA1NS4zIDM5LjIgNy4zIDMuNSAxNC43IDYuOSAyMi4zIDkuNiA1IDEuOCAxMC4xIDMuNiAxNS4yIDUgMTEuMyAzLjIgMjIuOCA1LjYgMzQuNCA3LjEgMi45IC4zIDUuOCAuNiA4LjcgLjkgMTMuOCAxLjEgMjcuNyAxIDQxLjUtLjQgNC40LS42IDguOS0xIDEzLjMtMS44IDMuNi0uNyA3LjMtMS4yIDEwLjktMi4xIDQuMS0xIDguMy0xLjkgMTIuNC0zLjEgMjYuNS03LjMgNTEuNi0xOS43IDczLjYtMzYuMiAxNS44LTExLjggMzAtMjUuOCA0Mi4xLTQxLjMgMy4zLTQgNi4yLTguMyA5LjEtMTIuNiAzLjQtNS4xIDYuNi0xMC4yIDkuNi0xNS41IDIuNC00LjQgNC43LTguOSA3LTEzLjQgNS43LTEyLjEgMTAuMy0yNC42IDEzLjgtMzcuNSAyLjYtMTAgNC43LTIwLjIgNS45LTMwLjQgMS44LTEzLjUgMS45LTI3LjEgMS4zLTQwLjctLjMtMy45LS43LTcuOC0xLTExLjctMi4yLTE5LjEtNi44LTM3LjktMTMuOC01NS44LTYtMTUuMS0xMy41LTI5LjYtMjIuNi00My4xLTEyLjctMTguOC0yOC4yLTM1LjctNDYtNDkuOC0yNS0yMC01NC41LTM0LjUtODUuNi00Mi4xLTcuOC0xLjktMTUuNy0zLjMtMjMuNi00LjQtMy45LS42LTcuOC0uOC0xMS44LTEuMi03LjQtLjYtMTQuOC0uNy0yMi4yLS42ek0xNDcuMyA4My41YzEzLjMtOC45IDI4LjEtMTUuNCA0My4zLTIwLjItMy4yIDEuOC02LjQgMy40LTkuNSA1LjMtMTEuMiA2LjctMjEuNSAxNC45LTMwLjQgMjQuNS02LjggNy40LTEyLjggMTUuNy0xNyAyNC45LTMuMyA2LjktNS42IDE0LjItNi45IDIxLjctLjkgNC44LTEuMyA5LjgtMS4yIDE0LjggLjEgMTMuNyA0LjQgMjcuMSAxMS4zIDM4LjggNS45IDEwLjIgMTMuNiAxOS4zIDIyLjQgMjcuMyA0LjkgNC40IDEwLjIgOC4xIDE1IDEyLjYgMi4zIDIuMiA0LjUgNC40IDYuNCA2LjkgMi42IDMuMyA0LjkgNyA2IDExLjEgLjkgMyAuNyA2LjIgLjcgOS4zIDAgNC4xIDAgOC4yIDAgMTIuMyAuMSAzLjUgMCA3LjEgLjEgMTAuNiAuMSAyLjQgMCA0LjggLjEgNy4xIC4yIDUuOCAuMSAxMS41IC4xIDE3LjMgLjEgMi45IDAgNS44IC4xIDguNyAwIDEuNiAuMSAzLjMgMCA0LjktLjkgLjEtMS44IC4yLTIuNyAuMi0xMSAwLTIxLjktMi42LTMyLTYuOS02LTIuNy0xMS44LTUuOS0xNy4xLTkuOC01LjgtNC4yLTExLjEtOS0xNS44LTE0LjMtNi41LTcuMi0xMi0xNS40LTE2LjYtMjMuOS0xLjEtMi0yLjItNC0zLjItNi4xLTEuMi0yLjYtMi42LTUuMS0zLjctNy44LTQtOS43LTYuNi0xOS45LTguMS0zMC4zLS41LTQuNC0xLjEtOC45LTEuMi0xMy4zLS43LTE1LjcgLjgtMzEuNiA0LjctNDYuOCAyLjEtOC4yIDQuOC0xNi4yIDguMy0yMy44IDYuMy0xNC4yIDE1LjMtMjcuMiAyNi4zLTM4LjIgNi4zLTYuMiAxMy4xLTExLjggMjAuNS0xNi43ek0zMjIuNyA2My40YzIuNyAuNyA1LjQgMS43IDguMSAyLjcgNi40IDIuMyAxMi43IDQuOCAxOC43IDggMTMuMSA2LjQgMjUuMyAxNC44IDM1LjggMjUgMTAuMiAxMCAxOC43IDIxLjYgMjUuMSAzNC4zIDEuMyAyLjcgMi42IDUuNSAzLjggOC4zIDYuMyAxNS4xIDEwIDMxLjMgMTEuMiA0Ny42IC40IDQuNSAuNCA5LjEgLjUgMTMuNiAuMSAxMS42LTEuNSAyMy4zLTQuMyAzNC41LTIgNy4zLTQuMyAxNC41LTcuOSAyMS4yLTMuMiA2LjYtNi43IDEzLjItMTAuOCAxOS4yLTYuOSAxMC41LTE1LjYgMTkuOS0yNS44IDI3LjItMTAuNSA3LjYtMjIuNiAxMy0zNS40IDE1LjQtMy41IC43LTcuMSAxLjEtMTAuNyAxLjItMS44IC4xLTMuNyAuMi01LjYtLjEtLjMtMi4xIDAtNC4zIDAtNi41IDAtMy43IC4xLTcuNCAuMS0xMS4yIC4yLTcgMC0xNC4xIC4yLTIxLjEgMC0yLjQgMC00LjggMC03LjEgLjItNS4xIDAtMTAuMSAuMS0xNS4yIC4xLTMtLjItNiAuNS05IC43LTIuNSAxLjgtNC45IDMuMS03LjEgNC41LTcuMyAxMS4xLTEzIDE3LjctMTguMyA1LjQtNC4yIDEwLjUtOC44IDE1LTEzLjggNy43LTguNCAxNC4yLTE3LjkgMTguOC0yOC4zIDIuNS01LjkgNC41LTEyLjEgNS41LTE4LjUgLjktNC40IDEuMS04LjggMS0xMy4zIDAtNy44LTEuNC0xNS42LTMuNi0yMy4yLTEuOC01LjctNC4zLTExLjItNy4xLTE2LjQtMy45LTYuOS04LjYtMTMuMy0xNC0xOS4yLTkuOS0xMC44LTIxLjgtMTkuOS0zNC42LTI3LjEtMS44LTEtMy44LTEuOC01LjYtM3pNMjIxLjkgMTIxLjljMS0xLjIgMi0yLjMgMy4xLTMuNC0uNiAuOS0xLjMgMS44LTIgMi43LTMuMSAzLjktNS41IDguMy03IDEzLjEtLjkgMy4zLTEuNyA2LjYtMS43IDEwLS4xIDIuNS0uMSA1LjEgLjMgNy42IDEuMSA3LjYgNC4zIDE0LjkgOC44IDIxLjEgMiAyLjcgNC4yIDUuMyA2LjkgNy4zIDEuNiAxLjMgMy41IDIuMSA1LjMgMyAzLjEgMS43IDYuMyAzLjIgOS4xIDUuNSAyLjcgMi4xIDQuNiA1LjMgNC40IDguOCAwIDczLjcgMCAxNDcuMyAwIDIyMSAwIDEuNC0uMSAyLjcgMCA0IC4xIDEuNSAuOCAyLjggMS41IDQuMSAuOSAxLjcgMS44IDMuMyAzLjIgNC42IC45IC44IDIgMS40IDMuMiAxLjIgMS41LS4yIDIuNy0xLjQgMy40LTIuNiAxLTEuNSAxLjctMy4yIDIuMy00LjkgLjgtMi4xIC40LTQuNCAuNS02LjYgLjEtNCAwLTguMSAuMS0xMi4xIDAtNS45IDAtMTEuOCAuMS0xNy43IC4xLTMuNiAwLTcuMiAuMS0xMC45IC4yLTQgMC04LjEgLjEtMTIuMSAwLTYgMC0xMiAuMS0xOCAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMS0zLjkgMC03LjkgLjEtMTEuOCAwLTYgMC0xMiAuMS0xOCAuMi0zLjkgMC03LjkgLjItMTEuOCAuMyAxLjQgLjEgMi45IC4yIDQuNCAuMiAzLjYgLjQgNy4yIC44IDEwLjggLjMgMy40IC40IDYuOSAuOSAxMC4zIC40IDMuMSAuNSA2LjIgMSA5LjMgLjYgNC4xIC45IDguMiAxLjUgMTIuMyAxLjUgOSAyLjggMTguMSA1LjEgMjcgMS4xIDQuOCAyLjQgOS42IDQgMTQuMyAyLjUgNy45IDUuNyAxNS43IDEwLjMgMjIuNiAxLjcgMi42IDMuOSA1IDYuMSA3LjIgLjMgLjIgLjYgLjUgLjkgLjcgLjYgLjMgMS4zLS4xIDEuNy0uNiAuNy0uOSAxLjItMS45IDEuNy0yLjkgNC4xLTcuOCA4LjItMTUuNiAxMi4zLTIzLjMgLjctMS4zIDEuNC0yLjYgMi42LTMuNiAxLjgtMS42IDMuOC0yLjcgNi0zLjYgMi45LTEuMiA1LjktMi4yIDktMi40IDYuNi0uNiAxMy4xIC43IDE5LjYgMS44IDMuNyAuNiA3LjQgMS4yIDExLjEgMS40IDMuNyAuMSA3LjUgLjEgMTEuMi0uMyA4LjYtLjkgMTctMyAyNC45LTYuMiA1LjMtMi4yIDEwLjUtNC44IDE1LjMtNy45IDExLjUtNy4yIDIxLjUtMTYuNiAzMC0yNyAxLjItMS40IDIuMi0yLjkgMy41LTQuMy0xLjIgMy4yLTIuNyA2LjQtNC4yIDkuNS0xLjMgMi45LTIuOCA1LjYtNC4zIDguNC01LjIgOS42LTExIDE4LjktMTcuOCAyNy41LTQgNS4yLTguNSAxMC4xLTEzLjMgMTQuNi02LjYgNi4xLTE0LjEgMTEuNC0yMi40IDE0LjgtOC4yIDMuNC0xNy4zIDQuNi0yNi4xIDMuMy0zLjYtLjYtNy0xLjctMTAuNC0yLjktMi44LTEtNS40LTIuNC04LTMuNy0zLjQtMS43LTYuNi0zLjgtOS43LTYuMSAyLjcgMy4xIDUuNyA1LjkgOC43IDguNiA0LjMgMy44IDguNyA3LjMgMTMuNiAxMC4yIDQgMi41IDguMyA0LjQgMTIuOCA1LjUgMS41IC40IDMgLjUgNC41IC42LTEuMyAxLjEtMi42IDItNCAzLTkuNiA2LjUtMjAgMTEuOS0zMC43IDE2LjQtMjAuOSA4LjctNDMuMiAxNC02NS43IDE1LjMtNC43IC4yLTkuMyAuNC0xNCAuNC01LS4xLTEwLS4xLTE0LjktLjctMTEuMi0uOC0yMi4zLTIuNy0zMy4yLTUuNC0xMC40LTIuNy0yMC42LTYuMS0zMC4zLTEwLjYtOC43LTMuOS0xNy4xLTguNC0yNS0xMy44LTEuOC0xLjMtMy43LTIuNS01LjQtNC4xIDYuNi0xLjIgMTMtMy40IDE5LTYuNSA1LjctMi45IDExLTYuNyAxNS42LTExLjEgMi4yLTIuMiA0LjMtNC42IDYuMi03LjEtMy40IDIuMS02LjkgNC4yLTEwLjYgNS44LTQuNCAyLjItOS4xIDMuOC0xMy44IDUtNS43IDEuNS0xMS43IDEuNy0xNy42IDEuMS04LjEtMS0xNS45LTQuMy0yMi41LTktNC4zLTIuOS04LjItNi40LTEyLTEwLjEtOS45LTEwLjItMTguMi0yMS44LTI1LjctMzMuOS0zLjktNi4zLTcuNS0xMi43LTExLjEtMTkuMi0xLTItMi4xLTQuMS0zLjItNi4xIDIuOCAyLjkgNS42IDYgOC40IDguOSAxOS4yIDE5LjIgMzcuNiAzMi4zIDUzLjcgMzUuNSAzLjEgLjcgNi4zIC41IDkuNSAuOCAyLjggLjMgNS42IC4yIDguMyAuMyA1IC4xIDEwLjEgMCAxNS4yLS4yIDMuNi0uMiA3LjMtLjcgMTAuOS0xLjEgMi4xLS4yIDQuMS0uNyA2LjEtMS4yIDMuOS0xIDguMS0xIDExLjggLjYgNC44IDEuOCA4LjQgNS42IDExLjQgOS43IDIuMiAzIDQuMSA2LjIgNS43IDkuNiAxLjIgMi40IDIuNSA0LjggMy42IDcuMyAxIDIuMiAyLjIgNC40IDMuNCA2LjUgLjcgMSAxLjQgMi4yIDIuNiAyLjYgMS4xLS44IDEuNy0xLjkgMi4zLTMgMi4xLTQuMiAzLjQtOC42IDQuOS0xMyAyLTYuNiAzLjgtMTMuMyA1LjItMjAgMi4yLTkuMyAzLjItMTguNyA0LjUtMjguMSAuNi00IC44LTggMS4zLTEyIC45LTEwLjYgMS45LTIxLjMgMi4yLTMxLjkgLjEtMS45IC4yLTMuNyAuMy01LjYgMC00LjMgLjItOC43IC4yLTEzIDAtMi40IDAtNC44IDAtNy4xIDAtNS4xLS4yLTEwLjEtLjItMTUuMi0uMi02LjYtLjctMTMuMi0xLjMtMTkuOC0uNy01LjktMS41LTExLjgtMy4xLTE3LjUtMi03LjctNS42LTE1LTkuOC0yMS44LTMuMi01LjEtNi44LTkuOS0xMS4xLTE0LTMuOS0zLjktOC42LTcuMS0xMy45LTguNC0xLjUtLjQtMy4xLS40LTQuNi0uNiAuMS0zIC43LTUuOSAxLjMtOC44IDEuNi03LjcgMy44LTE1LjMgNi44LTIyLjYgMS41LTQgMy40LTcuOSA1LjQtMTEuNyAzLjQtNi42IDcuNi0xMi44IDEyLjUtMTguNXptMzEuMyAxLjdjLjQtLjEgLjctLjEgMS4xLS4yIC4yIDEuOCAuMSAzLjYgLjEgNS40bDAgMzguMWMwIDEuNyAuMSAzLjUtLjIgNS4yLS40IDAtLjcgMC0xLjEgMC0uOS0zLjgtMS43LTcuNi0yLjYtMTEuMy0uNC0xLjUtLjYtMy4xLTEuMS00LjYtMS43LS4yLTMuNC0uMi01LjItLjItNS4xIDAtMTAuMSAwLTE1LjIgMC0xLjcgMC0zLjMgLjEtNSAwIDAtLjQtLjMtLjkgLjItMS4yIDEuMy0uNyAyLjctLjkgNC4xLTEuNCAzLjQtMS4xIDYuOS0yLjIgMTAuMy0zLjMgMS40LS41IDIuOS0uNyA0LjItMS41IDAtLjYgMC0xLjEgMC0xLjctMS4yLS42LTIuNS0uOS0zLjgtMS4zLTMuMS0xLTYuMy0yLTkuNC0zLTEuOC0uNi0zLjctMS01LjQtMS44IDAtLjQtLjEtLjctLjEtMS4xIDUuMS0uMiAxMC4yIC4xIDE1LjMtLjEgMy40LS4xIDYuNyAuMSAxMC4xLS4xIC4xLS40IC4zLS44IC40LTEuMiAxLjEtNC45IDIuMy05LjggMy40LTE0Ljd6bTYtLjJjLjQgMCAuNyAuMSAxLjEgLjIgMSAzLjggMS43IDcuOCAyLjcgMTEuNiAuNCAxLjQgLjYgMi45IDEgNC4zIDIuNSAuMiA1LjEgMCA3LjYgMCA1LjIgLjEgMTAuMyAuMSAxNS41IC4xIC44IDAgMS41IDAgMi4zIC4xIDAgLjQtLjEgLjctLjEgMS4xLTEuOCAuOC0zLjggMS4yLTUuNyAxLjktMy43IDEuMi03LjUgMi40LTExLjIgMy42LS42IC4yLTEuMSAuNC0xLjcgLjYtLjIgLjYtLjIgMS4xLS4xIDEuNyAuOSAuNSAxLjggLjggMi44IDEuMSA0LjkgMS41IDkuNyAzLjEgMTQuNiA0LjYgLjQgLjEgLjggLjMgMS4xIC41IC40IC4zIC4yIC44IC4yIDEuMi0xLjcgLjEtMy4zIDAtNSAwLTUuMiAwLTEwLjMgMC0xNS41IDAtMS42IDAtMy4yIDAtNC44IC4yLS41IDEuNy0uNyAzLjQtMS4yIDUuMS0uOSAzLjYtMS41IDcuMi0yLjUgMTAuOC0uNCAwLS43IDAtMS4xIC4xLS4zLTEuNy0uMi0zLjUtLjItNS4ybDAtMzguMWMwLTEuOC0uMS0zLjYgLjEtNS40em0tMTg2IDQ1YzEuMS0yLjIgMi4xLTQuNCAzLjQtNi41LTEuOCA3LjYtMi45IDE1LjMtMy42IDIzLS44IDcuNy0uOCAxNS41LS41IDIzLjIgMS4xIDE5LjkgNS41IDM5LjggMTQuMiA1Ny45IDMgNiA2LjQgMTEuOCAxMC41IDE3LjEgNi4xIDcuNSAxMi41IDE0LjggMTkuOCAyMS4xIDQuOCA0LjEgMTAgNy44IDE1LjUgMTAuOCAzLjMgMS43IDYuNSAzLjQgOS45IDQuNyA1IDIgMTAuMiAzLjYgMTUuNCA0LjkgMy44IDEgNy44IDEuNCAxMS41IDIuNyA1IDEuNiA5LjUgNC42IDEzIDguNCA0LjkgNS4yIDguMSAxMS45IDEwLjIgMTguNyAxIDIuOSAxLjYgNS45IDIuMiA4LjkgLjIgLjggLjIgMS41IC4yIDIuMy02LjUgMi44LTEzLjMgNS4xLTIwLjMgNi4yLTQuMSAuOC04LjMgMS0xMi41IDEuMS0xMC4yIC4yLTIwLjUtMS44LTMwLjEtNS4xLTMuNy0xLjQtNy41LTIuOS0xMS00LjctOC4xLTMuOC0xNS42LTguNy0yMi41LTE0LjUtMi45LTIuNi01LjgtNS4xLTguNC04LTkuMi05LjgtMTYuMy0yMS40LTIxLjgtMzMuNy0yLjQtNS41LTQuNi0xMS4yLTYuNC0xNy0xLjItMy45LTIuNC03LjktMy4zLTExLjktLjctMi45LTEuMi01LjktMS45LTguOS0uNS0yLjEtLjctNC4zLTEtNi41LS44LTUuNC0xLjMtMTAuOS0xLjMtMTYuNCAuMS02LjIgLjItMTIuNCAxLjEtMTguNSAuNC0yLjkgLjctNS43IDEuMi04LjYgMS01LjcgMi4xLTExLjQgMy43LTE2LjkgMy4xLTExLjYgNy41LTIzIDEyLjctMzMuOHptMzYzLjctNi40YzEuMSAxLjcgMS45IDMuNSAyLjggNS4zIDIuMSA0LjUgNC4yIDguOSA2IDEzLjUgNy42IDE4LjggMTIuMyAzOC44IDEzIDU5IDAgMS44IC4xIDMuNSAuMSA1LjMgLjEgOS42LTEuMyAxOS4xLTMuMiAyOC41LS43IDMuNi0xLjUgNy4yLTIuNiAxMC43LTQgMTQuNy0xMCAyOS0xOC40IDQxLjgtOC4yIDEyLjYtMTkgMjMuNS0zMS44IDMxLjQtNS43IDMuNi0xMS44IDYuNi0xOCA5LjItNS44IDIuMi0xMS43IDQtMTcuOCA1LjEtNi40IDEtMTIuOSAxLjUtMTkuNCAxLjItNy45LS41LTE1LjgtMi4xLTIzLjItNC44LTEuOS0uOC0zLjktMS41LTUuOC0yLjMtLjItMS41IC4yLTMgLjUtNC41IDEuMi01LjcgMy0xMS40IDUuNy0xNi42IDIuNC00LjUgNS41LTguNyA5LjUtMTEuOSAyLjQtMi4xIDUuMi0zLjYgOC4yLTQuOCAzLjYtMS41IDcuNS0yIDExLjItMi44IDcuMi0xLjcgMTQuNC0zLjkgMjEuMi03IDEwLjMtNC43IDE5LjctMTEuNCAyNy42LTE5LjUgMS42LTEuNiAzLjItMy4yIDQuNy00LjkgMy40LTMuOCA2LjctNy42IDkuOC0xMS41IDcuNS0xMC4xIDEyLjgtMjEuNiAxNi43LTMzLjUgMS42LTUuMyAzLjItMTAuNiA0LjItMTYuMSAuNi0yLjkgMS01LjggMS41LTguNyAuOS02LjEgMS42LTEyLjIgMS43LTE4LjQgLjEtNi42IC4xLTEzLjMtLjUtMTkuOS0uNy04LTEuOS0xNi0zLjctMjMuOHoiXX0sYmhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1c2UiLGljb246WzY0MCw1MTIsW10sImY3ZDYiLCJNNjA0LjUgMjEwYTEwLjQgMTAuNCAwIDEgMSAtMTEuNC0xNy40IDEwLjQgMTAuNCAwIDEgMSAxMS40IDE3LjR6TTYyMSAxODcuMmEzOC41IDM4LjUgMCAxIDEgLTc1IDE3LjYgMzguNSAzOC41IDAgMSAxIDc1LTE3LjZ6TTQzMy43IDMzNi43YzMuMiA0LjYgNS44IDkgNy4zIDEzLjQgMSAzLjEgMi40IDcuMyA1LjUgOC45IC4yIC4xIC4zIC4yIC41IC4yIDUuNyAyLjEgMjAuMyAxLjcgMjAuMyAxLjdsMjYuOCAwYzIuMyAwIDIyLjQgMCAyMS45LTIuMy0yLjQtMTAuOC0xNC45LTEyLjctMjQuNC0xOC4zLTguNy01LjItMTctMTEuMS0yMC44LTIxLjMtMi01LjItLjgtMTcuNCAyLjYtMjEuOCAyLjUtMy4yIDYuMS01LjMgMTAtNi4yIDQuMy0uOSA4LjgtLjEgMTMuMSAuMyA1LjMgLjUgMTAuNiAxLjUgMTUuOSAyLjIgMTAuMyAxLjMgMjAuNiAxLjkgMzEgMS42IDE3LjEtLjUgMzQuMi0zLjIgNTAuNC04LjcgMTEuMy0zLjggMjIuNC04LjkgMzItMTYuMSAxMC45LTguMSA4LjEtNy40LTMtNi4yLTEzLjMgMS40LTI2LjYgMS42LTM5LjkgLjgtMTIuNC0uNy0yNC43LTIuMi0zNS45LTcuOS04LjgtNC42LTE2LjQtOS4xLTIzLjQtMTYuMi0xLTEuMS0xLjctNC4yIC4yLTYuMiAxLjktMS45IDUuOC0uOCA3IC4yIDEyLjIgMTAuMiAzMC41IDE4LjYgNDkuMyAxOS41IDEwLjIgLjUgMjAuMSAuNyAzMC40IC4zIDUuMS0uMiAxMi44LS4yIDE3LjktLjMgMi42IDAgOS44IC43IDExLjItMi4xIC40LS44IC40LTEuOCAuMy0yLjctMS41LTQwLjktNC41LTg2LjktNDcuMy0xMDYuNS0zMS45LTE0LjYtNzkuNy0zNy4yLTk5LjktNDYuNi00LjctMi4yLTEwLjIgMS4zLTEwLjIgNi41IDAgMTMuNiAuNyAzMy4zIC43IDUxLjEtOS43LTkuOS0yNi0xNi4xLTM4LjQtMjEuOC0xNC4xLTYuNS0yOC43LTEyLTQzLjUtMTYuNi0yOS44LTkuMi02MC43LTE0LjktOTEuNy0xOC0zNS4yLTMuNS03MS0xLjgtMTA1LjcgNS4zLTU2LjkgMTIuMi0xMTMuMSAzOS43LTE1NS43IDc5LjgtMjYuMSAyNC42LTQ2LjYgNTkuNy00OCA5NS4yLTIgNTAuMyAxMi4xIDc3LjMgMzggMTA1LjIgNDEuMyA0NC40IDEzMC4yIDUwLjYgMTY2LjItMiAxNi4yLTIzLjcgMTkuNy01NS44IDgtODItMTEuOC0yNi4yLTM4LjgtNDUuMS02Ny40LTQ2LTIyLjItLjctNDUuOSAxMC42LTU0LjUgMzEuMS02LjUgMTUuNy0yLjggMzUuMSA5IDQ3LjMgNC42IDQuOCAxMC45IDguNyAxNy43IDcuMSA0LS45IDcuNC0zLjkgOC04IC45LTYtNC40LTkuOS03LjYtMTQuNS01LjgtOC4zLTQuNy0yMC45IDIuNy0yNy45IDYuMi02IDE1LjMtNy44IDIzLjktNy43IDggMCAxNi4yIDEuNCAyMy4xIDUuNSA5LjcgNS43IDE2LjIgMTYuMiAxOC40IDI3LjIgNi43IDMzLTIwLjIgNTkuOS01Ni42IDYyLTE4LjYgMS4xLTM3LjYtMy44LTUyLjEtMTUuNS0zNi45LTI5LjgtNDUuOS05MC4zLTMuOC0xMjIuNyA0MC0zMC43IDkwLjQtMjIuOCAxMjAuMi02LjggMjMuOCAxMi44IDQxLjUgMzMuNiA1NSA1Ni43IDYuNyAxMS42IDEyLjUgMjMuNyAxNy44IDM2LjEgNS4xIDExLjggOS45IDIzLjggMjAuMiAzMi41IDYuOCA1LjggMTUuMiA1LjYgMjQuMSA1LjZsNTAuOCAwYzYuOSAwIDUuMi00LjYgMi4yLTcuNy02LjctNi45LTE2LjQtOC40LTI1LjQtMTAuOS0yMC41LTUuNi0xOC40LTMyLjgtMTIuNy0zMi44IDE4LjMgMCAxOC45IC42IDM0LjkgLjMgMjMuMi0uMyAzMC4yLTEuNyA0OC4zIDUgOS43IDMuNiAxOSAxMy4xIDI1LjEgMjEuN3oiXX0sdmhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFwcC1zdG9yZS1pb3MiLGljb246WzQ0OCw1MTIsW10sImYzNzAiLCJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyNyAzODQuNWMtNS41IDkuNi0xNy44IDEyLjgtMjcuMyA3LjMtOS42LTUuNS0xMi44LTE3LjgtNy4zLTI3LjNsMTQuMy0yNC43YzE2LjEtNC45IDI5LjMtMS4xIDM5LjYgMTEuNEwxMjcgMzg0LjV6bTEzOC45LTUzLjlMODQgMzMwLjZjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUxIDAgNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNiA2Mi4xIDBjMjAuMiAwIDMxLjUgMjMuNyAyMi43IDQwem05OC4xIDBsLTI5IDAgMTkuNiAzMy45YzUuNSA5LjYgMi4yIDIxLjgtNy4zIDI3LjMtOS42IDUuNS0yMS44IDIuMi0yNy4zLTcuMy0zMi45LTU2LjktNTcuNS05OS43LTc0LTEyOC4xLTE2LjctMjktNC44LTU4IDcuMS02Ny44IDEzLjEgMjIuNyAzMi43IDU2LjcgNTguOSAxMDJsNTIgMGMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6Il19LHloZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bHRyYWx5dGljcy15b2xvIixpY29uOls1MTIsNTEyLFtdLCJlODZmIiwiTTM4My41IDEwLjhjNjEuOC0uMiAxMTIuMyA1MC42IDExMi4zIDExMi45LS4yIDIuNyAwIDAtLjEgMy4zbC4zIC4zYy0xLjUgODkuOS01MyAxNjguNC0xMjcuNCAyMDguNWwwIDUyLjhjMCA2Mi42LTUxLjEgMTEzLjUtMTEzLjcgMTEyLjktNjItLjYtMTExLjQtNTIuMi0xMTEuNC0xMTQuM2wwLTUxLjJjLTQwLjctMjEuOS03NC41LTU1LjItOTctOTUuNiAyMy4yIDE2LjUgNTEuNyAyNiA4MiAyNS45IDc4LjYtLjIgMTQyLjItNjQgMTQyLjMtMTQyLjUgLjEtNjIuMyA1MC41LTExMi43IDExMi45LTExMi45em0tMjU1IDIyNS44YTExMi45IDExMi45IDAgMSAxIDAtMjI1LjggMTEyLjkgMTEyLjkgMCAxIDEgMCAyMjUuOHoiXX0sekU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWRyaWJiYmxlIixpY29uOls0NDgsNTEyLFsiZHJpYmJibGUtc3F1YXJlIl0sImYzOTciLCJNMTY1LjkgMTMyLjVjLTM4LjMgMTgtNjYuOCA1My4zLTc1LjcgOTUuNyA2LjEgLjEgNjIuNCAuMyAxMjYuNC0xNi43LTIyLjctNDAuMi00Ny4xLTc0LjEtNTAuNy03OXptMjYuMS05LjFjMy44IDUuMSAyOC42IDM4LjkgNTEgODAgNDguNi0xOC4zIDY5LjEtNDUuOSA3MS42LTQ5LjQtMzMuNi0yOS44LTc5LjMtNDEuMS0xMjIuNi0zMC42ek0yNzcuNCAzODJjLTItMTItMTAtNTMuOC0yOS4yLTEwMy42LTU1LjEgMTguOC05My44IDU2LjQtMTA4LjEgODUuNiA0MC41IDMxLjYgOTMuMyAzNi43IDEzNy4zIDE4ek0yMjcuOCAyMzIuNkMxNTkuNiAyNTMgOTMuNCAyNTIuMiA4Ny40IDI1MmwwIDQuMmMwIDM1LjEgMTMuMyA2Ny4xIDM1LjEgOTEuNCAyMi4yLTM3LjkgNjcuMS03Ny45IDExNi41LTkxLjgtMy40LTcuOC03LjItMTUuNS0xMS4xLTIzLjJsLS4xIDB6bTcyLjUgMTM2LjljMzAuNy0yMC43IDUyLjUtNTMuNiA1OC42LTkxLjYtNC42LTEuNS00Mi4zLTEyLjctODUuMS01LjggMTcuOSA0OS4xIDI1LjEgODkuMSAyNi41IDk3LjR6bS0zNC44LTExOWM0NS41LTUuNyA5MC43IDMuNCA5NS4yIDQuNC0uMy0zMi4zLTExLjgtNjEuOS0zMC45LTg1LjEtMi45IDMuOS0yNS44IDMzLjItNzYuMyA1My45IDQuOCA5LjggOC4zIDE3LjggMTIgMjYuOHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCA5NmExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il19LHhoZT16RSx3aGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidWlraXQiLGljb246WzQ0OCw1MTIsW10sImY0MDMiLCJNNDQzLjkgMTI4bDAgMjU2LTIyNS45IDEyOC0yMTgtMTI4IDAtMjE0LjMgODcuNiA0NS4xIDAgMTE3IDEzMy41IDc1LjUgMTM1LjgtNzUuNSAwLTE1MS0xMDEuMS01Ny42IDg3LjYtNTMuMSAxMDAuNSA1Ny45ek0zMDguNiA0OS4xbC04NC44LTQ5LjEtODguNiA1NC44IDg2IDQ3LjMgODcuNC01M3oiXX0sTWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN1cGVycG93ZXJzIixpY29uOls0NDgsNTEyLFtdLCJmMmRkIiwiTTQ0OCAzMmMtODMuMyAxMS0xNjYuOCAyMi0yNTAgMzMtOTIgMTIuNS0xNjMuMyA4Ni43LTE2OSAxODAtMy4zIDU1LjUgMTggMTA5LjUgNTcuOCAxNDguMkwwIDQ4MGM4My4zLTExIDE2Ni41LTIyIDI0OS44LTMzIDkxLjgtMTIuNSAxNjMuMy04Ni44IDE2OC43LTE3OS44IDMuNS01NS41LTE4LTEwOS41LTU3LjctMTQ4LjJMNDQ4IDMyek0zNjguMyAyNjQuM2MtNC4yIDc5LjUtNzQgMTM5LjItMTUyLjggMTM0LjUtNzkuNS00LjctMTQwLjctNzEtMTM2LjMtMTUxIDQuNS03OS4yIDc0LjMtMTM5LjMgMTUzLTEzNC41IDc5LjMgNC43IDE0MC41IDcxIDEzNi4xIDE1MXoiXX0semhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InlvdXR1YmUiLGljb246WzU3Niw1MTIsWzYxODAyXSwiZjE2NyIsIk01NDkuNyAxMjQuMUM1NDMuNSAxMDAuNCA1MjQuOSA4MS44IDUwMS40IDc1LjUgNDU4LjkgNjQgMjg4LjEgNjQgMjg4LjEgNjRTMTE3LjMgNjQgNzQuNyA3NS41QzUxLjIgODEuOCAzMi43IDEwMC40IDI2LjQgMTI0LjEgMTUgMTY3IDE1IDI1Ni40IDE1IDI1Ni40czAgODkuNCAxMS40IDEzMi4zYzYuMyAyMy42IDI0LjggNDEuNSA0OC4zIDQ3LjggNDIuNiAxMS41IDIxMy40IDExLjUgMjEzLjQgMTEuNXMxNzAuOCAwIDIxMy40LTExLjVjMjMuNS02LjMgNDItMjQuMiA0OC4zLTQ3LjggMTEuNC00Mi45IDExLjQtMTMyLjMgMTEuNC0xMzIuM3MwLTg5LjQtMTEuNC0xMzIuM3pNMjMyLjIgMzM3LjZsMC0xNjIuNCAxNDIuNyA4MS4yLTE0Mi43IDgxLjJ6Il19LGtoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbWJlciIsaWNvbjpbNjQwLDUxMixbXSwiZjQyMyIsIk02MzkuOSAyNTQuNmMtMS4xLTEwLjctMTAuNy02LjgtMTAuNy02LjhzLTE1LjYgMTIuMS0yOS4zIDEwLjdjLTEzLjctMS4zLTkuNC0zMi05LjQtMzJzMy0yOC4xLTUuMS0zMC40Yy04LjEtMi40LTE4IDcuMy0xOCA3LjNzLTEyLjQgMTMuNy0xOC4zIDMxLjJsLTEuNiAuNXMxLjktMzAuNi0uMy0zNy42Yy0xLjYtMy41LTE2LjQtMy4yLTE4LjggM3MtMTQuMiA0OS4yLTE1IDY3LjJjMCAwLTIzLjEgMTkuNi00My4zIDIyLjhzLTI1LTkuNC0yNS05LjQgNTQuOC0xNS4zIDUyLjktNTkuMS00NC4yLTI3LjYtNDktMjRjLTQuNiAzLjUtMjkuNCAxOC40LTM2LjYgNTkuNy0uMiAxLjQtLjcgNy41LS43IDcuNXMtMjEuMiAxNC4yLTMzIDE4YzAgMCAzMy01NS42LTcuMy04MC45LTExLjQtNi44LTIxLjMtLjUtMjcuMiA1LjMgMTMuNi0xNy4zIDQ2LjQtNjQuMiAzNi45LTEwNS4yLTUuOC0yNC40LTE4LTI3LjEtMjkuMi0yMy4xLTE3IDYuNy0yMy41IDE2LjctMjMuNSAxNi43cy0yMiAzMi0yNy4xIDc5LjUtMTIuNiAxMDUuMS0xMi42IDEwNS4xLTEwLjUgMTAuMi0yMC4yIDEwLjctNS40LTI4LjctNS40LTI4LjcgNy41LTQ0LjYgNy01Mi4xLTEuMS0xMS42LTkuOS0xNC4yYy04LjktMi43LTE4LjUgOC42LTE4LjUgOC42cy0yNS41IDM4LjctMjcuNyA0NC42bC0xLjMgMi40LTEuMy0xLjZzMTgtNTIuNyAuOC01My41LTI4LjUgMTguOC0yOC41IDE4LjgtMTkuNiAzMi44LTIwLjQgMzYuNWwtMS4zLTEuNnM4LjEtMzguMiA2LjQtNDcuNmMtMS42LTkuNC0xMC41LTcuNS0xMC41LTcuNXMtMTEuMy0xLjMtMTQuMiA1LjktMTMuNyA1NS4zLTE1IDcwLjdjMCAwLTI4LjIgMjAuMi00Ni44IDIwLjQtMTguNSAuMy0xNi43LTExLjgtMTYuNy0xMS44czY4LTIzLjMgNDkuNC02OS4yYy04LjMtMTEuOC0xOC0xNS41LTMxLjctMTUuMy0xMy43IC4zLTMwLjMgOC42LTQxLjMgMzMuMy01LjMgMTEuOC02LjggMjMtNy44IDMxLjUgMCAwLTEyLjMgMi40LTE4LjgtMi45cy0xMCAwLTEwIDAtMTEuMiAxNC0uMSAxOC4zIDI4LjEgNi4xIDI4LjEgNi4xYzEuNiA3LjUgNi4yIDE5LjUgMTkuNiAyOS43IDIwLjIgMTUuMyA1OC44LTEuMyA1OC44LTEuM2wxNS45LTguOHMuNSAxNC42IDEyLjEgMTYuNyAxNi40IDEgMzYuNS00Ny45YzExLjgtMjUgMTIuNi0yMy42IDEyLjYtMjMuNmwxLjMtLjNzLTkuMSA0Ni44LTUuNiA1OS43QzE4Ny43IDMxOS40IDIwMyAzMTggMjAzIDMxOHM4LjMgMi40IDE1LTIxLjIgMTkuNi00OS45IDE5LjYtNDkuOWwxLjYgMHMtNS42IDQ4LjEgMyA2My43IDMwLjkgNS4zIDMwLjkgNS4zIDE1LjYtNy44IDE4LTEwLjJjMCAwIDE4LjUgMTUuOCA0NC42IDEyLjkgNTguMy0xMS41IDc5LjEtMjUuOSA3OS4xLTI1LjlzMTAgMjQuNCA0MS4xIDI2LjdjMzUuNSAyLjcgNTQuOC0xOC42IDU0LjgtMTguNnMtLjMgMTMuNSAxMi4xIDE4LjYgMjAuNy0yMi44IDIwLjctMjIuOGwyMC43LTU3LjIgMS45IDBzMS4xIDM3LjMgMjEuNSA0My4yIDQ3LTEzLjcgNDctMTMuNyA2LjQtMy41IDUuMy0xNC4zem0tNTc4IDUuM2MuOC0zMiAyMS44LTQ1LjkgMjktMzkgNy4zIDcgNC42IDIyLTkuMSAzMS40LTEzLjcgOS41LTE5LjkgNy42LTE5LjkgNy42ek0zMzQuNyAxMzYuMXMxOS4xLTQ5LjcgMjMuNi0yNS41LTQwIDk2LjItNDAgOTYuMmMuNS0xNi4yIDE2LjQtNzAuNyAxNi40LTcwLjd6bTIyLjggMTM4LjRjLTEyLjYgMzMtNDMuMyAxOS42LTQzLjMgMTkuNnMtMy41LTExLjggNi40LTQ0LjkgMzMuMy0yMC4yIDMzLjMtMjAuMiAxNi4yIDEyLjQgMy42IDQ1LjV6bTg0LjYtMTQuNnMtMy0xMC41IDguMS0zMC42YzExLTIwLjIgMTkuNi05LjEgMTkuNi05LjFzOS40IDEwLjItMS4zIDI1LjUtMjYuNCAxNC4yLTI2LjQgMTQuMnoiXX0sU2hlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJvb3RzdHJhcCIsaWNvbjpbNTc2LDUxMixbXSwiZjgzNiIsIk0zMzMuNSAyMDEuNGMwLTIyLjEtMTUuNi0zNC4zLTQzLTM0LjNsLTUwLjQgMCAwIDcxLjIgNDIuNSAwYzMyLjgtLjEgNTAuOS0xMy4zIDUwLjktMzYuOXpNNTE3IDE4OC42Yy05LjUtMzAuOS0xMC45LTY4LjgtOS44LTk4LjEgMS4xLTMwLjUtMjIuNy01OC41LTU0LjctNTguNUwxMjMuNyAzMmMtMzIuMSAwLTU1LjggMjguMS01NC43IDU4LjUgMSAyOS4zLS4zIDY3LjItOS44IDk4LjEtOS42IDMxLTI1LjcgNTAuNi01Mi4yIDUzLjFsMCAyOC41YzI2LjQgMi41IDQyLjYgMjIuMSA1Mi4yIDUzLjEgOS41IDMwLjkgMTAuOSA2OC44IDkuOCA5OC4xLTEuMSAzMC41IDIyLjcgNTguNSA1NC43IDU4LjVsMzI4LjcgMGMzMi4xIDAgNTUuOC0yOC4xIDU0LjctNTguNS0xLTI5LjMgLjMtNjcuMiA5LjgtOTguMSA5LjYtMzEgMjUuNy01MC42IDUyLjEtNTMuMWwwLTI4LjVjLTI2LjMtMi41LTQyLjUtMjIuMS01Mi01My4xek0zMDAuMiAzNzUuMWwtOTcuOSAwIDAtMjM4LjMgOTcuNCAwYzQzLjMgMCA3MS43IDIzLjQgNzEuNyA1OS40IDAgMjUuMy0xOS4xIDQ3LjktNDMuNSA1MS44bDAgMS4zYzMzLjIgMy42IDU1LjUgMjYuNiA1NS41IDU4LjMgMCA0Mi4xLTMxLjMgNjcuNS04My4yIDY3LjV6bS0xMC0xMDguN2wtNTAuMSAwIDAgNzguNCA1Mi4zIDBjMzQuMiAwIDUyLjMtMTMuNyA1Mi4zLTM5LjUgMC0yNS43LTE4LjYtMzguOS01NC41LTM4Ljl6Il19LENoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpdHVuZXMiLGljb246WzQ0OCw1MTIsW10sImYzYjQiLCJNMjIzLjYgODAuM2ExNzEuMyAxNzEuMyAwIDEgMCAuMiAzNDIuNSAxNzEuMyAxNzEuMyAwIDEgMCAtLjItMzQyLjV6bTc5LjQgMjQwYy0zLjIgMTMuNi0xMy41IDIxLjItMjcuMyAyMy44LTEyLjEgMi4yLTIyLjIgMi44LTMxLjktNS0xMS44LTEwLTEyLTI2LjQtMS40LTM2LjggOC40LTggMjAuMy05LjYgMzgtMTIuOCAzLS41IDUuNi0xLjIgNy43LTMuNyAzLjItMy42IDIuMi0yIDIuMi04MC44IDAtNS42LTIuNy03LjEtOC40LTYuMS00IC43LTkxLjkgMTcuMS05MS45IDE3LjEtNSAxLjEtNi43IDIuNi02LjcgOC4zIDAgMTE2LjEgLjUgMTEwLjgtMS4yIDExOC41LTIuMSA5LTcuNiAxNS44LTE0LjkgMTkuNi04LjMgNC42LTIzLjQgNi42LTMxLjQgNS4yLTIxLjQtNC0yOC45LTI4LjctMTQuNC00Mi45IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgNS01LjcgLjktMTI3IDIuNi0xMzMuNyAuNC0yLjYgMS41LTQuOCAzLjUtNi40IDIuMS0xLjcgNS44LTIuNyA2LjctMi43IDEwMS0xOSAxMTMuMy0yMS40IDExNS4xLTIxLjQgNS43LS40IDkgMyA5IDguNy0uMSAxNzAuNiAuNCAxNjEuNC0xIDE2Ny42ek0zNDUuMiAzMkwxMDIuOCAzMkM0NS45IDMyIDAgNzcuOSAwIDEzNC44TDAgMzc3LjJDMCA0MzQuMSA0NS45IDQ4MCAxMDIuOCA0ODBsMjQyLjQgMGM1NyAwIDEwMi44LTQ1LjkgMTAyLjgtMTAyLjhsMC0yNDIuNEM0NDggNzcuOSA0MDIuMSAzMiAzNDUuMiAzMnpNMjIzLjYgNTlhMTkyLjUgMTkyLjUgMCAxIDEgMCAzODUgMTkyLjUgMTkyLjUgMCAxIDEgMC0zODV6Il19LGtFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS14aW5nIixpY29uOls0NDgsNTEyLFsieGluZy1zcXVhcmUiXSwiZjE2OSIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNOTMuOCAzMjAuMmMtNS41IDAtOC43LTUuMy02LTEwLjNsNDkuMy04Ni43Yy4xIDAgLjEtLjEgMC0uMmwtMzEuNC01NGMtMy01LjYgLjItMTAuMSA2LTEwLjFsNDYuNiAwYzUuMiAwIDkuNSAyLjkgMTIuOSA4LjdsMzEuOSA1NS4zYy0xLjMgMi4zLTE4IDMxLjctNTAuMSA4OC4yLTMuNSA2LjItNy43IDkuMS0xMi42IDkuMWwtNDYuNiAwem0xNjMuNS0zMy40bDAgLjIgNjUuNSAxMTljMi44IDUuMSAuMSAxMC4xLTYgMTAuMWwtNDYuNiAwYy01LjUgMC05LjctMi45LTEyLjktOC43bC02Ni0xMjAuM2MxLjgtMy4yIDIyLjktNDAuNCA2My4zLTExMS42IDExLjctMjAuNyAyNS4xLTQ0LjMgNDAuMS03MC44IDMuMy01LjggNy40LTguNyAxMi41LTguN2w0Ni45IDBjNS43LS4xIDguOCA0LjcgNiAxMEwyNTcuMyAyODYuOHoiXX0sX2hlPWtFLFRoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjc3MzLWFsdCIsaWNvbjpbMzg0LDUxMixbXSwiZjM4YiIsIk0wIDMyTDM0LjkgNDI3LjggMTkyIDQ4MCAzNDkuMSA0MjcuOCAzODQgMzIgMCAzMnptMzEzLjEgODBsLTQuOCA0Ny4zLTExNS4zIDQ5LjMtLjMgLjEgMTExLjUgMC0xMi44IDE0Ni42LTk4LjIgMjguNy05OC44LTI5LjItNi40LTczLjkgNDguOSAwIDMuMiAzOC4zIDUyLjYgMTMuMyA1NC43LTE1LjQgMy43LTYxLjYtMTY2LjMtLjUgMC0uMS0uMiAuMS0zLjYtNDYuMyAxMTIuMS00Ni43IDYuNS0yLjctMTIyLjkgMC01LjgtNDcuMyAyNDIuMiAweiJdfSxMaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlc3BhY2UiLGljb246WzUxMiw1MTIsW10sImY1YmUiLCJNMTg2LjEgMzQzLjNjLTkuNyA5LjctOS43IDI1LjMgMCAzNC45czI1LjMgOS42IDM0LjkgMEwzNzguMyAyMjEuMWMxOS4zLTE5LjMgNTAuNi0xOS4zIDY5LjkgMHMxOS4zIDUwLjYgMCA2OS45TDI5NCA0NDUuMWMxOS4zIDE5LjMgNTAuNSAxOS4zIDY5LjggMGwwIDAgMTE5LjMtMTE5LjJjMzguNi0zOC42IDM4LjYtMTAxLjEgMC0xMzkuNy0zOC42LTM4LjYtMTAxLjItMzguNi0xMzkuNyAwTDE4Ni4xIDM0My4zek00MzAuNyAyMzguNWMtOS43LTkuNy0yNS4zLTkuNy0zNC45IDBMMjM4LjUgMzk1LjdjLTE5LjMgMTkuMy01MC41IDE5LjMtNjkuOCAwbDAgMGMtOS42LTkuNi0yNS4zLTkuNy0zNC45IDBsMCAwYy05LjcgOS42LTkuNyAyNS4zIDAgMzQuOWwwIDBjMzguNiAzOC42IDEwMS4xIDM4LjYgMTM5LjcgMEw0MzAuNyAyNzMuNWM5LjYtOS43IDkuNi0yNS4zIDAtMzQuOXptLTI2MiA4Ny4zTDMyNS45IDE2OC43YzkuNi05LjYgOS42LTI1LjMgMC0zNC45LTkuNi05LjYtMjUuMy05LjYtMzQuOSAwTDEzMy43IDI5MC45Yy0xOS4zIDE5LjMtNTAuNiAxOS4zLTY5LjkgMGwwIDBjLTE5LjMtMTkuMy0xOS4zLTUwLjUgMC02OS44bDAgMCAxNTQuMi0xNTQuMmMtMTkuMy0xOS4zLTUwLjUtMTkuMy02OS44IDBsMCAwLTExOS4yIDExOS4zYy0zOC42IDM4LjYtMzguNiAxMDEuMSAwIDEzOS43IDM4LjYgMzguNiAxMDEuMSAzOC42IDEzOS43IDB6TTgxLjMgMjczLjVjOS42IDkuNiAyNS4zIDkuNiAzNC45IDBMMjczLjUgMTE2LjNjMTkuMy0xOS4zIDUwLjYtMTkuMyA2OS44IDBsMCAwYzkuNyA5LjYgMjUuMyA5LjYgMzQuOSAwczkuNi0yNS4zIDAtMzQuOWMtMzguNi0zOC42LTEwMS4xLTM4LjYtMTM5LjcgMEw4MS4zIDIzOC41Yy05LjYgOS42LTkuNiAyNS4zIDAgMzQuOWwwIDB6Il19LCRoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0cmVsbG8iLGljb246WzQ0OCw1MTIsW10sImYxODEiLCJNMzkyLjMgMzJMNTYuMSAzMmMtMzEgMC01Ni4xIDI1LjEtNTYuMSA1Ni0uMSAwIDAtNCAwIDMzNiAwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMzYuMiAwYzMwLjgtLjIgNTUuNy0yNS4yIDU1LjctNTZsMC0zMzZjLjEtMzAuOC0yNC44LTU1LjgtNTUuNi01NnpNMTk3IDM3MS4zYy0uMiAxNC43LTEyLjEgMjYuNi0yNi45IDI2LjZsLTgyLjcgMGMtMTQuOCAuMS0yNi45LTExLjgtMjctMjYuNmwwLTI1NC4yYzAtMTQuOCAxMi0yNi45IDI2LjktMjYuOWw4Mi45IDBjMTQuOCAwIDI2LjkgMTIgMjYuOSAyNi45bDAgMjU0LjItLjEgMHptMTkzLjEtMTEyYzAgMTQuOC0xMiAyNi45LTI2LjkgMjYuOWwtODEgMGMtMTQuOCAwLTI2LjktMTItMjYuOS0yNi45bDAtMTQyLjFjMC0xNC44IDEyLTI2LjkgMjYuOC0yNi45bDgxLjEgMGMxNC44IDAgMjYuOSAxMiAyNi45IDI2LjlsMCAxNDIuMXoiXX0sQWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZpYWRlbyIsaWNvbjpbNDQ4LDUxMixbXSwiZjJhOSIsIk0yNzYuNCAxNTAuNWwwIC43Yy0xNy45LTUyLjYtNDIuNi0xMDMuNC03MC44LTE1MS4yIDQzLjMgMjkuMiA2NyAxMDAgNzAuOCAxNTAuNXptMzIuNyAxMjEuN2M3LjYgMTguMiAxMSAzNy41IDExIDU3IDAgNzcuNy01Ny44IDE0MS0xMzcuOCAxMzkuNGwzLjgtLjNjNzQuMi00Ni43IDEwOS4zLTExOC42IDEwOS4zLTIwNS4xIDAtMzguMS02LjUtNzUuOS0xOC45LTExMiAxIDExLjcgMSAyMy43IDEgMzUuNCAwIDkxLjgtMTguMSAyNDEuNi0xMTYuNiAyODAtNjUuNy0xMS40LTExMS4zLTY4LjYtMTExLjMtMTM3LjQgMC03NS42IDU3LjQtMTQyLjMgMTM1LjQtMTQyLjMgMTYuOCAwIDMzLjcgMy4xIDQ5LjEgOS42IDEuNy0xNS4xIDYuNS0yOS45IDEzLjQtNDMuMy0xOS45LTcuMi00MS4yLTEwLjctNjIuNS0xMC43LTE2MS41IDAtMjM4LjcgMTk1LjktMTI5LjkgMzEzLjcgNjcuOSA3NC42IDE5MiA3My45IDI1OS44IDAgNTYuNi02MS4zIDYwLjktMTQyLjQgMzYuNC0yMDEtMTIuNyA4LTI3LjEgMTMuOS00Mi4yIDE3ek00MTguMyAxMS43Yy0zMSA2Ni41LTgxLjMgNDcuMi0xMTUuOCA4MC4xLTEyLjQgMTItMjAuNiAzNC0yMC42IDUwLjUgMCAxNC4xIDQuNSAyNy4xIDEyIDM4LjggNDcuNC0xMSA5OC4zLTQ2IDExOC4yLTkwLjctLjcgNS41LTQuOCAxNC40LTcuMiAxOS4yLTIwLjMgMzUuNy02NC42IDY1LjYtOTkuNyA4NC45IDE0LjggMTQuNCAzMy43IDI1LjggNTUgMjUuOCA3OSAwIDExMC4xLTEzNC42IDU4LjEtMjA4LjZ6Il19LERoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzZWFyY2hlbmdpbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlYiIsIk0yMTQuNiAxMzAuM2wtNjcuMiAyOC4yIDAtMTE1LjMtNTQuNyAxOTAuMyA1NC43LTI0LjIgMCAxMzAuMyA2Ny4yLTIwOS4zek0xMzEuNCAzMy42bC0xLjMgNC43LTE1LjIgNTIuOUM3NC42IDEwNi43IDQ2IDE0NS44IDQ2IDE5MS41IDQ2IDI0My44IDgwLjMgMjg3LjQgMTI5LjQgMjk3bDAgNTMuNkM1MS41IDM0MC4xLTYgMjcyLjQtNiAxOTEuNi02IDExMS4xIDUzLjggNDQuNCAxMzEuNCAzMy42ek00NDIuOCA0ODAuOGMtMTEuMiAxMS4yLTIzLjEgMTIuMy0yOC42IDEwLjUtNS40LTEuOC0yNy4xLTE5LjktNjAuNC00NC40LTMzLjMtMjQuNi0zMy42LTM1LjctNDMtNTYuNy05LjQtMjAuOS0zMC40LTQyLjYtNTcuNS01Mi40bC05LjctMTQuN2MtMjQuNyAxNi45LTUzIDI2LjktODEuMyAyOC43bDIuMS02LjYgMTUuOS00OS41YzQ2LjUtMTEuOSA4MC45LTU0IDgwLjktMTA0LjIgMC01NC41LTM4LjQtMTAyLjEtOTYtMTA3LjFsMC01Mi4xYzgzLjIgNS4xIDE0OC44IDc0LjUgMTQ4LjggMTU5LjMgMCAzMy42LTExLjIgNjQuNy0yOSA5MC40bDE0LjYgOS42YzkuOCAyNy4xIDMxLjUgNDggNTIuNCA1Ny40czMyLjIgOS43IDU2LjggNDNjMjQuNiAzMy4yIDQyLjcgNTQuOSA0NC41IDYwLjNzLjcgMTcuMy0xMC41IDI4LjV6bS05LjktMTcuOWMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOCAzLjYgOCA4IDggOC0zLjYgOC04eiJdfSxFaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5yZWFsLWVuZ2luZSIsaWNvbjpbNTEyLDUxMixbXSwiZTg1YyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNjUuNS0xMTMuN2wtMjUuMS0yOC4zLTQyLjQgNDIuNmMtMjQuMS0uMy00Ny45LTYuMi02OS4zLTE3LjJzLTQwLjEtMjYuOS01NC41LTQ2LjNjNC41IDEuNCA5LjIgMi4zIDEzLjkgMi42IDYuOSAuMSAxNC41LTIuNCAxNC41LTE0LjFsMC0xMTUuMWMuMS0zLS41LTUuOS0xLjctOC42cy0zLjEtNS01LjQtNi45LTUtMy4xLTcuOS0zLjctNS45LS41LTguOCAuMmMtMTkuNiA0LjUtMzUuMyA1My41LTM1LjMgNTMuNS0uMi0yMi42IDQuNS00NSAxMy44LTY1LjZzMjMtMzkgNDAuMS01My44YzIyLjUtMTkuNSA1MC4xLTMyLjIgNzkuNi0zNi43LTIxLjQgMTIuMi0zMy41IDMyLjEtMzMuNSA0OC45IDAgMjYuOSAxNi4yIDIzLjYgMjEgMTkuN2wwIDE1NS4zYy44IDEuOSAxLjkgMy44IDMuMiA1LjUgMi4xIDMgNSA1LjQgOC4yIDdzNi45IDIuNSAxMC41IDIuNWMxNi4yIDAgMzcuMy0xOC41IDM3LjMtMTguNWwwLTEyNS43YzAtMTIuOC05LjYtMjguMi0xOS4zLTMzLjUgMCAwIDE3LjktMy4yIDMxLjcgNy40IDIuNi0zLjIgNS4zLTYuMiA4LjItOS4xIDMyLjItMzEuNiA2Mi41LTQwLjYgODcuNy00NS4xIDAgMC00NS45IDM2LjEtNDUuOSA4NC41IDAgMzYgLjkgMTIzLjggLjkgMTIzLjggMTcgMTYuNCA0Mi40LTcuMyA2NS4yLTMwLjgtNC40IDIxLjMtMjQgNzUuOS04Ni42IDEwNS40eiJdfSxQaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGF5cGFsIixpY29uOlszODQsNTEyLFtdLCJmMWVkIiwiTTExMS45IDI5NS45Yy0zLjUgMTkuMi0xNy40IDEwOC43LTIxLjUgMTM0LS4zIDEuOC0xIDIuNS0zIDIuNWwtNzQuNiAwYy03LjYgMC0xMy4xLTYuNi0xMi4xLTEzLjlMNTkuMyA0Ni42YzEuNS05LjYgMTAuMS0xNi45IDIwLTE2LjkgMTUyLjMgMCAxNjUuMS0zLjcgMjA0IDExLjQgNjAuMSAyMy4zIDY1LjYgNzkuNSA0NCAxNDAuMy0yMS41IDYyLjYtNzIuNSA4OS41LTE0MC4xIDkwLjMtNDMuNCAuNy02OS41LTctNzUuMyAyNC4yek0zNTcuNiAxNTJjLTEuOC0xLjMtMi41LTEuOC0zIDEuMy0yIDExLjQtNS4xIDIyLjUtOC44IDMzLjYtMzkuOSAxMTMuOC0xNTAuNSAxMDMuOS0yMDQuNSAxMDMuOS02LjEgMC0xMC4xIDMuMy0xMC45IDkuNC0yMi42IDE0MC40LTI3LjEgMTY5LjctMjcuMSAxNjkuNy0xIDcuMSAzLjUgMTIuOSAxMC42IDEyLjlsNjMuNSAwYzguNiAwIDE1LjctNi4zIDE3LjQtMTQuOSAuNy01LjQtMS4xIDYuMSAxNC40LTkxLjMgNC42LTIyIDE0LjMtMTkuNyAyOS4zLTE5LjcgNzEgMCAxMjYuNC0yOC44IDE0Mi45LTExMi4zIDYuNS0zNC44IDQuNi03MS40LTIzLjgtOTIuNnoiXX0sSWhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1ibHVlc2t5IixpY29uOls0NDgsNTEyLFtdLCJlNmEzIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyNDcuNGMxNC41LTMwIDU0LTg1LjggOTAuNy0xMTMuMyAyNi41LTE5LjkgNjkuMy0zNS4yIDY5LjMgMTMuNyAwIDkuOC01LjYgODIuMS04LjkgOTMuOC0xMS40IDQwLjgtNTMgNTEuMi05MCA0NC45IDY0LjcgMTEgODEuMiA0Ny41IDQ1LjYgODQtNjcuNSA2OS4zLTk3LTE3LjQtMTA0LjYtMzkuNmwtLjMtLjljLS45LTIuNi0xLjQtNC4xLTEuOC00LjFzLS45IDEuNS0xLjggNC4xYy0uMSAuMy0uMiAuNi0uMyAuOS03LjYgMjIuMi0zNy4xIDEwOC44LTEwNC42IDM5LjYtMzUuNS0zNi41LTE5LjEtNzMgNDUuNi04NC0zNyA2LjMtNzguNi00LjEtOTAtNDQuOS0zLjMtMTEuNy04LjktODQtOC45LTkzLjggMC00OC45IDQyLjktMzMuNSA2OS4zLTEzLjcgMzYuNyAyNy41IDc2LjIgODMuNCA5MC43IDExMy4zeiJdfSxOaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZC1hbmQtZC1iZXlvbmQiLGljb246WzY0MCw1MTIsW10sImY2Y2EiLCJNMzEzLjggMjQxLjVjMTMuOCAwIDIxLTEwLjEgMjQuOC0xNy45LTEtMS4xLTUtNC4yLTcuNC02LjYtMi40IDQuMy04LjIgMTAuNy0xMy45IDEwLjctMTAuMiAwLTE1LjQtMTQuNy0zLjItMjYuNi0uNS0uMi00LjMtMS44LTggMi40IDAtMyAxLTUuMSAyLjEtNi42LTMuNSAxLjMtOS44IDUuNi0xMS40IDcuOSAuMi01LjggMS42LTcuNSAuNi05bC0uMi0uMnMtOC41IDUuNi05LjMgMTQuN2MwIDAgMS4xLTEuNiAyLjEtMS45IC42LS4zIDEuMyAwIC42IDEuOS0uMiAuNi01LjggMTUuNyA1LjEgMjYtLjYtMS42LTEuOS03LjYgMi40LTEuOS0uMyAuMSA1LjggNy4xIDE1LjcgNy4xem01Mi40LTIxLjFjMC00LTQuOS00LjQtNS42LTQuNSAyIDMuOSAuOSA3LjUgLjIgOSAyLjUtLjQgNS40LTEuNiA1LjQtNC41em0xMC4zIDUuMmMwLTYuNC02LjItMTEuNC0xMy41LTEwLjcgOCAxLjMgNS42IDEzLjgtNSAxMS40IDMuNy0yLjYgMy4yLTkuOS0xLjMtMTIuNSAxLjQgNC4yLTMgOC4yLTcuNCA0LjYtMi40LTEuOS04LTYuNi0xMC42LTguNi0yLjQtMi4xLTUuNS0xLTYuNi0xLjgtMS4zLTEuMS0uNS0zLjgtMi4yLTUtMS42LS44LTMtLjMtNC44LTEtMS42LS42LTIuNy0xLjktMi42LTMuNS0yLjUgNC40IDMuNCA2LjMgNC41IDguNSAxIDEuOS0uOCA0LjggNCA4LjUgMTQuOCAxMS42IDkuMSA4IDEwLjQgMTguMSAuNiA0LjMgNC4yIDYuNyA2LjQgNy40LTIuMS0xLjktMi45LTYuNCAwLTkuMyAwIDEzLjkgMTkuMiAxMy4zIDIzLjEgNi40LTIuNCAxLjEtNy0uMi05LTEuOSA3LjcgMSAxNC4yLTQuMSAxNC42LTEwLjZ6bS0zOS40LTE4LjRjMiAuOCAxLjYgLjcgNi40IDQuNSAxMC4yLTI0LjUgMjEuNy0xNS43IDIyLTE1LjUgMi4yLTEuOSA5LjgtMy44IDEzLjgtMi43LTIuNC0yLjctNy41LTYuMi0xMy4zLTYuMi00LjcgMC03LjQgMi4yLTggMS4zLS44LTEuNCAzLjItMy40IDMuMi0zLjQtNS40IC4yLTkuNiA2LjctMTEuMiA1LjktMS4xLS41IDEuNC0zLjcgMS40LTMuNy01LjEgMi45LTkuMyA5LjEtMTAuMiAxMyA0LjYtNS44IDEzLjgtOS44IDE5LjctOS0xMC41IC41LTE5LjUgOS43LTIzLjggMTUuOHptMjQyLjUgNTEuOWMtMjAuNyAwLTQwIDEuMy01MC4zIDIuMWw3LjQgOC4yIDAgNzcuMi03LjQgOC4yYzEwLjQgLjggMzAuOSAyLjEgNTEuNiAyLjEgNDIuMSAwIDU5LjEtMjAuNyA1OS4xLTQ4LjkgMC0yOS4zLTIzLjItNDguOS02MC40LTQ4Ljl6bS0xNS4xIDc1LjZsMC01My4zYzMwLjEtMy4zIDQ2LjggMy44IDQ2LjggMjYuMyAwIDI1LjYtMjEuNCAzMC4yLTQ2LjggMjd6TTMwMS42IDE4MWMtMS0zLjQtLjItNi45IDEuMS05LjQgMSAzIDIuNiA2LjQgNy41IDktLjUtMi40LS4yLTUuNiAuNS04LTEuNC01LjQgMi4xLTkuOSA2LjQtOS45IDYuOSAwIDguNSA4LjggNC43IDE0LjQgMi4xIDMuMiA1LjUgNS42IDcuNyA3LjggMy4yLTMuNyA1LjUtOS41IDUuNS0xMy44IDAtOC4yLTUuNS0xNS45LTE2LjctMTYuNS0yMC0uOS0yMC4yIDE2LjYtMjAgMTguOSAuNSA1LjIgMy40IDcuOCAzLjMgNy41em0tLjQgNmMtLjUgMS44LTcgMy43LTEwLjIgNi45IDQuOC0xIDctLjIgNy44IDEuOCAuNSAxLjQtLjIgMy40LS41IDUuNiAxLjYtMS44IDctNS41IDExLTYuMi0xLS4zLTMuNC0uOC00LjMtLjggMi45LTMuNCA5LjMtNC41IDEyLjgtMy43LTIuMi0uMi02LjcgMS4xLTguNSAyLjYgMS42IC4zIDMgLjYgNC4zIDEuMS0yLjEgLjgtNC44IDMuNC01LjggNi4xIDctNSAxMy4xIDUuMiA3IDguMiAuOCAuMiAyLjcgMCAzLjUtLjUtLjMgMS4xLTEuOSAzLTMgMy40IDIuOSAwIDctMS45IDguMi00LjYgMCAwLTEuOCAuNi0yLjYtLjJzLjMtNC4zIC4zLTQuM2MtMi4zIDIuOS0zLjQtMS4zLTEuMy00LjItMS0uMy0zLjUtLjYtNC42LS41IDMuMi0xLjEgMTAuNC0xLjggMTEuMi0uMyAuNiAxLjEtMSAzLjQtMSAzLjQgNC0uNSA4LjMgMS4xIDYuNyA1LjEgMi45LTEuNCA1LjUtNS45IDQuOC0xMC40LS4zIDEtMS42IDIuNC0yLjkgMi43IC4yLTEuNC0xLTIuMi0xLjktMi42IDEuNy05LjYtMTQuNi0xNC4yLTE0LjEtMjMuOS0xIDEuMy0xLjggNS0uOCA3LjEgMi43IDMuMiA4LjcgNi43IDEwLjEgMTIuMi0yLjYtNi40LTE1LjEtMTEuNC0xNC42LTIwLjItMS42IDEuNi0yLjYgNy44LTEuMyAxMSAyLjQgMS40IDQuNSAzLjggNC44IDYuMS0yLjItNS4xLTExLjQtNi4xLTEzLjktMTIuMi0uNiAyLjItLjMgNSAxIDYuNyAwIDAtMi4yLS44LTctLjYgMS43IC42IDUuMSAzLjUgNC44IDUuMnptMjUuOSA3LjRjLTIuNyAwLTMuNS0yLjEtNC4yLTQuMyAzLjMgMS4zIDQuMiA0LjMgNC4yIDQuM3ptMzguOSAzLjdsLTEtLjZjLTEuMS0xLTIuOS0xLjQtNC43LTEuNC0yLjkgMC01LjggMS4zLTcuNSAzLjQtLjggLjgtMS40IDEuOC0yLjEgMi42bDAgMTUuN2MzLjUgMi42IDcuMS0yLjkgMy03LjIgMS41IC4zIDQuNiAyLjcgNS4xIDMuMiAwIDAgMi42LS41IDUtLjUgMi4xIDAgMy45IC4zIDUuNiAxLjFsMC0xOC40Yy0xLjEgLjUtMi4yIDEtMi43IDEuNGwtLjcgLjd6TTc5LjkgMzA1LjljMTcuMi00LjYgMTYuMi0xOCAxNi4yLTE5LjkgMC0yMC42LTI0LjEtMjUtMzctMjVsLTU2LjEgMCA4LjMgOC42IDAgMjkuNS0xMS4zIDAgMTEuNCAxNC42IDAgMzIuMy04LjQgOC42YzYxLjcgMCA3My44IDEuNSA4Ni40LTUuOSA2LjctNCA5LjktOS44IDkuOS0xNy42IDAtNS4xIDIuNi0xOC44LTE5LjQtMjUuMnpNMzguNiAyNzguNGMyMCAwIDI5LjYtLjggMjkuNiA5LjFsMCAzYzAgMTIuMS0xOSA4LjgtMjkuNiA4LjhsMC0yMC45em0wIDU5LjJsMC0yMi42YzEyLjIgMCAzMi43LTIuMyAzMi43IDguOGwwIDQuNSAuMiAwYzAgMTEuMi0xMi41IDkuMy0zMi45IDkuM3ptMTAxLjItMTkuM2wyMy4xIC4yIDAtLjIgMTQuMS0yMS4yLTM3LjIgMCAwLTE0LjkgNTIuNCAwLTE0LjEtMjEgMC0uMi03My41IC4yIDcuNCA4LjIgMCA3Ny4xLTcuNCA4LjIgODEuMiAwIDE0LjEtMjEuMi02MC4xIC4yIDAtMTUuNHptMjE0LjctNjAuMWMtNzMuOSAwLTc3LjUgOTkuMy0uMyA5OS4zIDc3LjkgMCA3NC4xLTk5LjMgLjMtOTkuM3ptLS4zIDc3LjVjLTM3LjQgMC0zNi45LTU1LjMgLjItNTUuMyAzNi44IC4xIDM4LjggNTUuMy0uMiA1NS4zem0tOTEuMy04LjNsNDQuMS02Ni4yLTQxLjcgMCA2LjEgNy4yLTIwLjUgMzcuMi0uMyAwLTIxLTM3LjIgNi40LTcuMi00NC45IDAgNDQuMSA2NS44IC4yIDE5LjQtNy43IDguMiA0Mi42IDAtNy4yLTguMi0uMi0xOXpNMjM0LjUgMTc2LjFjMS42IDEuMyAyLjkgMi40IDIuOSA2LjZsMCAzOC44YzAgNC4yLS44IDUuMy0yLjcgNi40LS4xIC4xLTcuNSA0LjUtNy45IDQuNmwzNS4xIDBjMTAgMCAxNy40LTEuNSAyNi04LjYtLjYtNSAuMi05LjUgLjgtMTIgMC0uMi0xLjggMS40LTIuNyAzLjUgMC01LjcgMS42LTE1LjQgOS42LTIwLjUtLjEgMC0zLjctLjgtOSAxLjEgMi0zLjEgMTAtNy45IDEwLjQtNy45LTguMi0yNi0zOC0yMi45LTMyLjItMjIuOS0zMC45IDAtMzIuNiAuMy0zOS45LTQgLjEgLjggLjUgOC4yIDkuNiAxNC45em0yMS41IDUuNWM0LjYgMCAyMy4xLTMuMyAyMy4xIDE3LjMgMCAyMC43LTE4LjQgMTcuMy0yMy4xIDE3LjNsMC0zNC42em0yMjguOSA3OS42bDcgOC4zIDAgNDIuNS0uMyAwYy01LjQtMTQuNC00Mi4zLTQxLjUtNDUuMi01MC45bC0zMS42IDAgNy40IDguNSAwIDc2LjktNy4yIDguMyAzOSAwLTcuNC04LjIgMC00Ny40IC4zIDBjMy43IDEwLjYgNDQuNSA0Mi45IDQ4LjUgNTUuNmwyMS4zIDAgMC04NS4yIDcuNC04LjMtMzkuMi0uMXpNMzc4LjIgMTY1LjFjLTMyLjIgMC0zMi44IC4yLTM5LjktNCAuMSAuNyAuNSA4LjMgOS42IDE0LjkgMy4xIDIgMi45IDQuMyAyLjkgOS41IDEuOC0xLjEgMy44LTIuMiA2LjEtMy0xLjEgMS4xLTIuNyAyLjctMy41IDQuNSAxLTEuMSA3LjUtNS4xIDE0LjYtMy41LTEuNiAuMy00IDEuMS02LjEgMi45IC4xIDAgMi4xLTEuMSA3LjUtLjNsMC00LjNjNC43IDAgMjMuMS0zLjQgMjMuMSAxNy4zIDAgMjAuNS0xOC41IDE3LjMtMTkuNyAxNy4zIDUuNyA0LjQgNS44IDEyIDIuMiAxNi4zbC4zIDBjMzMuNCAwIDM2LjctMjcuMyAzNi43LTM0IDAtMy44LTEuMS0zMi0zMy44LTMzLjZ6Il19LEZoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtaWNyb3NvZnQiLGljb246WzQ0OCw1MTIsW10sImYzY2EiLCJNMCAzMmwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42em0yMzMuNCAwbDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6TTAgMjY1LjRsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnptMjMzLjQgMGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42eiJdfSxPaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmx5IixpY29uOlszMjAsNTEyLFtdLCJmNDE3IiwiTTE2NS45IDQyNy44YzEyLjkgMTEuNyAzMy43IDMzLjMgMzMuMiA1MC43IDAgLjgtLjEgMS42LS4xIDIuNS0xLjggMTkuOC0xOC44IDMxLjEtMzkuMSAzMS0yNS0uMS0zOS45LTE2LjgtMzguNy0zNS44IDEtMTYuMiAyMC41LTM2LjcgMzIuNC00Ny42IDIuMy0yLjEgMi43LTIuNyA1LjYtMy42IDMuNCAwIDMuOSAuMyA2LjcgMi44ek0zMDAgNjcuM2MtMTYuMy0yNS43LTM4LjYtNDAuNi02My4zLTUyLjEtMjUuNS0xMC43LTU0LjYtMTUuNC03Ni42LTE1LjItNDQuMSAwLTcxLjIgMTMuMi04MS4xIDE3LjMtNTMuNiAyNy45LTg0LjQgNjkuOS04Mi45IDE0MS4zIDcuMSA4Mi4yIDk3IDE3NiAxNTUuOCAyMzMuOCAxLjcgMS42IDQuNSA0LjUgNi4yIDUuMWwzLjMgLjFjMi4xLS43IDEuOC0uNSAzLjUtMi4xIDUyLjMtNDkuMiAxNDAuNy0xNDUuOCAxNTUuOS0yMTUuNyA3LTM5LjIgMy4xLTcyLjUtMjAuOC0xMTIuNXpNMTU0LjkgMzUxLjljLTI4LTUxLjEtNjUuMi0xMzAuNy02OS4zLTE4OS0zLjQtNDcuNSAxMS40LTEzMS4yIDY5LjMtMTM2LjdsMCAzMjUuN3pNMjk2LjggMTgwYy0xNi40IDU2LjgtNzcuMyAxMjgtMTE4LjkgMTcwLjMgMjcuOC01MS45IDY1LjItMTMzLjMgNjcuMi0xOTEuOSAxLjYtNDUuOS05LjgtMTA1LjgtNDgtMTMxLjQgODguOCAxOC4zIDExNS41IDk4LjEgOTkuNyAxNTN6Il19LFJoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1zdHJpcGUiLGljb246WzU3Niw1MTIsW10sImYxZjUiLCJNNDkyLjQgMjIwLjhjLTguOSAwLTE4LjcgNi43LTE4LjcgMjIuN2wzNi43IDBjMC0xNi05LjMtMjIuNy0xOC0yMi43ek0zNzUgMjIzLjRjLTguMiAwLTEzLjMgMi45LTE3IDdsLjIgNTIuOGMzLjUgMy43IDguNSA2LjcgMTYuOCA2LjcgMTMuMSAwIDIxLjktMTQuMyAyMS45LTMzLjQgMC0xOC42LTktMzMuMi0yMS45LTMzLjF6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xMjIuMiAyODEuMWMwIDI1LjYtMjAuMyA0MC4xLTQ5LjkgNDAuMy0xMi4yIDAtMjUuNi0yLjQtMzguOC04LjFsMC0zMy45YzEyIDYuNCAyNy4xIDExLjMgMzguOSAxMS4zIDcuOSAwIDEzLjYtMi4xIDEzLjYtOC43IDAtMTctNTQtMTAuNi01NC00OS45IDAtMjUuMiAxOS4yLTQwLjIgNDgtNDAuMiAxMS44IDAgMjMuNSAxLjggMzUuMyA2LjVsMCAzMy40Yy0xMC44LTUuOC0yNC41LTkuMS0zNS4zLTkuMS03LjUgMC0xMi4xIDIuMi0xMi4xIDcuNyAwIDE2IDU0LjMgOC40IDU0LjMgNTAuN3pNMTkxIDIyNC41bC0yNyAwIDAgNTAuNWMwIDIwLjkgMjIuNSAxNC40IDI3IDEyLjZsMCAyOC45Yy00LjcgMi42LTEzLjMgNC43LTI0LjkgNC43LTIxLjEgMC0zNi45LTE1LjUtMzYuOS0zNi41bC4yLTExMy45IDM0LjctNy40IDAgMzAuOCAyNi45IDAgMCAzMC4zem03NCAyLjRjLTQuNS0xLjUtMTguNy0zLjYtMjcuMSA3LjRsMCA4NC40LTM1LjUgMCAwLTEyNC41IDMwLjcgMCAyLjIgMTAuNWM4LjMtMTUuMyAyNC45LTEyLjIgMjkuNi0xMC41bC4xIDAgMCAzMi43em00NC4xIDkxLjhsLTM1LjcgMCAwLTEyNC41IDM1LjcgMCAwIDEyNC41em0wLTE0Mi45bC0zNS43IDcuNiAwLTI4LjkgMzUuNy03LjYgMCAyOC45em03NC4xIDE0NS41Yy0xMi40IDAtMjAtNS4zLTI1LjEtOWwtLjEgNDAuMi0zNS41IDcuNSAwLTE2NS44IDMxLjMgMCAxLjggOC44YzQuOS00LjUgMTMuOS0xMS4xIDI3LjgtMTEuMSAyNC45IDAgNDguNCAyMi41IDQ4LjQgNjMuOCAwIDQ1LjEtMjMuMiA2NS41LTQ4LjYgNjUuNnptMTYwLjQtNTEuNWwtNjkuNSAwYzEuNiAxNi42IDEzLjggMjEuNSAyNy42IDIxLjUgMTQuMSAwIDI1LjItMyAzNC45LTcuOWwwIDI4LjZjLTkuNyA1LjMtMjIuNCA5LjItMzkuNCA5LjItMzQuNiAwLTU4LjgtMjEuNy01OC44LTY0LjUgMC0zNi4yIDIwLjUtNjQuOSA1NC4zLTY0LjkgMzMuNyAwIDUxLjMgMjguNyA1MS4zIDY1LjEgMCAzLjUtLjMgMTAuOS0uNCAxMi45eiJdfSxCaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid29yZHByZXNzLXNpbXBsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjQxMSIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTMzIDI1NmMwLTMyLjMgNi45LTYzIDE5LjMtOTAuN0wxNTguNyA0NTYuN0M4NC4zIDQyMC41IDMzIDM0NC4yIDMzIDI1NnpNMjU2IDQ3OWMtMjEuOSAwLTQzLTMuMi02My05LjFsNjYuOS0xOTQuNCA2OC41IDE4Ny44Yy41IDEuMSAxIDIuMSAxLjYgMy4xLTIzLjEgOC4xLTQ4IDEyLjYtNzQgMTIuNnptMzAuNy0zMjcuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTIxLjkgMC01OC43LTIuOC01OC43LTIuOC0xMi0uNy0xMy40IDE3LjctMS40IDE4LjQgMCAwIDExLjQgMS40IDIzLjQgMi4xbDM0LjcgOTUuMi00OC44IDE0Ni4zLTgxLjItMjQxLjVjMTMuNC0uNyAyNS41LTIuMSAyNS41LTIuMSAxMi0xLjQgMTAuNi0xOS4xLTEuNC0xOC40IDAgMC0zNi4xIDIuOC01OS40IDIuOC00LjIgMC05LjEtLjEtMTQuNC0uMyAzOS45LTYwLjUgMTA4LjQtMTAwLjUgMTg2LjMtMTAwLjUgNTggMCAxMTAuOSAyMi4yIDE1MC42IDU4LjUtMS0uMS0xLjktLjItMi45LS4yLTIxLjkgMC0zNy40IDE5LjEtMzcuNCAzOS42IDAgMTguNCAxMC42IDMzLjkgMjEuOSA1Mi4zIDguNSAxNC44IDE4LjQgMzMuOSAxOC40IDYxLjUgMCAxOS4xLTcuMyA0MS4yLTE3IDcyLjFsLTIyLjIgNzQuMy04MC43LTIzOS42em04MS40IDI5Ny4ybDY4LjEtMTk2LjljMTIuNy0zMS44IDE3LTU3LjIgMTctNzkuOSAwLTguMi0uNS0xNS44LTEuNS0yMi45IDE3LjQgMzEuOCAyNy4zIDY4LjIgMjcuMyAxMDcgMCA4Mi4zLTQ0LjYgMTU0LjEtMTEwLjkgMTkyLjd6Il19LEhoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzZWxsc3kiLGljb246WzY0MCw1MTIsW10sImYyMTMiLCJNNTQwIDIzNy4zYzMuMS0xMi4zIDQuMy0yNC44IDQuMy0zNy40IDAtOTIuNS03NS40LTE2Ny45LTE2Ny45LTE2Ny45LTc3LjIgMC0xNDQuNiA1My0xNjMgMTI3LjgtMTUuMy0xMy4yLTM0LjktMjAuNS01NS4yLTIwLjUtNDYuMyAwLTg0IDM3LjctODQgODQgMCA3LjQgLjkgMTUgMy4xIDIyLjQtNDIuOSAyMC4yLTcwLjggNjMuNy03MC44IDExMS4yIDAgNjggNTUuNSAxMjMuMiAxMjMuMiAxMjMuMmwzODEuMiAwYzY3LjcgMCAxMjMuMi01NS4yIDEyMy4yLTEyMy4yIDAtNTYuNC0zOC45LTEwNi05NC4xLTExOS41ek0yMDAuMiA0MDEuNmMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMTAuOWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTEwLjl6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMzEuNWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTMxLjV6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMTYyLjdjMC04LjMgNy0xNS4zIDE1LjMtMTUuM2wzMSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxNjIuN3ptODcgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0yOC41IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0yMjQuNmMwLTguNiA3LTE1LjYgMTUuMy0xNS42bDI4LjUgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS42bDAgMjI0LjZ6Il19LHFoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkYXNoY3ViZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjIxMCIsIk0zMjYuOSAxMDRsLTIxNi4yIDBjLTUxLjEgMC05MS4yIDQzLjMtOTEuMiA5My41bDAgMjI5LjVjMCA1MC41IDQwLjEgODUgOTEuMiA4NWwyMjcuMiAwYzUxLjEgMCA5MS4yLTM0LjUgOTEuMi04NWwwLTQyNy0xMDIuMiAxMDR6TTE1NC4yIDQxNi41Yy0xNy43IDAtMzIuNC0xNS4xLTMyLjQtMzIuOGwwLTE0Mi45YzAtMTcuNyAxNC43LTMyLjUgMzIuNC0zMi41bDE0MC43IDBjMTcuNyAwIDMyIDE0LjggMzIgMzIuNWwwIDEyMy41IDUxLjEgNTIuMy0yMjMuOCAwIDAtLjF6Il19LFZoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnaXR0ZXIiLGljb246WzM4NCw1MTIsW10sImY0MjYiLCJNNjYuNCAzMjIuNWwtNTAuNCAwIDAtMzIyLjUgNTAuNCAwIDAgMzIyLjV6TTE2Ni45IDc2LjFsLTUwLjQgMCAwIDQzNS45IDUwLjQgMCAwLTQzNS45em0xMDAuNiAwbC01MC40IDAgMCA0MzUuOSA1MC40IDAgMC00MzUuOXpNMzY4IDc2bC01MC40IDAgMCAyNDcgNTAuNCAwIDAtMjQ3eiJdfSxqaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid29sZi1wYWNrLWJhdHRhbGlvbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjUxNCIsIk0yMzYuMiA0NzEuNWwxMC42IDE1LjggNS4zLTEyLjMgNS4zIDcgMCAyOS45YzIxLjEtNy45IDIxLjEtNjYuOSAyNS41LTk3LjIgNC42LTMxLjktLjktOTIuOCA4MS40LTE0OS4xLTguOS0yMy42LTEyLTQ5LjQtMi42LTgwIDI3LjkgMy40IDUzLjkgMTAuNiA2My4zIDU0LjFsLTMwLjMgOC40YzExLjEgMjMgMTcgNDYuOCAxMy4yIDcyLjFsLTI3LjMtNy02LjIgMzMuNC0xOC41LTctOC44IDMzLjQtMTkuNC03IDI2LjQgMjEuMSA4LjgtMjguMiAyNC42IDUuMiA3LTM1LjYgMjYuNCAxNC41Yy4yLTIwIDctNTguMS04LjgtODQuNWwyNi40IDUuM2M0LTIyLjEtMi40LTM5LjItNy45LTU2LjdsMjIuNCA5LjdjLS40LTI1LjEtMjkuOS01Ni44LTYxLjYtNTguNS0yMC4yLTEuMS01Ni43LTI1LjItNTQuMS01MS45IDItMTkuOSAxNy40LTQyLjYgNDMuMS00OS43LTQ0IDM2LjUtOS43IDY3LjMgNS4zIDczLjUgNC40LTExLjQgMTcuNS02OS4xIDAtMTMwLjItNDAuNCAyMi45LTg5LjcgNjUuMS05My4yIDE0Ny44bC01OCAzOC43LTMuNSA5My4yIDEwNy4zLTU5LjggNyA3LTE3LjYgMy41LTQ0IDM4LjctMTUuOC01LjMtMjguMSA0OS4zLTMuNSAxMTkuNiAyMS4xIDE1LjgtMzIuNSAxNS44LTMyLjYtMTUuOCAyMS4xLTE1LjgtMy41LTExOS42LTI4LjItNDkuMy0xNS44IDUuMy00NC0zOC43LTE3LjYtMy41IDctNyAxMDcuMyA1OS44LTMuNS05My4zLTU4LjEtMzguN2MtMy41LTgyLjgtNTIuNy0xMjUtOTMuMi0xNDcuOS0xNy41IDYxLjEtNC40IDExOC44IDAgMTMwLjIgMTUtNi4yIDQ5LjMtMzcgNS4zLTczLjUgMjUuNyA3LjEgNDEuMSAyOS44IDQzLjEgNDkuNyAyLjYgMjYuNy0zMy45IDUwLjgtNTQuMSA1MS45LTMxLjcgMS43LTYxLjIgMzMuNC02MS42IDU4LjVsMjIuNC05LjdDMTMuNCAyMjQuNyA3IDI0MS44IDExIDI2My45bDI2LjQtNS4zYy0xNS44IDI2LjQtOS4xIDY0LjQtOC44IDg0LjRsMjYuNC0xNC41IDcgMzUuNiAyNC42LTUuMyA4LjggMjguMiAyNi40LTIxLjEtMTkuNCA3LTguOC0zMy40LTE4LjUgNy02LjItMzMuNC0yNy4zIDdDMzggMjk0LjggNDMuOCAyNzEgNTUgMjQ4bC0zMC4zLTguNGM5LjQtNDMuNSAzNS41LTUwLjggNjMuMy01NC4xIDkuNCAzMC42IDYuMiA1Ni41LTIuNiA4MC4xIDgyLjMgNTYuMyA3Ni44IDExNy4yIDgxLjQgMTQ5LjEgNC40IDMwLjMgNC40IDg5LjMgMjUuNSA5Ny4ybDAtMjkuOCA1LjMtNyA1LjMgMTIuMyAxMC42LTE1LjggMTEuNCAyMS4xIDExLjQtMjEuMSAwIDB6bTc5LjItOTVMMjk5LjUgMzY2YzcuNS00LjQgMTMuOC04LjQgMTkuNC0xMi4zLS42IDcuMi0uMyAxMy44LTMuNSAyMi44bDAgMHptMjguMi00OS4zYy0uNCAxMC45LS45IDIxLjctMS44IDMxLjctNy44LTEuOS0xNS42LTMuOC0yMS4xLTcgOC4yLTcuOSAxNS42LTE2LjMgMjIuOS0yNC43bDAgMHptMjQuNiA1LjNjMC0xMy40LTIuMS0yNC4yLTUuMy0zMy40LTUuNSA5LjUtMTEuNyAxOC42LTE4LjUgMjcuM2wyMy44IDYuMnptMy41LTgwLjljMTkuNCAxMi44IDI3LjggMzMuNyAyOS45IDU2LjMtMTIuMy00LjUtMjQuNi05LjMtMzctMTAuNiA1LjEtMTIgNi42LTI4LjEgNy00NS43bDAgMHptLTEuOC00NS43Yy44IDE0LjMgMS44IDI4LjggMS44IDQyLjIgMTkuMi04LjEgMjkuOC05LjcgNDQtMTQuMS0xMC42LTE5LTI3LjItMjUuNS00NS44LTI4LjJsMCAwek0xMzQuMiAzNzYuNUwxNTAgMzY2Yy03LjUtNC40LTEzLjgtOC40LTE5LjQtMTIuMyAuNiA3LjMgLjMgMTMuOSAzLjUgMjIuOWwwIDB6TTEwNiAzMjcuM2MuNCAxMC45IC45IDIxLjcgMS44IDMxLjcgNy44LTEuOSAxNS42LTMuOCAyMS4xLTctOC4yLTcuOS0xNS42LTE2LjMtMjIuOS0yNC43em0tMjQuNiA1LjNjMC0xMy40IDItMjQuMiA1LjMtMzMuNCA1LjUgOS41IDExLjcgMTguNiAxOC41IDI3LjNsLTIzLjggNi4yem0tMy41LTgwLjljLTE5LjQgMTIuOC0yNy44IDMzLjctMjkuOSA1Ni4zIDEyLjMtNC41IDI0LjYtOS4zIDM3LTEwLjYtNS0xMi02LjYtMjguMS03LTQ1LjdsLS4xIDB6bTEuOC00NS43Yy0uOCAxNC4zLTEuOCAyOC44LTEuOCA0Mi4yLTE5LjItOC4xLTI5LjgtOS43LTQ0LTE0LjEgMTAuNi0xOSAyNy4yLTI1LjUgNDUuOC0yOC4xeiJdfSxVaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibGFzdGZtIixpY29uOls1MTIsNTEyLFtdLCJmMjAyIiwiTTIyNS44IDM2Ny4xbC0xOC44LTUxcy0zMC41IDM0LTc2LjIgMzRjLTQwLjUgMC02OS4yLTM1LjItNjkuMi05MS41IDAtNzIuMSAzNi40LTk3LjkgNzIuMS05Ny45IDY2LjUgMCA3NC44IDUzLjMgMTAwLjkgMTM0LjkgMTguOCA1Ni45IDU0IDEwMi42IDE1NS40IDEwMi42IDcyLjcgMCAxMjItMjIuMyAxMjItODAuOSAwLTcyLjktNjIuNy04MC42LTExNS05Mi4xLTI1LjgtNS45LTMzLjQtMTYuNC0zMy40LTM0IDAtMTkuOSAxNS44LTMxLjcgNDEuNi0zMS43IDI4LjIgMCA0My40IDEwLjYgNDUuNyAzNS44bDU4LjYtN2MtNC43LTUyLjgtNDEuMS03NC41LTEwMC45LTc0LjUtNTIuOCAwLTEwNC40IDE5LjktMTA0LjQgODMuOSAwIDM5LjkgMTkuNCA2NS4xIDY4IDc2LjggNDQuOSAxMC42IDc5LjggMTMuOCA3OS44IDQ1LjcgMCAyMS43LTIxLjEgMzAuNS02MSAzMC41LTU5LjIgMC04My45LTMxLjEtOTcuOS03My45LTMyLTk2LjgtNDMuNi0xNjMtMTYxLjMtMTYzLTg2LjEgMC0xMzEuOCA1NC41LTEzMS44IDE0Ny4yIDAgODkuMSA0NS43IDEzNy4yIDEyNy45IDEzNy4yIDY2LjIgMCA5Ny45LTMxLjEgOTcuOS0zMS4xeiJdfSxXaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2hvcHdhcmUiLGljb246WzUxMiw1MTIsW10sImY1YjUiLCJNNDAzLjUgNDU1LjRjLTQyLjYgMzEuNy05NC40IDQ4LjctMTQ3LjUgNDguNi0xMzcuMiAwLTI0OC0xMTEtMjQ4LTI0OCAwLTEzNy4yIDExMS0yNDggMjQ4LTI0OCA2MS4yLS4xIDEyMC4yIDIyLjYgMTY1LjcgNjMuNSAuNiAuNSAuOSAxLjIgMS4xIDEuOXMuMSAxLjUtLjMgMi4yLS44IDEuMy0xLjUgMS42LTEuNCAuNS0yLjIgLjRjLTE4LjgtMi41LTM3LjctMy43LTU2LjctMy43LTEyOS40IDAtMjIyLjQgNTMuNS0yMjIuNCAxNTUuNCAwIDEwOSA5Mi4xIDE0NS45IDE3Ni44IDE3OC43IDMzLjYgMTMgNjUuNCAyNS40IDg3IDQxLjYgLjQgLjMgLjggLjggMS4xIDEuM3MuNCAxIC40IDEuNi0uMSAxLjEtLjQgMS42LS42IC45LTEuMSAxLjNsLS4xIDB6TTUwMyAyMzMuMWMtLjEtLjktLjUtMS44LTEuMy0yLjQtNTEuOC00My05My42LTYwLjUtMTQ0LjUtNjAuNS04NC4xIDAtODAuMyA1Mi4yLTgwLjMgNTMuNiAwIDQyLjYgNTIuMSA2MiAxMTIuMyA4NC41IDMxLjEgMTEuNiA2My4yIDIzLjYgOTIuNyAzOS45IC40IC4yIC45IC40IDEuNCAuNHMxIDAgMS41LS4yIC45LS40IDEuMy0uOCAuNi0uOCAuOC0xLjJjMTQuMS0zNiAxOS41LTc0LjggMTYtMTEzLjN6Il19LEdoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJibG9nZ2VyIixpY29uOls0NDgsNTEyLFtdLCJmMzdjIiwiTTE2Mi40IDE5NmM0LjgtNC45IDYuMi01LjEgMzYuNC01LjEgMjcuMiAwIDI4LjEgLjEgMzIuMSAyLjEgNS44IDIuOSA4LjMgNyA4LjMgMTMuNiAwIDUuOS0yLjQgMTAtNy42IDEzLjQtMi44IDEuOC00LjUgMS45LTMxLjEgMi4xLTE2LjQgLjEtMjkuNS0uMi0zMS41LS44LTEwLjMtMi45LTE0LjEtMTcuNy02LjYtMjUuM3ptNjEuNCA5NC41Yy01My45IDAtNTUuOCAuMi02MC4yIDQuMS0zLjUgMy4xLTUuNyA5LjQtNS4xIDEzLjkgLjcgNC43IDQuOCAxMC4xIDkuMiAxMiAyLjIgMSAxNC4xIDEuNyA1Ni4zIDEuMmw0Ny45LS42IDkuMi0xLjVjOS01LjEgMTAuNS0xNy40IDMuMS0yNC40LTUuMy00LjctNS00LjctNjAuNC00Ljd6TTQ0Ny4yIDQyMC42Yy0zLjUgMjguNC0yMyA1MC40LTUxLjEgNTcuNS03LjIgMS44LTkuNyAxLjktMTcyLjkgMS44LTE1Ny44IDAtMTY1LjktLjEtMTcyLTEuOC04LjQtMi4yLTE1LjYtNS41LTIyLjMtMTAtNS42LTMuOC0xMy45LTExLjgtMTctMTYuNC0zLjgtNS42LTguMi0xNS4zLTEwLTIyUzAgNDIwLjMgMCAyNTYuM2MwLTE2My4xIDAtMTY2LjYgMS44LTE3My43IDYuMy0yNC43IDI1LjktNDMuNiA1MS4yLTQ5LjIgNy4zLTEuNiAzMzIuMS0xLjkgMzQwLS4zIDIxLjIgNC4zIDM3LjkgMTcuMSA0Ny42IDM2LjQgNy43IDE1LjMgNy0xLjUgNy4zIDE4MC42IC4yIDExNS44IDAgMTY0LjUtLjcgMTcwLjV6TTM2MS44IDIzNS40Yy0xLjEtNS00LjItOS42LTcuNy0xMS41LTEuMS0uNi04LTEuMy0xNS41LTEuNy0xMi40LS42LTEzLjgtLjgtMTcuOC0zLjEtNi4yLTMuNi03LjktNy42LTgtMTguMyAwLTIwLjQtOC41LTM5LjQtMjUuMy01Ni41LTEyLTEyLjItMjUuMy0yMC41LTQwLjYtMjUuMS0zLjYtMS4xLTExLjgtMS41LTM5LjItMS44LTQyLjktLjUtNTIuNSAuNC02Ny4xIDYuMi0yNyAxMC43LTQ2LjMgMzMuNC01My40IDYyLjQtMS4zIDUuNC0xLjYgMTQuMi0xLjkgNjQuMy0uNCA2Mi44IDAgNzIuMSA0IDg0LjUgOS43IDMwLjcgMzcuMSA1My40IDY0LjYgNTguNCA5LjIgMS43IDEyMi4yIDIuMSAxMzMuNyAuNSAyMC4xLTIuNyAzNS45LTEwLjggNTAuNy0yNS45IDEwLjctMTAuOSAxNy40LTIyLjggMjEuOC0zOC41IDMuMi0xMC45IDIuOS04OC40IDEuNy05My45eiJdfSxZaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZWRnZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI4MiIsIk0xMjAuMSAzNy40YzQxLTI1LjIgODcuNi0zOC4yIDEzNC45LTM3LjQgMTY4IDAgMjU3IDEyMy44IDI1NyAyMTkuNS0uMSAzMi43LTEzIDYzLjktMzUuOSA4Ny4yLTIyLjkgMjMuMi01NCAzNi41LTg2LjcgMzctNzUuMiAwLTkxLjUtMjMuMS05MS41LTMyIDAtMy44IDEuMi02LjIgNC44LTkuNGwxLTEuMiAuNC0xLjZjMTAuNS0xMS41IDE1LjktMjYuMiAxNS45LTQxLjYgMC03OC43LTgyLjItMTQyLjctMTg0LTE0Mi43LTM3LjUtLjMtNzQuNSA4LjktMTA3LjUgMjYuOSAyNy01Ny41IDgyLjctOTcuNiA5MS4zLTEwMy44IC44LS42IC4zLS44IC4zLS44em0xNS42IDMxOC4xYy0xLjQgMzAgNC42IDYwIDE2LjQgODcuMiAxMy42IDI2LjQgMzIuNyA1MSA1Ni41IDY5LjMtNTkuNS0xMS41LTExMS41LTQzLjktMTQ5LjQtODkuMy0zOC4xLTQ2LjQtNTkuMi0xMDQuMy01OS4yLTE2NC44IDAtNTEuMiA2Mi40LTk0LjQgMTM2LTk0LjQgMzYuNi0uNiA3Mi40IDEwLjkgMTAxLjggMzIuN2wtMy42IDEuMmMtNTEuNSAxNy42LTk4LjUgOTAuNy05OC41IDE1OC4xek00NjkuOCA0MDBsLS43IC4xYy0xMS44IDE4LjgtMjUuOSAzNS4xLTQyLjIgNDkuNS0zMC44IDI4LTY4LjEgNDUuNS0xMDguOCA0OS45LTE4LjYgLjMtMzYuOC0zLjItNTMuOC0xMS40LTI1LjYtMTAuMy00Ny4xLTMwLTYxLjYtNTMtMTQuNC0yMy45LTIxLjEtNTEuNy0xOS03OS42LS42LTIwLjEgNS40LTQwLjMgMTUtNTguMiAxMy45IDMzLjEgMzcuNSA2MS4zIDY3LjYgODAuOHM2NS41IDI5LjUgMTAxLjQgMjguNmMzMSAuMyA2Mi4xLTYuNyA5MC4yLTIwLjVsMS45LS45YzMuOS0yLjMgNy43LTMuOSAxMS42IDAgNC41IDQuOSAxLjggOS4yLTEuMiAxNC0uMiAuMi0uMyAuNS0uNCAuN3oiXX0sWmhlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImlveGhvc3QiLGljb246WzY0MCw1MTIsW10sImYyMDgiLCJNNjE2IDE2MGwtNjcuMyAwQzUxMS4yIDcwLjcgNDIyLjkgOCAzMjAgOCAxODMgOCA3MiAxMTkgNzIgMjU2IDcyIDI3Mi40IDczLjYgMjg4LjUgNzYuNyAzMDRMMjQgMzA0Yy0xMy4zIDAtMjQgMTAuOC0yNCAyNCAwIDEzLjMgMTAuNyAyNCAyNCAyNGw2Ny4zIDBjMzcuNSA4OS4zIDEyNS44IDE1MiAyMjguNyAxNTIgMTM3IDAgMjQ4LTExMSAyNDgtMjQ4IDAtMTYuNC0xLjYtMzIuNS00LjctNDhsNTIuNyAwYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0em0tOTYgOTZjMCAxMTAuNS04OS41IDIwMC0yMDAgMjAwLTc1LjcgMC0xNDEuNi00Mi0xNzUuNS0xMDRMNDI0IDM1MmMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjk4LjIgMGMtMy44LTE1LjQtNS44LTMxLjQtNS44LTQ4IDAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMCA3NS43IDAgMTQxLjYgNDIgMTc1LjUgMTA0TDIxNiAxNjBjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDI5OC4yIDBjMy44IDE1LjQgNS44IDMxLjQgNS44IDQ4ek0yMTYgMjMybDIwOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuMi0xMC43IDI0LTI0IDI0bC0yMDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMy4yIDEwLjctMjQgMjQtMjR6Il19LFhoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzY2hsaXgiLGljb246WzQ0OCw1MTIsW10sImYzZWEiLCJNMzUwLjUgMTU3LjdsLTU0LjItNDYuMSA3My40LTM5IDc4LjMgNDQuMi05Ny41IDQwLjl6TTE5MiAxMjIuMWw0NS43LTI4LjIgMzQuNyAzNC42LTU1LjQgMjktMjUtMzUuNHptLTY1LjEgNi42bDMxLjktMjIuMSAxNy4yIDI4LjQtMzYuNyAyMi41LTEyLjQtMjguOHptLTIzLjMgODguMmwtOC44LTM0LjggMjkuNi0xOC4zIDEzLjEgMzUuMy0zMy45IDE3Ljh6TTgyLjQgMTMzLjJsMjMuOS0xOC4xIDguOSAyNC0yNi43IDE4LjMtNi4xLTI0LjJ6TTU5IDIwNi41bC0zLjYtMjguNCAyMi4zLTE1LjUgNi4xIDI4LjctMjQuOCAxNS4yek0yOC40IDIyMy4xbDIwLjgtMTIuOCAzLjMgMzMuNC0yMi45IDEyLTEuMi0zMi42ek0xLjQgMjY4TDIwLjYgMjU3LjggMjEgMjk2IDAgMzA0LjggMS40IDI2OHptNTkuMSA1OS4zbC0yOC4zIDguMy0xLjYtNDYuOCAyNS4xLTEwLjcgNC44IDQ5LjJ6TTk5IDI2My4ybC0zMS4xIDEzLTUuMi00MC44IDI3LjQtMTQuNCA4LjkgNDIuMnpNMTIzLjIgMzc3bC00MS42IDUuOS04LjEtNjMuNSAzNS4yLTEwLjggMTQuNSA2OC40em0yOC41LTEzOS45bDIxLjIgNTcuMS00Ni4yIDEzLjYtMTMuNy01NC4xIDM4LjctMTYuNnptODUuNyAyMzAuNWwtNzAuOS0zLjMtMjQuMy05NS44IDU1LjItOC42IDQwIDEwNy43ek0xNTIuNSAxODcuOWw0Mi4yLTIyLjQgMjggNDUuOS01MC44IDIxLjMtMTkuNC00NC44em00MSA5NC45bDYxLjMtMTguNyA1Mi44IDg2LjYtNzkuOCAxMS4zLTM0LjMtNzkuMnptNTEuNC04NS42bDY3LjMtMjguOCA2NS41IDY1LjQtODguNiAyNi4yLTQ0LjItNjIuOHoiXX0sS2hlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImQtYW5kLWQiLGljb246WzU3Niw1MTIsW10sImYzOGQiLCJNODIuOSA5OC45Yy0uNi0xNy4yIDItMzMuOCAxMi43LTQ4LjIgLjMgNy40IDEuMiAxNC41IDQuMiAyMS42IDUuOS0yNy41IDE5LjctNDkuMyA0Mi4zLTY1LjUtMS45IDUuOS0zLjUgMTEuOC0zIDE3LjcgOC43LTcuNCAxOC44LTE3LjggNDQuNC0yMi43IDE0LjctMi44IDI5LjctMiA0Mi4xIDEgMzguNSA5LjMgNjEgMzQuMyA2OS43IDcyLjMgNS4zIDIzLjEgLjcgNDUtOC4zIDY2LjQtNS4yIDEyLjQtMTIgMjQuNC0yMC43IDM1LjEtMi0xLjktMy45LTMuOC01LjgtNS42LTQyLjgtNDAuOC0yNi44LTI1LjItMzcuNC0zNy40LTEuMS0xLjItMS0yLjItLjEtMy42IDguMy0xMy41IDExLjgtMjguMiAxMC00NC0xLjEtOS44LTQuMy0xOC45LTExLjMtMjYuMi0xNC41LTE1LjMtMzkuMi0xNS01My41IC42LTExLjQgMTIuNS0xNC4xIDI3LjQtMTAuOSA0My42IC4yIDEuMyAuNCAyLjcgMCAzLjktMy40IDEzLjctNC42IDI3LjYtMi41IDQxLjYgLjEgLjUgLjEgMS4xIC4xIDEuNiAwIC4zLS4xIC41LS4yIDEuMS0yMS44LTExLTM2LTI4LjMtNDMuMi01Mi4yLTguMyAxNy44LTExLjEgMzUuNS02LjYgNTQuMS0xNS42LTE1LjItMjEuMy0zNC4zLTIyLTU1LjJ6TTU1Mi41IDIyMi4xYy0xMS42LTExLjYtMjUtMjAuNC00MC4xLTI2LjYtMTIuOC01LjItMjYtNy45LTM5LjktNy4xLTEwIC42LTE5LjYgMy4xLTI5IDYuNC0yLjUgLjktNS4xIDEuNi03LjcgMi4yLTQuOSAxLjItNy4zLTMuMS00LjctNi44IDMuMi00LjYgMy40LTQuMiAxNS0xMiAuNi0uNCAxLjItLjggMi4yLTEuNWwtMi41IDBjLS42IDAtMS4yIC4yLTEuOSAuMy0xOS4zIDMuMy0zMC43IDE1LjUtNDguOSAyOS42LTEwLjQgOC4xLTEzLjggMy44LTEyLS41IDEuNC0zLjUgMy4zLTYuNyA1LjEtMTAgMS0xLjggMi4zLTMuNCAzLjUtNS4xLS4yLS4yLS41LS4zLS43LS41LTI3IDE4LjMtNDYuNyA0Mi40LTU3LjcgNzMuMyAuMyAuMyAuNyAuNiAxIC45IC4zLS42IC41LTEuMiAuOS0xLjcgMTAuNC0xMi4xIDIyLjgtMjEuOCAzNi42LTI5LjggMTguMi0xMC42IDM3LjUtMTguMyA1OC43LTIwLjIgNC4zLS40IDguNy0uMSAxMy4xLS4xLTEuOCAuNy0zLjUgLjktNS4zIDEuMS0xOC41IDIuNC0zNS41IDktNTEuNSAxOC41LTMwLjIgMTcuOS01NC41IDQyLjItNzUuMSA3MC40LS4zIC40LS40IC45LS43IDEuMyAxNC41IDUuMyAyNCAxNy4zIDM2LjEgMjUuNiAuMi0uMSAuMy0uMiAuNC0uNGwxLjItMi43YzEyLjItMjYuOSAyNy01Mi4zIDQ2LjctNzQuNSAxNi43LTE4LjggMzgtMjUuMyA2Mi41LTIwIDUuOSAxLjMgMTEuNCA0LjQgMTcuMiA2LjggMi4zLTEuNCA1LjEtMy4yIDgtNC43IDguNC00LjMgMTcuNC03IDI2LjctOSAxNC43LTMuMSAyOS41LTQuOSA0NC41LTEuM2wwLS41Yy0uNS0uNC0xLjItLjgtMS43LTEuNHpNMzE3LjEgMzk3LjZjLTM5LjQtMzMtMjIuOC0xOS41LTQyLjctMzUuNi0uOCAuOSAwLS4yLTEuOSAzLTExLjIgMTkuMS0yNS41IDM1LjMtNDQgNDcuNi0xMC4zIDYuOC0yMS41IDExLjgtMzQuMSAxMS44LTIxLjYgMC0zOC4yLTkuNS00OS40LTI3LjgtMTItMTkuNS0xMy4zLTQwLjctOC4yLTYyLjYgNy44LTMzLjggMzAuMS01NS4yIDM4LjYtNjQuMy0xOC43LTYuMi0zMyAxLjctNDYuNCAxMy45IC44LTEzLjkgNC4zLTI2LjIgMTEuOC0zNy4zLTI0LjMgMTAuNi00NS45IDI1LTY0LjggNDMuOS0uMy01LjggNS40LTQzLjcgNS42LTQ0LjcgLjMtMi43LS42LTUuMy0zLTcuNC0yNC4yIDI0LjctNDQuNSA1MS44LTU2LjEgODQuNiA3LjQtNS45IDE0LjktMTEuNCAyMy42LTE2LjItOC4zIDIyLjMtMTkuNiA1Mi44LTcuOCAxMDEuMSA0LjYgMTkgMTEuOSAzNi44IDI0LjEgNTIuMyAyLjkgMy43IDYuMyA2LjkgOS41IDEwLjMgLjItLjIgLjQtLjMgLjYtLjUtMS40LTctMi4yLTE0LjEtMS41LTIxLjkgMi4yIDMuMiAzLjkgNiA1LjkgOC42IDEyLjYgMTYgMjguNyAyNy40IDQ3LjIgMzUuNiAyNSAxMS4zIDUxLjEgMTMuMyA3Ny45IDguNiA1NC45LTkuNyA5MC43LTQ4LjYgMTE2LTk4LjggMS0xLjggLjYtMi45LS45LTQuMnptMTcyLTQ2LjRjLTkuNS0zLjEtMjIuMi00LjItMjguNy0yLjkgOS45IDQgMTQuMSA2LjYgMTguOCAxMiAxMi42IDE0LjQgMTAuNCAzNC43LTUuNCA0NS42LTExLjcgOC4xLTI0LjkgMTAuNS0zOC45IDkuMS0xLjItLjEtMi4zLS40LTMtLjYgMi44LTMuNyA2LTcgOC4xLTEwLjggOS40LTE2LjggNS40LTQyLjEtOC43LTU2LjEtMi4xLTIuMS00LjYtMy45LTctNS45LS4zIDEuMy0uMSAyLjEgLjEgMi44IDQuMiAxNi42LTguMSAzMi40LTI0LjggMzEuOC03LjYtLjMtMTMuOS0zLjgtMTkuNi04LjUtMTkuNS0xNi4xLTM5LjEtMzIuMS01OC41LTQ4LjMtNS45LTQuOS0xMi41LTguMS0yMC4xLTguNy00LjYtLjQtOS4zLS42LTEzLjktLjktNS45LS40LTguOC0yLjgtMTAuNC04LjQtLjktMy40LTEuNS02LjgtMi4yLTEwLjItMS41LTguMS02LjItMTMtMTQuMy0xNC4yLTQuNC0uNy04LjktMS0xMy4zLTEuNS0xMy0xLjQtMTkuOC03LjQtMjIuNi0yMC4zLTUgMTEtMS42IDIyLjQgNy4zIDI5LjkgNC41IDMuOCA5LjMgNy4zIDEzLjggMTEuMiA0LjYgMy44IDcuNCA4LjcgNy45IDE0LjggLjQgNC43IC44IDkuNSAxLjggMTQuMSAyLjIgMTAuNiA4LjkgMTguNCAxNyAyNS4xIDE2LjUgMTMuNyAzMyAyNy4zIDQ5LjUgNDEuMSAxNy45IDE1IDEzLjkgMzIuOCAxMyA1Ni0uOSAyMi45IDEyLjIgNDIuOSAzMy41IDUxLjIgMSAuNCAyIC42IDMuNiAxLjEtMTUuNy0xOC4yLTEwLjEtNDQuMSAuNy01Mi4zIC4zIDIuMiAuNCA0LjMgLjkgNi40IDkuNCA0NC4xIDQ1LjQgNjQuMiA4NSA1Ni45IDE2LTIuOSAzMC42LTguOSA0Mi45LTE5LjggMi0xLjggMy43LTQuMSA1LjktNi41LTE5LjMgNC42LTM1LjggLjEtNTAuOS0xMC42IC43LS4zIDEuMy0uMyAxLjktLjMgMjEuMyAxLjggNDAuNi0zLjQgNTctMTcuNCAxOS41LTE2LjYgMjYuNi00Mi45IDE3LjQtNjYtOC4zLTIwLjEtMjMuNi0zMi4zLTQzLjgtMzguOXpNOTkuOCAxNzkuM2MtNS4zLTkuMi0xMy4yLTE1LjYtMjIuMS0yMS4zIDEzLjctLjUgMjYuNiAuMiAzOS42IDMuNy03LTEyLjItOC41LTI0LjctNS0zOC43IDUuMyAxMS45IDEzLjcgMjAuMSAyMy42IDI2LjggMTkuNyAxMy4yIDM1LjcgMTkuNiA0Ni43IDMwLjIgMy40IDMuMyA2LjMgNy4xIDkuNiAxMC45LS44LTIuMS0xLjQtNC4xLTIuMi02LTUtMTAuNi0xMy0xOC42LTIyLjYtMjUtMS44LTEuMi0yLjgtMi41LTMuNC00LjUtMy4zLTEyLjUtMy0yNS4xLS43LTM3LjYgMS01LjUgMi44LTEwLjkgNC41LTE2LjMgLjgtMi40IDIuMy00LjYgNC02LjYgLjYgNi45IDAgMjUuNSAxOS42IDQ2IDEwLjggMTEuMyAyMi40IDIxLjkgMzMuOSAzMi43IDkgOC41IDE4LjMgMTYuNyAyNS41IDI2LjggMS4xIDEuNiAyLjIgMy4zIDMuOCA0LjctNS0xMy0xNC4yLTI0LjEtMjQuMi0zMy44LTkuNi05LjMtMTkuNC0xOC40LTI5LjItMjcuNC0zLjMtMy00LjYtNi43LTUuMS0xMC45LTEuMi0xMC40IDAtMjAuNiA0LjMtMzAuMiAuNS0xIDEuMS0yIDEuOS0zLjMgLjUgNC4yIC42IDcuOSAxLjQgMTEuNiA0LjggMjMuMSAyMC40IDM2LjMgNDkuMyA2My41IDEwIDkuNCAxOS4zIDE5LjIgMjUuNiAzMS42IDQuOCA5LjMgNy4zIDE5IDUuNyAyOS42LS4xIC42IC41IDEuNyAxLjEgMiA2LjIgMi42IDEwIDYuOSA5LjcgMTQuMyA3LjctMi42IDEyLjUtOCAxNi40LTE0LjUgNC4yIDIwLjItOS4xIDUwLjMtMjcuMiA1OC43IC40LTQuNSA1LTIzLjQtMTYuNS0yNy43LTYuOC0xLjMtMTIuOC0xLjMtMjIuOS0yLjEgNC43LTkgMTAuNC0yMC42IC41LTIyLjQtMjQuOS00LjYtNTIuOCAxLjktNTcuOCA0LjYgOC4yIC40IDE2LjMgMSAyMy41IDMuMy0yIDYuNS00IDEyLjctNS44IDE4LjktMS45IDYuNSAyLjEgMTQuNiA5LjMgOS42IDEuMi0uOSAyLjMtMS45IDMuMy0yLjctMy4xIDE3LjktMi45IDE1LjktMi44IDE4LjMgLjMgMTAuMiA5LjUgNy44IDE1LjcgNy4zLTIuNSAxMS44LTI5LjUgMjcuMy00NS40IDI1LjggNy00LjcgMTIuNy0xMC4zIDE1LjktMTcuOS02LjUgLjgtMTIuOSAxLjYtMTkuMiAyLjRsLS4zLS45YzQuNy0zLjQgOC03LjggMTAuMi0xMy4xIDguNy0yMS4xLTMuNi0zOC0yNS0zOS45LTkuMS0uOC0xNy44IC44LTI1LjkgNS41IDYuMi0xNS42IDE3LjItMjYuNiAzMi42LTM0LjUtMTUuMi00LjMtOC45LTIuNy0yNC42LTYuMyAxNC42LTkuMyAzMC4yLTEzLjIgNDYuNS0xNC42LTUuMi0zLjItNDguMS0zLjYtNzAuMiAyMC45IDcuOSAxLjQgMTUuNSAyLjggMjMuMiA0LjItMjMuOCA3LTQ0IDE5LjctNjIuNCAzNS42IDEuMS00LjggMi43LTkuNSAzLjMtMTQuMyAuNi00LjUgLjgtOS4yIC4xLTEzLjYtMS41LTkuNC04LjktMTUuMS0xOS43LTE2LjMtNy45LS45LTE1LjYgLjEtMjMuMyAxLjMtLjkgLjEtMS43IC4zLTIuOSAwIDE1LjgtMTQuOCAzNi0yMS43IDUzLjEtMzMuNSA2LTQuNSA2LjgtOC4yIDMtMTQuOXptMTI4LjQgMjYuOGMzLjMgMTYgMTIuNiAyNS41IDIzLjggMjQuMy00LjYtMTEuMy0xMi4xLTE5LjUtMjMuOC0yNC4zeiJdfSxRaGU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidnVlanMiLGljb246WzQ0OCw1MTIsW10sImY0MWYiLCJNMzU2LjkgNjQuM2wtNzYuOSAwLTU2IDg4LjYtNDgtODguNi0xNzYgMCAyMjQgMzgzLjcgMjI0LTM4My43LTkxLjEgMHpNNTUuNyA5Ni4zbDUzLjggMCAxMTQuNSAxOTguMiAxMTQuNC0xOTguMiA1My44IDAtMTY4LjIgMjg4LjItMTY4LjMtMjg4LjJ6Il19LEpoZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtZXRhIixpY29uOls2NDAsNTEyLFtdLCJlNDliIiwiTTY0MCAzMTcuOWMwIDkxLjMtMzkuNCAxNDguNS0xMTAuMyAxNDguNS02Mi42IDAtOTUuOC0zNC42LTE1Ni45LTEzNi42bC0zMS40LTUyLjZjLTguMy0xMi41LTE0LjUtMjQuMi0yMS4yLTM1LTIwLjEgMzMuOC00Ny4xIDgzLTQ3LjEgODMtNjcgMTE2LjYtMTA0LjYgMTQxLjItMTU2LjkgMTQxLjItNzIuOCAwLTExNi4yLTU3LjMtMTE2LjItMTQ1LjkgMC0xNDMgNzkuOC0yNzguMSAxODMuOS0yNzguMSA1MC4yIDAgOTMuOCAyNC43IDE0NC44IDg5LjUgMzcuMS01MC4xIDc4LjEtODkuNSAxMzAuNi04OS41IDk5LjEgMCAxODAuNyAxMjUuNyAxODAuNyAyNzUuNXpNMjg3LjQgMTkyLjJjLTQyLjktNjIuMS03MC45LTgwLjUtMTA0LjQtODAuNS02MS45IDAtMTEzLjggMTA2LjEtMTEzLjggMjEwIDAgNDguNSAxOC41IDc1LjcgNDkuNiA3NS43IDMwLjIgMCA0OS0xOSAxMDMuMi0xMDMuOCAwIDAgMjQuNy0zOS4xIDY1LjQtMTAxLjR6TTUzMS4yIDM5Ny40YzMyLjIgMCA0Ni45LTI3LjUgNDYuOS03NC45IDAtMTI0LjItNTQuMy0yMjUuNC0xMjMuMi0yMjUuNC0zMy4yIDAtNjEuMSAyNS45LTk0LjkgNzggOS40IDEzLjggMTkuMSAyOSAyOS4zIDQ1LjRsMzcuNSA2Mi40YzU4LjcgOTQuMSA3My41IDExNC41IDEwNC40IDExNC41eiJdfSxlOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1zaGFyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjRmMiIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwMSAxMzIuNGM3LjggMCAxMy43IDYuMSAxMy43IDEzLjdsMCAxODIuNWMwIDcuNy02LjEgMTMuNy0xMy43IDEzLjdsLTEzNS4xIDBjLTcuNyAwLTEzLjctNi0xMy43LTEzLjdsMC01NC01NCAwYy03LjggMC0xMy43LTYtMTMuNy0xMy43bDAtMTgyLjVjMC04LjIgNi42LTEyLjcgMTIuNC0xMy43bDEzNi40IDBjNy43IDAgMTMuNyA2IDEzLjcgMTMuN2wwIDU0IDU0IDB6TTE2Ny45IDMwMC4zbDQwLjcgMCAwLTEwMS40YzAtNy40IDUuOC0xMi42IDEyLTEzLjdsNTUuOCAwIDAtNDAuMy0xMDguNSAwIDAgMTU1LjR6bTE3Ni4yLTg4LjFsLTEwOC41IDAgMCAxNTUuNCAxMDguNSAwIDAtMTU1LjR6Il19LHQ5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdHVkaW92aW5hcmkiLGljb246WzUxMiw1MTIsW10sImYzZjgiLCJNNDgwLjcgMTg3LjdsNC4yIDI4IDAgMjgtMjUuMSA0NC4xLTM5LjggNzguNC01Ni4xIDY3LjUtNzkuMSAzNy44LTE3LjcgMjQuNS03LjcgMTItOS42IDRzMTcuMy02My42IDE5LjQtNjMuNiAyMC4zIC43IDIwLjMgLjdsNjYuNy0zOC42LTkyLjUgMjYuMS01NS45IDM2LjgtMjIuOCAyOC02LjYgMS40IDIwLjgtNzMuNiA2LjktNS41IDIwLjcgMTIuOSA4OC4zLTQ1LjIgNTYuOC01MS41IDE0LjgtNjguNC0xMjUuNCAyMy4zIDE1LjItMTguMi0xNzMuNC01My4zIDgxLjktMTAuNS0xNjYtMTIyLjkgMTE0LjkgMTguMS0xMDEuMy0xMDggMjUyLjkgMTI2LjYtMzEuNS0zOCAxMjQuNCA3NC40LTE0My4zLTk5IDE4LjcgMzguNC00OS42LTE4LjEtNDUuNS04NC4zIDE5NC42IDEyMi00Mi45LTU1LjggMTA4IDk2LjQgMTItOC45LTIxLTE2LjQgNC4yLTM3LjggMzcuOC0xMC40IDI5LjIgMjQuNyAxMS41IDQuMi03IDYuMiA4LjUgMTItMTMuMSA3LjQtMTAuMyAyMC4yIDEwLjUgMjMuOXoiXX0sYTllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJpdGJ1Y2tldCIsaWNvbjpbNTEyLDUxMixbNjE4MTBdLCJmMTcxIiwiTTIyLjIgMzJjLTIuMSAwLTQuMiAuNC02LjEgMS4xcy0zLjcgMS45LTUuMiAzLjQtMi43IDMuMi0zLjUgNS4xLTEuMyA0LTEuMyA2LjFjMCAuOSAuMSAxLjkgLjIgMi44TDc0LjEgNDYyLjdjLjggNS4xIDMuNCA5LjcgNy4zIDEzczguOCA1LjIgMTQgNS4ybDMyNS43IDBjMy44IC4xIDcuNS0xLjMgMTAuNS0zLjdzNC45LTUuOSA1LjUtOS43TDUwNSA1MC43Yy43LTQuMi0uMy04LjQtMi44LTExLjlzLTYuMi01LjctMTAuNC02LjRjLS45LS4xLTEuOS0uMi0yLjgtLjJMMjIuMiAzMnpNMzA4LjEgMzI5LjhsLTEwNCAwLTI4LjEtMTQ3IDE1Ny4zIDAtMjUuMiAxNDd6Il19LGk5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ2ayIsaWNvbjpbNDQ4LDUxMixbXSwiZjE4OSIsIk0zMS41IDYzLjVDMCA5NSAwIDE0NS43IDAgMjQ3TDAgMjY1QzAgMzY2LjMgMCA0MTcgMzEuNSA0NDguNVMxMTMuNyA0ODAgMjE1IDQ4MGwxNy45IDBjMTAxLjQgMCAxNTIuMSAwIDE4My41LTMxLjVTNDQ4IDM2Ni4zIDQ0OCAyNjVsMC0xNy45YzAtMTAxLjQgMC0xNTIuMS0zMS41LTE4My41UzMzNC4zIDMyIDIzMyAzMkwyMTUgMzJDMTEzLjcgMzIgNjMgMzIgMzEuNSA2My41ek03NS42IDE2OC4zbDUxLjEgMGMxLjcgODUuNSAzOS40IDEyMS43IDY5LjMgMTI5LjJsMC0xMjkuMiA0OC4yIDAgMCA3My43YzI5LjUtMy4yIDYwLjUtMzYuOCA3MC45LTczLjdsNDguMiAwYy0zLjkgMTkuMi0xMS44IDM3LjMtMjMuMSA1My4zcy0yNS43IDI5LjUtNDIuNSAzOS42YzE4LjcgOS4zIDM1LjIgMjIuNCA0OC40IDM4LjVzMjIuOSAzNC45IDI4LjMgNTVsLTUzIDBjLTQuOS0xNy41LTE0LjgtMzMuMS0yOC42LTQ1cy0zMC43LTE5LjQtNDguNy0yMS42bDAgNjYuNi01LjggMGMtMTAyLjEgMC0xNjAuMy03MC0xNjIuOC0xODYuNXoiXX0scjllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdGh1YiIsaWNvbjpbNTEyLDUxMixbXSwiZjA5YiIsIk0xNzMuOSAzOTcuNGMwIDItMi4zIDMuNi01LjIgMy42LTMuMyAuMy01LjYtMS4zLTUuNi0zLjYgMC0yIDIuMy0zLjYgNS4yLTMuNiAzLS4zIDUuNiAxLjMgNS42IDMuNnptLTMxLjEtNC41Yy0uNyAyIDEuMyA0LjMgNC4zIDQuOSAyLjYgMSA1LjYgMCA2LjItMnMtMS4zLTQuMy00LjMtNS4yYy0yLjYtLjctNS41IC4zLTYuMiAyLjN6bTQ0LjItMS43Yy0yLjkgLjctNC45IDIuNi00LjYgNC45IC4zIDIgMi45IDMuMyA1LjkgMi42IDIuOS0uNyA0LjktMi42IDQuNi00LjYtLjMtMS45LTMtMy4yLTUuOS0yLjl6TTI1Mi44IDhjLTEzOC43IDAtMjQ0LjggMTA1LjMtMjQ0LjggMjQ0IDAgMTEwLjkgNjkuOCAyMDUuOCAxNjkuNSAyMzkuMiAxMi44IDIuMyAxNy4zLTUuNiAxNy4zLTEyLjEgMC02LjItLjMtNDAuNC0uMy02MS40IDAgMC03MCAxNS04NC43LTI5LjggMCAwLTExLjQtMjkuMS0yNy44LTM2LjYgMCAwLTIyLjktMTUuNyAxLjYtMTUuNCAwIDAgMjQuOSAyIDM4LjYgMjUuOCAyMS45IDM4LjYgNTguNiAyNy41IDcyLjkgMjAuOSAyLjMtMTYgOC44LTI3LjEgMTYtMzMuNy01NS45LTYuMi0xMTIuMy0xNC4zLTExMi4zLTExMC41IDAtMjcuNSA3LjYtNDEuMyAyMy42LTU4LjktMi42LTYuNS0xMS4xLTMzLjMgMi42LTY3LjkgMjAuOS02LjUgNjkgMjcgNjkgMjcgMjAtNS42IDQxLjUtOC41IDYyLjgtOC41czQyLjggMi45IDYyLjggOC41YzAgMCA0OC4xLTMzLjYgNjktMjcgMTMuNyAzNC43IDUuMiA2MS40IDIuNiA2Ny45IDE2IDE3LjcgMjUuOCAzMS41IDI1LjggNTguOSAwIDk2LjUtNTguOSAxMDQuMi0xMTQuOCAxMTAuNSA5LjIgNy45IDE3IDIyLjkgMTcgNDYuNCAwIDMzLjctLjMgNzUuNC0uMyA4My42IDAgNi41IDQuNiAxNC40IDE3LjMgMTIuMSAxMDAtMzMuMiAxNjcuOC0xMjguMSAxNjcuOC0yMzkgMC0xMzguNy0xMTIuNS0yNDQtMjUxLjItMjQ0ek0xMDUuMiAzNTIuOWMtMS4zIDEtMSAzLjMgLjcgNS4yIDEuNiAxLjYgMy45IDIuMyA1LjIgMSAxLjMtMSAxLTMuMy0uNy01LjItMS42LTEuNi0zLjktMi4zLTUuMi0xem0tMTAuOC04LjFjLS43IDEuMyAuMyAyLjkgMi4zIDMuOSAxLjYgMSAzLjYgLjcgNC4zLS43IC43LTEuMy0uMy0yLjktMi4zLTMuOS0yLS42LTMuNi0uMy00LjMgLjd6bTMyLjQgMzUuNmMtMS42IDEuMy0xIDQuMyAxLjMgNi4yIDIuMyAyLjMgNS4yIDIuNiA2LjUgMSAxLjMtMS4zIC43LTQuMy0xLjMtNi4yLTIuMi0yLjMtNS4yLTIuNi02LjUtMXptLTExLjQtMTQuN2MtMS42IDEtMS42IDMuNiAwIDUuOXM0LjMgMy4zIDUuNiAyLjNjMS42LTEuMyAxLjYtMy45IDAtNi4yLTEuNC0yLjMtNC0zLjMtNS42LTJ6Il19LHM5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjb2RpZXBpZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI4NCIsIk00NDIuNSAyMDIuOWMzMC43IDAgMzMuNSA1My4xLS4zIDUzLjFsLTEwLjggMCAwIDQ0LjMtMjYuNiAwIDAtOTcuNCAzNy43IDB6TTQ5MiAzNTIuNkM0NDkuOSA0NDQuNSAzNzAuNCA1MDQgMjY4IDUwNCAxMzEgNTA0IDIwIDM5MyAyMCAyNTZTMTMxIDggMjY4IDhjOTcuNCAwIDE3Mi44IDUzLjcgMjE4LjIgMTM4LjRMMzAwLjIgMjU1LjIgNDkyIDM1Mi42em0tMzguNSAxMi41bC02MC4zLTMwLjdjLTI3LjEgNDQuMy03MC40IDcxLjQtMTIyLjQgNzEuNC04Mi41IDAtMTQ5LjItNjYuNy0xNDkuMi0xNDguOSAwLTgyLjUgNjYuNy0xNDkuMiAxNDkuMi0xNDkuMiA0OC40IDAgODguOSAyMy41IDExNi45IDYzLjRsNTkuNS0zNC42QzQwNi41IDczLjkgMzQyLjUgMzYuNSAyNjggMzYuNSAxNDYuOCAzNi41IDQ4LjUgMTM0LjggNDguNSAyNTZTMTQ2LjggNDc1LjUgMjY4IDQ3NS41Yzc4LjYgMCAxNDYuNS00Mi4xIDE4NS41LTExMC40eiJdfSxuOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGllZC1waXBlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjJhZSIsIk00NDAuMiAyMy4yYy0yNi43IDYuOC02OC4xIDI4LjUtMTE0LjYgNjcuNS0zMC45LTE3LjUtNjUuOC0yNi43LTEwMS40LTI2LjctMTE0LjkgMC0yMDggOTMuMS0yMDggMjA4czkzLjEgMjA4IDIwOCAyMDggMjA4LTkzLjEgMjA4LTIwOGMuMS01NC4xLTIxLTEwNi4xLTU4LjctMTQ0LjgtNi42IDguNS0xMi4zIDE3LjctMTcgMjcuNCAyOC45IDMyLjMgNDQuOCA3NC4xIDQ0LjkgMTE3LjQgMCA5Ny43LTc5LjQgMTc3LjEtMTc3LjEgMTc3LjEtMzAuOCAwLTYxLTguMS04Ny42LTIzLjQgODIuOS0xMDcuMyAxNTAuOC0zNy44IDE4NC4zLTIyNi42IDUuOC0zMi42IDI4LTk0LjMgMTI2LjItMTYwLjIgOC4xLTUuNCAyLjQtMTguMS03LTE1Ljd6TTEwOS4zIDQwNi40Qzg5LjggMzg5LjggNzQuMiAzNjkuMiA2My41IDM0NnMtMTYuMy00OC41LTE2LjMtNzRjMC05Ny43IDc5LjQtMTc3LjEgMTc3LjEtMTc3LjEgMjYuNiAwIDUyLjggNi4xIDc2LjYgMTcuOC02NiA2Mi4xLTEyNi45IDE1Mi45LTE5MS42IDI5My44eiJdfSxvOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmFzcGJlcnJ5LXBpIixpY29uOls0NDgsNTEyLFtdLCJmN2JiIiwiTTM5Mi41IDIzMi41bC0zLjctNi41Yy4xLTQ2LjQtMjEuNC02NS4zLTQ2LjUtNzkuNyA3LjYtMiAxNS40LTMuNiAxNy42LTEzLjIgMTMuMS0zLjMgMTUuOC05LjQgMTcuMS0xNS44IDMuNC0yLjMgMTQuOC04LjcgMTMuNi0xOS43IDYuNC00LjQgMTAtMTAuMSA4LjEtMTguMSA2LjktNy41IDguNy0xMy43IDUuOC0xOS40IDguMy0xMC4zIDQuNi0xNS42IDEuMS0yMC45IDYuMi0xMS4yIC43LTIzLjItMTYuNi0yMS4yLTYuOS0xMC4xLTIxLjktNy44LTI0LjItNy44LTIuNi0zLjItNi02LTE2LjUtNC43LTYuOC02LjEtMTQuNC01LTIyLjMtMi4xLTkuMy03LjMtMTUuNS0xLjQtMjIuNiAuOC0xMS4zLTMuNi0xMy45IDEuMy0xOS40IDMuNC0xMi4zLTIuNi0xNi4xIDMtMjIgOC45bC02LjktLjFjLTE4LjYgMTAuOC0yNy44IDMyLjgtMzEuMSA0NC4xLTMuMy0xMS4zLTEyLjUtMzMuMy0zMS4xLTQ0LjFsLTYuOSAuMWMtNS45LTUuOS05LjctMTEuNS0yMi04LjktNS42LTItOC4xLTctMTkuNC0zLjQtNC42LTEuNC04LjktNC40LTEzLjktNC4zLTIuNiAuMS01LjUgMS04LjcgMy41LTcuOS0zLTE1LjUtNC0yMi4zIDIuMS0xMC41LTEuMy0xNCAxLjQtMTYuNSA0LjctMi4zIDAtMTcuMy0yLjMtMjQuMiA3LjgtMTcuMy0yLTIyLjcgMTAtMTYuNSAyMS4yLTMuNSA1LjQtNy4yIDEwLjcgMS4xIDIwLjktMi45IDUuNy0xLjEgMTEuOSA1LjggMTkuNC0xLjggOCAxLjggMTMuNyA4LjEgMTguMS0xLjIgMTEgMTAuMiAxNy40IDEzLjYgMTkuNyAxLjMgNi40IDQgMTIuNCAxNy4xIDE1LjggMi4yIDkuNSAxMCAxMS4yIDE3LjYgMTMuMi0yNS4xIDE0LjQtNDYuNiAzMy4zLTQ2LjUgNzkuN2wtMy43IDYuNWMtMjguOCAxNy4yLTU0LjcgNzIuNy0xNC4yIDExNy43IDIuNiAxNC4xIDcuMSAyNC4yIDExIDM1LjQgNS45IDQ1LjIgNDQuNSA2Ni4zIDU0LjYgNjguOCAxNC45IDExLjIgMzAuOCAyMS44IDUyLjIgMjkuMiAyMC4zIDIwLjYgNDIuMyAyOC40IDY0LjMgMjguNGwxIDBjMjIuMSAwIDQ0LTcuOCA2NC4yLTI4LjQgMjEuNS03LjQgMzcuMy0xOCA1Mi4yLTI5LjIgMTAuMi0yLjUgNDguNy0yMy42IDU0LjYtNjguOCAzLjktMTEuMiA4LjQtMjEuMyAxMS0zNS40IDQwLjYtNDUuMSAxNC43LTEwMC41LTE0LTExNy43em0tMjIuMi04Yy0xLjUgMTguNy05OC45LTY1LjEtODIuMS02Ny45IDQ1LjctNy41IDgzLjYgMTkuMiA4Mi4xIDY3Ljl6bS00MyA5My4xYy0yNC41IDE1LjgtNTkuOCA1LjYtNzguOC0yMi44cy0xNC42LTY0LjIgOS45LTgwIDU5LjgtNS42IDc4LjggMjIuOCAxNC42IDY0LjItOS45IDgwek0yNTkuNCAyOS4zYy44IDQuMiAxLjggNi44IDIuOSA3LjYgNS40LTUuOCA5LjgtMTEuNyAxNi44LTE3LjMgMCAzLjMtMS43IDYuOCAyLjUgOS40IDMuNy01IDguOC05LjUgMTUuNS0xMy4zLTMuMiA1LjYtLjYgNy4zIDEuMiA5LjYgNS4xLTQuNCAxMC04LjggMTkuNC0xMi4zLTIuNiAzLjEtNi4yIDYuMi0yLjQgOS44IDUuMy0zLjMgMTAuNi02LjYgMjMuMS04LjktMi44IDMuMS04LjcgNi4zLTUuMSA5LjQgNi42LTIuNSAxNC00LjQgMjIuMS01LjQtMy45IDMuMi03LjEgNi4zLTMuOSA4LjggNy4xLTIuMiAxNi45LTUuMSAyNi40LTIuNmwtNiA2LjFjLS43IC44IDE0LjEgLjYgMjMuOSAuOC0zLjYgNS03LjIgOS43LTkuMyAxOC4yIDEgMSA1LjggLjQgMTAuNCAwLTQuNyA5LjktMTIuOCAxMi4zLTE0LjcgMTYuNiAyLjkgMi4yIDYuOCAxLjYgMTEuMiAuMS0zLjQgNi45LTEwLjQgMTEuNy0xNiAxNy4zIDEuNCAxIDMuOSAxLjYgOS43IC45LTUuMiA1LjUtMTEuNCAxMC41LTE4LjggMTUgMS4zIDEuNSA1LjggMS41IDEwIDEuNi02LjcgNi41LTE1LjMgOS45LTIzLjQgMTQuMiA0IDIuNyA2LjkgMi4xIDEwIDIuMS01LjcgNC43LTE1LjQgNy4xLTI0LjQgMTAgMS43IDIuNyAzLjQgMy40IDcuMSA0LjEtOS41IDUuMy0yMy4yIDIuOS0yNyA1LjYgLjkgMi43IDMuNiA0LjQgNi43IDUuOC0xNS40IC45LTU3LjMtLjYtNjUuNC0zMi4zIDE1LjctMTcuMyA0NC40LTM3LjUgOTMuNy02Mi42LTM4LjQgMTIuOC03MyAzMC0xMDIgNTMuNS0zNC4zLTE1LjktMTAuOC01NS45IDUuOC03MS44ek0yMjUgMTQzLjljMjQuMi0uMyA1NC4xIDE3LjggNTQgMzQuNy0uMSAxNS0yMSAyNy4xLTUzLjggMjYuOS0zMi4xLS40LTUzLjctMTUuMi01My42LTI5LjggMC0xMS45IDI2LjItMzIuNSA1My40LTMxLjh6TTEwMiAxMzEuMWMzLjctLjcgNS40LTEuNSA3LjEtNC4xLTktMi44LTE4LjctNS4zLTI0LjQtMTAgMy4xIDAgNiAuNyAxMC0yLjEtOC4xLTQuMy0xNi43LTcuNy0yMy40LTE0LjIgNC4yLS4xIDguNyAwIDEwLTEuNi03LjQtNC41LTEzLjYtOS41LTE4LjgtMTUgNS44IC43IDguMyAuMSA5LjctLjktNS42LTUuNi0xMi43LTEwLjQtMTYtMTcuMyA0LjMgMS41IDguMyAyIDExLjItLjEtMS45LTQuMi0xMC02LjctMTQuNy0xNi42IDQuNiAuNCA5LjQgMSAxMC40IDAtMi4xLTguNS01LjgtMTMuMy05LjMtMTguMiA5LjgtLjEgMjQuNiAwIDIzLjktLjhsLTYtNi4xYzkuNS0yLjUgMTkuMyAuNCAyNi40IDIuNiAzLjItMi41LS4xLTUuNi0zLjktOC44IDguMSAxLjEgMTUuNCAyLjkgMjIuMSA1LjQgMy41LTMuMS0yLjMtNi4zLTUuMS05LjQgMTIuNSAyLjMgMTcuOCA1LjYgMjMuMSA4LjkgMy44LTMuNiAuMi02LjctMi40LTkuOCA5LjQgMy40IDE0LjMgNy45IDE5LjQgMTIuMyAxLjctMi4zIDQuNC00IDEuMi05LjYgNi43IDMuOCAxMS44IDguMyAxNS41IDEzLjMgNC4xLTIuNiAyLjUtNi4yIDIuNS05LjQgNyA1LjYgMTEuNCAxMS41IDE2LjggMTcuMyAxLjEtLjggMi0zLjQgMi45LTcuNiAxNi42IDE1LjkgNDAuMSA1NS45IDYgNzEuOC0yOS0yMy41LTYzLjYtNDAuNy0xMDItNTMuNSA0OS4zIDI1IDc4IDQ1LjMgOTMuNyA2Mi42LTggMzEuOC01MCAzMy4yLTY1LjQgMzIuMyAzLjEtMS40IDUuOC0zLjIgNi43LTUuOC00LTIuOC0xNy42LS40LTI3LjItNS42em02MC4xIDI0LjFjMTYuOCAyLjgtODAuNiA4Ni41LTgyLjEgNjcuOS0xLjUtNDguNyAzNi41LTc1LjUgODIuMS02Ny45ek01OC43IDM0MmMtMjMuNy0xOC44LTMxLjMtNzMuNyAxMi42LTk4LjMgMjYuNS03IDkgMTA3LjgtMTIuNiA5OC4zem05MSA5OC4yYy0xMy4zIDcuOS00NS44IDQuNy02OC44LTI3LjktMTUuNS0yNy40LTEzLjUtNTUuMi0yLjYtNjMuNCAxNi4zLTkuOCA0MS41IDMuNCA2MC45IDI1LjYgMTYuOSAyMCAyNC42IDU1LjMgMTAuNSA2NS43ek0xMjMuMyAzMjAuNWMtMjQuNS0xNS44LTI4LjktNTEuNi05LjktODBzNTQuMy0zOC42IDc4LjgtMjIuOCAyOC45IDUxLjYgOS45IDgwYy0xOS4xIDI4LjQtNTQuNCAzOC42LTc4LjggMjIuOHpNMjI1LjUgNDk2Yy0yOS40IDEuMi01OC4yLTIzLjctNTcuOC0zMi4zLS40LTEyLjcgMzUuOC0yMi42IDU5LjMtMjIgMjMuNy0xIDU1LjYgNy41IDU1LjcgMTguOSAuNSAxMS0yOC44IDM1LjktNTcuMiAzNS40em01OC45LTEyNC45Yy4yIDI5LjctMjYuMiA1My44LTU4LjggNTRzLTU5LjItMjMuOC01OS40LTUzLjRsMC0uNmMtLjItMjkuNyAyNi4yLTUzLjggNTguOC01NHM1OS4yIDIzLjggNTkuNCA1My40bDAgLjZ6bTgyLjIgNDIuN2MtMjUuMyAzNC42LTU5LjYgMzUuOS03Mi4zIDI2LjMtMTMuMy0xMi40LTMuMi01MC45IDE1LjEtNzIgMjAuOS0yMy4zIDQzLjMtMzguNSA1OC45LTI2LjYgMTAuNSAxMC4zIDE2LjcgNDkuMS0xLjcgNzIuM3ptMjIuOS03My4yYy0yMS41IDkuNC0zOS0xMDUuMy0xMi42LTk4LjMgNDMuOSAyNC43IDM2LjMgNzkuNiAxMi42IDk4LjN6Il19LGw5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjc3MzIixpY29uOls1MTIsNTEyLFtdLCJmMTNjIiwiTTQ4MCAzMmwtNjQgMzY4LTIyMy4zIDgwLTE5Mi43LTgwIDE5LjYtOTQuOCA4MiAwLTggNDAuNiAxMTYuNCA0NC40IDEzNC4xLTQ0LjQgMTguOC05Ny4xLTMzMy40IDAgMTYtODIgMzMzLjcgMCAxMC41LTUyLjctMzMzLjQgMCAxNi4zLTgyIDQwNy40IDB6Il19LGM5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJodWJzcG90IixpY29uOls0NDgsNTEyLFtdLCJmM2IyIiwiTTIzNS44IDIxMS42Yy0yNS4xIDIzLjctNDAuOCA1Ny4zLTQwLjggOTQuNiAwIDI5LjMgOS43IDU2LjMgMjYgNzhMMTcxLjUgNDM0Yy00LjQtMS42LTkuMS0yLjUtMTQtMi41LTEwLjggMC0yMC45IDQuMi0yOC41IDExLjhzLTExLjggMTcuOC0xMS44IDI4LjYgNC4yIDIwLjkgMTEuOCAyOC41IDE3LjggMTEuNiAyOC41IDExLjZjMTAuOCAwIDIwLjktMy45IDI4LjYtMTEuNiA3LjYtNy42IDExLjgtMTcuOCAxMS44LTI4LjUgMC00LjItLjYtOC4yLTEuOS0xMi4xbDUwLTUwLjJjMjIgMTYuOSA0OS40IDI2LjkgNzkuMyAyNi45IDcxLjkgMCAxMzAtNTguMyAxMzAtMTMwLjIgMC02NS4yLTQ3LjctMTE5LjItMTEwLjItMTI4LjdsMC02MS42YzE3LjUtNy40IDI4LjItMjMuOCAyOC4yLTQyLjkgMC0yNi4xLTIwLjktNDcuOS00Ny00Ny45UzI3OS42IDQ3IDI3OS42IDczLjFjMCAxOS4xIDEwLjcgMzUuNSAyOC4yIDQyLjlsMCA2MS4yYy0xNS4yIDIuMS0yOS42IDYuNy00Mi43IDEzLjYtMjcuNi0yMC45LTExNy41LTg1LjctMTY4LjktMTI0LjggMS4yLTQuNCAyLTkgMi0xMy44IDAtMjguOC0yMy41LTUyLjItNTIuNC01Mi4yLTI4LjggMC01Mi4yIDIzLjQtNTIuMiA1Mi4yIDAgMjguOSAyMy40IDUyLjMgNTIuMiA1Mi4zIDkuOCAwIDE4LjktMi45IDI2LjgtNy42TDIzNS44IDIxMS42em04OS41IDI1LjZhNjkgNjkgMCAxIDEgMCAxMzggNjkgNjkgMCAxIDEgMC0xMzh6Il19LGQ5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjbXBsaWQiLGljb246WzY0MCw1MTIsW10sImUzNjAiLCJNMjI2LjEgMzg4LjJjMC0uNy0uMi0xLjUtLjYtMi4xcy0xLTEuMS0xLjctMS40Yy0uNS0uMi0xLjEtLjQtMS42LS40bC0xNDkuNiAwYy0zLjEgMC02LjItLjgtOC45LTIuMnMtNS4xLTMuNS02LjktNi4xLTIuOS01LjUtMy4zLTguNiAwLTYuMiAxLjEtOS4xTDgxLjYgMjU1LjdjMi03LjIgNi4yLTEzLjUgMTItMTguMnMxMi45LTcuNCAyMC40LTcuOGwxNDguNiAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjQtMSAuMy0yLS4xLTIuOXMtMS4yLTEuNi0yLjEtMmMtLjQtLjItLjktLjMtMS40LS4zLS4xIDAtLjEgMC0uMiAwbC0xNDguNSAwYy0yMi4yIDEuMi00My40IDkuMi02MC44IDIzcy0zMCAzMi43LTM2LjIgNTQuMUwzLjUgMzU4LjhjLTMuMiA4LjctNC4yIDE4LTMgMjcuMXM0LjYgMTcuOSA5LjkgMjUuNSAxMi4zIDEzLjggMjAuNSAxOCAxNy4zIDYuNSAyNi41IDYuNmMxIDAgMS45IDAgMi45LS4xbDE0OC42IDBjMS41LS4xIDIuOS0uNyA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjctNDEuMWMuMi0uNSAuMy0uOSAuMy0xLjR6bTgwLjUtMzA3Yy4yLS40IC4zLS45IC4zLTEuNCAwLS41LS4xLTEtLjMtMS41cy0uNS0uOS0uOC0xLjItLjgtLjYtMS4yLS44LTEtLjMtMS41LS4zbC00MS4yIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTIxLjMgODAuOSA1MS4xIDAgMjEuNC04MC45em0tMTI2LjMgMjg3bDUxLjEgMCAzMi0xMjIuNi01MS4xIDAtMzIgMTIyLjZ6TTUxMS45IDc5LjdjMC0xLS41LTEuOS0xLjItMi42cy0xLjctMS4xLTIuNi0xLjFjLS4xIDAtLjEgMC0uMiAwbC00MSAwYy0xLjUgLjEtMi45IC42LTQuMSAxLjVzLTIgMi4yLTIuNSAzLjZMMzY4LjkgNDMwLjZjLS4yIC40LS4zIC45LS4zIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4yIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDUxMS41IDgxLjJjLjItLjUgLjMtMSAuMy0xLjV6TTMyNC42IDM4NC41bC00MSAwYy0xLjUgLjEtMi45IC43LTQgMS42cy0yIDIuMi0yLjQgMy42bC0xMC43IDQxLjFjLS4yIC40LS4zIC45LS4zIDEuNCAwIC41IC4xIDEgLjMgMS41cy41IC45IC44IDEuMiAuOCAuNiAxLjIgLjggMSAuMyAxLjUgLjNjLjEgMCAuMiAwIC4zIDBsNDAuOSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjItLjYgLjMtMS4yIC4zLTEuOHMtLjMtMS4yLS42LTEuNy0uOC0uOS0xLjMtMS4yLTEuMi0uNC0xLjgtLjRjLS4xIDAtLjIgMC0uMyAwbDAgMHpNNjM2IDc2LjFsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjVzLTIgMi4yLTIuNCAzLjZMNDk3LjEgNDMwLjZjLS4yIC40LS4yIC45LS4yIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4xIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDYzOS43IDgxLjJjLjItLjUgLjMtMSAuMy0xLjUtLjEtMS0uNS0xLjktMS4yLTIuNXMtMS42LTEtMi42LTFjLS4xIDAtLjEgMC0uMiAwbDAtLjF6TTM3MS42IDIyNS4ybDEwLjgtNDEuMWMuMi0uNCAuMi0uOSAuMi0xLjQgMC0xLS40LTItMS4xLTIuN3MtMS43LTEuMS0yLjctMS4xbC00MS4zIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjggNDEuMWMtLjIgLjUtLjMgMS0uMyAxLjVsMCAuMmMuMSAxIC41IDEuOCAxLjIgMi41czEuNiAxIDIuNiAxYy4xIDAgLjIgMCAuMyAwbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZ6Il19LHA5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkeWFsb2ciLGljb246WzQ0OCw1MTIsW10sImYzOTkiLCJNMTYgMzJsMCAxMTkuMiA2NCAwIDAtNTUuMiAxMDcuMiAwQzMwMC42IDk2IDM2OCAxNzYuMiAzNjggMjU1LjkgMzY4IDMzMiAzMDkuNCA0MTYgMTg3LjIgNDE2bC0xNzEuMiAwIDAgNjQgMTcxLjIgMEMzNDcuOSA0ODAgNDMyIDM2Ny4zIDQzMiAyNTUuOSA0MzIgMTk3LjIgNDA5LjkgMTQyLjUgMzY5LjcgMTAxLjYgMzI0LjkgNTYgMjYxLjcgMzIgMTg3LjIgMzJMMTYgMzJ6Il19LGg5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJlbGVtZW50b3IiLGljb246WzUxMiw1MTIsW10sImY0MzAiLCJNLjUgMjU2YzAgMTQxIDExMy42IDI1NSAyNTQuNiAyNTUgMTQyIDAgMjU2LTExNCAyNTYtMjU1IDAtMTQwLTExNC0yNTMuOS0yNTYtMjUzLjktMTQxIDAtMjU0LjYgMTEzLjktMjU0LjYgMjUzLjl6TTE5Mi4xIDE1MGwwIDIxMy00MyAwIDAtMjEzIDQzIDB6bTQyIDBsMTI4IDAgMCA0My0xMjggMCAwLTQzem0xMjggODVsMCA0My0xMjggMCAwLTQzIDEyOCAwem0tMTI4IDg1bDEyOCAwIDAgNDMtMTI4IDAgMC00M3oiXX0sdTllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpcnN0LW9yZGVyIixpY29uOls0NDgsNTEyLFtdLCJmMmIwIiwiTTEzLjMgMjI5LjJjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMjQuNCA5Ni42Yy03LjEgMC0xNC42IC42LTIxLjQgMS43bDMuNyA2Ny40LTIyLTY0Yy0xNC4zIDMuNy0yNy43IDkuNC00MCAxNi42bDI5LjQgNjEuNC00NS4xLTUwLjljLTExLjQgOC45LTIxLjcgMTkuMS0zMC42IDMwLjlsNTAuNiA0NS40LTYxLjEtMjkuN2MtNy4xIDEyLjMtMTIuOSAyNS43LTE2LjYgNDBsNjQuMyAyMi42LTY4LTRjLS45IDcuMS0xLjQgMTQuNi0xLjQgMjJzLjYgMTQuNiAxLjQgMjEuN2w2Ny43LTQtNjQgMjIuNmMzLjcgMTQuMyA5LjQgMjcuNyAxNi42IDQwLjNMMTQ5IDMwNi45IDk4LjEgMzUyYzguOSAxMS43IDE5LjEgMjIuMyAzMC45IDMwLjlsNDQuOS01MC45LTI5LjUgNjEuNGMxMi4zIDcuNCAyNS43IDEzLjEgNDAgMTYuOWwyMi4zLTY0LjYtNCA2OGM3LjEgMS4xIDE0LjYgMS43IDIxLjcgMS43IDcuNCAwIDE0LjYtLjYgMjEuNy0xLjdsLTQtNjguNiAyMi42IDY1LjFjMTQuMy00IDI3LjctOS40IDQwLTE2LjlsLTI5LjQtNjEuMyA0NC45IDUwLjljMTEuNy04LjkgMjItMTkuMSAzMC42LTMwLjlsLTUwLjYtNDUuMSA2MS4xIDI5LjRjNy4xLTEyLjMgMTIuOS0yNS43IDE2LjYtNDAuM2wtNjQtMjIuMyA2Ny40IDRjMS4xLTcuMSAxLjQtMTQuMyAxLjQtMjEuN3MtLjMtMTQuOS0xLjQtMjJsLTY3LjcgNCA2NC0yMi4zYy0zLjctMTQuMy05LjEtMjgtMTYuNi00MC4zbC02MC45IDI5LjcgNTAuNi00NS40Yy04LjktMTEuNy0xOS4xLTIyLTMwLjYtMzAuOWwtNDUuMSA1MC45IDI5LjQtNjEuMWMtMTIuMy03LjQtMjUuNy0xMy4xLTQwLTE2LjlsLTIyLjMgNjQuMyA0LTY3LjdjLTcuMS0xLjItMTQuMy0xLjctMjEuNy0xLjd6TTQ0My44IDEyOEw0NDMuOCAzODQgMjI0LjQgNTEyIDUgMzg0IDUgMTI4IDIyNC40IDAgNDQzLjggMTI4em0tMTcuMSAxMC4zbC0yMDIuMy0xMTcuNC0yMDIuMyAxMTcuNCAwIDIzNS4xIDIwMi4zIDExNy43IDIwMi4zLTExNy43IDAtMjM1LjF6TTIyNC40IDM3LjFsMTg3LjcgMTA5LjQgMCAyMTguOS0xODcuNyAxMDkuNS0xODcuNy0xMDkuNSAwLTIxOC44IDE4Ny43LTEwOS41em0wIDUwLjljLTkyLjMgMC0xNjYuOSA3NS4xLTE2Ni45IDE2OCAwIDkyLjYgNzQuNiAxNjcuNyAxNjYuOSAxNjcuNyA5MiAwIDE2Ni45LTc1LjEgMTY2LjktMTY3LjcgMC05Mi45LTc0LjktMTY4LTE2Ni45LTE2OHoiXX0sZjllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRyaWJiYmxlIixpY29uOls1MTIsNTEyLFtdLCJmMTdkIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDIwIDEyMi40YzI5LjUgMzYgNDcuNCA4MiA0Ny44IDEzMi03LTEuNS03Ny0xNS43LTE0Ny41LTYuOC01LjgtMTQtMTEuMi0yNi40LTE4LjYtNDEuNiA3OC4zLTMyIDExMy44LTc3LjUgMTE4LjMtODMuNXpNMzk2LjQgOTcuOWMtMy44IDUuNC0zNS43IDQ4LjMtMTExIDc2LjUtMzQuNy02My44LTczLjItMTE2LjItNzktMTI0IDY3LjItMTYuMiAxMzggMS4zIDE5MC4xIDQ3LjV6TTE2NS45IDY0LjZjNS42IDcuNyA0My40IDYwLjEgNzguNSAxMjIuNS05OS4xIDI2LjMtMTg2LjQgMjUuOS0xOTUuOCAyNS44IDEzLjctNjUuNyA1OC0xMjAuNCAxMTcuMy0xNDguM3pNNDQuMiAyNTYuM2MwLTIuMiAwLTQuMyAuMS02LjUgOS4zIC4yIDExMS45IDEuNSAyMTcuNy0zMC4xIDYuMSAxMS45IDExLjkgMjMuOSAxNy4yIDM1LjktNzYuNiAyMS42LTE0Ni4yIDgzLjUtMTgwLjUgMTQyLjMtMzMuOC0zNy42LTU0LjUtODcuMi01NC41LTE0MS42ek0xMjYgNDIzLjRjMjIuMS00NS4yIDgyLjItMTAzLjYgMTY3LjYtMTMyLjggMjkuNyA3Ny4zIDQyIDE0Mi4xIDQ1LjIgMTYwLjYtNjguMSAyOS0xNTAgMjEuMS0yMTIuOC0yNy45em0yNDguNCA4LjVjLTIuMi0xMi45LTEzLjQtNzQuOS00MS4yLTE1MSA2Ni40LTEwLjYgMTI0LjcgNi44IDEzMS45IDkuMS05LjQgNTguOS00My4zIDEwOS44LTkwLjggMTQyeiJdfSxPZj17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW5rZWRpbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjA4YyIsIk00MTYgMzJMMzEuOSAzMkMxNC4zIDMyIDAgNDYuNSAwIDY0LjNMMCA0NDcuN0MwIDQ2NS41IDE0LjMgNDgwIDMxLjkgNDgwTDQxNiA0ODBjMTcuNiAwIDMyLTE0LjUgMzItMzIuM2wwLTM4My40QzQ0OCA0Ni41IDQzMy42IDMyIDQxNiAzMnpNMTM1LjQgNDE2bC02Ni40IDAgMC0yMTMuOCA2Ni41IDAgMCAyMTMuOC0uMSAwek0xMDIuMiA5NmEzOC41IDM4LjUgMCAxIDEgMCA3NyAzOC41IDM4LjUgMCAxIDEgMC03N3pNMzg0LjMgNDE2bC02Ni40IDAgMC0xMDRjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOWwwIDEwNS44LTY2LjQgMCAwLTIxMy44IDYzLjcgMCAwIDI5LjIgLjkgMGM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOWwwIDExNy4yeiJdfSxtOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2MtcGF5cGFsIixpY29uOls1NzYsNTEyLFtdLCJmMWY0IiwiTTE4Ni4zIDI1OC4yYzAgMTIuMi05LjcgMjEuNS0yMiAyMS41LTkuMiAwLTE2LTUuMi0xNi0xNSAwLTEyLjIgOS41LTIyIDIxLjctMjIgOS4zIDAgMTYuMyA1LjcgMTYuMyAxNS41ek04MC41IDIwOS43bC00LjcgMGMtMS41IDAtMyAxLTMuMiAyLjdsLTQuMyAyNi43IDguMi0uM2MxMSAwIDE5LjUtMS41IDIxLjUtMTQuMiAyLjMtMTMuNC02LjItMTQuOS0xNy41LTE0Ljl6bTI4NCAwbC00LjUgMGMtMS44IDAtMyAxLTMuMiAyLjdsLTQuMiAyNi43IDgtLjNjMTMgMCAyMi0zIDIyLTE4LS4xLTEwLjYtOS42LTExLjEtMTguMS0xMS4xek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjguMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGwtNDAgMGMtMi41IDAtNSAyLTUuMiA0LjdMMzIgMjk0LjJjLS4zIDIgMS4yIDQgMy4yIDRsMTkgMGMyLjcgMCA1LjItMi45IDUuNS01LjdsNC41LTI2LjZjMS03LjIgMTMuMi00LjcgMTgtNC43IDI4LjYgMCA0Ni4xLTE3IDQ2LjEtNDUuOHptODQuMiA4LjhsLTE5IDBjLTMuOCAwLTQgNS41LTQuMiA4LjItNS44LTguNS0xNC4yLTEwLTIzLjctMTAtMjQuNSAwLTQzLjIgMjEuNS00My4yIDQ1LjIgMCAxOS41IDEyLjIgMzIuMiAzMS43IDMyLjIgOSAwIDIwLjItNC45IDI2LjUtMTEuOS0uNSAxLjUtMSA0LjctMSA2LjIgMCAyLjMgMSA0IDMuMiA0bDE3LjIgMGMyLjcgMCA1LTIuOSA1LjUtNS43bDEwLjItNjQuM2MuMy0xLjktMS4yLTMuOS0zLjItMy45ek0yNTMgMzIyLjFsNjMuNy05Mi42Yy41LS41IC41LTEgLjUtMS43IDAtMS43LTEuNS0zLjUtMy4yLTMuNWwtMTkuMiAwYy0xLjcgMC0zLjUgMS00LjUgMi41bC0yNi41IDM5LTExLTM3LjVjLS44LTIuMi0zLTQtNS41LTRsLTE4LjcgMGMtMS43IDAtMy4yIDEuOC0zLjIgMy41IDAgMS4yIDE5LjUgNTYuOCAyMS4yIDYyLjEtMi43IDMuOC0yMC41IDI4LjYtMjAuNSAzMS42IDAgMS44IDEuNSAzLjIgMy4yIDMuMmwxOS4yIDBjMS44LS4xIDMuNS0xLjEgNC41LTIuNnpNNDEyLjMgMjE1LjRjMC0yMS0xNi4yLTI4LTM0LjctMjhsLTM5LjcgMGMtMi43IDAtNS4yIDItNS41IDQuN2wtMTYuMiAxMDJjLS4yIDIgMS4zIDQgMy4yIDRsMjAuNSAwYzIgMCAzLjUtMS41IDQtMy4ybDQuNS0yOWMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNCAwIDQ1LjktMTcgNDUuOS00NS44em04NC4yIDguOGwtMTkgMGMtMy44IDAtNCA1LjUtNC4zIDguMi01LjUtOC41LTE0LTEwLTIzLjctMTAtMjQuNSAwLTQzLjIgMjEuNS00My4yIDQ1LjIgMCAxOS41IDEyLjIgMzIuMiAzMS43IDMyLjIgOS4zIDAgMjAuNS00LjkgMjYuNS0xMS45LS4zIDEuNS0xIDQuNy0xIDYuMiAwIDIuMyAxIDQgMy4yIDRsMTcuMyAwYzIuNyAwIDUtMi45IDUuNS01LjdsMTAuMi02NC4zYy4zLTEuOS0xLjItMy45LTMuMi0zLjl6TTU0NCAxOTAuOWMwLTItMS41LTMuNS0zLjItMy41bC0xOC41IDBjLTEuNSAwLTMgMS4yLTMuMiAyLjdsLTE2LjIgMTA0LS4zIC41YzAgMS44IDEuNSAzLjUgMy41IDMuNWwxNi41IDBjMi41IDAgNS0yLjkgNS4yLTUuN2wxNi4yLTEwMS4yIDAtLjN6bS05MCA1MS44Yy0xMi4yIDAtMjEuNyA5LjctMjEuNyAyMiAwIDkuNyA3IDE1IDE2LjIgMTUgMTIgMCAyMS43LTkuMiAyMS43LTIxLjUgLjEtOS44LTYuOS0xNS41LTE2LjItMTUuNXoiXX0sZzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRobCIsaWNvbjpbNjQwLDUxMixbXSwiZjc5MCIsIk0yMzggMzAxLjJsNTguNyAwIDIyLjMtMzAuMi01OC43IDAtMjIuMyAzMC4yek0wIDI4Mi45bDAgNi40IDgxLjggMCA0LjctNi40LTg2LjUgMHpNMTcyLjkgMjcxYy04LjcgMC02LTMuNi00LjYtNS41IDIuOC0zLjggNy42LTEwLjQgMTAuNC0xNC4xczIuOC01LjktMi44LTUuOWwtNTEgMC00MS4xIDU1LjggMTAwLjEgMGMzMy4xIDAgNTEuNS0yMi41IDU3LjItMzAuM2wtNjguMiAwem0zMTcuNS02LjlsMzkuMy01My40LTYyLjIgMC0zOS4zIDUzLjQgNjIuMiAwek05NS4zIDI3MWwtOTUuMyAwIDAgNi40IDkwLjYgMCA0LjctNi40em0xMTEtMjYuNmMtMi44IDMuOC03LjUgMTAuNC0xMC4zIDE0LjItMS40IDItNC4xIDUuNSA0LjYgNS41bDQ1LjYgMHM3LjMtMTAgMTMuNS0xOC40YzguNC0xMS40IC43LTM1LTI5LjItMzVsLTExNy45IDAtMjAuNCAyNy44IDExMS40IDBjNS42IDAgNS41IDIuMiAyLjcgNS45ek0wIDMwMS4ybDczLjEgMCA0LjctNi40LTc3LjggMCAwIDYuNHptMzIzIDBsNTguNyAwIDIyLjMtMzAuMi01OC43IDBjLS4xIDAtMjIuMyAzMC4yLTIyLjMgMzAuMnptMjIyIC4xbDk1IDAgMC02LjQtOTAuMyAwLTQuNyA2LjR6TTU2Ny4zIDI3MWwtNC43IDYuNCA3Ny40IDAgMC02LjQtNzIuNyAwem0tMTMuNSAxOC4zbDg2LjIgMCAwLTYuNC04MS41IDAtNC43IDYuNHpNMzg5LjYgMjEwLjdsLTIyLjUgMzAuNi0yNi4yIDAgMjIuNS0zMC42LTU4LjcgMC0zOS4zIDUzLjQgMTQzLjYgMCAzOS4zLTUzLjQtNTguNyAwek00MjMuMSAyNzFzLTQuMyA1LjktNi40IDguN2MtNy40IDEwLS45IDIxLjYgMjMuMiAyMS42bDk0LjMgMCAyMi4zLTMwLjMtMTMzLjQgMHoiXX0sYjllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRleCIsaWNvbjpbNjQwLDUxMixbXSwiZTdmZiIsIk02MjAuOCA5NS40Yy0zMC44IC40LTQyLjEgMTYuNi00Ny43IDI0LjVsLS4xIC4xLTU1LjcgODAuNSA4Mi44IDEyMS4xYzcuNSAxMC42IDExLjMgMTIuNSAzNS40IDEyLjVsMCA5LjFjLTkuMS0uNy0yOC0uNy0zNy43LS43LTEyLjQgMC0zMC44IDAtNDIuOSAuN2wwLTkuMWMxMy4yLS44IDE2LjYtNy4zIDE2LjYtMTAuMiAwLTEuMSAwLTIuMy0zLTYuNGwtNjUuNS05Ni4zLTYwLjIgODcuOWMtMS45IDIuNy0zLjggNS40LTMuOCAxMC4yIDAgNi4xIDMuNCAxMy42IDE1IDE0LjdsMCA5LjFjLTkuNC0uNy0yNy4xLS43LTM3LjItLjdsLTIuOCAwLTExLjcgODIuNi0xOTUuOSAwIDAtOS4xYzI2LjcgMCAzMC45IDAgMzAuOS0xNi45bDAtMjAzLjJjMC0xNi45LTQuMy0xNi45LTMwLjktMTYuOWwwLTEwLjMgMTkuOCAwYy00LjgtNjEuMS0xMC44LTcxLjctNjgtNzEuOGwtMjAuNyAwYy02LjggMS41LTYuOCA2LjEtNi44IDE0LjRsMCAyMDVjMCAxMy42IDEuMSAxNy44IDMyLjQgMTcuOGwxMC41IDAgMCA5LjEtLjQgMGMtMTcuOS0uMy0zNi43LS43LTU0LjktLjdzLTM2LjkgLjMtNTQuOCAuN2wtLjYgMCAwLTkuMSAxMC43IDBjMzEuNyAwIDMyLjgtNC4xIDMyLjgtMTcuOGwwLTIwNWMwLTguNyAwLTEzLjItNy4yLTE0LjNsLTIwLjggMGMtNTguNCAwLTYzLjcgMTAuOS02OC42IDczLjNsLTYuOCAwIDYuMy04My4zIDIxNy41IDAgNi4xIDgxLjggMTY0LjEgMCA5IDgzLjMtNi44IDBjLTUuMy00OS44LTEyLjEtNzMtNzAuMy03M2wtNTEuNSAwYy0xNSAwLTE1LjggMS45LTE1LjggMTQuNmwwIDkzLjMgMzUuNSAwYzM1LjUgMCAzOC45LTEyLjggMzguOS00NGw2IDAgMCA5Ny45LTYgMGMwLTMxLjgtMy40LTQ0LjgtMzguOS00NC44bC0zNS41IDAgMCAxMDUuMmMwIDEzIC43IDE0LjggMTUuOCAxNC44bDUyLjIgMGM2MS4xIDAgNjkuOS0yNS44IDc3LjQtNzMuNi03LjcgMC0xNi4zIC4yLTIyLjIgLjdsMC05LjFjNy4yIDAgMzEuNy0uNCA0Ny44LTIzLjhsNjUuNS05NS43LTcyLjctMTA2LjdjLTguMy0xMS43LTE1LjEtMTIuNS0zNS44LTEyLjVsMC05LjFjOS4xIC43IDI3LjkgLjcgMzcuNyAuNyAxMi40IDAgMzAuOCAwIDQyLjktLjdsMCA5LjFjLTEyLjUgLjQtMTYuNiA2LjgtMTYuNiAxMC4yIDAgMS4xIC40IDIuMyAzIDYuNGw1NS43IDgxLjYgNDkuNy03Mi4xYzIuNy0zLjcgNC41LTYuOCA0LjUtMTEuMyAwLTYuMS0zLTEzLjYtMTUtMTQuOGwwLTkuMWM5LjQgLjcgMjQuOCAuNyAzNy4yIC43IDkgMCAyMy4zIDAgMzItLjdsMCA5LjF6Il19LHY5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjbGF1ZGUiLGljb246WzUxMiw1MTIsW10sImU4NjEiLCJNMTAwLjQgMzQwLjVsMTAwLjctNTYuNSAxLjctNC45LTEuNy0yLjctNC45IDAtMTYuOC0xLTU3LjUtMS42LTQ5LjktMi4xLTQ4LjMtMi42LTEyLjItMi42LTExLjQtMTUgMS4yLTcuNSAxMC4yLTYuOSAxNC43IDEuM2MxOC45IDEuMyA0NS45IDMuMSA4MSA1LjZsMzUuMiAyLjEgNTIuMiA1LjQgOC4zIDAgMS4yLTMuNC0yLjgtMi4xLTIuMi0yLjEtNTAuMy0zNC4xLTU0LjQtMzYtMjguNS0yMC43LTE1LjQtMTAuNS03LjgtOS44LTMuNC0yMS41IDE0LTE1LjQgMTguOCAxLjMgNC44IDEuMyAxOSAxNC43IDQwLjcgMzEuNSA1My4xIDM5LjEgNy44IDYuNSAzLjEtMi4yIC40LTEuNi0zLjUtNS44LTI4LjktNTIuMi0zMC44LTUzLjEtMTMuNy0yMi0zLjYtMTMuMmMtMS4zLTUuNC0yLjItMTAtMi4yLTE1LjVsMTUuOS0yMS42IDguOC0yLjggMjEuMiAyLjggOC45IDcuOCAxMy4yIDMwLjIgMjEuNCA0Ny41IDMzLjIgNjQuNiA5LjcgMTkuMiA1LjIgMTcuOCAxLjkgNS40IDMuNCAwIDAtMy4xIDIuNy0zNi40IDUtNDQuNyA0LjktNTcuNSAxLjctMTYuMiA4LTE5LjQgMTUuOS0xMC41IDEyLjQgNS45IDEwLjIgMTQuNy0xLjQgOS41LTYuMSAzOS41LTExLjkgNjEuOS03LjggNDEuNSA0LjUgMCA1LjItNS4yIDIxLTI3LjggMzUuMi00NC4xIDE1LjUtMTcuNSAxOC4xLTE5LjMgMTEuNi05LjIgMjIgMCAxNi4yIDI0LjEtNy4zIDI0LjktMjIuNyAyOC43LTE4LjggMjQuNC0yNyAzNi4zLTE2LjggMjkgMS42IDIuMyA0LS40IDYwLjktMTMgMzIuOS01LjkgMzkuMy02LjcgMTcuOCA4LjMgMS45IDguNC03IDE3LjItNDIgMTAuNC00OS4yIDkuOC03My4zIDE3LjMtLjkgLjcgMSAxLjMgMzMgMy4xIDE0LjEgLjggMzQuNiAwIDY0LjQgNC44IDE2LjggMTEuMSAxMC4xIDEzLjYtMS43IDEwLjQtMjUuOSAxMy4yYy0xNS41LTMuNy01NC40LTEyLjktMTE2LjYtMjcuN2wtMjgtNy0zLjkgMCAwIDIuMyAyMy4zIDIyLjggNDIuNyAzOC42IDUzLjUgNDkuOCAyLjcgMTIuMy02LjkgOS43LTcuMy0xLTQ3LTM1LjQtMTguMS0xNS45LTQxLjEtMzQuNi0yLjcgMCAwIDMuNiA5LjUgMTMuOSA1MCA3NS4yIDIuNiAyMy0zLjYgNy41LTEzIDQuNS0xNC4yLTIuNi0yOS4zLTQxLjEtMzAuMi00Ni4zLTI0LjQtNDEuNS0zIDEuNy0xNC40IDE1NC44LTYuNyA3LjktMTUuNSA1LjktMTMtOS44LTYuOS0xNS45IDYuOS0zMS41IDguMy00MS4xIDYuNy0zMi43IDYuMS00MC42IDMuNi0xMy41LS4yLS45LTMgLjQtMzAuNiA0Mi00Ni41IDYyLjktMzYuOCAzOS40LTguOCAzLjUtMTUuMy03LjkgMS40LTE0LjEgOC41LTEyLjYgNTAuOS02NC44IDMwLjctNDAuMiAxOS44LTIzLjItLjEtMy40LTEuMiAwLTEzNS4zIDg3LjgtMjQuMSAzLjEtMTAuNC05LjcgMS4zLTE1LjkgNC45LTUuMiA0MC43LTI4LS4xIC4xIDAgLjF6Il19LHk5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaG9waWZ5IixpY29uOls0NDgsNTEyLFtdLCJlMDU3IiwiTTM4OC41IDEwNC4xYy0uMi0xLjEtLjctMi4xLTEuNS0yLjhzLTEuOC0xLjItMi45LTEuMmMtMiAwLTM3LjItLjgtMzcuMi0uOHMtMjEuNi0yMC44LTI5LjYtMjguOGwwIDQzMi43IDEyNS43LTMxLjJzLTU0LTM2NS41LTU0LjQtMzY3Ljl6TTI4OC45IDcwLjVjLTEuOS02LjEtNC4zLTExLjktNy4yLTE3LjYtMTAuNC0yMC0yNi0zMC45LTQ0LjQtMzAuOS0xLjMgMC0yLjcgLjEtNCAuNC0uNC0uOC0xLjItMS4yLTEuNi0yLTgtOC44LTE4LjQtMTIuOC0zMC44LTEyLjQtMjQgLjgtNDggMTgtNjcuMiA0OC44LTEzLjYgMjEuNi0yNCA0OC44LTI2LjggNzAuMS0yNy42IDguNC00Ni44IDE0LjQtNDcuMiAxNC44LTE0IDQuNC0xNC40IDQuOC0xNiAxOC0xLjIgMTAtMzggMjkxLjgtMzggMjkxLjhsMzAyLjYgNTIuNSAwLTQzOC4zYy0xLjUgLjEtMi45IC4yLTQuNCAuNCAwIDAtNS42IDEuNi0xNC44IDQuNHpNMjMzLjYgODcuN2MtMTYgNC44LTMzLjYgMTAuNC01MC44IDE1LjYgNC44LTE4LjggMTQuNC0zNy42IDI1LjYtNTAgNC40LTQuNCAxMC40LTkuNiAxNy4yLTEyLjggNi44IDE0LjQgOC40IDM0IDggNDcuMnpNMjAwLjggMjQuNGM1LS4yIDEwIDEuMSAxNC40IDMuNi02LjQgMy4yLTEyLjggOC40LTE4LjggMTQuNC0xNS4yIDE2LjQtMjYuOCA0Mi0zMS42IDY2LjUtMTQuNCA0LjQtMjguOCA4LjgtNDIgMTIuOCA4LjgtMzguNCA0MS4yLTk2LjQgNzgtOTcuMnpNMTU0LjQgMjQ0LjZjMS42IDI1LjYgNjkuMiAzMS4yIDczLjIgOTEuNyAyLjggNDcuNi0yNS4yIDgwLjEtNjUuNiA4Mi41LTQ4LjggMy4yLTc1LjYtMjUuNi03NS42LTI1LjZsMTAuNC00NHMyNi44IDIwLjQgNDguNCAxOC44YzE0LS44IDE5LjItMTIuNCAxOC44LTIwLjQtMi0zMy42LTU3LjItMzEuNi02MC44LTg2LjktMy4yLTQ2LjQgMjcuMi05My4zIDk0LjUtOTcuNyAyNi0xLjYgMzkuMiA0LjggMzkuMiA0LjhsLTE1LjIgNTcuNnMtMTcuMi04LTM3LjYtNi40Yy0yOS42IDItMzAgMjAuOC0yOS42IDI1LjZ6TTI0OS42IDgyLjljMC0xMi0xLjYtMjkuMi03LjItNDMuNiAxOC40IDMuNiAyNy4yIDI0IDMxLjIgMzYuNC03LjIgMi0xNS4yIDQuNC0yNCA3LjJ6Il19LFNFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1yZWRkaXQiLGljb246WzQ0OCw1MTIsWyJyZWRkaXQtc3F1YXJlIl0sImYxYTIiLCJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyek0zMDUuOSAxNjYuNGMyMC42IDAgMzcuMy0xNi43IDM3LjMtMzcuM3MtMTYuNy0zNy4zLTM3LjMtMzcuM2MtMTggMC0zMy4xIDEyLjgtMzYuNiAyOS44LTMwLjIgMy4yLTUzLjggMjguOC01My44IDU5LjlsMCAuMmMtMzIuOCAxLjQtNjIuOCAxMC43LTg2LjYgMjUuNS04LjgtNi44LTE5LjktMTAuOS0zMi0xMC45LTI4LjkgMC01Mi4zIDIzLjQtNTIuMyA1Mi4zIDAgMjEgMTIuMyAzOSAzMC4xIDQ3LjQgMS43IDYwLjcgNjcuOSAxMDkuNiAxNDkuMyAxMDkuNnMxNDcuNi00OC45IDE0OS4zLTEwOS43YzE3LjctOC40IDI5LjktMjYuNCAyOS45LTQ3LjMgMC0yOC45LTIzLjQtNTIuMy01Mi4zLTUyLjMtMTIgMC0yMyA0LTMxLjkgMTAuOC0yNC0xNC45LTU0LjMtMjQuMi04Ny41LTI1LjRsMC0uMWMwLTIyLjIgMTYuNS00MC43IDM3LjktNDMuNyAzLjkgMTYuNSAxOC43IDI4LjcgMzYuMyAyOC43bC4yLS4yek0xNTUgMjQ4LjFjMTQuNiAwIDI1LjggMTUuNCAyNSAzNC40cy0xMS44IDI1LjktMjYuNSAyNS45LTI3LjUtNy43LTI2LjYtMjYuNyAxMy41LTMzLjUgMjguMS0zMy41bDAtLjF6bTE2Ni40IDMzLjVjLjkgMTktMTIgMjYuNy0yNi42IDI2LjdzLTI1LjYtNi45LTI2LjUtMjUuOSAxMC4zLTM0LjQgMjUtMzQuNCAyNy4zIDE0LjYgMjguMSAzMy41bDAgLjF6bS00Mi4xIDQ5LjZjLTkgMjEuNS0zMC4zIDM2LjctNTUuMSAzNi43cy00Ni4xLTE1LjEtNTUuMS0zNi43Yy0xLjEtMi42IC43LTUuNCAzLjQtNS43IDE2LjEtMS42IDMzLjUtMi41IDUxLjctMi41czM1LjYgLjkgNTEuNyAyLjVjMi43IC4zIDQuNSAzLjEgMy40IDUuN3oiXX0seDllPVNFLHc5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLW5jIixpY29uOls1MTIsNTEyLFtdLCJmNGU4IiwiTTI1NS42IDhDMzk1LjQgOCA1MDQgMTE1LjkgNTA0IDI1NiA1MDQgNDAzLjIgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuMSA1MDQgOCAzOTMuMiA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHpNNjMuOCAxODkuMWMtNy40IDIwLjQtMTEuMSA0Mi43LTExLjEgNjYuOSAwIDExMC45IDkyLjEgMjAyLjQgMjAzLjcgMjAyLjQgMTIyLjQgMCAxNzcuMi0xMDEuOCAxNzguNS0xMDQuMWwtOTMuNC00MS42Yy03LjcgMzcuMS00MS4yIDUzLTY4LjIgNTUuNGwwIDM4LjEtMjguOCAwIDAtMzguMmMtMjcuNS0uMy01Mi42LTEwLjItNzUuMy0yOS43bDM0LjEtMzQuNWMzMS43IDI5LjQgODYuNCAzMS44IDg2LjQtMi4yIDAtNi4yLTIuMi0xMS4yLTYuNi0xNS4xLTE0LjItNi0xLjgtLjEtMjE5LjMtOTcuNHpNMjU2LjQgNTIuM0MyMTggNTIuMyAxNDQgNjEgODUuOSAxNDUuM2w5NC44IDQyLjVjMTAtMzEuMyA0MC40LTQyLjkgNjMuOC00NC4zbDAtMzguMSAyOC44IDAgMCAzOC4xYzIyLjcgMS4yIDQzLjQgOC45IDYyIDIzTDMwMyAxOTkuN2MtNDIuNy0yOS45LTgzLjUtOC03MCAxMS4xIDUzLjQgMjQuMSA0My44IDE5LjggOTMgNDEuNmwxMjcuMSA1Ni43YzQuMS0xNy40IDYuMi0zNS4xIDYuMi01My4xIDAtNTctMTkuOC0xMDUtNTkuMy0xNDMuOS0zOS4zLTM5LjktODcuMi01OS44LTE0My42LTU5Ljh6Il19LE05ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnYWxhY3RpYy1yZXB1YmxpYyIsaWNvbjpbNTEyLDUxMixbXSwiZjUwYyIsIk0yNTYgOGEyNDggMjQ4IDAgMSAxIDAgNDk2IDI0OCAyNDggMCAxIDEgMC00OTZ6bTAgMTYuNWEyMzEuNSAyMzEuNSAwIDEgMCAwIDQ2Mi45IDIzMS41IDIzMS41IDAgMSAwIDAtNDYyLjl6bTI3LjYgMjEuOGwwIDI0LjZjMzAuMyA0LjUgNTkgMTYuMyA4My42IDM0LjVsMTcuNC0xNy40Yy0yOC43LTIyLjEtNjMuMy0zNi45LTEwMS00MS44em0tNTUuNCAuMWMtMzcuNiA0LjktNzIuMiAxOS44LTEwMC45IDQxLjlsMTcuMyAxNy40IC4xIDBjMjQuMS0xNy44IDUyLjYtMzAuMSA4My41LTM0LjdsMC0yNC41em0xMi4yIDUwLjJsMCA4Mi45Yy0xMCAyLTE5LjQgNS45LTI3LjcgMTEuNGwtNTguNi01OC42LTIxLjkgMjEuOSA1OC43IDU4LjdjLTUuNSA4LjItOS40IDE3LjYtMTEuNSAyNy42bC04Mi45IDAgMCAzMSA4Mi45IDBjMiAxMCA2IDE5LjMgMTEuNSAyNy41bC01OC43IDU4LjcgMjEuOSAyMS45IDU4LjYtNTguNmM4LjQgNS42IDE3LjggOS41IDI3LjcgMTEuNWwwIDgyLjkgMzEgMCAwLTgyLjljMTAtMiAxOS40LTYuMSAyNy42LTExLjVsNTguNyA1OC43IDIxLjktMjEuOS01OC43LTU4LjdjNS41LTguMiA5LjUtMTcuNSAxMS41LTI3LjVsODIuOSAwIDAtMzEtODIuOSAwYy0yLTEwLTYtMTkuNC0xMS41LTI3LjZsNTguNy01OC43LTIxLjktMjEuOS01OC43IDU4LjdjLTguMi01LjUtMTcuNi05LjUtMjcuNi0xMS41bDAtODIuOS0zMSAwem0xODMuMiAzMC43bC0xNy40IDE3LjRjMTguMyAyNC42IDMwLjIgNTMuNCAzNC43IDgzLjdsMjQuNiAwYy01LTM3LjctMTkuOC03Mi4zLTQxLjktMTAxem0tMzM1LjYgLjFjLTIyLjEgMjguNy0zNi45IDYzLjMtNDEuOCAxMDAuOWwyNC42IDBjNC42LTMxIDE2LjgtNTkuNCAzNC42LTgzLjVMODguMiAxMjcuNHpNNDYuMyAyODMuN2M0LjkgMzcuNiAxOS43IDcyLjIgNDEuOCAxMDAuOWwxNy40LTE3LjRDODcuNyAzNDMuMSA3NS42IDMxNC42IDcxIDI4My43bC0yNC42IDAgMCAwem0zOTQuNyAwYy00LjYgMzEtMTYuOCA1OS41LTM0LjcgODMuNmwxNy40IDE3LjRjMjIuMS0yOC43IDM3LTYzLjMgNDEuOS0xMDFsLTI0LjYgMHpNMTQ0LjcgNDA2LjRsLTE3LjQgMTcuNGMyOC43IDIyLjEgNjMuMyAzNyAxMDEgNDEuOWwwLTI0LjZjLTMxLTQuNi01OS41LTE2LjgtODMuNi0zNC42em0yMjIuNSAwYy0yNC4xIDE3LjgtNTIuNiAzMC4xLTgzLjYgMzQuN2wwIDI0LjZjMzcuNy00LjkgNzIuMi0xOS44IDEwMS00MS44bC0xNy4zLTE3LjQtLjEgMHoiXX0sUmY9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmFjZWJvb2siLGljb246WzUxMiw1MTIsWzYyZTNdLCJmMDlhIiwiTTUxMiAyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3NiA4Mi43IDQ3Ni44IDE5NC4yIDUwNC41bDAtMTcwLjMtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE3NS45QzQxMy44IDQ5NC44IDUxMiAzODYuOSA1MTIgMjU2eiJdfSx6OWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2l0bGFiIixpY29uOls1MTIsNTEyLFtdLCJmMjk2IiwiTTUwNCAyMDQuNmwtLjctMS44LTY5LjctMTgxLjhjLTEuNC0zLjYtMy45LTYuNi03LjItOC42LTIuNC0xLjYtNS4xLTIuNS04LTIuOHMtNS43IC4xLTguNCAxLjEtNS4xIDIuNy03LjEgNC44Yy0xLjkgMi4xLTMuMyA0LjctNC4xIDcuNGwtNDcgMTQ0LTE5MC41IDAtNDcuMS0xNDRjLS44LTIuOC0yLjItNS4zLTQuMS03LjQtMi0yLjEtNC40LTMuNy03LjEtNC44LTIuNi0xLTUuNS0xLjQtOC40LTEuMXMtNS42IDEuMi04IDIuOGMtMy4yIDItNS44IDUuMS03LjIgOC42TDkuOCAyMDIuOCA5IDIwNC42Yy0xMCAyNi4yLTExLjMgNTUtMy41IDgyIDcuNyAyNi45IDI0IDUwLjcgNDYuNCA2Ny42bC4zIC4yIC42IC40IDEwNiA3OS41YzM4LjUgMjkuMSA2Ni43IDUwLjMgODQuNiA2My45IDMuNyAxLjkgOC4zIDQuMyAxMyA0LjNzOS4zLTIuNCAxMy00LjNjMTcuOS0xMy41IDQ2LjEtMzQuOSA4NC42LTYzLjlsMTA2LjctNzkuOSAuMy0uM2MyMi40LTE2LjkgMzguNy00MC42IDQ1LjYtNjcuNSA4LjYtMjcgNy40LTU1LjgtMi42LTgyeiJdfSxrOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicXEiLGljb246WzQ0OCw1MTIsW10sImYxZDYiLCJNNDM0LjEgNDIwLjRjLTExLjUgMS40LTQ0LjktNTIuNy00NC45LTUyLjcgMCAzMS4zLTE2LjEgNzIuMi01MSAxMDEuOCAxNi44IDUuMiA1NC44IDE5LjIgNDUuOCAzNC40LTcuMyAxMi4zLTEyNS41IDcuOS0xNTkuNiA0LTM0LjEgMy44LTE1Mi4zIDguMy0xNTkuNi00LTktMTUuMiAyOC45LTI5LjIgNDUuOC0zNC40LTM0LjktMjkuNS01MS4xLTcwLjQtNTEuMS0xMDEuOCAwIDAtMzMuMyA1NC4xLTQ0LjkgNTIuNy01LjQtLjYtMTIuNC0yOS42IDkuMy05OS43IDEwLjMtMzMgMjItNjAuNSA0MC4xLTEwNS44LTMuMS0xMTYuOSA0NS4yLTIxNSAxNjAuMy0yMTUgMTEzLjcgMCAxNjMuMiA5Ni4xIDE2MC4zIDIxNSAxOC4xIDQ1LjIgMjkuOSA3Mi45IDQwLjEgMTA1LjggMjEuOCA3MC4xIDE0LjcgOTkuMSA5LjMgOTkuN3oiXX0sUzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0cmlwZSIsaWNvbjpbNjQwLDUxMixbXSwiZjQyOSIsIk0xNjUgMTQ0LjdsLTQzLjMgOS4yLS4yIDE0Mi40YzAgMjYuMyAxOS44IDQzLjMgNDYuMSA0My4zIDE0LjYgMCAyNS4zLTIuNyAzMS4yLTUuOWwwLTMzLjhjLTUuNyAyLjMtMzMuNyAxMC41LTMzLjctMTUuN2wwLTYzLjIgMzMuNyAwIDAtMzcuOC0zMy43IDAtLjEtMzguNXptODkuMSA1MS42bC0yLjctMTMuMS0zOC40IDAgMCAxNTMuMiA0NC4zIDAgMC0xMDMuMWMxMC41LTEzLjggMjguMi0xMS4xIDMzLjktOS4zbDAtNDAuOGMtNi0yLjEtMjYuNy02LTM3LjEgMTMuMXpNMzQ2LjQgMTI0bC00NC42IDkuNSAwIDM2LjIgNDQuNi05LjUgMC0zNi4yek00NC45IDIyOC4zYzAtNi45IDUuOC05LjYgMTUuMS05LjcgMTMuNSAwIDMwLjcgNC4xIDQ0LjIgMTEuNGwwLTQxLjhjLTE0LjctNS44LTI5LjQtOC4xLTQ0LjEtOC4xLTM2IDAtNjAgMTguOC02MCA1MC4yIDAgNDkuMiA2Ny41IDQxLjIgNjcuNSA2Mi40IDAgOC4yLTcuMSAxMC45LTE3IDEwLjktMTQuNyAwLTMzLjctNi4xLTQ4LjYtMTQuMmwwIDQwYzE2LjUgNy4xIDMzLjIgMTAuMSA0OC41IDEwLjEgMzYuOSAwIDYyLjMtMTUuOCA2Mi4zLTQ3LjggMC01Mi45LTY3LjktNDMuNC02Ny45LTYzLjR6TTY0MCAyNjEuNmMwLTQ1LjUtMjItODEuNC02NC4yLTgxLjRzLTY3LjkgMzUuOS02Ny45IDgxLjFjMCA1My41IDMwLjMgNzguMiA3My41IDc4LjIgMjEuMiAwIDM3LjEtNC44IDQ5LjItMTEuNWwwLTMzLjRjLTEyLjEgNi4xLTI2IDkuOC00My42IDkuOC0xNy4zIDAtMzIuNS02LjEtMzQuNS0yNi45bDg2LjkgMGMuMi0yLjMgLjYtMTEuNiAuNi0xNS45em0tODcuOS0xNi44YzAtMjAgMTIuMy0yOC40IDIzLjQtMjguNCAxMC45IDAgMjIuNSA4LjQgMjIuNSAyOC40bC00NS45IDB6TTQzOS4yIDE4MC4yYy0xNy40IDAtMjguNiA4LjItMzQuOCAxMy45bC0yLjMtMTEtMzkuMSAwIDAgMjA0LjggNDQuNC05LjQgLjEtNTAuMmM2LjQgNC43IDE1LjkgMTEuMiAzMS40IDExLjIgMzEuOCAwIDYwLjgtMjMuMiA2MC44LTc5LjYgLjEtNTEuNi0yOS4zLTc5LjctNjAuNS03OS43ek00MjguNiAzMDIuN2MtMTAuNCAwLTE2LjYtMy44LTIwLjktOC40bC0uMy02NmM0LjYtNS4xIDExLTguOCAyMS4yLTguOCAxNi4yIDAgMjcuNCAxOC4yIDI3LjQgNDEuNCAuMSAyMy45LTEwLjkgNDEuOC0yNy40IDQxLjh6TTMwMS45IDMzNi40bDQ0LjYgMCAwLTE1My4yLTQ0LjYgMCAwIDE1My4yeiJdfSxDOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGFpbHltb3Rpb24iLGljb246WzQ0OCw1MTIsW10sImUwNTIiLCJNMjk4LjkgMjY3Yy03LjQtNC4yLTE1LjgtNi4zLTI0LjQtNi4yLTEzLjIgMC0yNC40IDQuNC0zMy40IDEzLjNzLTEzLjYgMjAtMTMuNiAzMy40YzAgMTQuMSA0LjQgMjUuNiAxMy4zIDM0LjZzMjAgMTMuNCAzMy40IDEzLjRjMTMuNyAwIDI1LTQuNiAzNC4xLTEzLjhTMzIyIDMyMS4xIDMyMiAzMDcuNWMwLTguMi0yLjEtMTYuMy02LjEtMjMuNS00LTcuMS05LjgtMTMtMTctMTd6TTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM3NC43IDQwNS4zbC01My4xIDAgMC0yMy45LS43IDBjLTEwLjUgMTcuNS0yOS4xIDI2LjItNTUuOCAyNi4yLTE4LjQgMC0zNC43LTQuNC00OC45LTEzLjEtMTQuMS04LjYtMjUuNS0yMS0zMi45LTM1LjgtNy43LTE1LjEtMTEuNi0zMi4xLTExLjYtNTAuOSAwLTE4LjQgMy45LTM1LjEgMTEuOC01MC4yIDcuNS0xNC43IDE4LjktMjcuMSAzMi45LTM1LjggMTQuMS04LjcgMzAtMTMuMSA0Ny43LTEzLjEgMTAuMi0uMSAyMC4yIDEuNiAyOS43IDUuMiA4LjkgMy41IDE3LjIgOS4xIDI1IDE3bDAtNzcuOSA1NS44LTEyLjEgMCAyNjQuNHoiXX0sXzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0ZWFtIixpY29uOls1MTIsNTEyLFtdLCJmMWI2IiwiTTUwNCAyNTZjMCAxMzctMTExLjIgMjQ4LTI0OC40IDI0OC0xMTMuOCAwLTIwOS42LTc2LjMtMjM5LTE4MC40bDk1LjIgMzkuM2M2LjQgMzIuMSAzNC45IDU2LjQgNjguOSA1Ni40IDM5LjIgMCA3MS45LTMyLjQgNzAuMi03My41bDg0LjUtNjAuMmM1Mi4xIDEuMyA5NS44LTQwLjkgOTUuOC05My41IDAtNTEuNi00Mi05My41LTkzLjctOTMuNXMtOTMuNyA0Mi05My43IDkzLjVsMCAxLjItNTkuMiA4NS43Yy0xNS41LS45LTMwLjcgMy40LTQzLjUgMTIuMUw4IDIzNi4xQzE4LjIgMTA4LjQgMTI1LjEgOCAyNTUuNiA4IDM5Mi44IDggNTA0IDExOSA1MDQgMjU2ek0xNjMuNyAzODQuM2wtMzAuNS0xMi42YzUuNiAxMS42IDE1LjMgMjAuOCAyNy4yIDI1LjggMjYuOSAxMS4yIDU3LjgtMS42IDY5LTI4LjQgNS40LTEzIDUuNS0yNy4zIC4xLTQwLjNTMjE0IDMwNS42IDIwMSAzMDAuMmMtMTIuOS01LjQtMjYuNy01LjItMzguOS0uNmwzMS41IDEzYzE5LjggOC4yIDI5LjIgMzAuOSAyMC45IDUwLjctOC4zIDE5LjktMzEgMjkuMi01MC44IDIxek0zMzcuNSAxMjkuOGE2Mi4zIDYyLjMgMCAxIDEgMCAxMjQuNiA2Mi4zIDYyLjMgMCAxIDEgMC0xMjQuNnptLjEgMTA5YTQ2LjggNDYuOCAwIDEgMCAwLTkzLjYgNDYuOCA0Ni44IDAgMSAwIDAgOTMuNnoiXX0sVDllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZlbm1vLXYiLGljb246WzUxMiw1MTIsW10sImU4NWIiLCJNNDY2LjUgMTQuOGMxNy40IDI4LjcgMjUuMyA1OC4yIDI1LjMgOTUuNSAwIDExOS0xMDEuOSAyNzMuNS0xODQuNyAzODIuMWwtMTg4LjkgMC03NS44LTQ1MS41IDE2NS40LTE1LjcgNDAuMSAzMjEuM2MzNy40LTYwLjggODMuNi0xNTYuMyA4My42LTIyMS40IDAtMzUuNi02LjEtNTkuOS0xNS43LTc5LjlMNDY2LjUgMTQuOHoiXX0sQ0U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic25hcGNoYXQiLGljb246WzUxMiw1MTIsWzYyMTI0LCJzbmFwY2hhdC1naG9zdCJdLCJmMmFiIiwiTTQ5Ny4xIDM2Ni42Yy0zLjQtOS4yLTkuOC0xNC4xLTE3LjEtMTguMi0xLjQtLjgtMi42LTEuNS0zLjctMS45LTIuMi0xLjEtNC40LTIuMi02LjYtMy40LTIyLjgtMTIuMS00MC42LTI3LjMtNTMtNDUuNC0zLjUtNS4xLTYuNi0xMC41LTkuMS0xNi4xLTEuMS0zLTEtNC43LS4yLTYuMyAuOC0xLjIgMS43LTIuMiAyLjktMyAzLjktMi42IDgtNS4yIDEwLjctNyA0LjktMy4yIDguOC01LjcgMTEuMi03LjQgOS40LTYuNSAxNS45LTEzLjUgMjAtMjEuMyAyLjktNS40IDQuNS0xMS4zIDQuOS0xNy40cy0uNi0xMi4yLTIuOC0xNy44Yy02LjItMTYuMy0yMS42LTI2LjQtNDAuMy0yNi40LTMuOSAwLTcuOSAuNC0xMS43IDEuMi0xIC4yLTIuMSAuNS0zLjEgLjcgLjItMTEuMi0uMS0yMi45LTEuMS0zNC41LTMuNS00MC44LTE3LjgtNjIuMS0zMi43LTc5LjItOS41LTEwLjctMjAuNy0xOS43LTMzLjItMjYuNy0yMi42LTEyLjktNDguMi0xOS40LTc2LjEtMTkuNHMtNTMuNCA2LjUtNzYgMTkuNGMtMTIuNSA3LTIzLjcgMTYuMS0zMy4zIDI2LjgtMTQuOSAxNy0yOS4yIDM4LjQtMzIuNyA3OS4yLTEgMTEuNi0xLjIgMjMuNC0xLjEgMzQuNS0xLS4zLTItLjUtMy4xLS43LTMuOS0uOC03LjgtMS4yLTExLjctMS4yLTE4LjcgMC0zNC4xIDEwLjEtNDAuMyAyNi40LTIuMiA1LjctMy4yIDExLjgtMi44IDE3LjhzMiAxMiA0LjkgMTcuNGM0LjEgNy44IDEwLjcgMTQuNyAyMCAyMS4zIDIuNSAxLjcgNi40IDQuMiAxMS4yIDcuNCAyLjYgMS43IDYuNSA0LjIgMTAuMyA2LjcgMS4zIC45IDIuNCAyIDMuMyAzLjMgLjggMS42IC44IDMuNC0uNCA2LjYtMi41IDUuNS01LjUgMTAuOC04LjkgMTUuOC0xMi4xIDE3LjctMjkuNCAzMi42LTUxLjQgNDQuNi0xMS43IDYuMi0yMy45IDEwLjMtMjkgMjQuMy0zLjkgMTAuNS0xLjMgMjIuNSA4LjUgMzIuNiAzLjYgMy44IDcuOCA2LjkgMTIuNCA5LjQgOS42IDUuMyAxOS44IDkuMyAzMC4zIDEyLjEgMi4yIC42IDQuMyAxLjUgNi4xIDIuNyAzLjYgMy4xIDMuMSA3LjkgNy44IDE0LjggMi40IDMuNiA1LjQgNi43IDkgOS4xIDEwIDYuOSAyMS4zIDcuNCAzMy4yIDcuOCAxMC44IC40IDIzIC45IDM2LjkgNS41IDUuOCAxLjkgMTEuOCA1LjYgMTguNyA5LjkgMTYuNyAxMC4zIDM5LjYgMjQuMyA3Ny44IDI0LjNzNjEuMy0xNC4xIDc4LjEtMjQuNGM2LjktNC4yIDEyLjktNy45IDE4LjUtOS44IDEzLjktNC42IDI2LjItNS4xIDM2LjktNS41IDExLjktLjUgMjMuMi0uOSAzMy4yLTcuOCA0LjItMi45IDcuNy02LjcgMTAuMi0xMS4yIDMuNC01LjggMy40LTkuOSA2LjYtMTIuOCAxLjgtMS4yIDMuNy0yLjEgNS44LTIuNiAxMC43LTIuOCAyMS02LjkgMzAuOC0xMi4yIDQuOS0yLjYgOS4zLTYuMSAxMy0xMC4ybC4xLS4yYzkuMi05LjkgMTEuNS0yMS41IDcuOC0zMS44em0tMzQgMTguM2MtMjAuNyAxMS41LTM0LjUgMTAuMi00NS4zIDE3LjEtOS4xIDUuOS0zLjcgMTguNS0xMC4zIDIzLjEtOC4xIDUuNi0zMi4yLS40LTYzLjIgOS45LTI1LjYgOC41LTQyIDMyLjgtODggMzIuOHMtNjItMjQuMy04OC4xLTMyLjljLTMxLTEwLjMtNTUuMS00LjItNjMuMi05LjktNi42LTQuNi0xLjItMTcuMi0xMC4zLTIzLjEtMTAuNy02LjktMjQuNS01LjctNDUuMy0xNy4xLTEzLjItNy4zLTUuNy0xMS44LTEuMy0xMy45IDc1LjEtMzYuNCA4Ny4xLTkyLjYgODcuNy05Ni43IC42LTUgMS40LTktNC4yLTE0LjEtNS40LTUtMjkuMi0xOS43LTM1LjgtMjQuMy0xMC45LTcuNi0xNS43LTE1LjMtMTIuMi0yNC42IDIuNS02LjUgOC41LTguOSAxNC45LTguOSAyIDAgNCAuMiA2IC43IDEyIDIuNiAyMy43IDguNiAzMC40IDEwLjIgLjggLjIgMS42IC4zIDIuNSAuMyAzLjYgMCA0LjktMS44IDQuNi01LjktLjgtMTMuMS0yLjYtMzguNy0uNi02Mi42IDIuOC0zMi45IDEzLjQtNDkuMiAyNi02My42IDYuMS02LjkgMzQuNS0zNyA4OC45LTM3UzMzOSA3NC4yIDM0NSA4MS4xYzEyLjYgMTQuNCAyMy4yIDMwLjcgMjYgNjMuNiAyLjEgMjMuOSAuMyA0OS41LS42IDYyLjYtLjMgNC4zIDEgNS45IDQuNiA1LjkgLjggMCAxLjctLjEgMi41LS4zIDYuNy0xLjYgMTguNC03LjYgMzAuNC0xMC4yIDItLjQgNC0uNyA2LS43IDYuNCAwIDEyLjQgMi41IDE0LjkgOC45IDMuNSA5LjQtMS4yIDE3LTEyLjIgMjQuNi02LjYgNC42LTMwLjQgMTkuMy0zNS44IDI0LjMtNS42IDUuMS00LjggOS4xLTQuMiAxNC4yIC41IDQuMiAxMi41IDYwLjQgODcuNyA5Ni43IDQuNCAyLjIgMTEuOSA2LjctMS4zIDE0LjF6Il19LEw5ZT1DRSwkOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ2FsYWN0aWMtc2VuYXRlIixpY29uOls1MTIsNTEyLFtdLCJmNTBkIiwiTTI0OS45IDMzLjVsMCAyNi4xYy0xMy42IDIwLjYtMjMuOSAxMDguNi0yNC41IDIxNS4zIDExLjctMTUuNiAxOS4xLTMzLjMgMTkuMS00OC4ybDAtMTYuOWMwLTUuMyAuOC0xMC41IDIuMi0xNS42IC42LTIuMSAxLjQtNC4xIDIuNi01LjhzMy40LTMuOCA2LjctMy44IDUuNCAyLjEgNi43IDMuOGMxLjIgMS44IDIgMy43IDIuNiA1LjggMS40IDUuMSAyLjIgMTAuMyAyLjIgMTUuNmwwIDE2LjljMCAxNC45IDcuNCAzMi42IDE5LjEgNDguMi0uNi0xMDYuOC0xMC45LTE5NC43LTI0LjUtMjE1LjNsMC0yNi4xLTEyLjMgMHpNMjIzLjUgMTgxLjNjLTkuNSAyLjEtMTguNyA1LjItMjcuNSA5LjEgOC45IDE2LjEgOS44IDMyLjYgMS43IDM3LjMtOCA0LjYtMjEuOC00LjItMzEuNC0xOS44LTExLjYgOC44LTIxLjkgMTkuMy0zMC42IDMxLjEgMTQuNyA5LjYgMjIuOSAyMi45IDE4LjMgMzAuNy00LjUgNy43LTIwIDcuMS0zNS41LTEtNS44IDEzLjItOS43IDI3LjUtMTEuNiA0Mi40IDkuNyAuMiAxOC43IDIuNCAyNi4yIDYgMTcuOC0uMyAzMi44LTIgNDAuNS00LjIgNS42LTI2LjQgMjMtNDguMiA0Ni4zLTU5LjUgLjctMjUuNiAxLjktNDkuNyAzLjUtNzIuMXptNjUgMGMxLjYgMjIuNCAyLjcgNDYuNSAzLjUgNzIuMSAyMy4zIDExLjMgNDAuOCAzMy4yIDQ2LjMgNTkuNSA3LjcgMi4zIDIyLjcgMy45IDQwLjUgNC4yIDcuNS0zLjcgMTYuNS01LjggMjYuMi02LTEuOS0xNC45LTUuOS0yOS4yLTExLjctNDIuNC0xNS40IDguMS0zMC45IDguNy0zNS41IDEtNC42LTcuNyAzLjYtMjEuMSAxOC4zLTMwLjctOC43LTExLjgtMTktMjIuMy0zMC42LTMxLjEtOS41IDE1LjYtMjMuNCAyNC40LTMxLjQgMTkuOC04LjEtNC42LTcuMi0yMS4yIDEuNy0zNy4zLTguOC0zLjktMTgtNy0yNy40LTkuMXpNMjU2IDE4OS45Yy0zLjIgMC01LjkgOC44LTYuMSAxOS45bDAgMCAwIDE2LjljMCA0MS40LTQ5IDk1LTkzLjUgOTUtNTIgMC0xMjIuOC0xLjQtMTU2LjQgMjkuMmwwIDIuNWM5LjQgMTcuMSAyMC42IDMzLjIgMzMuMiA0OCAxMi41LTIxLjEgNTEuNi00MSAxMDgtNDEuNCA0NS43IDEgNzkgMjAuMyA5MC44IDQwLjkgMCAwIDAgMCAwIC4xIDcuNyAyLjEgMTUuOCAzLjIgMjQgMy4yIDguMiAwIDE2LjQtMS4xIDI0LTMuMiAwIDAgMCAwIDAtLjEgMTEuNy0yMC41IDQ1LjEtMzkuOCA5MC44LTQwLjkgNTYuNCAuNCA5NS41IDIwLjMgMTA4IDQxLjQgMTIuNi0xNC44IDIzLjgtMzAuOSAzMy4yLTQ4bDAtMi41Yy0zMy42LTMwLjYtMTA0LjQtMjkuMi0xNTYuNC0yOS4yLTQ0LjUgMC05My41LTUzLjYtOTMuNS05NWwwLTE2LjktLjEgMGMtLjItMTEuMS0yLjktMTkuOS02LjEtMTkuOXptMCAxNzcuOWE0MC42IDQwLjYgMCAxIDEgMC04MS4zIDQwLjYgNDAuNiAwIDEgMSAwIDgxLjN6bTAtNzMuNmEzMyAzMyAwIDEgMCAwIDY1LjkgMzMgMzMgMCAxIDAgMC02NS45em0wIDU5LjhhMjYuOCAyNi44IDAgMSAxIDAtNTMuNiAyNi44IDI2LjggMCAxIDEgMCA1My42em0tMTE0LjggMTNjLTEwLjIgLjEtMjEuNiAuNC0zMC41IDEuNyAuNCA0LjQgMS41IDE4LjYgNy4xIDI5LjggOS4xLTIuNiAxOC40LTMuOSAyNy42LTMuOSA0MS4zIC45IDcxLjUgMzQuNCA3OC4zIDc0LjVsLjEgNC43YzEwLjQgMS45IDIxLjIgMi45IDMyLjIgMi45IDExIDAgMjEuOC0xIDMyLjItMi45bC4xLTQuN2M2LjgtNDAuMSAzNy03My41IDc4LjMtNzQuNSA5LjMgMCAxOC41IDEuMyAyNy42IDMuOSA1LjYtMTEuMSA2LjctMjUuMyA3LjEtMjkuOC04LjktMS4zLTIwLjMtMS42LTMwLjUtMS43LTE4LjggLjQtMzUuMiA0LjItNDguNiA5LjctMTIuNSAxNi0yOS4yIDMwLTQ5LjYgMzMuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjEgMC0uMiAuMS01LjIgMS4xLTEwLjYgMS42LTE2LjIgMS42LTUuNSAwLTEwLjktLjUtMTYuMi0xLjYtLjEgMC0uMSAwLS4yLS4xLS4xIDAtLjIgMC0uMyAwLTIwLjQtMy0zNy0xNy00OS42LTMzLjEtMTMuNC01LjUtMjkuOS05LjItNDguNi05Ljd6Il19LEE5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaG9lbml4LWZyYW1ld29yayIsaWNvbjpbNjQwLDUxMixbXSwiZjNkYyIsIk0yMTIuOSAzNDQuM2MzLjgtLjEgMjIuOC0xLjQgMjUuNi0yLjItMi40LTIuNi00My42LTEtNjgtNDkuNi00LjMtOC42LTcuNS0xNy42LTYuNC0yNy42IDIuOS0yNS41IDMyLjktMzAgNTItMTguNSAzNiAyMS42IDYzLjMgOTEuMyAxMTMuNyA5Ny41IDM3IDQuNSA4NC42LTE3IDEwOC4yLTQ1LjQtLjYtLjEtLjgtLjItMS0uMS0uNCAuMS0uOCAuMi0xLjEgLjMtMzMuMyAxMi4xLTk0LjMgOS43LTEzNC43LTE0LjgtMzcuNi0yMi44LTUzLjEtNTguNy01MS44LTc0LjYgMS44LTIxLjMgMjIuOS0yMy4yIDM1LjktMTkuNiAxNC40IDMuOSAyNC40IDE3LjYgMzguOSAyNy40IDE1LjYgMTAuNCAzMi45IDEzLjcgNTEuMyAxMC4zIDE0LjktMi43IDM0LjQtMTIuMyAzNi41LTE0LjUtMS4xLS4xLTEuOC0uMS0yLjUtLjItNi4yLS42LTEyLjQtLjgtMTguNS0xLjctMTExLjItMTYuNS0xMjguOS0xNjMuNi0yNTIuNS0xNzMuMS00NC4zLTMuNC05OS40IDguMS0xMzYuMyAzNS0uOCAuNi0xLjUgMS4yLTIuMiAxLjggLjEgLjIgLjEgLjMgLjIgLjUgLjggMCAxLjYtLjEgMi40LS4yIDYuMy0xIDEyLjUtLjggMTguNyAuMyAyMy44IDQuMyA0Ny43IDIzLjEgNTUuOSA3Ni41IDUuMyAzNC4zLS43IDUwLjggOCA4Ni4xIDE5IDc3LjEgOTEgMTA3LjYgMTI3LjcgMTA2LjR6TTc1LjMgNjQuOWMtLjktMS0uOS0xLjItMS4zLTIgMTIuMS0yLjYgMjQuMi00LjEgMzYuNi00LjgtMS4xIDE0LjctMjIuMiAyMS4zLTM1LjMgNi44ek0yNzIuMiA0MTUuNGMtNDIuOCAxLjItOTItMjYuNy0xMjMuNS02MS40LTQuNi01LTE2LjgtMjAuMi0xOC42LTIzLjRsLjQtLjRjNi42IDQuMSAyNS43IDE4LjYgNTQuOCAyNyAyNC4yIDcgNDguMSA2LjMgNzEuNi0zLjMgMjIuNy05LjMgNDEtLjUgNDMuMSAyLjktMTguNSAzLjgtMjAuMSA0LjQtMjQgNy45LTUuMSA0LjQtNC42IDExLjcgNyAxNy4yIDI2LjIgMTIuNCA2My0yLjggOTcuMiAyNS40IDIuNCAyIDguMSA3LjggMTAuMSAxMC43LS4xIC4yLS4zIC4zLS40IC41LTQuOC0xLjUtMTYuNC03LjUtNDAuMi05LjMtMjQuNy0yLTQ2LjMgNS4zLTc3LjUgNi4yek00NDcgMTYzLjRjMTYuNC01LjIgNDEuMy0xMy40IDY2LjUtMy4zIDE2LjEgNi41IDI2LjIgMTguNyAzMi4xIDM0LjYgMy41IDkuNCA1LjEgMTkuNyA1LjEgMjguNy0uMiAwLS40IDAtLjYgLjEtLjItLjQtLjQtLjktLjUtMS4zLTUtMjItMjkuOS00My44LTY3LjYtMjkuOS01MC4yIDE4LjYtMTMwLjQgOS43LTE3Ni45LTQ4LS43LS45LTIuNC0xLjctMS4zLTMuMiAuMS0uMiAyLjEgLjYgMyAxLjMgMTguMSAxMy40IDM4LjMgMjEuOSA2MC4zIDI2LjIgMzAuNSA2LjEgNTQuNiAyLjkgNzkuOS01LjJ6TTU0OS43IDI4MC45Yy0zMi40IC4yLTMzLjggNTAuMS0xMDMuNiA2NC40LTE4LjIgMy43LTM4LjcgNC42LTQ0LjkgNC4ybDAtLjRjMi44LTEuNSAxNC43LTIuNiAyOS43LTE2LjYgNy45LTcuMyAxNS4zLTE1LjEgMjIuOC0yMi45IDE5LjUtMjAuMiA0MS40LTQyLjIgODEuOS0zOSAyMy4xIDEuOCAyOS4zIDguMiAzNi4xIDEyLjcgLjMgLjIgLjQgLjUgLjcgLjktLjUgMC0uNyAuMS0uOSAwLTctMi43LTE0LjMtMy4zLTIxLjgtMy4zem0tMTIuMy0yNC4xYy0uMSAuMi0uMSAuNC0uMiAuNi0yOC45LTQuNC00OC03LjktNjguNSA0LTE3IDkuOS0zMS40IDIwLjUtNjIgMjQuNC0yNy4xIDMuNC00NS4xIDIuNC02Ni4xLTgtLjMtLjItLjYtLjQtMS0uNiAwLS4yIC4xLS4zIC4xLS41IDI0LjkgMy44IDM2LjQgNS4xIDU1LjUtNS44IDIyLjMtMTIuOSA0MC4xLTI2LjYgNzEuMy0zMSAyOS42LTQuMSA1MS4zIDIuNSA3MC45IDE2Ljl6TTI2OC42IDk3LjNjLS42LS42LTEuMS0xLjItMi4xLTIuMyA3LjYgMCAyOS43LTEuMiA1My40IDguNCAxOS43IDggMzIuMiAyMSA1MC4yIDMyLjkgMTEuMSA3LjMgMjMuNCA5LjMgMzYuNCA4LjEgNC4zLS40IDguNS0xLjIgMTIuOC0xLjcgLjQtLjEgLjkgMCAxLjUgLjMtLjYgLjQtMS4yIC45LTEuOCAxLjItOC4xIDQtMTYuNyA2LjMtMjUuNiA3LjEtMjYuMSAyLjYtNTAuMy0zLjctNzMuNC0xNS40LTE5LjMtOS45LTM2LjQtMjIuOS01MS40LTM4LjZ6TTY0MCAzMzUuN2MtMy41IDMuMS0yMi43IDExLjYtNDIuNyA1LjMtMTIuMy0zLjktMTkuNS0xNC45LTMxLjYtMjQuMS0xMC03LjYtMjAuOS03LjktMjguMS04LjQgLjYtLjggLjktMS4yIDEuMi0xLjQgMTQuOC05LjIgMzAuNS0xMi4yIDQ3LjMtNi41IDEyLjUgNC4yIDE5LjIgMTMuNSAzMC40IDI0LjIgMTAuOCAxMC40IDIxIDkuOSAyMy4xIDEwLjUgLjEtLjEgLjIgMCAuNCAuNHptLTIxMi41IDEzN2MyLjIgMS4yIDEuNiAxLjUgMS41IDItMTguNS0xLjQtMzMuOS03LjYtNDYuOC0yMi4yLTIxLjgtMjQuNy00MS43LTI3LjktNDguNi0yOS43IC41LS4yIC44LS40IDEuMS0uNCAxMy4xIC4xIDI2LjEgLjcgMzguOSAzLjkgMjUuMyA2LjQgMzUgMjUuNCA0MS42IDM1LjMgMy4yIDQuOCA3LjMgOC4zIDEyLjMgMTEuMXoiXX0sRDllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdCIsaWNvbjpbNTEyLDUxMixbXSwiZjFkMyIsIk0yMTYuMyAxNTguNGwtNzkuMyAwYy00MC0xMC41LTEzMC41LTcuOC0xMzAuNSA3NC44IDAgMzAuMSAxNSA1MS4yIDM1IDYxLTI1LjEgMjMtMzcgMzMuOC0zNyA0OS4yIDAgMTEgNC41IDIxLjEgMTcuOSAyNi44LTE0LjMgMTMuNC0yMi40IDIzLjEtMjIuNCA0MS40IDAgMzIuMSAyOCA1MC44IDEwMS42IDUwLjggNzAuOCAwIDExMS44LTI2LjQgMTExLjgtNzMuMiAwLTU4LjctNDUuMi01Ni41LTE1MS42LTYzbDEzLjQtMjEuNmMyNy4zIDcuNiAxMTguNyAxMCAxMTguNy02Ny45IDAtMTguNy03LjctMzEuNy0xNS00MS4xbDM3LjQtMi44IDAtMzQuNXpNMTUyLjkgNDAwLjNjMCAzMi4xLTEwNC45IDMyLjEtMTA0LjkgMi40IDAtOC4xIDUuMy0xNSAxMC42LTIxLjUgNzcuNyA1LjMgOTQuMyAzLjQgOTQuMyAxOS4xek0xMDIuMSAyNjUuN2MtNTIuOCAwLTUwLjUtNzEuMiAxLjItNzEuMiA0OS41IDAgNTAuOCA3MS4yLTEuMiA3MS4yek0yMzUuNCAzNjYuMmwwLTMyLjFjMjYuNy0zLjcgMjcuMi0yIDI3LjItMTFsMC0xMTkuNWMwLTguNS0yLjEtNy40LTI3LjItMTYuM2w0LjUtMzIuOSA4NC4yIDAgMCAxNjguN2MwIDYuNSAuNCA3LjMgNi41IDguMWwyMC43IDIuOCAwIDMyLjEtMTE1LjkgMHptNTIuNS0yNDQuM2MtMjMuMiAwLTM2LjYtMTMuNC0zNi42LTM2LjZzMTMuNC0zNS44IDM2LjYtMzUuOGMyMy42IDAgMzcgMTIuNiAzNyAzNS44cy0xMy40IDM2LjYtMzcgMzYuNnpNNTEyIDM1MC41Yy0xNy41IDguNS00My4xIDE2LjMtNjYuMyAxNi4zLTQ4LjQgMC02Ni43LTE5LjUtNjYuNy02NS41bDAtMTA2LjVjMC01LjQgMS00LjEtMzEuNy00LjFsMC0zNi4yYzM1LjgtNC4xIDUwLTIyIDU0LjUtNjYuM2wzOC42IDBjMCA2NS44LTEuMyA2MS44IDMuMyA2MS44bDU3LjMgMCAwIDQwLjYtNjAuNiAwIDAgOTcuMWMwIDYuOS00LjkgNTEuNCA2MC42IDI2LjhsMTEgMzUuOHoiXX0sRTllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9wdGluLW1vbnN0ZXIiLGljb246WzU3Niw1MTIsW10sImYyM2MiLCJNNTcyLjggNDIxLjRjNS42LTkuNSA0LjctMTUuMi01LjQtMTEuNi0zLTQuOS03LTkuNS0xMS4xLTEzLjggMi45LTkuNy0uNy0xNC4yLTEwLjgtOS4yLTQuNi0zLjItMTAuMy02LjUtMTUuOS05LjIgMC0xNS4xLTExLjYtMTEuNi0xNy42LTUuNy0xMC40LTEuNS0xOC43LS4zLTI2LjggNS43IC4zLTYuNSAuMy0xMyAuMy0xOS43IDEyLjYgMCA0MC4yLTExIDQ1LjktMzYuMiAxLjQtNi44IDEuNi0xMy44LS4zLTIxLjktMy0xMy41LTE0LjMtMjEuMy0yNS4xLTI1LjctLjgtNS45LTcuNi0xNC4zLTE0LjktMTUuOXMtMTIuNCA0LjktMTQuMSAxMC4zYy04LjUgMC0xOS4yIDIuOC0yMS4xIDguNC01LjQtLjUtMTEuMS0xLjQtMTYuOC0xLjkgMi43LTEuOSA1LjQtMy41IDguNC00LjYgNS40LTkuMiAxNC42LTExLjQgMjUuNy0xMS42bDAtMi44YzE5LjUtLjUgNDMtNS45IDUzLjgtMTguMSAxMi43LTEzLjggMTQuNi0zNy4zIDEyLjQtNTUuMS0yLjQtMTcuMy05LjctMzcuNi0yNC42LTQ4LjEtOC40LTUuOS0yMS42LS44LTIyLjcgOS41LTIuMiAxOS42IDEuMiAzMC0zOC42IDI1LjEtMTAuMy0yMy44LTI0LjYtNDQuNi00Mi43LTYwLTY5LjYtNTkuNy0xNjcuNy01My44LTI0NC4yLTM3LjYgMTkuNyA0LjYgNDEuMSA4LjYgNTkuNyAxNi41LTI2LjIgMi40LTUyLjcgMTEuMy03Ni4yIDIzLjItMzIuOCAxNy00NCAyOS45LTU2LjcgNDIuNCAxNC45LTIuMiAyOC45LTUuMSA0My44LTMuOC05LjcgNS40LTE4LjQgMTIuMi0yNi41IDIwLTI1LjggLjktMjMuOC01LjMtMjYuMi0yNS45LTEuMS0xMC41LTE0LjMtMTUuNC0yMi43LTkuNy0yOC4xIDE5LjktMzMuNSA3OS45LTEyLjIgMTAzLjUgMTAuOCAxMi4yIDM1LjEgMTcuMyA1NC45IDE3LjgtLjMgMS4xLS4zIDEuOS0uMyAyLjcgMTAuOCAuNSAxOS41IDIuNyAyNC42IDExLjYgMyAxLjEgNS43IDIuNyA4LjEgNC42LTUuNCAuNS0xMS4xIDEuNC0xNi41IDEuOS0zLjMtNi42LTEzLjctOC4xLTIxLjEtOC4xLTEuNi01LjctNi41LTEyLjItMTQuMS0xMC4zLTYuOCAxLjktMTQuMSAxMC0xNC45IDE1LjktMjIuNSA5LjUtMzAuMSAyNi44LTI1LjEgNDcuNiA1LjMgMjQuOCAzMyAzNi4yIDQ1LjkgMzYuMmwwIDE5LjdjLTYuNi01LTE0LjMtNy41LTI2LjgtNS43LTUuNS01LjUtMTcuMy0xMC4xLTE3LjMgNS43LTUuOSAyLjctMTEuNCA1LjktMTUuOSA5LjItOS44LTQuOS0xMy42LTEuNy0xMS4xIDkuMi00LjEgNC4zLTcuOCA4LjYtMTEuMSAxMy44LTEwLjItMy43LTExIDIuMi01LjQgMTEuNi0xLjEgMy41LTEuNiA3LTEuOSAxMC44LS41IDMxLjYgNDQuNiA2NCA3My41IDY1LjEgMTcuMyAuNSAzNC42LTguNCA0My0yMy41IDExMy4yIDQuOSAyMjYuNyA0LjEgMzQwLjIgMCA4LjEgMTUuMSAyNS40IDI0LjMgNDIuNyAyMy41IDI5LjItMS4xIDc0LjMtMzMuNSA3My41LTY1LjEgLjItMy43LS43LTcuMi0xLjctMTAuN3pNNDk5IDE2Ny40YzEuMS0zIDIuNC04LjQgMi40LTE0LjYgMC01LjkgNi44LTguMSAxNC4xLS44IDExLjEgMTEuNiAxNC45IDQwLjUgMTMuOCA1MS4xLTQuMS0xMy42LTEzLTI5LTMwLjMtMzUuN3ptLTQuNiA2LjdjMTkuNSA2LjIgMjguNiAyNy42IDI5LjcgNDguOS0xLjEgMi43LTMgNS40LTQuOSA3LjYtNS43IDUuOS0xNS40IDEwLTI2LjIgMTIuMiA0LjMtMjEuMyAuMy00Ny4zLTEyLjctNjMgNC45LS44IDEwLjktMi40IDE0LjEtNS43em0tMjQuMSA2LjhjMTMuOCAxMS45IDIwIDM5LjIgMTQuMSA2My41LTQuMSAuNS04LjEgLjgtMTEuNiAuOC0xLjktMjEuOS02LjgtNDQtMTQuMy02NC42IDMuNyAuMyA4LjEgLjMgMTEuOCAuM3pNNDcuNyAyMDNjLTEuMS0xMC41IDIuNC0zOS41IDEzLjgtNTEuMSA3LTcuMyAxNC4xLTUuMSAxNC4xIC44IDAgNi4yIDEuNCAxMS42IDIuNCAxNC42LTE3LjMgNi44LTI2LjIgMjIuMi0zMC4zIDM1Ljd6bTkuNyAyNy42Yy0xLjktMi4yLTMuNS00LjktNC45LTcuNiAxLjQtMjEuMyAxMC4zLTQyLjcgMjkuNy00OC45IDMuMiAzLjIgOS4yIDQuOSAxNC4xIDUuNy0xMyAxNS43LTE3IDQxLjYtMTIuNyA2My0xMC44LTIuMi0yMC41LTYtMjYuMi0xMi4yem00Ny45IDE0LjZjLTQuMSAwLTguMS0uMy0xMi43LS44LTQuNi0xOC42LTEuOS0zOC45IDUuNC01M2wwIC4zIDEyLjItNS4xYzQuOS0xLjkgOS43LTMuOCAxNC45LTQuOS0xMC43IDE5LjctMTcuNCA0MS4zLTE5LjggNjMuNXptMTg0LTEwLjVhNzYuMSA3Ni4xIDAgMSAxIDAtMTUyLjIgNzYuMSA3Ni4xIDAgMSAxIDAgMTUyLjJ6bTExNS42IDIyLjFjLS4zIDE3LjgtNyA0OC45LTIzIDU3LTEzLjIgNi42LTYuNS03LjUtMTYuNS01OC4xIDEzLjMgLjMgMjYuNiAuMyAzOS41IDEuMXptLTU0LTEuNmMuOCA0LjkgMy44IDQwLjMtMS42IDQxLjktMTEuNiAzLjUtNDAgNC4zLTUxLjEtMS4xLTQuMS0zLTQuNi0zNS45LTQuMy00MS4xbDAgLjNjMTguOS0uMyAzOC4xLS4zIDU3IDB6TTI3OC41IDMwOWMtMTMgMy41LTQxLjYgNC4xLTU0LjYtMS42LTYuNS0yLjctMy44LTQyLjQtMS45LTUxLjYgMTkuMi0uNSAzOC40LS41IDU3LjgtLjhsMCAuM2MxLjEgOC4zIDMuMyA1MS4yLTEuMyA1My43ek0xNzIgMjU3LjljMTIuMi0uOCAyNC42LTEuNCAzNi44LTEuNi0yLjQgMTUuNC0zIDQzLjUtNC45IDUyLjItMS4xIDYuOC00LjMgNi44LTkuNyA0LjMtMjEuOS05LjgtMjcuNi0zNS4yLTIyLjItNTQuOXptLTM1LjQgMzEuM2M3LjgtMS4xIDE1LjctMS45IDIzLjUtMi43IDEuNiA2LjIgMy44IDExLjkgNyAxNy42IDEwIDE3IDQ0IDM1LjcgNDUuMSA3IDYuMiAxNC45IDQwLjggMTIuMiA1NC45IDEwLjggMTUuNy0xLjQgMjMuOC0xLjQgMjYuOC0xNC4zIDEyLjQgNC4zIDMwLjggNC4xIDQ0IDMgMTEuMy0uOCAyMC44LS41IDI0LjYtOC45IDEuMSA1LjEgMS45IDExLjYgNC42IDE2LjggMTAuOCAyMS4zIDM3LjMgMS40IDQ2LjgtMzEuNiA4LjYgLjggMTcuNiAxLjkgMjYuNSAyLjctLjQgMS4zLTMuOCA3LjMgNy4zIDExLjYtNDcuNiA0Ny05NS43IDg3LjgtMTYzLjIgMTA3LTYzLjItMjAuOC0xMTIuMS01OS41LTE1NS45LTEwNi41IDkuNi0zLjQgMTAuNC04LjggOC0xMi41ek0xMTUgNDYxLjdjLTMuOCAxNy44LTIxLjkgMjkuNy0zOS43IDI4LjktMTkuMi0uOC00Ni41LTE3LTU5LjItMzYuNS0yLjctMzEuMSA0My44LTYxLjMgNjYuMi01NC42IDE0LjkgNC4zIDI3LjggMzAuOCAzMy41IDU0IDAgMy0uMyA1LjctLjggOC4yem0tOC43LTY2Yy0uNS0xMy41LS41LTI3LS4zLTQwLjVsLjMgMGMyLjctMS42IDUuNy0zLjggNy44LTYuNSA2LjUtMS42IDEzLTUuMSAxNS4xLTkuMiAzLjMtNy4xLTctNy41LTUuNC0xMi40IDIuNy0xLjEgNS43LTIuMiA3LjgtMy41IDI5LjIgMjkuMiA1OC42IDU2LjUgOTcuMyA3Ny0zNi44IDExLjMtNzIuNCAyNy42LTEwNS45IDQ3LTEuMi0xOC42LTcuNy0zNS45LTE2LjctNTEuOXptMzM3LjYgNjQuNmMtMTAzIDMuNS0yMDYuMiA0LjEtMzA5LjQgMCAwIC4zIDAgLjMtLjMgLjNsMC0uMyAuMyAwYzM1LjEtMjEuNiA3Mi4yLTM5LjIgMTEyLjQtNTAuOCAxMS42IDUuMSAyMyA5LjUgMzQuOSAxMy4yIDIuMiAuOCAyLjIgLjggNC4zIDAgMTQuMy00LjEgMjguNC05LjIgNDIuMi0xNS40IDQxLjUgMTEuNyA3OC44IDMxLjcgMTE1LjYgNTN6bTEwLjUtMTIuNGMtMzUuOS0xOS41LTczLTM1LjktMTExLjktNDcuNiAzOC4xLTIwIDcxLjktNDcuMyAxMDMuNS03Ni43IDIuMiAxLjQgNC42IDIuNCA3LjYgMy4yIDAgLjggLjMgMS45IC41IDIuNC00LjYgMi43LTcuOCA2LjItNS45IDEwLjMgMi4yIDMuOCA4LjYgNy42IDE1LjEgOC45IDIuNCAyLjcgNS4xIDUuMSA4LjEgNi44IDAgMTMuOC0uMyAyNy42LS44IDQxLjNsLjMtLjNjLTkuMyAxNS45LTE1LjUgMzctMTYuNSA1MS43em0xMDUuOSA2LjJjLTEyLjcgMTkuNS00MCAzNS43LTU5LjIgMzYuNS0xOS4zIC45LTQwLjUtMTMuMi00MC41LTM3IDUuNy0yMy4yIDE4LjktNDkuNyAzMy41LTU0IDIyLjctNi45IDY5LjIgMjMuNCA2Ni4yIDU0LjV6TTM3My4xIDc1LjJjLTMuOC03Mi4xLTEwMC44LTc5LjctMTI2LTIzLjUgNDQuNi0yNC4zIDkwLjMtMTUuNyAxMjYgMjMuNXpNNzUgNDA3LjFjLTE1LjcgMS42LTQ5LjUgMjUuNC00OS41IDQzLjIgMCAxMS42IDE1LjcgMTkuNSAzMi4yIDE0LjkgMTIuMi0zLjIgMzEuMS0xNy42IDM1LjktMjcuMyA2LTExLjYtMy43LTMyLjctMTguNi0zMC44ek0yOTAuOSAyMzAuOWMyOC42IDAgNTEuOS0yMS42IDUxLjktNDguNCAwLTM2LjEtNDAuNS01OC4xLTcyLjItNDQuMyA5LjUgMyAxNi41IDExLjYgMTYuNSAyMS42IDAgMjMuMy0zMy4zIDMyLTQ2LjUgMTEuMy03LjMgMzQuMSAxOS40IDU5LjggNTAuMyA1OS44ek02OC4yIDQ3NC4xYy41IDYuNSAxMi4yIDEyLjcgMjEuNiA5LjUgNi44LTIuNyAxNC42LTEwLjUgMTcuMy0xNi4yIDMtNy0xLjEtMjAtOS43LTE4LjQtOC45IDEuNi0yOS43IDE2LjctMjkuMiAyNS4xem00MzMuMi02N2MtMTQuOS0xLjktMjQuNiAxOS4yLTE4LjkgMzAuOCA0LjkgOS43IDI0LjEgMjQuMSAzNi4yIDI3LjMgMTYuNSA0LjYgMzIuMi0zLjIgMzIuMi0xNC45IDAtMTcuOC0zMy44LTQxLjYtNDkuNS00My4yek00NzkgNDQ5Yy04LjQtMS42LTEyLjQgMTEuMy05LjUgMTguNCAyLjQgNS43IDEwLjMgMTMuNSAxNy4zIDE2LjIgOS4yIDMuMiAyMS4xLTMgMjEuMy05LjUgLjktOC40LTIwLjItMjMuNS0yOS4xLTI1LjF6Il19LFA5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqZW5raW5zIixpY29uOls0NDgsNTEyLFtdLCJmM2I2IiwiTTQ1NS40IDQyNWMtMS40LTExLjItMTktMjMuMS0yOC4yLTMxLjktNS4xLTUtMjktMjMuMS0zMC40LTI5LjktMS40LTYuNiA5LjctMjEuNSAxMy4zLTI4LjkgNS4xLTEwLjcgOC44LTIzLjcgMTEuMy0zMi42IDE4LjgtNjYuMSAyMC43LTE1Ni45LTYuMi0yMTEuMi0xMC4yLTIwLjYtMzguNi00OS01Ni40LTYyLjUtNDItMzEuNy0xMTkuNi0zNS4zLTE3MC4xLTE2LjYtMTQuMSA1LjItMjcuOCA5LjgtNDAuMSAxNy4xLTMzLjEgMTkuNC02OC4zIDMyLjUtNzguMSA3MS42LTI0LjIgMTAuOC0zMS41IDQxLjgtMzAuMyA3Ny44IC4yIDcgNC4xIDE1LjggMi43IDIyLjQtLjcgMy4zLTUuMiA3LjYtNi4xIDkuOC0xMS42IDI3LjctMi4zIDY0IDExLjEgODMuNyA4LjEgMTEuOSAyMS41IDIyLjQgMzkuMiAyNS4yIC43IDEwLjYgMy4zIDE5LjcgOC4yIDMwLjQgMy4xIDYuOCAxNC43IDE5IDEwLjQgMjcuNy0yLjIgNC40LTIxIDEzLjgtMjcuMyAxNy42LTIxLjEgMTIuNS0zNi40IDIwLjMtNTUuOSAzNC4zLTEyLjYgOS0zMi4zIDEwLjItMjkuMiAzMS4xIDIuMSAxNC4xIDEwLjEgMzEuNiAxNC43IDQ1LjggLjcgMiAxLjQgNC4xIDIuMSA2bDQyMiAwYzQuOS0xNS4zIDkuNy0zMC45IDE0LjYtNDcuMiAzLjQtMTEuNCAxMC4yLTI3LjggOC43LTM5Ljd6TTE3NC4yIDMzLjdjMS44LS41IDMuNCAuNyA0LjkgMi40LS4yIDUuMi01LjQgNS4xLTguOSA2LjgtNS40IDYuNy0xMy40IDkuOC0yMCAxNy4yLTYuOCA3LjUtMTQuNCAyNy43LTIzLjQgMzAtNC41IDEuMS05LjctLjgtMTMuNi0uNS0xMC40IC43LTE3LjcgNi0yOC4zIDcuNSAxMy42LTI5LjkgNTYuMS01NCA4OS4zLTYzLjR6TTY5LjQgMTI3LjNjMTMuNS0xNC45IDMyLjEtMjQuMSA1NC44LTI1LjkgMTEuNyAyOS43LTguNCA2NS0uOSA5Ny42IDIuMyA5LjkgMTAuMiAyNS40LTIuNCAyNS43IC4zLTI4LjMtMzQuOC00Ni4zLTYxLjMtMjkuNi0xLjgtMjEuNS00LjktNTEuNyA5LjgtNjcuOHptMzYuNyAyMDAuMmMtMS00LjEtMi43LTEyLjktMi4zLTE1LjEgMS42LTguNyAxNy4xLTEyLjUgMTEtMjQuNy0xMS4zLS4xLTEzLjggMTAuMi0yNC4xIDExLjMtMjYuNyAyLjYtNDUuNi0zNS40LTQ0LjQtNTguNCAxLTE5LjUgMTcuNi0zOC4yIDQwLjEtMzUuOCAxNiAxLjggMjEuNCAxOS4yIDI0LjUgMzQuNyA5LjIgLjUgMjIuNS0uNCAyNi45LTcuNi0uNi0xNy41LTguOC0zMS42LTguMi00Ny43IDEtMzAuMyAxNy41LTU3LjYgNC44LTg3LjQgMTMuNi0zMC45IDUzLjUtNTUuMyA4My4xLTcwIDM2LjYtMTguMyA5NC45LTMuNyAxMjkuMyAxNS44IDE5LjcgMTEuMSAzNC40IDMyLjcgNDguMyA1MC43LTE5LjUtNS44LTM2LjEgNC4yLTMzLjEgMjAuMyAxNi4zLTE0LjkgNDQuMi0uMiA1Mi41IDE2LjQgNy45IDE1LjggNy44IDM5LjMgOSA2Mi44IDIuOSA1Ny0xMC40IDExNS45LTM5LjEgMTU3LjEtNy43IDExLTE0LjEgMjMtMjQuOSAzMC42LTI2IDE4LjItNjUuNCAzNC43LTk5LjIgMjMuNC00NC43LTE1LTY1LTQ0LjgtODkuNS03OC44IC43IDE4LjcgMTMuOCAzNC4xIDI2LjggNDguNCAxMS4zIDEyLjUgMjUgMjYuNiAzOS43IDMyLjQtMTIuMy0yLjktMzEuMS0zLjgtMzYuMiA3LjItMjguNi0xLjktNTUuMS00LjgtNjguNy0yNC4yLTEwLjYtMTUuNC0yMS40LTQxLjQtMjYuMy02MS40em0yMjIgMTI0LjFjNC4xLTMgMTEuMS0yLjkgMTcuNC0zLjYtNS40LTIuNy0xMy0zLjctMTkuMy0yLjItLjEtNC4yLTItNi44LTMuMi0xMC4yIDEwLjYtMy44IDM1LjUtMjguNSA0OS42LTIwLjMgNi43IDMuOSA5LjUgMjYuMiAxMC4xIDM3IC40IDktLjggMTgtNC41IDIyLjgtMTguOC0uNi0zNS44LTIuOC01MC43LTcgLjktNi4xLTEtMTIuMSAuNi0xNi41em0tMTcuMi0yMGMtMTYuOCAuOC0yNi0xLjItMzguMy0xMC44IC4yLS44IDEuNC0uNSAxLjUtMS40IDE4IDggNDAuOC0zLjMgNTktNC45LTcuOSA1LjEtMTQuNiAxMS42LTIyLjIgMTcuMXptLTEyLjEgMzMuMmMtMS42LTkuNC0zLjUtMTItMi44LTIwLjIgMjUtMTYuNiAyOS43IDI4LjYgMi44IDIwLjJ6TTE5NC4zIDQzOC42Yy0xMS42LS43LTQ4LjEtMTQtMzguNS0yMy43IDkuNCA2LjUgMjcuNSA0LjkgNDEuMyA3LjMgLjggNC40LTIuOCAxMC4yLTIuOCAxNi40ek0yNiA0OTcuMWMtNC4zLTEyLjctOS4yLTI1LjEtMTQuOC0zNi45IDMwLjgtMjMuOCA2NS4zLTQ4LjkgMTAyLjItNjMuNSAyLjgtMS4xIDIzLjIgMjUuNCAyNi4yIDI3LjYgMTYuNSAxMS43IDM3IDIxIDU2LjIgMzAuMiAxLjIgOC44IDMuOSAyMC4yIDguNyAzNS41IC43IDIuMyAxLjQgNC43IDIuMiA3LjJsLTE4MC43IDAgMC0uMXptMjQwLjYgNS43bC0uOCAwYy4zLS4yIC41LS40IC44LS41bDAgLjV6bTcuNS01LjdjMi4xLTEuNCA0LjMtMi44IDYuNC00LjMgMS4xIDEuNCAyLjIgMi44IDMuMiA0LjNsLTkuNiAwem0xNS4xLTI0LjdjLTEwLjggNy4zLTIwLjYgMTguMy0zMy4zIDI1LjItNiAzLjMtMjcgMTEuNy0zMy40IDEwLjItMy42LS44LTMuOS01LjMtNS40LTkuNS0zLjEtOS0xMC4xLTIzLjQtMTAuOC0zNy0uOC0xNy4yLTIuNS00NiAxNi00Mi40IDE0LjkgMi45IDMyLjMgOS43IDQzLjkgMTYuMSA3LjEgMy45IDExLjEgOC42IDIxLjkgOS41LS4xIDEuNC0uMSAyLjgtLjIgNC4zLTUuOSAzLjktMTUuMyAzLjgtMjEuOCA3LjEgOS41IC40IDE3IDIuNyAyMy41IDUuOS0uMSAzLjQtLjMgNy0uNCAxMC42em01My40IDI0LjdsLTE0IDBjLS4xLTMuMi0yLjgtNS44LTYuMS01LjhzLTUuOSAyLjYtNi4xIDUuOGwtMTcuNCAwYy0yLjgtNC40LTUuNy04LjYtOC45LTEyLjUgMi4xLTIuMiA0LTQuNyA2LTYuOSA5IDMuNyAxNC44LTQuOSAyMS43LTQuMiA3LjkgLjggMTQuMiAxMS43IDI1LjQgMTFsLS42IDEyLjZ6bTguNyAwYy4yLTQgLjQtNy44IC42LTExLjUgMTUuNi03LjMgMjkgMS4zIDM1LjcgMTEuNWwtMzYuMyAwem04My40LTM3Yy0yLjMgMTEuMi01LjggMjQtOS45IDM3LjEtLjItLjEtLjQtLjEtLjYtLjFsLTI3LjkgMGMuNi0xLjEgMS4yLTIuMiAxLjktMy4zLTIuNi02LjEtOS04LjctMTAuOS0xNS41IDEyLjEtMjIuNyA2LjUtOTMuNC0yNC4yLTc4LjUgNC4zLTYuMyAxNS42LTExLjUgMjAuOC0xOS4zIDEzIDEwLjQgMjAuOCAyMC4zIDMzLjIgMzEuNCA2LjggNiAyMCAxMy4zIDIxLjQgMjMuMSAuOCA1LjUtMi42IDE4LjktMy44IDI1LjF6TTE5MC41IDEzMC41YzUuNC0xNC45IDI3LjItMzQuNyA0NS0zMiA3LjcgMS4yIDE4IDguMiAxMi4yIDE3LjctMzAuMi03LTQ1LjIgMTIuNi01NC40IDMzLjEtOC4xLTItNC45LTEzLjEtMi44LTE4Ljh6bTE4NC4xIDYzLjFjOC4yLTMuNiAyMi40LS43IDI5LjYtNS4zLTQuMi0xMS41LTEwLjMtMjEuNC05LjMtMzcuNyAuNSAwIDEgMCAxLjQgLjEgNi44IDE0LjIgMTIuNyAyOS4yIDIxLjQgNDEuNy01LjcgMTMuNS00My42IDI1LjQtNDMuMSAxLjJ6bS05Ni44IDIuN2MtNi44LTEwLjktMTktMzIuNS0xNC41LTQ1LjMgNi41IDExLjkgOC42IDI0LjQgMTcuOCAzMy4zIDQuMSA0IDEyLjIgOSA4LjIgMjAuMi0uOSAyLjctNy44IDguNi0xMS43IDkuNy0xNC40IDQuMy00Ny45IC45LTM2LjYtMTcuMSAxMS45IC43IDI3LjkgNy44IDM2LjgtLjh6bTI3LjMgNzBjMy44IDYuNiAxLjQgMTguNyAxMi4xIDIwLjYgMjAuMiAzLjQgNDMuNi0xMi4zIDU4LjEtMTcuOCA5LTE1LjItLjgtMjAuNy04LjktMzAuNS0xNi42LTIwLTM4LjgtNDQuOC0zOC03NC43IDYuNy00LjkgNy4zIDcuNCA4LjIgOS43IDguNyAyMC4zIDMwLjQgNDYuMiA0Ni4zIDYzLjUgMy45IDQuMyAxMC4zIDguNCAxMSAxMS4yIDIuMSA4LjItNS40IDE4LTQuNSAyMy41LTIxLjcgMTMuOS00NS44IDI5LjEtODEuNCAyNS42LTcuNC02LjctMTAuMy0yMS40LTIuOS0zMS4xem0tMjAxLjMtOS4yYy02LjgtMy45LTguNC0yMS0xNi40LTIxLjQtMTEuNC0uNy05LjMgMjIuMi05LjMgMzUuNS03LjgtNy4xLTkuMi0yOS4xLTMuNS00MC4zLTYuNi0zLjItOS41IDMuNi0xMy4xIDUuOSA0LjctMzQuMSA0OS44LTE1LjggNDIuMyAyMC4zem0yOTkuNiAyOC44Yy0xMC4xIDE5LjItMjQuNCA0MC40LTU0IDQxLS42LTYuMi0xLjEtMTUuNiAwLTE5LjQgMjIuNy0yLjIgMzYuNi0xMy43IDU0LTIxLjZ6TTI2MS41IDI5OC4zYzE4LjkgOS45IDUzLjYgMTEgNzkuMyAxMC4yIDEuNCA1LjYgMS4zIDEyLjYgMS40IDE5LjQtMzMgMS44LTcyLTYuNC04MC43LTI5LjZ6TTM1My43IDM0NWMtMS43IDQuMy01LjMgOS4zLTkuOCAxMS4xLTEyLjEgNC45LTQ1LjYgOC43LTYyLjQtLjMtMTAuNy01LjctMTcuNS0xOC41LTIzLjQtMjYtMi44LTMuNi0xNi45LTEyLjktLjItMTIuOSAxMy4xIDMyLjcgNTggMjkgOTUuOCAyOC4xeiJdfSxJOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2xpZGVzaGFyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFlNyIsIk0xODcuOSAxNTMuN2MtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43czYxLjctMjYgNjEuNy01Ny43YzAtMzItMjcuNy01Ny43LTYxLjctNTcuN3ptMTQzLjQgMGMtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43IDM0LjMgMCA2MS43LTI2IDYxLjctNTcuNyAuMS0zMi0yNy40LTU3LjctNjEuNy01Ny43em0xNTYuNiA5MGwtNiA0LjMgMC0xOTguM2MwLTI3LjQtMjAuNi00OS43LTQ2LTQ5LjdMNzYuOCAwYy0yNS40IDAtNDYgMjIuMy00NiA0OS43bDAgMTk4LjNjLTItMS40LTQuMy0yLjktNi4zLTQuMy0xNS4xLTEwLjYtMjUuMSA0LTE2IDE3LjcgMTguMyAyMi42IDUzLjEgNTAuMyAxMDYuMyA3Mi01Ni4zIDE5MS43IDEzNy40IDIyMi4zIDEzNC4zIDEyNC4xIDAtLjcgLjMtNTYuNiAuMy05Ni42IDUuMSAxLjEgOS40IDIuMyAxMy43IDMuMSAwIDM5LjcgLjMgOTIuOCAuMyA5My41LTMuMSA5OC4zIDE5MC42IDY3LjcgMTM0LjMtMTI0IDUzLjEtMjEuNyA4OC00OS40IDEwNi4zLTcyIDkuMS0xMy44LS45LTI4LjMtMTYuMS0xNy44em0tMzAuNSAxOS4yYy02OC45IDM3LjQtMTI4LjMgMzEuMS0xNjAuNiAyOS43LTIzLjctLjktMzIuNiA5LjEtMzMuNyAyNC45LTEwLjMtNy43LTE4LjYtMTUuNS0yMC4zLTE3LjEtNS4xLTUuNC0xMy43LTgtMjcuMS03LjctMzEuNyAxLjEtODkuNyA3LjQtMTU3LjQtMjhsMC0xOTIuNGMwLTM0LjkgOC45LTQ1LjcgNDAuNi00NS43bDMxNy43IDBjMzAuMyAwIDQwLjkgMTIuOSA0MC45IDQ1LjdsMCAxOTAuNi0uMSAweiJdfSxOOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidWJlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjQwMiIsIk00MTQuMSAzMkwzMy45IDMyQzE1LjIgMzIgMCA0Ny4yIDAgNjUuOUwwIDQ0NmMwIDE4LjggMTUuMiAzNCAzMy45IDM0TDQxNCA0ODBjMTguNyAwIDMzLjktMTUuMiAzMy45LTMzLjlsMC0zODAuMkM0NDggNDcuMiA0MzIuOCAzMiA0MTQuMSAzMnpNMjM3LjYgMzkxLjFDMTYzIDM5OC42IDk2LjQgMzQ0LjIgODguOSAyNjkuNmw5NC40IDAgMCAyMC40YzAgMy43IDMgNi44IDYuOCA2LjhsNjcuOSAwYzMuNyAwIDYuOC0zIDYuOC02LjhsMC02Ny45YzAtMy43LTMtNi44LTYuOC02LjhsLTY3LjkgMGMtMy43IDAtNi44IDMtNi44IDYuOGwwIDIwLjQtOTQuNCAwYzctNjkuNCA2NS40LTEyMi4yIDEzNS4xLTEyMi4yczEyOC4xIDUyLjggMTM1LjEgMTIyLjJjNy41IDc0LjUtNDYuOSAxNDEuMS0xMjEuNSAxNDguNnoiXX0sRjllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRpZ2l0YWwtb2NlYW4iLGljb246WzUxMiw1MTIsW10sImYzOTEiLCJNODcgNDgxLjhsNzMuNyAwIDAtNzMuNi03My43IDAgMCA3My42ek0yNS40IDM0Ni42bDAgNjEuNiA2MS42IDAgMC02MS42LTYxLjYgMHpNNDkxLjYgMTc2LjlDNDY4LjYgMTAyLjcgNDA5LjIgNDMuNiAzMzUgMjAuMyAxNjQuOS0zMi44IDggOTMuNyA4IDI1NS45bDk1LjggMGMwLTEwMS44IDEwMS0xODAuNSAyMDguMS0xNDEuNyAzOS43IDE0LjMgNzEuNSA0Ni4xIDg1LjggODUuNyAzOS4xIDEwNy0zOS43IDIwNy44LTE0MS40IDIwOGwwIC4zLS4zIDAgMCA5NS44YzE2Mi42IDAgMjg4LjgtMTU2LjggMjM1LjYtMzI3LjF6bS0yMzUuMyAyMzFsMC05NS4zLTk1LjYgMCAwIDk1LjYgOTUuMyAwIDAtLjMgLjMgMHoiXX0sTzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNvdW5kY2xvdWQiLGljb246WzY0MCw1MTIsW10sImYxYmUiLCJNNjQwLjIgMjk4LjZjLTEuMyAyMy4xLTExLjUgNDQuOC0yOC40IDYwLjVzLTM5LjIgMjQuNC02Mi4zIDI0LjFsLTIxOCAwYy00LjggMC05LjQtMi0xMi44LTUuNHMtNS4zLTgtNS4zLTEyLjhsMC0yMzQuOGMtLjItNCAuOS04IDMuMS0xMS40czUuMy02LjEgOS03LjdjMCAwIDIwLjEtMTMuOSA2Mi4zLTEzLjkgMjUuOCAwIDUxLjEgNi45IDczLjMgMjAuMSAxNy4zIDEwLjIgMzIuMyAyMy44IDQ0LjEgNDAuMXMyMCAzNC44IDI0LjIgNTQuNGM3LjUtMi4xIDE1LjMtMy4yIDIzLjEtMy4yIDExLjctLjEgMjMuMyAyLjIgMzQuMiA2LjdzMjAuNSAxMS4zIDI4LjcgMTkuNyAxNC42IDE4LjMgMTguOSAyOS4zIDYuMyAyMi42IDUuOSAzNC4zem0tMzU0LTE1My41Yy4xLTEgMC0yLS4zLTIuOXMtLjgtMS44LTEuNS0yLjYtMS41LTEuMy0yLjQtMS43Yy0xLjgtLjgtNC0uOC01LjggMC0uOSAuNC0xLjcgMS0yLjQgMS43cy0xLjIgMS42LTEuNSAyLjYtLjQgMS45LS4zIDIuOWMtNiA3OC45LTEwLjYgMTUyLjkgMCAyMzEuNiAuMiAxLjcgMSAzLjMgMi4zIDQuNSAyLjYgMi40IDYuOCAyLjQgOS40IDAgMS4zLTEuMiAyLjEtMi44IDIuMy00LjUgMTEuMy03OS40IDYuNi0xNTIgMC0yMzEuNmwuMiAwem0tNDQgMjcuM2MtLjItMS44LTEuMS0zLjUtMi40LTQuN3MtMy4xLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC43Yy03LjkgNjcuOS03LjkgMTM2LjUgMCAyMDQuNCAuMyAxLjggMS4yIDMuNCAyLjUgNC41czMuMSAxLjggNC44IDEuOCAzLjUtLjYgNC44LTEuOCAyLjItMi44IDIuNS00LjVjOC44LTY3LjggOC44LTEzNi41IC4xLTIwNC40bC4xIDB6bS00NC4zLTYuOWMtLjItMS44LTEtMy40LTIuMy00LjZzLTMtMS44LTQuOC0xLjgtMy41IC43LTQuOCAxLjgtMi4xIDIuOC0yLjMgNC42Yy02LjcgNzItMTAuMiAxMzkuMyAwIDIxMS4xIDAgMS45IC43IDMuNyAyLjEgNXMzLjEgMi4xIDUgMi4xIDMuNy0uNyA1LTIuMSAyLjEtMy4xIDIuMS01YzEwLjUtNzIuOCA3LjMtMTM4LjIgLjEtMjExLjFsLS4xIDB6bS00NCAyMC42YzAtMS45LS44LTMuOC0yLjEtNS4ycy0zLjItMi4xLTUuMi0yLjEtMy44IC44LTUuMiAyLjEtMi4xIDMuMi0yLjEgNS4yYy04LjEgNjMuMy04LjEgMTI3LjUgMCAxOTAuOCAuMiAxLjggMSAzLjQgMi40IDQuNnMzLjEgMS45IDQuOCAxLjkgMy41LS43IDQuOC0xLjkgMi4yLTIuOCAyLjQtNC42YzguOC02My4zIDguOS0xMjcuNSAuMy0xOTAuOGwtLjEgMHptLTQ0LjUgNDcuNmMwLTEuOS0uOC0zLjgtMi4xLTUuMXMtMy4yLTIuMS01LjEtMi4xLTMuOCAuOC01LjEgMi4xLTIuMSAzLjItMi4xIDUuMWMtMTAuNSA0OS4yLTUuNSA5My45IC40IDE0My42IC4zIDEuNiAxLjEgMy4xIDIuMyA0LjJzMi44IDEuNyA0LjUgMS43IDMuMi0uNiA0LjUtMS43IDIuMS0yLjUgMi4zLTQuMmM2LjYtNTAuNCAxMS42LTk0LjEgLjQtMTQzLjZ6bS00NC4xLTcuNWMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC44Yy05LjMgNTAuMi02LjIgOTQuNCAuMyAxNDQuNSAuNyA3LjYgMTMuNiA3LjUgMTQuNCAwIDcuMi01MC45IDEwLjUtOTMuOCAuMy0xNDQuNWwtLjIgMHpNMjAuNyAyNTAuOGMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4zIDIuOS0yLjQgNC44Yy04LjUgMzMuNy01LjkgNjEuNiAuNiA5NS40IC4yIDEuNyAxIDMuMyAyLjMgNC40czIuOSAxLjggNC43IDEuOCAzLjQtLjYgNC43LTEuOCAyLjEtMi43IDIuMy00LjRjNy41LTM0LjUgMTEuMi02MS44IC40LTk1LjRsLS4yIDB6Il19LFI5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZmlnbWEiLGljb246WzQ0OCw1MTIsW10sImU3ZTQiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTczLjcgOTZjLTMzIDAtNTkuOCAyNi44LTU5LjggNTkuOCAwIDIxIDEwLjggMzkuNCAyNy4yIDUwLjEtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjFzMTAuOCAzOS41IDI3LjIgNTAuMWMtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjEgMCAzMy4xIDI3LjEgNTkuOCA2MC4xIDU5LjggMzMuMiAwIDYwLjYtMjYuOSA2MC42LTYwLjNsMC01NS43YzEwLjYgOS44IDI0LjggMTUuOCA0MC40IDE1LjhsMS4xIDBjMzMgMCA1OS44LTI2LjggNTkuOC01OS44IDAtMjEtMTAuOC0zOS41LTI3LjItNTAuMSAxNi40LTEwLjcgMjcuMi0yOS4xIDI3LjItNTAuMSAwLTMzLTI2LjgtNTkuOC01OS44LTU5LjhMMTczLjcgOTZ6bTQxLjYgMjE5LjhsMCAzOS45YzAgMjIuNi0xOC42IDQxLTQxLjMgNDEtMjIuNCAwLTQwLjctMTguMi00MC43LTQwLjUgMC0yMi4zIDE4LjEtNDAuNCA0MC4zLTQwLjRsNDEuNyAwem0wLTEwMC4zbDAgODAuOS00MS43IDBjLTIyLjMtLjEtNDAuMy0xOC4yLTQwLjMtNDAuNSAwLTIyLjMgMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDB6bTYwLjggMGMyMi4zIDAgNDAuNSAxOC4xIDQwLjUgNDAuNXMtMTguMSA0MC41LTQwLjUgNDAuNWwtMS4xIDBjLTIyLjMgMC00MC40LTE4LjEtNDAuNC00MC41czE4LjEtNDAuNSA0MC40LTQwLjVsMS4xIDB6bS02MC44LTE5LjNsLTQxLjYgMGMtMjIuMyAwLTQwLjUtMTguMS00MC41LTQwLjRzMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDAgMCA4MC45em02MC44LTgwLjljMjIuMyAwIDQwLjUgMTguMSA0MC41IDQwLjVzLTE4LjEgNDAuNC00MC41IDQwLjRsLTQxLjUgMCAwLTgwLjkgNDEuNSAweiJdfSxCOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1zYSIsaWNvbjpbNTEyLDUxMixbXSwiZjRlZiIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTE0NS43IDIyMWMxMy04My45IDgwLjUtOTUuNyAxMDguOS05NS43IDk5LjggMCAxMjcuNSA4Mi41IDEyNy41IDEzNC4yIDAgNjMuNi00MSAxMzIuOS0xMjguOSAxMzIuOS0zOC45IDAtOTkuMS0yMC0xMDkuNC05N2w2Mi41IDBjMS41IDMwLjEgMTkuNiA0NS4yIDU0LjUgNDUuMiAyMy4zIDAgNTgtMTguMiA1OC04Mi44IDAtODIuNS00OS4xLTgwLjYtNTYuNy04MC42LTMzLjEgMC01MS43IDE0LjYtNTUuOCA0My44bDE4LjIgMC00OS4yIDQ5LjItNDktNDkuMiAxOS40IDB6Il19LEg5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjaHJvbWUiLGljb246WzUxMiw1MTIsW10sImYyNjgiLCJNMCAyNTZjMC00Ni42IDEyLjUtOTAuNCAzNC4zLTEyOC45TDE0NC4xIDMxOC4zYzIxLjkgMzkuMiA2My44IDY1LjcgMTExLjkgNjUuNyAxNC4zIDAgMjcuMS0yLjMgNDAuOC02LjZMMjIwLjUgNTA5LjZDOTUuOSA0OTIuMyAwIDM4NS4zIDAgMjU2em0zNjUuMSA2NS42YzEyLjMtMTkuMiAxOC45LTQyLjUgMTguOS02NS42IDAtMzguMi0xNi44LTcyLjUtNDMuMy05NmwxNTIuNyAwYzEyIDI5LjYgMTguNiA2Mi4xIDE4LjYgOTYgMCAxNDEuNC0xMTQuNiAyNTUuMS0yNTYgMjU2TDM2NS4xIDMyMS42ek00NzcuOCAxMjhMMjU2IDEyOGMtNjIuOSAwLTExMy43IDQ0LjEtMTI1LjUgMTAyLjdMNTQuMiA5OC41QzEwMSAzOC41IDE3NCAwIDI1NiAwIDM1MC44IDAgNDMzLjUgNTEuNSA0NzcuOCAxMjh6TTM0NCAyNTZhODggODggMCAxIDEgLTE3NiAwIDg4IDg4IDAgMSAxIDE3NiAweiJdfSxxOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHJhZGUtZmVkZXJhdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjUxMyIsIk0yNTYgOC44YTI0Ny4yIDI0Ny4yIDAgMSAwIDAgNDk0LjQgMjQ3LjIgMjQ3LjIgMCAxIDAgMC00OTQuNHptMCAxMS42YTIzNS42IDIzNS42IDAgMSAxIDAgNDcxLjIgMjM1LjYgMjM1LjYgMCAxIDEgMC00NzEuMnpNNDExLjEgMTYzLjFsMC00Ni44LTE5My44IDAgMCA4MS43LTE1NS4xIDAgMzYuNyA0NiAxMTcuNyAwIDAgMTk2LjggNDguOCAwIDAtMTk1LjggODMuMyAwIDAtNDctODMuMyAwIDAtMzQuOCAxNDUuNyAwIDAtLjF6bS03My4zIDQ1LjFsMCAyMy45LTgyLjkgMCAwIDE5Ny40LTI2LjggMCAwLTE5Ny40LTEyMy44IDAtMjAuMS0yMy45IDE0My45IDAgMC04MC42IDE3MS44IDAgMCAyNC40LTE0NSAwIDAgNTYuMiA4Mi45IDB6bS0xNjEuMy02OWwtMTIuNC0yMC43IDIuMSAyMy44LTIzLjUgNS40IDIzLjMgNS40LTIuMSAyNCAxMi4zLTIwLjUgMjIuMiA5LjUtMTUuNy0xOC4xIDE1LjgtMTguMS0yMiA5LjN6bS0yOS42LTE5LjdsOS4zLTExLjUtMTIuNyA1LjktOC0xMi40IDEuNyAxMy45LTE0LjMgMy44IDEzLjcgMi43LS44IDE0LjcgNi44LTEyLjIgMTMuOCA1LjMtOS41LTEwLjJ6TTMxMi4zIDI2NC43bC0xMy4xIDUuNi03LjMtMTIuMiAxLjMgMTQuMi0xMy45IDMuMiAxMy45IDMuMi0xLjIgMTQuMiA3LjMtMTIuMiAxMy4xIDUuNS05LjQtMTAuNyA5LjMtMTAuOHptMTA2LjktNzcuMmwtMjAuOSA5LjEtMTItMTkuNiAyLjIgMjIuNy0yMi4zIDUuNCAyMi4yIDQuOS0xLjggMjIuOSAxMS41LTE5LjYgMjEuMiA4LjgtMTUuMS0xNyAxNS0xNy42ek0yNTYgMjkuOWEyMjYuMSAyMjYuMSAwIDEgMCAwIDQ1Mi4yIDIyNi4xIDIyNi4xIDAgMSAwIDAtNDUyLjJ6TTM1MC42IDE5NmwwIDUxLTgzLjMgMCAwIDE5NS43LTUyLjcgMCAwLTE5Ni44LTExNi43IDAtNDAtNDkuOSAxNTcuNCAwIDAtODEuNiAxOTcuOCAwIDAgNTAuNy0xNDUuNyAwIDAgMzAuOSA4My4yIDB6TTI1NiA0My4yYzYwLjMgMCAxMTQuOCAyNSAxNTMuNiA2NS4ybC0xOTkuMSAwIDAgODEuNi0xNTcuNCAwQzgxLjEgMTA0LjggMTYxLjQgNDMuMiAyNTYgNDMuMnptMCA0MjcuMWMtMTE3LjkgMC0yMTMuNi05NS42LTIxMy42LTIxMy41IDAtMjEuMiAzLjEtNDEuOCA4LjktNjEuMWw0My44IDU2LjMgMTE0LjcgMCAwIDE5Ni44IDY0LjYgMCAwLTE5NS44IDgzLjMgMCAwLTYyLjctODMuMiAwIDAtMTkuMiAxNDUuNiAwIDAtNTAuOGMzMC44IDM3IDQ5LjMgODQuNiA0OS4zIDEzNi41IC4xIDExNy45LTk1LjUgMjEzLjUtMjEzLjQgMjEzLjV6TTE4Ni44IDI3NWwtMTEtMjEuNCAxLjcgMjQuNS0yMy43IDMuOSAyMy44IDUuOS0zLjcgMjMuOCAxMy0yMC45IDIxLjUgMTAuOC0xNS44LTE4LjggMTYuOS0xNy4xLTIyLjcgOS4zeiJdfSxWOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmFhZGluIixpY29uOls0NDgsNTEyLFtdLCJmNDA4IiwiTTIyNC41IDE0MC43QzIyNiAxMjMuMSAyMjkuNCA4OCAyNzQuMyA4OGw5OC42IDBjMjAuNyAwIDMyLjEtNy44IDMyLjEtMjEuNmwwLTEyLjNjMC0xMi4yIDkuMy0yMi4xIDIxLjUtMjIuMVM0NDggNDEuOSA0NDggNTQuMWwwIDM2LjVjMCA0Mi45LTIxLjUgNjItNjYuOCA2MmwtMTAwLjUgMGMtMzAuMSAwLTMzIDE0LjctMzMgMjcuMSAwIDEuMy0uMSAyLjUtLjIgMy43LS43IDEyLjMtMTAuOSAyMi4yLTIzLjQgMjIuMnMtMjIuNy05LjgtMjMuNC0yMi4yYy0uMS0xLjItLjItMi40LS4yLTMuNyAwLTEyLjMtMy0yNy4xLTMzLTI3LjFsLTEwMC43IDBDMjEuNSAxNTIuNiAwIDEzMy41IDAgOTAuNkwwIDU0LjFDMCA0MS45IDkuNCAzMiAyMS42IDMyczIxLjUgOS45IDIxLjUgMjIuMWwwIDEyLjNDNDMuMSA4MC4yIDU0LjUgODggNzUuMiA4OGw5OC42IDBjNDQuOCAwIDQ4LjMgMzUuMSA0OS44IDUyLjdsLjkgMHpNMjI0IDQ1NmMxMS41IDAgMjEuNC03IDI1LjctMTYuMyAxLjEtMS44IDk3LjEtMTY5LjYgOTguMi0xNzEuNCAxMS45LTE5LjYtMy4yLTQ0LjMtMjcuMi00NC4zLTEzLjkgMC0yMy4zIDYuNC0yOS44IDIwLjNMMjI0IDM2MiAxNTcuMSAyNDQuM2MtNi40LTEzLjktMTUuOS0yMC4zLTI5LjgtMjAuMy0yNCAwLTM5LjEgMjQuNi0yNy4yIDQ0LjMgMS4xIDEuOSA5Ny4xIDE2OS42IDk4LjIgMTcxLjQgNC4zIDkuMyAxNC4yIDE2LjMgMjUuNyAxNi4zeiJdfSxqOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGV2aWFudGFydCIsaWNvbjpbMzIwLDUxMixbXSwiZjFiZCIsIk0zMjAgOTMuMmwtOTguMiAxNzkuMSA3LjQgOS41IDkwLjggMCAwIDEyNy43LTE2MC45IDAtMTMuNSA5LjItNDMuNyA4NGMtLjMgMC04LjYgOC42LTkuMiA5LjJsLTkyLjcgMCAwLTkzLjIgOTMuMi0xNzkuNC03LjQtOS4yLTg1LjggMCAwLTEyNy42IDE1NiAwIDEzLjUtOS4yIDQzLjctODRjLjMgMCA4LjYtOC42IDkuMi05LjJsOTcuNiAwIDAgOTMuMXoiXX0sQTU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVkaXVtIixpY29uOls0NDgsNTEyLFs2MjQwNywibWVkaXVtLW0iXSwiZjIzYSIsIk0zNjkuNCAzMmM0My40IDAgNzguNiAzNS4yIDc4LjYgNzguNmwwIDgzLjhjLTEuOS0uMS0zLjgtLjItNS43LS4ybC0uNCAwYy0xMCAwLTIyLjMgMi40LTMxLjEgNi44LTEwIDQuNi0xOC43IDExLjUtMjYgMjAuNi0xMS44IDE0LjYtMTguOSAzNC4zLTIwLjYgNTYuNC0uMSAuNy0uMSAxLjMtLjIgMnMtLjEgMS4yLS4xIDEuOWMtLjEgMS4yLS4xIDIuNC0uMSAzLjYgMCAxLjktLjEgMy44IDAgNS44IDEuMiA1MC4xIDI4LjIgOTAuMiA3Ni4zIDkwLjIgMi43IDAgNS4zLS4xIDcuOS0uNGwwIDIwLjRjMCA0My40LTM1LjIgNzguNi03OC42IDc4LjZMNzguNiA0ODBDMzUuMiA0ODAgMCA0NDQuOCAwIDQwMS40TDAgMTEwLjZDMCA2Ny4yIDM1LjIgMzIgNzguNiAzMmwyOTAuOCAwek04Mi4zIDEzOC45bC4zIC4xYzEzLjIgMyAxOS44IDcuNCAxOS44IDIzLjRsMCAxODcuMmMwIDE2LTYuNyAyMC40LTE5LjkgMjMuNGwtLjMgLjEgMCAyLjggNTIuOCAwIDAtMi44LS4zLS4xYy0xMy4yLTMtMTkuOS03LjQtMTkuOS0yMy40bDAtMTc2LjMgODYuMSAyMDIuNSA0LjkgMCA4OC42LTIwOC4yIDAgMTg2LjZjLTEuMSAxMi42LTcuOCAxNi41LTE5LjcgMTkuMmwtLjMgLjEgMCAyLjcgOTEuOSAwIDAtMi43LS4zLS4xYy0xMS45LTIuNy0xOC43LTYuNi0xOS45LTE5LjJsLS4xLTE5MS44IC4xIDBjMC0xNiA2LjctMjAuNCAxOS45LTIzLjRsLjMtLjEgMC0yLjctNzIuMiAwLTY3IDE1Ny40LTY3LTE1Ny40LTc3LjggMCAwIDIuN3pNNDQ4IDM0MC4zYy0yNS4xLTcuNC00My0zNS4xLTQxLjItNjcuOGwwIDAgNDEuMSAwIDAgNjcuOHptLTYuNC0xMzUuNmMyLjMgMCA0LjQgLjMgNi40IC45bDAgNTcuNC00MC4yIDBjMS41LTMzLjYgMTMuNi01Ny45IDMzLjgtNTguM3oiXX0sVTllPUE1LFc5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuY2FydCIsaWNvbjpbNjQwLDUxMixbXSwiZjIzZCIsIk0zMzEuOCA0NDAuNGE0NS44IDQ1LjggMCAxIDEgOTEuNSAuMyA0NS44IDQ1LjggMCAxIDEgLTkxLjUtLjN6TTE2OS40IDM5NC45YTQ1LjcgNDUuNyAwIDEgMCAuMyA5MS4zIDQ1LjcgNDUuNyAwIDEgMCAtLjMtOTEuM3ptMjkxLjctMjcwYy0zMDIuMiAwLTM3OS4yLTEyLjgtNDYxLjEtOTkuMiAzNC40IDUxLjcgNTMuMyAxNDguOSAzNzMuMSAxNDQuMiAzMzMuMy01IDEzMCA4Ni4xIDcwLjggMTg4LjkgMTg2LjctMTY2LjcgMzE5LjQtMjMzLjkgMTcuMi0yMzMuOXoiXX0sRzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InktY29tYmluYXRvciIsaWNvbjpbNDQ4LDUxMixbXSwiZjIzYiIsIk00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTIzNiAyODcuNWw3Ny41LTE0NS41LTMyLjcgMC00NS44IDkxYy00LjcgOS4zLTkgMTguMy0xMi44IDI2LjhsLTEyLjItMjYuOC00NS4yLTkxLTM1IDAgNzYuNyAxNDMuOCAwIDk0LjUgMjkuNSAwIDAtOTIuOHoiXX0sWTllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxpbmUiLGljb246WzUxMiw1MTIsW10sImYzYzAiLCJNMzExIDE5Ni44bDAgODEuM2MwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTEuMyAwLTIuNC0uNy0zLTEuNUwyNTQgMjMwIDI1NCAyNzguMmMwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTIuMSAwLTMuNy0xLjYtMy43LTMuN2wwLTgxLjNjMC0yLjEgMS42LTMuNyAzLjctMy43bDEyLjkgMGMxLjEgMCAyLjQgLjYgMyAxLjZsMzcuMyA1MC4zIDAtNDguMmMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMTMgMGMyLjEtLjEgMy44IDEuNiAzLjggMy41bDAgLjF6bS05My43LTMuN2wtMTMgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMTMgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC04MS4zYzAtMS45LTEuNi0zLjctMy43LTMuN3ptLTMxLjQgNjguMWwtMzUuNiAwIDAtNjQuNGMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxIC4zIDEuOCAxIDIuNSAuNyAuNiAxLjUgMSAyLjUgMWw1Mi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjMC0xLjktMS42LTMuNy0zLjUtMy43bC4xIDB6bTE5My43LTY4LjFsLTUyLjMgMGMtMS45IDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDEuOSAxLjYgMy43IDMuNyAzLjdsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzLjFjMC0yLjEtMS42LTMuNy0zLjctMy43bC0zNS41IDAgMC0xMy42IDM1LjUgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNyAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjLS4xLTEuOS0xLjctMy43LTMuNy0zLjdsLjEgMHpNNTEyIDkzLjRsMCAzMjZjLS4xIDUxLjItNDIuMSA5Mi43LTkzLjQgOTIuNmwtMzI2IDBDNDEuNCA1MTEuOS0uMSA0NjkuOCAwIDQxOC42bDAtMzI2Qy4xIDQxLjQgNDIuMi0uMSA5My40IDBsMzI2IDBjNTEuMiAuMSA5Mi43IDQyLjEgOTIuNiA5My40ek00NDEuNiAyMzMuNWMwLTgzLjQtODMuNy0xNTEuMy0xODYuNC0xNTEuM1M2OC44IDE1MC4xIDY4LjggMjMzLjVjMCA3NC43IDY2LjMgMTM3LjQgMTU1LjkgMTQ5LjMgMjEuOCA0LjcgMTkuMyAxMi43IDE0LjQgNDIuMS0uOCA0LjctMy44IDE4LjQgMTYuMSAxMC4xczEwNy4zLTYzLjIgMTQ2LjUtMTA4LjJjMjctMjkuNyAzOS45LTU5LjggMzkuOS05My4xbDAtLjJ6Il19LFo5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhbWlsaWEiLGljb246WzQ0OCw1MTIsW10sImYzNmQiLCJNMjQwLjIgMzJjLTYxLjkgMC0xMzEuNSAxNi45LTE4NC4yIDU1LjQtNS4xIDMuMS05LjEgOS4yLTcuMiAxOS40IDEuMSA1LjEgNS4xIDI3LjQgMTAuMiAzOS42IDQuMSAxMC4yIDE0LjIgMTAuMiAyMC4zIDYuMSAzMi41LTIyLjMgOTYuNS00Ny43IDE1Mi4zLTQ3LjcgNTcuOSAwIDU4LjkgMjguNCA1OC45IDczLjFsMCAzOC41QzIwMy4xIDIyNy43IDc4LjMgMjUxIDQ2LjggMjY0LjIgMTEuMyAyODAuNSAxNi40IDM1Ny43IDE2LjQgMzc2UzMxLjYgNDgwIDE0MS4zIDQ4MGM0Ny44IDAgMTEzLjctMjAuNyAxNTMuMy00Mi4xbDAgMjUuNGMwIDMgMi4xIDguMiA2LjEgOS4xIDMuMSAxIDUwLjcgMiA1OS45IDJzNjIuNSAuMyA2Ni41LS43YzQuMS0xIDUuMS02LjEgNS4xLTkuMWwwLTI5Ni42Yy0uMS04MC4zLTU3LjktMTM2LTE5Mi0xMzZ6bTUwLjIgMzQ4Yy0yMS40IDEzLjItNDguNyAyNC40LTc5LjEgMjQuNC01Mi44IDAtNTguOS0zMy41LTU5LTQ0LjcgMC0xMi4yLTMtNDIuNyAxOC4zLTUyLjkgMjQuMy0xMy4yIDc1LjEtMjkuNCAxMTkuOC0zMy41bDAgMTA2Ljd6Il19LFg5ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhc3ltbWV0cmlrIixpY29uOls1NzYsNTEyLFtdLCJmMzcyIiwiTTUxNy41IDMwOS4yYzM4LjgtNDAgNTguMS04MCA1OC41LTExNi4xIC44LTY1LjUtNTkuNC0xMTguMi0xNjkuNC0xMzUtMTI4LjctMTkuNy0yODguNSAxNS41LTQwNi42IDgyLjQgNTItMjYuNSAxMTAuNi00OC4yIDE3MC43LTU4LjIgNzQuNS0yMC41IDE1My0yNS40IDIyMS4zLTE0LjggMTUyLjUgMjMuOCAxOTYuOCAxMjcuNSA5OC44IDIzMS43LTEwLjIgMTAuOC0yMiAyMS4xLTM1IDMwLjZMMzA0LjkgMTAzLjQgMTE0LjcgMzg4LjljLTY1LjYtMjkuNC03Ni41LTkwLjItMTkuMS0xNTEuMiAyMC44LTIyLjIgNDguMy00MS45IDc5LjUtNTguMSAyMC0xMi4yIDM5LjctMjIuNiA2Mi0zMC43LTY1LjEgMjAuMy0xMjIuNyA1Mi45LTE2MS42IDkyLjktMjcuNyAyOC42LTQxLjQgNTcuMS00MS43IDgyLjktLjUgMzUuMSAyMy40IDY1LjEgNjguNCA4M2wtMzQuNSA1MS43IDEwMS42IDAgMjItMzQuNGMyMi4yIDEgNDUuMyAwIDY4LjYtMi43bC0yMi44IDM3LjEgMTM1LjUgMC0zMi42LTUzLjFjMTguNi01LjMgMzYuOS0xMS41IDU0LjUtMTguN2w0NS45IDcxLjggMTAxLjYgMC03My40LTExMC40YzE4LjUtMTIuMSAzNS0yNS41IDQ4LjktMzkuOHpNMzI5LjkgMzg5LjdsLTI1LTQwLjYtMzIuNyA1My4zYy0yMy40IDMuNS00Ni43IDUuMS02OS4yIDQuNGwxMDEuOS0xNTkuMyA3OC43IDEyM2MtMTcuMiA3LjQtMzUuMyAxMy45LTUzLjcgMTkuMnoiXX0sSzllPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBoYWJyaWNhdG9yIixpY29uOls1MTIsNTEyLFtdLCJmM2RiIiwiTTMzMS4xIDI2Mi4xbC0uMS0xM3MyMS43LTE5LjggMjEuMS0yMS4ybC05LjUtMjBjLS42LTEuNC0yOS41LS41LTI5LjUtLjVsLTkuNC05LjNzLjItMjguNS0xLjItMjkuMWwtMjAuMS05LjJjLTEuNC0uNi0yMC43IDIxLTIwLjcgMjFsLTEzLjEtLjJzLTIwLjUtMjEuNC0yMS45LTIwLjhsLTIwIDguM2MtMS40IC41IC4yIDI4LjkgLjIgMjguOWwtOS4xIDkuMXMtMjkuMi0uOS0yOS43IC40TDE2MCAyMjYuM2MtLjYgMS40IDIxIDIxIDIxIDIxbC4xIDEyLjlTMTU5LjQgMjgwIDE2MCAyODEuNGw5LjUgMjBjLjYgMS40IDI5LjUgLjUgMjkuNSAuNWw5LjQgOS4zcy0uMiAzMS44IDEuMiAzMi4zbDIwLjEgOC4zYzEuNCAuNiAyMC43LTIzLjUgMjAuNy0yMy41bDEzLjEgLjJzMjAuNSAyMy44IDIxLjggMjMuM2wyMC03LjVjMS40LS42LS4yLTMyLjEtLjItMzIuMWw5LjEtOS4xczI5LjIgLjkgMjkuNy0uNWw4LjEtMTkuOGMuNy0xLjEtMjAuOS0yMC43LTIwLjktMjAuN3ptLTQ0LjktOC43Yy43IDE3LjEtMTIuOCAzMS42LTMwLjEgMzIuNHMtMzIuMS0xMi41LTMyLjgtMjkuNiAxMi44LTMxLjYgMzAuMS0zMi4zYzE3LjMtLjggMzIuMSAxMi41IDMyLjggMjkuNXptMjAxLjItMzcuOWwtOTctOTctLjEgLjFjLTc1LjEtNzMuMy0xOTUuNC03Mi44LTI2OS44IDEuNi01MC45IDUxLTI3LjggMjcuOS05NS43IDk1LjMtMjIuMyAyMi4zLTIyLjMgNTguNyAwIDgxIDY5LjkgNjkuNCA0Ni40IDQ2IDk3LjQgOTdsLjEtLjFjNzUuMSA3My4zIDE5NS40IDcyLjkgMjY5LjgtMS42IDUxLTUwLjkgMjcuOS0yNy45IDk1LjMtOTUuMyAyMi4zLTIyLjMgMjIuMy01OC43IDAtODF6TTM2My41IDE0OC4yYTE1Mi4zIDE1Mi4zIDAgMSAxIC0yMTUgMjE1LjYgMTUyLjMgMTUyLjMgMCAxIDEgMjE1LTIxNS42eiJdfSxROWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYm90cyIsaWNvbjpbNjQwLDUxMixbXSwiZTM0MCIsIk04Ni4zIDE5Ny44Yy04LS4xLTE1LjkgMS43LTIzLjEgNS4xcy0xMy41IDguNi0xOC40IDE0LjlsMC02MS45YzAtMi4yLS45LTQuMy0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTI4LjQgMGMtMi4yIDAtNC4zIC45LTUuOCAyLjRTMCAxNTMuOCAwIDE1NkwwIDMzMy42YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNyAxLjcgMS40IDIuNyAxLjggMi4xIC42IDMuMSAuNmwyOC40IDBjMS4xIDAgMi4xLS4yIDMuMS0uNnMxLjktMSAyLjctMS44IDEuNC0xLjcgMS44LTIuNyAuNi0yLjEgLjYtMy4xbDAtOC4xYzExLjYgMTMuNCAyNS45IDE5LjggNDEuNiAxOS44IDM0LjYgMCA2MS45LTI2LjIgNjEuOS03My44IDAtNDUuOS0yNy03My42LTYxLjktNzMuNnpNNzEuNSAzMDUuN2MtOS42IDAtMjEuMi00LjktMjYuNy0xMi41bDAtNDNjNS41LTcuNiAxNy4yLTEyLjggMjYuNy0xMi44IDE3LjcgMCAzMS4xIDEzLjEgMzEuMSAzNCAwIDIxLjItMTMuNCAzNC4zLTMxLjEgMzQuM3ptMTU2LjQtNTlhMTcuNCAxNy40IDAgMSAwIDAgMzQuOCAxNy40IDE3LjQgMCAxIDAgMC0zNC44em00Ni4xLTkwbDAtNDQuN2MyLjgtMS4yIDUuMi0zLjMgNi42LTZzMS45LTUuOCAxLjMtOC45LTIuMi01LjctNC42LTcuNy01LjQtMy04LjQtMy02LjEgMS4xLTguNCAzLTQgNC43LTQuNiA3LjctLjEgNi4xIDEuMyA4LjkgMy44IDQuOCA2LjYgNmwwIDQ0LjdjLTI4IDEuMy01NC40IDEzLjYtNzMuNiAzNC4xcy0yOS41IDQ3LjctMjguOCA3NS44IDEyLjMgNTQuNyAzMi40IDc0LjMgNDcgMzAuNiA3NS4xIDMwLjYgNTUtMTEgNzUuMS0zMC42IDMxLjctNDYuMyAzMi40LTc0LjMtOS43LTU1LjMtMjguOC03NS44LTQ1LjUtMzIuOC03My42LTM0LjF6bTg2IDEwNy40YzAgMzAuNS00MC44IDU1LjMtOTEuMSA1NS4zcy05MS4xLTI0LjctOTEuMS01NS4zIDQwLjgtNTUuMyA5MS4xLTU1LjMgOTEuMSAyNC43IDkxLjEgNTUuM2wwIDB6bS01MC4yIDE3LjRjMy40IDAgNi44LTEgOS43LTIuOXM1LjEtNC42IDYuNC03LjggMS43LTYuNyAxLTEwLjEtMi4zLTYuNS00LjgtOC45LTUuNS00LjEtOC45LTQuOC02LjktLjMtMTAuMSAxLTUuOSAzLjUtNy44IDYuNC0yLjkgNi4yLTIuOSA5LjdjMCA0LjYgMS44IDkgNS4xIDEyLjNzNy43IDUuMSAxMi4zIDUuMWwwIDB6bTI3MC45LTMxYy0xNC44LTIuNi0yMi40LTMuOC0yMi40LTkuOSAwLTUuNSA3LjMtOS45IDE3LjctOS45IDEyLjIgLjEgMjQuMiAzLjYgMzQuNSAxMC4xIDEuOCAxLjIgNCAxLjYgNi4yIDEuMXM0LTEuNyA1LjEtMy42Yy4xLS4xIC4xLS4yIC4yLS4zbDguNi0xNC45YzEuMS0xLjkgMS40LTQuMSAuOC02LjFzLTEuOS0zLjktMy43LTVjLTE1LjctOS40LTMzLjctMTQuMy01Mi0xNC4xLTM5IDAtNjAuMiAyMS41LTYwLjIgNDYuMiAwIDM2LjMgMzMuNyA0MS45IDU3LjYgNDUuNiAxMy40IDIuMyAyNC4xIDQuNCAyNC4xIDExIDAgNi40LTUuNSAxMC44LTE4LjkgMTAuOC0xMy42IDAtMzEtNi4yLTQyLjYtMTMuNi0uOS0uNi0xLjktMS0zLTEuMnMtMi4xLS4yLTMuMiAuMS0yLjEgLjctMi45IDEuMy0xLjYgMS40LTIuMiAyLjNjMCAuMS0uMSAuMS0uMSAuMmwtMTAuMiAxNi45Yy0xLjEgMS44LTEuNCA0LTEgNnMxLjcgMy45IDMuNSA1YzE1LjIgMTAuMyAzNy43IDE2LjcgNTkuNCAxNi43IDQwLjQgMCA2NC0xOS44IDY0LTQ2LjUgMC0zOC4xLTM1LjUtNDMuOS01OS4zLTQ4LjN6bS05NS45IDYwLjhjLS41LTItMS44LTMuNy0zLjYtNC44cy0zLjktMS41LTUuOS0xLjFjLTEuNCAuMy0yLjggLjQtNC4yIC40LTcuOCAwLTEyLjUtNi4xLTEyLjUtMTQuMmwwLTUxLjIgMjAuMyAwYzIuMiAwIDQuMi0uOSA1LjgtMi40czIuNC0zLjYgMi40LTUuOGwwLTIyLjdjMC0yLjItLjktNC4yLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjAuMyAwIDAtMzAuMmMwLTIuMi0uOS00LjItMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yOC4yIDBjLTIuMiAwLTQuMiAuOS01LjggMi40cy0yLjQgMy42LTIuNCA1LjhsMCAzMC4yLTE1LjEgMGMtMS4xIDAtMi4xIC4yLTMuMSAuNnMtMS45IDEtMi42IDEuOC0xLjQgMS43LTEuOCAyLjYtLjYgMi0uNiAzLjFsMCAyMi43YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNiAxLjcgMS40IDIuNiAxLjggMiAuNiAzLjEgLjZsMTUuMSAwIDAgNjMuN2MwIDI3IDE1LjQgNDEuMyA0My45IDQxLjMgMTIuMiAwIDIxLjQtMi4yIDI3LjYtNS40IDEuNi0uOCAyLjktMi4yIDMuNy0zLjlzLjktMy42IC41LTUuNGwtNS0xOS4zeiJdfSxKOWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmluZSIsaWNvbjpbMzg0LDUxMixbXSwiZjFjYSIsIk0zODQgMjU0LjdsMCA1Mi4xYy0xOC40IDQuMi0zNi45IDYuMS01Mi4xIDYuMS0zNi45IDc3LjQtMTAzIDE0My44LTEyNS4xIDE1Ni4yLTE0IDcuOS0yNy4xIDguNC00Mi43LS44LTI3LjEtMTYuMy0xMjkuOS0xMDAuNi0xNjQuMS0zNjUuNmw3NC41IDBjMTguNyAxNTkuMSA2NC41IDI0MC43IDExNC44IDMwMS44IDI3LjktMjcuOSA1NC44LTY1LjEgNzUuNi0xMDYuOS00OS44LTI1LjMtODAuMS04MC45LTgwLjEtMTQ1LjYgMC02NS42IDM3LjctMTE1LjEgMTAyLjItMTE1LjEgMTE0LjkgMCAxMDYuMiAxMjcuOSA4MS42IDE4MS41IDAgMC00Ni40IDkuMi02My41LTIwLjUgMy40LTExLjMgOC4yLTMwLjggOC4yLTQ4LjUgMC0zMS4zLTExLjMtNDYuNi0yOC40LTQ2LjYtMTguMiAwLTMwLjggMTcuMS0zMC44IDUwIC4xIDc5LjIgNTkuNCAxMTguNyAxMjkuOSAxMDEuOXoiXX0sZXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1lZHJ0IixpY29uOls1NzYsNTEyLFtdLCJmM2M4IiwiTTEyOS43IDI1NmMwIDEyMS44IDgzLjkgMjIyLjggMTkzLjUgMjQxLjEtMTguNyA0LjUtMzguMiA2LjktNTguMiA2LjktMTM3LjYgMC0yNDktMTExLTI0OS0yNDhTMTI3LjQgOCAyNjQuOSA4YzIwLjEgMCAzOS42IDIuNCA1OC4yIDYuOS0xMDkuNiAxOC4zLTE5My40IDExOS4zLTE5My40IDI0MS4xek00MjcuMSAzNTYuM2MtNzcuNyA1NS40LTE3OS42IDQ3LjUtMjQwLjQtMTQuNiA1LjUgMTQuMSAxMi43IDI3LjcgMjEuNyA0MC41IDYxLjYgODguMiAxODIuNCAxMDkuMyAyNjkuNyA0N3MxMDguMS0xODQuMyA0Ni41LTI3Mi42Yy05LTEyLjktMTkuMy0yNC4zLTMwLjUtMzQuMiAzNy40IDc4LjggMTAuNyAxNzguNS02NyAyMzMuOXptLTIxOC44LTI0NGMtMS40IDEtMi43IDIuMS00IDMuMSA2NC4zLTE3LjggMTM1LjkgNCAxNzguOSA2MC41IDM1LjcgNDcgNDIuOSAxMDYuNiAyNC40IDE1OCA1Ni43LTU2LjIgNjcuNi0xNDIuMSAyMi4zLTIwMS44LTUwLTY1LjUtMTQ5LjEtNzQuNC0yMjEuNi0xOS44ek0zMTIgMjI0Yy00LjQgMC04LTMuNi04LThsMC00MGMwLTQuNC0zLjYtOC04LThsLTQ4IDBjLTQuNCAwLTggMy42LTggOGwwIDQwYzAgNC40LTMuNiA4LTggOGwtNDAgMGMtNC40IDAtOCAzLjYtOCA4bDAgNDhjMCA0LjQgMy42IDggOCA4bDQwIDBjNC40IDAgOCAzLjYgOCA4bDAgNDBjMCA0LjQgMy42IDggOCA4bDQ4IDBjNC40IDAgOC0zLjYgOC04bDAtNDBjMC00LjQgMy42LTggOC04bDQwIDBjNC40IDAgOC0zLjYgOC04bDAtNDhjMC00LjQtMy42LTgtOC04bC00MCAweiJdfSx0dWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToib3NpIixpY29uOls1MTIsNTEyLFtdLCJmNDFhIiwiTTggMjY2LjRjMi4zLTEzNS44IDk3LjQtMjMyLjQgMjEzLjgtMjQ4LjEgMTM4LjgtMTguNiAyNTUuNiA3NS44IDI3OCAyMDEuMSAyMS4zIDExOC44LTQ0IDIzMC0xNTEuNiAyNzQtOS4zIDMuOC0xNC40IDEuNy0xOC03LjctMTcuOC00Ni4zLTM1LjYtOTIuNi01My40LTEzOS0zLjEtOC4xLTEtMTMuMiA3LTE2LjggMjQuMi0xMSAzOS4zLTI5LjQgNDMuMy01NS44IDEuNS05LjcgMS0xOS42LTEuNS0yOS4xcy02LjktMTguNC0xMi45LTI2LjEtMTMuNi0xNC4xLTIyLjItMTguOC0xOC4xLTcuNS0yNy45LTguM2MtMzktMy40LTcxLjggMjMuNy03Ny41IDU5LjctNS4yIDMzIDExLjEgNjMuNyA0MS45IDc3LjcgOS42IDQuNCAxMS41IDguNiA3LjggMTguNC0xNy45IDQ2LjYtMzUuOCA5My4yLTUzLjcgMTM5LjktMi42IDYuOS04LjMgOS4zLTE1LjUgNi41LTUyLjYtMjAuMy0xMDEuNC02MS0xMzAuOC0xMTktMjQuOS00OS4yLTI1LjItODcuNy0yNi44LTEwOC43em0yMC45LTEuOWMuNCA2LjYgLjYgMTQuMyAxLjMgMjIuMSA2LjMgNzEuOSA0OS42IDE0My41IDEzMSAxODMuMSAzLjIgMS41IDQuNCAuOCA1LjYtMi4zIDE0LjktMzkuMSAyOS45LTc4LjIgNDUtMTE3LjMgMS4zLTMuMyAuNi00LjgtMi40LTYuNy0zMS42LTE5LjktNDcuMy00OC41LTQ1LjYtODYgMS0yMS42IDkuMy00MC41IDIzLjgtNTYuMyAzMC0zMi43IDc3LTM5LjggMTE1LjUtMTcuNiAxNS42IDkgMjguMiAyMi4zIDM2LjIgMzguNHMxMS4yIDM0LjIgOSA1MmMtMy42IDMwLjYtMTkuMyA1My45LTQ1LjcgNjkuOC0yLjcgMS42LTMuNSAyLjktMi4zIDYgMTUuMiAzOS4yIDMwLjMgNzguNCA0NS4yIDExNy43IDEuMiAzLjEgMi40IDMuOCA1LjYgMi4zIDM1LjUtMTYuNiA2NS4yLTQwLjMgODguMS03MiAzNC44LTQ4LjIgNDkuMS0xMDEuOSA0Mi4zLTE2MS0xMy43LTExNy41LTExOS40LTIxNC44LTI1NS41LTE5OC0xMDYuMSAxMy0xOTUuMyAxMDIuNS0xOTcuMSAyMjUuOHoiXX0sYXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdnIixpY29uOls1MTIsNTEyLFtdLCJmMjYwIiwiTTE3OS4yIDIzMC40bDEwMi40IDEwMi40LTEwMi40IDEwMi40LTE3OS4yLTE3OS4yIDE3OS4yLTE3OS4yIDQ0LjggNDQuOC0yNS42IDI1LjYtMTkuMi0xOS4yLTEyOCAxMjggMTI4IDEyOCA1MS41LTUxLjUtNzcuMS03Ni41IDI1LjYtMjUuNnpNMzMyLjggNzYuOGwtMTAyLjQgMTAyLjQgMTAyLjQgMTAyLjQgMjUuNi0yNS42LTc3LjEtNzYuNSA1MS41LTUxLjUgMTI4IDEyOC0xMjggMTI4LTE5LjItMTkuMi0yNS42IDI1LjYgNDQuOCA0NC44IDE3OS4yLTE3OS4yLTE3OS4yLTE3OS4yeiJdfSxpdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYnV5c2VsbGFkcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjIwZCIsIk0yMjQgMTUwLjdsNDIuOSAxNjAuNy04NS44IDAgNDIuOS0xNjAuN3pNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzgyLjcgNDA1LjNsLTk0LjUtMjk4LjctMTI4LjQgMC05NC41IDI5OC43IDkwLjcgMCAxMTEuNy05MS42IDI0LjIgOTEuNiA5MC44IDB6Il19LHJ1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtcGx1cyIsaWNvbjpbNTEyLDUxMixbXSwiZjJiMyIsIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE4NS4zIDM4MGMtMzIuOSAwLTY0LjQtMTMuMS04Ny43LTM2LjNzLTM2LjMtNTQuOC0zNi4zLTg3LjcgMTMuMS02NC40IDM2LjMtODcuNyA1NC44LTM2LjMgODcuNy0zNi4zYzMxLjMgMCA2MC4xIDExIDgzIDMyLjNsLTMzLjYgMzIuNmMtMTMuMi0xMi45LTMxLjMtMTkuMS00OS40LTE5LjEtNDIuOSAwLTc3LjIgMzUuNS03Ny4yIDc4LjFTMTQyLjMgMzM0IDE4NS4zIDMzNGMzMi42IDAgNjQuOS0xOS4xIDcwLjEtNTMuM2wtNzAuMSAwIDAtNDIuNiAxMTYuOSAwYzEuMyA2LjggMS45IDEzLjggMS45IDIwLjcgMCA3MC44LTQ3LjUgMTIxLjItMTE4LjggMTIxLjJ6TTQxNS41IDI3My44bDAgMzUuNS0zNS41IDAgMC0zNS41LTM1LjUgMCAwLTM1LjUgMzUuNSAwIDAtMzUuNSAzNS41IDAgMCAzNS41IDM1LjIgMCAwIDM1LjUtMzUuMiAweiJdfSxzdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2NyZWVucGFsIixpY29uOls1MTIsNTEyLFtdLCJlNTcwIiwiTTI3OC42IDIyLjVhMjIuNSAyMi41IDAgMSAxIC00NSAwIDIyLjUgMjIuNSAwIDEgMSA0NSAwek0xOTguNyAyNTlhNTcuNCA1Ny40IDAgMSAxIDExNC44IDAgNTcuNCA1Ny40IDAgMSAxIC0xMTQuOCAwem0xMzguNiA5MWMyMi4zLTE5LjkgMzYuNS00Ny4zIDM5LjktNzdsMTE5LjUgMGMtMy41IDYxLjQtMzAuNCAxMTkuMi03NS4yIDE2MS40LTQ0LjcgNDIuMi0xMDMuOSA2NS44LTE2NS40IDY1LjhTMTM1LjQgNDc2LjYgOTAuNyA0MzQuNEM0NS45IDM5Mi4yIDE5LjEgMzM0LjQgMTUuNSAyNzNsMTE5LjcgMGMzLjQgMjkuNyAxNy42IDU3LjEgMzkuOSA3N3M1MS4yIDMwLjkgODEuMSAzMC45YzI5IDAgNTguNy0xMSA4MS4xLTMwLjl6TTI4LjMgMTQxLjdhMjIuNSAyMi41IDAgMSAxIDQ1LTEuNCAyMi41IDIyLjUgMCAxIDEgLTQ1IDEuNHptNDU1LjYtLjdhMjIuNCAyMi40IDAgMSAxIC00NC45IDAgMjIuNCAyMi40IDAgMSAxIDQ0LjkgMHpNMzE4IDk1LjNjLTE3LjMgMTMuOC0zOS4yIDIyLjgtNjEuOSAyMi44cy00NC42LTktNjEuOS0yMi44Yy0xNy4zLTE0LjctMjguOC0zNS4xLTMyLjQtNTcuNSAxNS4xLTYuNCAzMC44LTExLjMgNDYuOS0xNC41IDAgMTIuNiA1IDI0LjYgMTMuOSAzMy41czIwLjkgMTMuOSAzMy41IDEzLjkgMjQuNi01IDMzLjUtMTMuOSAxMy45LTIwLjkgMTMuOS0zMy41YzE2LjEgMy4yIDMxLjggOC4xIDQ2LjkgMTQuNS0zLjYgMjIuNC0xNS4xIDQyLjgtMzIuNCA1Ny41ek04Mi45IDIzMWMtMjEuNCA3LjYtNDQuNyA3LjQtNjUuOS0uNiAyLTE2LjMgNS42LTMyLjMgMTAuOC00Ny45IDUuNCAzLjEgMTEuMyA1LjEgMTcuNSA2IDYuMiAuOCAxMi40IC40IDE4LjUtMS4yIDYtMS43IDExLjYtNC40IDE2LjYtOC4yczkuMS04LjUgMTIuMi0xMy45IDUuMS0xMS40IDYtMTcuNWMuOC02LjIgLjQtMTIuNS0xLjItMTguNXMtNC40LTExLjYtOC4yLTE2LjZjLTMuOC00LjktOC41LTkuMS0xMy45LTEyLjIgMTAuOC0xMi4zIDIyLjktMjMuNSAzNi0zMy4zIDE3LjYgMTQuMyAyOS41IDM0LjUgMzMuNiA1Ni44cy4xIDQ1LjQtMTEuMiA2NWMtMTEuNCAxOS42LTI5LjQgMzQuNS01MC43IDQyLjF6bTM0Ni40IC4xYy0yMS4zLTcuNi0zOS4zLTIyLjYtNTAuNy00Mi4yLTExLjMtMTkuNi0xNS4yLTQyLjctMTEuMS02NSA0LjEtMjIuMiAxNi00Mi40IDMzLjUtNTYuNyAxMy4xIDkuOCAyNS4yIDIxIDM2IDMzLjMtMTAuNyA2LjQtMTguNCAxNi43LTIxLjUgMjguOC0zLjIgMTItMi4zIDI0LjggNC44IDM1LjYgNi4yIDEwLjggMTYuNCAxOC43IDI4LjQgMjJzMjQuOSAxLjcgMzUuNy00LjNjNS4zIDE1LjUgOC45IDMxLjYgMTAuOSA0Ny44LTIyLjEgOC4xLTQ0LjYgOC4zLTY2IC43eiJdfSxudWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYml0Y29pbiIsaWNvbjpbNTEyLDUxMixbXSwiZjM3OSIsIk04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNTQuMy0zNS4zYzQuOS0zMy0yMC4yLTUwLjctNTQuNi02Mi42bDExLjEtNDQuNy0yNy4yLTYuOC0xMC45IDQzLjVjLTcuMi0xLjgtMTQuNS0zLjUtMjEuOC01LjFsMTAuOS00My44LTI3LjItNi44LTExLjIgNDQuN2MtNS45LTEuMy0xMS43LTIuNy0xNy40LTQuMWwwLS4xLTM3LjUtOS40LTcuMiAyOS4xczIwLjIgNC42IDE5LjggNC45YzExIDIuOCAxMyAxMCAxMi43IDE1LjhsLTEyLjcgNTAuOWMuOCAuMiAxLjcgLjUgMi44IC45LS45LS4yLTEuOS0uNS0yLjktLjdsLTE3LjggNzEuM2MtMS4zIDMuMy00LjggOC40LTEyLjUgNi41IC4zIC40LTE5LjgtNC45LTE5LjgtNC45bC0xMy41IDMxLjEgMzUuNCA4LjhjNi42IDEuNyAxMyAzLjQgMTkuNCA1bC0xMS4zIDQ1LjIgMjcuMiA2LjggMTEuMi00NC43YzcuMiAyIDE0LjQgMy44IDIxLjcgNS42bC0xMS4xIDQ0LjUgMjcuMiA2LjggMTEuMy00NS4xYzQ2LjQgOC44IDgxLjMgNS4yIDk2LTM2LjcgMTEuOC0zMy44LS42LTUzLjMtMjUtNjYgMTcuOC00LjEgMzEuMi0xNS44IDM0LjctMzkuOXptLTYyLjIgODcuMmMtOC40IDMzLjgtNjUuMyAxNS41LTgzLjggMTAuOWwxNC45LTU5LjljMTguNCA0LjYgNzcuNiAxMy43IDY4LjggNDl6bTguNC04Ny43Yy03LjcgMzAuNy01NSAxNS4xLTcwLjQgMTEuM2wxMy41LTU0LjNjMTUuNCAzLjggNjQuOCAxMSA1Ni44IDQzeiJdfSxvdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3dpZnQiLGljb246WzQ0OCw1MTIsW10sImY4ZTEiLCJNNDQ4IDE1Ni4xYzAtNC41LS4xLTktLjItMTMuNS0uMS05LjktMS0xOS43LTIuNi0yOS40LTEuNy05LjctNC44LTE5LjItOS4yLTI4LTktMTcuNy0yMy40LTMyLjEtNDEuMi00MS4xLTguOC00LjUtMTguMy03LjYtMjgtOS4yLTkuNy0xLjYtMTkuNi0yLjUtMjkuNC0yLjYtNC41LS4xLTktLjItMTMuNS0uMkwxMjQuMSAzMmMtNC41IDAtOSAuMS0xMy41IC4yLTIuNCAuMS00LjkgLjItNy40IC4zLTcuNCAuMy0xNC44IDEuMS0yMi4xIDIuMy03LjMgMS4zLTE0LjQgMy4zLTIxLjIgNi4xLTIuMyAxLTQuNiAyLTYuOCAzLjEtNi42IDMuNC0xMi44IDcuNS0xOC40IDEyLjMtMS45IDEuNi0zLjcgMy4zLTUuNCA1LTcgNy0xMi45IDE1LTE3LjQgMjMuOC00LjQgOC44LTcuNiAxOC4zLTkuMiAyOC0xLjYgOS43LTIuNCAxOS42LTIuNSAyOS40LS4xIDQuNS0uMiA5LS4yIDEzLjVMMCAzNTUuOWMwIDQuNSAuMSA5IC4yIDEzLjUgLjEgOS45IDEgMTkuNyAyLjYgMjkuNCAxLjcgOS43IDQuOCAxOS4yIDkuMiAyOCA5IDE3LjcgMjMuNCAzMi4xIDQxLjEgNDEuMSA4LjggNC40IDE4LjMgNy41IDI4IDkuMiA5LjcgMS42IDE5LjYgMi41IDI5LjQgMi42IDQuNSAuMSA5IC4yIDEzLjUgLjJsMTk5LjggMGM0LjUgMCA5LS4xIDEzLjUtLjIgOS45LS4xIDE5LjctMSAyOS40LTIuNiA5LjctMS43IDE5LjItNC44IDI4LTkuMiAxNy43LTkgMzIuMS0yMy40IDQxLjEtNDEuMiA0LjQtOC44IDcuNi0xOC4zIDkuMi0yOCAxLjYtOS43IDIuNS0xOS42IDIuNi0yOS40IC4xLTQuNSAuMi05IC4yLTEzLjVsMC0xODMuOGMwLTUuNCAwLTEwLjcgMC0xNnptLTY5LjkgMjQxYy0yMC0zOC45LTU3LjItMjkuMy03Ni4zLTE5LjUtMS43IDEtMy41IDItNS4yIDNsLS40IC4yYy0zOS41IDIxLTkyLjUgMjIuNS0xNDUuOC0uNC00My40LTE4LjgtODAuMS01MC4zLTEwNS4zLTkwLjQgMTIuMyA5LjEgMjUuNCAxNi45IDM5LjIgMjMuNCA1Ni40IDI2LjQgMTEzIDI0LjUgMTUzIDAtNTctNDMuOC0xMDQuNi0xMDEtMTQxLjEtMTQ3LjItNy04LjEtMTMuMi0xNi44LTE4LjgtMjUuOSA0My43IDQwIDExMi43IDkwLjIgMTM3LjUgMTA0LjEtNTIuNi01NS41LTk4LjktMTIzLjktOTYuNy0xMjEuNyA4Mi44IDgzLjQgMTU5LjIgMTMwLjYgMTU5LjIgMTMwLjYgMi45IDEuNiA1IDIuOCA2LjcgNCAxLjYtNC4xIDMtOC4yIDQuMi0xMi41IDEzLjItNDguMy0xLjctMTAzLjYtMzUuMy0xNDkuMiA3Ni44IDQ2LjEgMTIyLjIgMTMzLjcgMTAzLjYgMjA3LjgtLjQgMS43LTEgMy40LTEuNCA1LjEgMzguNSA0Ny40IDI4IDk4LjIgMjMuMSA4OC42bDAgMHoiXX0sbHVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpbGVzLXBpbndoZWVsIixpY29uOls1MTIsNTEyLFtdLCJlNjlmIiwiTTI1My41IDI0Ni40TDEzNy4yIDEzMC4yYy0uNi0uNi0xLTEuMy0xLjQtMnMtLjUtMS42LS41LTIuNCAuMi0xLjYgLjUtMi40IC44LTEuNCAxLjQtMkwyNTMuNiA1LjFjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAyMzIuNWMwIDEuMy0uMyAyLjUtMSAzLjZzLTEuNyAxLjktMi45IDIuNC0yLjUgLjYtMy43IC4zLTIuNC0uOS0zLjItMS45em00MC4zLTQuNGwwLTEzNC40YzAtLjggLjEtMS42IC41LTIuNHMuOC0xLjUgMS4zLTIuMSAxLjMtMS4xIDItMS40IDEuNi0uNSAyLjQtLjVsMTM0LjQgMGMxLjIgMCAyLjUgLjQgMy41IDEuMXMxLjggMS43IDIuMyAyLjggLjYgMi40IC4zIDMuNi0uOSAyLjMtMS43IDMuMkwzMDQuMyAyNDYuNGMtLjkgLjgtMiAxLjQtMy4yIDEuNnMtMi40IC4xLTMuNS0uNC0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy40bC4xIC4xem0zMC42IDM1Yy0xLjIgMC0yLjUtLjMtMy41LTFzLTEuOS0xLjYtMi40LTIuOC0uNi0yLjQtLjQtMy42IC44LTIuMyAxLjctMy4yTDQwNCAxODIuMmMuNi0uNiAxLjMtMSAyLTEuNHMxLjYtLjUgMi40LS41IDEuNiAuMiAyLjQgLjUgMS40IC44IDIgMS40bDg0LjQgODQuMmMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTY4LjUgMCAuMS0uMXptOTAuNyAxMzFsLTk1LjMtOTUuMmMtLjktLjktMS41LTItMS43LTMuMnMtLjEtMi41IC40LTMuNyAxLjMtMi4xIDIuNC0yLjggMi4zLTEgMy41LTFsOTUuMiAwYzEuNyAwIDMuMiAuNyA0LjQgMS44czEuOCAyLjggMS44IDQuNGwwIDk1LjNjMCAxLjItLjQgMi41LTEuMSAzLjVzLTEuNyAxLjgtMi44IDIuMy0yLjQgLjYtMy42IC4zLTIuMy0uOS0zLjItMS43ek0xNi44IDMwMi4xbDIxNi45IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjggMi4zLTEuNyAzLjJMMTI5LjcgNDIxLjJjLS42IC42LTEuMyAxLTIgMS40cy0xLjYgLjUtMi40IC41LTEuNi0uMi0yLjQtLjUtMS40LS44LTItMS40TDEyLjMgMzEyLjhjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjYgMS4zLTIuMSAyLjMtMi44IDIuMy0xIDMuNS0xbDAtLjF6TTI2NC4zIDQ2NS4zYzAgLjgtLjIgMS42LS41IDIuNHMtLjggMS41LTEuNCAyLTEuMyAxLTIgMS40LTEuNiAuNS0yLjQgLjVsLTEyOCAwYy0xLjIgMC0yLjUtLjQtMy41LTEuMXMtMS44LTEuNy0yLjMtMi44LS42LTIuNC0uMy0zLjYgLjgtMi4zIDEuNy0zLjJsMTI4LTEyOGMuOS0uOSAyLTEuNSAzLjItMS43czIuNS0uMSAzLjYgLjMgMi4xIDEuMyAyLjggMi4zIDEuMSAyLjIgMS4xIDMuNWwwIDEyOHptNDAtMTMyLjVsODIuOCA4Mi43Yy42IC42IDEgMS4zIDEuNCAycy41IDEuNiAuNSAyLjQtLjIgMS42LS41IDIuNC0uOCAxLjQtMS40IDJMMzA0LjMgNTA3Yy0uOSAuOS0yIDEuNS0zLjIgMS43cy0yLjUgLjEtMy42LS4zLTIuMS0xLjMtMi44LTIuMy0xLjEtMi4yLTEuMS0zLjVsMC0xNjUuNGMwLTEuMiAuNC0yLjUgMS4xLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uMyAyLjMgLjggMy4yIDEuN3pNNzkgMTIyLjRjMC0xLjIgLjMtMi41IDEtMy41czEuNy0xLjggMi44LTIuMyAyLjQtLjYgMy42LS40IDIuMyAuOCAzLjIgMS43TDIzOC4xIDI2Ni40Yy45IC45IDEuNSAyIDEuNyAzLjJzLjEgMi41LS4zIDMuNi0xLjMgMi4xLTIuMyAyLjgtMi4yIDEuMS0zLjUgMS4xbC0xNDguNCAwYy0xLjcgMC0zLjItLjctNC40LTEuOHMtMS44LTIuOC0xLjgtNC40bDAtMTQ4LjQtLjEtLjF6Il19LGN1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsYXJhdmVsIixpY29uOls1MTIsNTEyLFtdLCJmM2JkIiwiTTUwNC42IDExNS44Yy0uMS0uMi0uMi0uNS0uMy0uNy0uMS0uNC0uMy0uOC0uNS0xLjItLjItLjItLjMtLjUtLjUtLjctLjItLjMtLjUtLjYtLjctLjktLjItLjItLjUtLjQtLjgtLjYtLjMtLjItLjYtLjUtLjktLjdMNDA0LjYgNTUuNWMtMS4yLS43LTIuNi0xLjEtNC0xLjFzLTIuOCAuNC00IDEuMUwzMDAuMyAxMTFjLS4zIC4yLS42IC40LS45IC43LS4zIC4yLS41IC40LS44IC42LS4zIC4zLS41IC42LS43IC45LS4yIC4yLS40IC40LS41IC43LS4yIC40LS40IC44LS41IDEuMi0uMSAuMi0uMiAuNC0uMyAuNy0uMiAuNy0uMyAxLjQtLjMgMi4xbDAgMTA1LjItODAuMiA0Ni4yIDAtMjA1LjljMC0uNy0uMS0xLjQtLjMtMi4xLS4xLS4yLS4yLS40LS4zLS43LS4xLS40LS4zLS44LS41LTEuMi0uMS0uMy0uNC0uNS0uNS0uNy0uMi0uMy0uNS0uNi0uNy0uOS0uMi0uMi0uNS0uNC0uOC0uNi0uMy0uMi0uNi0uNS0uOS0uN0wxMTUuOCAxLjFjLTEuMi0uNy0yLjYtMS4xLTQtMS4xcy0yLjggLjQtNCAxLjFMMTEuNSA1Ni41Yy0uMyAuMi0uNiAuNC0uOSAuNy0uMyAuMi0uNSAuNC0uOCAuNi0uMyAuMy0uNSAuNi0uNyAuOS0uMiAuMy0uNCAuNS0uNiAuNy0uMiAuNC0uNCAuOC0uNSAxLjItLjEgLjItLjIgLjQtLjMgLjctLjIgLjctLjMgMS40LS4zIDIuMWwwIDMyOS43YzAgMS40IC40IDIuOCAxLjEgNHMxLjcgMi4yIDIuOSAyLjlMMjA0IDUxMC45Yy40IC4yIC45IC40IDEuMyAuNSAuMiAuMSAuNCAuMiAuNiAuMyAxLjMgLjQgMi44IC40IDQuMSAwIC4yLS4xIC40LS4yIC42LS4yIC41LS4yIDEtLjMgMS40LS42TDQwNC42IDQwMC4xYzEuMi0uNyAyLjItMS43IDIuOS0yLjlzMS4xLTIuNiAxLjEtNGwwLTEwNS4zIDkyLjItNTMuMWMxLjItLjcgMi4yLTEuNyAyLjktM3MxLjEtMi42IDEuMS00bDAtMTA5LjhjMC0uNy0uMS0xLjQtLjItMi4xek0xMTEuOCAxNy4zbDgwLjIgNDYuMS04MC4yIDQ2LjItODAuMi00Ni4yIDgwLjItNDYuMnptODguMiA2MGwwIDIwMS4zYy0zMy4yIDE5LjEtNTkuOSAzNC41LTgwLjIgNDYuMmwwLTIwMS4zQzE1MyAxMDQuNCAxNzkuNyA4OSAyMDAgNzcuM3ptMCA0MTIuOEwyMy41IDM4OC41IDIzLjUgNzcuM2MyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDIxNS4yYzAgLjMgLjEgLjYgLjEgLjkgMCAuNCAuMSAuOCAuMiAxLjIgLjEgLjMgLjIgLjYgLjQgLjkgLjEgLjMgLjMgLjcgLjQgMSAuMiAuMyAuNCAuNSAuNiAuOCAuMiAuMyAuNCAuNiAuNyAuOCAuMiAuMiAuNSAuNCAuOCAuNiAuMyAuMiAuNiAuNSAuOSAuN2w5Mi4yIDUyLjIgLjEgOTIuNHptOC0xMDYuMkwxMjggMzM4LjZjNTQuNy0zMS41IDExMy41LTY1LjMgMTc2LjMtMTAxLjVsODAuMSA0Ni4xQzM1NSAzMDAgMjk2LjIgMzMzLjUgMjA4IDM4My45em0xODQuNSA0LjZsLTE3Ni41IDEwMS42IDAtOTIuM0MzMTcuNCAzNDAgMzc2LjIgMzA2LjQgMzkyLjUgMjk3bDAgOTEuNHptMC0xMTkuMWMtMjAuMy0xMS42LTQ3LjEtMjctODAuMi00Ni4xbDAtOTEuNGMyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDkxLjN6bTgtMTA1LjNsLTgwLjItNDYuMiA4MC4yLTQ2LjIgODAuMiA0Ni4xLTgwLjIgNDYuMnptOCAxMDUuM2wwLTkxLjNjMzMuMi0xOS4xIDYwLTM0LjUgODAuMy00Ni4ybDAgOTEuNC04MC4zIDQ2LjJ6Il19LGR1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3cGZvcm1zIixpY29uOls0NDgsNTEyLFtdLCJmMjk4IiwiTTQ0OCA3NS4ybDAgMzYxLjdjMCAyNC4zLTE5IDQzLjItNDMuMiA0My4ybC0zNjEuNiAwQzE5LjMgNDgwIDAgNDYxLjQgMCA0MzYuOEwwIDc1LjJDMCA1MS4xIDE4LjggMzIgNDMuMiAzMmwzNjEuNyAwYzI0IDAgNDMuMSAxOC44IDQzLjEgNDMuMnpNNDEwLjcgNDM2LjhsMC0zNjEuNmMwLTMtMi42LTUuOC01LjgtNS44bC05LjMgMC0xMTAuMyA3NC42LTYxLjMtNDkuOS02MS4yIDQ5LjktMTEwLjMtNzQuNy05LjMgMGMtMy4yIDAtNS44IDIuOC01LjggNS44bDAgMzYxLjdjMCAzIDIuNiA1LjggNS44IDUuOGwzNjEuNyAwYzMuMiAuMSA1LjgtMi43IDUuOC01Ljh6TTE1MC4yIDE4NmwwIDM3LTczLjUgMCAwLTM3IDczLjUgMHptMCA3NC40bDAgMzcuMy03My41IDAgMC0zNy4zIDczLjUgMHptMTEuMS0xNDcuM2w1NC00My43LTExOC41IDAgNjQuNSA0My43em0yMTAgNzIuOWwwIDM3LTE5NiAwIDAtMzcgMTk2IDB6bTAgNzQuNGwwIDM3LjMtMTk2IDAgMC0zNy4zIDE5NiAwek0yODYuNyAxMTMuMWw2NC41LTQzLjctMTE4LjQgMCA1My45IDQzLjd6TTM3MS4zIDMzNWwwIDM3LjMtOTkuNCAwIDAtMzcuMyA5OS40IDB6Il19LHB1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcGVha2VyLWRlY2siLGljb246WzUxMiw1MTIsW10sImY4M2MiLCJNMjEzLjkgMjk2TDEwMCAyOTZjLTI2LjUgMC01Mi0xMC41LTcwLjctMjkuM1MwIDIyMi41IDAgMTk2IDEwLjUgMTQ0IDI5LjMgMTI1LjMgNzMuNSA5NiAxMDAgOTZsMTMyLjggMGMxMC42IDAgMjAuOCA0LjIgMjguMyAxMS43czExLjcgMTcuNyAxMS43IDI4LjMtNC4yIDIwLjgtMTEuNyAyOC4zLTE3LjcgMTEuNy0yOC4zIDExLjdMOTggMTc2Yy0yNi41IDAtMjYuNCA0MCAwIDQwbDExMy44IDBjMjYuNSAwIDUyIDEwLjUgNzAuNyAyOS4zczI5LjMgNDQuMiAyOS4zIDcwLjctMTAuNSA1Mi0yOS4zIDcwLjctNDQuMiAyOS4zLTcwLjcgMjkuM0w0MCA0MTZjLTEwLjYgMC0yMC44LTQuMi0yOC4zLTExLjdTMCAzODYuNiAwIDM3NiA0LjIgMzU1LjIgMTEuNyAzNDcuNyAyOS40IDMzNiA0MCAzMzZsMTczLjkgMGMyNi41IDAgMjYuNS00MCAwLTQwek0yOTggNDE2YzEzLjUtOS4yIDI1LTIxIDMzLjgtMzQuN3MxNC43LTI5LjIgMTcuMy00NS4zbDY0LjYgMGMyLjYgMCA1LjItLjYgNy42LTEuNnM0LjYtMi41IDYuNC00LjQgMy4zLTQuMSA0LjItNi41IDEuNS01IDEuNC03LjZsMC0xMjBjMC0yLjYtLjUtNS4yLTEuNC03LjZzLTIuNC00LjYtNC4yLTYuNS00LTMuMy02LjQtNC40LTUtMS42LTcuNi0xLjZsLTExNy4yIDBjOS43LTExLjEgMTUtMjUuMyAxNS00MHMtNS4zLTI4LjktMTUtNDBsMTM2LjkgMGM0My40IDAgNzguNiAzNS44IDc4LjYgODBsMCAxNjBjMCA0NC4yLTM1LjIgODAtNzguNiA4MEwyOTggNDE2eiJdfSxodWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmxpY2tyIixpY29uOls0NDgsNTEyLFtdLCJmMTZlIiwiTTQwMCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xNDQuNSAxOTJhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3ptMTU5IDBhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3oiXX0sdXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLXZpc2EiLGljb246WzU3Niw1MTIsW10sImYxZjAiLCJNNDcwLjEgMjMxLjNzNy42IDM3LjIgOS4zIDQ1bC0zMy40IDBjMy4zLTguOSAxNi00My41IDE2LTQzLjUtLjIgLjMgMy4zLTkuMSA1LjMtMTQuOWwyLjggMTMuNHpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTUyLjUgMzMxLjJsNjMuMi0xNTUuMi00Mi41IDAtMzkuMyAxMDYtNC4zLTIxLjUtMTQtNzEuNGMtMi4zLTkuOS05LjQtMTIuNy0xOC4yLTEzLjFsLTY0LjcgMC0uNyAzLjFjMTUuOCA0IDI5LjkgOS44IDQyLjIgMTcuMWwzNS44IDEzNSA0Mi41IDB6bTk0LjQgLjJsMjUuMi0xNTUuNC00MC4yIDAtMjUuMSAxNTUuNCA0MC4xIDB6bTEzOS45LTUwLjhjLjItMTcuNy0xMC42LTMxLjItMzMuNy00Mi4zLTE0LjEtNy4xLTIyLjctMTEuOS0yMi43LTE5LjIgLjItNi42IDcuMy0xMy40IDIzLjEtMTMuNCAxMy4xLS4zIDIyLjcgMi44IDI5LjkgNS45bDMuNiAxLjcgNS41LTMzLjZjLTcuOS0zLjEtMjAuNS02LjYtMzYtNi42LTM5LjcgMC02Ny42IDIxLjItNjcuOCA1MS40LS4zIDIyLjMgMjAgMzQuNyAzNS4yIDQyLjIgMTUuNSA3LjYgMjAuOCAxMi42IDIwLjggMTkuMy0uMiAxMC40LTEyLjYgMTUuMi0yNC4xIDE1LjItMTYgMC0yNC42LTIuNS0zNy43LTguM2wtNS4zLTIuNS01LjYgMzQuOWM5LjQgNC4zIDI2LjggOC4xIDQ0LjggOC4zIDQyLjIgLjEgNjkuNy0yMC44IDcwLTUzek01MjggMzMxLjRsLTMyLjQtMTU1LjQtMzEuMSAwYy05LjYgMC0xNi45IDIuOC0yMSAxMi45bC01OS43IDE0Mi41IDQyLjIgMHM2LjktMTkuMiA4LjQtMjMuM2w1MS42IDBjMS4yIDUuNSA0LjggMjMuMyA0LjggMjMuM2wzNy4yIDB6Il19LGZ1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1cHdvcmsiLGljb246WzY0MCw1MTIsW10sImU2NDEiLCJNNDkzLjkgMjk1LjZjLTUwLjMgMC04My41LTM4LjktOTIuOC01My45IDExLjktOTUuMyA0Ni44LTEyNS40IDkyLjgtMTI1LjQgNDUuNSAwIDgwLjkgMzYuNCA4MC45IDg5LjdzLTM1LjQgODkuNy04MC45IDg5LjdsMC0uMXptMC0yMzcuOGMtODEuOSAwLTEyNy44IDUzLjQtMTQxIDEwOC40LTE0LjktMjgtMjUuOS02NS41LTM0LjUtMTAwLjNsLTExMy4yIDAgMCAxNDFjMCA1MS4xLTIzLjMgODktNjguOCA4OXMtNzEuNi0zNy44LTcxLjYtODlsLjUtMTQxLTY1LjMgMCAwIDE0MWMwIDQxLjEgMTMuMyA3OC40IDM3LjYgMTA1LjEgMjUgMjcuNSA1OS4yIDQxLjggOTguOCA0MS44IDc4LjggMCAxMzMuOC02MC40IDEzMy44LTE0Ni45bDAtOTQuOGM4LjIgMzEuMiAyNy44IDkxLjEgNjUuMyAxNDMuNmwtMzUgMTk5LjQgNjYuNCAwIDIzLjEtMTQxLjNjNy42IDYuMyAxNS43IDEyIDI0LjIgMTcgMjIuMiAxNCA0Ny43IDIxLjkgNzMuOSAyMi44IDAgMCA0IC4yIDYuMSAuMiA4MS4yIDAgMTQ1LjktNjIuOSAxNDUuOS0xNDcuOFM1NzUuMyA1Ny45IDQ5NC4xIDU3LjlsLS4yLS4xeiJdfSxtdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2FrYW8tdGFsayIsaWNvbjpbNTc2LDUxMixbXSwiZTdkNyIsIk0yODggMi41YzE1OS4xIDAgMjg4IDEwMS43IDI4OCAyMjcuMSAwIDEyNS40LTEyOC45IDIyNy4xLTI4OCAyMjcuMS0xNy41IDAtMzQuNi0xLjItNTEuMi0zLjYtMTYuNiAxMS43LTExMi42IDc5LjEtMTIxLjcgODAuNCAwIDAtMy43IDEuNC02LjktLjRzLTIuNi02LjctMi42LTYuN0MxMDYuNiA1MTkuOCAxMzAuNiA0MzcuMiAxMzUgNDIxLjkgNTMuOSAzODEuOCAwIDMxMC42IDAgMjI5LjUgMCAxMDQuMSAxMjguOSAyLjUgMjg4IDIuNXpNODYuMiAxNjEuN2MtOSAwLTE2LjMgNy4zLTE2LjMgMTYuM3M3LjMgMTYuMyAxNi4zIDE2LjNsMjUuOSAwIDAgOTguN2MwIDguOCA3LjUgMTUuOSAxNi42IDE1LjlzMTYuNi03LjEgMTYuNi0xNS45bDAtOTguNyAyNS45IDBjOSAwIDE2LjMtNy4zIDE2LjMtMTYuM3MtNy4zLTE2LjMtMTYuMy0xNi4zbC04NS4xIDB6bTE0MC44IDBjLTEwLjggLjItMTkuMyA4LjQtMjIuMSAxNi40TDE2NS4yIDI4Mi43Yy01IDE1LjctLjYgMjEuNSAzLjkgMjMuNiAzLjIgMS41IDYuOSAyLjMgMTAuNiAyLjMgNi45IDAgMTIuMi0yLjggMTMuOC03LjNsOC4yLTIxLjYgNTAuNyAwIDguMiAyMS41YzEuNiA0LjUgNi45IDcuMyAxMy44IDcuMyAzLjcgMCA3LjMtLjggMTAuNi0yLjMgNC42LTIuMSA5LTcuOSAzLjktMjMuNkwyNDkuMiAxNzguMWMtMi44LTgtMTEuMy0xNi4yLTIyLjItMTYuNHptMTgwLjkgMGMtOS4yIDAtMTYuNiA3LjUtMTYuNiAxNi42bDAgMTEzLjdjMCA5LjIgNy41IDE2LjYgMTYuNiAxNi42czE2LjYtNy41IDE2LjYtMTYuNmwwLTM2LjIgNS44LTUuOCAzOC45IDUxLjZjMy4yIDQuMiA4IDYuNiAxMy4zIDYuNiAzLjYgMCA3LjEtMS4xIDEwLTMuMyAzLjUtMi43IDUuOC02LjYgNi40LTExcy0uNS04LjgtMy4yLTEyLjNsLTQwLjktNTQuMiAzNy45LTM3LjhjMi42LTIuNiAzLjktNi4yIDMuNy0xMC4xLS4yLTMuOS0yLTcuNi00LjktMTAuNS0zLjEtMy4xLTcuMy00LjktMTEuNC00LjktMy42IDAtNi44IDEuMy05LjIgMy43bC00Ni4zIDQ2LjQgMC0zNS43YzAtOS4yLTcuNS0xNi42LTE2LjYtMTYuNnptLTkxLjMgMGMtOS4zIDAtMTYuOSA3LjUtMTYuOSAxNi42bDAgMTEyLjhjMCA4LjQgNy4xIDE1LjIgMTUuOSAxNS4zbDUzLjMgMGM4LjggMCAxNS45LTYuOSAxNS45LTE1LjNzLTcuMi0xNS4yLTE1LjktMTUuMmwtMzUuMyAwIDAtOTcuNmMwLTkuMi03LjYtMTYuNi0xNy0xNi42em0tNzMgODguNmwtMzMuMiAwIDE2LjYtNDcuMSAxNi42IDQ3LjF6Il19LGd1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmbHV0dGVyIixpY29uOls0NDgsNTEyLFtdLCJlNjk0IiwiTTQyOS41IDIzNi4zTDI5MS43IDM3NC4xIDQyOS41IDUxMiAyNzIgNTEyYy0zNi4xLTM2LjEtODIuMS04Mi4xLTEzNy45LTEzNy45bDEzNy45LTEzNy44IDE1Ny41IDB6TTI3MiAwTDE2IDI1NiA5NC44IDMzNC44IDQyOS41IDAgMjcyIDB6Il19LGJ1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJidWZmZXIiLGljb246WzQ0OCw1MTIsW10sImY4MzciLCJNNDI4LjIgMzgwLjdMMjMxLjcgNDc4LjVjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDIwLjUgMzgwLjdjLTQtMi00LTUuMyAwLTcuM0w2Ny42IDM1MGMyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDEzNC44IDY3YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTM0LjgtNjdjMi4zLTEgNC44LTEuNSA3LjMtMS41czUgLjUgNy4zIDEuNWw0Ny4xIDIzLjRjNCAyIDQgNS4yIDAgNy4yem0wLTEzNi41bC00Ny4xLTIzLjRjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIzMS43IDI4Ny44Yy0yLjMgMS00LjggMS41LTcuMyAxLjVzLTUtLjUtNy4zLTEuNUw4Mi4zIDIyMC43Yy0yLjMtMS00LjgtMS41LTcuMy0xLjVzLTUgLjUtNy4zIDEuNUwyMC41IDI0NC4xYy00IDItNCA1LjMgMCA3LjNsMTk2LjUgOTcuOGMyLjMgMSA0LjggMS41IDcuMyAxLjVzNS0uNSA3LjMtMS41bDE5Ni41LTk3LjhjNC0yIDQtNS4zIDAtNy4zek0yMC41IDEzMC40TDIxNyAyMjAuN2M0LjcgMS45IDEwIDEuOSAxNC43IDBsMTk2LjUtOTAuM2M0LTEuOSA0LTQuOSAwLTYuN0wyMzEuNyAzMy40Yy00LjctMS45LTEwLTEuOS0xNC43IDBMMjAuNSAxMjMuN2MtNCAxLjgtNCA0LjkgMCA2Ljd6Il19LHZ1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJncmF0aXBheSIsaWNvbjpbNTEyLDUxMixbXSwiZjE4NCIsIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTM3NC4zIDIzMy43TDI1Ny43IDM5MS4zIDE0MS4zIDIzMy43Yy05LTEyLjMtMTkuNy01MiAxNC03NC4zIDI5LTE4LjcgNTYuNC00LjMgNzAuNyAxMi4zIDE2LjQgMTguNSA0OC4xIDE3LjQgNjMuNyAwIDE0LjMtMTYuNiA0MS43LTMxIDcwLjMtMTIuMyAzNCAyMi4zIDIzLjMgNjEuOSAxNC4yIDc0LjN6Il19LHl1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnb29nbGUtcGF5IixpY29uOls2NDAsNTEyLFtdLCJlMDc5IiwiTTEwNS43IDIxNWwwIDQxLjIgNTcuMSAwYy0xLjIgNi42LTMuNiAxMi45LTcuMiAxOC41cy04LjQgMTAuNC0xMy45IDE0LjFjLTkuNSA2LjYtMjEuNyAxMC4zLTM2IDEwLjMtMjcuNiAwLTUwLjktMTguOS01OS4zLTQ0LjItNC40LTEzLjMtNC40LTI3LjcgMC00MSA4LjQtMjUuNSAzMS43LTQ0LjQgNTkuMy00NC40IDcuNS0uMSAxNC45IDEuMiAyMS45IDRzMTMuMyA2LjkgMTguNiAxMi4xTDE3Ni41IDE1NWMtMTkuMS0xOC4xLTQ0LjQtMjguMS03MC43LTI3LjgtMTkuNyAuMS0zOC45IDUuNy01NS42IDE2LjFzLTMwLjEgMjUuMy0zOC44IDQzQzMuOSAyMDEuMiAwIDIxNy43IDAgMjM0LjRzMy45IDMzLjIgMTEuMyA0OC4xbDAgLjJjOC43IDE3LjcgMjIuMSAzMi41IDM4LjggNDNzMzUuOSAxNiA1NS42IDE2YzI4LjUgMCA1Mi41LTkuNSA3MC0yNS45IDIwLTE4LjYgMzEuNC00Ni4yIDMxLjQtNzguOSAwLTcuMy0uNi0xNC42LTEuOC0yMS44bC05OS43IDB6bTM4OS40LTRjLTEwLjEtOS40LTIzLjktMTQuMS00MS40LTE0LjEtMjIuNSAwLTM5LjMgOC4zLTUwLjUgMjQuOUw0MjQuMSAyMzVjNy42LTExLjMgMTguMS0xNyAzMS4zLTE3IDguNCAwIDE2LjUgMy4yIDIyLjcgOC44IDMgMi42IDUuNSA1LjkgNy4xIDkuNnMyLjUgNy42IDIuNSAxMS43bDAgNS41Yy05LjEtNS4xLTIwLjYtNy44LTM0LjYtNy44LTE2LjQgMC0yOS42IDMuOS0zOS41IDExLjhzLTE0LjggMTguMy0xNC44IDMxLjZjLS4yIDUuOSAxIDExLjggMy40IDE3LjJzNiAxMC4yIDEwLjUgMTQuMWM5LjIgOC4zIDIxIDEyLjUgMzQuOCAxMi41IDE2LjMgMCAyOS4yLTcuMyAzOS0yMS45bDEgMCAwIDE3LjcgMjIuNiAwIDAtNzguN2MuMS0xNi42LTQuOS0yOS43LTE1LTM5em0tMTkuMiA4OS4zYy0zLjUgMy41LTcuNiA2LjMtMTIuMiA4LjJzLTkuNSAyLjktMTQuNCAyLjljLTYuNyAuMS0xMy4xLTIuMS0xOC4zLTYuMi0yLjQtMS44LTQuNC00LjItNS43LTYuOXMtMi01LjctMi04LjdjMC03IDMuMi0xMi44IDkuNS0xNy40czE0LjUtNyAyNC4xLTdjMTMuMi0uMiAyMy41IDIuOCAzMC44IDguOCAwIDEwLjEtNCAxOC45LTExLjcgMjYuNHptLTkzLjctMTQyYy01LjMtNS4zLTExLjYtOS41LTE4LjYtMTIuM3MtMTQuNC00LjItMjEuOS00bC02Mi43IDAgMCAxODYuNyAyMy42IDAgMC03NS42IDM5IDBjMTYgMCAyOS41LTUuNCA0MC41LTE1LjkgLjktLjkgMS44LTEuOCAyLjYtMi43IDkuNi0xMC41IDE0LjgtMjQuNCAxNC4zLTM4LjZzLTYuNi0yNy43LTE2LjktMzcuNmwwIDB6bS0xNi42IDYyLjJjLTMgMy4yLTYuNiA1LjctMTAuNiA3LjRzLTguNCAyLjUtMTIuNyAyLjNsLTM5LjYgMCAwLTY1LjIgMzkuNiAwYzguNSAwIDE2LjYgMy4zIDIyLjYgOS4yIDYuMSA2LjEgOS42IDE0LjMgOS44IDIzcy0zLjEgMTctOSAyMy4zbDAgMHpNNjE0LjMgMjAxbC0zNi41IDkxLjctLjUgMC0zNy40LTkxLjctMjUuNyAwIDUxLjggMTE5LjYtMjkuNCA2NC4zIDI0LjMgMCA3OS0xODMuOS0yNS43IDB6Il19LHh1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhcHBsZSIsaWNvbjpbMzg0LDUxMixbXSwiZjE3OSIsIk0zMTkuMSAyNjguN2MtLjItMzYuNyAxNi40LTY0LjQgNTAtODQuOC0xOC44LTI2LjktNDcuMi00MS43LTg0LjctNDQuNi0zNS41LTIuOC03NC4zIDIwLjctODguNSAyMC43LTE1IDAtNDkuNC0xOS43LTc2LjQtMTkuNy01NS44IC45LTExNS4xIDQ0LjUtMTE1LjEgMTMzLjIgMCAyNi4yIDQuOCA1My4zIDE0LjQgODEuMiAxMi44IDM2LjcgNTkgMTI2LjcgMTA3LjIgMTI1LjIgMjUuMi0uNiA0My0xNy45IDc1LjgtMTcuOSAzMS44IDAgNDguMyAxNy45IDc2LjQgMTcuOSA0OC42LS43IDkwLjQtODIuNSAxMDIuNi0xMTkuMy02NS4yLTMwLjctNjEuNy05MC02MS43LTkxLjl6TTI2Mi41IDEwNC41YzI3LjMtMzIuNCAyNC44LTYxLjkgMjQtNzIuNS0yNC4xIDEuNC01MiAxNi40LTY3LjkgMzQuOS0xNy41IDE5LjgtMjcuOCA0NC4zLTI1LjYgNzEuOSAyNi4xIDIgNDkuOS0xMS40IDY5LjUtMzQuM3oiXX0sd3VlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InR1bWJsciIsaWNvbjpbMzIwLDUxMixbXSwiZjE3MyIsIk0zMDkuOSA0ODAuM2MtMTMuNiAxNC41LTUwIDMxLjctOTcuNCAzMS43LTEyMC44IDAtMTQ3LTg4LjgtMTQ3LTE0MC42bDAtMTQ0LTQ3LjUgMGMtNS41IDAtMTAtNC41LTEwLTEwbDAtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMSAuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNsNzAuOSAwYzUuNSAwIDEwIDQuNSAxMCAxMGwwIDExNS4yIDgzIDBjNS41IDAgMTAgNC40IDEwIDkuOWwwIDgxLjdjMCA1LjUtNC41IDEwLTEwIDEwbC04My40IDAgMCAxMzMuMmMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUgLjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiXX0sTXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBob2VuaXgtc3F1YWRyb24iLGljb246WzUxMiw1MTIsW10sImY1MTEiLCJNOTYgNjMuNGM0Ni41LTM2LjEgMTA1LjYtNTYuMSAxNjQuNS01NC42IDI5LjYtLjQgNTkuMSA1LjQgODYuOSAxNS4zLTI0LjEtNC42LTQ5LTYuMy03My40LTIuNS00Mi45IDUuMy04MyAyNy4yLTExMS44IDU5LjIgNS43LTEgMTAuOC0zLjcgMTYtNS45IDE4LjEtNy45IDM3LjUtMTMuMyA1Ny4yLTE0LjggMTkuNy0yLjEgMzkuNi0uNCA1OS4zIDEuOS0xNC40IDIuOC0yOS4xIDQuNi00MyA5LjYtMzQuNCAxMS4xLTY1LjMgMzMuMi04Ni4zIDYyLjYtMTMuOCAxOS43LTIzLjYgNDIuOS0yNC43IDY3LjEtLjQgMTYuNSA1LjIgMzQuOCAxOS44IDQ0IDExLjIgNi44IDI0LjYgOS4yIDM3LjUgNi43IDE1LjQtMi41IDMwLjEtOC42IDQzLjYtMTYuMyAxMS41LTYuOCAyMi43LTE0LjYgMzItMjQuMyAzLjgtMy4yIDIuNS04LjQgMi42LTEyLjgtMi4xLS4zLTQuNC0xLjEtNi4zIC4zLTExLjQgNi4zLTIzLjQgMTEuNC0zNS44IDE1LjQtMjAgNi4yLTQyLjIgOC41LTYyLjEgLjggMTIuOCAxLjcgMjYuMSAuMyAzNy43LTUuNCAyMC4yLTkuNyAzNi44LTI1LjIgNTQuNC0zOC44IDI3LjctMjEuMyA1Ny41LTM5LjkgODguOS01NS4zIDI1LjctMTIgNTIuOS0yMi44IDgxLjYtMjQuMS0xNS42IDEzLjctMzIuMSAyNi41LTQ2LjggNDEuNC0xNC41IDE0LTI3LjUgMjkuNS00MC4xIDQ1LjItMy41IDQuNi05IDYuOS0xMy42IDEwLjItMjIuNCAxNS00MC4zIDM1LjgtNTEuOSA2MC4xLTkuMyAxOS43LTE0LjUgNDEuOS0xMS44IDYzLjYgMS45IDEzLjcgOC43IDI3LjYgMjAuOSAzNC45IDEyLjkgOCAyOSA4LjEgNDMuNSA1LjEgMzIuOC03LjQgNjEuNC0yOC45IDgxLTU1LjggMjAuNC0yNy41IDMwLjUtNjIuMiAyOS4yLTk2LjMtLjUtNy41LTEuNi0xNS0xLjctMjIuNSA4IDE5LjUgMTQuOCAzOS43IDE2LjYgNjAuOCAyIDE0LjMgLjcgMjguOC0xLjYgNDIuOS0xLjkgMTEtNS43IDIxLjUtNy44IDMyLjQgMjAuNC0yMi45IDM0LTUwLjkgMzkuMy04MS4xIDUuNi0zNS41IC43LTcxLjktMTQuMi0xMDQuNiAyMC44IDMyIDMyLjMgNjkuNiAzNS43IDEwNy41IC41IDEyLjcgLjUgMjUuNSAwIDM4LjItMi44IDM0LjMtMTIuOSA2Ny42LTI5LjYgOTcuOC0yNi4xIDQ3LjMtNjggODUuNi0xMTcuMiAxMDgtNzguMyAzNi4yLTE3NC43IDMxLjMtMjQ4LTE0LjctMzktMjMuOC03MC42LTU4LTkxLjQtOTguNy0xNC43LTI4LjktMjMuMy02MC41LTI1LjQtOTIuOWwwLTMxLjNDMy45IDE3MiA0MC45IDEwNS44IDk2IDYzLjR6bTIyMiA4MC4zYzUuNS0uOSAxMC44LTIuNCAxNi00LjUgNS0xLjggOS4yLTUuOSAxMC4zLTExLjItOSA1LTE4IDkuOS0yNi4zIDE1Ljd6Il19LHp1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjZW50ZXJjb2RlIixpY29uOls1MTIsNTEyLFtdLCJmMzgwIiwiTTIwMS44IDI1NC44YTY0LjEgNjQuMSAwIDEgMSAxMjcuNCAxMy44IDY0LjEgNjQuMSAwIDEgMSAtMTI3LjQtMTMuOHptNDEuNiAyNDguOUM5Ni43IDQ5Ni04LjIgMzY1LjUgMTAuMSAyMjQuMyAyMS4zIDEzNy43IDc1LjkgNjcuNCAxNDkuMiAzMi4zIDMxMC4yLTQ0LjggNDk4LjkgNjkuNyA1MDMuOSAyNDguOSA1MDggMzk1LjkgMzg1LjUgNTExLjEgMjQzLjQgNTAzLjd6bTE3OS45LTE4MGMyNy45LTExOC0xNjAuNS0yMDUuOS0yMzcuMi0yMzQuMi01Ny41IDU2LjMtNjkuMSAxODguNi0zMy44IDM0NC40IDY4LjggMTUuOCAxNjkuMS0yNi40IDI3MS0xMTAuMnoiXX0sa3VlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRlYmlhbiIsaWNvbjpbNDQ4LDUxMixbXSwiZTYwYiIsIk0zODAuNCAyNDUuNmMzLTcuNiA1LjUtMTQgNS4yLTI0LjRsLTQuMyA5YzQuNC0xMy4yIDQtMjcuMSAzLjYtNDAuNC0uMi02LS4zLTExLjggMC0xNy40bC0xLjgtLjVjLTEuNS00NS4yLTQwLjYtOTMuMS03NS4zLTEwOS40LTMwLTEzLjgtNzYuMS0xNi4yLTk3LjMtNS44IDEuMy0xLjEgNC4yLTIgNi44LTIuN2wuMy0uMWMzLjMtMSA2LTEuNyA0LTIuOS0xOS4yIDEuOS0yNC45IDUuNS0zMS4xIDkuNGwtLjEgMGMtNC42IDIuOS05LjUgNi0yMC4zIDguNy0zLjUgMy40IDEuNyAyIDUuOCAuOXM3LjItMS45LS4xIDIuNGMtMy41IDEtNi42IDEuMy05LjYgMS42bC0uMSAwYy04LjMgLjgtMTUuOCAxLjYtMzAuNyAxNyAuOCAxLjMgMy40LS4yIDUuMy0xLjNsLjEtLjFjMi4zLTEuNCAzLjQtMi0xLjcgNC40LTE5LjEtMi40LTYwLjMgNDMuNy02OS4xIDU5bDQuNiAuOGMtMy4yIDgtNi44IDE0LjgtMTAgMjAuOC00LjMgOC4xLTcuOSAxNC45LTguNyAyMS4zLS4zIDUuMS0xIDExLTEuNyAxNy4zLS4xIDEtLjIgMi0uMyAzbC0uMSAuNmMtMyAyNy4zLTYuNyA2MC44IDMuOSA3M2wtMS4zIDEzYy42IDEuMiAxLjEgMi4zIDEuNiAzLjUgLjIgLjQgLjQgLjggLjUgMS4xIDEgMi4xIDIgNC4yIDMuMyA2LjJsLTMgLjJjNyAyMi4xIDEwLjggMjIuNSAxNS4xIDIyLjkgNC40IC40IDkuMyAuOSAxOC43IDI0LjItMi43LS45LTUuNS0xLjktOS40LTcuMi0uNSA0LjEgNS44IDE2LjMgMTMuMSAyNS44bC0zLjEgMy42YzIuMSAzLjcgNC44IDYuMiA3LjYgOC44IDEgLjkgMi4xIDEuOSAzLjEgMi45LTExLjktNi41IDMuMiAxMy43IDExLjkgMjUuMiAuOCAxLjEgMS41IDIgMi4yIDIuOSAxLjQgMS45IDIuNSAzLjQgMi45IDQuMWwyLjQtNC4yYy0uMyA2LjEgNC4zIDEzLjkgMTMuMSAyNC43bDcuMy0uM2MzIDYgMTQgMTYuNyAyMC43IDE3LjJsLTQuNCA1LjhjOC4xIDIuNiAxMC4zIDQuMyAxMi43IDYuMiAyLjYgMi4xIDUuNCA0LjMgMTYuMSA4LjFsLTQuMi03LjRjMy41IDMgNi4yIDUuOSA4LjggOC43bC4xIC4xYzUuMiA1LjYgOS45IDEwLjYgMTkuNyAxNS4zIDEwLjcgMy43IDE2LjYgNC43IDIyLjcgNS44IC4zIDAgLjYgLjEgLjkgLjEgNS40IC44IDExLjIgMS44IDIwLjggNC41LTEuMS0uMS0yLjItLjEtMy4zLS4xLTIuMy0uMS00LjctLjEtNy0uMS0xNC40LS4yLTI5LjItLjQtNDIuNy01LjItOTYuNi0yNS43LTE4NC45LTEzOS0xNzguNC0yNTUuNi0uNi05LjktLjMtMjAuOSAwLTMwLjcgLjQtMTMuNSAuNy0yNC44LTEuNi0yOC4zbDEtMy4xYzUuMy0xNy40IDExLjctMzguMiAyMy44LTYyLjhsLS4xLS4yIDAtLjFjLjQgLjQgMy40IDMuNCA4LjgtNS44IC44LTEuOCAxLjYtMy43IDIuNC01LjYgLjUtMS4xIC45LTIuMiAxLjQtMy4yIDIuNS02LjEgNS4xLTEyLjMgOC40LTE3LjlsMi42LS42YzEuNy0xMC4xIDE3LTIzLjggMjkuOC0zNS4ybDEuMS0xYzUuNy01LjEgMTAuNy05LjcgMTMuNi0xMy4xbC43IDQuNGMxNy0xNS45IDQ0LjYtMjcuNSA2NS42LTM2LjRsLjUtLjJjNC44LTIgOS4zLTMuOSAxMy4zLTUuNy0zLjQgMy44IDIuMiAyLjcgMTAgMSA0LjgtMSAxMC40LTIuMSAxNS4zLTIuNGwtMy45IDIuMWMtMi43IDEuNC01LjQgMi44LTggNC42IDguMS0yIDExLjctMS40IDE1LjctLjhsLjMgMGMzLjUgLjYgNy4zIDEuMiAxNC42IC4yLTUuNiAuOC0xMi4zIDMtMTEuMiAzLjggNy45IC45IDEyLjgtLjEgMTcuMi0xbC4yIDBjNS41LTEuMSAxMC4zLTIgMTkuMyAuOWwtMS00LjhjNy4zIDIuNiAxMi43IDQuMyAxNy41IDUuOGwuNSAuMWMxMCAzIDE3LjYgNS4zIDM0LjIgMTQuMSAzLjIgLjIgNS4zLS41IDcuNC0xLjJsLjEgMGMzLjYtMS4xIDctMi4xIDE1LjIgMS4yIC4zIC41IC41IDEgLjcgMS40IC4xIC4yIC4yIC41IC4zIC43bDAgLjFjMSAyLjYgMS44IDQuNiAxNC42IDEyLjEgMS43LS43LTIuNy00LjctNi40LTguMmwtLjEtLjFjLS4yLS4xLS4zLS4zLS41LS40IDMyLjIgMTcuMyA2Ny4zIDU0LjEgNzggOTMuNS02LTExLjEtNS4yLTUuNS00LjMgLjUgLjYgNCAxLjIgOC4xLS4yIDcuNSA0LjUgMTIuMSA4LjEgMjQuNSAxMC40IDM3LjRsLS44LTIuOS0uMS0uM2MtMy4zLTExLjktOS42LTM0LjMtMTkuOS00OS4zLS40IDQuMy0yLjggMy45LTUuMiAzLjVsLS4xIDBjLTMuMy0uNi02LjItMS4xLTEuOSAxMi42IDIuNiAzLjggMy4xIDIuNCAzLjUgMS4xIC41LTEuNSAuOS0yLjcgNC43IDUuMiAuMSA0LjEgMSA4LjIgMi4xIDEyLjdsLjEgLjZjLjEgLjMgLjEgLjUgLjIgLjhsLjEgLjZjLjYgMi42IDEuMyA1LjQgMS44IDguNC0xLjEtLjItMi4zLTIuMi0zLjQtNC4yLTEuNC0yLjQtMi44LTQuNy0zLjctMy4yIDIuNCAxMS41IDYuNSAxNy40IDggMTguMy0uMyAuNi0uNiAuNy0xLjEgLjctLjggMC0xLjggLjEtMS45IDUuMyAuNyAxMy43IDMuMyAxMi41IDUuMyAxMS42IC42LS4zIDEuMi0uNiAxLjctLjQtLjYgMi41LTEuNiA1LjEtMi43IDcuOS0yLjggNy4xLTYgMTUuNC0zLjQgMjYuMS0uOC0zLTItNi0zLjEtOC45bC0uMS0uNGMtLjItLjUtLjQtMS0uNi0xLjUtLjMtLjgtLjYtMS42LS45LTIuMy0uNiA0LjQtLjMgNy43LS4xIDEwLjZsMCAuN2MuNCA1LjMgLjcgMTAtMyAxOS45IDQuMy0xNC4yIDMuOC0yNi45LS4yLTIwLjggMSAxMC45LTMuNyAyMC40LTggMjguOWwtLjEgLjJjLTMuNiA3LjEtNi44IDEzLjUtNS45IDE5LjNsLTUuMi03LjFjLTcuNSAxMC45LTcgMTMuMy02LjUgMTUuNWwwIC4xYy41IDEuOSAxIDMuOC0zLjQgMTAuOCAxLjctMi45IDEuMy0zLjYgMS00LjItLjQtLjgtLjctMS41IDEuNy01LjEtMS42IC4xLTUuNSAzLjktMTAuMSA4LjUtMy45IDMuOS04LjUgOC40LTEyLjggMTEuOC0zNy41IDMwLjEtODIuMyAzNC0xMjUuNiAxNy44IC4yLTEtLjItMi4xLTMuMS00LjEtMzYuOC0yOC4yLTU4LjUtNTIuMS01MC45LTEwNy41IDIuMS0xLjYgMy42LTUuOCA1LjMtMTAuOGwuMi0uNCAuMS0uMyAwLS4xYzIuOS04LjQgNi41LTE4LjggMTQuMy0yMy44IDcuOC0xNy4zIDMxLjMtMzMuMyA1Ni40LTMzLjcgMjUuNi0xLjQgNDcuMiAxMy43IDU4LjEgMjcuOS0xOS44LTE4LjQtNTIuMS0yNC03OS43LTEwLjQtMjguMiAxMi43LTQ1IDQzLjgtNDIuNSA3NC43IC4zLS40IC42LS42IC45LS44bC4yLS4yYy42LS41IDEuMS0uOSAxLjQtMy4zLS45IDYwLjIgNjQuOCAxMDQuMyAxMTIuMSA4MmwuNiAxLjNjMTIuNy0zLjUgMTUuOS02LjUgMjAuMy0xMC43bC4xLS4xYzIuMi0yLjEgNC43LTQuNSA4LjktNy4zLS4zIC43LTEuMyAxLjctMi40IDIuNy0yLjIgMi4xLTQuNiA0LjUtMS42IDQuNiA1LTEuMyAxOC41LTEzLjQgMjguNS0yMi4zIC42LS41IDEuMi0xIDEuNy0xLjUgMS41LTEuMyAyLjgtMi41IDQtMy42bC4zLS4zYzEuOS00LjIgMS42LTUuNiAxLjMtN2wwLS4xYy0uNC0xLjYtLjgtMy4zIDIuNC05LjZsNy4zLTMuN2MuOC0yLjEgMS41LTQuMSAyLjItNiAuMi0uNiAuNS0xLjIgLjctMS44bC0uNC0uMi0uMS0uMXpNMjQ4IDMzNC4xYy02LTMtMTMuNy04LjktMTQuOC0xMS40bC0uNCAuM2MtLjMgLjYtLjUgMS4zLS4yIDIuMi0xMi4yLTUuNy0yMy40LTE0LjMtMzIuNi0yNC45IDQuOSA3LjEgMTAuMSAxNC4xIDE3IDE5LjUtNi45LTIuMy0xNS4xLTExLjgtMjEuNi0xOS4zbC0uMS0uMWMtNC4zLTUtNy45LTkuMS05LjctOS41IDE5LjggMzUuNSA4MC41IDYyLjMgMTEyLjMgNDktMTQuNyAuNS0zMy40IC4zLTQ5LjktNS44em03OS4zLTExOS43bC0uMS0uMmMtLjUtMS41LTEuMS0zLjEtMS43LTMuNCAxLjQtNS44IDUuNC0xMC43IDQuNCA0LjYtMSAzLjgtMS44IDEuNS0yLjYtMXptLTQuMiAyMi4yYy0xLjMgNy45LTUgMTUuNS0xMC4xIDIyLjUgLjItMi0xLjItMi40LTIuNi0yLjgtMi45LS44LTUuOS0xLjYgNS42LTE2LjEtLjUgMS45LTIuMSA0LjYtMy43IDcuM2wtLjMgLjRjLTMuNiA1LjktNi43IDExIDQgNC4zbDEtMS44YzIuNi00LjUgNS04LjggNi0xMy44bC4xIDB6bS01NS42IDMzLjljNy4xIC42IDE0LjEgLjYgMjEtMS4xLTIuNSAyLjQtNS4yIDQuOC04LjMgNy4yLTExLjEtMS43LTIxLjItNi0xMi43LTYuMXptLTkyLjYgMTEuNmMzLjYgNy4xIDYuNCAxMS41IDkgMTUuN2wuMSAuMmMyLjMgMy43IDQuNCA3LjEgNi44IDExLjctNS4xLTQuMi04LjctOS41LTEyLjUtMTVsLS4zLS41Yy0xLjQtMi4xLTIuOC00LjItNC40LTYuMmwxLjItNS45IC4xIDB6bTcuNS05LjZjMS42IDMuMyAzLjIgNi40IDUuNyA5LjFsMi42IDcuNy0xLjMtMi4xYy0zLjItNS4zLTYuMy0xMC42LTgtMTYuN2wxIDJ6bTIzOC45LTQxLjZjLTIuMyAxNy40LTcuNyAzNC42LTE2IDUwLjMgNy42LTE0LjkgMTIuNS0zMC45IDE0LjgtNDcuMmwxLjItMy4xek0zNS44IDExMC42Yy40IC44IDEuNCAuNSAyLjMgLjMgMS45LS41IDMuNi0uOS0uMSA3LjYtLjUgLjMtMSAuNy0xLjUgMS0xLjQgLjktMi44IDEuOS0zLjkgMyAxLjktMy44IDMuNS03LjQgMy4yLTExLjl6TTI1LjUgMTUyLjNjLS43IDMuNy0xLjUgNy45LTMuNCAxMy45IC4yLTEuOSAwLTMuNS0uMi00LjlsMC0uMWMtLjQtMy40LS43LTYuMyA0LjMtMTIuOC0uMyAxLjItLjUgMi41LS43IDMuOGwwIC4xeiJdfSxTdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWFzdG9kb24iLGljb246WzQ0OCw1MTIsW10sImY0ZjYiLCJNNDMzIDE3OS4xYzAtOTcuMi02My43LTEyNS43LTYzLjctMTI1LjctNjIuNS0yOC43LTIyOC42LTI4LjQtMjkwLjUgMCAwIDAtNjMuNyAyOC41LTYzLjcgMTI1LjcgMCAxMTUuNy02LjYgMjU5LjQgMTA1LjYgMjg5LjEgNDAuNSAxMC43IDc1LjMgMTMgMTAzLjMgMTEuNCA1MC44LTIuOCA3OS4zLTE4LjEgNzkuMy0xOC4xbC0xLjctMzYuOXMtMzYuMyAxMS40LTc3LjEgMTAuMWMtNDAuNC0xLjQtODMtNC40LTg5LjYtNTQtLjYtNC42LS45LTkuMy0uOS0xMy45IDg1LjYgMjAuOSAxNTguNyA5LjEgMTc4LjcgNi43IDU2LjEtNi43IDEwNS00MS4zIDExMS4yLTcyLjkgOS44LTQ5LjggOS0xMjEuNSA5LTEyMS41ek0zNTcuOSAzMDQuM2wtNDYuNiAwIDAtMTE0LjJjMC00OS43LTY0LTUxLjYtNjQgNi45bDAgNjIuNS00Ni4zIDAgMC02Mi41YzAtNTguNS02NC01Ni42LTY0LTYuOWwwIDExNC4yLTQ2LjcgMGMwLTEyMi4xLTUuMi0xNDcuOSAxOC40LTE3NSAyNS45LTI4LjkgNzkuOC0zMC44IDEwMy44IDYuMWwxMS42IDE5LjUgMTEuNi0xOS41YzI0LjEtMzcuMSA3OC4xLTM0LjggMTAzLjgtNi4xIDIzLjcgMjcuMyAxOC40IDUzIDE4LjQgMTc1bDAgMHoiXX0sQ3VlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNrZXRjaCIsaWNvbjpbNTEyLDUxMixbXSwiZjdjNiIsIk0yNy44IDE2Mi4ybC0xOC41IDI0LjkgOTAuNSAwIDYuOS0xMzAuNy03OC45IDEwNS44ek0zOTYuNiA0NS43TDI2OCAzMiA0MDMuNyAxNzkuMiAzOTYuNiA0NS43ek0xMTIuNSAyMTguM2wtMTEuMi0yMi05MS4xIDAgMjI0LjkgMjYxLjctMTIyLjYtMjM5Ljd6bTItMzEuMmwyODQgMEMzNDAuNiAxMjQuMyAyOTMuMyA3Mi45IDI1Ni42IDMzTDExNC41IDE4Ny4xem0yOTcuMyA5LjFsLTEzMy45IDI2MS44IDIyNC44LTI2MS43LTkwLjkgMCAwLS4xek00MTUuNyA2OWwtOS40LTEyLjYgLjkgMTcuMyA2LjEgMTEzLjQgOTAuMyAwLTg3LjktMTE4LjF6TTExMy44IDkzLjVMMTA5LjIgMTc5LjEgMjQ1IDMyIDExNi40IDQ1LjcgMTEzLjggOTMuNXpNNDAxLjUgMTk2LjJsLTI5MCAwYzE4LjIgMzUuNiA2Ni42IDEzMC4yIDE0NS4xIDI4My44TDQwMS41IDE5Ni4yeiJdfSxfdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2ViLWF3ZXNvbWUiLGljb246WzY0MCw1MTIsW10sImU2ODIiLCJNMzcyLjIgNTJjMCAyMC45LTEyLjQgMzktMzAuMiA0Ny4yTDQ0OCAxOTIgNTUyLjQgMTcxLjFjLTUuMy03LjctOC40LTE3LjEtOC40LTI3LjEgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDI2LTIwLjYgNDcuMS00Ni40IDQ4TDQ4MSA0NDIuM2MtMTAuMyAyMy0zMy4yIDM3LjctNTguNCAzNy43bC0yMDUuMiAwYy0yNS4yIDAtNDgtMTQuOC01OC40LTM3LjdMNDYuNCAxOTJDMjAuNiAxOTEuMSAwIDE3MCAwIDE0NCAwIDExNy41IDIxLjUgOTYgNDggOTZzNDggMjEuNSA0OCA0OGMwIDEwLjEtMy4xIDE5LjQtOC40IDI3LjFMMTkyIDE5MiAyOTguMSA5OS4xYy0xNy43LTguMy0zMC0yNi4zLTMwLTQ3LjEgMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwuMSAweiJdfSxUdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2FzcyIsaWNvbjpbNjQwLDUxMixbXSwiZjQxZSIsIk0zMDEuOCAzNzguOWwwIDB6bTI0OS4xLTg3Yy0yMC4xIDAtNDAgNC42LTU4IDEzLjUtNS45LTExLjktMTItMjIuMy0xMy0zMC4xLTEuMi05LjEtMi41LTE0LjUtMS4xLTI1LjNzNy43LTI2LjEgNy42LTI3LjItMS40LTYuNi0xNC4zLTYuNy0yNCAyLjUtMjUuMyA1LjljLTIuMyA2LjItNC4xIDEyLjYtNS4zIDE5LjEtMi4zIDExLjctMjUuOCA1My41LTM5LjEgNzUuMy00LjQtOC41LTguMS0xNi04LjktMjItMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOS0yLjcgMTEuNC01LjMgMTkuMS0zMy45IDc3LjMtNDIuMSA5NS40Yy00LjIgOS4yLTcuOCAxNi42LTEwLjQgMjEuNi0uNCAuOC0uNyAxLjMtLjkgMS43IC4zLS41IC41LTEgLjUtLjgtMi4yIDQuMy0zLjUgNi43LTMuNSA2LjdsMCAuMWMtMS43IDMuMi0zLjYgNi4xLTQuNSA2LjEtLjYgMC0xLjktOC40IC4zLTE5LjkgNC43LTI0LjIgMTUuOC02MS44IDE1LjctNjMuMS0uMS0uNyAyLjEtNy4yLTcuMy0xMC43LTkuMS0zLjMtMTIuNCAyLjItMTMuMiAyLjJzLTEuNCAyLTEuNCAyIDEwLjEtNDIuNC0xOS40LTQyLjRjLTE4LjQgMC00NCAyMC4yLTU2LjYgMzguNS03LjkgNC4zLTI1IDEzLjYtNDMgMjMuNS02LjkgMy44LTE0IDcuNy0yMC43IDExLjQtLjUtLjUtLjktMS0xLjQtMS41LTM1LjgtMzguMi0xMDEuOS02NS4yLTk5LjEtMTE2LjUgMS0xOC43IDcuNS02Ny44IDEyNy4xLTEyNy40IDk4LTQ4LjggMTc2LjMtMzUuNCAxODkuOC01LjYgMTkuNCA0Mi41LTQxLjkgMTIxLjYtMTQzLjcgMTMzLTM4LjggNC4zLTU5LjItMTAuNy02NC4zLTE2LjMtNS4zLTUuOS02LjEtNi4yLTguMS01LjEtMy4zIDEuOC0xLjIgNyAwIDEwLjEgMyA3LjkgMTUuNSAyMS45IDM2LjggMjguOSAxOC43IDYuMSA2NC4yIDkuNSAxMTkuMi0xMS44IDYxLjgtMjMuOCAxMDkuOS05MC4xIDk1LjgtMTQ1LjYtMTQuNC01Ni40LTEwNy45LTc0LjktMTk2LjMtNDMuNS01Mi43IDE4LjctMTA5LjcgNDguMS0xNTAuNyA4Ni40LTQ4LjcgNDUuNi01Ni41IDg1LjMtNTMuMyAxMDEuOSAxMS40IDU4LjkgOTIuNiA5Ny4zIDEyNS4xIDEyNS43LTEuNiAuOS0zLjEgMS43LTQuNSAyLjUtMTYuMyA4LjEtNzguMiA0MC41LTkzLjcgNzQuNy0xNy41IDM4LjggMi45IDY2LjYgMTYuMyA3MC40IDQxLjggMTEuNiA4NC42LTkuMyAxMDcuNi00My42czIwLjItNzkuMSA5LjYtOTkuNWMtLjEtLjMtLjMtLjUtLjQtLjggNC4yLTIuNSA4LjUtNSAxMi44LTcuNSA4LjMtNC45IDE2LjQtOS40IDIzLjUtMTMuMy00IDEwLjgtNi45IDIzLjgtOC40IDQyLjYtMS44IDIyIDcuMyA1MC41IDE5LjEgNjEuNyA1LjIgNC45IDExLjUgNSAxNS40IDUgMTMuOCAwIDIwLTExLjQgMjYuOS0yNSA4LjUtMTYuNiAxNi0zNS45IDE2LTM1LjlzLTkuNCA1Mi4yIDE2LjMgNTIuMmM5LjQgMCAxOC44LTEyLjEgMjMtMTguM2wwIC4xcy4yLS40IC43LTEuMmMxLTEuNSAxLjUtMi40IDEuNS0yLjRsMC0uM2MzLjgtNi41IDEyLjEtMjEuNCAyNC42LTQ2IDE2LjItMzEuOCAzMS43LTcxLjUgMzEuNy03MS41IDEuNSA4LjcgMy42IDE3LjMgNi4yIDI1LjggMi44IDkuNSA4LjcgMTkuOSAxMy40IDMwLTMuOCA1LjItNi4xIDguMi02LjEgOC4yIDAgLjEgMCAuMSAuMSAuMi0zIDQtNi40IDguMy05LjkgMTIuNS0xMi44IDE1LjItMjggMzIuNi0zMCAzNy42LTIuNCA1LjktMS44IDEwLjMgMi44IDEzLjcgMy40IDIuNiA5LjQgMyAxNS43IDIuNSAxMS41LS44IDE5LjYtMy42IDIzLjUtNS40IDcuMi0yLjYgMTQtNi4xIDIwLjItMTAuNiAxMi41LTkuMiAyMC4xLTIyLjQgMTkuNC0zOS44LS40LTkuNi0zLjUtMTkuMi03LjMtMjguMiAxLjEtMS42IDIuMy0zLjMgMy40LTUgMTkuOC0yOC45IDM1LjEtNjAuNiAzNS4xLTYwLjYgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjQgOC4xIDcuMSAxNyAxMS40IDI1LjctMTguNiAxNS4xLTMwLjEgMzIuNi0zNC4xIDQ0LjEtNy40IDIxLjMtMS42IDMwLjkgOS4zIDMzLjEgNC45IDEgMTEuOS0xLjMgMTcuMS0zLjUgNy43LTIuNiAxNS02LjMgMjEuNi0xMS4xIDEyLjUtOS4yIDI0LjYtMjIuMSAyMy44LTM5LjYtLjMtNy45LTIuNS0xNS44LTUuNC0yMy40IDE1LjctNi42IDM2LjEtMTAuMiA2Mi4xLTcuMiA1NS43IDYuNSA2Ni42IDQxLjMgNjQuNSA1NS44cy0xMy44IDIyLjYtMTcuNyAyNS01LjEgMy4zLTQuOCA1LjFjLjUgMi42IDIuMyAyLjUgNS42IDEuOSA0LjYtLjggMjkuMi0xMS44IDMwLjMtMzguNyAxLjYtMzQtMzEuMS03MS40LTg5LTcxLjFsMCAwek0xMjEuOCA0MzYuNmMtMTguNCAyMC4xLTQ0LjIgMjcuNy01NS4zIDIxLjMtMTEuOS02LjktNy4yLTM2LjUgMTUuNS01Ny45IDEzLjgtMTMgMzEuNi0yNSA0My40LTMyLjQgMi43LTEuNiA2LjYtNCAxMS40LTYuOSAuOC0uNSAxLjItLjcgMS4yLS43IC45LS42IDEuOS0xLjEgMi45LTEuNyA4LjMgMzAuNCAuMyA1Ny4yLTE5LjEgNzguM2wwIDB6bTEzNC40LTkxLjRjLTYuNCAxNS43LTE5LjkgNTUuNy0yOC4xIDUzLjYtNy0xLjgtMTEuMy0zMi4zLTEuNC02Mi4zIDUtMTUuMSAxNS42LTMzLjEgMjEuOS00MC4xIDEwLjEtMTEuMyAyMS4yLTE0LjkgMjMuOC0xMC40IDMuNSA1LjktMTIuMiA0OS40LTE2LjIgNTkuMnptMTExIDUzYy0yLjcgMS40LTUuMiAyLjMtNi40IDEuNi0uOS0uNSAxLjEtMi40IDEuMS0yLjRzMTMuOS0xNC45IDE5LjQtMjEuN2MzLjItNCA2LjktOC43IDEwLjktMTMuOSAwIC41IC4xIDEgLjEgMS42LS4xIDE3LjktMTcuMyAzMC0yNS4xIDM0LjhsMCAwem04NS42LTE5LjVjLTItMS40LTEuNy02LjEgNS0yMC43IDIuNi01LjcgOC42LTE1LjMgMTktMjQuNSAxLjIgMy41IDEuOCA3LjEgMS45IDEwLjgtLjEgMjIuNS0xNi4yIDMwLjktMjUuOSAzNC40bDAgMHoiXX0sTHVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRocmVlbWEiLGljb246WzM4NCw1MTIsW10sImU4NWYiLCJNODcuNCA0NDUuMWMxOC41IDAgMzMuNSAxNSAzMy41IDMzLjRTMTA1LjkgNTEyIDg3LjQgNTEyIDU0IDQ5NyA1NCA0NzguNSA2OSA0NDUuMSA4Ny40IDQ0NS4xem0xMDkuMiAwYzE4LjUgMCAzMy41IDE1IDMzLjUgMzMuNHMtMTUgMzMuNS0zMy41IDMzLjUtMzMuNC0xNS0zMy40LTMzLjUgMTUtMzMuNCAzMy40LTMzLjR6bTEwOS4zIDBjMTguNSAwIDMzLjUgMTUgMzMuNSAzMy40cy0xNSAzMy41LTMzLjUgMzMuNS0zMy41LTE1LTMzLjUtMzMuNSAxNS0zMy40IDMzLjUtMzMuNHpNMTkyLjMgLjNjMTA5LjggMCAxOTkuMiA4OS4zIDE5OS4yIDE5OS4xUzMwMi4yIDM5OC41IDE5Mi40IDM5OC41Yy00MC41IDAtNzguMS0xMi4xLTEwOS42LTMyLjlsLTc2LjUgMjQuNSAyNC44LTc0QzcuMyAyODMuNC02LjggMjQzLTYuOCAxOTkuNC02LjggODkuNyA4Mi41IC4zIDE5Mi4zIC4zem0uMSA5My43Yy0zMS42IDAtNTcuMyAyNS44LTU3LjMgNTcuM2wwIDI2LjctMS44IDBjLTEwIDAtMTggOC0xOCAxOGwwIDcyLjNjMCAxMCA4IDE4IDE4IDE4bDExOC4xIDBjMTAgMCAxOC04IDE4LTE4bC4xIDAgMC03Mi4zYzAtMTAtOC4xLTE4LTE4LTE4bC0xLjggMCAwLTI2LjdjMC0zMS42LTI1LjgtNTcuMy01Ny4zLTU3LjN6bS0uMSAyMy41YzE4LjYgMCAzMy44IDE1LjEgMzMuOCAzMy44bDAgMjYuNy02Ny42IDAgMC0yNi43YzAtMTguNiAxNS4xLTMzLjggMzMuOC0zMy44eiJdfSxfRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtd2hhdHNhcHAiLGljb246WzQ0OCw1MTIsWyJ3aGF0c2FwcC1zcXVhcmUiXSwiZjQwYyIsIk05Mi4xIDI1NC42YzAgMjQuOSA3IDQ5LjIgMjAuMiA3MC4xbDMuMSA1LTEzLjMgNDguNiA0OS45LTEzLjEgNC44IDIuOWMyMC4yIDEyIDQzLjQgMTguNCA2Ny4xIDE4LjRsLjEgMGM3Mi42IDAgMTMzLjMtNTkuMSAxMzMuMy0xMzEuOCAwLTM1LjItMTUuMi02OC4zLTQwLjEtOTMuMi0yNS0yNS01OC0zOC43LTkzLjItMzguNy03Mi43IDAtMTMxLjggNTkuMS0xMzEuOSAxMzEuOHpNMjc0LjggMzMwYy0xMi42IDEuOS0yMi40IC45LTQ3LjUtOS45LTM2LjgtMTUuOS02MS44LTUxLjUtNjYuOS01OC43LS40LS42LS43LS45LS44LTEuMS0yLTIuNi0xNi4yLTIxLjUtMTYuMi00MSAwLTE4LjQgOS0yNy45IDEzLjItMzIuMyAuMy0uMyAuNS0uNSAuNy0uOCAzLjYtNCA3LjktNSAxMC42LTUgMi42IDAgNS4zIDAgNy42IC4xbC44IDBjMi4zIDAgNS4yIDAgOC4xIDYuOCAxLjIgMi45IDMgNy4zIDQuOSAxMS44IDMuMyA4IDYuNyAxNi4zIDcuMyAxNy42IDEgMiAxLjcgNC4zIC4zIDYuOS0zLjQgNi44LTYuOSAxMC40LTkuMyAxMy0zLjEgMy4yLTQuNSA0LjctMi4zIDguNiAxNS4zIDI2LjMgMzAuNiAzNS40IDUzLjkgNDcuMSA0IDIgNi4zIDEuNyA4LjYtMSAyLjMtMi42IDkuOS0xMS42IDEyLjUtMTUuNSAyLjYtNCA1LjMtMy4zIDguOS0yczIzLjEgMTAuOSAyNy4xIDEyLjljLjggLjQgMS41IC43IDIuMSAxIDIuOCAxLjQgNC43IDIuMyA1LjUgMy42IC45IDEuOSAuOSA5LjktMi40IDE5LjEtMy4zIDkuMy0xOS4xIDE3LjctMjYuNyAxOC44ek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTQ4LjEgMzkzLjlMNjQgNDE2IDg2LjUgMzMzLjhjLTEzLjktMjQtMjEuMi01MS4zLTIxLjItNzkuMyAuMS04Ny40IDcxLjItMTU4LjUgMTU4LjYtMTU4LjUgNDIuNCAwIDgyLjIgMTYuNSAxMTIuMiA0Ni41IDI5LjkgMzAgNDcuOSA2OS44IDQ3LjkgMTEyLjIgMCA4Ny40LTcyLjcgMTU4LjUtMTYwLjEgMTU4LjUtMjYuNiAwLTUyLjctNi43LTc1LjgtMTkuM3oiXX0sJHVlPV9FLEF1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJza3lwZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjE3ZSIsIk00MjQuNyAyOTkuOGMyLjktMTQgNC43LTI4LjkgNC43LTQzLjggMC0xMTMuNS05MS45LTIwNS4zLTIwNS4zLTIwNS4zLTE0LjkgMC0yOS43IDEuNy00My44IDQuNy0xOS0xNC43LTQyLjYtMjMuNC02OC4zLTIzLjQtNjEuOCAwLTExMiA1MC4yLTExMiAxMTIgMCAyNS43IDguNyA0OS4zIDIzLjMgNjguMi0yLjkgMTQtNC43IDI4LjktNC43IDQzLjggMCAxMTMuNSA5MS45IDIwNS4zIDIwNS4zIDIwNS4zIDE0LjkgMCAyOS43LTEuNyA0My44LTQuNyAxOSAxNC42IDQyLjYgMjMuMyA2OC4yIDIzLjMgNjEuOCAwIDExMi01MC4yIDExMi0xMTIgLjEtMjUuNi04LjYtNDkuMi0yMy4yLTY4LjF6TTIzMC4xIDM5MS4zYy02NS42IDAtMTIwLjUtMjkuMi0xMjAuNS02NSAwLTE2IDktMzAuNiAyOS41LTMwLjYgMzEuMiAwIDM0LjEgNDQuOSA4OC4xIDQ0LjkgMjUuNyAwIDQyLjMtMTEuNCA0Mi4zLTI2LjMgMC0xOC43LTE2LTIxLjYtNDItMjgtNjIuNS0xNS40LTExNy44LTIyLTExNy44LTg3LjIgMC01OS4yIDU4LjYtODEuMSAxMDkuMS04MS4xIDU1LjEgMCAxMTAuOCAyMS45IDExMC44IDU1LjQgMCAxNi45LTExLjQgMzEuOC0zMC4zIDMxLjgtMjguMyAwLTI5LjItMzMuNS03NS0zMy41LTI1LjcgMC00MiA3LTQyIDIyLjUgMCAxOS44IDIwLjggMjEuOCA2OS4xIDMzIDQxLjQgOS4zIDkwLjcgMjYuOCA5MC43IDc3LjYgMCA1OS4xLTU3LjEgODYuNS0xMTIgODYuNXoiXX0sRHVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFuZ3VsYXIiLGljb246WzQ0OCw1MTIsW10sImY0MjAiLCJNMTg1LjcgMjY4LjFsNzYuMiAwLTM4LjEtOTEuNi0zOC4xIDkxLjZ6TTIyMy44IDMyTDE2IDEwNi40IDQ3LjggMzgyLjEgMjIzLjggNDgwIDM5OS44IDM4Mi4xIDQzMS42IDEwNi40IDIyMy44IDMyek0zNTQgMzczLjhsLTQ4LjYgMC0yNi4yLTY1LjQtMTEwLjYgMC0yNi4yIDY1LjQtNDguNyAwIDEzMC4xLTI5Mi4zIDEzMC4yIDI5Mi4zeiJdfSxFdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2lyY2xlLXp1bGlwIixpY29uOls1MTIsNTEyLFtdLCJlODUxIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyek0yNDMuNSAyNDBjMS4yLTEuOS0uOS00LjItMi42LTIuOGwtODkgNzkuNWMtOS4yIDcuMi0xNS4yIDE5LjEtMTUuMiAzMi41IDAgMjEuOSAxNiAzOS44IDM1LjcgMzkuOGwxNjcuMyAwYzE5LjYgMCAzNS43LTE3LjkgMzUuNy0zOS44IDAtMjEuOS0xNi4xLTM5LjctMzUuNy0zOS44bC0xMjYuNiAwYy0xLjkgMC0zLTIuMy0yLjEtNC4xTDI0My41IDI0MHpNMTcyLjQgMTIzLjFjLTE5LjYgMC0zNS43IDE3LjktMzUuNyAzOS44czE2IDM5LjggMzUuNyAzOS44bDEyNi42IDBjMS45IDAgMy4xIDIuMiAyLjIgNC4xTDI2OC41IDI3MmMtMS4yIDEuOSAuOSA0LjIgMi42IDIuOGw4OS03OS41YzkuMi03LjIgMTUuMi0xOS4xIDE1LjItMzIuNSAwLTIxLjktMTYtMzkuNy0zNS43LTM5LjhsLTE2Ny4zIDB6Il19LFB1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuc3VzZSIsaWNvbjpbNjQwLDUxMixbXSwiZTYyYiIsIk00NzEuMSAxMDIuN3MtLjMgMTguMy0uMyAyMC4zYy05LjEtMy03NC40LTI0LjEtMTM1LjctMjYuMy01MS45LTEuOC0xMjIuOC00LjMtMjIzIDU3LjMtMTkuNCAxMi40LTczLjkgNDYuMS05OS42IDEwOS43LTUuNSAxMy4zLTEyLjYgNDMuMy01LjUgNzEuNCAzLjMgMTIuOCA4LjkgMjQuOSAxNi41IDM1LjcgMTcuNCAyNSA0Ni42IDQxLjYgNzguMSA0NC40IDQ0LjQgMy45IDc4LjEtMTYgOTAtNTMuMyA4LjItMjUuOCAwLTYzLjYtMzEuNS04Mi45LTI1LjYtMTUuNy01My4zLTEyLjEtNjkuMi0xLjYtMTMuOSA5LjItMjEuOCAyMy41LTIxLjYgMzkuMiAuMyAyNy44IDI0LjMgNDIuNiA0MS41IDQyLjYgNS40IDAgMTAuNy0uOSAxNS44LTIuNyA2LjUtMS44IDEzLjMtNi41IDEzLjMtMTQuOSAwLTEyLjEtMTEuNi0xNC44LTE2LjgtMTMuOS0yLjkgLjUtNC41IDItMTEuOCAyLjQtMi0uMi0xMi0zLjEtMTItMTRsMC0uMWMuMi0xMi4zIDEzLjItMTggMjUuNS0xNi45IDMyLjMgMi44IDQ3LjcgNDAuNyAyOC41IDY1LjctMTguMyAyMy43LTc2LjYgMjMuMi05OS43LTIwLjQtMjYtNDkuMiAxMi43LTExMS4yIDg3LTk4LjQgMzMuMiA1LjcgODMuNiAzNS41IDEwMi40IDEwNC4zbDQ1LjkgMGMtNS43LTE3LjYtOC45LTY4LjMgNDIuNy02OC4zIDU2LjcgMCA2My45IDM5LjkgNzkuOCA2OC4zbDQ4LjYgMGMtMTIuOC0xOC4zLTIxLjctMzguNy0xOC45LTU1LjggNS42LTMzLjggMzkuNy0xOC40IDgyLjQtMTcuNCA2Ni41IC40IDEwMi4xLTI3IDEwMy4xLTI4IDMuNy0zLjEgNi41LTE1LjggNy0xNy43IDEuMy01LjEtMy4yLTIuNC0zLjItMi40LTguNyA1LjItMzAuNSAxNS4yLTUwLjkgMTUuNi0yNS4zIC41LTc2LjItMjUuNC04MS42LTI4LjItLjMtLjQgLjEgMS4yLTExLTI1LjUgODguNCA1OC4zIDExOC4zIDQwLjUgMTQ1LjIgMjEuNyAuOC0uNiA0LjMtMi45IDMuNi01LjctMTMuOC00OC4xLTIyLjQtNjIuNy0zNC41LTY5LjYtMzctMjEuNi0xMjUtMzQuNy0xMjkuMi0zNS4zIC4xLS4xLS45LS4zLS45IC43em02MC40IDcyLjhhMzcuNiAzNy42IDAgMSAxIDc1LjIgMi42IDM3LjYgMzcuNiAwIDEgMSAtNzUuMi0yLjZ6bTM4LjYtMjUuM2MtMy42LS4zLTcuMSAuMS0xMC41IDEuMnMtNi41IDIuOS05LjIgNS4zLTQuOCA1LjMtNi4zIDguNS0yLjQgNi43LTIuNSAxMC4zIC41IDcuMSAxLjggMTAuNCAzLjMgNi4zIDUuOCA4LjkgNS41IDQuNSA4LjggNS45IDYuOSAyIDEwLjQgMS45YzMuNiAuMyA3LjEtLjEgMTAuNS0xLjJzNi41LTIuOSA5LjItNS4zIDQuOC01LjMgNi4zLTguNSAyLjQtNi43IDIuNS0xMC4zLS41LTcuMS0xLjgtMTAuNC0zLjMtNi4zLTUuOC04LjktNS41LTQuNS04LjgtNS45LTYuOS0yLTEwLjQtMS45em00LjMgMjguOGMtMTUuNCAwLTE1LjQtMTUuNiAwLTE1LjZzMTUuNCAxNS42IDAgMTUuNnoiXX0sSXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRyb3Bib3giLGljb246WzU3Niw1MTIsW10sImYxNmIiLCJNMjg4LjQgMTE2LjNsLTEzMiA4NC4zIDEzMiA4NC4zLTEzMiA4NC4zLTEzMi40LTg1LjEgMTMyLjMtODQuMy0xMzIuMy04My41IDEzMi4zLTg0LjMgMTMyLjEgODQuM3pNMTU1LjYgMzk1LjdsMTMyLTg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLTg0LjN6TTI4OC40IDI4NC4xbDEzMi04NC4zLTEzMi04My42IDEzMS4zLTg0LjIgMTMyLjMgODQuMy0xMzIuMyA4NC4zIDEzMi4zIDg0LjItMTMyLjMgODQuMy0xMzEuMy04NXoiXX0sTnVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRlZXplciIsaWNvbjpbNTEyLDUxMixbXSwiZTA3NyIsIk0xNC44IDEwMS4xQzYuNiAxMDEuMSAwIDEyNy42IDAgMTYwLjNzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yek00NDguNyA0MC45Yy03LjcgMC0xNC41IDE3LjEtMTkuNCA0NC4xLTcuNy00Ni43LTIwLjItNzctMzQuMi03Ny0xNi44IDAtMzEuMSA0Mi45LTM4IDEwNS40LTYuNi00NS40LTE2LjgtNzQuMi0yOC4zLTc0LjItMTYuMSAwLTI5LjYgNTYuOS0zNC43IDEzNi4yLTkuNC00MC44LTIzLjItNjYuMy0zOC4zLTY2LjNzLTI4LjggMjUuNS0zOC4zIDY2LjNjLTUuMS03OS4zLTE4LjYtMTM2LjItMzQuNy0xMzYuMi0xMS41IDAtMjEuNyAyOC44LTI4LjMgNzQuMi02LjYtNjIuNS0yMS4yLTEwNS40LTM3LjgtMTA1LjQtMTQgMC0yNi41IDMwLjQtMzQuMiA3Ny00LjgtMjctMTEuNy00NC4xLTE5LjQtNDQuMS0xNC4zIDAtMjYgNTkuMi0yNiAxMzIuMVM0OSAzMDUuMiA2My4zIDMwNS4yYzUuOSAwIDExLjUtOS45IDE1LjgtMjYuOCA2LjkgNjEuNyAyMS4yIDEwNC4xIDM4IDEwNC4xIDEzIDAgMjQuNS0yNS41IDMyLjEtNjUuNiA1LjQgNzYuMyAxOC42IDEzMC40IDM0LjIgMTMwLjQgOS43IDAgMTguNi0yMS40IDI1LjMtNTYuNCA3LjkgNzIuMiAyNi4zIDEyMi43IDQ3LjcgMTIyLjdzMzkuNS01MC41IDQ3LjctMTIyLjdjNi42IDM1IDE1LjYgNTYuNCAyNS4zIDU2LjQgMTUuNiAwIDI4LjgtNTQuMSAzNC4yLTEzMC40IDcuNyA0MC4xIDE5LjQgNjUuNiAzMi4xIDY1LjYgMTYuNiAwIDMwLjktNDIuMyAzOC0xMDQuMSA0LjMgMTYuOCA5LjcgMjYuOCAxNS44IDI2LjggMTQuMyAwIDI2LTU5LjIgMjYtMTMyLjFTNDYzIDQwLjkgNDQ4LjcgNDAuOXptNDguNSA2MC4yYy04LjIgMC0xNC44IDI2LjUtMTQuOCA1OS4yczYuNiA1OS4yIDE0LjggNTkuMiAxNC44LTI2LjUgMTQuOC01OS4yLTYuNi01OS4yLTE0LjgtNTkuMnoiXX0sRnVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmciLGljb246WzUxMiw1MTIsW10sImY0ZjAiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem0zLjYgNTMuMmMyLjgtLjMgMTEuNSAxIDExLjUgMTEuNWw2LjYgMTA3LjIgNC45LTU5LjNjMC02IDQuNy0xMC42IDEwLjYtMTAuNnMxMC42IDQuNyAxMC42IDEwLjZjMCAyLjUtLjUtNS43IDUuNyA4MS41bDUuOC02NC4yYy4zLTIuOSAyLjktOS4zIDEwLjItOS4zIDMuOCAwIDkuOSAyLjMgMTAuNiA4LjlsMTEuNSA5Ni41IDUuMy0xMi44YzEuOC00LjQgNS4yLTYuNiAxMC4yLTYuNmw1OCAwIDAgMjEuMy01MC45IDAtMTguMiA0NC4zYy0zLjkgOS45LTE5LjUgOS4xLTIwLjgtMy4xbC00LTMxLjktNy41IDkyLjZjLS4zIDMtMyA5LjMtMTAuMiA5LjMtMyAwLTkuOC0yLjEtMTAuNi05LjMgMC0xLjkgLjYgNS44LTYuMi03Ny45bC01LjMgNzIuMmMtMS4xIDQuOC00LjggOS4zLTEwLjYgOS4zLTIuOSAwLTkuOC0yLTEwLjYtOS4zIDAtMS45IC41IDYuNy01LjgtODcuN0wyNTUgMzgzLjljMCA2LjMtMy42IDEyLjQtMTAuNiAxMi40LTUuMiAwLTEwLjYtNC4xLTEwLjYtMTJMMjI4IDI5Ni42Yy01LjggOTIuNS01LjMgODQtNS4zIDg1LjktMS4xIDQuOC00LjggOS4zLTEwLjYgOS4zLTMgMC05LjgtMi4xLTEwLjYtOS4zIDAtLjctLjQtMS4xLS40LTIuNmwtNi4yLTg4LjYtNC45IDU2LjdjLS43IDYuNS02LjcgOS4zLTEwLjYgOS4zLTUuOCAwLTkuNi00LjEtMTAuNi04LjlMMTU3LjcgMjcyYy0yIDQtMy41IDguNC0xMS4xIDguNGwtNTEuNCAwIDAtMjEuMyA0NC44IDAgMTMuNy0yNy45YzQuNC05LjkgMTguMi03LjIgMTkuOSAyLjdsMy4xIDIwLjQgOC40LTk3LjljMC02IDQuOC0xMC42IDEwLjYtMTAuNiAuNSAwIDEwLjYtLjIgMTAuNiAxMi40bDQuOSA2OS4xIDYuNi05Mi42YzAtMTAuMSA5LjUtMTAuNiAxMC4yLTEwLjYgLjYgMCAxMC42IC43IDEwLjYgMTAuNmw1LjMgODAuNiA2LjItOTcuOWMuMS0xLjEtLjYtMTAuMyA5LjktMTEuNXoiXX0sT3VlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImplZGktb3JkZXIiLGljb246WzQ0OCw1MTIsW10sImY1MGUiLCJNMzk4LjkgMzczLjZjOTUuOS0xMjIuMSAxNy4yLTIzMy4xIDE3LjItMjMzLjEgNDUuNCA4NS44LTQxLjQgMTcwLjUtNDEuNCAxNzAuNSAxMDUtMTcxLjUtNjAuNS0yNzEuNS02MC41LTI3MS41IDk2LjkgNzIuNy0xMC4xIDE5MC43LTEwLjEgMTkwLjcgODUuOCAxNTguNC02OC42IDIzMC4xLTY4LjYgMjMwLjFzLS40LTE2LjktMi4yLTg1LjdjNC4zIDQuNSAzNC41IDM2LjIgMzQuNSAzNi4ybC0yNC4yLTQ3LjQgNjIuNi05LjEtNjIuNi05LjEgMjAuMi01NS41LTMxLjQgNDUuOWMtMi4yLTg3LjctNy44LTMwNS4xLTcuOS0zMDYuOSAwIDEtNS42IDIxOS03LjkgMzA2LjlsLTMxLjQtNDUuOSAyMC4yIDU1LjUtNjIuNiA5LjEgNjIuNiA5LjEtMjQuMiA0Ny40IDM0LjUtMzYuMmMtMS44IDY4LjgtMi4yIDg1LjctMi4yIDg1LjdTNTkuMSAzODguNiAxNDQuOSAyMzAuMmMwIDAtMTA3LTExOC4xLTEwLjEtMTkwLjcgMCAwLTE2NS41IDk5LjktNjAuNSAyNzEuNSAwIDAtODYuOC04NC44LTQxLjQtMTcwLjUgMCAwLTc4LjcgMTExIDE3LjIgMjMzLjEgMCAwLTI2LjItMTYuMS00OS40LTc3LjcgMCAwIDE2LjkgMTgzLjMgMjIyIDE4NS43bDQuMSAwYzIwNS0yLjQgMjIyLTE4NS43IDIyMi0xODUuNy0yMy42IDYxLjUtNDkuOSA3Ny43LTQ5LjkgNzcuN3oiXX0sUnVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InItcHJvamVjdCIsaWNvbjpbNTc2LDUxMixbXSwiZjRmNyIsIk01NzguNSAyMjYuNkM1NzguNSAxMTkuMSA0NDguNCAzMiAyODggMzJTLTIuNSAxMTkuMS0yLjUgMjI2LjZjMCA5NS44IDEwMy4zIDE3NS40IDIzOS40IDE5MS41bDAgNjEuOSA5OS4xIDAgMC02MS41YzI0LjMtMi43IDQ3LjYtNy40IDY5LjQtMTMuOWw0MC4xIDc1LjQgMTEyIDAtNjcuNC0xMTMuN2M1NC41LTM1LjQgODguNC04NC45IDg4LjQtMTM5Ljd6TTExMS43IDI0MS4xYzAtNzMuNSA5OC45LTEzMyAyMjAuOC0xMzNzMjExLjkgNDAuNyAyMTEuOSAxMzNjMCA1MC4xLTI2LjUgODUtNzAuMyAxMDYuNC0yLjQtMS42LTQuNy0yLjktNi40LTMuNy0xMC4yLTUuMi0yNy44LTEwLjUtMjcuOC0xMC41czg2LjYtNi40IDg2LjYtOTIuNy05MC42LTg3LjktOTAuNi04Ny45bC0xOTkgMCAwIDIwOC4zYy03NC4xLTIxLjUtMTI1LjItNjcuMS0xMjUuMi0xMTkuOXptMjI1LjEgMzguM2wwLTU1LjZjNTcuOCAwIDg3LjgtNi44IDg3LjggMjcuMyAwIDM2LjUtMzguMiAyOC4zLTg3LjggMjguM3ptLS45IDcyLjVsMjYuNiAwYzEwLjggMCAxOC45IDExLjcgMjQgMTkuMi0xNi4xIDEuOS0zMyAyLjgtNTAuNiAyLjlsMC0yMi4xeiJdfSxCdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW5zdGFsb2QiLGljb246WzUxMiw1MTIsW10sImUwODEiLCJNMTUzLjYgNDgwbDIzMy43IDAgMTE1LjQtMjA0LjItMjk4LjMgNTcuNC01MC44IDE0Ni44ek01MDUgMjQwLjFMMzg3LjQgMzIgMTU1LjkgMzIgMzYwLjUgMjY3LjkgNTA1IDI0MC4xek0xMjQuNiA0OC44TDcuNSAyNTYgMTIzLjUgNDYxLjIgMjI1LjkgMTY1LjYgMTI0LjYgNDguOHoiXX0sSHVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNhbmFkaWFuLW1hcGxlLWxlYWYiLGljb246WzUxMiw1MTIsW10sImY3ODUiLCJNMzgzLjggMzUxLjdjMi41LTIuNSAxMDUuMi05Mi40IDEwNS4yLTkyLjRsLTE3LjUtNy41Yy0xMC00LjktNy40LTExLjUtNS0xNy40IDIuNC03LjYgMjAuMS02Ny4zIDIwLjEtNjcuM3MtNDcuNyAxMC01Ny43IDEyLjVjLTcuNSAyLjQtMTAtMi41LTEyLjUtNy41cy0xNS0zMi40LTE1LTMyLjQtNTIuNiA1OS45LTU1LjEgNjIuM2MtMTAgNy41LTIwLjEgMC0xNy42LTEwIDAtMTAgMjcuNi0xMjkuNiAyNy42LTEyOS42cy0zMC4xIDE3LjQtNDAuMSAyMi40Yy03LjUgNS0xMi42IDUtMTcuNi01LTUuMS03LjUtNDIuNy03OS44LTQyLjctNzkuOHMtMzcuNSA3Mi4zLTQyLjUgNzkuOGMtNSAxMC0xMCAxMC0xNy42IDUtMTAtNS00MC4xLTIyLjQtNDAuMS0yMi40UzE4My4zIDE4MiAxODMuMyAxOTJjMi41IDEwLTcuNSAxNy41LTE3LjYgMTAtMi41LTIuNS01NS4xLTYyLjMtNTUuMS02Mi4zcy0xMi41IDI3LjMtMTUgMzIuMy01IDkuOS0xMi41IDcuNUM3MyAxNzcgMjUuNCAxNjcgMjUuNCAxNjdTNDMgMjI2LjcgNDUuNSAyMzQuM2MyLjQgNiA1IDEyLjUtNSAxNy40TDIzIDI1OS4zczEwMi42IDg5LjkgMTA1LjIgOTIuNGM1LjEgNSAxMCA3LjUgNS4xIDIyLjUtNS4xIDE1LTEwLjEgMzUuMS0xMC4xIDM1LjFzOTUuMi0yMC4xIDEwNS4zLTIyLjZjOC43LS45IDE4LjMgMi41IDE4LjMgMTIuNVMyNDEgNTEyIDI0MSA1MTJsMzAgMHMtNS44LTEwMi43LTUuOC0xMTIuOCA5LjUtMTMuNCAxOC40LTEyLjVjMTAgMi41IDEwNS4yIDIyLjYgMTA1LjIgMjIuNnMtNS0yMC4xLTEwLTM1LjEgMC0xNy41IDUtMjIuNXoiXX0scXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImV0aGVyZXVtIixpY29uOlszMjAsNTEyLFtdLCJmNDJlIiwiTTMxMS45IDI2MC44TDE2MCAzNTMuNiA4IDI2MC44IDE2MCAwIDMxMS45IDI2MC44ek0xNjAgMzgzLjRMOCAyOTAuNiAxNjAgNTEyIDMxMiAyOTAuNiAxNjAgMzgzLjR6Il19LFZ1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJob3V6eiIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3YyIsIk0yNzYgMzMwLjdsLTEwNC42IDAgMCAxNDkuMy0xNTQuMyAwIDAtNDQ4IDEwOS41IDAgMCAxMDQuNSAzMDUuMSA4NS42IDAgMjU3LjktMTU1LjcgMCAwLTE0OS4zeiJdfSxqdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidmliZXIiLGljb246WzUxMiw1MTIsW10sImY0MDkiLCJNNDQ0LjMgNDkuOWMtMTIuNy0xMS43LTY0LjEtNDktMTc4LjctNDkuNSAwIDAtMTM1LjEtOC4xLTIwMC45IDUyLjMtMzYuNiAzNi42LTQ5LjUgOTAuMy01MC45IDE1Ni44cy0zLjEgMTkxLjEgMTE3IDIyNC45bC4xIDAtLjEgNTEuNnMtLjggMjAuOSAxMyAyNS4xYzE2LjYgNS4yIDI2LjQtMTAuNyA0Mi4zLTI3LjggOC43LTkuNCAyMC43LTIzLjIgMjkuOC0zMy43IDgyLjIgNi45IDE0NS4zLTguOSAxNTIuNS0xMS4yIDE2LjYtNS40IDExMC41LTE3LjQgMTI1LjctMTQyIDE1LjgtMTI4LjYtNy42LTIwOS44LTQ5LjgtMjQ2LjV6TTQ1OC4yIDI4N2MtMTIuOSAxMDQtODkgMTEwLjYtMTAzIDExNS4xLTYgMS45LTYxLjUgMTUuNy0xMzEuMiAxMS4yIDAgMC01MiA2Mi43LTY4LjIgNzktNS4zIDUuMy0xMS4xIDQuOC0xMS01LjcgMC02LjkgLjQtODUuNyAuNC04NS43bDAgMEM0My40IDM3Mi43IDQ5LjQgMjY2LjYgNTAuNSAyMTEuMXMxMS42LTEwMSA0Mi42LTEzMS42YzU1LjctNTAuNSAxNzAuNC00MyAxNzAuNC00MyA5Ni45IC40IDE0My4zIDI5LjYgMTU0LjEgMzkuNCAzNS43IDMwLjYgNTMuOSAxMDMuOCA0MC42IDIxMS4xem0tMTM5LTgwLjhjLjQgOC42LTEyLjUgOS4yLTEyLjkgLjYtMS4xLTIyLTExLjQtMzIuNy0zMi42LTMzLjktOC42LS41LTcuOC0xMy40IC43LTEyLjkgMjcuOSAxLjUgNDMuNCAxNy41IDQ0LjggNDYuMnptMjAuMyAxMS4zYzEtNDIuNC0yNS41LTc1LjYtNzUuOC03OS4zLTguNS0uNi03LjYtMTMuNSAuOS0xMi45IDU4IDQuMiA4OC45IDQ0LjEgODcuOCA5Mi41LS4xIDguNi0xMy4xIDguMi0xMi45LS4zem00NyAxMy40Yy4xIDguNi0xMi45IDguNy0xMi45IC4xLS42LTgxLjUtNTQuOS0xMjUuOS0xMjAuOC0xMjYuNC04LjUtLjEtOC41LTEyLjkgMC0xMi45IDczLjcgLjUgMTMzIDUxLjQgMTMzLjcgMTM5LjJ6TTM3NS4yIDMyOWwwIC4yYy0xMC44IDE5LTMxIDQwLTUxLjggMzMuM2wtLjItLjNjLTIxLjEtNS45LTcwLjgtMzEuNS0xMDIuMi01Ni41LTE2LjItMTIuOC0zMS0yNy45LTQyLjQtNDIuNC0xMC4zLTEyLjktMjAuNy0yOC4yLTMwLjgtNDYuNi0yMS4zLTM4LjUtMjYtNTUuNy0yNi01NS43LTYuNy0yMC44IDE0LjItNDEgMzMuMy01MS44bC4yIDBjOS4yLTQuOCAxOC0zLjIgMjMuOSAzLjkgMCAwIDEyLjQgMTQuOCAxNy43IDIyLjEgNSA2LjggMTEuNyAxNy43IDE1LjIgMjMuOCA2LjEgMTAuOSAyLjMgMjItMy43IDI2LjZsLTEyIDkuNmMtNi4xIDQuOS01LjMgMTQtNS4zIDE0czE3LjggNjcuMyA4NC4zIDg0LjNjMCAwIDkuMSAuOCAxNC01LjNsOS42LTEyYzQuNi02IDE1LjctOS44IDI2LjYtMy43IDE0LjcgOC4zIDMzLjQgMjEuMiA0NS44IDMyLjkgNyA1LjcgOC42IDE0LjQgMy44IDIzLjZ6Il19LFRFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImtpY2tzdGFydGVyIixpY29uOls0NDgsNTEyLFsic3F1YXJlLWtpY2tzdGFydGVyIl0sImYzYmIiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzIwLjggMjMzbC0yMy4zIDIzLjEgMjMuMyAyMi45YzI0LjEgMjMuOSAyNC4xIDYzIDAgODYuOXMtNjMuNCAyMy45LTg3LjYgMGwtOC41LTguNGMtMTEuMyAxNi0yOS43IDI2LjUtNTAuOSAyNi41LTM0LjEgMC02MS45LTI3LjUtNjEuOS02MS40bDAtMTMzLjJjMC0zMy44IDI3LjctNjEuNCA2MS45LTYxLjQgMjEuMSAwIDM5LjYgMTAuNSA1MC45IDI2LjVsOC41LTguNGMyNC4xLTIzLjkgNjMuNC0yMy45IDg3LjYgMHMyNC4xIDYzIDAgODYuOXoiXX0sVXVlPVRFLFd1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcG90aWZ5IixpY29uOls1MTIsNTEyLFtdLCJmMWJjIiwiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzU2LjcgMzcyLjljLTQuMiAwLTYuOC0xLjMtMTAuNy0zLjYtNjIuNC0zNy42LTEzNS0zOS4yLTIwNi43LTI0LjUtMy45IDEtOSAyLjYtMTEuOSAyLjYtOS43IDAtMTUuOC03LjctMTUuOC0xNS44IDAtMTAuMyA2LjEtMTUuMiAxMy42LTE2LjggODEuOS0xOC4xIDE2NS42LTE2LjUgMjM3IDI2LjIgNi4xIDMuOSA5LjcgNy40IDkuNyAxNi41cy03LjEgMTUuNC0xNS4yIDE1LjR6bTI2LjktNjUuNmMtNS4yIDAtOC43LTIuMy0xMi4zLTQuMi02Mi41LTM3LTE1NS43LTUxLjktMjM4LjYtMjkuNC00LjggMS4zLTcuNCAyLjYtMTEuOSAyLjYtMTAuNyAwLTE5LjQtOC43LTE5LjQtMTkuNHM1LjItMTcuOCAxNS41LTIwLjdjMjcuOC03LjggNTYuMi0xMy42IDk3LjgtMTMuNiA2NC45IDAgMTI3LjYgMTYuMSAxNzcgNDUuNSA4LjEgNC44IDExLjMgMTEgMTEuMyAxOS43LS4xIDEwLjgtOC41IDE5LjUtMTkuNCAxOS41em0zMS03Ni4yYy01LjIgMC04LjQtMS4zLTEyLjktMy45LTcxLjItNDIuNS0xOTguNS01Mi43LTI4MC45LTI5LjctMy42IDEtOC4xIDIuNi0xMi45IDIuNi0xMy4yIDAtMjMuMy0xMC4zLTIzLjMtMjMuNiAwLTEzLjYgOC40LTIxLjMgMTcuNC0yMy45IDM1LjItMTAuMyA3NC42LTE1LjIgMTE3LjUtMTUuMiA3MyAwIDE0OS41IDE1LjIgMjA1LjQgNDcuOCA3LjggNC41IDEyLjkgMTAuNyAxMi45IDIyLjYgMCAxMy42LTExIDIzLjMtMjMuMiAyMy4zeiJdfSxHdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibGVhbnB1YiIsaWNvbjpbNTc2LDUxMixbXSwiZjIxMiIsIk0zODYuNiAxMTEuNWwxNS4xIDI0OS0xMS0uM2MtMzYuMi0uOC03MS42IDguOC0xMDIuNyAyOC0zMS0xOS4yLTY2LjQtMjgtMTAyLjctMjgtNDUuNiAwLTgyLjEgMTAuNy0xMjMuNSAyNy43TDkzLjIgMTI5LjZjMjguNS0xMS44IDYxLjUtMTguMSA5Mi4yLTE4LjEgNDEuMiAwIDczLjggMTMuMiAxMDIuNyA0Mi41IDI3LjctMjguMyA1OS00MS43IDk4LjUtNDIuNXpNNTY5LjIgNDQ4Yy0yNS41IDAtNDcuNS01LjItNzAuNS0xNS42LTM0LjMtMTUuNi03MC0yNS0xMDcuOS0yNS0zOSAwLTc0LjkgMTIuOS0xMDIuNyA0MC42LTI3LjctMjcuNy02My43LTQwLjYtMTAyLjctNDAuNi0zNy45IDAtNzMuNiA5LjMtMTA3LjkgMjUtMjIuMiA5LjktNDQuNyAxNS42LTY5LjIgMTUuNkw3IDQ0OCA0OS42IDk4LjljMzkuMy0yMi4yIDg3LTM0LjkgMTMyLjMtMzQuOSAzNy4xIDAgNzUuMiA3LjcgMTA2LjIgMjkuMSAzMS0yMS40IDY5LjItMjkuMSAxMDYuMi0yOS4xIDQ1LjMgMCA5MyAxMi42IDEzMi4zIDM0LjlMNTY5LjIgNDQ4em0tNDMuNC00NC43TDQ5MS44IDEyM2MtMzAuNy0xNC02Ny4yLTIxLjQtMTAxLTIxLjQtMzguNCAwLTc0LjQgMTIuMS0xMDIuNyAzOC43LTI4LjMtMjYuNi02NC4yLTM4LjctMTAyLjctMzguNy0zMy44IDAtNzAuMyA3LjQtMTAxIDIxLjRsLTM0IDI4MC4yYzQ3LjItMTkuNSA4Mi45LTMzLjUgMTM1LTMzLjUgMzcuNiAwIDcwLjggOS42IDEwMi43IDI5LjYgMzEuOC0yMCA2NS4xLTI5LjYgMTAyLjctMjkuNiA1Mi4yIDAgODcuOCAxNCAxMzUgMzMuNXoiXX0sWXVlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImphdmEiLGljb246WzM4NCw1MTIsW10sImY0ZTQiLCJNMjc3LjggMzEyLjljOS44LTYuNyAyMy40LTEyLjUgMjMuNC0xMi41cy0zOC43IDctNzcuMiAxMC4yYy00Ny4xIDMuOS05Ny43IDQuNy0xMjMuMSAxLjMtNjAuMS04IDMzLTMwLjEgMzMtMzAuMXMtMzYuMS0yLjQtODAuNiAxOWMtNTIuNSAyNS40IDEzMCAzNyAyMjQuNSAxMi4xem0tODUuNC0zMi4xYy0xOS00Mi43LTgzLjEtODAuMiAwLTE0NS44IDEwMy43LTgxLjggNTAuNS0xMzUgNTAuNS0xMzUgMjEuNSA4NC41LTc1LjYgMTEwLjEtMTEwLjcgMTYyLjYtMjMuOSAzNS45IDExLjcgNzQuNCA2MC4yIDExOC4yek0zMDcgMTA0LjZjLjEgMC0xNzUuMiA0My44LTkxLjUgMTQwLjIgMjQuNyAyOC40LTYuNSA1NC02LjUgNTRzNjIuNy0zMi40IDMzLjktNzIuOUMyMTYgMTg4LjEgMTk1LjQgMTY5LjMgMzA3IDEwNC42em0tNi4xIDI3MC41Yy0uNSAxLTEuMiAxLjgtMiAyLjYgMTI4LjMtMzMuNyA4MS4xLTExOC45IDE5LjgtOTcuMy0zLjMgMS4yLTYuMiAzLjQtOC4yIDYuMyAzLjYtMS4zIDcuMy0yLjMgMTEtMyAzMS02LjUgNzUuNSA0MS41LTIwLjYgOTEuNHpNMzQ4IDQzNy40czE0LjUgMTEuOS0xNS45IDIxLjJjLTU3LjkgMTcuNS0yNDAuOCAyMi44LTI5MS42IC43LTE4LjMtNy45IDE2LTE5IDI2LjgtMjEuMyAxMS4yLTIuNCAxNy43LTIgMTcuNy0yLTIwLjMtMTQuMy0xMzEuMyAyOC4xLTU2LjQgNDAuMiAyMDQuMiAzMy4yIDM3Mi40LTE0LjkgMzE5LjQtMzguOHpNMTI0LjUgMzk2Yy03OC43IDIyIDQ3LjkgNjcuNCAxNDguMSAyNC41LTkuOC0zLjgtMTkuMi04LjQtMjguMi0xMy44LTQ0LjcgOC41LTY1LjQgOS4xLTEwNiA0LjUtMzMuNS0zLjgtMTMuOS0xNS4yLTEzLjktMTUuMnptMTc5LjggOTcuMmMtNzguNyAxNC44LTE3NS44IDEzLjEtMjMzLjMgMy42IDAtLjEgMTEuOCA5LjcgNzIuNCAxMy42IDkyLjIgNS45IDIzMy44LTMuMyAyMzcuMS00Ni45IDAgMC02LjQgMTYuNS03Ni4yIDI5Ljd6TTI2MC43IDM1M2MtNTkuMiAxMS40LTkzLjUgMTEuMS0xMzYuOCA2LjYtMzMuNS0zLjUtMTEuNi0xOS43LTExLjYtMTkuNy04Ni44IDI4LjggNDguMiA2MS40IDE2OS41IDI1LjktNy44LTIuOC0xNS03LjEtMjEuMS0xMi44eiJdfSxadWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibmZjLXN5bWJvbCIsaWNvbjpbNTEyLDUxMixbXSwiZTUzMSIsIk0zNjAuOSAzMi40YzcuNy0xLjMgMTUuNyAuNSAyMS4yIDUgODQuMSA1OC43IDEyOS45IDEzNi4zIDEyOS45IDIxNy43IDAgODMuMS00NS44IDE2MC44LTEyOS45IDIxOS41LTQuOCA0LTExLjcgNS45LTE4LjYgNS4zLTctLjYtMTMuNS0zLjYtMTguNC04LjVMMTYxLjcgMjg4LjdjLTUuNi01LjUtOC43LTEzLTkuNi0yMC45IDAtNy44IDQtMTUuMyA5LjUtMjAuOSA1LjYtNS41IDEzLjEtOC43IDIwLjktOC43IDcuOSAwIDE1LjQgMy4xIDIwLjkgOC42TDM2OC41IDQxMS4yYzU0LjYtNDQuNyA4NC4zLTk5LjIgODQuMy0xNTYuMSAwLTYxLjYtMzYuOS0xMjIuMi0xMDMuOS0xNjkuMy02LjQtNC41LTEwLjgtMTEuNC0xMi4xLTE5LjEtMS40LTcuNyAuNC0xNS43IDUtMjIuMSA0LjUtNi40IDExLjQtMTAuOCAxOS4xLTEyLjF6bS0yMDYgNDQ3LjJjLTcuNyAxLjMtMTUuNi0uNS0yMi4xLTUtODMuMS01OC43LTEyOS0xMzYuNC0xMjktMjE5LjUgMC04MS40IDQ1LjgtMTU5IDEyOS0yMTcuNyA1LjctNCAxMi42LTUuOSAxOS42LTUuMyA2LjkgLjYgMTMuNCAzLjYgMTguMyA4LjVMMzU0LjEgMjIzLjNjNS42IDUuNSA4LjcgMTMgOC43IDIwLjkgLjEgNi45LTMgMTUuMy04LjYgMjAuOS01LjUgNS41LTEzIDguNy0yMC45IDguNy03LjggMC0xNi4yLTMuMS0yMC45LTguNkwxNDcuMyAxMDAuN2MtNTQuNiA0NS4yLTg0LjMgOTkuMi04NC4zIDE1NC40IDAgNjMuNCAzNi45IDEyNCAxMDMuMSAxNzEuMSA3LjMgNC42IDExLjYgMTEuNCAxMyAxOS4yIDEuMyA3LjctLjUgMTUuNy01IDIyLjFzLTExLjQgMTAuNy0xOS4yIDEyLjF6Il19LFh1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3b2R1IixpY29uOls2NDAsNTEyLFtdLCJlMDg4IiwiTTE3OC40IDMzOS43bC0zNy4zIDAtMjguOS0xMTYuMi0uNSAwLTI4LjUgMTE2LjItMzggMC00NS4yLTE3MC44IDM3LjUgMCAyNyAxMTYuMiAuNSAwIDI5LjctMTE2LjIgMzUuMiAwIDI5LjIgMTE3LjcgLjUgMCAyOC0xMTcuNyAzNi44IDAtNDUuOSAxNzAuOHptOTMtMTI3YzM5IDAgNjQuMSAyNS44IDY0LjEgNjUuMyAwIDM5LjItMjUuMSA2NS02NC4xIDY1LTM4LjcgMC02My45LTI1LjgtNjMuOS02NSAwLTM5LjUgMjUuMS02NS4zIDYzLjktNjUuM3ptMCAxMDQuOGMyMy4yIDAgMzAuMS0xOS45IDMwLjEtMzkuNSAwLTE5LjktNi45LTM5LjctMzAuMS0zOS43LTI3LjcgMC0yOS45IDE5LjktMjkuOSAzOS43IDAgMTkuNiA2LjkgMzkuNSAyOS45IDM5LjV6bTE2My43IDYuNWwtLjUgMGMtNy45IDEzLjQtMjEuOCAxOS4xLTM3LjUgMTkuMS0zNy4zIDAtNTUuNS0zMi01NS41LTY2LjIgMC0zMy4yIDE4LjQtNjQuMSA1NC44LTY0LjEgMTQuNiAwIDI4LjkgNi4yIDM2LjggMTguNGwuMiAwIDAtNjIuMiAzNCAwIDAgMTcwLjgtMzIuMyAwIDAtMTUuOHptLTI5LjctODUuNmMtMjIuMiAwLTI5LjkgMTkuMS0yOS45IDM5LjUgMCAxOS40IDguOCAzOS43IDI5LjkgMzkuNyAyMi41IDAgMjkuMi0xOS42IDI5LjItMzkuOSAwLTIwLjEtNy4yLTM5LjItMjkuMi0zOS4yek01OTMgMzM5LjdsLTMyLjMgMCAwLTE3LjItLjcgMGMtOC42IDEzLjktMjMuNCAyMC42LTM3LjggMjAuNi0zNi4xIDAtNDUuMi0yMC4zLTQ1LjItNTAuOWwwLTc2LjEgMzQgMCAwIDY5LjhjMCAyMC4zIDYgMzAuNCAyMS44IDMwLjQgMTguNCAwIDI2LjMtMTAuMyAyNi4zLTM1LjRsMC02NC44IDM0IDAgMCAxMjMuNnptOS41LTM2LjhsMzcuNSAwIDAgMzYuOC0zNy41IDAgMC0zNi44eiJdfSxMRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtc3RlYW0iLGljb246WzQ0OCw1MTIsWyJzdGVhbS1zcXVhcmUiXSwiZjFiNyIsIk0xNjUuNiAzMDkuMWMxOC42IDcuNyAyNy4zIDI4LjkgMTkuNiA0Ny40cy0yOSAyNy4yLTQ3LjYgMTkuNGwtMjguNS0xMS44YzUgMTAuNiAxMy44IDE5LjQgMjUuNCAyNC4yIDI1LjIgMTAuNSA1NC4xLTEuNCA2NC42LTI2LjUgNS4xLTEyLjEgNS4xLTI1LjUgLjEtMzcuNy01LjEtMTIuMS0xNC41LTIxLjYtMjYuNy0yNi43LTEyLjEtNS0yNS00LjgtMzYuNC0uNWwyOS41IDEyLjJ6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgMTQ0LjcgMTE2LjYgNDguMWMxMi04LjIgMjYuMi0xMi4xIDQwLjctMTEuM2w1NS40LTgwLjIgMC0xLjFjMC00OC4yIDM5LjMtODcuNSA4Ny42LTg3LjVzODcuNiAzOS4zIDg3LjYgODcuNWMwIDQ5LjItNDAuOSA4OC43LTg5LjYgODcuNWwtNzkgNTYuM2MxLjYgMzguNS0yOS4xIDY4LjgtNjUuNyA2OC44LTMxLjggMC01OC41LTIyLjctNjQuNS01Mi43TDAgMzE5LjIgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI0MS45IDE5Ni4yYTU4LjQgNTguNCAwIDEgMCAxMTYuOCAwIDU4LjQgNTguNCAwIDEgMCAtMTE2LjggMHptMTAyLjQtLjFhNDMuOSA0My45IDAgMSAxIC04Ny44IDAgNDMuOSA0My45IDAgMSAxIDg3LjggMHoiXX0sS3VlPUxFLFF1ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zLW5jLWV1IixpY29uOls1MTIsNTEyLFtdLCJmNGU5IiwiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjMgMTE5LjcgNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExNyAzOTYuNCA4IDI1NS43IDh6bS42IDQ1MC43Yy0xMTIgMC0yMDMuNi05Mi41LTIwMy42LTIwMi43IDAtMjMuMiAzLjctNDUuMiAxMC45LTY2bDY1LjcgMjkuMS00LjcgMCAwIDI5LjUgMjMuMyAwYzAgNi4yLS40IDMuMi0uNCAxOS41bC0yMi44IDAgMCAyOS41IDI3IDBjMTEuNCA2NyA2Ny4yIDEwMS4zIDEyNC42IDEwMS4zIDI2LjYgMCA1MC42LTcuOSA2NC44LTE1LjhsLTEwLTQ2LjFjLTguNyA0LjYtMjguMiAxMC44LTQ3LjMgMTAuOC0yOC4yIDAtNTguMS0xMC45LTY3LjMtNTAuMmw5MC4zIDAgMTI4LjMgNTYuOGMtMS41IDIuMS01Ni4yIDEwNC4zLTE3OC44IDEwNC4zek0yMzkuNiAyNjguMWwtLjUtLjQgLjkgLjQtLjQgMHptNzcuMi0xOS41bDMuNyAwIDAtMjkuNS03MC4zIDAtMjguNi0xMi42YzIuNS01LjUgNS40LTEwLjUgOC44LTE0LjMgMTIuOS0xNS44IDMxLjEtMjIuNCA1MS4xLTIyLjQgMTguMyAwIDM1LjMgNS40IDQ2LjEgMTBsMTEuNi00Ny4zYy0xNS02LjYtMzctMTIuNC02Mi4zLTEyLjQtMzkgMC03Mi4yIDE1LjgtOTUuOSA0Mi4zLTUuMyA2LjEtOS44IDEyLjktMTMuOSAyMC4xTDg1LjUgMTQ2LjRjNjQuNi05Ni44IDE1Ny43LTkzLjYgMTcwLjctOTMuNiAxMTMgMCAyMDMgOTAuMiAyMDMgMjAzLjQgMCAxOC43LTIuMSAzNi4zLTYuMyA1Mi45TDMxNi44IDI0OC42eiJdfSxKdWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibnBtIixpY29uOls1NzYsNTEyLFtdLCJmM2Q0IiwiTTI4OCAyODhsLTMyIDAgMC02NCAzMiAwIDAgNjR6TTU3NiAxNjBsMCAxOTItMjg4IDAgMCAzMi0xMjggMCAwLTMyLTE2MCAwIDAtMTkyIDU3NiAwek0xNjAgMTkybC0xMjggMCAwIDEyOCA2NCAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6bTE2MCAwbC0xMjggMCAwIDE2MCA2NCAwIDAtMzIgNjQgMCAwLTEyOHptMjI0IDBsLTE5MiAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtMTI4eiJdfSxlZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2xvdWRzY2FsZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjM4MyIsIk0zMTguMSAxNTRsLTkuNCA3LjZjLTIyLjUtMTkuMy01MS41LTMzLjYtODMuMy0zMy42LTcxLjYgMC0xMjkuNCA2MC44LTEyOS40IDEzMi4zIDAgNi42IC40IDEzLjEgMS40IDE5LjQtMi01NiA0MS44LTk3LjQgOTIuNi05Ny40IDI0LjIgMCA0Ni4yIDkuNCA2Mi42IDI0LjdsLTI1LjIgMjAuNGMtOC4zLS45LTE2LjggMS44LTIzLjEgOC4xLTExLjEgMTEtMTEuMSAyOC45IDAgNDAgMTEuMSAxMSAyOC45IDExIDQwIDAgNi4zLTYuMyA5LTE0LjkgOC4xLTIzLjFsNzUuMi04OC44YzYuMy02LjUtMy4zLTE1LjktOS41LTkuNnpNMjEzLjcgMjQ2LjVhMTQgMTQgMCAxIDEgMjAuNiAxOSAxNCAxNCAwIDEgMSAtMjAuNi0xOXpNMjI0IDMyYTIyNCAyMjQgMCAxIDAgMCA0NDggMjI0IDIyNCAwIDEgMCAwLTQ0OHptMCA2NGExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il19LHRmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0aGVtZWNvIixpY29uOls0NDgsNTEyLFtdLCJmNWM2IiwiTTIwMi45IDguNGM5LjktNS43IDI2LTUuOCAzNi0uMkw0MzAgMTE1LjljMTAgNS42IDE4IDE5LjQgMTggMzAuOUw0NDggMzY0YzAgMTEuNC04LjEgMjUuMy0xOCAzMUwyMzguOCA1MDMuN2MtOS45IDUuNy0yNiA1LjYtMzUuOC0uMkwxNy45IDM5NS4xQzggMzg5LjMgMCAzNzUuNCAwIDM2NEwwIDE0Ni43YzAtMTEuNCA4LTI1LjQgMTcuOS0zMS4xTDIwMi45IDguNHpNMTI1LjUgMjA4LjNjLTE1LjkgMC0zMS45IC4xLTQ3LjggLjFsMCAxMDEuNCAxOS4xIDAgMC0yOS44IDI4LjcgMGM0OS43IDAgNDkuNi03MS43IDAtNzEuN3pNMjY1LjYgMzA4LjZsLTMwLjctMzQuNmMzNy03LjUgMzQuOC02NS4yLTEwLjktNjUuNS0xNi4xIDAtMzIuMi0uMS00OC4zLS4xbDAgMTAxLjYgMTkuMSAwIDAtMzMuOSAxOC40IDAgMjkuNiAzMy45IDIyLjggMCAwLTEuM3ptLTQxLjYtODIuM2MyMy4zIDAgMjMuMyAzMi41IDAgMzIuNWwtMjkuMSAwIDAtMzIuNSAyOS4xIDB6bS05NS42LTEuNmMyMS4yIDAgMjEuMSAzOC45IDAgMzguOWwtMzIuMyAwIDAtMzguOCAzMi4zIDB6bTE5Mi42LTE4LjJjLTY4LjUgMC03MSAxMDUuOCAwIDEwNS44IDY5LjUgMCA2OS40LTEwNS44IDAtMTA1Ljh6bTAgMTcuNGM0NC4xIDAgNDQuOCA3MC45IDAgNzAuOXMtNDQuNC03MC45IDAtNzAuOXoiXX0sYWZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2dsZS1wbGF5IixpY29uOls0NDgsNTEyLFtdLCJmM2FiIiwiTTI5My42IDIzNC4zTDcyLjkgMTMgMzUzLjcgMTc0LjIgMjkzLjYgMjM0LjN6TTE1LjMgMEMyLjMgNi44LTYuNCAxOS4yLTYuNCAzNS4zbDAgNDQxLjNjMCAxNi4xIDguNyAyOC41IDIxLjcgMzUuM0wyNzEuOSAyNTUuOSAxNS4zIDB6TTQ0MC41IDIyNS42bC01OC45LTM0LjEtNjUuNyA2NC41IDY1LjcgNjQuNSA2MC4xLTM0LjFjMTgtMTQuMyAxOC00Ni41LTEuMi02MC44ek03Mi45IDQ5OUwzNTMuNyAzMzcuOCAyOTMuNiAyNzcuNyA3Mi45IDQ5OXoiXX0saWZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImtvcnZ1ZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjQyZiIsIk0zODcuNiAzNGwtMzI3IDBDMjcuOSAzNCAxLjEgNjAuOCAxLjEgOTMuNWwwIDMyNy4xYzAgMzIuNiAyNi44IDU5LjQgNTkuNSA1OS40bDMyNy4xIDBjMzMgMCA1OS41LTI2LjggNTkuNS01OS41bDAtMzI3QzQ0Ny4xIDYwLjggNDIwLjMgMzQgMzg3LjYgMzR6TTg4LjIgMTIwLjhsOTYgMCAwIDExNiA2MS44LTExNiAxMTAuOSAwLTgxLjIgMTMyLTE4Ny41IDAgMC0xMzJ6TTI1MCAzOTIuOWwtNjUuNy0xMTMuNiAwIDExMy42LTk2IDAgMC0xMzAuOCAxOTEuNSAwIDg4LjYgMTMwLjgtMTE4LjQgMHoiXX0scmZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InczYyIsaWNvbjpbNjQwLDUxMixbXSwiZTdkZSIsIk0xMDUuMiAzMDUuM2wzMC45LTEwNC43YzcuOS0yNi43IDguNi00MC42IC4yLTY4LjhsLTEwLjEtMzMuOSA0NC4xIDAgNjEgMjA3LjQgNDUuNy0xNTUuNWMxMy4zLTQ1LjMgMjEuMS01MS45IDU5LjQtNTEuOWwxMzIuOCAwYy0yNC4yIDQyLjktNDkuMyA4NS4yLTczLjkgMTI3LjkgMi42IC44IDUuMiAxLjggNy43IDIuOCAxNy4zIDcuMSAzMi4yIDE5LjQgNDIgMzUuNSAxMS4yIDE4LjUgMTYuOCA0MC4yIDE2LjggNjUuMiAwIDMwLjgtOC4yIDU2LjgtMjQuNiA3Ny44LTE0LjUgMTguNi0zNSAyOS41LTU4LjIgMzEuMiAwIC4zLTUuMiAuNC01LjggLjQtMzkuNy0uMS03MC44LTMyLjEtODMuMS02OC43bDQyLjkgMGMzLjUgNS4zIDYuOCAxMC43IDExLjIgMTUuNSA4LjEgNy4zIDE4LjUgMTAuOSAyOS4zIDExLjEgMTMuMSAwIDIzLjMtOS4xIDI5LjktMTkuOCA4LjEtMTMuMiAxMi4yLTI5IDEyLjItNDcuNSAwLTEzLjEtMS44LTI0LjMtNS4zLTMzLjYtLjktMi4zLTEuOS00LjUtMy02LjYtMS40LTIuNi0yLjktNS4xLTQuNy03LjQtMTAuMS0xMy4yLTI5LjMtMTkuNy00Ny41LTE5LjhsLTI4LjIgMCA3MC4zLTEyMi0zNS42IDBjLTQzLjEgMC0zNS45LTUuNC01MC40IDQzLjNsLTc1LjcgMjU1LjMtNC4yIDAtNjMuMS0yMTEuMS02My4xIDIxMS4xLTQuMiAwLTEwMS0zNDAuNyA0NC4yIDAgNjEgMjA3LjR6TTQ2NyAzMzUuN2MuMyAuNiAxMS4zIDIwLjMgMTguMyAzMC4zIDcuMSAxMC4xIDE5LjggMjAuOSAyNC44IDI0LjZzMTkuMSAxMi41IDM0LjMgMTMuOWMxNS4yIDEuNSAyMy4zIC4yIDM4LjctNi42IDE1LjQtNi44IDI3LjktMjAuNCAzNC45LTI4LjEgNi45LTcuNiAxNy45LTI3LjMgMTguMi0yNy43bDMuMyAxNi44YzEuNyA5LTEgMjMuNy00LjEgMzAtNC4zIDguNi03LjYgMTMuNS0xNCAyMC4zLTYuMSA2LjUtMTYuNyAxMy41LTIxLjMgMTYuNC00LjYgMi45LTIzLjEgMTUuMS01MC4xIDEwLjNzLTQ0LjctMjUuOS01My45LTM4LjJjLTkuOC0xMy4yLTE2LjctMjguMy0xOS0zMy4yLTMuOC04LjQtOS45LTI4LjItMTAuMS0yOC44em0xNjkuNy0yMThjMy4zIDIwLjMtLjEgMjguNy05LjEgNDZsLTEyLjcgMjQuMmMtLjMtLjYtMTAtMjAuNy0yNS45LTMxLjktMTMuNi05LjYtMjIuNS0xMS43LTM2LjMtOC44LTE3LjggMy43LTM4IDI1LTQ2LjggNTEuMi0xMC41IDMxLjQtMTAuNyA0Ni42LTExIDYwLjYtLjYgMjIuNCAyLjkgMzUuNiAyLjkgMzUuNnMtMTUuNC0yOC41LTE1LjItNzAuMWMuMS0yOS43IDQuOC01Ni43IDE4LjUtODMuMyAxMi4xLTIzLjQgMzAuMS0zNy40IDQ2LjEtMzkuMSAxNi41LTEuNyAyOS42IDYuMyAzOS43IDE0LjkgMTAuNiA5IDIxLjMgMjguOCAyMS4zIDI4LjhsMjQuOS00OS44IDMuNiAyMS44eiJdfSxzZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ3JhdiIsaWNvbjpbNTEyLDUxMixbXSwiZjJkNiIsIk0zMDIuNiAyMTAuNmM0LjUgNC41IDQuNSAxMi4zIDAgMTYuOGwtMTAgMTBjLTQuNSA0LjktMTIuMyA0LjktMTcuMSAwbC0xMC44LTEwLjhjLTQuNS00LjktNC41LTEyLjMgMC0xNy4xbDEwLTEwYzQuNS00LjUgMTIuMy00LjUgMTcuMSAwbDEwLjggMTEuMXptLTMxLjItMjAuM2E3LjcgNy43IDAgMSAwIC0xMC42LTExIDcuNyA3LjcgMCAxIDAgMTAuNiAxMXptLTI2LjggNS41YTcuNSA3LjUgMCAxIDAgMTAuNyAxMC41IDcuNSA3LjUgMCAxIDAgLTEwLjctMTAuNXpNMzE5LjQgMTgyYy0yMC41LTE0LjktMzQuOS00NC42LTEyLjMtNzAuMyAyMi4zLTI1LjcgNDItMTcuOCA2MS43IC44IDEyLjMgMTEuNyAzMC4yIDI1LjcgMTcuOCA0OS44LTEyLjkgMjQuMy00Ni42IDM0LjMtNjcuMiAxOS43em00OS4yLTQ1LjljLTkuMi0xMC4zLTI0LjEgNy4xLTE2IDE2LjYgNy42IDkuMyAzMy4xIDIuNSAxNi0xNi42ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00NDMuNyA0NGMyLjYtMTYuNi0yMC45LTE3LjEtMjYtMjYuNS0xNC0yNC45LTI4LjYtMzgtNTYuMy0zMS40IDEyLTguMyAyNC4zLTYuMyAyNC4zLTYuMyAuMy02LjYgMC0xMy40LTkuNy0yNS43IDQtMTIuOSAuMy0yMy4xIC4zLTIzLjEgMTYtOC45IDI3LjctMjUuMiAzMC00NC42IDMuNy0zMi0xOS40LTYxLjEtNTEuNC02NC44LTIyLjgtMi42LTQ1LjEgNy45LTU2LjEgMjYuNS0yMy45IDQxLjQgMS40IDczLjIgMjMuMSA4NC0xNC45LTEuNC0zNS40LTEyLjMtNDEuNC0zNS40LTYuOC0yNi41IDIuOS01MS40IDkuMi02My40IDAgMC00LjUtNi04LjMtOS4yIDAgMC0xNC4yIDAtMjUuNCA1LjUgMTIuMy0xNS43IDI2LTE0LjkgMjYtMTQuOSAwLTYuNi0uNi0xNS40LTMuNy0yMi4zLTUuNi0xMS40LTI0LjYtMTMuMy0zMi43IDIuOSAuMS0uMiAuMy0uNCAuNC0uNS01LjIgMTIuMy0xLjEgNTcuNyAxNy40IDkwLTIuNiAxLjQtOS40IDYuMy0xMy40IDEwLjMtMjIuMyAxMC01OCA2Mi4yLTU4IDYyLjItMjkuMSAxMS4xLTc5LjcgNTIuNS03Mi45IDgyLjMgLjMgMy4xIDEuNCA1LjcgMy4xIDcuNy0yLjkgMi4zLTUuNyA1LjItOC42IDguNi0xMi4zIDE0LjItNS41IDM2LjMgMTguMyAyNS4yIDE2LjMtNy40IDMwLjYtMjAuOSAzNy41LTMxLjQgMCAwLTUuNy01LjItMTYuOC00LjUgMjguNi02LjggMzUuNC05LjcgNDcuNy05LjQgOC4zIDQgOC4zLTM1LjQgOC4zLTM1LjQgMC0xNS4yLTIuMy0zMi0xMS41LTQyLjggMTIuOSAxMi42IDMwIDMzLjggMjguOSA2Mi42LS44IDE4LjktMTUuNyAyMy43LTE1LjcgMjMuNy05LjQgMTcuMS00NC42IDY4LTMxLjQgMTA5LjQgMCAwLTEwLTE1LjQtMTAuNS0yMi44LTE4IDIwLTQ4IDU0LTI1LjQgNjYuNiAyNy41IDE1LjIgMTEyLjMtOTEuNSAxMzAuMy0xNDYuOSAzNS43LTIxLjUgNTcuMi00OC44IDY2LTY3LjEgMjIuNyA0NC45IDk4LjQgOTcuNSAxMDQuNCA2MC45eiJdfSxuZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXdzIixpY29uOls2NDAsNTEyLFtdLCJmMzc1IiwiTTE4MC40IDIwM2MtLjcgMjIuNiAxMC42IDMyLjcgMTAuOSAzOS0uMSAxLjMtLjYgMi41LTEuMyAzLjZzLTEuNyAyLTIuOCAyLjZsLTEyLjggOWMtMS43IDEuMi0zLjYgMS44LTUuNiAxLjktLjQgMC04LjIgMS44LTIwLjUtMjUuNi03LjUgOS40LTE3IDE2LjktMjcuOSAyMnMtMjIuNyA3LjctMzQuNyA3LjVjLTE2LjMgLjktNjAuNC05LjItNTguMS01Ni4yLTEuNi0zOC4zIDM0LjEtNjIuMSA3MC45LTYwIDcuMSAwIDIxLjYgLjQgNDcgNi4zbDAtMTUuNmMyLjctMjYuNS0xNC43LTQ3LTQ0LjgtNDMuOS0yLjQgMC0xOS40LS41LTQ1LjggMTAuMS03LjQgMy40LTguMyAyLjgtMTAuOCAyLjgtNy40IDAtNC40LTIxLjUtMi45LTI0LjIgNS4yLTYuNCAzNS45LTE4LjQgNjUuOS0xOC4yIDIwLjEtMS44IDQwLjEgNC40IDU1LjcgMTcuMyA2LjMgNy4xIDExLjIgMTUuNCAxNC4yIDI0LjRzNC4yIDE4LjUgMy41IDI4bDAgNjkuM3pNOTQgMjM1LjRjMzIuNC0uNSA0Ni4yLTIwIDQ5LjMtMzAuNSAyLjUtMTAuMSAyLjEtMTYuNCAyLjEtMjcuNC05LjctMi4zLTIzLjYtNC45LTM5LjYtNC45LTE1LjItMS4xLTQyLjggNS42LTQxLjcgMzIuMy0xLjIgMTYuOCAxMS4xIDMxLjQgMzAgMzAuNXptMTcwLjkgMjMuMWMtNy45IC43LTExLjUtNC45LTEyLjctMTAuNEwyMDIuNCA4My40Yy0xLTIuOC0xLjYtNS42LTEuOS04LjYtLjItMS4yIC4xLTIuNCAuOC0zLjRzMS44LTEuNiAzLTEuOGMuMiAwLTIuMSAwIDIyLjIgMCA4LjgtLjkgMTEuNiA2IDEyLjYgMTAuNEwyNzQuOSAyMjAuOCAzMDguMSA4MGMuNS0zLjIgMi45LTExLjEgMTIuOC0xMC4ybDE3LjIgMGMyLjItLjIgMTEuMS0uNSAxMi43IDEwLjRMMzg0LjEgMjIyLjcgNDIxIDgwLjFjLjUtMi4yIDIuNy0xMS40IDEyLjctMTAuNGwxOS43IDBjLjktLjEgNi4yLS44IDUuMyA4LjYtLjQgMS44IDMuNC0xMC43LTUyLjggMTY5LjktMS4xIDUuNS00LjggMTEuMS0xMi43IDEwLjRsLTE4LjcgMGMtMTAuOSAxLjItMTIuNS05LjctMTIuNy0xMC43bC0zMy4yLTEzNy4xLTMyLjggMTM3Yy0uMiAxLjEtMS43IDExLjktMTIuNyAxMC43bC0xOC4zIDAgMCAwem0yNzMuNSA1LjZjLTUuOSAwLTMzLjktLjMtNTcuNC0xMi4zLTIuMy0xLTQuMy0yLjYtNS43LTQuOHMtMi4xLTQuNi0yLjEtNy4xbDAtMTAuN2MwLTguNSA2LjItNi45IDguOC01LjkgMTAgNC4xIDE2LjUgNy4xIDI4LjggOS42IDM2LjcgNy41IDUyLjgtMi4zIDU2LjctNC41IDEzLjItNy44IDE0LjItMjUuNyA1LjMtMzQuOS0xMC41LTguOC0xNS41LTkuMS01My4xLTIxLTQuNi0xLjMtNDMuNy0xMy42LTQzLjgtNTIuNC0uNi0yOC4yIDI1LTU2LjIgNjkuNS01NiAxMi43IDAgNDYuNCA0LjEgNTUuNiAxNS42IDEuNCAyLjEgMiA0LjYgMS45IDdsMCAxMC4xYzAgNC40LTEuNiA2LjctNC45IDYuNy03LjctLjktMjEuNC0xMS4yLTQ5LjItMTAuOC02LjktLjQtMzkuOSAuOS0zOC40IDI1LS40IDE5IDI2LjYgMjYuMSAyOS43IDI2LjkgMzYuNSAxMSA0OC42IDEyLjggNjMuMSAyOS42IDE3LjEgMjIuMiA3LjkgNDguMyA0LjMgNTUuNC0xOS4xIDM3LjUtNjguNCAzNC40LTY5LjMgMzQuNHptNDAuMiAxMDQuOWMtNzAgNTEuNy0xNzEuNyA3OS4yLTI1OC41IDc5LjItMTE3LjEgLjgtMjMwLjMtNDIuMy0zMTcuMy0xMjAuNy02LjUtNS45LS44LTE0IDcuMi05LjUgOTYuNSA1NS4yIDIwNS43IDg0LjIgMzE2LjkgODQuMSA4My0uNCAxNjUuMS0xNy4zIDI0MS42LTQ5LjUgMTEuOC01IDIxLjggNy44IDEwLjEgMTYuNHptMjkuMi0zMy4zYy05LTExLjUtNTkuMy01LjQtODEuOC0yLjctNi44IC44LTcuOS01LjEtMS44LTkuNSA0MC4xLTI4LjIgMTA1LjktMjAuMSAxMTMuNC0xMC42IDcuNSA5LjUtMi4xIDc1LjQtMzkuNiAxMDYuOS01LjggNC45LTExLjMgMi4zLTguNy00LjEgOC40LTIxLjMgMjcuNC02OC41IDE4LjQtODB6Il19LG9mZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnbGlkZS1nIixpY29uOls0NDgsNTEyLFtdLCJmMmE2IiwiTTQwNy4xIDIxMS4yYy0zLjUtMS40LTExLjYtMy44LTE1LjQtMy44LTM3LjEgMC02Mi4yIDE2LjgtOTMuNSAzNC41bC0uOS0uOWM3LTQ3LjMgMjMuNS05MS45IDIzLjUtMTQwLjQgMC03MS41LTM4LjItMTAwLjYtMTA4LjQtMTAwLjYtMTE1LjEgMC0xNzMuNCAxMTMuNy0xNzMuNCAxOTguNCAwIDg3LjkgNTEuMyAxMzYuNiAxMzguNiAxMzYuNiAxMiAwIDExLTEgMTEgMy44LTE2LjkgMTI4LjktOTAuOCAxMzMuMS05MC44IDk0LjYgMC0zOS4yIDQ1LTU4LjYgNDUuNS02MS0uMy0xMi4yLTQ3LTI3LjYtNTguOS0yNy42LTMzLjkgLjEtNTIuNCA1MS4yLTUyLjQgNzkuMyAwIDUxLjkgMzIuOCA4Ny45IDg1LjUgODcuOSA3Ny40IDAgMTM0LTc3LjggMTUxLjQtMTQ1LjQgMTUuMS02MC41IDExLjItNjMuMyAxOS43LTY3LjYgMzIuMi0xNi4yIDU3LjUtMjcgOTMuOC0yNyAxNy44IDAgMzAuNSAzLjcgNTguOSA4LjQgMi45IDAgNi43LTIuOSA2LjctNS44IDAtOC0zMy40LTYwLjUtNDAuOS02My40ek0yMzEuOCAxMjYuOGMtOS4zIDQ0LjctMTguNiA4OS42LTI3LjggMTM0LjMtMi4zIDEwLjItMTMuMyA3LjgtMjIgNy44LTM4LjMgMC00OS00MS44LTQ5LTczLjEgMC00NyAxOC0xMDkuMyA2MS44LTEzMy40IDctNC4xIDE0LjgtNi43IDIyLjYtNi43IDE4LjYgMCAyMCAxMy4zIDIwIDI4LjctLjEgMTQuMy0yLjcgMjguNS01LjYgNDIuNHoiXX0sbGZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImpzZmlkZGxlIixpY29uOls1NzYsNTEyLFtdLCJmMWNjIiwiTTUxMS4xIDIzNy41Yy00LjctMi42LTUuNy01LjctNi40LTEwLjgtMi40LTE2LjUtMy41LTMzLjYtOS4xLTQ5LjEtMzUuOS0xMDAtMTU0LTE0My40LTI0Ni44LTkxLjYtMjcuNCAxNS4yLTQ5IDM2LjQtNjUuNSA2My45LTMuMi0xLjUtNS41LTIuNy03LjgtMy43LTMwLjEtMTIuNC01OS0xMC4xLTg1LjMgOS4yLTI1LjUgMTguNy0zNi40IDQ0LjUtMzIuNyA3Ni40IC40IDMtMiA3LjYtNC41IDkuNS0zOS43IDMwLTU2IDc4LjEtNDEuOSAxMjQuNiAxMy44IDQ1LjYgNTcuNSA3OS44IDEwNS42IDgxLjQgMzAuMyAxIDYwLjYgLjUgOTEgLjUgODQgMCAxNjguMSAuNSAyNTIuMS0uNSA1Mi43LS42IDk2LjEtMzYuOSAxMDguMi04Ny4zIDExLjUtNDguMS0xMS4xLTk3LjMtNTYuOC0xMjIuNnptMjEuMSAxNTYuOWMtMTguMiAyMi40LTQyLjMgMzUuMy03MS4zIDM1LjctNTYuOSAuOC0xMTMuOCAuMi0xNzAuNyAuMiAwIC43LTE2MyAuMi0xNjMuNyAuMi00My45LS4zLTc2LjctMTkuOC05NS4yLTYwLTE4LjktNDEuMi00LTkwLjggMzQuMi0xMTYuMSA5LjItNi4xIDEyLjUtMTEuNiAxMC4xLTIzLjEtNS41LTI2LjQgNC41LTQ4IDI2LjQtNjMgMjMtMTUuNyA0Ny40LTE2LjEgNzItMy4xIDEwLjMgNS40IDE0LjYgMTEuNiAyMi4yLTIuNSAxNC4yLTI2LjQgMzQuNi00Ni43IDYwLjctNjEuMyA5Ny41LTU0LjQgMjI4LjQgNy42IDIzMC4yIDEzMi43IC4xIDguMiAyLjQgMTIuNCA5LjggMTUuOSA1Ny42IDI2LjggNzQuNSA5Ni4xIDM1LjEgMTQ0LjV6bS04Ny44LTgwLjVjLTUuOCAzMS4yLTM0LjYgNTUuMS02Ni43IDU1LjEtMTcgMC0zMi4xLTYuNS00NC4xLTE3LjctMjcuNy0yNS43LTcxLjEtNzUtOTUuOS05My40LTIwLjEtMTQuOS00Mi0xMi4zLTYwLjMgMy44LTUwIDQ0LjEgMTUuOSAxMjEuOCA2Ny4xIDc3LjIgNC41LTQgNy44LTkuNSAxMi43LTEyLjggOC4yLTUuNSAyMC44LS45IDEzLjIgMTAuNi0xNy40IDI2LjMtNDkuMyAzOC4yLTc4LjkgMjkuMy0yOC45LTguNy00OC44LTM2LTQ4LjYtNzAuMiAxLjItMjIuNSAxMi40LTQzLjEgMzUuNC01NiAyMi42LTEyLjYgNDYuNC0xMy4xIDY3IDIuNSA1MC44IDM4LjUgNzUuNiA4MS43IDEwNy4zIDEwMS4yIDI0LjYgMTUuMSA1NC4zIDcuNCA2OC44LTE3LjUgMjguOC00OS4yLTM0LjYtMTA1LTc4LjktNjMuNS00IDMuNy02LjkgOC45LTExLjQgMTEuNy0xMSA2LjgtMTcuMy00LjEtMTIuOC0xMC40IDIwLjctMjguNiA1MC41LTQwLjQgODMuMy0yOC4yIDMxLjQgMTEuNyA0OS4xIDQ0LjQgNDIuOCA3OC4yeiJdfSxjZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2V5YmFzZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjRmNSIsIk0yODYuMiA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2ek0zOTguMSAyNzEuNGMtOS41LTE0LjYtMzkuNC01Mi40LTg3LjMtNzMuNy02LjEtMi43LTEyLjItNS4xLTE4LjQtNy4zIDQuMS05LjkgNi0yMC42IDUuOC0zMS40cy0yLjctMjEuMy03LjItMzEuMS0xMC45LTE4LjUtMTguOS0yNS43LTE3LjQtMTIuNi0yNy42LTE2Yy0xMi40LTQuMS0yMy4zLTYtMzIuNC01LjgtLjYtMi0xLjktMTEgOS40LTM1bC0yMi45LTEzLjUtNS41IDcuNmMtOC43IDEyLjEtMTYuOSAyMy42LTI0LjMgMzQuOS0yLjctLjYtNS41LTEuMS04LjMtMS4yLTQxLjUtMi40LTM5LTIuMy00MS4xLTIuMy01MC42IDAtNTAuOCA1Mi4xLTUwLjggNDUuOWwtMi40IDM2LjdjLTEuNiAyNyAxOS44IDUwLjIgNDcuNiA1MS44bDguOSAuNUMxMDYgMjE1LjUgOTAuNCAyMjcuNSA3Ni42IDI0MS40IDE0IDMwNC43IDE0IDM3NCAxNCA0MjkuOGwwIDMzLjYgMjMuMy0yOS44YzMuMSAxMy4xIDggMjUuOCAxNC42IDM3LjYgNS44IDEwLjEgMTQuOSA5LjQgMTkuNiA3LjMgNC4yLTEuOSAxMC02LjkgMy44LTIwLjEtOC0xNi44LTEzLjMtMzQuNy0xNS44LTUzLjFsNDYuOC01OS44LTI0LjcgNzQuMWM1OC4yLTQyLjQgMTU3LjQtNjEuOCAyMzYuMi0zOC42IDM0LjIgMTAuMSA2Ny40IC43IDg0LjctMjMuOCAuNy0xIDEuMi0yLjIgMS44LTMuMiAxLjggOS40IDIuNyAxOC45IDIuOCAyOC40IDAgMjMuMy0zLjcgNTIuOS0xNC45IDgxLjYtMi41IDYuNSAxLjggMTQuNSA4LjYgMTUuNyA3LjQgMS42IDE1LjMtMy4xIDE4LjQtMTEuMSA5LjYtMjUuNSAxNC42LTU0LjYgMTQuNi04Ni4yIDAtMzguNi0xMy03Ny41LTM1LjktMTEwLjl6TTE0Mi40IDEyOC42bC0xNS43LS45LTEuNCAyMS44IDEzLjEgLjhjLS42IDYuNS0uNSAxMy4xIC4zIDE5LjZsLTIyLjQtMS4zYy0xLjYtLjEtMy4yLS41LTQuNy0xLjFzLTIuOC0xLjYtMy45LTIuOC0xLjktMi42LTIuNS00LjEtLjgtMy4xLS43LTQuN0wxMDcgMTE5YzEtMTIuMiAxMy45LTExLjMgMTMuMy0xMS4zbDI5LjEgMS43Yy0yLjggNi4yLTUuMSAxMi42LTcgMTkuMnpNMjkwLjggMzAwLjhjLTIuMSAxLjYtNC44IDIuNC03LjUgMi4ycy01LjEtMS41LTYuOS0zLjVsLTkuNy0xMS41LTM0LjQgMjdjLTEuNiAxLjMtMy43IDEuOS01LjggMS43cy00LTEuMi01LjMtMi44bC0xNS44LTE4LjZjLTEuMi0xLjYtMS43LTMuNS0xLjUtNS40czEuMy0zLjcgMi44LTQuOWwzNC42LTI3LjItMTQuMS0xNi43LTE3LjEgMTMuNWMtMS42IDEuMi0zLjUgMS44LTUuNSAxLjZzLTMuOC0xLjEtNS4xLTIuNmMwIDAtMy43LTQuNC0zLjgtNC41LTEuMi0xLjYtMS43LTMuNS0xLjUtNS41czEuMy0zLjcgMi44LTQuOUwyMTQgMjI1LjJzLTE4LjUtMjItMTguNi0yMi4xYy0uOC0xLTEuMy0yLjEtMS43LTMuM3MtLjQtMi41LS4zLTMuNyAuNi0yLjQgMS4yLTMuNSAxLjUtMiAyLjUtMi44YzIuMS0xLjcgNC44LTIuNCA3LjQtMi4yczUuMSAxLjUgNi45IDMuNmw4MS4xIDk2LjNjLjggMSAxLjMgMi4xIDEuNyAzLjNzLjQgMi41IC4zIDMuNy0uNiAyLjUtMS4yIDMuNS0xLjUgMi4xLTIuNSAyLjh6TTE4Ny40IDQxOWExOCAxOCAwIDEgMCAwIDM2IDE4IDE4IDAgMSAwIDAtMzZ6Il19LGRmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsdW1vbi1kcm9wIixpY29uOls1NzYsNTEyLFtdLCJlN2UzIiwiTTQ4MCAzMmM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZMOTYgNDQ4Yy01MyAwLTk2LTQzLTk2LTk2TDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzg0IDB6TTMwMi40IDExNC43Yy05LjgtMTYuNC0yMC41LTE2LjQtMjkuNiAwbC02OC45IDExNGMtMTAuNyAxNS42LTE2LjQgMzIuOC0xNi40IDUyLjUgMCA1MC45IDQ0LjMgOTQuMyAxMDAuMSA5NC4zIDU1IDAgMTAwLjktNDMuNSAxMDAuOS05NC4zIDAtMTkuNy02LjYtMzcuOC0xNy4yLTUyLjVsLTY4LjktMTE0eiJdfSxwZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZm9yZ2VqbyIsaWNvbjpbMzIwLDUxMixbXSwiZTg2MCIsIk0yNjEuNSAxLjJjMzQgMCA2MS42IDI3LjYgNjEuNiA2MS42cy0yNy42IDYxLjYtNjEuNiA2MS42Yy0yMyAwLTQzLjEtMTIuNy01My43LTMxLjRsLTI4LjUgMGMtMjQgMC00NyA5LjUtNjQgMjYuNXMtMjYuNSA0MC0yNi41IDY0bDAgNDMuNWMyNi0xOS41IDU3LjctMzAuMiA5MC42LTMwLjJsMjguNSAwYzEwLjYtMTguNyAzMC42LTMxLjQgNTMuNy0zMS40IDM0IDAgNjEuNiAyNy42IDYxLjYgNjEuNnMtMjcuNiA2MS42LTYxLjYgNjEuNmMtMjMgMC00My4xLTEyLjctNTMuNy0zMS40bC0yOC41IDBjLTI0IDAtNDcgOS41LTY0IDI2LjVzLTI2LjUgNDAtMjYuNSA2NGwwIDQ3LjhjMTguNyAxMC42IDMxLjQgMzAuNiAzMS40IDUzLjYgMCAzNC0yNy42IDYxLjYtNjEuNiA2MS42Uy0zIDQ4My4yLTMgNDQ5LjJjMC0yMyAxMi43LTQzLjEgMzEuNC01My42bDAtMjEyYzAtNDAgMTUuOS03OC40IDQ0LjItMTA2LjdzNjYuNy00NC4yIDEwNi43LTQ0LjJsMjguNSAwYzEwLjYtMTguNyAzMC42LTMxLjQgNTMuNy0zMS40ek01OC42IDQyMy45Yy0xNCAwLTI1LjMgMTEuMy0yNS4zIDI1LjNzMTEuMyAyNS40IDI1LjMgMjUuNCAyNS40LTExLjQgMjUuNC0yNS40LTExLjQtMjUuMy0yNS40LTI1LjN6TTI2MS41IDIwMS43YTI1LjQgMjUuNCAwIDEgMCAwIDUwLjcgMjUuNCAyNS40IDAgMSAwIDAtNTAuN3ptMC0xNjQuMmEyNS40IDI1LjQgMCAxIDAgMCA1MC43IDI1LjQgMjUuNCAwIDEgMCAwLTUwLjd6Il19LGhmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwb3N0Z3Jlc3FsIixpY29uOls1MTIsNTEyLFtdLCJlODU4IiwiTTIxOS44IDE3MS4zYzMuOSAuNSAxMy4xIDIuNyAxMi4zIDguNS0uOCA1LjktOS4yIDkuMS0xNC4yIDguNC00LjctLjctMTMuMi02LjEtMTIuMy0xMi4xbC4zLTIuMWM0LjIgMCA4LjMtMy41IDEzLjktMi43em0xNjguMS0zLjRjMTAuOCAyLjYtMS4xIDEzLjUtNi44IDE0LjMtNC4zIC42LTEyLjEtMi4yLTEyLjgtNy40LTEtNy40IDE1LjctNy45IDE5LjctNi45em0tMjItMTQwLjhjMzUuNy0uMyA4MS4zIDkuNCAxMTQuMyA1MS43IDcuMiA5LjIgMTAgMjQgOS43IDQwLjktLjggNDkuNi0yNiAxMjkuNC03MC43IDE5Ny40IDQuNSAyLjkgMTcuNiA3LjQgNTEuMSAuNSA1LjYtMS4yIDEyLjctMi4yIDE3LjYgMS42IDE4LjIgMTMuOS0xOS42IDM1LjEtMjguNCAzOS4yLTEzLjIgNi4yLTM0LjggOS41LTUxLjIgOC43LTIuMS0uMi00LjMtLjItNi4zLS42LTUuMS0xLjEtNy40LTEtOC4zLS43LTEuMSAuMy0xLjQgMi45LTEuNiAzLjgtMi44IDI0LjktNy43IDY0LjctMTAuNyA4Mi0yLjggMTYuMy03LjcgMjkuMy0xNy4yIDM5LjItOS41IDkuOS0yMi44IDE1LjctNDAuNiAxOS41LTIyLjMgNC44LTM3LjktLjEtNDguNy05LjEtMTAuMy04LjctMTUuMi0yMC40LTE4LTI3LjQtMS44LTQuNS0zLTExLjUtNC0xOS44LTIuMy0xOS44LTMuMy01MC40LTMtODMuMy0yNC42IDIyLjEtNTUgMTcuMi02OC4yIDEzLjktMTAuNS0yLjYtMzMtMTYuMS0xNy41LTI4LjcgMTEuOS05LjcgMzAuMy01LjUgNDIuMi0xNSAyLjQtMS45IDExLjQtMTAuNiAxMS40LTEzLjUtMTAtLjMtMTkuNi0yLjktMjguMS03LjUtMTMuNSAxNC41LTI2LjQgMjkuNS0zOS4zIDQ0LjYtOC4zIDkuOS0xNy40IDE1LjgtMjcuNCAxNi4yLTkuOSAuNC0xOC43LTQuNi0yNi4xLTExLjgtNy4zLTcuMS0xNC4xLTE3LjItMjAuNC0yOS0xOS0zNS41LTMzLjItODYuMS00Mi4zLTEyNi40LTYtMjYuNy05LjYtNDkuMS0xMC4xLTU5LTIuMi00NC4zIDgtNzQuMSAyNi05My4yIDE3LjktMTkgNDIuNC0yNiA2Ni4xLTI3LjQgMzUuNi0yIDcxIDguNSA4Ni42IDEzLjhsNSAxLjhjMTUuOS0xMC44IDM2LjEtMTcuNCA2MS43LTE3IDEzLjIgLjIgMjUuNSAyLjIgMzYuNyA0LjIgMTguNi03LjEgMzkuOC05LjUgNTkuNC05Ljd6bS05NiAyMC41Yy0yNC43LS40LTQyLjkgNi41LTU2LjYgMTYuOC0uOCAuNi0xLjggMS0yLjggMS4yLTE0LjQgMTEuOC0yMy45IDI4LTMwLjMgNDQuOC03LjIgMTkuMS0xMCAzOC41LTExLjEgNTEuNSA3LjYtNC4zIDE3LjktOC43IDI4LjctMTEuMiAxMC41LTIuNCAyMi40LTMuMiAzMi43IC44IDEwLjkgNC4yIDE5IDEzLjMgMjIuMiAyOC4xIDcuNSAzNC43IDYuNyA1OC4yIDIuNyA3NS45LTQuOCAyMS0xNi44IDM5LjUtMjEuOSA2MC40IDMuNS0uOSA3LjEtLjYgOS44IC4xbDcuMiAyLjljNy43IDQuNCAxMi44IDEzIDE0IDIxLjcgMiA2IC4xIDE0LjMgMCAyMC42IDYuNyAxNi4zIDcuMiAzNi4xIDYuNyA1My4zLS43IDI1LTEgNDAuMiAzLjIgNTEuNyAyLjkgNy45IDQuNyAxNi40IDEwLjQgMjIuOCAyLjYgMyA2LjEgNS41IDEwLjkgNi44IDE4LjUgNS4xIDQ0LTQuNyA1Ni42LTE4LjIgNy43LTguMiAxMi4zLTE5LjMgMTMuNC0zMy45IDEuMS0xMy42IDQuMi0yNy42IDYuMy00MS4xbDIuOS04LjhjMS43LTE0LjggMy40LTI5LjYgNS00NC40LS40LTkuMSAuOS0xNi4xIDMuOS0yMS41IDMuMS01LjcgNy42LTguOSAxMS44LTEwLjggMS44LS44IDMuOS0xLjIgNS42LTItMS42LTIuNC0zLjYtNC42LTUuMy02LjgtOC4yLTEwLjQtMTMuMy0yMi4zLTE5LjctMzMuOC04LjUtMTUuMi0yMy44LTQyLjItMzAuMS02Ny41LTQuMS0xNi40LTQuOS0zNC41IDYtNDcgOS44LTExLjIgMjYuOS0xNS41IDUxLjktMTMtMy40LTEwLTExLjQtMjcuNS0yNC44LTQ0LjctMTgtMjMtNDUuNy00NS45LTg1LjctNTMuMS03LjMtLjktMTUuMi0xLjUtMjMuNi0xLjd6bS0zMi4yIDI4MmMtOCAuNy0xNS41IDE4LjItMjEuNyAyMy4xLTYuMiA0LjktMTQuNSA3LjYtMzAgMTAuNy00LjUgLjktNy43IDEuOS05LjcgMi44IDIyLjMgMTUuOCA1OC4zIDMuMiA3Mi42LTE2LjggMS43LTIuNCAyLjEtNiAuNS0xMC4yLTEuNy00LjUtNi40LTEwLjEtMTEuOS05LjZ6TTExNy42IDQ5LjJjLTIxLjYgMS4yLTQyIDcuNS01Ni40IDIyLjgtMTQuNCAxNS4yLTI0LjIgNDAuNi0yMi4xIDgyLjUgLjQgOC41IDMuOCAzMCA5LjggNTYuNiA4LjkgMzkuOCAyMy43IDkwLjMgNDAuNiAxMjIuMiA2IDExLjEgMTcuNCAzMyAzMi44IDMyLjMgNC40LS4yIDEwLjEtMi44IDE3LTExIDEyLjYtMTQuOCAyNS4yLTI5LjUgMzguNS00My43LTE3LjktMTUuNC0yOC41LTQwLjMtMjQuOC02Ny4yIDMuNC0yNC4zIC41LTQ4LjIgMS4yLTcyLjUgLjQtMTEuOSAyLjMtMzguNyAxMi42LTY1LjggNS45LTE1LjUgMTQuNS0zMS4zIDI3LjQtNDQuMi0xNi40LTUuNC00Ny4xLTEzLjUtNzYuNi0xMS45ek00MDUuMSAzMjguOWMtMy44IDEuMS02LjcgMi4yLTguNyA1LjgtMS4zIDIuNC0yLjUgNi43LTIuMiAxNC4yIDQuOCAzLjkgMTQuMSAzLjMgMTkuOCAzLjIgMTMuOS0uMiAyOS45LTMuMSAzOS4zLTcuNSA3LjktMy43IDE0LjctOC4zIDE5LTEyLjItMzguMiA3LjctNTUuNCAyLjEtNjMuMi00LjgtMS4zIC40LTIuOSAuOS0zLjkgMS4yek0yMjUuMyAxNjQuOWMtMTUuNC01LjktMzUuNCAxLjgtNDguOSA5LjQtMy42IDItNi41IDQtNy45IDUuMiAuNCA4LjggMi44IDM2LjEtMS40IDY2LjMtNS4xIDM2LjYgMjEuNyA2Ni42IDUyLjUgNjYuNyA1LjEtMjAuOCAxNy0zOS4yIDIxLjgtNjAuMSAzLjUtMTUuMyA0LjUtMzYuNi0yLjctNjkuNy0yLjMtMTAuNS03LjQtMTUuNC0xMy40LTE3Ljd6TTM3MC4xIDQyLjJjLTE1LjItLjItMjguOCAxLjctMzkuMiAzLjggMjYgMTEuOCA0NS42IDI5LjcgNTkuNiA0Ny42IDE3LjQgMjIuMiAyNi4zIDQ0LjEgMjkgNTUgLjcgMi43IDEuMyA1LjcgLjUgOC40IC42IDE4LjktNCAzMS4zLTQuNiA0OS4yLS40IDEyLjkgMi45IDI4LjEgMy43IDQ0LjcgLjggMTUuNy0xIDMyLjUtMTEuMiA0OS41IC44IDEgMS42IDIuMSAyLjQgMy4xIDI2LjgtNDIuMiA0Ni04OC42IDU2LjMtMTI4LjUgNS41LTIxLjQgOC40LTQwLjcgOC43LTU2LjEgLjItMTUuMi0yLTI1LjQtNS44LTMwLjQtMjguMy0zNi4xLTY2LjgtNDUuOC05OS4zLTQ2LjJ6bTM1LjYgMTE5LjVjLTI1LjMtMy4yLTM3LjMgMS41LTQyLjggNy43LTYgNi44LTYuOCAxOC41LTIuOSAzNC4xIDUuNyAyMi42IDIwLjEgNDguNiAyOC43IDY0IDMuNiA2LjQgNi40IDEzLjEgMTAgMTkuNCA1LjUtMTEuNyA2LjYtMjMuNSA2LTM1LjUtLjctMTUtNC4yLTMwLjMtMy43LTQ1LjhsLjQtNy40YzEuMi0xNC4zIDQuMS0yNC42IDQuMi0zNi41eiJdfSx1ZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2VlYmx5IixpY29uOls1MTIsNTEyLFtdLCJmNWNjIiwiTTQyNS4xIDY1LjhjLTM5LjkgMC03My4zIDI1LjctODMuNyA2NC4zLTE4LjItNTguMS02NS41LTY0LjMtODUtNjQuMy0xOS44IDAtNjYuOCA2LjMtODUuMyA2NC4zLTEwLjQtMzguNi00My40LTY0LjMtODMuNy02NC4zLTQ5IDAtODcuNSAzMy45LTg3LjUgNzcuMiAwIDI5IDQuMiAzMy4zIDc3LjIgMjMzLjUgMjIuNCA2MC42IDY3LjggNjkuNCA5Mi43IDY5LjQgMzkuMiAwIDcwLTE5LjUgODUuOS01NCAxNS45IDM0LjggNDYuNyA1NC4zIDg1LjkgNTQuMyAyNSAwIDcwLjQtOS4xIDkyLjctNjkuNyA3Ni42LTIwOC42IDc3LjUtMjA1LjYgNzcuNS0yMjcuMiAuNi00OC4zLTM2LTgzLjUtODYuOS04My41em0yNi4zIDExNC44TDM4NS45IDM1Ny4xYy03LjkgMjEuNS0yMS4yIDM3LjItNDYuMiAzNy4yLTIzLjQgMC0zNy40LTEyLjQtNDQtMzMuOWwtMzkuMy0xMTcuNC0xIDAtMzkuMyAxMTcuNGMtNyAyMS41LTIwLjkgMzMuNi00NCAzMy42LTI1IDAtMzguMy0xNS43LTQ2LjItMzcuMkw2MC45IDE4MS42Yy01LjQtMTQuOC03LjktMjMuOS03LjktMzQuNSAwLTE2LjMgMTUuOC0yOS40IDM4LjMtMjkuNCAxOC43IDAgMzIgMTEuOCAzNi4xIDI5LjFsNDQgMTM5LjggMSAwIDQ0LjctMTM2LjhjNi0xOS43IDE2LjUtMzIuMSAzOS0zMi4xczMyLjkgMTIuMSAzOSAzMi4xbDQ0LjcgMTM2LjggMSAwIDQ0LTEzOS44YzQuMS0xNy4yIDE3LjQtMjkuMSAzNi4xLTI5LjEgMjIuMiAwIDM4LjMgMTMuMyAzOC4zIDM1LjctLjMgNy45LTQuMSAxNi03LjYgMjcuMnoiXX0sZmZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRvY2tlciIsaWNvbjpbNjQwLDUxMixbXSwiZjM5NSIsIk0zNDkuOSAyMzYuM2wtNjYuMSAwIDAtNTkuNCA2Ni4xIDAgMCA1OS40em0wLTIwNC4zbC02Ni4xIDAgMCA2MC43IDY2LjEgMCAwLTYwLjd6bTc4LjIgMTQ0LjhsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHpNMjcxLjggMTA0LjdsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXptNzguMSAwbC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6bTI3Ni44IDEwMGMtMTQuNC05LjctNDcuNi0xMy4yLTczLjEtOC40LTMuMy0yNC0xNi43LTQ0LjktNDEuMS02My43bC0xNC05LjMtOS4zIDE0Yy0xOC40IDI3LjgtMjMuNCA3My42LTMuNyAxMDMuOC04LjcgNC43LTI1LjggMTEuMS00OC40IDEwLjdsLTQzNC43IDBjLTguNyA1MC44IDUuOCAxMTYuOCA0NCAxNjIuMSAzNy4xIDQzLjkgOTIuNyA2Ni4yIDE2NS40IDY2LjIgMTU3LjQgMCAyNzMuOS03Mi41IDMyOC40LTIwNC4yIDIxLjQgLjQgNjcuNiAuMSA5MS4zLTQ1LjIgMS41LTIuNSA2LjYtMTMuMiA4LjUtMTcuMWwtMTMuMy04Ljl6TTExNS42IDE3Ni44bC02NiAwIDAgNTkuNCA2Ni4xIDAgMC01OS40LS4xIDB6bTc4LjEgMGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40em03OC4xIDBsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHptLTc4LjEtNzIuMWwtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xeiJdfSxtZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWFnZW50byIsaWNvbjpbNDQ4LDUxMixbXSwiZjNjNCIsIk00NDUuOSAxMjcuOWwwIDI1Ni4xLTYzLjQgMzYuNSAwLTI1NS44LTE1OC41LTkxLjYtMTU4LjYgOTEuNiAuNCAyNTUuOS02My4zLTM2LjYgMC0yNTUuOSAyMjEuOS0xMjguMSAyMjEuNSAxMjcuOXpNMjU1LjggNDIwLjVsLTMxLjYgMTguNC0zMS44LTE4LjIgMC0yNTYtNjMuMyAzNi42IC4xIDI1NS45IDk0LjkgNTQuOSA5NS4xLTU0LjkgMC0yNTYtNjMuNC0zNi42IDAgMjU1Ljl6Il19LGdmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0b3ItYnJvd3NlciIsaWNvbjpbNTEyLDUxMixbXSwiZTgzOCIsIk0yNTYuNSA0NjUuNGwwLTMxYzk4LjMtLjMgMTc3LjktODAgMTc3LjktMTc4LjRTMzU0LjggNzcuOSAyNTYuNSA3Ny42bDAtMzFDMzcyIDQ2LjggNDY1LjQgMTQwLjUgNDY1LjQgMjU2UzM3MiA0NjUuMiAyNTYuNSA0NjUuNHptMC0xMDguNmM1NS40LS4zIDEwMC4zLTQ1LjMgMTAwLjMtMTAwLjhTMzEyIDE1NS41IDI1Ni41IDE1NS4ybDAtMzFjNzIuNiAuMyAxMzEuNCA1OS4yIDEzMS40IDEzMS44UzMyOS4xIDM4Ny42IDI1Ni41IDM4Ny44bDAtMzF6bTAtMTU1LjFjMjkuNyAuMyA1My44IDI0LjUgNTMuOCA1NC4zcy0yNCA1NC01My44IDU0LjNsMC0xMDguNnpNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHoiXX0sYmZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImdpdC1hbHQiLGljb246WzQ0OCw1MTIsW10sImY4NDEiLCJNNDM5LjYgMjM2LjFMMjQ0IDQwLjVDMjM4LjYgMzUgMjMxLjIgMzIgMjIzLjYgMzJzLTE1IDMtMjAuNCA4LjRsLTQwLjcgNDAuNiA1MS41IDUxLjVjMjcuMS05LjEgNTIuNyAxNi44IDQzLjQgNDMuN2w0OS43IDQ5LjdjMzQuMi0xMS44IDYxLjIgMzEgMzUuNSA1Ni43LTI2LjUgMjYuNS03MC4yLTIuOS01Ni0zNy4zbC00Ni4zLTQ2LjMgMCAxMjEuOWMyNS4zIDEyLjUgMjIuMyA0MS44IDkuMSA1NS02LjQgNi40LTE1LjIgMTAuMS0yNC4zIDEwLjFzLTE3LjgtMy42LTI0LjMtMTAuMWMtMTcuNi0xNy42LTExLjEtNDYuOSAxMS4yLTU2bDAtMTIzYy0yMC44LTguNS0yNC42LTMwLjctMTguNi00NUwxNDIuNiAxMDEgOC41IDIzNS4xQzMgMjQwLjYgMCAyNDcuOSAwIDI1NS41czMgMTUgOC41IDIwLjRMMjA0LjEgNDcxLjZjNS40IDUuNCAxMi43IDguNCAyMC40IDguNHMxNS0zIDIwLjQtOC40TDQzOS42IDI3Ni45YzUuNC01LjQgOC40LTEyLjggOC40LTIwLjRzLTMtMTUtOC40LTIwLjR6Il19LHZmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmaXJlZm94LWJyb3dzZXIiLGljb246WzUxMiw1MTIsW10sImUwMDciLCJNMTMwLjIgMTI3LjVsMCAwem0zNTEuNCA0NS40Yy0xMC42LTI1LjUtMzIuMS01My00OC45LTYxLjcgMTMuNyAyNi45IDIxLjcgNTMuOSAyNC43IDc0IDAgLjEgMCAuMyAuMSAuNC0yNy42LTY4LjgtNzQuNC05Ni41LTExMi42LTE1Ni44LTE1LTIzLjctMTAuOS0yNS4yLTEzLjEtMjQuN2wtLjEgLjFjLTQ2LjcgMjYtNzUuMyA3OC40LTgyLjYgMTIyLjctMTYuNiAuOS0zMi45IDUtNDcuOSAxMi4xLTEuNCAuNi0yLjUgMS43LTMuMSAzcy0uOSAyLjgtLjYgNC4zYy4yIC44IC42IDEuNiAxLjEgMi4zczEuMiAxLjMgMS45IDEuNyAxLjYgLjcgMi40IC44IDEuNyAwIDIuNS0uM2wuNS0uMmMxNS41LTcuMyAzMi40LTExLjIgNDkuNS0xMS4zIDYyLjgtLjYgOTcuMiA0NCAxMDcuNiA2Mi4zLTEzLTkuMi0zNi40LTE4LjItNTguOC0xNC4zIDg3LjcgNDMuOSA2NC4yIDE5NC41LTU3LjQgMTg5LjItNTkuNS0yLjYtOTcuMS01MS0xMDAuNS05MC44IDAgMCAxMS4yLTQxLjkgODAuNi00MS45IDcuNSAwIDI4LjktMjAuOSAyOS4zLTI3LS4xLTItNDIuNS0xOC45LTU5LjEtMzUuMi04LjgtOC43LTEzLjEtMTIuOS0xNi44LTE2LjEtMi0xLjctNC4xLTMuMy02LjMtNC44LTUuNi0xOS41LTUuOC00MC0uNy01OS42LTI1LjEgMTEuNC00NC42IDI5LjQtNTguNyA0NS40bC0uMSAwYy05LjctMTIuMi05LTUyLjYtOC40LTYxLjEtLjEtLjUtNy4yIDMuNy04LjIgNC4zLTguNiA2LjEtMTYuNSAxMi45LTIzLjggMjAuNC0xNi4zIDE2LjYtNDQuMSA1MC4yLTU1LjUgMTAxLjItNC41IDIwLjQtNi44IDQ0LjQtNi44IDUyLjMgMCAxMzQuNyAxMDkuMiAyNDMuOSAyNDMuOSAyNDMuOSAxMjAuNiAwIDIyMy04Ny4yIDI0MC40LTIwMi42IDExLjYtNzYuNy0xNC43LTEzMS4xLTE0LjctMTMyeiJdfSx5ZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2xvdWRzbWl0aCIsaWNvbjpbNTEyLDUxMixbXSwiZjM4NCIsIk01MTIgMjI3LjZMNTEyIDI4NC41IDI4NC40IDUxMiAyMjcuNiA1MTIgMCAyODQuNCAwIDIyNy42IDIyNy42IDAgMjg0LjUgMCA1MTIgMjI3LjZ6bS0yNTYgMTYyYzE3LjggLjUgMzUuNi0yLjYgNTIuMi05LjFzMzEuOC0xNi4yIDQ0LjYtMjguNyAyMy0yNy4zIDI5LjktNDMuOCAxMC41LTM0LjEgMTAuNS01Mi0zLjYtMzUuNS0xMC41LTUyLTE3LjEtMzEuMy0yOS45LTQzLjgtMjgtMjIuMi00NC42LTI4LjctMzQuNC05LjYtNTIuMi05LjFjLTE3LjgtLjUtMzUuNiAyLjYtNTIuMiA5LjFzLTMxLjggMTYuMy00NC42IDI4LjctMjMgMjcuMy0yOS45IDQzLjgtMTAuNSAzNC4xLTEwLjUgNTIgMy42IDM1LjUgMTAuNSA1MiAxNy4xIDMxLjMgMjkuOSA0My44IDI4IDIyLjIgNDQuNiAyOC43IDM0LjQgOS42IDUyLjIgOS4xeiJdfSx4ZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2l6YXJkcy1vZi10aGUtY29hc3QiLGljb246WzY0MCw1MTIsW10sImY3MzAiLCJNMjE5LjIgMzQ1LjdjLTEuOSAxLjQtMTEuMSA4LjQtLjMgMjMuNiA0LjYgNi40IDE0LjEgMTIuOCAyMS43IDYuNiA2LjUtNC45IDcuNC0xMi45IC4zLTIzLTUuNS03LjgtMTQuMy0xMi45LTIxLjctNy4xem0zMzYuOCA3NS45Yy0uMyAxLjctLjYgMS43IC44IDAgMi4xLTQuMiA0LjItMTAuMiA1LTE5LjkgMy4xLTM4LjUtNDAuMy03MS41LTEwMS4zLTc4LTU0LjctNi0xMjQuNCA5LjItMTg4LjggNjAuNWwtLjMgMS42YzIuNiA1IDUgMTAuNyAzLjQgMjEuMmwuOCAuM2M2My45LTU4LjQgMTMxLjItNzcuMiAxODQuNC03My44IDU4LjQgMy43IDEwMCAzNCAxMDAgNjguMSAwIDEwLTIuNiAxNS43LTMuOSAyMC4yek0zOTIuMyAyNDAuNGMuOCA3LjEgNC4yIDEwLjIgOS4yIDEwLjUgNS41IC4zIDkuNC0yLjYgMTAuNS02LjYgLjgtMy40IDIuMS0yOS44IDIuMS0yOS44UzQwMi44IDIyMSAzOTkuMSAyMjVjLTMuNyAzLjctNy4zIDguNC02LjggMTUuNXptLTUwLTE1MS4xYy0yMDQuNSAwLTMyOS4yIDEzNy41LTM0MS41IDE1MS45LTEgLjUtMS4zIC44IC44IDEuMyA2MC41IDE2LjUgMTU1LjggODEuMiAxOTYuMSAyMDIuMmwxIC4zYzU1LjItNjkuOSAxNDAuOS0xMjguMSAyMzctMTI4LjEgODAuOSAwIDEzMC4yIDQyLjIgMTMwLjIgODAuNCAwIDE4LjMtNi42IDMzLjUtMjIuMyA0Ni4zIDAgMS0uMiAuOCAuOCAuOCAxNC43LTEwLjcgMjcuNS0yOC44IDI3LjUtNDguMiAwLTIyLjgtMTIuMS0zOC4yLTEyLjEtMzguMiA3LjEgNy4xIDEwLjcgMTYuMiAxMC43IDE2LjIgNS44LTQwLjkgMjctNjIuMyAyNy02Mi4zLTIuNC05LjctNi44LTE3LjgtNi44LTE3LjggNy42IDguMSAxNC40IDI3LjUgMTQuNCA0MS40IDAgMTAuNS0zLjQgMjIuOC0xMi42IDMxLjlsLjMgLjVjOC4xLTUgMTYuNS0xNi44IDE2LjUtMzggMC0xNS43LTQuNy0yNS45LTQuNy0yNS45IDUuOC01LjIgMTEuMy05LjIgMTYtMTEuOCAuOCAzLjQgMi4xIDkuNyAyLjQgMTQuOSAwIDEgLjggMS44IDEgMCAuOC01LjgtLjMtMTYuMi0uMy0xNi41IDYtMy4xIDkuNy00LjUgOS43LTQuNS0xNS43LTExMC4zLTE0NC0xOTYuOS0yOTEuMi0xOTYuOXpNMjQzIDM3OC45Yy0xMS4xIDktMjQuMiA0LjEtMzAuNi00LjItNy40LTkuNi02LjgtMjQuMSA0LjItMzIuNSAxNC44LTExLjQgMjcuMS0uNSAzMS4yIDUuNSAuMyAuNCAxMi4xIDE2LjYtNC43IDMxLjJ6bTIuMS0xMzYuNGw5LjQtMTcuOCAxMS44IDcxLTEyLjYgNi0yNC42LTI4LjggMTQuMS0yNi43IDMuNyA0LjQtMS44LTguMXptMTguNiAxMTcuNmwtLjMtLjNjMi00LjEtMi41LTYuNi0xNy41LTMxLjctMS4zLTIuNC0zLjEtMi45LTQuNC0yLjZsLS4zLS41YzcuOS01LjggMTUuNC0xMC4yIDI1LjQtMTUuN2wuNSAuM2MxLjMgMS44IDIuMSAyLjkgMy40IDQuN2wtLjMgLjVjLTEtLjMtMi40LS44LTUuMiAuMy0yLjEgLjgtNy45IDMuNy0xMi4zIDcuNmwwIDEuM2MxLjYgMi40IDMuOSA2LjYgNS44IDkuN2wuMyAwYzEwLTYuMyA3LjYtNC41IDExLjUtNy45bC4zIDBjLjUgMS44IC41IDEuOCAxLjggNS41bC0uMyAuM2MtMy4xIC42LTQuNyAuMy0xMS41IDUuNWwwIC4zYzkuNSAxNyAxMSAxNi44IDEyLjYgMTZsLjMgLjNjLTIuMyAxLjYtNi4zIDQuMi05LjcgNi42ek0zMTkgMzI3LjZjLTMuMSAxLjYtNiAyLjktMTAgNWwtLjMtLjNjMS4zLTIuNiAxLjItMi43LTExLjgtMzIuNWwtLjMtLjNjLS4yIDAtOC45IDMuNy0xMCA3LjNsLS41IDAtMS01LjggLjMtLjVjNy4zLTQuNiAyNS41LTExLjYgMjcuOC0xMi42bC41IC4zIDMuMSA1LS4zIC41Yy0zLjUtMS44LTcuNCAuOC0xMi4zIDIuNmwwIC4zYzEyLjMgMzIgMTIuNyAzMC42IDE0LjcgMzAuNmwwIC4yem00NC44LTE2LjVjLTQuMiAxLTUuMiAxLjMtOS43IDIuOWwtLjMtLjMgLjUtNC41Yy0xLTMuNC0zLjEtMTEuNS0zLjctMTMuNmwtLjMtLjNjLTMuNCAuOC04LjkgMi42LTEyLjggMy45bC0uMyAuM2MuOCAyLjYgMy4xIDkuOSA0LjIgMTMuOSAuOCAyLjQgMS44IDIuOSAyLjkgMy4xbDAgLjVjLTMuNyAxLTcuMSAyLjYtMTAuMiAzLjlsLS4zLS4zYzEtMS4zIDEtMi45IC4zLTUtMS0zLjEtOC4xLTIzLjgtOS4yLTI3LjItLjUtMS44LTEuNi0zLjEtMi42LTMuMWwwLS41YzMuMS0xIDYtMi4xIDEwLjctMy40bC4zIC4zLS4zIDQuN2MxLjMgMy45IDIuNCA3LjYgMy4xIDkuN2wuMyAwYzMuOS0xLjMgOS40LTIuOSAxMi44LTMuOWwuMy0uMy0yLjYtOS40Yy0uNS0xLjgtMS0zLjQtMi42LTMuOWwwLS4zYzQuNC0xIDcuMy0xLjggMTAuNy0yLjRsLjMgLjNjLTEgMS4zLTEgMi45LS41IDQuNCAxLjYgNi4zIDQuNyAyMC40IDYuMyAyNi41IC41IDIuNiAxLjggMy40IDIuNiAzLjl6bTMyLjItNi44bC0uMyAuM2MtNC43IC41LTE0LjEgMi40LTIyLjUgNC4ybC0uMy0uMyAuOC00LjJjLTEuNi03LjktMy40LTE4LjYtNS0yNi4yLS4zLTEuOC0uOC0yLjktMi42LTMuN2wuOC0uNWM5LjItMS42IDIwLjItMi40IDI0LjktMi42bC4zIC4zYy41IDIuNCAuOCAzLjEgMS42IDUuNWwtLjMgLjNjLTEuMS0xLjEtMy4zLTMuMi0xNi4yLS44bC0uMyAuM2MuMyAxLjYgMSA2LjYgMS42IDkuOWwuMyAuM2M5LjUtMS43IDQuOC0uMSAxMC43LTIuNGwuMyAwYzAgMS42LS4zIDEuOC0uMyA1LjJsLS4zIDBjLTQuOC0xLTIuMi0uOS0xMC4yIDBsLS4zIC4zYy4zIDIuMSAxLjYgOS40IDIuMSAxMi42bC4zIC4zYzEuMiAuNCAxNC4yLS42IDE2LjItNC43bC4zIDBjLS41IDIuNC0xIDQuMi0xLjYgNnptMTAuNy00NC41Yy00LjUgMi40LTguMSAyLjktMTEgMi45LS4yIDAtMTEuNCAxLjEtMTcuNS0xMC02LjctMTAuOC0xLTI1LjIgNS41LTMxLjcgOC44LTguMSAyMy40LTEwLjEgMjguNS0xNyA4LTEwLjMtMTMtMjIuMy0yOS42LTUuOGwtMi42LTIuOSA1LjItMTYuMmMyNS42LTEuNiA0NS4yLTMgNTAgMTYuMiAuOCAzLjEgMCA5LjQtLjMgMTIuMSAwIDIuNi0xLjggMTguOC0yLjEgMjMtLjUgNC4yLS44IDE4LjMtLjggMjAuNyAuMyAyLjQgLjUgNC4yIDEuNiA1LjUgMS42IDEuOCA1LjggMS44IDUuOCAxLjhsLS44IDQuN2MtMTEuOC0xLjEtMTAuMy0uNi0yMC40LTEtMy4yLTUuMS0yLjItMy4zLTQuMi03LjkgMCAwLTQuMiAzLjktNy4zIDUuNXpNNDQzLjkgMjgxYy02LjQtMTAuNi0xOS44LTcuMi0yMS43IDUuNS0yLjYgMTcuMSAxNC4zIDE5LjggMjAuNyAxMC4ybC4zIC4zYy0uNSAxLjgtMS44IDYtMS44IDYuM2wtLjUgLjVjLTEwLjMgNi45LTI4LjUtMi41LTI1LjctMTguNiAxLjktMTAuOSAxNC40LTE4LjkgMjguOC05LjlsLjMgLjVjMCAxLjEtLjMgMy40LS4zIDUuM3ptNS44LTg3LjdsMC02LjZjLjcgMCAxOS42IDMuMyAyNy44IDcuM2wtMS42IDE3LjVzMTAuMi05LjQgMTUuNC0xMC43YzUuMi0xLjYgMTQuOSA3LjMgMTQuOSA3LjNsLTExLjMgMTEuM2MtMTIuMS02LjQtMTkuNi0uMS0yMC43IC44LTUuMyAzOC43LTguNiA0Mi4yIDQuNCA0Ni4xbC0uNSA0LjdjLTE3LjYtNC4zLTE4LjUtNC41LTM2LjktNy4zbC44LTQuN2M3LjMgMCA3LjUtNS4zIDcuNi02LjggMCAwIDUtNTMuMiA1LTU1LjMgMC0yLjktNS0zLjctNS0zLjd6bTExIDExNC40Yy04LjEtMi4xLTE0LjEtMTEtMTAuNy0yMC43IDMuMS05LjQgMTIuMy0xMi4zIDE4LjktMTAuMiA5LjIgMi42IDEyLjggMTEuOCAxMC43IDE5LjQtMi42IDguOS05LjQgMTMuOS0xOC45IDExLjV6bTQyLjIgOS43Yy0yLjQtLjUtNy4xLTIuNC04LjYtMi45bDAtLjMgMS42LTEuOGMuNi04LjIgLjYtNy4zIC4zLTcuNi00LjgtMS44LTYuNy0yLjQtNy4xLTIuNC0xLjMgMS44LTIuOSA0LjUtMy43IDUuNWwtLjggMy40IDAgLjNjLTEuMy0uMy0zLjktMS4zLTYtMS42bDAtLjMgMi42LTEuOGMzLjQtNC43IDEwLTE0LjEgMTMuOS0yMC4ybDAtMi4xIC41LS4zYzIuMSAuOCA1LjUgMi4xIDcuNiAyLjkgLjUgLjUgLjItMS45LTEgMjUuMS0uMiAxLjggMCAyLjYgLjggMy45em0tNC43LTg5LjhjMTEuMy0xOC4zIDMwLjgtMTYuMiAzNC0zLjRsNy42LTI2LjJjMi4zLTYuMi0yLjgtOS45LTQuNS0xMS4zbDEuOC0zLjdjMTIuMiAxMC40IDE2LjQgMTQgMjIuNSAyMC40LTI1LjkgNzMuMS0zMC44IDgwLjgtMjQuNiA4NC4zbC0xLjggNC40Yy02LjQtMy4zLTguOS00LjQtMTcuOC04LjZsMi4xLTYuOGMtLjMtLjMtMy45IDMuOS05LjcgMy43LTE5LjEtMS4zLTIyLjktMzEuNy05LjctNTIuOXptMjkuMyA3OS4zYzAtNS43LTYuMy03LjktNy45LTUuMi0xLjMgMi4xIDEgNSAyLjkgOC40IDEuNiAyLjYgMi42IDYuMyAxIDkuNC0yLjYgNi4zLTEyLjQgNS4zLTE1LjQtLjggMC0uNy0uMyAuMSAxLjgtNC43bC44LS4zYy0uNiA1LjcgNi4xIDkuNiA4LjQgNSAxLTIuMS0uNS01LjUtMi4xLTguNC0xLjYtMi42LTMuNy02LjMtMS44LTkuNyAyLjctNS4xIDExLjMtNC41IDE0LjcgMi40bDAgLjUtMi40IDMuNHptMjEuMiAxMy40Yy0yLTMuMy0uOS0yLjEtNC41LTQuN2wtLjMgMGMtMi40IDQuMi01LjggMTAuNS04LjYgMTYuMi0xLjMgMi40LTEgMy40LS44IDMuOWwtLjMgLjMtNS44LTQuNCAuMy0uMyAyLjEtMS4zYzMuMS01LjggNi42LTEyLjEgOS4yLTE3bDAtLjNjLTIuNi0yLTEuMi0xLjUtNi0xLjhsMC0uMyAzLjEtMy40IC4zIDBjMy43IDIuNCAxMCA2LjggMTIuMyA4LjlsLjMgLjMtMS4zIDMuOXpNNTc1LjggMjc2bC0yLjktMi45Yy44LTIuNCAxLjgtNSAyLjEtNy42IC43LTkuNy0xMS41LTExLjgtMTEuNS01IDAgNSA3LjkgMTkuNCA3LjkgMjcuOCAwIDEwLjItNS44IDE1LjctMTMuOSAxNi41LTguNCAuOC0yMC4yLTEwLjUtMjAuMi0xMC41bDUtMTQuNCAyLjkgMi4xYy0zIDE3LjggMTcuNyAyMC40IDEzLjMgNS4yLTEuMS00LTE4LjctMzQuMiAyLjEtMzguMiAxMy42LTIuNCAyMyAxNi41IDIzIDE2LjVMNTc1LjggMjc2em0zNS42LTEwLjJjLTExLTMwLjQtNjAuNS0xMjcuNS0xOTItMTI5LjYtNTMuNC0xLTk0LjMgMTUuNC0xMzIuOCAzOGw4NS42LTkuMi05MS40IDIwLjcgMjUuMSAxOS42LTMuOS0xNi41YzcuNS0xLjcgMzkuMS04LjUgNjYuOC04LjlsLTIyLjMgODAuNGMxMy42LS43IDE5LTkgMTkuNi0yMi44bDUtMSAuMyAyNi43Yy0yMi41IDMuMi0zNy4zIDYuNy00OS41IDkuOWwxMy4xLTQzLjItNjEuNS0zNi43IDIuNCA4LjEgMTAuMiA1YzYuMyAxOC42IDE5LjQgNTYuNiAyMC40IDU4LjcgMiA0LjMgMy4yIDUuOCAxMiA0LjVsMS4xIDVjLTE2LjEgNC45LTIzLjcgNy42LTM5IDE0LjRsLTIuNC00LjdjNC40LTIuOSA4LjctMy45IDUuNS0xMi44LTIzLjctNjIuNS0yMS41LTU4LjEtMjIuOC01OS40bDIuNC00LjQgMzMuNSA2Ny4zYy0zLjgtMTEuOSAxLjcgMS43LTMzLTc4LjhsLTQxLjkgODguNSA0LjctMTMuOS0zNS45LTQyLjIgMjcuOCA5My41LTExLjggOC40Yy0xMTEuOS0xMDEuNy0xMDUuOC05OC40LTExMy43LTk4LjctNS41LS4zLTEzLjYgNS41LTEzLjYgNS41bC01LTZjMzAuNi0yMy41IDMxLjYtMjQuMyA1OC40LTQyLjdsNC4yIDcuMXMtNS44IDQuMi03LjkgNy4xYy01LjkgOS4zIDEuNyAxMy4zIDYxLjggNzUuN2wtMTguOC01OC45IDM5LjgtMTAuMiAyNS43IDMwLjYgNC40LTEyLjMtNS0yNC42IDEzLjEtMy40IC41IDMuMSAzLjctMTAuNS05NC4zIDI5LjMgMTEuMy01LTEzLjYtNDIuNCAxNy4zLTkuMiAzMC4xIDM2LjEgMjguNS0xMy4xYy0xLjQtNy41LTIuNS0xNC41LTQuNy0xOS42bDE3LjMgMTMuOSA0LjctMi4xLTU5LjItNDIuNyAyMy4xIDExLjVjMTktNi4xIDI1LjItNy41IDMyLjItOS43bDIuNiAxMWMtMTIuNiAxMi42IDEuNCAxNi44IDYuNSAxOS40bC0xMy42LTYxIDEyIDI4LjNjNC4yLTEuMyA3LjMtMi4xIDcuMy0yLjFsMi42IDguNnMtMy4xIDEtNi4zIDIuMWw4LjkgMjEgMzMuOC02NS43LTIwLjcgNjFjNDIuNC0yNC4xIDgxLjQtMzYuNyAxMzItMzUuOSA2NyAxIDE2Ny4zIDQwLjggMTk5LjggMTM5LjggLjggMi4xIDAgMi42LS44IC4zem0tNDA4LTExMy40czEuOC0uNSA0LjItMS4zbDkuNCA3LjZjLS40IDAtMy40LS4zLTExLjMgMi40bC0yLjQtOC42em0xNDMuOCAzOC41Yy0xLjYtLjYtMjYuNS00LjgtMzMuMyAyMC43bDIxLjcgMTcgMTEuNS0zNy43ek0zMTguNCA2Ny4xYy01OC40IDAtMTA2LjEgMTItMTE1IDE0LjRsMCAuOGM4LjQgMi4xIDE0LjQgNC4yIDIxLjIgMTEuOGwxLjYgLjNjNi42LTEuOCA0OS0xMy45IDExMC4yLTEzLjkgMTgwLjIgMCAzMDEuNyAxMTYuOCAzMDEuNyAyMjMuNGwwIDEwYzAgMS4zIC44IDIuNiAxLjEgLjUgLjUtMi4xIC44LTguNiAuOC0xOS42IC4zLTgzLjgtOTYuNi0yMjcuNi0zMjEuNi0yMjcuNnpNNTI5LjUgMjM2LjhjMS4zLTUuOCAwLTEyLjMtNy4zLTEzLjEtOS42LTEuMS0xNi4xIDIzLjgtMTcgMzMuNS0uOCA1LjUtMS4zIDE0LjkgNiAxNC45IDQuNyAwIDkuNy0uOSAxOC4zLTM1LjR6TTQ2OCAyNzkuN2MtMi42LS44LTkuNC0uOC0xMi42IDEwLjUtMS44IDYuOCAuNSAxMy40IDYgMTQuNyAzLjcgMS4xIDguOSAuNSAxMS44LTEwLjcgMi42LTkuOS0xLjgtMTMuNi01LjItMTQuNHptMjMgMjFjMS44IC41IDMuMSAxIDUuOCAxLjggMC0xLjggLjUtOC40IC44LTEyLjEtMSAxLjMtNS41IDguMS02LjYgMTBsMCAuM3oiXX0sd2ZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtbmQiLGljb246WzUxMiw1MTIsW10sImY0ZWIiLCJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem05NCAxNDQuM2wwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHptMCA3OS44bDAgNDIuNS0xODAuMyAwIDAtNDIuNSAxODAuMyAweiJdfSxNZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidXNwcyIsaWNvbjpbNTEyLDUxMixbXSwiZjdlMSIsIk00MjguMyAyNDEuN2MyNS44LTQxLjMgMTUuMi00OC44LTExLjctNDguOGwtMjcgMGMtLjEgMC0xLjUtMS40LTEwLjkgOC0xMS4yIDUuNi0zNy45IDYuMy0zNy45IDguNyAwIDQuNSA3MC4zLTMuMSA4OC4xIDAgOS41IDEuNS0xLjUgMjAuNC00LjQgMzItLjUgNC41IDIuNCAyLjMgMy44IC4xek0zMTYuMiAyNjQuM2M2NC0yMS4zIDk3LjMtMjMuOSAxMDItMjYuMiA0LjQtMi45LTQuNC02LjYtMjYuMi01LjgtNTEuNyAyLjItMTM3LjYgMzcuMS0xNzIuNiA1My45bC0zMC43LTkzLjMgMTk2LjYgMGMtMi43LTI4LjItMTUyLjktMjIuNi0zMzcuOS0yMi42TC01IDQxNS44YzE5Ni40LTk3LjMgMjU4LjktMTMwLjMgMzIxLjItMTUxLjV6TTYyLjcgOTZjMjUzLjMgNTMuNyAzMzAgNjUuNyAzMzIuMSA4NS4yIDM2LjQgMCA0NS45IDAgNTIuNCA2LjYgMjEuMSAxOS43LTE0LjYgNjcuNy0xNC42IDY3LjctNC40IDIuOS00MDYuNCAxNjAuMi00MDYuNCAxNjAuMkw0NDkuMyA0MTUuNyA1MTcgOTYgNjIuNyA5NnoiXX0semZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1sZXR0ZXJib3hkIixpY29uOls0NDgsNTEyLFtdLCJlNjJlIiwiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTEwNS4xIDE4N0M2Ni40IDE4NyAzNSAyMTguMyAzNSAyNTdzMzEuNCA3MCA3MC4xIDcwYzI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuOC0zNC40LTMyLjktNTkuNS0zMi45ek0yMjQgMTg3Yy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjcgMzQuNCAzMi45IDU5LjUgMzIuOSAyNC44IDAgNDYuNS0xMi44IDU5LTMyLjJsLjUtLjctLjQtLjZjLTYuNS0xMC42LTEwLjItMjMuMS0xMC4yLTM2LjUgMC0xMy42IDMuOS0yNi4zIDEwLjYtMzcuMS0xMi40LTE5LjctMzQuNC0zMi45LTU5LjUtMzIuOXptMTE4LjkgMGMtMjQuOCAwLTQ2LjUgMTIuOC01OSAzMi4ybC0uNSAuNyAuNCAuNmM2LjUgMTAuNiAxMC4yIDIzLjEgMTAuMiAzNi41IDAgMTMuNi0zLjkgMjYuMy0xMC42IDM3LjEgMTIuNCAxOS44IDM0LjQgMzIuOSA1OS41IDMyLjkgMzguNyAwIDcwLjEtMzEuMyA3MC4xLTcwcy0zMS40LTcwLTcwLjEtNzB6Il19LGtmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJtYW5kYWxvcmlhbiIsaWNvbjpbMzg0LDUxMixbXSwiZjUwZiIsIk0yMDAuNiA1MTEuOWMtMS0zLjMtMS43LTE1LjgtMS40LTI0LjYgLjYtMTUuOSAxLTI0LjcgMS40LTI4LjggLjYtNi4yIDIuOS0yMC43IDMuMy0yMS40IC42LTEgLjQtMjcuOS0uMi0zMy4xLS4zLTIuNi0uNi0xMS45LS43LTIwLjctLjEtMTYuNS0uNS0yMC4xLTIuNy0yNC44LTEuMS0yLjMtMS4yLTMuOC0xLTExLjQgLjItNC4yIC4xLTguNS0uMy0xMi43LTItMTMtMy41LTI3LjctMy4yLTMzLjlzLjQtNy4xIDIuMS05LjdjMy4xLTQuNyA2LjUtMTQgOC42LTIzLjMgMi4zLTkuOSAzLjktMTcuMiA0LjYtMjAuNyAxLjEtNS4xIDIuNi0xMC4xIDQuNC0xNS4xIDIuMy02LjIgMi41LTE1LjQgLjQtMTUuNC0uMyAwLTEuNCAxLjItMi40IDIuN3MtNC44IDQuOC04LjMgNy40Yy04LjQgNi4xLTExLjcgOS40LTEyLjcgMTIuNnMtMSA3LjItLjIgNy44Yy4zIC4yIDEuMyAyLjQgMi4xIDQuOSAxLjYgNSAxLjkgMTAuMyAuNyAxNS40LS40IDEuOC0xIDUuNS0xLjUgOC4ycy0xIDYuNS0xLjMgOC4yYy0uMiAxLjUtLjcgMy0xLjUgNC4zLTEgMS0xLjEgLjktMi4xLS41LS43LTEuNS0xLjItMy4xLTEuNC00LjctLjItMS43LTEuNi03LjEtMy4xLTExLjktMy4zLTEwLjktMy41LTE2LjItMS0yMSAuOC0xLjQgMS40LTMgMS43LTQuNiAwLTIuNC0yLjItNS4zLTcuNC05LjktNy02LjItOC42LTcuOS0xMC4yLTExLjMtMS43LTMuNi0zLjEtNC4xLTQuNS0xLjUtMS44IDMtMi42IDkuMS0zIDIybC0uMyAxMi4yIDIgMi4yYzMuMiAzLjcgMTIuMSAxNi41IDEzLjggMTkuOCAzLjQgNi43IDQuMyAxMS43IDQuNCAyMy42czEgMjIuOCAyIDI0LjdjLjQgLjcgLjUgMS40IC4zIDEuNXMuNCAyLjEgMS4zIDQuM2MxIDIuOSAxLjcgNS45IDIuMSA5IC40IDMuNSAuOSA3IDEuNyAxMC40IDIuMiA5LjYgMi44IDE0LjEgMi40IDIwLjEtLjIgMy4zLS41IDExLjEtLjcgMTcuMy0xLjMgNDEuOC0xLjggNTgtMiA2MS4yLS4xIDItLjQgMTEuNS0uNiAyMS4xLS40IDE2LjMtMS4zIDI3LjQtMi40IDI4LjYtLjYgLjctOC4xLTQuOS0xMi41LTkuNS0zLjgtMy45LTQtNC44LTIuOC05LjkgLjctMyAyLjMtMTguMyAzLjMtMzIuNiAuNC00LjggLjgtMTAuNSAxLTEyLjcgLjgtOS40IDEuNy0yMC4zIDIuNi0zNC44IC42LTguNSAxLjMtMTYuNCAxLjctMTcuN3MuOS05LjkgMS4xLTE5LjFsLjQtMTYuOC0yLjMtNC4zYy0xLjctMy4zLTQuOS02LjktMTMuMi0xNS4zLTYtNi4xLTExLjgtMTIuMy0xMi45LTEzLjhsLTItMi44IC44LTEwLjljMS4xLTE1LjcgMS4xLTQ4LjYgMC01OS4xbC0uOS04LjctMy4zLTQuNWMtNS45LTguMS01LjgtNy43LTYuMi0zMy4zLS4xLTYuMS0uNC0xMS41LS42LTEyLjEtLjgtMS45LTMtMi43LTguNS0zLTguOS0uNi0xMS0xLjktMjMuOC0xNC42LTYuMi02LTEyLjMtMTItMTMuOC0xMy4yLTIuOC0yLjQtMi44LTItLjYtOS42bDEuNC00LjYtMS43LTNjLS44LTEuNC0xLjYtMi44LTIuNi00LjEtMS4zLTEuNS01LjUtMTAuOS02LTEzLjUtLjItLjctLjItMS40LS4xLTIuMXMuNS0xLjMgLjktMS44YzIuMi0yLjkgMy40LTUuNyA0LjUtMTAuNyAyLjMtMTEuMiA3LjctMjYuMSAxMC42LTI5LjIgMy4yLTMuNSA3LjctMSA5LjQgNSAxLjMgNC44IDEuNCA5LjggLjEgMTguNi0uNSAzLjctLjkgNy40LTEgMTEuMSAwIDQgLjIgNC43IDIuMyA3LjQgMy4zIDQuNCA3LjcgNy40IDE1LjIgMTAuNSAxLjcgLjcgMy4zIDEuNyA0LjcgMi44IDExLjIgMTAuNyAxOC42IDE2LjIgMjIuOSAxNi45IDUuMiAuOCA4IDQuNSAxMCAxMy40IDEuMyA1LjcgNCAxMS4xIDUuNSAxMS4xIDEuMi0uMiAyLjMtLjcgMy4zLTEuNCAyLTEuMiAyLjItMS43IDIuMi00LjItLjMtNi0uOS0xMS45LTItMTcuOC0uNC0xLjctLjgtNC4xLS45LTUuNHMtLjYtMy44LTEtNS43Yy0yLjYtMTEuMi0zLjYtMTUuNS00LjEtMTYtMS42LTItNC4xLTEwLjItNC45LTE1LjktMS42LTExLjEtNC0xNC4yLTEyLjktMTcuNC00LjktMS44LTkuNC00LjUtMTMuMy03LjktMS4yLTEtNC0zLjItNi40LTUuMXMtNC40LTMuNS00LjYtMy44Yy0uOC0uNy0xLjctMS40LTIuNy0yLTYuMi00LjItOC44LTctMTEuMy0xMmwtMi40LTVjLS4xLTguNy0uMy0xNy4zLS40LTI2bDYuOS02LjZjNC0zLjggOC41LTcuNCAxMC42LTguNCAzLjMtMS43IDQuNC0xLjkgMTEuNC0yIDguNS0uMiAxMC4xIDAgMTEuNyAxLjZzMS40IDYuNC0uMyA4LjVjLS42IC43LTEuMSAxLjUtMS4zIDIuMyAwIC42LTIuNiA0LjktNS40IDktMS4xIDIuMi0xLjkgNC41LTIuNCA2LjggMjAuNCAxMy40IDIxLjYgMy44IDE0LjEgMjlsMTEuNCAyLjVjMy4xLTguNyA2LjUtMTcuMyA4LjYtMjYuMiAuMy03LjYtMTItNC4yLTE1LjQtOC43LTIuMy01LjkgMy4xLTE0LjIgNi4xLTE5LjIgMS42LTIuMyA2LjYtNC43IDguOC00LjEgLjkgLjIgNC4yLS40IDcuNC0xLjMgMi41LS44IDUtMS4zIDcuNS0xLjcgMi0uMiA0LjEtLjcgNi0xLjMgMy43LTEuMSA0LjUtMS4yIDYuMy0uNCAxLjkgLjYgMy44IDEuMSA1LjggMS40IDIuMSAuMyA0LjEgLjkgNiAxLjkgMS42IC45IDMuMyAxLjcgNSAyLjIgMi41IC43IDMgLjYgNy0xLjdMMjI2IDUuNCAyMzYuNyA1YzEwLjQtLjQgMTAuOC0uNSAxNS4zLTIuN0wyNTYuNSAwIDI1OSAxLjRjMS44IDEgMy4xIDIuNyA0LjkgNiAyLjQgNC41IDIuNCA0LjYgMS40IDcuNC0uOSAyLjQtLjkgMy4zLS4xIDYuNCAuNSAyIDEuMiA0IDIuMSA1LjkgLjYgMS4zIDEuMSAyLjYgMS4zIDQgLjMgNC4zIDAgNS4zLTIuNCA2LjktMi4yIDEuNS03IDcuOS03IDkuMy0uMiAxLS42IDItMS4xIDMtNSAxMS41LTYuOCAxMy42LTE0LjMgMTctOS4yIDQuMi0xMi4zIDUuMi0xNi4yIDUuMi0zLjEgMC00IC4yLTQuNSAxLjMtMS4yIDEuNC0yLjUgMi43LTQuMSAzLjctMS44IDEuMi0zLjMgMi45LTQuNCA0LjgtLjUgMS4yLTEuNCAyLjItMi41IDIuOS0uOSAuNC0xLjggMS0yLjUgMS43LTIuMiAxLjktNC42IDMuNy03IDUuNC0zLjMgMi4zLTYuOSA1LTcuOSA2LS43IC43LTEuNSAxLjMtMi40IDEuNy0uOCAuNC0xLjYgLjktMi4xIDEuNi0xLjMgMS40LTEuNSAyLjEtMS4xIDQuNiAuMyAyIC44IDQgMS40IDUuOSAxLjMgMy44IDEuMyA3LjkgMCAxMC42cy0uOSA2LjcgMS40IDkuNmMyIDIuNiAyLjIgNC42IC43IDguOC0uOCAyLjktMS4xIDUuOS0xLjEgOC45IDAgNC45IC4yIDYuMyAxLjUgOC40czEuOCAyLjUgMy4yIDIuM2MyLS4yIDIuMy0xLjEgNC43LTEyLjEgMi4yLTEwIDMuNy0xMS45IDEzLjgtMTcuMSAyLjktMS41IDcuNS00IDEwLTUuNHM2LjgtMy43IDkuNC00LjljNS45LTIuNiAxMS4yLTYuNiAxNS4yLTExLjcgNy4xLTguOCAxMC0xNi4yIDEyLjgtMzMuMyAuNC0yLjggMS4zLTUuNCAyLjktNy43IDEuNC0yLjIgMi40LTQuNyAyLjktNy4zIDEtNS4zIDIuOS05LjEgNS42LTExLjUgNC43LTQuMiA2LTEuMSA0LjYgMTAuOS0uNSAzLjktMS4xIDEwLjMtMS40IDE0LjRsLS42IDcuNGMzIDIuNyA1LjkgNS41IDguOSA4LjJsLjEgOC40Yy4xIDQuNiAuNSA5LjUgLjkgMTAuOWwuOCAyLjUtNi40IDYuM2MtOC41IDguMy0xMi45IDEzLjktMTYuOCAyMS42LTEuOCAzLjUtMy43IDcuMS00LjQgOC0yLjIgMy4xLTYuNSAxMy04LjggMjAuM2wtMi4zIDcuMi03IDYuNWMtMy44IDMuNi04IDcuMi05LjIgOC4yLTMgMi4zLTQuMyA1LjEtNC4zIDEwLS4xIDIuNSAuNCA1IDEuNiA3LjMgLjggMS42IDEuNSAzLjIgMi4xIDQuOCAuMyAxIC45IDIgMS42IDIuOSAxLjQgMS42IDEuOSAxNi4xIC44IDIzLjItLjcgNC41LTMuNiAxMi00LjcgMTItMS44IDAtNC4xIDkuMy01LjEgMjAuNy0uMiAyLS42IDUuOS0xIDguN3MtMSAxMC0xLjQgMTZjLS44IDEyLjItLjIgMTguOCAyIDIzLjIgMy40IDYuNyAuNSAxMi43LTExIDIyLjhsLTQgMy41IC4xIDUuMmMuMSAzIC40IDYgMS4xIDguOSA0LjYgMTYgNC43IDE2LjkgNC40IDM3LjEtLjUgMjYuNC0uMyA0MC4zIC42IDQ0LjIgLjUgMi4zIC45IDQuNiAxLjEgNyAuMiAyIC43IDUuMyAxLjEgNy40IC41IDIuMyAuOCAxMSAuOCAyMi43bDAgMTkuMS0xLjggMi42Yy0yLjcgMy45LTE1LjEgMTMuNS0xNS41IDEyLjNsLjEgMHptMjkuNS00NS4xYy0uMi0uMy0uMy02LjktLjMtMTQuNiAwLTE0LjEtLjktMjcuNS0yLjMtMzQuNC0uNC0yLS44LTkuNy0uOS0xNy4xLS4yLTExLjktMS40LTI0LjQtMi42LTI2LjQtLjctMS4xLTMtMTcuNy0zLTIxLjMgMC00LjIgMS02IDUuMy05LjFzNC45LTMuMSA1LjUtLjdjLjMgMS4xIDEuNCA1LjYgMi42IDEwIDMuOSAxNS4xIDQuMSAxNi4zIDQgMjEuNy0uMSA1LjgtLjEgNi4xLTEuNyAxNy43LTEgNy4xLTEuMiAxMi40LTEgMjguNCAuMiAxOS40LS42IDM1LjctMiA0MS4zLS43IDIuOC0yLjggNS41LTMuNCA0LjRsLS4xIDB6bS03MS0zNy42Yy0uOC0zLjYtMS4zLTcuMi0xLjctMTAuOHMtMS03LjItMS43LTEwLjhjLS41LTIuMS0uOS00LjMtMS02LjUtLjMtMy4yLS45LTcuNS0xLjMtOS41LTEtNC44LTMuMy0xOS40LTMuNC0yMS4xIDAtLjctLjMtNC0uNy03LjQtLjctNi4yLS44LTI3LjctLjItMjguMyAxLTEgNi42IDIuOCAxMS4zIDcuNGw1LjMgNS4zLS40IDYuNWMtLjIgMy42LS42IDEwLjItLjggMTQuOC0uNSAxMy4zLS43IDguNy0xLjYgMjguNC0uOCAxNy40LTEuOSAzMS4zLTIuNiAzMi0uMSAuMS0uMiAuMS0uMiAuMnMtLjIgMC0uMyAwLS4yIDAtLjMtLjEtLjEtLjEtLjItLjJsMCAwek03MiAxNjIuNmMyMS4xIDEyLjggMTcuOCAxNC4yIDI4LjUgMTcuNyAxMyA0LjMgMTguOSA3LjEgMjMuMiAxNi45LTQzLjcgMzYuMS02OSA1Ny45LTc2LjcgNzAuOS0zMSA1Mi02IDEwMS42IDYyLjggODcuMi0xNC4yIDI5LjItNzggMjguNi05OC43LTQuOS0yNC43LTQwLTIyLjEtMTE4LjMgNjEtMTg3LjdsMCAwem0yMTAuOCAxNzljNTYuNyA2LjkgODIuMy0zNy43IDQ2LjUtODkuMiAwIDAtMjYuOS0yOS4zLTY0LjMtNjggMy0xNS41IDkuNS0zMi4xIDMwLjYtNTMuOCA4OS4yIDYzLjUgOTIgMTQxLjYgOTIuNSAxNDkuNCA0LjMgNzAuNi03OC43IDkxLjItMTA1LjMgNjEuN2wwIDB6Il19LCRFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNsYWNrIixpY29uOls0NDgsNTEyLFs2MjQ0Nywic2xhY2staGFzaCJdLCJmMTk4IiwiTTk0LjEgMzE1LjFjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFTMCAzNDEgMCAzMTUuMSAyMS4yIDI2OCA0Ny4xIDI2OGw0Ny4xIDAgMCA0Ny4xem0yMy43IDBjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTMjEyIDI4OS4yIDIxMiAzMTUuMWwwIDExNy44YzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xcy00Ny4xLTIxLjItNDcuMS00Ny4xbDAtMTE3Ljh6bTQ3LjEtMTg5Yy0yNS45IDAtNDcuMS0yMS4yLTQ3LjEtNDcuMVMxMzkgMzIgMTY0LjkgMzIgMjEyIDUzLjIgMjEyIDc5LjFsMCA0Ny4xLTQ3LjEgMHptMCAyMy43YzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xUzE5MC44IDI0NCAxNjQuOSAyNDRMNDcuMSAyNDRDMjEuMiAyNDQgMCAyMjIuOCAwIDE5Ni45czIxLjItNDcuMSA0Ny4xLTQ3LjFsMTE3LjggMHptMTg5IDQ3LjFjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTNDQ4IDE3MSA0NDggMTk2LjkgNDI2LjggMjQ0IDQwMC45IDI0NGwtNDcuMSAwIDAtNDcuMXptLTIzLjcgMGMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMVMyMzYgMjIyLjggMjM2IDE5Ni45bDAtMTE3LjhDMjM2IDUzLjIgMjU3LjIgMzIgMjgzLjEgMzJzNDcuMSAyMS4yIDQ3LjEgNDcuMWwwIDExNy44em0tNDcuMSAxODljMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFTMzA5IDQ4MCAyODMuMSA0ODAgMjM2IDQ1OC44IDIzNiA0MzIuOWwwLTQ3LjEgNDcuMSAwem0wLTIzLjdjLTI1LjkgMC00Ny4xLTIxLjItNDcuMS00Ny4xUzI1Ny4yIDI2OCAyODMuMSAyNjhsMTE3LjggMGMyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMXMtMjEuMiA0Ny4xLTQ3LjEgNDcuMWwtMTE3LjggMHoiXX0sQmY9JEUsU2ZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFuZ2VsbGlzdCIsaWNvbjpbMzg0LDUxMixbXSwiZjIwOSIsIk0zMTUuNiAyMTUuNGMxMS43LTMyLjYgNDUuNC0xMjYuOSA0NS40LTE1Ny4xIDAtMjYuNi0xNS43LTQ4LjktNDMuNy00OC45LTQ0LjYgMC04NC42IDEzMS43LTk3LjEgMTYzLjEtOS43LTI4LjUtNTUuMS0xNzIuNS05NS4xLTE3Mi41LTMxLjEgMC00NS43IDIyLjktNDUuNyA1MS43IDAgMzUuMyAzNC4yIDEyNi44IDQ2LjYgMTYyLTYuMy0yLjMtMTMuMS00LjMtMjAtNC4zLTIzLjQgMC00OC4zIDI5LjEtNDguMyA1Mi42IDAgOC45IDQuOSAyMS40IDggMjkuNy0zNi45IDEwLTUxLjEgMzQuNi01MS4xIDcxLjctLjEgNzIuMiA2OC4zIDE0OC42IDE2NC41IDE0OC42IDExOCAwIDE5MS40LTg4LjYgMTkxLjQtMjAyLjkgMC00My4xLTYuOS04Mi01NC45LTkzLjd6TTI4MC4yIDEwOGM0LTEyLjMgMjEuMS02NC4zIDM3LjEtNjQuMyA4LjYgMCAxMC45IDguOSAxMC45IDE2IDAgMTkuMS0zOC42IDEyNC42LTQ3LjEgMTQ4bC0zNC02IDMzLjEtOTMuN3pNMTEwLjggNDguM2MwLTExLjkgMTQuNS00NS43IDQ2LjMgNDcuMWwzNC42IDEwMC4zYy0xNS42LTEuMy0yNy43LTMtMzUuNCAxLjQtMTAuOS0yOC44LTQ1LjUtMTE5LjctNDUuNS0xNDguOHpNMTA4LjUgMjQ0YzI5LjMgMCA2Ny4xIDk0LjYgNjcuMSAxMDcuNCAwIDUuMS00LjkgMTEuNC0xMC42IDExLjQtMjAuOSAwLTc2LjktNzYuOS03Ni45LTk3LjcgLjEtNy43IDEyLjctMjEuMSAyMC40LTIxLjF6TTI5Mi44IDQzMC4zYy0yOS4xIDMyLTY2LjMgNDguNi0xMDkuNyA0OC42LTU5LjQgMC0xMDYuMy0zMi42LTEyOC45LTg4LjMtMTcuMS00My40IDMuOC02OC4zIDIwLjYtNjguMyAxMS40IDAgNTQuMyA2MC4zIDU0LjMgNzMuMSAwIDQuOS03LjcgOC4zLTExLjcgOC4zLTE2LjEgMC0yMi40LTE1LjUtNTEuMS01MS40LTI5LjcgMjkuNyAyMC41IDg2LjkgNTguMyA4Ni45IDI2LjEgMCA0My4xLTI0LjIgMzgtNDIgMy43IDAgOC4zIC4zIDExLjctLjYgMS4xIDI3LjEgOS4xIDU5LjQgNDEuNyA2MS43IDAtLjkgMi03LjEgMi03LjQgMC0xNy40LTEwLjYtMzIuNi0xMC42LTUwLjMgMC0yOC4zIDIxLjctNTUuNyA0My43LTcxLjcgOC02IDE3LjctOS43IDI3LjEtMTMuMSA5LjctMy43IDIwLTggMjcuNC0xNS40LTEuMS0xMS4yLTUuNy0yMS4xLTE2LjktMjEuMS0yNy43IDAtMTIwLjYgNC0xMjAuNi0zOS43IDAtNi43IC4xLTEzLjEgMTcuNC0xMy4xIDMyLjMgMCAxMTQuMyA4IDEzOC4zIDI5LjEgMTguMSAxNi4xIDI0LjMgMTEzLjItMzEgMTc0Ljd6bS05OC42LTEyNmM5LjcgMy4xIDE5LjcgNCAyOS43IDYtNy40IDUuNC0xNCAxMi0yMC4zIDE5LjEtMi44LTguNS02LjItMTYuOC05LjQtMjUuMXoiXX0sQ2ZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFuZHJvaWQiLGljb246WzU3Niw1MTIsW10sImYxN2IiLCJNNDIwLjUgMjUzLjlhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tMjY1LjEgMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTI3My43LTk2LjVsNDcuOS04M2MuOC0xLjEgMS4zLTIuNCAxLjUtMy44cy4yLTIuNy0uMS00LjEtLjktMi42LTEuNy0zLjctMS44LTItMy0yLjctMi41LTEuMS0zLjktMS4zLTIuNyAwLTQgLjQtMi41IDEuMS0zLjYgMS45LTEuOSAyLTIuNSAzLjJsLTQ4LjUgODQuMWMtMzguOC0xNy40LTgwLjgtMjYuNC0xMjMuMy0yNi40cy04NC41IDktMTIzLjMgMjYuNEwxMTYuMiA2NC40Yy0uNi0xLjItMS41LTIuMy0yLjUtMy4ycy0yLjMtMS41LTMuNi0xLjktMi43LS41LTQtLjQtMi43IC42LTMuOSAxLjMtMi4yIDEuNi0zIDIuNy0xLjQgMi40LTEuNyAzLjctLjMgMi43LS4xIDQuMSAuOCAyLjYgMS41IDMuOGw0Ny45IDgzQzY0LjUgMjAyLjIgOC4yIDI4NS41IDAgMzg0bDU3NiAwYy04LjItOTguNS02NC41LTE4MS44LTE0Ni45LTIyNi42eiJdfSxfZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVldHVwIixpY29uOls1NzYsNTEyLFtdLCJmMmUwIiwiTTEzMS4xIDQxNC4zYzEuMSA1LjctMi4zIDExLjEtOCAxMi4zLTUuNCAxLjEtMTAuOS0yLjMtMTItOC0xLjEtNS40IDIuMy0xMS4xIDcuNy0xMi4zczExLjEgMi4zIDEyLjMgOHptMTQzLjEgNzEuNGMtNi4zIDQuNi04IDEzLjQtMy43IDIwIDQuNiA2LjYgMTMuNCA4LjMgMjAgMy43IDYuMy00LjYgOC0xMy40IDMuNC0yMC00LjItNi41LTEzLjEtOC4zLTE5LjctMy43em0tODYtNDYyLjNhMTEuOCAxMS44IDAgMSAwIC00LjktMjMgMTEuOCAxMS44IDAgMSAwIDQuOSAyM3pNNjYuNSAyMjYuM2EyMi4yIDIyLjIgMCAxIDAgLTI0LjcgMzYuOSAyMi4yIDIyLjIgMCAxIDAgMjQuNy0zNi45em0yNzItMTcwLjlhMjIuMSAyMi4xIDAgMSAwIC0yMi40LTM4IDIyLjEgMjIuMSAwIDEgMCAyMi40IDM4em0tMTkxLjEgNThhMTYuOSAxNi45IDAgMSAwIC0xOC44LTI4IDE2LjkgMTYuOSAwIDEgMCAxOC44IDI4em0zNzIuMyAxNTZjLTcuNCAxLjctMTIuMyA5LjEtMTAuNiAxNi45IDEuNCA3LjQgOC45IDEyLjMgMTYuMyAxMC42IDcuNC0xLjQgMTIuMy04LjkgMTAuNi0xNi42LTEuNS03LjQtOC45LTEyLjMtMTYuMy0xMC45em0zOS43LTU2LjhhMTAuMSAxMC4xIDAgMSAwIC0xOS44IDQuMyAxMC4xIDEwLjEgMCAxIDAgMTkuOC00LjN6bS04MC4zLTczLjdhMTguOCAxOC44IDAgMSAwIDIwLjcgMzEuMyAxOC44IDE4LjggMCAxIDAgLTIwLjctMzEuM3ptLTYuMyAxMzkuNGMyNi4zIDQzLjEgMTUuMSAxMDAtMjYuMyAxMjkuMS0xNy40IDEyLjMtMzcuMSAxNy43LTU2LjkgMTcuMS0xMiA0Ny4xLTY5LjQgNjQuNi0xMDUuMSAzMi42LTEuMSAuOS0yLjYgMS43LTMuNyAyLjktMzkuMSAyNy4xLTkyLjMgMTcuNC0xMTkuNC0yMi4zLTkuNy0xNC4zLTE0LjYtMzAuNi0xNS4xLTQ2LjktNjUuNC0xMC45LTkwLTk0LTQxLjEtMTM5LjctMjguMy00Ni45IC42LTEwNy40IDUzLjQtMTE0LjkgMjUuMS02Ni4yIDEwNy42LTk3LjYgMTYzLjYtNTQuMiA2Ny40LTIyLjMgMTM2LjMgMjkuNCAxMzAuOSAxMDEuMSA0MS4xIDEyLjYgNTIuOCA2Ni45IDE5LjcgOTUuMnptLTcwIDc0LjNjLTMuMS0yMC42LTQwLjktNC42LTQzLjEtMjcuMS0zLjEtMzIgNDMuNy0xMDEuMSA0MC0xMjgtMy40LTI0LTE5LjQtMjkuMS0zMy40LTI5LjQtMTMuNC0uMy0xNi45IDItMjEuNCA0LjYtMi45IDEuNy02LjYgNC45LTExLjctLjMtNi4zLTYtMTEuMS0xMS43LTE5LjQtMTIuOS0xMi4zLTItMTcuNyAyLTI2LjYgOS43LTMuNCAyLjktMTIgMTIuOS0yMCA5LjEtMy40LTEuNy0xNS40LTcuNy0yNC0xMS40LTE2LjMtNy4xLTQwIDQuNi00OC42IDIwLTEyLjkgMjIuOS0zOCAxMTMuMS00MS43IDEyNS4xLTguNiAyNi42IDEwLjkgNDguNiAzNi45IDQ3LjEgMTEuMS0uNiAxOC4zLTQuNiAyNS40LTE3LjQgNC03LjQgNDEuNy0xMDcuNyA0NC42LTExMi42IDItMy40IDguOS04IDE0LjYtNS4xIDUuNyAzLjEgNi45IDkuNCA2IDE1LjEtMS4xIDkuNy0yOCA3MC45LTI4LjkgNzcuNy0zLjQgMjIuOSAyNi45IDI2LjYgMzguNiA0IDMuNy03LjEgNDUuNy05Mi42IDQ5LjQtOTguMyA0LjMtNi4zIDcuNC04LjMgMTEuNy04IDMuMSAwIDguMyAuOSA3LjEgMTAuOS0xLjQgOS40LTM1LjEgNzIuMy0zOC45IDg3LjctNC42IDIwLjYgNi42IDQxLjQgMjQuOSA1MC42IDExLjQgNS43IDYyLjUgMTUuNyA1OC41LTExLjF6bTUuNyA5Mi4zYTIzLjMgMjMuMyAwIDEgMCAyNi4yIDM4LjQgMjMuMyAyMy4zIDAgMSAwIC0yNi4yLTM4LjR6Il19LFRmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmb250aWNvbnMtZmkiLGljb246WzM4NCw1MTIsW10sImYzYTIiLCJNMTE0LjQgMjI0bDkyLjQgMC0xNS4yIDUxLjItNzYuNCAwIDAgMTU3LjhjMCA4LTIuOCA5LjIgNC40IDEwbDU5LjYgNS42IDAgMzQuNC0xNzkuMiAwIDAtMzUuMiAyOS4yLTIuOGM3LjItLjggOS4yLTMuMiA5LjItMTAuOGwwLTE1NS44YzAtMy4yLTQtMy4yLTgtMy4ybC0zMC40IDAgMC01MS4yIDM4LjQgMCAwLTI4LjhjMC02OCAzNi40LTk2IDEwNi05NiA0Ni44IDAgODguOCAxMS4yIDg4LjggNzIuNEwxNjMuNiAxODBjLjQtMjUuNi02LTMxLjYtMjIuNC0zMS42LTI1LjIgMC0yNiAxMy42LTI2IDM3LjZsMCAzMmMwIDMuMi00LjggNi0uOCA2ek0zODQgNDgzbC0xNDAuOCAwIDAtMzQuNCAyOC0zLjZjNy4yLS44IDEwLjQtMi40IDEwLjQtMTBsMC0xNDhjMC01LjYtNC05LjItOS4yLTEwLjhsLTMzLjItOC44IDkuMi00MC40IDExMCAwIDAgMjA4YzAgOC0zLjYgOC44IDQgMTBsMjEuNiAzLjYgMCAzNC40ek0zNTQgMTM1LjhsMTIuNCA0NS42LTEwIDEwLTQyLjgtMjIuOC00Mi44IDIyLjgtMTAtMTAgMTIuNC00NS42LTMwLTM2LjQgNC44LTEwIDM4IDAgMjEuMi0zOC40IDEyLjggMCAyMS4yIDM4LjQgMzggMCA0LjggMTMuMi0zMCAzMy4yeiJdfSxMZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGFsZmVkIixpY29uOls1NzYsNTEyLFtdLCJmM2Q4IiwiTTM4NC45IDE5My45YzAtNDcuNC01NS4yLTQ0LjItOTUuNC0yOS44LTEuMyAzOS40LTIuNSA4MC43LTMgMTE5LjggLjcgMi44IDIuNiA2LjIgMTUuMSA2LjIgMzYuOCAwIDgzLjQtNDIuOCA4My4zLTk2LjJ6TTE5MC40IDI2Ni4xYy4yIDAgNi41LTIuNyAxMS4yLTIuNyAyNi42IDAgMjAuNyA0NC4xLTE0LjQgNDQuMS0yMS41IDAtMzcuMS0xOC4xLTM3LjEtNDMgMC00MiA0Mi45LTk1LjYgMTAwLjctMTI2LjUgMS0xMi40IDMtMjIgMTAuNS0yOC4yIDExLjItOSAyNi42LTMuNSAyOS41IDExLjEgNzIuMi0yMi4yIDEzNS4yIDEgMTM1LjIgNzIgMCA3Ny45LTc5LjMgMTUyLjYtMTQwLjEgMTM4LjItLjEgMzkuNCAuOSA3NC40IDIuNyAxMDBsMCAuMmMuMiAzLjQgLjYgMTIuNS01LjMgMTkuMS05LjYgMTAuNi0zMy40IDEwLTM2LjQtMjIuMy00LjEtNDQuNCAuMi0yMDYuMSAxLjQtMjQyLjUtMjEuNSAxNS01OC41IDUwLjMtNTguNSA3NS45IC4yIDIuNSAuNCA0IC42IDQuNnpNOCAxODEuMXMtLjEgMzcuNCAzOC40IDM3LjRsMzAgMCAyMi40IDIxNy4yczAgNDQuMyA0NC43IDQ0LjNsMjg4LjkgMHM0NC43LS40IDQ0LjctNDQuM2wyMi40LTIxNy4yIDMwIDBzMzguNCAxLjIgMzguNC0zNy40YzAgMCAuMS0zNy40LTM4LjQtMzcuNGwtMzAuMSAwYy03LjMtMjUuNi0zMC4yLTc0LjMtMTE5LjQtNzQuM2wtMjggMCAwLTE5LjFzLTIuNy0xOC40LTIxLjEtMTguNGwtODUuOCAwUzIyNCAzMS45IDIyNCA1MC4zbDAgMTkuMS0yOC4xIDBzLTEwNSA0LjItMTIwLjUgNzQuM2wtMjkgMFM4IDE0Mi41IDggMTgxLjF6Il19LCRmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3cGJlZ2lubmVyIixpY29uOls1MTIsNTEyLFtdLCJmMjk3IiwiTTQ2My4yIDMyMi40YzU2LjIgNjQuMyA0LjIgMTU3LjYtOTEuOSAxNTcuNi0zOS42IDAtNzguOC0xNy43LTEwMC4xLTUwLTYuOSAuNC0yMi43IC40LTI5LjYgMC0yMS40IDMyLjQtNjAuNiA1MC0xMDAuMSA1MC05NS41IDAtMTQ4LjMtOTMtOTEuOS0xNTcuNi03OS4xLTEzMS45IDMxLjMtMjkwLjQgMjA2LjgtMjkwLjQgMTc1LjYgMCAyODUuOSAxNTguNiAyMDYuOCAyOTAuNHptLTMzOS42LTgzbDQxLjUgMCAwLTU4LjEtNDEuNSAwIDAgNTguMXptMjE3LjIgODYuMWwwLTIzLjhjLTYwLjUgMjAuOS0xMzIuNCA5LjItMTg3LjYtMzRsLjIgMjQuOWM1MS4xIDQ2LjQgMTMxLjcgNTcuOSAxODcuMyAzMi45ek0xOTAgMjM5LjRsMTY2LjEgMCAwLTU4LjEtMTY2LjEgMCAwIDU4LjF6Il19LEFmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkaWFzcG9yYSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc5MSIsIk0yMTkuNyAzNTQuNmMtMS40IDAtODggMTE5LjktODguNyAxMTkuOVM0NC40IDQxNCA0NCA0MTMuMyAxMzAuNiAyODcuNSAxMzAuNiAyODUuOGMwLTIuMi0xMjkuNi00NC0xMzcuNi00Ny4xLTEuMy0uNSAzMS40LTEwMS44IDMxLjctMTAyLjEgLjYtLjcgMTQ0LjQgNDcgMTQ1LjUgNDcgLjQgMCAuOS0uNiAxLTEuMyAuNC0yIDEtMTQ4LjYgMS43LTE0OS42IC44LTEuMiAxMDQuNS0uNyAxMDUuMS0uMyAxLjUgMSAzLjUgMTU2LjEgNi4xIDE1Ni4xIDEuNCAwIDEzOC43LTQ3IDEzOS4zLTQ2LjMgLjggLjkgMzEuOSAxMDIuMiAzMS41IDEwMi42LS45IC45LTE0MC4yIDQ3LjEtMTQwLjYgNDguOC0uMyAxLjQgODIuOCAxMjIuMSA4Mi41IDEyMi45cy04NS41IDYzLjUtODYuMyA2My41Yy0xLS4yLTg5LTEyNS41LTkwLjktMTI1LjVsMCAweiJdfSxEZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicHJvZHVjdC1odW50IixpY29uOls1MTIsNTEyLFtdLCJmMjg4IiwiTTMyNi4zIDIxOC44YzAgMjAuNS0xNi43IDM3LjItMzcuMiAzNy4ybC03MC4zIDAgMC03NC40IDcwLjMgMGMyMC41IDAgMzcuMiAxNi43IDM3LjIgMzcuMnpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzY3LjktMzcuMmMwLTQ3LjktMzguOS04Ni44LTg2LjgtODYuOGwtMTE5LjkgMCAwIDI0OCA0OS42IDAgMC03NC40IDcwLjMgMGM0Ny45IDAgODYuOC0zOC45IDg2LjgtODYuOHoiXX0sRWZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS11cHdvcmsiLGljb246WzQ0OCw1MTIsW10sImU2N2MiLCJNNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNDgwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDg4QzAgNTcuMSAyNS4xIDMyIDU2IDMyek0yNzAuOSAyNzQuMmM2LjYtNTIuOSAyNS45LTY5LjUgNTEuNC02OS41IDI1LjMgMCA0NC45IDIwLjIgNDQuOSA0OS43cy0xOS43IDQ5LjctNDQuOSA0OS43Yy0yNy45IDAtNDYuMy0yMS41LTUxLjQtMjkuOXptLTI2LjctNDEuOGMtOC4yLTE1LjUtMTQuMy0zNi4zLTE5LjItNTUuNmwtNjIuOSAwIDAgNzguMWMwIDI4LjQtMTIuOSA0OS40LTM4LjIgNDkuNFM4NC4xIDI4My40IDg0LjEgMjU1bC4zLTc4LjEtMzYuMiAwIDAgNzguMWMwIDIyLjggNy40IDQzLjUgMjAuOSA1OC4yIDEzLjkgMTUuMiAzMi44IDIzLjIgNTQuOCAyMy4yIDQzLjcgMCA3NC4yLTMzLjUgNzQuMi04MS41bDAtNTIuNWM0LjYgMTcuMyAxNS40IDUwLjUgMzYuMiA3OS43bC0xOS4zIDExMC41IDM2LjggMCAxMi44LTc4LjRjNC4yIDMuNSA4LjcgNi42IDEzLjQgOS40IDEyLjMgNy44IDI2LjQgMTIuMiA0MC45IDEyLjZsMy40IDBjNDUuMSAwIDgwLjktMzQuOSA4MC45LTgxLjlzLTM1LjktODIuMi04MC45LTgyLjJjLTQ1LjQgMC03MC45IDI5LjctNzguMSA2MC4xbDAgLjJ6Il19LFBmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjdXR0bGVmaXNoIixpY29uOls0NDgsNTEyLFtdLCJmMzhjIiwiTTM0OCAzMDUuNWMtMTcuNSAzMS42LTU3LjQgNTQuNS05NiA1NC41LTU2LjYgMC0xMDQtNDcuNC0xMDQtMTA0czQ3LjQtMTA0IDEwNC0xMDRjMzguNiAwIDc4LjUgMjIuOSA5NiA1NC41IDEzLjctNTAuOSA0MS43LTkzLjMgODctMTE3LjgtNDUuMy00OS42LTExMC41LTgwLjctMTgzLTgwLjctMTM3IDAtMjQ4IDExMS0yNDggMjQ4UzExNSA1MDQgMjUyIDUwNGM3Mi41IDAgMTM3LjctMzEuMSAxODMtODAuNy00NS4zLTI0LjUtNzMuMy02Ni45LTg3LTExNy44eiJdfSxJZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWVkYXBwcyIsaWNvbjpbMzIwLDUxMixbXSwiZjNjNiIsIk0xMTguMyAyMzguNGMzLjUtMTIuNSA2LjktMzMuNiAxMy4yLTMzLjYgOC4zIDEuOCA5LjYgMjMuNCAxOC42IDM2LjYgNC42LTIzLjUgNS4zLTg1LjEgMTQuMS04Ni43IDktLjcgMTkuNyA2Ni41IDIyIDc3LjUgOS45IDQuMSA0OC45IDYuNiA0OC45IDYuNiAxLjkgNy4zLTI0IDcuNi00MCA3LjgtNC42IDE0LjgtNS40IDI3LjctMTEuNCAyOC00LjcgLjItOC4yLTI4LjgtMTcuNS00OS42bC05LjQgNjUuNWMtNC40IDEzLTE1LjUtMjIuNS0yMS45LTM5LjMtMy4zLS4xLTYyLjQtMS42LTQ3LjYtNy44bDMxLTV6TTIyOCA0NDhjMjEuMiAwIDIxLjItMzIgMC0zMkw5MiA0MTZjLTIxLjIgMC0yMS4yIDMyIDAgMzJsMTM2IDB6bS0yNCA2NGMyMS4yIDAgMjEuMi0zMiAwLTMybC04OCAwYy0yMS4yIDAtMjEuMiAzMiAwIDMybDg4IDB6bTM0LjItMTQxLjVjMy4yLTE4LjkgNS4yLTM2LjQgMTEuOS00OC44IDcuOS0xNC43IDE2LjEtMjguMSAyNC00MSAyNC42LTQwLjQgNDUuOS03NS4yIDQ1LjktMTI1LjUgMC04NS42LTcxLjgtMTU1LjItMTYwLTE1NS4yUzAgNjkuNiAwIDE1NS4yYzAgNTAuMiAyMS4zIDg1LjEgNDUuOSAxMjUuNSA3LjkgMTIuOSAxNiAyNi4zIDI0IDQxIDYuNyAxMi41IDguNyAyOS44IDExLjkgNDguOSAzLjUgMjEgMzYuMSAxNS43IDMyLjYtNS4xLTMuNi0yMS43LTUuNi00MC43LTE1LjMtNTguNi0zMi42LTYwLjQtNjYuMS05NS42LTY2LjEtMTUxLjcgMC02Ny45IDU3LTEyMy4yIDEyNy0xMjMuMlMyODcgODcuMyAyODcgMTU1LjJjMCA1Ni4xLTMzLjUgOTEuMy02Ni4xIDE1MS42LTkuNyAxOC0xMS43IDM3LjQtMTUuMyA1OC42LTMuNCAyMC42IDI5IDI2LjQgMzIuNiA1LjF6Il19LE5mZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaXgiLGljb246WzUxMiw1MTIsW10sImU0M2EiLCJNMjQyLjQgMjkyLjVjNS40LTUuNCAxNC43LTUuNCAyMC4xIDBsNzcgNzdjMTQuMiAxNC4yIDMzLjEgMjIgNTMuMSAyMmwxNS4xIDAtOTcuMSA5Ny4xYy0zMC4zIDI5LjUtNzkuNSAyOS41LTEwOS44IDBsLTk3LjUtOTcuNCA5LjMgMGMyMCAwIDM4LjktNy44IDUzLjEtMjJsNzYuNy03Ni43em0yMC4xLTczLjZjLTYuNCA1LjUtMTQuNiA1LjYtMjAuMSAwbC03Ni43LTc2LjdjLTE0LjItMTUuMS0zMy4xLTIyLTUzLjEtMjJsLTkuMyAwIDk3LjQtOTcuNGMzMC40LTMwLjMgNzkuNi0zMC4zIDEwOS45IDBsOTcuMiA5Ny4xLTE1LjIgMGMtMjAgMC0zOC45IDcuOC01My4xIDIybC03NyA3N3pNMTEyLjYgMTQyLjdjMTMuOCAwIDI2LjUgNS42IDM3LjEgMTUuNGw3Ni43IDc2LjdjNy4yIDYuMyAxNi42IDEwLjggMjYuMSAxMC44IDkuNCAwIDE4LjgtNC41IDI2LTEwLjhsNzctNzdjOS44LTkuNyAyMy4zLTE1LjMgMzcuMS0xNS4zbDM3LjcgMCA1OC4zIDU4LjNjMzAuMyAzMC4zIDMwLjMgNzkuNSAwIDEwOS44bC01OC4zIDU4LjMtMzcuNyAwYy0xMy44IDAtMjcuMy01LjYtMzcuMS0xNS40bC03Ny03N2MtMTMuOS0xMy45LTM4LjItMTMuOS01Mi4xIC4xbC03Ni43IDc2LjZjLTEwLjYgOS44LTIzLjMgMTUuNC0zNy4xIDE1LjRsLTMxLjggMC01OC01OGMtMzAuMy0zMC4zLTMwLjMtNzkuNSAwLTEwOS44bDU4LTU4LjEgMzEuOCAweiJdfSxBRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtdHVtYmxyIixpY29uOls0NDgsNTEyLFsidHVtYmxyLXNxdWFyZSJdLCJmMTc0IiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYuOCA0MTZjLTc1LjUgMC05MS45LTU1LjUtOTEuOS04Ny45bDAtOTAtMjkuNyAwYy0zLjQgMC02LjItMi44LTYuMi02LjJsMC00Mi41YzAtNC41IDIuOC04LjUgNy4xLTEwIDM4LjgtMTMuNyA1MC45LTQ3LjUgNTIuNy03My4yIC41LTYuOSA0LjEtMTAuMiAxMC0xMC4ybDQ0LjMgMGMzLjQgMCA2LjIgMi44IDYuMiA2LjJsMCA3MiA1MS45IDBjMy40IDAgNi4yIDIuOCA2LjIgNi4ybDAgNTEuMWMwIDMuNC0yLjggNi4yLTYuMiA2LjJsLTUyLjEgMCAwIDgzLjNjMCAyMS40IDE0LjggMzMuNSA0Mi41IDIyLjQgMy0xLjIgNS42LTIgOC0xLjQgMi4yIC41IDMuNiAyLjEgNC42IDQuOUwzMTggMzg3LjFjMSAzLjIgMiA2LjctLjMgOS4xLTguNSA5LjEtMzEuMiAxOS44LTYwLjkgMTkuOHoiXX0sRmZlPUFFLE9mZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWFjdCIsaWNvbjpbNTEyLDUxMixbXSwiZjQxYiIsIk00MTguMiAxNzcuMmMtNS40LTEuOC0xMC44LTMuNS0xNi4yLTUuMSAuOS0zLjcgMS43LTcuNCAyLjUtMTEuMSAxMi4zLTU5LjYgNC4yLTEwNy41LTIzLjEtMTIzLjMtMjYuMy0xNS4xLTY5LjIgLjYtMTEyLjYgMzguNC00LjMgMy43LTguNSA3LjYtMTIuNSAxMS41LTIuNy0yLjYtNS41LTUuMi04LjMtNy43LTQ1LjUtNDAuNC05MS4xLTU3LjQtMTE4LjQtNDEuNS0yNi4yIDE1LjItMzQgNjAuMy0yMyAxMTYuNyAxLjEgNS42IDIuMyAxMS4xIDMuNyAxNi43LTYuNCAxLjgtMTIuNyAzLjgtMTguNiA1LjktNTMuNCAxOC41LTkxLjcgNDcuNy05MS43IDc3LjkgMCAzMS4yIDQwLjggNjIuNSA5Ni4zIDgxLjUgNC41IDEuNSA5IDMgMTMuNiA0LjMtMS41IDYtMi44IDExLjktNCAxOC0xMC41IDU1LjUtMi4zIDk5LjUgMjMuOSAxMTQuNiAyNyAxNS42IDcyLjQtLjQgMTE2LjYtMzkuMSAzLjUtMy4xIDctNi4zIDEwLjUtOS43IDQuNCA0LjMgOSA4LjQgMTMuNiAxMi40IDQyLjggMzYuOCA4NS4xIDUxLjcgMTExLjIgMzYuNiAyNy0xNS42IDM1LjgtNjIuOSAyNC40LTEyMC41LS45LTQuNC0xLjktOC45LTMtMTMuNSAzLjItLjkgNi4zLTEuOSA5LjQtMi45IDU3LjctMTkuMSA5OS41LTUwIDk5LjUtODEuNyAwLTMwLjMtMzkuNC01OS43LTkzLjgtNzguNHpNMjgyLjkgOTIuM2MzNy4yLTMyLjQgNzEuOS00NS4xIDg3LjctMzYgMTYuOSA5LjcgMjMuNCA0OC45IDEyLjggMTAwLjQtLjcgMy40LTEuNCA2LjctMi4zIDEwLTIyLjItNS00NC43LTguNi02Ny4zLTEwLjYtMTMtMTguNi0yNy4yLTM2LjQtNDIuNi01My4xIDMuOS0zLjcgNy43LTcuMiAxMS43LTEwLjd6TTE2Ny4yIDMwNy41YzUuMSA4LjcgMTAuMyAxNy40IDE1LjggMjUuOS0xNS42LTEuNy0zMS4xLTQuMi00Ni40LTcuNSA0LjQtMTQuNCA5LjktMjkuMyAxNi4zLTQ0LjUgNC42IDguOCA5LjMgMTcuNSAxNC4zIDI2LjF6TTEzNi45IDE4Ny4yYzE0LjQtMy4yIDI5LjctNS44IDQ1LjYtNy44LTUuMyA4LjMtMTAuNSAxNi44LTE1LjQgMjUuNC00LjkgOC41LTkuNyAxNy4yLTE0LjIgMjYtNi4zLTE0LjktMTEuNi0yOS41LTE2LTQzLjZ6bTI3LjQgNjguOWM2LjYtMTMuOCAxMy44LTI3LjMgMjEuNC00MC42czE1LjgtMjYuMiAyNC40LTM4LjljMTUtMS4xIDMwLjMtMS43IDQ1LjktMS43czMxIC42IDQ1LjkgMS43YzguNSAxMi42IDE2LjYgMjUuNSAyNC4zIDM4LjdzMTQuOSAyNi43IDIxLjcgNDAuNGMtNi43IDEzLjgtMTMuOSAyNy40LTIxLjYgNDAuOC03LjYgMTMuMy0xNS43IDI2LjItMjQuMiAzOS0xNC45IDEuMS0zMC40IDEuNi00Ni4xIDEuNnMtMzAuOS0uNS00NS42LTEuNGMtOC43LTEyLjctMTYuOS0yNS43LTI0LjYtMzlzLTE0LjgtMjYuOC0yMS41LTQwLjZ6bTE4MC42IDUxLjJjNS4xLTguOCA5LjktMTcuNyAxNC42LTI2LjcgNi40IDE0LjUgMTIgMjkuMiAxNi45IDQ0LjMtMTUuNSAzLjUtMzEuMiA2LjItNDcgOCA1LjQtOC40IDEwLjUtMTcgMTUuNS0yNS42em0xNC40LTc2LjVjLTQuNy04LjgtOS41LTE3LjYtMTQuNS0yNi4yLTQuOS04LjUtMTAtMTYuOS0xNS4zLTI1LjIgMTYuMSAyIDMxLjUgNC43IDQ1LjkgOC00LjYgMTQuOC0xMCAyOS4yLTE2LjEgNDMuNHpNMjU2LjIgMTE4LjNjMTAuNSAxMS40IDIwLjQgMjMuNCAyOS42IDM1LjgtMTkuOC0uOS0zOS43LS45LTU5LjUgMCA5LjgtMTIuOSAxOS45LTI0LjkgMjkuOS0zNS44ek0xNDAuMiA1N2MxNi44LTkuOCA1NC4xIDQuMiA5My40IDM5IDIuNSAyLjIgNSA0LjYgNy42IDctMTUuNSAxNi43LTI5LjggMzQuNS00Mi45IDUzLjEtMjIuNiAyLTQ1IDUuNS02Ny4yIDEwLjQtMS4zLTUuMS0yLjQtMTAuMy0zLjUtMTUuNS05LjQtNDguNC0zLjItODQuOSAxMi42LTk0ek0xMTUuNyAzMjAuNmMtNC4yLTEuMi04LjMtMi41LTEyLjQtMy45LTIxLjMtNi43LTQ1LjUtMTcuMy02My0zMS4yLTEwLjEtNy0xNi45LTE3LjgtMTguOC0yOS45IDAtMTguMyAzMS42LTQxLjcgNzcuMi01Ny42IDUuNy0yIDExLjUtMy44IDE3LjMtNS41IDYuOCAyMS43IDE1IDQzIDI0LjUgNjMuNi05LjYgMjAuOS0xNy45IDQyLjUtMjQuOCA2NC41em0xMTYuNiA5OGMtMTYuNSAxNS4xLTM1LjYgMjcuMS01Ni40IDM1LjMtMTEuMSA1LjMtMjMuOSA1LjgtMzUuMyAxLjMtMTUuOS05LjItMjIuNS00NC41LTEzLjUtOTIgMS4xLTUuNiAyLjMtMTEuMiAzLjctMTYuNyAyMi40IDQuOCA0NSA4LjEgNjcuOSA5LjggMTMuMiAxOC43IDI3LjcgMzYuNiA0My4yIDUzLjQtMy4yIDMuMS02LjQgNi4xLTkuNiA4Ljl6bTI0LjUtMjQuM2MtMTAuMi0xMS0yMC40LTIzLjItMzAuMy0zNi4zIDkuNiAuNCAxOS41IC42IDI5LjUgLjYgMTAuMyAwIDIwLjQtLjIgMzAuNC0uNy05LjIgMTIuNy0xOS4xIDI0LjgtMjkuNiAzNi40em0xMzAuNyAzMGMtLjkgMTIuMi02LjkgMjMuNi0xNi41IDMxLjMtMTUuOSA5LjItNDkuOC0yLjgtODYuNC0zNC4yLTQuMi0zLjYtOC40LTcuNS0xMi43LTExLjUgMTUuMy0xNi45IDI5LjQtMzQuOCA0Mi4yLTUzLjYgMjIuOS0xLjkgNDUuNy01LjQgNjguMi0xMC41IDEgNC4xIDEuOSA4LjIgMi43IDEyLjIgNC45IDIxLjYgNS43IDQ0LjEgMi41IDY2LjN6bTE4LjItMTA3LjVjLTIuOCAuOS01LjYgMS44LTguNSAyLjYtNy0yMS44LTE1LjYtNDMuMS0yNS41LTYzLjggOS42LTIwLjQgMTcuNy00MS40IDI0LjUtNjIuOSA1LjIgMS41IDEwLjIgMy4xIDE1IDQuNyA0Ni42IDE2IDc5LjMgMzkuOCA3OS4zIDU4IDAgMTkuNi0zNC45IDQ0LjktODQuOCA2MS40ek0yNTYgMzAxLjhhNDUuOCA0NS44IDAgMSAwIDAtOTEuNiA0NS44IDQ1LjggMCAxIDAgMCA5MS42eiJdfSxSZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaHVnZ2luZy1mYWNlIixpY29uOls1NzYsNTEyLFtdLCJlODY5IiwiTTI4Ni44IDguMmMxMzAgMCAyMzUuNCAxMDUuOCAyMzUuNCAyMzYuMyAwIDE3LjctMS45IDM1LTUuNiA1MS43LTEuNCA2LjUtMy4xIDEyLjgtNS4xIDE5LjEgNi41LS42IDEzIC42IDE4LjcgMy41IDEyLjYgNi41IDIwLjIgMjEuNyAxOC4yIDM1LjctLjcgNC45LTIuNCA5LjQtNC44IDEzLjUgNS4yIDQuMiA5IDEwLjEgMTAuOCAxNy4xIDEuNCA1LjUgMi45IDE3LjEtNC44IDI4LjkgNS44IDkuMiA2LjYgMjAuNiAyLjIgMzAuNi02LjIgMTQuMS0yMS43IDI1LjMtNTEuNyAzNy4zLTMyLjUgMTMtNjcuMSAyMS45LTEwMi4zIDIxLjktMzIgMC01NS45LTguOS03MS0yNi40LTEzIDIuMi0yNi4zIDMuNC00MCAzLjQtMTIuNyAwLTI1LjItMS0zNy4zLTIuOS0xNS4xIDE3LjItMzguOCAyNS45LTcwLjYgMjUuOS0zNS4xIDAtNzAtOS0xMDIuNC0yMS45LTMwLTEyLTQ1LjUtMjMuMS01MS43LTM3LjMtNC40LTkuOS0zLjYtMjEuNCAyLjItMzAuNi03LjctMTEuOS02LjMtMjMuNC00LjgtMjguOSAxLjgtNyA1LjctMTIuOSAxMC44LTE3LjEtMi41LTQuMS00LjEtOC42LTQuOC0xMy41LTEuNS0xMC40IDItMjAuNyA5LjctMjkuMiA2LjEtNi43IDE1LjEtMTAuMyAyNC4yLTEwLjItMS45LTYuMS0zLjYtMTIuNC01LTE4LjctMy43LTE2LjctNS43LTM0LTUuNy01MS44IDAtMTMwLjUgMTA1LjQtMjM2LjMgMjM1LjQtMjM2LjN6TTExNy41IDMxMWMtMTMtOC4yLTIyLjEtMy42LTE5IDEzLjRzNTcuMiA1OC4yIDUyIDY3LjJjLTUuMiA4LjgtMjMuNS0xMC4xLTIzLjgtMTAuNSAwIDAtNTguMi01My4xLTcwLjgtMzkuMy0xMi42IDEzLjggOS42IDI1LjQgNDEuMyA0NC43czM0LjIgMjQuNCAyOS43IDMxLjctNzQuNS01Mi04MS4xLTI2LjhjLTYuNSAyNS4xIDcxLjQgMzIuNCA2Ni43IDQ5LjgtNC44IDE3LjQtNTQuOS0zMi44LTY1LjItMTMuMy0xMC4zIDE5LjYgNzAuOCA0Mi42IDcxLjQgNDIuNyAyNi4yIDYuOCA5Mi42IDIxLjMgMTE1LjktMTIuOSAxNi43LTI0LjYgMTUuNi00My4xLTcuNC02Ni4xcy0zNi4zLTU2LjctMzYuMy01Ni43YzAtLjItNS0xOS41LTE2LjMtMTcuOC0xMS40IDEuOC0xOS43IDMxIDQuMSA0OC45IDIzLjggMTcuOS00LjcgMzAtMTMuOSAxMy4zLTkuMi0xNi44LTM0LjItNTkuOS00Ny4xLTY4LjJ6bTM2MC42IDEzLjRjMy4xLTE3LTYuMS0yMS42LTE5LTEzLjQtMTMgOC4zLTM3LjkgNTEuNC00Ny4xIDY4LjJzLTM3LjcgNC42LTEzLjktMTMuMyAxNS40LTQ3LjEgNC4xLTQ4LjktMTYuMyAxNy44LTE2LjMgMTcuOGMtLjEgLjItMTMuNCAzMy43LTM2LjMgNTYuNy0yMi45IDIzLTI0LjEgNDEuNS03LjQgNjYuMSAyMy4yIDM0LjIgODkuNyAxOS43IDExNS45IDEyLjkgMS41LS40IDgxLjYtMjMuMyA3MS40LTQyLjctMTAuMy0xOS41LTYwLjQgMzAuNi02NS4zIDEzLjMtNC44LTE3LjMgNzMuMi0yNC42IDY2LjctNDkuOC02LjYtMjUuMS03Ni42IDM0LjEtODEuMSAyNi44LTQuNS03LjMtMi0xMi40IDI5LjctMzEuNyAzMS43LTE5LjMgNTQtMzAuOSA0MS4zLTQ0LjctMTIuNy0xMy44LTcwLjggMzkuMy03MC44IDM5LjMtLjQgLjQtMTguNiAxOS4zLTIzLjggMTAuNS01LjMtOC45IDQ4LjktNTAuMSA1Mi02Ny4yek0yODYuOCAzMi42Yy0xMTYuNiAwLTIxMS4xIDk0LjktMjExLjEgMjExLjkgMCAxNy4xIDIgMzMuOCA1LjggNDkuNyAwLS4xIC4xLS4xIC4yLS4yIDYuMS03LjQgMTQuOS0xMS40IDI0LjctMTEuNCAxNy43IDAgMzEuMSAxMS45IDQxLjUgMjQuOSA2LjgtOS40IDE3LjEtMTUgMjcuOS0xNSAyMC43IDAgMzMuMiAxOC4xIDM3LjkgMzQuMyAyLjMgNS41IDEzLjYgMzAuNSAzMC40IDQ3LjQgMjUuNyAyNS44IDMyLjIgNTIuNCAxOS40IDgwLjkgMTYgMS44IDMyLjggMS43IDQ5LjItLjMtMTIuNS0yOC40LTYtNTQuOSAxOS42LTgwLjYgMTYuOS0xNi45IDI4LjEtNDEuOSAzMC41LTQ3LjQgNC43LTE2LjIgMTcuMi0zNC4zIDM3LjktMzQuMyAxMC45IDAgMjEuMiA1LjYgMjcuOSAxNSAxMC40LTEzIDIzLjgtMjQuOSA0MS41LTI0LjkgOC43IDAgMTYuNiAzLjEgMjIuNSA4LjkgNS0yMiA2LjQtNDUuOCA0LjEtNjguNy0xMC44LTEwNi45LTEwMC43LTE5MC4zLTIxMC0xOTAuM3ptMS41IDIzNC4yYzQzLjYgMCA3OS00MiA3OS0xNC41IDAgMjcuNC0xOS4yIDgwLjktNzguOCA4MC45LTE5LjIgMC0zNC4yLTUuNS00NS44LTEzLjktMjMuMi0xOS40LTMzLjQtNDguMi0zMy40LTY2LjkgMC0yNy40IDM1LjQgMTQuNSA3OSAxNC41em0tMTMuMyAyNWMtOC4yIDIuNC0xNS41IDYuOC0yMS41IDEyLjYgMjIgMTIuOCA1MC40IDEyLjkgNzEuNy0xLjMtNS41LTQuOS0xMi04LjctMTkuMS0xMS01LjEtMS42LTEwLjQgMTUuOC0xNiAxNS44LTUuMiAwLTEwLjMtMTcuNi0xNS4xLTE2LjJ6TTE0Ny4xIDIxNS41YTE5LjggMTkuOCAwIDEgMSAwLTM5LjYgMTkuOCAxOS44IDAgMSAxIDAgMzkuNnptMjgyLjQgMGExOS44IDE5LjggMCAxIDEgMC0zOS42IDE5LjggMTkuOCAwIDEgMSAwIDM5LjZ6bS0yNDQtNTUuNGM3LjktMTQuOSAyNi4zLTIwLjUgNDEuMS0xMi42czIwLjQgMjYuNCAxMi42IDQxLjJjLTMuNyA3LTE1LjUtNC40LTIyLjQtMS45LTcuNyAyLjctMTAuOCAxOC43LTE4LjYgMTQuNi0xNC44LTcuOS0yMC40LTI2LjQtMTIuNi00MS4yem0xNjQuNC0xMi42YzE0LjgtNy45IDMzLjItMi4zIDQxLjEgMTIuNnMyLjIgMzMuMy0xMi42IDQxLjJjLTcuOCA0LjItMTAuOS0xMS44LTE4LjctMTQuNi02LjktMi40LTE4LjcgOS0yMi40IDEuOS03LjktMTQuOS0yLjItMzMuMyAxMi42LTQxLjJ6Il19LEJmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqeGwiLGljb246WzQ0OCw1MTIsW10sImU2N2IiLCJNNDEyLjIgMzJMMzUuOCAzMkMxNiAzMiAwIDQ4IDAgNjcuOEwwIDQ0NC4yQzAgNDY0IDE2IDQ4MCAzNS44IDQ4MGwzNzYuNCAwYzE5LjggMCAzNS44LTE2IDM1LjgtMzUuOGwwLTM3Ni40QzQ0OCA0OCA0MzIgMzIgNDEyLjIgMzJ6TTM3OC42IDMzMy43YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6bTAtMTEzLjljMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHptMC0xMTMuOWMwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAweiJdfSxIZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWxpbmtlZGluIixpY29uOls0NDgsNTEyLFtdLCJlN2QwIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTUgMTcwLjJsNjYuNSAwIDAgMjEzLjgtNjYuNSAwIDAtMjEzLjh6bTcxLjctNjcuN2EzOC41IDM4LjUgMCAxIDEgLTc3IDAgMzguNSAzOC41IDAgMSAxIDc3IDB6TTMxNy45IDQxNmwwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjItNjYuNCAweiJdfSxxZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3NzIixpY29uOls0NDgsNTEyLFtdLCJlNmEyIiwiTTM3Ni4zIDMyTDAgMzIgMCA0MDguM2MwIDE5IDcuNiAzNy4yIDIxIDUwLjdzMzEuNyAyMSA1MC43IDIxbDMwNC42IDBjMTkgMCAzNy4yLTcuNiA1MC43LTIxczIxLTMxLjcgMjEtNTAuN2wwLTMwNC42YzAtMTktNy42LTM3LjItMjEtNTAuN3MtMzEuNy0yMS01MC43LTIxek0zMzIuNCA0MzEuNGMtNy43LTguNS0xMS43LTIwLjctMTItMzYuNmwzMS4zIDBjLjIgMTQuMSA1LjEgMjEuMSAxNC44IDIxLjFjNC45IDAgOC40LTEuNiAxMC41LTQuN2MyLTMuMSAzLTggMy0xNC44YzAtNS40LTEuMy05LjktNC0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMzUxLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNSAxMi41YzcuNSA4LjQgMTEuNSAyMC4zIDExLjggMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQgMjcuNC0xMi4zIDM1LjdjLTguMiA4LjMtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTAxIDBjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNC00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTMuOS0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMjUwLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNCAxMi41YzcuNiA4LjQgMTEuNSAyMC4zIDExLjkgMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQuMSAyNy40LTEyLjMgMzUuN3MtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTA1LjYgMS4xYy04LjQtNy43LTEyLjUtMTkuMi0xMi41LTM0LjVsMC03NS40YzAtMTUuMiA0LjQtMjYuNyAxMy4yLTM0LjZjOC45LTcuOCAyMC43LTExLjggMzUuMi0xMS44YzE0LjEgMCAyNS4yIDQgMzMuNCAxMmM4LjMgOCAxMi41IDIwIDEyLjUgMzUuOWwwIDYtMzMuMSAwIDAtNS44YzAtNi4xLTEuMy0xMC43LTQtMTMuNmMtMS4xLTEuNS0yLjYtMi43LTQuMy0zLjVzLTMuNS0xLjItNS40LTEuMWMtNS40IDAtOS4yIDEuOC0xMS40IDUuNmMtMi4zIDUuMi0zLjMgMTAuOC0zIDE2LjRsMCA2NS41YzAgMTMuNyA0LjggMjAuNiAxNC40IDIwLjhjNC41IDAgNy45LTEuNiAxMC4yLTQuOGMyLjUtNC4xIDMuNy04LjggMy41LTEzLjZsMC00LjkgMzMuMSAwIDAgNS4xYzAgMTAuNi0yLjEgMTkuNS02LjIgMjYuNmMtNCA2LjktOS45IDEyLjUtMTcuMSAxNmMtNy43IDMuNy0xNi4xIDUuNS0yNC42IDUuM2MtMTQuMiAwLTI1LjUtMy45LTMzLjgtMTEuNnoiXX0sVmZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imhhc2hub2RlIixpY29uOls1MTIsNTEyLFtdLCJlNDk5IiwiTTM1LjcgMTcxLjFjLTQ2LjkgNDYtNDYuOSAxMjIuOSAwIDE2OS44TDE3MS42IDQ3Ni44YzQ2IDQ2LjkgMTIyLjkgNDYuOSAxNjkuOCAwTDQ3Ny4zIDM0MC45YzQ2LjktNDYuOSA0Ni45LTEyMy44IDAtMTY5LjhMMzQxLjQgMzUuMmMtNDYuOS00Ni45LTEyMy44LTQ2LjktMTY5LjggMEwzNS43IDE3MS4xek0xOTYgMTk2LjVhODQuNSA4NC41IDAgMSAxIDEyMCAxMTkgODQuNSA4NC41IDAgMSAxIC0xMjAtMTE5eiJdfSxqZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVkZGl0LWFsaWVuIixpY29uOls1MTIsNTEyLFtdLCJmMjgxIiwiTTM3MyAxMzguNmMtMjUuMiAwLTQ2LjMtMTcuNS01MS45LTQxLTMwLjYgNC4zLTU0LjIgMzAuNy01NC4yIDYyLjRsMCAuMmM0Ny40IDEuOCA5MC42IDE1LjEgMTI0LjkgMzYuMyAxMi42LTkuNyAyOC40LTE1LjUgNDUuNS0xNS41IDQxLjMgMCA3NC43IDMzLjQgNzQuNyA3NC43IDAgMjkuOC0xNy40IDU1LjUtNDIuNyA2Ny41LTIuNCA4Ni44LTk3IDE1Ni42LTIxMy4yIDE1Ni42UzQ1LjUgNDEwLjEgNDMgMzIzLjRjLTI1LjQtMTEuOS00My0zNy43LTQzLTY3LjcgMC00MS4zIDMzLjQtNzQuNyA3NC43LTc0LjcgMTcuMiAwIDMzIDUuOCA0NS43IDE1LjYgMzQtMjEuMSA3Ni44LTM0LjQgMTIzLjctMzYuNGwwLS4zYzAtNDQuMyAzMy43LTgwLjkgNzYuOC04NS41IDQuOS0yNC4yIDI2LjMtNDIuNCA1Mi4xLTQyLjQgMjkuNCAwIDUzLjMgMjMuOSA1My4zIDUzLjNzLTIzLjkgNTMuMy01My4zIDUzLjN6TTE1Ny41IDI1NS4zYy0yMC45IDAtMzguOSAyMC44LTQwLjIgNDcuOXMxNy4xIDM4LjEgMzggMzguMSAzNi42LTkuOCAzNy44LTM2LjktMTQuNy00OS4xLTM1LjctNDkuMWwuMSAwek0zOTUgMzAzLjFjLTEuMi0yNy4xLTE5LjItNDcuOS00MC4yLTQ3LjlzLTM2LjkgMjItMzUuNyA0OS4xIDE2LjkgMzYuOSAzNy44IDM2LjkgMzkuMy0xMSAzOC0zOC4xbC4xIDB6bS02MC4xIDcwLjhjMS41LTMuNi0xLTcuNy00LjktOC4xLTIzLTIuMy00Ny45LTMuNi03My44LTMuNnMtNTAuOCAxLjMtNzMuOCAzLjZjLTMuOSAuNC02LjQgNC41LTQuOSA4LjEgMTIuOSAzMC44IDQzLjMgNTIuNCA3OC43IDUyLjRzNjUuOC0yMS42IDc4LjctNTIuNHoiXX0sSGY9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidGlrdG9rIixpY29uOls0NDgsNTEyLFtdLCJlMDdiIiwiTTQ0OC41IDIwOS45Yy00NCAuMS04Ny0xMy42LTEyMi44LTM5LjJsMCAxNzguN2MwIDMzLjEtMTAuMSA2NS40LTI5IDkyLjZzLTQ1LjYgNDgtNzYuNiA1OS42LTY0LjggMTMuNS05Ni45IDUuMy02MC45LTI1LjktODIuNy01MC44LTM1LjMtNTYtMzktODguOSAyLjktNjYuMSAxOC42LTk1LjIgNDAtNTIuNyA2OS42LTY3LjcgNjIuOS0yMC41IDk1LjctMTZsMCA4OS45Yy0xNS00LjctMzEuMS00LjYtNDYgLjRzLTI3LjkgMTQuNi0zNyAyNy4zLTE0IDI4LjEtMTMuOSA0My45IDUuMiAzMSAxNC41IDQzLjcgMjIuNCAyMi4xIDM3LjQgMjYuOSAzMS4xIDQuOCA0Ni0uMSAyOC0xNC40IDM3LjItMjcuMSAxNC4yLTI4LjEgMTQuMi00My44bDAtMzQ5LjQgODggMGMtLjEgNy40IC42IDE0LjkgMS45IDIyLjIgMy4xIDE2LjMgOS40IDMxLjkgMTguNyA0NS43czIxLjMgMjUuNiAzNS4yIDM0LjZjMTkuOSAxMy4xIDQzLjIgMjAuMSA2NyAyMC4xbDAgODcuNHoiXX0sVWZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndvcmRwcmVzcyIsaWNvbjpbNTEyLDUxMixbXSwiZjE5YSIsIk02MS43IDE2OS40bDEwMS41IDI3OGMtNzEtMzQuNC0xMTkuOS0xMDcuMi0xMTkuOS0xOTEuNCAwLTMwLjkgNi42LTYwLjEgMTguNC04Ni42em0zMzcuOSA3NS45YzAtMjYuMy05LjQtNDQuNS0xNy41LTU4LjctMTAuOC0xNy41LTIwLjktMzIuNC0yMC45LTQ5LjkgMC0xOS42IDE0LjgtMzcuOCAzNS43LTM3LjggLjkgMCAxLjggLjEgMi44IC4yLTM3LjktMzQuNy04OC4zLTU1LjktMTQzLjctNTUuOS03NC4zIDAtMTM5LjcgMzguMS0xNzcuOCA5NS45IDUgLjIgOS43IC4zIDEzLjcgLjMgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzcuNSAyMzAuNCA0Ni42LTEzOS42LTMzLjEtOTAuOGMtMTEuNS0uNy0yMi4zLTItMjIuMy0yLTExLjUtLjctMTAuMS0xOC4yIDEuMy0xNy41IDAgMCAzNS4xIDIuNyA1NiAyLjcgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzYuOSAyMjguNyAyMS4yLTcwLjljOS0yOS40IDE2LTUwLjUgMTYtNjguN3pNMjU5LjcgMjc0LjZMMTk1LjkgNDYwLjFjMTkuMSA1LjYgMzkuMiA4LjcgNjAuMSA4LjcgMjQuOCAwIDQ4LjUtNC4zIDcwLjYtMTIuMS0uNi0uOS0xLjEtMS45LTEuNS0yLjlMMjU5LjcgMjc0LjZ6bTE4My0xMjAuN2MuOSA2LjggMS40IDE0IDEuNCAyMS45IDAgMjEuNi00IDQ1LjgtMTYuMiA3Ni4ybC02NSAxODcuOWM2My4zLTM2LjkgMTA1LjgtMTA1LjQgMTA1LjgtMTgzLjkgMC0zNy05LjQtNzEuOC0yNi0xMDIuMXpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptNDg0LjYgMGEyMzYuNiAyMzYuNiAwIDEgMCAtNDczLjIgMCAyMzYuNiAyMzYuNiAwIDEgMCA0NzMuMiAweiJdfSxXZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaWRlYWwiLGljb246WzUxMiw1MTIsW10sImUwMTMiLCJNOTMuOCAxNjUuNWE0OS4xIDQ5LjEgMCAxIDAgMCA5OC4xIDQ5LjEgNDkuMSAwIDEgMCAwLTk4LjF6TTU0LjMgNDI1LjhsNzguOSAwIDAtMTQwLjUtNzguOSAwIDAgMTQwLjV6TTIwNS44IDIxNC4yYzAtMjAtMTAtMjIuNS0xOC43LTIyLjVsLTE0IDAgMCA0NS44IDE0IDBjOS43IDAgMTguNy0yLjggMTguNy0yMy4zem0yMDEuNyA0NmwwLTkxLjMgMjIuOCAwIDAgNjguNiAzMy43IDBDNDU0LjYgMTEzLjEgMzU2LjggODYuMiAyNjcuOCA4Ni4ybC05NC44IDAgMCA4Mi44IDE0IDBjMjUuNiAwIDQxLjUgMTcuNCA0MS41IDQ1LjMgMCAyOC44LTE1LjUgNDYtNDEuNSA0NmwtMTQgMCAwIDE2NS42IDk0LjggMGMxNDQuNiAwIDE5NC45LTY3LjIgMTk2LjctMTY1LjZsLTU3LjEgMHptLTEwOS44IDBsLTU2LjIgMCAwLTkxLjIgNTQuNCAwIDAgMjIuNy0zMS43IDAgMCAxMC42IDMwIDAgMCAyMi43LTMwIDAgMCAxMi41IDMzLjUgMCAwIDIyLjd6bTc0LjcgMGwtNS4yLTE3LjctMjkuNyAwLTUuMiAxNy43LTIzLjcgMCAyNy41LTkxLjMgMzIuMyAwIDI3LjUgOTEuMy0yMy43IDB6TTI2Ny44IDMyTC4xIDMyIC4xIDQ4MCAyNjcuOCA0ODBjMTYxLjggMCAyNTEtNzkuNyAyNTEtMjI0LjUgMC04My41LTMyLjYtMjIzLjUtMjUxLTIyMy41em0wIDQyNi45bC0yNDYuNiAwIDAtNDA1LjkgMjQ2LjYgMGMxNDIuMSAwIDIyOS45IDY0LjYgMjI5LjkgMjAyLjQgMCAxMzQuMS04MSAyMDMuNC0yMjkuOSAyMDMuNHptODMuOS0yNjQuOWwtNy41IDI1LjggMTYuNCAwLTcuNS0yNS44LTEuNCAweiJdfSxHZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGllZC1waXBlci1wcCIsaWNvbjpbNDQ4LDUxMixbXSwiZjFhNyIsIk0yMDUuMyAxNzQuNmMwIDIxLjEtMTQuMiAzOC4xLTMxLjcgMzguMS03LjEgMC0xMi44LTEuMi0xNy4yLTMuN2wwLTY4YzQuNC0yLjcgMTAuMS00LjIgMTcuMi00LjIgMTcuNSAwIDMxLjcgMTYuOSAzMS43IDM3Ljh6bTUyLjYgNjdjLTcuMSAwLTEyLjggMS41LTE3LjIgNC4ybDAgNjhjNC40IDIuNSAxMC4xIDMuNyAxNy4yIDMuNyAxNy40IDAgMzEuNy0xNi45IDMxLjctMzcuOCAwLTIxLjEtMTQuMy0zOC4xLTMxLjctMzguMXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg1IDI1NS4xYzQxIDAgNzQuMi0zNS42IDc0LjItNzkuNlMyMjYgOTUuOSAxODUgOTUuOWMtMTIgMC0yNC4xIDMuMi0zNC42IDguOGwtNDUuNyAwIDAgMjA2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4xIDE4LjEgNC44IDI4LjUgNC44em0xNTguNCAyNS4zYzAtNDQtMzMuMi03OS42LTczLjktNzkuNi0zLjIgMC02LjQgLjItOS42IC43LTMuNyAxMi41LTEwLjEgMjMuOC0xOS4yIDMzLjQtMTMuOCAxNS0zMi4yIDIzLjgtNTEuOCAyNC44bDAgMTU2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4yIDE4LjIgNC43IDI4LjcgNC43IDQwLjggMCA3NC0zNS42IDc0LTc5LjZ6Il19LFlmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1c3N1bm5haCIsaWNvbjpbNTEyLDUxMixbXSwiZjQwNyIsIk00OTYuOSAyNjguMWMwIDYzLjktMjUuNCAxMjUuMi03MC42IDE3MC4zUzMxOS45IDUwOSAyNTYgNTA5IDEzMC44IDQ4My41IDg1LjcgNDM4LjQgMTUuMSAzMzEuOSAxNS4xIDI2OGMwLTYzLjkgMjUuNC0xMjUuMiA3MC42LTE3MC40UzE5Mi4yIDI3LjEgMjU2LjEgMjcuMSAzODEuMyA1Mi40IDQyNi41IDk3LjYgNDk3IDIwNC4xIDQ5NyAyNjhsLS4xIC4xek0zOS41IDI2OGMtLjYgMjguOCA0LjUgNTcuNSAxNS4xIDg0LjNzMjYuNCA1MS4yIDQ2LjYgNzEuOCA0NC4yIDM3IDcwLjggNDguMSA1NS4xIDE2LjkgODMuOSAxNi45IDU3LjQtNS44IDgzLjktMTYuOSA1MC42LTI3LjUgNzAuOC00OC4xIDM2LTQ1IDQ2LjYtNzEuOCAxNS43LTU1LjUgMTUuMS04NC4zYy42LTI4LjgtNC41LTU3LjUtMTUuMS04NC4zcy0yNi40LTUxLjItNDYuNi03MS44LTQ0LjItMzctNzAuOC00OC4xLTU1LjEtMTYuOS04My45LTE2LjktNTcuNCA1LjgtODMuOSAxNi45LTUwLjYgMjcuNS03MC44IDQ4LjEtMzYgNDUtNDYuNiA3MS44LTE1LjcgNTUuNS0xNS4xIDg0LjN6bTM4NS45IDYzLjNjLTEyLjcgMC0yMS42LTEuOS0yNi43LTUuOS01LjUtNC4zLTguMi0xMi4zLTguMi0yMy44bDAtOTYuNWMwLTYuNS01LjItMjAuMi0xNS43LTQxLjIgNyAwIDE3LTkuMSAzMC0yNy4ybDAgMTQ3LjhjMCAxMSAyLjQgMTkuNCA3IDI1LjMgMy43IDQuNyAxMC4xIDguOSAxOSAxMi42IDEuMiAuNCAyLjYgLjkgNC4xIDEuNCAyLjkgLjkgNi4zIDIuMSAxMC4zIDMuNS0xLjggMi43LTguMyA0LTE5LjkgNGwuMSAwem0tMjE5IDBjLTEuMyAyLjQtMy42IDUuNS02LjggOS40bC0xOC41IDIyLjVjLTEtNi4xLTQtMTMtOS4zLTIwLjZzLTkuNy0xMS40LTEzLjQtMTEuNGwtODkuOCAwYzMuMy01LjMgNC45LTguOCA0LjktMTAuOHMtLjgtNS4zLTIuNC05LjdjLTEuNS00LjQtMi40LTguNS0yLjQtMTIuNCAwLTcuNCAyLjEtMTMuOSA2LjMtMTkuM2wyMC0yNS42LTcuMS0xNy43IDE2LjEtMTkuOCA2LjcgMTYuOCA4LTEwLjNjLTEuOCA2LjQtMi42IDEyLjMtMi42IDE3LjcgMCA0LjIgMi44IDEzLjMgOC4zIDI3LjNsMTYuMiA0MC43IDE3LjcgMGMyLjggLjQgNy43IDUgMTQuNiAxMy45IDEuOCAyLjQgNC4zIDUuOCA3LjcgMTAuMiAxLjQgMS45IDIuOSAzLjkgNC42IDYuMSAxLjMtMi4zIDItNC42IDItNy4xIDAtMi0xLjMtNi42LTQtMTMuNEwxNzggMzA0LjFjLTQtMTAuNi02LjEtMTcuNy02LjEtMjEuMyAwLTYuMyAxLjktMTIuMyA1LjgtMTcuOSAuNS0uNiAxLTEuMyAxLjUtMS45IDQuNC01LjYgOC44LTExLjEgMTMuMy0xNi41LTEuMSA0LjYtMS43IDguNy0xLjcgMTIgMCAzLjcgMS43IDkuOSA1LjEgMTguOGw3LjkgMjAuNGMxLjkgNC43IDMgOC4yIDMuNyAxMC4zbDI1LjkgMC0uOS0yLjZjLTEuNC0zLjktNC03LTcuNy05LjNsMTUuNi0yMC4xIDEyLjMgMzIgMTMuNCAwLTYuMS0xNS44Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjctMjAuMSAxNy4zIDQ1LjIgMTMuNCAwLTExLjQtMjkuNGMtMS41LTMuOS00LTctNy43LTkuM2wxNS42LTIwIDIyLjQgNTguNyAyNi4yIDBjMS41IDAgMy0xLjEgNC41LTMuMXMyLjItNC4xIDIuMi02LjNsMC05My41YzAtNi41LTQuNS0yMC4zLTEzLjctNDEuMiA1LjQgMCAxNC4xLTkuMSAyNi4yLTI3LjJsMCAxNjMuNWMwIDcuMiAuNiAxMiAxLjcgMTQuNiAxLjYgMy40IDUuMyA2LjIgMTEuMSA4LjItMy45IDUuNi04LjcgOC41LTE0LjUgOC41bC0xNTQuOCAwLS4xLS4yem0tOTgtNDRjLTIuNy02LjctNC0xMS43LTQtMTUtLjYgMS4yLTIuNCAzLjctNS40IDcuNi0xLjQgMS45LTIuMiAzLjctMi4yIDUuMyAwIDIuNiAuOCA1LjcgMi4yIDkuM2w1LjYgMTMuOWM1IDAgOSAwIDExLjktLjFsLTguMi0yMC45IC4xLS4xem0xMy41LTcyLjRjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHptLTI3LjYgMGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem04NyAyNy41Yy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6Il19LFpmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmb3J0LWF3ZXNvbWUtYWx0IixpY29uOls1MTIsNTEyLFtdLCJmM2EzIiwiTTIwOCAyMzcuNGwtMjIuMiAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA1MS43YzAgMi4xIDEuNiAzLjcgMy43IDMuN2wyMi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtNTEuN2MwLTIuMS0xLjYtMy43LTMuNy0zLjd6bTExOC4yIDBsLTIyLjIgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgNTEuN2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMjIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTUxLjdjLS4xLTIuMS0xLjctMy43LTMuNy0zLjd6bTEzMi0xMjUuMWMtMi4zLTMuMi00LjYtNi40LTcuMS05LjUtOS44LTEyLjUtMjAuOC0yNC0zMi44LTM0LjQtNC41LTMuOS05LjEtNy42LTEzLjktMTEuMi0xLjYtMS4yLTMuMi0yLjMtNC44LTMuNS0yNy42LTE5LjYtNTkuMy0zMy43LTkzLjYtNDAuNy0xNi4yLTMuMy0zMi45LTUtNTAtNXMtMzMuOSAxLjctNTAgNWMtMzQuMyA3LjEtNjYgMjEuMi05My4zIDQwLjgtMS42IDEuMS0zLjIgMi4zLTQuOCAzLjUtNC44IDMuNi05LjQgNy4zLTEzLjkgMTEuMi0zIDIuNi01LjkgNS4zLTguOCA4cy01LjcgNS41LTguNCA4LjRjLTUuNSA1LjctMTAuNyAxMS44LTE1LjYgMTgtMi40IDMuMS00LjggNi4zLTcuMSA5LjUtMjguOSA0MC42LTQ1LjggOTAuMS00NS44IDE0My42IDAgMiAuMSA0IC4xIDYgLjEgLjcgLjEgMS4zIC4xIDIgLjEgMS4zIC4xIDIuNyAuMiA0IDAgLjggLjEgMS41IC4xIDIuMyAwIDEuMyAuMSAyLjUgLjIgMy43IC4xIC44IC4xIDEuNiAuMiAyLjQgLjEgMS4xIC4yIDIuMyAuMyAzLjUgMCAuOCAuMSAxLjYgLjIgMi40IC4xIDEuMiAuMyAyLjQgLjQgMy42IC4xIC44IC4yIDEuNSAuMyAyLjMgLjEgMS4zIC4zIDIuNiAuNSAzLjkgLjEgLjYgLjIgMS4zIC4zIDEuOWwuOSA1LjdjLjEgLjYgLjIgMS4xIC4zIDEuNyAuMyAxLjMgLjUgMi43IC44IDQgLjIgLjggLjMgMS42IC41IDIuNCAuMiAxIC41IDIuMSAuNyAzLjIgLjIgLjkgLjQgMS43IC42IDIuNiAuMiAxIC40IDIgLjcgMyAuMiAuOSAuNSAxLjggLjcgMi43IC4zIDEgLjUgMS45IC44IDIuOSAuMyAuOSAuNSAxLjggLjggMi43IC4yIC45IC41IDEuOSAuOCAyLjhzLjUgMS44IC44IDIuN2MuMyAxIC42IDEuOSAuOSAyLjggLjYgMS42IDEuMSAzLjMgMS43IDQuOSAuNCAxIC43IDEuOSAxIDIuOCAuMyAxIC43IDIgMS4xIDMgLjMgLjggLjYgMS41IC45IDIuM2wxLjIgM2MuMyAuNyAuNiAxLjUgLjkgMi4yIC40IDEgLjkgMiAxLjMgM2wuOSAyLjFjLjUgMSAuOSAyIDEuNCAzIC4zIC43IC42IDEuMyAuOSAyIC41IDEgMSAyLjEgMS41IDMuMSAuMiAuNiAuNSAxLjEgLjggMS43IC42IDEuMSAxLjEgMi4yIDEuNyAzLjMgLjEgLjIgLjIgLjMgLjMgLjUgMi4yIDQuMSA0LjQgOC4yIDYuOCAxMi4yIC4yIC40IC41IC44IC43IDEuMiAuNyAxLjEgMS4zIDIuMiAyIDMuMyAuMyAuNSAuNiAuOSAuOSAxLjQgLjYgMS4xIDEuMyAyLjEgMiAzLjIgLjMgLjUgLjYgLjkgLjkgMS40IC43IDEuMSAxLjQgMi4xIDIuMSAzLjIgLjIgLjQgLjUgLjggLjggMS4yIC43IDEuMSAxLjUgMi4yIDIuMyAzLjMgLjIgLjIgLjMgLjUgLjUgLjcgMzcuNSA1MS43IDk0LjQgODguNSAxNjAgOTkuNCAuOSAuMSAxLjcgLjMgMi42IC40IDEgLjIgMi4xIC40IDMuMSAuNXMxLjkgLjMgMi44IC40YzEgLjIgMiAuMyAzIC40IC45IC4xIDEuOSAuMiAyLjkgLjNzMS45IC4yIDIuOSAuMyAyLjEgLjIgMy4xIC4zYy45IC4xIDEuOCAuMSAyLjcgLjIgMS4xIC4xIDIuMyAuMSAzLjQgLjIgLjggMCAxLjcgLjEgMi41IC4xIDEuMyAwIDIuNiAuMSAzLjkgLjEgLjcgLjEgMS40IC4xIDIuMSAuMSAyIC4xIDQgLjEgNiAuMXM0LS4xIDYtLjFjLjcgMCAxLjQtLjEgMi4xLS4xIDEuMyAwIDIuNiAwIDMuOS0uMSAuOCAwIDEuNy0uMSAyLjUtLjEgMS4xLS4xIDIuMy0uMSAzLjQtLjIgLjkgMCAxLjgtLjEgMi43LS4yIDEtLjEgMi4xLS4yIDMuMS0uM3MxLjktLjIgMi45LS4zYy45LS4xIDEuOS0uMiAyLjktLjNzMi0uMyAzLS40IDEuOS0uMyAyLjgtLjRjMS0uMiAyLjEtLjMgMy4xLS41IC45LS4xIDEuNy0uMyAyLjYtLjQgNjUuNi0xMSAxMjIuNS00Ny43IDE2MC4xLTEwMi40IC4yLS4yIC4zLS41IC41LS43IC44LTEuMSAxLjUtMi4yIDIuMy0zLjMgLjItLjQgLjUtLjggLjgtMS4yIC43LTEuMSAxLjQtMi4xIDIuMS0zLjIgLjMtLjUgLjYtLjkgLjktMS40IC42LTEuMSAxLjMtMi4xIDItMy4yIC4zLS41IC42LS45IC45LTEuNCAuNy0xLjEgMS4zLTIuMiAyLTMuMyAuMi0uNCAuNS0uOCAuNy0xLjIgMi40LTQgNC42LTguMSA2LjgtMTIuMiAuMS0uMiAuMi0uMyAuMy0uNSAuNi0xLjEgMS4xLTIuMiAxLjctMy4zIC4yLS42IC41LTEuMSAuOC0xLjcgLjUtMSAxLTIuMSAxLjUtMy4xIC4zLS43IC42LTEuMyAuOS0yIC41LTEgMS0yIDEuNC0zbC45LTIuMWMuNS0xIC45LTIgMS4zLTMgLjMtLjcgLjYtMS41IC45LTIuMmwxLjItM2MuMy0uOCAuNi0xLjUgLjktMi4zIC40LTEgLjctMiAxLjEtM3MuNy0xLjkgMS0yLjhjLjYtMS42IDEuMi0zLjMgMS43LTQuOSAuMy0xIC42LTEuOSAuOS0yLjhzLjUtMS44IC44LTIuN2MuMi0uOSAuNS0xLjkgLjgtMi44cy42LTEuOCAuOC0yLjdjLjMtMSAuNS0xLjkgLjgtMi45IC4yLS45IC41LTEuOCAuNy0yLjcgLjItMSAuNS0yIC43LTMgLjItLjkgLjQtMS43IC42LTIuNiAuMi0xIC41LTIuMSAuNy0zLjIgLjItLjggLjMtMS42IC41LTIuNCAuMy0xLjMgLjYtMi43IC44LTQgLjEtLjYgLjItMS4xIC4zLTEuN2wuOS01LjdjLjEtLjYgLjItMS4zIC4zLTEuOSAuMS0xLjMgLjMtMi42IC41LTMuOSAuMS0uOCAuMi0xLjUgLjMtMi4zIC4xLTEuMiAuMy0yLjQgLjQtMy42IDAtLjggLjEtMS42IC4yLTIuNCAuMS0xLjEgLjItMi4zIC4zLTMuNSAuMS0uOCAuMS0xLjYgLjItMi40IC4xIDEuNyAuMSAuNSAuMi0uNyAwLS44IC4xLTEuNSAuMS0yLjMgLjEtMS4zIC4yLTIuNyAuMi00IC4xLS43IC4xLTEuMyAuMS0yIC4xLTIgLjEtNCAuMS02IDAtNTMuNS0xNi45LTEwMy00NS44LTE0My43ek00NDggMzcxLjVjLTkuNCAxNS41LTIwLjYgMjkuOS0zMy42IDQyLjktMjAuNiAyMC42LTQ0LjUgMzYuNy03MS4yIDQ4LTEzLjkgNS44LTI4LjIgMTAuMy00Mi45IDEzLjJsMC03NS44YzAtNTguNi04OC42LTU4LjYtODguNiAwbDAgNzUuOGMtMTQuNy0yLjktMjktNy4zLTQyLjktMTMuMi0yNi43LTExLjMtNTAuNi0yNy40LTcxLjItNDgtMTMtMTMtMjQuMi0yNy40LTMzLjYtNDIuOWwwLTcxLjNjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjEgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS44IDI5LjYgMCAwLTE0NGMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMiAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTQuOCA2LjUtMy43IDkuNS0zLjdsMC05MC4yYy00LjQtMi03LjQtNi43LTcuNC0xMS41IDAtMTYuOCAyNS40LTE2LjggMjUuNCAwIDAgNC44LTMgOS40LTcuNCAxMS41bDAgMy45YzYuMy0xLjQgMTIuNy0yLjMgMTkuMi0yLjMgOS40IDAgMTguNCAzLjUgMjYuMyAzLjUgNy4yIDAgMTUuMi0zLjUgMTkuNC0zLjUgMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgNDguNGMwIDUuNi0xOC43IDYuNS0yMi40IDYuNS04LjYgMC0xNi42LTMuNS0yNS40LTMuNS03IDAtMTQuMSAxLjItMjAuOCAyLjhsMCAzMC43YzMgMCA5LjUtMS4xIDkuNSAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjEgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAxNDQgMjkuNSAwIDAtMjUuOGMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMiAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDcxLjN6Il19LFhmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJidXJvbW9iZWxleHBlcnRlIixpY29uOls0NDgsNTEyLFtdLCJmMzdmIiwiTTAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0xNjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0zMjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTQ0MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0wIDE5MmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMzUybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAweiJdfSxLZmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYmlsaWJpbGkiLGljb246WzUxMiw1MTIsW10sImUzZDkiLCJNNDg4LjYgMTA0LjFjMTYuNyAxOC4xIDI0LjQgMzkuNyAyMy4zIDY1LjdsMCAyMDIuNGMtLjQgMjYuNC05LjIgNDguMS0yNi41IDY1LjEtMTcuMiAxNy0zOS4xIDI1LjktNjUuNSAyNi43TDkyIDQ2NGMtMjYuNC0uOC00OC4yLTkuOC02NS4zLTI3LjItMTcuMS0xNy40LTI2LTQwLjMtMjYuNy02OC42TDAgMTY5LjhjLjgtMjYgOS43LTQ3LjYgMjYuNy02NS43IDE3LjEtMTYuMyAzOC44LTI1LjMgNjUuMy0yNi4xbDI5LjQgMC0yNS40LTI1LjhjLTUuNy01LjctOC42LTEzLTguNi0yMS44czIuOS0xNi4xIDguNi0yMS44IDEzLTguNiAyMS45LTguNiAxNi4xIDIuOSAyMS45IDguNmw3My4zIDY5LjQgODggMCA3NC41LTY5LjRDMzgxLjcgMi45IDM4OS4yIDAgMzk4IDBzMTYuMSAyLjkgMjEuOSA4LjZjNS43IDUuNyA4LjYgMTMgOC42IDIxLjhzLTIuOSAxNi4xLTguNiAyMS44TDM5NC42IDc4IDQyMy45IDc4YzI2LjQgLjggNDggOS44IDY0LjcgMjYuMXptLTM4LjggNjkuN2MtLjQtOS42LTMuNy0xNy40LTEwLjctMjMuNS01LjItNi4xLTE0LTkuNC0yMi43LTkuOGwtMzIwLjQgMGMtOS42IC40LTE3LjQgMy43LTIzLjYgOS44LTYuMSA2LjEtOS40IDEzLjktOS44IDIzLjVsMCAxOTQuNGMwIDkuMiAzLjMgMTcgOS44IDIzLjVzMTQuNCA5LjggMjMuNiA5LjhsMzIwLjQgMGM5LjIgMCAxNy0zLjMgMjMuMy05LjhzOS43LTE0LjMgMTAuMS0yMy41bDAtMTk0LjR6TTE4NS41IDIxNi41YzYuMyA2LjMgOS43IDE0LjEgMTAuMSAyMy4ybDAgMzMuM2MtLjQgOS4yLTMuNyAxNi45LTkuOCAyMy4yLTYuMiA2LjMtMTQgOS41LTIzLjYgOS41cy0xNy41LTMuMi0yMy42LTkuNS05LjQtMTQtOS44LTIzLjJsMC0zMy4zYy40LTkuMSAzLjgtMTYuOSAxMC4xLTIzLjJzMTMuMi05LjYgMjMuMy0xMGM5LjIgLjQgMTcgMy43IDIzLjMgMTB6bTE5MS41IDBjNi4zIDYuMyA5LjcgMTQuMSAxMC4xIDIzLjJsMCAzMy4zYy0uNCA5LjItMy43IDE2LjktOS44IDIzLjJzLTE0IDkuNS0yMy42IDkuNS0xNy40LTMuMi0yMy42LTkuNWMtNy02LjMtOS40LTE0LTkuNy0yMy4ybDAtMzMuM2MuMy05LjEgMy43LTE2LjkgMTAtMjMuMnMxNC4xLTkuNiAyMy4zLTEwYzkuMiAuNCAxNyAzLjcgMjMuMyAxMHoiXX0sUWZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im5lb3MiLGljb246WzQ0OCw1MTIsW10sImY2MTIiLCJNMzgzLjggNTEybC05NS4xIDAtMTA4LjItMTU0LjUgMCA5MS4xLTg2LjQgNjMuNC05Ny43IDAgMC00ODIuMiA0MC41LTI5LjggMTA4IDAgMTIzLjcgMTc2LjEgMC0xMTIuNyA4Ni40LTYzLjQgOTcuNyAwIDAgNDYxLjUtNjguOSA1MC41ek03LjIgMzUuM2wwIDQ2MC43IDcyLTUyLjkgMC0yNDkuMSAyMTUuNSAzMDcuNiA4NC44IDAgNTIuNC0zOC4yLTc4LjMgMC0zMTYuMS00NTAuNS0zMC4yIDIyLjN6TTg5LjcgNTAxLjlsODAtNTguOCAwLTEwMS03OS44LTExNC40IDAgMjIwLjktNzIuNiA1My4zIDcyLjMgMCAwIDB6TTQ5IDEwLjhsMzEwLjYgNDQyLjYgODIuNCAwIDAtNDQyLjYtNzkuOCAwIDAgMzE3LjYtMjIyLjktMzE3LjYtOTAuMyAwek0yNzkuNCAxOTEuNmw3MiAxMDIuOCAwLTI3OC41LTcyIDUzIDAgMTIyLjd6Il19LEpmZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkZXYiLGljb246WzQ0OCw1MTIsW10sImY2Y2MiLCJNMTIwLjEgMjA4LjNjLTMuOS0yLjktNy44LTQuMy0xMS42LTQuM2wtMTcuNCAwIDAgMTA0LjUgMTcuNCAwYzMuOSAwIDcuOC0xLjQgMTEuNi00LjNzNS44LTcuMyA1LjgtMTMuMWwwLTY5LjdjMC01LjgtMi0xMC4yLTUuOC0xMy4xek00MDQuMSAzMkw0My45IDMyQzE5LjcgMzIgLjEgNTEuNiAwIDc1LjhMMCA0MzYuMkMuMSA0NjAuNCAxOS43IDQ4MCA0My45IDQ4MGwzNjAuMiAwYzI0LjIgMCA0My44LTE5LjYgNDMuOS00My44bDAtMzYwLjRDNDQ3LjkgNTEuNiA0MjguMyAzMiA0MDQuMSAzMnpNMTU0LjIgMjkxLjJjMCAxOC44LTExLjYgNDcuMy00OC40IDQ3LjNsLTQ2LjQgMCAwLTE2NS41IDQ3LjQgMGMzNS40IDAgNDcuNCAyOC41IDQ3LjQgNDcuM2wwIDcwLjl6bTEwMC43LTg4LjdsLTUzLjMgMCAwIDM4LjQgMzIuNiAwIDAgMjkuNi0zMi42IDAgMCAzOC40IDUzLjMgMCAwIDI5LjYtNjIuMiAwYy0xMS4yIC4zLTIwLjQtOC41LTIwLjctMTkuN2wwLTEyNS4xYy0uMy0xMS4xIDguNi0yMC40IDE5LjctMjAuN2w2My4yIDAgMCAyOS41ek0zNTguNSAzMTcuOGMtMTMuMiAzMC43LTM2LjggMjQuNi00Ny40IDBsLTM4LjUtMTQ0LjggMzIuNiAwIDI5LjcgMTEzLjcgMjkuNi0xMTMuNyAzMi42IDAtMzguNSAxNDQuOHoiXX0sZW1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImhvdGphciIsaWNvbjpbNTEyLDUxMixbXSwiZjNiMSIsIk0zNjEuOCAwYzAgMTMxLjYtODAuNyAxNzYuOC0xNDAuMiAyMDkuNC0uNiAuMy0xLjEgLjYtMS42IC45LTUzLjggMzAuMi04OC43IDQ5LjgtODkuNiAxMjJsLTk4LjEgMGMwLTEzMS41IDgwLjctMTc2LjcgMTQwLjItMjA5LjMgNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTkgMHpNMzAxLjMgMzAyLjZjNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTggMGMwIDEzMS42LTgwLjcgMTc2LjctMTQwLjIgMjA5LjQtNTQuOCAyOS44LTkwLjMgNTAtOTAuMyAxMjNsLTk4IDBjMC0xMzEuNiA4MC43LTE3Ni44IDE0MC4yLTIwOS40eiJdfSx0bWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZG9jaHViIixpY29uOls0NDgsNTEyLFtdLCJmMzk0IiwiTTQxMy45IDE2MEwyNzIgMTYwIDI3MiAxOS42IDQxMy45IDE2MHpNMzIwIDE5MmwwIDEzMGMwIDY2LjgtMzYuNSAxMDAuMS0xMTMuMyAxMDAuMWwtOTQuNyAwIDAtMzM3LjMgOTQuNyAwYzEyIDAgMjMuMSAuOCAzMy4xIDIuNWwwLTg0QzIyOC45IDEuMSAyMTcuNCAwIDIwNS4yIDBMMTYgMCAxNiA1MTIgMjA1LjIgNTEyQzM0NS43IDUxMiA0MTYgNDQ3LjQgNDE2IDMxOC4xbDAtMTI2LjEtOTYgMHoiXX0sYW1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZpbWVvIixpY29uOls0NDgsNTEyLFtdLCJmNDBhIiwiTTQwMy4yIDMyTDQ0LjggMzJDMjAuMSAzMiAwIDUyLjEgMCA3Ni44TDAgNDM1LjJDMCA0NTkuOSAyMC4xIDQ4MCA0NC44IDQ4MGwzNTguNCAwYzI0LjcgMCA0NC44LTIwLjEgNDQuOC00NC44bDAtMzU4LjRDNDQ4IDUyLjEgNDI3LjkgMzIgNDAzLjIgMzJ6TTM3NyAxODAuOGMtMS40IDMxLjUtMjMuNCA3NC43LTY2IDEyOS40LTQ0IDU3LjItODEuMyA4NS44LTExMS43IDg1LjgtMTguOSAwLTM0LjgtMTcuNC00Ny45LTUyLjMtMjUuNS05My4zLTM2LjQtMTQ4LTU3LjQtMTQ4LTIuNCAwLTEwLjkgNS4xLTI1LjQgMTUuMkw1My40IDE5MS4zYzM3LjMtMzIuOCA3Mi45LTY5LjIgOTUuMi03MS4yIDI1LjItMi40IDQwLjcgMTQuOCA0Ni41IDUxLjcgMjAuNyAxMzEuMiAyOS45IDE1MSA2Ny42IDkxLjYgMTMuNS0yMS40IDIwLjgtMzcuNyAyMS44LTQ4LjkgMy41LTMzLjItMjUuOS0zMC45LTQ1LjgtMjIuNCAxNS45LTUyLjEgNDYuMy03Ny40IDkxLjItNzYgMzMuMyAuOSA0OSAyMi41IDQ3LjEgNjQuN3oiXX0saW1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1heGNkbiIsaWNvbjpbNTEyLDUxMixbXSwiZjEzNiIsIk00NjEuMSA0NDIuN2wtOTcuNCAwIDUxLjktMjQyLjdjMi4zLTEwLjIgLjktMTkuNS00LjQtMjUuNy01LTYuMS0xMy43LTkuNi0yNC4yLTkuNmwtNDkuMyAwLTU5LjUgMjc4LTk3LjQgMCA1OS41LTI3OC04My40IDAtNTkuNSAyNzgtOTcuNCAwIDU5LjUtMjc4LTQ0LjYtOTUuNCAzNzIuMSAwYzM5LjQgMCA3NS4zIDE2LjMgOTguMyA0NC45IDIzLjMgMjguNiAzMS44IDY3LjQgMjMuNiAxMDUuOUw0NjEuMSA0NDIuN3oiXX0sREU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWZvbnQtYXdlc29tZS1zdHJva2UiLGljb246WzQ0OCw1MTIsWyJmb250LWF3ZXNvbWUtYWx0Il0sImYzNWMiLCJNNjQgNjRDNDYuMyA2NCAzMiA3OC4zIDMyIDk2bDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDY0ek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTU0IDU4YzAgOS4zLTQuOCAxNy40LTEyLjEgMjJsMTg4LjkgMGM3LjMgMCAxMy4yIDUuOSAxMy4yIDEzLjIgMCAxLjgtLjQgMy43LTEuMSA1LjRMMzEyIDI2NCAzNDIuOSAzMzMuNGMuOCAxLjcgMS4xIDMuNSAxLjEgNS40IDAgNy4zLTUuOSAxMy4yLTEzLjIgMTMuMmwtMTg2LjggMCAwIDMyLTMyIDAgMC0yMDkuNWMtNi4xLTQuOC0xMC0xMi4yLTEwLTIwLjUgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNnoiXX0scm1lPURFLHNtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcGVha2FwIixpY29uOls0NDgsNTEyLFtdLCJmM2YzIiwiTTY0LjQgMzkxLjhDLTE1IDMwMy42LTcuNiAxNjcuNCA4MS4xIDg3LjZzMjI0LjgtNzMgMzA0LjIgMTUuMiA3MiAyMjQuNC0xNi42IDMwNC4xYy0xOC43IDE2LjkgNjQgNDMuMSA0MiA1Mi4zLTgyLjEgMzQuMi0yNTMuOSAzNS0zNDYuMi02Ny41bDAgMHpNMjc3LjcgMTgwLjJsMzguNS00MC45Yy05LjYtOC45LTMyLTI2LjgtNzYuMi0yNy42LTUyLjMtLjktOTUuOSAyOC4zLTk2LjggODAtLjIgMTEuMyAuMyAzNi43IDI5LjQgNTQuOCAzNC41IDIxLjQgODYuNSAyMS41IDg2IDUyLjMtLjQgMjEuMy0yNi40IDI1LjgtMzguNiAyNS42LTMgMC0zMC4yLS41LTQ3LjYtMjQuNmwtNDAgNDIuNmMyOC4yIDI3IDU5IDMyLjYgODMuNSAzMyAxMC4yIC4yIDk2LjQgLjMgOTcuOC04MSAuMy0xNS44LTIuMS0zOS43LTI4LjktNTYuNi0zNC40LTIxLjYtODUtMTkuNC04NC40LTQ5LjcgLjQtMjMuMyAzMS0yNS40IDM3LjUtMjUuMyAuNCAwIDI2LjYgLjMgMzkuNiAxNy40bDAgMHoiXX0sbm1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZhbnRhc3ktZmxpZ2h0LWdhbWVzIixpY29uOls1MTIsNTEyLFtdLCJmNmRjIiwiTTI1NiAzMi45TDMyLjkgMjU2IDI1NiA0NzkuMSA0NzkuMSAyNTYgMjU2IDMyLjl6TTg4LjMgMjU1LjhjMi0yIDExLjktMTIuMyA5Ni41LTk3LjUgNDEuNC00MS44IDg2LjItNDMuOCAxMTkuOC0xOC43IDI0LjYgMTguNCA2Mi4xIDU4LjkgNjIuMSA1OSAuNyAuNyAxLjEgMi45IC42IDMuNC0xMS4zIDExLjgtMjIuNyAyMy41LTMzLjUgMzQuNy0zNC4yLTMyLjMtNDAuNS0zOC4yLTQ4LjUtNDQtMTcuOC0xMi43LTQxLjQtMTAuMS01NyA1LjEtMi4yIDIuMS0xLjggMy40IC4xIDUuNCAyLjkgMi45IDI4LjEgMjguMyAzNS4xIDM1LjgtMTEuOSAxMS42LTIzLjcgMjMtMzUuNyAzNC43LTEyLTEyLjUtMjQuNS0yNS41LTM2LjUtMzguMS0yMS40IDIxLjEtNDEuNyA0MS4xLTYxLjggNjFMODguMyAyNTUuOHpNMzIzLjIgMzU3LjRjLTM1LjUgMzUuNC03OC4xIDM4LjEtMTA3IDIwLjUtMjIuMS0xMy41LTM5LjQtMzIuMS03Mi45LTY2LjggMTItMTIuNCAyMy44LTI0LjQgMzUuNC0zNi4zIDMzIDMxLjkgMzcuMSAzNiA0NC43IDQyLjEgMTguNSAxNC43IDQyLjUgMTMuNyA1OS4zLTEuOCAzLjctMy40IDMuNy0zLjYgLjEtNy4yLTEwLjYtMTAuNy0yMS4yLTIxLjQtMzEuOC0zMi4yLTEuMy0xLjMtMy0yLjUtLjgtNC43IDEwLjgtMTAuNyAyMS41LTIxLjUgMzIuMi0zMi4zIC4zLS4zIC42LS40IDEuOS0xLjEgMTIuNCAxMi45IDI0LjkgMjUuOSAzNy4yIDM4LjggMjEtMjAuNyA0MS4yLTQwLjcgNjEuMy02MC40IDEzLjcgMTMuNCAyNy4xIDI2LjYgNDAuOSA0MC0yMC4yIDIwLjktODEuNyA4Mi43LTEwMC41IDEwMS41ek0yNTYgMEwwIDI1NiAyNTYgNTEyIDUxMiAyNTYgMjU2IDB6TTE2IDI1NkwyNTYgMTYgNDk2IDI1NiAyNTYgNDk2IDE2IDI1NnoiXX0sb21lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxpbnV4IixpY29uOls0NDgsNTEyLFtdLCJmMTdjIiwiTTIyMC45IDEyMy4zYzEgLjUgMS44IDEuNyAzIDEuNyAxLjEgMCAyLjgtLjQgMi45LTEuNSAuMi0xLjQtMS45LTIuMy0zLjItMi45LTEuNy0uNy0zLjktMS01LjUtLjEtLjQgLjItLjggLjctLjYgMS4xIC4zIDEuMyAyLjMgMS4xIDMuNCAxLjd6TTE5OSAxMjVjMS4yIDAgMi0xLjIgMy0xLjcgMS4xLS42IDMuMS0uNCAzLjUtMS42IC4yLS40LS4yLS45LS42LTEuMS0xLjYtLjktMy44LS42LTUuNSAuMS0xLjMgLjYtMy40IDEuNS0zLjIgMi45IC4xIDEgMS44IDEuNSAyLjggMS40ek00MjAgNDAzLjhjLTMuNi00LTUuMy0xMS42LTcuMi0xOS43LTEuOC04LjEtMy45LTE2LjgtMTAuNS0yMi40LTEuMy0xLjEtMi42LTIuMS00LTIuOS0xLjMtLjgtMi43LTEuNS00LjEtMiA5LjItMjcuMyA1LjYtNTQuNS0zLjctNzkuMS0xMS40LTMwLjEtMzEuMy01Ni40LTQ2LjUtNzQuNC0xNy4xLTIxLjUtMzMuNy00MS45LTMzLjQtNzIgLjUtNDUuOSA1LjEtMTMxLjItNzUuOC0xMzEuMy0xMDIuNC0uMi03Ni44IDEwMy40LTc3LjkgMTM1LjItMS43IDIzLjQtNi40IDQxLjgtMjIuNSA2NC43LTE4LjkgMjIuNS00NS41IDU4LjgtNTguMSA5Ni43LTYgMTcuOS04LjggMzYuMS02LjIgNTMuMy02LjUgNS44LTExLjQgMTQuNy0xNi42IDIwLjItNC4yIDQuMy0xMC4zIDUuOS0xNyA4LjNzLTE0IDYtMTguNSAxNC41Yy0yLjEgMy45LTIuOCA4LjEtMi44IDEyLjQgMCAzLjkgLjYgNy45IDEuMiAxMS44IDEuMiA4LjEgMi41IDE1LjcgLjggMjAuOC01LjIgMTQuNC01LjkgMjQuNC0yLjIgMzEuNyAzLjggNy4zIDExLjQgMTAuNSAyMC4xIDEyLjMgMTcuMyAzLjYgNDAuOCAyLjcgNTkuMyAxMi41IDE5LjggMTAuNCAzOS45IDE0LjEgNTUuOSAxMC40IDExLjYtMi42IDIxLjEtOS42IDI1LjktMjAuMiAxMi41LS4xIDI2LjMtNS40IDQ4LjMtNi42IDE0LjktMS4yIDMzLjYgNS4zIDU1LjEgNC4xIC42IDIuMyAxLjQgNC42IDIuNSA2LjdsMCAuMWM4LjMgMTYuNyAyMy44IDI0LjMgNDAuMyAyMyAxNi42LTEuMyAzNC4xLTExIDQ4LjMtMjcuOSAxMy42LTE2LjQgMzYtMjMuMiA1MC45LTMyLjIgNy40LTQuNSAxMy40LTEwLjEgMTMuOS0xOC4zIC40LTguMi00LjQtMTcuMy0xNS41LTI5Ljd6TTIyMy44IDg3LjNjOS44LTIyLjIgMzQuMi0yMS44IDQ0LS40IDYuNSAxNC4yIDMuNiAzMC45LTQuMyA0MC40LTEuNi0uOC01LjktMi42LTEyLjYtNC45IDEuMS0xLjIgMy4xLTIuNyAzLjktNC42IDQuOC0xMS44LS4yLTI3LTkuMS0yNy4zLTcuMy0uNS0xMy45IDEwLjgtMTEuOCAyMy00LjEtMi05LjQtMy41LTEzLTQuNC0xLTYuOS0uMy0xNC42IDIuOS0yMS44ek0xODMuMSA3NS44YzEwLjEgMCAyMC44IDE0LjIgMTkuMSAzMy41LTMuNSAxLTcuMSAyLjUtMTAuMiA0LjYgMS4yLTguOS0zLjMtMjAuMS05LjYtMTkuNi04LjQgLjctOS44IDIxLjItMS44IDI4LjEgMSAuOCAxLjktLjItNS45IDUuNS0xNS42LTE0LjYtMTAuNS01Mi4xIDguNC01Mi4xem0tMTMuNiA2MC43YzYuMi00LjYgMTMuNi0xMCAxNC4xLTEwLjUgNC43LTQuNCAxMy41LTE0LjIgMjcuOS0xNC4yIDcuMSAwIDE1LjYgMi4zIDI1LjkgOC45IDYuMyA0LjEgMTEuMyA0LjQgMjIuNiA5LjMgOC40IDMuNSAxMy43IDkuNyAxMC41IDE4LjItMi42IDcuMS0xMSAxNC40LTIyLjcgMTguMS0xMS4xIDMuNi0xOS44IDE2LTM4LjIgMTQuOS0zLjktLjItNy0xLTkuNi0yLjEtOC0zLjUtMTIuMi0xMC40LTIwLTE1LTguNi00LjgtMTMuMi0xMC40LTE0LjctMTUuMy0xLjQtNC45IDAtOSA0LjItMTIuM3ptMy4zIDMzNGMtMi43IDM1LjEtNDMuOSAzNC40LTc1LjMgMTgtMjkuOS0xNS44LTY4LjYtNi41LTc2LjUtMjEuOS0yLjQtNC43LTIuNC0xMi43IDIuNi0yNi40bDAtLjJjMi40LTcuNiAuNi0xNi0uNi0yMy45LTEuMi03LjgtMS44LTE1IC45LTIwIDMuNS02LjcgOC41LTkuMSAxNC44LTExLjMgMTAuMy0zLjcgMTEuOC0zLjQgMTkuNi05LjkgNS41LTUuNyA5LjUtMTIuOSAxNC4zLTE4IDUuMS01LjUgMTAtOC4xIDE3LjctNi45IDguMSAxLjIgMTUuMSA2LjggMjEuOSAxNmwxOS42IDM1LjZjOS41IDE5LjkgNDMuMSA0OC40IDQxIDY4Ljl6bS0xLjQtMjUuOWMtNC4xLTYuNi05LjYtMTMuNi0xNC40LTE5LjYgNy4xIDAgMTQuMi0yLjIgMTYuNy04LjkgMi4zLTYuMiAwLTE0LjktNy40LTI0LjktMTMuNS0xOC4yLTM4LjMtMzIuNS0zOC4zLTMyLjUtMTMuNS04LjQtMjEuMS0xOC43LTI0LjYtMjkuOXMtMy0yMy4zLS4zLTM1LjJjNS4yLTIyLjkgMTguNi00NS4yIDI3LjItNTkuMiAyLjMtMS43IC44IDMuMi04LjcgMjAuOC04LjUgMTYuMS0yNC40IDUzLjMtMi42IDgyLjQgLjYtMjAuNyA1LjUtNDEuOCAxMy44LTYxLjUgMTItMjcuNCAzNy4zLTc0LjkgMzkuMy0xMTIuNyAxLjEgLjggNC42IDMuMiA2LjIgNC4xIDQuNiAyLjcgOC4xIDYuNyAxMi42IDEwLjMgMTIuNCAxMCAyOC41IDkuMiA0Mi40IDEuMiA2LjItMy41IDExLjItNy41IDE1LjktOSA5LjktMy4xIDE3LjgtOC42IDIyLjMtMTUgNy43IDMwLjQgMjUuNyA3NC4zIDM3LjIgOTUuNyA2LjEgMTEuNCAxOC4zIDM1LjUgMjMuNiA2NC42IDMuMy0uMSA3IC40IDEwLjkgMS40IDEzLjgtMzUuNy0xMS43LTc0LjItMjMuMy04NC45LTQuNy00LjYtNC45LTYuNi0yLjYtNi41IDEyLjYgMTEuMiAyOS4yIDMzLjcgMzUuMiA1OSAyLjggMTEuNiAzLjMgMjMuNyAuNCAzNS43IDE2LjQgNi44IDM1LjkgMTcuOSAzMC43IDM0LjgtMi4yLS4xLTMuMiAwLTQuMiAwIDMuMi0xMC4xLTMuOS0xNy42LTIyLjgtMjYuMS0xOS42LTguNi0zNi04LjYtMzguMyAxMi41LTEyLjEgNC4yLTE4LjMgMTQuNy0yMS40IDI3LjMtMi44IDExLjItMy42IDI0LjctNC40IDM5LjktLjUgNy43LTMuNiAxOC02LjggMjktMzIuMSAyMi45LTc2LjcgMzIuOS0xMTQuMyA3LjJ6bTI1Ny40LTExLjVjLS45IDE2LjgtNDEuMiAxOS45LTYzLjIgNDYuNS0xMy4yIDE1LjctMjkuNCAyNC40LTQzLjYgMjUuNXMtMjYuNS00LjgtMzMuNy0xOS4zYy00LjctMTEuMS0yLjQtMjMuMSAxLjEtMzYuMyAzLjctMTQuMiA5LjItMjguOCA5LjktNDAuNiAuOC0xNS4yIDEuNy0yOC41IDQuMi0zOC43IDIuNi0xMC4zIDYuNi0xNy4yIDEzLjctMjEuMSAuMy0uMiAuNy0uMyAxLS41IC44IDEzLjIgNy4zIDI2LjYgMTguOCAyOS41IDEyLjYgMy4zIDMwLjctNy41IDM4LjQtMTYuMyA5LS4zIDE1LjctLjkgMjIuNiA1LjEgOS45IDguNSA3LjEgMzAuMyAxNy4xIDQxLjYgMTAuNiAxMS42IDE0IDE5LjUgMTMuNyAyNC42ek0xNzMuNCAxNDguN2MyIDEuOSA0LjcgNC41IDggNy4xIDYuNiA1LjIgMTUuOCAxMC42IDI3LjMgMTAuNiAxMS42IDAgMjIuNS01LjkgMzEuOC0xMC44IDQuOS0yLjYgMTAuOS03IDE0LjgtMTAuNHM1LjktNi4zIDMuMS02LjYtMi42IDIuNi02IDUuMWMtNC40IDMuMi05LjcgNy40LTEzLjkgOS44LTcuNCA0LjItMTkuNSAxMC4yLTI5LjkgMTAuMnMtMTguNy00LjgtMjQuOS05LjdjLTMuMS0yLjUtNS43LTUtNy43LTYuOS0xLjUtMS40LTEuOS00LjYtNC4zLTQuOS0xLjQtLjEtMS44IDMuNyAxLjcgNi41eiJdfSxsbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY290dG9uLWJ1cmVhdSIsaWNvbjpbNTEyLDUxMixbXSwiZjg5ZSIsIk00NzQuMyAzMzAuNEM0NTAuNiA0MjIuMyAzODAuMSA0NzUgMjcyLjQgNDc4LjhsMC00OS4yYzAtNDggMjYuNC03NC40IDc0LjQtNzQuNCA2MiAwIDk5LjItMzcuMiA5OS4yLTk5LjIgMC02MS40LTM2LjUtOTguMy05Ny40LTk5LjEtMzMtNjkuMy0xNDYuNS02NC43LTE3Ny4yIDAtNjAuOSAuOC05Ny40IDM3LjctOTcuNCA5OS4xIDAgNjIuMSAzNy4zIDk5LjQgOTkuNCA5OS40IDQ4IDAgNzQuNiAyNi4yIDc0LjYgNzQuNGwwIDQ5LjJjLTEzNC40LTUtMjExLjEtODUuMS0yMTEuMS0yMjMgMC0xNDEuOCA4MS40LTIyMy4yIDIyMy4yLTIyMy4yIDExNC44IDAgMTg5LjggNTMuMiAyMTQuNyAxNDguOGwyNS4zIDBDNDczLjkgNzEuNSAzODguMiA4IDI1OS44IDggMTA1IDggMTIgMTAxLjIgMTIgMjU1LjggMTIgNDExLjEgMTA1LjIgNTA0LjMgMjU5LjggNTA0IDM4OC4xIDUwNCA0NzMuNyA0NDAuMiA0OTkuNSAzMzAuNGwtMjUuMiAwek0zNTcgMTgyLjNjNDEuNCAzLjQgNjQuMiAyOSA2NC4yIDczLjcgMCA0OC0yNi40IDc0LjQtNzQuNCA3NC40LTI4LjYgMC00OS4zLTkuNi02MS42LTI3LjMgODMuMS0xNi41IDc1LjYtOTkuNyA3MS44LTEyMC43em0tODEuNyA5Ny40Yy0yLjUtMTAuMy0xNi4zLTg3IDU2LjItOTcgMi4zIDEwLjEgMTYuNSA4Ny4xLTU2LjMgOTdsMCAwek0yNjAgMTMyYzI4LjYgMCA0OSA5LjcgNjEuNCAyNy42LTI4LjQgNS41LTQ5LjQgMjAuNi02MS42IDQzLjQtMTIuMi0yMi45LTMzLjItMzgtNjEuNi00My40IDEyLjQtMTcuNyAzMy4zLTI3LjQgNjEuNi0yNy40bC4yLS4zem0tNzEuNSA1MC43YzczLjIgMTAuNiA1OC45IDg2LjggNTYuNSA5Ny03Mi40LTkuOC01OS04Ny01Ni4yLTk3bC0uMiAwek0xNzMuMiAzMzAuNGMtNDggMC03NC40LTI2LjQtNzQuNC03NC40IDAtNDQuNCAyMi45LTcwIDY0LjItNzMuNy02LjggMzcuMi0xLjQgMTA2LjUgNzEuNiAxMjAuNy0xMi4xIDE3LjYtMzIuOCAyNy4zLTYxLjEgMjcuM2wtLjMgMHptNTMuMiAxMi40YzE0LjMtNy42IDI2LTE5LjMgMzMuNi0zMy41IDcuOCAxNC41IDE5LjMgMjUuNSAzMy44IDMzLjUtMTQuNCA3LjYtMjYuMSAxOS40LTMzLjYgMzMuOC04LTE0LjUtMTkuMS0yNi4yLTMzLjYtMzMuOGwtLjMgMHoiXX0sY21lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2dsZS13YWxsZXQiLGljb246WzQ0OCw1MTIsW10sImYxZWUiLCJNMTU2LjggMTI2LjhjMzcuNiA2MC42IDY0LjIgMTEzLjEgODQuMyAxNjIuNS04LjMgMzMuOC0xOC44IDY2LjUtMzEuMyA5OC4zLTEzLjItNTIuMy0yNi41LTEwMS4zLTU2LTE0OC41IDYuNS0zNi40IDIuMy03My42IDMtMTEyLjN6TTEwOS4zIDIwMGwtOTMuMiAwYy02LjUgMC0xMC41IDcuNS02LjUgMTIuNyA0Mi4yIDU0LjMgNzEuNyAxMTcuOCA5MS43IDE4Ny4zbDEwMy41IDBjLTE2LjItNjkuNy0zOC43LTEzMy43LTgyLjUtMTkzLjUtMy00LTgtNi41LTEzLTYuNXptNDcuOC04OGM2OC41IDEwOCAxMzAgMjM0LjUgMTM4LjIgMzY4TDQwOSA0ODBjLTEyLTEzOC02OC40LTI2NS0xNDMuMi0zNjhsLTEwOC43IDB6TTQwOC45IDQzLjVjLTEuOC02LjgtOC4yLTExLjUtMTUuMi0xMS41bC04OC4zIDBjLTUuMyAwLTkgNS03LjggMTAuMyAxMy4yIDQ2LjUgMjIuMyA5NS41IDI2LjUgMTQ2IDQ4LjIgODYuMiA3OS43IDE3OC4zIDkwLjYgMjcwLjggMTUuOC02MC41IDI1LjMtMTMzLjUgMjUuMy0yMDMgMC03My42LTEyLjEtMTQ1LjEtMzEuMS0yMTIuNnoiXX0sZG1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvdXJzcXVhcmUiLGljb246WzM4NCw1MTIsW10sImYxODAiLCJNMzMxLjEgM0w1Ny45IDNDMjAuNCAzIDggMzEuMyA4IDQ5LjFMOCA0ODIuOWMwIDIwLjMgMTIuMSAyNy43IDE4LjIgMzAuMSA2LjIgMi41IDIyLjggNC42IDMyLjktNy4xIDEyOC45LTE0OS40IDEzMS4xLTE1MS45IDEzMS4xLTE1MS45IDMuMS0zLjQgMy40LTMuMSA2LjgtMy4xbDgzLjQgMGMzNS4xIDAgNDAuNi0yNS4yIDQ0LjMtMzkuN2w0OC42LTI0M0MzODEuOCAyNS44IDM3MS4xIDMgMzMxLjEgM3pNMzE0LjggNzYuOGwtMTEuNCA1OS43Yy0xLjIgNi41LTkuNSAxMy4yLTE2LjkgMTMuMmwtMTA2LjQgMGMtMTIgMC0yMC42IDguMy0yMC42IDIwLjNsMCAxM2MwIDEyIDguNiAyMC42IDIwLjYgMjAuNmw5MC40IDBjOC4zIDAgMTYuNiA5LjIgMTQuOCAxOC4yLTEuOCA4LjktMTAuNSA1My44LTExLjQgNTguOC0uOSA0LjktNi44IDEzLjUtMTYuOSAxMy41bC03My41IDBjLTEzLjUgMC0xNy4yIDEuOC0yNi41IDEyLjYgMCAwLTguOSAxMS40LTg5LjUgMTA4LjMtLjkgLjktMS44IC42LTEuOC0uM2wwLTMzOC44YzAtNy43IDYuOC0xNi42IDE2LjYtMTYuNmwyMTkgMGM4LjIgMCAxNS42IDcuNyAxMy41IDE3LjV6Il19LHBtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzaGlydHNpbmJ1bGsiLGljb246WzQ0OCw1MTIsW10sImYyMTQiLCJNMTAwIDQxMC4zbDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0zOS40IDE3LjVsMzAuNiAxMy40IDQuNC05LjktMzAuNi0xMy40LTQuNCA5Ljl6bTE3Mi4xLTE0bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40ek0xNzkuMSA0NDVsMzAuMyAxMy43IDQuNC05LjktMzAuMy0xMy40LTQuNCA5LjZ6TTYwLjQgMzkyLjhsMzAuNiAxMy40IDQuNC05LjYtMzAuNi0xMy43LTQuNCA5Ljl6bTIxMS40IDM4LjVsNC40IDkuOSAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjR6bS0zOS4zIDE3LjVsNC40IDkuOSAzMC42LTEzLjctNC40LTkuNi0zMC42IDEzLjR6bTExOC40LTUyLjJsNC40IDkuNiAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjd6TTE3MCA0Ni42bC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bS00Ny4yIDBsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS00Ny4zIDBsLTMzLjIgMCAwIDEwLjUgMzMuMyAwLS4xLTEwLjV6bTE0MS41IDBsLTMzLjIgMCAwIDEwLjUgMzMuMiAwIDAtMTAuNXptOTQuNSAwbC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tOTQuNiAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTE0MS41IDBsLTMzLjMgMCAwIDEwLjUgMzMuMyAwIDAtMTAuNXpNNTIuOCAzNTEuMWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em03MC0yMTUuOWwtMzMuNiAwIDAgMTAuNSAzMy41IDAgLjEtMTAuNXptLTcwIDEwLjZsMjIuOCAwIDAtMTAuNS0zMy42IDAgMCAzMy41IDEwLjggMCAwLTIzek0yMjEuNyAzNzQuNGE5MS4zIDkxLjMgMCAxIDAgMC0xODIuNiA5MS4zIDkxLjMgMCAxIDAgMCAxODIuNnpNMTczLjUgMjYzLjNjMC0yNS40IDI5LjUtMzEuOCA0OS42LTMxLjggMTYuOSAwIDI5LjIgNS44IDQ0LjMgMTJsLTguOCAxNi45LS45IDBjLTYuNC05LjktMjQuOC0xMy4xLTM1LjYtMTMuMS05IDAtMjkuOCAxLjgtMjkuOCAxNC45IDAgMjEuNiA3OC41LTEwLjIgNzguNSAzNy45IDAgMjUuNC0zMS41IDMxLjItNTEgMzEuMi0xOC4xIDAtMzIuNC0yLjktNDcuMi0xMi4ybDktMTguNCAuOSAwYzYuMSAxMi4yIDIzLjYgMTQuOSAzNS45IDE0LjkgOC43IDAgMzIuNy0xLjIgMzIuNy0xNC4zIDAtMjYuMS03Ny42IDYuMy03Ny42LTM4ek01Mi44IDE3OC40bC0xMC44IDAgMCAzMy42IDEwLjggMCAwLTMzLjZ6TTM5NS4yIDM4NC42bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNNTIuOCAzMDcuOWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41ek0wIDMuN2wwIDQwNiAyMjEuNyA5OC42IDIyNi4zLTk4LjYgMC00MDYtNDQ4IDB6TTQxOC44IDM5MC44bC0xOTYuOCA4NS43LTE5Mi44LTg1LjcgMC0yNzAuMSAzODkuNyAwIDAgMjcwLjEtLjEgMHptMC0yOTkuM2wtMzg5LjYgMCAwLTU4LjYgMzg5LjcgMCAwIDU4LjYtLjEgMHpNNTIuOCAyMjEuNmwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em0wIDQzLjJsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMTcwIDEzNS4ybC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6TTM5NS4yIDI5OC4zbDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptMC00My4ybDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNMjE3IDEzNS4ybC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6TTM5NS4yIDIxMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAgMTI5LjVsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0tMTMxLTIwNi4zbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em04My43IDMzLjZsMTAuOCAwIDAtMzMuNS0zMy41IDAgMCAxMC41IDIyLjggMC0uMSAyM3ptLTM2LjQtMzMuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41eiJdfSxobWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWludGJpdCIsaWNvbjpbNTEyLDUxMixbXSwiZTYyZiIsIk03My4yIDUxMmwwLTczLjEgMjkyLjUgMCAwLTczLjIgNzMuMiAwIDAtMTQ2LjMgNzMuMSAwIDAtMjE5LjQtMjE5LjQgMCAwIDczLjEtMTQ2LjMgMCAwIDczLjItNzMuMSAwIDAgMjkyLjYtNzMuMiAwIDAgNzMuMSA3My4yIDB6bTczLjEtMjE5LjRsNzMuMiAwIDAgNzMuMS03My4yIDAgMC03My4xem03My4yLTczLjFsNzMuMSAwIDAgNzMuMS03My4yIDAgMC03My4yIC4xIC4xem03My4xIDBsMC03My4yIDczLjIgMCAwIDczLjEtNzMuMiAwIDAgLjF6TTM2NS43IDczLjFsNzMuMiAwIDAgNzMuMi03My4yIDAgMC03My4yeiJdfSx1bWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToienVsaXAiLGljb246WzQ0OCw1MTIsW10sImU4NTMiLCJNNDI0IDk5YzAgMjIuNi0xMC4xIDQyLjYtMjUuNSA1NC44TDI0OS4zIDI4Ny43Yy0yLjggMi40LTYuNC0xLjUtNC40LTQuN2w1NC43LTExMC4xYzEuNS0zLjEtLjUtNi45LTMuNi02LjlMODMuOCAxNjZDNTAuOSAxNjYgMjQgMTM1LjkgMjQgOTkgMjQgNjIuMSA1MC45IDMyIDgzLjggMzJsMjgwLjQgMEMzOTcuMSAzMiA0MjQgNjIuMSA0MjQgOTl6TTgzLjggNDgwbDI4MC40IDBjMzIuOSAwIDU5LjgtMzAuMiA1OS44LTY3cy0yNi45LTY3LTU5LjgtNjdsLTIxMi4zIDBjLTMuMSAwLTUuMS0zLjgtMy42LTYuOUwyMDMuMSAyMjljMi0zLjItMS42LTcuMS00LjQtNC43TDQ5LjUgMzU4LjJDMzQuMSAzNzAuNCAyNCAzOTAuNCAyNCA0MTMgMjQgNDQ5LjggNTAuOSA0ODAgODMuOCA0ODB6Il19LGZtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGF5bGlua2VkIixpY29uOls0NDgsNTEyLFtdLCJmM2Y1IiwiTTM4Ni43IDI5Mi41bDIuNyAyLjctMTcwLTE2Ny4zYy0zLjUtMy41LTkuNy0zLjctMTMuOC0uNUwxNDguMyAxNzFjLTQuMiAzLjItNC42IDguNy0xLjEgMTIuMmw2OC4xIDY0LjNjMy42IDMuNSA5LjkgMy43IDE0IC41bC4xLS4xYzQuMS0zLjIgMTAuNC0zIDE0IC41bDg0IDgxLjNjMy42IDMuNSAzLjIgOS0uOSAxMi4ybC05My4yIDc0Yy00LjIgMy4zLTEwLjUgMy4xLTE0LjItLjRMNjcuMiAyNjhjLTMuNS0zLjUtOS43LTMuNy0xMy45LS41TDcuNSAzMDIuNGMtNC4yIDMuMi00LjcgOC43LTEuMiAxMi4yTDIxNSA1MTAuN3M3LjQgNi44IDE3LjMtLjhMNDMwLjMgMzQ2YzQtMy4yIDQuNC04LjcgLjctMTIuMmwtNDQuMy00MS4zem01NC41LTgzLjRMMjMwLjcgMi41Yy0xLjUtMS4yLTgtNS41LTE2LjMgMS4xTDcuNiAxNjUuN2MtNC4yIDMuMi00LjggOC43LTEuMiAxMi4ybDQyLjMgNDEuNyAxNzEuNyAxNjUuMWMzLjcgMy41IDEwLjEgMy43IDE0LjMgLjRsNTAuMi0zOC44LS4zLS4zIDcuNy02YzQuMi0zLjIgNC42LTguNyAuOS0xMi4ybC01Ny4xLTU0LjRjLTMuNi0zLjUtMTAtMy43LTE0LjItLjVsLS4xIC4xYy00LjIgMy4yLTEwLjUgMy4xLTE0LjItLjRMMTEzIDE4MC44Yy0zLjYtMy41LTMuMS04LjkgMS4xLTEyLjJsOTIuMi03MS41YzQuMS0zLjIgMTAuMy0zIDEzLjkgLjVsMTYwLjQgMTU5YzMuNyAzLjUgMTAgMy43IDE0LjEgLjVsNDUuOC0zNS44YzQuMS0zLjIgNC40LTguNyAuNy0xMi4yeiJdfSxtbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2ViZmxvdyIsaWNvbjpbNjQwLDUxMixbXSwiZTY1YyIsIk02NDAgNjRsLTIwNC4yIDM5OS4yLTE5MS44IDAgODUuNS0xNjUuNS0zLjggMEMyNTUuMSAzODkuMyAxNDkuOSA0NDkuNSAwIDQ2My4yTDAgMzAwLjFzOTUuOS01LjcgMTUyLjMtNjQuOWwtMTUyLjMgMCAwLTE3MS4yIDE3MS4xIDAgMCAxNDAuOCAzLjggMCA3MC0xNDAuOCAxMjkuNCAwIDAgMTM5LjkgMy44IDAgNzIuNi0xMzkuOSAxODkuMyAweiJdfSxnbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVucmVuIixpY29uOls1MTIsNTEyLFtdLCJmMThiIiwiTTIxNCAxNjkuMUMyMTQgMjc5LjUgMTUzIDM3NC41IDY2LjQgNDE2LjUgMzAgMzczLjIgOCAzMTcuNyA4IDI1Ni42IDggMTMzLjkgOTcuMSAzMi4yIDIxNCAxMi41bDAgMTU2LjZ6TTI1NSA1MDRjLTQyLjkgMC04My4zLTExLTExOC41LTMwLjQgNTcuMi0zNi4xIDEwMy40LTkwLjcgMTE4LjUtMTU0LjYgMTUuNSA2My45IDYxLjcgMTE4LjUgMTE4LjggMTU0LjctMzUuMSAxOS4zLTc1LjUgMzAuMy0xMTguOCAzMC4zem0xOTAuNi04Ny41QzM1OSAzNzQuNSAyOTggMjc5LjYgMjk4IDE2OS4xbDAtMTU2LjZjMTE2LjkgMTkuNyAyMDYgMTIxLjQgMjA2IDI0NC4xIDAgNjEuMS0yMiAxMTYuNi01OC40IDE1OS45eiJdfSxibWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia28tZmkiLGljb246WzUxMiw1MTIsW10sImU4NTYiLCJNMjQ5LjggNzVjODkuOCAwIDExMyAxLjEgMTQ2LjMgNC40IDc4LjEgNy44IDEyMy42IDU2IDEyMy42IDEyNS4ybDAgOC45YzAgNjQuMy00Ny4xIDExNi45LTExMC44IDEyMi40LTUgMTYuNi0xMi44IDMzLjItMjMuMyA0OS45LTI0LjQgMzcuNy03My4xIDg1LjMtMTYyLjkgODUuM2wtMTcuNyAwYy03My4xIDAtMTI5LjctMzEuNi0xNjMuNS04OS4yLTI5LjktNTAuNC0zMy44LTEwNi40LTMzLjgtMTgxLjIgMC03My43IDQ0LjQtMTEzLjYgOTYuNC0xMjAuMiAzOS4zLTUgODguMS01LjUgMTQ1LjctNS41em0wIDQxLjZjLTYwLjQgMC0xMDMuNiAuNS0xMzYuMyA1LjUtNDYgNi43LTY0LjMgMzIuNy02NC4zIDc5LjJsLjIgMjUuN2MxLjIgNTcuMyA3LjEgOTcuMSAyNy41IDEzNC41IDI2LjYgNDkuMyA3NC44IDY4LjIgMTI5LjcgNjguMmwxNy4yIDBjNzIgMCAxMDctMzQuOSAxMjYuMy02NS40IDkuNC0xNS41IDE3LjctMzIuNyAyMi4yLTU0LjNsMy4zLTEzLjggMTkuOSAwYzQ0LjMgMCA4Mi42LTM2IDgyLjYtODJsMC04LjNjMC01MS41LTMyLjItNzguNy04OC4xLTg1LjMtMzEuNi0yLjgtNTAuNC0zLjktMTQwLjItMy45ek0yNjcgMTY5LjJjMzguMiAwIDY0LjggMzEuNiA2NC44IDY3IDAgMzIuNy0xOC4zIDYxLTQyLjEgODMuMS0xNSAxNS0zOS4zIDMwLjUtNTUuOSA0MC41LTQuNCAyLjgtMTAgNC40LTE2LjcgNC40LTUuNSAwLTEwLjUtMS43LTE1LjUtNC40LTE2LjYtMTAtNDEtMjUuNS01Ni41LTQwLjUtMjEuOC0yMC44LTM5LjItNDYuOS00MS4zLTc3bC0uMi02LjFjMC0zNS41IDI1LjUtNjcgNjQuMy02NyAyMi43IDAgMzguOCAxMS42IDQ5LjMgMjcuNyAxMS42LTE2LjEgMjcuMi0yNy43IDQ5LjktMjcuN3ptMTIyLjUtMy45YzI4LjMgMCA0My44IDE2LjYgNDMuOCA0My4ycy0xNS41IDQyLjctNDMuOCA0Mi43Yy04LjkgMC0xMy44LTUtMTMuOC0xMS43bDAtNjIuNmMwLTYuNyA1LTExLjYgMTMuOC0xMS42eiJdfSx2bWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmV2IixpY29uOls0NDgsNTEyLFtdLCJmNWIyIiwiTTE1OC43IDI3NC45YTY1LjYgNjUuNiAwIDEgMSAxMzEuMiAwIDY1LjYgNjUuNiAwIDEgMSAtMTMxLjIgMHptMjcwLjctNS4xbC0uMSAwYy0uNy0yOS4zLTcuNy01OC4yLTIwLjUtODQuNnMtMzEuMi00OS43LTUzLjgtNjguNEwzMDkuNiAxNDNjMjIgMTQuMiA0MC4xIDMzLjggNTIuNyA1Ni44czE5LjEgNDguOCAxOS4xIDc1LjFjMCA4Ni42LTcwLjUgMTU3LjEtMTU3LjEgMTU3LjFTNjcuMiAzNjEuNSA2Ny4yIDI3NC45YzAtODEuOSA2My0xNDkuMyAxNDMtMTU2LjRsMCAzOS4xIDEwOC44LTYyLjgtMTA4LjgtNjIuOCAwIDM4LjNjLTEwNi43IDcuMi0xOTEgOTYtMTkxIDIwNC42IDAgMTExLjYgODkuMSAyMDIuMyAyMDAuMSAyMDVsMCAuMSAyMTAuMiAwIDAtMjEwLjJ6Il19LHltZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJrZXljZG4iLGljb246WzUxMiw1MTIsW10sImYzYmEiLCJNNjMuOCA0MDkuM2w2MC41LTU5YzMyLjEgNDIuOCA3MS4xIDY2IDEyNi42IDY3LjQgMzAuNSAuNyA2MC4zLTcgODYuNC0yMi40IDUuMSA1LjMgMTguNSAxOS41IDIwLjkgMjItMzIuMiAyMC43LTY5LjYgMzEuMS0xMDguMSAzMC4yLTQzLjMtMS4xLTg0LjYtMTYuNy0xMTcuNy00NC40IC4zLS42LTM4LjIgMzcuNS0zOC42IDM3LjkgOS41IDI5LjgtMTMuMSA2Mi40LTQ2LjMgNjIuNC0yNi44LS4xLTQ3LjUtMjEuNy00Ny41LTQ4LjUgMC0zNC4zIDMzLjEtNTYuNiA2My44LTQ1LjZ6TTQxOC43IDE1Ni45YzE5LjEgMzEuMyAyOS42IDY3LjQgMjguNyAxMDQtMS4xIDQ0LjgtMTkgODcuNS00OC42IDEyMSAuMyAuMyAyMy44IDI1LjIgMjQuMSAyNS41IDkuNi0xLjMgMTkuMiAyIDI1LjkgOS4xIDExLjMgMTIgMTAuOSAzMC45LTEuMSA0Mi40LTEyIDExLjMtMzAuOSAxMC45LTQyLjQtMS4xLTYuNy03LTkuNC0xNi44LTcuNi0yNi4zLTI0LjktMjYuNi00NC40LTQ3LjItNDQuNC00Ny4yIDQyLjctMzQuMSA2My4zLTc5LjYgNjQuNC0xMjQuMiAuNy0yOC45LTcuMi01Ny4yLTIxLjEtODIuMmwyMi4xLTIxek0xMDQgNTMuMWM2LjcgNyA5LjQgMTYuOCA3LjYgMjYuM2w0NS45IDQ4LjFjLTQuNyAzLjgtMTMuMyAxMC40LTIyLjggMjEuMy0yNS40IDI4LjUtMzkuNiA2NC44LTQwLjcgMTAyLjktLjcgMjguOSA2LjEgNTcuMiAyMCA4Mi40TDkyIDM1NS42Yy0xOS4zLTMxLjYtMjguOS02Ny43LTI3LjgtMTA0LjcgMS00NC42IDE4LjMtODcuNiA0Ny41LTEyMS4xTDg2LjQgMTAzLjRjLTkuNiAxLjMtMTkuMi0yLTI1LjktOS4xLTExLjMtMTItMTAuOS0zMC45IDEuMS00Mi40IDExLjktMTEuMiAzMC42LTEwLjkgNDIuNCAxLjJ6TTQ2NC45IDhjMjYgMCA0Ny4xIDIyLjQgNDcuMSA0OC4zUzQ5MC45IDEwNCA0NjQuOSAxMDRjLTYuMyAuMS0xNC0xLjEtMTUuOS0xLjhsLTYyLjkgNTkuN2MtMzIuNy00My42LTc2LjctNjUuOS0xMjYuOS02Ny4yLTMwLjUtLjctNjAuMyA2LjgtODYuMiAyMi40bC0yMS4xLTIyQzE4NC4xIDc0LjMgMjIxLjUgNjQgMjYwIDY0LjkgMzAzLjMgNjYgMzQ0LjYgODEuNiAzNzcuNyAxMDkuNWw0MS4xLTM4LjZjLTEuNS00LjctMi4yLTkuNi0yLjItMTQuNS0uMS0yNi43IDIyLjMtNDguNCA0OC4zLTQ4LjR6TTI1Ni43IDExMy40YzUuNSAwIDEwLjkgLjQgMTYuNCAxLjEgNzguMSA5LjggMTMzLjQgODEuMSAxMjMuOCAxNTkuMS05LjggNzguMS04MS4xIDEzMy40LTE1OS4xIDEyMy44LTc4LjEtOS44LTEzMy40LTgxLjEtMTIzLjgtMTU5LjIgOS4zLTcyLjQgNzAuMS0xMjQuNiAxNDIuNy0xMjQuOHptLTU5IDExOS40Yy42IDIyLjcgMTIuMiA0MS44IDMyLjQgNTIuMmwtMTEgNTEuNyA3My43IDAtMTEtNTEuN2MyMC4xLTEwLjkgMzIuMS0yOSAzMi40LTUyLjItLjQtMzIuOC0yNS44LTU3LjUtNTguMy01OC4zLTMyLjEgLjgtNTcuMyAyNC44LTU4LjIgNTguM3oiXX0seG1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImhpcmUtYS1oZWxwZXIiLGljb246WzUxMiw1MTIsW10sImYzYjAiLCJNNDQzLjEgMEw3MS45IDBDNjcuOSAzNy4zIDM3LjQgNjcuOCAwIDcxLjdMMCA0NDMuMmMzNy40IDQuOSA2NiAzMi40IDcxLjkgNjguOGwzNzIuMiAwYzMtMzYuNCAzMi41LTY1LjggNjcuOS02OS44bDAtMzcwLjVDNDc1LjYgNjUuOCA0NDcgMzYuNCA0NDMuMSAwem0tMzcgNDA0LjljLTM2LjMgMC0xOC44LTItNTUuMS0yLTM1LjggMC0yMSAyLTU2LjEgMi01LjkgMC00LjktOC4yIDAtOS44IDIyLjgtNy42IDIyLjktMTAuMiAyNC42LTEyLjggMTAuNC0xNS42IDUuOS04MyA1LjktMTEzIDAtNS4zLTYuNC0xMi44LTEzLjgtMTIuOGwtMTExLjIgMGMtNy40IDAtMTMuOCA3LjUtMTMuOCAxMi44IDAgMzAtNC41IDk3LjQgNS45IDExMyAxLjcgMi41IDEuOCA1LjIgMjQuNiAxMi44IDQuOSAxLjYgNiA5LjggMCA5LjgtMzUuMSAwLTIwLjMtMi01Ni4xLTItMzYuMyAwLTE4LjggMi01NS4xIDItNy45IDAtNS44LTEwLjggMC0xMC44IDEwLjItMy40IDEzLjUtMy41IDIxLjctMTMuOCA3LjctMTIuOSA3LjktNDQuNCA3LjktMTI3LjhsMC0xMDEuMmMwLTIyLjItMTIuMi0yOC4zLTI4LjYtMzIuNC04LjgtMi4yLTQtMTEuOCAxLTExLjggMzYuNSAwIDIwLjYgMiA1Ny4xIDIgMzIuNyAwIDE2LjUtMiA0OS4yLTIgMy4zIDAgOC41IDguMyAxIDEwLjgtNC45IDEuNi0yNy42IDMuNy0yNy42IDM5LjMgMCA0NS42LS4yIDU1LjggMSA2OC44IDAgMS4zIDIuMyAxMi44IDEyLjggMTIuOGwxMDkuMiAwYzEwLjUgMCAxMi44LTExLjUgMTIuOC0xMi44IDEuMi0xMyAxLTIzLjIgMS02OC44IDAtMzUuNi0yMi43LTM3LjctMjcuNi0zOS4zLTcuNS0yLjUtMi4zLTEwLjggMS0xMC44IDMyLjcgMCAxNi41IDIgNDkuMiAyIDM2LjUgMCAyMC42LTIgNTcuMS0yIDQuOSAwIDkuOSA5LjYgMSAxMS44LTE2LjQgNC4xLTI4LjYgMTAuMy0yOC42IDMyLjRsMCAxMDEuMmMwIDgzLjQgLjEgMTE0LjkgNy45IDEyNy44IDguMiAxMC4yIDExLjQgMTAuNCAyMS43IDEzLjggNS44IDAgNy44IDEwLjggMCAxMC44eiJdfSxFRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtaGFja2VyLW5ld3MiLGljb246WzQ0OCw1MTIsWyJoYWNrZXItbmV3cy1zcXVhcmUiXSwiZjNhZiIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEgMjI5LjJzLjEtLjEgLjEtLjIgLjEtLjIgLjItLjJjMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMzkuMiAzODRsLTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzQxLjUgNzcuNyA0OC4xIDk1LjggNTQuMSAxMTIgMS42IDQuMyAzLjEgOC41IDUuMiAxMy42IDMuMi03IDUuMS0xMS45IDcuMS0xNy4zIDUuOS0xNS4zIDEyLjgtMzMuMiA1My41LTEwOC4zbDM0LjggMC04MC44IDE1NS4xIDAgMTAwLjl6Il19LHdtZT1FRSxNbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY3JlYXRpdmUtY29tbW9ucy1wZC1hbHQiLGljb246WzUxMiw1MTIsW10sImY0ZWQiLCJNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYgOCAzOTQuNSAxMjEuNiA1MDQgMjU1LjYgNTA0IDM4NS41IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE4LjEgMzk3LjQgOCAyNTUuNiA4em0uOCA0NTAuOGMtMTEyLjUgMC0yMDMuNy05My0yMDMuNy0yMDIuOCAwLTEwNS40IDg1LjUtMjAzLjMgMjAzLjctMjAzLjMgMTEyLjYgMCAyMDIuOSA4OS41IDIwMi44IDIwMy4zIDAgMTIxLjctOTkuNiAyMDIuOC0yMDIuOCAyMDIuOHpNMzI0LjcgMTg2bC01My4yIDAgMCAxMzcuMiA1My4yIDBjMjEuNCAwIDcwLTUuMSA3MC02OC42IDAtNjMuNC00OC42LTY4LjYtNzAtNjguNnptLjggMTA4LjVsLTE5LjkgMCAwLTc5LjcgMTkuNC0uMWMzLjggMCAzNS0yLjEgMzUgMzkuOSAwIDI0LjYtMTAuNSAzOS45LTM0LjUgMzkuOXpNMjExLjcgMTg2bC02OC4yIDAgMCAxMzcuMyAzNC42IDAgMC00NC4zIDI3IDBjNTQuMSAwIDU3LjEtMzcuNSA1Ny4xLTQ2LjUgMC0zMS0xNi44LTQ2LjUtNTAuNS00Ni41em0tNC45IDY3LjNsLTI5LjIgMCAwLTQxLjYgMjguMyAwYzMwLjkgMCAyOC44IDQxLjYgLjkgNDEuNnoiXX0sem1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9yY2lkIixpY29uOls1MTIsNTEyLFtdLCJmOGQyIiwiTTI5NC43IDE4OC4ybC00NS45IDAgMCAxNTMuOCA0Ny41IDBjNjcuNiAwIDgzLjEtNTEuMyA4My4xLTc2LjkgMC00MS42LTI2LjUtNzYuOS04NC43LTc2Ljl6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc1LjIgMzY4LjhsLTI5LjggMCAwLTIwNy41IDI5LjggMCAwIDIwNy41ek0xNjAuMyA5OC41YTE5LjYgMTkuNiAwIDEgMSAwIDM5LjIgMTkuNiAxOS42IDAgMSAxIDAtMzkuMnpNMzAwIDM2OWwtODEgMCAwLTIwNy43IDgwLjYgMGM3Ni43IDAgMTEwLjQgNTQuOCAxMTAuNCAxMDMuOSAwIDUzLjMtNDEuNyAxMDMuOS0xMTAgMTAzLjl6Il19LFBFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJvYXJkLWdhbWUtZ2VlayIsaWNvbjpbNjQwLDUxMixbImJnZyJdLCJlODU1IiwiTTE2OC44IDE2OC4zbDMwLjEtOC4yLTEyLjMgOTguOCAxNi43IDE2LjEtMzguOSA5MS4yLTExMS44IDQxLjItNTIuNi0xMzEuOCAxNy43LTE3LTEwLjUtODQuMyAxOTEuMi03MC4zLTI5LjUgNjQuM3ptMTgwLjYgMTYuNWMxMS42IDAgMTkgNy40IDE5IDE3LjlsMCAzMS41YzAgOS43LTYuMyAxOC45LTE5LjUgMjIuMSAxMy4xIDMuMSAyMC41IDEyIDIwLjUgMjEuNGwwIDMwLjljMCAxMS4xLTcuNCAxOC4xLTE5IDE4LjFsLTg5LjEgMCAwLTE0MS44IDg4IDB6TTI5OCAyOTkuOGwzMyAwYzEuNSAwIDIuMS0xIDIuMS0yLjFsMC0yNi45YzAtMS0uNi0yLjMtMi4xLTIuM2wtMzMgMCAwIDMxLjN6bTAtNTcuM2wzMyAwYzEuNSAwIDIuMS0xLjEgMi4xLTIuM2wwLTI0LjhjMC0xLS42LTIuMy0yLjEtMi4zbC0zMyAwIDAgMjkuNHptMjA0LjEtMjcuMmwtNjUuNiAwYy0xIDAtMi4xIDEuMS0yLjEgMi4zbDAgNzYuMWMwIDEuMyAxIDIuMSAyLjEgMi4xbDI5LjcgMGMxLjUgMCAyLjMtLjggMi4zLTIuMWwwLTI0LTE5LjMgMCAxMi44LTMwIDQwLjEgMCAwIDcwLjhjMCA5LjItNy4yIDE2LjItMTYuMyAxNi4ybC03MS41IDBjLTkuMSAwLTE2LjUtNy0xNi41LTE2LjJsMC0xMDkuN2MwLTguNiA3LjQtMTYgMTYuNS0xNmw4Ny44IDAgMCAzMC41em0xMzIuNiAwbC02NS42IDBjLTEuMSAwLTIuMSAxLjEtMi4xIDIuM2wwIDc2LjFjMCAxLjMgMSAyLjEgMi4xIDIuMWwyOS42IDBjMS41IDAgMi4zLS44IDIuMy0yLjFsMC0yNC0xOS4yIDAgMTIuOC0zMCA0MC4xIDAgMCA3MC44YzAgOS4yLTcuMiAxNi4yLTE2LjMgMTYuMmwtNzEuNSAwYy05LjEgMC0xNi41LTYuOS0xNi41LTE2LjJsMC0xMDkuN2MwLTguNiA3LjQtMTYgMTYuNS0xNmw4Ny44IDAgMCAzMC41eiJdfSxrbWU9UEUsU21lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJlaGFuY2UiLGljb246WzU3Niw1MTIsW10sImYxYjQiLCJNMjMyIDIzNy4yYzMxLjgtMTUuMiA0OC40LTM4LjIgNDguNC03NCAwLTcwLjYtNTIuNi04Ny44LTExMy4zLTg3LjhsLTE2Ny4xIDAgMCAzNTQuNCAxNzEuOCAwYzY0LjQgMCAxMjQuOS0zMC45IDEyNC45LTEwMi45IDAtNDQuNS0yMS4xLTc3LjQtNjQuNy04OS43ek03Ny45IDEzNS45bDczLjEgMGMyOC4xIDAgNTMuNCA3LjkgNTMuNCA0MC41IDAgMzAuMS0xOS43IDQyLjItNDcuNSA0Mi4ybC03OSAwIDAtODIuN3ptODMuMyAyMzMuN2wtODMuMyAwIDAtOTcuNiA4NC45IDBjMzQuMyAwIDU2IDE0LjMgNTYgNTAuNiAwIDM1LjgtMjUuOSA0Ny01Ny42IDQ3ek01MTkuNyAxMjguOWwtMTQzLjcgMCAwLTM0LjkgMTQzLjcgMCAwIDM0Ljl6TTU3NiAzMDUuMmMwLTc1LjktNDQuNC0xMzkuMi0xMjQuOS0xMzkuMi03OC4yIDAtMTMxLjMgNTguOC0xMzEuMyAxMzUuOCAwIDc5LjkgNTAuMyAxMzQuNyAxMzEuMyAxMzQuNyA2MS4zIDAgMTAxLTI3LjYgMTIwLjEtODYuM2wtNjIuMiAwYy02LjcgMjEuOS0zNC4zIDMzLjUtNTUuNyAzMy41LTQxLjMgMC02My0yNC4yLTYzLTY1LjNsMTg1LjEgMGMuMy00LjIgLjYtOC43IC42LTEzLjJ6TTM5MC40IDI3NGMyLjMtMzMuNyAyNC43LTU0LjggNTguNS01NC44IDM1LjQgMCA1My4yIDIwLjggNTYuMiA1NC44bC0xMTQuNyAweiJdfSxDbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibW9uZXJvIixpY29uOls1MTIsNTEyLFtdLCJmM2QwIiwiTTM2MCAzODRsMTA4LjQgMEM0MjUgNDU1LjkgMzQ2LjEgNTA0IDI1NiA1MDRTODcgNDU1LjkgNDMuNiAzODRsMTA4LjQgMCAwLTEyNy44IDEwNCAxMDQuOCAxMDQtMTA1IDAgMTI4ek05NiAzMzZsMC0yMDggMTU5LjQgMTU5LjQgMTYwLjYtMTU5LjQgMCAyMDggNzQuOCAwYzguNS0yNS4xIDEzLjItNTIgMTMuMi04MCAwLTEzNy0xMTEtMjQ4LTI0OC0yNDhTOCAxMTkgOCAyNTZjMCAyOCA0LjYgNTQuOSAxMy4yIDgwTDk2IDMzNnoiXX0sX21lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpZ21hIixpY29uOlszODQsNTEyLFtdLCJmNzk5IiwiTTE0IDk1LjhDMTQgNDIuOSA1Ni45IDAgMTA5LjggMEwyNzQuMiAwYzUyLjkgMCA5NS44IDQyLjkgOTUuOCA5NS44IDAgMzMuNS0xNy4yIDYzLTQzLjIgODAuMSAyNiAxNy4xIDQzLjIgNDYuNiA0My4yIDgwLjEgMCA1Mi45LTQyLjkgOTUuOC05NS44IDk1LjhsLTIuMSAwYy0yNC44IDAtNDcuNC05LjQtNjQuNC0yNC45bDAgODguM2MwIDUzLjYtNDQgOTYuOC05Ny40IDk2LjgtNTIuOCAwLTk2LjMtNDIuOC05Ni4zLTk1LjggMC0zMy41IDE3LjItNjMgNDMuMi04MC4xLTI2LTE3LjEtNDMuMi00Ni42LTQzLjItODAuMXMxNy4yLTYzIDQzLjItODAuMUMzMS4yIDE1OC44IDE0IDEyOS4zIDE0IDk1Ljh6bTE2Mi4zIDk1LjhsLTY2LjUgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjQgMCAzNS40IDI4LjYgNjQuMiA2NCA2NC40bDY2LjkgMCAwLTEyOC44ek0yMDcuNyAyNTZjMCAzNS42IDI4LjggNjQuNCA2NC40IDY0LjRsMi4xIDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTIuMSAwYy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHptLTk3LjkgOTUuOGwtLjQgMGMtMzUuNCAuMi02NCAyOS02NCA2NC40czI5LjIgNjQuNCA2NC45IDY0LjRjMzYuMyAwIDY2LTI5LjQgNjYtNjUuNWwwLTYzLjQtNjYuNSAwem0wLTMyMC40Yy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHMyOC44IDY0LjQgNjQuNCA2NC40bDY2LjUgMCAwLTEyOC44LTY2LjUgMHptOTcuOSAxMjguOGw2Ni41IDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTY2LjUgMCAwIDEyOC44eiJdfSxxZj17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpbnN0YWdyYW0iLGljb246WzQ0OCw1MTIsW10sImYxNmQiLCJNMjI0LjMgMTQxYTExNSAxMTUgMCAxIDAgLS42IDIzMCAxMTUgMTE1IDAgMSAwIC42LTIzMHptLS42IDQwLjRhNzQuNiA3NC42IDAgMSAxIC42IDE0OS4yIDc0LjYgNzQuNiAwIDEgMSAtLjYtMTQ5LjJ6bTkzLjQtNDUuMWEyNi44IDI2LjggMCAxIDEgNTMuNiAwIDI2LjggMjYuOCAwIDEgMSAtNTMuNiAwem0xMjkuNyAyNy4yYy0xLjctMzUuOS05LjktNjcuNy0zNi4yLTkzLjktMjYuMi0yNi4yLTU4LTM0LjQtOTMuOS0zNi4yLTM3LTIuMS0xNDcuOS0yLjEtMTg0LjkgMC0zNS44IDEuNy02Ny42IDkuOS05My45IDM2LjFzLTM0LjQgNTgtMzYuMiA5My45Yy0yLjEgMzctMi4xIDE0Ny45IDAgMTg0LjkgMS43IDM1LjkgOS45IDY3LjcgMzYuMiA5My45czU4IDM0LjQgOTMuOSAzNi4yYzM3IDIuMSAxNDcuOSAyLjEgMTg0LjkgMCAzNS45LTEuNyA2Ny43LTkuOSA5My45LTM2LjIgMjYuMi0yNi4yIDM0LjQtNTggMzYuMi05My45IDIuMS0zNyAyLjEtMTQ3LjggMC0xODQuOHpNMzk5IDM4OGMtNy44IDE5LjYtMjIuOSAzNC43LTQyLjYgNDIuNi0yOS41IDExLjctOTkuNSA5LTEzMi4xIDlzLTEwMi43IDIuNi0xMzIuMS05Yy0xOS42LTcuOC0zNC43LTIyLjktNDIuNi00Mi42LTExLjctMjkuNS05LTk5LjUtOS0xMzIuMXMtMi42LTEwMi43IDktMTMyLjFjNy44LTE5LjYgMjIuOS0zNC43IDQyLjYtNDIuNiAyOS41LTExLjcgOTkuNS05IDEzMi4xLTlzMTAyLjctMi42IDEzMi4xIDljMTkuNiA3LjggMzQuNyAyMi45IDQyLjYgNDIuNiAxMS43IDI5LjUgOSA5OS41IDkgMTMyLjFzMi43IDEwMi43LTkgMTMyLjF6Il19LFRtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwZXJieXRlIixpY29uOls0NDgsNTEyLFtdLCJlMDgzIiwiTTMwNS4zIDI4NC42bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXpNMTQ5LjQgMTI4LjdsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0zNjYuNiAzMkw4MS40IDMyYy0yMS42IDAtNDIuMiA4LjYtNTcuNSAyMy45UzAgOTEuOCAwIDExMy40TDAgMzk4LjZjMCAyMS42IDguNiA0Mi4yIDIzLjkgNTcuNVM1OS44IDQ4MCA4MS40IDQ4MGwyODUuMyAwYzIxLjYgMCA0Mi4yLTguNiA1Ny41LTIzLjlTNDQ4IDQyMC4yIDQ0OCAzOTguNmwwLTI4NS4zYzAtMjEuNi04LjYtNDIuMi0yMy45LTU3LjVTMzg4LjIgMzIgMzY2LjYgMzJ6bTYzLjYgMzY2LjZjMCAxNi45LTYuNyAzMy0xOC43IDQ1cy0yOC4xIDE4LjYtNDUgMTguN2wtMjg1LjMgMGMtMTYuOSAwLTMzLTYuNy00NS0xOC43cy0xOC42LTI4LjEtMTguNy00NWwwLTI4NS4zYzAtMTYuOSA2LjctMzMgMTguNy00NXMyOC4xLTE4LjYgNDUtMTguN2wyODUuMyAwYzE2LjkgMCAzMyA2LjcgNDUgMTguN3MxOC42IDI4LjEgMTguNyA0NWwwIDI4NS4zem0tMTI1LTI2OS45bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXoiXX0sSUU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLXZpbWVvIixpY29uOls0NDgsNTEyLFsidmltZW8tc3F1YXJlIl0sImYxOTQiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMxOC41IDMwOS41Yy00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMy44LTEzLjktNy4zLTI2LjktMTAuNS0zOS0xOC4yLTY4LjMtMjguNi0xMDcuNC00Ni4yLTEwNy40LTIuNCAwLTEwLjggNS0yNS4xIDE1LjFMNjQgMTkyYzctNi4xIDEzLjktMTIuNCAyMC42LTE4LjUgMjkuMS0yNi4zIDU1LjYtNTAuMyA3My41LTUxLjkgMjQuOS0yLjQgNDAuMiAxNC42IDQ2IDUxLjEgMjAuNSAxMjkuNiAyOS42IDE0OS4yIDY2LjggOTAuNSAxMy40LTIxLjIgMjAuNi0zNy4yIDIxLjUtNDguMyAzLjQtMzIuOC0yNS42LTMwLjYtNDUuMi0yMi4yIDE1LjctNTEuNSA0NS44LTc2LjUgOTAuMS03NS4xIDMyLjkgMSA0OC40IDIyLjQgNDYuNSA2NC0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOXoiXX0sTG1lPUlFLCRtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwdXNoZWQiLGljb246WzQ0OCw1MTIsW10sImYzZTEiLCJNNDE1LjEgMTExLjlsLTk4LjUtOSAxNC0zMy40YzEwLjQtMjMuNS0xMC44LTQwLjQtMjguNy0zN0wzMC42IDc2LjljLTE1LjEgMi43LTI2IDE4LjMtMjEuNCAzNi42TDExNC4zIDQ2MS44YzYuNSAyMS4zIDM2LjcgMjQuMiA0Ny43IDdMMTk3LjMgMzg4IDQzMi41IDE1Ni43YzE2LjQtMTYuOCA0LjMtNDIuOS0xNy40LTQ0Ljh6TTMwNS43IDUzLjZjNS4xLS43IDcuNSAyLjUgNS4yIDcuNGwtMTYuOCAzOS45LTE3Ny40LTE2LjMgMTg5LTMxek0zMC44IDEwNy45Yy0zLjEtNS4xIDEtMTAgNi4xLTkuMWwyNDguNyAyMi43LTk2LjkgMjMwLjctMTU3LjktMjQ0LjN6TTE0NC4xIDQ1Ni40Yy0yLjYgNC03LjkgMy4xLTkuNC0xLjJMNTEuNiAxNzkuNyAxNzkuMyAzNzcuM2MtNyAxNS0zNS4yIDc5LjEtMzUuMiA3OS4xek00MTYuOSAxNDEuOWwtMTk4LjcgMTk1LjQgODkuNy0yMTMuNyAxMDYuNCA5LjdjNCAxLjEgNS43IDUuMyAyLjYgOC42eiJdfSxBbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWl4Y2xvdWQiLGljb246WzY0MCw1MTIsW10sImYyODkiLCJNMjEzIDM0Ni42bC0zMy4yIDAgMC0xNTEuNSA2LjItMjEuNi0xMC43IDAtMzguMSAxNzMuMS02MSAwLTM4LjQtMTczLjEtMTAuNSAwIDUuOSAyMS42IDAgMTUxLjUtMzMuMiAwIDAtMTgxLjYgNjUuNyAwIDM2LjYgMTczLjEgOC41IDAgMzYuNi0xNzMuMSA2NS43IDAgMCAxODEuNnptMzMxLjUtNjNsLTg2IDYyLjEgMC0zOC4xIDcyLjktNTEuOC03Mi45LTUxLjggMC0zOC4xIDg2IDYyLjMgOS4zIDAgODYuMy02Mi4zIDAgMzguMS03My4xIDUxLjggNzMuMSA1MS44IDAgMzguMS04Ni4zLTYyLjEtOS4zIDB6TTQzMC4yIDI3Mi4zbC0xODIgMCAwLTMzLjEgMTgyIDAgMCAzMy4xeiJdfSxEbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToieWFuZGV4LWludGVybmF0aW9uYWwiLGljb246WzMyMCw1MTIsW10sImY0MTQiLCJNMTI5LjUgNTEybDAtMTY2LjEtMTExLTI5Ny45IDU1LjggMCA4MS44IDIyOS43IDk0LjEtMjc3LjcgNTEuMyAwLTEyMC43IDM0Ny44IDAgMTY0LjItNTEuMyAweiJdfSxFbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaGl2ZSIsaWNvbjpbNTEyLDUxMixbXSwiZTA3ZiIsIk0yNjAuNCAyNTQuOUwxMzEuNSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zLS44IC4xLTEuMSAuMy0uNiAuNS0uOCAuOEwuMyAyNTQuOWMtLjIgLjMtLjMgLjctLjMgMS4xcy4xIC44IC4zIDEuMUwxMjkuMSA0NzguOWMuMiAuMyAuNSAuNiAuOCAuOHMuNyAuMyAxLjEgLjMgLjgtLjEgMS4xLS4zIC42LS41IC44LS44TDI2MC40IDI1Ny4xYy4yLS4zIC4zLS43IC4zLTEuMXMtLjEtLjgtLjMtMS4xem0zOS4xLTI1LjdjLjIgLjMgLjUgLjYgLjggLjhzLjcgLjMgMS4xIC4zbDY2LjUgMGMuNCAwIC44LS4xIDEuMS0uM3MuNi0uNSAuOC0uOCAuMy0uNyAuMy0xLjEtLjEtLjgtLjMtMS4xTDI1OS4xIDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjNsLTY2LjUgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44LS4zIC43LS4zIDEuMSAuMSAuOCAuMyAxLjFMMjk5LjQgMjI5LjJ6bTIxMi4zIDI1LjdMMzg0LjkgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uM2wtNjYuNiAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjgtLjMgLjctLjMgMS4xIC4xIC44IC4zIDEuMUw0NDAuNyAyNTYgMzE0LjUgNDc2LjdjLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjEgLjUgLjYgLjggLjggLjcgLjMgMS4xIC4zbDY2LjYgMGMuNCAwIC44LS4xIDEuMS0uM3MuNi0uNSAuOC0uOEw1MTEuNyAyNTcuMWMuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMXpNMzY2IDI4NC45bC02Ni41IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOEwxODguOCA0NzYuN2MtLjIgLjMtLjMgLjctLjMgMS4xcy4xIC44IC4zIDEuMSAuNSAuNiAuOCAuOCAuNyAuMyAxLjEgLjNsNjYuNSAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44TDM2Ny45IDI4OC4zYy4yLS4zIC4zLS43IC4zLTEuMXMtLjEtLjgtLjMtMS4xLS41LS42LS44LS44LS43LS4zLTEuMS0uM3oiXX0sUG1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtemVybyIsaWNvbjpbNTEyLDUxMixbXSwiZjRmMyIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bS0uNCA2MC41Yy04MS45IDAtMTAyLjUgNzcuMy0xMDIuNSAxNDIuOFMxNzQuMSAzOTguOCAyNTYgMzk4LjggMzU4LjUgMzIxLjUgMzU4LjUgMjU2IDMzNy45IDExMy4yIDI1NiAxMTMuMnptMCA1My45YzMuMyAwIDYuNCAuNSA5LjIgMS4yIDUuOSA1LjEgOC44IDEyLjEgMy4xIDIxLjlMMjEzLjggMjkwLjRjLTEuNy0xMi43LTEuOS0yNS4xLTEuOS0zNC40IDAtMjguOCAyLTg4LjkgNDQuMS04OC45em00MC44IDQ2LjJjMi45IDE1LjQgMy4zIDMxLjQgMy4zIDQyLjcgMCAyOC45LTIgODguOS00NC4xIDg4LjktMTMuNSAwLTMyLjYtNy43LTIwLjEtMjYuNGw2MC45LTEwNS4yeiJdfSxORT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtc25hcGNoYXQiLGljb246WzQ0OCw1MTIsWyJzbmFwY2hhdC1zcXVhcmUiXSwiZjJhZCIsIk0zODQgMzJMNjQgMzJjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43UzAgNzkgMCA5NkwwIDQxNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM1M0NyA0ODAgNjQgNDgwbDMyMCAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43UzQ0OCA0MzMgNDQ4IDQxNmwwLTMyMGMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM1M0MDEgMzIgMzg0IDMyem0tMy45IDMxOS4zbC0uMSAuMWMtMi41IDIuOC01LjQgNS4xLTguNyA2LjgtNi41IDMuNi0xMy40IDYuMy0yMC42IDguMi0xLjQgLjQtMi43IDEtMy45IDEuOC0yLjIgMS45LTIuMSA0LjYtNC40IDguNi0xLjcgMy00IDUuNS02LjggNy41LTYuNyA0LjYtMTQuMiA0LjktMjIuMiA1LjItNy4yIC4zLTE1LjQgLjYtMjQuNyAzLjctMy44IDEuMi03LjggMy43LTEyLjQgNi41LTExLjMgNi45LTI2LjcgMTYuNC01Mi4zIDE2LjRzLTQwLjktOS40LTUyLjEtMTYuM2MtNC43LTIuOS04LjctNS40LTEyLjUtNi42LTkuMy0zLjEtMTcuNS0zLjQtMjQuNy0zLjctOC0uMy0xNS41LS42LTIyLjItNS4yLTIuNC0xLjYtNC40LTMuNy02LTYuMS0zLjItNC42LTIuOS03LjgtNS4zLTkuOS0xLjMtLjgtMi42LTEuNS00LjEtMS44LTcuMS0xLjktMTMuOS00LjYtMjAuMy04LjEtMy4xLTEuNi01LjktMy44LTguMy02LjMtNi42LTYuOC04LjMtMTQuOC01LjctMjEuOCAzLjQtOS4zIDExLjYtMTIuMSAxOS40LTE2LjMgMTQuOC04IDI2LjMtMTguMSAzNC40LTI5LjkgMi4zLTMuMyA0LjMtNi45IDYtMTAuNiAuOC0yLjIgLjgtMy4zIC4yLTQuNC0uNi0uOS0xLjMtMS42LTIuMi0yLjItMi41LTEuNy01LjEtMy40LTYuOS00LjUtMy4zLTIuMS01LjktMy44LTcuNS01LTYuMy00LjQtMTAuNi05LTEzLjQtMTQuMi0xLjktMy42LTMtNy42LTMuMy0xMS42cy40LTguMSAxLjktMTEuOWM0LjEtMTAuOSAxNC41LTE3LjcgMjctMTcuNyAyLjYgMCA1LjMgLjMgNy44IC44IC43IC4yIDEuNCAuMyAyIC41LS4xLTcuNCAuMS0xNS40IC43LTIzLjEgMi40LTI3LjMgMTEuOS00MS42IDIxLjktNTMgNi40LTcuMiAxMy45LTEzLjIgMjIuMy0xNy45IDE1LjEtOC42IDMyLjItMTMgNTAuOS0xM3MzNS44IDQuNCA1MC45IDEzYzguMyA0LjcgMTUuOSAxMC44IDIyLjIgMTcuOSAxMCAxMS40IDE5LjUgMjUuNyAyMS45IDUzIC42IDcuNyAuOSAxNS40IC43IDIzLjEgLjctLjIgMS40LS4zIDIuMS0uNSAyLjYtLjYgNS4yLS44IDcuOC0uOCAxMi41IDAgMjIuOCA2LjggMjcgMTcuNyAxLjUgMy44IDIuMSA3LjkgMS45IDExLjlzLTEuNCA4LTMuMyAxMS42Yy0yLjcgNS4yLTcuMSA5LjktMTMuNCAxNC4yLTEuNyAxLjItNC4zIDIuOS03LjUgNS0xLjggMS4yLTQuNSAyLjktNy4yIDQuNy0uOCAuNS0xLjQgMS4yLTEuOSAyLS41IDEtLjUgMi4yIC4yIDQuMiAxLjcgMy44IDMuNyA3LjQgNi4xIDEwLjggOC4zIDEyLjEgMjAuMiAyMi4zIDM1LjUgMzAuNCAxLjUgLjggMyAxLjUgNC40IDIuMyAuNyAuMyAxLjYgLjggMi41IDEuMyA0LjkgMi43IDkuMiA2IDExLjUgMTIuMiAyLjUgNi45IDEgMTQuNy01LjIgMjEuM3ptLTE2LjctMTguNWMtNTAuMy0yNC4zLTU4LjMtNjEuOS01OC43LTY0LjctLjQtMy40LS45LTYgMi44LTkuNSAzLjYtMy4zIDE5LjUtMTMuMiAyNC0xNi4zIDcuMy01LjEgMTAuNS0xMC4yIDguMi0xNi41LTEuNy00LjMtNS43LTYtMTAtNi0xLjMgMC0yLjcgLjItNCAuNC04IDEuNy0xNS44IDUuOC0yMC40IDYuOS0uNSAuMS0xLjEgLjItMS43IC4yLTIuNCAwLTMuMy0xLjEtMy4xLTQgLjYtOC44IDEuOC0yNS45IC40LTQxLjktMS45LTIyLTktMzIuOS0xNy40LTQyLjYtNC4xLTQuNi0yMy4xLTI0LjctNTkuNS0yNC43cy01NS40IDIwLjEtNTkuNSAyNC44Yy04LjQgOS43LTE1LjUgMjAuNi0xNy40IDQyLjYtMS40IDE2LS4xIDMzLjEgLjQgNDEuOSAuMiAyLjgtLjcgNC0zLjEgNC0uNiAwLTEuMS0uMS0xLjctLjItNC41LTEuMS0xMi4zLTUuMS0yMC4zLTYuOS0xLjMtLjMtMi42LS40LTQtLjQtNC4zIDAtOC4zIDEuNi0xMCA2LTIuNCA2LjMgLjggMTEuNCA4LjIgMTYuNSA0LjQgMy4xIDIwLjQgMTMgMjQgMTYuMyAzLjcgMy40IDMuMiA2LjEgMi44IDkuNS0uNCAyLjgtOC40IDQwLjQtNTguNyA2NC43LTIuOSAxLjQtOCA0LjQgLjkgOS4zIDEzLjkgNy42IDIzLjEgNi44IDMwLjMgMTEuNCA2LjEgMy45IDIuNSAxMi40IDYuOSAxNS40IDUuNSAzLjggMjEuNi0uMyA0Mi4zIDYuNiAxNy40IDUuNyAyOC4xIDIyIDU5IDIyczQxLjgtMTYuMyA1OC45LTIyYzIwLjgtNi45IDM2LjktMi44IDQyLjMtNi42IDQuNC0zLjEgLjgtMTEuNSA2LjktMTUuNCA3LjItNC42IDE2LjQtMy44IDMwLjMtMTEuNSA4LjgtNC45IDMuOC03LjkgLjktOS40eiJdfSxJbWU9TkUsTm1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRoZW1laXNsZSIsaWNvbjpbNTEyLDUxMixbXSwiZjJiMiIsIk0yMDggODguM2MwLTEwIDYuMy0yMS43IDE3LjctMjEuNyAxMS4xIDAgMTcuNyAxMS43IDE3LjcgMjEuNyAwIDEwLjMtNi42IDIxLjctMTcuNyAyMS43LTExLjQgMC0xNy43LTExLjQtMTcuNy0yMS43em0zMDQgMTYwYzAgMzYtMTEuNCAxMDIuMy0zNi4zIDEyOS43LTIyLjkgMjQuOS04Ny40IDYxLjEtMTIwLjkgNzAuNmwtMS4xIC4zIDAgMzIuNmMwIDE2LjMtMTIuNiAzMC42LTI5LjEgMzAuNi0xMCAwLTE5LjQtNS43LTI0LjYtMTQuMy01LjQgOC42LTE0LjkgMTQuMy0yNC45IDE0LjNzLTE5LjQtNS43LTI0LjktMTQuM2MtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTEwLjMgMC0xOS40LTUuNy0yNC45LTE0LjMtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTE4LjkgMC0yOS40LTE1LjctMjkuNC0zMi45LTE2LjMgMTIuMy0zNS43IDE5LjQtNTYuNiAxOS40LTIyIDAtNDMuNC04LjMtNjAuMy0yMi45IDEwLjMtLjMgMjAuNi0yLjMgMzAuMy01LjctMjAuOS01LjctMzkuNC0xOC45LTUyLTM2LjMgMjEuNCA0LjYgNDYuMiAxLjcgNjcuMS0xMS4xLTIyLTIyLTU2LjYtNTguOS02OC42LTg3LjQtNS43LTEzLjQtNi45LTMxLjQtNi45LTQ1LjcgMC00OS43IDIwLjMtMTYwIDg2LjMtMTYwIDEwLjYgMCAxOC45IDQuOSAyMy4xIDE0LjkgMy43LTUuNCA3LjctMTAuNSAxMi0xNS40IDItMi42IDUuNy01LjQgNy4xLTguMyA4LTEyLjYgMTEuNy0yMS4xIDIxLjctMzQgMzIuMy00MS4xIDgxLjctNjkuNCAxMzQuOS02OS40IDYgMCAxMiAuMyAxNy43IDEuMSAxMC45LTExLjcgMjYtMTguMyA0MS43LTE4LjMgMTQuNiAwIDI5LjcgNiA0MCAxNi4zIC45IC45IDEuNCAyLjMgMS40IDMuNCAwIDMuNy0xMC4zIDEzLjQtMTIuOSAxNi4zIDQuMyAxLjQgMTUuNyA2LjkgMTUuNyAxMiAwIDIuOS0yLjkgNS4xLTQuNiA3LjEgMzEuNCAyNy43IDQ5LjQgNjcuMSA1Ni4zIDEwOCA0LjMtNS4xIDEwLjMtOC42IDE3LjEtOC42IDEwLjYgMCAyMC45IDcuMSAyOC42IDE0IDIwLjkgMTguNiAyNS43IDUzLjEgMjUuNyA3OS43ek0xODggODkuNGMwIDE4LjMgMTIuNiAzNy4xIDMyLjMgMzcuMXMzMi4zLTE4LjkgMzIuMy0zNy4xYzAtMTgtMTIuNi0zNi45LTMyLjMtMzYuOVMxODggNzEuNCAxODggODkuNHpNMjM3LjcgMTk0YzAtMTkuNyAzLjctMzkuMSA4LjYtNTguMy01MiA3OS41LTEzLjUgMTg0LjYgNjguOSAxODQuNiAyMS40IDAgNDIuNi03LjcgNjAtMjAgMi03LjQgMy43LTE0LjkgMy43LTIyLjYgMC0xNC4zLTYuMy0yMS40LTIwLjYtMjEuNC00LjYgMC05LjEgLjktMTMuNCAxLjctNjMuMyAxMi43LTEwNy4xIDMuNy0xMDcuMS02NHpNMTk2LjYgNDQ4LjljMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAgOS43LTIwIDIwLjlsMCAzMi42YzAgMTEuMSA4LjYgMjEuMSAyMCAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjEgMGMwLTExLjEtOC42LTIwLjktMjAtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLTEwIDIwLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjcgMGMwLTExLjEtOC45LTIwLjktMjAuMy0yMC45cy0yMC4zIDkuNy0yMC4zIDIwLjlsMCAzMi42YzAgMTEuMSA4LjkgMjEuMSAyMC4zIDIxLjFzMjAuMy0xMCAyMC4zLTIxLjFsMC0zMi42ek00MjEuNyAyODZjLTMwLjkgNTkuMS05MC4zIDEwMi42LTE1OC42IDEwMi42LTk2LjYgMC0xNjAuNi04NC42LTE2MC42LTE3Ni42IDAtMTYuOSAyLTMzLjQgNi00OS43LTIwIDMzLjctMjkuNyA3Mi42LTI5LjcgMTExLjQgMCA2MC4zIDI0LjkgMTIxLjcgNzEuNCAxNjAuOSA1LjEtOS43IDE0LjktMTYuMyAyNi0xNi4zIDEwIDAgMTkuNCA1LjcgMjQuNiAxNC4zIDUuNC04LjYgMTQuNi0xNC4zIDI0LjktMTQuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjktMTQuMyAyNC45LTE0LjNzMTkuNCA1LjcgMjQuOSAxNC4zYzUuMS04LjYgMTQuNi0xNC4zIDI0LjYtMTQuMyAxMC45IDAgMjAuOSA2LjYgMjUuNyAxNiA0My40LTM2LjMgNjguNi05MiA3MS40LTE0OC4zem0xMC42LTk5LjdjMC01My43LTM0LjYtMTA1LjctOTIuNi0xMDUuNy0zMC4zIDAtNTguNiAxNS4xLTc4LjkgMzYuOS0yMCA2Ni40LTI3LjQgMTM2LjYgNDEuNCAxMzYuNiAyOC44IDAgOTcuNC0yOC41IDg0LjMgMzYuOSAyOC45LTI2IDQ1LjctNjUuNyA0NS43LTEwNC42eiJdfSxGbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGFydC1sYW5nIixpY29uOls1MTIsNTEyLFtdLCJlNjkzIiwiTTM3OC42IDc4LjljLTIuOC0uMS01LjYtLjItOC41LS4ybC0yNjQuMSAwIDE0My4yLTcyYzcuNC00LjQgMTguOC02LjcgMzAuNC02LjcgMTMuNSAwIDI5LjQgOS4yIDM3IDE2LjhsNjIgNjIgMCAuMXpNMTA3LjMgOTYuNWwyNjIuOCAwYzE2IDAgMjUuNCAxLjQgMzUuNCA5LjNsMTA2LjUgMTA2LjQgMCAyMDguOC03OS4zIC43LTMyNS40LTMyNS4yek05Ni41IDM3M2wwLTI2Mi4yIDMyMy44IDMyMy44IC43IDc3LjQtMjEyLjIgMC05OC4xLTk4LjJDOTkuNCA0MDIuNSA5Ni41IDM5OC41IDk2LjUgMzczek03OC43IDEwNS4zbDAgMjY3LjdjMCAzLjMgLjEgNi4zIC4yIDkuMWwtNjItNjJDNi41IDMwOS4zIDAgMjk0LjMgMCAyNzkuNiAwIDI3Mi44IDMuOSAyNjIuMSA2LjcgMjU2bDcyLTE1MC43eiJdfSxPbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZGVwbG95ZG9nIixpY29uOls1MTIsNTEyLFtdLCJmMzhlIiwiTTM4Mi4yIDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTMxNy41IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTE4OC41IDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTEyMy44IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTQ0OCA5NmMxNy41IDAgMzIgMTQuNCAzMiAzMmwwIDI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkw2NCA0MTZjLTE3LjUgMC0zMi0xNC40LTMyLTMybDAtMjU2YzAtMTcuNSAxNC40LTMyIDMyLTMybDM4NCAwem0wLTMyTDY0IDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4TDAgMzg0YzAgMzUuMiAyOC44IDY0IDY0IDY0bDM4NCAwYzM1LjIgMCA2NC0yOC44IDY0LTY0bDAtMjU2YzAtMzUuMi0yOC44LTY0LTY0LTY0eiJdfSxSbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZmxpcGJvYXJkIixpY29uOls0NDgsNTEyLFtdLCJmNDRkIiwiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM1OC40IDIxMS4ybC04OS42IDAgMCA4OS42LTg5LjYgMCAwIDg5LjYtODkuNiAwIDAtMjY4LjggMjY4LjggMCAwIDg5LjZ6Il19LEJtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJidXktbi1sYXJnZSIsaWNvbjpbNTc2LDUxMixbXSwiZjhhNiIsIk0yODguMiAzMkMxMzMuNSAzMiA4IDEzMi4zIDggMjU2UzEzMy41IDQ4MCAyODguMiA0ODAgNTY4LjQgMzc5LjcgNTY4LjQgMjU2IDQ0Mi45IDMyIDI4OC4yIDMyek0yMDIuOCAzODkuMmwtMTM4LjUgMS40IDc3LjItMjkwLjcgMTMzLjQgMGM2My4yIDAgODQuOSAyOC42IDc4IDcyLjgtLjQgMi4zLS45IDQuNi0xLjUgNi45LTUuNi0xLjMtMTEuNC0xLjktMTcuMi0xLjktNDIuMyAwLTc2LjcgMzMuOS03Ni43IDc1LjcgMCAzNy4xIDI3LjEgNjggNjIuOSA3NC41LTE4LjIgMzcuMi01Ni4yIDYwLjktMTE3LjcgNjEuNXpNMzU4LjIgMjA3LjFsMzIgMC0yMi4yIDkwLjMtMzUuNCAwLTExLjItMzUuNi03LjggMzUuNi0zNy44IDAgMjYuNi05MC4zIDMxLjMgMCAxNSAzNi44IDkuNC0zNi44ek01MDQuMSAzODkuMmwtMTk3LjEgMCAxNS44LTYxLjJjMy44IC42IDcuNiAuOCAxMS41IC44IDQyLjMgMCA3Ni43LTMzLjkgNzYuNy03NS42IDAtMzIuNi0yMS02MC41LTUwLjQtNzEuMWwyMS4zLTgyLjQgOTIuNSAwLTUzIDIwNS40IDEwMy45IDAtMjEuMiA4NC4xek0yMTEuOSAyNjkuNGwtMjQuNyAwLTEzLjggNTYuNSAyNC43IDBjMTYuMSAwIDMyLjEtMy4yIDM3LjktMjYuNiA1LjYtMjIuMy04LTI5LjgtMjQuMS0yOS44ek0yMzMuMiAxNzBsLTIxLjMgMC0xMS43IDQ3LjcgMjEuNCAwYzE4IDAgMzUuNC0xNC42IDM5LjItMzAuMSA0LjYtMTguOS05LjUtMTcuNi0yNy42LTE3LjZ6Il19LEhtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3YXRjaG1hbi1tb25pdG9yaW5nIixpY29uOls1MTIsNTEyLFtdLCJlMDg3IiwiTTI1NiAxNmEyNDAgMjQwIDAgMSAwIDAgNDgwIDI0MCAyNDAgMCAxIDAgMC00ODB6TTEyMS43IDQyOS4xYy01MS42LTQwLjItODQuOS0xMDIuOC04NC45LTE3My4xIDAtMjEuNyAzLjItNDMuMyA5LjYtNjQuMWwxMDIuOS0xNy45LS4xIDExLTEzLjkgMnMtLjEgMTIuNS0uMSAxOS41YzAgMiAuNCA0IDEuMiA1LjhzMi4xIDMuNCAzLjcgNC42bDkuNSA3LjQtMjcuNyAyMDQuOXpNMjI3LjQgMTQ1LjlsOC41LTcuNnM2LjktNS40LS4xLTkuM2MtNy4yLTQtMzkuNS0zNC41LTM5LjUtMzQuNS01LjMtNS41LTguMy03LjMtMTUuNSAwIDAgMC0zMi4zIDMwLjUtMzkuNSAzNC41LTcuMSA0LS4xIDkuMy0uMSA5LjNsOC41IDcuNiAwIDQuNC03My41LTE5LjJjMzkuNi01Ni45IDEwNS41LTk0LjMgMTgwLTk0LjMgMzEuMyAwIDYyLjIgNi43IDkwLjYgMTkuNnM1My44IDMxLjggNzQuMyA1NS40bC0xOTMuNSAzNy43IDAtMy42em0zNC4xIDMyOS4zbC0zMy45LTI1MC45IDkuNS03LjRjMS42LTEuMiAyLjgtMi44IDMuNy00LjZzMS4zLTMuOCAxLjItNS44YzAtNy0uMS0xOS41LS4xLTE5LjVsLTEzLjktMi0uMS0xMC41IDI0MS43IDMxLjRjMy45IDE2LjQgNS44IDMzLjMgNS44IDUwLjEgMCAxMTkuMS05NS40IDIxNi4yLTIxMy44IDIxOS4xeiJdfSxxbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaGlwcyIsaWNvbjpbNjQwLDUxMixbXSwiZjQ1MiIsIk0yNTEuNiAxNTcuNmMwLTEuOS0uOS0yLjgtMi44LTIuOGwtNDAuOSAwYy0xLjYgMC0yLjcgMS40LTIuNyAyLjhsMCAyMDEuOGMwIDEuNCAxLjEgMi44IDIuNyAyLjhsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMjAxLjh6TTE1Ni41IDE2OGMtMTYuMS0xMS44LTM2LjMtMTcuOS02MC4zLTE4LTE4LjEtLjEtMzQuNiAzLjctNDkuOCAxMS40bDAtODEuMmMwLTEuOC0uOS0yLjctMi44LTIuN2wtNDAuOSAwQy45IDc3LjUgMCA3OC40IDAgODAuMkwwIDM1OS40YzAgMS45IC45IDIuOCAyLjcgMi44bDQxIDBjMS45IDAgMi44LS45IDIuOC0yLjhsMC0xMzYuMWMwLS44LTIuOC0yNyA0NS44LTI3IDQ4LjUgMCA0NS44IDI2LjEgNDUuOCAyN2wwIDEyMi42YzAgOSA3LjMgMTYuMyAxNi40IDE2LjNsMjcuMyAwYzEuOCAwIDIuNy0uOSAyLjctMi44bDAtMTM2LjFjMC0yMy40LTkuMy00MS44LTI4LTU1LjN6TTYzNC45IDI3OC4xYy02LjgtMTUuNy0xOC40LTI3LTM0LjktMzQuMWwtNTcuNi0yNS4zYy04LjYtMy42LTkuMi0xMS4yLTIuNi0xNi4xIDcuNC01LjUgNDQuMy0xMy45IDg0IDYuOCAxLjcgMSA0LS4zIDQtMi40bDAtNDQuN2MwLTEuMy0uNi0yLjEtMS45LTIuNi0xNy43LTYuNi0zNi4xLTkuOS01NS4xLTkuOS0yNi41IDAtNDUuMyA1LjgtNTguNSAxNS40LS41IC40LTI4LjQgMjAtMjIuNyA1My43IDMuNCAxOS42IDE1LjggMzQuMiAzNy4yIDQzLjZMNTgwLjQgMjg2YzExLjYgNS4xIDE1LjIgMTMuMyAxMi4yIDIxLjItMy43IDkuMS0xMy4yIDEzLjYtMzYuNSAxMy42LTI0LjMgMC00NC43LTguOS01OC40LTE5LjEtMi4xLTEuNC00LjQgLjItNC40IDIuM2wwIDM0LjRjMCAxMC40IDQuOSAxNy4zIDE0LjYgMjAuNyAxNS42IDUuNSAzMS42IDguMiA0OC4yIDguMiAxMi43IDAgMjUuOC0xLjIgMzYuMy00LjMgLjctLjMgMzYtOC45IDQ1LjYtNDUuOCAzLjUtMTMuNSAyLjQtMjYuNS0zLjEtMzkuMXpNMzc2LjIgMTQ5LjhjLTMxLjcgMC0xMDQuMiAyMC4xLTEwNC4yIDEwMy41bDAgMTgzLjVjMCAuOCAuNiAyLjcgMi43IDIuN2w0MC45IDBjMS45IDAgMi44LS45IDIuOC0yLjdsMC04OC44YzE2LjUgMTIuNyAzNS44IDE5LjEgNTcuNyAxOS4xIDYwLjUgMCAxMDguNy00OC41IDEwOC43LTEwOC43IC4xLTYwLjMtNDguMi0xMDguNi0xMDguNi0xMDguNnptMCA0Ni42YTYyLjIgNjIuMiAwIDEgMSAwIDEyNC4zIDYyLjIgNjIuMiAwIDEgMSAwLTEyNC4zek0yMjguMyA3Mi41Yy0xNS45IDAtMjguOCAxMi45LTI4LjkgMjguOSAwIDE1LjYgMTIuNyAyOC45IDI4LjkgMjguOXMyOC45LTEzLjEgMjguOS0yOC45YzAtMTYuMi0xMy0yOC45LTI4LjktMjguOXoiXX0sVm1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNsb3VkdmVyc2lmeSIsaWNvbjpbNjQwLDUxMixbXSwiZjM4NSIsIk0xNjAuNiAzMDRjOC4yIDY4LjUgNjcuNCAxMTUuNSAxNDYgMTExLjMgNTEuMiA0My4zIDEzNi44IDQ1LjggMTg2LjQtNS42IDY5LjIgMS4xIDExOC41LTQ0LjYgMTMxLjUtOTkuNSAxNC44LTYyLjUtMTguMi0xMzIuNS05Mi4xLTE1NS4xLTMzLTg4LjEtMTMxLjQtMTAxLjUtMTg2LjUtODUtNTcuMyAxNy4zLTg0LjMgNTMuMi05OS4zIDEwOS43LTcuOCAyLjctMjYuNSA4LjktNDUgMjQuMSAxMS43IDAgMTUuMiA4LjkgMTUuMiAxOS41bDAgMjAuNGMwIDEwLjctOC43IDE5LjUtMTkuNSAxOS41bC0yMC4yIDBjLTEwLjcgMC0xOS41LTYtMTkuNS0xNi43bDAtNi42LTQ2LjggMGMtMy44IDAtMTAuOCA0LjMtMTAuOCAxMS45bDAgNDAuNGMwIDYuNCA1LjMgMTEuOCAxMS43IDExLjhsNDguOSAwIDAtLjF6TTM4OCAzMTJjLTEwLjcgNDYuMyAyMS43IDcyLjQgNTUuMyA4Ni44LTEwNy4yIDMzLjgtMTcxLjYtNTAuOC0xMzUuMy0xMTAuOC0zMy4yIDIxLjYtMzMuNyA3MS4yLTI5LjIgOTIuOS0xNy45LTEyLjQtNTMuOC0zMi40LTU3LjQtNzkuOC0zLTM5LjkgMjEuNS03NS43IDU3LTkzLjkgMzAuNi0xNS44IDEwMy41LTguNSAxMzMuNiA0MC44LTE0LjEtNDgtNTMuOC03MC4xLTEwMS44LTc0LjggMzAuOS0zMC43IDY0LjQtNTAuMyAxMTQuMi00My43IDY5LjggOS4zIDEzMy4yIDgyLjggNjcuNyAxNTAuNSAzNS0xNi4zIDQ4LjctNTQuNCA0Ny41LTc2LjlsMTAuNSAxOS42YzExLjggMjIgMTUuMiA0Ny42IDkuNCA3Mi05LjIgMzktNDAuNiA2OC44LTc5LjcgNzYuNS0zMi4xIDYuMy04My4xLTUuMS05MS44LTU5LjJ6TTE0MCAyMDhsLTM5LjggMGMtOC45IDAtMTYuMi03LjMtMTYuMi0xNi4ybDAtMzkuNmMwLTguOSA3LjMtMTYuMiAxNi4yLTE2LjJsMzkuOCAwYzguOSAwIDE2LjIgNy4zIDE2LjIgMTYuMmwwIDM5LjZjMCA4LjktNy4zIDE2LjItMTYuMiAxNi4yek0yMi4xIDE2OGMtNS42IDAtMTAuMS00LjUtMTAuMS0xMC4xbDAtMjcuOGMwLTUuNiA0LjUtMTAuMSAxMC4xLTEwLjFsMjcuNyAwYzUuNSAwIDEwLjEgNC41IDEwLjEgMTAuMWwwIDI3LjhjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xbC0yNy43IDB6TTE4MCAxNDIuN2wwLTIxLjRjMC01LjEgNC4yLTkuMyA5LjMtOS4zbDIxLjQgMGM1LjEgMCA5LjMgNC4yIDkuMyA5LjNsMCAyMS40YzAgNS4xLTQuMiA5LjMtOS4zIDkuM2wtMjEuNCAwYy01LjEgMC05LjMtNC4yLTkuMy05LjN6TTY4IDIzNS41bDAgMjVjMCA2LjMtNS4xIDExLjUtMTEuNCAxMS41bC0yNS4yIDBjLTYuMyAwLTExLjQtNS4yLTExLjQtMTEuNWwwLTI1YzAtNi4zIDUuMS0xMS41IDExLjQtMTEuNWwyNS4xIDBjNi40IDAgMTEuNSA1LjIgMTEuNSAxMS41eiJdfSxqbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29vZHJlYWRzIixpY29uOls0NDgsNTEyLFtdLCJmM2E4IiwiTTI5OS45IDE5MS4yYzUuMSAzNy4zLTQuNyA3OS0zNS45IDEwMC43LTIyLjMgMTUuNS01Mi44IDE0LjEtNzAuOCA1LjctMzcuMS0xNy4zLTQ5LjUtNTguNi00Ni44LTk3LjIgNC4zLTYwLjkgNDAuOS04Ny45IDc1LjMtODcuNSA0Ni45LS4yIDcxLjggMzEuOCA3OC4yIDc4LjN6TTQ0OCA4OGwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6TTMzMCAzMTMuMnMtLjEtMzQtLjEtMjE3LjNsLTI5IDAgMCA0MC4zYy0uOCAuMy0xLjItLjUtMS42LTEuMi05LjYtMjAuNy0zNS45LTQ2LjMtNzYtNDYtNTEuOSAuNC04Ny4yIDMxLjItMTAwLjYgNzcuOC00LjMgMTQuOS01LjggMzAuMS01LjUgNDUuNiAxLjcgNzcuOSA0NS4xIDExNy44IDExMi40IDExNS4yIDI4LjktMS4xIDU0LjUtMTcgNjktNDUuMiAuNS0xIDEuMS0xLjkgMS43LTIuOSAuMiAuMSAuNCAuMSAuNiAuMiAuMyAzLjggLjIgMzAuNyAuMSAzNC41LS4yIDE0LjgtMiAyOS41LTcuMiA0My41LTcuOCAyMS0yMi4zIDM0LjctNDQuNSAzOS41LTE3LjggMy45LTM1LjYgMy44LTUzLjItMS4yLTIxLjUtNi4xLTM2LjUtMTktNDEuMS00MS44LS4zLTEuNi0xLjMtMS4zLTIuMy0xLjNsLTI2LjggMGMuOCAxMC42IDMuMiAyMC4zIDguNSAyOS4yIDI0LjIgNDAuNSA4Mi43IDQ4LjUgMTI4LjIgMzcuNCA0OS45LTEyLjMgNjcuMy01NC45IDY3LjQtMTA2LjN6Il19LFVtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0aWRhbCIsaWNvbjpbNjQwLDUxMixbXSwiZTdkYyIsIk0xMDcuMiA0OGwtMS4zIDBjLTMyLjMgMzMuMS02NS40IDY1LjUtOTggOTguNS0yLjYgMi44LTYuMSA1LjEtNy45IDguNiAzNS42IDM1LjQgNzEgNzEgMTA2LjYgMTA2LjQgMzUuNC0zNS4zIDcwLjctNzAuOCAxMDYuMS0xMDYuMWwwLTEuMy03My4yLTczLjJDMTI4LjggNjkuOCAxMTcuMyA1OS42IDEwNy4yIDQ4em0yMTMuNSAwbC0xLjMgMGMtMzQuOSAzNi4xLTcxLjUgNzEtMTA2LjMgMTA3LjIgMzUuOSAzNS4xIDcxIDcxIDEwNi43IDEwNi4zIDM0LjMtMzQuMSA2OC40LTY4LjQgMTAyLjYtMTAyLjQgMS41LTEuNSAzLjMtMi44IDQuMS00LjgtMzQuNi0zMy44LTY4LjQtNjguMi0xMDIuNi0xMDIuMS0xLjMtMS4zLTIuMy0yLjYtMy4zLTQuMXptMjEzLjUgMGwtMS4zIDBjLTE3LjIgMTgtMzUuMSAzNS4zLTUyLjYgNTMtMTcuOSAxNy43LTM1LjQgMzUuNy01My41IDUzLjMgLjggMi4zIDMgMy42IDQuNiA1LjVMNTMzLjMgMjYxLjVjMzYuMS0zNC45IDcwLjgtNzEuMiAxMDYuNy0xMDYuMS0uNS0yLjItMi42LTMuNS00LTVMNTU1LjggNzAuMmMtNy4xLTcuNC0xNC45LTE0LjItMjEuNS0yMi4yek0zMTkuNiAyNjEuN2MtMzQuOSAzNS4xLTcwIDcwLTEwNC45IDEwNC45LS4zIC43LS43IDEuNy0xIDIuMyAyNCAyMy43IDQ3LjcgNDcuNSA3MS41IDcxLjMgMTEuOCAxMS4zIDIyLjggMjMuNSAzNC45IDM0LjQgOC40LTcuNCAxNi40LTE2LjQgMjQuNy0yNC4zIDI1LjUtMjUuMyA1MS01MSA3Ni41LTc2LjMgMS44LTIuMiA0LjMtMy42IDUuNS02LjMtMzUuNC0zNC45LTcwLjUtNzAuMi0xMDUuNi0xMDUuNGwtMS41LS43eiJdfSxXbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5pdHkiLGljb246WzQ0OCw1MTIsW10sImUwNDkiLCJNMjQzLjYgOTEuNmw4MC4xIDQ2LjhjMi45IDEuNiAzIDYuMiAwIDcuOGwtOTUuMiA1NS42Yy0yLjkgMS43LTYuMyAxLjYtOSAwbC05NS4yLTU1LjZjLTIuOS0xLjYtMy02LjMgMC03LjhsODAuMS00Ni44IDAtOTEuNi0yMDQuNCAxMTkuNCAwIDIzOC44IDc4LjQtNDUuOCAwLTkzLjZjLS4xLTMuMyAzLjgtNS43IDYuNy0zLjlsOTUuMiA1NS42YzIuOSAxLjcgNC41IDQuNyA0LjUgNy44bDAgMTExLjJjLjEgMy4zLTMuOCA1LjctNi43IDMuOUw5OCAzNDYuOCAxOS42IDM5Mi42IDIyNCA1MTIgNDI4LjQgMzkyLjYgMzUwIDM0Ni44IDI2OS45IDM5My42Yy0yLjggMS43LTYuOC0uNS02LjctMy45bDAtMTExLjJjMC0zLjMgMS44LTYuMyA0LjUtNy44TDM2Mi45IDIxNWMyLjgtMS43IDYuOCAuNSA2LjcgMy45bDAgOTMuNiA3OC40IDQ1LjggMC0yMzguOC0yMDQuNC0xMTkuNCAwIDkxLjZ6Il19LEdtZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZW5jZW50LXdlaWJvIixpY29uOlszMjAsNTEyLFtdLCJmMWQ1IiwiTTQwLjUgNDk1LjhjMS40IDE5LjktMjcuNiAyMi4yLTI5LjcgMi45LTExLjYtMTI5LjkgMzEuMS0yMzkuNSAxMDEuNC0zMTMuMi0xNS42LTM0IDkuMi03Ny4xIDUwLjYtNzcuMSAzMC4zIDAgNTUuMSAyNC42IDU1LjEgNTUuMSAwIDQ0LTQ5LjUgNzAuOC04Ni45IDQ1LjEtNjUuNyA3MS4zLTEwMS40IDE2OS44LTkwLjUgMjg3LjJ6TTE2MC4yIC4xYy0xMjUuOSAwLTIwNC4zIDEzNC4yLTE0OC4zIDI0Mi4zIDguNyAxNy40IDM1LjMgNC41IDI2LjMtMTMuNC00Ni4zLTkyLjYgMjEtMTk5LjIgMTIyLTE5OS4yIDc1LjQgMCAxMzYuOSA2MS40IDEzNi45IDEzNi45IDAgOTAuOC04Ni45IDE1My45LTE2Ny43IDEzMy4xLTE5LjEtNC4xLTI1LjYgMjQuNC02LjYgMjkuMSAxMTAuNyAyMy4yIDIwNC02MCAyMDQtMTYyLjMgMC05MS45LTc0LjYtMTY2LjUtMTY2LjYtMTY2LjV6Il19LFltZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmcmVlLWNvZGUtY2FtcCIsaWNvbjpbNTc2LDUxMixbXSwiZjJjNSIsIk05Ny40IDk2LjJjMTAuNC0xMC42IDE2LTE3LjEgMTYtMjEuOSAwLTIuOC0xLjktNS41LTMuOC03LjQtMi40LTEuOC01LjQtMi44LTguNC0yLjgtOC41IDAtMjAuOSA4LjgtMzUuOCAyNS43LTQxLjUgNDcuMy02Mi43IDkzLjEtNjEuOCAxNjAuNlMyMSAzNjcuMyA1Ny42IDQxMi4yYzE4LjggMjMuNiAzMy4yIDM1LjggNDMuNSAzNS44IDMuMi0uMyA2LjEtMS42IDguNC0zLjggMS45LTIuOCAzLjgtNS42IDMuOC04LjQgMC01LjYtMy45LTEyLjItMTMuMi0yMC42LTQ0LjUtNDIuMy02Ny4zLTk3LTY3LjUtMTY1LS4yLTYxLjQgMjEuNi0xMTIuNCA2NC44LTE1NHpNMjM5LjYgNDIwLjFjLjYgLjQgLjkgLjYgLjkgLjZsLS45LS42em05My44IC42bC4yLS4xYy0uMiAuMS0uMyAuMi0uMiAuMXptMy4xLTE1OC4yYy0xNi4yLTQuMiA1MC40LTgyLjktNjguMS0xNzcuMiAwIDAgMTUuNSA0OS40LTYyLjggMTU5LjYtNzQuMyAxMDQuNCAyMy41IDE2OC43IDM0IDE3NS4yLTYuNy00LjMtNDcuNC0zNS43IDkuNi0xMjguNiAxMS0xOC4zIDI1LjUtMzQuOSA0My41LTcyLjIgMCAwIDE1LjkgMjIuNCA3LjYgNzEuMS0xMi41IDczLjYgNTMuOCA1Mi41IDU0LjggNTMuNSAyMi44IDI2LjgtMTcuNyA3My41LTIxLjYgNzYuNiA1LjUtMy43IDExNy43LTc4IDMzLTE4OC4xLTYgNi0xMy44IDM0LjItMzAgMzAuMXpNNTExIDg5LjdjLTE0LjktMTYuOS0yNy40LTI1LjctMzUuOS0yNS43LTMgLjEtNS45IDEuMS04LjQgMi44LTEuOSAxLjktMy44IDQuNy0zLjggNy40IDAgNC44IDUuNiAxMS4zIDE2IDIxLjkgNDMuMiA0MS42IDY1IDkyLjYgNjQuOCAxNTQuMS0uMiA2OC0yMyAxMjIuNi02Ny41IDE2NS05LjMgOC40LTEzLjIgMTQuOS0xMy4yIDIwLjYgMCAyLjcgMS45IDUuNiAzLjggOC40IDIuMyAyLjIgNS4yIDMuNiA4LjQgMy44IDEwLjMgMCAyNC43LTEyLjEgNDMuNS0zNS44IDM2LjYtNDQuOSA1My4xLTk0LjQgNTQuMS0xNjEuOVM1NTIuNSAxMzcgNTExIDg5Ljd6Il19LFptZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ4LXR3aXR0ZXIiLGljb246WzQ0OCw1MTIsW10sImU2MWIiLCJNMzU3LjIgNDhMNDI3LjggNDggMjczLjYgMjI0LjIgNDU1IDQ2NCAzMTMgNDY0IDIwMS43IDMxOC42IDc0LjUgNDY0IDMuOCA0NjQgMTY4LjcgMjc1LjUtNS4yIDQ4IDE0MC40IDQ4IDI0MC45IDE4MC45IDM1Ny4yIDQ4ek0zMzIuNCA0MjEuOGwzOS4xIDAtMjUyLjQtMzMzLjgtNDIgMCAyNTUuMyAzMzMuOHoiXX0sWG1lPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN0aWNrZXItbXVsZSIsaWNvbjpbNTc2LDUxMixbXSwiZjNmNyIsIk01NjEuNyAxOTkuNmwwIDB6bS02LjItNzcuNGMtNy43LTIyLjMtNS4xLTcuMi0xMy40LTM2LjktMS42LTYuNS0zLjYtMTQuNS02LjItMjAtNC40LTguNy00LjYtNy41LTQuNi05LjUgMC01LjMgMzAuNy00NS4zIDE5LTQ2LjktNS43LS42LTEyLjIgMTEuNi0yMC42IDE3LTguNiA0LjItOCA1LTEwLjMgNS0yLjYgMC01LjctMy02LjItNS0yLTUuNyAxLjktMjUuOS0zLjYtMjUuOS0zLjYgMC0xMi4zIDI0LjgtMTcgMjUuOC01LjIgMS4zLTI3LjktMTEuNC03NS4xIDE4LTI1LjMgMTMuMi04Ni45IDY1LjItODcgNjUuMy02LjcgNC43LTIwIDQuNy0zNS41IDE2LTQ0LjQgMzAuMS0xMDkuNiA5LjQtMTEwLjcgOS0xMTAuNi0yNi44LTEyOC0xNS4yLTE1OSAxMS41LTIwLjggMTcuOS0yMy43IDM2LjUtMjQuMiAzOC45LTQuMiAyMC40IDUuMiA0OC4zIDYuNyA2NC4zIDEuOCAxOS4zLTIuNyAxNy43IDcuNyA5OC4zIC41IDEgNC4xIDAgNS4xIDEuNSAwIDguNC0zLjggMTIuMS00LjEgMTMtMS41IDQuNS0xLjUgMTAuNSAwIDE2IDIuMyA4LjIgOC4yIDM3LjIgOC4yIDQ2LjkgMCA0MS44IC40IDQ0IDIuNiA0OS40IDMuOSAxMCAxMi41IDkuMSAxNyAxMiAzLjEgMy41LS41IDguNSAxIDEyLjUgLjUgMiAzLjYgNCA2LjIgNSA5LjIgMy42IDI3IC4zIDI5LjktMi41IDEuNi0xLjUgLjUtNC41IDMuMS01IDUuMSAwIDEwLjgtLjUgMTQuNC0yLjUgNS4xLTIuNSA0LjEtNiAxLjUtMTAuNS0uNC0uOC03LTEzLjMtOS44LTE2LTIuMS0yLTUuMS0zLTcuMi00LjUtNS44LTQuOS0xMC4zLTE5LjQtMTAuMy0xOS41LTQuNi0xOS40LTEwLjMtNDYuMy00LjEtNjYuOCA0LjYtMTcuMiAzOS41LTg3LjcgMzkuNi04Ny44IDQuMS02LjUgMTctMTEuNSAyNy4zLTcgNiAxLjkgMTkuMyAyMiA2NS40IDMwLjkgNDcuOSA4LjcgOTcuNC0yIDExMi4yLTIgMi44IDItMS45IDEzLS41IDM4LjkgMCAyNi40LS40IDEzLjctNC4xIDI5LjktMi4yIDkuNyAzLjQgMjMuMi0xLjUgNDYuOS0xLjQgOS44LTkuOSAzMi43LTguMiA0My40IC41IDEgMSAyIDEuNSAzLjUgLjUgNC41IDEuNSA4LjUgNC42IDEwIDcuMyAzLjYgMTItMy41IDkuOCAxMS41LS43IDMuMS0yLjYgMTIgMS41IDE1IDQuNCAzLjcgMzAuNiAzLjQgMzYuNSAuNSAyLjYtMS41IDEuNi00LjUgNi40LTcuNCAxLjktLjkgMTEuMy0uNCAxMS4zLTYuNSAuMy0xLjgtOS4yLTE5LjktOS4zLTIwLTIuNi0zLjUtOS4yLTQuNS0xMS4zLTgtNi45LTEwLjEtMS43LTUyLjYgLjUtNTkuNCAzLTExIDUuNi0yMi40IDguNy0zMi40IDExLTQyLjUgMTAuMy01MC42IDE2LjUtNjguMyAuOC0xLjggNi40LTIzLjEgMTAuMy0yOS45IDkuMy0xNyAyMS43LTMyLjQgMzMuNS00Ny40IDE4LTIyLjkgMzQtNDYuOSA1Mi02OS44IDYuMS03IDguMi0xMy43IDE4LTggMTAuOCA1LjcgMjEuNiA3IDMxLjkgMTcgMTQuNiAxMi44IDEwLjIgMTguMiAxMS44IDIyLjkgMS41IDUgNy43IDEwLjUgMTQuOSA5LjUgMTAuNC0yIDEzLTIuNSAxMy40LTIuNSAyLjYtLjUgNS43LTUgNy4yLTggMy4xLTUuNSA3LjItOSA3LjItMTYuNSAwLTcuNy0uNC0yLjgtMjAuNi01Mi45eiJdfSxLbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHdpdGNoIixpY29uOls0NDgsNTEyLFtdLCJmMWU4IiwiTTM1OS40IDEwMy41bC0zOC42IDAgMCAxMDkuNyAzOC42IDAgMC0xMDkuN3pNMjUzLjIgMTAzbC0zOC42IDAgMCAxMDkuOCAzOC42IDAgMC0xMDkuOHpNODkgMGwtOTYuNSA5MS40IDAgMzI5LjIgMTE1LjggMCAwIDkxLjQgOTYuNS05MS40IDc3LjMgMCAxNzMuOC0xNjQuNiAwLTI1Ni0zNjYuOSAwek00MTcuMyAyMzcuOGwtNzcuMiA3My4xLTc3LjIgMC02Ny42IDY0IDAtNjQtODYuOSAwIDAtMjc0LjMgMzA4LjkgMCAwIDIwMS4yeiJdfSxRbWU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2lja3N0YXJ0ZXItayIsaWNvbjpbNDQ4LDUxMixbXSwiZjNiYyIsIk0zNTYuNyAyNTYuMmw0MC44LTQwLjVjNDIuMi00MS45IDQyLjItMTEwLjMgMC0xNTIuMXMtMTExLTQxLjktMTUzLjIgMEwyMjkuMyA3OC40QzIwOS42IDUwLjMgMTc3LjEgMzIgMTQwLjIgMzIgODAuNSAzMiAzMiA4MC4yIDMyIDEzOS41bDAgMjMzYzAgNTkuNCA0OC41IDEwNy41IDEwOC4yIDEwNy41IDM3LjEgMCA2OS4zLTE4LjMgODktNDYuNGwxNC45IDE0LjdjNDIuMiA0MS45IDExMSA0MS45IDE1My4yIDBzNDIuMi0xMTAuMyAwLTE1Mi4xbC00MC44LTQwIC4xIDB6Il19LEptZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcml0aWNhbC1yb2xlIixpY29uOls0NDgsNTEyLFtdLCJmNmM5IiwiTTIyNS44IDBjLjMgLjIgMjE2LjYgMTI0LjUgMjE3LjEgMTI0LjcgMyAxLjIgMy43IDMuNSAzLjcgNi42LS4xIDgzLjQtLjEgMTY2LjkgMCAyNTAuNCAuMSAxLjItLjIgMi40LS44IDMuNHMtMS41IDEuOS0yLjYgMi40Yy0yMS40IDEyLTIwNy45IDExOC4zLTIxOC45IDEyNC42bC0zIDBjLTc5LjMtNDUuNy0yMTguMy0xMjUuNC0yMTguNC0xMjUuNS0uNi0uMy0xLjEtLjctMS40LTEuM3MtLjUtMS4yLS40LTEuOWMwLS45IDAtMjI1LjktLjEtMjUzLjEtLjEtMSAuMi0yIC43LTIuOXMxLjMtMS42IDIuMi0yQzI3LjIgMTEyLjEgMjEzLjIgNiAyMjQuMSAwbDEuOCAwek0yMTUuNCAyMC40bC0uMi0uMmMtNjQuNyAzNi45LTEyOS41IDczLjctMTk0LjIgMTEwLjYgMCAuMSAuMSAuMiAuMSAuNEw1MiAxNDIuOWMtNy43IDYtOC4zIDYtMTAuNiA1LjEtLjEgMC0yNC4yLTkuMy0yNi44LTEwbDAgMjMwLjRjLjktMS40IDY0LjEtMTEwLjkgNjQuMS0xMTEgMS42LTIuOCAzLTEuOSA5LjEtMS41IDEuNCAuMSAxLjUgLjIgLjggMS40LTQxLjIgNzEuMy0zNi40IDYzLTY3LjUgMTE2LjktLjggMS40LS42IDEuMSAxLjIgMS4xbDE4Ni41IDBjMS40IDAgMS43LS4yIDEuNy0xLjZsMC04LjljMC0xLjMgMi40LS44LTE4LjQtMS03LjUtLjEtMTQuMS0zLjItMjEuNC0xMi43LTcuNC05LjctMTQuNi0xOS40LTIxLjgtMjkuMi0yLjMtMy4xLTMuNC0yLjQtMTYuOC0yLjQtMS44IDAtMS44IDAtMS44IDEuOCAuMyAyNi4yIC4yIDI1LjMgMSAzMi43IC41IDQuNCAyLjIgNC4yIDkuNyA0LjggMy4xIC4zIDMuOSA0LjEgLjUgNC45LTEuNiAuNC0zMS42IC41LTMzLjctLjEtLjUtLjEtMS0uNS0xLjMtLjlzLS41LTEtLjQtMS42IC4zLTEuMSAuNi0xLjUgLjktLjcgMS40LS44YzMuMy0uOCA2LjIgLjggNi43LTQuNCAxLjMtMTMuNyAxLjItOSAxLjEtNzkuNCAwLTEwLjgtLjQtMTIuNi01LjQtMTMuNi0xLjItLjItMy41LS4yLTQuNy0uNi0yLjktMS0yLTQuOCAxLjgtNC44IDMzLjcgMCA0Ni4xLTEuMSA1Ni4xIDQuOSA3LjcgNC42IDEyIDExLjUgMTIuNSAyMC40IC45IDE0LjYtNi41IDIyLjMtMTUgMzIuNi0uMiAuMS0uMyAuMy0uNCAuNXMtLjEgLjQtLjEgLjYgMCAuNCAuMSAuNiAuMiAuNCAuNCAuNWMyLjYgMy4yIDUgNi42IDcuNyA5LjggMjcuNiAzMy4yIDI0LjEgMzAuNSA0MS4zIDMzLjEgLjkgLjEgMS0uNCAxLTEuMmwwLTExYzAtMSAuMy0xLjQgMS40LTEuMyA3LjggMS4yIDE1LjggMS4xIDIzLjYtLjMgMS4xLS4xIDEuNSAuMiAxLjUgMS4zIDAgLjEgLjkgMjYuNyAuOSAyNi44IDAgMS41IC43IDEuNiAxLjkgMS42bDE4Ni43IDBjLTI3LjItNDctNTQuMi05NC04MS4yLTE0MC44IDIuMy0uNy0uNCAwIDYuNy0xLjQgMi0uNCAyLjEtLjQgMy4xIDEuNCA3LjMgMTIuNiA3Ny4zIDEzNCA3Ny40IDEzNC4xbDAtMjMwLjRjLTEuNyAuNS0xMDMuMyAzOC43LTEwNS44IDM5LjctMS4xIC40LTEuNSAuMi0xLjktLjktLjYtMS45LTEuMy0zLjgtMi4xLTUuNi0uMy0uOC0uMS0xLjEgLjYtMS40IC4xIDAgOTUuNS0zNS44IDEwMy0zOC44LTY1LjQtMzcuNi0xMzAuNi03NS0xOTYtMTEyLjZsODYuOCAxNTAuNC0uMyAuM2MtOS42LS45LTEwLjUtMS42LTExLjgtMy45LTEtMS43LTczLjUtMTI3LjctODItMTQyLjItOS4xIDE0LjctODMuNiAxNDYuMi04NS40IDE0Ni4zLTIuOSAuMi01LjkgLjEtOS4yIC4xIDI4LjgtNDkuOCA1Ny42LTk5LjUgODYuMi0xNDlsMCAwem01MS45IDEyOS45YzEuOS0uMSAzLjctLjQgNS41LS44IDEuNy0uMyAyLjUgLjIgMi42IDEuOSAwIC4xIC4xIDE5LjEtLjkgMjAuNXMtMS45IDEuMi0yLjYtLjJjLTUtOS43IDYuMi05LjctMzkuMS0xMi0uNyAwLTEgLjItMSAuOSAwIC4xIDMuNyAxMjIgMy43IDEyMi4xIDAgLjkgLjUgMS4yIDEuMiAxLjUgMyAxLjIgNS45IDIuNSA4LjcgNCA3LjMgNC4zIDExLjQgMTAuOCAxMi40IDE5LjMgMS40IDExLjgtMi44IDM1LjgtMzIuMiAzNy4xLTIuOCAuMS0yOC4zIDEuMS0zNC4xLTIzLjMtNC43LTE5LjMgOC4zLTMyLjcgMTkuOS0zNi40IC42LS4xIDEuMi0uNCAxLjUtLjlzLjUtMS4xIC41LTEuN2MuMS01LjYgMy0xMDcuMSAzLjctMTIxLjMgMC0xLjEtLjYtMS4yLTEuNC0xLjEtMzIuMyAuNS0zNi43LS4zLTQwLjIgOC41LTIuNCA2LjItNC4xIDEuMy00IC4yIDEuMS02IDIuMi0xMiAzLjMtMTggLjQtMi4xIDEuNC0yLjYgMy40LTEuOSA1LjYgMi4xIDYuNyAxLjcgMzcuMiAxLjkgMS43IDAgMS44LS4xIDEuOC0xLjggLjctMjcuNSAuNi0yMi42IDEtMjkuNiAuMS0uNi0uMS0xLjItLjMtMS43cy0uNy0uOS0xLjMtMS4xYy01LjYtMi45LTguOC03LjYtOC45LTEzLjktLjQtMTQuOCAxNy43LTIxLjcgMjcuNC0xMS41IDYuOCA3LjIgNS44IDE4LjktMi41IDI0LjItLjggLjQtMS40IDEuMS0xLjggMS44cy0uNiAxLjYtLjQgMi41YzAgLjYtLjEtNC4zIDEgMzAgMCAuOSAuNCAxLjEgMS4yIDEuMSAuMSAwIDIzLS4xIDM0LjUtLjRsMC0uMXpNNjguMyAxNDEuN2MxOS44LTQuNSAzMi43LS42IDUyLjUgMS43IDIuOCAuMyAzLjcgMS4yIDMuNiA0LS4yIDUtMS4yIDIyLjMtMS4yIDIzLjEgMCAuNS0uMiAxLS41IDEuNHMtLjcgLjctMS4yIC45Yy00LjEgMS43LTMuNi00LjQtNC03LjMtMy4xLTIyLjQtNzMuOS0zMi43LTc0LjYgMjUuNC0uMyAyMy45IDE3IDUzLjYgNTQuMSA1MC45IDI3LjItMiAxOS0yMC4yIDI0LjgtMjAuNSAuNC0uMSAuOSAwIDEuMyAuMXMuOCAuNCAxLjEgLjcgLjUgLjcgLjYgMS4yIC4xIC45IDAgMS4zYy0xLjggMTAuOC0zLjQgMTktMy40IDE5LjItMS41IDkuMi04Ni43IDIyLjEtOTMuNC00Mi4xLTIuNy0yNS44IDEwLjQtNTMuNCA0MC4zLTYwLjJ6bTgwIDg3LjdsLTE5LjUgMGMtLjYgMC0xLjItLjEtMS42LS40cy0uOC0uOC0xLTEuNGMyLjQtMy44IDUuOSAuOSA1LjktNi4xLS4xLTI1LjggLjItMzggLjItNDAuMSAwLTMuNC0uNS00LjYtMy4zLTQuOS03LS43LTMuMS0zLjQtMS4xLTMuNCAxMS44LS4xIDIyLjYtLjIgMzAgLjcgOC44IDEuMSAxNi43IDEyLjYgNy45IDIyLjYtMiAyLjItNCA0LjQtNi4xIDYuNyAxIDEuMiA2LjkgOC44IDE3LjMgMTkuNyAyLjcgMi44IDYuMiAzLjUgOS45IDMuMSAuNiAwIDEuMS0uMiAxLjUtLjZzLjctLjkgLjctMS41Yy4zLTMuNCAuMyA0LjcgLjQtNDAuNiAwLTUuNi0uMy02LjYtMy4yLTYuOC00LS40LTQtMi4zLS43LTMuNGwxOS4xLS4xYy4zIDAgNC41IC41IDEgMy40IDAgMC0uMiAwLS4yIDAtMy42IC4zLTMuOSAxLTQgNC42LS4zIDQzLjkgLjEgNDAuMiAuNCA0Mi44IC4xIC44IC4zIDIuMiA1LjEgMi4xIDIuNSAwIDMuOSAzLjQgMCAzLjQtMTAuNCAuMS0yMC43IDAtMzEuMSAuMS0xMC43IDAtMTMuNS02LjItMjQuMi0yMC44LTEuNi0yLjItOC4zLTIuNC04LjItLjQgLjkgMTYuNSAwIDE3LjggNCAxNy43IDQuOC0uMSA0LjcgMy42IC44IDMuNWwuMSAwem0yNzUtMTAuMWMtMS4yIDcuMSAuMiAxMC40LTUuMyAxMC4zLTYxLjUtLjQtNDcuOC0uMi01MC43LS4zLTEuMi0uMS0yLjQtLjQtMy42LS43LTIuNS0uNiAxLjUtMS4yLS40LTUuNi0xLjQtMy40LTIuOC02LjgtNC4xLTEwLjItLjEtLjQtLjQtLjgtLjctMS4xcy0uOC0uNC0xLjMtLjRjLTQuOS0uMi05LjctLjItMTQuNiAuMS0uMyAwLS42IC4yLS45IC4zcy0uNSAuNC0uNyAuN2MtMS42IDMuNi0zLjEgNy4zLTQuNSAxMS0xLjMgMy4yIDcuOSAxLjMgMTIuMiAyLjIgMyAuNiA0LjUgMy43IC43IDMuN2wtMjYuNCAwYy0yLjkgMC0zLjEtMy4yLS43LTMuMiAxLjIgLjEgMi40LS4yIDMuNS0uOXMxLjktMS41IDIuNC0yLjZjMS41LTMgMi44LTYgNC4xLTkuMSAxOC4yLTQyLjEgMTcuMS00MC4yIDE4LjQtNDEuNiAuMi0uMiAuNC0uNCAuNy0uNnMuNi0uMiAuOC0uMiAuNiAuMSAuOCAuMiAuNSAuMyAuNyAuNmMyLjkgMy4zIDE4LjQgNDQuNyAyMy42IDUxLjkgMiAyLjcgNS43IDIgNi40IDIgMy42IC4xIDQtMS4xIDQuMS00LjMgLjEtMS45IC4xIDEuMiAuMS00MS4yIDAtNC41LTIuNC0zLjctNS42LTQuMy0uMyAwLTIuNi0uNi0uMS0zLjEgLjItLjItLjktLjIgMjEuNy0uMiAyLjMgMCA1LjMgMi44LTEuMiAzLjQtLjQgMC0uNyAwLTEuMSAuMnMtLjYgLjMtLjkgLjYtLjQgLjYtLjYgLjktLjIgLjctLjEgMS4xYy0uMSAxLjYtLjIgMzguOSAuMyA0MS4yIC4yIC43IC42IDEuNCAxLjIgMS44czEuMyAuNyAyLjEgLjZjMTMuMyAuNCAxNC45IC40IDE2LTMuNCAxLjctNS44IDQuMS0yLjUgMy43LS4ybDAgLjF6TTMxOC42IDI4My42Yy00LjIgMC00LjQtMy40LS42LTMuNCAzNS45LS4yIDI4LjEgLjQgMzcuMi0uNiAxLjctLjIgMi40IC4yIDIuMyAxLjktLjMgMy40LS42IDYuOC0xIDEwLjItLjIgMi4yLTMuMiAyLjYtMy40LS4yLS40LTUuMy0yLjItNC41LTE1LjYtNS4xLTEuNi0uMS0xLjYgMC0xLjYgMS41bDAgMTYuMWMwIDEuNyAwIDEuNiAxLjYgMS41IDMuMS0uMiAxMC4zIC4zIDE1LjctMS41IC41LS4yIDMuMy0xLjggMy4xIDEuOCAwIC4yLS44IDEwLjQtMS4yIDExLjQtLjUgMS4zLTEuOSAxLjUtMi42IC4zLTEuMi0yIDAtNS4xLTMuNy01LjMtMTUuNC0uOS0xMi45LTIuNS0xMi45IDYgMCAxMi4zLS44IDE2LjEgMy45IDE2LjIgMTYuNiAuNSAxNC40IDAgMTYuNC01LjcgLjgtMi40IDMuNS0xLjggMy4yIC42LS40IDMuMi0uOCA2LjQtMS4yIDkuNiAwIC40LS4yIDIuNC00LjcgMi40LTM3LjItLjEtMzQuNS0uMi0zNS4yLS4zLTIuNy0uNS0yLjItMyAuMi0zLjQgMS4xLS4yIDQgLjUgNC4yLTIuNiAyLjQtNTYuMi0uMS01MS4zLTMuOS01MS4zbDAgMHptLS40LTEwOS41YzIuNSAuNiAzLjEgMS44IDMgNC42LS4zIDUuMy0uMyA5LS42IDkuNy0uNyAyLjItMy4xIDIuMS0zLjMtLjMtLjQtNC44LTMtNy44LTcuNi05LjEtMjYuMy03LjctMzIuOCAxNS41LTI3LjIgMzAuMiA1LjkgMTUuNCAyMiAxNS45IDI4LjkgMTMuOCA1LjktMS45IDUuOS02LjUgNi45LTcuNiAxLjItMS4zIDIuMi0xLjggMy4xIDEuMSAwIC4xIC42IDExLjktNiAxMi43LTEuNiAuMi0xOS40IDMuNy0zMi43LTMuNC0yMS0xMS4yLTE2LjctMzUuNS02LjktNDUuMyAxNC0xNC4xIDM5LjktNy4xIDQyLjMtNi41bDAgMHpNMjg5LjggMjgwLjFjMy4zIDAgMy43IDMgLjIgMy40LTIuNiAuMy01LS40LTUgNS41IDAgMi0uMiAyOSAuNCA0MS40IC4xIDIuMyAxLjIgMy41IDMuNCAzLjcgMjIgMS4yIDE1LTEuNyAxOC44LTYuMyAxLjgtMi4yIDIuOCAuOCAyLjggMS4xIC4zIDEzLjYtNCAxMi40LTUuMiAxMi40bC0zOC4yLS4yYy0xLjktLjItMi4xLTMtLjQtMy40IDItLjUgNC45IC40IDUuMS0yLjggMS0xNS45IC42LTQ0LjYgLjMtNDcuOC0uMy0zLjgtMi44LTMuMy01LjctMy43LTIuNS0uNC0yLTMuMiAuMy0zLjIgMS40IDAgMTggMCAyMy4xIDB6bS0zMS42LTU3LjhjLjEgNC4xIDIuOSAzLjUgNiAzLjYgMi42IC4xIDIuNSAzLjQtLjEgMy40LTYuNSAwLTEzLjcgMC0yMS42LS4xLTMuOCAwLTMuNC0zLjQgMC0zLjQgNC41IDAgMy4yIDEuNiAzLjQtNDUuNSAwLTUuMS0zLjMtMy41LTQuNy00LjItMi42LTEuMi0xLjQtMy4xIC40LTMuMiAxLjMgMCAyMC4yLS40IDIxLjIgLjJzMS45IDEuNi0uNCAyLjljLTEgLjUtMy45LS4zLTQuMiAyLjUgMCAuMi0uOCAxLjYtLjEgNDMuOGwwIDB6TTIyMS4zIDQ5Ni42Yy41IC4zIDEgLjUgMS42IC41czEuMS0uMiAxLjYtLjVjMTctOS44IDE4Mi0xMDMuNiAxOTcuNC0xMTIuNS0uMS0uNCAxMS4zLS4yLTE4MS41LS4zLTEuMiAwLTEuNiAuNC0xLjUgMS42IDAgLjEgMS4zIDQ0LjUgMS4yIDUwLjQtLjEgMi42LS42IDUuMi0xLjQgNy43LS42IDEuOCAuNC0uNS0xMy41IDMyLjItLjcgMS43LTEgMi4yLTItLjEtNC4yLTEwLjMtOC4zLTIwLjctMTIuNi0zMS0xLjUtMy40LTIuMi03LjEtMi0xMC44IC4yLTIuNSAuOC0xNi4xIDEuNS00OCAwLTEuOSAwLTItMi0ybC0xODMgMGMyLjYgMS42IDE3OC4zIDEwMi42IDE5NiAxMTIuOGwuMSAwek0xMzAuNCAzMDcuOWMwIDIuNCAuNCAyLjggMi44IDMgMTEuNSAxLjIgMjEgMy43IDI1LjYtNy4zIDYtMTQuNSAyLjctMzQuNC0xMi41LTM4LjgtMi0uNi0xNi0yLjgtMTUuOSAxLjUgMCA4IDAgMTEuNiAwIDQxLjZ6bTEwNS44LTE1YzAgMi4xIDEuMSAzOC43IDEuMSAzOS4xIC4zIDkuOS0yNS42IDUuOC0yNS4yLTIuNiAuMS0yIDEuNC0zNy40IDEuMS0zOS40LTE0LjEgNy40LTE0LjQgNDAuMiA2LjQgNDguOCA0IDEuNyA4LjQgMS45IDEyLjUgLjZzNy42LTQgOS45LTcuN2M0LjktNy44IDYuOC0yOS41LTUuNC0zOS0uMSAuMS0uMiAuMS0uNCAuMWwwIDB6bS0xMi4zLTE5OGMtOS44IDAtOS43IDE0LjgtLjEgMTQuOXMxMC4xLTE0LjkgLjEtMTQuOWwwIDB6TTE0My43IDE5OC42YzAgMS44IC40IDIuNCAyLjIgMi42IDEzLjYgMS40IDEyLjUtMTEgMTIuMi0xMy40LTEuNy0xMS4yLTE0LjQtMTAuMi0xNC40LTcuOCAwIDQuNSAwIDEzLjcgMCAxOC42ek0zNTYgMjA1bC02LjEtMTUuOGMtMi4yIDUuNS00LjIgMTAuNi02LjIgMTUuOGwxMi4zIDB6Il19LGVnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGVhbS1zeW1ib2wiLGljb246WzQ0OCw1MTIsW10sImYzZjYiLCJNMjczLjUgMTc3LjVhNjEgNjEgMCAxIDEgMTIyIDAgNjEgNjEgMCAxIDEgLTEyMiAwem0xNzQuNSAuMmMwIDYzLTUxIDExMy44LTExMy43IDExMy44TDIyNSAzNzEuM2MtNCA0My00MC41IDc2LjgtODQuNSA3Ni44LTQwLjUgMC03NC43LTI4LjgtODMtNjdMMCAzNTggMCAyNTAuNyA5Ny4yIDI5MGMxNS4xLTkuMiAzMi4yLTEzLjMgNTItMTEuNWw3MS0xMDEuN0MyMjAuNyAxMTQuNSAyNzEuNyA2NCAzMzQuMiA2NCAzOTcgNjQgNDQ4IDExNSA0NDggMTc3Ljd6TTIwMyAzNjNjMC0zNC43LTI3LjgtNjIuNS02Mi41LTYyLjUtNC41IDAtOSAuNS0xMy41IDEuNWwyNiAxMC41YzI1LjUgMTAuMiAzOCAzOSAyNy43IDY0LjUtMTAuMiAyNS41LTM5LjIgMzgtNjQuNyAyNy41LTEwLjItNC0yMC41LTguMy0zMC43LTEyLjIgMTAuNSAxOS43IDMxLjIgMzMuMiA1NS4yIDMzLjIgMzQuNyAwIDYyLjUtMjcuOCA2Mi41LTYyLjV6TTQxMC41IDE3Ny43YTc2LjQgNzYuNCAwIDEgMCAtMTUyLjggMCA3Ni40IDc2LjQgMCAxIDAgMTUyLjggMHoiXX0sdGdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1haWxjaGltcCIsaWNvbjpbNDQ4LDUxMixbXSwiZjU5ZSIsIk0zMzEgMjQzLjVjMy4xLS40IDYuMi0uNCA5LjMgMCAxLjctMy44IDItMTAuNCAuNS0xNy42LTIuMi0xMC43LTUuMy0xNy4xLTExLjUtMTYuMXMtNi41IDguNy00LjIgMTkuNGMxLjMgNiAzLjUgMTEuMSA2IDE0LjNsMCAwek0yNzcuNCAyNTJjNC41IDIgNy4yIDMuMyA4LjMgMi4xIDEuOS0xLjktMy41LTkuNC0xMi4xLTEzLjEtNS0yLjEtMTAuNC0yLjgtMTUuOC0yLjJzLTEwLjUgMi43LTE0LjggNS44Yy0zIDIuMi01LjggNS4yLTUuNCA3LjEgLjkgMy43IDEwLTIuNyAyMi42LTMuNSA3LS40IDEyLjggMS44IDE3LjMgMy43bDAgMHptLTkgNS4xYy05LjEgMS40LTE1IDYuNS0xMy41IDEwLjEgLjkgLjMgMS4yIC44IDUuMi0uOCA2LTIuMyAxMi40LTIuOSAxOC43LTEuOSAyLjkgLjMgNC4zIC41IDQuOS0uNSAxLjUtMi4yLTUuNy04LTE1LjQtNi45bDAgMHptNTQuMiAxNy4xYzMuNC02LjktMTAuOS0xMy45LTE0LjMtN3MxMC45IDEzLjkgMTQuMyA3bDAgMHptMTUuNy0yMC41Yy03LjctLjEtOCAxNS44LS4zIDE1LjlzOC0xNS44IC4zLTE2bDAgMHpNMTE5LjUgMzMyLjdjLTEuMyAuMy02IDEuNS04LjUtMi4zLTUuMi04IDExLjEtMjAuNCAzLTM1LjgtOS4xLTE3LjUtMjcuOC0xMy41LTM1LTUuNS04LjcgOS42LTguNyAyMy41LTUgMjQuMSA0LjMgLjYgNC4xLTYuNSA3LjQtMTEuNiAuOS0xLjQgMi4xLTIuNiAzLjUtMy42czMtMS42IDQuNi0yIDMuNC0uNCA1IDAgMy4zIDEgNC43IDEuOWMxMS42IDcuNiAxLjQgMTcuOCAyLjMgMjguNiAxLjQgMTYuNyAxOC40IDE2LjQgMjEuNiA5IC4yLS40IC4zLS44IC4zLTEuMnMtLjItLjgtLjUtMS4xYzAgLjkgLjctMS4zLTMuNC0uNGwwIDB6bTI5OS43LTE3LjFjLTMuMy0xMS43LTIuNi05LjItNi44LTIwLjUgMi40LTMuNyAxNS4zLTI0LTMuMS00My4zLTEwLjQtMTAuOS0zMy45LTE2LjUtNDEuMS0xOC41LTEuNS0xMS40IDQuNi01OC43LTIxLjUtODMgMjAuOC0yMS42IDMzLjgtNDUuMyAzMy43LTY1LjctLjEtMzkuMi00OC4yLTUxLTEwNy40LTI2LjVsLTEyLjUgNS4zYy0uMSAwLTIyLjctMjIuMy0yMy4xLTIyLjYtNjcuNS01OC45LTI3OC44IDE3NS45LTIxMS4zIDIzMi45bDE0LjggMTIuNWMtNCAxMC43LTUuNCAyMi4yLTQuMSAzMy41IDMuNCAzMy40IDM2IDYwLjQgNjcuNSA2MC40IDU3LjcgMTMzLjEgMjY3LjkgMTMzLjMgMzIyLjMgMyAxLjctNC41IDkuMS0yNC42IDkuMS00Mi40cy0xMC4xLTI1LjMtMTYuNS0yNS4zbDAgMHptLTMxNiA0OC4yYy0yMi44LS42LTQ3LjUtMjEuMS00OS45LTQ1LjUtNi4yLTYxLjMgNzQuMy03NS4zIDg0LTEyLjMgNC41IDI5LjYtNC43IDU4LjUtMzQuMSA1Ny44bDAgMHpNODQuNyAyNDkuNmMtMTUuMiAzLTI4LjUgMTEuNS0zNi43IDIzLjUtNC45LTQuMS0xNC0xMi0xNS42LTE1LTEzLTI0LjggMTQuMi03MyAzMy4zLTEwMC4yIDQ3LjEtNjcuMiAxMjAuOS0xMTguMSAxNTUtMTA4LjkgNS41IDEuNiAyMy45IDIyLjkgMjMuOSAyMi45cy0zNC4xIDE4LjktNjUuOCA0NS4zQzEzNi4yIDE1MCAxMDQgMTk3LjcgODQuNyAyNDkuNnpNMzIzLjYgMzUwLjdzLTM1LjcgNS4zLTY5LjUtNy4xYzYuMi0yMC4yIDI3IDYuMSA5Ni40LTEzLjggMTUuMy00LjQgMzUuNC0xMyA1MS0yNS40IDMuNCA3LjggNS44IDE1LjkgNy4xIDI0LjMgMy43LS43IDE0LjItLjUgMTEuNCAxOC4xLTMuMyAxOS45LTExLjcgMzYtMjUuOSA1MC44LTguOSA5LjYtMTkuNCAxNy41LTMxLjIgMjMuMy02LjUgMy40LTEzLjMgNi4zLTIwLjMgOC42LTUzLjUgMTcuNS0xMDguMy0xLjctMTI2LTQzLTEuNC0zLjEtMi42LTYuNC0zLjYtOS43LTcuNS0yNy4yLTEuMS01OS44IDE4LjgtODAuNCAxLjItMS4zIDIuNS0yLjkgMi41LTQuOC0uMi0xLjctLjgtMy4zLTEuOS00LjUtNy0xMC4xLTMxLjItMjcuNC0yNi4zLTYwLjggMy41LTI0IDI0LjUtNDAuOSA0NC4xLTM5LjlsNSAuM2M4LjUgLjUgMTUuOSAxLjYgMjIuOSAxLjkgMTEuNyAuNSAyMi4yLTEuMiAzNC42LTExLjYgNC4yLTMuNSA3LjYtNi41IDEzLjMtNy41IDIuMy0uNiA0LjctLjcgNy0uM3M0LjYgMS4yIDYuNiAyLjVjMTAgNi42IDExLjQgMjIuNyAxMS45IDM0LjUgLjMgNi43IDEuMSAyMyAxLjQgMjcuNiAuNiAxMC43IDMuNCAxMi4yIDkuMSAxNCAzLjIgMSA2LjIgMS44IDEwLjUgMy4xIDEzLjIgMy43IDIxIDcuNSAyNiAxMi4zIDIuNSAyLjUgNC4yIDUuOCA0LjcgOS4zIDEuNiAxMS40LTguOCAyNS40LTM2LjMgMzguMi00Ni43IDIxLjctOTMuNyAxNC40LTEwMC41IDEzLjctMjAuMi0yLjctMzEuNiAyMy4zLTE5LjUgNDEuMSAyMi42IDMzLjQgMTIyLjQgMjAgMTUxLjQtMjEuNCAuNy0xIC4xLTEuNi0uNy0xLTQxLjggMjguNi05Ny4xIDM4LjItMTI4LjUgMjYtNC44LTEuOC0xNC43LTYuNC0xNS45LTE2LjcgNDMuNiAxMy41IDcxIC43IDcxIC43czItMi44LS42LTIuNXpNMTcxLjcgMTU3LjVjMTYuNy0xOS40IDM3LjQtMzYuMiA1NS44LTQ1LjYgLjEtLjEgLjMtLjEgLjUtLjFzLjMgLjEgLjQgLjIgLjIgLjMgLjIgLjQgMCAuMy0uMSAuNWMtMS41IDIuNy00LjMgOC4zLTUuMiAxMi43IDAgLjEgMCAuMyAwIC40cy4yIC4zIC4zIC40IC4zIC4xIC40IC4xIC4zIDAgLjQtLjFjMTEuNS03LjggMzEuNS0xNi4yIDQ5LTE3LjMgLjIgMCAuMyAwIC41IC4xcy4yIC4yIC4zIC40IC4xIC4zIDAgLjUtLjEgLjMtLjMgLjRjLTIuOSAyLjItNS41IDQuOC03LjcgNy43LS4xIC4xLS4xIC4yLS4xIC40czAgLjMgLjEgLjQgLjIgLjIgLjMgLjMgLjIgLjEgLjQgLjFjMTIuMyAuMSAyOS43IDQuNCA0MSAxMC43IC44IC40IC4yIDEuOS0uNiAxLjctNjkuNS0xNS45LTEyMy4xIDE4LjUtMTM0LjUgMjYuOC0uMiAuMS0uMyAuMS0uNSAuMXMtLjMtLjEtLjUtLjItLjItLjMtLjItLjUgLjEtLjQgLjItLjVsLS4xIDB6Il19LGFnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsdW1vbiIsaWNvbjpbNjQwLDUxMixbXSwiZTdlMiIsIk00NTIuNSAyMjMuNWM5LjggMCAxNi41IDYuMyAxNi41IDE2LjZsMCAzMS44YzAgMTAuMy02LjYgMTYuNi0xNi42IDE2LjZsLTU2LjIgMGMtOS44IDAtMTYuNS02LjMtMTYuNS0xNi42bDAtMzEuOGMwLTEwLjMgNi43LTE2LjYgMTYuNS0xNi42bDU2LjMgMHptLTI1LjcgMTMuMWMtMS41LTIuNi0zLjItMi42LTQuNiAwbC0xMC43IDE3LjZjLTEuNyAyLjQtMi42IDUuMS0yLjYgOC4yIDAgNy45IDYuOSAxNC42IDE1LjYgMTQuNiA4LjUgMCAxNS42LTYuNyAxNS42LTE0LjYgMC0zLTEtNS44LTIuNy04LjJsLTEwLjctMTcuNnpNODUuOCAyMjMuOGMxIDAgMS41IC42IDEuNSAxLjVsMCA1MC4zIDY0LjYgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA5LjdjMCAuOS0uNiAxLjUtMS42IDEuNWwtNzguNCAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwem04OC4zIDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNDVjMCA0IDIgNS4yIDUuNyA1LjJsNDYuOSAwYzMuOCAwIDUuNy0xLjMgNS43LTUuMmwwLTQ1YzAtLjkgLjUtMS41IDEuNS0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDQ2YzAgMTAuNS01LjMgMTYuOC0xNy42IDE2LjhsLTU0IDBjLTEyLjMgMC0xNy42LTYuMy0xNy42LTE2LjhsMC00NmMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptMTA4LjIgMGMxIDAgMS42IC41IDIuMiAxLjRsMzAuNSA0Ni40IDEuNCAwIDMwLjUtNDYuNGMuNi0uOSAxLjItMS40IDIuMi0xLjRsMTggMGMxIDAgMS41IC42IDEuNSAxLjVsMCA2MS40YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNDMuOC0xLjEgMC0yOC43IDQzLjhjLS42IC45LTEuMyAxLjUtMi40IDEuNWwtMTAuNyAwYy0xIDAtMS43LS42LTIuMy0xLjVsLTI4LjctNDMuOC0xLjEgMCAwIDQzLjhjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTcuOSAwem0yMTQuNCAwYy45IDAgMS4zIC40IDIuMiAxLjFsNTIuNyA0Ni4zIDEuMyAwIDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgNjEuNGMwIC45LS42IDEuNS0xLjYgMS41bC0xNC40IDBjLTEgMC0xLjQtLjQtMi4zLTEuMWwtNTIuNi00Ni4zLTEuNCAwIDAgNDZjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTQuNCAwek0zMjAgMTE0LjFjODcuOSAwIDE2Ny43IDE1LjcgMjI1LjUgNDFsMi43IDEuMkM1ODcuMSAxNzMuOCA2NDAgMjA2LjUgNjQwIDI1NnMtNTIuOSA4Mi4yLTkxLjggOTkuNmwtMi43IDEuMmMtNTcuOCAyNS40LTEzNy42IDQxLTIyNS41IDQxLTc2LjIgMC0xNTUuMS0xMC41LTIyNS41LTQxLTM5LjYtMTcuNC05NC41LTUwLjMtOTQuNS0xMDAuOHM1NC45LTgzLjUgOTQuNS0xMDAuOGM3MC40LTMwLjUgMTQ5LjMtNDEgMjI1LjUtNDF6bS04OC45IDIyOWMyMC4zIDI5IDUyLjggNDkuNiA4OC45IDQ5LjYgMzYuMiAwIDY4LjctMjAuNiA4OS00OS43bC0xNzcuOSAuMXptLTk2LjEgMGM0My4zIDI5LjcgOTYuNyA0My41IDE0OC40IDQ4LTI0LjItOS4xLTQ0LjQtMjYuNy01OC42LTQ4LjFsLTg5LjkgMHptMjgwLjMtLjFjLTE0LjIgMjEuNC0zNC40IDM5LjEtNTguNiA0OC4xIDUxLjgtNC41IDEwNS4zLTE4LjMgMTQ4LjYtNDguMmwtOTAgMHptLTMzNy40IC4xYzQ0LjEgMjMuMSA5My43IDM1LjQgMTQyLjcgNDIuNi0zMy40LTguNi02Ni41LTIxLjktOTQuNC00Mi42bC00OC4zIDB6bTQzNi4yLS4yYy0yNy45IDIwLjgtNjEuMSAzNC4yLTk0LjYgNDIuOCA0Ny4zLTYuOSA4OS42LTE4LjUgMTIzLjktMzMuNmwxLjctLjhjNi4xLTIuNyAxMS45LTUuNSAxNy40LTguNGwtNDguNSAwek01MjAgMTczLjZjMTAuNyA4LjcgMTkuOCAxOC4xIDI3IDI4LjIgLjQgLjYgLjUgMS4zIC4xIDJzLTEgMS0xLjcgMWwtMS42IDBjLS42IDAtMS4yLS4zLTEuNS0uOC03LjktMTAuOS0xOC4yLTIxLjEtMzAuNi0zMC40bC05My41IDBjNS40IDguOCA5LjkgMTguNSAxMy40IDI4LjYgLjIgLjYgLjEgMS4yLS4yIDEuN3MtLjkgLjgtMS42IC44bC0xLjQgMGMtLjggMC0xLjUtLjUtMS44LTEuMy0zLjgtMTAuNy04LjctMjAuOC0xNC41LTI5LjlsLTE4NC4zIC4xYy01LjggOS4xLTEwLjcgMTkuMS0xNC40IDI5LjgtLjMgLjgtMSAxLjMtMS44IDEuM2wtMS40IDBjLS42IDAtMS4yLS4zLTEuNi0uOHMtLjUtMS4xLS4yLTEuN2MzLjUtMTAuMiA4LTE5LjcgMTMuNC0yOC42bC05My42IDBjLTEyLjMgOS4zLTIyLjYgMTkuNC0zMC40IDMwLjMtLjQgLjUtLjkgLjgtMS41IC44bC0xLjYgMGMtLjcgMC0xLjQtLjQtMS43LTFzLS4zLTEuNCAuMS0yYzcuNi0xMC41IDE2LjctMTkuOSAyNi44LTI4bC01MSAwYy0yOC45IDE2LjYtNjIgNDMuMy02My41IDc5LjdsNDQuNyAwYy41IDAgMSAuMiAxLjMgLjZzLjYgLjggLjYgMS4zbDAgMS4zYzAgMS4xLS45IDEuOS0xLjkgMS45bC00NC43IDBDNi44IDI5NSA0MCAzMjEuNyA2OSAzMzguM2w1MC45IDBjLTEwLjMtOC40LTE5LjEtMTcuNC0yNi4xLTI3bC0uOC0xLjFjLS40LS42LS41LTEuMy0uMS0yczEtMSAxLjctMWwxLjYgMCAuMiAwYy41IC4xIDEgLjMgMS4zIC44IDcuOSAxMC45IDE4LjEgMjEgMzAuNSAzMC4zbDkzLjYgMGMtNS4zLTguOC05LjgtMTguNC0xMy40LTI4LjUtLjItLjYtLjEtMS4yIC4yLTEuN3MuOS0uOCAxLjYtLjhsMS40IDAgLjIgMGMuNyAuMSAxLjQgLjYgMS43IDEuMyAzLjggMTAuNyA4LjYgMjAuNyAxNC40IDI5LjhsMTg0LjUtLjFjNS44LTkuMSAxMC42LTE5LjEgMTQuNC0yOS43bC4xLS4xYy4zLS43IDEtMS4xIDEuNy0xLjFsMS40IDBjLjYgMCAxLjIgLjMgMS42IC44cy41IDEuMiAuMiAxLjdjLTMuNSAxMC4xLTggMTkuNy0xMy4zIDI4LjVsOTMuNyAwYzEyLjMtOS4zIDIyLjUtMTkuNCAzMC4zLTMwLjJsLjEtLjJjLjQtLjQgLjktLjYgMS40LS42bDEuNiAwYy43IDAgMS40IC40IDEuNyAxcy4zIDEuNC0uMSAyYy03LjEgMTAtMTYuMSAxOS4zLTI2LjcgMjcuOWw1MS4xIDBjMjguOC0xNi42IDYxLjgtNDMuMyA2My40LTc5LjZsLTQ0LjcgMGMtMSAwLTEuOS0uOS0xLjktMS45bDAtMS4zYzAtMS4xIC45LTEuOSAxLjktMS45bDQ0LjcgMGMtMS42LTM2LjUtMzQuOS02My4zLTYzLjktNzkuOWwtNTAuOSAwek0yMjAuNSAxMjYuMmMtNDkuMSA3LjEtOTguNyAxOS41LTE0MyA0Mi43bDQ4LjQgMGMyNy45LTIwLjggNjEtMzQuMSA5NC41LTQyLjd6bTYyLjgtNS40Yy01MS44IDQuNS0xMDUuMiAxOC4zLTE0OC42IDQ4LjFsOTAgMGMxNC4yLTIxLjQgMzQuNC0zOSA1OC42LTQ4LjF6bTM2LjYtMS42Yy0zNi4yIDAtNjguNyAyMC42LTg5IDQ5LjdsMTc3LjktLjFjLTIwLjMtMjkuMS01Mi43LTQ5LjYtODguOS00OS42em0zNi42IDEuNmMyNC4yIDkuMSA0NC40IDI2LjYgNTguNSA0OGw4OS44IDBjLTQzLjMtMjkuNy05Ni42LTQzLjUtMTQ4LjMtNDh6bTYyLjggNS40YzMzLjQgOC41IDY2LjQgMjEuOSA5NC4zIDQyLjVsNDguMyAwYy00NC4xLTIzLjEtOTMuNi0zNS40LTE0Mi42LTQyLjV6Il19LGlnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJudXRyaXRpb25peCIsaWNvbjpbNDQ4LDUxMixbXSwiZjNkNiIsIk0xMTIgOC4xUzI0NS40LS4xIDIzMyAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44ek00MjQgMzIzLjdjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OC0yMi4zLTM3LTMyLTgzLjgtMzItMTMyLjMgMC00OC40IDE3LjctOTQuNyA0MC0xMzEuNyA0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTE0NCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yMTYgNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMjg4IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM2MCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0zODQgMjU2Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTMTE4LjggMTgwLjEgODAgMjAwYy04LjggMTkuNS0xMS4yIDMzLjktMTYgNTYgNDIuMi03LjkgOTguNy0xNC44IDE2MC0xNC44czExNy44IDYuOSAxNjAgMTQuOHoiXX0scmdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1cyIsaWNvbjpbNTEyLDUxMixbXSwiZjRmMSIsIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwNyAyMDUuNmMtNC43IDAtOSAyLjgtMTAuNyA3LjJsLTQgOS41LTExLTkyLjhjLTEuNy0xMy45LTIyLTEzLjQtMjMuMSAuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43LTQzLjkgMCAwIDIzLjIgNTEuMyAwYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yIC4ybDQuNi01OC42IDQuOSA2NC40YzEuMSAxNC4zIDIyIDE0LjIgMjMuMSAuMWw2LjgtODMgMi43IDIyLjNjMS40IDExLjggMTcuNyAxNC4xIDIyLjMgMy4xbDE4LTQzLjQgNTAuNSAwIDAtMjMuMi01OC40IC4zem0tNzggNS4ybC0yMS45IDAgMCAyMS45YzAgNC4xLTMuMyA3LjUtNy41IDcuNS00LjEgMC03LjUtMy4zLTcuNS03LjVsMC0yMS45LTIxLjkgMGMtNC4xIDAtNy41LTMuMy03LjUtNy41IDAtNC4xIDMuNC03LjUgNy41LTcuNWwyMS45IDAgMC0yMS45YzAtNC4xIDMuNC03LjUgNy41LTcuNXM3LjUgMy4zIDcuNSA3LjVsMCAyMS45IDIxLjkgMGM0LjEgMCA3LjUgMy4zIDcuNSA3LjUgMCA0LjEtMy40IDcuNS03LjUgNy41eiJdfSxzZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicmVkaGF0IixpY29uOls1MTIsNTEyLFtdLCJmN2JjIiwiTTM0MS41IDI4NS42YzMzLjcgMCA4Mi4zLTYuOSA4Mi4zLTQ3IC4yLTYuNyAuOS0xLjgtMjAuOS05Ni4yLTQuNi0xOS4xLTguNy0yNy44LTQyLjMtNDQuNi0yNi4xLTEzLjMtODIuOS0zNS40LTk5LjctMzUuNC0xNS43IDAtMjAuMiAyMC4yLTM4LjkgMjAuMi0xOCAwLTMxLjMtMTUuMS00OC4xLTE1LjEtMTYuMSAwLTI2LjcgMTEtMzQuOCAzMy42LTI3LjUgNzcuNi0yNi4zIDc0LjMtMjYuMSA3OC4zIDAgMjQuOCA5Ny42IDEwNi4xIDIyOC41IDEwNi4xek00MjkgMjU0LjhjNC43IDIyIDQuNyAyNC4zIDQuNyAyNy4yIDAgMzcuNy00Mi4zIDU4LjYtOTggNTguNi0xMjUuNyAuMS0yMzUuOS03My42LTIzNS45LTEyMi4zIDAtNi44IDEuNC0xMy41IDQuMS0xOS43LTQ1LjIgMi4zLTEwMy44IDEwLjMtMTAzLjggNjIgMCA4NC43IDIwMC42IDE4OSAzNTkuNSAxODkgMTIxLjggMCAxNTIuNS01NS4xIDE1Mi41LTk4LjYgMC0zNC4yLTI5LjYtNzMtODIuOS05Ni4yeiJdfSxGRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtcGllZC1waXBlciIsaWNvbjpbNDQ4LDUxMixbInBpZWQtcGlwZXItc3F1YXJlIl0sImUwMWUiLCJNMzIuMSA0MTlsLTMyIDYwLjIgLjgtMzI4Qy45IDg1LjMgNTQuMSAzMiAxMjAuMSAzMmwzMjcuMiAwQzM1NC4zIDYwLjkgMjU3LjQgMTI2LjIgMTkzLjQgMjAwLjYgMTIyLjggMjgyIDgyLjcgMzM4IDMyLjEgNDE5em00MTYtMzg3UzMwNS4zIDk4LjggMjYxLjcgMTk5LjFjLTIzLjIgNTMuNi0yOC45IDExOC4xLTcxIDE1OC42LTI4LjkgMjcuOC02OS44IDM4LjItMTA1LjMgNTYuMy0yMy4yIDEyLTY2LjQgNDAuNS04NC45IDY2bDMyOC40IDBjNjYgMCAxMTkuMy01My4zIDExOS4zLTExOS4yLS4xIDAtLjEtMzI4LjgtLjEtMzI4Ljh6Il19LG5nZT1GRSxvZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToid2hhdHNhcHAiLGljb246WzQ0OCw1MTIsW10sImYyMzIiLCJNMzgwLjkgOTcuMWMtNDEuOS00Mi05Ny43LTY1LjEtMTU3LTY1LjEtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODAgMTE3LjcgNDQ5LjFjMzIuNCAxNy43IDY4LjkgMjcgMTA2LjEgMjdsLjEgMGMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguMyAxOC42LTY4LjEtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjFzNTYuMiA4MS4yIDU2LjEgMTMwLjVjMCAxMDEuOC04NC45IDE4NC42LTE4Ni42IDE4NC42ek0zMjUuMSAzMDAuNWMtNS41LTIuOC0zMi44LTE2LjItMzcuOS0xOC01LjEtMS45LTguOC0yLjgtMTIuNSAyLjhzLTE0LjMgMTgtMTcuNiAyMS44Yy0zLjIgMy43LTYuNSA0LjItMTIgMS40LTMyLjYtMTYuMy01NC0yOS4xLTc1LjUtNjYtNS43LTkuOCA1LjctOS4xIDE2LjMtMzAuMyAxLjgtMy43IC45LTYuOS0uNS05LjdzLTEyLjUtMzAuMS0xNy4xLTQxLjJjLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4ycy05LjcgMS40LTE0LjggNi45Yy01LjEgNS42LTE5LjQgMTktMTkuNCA0Ni4zczE5LjkgNTMuNyAyMi42IDU3LjRjMi44IDMuNyAzOS4xIDU5LjcgOTQuOCA4My44IDM1LjIgMTUuMiA0OSAxNi41IDY2LjYgMTMuOSAxMC43LTEuNiAzMi44LTEzLjQgMzcuNC0yNi40czQuNi0yNC4xIDMuMi0yNi40Yy0xLjMtMi41LTUtMy45LTEwLjUtNi42eiJdfSxsZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaW1kYiIsaWNvbjpbNDQ4LDUxMixbXSwiZjJkOCIsIk04OS41IDMyMy42bC0zNS42IDAgMC0xMzcuNCAzNS42IDAgMCAxMzcuNHptNjYuNi03My4xbDkuMS02NC4zIDQ2LjMgMCAwIDEzNy40LTMxIDAgMC05Mi43LTEzLjQgOTIuNy0yMS4zIDAtMTMtOTAuNy0uMSA5MC43LTMxLjIgMCAwLTEzNy40IDQ2LjEgMGMuNSA4LjMgMi44IDE4LjEgNC4zIDI5LjRsNC4yIDM0Ljl6bTY3LjYgNzMuMWwwLTEzNy40IDI2LjYgMGMxNyAwIDI3IC45IDMzIDIuNCA2LjEgMS43IDEwLjcgNC4yIDEzLjkgNy45IDMuMSAzLjMgNS4xIDYuNiA1LjggMTIgLjkgNC40IDEuNCAxMy4xIDEuNCAyNi4ybDAgNDguMmMwIDEyLjMtLjcgMjAuNS0xLjkgMjQuNy0xLjEgNC4xLTMuMSA3LjQtNiA5LjctMi44IDIuNC02LjQgNC4xLTEwLjcgNS00LjIgLjgtMTAuNiAxLjMtMTkuMSAxLjNsLTQzIDB6bTM1LjUtMTEzLjlsMCA4OS40YzUuMSAwIDguMy0xIDkuNC0yLjMgMS4xLTIgMS44LTcuNiAxLjgtMTYuN2wwLTUzLjNjMC02LjItLjEtMTAuMi0uNy0xMi0uMy0xLjgtMS4yLTMtMi42LTQuNy0xLjQgMC00LjEtLjQtNy45LS40em01Ny4zIDExMy45bDAtMTM3LjQgMzQuMSAwIDAgNDMuOWMyLjktMi40IDYuMS00LjkgOS41LTYuNiAzLjYtMS41IDguOC0yLjQgMTIuOC0yLjQgNC44IDAgOC45IC44IDEyLjMgMi4yIDMuNCAxLjUgNiAzLjUgOCA2LjIgMS43IDIuNiAyLjcgNS4zIDMuMSA3LjggLjQgMi42LS4yIDgtLjIgMTYuMmwwIDM4LjZjMCA4LjIgLjIgMTQuMy0uOCAxOC40LTEuMSA0LTMuOCA3LjYtNy44IDkuNi00LjEgMy45LTguOSA1LjMtMTQuNiA1LjMtNCAwLTkuMi0uOS0xMi43LTIuNS0zLjUtMS44LTYuNy00LjUtOS42LThsLTIuMSA4LjctMzIgMHptNDUuMS0yMC43Yy43LTEuOCAxLTYgMS0xMi41bDAtMzUuNGMwLTUuNi0uMy05LjUtMS4xLTExLjItLjctMS45LTMuNy0yLjctNS44LTIuNy0yIDAtMy40IC44LTQuMSAyLjMtLjYgMS41LTEgNS40LTEgMTEuNmwwIDM2LjRjMCA2LjEgLjQgMTAgMS4yIDExLjYgLjYgMS43IDIuMSAyLjUgNC4xIDIuNSAyLjIgMCA0LjItLjggNS43LTIuNnpNNDE4LjQgMzJjMTUuNyAxLjIgMjguNyAxNS4yIDI4LjcgMzEuOWwwIDM4NC4yYzAgMTYuNC0xMS45IDMwLjQtMjguMiAzMS0uMyAwLS41IC45LS44IC45TDI5LjkgNDgwYy0uMyAwLS42LS45LS44LS4xLTE1LjctMS40LTI3LjktMTMuOC0yOS0zMC4yTDAgNjEuOEMxLjEgNDUuOSAxMy44IDMzLjEgMzAuMyAzMS4xbDM4Ny40IDBjLjIgMCAuNSAuOSAuNyAuOXpNMzAuMyA0MS4zQzE5IDQyIDEwIDUxIDkuMyA2Mi40bDAgMzg3LjNjLjQgNS40IDIuNyAxMC41IDYuNCAxNC4zIDMuOCAzLjkgOC44IDYuMyAxNC4yIDYuN2wzODguMiAwYzExLjUtMSAyMC42LTExLjYgMjAuNi0yMi42bDAtMzg0LjJjMC01LjctMi4xLTExLjMtNi0xNS41cy05LjMtNi44LTE1LTcuMmwtMzg3LjQgMHoiXX0sY2dlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InB5dGhvbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjNlMiIsIk00MzkuOCAyMDAuNWMtNy43LTMwLjktMjIuMy01NC4yLTUzLjQtNTQuMmwtNDAuMSAwIDAgNDcuNGMwIDM2LjgtMzEuMiA2Ny44LTY2LjggNjcuOGwtMTA2LjggMGMtMjkuMiAwLTUzLjQgMjUtNTMuNCA1NC4zbDAgMTAxLjhjMCAyOSAyNS4yIDQ2IDUzLjQgNTQuMyAzMy44IDkuOSA2Ni4zIDExLjcgMTA2LjggMCAyNi45LTcuOCA1My40LTIzLjUgNTMuNC01NC4zbDAtNDAuNy0xMDYuNyAwIDAtMTMuNiAxNjAuMiAwYzMxLjEgMCA0Mi42LTIxLjcgNTMuNC01NC4yIDExLjItMzMuNSAxMC43LTY1LjcgMC0xMDguNnpNMjg2LjIgNDQ0LjdhMjAuNCAyMC40IDAgMSAxIDAtNDAuNyAyMC40IDIwLjQgMCAxIDEgMCA0MC43ek0xNjcuOCAyNDguMWwxMDYuOCAwYzI5LjcgMCA1My40LTI0LjUgNTMuNC01NC4zbDAtMTAxLjljMC0yOS0yNC40LTUwLjctNTMuNC01NS42LTM1LjgtNS45LTc0LjctNS42LTEwNi44IC4xLTQ1LjIgOC01My40IDI0LjctNTMuNCA1NS42bDAgNDAuNyAxMDYuOSAwIDAgMTMuNi0xNDcgMGMtMzEuMSAwLTU4LjMgMTguNy02Ni44IDU0LjItOS44IDQwLjctMTAuMiA2Ni4xIDAgMTA4LjYgNy42IDMxLjYgMjUuNyA1NC4yIDU2LjggNTQuMmwzNi43IDAgMC00OC44YzAtMzUuMyAzMC41LTY2LjQgNjYuOC02Ni40ek0xNjEuMiA2NC43YTIwLjQgMjAuNCAwIDEgMSAwIDQwLjggMjAuNCAyMC40IDAgMSAxIDAtNDAuOHoiXX0sZGdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNhc2gtYXBwIixpY29uOls0NDgsNTEyLFtdLCJlN2Q0IiwiTTQ0MC4zIDk2LjljLTkuNC0yNi41LTMwLjMtNDcuNC01Ni44LTU3LTI0LjEtNy45LTQ2LjMtNy45LTkxLjYtNy45TDE1NiAzMmMtNDQuOCAwLTY3LjIgMC05MS4zIDcuNS0yNi41IDkuNi00Ny40IDMwLjUtNTcgNTctNy43IDI0LjMtNy43IDQ2LjctNy43IDkxLjdMMCAzMjMuOGMwIDQ1LjIgMCA2Ny40IDcuNSA5MS41IDkuNiAyNi41IDMwLjUgNDcuNCA1NyA1NyAyNC4zIDcuNyA0Ni43IDcuNyA5MS42IDcuN2wxMzUuNyAwYzQ1IDAgNjcuNCAwIDkxLjYtNy43IDI2LjUtOS42IDQ3LjQtMzAuNSA1Ny01NyA3LjctMjQuMyA3LjctNDYuNyA3LjctOTEuNWwwLTEzNS41YzAtNDUgMC02Ny40LTcuNy05MS41ek0zMjMuMSAxODUuNGwtMjUuOCAyMS4xYy0yLjMgMS45LTUuNSAxLjUtNy4zLS45LTEzLjItMTYuMi0zMy43LTI1LjQtNTYuMS0yNS40LTI1IDAtNDAuNiAxMC45LTQwLjYgMjYuMi0uNCAxMi44IDExLjcgMTkuNiA0OS4xIDI3LjcgNDcuMiAxMCA2OC43IDI5LjcgNjguNyA2Mi43IDAgNDEuNC0zMy43IDcxLjktODYuNCA3NS4zbC01LjEgMjQuNWMtLjQgMi4zLTIuNiA0LjEtNS4xIDQuMWwtNDAuNiAwYy0zLjQgMC01LjgtMy4yLTUuMS02LjRsNi40LTI3LjNjLTI2LTcuNS00Ny4yLTIyLTU5LjMtMzkuNy0xLjUtMi4zLTEuMS01LjMgMS4xLTdsMjguMi0yMmMyLjMtMS45IDUuOC0xLjMgNy41IDEuMSAxNC45IDIwLjkgMzggMzMuMyA2NS43IDMzLjMgMjUgMCA0My44LTEyLjIgNDMuOC0yOS43IDAtMTMuNC05LjQtMTkuNi00MS4yLTI2LjItNTQuMi0xMS43LTc1LjgtMzEuOC03NS44LTY0LjkgMC0zOC40IDMyLjItNjcuMiA4MC45LTcxbDUuMy0yNS40Yy40LTIuMyAyLjYtNC4xIDUuMS00LjFsMzkuOSAwYzMuMiAwIDUuOCAzIDUuMSA2LjJsLTYuMiAyOC40YzIwLjkgNi40IDM4IDE3LjkgNDguNyAzMi4yIDEuNyAyLjEgMS4zIDUuMy0uOSA3eiJdfSxwZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGludGVyZXN0LXAiLGljb246WzM4NCw1MTIsW10sImYyMzEiLCJNMjA0IDYuNWMtMTAyLjYgMC0yMDQgNjguNC0yMDQgMTc5LjEgMCA3MC40IDM5LjYgMTEwLjQgNjMuNiAxMTAuNCA5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44IDAtOTkuMy04NS44LTE2NC4xLTE4MC0xNjQuMXoiXX0saGdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IndobWNzIixpY29uOls0NDgsNTEyLFtdLCJmNDBkIiwiTTQ0OCAxNjFsMC0yMS4zLTI4LjUtOC44LTIuMi0xMC40IDIwLjEtMjAuNy0xMC40LTE5LjQtMjkgNy41LTcuMi03LjUgNy41LTI4LjItMTkuMS0xMS42LTIxLjMgMjEtMTAuNy0zLjItNy0yNi40LTIyLjYgMC02LjIgMjYuNC0xMi4xIDMuMi0xOS43LTIxLTE5LjQgMTEgOC4xIDI3LjctOC4xIDguNC0yOC41LTcuNS0xMSAxOS4xIDIwLjcgMjEtMi45IDEwLjQtMjguNSA3LjgtLjMgMjEuNyAyOC44IDcuNSAyLjQgMTIuMS0yMC4xIDE5LjkgMTAuNCAxOC41IDI5LjYtNy41IDcuMiA4LjYtOC4xIDI2LjkgMTkuOSAxMS42IDE5LjQtMjAuNCAxMS42IDIuOSA2LjcgMjguNSAyMi42IC4zIDYuNy0yOC44IDExLjYtMy41IDIwLjcgMjEuNiAyMC40LTEyLjEtOC44LTI4IDcuOC04LjEgMjguOCA4LjggMTAuMy0yMC4xLTIwLjktMTguOCAyLjItMTIuMSAyOS4xLTd6TTMyOC44IDkyLjZhNTYuOCA1Ni44IDAgMSAxIDAgMTEzLjYgNTYuOCA1Ni44IDAgMSAxIDAtMTEzLjZ6bTcyLjMgMTMwbDQ2LjkgMTQuNSAwIDM5LjktNTUuMSAxMy40LTQuMSAyMi43IDM4LjkgMzUuMy0xOS4yIDM3LjktNTQtMTYuNy0xNC42IDE1LjIgMTYuNyA1Mi41LTM4LjMgMjIuNy0zOC45LTQwLjUtMjEuNyA2LjYtMTIuNiA1NC00Mi40LS41LTEyLjYtNTMuNi0yMS43LTUuNi0zNi40IDM4LjQtMzcuNC0yMS43IDE1LjItNTAuNS0xMy43LTE2LjEtNTUuNSAxNC4xLTE5LjctMzQuOCAzNy45LTM3LjQtNC44LTIyLjgtNTQtMTQuMSAuNS00MC45IDUzLjUtMTQuNyA1LjctMTkuNy0zOC45LTM5LjQgMjAuNy0zNS44IDUzLjYgMTQuMSAxNS4yLTE1LjctMTUuMi01MiAzNi40LTIwLjcgMzYuOCAzOS40IDIyLjctNi4xIDExLjYtNTIgNDIuNCAwIDExLjYgNDUuOS0yMi42LTUuOS02LjMtMS43LTMuMyA1LjctMTEgMTkuMS0zLjMgNS42IDQuNiA0LjYgMTcuMiAxNy40LS4zIDEtMjMuOCA2LjUtNi4yIDEuN2MwIDMuMi0uMSA5LjYtLjMgMTkuMy00Ny41IDEwLjQtODMuMyA1Mi44LTgzLjMgMTAzLjUgMCA1OC4zIDQ3LjMgMTA1LjcgMTA1LjcgMTA1LjcgNTAuNSAwIDkyLjctMzUuNCAxMDMuMi04Mi44IDkuOSAuMSAxNi42IC4yIDIwLjEgLjNsMS42LTYuNyA1LjYtMjQgMS45LS42IDE3LjEgMTcuOCA0LjcgNC45IDUuOC0zLjQgMjAuNC0xMi4xIDUuOC0zLjUtMi02LjUtNi44LTIxLjJ6Il19LHVnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqb2dldCIsaWNvbjpbNTEyLDUxMixbXSwiZjNiNyIsIk0zODYuMSA0NUMzNDUuNiAxOS45IDMwMC42IDggMjU2LjIgOCAxNzMgOCA5MS44IDQ5LjkgNDQuOSAxMjUuOS0yNyAyNDIuNSA5LjMgMzk1LjIgMTI1LjkgNDY3LjFzMjY5LjMgMzUuNiAzNDEuMi04MC45QzUzOSAyNjkuNiA1MDIuNyAxMTYuOCAzODYuMSA0NXptNTEuOCAzMjMuMmMtNDAuNCA2NS41LTExMC40IDEwMS41LTE4MiAxMDEuNS02LjggMC0xMy42LS40LTIwLjQtMS05LTEzLjYtMTkuOS0zMy4zLTIzLjctNDIuNC01LjctMTMuNy0yNy4yLTQ1LjYgMzEuMi02Ny4xIDUxLjctMTkuMSAxNzYuNy0xNi41IDIwOC44LTE3LjYtNCA5LTguNiAxNy45LTEzLjkgMjYuNnpNMjM3LjEgMjgxLjljLTU1LjUtMS40LTgxLjctMjAuOC01OC41LTQ4LjJzNTEuMS00MC43IDY4LjktNTEuMmMxNy45LTEwLjUgMjcuMy0zMy43LTIzLjYtMjkuNy0xMjguNiA4LjctMTY3LjMgOTkuMy0xNzguMyAxNDAuMi04LjgtNDkuNy0uMS0xMDIuNyAyOC41LTE0OS4xIDYxLjktMTAwLjUgMTkzLjUtMTMxLjcgMjk0LTY5LjggNzQuOCA0Ni4xIDExMS4yIDEzMC45IDk5LjMgMjEyLjctMjQuOS0uNS0xNzkuMy0zLjYtMjMwLjMtNC45em0xODMuOC01NC44Yy0yMi43LTYtNTcgMTEuMy04Ni43IDI3LjItMjkuNyAxNS44LTMxLjEgOC4yLTMxLjEgOC4yczQwLjItMjguMSA1MC43LTM0LjUgMzEuOS0xNCAxMy40LTI0LjZjLTMuMi0xLjgtNi43LTIuNy0xMC40LTIuNy0xNy44IDAtNDEuNSAxOC43LTY3LjUgMzUuNi0zMS41IDIwLjUtNjUuMyAzMS4zLTY1LjMgMzEuM0wzOTMuNSAyNjYgNDQwIDI0Mi42czMuNi05LjUtMTkuMS0xNS41eiJdfSxPRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUteW91dHViZSIsaWNvbjpbNDQ4LDUxMixbNjE3OTgsInlvdXR1YmUtc3F1YXJlIl0sImY0MzEiLCJNMjgyIDI1Ni4ybC05NS4yLTU0LjEgMCAxMDguMiA5NS4yLTU0LjF6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0em0xNC40IDEzNi4xYzcuNiAyOC42IDcuNiA4OC4yIDcuNiA4OC4yczAgNTkuNi03LjYgODguMWMtNC4yIDE1LjgtMTYuNSAyNy43LTMyLjIgMzEuOS0yOC4zIDcuNy0xNDIuMiA3LjctMTQyLjIgNy43cy0xMTMuOSAwLTE0Mi4yLTcuNmMtMTUuNy00LjItMjgtMTYuMS0zMi4yLTMxLjktNy42LTI4LjYtNy42LTg4LjItNy42LTg4LjJzMC01OS43IDcuNi04OC4yYzQuMi0xNS44IDE2LjUtMjguMiAzMi4yLTMyLjQgMjguMy03LjcgMTQyLjItNy43IDE0Mi4yLTcuN3MxMTMuOSAwIDE0Mi4yIDcuN2MxNS43IDQuMiAyOCAxNi42IDMyLjIgMzIuNHoiXX0sZmdlPU9FLG1nZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhdGxhc3NpYW4iLGljb246WzUxMiw1MTIsW10sImY3N2IiLCJNMTUyLjIgMjM2LjRjLTcuNy04LjItMTkuNy03LjctMjQuOCAyLjhMMS42IDQ5MC4yYy01IDEwIDIuNCAyMS43IDEzLjQgMjEuN2wxNzUgMGM1LjggLjEgMTEtMy4yIDEzLjQtOC40IDM3LjktNzcuOCAxNS4xLTE5Ni4zLTUxLjItMjY3LjF6TTI0NC40IDguMWMtMTIyLjMgMTkzLjQtOC41IDM0OC42IDY1IDQ5NS41IDIuNSA1LjEgNy43IDguNCAxMy40IDguNEw0OTcgNTEyYzExLjIgMCAxOC40LTExLjggMTMuNC0yMS43IDAgMC0yMzQuNS00NzAuNi0yNDAuNC00ODIuMy01LjMtMTAuNi0xOC44LTEwLjgtMjUuNiAuMXoiXX0sZ2dlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBpZWQtcGlwZXItaGF0IixpY29uOls2NDAsNTEyLFtdLCJmNGU1IiwiTTY0MCAyNC45Yy04MC44IDUzLjYtODkuNCA5Mi41LTk2LjQgMTA0LjQtNi43IDEyLjItMTEuNyA2MC4zLTIzLjMgODMuNi0xMS43IDIzLjYtNTQuMiA0Mi4yLTY2LjEgNTAtMTEuNyA3LjgtMjguMyAzOC4xLTQxLjkgNjQuMi0xMDguMS00LjQtMTY3LjQgMzguOC0yNTkuMiA5My42IDI5LjQtOS43IDQzLjMtMTYuNyA0My4zLTE2LjcgOTQuMi0zNiAxMzkuMy02OC4zIDI4MS4xLTQ5LjIgMS4xIDAgMS45IC42IDIuOCAuOCAzLjkgMi4yIDUuMyA2LjkgMy4xIDEwLjhsLTUzLjkgOTUuOGMtMi41IDQuNy03LjggNy4yLTEzLjEgNi4xLTEyNi44LTIzLjgtMjI2LjkgMTcuMy0zMTguOSAxOC42LTczLjQgMS4xLTk3LjUtMzMuNS05Ny41LTM1LjEgMC0xLjEgLjYtMS43IDEuNy0xLjcgMCAwIDM4LjMgMCAxMDMuMS0xNS4zIDczLjYtMTQwLjMgMTM5LjItMTg5LjQgMjEwLjYtMTg5LjQgMCAwIDcxLjcgMCA5MC42IDYxLjkgMjIuOC0zOS43IDI4LjMtNDkuMiAyOC4zLTQ5LjIgNS4zLTkuNCAzNS03Ny4yIDg2LjQtMTQxLjQgNTEuNS02NCA5MC40LTc5LjkgMTE5LjMtOTEuOHoiXX0sYmdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImludGVybmV0LWV4cGxvcmVyIixpY29uOls1MTIsNTEyLFtdLCJmMjZiIiwiTTQ4My4xIDE1OS43YzEwLjktMjQuNiAyMS40LTYwLjQgMjEuNC04Ny45IDAtNzIuNy03OS42LTk4LjQtMjA5LjctMzguNi0xMDcuNi03LjItMjExLjIgNzMuNy0yMzcuMSAxODYuNSAzMC45LTM0LjkgNzguMy04Mi4zIDEyMi0xMDEuMi01NC4zIDQ4LjMtMTAwLjYgMTA5LjQtMTM1LjcgMTczLjItMjAuNyAzNy45LTQ0IDk5LjItNDQgMTQ1IDAgOTguNiA5Mi45IDg2LjUgMTgwLjMgNDIgMzEuNCAxNS40IDY2LjYgMTUuNiAxMDEuNyAxNS42IDk3LjEgMCAxODQuMi01NC4zIDIxNi44LTE0NmwtMTIwLjggMGMtNTIuNSA4OC42LTE5Ni44IDUzLTE5Ni44LTQ3LjRsMzI4LjggMGM2LjQtNDMuNi0xLjctOTUuNy0yNi45LTE0MS4yek02NC42IDM0Ni45QzgyLjMgMzk4IDExOC4zIDQ0Mi43IDE2NC44IDQ3MC4yIDc2LjEgNTE5LjEtOC40IDQ5OS4zIDY0LjYgMzQ2Ljl6TTE4MC41IDIzOGMyLTU1LjIgNTAuMy05NC45IDEwNC05NC45IDUzLjQgMCAxMDIgMzkuNyAxMDQgOTQuOWwtMjA4IDB6TTM2NS4xIDUwLjRjMjEuNC0xMC4zIDQ4LjYtMjIgNzIuNi0yMiAzMS40IDAgNTQuMyAyMS43IDU0LjMgNTMuNyAwIDIwLTcuNCA0OS0xNC42IDY3LjktMjYuMy00Mi4zLTY2LTgxLjYtMTEyLjMtOTkuNnoiXX0sdmdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFpcmJuYiIsaWNvbjpbNDQ4LDUxMixbXSwiZjgzNCIsIk0yMjQuNSAzNzMuMWMtMjUuMi0zMS43LTQwLjEtNTkuNC00NS04My4yLTIyLjUtODggMTEyLjYtODggOTAuMSAwLTUuNCAyNC4yLTIwLjMgNTItNDUgODMuMmwtLjEgMHptMTM4LjIgNzMuMmMtNDIuMSAxOC4zLTgzLjctMTAuOS0xMTkuMy01MC41IDEwMy45LTEzMC4xIDQ2LjEtMjAwLTE4LjgtMjAwLTU0LjkgMC04NS4yIDQ2LjUtNzMuMyAxMDAuNSA2LjkgMjkuMiAyNS4yIDYyLjQgNTQuNCA5OS41LTMyLjUgMzYtNjAuNSA1Mi43LTg1LjIgNTQuOS01MCA3LjQtODkuMS00MS4xLTcxLjMtOTEuMSAxNS4xLTM5LjIgMTExLjctMjMxLjIgMTE1LjktMjQxLjYgMTUuOC0zMC4xIDI1LjYtNTcuNCA1OS40LTU3LjQgMzIuMyAwIDQzLjQgMjUuOSA2MC40IDU5LjkgMzYgNzAuNiA4OS40IDE3Ny41IDExNC44IDIzOS4xIDEzLjIgMzMuMS0xLjQgNzEuMy0zNyA4Ni42em00Ny0xMzYuMWMtMTI4LjktMjc0LjMtMTM2LTI3OC4yLTE4NS4xLTI3OC4yLTQ1LjUgMC02NC45IDMxLjctODQuNyA3Mi44LTEwNi4yIDIxMi4zLTExNi40IDI0Mi40LTExNy4zIDI0NS0yNS4yIDY5LjMgMjYuNyAxMzAuMiA4OS42IDEzMC4yIDIxLjcgMCA2MC42LTYuMSAxMTIuNC02Mi40IDU4LjcgNjMuOCAxMDEuMyA2Mi40IDExMi40IDYyLjQgNjIuOSAuMSAxMTQuOS02MC45IDg5LjYtMTMwLjIgMC0zLjktMTYuOC0zOC45LTE2LjgtMzkuNmwwIDB6Il19LHlnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJqcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjNiOCIsIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yNDMuOCAzODEuNGMwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNS0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjd6bTk5LjYgNjMuNWMtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjZ6Il19LHhnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJxdWluc2NhcGUiLGljb246WzUxMiw1MTIsW10sImY0NTkiLCJNMzEzLjcgNDc0LjZsLTEgMGMtNDEuOSAwLTgyLjEtMTYuNy0xMTEuOC00Ni4zcy00Ni4zLTY5LjktNDYuMy0xMTEuOCAxNi43LTgyLjEgNDYuMy0xMTEuOCA2OS45LTQ2LjMgMTExLjgtNDYuM2M5NC45IDAgMTY4LjIgODMuMSAxNTcgMTc2LjYgNCA1LjEgOC4yIDkuNiAxMS4yIDE1LjMgMTMuNC0zMC4zIDIwLjMtNjIuNCAyMC4zLTk3LjcgMC0xMzUuMS0xMDkuNS0yNDQuNi0yNDQuNi0yNDQuNlMxMi4xIDExNy41IDEyLjEgMjUyLjYgMTIxLjYgNDk3LjIgMjU2LjYgNDk3LjJjMjMuOCAuMiA0Ny42LTMuMiA3MC40LTEwLjEtNS4yLTMuNS04LjktOC4xLTEzLjMtMTIuNXptNzguMy0xNjlhOTkuMiA5OS4yIDAgMSAwIDAgMTk4LjQgOTkuMiA5OS4yIDAgMSAwIDAtMTk4LjR6Il19LHdnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhZHZlcnNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjM2YSIsIk00ODIuMSAzMkwyOC43IDMyQzUuOCAzMiAwIDM3LjkgMCA2MC45TDAgNDUxLjFDMCA0NzQuNCA1LjggNDgwIDI4LjcgNDgwbDQ1My40IDBjMjQuNCAwIDI5LjktNS4yIDI5LjktMjkuN2wwLTM4OC4xYzAtMjQuNi01LjQtMzAuMi0yOS45LTMwLjJ6TTE3OC40IDIyMC4zYy0yNy41LTIwLjItNzIuMS04LjctODQuMiAyMy40LTQuMyAxMS4xLTkuMyA5LjUtMTcuNSA4LjMtOS43LTEuNS0xNy4yLTMuMi0yMi41LTUuNS0yOC44LTExLjQgOC42LTU1LjMgMjQuOS02NC4zIDQxLjEtMjEuNCA4My40LTIyLjIgMTI1LjMtNC44IDQwLjkgMTYuOCAzNC41IDU5LjIgMzQuNSAxMjguNSAyLjcgMjUuOC00LjMgNTguMyA5LjMgODguOCAxLjkgNC40IC40IDcuOS0yLjcgMTAuNy04LjQgNi43LTM5LjMgMi4yLTQ2LjYtNy40LTEuOS0yLjItMS44LTMuNi0zLjktNi4yLTMuNi0zLjktNy4zLTIuMi0xMS45IDEtNTcuNCAzNi40LTE0MC4zIDIxLjQtMTQ3LTQzLjMtMy4xLTI5LjMgMTIuNC01Ny4xIDM5LjYtNzEgMzguMi0xOS41IDExMi4yLTExLjggMTE0LTMwLjkgMS4xLTEwLjItMS45LTIwLjEtMTEuMy0yNy4zem0yODYuNyAyMjJjMCAxNS4xLTExLjEgOS45LTE3LjggOS45bC0zOTQuOSAwYy03LjQgMC0xOC4yIDQuOC0xNy44LTEwLjcgLjQtMTMuOSAxMC41LTkuMSAxNy4xLTkuMSAxMzIuMy0uNCAyNjQuNS0uNCAzOTYuOCAwIDYuOCAwIDE2LjYtNC40IDE2LjYgOS45em0zLjgtMzQwLjVsMCAyOTFjMCA1LjctLjcgMTMuOS04LjEgMTMuOS0xMi40LS40LTI3LjUgNy4xLTM2LjEtNS42LTUuOC04LjctNy44LTQtMTIuNC0xLjItNTMuNCAyOS43LTEyOC4xIDcuMS0xNDQuNC04NS4yLTYuMS0zMy40LS43LTY3LjEgMTUuNy0xMDAgMTEuOC0yMy45IDU2LjktNzYuMSAxMzYuMS0zMC41bDAtNzFjMC0yNi4yLS4xLTI2LjIgMjYtMjYuMiAzLjEgMCA2LjYgLjQgOS43IDAgMTAuMS0uOCAxMy42IDQuNCAxMy42IDE0LjMtLjEgLjItLjEgLjMtLjEgLjV6TTQxNy40IDMzNC4xYy0xOS41IDQ3LjYtNzIuOSA0My4zLTkwIDUuMi0xNS4xLTMzLjMtMTUuNS02OC4yIC40LTEwMS41IDE2LjMtMzQuMSA1OS43LTM1LjcgODEuNS00LjggMjAuNiAyOC44IDE0LjkgODQuNiA4LjEgMTAxLjF6TTEyMi42IDM2OS40Yy03LjUtMS4zLTMzLTMuMy0zMy43LTI3LjgtLjQtMTMuOSA3LjgtMjMgMTkuOC0yNS44IDI0LjQtNS45IDQ5LjMtOS45IDczLjctMTQuNyA4LjktMiA3LjQgNC40IDcuOCA5LjUgMS40IDMzLTI2LjEgNTkuMi02Ny42IDU4Ljh6Il19LE1nZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjcmVhdGl2ZS1jb21tb25zIixpY29uOls1MTIsNTEyLFtdLCJmMjVlIiwiTTI1My44IDIxNC45bC0zMy4yIDE3LjNjLTkuNC0xOS42LTI1LjItMTkuOS0yNy41LTE5LjktMjIuMSAwLTMzLjIgMTQuNi0zMy4yIDQzLjggMCAyMy42IDkuMiA0My44IDMzLjIgNDMuOCAxNC41IDAgMjQuNi03LjEgMzAuNi0yMS4zbDMwLjYgMTUuNWMtNi4yIDExLjUtMjUuNyAzOS02NS4xIDM5LTIyLjYgMC03NC0xMC4zLTc0LTc3IDAtNTguNyA0My03Ny4xIDcyLjYtNzcuMSAzMC43IDAgNTIuNyAxMS45IDY2IDM1Ljl6bTE0MyAwbC0zMi44IDE3LjNjLTkuNS0xOS44LTI1LjctMTkuOS0yNy45LTE5LjktMjIuMSAwLTMzLjIgMTQuNi0zMy4yIDQzLjggMCAyMy41IDkuMiA0My44IDMzLjIgNDMuOCAxNC40IDAgMjQuNi03LjEgMzAuNS0yMS4zbDMxIDE1LjVjLTIuMSAzLjgtMjEuNCAzOS02NS4xIDM5LTIyLjcgMC03NC05LjktNzQtNzcgMC01OC43IDQzLTc3LjEgNzIuNi03Ny4xIDMwLjcgMCA1Mi42IDExLjkgNjUuNiAzNS45ek0yNTUuNiA4QzExMi43IDggOCAxMjMuMSA4IDI1Ni4xIDggMzk0LjUgMTIxLjYgNTA0LjEgMjU1LjYgNTA0LjEgMzg1LjUgNTA0LjEgNTA0IDQwMy4yIDUwNCAyNTYuMSA1MDQgMTE4LjIgMzk3LjQgOCAyNTUuNiA4em0uOSA0NTAuOGMtMTEyLjUgMC0yMDMuNy05My0yMDMuNy0yMDIuOCAwLTEwNS40IDg1LjQtMjAzLjMgMjAzLjctMjAzLjMgMTEyLjUgMCAyMDIuOCA4OS41IDIwMi44IDIwMy4zIDAgMTIxLjctOTkuNyAyMDIuOC0yMDIuOCAyMDIuOHoiXX0semdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im5vdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZTdkOSIsIk05NC45IDEwMC4yYzE0LjkgMTIuMSAyMC41IDExLjIgNDguNiA5LjNMNDA3LjggOTMuNmM1LjYgMCAuOS01LjYtLjktNi41TDM2Mi45IDU1LjRjLTguNC02LjUtMTkuNi0xNC00MS4xLTEyLjFMNjUuOSA2MS45Yy05LjMgLjktMTEuMiA1LjYtNy41IDkuM2wzNi40IDI4Ljl6bTE1LjkgNjEuNmwwIDI3OC4xYzAgMTQuOSA3LjUgMjAuNSAyNC4zIDE5LjZsMjkwLjUtMTYuOGMxNi44LS45IDE4LjctMTEuMiAxOC43LTIzLjNsMC0yNzYuMmMwLTEyLjEtNC43LTE4LjctMTUtMTcuN0wxMjUuNyAxNDMuMWMtMTEuMiAuOS0xNC45IDYuNS0xNC45IDE4Ljd6bTI4Ni43IDE0LjljMS45IDguNCAwIDE2LjgtOC40IDE3LjhsLTE0IDIuOCAwIDIwNS4zYy0xMi4yIDYuNS0yMy40IDEwLjMtMzIuNyAxMC4zLTE1IDAtMTguNy00LjctMjkuOS0xOC43bC05MS41LTE0My43IDAgMTM5IDI5IDYuNXMwIDE2LjgtMjMuNCAxNi44bC02NC40IDMuN2MtMS45LTMuNyAwLTEzLjEgNi41LTE0LjlsMTYuOC00LjcgMC0xODMuOC0yMy4zLTEuOWMtMS45LTguNCAyLjgtMjAuNSAxNS45LTIxLjVsNjkuMS00LjcgOTUuMyAxNDUuNiAwLTEyOC44LTI0LjMtMi44Yy0xLjktMTAuMyA1LjYtMTcuNyAxNC45LTE4LjdsNjQuNS0zLjh6TTQ0LjQgMzYuN0wzMTAuNiAxNy4xYzMyLjctMi44IDQxLjEtLjkgNjEuNiAxNGw4NSA1OS43YzE0IDEwLjMgMTguNyAxMy4xIDE4LjcgMjQuM2wwIDMyNy42YzAgMjAuNS03LjUgMzIuNy0zMy42IDM0LjVMMTMzLjIgNDk1LjhjLTE5LjYgLjktMjktMS45LTM5LjItMTQuOUwzMS40IDM5OS43Yy0xMS4yLTE0LjktMTUuOS0yNi4xLTE1LjktMzkuMmwwLTI5MS4yYzAtMTYuOCA3LjUtMzAuOCAyOC45LTMyLjd6Il19LGtnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjaHJvbWVjYXN0IixpY29uOls1MTIsNTEyLFtdLCJmODM4IiwiTTQ0OCA2NEw2NC4yIDY0Yy0yMy42IDAtNDIuNyAxOS4xLTQyLjcgNDIuN2wwIDYzLjkgNDIuNyAwIDAtNjMuOSAzODMuOCAwIDAgMjk4LjYtMTQ5LjIgMCAwIDQyLjcgMTQ5LjQgMGMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN2wwLTI5OC42QzQ5MC45IDgzLjEgNDcxLjYgNjQgNDQ4IDY0ek0yMS41IDM4My42bDAgNjMuOSA2My45IDBjMC0zNS4zLTI4LjYtNjMuOS02My45LTYzLjl6bTAtODVsMCA0Mi40YzU4LjkgMCAxMDYuNiA0OC4xIDEwNi42IDEwN2w0Mi43IDBjLjEtODIuNC02Ni45LTE0OS4zLTE0OS4zLTE0OS40ek0yMTMuNiA0NDhsNDIuNyAwQzI1NS44IDMxOC41IDE1MSAyMTMuNyAyMS41IDIxMy40bDAgNDIuNGMxMDYtLjIgMTkyIDg2LjIgMTkyLjEgMTkyLjJ6Il19LFNnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bHRyYWx5dGljcy1odWIiLGljb246WzUxMiw1MTIsW10sImU4NmUiLCJNMTMwLjQgMTZjNjAuOSAwIDExMC40IDQ5LjUgMTEwLjQgMTEwLjRsMCAyNC45YzQuOC0uNyA5LjctMSAxNC42LTEgODguMS0uMiAxNjUuMSA0OSAyMDUuNCAxMjEuMi0yMi44LTE2LjItNTAuNy0yNS40LTgwLjQtMjUuMy03Ny4xIC4yLTEzOS41IDYyLjYtMTM5LjYgMTM5LjQtLjEgNjAuOS00OS41IDExMC4zLTExMC43IDExMC41LTYwLjYgLjItMTEwLjItNDkuNS0xMTAuMi0xMTAuNSAuMi0yLjYgMCAwIC4xLTMuMmwwLTI1NkMyMC4xIDY1LjUgNjkuNSAxNiAxMzAuNCAxNnpNMzgwLjMgNDk2YTExMC40IDExMC40IDAgMSAxIDAtMjIwLjkgMTEwLjQgMTEwLjQgMCAxIDEgMCAyMjAuOXoiXX0sQ2dlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Indpa2lwZWRpYS13IixpY29uOls2NDAsNTEyLFtdLCJmMjY2IiwiTTY0MCA1MS4ybC0uMyAxMi4yYy0yOC4xIC44LTQ1IDE1LjgtNTUuOCA0MC4zLTI1IDU3LjgtMTAzLjMgMjQwLTE1NS4zIDM1OC42bC0xMy42IDAtODEuOS0xOTMuMWMtMzIuNSA2My42LTY4LjMgMTMwLTk5LjIgMTkzLjEtLjMgLjMtMTUgMC0xNS0uMy00Ni45LTEwOS43LTk2LjEtMjE4LjYtMTQzLjEtMzI4LjYtMTEuNC0yNi43LTQ5LjQtNzAtNzUuNi02OS43IDAtMy4xLS4zLTEwLS4zLTE0LjJsMTYxLjkgMCAwIDEzLjljLTE5LjIgMS4xLTUyLjggMTMuMy00My4zIDM0LjIgMjEuOSA0OS43IDEwMy42IDI0MC4zIDEyNS42IDI4OC42IDE1LTI5LjcgNTcuOC0xMDkuMiA3NS4zLTE0Mi44LTEzLjktMjguMy01OC42LTEzMy45LTcyLjgtMTYwLTkuNy0xNy44LTM2LjEtMTkuNC01NS44LTE5LjdsMC0xMy45IDE0Mi41IC4zIDAgMTMuMWMtMTkuNCAuNi0zOC4xIDcuOC0yOS40IDI2LjEgMTguOSA0MCAzMC42IDY4LjEgNDguMSAxMDQuNyA1LjYtMTAuOCAzNC43LTY5LjQgNDguMS0xMDAuOCA4LjktMjAuNi0zLjktMjguNi0zOC42LTI5LjQgLjMtMy42IDAtMTAuMyAuMy0xMy42IDQ0LjQtLjMgMTExLjEtLjMgMTIzLjEtLjZsMCAxMy42QzQ2Mi40IDY0IDQzOS4xIDc2IDQyNi44IDk0LjlMMzY3LjYgMjE3LjdjNi40IDE2LjEgNjMuMyAxNDIuOCA2OS4yIDE1Ni43TDU1OS4yIDkxLjhjLTguNi0yMy4xLTM2LjQtMjguMS00Ny4yLTI4LjNsMC0xMy45IDEyNy44IDEuMSAuMiAuNXoiXX0sX2dlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNpdHJveCIsaWNvbjpbNDQ4LDUxMixbXSwiZTQ0YSIsIk0yMTIuNCAwbDAgMCAyMzUuNiAwIDAgMTI4LTM4NCAwQzY0IDU3LjYgMTQxLjggLjUgMjEyLjQgMHptMjQuOCAxOTJsMCAwYzY5LjkgLjUgMTQ2LjcgNTcuNiAxNDYuNyAxMjhsLTE3My4yIDAgMCAwQzE0MC45IDMxOS42IDY0IDI2Mi40IDY0IDE5MmwxNzMuMyAwem0tMS43IDMyMGM3MC43LS41IDE0OC40LTU3LjYgMTQ4LjQtMTI4bC0zODQgMCAwIDEyOCAyMzUuNiAwIDAgMHoiXX0sUkU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWdpdGxhYiIsaWNvbjpbNDQ4LDUxMixbImdpdGxhYi1zcXVhcmUiXSwiZTVhZSIsIk0wIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ6bTMzNy41IDEyLjVsNDQuNiAxMTYuNCAuNCAxLjJjNS42IDE2LjggNy4yIDM1LjIgMi4zIDUyLjUtNSAxNy4yLTE1LjQgMzIuNC0yOS44IDQzLjNsLS4yIC4xLTY4LjQgNTEuMi01NC4xIDQwLjljLS41IC4yLTEuMSAuNS0xLjcgLjgtMiAxLTQuNCAyLTYuNyAyLTMgMC02LjgtMS44LTguMy0yLjhsLTU0LjItNDAuOS02Ny45LTUwLjktLjQtLjMtLjItLjFjLTE0LjMtMTAuOC0yNC44LTI2LTI5LjctNDMuM3MtNC4yLTM1LjcgMi4yLTUyLjVsLjUtMS4yIDQ0LjctMTE2LjRjLjktMi4zIDIuNS00LjMgNC41LTUuNiAxLjYtMSAzLjQtMS42IDUuMi0xLjggMS4zLS43IDIuMS0uNCAzLjQgLjEgLjYgLjIgMS4yIC41IDIgLjcgMSAuNCAxLjYgLjkgMi40IDEuNSAuNiAuNCAxLjIgMSAyLjEgMS41IDEuMiAxLjQgMi4yIDMgMi43IDQuOGwyOS4yIDkyLjIgMTIyLjkgMCAzMC4yLTkyLjJjLjUtMS44IDEuNC0zLjQgMi42LTQuOHMyLjgtMi40IDQuNS0zLjFjMS43LS42IDMuNi0uOSA1LjQtLjdzMy42IC44IDUuMiAxLjhjMiAxLjMgMy43IDMuMyA0LjYgNS42eiJdfSxUZ2U9UkUsTGdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNob2VsYWNlIixpY29uOls1MTIsNTEyLFtdLCJlNjBjIiwiTTQwNS4yIDMzMWMyLjItMS4xIDQuNC0yLjMgNi41LTMuN2w4LjMtNC44YzEuNS0xLjEgNC40LTMuNCA4LjctNi43bC41LS41YzMuNC0zLjQgNy4yLTUgMTEuMy00LjkgMS44IDAgMy45IC41IDYuNCAxLjVsMzEtMjcuNWMuOS0uNyAxLjctMS4zIDIuNi0xLjhsLjIgMGMzLjMtMS45IDYtMS44IDguMiAuNCAzLjkgMi4xIDQuMiA1LjYgLjkgMTAuNkw0NTcuMiAzMjJjLjIgLjUgLjQgMSAuNCAxLjUgLjUgMi4yIC4zIDQuNC0uNSA2LjYtLjcgMS41LTEuOCAyLjktMy4xIDQuMi0xLjQgMS40LTIuNyAyLjgtNC4yIDQuMkw0MzEgMzUyLjJjLTEuNyAxLjItMy40IDIuMy01LjEgMy4zLTIuMSAxLjMtNC4zIDIuNS02LjYgMy42LTEgLjQtMS45IC45LTIuOSAxLjMtNS45IDIuNS0xMS45IDQuMi0xOC4yIDUtMi45IDI0LjUtMTEuMyA0Ny4xLTI1LjEgNjcuOC0xNy41IDI1LjctNDEuNCA0NS40LTcxLjggNTguOC0zMC4yIDEzLjUtNjMgMjAuMi05OC4yIDIwLjItNDguNi0uNS04OC0xMS40LTExOC4yLTMyLjgtMzUuMS0yNS01Mi42LTU3LjktNTIuNi05OS4xbDAtNS42YzEuMi0yOC4xIDkuNS01NC42IDI0LjgtNzkuOCAxNS4xLTI0LjkgMzcuMS00MS43IDY2LjEtNTAuNSAxNC45LTQuNCAyOS45LTYuNiA0NS02LjYgMTUuNSAwIDMxLjYgMi45IDQ4LjEgOC42czM1LjIgMTUuNSA1NS45IDI5LjVsNTQuMSAzNi4zYzE1LjEgOS44IDI4LjggMTYuNSA0MS4yIDIwLTIuNi0yNS4xLTExLjctNDYuNi0yNy4zLTY0LjUtMTUuNy0xOC4xLTM1LjYtMzEuMy01OS45LTM5LjdMMjU3IDIyMGMtMjEuNC03LjUtMzcuMy0xNC45LTQ3LjctMjIuMi0yOC4yLTE5LjEtNDMuOC00NS4yLTQ3LTc4LjVsLS41LTkuOGMwLTMyLjEgMTMtNTguOSAzOS04MC41IDIzLTE5LjMgNTAuNi0yOSA4Mi41LTI5IDI0IDAgNDUuNiA2LjkgNjQuNyAyMC44IDE5LjIgMTQgMzAuMSAzMy44IDMyLjYgNTkuNGwuNSAxMGMwIDE4LjYtNC44IDM0LjUtMTQuNCA0Ny43LTkuOCAxMy4yLTE4LjUgMTkuOS0yNiAxOS45LTEuNi0uMS0zLjEtLjMtNC41LS42bC0zNCAzMmMtNS41IDMtOS4yIDIuNS0xMS4xLTEuNi0xLjktMi4yLTEuOC00LjkgLjUtOC4ybC4yLS4yYy41LS43IDEuMi0xLjUgMi0yLjRsMzEuNi0zMGMtLjQtMS41LS42LTMuMS0uNi00LjggMC00LjEgMS42LTcuNiA0LjktMTAuNCAxMy44LTEyLjQgMjAuOC0yNi43IDIwLjgtNDIuOCAwLTE2LTYuMS0yOS41LTE4LjItNDAuNHMtMjguNy0xNi41LTQ5LjctMTYuOGMtMjYuMiAwLTQ3LjggNy45LTY0LjcgMjMuN1MxOTIuNiA4OS45IDE5Mi42IDExMmMwIDE3LjggNi45IDMzLjkgMjAuNiA0OC4zIDEzLjYgMTQuMiAzNC42IDI1LjQgNjMgMzMuNSAzOS44IDExLjUgNzAuMiAzMSA5MS4zIDU4LjMgMTguNyAyNC4yIDI5LjEgNTEuMyAzMS4zIDgxLjQgMi4yLS43IDQuMy0xLjUgNi41LTIuNmwtLjEgLjF6TTI5NC40IDE3OC43YzAgMS4xIC42IDEuNiAxLjggMS42IC4xIDAgOS43LTguOSAyOC44LTI2LjYgMC0yLjQtNS4xIC45LTE1LjMgMTAtMTAuMiA5LjItMTUuMyAxNC4yLTE1LjMgMTQuOWwwIC4xem04IDYuNGMwLTEtLjUtMS41LTEuNS0xLjUtMS4xIDAtMi4xIC41LTIuOSAxLjYtMS45LS4xLTMuMyAuMS00LjIgLjctLjQgLjItLjUgLjUtLjUgLjcgMCAuNyAuNSAxLjMgMS41IDEuNmwzLjMgMGMyLjktMS4xIDQuNC0yLjIgNC40LTMuM2wtLjEgLjJ6TTMyNSAxNjUuMmMwLTIuOC0xLjYtMi44LTQuOSAwLTEuNiAxLjUtMy42IDMuNS02IDYuMi0uOCAuNi0yLjYgMi4yLTUuMyA0LjktMi44IDIuOS00LjIgNC43LTQuMiA1LjNsLjIgMS4zYy43IC4yIDEuMiAuNCAxLjUgLjQgLjEgMCAzLjMtMi45IDkuNS04LjdzOS4zLTguOSA5LjMtOS4zbC0uMS0uMXptMTU5LjcgMTIwbC0zMC42IDI3YzEuOCAxIDMuMiAyLjQgNCA0LjJsMzAuMi0yN2MuMi0xLjIgLjEtMi4yLS41LTIuOS0uNi0uNS0xLjYtLjktMy4xLTEuM3ptLTEuNi0uOWwtLjctLjctMjcgMjEuOSAxLjYgMiAyNi0yMy4xIC4xLS4xek0zNjYuOSAzNjMuOWMtOC0yLjEtMTUuNC00LjYtMjIuMi03LjUtMTUuMy02LjItMzQuMy0xNy01Ny0zMi40bC0zNy40LTI1LjNjLTE1LjgtMTAuMS0zMC4yLTE3LjYtNDMuMi0yMi42LTEzLjEtNC45LTI2LTcuMy0zOC42LTcuM2wtNS41IDBjLTMyLjIgMS43LTU3LjIgMTMuOC03NSAzNi4yLTE2LjYgMjAuOC0yNSA0NS4zLTI1IDczLjYgMCAzMS44IDEyLjggNTYuNyAzOC4yIDc0LjcgMjUuNCAxOC4xIDYwLjIgMjcuMSAxMDQuNCAyNy4xIDM0LjcgMCA2NC02LjIgODcuOC0xOC42IDIzLjctMTIuNCA0Mi4xLTI4LjggNTUuMi00OS4yIDkuOC0xNS41IDE1LjktMzEuOCAxOC4yLTQ4LjhsLjEgLjF6Il19LCRnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJvcGVuc3RyZWV0bWFwIixpY29uOls1MTIsNTEyLFtdLCJlODZiIiwiTTYxIDQ5OC43Yy03LjEtMS44LTEwLjgtNC43LTI5LjYtMjMuNi0yMi41LTIyLjQtMjMuOS0yNC42LTIzLjktMzYuMyAwLTEzLTMuOS04LjQgNjcuOS04MC4zIDcyLjUtNzIuNyA2OC43LTY5LjUgODEuOS02OS41IDYuMSAwIDcuNiAuNCAxMi41IDIuOGw1LjYgMi44YzExLjctMTEuNyAyMy40LTIzLjQgMzUuMS0zNS4xbC00LjQtNi45Yy04LjYtMTMuMy0xNi42LTMyLjgtMjAuMy00OC45LTEwLjItNDUuNCAuOC05My4zIDI5LjgtMTI5LjcgNTAuMS02Mi44IDE0MC4xLTc2LjcgMjA2LjYtMzIgMzYuNSAyNC41IDYwLjMgNjIuNSA2NyAxMDcgMS40IDkuNCAxLjQgMzEuOCAwIDQxLjgtNC45IDM0LjYtMTkuNyA2NC00NC40IDg4LjctMTIuNyAxMi43LTIzIDIwLjEtMzkuMiAyOC4yLTE5LjMgOS43LTM1LjcgMTQuMy01OCAxNi4xLTMxLjcgMi42LTY2LjktNi4xLTkzLjgtMjMuNGwtNi45LTQuNGMtMTEuNyAxMS43LTIzLjQgMjMuNC0zNS4xIDM1LjFsMi44IDUuNmMyLjUgNC45IDIuOCA2LjQgMi44IDEyLjUgMCAxMy4xIDMuMSA5LjQtNjkgODEuNS01NS42IDU1LjUtNjQuMSA2My43LTY4LjQgNjUuNy01LjUgMi41LTEzLjkgMy40LTE5IDIuMXpNMzU5LjQgMjk2LjljNDAuMS03LjMgNzUuMS0zNCA5Mi43LTcwLjcgMjgtNTguNCA5LjItMTI3LTQ0LjgtMTYzLjMtMTIuOS04LjctMzAuOC0xNi00Ny43LTE5LjQtMTEuNy0yLjQtMzYuNC0yLjEtNDguNiAuNS0xOC4yIDMuOS0zNC45IDExLjEtNDkuNCAyMS40LTguOSA2LjQtMjMuNyAyMS4xLTI5LjkgMjkuOS0zNC42IDQ5LTMxLjUgMTE0LjEgNy43IDE1OS4zIDIwLjEgMjMuMiA0Ny44IDM4LjQgNzguNiA0MyAxMC4yIDEuNSAzMSAxLjIgNDEuNS0uOHptLTM1LjUtMTcuNGMtMTMuOC0yLjItMjUuNi01LjctMzUuMS0xMC41bC01LjQtMi43IDAtNDkuOS05LjUgMGMtOC4yIDAtMTkuNSAxLjYtMjcuNyA0LTEuMSAuMy0xLjUgMS42LTEuNyA0LjhsLS4zIDQuNC00LjEtNy44Yy05LTE3LjItMTIuMi0zMC43LTEyLjItNTEuNCAwLTE2IDEuMS0yMy40IDUuNi0zNi4zIDIuNC02LjggOC4yLTE4LjkgMTAuOC0yMi4zIDEuMS0xLjUgMS4yLTEuMSAxLjMgMy4zbDAgNWMxOC44LS4yIDM3LjYtLjMgNTYuNC0uNSAuMi00LjcgLjMtOS41IC41LTE0LjJsLTE5IDAgMC0zMSAzLjQtMS43YzUuNi0yLjggMTUuOS02LjcgMjEuNy04LjIgMy0uOCA2LjEtMS42IDYuOS0xLjggMS4yLS40IDEuMyAuMSAuNyAzLjMtMS4yIDYuMS0uOSAyMyAuNSAyOSAyLjggMTEuOSA5LjggMjAuNyAxOS4yIDI0LjMgNS42IDIuMSAxNi4zIDIuNiAyMi41IC45IDUuOS0xLjYgMTIuNS02LjQgMTUuOS0xMS41IDUtNy41IDYuNy0xNC4xIDcuMi0yNy4xbC40LTExLjQgNyAzLjZjOCA0LjIgMTcuOCAxMS4yIDI0LjkgMTggNC44IDQuNiA1IDQuOCA1IDkuMmwwIDQuNS0xOC45IDAgMCAxNC42IDM1IDBjMS4zIDIuNiAyLjUgNS4yIDMuOCA3LjdsLTkuNyAwYy02LjcgMC0xMi43IC42LTE5LjQgMS45bC05LjcgMS45IDAgNy4xYzAgMy45IC4yIDcuMSAuMyA3LjFzNC4xLS44IDguNy0xLjcgOC43LTEuNyA5LjEtMS43Yy40IDAgLjggMTEuMyAuOCAyNS44bDAgMjUuOGMtNi4yIC4yLTEyLjMgLjMtMTguNSAuNS0uMiA0LjctLjMgOS40LS41IDE0LjIgMTMuNSAuMiAyNyAuMyA0MC40IC41LTEgMi4zLTIgNC41LTMgNi44bC0xMC43IC4xYy05LjkgLjEtMTEuMSAuMi0xNS42IDIuNS0xMS44IDUuOC0xOC4xIDE4LjktMTguMyAzNy45bC0uMSA5LjMtNS44IDNjLTUgMi42LTIyLjYgOS0yNC45IDktLjUgMC0uOC0xMi0uOC0zMC42bDAtMzAuNi05LjQgMGMtNiAwLTEyLjQgLjYtMTcuOSAxLjctMTIuNiAyLjYtMTEuNSAxLjctMTEuNSA5LjUgMCA1IC4zIDYuOCAxLjEgNi44IC42IDAgNC42LS44IDguOC0xLjdzOC0xLjcgOC4zLTEuNyAuNiAxMSAuNiAyNC41bDAgMjQuNS03LjUtLjFjLTQuMS0uMS04LjUtLjMtOS43LS41em0tMzkuNC03MS42YzguOS0zLjkgMTUuNi0xMi45IDE4LjMtMjQuNCAxLjYtNi45IDEuNy0yMi42IDAtMzAuMi0yLjUtMTItOS42LTIxLjEtMTkuMy0yNC44LTYuOS0yLjYtMTguNC0yLjYtMjUuMyAwLTkuNyAzLjctMTYuNCAxMi44LTE5LjIgMjUuNi0xLjYgNy41LTEuNiAyMS40IDAgMjguOSAyLjYgMTIuNSAxMC41IDIyLjMgMjAuNiAyNS42IDcgMi4zIDE4LjkgMiAyNC45LS43em0tMTkuOS0xNC41Yy0zLjUtMy01LjItOC45LTUuOC0yMC42LS42LTEwLjUgLjYtMjEuMyAyLjktMjYgMi00LjMgNS44LTYuNCAxMC40LTYgNy40IC44IDEwLjMgNi41IDExLjEgMjIuNSAuOSAxNi43LTEuOSAyOC45LTcgMzEuMy0zLjkgMS44LTguNiAxLjMtMTEuNi0xLjJ6bTk0LjkgMTUuMWMxNS00LjYgMjIuOC0yMC4xIDIxLjktNDMuNS0uOC0xOS45LTcuOS0zMi4xLTIxLjUtMzcuMi01LjctMi4xLTE4LTEuOC0yNCAuNS05LjYgMy43LTE2LjQgMTIuNC0xOS4zIDI0LjctMiA4LjYtMS4zIDI4IDEuMyAzNS4yIDQgMTEuMyAxMS42IDE4LjcgMjEuNCAyMSA1LjggMS40IDE0LjQgMSAyMC4zLS44em0tMTYuNy0xNC4yYy01LTIuNy03LjMtMTMuMi02LjUtMzAuMSAuNi0xMi44IDEuNS0xNi43IDQuOC0yMC40IDQuNy01LjMgMTMuNi0zLjggMTYuNyAyLjggMy40IDcuMyA0IDMwLjEgMSA0MC4yLTEuNyA1LjctNS4yIDguOC0xMC4xIDguNy0yIDAtNC42LS42LTUuOC0xLjN6bS04NS4yIDUxLjVjLTcuMy03LjYtOS45LTExLjQtOC40LTExLjkgMi45LS45IDEzLjktMy4xIDE0LjItMi44IC4yIC4yIC4yIDQuOSAuMSAxMC40bC0uMiAxMC4xLTUuNi01Ljl6bTE1Ni40LTEuMmMuNy02IDMuMS0xMS41IDUuNy0xMy4yIDIuOS0xLjggNi40LTIuNiA4LTEuNyAxLjIgLjcgLjkgMS41LTIuNCA1LjktMi4xIDIuOC01LjYgNy03LjggOS40bC00IDQuMyAuNS00Ljd6TTQzOC40IDE2MWwuMS0zMi45IDIuNiA3LjdjNS4xIDE1LjMgNi45IDMxLjggNS4xIDQ2LjYtMS40IDExLjYtMS40IDExLjUtNC45IDExLjVsLTMgMCAuMS0zMi45ek0zNDQgMTA2LjJjLTIuNi0xLTUuMy00LjgtNi41LTktMS4yLTQtMS41LTI4LjUtLjQtMzMuNSAuNi0zIC45LTMuMiAzLjgtMy4yIDYuMiAwIDE4LjMgMiAxOC43IDMuMSAuMiAuNiAuNyA0LjkgMSA5LjUgLjcgOS43LS43IDIzLjItMi44IDI3LjYtMi40IDUuMS04LjUgNy41LTEzLjcgNS4zem0tOTQuMy0yLjRjLjQtLjggMy43LTQuNiA3LjMtOC40bDYuNS02LjljMCA1LjYgMCAxMS4yIC4xIDE2LjhsLTcuMyAwYy02LjcgMC03LjMtLjEtNi41LTEuNXptMzQuNCAzNDEuN2MtMjQtNi45LTQzLjktMTIuOS00NC4yLTEzLjEtLjUtLjYgMjQuMy04OC41IDI1LjMtODkuNiAuNS0uNSA4NS40IDIzLjMgODguOSAyNC45IDEuMiAuNi0uMSA1LjgtMTAuNiA0Mi40LTYuNiAyMy0xMi40IDQzLjItMTIuOCA0NXMtMS40IDMuMi0xLjkgMy4xLTIwLjctNS44LTQ0LjctMTIuN3pNMzQyLjggNDU2YzAtMS4xIDI0LjctODcuMyAyNS4xLTg3LjYgLjktLjcgODcuMS0yNC43IDg3LjQtMjQuNCAuNCAuNC0yNC4xIDg3LjMtMjQuNyA4Ny45LS40IC4zLTgzLjIgMjQtODUuOCAyNC41LTEuMSAuMi0xLjkgLjEtMS45LS40ek0xOTkuNiA0MTcuNWMxNy0xNy4xIDMyLjItMzIuNyAzMy43LTM0LjcgMy40LTQuNSA4LjItMTQuOCA5LjUtMjAuNSAuNS0yLjQgMS4xLTcuMSAxLjItMTAuNWwuMi02LjIgMy43LTFjMi0uNiAzLjgtLjkgNC0uNyAuNSAuNS0yNC4zIDg3LTI1LjEgODcuOC0uNCAuMy0xMy42IDQuMy0yOS40IDguOGwtMjguNyA4LjIgMzEtMzEuMXptMTY2LjktNjEuNmMtLjItLjMtLjctMi0xLjItMy43bC0uOS0zLjIgMy4yLS41YzI3LTQuNiA1NS45LTE3LjMgNzguNy0zNC41IDMuMy0yLjUgNS4xLTMuNCA1LjMtMi43IDEuMSAzLjMgNS41IDE5LjEgNS40IDE5LjMtLjcgLjctOTAuMiAyNS44LTkwLjUgMjUuNHpNNjIuOSAzMjkuOGMtMS0uOC0yMy44LTc3LjktMjUuNS04Ni40LS4zLTEuNyAzLS45IDQzLjggMTAuOCA0Mi43IDEyLjIgNDQuMiAxMi43IDQ0LjggMTQuOSAuNSAyIC4yIDIuNi0yLjUgNC41LTEuNyAxLjItMTUuNSAxNC42LTMwLjcgMjkuOHMtMjcuOCAyNy42LTI4IDI3LjYtMS4xLS41LTEuOC0xLjF6bTE2LjUtODguMmMtMjMuOS02LjktNDMuNS0xMi42LTQzLjYtMTIuNi0uMy0uMiAyNS4zLTg5LjMgMjUuOS04OS44IC40LS40IDg5LjEgMjQuNCA5MCAyNS4yIC4yIC4yLTUuNCAyMC41LTEyLjQgNDUuMS0xMS42IDQwLjctMTIuOSA0NC44LTE0LjUgNDQuNy0xIDAtMjEuMy01LjctNDUuMi0xMi42em01OS42IDEwLjhjLjItLjYgNC4zLTE0LjUgOC45LTMwLjlsOC41LTI5LjcgMS4xIDYuNWMxLjkgMTEuMiA1LjMgMjMuOSA5LjMgMzUuMSAyLjEgNS45IDMuOCAxMC45IDMuNiAxMXMtNi43IDItMTQuNSA0LjMtMTQuOSA0LjItMTUuOCA0LjVjLTEuMSAuMy0xLjUgLjEtMS4yLS43ek0xMDYgMTM5LjFjLTIzLjktNi45LTQzLjctMTIuOC00My45LTEzLjItLjgtMS4zLTI1LjEtODctMjQuNy04Ny40IC41LS41IDg2LjggMjQuMyA4Ny42IDI1LjEgLjkgMSAyNS44IDg4LjIgMjUuMSA4OC0uMyAwLTIwLjEtNS43LTQ0LTEyLjZ6bTQzLjItMzQuNUMxMzYuNSA2MCAxMzkgNjguOCAxMzcuMiA2Mi41bDM0LjEtOS43YzE4LjgtNS40IDM0LjctOS45IDM1LjQtMTAuMnMtMS42IDIuOC01LjIgNi44Yy0xOS4xIDIxLjMtMzEuNSA0NC0zOS40IDcxLjktMS41IDUuMi0yLjcgMTAuMy0yLjcgMTEuMyAwIDUuOS0yLjMtLjUtMTAuMi0yOHoiXX0sQWdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNlbGxjYXN0IixpY29uOls0NDgsNTEyLFtdLCJmMmRhIiwiTTM1My41IDMyTDk0LjggMzJDNDIuNyAzMiAuMSA3NC42IC4xIDEyNi42bDAgMjU4LjdDLjEgNDM3LjQgNDIuNyA0ODAgOTQuOCA0ODBsMjU4LjcgMGM1Mi4xIDAgOTQuNy00Mi42IDk0LjctOTQuNmwwLTI1OC44YzAtNTItNDIuNi05NC42LTk0LjctOTQuNnptLTUwIDMxNi40Yy0yNy45IDQ4LjItODkuOSA2NC45LTEzOC4yIDM3LjItMjIuOSAzOS44LTU0LjkgOC42LTQyLjMtMTMuMmwxNS43LTI3LjJjNS45LTEwLjMgMTkuMi0xMy45IDI5LjUtNy45IDE4LjYgMTAuOC0uMS0uMSAxOC41IDEwLjcgMjcuNiAxNS45IDYzLjQgNi4zIDc5LjQtMjEuMyAxNS45LTI3LjYgNi4zLTYzLjQtMjEuMy03OS40LTE3LjgtMTAuMi0uNi0uNC0xOC42LTEwLjYtMjQuNi0xNC4yLTMuNC01MS45IDIxLjYtMzcuNSAxOC42IDEwLjgtLjEtLjEgMTguNSAxMC43IDQ4LjQgMjggNjUuMSA5MC4zIDM3LjIgMTM4LjV6bTIxLjgtMjA4LjhjLTE3IDI5LjUtMTYuMyAyOC44LTE5IDMxLjUtNi41IDYuNS0xNi4zIDguNy0yNi41IDMuNi0xOC42LTEwLjggLjEgLjEtMTguNS0xMC43LTI3LjYtMTUuOS02My40LTYuMy03OS40IDIxLjNzLTYuMyA2My40IDIxLjMgNzkuNGMwIDAgMTguNSAxMC42IDE4LjYgMTAuNiAyNC42IDE0LjIgMy40IDUxLjktMjEuNiAzNy41LTE4LjYtMTAuOCAuMSAuMS0xOC41LTEwLjctNDguMi0yNy44LTY0LjktOTAuMS0zNy4xLTEzOC40IDI3LjktNDguMiA4OS45LTY0LjkgMTM4LjItMzcuMmw0LjgtOC40YzE0LjMtMjQuOSA1Mi0zLjMgMzcuNyAyMS41eiJdfSxEZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibWl4IixpY29uOls0NDgsNTEyLFtdLCJmM2NiIiwiTTAgNjRMMCA0MTIuOWMwIDU2LjIgODggNTguMSA4OCAwbDAtMjM4LjZjNy45LTUyLjkgODgtNTAuNCA4OCA2LjVsMCAxNzUuM2MwIDU3LjkgOTYgNTggOTYgMEwyNzIgMjQwYzUuMy01NC43IDg4LTUyLjUgODggNC4zbDAgMjMuOGMwIDU5LjkgODggNTYuNiA4OCAwTDQ0OCA2NCAwIDY0eiJdfSxFZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2MtYXBwbGUtcGF5IixpY29uOls1NzYsNTEyLFtdLCJmNDE2IiwiTTMwMi4yIDIxOC40YzAgMTcuMi0xMC41IDI3LjEtMjkgMjcuMWwtMjQuMyAwIDAtNTQuMiAyNC40IDBjMTguNCAwIDI4LjkgOS44IDI4LjkgMjcuMXpNMzQ5LjcgMjgxYzAgOC4zIDcuMiAxMy43IDE4LjUgMTMuNyAxNC40IDAgMjUuMi05LjEgMjUuMi0yMS45bDAtNy43LTIzLjUgMS41Yy0xMy4zIC45LTIwLjIgNS44LTIwLjIgMTQuNHpNNTc2IDc5bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ3OWMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA3OUMwIDUyLjUgMjEuNSAzMSA0OCAzMWw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI3LjggMTk3LjJjOC40IC43IDE2LjgtNC4yIDIyLjEtMTAuNCA1LjItNi40IDguNi0xNSA3LjctMjMuNy03LjQgLjMtMTYuNiA0LjktMjEuOSAxMS4zLTQuOCA1LjUtOC45IDE0LjQtNy45IDIyLjh6bTYwLjYgNzQuNWMtLjItLjItMTkuNi03LjYtMTkuOC0zMC0uMi0xOC43IDE1LjMtMjcuNyAxNi0yOC4yLTguOC0xMy0yMi40LTE0LjQtMjcuMS0xNC43LTEyLjItLjctMjIuNiA2LjktMjguNCA2LjktNS45IDAtMTQuNy02LjYtMjQuMy02LjQtMTIuNSAuMi0yNC4yIDcuMy0zMC41IDE4LjYtMTMuMSAyMi42LTMuNCA1NiA5LjMgNzQuNCA2LjIgOS4xIDEzLjcgMTkuMSAyMy41IDE4LjcgOS4zLS40IDEzLTYgMjQuMi02IDExLjMgMCAxNC41IDYgMjQuMyA1LjkgMTAuMi0uMiAxNi41LTkuMSAyMi44LTE4LjIgNi45LTEwLjQgOS44LTIwLjQgMTAtMjF6bTEzNS40LTUzLjRjMC0yNi42LTE4LjUtNDQuOC00NC45LTQ0LjhsLTUxLjIgMCAwIDEzNi40IDIxLjIgMCAwLTQ2LjYgMjkuMyAwYzI2LjggMCA0NS42LTE4LjQgNDUuNi00NXptOTAgMjMuN2MwLTE5LjctMTUuOC0zMi40LTQwLTMyLjQtMjIuNSAwLTM5LjEgMTIuOS0zOS43IDMwLjVsMTkuMSAwYzEuNi04LjQgOS40LTEzLjkgMjAtMTMuOSAxMyAwIDIwLjIgNiAyMC4yIDE3LjJsMCA3LjUtMjYuNCAxLjZjLTI0LjYgMS41LTM3LjkgMTEuNi0zNy45IDI5LjEgMCAxNy43IDEzLjcgMjkuNCAzMy40IDI5LjQgMTMuMyAwIDI1LjYtNi43IDMxLjItMTcuNGwuNCAwIDAgMTYuNCAxOS42IDAgMC02OCAuMSAwek01MTYgMjEwLjlsLTIxLjUgMC0yNC45IDgwLjYtLjQgMC0yNC45LTgwLjYtMjIuMyAwIDM1LjkgOTkuMy0xLjkgNmMtMy4yIDEwLjItOC41IDE0LjItMTcuOSAxNC4yLTEuNyAwLTQuOS0uMi02LjItLjNsMCAxNi40YzEuMiAuNCA2LjUgLjUgOC4xIC41IDIwLjcgMCAzMC40LTcuOSAzOC45LTMxLjhMNTE2IDIxMC45eiJdfSxQZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic29sYW5hIixpY29uOls1MTIsNTEyLFtdLCJlODVlIiwiTTUxMC41IDM4NS4ybC04NC45IDg4LjdjLTEuOCAxLjktNC4xIDMuNS02LjYgNC41cy01LjIgMS42LTcuOSAxLjZMOC45IDQ4MGMtMS45IDAtMy44LS41LTUuNC0xLjZzLTIuOS0yLjUtMy42LTQuMi0xLTMuNi0uNy01LjUgMS4yLTMuNiAyLjUtNC45bDg0LjktODguN2MxLjgtMS45IDQuMS0zLjUgNi41LTQuNXM1LjEtMS42IDcuOC0xLjZsNDAyLjQgMGMxLjkgMCAzLjggLjUgNS40IDEuNnMyLjkgMi41IDMuNiA0LjIgMSAzLjYgLjcgNS41LTEuMiAzLjYtMi41IDQuOXpNNDI1LjcgMjA2LjZjLTEuOC0xLjktNC4xLTMuNS02LjYtNC41cy01LjItMS42LTcuOS0xLjZsLTQwMi40IDBjLTEuOSAwLTMuOCAuNS01LjQgMS42cy0yLjkgMi41LTMuNiA0LjItMSAzLjYtLjcgNS41IDEuMiAzLjYgMi41IDQuOWw4NC45IDg4LjdjMS44IDEuOSA0LjEgMy41IDYuNSA0LjVzNS4xIDEuNiA3LjggMS42bDQwMi40IDBjMS45IDAgMy44LS41IDUuNC0xLjZzMi45LTIuNSAzLjYtNC4yIDEtMy42IC43LTUuNS0xLjItMy42LTIuNS00LjlsLTg0LjktODguN3pNOC45IDE0Mi45bDQwMi40IDBjMi43IDAgNS40LS41IDcuOS0xLjZzNC43LTIuNiA2LjYtNC41bDg0LjktODguN2MxLjMtMS40IDIuMi0zLjEgMi41LTQuOXMuMS0zLjctLjctNS41LTItMy4yLTMuNi00LjItMy41LTEuNi01LjQtMS42TDEwMSAzMmMtMi43IDAtNS40IC41LTcuOCAxLjZzLTQuNyAyLjYtNi41IDQuNUwxLjcgMTI2LjhjLTEuMyAxLjQtMi4yIDMuMS0yLjUgNC45cy0uMSAzLjcgLjcgNS41IDIgMy4yIDMuNiA0LjIgMy41IDEuNiA1LjQgMS42eiJdfSxJZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidHlwZXNjcmlwdCIsaWNvbjpbNDQ4LDUxMixbXSwiZTg0MCIsIk0xNi44IDMybDQxNC40IDBjOS4zIDAgMTYuOCA3LjUgMTYuOCAxNi44bDAgNDE0LjRjMCA5LjMtNy41IDE2LjgtMTYuOCAxNi44TDE2LjggNDgwQzcuNSA0ODAgMCA0NzIuNSAwIDQ2My4yTDAgNDguOEMwIDM5LjUgNy41IDMyIDE2LjggMzJ6TTI0OSAyNzAuM2wwLTM2LjctMTU5LjQgMCAwIDM2LjcgNTYuOSAwIDAgMTYzLjYgNDUuMyAwIDAtMTYzLjYgNTcuMiAwem0xOC4xIDE1OS4zYzcuMyAzLjcgMTUuOSA2LjUgMjUuOSA4LjRzMjAuNSAyLjggMzEuNSAyLjhjMTAuOCAwIDIxLTEgMzAuNy0zLjFzMTguMi01LjQgMjUuNS0xMC4xIDEzLjEtMTAuOSAxNy40LTE4LjQgNi40LTE3IDYuNC0yOC4yYzAtOC4xLTEuMi0xNS4yLTMuNy0yMS4zcy01LjktMTEuNS0xMC41LTE2LjMtMTAuMS05LTE2LjUtMTIuOC0xMy43LTcuMy0yMS43LTEwLjdjLTUuOS0yLjQtMTEuMi00LjgtMTUuOS03LjFzLTguNy00LjYtMTEuOS03LTUuOC00LjktNy42LTcuNS0yLjctNS43LTIuNy05YzAtMy4xIC44LTUuOCAyLjQtOC4zczMuOC00LjYgNi43LTYuNCA2LjUtMy4xIDEwLjctNC4xIDguOS0xLjUgMTQuMS0xLjVjMy43IDAgNy43IC4zIDExLjkgLjhzOC40IDEuNCAxMi42IDIuNiA4LjMgMi42IDEyLjMgNC40IDcuNyAzLjggMTEgNi4xbDAtNDEuOGMtNi44LTIuNi0xNC4zLTQuNS0yMi40LTUuOHMtMTcuNC0xLjktMjcuOS0xLjljLTEwLjcgMC0yMC44IDEuMS0zMC40IDMuNHMtMTggNS44LTI1LjIgMTAuNy0xMyAxMS0xNy4yIDE4LjUtNi4zIDE2LjUtNi4zIDI2LjljMCAxMy4zIDMuOSAyNC43IDExLjYgMzQuMXMxOS41IDE3LjQgMzUuMiAyMy45YzYuMiAyLjUgMTEuOSA1IDE3LjMgNy40czEwIDQuOSAxMy44IDcuNSA3IDUuNCA5LjIgOC41IDMuNCA2LjYgMy40IDEwLjVjMCAyLjktLjcgNS42LTIuMSA4cy0zLjUgNC42LTYuNCA2LjQtNi40IDMuMi0xMC43IDQuMy05LjMgMS41LTE1IDEuNWMtOS43IDAtMTkuNC0xLjctMjguOS01LjFzLTE4LjQtOC41LTI2LjYtMTUuM2wwIDQ0Ljd6Il19LE5nZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJicmF2ZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTYzYyIsIk0xNDUuNiAwbDE1NyAwIDQ0LjcgNTAuOHMzOS4zLTEwLjkgNTcuOCA3LjYgMzMuOCAzNC45IDMzLjggMzQuOWwtMTIgMjkuNSAxNS4zIDQzLjdzLTQ0LjkgMTcwLjItNTAuMSAxOTFjLTEwLjQgNDAuOS0xNy40IDU2LjgtNDYuOSA3Ny41cy04Mi45IDU2LjgtOTEuNiA2Mi4yYy0xLjkgMS4yLTMuOSAyLjUtNS45IDMuOS03LjUgNS4xLTE1LjggMTAuOC0yMy41IDEwLjhzLTE2LjEtNS43LTIzLjUtMTAuOGMtMi0xLjQtNC0yLjgtNS45LTMuOS04LjctNS41LTYyLjEtNDEuNS05MS42LTYyLjJzLTM2LjUtMzYuNi00Ni45LTc3LjVjLTUuMy0yMC44LTUwLjEtMTkxLTUwLjEtMTkxTDIxLjUgMTIyLjggOS4zIDkzLjNzMTUuMy0xNi40IDMzLjgtMzQuOSA1Ny44LTcuNiA1Ny44LTcuNkwxNDUuNiAwem03OC41IDQwNy42YzMuNyAwIDguOS00LjcgMTMtOC40IC42LS41IDEuMi0xLjEgMS43LTEuNSA0LjItMy43IDQ3LjgtMzcuNSA1MS0zOS44czUuNC02LjUgMS45LTguN2MtMi44LTEuNy0xMC01LjUtMjAuMy0xMC44LTMtMS42LTYuMy0zLjItOS43LTUtMTUuNC04LTM0LjUtMTQuNy0zNy41LTE0LjdzLTIyLjEgNi44LTM3LjUgMTQuN2MtMy41IDEuOC02LjcgMy41LTkuNyA1LTEwLjMgNS4zLTE3LjYgOS4xLTIwLjMgMTAuOC0zLjYgMi4yLTEuNCA2LjQgMS45IDguN3M0Ni44IDM2LjEgNTEgMzkuOGMuNSAuNSAxLjEgMSAxLjcgMS41IDQuMSAzLjcgOS4zIDguNCAxMyA4LjRsLS4yIDB6bTAtMTY1LjdjNC43IDAgMTcuNi0zIDI2LjQtNWwyLS41YzcuOC0xLjggNy4zLTYuMyA2LjQtMTMtLjEtLjgtLjItMS42LS4zLTIuNC0uNi02LjEtNS44LTMzLjEtOS4xLTUwLjMtMS4xLTUuOC0yLTEwLjUtMi40LTEyLjktMS41LTguMS0uNi05LjQgLjctMTEuMyAuMi0uMyAuNS0uNyAuNy0xLjEgMS40LTIuMyAxNi02LjIgMjcuOS05LjUgMi41LS43IDQuOC0xLjMgNi45LTEuOSAxMC42LTMgMzIuNC0uNiA0NC4yIC42IDEuOCAuMiAzLjQgLjQgNC43IC41IDkuNiAuOSAxMC40IDIuMyA3LjIgMy44LTIuMyAxLjEtMTYuMiA2LjMtMjguNyAxMC45LTQuNyAxLjgtOS4yIDMuNS0xMi44IDQuOC0xLjUgLjUtMyAxLjEtNC41IDEuNy0xMi41IDQuNi0yNy4yIDEwLTI4LjkgMTkuNC0xLjUgOC4zIDUuMiAxOS45IDExLjMgMzAuMyAxLjYgMi44IDMuMiA1LjUgNC42IDguMSA2LjMgMTEuOSA2LjUgMTMuMyA2LjEgMTguMS0uNCAzLjktMTQuNSAxMi43LTIyLjQgMTcuNi0xLjggMS4xLTMuMyAyLjEtNC4yIDIuNy0uOCAuNS0yLjEgMS40LTMuOCAyLjQtOC42IDUuMi0yNi4zIDE2LTI2LjMgMjIuNSAwIDcuOCAyNC42IDI4LjEgMzIuNCAzMy4yczI4LjkgMTYuMSAzNy45IDE3LjggMjMtOC41IDMxLjItMjMuOGM3LjctMTQuNCAxLjctMjguNS0zLjItNDBsLS45LTIuMmMtNC41LTEwLjYgMS45LTE3IDYuMi0yMS4zIC41LS41IDEtMSAxLjQtMS40bDQzLTQ1LjdjMS4zLTEuMyAyLjUtMi42IDMuNy0zLjggNS44LTUuNyAxMC44LTEwLjUgMTAuOC0yMi44IDAtMTQuOS01Ny41LTg0LjUtNTcuNS04NC41cy00OC41IDkuMy01NS4xIDkuM2MtNS4yIDAtMTUuMy0zLjUtMjUuOC03LjEtMi43LS45LTUuNC0xLjktOC0yLjctMTMtNC4zLTIxLjgtNC40LTIxLjgtNC40cy04LjcgMC0yMS44IDQuNGMtMi43IC45LTUuNCAxLjgtOCAyLjctMTAuNSAzLjYtMjAuNiA3LjEtMjUuOCA3LjEtNi41IDAtNTUuMS05LjMtNTUuMS05LjNzLTU3LjUgNjkuNi01Ny41IDg0LjVjMCAxMi4zIDQuOSAxNy4xIDEwLjggMjIuOCAxLjIgMS4yIDIuNSAyLjQgMy43IDMuOGw0My4xIDQ1LjhjLjQgLjUgLjkgLjkgMS40IDEuNCA0LjMgNC4zIDEwLjYgMTAuNyA2LjIgMjEuM2wtLjkgMi4yYy00LjkgMTEuNS0xMSAyNS42LTMuMiA0MCA4LjIgMTUuMyAyMi4yIDI1LjUgMzEuMiAyMy44czMwLjEtMTIuNyAzNy45LTE3LjggMzIuNC0yNS40IDMyLjQtMzMuMmMwLTYuNS0xNy43LTE3LjMtMjYuMy0yMi41LTEuNy0xLTMuMS0xLjktMy44LTIuNC0uOS0uNi0yLjQtMS41LTQuMi0yLjctNy45LTQuOS0yMi0xMy43LTIyLjQtMTcuNi0uNC00LjgtLjMtNi4yIDYuMS0xOC4xIDEuMy0yLjUgMi45LTUuMyA0LjYtOC4xIDYtMTAuNCAxMi44LTIyIDExLjMtMzAuMy0xLjctOS40LTE2LjQtMTQuOC0yOC45LTE5LjQtMS42LS42LTMuMS0xLjEtNC41LTEuNy0zLjYtMS40LTguMS0zLjEtMTIuOC00LjhsLS4xIDBjLTEyLjUtNC43LTI2LjQtOS45LTI4LjctMTAuOS0zLjItMS41LTIuMy0yLjggNy4yLTMuOCAxLjMtLjEgMi45LS4zIDQuNy0uNSAxMS44LTEuMyAzMy42LTMuNiA0NC4yLS42IDIuMSAuNiA0LjQgMS4yIDYuOSAxLjkgMTEuOSAzLjIgMjYuNSA3LjIgMjcuOSA5LjUgLjIgLjQgLjUgLjcgLjcgMS4xIDEuMyAxLjkgMi4yIDMuMiAuNyAxMS4zLS40IDIuNC0xLjMgNy4xLTIuNCAxMi45LTMuMyAxNy4yLTguNSA0NC4yLTkuMSA1MC4zLS4xIC44LS4yIDEuNy0uMyAyLjQtLjggNi43LTEuNCAxMS4yIDYuNCAxM2wyIC41YzguOCAyIDIxLjggNSAyNi40IDVsMC0uMXoiXX0sRmdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImV0c3kiLGljb246WzM4NCw1MTIsW10sImYyZDciLCJNMzg0IDM0OGMtMS44IDEwLjctMTMuOCAxMTAtMTUuNSAxMzItMTE3LjktNC4zLTIxOS45LTQuNy0zNjguNSAwbDAtMjUuNWM0NS41LTguOSA2MC42LTggNjEtMzUuMiAxLjgtNzIuMyAzLjUtMjQ0LjEgMC0zMjItMS0yOC41LTEyLjEtMjYuOC02MS0zNkwwIDM1LjhjNzMuOSAyLjQgMjU1LjkgOC42IDM2My0zLjgtMy41IDM4LjItNy44IDEyNi41LTcuOCAxMjYuNWwtMjMuMiAwQzMyMC45IDExNS43IDMxMy4yIDY4IDI3Ny4zIDY4bC0xMzcgMGMtMTAuMiAwLTEwLjcgMy41LTEwLjcgOS44bDAgMTYzLjhjNTggLjUgODguNS0yLjUgODguNS0yLjUgMjkuOC0xIDI3LjYtOC41IDQwLjctNjUuM2wyNS44IDBjLTQuNCAxMDEuNC0zLjkgNjEuOC0xLjggMTYwLjNMMjU3IDMzNGMtOS4yLTQwLjEtOS4xLTYxLTM5LjUtNjEuNSAwIDAtMjEuNS0yLTg4LTJsMCAxMzljMCAyNiAxNC4zIDM4LjMgNDQuMyAzOC4zbDg5LjMgMGM2My42IDAgNjYuNi0yNSA5OC43LTk5LjhsMjIuMiAweiJdfSxPZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYnRjIixpY29uOlszODQsNTEyLFtdLCJmMTVhIiwiTTMxMC40IDI0Mi42YzI3LjctMTQuMiA0NS40LTM5LjQgNDEuMy04MS4zLTUuNC01Ny40LTUyLjUtNzYuNi0xMTQuOC04MS45bDAtNzkuNC00OC41IDAgMCA3Ny4yYy0xMi42IDAtMjUuNSAuMy0zOC40IC42bDAtNzcuOC00OC41IDAgMCA3OS40Yy0xNy44IC41LTM4LjYgLjMtOTcuNCAwbDAgNTEuN2MzOC4zLS43IDU4LjQtMy4xIDYzIDIxLjRsMCAyMTcuNGMtMi45IDE5LjUtMTguNSAxNi43LTUzLjMgMTYuMUw0IDQ0My43Yzg4LjUgMCA5Ny40IC4zIDk3LjQgLjNsMCA2OCA0OC41IDAgMC02Ny4xYzEzLjIgLjMgMjYuMiAuMyAzOC40IC4zbDAgNjYuNyA0OC41IDAgMC02OGM4MS4zLTQuNCAxMzUuNi0yNC45IDE0Mi45LTEwMS41IDUuNy02MS40LTIzLjMtODguOS02OS4zLTk5Ljl6TTE1MC44IDEzNC42YzI3LjQgMCAxMTMuMS04LjUgMTEzLjEgNDguNSAwIDU0LjUtODUuNyA0OC4yLTExMy4xIDQ4LjJsMC05Ni43em0wIDI1MS44bDAtMTA2LjVjMzIuOCAwIDEzMy4xLTkuMSAxMzMuMSA1My4zIDAgNjAuMi0xMDAuNCA1My4zLTEzMy4xIDUzLjN6Il19LFJnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhZG4iLGljb246WzUxMiw1MTIsW10sImYxNzAiLCJNMjU2IDE2Ny41bDY0LjkgOTguOC0xMjkuOCAwIDY0LjktOTguOHpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzk2LjIgODIuN2wtMTQ4LjItMjIzLjItMTQ4LjIgMjIzLjIgMzAuNCAwIDMzLjYtNTEuNyAxNjguNiAwIDMzLjYgNTEuNyAzMC4yIDB6Il19LEJnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUteC10d2l0dGVyIixpY29uOls0NDgsNTEyLFtdLCJlNjFhIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTI5Ny4xIDg0bC0xMDMuOCAxMTguNiAxMjIuMSAxNjEuNC05NS42IDAtNzQuOC05Ny45LTg1LjcgOTcuOS00Ny41IDAgMTExLTEyNi45LTExNy4xLTE1My4xIDk4IDAgNjcuNyA4OS41IDc4LjItODkuNSA0Ny41IDB6TTMyMy4zIDM2Ny42bC0xNjkuOS0yMjQuNy0yOC4zIDAgMTcxLjggMjI0LjcgMjYuNCAweiJdfSxIZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic3F1YXJlLWZvbnQtYXdlc29tZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTVhZCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem05MCAxMjJjMCA5LjMtNC44IDE3LjQtMTIuMSAyMmwxODguOSAwYzcuMyAwIDEzLjIgNS45IDEzLjIgMTMuMiAwIDEuOC0uNCAzLjctMS4xIDUuNEwzMTIgMjY0IDM0Mi45IDMzMy40Yy43IDEuNyAxLjEgMy41IDEuMSA1LjQgMCA3LjMtNS45IDEzLjItMTMuMiAxMy4ybC0xODYuOCAwIDAgMzItMzIgMCAwLTIwOS41Yy02LjEtNC44LTEwLTEyLjItMTAtMjAuNSAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2eiJdfSxxZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZm9ydW1iZWUiLGljb246WzQ0OCw1MTIsW10sImYyMTEiLCJNNS44IDMwOS43QzIgMjkyLjcgMCAyNzUuNSAwIDI1OC4zIDAgMTM1IDk5LjggMzUgMjIzLjEgMzUgMjM5LjcgMzUgMjU2LjQgMzcgMjcyLjQgNDAuNSAxNDkgODcuNSA1MS45IDE4NiA1LjggMzA5Ljd6TTM5OC43IDEyMC41Yy0xMy43LTE3LjUtMjkuNy0zMi43LTQ3LjgtNDUuMy0xNDkuNiA0NC4zLTI2Ni4zIDE2Mi4xLTMwOS43IDMxMiAxMi41IDE4LjEgMjggMzUuNiA0NS4yIDQ5IDQzLjEtMTUxLjMgMTYxLjItMjcxLjcgMzEyLjMtMzE1Ljd6bTE1LjggMjUyLjdjMTUuMi0yNS4xIDI1LjQtNTMuNyAyOS41LTgyLjgtNzkuNCA0Mi45LTE0NSAxMTAuNi0xODcuNiAxOTAuMyAzMC00LjQgNTguOS0xNS4zIDg0LjYtMzEuMyAzNSAxMy4xIDcwLjkgMjQuMyAxMDcgMzMuNi05LjMtMzYuNS0yMC40LTc0LjUtMzMuNS0xMDkuOHptMjkuNy0xNDUuNWMtMi42LTE5LjUtNy45LTM4LjctMTUuOC01Ni44LTEzNy45IDQ1LjgtMjQ2LjQgMTU2LjYtMjkxLjMgMjk1LjEgMTguMSA3LjYgMzcgMTIuNSA1Ni42IDE1LjIgNDYuMy0xMTQuMSAxMzYuOC0yMDYuOCAyNTAuNS0yNTMuNXoiXX0sQkU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiNDItZ3JvdXAiLGljb246WzY0MCw1MTIsWyJpbm5vc29mdCJdLCJlMDgwIiwiTTMyMCA5NmwwIDMyMGMyMSAwIDQxLjgtNC4xIDYxLjItMTIuMnMzNy0xOS44IDUxLjktMzQuNyAyNi42LTMyLjUgMzQuNy01MS45IDEyLjItNDAuMiAxMi4yLTYxLjItNC4xLTQxLjgtMTIuMi02MS4yLTE5LjgtMzcuMS0zNC43LTUxLjktMzIuNS0yNi42LTUxLjktMzQuNy00MC4yLTEyLjItNjEuMi0xMi4yek0wIDI1NkwxNjAgNDE2IDMyMCAyNTYgMTYwIDk2IDAgMjU2em00ODAgMGMwIDIxIDQuMSA0MS44IDEyLjIgNjEuMnMxOS44IDM3IDM0LjcgNTEuOSAzMi41IDI2LjYgNTEuOSAzNC43IDQwLjIgMTIuMiA2MS4yIDEyLjJsMC0zMjBjLTQyLjQgMC04My4xIDE2LjktMTEzLjEgNDYuOVM0ODAgMjEzLjYgNDgwIDI1NnoiXX0sVmdlPUJFLGpnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdHVtYmxldXBvbi1jaXJjbGUiLGljb246WzUxMiw1MTIsW10sImYxYTMiLCJNMjY0IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDE3Ny41Yy05LjggMC0xNy44IDgtMTcuOCAxNy44bDAgMTA2LjljMCA0MC45LTMzLjkgNzMuOS03NC45IDczLjktNDEuNCAwLTc0LjktMzMuNS03NC45LTc0LjlsMC00Ni41IDU3LjMgMCAwIDQ1LjhjMCAxMCA4IDE3LjggMTcuOCAxNy44czE3LjgtNy45IDE3LjgtMTcuOGwwLTEwOC40YzAtNDAgMzQuMi03Mi4xIDc0LjctNzIuMSA0MC43IDAgNzQuNyAzMi4zIDc0LjcgNzIuNmwwIDIzLjctMzQuMSAxMC4xLTIyLjktMTAuNyAwLTIwLjZjLjEtOS42LTcuOS0xNy42LTE3LjctMTcuNnpNNDMxLjYgMzA5LjFjMCA0MS40LTMzLjUgNzQuOS03NC45IDc0LjktNDEuMiAwLTc0LjktMzMuMi03NC45LTc0LjJsMC00Ni44IDIyLjkgMTAuNyAzNC4xLTEwLjEgMCA0Ny4xYzAgOS44IDggMTcuNiAxNy44IDE3LjZzMTcuOC03LjkgMTcuOC0xNy42bDAtNDggNTcuMyAwYy0uMSA0NS45LS4xIDQ2LjQtLjEgNDYuNHoiXX0sVWdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InN5bWZvbnkiLGljb246WzUxMiw1MTIsW10sImY4M2QiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zODkuNyAxNTEuNWMtMTEuNSAuNC0xOS40LTYuNC0xOS44LTE2LjktLjMtOS4yIDYuNy0xMy40IDYuNS0xOC45LS4yLTYuNS0xMC4yLTYuOC0xMi45LTYuNy0zOS44IDEuMy00OC42IDU3LTU4LjkgMTEzLjggMjEuNCAzLjIgMzYuNi0uNyA0NS4xLTYuMiAxMi03LjctMy4zLTE1LjctMS40LTI0LjYgNC0xOC4yIDMyLjYtMTkgMzIgNS4zLS40IDE3LjktMjUuOSA0MS44LTc3LjYgMzUuNy0xMC44IDU5LjUtMTguNCAxMTUtNTguMiAxNjEuNy0yOSAzNC41LTU4LjQgMzkuOC03MS42IDQwLjMtMjQuNiAuOS00MS0xMi4zLTQxLjYtMjkuOC0uNi0xNyAxNC40LTI2LjMgMjQuMy0yNi42IDIxLjktLjggMzAuMSAyNS43IDE0LjkgMzQtMTIuMSA5LjcgLjEgMTIuNiAyLjEgMTIuNiAxMC40LS40IDE3LjMtNS41IDIyLjItOSAyNC0yMCAzMy4yLTU0LjkgNDUuNC0xMTguMyA4LjItNDkuNyAxNy03OCAxOC4yLTgyLTE2LjktMTIuNy0yNy4xLTI4LjYtNDkuOC0zNC43LTE1LjYtNC4yLTI1LjEtLjYtMzEuOCA3LjgtNy45IDEwLTUuMyAyMyAyLjQgMzAuN2wxMi42IDE0YzE1LjUgMTcuOSAyNCAzMS45IDIwLjggNTAuNi01LjEgMjkuOS00MC43IDUyLjktODIuOSAzOS45LTM2LTExLjEtNDIuNy0zNi42LTM4LjQtNTAuNiA3LjUtMjQuMiA0Mi40LTExLjcgMzQuNiAxMy42LTIuOCA4LjYtNC45IDguNy02LjMgMTMuMS00LjYgMTQuOCA0MS44IDI4LjQgNTEtMS40IDQuNS0xNC41LTUuMy0yMS43LTIyLjItMzkuOS0yOC41LTMxLjctMTYtNjUuNSAyLjktNzkuNyA1Mi44LTM5LjQgMTAwLjUgMTcuNSAxMTAuNiAyNS44IDM3LjItMTA5IDEwMC41LTEwNS41IDEwMi40LTEwNS41IDI1LjItLjggNDQuMiAxMC42IDQ0LjggMjguNiAuMiA3LjctNC4yIDIyLjYtMTkuNSAyMy4xeiJdfSxXZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2FsZXNmb3JjZSIsaWNvbjpbNjQwLDUxMixbXSwiZjgzYiIsIk0yNDkuNCAyNDUuNmwtMjYuNCAwYy43LTUuMiAzLjMtMTQuMSAxMy42LTE0LjEgNi44IDAgMTIgMy44IDEyLjcgMTQuMXpNMzg2IDIzMS44Yy0uNSAwLTE0LjEtMS44LTE0LjEgMjBzMTMuNiAyMCAxNC4xIDIwYzEzIDAgMTQuMS0xMy41IDE0LjEtMjAgMC0yMS44LTEzLjctMjAtMTQuMS0yMHpNMTQyLjggMjU1LjVjLTEuMSAuOS0yIDItMi41IDMuMnMtLjggMi43LS43IDRjMCA0LjggMi4xIDYuMSAzLjMgNyA0LjcgMy43IDE1LjEgMi4xIDIwLjkgMWwwLTE2LjljLTUuMy0xLjEtMTYuNy0yLTIwLjkgMS42ek02NDAuNSAyMzJjMCA4Ny42LTgwIDE1NC40LTE2NS40IDEzNi40LTE4LjQgMzMtNzAuNyA3MC44LTEzMi4yIDQxLjYtNDEuMiA5Ni0xNzcuOSA5Mi4yLTIxMy44LTUuMi0xMTkuNyAyMy45LTE3OC44LTEzOC40LTc1LjMtMTk5LjMtMzQuOC03OS40IDIyLjYtMTczLjYgMTE0LjMtMTczLjYgMTkuMSAwIDM3LjkgNC40IDU1IDEyLjlzMzIgMjAuNyA0My42IDM1LjhjMjAuNy0yMS40IDQ5LjQtMzQuOCA4MS4xLTM0LjggNDIuMyAwIDc5IDIzLjUgOTguOCA1OC42IDkyLjgtNDAuNyAxOTMuOCAyOC4yIDE5My44IDEyNy41ek0xMjAuOSAyNjMuOGMwLTExLjgtMTEuNy0xNS4yLTE3LjktMTcuMi01LjMtMi4xLTEzLjQtMy41LTEzLjQtOC45IDAtOS41IDE3LTYuNyAyNS4yLTIuMSAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy0xMi4zLTcuNi00MC43LTguNS00MC43IDEyLjcgMCAxMi41IDExLjUgMTUuNCAxNy45IDE3LjIgNC43IDEuNiAxMy4yIDMgMTMuMiA4LjcgMCA0LTMuNSA3LjEtOS4yIDcuMS02LjkgMC0xMy41LTIuMi0xOS02LjMtLjUtLjItMS40LS43LTEuNiAuN2wtMi40IDcuNWMtLjUgLjkgLjIgMS4yIC4yIDEuNCAxLjggMS40IDEwLjMgNi42IDIyLjggNi42IDEzLjIgMCAyMS40LTcuMSAyMS40LTE4LjFsMCAwem0zMi00Mi42Yy0xMC4xIDAtMTguNyAzLjItMjEuNCA1LjItLjEgLjEtLjIgLjItLjMgLjNzLS4xIC4yLS4xIC40IDAgLjMgMCAuNCAuMSAuMyAuMiAuNGwyLjYgNy4xYy4xIC4yIC4yIC41IC41IC42cy41IC4yIC43IC4xYy42IDAgNi44LTQgMTYuOS00IDQgMCA3LjEgLjcgOS4yIDIuNCAzLjYgMi44IDMuMSA4LjMgMy4xIDEwLjYtNC44LS4zLTE5LjEtMy40LTI5LjQgMy44LTIuMyAxLjYtNC4zIDMuOC01LjUgNi4zcy0xLjkgNS40LTEuOCA4LjJjMCA1LjkgMS41IDEwLjQgNi42IDE0LjQgMTIuMiA4LjIgMzYuMyAyIDM4LjEgMS40IDEuNi0uMyAzLjUtLjcgMy41LTEuOWwwLTMzLjljMC00LjYgLjMtMjEuNi0yMi44LTIxLjZsMCAuMXptNDYuNi0yMWMwLS4yIDAtLjMtLjEtLjVzLS4xLS4zLS4zLS40LS4yLS4yLS40LS4zLS4zLS4xLS41LS4xbC05LjggMGMtLjIgMC0uMyAwLS41IC4xcy0uMyAuMS0uNCAuMy0uMiAuMi0uMyAuNC0uMSAuMy0uMSAuNWwwIDc5YzAgLjIgMCAuMyAuMSAuNXMuMSAuMyAuMyAuNCAuMiAuMiAuNCAuMyAuMyAuMSAuNSAuMWw5LjkgMGMuMiAwIC4zIDAgLjUtLjFzLjMtLjEgLjQtLjMgLjItLjIgLjMtLjQgLjEtLjMgLjEtLjVsLS4xLTc5em01NS43IDI4LjljLTIuMS0yLjMtNi44LTcuNS0xNy42LTcuNS0zLjUgMC0xNC4yIC4yLTIwLjcgOC45LTYuNCA3LjYtNi42IDE4LjEtNi42IDIxLjQgMCAzLjEgLjIgMTQuMyA3LjEgMjEuMiAyLjYgMi45IDkuMSA4LjIgMjIuOCA4LjIgMTAuOCAwIDE2LjUtMi4zIDE4LjYtMy44IC41LS4yIC43LS43IC4yLTEuOWwtMi4zLTYuOGMtLjEtLjMtLjMtLjUtLjYtLjZzLS41LS4yLS44LS4xYy0yLjYgLjktNi4zIDIuOC0xNS4zIDIuOC0xNy40IDAtMTYuOC0xNC43LTE2LjktMTYuN2wzNy4yIDBjLjMgMCAuNS0uMSAuNy0uM3MuNC0uNCAuNC0uN2MtLjMgMCAyLjEtMTQuNy02LjEtMjQuMmwwIDB6bTM2LjcgNTIuN2MxMy4yIDAgMjEuNC03LjEgMjEuNC0xOC4xIDAtMTEuOC0xMS43LTE1LjItMTcuOS0xNy4yLTQuMS0xLjctMTMuNC0zLjQtMTMuNC04LjkgMC0zLjggMy4zLTYuNCA4LjUtNi40IDUuOCAuMSAxMS41IDEuNiAxNi43IDQuMiAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy03LjktNC45LTE2LjctNC45LTIwLjItNC45LTEyIDAtMjAuNSA3LjMtMjAuNSAxNy42IDAgMTIuNSAxMS41IDE1LjQgMTcuOSAxNy4yIDYuMSAyIDEzLjIgMy4zIDEzLjIgOC43IDAgNC0zLjUgNy4xLTkuMiA3LjEtNi45IDAtMTMuNS0yLjItMTktNi40LS4xLS4xLS4zLS4yLS41LS4ycy0uNCAwLS41IC4xLS4zIC4yLS40IC4zLS4yIC4zLS4yIC41bC0yLjMgNy41Yy0uNSAuOSAuMiAxLjIgLjIgMS40IDEuNyAxLjQgMTAuMyA2LjYgMjIuOCA2LjZsMCAwek0zNTcuNiAyMjRjMC0uNy0uMi0xLjItMS4yLTEuMmwtMTEuOCAwYzAtLjEgLjktOC45IDQuNS0xMi41IDQuMi00LjIgMTEuOC0xLjYgMTItMS42IDEuMiAuNSAxLjQgMCAxLjYtLjVsMi44LTcuOGMuNy0uOSAwLTEuMi0uMi0xLjQtNS4xLTItMTcuNC0yLjktMjQuNSA0LjItNS41IDUuNS03IDEzLjktOCAxOS41bC04LjUgMGMtLjMgMC0uNiAuMi0uOCAuNHMtLjMgLjUtLjQgLjhsLTEuNCA3LjhjMCAuNyAuMiAxLjIgMS4yIDEuMmw4LjIgMGMtOC41IDQ3LjktOC43IDUwLjItMTAuMyA1NS41LTEuMSAzLjYtMy4zIDYuOS01LjkgNy44LS4xIDAtMy45IDEuNy05LjYtLjIgMCAwLS45LS41LTEuNCAuNy0uMiAuNy0yLjYgNi44LTIuOCA3LjVzMCAxLjQgLjUgMS40YzUuMSAyIDEzIDEuOCAxNy45IDAgNi4zLTIuMyA5LjctNy45IDExLjUtMTIuOSAyLjgtNy43IDIuOC05LjggMTEuOC01OS43bDEyLjIgMGMuMyAwIC42LS4yIC44LS40cy4zLS41IC40LS44bDEuNC03Ljh6TTQxMSAyNDBjLS42LTEuNy01LjEtMTguMS0yNS4yLTE4LjEtMTUuMiAwLTIzIDEwLTI1LjIgMTguMS0xIDMtMy4yIDE0IDAgMjMuNSAuMSAuMyA0LjQgMTguMSAyNS4yIDE4LjEgMTUgMCAyMi45LTkuNiAyNS4yLTE4LjEgMy4yLTkuNiAxLTIwLjUgMC0yMy41em00NS40LTE2LjdjLTUtMS43LTE2LjYtMS45LTIyLjEgNS40bDAtNC41YzAtLjIgMC0uMy0uMS0uNXMtLjEtLjMtLjMtLjQtLjItLjItLjQtLjMtLjMtLjEtLjUtLjFsLTkuNCAwYy0uMiAwLS4zIDAtLjUgLjFzLS4zIC4xLS40IC4zLS4yIC4yLS4zIC40LS4xIC4zLS4xIC41bDAgNTUuM2MwIC4yIDAgLjMgLjEgLjVzLjEgLjMgLjMgLjQgLjIgLjIgLjQgLjMgLjMgLjEgLjUgLjFsOS42IDBjLjIgMCAuMyAwIC41LS4xcy4zLS4xIC40LS4zIC4yLS4yIC4zLS40IC4xLS4zIC4xLS41bDAtMjcuOGMwLTIuOSAuMS0xMS40IDQuNS0xNS4xIDQuOS00LjkgMTItMy40IDEzLjQtMy4xIC4zIDAgLjYtLjEgLjgtLjNzLjQtLjQgLjYtLjdjMS4yLTIuNiAyLjItNS4zIDMuMS04IC4xLS4zIC4xLS41IDAtLjhzLS4zLS41LS41LS42bDAgMHptNDYuOCA1NC4xbC0yLjEtNy4zYy0uNS0xLjItMS40LS43LTEuNC0uNy00LjIgMS44LTEwLjEgMS45LTExLjMgMS45LTQuNiAwLTE3LjItMS4xLTE3LjItMTkuOCAwLTYuMiAxLjgtMTkuOCAxNi41LTE5LjggMy45LS4xIDcuOCAuNSAxMS41IDEuNiAwIDAgLjkgLjUgMS4yLS43IC45LTIuNiAxLjYtNC41IDIuNi03LjUgLjItLjktLjUtMS4yLS43LTEuMi0xMS42LTMuOS0yMi4zLTIuNS0yNy44IDAtMS42IC43LTE2LjIgNi41LTE2LjIgMjcuNSAwIDIuOS0uNiAzMC4xIDI4LjkgMzAuMSA1LjMgMCAxMC42LTEgMTUuNS0yLjggLjItLjIgLjQtLjQgLjUtLjZzLjEtLjUgMC0uOGwwIDB6bTUzLjktMzkuNWMtLjgtMy01LjQtMTYuMi0yMi4zLTE2LjItMTYgMC0yMy41IDEwLjEtMjUuNiAxOC42LTEuMiAzLjgtMS43IDcuOC0xLjcgMTEuOCAwIDI1LjkgMTguOCAyOS40IDI5LjkgMjkuNCAxMC44IDAgMTYuNS0yLjMgMTguNi0zLjggLjUtLjIgLjctLjcgLjItMS45bC0yLjQtNi44Yy0uMS0uMy0uMy0uNS0uNi0uNnMtLjYtLjItLjgtLjFjLTIuNiAuOS02LjMgMi44LTE1LjMgMi44LTE3LjQgMC0xNi45LTE0LjctMTYuOS0xNi43bDM3LjIgMGMuMyAwIC41LS4xIC43LS4zcy40LS40IC40LS43Yy0uMiAwIC45LTcuMS0xLjQtMTUuNWwwIDB6bS0yMy4zLTYuNGMtMTAuMyAwLTEzIDktMTMuNiAxNC4xbDI2LjQgMGMtLjktMTEuOS03LjYtMTQuMS0xMi43LTE0LjFsMCAweiJdfSxHZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic291cmNldHJlZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjdkMyIsIk00MjcuNCAyMDNjMC0xMTIuMS05MC45LTIwMy0yMDMtMjAzLTExMi4xLS4yLTIwMyA5MC42LTIwMy4yIDIwMi42LS4xIDQzIDEzLjUgODQuOCAzOC43IDExOS42czYwLjkgNjAuNiAxMDEuOCA3My44bDAgMTAxLjdjMCAzLjggMS41IDcuNCA0LjIgMTAuMXM2LjMgNC4yIDEwLjEgNC4ybDk2LjQgMGMzLjggMCA3LjQtMS41IDEwLjEtNC4yczQuMi02LjMgNC4yLTEwLjFsMC0xMDEuNmM0MC44LTEzLjIgNzYuNS0zOSAxMDEuNy03My43czM4LjktNzYuNSAzOS0xMTkuNHptLTI3MS42IDBjMC05MC44IDEzNy4zLTkwLjggMTM3LjMgMC0uMSA4OS45LTEzNy4zIDkxLTEzNy4zIDB6Il19LFlnZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW5rZWRpbi1pbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjBlMSIsIk0xMDAuMyA0NDhsLTkyLjkgMCAwLTI5OS4xIDkyLjkgMCAwIDI5OS4xek01My44IDEwOC4xQzI0LjEgMTA4LjEgMCA4My41IDAgNTMuOCAwIDM5LjUgNS43IDI1LjkgMTUuOCAxNS44czIzLjgtMTUuOCAzOC0xNS44IDI3LjkgNS43IDM4IDE1LjggMTUuOCAyMy44IDE1LjggMzhjMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0Ny45IDQ0OGwtOTIuNyAwIDAtMTQ1LjZjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43bDAgMTQ4LjEtOTIuOCAwIDAtMjk5LjEgODkuMSAwIDAgNDAuOCAxLjMgMGMxMi40LTIzLjUgNDIuNy00OC4zIDg3LjktNDguMyA5NCAwIDExMS4zIDYxLjkgMTExLjMgMTQyLjNsMCAxNjQuMy0uMSAweiJdfSxaZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaHRtbDUiLGljb246WzM4NCw1MTIsW10sImYxM2IiLCJNMCAzMkwzNC45IDQyNy44IDE5MS41IDQ4MCAzNDkuMSA0MjcuOCAzODQgMzIgMCAzMnpNMzA4LjIgMTU5LjlsLTE4My44IDAgNC4xIDQ5LjQgMTc1LjYgMC0xMy42IDE0OC40LTk3LjkgMjcgMCAuMy0xLjEgMC05OC43LTI3LjMtNi03NS44IDQ3LjcgMCAzLjUgMzguMSA1My41IDE0LjUgNTMuNy0xNC41IDYtNjIuMi0xNjYuOSAwLTEyLjgtMTQ1LjYgMjQxLjEgMC00LjQgNDcuN3oiXX0sWGdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InJ1c3QiLGljb246WzUxMiw1MTIsW10sImUwN2EiLCJNNTA4LjUgMjQ5LjhsLTIxLjgtMTMuNWMtLjItMi0uMy0zLjktLjUtNS45bDE4LjctMTcuNWMuOS0uOSAxLjYtMS45IDItMy4xcy41LTIuNSAuMi0zLjctLjgtMi40LTEuNi0zLjMtMS44LTEuNy0zLTIuMWwtMjQtOWMtLjUtMS45LTEuMS0zLjgtMS43LTUuNmwxNS0yMC44Yy43LTEgMS4yLTIuMiAxLjMtMy40czAtMi41LS41LTMuNy0xLjItMi4yLTIuMi0yLjktMi4xLTEuMy0zLjQtMS41bC0yNS40LTQuMmMtLjktMS43LTEuOC0zLjQtMi43LTUuMmwxMC43LTIzLjRjLjUtMS4xIC43LTIuNCAuNi0zLjZzLS41LTIuNC0xLjItMy41LTEuNi0xLjktMi44LTIuNS0yLjQtLjgtMy42LS44bC0yNS44IC45Yy0xLjItMS41LTIuNC0yLjktMy42LTQuNEw0MzkgODEuOGMuMy0xLjIgLjMtMi41LS4xLTMuN3MtMS0yLjMtMS45LTMuMi0yLTEuNS0zLjItMS45LTIuNS0uNC0zLjctLjFMNDA1IDc4LjljLTEuNC0xLjItMi45LTIuNC00LjQtMy42bC45LTI1LjhjLjEtMS4zLS4yLTIuNS0uOC0zLjZzLTEuNC0yLjEtMi41LTIuOC0yLjItMS4xLTMuNS0xLjItMi41IC4xLTMuNyAuNkwzNjcuNyA1My4yYy0xLjctLjktMy40LTEuOC01LjEtMi43bC00LjItMjUuNGMtLjItMS4yLS43LTIuNC0xLjUtMy40cy0xLjgtMS43LTIuOS0yLjItMi40LS43LTMuNy0uNS0yLjQgLjYtMy40IDEuM0wzMjYgMzUuM2MtMS45LS42LTMuOC0xLjEtNS42LTEuN2wtOS0yNGMtLjQtMS4yLTEuMi0yLjItMi4xLTNzLTIuMS0xLjQtMy4zLTEuNi0yLjUtLjItMy43IC4yLTIuMyAxLjEtMy4xIDJMMjgxLjYgMjUuOWMtMi0uMi0zLjktLjQtNS45LS41TDI2Mi4zIDMuNWMtLjctMS4xLTEuNi0xLjktMi43LTIuNnMtMi4zLS45LTMuNi0uOS0yLjUgLjMtMy42IC45LTIgMS41LTIuNyAyLjZMMjM2LjIgMjUuM2MtMiAuMi0zLjkgLjMtNS45IC42TDIxMi45IDcuMWMtLjktLjktMS45LTEuNi0zLjEtMnMtMi41LS41LTMuNy0uMi0yLjQgLjgtMy4zIDEuNi0xLjcgMS44LTIuMSAzbC05IDI0Yy0xLjkgLjYtMy44IDEuMS01LjcgMS43bC0yMC44LTE1Yy0xLS43LTIuMi0xLjItMy40LTEuM3MtMi41IDAtMy43IC41LTIuMiAxLjItMi45IDIuMi0xLjMgMi4xLTEuNSAzLjRsLTQuMiAyNS40Yy0xLjcgLjktMy40IDEuOC01LjIgMi43TDEyMC45IDQyLjZjLTEuMS0uNS0yLjQtLjctMy43LS42cy0yLjUgLjUtMy41IDEuMi0xLjkgMS43LTIuNSAyLjgtLjggMi40LS44IDMuNmwuOSAyNS44Yy0xLjUgMS4yLTMgMi40LTQuNCAzLjZMODEuOCA3M2MtMS4yLS4zLTIuNS0uMy0zLjcgLjFzLTIuMyAxLTMuMiAxLjktMS41IDItMS45IDMuMi0uNCAyLjUtLjEgMy43TDc4LjkgMTA3Yy0xLjIgMS40LTIuNCAyLjktMy42IDQuNGwtMjUuOC0uOWMtMS4zIDAtMi41IC4yLTMuNiAuOHMtMi4xIDEuNC0yLjggMi40LTEuMSAyLjItMS4yIDMuNSAuMSAyLjUgLjYgMy42bDEwLjcgMjMuNGMtLjkgMS43LTEuOCAzLjQtMi43IDUuMmwtMjUuNCA0LjFjLTEuMiAuMi0yLjQgLjctMy40IDEuNXMtMS43IDEuOC0yLjIgMi45LS43IDIuNC0uNSAzLjcgLjYgMi40IDEuMyAzLjRsMTUgMjAuOGMtLjYgMS45LTEuMSAzLjgtMS43IDUuN2wtMjQgOWMtMS4yIC40LTIuMiAxLjItMyAyLjFzLTEuNCAyLjEtMS42IDMuMy0uMiAyLjUgLjIgMy43IDEuMSAyLjMgMiAzLjFsMTguNyAxNy41Yy0uMiAyLS40IDMuOS0uNiA1LjlMMy41IDI0OS44Yy0xLjEgLjctMS45IDEuNi0yLjYgMi43cy0uOSAyLjMtLjkgMy42IC4zIDIuNSAuOSAzLjYgMS41IDIgMi42IDIuN2wyMS44IDEzLjVjLjIgMiAuMyAzLjkgLjYgNS45TDcuMSAyOTkuMWMtLjkgLjktMS42IDEuOS0yIDMuMXMtLjUgMi41LS4yIDMuNyAuOCAyLjQgMS42IDMuMyAxLjggMS43IDMgMi4xbDI0IDljLjYgMS45IDEuMSAzLjggMS43IDUuNmwtMTUgMjAuOGMtLjcgMS0xLjIgMi4yLTEuMyAzLjRzMCAyLjUgLjUgMy43IDEuMiAyLjIgMi4yIDIuOSAyLjEgMS4zIDMuNCAxLjVsMjUuNCA0LjJjLjkgMS43IDEuOCAzLjQgMi43IDUuMUw0Mi42IDM5MS4xYy0uNSAxLjEtLjcgMi40LS42IDMuNnMuNSAyLjUgMS4yIDMuNWMuNyAxLjEgMS42IDEuOSAyLjcgMi41czIuNCAuOCAzLjYgLjhsMjUuOC0uOWMxLjIgMS41IDIuNCAyLjkgMy42IDQuNEw3MyA0MzAuMmMtLjMgMS4yLS4zIDIuNSAuMSAzLjdzMSAyLjMgMS45IDMuMiAyIDEuNSAzLjIgMS45IDIuNSAuNCAzLjcgLjFsMjUuMi01LjljMS41IDEuMiAyLjkgMi40IDQuNCAzLjZsLS45IDI1LjhjMCAxLjMgLjIgMi41IC44IDMuNnMxLjQgMi4xIDIuNSAyLjggMi4yIDEuMSAzLjUgMS4yIDIuNS0uMSAzLjYtLjZsMjMuNC0xMC43YzEuNyAuOSAzLjQgMS44IDUuMSAyLjdsNC4yIDI1LjRjLjIgMS4yIC43IDIuNCAxLjUgMy40czEuOCAxLjggMi45IDIuMiAyLjQgLjcgMy43IC41IDIuNC0uNiAzLjQtMS4zbDIwLjgtMTVjMS45IC42IDMuOCAxLjEgNS42IDEuN2w5IDI0Yy40IDEuMiAxLjIgMi4yIDIuMSAzczIuMSAxLjQgMy4zIDEuNiAyLjUgLjIgMy43LS4yIDIuMy0xLjEgMy4xLTJsMTcuNS0xOC43YzIgLjIgMy45IC40IDUuOSAuNmwxMy41IDIxLjhjLjcgMS4xIDEuNiAxLjkgMi43IDIuNnMyLjMgLjkgMy42IC45IDIuNS0uMyAzLjYtLjkgMi0xLjUgMi43LTIuNmwxMy41LTIxLjhjMi0uMiAzLjktLjMgNS45LS42bDE3LjUgMTguN2MuOSAuOSAxLjkgMS42IDMuMSAyczIuNSAuNSAzLjcgLjIgMi40LS44IDMuMy0xLjYgMS43LTEuOCAyLjEtM2w5LTI0YzEuOS0uNiAzLjgtMS4xIDUuNi0xLjdsMjAuOCAxNWMxIC43IDIuMiAxLjIgMy40IDEuM3MyLjUgMCAzLjctLjUgMi4yLTEuMiAyLjktMi4yIDEuMy0yLjEgMS41LTMuNGw0LjItMjUuNGMxLjctLjkgMy40LTEuOCA1LjEtMi43bDIzLjQgMTAuN2MxLjEgLjUgMi40IC43IDMuNiAuNnMyLjQtLjUgMy41LTEuMiAxLjktMS42IDIuNS0yLjggLjgtMi40IC44LTMuNmwtLjktMjUuOGMxLjUtMS4yIDIuOS0yLjQgNC40LTMuNmwyNS4yIDUuOWMxLjIgLjMgMi41IC4zIDMuNy0uMXMyLjMtMSAzLjItMS45IDEuNS0yIDEuOS0zLjIgLjQtMi41IC4xLTMuN0w0MzMuMSA0MDVjMS4yLTEuNCAyLjQtMi45IDMuNi00LjRsMjUuOCAuOWMxLjMgLjEgMi41LS4yIDMuNi0uOHMyLjEtMS40IDIuOC0yLjVjLjctMSAxLjEtMi4yIDEuMi0zLjVzLS4xLTIuNS0uNi0zLjZsLTEwLjctMjMuNGMuOS0xLjcgMS44LTMuNCAyLjctNS4xbDI1LjQtNC4yYzEuMi0uMiAyLjQtLjcgMy40LTEuNXMxLjgtMS44IDIuMi0yLjkgLjctMi40IC41LTMuNy0uNi0yLjQtMS4zLTMuNGwtMTUtMjAuOGMuNi0xLjkgMS4xLTMuOCAxLjctNS42bDI0LTljMS4yLS40IDIuMi0xLjIgMy0yLjFzMS40LTIuMSAxLjYtMy4zIC4yLTIuNS0uMi0zLjctMS4xLTIuMy0yLTMuMWwtMTguNy0xNy41Yy4yLTEuOSAuNC0zLjkgLjYtNS45bDIxLjgtMTMuNWMxLjEtLjcgMS45LTEuNiAyLjYtMi43cy45LTIuMyAuOS0zLjYtLjMtMi41LS45LTMuNi0xLjUtMi0yLjYtMi43bDAgMHptLTE1MSAxMjkuMWMtMy42LS44LTcuNC0uMS0xMC41IDEuOXMtNS4zIDUuMi02IDguOGwtNy42IDM1LjdjLTI0LjYgMTEuMS01MS4zIDE2LjgtNzguMyAxNi43cy01My42LTYuMS03OC4xLTE3LjRsLTcuNi0zNS43Yy0uNC0xLjgtMS4xLTMuNS0yLjEtNXMtMi40LTIuOC0zLjktMy44LTMuMi0xLjctNS0yLTMuNi0uMy01LjQgLjFsLTMxLjUgNi44Yy01LjgtNi0xMS4zLTEyLjUtMTYuMy0xOS4ybDE1My4yIDBjMS43IDAgMi45LS4zIDIuOS0xLjlsMC01NC4yYzAtMS42LTEuMi0xLjktMi45LTEuOWwtNDQuOCAwIDAtMzQuNCA0OC41IDBjNC40IDAgMjMuNyAxLjMgMjkuOCAyNS45IDEuOSA3LjUgNi4yIDMyLjEgOS4xIDQwIDIuOSA4LjggMTQuNiAyNi41IDI3LjEgMjYuNWw3OSAwYy01LjMgNy4xLTExLjEgMTMuOC0xNy4zIDIwLjFsLTMyLjEtNi45em0yNS44IDM0LjVjMCAzLS45IDYtMi42IDguNXMtNCA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC44LTguOCAzLjEtNS4yIDUuNi02LjkgNS40LTIuNiA4LjUtMi42bC40IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHptLTIyNS42LS43YzAgMy0uOSA2LTIuNiA4LjVzLTQuMSA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC45LTguOCAzLjEtNS4yIDUuNi02LjggNS40LTIuNiA4LjUtMi42bC41IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHpNNjkuNiAyMzQuMmwzMi44LTE0LjZjMS43LS43IDMuMi0xLjggNC40LTMuMXMyLjItMi45IDIuOS00LjYgMS0zLjUgLjktNS4zLS41LTMuNi0xLjItNS4zbC02LjgtMTUuMiAyNi42IDAgMCAxMTkuNy01My42IDBjLTYuNi0yMy4yLTguNy00Ny42LTYuMS03MS42ek01OC4zIDE5OC4xYzAtMiAuNC00IDEuMi01LjhzMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjUgMGMzIC4xIDUuOSAxIDguMyAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LjEtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNGwwIDB6bTE1NS4yIDI0LjVsMC0zNS4zIDYzLjMgMGMzLjMgMCAyMy4xIDMuOCAyMy4xIDE4LjYgMCAxMi4zLTE1LjIgMTYuNy0yNy43IDE2LjdsLTU4LjcgMHpNMzk5IDMwNi43Yy05LjggMS4xLTIwLjYtNC4xLTIyLTEwLjEtNS44LTMyLjUtMTUuNC0zOS40LTMwLjYtNTEuNCAxOC45LTEyIDM4LjUtMjkuNiAzOC41LTUzLjMgMC0yNS41LTE3LjUtNDEuNi0yOS40LTQ5LjUtMTYuOC0xMS0zNS4zLTEzLjItNDAuMy0xMy4ybC0xOTguOSAwYzI3LjUtMzAuNyA2NC40LTUxLjUgMTA0LjktNTkuMmwyMy41IDI0LjZjMS4zIDEuMyAyLjggMi40IDQuNCAzLjFzMy41IDEuMSA1LjMgMS4yIDMuNi0uMyA1LjMtLjkgMy4yLTEuNyA0LjYtMi45bDI2LjMtMjVjMjYuOCA1IDUyLjEgMTUuOCA3NC4zIDMxLjZzNDAuNiAzNi4yIDU0LjEgNTkuOWwtMTggNDAuNmMtMS41IDMuNC0xLjUgNy4yLS4yIDEwLjZzMy45IDYuMiA3LjMgNy43bDM0LjYgMTUuM2MxLjEgMTAuOCAxLjIgMjEuNyAuNCAzMi41bC0xOS4zIDBjLTEuOSAwLTIuNyAxLjMtMi43IDMuMWwwIDguOGMwIDIwLjgtMTEuNyAyNS4zLTIyIDI2LjV6TTI0MCA2MC4yYzAtNCAxLjYtNy45IDQuNS0xMC43czYuNy00LjUgMTAuNy00LjVsLjQgMGMzIC4xIDUuOSAxIDguNCAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LTYgLjItOC43LS45LTUuMS0zLjEtNi44LTUuNi0yLjUtNS40LTIuNS04LjR6TTQzNi44IDIxNGMtMiAwLTQtLjQtNS44LTEuMnMtMy41LTEuOS00LjktMy4zLTIuNS0zLjEtMy4zLTQuOS0xLjItMy44LTEuMi01LjggLjQtNCAxLjItNS44IDEuOS0zLjUgMy4zLTQuOSAzLjEtMi41IDQuOS0zLjMgMy44LTEuMiA1LjgtMS4ybC40IDBjNCAuMSA3LjkgMS43IDEwLjcgNC42czQuNCA2LjggNC4zIDEwLjgtMS43IDcuOS00LjYgMTAuNy02LjggNC40LTEwLjggNC4zeiJdfSxLZ2U9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiaG9ybmJpbGwiLGljb246WzUxMiw1MTIsW10sImY1OTIiLCJNNzYuOCAzNzAuM2MxIDcuOC0uNCAxNS44LTQuMSAyMi44cy05LjYgMTIuNi0xNi43IDE2LjEtMTUuMSA0LjctMjIuOSAzLjMtMTUtNS4xLTIwLjYtMTAuNy05LjItMTIuOS0xMC41LTIwLjcgMC0xNS44IDMuNi0yMi45IDkuMy0xMi44IDE2LjMtMTYuNSAxNS01IDIyLjktMy45Yy03OC4zLTExMS4zIDUyLTE5MC41IDUyLTE5MC41LTUuOSA0My04LjIgOTEuMi04LjIgOTEuMi02Ny4zIDQxLjUgLjkgNjQuMSAzOS44IDcyLjkgOS45IDI3IDI3LjggNTAuMiA1MS40IDY2LjdzNTEuNiAyNS4zIDgwLjMgMjUuM2MxLjkgMCAzLjgtLjIgNS43LS4zbC4xIDE4LjljLTk5LjIgMS40LTE1OC43LTI5LjEtMTg4LjktNTEuNnptMTA4LTMyNy43Yy45LTcuMi0uMi0xNC42LTMuNC0yMS4yLTMtNi4yLTcuNi0xMS41LTEzLjQtMTUuM3MtMTIuNS01LjktMTkuNC02LjItMTMuOCAxLjQtMTkuOCA0LjctMTEuMSA4LjMtMTQuNSAxNC4zLTUuMiAxMi44LTUgMTkuNyAyLjIgMTMuNyA1LjkgMTkuNSA4LjkgMTAuNiAxNS4xIDEzLjYgMTMuMSA0LjQgMjAgMy45Yy0yMi42IDI5LjktNTMuOCA4OS42LTUyLjQgMTkwbDIxLjgtLjJjMC0uOS0uMS0xLjgtLjEtMi43IDAtMjggOC40LTU1LjMgMjQuMS03OC41czM3LjktNDEuMiA2My44LTUxLjZjOC0zNy43IDMwLjctMTE0LjMgNzMuOC00NC4zIDAgMCA0OC4xIDIuNCA5MS4yIDguMiAwIDAtNzcuOC0xMjgtMTg3LjYtNTQuMWwwIDB6TTQ4OSAxNzYuOGM2LjMtMyAxMS43LTcuNyAxNS41LTEzLjZzNS45LTEyLjcgNi4xLTE5LjgtMS42LTE0LTUuMi0yMC04LjctMTEtMTQuOS0xNC4zLTEzLjItNC44LTIwLjItNC40LTEzLjggMi44LTE5LjUgNi45LTEwLjIgOS42LTEzIDE2LjEtMy43IDEzLjYtMi43IDIwLjVjLTMxLjctMjEuOS04OS44LTQ5LjEtMTgzLjQtNDcuN2wuMSAyMi41YzIuNy0uMiA1LjQtLjQgOC4xLS40IDI4LjEgMCA1NS42IDguNSA3OC45IDI0LjNzNDEuMiAzOC4zIDUxLjYgNjQuNWMzOS4xIDkgMTA1LjEgMzEuNiAzOC41IDcyLjUgMCAwLTIuMyA0OC4xLTguMiA5MS4yIDAgMCAxMzMuNC04MS4yIDQ5LTE5NC42IDYuNiAuNiAxMy4zLS42IDE5LjMtMy41bDAgMHpNMzc0LjQgNDM2LjJjMjEuNC0zMi41IDQ2LjQtODkuNyA0NS4xLTE3OS43bC0xOS41IC4xYy4xIDIuMSAuMyA0LjEgLjMgNi4yIDAgMjguNi04LjggNTYuNS0yNS4xIDgwcy0zOS41IDQxLjQtNjYuMyA1MS40Yy04LjkgMzktMzEuNCAxMDYuNy03Mi44IDM5LjUgMCAwLTQ4LjEtMi4zLTkxLjItOC4yIDAgMCA3OS45IDEzMS4zIDE5MS45IDUxIC4zIDQuOSAxLjUgOS42IDMuNiAxNCAyLjkgNi4xIDcuNSAxMS40IDEzLjEgMTUuMXMxMi4yIDYgMTkgNi40IDEzLjYtMS4xIDE5LjYtNC4yIDExLjEtNy44IDE0LjctMTMuNiA1LjYtMTIuNCA1LjctMTkuMi0xLjUtMTMuNS00LjgtMTkuNC04LjItMTAuOS0xNC4xLTE0LjMtMTIuNi01LjItMTkuNC01LjFsMC0uMXoiXX0sUWdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBocCIsaWNvbjpbNjQwLDUxMixbXSwiZjQ1NyIsIk0zMjAgMTA0LjVjMTcxLjQgMCAzMDMuMiA3Mi4yIDMwMy4yIDE1MS41UzQ5MS4zIDQwNy41IDMyMCA0MDcuNUMxNDguNiA0MDcuNSAxNi44IDMzNS4zIDE2LjggMjU2UzE0OC43IDEwNC41IDMyMCAxMDQuNXptMC0xNi44QzE0My4zIDg3LjcgMCAxNjMgMCAyNTZTMTQzLjMgNDI0LjMgMzIwIDQyNC4zIDY0MCAzNDkgNjQwIDI1NiA0OTYuNyA4Ny43IDMyMCA4Ny43ek0yMTguMiAyNDIuNWMtNy45IDQwLjUtMzUuOCAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzggMCA2My44LTQuMSA1Ni40IDM0LjN6TTk3LjQgMzUwLjNsMzYuNyAwIDguNy00NC44YzQxLjEgMCA2Ni42IDMgOTAuMi0xOS4xIDI2LjEtMjQgMzIuOS02Ni43IDE0LjMtODguMS05LjctMTEuMi0yNS4zLTE2LjctNDYuNS0xNi43bC03MC43IDAtMzIuNyAxNjguN3pNMjgzLjEgMTM2LjdsMzYuNSAwLTguNyA0NC44YzMxLjUgMCA2MC43LTIuMyA3NC44IDEwLjcgMTQuOCAxMy42IDcuNyAzMS04LjMgMTEzLjFsLTM3IDBjMTUuNC03OS40IDE4LjMtODYgMTIuNy05Mi01LjQtNS44LTE3LjctNC42LTQ3LjQtNC42bC0xOC44IDk2LjYtMzYuNSAwIDMyLjctMTY4LjZ6TTUwNSAyNDIuNWMtOCA0MS4xLTM2LjcgMzYuMy03MC4xIDM2LjNsMTMuNy03MC42YzM4LjIgMCA2My44LTQuMSA1Ni40IDM0LjN6TTM4NC4yIDM1MC4zbDM2LjggMCA4LjctNDQuOGM0My4yIDAgNjcuMSAyLjUgOTAuMi0xOS4xIDI2LjEtMjQgMzIuOS02Ni43IDE0LjMtODguMS05LjctMTEuMi0yNS4zLTE2LjctNDYuNS0xNi43bC03MC43IDAtMzIuOCAxNjguN3oiXX0sSmdlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImRpc3F1cyIsaWNvbjpbNTc2LDUxMixbXSwiZTdkNSIsIk0yOTAuMiA1MTJjLTYyLjYgMC0xMTkuOS0yMi45LTE2NC4yLTYwLjhMMTcgNDY2LjEgNTkuMSAzNjIuMmMtMTQuNy0zMi40LTIyLjktNjguMy0yMi45LTEwNi4yIDAtMTQxLjQgMTEzLjctMjU2IDI1NC0yNTYgMTQwLjMgMCAyNTQgMTE0LjYgMjU0IDI1NiAwIDE0MS40LTExMy43IDI1Ni0yNTQgMjU2ek00MjguOSAyNTUuM2wwLS43QzQyOC45IDE4MC43IDM3Ni44IDEyOCAyODcgMTI4bC05NyAwIDAgMjU2IDk1LjYgMGM5MC41IDAgMTQzLjQtNTQuOSAxNDMuNC0xMjguN3pNMjg4IDMyMS4xbC0yOC40IDAgMC0xMzAuMiAyOC40IDBjNDEuNyAwIDY5LjMgMjMuOCA2OS4zIDY0LjdsMCAuN2MwIDQxLjMtMjcuNyA2NC43LTY5LjMgNjQuN3oiXX0sZWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6IjUwMHB4IixpY29uOlszODQsNTEyLFtdLCJmMjZlIiwiTTcxLjggMzQ0LjNjLTYuNS0xNC4yLTYuOS0xOC4zIDcuNC0yMy4xIDI1LjYtOCA4IDkuMiA0My4yIDQ5LjJsLjMgMCAwLTkzLjljMS4yLTUwLjIgNDQtOTIuMiA5Ny43LTkyLjIgNTMuOSAwIDk3LjcgNDMuNSA5Ny43IDk2LjggMCA2My40LTYwLjggMTEzLjItMTI4LjUgOTMuMy0xMC41LTQuMi0yLjEtMzEuNyA4LjUtMjguNiA1MyAwIDg5LjQtMTAuMSA4OS40LTY0LjQgMC02MS03Ny4xLTg5LjYtMTE2LjktNDQuNi0yMy41IDI2LjQtMTcuNiA0Mi4xLTE3LjYgMTU3LjYgNTAuNyAzMSAxMTguMyAyMiAxNjAuNC0yMC4xIDI0LjgtMjQuOCAzOC41LTU4IDM4LjUtOTMgMC0zNS4yLTEzLjgtNjguMi0zOC44LTkzLjMtMjQuOC0yNC44LTU3LjgtMzguNS05My4zLTM4LjVTMTUxIDE2My4zIDEyNi4zIDE4OGMtLjMgLjMtMTYgMTYuNS0yMS4yIDIzLjlsLS41IC42Yy0zLjMgNC43LTYuMyA5LjEtMjAuMSA2LjEtNi45LTEuNy0xNC4zLTUuOC0xNC4zLTExLjhMNzAuMiAyMGMwLTUgMy45LTEwLjUgMTAuNS0xMC41TDMyMiA5LjVjOC4zIDAgOC4zIDExLjYgOC4zIDE1LjEgMCAzLjkgMCAxNS4xLTguMyAxNS4xbC0yMjMuMiAwIDAgMTMyLjkgLjMgMGMxMDQuMi0xMDkuOCAyODIuOC0zNiAyODIuOCAxMDguOSAwIDE3OC4xLTI0NC44IDIyMC4zLTMxMC4xIDYyLjh6TTEzNS4xIDgzLjVjLS41IDQuMiA0LjYgMjQuNSAxNC42IDIwLjYgMTI0LjgtNDcuNSAyMDIuOCA0MC40IDIwOS40IDQwLjQgNC44IDAgMjIuOC0xNS4zIDE0LjMtMjIuOC05My4yLTg5LTIzNC41LTU3LTIzOC4zLTM4LjJ6TTM2MS41IDQxNC43Yy0xMTAgMTA5LjktMjk5IDYwLjgtMzMyLTEwNC4yIDAtMTIuMi0zMC40LTcuNC0yOC45IDMuMyAyNCAxNzMuNCAyNDYgMjU2LjkgMzgxLjYgMTIxLjMgNi45LTcuOC0xMi42LTI4LjQtMjAuNy0yMC40ek0xODIuMSAzMDYuNmMwIDQgNC4zIDcuMyA1LjUgOC41IDMgMyA2LjEgNC40IDguNSA0LjQgMy44IDAgMi42IC4yIDIyLjMtMTkuNSAxOS42IDE5LjMgMTkuMSAxOS41IDIyLjMgMTkuNSA1LjQgMCAxOC41LTEwLjQgMTAuNy0xOC4ybC0xNy4zLTE3LjMgMTguMi0xOC4yYzYuMy02LjgtMTAuMS0yMS44LTE2LjItMTUuN0wyMTguMiAyNjhjLTE4LjYtMTguOC0xOC40LTE5LjUtMjEuNS0xOS41LTUgMC0xOCAxMS43LTEyLjQgMTcuM0wyMDIuNSAyODRjLTE4LjEgMTcuOS0yMC40IDE5LjItMjAuNCAyMi42eiJdfSx0YmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYWZmaWxpYXRldGhlbWUiLGljb246WzUxMiw1MTIsW10sImYzNmIiLCJNMTU5LjcgMjM3LjRDMTA4LjQgMzA4LjMgNDMuMSAzNDguMiAxNCAzMjYuNi0xNS4yIDMwNC45IDIuOCAyMzAgNTQuMiAxNTkuMSAxMDUuNSA4OC4yIDE3MC44IDQ4LjMgMTk5LjkgNjkuOXMxMS4xIDk2LjYtNDAuMiAxNjcuNXptMzUxLjItNTcuM2MtNzMuOCAxMjMuNC0xOTEuOSAxODcuNy0yNjQuNSAxNDMuNi0yNS0xNS4yLTQxLjMtNDEuMi00OS03My44LTMzLjYgNjQuOC05Mi44IDExMy44LTE2NC4xIDEzMy4yIDQ5LjggNTkuMyAxMjQuMSA5Ni45IDIwNyA5Ni45IDE1MCAwIDI3MS42LTEyMy4xIDI3MS42LTI3NC45IC4xLTguNS0uMy0xNi44LTEtMjV6Il19LGFiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWQtcml2ZXIiLGljb246WzQ0OCw1MTIsW10sImYzZTMiLCJNMzUzLjIgMzJMOTQuOCAzMkM0Mi40IDMyIDAgNzQuNCAwIDEyNi44TDAgMzg1LjJDMCA0MzcuNiA0Mi40IDQ4MCA5NC44IDQ4MGwyNTguNCAwYzUyLjQgMCA5NC44LTQyLjQgOTQuOC05NC44bDAtMjU4LjRDNDQ4IDc0LjQgNDA1LjYgMzIgMzUzLjIgMzJ6TTE0NC45IDIwMC45bDAgNTYuM2MwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsMC0xNTQuMmMwLTEzLjIgMTAuNy0yMy45IDIzLjktMjMuOWwxNTQuMiAwYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwtNTYuMyAwYy0xMi4zLS42LTI0LjYgMTEuNi0yNCAyNHptMTc2LjMgNzJsLTU2LjMgMGMtMTIuMy0uNi0yNC42IDExLjYtMjQgMjRsMCA1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwwLTE1NC4yYzAtMTMuMiAxMC43LTIzLjkgMjMuOS0yMy45bDE1NC4yIDBjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45eiJdfSxWZj17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0d2l0dGVyIixpY29uOls1MTIsNTEyLFtdLCJmMDk5IiwiTTQ1OS40IDE1MS43Yy4zIDQuNSAuMyA5LjEgLjMgMTMuNiAwIDEzOC43LTEwNS42IDI5OC42LTI5OC42IDI5OC42LTU5LjUgMC0xMTQuNy0xNy4yLTE2MS4xLTQ3LjEgOC40IDEgMTYuNiAxLjMgMjUuMyAxLjMgNDkuMSAwIDk0LjItMTYuNiAxMzAuMy00NC44LTQ2LjEtMS04NC44LTMxLjItOTguMS03Mi44IDYuNSAxIDEzIDEuNiAxOS44IDEuNiA5LjQgMCAxOC44LTEuMyAyNy42LTMuNi00OC4xLTkuNy04NC4xLTUyLTg0LjEtMTAzbDAtMS4zYzE0IDcuOCAzMC4yIDEyLjcgNDcuNCAxMy4zLTI4LjMtMTguOC00Ni44LTUxLTQ2LjgtODcuNCAwLTE5LjUgNS4yLTM3LjQgMTQuMy01MyA1MS43IDYzLjcgMTI5LjMgMTA1LjMgMjE2LjQgMTA5LjgtMS42LTcuOC0yLjYtMTUuOS0yLjYtMjQgMC01Ny44IDQ2LjgtMTA0LjkgMTA0LjktMTA0LjkgMzAuMiAwIDU3LjUgMTIuNyA3Ni43IDMzLjEgMjMuNy00LjUgNDYuNS0xMy4zIDY2LjYtMjUuMy03LjggMjQuNC0yNC40IDQ0LjgtNDYuMSA1Ny44IDIxLjEtMi4zIDQxLjYtOC4xIDYwLjQtMTYuMi0xNC4zIDIwLjgtMzIuMiAzOS4zLTUyLjYgNTQuM3oiXX0saWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZvcnQtYXdlc29tZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI4NiIsIk00ODkuNSAyODcuOWwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMTc4LjNjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC02LTgtNC42LTExLjctNC42bDAtMzhjOC4zLTIgMTcuMS0zLjQgMjUuNy0zLjQgMTAuOSAwIDIwLjkgNC4zIDMxLjQgNC4zIDQuNiAwIDI3LjctMS4xIDI3LjctOGwwLTYwYzAtMi42LTItNC42LTQuNi00LjYtNS4xIDAtMTUuMSA0LjMtMjQgNC4zLTkuNyAwLTIwLjktNC4zLTMyLjYtNC4zLTggMC0xNiAxLjEtMjMuNyAyLjlsMC00LjljNS40LTIuNiA5LjEtOC4zIDkuMS0xNC4zIDAtMjAuNy0zMS40LTIwLjgtMzEuNCAwIDAgNiAzLjcgMTEuNyA5LjEgMTQuM2wwIDExMS43Yy0zLjcgMC0xMS43LTEuNC0xMS43IDQuNmwwIDMyLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjMgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDE3OC4zLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDIxOS41IDE4Mi45IDAgMC05NmMwLTcyLjYgMTA5LjctNzIuNiAxMDkuNyAwbDAgOTYgMTgyLjkgMCAwLTIxOS41Yy4xLTIuNi0xLjktNC42LTQuNS00LjZ6bS0yODguMS00LjVjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0em0xNDYuNCAwYzAgMi42LTIgNC42LTQuNiA0LjZsLTI3LjQgMGMtMi42IDAtNC42LTItNC42LTQuNmwwLTY0YzAtMi42IDItNC42IDQuNi00LjZsMjcuNCAwYzIuNiAwIDQuNiAyIDQuNiA0LjZsMCA2NHoiXX0scmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1peGVyIixpY29uOls0NDgsNTEyLFtdLCJlMDU2IiwiTTgyLjYgNzYuMWMtMy44LTUuMS04LjctOS40LTE0LjItMTIuNXMtMTEuNy01LjEtMTguMS01LjctMTIuOCAuMS0xOC44IDIuMi0xMS42IDUuMy0xNi4zIDkuNmMtMTcuNiAxNi4yLTE5IDQzLjUtNC44IDYyLjhsOTEuOCAxMjMtOTIuMyAxMjQuMWMtMTQuMiAxOS4zLTEzLjEgNDYuNiA0LjcgNjIuOCA0LjcgNC4zIDEwLjMgNy42IDE2LjMgOS42czEyLjUgMi44IDE4LjggMi4yIDEyLjUtMi41IDE4LjEtNS43IDEwLjQtNy40IDE0LjItMTIuNUwyMTAuOSAyNjIuN2MxLjUtMi4xIDIuMy00LjYgMi4zLTcuMXMtLjgtNS0yLjMtNy4xTDgyLjYgNzYuMXpNNDM4LjIgMzc5LjZsLTkyLjMtMTI0LjEgOTEuOC0xMjNjMTQuMi0xOS4yIDEyLjgtNDYuNi00LjctNjIuOC00LjctNC4zLTEwLjMtNy42LTE2LjMtOS42cy0xMi41LTIuOC0xOC44LTIuMi0xMi41IDIuNS0xOC4xIDUuNy0xMC40IDcuNC0xNC4yIDEyLjVsLTEyOCAxNzIuMWMtMS41IDIuMS0yLjMgNC42LTIuMyA3LjFzLjggNSAyLjMgNy4xTDM2NiA0MzUuOWMzLjggNS4xIDguNyA5LjQgMTQuMiAxMi41czExLjcgNS4xIDE4LjEgNS43IDEyLjgtLjEgMTguOC0yLjIgMTEuNi01LjMgMTYuMy05LjZjMTcuOC0xNi4yIDE5LTQzLjUgNC43LTYyLjh6Il19LHNiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJseWZ0IixpY29uOls1MTIsNTEyLFtdLCJmM2MzIiwiTTAgODEuMWw3Ny44IDAgMCAyMDguN2MwIDMzLjEgMTUgNTIuOCAyNy4yIDYxLTEyLjcgMTEuMS01MS4yIDIwLjktODAuMi0yLjgtMTctMTQtMjQuOC0zNy4zLTI0LjgtNTlMMCA4MS4xek00ODUuOSAyNTQuNmwwLTIyIDIzLjggMCAwLTc2LjgtMjYuMSAwYy0xMC4xLTQ2LjMtNTEuMi04MC43LTEwMC4zLTgwLjctNTYuNiAwLTEwMi43IDQ2LTEwMi43IDEwMi43bDAgMTc5LjJjMTYgMi4zIDM1LjQtLjMgNTEuNy0xNCAxNy4xLTE0IDI0LjgtMzcuMiAyNC44LTU5bDAtNi43IDM4LjggMCAwLTc2LjgtMzguOCAwIDAtMjMuM2MwLTM0LjYgNTIuMi0zNC42IDUyLjIgMGwwIDc3LjFjMCA1Ni42IDQ2IDEwMi43IDEwMi43IDEwMi43bDAtNzYuNWMtMTQuNSAwLTI2LjEtMTEuNy0yNi4xLTI1Ljl6bS0yOTQuMy05OWwwIDExM2MwIDE1LjQtMjMuOCAxNS40LTIzLjggMGwwLTExMy03Ni44IDAgMCAxMzIuN2MwIDIzLjggOCA1NCA0NSA2My45IDM3IDkuOCA1OC4yLTEwLjYgNTguMi0xMC42LTIuMSAxMy40LTE0LjUgMjMuMy0zNC45IDI1LjMtMTUuNSAxLjYtMzUuMi0zLjYtNDUtNy44bDAgNzAuM2MyNS4xIDcuNSA1MS41IDkuOCA3Ny42IDQuNyA0Ny4xLTkuMSA3Ni44LTQ4LjQgNzYuOC0xMDAuOGwwLTE3OC4yLTc3LjEgMCAwIC41eiJdfSxuYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYXBwbGUtcGF5IixpY29uOls2NDAsNTEyLFtdLCJmNDE1IiwiTTExNi45IDE1OC41Yy03LjUgOC45LTE5LjUgMTUuOS0zMS41IDE0LjktMS41LTEyIDQuNC0yNC44IDExLjMtMzIuNiA3LjUtOS4xIDIwLjYtMTUuNiAzMS4zLTE2LjEgMS4yIDEyLjQtMy43IDI0LjctMTEuMSAzMy44em0xMC45IDE3LjJjLTE3LjQtMS0zMi4zIDkuOS00MC41IDkuOS04LjQgMC0yMS05LjQtMzQuOC05LjEtMTcuOSAuMy0zNC41IDEwLjQtNDMuNiAyNi41LTE4LjggMzIuMy00LjkgODAgMTMuMyAxMDYuMyA4LjkgMTMgMTkuNSAyNy4zIDMzLjUgMjYuOCAxMy4zLS41IDE4LjUtOC42IDM0LjUtOC42IDE2LjEgMCAyMC44IDguNiAzNC44IDguNCAxNC41LS4zIDIzLjYtMTMgMzIuNS0yNiAxMC4xLTE0LjggMTQuMy0yOS4xIDE0LjUtMjkuOS0uMy0uMy0yOC0xMC45LTI4LjMtNDIuOS0uMy0yNi44IDIxLjktMzkuNSAyMi45LTQwLjMtMTIuNS0xOC42LTMyLTIwLjYtMzguOC0yMS4xem0xMDAuNC0zNi4ybDAgMTk0LjkgMzAuMyAwIDAtNjYuNiA0MS45IDBjMzguMyAwIDY1LjEtMjYuMyA2NS4xLTY0LjNzLTI2LjQtNjQtNjQuMS02NGwtNzMuMiAwek0yNTguNSAxNjVsMzQuOSAwYzI2LjMgMCA0MS4zIDE0IDQxLjMgMzguNnMtMTUgMzguOC00MS40IDM4LjhsLTM0LjggMCAwLTc3LjR6TTQyMC43IDMzNS45YzE5IDAgMzYuNi05LjYgNDQuNi0yNC45bC42IDAgMCAyMy40IDI4IDAgMC05N2MwLTI4LjEtMjIuNS00Ni4zLTU3LjEtNDYuMy0zMi4xIDAtNTUuOSAxOC40LTU2LjggNDMuNmwyNy4zIDBjMi4zLTEyIDEzLjQtMTkuOSAyOC42LTE5LjkgMTguNSAwIDI4LjkgOC42IDI4LjkgMjQuNWwwIDEwLjgtMzcuOCAyLjNjLTM1LjEgMi4xLTU0LjEgMTYuNS01NC4xIDQxLjUgLjEgMjUuMiAxOS43IDQyIDQ3LjggNDJ6bTguMi0yMy4xYy0xNi4xIDAtMjYuNC03LjgtMjYuNC0xOS42IDAtMTIuMyA5LjktMTkuNCAyOC44LTIwLjVsMzMuNi0yLjEgMCAxMWMwIDE4LjItMTUuNSAzMS4yLTM2IDMxLjJ6bTEwMi41IDc0LjZjMjkuNSAwIDQzLjQtMTEuMyA1NS41LTQ1LjRsNTMuMS0xNDktMzAuOCAwLTM1LjYgMTE1LjEtLjYgMC0zNS42LTExNS4xLTMxLjYgMCA1MS4yIDE0MS45LTIuOCA4LjZjLTQuNiAxNC42LTEyLjEgMjAuMy0yNS41IDIwLjMtMi40IDAtNy0uMy04LjktLjVsMCAyMy40YzEuOCAuNCA5LjMgLjcgMTEuNiAuN3oiXX0sb2JlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImFydHN0YXRpb24iLGljb246WzUxMiw1MTIsW10sImY3N2EiLCJNMi4xIDM3Ny40bDQzIDc0LjNjNC4zIDguNSAxMC44IDE1LjcgMTguOSAyMC43czE3LjQgNy42IDI3IDcuNmwyODUuNCAwLTU5LjItMTAyLjYtMzE1LjEgMHpNNTAxLjkgMzUwTDMzNS43IDU5LjNjLTQuNC04LjItMTAuOS0xNS4xLTE4LjktMjBTMjk5LjcgMzIgMjkwLjQgMzJsLTg4LjQgMCAyNTcuMyA0NDcuNiA0MC43LTcwLjVjMS45LTMuMiAyMS0yOS43IDItNTkuMXpNMjc1LjIgMzA0LjVsLTExNS41LTIwMC0xMTUuNSAyMDAgMjMxIDB6Il19LGxiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJub2RlLWpzIixpY29uOls0NDgsNTEyLFtdLCJmM2QzIiwiTTIyNC41IDUwOGMtNi43IDAtMTMuNS0xLjgtMTkuNC01LjJsLTYxLjctMzYuNWMtOS4yLTUuMi00LjctNy0xLjctOCAxMi4zLTQuMyAxNC44LTUuMiAyNy45LTEyLjcgMS40LS44IDMuMi0uNSA0LjYgLjRsNDcuNCAyOC4xYzEuNyAxIDQuMSAxIDUuNyAwTDQxMiAzNjcuNWMxLjctMSAyLjgtMyAyLjgtNWwwLTIxMy4yYzAtMi4xLTEuMS00LTIuOS01LjFMMjI3LjMgMzcuN2MtMS43LTEtNC0xLTUuNyAwTDM3LjEgMTQ0LjNjLTEuOCAxLTIuOSAzLTIuOSA1LjFsMCAyMTMuMWMwIDIgMS4xIDQgMi45IDQuOWw1MC42IDI5LjJjMjcuNSAxMy43IDQ0LjMtMi40IDQ0LjMtMTguN2wwLTIxMC40YzAtMyAyLjQtNS4zIDUuNC01LjNsMjMuNCAwYzIuOSAwIDUuNCAyLjMgNS40IDUuM2wwIDIxMC41YzAgMzYuNi0yMCA1Ny42LTU0LjcgNTcuNi0xMC43IDAtMTkuMSAwLTQyLjUtMTEuNkwyMC42IDM5Ni4xYy0xMi02LjktMTkuNC0xOS44LTE5LjQtMzMuN2wwLTIxMy4xYzAtMTMuOCA3LjQtMjYuOCAxOS40LTMzLjdMMjA1LjEgOWMxMS43LTYuNiAyNy4yLTYuNiAzOC44IDBMNDI4LjYgMTE1LjdjMTIgNi45IDE5LjQgMTkuOCAxOS40IDMzLjdsMCAyMTMuMWMwIDEzLjgtNy40IDI2LjctMTkuNCAzMy43TDI0My45IDUwMi44Yy01LjkgMy40LTEyLjYgNS4yLTE5LjQgNS4yek0zNzMuNiAyOTcuOWMwLTM5LjktMjctNTAuNS04My43LTU4LTU3LjQtNy42LTYzLjItMTEuNS02My4yLTI0LjkgMC0xMS4xIDQuOS0yNS45IDQ3LjQtMjUuOSAzNy45IDAgNTEuOSA4LjIgNTcuNyAzMy44IC41IDIuNCAyLjcgNC4yIDUuMiA0LjJsMjQgMGMxLjUgMCAyLjktLjYgMy45LTEuN3MxLjUtMi42IDEuNC00LjFjLTMuNy00NC4xLTMzLTY0LjYtOTIuMi02NC42LTUyLjcgMC04NC4xIDIyLjItODQuMSA1OS41IDAgNDAuNCAzMS4zIDUxLjYgODEuOCA1Ni42IDYwLjUgNS45IDY1LjIgMTQuOCA2NS4yIDI2LjcgMCAyMC42LTE2LjYgMjkuNC01NS41IDI5LjQtNDguOSAwLTU5LjYtMTIuMy02My4yLTM2LjYtLjQtMi42LTIuNi00LjUtNS4zLTQuNWwtMjMuOSAwYy0zIDAtNS4zIDIuNC01LjMgNS4zIDAgMzEuMSAxNi45IDY4LjIgOTcuOCA2OC4yIDU4LjQtLjEgOTItMjMuMiA5Mi02My40eiJdfSxjYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToidW5jaGFydGVkIixpY29uOls0NDgsNTEyLFtdLCJlMDg0IiwiTTE3MS44IDIzMi44YzEuMSAwIDIuMS0uMyAzLS45czEuNi0xLjQgMi0yLjRjMi4yLTkuOCA3LjQtMTguNiAxNC45LTI1LjMgMS4yLS44IDEuNy0yLjUgMS43LTQuMS0uMS0uNy0uMy0xLjMtLjYtMS45cy0uOS0xLjEtMS40LTEuNEw3NC41IDEyOC41IDE0OS4xIDg1YzEuNS0uOCAyLjctMiAzLjYtMy41czEuNC0zLjEgMS40LTQuOGMwLTEuNy0uNC0zLjQtMS4zLTQuOXMtMi4yLTIuNy0zLjctMy40TDEyNi43IDU1LjZjLTEuNS0uOC0zLjEtMS4yLTQuOC0xLjJzLTMuMyAuNC00LjggMS4yTDE3IDExMy42Yy0xLjUgLjgtMi43IDItMy42IDMuNXMtMS40IDMuMS0xLjQgNC44TDEyIDIzN2MwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMjIuNCAxMi44YzEuNSAuOSAzLjIgMS4zIDUgMS4yIDIuNCAuMSA0LjgtLjggNi42LTIuNSAxLjgtMS45IDIuOC00LjQgMi45LTdsMC04NS4zIDExNS45IDY3LjljLjYgLjMgMS40IC40IDIuMSAuNHpNMzIzLjQgMzc3LjdjLTEuNyAuMS0zLjQgLjUtNSAxLjJsLTc0LjUgNDMuMSAwLTEzNC4yYzAtMi45LTIuOS01LjgtNi4yLTQuNi05LjQgMi44LTE5LjUgMy0yOSAuNC0uNy0uMi0xLjUtLjItMi4yLS4xcy0xLjQgLjQtMiAuOS0xLjEgMS0xLjQgMS43LS41IDEuNC0uNSAyLjFsMCAxMzMuMy03NC41LTQzLjFjLTEuNS0uOS0zLjItMS4zLTUtMS4yLTIuNSAwLTQuOSAxLTYuNyAyLjhzLTIuOCA0LjItMi44IDYuN2wwIDI2LjFjMCAxLjcgLjQgMy40IDEuMyA0LjlzMi4yIDIuNyAzLjcgMy40bDEwMC4yIDU3LjZjMS41IC45IDMuMiAxLjMgNSAxLjIgMS43IDAgMy40LS40IDUtMS4ybDEwMC4yLTU3LjZjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44bDAtMjYuMWMtLjgtNC42LTUuNC05LjEtMTAuNC05LjF6TTI4Ni4xIDc4YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptNjMuNi0xMC4xYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptNjMuMiA4My43YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptLTYzLjItOS4yYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptLTYzLjYgODMuMmM0LjUgMCA5LTEuMyAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS44IDguOHMyLjkgNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHpNMjI0IDI2MmM0LjUgMCA5LTEuNCAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS43IDguOHMyLjggNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHptMTg4LjktODIuNGMtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAwem0wIDcyLjNjLTQuNiAwLTkgMS4zLTEyLjggMy45cy02LjcgNi4xLTguNSAxMC4zLTIuMiA4LjgtMS4zIDEzLjMgMy4xIDguNiA2LjMgMTEuOCA3LjMgNS40IDExLjggNi4zIDkuMSAuNCAxMy4zLTEuMyA3LjgtNC43IDEwLjMtOC41IDMuOS04LjIgMy45LTEyLjhjMC02LjEtMi40LTExLjktNi43LTE2LjNzLTEwLjItNi43LTE2LjMtNi43bDAgMHoiXX0sZGJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBsYXlzdGF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJmM2RmIiwiTTU3MSAzNzIuM2MtMTEuMyAxNC4yLTM4LjggMjQuMy0zOC44IDI0LjNsLTIwNS4xIDczLjYgMC01NC4zIDE1MC45LTUzLjhjMTcuMS02LjEgMTkuOC0xNC44IDUuOC0xOS40LTEzLjktNC42LTM5LjEtMy4zLTU2LjIgMi45bC0xMDAuNSAzNS41IDAtNTYuNGMyMy4yLTcuOCA0Ny4xLTEzLjYgNzUuNy0xNi44IDQwLjktNC41IDkwLjkgLjYgMTMwLjIgMTUuNSA0NC4yIDE0IDQ5LjIgMzQuNyAzOCA0OC45ek0zNDYuNiAyNzkuOGwwLTEzOWMwLTE2LjMtMy0zMS4zLTE4LjMtMzUuNi0xMS43LTMuOC0xOSA3LjEtMTkgMjMuNGwwIDM0Ny45LTkzLjgtMjkuOCAwLTQxNC43YzM5LjkgNy40IDk4IDI0LjkgMTI5LjIgMzUuNCA3OS41IDI3LjMgMTA2LjQgNjEuMyAxMDYuNCAxMzcuOCAwIDc0LjUtNDYgMTAyLjgtMTA0LjUgNzQuNnpNNDMuMyA0MTAuMmMtNDUuNC0xMi44LTUzLTM5LjUtMzIuMy01NC44IDE5LjEtMTQuMiA1MS43LTI0LjkgNTEuNy0yNC45bDEzNC41LTQ3LjggMCA1NC41LTk2LjggMzQuNmMtMTcuMSA2LjEtMTkuNyAxNC44LTUuOCAxOS40czM5LjEgMy4zIDU2LjItMi45bDQ2LjQtMTYuOSAwIDQ4LjhjLTUxLjYgOS4zLTEwMS40IDcuMy0xNTMuOS0xMHoiXX0scGJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im1pY3JvYmxvZyIsaWNvbjpbNDQ4LDUxMixbXSwiZTAxYSIsIk0zOTkuOCAzNjIuMmMyOS41LTM0LjcgNDcuMS03OC4zIDQ3LjEtMTI1LjggMC0xMTMtOTkuNi0yMDQuNC0yMjIuNS0yMDQuNFMyIDEyMy41IDIgMjM2LjQgMTAxLjYgNDQwLjkgMjI0LjUgNDQwLjljMjcgMCA1My45LTQuNSA3OS40LTEzLjQgMS40LS41IDMtLjUgNC41LS4xczIuNyAxLjQgMy42IDIuNmMxOC42IDI1LjEgNDcuNiA0Mi43IDc5LjkgNDkuOSAxLjEgLjIgMi4zIDAgMy4zLS42czEuNy0xLjYgMS45LTIuOGMuMS0uNiAuMS0xLjMgMC0xLjlzLS40LTEuMi0uOC0xLjdjLTEyLjMtMTYtMTguNy0zNS44LTE4LTU2czguNC0zOS41IDIxLjctNTQuN2wtLjIgLjF6TTMzMCAyMTIuNGwtNTcuMyA0My41IDIwLjggNjguOWMuNCAxLjMgLjQgMi43LS4xIDRzLTEuMiAyLjQtMi4zIDMuMi0yLjQgMS4yLTMuOCAxLjItMi43LS40LTMuOC0xLjJsLTU5LjEtNDEtNTkuMSA0MS4xYy0xLjEgLjgtMi40IDEuMi0zLjggMS4ycy0yLjctLjQtMy44LTEuMi0xLjktMS45LTIuMy0zLjItLjUtMi43LS4xLTRsMjAuOC02OC45LTU3LjMtNDMuNWMtMS4xLS44LTEuOS0xLjktMi4zLTMuMnMtLjQtMi43IDAtNCAxLjItMi40IDIuMy0zLjIgMi40LTEuMyAzLjctMS4zbDcxLjktMS41IDIzLjctNjcuOWMuNC0xLjMgMS4zLTIuNCAyLjQtMy4yczIuNC0xLjIgMy44LTEuMiAyLjcgLjQgMy44IDEuMiAxLjkgMS45IDIuNCAzLjJsMjMuNyA2Ny45IDcxLjkgMS41YzEuNCAwIDIuNyAuNCAzLjggMS4yczEuOSAxLjkgMi4zIDMuMiAuNCAyLjcgMCA0LTEuMiAyLjQtMi4zIDMuM2wwIDB6Il19LGhiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJnaXRrcmFrZW4iLGljb246WzU3Niw1MTIsW10sImYzYTYiLCJNNTU3LjcgMTE4LjFjLTIuMy02LjEtOS4zLTkuMi0xNS4zLTYuNi01LjcgMi40LTguNSA4LjktNi4zIDE0LjYgMTAuOSAyOSAxNi45IDYwLjUgMTYuOSA5My4zIDAgMTM0LjYtMTAwLjMgMjQ1LjctMjMwLjIgMjYyLjdsMC0xMjMuN2M3LjktMS41IDE1LjUtMy42IDIzLTYuMmwwIDEwNGMxMDYuNy0yNS45IDE4NS45LTEyMi4xIDE4NS45LTIzNi44IDAtOTEuOC01MC44LTE3MS44LTEyNS44LTIxMy4zLTUuNy0zLjItMTMtLjktMTUuOSA1LTIuNyA1LjUtLjYgMTIuMiA0LjcgMTUuMSA2Ny45IDM3LjYgMTEzLjkgMTEwIDExMy45IDE5My4yIDAgOTMuMy01Ny45IDE3My4xLTEzOS44IDIwNS40bDAtOTIuMmMxNC4yLTQuNSAyNC45LTE3LjcgMjQuOS0zMy41IDAtMTMuMS02LjgtMjQuNC0xNy4zLTMwLjUgOC4zLTc5LjUgNDQuNS01OC42IDQ0LjUtODMuOWwwLTE0LjdjMC0zOC04Ny45LTE2MS44LTEyOS0xNjQuNy0yLjUtLjItNS0uMi03LjYgMC00MS4yIDMtMTI5LjEgMTI2LjctMTI5LjEgMTY0LjdsMCAxNC44YzAgMjUuMyAzNi4zIDQuMyA0NC41IDgzLjktMTAuNiA2LjEtMTcuMyAxNy40LTE3LjMgMzAuNSAwIDE1LjggMTAuNiAyOSAyNC44IDMzLjVsMCA5Mi4yYy04MS45LTMyLjItMTM5LjgtMTEyLTEzOS44LTIwNS40IDAtODMuMSA0Ni0xNTUuNSAxMTMuOS0xOTMuMiA1LjQtMyA3LjQtOS42IDQuNy0xNS4xLTIuOS01LjktMTAuMS04LjItMTUuOS01LTc1IDQxLjUtMTI1LjggMTIxLjUtMTI1LjggMjEzLjMgMCAxMTQuNyA3OS4yIDIxMC44IDE4NS45IDIzNi44bDAtMTA0YzcuNiAyLjUgMTUuMSA0LjYgMjMgNi4ybDAgMTIzLjdjLTEyOS44LTE3LTIzMC4yLTEyOC4xLTIzMC4yLTI2Mi43IDAtMzIuOCA2LTY0LjMgMTYuOS05My4zIDIuMi01LjgtLjYtMTIuMi02LjMtMTQuNi02LTIuNi0xMyAuNC0xNS4zIDYuNi0xMS44IDMxLjUtMTguMyA2NS42LTE4LjMgMTAxLjMgMCAxNTUuMSAxMjIuNiAyODEuNiAyNzYuMyAyODcuOGwwLTE0NS45YzYuOCAuNCAxNSAuNSAyMy40IDBsMCAxNDUuOGMxNTMuNy02LjEgMjc2LjMtMTMyLjYgMjc2LjMtMjg3LjcgMC0zNS43LTYuNS02OS44LTE4LjMtMTAxLjR6TTM1Ny45IDMyMi45YTIzLjcgMjMuNyAwIDEgMSAwLTQ3LjQgMjMuNyAyMy43IDAgMSAxIDAgNDcuNHpNMjE4LjEgMjc1LjRhMjMuNyAyMy43IDAgMSAxIDAgNDcuNCAyMy43IDIzLjcgMCAxIDEgMC00Ny40eiJdfSxIRT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ0ZWxlZ3JhbSIsaWNvbjpbNTEyLDUxMixbNjI0NjIsInRlbGVncmFtLXBsYW5lIl0sImYyYzYiLCJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zNzEgMTc2LjdjLTMuNyAzOS4yLTE5LjkgMTM0LjQtMjguMSAxNzguMy0zLjUgMTguNi0xMC4zIDI0LjgtMTYuOSAyNS40LTE0LjQgMS4zLTI1LjMtOS41LTM5LjMtMTguNy0yMS44LTE0LjMtMzQuMi0yMy4yLTU1LjMtMzcuMi0yNC41LTE2LjEtOC42LTI1IDUuMy0zOS41IDMuNy0zLjggNjcuMS02MS41IDY4LjMtNjYuNyAuMi0uNyAuMy0zLjEtMS4yLTQuNHMtMy42LS44LTUuMS0uNWMtMi4yIC41LTM3LjEgMjMuNS0xMDQuNiA2OS4xLTkuOSA2LjgtMTguOSAxMC4xLTI2LjkgOS45LTguOS0uMi0yNS45LTUtMzguNi05LjEtMTUuNS01LTI3LjktNy43LTI2LjgtMTYuMyAuNi00LjUgNi43LTkgMTguNC0xMy43IDcyLjMtMzEuNSAxMjAuNS01Mi4zIDE0NC42LTYyLjMgNjguOS0yOC42IDgzLjItMzMuNiA5Mi41LTMzLjggMi4xIDAgNi42IC41IDkuNiAyLjkgMiAxLjcgMy4yIDQuMSAzLjUgNi43IC41IDMuMiAuNiA2LjUgLjQgOS44eiJdfSx1YmU9SEUsZmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InVsdHJhbHl0aWNzIixpY29uOls1MTIsNTEyLFtdLCJlODZkIiwiTTM5MS40IDM5LjdjNjUuOC0uMiAxMTguNiA1MS44IDEyMC40IDExNi42IC43IDI2LjQtMS41IDU0LjEtMy44IDc0LjEtMTcuMiAxNDguNi0xMjIuNCAyNDItMjUyLjQgMjQyLTk1LjQtLjEtMTc5LjQtNTIuNy0yMjMuMi0xMzAuNiAyNC40IDE3LjQgNTQuNSAyNy40IDg3LjYgMjcuNCA4My4yIC4xIDE1MS40LTY3LjQgMTUxLjItMTUwbC4xLTYwLjZjLS4yLTY1LjcgNTMuOS0xMTkgMTIwLjEtMTE4Ljl6TTExOS45IDEwMC4yYzY2LjIgMCAxMTkuOSA1My4zIDExOS45IDExOVMxODYuMSAzMzguMyAxMTkuOSAzMzguMyAwIDI4NSAwIDIxOS4zYzAtNjUuNyA1My43LTExOSAxMTkuOS0xMTl6Il19LG1iZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJpdHVuZXMtbm90ZSIsaWNvbjpbMzg0LDUxMixbXSwiZjNiNSIsIk0zODEuOSAzODguMmMtNi40IDI3LjQtMjcuMiA0Mi44LTU1LjEgNDgtMjQuNSA0LjUtNDQuOSA1LjYtNjQuNS0xMC4yLTIzLjktMjAuMS0yNC4yLTUzLjQtMi43LTc0LjQgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDYuNC03LjIgNC40LTQuMSA0LjQtMTYzLjIgMC0xMS4yLTUuNS0xNC4zLTE3LTEyLjMtOC4yIDEuNC0xODUuNyAzNC42LTE4NS43IDM0LjYtMTAuMiAyLjItMTMuNCA1LjItMTMuNCAxNi43IDAgMjM0LjcgMS4xIDIyMy45LTIuNSAyMzkuNS00LjIgMTguMi0xNS40IDMxLjktMzAuMiAzOS41LTE2LjggOS4zLTQ3LjIgMTMuNC02My40IDEwLjQtNDMuMi04LjEtNTguNC01OC0yOS4xLTg2LjYgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDEwLjEtMTEuNSAxLjgtMjU2LjYgNS4yLTI3MC4yIC44LTUuMiAzLTkuNiA3LjEtMTIuOSA0LjItMy41IDExLjgtNS41IDEzLjQtNS41IDIwNC0zOC4yIDIyOC45LTQzLjEgMjMyLjQtNDMuMSAxMS41LS44IDE4LjEgNiAxOC4xIDE3LjYgLjIgMzQ0LjUgMS4xIDMyNi0xLjggMzM4LjV6Il19LGdiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsZXNzIixpY29uOls2NDAsNTEyLFtdLCJmNDFkIiwiTTYxMy4yIDIxOWMwLTIwLjUgMy4yLTMyLjYgMy4yLTU0LjYgMC0zNC4yLTEyLjYtNDUuMi00MC41LTQ1LjJsLTIwLjUgMCAwIDI0LjIgNi4zIDBjMTQuMiAwIDE3LjMgNC43IDE3LjMgMjIuMSAwIDE2LjMtMS42IDMyLjYtMS42IDUxLjUgMCAyNC4yIDcuOSAzMy42IDIzLjYgMzcuM2wwIDEuNmMtMTUuOCAzLjctMjMuNiAxMy4xLTIzLjYgMzcuMyAwIDE4LjkgMS42IDM0LjIgMS42IDUxLjUgMCAxNy45LTMuNyAyMi42LTE3LjMgMjIuNmwwIC41LTYuMyAwIDAgMjUuMiAyMC41IDBjMjcuOCAwIDQwLjUtMTEgNDAuNS00NS4yIDAtMjIuNi0zLjItMzQuMi0zLjItNTQuNiAwLTExIDYuOC0yMi42IDI3LjMtMjMuNmwwLTI3LjNjLTIwLjUtLjctMjcuMy0xMi4zLTI3LjMtMjMuM3pNNTA3LjYgMjUxYy0xNS44LTYuMy0zMC41LTEwLTMwLjUtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjEgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxcy0yMi41LTQxLTQzLTQ3Ljh6TTE0OC43IDMxMC40Yy0zLjcgMC04LjQtMy4yLTguNC0xMy4xbDAtMTc4LjItNzQuNiAwYy0yOC40IDAtNDEgMTEtNDEgNDUuMiAwIDIyLjYgMy4yIDM1LjIgMy4yIDU0LjYgMCAxMS02LjggMjIuNi0yNy4zIDIzLjZsMCAyNy4zYzIwLjUgLjUgMjcuMyAxMi4xIDI3LjMgMjMuMSAwIDE5LjQtMy4yIDMxLTMuMiA1My42IDAgMzQuMiAxMi42IDQ1LjIgNDAuNSA0NS4ybDIwLjUgMCAwLTI0LjItNi4zIDBjLTEzLjEgMC0xNy4zLTUuMy0xNy4zLTIyLjZzMS42LTMyLjEgMS42LTUxLjVjMC0yNC4yLTcuOS0zMy42LTIzLjYtMzcuM2wwLTEuNmMxNS44LTMuNyAyMy42LTEzLjEgMjMuNi0zNy4zIDAtMTguOS0xLjYtMzQuMi0xLjYtNTEuNXMzLjctMjIuMSAxNy4zLTIyLjFsMTQuMSAwIDAgMTUwLjhjMCAzMi4xIDExIDUzLjEgNDMuMSA1My4xIDEwIDAgMTcuOS0xLjYgMjMuNi0zLjdsLTUuMy0zNC4yYy0zLjEgLjgtNC42IC44LTYuMiAuOHpNMzgwLjQgMjUxYy0xNi4zLTYuMy0zMS0xMC0zMS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNnMyMi4xIDQuNyAzMy42IDEzLjFsMjEtMjcuOGMtMTMuMS0xMC0zMS0yMC41LTU1LjItMjAuNS0zNS43IDAtNTkuOSAyMC41LTU5LjkgNDkuNCAwIDI1LjcgMjIuNiAzOC45IDQxLjUgNDYuMiAxNi4zIDYuMyAzMi4xIDExLjYgMzIuMSAyMi4xIDAgNy45LTYuMyAxMy4xLTIwLjUgMTMuMS0xMy4xIDAtMjYuMy01LjMtNDAuNS0xNi4zbC0yMC41IDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MSAuMS0yOC45LTIyLjUtNDEtNDMtNDcuOHptLTE1NS02OC44Yy0zOC40IDAtNzUuMSAzMi4xLTc0LjEgODIuNSAwIDUyIDM0LjIgODIuNSA3OS4zIDgyLjUgMTguOSAwIDM5LjktNi44IDU2LjItMTcuOUwyNzEgMzAxLjVjLTExLjYgNi44LTIyLjYgMTAtMzQuMiAxMC0yMSAwLTM3LjMtMTAtNDEuNS0zNC4ybDk1LjIgMGMuNS0zLjcgMS42LTExIDEuNi0xOS40IC42LTQyLjYtMjIuNi03NS43LTY2LjctNzUuN3ptLTMwIDY2LjJjMy4yLTIxIDE1LjgtMzEgMzAuNS0zMSAxOC45IDAgMjYuMyAxMy4xIDI2LjMgMzFsLTU2LjggMHoiXX0sYmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImZpcmVmb3giLGljb246WzUxMiw1MTIsW10sImYyNjkiLCJNNTAzLjUgMjQxLjVjLS4xLTEuNi0uMi0zLjEtLjItNC43bDAtLjEtLjQtNC43IDAtLjFjLTEuMy0xMy45LTMuNy0yNy43LTcuMy00MS4yIDAtLjEgMC0uMS0uMS0uMmwtMS4xLTRjLS4xLS4yLS4xLS41LS4yLS42LS40LTEuMi0uNy0yLjUtMS4xLTMuNy0uMS0uMi0uMS0uNi0uMi0uOC0uNC0xLjItLjctMi40LTEuMS0zLjUtLjEtLjQtLjItLjYtLjQtMS0uNC0xLjItLjctMi4zLTEuMi0zLjVsLS40LTEuMWMtLjQtMS4xLS44LTIuMy0xLjItMy40LS4xLS4zLS4yLS43LS40LTEtLjUtMS4xLS44LTIuMy0xLjMtMy40LS4xLS4yLS4yLS42LS40LS44LS41LTEuMi0xLTIuMy0xLjQtMy41IDAtLjEtLjEtLjItLjEtLjQtMS42LTMuOC0zLjItNy43LTUtMTEuNGwtLjQtLjdjLS41LTEtLjgtMS44LTEuMy0yLjYtLjItLjUtLjUtMS4xLS43LTEuNi0uNC0uOC0uOC0xLjYtMS4yLTIuNC0uNC0uNi0uNi0xLjItMS0xLjhzLS44LTEuNC0xLjItMi4zYy0uNC0uNi0uNy0xLjMtMS4xLTEuOXMtLjgtMS40LTEuMi0yLjJjLS40LS43LS44LTEuNC0xLjItMi0uNC0uNy0uOC0xLjMtMS4yLTJzLS44LTEuMy0xLjItMi0uOC0xLjMtMS4yLTEuOS0uOC0xLjQtMS4zLTIuMmMtLjQtLjYtLjgtMS4yLTEuMi0xLjhsLTEuNC0yLjFjLS40LS42LS44LTEuMi0xLjItMS44LS41LS43LTEuMS0xLjYtMS42LTIuMy0uNC0uNS0uNy0xLjEtMS4xLTEuNmwtMS44LTIuNWMtLjQtLjUtLjYtLjgtMS0xLjMtMS0xLjMtMS44LTIuNS0yLjgtMy43LTcuMi05LjQtMTUtMTguMy0yMy41LTI2LjYtNS43LTYtMTEuOC0xMS41LTE4LjMtMTYuNy00LTMuNS04LjItNi43LTEyLjUtOS44LTcuNy01LjgtMTYtMTAuOC0yNC42LTE1LjEtMi40LTEuMy00LjgtMi41LTcuMi0zLjctMTcuNy04LjYtMzYuMy0xNS4yLTU1LjQtMTkuNi0xLjktLjQtMy44LS44LTUuNi0xLjJsLS4xIDBjLTEtLjEtMS44LS40LTIuOC0uNS0xMi41LTIuNC0yNS4yLTMuNy0zOC00bC0xMC42IDBjLTE1LjMgLjItMzAuNSAxLjktNDUuNSA1LTMzLjYgNy4xLTYzLjIgMjEuMi04Mi45IDM5LTEuMSAxLTEuOSAxLjctMi40IDIuMmwtLjUgLjUgLjEgMGMwIDAgLjEgMCAuMSAwczAtLjEgMC0uMWwtLjEgLjFjLjEtLjEgLjEtLjEgLjItLjEgMTQuNi04LjggMzQuOS0xNiA0OS40LTE5LjZsNS45LTEuNGMuNC0uMSAuOC0uMSAxLjItLjIgMS43LS40IDMuNC0uNyA1LjItMS4xIC4yIDAgLjYtLjEgLjgtLjEgNjQuMi0xMS43IDEzMi42IDcuNSAxODAuMiA1MyAxMC4zIDkuOCAxOS4zIDIwLjggMjYuOSAzMi44IDMwLjQgNDkuMiAyNy41IDExMS4xIDMuOCAxNDcuNi0zNC40IDUzLTExMS40IDcxLjMtMTU5IDI0LjgtMTYtMTUuNS0yNS4yLTM2LjctMjUuNi01OS0uMi0xMC43IDItMjEuMiA2LjItMzEgMS43LTMuOCAxMy4xLTI1LjcgMTguMi0yNC42LTEzLjEtMi44LTM3LjUgMi42LTU0LjcgMjguMi0xNS40IDIyLjktMTQuNSA1OC4yLTUgODMuMy02LTEyLjQtMTAuMS0yNS42LTEyLjEtMzkuMi0xMi4yLTgyLjYgNDMuMy0xNTMgOTQuMy0xNzAuNS0yNy41LTI0LTk2LjUtMjIuMy0xNDcuNyAxNS40LTI5LjkgMjItNTEuMiA1My4yLTYyLjUgOTAuNCAxLjctMjAuOSA5LjYtNTIuMSAyNS44LTgzLjktMTcuMiA4LjktMzkgMzctNDkuOCA2Mi45LTE1LjYgMzcuNC0yMSA4Mi4yLTE2LjEgMTI0LjggLjQgMy4yIC43IDYuNCAxLjEgOS42IDE5LjkgMTE3LjEgMTIyIDIwNi40IDI0NC44IDIwNi40IDEzNy4xIDAgMjQ4LjMtMTExLjIgMjQ4LjMtMjQ4LjQtLjEtNC41LS4yLTkuMS0uNS0xMy41eiJdfSx2YmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToia2FnZ2xlIixpY29uOlszMjAsNTEyLFtdLCJmNWZhIiwiTTMwNC4yIDUwMS41TDE1OC40IDMyMC4zIDI5OC4yIDE4NWMyLjYtMi43IDEuNy0xMC41LTUuMy0xMC41bC02OS4yIDBjLTMuNSAwLTcgMS44LTEwLjUgNS4zbC0xMzIuMyAxMzMuNyAwLTMwNmMwLTUtMi41LTcuNS03LjUtNy41TDIxLjUgMEMxNi41IDAgMTQgMi41IDE0IDcuNWwwIDQ5N2MwIDUgMi41IDcuNSA3LjUgNy41bDUxLjkgMGM1IDAgNy41LTIuNSA3LjUtNy41bDAtMTA5IDMwLjgtMjkuMyAxMTAuNSAxNDAuNmMzIDMuNSA2LjUgNS4zIDEwLjUgNS4zbDY2LjkgMGMzLjUgMCA1LjUtMSA2LTNsLTEuNC03LjZ6Il19LHliZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJmYWNlYm9vay1tZXNzZW5nZXIiLGljb246WzUxMiw1MTIsW10sImYzOWYiLCJNMjU2LjYgOGMtMTQwIDAtMjQ4LjYgMTAyLjMtMjQ4LjYgMjQwLjYgMCA3Mi4zIDI5LjcgMTM0LjggNzguMSAxNzcuOSA4LjMgNy41IDYuNiAxMS45IDggNTguMiAuMSAzLjIgMSA2LjQgMi42IDkuMnMzLjkgNS4yIDYuNyA2LjkgNS45IDIuOCA5LjEgMyA2LjUtLjMgOS41LTEuNkMxNzQuOSA0NzkgMTc1LjYgNDc3LjIgMTg0LjYgNDc5LjYgMzM3LjggNTIxLjggNTA0IDQyMy43IDUwNCAyNDguNiA1MDQgMTEwLjMgMzk2LjYgOCAyNTYuNiA4ek00MDUuOCAxOTMuMWwtNzMgMTE1LjZjLTIuOCA0LjMtNi40IDguMS0xMC42IDExcy05LjEgNC44LTE0LjEgNS44LTEwLjMgLjgtMTUuMy0uNC05LjctMy40LTEzLjgtNi40bC01OC4xLTQzLjVjLTIuNi0xLjktNS44LTMtOS0zcy02LjQgMS4xLTkgM2wtNzguNCA1OS40Yy0xMC41IDcuOS0yNC4yLTQuNi0xNy4xLTE1LjdsNzMtMTE1LjZjMi44LTQuMyA2LjQtOC4xIDEwLjYtMTFzOS4xLTQuOCAxNC4xLTUuOCAxMC4zLS44IDE1LjMgLjQgOS43IDMuNCAxMy45IDYuNGw1OC4xIDQzLjVjMi42IDEuOSA1LjggMyA5IDNzNi40LTEuMSA5LTNsNzguNC01OS40YzEwLjQtOCAyNC4xIDQuNSAxNy4xIDE1LjZ6Il19LHhiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhdWRpYmxlIixpY29uOls2NDAsNTEyLFtdLCJmMzczIiwiTTY0MCAxOTkuOWwwIDU0LTMyMCAyMDAtMzIwLTE5OS45IDAtNTQgMzIwIDIwMCAzMjAtMjAwLjF6bS0xOTQuNSA3Mmw0Ny4xLTI5LjRjLTM3LjItNTUuOC0xMDAuNy05Mi42LTE3Mi43LTkyLjZzLTEzNS41IDM2LjctMTcyLjYgOTIuNGwuMyAwYzIuNS0yLjMgNS4xLTQuNSA3LjctNi43IDg5LjctNzQuNCAyMTkuNC01OC4xIDI5MC4yIDM2LjN6TTIyNS40IDI5MC43YzE2LjktMTEuOSAzNi41LTE4LjcgNTcuNC0xOC43IDM0LjQgMCA2NS4yIDE4LjQgODYuNCA0Ny42bDQ1LjQtMjguNGMtMjAuOS0yOS45LTU1LjYtNDkuNS05NC44LTQ5LjUtMzguOSAwLTczLjQgMTkuNC05NC40IDQ5ek0xMDMuNiAxNjEuMUMyMzUuNCA1Ni44IDQyMS44IDg0LjcgNTIxLjEgMjIzLjJsLjcgMSA0OC44LTMwLjRjLTUzLjUtODEuNy0xNDUuOC0xMzUuNy0yNTAuNy0xMzUuNy0xMDMuNSAwLTE5Ni42IDUzLjUtMjUwLjUgMTM1LjYgOS45LTEwLjUgMjIuNy0yMy41IDM0LjItMzIuNnoiXX0sd2JlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InBhdHJlb24iLGljb246WzUxMiw1MTIsW10sImYzZDkiLCJNNDkwIDE1My44Yy0uMS02NS40LTUxLTExOS0xMTAuNy0xMzguMy03NC4yLTI0LTE3Mi0yMC41LTI0Mi45IDEyLjktODUuOCA0MC41LTExMi44IDEyOS4zLTExMy44IDIxNy44LS44IDcyLjggNi40IDI2NC40IDExNC42IDI2NS44IDgwLjMgMSA5Mi4zLTEwMi41IDEyOS41LTE1Mi4zIDI2LjQtMzUuNSA2MC41LTQ1LjUgMTAyLjQtNTUuOSA3Mi0xNy44IDEyMS4xLTc0LjcgMTIxLTE1MGwtLjEgMHoiXX0sTWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InZudiIsaWNvbjpbNjQwLDUxMixbXSwiZjQwYiIsIk0xMDQuOSAzNTJjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDIuNiAyMTAuMVMtNy44IDE5MiAxMyAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjctNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi44IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMMTg2LjQgMzIxLjZTMTc0LjIgMzUyIDE0MCAzNTJsLTM1LjEgMHptMzk1IDBjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDM5Ny42IDIxMC4xUzM4Ny4yIDE5MiA0MDggMTkybDMyLjggMGMxMC40IDAgMTMuMiA4LjcgMTguOCAxOC4xbDM2LjcgNzQuNXM1LjIgMTMuMSAyMS4xIDEzLjEgMjEuMS0xMy4xIDIxLjEtMTMuMWwzNi44LTc0LjVjNS42LTkuNSA4LjQtMTguMSAxOC44LTE4LjFsMzIuOSAwYzIwLjggMCAxMC40IDE4LjEgMTAuNCAxOC4xTDU4MS41IDMyMS42UzU2OS4zIDM1MiA1MzUuMSAzNTJsLTM1LjIgMHpNMzM3LjYgMTkyYzM0LjEgMCA0Ni40IDMwLjQgNDYuNCAzMC40bDU1LjkgMTExLjVTNDUwLjMgMzUyIDQyOS41IDM1MmwtMzIuOCAwYy0xMC40IDAtMTMuMi04LjctMTguOC0xOC4xbC0zNi43LTc0LjVzLTUuMi0xMy4xLTIxLjEtMTMuMS0yMS4xIDEzLjEtMjEuMSAxMy4xbC0zNi43IDc0LjVjLTUuNiA5LjQtOC40IDE4LjEtMTguOCAxOC4xbC0zMi45IDBjLTIwLjggMC0xMC40LTE4LjEtMTAuNC0xOC4xbDU1LjktMTExLjVTMjY4LjMgMTkyIDMwMi41IDE5MmwzNS4xIDB6Il19LHpiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwYWdlbGluZXMiLGljb246WzM4NCw1MTIsW10sImYxOGMiLCJNMzg0LjEgMzEyLjdjLTU1LjEgMTM2LjctMTg3LjEgNTQtMTg3LjEgNTQtNDAuNSA4MS44LTEwNy40IDEzNC40LTE4NC42IDEzNC43LTE2LjEgMC0xNi42LTI0LjQgMC0yNC40IDY0LjQtLjMgMTIwLjUtNDIuNyAxNTcuMi0xMTAuMS00MS4xIDE1LjktMTE4LjYgMjcuOS0xNjEuNi04Mi4yIDEwOS00NC45IDE1OS4xIDExLjIgMTc4LjMgNDUuNSA5LjktMjQuNCAxNy01MC45IDIxLjYtNzkuNyAwIDAtMTM5LjcgMjEuOS0xNDkuNS05OC4xIDExOS4xLTQ3LjkgMTUyLjYgNzYuNyAxNTIuNiA3Ni43IDEuNi0xNi43IDMuMy01Mi42IDMuMy01My40IDAgMC0xMDYuMy03My43LTM4LjEtMTY1LjIgMTI0LjYgNDMgNjEuNCAxNjIuNCA2MS40IDE2Mi40IC41IDEuNiAuNSAyMy44IDAgMzMuNCAwIDAgNDUuMi04OSAxMzYuNC01Ny41LTQuMiAxMzQtMTQxLjkgMTA2LjQtMTQxLjkgMTA2LjQtNC40IDI3LjQtMTEuMiA1My40LTIwIDc3LjUgMCAwIDgzLTkxLjggMTcyLTIweiJdfSxrYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiYW1hem9uIixpY29uOls0NDgsNTEyLFtdLCJmMjcwIiwiTTI1Ny43IDE2Mi43Yy00OC43IDEuOC0xNjkuNSAxNS41LTE2OS41IDExNy41IDAgMTA5LjUgMTM4LjMgMTE0IDE4My41IDQzLjIgNi41IDEwLjIgMzUuNCAzNy41IDQ1LjMgNDYuOGw1Ni44LTU2cy0zMi4zLTI1LjMtMzIuMy01Mi44bDAtMTQ3LjFDMzQxLjUgODkgMzE3IDMyIDIyOS4yIDMyIDE0MS4yIDMyIDk0LjUgODcgOTQuNSAxMzYuM2w3My41IDYuOGMxNi4zLTQ5LjUgNTQuMi00OS41IDU0LjItNDkuNSA0MC43LS4xIDM1LjUgMjkuOCAzNS41IDY5LjF6bTAgODYuOGMwIDgwLTg0LjIgNjgtODQuMiAxNy4yIDAtNDcuMiA1MC41LTU2LjcgODQuMi01Ny44bDAgNDAuNnpNMzkzLjcgNDEzYy03LjcgMTAtNzAgNjctMTc0LjUgNjdTMzQuNyA0MDguNSAxMC4yIDM3OWMtNi44LTcuNyAxLTExLjMgNS41LTguMyA3My4zIDQ0LjUgMTg3LjggMTE3LjggMzcyLjUgMzAuMyA3LjUtMy43IDEzLjMgMiA1LjUgMTJ6bTM5LjggMi4yYy02LjUgMTUuOC0xNiAyNi44LTIxLjIgMzEtNS41IDQuNS05LjUgMi43LTYuNS0zLjhzMTkuMy00Ni41IDEyLjctNTVjLTYuNS04LjMtMzctNC4zLTQ4LTMuMi0xMC44IDEtMTMgMi0xNC0uMy0yLjMtNS43IDIxLjctMTUuNSAzNy41LTE3LjUgMTUuNy0xLjggNDEtLjggNDYgNS43IDMuNyA1LjEgMCAyNy4xLTYuNSA0My4xeiJdfSxTYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZW52aXJhIixpY29uOls0NDgsNTEyLFtdLCJmMjk5IiwiTTAgMzJjNDc3LjYgMCAzNjYuNiAzMTcuMyAzNjcuMSAzNjYuM2w4MC45IDgxLjctMjYgMC03MC40LTcxLjJDMzEyLjYgNDEzIDIyNy4yIDQ0My4zIDEzNy4yIDM3MS44IDQ3IDMwMC4zIDUyIDIxNC43IDAgMzJ6TTc5LjcgNzhjLTQ5LjctMjMuNS01LjIgOS4yLTUuMiA5LjIgNDUuMiAzMS4yIDY2IDczLjcgOTAuMiAxMTkuOSAzMS41IDYwLjIgNzkgMTM5LjcgMTQ0LjIgMTY3LjcgNjUgMjggMzQuMiAxMi41IDYtOC41LTI4LjItMjEuMi02OC4yLTg3LTkxLTEzMC4yLTMxLjctNjAtNjEtMTE4LjYtMTQ0LjItMTU4LjF6Il19LENiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJsaW5vZGUiLGljb246WzQ0OCw1MTIsW10sImYyYjgiLCJNMzY2LjMgMTg2LjlsLTU5LjUgMzYuOS0uOCAzNi45LTI5LjMtMTkuMy0zOS40IDI0LjNjMi4yIDU1LjIgMi41IDU5LjMgMi41IDU5LjVsLTk3LjIgNjUuNC0xNS4xLTEwNC43IDEwOC4xLTYyLTQwLjItMjYtNzUuNCAzOC41LTIxLTE0My4zIDEyOS00OS40LTkxLjMtNDMuNi0xMjUuNyAzOS40IDI3LjcgMTM0LjkgNDEuOSAzMi43LTMxLjggMTUuMSAyMC45IDEwMS40IDI5LjMgMjcuNy0yMC45IDEyLjYgMTYuOCA3OC44IDY2LjIgNjkuNmMtMTAuOC03NC44LTExLjctNzguNi0xMS43LTc4LjhsNzcuOS01NS4zQzI0NCAzNjUuNCAyNDIuMyAzNjcgMjQyLjMgMzY3bC44IDI0LjMgMzMuNSAyOC41LS44LTc3LjEgNDYuOS0zMy41IDI2LjgtMTguNC0yLjUgMzYgMjUuMSAxNy42IDYuNy03NC42IDU4LjctNDMuNi03MS4yLTM5LjR6Il19LF9iZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhY2N1c29mdCIsaWNvbjpbNjQwLDUxMixbXSwiZjM2OSIsIk0zMjIuMSAyNTJsMC0xLTUxLjItNjUuOHMtMTIgMS42LTI1IDE1LjFjLTkgOS4zLTI0Mi4xIDIzOS4xLTI0My40IDI0MC45LTcgMTAgMS42IDYuOCAxNS43IDEuNyAuOCAwIDExNC41LTM2LjYgMTE0LjUtMzYuNiAuNS0uNi0uMS0uMSAuNi0uNi0uNC01LjEtLjgtMjYuMi0xLTI3LjctLjYtNS4yIDIuMi02LjkgNy04LjlsOTIuNi0zMy44Yy42LS44IDg4LjUtODEuNyA5MC4yLTgzLjN6TTQ4Mi4yIDM3Mi4xYzEzLjMgMTYuMSAyMC43IDEzLjMgMzAuOCA5LjMgMy4yLTEuMiAxMTUuNC00Ny42IDExNy44LTQ4LjkgOC00LjMtMS43LTE2LjctNy4yLTIzLjQtMi4xLTIuNS0yMDUuMS0yNDUuNi0yMDcuMi0yNDguMy05LjctMTIuMi0xNC4zLTEyLjktMzguNC0xMi44LTEwLjIgMC0xMDYuOCAuNS0xMTYuNSAuNi0xOS4yIC4xLTMyLjktLjMtMTkuMiAxNi45IDcuNyA5LjUgMjM0LjIgMjk5LjcgMjM5LjkgMzA2LjZ6bTE1Mi43IDEuNmMtMi4zLS4zLTI0LjYtNC43LTM4LTcuMiAwIDAtMTE1IDUwLjQtMTE3LjUgNTEuNi0xNiA3LjMtMjYuOS0zLjItMzYuNy0xNC42bC01Ny4xLTc0Yy01LjQtLjktNjAuNC05LjYtNjUuMy05LjMtMy4xIC4yLTkuNiAuOC0xNC40IDIuOS00LjkgMi4xLTE0NS4yIDUyLjgtMTUwLjIgNTQuNy01LjEgMi0xMS40IDMuNi0xMS4xIDcuNiAuMiAyLjUgMiAyLjYgNC42IDMuNSAyLjcgLjggMzAwLjkgNjcuNiAzMDggNjkuMSAxNS42IDMuMyAzOC41IDEwLjUgNTMuNiAxLjcgMi4xLTEuMiAxMjMuOC03Ni40IDEyNS44LTc3LjggNS40LTQgNC4zLTYuOC0xLjctOC4yeiJdfSxUYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZXJsYW5nIixpY29uOls2NDAsNTEyLFtdLCJmMzlkIiwiTTg3LjIgNTMuNWwtODcuMiAwIDAgNDA1IDEwMC40IDBjLTQ5LjctNTIuNi03OC44LTEyNS4zLTc4LjctMjEyLjEtLjEtNzYuNyAyNC0xNDIuNyA2NS41LTE5Mi45em0yMzguMiA5LjdjLTQ1LjkgLjEtODUuMSAzMy41LTg5LjIgODMuMmwxNjkuOSAwYy0xLjEtNDkuNy0zNC41LTgzLjEtODAuNy04My4yem0yMzAuNy05LjZsLjMgMC0uMS0uMS0uMiAuMXptLjMgMGMzMS40IDQyLjcgNDguNyA5Ny41IDQ2LjIgMTYyLjcgLjUgNiAuNSAxMS43IDAgMjQuMWwtMzcyLjQgMGMtLjIgMTA5LjcgMzguOSAxOTQuOSAxMzguNiAxOTUuMyA2OC41LS4zIDExOC01MSAxNTEuOS0xMDYuMWw5Ni40IDQ4LjJjLTE3LjQgMzAuOS0zNi41IDU3LjgtNTcuOSA4MC44bDgwLjggMCAwLTQwNS04My42IDB6Il19LExiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ1bmlzb24iLGljb246WzUxMiw1MTIsW10sImU4NTQiLCJNNDM1LjEgMTYxLjdhMTMuOSAxMy45IDAgMSAxIDE5LjYtMTkuNyAxMy45IDEzLjkgMCAxIDEgLTE5LjYgMTkuN3pNMzY5LjcgOTcuOGMxMC40IDIuMSAyMC42IDUuMiAzMC40IDkuMiA2LjggMi44IDEwLjEgMTAuOCA3LjMgMTcuNy0yLjggNi43LTEwLjkgMTAuMS0xNy42IDcuMy04LjMtMy40LTE2LjgtNS44LTI1LjctNy44LTguNi0xLjctMTcuMy0yLjUtMjYtMi41LTE5LjMgMC0zNy4xLTEwLjMtNDYuNy0yNy04LjctMTUuMS0yMC42LTI4LjktMzQuNy0zOS43LTU5LjEtNDUuNS0xNDMuOC0zNC4zLTE4OS4yIDI1LTIuNiAzLjMtNi41IDUuMy0xMC43IDUuMy03LjQgMC0xMy41LTYuMS0xMy41LTEzLjUgMC0zLjIgMS4yLTYuMyAzLjItOC44IDEyLjktMTYuNyAyOC45LTMwLjcgNDcuMS00MS4yIDc3LjQtNDQuOCAxNzYuNC0xOC4yIDIyMS4xIDU5LjQgNC4zIDguMiAxMy43IDEzLjMgMjIuOCAxMy41IDEwLjggMCAyMS42IDEgMzIuMiAzLjF6TTM1IDI3MGM0LjYtOC4yIDQuNi0xOC4yIDAtMjYuNC0yMS45LTM2LjUtMjcuMy04Mi4zLTE2LjMtMTIzLjIgMS42LTUuOSA2LjktMTAgMTMtMTAgOC43IDAgMTUuMyA4LjcgMTMgMTctOS41IDM1LjQtMy40IDcxIDEzLjcgMTAyLjkgOS4zIDE2LjUgOS4zIDM2LjcgMCA1My4xLTguNyAxNS43LTE0LjggMzIuNC0xNy4yIDUwLjMtOS43IDczLjkgNDIuMyAxNDEuNyAxMTYuMiAxNTEuNCA3LjMgMSAxMi42IDcuOSAxMS42IDE1LjItMSA3LjMtNy44IDEyLjYtMTUuMSAxMS42LTIxLjEtMi44LTQxLjQtOS43LTU5LjgtMjAuMy03NS42LTQzLjYtMTA0LjktMTQ1LjgtNTkuMi0yMjEuNXpNMjE2LjkgNTA5Yy03LjQgMi0xNS4xLTIuNC0xNy4xLTkuOHMyLjUtMTUgOS45LTE2LjljOC41LTIuMiAxNy40IDQuNSAxNy40IDEzLjQgMCA2LjItNC4yIDExLjYtMTAuMiAxMy4zem0xMjIuMy05MWMtOS41IDAtMTguNCA1LTIzLjIgMTMuMi00LjkgOS40LTExLjcgMTguMi0xOC43IDI2LjJsMCAwYy03LjEgOC0xNC44IDE1LjItMjMuMiAyMS43LTUuOSA0LjUtMTQuNCAzLjQtMTktMi41cy0zLjQtMTQuNCAyLjUtMTguOWM3LTUuNCAxMy41LTExLjUgMTkuNC0xOC4xbDAgMGM1LjktNi42IDExLjEtMTMuOCAxNS41LTIxLjYgOS43LTE2LjcgMjcuNS0yNyA0Ni44LTI3IDE3LjggMCAzNS40LTMuNSA1MS44LTEwLjMgNjguMy0yOC4zIDEwMS4xLTEwOC4zIDczLjItMTc2LjUtLjYtMS42LTEtMy4zLTEtNSAwLTcuNCA2LjEtMTMuNSAxMy41LTEzLjUgNS40IDAgMTAuMyAzLjIgMTIuNCA4LjIgOC4yIDE5LjcgMTIuNCA0MC44IDEyLjQgNjIuMSAwIDg5LjUtNzIuNyAxNjIuMS0xNjIuNCAxNjIuMWwwIDB6bS0xMy4xLTI2OGMzLjktLjQgNy45LS42IDExLjktLjYgNTkuMyAwIDEwOC4yIDQ4LjcgMTA4LjIgMTA3LjhTMzk3LjMgMzY1IDMzOCAzNjVjLTQgMC03LjktLjItMTEuOC0uNi0yMi4yLTEuNy00My4zIDEwLjQtNTIuOSAzMC40LTE3LjIgMzkuMS01Ni4yIDY0LjUtOTkuMSA2NC41LTU5LjMgMC0xMDguMi00OC43LTEwOC4yLTEwNy44IDAtMjMuMiA3LjUtNDUuNyAyMS40LTY0LjMgMTIuMi0xOC4zIDEyLjEtNDIuMy0uNC02MC41LTEzLjYtMTguNS0yMC45LTQwLjgtMjAuOS02My43IDAtNTkuMSA0OC44LTEwNy44IDEwOC4yLTEwNy44IDQyLjggMCA4MS44IDI1LjQgOTkgNjQuNCA5LjYgMjAgMzAuNyAzMi4xIDUyLjkgMzAuNHpNMTA2LjggMzkzLjRjMTQuNCAyNS4yIDQxLjEgNDAuOCA2OS44IDQwLjggNDQuMiAwIDgwLjYtMzYuOCA4MC42LTgxLjZzLTM2LjQtODEuNi04MC42LTgxLjZjLTE0LjIgMC0yOC4xIDMuOC00MC4zIDEwLjktMzguMyAyMi40LTUxLjYgNzIuNy0yOS41IDExMS40ek0yNjggMjk4YzE0LjQgMjUuMiA0MS4xIDQwLjggNjkuOCA0MC44IDQ0LjIgMCA4MC42LTM2LjggODAuNi04MS42cy0zNi40LTgxLjYtODAuNi04MS42Yy0xNC4yIDAtMjguMSAzLjgtNDAuMyAxMC45LTM4LjMgMjIuNC01MS42IDcyLjctMjkuNSAxMTEuNHptLTkxLjItNTQuNmM0NC4yIDAgODAuNS0zNi44IDgwLjUtODEuNnMtMzYuNC04MS42LTgwLjYtODEuNi04MC42IDM2LjgtODAuNiA4MS42YzAgNDQuNyAzNi40IDgxLjYgODAuNiA4MS42eiJdfSwkYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiY2MtZGlzY292ZXIiLGljb246WzU3Niw1MTIsW10sImYxZjIiLCJNNTIwLjQgMTk2LjFjMC03LjktNS41LTEyLjEtMTUuNi0xMi4xbC00LjkgMCAwIDI0LjkgNC43IDBjMTAuMyAwIDE1LjgtNC40IDE1LjgtMTIuOHpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4My45IDE3MC45YzIyLjYgMCA1Mi45LTQuMSA1Mi45IDI0LjQgMCAxMi42LTYuNiAyMC43LTE4LjcgMjMuMmwyNS44IDM0LjQtMTkuNiAwLTIyLjItMzIuOC0yLjIgMCAwIDMyLjgtMTYgMCAwLTgyek00MjggMTcxbDQ1LjMgMCAwIDE0LTI5LjMgMCAwIDE4LjIgMjguMyAwIDAgMTMuOC0yOC4zIDAgMCAyMi4yIDI5LjMgMCAwIDEzLjgtNDUuMyAwIDAtODJ6bS02OC43IDBsMjEuOSA1NS4yIDIyLjItNTUuMiAxNy41IDAtMzUuNSA4NC4yLTguNiAwLTM1LTg0LjIgMTcuNSAwem0tNTUuOSA4Ni4yYTQ0LjYgNDQuNiAwIDEgMSAwLTg5LjIgNDQuNiA0NC42IDAgMSAxIDAgODkuMnptLTQ5LjMtODMuMWwwIDE5Yy0yMC4xLTIwLjEtNDYuOC00LjctNDYuOCAxOSAwIDI1IDI3LjUgMzguNSA0Ni44IDE5LjJsMCAxOWMtMjkuNyAxNC4zLTYzLjMtNS43LTYzLjMtMzguMiAwLTMxLjIgMzMuMS01MyA2My4zLTM4em0tOTcuMiA2Ni4zYzExLjQgMCAyMi40LTE1LjMtMy4zLTI0LjQtMTUtNS41LTIwLjItMTEuNC0yMC4yLTIyLjcgMC0yMy4yIDMwLjYtMzEuNCA0OS43LTE0LjNsLTguNCAxMC44Yy0xMC40LTExLjYtMjQuOS02LjItMjQuOSAyLjUgMCA0LjQgMi43IDYuOSAxMi4zIDEwLjMgMTguMiA2LjYgMjMuNiAxMi41IDIzLjYgMjUuNiAwIDI5LjUtMzguOCAzNy40LTU2LjYgMTEuM2wxMC4zLTkuOWMzLjcgNy4xIDkuOSAxMC44IDE3LjUgMTAuOHpNNTUuNCAyNTNsLTIzLjQgMCAwLTgyIDIzLjQgMGMyNi4xIDAgNDQuMSAxNyA0NC4xIDQxLjEgMCAxOC41LTEzLjIgNDAuOS00NC4xIDQwLjl6bTY3LjUgMGwtMTYgMCAwLTgyIDE2IDAgMCA4MnpNNTQ0IDQzM2MwIDguMi02LjggMTUtMTUgMTVsLTQwMSAwYzE4OS42LTM1LjYgMzgyLjctMTM5LjIgNDE2LTE2MGwwIDE0NXpNNzQuMSAxOTEuNmMtNS4yLTQuOS0xMS42LTYuNi0yMS45LTYuNmwtNC4yIDAgMCA1NC4yIDQuMiAwYzEwLjMgMCAxNy0yIDIxLjktNi40IDUuNy01LjIgOC45LTEyLjggOC45LTIwLjdzLTMuMi0xNS41LTguOS0yMC41eiJdfSxBYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToic2FmYXJpIixpY29uOls1MTIsNTEyLFtdLCJmMjY3IiwiTTI3NC43IDI3NC43TDIzNy4zIDIzNy4zIDE2NiAzNDYgMjc0LjcgMjc0Ljd6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDExLjggMTgyLjhsMTQuOC02LjFjMS0uNCAyLS42IDMuMS0uNnMyLjEgLjIgMy4xIC42IDEuOCAxIDIuNiAxLjcgMS4zIDEuNiAxLjcgMi42IC42IDIgLjYgMy4xLS4yIDIuMS0uNiAzLjEtMSAxLjktMS43IDIuNi0xLjYgMS4zLTIuNiAxLjdMNDE4IDE5Ny42Yy0yIC44LTQuMiAuOC02LjEgMHMtMy41LTIuNC00LjMtNC4zLS44LTQuMiAwLTYuMSAyLjQtMy41IDQuMy00LjN6TTMxNC40IDk0bDYuMS0xNC44Yy44LTIgMi40LTMuNSA0LjMtNC4zczQuMi0uOCA2LjEgMCAzLjUgMi40IDQuMyA0LjMgLjggNC4yIDAgNi4xbC02LjEgMTQuOGMtLjggMi0yLjQgMy41LTQuMyA0LjNzLTQuMiAuOC02LjEgMGMtMS0uNC0xLjktMS0yLjYtMS43cy0xLjMtMS42LTEuNy0yLjYtLjYtMi0uNi0zLjEgLjItMi4xIC42LTMuMXpNMjU2IDYwYzIuMSAwIDQuMiAuOCA1LjcgMi4zUzI2NCA2NS45IDI2NCA2OGwwIDE2YzAgMi4xLS44IDQuMi0yLjMgNS43cy0zLjUgMi4zLTUuNyAyLjMtNC4yLS44LTUuNy0yLjMtMi4zLTMuNS0yLjMtNS43bDAtMTZjMC0yLjEgLjgtNC4yIDIuMy01LjdTMjUzLjkgNjAgMjU2IDYwek0xODEgNzQuOWMxLS40IDItLjYgMy4xLS42czIuMSAuMiAzLjEgLjYgMS45IDEgMi42IDEuNyAxLjMgMS42IDEuNyAyLjZMMTk3LjYgOTRjLjQgMSAuNyAyIC43IDMuMXMtLjIgMi4xLS42IDMuMS0xIDEuOS0xLjcgMi42LTEuNiAxLjQtMi42IDEuOC0yIC42LTMuMSAuNi0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjgtMS4zLTEuNy0xLjctMi43bC02LjEtMTQuOGMtLjgtMi0uOC00LjIgMC02LjFzMi40LTMuNSA0LjMtNC4zem0tNjMuNiA0Mi41YzEuNS0xLjUgMy41LTIuMyA1LjctMi4zczQuMiAuOCA1LjcgMi4zTDE0MCAxMjguN2MxLjUgMS41IDIuMyAzLjUgMi4zIDUuNnMtLjggNC4xLTIuMyA1LjZjLTEuNSAxLjUtMy41IDIuMy01LjcgMi4zcy00LjItLjgtNS43LTIuM2wtMTEuMy0xMS4zYy0xLjUtMS41LTIuMy0zLjUtMi4zLTUuNnMuOC00LjEgMi4zLTUuNmwwIDB6TTYwIDI1NmMwLTIuMSAuOC00LjIgMi4zLTUuN1M2NS45IDI0OCA2OCAyNDhsMTYgMGMyLjEgMCA0LjIgLjggNS43IDIuM3MyLjMgMy41IDIuMyA1LjctLjggNC4yLTIuMyA1LjctMy41IDIuMy01LjcgMi4zbC0xNiAwYy0yLjEgMC00LjItLjgtNS43LTIuM1M2MCAyNTguMSA2MCAyNTZ6bTQwLjIgNzMuMmwtMTQuOCA2LjFjLTEgLjQtMiAuNi0zLjEgLjZzLTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjYtLjYtMi0uNi0zLjEgLjItMi4xIC42LTMuMSAxLTEuOSAxLjctMi42IDEuNi0xLjMgMi42LTEuN0w5NCAzMTQuNGMyLS44IDQuMi0uOCA2LjEgMHMzLjUgMi40IDQuMyA0LjMgLjggNC4yIDAgNi4xLTIuNCAzLjUtNC4zIDQuM3ptNC4zLTEzNmMtLjQgMS0xIDEuOS0xLjcgMi42cy0xLjYgMS4zLTIuNiAxLjctMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNmwtMTQuOC02LjFjLTItLjgtMy41LTIuNC00LjMtNC4zcy0uOC00LjIgMC02LjEgMi40LTMuNSA0LjMtNC4zIDQuMi0uOCA2LjEgMGwxNC44IDYuMWMyIC44IDMuNSAyLjQgNC4zIDQuM3MuOCA0LjIgMCA2LjFsMCAwek0xOTcuNiA0MThsLTYuMSAxNC44Yy0uNCAxLTEgMS45LTEuNyAyLjZzLTEuNiAxLjMtMi42IDEuNy0yIC42LTMuMSAuNi0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjFsNi4xLTE0LjhjLjQtMSAxLTEuOSAxLjctMi43czEuNi0xLjQgMi42LTEuOCAyLS42IDMuMS0uNiAyLjEgLjIgMy4xIC42IDEuOSAxIDIuNiAxLjggMS4zIDEuNyAxLjcgMi42IC42IDIgLjYgMy4xLS4yIDIuMS0uNyAzLjF6TTI2NCA0NDRjMCAyLjEtLjggNC4yLTIuMyA1LjdzLTMuNSAyLjMtNS43IDIuMy00LjItLjgtNS43LTIuMy0yLjMtMy41LTIuMy01LjdsMC0xNmMwLTIuMSAuOC00LjIgMi4zLTUuN3MzLjUtMi4zIDUuNy0yLjMgNC4yIC44IDUuNyAyLjMgMi4zIDMuNSAyLjMgNS43bDAgMTZ6bTY3LTYuOWMtMSAuNC0yIC42LTMuMSAuNnMtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNkwzMTQuNCA0MThjLS44LTItLjgtNC4yIDAtNi4xczIuNC0zLjUgNC4zLTQuMyA0LjItLjggNi4xIDAgMy41IDIuNCA0LjMgNC4zbDYuMSAxNC44Yy44IDIgLjggNC4yIDAgNi4xcy0yLjQgMy41LTQuMyA0LjN6bTYzLjYtNDIuNWMtMS41IDEuNS0zLjUgMi4zLTUuNyAyLjNzLTQuMi0uOC01LjctMi4zTDM3MiAzODMuM2MtMS41LTEuNS0yLjMtMy41LTIuMy01LjZzLjgtNC4xIDIuMy01LjYgMy41LTIuMyA1LjctMi4zIDQuMiAuOCA1LjcgMi4zbDExLjMgMTEuM2MxLjUgMS41IDIuMyAzLjUgMi4zIDUuNnMtLjggNC4xLTIuMyA1LjZsMCAwek0yODYuMiAyODYuMkwxMTAuMyA0MDEuNyAyMjUuOCAyMjUuOCA0MDEuNyAxMTAuMyAyODYuMiAyODYuMnpNNDM3LjEgMzMxYy0uOCAyLTIuNCAzLjUtNC4zIDQuM3MtNC4yIC44LTYuMSAwbC0xNC44LTYuMWMtMi0uOC0zLjUtMi40LTQuMy00LjNzLS44LTQuMiAwLTYuMWMuNC0xIDEtMS45IDEuNy0yLjZzMS42LTEuMyAyLjYtMS43IDItLjYgMy4xLS42IDIuMSAuMiAzLjEgLjZsMTQuOCA2LjFjMiAuOCAzLjUgMi40IDQuMyA0LjNzLjggNC4yIDAgNi4xem02LjktNjdsLTE2IDBjLTIuMSAwLTQuMi0uOC01LjctMi4zcy0yLjMtMy41LTIuMy01LjcgLjgtNC4yIDIuMy01LjcgMy41LTIuMyA1LjctMi4zbDE2IDBjMi4xIDAgNC4yIC44IDUuNyAyLjNzMi4zIDMuNSAyLjMgNS43LS44IDQuMi0yLjMgNS43LTMuNSAyLjMtNS43IDIuM3oiXX0sRGJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNwYWNlLWF3ZXNvbWUiLGljb246WzUxMiw1MTIsW10sImU1YWMiLCJNOTYgMjU2bDMyIDAgMCAyNTYtMTI4IDAgMC0xNjAgMzIgMCAwLTMyIDMyIDAgMC0zMiAzMiAwIDAtMzJ6bTQxNiA5NmwwIDE2MC0xMjggMCAwLTI1NiAzMiAwIDAgMzIgMzIgMCAwIDMyIDMyIDAgMCAzMiAzMiAwek0zMjAgNjRsMzIgMCAwIDM4NC0zMiAwIDAtMzItMTI4IDAgMCAzMi0zMiAwIDAtMzg0IDMyIDAgMC0zMiAzMiAwIDAtMzIgNjQgMCAwIDMyIDMyIDAgMCAzMnptLTMyIDY0bC02NCAwIDAgNjQgNjQgMCAwLTY0eiJdfSxFYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToibm9kZSIsaWNvbjpbNjQwLDUxMixbXSwiZjQxOSIsIk0zMTYuMyA0NTJjLTIuMSAwLTQuMi0uNi02LjEtMS42TDI5MSA0MzljLTIuOS0xLjYtMS41LTIuMi0uNS0yLjUgMy44LTEuMyA0LjYtMS42IDguNy00IC40LS4yIDEtLjEgMS40IC4xbDE0LjggOC44Yy41IC4zIDEuMyAuMyAxLjggMEwzNzUgNDA4Yy41LS4zIC45LS45IC45LTEuNmwwLTY2LjdjMC0uNy0uMy0xLjMtLjktMS42bC01Ny44LTMzLjNjLS41LS4zLTEuMi0uMy0xLjggMGwtNTcuOCAzMy4zYy0uNiAuMy0uOSAxLS45IDEuNmwwIDY2LjdjMCAuNiAuNCAxLjIgLjkgMS41bDE1LjggOS4xYzguNiA0LjMgMTMuOS0uOCAxMy45LTUuOGwwLTY1LjljMC0uOSAuNy0xLjcgMS43LTEuN2w3LjMgMGMuOSAwIDEuNyAuNyAxLjcgMS43bDAgNjUuOWMwIDExLjUtNi4yIDE4LTE3LjEgMTgtMy4zIDAtNiAwLTEzLjMtMy42bC0xNS4yLTguN2MtMy43LTIuMi02LjEtNi4yLTYuMS0xMC41bDAtNjYuN2MwLTQuMyAyLjMtOC40IDYuMS0xMC41bDU3LjgtMzMuNGMzLjctMi4xIDguNS0yLjEgMTIuMSAwbDU3LjggMzMuNGMzLjcgMi4yIDYuMSA2LjIgNi4xIDEwLjVsMCA2Ni43YzAgNC4zLTIuMyA4LjQtNi4xIDEwLjVsLTU3LjggMzMuNGMtMS43IDEuMS0zLjggMS43LTYgMS43ek0zNjMgMzg2LjJjMC0xMi41LTguNC0xNS44LTI2LjItMTguMi0xOC0yLjQtMTkuOC0zLjYtMTkuOC03LjggMC0zLjUgMS41LTguMSAxNC44LTguMSAxMS45IDAgMTYuMyAyLjYgMTguMSAxMC42IC4yIC44IC44IDEuMyAxLjYgMS4zbDcuNSAwYy41IDAgLjktLjIgMS4yLS41IC4zLS40IC41LS44IC40LTEuMy0xLjItMTMuOC0xMC4zLTIwLjItMjguOC0yMC4yLTE2LjUgMC0yNi4zIDctMjYuMyAxOC42IDAgMTIuNyA5LjggMTYuMSAyNS42IDE3LjcgMTguOSAxLjkgMjAuNCA0LjYgMjAuNCA4LjMgMCA2LjUtNS4yIDkuMi0xNy40IDkuMi0xNS4zIDAtMTguNy0zLjgtMTkuOC0xMS40LS4xLS44LS44LTEuNC0xLjctMS40bC03LjUgMGMtLjkgMC0xLjcgLjctMS43IDEuNyAwIDkuNyA1LjMgMjEuMyAzMC42IDIxLjMgMTguNSAwIDI5LTcuMiAyOS0xOS44em01NC41LTUwLjFjMCA2LjEtNSAxMS4xLTExLjEgMTEuMXMtMTEuMS01LTExLjEtMTEuMWMwLTYuMyA1LjItMTEuMSAxMS4xLTExLjEgNi0uMSAxMS4xIDQuOCAxMS4xIDExLjF6bS0xLjggMGMwLTUuMi00LjItOS4zLTkuNC05LjMtNS4xIDAtOS4zIDQuMS05LjMgOS4zczQuMiA5LjQgOS4zIDkuNGM1LjItLjEgOS40LTQuMyA5LjQtOS40em0tNC41IDYuMmwtMi42IDBjLS4xLS42LS41LTMuOC0uNS0zLjktLjItLjctLjQtMS4xLTEuMy0xLjFsLTIuMiAwIDAgNS0yLjQgMCAwLTEyLjUgNC4zIDBjMS41IDAgNC40IDAgNC40IDMuMyAwIDIuMy0xLjUgMi44LTIuNCAzLjEgMS43IC4xIDEuOCAxLjIgMi4xIDIuOCAuMSAxIC4zIDIuNyAuNiAzLjN6bS0yLjgtOC44YzAtMS43LTEuMi0xLjctMS44LTEuN2wtMiAwIDAgMy41IDEuOSAwYzEuNiAwIDEuOS0xLjEgMS45LTEuOHpNMTM3LjMgMTkxYzAtMi43LTEuNC01LjEtMy43LTYuNEw3Mi4zIDE0OS4zYy0xLS42LTIuMi0uOS0zLjQtMWwtLjYgMGMtMS4yIDAtMi4zIC40LTMuNCAxTDMuNyAxODQuNkMxLjQgMTg1LjkgMCAxODguNCAwIDE5MWwuMSA5NWMwIDEuMyAuNyAyLjUgMS44IDMuMnMyLjUgLjcgMy43IDBMNDIgMjY4LjNjMi4zLTEuNCAzLjctMy44IDMuNy02LjRsMC00NC40YzAtMi42IDEuNC01LjEgMy43LTYuNGwxNS41LTguOWMxLjItLjcgMi40LTEgMy43LTFzMi42IC4zIDMuNyAxbDE1LjUgOC45YzIuMyAxLjMgMy43IDMuOCAzLjcgNi40bDAgNDQuNGMwIDIuNiAxLjQgNS4xIDMuNyA2LjRsMzYuNCAyMC45YzEuMSAuNyAyLjYgLjcgMy43IDAgMS4xLS42IDEuOC0xLjkgMS44LTMuMmwuMi05NXpNNDcyLjUgODcuM2wwIDE3Ni40YzAgMi42LTEuNCA1LjEtMy43IDYuNGwtNjEuMyAzNS40Yy0yLjMgMS4zLTUuMSAxLjMtNy40IDBsLTYxLjMtMzUuNGMtMi4zLTEuMy0zLjctMy44LTMuNy02LjRsMC03MC44YzAtMi42IDEuNC01LjEgMy43LTYuNGw2MS4zLTM1LjRjMi4zLTEuMyA1LjEtMS4zIDcuNCAwbDE1LjMgOC44YzEuNyAxIDMuOS0uMyAzLjktMi4ybDAtOTRjMC0yLjggMy00LjYgNS41LTMuMmwzNi41IDIwLjRjMi4zIDEuMiAzLjggMy43IDMuOCA2LjR6bS00NiAxMjguOWMwLS43LS40LTEuMy0uOS0xLjZsLTIxLTEyLjJjLS42LS4zLTEuMy0uMy0xLjkgMGwtMjEgMTIuMmMtLjYgLjMtLjkgLjktLjkgMS42bDAgMjQuM2MwIC43IC40IDEuMyAuOSAxLjZsMjEgMTIuMWMuNiAuMyAxLjMgLjMgMS44IDBsMjEtMTIuMWMuNi0uMyAuOS0uOSAuOS0xLjZsMC0yNC4zIC4xIDB6bTIwOS44LS43YzIuMy0xLjMgMy43LTMuOCAzLjctNi40bDAtMTcuMWMwLTIuNi0xLjQtNS4xLTMuNy02LjRsLTYwLjktMzUuNGMtMi4zLTEuMy01LjEtMS4zLTcuNCAwbC02MS4zIDM1LjRjLTIuMyAxLjMtMy43IDMuOC0zLjcgNi40bDAgNzAuOGMwIDIuNyAxLjQgNS4xIDMuNyA2LjRsNjAuOSAzNC43YzIuMiAxLjMgNSAxLjMgNy4zIDBsMzYuOC0yMC41YzIuNS0xLjQgMi41LTUgMC02LjRMNTUwIDI0MS42Yy0xLjItLjctMS45LTEuOS0xLjktMy4ybDAtMjIuMmMwLTEuMyAuNy0yLjUgMS45LTMuMmwxOS4yLTExLjFjMS4xLS43IDIuNi0uNyAzLjcgMEw1OTIuMSAyMTNjMS4xIC43IDEuOSAxLjkgMS45IDMuMmwwIDE3LjRjMCAyLjggMy4xIDQuNiA1LjYgMy4ybDM2LjctMjEuM3pNNTU5IDIxOWMtLjQgLjMtLjcgLjctLjcgMS4ybDAgMTMuNmMwIC41IC4zIDEgLjcgMS4ybDExLjggNi44Yy40IC4zIDEgLjMgMS40IDBMNTg0IDIzNWMuNC0uMyAuNy0uNyAuNy0xLjJsMC0xMy42YzAtLjUtLjMtMS0uNy0xLjJsLTExLjgtNi44Yy0uNC0uMy0xLS4zLTEuNCAwTDU1OSAyMTl6TTMwNC44IDI2Mi41bDAtNzAuNGMwLTIuNi0xLjYtNS4xLTMuOS02LjRsLTYxLjEtMzUuMmMtMi4xLTEuMi01LTEuNC03LjQgMGwtNjEuMSAzNS4yYy0yLjMgMS4zLTMuOSAzLjctMy45IDYuNGwwIDcwLjRjMCAyLjggMS45IDUuMiA0IDYuNGw2MS4yIDM1LjJjMi40IDEuNCA1LjIgMS4zIDcuNCAwbDYxLTM1LjJjMS44LTEgMy4xLTIuNyAzLjYtNC43IC4xLS41IC4yLTEuMSAuMi0xLjd6TTIzMC41IDEzNy42bC0uOCAuNSAxLjEgMC0uMy0uNXptNzYuMiAxMzAuMmwtLjQtLjcgMCAuOSAuNC0uMnoiXX0sUGJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNvZGVwZW4iLGljb246WzUxMiw1MTIsW10sImYxY2IiLCJNNTAyLjMgMTU5LjdsLTIzNC0xNTZjLTgtNC45LTE2LjUtNS0yNC42IDBsLTIzNCAxNTZjLTYgNC05LjcgMTEuMS05LjcgMTguM0wwIDMzNGMwIDcuMSAzLjcgMTQuMyA5LjcgMTguM2wyMzQgMTU2YzggNC45IDE2LjUgNSAyNC42IDBsMjM0LTE1NmM2LTQgOS43LTExLjEgOS43LTE4LjNsMC0xNTZjMC03LjEtMy43LTE0LjMtOS43LTE4LjN6TTI3OCA2My4xbDE3Mi4zIDExNC45LTc2LjkgNTEuNC05NS40LTYzLjcgMC0xMDIuNnptLTQ0IDBMMjM0IDE2NS43IDEzOC42IDIyOS40IDYxLjcgMTc4IDIzNCA2My4xek00NCAyMTkuMUw5OS4xIDI1NiA0NCAyOTIuOCA0NCAyMTkuMXpNMjM0IDQ0OC44TDYxLjcgMzM0IDEzOC42IDI4Mi42IDIzNCAzNDYuMyAyMzQgNDQ4Ljh6TTI1NiAzMDhsLTc3LjctNTIgNzcuNy01MiA3Ny43IDUyLTc3LjcgNTJ6bTIyIDE0MC45bDAtMTAyLjYgOTUuNC02My43IDc2LjkgNTEuNC0xNzIuMyAxMTQuOXptMTkwLTE1NmwtNTUuMS0zNi45IDU1LjEtMzYuOSAwIDczLjd6Il19LEliZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyYXZlbHJ5IixpY29uOls1MTIsNTEyLFtdLCJmMmQ5IiwiTTQ5OC42IDIzNC4yYy0xLjItMTAuMy0xLjctMjAuOC0zLjctMzEtMi41LTEyLjQtNS43LTI0LjYtOS42LTM2LjYtNi44LTIwLjktMTcuMi00MC4zLTMwLjktNTcuNS01LjktNy42LTEyLjEtMTQuOC0xOC44LTIxLjctMTQuMS0xNC0zMC0yNi4xLTQ3LjEtMzYuMS0xNy44LTEwLjYtMzYuOC0xOC45LTU2LjctMjQuNy0xMS0zLjEtMjIuMy01LjQtMzMuNS03LjYtNi44LTEuMy0xMy43LTEuNy0yMC42LTIuNS0uMyAwLS42LS40LS45LS42LTEwLjggMC0yMS41IDAtMzIuMyAwLTIuNCAuNC00LjggLjktNy4yIDEuMi0xMS42IDEuMi0yMy4xIDMuNi0zNC4zIDcuMS0xMy44IDQuMS0yNy4xIDkuNi0zOS44IDE2LjQtMTMuMyA3LTI2LjEgMTUuMS0zOC4xIDI0LjItNi4yIDQuNi0xMi4zIDkuNC0xOCAxNC41LTEwLjIgOS4yLTIwLjQgMTguNC0yOS45IDI4LjMtMTIuOCAxMy4zLTI0LjEgMjguMS0zMy42IDQ0LTguNiAxNC0xNS41IDI5LTIwLjUgNDQuNi03LjIgMjIuNy0xMC4zIDQ2LjYtOS4yIDcwLjMgLjYgMTMuNSAyIDI2LjkgNC40IDQwLjIgMy40IDE4LjQgOSAzNi4zIDE2LjcgNTMuMyAxMy42IDI5LjIgMzIuMSA1MS41IDUwLjQgNjcuOSAxMi44IDExLjYgMjYuOCAyMS45IDQxLjggMzAuNiAxNy43IDEwLjQgMzYuNCAxOC45IDU1LjkgMjUuMyAxMy4zIDQuMyAyNi45IDcuNiA0MC42IDkuOCA2LjEgMSAxMi4zIDEuMyAxOC40IDEuOSAuNCAuMSAuOCAuMyAxLjIgLjZsMzIuMyAwYzIuNS0uNCA1LS45IDcuNS0xLjEgMTYuMy0xLjMgMzIuMS01LjMgNDcuNS0xMC43IDE3LjItNS45IDMzLjctMTMuOSA0OS0yMy44IDkuNy02LjQgMTkuNC0xMy4xIDI4LjctMjAuMSA1LjgtNC4zIDExLTkuNSAxNi4zLTE0LjUgNC0zLjcgNy44LTcuNiAxMS41LTExLjUgMTItMTIuNyAyMi42LTI2LjYgMzEuNC00MS42IDkuNS0xNiAxNy40LTMyLjkgMjIuMy01MC45IDIuOS0xMC40IDQuOS0yMSA3LTMxLjcgMS01LjMgMS4zLTEwLjcgMS45LTE2LjEgMC0uMyAuNC0uNiAuNi0uOWwwLTM3LjFjLS4yLS42LS40LTEuMi0uNi0xLjh6bS0xNjEuMS0xLjJzLTE2LjYtMy0yOC41LTNjLTI3LjIgMC0zMy42IDE0LjktMzMuNiAzN2wwIDkzLjctNzMuNSAwIDAtMTkwLjcgNzMuNSAwIDAgMzEuOWM4LjktMjYuOCAyNi44LTM2LjIgNjItMzYuMmwwIDY3LjN6Il19LE5iZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJhbGlwYXkiLGljb246WzQ0OCw1MTIsW10sImY2NDIiLCJNMzc3LjcgMzJMNzAuMyAzMkMzMS40IDMyIDAgNjMuNCAwIDEwMi4zTDAgNDA5LjdDMCA0NDguNiAzMS40IDQ4MCA3MC4zIDQ4MGwzMDcuNSAwYzM4LjUgMCA2OS44LTMxLjEgNzAuMy02OS42LTQ2LTI1LjYtMTEwLjYtNjAuMy0xNzEuNi04OC40LTMyLjEgNDQtODQuMSA4MS0xNDguNiA4MS03MC42IDAtOTMuNy00NS4zLTk3LTc2LjQtNC0zOSAxNC45LTgxLjUgOTkuNS04MS41IDM1LjQgMCA3OS40IDEwLjIgMTI3LjEgMjUgMTYuNS0zMC4xIDI2LjUtNjAuMyAyNi41LTYwLjNsLTE3OC4yIDAgMC0xNi43IDkyLjEgMCAwLTMxLjItMTA5LjQgMCAwLTE5IDEwOS40IDAgMC01MC40IDUwLjkgMCAwIDUwLjQgMTA5LjQgMCAwIDE5LTEwOS40IDAgMCAzMS4yIDg4LjggMHMtMTUuMiA0Ni42LTM4LjMgOTAuOWM0OC45IDE2LjcgMTAwIDM2IDE0OC42IDUyLjdsMC0yMzQuNGMuMi0zOC43LTMxLjItNzAuMy02OS45LTcwLjN6TTQ3LjMgMzIzYzEgMjAuMiAxMC4yIDUzLjcgNjkuOSA1My43IDUyLjEgMCA5Mi42LTM5LjcgMTE3LjktNzIuOS00NC42LTE4LjctODQuNS0zMS40LTEwOS40LTMxLjQtNjcuNCAwLTc5LjQgMzMuMS03OC40IDUwLjZ6Il19LEZiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJjYy1hbWV4IixpY29uOls1NzYsNTEyLFtdLCJmMWYzIiwiTTAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMS4xLTYxLjcgMC0zMS45LTM1LjEtMzEuOSAzNS4xLTIwMy43IDAgMC0xNjMuOC02NS44IDAgODEuNy0xODQuNyA3OC42IDAgMjguMSA2My4yIDAtNjMuMiA5Ny4yIDAgMTYuOSA0Ny42IDE3LTQ3LjYgNzUuNSAwIDAtMi40YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJ6bTQ0MC40LTIxLjdsNDIuMi00Ni4zIDQyIDQ2LjMgNTEuNCAwLTY4LTcyLjEgNjgtNzIuMS01MC42IDAtNDIgNDYuNy00MS41LTQ2LjctNTEuNCAwIDY3LjUgNzIuNS02Ny40IDcxLjYgMC0zMy4xLTgzIDAgMC0yMi4yIDgwLjkgMCAwLTMyLjMtODAuOSAwIDAtMjIuNCA4MyAwIDAtMzMuMS0xMjIgMCAwIDE0My4yIDE3MS44IDB6bTk2LjMtNzJsMzkuMyA0MS45IDAtODMuMy0zOS4zIDQxLjR6bS0zNi4zLTkybDM2LjktMTAwLjYgMCAxMDAuNiAzOC43IDAgMC0xNDMuMy02MC4yIDAtMzIuMiA4OS4zLTMxLjktODkuMy02MS4yIDAgMCAxNDMuMS02My4yLTE0My4xLTUxLjIgMC02Mi40IDE0My4zIDQzIDAgMTEuOS0yOC43IDY1LjkgMCAxMiAyOC43IDgyLjcgMCAwLTEwMC4zIDM2LjggMTAwLjMgMzQuNCAwek0yODIgMTg1LjRsMTkuNS00Ni45IDE5LjQgNDYuOS0zOC45IDB6Il19LE9iZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJwaWVkLXBpcGVyLWFsdCIsaWNvbjpbNTc2LDUxMixbXSwiZjFhOCIsIk0yNDQgMjQ2Yy0zLjItMi02LjMtMi45LTEwLjEtMi45LTYuNiAwLTEyLjYgMy4yLTE5LjMgMy43bDEuNyA0LjkgMjcuNy01Ljd6TTM3OS45IDQ0My45Yy0xOSAwLTY0LjEgOS41LTc5LjkgMTkuOGw2LjkgNDUuMWMzNS43IDYuMSA3MC4xIDMuNiAxMDYtOS44LTQuOC0xMC0yMy41LTU1LjEtMzMtNTUuMXpNMzQwLjggMTc3YzYuNiAyLjggMTEuNSA5LjIgMjIuNyAyMi4xIDItMS40IDcuNS01LjIgNy41LTguNiAwLTQuOS0xMS44LTEzLjItMTMuMi0yMyAxMS4yLTUuNyAyNS4yLTYgMzcuNi04LjkgNjguMS0xNi40IDExNi4zLTUyLjkgMTQ2LjgtMTE2LjcgNi4xLTEyLjYgMTEuOC0yNS44IDEyLjQtMzkuOWwtMiAyLjZjLTI4LjQgNTAtMzMgNjMuMi04MS4zIDEwMC0zMS45IDI0LjQtNjkuMiA0MC4yLTEwNi42IDU0LjZsLTYuMy0uMyAwLTIxLjhjLTE5LjYgMS42LTE5LjctMTQuNi0zMS42LTIzLTE4LjcgMjAuNi0zMS42IDQwLjgtNTguOSA1MS4xLTEyLjcgNC44LTE5LjYgMTAtMjUuOSAyMS44IDM0LjktMTYuNCA5MS4yLTEzLjUgOTguOC0xMHpNNTU1LjUgMGwtLjYgMS4xLS4zIC45IC42LS42IC4zLTEuNHpNNDk2LjMgMzgyLjFjLTMzLjktNTYuOS03NS4zLTExOC40LTE1MC0xMTUuNWwtLjMtNmMtMS4xLTEzLjUgMzIuOCAzLjIgMzUuMS0zMWwtMTQuNCA3LjJjLTE5LjgtNDUuNy04LjYtNTQuMy02NS41LTU0LjMtMTQuNyAwLTI2LjcgMS43LTQxLjQgNC42IDIuOSAxOC42IDIuMiAzNi43LTEwLjkgNTAuM2wxOS41IDUuNWMtMS43IDMuMi0yLjkgNi4zLTIuOSA5LjggMCAyMSA0Mi44IDIuOSA0Mi44IDMzLjYgMCAxOC40LTM2LjggNjAuMS01NC45IDYwLjEtOCAwLTUzLjctNTAtNTMuNC02MC4xbC4zLTQuNiA1Mi4zLTExLjVjMTMtMi42IDEyLjMtMjIuNy0yLjktMjIuNy0zLjcgMC00My4xIDkuMi00OS40IDEwLjYtMi01LjItNy41LTE0LjEtMTMuOC0xNC4xLTMuMiAwLTYuMyAzLjItOS41IDQtOS4yIDIuNi0zMSAyLjktMjEuNSAyMC4xTDE1LjkgMjk4LjVjLTUuNSAxLjEtOC45IDYuMy04LjkgMTEuOCAwIDYgNS41IDEwLjkgMTEuNSAxMC45IDggMCAxMzEuMy0yOC40IDE0Ny40LTMyLjIgMi42IDMuMiA0LjYgNi4zIDcuOCA4LjYgMjAuMSAxNC40IDU5LjggODUuOSA3Ni40IDg1LjkgMjQuMSAwIDU4LTIyLjQgNzEuMy00MS45IDMuMi00LjMgNi45LTcuNSAxMi40LTYuOSAuNiAxMy44LTMxLjYgMzQuMi0zMyA0My43LTEuNCAxMC4yLTEgMzUuMi0uMyA0MS4xIDI2LjcgOC4xIDUyLTMuNiA3Ny45LTIuOSA0LjMtMjEgMTAuNi00MS45IDkuOC02My41bC0uMy05LjVjLTEuNC0zNC4yLTEwLjktMzguNS0zNC44LTU4LjYtMS4xLTEuMS0yLjYtMi42LTMuNy00IDIuMi0xLjQgMS4xLTEgNC42LTEuNyA4OC41IDAgNTYuMyAxODMuNiAxMTEuNSAyMjkuOSAzMy4xLTE1IDcyLjUtMjcuOSAxMDMuNS00Ny4yLTI5LTI1LjYtNTIuNi00NS43LTcyLjctNzkuOXpNMzAwLjEgNDI4LjJsMCAyNy4yIDExLjgtMy40LTIuOS0yMy44LTguOSAwek0yMzEuNCAyNzcuOGwyNC4xIDYxLjIgMjEtMTMuOC0zMS4zLTUwLjktMTMuOCAzLjV6bTg0LjQgMTU0LjlsMiAxMi40YzktMS41IDU4LjQtNi42IDU4LjQtMTQuMSAwLTEuNC0uNi0zLjItLjktNC42LTI2LjggMC0zNi45IDMuOC01OS41IDYuM3oiXX0sUmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImxldHRlcmJveGQiLGljb246WzY0MCw1MTIsW10sImU2MmQiLCJNNTIxLjMgMTI4QzU4Ni45IDEyOCA2NDAgMTgxLjEgNjQwIDI0Ni42UzU4Ni45IDM2NS4yIDUyMS4zIDM2NS4yYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwek0zMjAgMTI4YzQyLjUgMCA3OS43IDIyLjMgMTAwLjcgNTUuOC0xMS40IDE4LjItMTggMzkuNy0xOCA2Mi44czYuNiA0NC42IDE4IDYyLjhsLS44IDEuMmMtMjAuOCAzMi4zLTU2LjggNTMuOS05Ny45IDU0LjZsLTIgMGMtNDIuNSAwLTc5LjctMjIuMy0xMDAuNy01NS44IDExLjQtMTguMiAxOC0zOS43IDE4LTYyLjhzLTYuNi00NC42LTE4LTYyLjhsLjgtMS4yYzIwLjgtMzIuMyA1Ni44LTUzLjkgOTcuOS01NC42bDIgMHptLTIwMS4zIDBjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwQzUzLjEgMzY1LjEgMCAzMTIuMSAwIDI0Ni42UzUzLjEgMTI4IDExOC43IDEyOHoiXX0sQmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Im9wZXJhIixpY29uOls1MTIsNTEyLFtdLCJmMjZhIiwiTTMyMS45IDMyLjdjLTE3MC4yIDAtMjUyLjYgMjIzLjgtMTQ3LjUgMzU1LjEgMzYuNSA0NS40IDg4LjYgNzUuNiAxNDcuNSA3NS42IDM2LjMgMCA3MC4zLTExLjEgOTkuNC0zMC40LTQzLjggMzkuMi0xMDEuOSA2My0xNjUuMyA2My0zLjkgMC04IDAtMTEuOS0uMy0xMzEuNS02LjEtMjM2LjEtMTE0LjYtMjM2LjEtMjQ3LjcgMC0xMzcgMTExLTI0OCAyNDgtMjQ4bC44IDBjNjMuMSAuMyAxMjAuNyAyNC4xIDE2NC40IDYzLjEtMjktMTkuNC02My4xLTMwLjQtOTkuMy0zMC40ek00MjMuNyA0MzAuNGMtNDAuOSAyNC43LTkwLjcgMjMuNi0xMzItNS44IDU2LjItMjAuNSA5Ny43LTkxLjYgOTcuNy0xNzYuNiAwLTg0LjctNDEuMi0xNTUuOC05Ny40LTE3Ni42IDQxLjgtMjkuMiA5MS4yLTMwLjMgMTMyLjktNSAxMDUuOSA5OC43IDEwNS41IDI2NS43LTEuMiAzNjR6Il19LEhiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJ3ZWlibyIsaWNvbjpbNTEyLDUxMixbXSwiZjE4YSIsIk00MDcgMTc3LjZjNy42LTI0LTEzLjQtNDYuOC0zNy40LTQxLjctMjIgNC44LTI4LjgtMjguMS03LjEtMzIuOCA1MC4xLTEwLjkgOTIuMyAzNy4xIDc2LjUgODQuOC02LjggMjEuMi0zOC44IDEwLjgtMzItMTAuM3pNMjE0LjggNDQ2LjdjLTEwNi4zIDAtMjE0LjgtNTEuNC0yMTQuOC0xMzYuMyAwLTQ0LjMgMjgtOTUuNCA3Ni4zLTE0My43IDk5LjctOTkuNyAyMDMuMi0xMDAuOSAxNzMuNi01LjctNCAxMy4xIDEyLjMgNS43IDEyLjMgNiA3OS41LTMzLjYgMTQwLjUtMTYuOCAxMTQgNTEuNC0zLjcgOS40IDEuMSAxMC45IDguMyAxMy4xIDEzNS43IDQyLjMgMzQuOCAyMTUuMi0xNjkuNyAyMTUuMnpNMzU4LjUgMzAwLjRjLTUuNC01NS43LTc4LjUtOTQtMTYzLjQtODUuNy04NC44IDguNi0xNDguOCA2MC4zLTE0My40IDExNnM3OC41IDk0IDE2My40IDg1LjdjODQuOC04LjYgMTQ4LjgtNjAuMyAxNDMuNC0xMTZ6TTM0Ny45IDM1LjFjLTI1LjkgNS42LTE2LjggNDMuNyA4LjMgMzguMyA3Mi4zLTE1LjIgMTM0LjggNTIuOCAxMTEuNyAxMjQtNy40IDI0LjIgMjkuMSAzNyAzNy40IDEyIDMxLjktOTkuOC01NS4xLTE5NS45LTE1Ny40LTE3NC4zem0tNzguNSAzMTFjLTE3LjEgMzguOC02Ni44IDYwLTEwOS4xIDQ2LjMtNDAuOC0xMy4xLTU4LTUzLjQtNDAuMy04OS43IDE3LjctMzUuNCA2My4xLTU1LjQgMTAzLjQtNDUuMSA0MiAxMC44IDYzLjEgNTAuMiA0NiA4OC41em0tODYuMy0zMGMtMTIuOS01LjQtMzAgLjMtMzggMTIuOS04LjMgMTIuOS00LjMgMjggOC42IDM0IDEzLjEgNiAzMC44IC4zIDM5LjEtMTIuOSA4LTEzLjEgMy43LTI4LjMtOS43LTM0em0zMi42LTEzLjRjLTUuMS0xLjctMTEuNCAuNi0xNC4zIDUuNC0yLjkgNS4xLTEuNCAxMC42IDMuNyAxMi45IDUuMSAyIDExLjctLjMgMTQuNi01LjQgMi44LTUuMiAxLjEtMTAuOS00LTEyLjl6Il19LHFiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJyZWFkbWUiLGljb246WzU3Niw1MTIsW10sImY0ZDUiLCJNNTI4LjMgNDYuNWwtMTM5LjggMGMtNDguMSAwLTg5LjkgMzMuMy0xMDAuNCA4MC4zLTEwLjYtNDctNTIuMy04MC4zLTEwMC40LTgwLjNMNDggNDYuNUMyMS41IDQ2LjUgMCA2OCAwIDk0LjVMMCAzNDAuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGw4OS43IDBjMTAyLjIgMCAxMzIuNyAyNC40IDE0Ny4zIDc1IC43IDIuOCA1LjIgMi44IDYgMCAxNC43LTUwLjYgNDUuMi03NSAxNDcuMy03NWw4OS43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNDUuN2MwLTI2LjQtMjEuMy00Ny45LTQ3LjctNDguMXpNMjQyIDMxMS45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHpNNTAxLjMgMzExLjhjMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjhjMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOC0uMSAweiJdfSxWYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29sYW5nIixpY29uOls2NDAsNTEyLFtdLCJlNDBmIiwiTTQwMC4xIDE5NC44Yy0xMC45IDIuOC0xOS45IDQuMy0yOS4xIDcuNi03LjMgMS45LTE0LjcgMy45LTIzLjIgNi4xbC0uNiAuMWMtNC4yIDEuMi00LjYgMS4zLTguNS0zLjItNC43LTUuMy04LjEtOC43LTE0LjYtMTEuOS0xOS43LTkuNi0zOC43LTYuOC01Ni40IDQuNy0yMS4yIDEzLjctMzIuMSAzNC0zMS44IDU5LjIgLjMgMjUgMTcuNCA0NS41IDQxLjIgNDguOSAyMiAyLjggMzkuOC00LjYgNTMuOC0yMC41IDIuMS0yLjYgNC01LjMgNi4xLTguMyAuOC0xIDEuNS0yLjEgMi4zLTMuM2wtNjAuMSAwYy02LjUgMC04LjEtNC01LjktOS4zIDQtOS43IDExLjUtMjUuOSAxNS45LTM0IC45LTEuOCAzLjEtNS44IDYuOS01LjhsMTAxLjEgMGM0LjUtMTMuNCAxMS44LTI2LjkgMjEuNi0zOS43IDIyLjctMjkuOSA0OS4zLTQ1LjUgODcuMi01MiAzMS44LTUuNiA2MS43LTIuNSA4OC45IDE1LjkgMjQuNiAxNi44IDM5LjggMzkuNiA0My45IDY5LjUgNS4zIDQyLjEtNi45IDc2LjMtMzYuNyAxMDUuNi0xOS43IDIwLjktNDQuOSAzNC03My45IDM5LjktNS42IDEtMTEuMSAxLjUtMTYuNSAyLTIuOSAuMi01LjcgLjUtOC41IC44LTI4LjMtLjYtNTQuMi04LjctNzYtMjcuNC0xNS4zLTEzLjMtMjUuOS0yOS42LTMxLjEtNDguNS0zLjcgNy4zLTggMTQuNC0xNCAyMS4xLTIxLjYgMjkuNi01MC45IDQ4LTg3LjkgNTIuOS0zMC42IDQuMS01OC45LTEuOC04My45LTIwLjUtMjMtMTcuNS0zNi4xLTQwLjUtMzkuNS02OS4yLTQuMS0zNCA1LjktNjUuNCAyNi40LTkxLjMgMjIuMi0yOSA1MS41LTQ3LjQgODcuMy01My45IDI5LjMtNi4yIDU3LjMtMS45IDgyLjYgMTUuMyAxNi41IDEwLjkgMjguMyAyNS44IDM2LjEgNDMuOSAxLjkgMi44IC42IDQuNC0zLjEgNS4zek00OC4zIDIwMC40Yy0xLjMgMC0xLjYtLjYtLjktMS42bDYuNi04LjRjLjYtLjkgMi4yLTEuNSAzLjQtMS41bDExMS4zIDBjMS4yIDAgMS41IC45IC45IDEuOGwtNS4zIDguMWMtLjYgMS0yLjIgMS45LTMuMSAxLjlsLTExMi44LS4zek0xLjIgMjI5LjFjLTEuMiAwLTEuNi0uNy0uOS0xLjZsNi41LTguNGMuNi0uOSAyLjItMS42IDMuNC0xLjZsMTQyLjEgMGMxLjIgMCAxLjggMSAxLjUgMS45bC0yLjUgNy41Yy0uMyAxLjItMS41IDEuOS0yLjggMS45TDEuMiAyMjkuMXptNzQuNSAyNi44Yy0uNiAuOS0uMyAxLjggLjkgMS44bDY4IC4zYy45IDAgMi4yLS45IDIuMi0yLjFsLjYtNy41YzAtMS4zLS42LTIuMi0xLjktMi4ybC02Mi4zIDBjLTEuMiAwLTIuNSAuOS0zLjEgMS45bC00LjQgNy44em01MDEuNS0xOGMtLjItMi42LS4zLTQuOC0uNy03LTUuNi0zMC44LTM0LTQ4LjMtNjMuNi00MS40LTI5IDYuNS00Ny43IDI0LjktNTQuNSA1NC4yLTUuNiAyNC4zIDYuMiA0OC45IDI4LjYgNTguOSAxNy4yIDcuNSAzNC4zIDYuNiA1MC44LTEuOSAyNC42LTEzLjYgMzgtMzIuNyAzOS42LTU5LjUtLjEtMS4yLS4xLTIuMy0uMi0zLjN6Il19LGpiZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdGFjay1leGNoYW5nZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjE4ZCIsIk0xOC4xIDMzMi4zbDQxMi43IDAgMCAyMmMwIDM3LjctMjkuMyA2OC02NS4zIDY4bC0xOSAwLTg2LjggODkuNyAwLTg5LjctMTc2LjMgMGMtMzYgMC02NS4zLTMwLjMtNjUuMy02OGwwLTIyem0wLTIzLjZsNDEyLjcgMCAwLTg1LTQxMi43IDAgMCA4NXptMC0xMDkuNGw0MTIuNyAwIDAtODUtNDEyLjcgMCAwIDg1ek0zNjUuNCAwTDgzLjQgMGMtMzYgMC02NS4zIDMwLjMtNjUuMyA2Ny43bDAgMjIuMyA0MTIuNyAwIDAtMjIuM0M0MzAuNyAzMC4zIDQwMS40IDAgMzY1LjQgMHoiXX0sVWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imd1bHAiLGljb246WzI1Niw1MTIsW10sImYzYWUiLCJNMjEwIDM5MS4xbC0xNC4xIDI0LjYtNC42IDgwLjJjMCA4LjktMjguMyAxNi4xLTYzLjEgMTYuMXMtNjMuMS03LjItNjMuMS0xNi4xbC01LjgtNzkuNC0xNC45LTI1LjRjNDEuMiAxNy4zIDEyNiAxNi43IDE2NS42IDB6TTE0IDEzNy44TDI3LjYgMjYzLjNjNS45LTIwIDIwLjgtNDcgNDAtNTUuMiA2LjMtMi43IDEyLjctMi43IDE4LjcgLjkgNS4yIDMgOS42IDkuMyAxMC4xIDExLjggMS4yIDYuNS0yIDkuMS00LjUgOS4xLTMgMC01LjMtNC42LTYuOC03LjMtNC4xLTcuMy0xMC4zLTcuNi0xNi45LTIuOC02LjkgNS0xMi45IDEzLjQtMTcuMSAyMC43LTUuMSA4LjgtOS40IDE4LjUtMTIgMjguMi0xLjUgNS42LTIuOSAxNC42LS42IDE5LjkgMSAyLjIgMi41IDMuNiA0LjkgMy42IDUgMCAxMi4zLTYuNiAxNS44LTEwLjEgNC41LTQuNSAxMC4zLTExLjUgMTIuNS0xNmw1LjItMTUuNWMyLjYtNi44IDkuOS01LjYgOS45IDAgMCAxMC4yLTMuNyAxMy42LTEwIDM0LjctNS44IDE5LjUtNy42IDI1LjgtNy42IDI1LjgtLjcgMi44LTMuNCA3LjUtNi4zIDcuNS0xLjIgMC0yLjEtLjQtMi42LTEuMi0xLTEuNC0uOS01LjMtLjgtNi4zIC4yLTMuMiA2LjMtMjIuMiA3LjMtMjUuMi0yIDIuMi00LjEgNC40LTYuNCA2LjYtNS40IDUuMS0xNC4xIDExLjgtMjEuNSAxMS44LTMuNCAwLTUuNi0uOS03LjctMi40bDcuNiA3OS42YzIgNSAzOS4yIDE3LjEgODguMiAxNy4xIDQ5LjEgMCA4Ni4zLTEyLjIgODguMi0xNy4xbDEwLjktOTQuNmMtNS43IDUuMi0xMi4zIDExLjYtMTkuNiAxNC44LTUuNCAyLjMtMTcuNCAzLjgtMTcuNC01LjcgMC01LjIgOS4xLTE0LjggMTQuNC0yMS41IDEuNC0xLjcgNC43LTUuOSA0LjctOC4xIDAtMi45LTYtMi4yLTExLjcgMi41LTMuMiAyLjctNi4yIDYuMy04LjcgOS43LTQuMyA2LTYuNiAxMS4yLTguNSAxNS41LTYuMiAxNC4yLTQuMSA4LjYtOS4xIDIyLTUgMTMuMy00LjIgMTEuOC01LjIgMTQtLjkgMS45LTIuMiAzLjUtNCA0LjUtMS45IDEtNC41IC45LTYuMS0uMy0uOS0uNi0xLjMtMS45LTEuMy0zLjcgMC0uOSAuMS0xLjggLjMtMi43IDEuNS02LjEgNy44LTE4LjEgMTUtMzQuMyAxLjYtMy43IDEtMi42IC44LTIuMy02LjIgNi0xMC45IDguOS0xNC40IDEwLjUtNS44IDIuNi0xMyAyLjYtMTQuNS00LjEtLjEtLjQtLjEtLjgtLjItMS4yLTExLjggOS4yLTI0LjMgMTEuNy0yMC04LjEtNC42IDguMi0xMi42IDE0LjktMjIuNCAxNC45LTQuMSAwLTcuMS0xLjQtOC42LTUuMS0yLjMtNS41IDEuMy0xNC45IDQuNi0yMy44IDEuNy00LjUgNC05LjkgNy4xLTE2LjIgMS42LTMuNCA0LjItNS40IDcuNi00LjUgLjYgLjIgMS4xIC40IDEuNiAuNyAyLjYgMS44IDEuNiA0LjUgLjMgNy4yLTMuOCA3LjUtNy4xIDEzLTkuMyAyMC44LS45IDMuMy0yIDkgMS41IDkgMi40IDAgNC43LS44IDYuOS0yLjQgNC42LTMuNCA4LjMtOC41IDExLjEtMTMuNSAyLTMuNiA0LjQtOC4zIDUuNi0xMi4zIC41LTEuNyAxLjEtMy4zIDEuOC00LjggMS4xLTIuNSAyLjYtNS4xIDUuMi01LjEgMS4zIDAgMi40IC41IDMuMiAxLjUgMS43IDIuMiAxLjMgNC41IC40IDYuOS0yIDUuNi00LjcgMTAuNi02LjkgMTYuNy0xLjMgMy41LTIuNyA4LTIuNyAxMS43IDAgMy40IDMuNyAyLjYgNi44IDEuMiAyLjQtMS4xIDQuOC0yLjggNi44LTQuNSAxLjItNC45IC45LTMuOCAyNi40LTY4LjIgMS4zLTMuMyAzLjctNC43IDYuMS00LjcgMS4yIDAgMi4yIC40IDMuMiAxLjEgMS43IDEuMyAxLjcgNC4xIDEgNi4yLS43IDEuOS0uNiAxLjMtNC41IDEwLjUtNS4yIDEyLjEtOC42IDIwLjgtMTMuMiAzMS45LTEuOSA0LjYtNy43IDE4LjktOC43IDIyLjMtLjYgMi4yLTEuMyA1LjggMSA1LjggNS40IDAgMTkuMy0xMy4xIDIzLjEtMTcgLjItLjMgLjUtLjQgLjktLjYgLjYtMS45IDEuMi0zLjcgMS43LTUuNSAxLjQtMy44IDIuNy04LjIgNS4zLTExLjMgLjgtMSAxLjctMS42IDIuNy0xLjYgMi44IDAgNC4yIDEuMiA0LjIgNCAwIDEuMS0uNyA1LjEtMS4xIDYuMiAxLjQtMS41IDIuOS0zIDQuNS00LjUgMTUtMTMuOSAyNS43LTYuOCAyNS43IC4yIDAgNy40LTguOSAxNy43LTEzLjggMjMuNC0xLjYgMS45LTQuOSA1LjQtNSA2LjQgMCAxLjMgLjkgMS44IDIuMiAxLjggMiAwIDYuNC0zLjUgOC00LjcgNS0zLjkgMTEuOC05LjkgMTYuNi0xNC4xbDE0LjgtMTM2LjhjLTMwLjUgMTcuMS0xOTcuNiAxNy4yLTIyOC4zIC4yem0yMjkuNy04LjVjMCAyMS0yMzEuMiAyMS0yMzEuMiAwIDAtOC44IDUxLjgtMTUuOSAxMTUuNi0xNS45IDkgMCAxNy44IC4xIDI2LjMgLjRMMTY3IDY1LjEgMjI4LjMgLjZjMS40LTEuNCA1LjgtLjIgOS45IDMuNXM2LjYgNy45IDUuMyA5LjNsLS4xIC4xLTU3LjMgNjAuNS0xMCA0MC43YzM5LjkgMi42IDY3LjYgOC4xIDY3LjYgMTQuNnptLTY5LjQgNC42YzAtLjgtLjktMS41LTIuNS0yLjFsLS4yIC44YzAgMS4zLTUgMi40LTExLjEgMi40cy0xMS4xLTEuMS0xMS4xLTIuNGMwLS4xIDAtLjIgLjEtLjNsLjItLjdjLTEuOCAuNi0zIDEuNC0zIDIuMyAwIDIuMSA2LjIgMy43IDEzLjcgMy43IDcuNyAuMSAxMy45LTEuNiAxMy45LTMuN3oiXX0sV2JlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InllbHAiLGljb246WzM4NCw1MTIsW10sImYxZTkiLCJNNDIuOSAyNDAuM2w5OS42IDQ4LjZjMTkuMiA5LjQgMTYuMiAzNy41LTQuNSA0Mi43TDMwLjUgMzU4LjVjLTMuMiAuOC02LjQgLjktOS42IC4zcy02LjItMS44LTguOS0zLjctNC45LTQuMy02LjYtNy4xLTIuNy01LjktMy4xLTkuMmMtMy4zLTI4LjgtLjItNTcuOSA5LTg1LjMgMS0zLjEgMi43LTUuOSA0LjktOC4zczQuOS00LjIgNy45LTUuNSA2LjItMS44IDkuNS0xLjggNi40IC45IDkuMyAyLjN6bTQ0IDIzOS4zYzIzLjggMTYuMyA1MC45IDI3LjMgNzkuNCAzMi4xIDMuMiAuNiA2LjUgLjQgOS42LS40czYuMS0yLjMgOC42LTQuNCA0LjYtNC42IDYtNy41IDIuMy02LjEgMi40LTkuNGwzLjktMTEwLjhjLjctMjEuMy0yNS41LTMxLjktMzkuOC0xNi4xTDgyLjggNDQ1LjVjLTIuMiAyLjQtMy44IDUuMy00LjggOC40cy0xLjMgNi40LS45IDkuNiAxLjUgNi4zIDMuMSA5LjEgMy45IDUuMiA2LjYgN2wwIDB6TTIzMi4yIDM2OS43bDU4LjggOTRjMS43IDIuOCA0IDUuMSA2LjggNi45czUuOCAzIDkgMy41IDYuNSAuMyA5LjctLjUgNi4xLTIuNCA4LjYtNC40YzIyLjMtMTguNCA0MC4zLTQxLjUgNTIuNy02Ny42IDEuNC0yLjkgMi4xLTYuMSAyLjItOS40cy0uNi02LjUtMS45LTkuNC0zLjItNS43LTUuNi03LjgtNS4yLTMuOS04LjMtNC45TDI1OC43IDMzNS43Yy0yMC4zLTYuNS0zNy44IDE1LjgtMjYuNSAzMy45ek0zODAuNiAyMzcuNGMtMTEuNS0yNi41LTI4LjctNTAuMi01MC40LTY5LjMtMi40LTIuMS01LjMtMy43LTguNC00LjdzLTYuNC0xLjItOS42LS44LTYuMyAxLjUtOS4xIDMuMi01LjEgNC02LjkgNi43bC02MiA5MS45Yy0xMS45IDE3LjcgNC43IDQwLjYgMjUuMiAzNC43TDM2NiAyNjguNmMzLjEtLjkgNi0yLjUgOC41LTQuNnM0LjUtNC43IDUuOC03LjcgMi4xLTYuMiAyLjItOS40LS42LTYuNS0xLjktOS41bDAgMHpNNjIuMSAzMC4yYy0yLjggMS40LTUuNCAzLjMtNy40IDUuN3MtMy42IDUuMi00LjUgOC4yLTEuMiA2LjItLjkgOS4zIDEuMyA2LjEgMi45IDguOUwxNTYuMyAyNDIuNmMxMS43IDIwLjIgNDIuNiAxMS45IDQyLjYtMTEuNGwwLTIwOC4zYzAtMy4xLS42LTYuMy0xLjgtOS4ycy0zLjEtNS41LTUuNC03LjYtNS0zLjgtOC00LjgtNi4xLTEuNC05LjMtMS4yYy0zOSAzLjEtNzcgMTMuMy0xMTIuMyAzMC4xeiJdfSxHYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZ29mb3JlIixpY29uOls0NDgsNTEyLFtdLCJmM2E3IiwiTTM0OCAzMTkuOGwtMTMuMiAwIDAgMzQuN2MtMjQuNSAyMy4xLTU2LjMgMzUuOC04OS45IDM1LjgtNzMuMiAwLTEzMi40LTYwLjItMTMyLjQtMTM0LjQgMC03NC4xIDU5LjItMTM0LjQgMTMyLjQtMTM0LjQgMzUuMyAwIDY4LjYgMTQgOTMuNiAzOS40bDYyLjMtNjMuM2MtNDEuOC00Mi4zLTk3LjEtNjUuNi0xNTYuMS02NS42LTEyMi43IDAtMjIwLjcgMTAwLjYtMjIwLjcgMjI0IDAgMTIyLjUgOTcgMjI0IDIyMC43IDIyNCA2My4yIDAgMTI0LjUtMjYuMiAxNzEtODIuNS0yLTI3LjYtMTMuNC03Ny43LTY3LjctNzcuN3pNMzM1LjkgMjA3LjNsLTEwNi4zIDAgMCA4OSAxMTguNCAwYzMzLjUgMCA2MC41IDE1LjEgNzYgNDEuOGwwLTMwLjZjMC02NS4yLTQwLjQtMTAwLjItODguMS0xMDAuMnoiXX0sWWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImF2aWF0byIsaWNvbjpbNjQwLDUxMixbXSwiZjQyMSIsIk0xMDcuMiAyODMuNWwtMTktNDEuOC01Mi4xIDAtMTkgNDEuOC0xNy4xIDAgNjIuMi0xMzEuNCA2Mi4yIDEzMS40LTE3LjIgMHptLTQ1LTk4LjFsLTE5LjYgNDIuNSAzOS4yIDAtMTkuNi00Mi41ek0xNzQuOSAyODcuOGwtNjIuMi0xMzEuNCAxNy4xIDAgNDUuMSA5NiA0NS4xLTk2IDE3IDAtNjIuMSAxMzEuNHptODAuNi00LjNsMC0xMjcuMSAxNS41IDAgMCAxMjcuMS0xNS41IDB6TTQ2NC42IDE2Ny45bDAgMTE1LjYtMTcuMyAwIDAtMTE1LjYtNDEuMiAwIDAtMTEuNSA5OS42IDAgMCAxMS41LTQxLjEgMHpNNjQwIDIxOC44YzAgOS4yLTEuNyAxNy44LTUuMSAyNS44cy04LjIgMTUuMS0xNC4yIDIxLjEtMTMuMSAxMC44LTIxLjEgMTQuMi0xNi42IDUuMS0yNS44IDUuMS0xNy44LTEuNy0yNS44LTUuMS0xNS4xLTguMi0yMS4xLTE0LjItMTAuOC0xMy0xNC4yLTIxLjFjLTMuNC04LTUuMS0xNi42LTUuMS0yNS44czEuNy0xNy44IDUuMS0yNS44IDguMi0xNS4xIDE0LjItMjEuMSAxMy04LjQgMjEuMS0xMS45YzgtMy40IDE2LjYtNS4xIDI1LjgtNS4xczE3LjggMS43IDI1LjggNS4xIDE1LjEgNS44IDIxLjEgMTEuOWM2IDYgMTAuNyAxMy4xIDE0LjIgMjEuMSAzLjQgOCA1LjEgMTYuNiA1LjEgMjUuOHptLTE1LjUgMGMwLTcuMy0xLjMtMTQtMy45LTIwLjNzLTYuMi0xMS43LTEwLjgtMTYuMy0xMC04LjItMTYuMi0xMC45LTEyLjgtNC0xOS44LTQtMTMuNiAxLjMtMTkuOCA0LTExLjYgNi4zLTE2LjIgMTAuOS04LjIgMTAtMTAuOCAxNi4zLTMuOSAxMy4xLTMuOSAyMC4zYzAgNy4zIDEuMyAxNCAzLjkgMjAuM3M2LjIgMTEuNyAxMC44IDE2LjMgMTAgOC4yIDE2LjIgMTAuOSAxMi44IDQgMTkuOCA0IDEzLjYtMS4zIDE5LjgtNCAxMS42LTYuMyAxNi4yLTEwLjkgOC4yLTEwIDEwLjgtMTYuMyAzLjktMTMuMSAzLjktMjAuM3ptLTk0LjggOTYuN2wwLTYuMyA4OC45LTEwLTI0Mi45IDEzLjRjLjYtMi4yIDEuMS00LjYgMS40LTcuMiAuMy0yIC41LTQuMiAuNi02LjVsNjQuOC04LjEtNjQuOSAxLjljMC0uNC0uMS0uNy0uMS0xLjEtMi44LTE3LjItMjUuNS0yMy43LTI1LjUtMjMuN2wtMS4xLTI2LjMgMjMuOCAwIDE5IDQxLjggMTcuMSAwLTYyLjItMTMxLjQtNjIuMiAxMzEuNCAxNy4xIDAgMTktNDEuOCAyMy42IDAtMS4xIDI2LjRzLTIyLjcgNi41LTI1LjUgMjMuN2MtLjEgLjMtLjEgLjctLjEgMS4xbC02NC45LTEuOSA2NC44IDguMWMuMSAyLjMgLjMgNC40IC42IDYuNSAuMyAyLjYgLjggNSAxLjQgNy4ybC0yNDIuOS0xMy41IDg4LjkgMTAgMCA2LjNjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjMC02LjItNC42LTExLjMtMTAuNS0xMi4ybDAtNS44IDgwLjMgOSAwIDUuNGMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTQuOSAyOC40IDMuMiAwIDIzLjctNS45IDAgMCAxMy45IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy4yIDM4LjMgNC4zYzguMSAxMS40IDE5IDEzLjYgMTkgMTMuNmwtLjEgNi43LTUuMSAuMi0uMSAxMi4xIDQuMSAwIC4xLTUgNS4yIDAgLjEgNSA0LjEgMC0uMS0xMi4xLTUuMS0uMi0uMS02LjdzMTAuOS0yLjEgMTktMTMuNmwzOC4zLTQuMyAwIDIzLjItNS45IDAgMCAxMy44IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy43IDI4LjQtMy4yIDAgNC45Yy01LjcgMS4xLTkuOSA2LjItOS45IDEyLjEgMCA2LjggNS42IDEwLjIgMTIuNCAxMC4yczEyLjQtMy40IDEyLjQtMTAuMmMwLTYtNC4zLTExLTkuOS0xMi4xbDAtNS40IDgwLjMtOSAwIDUuOGMtNS45IC45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40czEyLjQtNS42IDEyLjQtMTIuNGMtLjItNi4zLTQuNy0xMS40LTEwLjctMTIuM3pNMzI4LjkgMjI3LjlsMTkuNi00Mi41IDE5LjYgNDIuNS0xNy45IDAtMS43LTQwLjMtMS43IDQwLjMtMTcuOSAweiJdfSxaYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToicGFkbGV0IixpY29uOls2NDAsNTEyLFtdLCJlNGEwIiwiTTI5Ny45IDBsLjEgMGM3LjYgLjEgMTQuNCA0LjcgMTcuNSAxMS44bDEzMiAzMDguNSAuMy0uMSAuMiAuNC0yLjggMTAtNDIuOSAxNThjLTMuNyAxNi4yLTE5LjcgMjYuMy0zNS44IDIyLjZsLTY4LjQtMTUuNi02OC41IDE1LjZjLTE2LjEgMy43LTMyLjEtNi40LTM1LjgtMjIuNmwtNDIuOS0xNTgtMi43LTEwIC4xLS40IDEzMi4xLTMwOC40YzMtNyA5LjktMTEuNiAxNy41LTExLjh6TTE2MC4xIDMyMi4xbDEzMSAzOS4xIDYuOSAxMjIuNSA3LjktMTIxLjUgMTMwLjYtMzkuMyAuMi0uMS0xMzEgMjUuMS04LjYtMzIwLjItNS4yIDMyMC4yLTEzMS44LTI1Ljh6TTQyNiAyMjIuNmw5NC40LTQxIDczLjggMC0xNTcgMjQ3LjYgMzEuNi0xMDktNDIuOC05Ny42em0xNzEuNS00MS4ybDQxLjQgNzYuMmM0IDcuNS0zLjkgMTUuOS0xMS42IDEyLjJsLTQ3LjYtMjIuNyAxNy44LTY1Ljd6TTEyNy4zIDMxOC41TDE1OC43IDQzMCAxLjYgMTU0LjVjLTUuOS0xMC40IDUuNS0yMiAxNS45LTE2LjJsMTUxLjggODQuMi00Mi4xIDk2eiJdfSxYYmU9e3ByZWZpeDoiZmFiIixpY29uTmFtZToiZWRnZS1sZWdhY3kiLGljb246WzQ0OCw1MTIsW10sImUwNzgiLCJNLTYgMjI4LjJsLjQtLjVjMCAuMiAwIC4zLS4xIC41bC0uMyAwem00NjAuNiAxNS41YzAtNDQtNy44LTg0LjUtMjguOC0xMjIuNC00MS03My40LTExMy42LTExMy4zLTE5OC42LTExMy4zLTEzOS45LS4zLTIxOC4zIDEwNS4yLTIzMi44IDIxOS43IDQyLjQtNjEuMyAxMTcuMS0xMjEuNCAyMjAuNC0xMjUgMCAwIDEwOS43IDAgOTkuNCAxMDVsLTE3NS44IDBjNi40LTM3LjQgMTguNS01OSAzNC4zLTc4LjktNzUgMzQuOS0xMjEuOCA5Ni4xLTEyMC44IDE4OC4zIC44IDcxLjUgNTAuMSAxNDQuOCAxMjAuOCAxNzIgODMuNCAzMS44IDE5Mi44IDcuMiAyNDAuMS0yMS4zbDAtMTA0LjRjLTgwLjkgNTYuNS0yNzAuOSA2MC45LTI3Mi4zLTY3LjZsMzE0LjEgMCAwLTUyLjF6Il19LHFFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1sYXN0Zm0iLGljb246WzQ0OCw1MTIsWyJsYXN0Zm0tc3F1YXJlIl0sImYyMDMiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTIxMC43IDI4MC44Yy0xLjgtNS41LTMuNC0xMC44LTUtMTUuOS0xMi45LTQxLjktMjEtNjguNC01OC02OC40LTIyLjQgMC00NS4xIDE2LjEtNDUuMSA2MS4yIDAgMzUuMiAxOCA1Ny4yIDQzLjMgNTcuMiAyOC42IDAgNDcuNi0yMS4zIDQ3LjYtMjEuM2wxMS43IDMxLjlzLTE5LjggMTkuNC02MS4yIDE5LjRjLTUxLjMgMC03OS45LTMwLjEtNzkuOS04NS44IDAtNTcuOSAyOC42LTkyIDgyLjUtOTIgNjcuOSAwIDc5LjMgMzUuMyA5Ni40IDg4LjQgMS40IDQuNCAyLjkgOC45IDQuNCAxMy41IDguOCAyNi44IDI0LjIgNDYuMiA2MS4yIDQ2LjIgMjQuOSAwIDM4LjEtNS41IDM4LjEtMTkuMSAwLTE3LjUtMTYuOS0yMS4yLTQwLTI2LjQtMy4yLS43LTYuNS0xLjQtOS45LTIuMi0zMC40LTcuMy00Mi41LTIzLjEtNDIuNS00OCAwLTQwIDMyLjMtNTIuNCA2NS4yLTUyLjQgMzcuNCAwIDYwLjEgMTMuNiA2MyA0Ni42bC0zNi43IDQuNGMtMS41LTE1LjgtMTEtMjIuNC0yOC42LTIyLjQtMTYuMSAwLTI2IDcuMy0yNiAxOS44IDAgMTEgNC44IDE3LjYgMjAuOSAyMS4zIDIuMiAuNSA0LjUgMSA2LjcgMS40IDMxLjEgNi41IDY1LjEgMTMuNyA2NS4xIDU2LjEgLjEgMzYuNy0zMC43IDUwLjYtNzYuMSA1MC42LTYzLjQgMC04NS40LTI4LjYtOTcuMS02NC4xeiJdfSxLYmU9cUUsUWJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6Imdvb2RyZWFkcy1nIixpY29uOlszMjAsNTEyLFtdLCJmM2E5IiwiTTEwLjggNDAzLjNsMi44IDBjMTIuNyAwIDI1LjUgMCAzOC4yIC4xIDEuNiAwIDMuMS0uNCAzLjYgMi4xIDcuMSAzNC45IDMwIDU0LjYgNjIuOSA2My45IDI2LjkgNy42IDU0LjEgNy44IDgxLjMgMS44IDMzLjgtNy40IDU2LTI4LjMgNjgtNjAuNCA4LTIxLjUgMTAuNy00My44IDExLTY2LjUgLjEtNS44IC4zLTQ3LS4yLTUyLjhsLS45LS4zYy0uOCAxLjUtMS43IDIuOS0yLjUgNC40LTIyLjEgNDMuMS02MS4zIDY3LjQtMTA1LjQgNjkuMS0xMDMgNC0xNjkuNC01Ny0xNzItMTc2LjItLjUtMjMuNyAxLjgtNDYuOSA4LjMtNjkuNyAyMC42LTcxLjEgNzQuNi0xMTguMiAxNTMuOS0xMTguOCA2MS4zLS40IDEwMS41IDM4LjcgMTE2LjIgNzAuMyAuNSAxLjEgMS4zIDIuMyAyLjQgMS45bDAtNjEuNiA0NC4zIDBjMCAyODAuMyAuMSAzMzIuMiAuMSAzMzIuMi0uMSA3OC41LTI2LjcgMTQzLjctMTAzIDE2Mi4yLTY5LjUgMTYuOS0xNTkgNC44LTE5Ni01Ny4yLTgtMTMuNS0xMS44LTI4LjMtMTMtNDQuNXpNMTU3LjEgMzYuNWMtNTIuNS0uNS0xMDguNSA0MC43LTExNSAxMzMuOC00LjEgNTkgMTQuOCAxMjIuMiA3MS41IDE0OC42IDI3LjYgMTIuOSA3NC4zIDE1IDEwOC4zLTguNyA0Ny42LTMzLjIgNjIuNy05NyA1NC44LTE1NC05LjctNzEuMS00Ny44LTEyMC0xMTkuNi0xMTkuN3oiXX0sSmJlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImNjLW1hc3RlcmNhcmQiLGljb246WzU3Niw1MTIsW10sImYxZjEiLCJNNDgyLjkgNDEwLjNjMCA2LjgtNC42IDExLjctMTEuMiAxMS43LTYuOCAwLTExLjItNS4yLTExLjItMTEuN3M0LjQtMTEuNyAxMS4yLTExLjdjNi42IDAgMTEuMiA1LjIgMTEuMiAxMS43ek0xNzIuMSAzOTguNmMtNy4xIDAtMTEuMiA1LjItMTEuMiAxMS43UzE2NSA0MjIgMTcyLjEgNDIyYzYuNSAwIDEwLjktNC45IDEwLjktMTEuNy0uMS02LjUtNC40LTExLjctMTAuOS0xMS43em0xMTcuNS0uM2MtNS40IDAtOC43IDMuNS05LjUgOC43bDE5LjEgMGMtLjktNS43LTQuNC04LjctOS42LTguN3ptMTA3LjggLjNjLTYuOCAwLTEwLjkgNS4yLTEwLjkgMTEuN3M0LjEgMTEuNyAxMC45IDExLjcgMTEuMi00LjkgMTEuMi0xMS43YzAtNi41LTQuNC0xMS43LTExLjItMTEuN3ptMTA1LjkgMjYuMWMwIC4zIC4zIC41IC4zIDEuMSAwIC4zLS4zIC41LS4zIDEuMS0uMyAuMy0uMyAuNS0uNSAuOC0uMyAuMy0uNSAuNS0xLjEgLjUtLjMgLjMtLjUgLjMtMS4xIC4zLS4zIDAtLjUgMC0xLjEtLjMtLjMgMC0uNS0uMy0uOC0uNS0uMy0uMy0uNS0uNS0uNS0uOC0uMy0uNS0uMy0uOC0uMy0xLjEgMC0uNSAwLS44IC4zLTEuMSAwLS41IC4zLS44IC41LTEuMSAuMy0uMyAuNS0uMyAuOC0uNSAuNS0uMyAuOC0uMyAxLjEtLjMgLjUgMCAuOCAwIDEuMSAuMyAuNSAuMyAuOCAuMyAxLjEgLjVzLjIgLjYgLjUgMS4xem0tMi4yIDEuNGMuNSAwIC41LS4zIC44LS4zIC4zLS4zIC4zLS41IC4zLS44czAtLjUtLjMtLjhjLS4zIDAtLjUtLjMtMS4xLS4zbC0xLjYgMCAwIDMuNSAuOCAwIDAtMS40IC4zIDAgMS4xIDEuNCAuOCAwLTEuMS0xLjN6TTU3NiA4MWwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODFjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODFDMCA1NC41IDIxLjUgMzMgNDggMzNsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTY0IDIyMC42YzAgNzYuNSA2Mi4xIDEzOC41IDEzOC41IDEzOC41IDI3LjIgMCA1My45LTguMiA3Ni41LTIzLjEtNzIuOS01OS4zLTcyLjQtMTcxLjIgMC0yMzAuNS0yMi42LTE1LTQ5LjMtMjMuMS03Ni41LTIzLjEtNzYuNC0uMS0xMzguNSA2Mi0xMzguNSAxMzguMnpNMjg4IDMyOS40YzcwLjUtNTUgNzAuMi0xNjIuMiAwLTIxNy41LTcwLjIgNTUuMy03MC41IDE2Mi42IDAgMjE3LjV6TTE0NS43IDQwNS43YzAtOC43LTUuNy0xNC40LTE0LjctMTQuNy00LjYgMC05LjUgMS40LTEyLjggNi41LTIuNC00LjEtNi41LTYuNS0xMi4yLTYuNS0zLjggMC03LjYgMS40LTEwLjYgNS40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMGMwLTE4LjktMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAuMiA4LjIgMzAuMmw3LjkgMGMwLTE4LjMtMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAgOC4yIDMwLjJsOC4yIDAgMC0yMy0uMiAwek0xOTAuNiAzOTJsLTcuOSAwIDAgNC40Yy0yLjctMy4zLTYuNS01LjQtMTEuNy01LjQtMTAuMyAwLTE4LjIgOC4yLTE4LjIgMTkuMyAwIDExLjIgNy45IDE5LjMgMTguMiAxOS4zIDUuMiAwIDktMS45IDExLjctNS40bDAgNC42IDcuOSAwIDAtMzYuOHptNDAuNSAyNS42YzAtMTUtMjIuOS04LjItMjIuOS0xNS4yIDAtNS43IDExLjktNC44IDE4LjUtMS4xbDMuMy02LjVjLTkuNC02LjEtMzAuMi02LTMwLjIgOC4yIDAgMTQuMyAyMi45IDguMyAyMi45IDE1IDAgNi4zLTEzLjUgNS44LTIwLjcgLjhsLTMuNSA2LjNjMTEuMiA3LjYgMzIuNiA2IDMyLjYtNy41em0zNS40IDkuM2wtMi4yLTYuOGMtMy44IDIuMS0xMi4yIDQuNC0xMi4yLTQuMWwwLTE2LjYgMTMuMSAwIDAtNy40LTEzLjEgMCAwLTExLjItOC4yIDAgMCAxMS4yLTcuNiAwIDAgNy4zIDcuNiAwIDAgMTYuN2MwIDE3LjYgMTcuMyAxNC40IDIyLjYgMTAuOXptMTMuMy0xMy40bDI3LjUgMGMwLTE2LjItNy40LTIyLjYtMTcuNC0yMi42LTEwLjYgMC0xOC4yIDcuOS0xOC4yIDE5LjMgMCAyMC41IDIyLjYgMjMuOSAzMy44IDE0LjJsLTMuOC02Yy03LjggNi40LTE5LjYgNS44LTIxLjktNC45ek0zMzguOSAzOTJjLTQuNi0yLTExLjYtMS44LTE1LjIgNC40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMCAwLTIwLjdjMC0xMS42IDkuNS0xMC4xIDEyLjgtOC40bDIuNC03LjZ6bTEwLjYgMTguM2MwLTExLjQgMTEuNi0xNS4xIDIwLjctOC40bDMuOC02LjVjLTExLjYtOS4xLTMyLjctNC4xLTMyLjcgMTUgMCAxOS44IDIyLjQgMjMuOCAzMi43IDE1bC0zLjgtNi41Yy05LjIgNi41LTIwLjcgMi42LTIwLjctOC42ek00MTYuMiAzOTJsLTguMiAwIDAgNC40Yy04LjMtMTEtMjkuOS00LjgtMjkuOSAxMy45IDAgMTkuMiAyMi40IDI0LjcgMjkuOSAxMy45bDAgNC42IDguMiAwIDAtMzYuOHptMzMuNyAwYy0yLjQtMS4yLTExLTIuOS0xNS4yIDQuNGwwLTQuNC03LjkgMCAwIDM2LjcgNy45IDAgMC0yMC43YzAtMTEgOS0xMC4zIDEyLjgtOC40bDIuNC03LjZ6bTQwLjMtMTQuOWwtNy45IDAgMCAxOS4zYy04LjItMTAuOS0yOS45LTUuMS0yOS45IDEzLjkgMCAxOS40IDIyLjUgMjQuNiAyOS45IDEzLjlsMCA0LjYgNy45IDAgMC01MS43em03LjYtNzUuMWwwIDQuNiAuOCAwIDAtNC42IDEuOSAwIDAtLjgtNC42IDAgMCAuOCAxLjkgMHptNi42IDEyMy44YzAtLjUgMC0xLjEtLjMtMS42LS4zLS4zLS41LS44LS44LTEuMXMtLjgtLjUtMS4xLS44Yy0uNSAwLTEuMS0uMy0xLjYtLjMtLjMgMC0uOCAuMy0xLjQgLjMtLjUgLjMtLjggLjUtMS4xIC44LS41IC4zLS44IC44LS44IDEuMS0uMyAuNS0uMyAxLjEtLjMgMS42IDAgLjMgMCAuOCAuMyAxLjQgMCAuMyAuMyAuOCAuOCAxLjEgLjMgLjMgLjUgLjUgMS4xIC44IC41IC4zIDEuMSAuMyAxLjQgLjMgLjUgMCAxLjEgMCAxLjYtLjMgLjMtLjMgLjgtLjUgMS4xLS44cy41LS44IC44LTEuMWMuMy0uNiAuMy0xLjEgLjMtMS40em0zLjItMTI0LjdsLTEuNCAwLTEuNiAzLjUtMS42LTMuNS0xLjQgMCAwIDUuNCAuOCAwIDAtNC4xIDEuNiAzLjUgMS4xIDAgMS40LTMuNSAwIDQuMSAxLjEgMCAwLTUuNHptNC40LTgwLjVjMC03Ni4yLTYyLjEtMTM4LjMtMTM4LjUtMTM4LjMtMjcuMiAwLTUzLjkgOC4yLTc2LjUgMjMuMSA3Mi4xIDU5LjMgNzMuMiAxNzEuNSAwIDIzMC41IDIyLjYgMTUgNDkuNSAyMy4xIDc2LjUgMjMuMSA3Ni40IC4xIDEzOC41LTYxLjkgMTM4LjUtMTM4LjR6Il19LGV2ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJkaXNjb3Vyc2UiLGljb246WzQ0OCw1MTIsW10sImYzOTMiLCJNMjI1LjkgMzJDMTAzLjMgMzIgMCAxMzAuNSAwIDI1Mi4xIDAgMjU2IC4xIDQ4MCAuMSA0ODBsMjI1LjgtLjJDMzQ4LjYgNDc5LjggNDQ4IDM3Ny41IDQ0OCAyNTUuOVMzNDguNiAzMiAyMjUuOSAzMnpNMjI0IDM4NGMtMTkuNCAwLTM3LjktNC4zLTU0LjQtMTIuMUw4OC41IDM5MiAxMTEuNCAzMTdjLTkuOC0xOC4xLTE1LjQtMzguOS0xNS40LTYxIDAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjgtNTcuMyAxMjgtMTI4IDEyOHoiXX0sdHZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJsYWNrLXRpZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3ZSIsIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zMTYuNSAzNTcuMmwtOTIuNSA4OC43LTkyLjUtODguNyA2NC41LTE4NC02NC41LTg2LjYgMTg0LjkgMC02NC40IDg2LjYgNjQuNSAxODR6Il19LFZFPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InNxdWFyZS1mYWNlYm9vayIsaWNvbjpbNDQ4LDUxMixbImZhY2Vib29rLXNxdWFyZSJdLCJmMDgyIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsOTguMiAwIDAtMTQ1LjgtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE0NS44IDEyOSAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdfSxhdmU9VkUsaXZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6ImJhdHRsZS1uZXQiLGljb246WzUxMiw1MTIsW10sImY4MzUiLCJNNDQ4LjggMjI1LjZjMjYuOSAuMiAzNS42LTcuNCAzOC45LTEyLjQgMTIuNS0xNi4zLTcuMS00Ny42LTUyLjgtNzEuMyAxNy44LTMzLjYgMzAuMS02My43IDM2LjMtODUuMyAzLjQtMTEuOCAxLjEtMTkgLjUtMjAuMy0xLjcgMTAuNS0xNS44IDQ4LjUtNDguMiAxMDAtMjUtMTEuMi01Ni41LTIwLjEtOTMuOC0yMy44LTguOS0xNi45LTM0LjktNjMuOS02MC41LTg4LjktMTYuOC0xNi41LTMwLjMtMjIuNi00MC44LTIzLjVsMCAwYy0xMy44LTEuNi0yMi43IDUuOC0yNy40IDExLTE3LjIgMTguNS0yNC4zIDQ4LjktMjUgODQuMS03LjItMTIuMy0xNy4yLTI0LjYtMjguNS0yNS45bC0uMiAwYy0yMC43LTMuNS0zOC40IDI5LjItMzYgODEuMy0zOC40IDEuNC03MSA1LjgtOTMgMTEuMi05LjkgMi40LTE2LjIgNy4zLTE3LjggOS43IDEtLjQgMjIuNC05LjIgMTExLjYtOS4yIDUuMiA1MyAyOS44IDEwMS44IDI2IDkzLjItOS43IDE1LjQtMzguMiA2Mi40LTQ3LjMgOTcuNy01LjkgMjIuOS00LjQgMzcuNiAuMiA0Ny4xIDUuNiAxMi44IDE2LjQgMTYuNyAyMy4yIDE4LjMgMjUgNS43IDU1LjQtMy42IDg2LjctMjEuMS03LjUgMTIuOC0xMy45IDI4LjUtOS4xIDM5LjMgNy4zIDE5LjYgNDQuNSAxOC43IDg4LjQtOS40IDIwLjIgMzIuMiA0MC4xIDU3LjkgNTUuNyA3NC4xIDIuNiAyLjggNS41IDUuMiA4LjggNy4xIDUuMSAzLjIgOC42IDMuNCA4LjYgMy40LTguMi02LjctMzQtMzgtNjIuNS05MS44IDIyLjItMTYgNDUuNy0zOC45IDY3LjUtNjkuMyAxMjIuOCA0LjYgMTQzLjMtMjQuOCAxNDgtMzEuNiAxNC43LTE5LjkgMy40LTU3LjQtNTcuMy05My43ek0zNzEgMzMxLjhjMjMuOC0zNy43IDMwLjMtNjcuOCAyOS40LTkyLjMgMjcuOSAxNy42IDQ3LjIgMzcuNiA0OS4xIDU4LjggMS4xIDEyLjktOC4xIDI5LjEtNzguNSAzMy41ek0yMTcuMSAzODcuN2M5LjgtNi4yIDE5LjUtMTMuMSAyOS4yLTIwLjUgNi43IDEzLjMgMTMuNiAyNi4xIDIwLjYgMzguMi00MC42IDIxLjktNjguOCAxMi44LTQ5LjgtMTcuN3ptMjE1LTE3MS4zYy0xMC4zLTUuMy0yMS4yLTEwLjMtMzIuNC0xNSA3LjktMTIuMSAxNS41LTI0LjQgMjIuNy0zNi45IDM5LjEgMjQuMSA0NS45IDUzLjIgOS42IDUxLjl6TTI3OS40IDM5OGMtNS41LTExLjQtMTEtMjMuNS0xNi41LTM2LjQgNDMuMiAxLjMgNjIuNC0xOC43IDYzLjMtMjAuNCAwIC4xLTI1IDE1LjYtNjIuNSAxMi4yIDMwLjYtMjUuNiA1OS4xLTUzLjcgODUuMS04NCA4LjctMTAuMiAxNy0yMC42IDI0LjktMzEuMS0uNC0uMy0xLjUtMy0xNi41LTEyLTUxLjcgNjAuMy0xMDIuMyA5OC0xMzIuOCAxMTUuOS0yMC42LTExLjItNDAuOC0zMS44LTU1LjctNjEuNS0yMC0zOS45LTMwLTgyLjQtMzEuNi0xMTYuMSAxMi4zIC45IDI1LjMgMi4yIDM4LjggMy45LTIyLjMgMzYuOC0xNC40IDYzLTEzLjUgNjQuMiAwLS4xLTEtMjkuMiAyMC4xLTU5LjYgOSA1Mi41IDI0IDEwMy44IDQ0LjcgMTUyLjggLjktLjQgMS44IC45IDE4LjctOC4yLTI2LjMtNzQuNS0zMy44LTEzOC4yLTM0LTE3My40IDIwLTEyLjQgNDguMi0xOS44IDgxLjYtMTcuOCA0NC42IDIuNyA4Ni40IDE1LjIgMTE2LjMgMzAuNy03LjEgMTAuNC0xNC45IDIxLjMtMjMuMyAzMi41LTIwLjctMzcuNy00Ny4zLTQzLjktNDguOS00My43IC4xIDAgMjUuOSAxNC4xIDQxLjUgNDcuMi0zNy41LTEzLjgtNzYuMS0yNC40LTExNS4zLTMxLjctMTMuMS0yLjQtMjYuMi00LjQtMzkuNC02LS4xIC40LTEuOCAxLjgtMi4yIDIwLjMgNzcuOSAxNC41IDEzNi42IDM5LjkgMTY3LjIgNTcuMiAuNyAyMy42LTcgNTEuNi0yNS40IDc5LjYtMjQuNiAzNy4zLTU2LjQgNjcuMi04NC44IDg1LjR6bTI3LjQtMjg3Yy00NC42LTEuNy03My42IDcuNC05NC43IDIwLjcgMi01Mi4zIDIxLjMtNzYuNCAzOC4yLTc1LjMgMTYuOS00LjIgNTQuOSA1Mi4yIDU2LjUgNTQuNnptLTEzMC43IDMuMWMuNSAxMi4xIDEuNiAyNC42IDMuMiAzNy4zLTE0LjYtLjktMjguNy0xLjMtNDIuNC0xLjMtLjEgMy4yLS4xLTUxIDI0LjctNDkuNmwuMSAwYzUuOCAxLjEgMTAuNiA2LjkgMTQuNCAxMy42em0tMjguMSAxNjJjMjAuOCAzOS43IDQzLjMgNjAuNiA2NS4zIDcyLjMtNDYuOCAyNC44LTc3LjUgMjAtODQuOSA0LjUtLjItLjItMTEuMS0xNS4zIDE5LjctNzYuOGwwIDB6Il19LHJ2ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJiaW1vYmplY3QiLGljb246WzQ0OCw1MTIsW10sImYzNzgiLCJNNDE2IDMyTDMyIDMyQzE0LjQgMzIgMCA0Ni40IDAgNjRMMCA0NDhjMCAxNy42IDE0LjQgMzIgMzIgMzJsMzg0IDBjMTcuNiAwIDMyLTE0LjQgMzItMzJsMC0zODRjMC0xNy42LTE0LjQtMzItMzItMzJ6TTM1MiAyODkuNGMwIDQ5LjQtMTEuNCA4Mi42LTEwMy44IDgyLjZsLTE2LjkgMGMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhsLS45IDAgMCAzNC44LTY0IDAgMC0yMzIgNjQgMCAwIDc0LjcgMS4xIDBjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGwxNy4zIDBjOTIuNCAwIDEwMy44IDMzLjEgMTAzLjggODIuNWwwIDM1IC4xIDB6bS02NC0yOC45bDAgMjIuOWMwIDIxLjctMy40IDMzLjgtMzguNCAzMy44bC00NS4zIDBjLTI4LjkgMC00NC4xLTYuNS00NC4xLTM1LjdsMC0xOWMwLTI5LjMgMTUuMi0zNS43IDQ0LjEtMzUuN2w0NS4zIDBjMzUtLjIgMzguNCAxMiAzOC40IDMzLjd6Il19LHN2ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzdmVsdGUiLGljb246WzQ0OCw1MTIsW10sImU4NjgiLCJNMjAyLjEgMjYuNGM2Ni44LTQyLjYgMTU5LjMtMjIuNyAyMDYuMSA0NC4zIDExLjEgMTUuNSAxOSAzMy4xIDIzLjIgNTEuOHM0LjcgMzcuOSAxLjMgNTYuN2MtMy4yIDE4LTEwLjEgMzUuMS0yMC4xIDUwLjMgMTQuNiAyNy45IDE5LjYgNjAgMTQgOTEtMy4zIDE4LjQtMTAuNCAzNi0yMC45IDUxLjVzLTI0LjEgMjguNy0zOS45IDM4LjdMMjQ4LjMgNDg1LjZjLTY2LjggNDIuNi0xNTkuMyAyMi43LTIwNi4xLTQ0LjItMTEuMS0xNS41LTE5LTMzLjItMjMuMi01MS44cy00LjctMzcuOS0xLjMtNTYuN2MzLjItMTggMTAuMS0zNS4xIDIwLjEtNTAuMy0xNC43LTI3LjktMTkuNi02MC0xNC05MS4xIDMuMy0xOC40IDEwLjQtMzYgMjAuOS01MS41czI0LjEtMjguNyAzOS45LTM4LjdMMjAyLjEgMjYuNHpNMzE1LjYgNjcuMmMtMTcuOS02LjYtMzcuNC03LjYtNTUuOS0yLjgtOC40IDIuMy0xNi41IDUuOC0yMy44IDEwLjVMMTE4LjUgMTQ5LjdjLTkuNSA2LTE3LjcgMTMuOS0yNCAyMy4zUzg0IDE5Mi44IDgyIDIwMy45Yy0yIDExLjMtMS43IDIyLjkgLjggMzQuMXM3LjMgMjEuOCAxMy45IDMxLjJjMTAuOSAxNS43IDI2LjMgMjcuNiA0NC4yIDM0LjNzMzcuNCA3LjYgNTUuOSAyLjhjOC40LTIuMyAxNi41LTUuOCAyMy44LTEwLjVsNDQuOC0yOC42YzIuMi0xLjQgNC43LTIuNSA3LjItMy4yIDUuNi0xLjQgMTEuNC0xLjIgMTYuOCAuOHMxMCA1LjYgMTMuMyAxMC4zYzIgMi44IDMuNSA2IDQuMiA5LjRzLjkgNi45IC4zIDEwLjNjLS42IDMuMy0xLjkgNi41LTMuOCA5LjMtMS45IDIuOC00LjQgNS4yLTcuMiA3TDE3OC44IDM4Ni4xYy0yLjIgMS40LTQuNyAyLjUtNy4yIDMuMi01LjYgMS40LTExLjQgMS4yLTE2LjgtLjhzLTEwLTUuNi0xMy4zLTEwLjNjLTMuNi01LjEtNS4zLTExLjItNC43LTE3LjRsLjQtNC40LTQuMy0xLjNjLTE2LjUtNS0zMi4xLTEyLjctNDUuOS0yMi45bC02LTQuNC0yLjIgNi43Yy0xLjIgMy42LTIuMSA3LjMtMi44IDExLTIgMTEuMy0xLjcgMjIuOSAuOCAzNC4xczcuMyAyMS44IDEzLjkgMzEuMWMxMC45IDE1LjcgMjYuMyAyNy42IDQ0LjIgMzQuM3MzNy40IDcuNiA1NS44IDIuOGM4LjQtMi4zIDE2LjUtNS44IDIzLjktMTAuNWwxMTcuMy03NC44YzkuNS02IDE3LjctMTMuOSAyNC0yMy4zczEwLjYtMTkuOSAxMi42LTMxYzItMTEuMyAxLjgtMjIuOS0uOC0zNC4xcy03LjMtMjEuOC0xNC0zMS4xYy0xMC45LTE1LjctMjYuMy0yNy42LTQ0LjItMzQuM3MtMzcuNC03LjYtNTUuOS0yLjhjLTguNCAyLjMtMTYuNSA1LjgtMjMuOCAxMC41TDE4NSAyNDQuOGMtMi4yIDEuNC00LjYgMi41LTcuMiAzLjItNS42IDEuNC0xMS41IDEuMi0xNi44LS44cy0xMC01LjYtMTMuMy0xMC4zYy0yLTIuOC0zLjQtNi00LjItOS40cy0uOS02LjktLjItMTAuM2MuNi0zLjMgMS45LTYuNSAzLjgtOS4zczQuNC01LjIgNy4yLTdsMTE3LjQtNzQuOGMyLjItMS40IDQuNy0yLjUgNy4yLTMuMiA1LjYtMS40IDExLjQtMS4xIDE2LjggLjlzMTAgNS42IDEzLjMgMTAuM2MzLjYgNS4xIDUuMiAxMS4zIDQuNyAxNy40bC0uNCA0LjQgNC40IDEuM2MxNi41IDUgMzIgMTIuOCA0NS45IDIzbDYgNC40IDIuMi02LjhjMS4yLTMuNiAyLjEtNy4zIDIuOC0xMSAyLTExLjMgMS44LTIyLjktLjgtMzQuMXMtNy4zLTIxLjgtMTQtMzEuMWMtMTAuOS0xNS43LTI2LjMtMjcuNi00NC4yLTM0LjN6Il19LG52ZT17cHJlZml4OiJmYWIiLGljb25OYW1lOiJzcXVhcmUtZGVza3BybyIsaWNvbjpbNDQ4LDUxMixbXSwiZTg0NCIsIk00MDguOCAzMkM0MzAuNCAzMiA0NDggNDkuNiA0NDggNzEuMmwwIDM2OS42YzAgMjEuNi0xNy42IDM5LjItMzkuMiAzOS4yTDM5LjIgNDgwQzE3LjYgNDgwIDAgNDYyLjQgMCA0NDAuOEwwIDcxLjJDMCA0OS42IDE3LjYgMzIgMzkuMiAzMmwzNjkuNiAwek0xMTAuOSAyNzQuMWwwIDExNC40IDg5LjEtLjFjMjAuNiAwIDM5LjQtMy4yIDU2LjMtOS41czMxLjMtMTUuNCA0My4yLTI3YzEyLjItMTEuOSAyMS42LTI2IDI4LjItNDIuMSA0LjYtMTEuMSA3LjctMjMgOS4yLTM1LjdsLTQzLjggMGMtMS4xIDYuNC0yLjggMTIuNC01LjEgMTguMi00LjIgMTAuOS0xMC4zIDIwLjMtMTguMiAyOC4yLTcuOSA3LjctMTcuNCAxMy43LTI4LjYgMTcuOS0xMS4xIDQuMy0yMy41IDYuNC0zNy4zIDYuNGwtNTAgMCAwLTcwLjYtNDMgLjF6bTAtMTUxLjRsMCAxMTQuNCA0My0uMSAwLTcwLjcgNTAgMGMxMy43IDAgMjYuMiAyLjEgMzcuMyA2LjQgMTEuMSA0LjMgMjAuNiAxMC4zIDI4LjYgMTguMyA3LjkgNy43IDE0IDE3LjEgMTguMiAyOC4yIDIuMyA1LjYgNCAxMS41IDUuMSAxNy44bDQzLjkgLjFjLTEuNC0xMi42LTQuNC0yNC40LTguOS0zNS4zLTYuNi0xNi40LTE2LTMwLjUtMjguMS00Mi4yLTEyLjEtMTEuOS0yNi43LTIxLjEtNDMuNi0yNy41LTE2LjktNi40LTM1LjctOS41LTU2LjMtOS41bC04OSAuMXoiXX0sb3ZlPXtwcmVmaXg6ImZhYiIsaWNvbk5hbWU6InRhaWx3aW5kLWNzcyIsaWNvbjpbNjQwLDUxMixbXSwiZTg2NiIsIk0zMjAgNjRjLTg1LjMgMC0xMzguNyA0Mi43LTE2MCAxMjggMzItNDIuNyA2OS4zLTU4LjcgMTEyLTQ4IDI0LjMgNi4xIDQxLjcgMjMuOCA2MSA0My4zIDMxLjQgMzEuOCA2Ny43IDY4LjcgMTQ3IDY4LjcgODUuMyAwIDEzOC43LTQyLjcgMTYwLTEyOC0zMiA0Mi43LTY5LjMgNTguNy0xMTIgNDgtMjQuMy02LjEtNDEuNy0yMy44LTYxLTQzLjMtMzEuNC0zMS44LTY3LjctNjguNy0xNDctNjguN3pNMTYwIDI1NmMtODUuMyAwLTEzOC43IDQyLjctMTYwIDEyOCAzMi00Mi43IDY5LjMtNTguNyAxMTItNDggMjQuMyA2LjEgNDEuNyAyMy44IDYxIDQzLjMgMzEuNCAzMS44IDY3LjcgNjguNyAxNDcgNjguNyA4NS4zIDAgMTM4LjctNDIuNyAxNjAtMTI4LTMyIDQyLjctNjkuMyA1OC43LTExMiA0OC0yNC4zLTYuMS00MS43LTIzLjgtNjEtNDMuMy0zMS40LTMxLjgtNjcuNy02OC43LTE0Ny02OC43eiJdfSxGanQ9e2ZhU3F1YXJlR2l0aHViOmRFLGZhR2l0aHViU3F1YXJlOnJkZSxmYVRoaW5rUGVha3M6c2RlLGZhR29vZ2xlRHJpdmU6bmRlLGZhQXV0b3ByZWZpeGVyOm9kZSxmYVNxdWFyZVZpYWRlbzpwRSxmYVZpYWRlb1NxdWFyZTpsZGUsZmFDcGFuZWw6Y2RlLGZhTWVuZGVsZXk6ZGRlLGZhRHJhZnQyZGlnaXRhbDpwZGUsZmFSZXBseWQ6aGRlLGZhRW1waXJlOnVkZSxmYUFjY2Vzc2libGVJY29uOmZkZSxmYVF1b3JhOm1kZSxmYUNjSmNiOmdkZSxmYUZlZG9yYTpiZGUsZmFEdW9saW5nbzp2ZGUsZmFGaXJzdGRyYWZ0OnlkZSxmYUZyZWVic2Q6eGRlLGZhT2R5c2VlOndkZSxmYUdnQ2lyY2xlOk1kZSxmYUNsb3VkZmxhcmU6emRlLGZhSGFja2VycmFuazprZGUsZmFTa3lhdGxhczpTZGUsZmFEZXNrcHJvOkNkZSxmYVJlc29sdmluZzpfZGUsZmFCbGFja2JlcnJ5OlRkZSxmYVN0cmlwZVM6TGRlLGZhU3F1YXJlQmVoYW5jZTpoRSxmYUJlaGFuY2VTcXVhcmU6JGRlLGZhU2VydmljZXN0YWNrOkFkZSxmYVJvY2tldGNoYXQ6RGRlLGZhUmViZWw6RWRlLGZhU3F1YXJlV2ViQXdlc29tZTpQZGUsZmFMaW5rdHJlZTpJZGUsZmFTaW1wbHlidWlsdDpOZGUsZmFTdHViYmVyOkZkZSxmYUFwcGVyOk9kZSxmYUdvb2dsZVNjaG9sYXI6UmRlLGZhWWFybjpCZGUsZmFTdGFja092ZXJmbG93OkhkZSxmYUJsdWV0b290aDpxZGUsZmFDcmVhdGl2ZUNvbW1vbnNOY0pwOlZkZSxmYVJlZGRpdDpqZGUsZmFDb25uZWN0ZGV2ZWxvcDpVZGUsZmFSZXNlYXJjaGdhdGU6V2RlLGZhU2lnbmFsTWVzc2VuZ2VyOkdkZSxmYVhpbmc6WWRlLGZhU3F1YXJlSnM6dUUsZmFKc1NxdWFyZTpaZGUsZmFGb250aWNvbnM6WGRlLGZhVXBzOktkZSxmYUFtYXpvblBheTpRZGUsZmFQYW5kb3JhOkpkZSxmYU9wZW5pZDplN2UsZmFWc2NvOnQ3ZSxmYUdsb2JhbGVha3M6YTdlLGZhVmVubW86aTdlLGZhVWJ1bnR1OnI3ZSxmYVZpYWNvaW46czdlLGZhWmhpaHU6bjdlLGZhWWFuZGV4Om83ZSxmYVBpeGl2Omw3ZSxmYU9wZW5haTpjN2UsZmFTaXRoOmQ3ZSxmYUp1bGlhOnA3ZSxmYU5mY0RpcmVjdGlvbmFsOmg3ZSxmYUNyZWF0aXZlQ29tbW9uc0J5OnU3ZSxmYVVtYnJhY286ZjdlLGZhSG9vbGk6bTdlLGZhU3F1YXJlR2l0OmZFLGZhR2l0U3F1YXJlOmc3ZSxmYU9kbm9rbGFzc25pa2k6YjdlLGZhRHJ1cGFsOnY3ZSxmYUJsb2dnZXJCOnk3ZSxmYUludmlzaW9uOng3ZSxmYUZhY2Vib29rRjp3N2UsZmFDZW50b3M6TTdlLGZhU2NhbGV3YXk6ejdlLGZhQ2NBbWF6b25QYXk6azdlLGZhRWJheTpTN2UsZmFDb250YW86QzdlLGZhRWxsbzpfN2UsZmFTaXN0cml4OlQ3ZSxmYVBlcmlzY29wZTpMN2UsZmFFeHBlZGl0ZWRzc2w6JDdlLGZhTmFwc3RlcjpBN2UsZmFEZWxpY2lvdXM6RDdlLGZhR3VpbGRlZDpFN2UsZmFPYnNpZGlhbjpQN2UsZmFYYm94Okk3ZSxmYVVudGFwcGQ6TjdlLGZhR29vZ2xlUGx1c0c6RjdlLGZhR2l0aHViQWx0Ok83ZSxmYUdldFBvY2tldDpSN2UsZmFHbGlkZTpCN2UsZmFCaXR5Okg3ZSxmYVdwZXhwbG9yZXI6cTdlLGZhTWVnYXBvcnQ6VjdlLGZhTGVldGNvZGU6ajdlLGZhTWRiOlU3ZSxmYVBhZ2U0Olc3ZSxmYVRoZVJlZFlldGk6RzdlLGZhSmlyYTpZN2UsZmFGZWRleDpaN2UsZmFFdmVybm90ZTpYN2UsZmFVc2I6SzdlLGZhQW5ncnljcmVhdGl2ZTpRN2UsZmFNaXp1bmk6SjdlLGZhSXRjaElvOmVwZSxmYVdpbmRvd3M6dHBlLGZhU3R1bWJsZXVwb246YXBlLGZhR29vZ2xlOkZmLGZhRGlzY29yZDppcGUsZmFIYWNrZXJOZXdzOnJwZSxmYUVsZXZlbnR5Om1FLGZhMTF0eTpzcGUsZmFUZWFtc3BlYWs6bnBlLGZhU3VwcGxlOm9wZSxmYVNxdWFyZVR3aXR0ZXI6Z0UsZmFUd2l0dGVyU3F1YXJlOmxwZSxmYVZpbTpjcGUsZmFGb250QXdlc29tZTpOZixmYUZvbnRBd2Vzb21lRmxhZzpkcGUsZmFGb250QXdlc29tZUxvZ29GdWxsOnBwZSxmYVdpcnNpbmRoYW5kd2VyazpiRSxmYVdzaDpocGUsZmFab29tOnVwZSxmYUNvbmZsdWVuY2U6ZnBlLGZhRGlnZzptcGUsZmFUaHJlYWRzOmdwZSxmYVdwcmVzc3I6dkUsZmFSZW5kYWN0OmJwZSxmYVlvYXN0OnZwZSxmYU5pbWJscjp5cGUsZmFQaXhlbGZlZDp4cGUsZmFZYWhvbzp3cGUsZmFCbHVlc2t5Ok1wZSxmYVNjcmliZDp6cGUsZmFDcmVhdGl2ZUNvbW1vbnNQZDprcGUsZmFFYXJseWJpcmRzOlNwZSxmYVN5bWZvbnljYXN0czpDcGUsZmFTcXVhcmVPZG5va2xhc3NuaWtpOnlFLGZhT2Rub2tsYXNzbmlraVNxdWFyZTpfcGUsZmFNYXJrZG93bjpUcGUsZmFUeXBvMzpMcGUsZmFKb29tbGE6JHBlLGZhV2VpeGluOkFwZSxmYUdydW50OkRwZSxmYVN1cHBvcnRub3c6RXBlLGZhUm9ja3JtczpQcGUsZmFVbnNwbGFzaDpJcGUsZmFTcXVhcmVJbnN0YWdyYW06eEUsZmFJbnN0YWdyYW1TcXVhcmU6TnBlLGZhRmlyc3RPcmRlckFsdDpGcGUsZmFGdWxjcnVtOk9wZSxmYUFyY2hMaW51eDpScGUsZmFGZWRpdmVyc2U6QnBlLGZhQnJhdmVSZXZlcnNlOkhwZSxmYUF2aWFuZXg6cXBlLGZhTnM4OlZwZSxmYVNxdWFyZVBpbnRlcmVzdDp3RSxmYVBpbnRlcmVzdFNxdWFyZTpqcGUsZmFCbHVldG9vdGhCOlVwZSxmYUdyaXBmaXJlOldwZSxmYVNxdWFyZUdvb2dsZVBsdXM6TUUsZmFHb29nbGVQbHVzU3F1YXJlOkdwZSxmYUdpdGVlOllwZSxmYVhtcHA6WnBlLGZhQXBwU3RvcmU6WHBlLGZhV2l4OktwZSxmYUludGVyY29tOlFwZSxmYVJlYWN0ZXVyb3BlOkpwZSxmYVdhemU6ZWhlLGZhQ3JlYXRpdmVDb21tb25zUmVtaXg6dGhlLGZhQmFuZGNhbXA6YWhlLGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZTppaGUsZmFWaW1lb1Y6cmhlLGZhU3RyYXZhOnNoZSxmYVVuaXJlZ2lzdHJ5Om5oZSxmYUNjRGluZXJzQ2x1YjpvaGUsZmFLdWJlcm5ldGVzOmxoZSxmYVBpbnRlcmVzdDpjaGUsZmFBbGdvbGlhOmRoZSxmYVN0YWNrcGF0aDpwaGUsZmFPY3RvcHVzRGVwbG95OmhoZSxmYVlhbW1lcjp1aGUsZmFNb2R4OmZoZSxmYVNxdWFyZVRocmVhZHM6bWhlLGZhT2xkUmVwdWJsaWM6Z2hlLGZhU3VzZTpiaGUsZmFBcHBTdG9yZUlvczp2aGUsZmFVbHRyYWx5dGljc1lvbG86eWhlLGZhU3F1YXJlRHJpYmJibGU6ekUsZmFEcmliYmJsZVNxdWFyZTp4aGUsZmFVaWtpdDp3aGUsZmFTdXBlcnBvd2VyczpNaGUsZmFZb3V0dWJlOnpoZSxmYUVtYmVyOmtoZSxmYUJvb3RzdHJhcDpTaGUsZmFJdHVuZXM6Q2hlLGZhU3F1YXJlWGluZzprRSxmYVhpbmdTcXVhcmU6X2hlLGZhQ3NzM0FsdDpUaGUsZmFTcXVhcmVzcGFjZTpMaGUsZmFUcmVsbG86JGhlLGZhVmlhZGVvOkFoZSxmYVNlYXJjaGVuZ2luOkRoZSxmYVVucmVhbEVuZ2luZTpFaGUsZmFQYXlwYWw6UGhlLGZhU3F1YXJlQmx1ZXNreTpJaGUsZmFEQW5kREJleW9uZDpOaGUsZmFNaWNyb3NvZnQ6RmhlLGZhRmx5Ok9oZSxmYUNjU3RyaXBlOlJoZSxmYVdvcmRwcmVzc1NpbXBsZTpCaGUsZmFTZWxsc3k6SGhlLGZhRGFzaGN1YmU6cWhlLGZhR2l0dGVyOlZoZSxmYVdvbGZQYWNrQmF0dGFsaW9uOmpoZSxmYUxhc3RmbTpVaGUsZmFTaG9wd2FyZTpXaGUsZmFCbG9nZ2VyOkdoZSxmYUVkZ2U6WWhlLGZhSW94aG9zdDpaaGUsZmFTY2hsaXg6WGhlLGZhREFuZEQ6S2hlLGZhVnVlanM6UWhlLGZhTWV0YTpKaGUsZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZTplOWUsZmFTdHVkaW92aW5hcmk6dDllLGZhQml0YnVja2V0OmE5ZSxmYVZrOmk5ZSxmYUdpdGh1YjpyOWUsZmFDb2RpZXBpZTpzOWUsZmFQaWVkUGlwZXI6bjllLGZhUmFzcGJlcnJ5UGk6bzllLGZhQ3NzMzpsOWUsZmFIdWJzcG90OmM5ZSxmYUNtcGxpZDpkOWUsZmFEeWFsb2c6cDllLGZhRWxlbWVudG9yOmg5ZSxmYUZpcnN0T3JkZXI6dTllLGZhRHJpYmJibGU6ZjllLGZhTGlua2VkaW46T2YsZmFDY1BheXBhbDptOWUsZmFEaGw6ZzllLGZhVGV4OmI5ZSxmYUNsYXVkZTp2OWUsZmFTaG9waWZ5Onk5ZSxmYVNxdWFyZVJlZGRpdDpTRSxmYVJlZGRpdFNxdWFyZTp4OWUsZmFDcmVhdGl2ZUNvbW1vbnNOYzp3OWUsZmFHYWxhY3RpY1JlcHVibGljOk05ZSxmYUZhY2Vib29rOlJmLGZhR2l0bGFiOno5ZSxmYVFxOms5ZSxmYVN0cmlwZTpTOWUsZmFEYWlseW1vdGlvbjpDOWUsZmFTdGVhbTpfOWUsZmFWZW5tb1Y6VDllLGZhU25hcGNoYXQ6Q0UsZmFTbmFwY2hhdEdob3N0Okw5ZSxmYUdhbGFjdGljU2VuYXRlOiQ5ZSxmYVBob2VuaXhGcmFtZXdvcms6QTllLGZhR2l0OkQ5ZSxmYU9wdGluTW9uc3RlcjpFOWUsZmFKZW5raW5zOlA5ZSxmYVNsaWRlc2hhcmU6STllLGZhVWJlcjpOOWUsZmFEaWdpdGFsT2NlYW46RjllLGZhU291bmRjbG91ZDpPOWUsZmFTcXVhcmVGaWdtYTpSOWUsZmFDcmVhdGl2ZUNvbW1vbnNTYTpCOWUsZmFDaHJvbWU6SDllLGZhVHJhZGVGZWRlcmF0aW9uOnE5ZSxmYVZhYWRpbjpWOWUsZmFEZXZpYW50YXJ0Omo5ZSxmYU1lZGl1bTpBNSxmYU1lZGl1bU06VTllLGZhT3BlbmNhcnQ6VzllLGZhWUNvbWJpbmF0b3I6RzllLGZhTGluZTpZOWUsZmFBbWlsaWE6WjllLGZhQXN5bW1ldHJpazpYOWUsZmFQaGFicmljYXRvcjpLOWUsZmFCb3RzOlE5ZSxmYVZpbmU6SjllLGZhTWVkcnQ6ZXVlLGZhT3NpOnR1ZSxmYUdnOmF1ZSxmYUJ1eXNlbGxhZHM6aXVlLGZhR29vZ2xlUGx1czpydWUsZmFTY3JlZW5wYWw6c3VlLGZhQml0Y29pbjpudWUsZmFTd2lmdDpvdWUsZmFGaWxlc1BpbndoZWVsOmx1ZSxmYUxhcmF2ZWw6Y3VlLGZhV3Bmb3JtczpkdWUsZmFTcGVha2VyRGVjazpwdWUsZmFGbGlja3I6aHVlLGZhQ2NWaXNhOnV1ZSxmYVVwd29yazpmdWUsZmFLYWthb1RhbGs6bXVlLGZhRmx1dHRlcjpndWUsZmFCdWZmZXI6YnVlLGZhR3JhdGlwYXk6dnVlLGZhR29vZ2xlUGF5Onl1ZSxmYUFwcGxlOnh1ZSxmYVR1bWJscjp3dWUsZmFQaG9lbml4U3F1YWRyb246TXVlLGZhQ2VudGVyY29kZTp6dWUsZmFEZWJpYW46a3VlLGZhTWFzdG9kb246U3VlLGZhU2tldGNoOkN1ZSxmYVdlYkF3ZXNvbWU6X3VlLGZhU2FzczpUdWUsZmFUaHJlZW1hOkx1ZSxmYVNxdWFyZVdoYXRzYXBwOl9FLGZhV2hhdHNhcHBTcXVhcmU6JHVlLGZhU2t5cGU6QXVlLGZhQW5ndWxhcjpEdWUsZmFDaXJjbGVadWxpcDpFdWUsZmFPcGVuc3VzZTpQdWUsZmFEcm9wYm94Okl1ZSxmYURlZXplcjpOdWUsZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZzpGdWUsZmFKZWRpT3JkZXI6T3VlLGZhUlByb2plY3Q6UnVlLGZhSW5zdGFsb2Q6QnVlLGZhQ2FuYWRpYW5NYXBsZUxlYWY6SHVlLGZhRXRoZXJldW06cXVlLGZhSG91eno6VnVlLGZhVmliZXI6anVlLGZhS2lja3N0YXJ0ZXI6VEUsZmFTcXVhcmVLaWNrc3RhcnRlcjpVdWUsZmFTcG90aWZ5Old1ZSxmYUxlYW5wdWI6R3VlLGZhSmF2YTpZdWUsZmFOZmNTeW1ib2w6WnVlLGZhV29kdTpYdWUsZmFTcXVhcmVTdGVhbTpMRSxmYVN0ZWFtU3F1YXJlOkt1ZSxmYUNyZWF0aXZlQ29tbW9uc05jRXU6UXVlLGZhTnBtOkp1ZSxmYUNsb3Vkc2NhbGU6ZWZlLGZhVGhlbWVjbzp0ZmUsZmFHb29nbGVQbGF5OmFmZSxmYUtvcnZ1ZTppZmUsZmFXM2M6cmZlLGZhR3JhdjpzZmUsZmFBd3M6bmZlLGZhR2xpZGVHOm9mZSxmYUpzZmlkZGxlOmxmZSxmYUtleWJhc2U6Y2ZlLGZhTHVtb25Ecm9wOmRmZSxmYUZvcmdlam86cGZlLGZhUG9zdGdyZXNxbDpoZmUsZmFXZWVibHk6dWZlLGZhRG9ja2VyOmZmZSxmYU1hZ2VudG86bWZlLGZhVG9yQnJvd3NlcjpnZmUsZmFHaXRBbHQ6YmZlLGZhRmlyZWZveEJyb3dzZXI6dmZlLGZhQ2xvdWRzbWl0aDp5ZmUsZmFXaXphcmRzT2ZUaGVDb2FzdDp4ZmUsZmFDcmVhdGl2ZUNvbW1vbnNOZDp3ZmUsZmFVc3BzOk1mZSxmYVNxdWFyZUxldHRlcmJveGQ6emZlLGZhTWFuZGFsb3JpYW46a2ZlLGZhU2xhY2s6JEUsZmFTbGFja0hhc2g6QmYsZmFBbmdlbGxpc3Q6U2ZlLGZhQW5kcm9pZDpDZmUsZmFNZWV0dXA6X2ZlLGZhRm9udGljb25zRmk6VGZlLGZhUGFsZmVkOkxmZSxmYVdwYmVnaW5uZXI6JGZlLGZhRGlhc3BvcmE6QWZlLGZhUHJvZHVjdEh1bnQ6RGZlLGZhU3F1YXJlVXB3b3JrOkVmZSxmYUN1dHRsZWZpc2g6UGZlLGZhTWVkYXBwczpJZmUsZmFQaXg6TmZlLGZhU3F1YXJlVHVtYmxyOkFFLGZhVHVtYmxyU3F1YXJlOkZmZSxmYVJlYWN0Ok9mZSxmYUh1Z2dpbmdGYWNlOlJmZSxmYUp4bDpCZmUsZmFTcXVhcmVMaW5rZWRpbjpIZmUsZmFDc3M6cWZlLGZhSGFzaG5vZGU6VmZlLGZhUmVkZGl0QWxpZW46amZlLGZhVGlrdG9rOkhmLGZhV29yZHByZXNzOlVmZSxmYUlkZWFsOldmZSxmYVBpZWRQaXBlclBwOkdmZSxmYVVzc3VubmFoOllmZSxmYUZvcnRBd2Vzb21lQWx0OlpmZSxmYUJ1cm9tb2JlbGV4cGVydGU6WGZlLGZhQmlsaWJpbGk6S2ZlLGZhTmVvczpRZmUsZmFEZXY6SmZlLGZhSG90amFyOmVtZSxmYURvY2h1Yjp0bWUsZmFWaW1lbzphbWUsZmFNYXhjZG46aW1lLGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2U6REUsZmFGb250QXdlc29tZUFsdDpybWUsZmFTcGVha2FwOnNtZSxmYUZhbnRhc3lGbGlnaHRHYW1lczpubWUsZmFMaW51eDpvbWUsZmFDb3R0b25CdXJlYXU6bG1lLGZhR29vZ2xlV2FsbGV0OmNtZSxmYUZvdXJzcXVhcmU6ZG1lLGZhU2hpcnRzaW5idWxrOnBtZSxmYU1pbnRiaXQ6aG1lLGZhWnVsaXA6dW1lLGZhU3RheWxpbmtlZDpmbWUsZmFXZWJmbG93Om1tZSxmYVJlbnJlbjpnbWUsZmFLb0ZpOmJtZSxmYVJldjp2bWUsZmFLZXljZG46eW1lLGZhSGlyZUFIZWxwZXI6eG1lLGZhU3F1YXJlSGFja2VyTmV3czpFRSxmYUhhY2tlck5ld3NTcXVhcmU6d21lLGZhQ3JlYXRpdmVDb21tb25zUGRBbHQ6TW1lLGZhT3JjaWQ6em1lLGZhQm9hcmRHYW1lR2VlazpQRSxmYUJnZzprbWUsZmFCZWhhbmNlOlNtZSxmYU1vbmVybzpDbWUsZmFGaWdtYTpfbWUsZmFJbnN0YWdyYW06cWYsZmFQZXJieXRlOlRtZSxmYVNxdWFyZVZpbWVvOklFLGZhVmltZW9TcXVhcmU6TG1lLGZhUHVzaGVkOiRtZSxmYU1peGNsb3VkOkFtZSxmYVlhbmRleEludGVybmF0aW9uYWw6RG1lLGZhSGl2ZTpFbWUsZmFDcmVhdGl2ZUNvbW1vbnNaZXJvOlBtZSxmYVNxdWFyZVNuYXBjaGF0Ok5FLGZhU25hcGNoYXRTcXVhcmU6SW1lLGZhVGhlbWVpc2xlOk5tZSxmYURhcnRMYW5nOkZtZSxmYURlcGxveWRvZzpPbWUsZmFGbGlwYm9hcmQ6Um1lLGZhQnV5TkxhcmdlOkJtZSxmYVdhdGNobWFuTW9uaXRvcmluZzpIbWUsZmFIaXBzOnFtZSxmYUNsb3VkdmVyc2lmeTpWbWUsZmFHb29kcmVhZHM6am1lLGZhVGlkYWw6VW1lLGZhVW5pdHk6V21lLGZhVGVuY2VudFdlaWJvOkdtZSxmYUZyZWVDb2RlQ2FtcDpZbWUsZmFYVHdpdHRlcjpabWUsZmFTdGlja2VyTXVsZTpYbWUsZmFUd2l0Y2g6S21lLGZhS2lja3N0YXJ0ZXJLOlFtZSxmYUNyaXRpY2FsUm9sZTpKbWUsZmFTdGVhbVN5bWJvbDplZ2UsZmFNYWlsY2hpbXA6dGdlLGZhTHVtb246YWdlLGZhTnV0cml0aW9uaXg6aWdlLGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzOnJnZSxmYVJlZGhhdDpzZ2UsZmFTcXVhcmVQaWVkUGlwZXI6RkUsZmFQaWVkUGlwZXJTcXVhcmU6bmdlLGZhV2hhdHNhcHA6b2dlLGZhSW1kYjpsZ2UsZmFQeXRob246Y2dlLGZhQ2FzaEFwcDpkZ2UsZmFQaW50ZXJlc3RQOnBnZSxmYVdobWNzOmhnZSxmYUpvZ2V0OnVnZSxmYVNxdWFyZVlvdXR1YmU6T0UsZmFZb3V0dWJlU3F1YXJlOmZnZSxmYUF0bGFzc2lhbjptZ2UsZmFQaWVkUGlwZXJIYXQ6Z2dlLGZhSW50ZXJuZXRFeHBsb3JlcjpiZ2UsZmFBaXJibmI6dmdlLGZhSnM6eWdlLGZhUXVpbnNjYXBlOnhnZSxmYUFkdmVyc2FsOndnZSxmYUNyZWF0aXZlQ29tbW9uczpNZ2UsZmFOb3Rpb246emdlLGZhQ2hyb21lY2FzdDprZ2UsZmFVbHRyYWx5dGljc0h1YjpTZ2UsZmFXaWtpcGVkaWFXOkNnZSxmYVNpdHJveDpfZ2UsZmFTcXVhcmVHaXRsYWI6UkUsZmFHaXRsYWJTcXVhcmU6VGdlLGZhU2hvZWxhY2U6TGdlLGZhT3BlbnN0cmVldG1hcDokZ2UsZmFTZWxsY2FzdDpBZ2UsZmFNaXg6RGdlLGZhQ2NBcHBsZVBheTpFZ2UsZmFTb2xhbmE6UGdlLGZhVHlwZXNjcmlwdDpJZ2UsZmFCcmF2ZTpOZ2UsZmFFdHN5OkZnZSxmYUJ0YzpPZ2UsZmFBZG46UmdlLGZhU3F1YXJlWFR3aXR0ZXI6QmdlLGZhU3F1YXJlRm9udEF3ZXNvbWU6SGdlLGZhRm9ydW1iZWU6cWdlLGZhNDJHcm91cDpCRSxmYUlubm9zb2Z0OlZnZSxmYVN0dW1ibGV1cG9uQ2lyY2xlOmpnZSxmYVN5bWZvbnk6VWdlLGZhU2FsZXNmb3JjZTpXZ2UsZmFTb3VyY2V0cmVlOkdnZSxmYUxpbmtlZGluSW46WWdlLGZhSHRtbDU6WmdlLGZhUnVzdDpYZ2UsZmFIb3JuYmlsbDpLZ2UsZmFQaHA6UWdlLGZhRGlzcXVzOkpnZSxmYTUwMHB4OmViZSxmYUFmZmlsaWF0ZXRoZW1lOnRiZSxmYVJlZFJpdmVyOmFiZSxmYVR3aXR0ZXI6VmYsZmFGb3J0QXdlc29tZTppYmUsZmFNaXhlcjpyYmUsZmFMeWZ0OnNiZSxmYUFwcGxlUGF5Om5iZSxmYUFydHN0YXRpb246b2JlLGZhTm9kZUpzOmxiZSxmYVVuY2hhcnRlZDpjYmUsZmFQbGF5c3RhdGlvbjpkYmUsZmFNaWNyb2Jsb2c6cGJlLGZhR2l0a3Jha2VuOmhiZSxmYVRlbGVncmFtOkhFLGZhVGVsZWdyYW1QbGFuZTp1YmUsZmFVbHRyYWx5dGljczpmYmUsZmFJdHVuZXNOb3RlOm1iZSxmYUxlc3M6Z2JlLGZhRmlyZWZveDpiYmUsZmFLYWdnbGU6dmJlLGZhRmFjZWJvb2tNZXNzZW5nZXI6eWJlLGZhQXVkaWJsZTp4YmUsZmFQYXRyZW9uOndiZSxmYVZudjpNYmUsZmFQYWdlbGluZXM6emJlLGZhQW1hem9uOmtiZSxmYUVudmlyYTpTYmUsZmFMaW5vZGU6Q2JlLGZhQWNjdXNvZnQ6X2JlLGZhRXJsYW5nOlRiZSxmYVVuaXNvbjpMYmUsZmFDY0Rpc2NvdmVyOiRiZSxmYVNhZmFyaTpBYmUsZmFTcGFjZUF3ZXNvbWU6RGJlLGZhTm9kZTpFYmUsZmFDb2RlcGVuOlBiZSxmYVJhdmVscnk6SWJlLGZhQWxpcGF5Ok5iZSxmYUNjQW1leDpGYmUsZmFQaWVkUGlwZXJBbHQ6T2JlLGZhTGV0dGVyYm94ZDpSYmUsZmFPcGVyYTpCYmUsZmFXZWlibzpIYmUsZmFSZWFkbWU6cWJlLGZhR29sYW5nOlZiZSxmYVN0YWNrRXhjaGFuZ2U6amJlLGZhR3VscDpVYmUsZmFZZWxwOldiZSxmYUdvZm9yZTpHYmUsZmFBdmlhdG86WWJlLGZhUGFkbGV0OlpiZSxmYUVkZ2VMZWdhY3k6WGJlLGZhU3F1YXJlTGFzdGZtOnFFLGZhTGFzdGZtU3F1YXJlOktiZSxmYUdvb2RyZWFkc0c6UWJlLGZhQ2NNYXN0ZXJjYXJkOkpiZSxmYURpc2NvdXJzZTpldmUsZmFCbGFja1RpZTp0dmUsZmFTcXVhcmVGYWNlYm9vazpWRSxmYUZhY2Vib29rU3F1YXJlOmF2ZSxmYUJhdHRsZU5ldDppdmUsZmFCaW1vYmplY3Q6cnZlLGZhU3ZlbHRlOnN2ZSxmYVNxdWFyZURlc2twcm86bnZlLGZhVGFpbHdpbmRDc3M6b3ZlfX0pO3ZhciBPanQsakUsY3ZlLGR2ZSxVRSxwdmUsUDUsaHZlLHV2ZSxmdmUsbXZlLFdFLGd2ZSxidmUsdnZlLEk1LHl2ZSxHRSx4dmUsWUUsd3ZlLE12ZSx6dmUsa3ZlLFpFLFN2ZSxYRSxDdmUsS0UsX3ZlLFFFLFR2ZSxKRSxMdmUsZVAsJHZlLHRQLEF2ZSxEdmUsYVAsRXZlLGlQLFB2ZSxyUCxJdmUsc1AsTnZlLEZ2ZSxuUCxPdmUsb1AsUnZlLGxQLEJ2ZSxjUCxIdmUsZFAscXZlLFZ2ZSxqdmUsamYsVXZlLFd2ZSxHdmUsWXZlLFp2ZSxYdmUsS3ZlLFF2ZSxVZixKdmUsZXllLHBQLHR5ZSxheWUsaXllLHJ5ZSxzeWUsbnllLG95ZSxseWUsaFAsY3llLGR5ZSxweWUsaGwsaHllLHV5ZSx1UCxmeWUsbXllLGZQLGd5ZSxRZixieWUsdnllLFdmLHl5ZSx4eWUsbVAsd3llLE15ZSx6eWUsZ1Asa3llLGJQLFN5ZSxHZixDeWUsX3llLHZQLFR5ZSx5UCxMeWUsJHllLEF5ZSx4UCxEeWUsd1AsRXllLE1QLFB5ZSx6UCxJeWUsTnllLEZ5ZSxPeWUsa1AsUnllLEJ5ZSxTUCxIeWUscXllLENQLFZ5ZSxqeWUsX1AsVXllLFd5ZSxHeWUsRDUsWXllLFp5ZSxYeWUsTjUsS3llLFF5ZSxKeWUsVFAsZXhlLHR4ZSxMUCxheGUsJFAsaXhlLEU1LHJ4ZSxzeGUsbnhlLEFQLG94ZSxZZixseGUsY3hlLGR4ZSxweGUsRFAsaHhlLFpmLHV4ZSxmeGUsRVAsbXhlLFBQLGd4ZSxieGUsSVAsdnhlLE5QLHl4ZSxYZix4eGUsd3hlLE14ZSxGNSx6eGUsa3hlLFN4ZSxDeGUsRlAsX3hlLE9QLFR4ZSxSUCxMeGUsQlAsJHhlLEhQLEF4ZSxxUCxEeGUsS2YsRXhlLFB4ZSxJeGUsTnhlLFZQLEZ4ZSxqUCxPeGUsVVAsUnhlLFdQLEJ4ZSxIeGUscXhlLFZ4ZSxqeGUsVXhlLFd4ZSxHUCxHeGUsWVAsWXhlLFp4ZSxaUCxYeGUsWFAsS3hlLEtQLFF4ZSxKZixKeGUsUVAsZXdlLHR3ZSxKUCxhd2UsZUksaXdlLHJ3ZSxzd2UsdEksbndlLG93ZSxhSSxsd2UsY3dlLGR3ZSxwd2UsaUksaHdlLHJJLHV3ZSxzSSxmd2UsbXdlLGd3ZSxuSSxid2Usb0ksdndlLGxJLHl3ZSx4d2UsY0ksd3dlLGRJLE13ZSx6d2UscEksa3dlLFN3ZSxDd2UsUmp0LF93ZT1iKCgpPT57T2p0PSJmYXIiLGpFPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZS1taW51cyIsaWNvbjpbNDQ4LDUxMixbNjE3NjcsIm1pbnVzLXNxdWFyZSJdLCJmMTQ2IiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xMzYgMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sY3ZlPWpFLGR2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhci1jaGVjayIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3NCIsIk0zMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnptMjMwLjcgNjUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM3NC4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXX0sVUU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzIixpY29uOls1MTIsNTEyLFsxMjg1MzUsImtpc3MiXSwiZjU5NiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI0MCAwbDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni00OGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxwdmU9VUUsUDU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToicGFzdGUiLGljb246WzUxMiw1MTIsWyJmaWxlLWNsaXBib2FyZCJdLCJmMGVhIiwiTTY0IDQ4bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTIgMCAwLTQ4LTExMiAwYy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2em0xNzYgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRMMTA0IDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNS42IDBjOC44LTguNiAxOS0xNS44IDMwLjItMjEuMSAuMS0uOSAuMi0xLjkgLjItMi45ek00NDggNDY0bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmwxMDEuNSAwYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsNTguNSA1OC41YzMgMyA0LjcgNy4xIDQuNyAxMS4zTDQ2NCA0NDhjMCA4LjgtNy4yIDE2LTE2IDE2ek0yMjQgMjI0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNsLTU4LjUtNTguNWMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wyODggMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NHoiXX0saHZlPVA1LHV2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLXBvaW50LWxlZnQiLGljb246WzUxMiw1MTIsW10sImYwYTUiLCJNNjQgMTI4bDE3Ny42IDBjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmwwIDE2LTE3NiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0yMjQgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMGwwIDQ4YzAgNTIuNS0zMy43IDk3LjEtODAuNyAxMTMuNCAuNS0zLjEgLjctNi4yIC43LTkuNCAwLTIwLTkuMi0zNy45LTIzLjYtNDkuNyA0LjktOSA3LjYtMTkuNCA3LjYtMzAuMyAwLTE1LjEtNS4zLTI5LTE0LTQwIDguOC0xMSAxNC0yNC45IDE0LTQwbDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwem0zMi04MGwwIDBjLTE4IDAtMzQuNiA2LTQ4IDE2TDY0IDgwQzI4LjcgODAgMCAxMDguNyAwIDE0NHMyOC43IDY0IDY0IDY0bDgyIDBjLTEuMyA1LjEtMiAxMC41LTIgMTYgMCAyNS4zIDE0LjcgNDcuMiAzNiA1Ny42LTIuNiA3LTQgMTQuNS00IDIyLjQgMCAyMCA5LjIgMzcuOSAyMy42IDQ5LjctNC45IDktNy42IDE5LjQtNy42IDMwLjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGM5Mi44IDAgMTY4LTc1LjIgMTY4LTE2OGwwLTQ4YzAtOTIuOC03NS4yLTE2OC0xNjgtMTY4bC0yNCAwek0yNTYgNDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDB6TTI0MCAyMjRjMCA1LjUgLjcgMTAuOSAyIDE2bC0zNCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDMyIDAgMCAxNnptMjQgNjRsNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNCAweiJdfSxmdmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1leGNlbCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjMyIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem05OS4yIDI2NS42Yy04LTEwLjYtMjMtMTIuOC0zMy42LTQuOHMtMTIuOCAyMy00LjggMzMuNkwxNjIgMzQ0IDEyNC44IDM5My42Yy04IDEwLjYtNS44IDI1LjYgNC44IDMzLjZzMjUuNiA1LjggMzMuNi00LjhMMTkyIDM4NCAyMjAuOCA0MjIuNGM4IDEwLjYgMjMgMTIuOCAzMy42IDQuOHMxMi44LTIzIDQuOC0zMy42TDIyMiAzNDQgMjU5LjIgMjk0LjRjOC0xMC42IDUuOC0yNS42LTQuOC0zMy42cy0yNS42LTUuOC0zMy42IDQuOEwxOTIgMzA0IDE2My4yIDI2NS42eiJdfSxtdmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZW52ZWxvcGUiLGljb246WzUxMiw1MTIsWzEyODM4Niw5OTkzLDYxNDQzXSwiZjBlMCIsIk02MS40IDY0QzI3LjUgNjQgMCA5MS41IDAgMTI1LjQgMCAxMjYuMyAwIDEyNy4xIC4xIDEyOEwwIDEyOCAwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1Ni0uMSAwYzAtLjkgLjEtMS43IC4xLTIuNiAwLTMzLjktMjcuNS02MS40LTYxLjQtNjEuNEw2MS40IDY0ek00NjQgMTkyLjNMNDY0IDM4NGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xOTEuNyAxNTQuOCAxMTcuNGMzMS40IDIzLjkgNzQuOSAyMy45IDEwNi40IDBMNDY0IDE5Mi4zek00OCAxMjUuNEM0OCAxMTggNTQgMTEyIDYxLjQgMTEybDM4OS4yIDBjNy40IDAgMTMuNCA2IDEzLjQgMTMuNCAwIDQuMi0yIDguMi01LjMgMTAuN0wyODAuMiAyNzEuNWMtMTQuMyAxMC44LTM0LjEgMTAuOC00OC40IDBMNTMuMyAxMzYuMWMtMy4zLTIuNS01LjMtNi41LTUuMy0xMC43eiJdfSxXRT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtZG93biIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1kb3duIl0sImYxNTAiLCJNMzg0IDQzMmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwem02NC0xNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjB6TTIyNCAzNTJjLTYuNyAwLTEzLTIuOC0xNy42LTcuN2wtMTA0LTExMmMtNi41LTctOC4yLTE3LjItNC40LTI1LjlTMTEwLjUgMTkyIDEyMCAxOTJsMjA4IDBjOS41IDAgMTguMiA1LjcgMjIgMTQuNHMyLjEgMTguOS00LjQgMjUuOWwtMTA0IDExMmMtNC41IDQuOS0xMC45IDcuNy0xNy42IDcuN3oiXX0sZ3ZlPVdFLGJ2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJ0cnVjayIsaWNvbjpbNTc2LDUxMixbMTI4NjY2LDk5NTFdLCJmMGQxIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMuMyAwYzEwLjQtMzYuOSA0NC40LTY0IDg0LjctNjRzNzQuMiAyNy4xIDg0LjcgNjRsMTAyLjYgMGM0LjktMTcuNCAxNS4xLTMyLjcgMjguNy00My45TDM2OCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6bTMuMyAzNjhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTUuNCAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQwLjYgNDAuNmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjR6TTQxNiAyNTZsMTEyIDAgMC0yMy40YzAtNC4yLTEuNy04LjMtNC43LTExLjNsLTQwLjYtNDAuNmMtMy0zLTcuMS00LjctMTEuMy00LjdsLTU1LjQgMCAwIDgwem0wIDQ4bDAgMzIuNGMyLjYtLjIgNS4zLS40IDgtLjQgNDAuMyAwIDc0LjIgMjcuMSA4NC43IDY0bDMuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTgwLTExMiAwek0xNTIgNDY0YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHptMjcyIDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSx2dmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYmVsbCIsaWNvbjpbNDQ4LDUxMixbMTI4Mjc2LDYxNjAyXSwiZjBmMyIsIk0yMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5LjdDMTE4LjYgNDUuMyA1NiAxMTUuNCA1NiAyMDBsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDUuMSAzNTkuMkMxLjggMzY1IDAgMzcxLjUgMCAzNzguMiAwIDM5OS4xIDE2LjkgNDE2IDM3LjggNDE2bDM3Mi40IDBjMjAuOSAwIDM3LjgtMTYuOSAzNy44LTM3LjggMC02LjctMS44LTEzLjMtNS4xLTE5TDQyMSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTM5Mi40IDM2OGwtMzM2LjkgMCAxMi45LTIyLjFDOTEuNyAzMDYgMTA0IDI2MC42IDEwNCAyMTQuNWwwLTE0LjVjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBzMTIwIDUzLjcgMTIwIDEyMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40TDM5Mi40IDM2OHpNMTU2LjEgNDY0YzkuOSAyOCAzNi42IDQ4IDY3LjkgNDhzNTgtMjAgNjcuOS00OGwtMTM1LjggMHoiXX0sSTU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibWVzc2FnZSIsaWNvbjpbNTEyLDUxMixbImNvbW1lbnQtYWx0Il0sImYyN2EiLCJNMjAzLjcgNTEyLjlzMCAwIDAgMGwtMzcuOCAyNi43Yy03LjMgNS4yLTE2LjkgNS44LTI0LjkgMS43UzEyOCA1MjkgMTI4IDUyMGwwLTcyLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMC40IDAtOTEuOSA2NC45em02NC4zLTEwNC4xYzguMS01LjcgMTcuOC04LjggMjcuNy04LjhMNDE2IDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiA4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTYgMGMxMC40IDAgMTkuMyA2LjYgMjIuNiAxNS45IC45IDIuNSAxLjQgNS4yIDEuNCA4LjFsMCA0OS43YzMyLjctMjMuMSA2My4zLTQ0LjcgOTEuOS02NC45eiJdfSx5dmU9STUsR0U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1kaXp6eSIsaWNvbjpbNTEyLDUxMixbImRpenp5Il0sImY1NjciLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xMzQuMSAxNTMuOWwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHptMTkyIDBsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6TTI1NiAyODhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LHh2ZT1HRSxZRT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhci1kYXlzIixpY29uOls0NDgsNTEyLFsiY2FsZW5kYXItYWx0Il0sImYwNzMiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0LTg4IDAgMCA4MCA3MiAwem0xNi0xMjhsMC04MC04OCAwIDAgODAgODggMHptLTEzNiAwbDAtODAtODAgMCAwIDgwIDgwIDB6bS0xMjggMGwwLTgwLTg4IDAgMCA4MCA4OCAwek00OCAzNTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNzIgMCAwLTgwLTg4IDB6bTEzNiAwbDAgODAgODAgMCAwLTgwLTgwIDB6TTEyMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4IDM1MiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHoiXX0sd3ZlPVlFLE12ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLXBvaW50LXVwIixpY29uOlszODQsNTEyLFs5NzU3XSwiZjBhNiIsIk02NCA2NGwwIDE3Ny42YzUuMi0xIDEwLjUtMS42IDE2LTEuNmwxNiAwIDAtMTc2YzAtOC44LTcuMi0xNi0xNi0xNlM2NCA1NS4yIDY0IDY0ek04MCAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjRjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjBsNDggMGM1Mi41IDAgOTcuMS0zMy43IDExMy40LTgwLjctMy4xIC41LTYuMiAuNy05LjQgLjctMjAgMC0zNy45LTkuMi00OS43LTIzLjYtOSA0LjktMTkuNCA3LjYtMzAuMyA3LjYtMTUuMSAwLTI5LTUuMy00MC0xNC0xMSA4LjgtMjQuOSAxNC00MCAxNGwtNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0MCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC04MCAwek0wIDMyMGwwIDBjMC0xOCA2LTM0LjYgMTYtNDhMMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMHM2NCAyOC43IDY0IDY0bDAgODJjNS4xLTEuMyAxMC41LTIgMTYtMiAyNS4zIDAgNDcuMiAxNC43IDU3LjYgMzYgNy0yLjYgMTQuNS00IDIyLjQtNCAyMCAwIDM3LjkgOS4yIDQ5LjcgMjMuNiA5LTQuOSAxOS40LTcuNiAzMC4zLTcuNiAzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDg4YzAgOTIuOC03NS4yIDE2OC0xNjggMTY4bC00OCAwQzc1LjIgNTEyIDAgNDM2LjggMCAzNDRsMC0yNHptMzM2LTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek0xNjAgMjQwYzUuNSAwIDEwLjkgLjcgMTYgMmwwLTM0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMzIgMTYgMHptNjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyNHoiXX0senZlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtbGl6YXJkIixpY29uOls1MTIsNTEyLFtdLCJmMjU4IiwiTTcyIDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTUyIDBjNC41IDAgOC45IDEuMyAxMi43IDMuNmw2NCA0MGM3IDQuNCAxMS4zIDEyLjEgMTEuMyAyMC40bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMC43LTQ2LjktMjkuMy0xNDUuMSAwYy0zOS44IDAtNzItMzIuMi03Mi03MnMzMi4yLTcyIDcyLTcybDEwNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDcyIDIwOGMtMzkuOCAwLTcyLTMyLjItNzItNzJTMzIuMiA2NCA3MiA2NGwyMDkuNiAwYzQ2LjcgMCA5MC45IDIxLjUgMTE5LjcgNTguM2w3OC40IDEwMC4xYzIwLjkgMjYuNyAzMi4zIDU5LjcgMzIuMyA5My43TDUxMiA0MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDcuOWMwLTIzLjItNy44LTQ1LjgtMjIuMS02NC4xTDM2My41IDE1MS45Yy0xOS43LTI1LjItNDkuOS0zOS45LTgxLjktMzkuOUw3MiAxMTJ6Il19LGt2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtZnVsbCIsaWNvbjpbNTEyLDUxMixbMTI4OTk3LDEyODk5OCwxMjg5OTksMTI5ZTMsMTI5MDAxLDEyOTAwMiwxMjkwMDMsMTEwMzUsMTEwMzZdLCJmNDVjIiwiTTQ0OCA0OGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHoiXX0sWkU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLXBhdXNlIixpY29uOls1MTIsNTEyLFs2MjA5MiwicGF1c2UtY2lyY2xlIl0sImYyOGIiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6bTExMiAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6Il19LFN2ZT1aRSxYRT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYXJkLWRyaXZlIixpY29uOls0NDgsNTEyLFsxMjg0MzYsImhkZCJdLCJmMGEwIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNjJjNS4xLTEuMyAxMC41LTIgMTYtMmwzMjAgMGM1LjUgMCAxMC45IC43IDE2IDJsMC0xNjJjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek00OCAzMjBsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDMwNGMtOC44IDAtMTYgNy4yLTE2IDE2ek0wIDMyMEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC05NnptMjE2IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LEN2ZT1YRSxLRT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLXppcHBlciIsaWNvbjpbMzg0LDUxMixbImZpbGUtYXJjaGl2ZSJdLCJmMWM2IiwiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTgwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptNjQgNTZsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdfSxfdmU9S0UsUUU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmxvcHB5LWRpc2siLGljb246WzQ0OCw1MTIsWzEyODE5MCwxMjg0MjYsInNhdmUiXSwiZjBjNyIsIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDIuN2MwLTQuMi0xLjctOC4zLTQuNy0xMS4zTDMyMCA4Ni42IDMyMCAxNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTMyIDB6bTgwIDBsMCA4MCAxMjggMCAwLTgwLTEyOCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI0Mi43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNDI5LjMgMTI4YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNDQ4IDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE2MCAzMjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdfSxUdmU9UUUsSkU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQiLGljb246WzUxMiw1MTIsWzEyODU0MSwiZ3Jpbi10b25ndWUtc3F1aW50Il0sImY1OGEiLCJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNzUuOSA0MC43IDE0Mi40IDEwMS41IDE3OC43LTMuNi0xMC45LTUuNS0yMi42LTUuNS0zNC43bDAtMzcuNWMtMTAuMi0xMi42LTE4LjMtMjYuOS0yMy44LTQyLjQtNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC01LjUgMTUuNi0xMy42IDI5LjktMjMuOCA0Mi41bDAgMzcuNWMwIDEyLjEtMS45IDIzLjgtNS41IDM0LjcgNjAuOC0zNi4zIDEwMS41LTEwMi43IDEwMS41LTE3OC43ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMjUuOC03NS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0MTZsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSxMdmU9SkUsZVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2FtZXJhIixpY29uOls1MTIsNTEyLFs2MjI1OCwiY2FtZXJhLWFsdCJdLCJmMDMwIiwiTTE5My4xIDMyYy0xOC43IDAtMzYuMiA5LjQtNDYuNiAyNC45TDEyMC41IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNTYuNSAwLTI2LTM5LjFDMzU1LjEgNDEuNCAzMzcuNiAzMiAzMTguOSAzMkwxOTMuMSAzMnptLTYuNyA1MS42YzEuNS0yLjIgNC0zLjYgNi43LTMuNmwxMjUuNyAwYzIuNyAwIDUuMiAxLjMgNi43IDMuNmwzMy4yIDQ5LjhjNC41IDYuNyAxMS45IDEwLjcgMjAgMTAuN2w2OS4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsNjkuMyAwYzggMCAxNS41LTQgMjAtMTAuN2wzMy4yLTQ5Ljh6TTI1NiAzODRhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0xOTIgMjcyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sJHZlPWVQLHRQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1zdGFycyIsaWNvbjpbNTEyLDUxMixbMTI5MzIxLCJncmluLXN0YXJzIl0sImY1ODciLCJNMCAyNTZjMC0yOS42IDUtNTcuOSAxNC4yLTg0LjRsMTcuMyAxNi45LTQuNiAyN2MtNC4yIDI0LjQgNS42IDQ2LjIgMjIgNTkuOSA5LjggMTA1LjggOTguOCAxODguNyAyMDcuMSAxODguN3MxOTcuNC04Mi44IDIwNy4xLTE4OC42YzE2LjQtMTMuNyAyNi4xLTM1LjQgMjItNTkuOWwtNC42LTI3IDE3LjMtMTYuOWM5LjIgMjYuNCAxNC4yIDU0LjggMTQuMiA4NC40IDAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NnpNMjU2IDQ4Yy0xNS4yIDAtMzAgMS42LTQ0LjMgNC43TDIwMS40IDMxLjhDMTk3IDIzIDE5MS4xIDE1LjggMTg0LjIgMTAuMiAyMDcgMy42IDIzMS4xIDAgMjU2IDBzNDkgMy42IDcxLjggMTAuMkMzMjAuOSAxNS44IDMxNSAyMyAzMTAuNiAzMS44TDMwMC4zIDUyLjdDMjg2IDQ5LjYgMjcxLjIgNDggMjU2IDQ4ek0zNzIuMiAzMDIuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMzUzLjcgNTMuMWM1LjktMTEuOSAyMi44LTExLjkgMjguNyAwbDIzLjMgNDcuMiA1MiA3LjZjMTMuMSAxLjkgMTguNCAxOCA4LjkgMjcuM2wtMzcuNyAzNi43IDguOSA1MS44YzIuMiAxMy4xLTExLjUgMjMtMjMuMiAxNi45TDM2OCAyMTYgMzIxLjUgMjQwLjVjLTExLjcgNi4yLTI1LjUtMy44LTIzLjItMTYuOWw4LjktNTEuOC0zNy43LTM2LjdjLTkuNS05LjMtNC4zLTI1LjQgOC45LTI3LjNsNTItNy42IDIzLjMtNDcuMnptLTE5NS4zIDBsMjMuMyA0Ny4yIDUyIDcuNmMxMy4xIDEuOSAxOC40IDE4IDguOSAyNy4zbC0zNy43IDM2LjcgOC45IDUxLjhjMi4yIDEzLjEtMTEuNSAyMy0yMy4yIDE2LjlMMTQ0IDIxNiA5Ny41IDI0MC41Yy0xMS43IDYuMi0yNS41LTMuOC0yMy4yLTE2LjlsOC45LTUxLjgtMzcuNy0zNi43Yy05LjUtOS4zLTQuMy0yNS40IDguOS0yNy4zbDUyLTcuNiAyMy4zLTQ3LjJjNS45LTExLjkgMjIuOC0xMS45IDI4LjcgMHoiXX0sQXZlPXRQLER2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJleWUiLGljb246WzU3Niw1MTIsWzEyODA2NV0sImYwNmUiLCJNMjg4IDgwQzIyMi44IDgwIDE2OS4yIDEwOS42IDEyOC4xIDE0Ny43IDg5LjYgMTgzLjUgNjMgMjI2IDQ5LjQgMjU2IDYzIDI4NiA4OS42IDMyOC41IDEyOC4xIDM2NC4zIDE2OS4yIDQwMi40IDIyMi44IDQzMiAyODggNDMyczExOC44LTI5LjYgMTU5LjktNjcuN0M0ODYuNCAzMjguNSA1MTMgMjg2IDUyNi42IDI1NiA1MTMgMjI2IDQ4Ni40IDE4My41IDQ0Ny45IDE0Ny43IDQwNi44IDEwOS42IDM1My4yIDgwIDI4OCA4MHpNOTUuNCAxMTIuNkMxNDIuNSA2OC44IDIwNy4yIDMyIDI4OCAzMnMxNDUuNSAzNi44IDE5Mi42IDgwLjZjNDYuOCA0My41IDc4LjEgOTUuNCA5MyAxMzEuMSAzLjMgNy45IDMuMyAxNi43IDAgMjQuNi0xNC45IDM1LjctNDYuMiA4Ny43LTkzIDEzMS4xLTQ3LjEgNDMuNy0xMTEuOCA4MC42LTE5Mi42IDgwLjZTMTQyLjUgNDQzLjIgOTUuNCAzOTkuNGMtNDYuOC00My41LTc4LjEtOTUuNC05My0xMzEuMS0zLjMtNy45LTMuMy0xNi43IDAtMjQuNiAxNC45LTM1LjcgNDYuMi04Ny43IDkzLTEzMS4xek0yODggMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuMy0xLjQgNTkuNy00OS42IDEwNy45LTEwOS4zIDEwOS4zIDEzLjggMjMuOSAzOS43IDQwIDY5LjMgNDB6bS03OS42LTg4LjRjMi41IC4zIDUgLjQgNy42IC40IDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMi42LS4yLTUuMS0uNC03LjYtMzcuNCAzLjktNjcuMiAzMy43LTcxLjEgNzEuMXptNDUuNi0xMTVjMTAuOC0zIDIyLjItNC41IDMzLjktNC41IDguOCAwIDE3LjUgLjkgMjUuOCAyLjYgLjMgLjEgLjUgLjEgLjggLjIgNTcuOSAxMi4yIDEwMS40IDYzLjcgMTAxLjQgMTI1LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNjEuNiAwLTExMy00My41LTEyNS4yLTEwMS40LTEuOC04LjYtMi44LTE3LjUtMi44LTI2LjYgMC0xMSAxLjQtMjEuOCA0LTMyIC4yLS43IC4zLTEuMyAuNS0xLjkgMTEuOS00My40IDQ2LjEtNzcuNiA4OS41LTg5LjV6Il19LGFQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utc2FkLXRlYXIiLGljb246WzUxMiw1MTIsWzEyODU0Niwic2FkLXRlYXIiXSwiZjViNCIsIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA0MS44IDEyLjMgODAuNyAzMy42IDExMy4zIDguMiA0NC43IDQ3LjMgNzguNiA5NC4zIDc4LjcgMjQuNyAxMC4zIDUxLjcgMTYgODAuMSAxNiAxMTQuOSAwIDIwOC05My4xIDIwOC0yMDh6TTI4OCAzNTJjLTUuNSAwLTEwLjkgLjYtMTYgMS44IDAtLjYgMC0xLjIgMC0xLjggMC0xNi4yLTQtMzEuNS0xMS4xLTQ0LjkgOC43LTIgMTcuOC0zLjEgMjcuMS0zLjEgNDAuMiAwIDc1LjcgMTkuOCA5Ny41IDUwIDcuNyAxMC44IDUuMyAyNS44LTUuNSAzMy41cy0yNS44IDUuMy0zMy41LTUuNWMtMTMuMS0xOC4yLTM0LjQtMzAtNTguNS0zMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4NS40IDI3Ni44YzYuNSA3LjggMTIuNiAxNi4xIDE4LjMgMjQuNiA5IDEzLjQgMjAuMyAzMC4yIDIwLjMgNDcuNCAwIDI4LjMtMjEuNSA1MS4yLTQ4IDUxLjJzLTQ4LTIyLjktNDgtNTEuMmMwLTE3LjIgMTEuMi0zNCAyMC4zLTQ3LjQgNS43LTguNSAxMS45LTE2LjcgMTguMy0yNC42IDIuNC0yLjkgNS43LTQuOCA5LjQtNC44czcgMS45IDkuNCA0Ljh6Il19LEV2ZT1hUCxpUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzaGFyZS1mcm9tLXNxdWFyZSIsaWNvbjpbNTc2LDUxMixbNjE1MDksInNoYXJlLXNxdWFyZSJdLCJmMTRkIiwiTTQyNS41IDdjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzg0LjUgMTQuMyAzODQuNSAyNGwwIDU2LTQ4IDBjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNDYuNyAyMC43IDgwLjQgNDMuNiAxMDMuNCA4LjEgOC4yIDE2LjUgMTQuOSAyNC4zIDIwLjQgOS4yIDYuNSAyMS43IDUuNyAzMC4xLTEuOXMxMC4yLTIwIDQuNS0yOS44Yy0zLjYtNi4zLTYuNS0xNC45LTYuNS0yNi43IDAtMzYuMiAyOS4zLTY1LjUgNjUuNS02NS41bDQ2LjUgMCAwIDU2YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMmwxMzYtMTM2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQyNS41IDd6bTcgOTdsMC0yMi4xIDc4LjEgNzguMS03OC4xIDc4LjEgMC0yMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0TDMzOCAxOTJjLTUwLjkgMC05My45IDMzLjUtMTA4LjMgNzkuNi0zLjMtOS40LTUuMi0xOS44LTUuMi0zMS42IDAtNjEuOSA1MC4xLTExMiAxMTItMTEybDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjR6bS0zMjAtOGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNTZjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQgMHoiXX0sUHZlPWlQLHJQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6Im5vdGUtc3RpY2t5IixpY29uOls0NDgsNTEyLFs2MjAyNiwic3RpY2t5LW5vdGUiXSwiZjI0OSIsIk0yNDAgNDMyTDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNzYtODggMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA4OHpNMzgwLjEgMzIwTDI4OCA0MTIuMSAyODggMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDY4LjEgMHpNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0MjkuMyAzMzguN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2eiJdfSxJdmU9clAsc1A9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1iYWNrLWZpc3QiLGljb246WzM4NCw1MTIsWyJoYW5kLXJvY2siXSwiZjI1NSIsIk05NiA0MDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA0MDB6TTczLjIgMzUybDY0LjYgMC03OS41LTg4LjNDNTEuNyAyNTYuMyA0OCAyNDYuOCA0OCAyMzYuOUw0OCAyMDRjMC0xNi4xIDExLjktMjkuNSAyNy40LTMxLjcgMTEuOC0xLjcgMjAuNi0xMS44IDIwLjYtMjMuOEw5NiA3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3LjIgMCAxMy42IDMuMSAxOCA4LjEgNC42IDUuMiAxMS4xIDguMSAxOCA4LjFzMTMuNC0zIDE4LTguMWM0LjQtNSAxMC44LTguMSAxOC04LjEgOC41IDAgMTUuOSA0LjQgMjAuMiAxMS4xIDYuOSAxMC43IDIwLjkgMTQuMiAzMiA4IDMuNS0xLjkgNy40LTMuMSAxMS44LTMuMSAxMC42IDAgMTkuNyA2LjkgMjIuOCAxNi42IDMuOCAxMS43IDE1LjkgMTguNyAyOCAxNiAxLjctLjQgMy40LS42IDUuMi0uNiAxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDkyLjJjMCAxNC40LTMuNSAyOC41LTEwLjIgNDEuMmwtNTIuMiA5OC42IDU0LjMgMCA0MC4zLTc2LjJjMTAuNC0xOS42IDE1LjgtNDEuNSAxNS44LTYzLjZsMC05Mi4yYzAtMzguNC0zMC4xLTY5LjgtNjguMS03MS45LTEyLjktMTkuMy0zNC45LTMyLjEtNTkuOS0zMi4xLTUuNyAwLTExLjIgLjctMTYuNSAxLjktMTIuNy0xMS4xLTI5LjMtMTcuOS00Ny41LTE3LjktMTMuMSAwLTI1LjQgMy41LTM2IDkuNi0xMC42LTYuMS0yMi45LTkuNi0zNi05LjYtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA1OC43QzE5LjcgMTQzIDAgMTcxLjIgMCAyMDRsMCAzMi45YzAgMjEuNyA4IDQyLjcgMjIuNiA1OC45TDczLjIgMzUyeiJdfSxOdmU9c1AsRnZlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNoZXNzLXF1ZWVuIixpY29uOls1MTIsNTEyLFs5ODE5XSwiZjQ0NSIsIk0zMjUuMyA5MC44YzkuMS00LjggMjAuNi0zLjMgMjguMiA0LjNsMzkuOCAzOS44IDMuNyAzLjNjOS4xIDcuMSAyMC45IDEwIDMyLjQgNy43bDQ2LjQtOS4zIDMuNS0uNGM4LS40IDE1LjggMy4yIDIwLjYgOS44IDUuNSA3LjYgNi4xIDE3LjYgMS42IDI1LjhsLTExMi42IDIwMi42IDUxLjUgNzAuOSAxLjggMi43YzQgNi42IDYuMiAxNC4yIDYuMiAyMiAwIDIzLjMtMTguOSA0Mi4xLTQyLjEgNDIuMWwtMjk5LjggMGMtMjEuOCAwLTM5LjgtMTYuNi00MS45LTM3LjhsLS4yLTQuMyAuMS0zLjNjLjYtNy43IDMuNC0xNS4xIDcuOS0yMS40bDUxLjUtNzAuOS0xMTIuNS0yMDIuNmMtNC41LTguMi0zLjktMTguMyAxLjYtMjUuOHMxNC45LTExLjIgMjQuMS05LjRsNDYuNCA5LjNjMTMuMSAyLjYgMjYuNy0xLjUgMzYuMS0xMC45TDE1OS41IDk1IDE2MyA5Mi4yYzguNi01LjggMjAuMS01LjYgMjguNSAxLjFsNDAgMzIgMi44IDIuMWMxNC40IDkuNiAzMy41IDguOSA0Ny4yLTIuMWw0MC0zMiAzLjgtMi41ek0xNjQuNyA0MDBsLTQ2LjYgNjQgMjc2LjcgMC00Ni42LTY0LTE4My42IDB6TTMxMS41IDE2Mi44Yy0zMC4xIDI0LjEtNzIuMSAyNS42LTEwMy44IDQuNWwtNi4yLTQuNS0yMy4zLTE4LjYtMjQuNiAyNC42Yy0xOS44IDE5LjgtNDcuNyAyOC45LTc1LjEgMjQuOGw4OC4xIDE1OC41IDE3OS44IDAgODgtMTU4LjVjLTI1LjcgMy44LTUxLjctMy45LTcxLjEtMjFsLTQtMy43LTI0LjYtMjQuNi0yMy4yIDE4LjZ6TTI1Ni41IDcyYTQwIDQwIDAgMSAxIDAtODAgNDAgNDAgMCAxIDEgMCA4MHoiXX0sblA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLXRlYXJzIixpY29uOls2NDAsNTEyLFsxMjg1MTQsImdyaW4tdGVhcnMiXSwiZjU4OCIsIk01MDQuMSAzNTNDNTEyLjkgMzY3LjIgNTI1LjMgMzc5IDUzOS44IDM4Ny4yIDQ5NS4xIDQ2MiA0MTMuNCA1MTIgMzIwIDUxMlMxNDQuOSA0NjIgMTAwLjIgMzg3LjJjMTQuNi04LjIgMjYuOS0yMCAzNS44LTM0LjMgMzQuOSA2NiAxMDQuMiAxMTEgMTg0LjEgMTExczE0OS4yLTQ1IDE4NC4xLTExMXptMTYuNC0xNTIuNUM0OTYuMiAxMTIuNiA0MTUuNyA0OCAzMjAgNDhTMTQzLjggMTEyLjYgMTE5LjUgMjAwLjVjLTEwLjYtNC44LTIyLjctNi44LTM1LjQtNWwtMTMuNCAxLjlDOTcuMiA4NC4zIDE5OC44IDAgMzIwIDBTNTQyLjggODQuMyA1NjkuMyAxOTcuNGwtMTMuNC0xLjljLTEyLjctMS44LTI0LjggLjItMzUuNCA1ek00NTUuOCAzMjBjLTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44ek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAgMjguNC0yMyA1MS40LTUxLjQgNTEuNC0yNS42IDAtNDcuMy0xOC44LTUwLjktNDQuMUw1MzEgMjYxLjFjLTEuNS0xMC42IDcuNS0xOS42IDE4LjEtMTguMWw0Ni43IDYuN2MyNS4zIDMuNiA0NC4xIDI1LjMgNDQuMSA1MC45em0tNjQwIDBjMC0yNS42IDE4LjgtNDcuMyA0NC4xLTUwLjlMOTAuOSAyNDNjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0M5OC43IDMzMy4yIDc3IDM1MiA1MS40IDM1MiAyMyAzNTIgMCAzMjkgMCAzMDAuNnoiXX0sT3ZlPW5QLG9QPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InBlbi10by1zcXVhcmUiLGljb246WzUxMiw1MTIsWyJlZGl0Il0sImYwNDQiLCJNNDQxIDU4LjlMNDUzLjEgNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNDI0IDEzNC4xIDM3Ny45IDg4IDQwNyA1OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwek0yMDkuOCAyNTYuMkwzNDQgMTIxLjkgMzkwLjEgMTY4IDI1NS44IDMwMi4yYy0yLjkgMi45LTYuNSA1LTEwLjQgNi4xbC01OC41IDE2LjcgMTYuNy01OC41YzEuMS0zLjkgMy4yLTcuNSA2LjEtMTAuNHpNMzczLjEgMjVMMTc1LjggMjIyLjJjLTguNyA4LjctMTUgMTkuNC0xOC4zIDMxLjFsLTI4LjYgMTAwYy0yLjQgOC40LS4xIDE3LjQgNi4xIDIzLjZzMTUuMiA4LjUgMjMuNiA2LjFsMTAwLTI4LjZjMTEuOC0zLjQgMjIuNS05LjcgMzEuMS0xOC4zTDQ4NyAxMzguOWMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjhMNDc0LjkgMjVDNDQ2LjgtMy4xIDQwMS4yLTMuMSAzNzMuMSAyNXpNODggNjRDMzkuNCA2NCAwIDEwMy40IDAgMTUyTDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4bDI3MiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwTDg4IDQ2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0yNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6Il19LFJ2ZT1vUCxsUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tYmVhbS1zd2VhdCIsaWNvbjpbNTc2LDUxMixbMTI4NTE3LCJncmluLWJlYW0tc3dlYXQiXSwiZjU4MyIsIk01MzAuMiAxNS45Yy04LjgtMTAuNy0xOC41LTIwLjktMjktMzAtMy0yLjYtNy40LTIuNi0xMC40IDAtMTAuNSA5LjEtMjAuMSAxOS4zLTI5IDMwLTE0LjcgMTcuOC0yOS44IDQwLjEtMjkuOCA2NC4xIDAgMzYuNCAyNy42IDY0IDY0IDY0czY0LTI3LjYgNjQtNjRjMC0yNC0xNS4yLTQ2LjMtMjkuOC02NC4xem0tMTMyIDguOUMzNjQuOCA4LjkgMzI3LjQgMCAyODggMCAxNDYuNiAwIDMyIDExNC42IDMyIDI1NlMxNDYuNiA1MTIgMjg4IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NmMwLTI0LjQtMy40LTQ4LTkuOC03MC40LTExLjkgNC4yLTI0LjcgNi40LTM4LjIgNi40LTMuNCAwLTYuOC0uMS0xMC4yLS40IDYuNiAyMC4zIDEwLjIgNDEuOSAxMC4yIDY0LjQgMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzgwIDM3MC45IDgwIDI1NiAxNzMuMSA0OCAyODggNDhjMzQuOCAwIDY3LjUgOC41IDk2LjMgMjMuNiAxLjQtMTcuNCA2LjktMzMuMSAxMy44LTQ2Ljh6TTQyMy44IDMyMGM0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggMTkuOCA1NS45IDczLjEgOTUuOSAxMzUuOCA5NS45IDYyLjcgMCAxMTYtNDAuMSAxMzUuOC05NnpNMTgwIDIwOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHptMTg4LTI4YzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHoiXX0sQnZlPWxQLGNQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNsb2NrIixpY29uOls1MTIsNTEyLFsxMjgzMzksImNsb2NrLWZvdXIiXSwiZjAxNyIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXX0sSHZlPWNQLGRQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtbGF1Z2gtd2luayIsaWNvbjpbNTEyLDUxMixbImxhdWdoLXdpbmsiXSwiZjU5YyIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdfSxxdmU9ZFAsVnZlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InBhcGVyLXBsYW5lIixpY29uOls1NzYsNTEyLFs2MTkxM10sImYxZDgiLCJNMjkwLjUgMjg3LjdMNDkxLjQgODYuOSAzNTkgNDU2LjMgMjkwLjUgMjg3Ljd6TTQ1Ny40IDUzTDI1Ni42IDI1My44IDg4IDE4NS4zIDQ1Ny40IDUzek0zOC4xIDIxNi44bDIwNS44IDgzLjYgODMuNiAyMDUuOGM1LjMgMTMuMSAxOC4xIDIxLjcgMzIuMyAyMS43IDE0LjcgMCAyNy44LTkuMiAzMi44LTIzLjFMNTcwLjYgOGMzLjUtOS44IDEtMjAuNi02LjMtMjhzLTE4LjItOS44LTI4LTYuM0wzOS40IDE1MS43Yy0xMy45IDUtMjMuMSAxOC4xLTIzLjEgMzIuOCAwIDE0LjIgOC42IDI3IDIxLjcgMzIuM3oiXX0sanZlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhlYXJ0IixpY29uOls1MTIsNTEyLFsxMjgxNTMsMTI4MTU0LDEyODE1NSwxMjgxNTYsMTI4NDIwLDEyOTI5MywxMjkyOTQsMTI5NTA1LDk4MjksMTAwODQsNjE1NzhdLCJmMDA0IiwiTTM3OC45IDgwYy0yNy4zIDAtNTMgMTMuMS02OSAzNS4ybC0zNC40IDQ3LjZjLTQuNSA2LjItMTEuNyA5LjktMTkuNCA5LjlzLTE0LjktMy43LTE5LjQtOS45bC0zNC40LTQ3LjZjLTE2LTIyLjEtNDEuNy0zNS4yLTY5LTM1LjItNDcgMC04NS4xIDM4LjEtODUuMSA4NS4xIDAgNDkuOSAzMiA5OC40IDY4LjEgMTQyLjMgNDEuMSA1MCA5MS40IDk0IDEyNS45IDEyMC4zIDMuMiAyLjQgNy45IDQuMiAxNCA0LjJzMTAuOC0xLjggMTQtNC4yYzM0LjUtMjYuMyA4NC44LTcwLjQgMTI1LjktMTIwLjMgMzYuMi00My45IDY4LjEtOTIuNCA2OC4xLTE0Mi4zIDAtNDctMzguMS04NS4xLTg1LjEtODUuMXpNMjcxIDg3LjFjMjUtMzQuNiA2NS4yLTU1LjEgMTA3LjktNTUuMSA3My41IDAgMTMzLjEgNTkuNiAxMzMuMSAxMzMuMSAwIDY4LjYtNDIuOSAxMjguOS03OS4xIDE3Mi44LTQ0LjEgNTMuNi05Ny4zIDEwMC4xLTEzMy44IDEyNy45LTEyLjMgOS40LTI3LjUgMTQuMS00My4xIDE0LjFzLTMwLjgtNC43LTQzLjEtMTQuMUMxNzYuNCA0MzggMTIzLjIgMzkxLjUgNzkuMSAzMzggNDIuOSAyOTQuMSAwIDIzMy43IDAgMTY1LjEgMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43eiJdfSxqZj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmb250LWF3ZXNvbWUiLGljb246WzUxMiw1MTIsWzYyNTAxLDYyNjk0LCJmb250LWF3ZXNvbWUtZmxhZyIsImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwiZjJiNCIsIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDQ4IDAgMC02NCAzODkuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpNODAgNDAwbDAtMjU2IDM1Ni40IDAtNDguMiAxMDguNWMtNS41IDEyLjQtNS41IDI2LjYgMCAzOUw0MzYuNCA0MDAgODAgNDAweiJdfSxVdmU9amYsV3ZlPWpmLEd2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbG9uZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI0ZCIsIk0yODggNDY0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDgtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2ek0yMjQgMzA0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwem0tNjQtMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0eiJdfSxZdmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZm9sZGVyLW9wZW4iLGljb246WzU3Niw1MTIsWzEyODE5NCwxMjg0NDksNjE3MTddLCJmMDdjIiwiTTk3LjUgNDAwbDUwLTE2MCAzNzkuNCAwLTUwIDE2MC0zNzkuNCAwem0xOTAuNyA0OEw0NzcgNDQ4YzIxIDAgMzkuNi0xMy42IDQ1LjgtMzMuN2w1MC0xNjBjOS43LTMwLjktMTMuNC02Mi4zLTQ1LjgtNjIuM2wtMzc5LjQgMGMtMjEgMC0zOS42IDEzLjYtNDUuOCAzMy43TDgwLjIgMjk0LjQgODAuMiA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTM4LjcgMGMzLjUgMCA2LjggMS4xIDkuNiAzLjJMMjgyLjkgMTEyYzEzLjggMTAuNCAzMC43IDE2IDQ4IDE2bDExNy4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDQ4IDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMzMwLjkgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI3My4zIDQ0LjhDMjYyLjIgMzYuNSAyNDguOCAzMiAyMzQuOSAzMkw5Ni4yIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMHoiXX0sWnZlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6IndpbmRvdy1taW5pbWl6ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDY5XSwiZjJkMSIsIk0wIDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxYdmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3Rhci1oYWxmIixpY29uOls1NzYsNTEyLFs2MTczMV0sImYwODkiLCJNMjg1LjctMTUuOGMxMC44IDIuNiAxOC40IDEyLjIgMTguNCAyMy4zbDAgMzg3LjFjMCA5LTUuMSAxNy4zLTEzLjEgMjEuNEwxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM0wxOTMuMSAxMjUuMyAyNTguOC0zLjNjNS05LjkgMTYuMi0xNSAyNy0xMi40ek0yNTYuMSAxMDcuNEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDkyLjItNDYuOSAwLTI3Mi42eiJdfSxLdmU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYWxhcm0tY2xvY2siLGljb246WzUxMiw1MTIsWzkyMDBdLCJmMzRlIiwiTTQwMi42IDUwLjJjLTUuNCAxLjctMTEuMyAxLjgtMTYuMi0uOS01LjgtMy4yLTExLjgtNi4yLTE3LjgtOC45LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMy44LTUuNS03LjgtMTAuOC0xMi0xNi0zLjUtNC40LTQuNS0xMC4yLTMuOC0xNS44IC4yLTEuOSAuNC0zLjkgLjQtNS45IDAtMjYuMS0yMS4yLTQ3LjItNDcuMi00Ny4yLTQuOSAwLTkuNyAuOC0xNC4yIDIuMnpNMzIuNSAxMzIuOWMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNi4xIDIuOC0xMiA1LjctMTcuOCA4LjktNC45IDIuNy0xMC45IDIuNi0xNi4yIC45LTQuNS0xLjQtOS4yLTIuMi0xNC4yLTIuMi0yNi4xIDAtNDcuMiAyMS4yLTQ3LjIgNDcuMiAwIDIgLjEgNCAuNCA1LjkgLjcgNS42LS4zIDExLjQtMy44IDE1LjgtNC4yIDUuMi04LjIgMTAuNS0xMiAxNnpNNDMyIDI4OGExNzYgMTc2IDAgMSAwIC0zNTIgMCAxNzYgMTc2IDAgMSAwIDM1MiAwek0zOTYuNSA0NjIuNUMzNTguMSA0OTMuNCAzMDkuMiA1MTIgMjU2IDUxMnMtMTAyLjEtMTguNi0xNDAuNS00OS41TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Mi41LTQyLjVDNTAuNiAzOTAuMSAzMiAzNDEuMiAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTMuMi0xOC42IDEwMi4xLTQ5LjUgMTQwLjVMNDczIDQ3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Mi41LTQyLjV6TTI4MCAxODRsMCA5NC4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy00LjUtNC41LTctMTAuNi03LTE3bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LFF2ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJuZXdzcGFwZXIiLGljb246WzUxMiw1MTIsWzEyODI0MF0sImYxZWEiLCJNMTY4IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDguNC0xLjQgMTYuNS00LjEgMjRMNDQwIDQzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxNjggODB6TTcyIDQ4MGMtMzkuOCAwLTcyLTMyLjItNzItNzJMMCAxMTJDMCA5OC43IDEwLjcgODggMjQgODhzMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDI3MiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMzA0YzAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDQ4MHpNMTkyIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6bTE1MiAyNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yMTYgMjU2bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA4MGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LFVmPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6Imhvc3BpdGFsIixpY29uOls1NzYsNTEyLFsxMjc5NzMsNjI1ODksImhvc3BpdGFsLWFsdCIsImhvc3BpdGFsLXdpZGUiXSwiZjBmOCIsIk0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE3NiAwek0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjcyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MC0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjcyYzAtOC44IDcuMi0xNiAxNi0xNmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNzJ6TTExMiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNOTYgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMyMCAwbDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2LTExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yNjQgMTA0bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMiAzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdfSxKdmU9VWYsZXllPVVmLHBQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1zdG9wIixpY29uOls1MTIsNTEyLFs2MjA5NCwic3RvcC1jaXJjbGUiXSwiZjI4ZCIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2MCAxOTJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNDggMTEybDAtOTYgOTYgMCAwIDk2LTk2IDB6Il19LHR5ZT1wUCxheWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToib2JqZWN0LXVuZ3JvdXAiLGljb246WzY0MCw1MTIsW10sImYyNDgiLCJNNDguMiA2Ni44Yy0uMS0uOC0uMi0xLjctLjItMi41bDAtLjJjMC04LjggNy4yLTE2IDE2LTE2IC45IDAgMS45IC4xIDIuOCAuMiA3LjUgMS4zIDEzLjIgNy45IDEzLjIgMTUuOCAwIDguOC03LjIgMTYtMTYgMTYtNy45IDAtMTQuNS01LjctMTUuOC0xMy4yek0wIDY0YzAgMjYuOSAxNi41IDQ5LjkgNDAgNTkuM2wwIDEwNS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBMMTIzLjMgNDBDMTEzLjkgMTYuNSA5MC45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjR6bTM2OCAwYTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTMyNC43IDg4YzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMTA1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0yMDEuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTEwNS4zYzE2LTYuNSAyOC45LTE5LjMgMzUuMy0zNS4zbDIwMS4zIDB6TTM4NCAyNzJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyek04MCAyODhjMCA3LjktNS43IDE0LjUtMTMuMiAxNS44LS44IC4xLTEuNyAuMi0yLjUgLjJsLS4yIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLS45IC4xLTEuOSAuMi0yLjggMS4zLTcuNSA3LjktMTMuMiAxNS44LTEzLjIgOC44IDAgMTYgNy4yIDE2IDE2em00MzYuNy00MGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDEwNS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMjAxLjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yMC43LTQ4IDAgMCAyMC43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBsLTUyLjcgMCAwIDkuNmMxMC43IDEwLjkgMTkuMSAyMy45IDI0LjYgMzguNGwyOCAwem01OS4zLThhMTYgMTYgMCAxIDEgMC0zMiAxNiAxNiAwIDEgMSAwIDMyek0yNzEuOCA0NTAuN2ExNiAxNiAwIDEgMSAtMzEuNS01LjUgMTYgMTYgMCAxIDEgMzEuNSA1LjV6bTMwMS41IDEzYy03LjUtMS4zLTEzLjItNy45LTEzLjItMTUuOCAwLTguOCA3LjItMTYgMTYtMTYgNy45IDAgMTQuNSA1LjcgMTUuOCAxMy4ybDAgLjFjLjEgLjkgLjIgMS44IC4yIDIuNyAwIDguOC03LjIgMTYtMTYgMTYtLjkgMC0xLjktLjEtMi44LS4yeiJdfSxpeWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY29tbWVudCIsaWNvbjpbNTEyLDUxMixbMTI4NDg5LDYxNjY5XSwiZjA3NSIsIk01MS45IDM4NC45QzE5LjMgMzQ0LjYgMCAyOTQuNCAwIDI0MCAwIDEwNy41IDExNC42IDAgMjU2IDBTNTEyIDEwNy41IDUxMiAyNDAgMzk3LjQgNDgwIDI1NiA0ODBjLTM2LjUgMC03MS4yLTcuMi0xMDIuNi0yMEwzNyA1MDkuOWMtMy43IDEuNi03LjUgMi4xLTExLjUgMi4xLTE0LjEgMC0yNS41LTExLjQtMjUuNS0yNS41IDAtNC4zIDEuMS04LjUgMy4xLTEyLjJsNDguOC04OS40em0zNy4zLTMwLjJjMTIuMiAxNS4xIDE0LjEgMzYuMSA0LjggNTMuMmwtMTggMzMuMSA1OC41LTI1LjFjMTEuOC01LjEgMjUuMi01LjIgMzcuMS0uMyAyNS43IDEwLjUgNTQuMiAxNi40IDg0LjMgMTYuNCAxMTcuOCAwIDIwOC04OC44IDIwOC0xOTJTMzczLjggNDggMjU2IDQ4IDQ4IDEzNi44IDQ4IDI0MGMwIDQyLjggMTUuMSA4Mi40IDQxLjIgMTE0Ljd6Il19LHJ5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaGVzcy1wYXduIixpY29uOlszODQsNTEyLFs5ODIzXSwiZjQ0MyIsIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy42LTkuMyA1Mi45LTI0LjkgNzMuMiA5LjggMyAxNi45IDEyLjEgMTYuOSAyMi44IDAgMTMuMy0xMC43IDI0LTI0IDI0bC0uNiAwIDI0LjYgMTYwIDUzLjYgNjdjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDYzLjQgNTEyYy0yNi4yIDAtNDcuNC0yMS4yLTQ3LjQtNDcuNCAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDUzLjYtNjcgMjQuNi0xNjAtLjYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC44IDcuMS0xOS44IDE2LjktMjIuOC0xNS42LTIwLjMtMjQuOS00NS42LTI0LjktNzMuMiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHpNMTE1LjkgNDAwbC01MS4yIDY0IDI1NC43IDAtNTEuMi02NC0xNTIuMiAwem0zNi4yLTE4NC43bC0yMSAxMzYuNyAxMjEuOSAwLTIxLTEzNi43LTEuMS03LjMtNzcuNiAwLTEuMSA3LjN6TTE5MiAxNmE3MiA3MiAwIDEgMCAwIDE0NCA3MiA3MiAwIDEgMCAwLTE0NHoiXX0sc3llPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNhbGVuZGFyLXBsdXMiLGljb246WzQ0OCw1MTIsW10sImYyNzEiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMTA0IDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDggNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDgtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il19LG55ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbGlwYm9hcmQiLGljb246WzM4NCw1MTIsWzEyODIwM10sImYzMjgiLCJNMjMyIDk2bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTAgNDhjMzcuMSAwIDY3LjYtMjggNzEuNi02NEwzMjAgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzUyYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYuNCAwYzQgMzYgMzQuNSA2NCA3MS42IDY0bDgwIDB6TTI5MS45IDMyQzI3OSAxMi43IDI1NyAwIDIzMiAwTDE1MiAwYy0yNSAwLTQ3IDEyLjctNTkuOSAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yOC4xIDB6Il19LG95ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJ0aHVtYnMtZG93biIsaWNvbjpbNTEyLDUxMixbMTI4MDc4LDYxNTc2XSwiZjE2NSIsIk0zNjAgMzJsNy40IC40YzM1IDMuNiA2Mi41IDMyLjIgNjQuNCA2Ny43IDE3LjggMTEuOCAzMC4xIDMxLjQgMzIgNTMuOWwuMiA2YzAgNS43LS43IDExLjItMiAxNi41IDEwLjIgMTEuNSAxNi44IDI2LjMgMTcuOCA0Mi43bC4yIDQuOGMwIDEzLjItMy42IDI1LjQtOS44IDM2IDQuOSA4LjQgOC4yIDE3LjkgOS4zIDI4bC40IDhjMCAzNy4zLTI4LjMgNjcuOS02NC42IDcxLjZsLTcuNCAuNC0xMDkuNyAwIDE0LjEgMzAgMy4xIDcuNmMxMi41IDM1LjctMS44IDc1LjUtMzQuMiA5NWwtNy4yIDMuOWMtMzcuNSAxNy42LTgxLjcgMy42LTEwMi42LTMxLjJsLS42LS45LTIuNy01LS42LTEuMi0zMC4xLTY0Yy05LjQgMTcuOC0yOCAyOS45LTQ5LjUgMjkuOWwtMzIgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCAxNTJjMC0zMC45IDI1LjEtNTYgNTYtNTZsMzIgMGMxMi40IDAgMjMuOSA0LjEgMzMuMiAxMSAxMy4yLTIxLjQgMzItMzkuNCA1NS01MS42bDEyLjItNi41IC43LS4zIDYuNi0zLjIgLjctLjMgNy4xLTNjMTYuNy02LjYgMzQuNS05LjkgNTIuNi05LjlMMzYwIDMyek0yNTUuOSA4MGMtMTIgMC0yMy45IDIuMy0zNS4xIDYuNmwtNC43IDItNS4zIDIuNiAwIDAtMTIuMiA2LjVjLTI5LjIgMTUuNS00OC4zIDQ0LjktNTAuNyA3Ny42bC0uMiA4IDAgMTEyLjkgLjEgNC4xYy41IDguMiAyLjUgMTYuMiA2IDIzLjdsNTYuOCAxMjAuOSAyLjEgMy44YzguNCAxMy43IDI2IDE5LjEgNDAuOCAxMi4ybDIuOS0xLjZjMTMtNy44IDE4LjctMjMuNyAxMy43LTM4bC0xLjItMy0zMC4yLTY0LjJjLTMuNS03LjQtMi45LTE2LjEgMS41LTIzLjFzMTItMTEuMSAyMC4yLTExLjFsMTQ3LjUgMCAyLjQtLjFjMTEuMy0xLjEgMjAuMy0xMC4xIDIxLjQtMjEuNGwuMS0yLjVjMC03LjEtMy4xLTEzLjUtOC4yLTE4LTUuMi00LjYtOC4yLTExLjEtOC4yLTE4czMtMTMuNCA4LjItMThjNC40LTMuOSA3LjQtOS4zIDgtMTUuM2wuMi0yLjdjMC04LjQtNC40LTE1LjktMTEuMi0yMC4yLTEwLjctNi45LTE0LjItMjAuOS04LTMyIDEuNS0yLjYgMi41LTUuNiAyLjktOC42bC4yLTMuMmMwLTEwLjYtNi45LTE5LjYtMTYuNi0yMi44LTExLjctMy44LTE4LjctMTUuOS0xNi0yOCAuMi0uOSAuMy0xLjggLjQtMi42bC4yLTIuNmMwLTEyLjQtOS41LTIyLjYtMjEuNi0yMy44TDM2MCA4MCAyNTUuOSA4MHpNNTYgMTQ0Yy00LjQgMC04IDMuNi04IDhsMCAyMjRjMCA0LjQgMy42IDggOCA4bDMyIDBjNC40IDAgOC0zLjYgOC04bDAtMjI0YzAtNC40LTMuNi04LTgtOGwtMzIgMHoiXX0sbHllPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImlkLWJhZGdlIixpY29uOlszODQsNTEyLFtdLCJmMmMxIiwiTTI1NiA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzg0YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0xNjAgMzIwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAweiJdfSxoUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzcXVhcmUtY2hlY2siLGljb246WzQ0OCw1MTIsWzk3NDUsOTk4OSw2MTUxMCwiY2hlY2stc3F1YXJlIl0sImYxNGEiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMjMwLjcgODkuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXX0sY3llPWhQLGR5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaGVzcy1iaXNob3AiLGljb246WzMyMCw1MTIsWzk4MjFdLCJmNDNhIiwiTTIxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDgxLjggOTguMWMyNC43IDI5LjYgMzguMiA2NyAzOC4yIDEwNS42IDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNmwtOC42IDguNiA0Ni41IDU4LjJjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDQ3LjQgNTEyQzIxLjIgNTEyIDAgNDkwLjggMCA0NjQuNiAwIDQ1My45IDMuNyA0NDMuNCAxMC40IDQzNWw0Ni41LTU4LjItOC42LTguNkMxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMjAgNDggMTA0IDQ4QzkwLjcgNDggODAgMzcuMyA4MCAyNFM5MC43IDAgMTA0IDBMMjE2IDB6TTk0LjQgNDA2LjhsLTQ1LjcgNTcuMiAyMjIuNyAwLTQ1LjctNTcuMS01LjUtNi45LTEyMC4zIDAtNS41IDYuOHpNMTU2LjkgNzguN0w3NS4xIDE3Ni44Yy0xNS4zIDE4LjQtMjQuNiA0MS0yNi43IDY0LjdMNDggMjUxLjdjMCAzMSAxMi4zIDYwLjcgMzQuMiA4Mi43bDE3LjcgMTcuNyAxMjAuMiAwYzYuMi02LjIgMTIuMS0xMi4xIDE3LjgtMTcuNyAyMS45LTIxLjkgMzQuMi01MS42IDM0LjItODIuNmwtLjQtMTAuMmMtMS41LTE3LTYuNy0zMy4zLTE1LjItNDhMMjA5IDI0MWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1MS44LTUxLjgtNjMuNy03Ni41LTMuMS0zLjgtMy4xIDMuOHoiXX0scHllPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImVudmVsb3BlLW9wZW4iLGljb246WzUxMiw1MTIsWzYyMTM1XSwiZjJiNiIsIk01MTIgNDE2YzAgMzUuMy0yOC41IDY0LTYzLjkgNjRMNjQgNDgwYy0zNS40IDAtNjQtMjguNy02NC02NEwwIDE2NGMuMS0xNS41IDcuOC0zMCAyMC41LTM4LjhMMjA2LTIuN2MzMC4xLTIwLjcgNjkuOC0yMC43IDk5LjkgMEw0OTEuNSAxMjUuMmMxMi44IDguOCAyMC40IDIzLjMgMjAuNSAzOC44bDAgMjUyek02NCA0MzJsMzg0LjEgMGM4LjggMCAxNS45LTcuMSAxNS45LTE2bDAtMTkxLjctMTU0LjggMTE3LjRjLTMxLjQgMjMuOS03NC45IDIzLjktMTA2LjQgMEw0OCAyMjQuMyA0OCA0MTZjMCA4LjkgNy4yIDE2IDE2IDE2ek00NjMuNiAxNjQuNEwyNzguNyAzNi44Yy0xMy43LTkuNC0zMS43LTkuNC00NS40IDBMNDguNCAxNjQuNCAyMzEuOCAzMDMuNWMxNC4zIDEwLjggMzQuMSAxMC44IDQ4LjQgMEw0NjMuNiAxNjQuNHoiXX0saGw9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLXhtYXJrIixpY29uOls1MTIsNTEyLFs2MTUzMiwidGltZXMtY2lyY2xlIiwieG1hcmstY2lyY2xlIl0sImYwNTciLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAweiJdfSxoeWU9aGwsdXllPWhsLHVQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC11cCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS11cCJdLCJmMTUxIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMjQgNjRjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il19LGZ5ZT11UCxteWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1pbWFnZSIsaWNvbjpbMzg0LDUxMixbMTI4NDQzXSwiZjFjNSIsIk0xNzYgNDhMNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwLTg4IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtODh6TTMxNi4xIDE2MEwyMjQgNjcuOSAyMjQgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY4LjEgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMTk3LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0yNTkuNCA0MzJsLTEzNC44IDBjLTE1LjggMC0yOC42LTEyLjgtMjguNi0yOC42IDAtNi40IDIuMS0xMi41IDYtMTcuNmw2Ny42LTg2LjlDMTc1IDI5MiAxODMuMyAyODggMTkyIDI4OHMxNyA0IDIyLjQgMTAuOUwyODIgMzg1LjljMy45IDUgNiAxMS4yIDYgMTcuNiAwIDE1LjgtMTIuOCAyOC42LTI4LjYgMjguNnpNMTEyIDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGZQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC1yaWdodCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1yaWdodCJdLCJmMTUyIiwiTTQwMCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwek0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0zMjAgMjU2YzAgNi43LTIuOCAxMy03LjcgMTcuNmwtMTEyIDEwNGMtNyA2LjUtMTcuMiA4LjItMjUuOSA0LjRTMTYwIDM2OS41IDE2MCAzNjBsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6Il19LGd5ZT1mUCxRZj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJzdW4iLGljb246WzU3Niw1MTIsWzk3MjhdLCJmMTg1IiwiTTI4OC0zMmM4IDAgMTUuNCA0IDE5LjkgMTAuNmw1OC44IDg3LjQgMTAzLjQtMjAuMmM3LjgtMS41IDE1LjkgLjkgMjEuNiA2LjZzOC4xIDEzLjggNi42IDIxLjZMNDc4IDE3Ny4zIDU2NS40IDIzNi4xQzU3MiAyNDAuNSA1NzYgMjQ4IDU3NiAyNTZzLTQgMTUuNC0xMC42IDE5LjlMNDc4IDMzNC43IDQ5OC4yIDQzOGMxLjUgNy44LS45IDE1LjktNi42IDIxLjZzLTEzLjggOC4xLTIxLjYgNi42TDM2Ni43IDQ0NiAzMDcuOSA1MzMuNEMzMDMuNCA1NDAgMjk2IDU0NCAyODggNTQ0cy0xNS40LTQtMTkuOS0xMC42TDIwOS4zIDQ0NiAxMDUuOSA0NjYuMmMtNy44IDEuNS0xNS45LS45LTIxLjYtNi42cy04LjEtMTMuOC02LjYtMjEuNkw5OCAzMzQuNyAxMC42IDI3NS45QzQgMjcxLjQgMCAyNjQgMCAyNTZzNC0xNS40IDEwLjYtMTkuOUw5OCAxNzcuMyA3Ny44IDczLjljLTEuNS03LjggLjktMTUuOSA2LjYtMjEuNnMxMy44LTguMSAyMS42LTYuNmwxMDMuMyAyMC4yIDU4LjgtODcuNCAxLjgtMi4zQzI3NC40LTI5IDI4MS0zMiAyODgtMzJ6bS00Ny44IDEzOGMtNS40IDgtMTUgMTItMjQuNSAxMC4ybC04NC0xNi40IDE2LjQgODRjMS44IDkuNS0yLjIgMTkuMS0xMC4yIDI0LjVMNjcgMjU2IDEzOCAzMDMuOGM4IDUuNCAxMiAxNSAxMC4yIDI0LjVsLTE2LjQgODQgODQtMTYuNCAzLjUtLjRjOC4zLS40IDE2LjMgMy42IDIxIDEwLjZsNDcuOCA3MSA0Ny44LTcxIDIuMi0yLjhjNS42LTYuMSAxNC05IDIyLjMtNy4zbDg0IDE2LjQtMTYuNC04NGMtMS44LTkuNSAyLjItMTkuMSAxMC4yLTI0LjVsNzEtNDcuOC03MS00Ny44Yy04LTUuNC0xMi0xNS0xMC4yLTI0LjVsMTYuNC04NC04NCAxNi40Yy05LjUgMS44LTE5LjEtMi4yLTI0LjUtMTAuMmwtNDcuOC03MS00Ny44IDcxek0yODggMzc2YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptMC0xOTJhNzIgNzIgMCAxIDAgMCAxNDQgNzIgNzIgMCAxIDAgMC0xNDR6Il19LGJ5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJpbWFnZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzZSIsIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTI4IDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTM2IDcyYzguNSAwIDE2LjQgNC41IDIwLjcgMTEuOGw4MCAxMzZjNC40IDcuNCA0LjQgMTYuNiAuMSAyNC4xUzM1Mi42IDM4NCAzNDQgMzg0bC0yNDAgMGMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwxNy4yIDI0LjYgNDYuNS03OWM0LjMtNy4zIDEyLjItMTEuOCAyMC43LTExLjh6Il19LHZ5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJsaWdodGJ1bGIiLGljb246WzM4NCw1MTIsWzEyODE2MV0sImYwZWIiLCJNMjk2LjUgMjkxLjFDMzIxIDI2NS4yIDMzNiAyMzAuNCAzMzYgMTkyIDMzNiAxMTIuNSAyNzEuNSA0OCAxOTIgNDhTNDggMTEyLjUgNDggMTkyYzAgMzguNCAxNSA3My4yIDM5LjUgOTkuMSAyMS4zIDIyLjQgNDQuOSA1NCA1My4zIDkyLjlsMTAyLjQgMGM4LjQtMzkgMzItNzAuNSA1My4zLTkyLjl6bTM0LjggMzNDMzA3LjcgMzQ5IDI4OCAzNzkuNCAyODggNDEzLjdsMCAxOC4zYzAgNDQuMi0zNS44IDgwLTgwIDgwbC0zMiAwYy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE4LjNDOTYgMzc5LjQgNzYuMyAzNDkgNTIuNyAzMjQuMSAyMCAyODkuNyAwIDI0My4yIDAgMTkyIDAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MmMwIDUxLjItMjAgOTcuNy01Mi43IDEzMi4xek0xNDQgMTg0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNiAzOS40LTg4IDg4LTg4IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHoiXX0sV2Y9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYWRkcmVzcy1jYXJkIixpY29uOls1NzYsNTEyLFs2MjE0MCwiY29udGFjdC1jYXJkIiwidmNhcmQiXSwiZjJiYiIsIk01MTIgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsNDQ4IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOCAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bS0zMiA0MGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpNMzc2IDE0NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6Il19LHl5ZT1XZix4eWU9V2YsbVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1tZWgiLGljb246WzUxMiw1MTIsWzEyODUyOCwibWVoIl0sImYxMWEiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE3NiAyNDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTg0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LHd5ZT1tUCxNeWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibWFwIixpY29uOls1MTIsNTEyLFsxMjg1MDYsNjIwNzJdLCJmMjc5IiwiTTUxMiA0OGMwLTguMy00LjMtMTYtMTEuMy0yMC40cy0xNS45LTQuOC0yMy4zLTEuMUwzNTIuNSA4OC4xIDE4MCAyOS40Yy0xMy43LTQuNy0yOC43LTMuOC00MS45IDIuM0wxMy44IDkwLjNDNS40IDk0LjIgMCAxMDIuNyAwIDExMkwwIDQ2NGMwIDguMiA0LjIgMTUuOSAxMS4xIDIwLjNzMTUuNiA0LjkgMjMuMSAxLjRsMTI3LjMtNTkuOSAxNzAuNyA1Ni45YzEzLjcgNC42IDI4LjUgMy43IDQxLjYtMi41bDEyNC40LTU4LjVjOC40LTQgMTMuOC0xMi40IDEzLjgtMjEuN2wwLTM1MnpNMTQ0IDgyLjFsMCAyOTktOTYgNDUuMiAwLTI5OSA5Ni00NS4yem00OCAzMDMuM2wwLTMwMS4xIDEyOCA0My41IDAgMzAwLjMtMTI4LTQyLjd6TTM2OCAxMzRsOTYtNDcuNCAwIDI5OC4yLTk2IDQ1LjIgMC0yOTZ6Il19LHp5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kLXBvaW50LWRvd24iLGljb246WzM4NCw1MTIsW10sImYwYTciLCJNNjQgNDQ4bDAtMTc3LjZjNS4yIDEgMTAuNSAxLjYgMTYgMS42bDE2IDAgMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ6TTgwIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGw0OCAwYzUyLjUgMCA5Ny4xIDMzLjcgMTEzLjQgODAuNy0zLjEtLjUtNi4yLS43LTkuNC0uNy0yMCAwLTM3LjkgOS4yLTQ5LjcgMjMuNi05LTQuOS0xOS40LTcuNi0zMC4zLTcuNi0xNS4xIDAtMjkgNS4zLTQwIDE0LTExLTguOC0yNC45LTE0LTQwLTE0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTgwIDB6TTAgMTkybDAgMGMwIDE4IDYgMzQuNiAxNiA0OGwwIDIwOGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtODJjNS4xIDEuMyAxMC41IDIgMTYgMiAyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzYgNyAyLjYgMTQuNSA0IDIyLjQgNCAyMCAwIDM3LjktOS4yIDQ5LjctMjMuNiA5IDQuOSAxOS40IDcuNiAzMC4zIDcuNiAzNS4zIDAgNjQtMjguNyA2NC02NGwwLTg4QzM4NCA3NS4yIDMwOC44IDAgMjE2IDBMMTY4IDBDNzUuMiAwIDAgNzUuMiAwIDE2OGwwIDI0em0zMzYgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjR6TTE2MCAyNzJjNS41IDAgMTAuOS0uNyAxNi0ybDAgMzRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMiAxNiAwem02NC0yNGwwLTQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTI0eiJdfSxnUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLW1laC1ibGFuayIsaWNvbjpbNTEyLDUxMixbMTI4NTY2LCJtZWgtYmxhbmsiXSwiZjVhNCIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sa3llPWdQLGJQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10b25ndWUiLGljb246WzUxMiw1MTIsWzEyODUzOSwiZ3Jpbi10b25ndWUiXSwiZjU4OSIsIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA3NC4xIDM4LjggMTM5LjIgOTcuMSAxNzYtLjctNS4yLTEuMS0xMC42LTEuMS0xNmwwLTUzLjVjLTEwLjItMTIuNi0xOC4zLTI2LjktMjMuOC00Mi40LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtNS41IDE1LjYtMTMuNiAyOS45LTIzLjggNDIuNWwwIDUzLjVjMCA1LjQtLjQgMTAuOC0xLjEgMTYgNTguNC0zNi44IDk3LjEtMTAxLjkgOTcuMS0xNzZ6bTQ4IDBjMCAxMTYuMy03Ny42IDIxNC42LTE4My45IDI0NS43LTE5LjUgMTYuNC00NC42IDI2LjMtNzIuMSAyNi4zcy01Mi42LTkuOS03Mi4xLTI2LjNDNzcuNiA0NzAuNiAwIDM3Mi4zIDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyMDhsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSxTeWU9YlAsR2Y9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZnV0Ym9sIixpY29uOls1MTIsNTEyLFs5OTE3LCJmdXRib2wtYmFsbCIsInNvY2Nlci1iYWxsIl0sImYxZTMiLCJNMzg3IDIyOC4zYy00LjQtMi44LTcuNi03LTkuMi0xMS45cy0xLjQtMTAuMiAuNS0xNUw0MTEuNiAxMThjLTE5LjktMjIuNC00NC42LTQwLjUtNzIuNC01Mi43bC02OS4xIDU3LjZjLTQgMy4zLTkgNS4xLTE0LjEgNS4xcy0xMC4yLTEuOC0xNC4xLTUuMUwxNzIuOCA2NS4zYy0yNy44IDEyLjItNTIuNSAzMC4zLTcyLjQgNTIuN2wzMy40IDgzLjRjMS45IDQuOCAyLjEgMTAuMSAuNSAxNXMtNC45IDkuMS05LjIgMTEuOUw0OSAyNzYuMmMzIDMwLjkgMTIuNyA1OS43IDI3LjYgODUuMmw4OS43LTZjNS4yLS4zIDEwLjMgMS4xIDE0LjUgNC4yczcuMiA3LjQgOC40IDEyLjVsMjIgODcuMmMxNC40IDMuMiAyOS40IDQuOCA0NC44IDQuOHMzMC4zLTEuNyA0NC44LTQuOGwyMi04Ny4yYzEuMy01IDQuMi05LjQgOC40LTEyLjVzOS4zLTQuNSAxNC41LTQuMmw4OS43IDZjMTUtMjUuNCAyNC43LTU0LjMgMjcuNi04NS4xTDM4NyAyMjguM3pNMjU2IDBhMjU2IDI1NiAwIDEgMSAwIDUxMiAyNTYgMjU2IDAgMSAxIDAtNTEyem02MiAyMjFjOC40IDYuMSAxMS45IDE2LjkgOC43IDI2LjhsLTE4LjMgNTYuM2MtMy4yIDkuOS0xMi40IDE2LjYtMjIuOCAxNi42bC01OS4yIDBjLTEwLjQgMC0xOS42LTYuNy0yMi44LTE2LjZsLTE4LjMtNTYuM2MtMy4yLTkuOSAuMy0yMC43IDguNy0yNi44bDQ3LjktMzQuOGM4LjQtNi4xIDE5LjgtNi4xIDI4LjIgMEwzMTggMjIxeiJdfSxDeWU9R2YsX3llPUdmLHZQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utc3VycHJpc2UiLGljb246WzUxMiw1MTIsWzEyODU1OCwic3VycHJpc2UiXSwiZjVjMiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LFR5ZT12UCx5UD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmb2xkZXIiLGljb246WzUxMiw1MTIsWzEyODE5MywxMjg0NDcsNjE3MTYsImZvbGRlci1ibGFuayJdLCJmMDdiIiwiTTY0IDQwMGwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xNDkuMyAwYy0xNy4zIDAtMzQuMi01LjYtNDgtMTZMMjEyLjMgODMuMmMtMi44LTIuMS02LjEtMy4yLTkuNi0zLjJMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZ6bTM4NCA0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NHoiXX0sTHllPXlQLCR5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjbG91ZCIsaWNvbjpbNTc2LDUxMixbOTcyOV0sImYwYzIiLCJNODAgMTkyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwIDQ3LjEgMCA4OS40IDIwLjQgMTE4LjcgNTIuNyAxMC42LTMuMSAyMS44LTQuNyAzMy4zLTQuNyA2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDEzLjItMi4xIDI1LjktNi4xIDM3LjggNDEuNiAyMS4xIDcwLjEgNjQuMyA3MC4xIDExNC4yIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC01Ni44IDMyLjktMTA1LjkgODAuNy0xMjkuNC0uNC00LjgtLjctOS43LS43LTE0LjZ6TTI0MCA4MGMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA4LjQgLjkgMTYuNiAyLjcgMjQuNSAyLjcgMTIuMS00LjMgMjQuMy0xNi4xIDI4LjEtMzguNyAxMi40LTY2LjYgNDguNy02Ni42IDkxLjQgMCA1MyA0MyA5NiA5NiA5NmwzMDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTM3LjQtMjUuNy02OC45LTYwLjUtNzcuNi03LjUtMS45LTEzLjYtNy4yLTE2LjUtMTQuM3MtMi4xLTE1LjIgMi0yMS43YzctMTEuMSAxMS0yNC4yIDExLTM4LjMgMC0zOS44LTMyLjItNzItNzItNzItMTEuMSAwLTIxLjUgMi41LTMwLjggNi45LTEwLjUgNS0yMy4xIDEuNy0yOS44LTcuOC0yMC4zLTI4LjYtNTMuNy00Ny4xLTkxLjMtNDcuMXoiXX0sQXllPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZSIsaWNvbjpbNTEyLDUxMixbMTI4MzA4LDEyODMwOSwxMjg5OTIsMTI4OTkzLDEyODk5NCwxMjg5OTUsMTI4OTk2LDk2NzksOTg5OCw5ODk5LDExMDQ0LDYxNzA4LDYxOTE1XSwiZjExMSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LHhQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1zcXVpbnQiLGljb246WzUxMiw1MTIsWzEyODUxOCwiZ3Jpbi1zcXVpbnQiXSwiZjU4NSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6bS0yNDkuNi0xNDNjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXX0sRHllPXhQLHdQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS11c2VyIixpY29uOls1MTIsNTEyLFs2MjE0MiwidXNlci1jaXJjbGUiXSwiZjJiZCIsIk00MDYuNSAzOTkuNkMzODcuNCAzNTIuOSAzNDEuNSAzMjAgMjg4IDMyMGwtNjQgMGMtNTMuNSAwLTk5LjQgMzIuOS0xMTguNSA3OS42LTM1LjYtMzcuMy01Ny41LTg3LjktNTcuNS0xNDMuNiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU1LjctMjEuOSAxMDYuMi01Ny41IDE0My42em0tNDAuMSAzMi43QzMzNC40IDQ1Mi40IDI5Ni42IDQ2NCAyNTYgNDY0cy03OC40LTExLjYtMTEwLjUtMzEuN2M3LjMtMzYuNyAzOS43LTY0LjMgNzguNS02NC4zbDY0IDBjMzguOCAwIDcxLjIgMjcuNiA3OC41IDY0LjN6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTI3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6bS04OC00MGE4OCA4OCAwIDEgMCAxNzYgMCA4OCA4OCAwIDEgMCAtMTc2IDB6Il19LEV5ZT13UCxNUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJyZWN0YW5nbGUtbGlzdCIsaWNvbjpbNTEyLDUxMixbImxpc3QtYWx0Il0sImYwMjIiLCJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNjAgMzIwYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTEwNC01NmwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgMTI4bDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sUHllPU1QLHpQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQiLGljb246WzUxMiw1MTIsWzEyOTMwNiw5OTk1LCJoYW5kLXBhcGVyIl0sImYyNTYiLCJNMjU2LjUgMGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2LTctMi42LTE0LjUtNC0yMi40LTQtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxNjUuNS0yLjctMi43Yy0yNS0yNS02NS41LTI1LTkwLjUgMHMtMjUgNjUuNSAwIDkwLjVMMTA3IDQzN2M0OCA0OCAxMTMuMSA3NSAxODEgNzVsMTYuNSAwYzEuNSAwIDMtLjEgNC41LS40IDkxLjctNi4yIDE2NS03OS40IDE3MS4xLTE3MS4xIC4zLTEuNSAuNC0zIC40LTQuNWwwLTE3NmMwLTM1LjMtMjguNy02NC02NC02NC01LjUgMC0xMC45IC43LTE2IDJsMC0yYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2em0tMTYgOTYuMWwwLS4xIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNzIuOWMtLjEgLjYtLjEgMS4zLS4yIDEuOS0zLjQgNjkuNy01OS4zIDEyNS42LTEyOSAxMjktLjYgMC0xLjMgLjEtMS45IC4yTDI4OCA0NjRDMjMyLjkgNDY0IDE4MCA0NDIuMSAxNDEgNDAzLjFMNTMuMiAzMTUuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDQzLjcgNDMuN2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJsMC0yMjMuNGMwLTguOCA3LjItMTYgMTYtMTYgOC44IDAgMTYgNy4xIDE2IDE1LjlsMCAxMzYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM1Ljl6Il19LEl5ZT16UCxOeWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToidGh1bWJzLXVwIixpY29uOls1MTIsNTEyLFsxMjgwNzcsNjE1NzVdLCJmMTY0IiwiTTE3MS41IDM4LjhDMTkyLjMgNCAyMzYuNS0xMCAyNzQgNy42bDcuMiAzLjhDMzE2IDMyLjMgMzMwIDc2LjUgMzEyLjQgMTE0bDAgMC0xNC4xIDMwIDEwOS43IDAgNy40IC40YzM2LjMgMy43IDY0LjYgMzQuNCA2NC42IDcxLjYgMCAxMy4yLTMuNiAyNS40LTkuOCAzNiA2LjEgMTAuNiA5LjcgMjIuOCA5LjggMzYgMCAxOC4zLTYuOSAzNC44LTE4IDQ3LjUgMS4zIDUuMyAyIDEwLjggMiAxNi41IDAgMjUuMS0xMi45IDQ3LTMyLjIgNTkuOS0xLjkgMzUuNS0yOS40IDY0LjItNjQuNCA2Ny43bC03LjQgLjQtMTA0LjEgMGMtMTggMC0zNS45LTMuNC01Mi42LTkuOWwtNy4xLTMtLjctLjMtNi42LTMuMi0uNy0uMy0xMi4yLTYuNWMtMTIuMy02LjUtMjMuMy0xNC43LTMyLjktMjQuMS00LjEgMjYuOS0yNy4zIDQ3LjQtNTUuMyA0Ny40bC0zMiAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDIwMGMwLTMwLjkgMjUuMS01NiA1Ni01NmwzMiAwYzEwLjggMCAyMC45IDMuMSAyOS41IDguNWw1MC4xLTEwNi41IC42LTEuMiAyLjctNSAuNi0uOXpNNTYgMTkyYy00LjQgMC04IDMuNi04IDhsMCAyMjRjMCA0LjQgMy42IDggOCA4bDMyIDBjNC40IDAgOC0zLjYgOC04bDAtMjI0YzAtNC40LTMuNi04LTgtOGwtMzIgMHpNMjUzLjYgNTFjLTE0LjgtNi45LTMyLjMtMS42LTQwLjcgMTJsLTIuMiA0LTU2LjggMTIwLjljLTMuNSA3LjUtNS41IDE1LjUtNiAyMy43bC0uMSA0LjIgMCAxMTIuOSAuMiA3LjljMi40IDMyLjcgMjEuNCA2Mi4xIDUwLjcgNzcuN2wxMS41IDYuMSA2LjMgMy4xYzEyLjQgNS42IDI1LjggOC41IDM5LjQgOC41bDEwNC4xIDAgMi40LS4xYzEyLjEtMS4yIDIxLjYtMTEuNSAyMS42LTIzLjlsLS4yLTIuNmMtLjEtLjktLjItMS43LS40LTIuNi0yLjctMTIuMSA0LjMtMjQuMiAxNi0yOCA5LjctMy4xIDE2LjYtMTIuMiAxNi42LTIyLjggMC00LjMtMS4xLTguMi0zLjEtMTEuOC02LjMtMTEuMS0yLjgtMjUuMiA4LTMyIDYuOC00LjMgMTEuMi0xMS44IDExLjItMjAuMiAwLTcuMS0zLjEtMTMuNS04LjItMTgtNS4yLTQuNi04LjItMTEuMS04LjItMThzMy0xMy40IDguMi0xOGM1LjEtNC41IDguMi0xMC45IDguMi0xOGwtLjEtMi40Yy0xLjEtMTEuMy0xMC4xLTIwLjMtMjEuNC0yMS40bC0yLjQtLjEtMTQ3LjUgMGMtOC4yIDAtMTUuOC00LjItMjAuMi0xMS4xLTQuNC02LjktNS0xNS43LTEuNS0yMy4xTDI2OSA5My42YzctMTUgMS40LTMyLjctMTIuNS00MUwyNTMuNiA1MXoiXX0sRnllPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImJ1aWxkaW5nIixpY29uOlszODQsNTEyLFsxMjc5NzAsNjE2ODddLCJmMWFkIiwiTTY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDgwIDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAgODAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zODRjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDQ4ek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTk2IDQ4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI0MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il19LE95ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaGVzcy1yb29rIixpY29uOlszODQsNTEyLFs5ODIwXSwiZjQ0NyIsIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEzOC43YzAgMTMuOC00LjUgMjcuMy0xMi44IDM4LjRsLTM1LjIgNDYuOSAwIDExMiA0MC44IDY4LjFjNC43IDcuOCA3LjIgMTYuNyA3LjIgMjUuOCAwIDI3LjctMjIuNCA1MC4xLTUwLjEgNTAuMUw1MC4xIDUxMmMtMjcuNyAwLTUwLjEtMjIuNC01MC4xLTUwLjEgMC05LjEgMi41LTE4IDcuMi0yNS44TDQ4IDM2OCA0OCAyNTYgMTIuOCAyMDkuMUM0LjUgMTk4IDAgMTg0LjUgMCAxNzAuN0wwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMHpNNDguMyA0NjAuOGwtLjMgMS4xYzAgMS4yIDEgMi4xIDIuMSAyLjFsMjgzLjggMGMxLjIgMCAyLjEtMSAyLjEtMi4xbC0uMy0xLjEtMzYuNS02MC44LTIxNC40IDAtMzYuNSA2MC44ek00OCAxNzAuN2MwIDIuNiAuNiA1LjEgMS44IDcuNGwxLjQgMi4yIDAgMCAzNS4yIDQ2LjkgOS42IDEyLjggMCAxMTIgMTkyIDAgMC0xMTIgOS42LTEyLjggMzUuMi00Ni45IDAgMCAxLjQtMi4yYzEuMi0yLjMgMS44LTQuOCAxLjgtNy40bDAtMTIyLjctNjQgMCAwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjQtNjQgMCAwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjQtNjQgMCAwIDEyMi43eiJdfSxrUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtcXVlc3Rpb24iLGljb246WzUxMiw1MTIsWzYyMTA4LCJxdWVzdGlvbi1jaXJjbGUiXSwiZjA1OSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni04MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LFJ5ZT1rUCxCeWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZSIsaWNvbjpbMzg0LDUxMixbMTI4MTk2LDEyODQ1OSw2MTQ2Ml0sImYxNWIiLCJNMTc2IDQ4TDY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zMTYuMSAxNjBMMjI0IDY3LjkgMjI0IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDE5Ny41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXX0sU1A9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1zYWQtY3J5IixpY29uOls1MTIsNTEyLFsxMjg1NTcsInNhZC1jcnkiXSwiZjViMyIsIk00MDAgNDA2LjFMNDAwIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE1Mi42Yy0yOC43IDE1LTYxLjQgMjMuNC05NiAyMy40cy02Ny4zLTguNS05Ni0yMy40TDE2MCAyODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTguMUM3Mi42IDM2OC4yIDQ4IDMxNSA0OCAyNTYgNDggMTQxLjEgMTQxLjEgNDggMjU2IDQ4czIwOCA5My4xIDIwOCAyMDhjMCA1OS0yNC42IDExMi4yLTY0IDE1MC4xek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXX0sSHllPVNQLHF5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhci1taW51cyIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3MiIsIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0zMiAxMzZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxDUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLXRpcmVkIixpY29uOls1MTIsNTEyLFsxMjg1NTUsInRpcmVkIl0sImY1YzgiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzYuNSA2NC4zQzE5Ni4xIDMwMi4xIDIyMy44IDI4OCAyNTYgMjg4czU5LjkgMTQuMSA3OS41IDMyLjNjMTkgMTcuOCAzMi41IDQxLjcgMzIuNSA2My43IDAgNS40LTIuNyAxMC40LTcuMiAxMy40cy0xMC4yIDMuNC0xNS4yIDEuM2wtMTcuMi03LjVjLTIyLjgtMTAtNDcuNS0xNS4xLTcyLjQtMTUuMXMtNDkuNiA1LjItNzIuNCAxNS4xbC0xNy4yIDcuNWMtNC45IDIuMi0xMC43IDEuNy0xNS4yLTEuM3MtNy4yLTgtNy4yLTEzLjRjMC0yMiAxMy41LTQ1LjkgMzIuNS02My43ek0xMjIuNiAxNTkuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdfSxWeWU9Q1AsanllPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtcG9pbnQtcmlnaHQiLGljb246WzUxMiw1MTIsW10sImYwYTQiLCJNNDQ4IDEyOGwtMTc3LjYgMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTZsMCAxNiAxNzYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI0IDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjQgMGMtNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsMCA0OGMwIDUyLjUgMzMuNyA5Ny4xIDgwLjcgMTEzLjQtLjUtMy4xLS43LTYuMi0uNy05LjQgMC0yMCA5LjItMzcuOSAyMy42LTQ5LjctNC45LTktNy42LTE5LjQtNy42LTMwLjMgMC0xNS4xIDUuMy0yOSAxNC00MC04LjgtMTEtMTQtMjQuOS0xNC00MGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODB6TTE5MiA2NGwwIDBjMTggMCAzNC42IDYgNDggMTZsMjA4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTgyIDBjMS4zIDUuMSAyIDEwLjUgMiAxNiAwIDI1LjMtMTQuNyA0Ny4yLTM2IDU3LjYgMi42IDcgNCAxNC41IDQgMjIuNCAwIDIwLTkuMiAzNy45LTIzLjYgNDkuNyA0LjkgOSA3LjYgMTkuNCA3LjYgMzAuMyAwIDM1LjMtMjguNyA2NC02NCA2NGwtODggMEM3NS4yIDQ0OCAwIDM3Mi44IDAgMjgwbDAtNDhDMCAxMzkuMiA3NS4yIDY0IDE2OCA2NGwyNCAwem02NCAzMzZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNjQgMHptMTYtMTc2YzAgNS41LS43IDEwLjktMiAxNmwzNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAgMTZ6bS0yNCA2NGwtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0yNCAweiJdfSxfUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtdXAiLGljb246WzUxMiw1MTIsWzYxNDY3LCJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sImYzNWIiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMTA0IDEwNGMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45bDcyIDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEwNCA3MiAwYzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0xMDQtMTA0eiJdfSxVeWU9X1AsV3llPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtc2Npc3NvcnMiLGljb246WzUxMiw1MTIsW10sImYyNTciLCJNLjIgMjc2LjNjLTEuMi0zNS4zIDI2LjQtNjUgNjEuNy02Ni4ybDMuMy0uMS04LjItMS44QzIyLjUgMjAwLjUgLjcgMTY2LjMgOC4zIDEzMS44UzUwLjIgNzUuNSA4NC43IDgzLjJsMTczIDM4LjNjMi4zLTIuOSA0LjYtNS43IDcuMS04LjVsMTguNC0yMC4zQzI5OS45IDc0LjUgMzIzLjUgNjQgMzQ4LjMgNjRsMTAuMiAwYzU0LjEgMCAxMDQuMSAyOC43IDEzMS4zIDc1LjRsMS41IDIuNmMxMy42IDIzLjIgMjAuNyA0OS43IDIwLjcgNzYuNkw1MTIgMzQ0YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC0xMDQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yLjggLjItNS42IC41LTguMy0xOS40LTExLTMyLjUtMzEuOC0zMi41LTU1LjcgMC0uOCAwLTEuNiAwLTIuNEw2Ni40IDMzOGMtMzUuMyAxLjItNjUtMjYuNC02Ni4yLTYxLjd6bTYzLjQtMTguMmMtOC44IC4zLTE1LjcgNy43LTE1LjQgMTYuNnM3LjcgMTUuNyAxNi41IDE1LjRsMTYxLjUtNS42YzkuOC0uMyAxOC43IDUuMyAyMi43IDE0LjJzMi4yIDE5LjMtNC41IDI2LjRjLTIuOCAyLjktNC40IDYuNy00LjQgMTEgMCA4LjggNy4yIDE2IDE2IDE2IDkuMSAwIDE3LjQgNS4xIDIxLjUgMTMuM3MzLjIgMTcuOS0yLjMgMjUuMWMtMiAyLjctMy4yIDYtMy4yIDkuNiAwIDguOCA3LjIgMTYgMTYgMTZsMTA0IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0xMjUuNGMwLTE4LjQtNC45LTM2LjUtMTQuMi01Mi40bC0xLjUtMi42Yy0xOC42LTMyLTUyLjgtNTEuNi04OS44LTUxLjZsLTEwLjIgMGMtMTEuMyAwLTIyIDQuOC0yOS42IDEzLjFsMCAwLTE4LjQgMjAuM2MtLjYgLjYtMS4xIDEuMy0xLjcgMS45bDU3IDEzLjJjOC42IDIgMTQgMTAuNiAxMiAxOS4ycy0xMC42IDE0LTE5LjIgMTJMMjYyLjggMTcxLjggNzQuMyAxMzBjLTguNi0xLjktMTcuMiAzLjUtMTkuMSAxMi4yczMuNSAxNy4yIDEyLjIgMTkuMWwxODcuNSA0MS42YzEwLjIgMi4zIDE3LjggMTAuOSAxOC43IDIxLjRsLjEgMWMuNiA2LjYtMS41IDEzLjEtNS44IDE4LjFzLTEwLjYgNy45LTE3LjIgOC4yTDYzLjYgMjU4LjF6Il19LEd5ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJnZW0iLGljb246WzUxMiw1MTIsWzEyODE0Ml0sImYzYTUiLCJNMTY4LjUgNzJsODcuNSA5MyA4Ny41LTkzLTE3NSAwek0zODMuOSA5OS4xbC03Mi4zIDc2LjkgMTI5IDAtNTYuNi03Ni45em01MCAxMjQuOUw3OC4xIDIyNCAyNTYgNDIwLjMgNDMzLjkgMjI0ek03MS41IDE3NmwxMjkgMC03Mi4zLTc2LjktNTYuNiA3Ni45em00MzQuMyA0MC4xbC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOGwyNDAgMGM3LjYgMCAxNC44IDMuNiAxOS4zIDkuOGwxMTIgMTUyYzYuOCA5LjIgNi4xIDIxLjktMS41IDMwLjR6Il19LEQ1PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InJlY3RhbmdsZS14bWFyayIsaWNvbjpbNTEyLDUxMixbNjIxNjQsInJlY3RhbmdsZS10aW1lcyIsInRpbWVzLXJlY3RhbmdsZSIsIndpbmRvdy1jbG9zZSJdLCJmNDEwIiwiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMzM0LjEgNDkuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNDQuMSA0NC4xIDQ0LjEgNDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00NC4xLTQ0LjEtNDQuMSA0NC4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ0LjEtNDQuMS00NC4xLTQ0LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NC4xIDQ0LjEgNDQuMS00NC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdfSxZeWU9RDUsWnllPUQ1LFh5ZT1ENSxONT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJ0cmFzaC1jYW4iLGljb246WzQ0OCw1MTIsWzYxNDYwLCJ0cmFzaC1hbHQiXSwiZjJlZCIsIk0xNjYuMi0xNmMtMTMuMyAwLTI1LjMgOC4zLTMwIDIwLjhMMTIwIDQ4IDI0IDQ4QzEwLjcgNDggMCA1OC43IDAgNzJTMTAuNyA5NiAyNCA5Nmw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMC0xNi4yLTQzLjJDMzA3LjEtNy43IDI5NS4yLTE2IDI4MS44LTE2TDE2Ni4yLTE2ek0zMiAxNDRsMCAzMDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMDQtNDggMCAwIDMwNGMwIDguOC03LjIgMTYtMTYgMTZMOTYgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMDQtNDggMHptMTYwIDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzZ6bTExMiAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzZ6Il19LEt5ZT1ONSxReWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibGlmZS1yaW5nIixpY29uOls1MTIsNTEyLFtdLCJmMWNkIiwiTTM4NS4xIDQxOS4xQzM0OS43IDQ0Ny4yIDMwNC44IDQ2NCAyNTYgNDY0cy05My43LTE2LjgtMTI5LjEtNDQuOWw4MC40LTgwLjRjMTQuMyA4LjQgMzEgMTMuMyA0OC44IDEzLjNzMzQuNS00LjggNDguOC0xMy4zbDgwLjQgODAuNHptNjguMSAuMkM0ODkuOSAzNzQuOSA1MTIgMzE4LjEgNTEyIDI1NlM0ODkuOSAxMzcuMSA0NTMuMiA5Mi43TDQ2NSA4MWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQxOS4zIDU4LjhDMzc0LjkgMjIuMSAzMTguMSAwIDI1NiAwUzEzNy4xIDIyLjEgOTIuNyA1OC44TDgxIDQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMzNy43IDcxLjYgNDcgODFMNTguOCA5Mi43QzIyLjEgMTM3LjEgMCAxOTMuOSAwIDI1NlMyMi4xIDM3NC45IDU4LjggNDE5LjNMNDcgNDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTEuOC0xMS44QzEzNy4xIDQ4OS45IDE5My45IDUxMiAyNTYgNTEyczExOC45LTIyLjEgMTYzLjMtNTguOEw0MzEgNDY1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTEuOC0xMS44em0tMzQuMS0zNC4xbC04MC40LTgwLjRjOC40LTE0LjMgMTMuMy0zMSAxMy4zLTQ4LjhzLTQuOC0zNC41LTEzLjMtNDguOGw4MC40LTgwLjRDNDQ3LjIgMTYyLjMgNDY0IDIwNy4yIDQ2NCAyNTZzLTE2LjggOTMuNy00NC45IDEyOS4xek0zODUuMSA5Mi45bC04MC40IDgwLjRjLTE0LjMtOC40LTMxLTEzLjMtNDguOC0xMy4zcy0zNC41IDQuOC00OC44IDEzLjNMMTI2LjkgOTIuOUMxNjIuMyA2NC44IDIwNy4yIDQ4IDI1NiA0OHM5My43IDE2LjggMTI5LjEgNDQuOXpNMTczLjMgMzA0LjhMOTIuOSAzODUuMUM2NC44IDM0OS43IDQ4IDMwNC44IDQ4IDI1NnMxNi44LTkzLjcgNDQuOS0xMjkuMWw4MC40IDgwLjRjLTguNCAxNC4zLTEzLjMgMzEtMTMuMyA0OC44czQuOCAzNC41IDEzLjMgNDguOHpNMjA4IDI1NmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdfSxKeWU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY29weXJpZ2h0IixpY29uOls1MTIsNTEyLFsxNjldLCJmMWY5IiwiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjA1LjEgMzA2LjljLTI4LjEtMjguMS0yOC4xLTczLjcgMC0xMDEuOHM3My43LTI4LjEgMTAxLjggMGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjljLTQ2LjktNDYuOS0xMjIuOC00Ni45LTE2OS43IDBzLTQ2LjkgMTIyLjggMCAxNjkuNyAxMjIuOCA0Ni45IDE2OS43IDBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMjguMSAyOC4xLTczLjcgMjguMS0xMDEuOCAweiJdfSxUUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjaXJjbGUtbGVmdCIsaWNvbjpbNTEyLDUxMixbNjE4NDAsImFycm93LWFsdC1jaXJjbGUtbGVmdCJdLCJmMzU5IiwiTTQ4IDI1NmEyMDggMjA4IDAgMSAxIDQxNiAwIDIwOCAyMDggMCAxIDEgLTQxNiAwem00NjQgMGEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0xMjQuNyAyNDQuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsMTA0IDEwNGM0LjYgNC42IDExLjUgNS45IDE3LjQgMy41czkuOS04LjMgOS45LTE0LjhsMC03MiAxMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMDQgMCAwLTcyYzAtNi41LTMuOS0xMi4zLTkuOS0xNC44cy0xMi45LTEuMS0xNy40IDMuNWwtMTA0IDEwNHoiXX0sZXhlPVRQLHR4ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjYWxlbmRhciIsaWNvbjpbNDQ4LDUxMixbMTI4MTk3LDEyODE5OF0sImYxMzMiLCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwek00OCAyMjRsMCAxOTJjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE5Mi0zNTIgMHoiXX0sTFA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1mcm93bi1vcGVuIixpY29uOls1MTIsNTEyLFsxMjg1NTAsImZyb3duLW9wZW4iXSwiZjU3YSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxheGU9TFAsJFA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hhcnQtYmFyIixpY29uOls1MTIsNTEyLFsiYmFyLWNoYXJ0Il0sImYwODAiLCJNNDggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCA0Mi43IDAgNTZMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODAgNDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMkw0OCA1NnptMTA0IDcybDIwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE1MiA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXX0saXhlPSRQLEU1PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhvdXNlIixpY29uOls1MTIsNTEyLFsxMjc5NjgsNjM0OTgsNjM1MDAsImhvbWUiLCJob21lLWFsdCIsImhvbWUtbGctYWx0Il0sImYwMTUiLCJNMjQwIDYuMWM5LjEtOC4yIDIyLjktOC4yIDMyIDBsMjMyIDIwOGM5LjkgOC44IDEwLjcgMjQgMS44IDMzLjlzLTI0IDEwLjctMzMuOSAxLjhsLTgtNy4yIDAgMjA1LjNjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIwNS4zLTggNy4yYy05LjkgOC44LTI1IDgtMzMuOS0xLjhzLTgtMjUgMS44LTMzLjlMMjQwIDYuMXptMTYgNTAuMUw5NiAxOTkuNyA5NiA0NDhjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMC0xMDRjMC0zOS44IDMyLjItNzIgNzItNzJsNDggMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDEwNCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0OC4zLTE2MC0xNDMuNHpNMjA4IDQ2NGw5NiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNHoiXX0scnhlPUU1LHN4ZT1FNSxueGU9RTUsQVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1mcm93biIsaWNvbjpbNTEyLDUxMixbOTc4NSwiZnJvd24iXSwiZjExOSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTMzNC43IDM4NC42QzMxOS43IDM2OSAyOTMuNiAzNTIgMjU2IDM1MnMtNjMuNyAxNy03OC43IDMyLjZjLTkuMiA5LjYtMjQuNCA5LjktMzMuOSAuN3MtOS45LTI0LjQtLjctMzMuOWMyMi4xLTIzIDYwLTQ3LjQgMTEzLjMtNDcuNHM5MS4yIDI0LjQgMTEzLjMgNDcuNGM5LjIgOS42IDguOSAyNC44LS43IDMzLjlzLTI0LjggOC45LTMzLjktLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sb3hlPUFQLFlmPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InVzZXIiLGljb246WzQ0OCw1MTIsWzEyODEwMCw2MjE0NCw2MjQ3MCwidXNlci1hbHQiLCJ1c2VyLWxhcmdlIl0sImYwMDciLCJNMTQ0IDEyOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6bTIwOCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6TTQ4IDQ4MGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGw5NiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NmwtOTYgMEM3OC44IDMwNCAwIDM4Mi44IDAgNDgwbDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOHoiXX0sbHhlPVlmLGN4ZT1ZZixkeGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic25vd2ZsYWtlIixpY29uOls1MTIsNTEyLFsxMDA1MiwxMDA1NF0sImYyZGMiLCJNMjgwLjEtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDc4LjEtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTcgNTcgMCA3Ni41LTY2LjItMzguMi0yMC45LTc3LjhjLTMuNC0xMi44LTE2LjYtMjAuNC0yOS40LTE3Uzk1LjIgOTggOTguNyAxMTAuOGw4LjQgMzEuNS02Ny42LTM5QzI4IDk2LjYgMTMuMyAxMDAuNSA2LjcgMTEyUzQgMTM4LjIgMTUuNSAxNDQuOGw2Ny42IDM5LTMxLjUgOC40Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w3Ny44LTIwLjkgNjYuMiAzOC4yLTY2LjIgMzguMi03Ny44LTIwLjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDMxLjUgOC40LTY3LjYgMzlDNCAzNzMuOCAuMSAzODguNSA2LjcgNDAwczIxLjMgMTUuNCAzMi44IDguOGw2Ny42LTM5LTguNCAzMS41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wyMC45LTc3LjggNjYuMi0zOC4yIDAgNzYuNS01NyA1N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgNzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzguMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtNzYuNSA2Ni4yIDM4LjIgMjAuOSA3Ny44YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC04LjQtMzEuNSA2Ny42IDM5YzExLjUgNi42IDI2LjIgMi43IDMyLjgtOC44czIuNy0yNi4yLTguOC0zMi44bC02Ny42LTM5IDMxLjUtOC40YzEyLjgtMy40IDIwLjQtMTYuNiAxNy0yOS40cy0xNi42LTIwLjQtMjkuNC0xN2wtNzcuOCAyMC45LTY2LjItMzguMiA2Ni4yLTM4LjIgNzcuOCAyMC45YzEyLjggMy40IDI2LTQuMiAyOS40LTE3cy00LjItMjYtMTctMjkuNGwtMzEuNS04LjQgNjcuNi0zOWMxMS41LTYuNiAxNS40LTIxLjMgOC44LTMyLjhzLTIxLjMtMTUuNC0zMi44LTguOGwtNjcuNiAzOSA4LjQtMzEuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTIwLjkgNzcuOC02Ni4yIDM4LjIgMC03Ni41IDU3LTU3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzIDAtNzguMXoiXX0scHhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImJvb2ttYXJrIixpY29uOlszODQsNTEyLFsxMjgyNzgsNjE1OTFdLCJmMDJlIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDE3LjFjMCAyNS42LTI4LjUgNDAuOC00OS44IDI2LjZMMTkyIDQxMi44IDQ5LjggNTA3LjdDMjguNSA1MjEuOSAwIDUwNi42IDAgNDgxLjFMMCA2NHpNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4Ny4yIDExNy40LTc4LjJjMTYuMS0xMC43IDM3LjEtMTAuNyA1My4yIDBMMzM2IDQ1MS4yIDMzNiA2NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6Il19LERQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZS1jYXJldC1sZWZ0IixpY29uOls0NDgsNTEyLFsiY2FyZXQtc3F1YXJlLWxlZnQiXSwiZjE5MSIsIk00OCA0MTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMHptMTYgNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwem02NC0yMjRjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRTMjg4IDE0Mi41IDI4OCAxNTJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6Il19LGh4ZT1EUCxaZj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoYW5kc2hha2UiLGljb246WzY0MCw1MTIsWzEyOTMwOSw2MjY2MiwiaGFuZHNoYWtlLWFsdCIsImhhbmRzaGFrZS1zaW1wbGUiXSwiZjJiNSIsIk01OTguMSA3NS40YzEwLjctNy44IDEzLjEtMjIuOCA1LjMtMzMuNXMtMjIuOC0xMy4xLTMzLjUtNS4zbC03NC41IDU0LjItOS45LTYuNkM0NjUuOCA3MSA0NDIuNiA2NCA0MTguOSA2NGwtNTkuMiAwLS40IDAtMTQzLjYgMGMtMjYuNyAwLTUyLjUgOC45LTczLjQgMjUuMUw3MC4xIDM2LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zcy01LjQgMjUuNyA1LjMgMzMuNWw4OCA2NGM5LjYgNi45IDIyLjcgNS45IDMxLjEtMi40bDMuOS0zLjljMTMuNS0xMy41IDMxLjgtMjEuMSA1MC45LTIxLjFsNDYuMyAwLTkxLjcgOTEuN2MtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsLjggLjhDMjE4IDMwOCAyOTQgMzA4IDM0MC45IDI2MS4xbDI3LjEtMjcuMSA5Ny44IDk3LjhjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTkuOCA5LjgtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMjggMjhjLTE3LjUgMTAuNC0zNy4yIDE2LjctNTcuNiAxOC41TDMxMyAzOTljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtMy44IDBjLTM2LjEgMC03MC43LTE0LjMtOTYuMi0zOS44TDY1IDI3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxNjAuMiA0NDIuMWMzNC41IDM0LjUgODEuMyA1My45IDEzMC4xIDUzLjlsNTEuOCAwIDEgMSAxLTEgNS43IDBjNDguOCAwIDk1LjYtMTkuNCAxMzAuMS01My45bDE5LjktMTkuOWMxLjItMS4yIDIuMy0yLjMgMy40LTMuNSAuNy0uNSAxLjMtMS4xIDEuOS0xLjdMNjA5IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01My44IDUzLjhjLTQuMi0xMi44LTExLjMtMjQuOS0yMS41LTM1LjFMMzg1IDE4M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTQ0LjEgNDQuMWMtMjYuNSAyNi41LTY4LjUgMjgtOTYuNyA0LjZsOTguNy05OC43YzEzLjQtMTMuNCAzMS42LTIxIDUwLjYtMjEuMWw4LjUgMCAuMiAwIDUwLjggMGMxNC4yIDAgMjguMSA0LjIgMzkuOSAxMi4xTDQ4Mi43IDE0MGM4LjQgNS42IDE5LjMgNS4zIDI3LjQtLjZsODgtNjR6Il19LHV4ZT1aZixmeGU9WmYsRVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1zbWlsZS13aW5rIixpY29uOls1MTIsNTEyLFsxMjg1MjEsInNtaWxlLXdpbmsiXSwiZjRkYSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il19LG14ZT1FUCxQUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIixpY29uOls1MTIsNTEyLFsxMjkzMTUsImdyaW4tc3F1aW50LXRlYXJzIl0sImY1ODYiLCJNNDAzLjEgNDAzLjFjNjcuMi02Ny4yIDc4LjgtMTY4LjkgMzQuOS0yNDhsMzYuNy01LjJjNC41LS42IDguOC0xLjYgMTMuMS0yLjggNDQuNiA5NC45IDI3LjcgMjExLjUtNTAuNyAyOTBzLTE5NS4xIDk1LjMtMjkwIDUwLjdjMS4yLTQuMiAyLjEtOC42IDIuOC0xMy4xbDUuMi0zNi43Yzc5LjEgNDMuOSAxODAuOCAzMi4zIDI0OC0zNC45ek03NSA3NWM3OC40LTc4LjQgMTk1LjEtOTUuMyAyOTAtNTAuNy0xLjIgNC4yLTIuMSA4LjYtMi44IDEzLjFsLTUuMiAzNi43Yy03OS4xLTQzLjktMTgwLjgtMzIuMy0yNDggMzQuOXMtNzguOCAxNjguOS0zNC45IDI0OGwtMzYuNyA1LjJjLTQuNSAuNi04LjggMS42LTEzLjEgMi44LTQ0LjYtOTQuOS0yNy43LTIxMS41IDUwLjctMjkwek0zNzAuOSAyMDYuNWM1LjgtMTAuOSAyMS4xLTEyLjQgMjYuNC0xLjMgMjUuNiA1My41IDE2LjIgMTE5LjYtMjguMiAxNjMuOS00NC4zIDQ0LjMtMTEwLjMgNTMuNy0xNjMuOCAyOC4yLTExLjEtNS4zLTkuNi0yMC42IDEuMy0yNi40IDMyLTE3LjEgNjQuMi00MC44IDkzLjgtNzAuNCAyOS43LTI5LjcgNTMuNC02MS45IDcwLjUtOTR6TTkzLjMgMjgxLjljLTEuNy04IDIuOS0xNS45IDEwLjYtMTguNGw4NC42LTI4YzUuNy0xLjkgMTIuMS0uNCAxNi4zIDMuOXM1LjggMTAuNiAzLjkgMTYuM2wtMjggODQuNmMtMi42IDcuNy0xMC41IDEyLjMtMTguNCAxMC42cy0xMy40LTktMTIuNy0xNy4xbDMuOS00My4xLTQzLjEgMy45Yy04LjEgLjctMTUuNS00LjctMTcuMS0xMi43ek0yOTQuNiAxMTAuNGwtMy45IDQzLjEgNDMuMS0zLjljOC4xLS43IDE1LjUgNC43IDE3LjEgMTIuN3MtMi45IDE1LjktMTAuNiAxOC40bC04NC42IDI4Yy01LjcgMS45LTEyLjEgLjQtMTYuMy0zLjlzLTUuOC0xMC42LTMuOS0xNi4zbDI4LTg0LjZjMi42LTcuNyAxMC41LTEyLjMgMTguNC0xMC42czEzLjQgOSAxMi43IDE3LjF6TTUxMiA1MS40YzAgMjUuNi0xOC44IDQ3LjMtNDQuMSA1MC45TDQyMS4xIDEwOWMtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQxMy4zIDE4LjggNDM1IDAgNDYwLjYgMCA0ODkgMCA1MTIgMjMgNTEyIDUxLjR6TTQ0LjEgNDA5LjdMOTAuOSA0MDNjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0M5OC43IDQ5My4yIDc3IDUxMiA1MS40IDUxMiAyMyA1MTIgMCA0ODkgMCA0NjAuNiAwIDQzNSAxOC44IDQxMy4zIDQ0LjEgNDA5Ljd6Il19LGd4ZT1QUCxieGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS1hdWRpbyIsaWNvbjpbMzg0LDUxMixbXSwiZjFjNyIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0yMjEuOSAyNjcuNmMtNC43IDEwLS4zIDIxLjkgOS43IDI2LjYgMTkuMiA4LjkgMzIuNCAyOC4zIDMyLjQgNTAuOHMtMTMuMiA0MS45LTMyLjQgNTAuOGMtMTAgNC43LTE0LjQgMTYuNi05LjcgMjYuNnMxNi42IDE0LjQgMjYuNiA5LjdDMjgxLjIgNDE2LjggMzA0IDM4My42IDMwNCAzNDVzLTIyLjgtNzEuOS01NS42LTg3LjFjLTEwLTQuNy0yMS45LS4zLTI2LjYgOS43ek0xMDQgMzA1Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDAgMjcuMiAzNGMzIDMuOCA3LjYgNiAxMi41IDZsLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0uMyAwYy00LjkgMC05LjUgMi4yLTEyLjUgNmwtMjcuMiAzNC0xNiAwek0yMjMuMyAzNzNjOS45LTUuNCAxNi43LTE2IDE2LjctMjguMXMtNi43LTIyLjctMTYuNy0yOC4xYy03LjgtNC4yLTE1LjMgMy4zLTE1LjMgMTIuMWwwIDMyYzAgOC44IDcuNiAxNi4zIDE1LjMgMTIuMXoiXX0sSVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2FsZW5kYXIteG1hcmsiLGljb246WzQ0OCw1MTIsWyJjYWxlbmRhci10aW1lcyJdLCJmMjczIiwiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6bTE3MS45IDkyLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXX0sdnhlPUlQLE5QPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1kb3duIixpY29uOls1MTIsNTEyLFs2MTQ2NiwiYXJyb3ctYWx0LWNpcmNsZS1kb3duIl0sImYzNTgiLCJNMjU2IDQ2NGEyMDggMjA4IDAgMSAxIDAtNDE2IDIwOCAyMDggMCAxIDEgMCA0MTZ6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsMTA0LTEwNGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzM2Ni41IDI1NiAzNjAgMjU2bC03MiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNC03MiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsMTA0IDEwNHoiXX0seXhlPU5QLFhmPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZpbGUtbGluZXMiLGljb246WzM4NCw1MTIsWzEyODQ0MSwxMjg0NjIsNjE2ODYsImZpbGUtYWx0IiwiZmlsZS10ZXh0Il0sImYxNWMiLCJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptNTYgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LHh4ZT1YZix3eGU9WGYsTXhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNvbW1lbnRzIixpY29uOls1NzYsNTEyLFsxMjg0OTAsNjE2NzBdLCJmMDg2IiwiTTc2LjIgMjU4LjdjNi4xLTE1LjIgNC0zMi42LTUuNi00NS45LTE0LjUtMjAuMS0yMi42LTQzLjctMjIuNi02OC44IDAtNjYuOCA2MC41LTEyOCAxNDQtMTI4czE0NCA2MS4yIDE0NCAxMjgtNjAuNSAxMjgtMTQ0IDEyOGMtMTUuOSAwLTMxLjEtMi4zLTQ1LjMtNi41LTEwLjMtMy4xLTIxLjQtMi41LTMxLjQgMS41bC01MC40IDIwLjIgMTEuNC0yOC41ek0wIDE0NGMwIDM1LjggMTEuNiA2OS4xIDMxLjcgOTYuOEwxLjkgMzE1LjJjLTEuMyAzLjItMS45IDYuNi0xLjkgMTAgMCAxNC44IDEyIDI2LjggMjYuOCAyNi44IDMuNCAwIDYuOC0uNyAxMC0xLjlsOTYuMy0zOC41YzE4LjYgNS41IDM4LjQgOC40IDU4LjkgOC40IDEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDR6TTM4NCA1MTJjMjAuNiAwIDQwLjMtMyA1OC45LTguNGw5Ni4zIDM4LjVjMy4yIDEuMyA2LjYgMS45IDEwIDEuOSAxNC44IDAgMjYuOC0xMiAyNi44LTI2LjggMC0zLjQtLjctNi44LTEuOS0xMGwtMjkuNy03NC40YzIwLTI3LjggMzEuNy02MS4xIDMxLjctOTYuOCAwLTgyLjQtNjEuNy0xNTEuNS0xNDUtMTcwLjctMS42IDE2LjMtNS4xIDMxLjktMTAuMSA0Ni45IDYzLjkgMTQuOCAxMDcuMiA2Ny4zIDEwNy4yIDEyMy45IDAgMjUuMS04LjEgNDguNy0yMi42IDY4LjgtOS42IDEzLjMtMTEuNyAzMC42LTUuNiA0NS45bDExLjQgMjguNS01MC40LTIwLjJjLTEwLTQtMjEuMS00LjUtMzEuNC0xLjUtMTQuMiA0LjItMjkuNCA2LjUtNDUuMyA2LjUtNzIuMiAwLTEyNy4xLTQ1LjctMTQwLjctMTAxLjItMTUuNiAzLjItMzEuNyA1LTQ4LjEgNS4yIDE2LjQgODEuOSA5NC43IDE0NCAxODguOCAxNDR6Il19LEY1PXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1jaGVjayIsaWNvbjpbNTEyLDUxMixbNjE1MzMsImNoZWNrLWNpcmNsZSJdLCJmMDU4IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTQ2NGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6bTcwLjcgMTIxLjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zIDEwLjcgNy44IDEzLjEgMjIuOCA1LjMgMzMuNUwyNDMuNCAzNjYuMWMtNC4xIDUuNy0xMC41IDkuMy0xNy41IDkuOC03IC41LTEzLjktMi0xOC44LTYuOWwtNTUuOS01NS45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzYgMzYgMTA1LjYtMTQ1LjJ6Il19LHp4ZT1GNSxreGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToibW9vbiIsaWNvbjpbNTEyLDUxMixbMTI3NzY5LDkyMTRdLCJmMTg2IiwiTTIzOS4zIDQ4LjdjLTEwNy4xIDguNS0xOTEuMyA5OC4xLTE5MS4zIDIwNy4zIDAgMTE0LjkgOTMuMSAyMDggMjA4IDIwOCAzMy4zIDAgNjQuNy03LjggOTIuNi0yMS43LTEwMy40LTIzLjQtMTgwLjYtMTE1LjgtMTgwLjYtMjI2LjMgMC02NS44IDI3LjQtMTI1LjEgNzEuMy0xNjcuM3pNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAxOS40IDAgMzguNCAyLjIgNTYuNyA2LjMgOS45IDIuMiAxNy4zIDEwLjUgMTguNSAyMC41cy00IDE5LjgtMTMuMSAyNC40Yy02MC42IDMwLjItMTAyLjEgOTIuNy0xMDIuMSAxNjQuOCAwIDEwMS42IDgyLjQgMTg0IDE4NCAxODQgNSAwIDkuOS0uMiAxNC44LS42IDEwLjEtLjggMTkuNiA0LjggMjMuOCAxNC4xczIgMjAuMS01LjMgMjcuMUMzODcuMyA0ODQuOCAzMjQuOCA1MTIgMjU2IDUxMiAxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NnoiXX0sU3hlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNsb3NlZC1jYXB0aW9uaW5nIixpY29uOls1MTIsNTEyLFtdLCJmMjBhIiwiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em04OCAxNDRsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODBjMC00LjQgMy42LTggOC04em0xNjggOGMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODB6Il19LEN4ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJpbWFnZXMiLGljb246WzU3Niw1MTIsW10sImYzMDIiLCJNNDgwIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTMyMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptODAgMTEyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE0MC43IDMuOGMtNC4zLTcuMy0xMi4yLTExLjgtMjAuNy0xMS44cy0xNi40IDQuNS0yMC43IDExLjhsLTQ2LjUgNzktMTcuMi0yNC42Yy00LjUtNi40LTExLjgtMTAuMi0xOS43LTEwLjJzLTE1LjIgMy44LTE5LjcgMTAuMmwtNTYgODBjLTUuMSA3LjMtNS44IDE2LjktMS42IDI0LjhTMTkxLjEgMzIwIDIwMCAzMjBsMjQwIDBjOC42IDAgMTYuNi00LjYgMjAuOC0xMi4xczQuMi0xNi43LS4xLTI0LjFsLTgwLTEzNnpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzYwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yOTZ6Il19LEZQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNpcmNsZS1yaWdodCIsaWNvbjpbNTEyLDUxMixbNjE4MzgsImFycm93LWFsdC1jaXJjbGUtcmlnaHQiXSwiZjM1YSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6bTM4Ny4zIDExLjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTEwNC0xMDRjLTQuNi00LjYtMTEuNS01LjktMTcuNC0zLjVTMjU2IDE0NS41IDI1NiAxNTJsMCA3Mi0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDcyYzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDEwNC0xMDR6Il19LF94ZT1GUCxPUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJpZC1jYXJkIixpY29uOls1NzYsNTEyLFs2MjE0NywiZHJpdmVycy1saWNlbnNlIl0sImYyYzIiLCJNNDggNDE2bDAtMjU2IDQ4MCAwIDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOCAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM3NiAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAweiJdfSxUeGU9T1AsUlA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLXBsYXkiLGljb246WzUxMiw1MTIsWzYxNDY5LCJwbGF5LWNpcmNsZSJdLCJmMTQ0IiwiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjEyLjUgMTQ3LjVjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNVMxNzYgMTU5LjMgMTc2IDE2OGwwIDE3NmMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OHpNMjk4IDI1NmwtNzQgNDUuMiAwLTkwLjQgNzQgNDUuMnoiXX0sTHhlPVJQLEJQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtbGF1Z2gtYmVhbSIsaWNvbjpbNTEyLDUxMixbMTI4NTEzLCJsYXVnaC1iZWFtIl0sImY1OWEiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMTguMyA1OC4yYy00LjItMTMuNyA3LjEtMjYuMiAyMS40LTI2LjJsMjMyLjYgMGMxNC4zIDAgMjUuNiAxMi41IDIxLjQgMjYuMi0xOCA1OC45LTcyLjkgMTAxLjgtMTM3LjcgMTAxLjhTMTM2LjMgMzczLjEgMTE4LjMgMzE0LjJ6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSwkeGU9QlAsSFA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiYWRkcmVzcy1ib29rIixpY29uOls1MTIsNTEyLFs2MjEzOCwiY29udGFjdC1ib29rIl0sImYyYjkiLCJNMzg0IDQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDM4NGMwIDguOC03LjIgMTYtMTYgMTZMOTYgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMODAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDI4OCAwek05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTI0MCAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bS0zMiA0MGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek00OTYgMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em0xNiAxNDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6Il19LEF4ZT1IUCxxUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJob3VyZ2xhc3MiLGljb246WzM4NCw1MTIsWzkyMDMsNjIwMzIsImhvdXJnbGFzcy1lbXB0eSJdLCJmMjU0IiwiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsODEuNSA4MS41LTgxLjUgODEuNUM0OCAzNjYgMzIgNDA0LjcgMzIgNDQ1bDAgMTktOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtODEuNS04MS41IDgxLjUtODEuNUMzMzYgMTQ2IDM1MiAxMDcuMyAzNTIgNjdsMC0xOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzczLjMgMCAzNjAgMEwyNCAwek0xOTIgMjg5LjlsODEuNSA4MS41QzI5MyAzOTEgMzA0IDQxNy40IDMwNCA0NDVsMCAxOS0yMjQgMCAwLTE5YzAtMjcuNiAxMS01NCAzMC41LTczLjVMMTkyIDI4OS45em0wLTY3LjlsLTgxLjUtODEuNUM5MSAxMjEgODAgOTQuNiA4MCA2N2wwLTE5IDIyNCAwIDAgMTljMCAyNy42LTExIDU0LTMwLjUgNzMuNUwxOTIgMjIyLjF6Il19LER4ZT1xUCxLZj17cHJlZml4OiJmYXIiLGljb25OYW1lOiJoZWFkcGhvbmVzIixpY29uOls0NDgsNTEyLFsxMjc5MTEsNjI4NjMsImhlYWRwaG9uZXMtYWx0IiwiaGVhZHBob25lcy1zaW1wbGUiXSwiZjAyNSIsIk00OCAyMjRjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZzMTc2IDc4LjggMTc2IDE3NmwwIDQ0LjhjLTE0LjEtOC4yLTMwLjUtMTIuOC00OC0xMi44bC0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xNjBDNDQ4IDEwMC4zIDM0Ny43IDAgMjI0IDBTMCAxMDAuMyAwIDIyNEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjLTE3LjUgMC0zMy45IDQuNy00OCAxMi44TDQ4IDIyNHptMCAxMjhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwIDEyOC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMyem0zNTIgMGwwIDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAtMTI4IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6Il19LEV4ZT1LZixQeGU9S2YsSXhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZpbGUtcG93ZXJwb2ludCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjNCIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem04OCAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTI4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAyOCAwYzM3LjYgMCA2OC0zMC40IDY4LTY4cy0zMC40LTY4LTY4LTY4bC01MiAwem01MiA4OGwtMjggMCAwLTQwIDI4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIweiJdfSxOeGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToid2luZG93LW1heGltaXplIixpY29uOls1MTIsNTEyLFsxMjg0NzBdLCJmMmQwIiwiTTQ4IDIyNGwwIDE2MGMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTYwLTQxNiAwek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4eiJdfSxWUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJjb21tZW50LWRvdHMiLGljb246WzUxMiw1MTIsWzEyODE3Miw2MjA3NSwiY29tbWVudGluZyJdLCJmNGFkIiwiTTAgMjQwYzAgNTQuNCAxOS4zIDEwNC42IDUxLjkgMTQ0LjlMMy4xIDQ3NC4zYy0yIDMuNy0zLjEgNy45LTMuMSAxMi4yIDAgMTQuMSAxMS40IDI1LjUgMjUuNSAyNS41IDQgMCA3LjgtLjYgMTEuNS0yLjFMMTUzLjQgNDYwYzMxLjQgMTIuOSA2Ni4xIDIwIDEwMi42IDIwIDE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwek05NCA0MDcuOWM5LjMtMTcuMSA3LjQtMzguMS00LjgtNTMuMi0yNi4xLTMyLjMtNDEuMi03MS45LTQxLjItMTE0LjcgMC0xMDMuMiA5MC4yLTE5MiAyMDgtMTkyczIwOCA4OC44IDIwOCAxOTItOTAuMiAxOTItMjA4IDE5MmMtMzAuMiAwLTU4LjctNS45LTg0LjMtMTYuNC0xMS45LTQuOS0yNS4zLTQuOC0zNy4xIC4zTDc2IDQ0MC45IDk0IDQwNy45ek0xNDQgMjcyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTQ0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTgwIDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sRnhlPVZQLGpQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10b25ndWUtd2luayIsaWNvbjpbNTEyLDUxMixbMTI4NTQwLCJncmluLXRvbmd1ZS13aW5rIl0sImY1OGIiLCJNMzY2LjkgNDMyYy44LTUuMiAxLjEtMTAuNiAxLjEtMTZsMC01My41YzEwLjItMTIuNiAxOC4zLTI2LjkgMjMuOC00Mi41IDQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOC0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCA1LjUgMTUuNSAxMy42IDI5LjkgMjMuOCA0Mi40bDAgNTMuNWMwIDUuNCAuNCAxMC44IDEuMSAxNi01OC40LTM2LjgtOTcuMS0xMDEuOS05Ny4xLTE3NiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDc0LjEtMzguOCAxMzkuMi05Ny4xIDE3NnptLTM4LjggNjkuN0M0MzQuNCA0NzAuNiA1MTIgMzcyLjMgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2QzAgMzcyLjMgNzcuNiA0NzAuNiAxODMuOSA1MDEuNyAyMDMuNCA1MTguMSAyMjguNSA1MjggMjU2IDUyOHM1Mi42LTkuOSA3Mi4xLTI2LjN6TTMyMCAzNzguNmwwIDM3LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC0zNy40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45IDIuOCAxMi42IDIwLjggMTIuNiAyMy42IDAgMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTEzMiAyMzJjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6bTIyOC40LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTI4OCAyMDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMTI4IDBhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAweiJdfSxPeGU9alAsVVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaG91cmdsYXNzLWhhbGYiLGljb246WzM4NCw1MTIsWyJob3VyZ2xhc3MtMiJdLCJmMjUyIiwiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwTDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAxOWMwIDQwLjMtMTYgNzktNDQuNSAxMDcuNWwtODEuNSA4MS41IDgxLjUgODEuNUMzMzYgMzY2IDM1MiA0MDQuNyAzNTIgNDQ1bDAgMTkgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0xOWMwLTQwLjMgMTYtNzkgNDQuNS0xMDcuNWw4MS41LTgxLjUtODEuNS04MS41QzQ4IDE0NiAzMiAxMDcuMyAzMiA2N2wwLTE5LTggMEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0xMTAuNSAzNzEuNWMtMy45IDMuOS03LjUgOC4xLTEwLjcgMTIuNWwxODQuNCAwYy0zLjItNC40LTYuOC04LjYtMTAuNy0xMi41bC04MS41LTgxLjUtODEuNSA4MS41ek04MC44IDQzMmMtLjUgNC4zLS44IDguNi0uOCAxM2wwIDE5IDIyNCAwIDAtMTljMC00LjQtLjMtOC43LS44LTEzTDgwLjggNDMyek0yNTQuMSAxNjBsLTEyNC4xIDAgNjIuMSA2Mi4xIDYyLjEtNjIuMXptMzkuNy00OEMzMDAuNCA5OC4xIDMwNCA4Mi43IDMwNCA2N2wwLTE5LTIyNCAwIDAgMTljMCAxNS43IDMuNiAzMS4xIDEwLjIgNDVsMjAzLjUgMHoiXX0sUnhlPVVQLFdQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNyZWRpdC1jYXJkIixpY29uOls1MTIsNTEyLFsxMjgxNzksNjIwODMsImNyZWRpdC1jYXJkLWFsdCJdLCJmMDlkIiwiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzItNDE2IDAgMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6bTE2IDExMmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjAgNDE2IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek04MCAzNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTE0NCAwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdfSxCeGU9V1AsSHhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtc3BvY2siLGljb246WzUxMiw1MTIsWzEyODQwNl0sImYyNTkiLCJNMTM4LjMgODAuOGMtOS4yLTMzLjggMTAuNS02OC44IDQ0LjMtNzguNCAzNC05LjYgNjkuNCAxMC4yIDc5IDQ0LjJMMjkxLjkgMTUzLjcgMzA1LjEgODRjNi42LTM0LjcgNDAuMS01Ny41IDc0LjgtNTAuOSAzMS40IDYgNTMgMzMuOSA1MiA2NC45IDEwLTIuNiAyMC44LTIuOCAzMS41LS4xIDM0LjMgOC42IDU1LjEgNDMuMyA0Ni42IDc3LjZMNDU0LjcgMzk3LjJDNDM3LjggNDY0LjcgMzc3LjIgNTEyIDMwNy42IDUxMmwtMzMuNyAwYy01Ni45IDAtMTEyLjItMTktMTU3LjItNTMuOWwtOTItNzEuNmMtMjcuOS0yMS43LTMyLjktNjEuOS0xMS4yLTg5LjhzNjEuOS0zMi45IDg5LjgtMTEuMmwxNyAxMy4yLTUxLjgtMTMxLjJjLTEzLTMyLjkgMy4yLTcwLjEgMzYtODMgMTEuMS00LjQgMjIuNy01LjQgMzMuNy0zLjd6bTc3LjEtMjEuMmMtMi40LTguNS0xMS4yLTEzLjQtMTkuNy0xMXMtMTMuNCAxMS4yLTExIDE5LjdsNTQuOCAxODIuNGMzLjUgMTIuMy0zLjMgMjUuMi0xNS40IDI5LjNzLTI1LjMtMi0zMC0xMy45TDE0Mi45IDEzOC4xYy0zLjItOC4yLTEyLjUtMTIuMy0yMC44LTlzLTEyLjMgMTIuNS05IDIwLjhsNzMuMyAxODUuNmMxMiAzMC4zLTIzLjcgNTctNDkuNCAzN0w3My44IDMyMy40Yy03LTUuNC0xNy00LjItMjIuNSAyLjhzLTQuMiAxNyAyLjggMjIuNWw5MiA3MS42YzM2LjUgMjguNCA4MS40IDQzLjggMTI3LjcgNDMuOGwzMy43IDBjNDcuNSAwIDg5LTMyLjQgMTAwLjUtNzguNWw1NS40LTIyMS42YzIuMS04LjYtMy4xLTE3LjMtMTEuNi0xOS40cy0xNy4zIDMuMS0xOS40IDExLjZsLTI2IDEwNGMtMi45IDExLjctMTMuNCAxOS45LTI1LjUgMTkuOS0xNi41IDAtMjguOS0xNS0yNS44LTMxLjJMMzgzLjcgOTljMS43LTguNy00LTE3LjEtMTIuNy0xOC43UzM1NCA4NC4zIDM1Mi4zIDkzTDMyMC41IDI2MGMtMi4yIDExLjYtMTIuNCAyMC0yNC4yIDIwLTExIDAtMjAuNy03LjMtMjMuNy0xNy45TDIxNS40IDU5LjZ6Il19LHF4ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJiZWxsLXNsYXNoIixpY29uOls1NzYsNTEyLFsxMjgyNzcsNjE5NDNdLCJmMWY2IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg3LjgtODcuOGMxNy41LTMuMyAzMC44LTE4LjcgMzAuOC0zNy4xIDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0ODUgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOS43Yy00Mi4yIDYtNzkuNCAyNy44LTEwNS40IDU5LjFMNDEtMjQuOXpNMTkyLjggMTI2LjlDMjE0LjcgOTguNCAyNDkuMiA4MCAyODggODAgMzU0LjMgODAgNDA4IDEzMy43IDQwOCAyMDBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNGwxMi45IDIyLjEtMjIuNiAwLTI0MS4xLTI0MS4xek0xMzIuNSAzNDUuOWMxOS41LTMzLjQgMzEuMy03MC43IDM0LjYtMTA5bC00Ni43LTQ2LjdjLS4yIDMuMy0uMyA2LjYtLjMgOS45bDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w2OS4xIDM1OS4yYy0zLjQgNS44LTUuMSAxMi4zLTUuMSAxOSAwIDIwLjkgMTYuOSAzNy44IDM3LjggMzcuOGwyNDQuNCAwLTQ4LTQ4LTE3OC42IDAgMTIuOS0yMi4xek0yMjAuMSA0NjRjOS45IDI4IDM2LjYgNDggNjcuOSA0OHM1OC0yMCA2Ny45LTQ4bC0xMzUuOCAweiJdfSxWeGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3RhciIsaWNvbjpbNTc2LDUxMixbMTEwODgsNjE0NDZdLCJmMDA1IiwiTTI4OC4xLTMyYzkgMCAxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4ycy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXptMCA3Ni44TDIzMC4zIDE1OGMtMy41IDYuOC0xMCAxMS42LTE3LjYgMTIuOGwtMTI1LjUgMjAgODkuOCA4OS45YzUuNCA1LjQgNy45IDEzLjEgNi43IDIwLjdsLTE5LjggMTI1LjUgMTEzLjMtNTcuNmM2LjgtMy41IDE0LjktMy41IDIxLjggMGwxMTMuMyA1Ny42LTE5LjgtMTI1LjVjLTEuMi03LjYgMS4zLTE1LjMgNi43LTIwLjdsODkuOC04OS45LTEyNS41LTIwYy03LjYtMS4yLTE0LjEtNi0xNy42LTEyLjhMMjg4LjEgNDQuOHoiXX0sanhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZsYWciLGljb246WzQ0OCw1MTIsWzEyNzk4OCw2MTcyNV0sImYwMjQiLCJNNDggMjRDNDggMTAuNyAzNy4zIDAgMjQgMFMwIDEwLjcgMCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAwIDgwLjMtMjAuMWM0MS4xLTEwLjMgODQuNi01LjUgMTIyLjUgMTMuNCA0NC4yIDIyLjEgOTUuNSAyNC44IDE0MS43IDcuNGwzNC43LTEzYzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjc5LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtOS42IDQuOGMtNDYuMyAyMy4yLTEwMC44IDIzLjItMTQ3LjEgMC0zNS4xLTE3LjYtNzUuNC0yMi0xMTMuNS0xMi41TDQ4IDUyIDQ4IDI0em0wIDc3LjVsOTYuNi0yNC4yYzI3LTYuNyA1NS41LTMuNiA4MC40IDguOCA1NC45IDI3LjQgMTE4LjcgMjkuNyAxNzUgNi44bDAgMjQxLjgtMjQuNCA5LjFjLTMzLjcgMTIuNi03MS4yIDEwLjctMTAzLjQtNS40LTQ4LjItMjQuMS0xMDMuMy0zMC4xLTE1NS42LTE3LjFsLTY4LjYgMTcuMiAwLTIzN3oiXX0sVXhlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImxlbW9uIixpY29uOls0NDgsNTEyLFsxMjc4MTldLCJmMDk0IiwiTTM2OCA4MGMtMy4yIDAtNi4yIC40LTguOSAxLjMtMTkuMSA1LjUtNDYuMSAxMC43LTc0LjMgMy4zLTU3LjQtMTQuOS0xMjQuNiA3LjQtMTc0LjcgNTcuNVMzNy43IDI1OS40IDUyLjYgMzE2LjhjNy4zIDI4LjIgMi4yIDU1LjItMy4zIDc0LjMtLjggMi44LTEuMyA1LjgtMS4zIDguOSAwIDE3LjcgMTQuMyAzMiAzMiAzMiAzLjIgMCA2LjItLjQgOC45LTEuMyAxOS4xLTUuNSA0Ni4xLTEwLjcgNzQuMy0zLjMgNTcuNCAxNC45IDEyNC42LTcuNCAxNzQuNy01Ny41czcyLjQtMTE3LjMgNTcuNS0xNzQuN2MtNy4zLTI4LjItMi4yLTU1LjIgMy4zLTc0LjMgLjgtMi44IDEuMy01LjggMS4zLTguOSAwLTE3LjctMTQuMy0zMi0zMi0zMnptMC00OGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDcuNy0xLjEgMTUuMi0zLjEgMjIuMy00LjYgMTUuOC03LjEgMzIuOS0zIDQ4LjkgMjAuMSA3Ny42LTEwLjkgMTYxLjUtNzAgMjIwLjdzLTE0My4xIDkwLjItMjIwLjcgNzBjLTE2LTQuMS0zMy0xLjYtNDguOSAzLTcuMSAyLTE0LjYgMy4xLTIyLjMgMy4xLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtNy43IDEuMS0xNS4yIDMuMS0yMi4zIDQuNi0xNS44IDcuMS0zMi45IDMtNDguOS0yMC4xLTc3LjYgMTAuOS0xNjEuNSA3MC0yMjAuN1MyMTkuMyAxOCAyOTYuOCAzOC4xYzE2IDQuMSAzMyAxLjYgNDguOS0zIDcuMS0yIDE0LjYtMy4xIDIyLjMtMy4xek0yNDYuNyAxNjdjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzg1LjIgMjc4IDg5IDI2NS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdfSxXeGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToid2luZG93LXJlc3RvcmUiLGljb246WzU3Niw1MTIsW10sImYyZDIiLCJNNTEyIDgwTDIyNCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYtNDggMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xOTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNjggMjg4bC0zMjAgMCAwIDEyOGMwIDguOCA3LjIgMTYgMTYgMTZsMjg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4ek02NCAxNjBsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXX0sR1A9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLWhlYXJ0cyIsaWNvbjpbNTEyLDUxMixbMTI4NTI1LCJncmluLWhlYXJ0cyJdLCJmNTg0IiwiTTQ2NCAyNTZjMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzQ4IDM3MC45IDQ4IDI1NmMwLTMuNSAuMS03LjEgLjMtMTAuNi0xNC0xMy45LTI5LjctMzMuMS0zOS4zLTU2LjctNS44IDIxLjQtOC45IDQ0LTguOSA2Ny4zIDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZTNTEyIDM5Ny40IDUxMiAyNTZjMC0yMy4zLTMuMS00NS45LTguOS02Ny4zLTkuNiAyMy43LTI1LjQgNDIuOC0zOS4zIDU2LjcgLjIgMy41IC4zIDcgLjMgMTAuNnpNMzY4IDU4LjljMTEuNy02IDI0LjUtOS42IDM3LjctMTAuNi00Mi4xLTMwLjQtOTMuOC00OC4zLTE0OS43LTQ4LjNTMTQ4LjQgMTcuOSAxMDYuMyA0OC4zYzEzLjIgMSAyNiA0LjYgMzcuNyAxMC42IDEzLjgtNy4xIDI5LjMtMTAuOSA0NS4xLTEwLjlsMi45IDBjOC45IDAgMTcuNiAxLjIgMjUuOCAzLjUgMTIuNC0yLjMgMjUuMi0zLjUgMzguMi0zLjVzMjUuOCAxLjIgMzguMiAzLjVjOC4yLTIuMyAxNi45LTMuNSAyNS44LTMuNWwyLjkgMGMxNS44IDAgMzEuMyAzLjggNDUuMSAxMC45em00LjIgMjQzLjRjLTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDE5LjggNTUuOSA3My4xIDk1LjkgMTM1LjggOTUuOSA2Mi43IDAgMTE2LTQwLjEgMTM1LjgtOTYgNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44ek0zMjIuOSA5NkwzMjAgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNTMuNCA2Ni45IDk1LjcgODkgMTA4LjIgNC40IDIuNSA5LjYgMi41IDE0IDAgMjIuMS0xMi41IDg5LTU0LjggODktMTA4LjIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTIuOSAwYy0xMy41IDAtMjYuNSA1LjQtMzYgMTQuOWwtOS4xIDkuMS05LjEtOS4xYy05LjUtOS41LTIyLjUtMTQuOS0zNi0xNC45em0tMTg4IDE0LjljLTkuNS05LjUtMjIuNS0xNC45LTM2LTE0LjlMOTYgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNTMuNCA2Ni45IDk1LjcgODkgMTA4LjIgNC40IDIuNSA5LjYgMi41IDE0IDAgMjIuMS0xMi41IDg5LTU0LjggODktMTA4LjIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTIuOSAwYy0xMy41IDAtMjYuNSA1LjQtMzYgMTQuOWwtOS4xIDkuMS05LjEtOS4xeiJdfSxHeGU9R1AsWVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUzNywia2lzcy1iZWFtIl0sImY1OTciLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTY0LTkyYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sWXhlPVlQLFp4ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLXBkZiIsaWNvbjpbNTc2LDUxMixbXSwiZjFjMSIsIk0yMDggNDhMOTYgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwIDQ4LTgwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjI5LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzOTcuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMTQ5LjUtNDggMCAwLTEyOC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zNDguMSAxNjBMMjU2IDY3LjkgMjU2IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTI0MCAzODBsMzIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MHMtMjYuOSA2MC02MCA2MGwtMTIgMCAwIDI4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDgwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMTIgMCAwIDQwIDEyIDB6bTk2LTgwbDMyIDBjMjguNyAwIDUyIDIzLjMgNTIgNTJsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MmwtMzIgMGMtMTEgMC0yMC05LTIwLTIwbDAtMTI4YzAtMTEgOS0yMCAyMC0yMHptMzIgMTI4YzYuNiAwIDEyLTUuNCAxMi0xMmwwLTY0YzAtNi42LTUuNC0xMi0xMi0xMmwtMTIgMCAwIDg4IDEyIDB6bTc2LTEwOGMwLTExIDktMjAgMjAtMjBsNDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCAyNCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtMjggMCAwIDQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOHoiXX0sWlA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluLXdpZGUiLGljb246WzUxMiw1MTIsWzEyODUxNSwiZ3Jpbi1hbHQiXSwiZjU4MSIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTIyNCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjQgMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0em05NiA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il19LFh4ZT1aUCxYUD17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWxhdWdoLXNxdWludCIsaWNvbjpbNTEyLDUxMixbImxhdWdoLXNxdWludCJdLCJmNTliIiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTI1LjIgNzYuNGMtNi41LTE0IDUtMjguNCAyMC40LTI4LjRsMjIwLjggMGMxNS40IDAgMjYuOCAxNC40IDIwLjQgMjguNC0yMi44IDQ5LjQtNzIuOCA4My42LTEzMC44IDgzLjZzLTEwNy45LTM0LjItMTMwLjgtODMuNnptLTIuNi0xNzMuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdfSxLeGU9WFAsS1A9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1raXNzLXdpbmstaGVhcnQiLGljb246WzY0MCw1MTIsWzEyODUzNiwia2lzcy13aW5rLWhlYXJ0Il0sImY1OTgiLCJNMzg2IDQzOS41Yy0yOS4yIDE1LjYtNjIuNSAyNC41LTk4IDI0LjUtMTE0LjkgMC0yMDgtOTMuMS0yMDgtMjA4UzE3My4yIDQ4IDI4OCA0OGMxMTMuMiAwIDIwNS4yIDkwLjQgMjA3LjkgMjAyLjkgMTQuMyAxLjUgMjguNiA2IDQxLjkgMTMuNyAyIDEuMiA0IDIuNCA1LjkgMy43IC4yLTQuMSAuMy04LjIgLjMtMTIuMyAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzMyIDExNC42IDMyIDI1NiAxNDYuNiA1MTIgMjg4IDUxMmM0MS40IDAgODAuNS05LjggMTE1LjEtMjcuMy01LjgtMTIuOS0xMi0yOC41LTE3LjItNDUuMnpNMjU2IDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC0xMi4zLTQuNi0yMy41LTEyLjItMzIgNy42LTguNSAxMi4yLTE5LjcgMTIuMi0zMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0tNDgtNDhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNTItNDRsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdfSxReGU9S1AsSmY9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY29weSIsaWNvbjpbNDQ4LDUxMixbXSwiZjBjNSIsIk0zODQgMzM2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzMuNSAwYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsNTguNSA1OC41YzMgMyA0LjcgNy4xIDQuNyAxMS4zTDQwMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2ek0xOTIgMzg0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzcwLjcgMTguN0MzNTguNyA2LjcgMzQyLjUgMCAzMjUuNSAwTDE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTQ4IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDAgMC00OC0xNiAweiJdfSxKeGU9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hlc3Mta2luZyIsaWNvbjpbNDQ4LDUxMixbOTgxOF0sImY0M2YiLCJNMjI0LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDgwIDE2MS44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzU3LjIgMzc0LjUgNDA1LjYgNDM1YzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw3OS40IDUxMmMtMjYuMiAwLTQ3LjQtMjEuMi00Ny40LTQ3LjQgMC0xMC44IDMuNy0yMS4yIDEwLjQtMjkuNkw5MC44IDM3NC41IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTYxLjggMCAwLTgwLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMzEuOCA0MDBsLTMuNiA0LjQtNDcuNiA1OS42IDI4Ni42IDAtNDcuNi01OS42LTMuNi00LjQtMTg0LjMgMHptMS4xLTQ4LjVsLjMgLjUgMTgxLjYgMCAuMy0uNSA3OC4zLTE0My41LTMzOC43IDAgNzguMyAxNDMuNXoiXX0sUVA9e3ByZWZpeDoiZmFyIixpY29uTmFtZToic3F1YXJlLXBsdXMiLGljb246WzQ0OCw1MTIsWzYxODQ2LCJwbHVzLXNxdWFyZSJdLCJmMGZlIiwiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXX0sZXdlPVFQLHR3ZT17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmaWxlLWNvZGUiLGljb246WzM4NCw1MTIsW10sImYxYzkiLCJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNMTcwLjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTgwLTMxLjJjLTguNi0xMC4xLTIzLjgtMTEuMi0zMy44LTIuNnMtMTEuMiAyMy44LTIuNiAzMy44bDM0LjYgNDAuNC0zNC42IDQwLjRjLTguNiAxMC4xLTcuNSAyNS4yIDIuNiAzMy44czI1LjIgNy41IDMzLjgtMi42bDQ4LTU2YzcuNy05IDcuNy0yMi4yIDAtMzEuMmwtNDgtNTZ6Il19LEpQPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi13aW5rIixpY29uOls1MTIsNTEyLFsiZ3Jpbi13aW5rIl0sImY1OGMiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il19LGF3ZT1KUCxlST17cHJlZml4OiJmYXIiLGljb25OYW1lOiJtb25leS1iaWxsLTEiLGljb246WzUxMiw1MTIsWyJtb25leS1iaWxsLWFsdCJdLCJmM2QxIiwiTTExMiAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMjg4IDBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC0xNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0bC0yODggMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMjU2IDE2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptLTE2IDQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdfSxpd2U9ZUkscndlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImV5ZS1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZjA3MCIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTE3Ni45IDExMS4xYzMyLjEtMTguOSA2OS4yLTMxLjEgMTExLjEtMzEuMSA2NS4yIDAgMTE4LjggMjkuNiAxNTkuOSA2Ny43IDM4LjUgMzUuNyA2NS4xIDc4LjMgNzguNiAxMDguMy0xMy42IDMwLTQwLjIgNzIuNS03OC42IDEwOC4zLTMuMSAyLjgtNi4yIDUuNi05LjQgOC40TDM5My44IDMyOGMxNC0yMC41IDIyLjItNDUuMyAyMi4yLTcyIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4LTI2LjcgMC01MS41IDguMi03MiAyMi4ybC0zOS4xLTM5LjF6bTE4MiAxODJsLTEwOC0xMDhjMTEuMS01LjggMjMuNy05LjEgMzcuMS05LjEgNDQuMiAwIDgwIDM1LjggODAgODAgMCAxMy40LTMuMyAyNi05LjEgMzcuMXpNMTAzLjQgMTczLjJsLTM0LTM0Yy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNkwzNTIuMiA0MjJjLTIwIDYuNC00MS40IDEwLTY0LjIgMTAtNjUuMiAwLTExOC44LTI5LjYtMTU5LjktNjcuNy0zOC41LTM1LjctNjUuMS03OC4zLTc4LjYtMTA4LjMgMTAuNC0yMy4xIDI4LjYtNTMuNiA1NC04Mi44eiJdfSxzd2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS13b3JkIixpY29uOlszODQsNTEyLFtdLCJmMWMyIiwiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTcxLjMgMjc0LjJjLTMuMi0xMi45LTE2LjItMjAuNy0yOS4xLTE3LjVTODUuNSAyNzMgODguNyAyODUuOGwzMiAxMjhjMi41IDEwLjIgMTEuNCAxNy41IDIxLjkgMTguMXMyMC4xLTUuNyAyMy44LTE1LjVsMjUuNS02OC4xIDI1LjUgNjguMWMzLjcgOS44IDEzLjMgMTYuMSAyMy44IDE1LjVzMTkuNC03LjkgMjEuOS0xOC4xbDMyLTEyOGMzLjItMTIuOS00LjYtMjUuOS0xNy41LTI5LjFzLTI1LjkgNC42LTI5LjEgMTcuNWwtMTMuMyA1My4yLTIwLjktNTUuOEMyMTEgMjYyLjIgMjAyIDI1NiAxOTIgMjU2cy0xOSA2LjItMjIuNSAxNS42bC0yMC45IDU1LjgtMTMuMy01My4yeiJdfSx0ST17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWFuZ3J5IixpY29uOls1MTIsNTEyLFsxMjg1NDQsImFuZ3J5Il0sImY1NTYiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTE0NGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il19LG53ZT10SSxvd2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2hlc3Mta25pZ2h0IixpY29uOls0NDgsNTEyLFs5ODIyXSwiZjQ0MSIsIk0yMzItMzJjMTEwLjUgMCAyMDAgODkuNSAyMDAgMjAwbDAgMTI3LjdjMCAxOC45LTYuMSAzNy4xLTE3LjIgNTIuMmwtNS4xIDYuMi0zNi4zIDQwLjcgMzIuMSA0MC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNmwtLjIgNC44Yy0yLjQgMjMuOS0yMi42IDQyLjUtNDcuMSA0Mi41bC0yODkuMiAwLTQuOC0uMmMtMjMuOS0yLjQtNDIuNS0yMi42LTQyLjUtNDcuMSAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDM3LjYtNDcgMC0yNC4zYzAtMjQuMyAxMC4xLTQ3LjYgMjcuOC02NC4ybDYzLjUtNTkuNS0xNy40IDAtLjIgLjJjLTIwLjMgMjAuMy00OS42IDI4LjItNzcuMSAyMS4xbC01LjUtMS42Yy0zMC45LTEwLjMtNTIuMy0zOC01NC45LTcwLjFsLS4yLTYuNCAwLTEuNGMwLTE5LjcgNy4xLTM4LjggMTkuOS01My44bDc2LjEtODguOCAwLTQ3LjEgLjEtMi41QzExMy40LTIyLjYgMTIzLjYtMzIgMTM2LTMybDk2IDB6TTgwLjcgNDY0bDI4Ni42IDAtMzguNC00OC0yMDkuOSAwLTM4LjQgNDh6TTE2MCA0OGMwIDUuNy0yLjEgMTEuMy01LjggMTUuNkw3Mi4zIDE1OS4xQzY3IDE2NS40IDY0IDE3My40IDY0IDE4MS43bDAgMS40IC40IDUuMmMxLjkgMTEuOSAxMC4zIDIxLjkgMjEuOSAyNS44bDQuNSAxLjFjMTAuNSAxLjkgMjEuMy0xLjQgMjktOWw3LjItNy4yIDMuNy0zYzMuOS0yLjYgOC41LTQgMTMuMy00bDg4IDBjOS44IDAgMTguNyA2IDIyLjMgMTUuMnMxLjMgMTkuNi01LjkgMjYuM2wtMTA3LjggMTAxYy04LjEgNy42LTEyLjcgMTguMS0xMi43IDI5LjJsMCA0LjMgMjA1LjIgMCA0MC43LTQ1LjggMi4zLTIuOGM1LjEtNi44IDcuOC0xNS4yIDcuOC0yMy43TDM4NCAxNjhjMC04My45LTY4LjEtMTUyLTE1Mi0xNTJsLTcyIDAgMCAzMnptMzIgNzJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdfSxhST17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLWdyaW4tYmVhbSIsaWNvbjpbNTEyLDUxMixbMTI4NTE2LCJncmluLWJlYW0iXSwiZjU4MiIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSxsd2U9YUksY3dlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImhhbmQtcGVhY2UiLGljb246WzQ0OCw1MTIsWzk5OTZdLCJmMjViIiwiTTIxOSAxLjRjLTM1LjItMy43LTY2LjYgMjEuOC03MC4zIDU3bC02LjQgNjAuNi0xNy40LTQ5LjRDMTEzLjIgMzYuMyA3Ni42IDE4LjggNDMuMyAzMC41Uy03LjYgNzguOCA0LjEgMTEyLjFMNTYuOSAyNjIuMkM0MS43IDI3Ni43IDMyLjIgMjk3LjMgMzIuMiAzMjBsMCAyNGMwIDkyLjggNzUuMiAxNjggMTY4IDE2OGw0OCAwYzkyLjggMCAxNjgtNzUuMiAxNjgtMTY4bDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2LS43IDAtMS41IDAtMi4yIDBsNS45LTU2LjNjMy43LTM1LjItMjEuOC02Ni42LTU3LTcwLjN6bS0uMiAxNTUuNGMtNi42IDEwLjEtMTAuNSAyMi4yLTEwLjUgMzUuMmwwIDQ4YzAgLjcgMCAxLjQgMCAyLTUuMS0xLjMtMTAuNS0yLTE2LTJsLTcuNCAwLTUuNC0xNS4zIDE3LTE2MS4zYy45LTguOCA4LjgtMTUuMiAxNy42LTE0LjJzMTUuMiA4LjggMTQuMiAxNy42bC05LjUgOTAuMXpNNzkuNiA4NS42bDU0LjMgMTU0LjQtMjEuNyAwYy00IDAtOCAuMy0xMS45IC45TDQ5LjQgOTYuMmMtMi45LTguMyAxLjUtMTcuNSA5LjgtMjAuNHMxNy41IDEuNSAyMC40IDkuOHpNMjU2LjIgMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4em0zOC40IDEwOGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDUuNSAwIDEwLjktLjcgMTYtMmwwIDEwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC00OCAwYy02Ni4zIDAtMTIwLTUzLjctMTIwLTEyMGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDgwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMGMzNS4zIDAgNjQtMjguNyA2NC02NCAwLS43IDAtMS40IDAtMiA1LjEgMS4zIDEwLjUgMiAxNiAyIDcuOSAwIDE1LjQtMS40IDIyLjQtNHptNzMuNi0yOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OHoiXX0sZHdlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImNvbXBhc3MiLGljb246WzUxMiw1MTIsWzEyOTUxN10sImYxNGUiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMDYuNyA2OS4xTDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4zIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0scHdlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InNxdWFyZSIsaWNvbjpbNDQ4LDUxMixbOTYzMiw5NzIzLDk3MjQsNjE1OTBdLCJmMGM4IiwiTTM4NCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXX0saUk9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmFjZS1ncmluIixpY29uOls1MTIsNTEyLFsxMjg1MTIsImdyaW4iXSwiZjU4MCIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0saHdlPWlJLHJJPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utc21pbGUiLGljb246WzUxMiw1MTIsWzEyODU3OCwic21pbGUiXSwiZjExOCIsIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHV3ZT1ySSxzST17cHJlZml4OiJmYXIiLGljb25OYW1lOiJmYWNlLXNtaWxlLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUyMiwic21pbGUtYmVhbSJdLCJmNWI4IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSxmd2U9c0ksbXdlPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZvbGRlci1jbG9zZWQiLGljb246WzUxMiw1MTIsW10sImUxODUiLCJNNDQ4IDQwMEw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE0NCA0MTYgMCAwIDE0NGMwIDguOC03LjIgMTYtMTYgMTZ6bTE2LTIwOGwtNDE2IDAgMC05NmMwLTguOCA3LjItMTYgMTYtMTZsMTM4LjcgMGMzLjUgMCA2LjggMS4xIDkuNiAzLjJMMjUwLjcgMTEyYzEzLjggMTAuNCAzMC43IDE2IDQ4IDE2TDQ0OCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDh6TTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdfSxnd2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToia2V5Ym9hcmQiLGljb246WzU3Niw1MTIsWzllM10sImYxMWMiLCJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNzYgMzIwbDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMjI0IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptLTcyLTcyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6Il19LG5JPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2Utcm9sbGluZy1leWVzIixpY29uOls1MTIsNTEyLFsxMjg1ODAsIm1laC1yb2xsaW5nLWV5ZXMiXSwiZjVhNSIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMTYwIDI2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xOTItNDBjLTIyLjEgMC00MC0xNy45LTQwLTQwIDAtOS41IDMuMy0xOC4xIDguOC0yNSAzLjIgMTQuMyAxNiAyNSAzMS4yIDI1czI4LTEwLjcgMzEuMi0yNWM1LjUgNi44IDguOCAxNS41IDguOCAyNSAwIDIyLjEtMTcuOSA0MC00MCA0MHptMCA0MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXX0sYndlPW5JLG9JPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZ3JpbWFjZSIsaWNvbjpbNTEyLDUxMixbMTI4NTU2LCJncmltYWNlIl0sImY1N2YiLCJNMjU2IDQ4YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnpNNTEyIDI1NmEyNTYgMjU2IDAgMSAxIC01MTIgMCAyNTYgMjU2IDAgMSAxIDUxMiAwek0xNTIgMzUyYzAgMTEuOSA4LjYgMjEuOCAyMCAyMy43bDAtNDcuM2MtMTEuNCAxLjktMjAgMTEuOC0yMCAyMy43em04NCAyNGwwLTQ4LTI0IDAgMCA0OCAyNCAwem02NCAwbDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTQwLS4zYzExLjQtMS45IDIwLTExLjggMjAtMjMuN3MtOC42LTIxLjgtMjAtMjMuN2wwIDQ3LjN6TTE3NiAyODhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTE2MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0em0wLTExMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSx2d2U9b0ksbEk9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiY2lyY2xlLWRvdCIsaWNvbjpbNTEyLDUxMixbMTI4MjgwLCJkb3QtY2lyY2xlIl0sImYxOTIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtNDY0YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnptMCAzMDRhOTYgOTYgMCAxIDEgMC0xOTIgOTYgOTYgMCAxIDEgMCAxOTJ6Il19LHl3ZT1sSSx4d2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToib2JqZWN0LWdyb3VwIixpY29uOls1NzYsNTEyLFtdLCJmMjQ3IiwiTTQwIDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQ4IDU5LjNjMTYtNi41IDI4LjktMTkuMyAzNS4zLTM1LjNsMzI5LjMgMGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDI2NS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMzI5LjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yNjUuM3pNNTEyIDBjLTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MEwxMjMuMyA0MEMxMTMuOSAxNi41IDkwLjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDkwLjkgMTYuNSAxMTMuOSA0MCAxMjMuM2wwIDI2NS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDMyOS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTI2NS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NHpNNDg4IDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDQyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQyNCAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0xOTIgMTc2bDg4IDAgMCA1Ni04OCAwIDAtNTZ6bS04LTQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDcyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEwNCAwem03MiAxODRsMCAyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYzAgMTQuNi0zLjkgMjguMi0xMC43IDQwbDI2LjcgMCAwIDU2LTg4IDAgMC0xNi40Yy0yLjYgLjMtNS4zIC40LTggLjRsLTMyIDB6Il19LGNJPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtZmx1c2hlZCIsaWNvbjpbNTEyLDUxMixbMTI4NTYzLCJmbHVzaGVkIl0sImY1NzkiLCJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE2MCAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMTYtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTkyIDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDB6TTE2MCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0wIDEyOGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTQ0LTgwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXX0sd3dlPWNJLGRJPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6InN0YXItaGFsZi1zdHJva2UiLGljb246WzU3Niw1MTIsWyJzdGFyLWhhbGYtYWx0Il0sImY1YzAiLCJNMzA5LjUtMTguOWMtNC4xLTgtMTIuNC0xMy4xLTIxLjQtMTMuMXMtMTcuMyA1LjEtMjEuNCAxMy4xTDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjg4LjEgNDE3LjYgNDMyLjQgNDkxYzggNC4xIDE3LjcgMy4zIDI1LTJzMTEtMTQuMiA5LjYtMjMuMkw0NDEuNyAzMDUuOSA1NTYuMSAxOTEuNGM2LjQtNi40IDguNi0xNS44IDUuOC0yNC40cy0xMC4xLTE0LjktMTkuMS0xNi4zTDM4MyAxMjUuMyAzMDkuNS0xOC45ek0yNjQuMSA5MS44bDAgMjg0LjEtMTAwLjEgNTAuOSAxOS44LTEyNS41YzEuMi03LjYtMS4zLTE1LjMtNi43LTIwLjdsLTg5LjgtODkuOSAxMjUuNS0yMGM3LjYtMS4yIDE0LjEtNiAxNy42LTEyLjhsMzMuOC02Ni4yem00OCAyODQuMWwwLTI4NC4xIDMzLjggNjYuMmMzLjUgNi44IDEwIDExLjYgMTcuNiAxMi44bDEyNS41IDIwLTg5LjggODkuOWMtNS40IDUuNC03LjkgMTMuMS02LjcgMjAuN2wxOS44IDEyNS41LTEwMC4xLTUwLjl6Il19LE13ZT1kSSx6d2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiZmlsZS12aWRlbyIsaWNvbjpbMzg0LDUxMixbXSwiZjFjOCIsIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAyODhsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il19LHBJPXtwcmVmaXg6ImZhciIsaWNvbk5hbWU6ImZhY2UtbGF1Z2giLGljb246WzUxMiw1MTIsWyJsYXVnaCJdLCJmNTk5IiwiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGt3ZT1wSSxTd2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToiaGFuZC1wb2ludGVyIixpY29uOls0NDgsNTEyLFtdLCJmMjVhIiwiTTE2MCA2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTM2YzAgMTAuMyA2LjYgMTkuNSAxNi40IDIyLjhzMjAuNi0uMSAyNi44LTguM2MzLTMuOSA3LjYtNi40IDEyLjgtNi40IDguOCAwIDE2IDcuMiAxNiAxNiAwIDEwLjMgNi42IDE5LjUgMTYuNCAyMi44czIwLjYtLjEgMjYuOC04LjNjMy0zLjkgNy42LTYuNCAxMi44LTYuNCA3LjggMCAxNC4zIDUuNiAxNS43IDEzIDEuNiA4LjIgNy4zIDE1LjEgMTUuMSAxOHMxNi43IDEuNiAyMy4zLTMuNmMyLjctMi4xIDYuMS0zLjQgOS45LTMuNCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxMjBjMCAzOS44LTMyLjIgNzItNzIgNzJsLTExNi42IDBjLTM3LjQgMC03Mi40LTE4LjctOTMuMi00OS45TDUwLjcgMzEyLjljLTQuOS03LjQtMi45LTE3LjMgNC40LTIyLjJzMTcuMy0yLjkgMjIuMiA0LjRMMTE2IDM1My4yYzUuOSA4LjggMTYuOCAxMi43IDI2LjkgOS43czE3LTEyLjQgMTctMjNMMTYwIDY0ek0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxOTcuN0M5MS4yIDIzOCA1NS41IDIzMi44IDI4LjUgMjUwLjctLjkgMjcwLjQtOC45IDMxMC4xIDEwLjggMzM5LjVMNzguMyA0NDAuOGMyOS43IDQ0LjUgNzkuNiA3MS4yIDEzMy4xIDcxLjJMMzI4IDUxMmM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGwwLTEyMGMwLTM1LjMtMjguNy02NC02NC02NC00LjUgMC04LjggLjUtMTMgMS4zLTExLjctMTUuNC0zMC4yLTI1LjMtNTEtMjUuMy02LjkgMC0xMy41IDEuMS0xOS43IDMuMS0xMS42LTE2LjQtMzAuNy0yNy4xLTUyLjMtMjcuMS0yLjcgMC01LjQgLjItOCAuNUwyNDAgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6bTQ4IDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdfSxDd2U9e3ByZWZpeDoiZmFyIixpY29uTmFtZToicmVnaXN0ZXJlZCIsaWNvbjpbNTEyLDUxMixbMTc0XSwiZjI1ZCIsIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwMCAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NiAzNC40IDAgNDEgNjguM2M2LjggMTEuNCAyMS42IDE1IDMyLjkgOC4yczE1LTIxLjYgOC4yLTMyLjlsLTMwLjItNTAuM2MyNC42LTExLjUgNDEuNi0zNi40IDQxLjYtNjUuMyAwLTM5LjgtMzIuMi03Mi03Mi03MmwtODAgMHptNzIgOTZsLTQ4IDAgMC00OCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDB6Il19LFJqdD17ZmFTcXVhcmVNaW51czpqRSxmYU1pbnVzU3F1YXJlOmN2ZSxmYUNhbGVuZGFyQ2hlY2s6ZHZlLGZhRmFjZUtpc3M6VUUsZmFLaXNzOnB2ZSxmYVBhc3RlOlA1LGZhRmlsZUNsaXBib2FyZDpodmUsZmFIYW5kUG9pbnRMZWZ0OnV2ZSxmYUZpbGVFeGNlbDpmdmUsZmFFbnZlbG9wZTptdmUsZmFTcXVhcmVDYXJldERvd246V0UsZmFDYXJldFNxdWFyZURvd246Z3ZlLGZhVHJ1Y2s6YnZlLGZhQmVsbDp2dmUsZmFNZXNzYWdlOkk1LGZhQ29tbWVudEFsdDp5dmUsZmFGYWNlRGl6enk6R0UsZmFEaXp6eTp4dmUsZmFDYWxlbmRhckRheXM6WUUsZmFDYWxlbmRhckFsdDp3dmUsZmFIYW5kUG9pbnRVcDpNdmUsZmFIYW5kTGl6YXJkOnp2ZSxmYVNxdWFyZUZ1bGw6a3ZlLGZhQ2lyY2xlUGF1c2U6WkUsZmFQYXVzZUNpcmNsZTpTdmUsZmFIYXJkRHJpdmU6WEUsZmFIZGQ6Q3ZlLGZhRmlsZVppcHBlcjpLRSxmYUZpbGVBcmNoaXZlOl92ZSxmYUZsb3BweURpc2s6UUUsZmFTYXZlOlR2ZSxmYUZhY2VHcmluVG9uZ3VlU3F1aW50OkpFLGZhR3JpblRvbmd1ZVNxdWludDpMdmUsZmFDYW1lcmE6ZVAsZmFDYW1lcmFBbHQ6JHZlLGZhRmFjZUdyaW5TdGFyczp0UCxmYUdyaW5TdGFyczpBdmUsZmFFeWU6RHZlLGZhRmFjZVNhZFRlYXI6YVAsZmFTYWRUZWFyOkV2ZSxmYVNoYXJlRnJvbVNxdWFyZTppUCxmYVNoYXJlU3F1YXJlOlB2ZSxmYU5vdGVTdGlja3k6clAsZmFTdGlja3lOb3RlOkl2ZSxmYUhhbmRCYWNrRmlzdDpzUCxmYUhhbmRSb2NrOk52ZSxmYUNoZXNzUXVlZW46RnZlLGZhRmFjZUdyaW5UZWFyczpuUCxmYUdyaW5UZWFyczpPdmUsZmFQZW5Ub1NxdWFyZTpvUCxmYUVkaXQ6UnZlLGZhRmFjZUdyaW5CZWFtU3dlYXQ6bFAsZmFHcmluQmVhbVN3ZWF0OkJ2ZSxmYUNsb2NrOmNQLGZhQ2xvY2tGb3VyOkh2ZSxmYUZhY2VMYXVnaFdpbms6ZFAsZmFMYXVnaFdpbms6cXZlLGZhUGFwZXJQbGFuZTpWdmUsZmFIZWFydDpqdmUsZmFGb250QXdlc29tZTpqZixmYUZvbnRBd2Vzb21lRmxhZzpVdmUsZmFGb250QXdlc29tZUxvZ29GdWxsOld2ZSxmYUNsb25lOkd2ZSxmYUZvbGRlck9wZW46WXZlLGZhV2luZG93TWluaW1pemU6WnZlLGZhU3RhckhhbGY6WHZlLGZhQWxhcm1DbG9jazpLdmUsZmFOZXdzcGFwZXI6UXZlLGZhSG9zcGl0YWw6VWYsZmFIb3NwaXRhbEFsdDpKdmUsZmFIb3NwaXRhbFdpZGU6ZXllLGZhQ2lyY2xlU3RvcDpwUCxmYVN0b3BDaXJjbGU6dHllLGZhT2JqZWN0VW5ncm91cDpheWUsZmFDb21tZW50Oml5ZSxmYUNoZXNzUGF3bjpyeWUsZmFDYWxlbmRhclBsdXM6c3llLGZhQ2xpcGJvYXJkOm55ZSxmYVRodW1ic0Rvd246b3llLGZhSWRCYWRnZTpseWUsZmFTcXVhcmVDaGVjazpoUCxmYUNoZWNrU3F1YXJlOmN5ZSxmYUNoZXNzQmlzaG9wOmR5ZSxmYUVudmVsb3BlT3BlbjpweWUsZmFDaXJjbGVYbWFyazpobCxmYVRpbWVzQ2lyY2xlOmh5ZSxmYVhtYXJrQ2lyY2xlOnV5ZSxmYVNxdWFyZUNhcmV0VXA6dVAsZmFDYXJldFNxdWFyZVVwOmZ5ZSxmYUZpbGVJbWFnZTpteWUsZmFTcXVhcmVDYXJldFJpZ2h0OmZQLGZhQ2FyZXRTcXVhcmVSaWdodDpneWUsZmFTdW46UWYsZmFJbWFnZTpieWUsZmFMaWdodGJ1bGI6dnllLGZhQWRkcmVzc0NhcmQ6V2YsZmFDb250YWN0Q2FyZDp5eWUsZmFWY2FyZDp4eWUsZmFGYWNlTWVoOm1QLGZhTWVoOnd5ZSxmYU1hcDpNeWUsZmFIYW5kUG9pbnREb3duOnp5ZSxmYUZhY2VNZWhCbGFuazpnUCxmYU1laEJsYW5rOmt5ZSxmYUZhY2VHcmluVG9uZ3VlOmJQLGZhR3JpblRvbmd1ZTpTeWUsZmFGdXRib2w6R2YsZmFGdXRib2xCYWxsOkN5ZSxmYVNvY2NlckJhbGw6X3llLGZhRmFjZVN1cnByaXNlOnZQLGZhU3VycHJpc2U6VHllLGZhRm9sZGVyOnlQLGZhRm9sZGVyQmxhbms6THllLGZhQ2xvdWQ6JHllLGZhQ2lyY2xlOkF5ZSxmYUZhY2VHcmluU3F1aW50OnhQLGZhR3JpblNxdWludDpEeWUsZmFDaXJjbGVVc2VyOndQLGZhVXNlckNpcmNsZTpFeWUsZmFSZWN0YW5nbGVMaXN0Ok1QLGZhTGlzdEFsdDpQeWUsZmFIYW5kOnpQLGZhSGFuZFBhcGVyOkl5ZSxmYVRodW1ic1VwOk55ZSxmYUJ1aWxkaW5nOkZ5ZSxmYUNoZXNzUm9vazpPeWUsZmFDaXJjbGVRdWVzdGlvbjprUCxmYVF1ZXN0aW9uQ2lyY2xlOlJ5ZSxmYUZpbGU6QnllLGZhRmFjZVNhZENyeTpTUCxmYVNhZENyeTpIeWUsZmFDYWxlbmRhck1pbnVzOnF5ZSxmYUZhY2VUaXJlZDpDUCxmYVRpcmVkOlZ5ZSxmYUhhbmRQb2ludFJpZ2h0Omp5ZSxmYUNpcmNsZVVwOl9QLGZhQXJyb3dBbHRDaXJjbGVVcDpVeWUsZmFIYW5kU2Npc3NvcnM6V3llLGZhR2VtOkd5ZSxmYVJlY3RhbmdsZVhtYXJrOkQ1LGZhUmVjdGFuZ2xlVGltZXM6WXllLGZhVGltZXNSZWN0YW5nbGU6WnllLGZhV2luZG93Q2xvc2U6WHllLGZhVHJhc2hDYW46TjUsZmFUcmFzaEFsdDpLeWUsZmFMaWZlUmluZzpReWUsZmFDb3B5cmlnaHQ6SnllLGZhQ2lyY2xlTGVmdDpUUCxmYUFycm93QWx0Q2lyY2xlTGVmdDpleGUsZmFDYWxlbmRhcjp0eGUsZmFGYWNlRnJvd25PcGVuOkxQLGZhRnJvd25PcGVuOmF4ZSxmYUNoYXJ0QmFyOiRQLGZhQmFyQ2hhcnQ6aXhlLGZhSG91c2U6RTUsZmFIb21lOnJ4ZSxmYUhvbWVBbHQ6c3hlLGZhSG9tZUxnQWx0Om54ZSxmYUZhY2VGcm93bjpBUCxmYUZyb3duOm94ZSxmYVVzZXI6WWYsZmFVc2VyQWx0Omx4ZSxmYVVzZXJMYXJnZTpjeGUsZmFTbm93Zmxha2U6ZHhlLGZhQm9va21hcms6cHhlLGZhU3F1YXJlQ2FyZXRMZWZ0OkRQLGZhQ2FyZXRTcXVhcmVMZWZ0Omh4ZSxmYUhhbmRzaGFrZTpaZixmYUhhbmRzaGFrZUFsdDp1eGUsZmFIYW5kc2hha2VTaW1wbGU6ZnhlLGZhRmFjZVNtaWxlV2luazpFUCxmYVNtaWxlV2luazpteGUsZmFGYWNlR3JpblNxdWludFRlYXJzOlBQLGZhR3JpblNxdWludFRlYXJzOmd4ZSxmYUZpbGVBdWRpbzpieGUsZmFDYWxlbmRhclhtYXJrOklQLGZhQ2FsZW5kYXJUaW1lczp2eGUsZmFDaXJjbGVEb3duOk5QLGZhQXJyb3dBbHRDaXJjbGVEb3duOnl4ZSxmYUZpbGVMaW5lczpYZixmYUZpbGVBbHQ6eHhlLGZhRmlsZVRleHQ6d3hlLGZhQ29tbWVudHM6TXhlLGZhQ2lyY2xlQ2hlY2s6RjUsZmFDaGVja0NpcmNsZTp6eGUsZmFNb29uOmt4ZSxmYUNsb3NlZENhcHRpb25pbmc6U3hlLGZhSW1hZ2VzOkN4ZSxmYUNpcmNsZVJpZ2h0OkZQLGZhQXJyb3dBbHRDaXJjbGVSaWdodDpfeGUsZmFJZENhcmQ6T1AsZmFEcml2ZXJzTGljZW5zZTpUeGUsZmFDaXJjbGVQbGF5OlJQLGZhUGxheUNpcmNsZTpMeGUsZmFGYWNlTGF1Z2hCZWFtOkJQLGZhTGF1Z2hCZWFtOiR4ZSxmYUFkZHJlc3NCb29rOkhQLGZhQ29udGFjdEJvb2s6QXhlLGZhSG91cmdsYXNzOnFQLGZhSG91cmdsYXNzRW1wdHk6RHhlLGZhSGVhZHBob25lczpLZixmYUhlYWRwaG9uZXNBbHQ6RXhlLGZhSGVhZHBob25lc1NpbXBsZTpQeGUsZmFGaWxlUG93ZXJwb2ludDpJeGUsZmFXaW5kb3dNYXhpbWl6ZTpOeGUsZmFDb21tZW50RG90czpWUCxmYUNvbW1lbnRpbmc6RnhlLGZhRmFjZUdyaW5Ub25ndWVXaW5rOmpQLGZhR3JpblRvbmd1ZVdpbms6T3hlLGZhSG91cmdsYXNzSGFsZjpVUCxmYUhvdXJnbGFzczI6UnhlLGZhQ3JlZGl0Q2FyZDpXUCxmYUNyZWRpdENhcmRBbHQ6QnhlLGZhSGFuZFNwb2NrOkh4ZSxmYUJlbGxTbGFzaDpxeGUsZmFTdGFyOlZ4ZSxmYUZsYWc6anhlLGZhTGVtb246VXhlLGZhV2luZG93UmVzdG9yZTpXeGUsZmFGYWNlR3JpbkhlYXJ0czpHUCxmYUdyaW5IZWFydHM6R3hlLGZhRmFjZUtpc3NCZWFtOllQLGZhS2lzc0JlYW06WXhlLGZhRmlsZVBkZjpaeGUsZmFGYWNlR3JpbldpZGU6WlAsZmFHcmluQWx0Olh4ZSxmYUZhY2VMYXVnaFNxdWludDpYUCxmYUxhdWdoU3F1aW50Okt4ZSxmYUZhY2VLaXNzV2lua0hlYXJ0OktQLGZhS2lzc1dpbmtIZWFydDpReGUsZmFDb3B5OkpmLGZhQ2hlc3NLaW5nOkp4ZSxmYVNxdWFyZVBsdXM6UVAsZmFQbHVzU3F1YXJlOmV3ZSxmYUZpbGVDb2RlOnR3ZSxmYUZhY2VHcmluV2luazpKUCxmYUdyaW5XaW5rOmF3ZSxmYU1vbmV5QmlsbDE6ZUksZmFNb25leUJpbGxBbHQ6aXdlLGZhRXllU2xhc2g6cndlLGZhRmlsZVdvcmQ6c3dlLGZhRmFjZUFuZ3J5OnRJLGZhQW5ncnk6bndlLGZhQ2hlc3NLbmlnaHQ6b3dlLGZhRmFjZUdyaW5CZWFtOmFJLGZhR3JpbkJlYW06bHdlLGZhSGFuZFBlYWNlOmN3ZSxmYUNvbXBhc3M6ZHdlLGZhU3F1YXJlOnB3ZSxmYUZhY2VHcmluOmlJLGZhR3Jpbjpod2UsZmFGYWNlU21pbGU6ckksZmFTbWlsZTp1d2UsZmFGYWNlU21pbGVCZWFtOnNJLGZhU21pbGVCZWFtOmZ3ZSxmYUZvbGRlckNsb3NlZDptd2UsZmFLZXlib2FyZDpnd2UsZmFGYWNlUm9sbGluZ0V5ZXM6bkksZmFNZWhSb2xsaW5nRXllczpid2UsZmFGYWNlR3JpbWFjZTpvSSxmYUdyaW1hY2U6dndlLGZhQ2lyY2xlRG90OmxJLGZhRG90Q2lyY2xlOnl3ZSxmYU9iamVjdEdyb3VwOnh3ZSxmYUZhY2VGbHVzaGVkOmNJLGZhRmx1c2hlZDp3d2UsZmFTdGFySGFsZlN0cm9rZTpkSSxmYVN0YXJIYWxmQWx0Ok13ZSxmYUZpbGVWaWRlbzp6d2UsZmFGYWNlTGF1Z2g6cEksZmFMYXVnaDprd2UsZmFIYW5kUG9pbnRlcjpTd2UsZmFSZWdpc3RlcmVkOkN3ZX19KTt2YXIgQmp0LFR3ZSxMd2UsJHdlLEF3ZSxEd2UsRXdlLFB3ZSxJd2UsTndlLEZ3ZSxlbSxPd2UsUndlLEJ3ZSxId2UsaEkscXdlLHVJLFZ3ZSxqd2UsVXdlLGZJLFd3ZSxHd2UsWXdlLFp3ZSxlOCxYd2UsS3dlLG1JLFF3ZSxKd2UsZU1lLHRNZSxhTWUsaU1lLHJNZSxzTWUsZ0ksbk1lLG9NZSxsTWUsYkksY01lLGRNZSxwTWUsaE1lLHVNZSx0OCxmTWUsdkksbU1lLGdNZSx0bSxiTWUsdk1lLHlJLHlNZSx4SSx4TWUsd01lLHdJLE1NZSxNSSx6TWUsekksa01lLFNNZSxDTWUsX01lLFRNZSxMTWUsJE1lLGtJLEFNZSxETWUsRU1lLFBNZSxTSSxJTWUsTk1lLEZNZSxPTWUsUk1lLEJNZSxhbSxITWUscU1lLFZNZSxpbSxqTWUsVU1lLFdNZSxDSSxHTWUsWU1lLFpNZSxYTWUsX0ksS01lLEttLFFNZSxRbSxKTWUsZXplLFRJLHR6ZSxMSSxhemUsaXplLHJtLHJ6ZSxzemUsbnplLG96ZSxsemUsY3plLGR6ZSxwemUsSm0sYTgsaHplLHV6ZSwkSSxmemUsbXplLE81LGd6ZSxiemUsdnplLEFJLHl6ZSx4emUsd3plLERJLE16ZSxFSSx6emUsa3plLFN6ZSxDemUsUEksX3plLFR6ZSxMemUsSUksJHplLE5JLEF6ZSxEemUsRXplLFB6ZSxzbSxJemUsTnplLEZ6ZSxPemUsUnplLEJ6ZSxIemUsRkkscXplLFZ6ZSxqemUsVXplLFd6ZSxPSSxHemUsWXplLFI1LFp6ZSxYemUsS3plLFF6ZSxKemUsZWtlLG5tLHRrZSxha2UsaWtlLHJrZSxza2UsUkksbmtlLG9rZSxsa2UsY2tlLGRrZSxwa2UsQkksaGtlLHVrZSxma2UsbWtlLEhJLGdrZSxia2UsdmtlLHFJLHlrZSx4a2UsVkksd2tlLGpJLE1rZSx6a2UsVUksa2tlLFNrZSxXSSxDa2UsR0ksX2tlLFRrZSxpOCxMa2UscjgsJGtlLEFrZSxvbSxEa2UsRWtlLFBrZSxZSSxJa2UsTmtlLFpJLEZrZSxPa2UsUmtlLEJrZSxYSSxIa2UscWtlLFZrZSxqa2UsVWtlLEtJLFdrZSxHa2UsWWtlLFprZSxRSSxYa2UsSkksS2tlLFFrZSxKa2UsZVNlLHRTZSxlTixhU2UsaVNlLHJTZSxzU2UsdE4sblNlLG9TZSxhTixsU2UsaU4sY1NlLGRTZSxwU2UsaFNlLHVTZSxmU2Usck4sbVNlLGdTZSxiU2UsdlNlLHlTZSxzTix4U2Usd1NlLE1TZSx6U2Usbk4sa1NlLG9OLFNTZSxlZyx0ZyxsTixDU2UsY04sX1NlLFRTZSxMU2UsZzgsZE4sJFNlLEFTZSxEU2UsRVNlLFBTZSxJU2UscE4sTlNlLGFnLEZTZSxPU2UsUlNlLEJTZSxIU2UsaE4scVNlLHVOLFZTZSxqU2UsVVNlLFdTZSxmTixHU2UsbG0sWVNlLFpTZSxYU2UsbU4sS1NlLFFTZSxKU2UsZUNlLGdOLHRDZSxhQ2UsaUNlLHJDZSxiTixzQ2UsbkNlLG9DZSxsQ2UsY0NlLGRDZSxwQ2UsaENlLHVDZSxmQ2UsbUNlLGdDZSxiQ2Usdk4sdkNlLHlDZSx4Q2Usd0NlLE1DZSx6Q2Usa0NlLHlOLFNDZSxDQ2UsX0NlLHVsLFRDZSxMQ2UsJENlLEFDZSxEQ2UseE4sRUNlLHdOLFBDZSxNTixJQ2Usek4sTkNlLGtOLEZDZSxzOCxPQ2UsU04sUkNlLENOLEJDZSxfTixIQ2UscUNlLFZDZSxqQ2UsVE4sVUNlLFdDZSxMTixHQ2UsWUNlLCROLFpDZSxYQ2UsS0NlLFFDZSxBTixKQ2UsZV9lLHRfZSxETixhX2UsaV9lLEI1LHJfZSxzX2Usbl9lLG9fZSxsX2UsY19lLEVOLGRfZSxQTixwX2UsaF9lLHVfZSxJTixmX2UsbV9lLGdfZSxOTixiX2UsRk4sdl9lLGNtLHlfZSx4X2Usd19lLE1fZSx6X2Usa19lLFNfZSxDX2UsX19lLFRfZSxMX2UsJF9lLEFfZSxEX2UsSDUsRV9lLFBfZSxJX2UsTl9lLEZfZSxPX2UsUl9lLEJfZSxPTixIX2UscV9lLFZfZSxqX2UsVV9lLFdfZSxHX2UsWV9lLFpfZSxYX2UsUk4sS19lLFFfZSxKX2UsZVRlLHRUZSxhVGUsaVRlLEJOLHJUZSxITixzVGUsblRlLHFOLG9UZSxsVGUsY1RlLGRUZSxWTixwVGUsaFRlLHVUZSxqTixmVGUsVU4sbVRlLGdUZSxXTixiVGUsdlRlLHlUZSx4VGUsR04sd1RlLE1UZSx6VGUsaWcsa1RlLFNUZSxDVGUsWU4sX1RlLFRUZSxMVGUsJFRlLEFUZSxaTixEVGUsRVRlLFBUZSxJVGUsTlRlLFhOLEZUZSxPVGUsUlRlLEtOLEJUZSxIVGUsZG0scVRlLFZUZSxqVGUsVVRlLFFOLFdUZSxHVGUsWVRlLEpOLFpUZSxlRixYVGUsS1RlLFFUZSxKVGUsbjgsZUxlLHRGLHRMZSxhTGUsaUxlLHJMZSxzTGUsYUYsbkxlLGlGLG9MZSxyRixsTGUsY0xlLHBtLGRMZSxwTGUsc0YsaExlLGhtLHVMZSxmTGUsbUxlLGdMZSxiTGUsdkxlLHlMZSx4TGUsbkYsd0xlLE1MZSx6TGUsa0xlLFNMZSxvRixDTGUsX0xlLFRMZSxsRixMTGUsY0YsJExlLGRGLEFMZSxETGUsRUxlLFBMZSxJTGUsTkxlLEZMZSxwRixPTGUsUkxlLEJMZSxITGUsaEYscUxlLFZMZSxqTGUsVUxlLFdMZSxHTGUsdUYsWUxlLFpMZSxmRixYTGUsS0xlLG1GLFFMZSxKTGUsZSRlLHQkZSxnRixhJGUsaSRlLHIkZSxiRixzJGUsdkYsbiRlLG8kZSxsJGUsYyRlLHlGLGQkZSxwJGUsaCRlLHUkZSxmJGUseEYsbSRlLHdGLGckZSxNRixiJGUsdiRlLHpGLHkkZSxrRix4JGUsdyRlLE0kZSx6JGUsayRlLFMkZSxDJGUsXyRlLFQkZSxMJGUsJCRlLHVtLEEkZSxEJGUsYmwsRSRlLFAkZSxJJGUsZm0sTiRlLEYkZSxPJGUsUiRlLEIkZSxIJGUscSRlLFNGLFYkZSxDRixqJGUsVSRlLFckZSxfRixHJGUsVEYsWSRlLFokZSxtbSxYJGUsSyRlLFEkZSxKJGUsZmwsZUFlLHRBZSxhQWUsaUFlLHJBZSxzQWUsbkFlLExGLG9BZSxsQWUsY0FlLGRBZSwkRixwQWUsaEFlLHVBZSxmQWUsbUFlLGdBZSxiQWUsQUYsdkFlLHlBZSx4QWUsd0FlLE1BZSx6QWUsREYsa0FlLHJnLEVGLFNBZSxDQWUsX0FlLFBGLFRBZSxJRixMQWUsJEFlLEFBZSxORixEQWUsRUFlLEZGLFBBZSxJQWUsTkFlLEZBZSxPRixPQWUsUkFlLEJBZSxIQWUscUFlLFZBZSxSRixqQWUsVUFlLHNnLFdBZSxHQWUsQkYsWUFlLFpBZSxYQWUscTUsS0FlLFFBZSxKQWUsZURlLFY1LHREZSxhRGUsaURlLHJEZSxzRGUsbkRlLEhGLG9EZSxnbSxsRGUsY0RlLGREZSxxRixwRGUsaERlLHVEZSxmRGUsbURlLGdEZSxiRGUsVkYsdkRlLG5nLHlEZSx4RGUsd0RlLGpGLE1EZSxVRix6RGUsa0RlLFdGLFNEZSxqNSxDRGUsX0RlLFREZSxMRGUsJERlLEFEZSxERGUsRURlLFBEZSxHRixJRGUsTkRlLEZEZSxPRGUsYm0sUkRlLEJEZSxZRixIRGUscURlLFZEZSxaRixqRGUsVURlLFdEZSxYRixHRGUsWURlLFpEZSxYRGUsS0RlLFFEZSxKRGUsZUVlLHRFZSxLRixhRWUsUUYsaUVlLHJFZSxzRWUsbkVlLG9FZSxsRWUsY0VlLEpGLGRFZSxwRWUsaEVlLGVPLHVFZSxmRWUsdE8sbUVlLGFPLGdFZSxpTyxiRWUsdkVlLHlFZSxyTyx4RWUsc08sd0VlLG5PLE1FZSx6RWUsb08sa0VlLGxPLFNFZSxjTyxDRWUsX0VlLGRPLFRFZSxMRWUsJEVlLEFFZSxERWUsRUVlLFBFZSxJRWUsTkVlLEZFZSxwTyxPRWUsaE8sUkVlLHVPLEJFZSxIRWUsb2cscUVlLGZPLFZFZSxqRWUsVUVlLG1PLFdFZSxHRWUsZ08sWUVlLG84LFpFZSxYRWUsS0VlLGJPLFFFZSx2TyxKRWUsZVBlLHlPLHRQZSx4TyxhUGUsd08saVBlLHJQZSxzUGUsblBlLG9QZSxNTyxsUGUsek8sY1BlLGRQZSxwUGUsaFBlLGtPLHVQZSxmUGUsbVBlLFNPLGdQZSxiUGUsdlBlLENPLHlQZSx4UGUsd1BlLE1QZSxfTyx6UGUsa1BlLFRPLFNQZSxDUGUsX1BlLExPLFRQZSxMUGUsJFBlLCRPLEFQZSxBTyxEUGUsdm0sRVBlLFBQZSxJUGUsRE8sTlBlLEZQZSxPUGUsRU8sUlBlLEJQZSxIUGUsUE8scVBlLFZQZSxqUGUsVVBlLFdQZSxHUGUsWVBlLFpQZSxYUGUsS1BlLFFQZSxKUGUsSU8sZUllLGxnLHRJZSxOTyxhSWUsaUllLHJJZSxzSWUsRk8sbkllLG9JZSxsSWUsY0llLGRJZSxwSWUsaEllLFU1LHVJZSxmSWUsbUllLGdJZSxsOCxiSWUsT08sdkllLHlJZSx4SWUsUk8sd0llLE1JZSxCTyx6SWUsa0llLFNJZSxDSWUsX0llLEhPLFRJZSxxTyxMSWUsJEllLEFJZSxWTyxESWUsRUllLFBJZSxqTyxJSWUsTkllLEZJZSxPSWUsUkllLEJJZSxISWUsVU8scUllLGNnLFZJZSxqSWUsVUllLFdPLFdJZSxHSWUsR08sWUllLFlPLFpJZSxYSWUsS0llLFpPLFFJZSxYTyxKSWUsS08sZU5lLHROZSxRTyxhTmUsaU5lLHJOZSxzTmUsSk8sbk5lLFc1LG9OZSxsTmUsY05lLGROZSxlUixwTmUsdFIsaE5lLHVOZSxmTmUsbU5lLGFSLGdOZSxHNSxiTmUsdk5lLHlOZSxpUix4TmUsd05lLE1OZSx6TmUsclIsa05lLHNSLFNOZSxDTmUsX05lLG5SLFROZSxvUixMTmUsJE5lLGxSLEFOZSxjUixETmUsZFIsRU5lLHBSLFBOZSxJTmUsTk5lLEZOZSxoUixPTmUsUk5lLEJOZSxITmUscU5lLFZOZSxqTmUsVU5lLHVSLFdOZSxmUixHTmUsWU5lLFpOZSxYTmUsbVIsS05lLFFOZSx5bSxKTmUsZUZlLHRGZSxhRmUsaUZlLHJGZSxzRmUsWTUsbkZlLG9GZSxsRmUsY0ZlLGRGZSxwRmUsaEZlLHVGZSxmRmUsbUZlLGdGZSxiRmUsdkZlLHhtLHlGZSx4RmUsd0ZlLE1GZSx6RmUsa0ZlLGdSLFNGZSxiUixDRmUsX0ZlLFRGZSx3bSxMRmUsJEZlLEFGZSx2UixERmUsTW0sRUZlLFBGZSxJRmUsTkZlLGRnLHptLEZGZSxPRmUseVIsUkZlLEJGZSxIRmUscUZlLHhSLFZGZSxqRmUsd1IsVUZlLFdGZSxNUixHRmUsWUZlLFpGZSxYRmUsS0ZlLFFGZSxrbSxKRmUsZU9lLHpSLHRPZSxhT2UsaU9lLHJPZSxzT2Usbk9lLG9PZSxsT2Usa1IsY09lLGRPZSxTUixwT2UsQ1IsaE9lLHVPZSxvbyxmT2UsbU9lLGdPZSxiT2UsX1Isdk9lLHlPZSx4T2Usd09lLFRSLE1PZSxMUix6T2UsU20sa09lLFNPZSxDT2UsJFIsX09lLHBnLFRPZSxMT2UsQVIsJE9lLENtLEFPZSxET2UsRU9lLFBPZSxJT2UsTk9lLGM4LEZPZSxPT2UsRFIsUk9lLEJPZSxIT2UsRVIscU9lLFBSLFZPZSxaNSxqT2UsVU9lLFdPZSxHT2UsWU9lLFpPZSxYT2UsSVIsS09lLFFPZSxOUixKT2UsRlIsZVJlLE9SLHRSZSxhUmUsaVJlLHJSZSxzUmUsblJlLFJSLG9SZSxsUmUsY1JlLGRSZSxwUmUsQlIsaFJlLEhSLHVSZSxxUixmUmUsbVJlLGdSZSxfbSxiUmUsdlJlLHlSZSx4UmUsd1JlLFZSLE1SZSxqUix6UmUsa1JlLFNSZSxDUmUsVVIsX1JlLFdSLFRSZSxMUmUsVG0sJFJlLEFSZSxEUmUsRVJlLFBSZSxHUixJUmUsTlJlLFlSLEZSZSxaUixPUmUsUlJlLEJSZSxIUmUscVJlLFZSZSxqUmUsVVJlLFdSZSxHUmUsWFIsWVJlLFpSZSxYUmUsS1JlLExtLFFSZSxKUmUsZUJlLHRCZSxLUixhQmUsaUJlLFFSLHJCZSxzQmUsbkJlLG9CZSxKUixsQmUsY0JlLGRCZSxkOCxwQmUsaEJlLCRtLHVCZSxmQmUsZUIsbUJlLGdCZSxiQmUsdkJlLHlCZSx0Qix4QmUsd0JlLGFCLE1CZSxpQix6QmUsa0JlLFNCZSxDQmUsX0JlLHJCLFRCZSxzQixMQmUsbkIsJEJlLEFCZSxEQmUsRUJlLG9CLFBCZSxJQmUsbEIsTkJlLEZCZSxPQmUsY0IsUkJlLEJCZSxBbSxIQmUscUJlLGRCLFZCZSxwQixqQmUsaEIsVUJlLGhnLHVCLFdCZSxmQixHQmUsWUJlLFpCZSxYQmUsS0JlLFFCZSxEbSxKQmUsZUhlLHRIZSxtQixhSGUsaUhlLHJIZSxFbSxzSGUsbkhlLG9IZSxsSGUsUG0sY0hlLGRIZSxwSGUsaEhlLGdCLHVIZSxiQixmSGUsbUhlLGdIZSxiSGUsdkhlLEltLHlIZSx4SGUsd0hlLE1IZSx6SGUsa0hlLE5tLFNIZSxDSGUsX0hlLHZCLFRIZSxMSGUsJEhlLEFIZSx5QixESGUsRUhlLFBIZSxJSGUsTkhlLEZIZSx4QixPSGUsUkhlLEJIZSxISGUsd0IscUhlLFZIZSxYNSxqSGUsVUhlLFdIZSxNQixHSGUsWUhlLFpIZSxYSGUsS0hlLFFIZSxKSGUsZXFlLHRxZSx6QixhcWUsaXFlLGtCLHJxZSxzcWUsbnFlLFNCLG9xZSxscWUsY3FlLGRxZSxwcWUsQ0IsaHFlLHVnLF9CLHVxZSxmcWUsbXFlLGdxZSxicWUsVEIsdnFlLHlxZSx4cWUsd3FlLE1xZSxMQix6cWUsa3FlLFNxZSxDcWUsX3FlLEZtLFRxZSxMcWUsJHFlLEFxZSxEcWUsJEIsRXFlLEFCLFBxZSxJcWUsTnFlLE9tLEZxZSxPcWUsUnFlLERCLEJxZSxFQixIcWUscXFlLFZxZSxqcWUsVXFlLFdxZSxQQixHcWUsWXFlLElCLFpxZSxOQixYcWUsRkIsS3FlLFFxZSxPQixKcWUsUkIsZVZlLHRWZSxhVmUsaVZlLHJWZSxzVmUsblZlLG9WZSxsVmUsQkIsY1ZlLGRWZSxSbSxwVmUsaFZlLEhCLHVWZSxmVmUsbVZlLHFCLGdWZSxiVmUsdlZlLHlWZSxWQix4VmUsd1ZlLE1WZSx6VmUsa1ZlLGpCLFNWZSxDVmUsX1ZlLEJtLFRWZSxMVmUsJFZlLEFWZSxEVmUsRVZlLEhtLFBWZSxJVmUsTlZlLFVCLEZWZSxXQixPVmUsUlZlLEJWZSxIVmUsR0IscVZlLFlCLFZWZSxqVmUsWkIsVVZlLFdWZSxYQixHVmUsWVZlLFpWZSxYVmUsS0IsS1ZlLFFWZSxKVmUsZWplLHA4LHRqZSxmZyxhamUsaWplLHJqZSxzamUsUUIsbmplLEpCLG9qZSxsamUsY2plLGRqZSxLNSxwamUsaGplLHVqZSxRNSxmamUsbWplLGdqZSxlSCxiamUsdmplLHFtLHlqZSx4amUsd2plLE1qZSx0SCx6amUsa2plLFNqZSxhSCxDamUsX2plLFRqZSxMamUsJGplLGlILEFqZSxWbSxEamUsRWplLFBqZSxJamUsTmplLEZqZSxySCxPamUsc0gsUmplLG5ILEJqZSxIamUsb0gscWplLG1nLGxILFZqZSxqamUsVWplLGNILFdqZSxHamUsZ2csZEgsWWplLFpqZSxYamUsS2plLG1sLFFqZSxKamUsZVVlLHRVZSxwSCxhVWUsaVVlLHJVZSxoSCxzVWUsblVlLG9VZSxsVWUsdUgsY1VlLGRVZSxwVWUsaFVlLHVVZSxqbSxmVWUsbVVlLGg4LGdVZSxmSCxiVWUsbUgsdlVlLHlVZSx4VWUsd1VlLGdILE1VZSx6VWUsa1VlLFNVZSxiSCxDVWUsX1VlLFRVZSx2SCxMVWUsJFVlLEFVZSxEVWUseUgsRVVlLFBVZSxJVWUseEgsTlVlLEZVZSxPVWUsdTgsUlVlLEJVZSx3SCxIVWUsTUgscVVlLHpILFZVZSxrSCxqVWUsVVVlLFNILFdVZSxHVWUsWVVlLFpVZSxYVWUsS1VlLENILFFVZSxKVWUsX0gsZVdlLHRXZSxUSCxhV2UsaVdlLHJXZSxMSCxzV2UsbldlLG9XZSxsV2UsY1dlLGdsLGRXZSxwV2UsaFdlLHVXZSxmV2UsbVdlLGdXZSxiV2UsdldlLHlXZSx4V2Usd1dlLE1XZSx6V2Usa1dlLFNXZSxDV2UsJEgsX1dlLFRXZSxMV2UsJFdlLEFILEFXZSxEV2UsRVdlLEo1LFBXZSxJV2UsTldlLEZXZSxPV2UsREgsUldlLGY4LEJXZSxIV2UscVdlLEVILFZXZSxqV2UsVVdlLFdXZSxQSCxHV2UsWVdlLElILFpXZSxYV2UsS1dlLE5ILFFXZSxKV2UsRkgsZUdlLE9ILHRHZSxhR2UsaUdlLHJHZSxzR2UsUkgsbkdlLG9HZSxsR2UsQkgsY0dlLGRHZSxwR2UsaEdlLHVHZSxmR2UsbUdlLEhILGdHZSxxSCxiR2UsVkgsdkdlLFVtLHlHZSx4R2Usakgsd0dlLFVILE1HZSxXSCx6R2Usa0dlLFNHZSxDR2UsX0dlLFRHZSxHSCxMR2UsWUgsJEdlLEFHZSxER2UsRUdlLFBHZSxaSCxJR2UsWEgsTkdlLEtILEZHZSxRSCxPR2UsUkdlLEJHZSxIR2UsSkgscUdlLFZHZSxXbSxqR2UsVUdlLGVxLFdHZSxHR2UsWUdlLFpHZSx0cSxYR2UsS0dlLFFHZSxKR2UsYXEsZVllLHZsLHRZZSxhWWUsaXEsaVllLHJxLHJZZSxzWWUsblllLEdtLG9ZZSxsWWUsY1llLHNxLGRZZSxucSxwWWUsb3EsaFllLGxxLHVZZSxmWWUsbVllLGdZZSxiWWUsdlllLHlZZSxZbSx4WWUsd1llLE1ZZSx6WWUsa1llLGNxLFNZZSxDWWUsX1llLFRZZSxMWWUsJFllLGRxLEFZZSxEWWUscHEsRVllLFBZZSxabSxJWWUsTlllLEZZZSxtOCxPWWUsUlllLEJZZSxocSxIWWUsdXEscVllLFZZZSxqWWUsVVllLFdZZSxmcSxHWWUsWVllLFpZZSxYWWUsS1llLFhtLFFZZSxKWWUsZVplLHRaZSxhWmUsbXEsaVplLGdxLHJaZSxzWmUsYnEsblplLHZxLG9aZSx5cSxsWmUseHEsY1plLGRaZSx3cSxwWmUsaFplLHVaZSxmWmUsbVplLGdaZSxIanQsYlplPWIoKCk9PntCanQ9ImZhcyIsVHdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjAiLGljb246WzMyMCw1MTIsW10sIjMwIiwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MGwwIDEyOGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwTDAgMTkyek0xNjAgOTZjLTUzIDAtOTYgNDMtOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2eiJdfSxMd2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiMSIsaWNvbjpbMjU2LDUxMixbXSwiMzEiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDY0IDAgMCAzMjAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXX0sJHdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjIiLGljb246WzM4NCw1MTIsW10sIjMyIiwiTTQ4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE3MSAwYzYwLjIgMCAxMDkgNDguOCAxMDkgMTA5IDAgNDMuOC0yNi4yIDgzLjMtNjYuNCAxMDAuNGwtMTM5LjEgNTlDMTE5IDMxNS40IDk2IDM1MC4yIDk2IDM4OC43bDAgMjcuMyAyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuM2MwLTY0LjIgMzguNC0xMjIuMiA5Ny41LTE0Ny4zbDEzOS4xLTU5YzE2LjYtNy4xIDI3LjQtMjMuNCAyNy40LTQxLjQgMC0yNC45LTIwLjItNDUtNDUtNDVMODAgOTZDNjIuMyA5NiA0OCA4MS43IDQ4IDY0eiJdfSxBd2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiMyIsaWNvbjpbMzIwLDUxMixbXSwiMzMiLCJNODAgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOCAwIDM4LjItMTYuOCA3Mi41LTQzLjMgOTYgMjYuNiAyMy41IDQzLjMgNTcuOCA0My4zIDk2IDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4TDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEw4MCAyODh6Il19LER3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiI0IixpY29uOlszODQsNTEyLFtdLCIzNCIsIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjI0LTE5MiAwIDAtMjI0eiJdfSxFd2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiNSIsaWNvbjpbMzIwLDUxMixbXSwiMzUiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDAgMCAxMTIgMTIwIDBjNzUuMSAwIDEzNiA2MC45IDEzNiAxMzZTMjU5LjEgNDgwIDE4NCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE1MiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcyTDMyIDI3MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCA2NHoiXX0sUHdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjYiLGljb246WzM4NCw1MTIsW10sIjM2IiwiTTI1NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODggMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzMi4yYzIyLjktMTUuMyA1MC40LTI0LjIgODAtMjQuMmw0OCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI4Ny41IDQ4MCAyMDggNDgwbC00OCAwQzgwLjUgNDgwIDE2IDQxNS41IDE2IDMzNmwwLTE1MkMxNiAxMDAuMSA4NC4xIDMyIDE2OCAzMmw4OCAwek04MCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il19LEl3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiI3IixpY29uOlszMjAsNTEyLFtdLCIzNyIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI1NiAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTIyNCAzODRjLTguOSAxNS4zLTI4LjUgMjAuNC00My44IDExLjVzLTIwLjQtMjguNS0xMS41LTQzLjhMMjMyLjMgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXX0sTndlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjgiLGljb246WzMyMCw1MTIsW10sIjM4IiwiTTMwNCAxNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTMyIDBjLTcwLjcgMC0xMjggNTcuMy0xMjggMTI4IDAgMzQuNiAxMy43IDY2IDM2IDg5LTMxLjUgMjMuMy01MiA2MC44LTUyIDEwMyAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw2NCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNDIuMi0yMC41LTc5LjctNTItMTAzIDIyLjMtMjMgMzYtNTQuNCAzNi04OXpNMTc2LjEgMjg4bDE1LjkgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OC4xIDB6bTAtNjRMMTQ0IDIyNGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDM1LjMtMjguNiA2NC02NCA2NHoiXX0sRndlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IjkiLGljb246WzM4NCw1MTIsW10sIjM5IiwiTTIwOCAzMjBjMjkuNiAwIDU3LjEtOC45IDgwLTI0LjJsMCAzMi4yYzAgNDguNi0zOS40IDg4LTg4IDg4TDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMDQgMGM4My45IDAgMTUyLTY4LjEgMTUyLTE1MmwwLTE1Mi4xQzM1MS45IDk2LjQgMjg3LjUgMzIgMjA4IDMybC00OCAwQzgwLjUgMzIgMTYgOTYuNSAxNiAxNzZTODAuNSAzMjAgMTYwIDMyMGw0OCAwem04MC0xNDRjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBsNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MHoiXX0sZW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG9sbGFyLXNpZ24iLGljb246WzMyMCw1MTIsWzEyODE3OCw2MTc4MSwiZG9sbGFyIiwidXNkIl0sIjI0IiwiTTEzNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTE0LjkgMGMtMjQuOSAwLTQ1LjEgMjAuMi00NS4xIDQ1LjEgMCAyMi41IDE2LjUgNDEuNSAzOC43IDQ0LjdsOTEuNiAxMy4xYzUzLjggNy43IDkzLjcgNTMuNyA5My43IDEwOCAwIDYwLjMtNDguOSAxMDkuMS0xMDkuMSAxMDkuMWwtMTAuOSAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC03MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEzMC45IDBjMjQuOSAwIDQ1LjEtMjAuMiA0NS4xLTQ1LjEgMC0yMi41LTE2LjUtNDEuNS0zOC43LTQ0LjdsLTkxLjYtMTMuMUM1NS45IDI3My41IDE2IDIyNy40IDE2IDE3My4xIDE2IDExMi45IDY0LjkgNjQgMTI1LjEgNjRsMTAuOSAwIDAtNDB6Il19LE93ZT1lbSxSd2U9ZW0sQndlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvZyIsaWNvbjpbNTc2LDUxMixbMTI4MDIxXSwiZjZkMyIsIk0zMiAxMTJjMTYuNiAwIDMwLjIgMTIuNiAzMS44IDI4LjdsLjMgNi42QzY1LjggMTYzLjQgNzkuNCAxNzYgOTYgMTc2bDE3OS4xIDAgMTQwLjkgNjAuNCAwIDI0My42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzMS4zQzI5NiAzNjEgMjY4LjggMzY4IDI0MCAzNjhzLTU2LTctODAtMTkuM0wxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0NS42Yy0zNy4zLTEzLjItNjQtNDguNi02NC05MC40IDAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTUuOC0zMmM3LjcgMCAxNC45IDMuNiAxOS42IDkuOEwzOTIgMCA0NDQuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDMyIDU1MiAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC02NCAwLTcgMjgtMTI0LjctNTMuNCAzMS42LTE0Ny4yQzMzNC4zLTIzLjkgMzQ0LjItMzIgMzU1LjgtMzJ6TTQ0OCA0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il19LEh3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1tb3ZpbmciLGljb246WzY0MCw1MTIsW10sImY0ZGYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQyNGMwIDQ4LjYgMzkuNCA4OCA4OCA4OCAyNS4yIDAgNDgtMTAuNiA2NC0yNy42IDE2IDE3IDM4LjggMjcuNiA2NCAyNy42IDQwLjMgMCA3NC4yLTI3LjEgODQuNy02NGwxMzQuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjQgNDMgMCA3OC45LTMwLjkgODYuNS03MS43IDIwLTEwLjggMzMuNS0zMiAzMy41LTU2LjNsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1NzYgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00ODAgMTkybDUwLjcgMCA0NS4zIDQ1LjMgMCA1MC43LTk2IDAgMC05NnpNODggMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMzkyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIxNiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxoST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb3RhdGUiLGljb246WzUxMiw1MTIsWzEyODI2MCwic3luYy1hbHQiXSwiZjJmMSIsIk00ODAuMSAxOTJsNy45IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNDRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzQ3Ny45IC4yIDQ3MSA3TDQxOS4zIDU4LjhDMzc1IDIyLjEgMzE4IDAgMjU2IDAgMTI3IDAgMjAuMyA5NS40IDIuNiAyMTkuNSAuMSAyMzcgMTIuMiAyNTMuMiAyOS43IDI1NS43czMzLjctOS43IDM2LjItMjcuMUM3OS4yIDEzNS41IDE1OS4zIDY0IDI1NiA2NCAzMDAuNCA2NCAzNDEuMiA3OSAzNzMuNyAxMDQuM0wzMjcgMTUxYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzMzNC4zIDE5MiAzNDQgMTkybDEzNi4xIDB6bTI5LjQgMTAwLjVjMi41LTE3LjUtOS43LTMzLjctMjcuMS0zNi4ycy0zMy43IDkuNy0zNi4yIDI3LjFjLTEzLjMgOTMtOTMuNCAxNjQuNS0xOTAuMSAxNjQuNS00NC40IDAtODUuMi0xNS0xMTcuNy00MC4zTDE4NSAzNjFjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMxNzcuNyAzMjAgMTY4IDMyMEwyNCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0TDAgNDg4YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMlMzNC4xIDUxMS44IDQxIDUwNWw1MS44LTUxLjhDMTM3IDQ4OS45IDE5NCA1MTIgMjU2IDUxMiAzODUgNTEyIDQ5MS43IDQxNi42IDUwOS40IDI5Mi41eiJdfSxxd2U9aEksdUk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLW1pbnVzIixpY29uOls0NDgsNTEyLFs2MTc2NywibWludXMtc3F1YXJlIl0sImYxNDYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNzIgMjAwbDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sVndlPXVJLGp3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbGlnbi1qdXN0aWZ5IixpY29uOls0NDgsNTEyLFtdLCJmMDM5IiwiTTQ0OCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6bTAgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNNDQ4IDQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6Il19LFV3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci1jaGVjayIsaWNvbjpbNDQ4LDUxMixbXSwiZjI3NCIsIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTIyIDE2MS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMzEuMiAxMzcgMjc5LjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxOTUuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXX0sZkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1raXNzIixpY29uOls1MTIsNTEyLFsxMjg1MzUsImtpc3MiXSwiZjU5NiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tOTYtODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sV3dlPWZJLEd3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJraXRjaGVuLXNldCIsaWNvbjpbNTc2LDUxMixbXSwiZTUxYSIsIk0yNDAgMTQ0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptNDQuNCAzMkMyNjkuOSAyNDAuMSAyMTIuNSAyODggMTQ0IDI4OCA2NC41IDI4OCAwIDIyMy41IDAgMTQ0UzY0LjUgMCAxNDQgMGM2OC41IDAgMTI1LjkgNDcuOSAxNDAuNCAxMTJsNzEuOCAwYzguOC05LjggMjEuNi0xNiAzNS44LTE2bDEwNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xMDQgMGMtMTQuMiAwLTI3LTYuMi0zNS44LTE2bC03MS44IDB6TTE0NCA4MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTYgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI4OCA0NjRsMC0xMTIgMjI0IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OHpNNDggMzIwbDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwIDAgMzIgMTYgMHpNMjQgNDY0bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sWXdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRuYSIsaWNvbjpbMzg0LDUxMixbMTI5NTE2XSwiZjQ3MSIsIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDU3LjgtMjQuNCAxMDQuOC01Ny40IDE0NC41LTI0LjEgMjguOS01My44IDU1LjEtODMuNiA3OS41IDI5LjggMjQuNSA1OS41IDUwLjYgODMuNiA3OS41IDMzIDM5LjYgNTcuNCA4Ni43IDU3LjQgMTQ0LjUgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBDMCA0MjIuMiAyNC40IDM3NS4yIDU3LjQgMzM1LjUgODEuNSAzMDYuNiAxMTEuMiAyODAuNSAxNDEgMjU2IDExMS4yIDIzMS41IDgxLjUgMjA1LjQgNTcuNCAxNzYuNSAyNC40IDEzNi44IDAgODkuOCAwIDMyIDAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDI1NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSAzODRsLTE4Mi45IDBjLTguMiAxMC41LTE1LjEgMjEuMS0yMC42IDMybDIyNC4yIDBjLTUuNi0xMC45LTEyLjUtMjEuNS0yMC42LTMyek0yMzggMzM2Yy0xNC4zLTEzLTI5LjgtMjUuOC00Ni0zOS0xNi4yIDEzLjEtMzEuNyAyNi00NiAzOWw5MiAwek0xMDAuNSAxMjhsMTgyLjkgMGM4LjItMTAuNSAxNS4xLTIxLjEgMjAuNi0zMkw3OS45IDk2YzUuNiAxMC45IDEyLjUgMjEuNSAyMC42IDMyek0xNDYgMTc2YzE0LjMgMTMgMjkuOCAyNS44IDQ2IDM5IDE2LjItMTMuMSAzMS43LTI2IDQ2LTM5bC05MiAweiJdfSxad2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hpbGQtcmVhY2hpbmciLGljb246WzM4NCw1MTIsW10sImU1OWQiLCJNMjU2IDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMTUyLjkgMTY5LjNjLTIzLjctOC40LTQ0LjUtMjQuMy01OC44LTQ1LjhMNzQuNiA5NC4yQzY0LjggNzkuNSA0NSA3NS42IDMwLjMgODUuNFMxMS42IDExNSAyMS40IDEyOS44TDQwLjkgMTU5YzE4LjEgMjcuMSA0Mi44IDQ4LjQgNzEuMSA2Mi40TDExMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU4LjRjMjkuMS0xNC4yIDU0LjQtMzYuMiA3Mi43LTY0LjJsMTguMi0yNy45YzkuNi0xNC44IDUuNC0zNC42LTkuNC00NC4zcy0zNC42LTUuNS00NC4zIDkuNEwyOTEgMTIyLjRjLTIxLjggMzMuNC01OC45IDUzLjYtOTguOCA1My42LTEyLjYgMC0yNC45LTItMzYuNi01LjgtLjktLjMtMS44LS43LTIuNy0uOXoiXX0sZTg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFzdGUiLGljb246WzUxMiw1MTIsWyJmaWxlLWNsaXBib2FyZCJdLCJmMGVhIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDExMiAwIDAtMjI0YzAtNjEuOSA1MC4xLTExMiAxMTItMTEybDY0IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0yNDggMTEybC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptNDAgNDhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNsLTU4LjUtNTguNWMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wyODggMTYweiJdfSxYd2U9ZTgsS3dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1ldGVvciIsaWNvbjpbNTEyLDUxMixbOTczMl0sImY3NTMiLCJNNDkzLjcgLjlsLTE5NC4yIDc0LjcgMi4zLTI5LjNjMS0xMi44LTEyLjgtMjEuNS0yNC0xNS4xTDEwMS4zIDEzMy40QzM4LjYgMTY5LjcgMCAyMzYuNiAwIDMwOSAwIDQyMS4xIDkwLjkgNTEyIDIwMyA1MTIgMjc1LjQgNTEyIDM0Mi4zIDQ3My40IDM3OC42IDQxMC43TDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuMyA3NC43LTE5NC4yYy42LTEuNSAuOS0zLjIgLjktNC44IDAtNy41LTYtMTMuNS0xMy41LTEzLjUtMS43IDAtMy4zIC4zLTQuOCAuOXpNMTkyIDE5MmExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTYgOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdfSxtST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnZWFycyIsaWNvbjpbNjQwLDUxMixbImNvZ3MiXSwiZjA4NSIsIk00MTUuOSAyMTAuNWMxMi4yLTMuMyAyNSAyLjUgMzAuNSAxMy44TDQ2NSAyNjEuOWMxMC4zIDEuNCAyMC40IDQuMiAyOS45IDguMWwzNS0yMy4zYzEwLjUtNyAyNC40LTUuNiAzMy4zIDMuM2wxOS4yIDE5LjJjOC45IDguOSAxMC4zIDIyLjkgMy4zIDMzLjNsLTIzLjMgMzQuOWMxLjkgNC43IDMuNiA5LjYgNSAxNC43IDEuNCA1LjEgMi4zIDEwLjEgMyAxNS4ybDM3LjcgMTguNmMxMS4zIDUuNiAxNy4xIDE4LjQgMTMuOCAzMC41bC03IDI2LjJjLTMuMyAxMi4xLTE0LjYgMjAuMy0yNy4yIDE5LjVsLTQyLTIuN2MtNi4zIDguMS0xMy42IDE1LjYtMjEuOSAyMmwyLjcgNDEuOWMuOCAxMi42LTcuNCAyNC0xOS41IDI3LjJsLTI2LjIgN2MtMTIuMiAzLjMtMjQuOS0yLjUtMzAuNS0xMy44bC0xOC42LTM3LjZjLTEwLjMtMS40LTIwLjQtNC4yLTI5LjktOC4xbC0zNSAyMy4zYy0xMC41IDctMjQuNCA1LjYtMzMuMy0zLjNsLTE5LjItMTkuMmMtOC45LTguOS0xMC4zLTIyLjgtMy4zLTMzLjNsMjMuMy0zNWMtMS45LTQuNy0zLjYtOS42LTUtMTQuN3MtMi4zLTEwLjItMy0xNS4ybC0zNy43LTE4LjZjLTExLjMtNS42LTE3LTE4LjQtMTMuOC0zMC41bDctMjYuMmMzLjMtMTIuMSAxNC42LTIwLjMgMjcuMi0xOS41bDQxLjkgMi43YzYuMy04LjEgMTMuNi0xNS42IDIxLjktMjJsLTIuNy00MS44Yy0uOC0xMi42IDcuNC0yNCAxOS41LTI3LjJsMjYuMi03ek00NDguNCAzNDBhNDQgNDQgMCAxIDAgLjEgODggNDQgNDQgMCAxIDAgLS4xLTg4ek0yMjQuOS00NS41bDI2LjIgN2MxMi4xIDMuMyAyMC4zIDE0LjcgMTkuNSAyNy4ybC0yLjcgNDEuOGM4LjMgNi40IDE1LjYgMTMuOCAyMS45IDIybDQyLTIuN2MxMi41LS44IDIzLjkgNy40IDI3LjIgMTkuNWw3IDI2LjJjMy4yIDEyLjEtMi41IDI0LjktMTMuOCAzMC41bC0zNy43IDE4LjZjLS43IDUuMS0xLjcgMTAuMi0zIDE1LjJzLTMuMSAxMC01IDE0LjdsMjMuMyAzNWM3IDEwLjUgNS42IDI0LjQtMy4zIDMzLjNMMzA3LjMgMjYyYy04LjkgOC45LTIyLjggMTAuMy0zMy4zIDMuM0wyMzkgMjQyYy05LjUgMy45LTE5LjYgNi43LTI5LjkgOC4xbC0xOC42IDM3LjZjLTUuNiAxMS4zLTE4LjQgMTctMzAuNSAxMy44bC0yNi4yLTdjLTEyLjItMy4zLTIwLjMtMTQuNy0xOS41LTI3LjJsMi43LTQxLjljLTguMy02LjQtMTUuNi0xMy44LTIxLjktMjJsLTQyIDIuN2MtMTIuNSAuOC0yMy45LTcuNC0yNy4yLTE5LjVsLTctMjYuMmMtMy4yLTEyLjEgMi41LTI0LjkgMTMuOC0zMC41bDM3LjctMTguNmMuNy01LjEgMS43LTEwLjEgMy0xNS4yIDEuNC01LjEgMy0xMCA1LTE0LjdMNTUuMSA0Ni41Yy03LTEwLjUtNS42LTI0LjQgMy4zLTMzLjNMNzcuNi02YzguOS04LjkgMjIuOC0xMC4zIDMzLjMtMy4zbDM1IDIzLjNjOS41LTMuOSAxOS42LTYuNyAyOS45LTguMWwxOC42LTM3LjZjNS42LTExLjMgMTguMy0xNyAzMC41LTEzLjh6TTE5Mi40IDg0YTQ0IDQ0IDAgMSAwIDAgODggNDQgNDQgMCAxIDAgMC04OHoiXX0sUXdlPW1JLEp3ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1wbHVzIixpY29uOls1NzYsNTEyLFs1ODYwNl0sImU0OTQiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXX0sZU1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImljaWNsZXMiLGljb246WzUxMiw1MTIsW10sImY3YWQiLCJNNzUuOCAzMDQuOEwxIDM1LjdDLjMgMzMuMiAwIDMwLjcgMCAyOC4yIDAgMTIuNiAxMi42IDAgMjguMiAwTDQ4Mi40IDBjMTYuMyAwIDI5LjYgMTMuMiAyOS42IDI5LjYgMCAxLjYtLjEgMy4zLS40IDQuOUw0MzQuNiA0OTYuMWMtMS41IDkuMi05LjUgMTUuOS0xOC44IDE1LjktOS4yIDAtMTcuMS02LjYtMTguNy0xNS42TDMzNiAxNjAgMzA3LjIgMzAzLjljLTEuOSA5LjMtMTAuMSAxNi4xLTE5LjYgMTYuMS05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjctOS4zIDAtMTcuNS02LjItMjAtMTUuMnoiXX0sdE1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXRyZW5kLXVwIixpY29uOls1NzYsNTEyLFtdLCJlMDk4IiwiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04Mi43LTE2OS40IDE2OS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjY5LjMgNTQuNiA0MDYuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMEwzMjAgMzA2LjcgNDY2LjcgMTYwIDM4NCAxNjB6Il19LGFNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZXhhZ29uLW5vZGVzLWJvbHQiLGljb246WzU3Niw1MTIsW10sImU2OWEiLCJNMjQ4IDEwNi42YzE4LjktOSAzMi0yOC4zIDMyLTUwLjZjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMi44IDEuMy01LjUgMi45LTggNC43bC04MC4xLTQ1LjhjMS42LTIwLjgtOC42LTQxLjYtMjcuOS01Mi44QzU3LjIgOTYgMjMgMTA1LjIgNy41IDEzMlMxLjIgMTkzIDI4IDIwOC41YzEuMyAuOCAyLjYgMS41IDQgMi4xbDAgOTAuOGMtMS4zIC42LTIuNyAxLjMtNCAyLjFDMS4yIDMxOS04IDM1My4yIDcuNSAzODBTNTcuMiA0MTYgODQgNDAwLjVjMTkuMy0xMS4xIDI5LjQtMzIgMjcuOC01Mi44bDUwLjUtMjguOWMtMTEuNS0xMS4yLTE5LjktMjUuNi0yMy44LTQxLjdMODggMzA2LjFjLTIuNi0xLjgtNS4yLTMuMy04LTQuN2wwLTkwLjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtLjEgMS40LS4yIDIuOC0uMiA0LjNjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMTguOSA5LTMyIDI4LjMtMzIgNTAuNmMwIDMwLjkgMjUuMSA1NiA1NiA1NmMzMC43IDAgNTUuNi0yNC43IDU2LTU1LjJjLTcuNS0xMi45LTEzLjUtMjYuOC0xNy42LTQxLjVjLTQuMi00LTkuMS03LjMtMTQuNC05LjlsMC05OC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2wxMC41IDZjNS41LTE1LjMgMTMuMS0yOS41IDIyLjQtNDIuNWwtOS4xLTUuMmMuMS0xLjQgLjItMi44IC4yLTQuM2MwLTIyLjMtMTMuMS00MS42LTMyLTUwLjZsMC05OC44ek00NDAuNSAxMzJDNDI1IDEwNS4yIDM5MC44IDk2IDM2NCAxMTEuNWMtMTkuMyAxMS4xLTI5LjQgMzItMjcuOCA1Mi44bC01MC42IDI4LjljMTEuNSAxMS4yIDE5LjkgMjUuNiAyMy44IDQxLjdMMzYwIDIwNS45Yy40IC4zIC44IC42IDEuMyAuOWMyMS43LTkuNSA0NS42LTE0LjggNzAuOC0xNC44YzIgMCA0IDAgNS45IC4xYzEyLjEtMTcuMyAxMy44LTQwLjYgMi42LTYwLjF6TTQzMiA1MTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em00Ny45LTIyNWM0LjMgMy43IDUuNCA5LjkgMi42IDE0LjlMNDUyLjQgMzU2bDM1LjYgMGM1LjIgMCA5LjggMy4zIDExLjQgOC4ycy0uMSAxMC4zLTQuMiAxMy40bC05NiA3MmMtNC41IDMuNC0xMC44IDMuMi0xNS4xLS42cy01LjQtOS45LTIuNi0xNC45TDQxMS42IDM4MCAzNzYgMzgwYy01LjIgMC05LjgtMy4zLTExLjQtOC4ycy4xLTEwLjMgNC4yLTEzLjRsOTYtNzJjNC41LTMuNCAxMC44LTMuMiAxNS4xIC42eiJdfSxpTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicXVlc3Rpb24iLGljb246WzMyMCw1MTIsWzEwMDY3LDEwMDY4LDYxNzM2XSwiM2YiLCJNNjQgMTYwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0Mi43LTI3LjkgNzguOS02Ni41IDkxLjQtMjguNCA5LjItNjEuNSAzNS4zLTYxLjUgNzYuNmwwIDI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNGMwLTEuNyAuNi00LjEgMy41LTcuMyAzLTMuMyA3LjktNi41IDEzLjctOC40IDY0LjMtMjAuNyAxMTAuOC04MSAxMTAuOC0xNTIuMyAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFMwIDcxLjYgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptOTYgMzUyYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwLTQwIDE3LjktNDAgNDAgMTcuOSA0MCA0MCA0MHoiXX0sck1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRzLWJvdW5kIixpY29uOls1NzYsNTEyLFtdLCJlNGY5IiwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCAyMTMuOWMwIDE0LjIgNS4xIDI3LjkgMTQuMyAzOC43TDk5LjYgMzUyIDk2IDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzODQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMy42IDAgODUuMy05OS41YzkuMi0xMC44IDE0LjMtMjQuNSAxNC4zLTM4LjdMNTc2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyLjgtNjkuMyA5Mi40Yy01LjcgNy42LTE2LjEgOS42LTI0LjIgNC44LTkuNy01LjctMTIuMS0xOC43LTUuMS0yNy41TDQ0MSAxODBjMTAuOC0xMy41IDguOS0zMy4zLTQuNC00NC41cy0zMy05LjgtNDQuNSAzLjJsLTQ2LjcgNTIuNUMzMjkgMjA5LjcgMzIwIDIzMy40IDMyMCAyNTguMWwwIDkzLjktNjQgMCAwLTkzLjljMC0yNC42LTktNDguNC0yNS40LTY2LjhsLTQ2LjctNTIuNWMtMTEuNS0xMy0zMS4zLTE0LjQtNDQuNS0zLjJTMTI0LjIgMTY2LjQgMTM1IDE4MGwyNy42IDM0LjVjNyA4LjggNC43IDIxLjgtNS4xIDI3LjUtOC4xIDQuOC0xOC42IDIuNy0yNC4yLTQuOEw2NCAxNDQuOCA2NCAzMnptNjQgNDQ4bDAgMzIgMTI4IDAgMC0zMiA2NCAwIDAgMzIgMTI4IDAgMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDk2IDQzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAweiJdfSxzTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctbHVnZ2FnZSIsaWNvbjpbNTEyLDUxMixbXSwiZTU1NCIsIk0yNjQuMyAyNGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bS04IDE4MS4zbC0yMi42IDIyLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxMi4zLTcgMjMtMTcuMiAyOC40LS45IDQuMi0yLjQgOC40LTQuMyAxMi4zbC02OSAxMzguMS0uOC0uNC0yNy43IDU1LjNjLTkuOSAxOS44LTMzLjkgMjcuOC01My43IDE3LjlMMTQuNiA1MjFjLTE5LjgtOS45LTI3LjgtMzMuOS0xNy45LTUzLjdMNDcuMyAzNjYuM2M5LjktMTkuOCAzMy45LTI3LjggNTMuNy0xNy45bDMwLjcgMTUuMyAyOC4zLTU2LjZjLjMtLjYgLjQtMS4yIC40LTEuOGwwLTE2LjljMC0uMiAwLS4zIDAtLjVsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM1LjEtMzUuMWMyMi44LTIyLjggNTMuNi0zNS42IDg1LjgtMzUuNiAzNi45IDAgNzEuOCAxNi44IDk0LjggNDUuNkw0MjIuMSAxODBjNi4xIDcuNiAxNS4zIDEyIDI1IDEybDMzLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzMuMiAwYy0yOS4yIDAtNTYuNy0xMy4zLTc1LTM2bC0zLjgtNC43IDAgMTE1LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zTDQ0OCA1MDcuNWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMkwzNzIgNDI4LjRjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6bS4xIDE2NS44YzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVsLTY4LjMgNjguM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjM4IDQyMS4xYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEwyNTYuNCAzNzF6Il19LGdJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtYXJyb3ctZG93biIsaWNvbjpbMzg0LDUxMixbImZpbGUtZG93bmxvYWQiXSwiZjU2ZCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTc1IDQ0MWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyMyAwLTg2LjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4Ni4xLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDY0IDY0eiJdfSxuTWU9Z0ksb01lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1ib290aCIsaWNvbjpbNTc2LDUxMixbXSwiZjc1NiIsIk00MCAyNEE1NiA1NiAwIDEgMSAxNTIgMjQgNTYgNTYgMCAxIDEgNDAgMjR6bTUxLjEgODhjMjMuNSAwIDQ1LjUgMTEuMyA1OS4xIDMwLjRsNDguNyA2OC4yYzYgOC40IDE1LjcgMTMuNCAyNiAxMy40bDMxLjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzEuMSAwYy0zMSAwLTYwLjEtMTUtNzguMS00MC4ybC0yLjgtMy45IDAgODAuMSA0MS42IDMxLjJDMjA5LjggMzczLjMgMjI0IDQwMS44IDIyNCA0MzJsMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwYzAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMNzAuNCAzNDguOEM0Ni4yIDMzMC43IDMyIDMwMi4yIDMyIDI3MmwwLTEwMC45QzMyIDEzOC41IDU4LjUgMTEyIDkxLjEgMTEyek0zMiA1MTJsMC0xMzIuN2MzLjEgMi43IDYuMyA1LjQgOS42IDcuOUw5NiA0MjggOTYgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyem01NDQtODhsMCA5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTE2OCAwYy03LjEgMC0xMy44LTMuMS0xOC40LTguNnMtNi41LTEyLjYtNS4zLTE5LjZsMzAuNy0xNzYuNy02My4xLTEzNy42IDAgNzJjLTUuMi0xLTEwLjUtMS42LTE2LTEuNmwtMzIgMCAwLTEyMGMwLTMwLjkgMjUuMS01NiA1Ni01Nkw1MjAgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDM2OHpNMjg4IDMzNmM1LjUgMCAxMC44LS42IDE2LTEuNkwzMDQgNTIwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTg0IDMyIDB6Il19LGxNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2N1c3QiLGljb246WzU3Niw1MTIsW10sImU1MjAiLCJNMzI4IDMyYzEzNyAwIDI0OCAxMTEgMjQ4IDI0OGwwIDQwLS40IDguMkM1NzEuNSAzNjguNSA1MzcuNCA0MDAgNDk2IDQwMGwtMTIuMyAwIDI1LjIgNDQuMWM2LjYgMTEuNSAyLjYgMjYuMi04LjkgMzIuOHMtMjYuMiAyLjYtMzIuNy04LjlsLTM4LjgtNjcuOS04MC40IDAtNDguMiA2OS43Yy03LjUgMTAuOS0yMi41IDEzLjYtMzMuNCA2LjFzLTEzLjYtMjIuNS02LjEtMzMuNGwyOS4zLTQyLjMtNzQuNSAwLTUxLjcgNzAuMmMtNy45IDEwLjctMjIuOSAxMi45LTMzLjYgNS4xcy0xMi45LTIyLjktNS4xLTMzLjZsNDAuNS01NS00My0xNi40LTc5LjMgMTAwLjVjLTguMiAxMC40LTIzLjMgMTIuMi0zMy43IDRzLTEyLjItMjMuMy00LTMzLjdsMjQwLTMwNCAyLjEtMi4zYzUuMi01LjEgMTIuNS03LjUgMTkuOS02LjYgOC40IDEuMSAxNS42IDYuNSAxOC45IDE0LjNsMjEuNyA1MC43IDQwLjktNTUuNSAyLjEtMi40YzUuMS01LjMgMTIuNS04IDIwLTcuMiA4LjUgMSAxNS45IDYuNSAxOS4zIDE0LjRsNDEuOCA5Ny41IDY0LjIgMGMxMC4yIDAgMjAgMiAyOSA1LjUtMTYuNC05NC05OC4zLTE2NS41LTE5Ny0xNjUuNWwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwek00ODggMjk2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHpNNDMuNSAzMzEuMUMzNi4yIDMyMS40IDMyIDMwOS41IDMyIDI5Ni44IDMyIDI2NS41IDU3LjUgMjQwIDg4LjkgMjQwbDI3LjYgMC03Mi45IDkxLjF6TTIyNS4xIDI0MGw0OC4yIDAgMS40LTEuOS0xNi45LTM5LjUtMzIuNyA0MS41em0xMDcuOCAwbDQ2LjcgMC0xNy4yLTQwLTI5LjUgNDB6Il19LGJJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpZ2h0LWxvbmciLGljb246WzU3Niw1MTIsWyJsb25nLWFycm93LWFsdC1yaWdodCJdLCJmMzBiIiwiTTU2Ni42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzODQgMzk2LjkgMzg0IDM4NGwwLTY0LTMzNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMzNiAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4eiJdfSxjTWU9YkksZE1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLWRyb3BsZXQiLGljb246WzU3Niw1MTIsW10sImU1OGMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjA4IDMwNGMtMzkuOCAwLTcyLTMyLjItNzItNzIgMC0zMy4yIDM0LjUtNzggNTUuOC0xMDIuNCA4LjctMTAgMjMuOC0xMCAzMi41IDAgMjEuMiAyNC40IDU1LjggNjkuMSA1NS44IDEwMi40IDAgNDgtMzIuMiA3Mi03MiA3MnoiXX0scE1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtaG9sZGluZy1tZWRpY2FsIixpY29uOls1NzYsNTEyLFtdLCJlMDVjIiwiTTI0MCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNTYgNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC01NiAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNTYtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1NiAwIDAtNTZ6TTY2LjcgMzg0bDQyLjUtNDIuNWMyNC0yNCA1Ni42LTM3LjUgOTAuNS0zNy41TDM1MiAzMDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyLjYgMCAxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXM5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM0LjcgMHoiXX0saE1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcG9pbnQtbGVmdCIsaWNvbjpbNTEyLDUxMixbXSwiZjBhNSIsIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmwyMDggMCAwLTY0LTIwOCAwek0xOTIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bS02NC02NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bTg4LTk2bC0uNiAwYzUuNCA5LjQgOC42IDIwLjMgOC42IDMyIDAgMTMuMi00IDI1LjQtMTAuOCAzNS42IDI0LjkgOC43IDQyLjggMzIuNSA0Mi44IDYwLjQgMCAxMS43LTMuMSAyMi42LTguNiAzMmw4LjYgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTYxLjdjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC0xMS42LTExLjZDNDI5LjUgNzcuNSAzOTYuOSA2NCAzNjMgNjRsLTI3IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTU2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnoiXX0sdU1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGN1bGF0b3IiLGljb246WzM4NCw1MTIsWzEyODQyNV0sImYxZWMiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNOTYgNjRsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2IDE2OGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwem04MCAyNGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyOC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek04OCAzNTJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjgtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHptODAgMjRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek02NCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMjMyLTI0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHoiXX0sdDg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWludXMiLGljb246WzQ0OCw1MTIsWzgyMTEsODcyMiwxMDEzNCwic3VidHJhY3QiXSwiZjA2OCIsIk0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxmTWU9dDgsdkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtei1hIixpY29uOls1MTIsNTEyLFsic29ydC1hbHBoYS11cC1hbHQiXSwiZjg4MiIsIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTI4OCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSAyMjQgMzIwIDIyNGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjEgMzIgNDQ4IDMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQxMi42IDI3My43QzQwNy4yIDI2Mi44IDM5Ni4xIDI1NiAzODQgMjU2cy0yMy4yIDYuOC0yOC42IDE3LjdsLTgwIDE2MGMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTgwLTE2MHpNMzg0IDM1OS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40eiJdfSxtTWU9dkksZ01lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvcGhvbmUtc2xhc2giLGljb246WzU3Niw1MTIsW10sImYxMzEiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MjQuNyAzNTguOEM0NTguOSAzMjQuMiA0ODAgMjc2LjYgNDgwIDIyNGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCAzOS4zLTE1LjcgNzQuOS00MS4zIDEwMC45TDM1Ni44IDI5MUMzNzMuNiAyNzMuNyAzODQgMjUwIDM4NCAyMjRsMC0xMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMC4yLTE1MS0xNTF6bTI5OC4zIDQzNGwtNDEuNC00MS40Yy0zLjMgLjItNi41IC4zLTkuOCAuMy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NGwwLTEwLjItNDMuNi00My42Yy0yLjggMy45LTQuNCA4LjctNC40IDEzLjhsMCA0MGMwIDk3LjkgNzMuMyAxNzguNyAxNjggMTkwLjVsMCA0OS41LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OS41YzkuMy0xLjIgMTguNC0zIDI3LjMtNS40eiJdfSx0bT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcGVuIixpY29uOls0NDgsNTEyLFsicGVuLXNxdWFyZSIsInBlbmNpbC1zcXVhcmUiXSwiZjE0YiIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjUuOCAxMzkuN2wxNC40IDE0LjRjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTIzLjggMjMuOC03MS03MSAyMy44LTIzLjhjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDB6TTExOS45IDI4OWw5MS41LTkxLjYgNzEgNzEtOTEuNiA5MS41Yy00LjEgNC4xLTkuMiA3LTE0LjkgOC40bC02MC4xIDE1Yy01LjUgMS40LTExLjItLjItMTUuMi00LjJzLTUuNi05LjctNC4yLTE1LjJsMTUtNjAuMWMxLjQtNS42IDQuMy0xMC44IDguNC0xNC45eiJdfSxiTWU9dG0sdk1lPXRtLHlJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtZmlzdCIsaWNvbjpbMzg0LDUxMixbOTk5NCwiZmlzdC1yYWlzZWQiXSwiZjZkZSIsIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMi02NCAwIDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgODAtNjQgMCAwLTgwem0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42IDEzLjIgMCAyNS40LTQgMzUuNi0xMC44IDguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjggMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03OC40Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDM3LjUgMzU3LjVDMTMuNSAzMzMuNSAwIDMwMC45IDAgMjY3bDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdfSx5TWU9eUkseEk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudC1zbXMiLGljb246WzUxMiw1MTIsWyJzbXMiXSwiZjdjZCIsIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMTQwLjggMTcyLjhsMTkuMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOS4yIDBjLTUuMyAwLTkuNiA0LjMtOS42IDkuNnM0LjMgOS42IDkuNiA5LjZjMjMgMCA0MS42IDE4LjYgNDEuNiA0MS42cy0xOC42IDQxLjYtNDEuNiA0MS42bC0yNS42IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMjUuNiAwYzUuMyAwIDkuNi00LjMgOS42LTkuNnMtNC4zLTkuNi05LjYtOS42Yy0yMyAwLTQxLjYtMTguNi00MS42LTQxLjZzMTguNi00MS42IDQxLjYtNDEuNnptMTg4LjggNDEuNmMwLTIzIDE4LjYtNDEuNiA0MS42LTQxLjZsMTkuMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xOS4yIDBjLTUuMyAwLTkuNiA0LjMtOS42IDkuNnM0LjMgOS42IDkuNiA5LjZjMjMgMCA0MS42IDE4LjYgNDEuNiA0MS42cy0xOC42IDQxLjYtNDEuNiA0MS42bC0yNS42IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMjUuNiAwYzUuMyAwIDkuNi00LjMgOS42LTkuNnMtNC4zLTkuNi05LjYtOS42Yy0yMyAwLTQxLjYtMTguNi00MS42LTQxLjZ6bS05OC4zLTMzLjhsMjQuNyA0MS4xIDI0LjctNDEuMWMzLjctNi4yIDExLjEtOS4xIDE4LTcuMnMxMS43IDguMiAxMS43IDE1LjRsMCAxMDIuNGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ0LjYtOC43IDE0LjVjLTIuOSA0LjgtOC4xIDcuOC0xMy43IDcuOHMtMTAuOC0zLTEzLjctNy44bC04LjctMTQuNSAwIDQ0LjZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xMDIuNGMwLTcuMiA0LjgtMTMuNSAxMS43LTE1LjRzMTQuMyAxIDE4IDcuMnoiXX0seE1lPXhJLHdNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaW0tY2FyZCIsaWNvbjpbMzg0LDUxMixbXSwiZjdjNCIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyNTguNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDgwYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MCAxMjggMCAwLTcyLTk2IDB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtNzItODAgMCAwIDQwem0yNTYgMGwwLTQwLTEyOCAwIDAgNzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDAgMCA3MiA4MCAwIDAtNDB6Il19LHdJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjYWxlLWJhbGFuY2VkIixpY29uOls2NDAsNTEyLFs5ODc4LCJiYWxhbmNlLXNjYWxlIl0sImYyNGUiLCJNMzg0IDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM5OC40IDk2Yy01LjIgMjUuOC0yMi45IDQ3LjEtNDYuNCA1Ny4zbDAgMjk0LjcgMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIzLjUtMTAuMy00MS4yLTMxLjYtNDYuNC01Ny4zTDEyOCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMGMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6bTU1LjYgMjg4TDU4NC40IDMyMCA1MTIgMTk1LjggNDM5LjYgMzIwek01MTIgNDE2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45ek0xMjYuOCAxOTUuOEw1NC40IDMyMCAxOTkuMyAzMjAgMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4LjlTMTEuNyAzODIgLjkgMzM3LjF6Il19LE1NZT13SSxNST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXIiLGljb246WzUxMiw1MTIsWzEyODY2NCwiYXV0b21vYmlsZSJdLCJmMWI5IiwiTTEzNS4yIDExNy40bC0yNi4xIDc0LjYgMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0zMjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDMwNGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSx6TWU9TUksekk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3JvcC1zaW1wbGUiLGljb246WzUxMiw1MTIsWyJjcm9wLWFsdCJdLCJmNTY1IiwiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTIwOCAwIDAtMzUyek0zODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDY0IDIwOCAwIDAgMzUyeiJdfSxrTWU9ekksU01lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1lZGFsIixpY29uOls0NDgsNTEyLFsxMjc5NDFdLCJmNWEyIiwiTTIyNC4zIDEyOEwxMzkuNy0xMi45Yy02LjUtMTAuOC0yMC4xLTE0LjctMzEuMy05LjFMMjEuOCAyMS4zQzkuOSAyNy4yIDUuMSA0MS42IDExIDUzLjVMODAuNiAxOTIuNmMtMzAuMSAzMy45LTQ4LjMgNzguNS00OC4zIDEyNy40IDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtNDguOS0xOC4zLTkzLjUtNDguMy0xMjcuNEw0MzcuNiA1My41YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMkwzNDAuMi0yMi4xYy0xMS4yLTUuNi0yNC45LTEuNi0zMS4zIDkuMUwyMjQuMyAxMjh6bTMwLjggMTQyLjVjMS40IDIuOCA0IDQuNyA3IDUuMWw1MC4xIDcuM2M3LjcgMS4xIDEwLjcgMTAuNSA1LjIgMTZsLTM2LjMgMzUuNGMtMi4yIDIuMi0zLjIgNS4yLTIuNyA4LjNsOC42IDQ5LjljMS4zIDcuNi02LjcgMTMuNS0xMy42IDkuOWwtNDQuOC0yMy42Yy0yLjctMS40LTYtMS40LTguNyAwbC00NC44IDIzLjZjLTYuOSAzLjYtMTQuOS0yLjItMTMuNi05LjlsOC42LTQ5LjljLjUtMy0uNS02LjEtMi43LTguM2wtMzYuMy0zNS40Yy01LjYtNS40LTIuNS0xNC44IDUuMi0xNmw1MC4xLTcuM2MzLS40IDUuNy0yLjQgNy01LjFsMjIuNC00NS40YzMuNC03IDEzLjMtNyAxNi44IDBsMjIuNCA0NS40eiJdfSxDTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nyb2xsIixpY29uOls1NzYsNTEyLFsxMjgyMjBdLCJmNzBlIiwiTTAgMTEyQzAgNzAuNSAzMS42IDM2LjQgNzIgMzIuNGwwLS40IDI4MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAxNzYtMTc2IDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgNjBjMCAyNC4zLTE5LjcgNDQtNDQgNDRzLTQ0LTE5LjctNDQtNDRsMC0yMjgtNjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC00OHpNMjM2LjggNDgwYzcuMS0xMy4xIDExLjItMjguMSAxMS4yLTQ0bDAtNjBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMjI3LjIgMHpNODAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdfSxfTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1leGNlbCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjMyIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTY0IDI2Ni43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM0wxNjMuMiAzNTIgMTI0IDQxMC43Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMjgtNDIgMjggNDJjNy40IDExIDIyLjMgMTQgMzMuMyA2LjdzMTQtMjIuMyA2LjctMzMuM0wyMjAuOCAzNTIgMjYwIDI5My4zYzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3MtMjUuOS00LjQtMzMuMyA2LjdsLTI4IDQyLTI4LTQyeiJdfSxUTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsdGVyIixpY29uOls1MTIsNTEyLFtdLCJmMGIwIiwiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzMyMCA0OTIuOSAzMjAgNDgwbDAtMTc4LjcgMTgyLjYtMTgyLjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0eiJdfSxMTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJ1bSIsaWNvbjpbNTEyLDUxMixbMTI5MzQ1XSwiZjU2OSIsIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NiAxMTQuNiA5NiAwIDEyOCAwIDIwOEwwIDM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdMNzIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMTkuNGMzMyA4LjkgNzEuMSAxNC41IDExMiAxNi4xTDIzMiAzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMy41YzQwLjktMS42IDc5LTcuMiAxMTItMTYuMUwzOTIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDIuN2M0NC42LTE5LjkgNzItNDcuNCA3Mi03OC43bDAtMTYwYzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjUgMzguOCAxNS4xIDQ0LjQgMzAuNiA0NC40IDQxLjMgMCAuOC0yLjcgMTcuMi00NiAzNS45LTM4LjkgMTYuOC05NiAyOC4xLTE2MiAyOC4xUzEzMi45IDI2MC43IDk0IDI0My45Yy00My4zLTE4LjctNDYtMzUuMS00Ni0zNS45IDAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjMgMzguMy0xNC45IDk1LjQtMjIuNyAxNjMuNi0yMi43IDE4IDAgMzUuMSAuNSA1MS40IDEuNnoiXX0sJE1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcC1waW4iLGljb246WzMyMCw1MTIsWzEyODIwNV0sImYyNzYiLCJNMTkyIDI4NC40QzI1Ni4xIDI2OS45IDMwNCAyMTIuNSAzMDQgMTQ0IDMwNCA2NC41IDIzOS41IDAgMTYwIDBTMTYgNjQuNSAxNiAxNDRjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40TDEyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5NS42ek0xNjggOTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNCA0Ni42LTEwNCAxMDQtMTA0IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdfSxrST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2FsZS11bmJhbGFuY2VkLWZsaXAiLGljb246WzY0MCw1MTIsWyJiYWxhbmNlLXNjYWxlLXJpZ2h0Il0sImY1MTYiLCJNMTE4LjIgNjIuNEMxMDEuNSA1Ni44IDkyLjQgMzguNiA5OCAyMS45UzEyMS43LTMuOSAxMzguNSAxLjZsMTEzIDM3LjdjMTMuOS0yMy41IDM5LjYtMzkuMyA2OC45LTM5LjMgNDQuMiAwIDgwIDM1LjggODAgODAgMCAzLS4yIDUuOS0uNSA4LjhsMTIyLjYgNDAuOWMxNi44IDUuNiAyNS44IDIzLjcgMjAuMiA0MC41cy0yMy43IDI1LjgtNDAuNSAyMC4yTDM2Ni43IDE0NS4yYy00LjUgMy4yLTkuMyA1LjktMTQuNCA4LjJsMCAzMjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDAgMC0yOTQuN2MtMjEtOS4yLTM3LjItMjctNDQuMi00OWwtMTI1LjktNDJ6TTIwMC44IDI4OEwxMjguMyAxNjMuOCA1NS45IDI4OCAyMDAuOCAyODh6bS03Mi40IDk2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45em0zODIuOC05Mi4ybC03Mi40IDEyNC4yIDE0NC45IDAtNzIuNC0xMjQuMnptMTI2IDE0MS4zQzYyNi40IDQ3OCA1NzQuMSA1MTIgNTExLjIgNTEycy0xMTUuMi0zNC0xMjYtNzguOWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMXoiXX0sQU1lPWtJLERNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtdG8tY2lyY2xlIixpY29uOls1MTIsNTEyLFtdLCJlNGJkIiwiTTkuNCA5LjRDMjEuOS0zLjEgNDIuMS0zLjEgNTQuNiA5LjRMMTI4IDgyLjcgMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOC43IDAtNzMuNC03My40Qy0zLjEgNDIuMS0zLjEgMjEuOSA5LjQgOS40ek0yMDAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNNTAyLjYgNTQuNkw0MjkuMyAxMjggNDQ4IDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTguNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptLTQ1LjMgNDQ4TDM4NCA0MjkuMyAzODQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguNyAwIDczLjQgNzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMHpNOS40IDQ1Ny40TDgyLjcgMzg0IDY0IDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC43LTczLjQgNzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6Il19LEVNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZSIsaWNvbjpbNTEyLDUxMixbMTI4Mzg2LDk5OTMsNjE0NDNdLCJmMGUwIiwiTTQ4IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40bDIwOCAxNTZjMTcuMSAxMi44IDQwLjUgMTIuOCA1Ny42IDBsMjA4LTE1NmMxMi4xLTkuMSAxOS4yLTIzLjMgMTkuMi0zOC40IDAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDY0ek0wIDE5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE4OC0xOTguNCAxNDguOGMtMzQuMSAyNS42LTgxLjEgMjUuNi0xMTUuMiAwTDAgMTk2eiJdfSxQTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFieSIsaWNvbjpbMzg0LDUxMixbXSwiZjc3YyIsIk0xMjAgODhhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwek03LjcgMTQ0LjVjMTMtMTcuOSAzOC0yMS44IDU1LjktOC44TDk5LjggMTYyYzI2LjggMTkuNSA1OS4xIDMwIDkyLjIgMzBzNjUuNC0xMC41IDkyLjItMzBsMzYuMi0yNi40YzE3LjktMTMgNDIuOS05IDU1LjkgOC44czkgNDIuOS04LjggNTUuOWwtMzYuMiAyNi40Yy0xMy42IDkuOS0yOC4xIDE4LjItNDMuMyAyNWwwIDM2LjMtMTkyIDAgMC0zNi4zYy0xNS4yLTYuNy0yOS43LTE1LjEtNDMuMy0yNUwxNi41IDIwMC4zYy0xNy45LTEzLTIxLjgtMzgtOC44LTU1Ljl6TTk3LjUgMzI5LjNsNjAuNiA1My0yNiAzNy4yIDI0LjMgMjQuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtNDgtNDhDMzggNDM4LjYgMzYuMSA0MTcgNDcuMiA0MDEuMWw1MC4yLTcxLjh6bTEyOC41IDUzbDYwLjYtNTMgNTAuMiA3MS44YzExLjEgMTUuOSA5LjIgMzcuNS00LjUgNTEuMmwtNDggNDhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42bDI0LjMtMjQuMy0yNi0zNy4yeiJdfSxTST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtZG93biIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1kb3duIl0sImYxNTAiLCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il19LElNZT1TSSxOTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVudCIsaWNvbjpbNTEyLDUxMixbXSwiZTU3ZCIsIk0yNi45IDIwNi45TDMuNyA0NDQuOUMxLjggNDYzLjcgMTYuNiA0ODAgMzUuNSA0ODBsMTcyLjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOWMwLTguMyA2LjctMTUgMTUtMTUgNS41IDAgMTAuNiAzIDEzLjIgNy45bDg2LjEgMTU5YzguNCAxNS41IDI0LjYgMjUuMSA0Mi4yIDI1LjFsNjQuMSAwYzE4LjkgMCAzMy43LTE2LjMgMzEuOC0zNS4xTDQ4NS42IDIwNy4xYy0xLjktMTkuNi0xMi44LTM3LjMtMjkuNS00Ny44TDI4MC45IDQ4LjNjLTE1LjctMTAtMzUuOC05LjktNTEuNSAuMUw1Ni4xIDE1OS4yYy0xNi41IDEwLjYtMjcuMyAyOC4yLTI5LjIgNDcuN3oiXX0sRk1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImEiLGljb246WzM4NCw1MTIsWzk3XSwiNDEiLCJNMjIxLjUgNTEuN0MyMTYuNiAzOS44IDIwNC45IDMyIDE5MiAzMnMtMjQuNiA3LjgtMjkuNSAxOS43Yy05My4zIDIyNC0xNDYuNyAzNTItMTYwIDM4NC02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4ybDMxLjgtNzYuMyAxOTcuMyAwIDMxLjggNzYuM2M2LjggMTYuMyAyNS41IDI0IDQxLjggMTcuMnMyNC0yNS41IDE3LjItNDEuOGMtMTMuMy0zMi02Ni43LTE2MC0xNjAtMzg0ek0yNjQgMzIwbC0xNDQgMCA3Mi0xNzIuOCA3MiAxNzIuOHoiXX0sT01lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhcmFjaHV0ZS1ib3giLGljb246WzUxMiw1MTIsW10sImY0Y2QiLCJNMTI4IDIyNEMxMjggMTUyLjIgMTQ0LjMgODguNCAxNjkuNSA0My40IDE5NS4xLTIuNCAyMjYuNi0yNCAyNTYtMjRzNjAuOSAyMS42IDg2LjUgNjcuNEMzNjcuNyA4OC40IDM4NCAxNTIuMiAzODQgMjI0bC0xMDQgMCAwIDk2IDggMGM5LjMgMCAxOC4xIDIgMjYgNS41bDExOC40LTEwMS41LS41IDBjMC03OC40LTE3LjctMTUwLjYtNDcuNi0yMDQtNi4xLTExLTEyLjktMjEuMy0yMC4zLTMwLjkgODYuNSAzNS45IDE0Ny44IDExNS4xIDE0Ny44IDIxOC45IDAgNy0zLjEgMTMuNy04LjQgMTguMkwzNDcuNCAzNjAuMWMzIDcuNCA0LjYgMTUuNCA0LjYgMjMuOWwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtOC40IDEuNi0xNi41IDQuNi0yMy45TDguNCAyMjYuMkMzLjEgMjIxLjcgMCAyMTUgMCAyMDggMCAxMDQuMiA2MS4zIDI0LjkgMTQ3LjgtMTAuOSAxNDAuNS0xLjQgMTMzLjcgOSAxMjcuNiAyMCA5Ny43IDczLjQgODAgMTQ1LjYgODAgMjI0bC0uNSAwIDExOC40IDEwMS41YzgtMy41IDE2LjgtNS41IDI2LTUuNWw4IDAgMC05Ni0xMDQgMHoiXX0sUk1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcnQtYXJyb3ctZG93biIsaWNvbjpbNjQwLDUxMixbXSwiZjIxOCIsIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgMTg3LjIgMCAwIDEwMi4xLTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjEgMTc3LjQgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sQk1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyaWRnZS1jaXJjbGUtZXhjbGFtYXRpb24iLGljb246WzU3Niw1MTIsW10sImU0Y2EiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxhbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1hcnJvdy11cCIsaWNvbjpbNTc2LDUxMixbNjIzMzgsImNsb3VkLXVwbG9hZCIsImNsb3VkLXVwbG9hZC1hbHQiXSwiZjBlZSIsIk0xNDQgNDgwYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTYzLjQgNDEtMTE3LjIgOTcuOS0xMzYuNS0xLjMtNy43LTEuOS0xNS41LTEuOS0yMy41IDAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0IDU1LjQgMCAxMDMuNSAzMS4zIDEyNy42IDc3LjEgMTQuMi04LjMgMzAuOC0xMy4xIDQ4LjQtMTMuMSA1MyAwIDk2IDQzIDk2IDk2IDAgMTUuNy0zLjggMzAuNi0xMC41IDQzLjcgNDQgMjAuMyA3NC41IDY0LjcgNzQuNSAxMTYuMyAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzA0IDB6TTMwNSAxOTFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC03MiA3MmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMxLTMxIDAgMTAyLjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMi4xIDMxIDMxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJ6Il19LEhNZT1hbSxxTWU9YW0sVk1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImF0IixpY29uOls1MTIsNTEyLFs2MTk0Nl0sIjQwIiwiTTI1NiA2NEMxNTAgNjQgNjQgMTUwIDY0IDI1NnM4NiAxOTIgMTkyIDE5MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkMxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwIDUxMiAxMTQuNiA1MTIgMjU2bDAgMzJjMCA1My00MyA5Ni05NiA5Ni0yOS4zIDAtNTUuNi0xMy4yLTczLjItMzMuOS0yMi44IDIxLTUzLjMgMzMuOS04Ni44IDMzLjktNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOGMyNy45IDAgNTMuNyA4LjkgNzQuNyAyNC4xIDUuNy01IDEzLjEtOC4xIDIxLjMtOC4xIDE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMmMwLTEwNi04Ni0xOTItMTkyLTE5MnptNjQgMTkyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHoiXX0saW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW5kaWFuLXJ1cGVlLXNpZ24iLGljb246WzMyMCw1MTIsWyJpbmRpYW4tcnVwZWUiLCJpbnIiXSwiZTFiYyIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03Ni43IDBjMTcuNyAxOS44IDMwLjEgNDQuNiAzNC43IDcybDQyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQyIDBjLTEwLjQgNjIuMi02MC44IDExMC45LTEyMy44IDExOC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmw4MCAwYzM1LjggMCA2Ni4xLTIzLjUgNzYuMy01NkwyNCAyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTY0LjMgMGMtMTAuMi0zMi41LTQwLjUtNTYtNzYuMy01NkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdfSxqTWU9aW0sVU1lPWltLFdNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjayIsaWNvbjpbNTc2LDUxMixbMTI4NjY2LDk5NTFdLCJmMGQxIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTU3LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTUxMiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0xOTIgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il19LENJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYWxrYm9hcmQtdXNlciIsaWNvbjpbNjQwLDUxMixbImNoYWxrYm9hcmQtdGVhY2hlciJdLCJmNTFjIiwiTTE5MiAzODRjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyIDAtNTMgNDMtOTYgOTYtOTZsOTYgMHpNNTQ0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzMuMS0yNS4yIDYwLjQtNTcuNSA2My43bC02LjUgLjMtMjExLjEgMGMtNS4xLTI0LjItMTYuMy00Ni4xLTMyLjEtNjRsNTEuMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDAgMC0yODgtMzUyIDAgMCA1Ny4zYy0xNC44LTYtMzEtOS4zLTQ4LTkuMy01LjQgMC0xMC44IC4zLTE2IDFsMC00OWMwLTM1LjMgMjguNy02NCA2NC02NGwzNTIgMHpNMTQ0IDM1MmE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHoiXX0sR01lPUNJLFlNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJmNGZjIiwiTTI4NiAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzggNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDB6TTU4NS43IDEwNS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVMNTIyLjEgMjc0LjljLTQuMiA1LjctMTAuNyA5LjQtMTcuNyA5LjhzLTE0LTIuMi0xOC45LTcuM2wtNDYuNC00OGMtOS4yLTkuNS05LTI0LjcgLjYtMzMuOSA5LjUtOS4yIDI0LjctOC45IDMzLjkgLjZsMjYuNSAyNy40IDg1LjYtMTE3Ljd6TTI1Ni4zIDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6Il19LFpNZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLW5pbmphIixpY29uOls0NDgsNTEyLFsxMjkzOTldLCJmNTA0IiwiTTM1MiAxMjhjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNTcuMiAwLTEwNS42LTM3LjUtMTIyLTg5LjMtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjgtMTUuOCAxNS44LTM4LjggMjAuNy01My42IDIyLjEtOC4xIC44LTE0LjYtNS43LTEzLjgtMTMuOCAxLjQtMTQuNyA2LjMtMzcuOCAyMi4xLTUzLjYgNS44LTUuOCAxMi42LTEwLjEgMTkuNi0xMy40LTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNC0xNS44LTE1LjgtMjAuNy0zOC44LTIyLjEtNTMuNi0uOC04LjEgNS43LTE0LjYgMTMuOC0xMy44IDE0LjcgMS40IDM3LjggNi4zIDUzLjYgMjIuMSA0LjggNC44IDguNyAxMC40IDExLjcgMTYuMSAyMS4zLTQxLjIgNjQuMy02OS40IDExMy44LTY5LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjh6TTE0NCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDE2MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2em0tMS40IDIxMWw2NyA1MC4yYzguNSA2LjQgMjAuMyA2LjQgMjguOCAwbDY3LTUwLjJjNi41LTQuOSAxNS4yLTYuMiAyMi42LTIuOCA2MS40IDI4LjIgMTA0LjEgOTAuMiAxMDQuMSAxNjIuMSAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w0NS43IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC03MiA0Mi43LTEzNCAxMDQuMS0xNjIuMSA3LjQtMy40IDE2LjEtMi4xIDIyLjYgMi44eiJdfSxYTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbnQtd2lsdCIsaWNvbjpbNTEyLDUxMixbXSwiZTVhYSIsIk0zNDQtMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjBsMCA2LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM2MtNDAuNy0zNi44LTY2LTgzLjctNjYtMTExLjcgMC0zNS42IDE4LjctNjQuNyA0OC03Ni45bDAtNi4yYzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgNDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjk2YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgMzguMmMyOS4zIDEyLjIgNDggNDEuMyA0OCA3Ni45IDAgMjcuOS0yNS4zIDc0LjgtNjYgMTExLjctMy44IDMuNS04LjggNS4zLTE0IDUuM3MtMTAuMi0xLjgtMTQtNS4zQzI1LjMgNDA1LjkgMCAzNTkgMCAzMzEuMSAwIDI5NS40IDE4LjcgMjY2LjQgNDggMjU0LjJMNDggMjE2YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwIDIwLjIgMCAzOS4zIDUgNTYgMTMuOEwyMjQgODhjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6Il19LF9JPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndlaWdodC1zY2FsZSIsaWNvbjpbNDQ4LDUxMixbIndlaWdodCJdLCJmNDk2IiwiTTExNi42IDE5MmMtMy0xMC4xLTQuNi0yMC45LTQuNi0zMiAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMlMzMzYgOTguMSAzMzYgMTYwYzAgMTEuMS0xLjYgMjEuOS00LjYgMzJsLTcxIDAgMjQuNi00NC4zYzYuNC0xMS42IDIuMy0yNi4yLTkuMy0zMi42cy0yNi4yLTIuMy0zMi42IDkuM2wtMzcuNiA2Ny43LTg4LjggMHpNMTI4IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBDMjkzLjMgMTEuOSAyNjAgMCAyMjQgMHMtNjkuMyAxMS45LTk2IDMyeiJdfSxLTWU9X0ksS209e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyZXQtcmlnaHQiLGljb246WzI1Niw1MTIsW10sImYwZGEiLCJNMjQ5LjMgMjM1LjhjMTAuMiAxMi42IDkuNSAzMS4xLTIuMiA0Mi44bC0xMjggMTI4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVM2NC41IDM5Ni45IDY0LjUgMzg0bDAtMjU2YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsMTI4IDEyOCAyLjIgMi40eiJdfSxRTWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmxvcmluLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUxODQiLCJNMzE0LjcgMzJjLTM4LjggMC03My43IDIzLjMtODguNiA1OS4xTDE3MC43IDIyNCA2NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMC00NS4xIDEwOC4zYy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN0wzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcuMyAwYzM4LjggMCA3My43LTIzLjMgODguNi01OS4xTDIxMy4zIDI4OCAzMjAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDQ1LjEtMTA4LjNjNS0xMS45IDE2LjYtMTkuNyAyOS41LTE5LjdMMzUyIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNy4zIDB6Il19LFFtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJlbGwiLGljb246WzQ0OCw1MTIsWzEyODI3Niw2MTYwMl0sImYwZjMiLCJNMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMy4yQzExOSA1MCA2NCAxMTQuNiA2NCAxOTJsMCAyMS43YzAgNDguMS0xNi40IDk0LjgtNDYuNCAxMzIuNEw3LjggMzU4LjNDMi43IDM2NC42IDAgMzcyLjQgMCAzODAuNSAwIDQwMC4xIDE1LjkgNDE2IDM1LjUgNDE2bDM3Ni45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTkuOC0xMi4yQzQwMC40IDMwOC41IDM4NCAyNjEuOCAzODQgMjEzLjdsMC0yMS43YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44bDAtMy4yYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjIgNDY0YzcuMSAyNy42IDMyLjIgNDggNjIgNDhzNTQuOS0yMC40IDYyLTQ4bC0xMjQgMHoiXX0sSk1lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxhcmktc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTFjOCIsIk0xNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQxLjVjNy45LTEgMTUuOS0xLjUgMjQtMS41czE2LjEgLjUgMjQgMS41TDIxNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNTRjNTguOSAyMy44IDEwMy4yIDc2IDExNi4yIDEzOS43IDMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuNy0zMy4yLTI2LjQtNjEuOC01My40LTgwLjJsMCA4MS44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAxLjhjLTcuOC0xLjUtMTUuOC0yLjItMjQtMi4ycy0xNi4yIC44LTI0IDIuMkwxNjggMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODEuOGMtMzMuOCAyMy01NiA2MS45LTU2IDEwNS44IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNi45IDBDMTguNSAzNTAgMCAzMDUuMiAwIDI1NiAwIDE3NS40IDQ5LjYgMTA2LjQgMTIwIDc4bDAtNTRjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il19LGV6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtaWxsLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUxZWQiLCJNMjk3LTIyLjJjMTIuMyA1IDE4LjIgMTkgMTMuMiAzMS4zbC0yOSA3MS4zQzMzOC44IDg1LjEgMzg0IDEzMy4zIDM4NCAxOTJsMCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDgtNi40IDAtMTIuNSAxLjItMTggMy41bC0zMCA3My44IDAgMTc4LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMS4yLTU3LjggMTQyLjJjLTUgMTIuMy0xOSAxOC4yLTMxLjMgMTMuMnMtMTguMi0xOS0xMy4yLTMxLjNMMTYwIDI1MS4zIDE2MCAxOTJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0MTcuNyAwIDQwMEwwIDExMmMwLTE3LjcgMTQuMy0zMiAzMi0zMiAxMC45IDAgMjAuNSA1LjQgMjYuMyAxMy43IDE2LTguNyAzNC4zLTEzLjcgNTMuNy0xMy43IDMxLjMgMCA1OS43IDEyLjkgODAgMzMuNiA5LjYtOS44IDIwLjktMTcuOCAzMy41LTIzLjVMMjY1LjgtOWM1LTEyLjMgMTktMTguMiAzMS4zLTEzLjJ6Il19LFRJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1zbm93Ym9hcmRpbmciLGljb246WzU3Niw1MTIsWzEyNzkzOCwic25vd2JvYXJkaW5nIl0sImY3Y2UiLCJNNDI0LjUgMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2Ni40IDQ1LjVjMTAuMi0xNC40IDMwLjItMTcuOSA0NC42LTcuN2wyNzIgMTkyYzE0LjQgMTAuMiAxNy45IDMwLjIgNy43IDQ0LjZzLTMwLjIgMTcuOS00NC42IDcuN2wtOTIuMi02NS4xLTYyLjIgNTMuMyAzMi4xIDI2LjdjMTguMiAxNS4yIDI4LjggMzcuNyAyOC44IDYxLjVsMCA4Ny44IDc3LjUgMTUuMmM2LjIgMS4yIDEyLjYgLjkgMTguNy0uOGw0MS4yLTExLjhjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtNDEuMiAxMS44Yy0xMy40IDMuOC0yNy40IDQuNC00MS4xIDEuOEw4Ny4xIDQ0My4zYy0xNy4yLTMuNC0zMy0xMS44LTQ1LjMtMjQuMUwxNS41IDM5M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDI2LjIgMjYuMmM1LjYgNS42IDEyLjggOS40IDIwLjYgMTFsNjQuMiAxMi42IDAtMTIzLjdjMC0yNy43IDEyLTU0IDMyLjgtNzIuMmw2OS02MC40LTg4LjItNjIuM0MxNTkuNiA4MCAxNTYuMiA2MCAxNjYuNCA0NS41em01OC4xIDM3NS43bDY0IDEyLjUgMC03NS4zYzAtNC43LTIuMS05LjMtNS44LTEyLjNsLTU4LjItNDguNSAwIDEyMy42eiJdfSx0emU9VEksTEk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHR5IixpY29uOls1MTIsNTEyLFsidGVsZXR5cGUiXSwiZjFlNCIsIk00NTAuMiAyNjYuOGMxNS44IDYuNSAzNC4xIC4zIDQyLjYtMTQuNmwyLjQtNC4yYzI3LjktNDguOSAyMy42LTExOC44LTMxLjMtMTU0LjUtMTI2LTgyLTI4OS42LTgyLTQxNS42IDAtNTQuOSAzNS43LTU5LjMgMTA1LjctMzEuMyAxNTQuNWwyLjQgNC4yYzguNSAxNC45IDI2LjcgMjEuMSA0Mi42IDE0LjZsODEuOS0zMy43YzEzLjktNS43IDIyLjQtMTkuOSAyMC45LTM0LjlsLTUuMS01MWM2Mi41LTIxIDEzMC44LTE5LjkgMTkyLjYgMy4zbC00LjggNDcuN2MtMS41IDE1IDcgMjkuMiAyMC45IDM0LjlsODEuOSAzMy43ek0zMiAzNTJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptOTYgMGEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwek02NCA0MTZhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0zNTIgMzJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHpNMjU2IDMyMGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTY0IDMyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTEyOC0zMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTEyOCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXX0sYXplPUxJLGl6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2Vycy1yZWN0YW5nbGUiLGljb246WzU3Niw1MTIsW10sImU1OTQiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjI0IDcyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0wIDE1MmM1MyAwIDk2IDQzIDk2IDk2bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtNTMgNDMtOTYgOTYtOTZ6bTk2LTY0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAyNzIuM2MtMTUuMiAyMi44LTI0IDUwLjItMjQgNzkuN2wwIDI0YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNDYuOCAwQzg5LjYgNDAwIDgwIDM5MC40IDgwIDM3OC43TDgwIDM2OGMwLTUwLjMgMzguNy05MS42IDg4LTk1Ljd6TTQyNy45IDQwMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLTI0YzAtMjkuNS04LjgtNTYuOS0yNC03OS43IDQ5LjMgNC4xIDg4IDQ1LjMgODggOTUuN2wwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNDYuOCAwek05NiAxOTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0scm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9iaWxlIixpY29uOlszODQsNTEyLFsxMjgyNDEsIm1vYmlsZS1hbmRyb2lkIiwibW9iaWxlLXBob25lIl0sImYzY2UiLCJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwem03MiA0MTZsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0scnplPXJtLHN6ZT1ybSxuemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXR1cm4tdG8tZG90cyIsaWNvbjpbNDQ4LDUxMixbXSwiZTRjMSIsIk0yNjUuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyODUuMyA2NCAzNTIgNjRjNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTY2LjcgMCAyNS40IDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w4MC04MHptLTgyLjcgMjcybDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTYyLjcgNDAwIDk2IDQwMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ4MS43IDAgNDY0bDAtMzJjMC01MyA0My05NiA5Ni05Nmw2Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwek0zMjAgMzY4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTYwYTY0IDY0IDAgMSAxIDAtMTI4IDY0IDY0IDAgMSAxIDAgMTI4eiJdfSxvemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXhjbGFtYXRpb24iLGljb246WzEyOCw1MTIsWzEwMDY5LDEwMDcxLDYxNzM4XSwiMjEiLCJNNjQgNDMyYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwLTQwLTE3LjktNDAtNDBjMC0yMi4xIDE3LjktNDAgNDAtNDB6TTY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAuNiAwIDEuMSAwIDEuN2wtMTYgMzA0Yy0uOSAxNy0xNSAzMC4zLTMyIDMwLjNTMzMgMzcwLjcgMzIgMzUzLjdMMTYgNDkuN2MwLS42IDAtMS4xIDAtMS43IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdfSxsemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2h1cmNoIixpY29uOls1MTIsNTEyLFs5OTYyXSwiZjUxZCIsIk0yODAtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyMzItMjEuMyAyMzItOGwwIDI0LTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDQ4LTk4LjYgNjUuOEMxMjAgMTg2LjcgMTEyIDIwMS42IDExMiAyMTcuN2wwIDM4LjMtNzkuOCA0NS42QzEyLjMgMzEzIDAgMzM0LjIgMCAzNTcuMUwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCA3NC43IDAgODUuNCAwIDMyMCAwbDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05MC45YzAtMjMtMTIuMy00NC4yLTMyLjItNTUuNkw0MDAgMjU2IDQwMCAyMTcuN2MwLTE2LTgtMzEtMjEuNC0zOS45bC05OC42LTY1LjggMC00OCAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMjR6TTI1NiAzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4MC0xMjggMCAwLTgwYzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdfSxjemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9nZ2xlLW9mZiIsaWNvbjpbNTc2LDUxMixbXSwiZjIwNCIsIk0zODQgMTI4YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzQ1NC43IDM4NCAzODQgMzg0bC0xOTIgMGMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOGwxOTIgMHpNNTc2IDI1NmMwLTEwNi04Ni0xOTItMTkyLTE5MkwxOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhsMTkyIDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTJ6TTE5MiAzMzZhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6Il19LGR6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaG9lLXByaW50cyIsaWNvbjpbNTc2LDUxMixbXSwiZjU0YiIsIk0yOTYgMTkyYy0yMS4xLTEyLjEtNDIuMy0yNC4yLTcyLTI5LjNsMC0xNDAuM0MyNTcuNyAxMyAzMTEuNCAwIDM1MiAwIDQ0OCAwIDU3NiA0OCA1NzYgMTI4cy0xMTkuNiA5Ni0xNzYgOTZjLTQ4IDAtNzYtMTYtMTA0LTMyek0xMjggMzJsNDggMCAwIDEyOC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0ek0yMzIgMzIwYzI4LTE2IDU2LTMyIDEwNC0zMiA1Ni40IDAgMTc2IDE2IDE3NiA5NlMzODQgNTEyIDI4OCA1MTJjLTQwLjUgMC05NC4zLTEzLTEyOC0yMi40bDAtMTQwLjNjMjkuNy01LjIgNTAuOS0xNy4zIDcyLTI5LjR6TTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OCAwIDAgMTI4LTQ4IDB6Il19LHB6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNTc2LDUxMixbXSwiZTRlYiIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxKbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YWxsZXQiLGljb246WzUxMiw1MTIsW10sImY1NTUiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw3MiAxMjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgMzJ6TTQxNiAyNTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxhOD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtZXNzYWdlIixpY29uOls1MTIsNTEyLFsiY29tbWVudC1hbHQiXSwiZjI3YSIsIk0wIDM1MkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDMyMCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5NmwtMTIwIDBjLTUuMiAwLTEwLjIgMS43LTE0LjQgNC44TDE2Ni40IDUzOS4yYy00LjIgMy4xLTkuMiA0LjgtMTQuNCA0LjgtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC03Mi0zMiAwYy01MyAwLTk2LTQzLTk2LTk2eiJdfSxoemU9YTgsdXplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyb3BoeSIsaWNvbjpbNTEyLDUxMixbMTI3OTQyXSwiZjA5MSIsIk0xNDQuMyAwbDIyNCAwYzI2LjUgMCA0OC4xIDIxLjggNDcuMSA0OC4yLS4yIDUuMy0uNCAxMC42LS43IDE1LjhsNDkuNiAwYzI2LjEgMCA0OS4xIDIxLjYgNDcuMSA0OS44LTcuNSAxMDMuNy02MC41IDE2MC43LTExOCAxOTAuNS0xNS44IDguMi0zMS45IDE0LjMtNDcuMiAxOC44LTIwLjIgMjguNi00MS4yIDQzLjctNTcuOSA1MS44bDAgNzMuMSA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtNzMuMWMtMTYtNy43LTM1LjktMjItNTUuMy00OC4zLTE4LjQtNC44LTM4LjQtMTIuMS01Ny45LTIzLjEtNTQuMS0zMC4zLTEwMi45LTg3LjQtMTA5LjktMTg5LjktMS45LTI4LjEgMjEtNDkuNyA0Ny4xLTQ5LjdsNDkuNiAwYy0uMy01LjItLjUtMTAuNC0uNy0xNS44LTEtMjYuNSAyMC42LTQ4LjIgNDcuMS00OC4yek0xMDEuNSAxMTJsLTUyLjQgMGM2LjIgODQuNyA0NS4xIDEyNy4xIDg1LjIgMTQ5LjYtMTQuNC0zNy4zLTI2LjMtODYtMzIuOC0xNDkuNnpNMzgwIDI1Ni44YzQwLjUtMjMuOCA3Ny4xLTY2LjEgODMuMy0xNDQuOEw0MTEgMTEyYy02LjIgNjAuOS0xNy40IDEwOC4yLTMxIDE0NC44eiJdfSwkST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWRpenp5IixpY29uOls1MTIsNTEyLFsiZGl6enkiXSwiZjU2NyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMzA0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxmemU9JEksbXplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhY3RlcmlhIixpY29uOls2NDAsNTEyLFtdLCJlMDU5IiwiTTI1Ni0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDMxMSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMMzQ1IDE1MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUwyMTcgMjc5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDczIDMxM2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwzOSAxNjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xYzEwLTEwIDIwLTIwIDMwLjEtMzAuMUwxMDMgMTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMSAzMC4xLTMwLjEtNC4xLTQuMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlTMTkxLjYtMi4zIDIwMSA3bDYuMyA2LjNjNy44LTQuNiAxNi4yLTggMjQuOC0xMC4zbDAtMTFjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTEyOCAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0yNDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI5NiA0MGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDU2NyAxOTljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02LjMgNi4zYzQuNiA3LjggOCAxNi4yIDEwLjMgMjQuOGwxMSAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMSAwYy0yLjIgOC42LTUuNiAxNi45LTEwLjMgMjQuOEw2MDEgMzQzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjEtMzAuMSAzMC4xIDQuMSA0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMWMtMTAgMTAtMjAgMjAtMzAuMSAzMC4xTDQ3MyA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNi4zLTYuM2MtNy44IDQuNi0xNi4yIDgtMjQuOCAxMC4zbDAgMTFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMWMtOC42LTIuMi0xNi45LTUuNi0yNC44LTEwLjNMMzI5IDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwyOTUgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzU5IDI5N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ0OCAzODRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0sTzU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFyLWRlYWYiLGljb246WzUxMiw1MTIsWyJkZWFmIiwiZGVhZm5lc3MiLCJoYXJkLW9mLWhlYXJpbmciXSwiZjJhNCIsIk01MDIuNiA1NC42bC00MCA0MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDAtNDBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptLTMyMCAzMjBsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMjQwIDEyOGMtNTcuNiAwLTEwNS4xIDQzLjYtMTExLjMgOTkuNS0xLjkgMTcuNi0xNy44IDMwLjItMzUuMyAyOC4zcy0zMC4yLTE3LjgtMjguMy0zNS4zYzkuNy04OCA4NC4zLTE1Ni41IDE3NC45LTE1Ni41IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgNDYtMTcuNyA4Ny45LTQ2LjYgMTE5LjMtMTIgMTMtMTcuNCAyNC44LTE3LjQgMzQuN2wwIDYuMWMwIDYxLjktNTAuMSAxMTItMTEyIDExMi0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNi4xYzAtMzIuOSAxNy40LTU5LjYgMzQuNC03OCAxOC40LTIwIDI5LjYtNDYuNiAyOS42LTc1LjkgMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LGd6ZT1PNSxiemU9TzUsdnplPU81LEFJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlb3BsZS1hcnJvd3MiLGljb246WzUxMiw1MTIsWyJwZW9wbGUtYXJyb3dzLWxlZnQtcmlnaHQiXSwiZTA2OCIsIk0zMiA2NEE2NCA2NCAwIDEgMSAxNjAgNjQgNjQgNjQgMCAxIDEgMzIgNjR6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMy4yIDAgNi40IC4yIDkuNSAuN0w5My4xIDIwNS4xQzY1IDIzMy4yIDY1IDI3OC44IDkzLjEgMzA2LjlsNTYgNTZjMy40IDMuNCA3IDYuNCAxMC45IDlsMCA5Mi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyMC42QzEyLjkgMzMyLjQgMCAzMTEuNyAwIDI4OGwwLTY0ek0zNTIgNjRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem02Ni45IDE0MS4xbC00NC40LTQ0LjRjMy4xLS41IDYuMy0uNyA5LjUtLjdsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNEw0ODAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTkyLjFjMy45LTIuNiA3LjUtNS42IDEwLjktOWw1Ni01NmMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjh6TTMwMi44IDE3Ny44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggMzIxLjcgMjg4IDMxMmwwLTI0LTY0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgMTkwLjMgMjI0IDIwMGwwIDI0IDY0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6Il19LHl6ZT1BSSx4emU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtY2xhcHBpbmciLGljb246WzUxMiw1MTIsW10sImUxYTgiLCJNMzQ0IDhsMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0UzM0NC01LjMgMzQ0IDh6TTIyMCAxMC43bDMyIDQ4YzcuNCAxMSA0LjQgMjUuOS02LjcgMzMuM3MtMjUuOSA0LjQtMzMuMy02LjdsLTMyLTQ4Yy03LjQtMTEtNC40LTI1LjkgNi43LTMzLjNTMjEyLjYtLjMgMjIwIDEwLjd6TTEzNSAxMTljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjkyLjcgMjQyLjdjMTAuMSAxMC4xIDI3LjMgMi45IDI3LjMtMTEuM2wwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNC02NCAzOC40LTE0NS44IDI4LjMtMTk4LjUtMjQuNEw3IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDUzIDUzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDIzIDI2NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkzIDkzYzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xTDU1IDE4NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDExNyAxMTdjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFsLTkzLTkzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNNDMzLjEgNDg0LjljLTI0LjIgMTQuNS01MC45IDIyLjEtNzcuNyAyMy4xIDQ4LjEtMzkuNiA3Ni42LTk5IDc2LjYtMTYyLjRsMC05OC4xYzguMi0uMSAxNi02LjQgMTYtMTZsMC0zOS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNTMuNmMwIDU3LjEtMzAgMTEwLTc4LjkgMTM5LjR6TTQ1My4zIDRjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNsLTMyIDQ4Yy03LjQgMTEtMjIuMyAxNC0zMy4zIDYuN3MtMTQtMjIuMy02LjctMzMuM2wzMi00OGM3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN3oiXX0sd3plPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpcnVzLWNvdmlkLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJlNGE5IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTgzLTgzIDExLjQtMTEuNGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xMS4zIDExLjMtMjMuOC0yMy44YzE3LjktMjMuNSAyOS45LTUxLjcgMzQuMS04Mi4zbDMzLjYgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTMzLjYgMGMtNC4yLTMwLjctMTYuMy01OC44LTM0LjEtODIuM2wyMy44LTIzLjggMTEuMyAxMS4zYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0NDAuNyA0Ni43Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDExLjMgMTEuMy0yMy44IDIzLjhDMzcwLjggOTcuOSAzNDIuNyA4NS44IDMxMiA4MS42bDAtMzMuNiAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzM0MS4zIDAgMzI4IDBMMjQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjZjLTMwLjcgNC4yLTU4LjggMTYuMy04Mi4zIDM0LjFMMTU3LjkgOTIgMTY5LjIgODAuNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDEyMy45IDU4LjEgNDEtMjQuOXpNMTEzLjYgMjMybC0zMy42IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAzMy42IDBjNC4yIDMwLjcgMTYuMyA1OC44IDM0LjEgODIuM2wtMjMuOCAyMy44LTExLjMtMTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1Ni42IDU2LjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMS4zLTExLjMgMjMuOC0yMy44YzIzLjUgMTcuOSA1MS43IDI5LjkgODIuMyAzNC4xbDAgMzMuNi0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDAgMC0zMy42YzEzLjQtMS44IDI2LjQtNS4yIDM4LjctOS45TDEyMy41IDE5My4zYy00LjcgMTIuMy04IDI1LjItOS45IDM4Ljd6Il19LERJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLWRheXMiLGljb246WzQ0OCw1MTIsWyJjYWxlbmRhci1hbHQiXSwiZjA3MyIsIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI0MGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xMjggMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNjQgMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0sTXplPURJLEVJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYW1vbmQtdHVybi1yaWdodCIsaWNvbjpbNTEyLDUxMixbImRpcmVjdGlvbnMiXSwiZjVlYiIsIk0yMTUgMTdMMTcgMjE1QzYuMSAyMjUuOSAwIDI0MC42IDAgMjU2czYuMSAzMC4xIDE3IDQxTDIxNSA0OTVjMTAuOSAxMC45IDI1LjYgMTcgNDEgMTdzMzAuMS02LjEgNDEtMTdMNDk1IDI5N2MxMC45LTEwLjkgMTctMjUuNiAxNy00MXMtNi4xLTMwLjEtMTctNDFMMjk3IDE3QzI4Ni4xIDYuMSAyNzEuNCAwIDI1NiAwcy0zMC4xIDYuMS00MSAxN3pNMzg1IDI1N2wtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDBjMC0zOS44IDMyLjItNzIgNzItNzJsNzguMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il19LHp6ZT1FSSxremU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1wb2ludC11cCIsaWNvbjpbMzg0LDUxMixbOTc1N10sImYwYTYiLCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMybDAgMjA4LTY0IDAgMC0yMDh6TTIyNCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS02NC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUwzNy41IDQ1My41QzEzLjUgNDI5LjUgMCAzOTYuOSAwIDM2M2wwLTI3YzAtMzUuMyAyOC43LTY0IDY0LTY0bDg4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNTYgMGMzOS44IDAgNzItMzIuMiA3Mi03MnoiXX0sU3plPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJlemllci1jdXJ2ZSIsaWNvbjpbNjQwLDUxMixbXSwiZjU1YiIsIk0yOTYgMTM2bDAtNDggNDggMCAwIDQ4LTQ4IDB6TTI4OCAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA0LTExOC40IDBDMTExLjIgNjIuNyA4OS4zIDQ4IDY0IDQ4IDI4LjcgNDggMCA3Ni43IDAgMTEyczI4LjcgNjQgNjQgNjRjMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2bDY2LjkgMGMtNTguOSAzOS42LTk4LjkgMTA1LTEwNCAxODBMODAgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMy4zIDBjNS45LTY3IDQ4LjUtMTIzLjQgMTA3LjUtMTQ5LjEgOC42IDEyLjcgMjMuMiAyMS4xIDM5LjggMjEuMWw2NCAwYzE2LjYgMCAzMS4xLTguNCAzOS44LTIxLjEgNTkgMjUuNyAxMDEuNiA4Mi4xIDEwNy41IDE0OS4xbC0zLjMgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQuNSAwYy01LTc1LTQ1LjEtMTQwLjQtMTA0LTE4MGw2Ni45IDBjMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNiAzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2bC0xMTguNCAwIDAtNGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNODggMzc2bDQ4IDAgMCA0OC00OCAwIDAtNDh6bTQxNiA0OGwwLTQ4IDQ4IDAgMCA0OC00OCAweiJdfSxDemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWhhbGYtZHJlc3MiLGljb246WzM4NCw1MTIsW10sImU1NDgiLCJNMTQzLjQtMy45YzkuNy0xNi44IDI3LjgtMjguMSA0OC42LTI4LjEgMzAuOSAwIDU2IDI1LjEgNTYgNTYgMCAyNS40LTE2LjkgNDYuOC00MCA1My43bDAgMGMtNS4xIDEuNS0xMC40IDIuMy0xNiAyLjMtMzAuOSAwLTU2LTI1LjEtNTYtNTZsMCAwYzAtMTAuMSAyLjctMTkuNyA3LjQtMjcuOXpNMzE4LjMgMjk5LjFMMjcyIDIzNi43IDI3MiA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjAgMC0uNCAwLTIzOC42YzM2LjIgNC40IDY5LjIgMjMuNCA5MS4yIDUzbDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnpNMTc2IDExM2wwIDM5OWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1YzIyLTI5LjYgNTUuMS00OC42IDkxLjItNTN6Il19LFBJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1wb2xsLWhvcml6b250YWwiLGljb246WzQ0OCw1MTIsWyJwb2xsLWgiXSwiZjY4MiIsIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjU2IDE1MmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTEyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6bTcyIDgwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yMDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMDggMHpNMTkyIDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0eiJdfSxfemU9UEksVHplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjaG9vbC1jaXJjbGUteG1hcmsiLGljb246WzY0MCw1MTIsW10sImU1NmQiLCJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0sTHplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtbGl6YXJkIixpY29uOls1MTIsNTEyLFtdLCJmMjU4IiwiTTAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDIzOC41IDBjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44bDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTMuOC03OC4xLTUwLjItMTYxLjkgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw0OCAxNjBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdfSxJST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFsa2JvYXJkIixpY29uOls1NzYsNTEyLFsiYmxhY2tib2FyZCJdLCJmNTFiIiwiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDgwIDM4NGwtNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwIDAtMjU2IDM4NCAwIDAgMjU2eiJdfSwkemU9SUksTkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtcmlnaHQtZnJvbS1zcXVhcmUiLGljb246WzUxMiw1MTIsWyJleHRlcm5hbC1saW5rLWFsdCJdLCJmMzVkIiwiTTI5MC40IDE5LjhDMjk1LjQgNy44IDMwNy4xIDAgMzIwIDBMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlMNDAwIDE1Ny4zIDI0Ni42IDMxMC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzNTQuNyAxMTIgMjk3LjQgNTQuNmMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0Ljl6TTAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDgwYzAgNDQuMi0zNS44IDgwLTgwIDgwTDgwIDUxMmMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCAxNzZ6Il19LEF6ZT1OSSxEemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLWZ1bGwiLGljb246WzUxMiw1MTIsWzEyODk5NywxMjg5OTgsMTI4OTk5LDEyOWUzLDEyOTAwMSwxMjkwMDIsMTI5MDAzLDExMDM1LDExMDM2XSwiZjQ1YyIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6Il19LEV6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG92ZXIiLGljb246WzUxMiw1MTIsW10sImUxMzkiLCJNMzEwLjQgMTZDMzQ2LjYgMTYgMzc2IDQ1LjQgMzc2IDgxLjdsMCA1LjJjMCAxMS4yLTIuNyAyMi4zLTcuOCAzMi4ybC0yLjMgNC4yLTIwLjEgMzMuNWMtMS4xIDEuOS0xLjIgMy40LTEuMSA0LjUgLjIgMS4zIC45IDIuNyAyLjEgMy45czIuNiAxLjkgMy45IDIuMWMxLjEgLjIgMi42IC4xIDQuNS0xLjFsMzMuNS0yMC4xIDQuMi0yLjNjMTAtNS4xIDIxLTcuOCAzMi4yLTcuOGw1LjIgMGMzNi4yIDAgNjUuNiAyOS40IDY1LjYgNjUuNyAwIDE3LjQtNi45IDM0LjEtMTkuMiA0Ni40bC0xLjMgMS4zYy0zLjcgMy43LTMuNyA5LjYgMCAxMy4zbDEuMyAxLjNjMTIuMyAxMi4zIDE5LjIgMjkgMTkuMiA0Ni40IDAgMzYuMi0yOS40IDY1LjYtNjUuNiA2NS42bC01LjIgMGMtMTIuOCAwLTI1LjUtMy41LTM2LjUtMTAuMWwtMzMuNS0yMC4xYy0xLjktMS4xLTMuNC0xLjItNC41LTEuMS0xLjMgLjItMi43IC45LTMuOSAyLjFzLTEuOSAyLjYtMi4xIDMuOWMtLjIgMS4xLS4xIDIuNiAxLjEgNC41bDIwLjEgMzMuNWM2LjYgMTEgMTAuMSAyMy42IDEwLjEgMzYuNWwwIDUuMmMwIDM2LjItMjkuNCA2NS42LTY1LjYgNjUuNi0xNy40IDAtMzQuMS02LjktNDYuNC0xOS4ybC0xLjMtMS4zYy0zLjctMy43LTkuNi0zLjctMTMuMyAwbC0xLjMgMS4zYy0xMi4zIDEyLjMtMjkgMTkuMi00Ni40IDE5LjItMzYuMiAwLTY1LjYtMjkuNC02NS43LTY1LjZsMC01LjJjMC0xMi44IDMuNS0yNS41IDEwLjEtMzYuNWwyMC4xLTMzLjVjMS4xLTEuOSAxLjItMy40IDEuMS00LjUtLjItMS4zLS45LTIuNy0yLjEtMy45cy0yLjYtMS45LTMuOS0yLjFjLS41LS4xLTEuMi0uMS0xLjkgMGwtMi41IDEtMzMuNSAyMC4xYy0xMSA2LjYtMjMuNiAxMC4xLTM2LjUgMTAuMWwtNS4yIDBDNDUuNCAzNzYgMTYgMzQ2LjYgMTYgMzEwLjQgMTYgMjkzIDIyLjkgMjc2LjMgMzUuMiAyNjRsMS4zLTEuMyAxLjItMS41YzIuMS0zLjEgMi4xLTcuMiAwLTEwLjNsLTEuMi0xLjUtMS4zLTEuM0MyMi45IDIzNS44IDE2IDIxOS4xIDE2IDIwMS43IDE2IDE2NS40IDQ1LjQgMTM2IDgxLjcgMTM2bDUuMiAwYzEyLjggMCAyNS41IDMuNSAzNi41IDEwLjFsMzMuNSAyMC4xIDIuNSAxYy43IC4xIDEuNCAuMSAxLjkgLjEgMS4zLS4yIDIuNy0uOSAzLjktMi4xczEuOS0yLjYgMi4xLTMuOWMuMS0uNSAuMS0xLjItLjEtMS45bC0xLTIuNS0yMC4xLTMzLjVjLTYuNi0xMS0xMC4xLTIzLjYtMTAuMS0zNi41bDAtNS4yYzAtMzYuMiAyOS40LTY1LjcgNjUuNy02NS43IDE3LjQgMCAzNC4xIDYuOSA0Ni40IDE5LjJsMS4zIDEuM2MzLjcgMy42IDkuNiAzLjcgMTMuMyAwbDEuMy0xLjMgNC44LTQuNEMyODAuNSAyMS4zIDI5NS4xIDE2IDMxMC40IDE2eiJdfSxQemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVldGgtb3BlbiIsaWNvbjpbNTEyLDUxMixbXSwiZjYyZiIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgODBjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04MGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMCAyNzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMDR6bTgwLTE2MGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjR6bTEyOCAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHpNODAgMTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTMyMCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjR6TTQ4IDM4NGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyem0xNDQgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDh6bTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0xMTItMTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJ6Il19LHNtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhcnMtc3RhZ2dlcmVkIixpY29uOls1MTIsNTEyLFsicmVvcmRlciIsInN0cmVhbSJdLCJmNTUwIiwiTTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMTI4QzE0LjMgMTI4IDAgMTEzLjcgMCA5NnpNNjQgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdfSxJemU9c20sTnplPXNtLEZ6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YXJlaG91c2UiLGljb246WzU3Niw1MTIsW10sImY0OTQiLCJNMCAxNDIuMUwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjQwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMzcuOWMwLTI3LjUtMTcuNi01Mi00My44LTYwLjdMMzAzLjIgNS4xYy05LjktMy4zLTIwLjUtMy4zLTMwLjQgMEw0My44IDgxLjRDMTcuNiA5MC4xIDAgMTE0LjYgMCAxNDIuMXpNNDY0IDI1NmwtMzUyIDAgMCA2NCAzNTIgMCAwLTY0ek0xMTIgNDE2bDM1MiAwIDAtNjQtMzUyIDAgMCA2NHptMzUyIDMybC0zNTIgMCAwIDY0IDM1MiAwIDAtNjR6Il19LE96ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzd2F0Y2hib29rIixpY29uOls1MTIsNTEyLFtdLCJmNWMzIiwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwbDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNjhjMCA1My00MyA5Ni05NiA5NlMwIDQ2OSAwIDQxNkwwIDQ4ek0yNDAgNDA5LjZsMC0yNzEuNSA0OC4xLTQ4LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsNjcuOSA2Ny45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDI0MCA0MDkuNnpNMjA1LjUgNTEybDE5Mi0xOTIgNjYuNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1OC41IDB6TTgwIDY0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZMODAgNjR6TTY0IDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxSemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FtcGdyb3VuZCIsaWNvbjpbNTEyLDUxMixbOTk3OF0sImY2YmIiLCJNMzQ0LjggNTIuM2MxMS4yLTEzLjcgOS4yLTMzLjgtNC41LTQ1cy0zMy44LTkuMi00NSA0LjVsLTM5LjIgNDgtMzkuMi00OEMyMDUuNi0xLjkgMTg1LjQtNCAxNzEuNyA3LjJzLTE1LjcgMzEuNC00LjUgNDVsNDcuNCA1OC0yMDIgMjQ2LjlDNC41IDM2Ny4xIDAgMzc5LjYgMCAzOTIuNkwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM5LjRjMC0xMi45LTQuNS0yNS41LTEyLjctMzUuNWwtMjAyLTI0Ni45IDQ3LjQtNTh6TTI1NiAyODhsMTEyIDEyOC0yMjQgMCAxMTItMTI4eiJdfSxCemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQiLGljb246WzU3Niw1MTIsW10sImU1NTIiLCJNMTA0LjUgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0tOCAxODEuM0w3My45IDIyNy45Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNS4xLTM1LjFjMjIuOC0yMi44IDUzLjYtMzUuNiA4NS44LTM1LjYgMzYuOSAwIDcxLjggMTYuOCA5NC44IDQ1LjZMMjYyLjMgMTgwYzYuMSA3LjYgMTUuMyAxMiAyNSAxMmwzMy4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMzLjIgMGMtMjkuMiAwLTU2LjctMTMuMy03NS0zNmwtMy44LTQuNyAwIDExNS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44TDEzMCAzNDcuNWMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zek05Ni42IDM3MWMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41TDU1LjEgNTM0LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMOTYuNiAzNzF6TTUwNS41IDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJ6Il19LEh6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnbGFzc2VzIixpY29uOls1NzYsNTEyLFtdLCJmNTMwIiwiTTE0My4zIDk2Yy0xNCAwLTI2LjUgOS4yLTMwLjYgMjIuNkw3MC40IDI1NiAyMjQgMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDY0IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTUzLjYgMC00Mi4zLTEzNy40QzQ1OS4yIDEwNS4yIDQ0Ni44IDk2IDQzMi43IDk2TDQwMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMi43IDBjNDIuMSAwIDc5LjQgMjcuNSA5MS44IDY3LjhsNDUuNCAxNDcuNWM0LjEgMTMuMiA2LjEgMjYuOSA2LjEgNDAuN2wwIDk2YzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0zMi02NCAwIDAgMzJjMCA1My00MyA5Ni05NiA5NmwtNjQgMGMtNTMgMC05Ni00My05Ni05NmwwLTk2YzAtMTMuOCAyLjEtMjcuNSA2LjEtNDAuN0w1MS41IDk5LjhDNjMuOSA1OS41IDEwMS4xIDMyIDE0My4zIDMyTDE3NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuNyAwek02NCAzMjBsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjQtMTI4IDB6bTQxNiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMHoiXX0sRkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXBhdXNlIixpY29uOls1MTIsNTEyLFs2MjA5MiwicGF1c2UtY2lyY2xlIl0sImYyOGIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxOTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXX0scXplPUZJLFZ6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtZW1vcnkiLGljb246WzUxMiw1MTIsW10sImY1MzgiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRDMCAxNDIuMiA0LjQgMTQ4IDEwLjEgMTUxLjcgMjMuMyAxNjAuMyAzMiAxNzUuMSAzMiAxOTJzLTguNyAzMS43LTIxLjkgNDAuM0M0LjQgMjM2IDAgMjQxLjggMCAyNDguNmwwIDU1LjQgNTEyIDAgMC01NS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuMy0xMy4yLTguNi0yMS45LTIzLjQtMjEuOS00MC4zczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM2wwLTcuNGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNTEyIDQxNmwwLTY0LTUxMiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA4OCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTYwIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdfSxqemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2lmdCIsaWNvbjpbNTEyLDUxMixbMTI3ODczXSwiZjA2YiIsIk0zMjEuNSA2OC44QzMyOS4xIDU1LjkgMzQyLjkgNDggMzU3LjggNDhsMi4yIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTczLjMgMCAzNC44LTU5LjJ6bS0xMzEgMGwzNC44IDU5LjItNzMuMyAwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwbDIuMiAwYzE0LjkgMCAyOC44IDcuOSAzNi4zIDIwLjh6bTg5LjYtMjQuM2wtMjQuMSA0MS0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwTDE1MiAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjQgMy41IDI4IDkuNiA0MEwzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDEuNiAwYzYuMS0xMiA5LjYtMjUuNiA5LjYtNDAgMC00OC42LTM5LjQtODgtODgtODhsLTIuMiAwYy0zMS45IDAtNjEuNSAxNi45LTc3LjcgNDQuNHpNNDgwIDI3MmwtMjAwIDAgMCAyMDggMTM2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDR6bS0yNDggMGwtMjAwIDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTM2IDAgMC0yMDh6Il19LFV6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsLXdoZWF0IixpY29uOls1MTIsNTEyLFtdLCJlNTJhIiwiTTE3Ni0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2ek01NiAwbDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgNDhDNDIuNyA0OCAzMiAzNy4zIDMyIDI0UzQyLjcgMCA1NiAwek0yNCA3MmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxMjBDMTAuNyAxMjAgMCAxMDkuMyAwIDk2UzEwLjcgNzIgMjQgNzJ6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAwYzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMC0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDExMmM4LjggMCAxNiA3LjIgMTYgMTYgMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il19LFd6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkdW5nZW9uIixpY29uOls1MTIsNTEyLFtdLCJmNmQ5IiwiTTM0Ny41IDE0NC44YzYuNSA1LjQgMTIuNSAxMS4zIDE4IDE3LjcgOC43IDEwLjIgMjMuNyAxNCAzNS4xIDYuOWw1NC4xLTMzLjhjMTEuMi03IDE0LjctMjEuNyA2LjktMzIuMi0xNS4zLTIwLjUtMzMuNS0zOC42LTU0LjEtNTMuOC0xMC40LTcuNi0yNC43LTQuMy0zMS44IDYuNGwtMzUuMSA1Mi42Yy03LjggMTEuNi0zLjggMjcuMyA3IDM2LjJ6TTMyNy44IDQxLjFjOC42LTEyLjkgMi45LTMwLjUtMTIuMi0zNC4xLTE5LjEtNC42LTM5LjEtNy01OS42LTdzLTQwLjQgMi40LTU5LjYgN2MtMTUuMSAzLjYtMjAuOCAyMS4yLTEyLjIgMzQuMWw0MCA2MGM1LjIgNy44IDE0LjUgMTEuNyAyMy45IDExLjIgNS4yLS4zIDEwLjYtLjMgMTUuOCAwIDkuNCAuNSAxOC43LTMuNCAyMy45LTExLjJsNDAtNjB6TTUwLjUgMTAzLjNjLTcuOSAxMC41LTQuMyAyNS4zIDYuOSAzMi4ybDU0LjEgMzMuOGMxMS40IDcuMSAyNi4zIDMuMyAzNS4xLTYuOSA1LjUtNi40IDExLjUtMTIuMyAxOC0xNy43IDEwLjgtOC45IDE0LjgtMjQuNiA3LTM2LjJMMTM2LjQgNTUuOWMtNy4xLTEwLjctMjEuNS0xNC0zMS44LTYuNC0yMC42IDE1LjEtMzguOCAzMy4zLTU0LjEgNTMuOHptNjIgMTQxLjFjLjgtOS45LTMuMy0xOS45LTExLjgtMjUuMUw0MSAxODJjLTEyLjktOC0yOS45LTIuMy0zMy42IDEyLjUtNC45IDE5LjctNy41IDQwLjMtNy41IDYxLjZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0zLjkgLjItNy44IC41LTExLjZ6bTI4Ny4xIDBjLjMgMy44IC41IDcuNyAuNSAxMS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjEuMi0yLjYtNDEuOC03LjUtNjEuNi0zLjYtMTQuNy0yMC43LTIwLjUtMzMuNi0xMi41bC01OS43IDM3LjNjLTguNCA1LjMtMTIuNiAxNS4yLTExLjggMjUuMXpNODggMzUybC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em00MDAgMGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0em0tODAgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnptMTYwIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnoiXX0sT0k9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3VpdGNhc2UtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbIm1lZGtpdCJdLCJmMGZhIiwiTTE5MiA1NmwwIDQwIDEyOCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDIwMCA0OGMtNC40IDAtOCAzLjYtOCA4em0tNDggOGwwLThjMC0zMC45IDI1LjEtNTYgNTYtNTZMMzEyIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCA0MjQtMjI0IDAgMC00MTZ6TTk2IDE3NmwwIDMwNC0zMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwIDAgODB6TTQxNiA0ODBsMC0zODQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIgMHpNMjQ0IDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzYtMzYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDM2IDAgMCAzNmMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zNiAzNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMzYgMCAwLTM2YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHoiXX0sR3plPU9JLFl6ZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tY2FuZSIsaWNvbjpbNDQ4LDUxMixbXSwiZTUzYyIsIk0yMzItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE0NCAyMzYuN0w5Ny43IDI5OS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxNDIgMTMyIDE4MS43IDExMiAyMjQgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDMwNCAyMzYuNyAzMDQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjN6TTM5MiAzODRjLTQuNCAwLTggMy42LTggOCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTI4YzAtNC40LTMuNi04LTgtOHoiXX0sUjU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2F1Z2UiLGljb246WzUxMiw1MTIsWyJkYXNoYm9hcmQiLCJnYXVnZS1tZWQiLCJ0YWNob21ldGVyLWFsdC1hdmVyYWdlIl0sImY2MjQiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzIwIDk2YzAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM0wyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTcyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0ek0xNDQgMTc2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptLTE2IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI4OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQwMCAxNDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0sWnplPVI1LFh6ZT1SNSxLemU9UjUsUXplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVudmVsb3BlLW9wZW4tdGV4dCIsaWNvbjpbNTc2LDUxMixbXSwiZjY1OCIsIk0yODggMzMuOUw5Ni40IDE3NS44IDI1NC41IDI5M2M1LjMgMy45IDExLjIgNi45IDE3LjUgOC43TDI3MiA0NjRjMCA1LjUgLjUgMTAuOCAxLjMgMTZMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIzOS45YzAtMjAuMyA5LjYtMzkuNCAyNS45LTUxLjRMMjU0LjUtMjFjOS43LTcuMiAyMS40LTExIDMzLjUtMTFzMjMuOCAzLjkgMzMuNSAxMUw1MTguMSAxMjQuN2M3LjIgNS4zIDEzLjEgMTIgMTcuNCAxOS42LTIuNS0uMi01LS4zLTcuNS0uM0w0MzYuNiAxNDQgMjg4IDMzLjl6TTMyMCAyNDBjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIyNHptODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAweiJdfSxKemU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9vbGJveCIsaWNvbjpbNTEyLDUxMixbMTI5NTIwXSwiZjU1MiIsIk0xNzYgNTZsMCA0MCAxNjAgMCAwLTQwYzAtNC40LTMuNi04LTgtOEwxODQgNDhjLTQuNCAwLTggMy42LTggOHpNMTI4IDk2bDAtNDBjMC0zMC45IDI1LjEtNTYgNTYtNTZMMzI4IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCA0MCAyOC4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw1MS45IDUxLjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlsMCA3Ni4xLTEzNiAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0xNDQgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMTM2IDAgMC03Ni4xYzAtMTIuNyA1LjEtMjQuOSAxNC4xLTMzLjlsNTEuOS01MS45YzktOSAyMS4yLTE0LjEgMzMuOS0xNC4xTDEyOCA5NnpNMCA0MTZsMC05NiAxMzYgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAxNDQgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAxMzYgMCAwIDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6Il19LGVrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwb3dlci1vZmYiLGljb246WzUxMiw1MTIsWzkyMTFdLCJmMDExIiwiTTI4OCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzIyNC0xNy43IDIyNCAwbDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMMjg4IDB6TTE0Ni4zIDk4LjRjMTQuNS0xMC4xIDE4LTMwLjEgNy45LTQ0LjZzLTMwLjEtMTgtNDQuNi03LjlDNDMuNCA5Mi4xIDAgMTY5IDAgMjU2IDAgMzk3LjQgMTE0LjYgNTEyIDI1NiA1MTJTNTEyIDM5Ny40IDUxMiAyNTZjMC04Ny00My40LTE2My45LTEwOS43LTIxMC4xLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZjNDkuOCAzNC44IDgyLjMgOTIuNCA4Mi4zIDE1Ny42IDAgMTA2LTg2IDE5Mi0xOTIgMTkyUzY0IDM2MiA2NCAyNTZjMC02NS4yIDMyLjUtMTIyLjkgODIuMy0xNTcuNnoiXX0sbm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2lnbmFsIixpY29uOls1MTIsNTEyLFsxMjgyNDYsInNpZ25hbC01Iiwic2lnbmFsLXBlcmZlY3QiXSwiZjAxMiIsIk00ODggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMHpNMzYwIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDI0OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4ek0xNTIgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0ek00OCAzODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdfSx0a2U9bm0sYWtlPW5tLGlrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3Mtc3BpbiIsaWNvbjpbNTEyLDUxMixbXSwiZTRiYiIsIk00ODEuNyAyNDAuMWMtMTcuNi0xLjItMzIuOSAxMi0zNC4yIDI5LjctMy4zIDQ3LTIzLjYgODkuNC01NC44IDEyMUwzNjEgMzU5Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAzNjYuMyAzMjAgMzc2bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtMzUtMzVjNDEuNy00Mi4yIDY4LjktOTguOCA3My40LTE2MS44IDEuMi0xNy42LTEyLTMyLjktMjkuNy0zNC4yek0zOSA0MUw3NCA3NmMtNDEuNyA0Mi4yLTY4LjkgOTguOC03My40IDE2MS44LTEuMiAxNy42IDEyIDMyLjkgMjkuNyAzNC4yczMyLjktMTIgMzQuMi0yOS43YzMuMy00NyAyMy42LTg5LjQgNTQuOC0xMjFMMTUxIDE1M2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzE5MiAxNDUuNyAxOTIgMTM2bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDU2IDBDNDYuMyAwIDM3LjUgNS44IDMzLjggMTQuOFMzMi4yIDM0LjEgMzkgNDF6bTIwMS0xMC43Yy0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMiA0NyAzLjMgODkuNCAyMy42IDEyMSA1NC44TDM1OSAxNTFjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMzY2LjMgMTkyIDM3NiAxOTJsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzQ3Ny45IDMyLjIgNDcxIDM5TDQzNiA3NGMtNDIuMi00MS43LTk4LjgtNjguOS0xNjEuOC03My40LTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43ek00MSA0NzNsMzUtMzVjNDIuMiA0MS43IDk4LjggNjguOSAxNjEuOCA3My40IDE3LjYgMS4yIDMyLjktMTIgMzQuMi0yOS43cy0xMi0zMi45LTI5LjctMzQuMmMtNDctMy4zLTg5LjQtMjMuNi0xMjEtNTQuOEwxNTMgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTQ1LjcgMzIwIDEzNiAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ1NmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA0NzkuOCA0MSA0NzN6Il19LHJrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqb2ludCIsaWNvbjpbNTc2LDUxMixbXSwiZjU5NSIsIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0yOTIuNyAzMjBjNS42IDAgMTAuNyAyLjkgMTMuNiA3LjZMMzk0LjYgNDcxYzEuMyAyLjEgMCA0LjktMi40IDUuMi0xNi4xIDIuNS0zMi40IDMuNy00OC43IDMuN2wtMzguMSAwYy01LjYgMC0xMC43LTIuOS0xMy42LTcuNmwtNzktMTI4LjRjLTYtOS44IDAtMjIuNiAxMS41LTIzLjMgNi43LS40IDEzLjQtLjYgMjAuMi0uNmw0OC4zIDB6TTQ1OS4zIDQ2NS45Yy02LjQgMS0xMi43LTEuOS0xNi4xLTcuNEwzNzQuMSAzNDYuMWMtNi43LTEwLjkgMS41LTI0LjcgMTQuMi0yMi45IDEuMyAuMiAyLjYgLjQgMy44IC42bDEzNi40IDIxYzI3LjMgNC4yIDQ3LjQgMjcuNyA0Ny40IDU1LjNzLTIwLjEgNTEuMS00Ny40IDU1LjNsLTY5LjIgMTAuNnpNMTM4LjcgMzM2YzYuNy0xLjUgMTMuNiAxLjQgMTcuMiA3LjJsNjguOSAxMTJjNi42IDEwLjctMS4yIDI0LjQtMTMuOCAyMy4xLTEzLTEuNC0yNS45LTMuNS0zOC42LTYuNUwzMS4yIDQzOS4yQzEyLjkgNDM1IDAgNDE4LjcgMCA0MDBzMTIuOS0zNSAzMS4yLTM5LjJMMTM4LjcgMzM2eiJdfSxza2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJhaWxsZSIsaWNvbjpbMzg0LDUxMixbXSwiZjJhMSIsIk04MCAxNDRhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAgMTkyYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0LTEwLjcgMjQtMjQgMjR6bTAgNTZjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODAtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwem0yNDgtODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0em01NiAwYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwIDM1LjggODAgODAgODAgODAtMzUuOCA4MC04MHpNMzA0IDIzMmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAgMTA0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wLTE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXX0sUkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFza2V0LXNob3BwaW5nIixpY29uOls1NzYsNTEyLFsic2hvcHBpbmctYmFza2V0Il0sImYyOTEiLCJNMjg4IDBjNi42IDAgMTIuOSAyLjcgMTcuNCA3LjVsMTQ0IDE1MiAuNSAuNSA3OC4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxNC41LTkuNiAyNi43LTIyLjggMzAuN0w0OTEuMSA0MjkuOWMtNi41IDI5LjMtMzIuNSA1MC4xLTYyLjUgNTAuMWwtMjgxLjMgMGMtMzAgMC01Ni0yMC44LTYyLjUtNTAuMWwtNDYtMjA3LjJjLTEzLjItMy45LTIyLjgtMTYuMi0yMi44LTMwLjcgMC0xNy43IDE0LjMtMzIgMzItMzJsNzguMSAwIC41LS41IDE0NC0xNTJDMjc1LjEgMi43IDI4MS40IDAgMjg4IDB6bTAgNTguOUwxOTIuMiAxNjAgMzgzLjggMTYwIDI4OCA1OC45ek0yMDggMjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6bTgwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMjggMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMnoiXX0sbmtlPVJJLG9rZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmlkZ2UiLGljb246WzUxMiw1MTIsW10sImU0YzgiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk0YzAtMzguOCAyNi40LTcyLjYgNjQtODJsMC0xMTItNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0eiJdfSxsa2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxhbmUtYXJyaXZhbCIsaWNvbjpbNTc2LDUxMixbMTI4NzQ4XSwiZjVhZiIsIk0zODYuNiAxOTMuMUwyNjUuOSAzLjdjLTQuOC03LjYtMTIuNi0xMi44LTIxLjQtMTQuM2wtNDMuMS03LjZjLTEwLjgtMS45LTIwLjIgNy4zLTE4LjYgMTguMWwyNCAxNjEuNi0xMDUtMTguNS0zMy44LTYxLjhDNjQuNSA3NC43IDU4LjIgNzAuMiA1MS4xIDY5TDM0IDY2Yy05LjgtMS43LTE4LjggNS45LTE4LjggMTUuOGwuNiAxMDYuM2MuMiAzMC45IDIyLjQgNTcuMyA1Mi45IDYyLjdsMTMuNSAyLjQgMCAwIDQxNy42IDczLjZjMzAuNSA1LjQgNTkuNS0xNSA2NC45LTQ1LjRzLTE1LTU5LjUtNDUuNC02NC45TDM4Ni42IDE5My4xek0yMjQgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTMxLjItMTUuM2EzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4eiJdfSxja2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FzaC1yZWdpc3RlciIsaWNvbjpbNTEyLDUxMixbXSwiZjc4OCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0czI4LjcgNjQgNjQgNjRsNDggMCAwIDMyLTU3IDBjLTMxLjYgMC01OC41IDIzLjEtNjMuMyA1NC40TDEuMSAzNjQuMUMuNCAzNjguOCAwIDM3My42IDAgMzc4LjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02OS42YzAtNC44LS40LTkuNi0xLjEtMTQuNEw0ODguMiAyMTQuNEM0ODMuNSAxODMuMSA0NTYuNiAxNjAgNDI1IDE2MGwtMjE3IDAgMC0zMiA0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0UzI5MS4zIDAgMjU2IDBMOTYgMHptMCA0OGwxNjAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkw5NiA4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNNjQgNDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDQ0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4LTE2MGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyMC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0xNjAgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNMzI4IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0yNTYgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNDI0IDI0MGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwek0zNTIgMzQ0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHoiXX0sZGtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpbmciLGljb246WzUxMiw1MTIsW10sImY3MGIiLCJNNjQgMjA4YzAgNy44IDQuNCAxOC43IDE3LjEgMzAuMyA0NS40LTI0LjIgMTA3LjctMzguMyAxNzQuOS0zOC4zczEyOS41IDE0LjEgMTc0LjkgMzguM2MxMi44LTExLjYgMTcuMS0yMi41IDE3LjEtMzAuMyAwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjYtMzUuMi0xNy42LTg2LjEtMjkuNC0xNDQuMS0yOS40cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuNyAzMy4yIDEyLjQgNzUuNyAyMC4zIDEyMi45IDIwLjNzODkuNy03LjggMTIyLjktMjAuM0MzNDUuMyAyNTUuNiAzMDMgMjQ4IDI1NiAyNDh6TTAgMjA4QzAgMTU4LjQgMzkuNCAxMjIuMiA4My4zIDEwMC4yIDEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44bDAgOTZjMCA0OS42LTM5LjQgODUuOC04My4zIDEwNy44LTQ1LjkgMjIuOS0xMDcgMzYuMi0xNzIuNyAzNi4yUzEyOS4xIDQzNC43IDgzLjMgNDExLjhDMzkuNCAzODkuOCAwIDM1My42IDAgMzA0bDAtOTZ6Il19LHBrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcXVhcml1cyIsaWNvbjpbNTc2LDUxMixbXSwiZTg0NSIsIk00MDEuNyAyOTEuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTI4IDY0YzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNMNDE2IDM1NS44IDMwMi4zIDQxMi42Yy05IDQuNS0xOS42IDQuNS0yOC42IDBMMTYwIDM1NS44IDQ2LjMgNDEyLjZjLTE1LjggNy45LTM1IDEuNS00Mi45LTE0LjNzLTEuNS0zNSAxNC4zLTQyLjlsMTI4LTY0YzktNC41IDE5LjYtNC41IDI4LjYgMEwyODggMzQ4LjIgNDAxLjcgMjkxLjR6bTMuNC0xOTMuNWM4LjItMyAxNy4zLTIuNSAyNS4yIDEuNWwxMjggNjRjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM0w0MTYgMTYzLjggMzAyLjMgMjIwLjZjLTkgNC41LTE5LjYgNC41LTI4LjYgMEwxNjAgMTYzLjggNDYuMyAyMjAuNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOWwxMjgtNjQgMy40LTEuNWM4LjItMyAxNy4zLTIuNSAyNS4yIDEuNWwxMTMuNyA1Ni44IDExMy43LTU2LjggMy40LTEuNXoiXX0sQkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hhcmUtbm9kZXMiLGljb246WzUxMiw1MTIsWyJzaGFyZS1hbHQiXSwiZjFlMCIsIk0zODQgMTkyYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2LTk2IDQzLTk2IDk2YzAgNS40IC41IDEwLjggMS4zIDE2TDE1OS42IDE4NC4xYy0xNi45LTE1LTM5LjItMjQuMS02My42LTI0LjEtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyNC40IDAgNDYuNi05LjEgNjMuNi0yNC4xTDI4OS4zIDQwMGMtLjkgNS4yLTEuMyAxMC41LTEuMyAxNiAwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2LTQzLTk2LTk2LTk2Yy0yNC40IDAtNDYuNiA5LjEtNjMuNiAyNC4xTDE5MC43IDI3MmMuOS01LjIgMS4zLTEwLjUgMS4zLTE2cy0uNS0xMC44LTEuMy0xNmwxMjkuNy03Mi4xYzE2LjkgMTUgMzkuMiAyNC4xIDYzLjYgMjQuMXoiXX0saGtlPUJJLHVrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNTNmIiwiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LGZrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiaW5vY3VsYXJzIixpY29uOls1MTIsNTEyLFtdLCJmMWU1IiwiTTEyOCAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA5NmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuMWMwLTM0LjYgOS40LTY4LjYgMjcuMi05OC4zIDEzLjctMjIuOCAyMi41LTQ4LjIgMjUuOC03NC42TDYwLjUgMTU2YzItMTYgMTUuNi0yOCAzMS44LTI4bDk5LjggMHptMjI3LjggMGMxNi4xIDAgMjkuOCAxMiAzMS44IDI4TDQ1OSAyMTZjMy4zIDI2LjQgMTIuMSA1MS44IDI1LjggNzQuNiAxNy44IDI5LjcgMjcuMiA2My43IDI3LjIgOTguM2wwIDU5LjFjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyMCA5OS44IDB6TTMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyem0tMzIgNjRsMCAxNjAtNjQgMCAwLTE2MCA2NCAweiJdfSxta2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToia2lwLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUxYzQiLCJNMzQwLjggODguM2MxMy40LTExLjUgMTUtMzEuNyAzLjUtNDUuMXMtMzEuNy0xNS00NS4xLTMuNUwxMjggMTg2LjQgMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNjgtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjIuNCAxNzEuMiAxNDYuN2MxMy40IDExLjUgMzMuNiA5LjkgNDUuMS0zLjVzOS45LTMzLjYtMy41LTQ1LjFMMTczLjIgMjgwIDM1MiAyODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTczLjIgMjMyIDM0MC44IDg4LjN6Il19LEhJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhcmQtZHJpdmUiLGljb246WzQ0OCw1MTIsWzEyODQzNiwiaGRkIl0sImYwYTAiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDI2MC4xQzE4LjEgMjQ3LjQgNDAuMiAyNDAgNjQgMjQwbDMyMCAwYzIzLjggMCA0NS45IDcuNCA2NCAyMC4xTDQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNDQ4IDM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NHpNMjI0IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxna2U9SEksYmtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJhbmtpbmctc3RhciIsaWNvbjpbNTc2LDUxMixbXSwiZTU2MSIsIk0zMjEuOCA1NC4xTDI5OC4yIDYuM2MtMy45LTguMy0xNi4xLTguNi0yMC40IDBsLTIzLjYgNDcuOC01Mi4zIDcuNWMtOS4zIDEuNC0xMy4zIDEyLjktNi40IDE5LjhsMzggMzctOSA1Mi4xYy0xLjQgOS4zIDguMiAxNi41IDE2LjggMTIuMmw0Ni45LTI0LjggNDYuNiAyNC40YzguNiA0LjMgMTguMy0yLjkgMTYuOC0xMi4ybC05LTUyLjEgMzgtMzYuNmM2LjgtNi44IDIuOS0xOC4zLTYuNC0xOS44bC01Mi4zLTcuNXpNMjU2IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjBjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2MGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDggMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDE2IDQzMmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh6Il19LHZrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXRpZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjUwOCIsIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptLTMwLjUgNTZsNjEgMGM5LjcgMCAxNy41IDcuOCAxNy41IDE3LjUgMCA0LjItMS41IDguMi00LjIgMTEuNGwtMjcuNCAzMiAzMSAxMTUuMSAuNiAwIDM0LjYtMTM4LjVjMi4yLTguNyAxMS4xLTE0IDE5LjUtMTAuOCA2MS45IDIzLjYgMTA1LjkgODMuNiAxMDUuOSAxNTMuOCAwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEw0My40IDUxMmMtMTUuMSAwLTI3LjQtMTIuMy0yNy40LTI3LjQgMC03MC4yIDQ0LTEzMC4yIDEwNS45LTE1My44IDguNC0zLjIgMTcuMyAyLjEgMTkuNSAxMC44bDM0LjYgMTM4LjUgLjYgMCAzMS0xMTUuMS0yNy40LTMyYy0yLjctMy4yLTQuMi03LjItNC4yLTExLjQgMC05LjcgNy44LTE3LjUgMTcuNS0xNy41eiJdfSxxST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbGxpcHNpcyIsaWNvbjpbNDQ4LDUxMixbImVsbGlwc2lzLWgiXSwiZjE0MSIsIk0wIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTE2OCAwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjI0LTU2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdfSx5a2U9cUkseGtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0b3JlLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJlMDcxIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU4LjYtNTguNmMxLjEtNCAxLjYtOC4yIDEuNi0xMi41bDAtMTUxLjJjLTEyLjUgNC42LTI2LjEgNy4yLTQwLjUgNy4yLTguMSAwLTE1LjktLjgtMjMuNS0yLjRsMCA2Ni40LTMwLjIgMC0xMzcuNS0xMzcuNWMyLjktMy42IDUuNS03LjQgNy42LTExLjUgMTEuNiAyMiAzNC43IDM3IDYxLjMgMzcgMjYuOCAwIDQ5LjgtMTUuMSA2MS40LTM3LjEgMTEuNCAyMi4xIDM0LjUgMzcuMSA2MC44IDM3LjEgNDUuNiAwIDc4LjQtNDMuNyA2NS42LTg3LjVMNTEzLjggNzIuM0M1MDYuOCA0OC40IDQ4NC45IDMyIDQ2MCAzMkwxMTYgMzJjLTUuNSAwLTEwLjggLjgtMTUuOSAyLjNMNDEtMjQuOXpNMTUxLjUgMjIxLjNMNDguNyAxMTguNiAzOC45IDE1Mi41Yy0xMi44IDQzLjcgMjAgODcuNSA2NS42IDg3LjUgMTguMSAwIDM0LjctNy4xIDQ3LTE4Ljd6TTQxMC4yIDQ4MGwtMTI4LTEyOC0xNTQuMiAwIDAtNjYuNGMtNy42IDEuNi0xNS41IDIuNC0yMy41IDIuNC0xNC40IDAtMjgtMi42LTQwLjUtNy4yTDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyOTguMiAweiJdfSxWST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJjZW50IixpY29uOls0NDgsNTEyLFs2MjEwMSw2Mjc4NSwicGVyY2VudGFnZSJdLCIyNSIsIk0xOTIgMTI4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNNDQ4IDM4NGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQzOC42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTM4NCAzODRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMzg0LTM4NHoiXX0sd2tlPVZJLGpJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtemlwcGVyIixpY29uOlszODQsNTEyLFsiZmlsZS1hcmNoaXZlIl0sImYxYzYiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNDhDNzQuNyA0OCA2NCA1OC43IDY0IDcyem0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em02NCA3MmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0xNiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il19LE1rZT1qSSx6a2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlzcGxheSIsaWNvbjpbNTEyLDUxMixbXSwiZTE2MyIsIk00NDggOTZsMCAyNTYtMzg0IDAgMC0yNTYgMzg0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ0IDAtMTYgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMC0xNi00OCAxNDQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXX0sVUk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaWNvbnMiLGljb246WzUxMiw1MTIsWyJoZWFydC1tdXNpYy1jYW1lcmEtYm9sdCJdLCJmODZkIiwiTTE3NC45IDI3MmMxMC43IDAgMjAuNyA1LjMgMjYuNiAxNC4ybDExLjggMTcuOCAyNi43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM1MmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNi43IDAgMTEuOC0xNy44YzUuOS04LjkgMTUuOS0xNC4yIDI2LjYtMTQuMmw2MS43IDB6bTI3OC42LTEyYzUuNi00LjkgMTMuOS01LjMgMTkuOS0uOXM4LjMgMTIuNCA1LjMgMTkuM0w0NDAuMyAzNjggNDk2IDM2OGM2LjcgMCAxMi42IDQuMSAxNSAxMC40cy42IDEzLjMtNC40IDE3LjdsLTEyOCAxMTJjLTUuNiA0LjktMTMuOSA1LjMtMTkuOSAuOXMtOC4zLTEyLjQtNS4zLTE5LjNsMzguNS04OS43LTU1LjggMGMtNi43IDAtMTIuNi00LjEtMTUtMTAuNHMtLjYtMTMuMyA0LjQtMTcuN2wxMjgtMTEyek0xNDQgMzYwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnpNNDgzLjggLjRjNi41LTEuMSAxMy4xIC40IDE4LjUgNC40IDYuMSA0LjUgOS43IDExLjcgOS43IDE5LjJsMCAxNTItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZsMC00OS4zLTExMiAzMy42IDAgMTEwLjItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZMMzA0IDcyYzAtMTAuNiA3LTIwIDE3LjEtMjNsMTYwLTQ4IDIuNy0uNnpNMTg4LjkgMEMyMjYgMCAyNTYgMzAgMjU2IDY3LjFsMCA2LjFjMCA1Ni4xLTc1LjIgMTEyLjEtMTEwLjMgMTM1LjMtMTAuOCA3LjEtMjQuNiA3LjEtMzUuNCAwLTM1LjEtMjMuMS0xMTAuMy03OS4yLTExMC4zLTEzNS4zbDAtNi4xQzAgMzAgMzAgMCA2Ny4xIDAgODguMiAwIDEwOCA5LjkgMTIwLjcgMjYuOGw3LjMgOS44IDcuMy05LjhDMTQ4IDkuOSAxNjcuOCAwIDE4OC45IDB6Il19LGtrZT1VSSxTa2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnVsZXItdmVydGljYWwiLGljb246WzI1Niw1MTIsW10sImY1NDgiLCJNMCAxNkMwLTEwLjUgMjEuNS0zMiA0OC0zMmwxNjAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI0LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDU0NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxNnoiXX0sV0k9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFwLWxvY2F0aW9uLWRvdCIsaWNvbjpbNjQwLDUxMixbIm1hcC1tYXJrZWQtYWx0Il0sImY1YTAiLCJNNTc2IDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDQxMy41IDc3LjUgMjM0LjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzcwLjggODguOCA2NCA5OS45IDY0IDExMmwwIDM1MmMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTczLjMgNTcuOGMtNC4zLTYuNC04LjUtMTMuMS0xMi42LTE5LjktMTEtMTguMy0yMS45LTM5LjMtMzAtNjEuOGwtMTAxLjItMzMuNyAwLTI4NC41IDEyOCA0Mi43IDAgOTkuM2MzMS0zNS44IDc3LTU4LjQgMTI4LTU4LjQgMjIuNiAwIDQ0LjIgNC40IDY0IDEyLjVMNTc2IDQ4ek01MTIgMjI0Yy02Ni4zIDAtMTIwIDUyLjgtMTIwIDExNy45IDAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOXpNNDcyIDM0NGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdfSxDa2U9V0ksR0k9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhcnQtY3JhY2siLGljb246WzUxMiw1MTIsWzEyODE0OCwiaGVhcnQtYnJva2VuIl0sImY3YTkiLCJNMTMzLjEgMzJjMTcuMyAwIDM0LjIgMy40IDQ5LjkgOS43bDU0LjggODUuMi03NS40IDc1LjRjLTEuNSAxLjUtMi40IDMuNi0yLjMgNS44czEgNC4yIDIuNiA1LjdsMTEyIDEwNGMyLjkgMi43IDcuNCAyLjkgMTAuNSAuM3MzLjgtNyAxLjctMTAuNGwtNjAuNC05OC4xIDkwLjctNzUuNmMyLjYtMi4xIDMuNS01LjcgMi40LTguOEwyOTYuNCA2MC42QzMxOS42IDQyLjMgMzQ4LjYgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTEyLjItMTM5LjkgMjQyLjUtMjEyLjkgMjk4LjItMTIuNCA5LjQtMjcuNiAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjYtNDMuMS0xNC4xQzEzOS45IDQxMC4yIDAgMjc5LjkgMCAxNjcuN2wwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMnoiXX0sX2tlPUdJLFRrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3ciLGljb246WzY0MCw1MTIsWzEyODAwNF0sImY2YzgiLCJNOTYgMjI0bDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04OC4yYzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xbDAgMjQuMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTYuOWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45bDAgMTYuOWMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjQuMmMxMS40LTQgMjIuMS05LjQgMzItMTYuMWwwIDg4LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MCAzMiAzMiAwIDQ5LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZMNTMwIDQyN2M4LjggMTMuMSAyMy41IDIxIDM5LjMgMjEgMjIuNSAwIDQxLjktMTUuOSA0Ni4zLTM4bDIwLjMtMTAxLjZjMi42LTEzLS4zLTI2LjUtOC0zNy4zbC0zLjktNS41IDAtODEuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0LjQtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0TDE0NCA2NEM3Ny43IDY0IDI0IDExNy43IDI0IDE4NGwwIDU0QzkuNCAyNDkuOCAwIDI2Ny44IDAgMjg4bDAgMTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40IDMxLjggMCA1Ny42LTI1LjggNTcuNi01Ny42TDcyIDE4NGMwLTI0LjMgMTIuMS00NS44IDMwLjUtNTguOS00LjIgMTAuOC02LjUgMjIuNi02LjUgMzQuOWwwIDY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMTc4LjcgMGMxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNiAwIDYtMi40IDExLjgtNi42IDE2bC0yMy40IDIzLjRDMzMyLjIgMjExLjggMzAyLjcgMjI0IDI3MiAyMjRzLTYwLjItMTIuMi04MS45LTMzLjlsLTIzLjQtMjMuNHoiXX0saTg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnNzIixpY29uOls0NDgsNTEyLFsiZmVlZCJdLCJmMDllIiwiTTAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzIgMjI5LjggMCA0MTYgMTg2LjIgNDE2IDQxNiAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkMzODQgMjUzLjYgMjI2LjQgOTYgMzIgOTYgMTQuMyA5NiAwIDgxLjcgMCA2NHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0zMiAxNjBjMTU5LjEgMCAyODggMTI4LjkgMjg4IDI4OCAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0LTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LExrZT1pOCxyOD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYWduaWZ5aW5nLWdsYXNzIixpY29uOls1MTIsNTEyLFsxMjgyNjksInNlYXJjaCJdLCJmMDAyIiwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6Il19LCRrZT1yOCxBa2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtbW9vbiIsaWNvbjpbNjQwLDUxMixbXSwiZjZjMyIsIk00ODAgMGMxNC42IDAgMjguOCAxLjYgNDIuNSA0LjcgNy40IDEuNyAxMyA3LjggMTMuOSAxNS40cy0zIDE0LjktOS44IDE4LjNjLTQ1LjQgMjIuNi03Ni42IDY5LjUtNzYuNiAxMjMuNiAwIDc2LjIgNjEuOCAxMzggMTM4IDEzOCAzLjcgMCA3LjQtLjEgMTEuMS0uNCA3LjYtLjYgMTQuNyAzLjYgMTcuOCAxMC42czEuNSAxNS4xLTMuOSAyMC40Yy0yNiAyNS01OS4xIDQyLjctOTUuOSA0OS45LTExLjEtMjUuMy0zMC4yLTQ2LjMtNTQuMS01OS44LTcuNi02My40LTYxLjYtMTEyLjYtMTI3LjEtMTEyLjYtMTEuMiAwLTIyLjEgMS41LTMyLjUgNC4yLTQuOC00LjItOS45LTguMi0xNS4yLTExLjgtLjEtMi44LS4yLTUuNi0uMi04LjQgMC0xMDYgODYtMTkyIDE5Mi0xOTJ6bS0uMSA0MzEuOWMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMjcxLjkgMGMtNTMgMC05Ni00My05Ni05NiAwLTQ3LjYgMzQuNi04NyA4MC05NC42LS40LTUyLjggNDIuOS05Ny4zIDk2LTk3LjMgMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjQgMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjQgNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjktLjYgMTEuNy0xLjkgMTcuMiAzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43eiJdfSxvbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3hlcy1zdGFja2VkIixpY29uOls1MTIsNTEyLFs2MjYyNSwiYm94ZXMiLCJib3hlcy1hbHQiXSwiZjQ2OCIsIk0yMjQgMGwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCA1LjUtLjcgMTAuOS0yIDE2bC0yNTIgMGMtMS4zLTUuMS0yLTEwLjUtMi0xNmwwLTEyOGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwem05NiA1MTJjLTExLjIgMC0yMS44LTIuOS0zMS04IDkuNS0xNi41IDE1LTM1LjYgMTUtNTZsMC0xMjhjMC0yMC40LTUuNS0zOS41LTE1LTU2IDkuMi01LjEgMTkuNy04IDMxLThsMzIgMCAwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwek0wIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwIDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzIweiJdfSxEa2U9b20sRWtlPW9tLFBrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlLWJyYW5jaCIsaWNvbjpbNDQ4LDUxMixbXSwiZjEyNiIsIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgNzAuNyAxNzYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTc2IDAgMCA3MC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBTMCA0NzYuMiAwIDQzMmMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtMjA1LjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMzIgMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek04MCA0NTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxZST17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYW4iLGljb246WzUxMiw1MTIsWzEyODY4MywiY2FuY2VsIl0sImYwNWUiLCJNMzY3LjIgNDEyLjVMOTkuNSAxNDQuOGMtMjIuNCAzMS40LTM1LjUgNjkuOC0zNS41IDExMS4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zYzIyLjQtMzEuNCAzNS41LTY5LjggMzUuNS0xMTEuMiAwLTEwNi04Ni0xOTItMTkyLTE5Mi00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LElrZT1ZSSxOa2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToianVnLWRldGVyZ2VudCIsaWNvbjpbMzg0LDUxMixbXSwiZTUxOSIsIk05NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjQgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDk2Qzc0LjcgOTYgNjQgODUuMyA2NCA3MlM3NC43IDQ4IDg4IDQ4bDggMCAwLTI0ek0wIDI1NmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGwxMjggMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjU2em0yNTYgMGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXX0sWkk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVwbHkiLGljb246WzUxMiw1MTIsWzYxNzE0LCJtYWlsLXJlcGx5Il0sImYzZTUiLCJNMjA0LjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCAxMTIgMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtOTYgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45eiJdfSxGa2U9WkksT2tlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN1bi1wbGFudC13aWx0IixpY29uOls2NDAsNTEyLFtdLCJlNTdhIiwiTTE2MCAwYy01LjUgMC0xMC42IDIuOC0xMy41IDcuNGwtMS4xIDIuMS0yNC44IDU1LjQtNTYuNy0yMS43Yy01LjktMi4yLTEyLjUtLjgtMTcgMy43UzQxIDU4IDQzLjIgNjMuOWwyMS43IDU2LjctNTUuNCAyNC44QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44LTIxLjcgNTYuN2MtMi4yIDUuOS0uOCAxMi41IDMuNyAxN3MxMS4xIDUuOSAxNyAzLjdsNTYuNy0yMS43IDI0LjggNTUuNGMyLjYgNS44IDguMyA5LjUgMTQuNiA5LjVzMTItMy43IDE0LjYtOS41bDI0LjgtNTUuNCA1Ni44IDIxLjdjNS45IDIuMiAxMi41IC44IDE3LTMuN3M1LjktMTEuMSAzLjctMTdsLTIxLjctNTYuNyA1NS40LTI0LjhjNS44LTIuNiA5LjUtOC4zIDkuNS0xNC42cy0zLjctMTItOS41LTE0LjZsLTU1LjQtMjQuOCAyMS43LTU2LjcgLjctMi4yYzEuMi01LjMtLjQtMTAuOS00LjMtMTQuOHMtOS41LTUuNS0xNC44LTQuM2wtMi4yIC43LTU2LjggMjEuNy0yNC44LTU1LjRDMTcyIDMuNyAxNjYuMyAwIDE2MCAwem0wIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zNzYgMTZsMCA1My40Yy0xNC44IDcuNy0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC01My40YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgMjIuN2MtOS44LTQuMy0yMC42LTYuNy0zMi02LjctNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMS40Yy0xNC44IDcuNi0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC0yMS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzYtNDI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwNCAwIDAtMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il19LFJrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYWN0ZXJpdW0iLGljb246WzU3Niw1MTIsW10sImUwNWEiLCJNNDA4IDE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzM2MCAyLjcgMzYwIDE2bDAgMjMuNGMtMTMuOSA1LjMtMjYuOSAxMy41LTM4LjIgMjQuNUwzMDUgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44LTMwLjEgMzAuMS0xNi44LTE2LjhjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44Yy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMTc3IDE3NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjgtMzAuMSAzMC4xLTE2LjgtMTYuOGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjhjLTExIDExLjMtMTkuMiAyNC4zLTI0LjUgMzguMkw0OCAzMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYuMyAwYzEuMyAxOC4zIDcuMSAzNi40IDE3LjQgNTIuNEw3MSA0MzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMC42LTEwLjZjMTYgMTAuMyAzNC4xIDE2LjEgNTIuNCAxNy40bDAgMTYuM2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjMuNGMxMy45LTUuMyAyNi45LTEzLjUgMzguMi0yNC41TDI3MSA0NjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjggMzAuMS0zMC4xIDE2LjggMTYuOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOGMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzk5IDMzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOCAzMC4xLTMwLjEgMTYuOCAxNi44YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44YzExLTExLjMgMTkuMi0yNC4zIDI0LjUtMzguMmwyMy40IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2LjMgMGMtMS4zLTE4LjMtNy4xLTM2LjQtMTcuNC01Mi40TDUwNSA3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ2MC40IDQ5LjdjLTE2LTEwLjMtMzQuMS0xNi4xLTUyLjQtMTcuNEw0MDggMTZ6TTE2MCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjcyIDI0MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LEJrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZWNvcmQtdmlueWwiLGljb246WzUxMiw1MTIsW10sImY4ZDkiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2LTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0wIDI0MGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTEyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sWEk9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmxvcHB5LWRpc2siLGljb246WzQ0OCw1MTIsWzEyODE5MCwxMjg0MjYsInNhdmUiXSwiZjBjNyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQyLjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzUyIDUwLjdDMzQwIDM4LjcgMzIzLjcgMzIgMzA2LjcgMzJMNjQgMzJ6bTMyIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yMjQgMjg4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxIa2U9WEkscWtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvaWxldHMtcG9ydGFibGUiLGljb246WzUxMiw1MTIsW10sImU1ODQiLCJNNjQgMGw5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMjI0IDAgMC0xNkMwIDI4LjcgMjguNyAwIDY0IDB6TTAgMTI4bDIyNCAwIDAgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjggMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA1MDEuMyAwIDQ4OEwwIDEyOHpNMTI4IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzUyIDBsOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTIyNCAwIDAtMTZjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTI4OCAxMjhsMjI0IDAgMCAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyOCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTM2MHpNNDE2IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXX0sVmtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im8iLGljb246WzQ0OCw1MTIsWzExMV0sIjRmIiwiTTIyNCA5NmExNjAgMTYwIDAgMSAwIDAgMzIwIDE2MCAxNjAgMCAxIDAgMC0zMjB6TTQ0OCAyNTZhMjI0IDIyNCAwIDEgMSAtNDQ4IDAgMjI0IDIyNCAwIDEgMSA0NDggMHoiXX0samtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhbGV0dGUiLGljb246WzUxMiw1MTIsWzEyNzkxMl0sImY1M2YiLCJNNTEyIDI1NmMwIC45IDAgMS44IDAgMi43LS40IDM2LjUtMzMuNiA2MS4zLTcwLjEgNjEuM0wzNDQgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDMuNCAuNCA2LjcgMSA5LjkgMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOSA2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MiAwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjItMy41IC4xLTcgLjItMTAuNiAuMi0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LFVrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1bmxvY2siLGljb246WzM4NCw1MTIsWzEyODI3NV0sImYwOWMiLCJNMTI4IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0IDMxLjcgMCA1OCAyMyA2My4xIDUzLjMgMi45IDE3LjQgMTkuNCAyOS4yIDM2LjkgMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi45QzMwOC4xIDE0LjEgMjU1LjUtMzIgMTkyLTMyIDEyMS4zLTMyIDY0IDI1LjMgNjQgOTZsMCA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE5MiAwIDAtNjR6Il19LEtJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhci1saXN0ZW4iLGljb246WzUxMiw1MTIsWyJhc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXMiXSwiZjJhMiIsIk0zNzkuNiAuM2MtOC45IDEuMi0xNy4yIDYuMi0yMi40IDE0LjEtNi44IDEwLjQtNyAyNC4xLS40IDM0LjYgNS42IDguOSAxNS41IDEyLjcgMjMuOCAxOC41IDcuNSA1LjIgMTcuNiAxMy4yIDI3LjcgMjQuMiAyMCAyMS43IDM5LjUgNTQuMyAzOS41IDEwMC4zIDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02Ni0yOC41LTExMy40LTU2LjUtMTQzLjctMTMuOS0xNS4xLTI3LjgtMjYuMS0zOC4zLTMzLjMtMTEtNy42LTIzLjUtMTYuNi0zNy42LTE0Ljd6TTI0MCAxMjhjLTU3LjYgMC0xMDUuMSA0My42LTExMS4zIDk5LjUtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM2M5LjctODggODQuMy0xNTYuNSAxNzQuOS0xNTYuNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdsMCA2LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTItMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTYuMWMwLTMyLjkgMTcuNC01OS42IDM0LjQtNzggMTguNC0yMCAyOS42LTQ2LjYgMjkuNi03NS45IDAtNjEuOS01MC4xLTExMi0xMTItMTEyek0wIDQ4MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjAtOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek04Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpNMjQwIDIwOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0sV2tlPUtJLEdrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlLXB1bGwtcmVxdWVzdCIsaWNvbjpbNTEyLDUxMixbXSwiZTEzYyIsIk0zMjggMjRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzI5My45IC4yIDI4NyA3TDIzMSA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTYgNTZjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMzMjggMTQ1LjcgMzI4IDEzNmwwLTI0IDI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNMNDQ4IDE0NGMwLTUzLTQzLTk2LTk2LTk2bC0yNCAwIDAtMjR6TTcyIDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTU2IDczLjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFMxNiAzNS44IDE2IDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC0yMDUuM3pNNzIgNDMyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTM0NC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LFlrZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJrZXkiLGljb246WzUxMiw1MTIsWzEyODI3M10sImYwODQiLCJNMzM2IDM1MmM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlM0MzMuMiAwIDMzNiAwIDE2MCA3OC44IDE2MCAxNzZjMCAxOC43IDIuOSAzNi44IDguMyA1My43TDcgMzkxYy00LjUgNC41LTcgMTAuNi03IDE3bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzYuNCAwIDEyLjUtMi41IDE3LTdsMzMuMy0zMy4zYzE2LjkgNS40IDM1IDguMyA1My43IDguM3pNMzc2IDk2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXX0sWmtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNrdWxsIixpY29uOls1MTIsNTEyLFsxMjgxMjhdLCJmNTRjIiwiTTQxNiA0MjcuNGM1OC41LTQ0IDk2LTExMS42IDk2LTE4Ny40IDAtMTMyLjUtMTE0LjYtMjQwLTI1Ni0yNDBTMCAxMDcuNSAwIDI0MGMwIDc1LjggMzcuNSAxNDMuNCA5NiAxODcuNEw5NiA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA2NCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNi42ek05NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0yNTYtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il19LFFJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMtc3Ryb2tlLXVwIixpY29uOlszODQsNTEyLFs5ODk2LCJtYXJzLXN0cm9rZS12Il0sImYyMmEiLCJNMTkyIDI1NmExMTIgMTEyIDAgMSAwIDAgMjI0IDExMiAxMTIgMCAxIDAgMC0yMjR6TTE2IDM2OGMwLTg2LjMgNjIuMS0xNTguMSAxNDQuMS0xNzMuMS0uMS0uOS0uMS0xLjktLjEtMi45bDAtMTYtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjEuNC0yOCAyMi40Yy0xMy44IDExLTMzLjkgOC44LTQ1LTVzLTguOC0zMy45IDUtNDVsODAtNjRjMTEuNy05LjMgMjguMy05LjMgNDAgMGw4MCA2NGMxMy44IDExIDE2IDMxLjIgNSA0NXMtMzEuMiAxNi00NSA1bC0yOC0yMi40IDAgNjEuNCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxIDAgMS45LS4xIDIuOSA4MiAxNSAxNDQuMSA4Ni44IDE0NC4xIDE3My4xIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzE2IDQ2NS4yIDE2IDM2OHoiXX0sWGtlPVFJLEpJPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpcmUtZmxhbWUtc2ltcGxlIixpY29uOlszODQsNTEyLFsiYnVybiJdLCJmNDZhIiwiTTM3Mi41IDI1Ni41bC0uNy0xLjlDMzM3LjggMTYwLjggMjgyIDc2LjUgMjA5LjEgOC41bC0zLjMtM0MyMDIuMSAyIDE5Ny4xIDAgMTkyIDBzLTEwLjEgMi0xMy44IDUuNWwtMy4zIDNDMTAyIDc2LjUgNDYuMiAxNjAuOCAxMi4yIDI1NC42bC0uNyAxLjlDMy45IDI3Ny4zIDAgMjk5LjQgMCAzMjEuNiAwIDQyNi43IDg2LjggNTEyIDE5MiA1MTJzMTkyLTg1LjMgMTkyLTE5MC40YzAtMjIuMi0zLjktNDQuMi0xMS41LTY1LjF6bS05MC44IDQ5LjVjNC4xIDkuMyA2LjIgMTkuNCA2LjIgMjkuNSAwIDUzLTQzIDk2LjUtOTYgOTYuNXMtOTYtNDMuNS05Ni05Ni41YzAtMTAuMSAyLjEtMjAuMyA2LjItMjkuNWwxLjktNC4zYzE1LjgtMzUuNCAzNy45LTY3LjcgNjUuMy05NS4xbDguOS04LjljMy42LTMuNiA4LjUtNS42IDEzLjYtNS42czEwIDIgMTMuNiA1LjZsOC45IDguOWMyNy40IDI3LjQgNDkuNiA1OS43IDY1LjMgOTUuMWwxLjkgNC4zeiJdfSxLa2U9SkksUWtlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyZWUiLGljb246WzQ0OCw1MTIsWzEyNzc5NF0sImYxYmIiLCJNMjI0LTMyYzcgMCAxMy43IDMuMSAxOC4zIDguNWwxMzYgMTYwYzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTMzY5LjQgMTc2IDM2MCAxNzZsLTI0LjkgMCA3NS4yIDg4LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MDEuNCAzMDQgMzkyIDMwNGwtMzguNSAwIDg4LjggMTA0LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MzMuNCA0NDggNDI0IDQ0OGwtMTY4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTE2OCAwYy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDk0LjUgMzA0IDU2IDMwNGMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNkwxMTIuOSAxNzYgODggMTc2Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42bDEzNi0xNjBDMjEwLjMtMjguOSAyMTctMzIgMjI0LTMyeiJdfSxKa2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic21vZyIsaWNvbjpbNTc2LDUxMixbXSwiZjc1ZiIsIk0xNzYgMjg4Qzk2LjUgMjg4IDMyIDIyMy41IDMyIDE0NFM5Ni41IDAgMTc2IDBjMjcuMiAwIDUyLjYgNy41IDc0LjMgMjAuNiAyMC4xLTEzIDQ0LTIwLjYgNjkuNy0yMC42IDQ3LjQgMCA4OC43IDI1LjcgMTEwLjkgNjRsMS4xIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCA2MC4zLTQ3LjYgMTA5LjQtMTA3LjIgMTExLjktMjIuNiAyMC01Mi4zIDMyLjEtODQuOCAzMi4xLTMyLjUgMC02Mi4xLTEyLjEtODQuNy0zMkwxNzYgMjg4ek01MTIgMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0TDI0IDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHpNODggNDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTE3NiAwbDI4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sZVNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InMiLGljb246WzMyMCw1MTIsWzExNV0sIjUzIiwiTTAgMTU3LjVDMCA4OC4yIDU2LjIgMzIgMTI1LjUgMzJMMjcyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDEyNS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MUwyMTAuMSAyMzBDMjcyLjkgMjM3LjkgMzIwIDI5MS4yIDMyMCAzNTQuNSAzMjAgNDIzLjggMjYzLjggNDgwIDE5NC41IDQ4MEw0OCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ2LjUgMGMzNCAwIDYxLjUtMjcuNSA2MS41LTYxLjUgMC0zMS0yMy4xLTU3LjItNTMuOS02MUwxMDkuOSAyODJDNDcuMSAyNzQuMSAwIDIyMC44IDAgMTU3LjV6Il19LHRTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqZWRpIixpY29uOls1NzYsNTEyLFtdLCJmNjY5IiwiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOS0uMSA1LTIuNkwyNzkuNyA4Yy4xLTQuNSAzLjgtOCA4LjMtOHM4LjEgMy41IDguMyA4bDkuNCAyODEuOWMuMSAyLjUgMi45IDMuOSA1IDIuNmwyOS41LTE5LjdjMy4yLTIuMSA3LjQtMS43IDEwLjEgMXMzLjEgNi45IDEgMTAuMUwzMzAgMzE1LjdjLTEuMyAxLjktLjIgNC41IDIgNC45bDM3LjYgNy41YzMuNyAuNyA2LjQgNCA2LjQgNy44cy0yLjcgNy4xLTYuNCA3LjhMMzMyIDM1MS40Yy0yLjIgLjQtMy4zIDMtMiA0LjlsMjEuMiAzMS45YzIuMSAzLjIgMS43IDcuNC0xIDEwLjFzLTYuOSAzLjEtMTAuMSAxbC0yNi4zLTE3LjZjLTIuMi0xLjQtNS4xIC4yLTUgMi44bDIuMSA2MS41YzU5LjgtMTAuOCAxMDUuMS02My4xIDEwNS4xLTEyNiAwLTM3LTE1LjctNzAuNC00MC44LTkzLjctNy02LjUtNi41LTE4LjYgMS0yNC40IDM0LTI2LjMgNTUuOC02Ny41IDU1LjgtMTEzLjkgMC0xNi44LTIuOS0zMy04LjItNDgtNC42LTEzIDEwLjItMzAgMjEuNC0yMiA1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuNyAuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDI2IDBjMy40IDAgNi4yIDIuNiA2LjMgNiAuMSAzLjMgLjIgNi42IC4yIDEwIDAgMTcuNS0xLjcgMzQuNy00LjggNTEuMy0uMiAxLjItLjkgMi40LTEuNyAzLjNsLTQ2LjUgNDYuNWMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDE0LjYgMGM0LjYgMCA3LjcgNC44IDUuNyA5LTQ0LjUgODkuNS0xMzYuOSAxNTEtMjQzLjcgMTUxUzg4LjggNDUwLjUgNDQuMyAzNjFjLTIuMS00LjIgMS05IDUuNy05bDE0LjYgMGM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjMtMy4yLTE2LjYtNC44LTMzLjgtNC44LTUxLjMgMC0zLjMgLjEtNi43IC4yLTEwIC4xLTMuNCAyLjktNiA2LjMtNmwyNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjQuNiAxODQuNmMtMS41LTEuNS0yLjItMy44LTEuNy01LjkgMTUuMi02NiA1NC4zLTEyMi44IDEwNy44LTE2MC43IDExLjMtOCAyNiA4LjkgMjEuNCAyMi01LjMgMTUtOC4yIDMxLjItOC4yIDQ4IDAgNDYuMyAyMS45IDg3LjUgNTUuOCAxMTMuOSA3LjUgNS44IDggMTcuOSAxIDI0LjQtMjUuMSAyMy40LTQwLjggNTYuNy00MC44IDkzLjcgMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6Il19LGVOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1oaWtpbmciLGljb246WzQ0OCw1MTIsWyJoaWtpbmciXSwiZjZlYyIsIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTEyOCAxNzMuNmMwLTM0IDI3LjYtNjEuNiA2MS42LTYxLjYgMjAuMyAwIDM5LjcgOC4xIDU0IDIyLjRsNDguMiA0OC4yYzYgNiAxNC4xIDkuNCAyMi42IDkuNGwzNy41IDBjNS44IDAgMTEuMyAxLjYgMTYgNC4zbDAtNzYuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjY4LjNjLTQuNyAyLjctMTAuMiA0LjMtMTYgNC4zbC0zNy41IDBjLTI1LjUgMC00OS45LTEwLjEtNjcuOS0yOC4xbC02LjYtNi42IDAgMTA5LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC0xMDF6bS00LjggMjAzLjdjMi4zIDIuMyA0LjcgNC40IDcuMSA2LjVsNDQuOSAzOC41Yy0zLjYgOC40LTguNSAxNi4zLTE0LjQgMjMuNEw4OC42IDUzMi41Yy0xMS4zIDEzLjYtMzEuNSAxNS40LTQ1LjEgNC4xcy0xNS40LTMxLjUtNC4xLTQ1LjFsNzIuMy04Ni43YzIuNi0zLjEgNC41LTYuNiA1LjgtMTAuNGw1LjctMTcuMXpNMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjQgMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6Il19LGFTZT1lTixpU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXVwLXRvLWxpbmUiLGljb246WzQ0OCw1MTIsW10sImU0YzIiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMlM0MzMuNyAwIDQxNiAwTDMyIDB6bTg2LjYgMTM3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw2NCAyMzcuMyA2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6bTI1NiAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDI0Mi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDIuNyA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0eiJdfSxyU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFycy1kb3VibGUiLGljb246WzY0MCw1MTIsWzk4OTFdLCJmMjI3IiwiTTI4OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctOTUgOTVjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMwIDQwMS4yIDAgMzA0IDc4LjggMTI4IDE3NiAxMjhjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw5NS05NS01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNzYgNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHptMTYwIDY0Yy02LjggMC0xMy40LS40LTIwLTEuMSAyMy42LTE4LjkgNDMuMy00Mi41IDU3LjYtNjkuNCA0My4zLTE1LjUgNzQuNC01Ni45IDc0LjQtMTA1LjUgMC0yNS4yLTguMy00OC41LTIyLjQtNjcuMiA3LjEgMi4xIDE0LjYgMy4yIDIyLjQgMy4yIDE3IDAgMzIuNy01LjMgNDUuNy0xNC4zIDExLjcgMjMuNiAxOC4zIDUwLjIgMTguMyA3OC4zIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2ek01MjggMTU3LjNMNTI4IDMyYzAtMTEuNC0yLjQtMjIuMi02LjctMzJMNjA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTQ4IDQ4eiJdfSxzU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGhlcm1vbWV0ZXIiLGljb246WzUxMiw1MTIsW10sImY0OTEiLCJNOTYgMzgyLjFsMC04OC44YzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjEuNy0yMS43IDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNy44LTcuOGMxOS40LTE5LjQgNDUuNi0zMC4yIDczLTMwLjIgNTcgMCAxMDMuMiA0Ni4yIDEwMy4yIDEwMy4yIDAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRsLTg4LjggMC04OSA4OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBTLTIuMyA0ODAuNCA3IDQ3MWw4OS04OXoiXX0sdE49e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFpbnRicnVzaCIsaWNvbjpbNTc2LDUxMixbMTI4Mzk2LCJwYWludC1icnVzaCJdLCJmMWZjIiwiTTQ4MC41IDEwLjNMMjU5LjEgMTU4Yy0yOS4xIDE5LjQtNDcuNiA1MC45LTUwLjYgODUuMyA2Mi4zIDEyLjggMTExLjQgNjEuOSAxMjQuMyAxMjQuMyAzNC41LTMgNjUuOS0yMS41IDg1LjMtNTAuNkw1NjUuNyA5NS41YzYuNy0xMC4xIDEwLjMtMjEuOSAxMC4zLTM0LjEgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjQtMTIuMSAwLTI0IDMuNi0zNC4xIDEwLjN6TTI4OCA0MDBjMC02MS45LTUwLjEtMTEyLTExMi0xMTJTNjQgMzM4LjEgNjQgNDAwYzAgMy45IC4yIDcuOCAuNiAxMS42IDEuOCAxNy41LTEwLjIgMzYuNC0yNy44IDM2LjRMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE0NCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyeiJdfSxuU2U9dE4sb1NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5ldXRlciIsaWNvbjpbMzg0LDUxMixbOTkwNl0sImYyMmMiLCJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTIyMy45IDM0OS4xQzMwNS45IDMzNC4xIDM2OCAyNjIuMyAzNjggMTc2IDM2OCA3OC44IDI4OS4yIDAgMTkyIDBTMTYgNzguOCAxNiAxNzZjMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0LjEgMTczLjEtLjEgMS0uMSAxLjktLjEgMi45bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC0xIDAtMS45LS4xLTIuOXoiXX0sYU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBob25lLWZsaXAiLGljb246WzQ0OCw1MTIsWyJwaG9uZS1zcXVhcmUtYWx0Il0sImY4N2IiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjMyIDk2LjdsMi44IC44YzMyLjMgOC44IDU5LjkgNDAuMSA1MS44IDc4LjItMTguNSA4Ny41LTg3LjQgMTU2LjMtMTc0LjkgMTc0LjktMzguMSA4LjEtNjkuNC0xOS41LTc4LjItNTEuOGwtLjgtMi44Yy0yLjctOS44IDIuNC0yMC4xIDExLjgtMjRsNDguNy0yMC4zYzguMy0zLjQgMTcuOC0xLjEgMjMuNSA1LjlsMTkuMyAyMy42YzM1LjEtMTcuNCA2My40LTQ2LjYgNzkuNi04Mi40bC0yMi4xLTE4Yy02LjktNS43LTkuMy0xNS4yLTUuOS0yMy41bDIwLjMtNDguN2MzLjktOS40IDE0LjItMTQuNCAyNC0xMS44eiJdfSxsU2U9YU4saU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQiLGljb246WzUxMiw1MTIsWzEyODU0MSwiZ3Jpbi10b25ndWUtc3F1aW50Il0sImY1OGEiLCJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTEyNS44LTkxLjdjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjFzMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zem0yNjMuNi0yMS4xYzQuNSA2LjggMy4xIDE1LjktMy4xIDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXpNMzIwIDQ0OGwwLTQ1LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCA0NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il19LGNTZT1pTixkU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudC1kb2xsYXIiLGljb246WzUxMiw1MTIsW10sImY2NTEiLCJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6bTQtMzUyYzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Yy0yNS4zLTQuMi00My45LTI2LjEtNDMuOS01MS44IDAtMjguOCAyMy4yLTUyLjIgNTItNTIuNWwwLTRjMC0xMSA5LTIwIDIwLTIweiJdfSxwU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGlwcG8iLGljb246WzY0MCw1MTIsWzEyOTQzNV0sImY2ZWQiLCJNNDA3IDQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDE3LjIgMTcuMmMxLjktLjEgMy45LS4yIDUuOC0uMmwzMiAwYzExLjIgMCAyMS45IDIuMyAzMS42IDYuNUw1NDMgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDU2NCAxMDEuOWM3LjYgMTIuMiAxMiAyNi43IDEyIDQyLjEgMCAxMC4yIDcuNCAxOC44IDE2LjcgMjMgMjcuOSAxMi41IDQ3LjMgNDAuNSA0Ny4zIDczIDAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2LTY0IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE3LjZjLTExLjgtMi40LTIyLjctNy40LTMyLTE0LjQtMS41LTEuMS0yLjktMi4zLTQuMy0zLjUtMTctMTQuNy0yNy43LTM2LjQtMjcuNy02MC41IDAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2YzAgNDQuNyAyNi4yIDgzLjIgNjQgMTAxLjJsMCAxMC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03NmMtMTkuOCA3LjctNDEuNCAxMi02NCAxMnMtNDQuMi00LjMtNjQtMTJsMCA3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTguOS0xOC4xIDQwLjdjLTUuNCAxMi4xLTE5LjYgMTcuNi0zMS43IDEyLjJTLTMuMyAzNjIuNCAyLjEgMzUwLjNMMjQgMzAwLjljNS4zLTExLjkgOC0yNC43IDgtMzcuNyAwLTEwNy41IDg1LjItMTk1LjIgMTkxLjgtMTk5LjFsLjItLjEgNjQgMGM0MS43IDAgODMuNCAxMi4xIDExNy4yIDI1LjcgMS43LTEuOCAzLjUtMy42IDUuMy01LjJMNDA3IDgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptNzMgMTg1YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTg4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNNDgwIDE0NGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6Il19LGhTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3dsLWZvb2QiLGljb246WzUxMiw1MTIsW10sImU0YzYiLCJNMCAxNzZjMC0zNS4zIDI4LjctNjQgNjQtNjQgLjUgMCAxLjEgMCAxLjYgMCA3LjQtMzYuNSAzOS43LTY0IDc4LjQtNjQgMTUgMCAyOSA0LjEgNDAuOSAxMS4yIDEzLjMtMjUuNyA0MC4xLTQzLjIgNzEuMS00My4yczU3LjggMTcuNiA3MS4xIDQzLjJjMTItNy4xIDI2LTExLjIgNDAuOS0xMS4yIDM4LjcgMCA3MSAyNy41IDc4LjQgNjQgLjUgMCAxLjEgMCAxLjYgMCAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDExLjctMy4xIDIyLjYtOC42IDMyTDguNiAyMDhDMy4xIDE5OC42IDAgMTg3LjcgMCAxNzZ6TTAgMjgzLjRDMCAyNjguMyAxMi4zIDI1NiAyNy40IDI1Nmw0NTcuMSAwYzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40IDAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhsLTIzMS41IDBjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40eiJdfSx1U2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXZpcnVzIixpY29uOls0NDgsNTEyLFtdLCJlNTc4IiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTE2MCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjR6TTE5MiAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSxmU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtc3VuLXJhaW4iLGljb246WzY0MCw1MTIsWzEyNzc4Ml0sImY3NDMiLCJNMjU0LjkgNDQ4LjJjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjMtMTUuMiAxMi42IDQuMiAxOS40IDE3LjggMTUuMiAzMC40bC0yMS40IDY0LjFjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJzLTE5LjQtMTcuOC0xNS4yLTMwLjNsMjEuNC02NC4yem0xMjAgMGM0LjItMTIuNiAxNy44LTE5LjQgMzAuMy0xNS4yIDEyLjYgNC4yIDE5LjQgMTcuOCAxNS4yIDMwLjRsLTIxLjQgNjQuMWMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMnMtMTkuNC0xNy44LTE1LjItMzAuM2wyMS40LTY0LjJ6bTEyMCAwYzQuMi0xMi42IDE3LjgtMTkuNCAzMC4zLTE1LjIgMTIuNiA0LjIgMTkuNCAxNy44IDE1LjIgMzAuNGwtMjEuNCA2NC4xYy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4ycy0xOS40LTE3LjgtMTUuMi0zMC4zbDIxLjQtNjQuMnpNNDQ4LjMgMTI4YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNy41LTEuMSAxNC43LTMgMjEuNSAyOS44IDExLjYgNTEgNDAuNiA1MSA3NC41IDAgNDQuMi0zNS44IDgwLTgwIDgwbC0xOTIgMC04LjItLjRjLTQwLjMtNC4xLTcxLjgtMzguMi03MS44LTc5LjYgMC0zOSAyNy45LTcxLjUgNjQuOS03OC41LS41LTMuMS0uOS02LjItLjktOS41IDAtMzAuOSAyNS4xLTU2IDU2LTU2IDEyLjQgMCAyMy45IDQuMSAzMy4yIDEwLjkgMTMuNC0yNS41IDQwLjEtNDIuOSA3MC44LTQyLjl6TTI0MC4zLTMxLjhjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFsNDcuMyA3MC40IDgzLjMtMTYuM2M1LjItMSAxMC42IC43IDE0LjMgNC40IDMuOCAzLjggNS40IDkuMiA0LjQgMTQuNGwtOC42IDQzLjhjLTExLjkgNS41LTIyLjggMTIuOS0zMi40IDIxLjYtNS43LTEtMTEuNy0xLjUtMTcuNy0xLjUtMTQuMyAwLTI4IDMtNDAuNCA4LjItMTYuOS0xNS0zOS4yLTI0LjItNjMuNi0yNC4yLTUzIDAtOTYgNDMtOTYgOTYgMCAzMC45IDE0LjYgNTguMiAzNy4yIDc1LjgtMy40IDExLjUtNS4yIDIzLjYtNS4yIDM2LjIgMCAxMy4yIDIgMjUuOSA1LjcgMzcuOWwtMi40LTMuNS04My4yIDE2LjNjLTUuMiAxLTEwLjYtLjctMTQuMy00LjQtMy44LTMuOC01LjQtOS4yLTQuNC0xNC40bDE2LjMtODMuMy03MC40LTQ3LjRjLTQuNC0zLTcuMS04LTcuMS0xMy4zIDAtNS4zIDIuNi0xMC4zIDctMTMuMmw3MC40LTQ3LjQtMTYuMy04My4yLS4yLTJjLS4zLTQuNiAxLjMtOS4xIDQuNi0xMi40IDMuOC0zLjggOS4yLTUuNCAxNC40LTQuNGw4My4yIDE2LjMgNDcuMy03MC40IDEuMi0xLjZjMy0zLjUgNy40LTUuNSAxMi4xLTUuNXptMCAxNzUuOGM4LjYgMCAxNi42IDIuMyAyMy42IDYuMi05LjcgMTEuOS0xNi45IDI1LjktMjAuNyA0MS4zLTE1IDguMS0yOC4yIDE5LjItMzguOCAzMi4zLTcuNS04LjUtMTIuMi0xOS42LTEyLjItMzEuOCAwLTI2LjUgMjEuNS00OCA0OC00OHoiXX0sck49e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctcmlnaHQtbG9uZyIsaWNvbjpbNTc2LDUxMixbImxvbmctYXJyb3ctcmlnaHQiXSwiZjE3OCIsIk01NjYuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDY2LjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0MzQuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdfSxtU2U9ck4sZ1NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLXVuIixpY29uOls1MTIsNTEyLFtdLCJlNGQ5IiwiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNzItMTEyIDBjLTIwLjkgMC0zOS41IDEwLjEtNTEuMiAyNS42LTgtNi0xOC05LjYtMjguOC05LjYtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NCA2NCAwIDAgNDgtMTQ0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTQyNy40IDM4MC41YzktMi4xIDE4LjMgMi4yIDIyLjUgMTAuNWwyNi4xIDUyLjIgMC00My4zYzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwbDAgMTI4YzAgOS4zLTYuNCAxNy4zLTE1LjQgMTkuNXMtMTguMy0yLjItMjIuNS0xMC41TDQ1MiA0ODQuNyA0NTIgNTI4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOGMwLTkuMyA2LjQtMTcuMyAxNS40LTE5LjV6TTMyNCA0MDBsMCA5NmMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtOTZjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA5NmMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTk2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIweiJdfSxiU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtbG93IixpY29uOls1MTIsNTEyLFtdLCJmNzZiIiwiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00NjQgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzUyIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHoiXX0sdlNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvb3Itb3BlbiIsaWNvbjpbNDQ4LDUxMixbXSwiZjUyYiIsIk0yODggNjRsNjQgMCAwIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwIDAgMC0xNjAgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQxNnpNMTYwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSx5U2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYWxpZ24tbGVmdCIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzNiIsIk0yODggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdfSxzTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYW1lcmEiLGljb246WzUxMiw1MTIsWzYyMjU4LCJjYW1lcmEtYWx0Il0sImYwMzAiLCJNMTQ5LjEgNjQuOEwxMzguNyA5NiA2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTc0LjcgMC0xMC40LTMxLjJDMzU2LjQgNDUuMiAzMzguMSAzMiAzMTcuNCAzMkwxOTQuNiAzMmMtMjAuNyAwLTM5IDEzLjItNDUuNSAzMi44ek0yNTYgMTkyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdfSx4U2U9c04sd1NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXJzLXJheXMiLGljb246WzY0MCw1MTIsW10sImU1OTMiLCJNMzEtMzNDMjEuNy0yMy42IDIxLjctOC40IDMxIDFMODcgNTdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDY1LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpNNjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw1MTkgMjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEw2MDkgMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXpNNjUgNTQ1bDU2LTU2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzEgNTExYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6bTU0NCAwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC01Ni01NmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1NiA1NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHpNMzIwIDIwOGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptMCAzMmMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTJsMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtOGMwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMjE2LTgwYTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNNDUxLjIgMjYwLjRDNDY5LjQgMjg2LjMgNDgwIDMxNy45IDQ4MCAzNTJsMCA4YzAgOC40LTEuNCAxNi41LTQuMSAyNGw3OC44IDBjMTEuOCAwIDIxLjMtOS42IDIxLjMtMjEuM2wwLTEwLjdjMC01My00My05Ni05Ni05Ni0xMCAwLTE5LjcgMS41LTI4LjggNC40em0tMjYyLjQgMGMtOS4xLTIuOS0xOC44LTQuNC0yOC44LTQuNC01MyAwLTk2IDQzLTk2IDk2bDAgMTAuN2MwIDExLjggOS42IDIxLjMgMjEuMyAyMS4zbDc4LjggMGMtMi43LTcuNS00LjEtMTUuNi00LjEtMjRsMC04YzAtMzQuMSAxMC42LTY1LjcgMjguOC05MS42ek0yMTYgMTYwYTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHoiXX0sTVNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJhaW5ib3ciLGljb246WzY0MCw1MTIsWzEyNzc1Ml0sImY3NWIiLCJNMzIwIDk2QzE3OC42IDk2IDY0IDIxMC42IDY0IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDMzLjcgMCA0MTZsMC02NEMwIDE3NS4zIDE0My4zIDMyIDMyMCAzMlM2NDAgMTc1LjMgNjQwIDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRDNTc2IDIxMC42IDQ2MS40IDk2IDMyMCA5NnptMCAxMTJjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDR6TTI4OCAzNTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdfSx6U2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2l0ZW1hcCIsaWNvbjpbNTEyLDUxMixbXSwiZjBlOCIsIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04IDAgMCA2NCAxMjAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjAgMCAwIDgwIDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTgwLTEyMCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMzkuOCAzMi4yLTcyIDcyLTcybDEyMCAwIDAtNjQtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdfSxuTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tc3RhcnMiLGljb246WzUxMiw1MTIsWzEyOTMyMSwiZ3Jpbi1zdGFycyJdLCJmNTg3IiwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTI0LjQtMy40LTQ4LjEtOS44LTcwLjUgMTguNi0zNi4xLTIuNy04My42LTQ2LjctOTAtNDYuOS01OC4zLTExOC45LTk1LjUtMTk5LjUtOTUuNVMxMDMuNCAzNy4zIDU2LjUgOTUuNWMtNDQgNi40LTY1LjMgNTMuOS00Ni43IDkwLTYuNCAyMi40LTkuOCA0Ni05LjggNzAuNSAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2ek0zODYuNyAzMjQuOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgNDA0LjIgMTA1LjcgMzQyLjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXptLTMxLjYtMjMxYzUuMy0xMC43IDIwLjUtMTAuNyAyNS44IDBsMjAuOSA0Mi40IDQ2LjcgNi44YzExLjggMS43IDE2LjUgMTYuMiA4IDI0LjVsLTMzLjggMzMgOCA0Ni42YzIgMTEuNy0xMC4zIDIwLjctMjAuOSAxNS4ybC00MS44LTIyLTQxLjggMjJjLTEwLjUgNS41LTIyLjktMy40LTIwLjktMTUuMmw4LTQ2LjYtMzMuOC0zM2MtOC41LTguMy0zLjgtMjIuOCA4LTI0LjVsNDYuNy02LjggMjAuOS00Mi40em0tMTk4LjIgMGwyMC45IDQyLjQgNDYuNyA2LjhjMTEuOCAxLjcgMTYuNSAxNi4yIDggMjQuNWwtMzMuOCAzMyA4IDQ2LjZjMiAxMS43LTEwLjMgMjAuNy0yMC45IDE1LjJsLTQxLjgtMjItNDEuOCAyMmMtMTAuNSA1LjUtMjIuOS0zLjQtMjAuOS0xNS4ybDgtNDYuNi0zMy44LTMzYy04LjUtOC4zLTMuOC0yMi44IDgtMjQuNWw0Ni43LTYuOCAyMC45LTQyLjRjNS4zLTEwLjcgMjAuNS0xMC43IDI1LjggMHoiXX0sa1NlPW5OLG9OPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNvcnQtdXAiLGljb246WzM4NCw1MTIsWyJzb3J0LWFzYyJdLCJmMGRlIiwiTTMyIDIyNGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuMiAxNzguNSA5LjQgMTY5LjRsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzM2NC45IDIyNCAzNTIgMjI0TDMyIDIyNHoiXX0sU1NlPW9OLGVnPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImV5ZSIsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSwiZjA2ZSIsIk0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6Il19LHRnPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcmV0LWxlZnQiLGljb246WzI1Niw1MTIsW10sImYwZDkiLCJNNy43IDIzNS44Yy0xMC4zIDEyLjYtOS41IDMxLjEgMi4yIDQyLjhsMTI4IDEyOGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMjU2YzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC0xMjggMTI4LTIuMiAyLjR6Il19LGxOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFwcGxlLXdob2xlIixpY29uOls0NDgsNTEyLFsxMjc4MjIsMTI3ODIzLCJhcHBsZS1hbHQiXSwiZjVkMSIsIk0yMjQgMTEyYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MGwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0xNiAwek0wIDI4OGMwLTc2LjMgMzUuNy0xNjAgMTEyLTE2MCAyNy4zIDAgNTkuNyAxMC4zIDgyLjcgMTkuMyAxOC44IDcuMyAzOS45IDcuMyA1OC43IDAgMjIuOS04LjkgNTUuNC0xOS4zIDgyLjctMTkuMyA3Ni4zIDAgMTEyIDgzLjcgMTEyIDE2MCAwIDEyOC04MCAyMjQtMTYwIDIyNC0xNi41IDAtMzguMS02LjYtNTEuNS0xMS4zLTguMS0yLjgtMTYuOS0yLjgtMjUgMC0xMy40IDQuNy0zNSAxMS4zLTUxLjUgMTEuMy04MCAwLTE2MC05Ni0xNjAtMjI0eiJdfSxDU2U9bE4sY049e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nyb2xsLXRvcmFoIixpY29uOls1NzYsNTEyLFsidG9yYWgiXSwiZjZhMCIsIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMCA2OC45IDAgODYuNyAxMy40IDkzLjMgMzJsMzg5LjUgMGM2LjYtMTguNiAyNC40LTMyIDQ1LjMtMzIgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDgtMjAuOSAwLTM4LjctMTMuNC00NS4zLTMyTDkzLjMgNDgwYy02LjYgMTguNi0yNC40IDMyLTQ1LjMgMzItMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHpNMTc3LjkgMzAxYy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yYy0yLjYtNC4yLTcuMi02LjgtMTIuMi02LjhzLTkuNiAyLjYtMTIuMiA2LjhsLTMwLjUgNDkuMi01Ni45IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDIuMyAuNiA0LjYgMS45IDYuNmwyNy44IDQ1LTI3LjggNDV6Il19LF9TZT1jTixUU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtbG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTUxMCIsIk01MjggMjI0LjFjNDQuMiAwIDgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDE4NSAxNzEuOEM0NDAuMiAxOTUgNDAwIDI0NC44IDQwMCAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTYgMCAwLTg3LjNjMC0xNi41IDctMzEuNSAxOC40LTQyLjEtOC43LTktMjAuOS0xNC42LTM0LjQtMTQuNmwtMzIgMHptMjU2LTQ3LjljLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0sTFNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy1sZWZ0LXJpZ2h0LXRvLWxpbmUiLGljb246WzU3Niw1MTIsW10sImU0YmEiLCJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4TDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTM5MC42IDM0Mi42bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0xMzMuNSAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAxMzMuNSAwLTkuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6TTU3NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NnoiXX0sZzg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhc2giLGljb246WzQ0OCw1MTIsW10sImYxZjgiLCJNMTM2LjcgNS45TDEyOCAzMiAzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAtOC43LTI2LjFDMzA2LjktNy4yIDI5NC43LTE2IDI4MC45LTE2TDE2Ny4xLTE2Yy0xMy44IDAtMjYgOC44LTMwLjQgMjEuOXpNNDE2IDE0NEwzMiAxNDQgNTMuMSA0NjcuMUM1NC43IDQ5Mi40IDc1LjcgNTEyIDEwMSA1MTJMMzQ3IDUxMmMyNS4zIDAgNDYuMy0xOS42IDQ3LjktNDQuOUw0MTYgMTQ0eiJdfSxkTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXNhZC10ZWFyIixpY29uOls1MTIsNTEyLFsxMjg1NDYsInNhZC10ZWFyIl0sImY1YjQiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjcxIDk4YzUuNS0xLjMgMTEuMS0yIDE3LTIgMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTAtMTIuNSAwLTI0LjYgMS45LTM1LjkgNS41IDkuOCAxMi43IDE2LjUgMjcuOSAxOC45IDQ0LjZ6TTE3NiAyNDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTg1LjQgMjkyLjhjLTIuNC0yLjktNS43LTQuOC05LjQtNC44cy03IDEuOS05LjQgNC44Yy02LjUgNy44LTEyLjYgMTYuMS0xOC4zIDI0LjYtOSAxMy40LTIwLjMgMzAuMi0yMC4zIDQ3LjQgMCAyOC4zIDIxLjUgNTEuMiA0OCA1MS4yczQ4LTIyLjkgNDgtNTEuMmMwLTE3LjItMTEuMi0zNC0yMC4zLTQ3LjQtNS43LTguNS0xMS45LTE2LjctMTguMy0yNC42eiJdfSwkU2U9ZE4sQVNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZheCIsaWNvbjpbNTEyLDUxMixbMTI4MjI0LDEyODQzOV0sImYxYWMiLCJNMTYwIDY0bDAgODAgNjQgMCAwLTgwIDE0Ni43IDAgNDUuMyA0NS4zIDAgMzQuNyA2NCAwIDAtMzQuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w0MTYgMTguN0M0MDQgNi43IDM4Ny43IDAgMzcwLjcgMEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTMyIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDggMHptNDQ4IDY0bC0zMjAgMCAwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjI0IDI4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0wIDk2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTMzNiAyNjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zMTIgMzg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTQyNCAyNjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek00MDAgMzg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LERTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tY2lyY2xlLXBsdXMiLGljb246WzY0MCw1MTIsW10sImU1NDEiLCJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXX0sRVNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbXNhIixpY29uOls1MTIsNTEyLFtdLCJmNjY1IiwiTTM0LjYgMjg4TDgwIDI4OGM4LjggMCAxNi03LjIgMTYtMTZMOTYgNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDEzMmMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTE2NGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTY0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTMyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMDBjMCA4LjggNy4yIDE2IDE2IDE2bDQ1LjQgMGMxOS4xIDAgMzQuNiAxNS41IDM0LjYgMzQuNiAwIDguNi0zLjIgMTYuOS05IDIzLjNMNDE2LjYgNDQxYy00MS4xIDQ1LjItOTkuNCA3MS0xNjAuNiA3MVMxMzYuNiA0ODYuMiA5NS40IDQ0MUw5IDM0NS45Yy01LjgtNi40LTktMTQuNy05LTIzLjMgMC0xOS4xIDE1LjUtMzQuNiAzNC42LTM0LjZ6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yLTMuNiAzLjctNS40IDguNy01LjQgMTMuOHMxLjggMTAuMSA1LjQgMTMuOEMxNzkuMiAzODAuMiAyMTcuNiA0MTYgMjU2IDQxNnM3Ni44LTM1LjggOTAuNi01MC4yYzMuNi0zLjcgNS40LTguNyA1LjQtMTMuOHMtMS44LTEwLjEtNS40LTEzLjhDMzMyLjggMzIzLjggMjk0LjQgMjg4IDI1NiAyODh6bTAgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxQU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1xdWVzdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU0MiIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LElTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtY2hlY2siLGljb246WzM4NCw1MTIsW10sImY0NmMiLCJNMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMHptMjYuOSAyMTIuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNsLTg1LjYgMTE3LjctMjYuNS0yNy40Yy05LjItOS41LTI0LjQtOS44LTMzLjktLjZzLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDI4OC4yIDI0Ni4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41ek0xMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0eiJdfSxwTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGFyZS1mcm9tLXNxdWFyZSIsaWNvbjpbNTc2LDUxMixbNjE1MDksInNoYXJlLXNxdWFyZSJdLCJmMTRkIiwiTTM4NC41IDI0bDAgNzItNjQgMGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCA5My40IDgyLjggMTM0LjggMTAwLjYgMTQyLjYgMi4yIDEgNC42IDEuNCA3LjEgMS40bDIuNSAwYzkuOCAwIDE3LjgtOCAxNy44LTE3LjggMC04LjMtNS45LTE1LjUtMTIuOC0yMC4zLTguOS02LjItMTkuMi0xOC4yLTE5LjItNDAuNSAwLTQ1IDM2LjUtODEuNSA4MS41LTgxLjVsMzAuNSAwIDAgNzJjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDEzNi0xMzZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDI1LjUgN2MtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzODQuNSAxNC4zIDM4NC41IDI0em0tMjcyIDcyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAweiJdfSxOU2U9cE4sYWc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVjZWlwdCIsaWNvbjpbMzg0LDUxMixbMTI5NTM0XSwiZjU0MyIsIk0xNCAyLjJDMjIuNS0xLjcgMzIuNS0uMyAzOS42IDUuOEw4MCA0MC40IDEyMC40IDUuOGM5LTcuNyAyMi4zLTcuNyAzMS4yIDBMMTkyIDQwLjQgMjMyLjQgNS44YzktNy43IDIyLjItNy43IDMxLjIgMEwzMDQgNDAuNCAzNDQuNCA1LjhjNy4xLTYuMSAxNy4xLTcuNSAyNS42LTMuNlMzODQgMTQuNiAzODQgMjRsMCA0NjRjMCA5LjQtNS41IDE3LjktMTQgMjEuOHMtMTguNSAyLjUtMjUuNi0zLjZsLTQwLjQtMzQuNi00MC40IDM0LjZjLTkgNy43LTIyLjIgNy43LTMxLjIgMGwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDgwIDQ3MS42IDM5LjYgNTA2LjJjLTcuMSA2LjEtMTcuMSA3LjUtMjUuNiAzLjZTMCA0OTcuNCAwIDQ4OEwwIDI0QzAgMTQuNiA1LjUgNi4xIDE0IDIuMnpNMTA0IDEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6TTgwIDM1MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNC0xMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdfSxGU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXF1YWxzIixpY29uOls0NDgsNTEyLFs2Mjc2NF0sIjNkIiwiTTMyIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxMjh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHoiXX0sT1NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXZyb24tdXAiLGljb246WzQ0OCw1MTIsW10sImYwNzciLCJNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnoiXX0sUlNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpcnVzLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJlMDc1IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg4LjYtODguNmMxLjctMTIuMS0yLTI0LjgtMTEuMy0zNC0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwYy0zMS4yIDMxLjItODQuNSA5LjEtODQuNS0zNSAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtOS4zLTkuMy0yMi0xMy0zNC0xMS4zTDQxLTI0Ljl6TTcyIDIxNmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtMjEuNCAxMi42LTM3LjYgMjkuMS00NS4xbC0yNDAtMjQwQzEwOS42IDIwMy40IDkzLjQgMjE2IDcyIDIxNnoiXX0sQlNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJmNzE1IiwiTTctMjVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMNTY5IDUwM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOUMtMi4zLS40LTIuMy0xNS42IDctMjV6Il19LEhTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJleHBhbmQiLGljb246WzQ0OCw1MTIsW10sImYwNjUiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTQ0OCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnoiXX0saE49e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90ZS1zdGlja3kiLGljb246WzQ0OCw1MTIsWzYyMDI2LCJzdGlja3ktbm90ZSJdLCJmMjQ5IiwiTTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIxMy41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDMyMi43IDQ2MS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ4MHpNMzg5LjUgMzA0TDI5NiAzMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTMuNSAxMTcuNS0xMTcuNXoiXX0scVNlPWhOLHVOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLWNvbHVtbnMiLGljb246WzQ0OCw1MTIsWyJjb2x1bW5zIl0sImYwZGIiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTY0IDY0bDAgMjU2IDEyOCAwIDAtMjU2LTEyOCAwem0zMjAgMGwtMTI4IDAgMCAyNTYgMTI4IDAgMC0yNTZ6Il19LFZTZT11TixqU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXNoZWx0ZXIiLGljb246WzUxMiw1MTIsW10sImU1NGYiLCJNMjcxLjkgNC4yYy05LjgtNS42LTIxLjktNS42LTMxLjggMGwtMjI0IDEyOEM2LjIgMTM3LjkgMCAxNDguNSAwIDE2MEwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDE3OC42IDI1NiA2OC45IDQ0OCAxNzguNiA0NDggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMjBjMC0xMS41LTYuMi0yMi4xLTE2LjEtMjcuOGwtMjI0LTEyOHpNMjU2IDIwOGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bS04IDE5MmwxNiAwIDAgODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NC41IDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTMzLjItNjEuN0MzMjkuNyAyNDUuMSAyOTQuNCAyMjQgMjU2IDIyNHMtNzMuNyAyMS4xLTkxLjkgNTQuOWwtMzMuMiA2MS43Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjUgMjAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODh6Il19LFVTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtbm90Y2giLGljb246WzUxMiw1MTIsW10sImYxY2UiLCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44LTc5LjMgMjMuNi0xMzcuMSA5Ny4xLTEzNy4xIDE4NC4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xLTE2LjktNS0yNi42LTIyLjktMjEuNS0zOS44czIyLjktMjYuNiAzOS44LTIxLjVDNDM0LjkgNDIuMSA1MTIgMTQwIDUxMiAyNTYgNTEyIDM5Ny40IDM5Ny40IDUxMiAyNTYgNTEyUzAgMzk3LjQgMCAyNTZjMC0xMTYgNzcuMS0yMTMuOSAxODIuOS0yNDUuNCAxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41eiJdfSxXU2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2F0ZXIiLGljb246WzUxMiw1MTIsW10sImY3NzMiLCJNNDEwLjYgMTI0LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwem0wIDE0NGMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuNy0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDE0NGMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il19LGZOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRlbGV0ZS1sZWZ0IixpY29uOls2NDAsNTEyLFs5MDAzLCJiYWNrc3BhY2UiXSwiZjU1YSIsIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIwNS4zIDY0Yy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0w5LjQgMjMzLjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNkwxNjAgNDI5LjNjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2ek0yODQuMSAxODguMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdfSxHU2U9Zk4sbG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJvb20tYmFsbCIsaWNvbjpbNTc2LDUxMixbInF1aWRkaXRjaCIsInF1aWRkaXRjaC1icm9vbS1iYWxsIl0sImY0NTgiLCJNNDk2IDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHpNMTA2LjggMjc3LjJjMzAuNi0zMC42IDczLjEtNDUuOSAxMTUuOC00Mi4yTDM0MSAzNTMuM2MzLjcgNDIuOC0xMS42IDg1LjItNDIuMiAxMTUuOS0yNy40IDI3LjQtNjQuNiA0Mi44LTEwMy4zIDQyLjhMMjIuMSA1MTJjLTEyLjIgMC0yMi4xLTkuOS0yMi4xLTIyLjEgMC02LjMgMi43LTEyLjMgNy4zLTE2LjVMMTMzLjcgMzU5LjdjNC4yLTMuNy0uNC0xMC40LTUuNC03LjlMNzcuMiAzNzcuNGMtNi4xIDMtMTMuMi0xLjQtMTMuMi04LjIgMC0zMS41IDEyLjUtNjEuOCAzNC44LTg0bDgtOHptNDE3LTI3MGMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJzMTIuNCAzMC4yIDIuMiA0Mi44bC0yLjIgMi40LTE5MiAxOTIgMzQuOCAzNC43YzQuMiA0LjIgNi42IDEwIDYuNiAxNiAwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNmwtMjkuMSAwLTEwOC4zLTEwOC4zIDAtMjkuMWMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNiA2IDAgMTEuOCAyLjQgMTYgNi42bDM0LjggMzQuNyAxOTItMTkyIDIuNC0yLjJ6Il19LFlTZT1sbSxaU2U9bG0sWFNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImoiLGljb246WzMyMCw1MTIsWzEwNl0sIjRhIiwiTTI4OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwbDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LG1OPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNodXR0bGUtc3BhY2UiLGljb246WzU3Niw1MTIsWyJzcGFjZS1zaHV0dGxlIl0sImYxOTciLCJNMCAzNjhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw1MCAwYzQwLjYgMCA4MC40LTExIDExNS4yLTMxLjlsMTMzLjUtODAuMS05My4zIDAtNjQuOSAzOC45Yy0xNCA4LjQtMjguOSAxNC43LTQ0LjUgMTlsMC02Ni40YzkuNy01LjYgMTcuOC0xMy43IDIzLjQtMjMuNGwxOTguOCAwYzY3LjEgMCAxMjcuOC0yMC42IDE3MC4zLTcwLjYgNC42LTUuNCA0LjYtMTMuMyAwLTE4LjgtNDIuNS01MC4xLTEwMy4yLTcwLjYtMTcwLjMtNzAuNmwtMTk4LjggMGMtNS42LTkuNy0xMy43LTE3LjgtMjMuNC0yMy40bDAtNjYuNGMxNS42IDQuMiAzMC42IDEwLjYgNDQuNSAxOWw2NC45IDM4LjkgOTMuMyAwLTEzMy41LTgwLjFDMTc4LjQgNDMgMTM4LjYgMzIgOTggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDM2OHptOTYgMGwwIDY0LTQ4IDAgMC02NCA0OCAwek05NiA4MGwwIDY0LTQ4IDAgMC02NCA0OCAwek00MTYgMjI0YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxLU2U9bU4sUVNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Inlpbi15YW5nIixpY29uOls1MTIsNTEyLFs5Nzc1XSwiZjZhZCIsIk0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDM1MmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtNDQ4YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2LTk2IDQzLTk2IDk2IDQzIDk2IDk2IDk2QzE1MCA0NDggNjQgMzYyIDY0IDI1NlMxNTAgNjQgMjU2IDY0ek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LEpTZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdG9wIixpY29uOls0NDgsNTEyLFs5MjA5XSwiZjA0ZCIsIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il19LGVDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cm93ZWwiLGljb246WzU3Niw1MTIsW10sImU1ODkiLCJNNDA3LjkgMTgxLjRMMjc3LjMgMzEyIDM0Mi42IDM3Ny40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlzLTExLjUtMjAuOC03LjktMzIuMmw4MC0yNTZjMy4zLTEwLjcgMTItMTguOSAyMi45LTIxLjVzMjIuNCAuNSAzMC4zIDguNEwyMzIgMjY2LjcgMzYyLjYgMTM2LjFjLTE0LjMtMTQuNi0xNC4yLTM4IC4zLTUyLjVsOTUuNC05NS40YzI2LjktMjYuOSA3MC41LTI2LjkgOTcuNSAwczI2LjkgNzAuNSAwIDk3LjVsLTk1LjQgOTUuNGMtMTQuNSAxNC41LTM3LjkgMTQuNi01Mi41IC4zeiJdfSxnTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWJhY2stZmlzdCIsaWNvbjpbMzg0LDUxMixbImhhbmQtcm9jayJdLCJmMjU1IiwiTTcuNCAyNTMuNkMyLjYgMjQ1LjkgMCAyMzcuMSAwIDIyOGwwLTM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OCAxNy4zIDAgMzIuNCA5LjEgNDAuOSAyMi44IDQuMy0yMi4xIDIzLjgtMzguOCA0Ny4xLTM4LjggMjMuNCAwIDQyLjkgMTYuOCA0Ny4xIDM4LjkgNy4zLTQuNCAxNS44LTYuOSAyNC45LTYuOSAyMi4xIDAgNDAuOCAxNSA0Ni4zIDM1LjQgNS41LTIuMiAxMS40LTMuNCAxNy43LTMuNCAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTM5LjYgNzkuMWMtMTAuOCAyMS43LTMzIDM1LjQtNTcuMiAzNS40TDk2IDM1MmMtMTYuNSAwLTMxLjgtOC40LTQwLjYtMjIuNGwtNDgtNzZ6TTMyIDQ4MGwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sdENlPWdOLGFDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1oaWdoIixpY29uOls1MTIsNTEyLFtdLCJmNzY5IiwiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjE2IDk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjEyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il19LGlDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmVhdGVyLXRoYW4iLGljb246WzUxMiw1MTIsWzYyNzY5XSwiM2UiLCJNMzQuOSA1MC42Yy03LjQgMTYtLjQgMzUuMSAxNS42IDQyLjVMNDAzLjYgMjU2IDUwLjYgNDE5Yy0xNiA3LjQtMjMuMSAyNi40LTE1LjYgNDIuNXMyNi40IDIzIDQyLjUgMTUuNmw0MTYtMTkyYzExLjMtNS4yIDE4LjYtMTYuNiAxOC42LTI5LjFzLTcuMy0yMy44LTE4LjYtMjkuMUw3Ny40IDM1Yy0xNi03LjQtMzUuMS0uNC00Mi41IDE1LjZ6Il19LHJDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcnV0Y2giLGljb246WzUxMiw1MTIsW10sImY3ZjciLCJNMjk3LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTEuNC0xLjQtMTU4LjYgMTU4LjZjLTE4IDE4LTQyLjQgMjguMS02Ny45IDI4LjFsLTU5IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40LTYxLjcgNjEuNy05Mi44IDkyLjgtOTMuMyA5My4zLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2LTE2IDAgMCA3Ny4zLTc3LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtNTljMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMjk4LjcgNTYgMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6TTM0NCAxMDEuM0wyNjEuMyAxODQgMzI4IDI1MC43IDQxMC43IDE2OCAzNDQgMTAxLjN6bS0xMjggMTI4bC0zMC42IDMwLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDUzLjUgNTMuNSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDI4Mi43IDI5NiAyMTYgMjI5LjN6Il19LGJOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNlcHRhZ29uIixpY29uOls1NzYsNTEyLFsiaGVwdGFnb24iXSwiZTgyMCIsIk0yNjcuNC0zMS41YzE1LjktNS41IDMzLjUtNC42IDQ4LjggMi43bDE3Mi40IDgzIDYuMyAzLjVjMTQuMiA5IDI0LjUgMjMuMyAyOC4zIDM5LjlsNDIuNiAxODYuNSAxLjIgNy4yYzEuNiAxNC4zLTEuNyAyOC44LTkuNCA0MS4xbC00LjIgNS45LTExOS4zIDE0OS42Yy0xMi4xIDE1LjItMzAuNiAyNC4xLTUwIDI0LjFsLTE5MS4zIDBjLTE5LjUgMC0zNy45LTguOS01MC0yNC4xTDIzLjUgMzM4LjRjLTEyLjEtMTUuMi0xNi43LTM1LjItMTIuMy01NC4ybDQyLjYtMTg2LjUgMi03YzUuNi0xNS45IDE3LjItMjkgMzIuNi0zNi40bDE3Mi40LTgzIDYuNy0yLjd6Il19LHNDZT1iTixuQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RyZWV0LXZpZXciLGljb246WzUxMiw1MTIsW10sImYyMWQiLCJNMjU2IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTIyNCAxNjBsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xLjggMC0xMS4xIDk5LjVjLTEuOCAxNi4yLTE1LjUgMjguNS0zMS44IDI4LjVsLTM4LjcgMGMtMTYuMyAwLTMwLTEyLjMtMzEuOC0yOC41bC0xMS4xLTk5LjUtMS44IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDhjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTQxMi40IDQwMC4yYy0xNi4xLTQuMi0zNC44LTcuNi01NS40LTEwLjJsNS4zLTQ3LjdjMjIuNyAyLjkgNDMuNyA2LjcgNjIuMSAxMS41IDIyLjQgNS44IDQyLjYgMTMuMyA1Ny44IDIzLjMgMTQuNyA5LjYgMjkuOCAyNC45IDI5LjggNDdzLTE1LjEgMzcuNC0yOS44IDQ3Yy0xNS4yIDkuOS0zNS41IDE3LjUtNTcuOCAyMy4zLTQ1LjEgMTEuNy0xMDUuMyAxNy44LTE2OC40IDE3LjhzLTEyMy4zLTYuMS0xNjguNC0xNy44QzY1LjIgNDg4LjQgNDUgNDgwLjkgMjkuOCA0NzEgMTUuMSA0NjEuNCAwIDQ0Ni4xIDAgNDI0czE1LjEtMzcuNCAyOS44LTQ3YzE1LjItOS45IDM1LjUtMTcuNSA1Ny44LTIzLjMgMTguNS00LjggMzkuNS04LjYgNjIuMS0xMS41TDE1NSAzOTBjLTIwLjYgMi42LTM5LjMgNi4xLTU1LjQgMTAuMi01Ni42IDE0LjYtNTYuNiAzMi45IDAgNDcuNSAzOS45IDEwLjMgOTUuOCAxNi4yIDE1Ni40IDE2LjJzMTE2LjUtNS45IDE1Ni40LTE2LjJjNTYuNi0xNC42IDU2LjYtMzIuOSAwLTQ3LjV6Il19LG9DZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YXZlLXNxdWFyZSIsaWNvbjpbNTEyLDUxMixbXSwiZjgzZSIsIk02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI4OCA5NiAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI4OC05NiAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0xMjh6Il19LGxDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmdsZS1sZWZ0IixpY29uOlsyNTYsNTEyLFs4MjQ5XSwiZjEwNCIsIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHoiXX0sY0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjcmV3ZHJpdmVyIixpY29uOls1NzYsNTEyLFsxMjk2OTFdLCJmNTRhIiwiTTM1Mi4xIDE0Ni43bDAtNDkuNmMwLTEwLjcgNS4zLTIwLjcgMTQuMi0yNi42TDQ4NS4yLTguN2M2LjMtNC4yIDE0LjgtMy40IDIwLjIgMmw0NS40IDQ1LjVjNS40IDUuNCA2LjIgMTMuOCAyIDIwLjJMNDczLjYgMTc3LjhjLTUuOSA4LjktMTUuOSAxNC4yLTI2LjYgMTQuMmwtNDkuNiAwLTkwLjcgOTAuN2MxNSAzMy4zIDguOSA3My45LTE4LjUgMTAxLjNMMTYyLjEgNTEwLjFjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwTDM0LjEgNDQ5LjljLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45TDE2MC4xIDI1NmMyNy40LTI3LjQgNjcuOS0zMy42IDEwMS4zLTE4LjVsOTAuNy05MC43eiJdfSxkQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhY3RvciIsaWNvbjpbNTc2LDUxMixbMTI4NjY4XSwiZjcyMiIsIk0xNjAgOTZsMCA5NiAxMzMuNCAwLTU3LjYtOTYtNzUuOCAwek05NiAyMjNMOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA3LjggMGMyMi41IDAgNDMuMyAxMS44IDU0LjkgMzEuMWw3Ny40IDEyOC45IDY0IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxLjVjMCAxNC4yLTYuMyAyNy44LTE3LjMgMzYuOWwtMzUgMjkuMmMyNi41IDE1LjIgNDQuMyA0My43IDQ0LjMgNzYuNCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTE0LjQgMy41LTI4IDkuNi00MGwtMTAxLjIgMGMtMyAxMy40LTcuOSAyNi0xNC40IDM3LjcgNy43IDkuNCA3LjIgMjMuNC0xLjYgMzIuMmwtMjIuNiAyMi42Yy04LjggOC44LTIyLjcgOS4zLTMyLjIgMS42LTkuMyA1LjItMTkuMyA5LjMtMjkuOCAxMi4zLTEuMiAxMi4xLTExLjQgMjEuNi0yMy45IDIxLjZsLTMyIDBjLTEyLjQgMC0yMi43LTkuNS0yMy45LTIxLjYtMTAuNS0zLTIwLjQtNy4yLTI5LjgtMTIuMy05LjQgNy43LTIzLjQgNy4yLTMyLjItMS42TDM1LjUgNDUzLjhjLTguOC04LjgtOS4zLTIyLjctMS42LTMyLjItNS4yLTkuMy05LjMtMTkuMy0xMi4zLTI5LjgtMTIuMS0xLjItMjEuNi0xMS40LTIxLjYtMjMuOWwwLTMyYzAtMTIuNCA5LjUtMjIuNyAyMS42LTIzLjkgMy0xMC41IDcuMi0yMC40IDEyLjMtMjkuOC03LjctOS40LTcuMi0yMy40IDEuNi0zMi4ybDIyLjYtMjIuNmM4LjgtOC44IDIyLjctOS4zIDMyLjItMS42IDEuOS0xIDMuNy0yIDUuNy0zem02NCA2NWE2NCA2NCAwIDEgMCAwIDEyOCA2NCA2NCAwIDEgMCAwLTEyOHpNNDQwIDQyNGE0MCA0MCAwIDEgMCA4MCAwIDQwIDQwIDAgMSAwIC04MCAweiJdfSxwQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJpZGdlLWNpcmNsZS14bWFyayIsaWNvbjpbNTc2LDUxMixbXSwiZTRjYiIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il19LGhDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWFscyIsaWNvbjpbNTEyLDUxMixbXSwiZjQ5MyIsIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMzUyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0zNTIgNjQgMCAwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQ5Ny43IDAgNDgwIDBMMzIgMHpNMTYwIDY0bDAgMTI4LTY0IDAgMC0xMjggNjQgMHptMjU2IDBsMCAxMjgtNjQgMCAwLTEyOCA2NCAweiJdfSx1Q2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RldGhvc2NvcGUiLGljb246WzU3Niw1MTIsWzEyOTY1OF0sImYwZjEiLCJNMzIgNDhDMzIgMjEuNSA1My41IDAgODAgMGw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjgtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMjM4LjMgMCAyNTYgMGw0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTkuMmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEybDAtODUuNWMtMzcuMy0xMy4yLTY0LTQ4LjctNjQtOTAuNSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDg1LjVjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMTYwIDQ2NS4yIDE2MCAzNjhsMC0xOS4yQzg3IDMzNCAzMiAyNjkuNCAzMiAxOTJMMzIgNDh6TTQ4MCAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxmQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicG9kY2FzdCIsaWNvbjpbNDQ4LDUxMixbXSwiZjJjZSIsIk0zMzYgMzU5LjhjMzkuMS0zMi4zIDY0LTgxLjEgNjQtMTM1LjggMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0QzQ4IDI3OC43IDcyLjkgMzI3LjUgMTEyIDM1OS44IDExMi40IDM3Ny40IDExNS4yIDQwMC4yIDExOC40IDQyMS42IDQ4IDM4My45IDAgMzA5LjUgMCAyMjQgMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgODUuNi00OCAxNTkuOS0xMTguNSAxOTcuNiAzLjMtMjEuNCA2LTQ0LjIgNi40LTYxLjh6bS0xNC01My40Yy04LjMtMTIuNi0xOS4yLTIxLjYtMzAuNC0yNy44LTIuMS0xLjEtNC4yLTIuMi02LjMtMy4yIDExLjctMTMuOSAxOC44LTMxLjkgMTguOC01MS41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMTkuNiA3LjEgMzcuNiAxOC44IDUxLjUtMi4xIDEtNC4yIDItNi4zIDMuMi0xMS4yIDYuMi0yMi4xIDE1LjItMzAuNCAyNy44LTE4LjgtMjIuMy0zMC4xLTUxLTMwLjEtODIuNCAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4YzAgMzEuNC0xMS4zIDYwLjItMzAuMSA4Mi40ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOCAwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOS01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOCAwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMTI4YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXX0sbUNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLXJpZ2h0LWRvdHMiLGljb246WzUxMiw1MTIsW10sImU0YjciLCJNOTYgMzJDNzguMyAzMiA2NCA0Ni4zIDY0IDY0Uzc4LjMgOTYgOTYgOTZMMTE0LjcgOTYgOS40IDIwMS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxNDEuMyAxNjAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAzMnpNNDAzLjggNzAuMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwek0yNzkuNyAxOTQuMmEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjIuMi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnpNMTU2LjIgMzE3LjhhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYxLjYtMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwek03MC4xIDQwMy44YTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2MS42LTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHoiXX0sZ0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXNzLXF1ZWVuIixpY29uOls1MTIsNTEyLFs5ODE5XSwiZjQ0NSIsIk0yNTYgODBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01LjUgMTg1TDEyOCAzODQgNzEuOCA0NTQuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwzODQgMzg0IDUwNi41IDE4NWMzLjYtNS45IDUuNS0xMi43IDUuNS0xOS42bDAtLjZjMC0yMC4zLTE2LjUtMzYuOC0zNi44LTM2LjgtNy4zIDAtMTQuNCAyLjItMjAuNCA2LjJsLTE2LjkgMTEuM2MtMTIuNyA4LjUtMjkuNiA2LjgtNDAuNC00bC0zNC4xLTM0LjFDMzU2LjEgMTAwLjEgMzQ2LjIgOTYgMzM2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTMwLjEgMzAuMWMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTMwLjEtMzAuMUMxOTYuMSAxMDAuMSAxODYuMiA5NiAxNzYgOTZzLTIwLjEgNC4xLTI3LjMgMTEuM2wtMzQuMSAzNC4xYy0xMC44IDEwLjgtMjcuNyAxMi41LTQwLjQgNEw1Ny4zIDEzNC4yYy02LjEtNC0xMy4yLTYuMi0yMC40LTYuMi0yMC4zIDAtMzYuOCAxNi41LTM2LjggMzYuOGwwIC42YzAgNi45IDEuOSAxMy43IDUuNSAxOS42eiJdfSxiQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5jaG9yLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTRhYiIsIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSx2Tj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbGxpcHNpcy12ZXJ0aWNhbCIsaWNvbjpbMTI4LDUxMixbImVsbGlwc2lzLXYiXSwiZjE0MiIsIk02NCAxNDRhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAxIDEgMCAxMTJ6bTAgMjI0YzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2LTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NnptNTYtMTEyYzAgMzAuOS0yNS4xIDU2LTU2IDU2cy01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTYgNTYgMjUuMSA1NiA1NnoiXX0sdkNlPXZOLHlDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFydC1jaXJjbGUtZXhjbGFtYXRpb24iLGljb246WzU3Niw1MTIsW10sImU0ZmUiLCJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il19LHhDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy1jaXJjbGUtZXhjbGFtYXRpb24iLGljb246WzU3Niw1MTIsW10sImU0ZDMiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sd0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1hcnJvdy11cC1mcm9tLWxpbmUiLGljb246WzU3Niw1MTIsW10sImU1MzkiLCJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0zMTguMyAyOTkuMWwtNDYuMy02Mi40IDAgMjQzLjMgMjcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgwIDAgMC0yNDMuMy00Ni4zIDYyLjRjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTIwOCA0ODBsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMjggMzIgMHpNNTY2LjYgMTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDQ5NiA3Ny4zIDQ5NiAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDYuNy0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDgwLTgwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zeiJdfSxNQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90LWVxdWFsIixpY29uOls0NDgsNTEyLFtdLCJmNTNlIiwiTTM3OC42IDgxLjhjOS44LTE0LjcgNS44LTM0LjYtOC45LTQ0LjRzLTM0LjYtNS44LTQ0LjQgOC45TDI3MC45IDEyOCAzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTk2LjIgMC04NS4zIDEyOC0xMTAuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY4LjIgMC0zMC44IDQ2LjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45TDE3Ny4xIDM4NCA0MTYgMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTYuMiAwIDg1LjMtMTI4IDExMC45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY4LjIgMCAzMC44LTQ2LjJ6Il19LHpDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFpbi10cmFtIixpY29uOlszODQsNTEyLFsxMjg2NTBdLCJlNWI0IiwiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyMCAwIDAgNjQgNDAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTYwYzAgMzEuMi0xNC45IDU5LTM4IDc2LjVsNjQuMyA3NmM4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LjYtODguMWMtMy42IC40LTcuMyAuNi0xMS4xIC42bC0xMjggMGMtMy44IDAtNy41LS4yLTExLjEtLjZMNDIuMyA1MzUuNWMtOC42IDEwLjEtMjMuNyAxMS40LTMzLjggMi44cy0xMS40LTIzLjctMi44LTMzLjhsNjQuMy03NkM0Ni45IDQxMSAzMiAzODMuMiAzMiAzNTJsMC0xNjBjMC01MyA0My05NiA5Ni05Nmw0MCAwIDAtNjQtMTIwIDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTMuMyAwIDQwTDAgOHpNMTI4IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMHptMzIgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sa0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lLWRlcGFydHVyZSIsaWNvbjpbNTc2LDUxMixbMTI4NzQ3XSwiZjViMCIsIk0zNzIgMTQzLjlMMTcyLjcgNDAuMmMtOC00LjEtMTcuMy00LjgtMjUuNy0xLjdsLTQxLjEgMTVjLTEwLjMgMy43LTEzLjggMTYuNC03LjEgMjVMMjAwLjMgMjA2LjQgMTAwLjEgMjQyLjggNDAgMjA2LjJjLTYuMi0zLjgtMTMuOC00LjUtMjAuNy0yLjFMMyAyMTAuMWMtOS40IDMuNC0xMy40IDE0LjUtOC4zIDIzLjFsNTMuNiA5MS44YzE1LjYgMjYuNyA0OC4xIDM4LjQgNzcuMSAyNy44bDEyLjktNC43IDAgMCAzOTguNC0xNDVjMjkuMS0xMC42IDQ0LTQyLjcgMzMuNS03MS44cy00Mi43LTQ0LTcxLjgtMzMuNUwzNzIgMTQzLjl6TTMyLjIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MTIgMHoiXX0seU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmlnaHQtdG8tYnJhY2tldCIsaWNvbjpbNTEyLDUxMixbInNpZ24taW4tYWx0Il0sImYyZjYiLCJNMzQ1IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwyMDEgOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMTYwIDEwMi4zIDE2MCAxMTJsMCA4MC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMTIgMCAwIDgwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMkwzNDUgMjczem03IDE0M2MtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAweiJdfSxTQ2U9eU4sQ0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNkLWNhcmQiLGljb246WzM4NCw1MTIsW10sImY3YzIiLCJNMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyNS4zIDBDMTA4LjMgMCA5MiA2LjcgODAgMTguN0wxOC43IDgwQzYuNyA5MiAwIDEwOC4zIDAgMTI1LjNMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODR6TTE2MCA4OGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptODggMGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptODggMGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sX0NlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTUwYSIsIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMSA0Ny4yLTE3NS44IDExNC44LTUuMS0xLjgtMTAuNS0yLjgtMTYuMi0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTEgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ5NiA0NDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQwem0wLTE0MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2IDguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXX0sdWw9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hla2VsLXNpZ24iLGljb246WzQ0OCw1MTIsWzgzNjIsImlscyIsInNoZWtlbCIsInNoZXFlbCIsInNoZXFlbC1zaWduIl0sImYyMGIiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTMyMCA0ODBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAweiJdfSxUQ2U9dWwsTENlPXVsLCRDZT11bCxBQ2U9dWwsRENlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJhZGlvIixpY29uOls1MTIsNTEyLFsxMjgyNTFdLCJmOGQ3IiwiTTQ5NC44IDE1YzEyLjctMy43IDIwLTE3LjEgMTYuMy0yOS44UzQ5NC0zNC44IDQ4MS4zLTMxTDUxLjggOTQuOUM0Mi40IDk3LjYgMzMuOSAxMDIuMSAyNi42IDEwOCAxMC41IDExOS43IDAgMTM4LjYgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjE4LjUgOTYgNDk0LjggMTV6TTM2OCAyMDhhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTY0IDI0OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAyNzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il19LHhOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtZG90cyIsaWNvbjpbNTEyLDUxMixbImFsbGVyZ2llcyJdLCJmNDYxIiwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4ek0yMDAgMzUyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC01NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS04OCAyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LEVDZT14Tix3Tj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLXNrdWxsIixpY29uOls0NDgsNTEyLFsiYm9vay1kZWFkIl0sImY2YjciLCJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTI3MiAxNjMuMmwwIDEyLjhjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMi44Yy0xOS40LTExLjctMzItMzAuMy0zMi01MS4yIDAtMzUuMyAzNS44LTY0IDgwLTY0czgwIDI4LjcgODAgNjRjMCAyMC45LTEyLjYgMzkuNS0zMiA1MS4yek0yMDggMTEyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptNzQuMiA5NS43YzQuNiAxMC4xIC4xIDIxLjktOS45IDI2LjVsLTQ3LjkgMjEuOCA0Ny45IDIxLjhjMTAuMSA0LjYgMTQuNSAxNi40IDkuOSAyNi41cy0xNi40IDE0LjUtMjYuNSA5LjlMMjI0IDI5NCAxNDQuMyAzMzAuMmMtMTAuMSA0LjYtMjEuOSAuMS0yNi41LTkuOXMtLjEtMjEuOSA5LjktMjYuNWw0Ny45LTIxLjgtNDcuOS0yMS44Yy0xMC4xLTQuNi0xNC41LTE2LjQtOS45LTI2LjVzMTYuNC0xNC41IDI2LjUtOS45TDIyNCAyNTAgMzAzLjcgMjEzLjhjMTAuMS00LjYgMjEuOS0uMSAyNi41IDkuOXoiXX0sUENlPXdOLE1OPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVubG9jay1rZXlob2xlIixpY29uOlszODQsNTEyLFsidW5sb2NrLWFsdCJdLCJmMTNlIiwiTTE5MiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA2NCAxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDAtNjRjMC03MC43IDU3LjMtMTI4IDEyOC0xMjggNjMuNSAwIDExNi4xIDQ2LjEgMTI2LjIgMTA2LjcgMi45IDE3LjQtOC44IDMzLjktMjYuMyAzNi45cy0zMy45LTguOC0zNi45LTI2LjNDMjUwIDU1LjEgMjIzLjcgMzIgMTkyIDMyem00MCAzMjhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMHoiXX0sSUNlPU1OLHpOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtYXJyb3ctdXAiLGljb246WzM4NCw1MTIsWyJmaWxlLXVwbG9hZCJdLCJmNTc0IiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0yMDkgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNjQgNjRjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwyMy0yMyAwIDg2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg2LjEgMjMgMjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXX0sTkNlPXpOLGtOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi10ZWFycyIsaWNvbjpbNjQwLDUxMixbMTI4NTE0LCJncmluLXRlYXJzIl0sImY1ODgiLCJNNTU0LjggMjAzLjRsMTYuMyAyLjNDNTQ3LjcgODguNCA0NDQuMiAwIDMyMCAwUzkyLjMgODguNCA2OC45IDIwNS43bDE2LjMtMi4zYzM3LTUuMyA2OC42IDI2LjQgNjMuNCA2My40bC02LjcgNDYuN2MtNC4xIDI5LTIxLjYgNTMuMi00NS44IDY2LjggNDMuNyA3OC41IDEyNy42IDEzMS43IDIyMy44IDEzMS43czE4MC4xLTUzLjEgMjIzLjgtMTMxLjdjLTI0LjEtMTMuNS00MS42LTM3LjgtNDUuOC02Ni44bC02LjctNDYuN2MtNS4zLTM3IDI2LjQtNjguNiA2My40LTYzLjR6TTQ3MC4zIDMyNi45QzQ0Ny45IDM4OC4yIDM4OS4xIDQzMiAzMjAgNDMyUzE5Mi4xIDM4OC4yIDE2OS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAtMjUuNi0xOC44LTQ3LjMtNDQuMS01MC45TDU0OS4xIDI0M2MtMTAuNi0xLjUtMTkuNiA3LjUtMTguMSAxOC4xbDYuNyA0Ni43YzMuNiAyNS4zIDI1LjMgNDQuMSA1MC45IDQ0LjEgMjguNCAwIDUxLjQtMjMgNTEuNC01MS40em0tNjQwIDBDMCAzMjkgMjMgMzUyIDUxLjQgMzUyIDc3IDM1MiA5OC43IDMzMy4yIDEwMi4zIDMwNy45bDYuNy00Ni43YzEuNS0xMC42LTcuNS0xOS42LTE4LjEtMTguMWwtNDYuNyA2LjdDMTguOCAyNTMuMyAwIDI3NSAwIDMwMC42eiJdfSxGQ2U9a04sczg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuLXRvLXNxdWFyZSIsaWNvbjpbNTEyLDUxMixbImVkaXQiXSwiZjA0NCIsIk00NzEuNiAyMS43Yy0yMS45LTIxLjktNTcuMy0yMS45LTc5LjIgMEwzNjggNDYuMSA0NjUuOSAxNDQgNDkwLjMgMTE5LjZjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNDcxLjYgMjEuN3ptLTI5OS4yIDIyMGMtNi4xIDYuMS0xMC44IDEzLjYtMTMuNSAyMS45bC0yOS42IDg4LjhjLTIuOSA4LjYtLjYgMTguMSA1LjggMjQuNnMxNS45IDguNyAyNC42IDUuOGw4OC44LTI5LjZjOC4yLTIuNyAxNS43LTcuNCAyMS45LTEzLjVMNDMyIDE3Ny45IDMzNC4xIDgwIDE3Mi40IDI0MS43ek05NiA2NEM0MyA2NCAwIDEwNyAwIDE2MEwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiA2NHoiXX0sT0NlPXM4LFNOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVhcnRoLWV1cm9wZSIsaWNvbjpbNTEyLDUxMixbImdsb2JlLWV1cm9wZSJdLCJmN2EyIiwiTTI1Ni4yIDQ4YzExNC44IC4xIDIwNy44IDkzLjIgMjA3LjggMjA4IDAgMjIuMS0zLjQgNDMuNC05LjggNjMuNC0yIC40LTQuMSAuNi02LjIgLjZsLTIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC01MC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2bC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2cy03LjIgMTYtMTYgMTZsLTI1LjQgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmw3MC4xLTcwLjFjMi4xLTIuMSAzLjMtNSAzLjMtOCAwLTYuMi01LjEtMTEuMy0xMS4zLTExLjNsLTE0LjEgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmwyMy4xLTIzLjFjLjgtLjggMS42LTEuNSAyLjUtMi4yek00MzguNCAzNTYuMWMtMzIuOCA1OS42LTkzLjkgMTAxLjQtMTY1LjIgMTA3LjItLjctMi4zLTEuMS00LjgtMS4xLTcuMyAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjYuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC02Ni43YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyOS4zIDI5LjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDUuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDE2IDE2YzQuMiA0LjIgMTAgNi42IDE2IDYuNiA0LjggMCA5LjMgMS41IDEzIDQuMXpNMjU2IDUxMmwyNi4yLTEuM2MtOC42IC45LTE3LjMgMS4zLTI2LjIgMS4zem0yNi4yLTEuM0M0MTEuMyA0OTcuNiA1MTIgMzg4LjYgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMGwwIDBDMTE0LjYgMCAwIDExNC42IDAgMjU2IDAgMzgzLjUgOTMuMiA0ODkuMyAyMTUuMyA1MDguOCAyMjguNSA1MTAuOSAyNDIuMSA1MTIgMjU2IDUxMnpNMTg3LjMgMTIzLjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0sUkNlPVNOLENOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1iZWFtLXN3ZWF0IixpY29uOls1NzYsNTEyLFsxMjg1MTcsImdyaW4tYmVhbS1zd2VhdCJdLCJmNTgzIiwiTTU0Ni4yLS4xYzE0LjcgMTcuOCAyOS44IDQwLjEgMjkuOCA2NC4xIDAgMzYuNC0yNy42IDY0LTY0IDY0cy02NC0yNy42LTY0LTY0YzAtMjQgMTUuMi00Ni4zIDI5LjgtNjQuMSA4LjgtMTAuNyAxOC41LTIwLjggMjktMzAgMy0yLjYgNy40LTIuNiAxMC40IDAgMTAuNSA5LjEgMjAuMSAxOS4zIDI5IDMwek0yODggMGM0Mi41IDAgODIuNiAxMC40IDExNy44IDI4LjctMy42IDEwLjktNS44IDIyLjctNS44IDM1LjMgMCA2Mi45IDQ5LjEgMTEyIDExMiAxMTIgNi40IDAgMTIuNy0uNSAxOC44LTEuNSA4LjYgMjUuNiAxMy4yIDUzIDEzLjIgODEuNSAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzMyIDM5Ny40IDMyIDI1NiAxNDYuNiAwIDI4OCAwek00MTguNyAzMDguOUMzNzkuNSAzMjEuMSAzMzUuMSAzMjggMjg4IDMyOHMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDIyLjQgNjEuMyA4MS4zIDEwNS4xIDE1MC4zIDEwNS4xczEyNy45LTQzLjggMTUwLjMtMTA1LjFjNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xek0yMDggMTgwYzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHptMTMyIDI4YzAtMTUuNSAxMi41LTI4IDI4LTI4czI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04eiJdfSxCQ2U9Q04sX049e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWhhbGYtc3Ryb2tlIixpY29uOls1MTIsNTEyLFs5NjgwLCJhZGp1c3QiXSwiZjA0MiIsIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkybDAgMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkyek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxIQ2U9X04scUNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1taWxpdGFyeS10by1wZXJzb24iLGljb246WzUxMiw1MTIsW10sImU1NGMiLCJNNzEgMTIuNWMtOC42IDEtMTUgOC4yLTE1IDE2LjggMCA5LjMgNy41IDE2LjggMTYuNyAxNi45bDExMS40IDBjOC44LS4xIDE1LjktNy4yIDE1LjktMTZMMjAwIDE2YzAtOS41LTguMy0xNy0xNy44LTE1LjlMNzEgMTIuNXpNMTg5LjUgNzguMWwtMTIyLjkgMGMtMS42IDUuNy0yLjUgMTEuNy0yLjUgMTcuOSAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtNi4yLS45LTEyLjItMi41LTE3Ljl6TTMyIDI1NmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzEuOCAwIDMuNS0uMSA1LjItLjRMNTMgMjA4LjZDNDAuMSAyMjAuMyAzMiAyMzcuMiAzMiAyNTZ6bTE5MC4yIDQyLjVjMS4xLTMuMyAxLjgtNi44IDEuOC0xMC41bDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBjLTMuNyAwLTcuNCAuMy0xMC45IC45TDIyMi4yIDI5OC41ek0zODQgMTYwYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0tMzIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMHpNMjE1LjggNDUwLjFjNS4yLTQuNiA4LjItMTEuMSA4LjItMTguMXMtMy0xMy41LTguMi0xOC4xbC02NC01NmMtNy4xLTYuMi0xNy4xLTcuNy0yNS43LTMuOFMxMTIgMzY2LjYgMTEyIDM3NmwwIDMyLTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODggMCAwIDMyYzAgOS40IDUuNSAxOCAxNC4xIDIxLjlzMTguNiAyLjQgMjUuNy0zLjhsNjQtNTZ6TTI4OCA0MzEuOWMwIDYuOSAzIDEzLjUgOC4xIDE4LjFsNjQgNTYuNGM3LjEgNi4yIDE3LjEgNy44IDI1LjcgMy45UzQwMCA0OTcuOCA0MDAgNDg4LjRsMC0zMi40IDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC0zMmMwLTkuNC01LjUtMTgtMTQuMS0yMS45cy0xOC42LTIuNC0yNS43IDMuOGwtNjQgNTZjLTUuMiA0LjUtOC4yIDExLjEtOC4yIDE4eiJdfSxWQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUtY2VsbHMtY29sdW1uLWxvY2siLGljb246WzY0MCw1MTIsW10sImU2NzgiLCJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgMzY4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdfSxqQ2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stZmllbGQtdW4iLGljb246WzY0MCw1MTIsW10sImU1OGUiLCJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMCA0OGMwIDIxLjEgMTMuNyAzOS4xIDMyLjYgNDUuNS0uNCAzLjQtLjYgNy0uNiAxMC41IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTQ0LjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsLjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yNC43IDAtMS43LTQuMi00My44LTEwNi4zYy0xMi4zLTMwLTQxLjYtNDkuNS03NC00OS41bC00MC40IDBDMzY0LjQgNDQuOSAzNDMuNyAzMiAzMjAgMzJMOTYgMzJ6TTM4NCAyMjRsMC05NiAzMS45IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlsMzUuNCA4Ni4xLTgyLjEgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTI4MCA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yNTYuNiAxMzIuOWwyNy40IDQxIDAtMjkuOWMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgOC44LTUuOCAxNi42LTE0LjIgMTkuMXMtMTcuNS0uNy0yMi40LThsLTI3LjQtNDEgMCAyOS45YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTk2YzAtOC44IDUuOC0xNi42IDE0LjItMTkuMXMxNy41IC43IDIyLjQgOHpNMTMyIDE0NGwwIDY0YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC02NGMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDY0YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il19LFROPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb2NrIixpY29uOls1MTIsNTEyLFsxMjgzMzksImNsb2NrLWZvdXIiXSwiZjAxNyIsIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXX0sVUNlPVROLFdDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rIixpY29uOls0NDgsNTEyLFsxMjgyMTJdLCJmMDJkIiwiTTM4NCA1MTJMOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMHpNOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6bTMyLTIzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNCA3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il19LExOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtbGF1Z2gtd2luayIsaWNvbjpbNTEyLDUxMixbImxhdWdoLXdpbmsiXSwiZjU5YyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNmwyNjUuNCAwYzE0LjIgMCAyNS40IDEyLjMgMjEuNyAyNi0xOC41IDY4LTgwLjYgMTE4LTE1NC40IDExOFMxMjAgMzgyIDEwMS42IDMxNHpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdfSxHQ2U9TE4sWUNlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb3VkLW1lYXRiYWxsIixpY29uOls1MTIsNTEyLFtdLCJmNzNiIiwiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjYuOSAwYzMuNS0xMi4xIDEwLjEtMjMuMyAxOS4yLTMyLjRsMS40LTEuNGMxNS0xNSAzNS4zLTIyLjkgNTYuMS0yMi4yIDE0LjItMTUuMSAzNC4yLTIzLjkgNTUuNC0yMy45bDIgMGMyMS4xIDAgNDEuMSA4LjggNTUuNCAyMy45IDIwLjgtLjYgNDEuMSA3LjMgNTYuMSAyMi4ybDEuNCAxLjRjOS4yIDkuMiAxNS43IDIwLjQgMTkuMiAzMi40bDI2LjkgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtLjUgMC0xLjEgMC0xLjYgMCAxLjEtNS4yIDEuNi0xMC41IDEuNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MC0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjgtMTguNy0zNS43LTU2LjEtNjAtOTkuMi02MC02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDcuMSAuNyAxNC4xIDEuOSAyMC44LTM4LjMgMTIuNi02NS45IDQ4LjctNjUuOSA5MS4yek0xNTYuNSA0MjQuM2M5LjUgNi4zIDE0LjIgMTcuNyAxMS45IDI4LjgtMS44IDkuMiAxIDE4LjcgNy43IDI1LjNsMS40IDEuNGM2LjYgNi42IDE2LjEgOS41IDI1LjMgNy43IDExLjEtMi4yIDIyLjUgMi41IDI4LjggMTEuOSA1LjIgNy44IDE0IDEyLjUgMjMuMyAxMi41bDIgMGM5LjQgMCAxOC4xLTQuNyAyMy4zLTEyLjUgNi4zLTkuNSAxNy43LTE0LjIgMjguOC0xMS45IDkuMiAxLjggMTguNy0xIDI1LjMtNy43bDEuNC0xLjRjNi42LTYuNiA5LjUtMTYuMSA3LjctMjUuMy0yLjItMTEuMSAyLjUtMjIuNSAxMS45LTI4LjggNy44LTUuMiAxMi41LTE0IDEyLjUtMjMuM2wwLTJjMC05LjQtNC43LTE4LjEtMTIuNS0yMy4zLTkuNS02LjMtMTQuMi0xNy43LTExLjktMjguOCAxLjgtOS4yLTEtMTguNy03LjctMjUuM2wtMS40LTEuNGMtNi42LTYuNi0xNi4xLTkuNS0yNS4zLTcuNy0xMS4xIDIuMi0yMi41LTIuNS0yOC44LTExLjktNS4yLTcuOC0xNC0xMi41LTIzLjMtMTIuNWwtMiAwYy05LjQgMC0xOC4xIDQuNy0yMy4zIDEyLjUtNi4zIDkuNS0xNy43IDE0LjItMjguOCAxMS45LTkuMi0xLjgtMTguNyAxLTI1LjMgNy43bC0xLjQgMS40Yy02LjYgNi42LTkuNSAxNi4xLTcuNyAyNS4zIDIuMiAxMS4xLTIuNSAyMi41LTExLjkgMjguOC03LjggNS4yLTEyLjUgMTQtMTIuNSAyMy4zbDAgMmMwIDkuNCA0LjcgMTguMSAxMi41IDIzLjN6TTQ4IDQ0OGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQxNiAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXX0sJE49e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcnQtYXJlYSIsaWNvbjpbNTEyLDUxMixbImFyZWEtY2hhcnQiXSwiZjFmZSIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0yNDAgOTZjNi43IDAgMTMuMSAyLjggMTcuNyA3LjhMMzI4LjggMTgxLjMgMzc1IDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0zMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMTJjMC02IDIuMy0xMS44IDYuMy0xNi4ybDg4LTk2YzQuNS01IDExLTcuOCAxNy43LTcuOHoiXX0sWkNlPSROLFhDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydXBpYWgtc2lnbiIsaWNvbjpbNTEyLDUxMixbXSwiZTIzZCIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6bTI1Ni0zMmw4MCAwYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyUzQ2MS45IDQ0OCA0MDAgNDQ4bC00OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTgwIDE2MGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtNDggMCAwIDk2IDQ4IDB6Il19LEtDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZXh0LXdpZHRoIixpY29uOls0NDgsNTEyLFtdLCJmMDM1IiwiTTQwIDBDMTcuOSAwIDAgMTcuOSAwIDQwTDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDEyOCAwIDAgMTYwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0xNjAgMTI4IDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNTZjMC0yMi4xLTE3LjktNDAtNDAtNDBMNDAgMHptNzguNiA0MDYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMjI5LjUgMC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0yMjkuNSAwIDkuNC05LjR6Il19LFFDZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYXRlbGxpdGUiLGljb246WzUxMiw1MTIsWzEyODc1Ml0sImY3YmYiLCJNMTk5IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsODkuNCA4OS40IDU1LTU1YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQ4IDQ4YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC01NSA1NSA4OS40IDg5LjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTk2IDk2Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtODkuNC04OS40LTE1LjUgMTUuNWMxMS40IDI0LjYgMTcuOCA1MiAxNy44IDgwLjkgMCAzMS43LTcuNyA2MS41LTIxLjIgODcuOC00LjcgOS0xNi43IDEwLjMtMjMuOCAzLjFsLTk2LjMtOTYuMy02MCA2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjAtNjAtOTYuMy05Ni4zYy03LjItNy4yLTUuOS0xOS4yIDMuMS0yMy44IDI2LjMtMTMuNiA1Ni4yLTIxLjIgODcuOC0yMS4yIDI4LjkgMCA1Ni4zIDYuNCA4MC45IDE3LjhMMTkyLjQgMjI2LjMgMTAzIDEzN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMTk5IDd6bTE3IDUwLjlsLTYyLjEgNjIuMSA3Mi40IDcyLjQgNjIuMS02Mi4xLTcyLjQtNzIuNHpNMzkyIDM1OC4xbDYyLjEtNjIuMS03Mi40LTcyLjQtNjIuMSA2Mi4xIDcyLjQgNzIuNHoiXX0sQU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1taW51cyIsaWNvbjpbNTEyLDUxMixbInNlYXJjaC1taW51cyJdLCJmMDEwIiwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMTM2IDE4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LEpDZT1BTixlX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLWdyb3VwIixpY29uOls1MTIsNTEyLFtdLCJlNTMzIiwiTTI1NiAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em05NiAzMTJjMCAyNS0xMi43IDQ3LTMyIDU5LjlsMCA5Mi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTkyLjFDMTcyLjcgMzU5IDE2MCAzMzcgMTYwIDMxMmwwLTQwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA0MHpNOTYgMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTE2IDI0MGwwIDMyYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDc1LjNjMCAxLjIgMCAyLjUgLjEgMy43LTguNSA3LjYtMTkuNyAxMi4zLTMyLjEgMTIuM2wtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC01Ni42QzEyLjkgMzY0LjQgMCAzNDMuNyAwIDMyMGwwLTMyYzAtNTMgNDMtOTYgOTYtOTYgMTIuNyAwIDI0LjggMi41IDM1LjkgNi45LTEyLjYgMjEuNC0xOS45IDQ2LjQtMTkuOSA3My4xek0zNjggNDY0bDAtNzUuM2MxOS45LTIyLjUgMzItNTIuMiAzMi04NC43bDAtMzJjMC0yNi43LTcuMy01MS42LTE5LjktNzMuMSAxMS4xLTQuNSAyMy4yLTYuOSAzNS45LTYuOSA1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgNTYuNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMTIuMyAwLTIzLjYtNC42LTMyLjEtMTIuMyAwLTEuMiAuMS0yLjUgLjEtMy43ek00MTYgMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il19LHRfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtYmluYXJ5IixpY29uOls0NDgsNTEyLFtdLCJlNjliIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNDQgNGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA0OGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwzMiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtNDhjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTMyIDB6bS00IDQ0YzAtMi4yIDEuOC00IDQtNGwzMiAwYzIuMiAwIDQgMS44IDQgNGwwIDQ4YzAgMi4yLTEuOCA0LTQgNGwtMzIgMGMtMi4yIDAtNC0xLjgtNC00bDAtNDh6bTE0MC00NGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA3Ni40YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOTZjMC0xMS05LTIwLTIwLTIwbC0xNiAwek0xMzIgMjk2YzAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA3Ni40YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOTZjMC0xMS05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6bTk2IDI0bDAgNDhjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMzIgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTQ4YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0zMiAwYy0yNC4zIDAtNDQgMTkuNy00NCA0NHptNDQtNGwzMiAwYzIuMiAwIDQgMS44IDQgNGwwIDQ4YzAgMi4yLTEuOCA0LTQgNGwtMzIgMGMtMi4yIDAtNC0xLjgtNC00bDAtNDhjMC0yLjIgMS44LTQgNC00eiJdfSxETj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXNrcy10aGVhdGVyIixpY29uOls1NzYsNTEyLFsxMjc5MTcsInRoZWF0ZXItbWFza3MiXSwiZjYzMCIsIk0tNSAxMThMMjMuNSAyNzkuN2MxNCA3OS41IDc2LjMgMTQxLjggMTU1LjggMTU1LjhsMTIuNyAyLjJjLTE2LjUtMjguNi0yNy4xLTYwLjctMzAuNi05NC41bC0yNC4xIDQuM2MtOS43IDEuNy0xOC44LTUuOC0xNi45LTE1LjUgNC44LTI0LjcgMTkuMS00Ni42IDM5LjctNjAuOWwwLTc0LjZjLTEuNCAuOC0zIDEuMy00LjcgMS42bC02MyAxMS4xYy04LjcgMS41LTE3LjMtNC40LTE1LjktMTMuMSAzLjEtMTkuNiAxOC40LTM2IDM5LjEtMzkuNyAxNy4yLTMgMzMuOSAzLjUgNDQuNiAxNS44bDAtMjIuN2MwLTIyLjUgNi45LTUyLjQgMzIuMy03My40IDI2LTIxLjUgNjcuNy00My45IDEyNC45LTU0LjItMzAuNS0xNi4zLTg2LjMtMzItMTYzLjgtMTguNC04MC4zIDE0LjItMTI4IDUwLjEtMTUwLjEgNzYuMS05IDEwLjUtMTAuOCAyNC45LTguNCAzOC41ek0yMDggMTM4LjdsMCAxNzQuOGMwIDgwLjcgNTAuNSAxNTIuOSAxMjYuNCAxODAuNEwzNjIuMSA1MDRjMTQuMSA1LjEgMjkuNiA1LjEgNDMuNyAwTDQzMy42IDQ5NEM1MDkuNSA0NjYuNCA1NjAgMzk0LjMgNTYwIDMxMy41bDAtMTc0LjhjMC02LjktMi4xLTEzLjgtNy0xOC42LTIyLjYtMjIuNS03OC4yLTU2LTE2OS01NnMtMTQ2LjQgMzMuNi0xNjkgNTZjLTQuOSA0LjktNyAxMS43LTcgMTguNnptNjYuMSAxODcuMWMtMS40LTcgNy0xMSAxMi43LTYuNiAyNi45IDIwLjYgNjAuNiAzMi45IDk3LjIgMzIuOXM3MC4yLTEyLjMgOTcuMi0zMi45YzUuNy00LjQgMTQuMS0uNCAxMi43IDYuNi0xMC4xIDUxLjQtNTUuNSA5MC4zLTEwOS45IDkwLjNzLTk5LjgtMzguOC0xMDkuOS05MC4zem0uNS0xMDEuNUMyODEuMiAyMDUuNSAyOTkgMTkyIDMyMCAxOTJzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN2wtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43ek00ODAgMjQwbC02NCAwYy04LjggMC0xNi4zLTcuNC0xMy40LTE1LjcgNi41LTE4LjggMjQuNC0zMi4zIDQ1LjQtMzIuM3MzOC45IDEzLjUgNDUuNCAzMi4zYzIuOSA4LjQtNC41IDE1LjctMTMuNCAxNS43eiJdfSxhX2U9RE4saV9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcnQtcGx1cyIsaWNvbjpbNjQwLDUxMixbXSwiZjIxNyIsIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgNDEyLjcgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMzM2IDc4LjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzMuNi0zMy42IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzMuNiAwIDAgMzMuNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzMuNiAzMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMzLjYgMCAwLTMzLjZjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LEI1PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRzLWFzbC1pbnRlcnByZXRpbmciLGljb246WzY0MCw1MTIsWyJhbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyIsImFzbC1pbnRlcnByZXRpbmciLCJoYW5kcy1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyJdLCJmMmEzIiwiTTE1Ni42IDQ2LjNjNy45LTE1LjggMS41LTM1LTE0LjMtNDIuOXMtMzUtMS41LTQyLjkgMTQuM0wxMy41IDE4OS40QzQuNiAyMDcuMiAwIDIyNi44IDAgMjQ2LjdMMCAyNTZjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsODAgMCAwLS4zYzM1LjItMi43IDY1LjQtMjIuOCA4Mi4xLTUxLjcgOC44LTE1LjMgMy42LTM0LjktMTEuNy00My43cy0zNC45LTMuNi00My43IDExLjdjLTcgMTItMTkuOSAyMC0zNC43IDIwLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBjMTQuOCAwIDI3LjcgOCAzNC43IDIwIDguOCAxNS4zIDI4LjQgMjAuNSA0My43IDExLjdzMjAuNS0yOC40IDExLjctNDMuN2MtMTIuOC0yMi4xLTMzLjYtMzkuMS01OC40LTQ3LjFsODAuOC0yMmMxNy00LjYgMjcuMS0yMi4yIDIyLjUtMzkuM3MtMjIuMi0yNy4xLTM5LjMtMjIuNWwtMTAwLjcgMjcuNSA4MS42LTY4YzEzLjYtMTEuMyAxNS40LTMxLjUgNC4xLTQ1LjFTMjQ5LjEtMy45IDIzNS41IDcuNGwtMTAxLjkgODQuOSAyMy00NnpNNDgzLjQgNDY1LjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w4NS45LTE3MS43YzguOS0xNy44IDEzLjUtMzcuNCAxMy41LTU3LjJsMC05LjNjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTgwIDAgMCAuM2MtMzUuMiAyLjctNjUuNCAyMi44LTgyLjEgNTEuNy04LjkgMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdzMzQuOSAzLjYgNDMuNy0xMS43YzctMTIgMTkuOS0yMCAzNC43LTIwIDIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwYy0xNC44IDAtMjcuNy04LTM0LjctMjAtOC45LTE1LjMtMjguNC0yMC41LTQzLjctMTEuN3MtMjAuNSAyOC40LTExLjcgNDMuN2MxMi44IDIyLjEgMzMuNiAzOS4xIDU4LjQgNDcuMWwtODAuOCAyMmMtMTcuMSA0LjYtMjcuMSAyMi4yLTIyLjUgMzkuM3MyMi4yIDI3LjEgMzkuMyAyMi41bDEwMC43LTI3LjUtODEuNiA2OGMtMTMuNiAxMS4zLTE1LjQgMzEuNS00LjEgNDUuMXMzMS41IDE1LjQgNDUuMSA0LjFsMTAxLjktODQuOS0yMyA0NnoiXX0scl9lPUI1LHNfZT1CNSxuX2U9QjUsb19lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLWNlbGxzLXJvdy11bmxvY2siLGljb246WzY0MCw1MTIsW10sImU2OTEiLCJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4Yy0uMS0xNy42LTE0LjQtMzEuOS0zMi0zMS45LTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODAgNDQuMiAwIDc5LjkgMzUuOCA4MCA3OS45bC00OCAweiJdfSxsX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9ja2V0IixpY29uOls1MTIsNTEyLFtdLCJmMTM1IiwiTTEyOCAzMjBMMjQuNSAzMjBjLTI0LjkgMC00MC4yLTI3LjEtMjcuNC00OC41TDUwIDE4My4zQzU4LjcgMTY4LjggNzQuMyAxNjAgOTEuMiAxNjBsOTUgMGM3Ni4xLTEyOC45IDE4OS42LTEzNS40IDI2NS41LTEyNC4zIDEyLjggMS45IDIyLjggMTEuOSAyNC42IDI0LjYgMTEuMSA3NS45IDQuNiAxODkuNC0xMjQuMyAyNjUuNWwwIDk1YzAgMTYuOS04LjggMzIuNS0yMy4zIDQxLjJsLTg4LjIgNTIuOWMtMjEuMyAxMi44LTQ4LjUtMi42LTQ4LjUtMjcuNEwxOTIgMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0uMSAwek00MDAgMTYwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il19LGNfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaHJpbXAiLGljb246WzUxMiw1MTIsWzEyOTQyNF0sImU0NDgiLCJNNzIgMzJDMzIuMiAzMiAwIDY0LjIgMCAxMDQgMCAxNDEuOSAyOS4zIDE3Mi45IDY2LjQgMTc1LjggNzcuNiAyNTcuMiAxNDcuNCAzMjAgMjMyIDMyMGw1NiAwIDAtMTkyLTIxNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDcyIDMyek0yMjQgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDAgMC03Mi4yLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjNsMCA2OS45ek00NzIuNiA0MTVjMjQuNi0zMC4zIDM5LjQtNjguOSAzOS40LTExMSAwLTEyLjMtMS4zLTI0LjMtMy43LTM1LjlMMzgyLjggMzU1LjFjLjggMy40IDEuMiA3IDEuMiAxMC42IDAgNC42LS43IDktMS45IDEzLjFMNDcyLjYgNDE1ek0zMzYgMTI4bC0xNiAwIDAgMTkyIDE4LjMgMGM5LjkgMCAxOS4xIDMuMiAyNi42IDguNWwxMzMuNS05Mi40QzQ3MS44IDE3Mi42IDQwOS4xIDEyOCAzMzYgMTI4ek0xNjggMTkyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LEVOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbmdlLXNpZ24iLGljb246WzM4NCw1MTIsWzgzNzYsInRlbmdlIl0sImY3ZDciLCJNMCA1NkMwIDQyLjcgMTAuNyAzMiAyNCAzMmwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA4MEMxMC43IDgwIDAgNjkuMyAwIDU2ek0wIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDAgMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNTYtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxkX2U9RU4sUE49e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2hpbW5leS1tZWRpY2FsIixpY29uOls1MTIsNTEyLFsiY2xpbmljLW1lZGljYWwiXSwiZjdmMiIsIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjI0IDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0scF9lPVBOLGhfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2Vycy1zbGFzaCIsaWNvbjpbNjQwLDUxMixbXSwiZTA3MyIsIk03My0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyOS43LS4zIDM5IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMjEuOCAyMjRjNTYuNi0xIDEwMi4yLTQ3LjIgMTAyLjItMTA0IDAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTU2LjggMC0xMDMgNDUuNi0xMDQgMTAyLjJMNzMtMjQuOXpNNTEyIDI4OGMtMTcuMiAwLTMzLjcgMy40LTQ4LjcgOS42bDE3MCAxNzBjNC4yLTUuNCA2LjctMTIuMiA2LjctMTkuNmwwLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4ek01OS45IDk3LjdjLTIxLjUgMTIuNS0zNS45IDM1LjctMzUuOSA2Mi4zIDAgMzkuOCAzMi4yIDcyIDcyIDcyIDI2LjYgMCA0OS44LTE0LjQgNjIuMy0zNS45TDU5LjkgOTcuN3pNMjUwLjIgMjg4QzE5Ni44IDMxMy45IDE2MCAzNjguNyAxNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjUwLjIgMC0xOTItMTkyek0xMjggMjg4QzU3LjMgMjg4IDAgMzQ1LjMgMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjR6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdfSx1X2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFwZXItcGxhbmUiLGljb246WzU3Niw1MTIsWzYxOTEzXSwiZjFkOCIsIk01MzYuNC0yNi4zYzkuOC0zLjUgMjAuNi0xIDI4IDYuM3M5LjggMTguMiA2LjMgMjhsLTE3OCA0OTYuOWMtNSAxMy45LTE4LjEgMjMuMS0zMi44IDIzLjEtMTQuMiAwLTI3LTguNi0zMi4zLTIxLjdsLTY0LjItMTU4Yy00LjUtMTEtMi41LTIzLjYgNS4yLTMyLjZsOTQuNS0xMTIuNGM1LjEtNi4xIDQuNy0xNS0uOS0yMC42cy0xNC42LTYtMjAuNi0uOUwyMjkuMiAyNzYuMWMtOS4xIDcuNi0yMS42IDkuNi0zMi42IDUuMkwzOC4xIDIxNi44Yy0xMy4xLTUuMy0yMS43LTE4LjEtMjEuNy0zMi4zIDAtMTQuNyA5LjItMjcuOCAyMy4xLTMyLjhsNDk2LjktMTc4eiJdfSxJTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLWF0bGFzIixpY29uOls0NDgsNTEyLFsiYXRsYXMiXSwiZjU1OCIsIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMzEwLjYgMjA4TDI3OSAyMDhjLTEuNCAyMy4xLTYgNDQuMi0xMi42IDYxLjIgMjIuNy0xMi41IDM5LjQtMzQuOCA0NC4yLTYxLjJ6bS0xNzMuMSAwYzQuOCAyNi40IDIxLjUgNDguNyA0NC4yIDYxLjItNi43LTE3LTExLjItMzgtMTIuNi02MS4ybC0zMS42IDB6bTc2LjQgNTVjNC41IDkuNiA4LjIgMTMuOCAxMC4yIDE1LjUgMi0xLjcgNS43LTUuOCAxMC4yLTE1LjUgNi4yLTEzLjQgMTEuMS0zMi41IDEyLjctNTVsLTQ1LjggMGMxLjYgMjIuNSA2LjUgNDEuNiAxMi43IDU1em0tMTIuNy04N2w0NS44IDBjLTEuNi0yMi41LTYuNS00MS42LTEyLjctNTUtNC41LTkuNi04LjItMTMuOC0xMC4yLTE1LjUtMiAxLjctNS43IDUuOC0xMC4yIDE1LjUtNi4yIDEzLjQtMTEuMSAzMi41LTEyLjcgNTV6bTEwOS41IDBjLTQuOC0yNi40LTIxLjUtNDguNy00NC4yLTYxLjIgNi43IDE3IDExLjIgMzggMTIuNiA2MS4ybDMxLjYgMHpNMTY5IDE3NmMxLjQtMjMuMSA2LTQ0LjIgMTIuNi02MS4yLTIyLjcgMTIuNS0zOS40IDM0LjgtNDQuMiA2MS4ybDMxLjYgMHpNOTYgMTkyYTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6Il19LGZfZT1JTixtX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGUiLGljb246WzQ0OCw1MTIsW10sImYwY2UiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMC02LjUtLjNDMjUuMiA0NzYuNCAwIDQ0OS4xIDAgNDE2TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTY0IDMyMGwwIDk2IDEyOCAwIDAtOTYtMTI4IDB6bTE5MiAwbDAgOTYgMTI4IDAgMC05Ni0xMjggMHpNNjQgMjU2bDEyOCAwIDAtOTYtMTI4IDAgMCA5NnptMTkyIDBsMTI4IDAgMC05Ni0xMjggMCAwIDk2eiJdfSxnX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhcnQiLGljb246WzUxMiw1MTIsWzEyODE1MywxMjgxNTQsMTI4MTU1LDEyODE1NiwxMjg0MjAsMTI5MjkzLDEyOTI5NCwxMjk1MDUsOTgyOSwxMDA4NCw2MTU3OF0sImYwMDQiLCJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6Il19LE5OPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1jaGV2cm9uLXVwIixpY29uOls1MTIsNTEyLFsiY2hldnJvbi1jaXJjbGUtdXAiXSwiZjEzOSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzc3IDI3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04Ny04Ny04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM3NyAyNzF6Il19LGJfZT1OTixGTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXR0ZXJ5LWhhbGYiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTMiXSwiZjI0MiIsIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LHZfZT1GTixjbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb250LWF3ZXNvbWUiLGljb246WzUxMiw1MTIsWzYyNTAxLDYyNjk0LCJmb250LWF3ZXNvbWUtZmxhZyIsImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwiZjJiNCIsIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDY0IDAgMC02NCAzNzMuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnoiXX0seV9lPWNtLHhfZT1jbSx3X2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZGN1ZmZzIixpY29uOls1NzYsNTEyLFtdLCJlNGY4IiwiTTMyMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJ6TTE5MiA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE1MiA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEgLjEgMS45IC4yIDIuOS03NC43IDI2LjMtMTI4LjIgOTcuNS0xMjguMiAxODEuMSAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTgzLjctNTMuNS0xNTQuOC0xMjguMi0xODEuMSAuMS0uOSAuMi0xLjkgLjItMi45bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6TTY0IDMyMGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem00NDggMGMwIDY2LjktNTEuMyAxMjEuOC0xMTYuNiAxMjcuNS0xNC4zIDIyLjgtMzIuNCA0My4xLTUzLjQgNTkuOSAxMy41IDMgMjcuNiA0LjYgNDIgNC42IDEwNiAwIDE5Mi04NiAxOTItMTkyIDAtODMuNy01My41LTE1NC44LTEyOC4yLTE4MS4xIC4xLS45IC4yLTEuOSAuMi0yLjlsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTIuMyAwLTIyLjQgOS4yLTIzLjggMjEuMSAzMC4zIDE5LjIgNTYuMSA0NSA3NS4yIDc1LjQgNjUuNCA1LjggMTE2LjYgNjAuNiAxMTYuNiAxMjcuNXpNMzg0IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sTV9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhdC1jb3dib3ktc2lkZSIsaWNvbjpbNjQwLDUxMixbXSwiZjhjMSIsIk02NDAgMzg4LjNjMCAxNi45LTcuMSAzMi4yLTE4LjQgNDMuMWwtMzUtMjMuMy0yOTIuNy0xOTUuMWMtMzYuMS0yNC4xLTc4LjYtMzYuOS0xMjItMzYuOWwtMy45IDBjLTIuNyAwLTUuNCAwLTggLjFsMjIuMi0xMDBjNS43LTI1LjggMjguNi00NC4xIDU1LTQ0LjEgMTIuMiAwIDI0LjEgNCAzMy44IDExLjNsNC43IDMuNWMyNi4zIDE5LjcgNjIuNCAxOS43IDg4LjYgMGw0LjctMy41YzkuOC03LjMgMjEuNi0xMS4zIDMzLjgtMTEuMyAyNi40IDAgNDkuMyAxOC4zIDU1IDQ0LjFsMzMgMTQ4LjVDNTc0LjUgMjMyLjMgNjQwIDMwMi42IDY0MCAzODguM3pNMTcxLjkgMjI0YzMzLjkgMCA2Ny4xIDEwIDk1LjQgMjguOUw1NjAgNDQ4IDU2IDQ0OGMtMzAuOSAwLTU2LTI1LjEtNTYtNTYgMC05Mi44IDc1LjItMTY4IDE2OC0xNjhsMy45IDB6Il19LHpfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpbmR1c3RyeSIsaWNvbjpbNTEyLDUxMixbXSwiZjI3NSIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjc5LjhjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFsLTE1Ni42IDg0LjMgMC02My4yYzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xTDEyOCAyMTUuNCAxMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6Il19LGtfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaW5lcy1sZWFuaW5nIixpY29uOlszODQsNTEyLFtdLCJlNTFlIiwiTTE5MC40IDc0LjFjNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTEyOCAzODRjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMTI4LTM4NHptNzAuOS00MS43Yy0xNy40LTIuOS0zMy45IDguOS0zNi44IDI2LjNsLTY0IDM4NGMtMi45IDE3LjQgOC45IDMzLjkgMjYuMyAzNi44czMzLjktOC45IDM2LjgtMjYuM2w2NC0zODRjMi45LTE3LjQtOC45LTMzLjktMjYuMy0zNi44ek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LFNfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYXNzcG9ydCIsaWNvbjpbMzg0LDUxMixbXSwiZjVhYiIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0yNzguNiAyMDhjLTQuOCAyNi40LTIxLjUgNDguNy00NC4yIDYxLjIgNi43LTE3IDExLjItMzggMTIuNi02MS4ybDMxLjYgMHptLTE3My4xIDBsMzEuNiAwYzEuNCAyMy4xIDYgNDQuMiAxMi42IDYxLjItMjIuNy0xMi41LTM5LjQtMzQuOC00NC4yLTYxLjJ6bTc2LjQgNTVjLTYuMi0xMy40LTExLjEtMzIuNS0xMi43LTU1bDQ1LjggMGMtMS42IDIyLjUtNi41IDQxLjYtMTIuNyA1NS00LjUgOS42LTguMiAxMy44LTEwLjIgMTUuNS0yLTEuNy01LjctNS44LTEwLjItMTUuNXptMC0xNDJjNC41LTkuNiA4LjItMTMuOCAxMC4yLTE1LjUgMiAxLjcgNS43IDUuOCAxMC4yIDE1LjUgNi4yIDEzLjQgMTEuMSAzMi41IDEyLjcgNTVsLTQ1LjggMGMxLjYtMjIuNSA2LjUtNDEuNiAxMi43LTU1em05Ni43IDU1TDI0NyAxNzZjLTEuNC0yMy4xLTYtNDQuMi0xMi42LTYxLjIgMjIuNyAxMi41IDM5LjQgMzQuOCA0NC4yIDYxLjJ6TTEzNyAxNzZsLTMxLjYgMGM0LjgtMjYuNCAyMS41LTQ4LjcgNDQuMi02MS4yLTYuNyAxNy0xMS4yIDM4LTEyLjYgNjEuMnptMTgzIDE2YTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6Il19LENfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpbmZpbml0eSIsaWNvbjpbNjQwLDUxMixbODczNCw5ODU0XSwiZjUzNCIsIk0wIDI1NmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MCA1MC40IDAgOTcuOCAyMy43IDEyOCA2NGwzMiA0Mi43IDMyLTQyLjdjMzAuMi00MC4zIDc3LjYtNjQgMTI4LTY0IDg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwUzU2OC40IDQxNiA0ODAgNDE2Yy01MC40IDAtOTcuOC0yMy43LTEyOC02NGwtMzItNDIuNy0zMiA0Mi43Yy0zMC4yIDQwLjMtNzcuNiA2NC0xMjggNjQtODguNCAwLTE2MC03MS42LTE2MC0xNjB6bTI4MCAwbC00My4yLTU3LjZjLTE4LjEtMjQuMi00Ni42LTM4LjQtNzYuOC0zOC40LTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMzAuMiAwIDU4LjctMTQuMiA3Ni44LTM4LjRMMjgwIDI1NnptODAgMGw0My4yIDU3LjZjMTguMSAyNC4yIDQ2LjYgMzguNCA3Ni44IDM4LjQgNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLTMwLjIgMC01OC43IDE0LjItNzYuOCAzOC40TDM2MCAyNTZ6Il19LF9fZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG9uZSIsaWNvbjpbNTEyLDUxMixbXSwiZjI0ZCIsIk0yODggNDQ4bC0yMjQgMCAwLTIyNCA0OCAwIDAtNjQtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OC02NCAwIDAgNDh6bS02NC05NmwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjR6Il19LFRfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb3J3YXJkIixpY29uOls1NzYsNTEyLFs5MTkzXSwiZjA0ZSIsIk0zNzEuNyA0My4xQzM2MC4xIDMyIDM0MyAyOC45IDMyOC4zIDM1LjJTMzA0IDU2IDMwNCA3MmwwIDEzNi4zLTE3Mi4zLTE2NS4xQzEyMC4xIDMyIDEwMyAyOC45IDg4LjMgMzUuMlM2NCA1NiA2NCA3MmwwIDM2OGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOUwzMDQgMzAzLjcgMzA0IDQ0MGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOWwxOTItMTg0YzcuOS03LjUgMTIuMy0xOCAxMi4zLTI4LjlzLTQuNS0yMS4zLTEyLjMtMjguOWwtMTkyLTE4NHoiXX0sTF9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im0iLGljb246WzQ0OCw1MTIsWzEwOV0sIjRkIiwiTTIyLjcgMzMuNGMxMy41LTQuMSAyOC4xIDEuMSAzNS45IDEyLjlMMjI0IDI5NC4zIDM4OS40IDQ2LjNjNy44LTExLjcgMjIuNC0xNyAzNS45LTEyLjlTNDQ4IDQ5LjkgNDQ4IDY0bDAgMzg0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc4LjMtMTMzLjQgMjAwLjFjLTUuOSA4LjktMTUuOSAxNC4yLTI2LjYgMTQuMnMtMjAuNy01LjMtMjYuNi0xNC4yTDY0IDE2OS43IDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA0OS45IDkuMiAzNy41IDIyLjcgMzMuNHoiXX0sJF9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvYWQtc3Bpa2VzIixpY29uOls2NDAsNTEyLFtdLCJlNTY4IiwiTTY0IDExNi44YzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDYwNi44IDMwMi4yYzE0LjIgMjEuMy0xLjEgNDkuOC0yNi42IDQ5LjhMNjQgMzUyIDY0IDExNi44ek0zMiAzODRsNTc2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdfSxBX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW91bnRhaW4iLGljb246WzUxMiw1MTIsWzEyNzk1Nl0sImY2ZmMiLCJNMjU2LjUgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjUtNy4yIDEyLjEtMjAuMyAxOS41LTM0LjMgMTkuNWwtNDMyIDBjLTE0LjEgMC0yNy4xLTcuNC0zNC4zLTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMCAyLjktNC42QzIzMS43IDYuMiAyNDMuNiAwIDI1Ni41IDB6TTE3MC40IDI0OS45bDI2LjggMjYuOGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw0My4zLTQzLjNjNi02IDE0LjEtOS40IDIyLjYtOS40bDQyLjggMC03Mi4xLTEzMy41LTg2LjEgMTU5LjR6Il19LERfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcyIsaWNvbjpbNTEyLDUxMixbXSwiZjQzOSIsIk0xNjggNTZsMCA0MC03OC4xIDBjLTE0LjMgMC0yNS45IDExLjYtMjUuOSAyNS45IDAgNCAuOSA4IDIuNyAxMS42bDMzLjQgNjYuOGMtMTEuNCAxLjgtMjAuMiAxMS43LTIwLjIgMjMuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNGw1LjYgMC0xMy42IDEzNi01Ni4yIDcwLjNjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDI0OC45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJMMjg4IDM4NCAyNzQuNCAyNDggMjgwIDI0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNCAwLTExLjktOC43LTIxLjktMjAuMi0yMy43bDMzLjQtNjYuOGMxLjgtMy42IDIuNy03LjYgMi43LTExLjYgMC0xNC4zLTExLjYtMjUuOS0yNS45LTI1LjlsLTc4LjEgMCAwLTQwIDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMjQ1LjMgOCAyMzIgOGwtMTYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzE2OC0yMS4zIDE2OC04bDAgMTYtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwek0zMjUuOCAyNzkuNmw4LjUgODUuNSA0Ny40IDU5LjIgNC4yIDUuN2M5LjIgMTMuNyAxNC4xIDI5LjkgMTQuMSA0Ni41IDAgMTIuNy0yLjggMjQuOC03LjkgMzUuNWw4My4xIDBjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjggMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRsLTI1LjgtMzguNyAwLTY0IDEzLjMtMTMuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiAxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNi0zMiAwIDAtMTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDIyLjQtMTAuMiA0Mi40LTI2LjIgNTUuNnoiXX0sSDU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtdGhyZWUtcXVhcnRlcnMiLGljb246WzMyMCw1MTIsWyJ0ZW1wZXJhdHVyZS0zIiwidGhlcm1vbWV0ZXItMyIsInRoZXJtb21ldGVyLXRocmVlLXF1YXJ0ZXJzIl0sImYyYzgiLCJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zTDEzNiAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1Ni43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXX0sRV9lPUg1LFBfZT1INSxJX2U9SDUsTl9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImIiLGljb246WzMyMCw1MTIsWzk4XSwiNDIiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQ2LjUtMjQuOC04Ny4zLTYyLTEwOS43IDE4LjctMjIuMyAzMC01MSAzMC04Mi4zIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4TDMyIDMyek0xNjAgMjI0bC05NiAwIDAtMTI4IDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTY0IDI4OGwxMjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0xMjh6Il19LEZfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGllbGQtdmlydXMiLGljb246WzUxMiw1MTIsW10sImUwNmMiLCJNMjUzLjQgMi45QzI0OS4yIDEgMjQ0LjcgMCAyNDAgMHMtOS4yIDEtMTMuNCAyLjlMMzguMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNTMuNCAyLjl6TTI0MCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0ek0yMDggMjY0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0sT19lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxpdGVjb2luLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUxZDMiLCJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNTcuOS0zOC42IDExYy0xMi43IDMuNi0yMC4xIDE2LjktMTYuNSAyOS43czE2LjkgMjAuMSAyOS43IDE2LjVMNjQgMjcxLjggNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTE2Mi41IDEzNC42LTM4LjVjMTIuNy0zLjYgMjAuMS0xNi45IDE2LjUtMjkuN3MtMTYuOS0yMC4xLTI5LjctMTYuNUwxMjggMjAzLjYgMTI4IDY0eiJdfSxSX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS1kNiIsaWNvbjpbNTEyLDUxMixbXSwiZjZkMSIsIk0yMjQuNCA4LjNDMjQ0LTIuOCAyNjgtMi44IDI4Ny42IDguM2wxNzYgOTkuN2MyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAxOTcuNGMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE3NiA5OS43Yy0xOS42IDExLjEtNDMuNiAxMS4xLTYzLjEgMGwtMTc2LTk5LjdDMjguNCA0MDUuNSAxNiAzODQuMiAxNiAzNjEuMmwwLTE5Ny40YzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN2wxNzYtOTkuN3pNMTAyLjYgMTU1LjZjLTguOC0zLjEtMTguOCAuMy0yMy44IDguNnMtMy4yIDE4LjcgMy42IDI1bDMuMiAyLjQgMTUwLjIgOTAuMiAwIDE0OC43YzAgMTEgOSAyMCAyMCAyMCAxMSAwIDIwLTkgMjAtMjBsMC0xNDguNyAxNTAuMy05MC4yYzkuNS01LjcgMTIuNi0xOCA2LjktMjcuNHMtMTgtMTIuNS0yNy40LTYuOWwtMTQ5LjcgODkuOC0xNDkuNy04OS44LTMuNy0xLjd6Il19LEJfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmlwLWxpbmVzLXZlcnRpY2FsIixpY29uOlsxOTIsNTEyLFtdLCJmN2E1IiwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgNjR6bTEyOCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODR6Il19LE9OPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdvbGYtYmFsbC10ZWUiLGljb246WzM4NCw1MTIsWyJnb2xmLWJhbGwiXSwiZjQ1MCIsIk0yOTguNSAzODQuMWMxMi4xIDEuMiAyMS41IDExLjUgMjEuNSAyMy45cy05LjQgMjIuNi0yMS41IDIzLjlsLTIuNSAuMS04MCAwIDAgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04OC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEyLjQgOS40LTIyLjYgMjEuNS0yMy45bDIuNS0uMSAyMDggMCAyLjUgLjF6TTE5MiAwYzEwNiAwIDE5MiA4NiAxOTIgMTkyIDAgNTcuNC0yNS4yIDEwOC44LTY1LjEgMTQ0TDY1LjEgMzM2QzI1LjIgMzAwLjggMCAyNDkuNCAwIDE5MiAwIDg2IDg2IDAgMTkyIDB6bTMyIDI0MGMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2em02NC02NGMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2em0tODAtMTZjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnoiXX0sSF9lPU9OLHFfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZXhhZ29uIixpY29uOls1NzYsNTEyLFsxMTA0M10sImYzMTIiLCJNMzMuNSAyMjAuM2MtMTIuNyAyMi4yLTEyLjcgNDkuNCAwIDcxLjVsOTYuMiAxNjguMWMxMi44IDIyLjQgMzYuNyAzNi4yIDYyLjUgMzYuMmwxOTEuNiAwYzI1LjggMCA0OS43LTEzLjggNjIuNS0zNi4ybDk2LjItMTY4LjFjMTIuNy0yMi4yIDEyLjctNDkuNCAwLTcxLjVMNDQ2LjMgNTIuMkM0MzMuNSAyOS44IDQwOS42IDE2IDM4My44IDE2TDE5Mi4yIDE2Yy0yNS44IDAtNDkuNyAxMy44LTYyLjUgMzYuMkwzMy41IDIyMC4zeiJdfSxWX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9sZGVyLW9wZW4iLGljb246WzU3Niw1MTIsWzEyODE5NCwxMjg0NDksNjE3MTddLCJmMDdjIiwiTTU2IDIyNS42TDMyLjQgMjk2LjIgMzIuNCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRsMTE3LjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTM2NS40IDBjLTQxLjMgMC03OCAyNi40LTkxLjEgNjUuNnpNNDc3LjggNDQ4TDk5IDQ0OGMtMzIuOCAwLTU1LjktMzIuMS00NS41LTYzLjJsNDgtMTQ0QzEwOCAyMjEuMiAxMjYuNCAyMDggMTQ3IDIwOGwzNzguOCAwYzMyLjggMCA1NS45IDMyLjEgNDUuNSA2My4ybC00OCAxNDRjLTYuNSAxOS42LTI0LjkgMzIuOC00NS41IDMyLjh6Il19LGpfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJrYWFiYSIsaWNvbjpbNTEyLDUxMixbMTI4MzMxXSwiZjY2YiIsIk0yNTYgNTEuM0w5Mi44IDExMi40IDI0Ny41IDE3MS4xYzUuNSAyLjEgMTEuNSAyLjEgMTcgMEw0MTkuMiAxMTIuNCAyNTYgNTEuM3pNMCAxMjkuM2MwLTIwIDEyLjQtMzcuOSAzMS4xLTQ0LjlsMjA4LTc4YzEwLjktNC4xIDIyLjgtNC4xIDMzLjcgMGwyMDggNzhjMTguNyA3IDMxLjEgMjQuOSAzMS4xIDQ0LjlsMCAzNi0yNTMuMiA5NmMtMS44IC43LTMuOCAuNy01LjcgMGwtMjUzLjItOTYgMC0zNnptMCAxNDBsMC01Mi43IDIzNi4xIDg5LjZjMTIuOCA0LjkgMjYuOSA0LjkgMzkuNyAwbDIzNi4xLTg5LjYgMCA1Mi43LTEyOCA0OC42IDAgNTEuMyAxMjgtNDguNiAwIDYyLjJjMCAyMC0xMi40IDM3LjktMzEuMSA0NC45bC0yMDggNzhjLTEwLjkgNC4xLTIyLjggNC4xLTMzLjcgMGwtMjA4LTc4QzEyLjQgNDIwLjcgMCA0MDIuNyAwIDM4Mi43bDAtNjIuMiAxMjggNDguNiAwLTUxLjMtMTI4LTQ4LjZ6TTIzNi4xIDQxMC4xYzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGw2MC4xLTIyLjggMC01MS4zLTc3LjIgMjkuM2MtMS44IC43LTMuOCAuNy01LjcgMGwtNzcuMi0yOS4zIDAgNTEuMyA2MC4xIDIyLjh6Il19LFVfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmciLGljb246WzU3Niw1MTIsW10sImY0YmQiLCJNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdfSxXX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2luZ2xlLXF1b3RlLXJpZ2h0IixpY29uOlsxOTIsNTEyLFtdLCJlODFjIiwiTTY0IDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAweiJdfSxHX2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm90dGxlLWRyb3BsZXQiLGljb246WzMyMCw1MTIsW10sImU0YzQiLCJNODAgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTAzLjNjNjQuOSAyMC40IDExMiA4MSAxMTIgMTUyLjdsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGMwLTcxLjYgNDcuMS0xMzIuMyAxMTItMTUyLjdMMTEyIDMyQzk0LjMgMzIgODAgMTcuNyA4MCAwem04MCA0MTZjMzUuMyAwIDY0LTMyLjQgNjQtNjQgMC0yMS4yLTI4LjktNjQuNS00Ny45LTkwLjYtOC4xLTExLjEtMjQuMi0xMS4xLTMyLjMgMC0xOSAyNi4xLTQ3LjkgNjkuNC00Ny45IDkwLjYgMCAzMS42IDI4LjcgNjQgNjQgNjR6Il19LFlfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5kb3ctbWluaW1pemUiLGljb246WzUxMiw1MTIsWzEyODQ2OV0sImYyZDEiLCJNMCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sWl9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXZyb24tcmlnaHQiLGljb246WzMyMCw1MTIsWzkwMDJdLCJmMDU0IiwiTTMxMS4xIDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xOTIgMTkyYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDMuMiAyNTYgNzMuOSA4Ni42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJ6Il19LFhfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlZ2ciLGljb246WzM4NCw1MTIsWzEyOTM3MF0sImY3ZmIiLCJNMTkyIDQ5NkM4NiA0OTYgMCAzOTQgMCAyODggMCAxNzYgNjQgMTYgMTkyIDE2UzM4NCAxNzYgMzg0IDI4OGMwIDEwNi04NiAyMDgtMTkyIDIwOHpNMTU0LjggMTM0YzYuNS02IDctMTYuMSAxLTIyLjZzLTE2LjEtNy0yMi42LTFjLTIzLjkgMjEuOC00MS4xIDUyLjctNTIuMyA4NC4yLTExLjIgMzEuNi0xNi45IDY1LjEtMTYuOSA5My41IDAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC0yNC41IDUtNTQuNCAxNS4xLTgyLjggMTAuMS0yOC41IDI1LTU0LjEgNDMuNy03MS4yeiJdfSxSTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYW5kbWFyay1kb21lIixpY29uOls1MTIsNTEyLFsibGFuZG1hcmstYWx0Il0sImY3NTIiLCJNMjU2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgLjkgMCAxLjggLjEgMi42LTgwLjUgMTMuNC0xNDQgNzYuOS0xNTcuNSAxNTcuNEw2NCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAxNjAtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMNDQ4IDQxNiA0NDggMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yLjcgMGMtMTMuNS04MC40LTc3LTE0My45LTE1Ny41LTE1Ny40IC4xLS45IC4xLTEuNyAuMS0yLjYgMC0xNy43LTE0LjMtMzItMzItMzJ6bTgwIDI1Nmw2NCAwIDAgMTYwLTY0IDAgMC0xNjB6TTIyNCA0MTZsMC0xNjAgNjQgMCAwIDE2MC02NCAwek0xMTIgMjU2bDY0IDAgMCAxNjAtNjQgMCAwLTE2MHoiXX0sS19lPVJOLFFfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3b3JtIixpY29uOls0NDgsNTEyLFtdLCJlNTk5IiwiTTIyNCA5NmMwLTUzIDQzLTk2IDk2LTk2bDM4LjQgMEM0MDcuOSAwIDQ0OCA0MC4xIDQ0OCA4OS42TDQ0OCAzNzZjMCA3NS4xLTYwLjkgMTM2LTEzNiAxMzZTMTc2IDQ1MS4xIDE3NiAzNzZsMC04MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGwwIDE2OGMwIDI2LjUtMjEuNSA0OC00OCA0OFMwIDQ5MC41IDAgNDY0TDAgMjk2YzAtNzUuMSA2MC45LTEzNiAxMzYtMTM2czEzNiA2MC45IDEzNiAxMzZsMCA4MGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMTg0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZ6bTE0NC04YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LEpfZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWluanVyZWQiLGljb246WzQ0OCw1MTIsW10sImY3MjgiLCJNMjQyLjcgODBMMzM0IDgwYy0xMC43LTI0LjYtMjkuNS00NC45LTUyLjktNTcuNkwyNDIuNyA4MHptLS45LTcwLjdDMjM2IDguNCAyMzAgOCAyMjQgOCAxNzQuOCA4IDEzMi41IDM3LjYgMTE0IDgwbDgwLjYgMCA0Ny4xLTcwLjd6TTIyNCAyNDhjNjYuMyAwIDEyMC01My43IDEyMC0xMjBsLTI0MCAwYzAgNjYuMyA1My43IDEyMCAxMjAgMTIwek05OC43IDM0MS44QzQ5LjMgMzcwLjIgMTYgNDIzLjUgMTYgNDg0LjYgMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsMTUxIDAtOTUuOC0xNzAuMnptNDUuMS0xNy43bDQyLjcgNzUuOSA4NS41IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCAxMS40LTIuNCAyMi4yLTYuNyAzMmw1OS4yIDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC05MC45LTczLjctMTY0LjYtMTY0LjYtMTY0LjZsLTg2LjkgMGMtMTIuNiAwLTI0LjkgMS40LTM2LjcgNC4xek0yMTMuNSA0NDhsMzYgNjQgMjIuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01OC41IDB6Il19LGVUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdHJpa2V0aHJvdWdoIixpY29uOls1MTIsNTEyLFtdLCJmMGNjIiwiTTk2IDE1Ny41Qzk2IDg4LjIgMTUyLjIgMzIgMjIxLjUgMzJMMzY4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDIyMS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MWw0NC4xIDUuNSAyMjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODMuMSAwQzEwMyAyMDQuNiA5NiAxODEuOCA5NiAxNTcuNXpNMzQ5LjIgMzM2bDY1LjUgMGMuOSA2LjEgMS40IDEyLjIgMS40IDE4LjUgMCA2OS4zLTU2LjIgMTI1LjUtMTI1LjUgMTI1LjVMMTQ0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDYuNSAwYzM0IDAgNjEuNS0yNy41IDYxLjUtNjEuNSAwLTYuNC0xLTEyLjctMi44LTE4LjV6Il19LHRUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJibG9nIixpY29uOls1MTIsNTEyLFtdLCJmNzgxIiwiTTIyNCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxNDUuOCAwIDI2NCAxMTguMiAyNjQgMjY0IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTE5LjMtOTYuNy0yMTYtMjE2LTIxNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNODAgOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OC0yMS41LTQ4LTQ4LTQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTYgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjU1LjUgNTEyIDE3NiA1MTIgMzIgNDQ3LjUgMzIgMzY4bDAtMjI0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0xNjggMGM5Mi44IDAgMTY4IDc1LjIgMTY4IDE2OCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxhVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RvcHdhdGNoLTIwIixpY29uOls0NDgsNTEyLFtdLCJlMDZmIiwiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptLTYwIDI0MGMwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybDAgMy44YzAgMTEuNy0zLjIgMjMuMS05LjMgMzNsLTQzLjggNzEuMiAzMy4xIDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC01Ny44IDBjLTE0LjUgMC0yNi4yLTExLjctMjYuMi0yNi4yIDAtNC45IDEuMy05LjYgMy45LTEzLjhsNTYuNy05Mi4xYzIuMi0zLjYgMy40LTcuOCAzLjQtMTIuMWwwLTMuOGMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjB6bTE4MC01MmMyOC43IDAgNTIgMjMuMyA1MiA1MmwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MmwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnoiXX0saVRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLXBpY2t1cCIsaWNvbjpbNjQwLDUxMixbMTI4NzYzXSwiZjYzYyIsIk0zNjMuOCA5Nmw1Ny42IDk2LTEzMy40IDAgMC05NiA3NS44IDB6TTQ5NiAxOTJMNDE4LjYgNjMuMUM0MDcuMSA0My44IDM4Ni4yIDMyIDM2My44IDMyTDI1NiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjgtMTQ0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIuNCAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGMwLTIuNy0uMS01LjQtLjQtOGwxNjAuNyAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGMwLTIuNy0uMS01LjQtLjQtOGwzMi40IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC04MGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNMTEyIDM5MmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwem0zNzYtNDBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxCTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzZWVkbGluZyIsaWNvbjpbNTEyLDUxMixbMTI3NzkzLCJzcHJvdXQiXSwiZjRkOCIsIk01MTIgMzJDNTEyIDE0MC4xIDQzNS40IDIzMC4zIDMzMy42IDI1MS40IDMyNS43IDE5My4zIDI5OS42IDE0MSAyNjEuMSAxMDAuNSAzMDEuMiA0MCAzNjkuOSAwIDQ0OCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsMzIgMGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0bDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwQzEwMC4zIDMyMCAwIDIxOS43IDAgOTZ6Il19LHJUZT1CTixITj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFuc2dlbmRlciIsaWNvbjpbNTc2LDUxMixbOTg5NSwidHJhbnNnZW5kZXItYWx0Il0sImYyMjUiLCJNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk3LjkgMzIgMTM2IDcwLjEgMTUxIDU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMTUgMTUgMTQuMiAxNC4yYzI3LjktMjMuOCA2NC4yLTM4LjIgMTAzLjgtMzguMiAzNi43IDAgNzAuNiAxMi40IDk3LjYgMzMuMkw0NjYuNyAzMiA0NDggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy04NC40IDg0LjRjMTMgMjMuMSAyMC40IDQ5LjkgMjAuNCA3OC4zIDAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMzUuMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNS4yYy03My0xNC44LTEyOC03OS40LTEyOC0xNTYuOCAwLTMxLjQgOS02MC43IDI0LjctODUuNGwtMTYuNy0xNi43LTE1IDE1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDE1LTE1LTM4LjEtMzguMSAwIDMwLjFjMCAxNy43LTE0LjMgMzItMzIgMzJTMCAxMTMuNyAwIDk2TDAgMEMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwek0yODggMzM2YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyeiJdfSxzVGU9SE4sblRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YXItaGFsZiIsaWNvbjpbNTc2LDUxMixbNjE3MzFdLCJmMDg5IiwiTTMwNC4xIDcuNmMwLTExLjEtNy42LTIwLjctMTguNC0yMy4zcy0yMS45IDIuNS0yNyAxMi40TDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjkxIDQxNi4xYzgtNC4xIDEzLjEtMTIuNCAxMy4xLTIxLjRsMC0zODcuMXoiXX0scU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGhvdG8tZmlsbSIsaWNvbjpbNjQwLDUxMixbInBob3RvLXZpZGVvIl0sImY4N2MiLCJNMTkyIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDU3NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjR6TTMyMCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNTYuNSAxMS41QzQ3Mi4xIDEwMC40IDQ2NC40IDk2IDQ1NiA5NnMtMTYuMSA0LjQtMjAuNSAxMS41bC01NCA4OC4zLTE3LjktMjUuNmMtNC41LTYuNC0xMS44LTEwLjItMTkuNy0xMC4ycy0xNS4yIDMuOC0xOS43IDEwLjJsLTU2IDgwYy01LjEgNy4zLTUuOCAxNi45LTEuNiAyNC44UzI3OS4xIDI4OCAyODggMjg4bDI1NiAwYzguNyAwIDE2LjctNC43IDIwLjktMTIuM3M0LjEtMTYuOC0uNS0yNC4zbC04OC0xNDR6TTE0NCAxMjhsMCAxNjBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMTkyIDAgMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDgwIDB6TTUyIDE5NmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAwem0wIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6Il19LG9UZT1xTixsVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGljdHVyZS1pbi1waWN0dXJlIixpY29uOls1MTIsNTEyLFtdLCJlODBiIiwiTTQ0OCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDExMi02NCAwIDAtMTEyLTM4NCAwIDAgMzIwIDE0NCAwIDAgNjQtMTQ0IDAtNi41LS4zYy0zMC4xLTMuMS01NC4xLTI3LTU3LjEtNTcuMUwwIDQxNiAwIDk2QzAgNjIuOSAyNS4yIDM1LjYgNTcuNSAzMi4zTDY0IDMyIDQ0OCAzMnptMTYgMjI0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xMjhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYwIDB6Il19LGNUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwdW1wLW1lZGljYWwiLGljb246WzMyMCw1MTIsW10sImUwNmEiLCJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4em02NCAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il19LGRUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlIixpY29uOls0NDgsNTEyLFsxMjgyOTNdLCJmMDZkIiwiTTE2MC41LTI2LjRjOS4zLTcuOCAyMy03LjUgMzEuOSAuOSAxMi4zIDExLjYgMjMuMyAyNC40IDMzLjkgMzcuNCAxMy41IDE2LjUgMjkuNyAzOC4zIDQ1LjMgNjQuMiA1LjItNi44IDEwLTEyLjggMTQuMi0xNy45IDEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDcuOS05LjggMTcuNy0yMi4xIDMwLjgtMjIuMSAxMy40IDAgMjIuOCAxMS45IDMwLjggMjIuMSAxLjMgMS43IDIuNiAzLjMgMy45IDQuOCAxMC4zIDEyLjQgMjQgMzAuMyAzNy43IDUyLjQgMjcuMiA0My45IDU1LjYgMTA2LjQgNTUuNiAxNzYuNiAwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0UzAgNDExLjcgMCAyODhjMC05MS4xIDQxLjEtMTcwIDgwLjUtMjI1IDE5LjktMjcuNyAzOS43LTQ5LjkgNTQuNi02NS4xIDguMi04LjQgMTYuNS0xNi43IDI1LjUtMjQuMnpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMSA0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjQtNC41LTktMTYtOS42LTIyLjUtMmwtMjUuMiAyOS4zYy02LjYgNy42LTE4LjUgNy40LTI0LjctLjUtMTcuMy0yMi4xLTQ5LjEtNjIuNC02NS4zLTgzLTUuNC02LjktMTUuMi04LTIxLjUtMS45LTE4LjMgMTcuOC01MS41IDU2LjgtNTEuNSAxMDQuMyAwIDY4LjYgNTAuNiAxMDkuMiAxMTMuNyAxMDkuMnoiXX0sVk49e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1wbHVzIixpY29uOls1MTIsNTEyLFsic2VhcmNoLXBsdXMiXSwiZjAwZSIsIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0scFRlPVZOLGhUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbGFzayIsaWNvbjpbNDQ4LDUxMixbXSwiZjBjMyIsIk0yODggMEwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMkwxMjggMjE1LjUgNy41IDQyNi4zQzIuNiA0MzUgMCA0NDQuNyAwIDQ1NC43IDAgNDg2LjQgMjUuNiA1MTIgNTcuMyA1MTJsMzMzLjQgMGMzMS42IDAgNTcuMy0yNS42IDU3LjMtNTcuMyAwLTEwLTIuNi0xOS44LTcuNS0yOC40TDMyMCAyMTUuNSAzMjAgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzM3LjcgMCAzMjAgMEwyODggMHpNMTkyIDIxNS41bDAtMTUxLjUgNjQgMCAwIDE1MS41YzAgMTEuMSAyLjkgMjIuMSA4LjQgMzEuOGw0MS42IDcyLjctMTY0IDAgNDEuNi03Mi43YzUuNS05LjcgOC40LTIwLjYgOC40LTMxLjh6Il19LHVUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbGlnbi1yaWdodCIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzOCIsIk00NDggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMTkyIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdfSxqTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWJsZS1jYXIiLGljb246WzUxMiw1MTIsWzEyODY3Myw1NzU1MSwidHJhbSJdLCJmN2RhIiwiTTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCAyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM2IDAgMC05Ni4yLTE5My40IDU1LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wyMjQtNjQgMCAwIDIyNC02NGMxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0yMDYuNiA1OSAwIDEwOS45IDEzNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjB6bTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwIDAtOTYtNTYgMHptMTg0IDk2bDAtOTYtODAgMCAwIDk2IDgwIDB6bTQ4IDBsNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTU2IDAgMCA5NnoiXX0sZlRlPWpOLFVOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImtpdC1tZWRpY2FsIixpY29uOls1MTIsNTEyLFsiZmlyc3QtYWlkIl0sImY0NzkiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYgMCAwLTM4NC0xNiAwem02NCAwbDAgMzg0IDI1NiAwIDAtMzg0LTI1NiAwek00NDggNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNiAwIDAgMzg0IDE2IDB6TTIyNCAxODRjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il19LG1UZT1VTixnVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3JpcC1saW5lcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjdhNCIsIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6Il19LFdOPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1cmdlciIsaWNvbjpbNTEyLDUxMixbImhhbWJ1cmdlciJdLCJmODA1IiwiTTQ4IDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDI4OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtOC44LTcuMi0xNi0xNi0xNkw0OCAzODR6TTMyIDIwMmMwIDEyLjIgOS45IDIyIDIyIDIyTDQ1OCAyMjRjMTIuMiAwIDIyLTkuOSAyMi0yMiAwLTE3LjItMi42LTM0LjQtMTAuOC00OS41LTIyLjItNDAuOC04Mi4zLTEyMC41LTIxMy4yLTEyMC41UzY1IDExMS42IDQyLjggMTUyLjVDMzQuNiAxNjcuNiAzMiAxODQuOCAzMiAyMDJ6TTAgMzA0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTI1NiA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTEyMCAxMjhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQ4LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXX0sYlRlPVdOLHZUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzbm93bWFuIixpY29uOls2NDAsNTEyLFs5NzMxLDk5MjRdLCJmN2QwIiwiTTQwMyAyMTEuN2MzMi4yLTI0LjkgNTMtNjMuOSA1My0xMDcuNyAwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNlMxODQgMjguOSAxODQgMTA0YzAgNDMuOSAyMC44IDgyLjkgNTMgMTA3LjctMzIuMiAxNi4zLTU5IDQxLjgtNzYuOCA3My4xTDExMiAyNjQuMiAxMTIgMjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTkuNi0yMi41LTkuN2MtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVjMzYuMSAxNS41IDc1LjkgMzIuNSAxMTkuNCA1MS4yLTMuOSAxNC45LTYgMzAuNi02IDQ2LjcgMCA3MCAzOS4xIDEzMC44IDk2LjYgMTYxLjkgNy45IDQuMyAxNi45IDYuMSAyNS45IDYuMWwxMjMgMGM5IDAgMTgtMS44IDI1LjktNi4xIDU3LjUtMzEuMSA5Ni42LTkyIDk2LjYtMTYxLjkgMC0xNi4yLTIuMS0zMS44LTYtNDYuNyA0My41LTE4LjcgODMuNC0zNS43IDExOS40LTUxLjIgMTIuMi01LjIgMTcuOC0xOS4zIDEyLjYtMzEuNXMtMTkuMy0xNy44LTMxLjUtMTIuNmwtMjIuNSA5LjcgMC0xOS42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAuMi00OC4yIDIwLjZjLTE3LjktMzEuMy00NC42LTU2LjgtNzYuOC03My4xek0yOTYgNDE2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0LTEyMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI0OCA4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zNjggNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yOTIuMiAxNTkuM2MtMi43LTQuOC00LjItMTAuMi00LjItMTUuNyAwLTE3LjUgMTQuMi0zMS42IDMxLjYtMzEuNmwuOCAwYzE3LjUgMCAzMS42IDE0LjIgMzEuNiAzMS42IDAgNS41LTEuNCAxMC45LTQuMiAxNS43TDMyNyAxOTUuOGMtMy4xIDUuNC0xMC44IDUuNC0xMy45IDBsLTIwLjktMzYuNnoiXX0seVRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdGVsIixpY29uOls1MTIsNTEyLFsxMjc5NzZdLCJmNTk0IiwiTTE2IDI0QzE2IDEwLjcgMjYuNyAwIDQwIDBMNDcyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQxNiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNDAgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTQxNi04IDBDMjYuNyA0OCAxNiAzNy4zIDE2IDI0em0yMDggODhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTI4IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTk2IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMTEyIDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0yNDAtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjg4IDM4NGw0My44IDBjOS45IDAgMTcuNS05IDE0LTE4LjItMTMuOC0zNi4xLTQ4LjgtNjEuOC04OS43LTYxLjhzLTc1LjkgMjUuNy04OS43IDYxLjhjLTMuNSA5LjIgNC4xIDE4LjIgMTQgMTguMmw0My44IDAgMCA4MCA2NCAwIDAtODB6Il19LHhUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmludCIsaWNvbjpbNTEyLDUxMixbMTI4NDI0LDEyODQzOCw5MTEzXSwiZjAyZiIsIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwzNDEuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQyLjUgNDIuNWMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMzcuNS0zODQgMCAwLTgwek0wIDI1NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTEyOCA0MTZsMCAzMiAyNTYgMCAwLTk2LTI1NiAwIDAgNjR6TTQ1NiAyNzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0sR049e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sbGV5YmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTUyLCJ2b2xsZXliYWxsLWJhbGwiXSwiZjQ1ZiIsIk01MTIgMjU4LjljLTIzLjQgOC00Ny44IDEzLjEtNzIuNiAxNS4xIDUuOS05OC42LTMwLjctMTkxLjEtOTQuOS0yNTguMyA5Ny44IDM2IDE2Ny41IDEzMCAxNjcuNSAyNDAuMyAwIDEgMCAxLjkgMCAyLjl6bS01LjkgNTJjLTUuMiAyMy43LTEzLjYgNDYuMi0yNC45IDY2LjktOTQuNyA1Mi4yLTIxNCA1MC0zMDguNC0xMy42IDIxLjctMzEuMyA0OS44LTU4LjkgODMuOC04MC41IDc5LjUgNDEuNiAxNjguNSA0OS4xIDI0OS41IDI3LjF6TTI3OS43IDI0MS42Yy0zLjctODkuNy00MS43LTE3MC41LTEwMS4zLTIyOS43IDIyLjMtNy4xIDQ2LTExLjIgNzAuNS0xMS45IDkyLjUgNTUuOSAxNTAuMyAxNjAuMyAxNDIuNCAyNzMuOC0zOC0zLjItNzUuOS0xMy43LTExMS42LTMyLjN6TTEzMC41IDMyLjhDMTQ5LjEgNDkuMSAxNjUuOCA2Ny43IDE3OS45IDg4LjIgOTEuNSAxMzIuMyAyOS43IDIxMC4zIDMuNyAyOTkuNSAxLjMgMjg1LjMgMCAyNzAuOCAwIDI1NiAwIDE2MC4yIDUyLjYgNzYuNyAxMzAuNSAzMi44em03My40IDk3YzE2LjMgMzQuNSAyNi4xIDcyLjYgMjcuOSAxMTIuOC03NS44IDQ4LTEyNi44IDEyMS4zLTE0OC4zIDIwMi41LTE3LjYtMTYuMS0zMy0zNC42LTQ1LjUtNTUgMi4xLTEwOC4xIDYzLjctMjEwLjQgMTY1LjktMjYwLjN6TTI1NiA1MTJjLTQ3LjcgMC05Mi4zLTEzLTEzMC41LTM1LjcgNC44LTI0LjMgMTIuNi00OCAyMy4yLTcwLjQgODIuNCA1NC40IDE4MC44IDY4LjkgMjcxIDQ3LTQ0LjQgMzctMTAxLjUgNTkuMi0xNjMuNyA1OS4yeiJdfSx3VGU9R04sTVRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYWZmaWMtbGlnaHQiLGljb246WzMyMCw1MTIsWzEyODY3OF0sImY2MzciLCJNNjQtMzJDMjguNy0zMiAwLTMuMyAwIDMyTDAgMzg0YzAgODguNCA3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQtMzJ6bTk2IDM5MmMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTEwNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6TTE2MCAxNTJhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAxIDEgMCAxMTJ6Il19LHpUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU1NTUiLCJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il19LGlnPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXJzIixpY29uOls2NDAsNTEyLFtdLCJmMGMwIiwiTTMyMCAxNmExMDQgMTA0IDAgMSAxIDAgMjA4IDEwNCAxMDQgMCAxIDEgMC0yMDh6TTk2IDg4YTcyIDcyIDAgMSAxIDAgMTQ0IDcyIDcyIDAgMSAxIDAtMTQ0ek0wIDQxNmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCAxMi44IDAgMjUuMiAxLjkgMzYuOSA1LjQtMzIuOSAzNi44LTUyLjkgODUuNC01Mi45IDEzOC42bDAgMTZjMCAxMS40IDIuNCAyMi4yIDYuNyAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJ6bTUyMS4zIDY0YzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtMTZjMC01My4yLTIwLTEwMS44LTUyLjktMTM4LjYgMTEuNy0zLjUgMjQuMS01LjQgMzYuOS01LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtODYuNyAwek00NzIgMTYwYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDQzMmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MHMxNjAgNzEuNiAxNjAgMTYwbDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdfSxrVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2VydGlmaWNhdGUiLGljb246WzU3Niw1MTIsW10sImYwYTMiLCJNMjM5LjItOGMtNi4xLTYuMi0xNS04LjctMjMuNC02LjRTMjAwLjktNS42IDE5OC44IDIuOEwxODMuNSA2M2MtMS4xIDQuNC01LjYgNy05LjkgNS43TDExMy44IDUxLjljLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNi45IDU5LjhjMS4yIDQuMy0xLjQgOC44LTUuNyA5LjlMMzUuMSAxNjYuNWMtOC40IDIuMS0xNSA4LjctMTcuMyAxNy4xcy4yIDE3LjMgNi40IDIzLjRsNDQuNSA0My4zYzMuMiAzLjEgMy4yIDguMyAwIDExLjVMMjQuMyAzMDUuMWMtNi4yIDYuMS04LjcgMTUtNi40IDIzLjRzOC45IDE0LjkgMTcuMyAxNy4xbDYwLjIgMTUuM2M0LjQgMS4xIDcgNS42IDUuNyA5LjlMODQuMiA0MzAuNWMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNTkuOC0xNi45YzQuMy0xLjIgOC44IDEuNCA5LjkgNS43bDE1LjMgNjAuMmMyLjEgOC40IDguNyAxNSAxNy4xIDE3LjNzMTcuMy0uMiAyMy40LTYuNGw0My4zLTQ0LjVjMy4xLTMuMiA4LjMtMy4yIDExLjUgMEwzMzcuMyA1MjBjNi4xIDYuMiAxNSA4LjcgMjMuNCA2LjRzMTQuOS04LjkgMTcuMS0xNy4zTDM5My4xIDQ0OWMxLjEtNC40IDUuNi03IDkuOS01LjdsNTkuOCAxNi45YzguNCAyLjQgMTcuNCAwIDIzLjUtNi4xczguNS0xNS4xIDYuMS0yMy41bC0xNi45LTU5LjhjLTEuMi00LjMgMS40LTguOCA1LjctOS45bDYwLjItMTUuM2M4LjQtMi4xIDE1LTguNyAxNy4zLTE3LjFzLS4yLTE3LjQtNi40LTIzLjRsLTQ0LjUtNDMuM2MtMy4yLTMuMS0zLjItOC4zIDAtMTEuNWw0NC41LTQzLjNjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjAuMi0xNS4zYy00LjQtMS4xLTctNS42LTUuNy05LjlsMTYuOS01OS44YzIuNC04LjQgMC0xNy40LTYuMS0yMy41cy0xNS4xLTguNS0yMy41LTYuMUw0MDMgNjguOGMtNC4zIDEuMi04LjgtMS40LTkuOS01LjdMMzc3LjggMi44Yy0yLjEtOC40LTguNy0xNS0xNy4xLTE3LjNzLTE3LjMgLjItMjMuNCA2LjRMMjk0IDM2LjVjLTMuMSAzLjItOC4zIDMuMi0xMS41IDBMMjM5LjItOHoiXX0sU1RlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFsYXJtLWNsb2NrIixpY29uOls1MTIsNTEyLFs5MjAwXSwiZjM0ZSIsIk01MDQuNCAxMzIuNWMtNC41IDEwLjUtMTguNCA5LjgtMjQuOSAuNC0yNy44LTQwLTY2LjEtNzIuMi0xMTEtOTIuNi0xMC40LTQuNy0xMy43LTE4LjMtNC4xLTI0LjYgMTUtOS45IDMzLTE1LjcgNTIuMy0xNS43IDUyLjYgMCA5NS4yIDQyLjYgOTUuMiA5NS4yIDAgMTMuMi0yLjcgMjUuOC03LjYgMzcuM3ptLTQ3MS45IC40Yy02LjUgOS40LTIwLjUgMTAuMS0yNC45LS40LTQuOS0xMS41LTcuNi0yNC4xLTcuNi0zNy4zIDAtNTIuNiA0Mi42LTk1LjIgOTUuMi05NS4yIDE5LjMgMCAzNy4zIDUuOCA1Mi4zIDE1LjcgOS42IDYuMyA2LjMgMTkuOS00LjEgMjQuNi00NC44IDIwLjQtODMuMSA1Mi42LTExMSA5Mi42ek0zOTAuMiA0NjcuNEMzNTIuOCA0OTUuNCAzMDYuMyA1MTIgMjU2IDUxMnMtOTYuOC0xNi42LTEzNC4xLTQ0LjZMODYuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMzUuMi0zNS4yQzQ4LjYgMzg0LjggMzIgMzM4LjMgMzIgMjg4IDMyIDE2NC4zIDEzMi4zIDY0IDI1NiA2NFM0ODAgMTY0LjMgNDgwIDI4OGMwIDUwLjMtMTYuNiA5Ni44LTQ0LjYgMTM0LjJsMzUuMiAzNS4yYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0zNS4yLTM1LjJ6TTI4MCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDRjMCA2LjQgMi41IDEyLjUgNyAxN2w1NiA1NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ5LTQ5IDAtOTQuMXoiXX0sQ1RlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlbGljb3B0ZXItc3ltYm9sIixpY29uOls1MTIsNTEyLFtdLCJlNTAyIiwiTTQ0NS40IDIyNGw2NC43IDBDNDk1LjYgMTA4LjIgNDAzLjggMTYuNCAyODggMmwwIDY0LjdDMzY4LjQgODAuMSA0MzEuOSAxNDMuNiA0NDUuNCAyMjR6TTUxMCAyODhsLTY0LjcgMEM0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjNsMCA2NC43YzExNS44LTE0LjQgMjA3LjYtMTA2LjIgMjIyLTIyMnpNMiAyODhDMTYuNCA0MDMuOCAxMDguMiA0OTUuNiAyMjQgNTEwbDAtNjQuN0MxNDMuNiA0MzEuOSA4MC4yIDM2OC40IDY2LjcgMjg4TDIgMjg4em0wLTY0bDY0LjcgMEM4MC4yIDE0My42IDE0My42IDgwLjEgMjI0IDY2LjdMMjI0IDJDMTA4LjIgMTYuNCAxNi40IDEwOC4yIDIgMjI0em0yMDYtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDk2IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjQtOTYgMCAwLTY0eiJdfSxZTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1jaGltbmV5LWNyYWNrIixpY29uOls1MTIsNTEyLFsiaG91c2UtZGFtYWdlIl0sImY2ZjEiLCJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEwNS42IDAtMzguNC02NCA4MC44LTY3LjNjNy44LTYuNSA3LjYtMTguNi0uNC0yNC45TDIxOC42IDI2My4yYy0xNC42LTExLjUtMzMuOCA3LTIyLjggMjJMMjU2IDM2OCAxNzAuNSA0MzkuMmMtNi4xIDUtNy41IDEzLjgtMy41IDIwLjVsMzEuMyA1Mi4yLTg2LjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4eiJdfSxfVGU9WU4sVFRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1taWxpdGFyeS1wb2ludGluZyIsaWNvbjpbNTEyLDUxMixbXSwiZTU0YSIsIk0yMTQuOSAxNC4xQzIwMiAxNS4yIDE5MiAyNiAxOTIgMzkgMTkyIDUyLjggMjAzLjIgNjQgMjE3IDY0bDE1MSAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMwLjZDMzg0IDggMzc2IC43IDM2Ni43IDEuNEwyMTQuOSAxNC4xek0yMDggMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZMMjA5LjYgOTZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNDAgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE1MiAwIDAgODkuNCAxNjIuOC0xNjIuOGMtMTMuMy00LjMtMjcuMy02LjUtNDEuNi02LjVMNDAgMjI0em0zNDUuNyAyMC45bC0xNzEuMSAxNzEuMSAxNjkuNCAwIDAtNDYuMyA1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDMwLjMgMjkwLjhjLTExLjItMTktMjYuNi0zNC41LTQ0LjYtNDUuOXpNMTkyIDQ0OGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzItMTkyIDB6Il19LExUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkYXRhYmFzZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjFjMCIsIk00NDggMjA1LjhjLTE0LjggOS44LTMxLjggMTcuNy00OS41IDI0LTQ3IDE2LjgtMTA4LjcgMjYuMi0xNzQuNSAyNi4yUzk2LjQgMjQ2LjUgNDkuNSAyMjkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCAyODhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC04Mi4yem0wLTc3LjhsMC00OEM0NDggMzUuOCAzNDcuNyAwIDIyNCAwUzAgMzUuOCAwIDgwbDAgNDhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODB6TTM5OC41IDM4OS44QzM1MS42IDQwNi41IDI4OS45IDQxNiAyMjQgNDE2Uzk2LjQgNDA2LjUgNDkuNSAzODkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCA0MzJjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC02Ni4yYy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNHoiXX0sJFRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im5ld3NwYXBlciIsaWNvbjpbNTEyLDUxMixbMTI4MjQwXSwiZjFlYSIsIk0wIDQxNkwwIDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMTYwIDEyOGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTI0IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDB6bS0yNC03MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zNjAgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDB6Il19LEFUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1yYWluIixpY29uOls1MTIsNTEyLFsxMjc3ODMsOTkyNl0sImY3M2QiLCJNOTYgMzIwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bTEuNiA2OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTE1MiAwYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTEyMS44IDY4LjJsMzAuMi02OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNnoiXX0sWk49e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWF4aW1pemUiLGljb246WzQ0OCw1MTIsWyJleHBhbmQtYXJyb3dzLWFsdCJdLCJmMzFlIiwiTTE2OCAzMkwyNCAzMkMxMC43IDMyIDAgNDIuNyAwIDU2TDAgMjAwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMlMzNC4xIDIyMy44IDQxIDIxN2w0MC00MCA3OSA3OS03OSA3OS00MC00MGMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMwIDMwMi4zIDAgMzEyTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMjcwLjMgNDgwIDI4MCA0ODBsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNDRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMmwtNDAgNDAtNzktNzkgNzktNzkgNDAgNDBjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlM0NDggMjA5LjcgNDQ4IDIwMGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwyODAgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOFMyNTYuMiA2Ni4xIDI2MyA3M2w0MCA0MC03OSA3OS03OS03OSA0MC00MGM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE3Ny43IDMyIDE2OCAzMnoiXX0sRFRlPVpOLEVUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NhdGlvbi1hcnJvdyIsaWNvbjpbNTEyLDUxMixbXSwiZjEyNCIsIk00NzcuOSA3NS41YzQuNS0xMS44IDEuNy0yNS4yLTcuMi0zNC4xcy0yMi4zLTExLjgtMzQuMS03LjJsLTQxNiAxNjBDNy45IDE5OS0uMyAyMTEuMiAwIDIyNC43czkuMSAyNS40IDIxLjkgMjkuNmwxNzYuOCA1OC45IDU4LjkgMTc2LjhjNC4zIDEyLjggMTYuMSAyMS42IDI5LjYgMjEuOXMyNS43LTcuOSAzMC42LTIwLjVsMTYwLTQxNnoiXX0sUFRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpdHkiLGljb246WzU3Niw1MTIsWzEyNzk2MV0sImY2NGYiLCJNMzIwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzItNDggMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNjQgMCAwLTcyQzk2IDEwLjcgODUuMyAwIDcyIDBTNDggMTAuNyA0OCAyNGwwIDc0Yy0yNy42IDcuMS00OCAzMi4yLTQ4IDYyTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwIDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDMyMCAwem02NCAxMTJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnptLTE2IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6bTE2IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2em0xMTItMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMjU2IDMwNGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0yNDAgMTkyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTEyOCAzMDRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMTEyIDE5MmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAweiJdfSxJVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToieC1yYXkiLGljb246WzUxMiw1MTIsW10sImY0OTciLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHptMjgwIDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwIDAgNDgtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwIDAgNDgtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDAgMC00OCA4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwIDAtNDggNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMCAwLTE2eiJdfSxOVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidW1icmVsbGEtYmVhY2giLGljb246WzUxMiw1MTIsWzEyNzk1OF0sImY1Y2EiLCJNNDk3LjUgMzQxLjFjLTUuOSAxNi43LTI1LjMgMjMtNDEuMSAxNS4xbC0xNzguMi04OS4xLTEuNiAzLjItODguOCAxNzcuNyAyOTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4NC4yIDAgMTAzLjItMjA2LjMgMS42LTMuMi0xNjUuNC04Mi43Yy0xNS44LTcuOS0yMi40LTI3LjMtMTIuNS00MiA0NS45LTY4LjYgMTI0LjEtMTEzLjggMjEyLjktMTEzLjggMTQxLjQgMCAyNTYgMTE0LjYgMjU2IDI1NiAwIDI5LjgtNS4xIDU4LjUtMTQuNSA4NS4xeiJdfSxYTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC10by1icmFja2V0IixpY29uOls1MTIsNTEyLFsic2lnbi1pbiJdLCJmMDkwIiwiTTM1MiA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0tOS40IDE4Mi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wyNDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LEZUZT1YTixPVGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZHNldCIsaWNvbjpbNDQ4LDUxMixbXSwiZjU5MCIsIk0yMjQgNjRjLTc5IDAtMTQ0LjcgNTcuMy0xNTcuNyAxMzIuNyA5LjMtMyAxOS4zLTQuNyAyOS43LTQuN2wxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC02NEMwIDEwMC4zIDEwMC4zIDAgMjI0IDBTNDQ4IDEwMC4zIDQ0OCAyMjRsMCAxNjguMWMwIDY2LjMtNTMuOCAxMjAtMTIwLjEgMTIwbC04Ny45LS4xLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDAgNDAgMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTIwLjljLTE0LjEgOC4yLTMwLjUgMTIuOC00OCAxMi44bC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDBjMTAuNCAwIDIwLjMgMS42IDI5LjcgNC43LTEzLTc1LjMtNzguNi0xMzIuNy0xNTcuNy0xMzIuN3oiXX0sUlRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNwbG90Y2giLGljb246WzUxMiw1MTIsW10sImY1YmMiLCJNMjA4LjUgNjIuM2wyOC4xLTM2LjlDMjQ4LjggOS40IDI2Ny44IDAgMjg4IDAgMzE2LjUgMCAzNDEuNiAxOC43IDM0OS44IDQ2bDE3LjggNTkuNGMxMC4zIDM0LjQgMzYuMSA2MiA2OS44IDc0LjZsMzkuOCAxNC45YzIwLjkgNy45IDM0LjggMjcuOSAzNC44IDUwLjIgMCAxNi45LTcuOSAzMi44LTIxLjUgNDIuOWwtNjcuMyA1MC41Yy0yNC4zIDE4LjItMzcuMiA0Ny45LTMzLjggNzguMWwyLjUgMjIuN2M0LjMgMzguNy0yNiA3Mi42LTY1IDcyLjYtMTQuOCAwLTI5LjMtNS4xLTQwLjktMTQuM2wtNTUuMy00NC4zYy00LjUtMy42LTkuMy02LjctMTQuNS05LjItMTUuOC03LjktMzMuNy0xMC40LTUxLTcuM0w4Mi40IDQ1MS45Yy0zNC42IDYuMy02Ni40LTIwLjMtNjYuNC01NS40IDAtMTMuMiA0LjctMjYgMTMuMS0zNi4ybDExLjItMTMuNGMxNC42LTE3LjQgMjIuNi0zOS40IDIyLjYtNjIuMSAwLTE4LjgtNS41LTM3LjItMTUuOC01M0w4LjggMTczLjVDMy4xIDE2NC43IDAgMTU0LjQgMCAxNDMuOSAwIDExMC41IDMwLjEgODUuMSA2MyA5MC43bDUxLjMgOC43YzM1LjkgNi4xIDcyLjItOC4yIDk0LjItMzcuMXoiXX0sS049e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtbG9uZyIsaWNvbjpbMzIwLDUxMixbImxvbmctYXJyb3ctYWx0LXVwIl0sImYzMGMiLCJNMTM3LjQtMjIuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMwMC45IDE2MCAyODggMTYwbC02NCAwIDAgMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMzNi02NCAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDExNC41IDkuNCAxMDUuNGwxMjgtMTI4eiJdfSxCVGU9S04sSFRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhleGFnb24tbm9kZXMiLGljb246WzQ0OCw1MTIsW10sImU2OTkiLCJNMjQ4IDEwNi42YzE4LjktOSAzMi0yOC4zIDMyLTUwLjZjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMi44IDEuMy01LjUgMi45LTggNC43bC04MC4xLTQ1LjhjMS42LTIwLjgtOC42LTQxLjYtMjcuOS01Mi44QzU3LjIgOTYgMjMgMTA1LjIgNy41IDEzMlMxLjIgMTkzIDI4IDIwOC41YzEuMyAuOCAyLjYgMS41IDQgMi4xbDAgOTAuOGMtMS4zIC42LTIuNyAxLjMtNCAyLjFDMS4yIDMxOS04IDM1My4yIDcuNSAzODBTNTcuMiA0MTYgODQgNDAwLjVjMTkuMy0xMS4xIDI5LjQtMzIgMjcuOC01Mi44bDUwLjUtMjguOWMtMTEuNS0xMS4yLTE5LjktMjUuNi0yMy44LTQxLjdMODggMzA2LjFjLTIuNi0xLjgtNS4yLTMuMy04LTQuN2wwLTkwLjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtLjEgMS40LS4yIDIuOC0uMiA0LjNjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMTguOSA5LTMyIDI4LjMtMzIgNTAuNmMwIDMwLjkgMjUuMSA1NiA1NiA1NnM1Ni0yNS4xIDU2LTU2YzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtMS42IDIwLjggOC42IDQxLjYgMjcuOCA1Mi44YzI2LjggMTUuNSA2MSA2LjMgNzYuNS0yMC41czYuMy02MS0yMC41LTc2LjVjLTEuMy0uOC0yLjctMS41LTQtMi4xbDAtOTAuOGMxLjQtLjYgMi43LTEuMyA0LTIuMWMyNi44LTE1LjUgMzYtNDkuNyAyMC41LTc2LjVTMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljMi42IDEuOCA1LjIgMy4zIDggNC43bDAgOTAuOGMtMi44IDEuMy01LjUgMi45LTggNC42bC04MC4xLTQ1LjhjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHoiXX0sZG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG9zcGl0YWwiLGljb246WzU3Niw1MTIsWzEyNzk3Myw2MjU4OSwiaG9zcGl0YWwtYWx0IiwiaG9zcGl0YWwtd2lkZSJdLCJmMGY4IiwiTTEyOCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDAtNjR6TTI3MiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgOTYgMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwek0xMjggMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTExMiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNNTEyIDM2OGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTI2NCAxMDRsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il19LHFUZT1kbSxWVGU9ZG0salRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1oYXJhc3NpbmciLGljb246WzU3Niw1MTIsW10sImU1NDkiLCJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOSA4OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDQuNyA0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43bC0zNS45IDBjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45ek00ODAgMjQwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAzNDRsMCA1OC43LTQxLjQtNDEuNGMtNy4zLTcuMy0xNy42LTEwLjYtMjcuOC05cy0xOC45IDguMS0yMy41IDE3LjNsLTQ4IDk2Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsMjguMS01Ni4zIDU0LjcgNTQuN2MxMi40IDEyLjQgMjkuMSAxOS4zIDQ2LjYgMTkuMyAzNi40IDAgNjUuOS0yOS41IDY1LjktNjUuOUw1NzYgMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2bDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLS44IDQ5LjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJzLS43IDE3LjUgNy4yIDIxLjVsNDggMjRjNy45IDQgMTcuNSAuNyAyMS41LTcuMnMuNy0xNy41LTcuMi0yMS41bC00OC0yNHoiXX0sVVRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWJpbGwtdHJlbmQtdXAiLGljb246WzUxMiw1MTIsW10sImU1MjkiLCJNNDgwIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRMMzU0LjItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDMuOSAwLTExMS4zIDExMS4zLTk1LjEtODEuNWMtOS03LjctMjIuMi03LjctMzEuMiAwbC0xMTIgOTZjLTEwLjEgOC42LTExLjIgMjMuOC0yLjYgMzMuOHMyMy44IDExLjIgMzMuOCAyLjZsOTYuNC04Mi42IDk2LjQgODIuNmM5LjUgOC4yIDIzLjcgNy42IDMyLjYtMS4zbDEyNy0xMjcgMCA0My45YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMNDgwIDh6TTQ4IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMjU2em00Ny4zIDU2Yy0zLjQgMjAuMS0xOS4yIDM2LTM5LjQgMzkuNC00LjQgLjctOC0yLjktOC03LjNsMC0zMmMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4LjEgMy42IDcuMyA4em0wIDE0NC4xYy43IDQuNC0yLjkgOC03LjMgOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtMzJjMC00LjQgMy42LTguMSA4LTcuMyAyMC4xIDMuNCAzNiAxOS4yIDM5LjQgMzkuNHpNNDU2IDQxNi43YzQuNC0uNyA4IDIuOSA4IDcuM2wwIDMyYzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC4xLTMuNi03LjMtOCAzLjQtMjAuMSAxOS4yLTM2IDM5LjQtMzkuNHpNNDE2LjcgMzEyYy0uNy00LjQgMi45LTggNy4zLThsMzIgMGM0LjQgMCA4IDMuNiA4IDhsMCAzMmMwIDQuNC0zLjYgOC4xLTggNy4zLTIwLjEtMy40LTM2LTE5LjItMzkuNC0zOS40ek0xOTIgMzg0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sUU49e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuLXJ1bGVyIixpY29uOls1MTIsNTEyLFsicGVuY2lsLXJ1bGVyIl0sImY1YWUiLCJNNDA0IDBjMTkuMiAwIDM3LjYgNy42IDUxLjEgMjEuMmwzNS43IDM1LjdDNTA0LjQgNzAuNCA1MTIgODguOCA1MTIgMTA4cy03LjYgMzcuNi0yMS4yIDUxLjFMNDQ1LjkgMjA0IDMwOCA2Ni4xIDM1Mi45IDIxLjJDMzY2LjQgNy42IDM4NC44IDAgNDA0IDB6TTU4LjkgMzE1LjFMMjc0LjEgMTAwIDQxMiAyMzcuOSAxOTYuOSA0NTMuMWMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTEuMWMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJzLTguNS0xNS4xLTYuMi0yMy40TDM2LjQgMzUzLjhjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN3pNMjI1LjQgODAuOEw4MC44IDIyNS40IDExLjcgMTU2LjNjLTE1LjYtMTUuNi0xNS42LTQwLjkgMC01Ni42bDg4LTg4YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwbDUuOSA1LjktNTYuMyA1Ni4zYy03LjggNy44LTcuOCAyMC41IDAgMjguM3MyMC41IDcuOCAyOC4zIDBsNTYuMy01Ni4zIDM0LjkgMzQuOXpNNDMxLjIgMjg2LjZsMzQuOSAzNC45LTU2LjMgNTYuM2MtNy44IDcuOC03LjggMjAuNSAwIDI4LjNzMjAuNSA3LjggMjguMyAwbDU2LjMtNTYuMyA1LjkgNS45YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC04OCA4OGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBsLTY5LjEtNjkuMSAxNDQuNi0xNDQuNnoiXX0sV1RlPVFOLEdUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZXBlYXQiLGljb246WzUxMiw1MTIsWzEyODI1N10sImYzNjMiLCJNNDcwLjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzNTIgMTkuMSAzNTIgMzJsMCAzMi0xNjAgMEM4NiA2NCAwIDE1MCAwIDI1NiAwIDI3My43IDE0LjMgMjg4IDMyIDI4OHMzMi0xNC4zIDMyLTMyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDE2MCAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NHpNNDEuNCAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTYwIDQ5Mi45IDE2MCA0ODBsMC0zMiAxNjAgMGMxMDYgMCAxOTItODYgMTkyLTE5MiAwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMTYwIDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjR6Il19LFlUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib25lIixpY29uOls2NDAsNTEyLFsxMjk0NjBdLCJmNWQ3IiwiTTE5Ny40IDE2MGMtMy45IDAtNy4yLTIuOC04LjEtNi42LTEwLjItNDIuMS00OC4xLTczLjQtOTMuMy03My40LTUzIDAtOTYgNDMtOTYgOTYgMCAyOS4xIDEyLjkgNTUuMSAzMy4zIDcyLjcgNC4zIDMuNyA0LjMgMTAuOCAwIDE0LjUtMjAuNCAxNy42LTMzLjMgNDMuNy0zMy4zIDcyLjcgMCA1MyA0MyA5NiA5NiA5NiA0NS4yIDAgODMuMS0zMS4zIDkzLjMtNzMuNCAuOS0zLjggNC4yLTYuNiA4LjEtNi42bDI0NS4xIDBjMy45IDAgNy4yIDIuOCA4LjEgNi42IDEwLjIgNDIuMSA0OC4xIDczLjQgOTMuMyA3My40IDUzIDAgOTYtNDMgOTYtOTYgMC0yOS4xLTEyLjktNTUuMS0zMy4zLTcyLjctNC4zLTMuNy00LjMtMTAuOCAwLTE0LjUgMjAuNC0xNy42IDMzLjMtNDMuNyAzMy4zLTcyLjcgMC01My00My05Ni05Ni05Ni00NS4yIDAtODMuMSAzMS4zLTkzLjMgNzMuNC0uOSAzLjgtNC4yIDYuNi04LjEgNi42bC0yNDUuMSAweiJdfSxKTj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlLWZsYW1lLWN1cnZlZCIsaWNvbjpbMzg0LDUxMixbImZpcmUtYWx0Il0sImY3ZTQiLCJNMTUzLjYgMjkuOWwxNi0yMS4zQzE3My42IDMuMiAxODAgMCAxODYuNyAwIDE5OC40IDAgMjA4IDkuNiAyMDggMjEuM2wwIDIyLjFjMCAxMy4xIDUuNCAyNS43IDE0LjkgMzQuN0wzMDcuNiAxNTlDMzU2LjQgMjA1LjYgMzg0IDI3MC4yIDM4NCAzMzcuNyAzODQgNDM0IDMwNiA1MTIgMjA5LjcgNTEyTDE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwbDAtMy44YzAtNDguOCAxOS40LTk1LjYgNTMuOS0xMzAuMWwzLjUtMy41YzQuMi00LjIgMTAtNi42IDE2LTYuNiAxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNkw5NiAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTMuOWMwLTE4LTcuMi0zNS4zLTE5LjktNDhsLTM4LjYtMzguNmMtMjQtMjQtMzcuNS01Ni43LTM3LjUtOTAuNyAwLTI3LjcgOS01NC44IDI1LjYtNzYuOXoiXX0sWlRlPUpOLGVGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1cy1zaW1wbGUiLGljb246WzQ0OCw1MTIsWyJidXMtYWx0Il0sImY1NWUiLCJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTk2IDMyMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI1NiAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sWFRlPWVGLEtUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2ZW51cy1tYXJzIixpY29uOls2NDAsNTEyLFs5ODkyXSwiZjIyOCIsIk00ODAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyUzQ2Mi4zIDAgNDgwIDBMNTMwLjcgMCA0NzQgNTYuN2MtMjYuMy0xNS43LTU3LjEtMjQuNy05MC0yNC43LTM1LjQgMC02OC40IDEwLjUtOTYgMjguNS0yNy42LTE4LTYwLjYtMjguNS05Ni0yOC41LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzIzLjMtNC4zIDQ0LjktMTMuMSA2NC0yNS42IDI3LjYgMTggNjAuNiAyOC41IDk2IDI4LjUgOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzYgMC00MS4xLTE0LjEtNzktMzcuOC0xMDlMNTc2IDQ1LjMgNTc2IDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMNDgwLTY0ek0zMzYgMzA5LjJjMjAuMi0yOC42IDMyLTYzLjUgMzItMTAxLjJzLTExLjgtNzIuNi0zMi0xMDEuMmMxNC42LTYuOSAzMC44LTEwLjggNDgtMTAuOCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NDUuOSAzMjAgMzg0IDMyMGMtMTcuMiAwLTMzLjUtMy45LTQ4LTEwLjh6TTI4OCAxNTAuM2MxMC4yIDE2LjkgMTYgMzYuNiAxNiA1Ny43cy01LjggNDAuOS0xNiA1Ny43Yy0xMC4yLTE2LjktMTYtMzYuNi0xNi01Ny43czUuOC00MC45IDE2LTU3Ljd6bS00OC00My41Yy0yMC4yIDI4LjYtMzIgNjMuNS0zMiAxMDEuMnMxMS44IDcyLjYgMzIgMTAxLjJjLTE0LjUgNi45LTMwLjggMTAuOC00OCAxMC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NmMxNy4yIDAgMzMuNSAzLjkgNDggMTAuOHoiXX0sUVRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJsZW5kZXIiLGljb246WzUxMiw1MTIsW10sImY1MTciLCJNMCA1NkMwIDI1LjEgMjUuMSAwIDU2IDBMNDM3LjYgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw0NTcuMSA4MCAzNDQgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwLTkuMS05Ni02Mi45IDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgNTZ6TTExNC4zIDE5MkwxMDAuNiA0OCA1NiA0OGMtNC40IDAtOCAzLjYtOCA4bDAgMTI4YzAgNC40IDMuNiA4IDggOGw1OC4zIDB6TTEzNiAzODRsMjQwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQwIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTEyMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LEpUZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1IixpY29uOlszODQsNTEyLFsxMTddLCI1NSIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4bDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxMDYtODYgMTkyLTE5MiAxOTJTMCAzOTQgMCAyODhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnoiXX0sbjg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hhcmUiLGljb246WzUxMiw1MTIsWyJtYWlsLWZvcndhcmQiXSwiZjA2NCIsIk0zMDcuOCAxOC40Yy0xMiA1LTE5LjggMTYuNi0xOS44IDI5LjZsMCA4MC0xMTIgMGMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCAxMTMuMyA4MS41IDE2My45IDEwMC4yIDE3NC4xIDIuNSAxLjQgNS4zIDEuOSA4LjEgMS45IDEwLjkgMCAxOS43LTguOSAxOS43LTE5LjcgMC03LjUtNC4zLTE0LjQtOS44LTE5LjUtOS40LTguOC0yMi4yLTI2LjQtMjIuMi01Ni43IDAtNTMgNDMtOTYgOTYtOTZsOTYgMCAwIDgwYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02Ljl6Il19LGVMZT1uOCx0Rj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaG9uZS1mbGlwIixpY29uOls1MTIsNTEyLFsxMjgzODEsInBob25lLWFsdCJdLCJmODc5IiwiTTM1MS44IDI1YzcuOC0xOC44IDI4LjQtMjguOSA0OC4xLTIzLjVsNS41IDEuNWM2NC42IDE3LjYgMTE5LjggODAuMiAxMDMuNyAxNTYuNC0zNy4xIDE3NS0xNzQuOCAzMTIuNy0zNDkuOCAzNDkuOC03Ni4zIDE2LjItMTM4LjgtMzkuMS0xNTYuNC0xMDMuN2wtMS41LTUuNWMtNS40LTE5LjcgNC43LTQwLjMgMjMuNS00OC4xbDk3LjMtNDAuNWMxNi41LTYuOSAzNS42LTIuMSA0NyAxMS44bDM4LjYgNDcuMmM3MC4zLTM0LjkgMTI2LjgtOTMuMyAxNTkuMy0xNjQuOWwtNDQuMS0zNi4xYy0xMy45LTExLjMtMTguNi0zMC40LTExLjgtNDdMMzUxLjggMjV6Il19LHRMZT10RixhTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9pbGV0LXBvcnRhYmxlIixpY29uOlszMjAsNTEyLFtdLCJlNTgzIiwiTTAgNjRsMCAxNiAzMjAgMCAwLTE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0em0yNCA2NEwwIDEyOCAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAyMjQgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTM2MC0yOTYgMHptMjI0IDk2bDI0IDAgMCA5Ni0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdfSxpTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXByZWduYW50IixpY29uOlszODQsNTEyLFtdLCJlMzFlIiwiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptODAgMzIxLjJjOC42LTQuNSAxNi44LTEwIDI0LjMtMTYuNWw0LTMuNGMyMi42LTE5LjQgMzUuNy00Ny43IDM1LjctNzcuNiAwLTM1LjktMTguOC02OS4xLTQ5LjYtODcuNmwtMzAuNC0xOC4yIDAtMS44YzAtNDYuNS0zNy43LTg0LjEtODQuMS04NC4xLTI4LjEgMC01NC40IDE0LjEtNzAgMzcuNUwyMS40IDI3MC4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOWwyOS00My41LTMwLjUgMTEzLjVjLTIuNiA5LjYtLjYgMTkuOSA1LjUgMjcuOFM5NCA0MTYgMTA0IDQxNmw4IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMzIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTAuOHoiXX0sckxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxlc3MtdGhhbiIsaWNvbjpbNTEyLDUxMixbNjI3NzRdLCIzYyIsIk00NzcuMSA1MC42YzcuNCAxNiAuNCAzNS4xLTE1LjYgNDIuNUwxMDguNCAyNTYgNDYxLjQgNDE5YzE2IDcuNCAyMyAyNi40IDE1LjYgNDIuNXMtMjYuNCAyMy00Mi41IDE1LjZsLTQxNi0xOTJDNy4zIDI3OS44IDAgMjY4LjUgMCAyNTZTNy4zIDIzMi4yIDE4LjYgMjI3bDQxNi0xOTJjMTYtNy40IDM1LjEtLjQgNDIuNSAxNS42eiJdfSxzTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3VwZXJzY3JpcHQiLGljb246WzU3Niw1MTIsW10sImYxMmIiLCJNNTQ0IDMyYzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40bC0zMiAxNkM0NDkuOSAyNy4zIDQ0My41IDQ2LjUgNDUxLjQgNjIuMyA0NTcgNzMuNSA0NjguMyA4MCA0ODAgODBsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4ek05NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZzMTQuMyAzMiAzMiAzMmwxNS4zIDAgODkuNiAxMjgtODkuNiAxMjgtMTUuMyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwyNDAgMzExLjggMzI1LjggNDM0LjRjNiA4LjYgMTUuOCAxMy42IDI2LjIgMTMuNmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNS4zIDAtODkuNi0xMjggODkuNi0xMjggMTUuMyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDI0MCAyMDAuMiAxNTQuMiA3Ny42QzE0OC4yIDY5LjEgMTM4LjQgNjQgMTI4IDY0TDk2IDY0eiJdfSxhRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtc3RvcCIsaWNvbjpbNTEyLDUxMixbNjIwOTQsInN0b3AtY2lyY2xlIl0sImYyOGQiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0sbkxlPWFGLGlGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy11cC1kb3duIixpY29uOlsyNTYsNTEyLFsiYXJyb3dzLXYiXSwiZjA3ZCIsIk0xNTAuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgNzcuMyA5NiA0MzQuNyA1NC42IDM5My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRzMTYuNi0zLjQgMjIuNi05LjRsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTQxLjQgNDEuNCAwLTM1Ny41IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXX0sb0xlPWlGLHJGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBvby1zdG9ybSIsaWNvbjpbNTEyLDUxMixbInBvby1ib2x0Il0sImY3NWEiLCJNMjY4LjktMzEuOGMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjNjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMSAwIDIxLjctOC41IDM3LjItMjEuOSA0Ny42LTEzLjkgMTAuOC0zNC4xIDE3LTU4LjEgMTdsLTI0IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4IDAgMTQuOCAzLjcgMjguOCAxMC4yIDQxLjEtNDIgNi42LTc0LjIgNDMtNzQuMiA4Ni45IDAgNDYuNiAzNi4yIDg0LjcgODEuOSA4Ny44IDMuMS0xMi40IDkuOS0yMy44IDE5LjYtMzIuNUwyNDIuNyAyMjVjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43bC0xMi43IDQyLjRjMjguOCAxLjIgNTIuNyAyMS4xIDU5LjggNDcuOWwyNi4yIDBjNDguNiAwIDg4LTM5LjQgODgtODggMC00My45LTMyLjEtODAuMy03NC4yLTg2LjkgNi41LTEyLjMgMTAuMi0yNi4yIDEwLjItNDEuMSAwLTQ4LjYtMzkuNC04OC04OC04OGwtOS40IDBjLjktNS40IDEuNC0xMC45IDEuNC0xNi42IDAtNDguNy0zNi4xLTg4LjktODMuMS05NS4yek0xNDQuNiA0MTZsNjEuOCAwLTMxLjIgMTA0LjFjLTMuNiAxMS45IDUuMyAyMy45IDE3LjggMjMuOSA0LjYgMCA5LTEuNyAxMi40LTQuN0wzNDYuNSA0MTIuOWMzLjUtMy4xIDUuNS03LjYgNS41LTEyLjQgMC05LjItNy40LTE2LjYtMTYuNi0xNi42bC02MS44IDAgMzEuMi0xMDQuMWMzLjYtMTEuOS01LjMtMjMuOS0xNy44LTIzLjktNC42IDAtOSAxLjctMTIuNCA0LjdMMTMzLjUgMzg3LjFjLTMuNSAzLjEtNS41IDcuNi01LjUgMTIuNCAwIDkuMiA3LjQgMTYuNiAxNi42IDE2LjZ6Il19LGxMZT1yRixjTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlkZW8tc2xhc2giLGljb246WzU3Niw1MTIsW10sImY0ZTIiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTUzLTE1MyAwLTIyMi4yYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOS44IDY0IDQxLTI0Ljl6TTMyIDEyOGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGM3LjggMCAxNS4zLTEuNCAyMi4yLTRMMzYgMTA1LjhjLTIuNiA2LjktNCAxNC40LTQgMjIuMnpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdfSxwbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUteG1hcmsiLGljb246WzQ0OCw1MTIsWzEwMDYyLCJ0aW1lcy1zcXVhcmUiLCJ4bWFyay1zcXVhcmUiXSwiZjJkMyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem03MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il19LGRMZT1wbSxwTGU9cG0sc0Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1ob2xkaW5nLWRyb3BsZXQiLGljb246WzU3Niw1MTIsWyJoYW5kLWhvbGRpbmctd2F0ZXIiXSwiZjRjMSIsIk0yNzUuNSA2LjZMMjA5LjIgMTAzQzE5OCAxMTkuMyAxOTIgMTM4LjYgMTkyIDE1OC4zbDAgMS43YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xLjdjMC0xOS44LTYtMzktMTcuMi01NS4zTDMwMC41IDYuNkMyOTcuNyAyLjUgMjkzIDAgMjg4IDBzLTkuNyAyLjUtMTIuNSA2LjZ6TTEwOS4zIDM0MS41TDY2LjcgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNiAyODAgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdfSxoTGU9c0YsaG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToid29uLXNpZ24iLGljb246WzUxMiw1MTIsWzgzNjEsImtydyIsIndvbiJdLCJmMTU5IiwiTTYyLjQgNTMuOUM1Ni44IDM3LjEgMzguNyAyOC4xIDIxLjkgMzMuNlMtMy45IDU3LjQgMS43IDc0LjFMNTYuOSAyNDAgMzIgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwLjkgMCA1Ni43IDE3MC4xYzQuNSAxMy41IDE3LjQgMjIuNCAzMS42IDIxLjlzMjYuNC0xMC40IDI5LjgtMjQuMkwyMzMgMjg4IDI3OSAyODggMzIxIDQ1NS44YzMuNCAxMy44IDE1LjYgMjMuNyAyOS44IDI0LjJzMjcuMS04LjQgMzEuNi0yMS45TDQzOS4xIDI4OCA0ODAgMjg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNC45IDAgNTUuMy0xNjUuOWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtNjIgMTg2LjEtNTQuNiAwLTQ1LjktMTgzLjhDMjgzLjUgNDIgMjcwLjcgMzIgMjU2IDMycy0yNy41IDEwLTMxIDI0LjJMMTc5IDI0MCAxMjQuNCAyNDAgNjIuNCA1My45em03OCAyMzQuMWwyNi42IDAtMTEuNCA0NS42LTE1LjItNDUuNnpNMjQ1IDI0MGwxMS00NC4xIDExIDQ0LjEtMjIgMHptMTAwIDQ4bDI2LjYgMC0xNS4yIDQ1LjYtMTEuNC00NS42eiJdfSx1TGU9aG0sZkxlPWhtLG1MZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvYmplY3QtdW5ncm91cCIsaWNvbjpbNjQwLDUxMixbXSwiZjI0OCIsIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwyMDkuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTIwOS4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMTEzLjF6TTExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAxMTMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjA5LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0xMTMuMWMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40TDExOS40IDk2ek01NDQgMjc5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNGwtMjkuMiAwYy01LjMtMTcuNy0xNC44LTMzLjUtMjcuNC00Ni40bDAtMTcuNiA1Ni42IDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCAxMTMuMWMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjA5LjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNC42IDY0IDAgMCAyNC42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTExMy4xeiJdfSxnTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudCIsaWNvbjpbNTEyLDUxMixbMTI4NDg5LDYxNjY5XSwiZjA3NSIsIk01MTIgMjQwYzAgMTMyLjUtMTE0LjYgMjQwLTI1NiAyNDAtMzcuMSAwLTcyLjMtNy40LTEwNC4xLTIwLjdMMzMuNSA1MTAuMWMtOS40IDQtMjAuMiAxLjctMjcuMS01LjhTLTIgNDg1LjggMi44IDQ3Ni44bDQ4LjgtOTIuMkMxOS4yIDM0NC4zIDAgMjk0LjMgMCAyNDAgMCAxMDcuNSAxMTQuNiAwIDI1NiAwUzUxMiAxMDcuNSA1MTIgMjQweiJdfSxiTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGlsbC1hdmFsYW5jaGUiLGljb246WzU3Niw1MTIsW10sImU1MDciLCJNNDQwLjEgNDAxLjljMzQuMiAyMy4xIDgxLjEgMTkuNSAxMTEuNC0xMC44IDM0LjQtMzQuNCAzNC40LTkwLjEgMC0xMjQuNS0yNy44LTI3LjgtNjkuNS0zMy4xLTEwMi42LTE2LTExLjggNi4xLTE2LjQgMjAuNi0xMC4zIDMyLjNzMjAuNiAxNi40IDMyLjMgMTAuM2MxNS4xLTcuOCAzNC01LjMgNDYuNiA3LjMgMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTgxLjctODEuN2MyMi4zLTE0LjIgMzcuMS0zOS4xIDM3LjEtNjcuNSAwLTMzLjktMjEuMS02Mi45LTUwLjktNzQuNSAxLjktNi44IDIuOS0xNCAyLjktMjEuNSAwLTQ0LjItMzUuOC04MC04MC04MC0yNy4zIDAtNTEuNSAxMy43LTY1LjkgMzQuNi01LjgtMjAtMjQuMi0zNC42LTQ2LjEtMzQuNi0yNi41IDAtNDggMjEuNS00OCA0OCAwIDQgLjUgNy45IDEuNCAxMS42TDQ0MC4xIDQwMS45ek00ODAuNCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wIDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTY4LjcgODdDNDMuNSA2MS44IC40IDc5LjcgLjQgMTE1LjNMLjQgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguNyA4N3oiXX0sdkxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy10by1leWUiLGljb246WzY0MCw1MTIsW10sImU0YmYiLCJNMTc2IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzguMS02My02M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTMjEuNyA1NS42IDMxIDY1bDYzIDYzLTM4LjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtOTZ6bTAgNDAwbDAtOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzguMSAwLTYzIDYzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNjMtNjMgMCAzOC4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6bTMxMiAyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTM4LjEgNjMgNjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyAzOC4xIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjR6TTQ2NCA1NmwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTM4LjEgMCA2My02M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC02MyA2MyAwLTM4LjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6TTMyMCAxMjBjLTU3LjMgMC05OS40IDM0LTEyNS42IDY0LjMtMjAgMjMuMS0zMi40IDQ1LjgtMzcuNiA1Ni4xLTIuNSA1LTQuOSA5LjctNC45IDE1LjZzMi4zIDEwLjYgNC45IDE1LjZjNS4yIDEwLjMgMTcuNiAzMyAzNy42IDU2LjEgMjYuMiAzMC4zIDY4LjIgNjQuMyAxMjUuNiA2NC4zczk5LjQtMzQgMTI1LjYtNjQuM2MyMC0yMy4xIDMyLjQtNDUuOCAzNy42LTU2LjEgMi41LTUgNC45LTkuNyA0LjktMTUuNnMtMi4zLTEwLjYtNC45LTE1LjZjLTUuMi0xMC4zLTE3LjYtMzMtMzcuNi01Ni4xLTI2LjItMzAuMy02OC4yLTY0LjMtMTI1LjYtNjQuM3pNMjU2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il19LHlMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzbm93cGxvdyIsaWNvbjpbNjQwLDUxMixbXSwiZjdkMiIsIk0xMjggMTYwbDAtOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjk2LjQgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw4Ny42IDE3NS4xYzQuNCA4LjkgNi44IDE4LjcgNi44IDI4LjZsMCA1Ni45IDgwIDAgMC04MGMwLTQ4LjYgMzkuNC04OCA4OC04OCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAyMDhjMCAyMi4xIDE3LjkgNDAgNDAgNDAgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4bDAtODAtNjMgMGM5LjUgMTYuNSAxNSAzNS42IDE1IDU2IDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0yMjQgMGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTIgMC0zMC41IDEyLjItNTguMiAzMi03OC40TDY0IDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHptOTEuNyAzNC45bDQzLjYgMjkuMSAxMTMuMiAwLTgwLTE2MC0xMDQuNCAwIDAgMTA4LjggMjcuNyAyMi4xek00MTYgNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHptLTI4MCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTIxNi0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIzMiA0MDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0seExlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYXJ0LWdhbnR0IixpY29uOls1MTIsNTEyLFtdLCJlMGU0IiwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTY0IDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDB6TTM4NCAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHoiXX0sbkY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlkZW8iLGljb246WzU3Niw1MTIsWyJ2aWRlby1jYW1lcmEiXSwiZjAzZCIsIk05NiA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgNjR6TTQ2NCAzMzZsNzMuNSA1OC44YzQuMiAzLjQgOS40IDUuMiAxNC44IDUuMiAxMy4xIDAgMjMuNy0xMC42IDIzLjctMjMuN2wwLTI0MC42YzAtMTMuMS0xMC42LTIzLjctMjMuNy0yMy43LTUuNCAwLTEwLjYgMS44LTE0LjggNS4yTDQ2NCAxNzYgNDY0IDMzNnoiXX0sd0xlPW5GLE1MZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1wYXduIixpY29uOlszODQsNTEyLFs5ODIzXSwiZjQ0MyIsIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy04LjkgNTEuOS0yNCA3MiAxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDI2LjcgMTYwIDU2LjIgNzAuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw1MS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMODAgMzg0IDEwNi43IDIyNCA5NiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjLTE1LjEtMjAuMS0yNC00NS0yNC03MiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHoiXX0sekxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN5bmFnb2d1ZSIsaWNvbjpbNTc2LDUxMixbMTI4MzMzXSwiZjY5YiIsIk0xNiA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzItMTI4IDAgMC0zMnptMCAzNjhsMC0yODggMTI4IDAgMTI2LjItODQuMmMxMC43LTcuMiAyNC44LTcuMiAzNS41IDBsMTI2LjIgODQuMiAxMjggMCAwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0ek01NjAgMTEybC0xMjggMCAwLTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMnpNMjI0IDM4NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6bTY0LTE1MmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il19LGtMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy1jaXJjbGUtY2hlY2siLGljb246WzU3Niw1MTIsW10sImU0ZDIiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sU0xlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLXBsdXMiLGljb246WzQ0OCw1MTIsW10sImYyNzEiLCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sb0Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2hlZWxjaGFpci1tb3ZlIixpY29uOls0NDgsNTEyLFsid2hlZWxjaGFpci1hbHQiXSwiZTJjZSIsIk0zMTIgNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0yMDUuNCAxMjQuMWMtNi40LTUuMi0xNS42LTQuNy0yMS40IDEuMWwtMzMuNCAzMy40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxMzguOCA4MGMyOS0yOSA3NS4yLTMxLjQgMTA3LTUuNWw4MS4zIDY2YzIxLjQgMTcuNCAyMy44IDQ5LjIgNS4yIDY5LjVsLTQxLjggNDYgOTggMGMzMC4zIDAgNTMgMjcuNyA0Ny4xIDU3LjRMNDA3LjQgNDU0LjNjLTMuNSAxNy4zLTIwLjMgMjguNi0zNy43IDI1LjFzLTI4LjYtMjAuMy0yNS4xLTM3LjdMMzY5IDMyMCAzMTYuOCAzMjBjMi4xIDEwLjMgMy4yIDIxIDMuMiAzMiAwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyIDcxLjYgMTkyIDE2MCAxOTJjNiAwIDExLjkgLjMgMTcuOCAxbDUwLjQtNTAuNC0yMi43LTE4LjV6TTE2MCA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il19LENMZT1vRixfTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1zaGllbGQiLGljb246WzU3Niw1MTIsW10sImY1MDUiLCJNMjI0IDI0OGExMjAgMTIwIDAgMSAwIDAtMjQwIDEyMCAxMjAgMCAxIDAgMCAyNDB6bS0yOS43IDU2Qzk1LjggMzA0IDE2IDM4My44IDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDI1MS41IDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtNy4zIDEtMTQuNSAyLjktMjEuM2wtNDguNiAwem0yNTEgMTg0LjVsLTEzLjMgNi4zIDAtMTg4LjEgOTYgMzIgMCAxOS42YzAgNTUuOC0zMi4yIDEwNi41LTgyLjcgMTMwLjN6TTQyMS45IDI1OS41bC0xMTIgMzcuM2MtMTMuMSA0LjQtMjEuOSAxNi42LTIxLjkgMzAuNGwwIDMxLjFjMCA3NC40IDQzIDE0Mi4xIDExMC4yIDE3My43bDE4LjUgOC43YzQuOCAyLjIgMTAgMy40IDE1LjIgMy40czEwLjUtMS4yIDE1LjItMy40bDE4LjUtOC43QzUzMyA1MDAuMyA1NzYgNDMyLjYgNTc2IDM1OC4ybDAtMzEuMWMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtMTEyLTM3LjNjLTYuNi0yLjItMTMuNy0yLjItMjAuMiAweiJdfSxUTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9sZCIsaWNvbjpbMzg0LDUxMixbXSwiZjAzMiIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzIgMCAwIDMyMC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNDYuNS0yNC44LTg3LjMtNjItMTA5LjcgMTguNy0yMi4zIDMwLTUxIDMwLTgyLjMgMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTI4OCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDAgMC0xMjggOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHpNMTI4IDQxNmwwLTEyOCAxMjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTI4IDB6Il19LGxGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LXB1bHNlIixpY29uOls1MTIsNTEyLFsiaGVhcnRiZWF0Il0sImYyMWUiLCJNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4eiJdfSxMTGU9bEYsY0Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXJvb3QtdmFyaWFibGUiLGljb246WzU3Niw1MTIsWyJzcXVhcmUtcm9vdC1hbHQiXSwiZjY5OCIsIk0yODIuNiA3OC4xYzgtMjcuMyAzMy00Ni4xIDYxLjQtNDYuMWwyMDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzNDQgOTYgMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1LjYgMGMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44IDg0LjQtMjg5LjV6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQxLjQgNDEuNCA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtNDEuNCA0MS40IDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDEuNC00MS40LTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6Il19LCRMZT1jRixkRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kcy1idWJibGVzIixpY29uOls1MTIsNTEyLFsiaGFuZHMtd2FzaCJdLCJlMDVlIiwiTTM4NCA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTk2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTEyOCA0NjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMCAxNjBsLjEgNzIuNmMwIDQ0LjggMTcuNiA4Ny4xIDQ3LjkgMTE4LjQgLjMtNzcgNDAuMS0xNDguNCAxMDUuNC0xODkuM2wxLjktMS4yYy0yLjUtMy43LTIuOC04LjYtLjQtMTIuN2w2Mi0xMDcuNGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOFMxODIgNSAxNzUuNCAxNi41bC02OCAxMTcuOCAwIDAgMCAwLTQzLjMgNzUgMC00OS4zYzAtMTcuNy0xNC40LTMyLTMyLTMyUzAgMTQyLjQgMCAxNjB6bTIxMy42LTM1LjljMTQuMS04LjggMjkuOC0xMi43IDQ1LjItMTIuMWwzNi41LTYzLjNjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44bC02Ny4xIDExNi4yIDI3LTE2Ljl6bTg2LjUtMzUuN2wtMTYuNCAyOC40YzE1LjEgNS41IDI4LjYgMTUuNiAzOC4zIDI5LjdsMTkuNy0zNC4yYzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHptNDYuNCA2My43bC0xMi41IDIxLjdjMiA4LjYgMi41IDE3LjUgMS43IDI2LjFsNC4zIDAgMCAwIDM0LjQgMCAxMy43LTIzLjhjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44ek0yODMuMSAxNzVjLTkuNC0xNS0yOS4xLTE5LjUtNDQuMS0xMC4ybC02MC4yIDM3LjZDMTI3LjMgMjM0LjcgOTYgMjkxLjIgOTYgMzUybDAgOGMwIDguOSAuOCAxNy42IDIuMiAyNi4xIDM1LjQgOC4yIDYxLjggNDAgNjEuOCA3Ny45IDAgNi4zLS43IDEyLjUtMi4xIDE4LjQgMjUuMiAxOC42IDU2LjQgMjkuNiA5MC4xIDI5LjZsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTkyIDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEyNCAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDE1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNTYgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTM2IDAgMCAwIDAgMC05My4yIDAgNDYuMi0yOC45YzE1LTkuNCAxOS41LTI5LjEgMTAuMi00NC4xeiJdfSxBTGU9ZEYsRExlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcmtlciIsaWNvbjpbNTEyLDUxMixbXSwiZjVhMSIsIk00MDguOCAwYy0yNy40IDAtNTMuNiAxMC45LTczIDMwLjJMMzE4LjEgNDggMzA1IDM0LjljLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMEwxMDMgMTM1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMjM3LjEgNjguOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyODQuMSA4MS45IDE4NCAxODIuMSAzMjkuOSAzMjggNDgxLjggMTc2LjJjMTkuNC0xOS40IDMwLjItNDUuNiAzMC4yLTczIDAtNTctNDYuMi0xMDMuMi0xMDMuMi0xMDMuMnpNMTAyLjQgMjYzLjdjLTQ5LjkgNDkuOS04My4zIDExNC05NS41IDE4My41TC40IDQ4My44Qy0xIDQ5MS42IDEuNSA0OTkuNCA3IDUwNXMxMy40IDggMjEuMSA2LjdsMzYuNy02LjVjNjkuNS0xMi4zIDEzMy42LTQ1LjYgMTgzLjUtOTUuNUwyOTYgMzYxLjkgMTUwLjEgMjE2IDEwMi40IDI2My43eiJdfSxFTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xpcGJvYXJkIixpY29uOlszODQsNTEyLFsxMjgyMDNdLCJmMzI4IiwiTTMyMCAzMmwtOC42IDBDMzAwLjQgMTIuOSAyNzkuNyAwIDI1NiAwTDEyOCAwQzEwNC4zIDAgODMuNiAxMi45IDcyLjYgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NHpNMTM2IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDB6Il19LFBMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFjZS1vZi13b3JzaGlwIixpY29uOls1MTIsNTEyLFtdLCJmNjdmIiwiTTE2MCA3OWwwIDgxLTQ0LjggMzMuNkMxMDMuMSAyMDIuNyA5NiAyMTYuOSA5NiAyMzJsMCA0MC02MC42IDMwLjNDMTMuNyAzMTMuMiAwIDMzNS4zIDAgMzU5LjZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgNzQuNyAwIDg1LjQgMCAzMjAgMGw2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODguNGMwLTI0LjItMTMuNy00Ni40LTM1LjQtNTcuMkw0MTYgMjcyIDQxNiAyMzJjMC0xNS4xLTcuMS0yOS4zLTE5LjItMzguNEwzNTIgMTYwIDM1MiA3OWMwLTkuNS00LjItMTguNS0xMS41LTI0LjZMMjcxLjQtMy4yYy04LjktNy40LTIxLjgtNy40LTMwLjcgMEwxNzEuNSA1NC40QzE2NC4yIDYwLjUgMTYwIDY5LjUgMTYwIDc5em05NiAyNDFjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4MC0xMjggMCAwLTgwYzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdfSxJTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FubmFiaXMiLGljb246WzUxMiw1MTIsW10sImY1NWYiLCJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjEgMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOSA3LjMgMjYuNCAxMS44IDU1LjMgMTAuMyA4NCAxMS42LTguOSAyMy43LTE2LjcgMzUuOS0yMy43IDQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjUgNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuNy05LjEgMTUuOS0xOS45IDMxLjctMzIuNSA0Ni4zIDI3LjkgNi42IDUyLjUgMTcuMiA2Ny4zIDI1LjQgNS4xIDIuOCA4LjIgOC4yIDguMiAxNHMtMy4yIDExLjItOC4yIDE0Yy0xNS4yIDguNC00MC45IDE5LjUtNjkuOCAyNi4xLTIwLjIgNC42LTQyLjkgNy4yLTY1LjIgNC42bDguMyAzMy4yYzEuNSA2LjEtLjYgMTIuNS01LjUgMTYuNHMtMTEuNiA0LjYtMTcuMiAxLjhMMjgwIDQxNy4yIDI4MCA0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03MC44LTU4LjUgMjkuMWMtNS42IDIuOC0xMi4zIDIuMS0xNy4yLTEuOHMtNy0xMC4zLTUuNS0xNi40bDguMy0zMy4yYy0yMi4yIDIuNi00NSAwLTY1LjItNC42LTI4LjktNi42LTU0LjUtMTcuNi02OS44LTI2LjEtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRsNi4yLTMuM2MxNS03LjYgMzYuOC0xNi40IDYxLjEtMjIuMi0xMi41LTE0LjUtMjMuMy0zMC40LTMyLjQtNDYuMi0yMy40LTQwLjgtMzcuMS04NC00Mi43LTExMS43LTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41IDEyLjIgNi45IDI0LjMgMTQuOCAzNS44IDIzLjctMS40LTI4LjcgMy4xLTU3LjYgMTAuMy04NCAxMi41LTQ1LjMgMzMuNC04NS41IDQ5LjItMTA5bDEuMi0xLjZDMjQ2LjkgMiAyNTEuMyAwIDI1NiAweiJdfSxOTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLXJvb2YiLGljb246WzU3Niw1MTIsW10sImU1MzciLCJNMzAyLjMtMTIuNmMtOS00LjUtMTkuNi00LjUtMjguNiAwbC0yNTYgMTI4QzEuOSAxMjMuMy00LjUgMTQyLjUgMy40IDE1OC4zczI3LjEgMjIuMiA0Mi45IDE0LjNMMjg4IDUxLjggNTI5LjcgMTcyLjZjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45bC0yNTYtMTI4ek0yODggMjcyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQ4Yy01MyAwLTk2IDQzLTk2IDk2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTUzLTQzLTk2LTk2LTk2ek0xNjAgMjU2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTExMiAzMzZjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMzMuMWMwIDE3IDEzLjggMzAuOSAzMC45IDMwLjlsODcuOCAwYy00LjMtOS44LTYuNy0yMC42LTYuNy0zMmwwLTQ4YzAtMTguNCAzLjUtMzYgOS44LTUyLjItMTIuMi03LjUtMjYuNS0xMS44LTQxLjgtMTEuOHpNNDI1LjQgNDgwbDg3LjggMGMxNyAwIDMwLjktMTMuOCAzMC45LTMwLjlsMC0zMy4xYzAtNDQuMi0zNS44LTgwLTgwLTgwLTE1LjMgMC0yOS42IDQuMy00MS44IDExLjggNi4zIDE2LjIgOS44IDMzLjggOS44IDUyLjJsMCA0OGMwIDExLjQtMi40IDIyLjItNi43IDMyeiJdfSxGTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlzZWFzZSIsaWNvbjpbNTEyLDUxMixbXSwiZjdmYSIsIk0yMzYuNSAyOS40TDIyNCA0OGMtMjAgMzAtNTMuNiA0OC04OS43IDQ4TDY4IDk2Yy0zNy41IDAtNjcuOSAzMC40LTY3LjkgNjcuOSAwIDE4IDcuMiAzNS4yIDE5LjkgNDcuOWwyNyAyN2MxMSAxMSAxNy4yIDI1LjkgMTcuMiA0MS41IDAgMTUuOC02LjQgMzAuOS0xNy43IDQyTDMzLjQgMzM1LjFjLTExLjEgMTAuOC0xNy4zIDI1LjctMTcuMyA0MS4yIDAgMzYuOCAzNC4xIDY0LjIgNzAuMSA1Ni4ybDYyLjMtMTMuOGM3LjctMS43IDE1LjctMi42IDIzLjYtMi42IDMyLjggMCA2NC4yIDE0LjYgODUuMiAzOS44bDMwLjUgMzYuNmMxMC40IDEyLjQgMjUuNyAxOS42IDQxLjkgMTkuNiAzMC4xIDAgNTQuNS0yNC40IDU0LjUtNTQuNWwwLTUxLjJjMC00MS40IDI1LjQtNzguNSA2NC05My41bDIyLjItOC42YzI1LjItOS44IDQxLjgtMzQuMSA0MS44LTYxLjEgMC0yNi40LTE1LjktNTAuMy00MC4zLTYwLjVMNDI5IDE2NC44Yy0zMy4yLTEzLjktNTcuNi00My02NS41LTc4LjFsLTcuOS0zNS4yYy02LjgtMzAuMS0zMy41LTUxLjUtNjQuMy01MS41LTIyIDAtNDIuNiAxMS01NC44IDI5LjR6TTE2MCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0scEY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1iaWJsZSIsaWNvbjpbNDQ4LDUxMixbImJpYmxlIl0sImY2NDciLCJNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiA1MTJ6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6TTE5MiA4MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTExMiA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdfSxPTGU9cEYsUkxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZXNzLWJvYXJkIixpY29uOls0NDgsNTEyLFtdLCJmNDNjIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDY0bDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NCA2NCAwIDAtNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwIDY0IDY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NC02NCAwIDAgNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMCAwLTY0LTY0IDAgMC02NCA2NCAwem02NCAxMjhsNjQgMCAwLTY0LTY0IDAgMCA2NHptMCA2NGwwLTY0LTY0IDAgMCA2NCA2NCAwem02NCAwbC02NCAwIDAgNjQgNjQgMCAwLTY0em0wIDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXX0sQkxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMiLGljb246WzUxMiw1MTIsWzk3OTRdLCJmMjIyIiwiTTMyMCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw0ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctOTUgOTVjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMzMiA0MDEuMiAzMiAzMDQgMTEwLjggMTI4IDIwOCAxMjhjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw5NS05NS01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yMDggNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXX0sSExlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxhcHRvcCIsaWNvbjpbNjQwLDUxMixbMTI4MTg3XSwiZjEwOSIsIk0xMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMjQwIDY0IDAgMC0yNDAgMzg0IDAgMCAyNDAgNjQgMCAwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJ6TTE5LjIgMzg0QzguNiAzODQgMCAzOTIuNiAwIDQwMy4yIDAgNDQ1LjYgMzQuNCA0ODAgNzYuOCA0ODBsNDg2LjQgMGM0Mi40IDAgNzYuOC0zNC40IDc2LjgtNzYuOCAwLTEwLjYtOC42LTE5LjItMTkuMi0xOS4yTDE5LjIgMzg0eiJdfSxoRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLXhtYXJrIixpY29uOls1NzYsNTEyLFsidXNlci10aW1lcyJdLCJmMjM1IiwiTTI1NC4xIDMwNGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w0Ni4xIDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwek01MzAuMyAxMDguMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOXpNMjI0LjQgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHoiXX0scUxlPWhGLFZMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbGFnLXVzYSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc0ZCIsIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMzYuMS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTIwLjMtOS00MS44LTE0LjctNjMuNi0xNi45bDAgMzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2Mi00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2MS45LTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM2wtNjMuNSAxMy42IDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDMzLjVjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgNDAwIDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwem04MCA5NmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptLTMyIDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTMyIDBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdfSxqTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1taWRkbGUtZmluZ2VyIixpY29uOls0NDgsNTEyLFsxMjg0MDVdLCJmODA2IiwiTTIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDE2NC4yYy04LjUtNy42LTE5LjctMTIuMi0zMi0xMi4yLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC01NS43Yy0yIDEuNC0zLjkgMy01LjggNC41TDU1IDI4NC44QzQwLjQgMjk3IDMyIDMxNSAzMiAzMzRMMzIgMzcyYzAgMzggMTYuOSA3NCA0Ni4xIDk4LjNsNS40IDQuNWMyOC44IDI0IDY1IDM3LjEgMTAyLjQgMzcuMUwzMDQgNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDgtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuMy0xLjktMjQuOC0yMi42LTQ0LjMtNDcuOS00NC4zLTEyLjMgMC0yMy41IDQuNi0zMiAxMi4yTDI3MiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHoiXX0sVUxlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vcnRhci1wZXN0bGUiLGljb246WzUxMiw1MTIsW10sImY1YTciLCJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwIDM5Ny4zIDE2MCA1MDIuNiA1NC42YzExLjgtMTEuOCAxMi42LTMwLjggMS42LTQzLjV6TTMyIDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmMwIDgyLjUgNDMuNCAxNDcuNyAxMjMuOSAxNzYuMi0xMS4xIDEzLjktMTkuNCAzMC4zLTIzLjkgNDguMS00LjQgMTcuMSAxMC40IDMxLjcgMjguMSAzMS43bDE5MiAwYzE3LjcgMCAzMi40LTE0LjYgMjguMS0zMS43LTQuNS0xNy44LTEyLjgtMzQuMS0yMy45LTQ4LjEgODAuNS0yOC42IDEyMy45LTkzLjcgMTIzLjktMTc2LjIgMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTkyeiJdfSxXTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZC1zaWRlLWNvdWdoIixpY29uOls1MTIsNTEyLFtdLCJlMDYxIiwiTTk2IDUxMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZsMSAwYzI2IDAgNDctMjEgNDctNDcgMC0xMS0zLjktMjEuNi0xMC45LTMwLjFMMjczLjMgMjAwQzI3MS40IDE5Ny42IDI3MC4xIDE5NC43IDI2OS43IDE5MS43IDI1NCA4My4zIDE2MC43IDAgNDggMCA0MC40IDAgMzIuOSAuNCAyNS40IDEuMSAxMC41IDIuNiAwIDE1LjkgMCAzMC45TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6bTE2LTMyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem02My4xIDIzNy4ybC00MS41LTMuNWMtMTIuMi0xLTIxLjYtMTEuMi0yMS42LTIzLjQgMC0xMC44IDcuMy0yMC4yIDE3LjgtMjIuOGw0MC40LTEwLjFjMTkuMi00LjggMzcuOCA5LjcgMzcuOCAyOS41IDAgMTcuOC0xNS4yIDMxLjgtMzIuOSAzMC4zek00ODAgMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwIDI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0xMjggMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek00ODAgNTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwLTcyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LEdMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1sb2NrIixpY29uOls2NDAsNTEyLFtdLCJlNTU4IiwiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgODIuMSA3NS4yQzQwOS43IDI0OC4xIDQwMCAyNzQuOSA0MDAgMzA0bDAgMjQuNGMtNy4zIDYuNi0xMy42IDE0LjItMTguNyAyMi43bC0zNy4zLTEyLjQgMCA5OS43IDI0IDE5LjIgMCAzOC4zYzAgMTMuNSAyLjggMjYuNCA3LjggMzguMUwyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNTYwIDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sdUY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmF0dGVyeS10aHJlZS1xdWFydGVycyIsaWNvbjpbNjQwLDUxMixbImJhdHRlcnktNCJdLCJmMjQxIiwiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDIyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0yMjQgMHoiXX0sWUxlPXVGLFpMZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmcmFuYy1zaWduIixpY29uOlszMjAsNTEyLFtdLCJlMThmIiwiTTgwIDMyQzYyLjMgMzIgNDggNDYuMyA0OCA2NGwwIDI1Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTY0IDE0NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNDQgMCAwLTk2IDE3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDMyeiJdfSxmRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWx0ZXItY2lyY2xlLWRvbGxhciIsaWNvbjpbNTc2LDUxMixbImZ1bm5lbC1kb2xsYXIiXSwiZjY2MiIsIk0zMiA2NEMxOS4xIDY0IDcuNCA3MS44IDIuNCA4My44Uy4yIDEwOS41IDkuNCAxMTguNkwxOTIgMzAxLjMgMTkyIDQxNmMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMyLjUgMi41IDUuMyA0LjUgOC4zIDYtMjEuMi0zMC45LTMzLjYtNjguMy0zMy42LTEwOC42IDAtOTkuNCA3NS41LTE4MS4xIDE3Mi4zLTE5MWw5MC40LTkwLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0ek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQxNiAzMjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDUuOCAwYy01LjYgMC0xMC4yIDQuNi0xMC4yIDEwLjIgMCA0LjkgMy41IDkuMSA4LjMgMTBsNDUgOC4yYzIwIDMuNiAzNC42IDIxLjEgMzQuNiA0MS41IDAgMjMuMy0xOC45IDQyLjItNDIuMiA0Mi4ybC01LjggMCAwIDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04LTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTMuOCAwYzUuNiAwIDEwLjItNC42IDEwLjItMTAuMiAwLTQuOS0zLjUtOS4xLTguMy0xMGwtNDUtOC4yYy0yMC0zLjYtMzQuNi0yMS4xLTM0LjYtNDEuNSAwLTIyLjYgMTcuNy00MSA0MC00Mi4xbDAtOC4xeiJdfSxYTGU9ZkYsS0xlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoZWVzZSIsaWNvbjpbNTEyLDUxMixbXSwiZjdlZiIsIk01MTIgMjQwLjJsMCAxNS44LTUxMiAwYzAtMjAgMTAtMzguNyAyNi42LTQ5LjhMMjc0LjkgNDAuN2M4LjYtNS43IDE4LjYtOC43IDI4LjktOC43IDExNSAwIDIwOC4yIDkzLjIgMjA4LjIgMjA4LjJ6bTAgNjMuOGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTEyIDUxMiAweiJdfSxtRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtaCIsaWNvbjpbNTEyLDUxMixbOTQwNSwiaG9zcGl0YWwtc3ltYm9sIl0sImY0N2UiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTk2LTM0NGwwIDE3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0LTk2IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgOTYgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LFFMZT1tRixKTGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Nob29sIixpY29uOls1NzYsNTEyLFsxMjc5NzldLCJmNTQ5IiwiTTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI3LjktMTE1LjFjMTguMy0xNi40IDQ2LTE2LjQgNjQuMiAwTDQ0OCAxMjggNTEyIDEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyek0yMjQgMzc2bDAgODggMTI4IDAgMC04OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6bS0xMTIgOGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDM4NGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNMjg4IDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXX0sZSRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpY2UtZml2ZSIsaWNvbjpbNDQ4LDUxMixbOTg2MF0sImY1MjMiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek05NiAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0LTY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHQkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b3JuYWRvIixpY29uOls0NDgsNTEyLFsxMjc3ODZdLCJmNzZmIiwiTTAgMzJMMCA0NS42QzAgNjIuNyAxLjcgNzkuNiA1IDk2bDM1Mi44IDBjMy4yLTYuOSA3LjUtMTMuMyAxMy0xOC44bDM4LjYtMzguNmM0LjItNC4yIDYuNi0xMCA2LjYtMTYgMC0xMi41LTEwLjEtMjIuNi0yMi42LTIyLjZMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJ6TTM1NS43IDE0NGwtMzM2IDBjMTIuNCAyOS43IDMwLjIgNTYuOCA1Mi43IDgwbDMzOS42IDAtNDcuMi02Mi45Yy0zLjktNS4yLTctMTEtOS4yLTE3LjF6TTI0Mi42IDMzNC43YzguMiA0LjggMTUuOCAxMC43IDIyLjUgMTcuM0w0NDUgMzUyYzItOS44IDMtMTkuOSAzLTMwLjEgMC0xNy4xLTIuOS0zNC04LjYtNDkuOUwxMzYgMjcyIDI0Mi42IDMzNC43ek0yOTQuMyA0MDBjNS4zIDE3IDYuNSAzNS4yIDMuNiA1M2wtNS45IDM1LjdjLTIgMTIuMiA3LjQgMjMuNCAxOS44IDIzLjQgNS4zIDAgMTAuNC0yLjEgMTQuMi01LjlsNzguMi03OC4yYzguNS04LjUgMTUuOC0xNy44IDIxLjktMjcuOWwtMTMxLjggMHoiXX0sZ0Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiamV0LWZpZ2h0ZXIiLGljb246WzU3Niw1MTIsWyJmaWdodGVyLWpldCJdLCJmMGZiIiwiTTQ5Ni4yIDIwNi44Yy0xMC43LTQuNS0yMi4yLTYuOC0zMy44LTYuOEwzNjIgMjAwIDI0OCA0OCAyOTYgNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgMCAyOTYgMEwxNTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4IDAgMCAxNTItNTQuNCAwLTUyLjgtNjZjLTMtMy44LTcuNi02LTEyLjUtNkwxNiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDg4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA4OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQuMyAwYzQuOSAwIDkuNS0yLjIgMTIuNS02bDUyLjgtNjYgNTQuNCAwIDAgMTUyLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAxMTQtMTUyIDEwMC40IDBjMTEuNiAwIDIzLjEtMi4zIDMzLjgtNi44bDY1LTI3LjFjOC45LTMuNyAxNC44LTEyLjUgMTQuOC0yMi4ycy01LjgtMTguNC0xNC44LTIyLjJsLTY1LTI3LjF6Il19LGEkZT1nRixpJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGh1bWJzLWRvd24iLGljb246WzUxMiw1MTIsWzEyODA3OCw2MTU3Nl0sImYxNjUiLCJNMzg0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNi4zLTEuMyAxMi4yLTMuNCAxNy43IDIwLjQgNS41IDM1LjQgMjQuMSAzNS40IDQ2LjMgMCA5LjEtMi42IDE3LjYtNyAyNC45IDIyLjIgNC4yIDM5IDIzLjcgMzkgNDcuMSAwIDE5LjctMTEuOSAzNi42LTI4LjkgNDQgMTcgNy40IDI4LjkgMjQuMyAyOC45IDQ0IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMCAyOC4yIDcwLjRjMi41IDYuMyAzLjggMTMuMSAzLjggMTkuOWwwIDQuMmMwIDI3LjMtMjIuMSA0OS40LTQ5LjQgNDkuNC0xOC43IDAtMzUuOC0xMC42LTQ0LjItMjcuM0wxNzAuMSAzNTYuM2MtNi43LTEzLjMtMTAuMS0yOC0xMC4xLTQyLjlsMC0xODYuNmMwLTE5LjQgOC45LTM3LjggMjQtNTBsMTIuMi05LjdDMjI0LjYgNDQuNCAyNTkuOCAzMiAyOTYuMSAzMkwzODQgMzJ6TTgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0OCAweiJdfSxyJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJvb20iLGljb246WzU3Niw1MTIsWzEyOTUyOV0sImY1MWEiLCJNNTY2LjYgNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTkyIDE5Mi0zNC43LTM0LjdjLTQuMi00LjItMTAtNi42LTE2LTYuNi0xMi41IDAtMjIuNiAxMC4xLTIyLjYgMjIuNmwwIDI5LjEgMTA4LjMgMTA4LjMgMjkuMSAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42IDAtNi0yLjQtMTEuOC02LjYtMTZsLTM0LjctMzQuNyAxOTItMTkyek0zNDEuMSAzNTMuNEwyMjIuNiAyMzQuOWMtNDIuNy0zLjctODUuMiAxMS43LTExNS44IDQyLjNsLTggOGMtMjIuMyAyMi4zLTM0LjggNTIuNS0zNC44IDg0IDAgNi44IDcuMSAxMS4yIDEzLjIgOC4ybDUxLjEtMjUuNWM1LTIuNSA5LjUgNC4xIDUuNCA3LjlMNy4zIDQ3My40QzIuNyA0NzcuNiAwIDQ4My42IDAgNDg5LjkgMCA1MDIuMSA5LjkgNTEyIDIyLjEgNTEybDE3My4zIDBjMzguOCAwIDc1LjktMTUuNCAxMDMuNC00Mi44IDMwLjYtMzAuNiA0NS45LTczLjEgNDIuMy0xMTUuOHoiXX0sYkY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1pbXBvcnQiLGljb246WzM4NCw1MTIsWyJhcnJvdy1yaWdodC10by1maWxlIl0sImY1NmYiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTgyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xODIuMSAwIDAgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXX0scyRlPWJGLHZGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InV0ZW5zaWxzIixpY29uOls1MTIsNTEyLFsxMjc4NjAsNjE2ODUsImN1dGxlcnkiXSwiZjJlNyIsIk02My45IDE0LjRDNjMuMSA2LjIgNTYuMiAwIDQ4IDBzLTE1LjEgNi4yLTE2IDE0LjNMMTcuOSAxNDkuN2MtMS4zIDYtMS45IDEyLjEtMS45IDE4LjIgMCA0NS45IDM1LjEgODMuNiA4MCA4Ny43TDk2IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0LjRjNDQuOS00LjEgODAtNDEuOCA4MC04Ny43IDAtNi4xLS42LTEyLjItMS45LTE4LjJMMjIzLjkgMTQuM0MyMjMuMSA2LjIgMjE2LjIgMCAyMDggMHMtMTUuMSA2LjItMTUuOSAxNC40TDE3OC41IDE0OS45Yy0uNiA1LjctNS40IDEwLjEtMTEuMSAxMC4xLTUuOCAwLTEwLjYtNC40LTExLjItMTAuMkwxNDMuOSAxNC42QzE0My4yIDYuMyAxMzYuMyAwIDEyOCAwcy0xNS4yIDYuMy0xNS45IDE0LjZMOTkuOCAxNDkuOGMtLjUgNS44LTUuNCAxMC4yLTExLjIgMTAuMi01LjggMC0xMC42LTQuNC0xMS4xLTEwLjFMNjMuOSAxNC40ek00NDggMEM0MzIgMCAzMjAgMzIgMzIwIDE3NmwwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00NDhjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LG4kZT12RixvJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaWQtYmFkZ2UiLGljb246WzM4NCw1MTIsW10sImYyYzEiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHptOTYgMzUybDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNTIgNjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sbCRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNwaWRlciIsaWNvbjpbNTEyLDUxMixbMTI4Mzc1XSwiZjcxNyIsIk0zNjkuMy0zMWMxMS45LTMuNSAyNC40IDIuNyAyOSAxMy45bC44IDIuMyA0MCAxMzZjMi41IDguNCAuMSAxNy41LTYuMSAyMy43bC02NC4xIDY0LjEgNzYuNC0yMC44IDE5LjktNTkuOCAuOS0yLjNjNS0xMS4xIDE3LjctMTYuOCAyOS41LTEyLjkgMTEuOCAzLjkgMTguNSAxNi4xIDE1LjggMjhsLS43IDIuNC0yNCA3MmMtMi41IDcuNi04LjcgMTMuNC0xNi41IDE1LjZsLTkxLjEgMjQuOCA5MS4xIDI0LjhjNy43IDIuMSAxMy45IDggMTYuNSAxNS42bDI0IDcyIC43IDIuNGMyLjcgMTEuOS00LjEgMjQuMS0xNS44IDI4LTExLjggMy45LTI0LjUtMS44LTI5LjUtMTIuOWwtLjktMi4zLTE5LjktNTkuOC03Ni40LTIwLjggNjQuMSA2NC4xYzYuMSA2LjEgOC41IDE1LjEgNi4yIDIzLjRsLTQwIDE0NC0uOCAyLjNjLTQuNCAxMS4zLTE2LjggMTcuNy0yOC44IDE0LjQtMTItMy4zLTE5LjMtMTUuMi0xNy4yLTI3LjJsLjUtMi40IDM2LjItMTMwLjUtMzcuMi0zNy4yQzM1MSA0MDYgMzA4LjQgNDQ4IDI1NiA0NDhzLTk1LTQyLTk2LTk0LjFsLTM3IDM3IDM2IDEyMi4zIC42IDIuNGMyLjIgMTEuOS00LjkgMjMuOS0xNi44IDI3LjQtMTEuOSAzLjUtMjQuNC0yLjctMjktMTMuOWwtLjgtMi4zLTQwLTEzNmMtMi41LTguNC0uMS0xNy41IDYuMS0yMy44bDY0LjEtNjQuMS03Ni40IDIwLjgtMTkuOSA1OS44LS45IDIuM2MtNSAxMS4xLTE3LjcgMTYuOC0yOS41IDEyLjlzLTE4LjUtMTYuMS0xNS44LTI4bC43LTIuNCAyNC03MmMyLjUtNy42IDguNy0xMy40IDE2LjUtMTUuNmw5MS4xLTI0LjgtOTEuMS0yNC44Yy03LjctMi4xLTEzLjktOC0xNi41LTE1LjZsLTI0LTcyLS43LTIuNGMtMi43LTExLjkgNC4xLTI0LjEgMTUuOC0yOHMyNC41IDEuOCAyOS41IDEyLjlsLjkgMi4zIDE5LjkgNTkuOCA3Ni40IDIwLjgtNjQuMS02NC4xYy02LjItNi4yLTguNS0xNS4zLTYuMS0yMy43bDQwLTEzNiAuOC0yLjNjNC42LTExLjMgMTcuMS0xNy40IDI5LTEzLjkgMTEuOSAzLjUgMTkgMTUuNSAxNi44IDI3LjRsLS42IDIuNC0zNiAxMjIuMyA1MyA1M2MxLTQzLjMgMzYuNC03OC4xIDc5LjktNzguMXM3OC45IDM0LjggNzkuOSA3OC4ybDUzLjEtNTMuMS0zNi0xMjIuMy0uNi0yLjRjLTIuMi0xMiA0LjktMjMuOSAxNi44LTI3LjR6Il19LGMkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb2JpbGUtcmV0cm8iLGljb246WzM4NCw1MTIsW10sImU1MjciLCJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em04MCA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOCAxOTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0em02NC03MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHpNMTY4IDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il19LHlGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNpZ25zLXBvc3QiLGljb246WzUxMiw1MTIsWyJtYXAtc2lnbnMiXSwiZjI3NyIsIk0yNTYuNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwIDAgNjQtMTUzLjQgMGMtNC4yIDAtOC4zIDEuNy0xMS4zIDQuN2wtNDggNDhjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQ4IDQ4YzMgMyA3LjEgNC43IDExLjMgNC43bDE1My40IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC02NCAxNTMuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsNDgtNDhjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4Yy0zLTMtNy4xLTQuNy0xMS4zLTQuN2wtMTUzLjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdfSxkJGU9eUYscCRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imdyb3VwLWFycm93cy1yb3RhdGUiLGljb246WzUxMiw1MTIsW10sImU0ZjYiLCJNMzcuNiAxMjIuM2MtMTEuNSAxOC43LTIwLjYgMzktMjcgNjAuNS01IDE2LjkgNC42IDM0LjggMjEuNSAzOS44czM0LjgtNC42IDM5LjgtMjEuNWMxOC40LTYxLjkgNjcuMy0xMTAuOCAxMjkuMi0xMjkuMiAxNi45LTUgMjYuNi0yMi45IDIxLjUtMzkuOFMxOTkuOCA1LjYgMTgyLjkgMTAuNkMxNjEuNCAxNyAxNDEuMSAyNi4xIDEyMi4zIDM3LjYgMTEyLjMgMTUuNCA4OS45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjQgMCA4OS45IDE1LjQgMTEyLjMgMzcuNiAxMjIuM3ptNDM2LjcgMGMyMi4yLTEwIDM3LjYtMzIuNCAzNy42LTU4LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjUuOSAwLTQ4LjMgMTUuNC01OC4zIDM3LjYtMTguNy0xMS41LTM5LTIwLjYtNjAuNS0yNy0xNi45LTUtMzQuOCA0LjYtMzkuOCAyMS41czQuNiAzNC44IDIxLjUgMzkuOGM2MS45IDE4LjQgMTEwLjggNjcuMyAxMjkuMiAxMjkuMiA1IDE2LjkgMjIuOSAyNi42IDM5LjggMjEuNXMyNi42LTIyLjkgMjEuNS0zOS44Yy02LjQtMjEuNS0xNS41LTQxLjgtMjctNjAuNXpNNTEyIDQ0OGMwLTI1LjktMTUuNC00OC4zLTM3LjYtNTguMyAxMS41LTE4LjcgMjAuNi0zOSAyNy02MC41IDUtMTYuOS00LjYtMzQuOC0yMS41LTM5LjhzLTM0LjggNC42LTM5LjggMjEuNWMtMTguNCA2MS45LTY3LjMgMTEwLjgtMTI5LjIgMTI5LjItMTYuOSA1LTI2LjYgMjIuOS0yMS41IDM5LjhzMjIuOSAyNi42IDM5LjggMjEuNWMyMS41LTYuNCA0MS44LTE1LjUgNjAuNS0yNyAxMCAyMi4yIDMyLjQgMzcuNiA1OC4zIDM3LjYgMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTM3LjYgMzg5LjdjLTIyLjIgMTAtMzcuNiAzMi40LTM3LjYgNTguMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNS45IDAgNDguMy0xNS40IDU4LjMtMzcuNiAxOC43IDExLjUgMzkgMjAuNiA2MC41IDI3IDE2LjkgNSAzNC44LTQuNiAzOS44LTIxLjVzLTQuNi0zNC44LTIxLjUtMzkuOGMtNjEuOS0xOC40LTExMC44LTY3LjMtMTI5LjItMTI5LjItNS0xNi45LTIyLjktMjYuNi0zOS44LTIxLjVTNS42IDMxMi4yIDEwLjYgMzI5LjFjNi40IDIxLjUgMTUuNSA0MS44IDI3IDYwLjV6TTI1NiAxOTJjMTUuNiAwIDMwIDUuNiA0MS4xIDE0LjlsLTE1LjMgMTUuM2MtNi42IDYuNi0xLjkgMTcuOCA3LjQgMTcuOGw2MC41IDBjNS43IDAgMTAuNC00LjcgMTAuNC0xMC40bDAtNjAuNWMwLTkuMy0xMS4yLTEzLjktMTcuOC03LjRsLTExLjIgMTEuMmMtMTkuOC0xNy45LTQ2LjItMjguOS03NS4xLTI4LjktNDMuNiAwLTgxLjMgMjQuOS05OS44IDYxLjEtNiAxMS44LTEuNCAyNi4zIDEwLjQgMzIuM3MyNi4zIDEuNCAzMi4zLTEwLjRjMTAuNi0yMC44IDMyLjItMzQuOSA1Ny0zNC45em01OC42IDkzLjFjLTEwLjYgMjAuOC0zMi4yIDM0LjktNTcgMzQuOS0xNS43IDAtMzAtNS42LTQxLjEtMTQuOWwxNS4zLTE1LjNjNi42LTYuNiAxLjktMTcuOC03LjQtMTcuOEwxNjQgMjcyYy01LjcgMC0xMC40IDQuNy0xMC40IDEwLjRsMCA2MC41YzAgOS4zIDExLjIgMTMuOSAxNy44IDcuNGwxMS4yLTExLjJjMTkuOCAxNy45IDQ2LjIgMjguOSA3NS4xIDI4LjkgNDMuNiAwIDgxLjMtMjQuOSA5OS44LTYxLjEgNi0xMS44IDEuNC0yNi4zLTEwLjQtMzIuM3MtMjYuMy0xLjQtMzIuMyAxMC40eiJdfSxoJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXNwbGl0LXVwLWFuZC1sZWZ0IixpY29uOls1MTIsNTEyLFtdLCJlNGJjIiwiTTM0Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw0MS40LTQxLjQgMCAxOTUuOWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xbC0xMTQuNyAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMzIwIDIyNCAzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il19LHUkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxsLWRyaXAiLGljb246WzU3Niw1MTIsW10sImY1NzYiLCJNMzA5LjcgNzEuNmwtNjQuNCA2NC40IDMzLjQgMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzMuNC0zMy40LTk2LjQgOTYuNGMtMi45IDIuOS01LjEgNi41LTYuMyAxMC4zbDMyMS41IDAgNTMuNy01My43YzQuOS00LjkgNy42LTExLjUgNy42LTE4LjNzLTIuNy0xMy41LTcuNi0xOC4zTDM0Ni4zIDcxLjZDMzQxLjUgNjYuNyAzMzQuOSA2NCAzMjggNjRzLTEzLjUgMi43LTE4LjMgNy42ek01OC4zIDIzMi40bDk2LjQtOTYuNC00OS40LTQ5LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjAwIDkwLjcgMjY0LjQgMjYuM0MyODEuMyA5LjUgMzA0LjEgMCAzMjggMHM0Ni43IDkuNSA2My42IDI2LjNMNTE3LjcgMTUyLjRDNTM0LjUgMTY5LjMgNTQ0IDE5Mi4xIDU0NCAyMTZzLTkuNSA0Ni43LTI2LjMgNjMuNkwzMTEuNiA0ODUuN0MyOTQuNyA1MDIuNSAyNzEuOSA1MTIgMjQ4IDUxMnMtNDYuNy05LjUtNjMuNi0yNi4zTDU4LjMgMzU5LjZDNDEuNSAzNDIuNyAzMiAzMTkuOSAzMiAyOTZzOS41LTQ2LjcgMjYuMy02My42ek01MTIgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI1LjIgMzIuNi03OS42IDUxLjItMTA4LjcgNi05LjQgMTkuNS05LjQgMjUuNSAwIDE4LjcgMjkuMSA1MS4yIDgzLjUgNTEuMiAxMDguNyAwIDM1LjMtMjguNyA2NC02NCA2NHoiXX0sZiRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoaWVsZC1oZWFydCIsaWNvbjpbNTEyLDUxMixbXSwiZTU3NCIsIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMjQ5LjYgMTgzLjVsNi40IDguNSA2LjQtOC41YzExLjEtMTQuOCAyOC41LTIzLjUgNDYuOS0yMy41IDMyLjQgMCA1OC43IDI2LjMgNTguNyA1OC43bDAgNS4zYzAgNDkuMS02NS44IDk4LjEtOTYuNSAxMTguMy05LjUgNi4yLTIxLjUgNi4yLTMwLjkgMC0zMC43LTIwLjItOTYuNS02OS4zLTk2LjUtMTE4LjNsMC01LjNjMC0zMi40IDI2LjMtNTguNyA1OC43LTU4LjcgMTguNSAwIDM1LjkgOC43IDQ2LjkgMjMuNXoiXX0seEY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXNraWluZy1ub3JkaWMiLGljb246WzU3Niw1MTIsWyJza2lpbmctbm9yZGljIl0sImY3Y2EiLCJNNDI0LjggMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTk5LjggMTkzLjdjNy42IDE1LjIgMS45IDMzLjYtMTIuNiA0MmwwIDE4MC4zLTMyIDAgMC0xNjQuMi0xMC4xIDVjLTI3LjQgMTMuNy02MC43IDYuMS03OS40LTE4LjJsLTE5LjYtMjUuNS0zOS41IDY4LjggMjQuOCAxMi40YzI5LjUgMTQuNyA0Mi45IDQ5LjUgMzEuMSA4MC4ybC0yOC4yIDczLjQgMTQ5LjQgMGM3LjkgMCAxNS42LTIuMyAyMi4yLTYuN2w3LjktNS4zYzExLTcuNCAyNS45LTQuNCAzMy4zIDYuN3M0LjQgMjUuOS02LjcgMzMuM2wtNy45IDUuM0M1NDMgNTA2LjkgNTI2IDUxMiA1MDguNiA1MTJsLTE4OS4xIDBjLS41IDAtMSAwLTEuNSAwTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4OCAwYzAtOC4yIDMuMS0xNi40IDkuNC0yMi42bDc0LjEtNzQuMSAxMC4yLTM1LjljMTEuMyAxOC4zIDI3LjcgMzMuOCA0OC40IDQ0LjJsNC44IDIuNC0xLjkgNi44Yy0zIDEwLjUtOC42IDIwLTE2LjMgMjcuN2wtNTEuNSA1MS41IDEwMS4zIDAgMzcuMS05Ni40LTU1LjYtMjcuOEMyMzAuNCAzMTkgMjE1LjMgMjY3IDIzOS4zIDIyNy4xbDM3LjctNjIuNy0yNy43LTcuN2MtOS0yLjUtMTguMSAzLjItMjAgMTIuM2wtNS45IDI5LjNjLTMuMSAxNS42LTE3LjEgMjYuMy0zMi41IDI1LjdsLTEzMCAyMDgtMzcuNyAwIDE0MC42LTIyNWMtMy40LTYuMy00LjYtMTMuOC0zLjEtMjEuM2w1LjktMjkuM2M5LjEtNDUuNiA1NS4xLTczLjggOTkuOS02MS40bDMyLjUgOWM0Ni43IDEzIDg4IDQwLjggMTE3LjYgNzkuM2wyNC45IDMyLjMgNDAuNC0yMC4yYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6Il19LG0kZT14Rix3Rj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtY2hlY2siLGljb246WzQ0OCw1MTIsWzk3NDUsOTk4OSw2MTUxMCwiY2hlY2stc3F1YXJlIl0sImYxNGEiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzQyIDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMTUuMiAxMzcgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXX0sZyRlPXdGLE1GPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhdGgiLGljb246WzUxMiw1MTIsWzEyODcwNSwiYmF0aHR1YiJdLCJmMmNkIiwiTTk2IDc3LjNjMC03LjMgNS45LTEzLjMgMTMuMy0xMy4zIDMuNSAwIDYuOSAxLjQgOS40IDMuOWwxNC45IDE0LjljLTMuNiA5LjEtNS41IDE4LjktNS41IDI5LjIgMCAxOS45IDcuMiAzOCAxOS4yIDUyLTUuMyA5LjItNCAyMS4xIDMuOCAyOSA5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwyODkgODljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjktNy44LTcuOS0xOS44LTkuMS0yOS0zLjgtMTQtMTItMzIuMS0xOS4yLTUyLTE5LjItMTAuMyAwLTIwLjIgMi0yOS4yIDUuNUwxNjMuOSAyMi42QzE0OS40IDguMSAxMjkuNyAwIDEwOS4zIDAgNjYuNiAwIDMyIDM0LjYgMzIgNzcuM0wzMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA0OGMwIDI4LjQgMTIuNCA1NCAzMiA3MS42TDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYgMjU2IDAgMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDAuNGMxOS42LTE3LjYgMzItNDMuMSAzMi03MS42bDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMjU2IDk2IDc3LjN6Il19LGIkZT1NRix2JGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlc3MtYmlzaG9wIixpY29uOlszMjAsNTEyLFs5ODIxXSwiZjQzYSIsIk02NCAzODRMNDguMyAzNjguM0MxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMDYuNyA2NCA5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJTNzguMyAwIDk2IDBMMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjcgMCA0Ny42IDU3LjEtODUuOSA4NS45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODIuMy04Mi4zYzE4LjcgMjcuMyAyOC43IDU5LjcgMjguNyA5MyAwIDQzLjctMTcuNCA4NS43LTQ4LjMgMTE2LjZMMjU2IDM4NCAzMTIuMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUwzNS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMNjQgMzg0eiJdfSx6Rj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmVzY3JpcHRpb24tYm90dGxlLW1lZGljYWwiLGljb246WzM4NCw1MTIsWyJwcmVzY3JpcHRpb24tYm90dGxlLWFsdCJdLCJmNDg2IiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NEwwIDMyek0zMiAxNDRsMzIwIDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHpNMTYwIDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0seSRlPXpGLGtGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRyYXctcG9seWdvbiIsaWNvbjpbNTEyLDUxMixbNTgwNTUsInZlY3Rvci1wb2x5Z29uIl0sImY1ZWUiLCJNNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMjczLjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMzQtMjYuNSA2MS44LTYwIDYzLjlsLTIuMSAyLjktNzEuNSA5OS4xYzMuNiA4IDUuNiAxNi45IDUuNiAyNi4ycy0yIDE4LjItNS42IDI2LjJsMi4yIDMuMSA2OS4zIDk2IDIuMSAyLjljMzMuNSAyLjEgNjAgMjkuOSA2MCA2My45IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjczLjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNzMuMUMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMHpNMzk0LjIgNDEzLjRsLTY1LjUtOTAuNi0yLjItMy4xYy0yLjEgLjItNC4zIC4zLTYuNSAuMy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzIuMiAwIDQuNCAuMSA2LjUgLjNsNjcuNy05My43Yy0uNi0uOS0xLjEtMS43LTEuNi0yLjZMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyNzMuMSAwYy41LS45IDEuMS0xLjggMS42LTIuNnoiXX0seCRlPWtGLHckZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpLWN1cnNvciIsaWNvbjpbMjU2LDUxMixbXSwiZjI0NiIsIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM2wwIDk1LjctMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgOTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43UzE3IDUxMy40IDM0LjcgNTExLjlsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45IDIxLjIgMjQgNTEuMiA0MCA4NS40IDQyLjlsOCAuN2MxNy42IDEuNSAzMy4xLTExLjYgMzQuNS0yOS4ycy0xMS42LTMzLjEtMjkuMi0zNC41bC04LS43QzE4NS41IDQ0NC43IDE2MCA0MTcgMTYwIDM4My43bDAtOTUuNyAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtOTUuN2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdjLTM0LjEgMi44LTY0LjIgMTguOS04NS40IDQyLjktMjEuMi0yNC01MS4yLTQwLTg1LjQtNDIuOWwtOC0uN0MxNy0xLjQgMS42IDExLjcgLjEgMjkuM3oiXX0sTSRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1wbHVzIixpY29uOls1NzYsNTEyLFtdLCJlNTAwIiwiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6Il19LHokZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGllbGQtZG9nIixpY29uOls1MTIsNTEyLFtdLCJlNTczIiwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAuOSAyODYuMmM0LjggMS4yIDkuOSAxLjggMTUuMSAxLjggMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NCA0NC4yIDBjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w3LjIgMTQuMyA2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgNDQuMi0zNS44IDgwLTgwIDgwbC00OCAwIDAgNTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjMtMS44IDAtMy42LS40LTUuMi0xLjFsLTk4LjctNDIuM2MtNi42LTIuOC0xMC44LTkuMy0xMC44LTE2LjQgMC0yLjggLjYtNS41IDEuOS04bDE1LTMwek0xNjAgMTYwbDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il19LGskZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmVhdGVyLXRoYW4tZXF1YWwiLGljb246WzQ0OCw1MTIsW10sImY1MzIiLCJNMjEuOSA5NC40QzUuMSA4OC44LTMuOSA3MC42IDEuNyA1My45UzI1LjQgMjguMSA0Mi4xIDMzLjZsMzg0IDEyOEM0MzkuMiAxNjYgNDQ4IDE3OC4yIDQ0OCAxOTJzLTguOCAyNi0yMS45IDMwLjRsLTM4NCAxMjhjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVMMzE0LjggMTkyIDIxLjkgOTQuNHpNNDE2IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDB6Il19LFMkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZS1vcGVuIixpY29uOls1MTIsNTEyLFs2MjEzNV0sImYyYjYiLCJNNjQuNCAxNzUuOEwyNTYgMzMuOSA0NDcuNiAxNzUuOCAyODkuNSAyOTNjLTkuNyA3LjItMjEuNCAxMS0zMy41IDExcy0yMy44LTMuOS0zMy41LTExTDY0LjQgMTc1Ljh6TTI1Ni0zMmMtMTIuMSAwLTIzLjggMy45LTMzLjUgMTFMMjUuOSAxMjQuN0M5LjYgMTM2LjggMCAxNTUuOCAwIDE3Ni4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjM5LjljMC0yMC4zLTkuNi0zOS40LTI1LjktNTEuNEwyODkuNS0yMWMtOS43LTcuMi0yMS40LTExLTMzLjUtMTF6Il19LEMkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb3VuZCIsaWNvbjpbNTEyLDUxMixbXSwiZTUyZCIsIk0xMTIuNCAxNzkuMkMxNDIgMTI3LjcgMTk2LjggOTYgMjU2LjIgOTZzMTE0LjIgMzEuNyAxNDMuOSA4My4yTDUwOC43IDM2OGMxMi4zIDIxLjMtMy4xIDQ4LTI3LjcgNDhMMzEuNSA0MTZjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTEyLjQgMTc5LjJ6Il19LF8kZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2b2ljZW1haWwiLGljb246WzY0MCw1MTIsW10sImY4OTciLCJNMTQ0IDE2MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMjYzLjggMzIwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MCAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwIDY0LjUgMzg0IDE0NCAzODRsMzUyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTNTc1LjUgOTYgNDk2IDk2IDM1MiAxNjAuNSAzNTIgMjQwYzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwbC0xMTIuNSAwek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYweiJdfSxUJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmVzdCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA4NSIsIk0yMDAgNDY0bDAtMTcwLjFjMC0zLjktLjUtNy44LTEuNC0xMS42TDE0NC40IDY1LjRDMTYyLjEgNzcuMiAxODguMiA4OCAyMjQgODhzNjEuOS0xMC44IDc5LjYtMjIuNkwyNDkuNCAyODIuM2MtMSAzLjgtMS40IDcuNy0xLjQgMTEuNkwyNDggNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkzLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNkwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuNSAwYy0uMyAwLS42IDAtMSAwLS42IDAtMS4yIDAtMS44IDAtMTguOCAwLTM0LjEgOS43LTQ0LjEgMTguOC05LjMgOC40LTI4LjUgMjEuMi02MS43IDIxLjJzLTUyLjQtMTIuOC02MS43LTIxLjJjLTEwLTkuMS0yNS4zLTE4LjgtNDQuMS0xOC44LS42IDAtMS4yIDAtMS44IDAtLjMgMC0uNiAwLTEgMEwxMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OGwwIDk3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTA0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6Il19LEwkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhdWRpby1kZXNjcmlwdGlvbiIsaWNvbjpbNTEyLDUxMixbXSwiZjI5ZSIsIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA5NmwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgNDggMCAwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0em00OCAzMmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyLTQ4IDB6bTE1Mi05NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTQ4YzAtMzkuOC0zMi4yLTcyLTcyLTcybC00OCAwem00OCAxNDRsLTI0IDAgMC05NiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6Il19LCQkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3IixpY29uOls1NzYsNTEyLFsxMTldLCI1NyIsIk0yMC44IDM0YzE2LjUtNi4yIDM1IDIuMiA0MS4yIDE4LjdMMTcyLjIgMzQ2LjcgMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzTDQwMy44IDM0Ni43IDUxNCA1Mi44YzYuMi0xNi41IDI0LjYtMjQuOSA0MS4yLTE4LjdTNTgwLjIgNTguNyA1NzQgNzUuMmwtMTQ0IDM4NGMtNC44IDEyLjktMTcuNCAyMS4zLTMxLjIgMjAuN3MtMjUuNy05LjgtMjkuNS0yM0wyODggMTc4LjMgMjA2LjcgNDU3Yy0zLjkgMTMuMi0xNS44IDIyLjUtMjkuNSAyM3MtMjYuMy03LjgtMzEuMi0yMC43TDIgNzUuMkMtNC4yIDU4LjcgNC4yIDQwLjIgMjAuOCAzNHoiXX0sdW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXllLWRyb3BwZXIiLGljb246WzUxMiw1MTIsWyJleWUtZHJvcHBlci1lbXB0eSIsImV5ZWRyb3BwZXIiXSwiZjFmYiIsIk0zNDEuNiAyOS4ybC0xMDEuNiAxMDEuNi05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTAxLjYtMTAxLjZjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNmwwIDQyLjQtMjYuNiAzOS45Yy04LjUgMTIuNy02LjggMjkuNiA0IDQwLjRzMjcuNyAxMi41IDQwLjQgNGwzOS45LTI2LjYgNDIuNCAwYzIxLjIgMCA0MS42LTguNCA1Ni42LTIzLjRsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN2wtMzYuMSAwIDAtMzYuMWMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDEwOS40LTEwOS40LTQ1LjMtNDUuMy0xMDkuNCAxMDkuNHoiXX0sQSRlPXVtLEQkZT11bSxibD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUteG1hcmsiLGljb246WzUxMiw1MTIsWzYxNTMyLCJ0aW1lcy1jaXJjbGUiLCJ4bWFyay1jaXJjbGUiXSwiZjA1NyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sRSRlPWJsLFAkZT1ibCxJJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaWxlciIsaWNvbjpbNjQwLDUxMixbXSwiZTA0MSIsIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2em00MDggMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMzZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTc2LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0yNjQgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6Il19LGZtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR1cmtpc2gtbGlyYS1zaWduIixpY29uOls0NDgsNTEyLFsidHJ5IiwidHVya2lzaC1saXJhIl0sImUyYmIiLCJNMTYwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDMuNiAxMjEuNC0zNC43YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTEzNC42IDM4LjUgMCA0Ni4xIDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDE2Mi41IDcyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYuMi0yNS40IDcuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDM4LjYtMTEgMC00Ni4xLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTYxLjljMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LE4kZT1mbSxGJGU9Zm0sTyRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbGNhbm8iLGljb246WzUxMiw1MTIsWzEyNzc1NV0sImY3NzAiLCJNMTYwIDE0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxNS43IDAgMzAgNS42IDQxLjIgMTUgMTEuMi0xOC42IDMxLjYtMzEgNTQuOC0zMXM0My42IDEyLjQgNTQuOCAzMWMxMS4xLTkuNCAyNS41LTE1IDQxLjItMTUgMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTE0LjcgMC0yOC4zLTUtMzkuMS0xMy4zbC0zMiA0OEMyNzUuMyAxODcgMjY2IDE5MiAyNTYgMTkycy0xOS4zLTUtMjQuOS0xMy4zbC0zMi00OEMxODguMyAxMzkgMTc0LjcgMTQ0IDE2MCAxNDR6TTE0NCAzNTJsNDguNC0yNC4yYzEwLjItNS4xIDIxLjYtNy44IDMzLTcuOCAxOS42IDAgMzguNCA3LjggNTIuMiAyMS42bDMyLjUgMzIuNWM2LjMgNi4zIDE0LjkgOS45IDIzLjggOS45IDExLjMgMCAyMS44LTUuNiAyOC0xNWw5LjctMTQuNi01OS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xbC00MS44IDBjLTEzLjcgMC0yNi44IDUuOS0zNS45IDE2LjFsLTU5LjkgNjcuNCA0LjctMy41em0xOS40LTk1LjhjMTguMi0yMC41IDQ0LjMtMzIuMiA3MS44LTMyLjJsNDEuOCAwYzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjcgMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJMNTIuMiA1MTJDMjMuNCA1MTIgMCA0ODguNiAwIDQ1OS44IDAgNDQ3LjEgNC43IDQzNC43IDEzLjIgNDI1LjJsMTUwLjItMTY5eiJdfSxSJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2FuZC1zcGFya2xlcyIsaWNvbjpbNTEyLDUxMixbXSwiZjcyYiIsIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43bDAgMjEuNGMwIDguOC03LjIgMTYtMTYgMTZsLTE1LjggMGMtNC42IDAtOC45IDEuOS0xMS45IDUuM0wxMDAuNyA1MDAuOWMtNi4zIDcuMS0xNS4zIDExLjEtMjQuOCAxMS4xLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN2MtNi4yLTYuMi05LjctMTQuNy05LjctMjMuNSAwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOWwwLTI3LjZjMC04LjggNy4yLTE2IDE2LTE2bDM0LjYgMGMzLjkgMCA3LjctMS41IDEwLjctNC4xTDQ2NCA2LjF6TTQzMiAyODhjMy42IDAgNi43IDIuNCA3LjcgNS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44bC0xNC44LTUxLjctNTEuNy0xNC44Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44ek04Ny43IDY5LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhMNTcuNSAxNjYuNSA1LjggMTUxLjdjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01LjhzNi43IDIuNCA3LjcgNS44ek0yMDggMGMzLjcgMCA2LjkgMi41IDcuOCA2LjFsNi44IDI3LjMgMjcuMyA2LjhjMy42IC45IDYuMSA0LjEgNi4xIDcuOHMtMi41IDYuOS02LjEgNy44bC0yNy4zIDYuOC02LjggMjcuM2MtLjkgMy42LTQuMSA2LjEtNy44IDYuMXMtNi45LTIuNS03LjgtNi4xbC02LjgtMjcuMy0yNy4zLTYuOGMtMy42LS45LTYuMS00LjEtNi4xLTcuOHMyLjUtNi45IDYuMS03LjhsMjcuMy02LjggNi44LTI3LjNjLjktMy42IDQuMS02LjEgNy44LTYuMXoiXX0sQiRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvcGhvbmUiLGljb246WzM4NCw1MTIsW10sImYxMzAiLCJNMTkyIDBDMTM5IDAgOTYgNDMgOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2ek00OCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxNzAuNyAwIDE4NGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNWwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggMzAzLjUgNDggMjI0bDAtNDB6Il19LEgkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm93biIsaWNvbjpbNTc2LDUxMixbMTI4MDgxXSwiZjUyMSIsIk0zMTMgODcuMmM5LjItNy4zIDE1LTE4LjYgMTUtMzEuMiAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDEyLjYgNS45IDIzLjkgMTUgMzEuMkwxOTQuNiAxOTQuOGMtMTAgMTUuNy0zMS4zIDE5LjYtNDYuMiA4LjRMODguOSAxNTguN2M0LjUtNi40IDcuMS0xNC4zIDcuMS0yMi43IDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMjEuOCAxNy41IDM5LjYgMzkuMiA0MEw4Ny44IDM5My41YzQuNyAzMS4zIDMxLjYgNTQuNSA2My4zIDU0LjVsMjczLjggMGMzMS43IDAgNTguNi0yMy4yIDYzLjMtNTQuNUw1MjAuOCAxNzZjMjEuNy0uNCAzOS4yLTE4LjIgMzkuMi00MCAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDguNCAyLjYgMTYuMyA3LjEgMjIuN2wtNTkuNCA0NC42Yy0xNC45IDExLjItMzYuMiA3LjMtNDYuMi04LjRMMzEzIDg3LjJ6Il19LHEkZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93LXR1cm4tbGVmdCIsaWNvbjpbNTEyLDUxMixbXSwiZTU4MCIsIk0tLjUgMTEzbDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMzEtMzEgMzUwLjEgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMzUwLjEgMCAzMS0zMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM4MC45LTIuMyA3MS41IDdMLS41IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdfSxTRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1mYXN0IixpY29uOls2NDAsNTEyLFsic2hpcHBpbmctZmFzdCJdLCJmNDhiIiwiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYyMS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDY0MCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTMuMyAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTQ4LTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDE0NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA5NiAyNCA5Nmw0MCAwek01NzYgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMjU2IDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSxWJGU9U0YsQ0Y9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1wZW4iLGljb246WzY0MCw1MTIsWyJ1c2VyLWVkaXQiXSwiZjRmZiIsIk0yNTYuMSAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NmMtOTguNSAwLTE3OC4zIDc5LjgtMTc4LjMgMTc4LjMgMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdsMTk2LjUgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsNjcuMy02Ny4zYy0yOC0xOC4zLTYxLjQtMjguOS05Ny40LTI4LjlsLTU5LjQgMHpNMzMyLjMgNDY2LjlsLTExLjkgNTkuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42IDEgMCAxLjktLjEgMi45LS4zbDU5LjYtMTEuOWMxMi40LTIuNSAyMy44LTguNiAzMi43LTE3LjVsMTE4LjktMTE4LjktODAtODAtMTE4LjkgMTE4LjljLTguOSA4LjktMTUgMjAuMy0xNy41IDMyLjd6bTI2Ny44LTEyM2MyMi4xLTIyLjEgMjIuMS01Ny45IDAtODBzLTU3LjktMjIuMS04MCAwbC0yOC44IDI4LjggODAgODAgMjguOC0yOC44eiJdfSxqJGU9Q0YsVSRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItY2xvY2siLGljb246WzU3Niw1MTIsW10sImY0ZmQiLCJNMjI0IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0xOTQuMyAzMDRsNTkuNCAwYzMuOSAwIDcuOSAuMSAxMS44IC40LTE2LjIgMjguMi0yNS41IDYwLjgtMjUuNSA5NS42IDAgNDEuOCAxMy40IDgwLjUgMzYgMTEyTDQ1LjcgNTEyQzI5LjMgNTEyIDE2IDQ5OC43IDE2IDQ4Mi4zIDE2IDM4My44IDk1LjggMzA0IDE5NC4zIDMwNHpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDQtODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2eiJdfSxXJGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hvd2VyIixpY29uOls1MTIsNTEyLFsxMjg3MDNdLCJmMmNjIiwiTTY0IDEzMS45YzAtMTkuOCAxNi4xLTM1LjkgMzUuOS0zNS45IDkuNSAwIDE4LjYgMy44IDI1LjQgMTAuNWwxNi4yIDE2LjJjLTIxIDM4LjktMTcuNCA4Ny41IDEwLjkgMTIzTDE1MSAyNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwzNDUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTEuMyAxLjNjLTM1LjUtMjguMy04NC4xLTMxLjktMTIzLTEwLjlMMTcwLjUgNjEuM0MxNTEuOCA0Mi41IDEyNi40IDMyIDk5LjkgMzIgNDQuNyAzMiAwIDc2LjcgMCAxMzEuOUwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzE2LjF6TTI1NiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzItMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxfRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtdXAiLGljb246WzQ0OCw1MTIsWyJjYXJldC1zcXVhcmUtdXAiXSwiZjE1MSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMjQgMTYwYzYuNyAwIDEzIDIuOCAxNy42IDcuN2wxMDQgMTEyYzYuNSA3IDguMiAxNy4yIDQuNCAyNS45UzMzNy41IDMyMCAzMjggMzIwbC0yMDggMGMtOS41IDAtMTguMi01LjctMjItMTQuNHMtMi4xLTE4LjkgNC40LTI1LjlsMTA0LTExMmM0LjUtNC45IDEwLjktNy43IDE3LjYtNy43eiJdfSxHJGU9X0YsVEY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFwLWxvY2F0aW9uIixpY29uOls2NDAsNTEyLFsibWFwLW1hcmtlZCJdLCJmNTlmIiwiTTU3NiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEw0MTMuNSA3Ny41IDIzNC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM3MC44IDg4LjggNjQgOTkuOSA2NCAxMTJsMCAzNTJjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3My4zIDU3LjhjLTQuMy02LjQtOC41LTEzLjEtMTIuNi0xOS45LTExLTE4LjMtMjEuOS0zOS4zLTMwLTYxLjhsLTEwMS4yLTMzLjcgMC0yODQuNSAxMjggNDIuNyAwIDk5LjNjMzEtMzUuOCA3Ny01OC40IDEyOC01OC40IDIyLjYgMCA0NC4yIDQuNCA2NCAxMi41TDU3NiA0OHpNMzkyIDM0MS45YzAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOVMzOTIgMjc2LjggMzkyIDM0MS45eiJdfSxZJGU9VEYsWiRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbi1mYW5jeSIsaWNvbjpbNTEyLDUxMixbMTI4Mzk1LDEwMDAyXSwiZjVhYyIsIk0zNzMuNSAyNy4xYzE1LTE3LjIgMzYuNy0yNy4xIDU5LjYtMjcuMSA0My42IDAgNzkgMzUuNCA3OSA3OSAwIDIyLjgtOS45IDQ0LjYtMjcuMSA1OS42TDI4My43IDMxMy44IDI3MyAzMDMgMjA5IDIzOSAxOTguMiAyMjguMyAzNzMuNSAyNy4xek0xNjEuMSAyNTlDMTYyIDI2MCAxODggMjg2IDIzOSAzMzdsMTMuOSAxMy45LTE3LjEgNzQuMmMtMy45IDE3LjEtMTYuOSAzMC43LTMzLjggMzUuNGwtMTY5LjggNDcuNSA5Mi4zLTkyLjNjMS4yIC4xIDIuMyAuMiAzLjUgLjIgMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMmMwIDEuMiAuMSAyLjQgLjIgMy41TDMuOSA0NzkuOCA1MS41IDMxMGM0LjctMTYuOSAxOC4zLTI5LjkgMzUuNC0zMy44TDE2MS4xIDI1OXoiXX0sbW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXVyby1zaWduIixpY29uOls0NDgsNTEyLFs4MzY0LCJldXIiLCJldXJvIl0sImYxNTMiLCJNNzMuMyAxOTJDMTAwLjggOTkuNSAxODYuNSAzMiAyODggMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtNjUuNiAwLTEyMiAzOS41LTE0Ni43IDk2TDI3MiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0My4yIDBjLS41IDUuMy0uOCAxMC42LS44IDE2cy4zIDEwLjcgLjggMTZMMjcyIDI3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTMwLjcgMGMyNC43IDU2LjUgODEuMSA5NiAxNDYuNyA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xMDEuNSAwLTE4Ny4yLTY3LjUtMjE0LjctMTYwTDQwIDMyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNC42IDBjLS43LTEwLjUtLjctMjEuNSAwLTMyTDQwIDI0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwzMy4zIDB6Il19LFgkZT1tbSxLJGU9bW0sUSRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTUwYiIsIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMiA0Ny4yLTE3NS45IDExNC44LTUtMS44LTEwLjUtMi44LTE2LjEtMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkwLjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMiA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTU1NS4zIDM0MC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2LjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6Il19LEokZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaXJhLXNpZ24iLGljb246WzM4NCw1MTIsWzgzNTZdLCJmMTk1IiwiTTg0LjkgMjU2bC0yOC40IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEuNiAwQzUzLjIgMTI0LjcgMTE2LjggNDIgMjA3LjYgNDJsOC4yIDBjMzMuNiAwIDY2LjIgMTEuMyA5Mi41IDMyLjJsMTYuMSAxMi43YzEzLjkgMTEgMTYuMiAzMS4xIDUuMiA0NXMtMzEuMSAxNi4yLTQ1IDUuMmwtMTYuMS0xMi43Yy0xNS0xMS45LTMzLjYtMTguNC01Mi44LTE4LjRsLTguMiAwYy01My44IDAtOTAuMSA1Mi45LTczLjUgMTAybDE2Mi40IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NS4xIDBjMi4zIDEwLjYgMy42IDIxLjMgMy45IDMybDE0MS4yIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMTUwIDMzNmMtNC44IDE4LjYtMTIuNiAzNi41LTIzLjYgNTIuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMzLjctNS42IDYuOS0xMS40IDkuNC0xNy40bC0yNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDM0LjggMGMtLjUtMTAuOC0yLjYtMjEuNi02LjQtMzJ6Il19LGZsPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Inllbi1zaWduIixpY29uOlszODQsNTEyLFsxNjUsImNueSIsImpweSIsInJtYiIsInllbiJdLCJmMTU3IiwiTTc0LjkgNDYuN2MtOS42LTE0LjktMjkuNC0xOS4yLTQ0LjItOS42UzExLjUgNjYuNCAyMS4xIDgxLjNMMTQzLjcgMjcyIDg4IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgMzItNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC0zMiA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NS43IDAgMTIyLjYtMTkwLjdjOS42LTE0LjkgNS4zLTM0LjctOS42LTQ0LjJzLTM0LjctNS4zLTQ0LjIgOS42TDE5MiAyMjguOCA3NC45IDQ2Ljd6Il19LGVBZT1mbCx0QWU9ZmwsYUFlPWZsLGlBZT1mbCxyQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm94LW9wZW4iLGljb246WzY0MCw1MTIsW10sImY0OWUiLCJNNTYwLjMgMjM3LjJjMTAuNCAxMS44IDI4LjMgMTQuNCA0MS44IDUuNSAxNC43LTkuOCAxOC43LTI5LjcgOC45LTQ0LjRsLTQ4LTcyYy0yLjgtNC4yLTYuNi03LjctMTEuMS0xMC4yTDM1MS40IDQuN2MtMTkuMy0xMC43LTQyLjgtMTAuNy02Mi4yIDBMODguOCAxMTZjLTUuNCAzLTkuNyA3LjQtMTIuNiAxMi44TDI3LjcgMjE4LjdjLTEyLjYgMjMuNC0zLjggNTIuNSAxOS42IDY1LjFsMzMgMTcuNyAwIDUzLjNjMCAyMyAxMi40IDQ0LjMgMzIuNCA1NS43bDE3NiA5OS43YzE5LjYgMTEuMSA0My41IDExLjEgNjMuMSAwbDE3Ni05OS43YzIwLjEtMTEuNCAzMi40LTMyLjYgMzIuNC01NS43bDAtMTE3LjV6bS0yNDAtOS44TDE3MC4yIDE0NCAzMjAuMyA2MC42IDQ3MC40IDE0NCAzMjAuMyAyMjcuNHptLTQxLjUgNTAuMmwtMjEuMyA0Ni4yLTE2NS44LTg4LjggMjUuNC00Ny4yIDE2MS43IDg5Ljh6Il19LHNBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1maWVsZCIsaWNvbjpbNjQwLDUxMixbXSwiZTU4ZCIsIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyMjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsNDAuNCAwYzMyLjQgMCA2MS42IDE5LjYgNzQgNDkuNWw0My44IDEwNi4zIDEuNyA0LjIgMjQuNyAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLS40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04bC0xNDQuNyAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTMuNiAuMi03LjEgLjYtMTAuNS0xOS02LjQtMzIuNi0yNC40LTMyLjYtNDUuNWwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtMzJ6bTM1MiAzMmwwIDk2IDgyLjEgMC0zNS40LTg2LjFjLTIuNS02LTguMy05LjktMTQuOC05LjlMMzg0IDEyOHpNMTkyIDM5MmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yODAgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSxuQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibG9jYXRpb24tcGluLWxvY2siLGljb246WzUxMiw1MTIsW10sImU1MWYiLCJNMCAxODguNkMwIDg0LjQgODYgMCAxOTIgMCAyOTQuMSAwIDM3Ny42IDc4LjMgMzgzLjYgMTc3IDMyMC43IDE4NS4xIDI3MiAyMzguOCAyNzIgMzA0bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDc1LjdjLTkuOSAxMS42LTE4LjkgMjEuNy0yNi40IDI5LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0yNDAgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTI4OCA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il19LExGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1wcmF5aW5nIixpY29uOlszODQsNTEyLFsxMjg3MjAsInByYXkiXSwiZjY4MyIsIk0zMjAgNjRhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek0yMDAuNyAyNjRsMjIuOSAzMS41YzYuNSA4LjkgMTYuMyAxNC43IDI3LjIgMTYuMXMyMS45LTEuNyAzMC40LTguN2w4OC03MmMxNy4xLTE0IDE5LjYtMzkuMiA1LjYtNTYuM3MtMzkuMi0xOS42LTU2LjMtNS42bC01NS4yIDQ1LjItMjYuMi0zNmMtMTUuNi0yMS41LTQwLjYtMzQuMi02Ny4yLTM0LjItMzAuOSAwLTU5LjIgMTcuMS03My42IDQ0LjRMNDcuOCAyODAuOWMtMjAuMiAzOC41LTkuNCA4NS45IDI1LjYgMTExLjhMMTI2LjYgNDMyIDQwIDQzMmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwyMDggMGMxNy4zIDAgMzIuNi0xMS4xIDM4LTI3LjVzLS4zLTM0LjQtMTQuMi00NC43bC0xMTYuMS04NS44IDQ1LTkweiJdfSxvQWU9TEYsbEFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsaXBib2FyZC1saXN0IixpY29uOlszODQsNTEyLFtdLCJmNDZkIiwiTTMxMS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJ6TTI0OCAxMTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwek0xMjggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyIDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCAxMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNOTYgNDE2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sY0FlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNhY2stZG9sbGFyIixpY29uOls1MTIsNTEyLFsxMjgxNzZdLCJmODFkIiwiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0yNjAgMjI0Yy0xMSAwLTIwIDktMjAgMjBsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMjE2IDM4NGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHoiXX0sZEFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vdW50YWluLXN1biIsaWNvbjpbNTc2LDUxMixbXSwiZTUyZiIsIk0yNTYuNSAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNS03LjIgMTIuMS0yMC4zIDE5LjUtMzQuMyAxOS41bC00MzIgMGMtMTQuMSAwLTI3LjEtNy40LTM0LjMtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwIDIuOS00LjZDMjMxLjcgNi4yIDI0My42IDAgMjU2LjUgMHpNMTcwLjQgMjQ5LjlsMjYuOCAyNi44YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDQzLjMtNDMuM2M2LTYgMTQuMS05LjQgMjIuNi05LjRsNDIuOCAwLTcyLjEtMTMzLjUtODYuMSAxNTkuNHpNNDk2LjUgMTYwYTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYweiJdfSwkRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy11cC13aWRlLXNob3J0IixpY29uOls1NzYsNTEyLFsic29ydC1hbW91bnQtdXAiXSwiZjE2MSIsIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTMyMCA0ODBsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6Il19LHBBZT0kRixoQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTU5MiIsIk0yMjQgMTI4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDMzNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHpNMzkyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMGMtMTguMiAyNi0yOC44IDU3LjUtMjguOCA5MS42bDAgOGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTc4LjggMEM0MS42IDM2OCAzMiAzNTguNCAzMiAzNDYuN0wzMiAzMzZjMC01MyA0My05NiA5Ni05NiAxMCAwIDE5LjcgMS41IDI4LjggNC40ek03MiAxNDRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0wIDQ0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSx1QWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Rhci1vZi1kYXZpZCIsaWNvbjpbNTEyLDUxMixbMTAwMTddLCJmNjlhIiwiTTQxNS45IDMxMS45bC0yNy44IDQ4LjEgNTUuNyAwLTI3LjgtNDguMXpNMzgzLjYgMjU2bC02MC4yLTEwNC0xMzQuOCAwLTYwLjIgMTA0IDYwLjIgMTA0IDEzNC44IDAgNjAuMi0xMDR6bTY0LjcgMGw1OC40IDEwMC45YzMuNSA2IDUuMyAxMi44IDUuMyAxOS43IDAgMjEuNy0xNy42IDM5LjQtMzkuNCAzOS40bC0xMTcgMC02MS4zIDEwNS44QzI4Ni41IDUzNS42IDI3MS44IDU0NCAyNTYgNTQ0cy0zMC41LTguNC0zOC40LTIyLjJsLTYxLjMtMTA1LjgtMTE3IDBjLTIxLjcgMC0zOS40LTE3LjYtMzkuNC0zOS40IDAtNi45IDEuOC0xMy43IDUuMy0xOS43TDYzLjcgMjU2IDUuMyAxNTUuMUMxLjggMTQ5LjEgMCAxNDIuMyAwIDEzNS40IDAgMTEzLjYgMTcuNiA5NiAzOS40IDk2bDExNyAwIDYxLjMtMTA1LjhDMjI1LjUtMjMuNiAyNDAuMi0zMiAyNTYtMzJzMzAuNSA4LjQgMzguNCAyMi4ybDYxLjMgMTA1LjggMTE3IDBjMjEuNyAwIDM5LjQgMTcuNiAzOS40IDM5LjQgMCA2LjktMS44IDEzLjctNS4zIDE5LjdMNDQ4LjMgMjU2ek0zODguMSAxNTJsMjcuOCA0OC4xIDI3LjgtNDguMS01NS43IDB6TTI5MSA5NmwtMzUtNjAuNC0zNSA2MC40IDcwIDB6TTEyMy45IDE1MmwtNTUuNyAwIDI3LjggNDguMSAyNy44LTQ4LjF6TTk2LjEgMzExLjlsLTI3LjggNDguMSA1NS43IDAtMjcuOC00OC4xek0yMjEgNDE2bDM1IDYwLjQgMzUtNjAuNC03MCAweiJdfSxmQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90ZXMtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjQ4MSIsIk05NiAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgxLjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0OTMuMyAyOTAuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMEMxMjQuNyAwIDk2IDI4LjcgOTYgNjRsMCAyODh6TTI4OCAxMTJsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzI4eiJdfSxtQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXVzdHJhbC1zaWduIixpY29uOls0NDgsNTEyLFtdLCJlMGE5IiwiTTI2Ni41IDI0MGwtODUgMCA0Mi41LTEwNi40IDQyLjUgMTA2LjR6bTY4LjkgMEwyNjIuOSA1OC4zQzI1Ni41IDQyLjQgMjQxLjEgMzIgMjI0IDMycy0zMi41IDEwLjQtMzguOSAyNi4zTDExMi42IDI0MCAzMiAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjEuNCAwLTE5LjIgNDgtNDIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDIzLjEgMC0yMC44IDUyLjFjLTYuNiAxNi40IDEuNCAzNSAxNy45IDQxLjZzMzUtMS40IDQxLjYtMTcuOWwzMC4zLTc1LjkgMjAwIDAgMzAuMyA3NS45YzYuNiAxNi40IDI1LjIgMjQuNCA0MS42IDE3LjlzMjQuNC0yNS4yIDE3LjktNDEuNkwzOTIuOSAzODQgNDE2IDM4NGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDIuMyAwLTE5LjItNDggNjEuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MC42IDB6bS00OS43IDQ4bDE5LjIgNDgtMTYxLjYgMCAxOS4yLTQ4IDEyMy4zIDB6Il19LGdBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtdXNlciIsaWNvbjpbMzg0LDUxMixbXSwiZjdmMyIsIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDM0NGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNOTguMyA0MTNjLTEyLjkgMTUuNiAyLjIgMzUgMjIuNCAzNWwxNDIuNSAwYzIwLjIgMCAzNS4zLTE5LjQgMjIuNC0zNS0xNC43LTE3LjctMzYuOS0yOS02MS43LTI5bC02NCAwYy0yNC44IDAtNDcgMTEuMy02MS43IDI5eiJdfSxiQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1pbWFnZSIsaWNvbjpbMzg0LDUxMixbMTI4NDQzXSwiZjFjNSIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05Mi42IDQ0OGwxOTguOCAwYzE1LjggMCAyOC42LTEyLjggMjguNi0yOC42IDAtNy4zLTIuOC0xNC40LTcuOS0xOS43TDIxNS4zIDI5Ny45Yy02LTYuMy0xNC40LTkuOS0yMy4yLTkuOWwtLjMgMGMtOC44IDAtMTcuMSAzLjYtMjMuMiA5LjlMNzEuOSAzOTkuN0M2Ni44IDQwNSA2NCA0MTIuMSA2NCA0MTkuNCA2NCA0MzUuMiA3Ni44IDQ0OCA5Mi42IDQ0OHoiXX0sQUY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLWNhcmV0LXJpZ2h0IixpY29uOls0NDgsNTEyLFsiY2FyZXQtc3F1YXJlLXJpZ2h0Il0sImYxNTIiLCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNFMxNjAgMzY5LjUgMTYwIDM2MGwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnoiXX0sdkFlPUFGLHlBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWFsIixpY29uOls1MTIsNTEyLFsxMjk1MTRdLCJmNDkyIiwiTTM0Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzA2LjcgNjQgMjguMSAzNDIuNkMxMC4xIDM2MC42IDAgMzg1IDAgNDEwLjVMMCA0MTZjMCA1MyA0MyA5NiA5NiA5Nmw1LjUgMGMyNS41IDAgNDkuOS0xMC4xIDY3LjktMjguMWwyNzguNi0yNzguNiA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6TTIwNS4zIDI1NmwxNDYuNy0xNDYuNyA1MC43IDUwLjctOTYgOTYtMTAxLjUgMHoiXX0seEFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlbGljb3B0ZXIiLGljb246WzU3Niw1MTIsWzEyODY0MV0sImY1MzMiLCJNMTc2IDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwIDAgNDgtMjIwLjggMC0zMi44LTM5LjRDNjkuOSA4My4yIDYzLjEgODAgNTYgODBMMjQgODBDMTUuNyA4MCA4IDg0LjMgMy42IDkxLjRzLTQuOCAxNS45LTEuMSAyMy40bDQ4IDk2QzU0LjYgMjE4LjkgNjIuOSAyMjQgNzIgMjI0bDEwNy44IDAgMTA0IDE0My4xYzE1LjEgMjAuNyAzOS4xIDMyLjkgNjQuNyAzMi45bDc1LjUgMGM3NS4xIDAgMTM2LTYwLjkgMTM2LTEzNlM0OTkuMSAxMjggNDI0IDEyOGwtNDggMCAwLTQ4IDE1MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3NiAzMnpNMzc2IDE5Mmw0OCAwYzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcybC00OCAwIDAtMTQ0ek01NTIgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDQuNC0zLjYgOC04IDhsLTI3MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0eiJdfSx3QWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWl0dGVuIixpY29uOls0NDgsNTEyLFtdLCJmN2I1IiwiTTM1MiAzODRMNjQgMzg0IDUuNCAxNzguOUMxLjggMTY2LjQgMCAxNTMuNCAwIDE0MC4zIDAgNjIuOCA2Mi44IDAgMTQwLjMgMGwzLjQgMGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJsMi44IDBjMzQuOSAwIDYzLjMgMjguMyA2My4zIDYzLjMgMCAxNS45LTYgMzEuMi0xNi44IDQyLjlMMzUyIDM4NHpNMzIgNDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdfSxNQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2FzLXB1bXAiLGljb246WzUxMiw1MTIsWzk5ODFdLCJmNTJmIiwiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjU2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTIgOCAwYzQ4LjYgMCA4OCAzOS40IDg4IDg4bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE1NGMtMjcuNi03LjEtNDgtMzIuMi00OC02MmwwLTU5LjUtMjUuOC0yOC4zYy04LjktOS44LTguMi0yNSAxLjYtMzMuOXMyNS04LjIgMzMuOSAxLjZsNzEuNyA3OC44YzkuNCAxMC4zIDE0LjYgMjMuNyAxNC42IDM3LjdMNTEyIDM3NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnMtNzItMzIuMi03Mi03MmwwLTMyYzAtMjIuMS0xNy45LTQwLTQwLTQwbC04IDAgMCAxNjEuNGM5LjMgMy4zIDE2IDEyLjIgMTYgMjIuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTAuNSA2LjctMTkuMyAxNi0yMi42TDMyIDY0ek05NiA4MGwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZMMTEyIDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6Il19LHpBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZS1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU0ZTgiLCJNNjQgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgODEuNGMtMjQuNC0xMS4yLTUxLjQtMTcuNC04MC0xNy40LTg3LjcgMC0xNjEuNyA1OC44LTE4NC43IDEzOS4yLTcuMS0xLjMtMTQuMS00LjItMjAuMS04LjhsLTIwOC0xNTZDNzEuMSAxNDEuMyA2NCAxMjcuMSA2NCAxMTJ6TTMwNCAzNjhjMCAyOC42IDYuMiA1NS42IDE3LjQgODBMMTI4IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xODggMTk4LjQgMTQ4LjhjMTIuNiA5LjQgMjYuOSAxNS40IDQxLjcgMTcuOSAwIDEuOC0uMSAzLjUtLjEgNS4zem00OCAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdfSxERj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tc2thdGluZyIsaWNvbjpbNTEyLDUxMixbInNrYXRpbmciXSwiZjdjNSIsIk0zNjggNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMjggMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1MC4xIDBjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTYzLjkgNjMuOSA2OS44IDMxYzE3LjMgNy43IDI4LjUgMjQuOSAyOC41IDQzLjlsMCA4NS42YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNzUuMi04Mi40LTM2LjZjLTQxLTE4LjItNTEtNzItMTkuMy0xMDMuN2w0MC40LTQwLjQtOTguNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODkuNCAzNjEuNGw3NS45LTc1LjljNy43IDE5LjcgMjEuNiAzNy4zIDQxIDQ5LjZsLTcxLjYgNzEuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6bTM0Ni41IDg3LjFjOC42IDIuMSAxMy44IDEwLjggMTEuNiAxOS40bC0uNCAxLjdjLTYuMiAyNC45LTI4LjYgNDIuNC01NC4zIDQyLjRMMzA0IDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4OC44IDBjMTEgMCAyMC42LTcuNSAyMy4zLTE4LjJsLjQtMS43YzIuMS04LjYgMTAuOC0xMy44IDE5LjQtMTEuNnpNMTQzLjIgNDg2LjNsLTYuMiAzLjFjLTIxLjYgMTAuOC00Ny42IDYuNi02NC42LTEwLjVMMTIuNyA0MTkuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDU5LjYgNTkuNmM3LjMgNy4zIDE4LjUgOS4xIDI3LjcgNC41bDYuMi0zLjFjNy45LTQgMTcuNS0uNyAyMS41IDcuMnMuNyAxNy41LTcuMiAyMS41eiJdfSxrQWU9REYscmc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3VuIixpY29uOls1NzYsNTEyLFs5NzI4XSwiZjE4NSIsIk0yODgtMzJjOC40IDAgMTYuMyA0LjQgMjAuNiAxMS43TDM2NC4xIDcyLjMgNDY4LjkgNDZjOC4yLTIgMTYuOSAuNCAyMi44IDYuM1M1MDAgNjcgNDk4IDc1LjFsLTI2LjMgMTA0LjcgOTIuNyA1NS41YzcuMiA0LjMgMTEuNyAxMi4yIDExLjcgMjAuNnMtNC40IDE2LjMtMTEuNyAyMC42TDQ3MS43IDMzMi4xIDQ5OCA0MzYuOGMyIDguMi0uNCAxNi45LTYuMyAyMi44UzQ3NyA0NjggNDY4LjkgNDY2bC0xMDQuNy0yNi4zLTU1LjUgOTIuN2MtNC4zIDcuMi0xMi4yIDExLjctMjAuNiAxMS43cy0xNi4zLTQuNC0yMC42LTExLjdMMjExLjkgNDM5LjcgMTA3LjIgNDY2Yy04LjIgMi0xNi44LS40LTIyLjgtNi4zUzc2IDQ0NSA3OCA0MzYuOGwyNi4yLTEwNC43LTkyLjYtNTUuNUM0LjQgMjcyLjIgMCAyNjQuNCAwIDI1NnM0LjQtMTYuMyAxMS43LTIwLjZMMTA0LjMgMTc5LjkgNzggNzUuMWMtMi04LjIgLjMtMTYuOCA2LjMtMjIuOFM5OSA0NCAxMDcuMiA0NmwxMDQuNyAyNi4yIDU1LjUtOTIuNiAxLjgtMi42YzQuNS01LjcgMTEuNC05LjEgMTguOC05LjF6bTAgMTQ0YTE0NCAxNDQgMCAxIDAgMCAyODggMTQ0IDE0NCAwIDEgMCAwLTI4OHptMCAyNDBhOTYgOTYgMCAxIDEgMC0xOTIgOTYgOTYgMCAxIDEgMCAxOTJ6Il19LEVGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhc2ViYWxsIixpY29uOls1MTIsNTEyLFsxMjkzNTgsOTkxOCwiYmFzZWJhbGwtYmFsbCJdLCJmNDMzIiwiTTIzMi40IDEuMWMtMTIyLjIgMTEuNC0yMTkuNSAxMDguNy0yMzAuOSAyMzAuOSAxNi4yLS4xIDMyLTEuOCA0Ny4yLTUgMTMtMi43IDI1LjcgNS41IDI4LjQgMTguNXMtNS41IDI1LjctMTguNSAyOC40Yy0xOC40IDMuOS0zNy42IDYtNTcuMSA2LjEgMTEuNCAxMjIuMiAxMDguNyAyMTkuNSAyMzAuOSAyMzAuOSAuMS0xOS41IDIuMi0zOC43IDYuMS01Ny4xIDIuNy0xMyAxNS41LTIxLjMgMjguNC0xOC41czIxLjMgMTUuNSAxOC41IDI4LjRjLTMuMiAxNS4yLTQuOSAzMS01IDQ3LjIgMTIyLjItMTEuNCAyMTkuNS0xMDguNyAyMzAuOS0yMzAuOS0xNi4yIC4xLTMyIDEuOC00Ny4yIDUtMTMgMi43LTI1LjctNS41LTI4LjQtMTguNXM1LjUtMjUuNyAxOC41LTI4LjRjMTguNC0zLjkgMzcuNi02IDU3LjEtNi4xLTExLjQtMTIyLjItMTA4LjctMjE5LjUtMjMwLjktMjMwLjktLjEgMTkuNS0yLjIgMzguNy02LjEgNTcuMS0yLjcgMTMtMTUuNSAyMS4zLTI4LjQgMTguNXMtMjEuMy0xNS41LTE4LjUtMjguNGMzLjItMTUuMiA0LjktMzEgNS00Ny4yem0yLjggMTUxLjRjLTIxLjQgMzIuOS00OS41IDYwLjktODIuMyA4Mi4zLTExLjEgNy4yLTI2IDQuMS0zMy4yLTdzLTQuMS0yNiA3LTMzLjJjMjcuMi0xNy43IDUwLjUtNDEgNjguMy02OC4zIDcuMi0xMS4xIDIyLjEtMTQuMyAzMy4yLTdzMTQuMyAyMi4xIDcgMzMuMnpNMzkzLjEgMjg0LjJjNy4yIDExLjEgNC4xIDI2LTcgMzMuMi0yNy4yIDE3LjctNTAuNSA0MS02OC4zIDY4LjMtNy4yIDExLjEtMjIuMSAxNC4zLTMzLjIgN3MtMTQuMy0yMi4xLTctMzMuMmMyMS40LTMyLjkgNDkuNS02MC45IDgyLjMtODIuMyAxMS4xLTcuMiAyNi00LjEgMzMuMiA3eiJdfSxTQWU9RUYsQ0FlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImltYWdlIixpY29uOls0NDgsNTEyLFtdLCJmMDNlIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDgwYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMjcyIDIyNGM4LjQgMCAxNi4xIDQuNCAyMC41IDExLjVsODggMTQ0YzQuNSA3LjQgNC43IDE2LjcgLjUgMjQuM1MzNjguNyA0MTYgMzYwIDQxNkw4OCA0MTZjLTguOSAwLTE3LjItNS0yMS4zLTEyLjlzLTMuNS0xNy41IDEuNi0yNC44bDU2LTgwYzQuNS02LjQgMTEuOC0xMC4yIDE5LjctMTAuMnMxNS4yIDMuOCAxOS43IDEwLjJsMjYuNCAzNy44IDYxLjQtMTAwLjVjNC40LTcuMSAxMi4xLTExLjUgMjAuNS0xMS41eiJdfSxfQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibm90ZGVmIixpY29uOlszODQsNTEyLFtdLCJlMWZlIiwiTTY0IDM5MC4zTDE1My41IDI1NiA2NCAxMjEuNyA2NCAzOTAuM3pNMTAyLjUgNDQ4TDI4MS41IDQ0OCAxOTIgMzEzLjcgMTAyLjUgNDQ4em0xMjgtMTkyTDMyMCAzOTAuMyAzMjAgMTIxLjcgMjMwLjUgMjU2ek0yODEuNSA2NEwxMDIuNSA2NCAxOTIgMTk4LjMgMjgxLjUgNjR6TTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA0OHoiXX0sUEY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFza2V0YmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTM2LCJiYXNrZXRiYWxsLWJhbGwiXSwiZjQzNCIsIk05Mi43IDU4LjhsNzguNCA3OC40YzE4LjItMjUgMjguOS01NS45IDI4LjktODkuMiAwLTE0LjEtMS45LTI3LjctNS41LTQwLjYtMzggOS40LTcyLjYgMjcuMi0xMDEuOCA1MS40ek01OC44IDkyLjdjLTI0LjIgMjkuMi00MiA2My44LTUxLjQgMTAxLjggMTIuOSAzLjYgMjYuNSA1LjUgNDAuNiA1LjUgMzMuMyAwIDY0LjEtMTAuNyA4OS4yLTI4LjlMNTguOCA5Mi43ek0yNTYgMGMtNC42IDAtOS4yIC4xLTEzLjcgLjQgMy43IDE1LjMgNS43IDMxLjIgNS43IDQ3LjYgMCA0Ni42LTE1LjkgODkuNC00Mi42IDEyMy40TDI1NiAyMjIuMSA0MTkuMyA1OC44QzM3NC45IDIyLjEgMzE4LjEgMCAyNTYgMHpNNDggMjQ4Yy0xNi40IDAtMzIuNC0yLTQ3LjYtNS43LS4yIDQuNS0uNCA5LjEtLjQgMTMuNyAwIDYyLjEgMjIuMSAxMTguOSA1OC44IDE2My4zTDIyMi4xIDI1NiAxNzEuNCAyMDUuNEMxMzcuNCAyMzIuMSA5NC42IDI0OCA0OCAyNDh6bTQ2My42IDIxLjdjLjItNC41IC40LTkuMSAuNC0xMy43IDAtNjIuMS0yMi4xLTExOC45LTU4LjgtMTYzLjNMMjg5LjkgMjU2IDM0MC42IDMwNi42YzM0LTI2LjcgNzYuOS00Mi42IDEyMy40LTQyLjYgMTYuNCAwIDMyLjQgMiA0Ny42IDUuN3ptLTcuMSA0Ny44Yy0xMi45LTMuNi0yNi41LTUuNS00MC42LTUuNS0zMy4zIDAtNjQuMSAxMC43LTg5LjIgMjguOWw3OC40IDc4LjRjMjQuMi0yOS4yIDQyLTYzLjggNTEuNC0xMDEuOHpNMzQwLjkgMzc0LjhjLTE4LjIgMjUtMjguOSA1NS45LTI4LjkgODkuMiAwIDE0LjEgMS45IDI3LjcgNS41IDQwLjYgMzgtOS40IDcyLjYtMjcuMiAxMDEuOC01MS40bC03OC40LTc4LjR6bS0zNC4zLTM0LjNMMjU2IDI4OS45IDkyLjcgNDUzLjJjNDQuMyAzNi43IDEwMS4yIDU4LjggMTYzLjMgNTguOCA0LjYgMCA5LjItLjEgMTMuNy0uNC0zLjctMTUuMy01LjctMzEuMi01LjctNDcuNiAwLTQ2LjYgMTUuOS04OS40IDQyLjYtMTIzLjR6Il19LFRBZT1QRixJRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZW5jaWwiLGljb246WzUxMiw1MTIsWzk5OTksNjE1MDQsInBlbmNpbC1hbHQiXSwiZjMwMyIsIk0zNi40IDM1My4yYzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4LjdsMTgxLjItMTgxLjIgMzMuOS0zMy45YzE2LjYgMTYuNiA1MS4zIDUxLjMgMTA0IDEwNGwzMy45IDMzLjktMzMuOSAzMy45LTE4MS4yIDE4MS4yYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMC42Yy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMlMtMS40IDQ4OS4zIC45IDQ4MUwzNi40IDM1My4yem01NS42LTMuN2MtNC40IDQuNy03LjYgMTAuNC05LjMgMTYuNmwtMjQuMSA4Ni45IDg2LjktMjQuMWM2LjQtMS44IDEyLjItNS4xIDE3LTkuN0w5MS45IDM0OS41em0zNTQtMTQ2LjFjLTE2LjYtMTYuNi01MS4zLTUxLjMtMTA0LTEwNEwzMDggNjUuNUMzMzQuNSAzOSAzNDkuNCAyNC4xIDM1Mi45IDIwLjYgMzY2LjQgNyAzODQuOC0uNiA0MDQtLjZTNDQxLjYgNyA0NTUuMSAyMC42bDM1LjcgMzUuN0M1MDQuNCA2OS45IDUxMiA4OC4zIDUxMiAxMDcuNHMtNy42IDM3LjYtMjEuMiA1MS4xYy0zLjUgMy41LTE4LjQgMTguNC00NC45IDQ0Ljl6Il19LExBZT1JRiwkQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0IixpY29uOls2NDAsNTEyLFtdLCJlNTUxIiwiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNMzU5IDMzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAxMDIuMSAwYzEuMiAwIDIuNC0uMSAzLjUtLjMgNTYuMS0zLjkgMTAwLjUtNTAuNiAxMDAuNS0xMDcuNyAwLTU5LjYtNDguNC0xMDgtMTA4LTEwOGwtOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5MiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC05OC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNzIgNzJ6Il19LEFBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLXNpeCIsaWNvbjpbNDQ4LDUxMixbOTg2MV0sImY1MjYiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxORj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmdsZXMtZG93biIsaWNvbjpbMzg0LDUxMixbImFuZ2xlLWRvdWJsZS1kb3duIl0sImYxMDMiLCJNMjE0LjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE5MiA0MDIuNyAzMjkuNCAyNjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwem0xNjAtMzUybC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgMjEwLjcgMzI5LjQgNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zeiJdfSxEQWU9TkYsRUFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN5cmluZ2UiLGljb246WzU3Niw1MTIsWzEyODEzN10sImY0OGUiLCJNNDk3LjUtMTdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtNDYuMSA0Ni4xLTYzLTYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcgNy03OC4xIDc4LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtNDYuMSA0Ni4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQxLTQxLTM3LjcgMzcuN2MtMTAuNSAxMC41LTE2LjQgMjQuNy0xNi40IDM5LjZsMCA4OC44LTU3IDU3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTctNTcgODguOCAwYzE0LjkgMCAyOS4xLTUuOSAzOS42LTE2LjRsMjI5LjctMjI5LjcgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgNDYuMS00Ni4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjQtNjR6Il19LEZGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndoZWF0LWF3biIsaWNvbjpbNTc2LDUxMixbIndoZWF0LWFsdCJdLCJlMmNkIiwiTTc5LjcgMjM0LjZjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4yIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2w0Ni4xIDQ2LjFjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMEwxMzQuMSA0NDQuMyA0OS40IDUyOWMtOS40IDkuNC0yNC41IDkuNC0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXptMTA0LTEwNGM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwbC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTQ5NS4yIDE1YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4yTDUyOS4yIDQ5IDQxNC43IDE2My40YzcuNyAxIDE1LjIgMyAyMi41IDUuOUw0OTUuNSAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01OC4zIDU4LjNjMi44IDcuMSA0LjcgMTQuNSA1LjcgMjIuMUw0OTUuMiAxNXoiXX0sUEFlPUZGLElBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS11cCIsaWNvbjpbNTEyLDUxMixbXSwiZTIyZCIsIk0yMDAgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDE3My42IDE1OS4yYzYuNiA2LjEgMTAuNCAxNC42IDEwLjQgMjMuNmwwIDQzLjdjMCAxMC45LTEwLjcgMTguNi0yMS4xIDE1LjJsLTE2Mi45LTU0LjMgMCA5OS43IDY2IDUyLjhjMy44IDMgNiA3LjYgNiAxMi41bDAgMTkuOGMwIDEwLjQtOS44IDE4LTE5LjkgMTUuNUwyNTYgNTEyIDE0Ny45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzI2LjcgMzk2LjQgMTYgMzg4LjcgMTYgMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjAwIDE1MS4zIDIwMCAyNHoiXX0sTkFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFsaWduLWNlbnRlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjAzNyIsIk0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXX0sRkFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvY2tleS1wdWNrIixpY29uOls1MTIsNTEyLFtdLCJmNDUzIiwiTTI1NiAyNTZDMTE0LjYgMjU2IDAgMjEzIDAgMTYwczExNC42LTk2IDI1Ni05NiAyNTYgNDMgMjU2IDk2LTExNC42IDk2LTI1NiA5NnpNMCAzNTJMMCAyNDIuN2MxNi45IDEyLjMgMzcgMjIuMiA1OC4xIDMwLjEgNTMgMTkuOSAxMjMgMzEuMiAxOTcuOSAzMS4yczE0NC45LTExLjMgMTk3LjktMzEuMmMyMS4yLTcuOSA0MS4yLTE3LjggNTguMS0zMC4xTDUxMiAzNTJjMCA1My0xMTQuNiA5Ni0yNTYgOTZTMCA0MDUgMCAzNTJ6Il19LE9GPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1hcnJvdy1sZWZ0IixpY29uOls1MTIsNTEyLFsiYXJyb3ctY2lyY2xlLWxlZnQiXSwiZjBhOCIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM1IDIzOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTM5IDM5IDE1MC4xIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE1MC4xIDAgMzkgMzljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdfSxPQWU9T0YsUkFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLWJvbHQiLGljb246WzY0MCw1MTIsW10sImU1NWIiLCJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE3Ny40LTc3Yy01LjgtNC4yLTEzLjgtNC0xOS40IC41bC04MCA2NGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOFM0MzMuMiA0MTYgNDQwIDQxNmwzMi45IDAtMTUuOSA0Mi40Yy0yLjUgNi43LS4yIDE0LjMgNS42IDE4LjZzMTMuOCA0IDE5LjQtLjVsODAtNjRjNS4zLTQuMiA3LjQtMTEuNCA1LjEtMTcuOFM1NTguOCAzODQgNTUyIDM4NGwtMzIuOSAwIDE1LjktNDIuNGMyLjUtNi43IC4yLTE0LjMtNS42LTE4LjZ6Il19LEJBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZXN0cm9vbSIsaWNvbjpbNjQwLDUxMixbXSwiZjdiZCIsIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNTQuOGMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjQtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQ0LjQgMTU2LjkgODMuNiAxMjggMTI4IDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTEyLjQgMy45LTI1LjQtLjItMzMuNS05LjRMMjAwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ2NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDY0IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ0MCA0ODBsMC05Ni0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDktMjYuOWMtMy4yIDAtNi40LS41LTkuNS0xLjUtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjEtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdfSxIQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5jaG9yLWxvY2siLGljb246WzY0MCw1MTIsW10sImU0YWQiLCJNMzIwLjUgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2Yy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM2wxNi4yLTE0LjJjMi4xIDExMy4xIDk0LjQgMjA0LjEgMjA4IDIwNC4xIDI4LjMgMCA1NS40LTUuNyA4MC0xNS45bDAtLjIgMC03Mi4yYy0xNC40IDkuNi0zMC42IDE2LjctNDggMjAuN2wwLTI1Ny45YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjcyIDMwNC4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek00MTYuNSA0MDBsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM2wwLTUwLjZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCA1MC42Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjN6Il19LHFBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aW1lbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTI5YyIsIk0xNjAgMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDAgMCA1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTU0LjcgMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC01NC43YzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDU0LjctMjU2IDAgMC01NC43eiJdfSxWQWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlnaHRidWxiIixpY29uOlszODQsNTEyLFsxMjgxNjFdLCJmMGViIiwiTTI5Mi45IDM4NGM3LjMtMjIuMyAyMS45LTQyLjUgMzguNC01OS45IDMyLjctMzQuNCA1Mi43LTgwLjkgNTIuNy0xMzIuMSAwLTEwNi04Ni0xOTItMTkyLTE5MlMwIDg2IDAgMTkyYzAgNTEuMiAyMCA5Ny43IDUyLjcgMTMyLjEgMTYuNSAxNy40IDMxLjIgMzcuNiAzOC40IDU5LjlsMjAxLjcgMHpNMjg4IDQzMmwtMTkyIDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMTZ6TTE4NCAxMTJjLTM5LjggMC03MiAzMi4yLTcyIDcyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdfSxSRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtYXJyb3ctcmlnaHQiLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtcmlnaHQiXSwiZjBhOSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNDEtMTU5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5LTE1MC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTUwLjEgMC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MHoiXX0sakFlPVJGLFVBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJzLWFuZC12ZW51cyIsaWNvbjpbNTEyLDUxMixbOTg5M10sImYyMjQiLCJNMzY4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNC43LTYzIDYzYzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xbDAgMzQuOSAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNC45Yy04MS45LTE1LTE0NC04Ni44LTE0NC0xNzMuMSAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NiAzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDYzLTYzLTM0LjcgMHpNMzUyIDIwOGExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAweiJdfSxzZz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJuZXR3b3JrLXdpcmVkIixpY29uOls1NzYsNTEyLFtdLCJmNmZmIiwiTTI0OCA4OGw4MCAwIDAgNDgtODAgMCAwLTQ4em0tOC01NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwIDAgMzItMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMCAwIDMyLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwIDAtMzIgMTkyIDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMzIgMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC05NiAwek00NDggMzc2bDggMCAwIDQ4LTgwIDAgMC00OCA3MiAwem0tMjU2IDBsOCAwIDAgNDgtODAgMCAwLTQ4IDcyIDB6Il19LFdBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy1zaGllbGQiLGljb246WzU3Niw1MTIsW10sImU0ZDgiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDEuMiAwYy0xMi41LTE0LjctMjMuMi0zMC44LTMxLjgtNDhsLTg5LjUgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDAgMC0yNi43YzAtMTguMSA2LjEtMzUuMiAxNi42LTQ4LjgtLjQtMS40LS42LTIuOS0uNi00LjVsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxIDg2LjctMjguOWMzLjEtMSA2LjItMS44IDkuMy0yLjVMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00NDUuMyA0ODguNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il19LEdBZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlIixpY29uOls1NzYsNTEyLFtdLCJmMTIxIiwiTTM2MC44IDEuMmMtMTctNC45LTM0LjcgNS0zOS42IDIybC0xMjggNDQ4Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMTI4LTQ0OGM0LjktMTctNS0zNC43LTIyLTM5LjZ6bTY0LjYgMTM2LjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDczLjQgNzMuNC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHptLTI3NC43IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAxNTAuNiAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3oiXX0sQkY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmVhdGhlci1wb2ludGVkIixpY29uOls1MTIsNTEyLFsiZmVhdGhlci1hbHQiXSwiZjU2YiIsIk00NzUuMyAuMWM5LjktLjggMTkuNiAzIDI2LjYgMTBzMTAuOCAxNi43IDEwIDI2LjZjLTQgNDkuMy0xNy40IDEyNi4yLTQ2LjMgMTk5LjctMS44IDQuNS01LjUgNy45LTEwLjIgOS4zTDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDM4LjYgMGMxMiAwIDE5LjcgMTIuOCAxMy41IDIzLjEtNCA2LjctOC4zIDEzLjItMTIuNyAxOS42LTIgMi45LTUgNS04LjQgNi4xTDMxMC41IDM2NmMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDE2IDBjMTQuNiAwIDIxIDE3LjQgOC44IDI1LjQtNjggNDUtMTM3LjcgNDMuMy0xODIuNCAzMS4zLTEyLjctMy40LTI0LTkuOS0zNC40LTE3LjlMNDggNDk2Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJsODAtODAgLjUgLjVjLjctMS4zIDEuNi0yLjUgMi43LTMuNkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw4OS43IDMyNi4yYy04LjkgOC45LTI0IDQuNC0yNS04LjItNC4zLTUzLjIgOS4zLTEyMy4xIDcyLjYtMTg2LjQgOTEuMS05MS4xIDI1NC4yLTEyNC43IDMzNy45LTEzMS41eiJdfSxZQWU9QkYsWkFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY2lyY2xlLXF1ZXN0aW9uIixpY29uOls1NzYsNTEyLFtdLCJlNGVmIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xMDBjLTExLjYgMC0yMS4zIDguMi0yMy41IDE5LjItMS44IDguNy0xMC4yIDE0LjMtMTguOSAxMi41cy0xNC4zLTEwLjItMTIuNS0xOC45YzUuMi0yNS42IDI3LjgtNDQuOCA1NC45LTQ0LjggMzAuOSAwIDU2IDI1LjEgNTYgNTYgMCAxOS44LTExLjcgMzcuOC0yOS44IDQ1LjlsLTEwLjQgNC42Yy0xLjIgNy43LTcuOCAxMy41LTE1LjggMTMuNS04LjggMC0xNi03LjItMTYtMTYgMC0xMS4yIDYuNi0yMS4zIDE2LjgtMjUuOWwxMi40LTUuNWM2LjYtMi45IDEwLjgtOS40IDEwLjgtMTYuNiAwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sWEFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNpZ25hdHVyZSIsaWNvbjpbNjQwLDUxMixbXSwiZjViNyIsIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA3LjhjMCAyNy43LTIuNCA1NS4zLTcuMSA4Mi41bC04NC40IDI1LjNjLTQwLjYgMTIuMi02OC40IDQ5LjYtNjguNCA5MmwwIDMyLjQtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3Mi41IDBjNC4yIDM2IDM0LjggNjQgNzIgNjQgMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44UzQwNS43IDMyMCA0MTYgMzIwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04My42IDAgMTgtNTMuOWMzLjgtMTEuMyAuOS0yMy44LTcuNC0zMi40cy0yMC43LTExLjgtMzIuMi04LjRMMzE2LjQgMTk4LjFjMi40LTIwLjcgMy42LTQxLjQgMy42LTYyLjNsMC03LjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJ6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zLTQuNyAwLTguNS0zLjgtOC41LTguNWwwLTcxLjljMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNNjE2IDQxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjkyLjkgMGMtNi41IDE2LjMtMTMuNyAzMi4zLTIxLjYgNDhMNjE2IDQxNnoiXX0scTU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFydGgtYW1lcmljYXMiLGljb246WzUxMiw1MTIsWzEyNzc1OCwiZWFydGgiLCJlYXJ0aC1hbWVyaWNhIiwiZ2xvYmUtYW1lcmljYXMiXSwiZjU3ZCIsIk01NS43IDE5OS43bDMwLjkgMzAuOWM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMjEuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDI5LjMgMjkuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAzNy41YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDEzLjMgMTMuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDUuMy00NS4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNmwwLTM0LjdjMC0xNy43LTE0LjMtMzItMzItMzJsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMzQuNyAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42IDAtNi0yLjQtMTEuOC02LjYtMTZsLTE5LjctMTkuN0MyNDIgMTMwIDI0MCAxMjUuMSAyNDAgMTIwczItMTAgNS43LTEzLjdsMTcuMy0xNy4zYzUuOC01LjggOS4xLTEzLjcgOS4xLTIxLjkgMC03LjItMi40LTEzLjctNi40LTE4LjktMy4yLS4xLTYuNC0uMi05LjYtLjItOTUuNCAwLTE3NS43IDY0LjItMjAwLjMgMTUxLjd6TTQ2NCAyNTZjMC0zNC42LTguNC02Ny4yLTIzLjQtOTUuOC02LjQgLjktMTIuNyAzLjktMTcuOSA5LjFsLTEzLjQgMTMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC4xIDBjMi41IDAgNS0uMyA3LjMtLjggLjQtNSAuNS0xMC4xIC41LTE1LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LEtBZT1xNSxRQWU9cTUsSkFlPXE1LGVEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJyb3QiLGljb246WzY0MCw1MTIsWzEyOTM2NV0sImY3ODciLCJNNDUzLjEtMzYuN0w0NDAuOS0yNC42Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjEgMTUuNiAxNS42IDMxLjIgMzEuMiA0Ni45IDQ2LjkgMzEuMiAzMS4yIDgxLjkgMzEuMiAxMTMuMSAwbDEyLjEtMTIuMWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNkw2MDAuOSA4OC42Yy0zMS4yLTMxLjItODEuOS0zMS4yLTExMy4xIDAgMzEuMi0zMS4yIDMxLjItODEuOSAwLTExMy4xTDQ3NS43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek0zMzEuNiA5NmMtNDUuMiAwLTg3LjEgMjAuNC0xMTUgNTQuM0wyNzMuMyAyMDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxOTEuNiAxOTMuMiA2Ny4yIDQ2Ni44Yy01LjUgMTIuMS0yLjkgMjYuNCA2LjUgMzUuOXMyMy43IDEyIDM1LjkgNi41bDE0MS42LTY0LjQtNDMuOC00My44Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNSA1Ni41IDk1LjMtNDMuM2M1My4xLTI0LjEgODcuMi03Ny4xIDg3LjItMTM1LjUgMC04Mi4yLTY2LjYtMTQ4LjgtMTQ4LjgtMTQ4Ljh6Il19LFY1PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbXBlcmF0dXJlLWZ1bGwiLGljb246WzMyMCw1MTIsWyJ0ZW1wZXJhdHVyZS00IiwidGhlcm1vbWV0ZXItNCIsInRoZXJtb21ldGVyLWZ1bGwiXSwiZjJjNyIsIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNMMTM2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyMTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il19LHREZT1WNSxhRGU9VjUsaURlPVY1LHJEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZS1jZWxscy1yb3ctbG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTY3YSIsIk0yNTYgMjg4bDAtNjQgMTUzLjMgMGMxNy4xLTQyLjIgNTYtNzMuMiAxMDIuNy03OWwwLTQ5YzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZsMCAzMjBjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjQxLjMgMGMtLjktNS4yLTEuMy0xMC42LTEuMy0xNi4xbDAtNDcuOS0xMTIgMCAwLTY0IDExMy4zIDBjMy43LTIyIDE0LjgtNDEuNCAzMC43LTU1LjZsMC04LjQtMTQ0IDB6bTAtMTkybDE5MiAwIDAgNjQtMTkyIDAgMC02NHpNNTYwIDI3Mi4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek00MTYgMzY4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdfSxzRGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9sdC1saWdodG5pbmciLGljb246WzM4NCw1MTIsW10sImUwYjciLCJNMCAyNTZMMjguNSAyOGMyLTE2IDE1LjYtMjggMzEuOC0yOEwyMjguOSAwYzE1IDAgMjcuMSAxMi4xIDI3LjEgMjcuMSAwIDMuMi0uNiA2LjUtMS43IDkuNUwyMDggMTYwIDM0Ny4zIDE2MGMyMC4yIDAgMzYuNyAxNi40IDM2LjcgMzYuNyAwIDcuNC0yLjIgMTQuNi02LjQgMjAuN2wtMTkyLjIgMjgxYy01LjkgOC42LTE1LjYgMTMuNy0yNS45IDEzLjdsLTIuOSAwYy0xNS43IDAtMjguNS0xMi44LTI4LjUtMjguNSAwLTIuMyAuMy00LjYgLjktNi45TDE3NiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sbkRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb3VkLXNob3dlcnMtd2F0ZXIiLGljb246WzUxMiw1MTIsW10sImU0ZTQiLCJNMjc5LjIgNTUuN0MyNjMuOSAyMi44IDIzMC42IDAgMTkyIDAgMTM5IDAgOTYgNDMgOTYgOTYgNjAuNyA5NiAzMiAxMjQuNyAzMiAxNjBzMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGwtMS42IDBjLTcuNC0zNi41LTM5LjctNjQtNzguNC02NC0yMi4yIDAtNDIuMyA5LjEtNTYuOCAyMy43ek00MTAuNiA0NzYuMWMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6TTEwMC4xIDMwMy42YzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHMtMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS4zIDY0QzI5IDM2NSAzNS44IDM3OC42IDQ4LjQgMzgyLjhzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjMtNjR6bTEyMCAwYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHMtMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS4zIDY0Yy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjMtNjR6bTExMiAwYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHMtMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS4zIDY0Yy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjMtNjR6bTEyMCAwYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHMtMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS4zIDY0Yy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjMtNjR6Il19LEhGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLWxvbmciLGljb246WzMyMCw1MTIsWyJsb25nLWFycm93LXVwIl0sImYxNzYiLCJNMTgyLjYtMjIuNmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTI4IDc3LjMgMTI4IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDM0LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjh6Il19LG9EZT1IRixnbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhZGRyZXNzLWNhcmQiLGljb246WzU3Niw1MTIsWzYyMTQwLCJjb250YWN0LWNhcmQiLCJ2Y2FyZCJdLCJmMmJiIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTgwIDI1Nmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw4MCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjQwLTQ4bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA5NmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LGxEZT1nbSxjRGU9Z20sZERlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuZ2xlLXJpZ2h0IixpY29uOlsyNTYsNTEyLFs4MjUwXSwiZjEwNSIsIk0yNDcuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTc5LjIgMjU2IDQxLjkgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MHoiXX0scUY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1tZWgiLGljb246WzUxMiw1MTIsWzEyODUyOCwibWVoIl0sImYxMWEiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMTc2IDMyMGwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LHBEZT1xRixoRGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtZnJvbS1ncm91bmQtd2F0ZXIiLGljb246WzY0MCw1MTIsW10sImU0YjUiLCJNMzAzIDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsODggODhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDcgMCAyNzguMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI3OC4xLTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDMwMyA3ek0yNDAgMTkybDAgMTYzLjFjLTEwLjYtMi4yLTIxLjMtMy4yLTMyLTMuMS0zMi41IC4yLTY0LjkgMTAuNy05Mi4zIDMxLjQtOC44IDYuNi0xNS45IDEwLjktMjEuNyAxMy41bC0uOCAuNGMtMy43IDEuNy02LjQgMi45LTkuOCAuMy02LTQuNS0xMi42LTgtMTkuMy0xMC40TDY0IDI0MGMwLTI2LjUgMjEuNS00OCA0OC00OGwxMjggMHptMzM2IDQ4bDAgMTU1LjJjLTEuMSAuOC0yLjIgMS41LTMuMyAyLjQtNC4xIDMuMS04LjMgLjgtMTIuNi0xLjUtLjYtLjMtMS4yLS42LTEuOC0xLTUuMi0yLjctMTEuMS02LjYtMTgtMTEuNy0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0xNS41IC4xLTMxIDIuNS00NiA3LjNsMC0xNjcuMyAxMjggMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNNDAzLjQgNDc2LjFDMzc5LjEgNDk0LjMgMzUxLjEgNTEyIDMyMCA1MTJzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdfSx1RGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFwIixpY29uOls1MTIsNTEyLFsxMjg1MDYsNjIwNzJdLCJmMjc5IiwiTTUxMiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEwzNDkuNSA3Ny41IDE3MC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM2LjggODguOCAwIDk5LjkgMCAxMTJMMCA0NjRjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3OS40IDU5LjhjOC4xIDIuNyAxNi44IDIuMSAyNC40LTEuN2wxMjgtNjRjMTAuOC01LjQgMTcuNy0xNi41IDE3LjctMjguNmwwLTM1MnpNMTkyIDM3Ni45bDAtMjg0LjUgMTI4IDQyLjcgMCAyODQuNS0xMjgtNDIuN3oiXX0sZkRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItcGx1cyIsaWNvbjpbNjQwLDUxMixbXSwiZjIzNCIsIk0yODUuNyAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzcuNyA1MTJDNjEuMyA1MTIgNDggNDk4LjcgNDggNDgyLjMgNDggMzgzLjggMTI3LjggMzA0IDIyNi4zIDMwNGw1OS40IDB6TTUyOCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4LTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHoiXX0sbURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZlbnVzIixpY29uOlszODQsNTEyLFs5NzkyXSwiZjIyMSIsIk04MCAxNzZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMjIzLjkgMzQ5LjFDMzA1LjkgMzM0LjEgMzY4IDI2Mi4zIDM2OCAxNzYgMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDg2LjMgNjIuMSAxNTguMSAxNDQuMSAxNzMuMS0uMSAxLS4xIDEuOS0uMSAyLjlsMCA2NC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0YzAtMSAwLTEuOS0uMS0yLjl6Il19LGdEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWFncmFtLXN1Y2Nlc3NvciIsaWNvbjpbNDQ4LDUxMixbXSwiZTQ3YSIsIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgNDgwTDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xNjAgMTYwbDAtNjQtOTYgMCAwIDY0IDk2IDB6Il19LGJEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFkLXNpZGUtY291Z2gtc2xhc2giLGljb246WzU3Niw1MTIsW10sImUwNjIiLCJNNTM1LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUzNy4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDI1LTI1IDAtNDQ3LjJjMC0xNSAxMC41LTI4LjMgMjUuNC0yOS44IDcuNC0uNyAxNC45LTEuMSAyMi42LTEuMSAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDIuMiAyLjYgMjI3LjUtMjI3LjV6TTEzMy44IDUxMkwyODggMzU3LjggMjg4IDQxNmMwIDUzLTQzIDk2LTk2IDk2bC01OC4yIDB6TTE3NiAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMzYgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tODggNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4LTI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LFZGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYWdyYW0tcHJvamVjdCIsaWNvbjpbNTEyLDUxMixbInByb2plY3QtZGlhZ3JhbSJdLCJmNTQyIiwiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDEyOCAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTEyOCAwIDAgMTZjMCA3LjMtMS43IDE0LjMtNC42IDIwLjVsNjguNiA5MS41IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTcuMyAxLjctMTQuMyA0LjYtMjAuNUwxMjggMjI0IDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHoiXX0sdkRlPVZGLG5nPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlcm1pbmFsIixpY29uOls1MTIsNTEyLFtdLCJmMTIwIiwiTTkuNCAxMTguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxNDYuNyAyNTYgOS40IDExOC42ek0yMjQgMzg0bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0seURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWZpcmUiLGljb246WzY0MCw1MTIsW10sImU1MGMiLCJNNDQ4IDE5MmMxNC4xIC40IDIzLjggMTEuNCAzMi43IDIxLjcgMiAyLjMgNCA0LjYgNiA2LjdsMTkgMTkuOSAxMi4yLTEzLjhjNS40LTYuMSAxMy4zLTguOSAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMiAyNi4yIDg4LjIgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjEgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwxNDcuNSAxMzdjLTE5LjItNC4zLTQwIC41LTU1LjUgMTQuNC0zNi40IDMyLjYtNjcuNyA2OS44LTkwLjMgMTA2LjQtMTAuMyAxNi42LTE5LjcgMzQuOS0yNi44IDUzLjdMMjcyIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA2NC42IDBjNy4zIDE3LjIgMTYuOCAzMy40IDI4LjIgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek00ODkuMyAzNDMuN2MtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjcgNTEuOS01NC43IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTM2LjUtMzctNzMtNTQuNy04OC40eiJdfSx4RGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFzayIsaWNvbjpbNTc2LDUxMixbXSwiZjZmYSIsIk0yODggNjRDNjQgNjQgMCAxNjAgMCAyNzJTODAgNDQ4IDE3NiA0NDhsOC40IDBjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMjMuMi00Ni4zYzQuNC04LjggMTMuMy0xNC4zIDIzLjItMTQuM3MxOC44IDUuNSAyMy4yIDE0LjNsMjMuMiA0Ni4zYzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNGw4LjQgMGM5NiAwIDE3Ni02NCAxNzYtMTc2UzUxMiA2NCAyODggNjR6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTMyMC02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXX0sd0RlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imh1cnJpY2FuZSIsaWNvbjpbMzg0LDUxMixbXSwiZjc1MSIsIk0wIDIwOEMwIDEwNC40IDc1LjcgMTguNSAxNzQuOSAyLjYgMTg0IDEuMiAxOTIgOC42IDE5MiAxNy45bDAgNjMuM2MwIDguNCA2LjUgMTUuMyAxNC43IDE2LjUgMTAwLjMgMTQuOSAxNzcuMyAxMDEuMyAxNzcuMyAyMDUuNyAwIDEwMy42LTc1LjcgMTg5LjUtMTc0LjkgMjA1LjQtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJsMC02My4zQzE5MiA0MjEuOSAxODUuNSA0MTUgMTc3LjMgNDEzLjcgNzcgMzk4LjkgMCAzMTIuNCAwIDIwOHptMjg4IDQ4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptLTk2LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sakY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFydGgtYWZyaWNhIixpY29uOls1MTIsNTEyLFsxMjc3NTcsImdsb2JlLWFmcmljYSJdLCJmNTdjIiwiTTQ0Ny42IDE3NWMtMzEuNi03NC42LTEwNS41LTEyNy0xOTEuNi0xMjctMjIuMSAwLTQzLjQgMy41LTYzLjQgOS44LS40IDItLjYgNC4xLS42IDYuMmwwIDczLjRjMCAxMi41IDEwLjEgMjIuNiAyMi42IDIyLjYgNiAwIDExLjgtMi40IDE2LTYuNmwxNi0xNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsNS41IDBjMjguNSAwIDQyLjggMzQuNSAyMi42IDU0LjYtNiA2LTE0LjEgOS40LTIyLjYgOS40bC02MS41IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC0yMS4zIDIxLjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDIuNyAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDI5LjMtMjkuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC0xOC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTZsMC0zNC43YzAtOC41LTMuNC0xNi42LTkuNC0yMi42bC0xNi0xNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQ1IDBjMTIuNCAwIDIyLjctNy4xIDI4LTE3ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxNRGU9akYsVUY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGh1bWJ0YWNrIixpY29uOlszODQsNTEyLFsxMjgyMDQsMTI4MzkyLCJ0aHVtYi10YWNrIl0sImYwOGQiLCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjkuNSAwIDEwLjMgMTM0LjFjMzcuMSAyMS4yIDY1LjggNTYuNCA3OC4yIDk5LjdsMy44IDEzLjRjMi44IDkuNyAuOCAyMC01LjIgMjguMVMzNjIgMzUyIDM1MiAzNTJMMzIgMzUyYy0xMCAwLTE5LjUtNC43LTI1LjUtMTIuN3MtOC0xOC40LTUuMi0yOC4xTDUgMjk3LjhjMTIuNC00My4zIDQxLTc4LjUgNzguMi05OS43TDkzLjUgNjQgNjQgNjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyek0xNjAgNDAwbDY0IDAgMCAxMTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMTJ6Il19LHpEZT1VRixrRGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1wb2ludC1kb3duIixpY29uOlszODQsNTEyLFtdLCJmMGE3IiwiTTMyIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjA4LTY0IDAgMCAyMDh6TTIyNCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS02NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE2MC05NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NHptLTk2LTg4bDAgLjZjOS40LTUuNCAyMC4zLTguNiAzMi04LjYgMTMuMiAwIDI1LjQgNCAzNS42IDEwLjggOC43LTI0LjkgMzIuNS00Mi44IDYwLjQtNDIuOCAxMS43IDAgMjIuNiAzLjEgMzIgOC42bDAtOC42QzM4NCA3MS42IDMxMi40IDAgMjI0IDBMMTYyLjMgMEMxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5bDAgMjdjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGwtNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcyeiJdfSxXRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLW1laC1ibGFuayIsaWNvbjpbNTEyLDUxMixbMTI4NTY2LCJtZWgtYmxhbmsiXSwiZjVhNCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yMDgtNDhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTI4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0sU0RlPVdGLGo1PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbXBlcmF0dXJlLWVtcHR5IixpY29uOlszMjAsNTEyLFsidGVtcGVyYXR1cmUtMCIsInRoZXJtb21ldGVyLTAiLCJ0aGVybW9tZXRlci1lbXB0eSJdLCJmMmNiIiwiTTY0IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxNiA0NDcuNSAxNiAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMNjQgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6Il19LENEZT1qNSxfRGU9ajUsVERlPWo1LExEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3JkZXItbm9uZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjg1MCIsIk0zMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyek0xNjAgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0yODggNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpNMTYwIDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6TTI4OCAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTQxNiA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyem0wLTM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTMyIDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNNDE2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTMyIDE2MGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAgMTkyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNDE2IDE2MGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6Il19LCREZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoaWdobGlnaHRlciIsaWNvbjpbNTc2LDUxMixbXSwiZjU5MSIsIk0zMTUgMzE1TDQ3My40IDk5LjkgNDQ0LjEgNzAuNiAyMjkgMjI5IDMxNSAzMTV6bS0xODcgNWwwIDAgMC03MS43YzAtMTUuMyA3LjItMjkuNiAxOS41LTM4LjZMNDIwLjYgOC40QzQyOCAyLjkgNDM3IDAgNDQ2LjIgMCA0NTcuNiAwIDQ2OC41IDQuNSA0NzYuNiAxMi42bDU0LjggNTQuOGM4LjEgOC4xIDEyLjYgMTkgMTIuNiAzMC41IDAgOS4yLTIuOSAxOC4yLTguNCAyNS42TDMzNC40IDM5Ni41Yy05IDEyLjMtMjMuNCAxOS41LTM4LjYgMTkuNWwtNzEuNyAwLTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTUwLjctNTAuN2MtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMMTI4IDMyMHpNNyA0NjYuM2w1MS43LTUxLjcgNzAuNiA3MC42LTE5LjcgMTkuN2MtNC41IDQuNS0xMC42IDctMTcgN0wyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNC43YzAtNi40IDIuNS0xMi41IDctMTd6Il19LEFEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsLXdhdmUiLGljb246WzUxMiw1MTIsW10sImY1M2EiLCJNMCA0MTkuNkwwIDEwOS41YzAtMjMuMiAyNC4xLTM4LjYgNDYuMy0zMiA4Ny43IDI2LjIgMTQ5LjcgNS41IDIxMi4xLTE1LjMgNjQuNS0yMS41IDEyOS40LTQzLjEgMjIzLjMtMTMuMSAxOC41IDUuOSAzMC4zIDIzLjggMzAuMyA0My4zbDAgMzEwLjFjMCAyMy4yLTI0LjEgMzguNi00Ni4yIDMyLTg3LjctMjYuMi0xNDkuOC01LjUtMjEyLjEgMTUuMy02NC41IDIxLjUtMTI5LjQgNDMuMS0yMjMuMyAxMy4xLTE4LjUtNS45LTMwLjMtMjMuOC0zMC4zLTQzLjN6TTMzNiAyNTZjMC01My0zNS44LTk2LTgwLTk2cy04MCA0My04MCA5NiAzNS44IDk2IDgwIDk2IDgwLTQzIDgwLTk2ek0xMjAgNDEzLjZjNC40IDAgNy45LTMuOCA3LjItOC4xLTQuNi0yNy44LTI3LTQ5LjUtNTUuMi01My00LjQtLjUtOCAzLjEtOCA3LjVsMCAzOS45YzAgMy42IDIuNCA2LjggNiA3LjcgMTcuOSA0LjIgMzQuMyA2LjEgNTAgNi4xem0zMTguNS01MS4xYzUgLjggOS41LTMgOS41LThsMC00Mi42YzAtNC40LTMuNi04LjEtOC03LjUtMjUuMiAzLjEtNDUuOSAyMC45LTUzLjIgNDQuNi0xLjQgNC43IDIuMyA5LjEgNy4yIDkuMiAxNC4yIC40IDI5IDEuNyA0NC40IDQuM3pNNDQ4IDE1MmwwLTM5LjljMC0zLjYtMi41LTYuOC02LTcuNy0xNy45LTQuMi0zNC4zLTYuMS01MC02LjEtNC40IDAtNy45IDMuOC03LjIgOC4xIDQuNiAyNy44IDI3IDQ5LjUgNTUuMiA1MyA0LjQgLjUgOC0zLjEgOC03LjV6TTEyNS4yIDE2Mi45YzEuNC00LjctMi4zLTkuMS03LjItOS4yLTE0LjItLjQtMjktMS43LTQ0LjQtNC4zLTUtLjgtOS41IDMtOS41IDhMNjQgMjAwYzAgNC40IDMuNiA4LjEgOCA3LjUgMjUuMi0zLjEgNDUuOS0yMC45IDUzLjItNDQuNnoiXX0sRERlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvaWxldC1wYXBlci1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZTA3MiIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05NC41LTk0LjVjNDAuMi0yMyA2OS41LTk2LjkgNjkuNS0xODQuNiAwLTEwNi00My0xOTItOTYtMTkycy05NiA4Ni05NiAxOTJjMCAyNC4xIDIuMiA0Ny4yIDYuMyA2OC40TDMwNCAyMzguMiAzMDQgMjI0YzAtNTguOSAxMS44LTExNC41IDMzLjItMTU3LjIgNS45LTExLjcgMTMuMS0yMy43IDIxLjktMzQuOEwxMjggMzJjLTguMyAwLTE2LjQgMi4xLTI0LjEgNi4xbC02My02M3pNMzIgMjI0bDAgMjY0YzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE2MCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtMTE0LjItMjU2LTI1NkMzNy45IDE0OC4yIDMyIDE4NC43IDMyIDIyNHptNDE2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXX0sRURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtc2hpZWxkIixpY29uOls1NzYsNTEyLFtdLCJlNGYwIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjAxLjIgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC0zNC40IDIyLTY1IDU0LjctNzUuOWwxMTItMzcuM2MzLjEtMSA2LjItMS44IDkuMy0yLjVsMC0zOS4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2em04Ny44IDMxMi41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXX0sUERlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRleHQtaGVpZ2h0IixpY29uOls1NzYsNTEyLFtdLCJmMDM0IiwiTTQwIDMyQzE3LjkgMzIgMCA0OS45IDAgNzJsMCA1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgNjQgMCAwIDMyMC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzIwIDY0IDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNTZjMC0yMi4xLTE3LjktNDAtNDAtNDBMNDAgMzJ6TTQzOC42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTIyOS41IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTYtNi0xNC4xLTkuNC0yMi42LTkuNHMtMTYuNiAzLjQtMjIuNiA5LjRsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAyMjkuNS05LjQtOS40eiJdfSxHRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4tdG9uZ3VlIixpY29uOls1MTIsNTEyLFsxMjg1MzksImdyaW4tdG9uZ3VlIl0sImY1ODkiLCJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyNDBsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSxJRGU9R0YsTkRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtc2lnbmF0dXJlIixpY29uOls2NDAsNTEyLFtdLCJmNTczIiwiTTY0LjEgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjc3LjYgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgOTcuNS0xMzIgMTMyLTQyLjEgMC0xNi4xLTUzLjZjLTQuNy0xNS43LTE5LjEtMjYuNC0zNS41LTI2LjQtMTEuMyAwLTIxLjkgNS4xLTI4LjkgMTMuOUwxMzMuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDMxLjUgMGMtLjkgMy4xLTEuNyA2LjMtMi4zIDkuNWwtMTAuOSA1NC41LTE0Ni4yIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5My41IDAtMTE3LjUtMTE3LjV6bTYwLjIgNDA4LjRjMi41LTEyLjQgOC42LTIzLjggMTcuNS0zMi43bDExOC45LTExOC45IDgwIDgwLTExOC45IDExOC45Yy04LjkgOC45LTIwLjMgMTUtMzIuNyAxNy41bC01OS42IDExLjljLS45IC4yLTEuOSAuMy0yLjkgLjMtOCAwLTE0LjYtNi41LTE0LjYtMTQuNiAwLTEgLjEtMS45IC4zLTIuOWwxMS45LTU5LjZ6bTI2Ny44LTEyM2wtMjguOCAyOC44LTgwLTgwIDI4LjgtMjguOGMyMi4xLTIyLjEgNTcuOS0yMi4xIDgwIDBzMjIuMSA1Ny45IDAgODB6Il19LEZEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWlsZGluZy13aGVhdCIsaWNvbjpbNjQwLDUxMixbXSwiZTRkYiIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0OS4zIDBjLTYtMTQuOC05LjMtMzEtOS4zLTQ4IDAtMTcuNyA3LjItMzMuNyAxOC44LTQ1LjMtMTEuOS0xOS40LTE4LjgtNDIuMy0xOC44LTY2LjcgMC0xNy43IDcuMi0zMy43IDE4LjgtNDUuMy0xMS45LTE5LjQtMTguOC00Mi4zLTE4LjgtNjYuNyAwLTI1LjIgMTQuNS00Ni45IDM1LjYtNTcuNC0yLjQtNy4xLTMuNi0xNC43LTMuNi0yMi42bDAtMzJDMzY4IDk2LjcgMzg4IDcwLjEgNDE1LjkgNjAuMSA0MTMuOSAyNi42IDM4NiAwIDM1MiAwTDk2IDB6TTIwOCAzNTJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTk2IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTI4IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptMzUyIDBsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODB6bTAgMTEyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODB6TTQ5NiA1MjhjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnptLTE2LTk2YzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDB6bTE2LTEyOGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2ek01MTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTk2IDY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek00NDAgMTA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sT0RlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLW1pbnVzIixpY29uOls2NDAsNTEyLFtdLCJlNTVlIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnoiXX0sYm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZnV0Ym9sIixpY29uOls1MTIsNTEyLFs5OTE3LCJmdXRib2wtYmFsbCIsInNvY2Nlci1iYWxsIl0sImYxZTMiLCJNNDE3LjMgMzYwLjFsLTcxLjYtNC44Yy01LjItLjMtMTAuMyAxLjEtMTQuNSA0LjJzLTcuMiA3LjQtOC40IDEyLjVsLTE3LjYgNjkuNkMyODkuNSA0NDUuOCAyNzMgNDQ4IDI1NiA0NDhzLTMzLjUtMi4yLTQ5LjItNi40TDE4OS4yIDM3MmMtMS4zLTUtNC4zLTkuNC04LjQtMTIuNXMtOS4zLTQuNS0xNC41LTQuMmwtNzEuNiA0LjhjLTE3LjYtMjcuMi0yOC41LTU5LjItMzAuNC05My42TDEyNSAyMjguM2M0LjQtMi44IDcuNi03IDkuMi0xMS45czEuNC0xMC4yLS41LTE1bC0yNi43LTY2LjZDMTI4IDEwOS4yIDE1NS4zIDg5IDE4Ni43IDc2LjlsNTUuMiA0NmM0IDMuMyA5IDUuMSAxNC4xIDUuMXMxMC4yLTEuOCAxNC4xLTUuMWw1NS4yLTQ2YzMxLjMgMTIuMSA1OC43IDMyLjMgNzkuNiA1Ny45bC0yNi43IDY2LjZjLTEuOSA0LjgtMi4xIDEwLjEtLjUgMTVzNC45IDkuMSA5LjIgMTEuOWw2MC43IDM4LjJjLTEuOSAzNC40LTEyLjggNjYuNC0zMC40IDkzLjZ6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNC4xLTMyNS43Yy04LjQtNi4xLTE5LjgtNi4xLTI4LjIgMEwxOTQgMjIxYy04LjQgNi4xLTExLjkgMTYuOS04LjcgMjYuOGwxOC4zIDU2LjNjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42bDU5LjIgMGMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHoiXX0sUkRlPWJtLEJEZT1ibSxZRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtcGx1cyIsaWNvbjpbNTEyLDUxMixbInBsdXMtY2lyY2xlIl0sImYwNTUiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIzMiAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdfSxIRGU9WUYscURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyYXppbGlhbi1yZWFsLXNpZ24iLGljb246WzUxMiw1MTIsW10sImU0NmMiLCJNNDAwIDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDguOSAwYy0yNiAwLTQ3LjEgMjEuMS00Ny4xIDQ3LjEgMCAyMi41IDE1LjkgNDEuOCAzNy45IDQ2LjJsMzIuOCA2LjZjNTEuOSAxMC40IDg5LjMgNTYgODkuMyAxMDkgMCA1MC42LTMzLjggOTMuMy04MCAxMDYuN2wwIDIwLjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0LjkgMGMyNiAwIDQ3LjEtMjEuMSA0Ny4xLTQ3LjEgMC0yMi41LTE1LjktNDEuOC0zNy45LTQ2LjJsLTMyLjgtNi42Yy01MS45LTEwLjQtODkuMy01Ni04OS4zLTEwOSAwLTUwLjYgMzMuOC05My4yIDgwLTEwNi43TDM2OCA0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYweiJdfSxWRGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Rhci1hbmQtY3Jlc2NlbnQiLGljb246WzUxMiw1MTIsWzk3NzBdLCJmNjk5IiwiTTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMzMgMCA2NC42IDYuMyA5My42IDE3LjcgNy40IDIuOSAxMS41IDEwLjcgOS44IDE4LjRzLTguOCAxMy0xNi43IDEyLjRjLTQuOC0uMy05LjctLjUtMTQuNi0uNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOGM0LjkgMCA5LjgtLjIgMTQuNi0uNSA3LjktLjUgMTUgNC43IDE2LjcgMTIuNHMtMi40IDE1LjUtOS44IDE4LjRDMzIwLjYgNTA1LjcgMjg5IDUxMiAyNTYgNTEyIDExNC42IDUxMiAwIDM5Ny40IDAgMjU2ek0zNzUuNCAxMzcuNGMzLjUtNy4xIDEzLjctNy4xIDE3LjIgMGwzMS41IDYzLjhjMS40IDIuOCA0LjEgNC44IDcuMiA1LjNsNzAuNCAxMC4yYzcuOSAxLjEgMTEgMTAuOCA1LjMgMTYuNGwtNTAuOSA0OS42Yy0yLjMgMi4yLTMuMyA1LjQtMi44IDguNWwxMiA3MC4xYzEuMyA3LjgtNi45IDEzLjgtMTMuOSAxMC4xbC02My0zMy4xYy0yLjgtMS41LTYuMS0xLjUtOC45IDBsLTYzIDMzLjFjLTcgMy43LTE1LjMtMi4zLTEzLjktMTAuMWwxMi03MC4xYy41LTMuMS0uNS02LjMtMi44LTguNUwyNjEgMjMzLjFjLTUuNy01LjYtMi42LTE1LjIgNS4zLTE2LjRsNzAuNC0xMC4yYzMuMS0uNSA1LjgtMi40IDcuMi01LjNsMzEuNS02My44eiJdfSxaRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXN1cnByaXNlIixpY29uOls1MTIsNTEyLFsxMjg1NTgsInN1cnByaXNlIl0sImY1YzIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxqRGU9WkYsVURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imhvc3BpdGFsLXVzZXIiLGljb246WzY0MCw1MTIsW10sImY4MGQiLCJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0yNDggODhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6TTQxNiAzMDRhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il19LFdEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1kb3duLXVwLWxvY2siLGljb246WzU3Niw1MTIsW10sImU0YjAiLCJNMjYyLjYgNDIyLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMjUuNCAyNS40IDAtMTE0LjctNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyNTYgMCAwLTExNC43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTI1LjQtMjUuNCAwIDk0LjhjLTI1LjMgMjAuMy00Mi44IDUwLjEtNDcgODMuOWwtMTQ1IDAgMCAxMTQuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMTkyIDMybDAgMTQ0LTY0IDAgMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDk2IDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sWEY9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9sZGVyIixpY29uOls1MTIsNTEyLFsxMjgxOTMsMTI4NDQ3LDYxNzE2LCJmb2xkZXItYmxhbmsiXSwiZjA3YiIsIk02NCA0NDhsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjk4LjcgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI0MS4xIDQ0LjhDMjMwIDM2LjUgMjE2LjUgMzIgMjAyLjcgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXX0sR0RlPVhGLFlEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob2xseS1iZXJyeSIsaWNvbjpbNTEyLDUxMixbXSwiZjdhYSIsIk0yNTYuMiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTI3NyAzODMuOGMxIC4xIDIuMSAuMiAzLjIgLjIgMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyMi43YzAgMTYuNCAxNiAyNy45IDMxLjYgMjIuOGwxMi44LTQuM2MxOC02IDM3LjMtNi41IDU1LjYtMS41bDE5LjQgNS4zYzE3LjkgNC45IDM0LjQtMTEuNiAyOS41LTI5LjVMNDk1LjkgNDUyYy01LTE4LjMtNC40LTM3LjYgMS41LTU1LjZsNC4zLTEyLjhjNS4yLTE1LjUtNi40LTMxLjYtMjIuOC0zMS42LTM0LjYgMC02Mi43LTI4LjEtNjIuNy02Mi43bDAtMzJjMC0xNi40LTE2LTI3LjktMzEuNi0yMi44bC0xMi44IDQuM2MtMTggNi0zNy4zIDYuNS01NS42IDEuNWwtMjkuNi04LjFjLTIuOS0uOC01LjktMS04LjctLjcgNC4yIDkuNyA1LjggMjAuOCAzLjcgMzIuM2wtNi4zIDM0LjhjLTEuNSA4LjQtMS40IDE3IC41IDI1LjNsNS4zIDIzLjljMi44IDEyLjcgMS4xIDI1LjItNCAzNS45ek0xMjcuOCAyMzQuNWMtMTUuNS01LjItMzEuNiA2LjQtMzEuNiAyMi44bDAgMzJjMCAzNC42LTI4LjEgNjIuNy02Mi43IDYyLjctMTYuNCAwLTI3LjkgMTYtMjIuOCAzMS42TDE1IDM5Ni40YzYgMTggNi41IDM3LjMgMS41IDU1LjZsLTUuMyAxOS40QzYuNCA0ODkuNCAyMi44IDUwNS44IDQwLjcgNTAxbDE5LjQtNS4zYzE4LjMtNSAzNy42LTQuNSA1NS42IDEuNWwxMi44IDQuM2MxNS41IDUuMiAzMS42LTYuNCAzMS42LTIyLjhsMC0zMmMwLTM0LjYgMjguMS02Mi43IDYyLjctNjIuNyAxNi40IDAgMjcuOS0xNiAyMi44LTMxLjZsLTQuMy0xMi44Yy02LTE4LTYuNS0zNy4zLTEuNS01NS42bDUuMy0xOS40YzQuOS0xNy45LTExLjYtMzQuNC0yOS41LTI5LjVsLTE5LjQgNS4zYy0xOC4zIDUtMzcuNiA0LjQtNTUuNi0xLjVsLTEyLjgtNC4zek0zODQuMiAxNDRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0sWkRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZlbnVzLWRvdWJsZSIsaWNvbjpbNjQwLDUxMixbOTg5MF0sImYyMjYiLCJNMTkyIDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM2OCAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0LjEgMTczLjEgLjEgMSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS04Mi0xNS0xNDQuMS04Ni44LTE0NC4xLTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2UzM2OCA3OC44IDM2OCAxNzZ6TTM1Ny41IDMyN2MxNC40LTE1LjggMjYuNi0zMy43IDM2LjEtNTMuMSAxNi4xIDkgMzQuNyAxNC4xIDU0LjUgMTQuMSA2MS45IDAgMTEyLTUwLjEgMTEyLTExMlM1MDkuOSA2NCA0NDggNjRjLTE5LjggMC0zOC4zIDUuMS01NC41IDE0LjEtOS41LTE5LjQtMjEuNi0zNy4zLTM2LjEtNTMuMSAyNi40LTE1LjkgNTcuNC0yNSA5MC41LTI1IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIC45IC4xIDEuOSAuMSAyLjlsMCA2NCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NGMwLTEgMC0xLjkgLjEtMi45LTIxLjEtMy45LTQwLjktMTEuNS01OC42LTIyLjJ6Il19LFhEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbGlwYm9hcmQtcXVlc3Rpb24iLGljb246WzM4NCw1MTIsW10sImU0ZTMiLCJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAyNDhjMTYuMSAwIDI5LjIgMTMuMSAyOS4yIDI5LjIgMCA4LjctMy4xIDEzLjktNi45IDE3LjctNC41IDQuNC0xMC43IDcuNS0xNi44IDkuNS0xNC45IDUtMjkuNSAxOS4zLTI5LjUgMzkuNSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMS41IDAgMjEuMi04LjEgMjMuNS0xOSAxOS4yLTcuMSA1My43LTI2LjMgNTMuNy03MS44IDAtNDIuNi0zNC42LTc3LjItNzcuMi03Ny4ycy03Ny4yIDM0LjYtNzcuMiA3Ny4yYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xNi4xIDEzLjEtMjkuMiAyOS4yLTI5LjJ6bTI4IDE2OGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6Il19LEtEZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3Rkb2ciLGljb246WzUxMiw1MTIsWzEyNzc4OV0sImY4MGYiLCJNMjg4IDBjLTIwLjUgMC00MC4xIDguMS01NC42IDIyLjZMMjIuNiAyMzMuNEM4LjEgMjQ3LjkgMCAyNjcuNSAwIDI4OCAwIDMwMC4yIDIuOSAzMTIuMSA4LjIgMzIyLjdMMzIyLjcgOC4yQzMxMi4xIDIuOSAzMDAuMiAwIDI4OCAwek0yMjQgNTEyYzIwLjUgMCA0MC4xLTguMSA1NC42LTIyLjZMNDg5LjQgMjc4LjZjMTQuNS0xNC41IDIyLjYtMzQuMSAyMi42LTU0LjYgMC0xMi4yLTIuOS0yNC4xLTguMi0zNC43TDE4OS4zIDUwMy44YzEwLjcgNS40IDIyLjYgOC4yIDM0LjcgOC4yek00NTYuNiAxNjguNmMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0yODggMjg4Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjFzODEuOSAzMS4yIDExMy4xIDBsMjg4LTI4OHoiXX0sUURlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLWZyb20tYnJhY2tldCIsaWNvbjpbNDQ4LDUxMixbXSwiZTA5YSIsIk0yNDYuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAxOTIgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHpNNjQgMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMzM0LjMgMCAzNTJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXX0sSkRlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3Jvc2NvcGUiLGljb246WzUxMiw1MTIsWzEyODMwMF0sImY2MTAiLCJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NCAzMiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzM5MC43IDQ0OCAzMjAgNDQ4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYuOSAwYzMwLjQtMzQgNDguOS03OC44IDQ4LjktMTI4IDAtMTA2LTg2LTE5Mi0xOTItMTkybC0zMiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6TTEyMCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdfSxlRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQiLGljb246WzU3Niw1MTIsWzk3MjldLCJmMGMyIiwiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0bDMwNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNTEuNi0zMC41LTk2LjEtNzQuNS0xMTYuMyA2LjctMTMuMSAxMC41LTI4IDEwLjUtNDMuNyAwLTUzLTQzLTk2LTk2LTk2LTE3LjcgMC0zNC4yIDQuOC00OC40IDEzLjEtMjQuMS00NS44LTcyLjItNzcuMS0xMjcuNi03Ny4xLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOCAuNyAxNS45IDEuOSAyMy41LTU2LjkgMTkuMi05Ny45IDczLjEtOTcuOSAxMzYuNXoiXX0sdEVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhc2ViYWxsLWJhdC1iYWxsIixpY29uOls1NzYsNTEyLFtdLCJmNDMyIiwiTTQ2NC4xIDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptOC40LTU3NmMxNS4xIDAgMjkuNyA1LjggNDAuNyAxNi4ybDQ3LjIgNDQuOGMxMi42IDEyIDE5LjEgMjkgMTcuNSA0Ni4zLTEuMiAxMy4zLTcgMjUuOC0xNi41IDM1LjJMMzYzLjEgMzA5Yy03LjMgNy4zLTE1LjcgMTMuNC0yNSAxOEwyMDYgMzkzYy05LjIgNC42LTE3LjcgMTAuNy0yNSAxOGwtOTIgOTIgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN2wtMS44LTEuNy00OC00OC0xLjctMS44Yy03LjctOS40LTcuMS0yMy4zIDEuNy0zMi4xczIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgOTItOTJjNy4zLTcuMyAxMy40LTE1LjcgMTgtMjVsNjYuMS0xMzIuMWM0LjYtOS4yIDEwLjctMTcuNyAxOC0yNUw0MzAuOC0xNC43QzQ0MS45LTI1LjggNDU2LjktMzIgNDcyLjUtMzJ6Il19LEtGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1yZWFyIixpY29uOls1MTIsNTEyLFsiY2FyLWFsdCJdLCJmNWRlIiwiTTE2NS40IDk2bDE4MS4yIDBjMTMuNiAwIDI1LjcgOC42IDMwLjIgMjEuNGwyNi4xIDc0LjYtMjkzLjggMCAyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHptLTkwLjYgLjNMMzkuNiAxOTYuOEMxNi40IDIwNi40IDAgMjI5LjMgMCAyNTZsMCA5NmMwIDIzLjcgMTIuOSA0NC40IDMyIDU1LjRMMzIgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyNTYgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00MC42YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjRsMC05NmMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiA5Ni4zQzQyMy43IDU3LjggMzg3LjQgMzIgMzQ2LjYgMzJMMTY1LjQgMzJjLTQwLjggMC03Ny4xIDI1LjgtOTAuNiA2NC4zek0yMDggMjg4bDk2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC05NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDI4MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzYwLTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LGFFZT1LRixRRj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aHVtYnRhY2stc2xhc2giLGljb246WzU3Niw1MTIsWyJ0aHVtYi10YWNrLXNsYXNoIl0sImU2OGYiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MTcuOCAzNTIgNDQ4IDM1MmMxMCAwIDE5LjUtNC43IDI1LjUtMTIuN3M4LTE4LjQgNS4yLTI4LjFMNDc1IDI5Ny44Yy0xMi40LTQzLjMtNDEtNzguNS03OC4yLTk5LjdMMzg2LjUgNjQgNDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMTYwIDBjLTcuNCAwLTE0LjEgMi41LTE5LjUgNi42TDE5MC4xIDU2LjMgMTg1LjMgMTE5LjQgNDEtMjQuOXpNMjgyLjIgMzUyTDE0OS43IDIxOS42Yy0yMi43IDIwLjUtMzkuOCA0Ny40LTQ4LjcgNzguM2wtMy44IDEzLjRjLTIuOCA5LjctLjggMjAgNS4yIDI4LjFTMTE4IDM1MiAxMjggMzUybDE1NC4yIDB6TTI1NiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMi02NCAwIDAgMTEyeiJdfSxpRWU9UUYsckVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdXMtbWludXMiLGljb246WzM4NCw1MTIsW10sImU0M2MiLCJNMjI0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTI4LTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwIDAtMTI4ek0wIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdfSxzRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNTA5IiwiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNTUzLjQgMzM5LjFjLTcuMS01LjItMTcuMS0zLjYtMjIuMyAzLjVsLTUzIDcyLjgtMjYuNy0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMC02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC43czguOS0yLjggMTEuNy02LjZsNjQtODhjNS4yLTcuMSAzLjYtMTcuMS0zLjUtMjIuM3oiXX0sbkVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLWRheSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc4MyIsIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMHoiXX0sb0VlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxpYnJhIixpY29uOls1MTIsNTEyLFtdLCJlODRiIiwiTTQ4MCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ0OCAwek0yNTYgMzJjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCAxNi42LTIuNCAzMi43LTYuNyA0OGw1NC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwNC4yIDBjLTExLjggMC0yMi43LTYuNS0yOC4yLTE2LjlzLTQuOS0yMy4xIDEuNi0zMi45YzExLjktMTcuOCAxOC44LTM5LjEgMTguOC02Mi4yIDAtNjEuOS01MC4xLTExMi0xMTItMTEyUzE0NCAxNDYuMSAxNDQgMjA4YzAgMjMuMSA2LjkgNDQuNCAxOC44IDYyLjIgNi42IDkuOCA3LjIgMjIuNSAxLjYgMzIuOVMxNDguMSAzMjAgMTM2LjIgMzIwTDMyIDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1NC44IDBjLTQuMy0xNS4zLTYuOC0zMS40LTYuOC00OCAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NnoiXX0sbEVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZSIsaWNvbjpbNTEyLDUxMixbMTI4MzA4LDEyODMwOSwxMjg5OTIsMTI4OTkzLDEyODk5NCwxMjg5OTUsMTI4OTk2LDk2NzksOTg5OCw5ODk5LDExMDQ0LDYxNzA4LDYxOTE1XSwiZjExMSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdfSxjRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9iaWxlLXZpYnJhdGUiLGljb246WzU3Niw1MTIsW10sImU4MTYiLCJNMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTM4NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMHpNMjQ4IDQxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek00OC44IDEzMy40YzkuNC03LjcgMjMuMy03LjEgMzIuMSAxLjcgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDI1LjQgMjUuNCAyLjkgMy4yYzYuMyA3LjcgOS44IDE3LjQgOS44IDI3LjQgMCAxMS41LTQuNiAyMi41LTEyLjcgMzAuNmwtMjUuNCAyNS40IDMxIDMxIDEuNyAxLjhjNy43IDkuNCA3LjEgMjMuMy0xLjcgMzIuMXMtMjIuNyA5LjMtMzIuMSAxLjdMNDcgMzc3IDEyLjcgMzQyLjZDNS42IDMzNS41IDEuMiAzMjYuMiAuMiAzMTYuM0wwIDMxMiAuMiAzMDcuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMMzguMSAyNTYgMTIuNyAyMzAuNkM1LjYgMjIzLjUgMS4yIDIxNC4yIC4yIDIwNC4zTDAgMjAwIC4yIDE5NS43YzEtOS45IDUuNC0xOS4yIDEyLjUtMjYuM0w0NyAxMzUgNDguOCAxMzMuNHpNNDk1IDEzNWM4LjgtOC44IDIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgMzQuMyAzNC4zYzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTI1LjQgMjUuNCAyNS40IDI1LjRjNy4xIDcuMSAxMS41IDE2LjQgMTIuNSAyNi4zbC4yIDQuMy0uMiA0LjNjLTEgOS45LTUuNCAxOS4yLTEyLjUgMjYuM2wtMzQuMyAzNC4zLTEuOCAxLjdjLTkuNCA3LjctMjMuMyA3LjEtMzIuMS0xLjdzLTkuMy0yMi43LTEuNy0zMi4xbDEuNy0xLjggMzEtMzEtMjUuNC0yNS40Yy04LjEtOC4xLTEyLjctMTkuMS0xMi43LTMwLjYgMC0xMCAzLjUtMTkuNyA5LjgtMjcuNGwyLjktMy4yIDI1LjQtMjUuNC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il19LEpGPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1zcXVpbnQiLGljb246WzUxMiw1MTIsWzEyODUxOCwiZ3Jpbi1zcXVpbnQiXSwiZjU4NSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTEyMi42IDE0My4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il19LGRFZT1KRixwRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtYmV0d2Vlbi1saW5lcyIsaWNvbjpbNTc2LDUxMixbXSwiZTU5MSIsIk0yNCAxNmw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA2NEMxMC43IDY0IDAgNTMuMyAwIDQwUzEwLjcgMTYgMjQgMTZ6bTAgNDQ4bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMzkyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMEMxMzguNiAzMTguMyAxMjggMzQ5LjkgMTI4IDM4NGwwIDhjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC03OC44IDBDNDEuNiA0MTYgMzIgNDA2LjQgMzIgMzk0LjdMMzIgMzg0YzAtNTMgNDMtOTYgOTYtOTYgMTAgMCAxOS43IDEuNSAyOC44IDQuNHpNNzIgMTkyYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTUyLTE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDM4NGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHoiXX0saEVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLW1lZGljYWwtY2lyY2xlLXhtYXJrIixpY29uOls2NDAsNTEyLFtdLCJlNTEzIiwiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdfSxlTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZS1saXN0IixpY29uOls0NDgsNTEyLFsidGgtbGlzdCJdLCJmMDBiIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em02NCAwbDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6TTY0IDIyNGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHoiXX0sdUVlPWVPLGZFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbGFzay12aWFsIixpY29uOls2NDAsNTEyLFtdLCJlNGYzIiwiTTE4NC42IDQxMS41Yy0zLjEgNy4zLTUuNCAxNC45LTYuOCAyMi42LTE0LjUgOC44LTMxLjUgMTMuOS00OS44IDEzLjktNTMgMC05Ni00My05Ni05NkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwTDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMjU1LjYtMzkuNCA5MS45ek05NiA2NGwwIDEyOCA2NCAwIDAtMTI4LTY0IDB6TTM1MiAwTDUxMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUzLjQgOTEuMyAyMTNjMi4zIDUuNCAzLjggMTEuMSA0LjQgMTdsLjMgLjYtLjMgMGMuMiAxLjggLjMgMy42IC4zIDUuNCAwIDMyLjMtMjYuMiA1OC42LTU4LjYgNTguNmwtMjY2LjkgMGMtMzIuMyAwLTU4LjYtMjYuMi01OC42LTU4LjYgMC0xLjggLjEtMy42IC4zLTUuNGwtLjMgMCAuMy0uNmMuNi01LjggMi4xLTExLjYgNC40LTE3TDMyMCAyMTcuNCAzMjAgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzMwMi4zIDAgMzIwIDBsMzIgMHpNNDUzLjIgMjQyLjZjLTMuNC04LTUuMi0xNi41LTUuMi0yNS4ybDAtMTUzLjQtNjQgMCAwIDE1My40YzAgOC43LTEuOCAxNy4yLTUuMiAyNS4ybC0zMy4yIDc3LjQgMTQwLjcgMC0zMy4yLTc3LjR6Il19LHRPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNTEyLDUxMixbImV4Y2xhbWF0aW9uLWNpcmNsZSJdLCJmMDZhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il19LG1FZT10TyxhTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YXhpIixpY29uOls1MTIsNTEyLFsxMjg2NjIsImNhYiJdLCJmMWJhIiwiTTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTguOSAwYy00MiAwLTc5LjEgMjcuMy05MS42IDY3LjRsLTIzIDczLjVDMTQuNSAyMTkuMSAwIDI0My45IDAgMjcyTDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAzMjAgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNzZjMC0yOC4xLTE0LjUtNTIuOS0zNi40LTY3LjFsLTIzLTczLjVDNDQwLjEgOTEuMyA0MDIuOSA2NCAzNjAuOSA2NGwtOC45IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxOTIgMHpNMTUxLjEgMTI4bDIwOS45IDBjMTQgMCAyNi40IDkuMSAzMC41IDIyLjVsMTMgNDEuNS0yOTYuOSAwIDEzLTQxLjVjNC4yLTEzLjQgMTYuNS0yMi41IDMwLjUtMjIuNXpNOTYgMjcyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjg4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LGdFZT1hTyxpTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZXh0LXNsYXNoIixpY29uOls1NzYsNTEyLFsicmVtb3ZlLWZvcm1hdCJdLCJmODdkIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzIyLjcgMjU2LjkgMzY4LjIgOTYgNDcxIDk2IDQ2NSAxMjAuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMS00NC4xQzU0NS42IDYxLjMgNTIyLjcgMzIgNDkxLjUgMzJsLTMxOSAwYy0xOS44IDAtMzcuMyAxMi4xLTQ0LjUgMzAuMWwtODctODd6TTE4MC40IDExNC41bDQuNi0xOC41IDExNi43IDAtMzAuOCAxMDktOTAuNS05MC41ek0yNDEgMzEwLjhMMjExLjMgNDE2IDE2MCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQyLjIgMCAxNS4xLTUzLjMtNTEuOS01MS45eiJdfSxiRWU9aU8sdkVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlb3BsZS1wdWxsaW5nIixpY29uOls1NzYsNTEyLFtdLCJlNTM1IiwiTTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMiA5LjggMCAxOC41LTQuNCAyNC40LTExLjJMODAuNCA0ODUuM2MyLjkgMTcuNCAxOS40IDI5LjIgMzYuOCAyNi4zczI5LjItMTkuNCAyNi4zLTM2LjhsLTIwLjUtMTIyLjcgMTUuNyAwIDMwIDEzNC45YzMuOCAxNy4zIDIwLjkgMjguMSAzOC4yIDI0LjNzMjguMS0yMC45IDI0LjMtMzguMmwtNTcuMy0yNTggMTE2LjMgNTMuOGMuNSAuMyAxLjEgLjUgMS42IC43IDguNiAzLjYgMTggMy4xIDI1LjktLjcgMy40LTEuNiA2LjYtMy45IDkuMy02LjcgMy4xLTMuMiA1LjUtNyA3LjEtMTEuNCAuMS0uMyAuMi0uNyAuMy0xbDIuNS03LjVjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlsLTIxLjQtMTAuNy0xNS4zLTM2LjhjLTE3LjEtNDEuMS01Ny4zLTY3LjktMTAxLjktNjcuOS0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTI0LjQgMTAuOS00NC42IDI5LTU4LjEgNTEuNkwxNTcuMyAxMzYuOUMxNDQuNyAxMzEgMTMwLjkgMTI4IDExNyAxMjhsLTUzIDB6TTQ2NCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTM0OS43IDMzNS42bC0yNSA2Mi40LTU5LjQgNTkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzNzIuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42eiJdfSx5RWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFja3dhcmQiLGljb246WzU3Niw1MTIsWzkxOTRdLCJmMDRhIiwiTTIwNC4zIDQzLjFDMjE1LjkgMzIgMjMzIDI4LjkgMjQ3LjcgMzUuMlMyNzIgNTYgMjcyIDcybDAgMTM2LjMgMTcyLjMtMTY1LjFDNDU1LjkgMzIgNDczIDI4LjkgNDg3LjcgMzUuMlM1MTIgNTYgNTEyIDcybDAgMzY4YzAgMTYtOS42IDMwLjUtMjQuMyAzNi44cy0zMS44IDMuMi00My40LTcuOUwyNzIgMzAzLjcgMjcyIDQ0MGMwIDE2LTkuNiAzMC41LTI0LjMgMzYuOHMtMzEuOCAzLjItNDMuNC03LjlsLTE5Mi0xODRDNC41IDI3Ny4zIDAgMjY2LjkgMCAyNTZzNC41LTIxLjMgMTIuMy0yOC45bDE5Mi0xODR6Il19LHJPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1idXJzdCIsaWNvbjpbNjQwLDUxMixbImNhci1jcmFzaCJdLCJmNWUxIiwiTTIzMiAxNi4xbDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0ek0zMiAxNjguMWw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0yODEuNSA3MC42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDI4MS41IDM2LjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em0tMTgxIDIxNWwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1Mi45IDE3NS40TDUwNSAyMTYuMmM2LjQgMS43IDExLjEgNy4zIDExLjggMTMuOWw3LjIgNzQtMjMxLjUtNjIgNDMuMi02MC41YzMuOS01LjQgMTAuNy03LjkgMTcuMi02LjJ6TTIyMy42IDIyOC41bC0yLjEgMi45Yy0yMS43IDUuNS0zOS45IDIyLjMtNDYuMSA0NS41LTQuMSAxNS41LTEyLjQgNDYuNC0yNC44IDkyLjdsLTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI3OC4yIDc0LjUtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjYgNC4xLTE1LjUgMTIuNC00Ni40IDI0LjgtOTIuN2w4LjMtMzAuOWM2LjItMjMuMi0xLjEtNDYuOC0xNy4yLTYyLjVsLS4zLTMuNi0xMC0xMDNjLTMuMi0zMy4yLTI2LjctNjAuOS01OC45LTY5LjVMMzY5LjUgMTEzLjZjLTMyLjItOC42LTY2LjQgMy42LTg1LjggMzAuOGwtNjAuMiA4NC4yem00OC43IDU3LjhhMzIgMzIgMCAxIDEgLTE2LjYgNjEuOCAzMiAzMiAwIDEgMSAxNi42LTYxLjh6bTIwOC4xIDg4LjlhMzIgMzIgMCAxIDEgNjEuOCAxNi42IDMyIDMyIDAgMSAxIC02MS44LTE2LjZ6Il19LHhFZT1yTyxzTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaW5rIixpY29uOls1NzYsNTEyLFsxMjgyNzksImNoYWluIl0sImYwYzEiLCJNNDE5LjUgOTZjLTE2LjYgMC0zMi43IDQuNS00Ni44IDEyLjctMTUuOC0xNi0zNC4yLTI5LjQtNTQuNS0zOS41IDI4LjItMjQgNjQuMS0zNy4yIDEwMS4zLTM3LjIgODYuNCAwIDE1Ni41IDcwIDE1Ni41IDE1Ni41IDAgNDEuNS0xNi41IDgxLjMtNDUuOCAxMTAuNmwtNzEuMSA3MS4xYy0yOS4zIDI5LjMtNjkuMSA0NS44LTExMC42IDQ1LjgtODYuNCAwLTE1Ni41LTcwLTE1Ni41LTE1Ni41IDAtMS41IDAtMyAuMS00LjUgLjUtMTcuNyAxNS4yLTMxLjYgMzIuOS0zMS4xczMxLjYgMTUuMiAzMS4xIDMyLjljMCAuOSAwIDEuOCAwIDIuNiAwIDUxLjEgNDEuNCA5Mi41IDkyLjUgOTIuNSAyNC41IDAgNDgtOS43IDY1LjQtMjcuMWw3MS4xLTcxLjFjMTcuMy0xNy4zIDI3LjEtNDAuOSAyNy4xLTY1LjQgMC01MS4xLTQxLjQtOTIuNS05Mi41LTkyLjV6TTI3NS4yIDE3My4zYy0xLjktLjgtMy44LTEuOS01LjUtMy4xLTEyLjYtNi41LTI3LTEwLjItNDIuMS0xMC4yLTI0LjUgMC00OCA5LjctNjUuNCAyNy4xTDkxLjEgMjU4LjJjLTE3LjMgMTcuMy0yNy4xIDQwLjktMjcuMSA2NS40IDAgNTEuMSA0MS40IDkyLjUgOTIuNSA5Mi41IDE2LjUgMCAzMi42LTQuNCA0Ni43LTEyLjYgMTUuOCAxNiAzNC4yIDI5LjQgNTQuNiAzOS41LTI4LjIgMjMuOS02NCAzNy4yLTEwMS4zIDM3LjItODYuNCAwLTE1Ni41LTcwLTE1Ni41LTE1Ni41IDAtNDEuNSAxNi41LTgxLjMgNDUuOC0xMTAuNmw3MS4xLTcxLjFjMjkuMy0yOS4zIDY5LjEtNDUuOCAxMTAuNi00NS44IDg2LjYgMCAxNTYuNSA3MC42IDE1Ni41IDE1Ni45IDAgMS4zIDAgMi42IDAgMy45LS40IDE3LjctMTUuMSAzMS42LTMyLjggMzEuMnMtMzEuNi0xNS4xLTMxLjItMzIuOGMwLS44IDAtMS41IDAtMi4zIDAtMzMuNy0xOC02My4zLTQ0LjgtNzkuNnoiXX0sd0VlPXNPLG5PPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhY2t3YXJkLXN0ZXAiLGljb246WzM4NCw1MTIsWyJzdGVwLWJhY2t3YXJkIl0sImYwNDgiLCJNMzYzIDM2LjhjLTEyLjktNy0yOC43LTYuMy00MSAxLjhMNjQgMjA4LjEgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NC4xIDI1OCAxNjkuNmMxMi4zIDguMSAyOCA4LjggNDEgMS44czIxLTIwLjUgMjEtMzUuMmwwLTM2OGMwLTE0LjctOC4xLTI4LjItMjEtMzUuMnoiXX0sTUVlPW5PLHpFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ4IixpY29uOlszODQsNTEyLFsxMjBdLCI1OCIsIk0zNzYuNiA4NC41YzExLjMtMTMuNiA5LjUtMzMuOC00LjEtNDUuMXMtMzMuOC05LjUtNDUuMSA0LjFMMTkyIDIwNiA1Ni42IDQzLjVDNDUuMyAyOS45IDI1LjEgMjguMSAxMS41IDM5LjRTLTMuOSA3MC45IDcuNCA4NC41TDE1MC4zIDI1NiA3LjQgNDI3LjVjLTExLjMgMTMuNi05LjUgMzMuOCA0LjEgNDUuMXMzMy44IDkuNSA0NS4xLTQuMUwxOTIgMzA2IDMyNy40IDQ2OC41YzExLjMgMTMuNiAzMS41IDE1LjQgNDUuMSA0LjFzMTUuNC0zMS41IDQuMS00NS4xTDIzMy43IDI1NiAzNzYuNiA4NC41eiJdfSxvTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtdXNlciIsaWNvbjpbNTEyLDUxMixbNjIxNDIsInVzZXItY2lyY2xlIl0sImYyYmQiLCJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwbC02NCAwYy00Ny40IDAtODguOSAyNS44LTExMSA2NC4yIDM1LjIgMzkuMiA4Ni4yIDYzLjggMTQzIDYzLjhzMTA3LjgtMjQuNyAxNDMtNjMuOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2IDE2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0eiJdfSxrRWU9b08sbE89e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVjdGFuZ2xlLWxpc3QiLGljb246WzUxMiw1MTIsWyJsaXN0LWFsdCJdLCJmMDIyIiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em05NiAyNTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTIwLTU2bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxTRWU9bE8sY089e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZCIsaWNvbjpbNTEyLDUxMixbMTI5MzA2LDk5OTUsImhhbmQtcGFwZXIiXSwiZjI1NiIsIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHoiXX0sQ0VlPWNPLF9FZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYW5jZXIiLGljb246WzUxMiw1MTIsW10sImU4NDciLCJNNDA4IDE1MmM1Ny40IDAgMTA0IDQ2LjYgMTA0IDEwNCAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2LTU0LjMgMC0xMDQuOC0xNy0xNDYuMy00NS45LTE0LjUtMTAuMS0xOC0zMC4xLTcuOS00NC42czMwLjEtMTggNDQuNi03LjljMzEuMSAyMS43IDY4LjkgMzQuNCAxMDkuNyAzNC40IDY3LjkgMCAxMjcuNS0zNS4zIDE2MS43LTg4LjUtMy4yIC4zLTYuNCAuNS05LjcgLjUtNTcuNCAwLTEwNC00Ni42LTEwNC0xMDRzNDYuNi0xMDQgMTA0LTEwNHpNMjU2IDBjNTQuMyAwIDEwNC44IDE3IDE0Ni4zIDQ1LjkgMTQuNSAxMC4xIDE4IDMwLjEgNy45IDQ0LjZzLTMwLjEgMTgtNDQuNiA3LjljLTMxLjEtMjEuNy02OC45LTM0LjQtMTA5LjctMzQuNC02Ny45IDAtMTI3LjUgMzUuMi0xNjEuNyA4OC40IDMuMi0uMyA2LjQtLjQgOS43LS40IDU3LjQgMCAxMDQgNDYuNiAxMDQgMTA0UzE2MS40IDM2MCAxMDQgMzYwIDAgMzEzLjQgMCAyNTZDMCAyNTQuMSAwIDI1Mi4yIC4xIDI1MC40IDMuMSAxMTEuNiAxMTYuNSAwIDI1NiAwek0xMDQgMjE2YTQwIDQwIDAgMSAwIDAgODAgNDAgNDAgMCAxIDAgMC04MHptMzA0IDBhNDAgNDAgMCAxIDAgMCA4MCA0MCA0MCAwIDEgMCAwLTgweiJdfSxkTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2YW4tc2h1dHRsZSIsaWNvbjpbNTc2LDUxMixbMTI4NjU2LCJzaHV0dGxlLXZhbiJdLCJmNWI2IiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzM2YzAgMzUuMyAyOC43IDY0IDY0IDY0bC40IDBjNCA0NC45IDQxLjcgODAgODcuNiA4MHM4My42LTM1LjEgODcuNi04MGwxMDQuNyAwYzQgNDQuOSA0MS43IDgwIDg3LjYgODAgNDYuMSAwIDgzLjktMzUuNCA4Ny43LTgwLjUgMzEuNy0zLjggNTYuMy0zMC44IDU2LjMtNjMuNWwwLTEwMS4zYzAtMTMuOC00LjUtMjcuMy0xMi44LTM4LjRsLTgwLTEwNi43QzQ3MS4xIDczLjUgNDUyLjEgNjQgNDMyIDY0TDY0IDY0ek01MDQgMjI0bC0xMjAgMCAwLTk2IDQ4IDAgNzIgOTZ6TTY0IDIyNGwwLTk2IDk2IDAgMCA5Ni05NiAwem0xNjAgMGwwLTk2IDk2IDAgMCA5Ni05NiAwek0zOTIgMzkyYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE1MiAzNTJhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSxURWU9ZE8sTEVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YWlycyIsaWNvbjpbNTc2LDUxMixbXSwiZTI4OSIsIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2eiJdfSwkRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG9yc2UtaGVhZCIsaWNvbjpbNTEyLDUxMixbXSwiZjdhYiIsIk0wIDQ2NEwwIDMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVjMjEuNC03LjYgNDMuOCA4LjMgNDMuOCAzMC45IDAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41LTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFsLTMuNCAwYy0yNi4xIDAtNTAuOS0xMS42LTY3LjYtMzEuN2wtMzIuMy0zOC43Yy0xMS43IDQuMS0yNC4yIDYuNC0zNy4zIDYuNGwtLjEgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNS0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjItNC40LTcuNy0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjQgMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHpNMzI4IDIyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LEFFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2YXVsdCIsaWNvbjpbNTEyLDUxMixbXSwiZTJjNSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjU2IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjU2IDI1NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTY0IDI1NmExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem0zODQtNDhjMCAxNy44LTkuNyAzMy4zLTI0IDQxLjZsMCA3OC40YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzguNGMtMTQuMy04LjMtMjQtMjMuOC0yNC00MS42IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6Il19LERFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG9zZWQtY2FwdGlvbmluZy1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZTEzNSIsIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMTI5LjggNjQgNDgwIDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMjUuNS0xNC45IDQ3LjQtMzYuNCA1Ny44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45em0zNDUgMzExbDAtNzAuMmMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCAyMi4yIDQ4IDQ4em02MS41IDYxLjVjMjAuMi04LjQgMzQuNS0yOC40IDM0LjUtNTEuNyAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTIyLjIgMCA0My43IDQzLjd6TTEzMC4zIDIwMC4xYy0xLjUgNS0yLjMgMTAuNC0yLjMgMTUuOWwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMTguMSAwIDM0LjEtOC41IDQ0LjQtMjEuOEwzNzguMiA0NDggOTYgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTI1NmMwLTcuOCAxLjQtMTUuMyA0LTIyLjJsOTQuMyA5NC4zem05My44IDkzLjhjLS4xIC43LS4xIDEuNC0uMSAyLjEgMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC01MC4yIDQ4LjEgNDguMXoiXX0sRUVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRydW0tc3RlZWxwYW4iLGljb246WzU3Niw1MTIsW10sImY1NmEiLCJNMjg4IDMyYzE1OS4xIDAgMjg4IDQ4IDI4OCAxMjhsMCAxOTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MkwwIDE2MEMwIDgwIDEyOC45IDMyIDI4OCAzMnpNNTI4IDE2MGMwLTkuOS04LTI5LjktNTUtNDkuOC0xOC42LTcuOS00MC45LTE0LjQtNjYtMTkuNGwtMjcuOCA0My42Yy03LjMgMTEuNS0xMS4yIDI0LjgtMTEuMiAzOC40IDAgMTcuNSA2LjQgMzQuNCAxOC4xIDQ3LjVsOS44IDExYzI5LjgtNS4yIDU1LjktMTIuNSA3Ny4yLTIxLjUgNDcuMS0xOS45IDU1LTM5LjkgNTUtNDkuOHpNMzQ5LjIgMjM3LjNjLTgtMjYuMi0zMi40LTQ1LjMtNjEuMi00NS4zcy01My4zIDE5LjEtNjEuMiA0NS4zYzE5LjQgMS43IDM5LjkgMi43IDYxLjIgMi43czQxLjgtLjkgNjEuMi0yLjd6TTE2OSA5MC44Yy0yNS4yIDUtNDcuNCAxMS42LTY2IDE5LjQtNDcuMSAxOS45LTU1IDM5LjktNTUgNDkuOHM4IDI5LjkgNTUgNDkuOGMyMS4zIDkgNDcuNCAxNi4zIDc3LjIgMjEuNWw5LjgtMTFjMTEuNi0xMy4xIDE4LjEtMzAgMTguMS00Ny41IDAtMTMuNi0zLjktMjYuOS0xMS4yLTM4LjRMMTY5IDkwLjh6bTU2LjMtOGMtLjkgNC4zLTEuNCA4LjctMS40IDEzLjIgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTQuNS0uNS05LTEuNC0xMy4yLTE5LjgtMS44LTQwLjgtMi44LTYyLjYtMi44cy00Mi44IDEtNjIuNiAyLjh6Il19LFBFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0aHVtYnMtdXAiLGljb246WzUxMiw1MTIsWzEyODA3Nyw2MTU3NV0sImYxNjQiLCJNODAgMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0OCAwek0yNzAuNiAxNkMyOTcuOSAxNiAzMjAgMzguMSAzMjAgNjUuNGwwIDQuMmMwIDYuOC0xLjMgMTMuNi0zLjggMTkuOUwyODggMTYwIDQ0OCAxNjBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxOS43LTExLjkgMzYuNi0yOC45IDQ0IDE3IDcuNCAyOC45IDI0LjMgMjguOSA0NCAwIDIzLjQtMTYuOCA0Mi45LTM5IDQ3LjEgNC40IDcuMyA3IDE1LjggNyAyNC45IDAgMjIuMi0xNSA0MC44LTM1LjQgNDYuMyAyLjIgNS41IDMuNCAxMS41IDMuNCAxNy43IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC04Ny45IDBjLTM2LjMgMC03MS42LTEyLjQtOTkuOS0zNS4xTDE4NCA0MzUuMmMtMTUuMi0xMi4xLTI0LTMwLjUtMjQtNTBsMC0xODYuNmMwLTE0LjkgMy41LTI5LjYgMTAuMS00Mi45TDIyNi4zIDQzLjNDMjM0LjcgMjYuNiAyNTEuOCAxNiAyNzAuNiAxNnoiXX0sSUVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YW1wIixpY29uOls1MTIsNTEyLFtdLCJmNWJmIiwiTTMxMiAyMDEuOGMwLTE3LjQgOS4yLTMzLjIgMTkuOS00NyAxMi42LTE2LjIgMjAuMS0zNi42IDIwLjEtNTguOCAwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDIyLjEgNy41IDQyLjUgMjAuMSA1OC44IDEwLjcgMTMuOCAxOS45IDI5LjYgMTkuOSA0NyAwIDI5LjktMjQuMyA1NC4yLTU0LjIgNTQuMkwxMTIgMjU2Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMzMuOCAwYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNTYgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwMCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDU2IDQ2NHoiXX0sTkVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1lbm9yYWgiLGljb246WzY0MCw1MTIsW10sImY2NzYiLCJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xTDY0IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0bDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwyMC44IDcuNHptOTYgMEMxMTguOCAyLjkgMTIzLjEgMCAxMjggMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJTOTYgODEuNyA5NiA2NGwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMTE2LjggNy40em03Ny44IDQyLjRMMjEyLjggNy40QzIxNC44IDIuOSAyMTkuMSAwIDIyNCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMwOC44IDcuNEMzMTAuOCAyLjkgMzE1LjEgMCAzMjAgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDMwOC44IDcuNHptNzcuOCA0Mi40TDQwNC44IDcuNEM0MDYuOCAyLjkgNDExLjEgMCA0MTYgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek01MDAuOCA3LjRDNTAyLjggMi45IDUwNy4xIDAgNTEyIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUw1MDAuOCA3LjR6bTc3LjggNDIuNEw1OTYuOCA3LjRDNTk4LjggMi45IDYwMy4xIDAgNjA4IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNMzIgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwIDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNjAgMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMCAwIDY0IDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMCAwLTY0LTE5MiAwYy01MyAwLTk2LTQzLTk2LTk2TDAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxGRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hpbGRyZW4iLGljb246WzY0MCw1MTIsW10sImU0ZTEiLCJNMTYwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTcyIDQ4MGwwLTgwLTE3LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFMODYuNyAyODUuNSA1OCAzMjMuM2MtMTAuNyAxNC4xLTMwLjggMTYuOC00NC44IDYuMlMtMy43IDI5OC43IDcgMjg0LjdMNjUuOSAyMDdjMjIuNC0yOS42IDU3LjUtNDcgOTQuNi00N3M3Mi4yIDE3LjQgOTQuNiA0N0wzMTQgMjg0LjdjMTAuNyAxNC4xIDcuOSAzNC4yLTYuMiA0NC44cy0zNC4yIDcuOS00NC44LTYuMmwtMjguNy0zNy44IDMxLjEgOTMuNGMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODAtMTYgMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek00ODAuNSAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0tOCAzODRsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OS41LTEyLjkgMjAuNWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwcy0xOS40LTI5LjItMTAtNDQuMWw1MS43LTgyLjFjMTcuNi0yNy45IDQ4LjMtNDQuOSA4MS4yLTQ0LjlsMTIuMyAwYzMzIDAgNjMuNyAxNi45IDgxLjIgNDQuOUw2MTkuNiAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBsLTEyLjktMjAuNSAwIDE3OS41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMHoiXX0scE89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcnQtbGluZSIsaWNvbjpbNTEyLDUxMixbImxpbmUtY2hhcnQiXSwiZjIwMSIsIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNkw2NCA2NHptNDA2LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzMjAgMjEwLjcgMjYyLjYgMTUzLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw3My40LTczLjQgNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LE9FZT1wTyxoTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtZW52ZWxvcGUiLGljb246WzQ0OCw1MTIsWyJlbnZlbG9wZS1zcXVhcmUiXSwiZjE5OSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDkuMSAyNjcuOUwxMDguNCAyMDcuNGMtNy43LTQuNi0xMi40LTEyLjktMTIuNC0yMS45IDAtMTQuMSAxMS40LTI1LjUgMjUuNS0yNS41bDIwNC45IDBjMTQuMSAwIDI1LjUgMTEuNCAyNS41IDI1LjUgMCA5LTQuNyAxNy4zLTEyLjQgMjEuOUwyMzguOSAyNjcuOWMtNC41IDIuNy05LjYgNC4xLTE0LjkgNC4xcy0xMC40LTEuNC0xNC45LTQuMXpNMzUyIDIzNy4zbDAgODIuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODIuNyA5Ni43IDU4QzIwMi4xIDMwMSAyMTMgMzA0IDIyNCAzMDRzMjEuOS0zIDMxLjMtOC43bDk2LjctNTh6Il19LFJFZT1oTyx1Tz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYW4tc21va2luZyIsaWNvbjpbNTEyLDUxMixbMTI4Njg1LCJzbW9raW5nLWJhbiJdLCJmNTRkIiwiTTk5LjUgMTQ0LjhsNzkuMiA3OS4yLTUwLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNDYuNyAwIDkyLjUgOTIuNWMtMzEuNCAyMi40LTY5LjggMzUuNS0xMTEuMiAzNS41LTEwNiAwLTE5Mi04Ni0xOTItMTkyIDAtNDEuNSAxMy4xLTc5LjkgMzUuNS0xMTEuMnpNMzMzLjMgMjg4bC0zMi0zMiA4Mi43IDAgMCAzMi01MC43IDB6bTMyIDMybDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDI2OS4zIDIyNCAxNDQuOCA5OS41YzMxLjQtMjIuNCA2OS44LTM1LjUgMTExLjItMzUuNSAxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTYgMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzNy4yIDE2IDE2IDE2IDE2LTcuMiAxNi0xNmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZ6Il19LEJFZT11TyxIRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stZnJvbnQiLGljb246WzQ0OCw1MTIsW10sImUyYjciLCJNMCAxMTJDMCA2Ny44IDM1LjggMzIgODAgMzJsMjg4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyNTZjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyLTE5MiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDhDMTIuNiA0MTcuNCAwIDM5NC4yIDAgMzY4TDAgMTEyem05NiA4MGwwIDY0IDI1NiAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMzIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTIyNCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LG9nPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nIixpY29uOlszODQsNTEyLFsxMjc5NzAsNjE2ODddLCJmMWFkIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE3NiAzNTJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTk2IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNOTYgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI0MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il19LHFFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidWxsc2V5ZSIsaWNvbjpbNTEyLDUxMixbXSwiZjE0MCIsIk00NDggMjU2YTE5MiAxOTIgMCAxIDAgLTM4NCAwIDE5MiAxOTIgMCAxIDAgMzg0IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiA4MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0yMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4ek0yMjQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LGZPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWxlZnQtbG9uZyIsaWNvbjpbNTc2LDUxMixbImxvbmctYXJyb3ctbGVmdCJdLCJmMTc3IiwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA1NDQgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00MzQuNyAwIDczLjQtNzMuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOHoiXX0sVkVlPWZPLGpFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVzcy1yb29rIixpY29uOlszODQsNTEyLFs5ODIwXSwiZjQ0NyIsIk0wIDMyTDAgMTMzLjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNjQgMjI0IDY0IDM4NCA3LjggNDU0LjNDMi43IDQ2MC42IDAgNDY4LjQgMCA0NzYuNSAwIDQ5Ni4xIDE1LjkgNTEyIDM1LjUgNTEybDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTU2LjItNzAuMyAwLTE2MCA0NS4zLTQ1LjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTQ4IDAgMC0zMkM5NiAxNC4zIDgxLjcgMCA2NCAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyeiJdfSxVRWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmxlbmRlci1waG9uZSIsaWNvbjpbNTc2LDUxMixbXSwiZjZiNiIsIk0xNTEuNCAxMy4yYzEwLjIgNS44IDE0LjUgMTguNCAxMCAyOS4zTDEzOC4yIDk4LjhjLTMuOSA5LjYtMTMuNyAxNS40LTI0IDE0LjRsLTIwLjItMkM3OC43IDE1Mi45IDc4IDE5OC45IDkxLjkgMjQxLjFsMjIuNC0yLjJjMTAuMy0xIDIwIDQuOCAyNCAxNC40bDIzLjIgNTYuM2M0LjUgMTAuOSAuMiAyMy40LTEwIDI5LjNsLTIuOSAxLjZjLTMzLjYgMTkuMi04MS43IDE2LjItMTA2LjItMjEuNi01Ni4zLTg2LjYtNTYuMy0xOTkuMSAwLTI4NS43IDI0LjYtMzcuNyA3Mi43LTQwLjcgMTA2LjItMjEuNmwyLjkgMS42ek0yMjQgMzM2TDE5My43IDE3LjVDMTkyLjggOC4xIDIwMC4yIDAgMjA5LjYgMGwzMjQgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw1NTMuMSA4MCA0NDAgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwem04IDQ4bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxtTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy10dXJuLXVwIixpY29uOlszODQsNTEyLFsibGV2ZWwtdXAiXSwiZjE0OCIsIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAweiJdfSxXRWU9bU8sR0VlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJpY3ljbGUiLGljb246WzY0MCw1MTIsWzEyODY5MF0sImYyMDYiLCJNMzMxLjcgNDMuM0MzMzYgMzYuMyAzNDMuNyAzMiAzNTIgMzJsMTA0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY1LjYgMCA3Mi4yIDE0OC40YzEwLjctMi45IDIxLjktNC40IDMzLjQtNC40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4LTEyOC01Ny4zLTEyOC0xMjhjMC00MiAyMC4yLTc5LjIgNTEuNC0xMDIuNmwtMjAuNC00MS45LTczLjUgMTQ3Yy0yLjMgNC44LTYuMyA4LjgtMTEuNCAxMS4yLS42IC4zLTEuMiAuNS0xLjggLjctMi45IDEuMS01LjkgMS42LTguOSAxLjVMMjcxIDM2OGMtNy45IDYzLjEtNjEuNyAxMTItMTI3IDExMi03MC43IDAtMTI4LTU3LjMtMTI4LTEyOFM3My4zIDIyNCAxNDQgMjI0YzEwLjggMCAyMS4yIDEuMyAzMS4yIDMuOGwyOC41LTU2LjktMTEuNS0yNi45LTQwLjIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzkuNiAwIDE4LjMgNS43IDIyLjEgMTQuNWwxNC4zIDMzLjUgMTIzLjcgMC0zNy43LTc3LjVjLTMuNi03LjQtMy4yLTE2LjIgMS4yLTIzLjJ6TTIyOC41IDIyOC43bC00NS42IDkxLjMgODQuOCAwLTM5LjEtOTEuM3pNMzA1LjcgMjg3bDQ3LjUtOTUtODguMiAwIDQwLjcgOTV6bTE2OC43IDc1LjVsLTI5LjctNjFjLTEyLjggMTMtMjAuNyAzMC44LTIwLjcgNTAuNSAwIDM5LjggMzIuMiA3MiA3MiA3MnM3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJjLTIuNyAwLTUuNSAuMi04LjEgLjVsMjkuNyA2MWM1LjggMTEuOSAuOCAyNi4zLTExLjEgMzIuMXMtMjYuMyAuOC0zMi4xLTExLjF6TTE0OS4yIDM2OGMtMjAuMiAwLTMzLjQtMjEuMy0yNC4zLTM5LjRsMjQuMi00OC41Yy0xLjctLjEtMy40LS4yLTUuMS0uMi0zOS44IDAtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyYzM0LjMgMCA2Mi45LTIzLjkgNzAuMi01NmwtNjUgMHoiXX0sZ089e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWFycm93LWRvd24iLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtZG93biJdLCJmMGFiIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzkgMzc3bC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM5IDM5IDAtMTUwLjFjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1MC4xIDM5LTM5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODAgODBjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAweiJdfSxZRWU9Z08sbzg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2VhciIsaWNvbjpbNTEyLDUxMixbOTg4MSwiY29nIl0sImYwMTMiLCJNMTk1LjEgOS41QzE5OC4xLTUuMyAyMTEuMi0xNiAyMjYuNC0xNmw1OS44IDBjMTUuMiAwIDI4LjMgMTAuNyAzMS4zIDI1LjVMMzMyIDc5LjVjMTQuMSA2IDI3LjMgMTMuNyAzOS4zIDIyLjhsNjcuOC0yMi41YzE0LjQtNC44IDMwLjIgMS4yIDM3LjggMTQuNGwyOS45IDUxLjhjNy42IDEzLjIgNC45IDI5LjgtNi41IDM5LjlMNDQ3IDIzMy4zYy45IDcuNCAxLjMgMTUgMS4zIDIyLjdzLS41IDE1LjMtMS4zIDIyLjdsNTMuNCA0Ny41YzExLjQgMTAuMSAxNCAyNi44IDYuNSAzOS45bC0yOS45IDUxLjhjLTcuNiAxMy4xLTIzLjQgMTkuMi0zNy44IDE0LjRsLTY3LjgtMjIuNWMtMTIuMSA5LjEtMjUuMyAxNi43LTM5LjMgMjIuOGwtMTQuNCA2OS45Yy0zLjEgMTQuOS0xNi4yIDI1LjUtMzEuMyAyNS41bC01OS44IDBjLTE1LjIgMC0yOC4zLTEwLjctMzEuMy0yNS41bC0xNC40LTY5LjljLTE0LjEtNi0yNy4yLTEzLjctMzkuMy0yMi44TDczLjUgNDMyLjNjLTE0LjQgNC44LTMwLjItMS4yLTM3LjgtMTQuNEw1LjggMzY2LjFjLTcuNi0xMy4yLTQuOS0yOS44IDYuNS0zOS45bDUzLjQtNDcuNWMtLjktNy40LTEuMy0xNS0xLjMtMjIuN3MuNS0xNS4zIDEuMy0yMi43TDEyLjMgMTg1LjhjLTExLjQtMTAuMS0xNC0yNi44LTYuNS0zOS45TDM1LjcgOTQuMWM3LjYtMTMuMiAyMy40LTE5LjIgMzcuOC0xNC40bDY3LjggMjIuNWMxMi4xLTkuMSAyNS4zLTE2LjcgMzkuMy0yMi44TDE5NS4xIDkuNXpNMjU2LjMgMzM2YTgwIDgwIDAgMSAwIC0uNi0xNjAgODAgODAgMCAxIDAgLjYgMTYweiJdfSxaRWU9bzgsWEVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnMtYW5kLXZlbnVzLWJ1cnN0IixpY29uOls2NDAsNTEyLFtdLCJlNTIzIiwiTTQ2NC0zMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzNC43IDAtNjMgNjNjLTI4LjQtMTkuNS02Mi43LTMxLTk5LjgtMzEtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0IDE3My4xbDAgMzQuOS0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTM0LjljODEuOS0xNSAxNDQtODYuOCAxNDQtMTczLjEgMC0zNy0xMS40LTcxLjQtMzEtOTkuOGw2My02MyAwIDM0LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNjggOTZhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek0xOTAuOS0yMS45QzE4OC40LTI4IDE4Mi42LTMyIDE3Ni0zMnMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NC03Ni4yLTIzLjFjLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM1MzMy44IDQ2LjUgMzcgNTIuMmwzOS41IDY5LjEtNjUuNiA0NS4xYy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yLTUuNiA3OS40Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE1Mi4xIDI2OGMtNS4zLTE5LjEtOC4xLTM5LjItOC4xLTYwIDAtNjUuNCAyOC0xMjQuMiA3Mi42LTE2NS4xTDE5MC45LTIxLjl6Il19LEtFZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvdHRlciIsaWNvbjpbNjQwLDUxMixbMTI5NDQ2XSwiZjcwMCIsIk0xODEuNSAxOTcuMWwxMi45IDYuNGM1LjkgMyAxMi40IDQuNSAxOS4xIDQuNSAyMy41IDAgNDIuNi0xOS4xIDQyLjYtNDIuNmwwLTIxLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjEuNGMwIDIzLjUgMTkuMSA0Mi42IDQyLjYgNDIuNiA2LjYgMCAxMy4xLTEuNSAxOS4xLTQuNSA5LjMtNC43IDE2LjQtOC4yIDIxLjItMTAuNkwxMzUuMSAxODVjLTQuNS0zLTcuMS04LTcuMS0xMy4zbDAtMy43YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAzLjdjMCA1LjMtMi43IDEwLjMtNy4xIDEzLjNsLTExLjggNy45IDguNCA0LjJ6bS04LjYgNDkuNGwtMTIuOS02LjQtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42LTMuNiAwLTcuMS0uMi0xMC42LS42bDAgLjZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwxNjAgMCAwLTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNCA5LjQtNS40IDIwLjMtOC42IDMyLTguNmwwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDguOCAwIDE2IDcuMiAxNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05OS43YzAtNDguMi0zMC44LTkxLTc2LjYtMTA2LjNsLTguNS0yLjhjLTgtMi43LTEyLjYtMTEuMS0xMC40LTE5LjNzMTAuMy0xMy4yIDE4LjYtMTEuNmwxOS45IDRDNTc2IDg2LjEgNjQwIDE2NC4yIDY0MCAyNTQuOWwwIDEuMSAwIDBjMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNGwtMTYwLjYgMEMxMzIgNDgwIDMyIDM4MCAzMiAyNTYuNmwwLTM5LjhjLTEwLjEtMTQuNi0xNi0zMi4zLTE2LTUxLjRsMC0yMS40IDAtMS40QzYuNyAxMzkuMyAwIDEzMC41IDAgMTIwIDAgMTA2LjcgMTAuNyA5NiAyNCA5NmwyLjggMEM0NC44IDU4LjIgODMuMyAzMiAxMjggMzJsNjQgMGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0bDIuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTAuNS02LjcgMTkuMy0xNiAyMi42bDAgMS40IDAgMjEuNGMwIDEuNCAwIDIuOC0uMSA0LjMgMTItNi4yIDI1LjctOS42IDQwLjEtOS42bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDggNTYuNCAwYy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0bC0zMiAwYy00Mi4zIDAtNzguMi0yNy40LTkxLTY1LjMtNS4xIC45LTEwLjMgMS4zLTE1LjYgMS4zLTE0LjEgMC0yNy45LTMuMy00MC41LTkuNnpNOTYgMTI4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptMTEyIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6Il19LGJPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1jaGV2cm9uLWxlZnQiLGljb246WzUxMiw1MTIsWyJjaGV2cm9uLWNpcmNsZS1sZWZ0Il0sImYxMzciLCJNNTEyIDI1NmEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0yNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODcgODcgODcgODdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxNjcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwyNzEgMTM1eiJdfSxRRWU9Yk8sdk89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXF1ZXN0aW9uIixpY29uOls1MTIsNTEyLFs2MjEwOCwicXVlc3Rpb24tY2lyY2xlIl0sImYwNTkiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgNDcuMi0zNiA2Ny4yLTU2IDc0LjVsMCAzLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LjFjMC0yMC41IDE0LjgtMzUuMiAzMC4xLTQwLjIgNi40LTIuMSAxMy4yLTUuNSAxOC4yLTEwLjMgNC4zLTQuMiA3LjctMTAgNy43LTE5LjYgMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAzNjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXX0sSkVlPXZPLGVQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3YWxraWUtdGFsa2llIixpY29uOlszODQsNTEyLFtdLCJmOGVmIiwiTTg4LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDMyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwLjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTIwLjIgNDAuNGMtMy4zIDYuNy01LjEgMTQtNS4xIDIxLjVsMCA4NC43YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC04NC43YzAtNy41LTEuNy0xNC44LTUuMS0yMS41TDYuOCAzMDEuNUMyLjMgMjkyLjYgMCAyODIuOCAwIDI3Mi45TDAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDE2IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMzIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LHlPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItZ3JvdXAiLGljb246WzU3Niw1MTIsWzEyODEwMSwidXNlci1mcmllbmRzIl0sImY1MDAiLCJNNjQgMTI4YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTAgNDY0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA2YzAgMjMuMi0xOC44IDQyLTQyIDQyTDQyIDUxMmMtMjMuMiAwLTQyLTE4LjgtNDItNDJsMC02ek00MzIgNjRhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMjIuNGMwIDIzLTE4LjYgNDEuNi00MS42IDQxLjZsLTE0NC44IDBjNi42LTEyLjUgMTAuNC0yNi44IDEwLjQtNDJsMC02YzAtNTEuNS0xNy40LTk4LjktNDYuNS0xMzYuNyAyMi42LTE0LjcgNDkuNi0yMy4zIDc4LjUtMjMuM3oiXX0sdFBlPXlPLHhPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNoaW1uZXkiLGljb246WzUxMiw1MTIsWzYzNDk5LCJob21lLWxnIl0sImUzYWYiLCJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTI0MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgMTI4IDAgMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMHoiXX0sYVBlPXhPLHdPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpZ2h0LWZyb20tYnJhY2tldCIsaWNvbjpbNTEyLDUxMixbInNpZ24tb3V0LWFsdCJdLCJmMmY1IiwiTTUwNSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMzYxIDk1Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAxMDIuMyAzMjAgMTEybDAgODAtMTEyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTEyIDAgMCA4MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJMNTA1IDI3M3pNMTYwIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5Nmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAweiJdfSxpUGU9d08sclBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUiLGljb246WzM4NCw1MTIsWzEyODE5NiwxMjg0NTksNjE0NjJdLCJmMTViIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6Il19LHNQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbGFuZS1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZTA2OSIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xODMuNC0xODMuNCA3LjEtNy43IDEyNy4zIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZzLTI1LjEtNTYtNTYtNTZMMzkyLjcgMjAwIDIzMy41IDI2LjRDMjI3LjUgMTkuOCAyMTguOSAxNiAyMDkuOSAxNmwtNDMuNyAwYy0xMC45IDAtMTguNiAxMC43LTE1LjIgMjEuMUwxNzUuMSAxMDkuMiA0MS0yNC45ek0xMzAuMiAyMDBsLTI0LjYgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZsLTE5LjggMGMtMTAuNCAwLTE4IDkuOC0xNS41IDE5LjlMMzIgMjU2IDUgMzY0LjFDMi40IDM3NC4yIDEwLjEgMzg0IDIwLjUgMzg0bDE5LjggMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDk5LjcgMC01NC4zIDE2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjFsNDMuNyAwYzkgMCAxNy41LTMuOCAyMy42LTEwLjRMMzIwLjcgMzkwLjUgMTMwLjIgMjAweiJdfSxuUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtc2hvd2Vycy1oZWF2eSIsaWNvbjpbNTEyLDUxMixbXSwiZjc0MCIsIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDMyMHptNi44IDc5LjZsLTMyIDk2QzY2LjYgNTA4LjIgNTMgNTE1IDQwLjQgNTEwLjhTMjEgNDkzIDI1LjIgNDgwLjRsMzItOTZDNjEuNCAzNzEuOCA3NSAzNjUgODcuNiAzNjkuMlMxMDcgMzg3IDEwMi44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMTQxIDQ5MyAxNDUuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzIyNyAzODcgMjIyLjggMzk5LjZ6bTExMiAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMyNTMgNDkzIDI1Ny4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMzM5IDM4NyAzMzQuOCAzOTkuNnptMTIwIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzM3MyA0OTMgMzc3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlM0NTkgMzg3IDQ1NC44IDM5OS42eiJdfSxvUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWZhbGxpbmciLGljb246WzUxMiw1MTIsW10sImU1NDYiLCJNMzIwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNS40YzAgNDUtMjMuNiA4Ni42LTYyLjEgMTA5LjhsLTQuNiAyLjhDMTMxLjQgMTg0LjcgOTYgMjQ3LjEgOTYgMzE0LjZMOTYgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02OS40YzAtMTYuNyAzLjMtMzMgOS40LTQ4TDM1OS4yIDUwMC4yYzExLjEgMTMuNyAzMS4zIDE1LjggNDUgNC43czE1LjgtMzEuMyA0LjctNDVMMjk1LjIgMzIwIDQwMCAzMjAgNDM4LjQgMzcxLjJjMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOGwtNDMuMi01Ny42QzQzNy4zIDI2My4xIDQyMy4xIDI1NiA0MDggMjU2bC04OSAwLTYyLjktNzUuNWM0MC4zLTM2IDYzLjktODcuOSA2My45LTE0My4xbDAtNS40ek0xMDQgMTQ0YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdfSxNTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0dXJuLWRvd24iLGljb246WzM4NCw1MTIsWzEwNTQ5LCJsZXZlbC1kb3duLWFsdCJdLCJmM2JlIiwiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzIwIDMyMCAzMjBsLTY0IDAgMC0xNjBDMjU2IDcxLjYgMTg0LjQgMCA5NiAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MC02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWwxMjggMTI4eiJdfSxsUGU9TU8sek89e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtcmlnaHQtYW5kLWRvd24tbGVmdC1mcm9tLWNlbnRlciIsaWNvbjpbNTEyLDUxMixbImV4cGFuZC1hbHQiXSwiZjQyNCIsIk0zNDQgMEw0ODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOS04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTMyLTMyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04Ny0zOS0zOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlMzMzQuMyAwIDM0NCAwek0xNjggNTEyTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMCAzNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzM0LjEgMzIwLjIgNDEgMzI3bDM5IDM5IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzE3Ny43IDUxMiAxNjggNTEyeiJdfSxjUGU9ek8sZFBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItdGFnIixpY29uOls2NDAsNTEyLFtdLCJmNTA3IiwiTTI1Ni4xIDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNCAzMDRsNTkuNCAwYzYuNyAwIDEzLjIgLjQgMTkuNyAxLjEtLjkgNC45LTEuNCA5LjktMS40IDE1bDAgOTIuMWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOWwzMS45IDMxLjktMjg2LjMgMGMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjN6TTM1Mi4xIDQxMi4ybDAtOTIuMWMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5Mi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw5NiA5NmMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNzYuMSA3Ni4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMGwtOTYtOTZjLTktOS0xNC4xLTIxLjItMTQuMS0zMy45em0xMDQtNDQuMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSxwUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1zcGFya2xlcyIsaWNvbjpbNjQwLDUxMixbXSwiZTA1ZCIsIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIwOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTExMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjJjLTE5LjIgNS40LTM0LjcgMjAuNC00MC40IDQwLjNsLTYuNSAyMi43LTIyLjcgNi41Yy0yNS4yIDcuMi00Mi41IDMwLjItNDIuNSA1Ni40IDAgMjIuMSAxMi40IDQyIDMxLjQgNTEuOS0yNy41IDE3LjgtNjAuMiAyOC4xLTk1LjQgMjguMWwtMTkuMiAwYy01OS42IDAtMTE2LjktMjIuOS0xNjAtNjRMNzYuNCAzNDFjLTE2LTE1LjItMTYuNi00MC42LTEuNC01Ni42czQwLjYtMTYuNiA1Ni42LTEuNGw2MC41IDU3LjZjMC0xLjUtLjEtMy4xLS4xLTQuNmwwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZsLTcuMyAyNS40LTI1LjQgNy4zYy0zLjkgMS4xLTYuNiA0LjctNi42IDguN3MyLjcgNy42IDYuNiA4LjdsMjUuNCA3LjMgNy4zIDI1LjRjMS4xIDMuOSA0LjcgNi42IDguNyA2LjZzNy42LTIuNyA4LjctNi42bDcuMy0yNS40IDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdsLTI1LjQtNy4zLTcuMy0yNS40ek0xMDQgMTIwbDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMMTA0IDE2OCA5MC4yIDIxNi4zYy0xLjMgNC42LTUuNSA3LjctMTAuMiA3LjdzLTguOS0zLjEtMTAuMi03LjdMNTYgMTY4IDcuNyAxNTQuMkMzLjEgMTUyLjkgMCAxNDguNyAwIDE0NHMzLjEtOC45IDcuNy0xMC4yTDU2IDEyMCA2OS44IDcxLjdDNzEuMSA2Ny4xIDc1LjMgNjQgODAgNjRzOC45IDMuMSAxMC4yIDcuN0wxMDQgMTIwek01ODQgNDA4bDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMNTg0IDQ1NiA1NzAuMiA1MDQuM2MtMS4zIDQuNi01LjUgNy43LTEwLjIgNy43cy04LjktMy4xLTEwLjItNy43TDUzNiA0NTYgNDg3LjcgNDQyLjJjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDggNTQ5LjggMzU5LjdjMS4zLTQuNiA1LjUtNy43IDEwLjItNy43czguOSAzLjEgMTAuMiA3LjdMNTg0IDQwOHoiXX0saFBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy10by1kb3QiLGljb246WzUxMiw1MTIsW10sImU0YmUiLCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45UzE3OS4xIDY0IDE5MiA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2OS40IDM5My40bDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDY0IDY0YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDQ0OCAzMjAgNDQ4bC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOXpNMzIgMjI0bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQgMzMyLjkgNjQgMzIwbDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNDQ4IDE3OS4xIDQ0OCAxOTJsMCAzMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTY0LTY0ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sa089e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1zYWQtY3J5IixpY29uOls1MTIsNTEyLFsxMjg1NTcsInNhZC1jcnkiXSwiZjViMyIsIk0zNTIgNDkzLjRjLTI5LjYgMTItNjIuMSAxOC42LTk2IDE4LjZzLTY2LjQtNi42LTk2LTE4LjZMMTYwIDI5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3MS43QzQ0LjQgNDIxLjYgMCAzNDQgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgODgtNDQuNCAxNjUuNi0xMTIgMjExLjdMNDAwIDI5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE5Ny40ek0xNTIgMTk2bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTcyIDIwYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwek0yMDggMzM2bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4eiJdfSx1UGU9a08sZlBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvbmctc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTE2OSIsIk0yODgtMTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA3Mi4yYy0yMi45LTE1LjMtNTAuNC0yNC4yLTgwLTI0LjItNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRTOTYuNSA0MzIgMTc2IDQzMmMzMCAwIDU3LjgtOS4xIDgwLjgtMjQuOCAzLjMgMTQuMiAxNiAyNC44IDMxLjIgMjQuOCAxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMwNCA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTk2IDI4OGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTI0IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCA0NjR6Il19LG1QZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZW9wbGUtbGluZSIsaWNvbjpbNTc2LDUxMixbXSwiZTUzNCIsIk0yODggMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptOTYgMzEyYzAgMjUtMTIuNyA0Ny0zMiA1OS45bDAgNDQuMS0xMjggMCAwLTQ0LjFDMjA0LjcgMzU5IDE5MiAzMzcgMTkyIDMxMmwwLTQwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA0MHptMTYgMTA0bDAtMjcuM2MxOS45LTIyLjUgMzItNTIuMiAzMi04NC43bDAtMzJjMC0yNi43LTcuMy01MS42LTE5LjktNzMuMSAxMS4xLTQuNSAyMy4yLTYuOSAzNS45LTYuOSA1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgNDAuNi0xMTIgMHpNNjQgMzc1LjRDNDQuOSAzNjQuNCAzMiAzNDMuNyAzMiAzMjBsMC0zMmMwLTUzIDQzLTk2IDk2LTk2IDEyLjcgMCAyNC44IDIuNSAzNS45IDYuOS0xMi42IDIxLjQtMTkuOSA0Ni40LTE5LjkgNzMuMWwwIDMyYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDI3LjMtMTEyIDAgMC00MC42ek0xMjggMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTMyMCAwYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0yNCA0NjRsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxTTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcnNzIixpY29uOls0NDgsNTEyLFsicnNzLXNxdWFyZSJdLCJmMTQzIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMzcgMCAyNDggMTExIDI0OCAyNDggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTAuNS04OS41LTIwMC0yMDAtMjAwLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDgzLjkgMCAxNTIgNjguMSAxNTIgMTUyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxnUGU9U08sYlBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLW1pbnVzIixpY29uOls0NDgsNTEyLFtdLCJmMjcyIiwiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMjQgMjY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXX0sdlBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYXJ0LWRpYWdyYW0iLGljb246WzUxMiw1MTIsW10sImU2OTUiLCJNODAgMzJDNTMuNSAzMiAzMiA1My41IDMyIDgwczIxLjUgNDggNDggNDhsMTUyIDAgMCA0MC00OCA0OC03MiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDY0LTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDcyIDAgNDggNDggMCA0MC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC00MCA0OC00OCA3MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNjQtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNjRjMC0zOS44LTMyLjItNzItNzItNzJsLTcyIDAtNDgtNDggMC00MCAxNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw4MCAzMnoiXX0sQ089e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS10aXJlZCIsaWNvbjpbNTEyLDUxMixbMTI4NTU1LCJ0aXJlZCJdLCJmNWM4IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuNyAzMjguN2MyMi0yMiA1My45LTQwLjcgOTEuMy00MC43czY5LjMgMTguNyA5MS4zIDQwLjdjMTEuMSAxMS4xIDIwLjEgMjMuNCAyNi40IDM1LjQgNi4yIDExLjcgMTAuMyAyNC40IDEwLjMgMzUuOSAwIDUuMi0yLjYgMTAuMi02LjkgMTMuMnMtOS44IDMuNy0xNC43IDEuOGwtMjAuNS03LjdjLTI2LjktMTAuMS01NS41LTE1LjMtODQuMy0xNS4zbC0zLjIgMGMtMjguOCAwLTU3LjMgNS4yLTg0LjMgMTUuM0wxNDkuNiA0MTVjLTQuOSAxLjgtMTAuNCAxLjItMTQuNy0xLjhTMTI4IDQwNS4yIDEyOCA0MDBjMC0xMS42IDQuMi0yNC4yIDEwLjMtMzUuOSA2LjMtMTIgMTUuMy0yNC4zIDI2LjQtMzUuNHpNMTIyLjYgMTU5LjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXX0seVBlPUNPLHhQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLXBvaW50LXJpZ2h0IixpY29uOls1MTIsNTEyLFtdLCJmMGE0IiwiTTQ4MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjA4IDAgMC02NCAyMDggMHpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem02NC02NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bS04OC05NmwuNiAwYy01LjQgOS40LTguNiAyMC4zLTguNiAzMiAwIDEzLjIgNCAyNS40IDEwLjggMzUuNi0yNC45IDguNy00Mi44IDMyLjUtNDIuOCA2MC40IDAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyeiJdfSx3UGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAiLGljb246WzM4NCw1MTIsWzg1OTNdLCJmMDYyIiwiTTIxNC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDEwOS4zIDE2MCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3MC43IDEwNS40IDEwNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6Il19LE1QZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjdWJlcy1zdGFja2VkIixpY29uOls1MTIsNTEyLFtdLCJlNGU2IiwiTTE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjR6bTMyIDM1Mmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzIwIDE5Mmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS0xODIuNi0zLjljMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDUuMyA0NS4zYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC00NS4zIDQ1LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDkyLjEgMjc4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDQ1LjMtNDUuM3pNMzIgMzg0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXX0sX089e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hpbGQtY29tYmF0YW50IixpY29uOls1NzYsNTEyLFsiY2hpbGQtcmlmbGUiXSwiZTRlMCIsIk0xNzYuNSAxMjhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bS0xNiAzNTJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5Mi4yIDIwLjkgMzMuMmM5LjQgMTUgMjkuMiAxOS40IDQ0LjEgMTBzMTkuNC0yOS4yIDEwLTQ0LjFsLTM5LjktNjMuM0MyNjYuOCAxODQgMjIzLjMgMTYwIDE3Ni41IDE2MFM4Ni4yIDE4NCA2MS4zIDIyMy42TDIxLjQgMjg3Yy05LjQgMTUtNC45IDM0LjcgMTAgNDQuMXMzNC43IDQuOSA0NC4xLTEwbDIwLjktMzMuMiAwIDE5Mi4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTQ0OC41IDBsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMCAxMDAuM2MtOS42IDUuNS0xNiAxNS45LTE2IDI3LjdsMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMCAwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmw1OS41IDBjMTAuNCAwIDE4LTkuOCAxNS41LTE5LjlsLTIzLTkyLjEgNDQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC0yNi43IDUzLjEtMTcuN2M2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMmwwLTg0LjVjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA1Ni0xNiA1LjMgMC0xMDkuM2MwLTExLjgtNi40LTIyLjItMTYtMjcuN2wwLTExNi4zYzAtOC44LTcuMi0xNi0xNi0xNnoiXX0selBlPV9PLGtQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2ZXN0LXBhdGNoZXMiLGljb246WzQ0OCw1MTIsW10sImUwODYiLCJNMjAwIDI5My45TDIwMCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42TDY0IDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwbDMuNSAwYy4zIDAgLjYgMCAxIDAgLjYgMCAxLjIgMCAxLjggMCAxOC44IDAgMzQuMSA5LjcgNDQuMSAxOC44IDkuMyA4LjQgMjguNSAyMS4yIDYxLjcgMjEuMnM1Mi40LTEyLjggNjEuNy0yMS4yYzEwLTkuMSAyNS4zLTE4LjggNDQuMS0xOC44IC42IDAgMS4yIDAgMS44IDAgLjMgMCAuNiAwIDEgMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk3LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZsNDcuOSA3MS44YzUuMyA3LjkgOC4xIDE3LjEgOC4xIDI2LjZMNDQ4IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTcwLjFjMC0zLjkgLjUtNy44IDEuNC0xMS42TDMwMy42IDY1LjRDMjg1LjkgNzcuMiAyNTkuOCA4OCAyMjQgODhzLTYxLjktMTAuOC03OS42LTIyLjZsNTQuMiAyMTYuOGMxIDMuOCAxLjQgNy43IDEuNCAxMS42ek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNSAxMTEuNSAzMjAuNWM0LjcgNC43IDEyLjMgNC43IDE3IDBzNC43LTEyLjMgMC0xN0wxMTMgMjg4IDEyOC41IDI3Mi41YzQuNy00LjcgNC43LTEyLjMgMC0xN3MtMTIuMy00LjctMTcgMEw5NiAyNzEgODAuNSAyNTUuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwek0zMDQgMjgwbDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMCAwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il19LFRPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnRpbmktZ2xhc3MtZW1wdHkiLGljb246WzUxMiw1MTIsWyJnbGFzcy1tYXJ0aW5pIl0sImYwMDAiLCJNMzIgMzJDMTkuMSAzMiA3LjQgMzkuOCAyLjQgNTEuOFMuMiA3Ny41IDkuNCA4Ni42bDIxNC42IDIxNC42IDAgMTQ2LjctNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTE0Ni43IDIxNC42LTIxNC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDMyIDQ4MCAzMkwzMiAzMnpNMjU2IDI0Mi43TDEwOS4zIDk2IDQwMi43IDk2IDI1NiAyNDIuN3oiXX0sU1BlPVRPLENQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYWduZXQiLGljb246WzQ0OCw1MTIsWzEyOTUyMl0sImYwNzYiLCJNMCAxNzZMMCAyODhDMCA0MTEuNyAxMDAuMyA1MTIgMjI0IDUxMlM0NDggNDExLjcgNDQ4IDI4OGwwLTExMi0xMjggMCAwIDExMmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExMi0xMjggMHptMC00OGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRsMCA2NHptMzIwIDBsMTI4IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NHoiXX0sX1BlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvYWQtYmFycmllciIsaWNvbjpbNjQwLDUxMixbXSwiZTU2MiIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgMjY2LjMgMTQ5LjIgOTYgNjQgOTYgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQwNS4yIDk2bC03NC4zIDAtNS40IDEwLjctOTAuNiAxODEuMyA3NC4zIDAgNS40LTEwLjcgOTAuNi0xODEuM3pNMzYyLjggMjg4bDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zLTc0LjMgMC01LjQgMTAuNy05MC42IDE4MS4zek0yMDIuOCA5NmwtNS40IDEwLjctOTAuNiAxODEuMyA3NC4zIDAgNS40LTEwLjcgOTAuNi0xODEuMy03NC4zIDB6bTI4OCAxOTJsODUuMiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1My43LTg1LjIgMTcwLjN6Il19LExPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbXBhc3MtZHJhZnRpbmciLGljb246WzUxMiw1MTIsWyJkcmFmdGluZy1jb21wYXNzIl0sImY1NjgiLCJNOTkuMyAyNTYuMWw2OS40LTExOS45Yy01LjYtMTIuMi04LjgtMjUuOC04LjgtNDAuMiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMmw0NC40IDc2LjdjLTIzLjEgMjYtNTMuNyA0NS4xLTg4LjQgNTMuOEwyNTYgMTkxLjkgMTg3LjkgMzA5LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNSA3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NCAxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNTIuNyA2NS44LTEzMy45IDEwOC0yMjQuOCAxMDgtMzUuNCAwLTY5LjQtNi40LTEwMC43LTE4LjFMOTguNyA0NjMuN0M5NCA0NzEuOCA4NyA0NzguNCA3OC42IDQ4Mi42TDIzLjIgNTEwLjNjLTUgMi41LTEwLjkgMi4yLTE1LjYtLjdTMCA1MDEuNSAwIDQ5NmwwLTU1LjRjMC04LjQgMi4yLTE2LjcgNi41LTI0LjFsNjAtMTAzLjdjLTEyLjgtMTEuMi0yNC42LTIzLjUtMzUuMy0zNi44LTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVjNS43IDcuMSAxMS44IDEzLjggMTguMiAyMC4xek0zODEuMSA0MDcuOWMzMi41LTEzIDYyLjQtMzEgODguOS01Mi45bDM1LjYgNjEuNWM0LjIgNy4zIDYuNSAxNS42IDYuNSAyNC4xbDAgNTUuNGMwIDUuNS0yLjkgMTAuNy03LjYgMTMuNnMtMTAuNiAzLjItMTUuNiAuN2wtNTUuNC0yNy43Yy04LjQtNC4yLTE1LjQtMTAuOC0yMC4xLTE4LjlsLTMyLjMtNTUuOHpNMjU2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LFRQZT1MTyxMUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBlcnNvbi1jb25maW5lZCIsaWNvbjpbNDQ4LDUxMixbXSwiZTU3NyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem05NiAxMTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptODAgMTA0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMDIuMWMwIDM2LjQtMjkuNSA2NS45LTY1LjkgNjUuOS0xNy41IDAtMzQuMy02LjktNDYuNi0xOS4zbC01NC43LTU0LjctMjguMSA1Ni4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDQ4LTk2YzQuNi05LjIgMTMuMy0xNS42IDIzLjUtMTcuM3MyMC41IDEuNyAyNy44IDlsNDEuNCA0MS40IDAtNTguN3oiXX0sJFBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYXRlLXdoZWF0IixpY29uOls1MTIsNTEyLFtdLCJlNTVhIiwiTTE3NiAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNDIuNyA2NCA1NiA2NHpNMjQgMTM2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MGwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDE3NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMGw0NTYuNCAwYzE0LjggMCAyNi4yIDEyLjkgMjQuNCAyNy42LTYuMyA1MC4yLTQ0LjQgODkuNC05Mi42IDk4LjRsMCAyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yYy00OC4yLTktODYuMy00OC4yLTkyLjUtOTguNHoiXX0sJE89e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2lnbi1oYW5naW5nIixpY29uOls1MTIsNTEyLFsic2lnbiJdLCJmNGQ5IiwiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzUyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTItMzIgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGwzMiAwIDAtMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHpNMjA4IDE3NmwyNDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjQwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxBUGU9JE8sQU89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyLWJhdHRlcnkiLGljb246WzUxMiw1MTIsWyJiYXR0ZXJ5LWNhciJdLCJmNWRmIiwiTTgwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDE2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxNiAwek0zOTIgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzItMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0zMnpNNjQgMjQwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDIxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il19LERQZT1BTyx2bT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGlydCIsaWNvbjpbNjQwLDUxMixbMTI4MDg1LCJ0LXNoaXJ0IiwidHNoaXJ0Il0sImY1NTMiLCJNMzIwLjIgMTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDUzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MTcuNiAxNjkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTAuNyA1MC43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40IDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwyMi45IDIxNC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wxNDEuNSA1MC43YzEyLTEyIDI4LjMtMTguNyA0NS4zLTE4LjdsNTMuNSAwYzAgNDQuMiAzNS44IDgwIDgwIDgweiJdfSxFUGU9dm0sUFBlPXZtLElQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYXJhZ3JhcGgiLGljb246WzQ0OCw1MTIsWzE4Ml0sImYxZGQiLCJNMTYwIDBMNDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00MTYtNDggMCAwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MC00OCAwQzcxLjYgMzIwIDAgMjQ4LjQgMCAxNjBTNzEuNiAwIDE2MCAweiJdfSxETz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlbnZlbG9wZXMtYnVsayIsaWNvbjpbNTc2LDUxMixbIm1haWwtYnVsayJdLCJmNjc0IiwiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgMTYwIDgwIDAgMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDIwOCAwIDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTI0MCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzIgODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTEyIDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yODggMHptMjAwIDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEwLjQgMTU2LjYgODYuMmMxLjEgLjYgMi4yIC45IDMuNCAuOXMyLjQtLjMgMy40LS45TDMyMCAzMTQuNCAzMjAgMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnpNMzIwIDM2OS4yTDE4Ni42IDQ0Mi42Yy04LjEgNC41LTE3LjMgNi44LTI2LjYgNi44cy0xOC40LTIuNC0yNi42LTYuOEwwIDM2OS4yIDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTQuOHoiXX0sTlBlPURPLEZQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJndWl0YXIiLGljb246WzUxMiw1MTIsW10sImY3YTYiLCJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjYtMTEgMTEtMTggMjQuNi0yMS40IDM5LjYtMy43IDE2LjYtMTkuMSAzMC43LTM2LjEgMzEuNi0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42LTQ0LjggNDQuOC0zNi40IDEyNS44IDE4LjcgMTgwLjlTMTgzLjYgNTI4IDIyOC40IDQ4My4yYzE3LjktMTcuOSAyNy40LTQxLjcgMjguNi02Ny4zIC45LTE3IDE1LTMyLjMgMzEuNi0zNi4xIDE1LTMuNCAyOC42LTEwLjUgMzkuNi0yMS40IDMxLjgtMzEuOCAzMS04NS45IDEuNi0xMzFsNzcuNi03Ny42IDQxLTE1LjRjMy4yLTEuMiA2LjEtMy4xIDguNS01LjVsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDY1IDd6TTIwOCAyNTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdfSxPUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3VpdGNhc2UiLGljb246WzUxMiw1MTIsWzEyOTUyM10sImYwZjIiLCJNMjAwIDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQyNCAyMjQgMCAwLTQyNGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTQxNiA5NmwwIDM4NCAzMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwek05NiA0ODBsMC0zODQtMzIgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMHoiXX0sRU89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXVwIixpY29uOls1MTIsNTEyLFs2MTQ2NywiYXJyb3ctYWx0LWNpcmNsZS11cCJdLCJmMzViIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zbDEwNCAxMDRjNC42IDQuNiA1LjkgMTEuNSAzLjUgMTcuNFMzNjYuNSAyNTYgMzYwIDI1NmwtNTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTU2IDBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45cy0xLjEtMTIuOSAzLjUtMTcuNGwxMDQtMTA0YzYuMi02LjIgMTYuNC02LjIgMjIuNiAweiJdfSxSUGU9RU8sQlBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImYiLGljb246WzMyMCw1MTIsWzEwMl0sIjQ2IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0xMjggMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il19LEhQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ4bWFya3MtbGluZXMiLGljb246WzY0MCw1MTIsW10sImU1OWEiLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXX0sUE89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFydGgtb2NlYW5pYSIsaWNvbjpbNTEyLDUxMixbImdsb2JlLW9jZWFuaWEiXSwiZTQ3YiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDE1MC42YzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQxLjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNnpNNDMyIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDExLjMgMzc5LjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpNMjI0IDQzMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0tOTYtODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTguN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0OC00OGM0LjItNC4yIDEwLTYuNiAxNi02LjZsNi42IDBjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTYgNy4yLTE2IDE2LTE2bDYuNiAwYzYgMCAxMS44IDIuNCAxNiA2LjZsNDggNDhjNiA2IDkuNCAxNC4xIDkuNCAyMi42bDAgNTAuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtNTAuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTMuMy0xMy4zYy02LTYtMTQuMS05LjQtMjIuNi05LjRMMTI4IDM1MnoiXX0scVBlPVBPLFZQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21tZW50LXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJmNGIzIiwiTTQxLTI1QzMxLjYtMzQuMyAxNi40LTM0LjMgNy0yNVMtMi4zLS40IDcgOUw1MzUgNTM3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNi05Ni42YzQ0LjQtNDMuMiA3MS42LTEwMS44IDcxLjYtMTY2LjUgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MC02MyAwLTEyMC44IDIxLjQtMTY1LjQgNTYuOEw0MS0yNXptMTkuNCAxNTVDNDIuMiAxNjMgMzIgMjAwLjMgMzIgMjM5LjkgMzIgMjk0LjIgNTEuMiAzNDQuMiA4My42IDM4NC40TDM0LjggNDc2LjdjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNVM1Ni4xIDUxNCA2NS41IDUxMGwxMTguNC01MC43YzMxLjggMTMuMyA2Ny4xIDIwLjcgMTA0LjEgMjAuNyAzNi40IDAgNzAuOS03LjEgMTAyLjMtMTkuOUw2MC4zIDEzMC4xeiJdfSxqUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGxheSIsaWNvbjpbNDQ4LDUxMixbOTY1NF0sImYwNGIiLCJNOTEuMiAzNi45Yy0xMi40LTYuOC0yNy40LTYuNS0zOS42IC43UzMyIDU3LjkgMzIgNzJsMCAzNjhjMCAxNC4xIDcuNSAyNy4yIDE5LjYgMzQuNHMyNy4yIDcuNSAzOS42IC43bDMzNi0xODRjMTIuOC03IDIwLjgtMjAuNSAyMC44LTM1LjFzLTgtMjguMS0yMC44LTM1LjFsLTMzNi0xODR6Il19LFVQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aWFsLWNpcmNsZS1jaGVjayIsaWNvbjpbNTEyLDUxMixbXSwiZTU5NiIsIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwTDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTYxLjRjLTY2LjEgMzAuMy0xMTIgOTcuMS0xMTIgMTc0LjYgMCAzOS43IDEyIDc2LjYgMzIuNyAxMDcuMi0xMC4zIDMuMS0yMS4zIDQuOC0zMi43IDQuOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMkw2NCA2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6bTk2IDMybDAgMTI4IDk2IDAgMC0xMjgtOTYgMHptOTYgMzM2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdfSxXUGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnJpZGdlLWNpcmNsZS1jaGVjayIsaWNvbjpbNTc2LDUxMixbXSwiZTRjOSIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il19LEdQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjZWRpLXNpZ24iLGljb246WzM4NCw1MTIsW10sImUwZGYiLCJNMjMyIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjYuNUM4OC44IDczLjkgMTYgMTU2LjQgMTYgMjU2Uzg4LjggNDM4LjEgMTg0IDQ1My41bDAgMjYuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQuNmM0Ni44LTMuNyA4OS4xLTIzLjYgMTIxLjMtNTMuOSAxMi45LTEyLjEgMTMuNC0zMi40IDEuMy00NS4ycy0zMi40LTEzLjQtNDUuMi0xLjNjLTIwLjcgMTkuNi00Ny42IDMyLjctNzcuMyAzNi4ybDAtMjcwLjFjMjkuOCAzLjUgNTYuNiAxNi42IDc3LjMgMzYuMiAxMi45IDEyLjEgMzMuMSAxMS41IDQ1LjItMS4zczExLjUtMzMuMS0xLjMtNDUuMkMzMjEuMSA4MC4yIDI3OC44IDYwLjMgMjMyIDU2LjZMMjMyIDMyem0tNDggOTEuOGwwIDI2NC40QzEyNC4zIDM3My44IDgwIDMyMC4xIDgwIDI1NnM0NC4zLTExNy44IDEwNC0xMzIuMnoiXX0sWVBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InB1enpsZS1waWVjZSIsaWNvbjpbNTEyLDUxMixbMTI5NTEzXSwiZjEyZSIsIk0yMjQgMGMzNS4zIDAgNjQgMjEuNSA2NCA0OCAwIDEwLjQtNC40IDIwLTEyIDI3LjktNi42IDYuOS0xMiAxNS4zLTEyIDI0LjkgMCAxNSAxMi4yIDI3LjIgMjcuMiAyNy4ybDQ0LjggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ0LjhjMCAxNSAxMi4yIDI3LjIgMjcuMiAyNy4yIDkuNSAwIDE4LTUuNCAyNC45LTEyIDcuOS03LjUgMTcuNS0xMiAyNy45LTEyIDI2LjUgMCA0OCAyOC43IDQ4IDY0cy0yMS41IDY0LTQ4IDY0Yy0xMC40IDAtMjAuMS00LjQtMjcuOS0xMi02LjktNi42LTE1LjMtMTItMjQuOS0xMi0xNSAwLTI3LjIgMTIuMi0yNy4yIDI3LjJMMzg0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNTYuOCAwYy0xMi44IDAtMjMuMi0xMC40LTIzLjItMjMuMiAwLTkuMiA1LjgtMTcuMyAxMy4yLTIyLjggMTEuNi04LjcgMTguOC0yMC43IDE4LjgtMzQgMC0yNi41LTI4LjctNDgtNjQtNDhzLTY0IDIxLjUtNjQgNDhjMCAxMy4zIDcuMiAyNS4zIDE4LjggMzQgNy40IDUuNSAxMy4yIDEzLjUgMTMuMiAyMi44IDAgMTIuOC0xMC40IDIzLjItMjMuMiAyMy4yTDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzNDMuMmMwLTEyLjggMTAuNC0yMy4yIDIzLjItMjMuMiA5LjIgMCAxNy4zIDUuOCAyMi44IDEzLjIgOC43IDExLjYgMjAuNyAxOC44IDM0IDE4LjggMjYuNSAwIDQ4LTI4LjcgNDgtNjRzLTIxLjUtNjQtNDgtNjRjLTEzLjMgMC0yNS4zIDcuMi0zNCAxOC44LTUuNSA3LjQtMTMuNSAxMy4yLTIyLjggMTMuMi0xMi44IDAtMjMuMi0xMC40LTIzLjItMjMuMkwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGwxMDguOCAwYzE1IDAgMjcuMi0xMi4yIDI3LjItMjcuMiAwLTkuNS01LjQtMTgtMTItMjQuOS03LjUtNy45LTEyLTE3LjUtMTItMjcuOSAwLTI2LjUgMjguNy00OCA2NC00OHoiXX0sWlBlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlbG1ldC11biIsaWNvbjpbNTEyLDUxMixbXSwiZTUwMyIsIk00NzkuNSAyMjRDNDcxLjIgOTguOSAzNjcuMiAwIDI0MCAwIDEwNy41IDAgMCAxMDcuNSAwIDI0MGwwIDU2LjNDMCAzNDQuOCAzOS4yIDM4NCA4Ny43IDM4NGwxMjcuMyAwIDEyOC42IDEyMS40YzQuNSA0LjIgMTAuNCA2LjYgMTYuNSA2LjZsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODYuNSAwLTEuNS0xLjUgMC0xNzQuNSAxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtLjUgMHpNMzIwIDQxNy4ybC03OC03My43IDMyLjQtNTUuNSA0NS42IDAgMCAxMjkuMnpNMjg1LjMgMTAzLjFsMzQuNyA1MiAwLTQzLjJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDk2YzAgNy4xLTQuNiAxMy4zLTExLjQgMTUuM3MtMTQtLjYtMTcuOS02LjRsLTM0LjctNTIgMCA0My4yYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40ek0xNjAgMTEybDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6Il19LFhQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnbGFzcy13YXRlciIsaWNvbjpbMzg0LDUxMixbXSwiZTRmNCIsIk0zMiAwQzIzLjEgMCAxNC42IDMuNyA4LjYgMTAuMlMtLjYgMjUuNCAuMSAzNC4zTDI4LjkgNDM3LjdjMyA0MS45IDM3LjggNzQuMyA3OS44IDc0LjNsMTY2LjYgMGM0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEwzMiAwek03MyAxNTYuNWwtNi42LTkyLjUgMjUxLjMgMC02LjYgOTIuNS0yNC4yIDEyLjFjLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMC0yMC45LTEwLjQtNDUuNS0xMC40LTY2LjQgMC0xOS40IDkuNy00Mi4yIDkuNy02MS42IDBMNzMgMTU2LjV6Il19LEtQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFydC1jaXJjbGUtYm9sdCIsaWNvbjpbNTc2LDUxMixbXSwiZTRmYyIsIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE3Ny40LTc3Yy01LjgtNC4yLTEzLjgtNC0xOS40IC41bC04MCA2NGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOFMzNjkuMiA0MTYgMzc2IDQxNmwzMi45IDAtMTUuOSA0Mi40Yy0yLjUgNi43LS4yIDE0LjMgNS42IDE4LjZzMTMuOCA0IDE5LjQtLjVsODAtNjRjNS4zLTQuMiA3LjQtMTEuNCA1LjEtMTcuOFM0OTQuOCAzODQgNDg4IDM4NGwtMzIuOSAwIDE1LjktNDIuNGMyLjUtNi43IC4yLTE0LjMtNS42LTE4LjZ6Il19LFFQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwdW1wLXNvYXAiLGljb246WzMyMCw1MTIsW10sImUwNmIiLCJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4ek0yMjQgMzQ0YzAgMzUuMy0yOC43IDU2LTY0IDU2cy02NC0yMC43LTY0LTU2YzAtMzIuNSAzNy04MC45IDUwLjktOTcuOSAzLjItMy45IDguMS02LjEgMTMuMS02LjFzOS45IDIuMiAxMy4xIDYuMUMxODcgMjYzLjEgMjI0IDMxMS41IDIyNCAzNDR6Il19LEpQZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLXNjaXNzb3JzIixpY29uOls1MTIsNTEyLFtdLCJmMjU3IiwiTTQwIDIwOGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwxODAuMiAwYy03LjYgOC41LTEyLjIgMTkuNy0xMi4yIDMyIDAgMjUuMyAxOS41IDQ2IDQ0LjMgNDcuOS03LjcgOC41LTEyLjMgMTkuOC0xMi4zIDMyLjEgMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTExMy4xYzAtNDAuMi0xNi03OC44LTQ0LjQtMTA3LjMtMjIuOC0yMi44LTUzLjYtMzUuNi04NS44LTM1LjZMMzM2IDY0Yy0yMS4zIDAtMzkuMyAxMy45LTQ1LjYgMzMuMWw3NC41IDIzLjdjOC40IDIuNyAxMy4xIDExLjcgMTAuNCAyMC4xcy0xMS43IDEzLjEtMjAuMSAxMC40bC02Ny4xLTIxLjQgMCAuMS0yMDQtNjQuMUM2Mi45IDU5LjIgNDAuNSA3MC45IDMzLjkgOTJzNS4xIDQzLjUgMjYuMiA1MC4yTDI2OS41IDIwOCA0MCAyMDh6Il19LElPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvbGx5IixpY29uOls1NzYsNTEyLFsiZG9sbHktYm94Il0sImY0NzIiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGw3Mi45IDAgOTIuMSAyNzYuMmMtMjIuNSAxNy42LTM3IDQ1LTM3IDc1LjggMCA1MyA0MyA5NiA5NiA5NiA1Mi40IDAgOTUuMS00MiA5Ni05NC4zbDIwMi4xLTY3LjRjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNXMtMjMuNy0yNS44LTQwLjUtMjAuMkwzMzEuOCAzNTdjLTE3LjItMjIuMS00My45LTM2LjUtNzQtMzdMMTY1LjcgNDMuOEMxNTYuOSAxNy42IDEzMi41IDAgMTA0LjkgMEwzMiAwek0yMDggNDE2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTI4MC41IDg5LjNjLTI1LjIgOC4yLTM5IDM1LjMtMzAuOCA2MC41bDM5LjYgMTIxLjdjOC4yIDI1LjIgMzUuMyAzOSA2MC41IDMwLjhsMTIxLjctMzkuNmMyNS4yLTguMiAzOS0zNS4zIDMwLjgtNjAuNUw0NjIuOCA4MC41Yy04LjItMjUuMi0zNS4zLTM5LTYwLjUtMzAuOEwyODAuNSA4OS4zeiJdfSxlSWU9SU8sbGc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGFwZXJjbGlwIixpY29uOls1MTIsNTEyLFsxMjgyMDZdLCJmMGM2IiwiTTIyNC42IDEyLjhjNTYuMi01Ni4yIDE0Ny40LTU2LjIgMjAzLjYgMHM1Ni4yIDE0Ny40IDAgMjAzLjZsLTE2NCAxNjRjLTM0LjQgMzQuNC05MC4xIDM0LjQtMTI0LjUgMHMtMzQuNC05MC4xIDAtMTI0LjVMMjkyLjUgMTAzLjNjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxODUgMzAxLjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxNjQtMTY0YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTE2NCAxNjRjLTUzLjEgNTMuMS01My4xIDEzOS4yIDAgMTkyLjNzMTM5LjIgNTMuMSAxOTIuMyAwTDQyOC4zIDI4NC4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMzQzLjQgNDU5LjZjLTc4LjEgNzguMS0yMDQuNyA3OC4xLTI4Mi44IDBzLTc4LjEtMjA0LjcgMC0yODIuOGwxNjQtMTY0eiJdfSx0SWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGVtb2NyYXQiLGljb246WzY0MCw1MTIsW10sImY3NDciLCJNNjQgMzJjMC04LjkgMy44LTIwLjkgNi4yLTI3LjMgMS0yLjggMy44LTQuNyA2LjgtNC43IDEuOSAwIDMuOCAuNyA1LjIgMi4xTDEyOCA0NS43IDE3My44IDIuMWMxLjQtMS4zIDMuMi0yLjEgNS4yLTIuMSAzIDAgNS44IDEuOCA2LjggNC43IDIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjMgMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOGwyMTkuMiAwIDMyIDBjNDAuMyAwIDc4LjIgMTkgMTAyLjQgNTEuMmwxOS4yIDI1LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNGwtMTkuMi0yNS42Yy01LjMtNy0xMS44LTEyLjgtMTkuMi0xN2wwIDg3LjQtMzUyIDAtNDAuNC05NC4zYy0zLjktOS4yLTE1LjMtMTIuNi0yMy42LTdsLTQyLjEgMjhjLTkuMSA2LjEtMTkuNyA5LjMtMzAuNyA5LjNsLTIgMEMyMy45IDI1NiAwIDIzMi4xIDAgMjAyLjcgMCAxOTAuNiA0LjEgMTc4LjkgMTEuNyAxNjkuNEw4Ny42IDc0LjZDNzguMSA2Ny40IDY0IDUzLjIgNjQgMzJ6TTU0NCAzNTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjQtMTYwIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjggMzUyIDB6TTI1NiAyODBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNDgtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMzY4IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LE5PPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1hcnJvdy11cC1yaWdodCIsaWNvbjpbNDQ4LDUxMixbImV4dGVybmFsLWxpbmstc3F1YXJlIl0sImYxNGMiLCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMjcyIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NC4xIDAtMTAzIDEwM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEwMy0xMDMgMCA1NC4xeiJdfSxhSWU9Tk8saUllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZlcnJ5IixpY29uOls2NDAsNTEyLFtdLCJlNGVhIiwiTTIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjgtLjEgMGMuMSAuNyAuMSAxLjMgLjEgMiAwIDMwLjItNy42IDU5LjgtMjIgODYuM2wtMTIuNyAyMy4zLS42IDFjLTIyLjMtMTEuMy00Ni41LTE2LjgtNzAuOC0xNi43LTMyLjUgLjItNjQuOSAxMC43LTkyLjQgMzEuNC0yMi4xIDE2LjYtMjkuMSAxNi42LTUxLjIgMC0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0yMy42IC4yLTQ3LjEgNS43LTY4LjcgMTYuN2wtLjYtMS0xMi43LTIzLjNjLTE0LjQtMjYuNS0yMi01Ni4yLTIyLTg2LjMgMC0uNyAwLTEuNCAuMS0ybC0uMSAwIDAtMTI4YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQ4IDAgMC0zMnpNMTYwIDI1NmwzMjAgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZsLTI4OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJ6TTQwMy40IDQ3Ni4xQzM3OS4xIDQ5NC4zIDM1MS4xIDUxMiAzMjAgNTEycy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sckllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vc3F1aXRvIixpY29uOls1NzYsNTEyLFtdLCJlNTJiIiwiTTE3OC41IDQ5NS4yYy03LjUgOS42LTIxIDEyLjEtMzEuMyA1LjNTMTMzLjUgNDgwIDEzOC45IDQ2OWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC44LTM4LjMtMi40LTIuNGMtNS4zLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjMtMi4xYy01LjgtMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44YzAtMTEuOCA2LjUtMjIuMSAxNi0yNy43bDAtNjAuNSAuMy0zLjNjMS41LTcuMyA4LTEyLjcgMTUuNy0xMi43czE0LjIgNS41IDE1LjcgMTIuN2wuMyAzLjIgMCA2MC41YzkuNiA1LjUgMTYgMTUuOCAxNiAyNy43bDAgMjguOSA1My40LTQ1LjgtMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMmM3LjctOS40IDIxLjMtMTEuNSAzMS40LTQuMyAxMC4xIDcuMSAxMy4xIDIwLjkgNy40IDMxLjdsLTEuMyAyLjEtMjUuOSAzOC45IDEzLjMgNTMuNGMyIDgtLjEgMTYuMy01LjMgMjIuM2wtMi40IDIuNC00NC43IDM4LjMgMTMwLjUgMTQuNWM0Mi44IDQuOCA3NS4xIDQwLjkgNzUuMSA4My45IDAgNDYuNi0zNy44IDg0LjQtODQuNCA4NC40bC04LjEgMGMtMjIuOCAwLTQ0LjktOC41LTYxLjktMjMuOGwtNjYuMS01OS41IDM5LjIgNTIuMmMyLjQgMy4yIDQgNyA0LjYgMTAuOWwuMyA0IDAgNDEgMzYuMiA1OCAxLjIgMi4xYzUuNCAxMSAyIDI0LjctOC4zIDMxLjVzLTIzLjggNC40LTMxLjMtNS4zbC0xLjQtMi00MC02NC0xLjYtMy4xYy0xLjQtMy4xLTIuMS02LjYtMi4xLTEwLjFsMC0zOS44LTMyLjQtNDMuMSAwIDc0LjdjMCAxNy43LTE0LjMgMzItMzIgMzItMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMnoiXX0sc0llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWNpcmNsZS1hcnJvdy1yaWdodCIsaWNvbjpbNTc2LDUxMixbXSwiZTRkMSIsIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ0LjdjLTM1LjcgMi45LTY4LjUgMTUuNi05NiAzNS40bDAtNGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0IDBjLTEzLjggMTkuMi0yNC4xIDQxLTMwLjEgNjQuNS0xLjktLjQtMy45LS41LTUuOS0uNWwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MCA3NC45IDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjEgNDhMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQwLjctNjcuM2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsMjguNyAyOC43LTg5LjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw4OS40IDAtMjguNyAyOC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYtNTZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTU2LTU2Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHoiXX0sRk89e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGVmdC1yaWdodCIsaWNvbjpbNTEyLDUxMixbODU5NiwiYXJyb3dzLWFsdC1oIl0sImYzMzciLCJNNTAyLjYgNDA2LjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzNTIgNDkyLjkgMzUyIDQ4MGwwLTY0LTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyMCAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3pNOS40IDE1MC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMTkuMSAxNjAgMzJsMCA2NCAzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZ6Il19LG5JZT1GTyxvSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlydXMiLGljb246WzUxMiw1MTIsW10sImUwNzQiLCJNMjk2IDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgNDQuMS01My4zIDY2LjEtODQuNSAzNS0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMHMtMTUuNiA0MC45IDAgNTYuNmMzMS4yIDMxLjIgOS4xIDg0LjUtMzUgODQuNS0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwYzQ0LjEgMCA2Ni4xIDUzLjMgMzUgODQuNS0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNnM0MC45IDE1LjYgNTYuNiAwYzMxLjItMzEuMiA4NC41LTkuMSA4NC41IDM1IDAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBjMC00NC4xIDUzLjMtNjYuMSA4NC41LTM1IDE1LjYgMTUuNiA0MC45IDE1LjYgNTYuNiAwczE1LjYtNDAuOSAwLTU2LjZjLTMxLjItMzEuMi05LjEtODQuNSAzNS04NC41IDIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwYy00NC4xIDAtNjYuMS01My4zLTM1LTg0LjUgMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZzLTQwLjktMTUuNi01Ni42IDBDMzQ5LjMgMTA2LjEgMjk2IDg0LjEgMjk2IDQwek0xNjAgMjI0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2MCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGxJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnZW0iLGljb246WzUxMiw1MTIsWzEyODE0Ml0sImYzYTUiLCJNMTE2LjcgMzMuOGM0LjUtNi4xIDExLjctOS44IDE5LjMtOS44bDI0MCAwYzcuNiAwIDE0LjggMy42IDE5LjMgOS44bDExMiAxNTJjNi44IDkuMiA2LjEgMjEuOS0xLjUgMzAuNGwtMjMyIDI1NmMtNC41IDUtMTEgNy45LTE3LjggNy45cy0xMy4yLTIuOS0xNy44LTcuOWwtMjMyLTI1NmMtNy43LTguNS04LjMtMjEuMi0xLjUtMzAuNGwxMTItMTUyem0zOC41IDM5LjhjLTMuMyAyLjUtNC4yIDctMi4xIDEwLjVMMjEwLjUgMTc5LjggNjMuMyAxOTJjLTQuMSAuMy03LjMgMy44LTcuMyA4czMuMiA3LjYgNy4zIDhsMTkyIDE2Yy40IDAgLjkgMCAxLjMgMGwxOTItMTZjNC4xLS4zIDcuMy0zLjggNy4zLThzLTMuMi03LjYtNy4zLThsLTE0Ny4yLTEyLjMgNTcuNC05NS42YzIuMS0zLjUgMS4yLTguMS0yLjEtMTAuNXMtNy45LTItMTAuNyAxTDI1NiAxNzIuMiAxNjUuOSA3NC42Yy0yLjgtMy03LjQtMy40LTEwLjctMXoiXX0sY0llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvaWxldCIsaWNvbjpbNDQ4LDUxMixbMTI4NzAxXSwiZjdkOCIsIk0yNCAwQzEwLjcgMCAwIDEwLjcgMCAyNFMxMC43IDQ4IDI0IDQ4bDggMCAwIDE0OC45Yy0xLjkgMS40LTMuOCAyLjktNS42IDQuNC0xNS41IDEzLjItMjYuNCAzMS42LTI2LjQgNTQuNiAwIDQ2LjkgMTQuMyA4NC4xIDM3IDExMi41IDE0LjIgMTcuNyAzMS4xIDMxLjMgNDguNSA0MS44TDY1LjYgNDY5LjljLTMuMyA5LjgtMS42IDIwLjUgNC40IDI4LjhTODUuNyA1MTIgOTYgNTEybDI1NiAwYzEwLjMgMCAxOS45LTQuOSAyNi0xMy4zczcuNy0xOS4xIDQuNC0yOC44bC0xOS44LTU5LjVjMTcuNC0xMC41IDM0LjMtMjQuMSA0OC41LTQxLjggMjIuNy0yOC40IDM3LTY1LjUgMzctMTEyLjUgMC0yMy4xLTEwLjktNDEuNS0yNi40LTU0LjYtMS44LTEuNS0zLjctMy01LjYtNC40bDAtMTQ4LjkgOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzQzNy4zIDAgNDI0IDBMMjQgMHpNOTYgODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNMjI0IDI4OGMtODguNCAwLTE2MC0xNC4zLTE2MC0zMnM3MS42LTMyIDE2MC0zMiAxNjAgMTQuMyAxNjAgMzItNzEuNiAzMi0xNjAgMzJ6Il19LGRJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaW5nbGUtcXVvdGUtbGVmdCIsaWNvbjpbMTkyLDUxMixbXSwiZTgxYiIsIk0xMjggOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMTZDMCAxNDkuNyA1My43IDk2IDEyMCA5Nmw4IDB6Il19LHBJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxscyIsaWNvbjpbNTc2LDUxMixbXSwiZTFmMyIsIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM1MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptMTc2IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0xNjAgMTUybDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTEyYzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNTA0IDE1OS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek01MTIgMjY0bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzkyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNjR6Il19LGhJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZXQtYnV0dG9uIixpY29uOls0NDgsNTEyLFtdLCJmMTBhIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxVNT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZWN0YW5nbGUteG1hcmsiLGljb246WzUxMiw1MTIsWzYyMTY0LCJyZWN0YW5nbGUtdGltZXMiLCJ0aW1lcy1yZWN0YW5nbGUiLCJ3aW5kb3ctY2xvc2UiXSwiZjQxMCIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sdUllPVU1LGZJZT1VNSxtSWU9VTUsZ0llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndyZW5jaCIsaWNvbjpbNTc2LDUxMixbMTI4Mjk1XSwiZjBhZCIsIk01MDkuNCA5OC42YzcuNi03LjYgMjAuMy01LjcgMjQuMSA0LjMgNi44IDE3LjcgMTAuNSAzNyAxMC41IDU3LjEgMCA4OC40LTcxLjYgMTYwLTE2MCAxNjAtMTcuNSAwLTM0LjQtMi44LTUwLjItOEwxNDYuOSA0OTguOWMtMjguMSAyOC4xLTczLjcgMjguMS0xMDEuOCAwcy0yOC4xLTczLjcgMC0xMDEuOEwyMzIgMjEwLjJjLTUuMi0xNS44LTgtMzIuNi04LTUwLjIgMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgMjAuMSAwIDM5LjQgMy43IDU3LjEgMTAuNSAxMCAzLjggMTEuOCAxNi41IDQuMyAyNC4xbC04OC43IDg4LjdjLTMgMy00LjcgNy4xLTQuNyAxMS4zbDAgNDEuNGMwIDguOCA3LjIgMTYgMTYgMTZsNDEuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsODguNy04OC43eiJdfSxsOD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFzaC1jYW4iLGljb246WzQ0OCw1MTIsWzYxNDYwLCJ0cmFzaC1hbHQiXSwiZjJlZCIsIk0xMzYuNyA1LjlDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMXpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTg4IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LGJJZT1sOCxPTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZS1jZWxscyIsaWNvbjpbNDQ4LDUxMixbInRoIl0sImYwMGEiLCJNMzg0IDk2bDAgNjQtNjQgMCAwLTY0IDY0IDB6bTAgMTI4bDAgNjQtNjQgMCAwLTY0IDY0IDB6bTAgMTI4bDAgNjQtNjQgMCAwLTY0IDY0IDB6TTI1NiAyODhsLTY0IDAgMC02NCA2NCAwIDAgNjR6bS02NCA2NGw2NCAwIDAgNjQtNjQgMCAwLTY0em0tNjQtNjRsLTY0IDAgMC02NCA2NCAwIDAgNjR6TTY0IDM1Mmw2NCAwIDAgNjQtNjQgMCAwLTY0em0wLTE5MmwwLTY0IDY0IDAgMCA2NC02NCAwem0xMjggMGwwLTY0IDY0IDAgMCA2NC02NCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdfSx2SWU9T08seUllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpYmJvbiIsaWNvbjpbMzg0LDUxMixbMTI3ODk1XSwiZjRkNiIsIk0yMzUuMSAwYzMzLjQgMCA2NC41IDE3LjQgODEuOSA0NS45IDEuMiAyIDEzIDIxLjMgMzUuMyA1Ny44IDIxLjEgMzQuNSAxOC4zIDc4LjUtNyAxMTBMMjc4LjMgMjk3LjcgMzY0LjUgNDA2YzUuNSA2LjkgNC40IDE2LjktMi41IDIyLjVsLTgwIDY0Yy02LjkgNS41LTE3IDQuNC0yMi41LTIuNUwzOC42IDIxMy44QzEzLjMgMTgyLjMgMTAuNSAxMzguMyAzMS42IDEwMy44IDU0IDY3LjIgNjUuNyA0Ny45IDY3IDQ1LjkgODQuNCAxNy40IDExNS40IDAgMTQ4LjkgMGw4Ni4zIDB6TTE5MiAxODkuMmw0OC42LTYxLjItOTcuMyAwIDQ4LjYgNjEuMnpNNzUgMzM2LjJsODYuMiAxMDcuOC0zNi44IDQ2Yy01LjUgNi45LTE1LjYgOC0yMi41IDIuNWwtODAtNjRjLTYuOS01LjUtOC0xNS42LTIuNS0yMi41TDc1IDMzNi4yeiJdfSx4SWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFuZG1hcmstZmxhZyIsaWNvbjpbNTEyLDUxMixbXSwiZTUxYyIsIk0zNTItMzJMMjQwLTMyYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNDQtMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYgMCAwIDIyNC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNmwtNTEuMi0zOC40IDAtMjI0IDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE5MiAwIDAtNjQgODAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZ6bTQ4IDIyNGwwIDIyNC02NCAwIDAtMjI0IDY0IDB6bS0xMTIgMGwwIDIyNC02NCAwIDAtMjI0IDY0IDB6bS0xMTIgMGwwIDIyNC02NCAwIDAtMjI0IDY0IDB6Il19LFJPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVwLWRvd24tbGVmdC1yaWdodCIsaWNvbjpbNTEyLDUxMixbImFycm93cy1hbHQiXSwiZjBiMiIsIk0yNzguNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTc5LjEgMTI4IDE5MiAxMjhsMzIgMCAwIDk2LTk2IDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzEyOCAzMzIuOSAxMjggMzIwbDAtMzIgOTYgMCAwIDk2LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDM4NCAzMjAgMzg0bC0zMiAwIDAtOTYgOTYgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzODQgMTc5LjEgMzg0IDE5MmwwIDMyLTk2IDAgMC05NiAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0eiJdfSx3SWU9Uk8sTUllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhci1zaWRlIixpY29uOls2NDAsNTEyLFsxMjg2NjNdLCJmNWU0IiwiTTE0NyAxMDYuN2wtMjkuOCA4NS4zIDEyMi45IDAgMC05Ni03Ny45IDBjLTYuOCAwLTEyLjkgNC4zLTE1LjEgMTAuN3pNNDguNiAxOTMuOUw4Ni41IDg1LjZDOTcuOCA1My41IDEyOC4xIDMyIDE2Mi4xIDMyTDM2MCAzMmMyNS4yIDAgNDguOSAxMS45IDY0IDMybDk2LjIgMTI4LjNDNTg3LjEgMTk2LjUgNjQwIDI1Mi4xIDY0MCAzMjBsMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTYuNCAwYy00IDQ0LjktNDEuNyA4MC04Ny42IDgwcy04My42LTM1LjEtODcuNi04MGwtMTQ0LjcgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLS40IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODBjMC0zMC4xIDIwLjctNTUuMyA0OC42LTYyLjF6TTQ0MCAxOTJsLTY3LjItODkuNmMtMy00LTcuOC02LjQtMTIuOC02LjRsLTcyIDAgMCA5NiAxNTIgMHpNMTUyIDQzMmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTM2MC00MGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdfSxCTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFzaC1hcnJvdy11cCIsaWNvbjpbNDQ4LDUxMixbInRyYXNoLXJlc3RvcmUiXSwiZjgyOSIsIk0xNjcuMS0xNmwxMTMuOSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45TDMyMCAzMiA0MTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgOC43LTI2LjFDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2ek0zMiAxNDRsMzg0IDAtMjEuMSAzMjMuMUMzOTMuMyA0OTIuNCAzNzIuMyA1MTIgMzQ3IDUxMkwxMDEgNTEyYy0yNS4zIDAtNDYuMy0xOS42LTQ3LjktNDQuOUwzMiAxNDR6bTIwOSA3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXX0sekllPUJPLGtJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaWZlLXJpbmciLGljb246WzUxMiw1MTIsW10sImYxY2QiLCJNMzY3LjIgNDEyLjVDMzM1LjkgNDM0LjkgMjk3LjUgNDQ4IDI1NiA0NDhzLTc5LjktMTMuMS0xMTEuMi0zNS41bDU4LTU4YzE1LjggOC42IDM0IDEzLjUgNTMuMyAxMy41czM3LjQtNC45IDUzLjMtMTMuNWw1OCA1OHptOTAuNyAuOGMzMy44LTQzLjQgNTQtOTggNTQtMTU3LjNTNDkxLjggMTQyLjEgNDU4IDk4LjdjOS0xMi41IDcuOS0zMC4xLTMuNC00MS4zUzQyNS44IDQ1IDQxMy4zIDU0QzM2OS45IDIwLjIgMzE1LjMgMCAyNTYgMFMxNDIuMSAyMC4yIDk4LjcgNTRjLTEyLjUtOS0zMC4xLTcuOS00MS4zIDMuNFM0NSA4Ni4yIDU0IDk4LjdDMjAuMiAxNDIuMSAwIDE5Ni43IDAgMjU2UzIwLjIgMzY5LjkgNTQgNDEzLjNjLTkgMTIuNS03LjkgMzAuMSAzLjQgNDEuM1M4Ni4yIDQ2NyA5OC43IDQ1OGM0My40IDMzLjggOTggNTQgMTU3LjMgNTRzMTEzLjktMjAuMiAxNTcuMy01NGMxMi41IDkgMzAuMSA3LjkgNDEuMy0zLjRzMTIuNC0yOC44IDMuNC00MS4zem0tNDUuNS00Ni4xbC01OC01OGM4LjYtMTUuOCAxMy41LTM0IDEzLjUtNTMuM3MtNC45LTM3LjQtMTMuNS01My4zbDU4LTU4QzQzNC45IDE3Ni4xIDQ0OCAyMTQuNSA0NDggMjU2cy0xMy4xIDc5LjktMzUuNSAxMTEuMnpNMzY3LjIgOTkuNWwtNTggNThjLTE1LjgtOC42LTM0LTEzLjUtNTMuMy0xMy41cy0zNy40IDQuOS01My4zIDEzLjVsLTU4LTU4QzE3Ni4xIDc3LjEgMjE0LjUgNjQgMjU2IDY0czc5LjkgMTMuMSAxMTEuMiAzNS41ek0xNTcuNSAzMDkuM2wtNTggNThDNzcuMSAzMzUuOSA2NCAyOTcuNSA2NCAyNTZzMTMuMS03OS45IDM1LjUtMTExLjJsNTggNThjLTguNiAxNS44LTEzLjUgMzQtMTMuNSA1My4zczQuOSAzNy40IDEzLjUgNTMuM3pNMjA4IDI1NmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdfSxTSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29weXJpZ2h0IixpY29uOls1MTIsNTEyLFsxNjldLCJmMWY5IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy00Ni45IDQ2LjktMTIyLjggNDYuOS0xNjkuNyAwcy00Ni45LTEyMi44IDAtMTY5LjcgMTIyLjgtNDYuOSAxNjkuNyAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMHMtMjguMSA3My43IDAgMTAxLjh6Il19LENJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLXByZXNjcmlwdGlvbiIsaWNvbjpbMzg0LDUxMixbXSwiZjU3MiIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODggMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgMjIuNSAwIDU4LjQgNTUtMzMuNCAzMS42Yy05LjYgOS4xLTEwLjEgMjQuMy0uOSAzMy45czI0LjMgMTAuMSAzMy45IC45bDM1LjQtMzMuNSAzNS42IDMzLjVjOS43IDkuMSAyNC44IDguNiAzMy45LTFzOC42LTI0LjgtMS0zMy45bC0zMy42LTMxLjYgMzMuNi0zMS44YzkuNi05LjEgMTAuMS0yNC4zIC45LTMzLjlzLTI0LjMtMTAuMS0zMy45LS45bC0zNS43IDMzLjctNDAuOS0zOC41YzEyLjktMTEuNyAyMS4xLTI4LjYgMjEuMS00Ny41IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01NiAwem0zMiA4MGwtOCAwIDAtMzIgMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMjQgMHoiXX0sX0llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImVyYXNlciIsaWNvbjpbNTc2LDUxMixbXSwiZjEyZCIsIk0xNzguNSA0MTZsMTIzIDAgNjUuMy02NS4zLTE3My41LTE3My41LTEyNi43IDEyNi43IDExMiAxMTJ6TTIyNCA0ODBsLTQ1LjUgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMTcgMzQ1QzYuMSAzMzQuMSAwIDMxOS40IDAgMzA0czYuMS0zMC4xIDE3LTQxTDI2MyAxN0MyNzMuOSA2LjEgMjg4LjYgMCAzMDQgMHMzMC4xIDYuMSA0MSAxN0w1MjcgMTk5YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MWwtMTM1IDEzNSAxMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDB6Il19LEhPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXJnbGFzcy1zdGFydCIsaWNvbjpbMzg0LDUxMixbImhvdXJnbGFzcy0xIl0sImYyNTEiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTI4OCA0MzdsMCAxMS0xOTIgMCAwLTExYzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDY3LjktNjcuOSA2Ny45IDY3LjljMTggMTggMjguMSA0Mi40IDI4LjEgNjcuOXoiXX0sVEllPUhPLHFPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1sZWZ0IixpY29uOls1MTIsNTEyLFs2MTg0MCwiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sImYzNTkiLCJNNTEyIDI1NmEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0xMjQuNyAyNDQuN2wxMDQtMTA0YzQuNi00LjYgMTEuNS01LjkgMTcuNC0zLjVzOS45IDguMyA5LjkgMTQuOGwwIDU2IDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDU2YzAgNi41LTMuOSAxMi4zLTkuOSAxNC44cy0xMi45IDEuMS0xNy40LTMuNWwtMTA0LTEwNGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6Il19LExJZT1xTywkSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3J1emVpcm8tc2lnbiIsaWNvbjpbNDQ4LDUxMixbXSwiZTE1MiIsIk0yNDAgOTZjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNzEuNiA0Ny4xIDEzMi4zIDExMiAxNTIuN0wxOTIgMjU2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDEyLjggMCAyMy4zIDEwLjEgMjQgMjIuNyAxNS41LTkuNSAzMy41LTE0LjcgNTIuMy0xNC43bDExLjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEuOCAwYy0xOC44IDAtMzYuMSAxMC00NS40IDI2LjMtNC41IDcuOS02LjkgMTYuOC02LjkgMjUuOWwwIDc1LjhjNDIuNSAwIDgxLjEtMTYuNiAxMDkuOC00My42IDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yQzM1My43IDQ1Ni44IDI5OS41IDQ4MCAyNDAgNDgwIDExNi4zIDQ4MCAxNiAzNzkuNyAxNiAyNTZTMTE2LjMgMzIgMjQwIDMyYzU5LjUgMCAxMTMuNyAyMy4yIDE1My43IDYxLjEgMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zQzMyMS4xIDExMi42IDI4Mi41IDk2IDI0MCA5NnoiXX0sQUllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNtb2tpbmciLGljb246WzU3Niw1MTIsWzEyODY4NF0sImY0OGQiLCJNMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWwyMSAyMUM0NjkgMTkxIDQ4MCAyMTcuNCA0ODAgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xOWMwLTE0LjktNS45LTI5LjEtMTYuNC0zOS42bC0yMS0yMUMzNTcuMSAxNDYuOSAzMzYgOTYgMzM2IDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjR6TTU1MiAyODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTIxLTIxQzQ0MyA5NyA0MzIgNzAuNiA0MzIgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTljMCAxNC45IDUuOSAyOS4xIDE2LjQgMzkuNmwyMSAyMUM1NTQuOSAxNDEuMSA1NzYgMTkyIDU3NiAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMzIwIDQ0OGw5NiAwIDAtMzItOTYgMCAwIDMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMnptNTc2LTQwbDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LFZPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1wb2xsLXZlcnRpY2FsIixpY29uOls0NDgsNTEyLFsicG9sbCJdLCJmNjgxIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTU2IDE5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMTg0IDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4ek0yMjQgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjA4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdfSxESWU9Vk8sRUllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1jaXJjbGUtbWludXMiLGljb246WzY0MCw1MTIsW10sImU1NDAiLCJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2eiJdfSxQSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmlvaGF6YXJkIixpY29uOls1NzYsNTEyLFs5NzYzXSwiZjc4MCIsIk0yNjAgMTIuNmMwLTguMy03LjYtMTQuNS0xNS41LTEyLjEtNjAuOSAxOC44LTEwNS4xIDc1LjgtMTA1LjEgMTQzLjEgMCAyNS4xIDYuMSA0OC43IDE3IDY5LjUtMjEgMS44LTQyIDguMi02MS41IDE5LjUtNTcuOSAzMy42LTg0LjggMTAwLjItNzAuOSAxNjIuNSAxLjkgOC40IDExLjQgMTIgMTguOSA3LjYgNS0yLjkgNy42LTguNiA3LjEtMTQuNC0uMy0zLjMtLjQtNi42LS40LTEwLjEgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgODguNC05NC41IDExMy42LTE0OC4yIDc1LjQtNC41LTMuMi0xMC41LTMuOS0xNS4zLTEuMS03IDQuMS04LjYgMTMuNi0yLjcgMTkuMSA0Ni42IDQzLjggMTE4IDUzLjkgMTc2LjEgMjAuMiAxNy45LTEwLjQgMzIuOC0yMy45IDQ0LjUtMzkuNCAxMS43IDE1LjYgMjYuNiAyOS4xIDQ0LjUgMzkuNCA1OC4xIDMzLjcgMTI5LjUgMjMuNiAxNzYuMS0yMC4yIDUuOS01LjUgNC4zLTE1LjEtMi43LTE5LjEtNC44LTIuOC0xMC44LTIuMS0xNS4zIDEuMS01My43IDM4LjItMTQ4LjIgMTMtMTQ4LjItNzUuNCAwLTEyMy41IDE4NC40LTEyMy41IDE4NC40IDAgMCAzLjQtLjEgNi44LS40IDEwLjEtLjUgNS44IDIuMSAxMS41IDcuMSAxNC40IDcuNCA0LjMgMTcgLjggMTguOS03LjYgMTMuOS02Mi4yLTEzLTEyOC45LTcwLjktMTYyLjUtMTkuNS0xMS4zLTQwLjQtMTcuNy02MS41LTE5LjUgMTAuOS0yMC44IDE3LTQ0LjQgMTctNjkuNSAwLTY3LjMtNDQuMi0xMjQuMy0xMDUuMS0xNDMuMS03LjktMi40LTE1LjUgMy44LTE1LjUgMTIuMSAwIDUuOSA0IDExIDkuNSAxMy4yIDgzLjQgMzMuNiA3MC44IDE3OC40LTM3LjggMTc4LjRTMTY3LjEgNTkuNCAyNTAuNSAyNS44YzUuNS0yLjIgOS41LTcuMyA5LjUtMTMuMnpNMjQ4LjQgMjg4YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTQzNSAzMTcuN2MtMTYuMiAwLTMxLjQgNS41LTQyLjEgMTUtMTAuMSA5LjEtMTguMSAyMy40LTE4LjEgNDUuNiAwIDIxLjEgNy4yIDM1IDE2LjUgNDQuMSAzMi4yLTI0LjYgNTUuNS02MC41IDYzLjktMTAxLjgtNi4zLTEuOS0xMy4yLTMtMjAuMi0zek0yMDIgMzc4LjNjMC0yMi4zLTgtMzYuNi0xOC4xLTQ1LjYtMTAuNy05LjYtMjUuOS0xNS00Mi4xLTE1LTcgMC0xMy45IDEtMjAuMiAzIDguNCA0MS4zIDMxLjYgNzcuMiA2My45IDEwMS44IDkuNC05LjEgMTYuNS0yMy4xIDE2LjUtNDQuMnptNDEuMi0yMjQuM2M5IDEwLjIgMjMuMiAxOC4yIDQ1LjIgMTguMnMzNi4yLTggNDUuMi0xOC4yYzYuNy03LjYgMTEuNS0xNy41IDEzLjYtMjguNC0xOC4zLTYuOC0zOC4yLTEwLjUtNTguOC0xMC41cy00MC41IDMuNy01OC44IDEwLjVjMi4yIDEwLjkgNi45IDIwLjggMTMuNiAyOC41eiJdfSxqTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZWxsLWNvbmNpZXJnZSIsaWNvbjpbNTEyLDUxMixbMTI4NzE4LCJjb25jaWVyZ2UtYmVsbCJdLCJmNTYyIiwiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuM0MxMjQuOCAxNTYuNyA0MC4yIDI0My43IDMyLjYgMzUybDQ0Ni45IDBDNDcxLjggMjQzLjcgMzg3LjIgMTU2LjcgMjgwIDE0NS4zbDAtMzMuMyAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek0yNCA0MDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDAweiJdfSxJSWU9ak8sTkllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJ1bGVyLWhvcml6b250YWwiLGljb246WzU3Niw1MTIsW10sImY1NDciLCJNNDggMzg0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgMjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAzODR6Il19LEZJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3JzZSIsaWNvbjpbNTc2LDUxMixbMTI4MDE0XSwiZjZmMCIsIk00NDggMjM4LjFsMC03OC4xIDE2IDAgOS44IDE5LjZjMTIuNSAyNS4xIDQyLjIgMzYuNCA2OC4zIDI2IDIwLjUtOC4yIDMzLjktMjggMzMuOS01MC4xTDU3NiA4MGMwLTE5LjEtOC40LTM2LjMtMjEuNy00OGw1LjcgMGM4LjggMCAxNi03LjIgMTYtMTZTNTY4LjggMCA1NjAgMEw0NDggMEMzNzcuMyAwIDMyMCA1Ny4zIDMyMCAxMjhsLTE3MS4yIDBDMTE4LjEgMTI4IDkxLjIgMTQ0LjMgNzYuMyAxNjguOCAzMy4yIDE3NC41IDAgMjExLjQgMCAyNTZsMCA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTZjMC0xMy40IDYuNi0yNS4yIDE2LjctMzIuNSAxLjYgMTMgNi4zIDI1LjQgMTMuNiAzNi40bDI4LjIgNDIuNGM4LjMgMTIuNCA2LjQgMjguNy0xLjIgNDEuNi0xNi41IDI4LTIwLjYgNjIuMi0xMCA5My45bDE3LjUgNTIuNGM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDMzLjcgMGMyMS44IDAgMzcuMy0yMS40IDMwLjQtNDIuMWwtMjAuOC02Mi41Yy0yLjEtNi40LS41LTEzLjQgNC4zLTE4LjJsMTIuNy0xMi43YzEzLjItMTMuMiAyMC42LTMxLjEgMjAuNi00OS43IDAtMi4zLS4xLTQuNi0uMy02LjlsODQgMjRjNC4xIDEuMiA4LjIgMi4xIDEyLjMgMi44TDMyMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2NC4zYzE5LjItMTkuMiAzMS41LTQ1LjcgMzItNzUuN2wwIDAgMC0xLjl6TTQ5NiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il19LE9JZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhciIsaWNvbjpbNDQ4LDUxMixbMTI4MTk3LDEyODE5OF0sImYxMzMiLCJNMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMybDAgMzItMzIgMEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDQ4IDQ0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMjI0TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyLTQ0OCAweiJdfSxSSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtaG9sZGluZy1jaGlsZCIsaWNvbjpbNjQwLDUxMixbXSwiZTRmYSIsIk0zMjAtMzJhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwek00MCA2NGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDE2MC4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDUxLjEgNTEuMWM4LjMgOC4zIDIxLjMgOS42IDMxIDMuMSAxMi45LTguNiAxNC43LTI2LjkgMy43LTM3LjgtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjJsMCAwIDI1LjMgMjUuM2MyMSAyMSAzMi44IDQ5LjUgMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjYuNyAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNUwwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyMjEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuMyAwIDBjNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4yLTExIDExLTkuMiAyOS4yIDMuNyAzNy44IDkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDU2MCAxMDRjMC0yMi4xIDE3LjktNDAgNDAtNDB6TTM4NC41IDE0OWwtMTkuOC0xNi43IDExLjEgODguOGMxLjYgMTMuMi03LjcgMjUuMS0yMC44IDI2LjhzLTI1LjEtNy43LTI2LjgtMjAuOGwtNC40LTM1LTcuNiAwLTQuNCAzNWMtMS42IDEzLjItMTMuNiAyMi41LTI2LjggMjAuOHMtMjIuNS0xMy42LTIwLjgtMjYuOGwxMS4xLTg4LjgtMTkuOCAxNi43Yy0xMC4xIDguNi0yNS4zIDcuMy0zMy44LTIuOHMtNy4zLTI1LjMgMi44LTMzLjhsMjcuOS0yMy42QzI3MS4zIDcyLjggMjk1LjMgNjQgMzIwIDY0czQ4LjcgOC44IDY3LjYgMjQuN2wyNy45IDIzLjZjMTAuMSA4LjYgMTEuNCAyMy43IDIuOCAzMy44cy0yMy43IDExLjQtMzMuOCAyLjh6Il19LEJJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpdGFsaWMiLGljb246WzM4NCw1MTIsW10sImYwMzMiLCJNMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC01OC43IDAtMTMzLjMgMzIwIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDU4LjcgMCAxMzMuMy0zMjAtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il19LEhJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJraGFuZGEiLGljb246WzUxMiw1MTIsWzk3NzJdLCJmNjZkIiwiTTI0MC43IDhjOC45LTcuNCAyMS44LTcuNCAzMC43IDBsMzcuOCAzMS41YzguNyA3LjMgMTEuMSAxOS42IDYgMjkuNi0xLjIgMi40LTIuOCA1LjUtNC42IDkuMiAzNC4yIDE5LjIgNTcuMyA1NS44IDU3LjMgOTcuOHMtMjMuMSA3OC42LTU3LjMgOTcuOGMxLjggMy43IDMuMyA2LjggNC42IDkuMiA1LjEgMTAgMi43IDIyLjMtNiAyOS42bC0zNy4yIDMxIDAgMTkuOGMyMi45LTE1LjcgNDguNC0zMy4zIDc2LjctNTIuNyA0Mi44LTI5LjQgNjguNC03OCA2OC40LTEzMGwwLTExLjFjMC0yMy45LTcuMS00Ny4zLTIwLjQtNjcuMi01LjEtNy43LTQuNi0xNy44IDEuNy0yNC42IDYuNi03LjEgMTcuMi04LjEgMjUuMi0yLjggMjcuNSAxOC4xIDg5LjQgNjcuNSA4OS40IDE0OS4xIDAgNDYuNS0yMC4yIDg4LjYtNDEuOCAxMjAuNC0yMS42IDMyLTQ1LjYgNTUtNTUuMyA2My44LTcuOCA3LjEtMTkgNy45LTI3LjYgM2wtNzAuOC00MC4zLTMyLjcgMjIuNSA0NS41IDMxLjNjMS44LS40IDMuNy0uNyA1LjctLjcgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTEyLjIgMC0yMi4zLTkuMS0yMy44LTIxbC00MC4yLTI3LjYgMCAyOC45YzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43IDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43bDAtMjguMS00MC4zIDI3LjdjLTEuOCAxMS40LTExLjggMjAuMS0yMy43IDIwLjEtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyLjIgMCA0LjQgLjMgNi41IC45bDQ1LjgtMzEuNS0zMi43LTIyLjUtNzAuOCA0MC4zYy04LjcgNC45LTE5LjggNC4xLTI3LjYtMy05LjctOC44LTMzLjctMzEuOS01NS4zLTYzLjgtMjEuNS0zMS44LTQxLjgtNzMuOS00MS44LTEyMC40IDAtODEuNyA2MS45LTEzMS4xIDg5LjQtMTQ5LjEgOC4xLTUuMyAxOC42LTQuMyAyNS4yIDIuOCA2LjQgNi45IDYuOCAxNyAxLjcgMjQuNi0xMy4zIDE5LjktMjAuNCA0My4zLTIwLjQgNjcuMmwwIDExLjFjMCA1MS45IDI1LjYgMTAwLjYgNjguNCAxMzAgMjguNCAxOS42IDUzLjcgMzYuOSA3NS42IDUybDAtMTkuMS0zNy4yLTMxYy04LjctNy4zLTExLjEtMTkuNi02LTI5LjYgMS4yLTIuNCAyLjgtNS41IDQuNi05LjItMzQuMi0xOS4yLTU3LjMtNTUuOC01Ny4zLTk3LjhzMjMuMS03OC42IDU3LjMtOTcuOGMtMS44LTMuNy0zLjMtNi44LTQuNi05LjItNS4xLTEwLTIuNy0yMi4zIDYtMjkuNkwyNDAuNyA4ek0yMjAuMyAxMjIuOWMtMTcgMTEuNS0yOC4yIDMxLTI4LjIgNTMuMXMxMS4yIDQxLjYgMjguMiA1My4xYzYuOC0xOS4yIDExLjgtMzguNCAxMS44LTUzLjFzLTQuOS0zMy45LTExLjgtNTMuMXptNzEuNSAxMDYuMmMxNy0xMS41IDI4LjItMzEgMjguMi01My4xcy0xMS4yLTQxLjYtMjguMi01My4xYy02LjggMTkuMi0xMS44IDM4LjQtMTEuOCA1My4xczQuOSAzMy45IDExLjggNTMuMXoiXX0sVU89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1mcm93bi1vcGVuIixpY29uOls1MTIsNTEyLFsxMjg1NTAsImZyb3duLW9wZW4iXSwiZjU3YSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6Il19LHFJZT1VTyxjZz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGVjayIsaWNvbjpbNDQ4LDUxMixbMTAwMDMsMTAwMDRdLCJmMDBjIiwiTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6Il19LFZJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaW5nZXJwcmludCIsaWNvbjpbNTEyLDUxMixbXSwiZjU3NyIsIk00OCAyNTZjMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4IDYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjUgOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDAgMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjYtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOSA3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOSAxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDI0LjljMCAyNS4yLTEuNSA1MC4zLTQuNCA3NS4zLTEuNyAxNC42IDkuNCAyNy44IDI0LjIgMjcuOCAxMS44IDAgMjEuOS04LjYgMjMuMy0yMC4zIDMuMy0yNy40IDUtNTUgNS04Mi43bDAtMjQuOWMwLTk3LjItNzguOC0xNzYtMTc2LTE3NnpNMTUwLjcgMTQ4LjdjLTkuMS0xMC42LTI1LjMtMTEuNC0zMy45LS40LTIzLjEgMjkuOC0zNi44IDY3LjEtMzYuOCAxMDcuN2wwIDI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45LTMuNCAxNS42IDcuOSAzMS4xIDIzLjkgMzEuMSAxMC41IDAgMTkuOS03IDIyLjItMTcuMyA2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMSA3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjEtMy44IDE0LjMgNi43IDI5IDIxLjUgMjkgOS41IDAgMTcuOS02LjIgMjAuNC0xNS40IDEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdsMC0yNC45YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAyNC45YzAgMzYuMy0zLjUgNzIuNC0xMC40IDEwNy45LTIuNyAxMy45IDcuNyAyNy4yIDIxLjggMjcuMiAxMC4yIDAgMTktNyAyMS0xNyA3LjctMzguOCAxMS42LTc4LjMgMTEuNi0xMTguMWwwLTI0LjljMC01My00My05Ni05Ni05NnptMjQgOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlsMC0yNC45eiJdfSxqSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hhcmdpbmctc3RhdGlvbiIsaWNvbjpbNTc2LDUxMixbXSwiZjVlNyIsIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTI3LjdjLTMyLjUtMTAuMi01Ni00MC41LTU2LTc2LjNsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCAzMiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCAzNS44LTIzLjUgNjYuMS01NiA3Ni4zTDUyMCAzODBjMCAzNy42LTMwLjQgNjgtNjggNjhzLTY4LTMwLjQtNjgtNjhsMC0xMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwwIDEyOS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDcyIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMNjQgNjR6bTgyLjcgMTI1LjdsMzkgMC0yMC45IDY2LjljLTIuNCA3LjYgMy4zIDE1LjQgMTEuMyAxNS40IDIuOSAwIDUuNi0xIDcuOC0yLjlsOTQuNi04MmMzLjEtMi43IDQuOS02LjYgNC45LTEwLjcgMC03LjgtNi4zLTE0LjEtMTQuMS0xNC4xbC0zOSAwIDIwLjktNjYuOWMyLjQtNy42LTMuMy0xNS40LTExLjMtMTUuNC0yLjkgMC01LjYgMS03LjggMi45bC05NC42IDgyYy0zLjEgMi43LTQuOSA2LjYtNC45IDEwLjcgMCA3LjggNi4zIDE0LjEgMTQuMSAxNC4xeiJdfSxVSWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJmNTAyIiwiTTIyNCA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMTk0LjMgMzA0bDU5LjQgMGMyOS43IDAgNTcuNyA3LjMgODIuMyAyMC4xbDAgNC4zYy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw0NS43IDUxMkMyOS4zIDUxMiAxNiA0OTguNyAxNiA0ODIuMyAxNiAzODMuOCA5NS44IDMwNCAxOTQuMyAzMDR6bTMwMS43IC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0sV089e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9iaWxlLXNjcmVlbi1idXR0b24iLGljb246WzM4NCw1MTIsWyJtb2JpbGUtYWx0Il0sImYzY2QiLCJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em02NCAwbDAgMzA0IDIyNCAwIDAtMzA0LTIyNCAwek0xOTIgNDcyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnoiXX0sV0llPVdPLEdJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmNob3ItY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNGFhIiwiTTMyMCA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwek0yODggMGMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNMODAgMzA3LjljMi4xIDExMy4xIDk0LjQgMjA0LjEgMjA4IDIwNC4xIDE2LjYgMCAzMi43LTEuOSA0OC4yLTUuNi0yMC4zLTMwLjUtMzIuMi02Ny0zMi4yLTEwNi40IDAtMjcuMyA1LjctNTMuMyAxNi03Ni45bDAtMTM2LjZjMzcuMy0xMy4yIDY0LTQ4LjcgNjQtOTAuNSAwLTUzLTQzLTk2LTk2LTk2ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sR089e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lIixpY29uOls1NzYsNTEyLFsiYmxpbmQiXSwiZjI5ZCIsIk0yMjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2MCAyMDUuM2wtMjIuNiAyMi42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNC40LTM0LjRjMjMuMi0yMy4yIDU0LjYtMzYuMiA4Ny4zLTM2LjIgMzYuMSAwIDcwLjMgMTUuOCA5My44IDQzLjFsNjguNiA4MGMxMS41IDEzLjQgOS45IDMzLjYtMy41IDQ1LjFzLTMzLjYgOS45LTQ1LjEtMy41bC01NS43LTY1IDAgMTE4LjYgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zem0uMSAxNjUuOGMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41bC02OC4zIDY4LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMMTYwLjEgMzcxem0yMzMuNS02Mi4yYzEwLjYtOCAyNS42LTUuOCAzMy42IDQuOGwxNDQgMTkyYzggMTAuNiA1LjggMjUuNi00LjggMzMuNnMtMjUuNiA1LjgtMzMuNi00LjhsLTE0NC0xOTJjLTgtMTAuNi01LjgtMjUuNiA0LjgtMzMuNnoiXX0sWUllPUdPLFlPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtd2F2ZWZvcm0iLGljb246WzM4NCw1MTIsWyJmaWxlLW1lZGljYWwtYWx0Il0sImY0NzgiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2IDYwLjMgMCA0OC44IDYyLjdjNS4xIDYuNiAxMy4zIDEwIDIxLjYgOS4xczE1LjUtNi4xIDE5LjEtMTMuNmw0Mi45LTkxLjIgOS45IDE5LjhjNC4xIDguMSAxMi40IDEzLjMgMjEuNSAxMy4zbDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU3LjIgMC0yNS40LTUwLjdjLTQuMS04LjItMTIuNi0xMy40LTIxLjgtMTMuM3MtMTcuNSA1LjUtMjEuNCAxMy44bC00Ny4zIDEwMC42LTMyLTQxLjFDODYuNCAzMDcuNCA3OS40IDMwNCA3MiAzMDRMMCAzMDQgMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41eiJdfSxaSWU9WU8sWEllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNyYWNrIixpY29uOls1MTIsNTEyLFtdLCJlM2IxIiwiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODYuNCAwLTMxLjMtNTIuMmMtNC4xLTYuOC0yLjYtMTUuNSAzLjUtMjAuNUwyNTYgMzY4IDE5NS44IDI4NS4yYy0xMC45LTE1IDguMi0zMy41IDIyLjgtMjJsMTE3LjkgOTIuNmM4IDYuMyA4LjIgMTguNCAuNCAyNC45TDI1NiA0NDggMjk0LjQgNTEyIDQwMCA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6Il19LEtJZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYXQtd2l6YXJkIixpY29uOls1MTIsNTEyLFtdLCJmNmU4IiwiTTY0IDQwMGw4NS43LTIwOC4yYzE3LTQxLjMgNDcuOC03NS4zIDg3LjItOTYuM0wzODMuOCAxNy4yYzEyLjMtNi42IDI2LjUgNC43IDIzIDE4LjJMMzY5LjYgMTc3LjhjLTEuMSA0LjEtMS42IDguMy0xLjYgMTIuNiAwIDYuMyAxLjIgMTIuNiAzLjYgMTguNWw3Ni40IDE5MS4xLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjYwLjQgMjMwLjkgMjU2IDIyNCAyNTZzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzIzIDE0NCAzMjkuMSAxNDQgMzM2czQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41IDExLjggMzUuNC0xNDMuMSAwek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OGw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il19LFpPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItZG9jdG9yIixpY29uOls0NDgsNTEyLFsidXNlci1tZCJdLCJmMGYwIiwiTTIyNCA4YTEyMCAxMjAgMCAxIDAgMCAyNDAgMTIwIDEyMCAwIDEgMCAwLTI0MHptNjAgMzEyLjhjLTUuNC0uNS0xMS0uOC0xNi42LS44bC04Ni45IDBjLTUuNiAwLTExLjEgLjMtMTYuNiAuOGwwIDY3LjVjMTYuNSA3LjYgMjggMjQuMyAyOCA0My42IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMTkuNCAxMS41LTM2LjEgMjgtNDMuNmwwLTU4LjRDNjEgMzUzIDE2IDQxMy42IDE2IDQ4NC42IDE2IDQ5OS43IDI4LjMgNTEyIDQzLjQgNTEybDM2MS4xIDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC03MS00NS0xMzEuNS0xMDgtMTU0LjZsMCAzNy40YzIzLjMgOC4yIDQwIDMwLjUgNDAgNTYuNmwwIDMyYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTMyYzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDMyYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTMyYzAtMjYuMSAxNi43LTQ4LjMgNDAtNTYuNmwwLTQ2LjZ6Il19LFFJZT1aTyxYTz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1iYXIiLGljb246WzUxMiw1MTIsWyJiYXItY2hhcnQiXSwiZjA4MCIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA4MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTEybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0sSkllPVhPLEtPPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNwcmF5LWNhbi1zcGFya2xlcyIsaWNvbjpbNTc2LDUxMixbImFpci1mcmVzaGVuZXIiXSwiZjVkMCIsIk0xNjAgMzJsMCA4MCAxMjggMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCAxMjhjLTUzIDAtOTYgNDMtOTYgOTZsMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDhjMC01My00My05Ni05Ni05NmwtMTI4IDB6bTY0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek00NDggNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDMyIDQwMy42IDIuMkM0MDMgMSA0MDEuNCAwIDQwMCAwcy0zIDEtMy42IDIuMkwzODQgMzIgMzU0LjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkwzODQgNjQgMzk2LjQgOTMuOEMzOTcgOTUgMzk4LjYgOTYgNDAwIDk2czMtMSAzLjYtMi4yTDQxNiA2NCA0NDUuOCA1MS42QzQ0NyA1MSA0NDggNDkuNCA0NDggNDh6bTc2LjQgNDUuOEM1MjUgOTUgNTI2LjYgOTYgNTI4IDk2czMtMSAzLjYtMi4yTDU0NCA2NCA1NzMuOCA1MS42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDMyIDUzMS42IDIuMkM1MzEgMSA1MjkuNCAwIDUyOCAwcy0zIDEtMy42IDIuMkw1MTIgMzIgNDgyLjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw1MTIgNjQgNTI0LjQgOTMuOHptNy4yIDEwMC40Yy0uNi0xLjItMi4yLTIuMi0zLjYtMi4ycy0zIDEtMy42IDIuMkw1MTIgMjI0IDQ4Mi4yIDIzNi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiAyNTYgNTI0LjQgMjg1LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw1NDQgMjU2IDU3My44IDI0My42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDIyNCA1MzEuNiAxOTQuMnpNNTEyIDE0NGMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMTI4IDQ2Ny42IDk4LjJDNDY3IDk3IDQ2NS40IDk2IDQ2NCA5NnMtMyAxLTMuNiAyLjJMNDQ4IDEyOCA0MTguMiAxNDAuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw0NDggMTYwIDQ2MC40IDE4OS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDE2MCA1MDkuOCAxNDcuNmMxLjItLjYgMi4yLTIuMiAyLjItMy42eiJdfSxlTmU9S08sdE5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhaHQtc2lnbiIsaWNvbjpbMzIwLDUxMixbXSwiZTBhYyIsIk0xMzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MC03NC40IDBDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN2w3MC4zIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNDggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTQwLjEtMjEuMS03NS4zLTUyLjctOTUuMSAxMy4xLTE4LjMgMjAuNy00MC43IDIwLjctNjQuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTI4bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMTYgMHptLTQ4IDY0bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtNDggMHoiXX0sUU89e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtYXJyb3ctdXAiLGljb246WzUxMiw1MTIsWyJ0ZW1wZXJhdHVyZS11cCJdLCJlMDQwIiwiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yMTIuN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIxMi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTQzOS4xIDkuNGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOS40LTkuNCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTc4LjctOS40IDkuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjNi02IDE0LjEtOS40IDIyLjYtOS40czE2LjYgMy40IDIyLjYgOS40eiJdfSxhTmU9UU8saU5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndlYi1hd2Vzb21lIixpY29uOls2NDAsNTEyLFtdLCJlNjgyIiwiTTM3Mi4yIDUyYzAgMjAuOS0xMi40IDM5LTMwLjIgNDcuMkw0NDggMTkyIDU1Mi40IDE3MS4xYy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDQgMCAxMTcuNSAyMS41IDk2IDQ4IDk2czQ4IDIxLjUgNDggNDhjMCAxMC4xLTMuMSAxOS40LTguNCAyNy4xTDE5MiAxOTIgMjk4LjEgOTkuMWMtMTcuNy04LjMtMzAtMjYuMy0zMC00Ny4xIDAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJ6Il19LHJOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJub24tYmluYXJ5IixpY29uOlszODQsNTEyLFtdLCJlODA3IiwiTTE5MiA1NDRjLTk3LjIgMC0xNzYtNzguOC0xNzYtMTc2IDAtODYuMyA2Mi4xLTE1OCAxNDQtMTczbDAtNDcuMi00OS43IDI0LjgtMyAxLjNjLTE1LjIgNS43LTMyLjUtLjgtMzkuOS0xNS43LTcuNC0xNC44LTIuMi0zMi42IDExLjUtNDEuM2wyLjgtMS42IDM4LjgtMTkuNC0zOC44LTE5LjRjLTE1LjgtNy45LTIyLjItMjcuMS0xNC4zLTQyLjkgNy40LTE0LjggMjQuOC0yMS40IDQwLTE1LjZsMyAxLjMgNDkuNyAyNC44IDAtNDQuMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDQuMiA0OS43LTI0LjggMy0xLjNjMTUuMi01LjggMzIuNSAuOCAzOS45IDE1LjZzMi4yIDMyLjctMTEuNSA0MS4zbC0yLjggMS42LTM4LjcgMTkuNCAzOC43IDE5LjNjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS03LjQgMTQuOC0yNC43IDIxLjQtMzkuOSAxNS42bC0zLTEuMy00OS43LTI0LjggMCA0Ny4yYzgxLjkgMTUuMSAxNDQgODYuOCAxNDQgMTczIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2em0wLTY0YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXX0sc05lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im4iLGljb246WzM4NCw1MTIsWzExMF0sIjRlIiwiTTIxLjEgMzMuOWMxMi43LTQuNiAyNi45LS43IDM1LjUgOS42TDMyMCAzNTkuNiAzMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDM4NGMwIDEzLjUtOC40IDI1LjUtMjEuMSAzMC4xcy0yNi45IC43LTM1LjUtOS42TDY0IDE1Mi40IDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA1MC41IDguNCAzOC41IDIxLjEgMzMuOXoiXX0sSk89e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodCIsaWNvbjpbNTEyLDUxMixbImFycm93cyJdLCJmMDQ3IiwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAxMTQuNy0xMTQuNyAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDExNC43IDAgMCAxMTQuNy05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTExNC43IDExNC43IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTE0LjcgMCAwLTExNC43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il19LG5OZT1KTyxXNT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZSIsaWNvbjpbNTEyLDUxMixbMTI3OTY4LDYzNDk4LDYzNTAwLCJob21lIiwiaG9tZS1hbHQiLCJob21lLWxnLWFsdCJdLCJmMDE1IiwiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6Il19LG9OZT1XNSxsTmU9VzUsY05lPVc1LGROZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcGlubmVyIixpY29uOls1MTIsNTEyLFtdLCJmMTEwIiwiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0wIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00OCAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0zNjggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNzUgMzY5LjFBNDggNDggMCAxIDEgMTQyLjkgNDM3IDQ4IDQ4IDAgMSAxIDc1IDM2OS4xek03NSA3NUE0OCA0OCAwIDEgMSAxNDIuOSAxNDIuOSA0OCA0OCAwIDEgMSA3NSA3NXpNNDM3IDM2OS4xQTQ4IDQ4IDAgMSAxIDM2OS4xIDQzNyA0OCA0OCAwIDEgMSA0MzcgMzY5LjF6Il19LGVSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdhdmVsIixpY29uOls1NzYsNTEyLFsibGVnYWwiXSwiZjBlMyIsIk0xNjkuNiAxNTMuNGwtMTguNy0xOC43Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wyNjUuNi0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyOS42LTYuNmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMTQuOSAxNTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDB6TTI3NiAyMTEuN2wtMzEuNC0zMS40IDExMi0xMTIgMTE5LjQgMTE5LjQtMTEyIDExMi0zMS40LTMxLjQtMjMyIDIzMmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjMyLTIzMnpNMzkwLjkgMzc0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDUwNS42IDIxNC42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE4LjcgMTguN2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0w0NTQuOSAzOTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE4LjctMTguN3oiXX0scE5lPWVSLHRSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRpY2tldC1zaW1wbGUiLGljb246WzU3Niw1MTIsWyJ0aWNrZXQtYWx0Il0sImYzZmYiLCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDguOC03LjQgMTUuNy0xNS43IDE4LjYtMTguOCA2LjUtMzIuMyAyNC40LTMyLjMgNDUuNHMxMy41IDM4LjkgMzIuMyA0NS40YzguMyAyLjkgMTUuNyA5LjggMTUuNyAxOC42bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0QzAgMzExLjIgNy40IDMwNC4zIDE1LjcgMzAxLjQgMzQuNSAyOTQuOSA0OCAyNzcgNDggMjU2cy0xMy41LTM4LjktMzIuMy00NS40QzcuNCAyMDcuNyAwIDIwMC44IDAgMTkybDAtNjR6Il19LGhOZT10Uix1TmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG92ZSIsaWNvbjpbNTEyLDUxMixbMTI4MzMwXSwiZjRiYSIsIk00OTYgNjRjMTMuMiAwIDIwLjcgMTUuMSAxMi44IDI1LjZMNDgwIDEyOCA0ODAgMzA0YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0bC0xMTIgMC00Ni4zIDQ2LjNjLTEwLjQgMTAuNC0yNi41IDEyLjQtMzkuMSA0LjhMNDEuNSA0NDAuOWMtMTctMTAuMi0xNS0zNS41IDMuNC00Mi45TDE2MCAzNTJDMjMuOCAzMTEuMSA3LjUgMTY5LjggMjIgOTUuNyAyNS42IDc3LjkgNDUuMyA3MS40IDYxLjMgODAuMkwzMjAgMjI0IDMyMCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBsOTYgMHptLTk2IDU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHpNMTgyLjUtOS42YzEyLjQtMTMuNyAzMy4zLTguOSA0Mi41IDcuMWw1Ni40IDk4LjNjLTUuOCAxNC40LTkuMiAzMC4xLTkuNCA0Ni41TDEzOC4xIDY4YzEwLjEtMzEuNiAyNy01OC40IDQ0LjQtNzcuNnoiXX0sZk5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhcnAtZHJvcGxldCIsaWNvbjpbNTEyLDUxMixbXSwiZTU3YyIsIk0yNTYgMTYwYzM1LjMgMCA2NC0yNi45IDY0LTYwIDAtMjQtMzMuNy03MC4xLTUyLjItOTMuNS02LjEtNy43LTE3LjUtNy43LTIzLjYgMC0xOC41IDIzLjQtNTIuMiA2OS41LTUyLjIgOTMuNSAwIDMzLjEgMjguNyA2MCA2NCA2MHpNMzY4IDk2YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzE0NCAxNTcuOSAxNDQgOTZjMC0xMS4xIDEuNi0yMS45IDQuNi0zMkw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzcuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My4zIDMyMi43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTEyIDEyOGMwLTM1LjMtMjguNy02NC02NC02NGwtODQuNiAwYzMgMTAuMSA0LjYgMjAuOSA0LjYgMzJ6bTg1LjUgMTc2TDMzNiAzODkuNSAzMzYgMjk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDkzLjUgMHpNOTYgMTI4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sbU5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyZWUtY2l0eSIsaWNvbjpbNjQwLDUxMixbXSwiZTU4NyIsIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyMGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTUyOCAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0ODBsMC0xNjAtMTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODAgMC0yNi43IDEzLjEtNTAuMyAzMy4yLTY0LjktLjgtNC45LTEuMi0xMC0xLjItMTUuMSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6Il19LGFSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InR1cm4tdXAiLGljb246WzM4NCw1MTIsWzEwNTQ4LCJsZXZlbC11cC1hbHQiXSwiZjNiZiIsIk0xNjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSAxOTIgMzIwIDE5MmwtNjQgMCAwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwLTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6Il19LGdOZT1hUixHNT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1xdWFydGVyIixpY29uOlszMjAsNTEyLFsidGVtcGVyYXR1cmUtMSIsInRoZXJtb21ldGVyLTEiLCJ0aGVybW9tZXRlci1xdWFydGVyIl0sImYyY2EiLCJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtMjguN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjguN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il19LGJOZT1HNSx2TmU9RzUseU5lPUc1LGlSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNsaWRlcnMiLGljb246WzUxMiw1MTIsWyJzbGlkZXJzLWgiXSwiZjFkZSIsIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0eiJdfSx4TmU9aVIsd05lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vc3F1ZSIsaWNvbjpbNTc2LDUxMixbMTI4MzMyXSwiZjY3OCIsIk0xNzQuOCAyMjRsMjI2LjQgMGM0My41IDAgNzguOC0zNS4zIDc4LjgtNzguOCAwLTI1LjUtMTIuMy00OS40LTMzLjEtNjQuMkwyOTcuMy0yNS40Yy01LjYtMy45LTEzLTMuOS0xOC41IDBMMTI5LjEgODFDMTA4LjMgOTUuOCA5NiAxMTkuNyA5NiAxNDUuMiA5NiAxODguNyAxMzEuMyAyMjQgMTc0LjggMjI0ek01MTIgNTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNDQ4IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIwNi4zIDAgMjI0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwek0yNDAgMzg0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MC05NiAwIDAtODB6Il19LE1OZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoIixpY29uOlszODQsNTEyLFsxMDRdLCI0OCIsIk0zMjAgMjg4bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAtMjU2IDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAyNTYgMHoiXX0sek5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImluZm8iLGljb246WzE5Miw1MTIsW10sImYxMjkiLCJNNDggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtMjI0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxyUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24td2Fsa2luZyIsaWNvbjpbMzg0LDUxMixbMTI4Njk0LCJ3YWxraW5nIl0sImY1NTQiLCJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0xMDUuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMNjAuMSAxODIuNkM0Mi4xIDIwMC42IDMyIDIyNSAzMiAyNTAuNUwzMiAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6bTEyLjQgMTc5LjRjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDQxLjQgNDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguMy02OC4zYzExLjUtMTEuNSAxOS45LTI1LjggMjQuNC00MS41bDIuMi03LjYtNDYtMzkuNGMtMi41LTIuMi01LTQuNC03LjQtNi44bC0xMC40IDM2LjJ6Il19LGtOZT1yUixzUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy10dXJuLWRvd24iLGljb246WzM4NCw1MTIsWyJsZXZlbC1kb3duIl0sImYxNDkiLCJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHoiXX0sU05lPXNSLENOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkIixpY29uOls1MTIsNTEyLFsxMjg3MzldLCJmMDE4IiwiTTIyMy45IDMybC03Ni4yIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDEuNCA0MjAuNUMtNi4xIDQ1MC43IDE2LjggNDgwIDQ4IDQ4MGwxNzUuOSAwIDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0IDE3Ni4xIDBjMzEuMiAwIDU0LjEtMjkuMyA0Ni42LTU5LjVMNDI2LjUgODAuNkM0MTkuNCA1Mi4xIDM5My44IDMyIDM2NC4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em02NCAxOTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il19LF9OZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcGlyYWwiLGljb246WzUxMiw1MTIsW10sImU4MGEiLCJNMTE1LjUgNy40YzEzLjYtMTEuMyAzMy44LTkuNSA0NS4xIDQuMXM5LjUgMzMuOC00LjEgNDUuMUMxMDAuMiAxMDMuNSA2NCAxNzUuMiA2NCAyNTYgNjQgMzYyIDE1MCA0NDggMjU2IDQ0OHMxOTItODYgMTkyLTE5MmMwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNlMxNzYgMTgwLjkgMTc2IDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtNDguNiAzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTEyIDMzNS41IDExMiAyNTZjMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwczIwMCA4OS41IDIwMCAyMDBjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2QzAgMTU1LjggNDUgNjYuMSAxMTUuNSA3LjR6Il19LG5SPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZnJvd24iLGljb246WzUxMiw1MTIsWzk3ODUsImZyb3duIl0sImYxMTkiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTkwLjYtMTEzLjljLTIwLjQtMjgtNTMuNC00Ni4xLTkwLjYtNDYuMXMtNzAuMiAxOC4xLTkwLjYgNDYuMWMtNy44IDEwLjctMjIuOCAxMy4xLTMzLjUgNS4zcy0xMy4xLTIyLjgtNS4zLTMzLjVDMTU1LjcgMzMwIDIwMi44IDMwNCAyNTYgMzA0czEwMC4zIDI2IDEyOS40IDY1LjljNy44IDEwLjcgNS40IDI1LjctNS4zIDMzLjVzLTI1LjcgNS40LTMzLjUtNS4zek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LFROZT1uUixvUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5lLWdsYXNzLWVtcHR5IixpY29uOlszMjAsNTEyLFsid2luZS1nbGFzcy1hbHQiXSwiZjVjZSIsIk02NCAwQzQ4LjcgMCAzNS42IDEwLjggMzIuNiAyNS43TDMuMiAxNzNDMS4xIDE4My41IDAgMTk0LjIgMCAyMDVsMCAzYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44bDAgMTE1LjItNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTExNS4yQzI2NSAzNTAgMzIwIDI4NS40IDMyMCAyMDhsMC0zYzAtMTAuNy0xLjEtMjEuNC0zLjItMzJMMjg3LjQgMjUuN0MyODQuNCAxMC44IDI3MS4zIDAgMjU2IDBMNjQgMHptMS45IDE4NS42TDkwLjIgNjQgMjI5LjggNjQgMjU0LjEgMTg1LjZjMS4zIDYuNCAxLjkgMTIuOSAxLjkgMTkuNGwwIDNjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0zYzAtNi41IC42LTEzIDEuOS0xOS40eiJdfSxMTmU9b1IsJE5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsYXBwZXJib2FyZCIsaWNvbjpbNTEyLDUxMixbXSwiZTEzMSIsIk00NDggNjRjMiAwIDMuOSAuMSA1LjggLjNsLTk1LjcgOTUuNyA2Ny45IDAgNzItNzJjOC44IDExIDE0IDI0LjkgMTQgNDBsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw3MC4xIDAtOTYgOTYgNjcuOSAwIDk1LTk1IDEtMSA5Mi4xIDAtOTYgOTYgNjcuOSAwIDk1LTk1IDEtMSA4Ni4xIDB6Il19LGxSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvcndhcmQtc3RlcCIsaWNvbjpbMzg0LDUxMixbInN0ZXAtZm9yd2FyZCJdLCJmMDUxIiwiTTIxIDM2LjhjMTIuOS03IDI4LjctNi4zIDQxIDEuOEwzMjAgMjA4LjEgMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzODRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQuMS0yNTggMTY5LjZjLTEyLjMgOC4xLTI4IDguOC00MSAxLjhTMCA0NTQuNyAwIDQ0MEwwIDcyQzAgNTcuMyA4LjEgNDMuOCAyMSAzNi44eiJdfSxBTmU9bFIsY1I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXVwLXJpZ2h0IixpY29uOls0NDgsNTEyLFs4NTk5LCJleHRlcm5hbC1saW5rLXNxdWFyZS1hbHQiXSwiZjM2MCIsIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNjggMTYwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDM1IDM1LTY3IDY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwyNCAyNGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2Ny02NyAzNSAzNWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyMCAzMjEuNyAzMjAgMzEybDAtMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjggMHoiXX0sRE5lPWNSLGRSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stam91cm5hbC13aGlsbHMiLGljb246WzQ0OCw1MTIsWyJqb3VybmFsLXdoaWxscyJdLCJmNjZhIiwiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yNzQuMSA5OS4yYzIuNi0yLjYgNi43LTMuMSA5LjktMS4xIDMyLjEgMjAgNTMuNCA1NS42IDUzLjQgOTYuMiAwIDYyLjYtNTAuNyAxMTMuMy0xMTMuMyAxMTMuM1MxMTAuNyAyNTYuOSAxMTAuNyAxOTQuM2MwLTQwLjYgMjEuNC03Ni4yIDUzLjQtOTYuMiAzLjEtMiA3LjItMS41IDkuOSAxLjFzMy4xIDYuNyAxLjIgOS44Yy01LjIgOC42LTguMiAxOC43LTguMiAyOS41IDAgMTUuMSA1LjkgMjguOCAxNS41IDM5LjEgMi41IDIuNyAyLjkgNi43IC45IDkuNy00LjcgNy40LTcuNCAxNi4xLTcuNCAyNS41IDAgMjEuNiAxNC4zIDM5LjkgMzQgNDUuOWwxLTI0LjhjLTcuMS00LjQtMTEuOC0xMi4yLTExLjgtMjEuMSAwLTkuNiA1LjUtMTggMTMuNS0yMi4xbDMuMy04MS44Yy4yLTQuMyAzLjctNy43IDgtNy43czcuOCAzLjQgOCA3LjdsMy4zIDgxLjhjOCA0LjEgMTMuNSAxMi40IDEzLjUgMjIuMSAwIDguOS00LjcgMTYuNy0xMS44IDIxLjFsMSAyNC44YzE5LjYtNiAzMy45LTI0LjEgMzQtNDUuNmwwLS42Yy0uMS05LjMtMi43LTE3LjktNy40LTI1LjItMS45LTMuMS0xLjYtNy4xIC45LTkuNyA5LjYtMTAuMiAxNS41LTIzLjkgMTUuNS0zOS4xIDAtMTAuOC0zLTIwLjktOC4yLTI5LjUtMS45LTMuMi0xLjQtNy4yIDEuMi05Ljh6Il19LEVOZT1kUixwUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFtcGFnbmUtZ2xhc3NlcyIsaWNvbjpbNjQwLDUxMixbMTI5MzQ2LCJnbGFzcy1jaGVlcnMiXSwiZjc5ZiIsIk0xNTUuNiAxNy4zQzE2MyAzIDE3OS45LTMuNiAxOTUgMS45bDEyNSA0NS42IDEyNS00NS42YzE1LjEtNS41IDMyIDEuMSAzOS40IDE1LjRsNzguOCAxNTIuOWMyOC44IDU1LjggMTAuMyAxMjIuMy0zOC41IDE1Ni42bDMxLjMgODYuMiA0MS0xNWMxNi42LTYgMzUgMi41IDQxIDE5LjFzLTIuNSAzNS0xOS4xIDQxYy00Ny40IDE3LjMtOTQuOCAzNC41LTE0Mi4yIDUxLjgtMTYuNiA2LjEtMzUtMi41LTQxLTE5LjFzMi41LTM1IDE5LjEtNDFsNDEtMTUtMzEuMy04Ni4yYy01OS40IDUuMi0xMTYuMi0zMy45LTEzMC05NS4ybC0xNC42LTY0LjctMTQuNiA2NC43Yy0xMy44IDYxLjMtNzAuNiAxMDAuNC0xMzAgOTUuMmwtMzEuMyA4Ni4yIDQxIDE1YzE2LjYgNi4xIDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMWMtNDcuNC0xNy4zLTk0LjgtMzQuNi0xNDIuMi01MS44LTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxUzI2LjMgMzkyIDQyLjkgMzk4bDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44IDg5LjIgMzIuNSAxMy4xLTU3LjktNzUuMS0yNy40em0yNDAuOSAwbC03NS4xIDI3LjQgMTMuMSA1Ny45IDg5LjItMzIuNS0yNy4yLTUyLjh6Il19LFBOZT1wUixJTmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHVtcHN0ZXIiLGljb246WzU3Niw1MTIsW10sImY3OTMiLCJNMTMyLjMgNjRMMTA2LjcgMTkyIDI0IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMMjYuNSA4MC40QzI5LjggNzAuNiAzOSA2NCA0OS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zMTIgNjRsODIuNyAwIDI1LjYgMTI4LTEwOC4zIDAgMC0xMjh6bTEzMS43IDBsODMgMGMxMC4zIDAgMTkuNSA2LjYgMjIuOCAxNi40bDI1LjMgNzUuOWMuOCAyLjQgMS4yIDUgMS4yIDcuNmwwIDQuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtODIuNyAwLTI1LjYtMTI4ek0yNS43IDI0MGw1MjQuNyAwYy0uNCAyLjEtMTMuMyA3My40LTM4LjkgMjEzLjctMyAxNi4zLTE3LjkgMjcuNi0zNC40IDI2LjFTNDQ4IDQ2NC42IDQ0OCA0NDhsMC0xNi0zMjAgMCAwIDE2YzAgMTYuNi0xMi42IDMwLjQtMjkuMSAzMS45UzY3LjUgNDcwIDY0LjUgNDUzLjdDMzkgMzEzLjMgMjYgMjQyLjEgMjUuNyAyNDB6Il19LE5OZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFydC1jaXJjbGUteG1hcmsiLGljb246WzU3Niw1MTIsW10sImU1MDEiLCJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il19LEZOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wdXRlciIsaWNvbjpbNTc2LDUxMixbXSwiZTRlNSIsIk0zNDguOCAzMkMzNDAuNyA0Ni4xIDMzNiA2Mi41IDMzNiA4MGwwIDE2LTI3MiAwIDAgMjI0IDI3MiAwIDAgNjQtMjcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg0LjggMHpNMzM2IDQzMmMwIDE3LjUgNC43IDMzLjkgMTIuOCA0OEwxMjAgNDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxNiAwek00MzIgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNTYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il19LGhSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndhbmQtbWFnaWMiLGljb246WzUxMiw1MTIsWyJtYWdpYyJdLCJmMGQwIiwiTTM5OC41IDEyLjJsLTg4LjIgODguMiAxMDEuMyAxMDEuMyA4OC4yLTg4LjJDNTA3LjYgMTA1LjYgNTEyIDk1IDUxMiA4NHMtNC40LTIxLjYtMTIuMi0yOS41TDQ1Ny41IDEyLjJDNDQ5LjYgNC40IDQzOSAwIDQyOCAwcy0yMS42IDQuNC0yOS41IDEyLjJ6TTI3Ni40IDEzNC4zTDEyLjIgMzk4LjVDNC40IDQwNi40IDAgNDE3IDAgNDI4czQuNCAyMS42IDEyLjIgMjkuNWw0Mi4zIDQyLjNDNjIuNCA1MDcuNiA3MyA1MTIgODQgNTEyczIxLjYtNC40IDI5LjUtMTIuMkwzNzcuNyAyMzUuNiAyNzYuNCAxMzQuM3oiXX0sT05lPWhSLFJOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmFpbiIsaWNvbjpbNTEyLDUxMixbMTI5NTA0XSwiZjVkYyIsIk0xMjAgNTZjMC0zMC45IDI1LjEtNTYgNTYtNTZsMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMjkuOCAwLTU0LjktMjAuNC02Mi00OC0uNyAwLTEuMyAwLTIgMC00NC4yIDAtODAtMzUuOC04MC04MCAwLTE4IDYtMzQuNiAxNi00OC0xOS40LTE0LjYtMzItMzcuOC0zMi02NCAwLTMwLjkgMTcuNi01Ny44IDQzLjItNzEuMS03LjEtMTItMTEuMi0yNi0xMS4yLTQwLjkgMC00NC4yIDM1LjgtODAgODAtODBsMC0yNHptMjcyIDBsMCAyNGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDE1LTQuMSAyOS0xMS4yIDQwLjkgMjUuNyAxMy4zIDQzLjIgNDAuMSA0My4yIDcxLjEgMCAyNi4yLTEyLjYgNDkuNC0zMiA2NCAxMCAxMy40IDE2IDMwIDE2IDQ4IDAgNDQuMi0zNS44IDgwLTgwIDgwLS43IDAtMS4zIDAtMiAwLTcuMSAyNy42LTMyLjIgNDgtNjIgNDhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI0IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6Il19LEJOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmllZmNhc2UtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjQ2OSIsIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sSE5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLW1lZGljYWwtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNTEyIiwiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdfSxxTmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29kZS1jb21taXQiLGljb246WzU3Niw1MTIsW10sImYzODYiLCJNMjg4IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDMwIDM2MSAzNjUuNCA0MTYgMjg4IDQxNlMxNDYgMzYxIDEzMS4yIDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTkuMiAwQzE0NiAxNTEgMjEwLjYgOTYgMjg4IDk2czE0MiA1NSAxNTYuOCAxMjhsOTkuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05OS4yIDB6Il19LFZOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYnJlYXN0ZmVlZGluZyIsaWNvbjpbNDQ4LDUxMixbXSwiZTUzYSIsIk0yMjQgMGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNNDM2LjggMzgyLjhMMzczLjUgNDYyYy0xNi42IDIwLjctNDYuOCAyNC4xLTY3LjUgNy41LTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uNy0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOGwwLTM2LjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMwIC44IDAgMS42IC4xIDIuNGwxMDEuNCA1MC43YzIzLjcgMTEuOSAzMy4zIDQwLjcgMjEuNSA2NC40cy00MC43IDMzLjMtNjQuNCAyMS41TDI3LjIgNDI3LjNjLTEuMS0uNS0yLjItMS4xLTMuMy0xLjctNC45LTIuOC05LjItNi40LTEyLjYtMTAuNi00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40LTMuMy0xMi0xLjktMjUuMiA0LjgtMzYuNiAuNi0xLjEgMS4zLTIuMiAyLTMuMkw3NS42IDI1Ni4xYzI2LjctNDAuMSA3MS43LTY0LjEgMTE5LjgtNjQuMWw3NS4yIDBjNDYuNSAwIDkwLjEgMjIuNSAxMTcuMiA2MC4zbDUwLjcgNzAuOWMyLjIgMyA0IDYuMSA1LjUgOS40IDIuOSA2LjcgNC4zIDEzLjggNCAyMC44LS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAweiJdfSxqTmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXJheXMiLGljb246WzUxMiw1MTIsW10sImU1NGQiLCJNMzEyLjUgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN2w0Ni4zIDYyLjRjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDMzM4LjUgMTMyIDI5OC44IDExMiAyNTYuNSAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNmw0Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek03LjUgN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsODAgODBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQxLjUgN0MzMi4xLTIuMyAxNi45LTIuMyA3LjUgN3ptNDY0IDBsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpNNy41IDUwNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bTQ2NCAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsODAgODB6Il19LFVOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYW5hdC1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMWQ1IiwiTTE5MiAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MS41QzczLjMgMTA5LjMgMCAxOTAuMSAwIDI4OEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtNjIuNSA0NC44LTExNC41IDEwNC0xMjUuOEwxNjggNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yOTMuOGM1OS4yIDExLjIgMTA0IDYzLjMgMTA0IDEyNS44bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC05Ny45LTczLjMtMTc4LjctMTY4LTE5MC41TDIxNiA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sdVI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic29ydCIsaWNvbjpbMzg0LDUxMixbInVuc29ydGVkIl0sImYwZGMiLCJNMi40IDIwNC4yYzUgMTIgMTYuNiAxOS44IDI5LjYgMTkuOGwzMjAgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0Ljl6bTAgMTAzLjVjLTUgMTItMi4yIDI1LjcgNi45IDM0LjlsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHoiXX0sV05lPXVSLGZSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1yYWRpYXRpb24iLGljb246WzUxMiw1MTIsWzk3NjIsInJhZGlhdGlvbi1hbHQiXSwiZjdiYSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem04MCAwbDY0LjMgMGM4LjcgMCAxNS43LTcuMSAxNy4zLTE1LjYgNC40LTI0LjQgMTguMS00NS41IDM3LjItNTkuNyA3LjQtNS41IDEwLjYtMTUuNiA2LTIzLjZsLTMyLjUtNTYuM2MtNC4zLTcuNS0xMy45LTEwLjMtMjEuMi01LjUtNDguMiAzMS41LTgxLjMgODQuMi04Ni4zIDE0NC44LS43IDguOCA2LjUgMTYgMTUuMyAxNnptMTM3LjkgODkuOGMtOC41LTMuNy0xOC44LTEuNC0yMy41IDYuNmwtMzEgNTMuOGMtNC4zIDcuNS0xLjkgMTcuMiA1LjggMjEuMSAyNi4xIDEzLjIgNTUuNSAyMC43IDg2LjggMjAuN3M2MC43LTcuNSA4Ni44LTIwLjdjNy43LTMuOSAxMC4xLTEzLjYgNS44LTIxLjFsLTMxLTUzLjhjLTQuNi04LTE1LTEwLjMtMjMuNS02LjYtMTEuNyA1LTI0LjUgNy44LTM4LjEgNy44cy0yNi40LTIuOC0zOC4xLTcuOHpNMzUwLjQgMjQwLjRjMS42IDguNiA4LjUgMTUuNiAxNy4zIDE1LjZsNjQuMyAwYzguOCAwIDE2LjEtNy4yIDE1LjMtMTYtNS02MC42LTM4LjEtMTEzLjItODYuMy0xNDQuOC03LjMtNC44LTE2LjgtMi0yMS4yIDUuNUwzMDcuMyAxNTdjLTQuNiA4LTEuNCAxOC4xIDYgMjMuNiAxOS4xIDE0LjIgMzIuNyAzNS40IDM3LjIgNTkuN3pNMjU2IDMwNS43YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXX0sR05lPWZSLFlOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYXB0b3AtY29kZSIsaWNvbjpbNjQwLDUxMixbXSwiZjVmYyIsIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4MSAyMDlsLTMxIDMxIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6TTM5MyAxNzVsNDggNDhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6Il19LFpOZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaW5rIixpY29uOls1MTIsNTEyLFtdLCJlMDZkIiwiTTI4OCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyIDE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDE5Mi02NCAwIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC04MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNjRjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTgwIDAgMC00MGMwLTQuNCAzLjYtOCA4LThsNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA0MC02NCAwIDAtMTkyeiJdfSxYTmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtZnJvbS13YXRlci1wdW1wIixpY29uOls2NDAsNTEyLFtdLCJlNGI2IiwiTTE0NCAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNzYtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA3OS42YzE3LjYtMiAzNiAyLjUgNTEuMyAxNCAzLjQgMi42IDYuMSAxLjQgOS44LS4zbC44LS40YzUuNy0yLjYgMTIuOS02LjkgMjEuNy0xMy41IDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuMy0zMS40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDEwLjctOC4xIDIyLjktMTIuNyAzNS4zLTE0LjFsMC03OS41YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC01NiAwIDAtMTQyLjEgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ5NyAzOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTg4IDg4Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgMCAxNDIuMS0xMzYgMCAwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwxNDQgMzJ6TTQ3NC42IDQ3Ni4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDgyLjMgMTcuNiA0OTAuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6Il19LG1SPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvcGhvbmUtbGluZXMtc2xhc2giLGljb246WzU3Niw1MTIsWyJtaWNyb3Bob25lLWFsdC1zbGFzaCJdLCJmNTM5IiwiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNTEgMTUxIDAtMzAuMmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwzMjggODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy0xLjkgMjIuOS0xMS44IDQzLjQtMjYuOSA1OWwzMy45IDMzLjljMjUuNS0yNiA0MS4zLTYxLjYgNDEuMy0xMDAuOWwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDUyLjYtMjEuMSAxMDAuMi01NS4zIDEzNC44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0yOTcuOCAzNjcuN2w0MS40IDQxLjRjLTguOCAyLjQtMTcuOSA0LjMtMjcuMyA1LjRsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzE2OS4zIDQwMi43IDk2IDMyMS45IDk2IDIyNGwwLTQwYzAtNS4xIDEuNi05LjkgNC40LTEzLjhsNDMuNiA0My42IDAgMTAuMmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NCAzLjMgMCA2LjYtLjEgOS44LS4zeiJdfSxLTmU9bVIsUU5lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNlcnZlciIsaWNvbjpbNDQ4LDUxMixbXSwiZjIzMyIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjE2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4em0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdfSx5bT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyIixpY29uOls0NDgsNTEyLFsxMjgxMDAsNjIxNDQsNjI0NzAsInVzZXItYWx0IiwidXNlci1sYXJnZSJdLCJmMDA3IiwiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtOTguNS03OS44LTE3OC4zLTE3OC4zLTE3OC4zbC01OS40IDB6Il19LEpOZT15bSxlRmU9eW0sdEZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNub3dmbGFrZSIsaWNvbjpbNTEyLDUxMixbMTAwNTIsMTAwNTRdLCJmMmRjIiwiTTI4OC4yIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2Mi4xLTE1LTE1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDQ5IDQ5IDAgNzAuNi02MS4yLTM1LjMtMTcuOS02Ni45Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4zIDk4IDk4LjcgMTEwLjhsNS41IDIwLjUtNTMuNy0zMUMzNS4yIDkxLjUgMTUuNiA5Ni43IDYuOCAxMTJzLTMuNiAzNC45IDExLjcgNDMuN2w1My43IDMxLTIwLjUgNS41Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w2Ni45LTE3LjkgNjEuMiAzNS4zLTYxLjIgMzUuMy02Ni45LTE3LjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDIwLjUgNS41LTUzLjcgMzFDMy4yIDM2NS4xLTIgMzg0LjcgNi44IDQwMHMyOC40IDIwLjYgNDMuNyAxMS43bDUzLjctMzEtNS41IDIwLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDE3LjktNjYuOSA2MS4yLTM1LjMgMCA3MC42LTQ5IDQ5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTUtMTUgMCA2Mi4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Mi4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC03MC42IDYxLjIgMzUuMyAxNy45IDY2LjljMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTUuNS0yMC41IDUzLjcgMzFjMTUuMyA4LjggMzQuOSAzLjYgNDMuNy0xMS43czMuNi0zNC45LTExLjctNDMuN2wtNTMuNy0zMSAyMC41LTUuNWMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTY2LjkgMTcuOS02MS4yLTM1LjMgNjEuMi0zNS4zIDY2LjkgMTcuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTIwLjUtNS41IDUzLjctMzFjMTUuMy04LjggMjAuNi0yOC40IDExLjctNDMuN3MtMjguNC0yMC41LTQzLjctMTEuN2wtNTMuNyAzMSA1LjUtMjAuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTE3LjkgNjYuOS02MS4yIDM1LjMgMC03MC42IDQ5LTQ5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTE1IDE1IDAtNjIuMXoiXX0sYUZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhdXJ1cyIsaWNvbjpbMzg0LDUxMixbXSwiZTg0ZiIsIk0zMzYtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCA1OC41LTI4LjYgMTEwLjMtNzIuNSAxNDIuMyA1My4yIDM0LjEgODguNSA5My44IDg4LjUgMTYxLjcgMCAxMDYtODYgMTkyLTE5MiAxOTJTMCA0MjYgMCAzMjBDMCAyNTIuMSAzNS4zIDE5Mi40IDg4LjUgMTU4LjMgNDQuNiAxMjYuMyAxNiA3NC41IDE2IDE2IDE2LTEuNyAzMC4zLTE2IDQ4LTE2UzgwLTEuNyA4MCAxNmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMlMzMDQgNzcuOSAzMDQgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE5MiAxOTJhMTI4IDEyOCAwIDEgMCAwIDI1NiAxMjggMTI4IDAgMSAwIDAtMjU2eiJdfSxpRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2t1bGwtY3Jvc3Nib25lcyIsaWNvbjpbNDQ4LDUxMixbMTI4MzY5LDk3NjBdLCJmNzE0IiwiTTM4NCAxNDRDMzg0IDY0LjUgMzEyLjQgMCAyMjQgMFM2NCA2NC41IDY0IDE0NGMwIDQ3LjEgMjUuMSA4OC45IDY0IDExNS4ybDAgMjguOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4LjhjMzguOS0yNi4zIDY0LTY4LjEgNjQtMTE1LjJ6TTE2MCAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDUuNSAzMzkuN2MtNi44LTE2LjMtMjUuNS0yNC00MS44LTE3LjJMMjI0IDM5Ny4zIDQ0LjMgMzIyLjVjLTE2LjMtNi44LTM1IC45LTQxLjggMTcuMnMuOSAzNSAxNy4yIDQxLjhMMTQwLjggNDMyIDE5LjcgNDgyLjVDMy40IDQ4OS4zLTQuMyA1MDggMi41IDUyNC4zczI1LjUgMjQgNDEuOCAxNy4yTDIyNCA0NjYuNyA0MDMuNyA1NDEuNWMxNi4zIDYuOCAzNS0uOSA0MS44LTE3LjJzLS45LTM1LTE3LjItNDEuOEwzMDcuMiA0MzIgNDI4LjMgMzgxLjVjMTYuMy02LjggMjQtMjUuNSAxNy4yLTQxLjh6Il19LHJGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXNvLXNpZ24iLGljb246WzQ0OCw1MTIsW10sImUyMjIiLCJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDY0LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDMyLTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgOTYgMGM2NS42IDAgMTIyLTM5LjUgMTQ2LjctOTZsMzcuMyAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNC44IDBjLjUtNS4zIC44LTEwLjYgLjgtMTZzLS4zLTEwLjctLjgtMTZsMjQuOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zNy4zIDBDMzYyIDcxLjUgMzA1LjYgMzIgMjQwIDMyTDExMiAzMnptMTk5LjYgOTZsLTE2Ny42IDAgMC0zMiA5NiAwYzI4LjQgMCA1NCAxMi40IDcxLjYgMzJ6TTE0NCAxNzZsMTkwLjcgMGMuOSA1LjIgMS4zIDEwLjUgMS4zIDE2cy0uNSAxMC44LTEuMyAxNmwtMTkwLjcgMCAwLTMyem0xNjcuNiA4MGMtMTcuNiAxOS42LTQzLjEgMzItNzEuNiAzMmwtOTYgMCAwLTMyIDE2Ny42IDB6Il19LHNGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aW5lLWdsYXNzIixpY29uOlszMjAsNTEyLFsxMjc4NjNdLCJmNGUzIiwiTTMyLjYgMjUuN0MzNS42IDEwLjggNDguNyAwIDY0IDBMMjU2IDBjMTUuMyAwIDI4LjQgMTAuOCAzMS40IDI1LjdMMzE2LjggMTczYzIuMSAxMC41IDMuMiAyMS4yIDMuMiAzMmwwIDNjMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAxMTUuMiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTE1LjJDNTUgMzUwIDAgMjg1LjQgMCAyMDhsMC0zYzAtMTAuNyAxLjEtMjEuNCAzLjItMzJMMzIuNiAyNS43ek03Ny40IDEyOGwxNjUuMSAwLTEyLjgtNjQtMTM5LjUgMC0xMi44IDY0eiJdfSxZNT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW1wZXJhdHVyZS1oYWxmIixpY29uOlszMjAsNTEyLFsxMjc3NzcsInRlbXBlcmF0dXJlLTIiLCJ0aGVybW9tZXRlci0yIiwidGhlcm1vbWV0ZXItaGFsZiJdLCJmMmM5IiwiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTkyLjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDkyLjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdfSxuRmU9WTUsb0ZlPVk1LGxGZT1ZNSxjRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGlja2V0IixpY29uOls1NzYsNTEyLFsxMjc5MDNdLCJmMTQ1IiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNjRDMCAyMDAuOCA3LjQgMjA3LjcgMTUuNyAyMTAuNiAzNC41IDIxNy4xIDQ4IDIzNSA0OCAyNTZzLTEzLjUgMzguOS0zMi4zIDQ1LjRDNy40IDMwNC4zIDAgMzExLjIgMCAzMjBsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtOC44LTcuNC0xNS43LTE1LjctMTguNi0xOC44LTYuNS0zMi4zLTI0LjQtMzIuMy00NS40czEzLjUtMzguOSAzMi4zLTQ1LjRjOC4zLTIuOSAxNS43LTkuOCAxNS43LTE4LjZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDMzNmwwLTE2MC0yNTYgMCAwIDE2MCAyNTYgMHpNMTEyIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyeiJdfSxkRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2hlYXQtYXduLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU5OCIsIk00OTYgNTc2YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNODEgNTI5Yy05LjQgOS4zLTI0LjUgOS4zLTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOUw4MSA1Mjl6bTMwLjItMjk0LjRjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4zIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2wxMiAxMmMtLjggNy0xLjIgMTQuMi0xLjIgMjEuNCAwIDIwIDMgMzkuMyA4LjcgNTcuNC0zNi44IDIxLjgtODUgMTctMTE2LjYtMTQuN0wxNjUuNiA0NDQuMyA4MSA1MjlDNjkuNyA1MTcuNyA1OC40IDUwNi4zIDQ3IDQ5NWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xek00OTYgNDc2YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptMC0xNDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNiA4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6TTIxNS4yIDEzMC42YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDI0LjItNS45IDUwLjEtMi4xIDcxLjkgMTAuOC0zMi4yIDI0LjktNTYuMiA1OS44LTY3LjQgMTAwLjEtMy44LTIuOC03LjUtNi0xMS05LjVsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNTI2LjcgMTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDAgOC44IDguOCA5LjMgMjIuNyAxLjcgMzIuMUw1NjAuNiA0OSA0NDYuMiAxNjMuNGM3LjcgMSAxNS4zIDMgMjIuNSA1LjlMNTI3IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljMy4yIDMuMiA0LjcgNy40IDQuNyAxMS42LTE3LjctNS40LTM2LjUtOC4zLTU1LjktOC4zLTM0LjIgMC02Ni4zIDguOS05NC4xIDI0LjZsLTkyLjctOTIuN2MtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMUw0NjUgNDkgNDA2LjcgMTA3LjNjMi44IDcuMSA0LjcgMTQuNSA1LjggMjIuMUw1MjYuNyAxNXoiXX0scEZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy10dXJuLXJpZ2h0IixpY29uOls0NDgsNTEyLFtdLCJlNGMwIiwiTTMxMy40LTYuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDEyOCAxMjggMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgMjQxLjcgMCAyMjRsMC0zMkMwIDEyMS4zIDU3LjMgNjQgMTI4IDY0bDIxMC43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptLTk2IDI1NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDM4NCA5NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zeiJdfSxoRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FuZHktY2FuZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjc4NiIsIk00MjEuOCAzOS42QzQ1MiA4NS4yIDQ1Ni41IDE0Mi45IDQzNS4xIDE5MmwtMTY1LjQgMCA0MS40LTQxLjRjLjgtLjggMS41LTEuNiAyLjItMi40TDQyMS44IDM5LjZ6TTI2OCAxMDIuOWMtLjggLjctMS42IDEuNC0yLjQgMi4ybC0yOC4xIDI4LjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNUwxNzUgMTQuNkMyMjkuOS00MC4yIDMxNC41LTQ2LjcgMzc2LjUtNS42TDI2OCAxMDIuOXpNMTI1LjcgMzM2bDgwLTgwIDE4MSAwLTgyLjUgODIuNSAwLTIuNS0xNzguNSAwem0xMTcgNjRMMTQxLjQgNTAxLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNWwxMC43LTEwLjcgMTgxIDB6Il19LHVGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aGVlbGNoYWlyIixpY29uOls1MTIsNTEyLFtdLCJmMTkzIiwiTTEzNiA0MGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTExNy45IDE5Ny42bDEyLjYgNjNjLTM4LjYgMTIuNC02Ni41IDQ4LjctNjYuNSA5MS40IDAgNTMgNDMgOTYgOTYgOTYgMzUuNiAwIDY2LjctMTkuNCA4My4zLTQ4LjIgMi4zIC4xIDQuNiAuMiA3IC4ybDQuMSAwYzEgMCAyLjEgMCAzLjEgMGw1NS4yIDBjLTIwLjQgNjQuOS04MSAxMTItMTUyLjcgMTEyLTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwIDAtNzMuOCA1MC0xMzUuOSAxMTcuOS0xNTQuNHptMTQ4LjYtMjguMWwyMy43IDExOC41IDYwLjUgMGMzMy4zIDAgNjMuMiAyMC43IDc0LjkgNTEuOWwyNS41IDY4IDE4LjctNi4yYzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMnMtMy41IDM0LjktMjAuMiA0MC41bC00OCAxNmMtMTYuMyA1LjQtMzQtMy00MC4xLTE5LjFsLTM2LjMtOTYuOWMtMi4zLTYuMi04LjMtMTAuNC0xNS0xMC40bC04Ni4xIDBjLS40IDAtLjggMC0xLjMgMGwtMTMuMSAwYy0zMC41IDAtNTYuOC0yMS41LTYyLjgtNTEuNEwxNjUuMyAxODkuN2MtNi40LTMxLjkgMTgtNjEuNyA1MC42LTYxLjcgMjQuNiAwIDQ1LjggMTcuNCA1MC42IDQxLjV6Il19LGZGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcGVsbC1jaGVjayIsaWNvbjpbNTc2LDUxMixbXSwiZjg5MSIsIk0xMjAgMzJjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2OGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMTYgMHptNDAgMTI4bC02NCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwek0zMDQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDcyIDBjNDguNiAwIDg4LTM5LjQgODgtODggMC0yMy42LTkuMy00NS0yNC40LTYwLjggMTAuMy0xNC40IDE2LjQtMzIuMSAxNi40LTUxLjIgMC00OC42LTM5LjQtODgtODgtODhsLTY0IDB6bTY0IDExMmwtMzIgMCAwLTQ4IDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6TTMzNiAyNTZsMC00OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwem0yMzMgODRjMTEtMTMuOCA4LjgtMzMuOS01LTQ1cy0zMy45LTguOC00NSA1bC0xMDUuNyAxMzIuMS0zOC43LTM4LjdjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzYuNCA2LjQgMTUuMyA5LjggMjQuNCA5LjNzMTcuNS00LjkgMjMuMi0xMkw1NjkgMzQweiJdfSxtRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sdW1lLW9mZiIsaWNvbjpbMzIwLDUxMixbXSwiZjAyNiIsIk05NiAzNTJsLTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsNDggMCAxMzQuMS0xMTkuMmM2LjQtNS43IDE0LjYtOC44IDIzLjEtOC44IDE5LjIgMCAzNC44IDE1LjYgMzQuOCAzNC44bDAgMzc4LjRjMCAxOS4yLTE1LjYgMzQuOC0zNC44IDM0LjgtOC41IDAtMTYuNy0zLjEtMjMuMS04LjhMOTYgMzUyeiJdfSxnRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibHVuZ3MiLGljb246WzU3Niw1MTIsWzEyOTcyOV0sImY2MDQiLCJNMzIwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTQxLjktMzIgMTkuMiAwLTExNi43YzAtMjQuNS0xOS45LTQ0LjQtNDQuNC00NC40LTEyLjUgMC0yNC40IDUuMy0zMi44IDE0LjVsLTI2LjQgMjlDNDIuOSAxNjAuOCAwIDI3MS44IDAgMzg3bDAgMzAuNWMwIDUyLjIgNDIuMyA5NC41IDk0LjUgOTQuNSAyMiAwIDQzLjctNS4xIDYzLjQtMTVsNS0yLjVjMzcuNC0xOC43IDYxLTU2LjkgNjEtOTguOGwwLTEyOCA2NC0zOC40IDY0IDM4LjQgMCAxMjhjMCA0MS44IDIzLjYgODAuMSA2MSA5OC44bDUgMi41YzE5LjcgOS44IDQxLjQgMTUgNjMuNCAxNSA1Mi4yIDAgOTQuNS00Mi4zIDk0LjUtOTQuNWwwLTYuMmMwLTExMS4xLTM2LjctMjE5LTEwNC40LTMwN0w0MjguOSA0OC43Yy04LjEtMTAuNi0yMC43LTE2LjctMzQtMTYuNy0yMy43IDAtNDIuOSAxOS4yLTQyLjkgNDIuOWwwIDExOC4yLTMyLTE5LjIgMC0xNDEuOXoiXX0sYkZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2ttYXJrIixpY29uOlszODQsNTEyLFsxMjgyNzgsNjE1OTFdLCJmMDJlIiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDgwYzAgMTEuNSA2LjIgMjIuMiAxNi4yIDI3LjhzMjIuMyA1LjUgMzIuMi0uNEwxOTIgNDIxLjMgMzM1LjUgNTA3LjRjOS45IDUuOSAyMi4yIDYuMSAzMi4yIC40UzM4NCA0OTEuNSAzODQgNDgwbDAtNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il19LHZGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXJjb2RlIixpY29uOls0NDgsNTEyLFtdLCJmMDJhIiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnptMjA4LThsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptLTk2IDBsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXX0seG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlzdC1vbCIsaWNvbjpbNTEyLDUxMixbImxpc3QtMS0yIiwibGlzdC1udW1lcmljIl0sImYwY2IiLCJNMCA3MkMwIDU4LjggMTAuNyA0OCAyNCA0OGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTA0IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTgwLTI0IDBDMTAuNyA5NiAwIDg1LjMgMCA3MnpNMzAuNCAzMDEuMkM0MS44IDI5Mi42IDU1LjcgMjg4IDcwIDI4OGw0LjkgMGMzMy43IDAgNjEuMSAyNy40IDYxLjEgNjEuMSAwIDE5LjYtOS40IDM3LjktMjUuMiA0OS40bC0yNCAxNy41IDMzLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTAuNyAwQzEzLjEgNDY0IDAgNDUwLjkgMCA0MzQuNyAwIDQyNS4zIDQuNSA0MTYuNSAxMi4xIDQxMWw3MC41LTUxLjNjMy40LTIuNSA1LjQtNi40IDUuNC0xMC42IDAtNy4yLTUuOS0xMy4xLTEzLjEtMTMuMUw3MCAzMzZjLTMuOSAwLTcuNyAxLjMtMTAuOCAzLjZMMzguNCAzNTUuMmMtMTAuNiA4LTI1LjYgNS44LTMzLjYtNC44Uy0xIDMyNC44IDkuNiAzMTYuOGwyMC44LTE1LjZ6TTIyNCA2NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdfSx5RmU9eG0seEZlPXhtLHdGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS14bWFyayIsaWNvbjpbNTc2LDUxMixbXSwiZTVhMSIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdfSxNRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3ViZSIsaWNvbjpbNTEyLDUxMixbXSwiZjFiMiIsIk0yMjQuMy0yLjVjMTkuOC0xMS40IDQ0LjItMTEuNCA2NCAwTDQ2NC4yIDk5YzE5LjggMTEuNCAzMiAzMi42IDMyIDU1LjRsMCAyMDNjMCAyMi45LTEyLjIgNDQtMzIgNTUuNEwyODguMyA1MTQuNWMtMTkuOCAxMS40LTQ0LjIgMTEuNC02NCAwTDQ4LjUgNDEzYy0xOS44LTExLjQtMzItMzIuNi0zMi01NS40bDAtMjAzYzAtMjIuOSAxMi4yLTQ0IDMyLTU1LjRMMjI0LjMtMi41em0yMDcuOCAzNjBsMC0xNjYuMS0xNDMuOCA4MyAwIDE2Ni4xIDE0My44LTgzeiJdfSx6RmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFwZSIsaWNvbjpbNTc2LDUxMixbXSwiZjRkYiIsIk00MTIuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MCAwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0UzMyIDEzMi4zIDMyIDI1NiAxMzIuMyA0ODAgMjU2IDQ4MGwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTMxLjIgMHpNMjU2IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptNDggOTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0sa0ZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvbWIiLGljb246WzU3Niw1MTIsWzEyODE2M10sImYxZTIiLCJNNDgwLTE2YzYuOSAwIDEzIDQuNCAxNS4yIDEwLjlsMTMuNSA0MC40IDQwLjQgMTMuNUM1NTUuNiA1MSA1NjAgNTcuMSA1NjAgNjRzLTQuNCAxMy0xMC45IDE1LjJsLTQwLjQgMTMuNS0xMy41IDQwLjRDNDkzIDEzOS42IDQ4Ni45IDE0NCA0ODAgMTQ0cy0xMy00LjQtMTUuMi0xMC45bC0xMy41LTQwLjQtNDAuNC0xMy41QzQwNC40IDc3IDQwMCA3MC45IDQwMCA2NHM0LjQtMTMgMTAuOS0xNS4ybDQwLjQtMTMuNSAxMy41LTQwLjRDNDY3LTExLjYgNDczLjEtMTYgNDgwLTE2ek0zMjEuNCA5Ny40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xMC45IDEwLjljNy45IDIyIDEyLjIgNDUuNyAxMi4yIDcwLjUgMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzMyIDQxOC45IDMyIDMwNCAxMjUuMSA5NiAyNDAgOTZjMjQuNyAwIDQ4LjUgNC4zIDcwLjUgMTIuM2wxMC45LTEwLjl6TTE0NCAzMDRjMC01MyA0My05NiA5Ni05NiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHoiXX0sZ1I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2NhbGUtdW5iYWxhbmNlZCIsaWNvbjpbNjQwLDUxMixbImJhbGFuY2Utc2NhbGUtbGVmdCJdLCJmNTE1IiwiTTUxOS44IDYyLjRjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNVM1MTYuMy0zLjkgNDk5LjYgMS42bC0xMTMgMzcuN2MtMTMuOS0yMy41LTM5LjYtMzkuMy02OC45LTM5LjMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCAzIC4yIDUuOSAuNSA4LjhMMTE1LjYgMTI5LjZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmwxMzUuNS00NS4yYzQuNSAzLjIgOS4zIDUuOSAxNC40IDguMmwwIDMyNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTI5NC43YzIxLTkuMiAzNy4yLTI3IDQ0LjItNDlsMTI1LjktNDJ6TTQzNy4zIDI4OGw3Mi40LTEyNC4yIDcyLjQgMTI0LjItMTQ0LjkgMHptNzIuNCA5NmM2Mi45IDAgMTE1LjItMzQgMTI2LTc4LjkgMi42LTExLTEtMjIuMy02LjctMzIuMUw1MzMuOCAxMDkuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDM5MC40IDI3My4xYy01LjcgOS44LTkuMyAyMS4xLTYuNyAzMi4xIDEwLjggNDQuOCA2My4xIDc4LjkgMTI2IDc4Ljl6TTEyNi44IDI5MS44bDcyLjQgMTI0LjItMTQ0LjkgMCA3Mi40LTEyNC4yek0uOSA0MzMuMUMxMS43IDQ3OCA2NCA1MTIgMTI2LjggNTEyczExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMMTUwLjkgMjM3LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEw3LjYgNDAxLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjF6Il19LFNGZT1nUixiUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtY2FyZXQtbGVmdCIsaWNvbjpbNDQ4LDUxMixbImNhcmV0LXNxdWFyZS1sZWZ0Il0sImYxOTEiLCJNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnpNMTI4IDI1NmMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNFMyODggMTQyLjUgMjg4IDE1MmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnoiXX0sQ0ZlPWJSLF9GZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydWxlciIsaWNvbjpbNTc2LDUxMixbMTI4MjA3XSwiZjU0NSIsIk0yMDkuMSA1MTYuMmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjguMSA0MDMuMWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsMTctMTcgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDMzLjktMzMuOSA1MC45IDUwLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01MC45LTUwLjkgMzMuOS0zMy45IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMTctMTdjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBMNTQ4LjUgMTA4LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjA5LjEgNTE2LjJ6Il19LFRGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpIixpY29uOlszMjAsNTEyLFsxMDVdLCI0OSIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOTYgMCAwIDMyMC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwIDAtMzIwIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il19LHdtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbHVtZS14bWFyayIsaWNvbjpbNTc2LDUxMixbInZvbHVtZS1tdXRlIiwidm9sdW1lLXRpbWVzIl0sImY2YTkiLCJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTM2NyAxNzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDQ3IDQ3LTQ3IDQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00Ny00NyA0Ny00N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC00NyA0Ny00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6Il19LExGZT13bSwkRmU9d20sQUZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFyY2h3YXkiLGljb246WzUxMiw1MTIsW10sImY1NTciLCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMCAwLTEyOGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTI4IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMjcyLTQ0OCAwIDAgMjcyeiJdfSx2Uj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZGlnZ2luZyIsaWNvbjpbNTc2LDUxMixbImRpZ2dpbmciXSwiZjg1ZSIsIk0yMDggNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMC41IDE4MS4zYzUuOS0xMS45IDIwLjMtMTYuNyAzMi4yLTEwLjdsMjQuNiAxMi4zIDEyLjItMjAuNGMxOC45LTMxLjUgNTMuMi01MC41IDg5LjYtNTAuNSA0Ni4yIDAgODcuNyAzMC41IDEwMC41IDc1LjRsMzIuMiAxMTIuNyA5Mi45IDQ2LjQgMjUuOC00M2M1LjgtOS42IDE2LjItMTUuNSAyNy40LTE1LjVzMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTNTU1LjUgNTEyIDU0NCA1MTJsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4yTDM3MCAzODcuOCAyMS4zIDIxMy41Yy0xMS45LTUuOS0xNi43LTIwLjMtMTAuNy0zMi4yek05NC4zIDMwNy40bDExMiA1NmMxMC44IDUuNCAxNy43IDE2LjUgMTcuNyAyOC42bDAgODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OC4yLTYxLjMtMzAuNy0zNi4zIDEwOWMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMlMtMy45IDQ4Ni42IDEuNyA0NjkuOWw0OC0xNDRjMi45LTguOCA5LjUtMTUuOSAxOC4xLTE5LjRzMTguMy0zLjIgMjYuNiAuOXoiXX0sREZlPXZSLE1tPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdhdWdlLWhpZ2giLGljb246WzUxMiw1MTIsWzYyNDYxLCJ0YWNob21ldGVyLWFsdCIsInRhY2hvbWV0ZXItYWx0LWZhc3QiXSwiZjYyNSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTE2LjItNi0zMS4xLTE2LTQyLjNsNjkuNS0xMzguOWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJzLTI2LjMtMS4xLTMyLjIgMTAuN0wyNjEuMSAyODguMmMtMS43LS4xLTMuNC0uMi01LjEtLjItMzUuMyAwLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNMTc2IDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05NiAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zNTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0sRUZlPU1tLFBGZT1NbSxJRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2VuZGVybGVzcyIsaWNvbjpbMzg0LDUxMixbXSwiZjIyZCIsIk0xOTIgMTI4YTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCAzMjBhMTkyIDE5MiAwIDEgMCAwLTM4NCAxOTIgMTkyIDAgMSAwIDAgMzg0eiJdfSxORmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtc3VuIixpY29uOls2NDAsNTEyLFs5OTI1XSwiZjZjNCIsIk0yMDguMyAxOTJjNDMuMSAwIDgwLjUgMjQuNCA5OS4yIDYwLjEgMTQuNy0xNy4yIDM2LjQtMjguMSA2MC44LTI4LjEgNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOS0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMzIwIDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjctNzguNSA2Ni05MS4yLTEuMy02LjgtMi0xMy43LTItMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnptMTkyLTIyMy44YzUuMyAwIDEwLjMgMi43IDEzLjMgNy4xbDQ3LjMgNzAuNCA4My4zLTE2LjNjNS4yLTEgMTAuNiAuNyAxNC4zIDQuNCAzLjggMy44IDUuNCA5LjIgNC40IDE0LjRsLTE2LjMgODMuMyA3MC40IDQ3LjNjNC40IDMgNy4xIDggNy4xIDEzLjMgMCA1LjMtMi42IDEwLjMtNyAxMy4ybC03MC40IDQ3LjMgMTQuNSA3NC4yYy0xNy4yLTIxLjctNDAuNC0zOC40LTY3LjItNDcuMy0yLjUtMTIuNy02LjktMjQuNi0xMi44LTM1LjcgOS42LTE0LjkgMTUuMi0zMi43IDE1LjItNTEuNyAwLTUzLTQzLTk2LTk2LTk2LTQ3LjkgMC04Ny42IDM1LjEtOTQuOCA4MC45LTIwLjktMTYtNDUuOS0yNy03My4xLTMxLjFsMjEuNS0xNC41LTE2LjMtODMuMi0uMy0yYy0uMy00LjYgMS4zLTkuMSA0LjYtMTIuNCAzLjgtMy44IDkuMi01LjQgMTQuNC00LjRsODMuMyAxNi4zIDQ3LjMtNzAuNCAxLjItMS42YzMtMy41IDcuNC01LjUgMTIuMS01LjV6bTAgMTc1LjhjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAzLjgtLjUgNy42LTEuNCAxMS4xLTIxLjctMTYuOS00OC45LTI3LjEtNzguNi0yNy4xLTQuNiAwLTkuMSAuMi0xMy41IC43IDYuNC0xOSAyNC4zLTMyLjcgNDUuNS0zMi43eiJdfSxkZz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodCIsaWNvbjpbNTEyLDUxMixbODU5NF0sImYwNjEiLCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYweiJdfSx6bT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kc2hha2UiLGljb246WzU3Niw1MTIsWzEyOTMwOSw2MjY2MiwiaGFuZHNoYWtlLWFsdCIsImhhbmRzaGFrZS1zaW1wbGUiXSwiZjJiNSIsIk0yNjguOSA4NS4yTDE1Mi4zIDIxNC44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTgyLjdMMjIzLjQgNjQgMTgzLjggNjRjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDExMiA5NiAwIDMyIDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0NDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdfSxGRmU9em0sT0ZlPXptLHlSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1za2lpbmciLGljb246WzU3Niw1MTIsWzk5NzUsInNraWluZyJdLCJmN2M5IiwiTTQxNiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIuNyAzMDAuOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4ybDE5Ny44IDEwMi43IDYyLjMtODcuMi04Mi05Mi4yYy0xMS0xMi40LTE2LjItMjcuNS0xNi4yLTQyLjRsMTExLjYgNTMuNCA0Mi45IDQ4LjJjMTQuOSAxNi43IDE2LjIgNDEuNiAzLjIgNTkuOGwtNjQuNCA5MC4yIDEyOC4zIDY2LjZjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzMzLjNDMS4yIDMyNy4yLTMuNCAzMTIuNyAyLjcgMzAwLjl6TTEwMyA0OS42bDE4IDguNyA4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTcgODQuOCA0MSAuNC0uMiA3Ni4xLTMzLjhjMzEuMy0xMy45IDY3LjktLjcgODMuMiAyOS45bDI4LjkgNTcuOCA2OC43IDI3LjVjMTYuNCA2LjYgMjQuNCAyNS4yIDE3LjggNDEuNnMtMjUuMiAyNC40LTQxLjYgMTcuOEwzOTMuOCAyMjRjLTEwLjktNC40LTE5LjgtMTIuNi0yNS4xLTIzLjFsLTExLjUtMjMuMWMtMTYuNCA5LjQtMjUuOSAxNC44LTI4LjUgMTYuM2wtNy42LTMuNy0xODUuNi04OS42LTkuMiAxOC4zYy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE3LjktMTcuNi04LjVDODEuMSA3NC42IDc3LjggNjUgODEuNiA1N1M5NSA0NS43IDEwMyA0OS42eiJdfSxSRmU9eVIsQkZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyaWRnZS13YXRlciIsaWNvbjpbNjQwLDUxMixbXSwiZTRjZSIsIk02NCA2NGw1MTIgMCAwIDExMmMtMzcuNiA5LjQtNjQgNDMuMi02NCA4MmwwIDc2LjRjLTIxLTkuNy00My41LTE0LjUtNjYtMTQuNC0xMCAuMS0yMC4xIDEuMS0zMCAzLjFsMC0zNS4xYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzIuN2MtNS4zLS41LTEwLjctLjgtMTYtLjctMjcuNyAuMi01NS40IDcuOC04MCAyM2wwLTg1YzAtMzguOC0yNi40LTcyLjYtNjQtODJMNjQgNjR6TTQwMy40IDQ0NC4xQzM3OS4xIDQ2Mi4zIDM1MS4xIDQ4MCAzMjAgNDgwcy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sSEZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLW5nbyIsaWNvbjpbNTc2LDUxMixbXSwiZTRkNyIsIk0xMjggMEM5Mi43IDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0OCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDIwOCAwIDAtMjcyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMzA0IDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTUyMCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTgwYzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4MGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwem0tMTY4IDBsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtMjRjMC0xMS05LTIwLTIwLTIwbC04IDBjLTExIDAtMjAgOS0yMCAyMCAwIDYuNSAzLjEgMTIuNCA4IDE2bDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwyMC40IDBjMS45IDkuMSA5LjkgMTYgMTkuNiAxNiAxMSAwIDIwLTkgMjAtMjAgMC0xOS45LTE2LjEtMzYtMzYtMzZsLTI0IDBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0em0tOTAuMS0zMi45Yy00LjEtOC4zLTEzLjUtMTIuNy0yMi41LTEwLjVTMjIwIDM5MC43IDIyMCA0MDBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00My4zIDI2LjEgNTIuMmM0LjEgOC4zIDEzLjUgMTIuNyAyMi41IDEwLjVTMzI0IDUzNy4zIDMyNCA1MjhsMC0xMjhjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgNDMuMy0yNi4xLTUyLjJ6Il19LHFGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpZ2xvbyIsaWNvbjpbNTc2LDUxMixbXSwiZjdhZSIsIk0zMjAgMzMuOGwwIDEyNi4yLTI3MS41IDBjNTEuNy03Ny4yIDEzOS42LTEyOCAyMzkuNS0xMjggMTAuOCAwIDIxLjUgLjYgMzIgMS44ek0zNjggMTYwbDAtMTE2LjdjNjYgMTkgMTIyLjIgNjEgMTU5LjUgMTE2LjdMMzY4IDE2MHpNMjIuNiAyMDhsNzMuNCAwIDAgMTEyLTk2IDBjMC0zOS43IDgtNzcuNiAyMi42LTExMnpNMTc2IDMyMGwtMzIgMCAwLTExMiAyODggMCAwIDExMi0zMiAwIDAgNDggMTc2IDAgMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjQgMTc2IDAgMC00OHptMzA0IDBsMC0xMTIgNzMuNCAwQzU2OCAyNDIuNCA1NzYgMjgwLjMgNTc2IDMyMGwtOTYgMHpNMjg4IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdfSx4Uj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtZG9sbGFyLXRvLXNsb3QiLGljb246WzU3Niw1MTIsWyJkb25hdGUiXSwiZjRiOSIsIk05NiAyMjRhMTkyIDE5MiAwIDEgMSAzODQgMCAxOTIgMTkyIDAgMSAxIC0zODQgMHptMTc2LTkybDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDI0OCAyNzJjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6TTQ4IDM0NGwwIDEwNGMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdfSxWRmU9eFIsakZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InkiLGljb246WzM4NCw1MTIsWzEyMV0sIjU5IiwiTTU4IDQ1LjRDNDcuOCAzMSAyNy44IDI3LjcgMTMuNCAzOFMtNC4zIDY4LjIgNiA4Mi42TDE2MCAyOTguMyAxNjAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDkuNyAxNTQtMjE1LjdjMTAuMy0xNC40IDYuOS0zNC40LTcuNC00NC42UzMzNi4yIDMxIDMyNiA0NS40TDE5MiAyMzIuOSA1OCA0NS40eiJdfSx3Uj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXNtaWxlLXdpbmsiLGljb246WzUxMiw1MTIsWzEyODUyMSwic21pbGUtd2luayJdLCJmNGRhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXX0sVUZlPXdSLFdGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLWZvdXIiLGljb246WzQ0OCw1MTIsWzk4NTldLCJmNTI0IiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTM1MiAxNjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LE1SPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi1zcXVpbnQtdGVhcnMiLGljb246WzU3Niw1MTIsWzEyOTMxNSwiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwiZjU4NiIsIk01NjAgMzUuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0NjkuMSA5M2MtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQ2MS4zIDIuOCA0ODMtMTYgNTA4LjYtMTYgNTM3LTE2IDU2MCA3IDU2MCAzNS40ek00MDMuNSA2OC4xYy02IDQyLjIgMzAuMiA3OC40IDcyLjQgNzIuNGwzNy44LTUuNEM1NjUuNyAyMzIgNTUwLjggMzU1LjMgNDY5IDQzN3MtMjA1IDk2LjYtMzAxLjkgNDQuN2w1LjQtMzcuOGM2LTQyLjItMzAuMi03OC40LTcyLjQtNzIuNGwtMzcuOCA1LjRDMTAuMyAyODAgMjUuMiAxNTYuNyAxMDcgNzVTMzEyLTIxLjcgNDA4LjkgMzAuM2wtNS40IDM3Ljh6TTQxNy44IDIwMWMtMTkuMSAzNi40LTQ1LjYgNzIuNy03OC45IDEwNnMtNjkuNiA1OS44LTEwNiA3OC45Yy0xMS4xIDUuOC0xMi40IDIxLjQtMS4xIDI2LjYgNTkuMiAyNy41IDEzMS44IDE2LjggMTgwLjYtMzJzNTkuNS0xMjEuNCAzMi0xODAuNmMtNS4zLTExLjMtMjAuOC0xMC0yNi42IDEuMXpNMTEzLjkgMjcwLjZjMS43IDggOSAxMy40IDE3LjEgMTIuN2w0My4xLTMuOS0zLjkgNDMuMWMtLjcgOC4xIDQuNyAxNS41IDEyLjcgMTcuMXMxNS45LTIuOSAxOC40LTEwLjZsMjgtODQuNmMxLjktNS43IC40LTEyLjEtMy45LTE2LjNzLTEwLjYtNS44LTE2LjMtMy45bC04NC42IDI4Yy03LjcgMi42LTEyLjMgMTAuNS0xMC42IDE4LjV6TTMxNS4yIDk5LjFjLjctOC4xLTQuNy0xNS41LTEyLjctMTcuMXMtMTUuOSAyLjktMTguNSAxMC42bC0yOCA4NC42Yy0xLjkgNS43LS40IDEyLjEgMy45IDE2LjNzMTAuNiA1LjggMTYuMyAzLjlsODQuNi0yOGM3LjctMi42IDEyLjMtMTAuNSAxMC42LTE4LjRzLTktMTMuNC0xNy4xLTEyLjdsLTQzLjEgMy45IDMuOS00My4xek02MC4xIDQyNS43bDQ2LjctNi43YzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDMTE0LjcgNTA5LjIgOTMgNTI4IDY3LjQgNTI4IDM5IDUyOCAxNiA1MDUgMTYgNDc2LjYgMTYgNDUxIDM0LjggNDI5LjMgNjAuMSA0MjUuN3oiXX0sR0ZlPU1SLFlGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWF1ZGlvIixpY29uOlszODQsNTEyLFtdLCJmMWM3IiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41em01My44IDE4NS4yYy05LjEtNi4zLTIxLjUtNC4xLTI3LjggNXMtNC4xIDIxLjUgNSAyNy44YzIzLjkgMTYuNyAzOS40IDQ0LjMgMzkuNCA3NS41cy0xNS42IDU4LjktMzkuNCA3NS41Yy05LjEgNi4zLTExLjMgMTguOC01IDI3LjhzMTguOCAxMS4zIDI3LjggNWMzNC4xLTIzLjggNTYuNi02My41IDU2LjYtMTA4LjNTMjk2IDI2Ny41IDI2MS44IDI0My43ek04MCAzMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwIDI3LjIgMzRjMyAzLjggNy42IDYgMTIuNSA2bC4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtLjMgMGMtNC45IDAtOS41IDIuMi0xMi41IDZsLTI3LjIgMzQtMjQgMHptMTI4IDcyLjJjMCAxMC43IDEwLjUgMTguMiAxOC45IDExLjYgMTIuOS0xMC4zIDIxLjEtMjYuMSAyMS4xLTQzLjhzLTguMi0zMy41LTIxLjEtNDMuOGMtOC40LTYuNy0xOC45IC45LTE4LjkgMTEuNmwwIDY0LjV6Il19LFpGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtZG93bi10by1saW5lIixpY29uOls1MTIsNTEyLFtdLCJlNGI4IiwiTTIxNC42IDMxMC42bC02NCA2NGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDI3NC43IDk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNDIuNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bTI1NiAwbC02NCA2NGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDkuNCA5LjQgMC0yNDIuN2MwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMjQyLjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyeiJdfSxYRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZyIsaWNvbjpbNDQ4LDUxMixbMTAzXSwiNDciLCJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwYzc3LjQgMCAxNDItNTUgMTU2LjgtMTI4TDI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ0IDBjMjUuOCAwIDQ5LjYgMjEuNCA0Ny4yIDUwLjYtOS41IDExNS0xMDUuOCAyMDUuNC0yMjMuMiAyMDUuNC0xMjMuNyAwLTIyNC0xMDAuMy0yMjQtMjI0UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1NyAxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2eiJdfSxLRmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmloYXJhIixpY29uOls1NzYsNTEyLFtdLCJmNmE3IiwiTTI3My42LTMuMmM4LjUtNi40IDIwLjMtNi40IDI4LjggMEw0NDMuMiAxMDIuNGM4LjMgNi4yIDE4LjQgOS42IDI4LjggOS42IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgNDggNTguNyA2NCAxMy4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQ4IDI0LjQgMzIgMTUuNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTI4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjIuMSAwIDE3LjktMzIgMC00OC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTMuMyAwIDU4LjctNjQgMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzEwLjQgMCAyMC41LTMuNCAyOC44LTkuNkwyNzMuNi0zLjJ6TTEyOCAzNjhsMzIwIDAgMC00OC0zMjAgMCAwIDQ4ek0zODQgMTYwbC0xOTIgMCAwIDQ4IDE5MiAwIDAtNDh6Il19LFFGZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmbGFnLWNoZWNrZXJlZCIsaWNvbjpbNDQ4LDUxMixbMTI3OTM3XSwiZjExZSIsIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMjc5LjdjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgMzg0IDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwek02NCAxODcuMWw2NC0xMy45IDAgNjUuNS02NCAxMy45IDAgNjUuNSA0OC44LTEyLjJjNS4xLTEuMyAxMC4xLTIuNCAxNS4yLTMuM2wwLTYzLjkgMzguOS04LjRjOC4zLTEuOCAxNi43LTIuNSAyNS4xLTIuMWwwLTY0YzEzLjYgLjQgMjcuMiAyLjYgNDAuNCA2LjRsMjMuNiA2LjkgMCA2Ni43LTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOGwwIDcxLjRjMjEuOCAxLjkgNDMuMyA2LjcgNjQgMTQuNGwwLTY5LjggMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40bDAtNjQuMmMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEyIDAtNjJjLTEzLTMuOC0yNS44LTguOC0zOC4yLTE1LTguMi00LjEtMTYuOS03LTI1LjgtOC44bDAgNzIuNGMtMTMtLjQtMjYgLjgtMzguNyAzLjZsLTI1LjMgNS41IDAtNzUuMi02NCAxNiAwIDczLjF6TTMyMCAzMzUuN2MxNi44IDEuNSAzMy45LS43IDUwLTYuOGwxNC01LjIgMC03MS43LTcuOSAxLjhjLTE4LjQgNC4zLTM3LjMgNS43LTU2LjEgNC41bDAgNzcuNHptNjQtMTQ5LjRsMC03MC44Yy0yMC45IDYuMS00Mi40IDkuMS02NCA5LjFsMCA2OS40YzEzLjkgMS40IDI4IC41IDQxLjctMi42bDIyLjMtNS4yeiJdfSxrbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXVnZS1zaW1wbGUiLGljb246WzUxMiw1MTIsWyJnYXVnZS1zaW1wbGUtbWVkIiwidGFjaG9tZXRlci1hdmVyYWdlIl0sImY2MjkiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzIwIDk2YzAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM0wyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTcyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdfSxKRmU9a20sZU9lPWttLHpSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJpZ2h0LWxlZnQiLGljb246WzUxMiw1MTIsWyJleGNoYW5nZS1hbHQiXSwiZjM2MiIsIk01MDIuNiAxNTAuNmwtOTYgOTZjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM1MiAyMzYuOSAzNTIgMjI0bDAtNjQtMzIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsMzIwIDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zem0tMzk3LjMgMzUybC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDI3NS4xIDE2MCAyODhsMCA2NCAzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOXoiXX0sdE9lPXpSLGFPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaWxscyIsaWNvbjpbNTEyLDUxMixbXSwiZjQ4NCIsIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyek0xNzYgMzY4YzAtNDguNyAxOC4xLTkzLjIgNDgtMTI3bDAtMTI5QzIyNCA1MC4xIDE3My45IDAgMTEyIDBTMCA1MC4xIDAgMTEyTDAgNDAwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyIDM3LjMgMCA3MC4zLTE4LjIgOTAuNy00Ni4zLTE3LTI4LjYtMjYuNy02Mi0yNi43LTk3Ljd6bTY0LjcgNjcuNGM0LjYgOC43IDE2LjMgOS43IDIzLjMgMi43TDQzOC4xIDI2NGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMjk3LjkgNDcyYy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNC00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDQ3MnoiXX0saU9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImV4cGxvc2lvbiIsaWNvbjpbNTEyLDUxMixbXSwiZTRlOSIsIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDE2MGMxMi40IDAgMjIuNyA5LjQgMjMuOSAyMS43TDI5My40IDI5MS42IDQ2Ny42IDExLjNjNi43LTEwLjcgMjAuNS0xNC41IDMxLjctOC41czE1LjggMTkuNSAxMC42IDMxTDM3Mi44IDMzOC42YzIuMiAyLjMgNC4zIDQuNyA2LjMgNy4xbDk3LjItNTQuN2MxMC41LTUuOSAyMy42LTMuMSAzMC45IDYuNHM2LjMgMjMtMi4yIDMxLjVsLTg3IDg3LTcxLjQgMGMtMTMuMi0zNy4zLTQ4LjctNjQtOTAuNS02NHMtNzcuNCAyNi43LTkwLjUgNjRsLTc5LjYgMC03NS41LTUyLjNDLjYgMzU3LTIuOCAzNDQuMSAyLjQgMzMzLjVzMTcuNC0xNS45IDI4LjctMTIuNGw5Ny4yIDMwLjRjMy0zLjkgNi4xLTcuNiA5LjQtMTEuM0w3NS40IDIzNi4zYy02LjEtMTAuMS0zLjktMjMuMSA1LjEtMzAuN3MyMi4yLTcuNSAzMS4xIC4xTDIxNCAyOTMuNmMxLjUtLjQgMy0uOCA0LjUtMS4xbDEzLjYtMTQyLjdjMS4yLTEyLjMgMTEuNS0yMS43IDIzLjktMjEuN3pNMzIgNDY0bDQ1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDB6Il19LHJPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvd3MtZG93bi10by1wZW9wbGUiLGljb246WzUxMiw1MTIsW10sImU0YjkiLCJNMTEzIDE1M2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTUgODlDNS43IDc5LjYgNS43IDY0LjQgMTUgNTVTMzkuNiA0NS43IDQ5IDU1TDcyIDc4LjEgNzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODYuMSAyMy0yM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTY0IDY0em0zMjAgMGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzM1IDg5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjMgMC04Ni4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6TTI1NiAxOTJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTYwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC01MyA0My05NiA5Ni05NnpNMzIgMjg4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTgwIDM2OGMxNS4zIDAgMjkuNiA0LjMgNDEuOCAxMS44LTYuMyAxNi4yLTkuOCAzMy44LTkuOCA1Mi4ybDAgNDhjMCAxMS40IDIuNCAyMi4yIDYuNyAzMmwtODcuOCAwQzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuMUwwIDQ0OGMwLTQ0LjIgMzUuOC04MCA4MC04MHpNMzkzLjMgNTEyYzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtNDhjMC0xOC40LTMuNS0zNi05LjgtNTIuMiAxMi4yLTcuNSAyNi41LTExLjggNDEuOC0xMS44IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMzMuMWMwIDE3LTEzLjggMzAuOS0zMC45IDMwLjlsLTg3LjggMHoiXX0sc09lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXJzLXZpZXdmaW5kZXIiLGljb246WzU3Niw1MTIsW10sImU1OTUiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC04LjggNy4yLTE2IDE2LTE2bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMTQ5LjMgMCAxMzYgMEw2NCAwek00NDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTM1LjMtMjguNy02NC02NC02NEw0NDAgMHpNNDggMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMzYyLjcgMCAzNzZsMCA3MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwYy04LjggMC0xNi03LjItMTYtMTZsMC03MnptNTI4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3MmMwIDguOC03LjIgMTYtMTYgMTZsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTcyek0yODggMjE2YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTUzLTQzLTk2LTk2LTk2em0xOTItNjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTY4IDI3Mi4zYy00OS4zIDQuMS04OCA0NS4zLTg4IDk1LjdsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNDYuOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLTI0YzAtMjkuNSA4LjgtNTYuOSAyNC03OS43ek00MjcuOSA0MDBsNDYuOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTAuMy0zOC43LTkxLjYtODgtOTUuNyAxNS4yIDIyLjggMjQgNTAuMiAyNCA3OS43bDAgMjRjMCA4LjQtMS40IDE2LjUtNC4xIDI0ek0xOTIgMTkyYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il19LG5PZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXItb24iLGljb246WzQ0OCw1MTIsW10sImU0ZGQiLCJNMjQ4LThjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjAwLTIxLjMgMjAwLThsMCA2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNjR6TTE0NS4zIDIwOGwxNTcuNSAwYzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRsMjYuMSA2OS42LTIzOS42IDAgMjYuMS02OS42YzIuMy02LjIgOC4zLTEwLjQgMTUtMTAuNHpNMzQgMjkyLjhsLTEuMyAzLjRDMTMuMiAzMDcuMSAwIDMyOCAwIDM1MkwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMjg4IDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMjQtMTMuMi00NC45LTMyLjgtNTUuOWwtMS4zLTMuNC0zNi4zLTk2LjljLTExLjctMzEuMi00MS42LTUxLjktNzQuOS01MS45bC0xNTcuNSAwYy0zMy4zIDAtNjMuMiAyMC43LTc0LjkgNTEuOUwzNCAyOTIuOHpNOTYgMzM2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjI0IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTcgN0MtMi4zIDE2LjQtMi4zIDMxLjYgNyA0MUw1NSA4OWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMFM5OC4zIDY0LjQgODkgNTVMNDEgN0MzMS42LTIuMyAxNi40LTIuMyA3IDd6TTQwNyA3TDM1OSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ4LTQ4YzkuNC05LjQgOS40LTI0LjYgMC0zMy45UzQxNi40LTIuMyA0MDcgN3oiXX0sb09lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNsZWlnaCIsaWNvbjpbNjQwLDUxMixbXSwiZjdjYyIsIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjRTNDYuMyA5NiA2NCA5NmwwIDE2MGMwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCA2OS41LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTA0IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtODAgMCAwLTY0YzUzIDAgOTYtNDMgOTYtOTZsMC05NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDguOSAwYy00OC41IDAtOTIuOC0yNy40LTExNC41LTcwLjhsLTI1LjItNTAuNUMyMzcuNyA1OS40IDE5My40IDMyIDE0NC45IDMyTDY0IDMyek00MzIgNDE2bC0yNTYgMCAwLTY0IDI1NiAwIDAgNjR6Il19LGxPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkdW1iYmVsbCIsaWNvbjpbNjQwLDUxMixbXSwiZjQ0YiIsIk05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMiAyNTYgMCAwLTExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDAgMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTExMi0yNTYgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTE2LTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMC00OGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwIDAtMTZ6Il19LGtSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhYnktY2FycmlhZ2UiLGljb246WzUxMiw1MTIsWyJjYXJyaWFnZS1iYWJ5Il0sImY3N2QiLCJNNjQgMjA4bDAgODBjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTEyIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNTYtMzM2IDB6bS4yLTQ4bDIyMy44IDAgMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMjMyIDBDMTQxLjkgMCA2OC40IDcwLjkgNjQuMiAxNjB6TTE2MCA0NjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMjg4IDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXX0sY09lPWtSLGRPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJraXdpLWJpcmQiLGljb246WzU3Niw1MTIsW10sImY1MzUiLCJNMjkxLjIgMzg4LjRjMzEuMi0xOC44IDY0LjctMzYuNCAxMDEuMS0zNi40bDU1LjcgMGM0LjYgMCA5LjEtLjIgMTMuNi0uN2w4NS4zIDEyMS45YzQgNS43IDExLjMgOC4yIDE3LjkgNi4xUzU3NiA0NzEgNTc2IDQ2NGwwLTI0MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtNTUuNyAwQzM1NS45IDk2IDMyMi40IDc4LjQgMjkxLjIgNTkuNiAyNjIuMyA0Mi4xIDIyOC4zIDMyIDE5MiAzMiA4NiAzMiAwIDExOCAwIDIyNCAwIDI5NS4xIDM4LjYgMzU3LjEgOTYgMzkwLjNMOTYgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00NmMxNS4zIDMuOSAzMS40IDYgNDggNiA1LjQgMCAxMC43LS4yIDE2LS43bDAgNDAuN2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTAuOWMxMi40LTQuNCAyNC4yLTEwIDM1LjItMTYuN3pNNDQ4IDIwMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LFNSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbGVuZGFyLXhtYXJrIixpY29uOls0NDgsNTEyLFsiY2FsZW5kYXItdGltZXMiXSwiZjI3MyIsIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI5MS45IDIyMC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il19LHBPZT1TUixDUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtZG93biIsaWNvbjpbNTEyLDUxMixbNjE0NjYsImFycm93LWFsdC1jaXJjbGUtZG93biJdLCJmMzU4IiwiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNsLTEwNC0xMDRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw1NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU2IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTEwNCAxMDRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAweiJdfSxoT2U9Q1IsdU9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtbWVkaWNhbCIsaWNvbjpbMzg0LDUxMixbXSwiZjQ3NyIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTYwIDI4MGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXX0sb289e3ByZWZpeDoiZmFzIixpY29uTmFtZToieG1hcmsiLGljb246WzM4NCw1MTIsWzEyODQ3MywxMDAwNSwxMDAwNiwxMDA2MCwyMTUsImNsb3NlIiwibXVsdGlwbHkiLCJyZW1vdmUiLCJ0aW1lcyJdLCJmMDBkIiwiTTU1LjEgNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTQ3LjIgMjU2IDkuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIuNSAzMDEuMyAzMjkuOSA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy44IDI1NiAzNzUuMSAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIuNSAyMTAuNyA1NS4xIDczLjR6Il19LGZPZT1vbyxtT2U9b28sZ09lPW9vLGJPZT1vbyxfUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaGFwZXMiLGljb246WzUxMiw1MTIsWyJ0cmlhbmdsZS1jaXJjbGUtc3F1YXJlIl0sImY2MWYiLCJNMjU2IDBjMTEuMiAwIDIxLjcgNS45IDI3LjQgMTUuNWw5NiAxNjBjNS45IDkuOSA2LjEgMjIuMiAuNCAzMi4yUzM2My41IDIyNCAzNTIgMjI0bC0xOTIgMGMtMTEuNSAwLTIyLjItNi4yLTI3LjgtMTYuMnMtNS41LTIyLjMgLjQtMzIuMmw5Ni0xNjBDMjM0LjMgNS45IDI0NC44IDAgMjU2IDB6TTEyOCAyNzJhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0em0yMDAgMTZsMTEyIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTExMiAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTExMmMwLTIyLjEgMTcuOS00MCA0MC00MHoiXX0sdk9lPV9SLHlPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlLW9uZSIsaWNvbjpbNDQ4LDUxMixbOTg1Nl0sImY1MjUiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHhPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NrLW9wZW4iLGljb246WzU3Niw1MTIsW10sImYzYzEiLCJNMzg0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhTMzIwIDI1LjMgMzIwIDk2bDAgNjQtMTYwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNjR6Il19LHdPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXBwZXItaG90IixpY29uOls1NzYsNTEyLFsxMjc3OThdLCJmODE2IiwiTTU0NSA2NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ3OC45IDYzLjJDNDUyLjMgNDMuNiA0MTkuNSAzMiAzODQgMzIgMzQ4LjkgMzIgMzE2LjUgNDMuMyAyOTAuMSA2Mi40IDI3NC4xIDc0LjEgMjg0LjIgOTYgMzA0IDk2bDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAxOS44IDIxLjkgMjkuOSAzMy42IDEzLjkgMTkuMS0yNi40IDMwLjQtNTguOCAzMC40LTkzLjkgMC0zNS41LTExLjYtNjguMy0zMS4yLTk0LjlMNTQ1IDY1ek0yNzAgMTM1LjVsLTE1OS42IDIyOEMxMDEuMyAzNzYuNCA4Ni43IDM4NCA3MSAzODRsLTcgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyNy4xIDBjNjUuNyAwIDEyOS43LTIwLjIgMTgzLjUtNTcuOEw0NDAuNSAzMDYuMUM0MzUgMjk1LjkgNDMyIDI4NC4yIDQzMiAyNzJsLTU2IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtNTZjLTEyLjIgMC0yMy45LTMtMzQtOC41eiJdfSxUUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkcm9wbGV0LXNsYXNoIixpY29uOls1NzYsNTEyLFsidGludC1zbGFzaCJdLCJmNWM3IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDYzLjYgMzk3LjhjMTAuNS0yMy44IDE2LjQtNTAuMSAxNi40LTc3LjggMC05MS4yLTEzMC4yLTI3NC4xLTE2Ni42LTMyMy41LTUuOS04LTE1LjItMTIuNS0yNS4yLTEyLjVsLS40IDBjLTEwIDAtMTkuMyA0LjUtMjUuMiAxMi41LTE1LjYgMjEuMi00OC41IDY2LjktODAuOSAxMTkuNEw0MS0yNC45em05MiAyMjcuN2MtMjEuNiA0My44LTM3IDg1LjktMzcgMTE3LjIgMCAxMDYgODYgMTkyIDE5MiAxOTIgNDMuNCAwIDgzLjQtMTQuNCAxMTUuNS0zOC42TDEzMyAyMDIuOHoiXX0sTU9lPVRSLExSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRyb3BsZXQiLGljb246WzM4NCw1MTIsWzEyODE2NywidGludCJdLCJmMDQzIiwiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwIDAgMjI4LjggMTMwLjIgNDUuOSAxNjYuNi0zLjUgMTcyLjUtMTEuNSAxODEuOC0xNiAxOTEuOC0xNmwuNCAwYzEwIDAgMTkuMyA0LjUgMjUuMiAxMi41IDM2LjQgNDkuNCAxNjYuNiAyMzIuMyAxNjYuNiAzMjMuNSAwIDEwNi04NiAxOTItMTkyIDE5MnpNMTEyIDMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDc1LjEgNjAuOSAxMzYgMTM2IDEzNiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDguNiAwLTg4LTM5LjQtODgtODh6Il19LHpPZT1MUixTbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWxpbmVzIixpY29uOlszODQsNTEyLFsxMjg0NDEsMTI4NDYyLDYxNjg2LCJmaWxlLWFsdCIsImZpbGUtdGV4dCJdLCJmMTVjIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjAgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LGtPZT1TbSxTT2U9U20sQ09lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnRzLWRvbGxhciIsaWNvbjpbNTc2LDUxMixbXSwiZjY1MyIsIk0xOTIgMzIwYzEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDRjMCAzOS42IDE0LjMgNzYuMiAzOC40IDEwNS42TDIuOCAzMTYuOEMtMi4xIDMyNi4xLS40IDMzNy41IDcgMzQ1czE4LjkgOS4yIDI4LjIgNC4yTDExNi44IDMwNmMyMy4xIDkgNDguNSAxNCA3NS4yIDE0em0zLjIgNDhjMTYuNCA4MS45IDk0LjcgMTQ0IDE4OC44IDE0NCAyNi43IDAgNTIuMS01IDc1LjItMTRsODEuNiA0My4yYzkuMyA0LjkgMjAuNyAzLjIgMjguMi00LjJzOS4yLTE4LjkgNC4yLTI4LjJsLTM1LjYtNjcuMmMyNC4xLTI5LjQgMzguNC02NiAzOC40LTEwNS42IDAtODIuNC02MS43LTE1MS41LTE0NS0xNzAuNy0xMS41IDExNS44LTExNS44IDIwMS4yLTIzNS44IDIwMi43ek0xOTYgMzJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il19LCRSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24iLGljb246WzUxMiw1MTIsWyJzZWFyY2gtbG9jYXRpb24iXSwiZjY4OSIsIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNiA2IDcuMyAxNi44IDcuMyAyMi43IDAgMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LF9PZT0kUixwZz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWludm9pY2UiLGljb246WzM4NCw1MTIsW10sImY1NzAiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNNjQgMzg0bDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04OCA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM3NC43IDY0IDg4IDY0em0wIDk2bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LFRPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZW50YWdvbiIsaWNvbjpbNTc2LDUxMixbXSwiZTc5MCIsIk0zMTYuNC0zLjFjLTE2LjgtMTIuMi0zOS42LTEyLjItNTYuNCAwTDM1LjMgMTYwLjJjLTE2LjggMTIuMi0yMy45IDMzLjktMTcuNCA1My43bDg1LjggMjY0LjFjNi40IDE5LjggMjQuOSAzMy4yIDQ1LjcgMzMuMmwyNzcuNyAwYzIwLjggMCAzOS4yLTEzLjQgNDUuNy0zMy4ybDg1LjgtMjY0LjFjNi40LTE5LjgtLjYtNDEuNC0xNy40LTUzLjdMMzE2LjQtMy4xeiJdfSxMT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmVwdWJsaWNhbiIsaWNvbjpbNjQwLDUxMixbXSwiZjc1ZSIsIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMybDIyNCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjQtNTQ0IDAgMC02NHptMTUyLTMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTIzMiAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI4MCAxNjBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTI4IDI4OGw0MTYgMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwbDAtNDgtMzIgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0LTE5MiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDEyOCAweiJdfSxBUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaG9wIixpY29uOls1NzYsNTEyLFsic3RvcmUtYWx0Il0sImY1NGYiLCJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTYuOCAxMTMuN2MzLjYgNy4yIDUuNSAxNS4xIDUuNSAyMy4yIDAgMjcuMy0yMS4yIDQ5LjctNDggNTEuNkw1MTIgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTk2IDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAweiJdfSwkT2U9QVIsQ209e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsbSIsaWNvbjpbNDQ4LDUxMixbMTI3OTAyLDYyMzY4LCJmaWxtLWFsdCIsImZpbG0tc2ltcGxlIl0sImYwMDgiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTQ4IDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0zMDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNDggMjQwbDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMwNC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAxMTJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZMNjQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnpNMzUyIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6Il19LEFPZT1DbSxET2U9Q20sRU9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWNpcmNsZS14bWFyayIsaWNvbjpbNTc2LDUxMixbXSwiZTRkNCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNDU0LjYgNDAweiJdfSxQT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudHMiLGljb246WzU3Niw1MTIsWzEyODQ5MCw2MTY3MF0sImYwODYiLCJNMzg0IDE0NGMwIDk3LjItODYgMTc2LTE5MiAxNzYtMjYuNyAwLTUyLjEtNS03NS4yLTE0TDM1LjIgMzQ5LjJjLTkuMyA0LjktMjAuNyAzLjItMjguMi00LjJzLTkuMi0xOC45LTQuMi0yOC4ybDM1LjYtNjcuMkMxNC4zIDIyMC4yIDAgMTgzLjYgMCAxNDQgMCA0Ni44IDg2LTMyIDE5Mi0zMlMzODQgNDYuOCAzODQgMTQ0em0wIDM2OGMtOTQuMSAwLTE3Mi40LTYyLjEtMTg4LjgtMTQ0IDEyMC0xLjUgMjI0LjMtODYuOSAyMzUuOC0yMDIuNyA4My4zIDE5LjIgMTQ1IDg4LjMgMTQ1IDE3MC43IDAgMzkuNi0xNC4zIDc2LjItMzguNCAxMDUuNmwzNS42IDY3LjJjNC45IDkuMyAzLjIgMjAuNy00LjIgMjguMnMtMTguOSA5LjItMjguMiA0LjJMNDU5LjIgNDk4Yy0yMy4xIDktNDguNSAxNC03NS4yIDE0eiJdfSxJT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFncyIsaWNvbjpbNTc2LDUxMixbXSwiZjAyYyIsIk00MDEuMiAzOS4xTDU0OS40IDE4OS40YzI3LjcgMjguMSAyNy43IDczLjEgMCAxMDEuMkwzOTMgNDQ4LjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw1MTUuMyAyNTYuOGM5LjItOS4zIDkuMi0yNC40IDAtMzMuN0wzNjcgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTMyLjEgMjI5LjVMMzIuMSA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDE0NCAxNDRjMjUgMjUgMjUgNjUuNSAwIDkwLjVMMjg1LjQgNDE4LjdjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC0xNDQtMTQ0Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zem0xNDQtODUuNWEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxOT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3VuIixpY29uOls1NzYsNTEyLFtdLCJlMTliIiwiTTUyOCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgtNDQ4IDBDMTQuMyA2NCAwIDc4LjMgMCA5NkwwIDIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMCAwYzIwLjggMCAzNi4xIDE5LjYgMzEgMzkuOEwzMyA0NDAuMmMtMi40IDkuNi0uMiAxOS43IDUuOCAyNy41UzU0LjEgNDgwIDY0IDQ4MGw5NiAwYzE0LjcgMCAyNy41LTEwIDMxLTI0LjJMMjE3IDM1MiAzMjEuNCAzNTJjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJsMjYuNy03NC44IDMxLjEgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyMi42LTIyLjYgNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2IDAgMC04ek0zMjEuNCAzMDRsLTkyLjUgMCAxNi02NCAxMDUgMC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4bDM4NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDgwIDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnoiXX0sYzg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWNoZWNrIixpY29uOls1MTIsNTEyLFs2MTUzMywiY2hlY2stY2lyY2xlIl0sImYwNTgiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6TTM3NCAxNDUuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMjIxLjEgMzE1LjIgMTY5IDI2My4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS44IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzc5LjMgMTc5LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il19LEZPZT1jOCxPT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2NvcnBpbyIsaWNvbjpbNjQwLDUxMixbXSwiZTg0ZSIsIk0zNjggMzJjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJsMCAyODkuN2MwIDcuOSA2LjQgMTQuMyAxNC4zIDE0LjMgMy45IDAgNy42LTEuNiAxMC4yLTQuM2w0MC4xLTQxLjEtOS43LTkuN2MtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM1NDIuMyAzNTIgNTUyIDM1Mmw2NCAwIDIuNSAuMWMxMi4xIDEuMiAyMS41IDExLjUgMjEuNSAyMy45bDAgNjQtLjMgMy42Yy0xLjIgOC4yLTYuNyAxNS4zLTE0LjUgMTguNi05IDMuNy0xOS4zIDEuNi0yNi4yLTUuMmwtOS4xLTkuMS0zOS42IDQwLjZjLTE0LjcgMTUuMS0zNC45IDIzLjYtNTYgMjMuNi00My4zIDAtNzguMy0zNS4xLTc4LjMtNzguM0w0MTYgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMzA0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMzA0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzIwYzAtMTYuNi0xMi42LTMwLjItMjguNy0zMS44bC02LjYtLjNDNDQuNiA5NC4yIDMyIDgwLjYgMzIgNjQgMzIgNDYuMyA0Ni4zIDMyIDY0IDMyIDkxIDMyIDExNS4zIDQzLjEgMTMyLjcgNjEgMTUyLjYgNDMgMTc5IDMyIDIwOCAzMiAyMzkuMyAzMiAyNjcuNyA0NC45IDI4OCA2NS43IDMwOC4zIDQ0LjkgMzM2LjYgMzIgMzY4IDMyeiJdfSxEUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpZC1jYXJkLWNsaXAiLGljb246WzU3Niw1MTIsWyJpZC1jYXJkLWFsdCJdLCJmNDdmIiwiTTI1Ni0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQtMTI4IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzJsMTEyIDAgMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyIDExMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMTc2IDQwMGMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHpNMjg4IDI4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXX0sUk9lPURSLEJPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb29uIixpY29uOls1MTIsNTEyLFsxMjc3NjksOTIxNF0sImYxODYiLCJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyYzY4LjggMCAxMzEuMy0yNy4yIDE3Ny4zLTcxLjQgNy4zLTcgOS40LTE3LjkgNS4zLTI3LjFzLTEzLjctMTQuOS0yMy44LTE0LjFjLTQuOSAuNC05LjggLjYtMTQuOCAuNi0xMDEuNiAwLTE4NC04Mi40LTE4NC0xODQgMC03Mi4xIDQxLjUtMTM0LjYgMTAyLjEtMTY0LjggOS4xLTQuNSAxNC4zLTE0LjMgMTMuMS0yNC40UzMyMi42IDguNSAzMTIuNyA2LjNDMjk0LjQgMi4yIDI3NS40IDAgMjU2IDB6Il19LEhPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvaWwtd2VsbCIsaWNvbjpbNTc2LDUxMixbXSwiZTUzMiIsIk01MjguMyA2MS4zYy0xMS40LTQyLjctNTUuMy02OC05OC01Ni42TDQxNC45IDguOEMzOTcuOCAxMy40IDM4Ny43IDMxIDM5Mi4zIDQ4bDI0LjUgOTEuNC0xMDguMiAyOC4xLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzktMTMyLjIgMzQuMyAwLTM4LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNjQtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTM3LjMgMC02MS40LTE3NS40LTYyLjIgMTYuMSAyMi4xIDYzLjItNjYuNiAwIDE5LjktNTYuOS03NC42IDE5LjMtNDYuNyAxMzMuNS00MS4zIDAgMC0xNTkuMiAzMzcuNC04Ny41IDI1LjIgOTRjNC42IDE3LjEgMjIuMSAyNy4yIDM5LjIgMjIuNmwxNS41LTQuMWM0Mi43LTExLjQgNjgtNTUuMyA1Ni42LTk4TDUyOC4zIDYxLjN6TTIwNS4xIDQ0OGwxNi44LTQ4IDEwMC4yIDAgMTYuOCA0OC0xMzMuOCAweiJdfSxFUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWNob2dyYXBoLWRpZ2l0YWwiLGljb246WzU3Niw1MTIsWyJkaWdpdGFsLXRhY2hvZ3JhcGgiXSwiZjU2NiIsIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDM1MnptMjU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwek00OTYgMTkyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNODggMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMTA0LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXX0scU9lPUVSLFBSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxldCIsaWNvbjpbNDQ4LDUxMixbInRhYmxldC1hbmRyb2lkIl0sImYzZmIiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTg0IDQwMGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSxWT2U9UFIsWjU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnVibGUtc2lnbiIsaWNvbjpbNDQ4LDUxMixbODM4MSwicm91YmxlIiwicnViIiwicnVibGUiXSwiZjE1OCIsIk0xMTIgMzJDOTQuMyAzMiA4MCA0Ni4zIDgwIDY0bDAgMjA4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDQ4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxNTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTUyIDAgMC00OCAxMTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFMzMzUuNSAzMiAyNTYgMzJMMTEyIDMyek0yNTYgMjU2bC0xMTIgMCAwLTE2MCAxMTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHoiXX0sak9lPVo1LFVPZT1aNSxXT2U9WjUsR09lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb3NlZC1jYXB0aW9uaW5nIixpY29uOls1MTIsNTEyLFtdLCJmMjBhIiwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTE1MiA4MGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MGMwLTQuNCAzLjYtOCA4LTh6bTE2OCA4YzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MHoiXX0sWU9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbiIsaWNvbjpbNTEyLDUxMixbMTI4Mzk0XSwiZjMwNCIsIk0zNTIuOSAyMS4yTDMwOCA2Ni4xIDQ0NS45IDIwNCA0OTAuOCAxNTkuMUM1MDQuNCAxNDUuNiA1MTIgMTI3LjIgNTEyIDEwOHMtNy42LTM3LjYtMjEuMi01MS4xTDQ1NS4xIDIxLjJDNDQxLjYgNy42IDQyMy4yIDAgNDA0IDBzLTM3LjYgNy42LTUxLjEgMjEuMnpNMjc0LjEgMTAwTDU4LjkgMzE1LjFjLTEwLjcgMTAuNy0xOC41IDI0LjEtMjIuNiAzOC43TC45IDQ4MS42Yy0yLjMgOC4zIDAgMTcuMyA2LjIgMjMuNHMxNS4xIDguNSAyMy40IDYuMmwxMjcuOC0zNS41YzE0LjYtNC4xIDI3LjktMTEuOCAzOC43LTIyLjZMNDEyIDIzNy45IDI3NC4xIDEwMHoiXX0sWk9lPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lIixpY29uOls1NzYsNTEyLFtdLCJmMDcyIiwiTTUyMCAyMDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZsLTEyNy4zIDAtMTU5LjIgMTczLjZjLTYuMSA2LjYtMTQuNiAxMC40LTIzLjYgMTAuNGwtNDMuNyAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw1NC4zLTE2Mi45LTk5LjcgMC01Mi44IDY2Yy0zIDMuOC03LjYgNi0xMi41IDZsLTE5LjggMGMtMTAuNCAwLTE4LTkuOC0xNS41LTE5LjlMMzIgMjU2IDUgMTQ3LjlDMi40IDEzNy44IDEwLjEgMTI4IDIwLjUgMTI4bDE5LjggMGM0LjkgMCA5LjUgMi4yIDEyLjUgNmw1Mi44IDY2IDk5LjcgMC01NC4zLTE2Mi45QzE0Ny42IDI2LjcgMTU1LjMgMTYgMTY2LjIgMTZsNDMuNyAwYzkgMCAxNy41IDMuOCAyMy42IDEwLjRMMzkyLjcgMjAwIDUyMCAyMDB6Il19LFhPZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpbWFnZXMiLGljb246WzU3Niw1MTIsW10sImYzMDIiLCJNOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyMCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEw5NiA5NnpNMjQgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjk2YzAgOC44IDcuMiAxNiAxNiAxNmwzNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0em0xNjggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTYuNSAxMS41Yy00LjQtNy4xLTEyLjEtMTEuNS0yMC41LTExLjVzLTE2LjEgNC40LTIwLjUgMTEuNWwtNTYuMyA5Mi4xLTI0LjUtMzAuNmMtNC42LTUuNy0xMS40LTktMTguNy05cy0xNC4yIDMuMy0xOC43IDlsLTY0IDgwYy01LjggNy4yLTYuOSAxNy4xLTIuOSAyNS40UzE3NC44IDM1MiAxODQgMzUybDI3MiAwYzguNyAwIDE2LjctNC43IDIwLjktMTIuM3M0LjEtMTYuOC0uNS0yNC4zbC04OC0xNDR6Il19LElSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vYmlsZS1zY3JlZW4iLGljb246WzM4NCw1MTIsWyJtb2JpbGUtYW5kcm9pZC1hbHQiXSwiZjNjZiIsIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6TTEyOCA0NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTMwNCA2NGwtMjI0IDAgMCAzMDQgMjI0IDAgMC0zMDR6Il19LEtPZT1JUixRT2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ3VhcmFuaS1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMTlhIiwiTTE5MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyA3Ny4zIDAgMTU4LjEgMCAyNTZTNzMuMyA0MzQuNyAxNjggNDQ2LjVsMCA0MS41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MS41Yzk0LjctMTEuOCAxNjgtOTIuNiAxNjgtMTkwLjUgMC0xNy43LTE0LjMtMzItMzItMzJsLTEzNiAwIDAtOTMuOGMyNS4zIDQuOCA0Ny45IDE3IDY1LjYgMzQuMyAxMi42IDEyLjQgMzIuOSAxMi4yIDQ1LjMtLjRzMTIuMi0zMi45LS41LTQ1LjNDMjk3LjIgOTAuMiAyNTguOCA3MC44IDIxNiA2NS41TDIxNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTY4IDEzMC4ybDAgMjUxLjVDMTA4LjggMzcwLjUgNjQgMzE4LjUgNjQgMjU2czQ0LjgtMTE0LjUgMTA0LTEyNS44em00OCAyNTEuNWwwLTkzLjggMTAwIDBjLTEyLjMgNDcuNi01MS4yIDg0LjUtMTAwIDkzLjh6Il19LE5SPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhZy1zaG9wcGluZyIsaWNvbjpbNDQ4LDUxMixbInNob3BwaW5nLWJhZyJdLCJmMjkwIiwiTTE2MCA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgNDgtMTI4IDAgMC00OHptLTQ4IDQ4bC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDAgMC00OGMwLTYxLjktNTAuMS0xMTItMTEyLTExMlMxMTIgMTguMSAxMTIgODBsMCA0OHptMjQgNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0xNTIgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXX0sSk9lPU5SLEZSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1yaWdodCIsaWNvbjpbNTEyLDUxMixbNjE4MzgsImFycm93LWFsdC1jaXJjbGUtcmlnaHQiXSwiZjM1YSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwem0zODcuMyAxMS4zbC0xMDQgMTA0Yy00LjYgNC42LTExLjUgNS45LTE3LjQgMy41UzI1NiAzNjYuNSAyNTYgMzYwbDAtNTYtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtNTZjMC02LjUgMy45LTEyLjMgOS45LTE0LjhzMTIuOS0xLjEgMTcuNCAzLjVsMTA0IDEwNGM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnoiXX0sZVJlPUZSLE9SPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBob25lLXZvbHVtZSIsaWNvbjpbNTc2LDUxMixbInZvbHVtZS1jb250cm9sLXBob25lIl0sImYyYTAiLCJNMzQ0LTMyYzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIwIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0IDc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNi0zOS40LTg4LTg4LTg4LTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDQuMSAxLjRjMTkuNy01LjQgNDAuMyA0LjcgNDguMSAyMy41bDQwLjUgOTcuM2M2LjkgMTYuNSAyLjEgMzUuNi0xMS44IDQ3bC00NC4xIDM2LjFjMzIuNSA3MS42IDg5IDEzMCAxNTkuMyAxNjQuOUwzNzQuNyAzMjNjMTEuMy0xMy45IDMwLjQtMTguNiA0Ny0xMS44TDUxOSAzNTEuOGMxOC44IDcuOCAyOC45IDI4LjQgMjMuNSA0OC4xbC0xLjUgNS41QzUyMy40IDQ3MC4xIDQ2MC45IDUyNS4zIDM4NC42IDUwOS4yIDIwOS42IDQ3Mi4xIDcxLjkgMzM0LjQgMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41eiJdfSx0UmU9T1IsYVJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImN1YmVzIixpY29uOls1MTIsNTEyLFtdLCJmMWIzIiwiTTI4NC0xLjNjLTE3LjMtMTAtMzguNy0xMC01NiAwTDE0My44IDQ3LjNjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgMTAxLjktODguMyA1MWMtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCA5Ny4zYzAgMjAgMTAuNyAzOC41IDI4IDQ4LjVsODQuMyA0OC42YzE3LjMgMTAgMzguNyAxMCA1NiAwbDg4LjMtNTEgODguMyA1MWMxNy4zIDEwIDM4LjcgMTAgNTYgMEw0ODQuNSA0NDNjMTcuMy0xMCAyOC0yOC41IDI4LTQ4LjVsMC05Ny4zYzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVsLTg4LjMtNTEgMC0xMDEuOWMwLTIwLTEwLjctMzguNS0yOC00OC41TDI4NC0xLjN6TTIzMiAyOTIuNmwwIDEwNi41LTg4LjMgNTFjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTIuMy01My4zem0yMzEuNCAuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNGwwIDk3LjNjMCAyLjktMS41IDUuNS00IDYuOWwtODQuMyA0OC42Yy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkxLjItNTIuNnpNMzQ4LjMgOTUuOGwwIDEwMS45LTkyLjMgNTMuMyAwLTEwNi41IDkxLjItNTIuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNHoiXX0saVJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBob25lIixpY29uOls1MTIsNTEyLFsxMjgyMjIsMTI4Mzc5XSwiZjA5NSIsIk0xNjAuMiAyNUMxNTIuMyA2LjEgMTMxLjctMy45IDExMi4xIDEuNGwtNS41IDEuNWMtNjQuNiAxNy42LTExOS44IDgwLjItMTAzLjcgMTU2LjQgMzcuMSAxNzUgMTc0LjggMzEyLjcgMzQ5LjggMzQ5LjggNzYuMyAxNi4yIDEzOC44LTM5LjEgMTU2LjQtMTAzLjdsMS41LTUuNWM1LjQtMTkuNy00LjctNDAuMy0yMy41LTQ4LjFsLTk3LjMtNDAuNWMtMTYuNS02LjktMzUuNi0yLjEtNDcgMTEuOGwtMzguNiA0Ny4yQzIzMy45IDMzNS40IDE3Ny4zIDI3NyAxNDQuOCAyMDUuM0wxODkgMTY5LjNjMTMuOS0xMS4zIDE4LjYtMzAuNCAxMS44LTQ3TDE2MC4yIDI1eiJdfSxyUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9yaWktZ2F0ZSIsaWNvbjpbNDQ4LDUxMixbOTk2MV0sImY2YTEiLCJNMCA5NkwwIDI4LjVDMCAyMS42IDUuNiAxNiAxMi41IDE2IDE0LjggMTYgMTcgMTYuNiAxOSAxNy44TDU4IDQxLjJDODIuOSA1Ni4xIDExMS4zIDY0IDE0MC4zIDY0bDE2Ny40IDBjMjkgMCA1Ny41LTcuOSA4Mi4zLTIyLjhsMzktMjMuNGMxLjktMS4yIDQuMi0xLjggNi40LTEuOCA2LjkgMCAxMi41IDUuNiAxMi41IDEyLjVMNDQ4IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgNjQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xOTIgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC02NEMyOC43IDE2MCAwIDEzMS4zIDAgOTZ6TTEyOCAyMjRsNjQgMCAwLTY0LTY0IDAgMCA2NHptMTI4IDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXX0sc1JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhY29uIixpY29uOls1NzYsNTEyLFsxMjkzNjNdLCJmN2U1IiwiTTU1NyA5Ni43YzE0LjQgMTQuNCAxMi40IDM4LjQtNC4zIDUwLjJsLTY0LjYgNDUuN2MtNDMuNyAzMC45LTc5LjIgNzEuOS0xMDMuNCAxMTkuNmwtMjUuMyA0OS44Yy0yNS4xIDQ5LjMtNjIuMSA5MS41LTEwNy44IDEyMi42bC03NC4xIDUwLjZjLTEzLjEgOC45LTMwLjcgNy4zLTQxLjgtMy45bC00NC45LTQ0LjkgODYuNS02Ni41YzQyLjMtMzIuNSA3Ni43LTc0LjMgMTAwLjYtMTIybDI0LjUtNDkuMWMyNC41LTQ5IDYxLjgtOTAuNiAxMDcuOS0xMjAuMmwxMDguNy02OS45IDM4IDM4ek00ODQuMiAyMy45TDM4NC4zIDg4LjJjLTUzLjQgMzQuMy05Ni41IDgyLjQtMTI0LjkgMTM5LjFsLTI0LjUgNDkuMWMtMjAuNiA0MS4zLTUwLjMgNzcuMy04Ni45IDEwNS40bC05MS40IDcwLjMtMzYuOS0zNi45Yy0xNC40LTE0LjQtMTIuNC0zOC40IDQuMy01MC4ybDY0LjYtNDUuN2M0My43LTMwLjkgNzkuMi03MS45IDEwMy40LTExOS42bDI1LjMtNDkuOEMyNDIuMyAxMDAuOCAyNzkuMyA1OC42IDMyNSAyNy40bDc0LjEtNTAuNmMxMy4xLTguOSAzMC42LTcuMyA0MS44IDMuOWw0My4zIDQzLjN6Il19LG5SZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZmFsbGluZy1idXJzdCIsaWNvbjpbNTc2LDUxMixbXSwiZTU0NyIsIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDUuNGMwIDU1LjItMjMuNyAxMDctNjMuOSAxNDMuMWw2Mi45IDc1LjUgODkgMGMxNS4xIDAgMjkuMyA3LjEgMzguNCAxOS4ybDQzLjIgNTcuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40TDM2OCAzMjAgMjYzLjIgMzIwIDM3Ni44IDQ1OS44YzExLjEgMTMuNyA5LjEgMzMuOS00LjcgNDVzLTMzLjkgOS4xLTQ1LTQuN0wxMzcuNCAyNjYuNmMtNi4xIDE1LTkuNCAzMS4zLTkuNCA0OGwwIDY5LjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OS40YzAtNjcuNCAzNS40LTEyOS45IDkzLjItMTY0LjZsNC42LTIuOEMyMDAuNCAxMjQgMjI0IDgyLjQgMjI0IDM3LjRsMC01LjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2IDg4QTU2IDU2IDAgMSAxIDEyOCA4OCA1NiA1NiAwIDEgMSAxNiA4OHptMzc2LTcuOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0OHptMTA0IDE1MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwem0tNTQuNS05Ny41Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAweiJdfSxSUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJxdW90ZS1yaWdodCIsaWNvbjpbNDQ4LDUxMixbODIyMSwicXVvdGUtcmlnaHQtYWx0Il0sImYxMGUiLCJNNDQ4IDI5NmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2em0tMjU2IDBjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNnoiXX0sb1JlPVJSLGxSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1tZWRpY2FsLWZsYWciLGljb246WzY0MCw1MTIsW10sImU1MTQiLCJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yNjcuNSA1OS4xTDQwMCAxODYuOSA0MDAgNTAzLjRjLTkuNCA1LjQtMjAuMyA4LjYtMzIgOC42bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNDQtMTkuOSAwQzEyLjYgMzA0IDAgMjkxLjQgMCAyNzUuOSAwIDI2OC4zIDMuMSAyNjEgOC42IDI1NS43TDIxMi41IDU5LjFDMjE5LjkgNTIgMjI5LjcgNDggMjQwIDQ4czIwLjEgNCAyNy41IDExLjF6TTIwNC44IDI1Ni44bDAgNDQtNDQgMGMtOS43IDAtMTcuNiA3LjktMTcuNiAxNy42bDAgMzUuMmMwIDkuNyA3LjkgMTcuNiAxNy42IDE3LjZsNDQgMCAwIDQ0YzAgOS43IDcuOSAxNy42IDE3LjYgMTcuNmwzNS4yIDBjOS43IDAgMTcuNi03LjkgMTcuNi0xNy42bDAtNDQgNDQgMGM5LjcgMCAxNy42LTcuOSAxNy42LTE3LjZsMC0zNS4yYzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtNDQgMCAwLTQ0YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtMzUuMiAwYy05LjcgMC0xNy42IDcuOS0xNy42IDE3LjZ6Il19LGNSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmVzY3JpcHRpb24iLGljb246WzQ0OCw1MTIsW10sImY1YjEiLCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDUwLjcgMCAxMjggMTI4LTEwNS40IDEwNS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDI4OCAzOTcuMyAzOTMuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDMzMy4zIDM1MiA0MzguNiAyNDYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyODggMzA2LjcgMjAyLjIgMjIwLjlDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTIgMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEwzMiAwek0xNzYgMTYwbC0xMTIgMCAwLTk2IDExMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4eiJdfSxkUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS10aHJlZSIsaWNvbjpbNDQ4LDUxMixbOTg1OF0sImY1MjciLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4IDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0scFJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWxvY2siLGljb246WzU3Niw1MTIsW10sImU0ZDYiLCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyMS4zYy00Ni45IDE5LTgwIDY1LTgwIDExOC43bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTc2IDM4NGwwIDgwIDgwIDAgMC02NC4xYzAtMTMuNyAxLjktMjcgNS41LTM5LjYtNS43LTUuMi0xMy4yLTguMy0yMS41LTguM2wtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMwNyAyMjQuM2MtMS0uMi0yLS4zLTMtLjNsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNi43IDBjMi4xLTIyLjggOC40LTQ0LjMgMTguMy02My43ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMzUyIDgwLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdfSxCUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpZC1jYXJkIixpY29uOls1NzYsNTEyLFs2MjE0NywiZHJpdmVycy1saWNlbnNlIl0sImYyYzIiLCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NEwwIDk2em0wIDQ4bDU3NiAwIDAgMjcyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNDR6TTI0Ny4zIDQxNmMyMC4yIDAgMzUuMy0xOS40IDIyLjQtMzUtMTQuNy0xNy43LTM2LjktMjktNjEuNy0yOWwtNjQgMGMtMjQuOCAwLTQ3IDExLjMtNjEuNyAyOS0xMi45IDE1LjYgMi4yIDM1IDIyLjQgMzVsMTQyLjUgMHpNMTc2IDMxMmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMzYwIDIwOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAweiJdfSxoUmU9QlIsSFI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLXBsYXkiLGljb246WzUxMiw1MTIsWzYxNDY5LCJwbGF5LWNpcmNsZSJdLCJmMTQ0IiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODhjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNXoiXX0sdVJlPUhSLHFSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtbGF1Z2gtYmVhbSIsaWNvbjpbNTEyLDUxMixbMTI4NTEzLCJsYXVnaC1iZWFtIl0sImY1OWEiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE3NiAxNjRjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSxmUmU9cVIsbVJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxlYWYiLGljb246WzUxMiw1MTIsW10sImYwNmMiLCJNNDcxLjMgNi43QzQ3Ny43IC42IDQ4Ny0xLjYgNDk1LjYgMS4yIDUwNS40IDQuNSA1MTIgMTMuNyA1MTIgMjRsMCAxODYuOWMwIDEzMS4yLTEwOC4xIDIzNy4xLTIzOC44IDIzNy4xLTc3IDAtMTQzLjQtNDkuNS0xNjcuNS0xMTguNy0zNS40IDMwLjgtNTcuNyA3Ni4xLTU3LjcgMTI2LjcgMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA0NjkuMyAwIDQ1NkMwIDM4MS4xIDM4LjIgMzE1LjEgOTYuMSAyNzYuMyAxMzEuNCAyNTIuNyAxNzMuNSAyNDAgMjE2IDI0MGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0zOS43IDAtNzcuMyA4LjgtMTExIDI0LjUgMjMuMy03MCA4OS4yLTEyMC41IDE2Ny0xMjAuNSA2Ni40IDAgMTE1LjgtMjIuMSAxNDguNy00NCAxOS4yLTEyLjggMzUuNS0yOC4xIDUwLjctNDUuM3oiXX0sZ1JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWNoaW1uZXktdXNlciIsaWNvbjpbNTEyLDUxMixbXSwiZTA2NSIsIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMzEyIDI1NmE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTE0NCA0MzJjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il19LF9tPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvdGF0ZS1yaWdodCIsaWNvbjpbNTEyLDUxMixbInJlZG8tYWx0Iiwicm90YXRlLWZvcndhcmQiXSwiZjJmOSIsIk00ODggMTkybC0xNDQgMGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44cy0xLjctMTkuMyA1LjItMjYuMmw0Ni43LTQ2LjdjLTc1LjMtNTguNi0xODQuMy01My4zLTI1My41IDE1LjktNzUgNzUtNzUgMTk2LjUgMCAyNzEuNXMxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTQuMy05NC4zIDI0My43LTk5LjYgMzQ0LjMtMTYuMkw0NzEgN2M2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzUxMiAxNC4zIDUxMiAyNGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXX0sYlJlPV9tLHZSZT1fbSx5UmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG9vdGgiLGljb246WzQ0OCw1MTIsWzEyOTQ2M10sImY1YzkiLCJNMTQ1IDUuN0wyMjQgMzIgMzAzIDUuN0MzMTQuMyAxLjkgMzI2IDAgMzM3LjkgMCAzOTguNyAwIDQ0OCA0OS4zIDQ0OCAxMTAuMWwwIDY4LjVjMCAyOS40LTkuNSA1OC4xLTI3LjIgODEuNmwtMS4xIDEuNWMtMTIuOSAxNy4yLTIxLjMgMzcuNC0yNC4zIDU4LjdMMzczLjcgNDcxLjljLTMuMyAyMy0yMyA0MC4xLTQ2LjIgNDAuMS0yMi44IDAtNDIuMy0xNi41LTQ2LTM5TDI2MS4zIDM1MS42Yy0zLTE4LjItMTguOC0zMS42LTM3LjMtMzEuNnMtMzQuMiAxMy40LTM3LjMgMzEuNkwxNjYuNSA0NzNjLTMuOCAyMi41LTIzLjIgMzktNDYgMzktMjMuMiAwLTQyLjktMTcuMS00Ni4yLTQwLjFMNTIuNiAzMjAuNWMtMy0yMS4zLTExLjQtNDEuNS0yNC4zLTU4LjdsLTEuMS0xLjVDOS41IDIzNi43IDAgMjA4LjEgMCAxNzguN2wwLTY4LjVDMCA0OS4zIDQ5LjMgMCAxMTAuMSAwIDEyMiAwIDEzMy43IDEuOSAxNDUgNS43eiJdfSx4UmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtY2hpbW5leS13aW5kb3ciLGljb246WzUxMiw1MTIsW10sImUwMGQiLCJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTIxNiAyMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAweiJdfSx3UmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW90b3JjeWNsZSIsaWNvbjpbNjQwLDUxMixbMTI3OTQ5XSwiZjIxYyIsIk0yODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYuNiAwIDIyLjUgNDguNy05NS4xIDcxLjNjLTMzLjQtMjUuMS03NS00MC0xMjAtNDBsLTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGM3OC41IDAgMTQzLjIgNTkuNiAxNTEuMiAxMzZsLTI1LjQgMGMtMTEuMi01OS4yLTYzLjMtMTA0LTEyNS44LTEwNC03MC43IDAtMTI4IDU3LjMtMTI4IDEyOFM3My4zIDQ4MCAxNDQgNDgwYzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNGw1MC4yIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yMi41YzAtNDUuMSAyNS43LTg1LjQgNjUuNS0xMDcuN2wxMi4xIDI2LjFjLTMyLjQgMjMuMi01My41IDYxLjItNTMuNSAxMDQuMSAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4LTU3LjMtMTI4LTEyOC0xMjhjLTEwLjcgMC0yMSAxLjMtMzAuOSAzLjhMNDMzLjggMTYwIDQ4OCAxNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNTMuMyAwYy02LjkgMC0xMy43IDIuMi0xOS4yIDYuNGwtMTcuMSAxMi44LTI0LjYtNTMuM0MzNjkuOSAyMS40IDM2MS40IDE2IDM1MiAxNmwtNzIgMHpNNDQ1LjggMzAwLjRsMjguNCA2MS42YzUuNiAxMiAxOS44IDE3LjMgMzEuOCAxMS43czE3LjMtMTkuOCAxMS43LTMxLjhsLTI4LjUtNjEuNmMyLjItLjIgNC40LS4zIDYuNy0uMyAzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyYzAtMjAuMiA4LjMtMzguNSAyMS44LTUxLjZ6TTE0NCA0MjRjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMzEuMyAwIDU4IDIwIDY3LjkgNDhMMTQ0IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny45IDBjLTkuOSAyOC0zNi42IDQ4LTY3LjkgNDh6Il19LFZSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhY2t3YXJkLWZhc3QiLGljb246WzUxMiw1MTIsWzkxOTgsImZhc3QtYmFja3dhcmQiXSwiZjA0OSIsIk00OTIuMiA0NzcuNmMtMTIgNS0yNS43IDIuMi0zNC45LTYuOUwyODggMzAxLjMgMjg4IDQ0OGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOUw2NCAzMDEuMyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyUzY0IDQ2LjMgNjQgNjRMNjQgMjEwLjcgMjMzLjQgNDEuNGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMyODggNTEuMSAyODggNjRsMCAxNDYuNyAxNjkuNC0xNjkuNGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVM1MTIgNTEuMSA1MTIgNjRsMCAzODRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnoiXX0sTVJlPVZSLGpSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFkZHJlc3MtYm9vayIsaWNvbjpbNTEyLDUxMixbNjIxMzgsImNvbnRhY3QtYm9vayJdLCJmMmI5IiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjA4IDI4OGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0em0wIDEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnoiXX0selJlPWpSLGtSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYWlsYm9hdCIsaWNvbjpbNTEyLDUxMixbXSwiZTQ0NSIsIk0yNDAgMzUuOWwwIDM0OC4xLTIyNCAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMjg4IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTIgMC04LjgtNy4yLTE2LTE2LTE2bC0yMDggMCAwLTQ4IDE2MS43IDBjMTIuOSAwIDIwLjUtMTQuNCAxMy4yLTI1TDI2OS4yIDI2LjljLTguOS0xMy0yOS4yLTYuNy0yOS4yIDl6TTE5MiAzMjBsMC0xODQuMmMwLTE2LjEtMjEtMjIuMS0yOS42LTguNUw0Ny4zIDMxMS41Yy02LjcgMTAuNyAxIDI0LjUgMTMuNiAyNC41TDE3NiAzMzZjOC44IDAgMTYtNy4yIDE2LTE2eiJdfSxTUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9vay1ib29rbWFyayIsaWNvbjpbNDQ4LDUxMixbXSwiZTBiYiIsIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwIDE2OS40YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42LTYgMC0xMS44LTIuNC0xNi02LjZMMjcyIDE0NCAyMzAuNiAxODUuNGMtNC4yIDQuMi0xMCA2LjYtMTYgNi42LTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42TDE5MiAwIDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxDUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodCIsaWNvbjpbNTEyLDUxMixbXSwiZTUyMSIsIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTMwNSAyMjVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdfSxVUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtaWNyb3Bob25lLWxpbmVzIixpY29uOlszODQsNTEyLFsxMjc4OTcsIm1pY3JvcGhvbmUtYWx0Il0sImYzYzkiLCJNOTYgOTZjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMjMyIDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtNC4xIDQ5LjMtNDUuMyA4OC05NS43IDg4LTUzIDAtOTYtNDMtOTYtOTZMOTYgOTZ6TTI0IDE2MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwYzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA5Ny45LTczLjMgMTc4LjctMTY4IDE5MC41bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUM3My4zIDQwMi43IDAgMzIxLjkgMCAyMjRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXX0sX1JlPVVSLFdSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJlcGx5LWFsbCIsaWNvbjpbNTc2LDUxMixbIm1haWwtcmVwbHktYWxsIl0sImYxMjIiLCJNMzMyLjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCA0OCAwYzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgMTEzLjMtODEuNSAxNjMuOS0xMDAuMiAxNzQuMS0yLjUgMS40LTUuMyAxLjktOC4xIDEuOS0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43IDAtNy41IDQuMy0xNC40IDkuOC0xOS41IDkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuNyAwLTUzLTQzLTk2LTk2LTk2bC0zMiAwIDAgODBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02Ljl6TTIwNS42IDIzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNTQuNiAyMDggMjA1LjYgMzU4LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxMCAyMzEuMmMtNi40LTYtMTAtMTQuNC0xMC0yMy4yczMuNi0xNy4yIDEwLTIzLjJMMTcxLjYgMjMuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXX0sVFJlPVdSLExSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1bml2ZXJzYWwtYWNjZXNzIixpY29uOls1MTIsNTEyLFtdLCJmMjlhIiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE2MS41LTg2LjFjLTEyLjItNS4yLTI2LjMgLjQtMzEuNSAxMi42cy40IDI2LjMgMTIuNiAzMS41bDExLjkgNS4xYzE3LjMgNy40IDM1LjIgMTIuOSA1My42IDE2LjNsMCA1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJTMzM5IDM5NyAzMzQuOCAzODQuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZsMC01MC4xYzE4LjQtMy41IDM2LjMtOC45IDUzLjYtMTYuM2wxMS45LTUuMWMxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42TDMzOC43IDE3NWMtMjYuMSAxMS4yLTU0LjIgMTctODIuNyAxN3MtNTYuNS01LjgtODIuNy0xN2wtMTEuOS01LjF6TTI1NiAxNjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdfSxUbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b2lsZXQtcGFwZXIiLGljb246WzUxMiw1MTIsWzEyOTUzMSw2MzI2MywidG9pbGV0LXBhcGVyLWFsdCIsInRvaWxldC1wYXBlci1ibGFuayJdLCJmNzFlIiwiTTMyNy4xIDMyYy04LjggMTEuMS0xNiAyMy4xLTIxLjkgMzQuOC0yMS40IDQyLjctMzMuMiA5OC40LTMzLjIgMTU3LjJsMCAyNjRjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNTQ0Yy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDIyNEMwIDExOCA0MyAzMiA5NiAzMmwyMzEuMSAwek00MTYgNDE2Yy01MyAwLTk2LTg2LTk2LTE5MnM0My0xOTIgOTYtMTkyIDk2IDg2IDk2IDE5Mi00MyAxOTItOTYgMTkyem0wLTEyOGMxNy43IDAgMzItMjguNyAzMi02NHMtMTQuMy02NC0zMi02NC0zMiAyOC43LTMyIDY0IDE0LjMgNjQgMzIgNjR6Il19LCRSZT1UbSxBUmU9VG0sRFJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZyLWNhcmRib2FyZCIsaWNvbjpbNTc2LDUxMixbXSwiZjcyOSIsIk01MTIgOTZMNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDExNy41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsMzMuOS0zMy45YzcuMi03LjIgMTcuMS0xMS4zIDI3LjMtMTEuM3MyMC4xIDQuMSAyNy4zIDExLjNsMzMuOSAzMy45YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNTEyIDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NHpNODAgMjQwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzUyLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdfSxFUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGl6emEtc2xpY2UiLGljb246WzUxMiw1MTIsW10sImY4MTgiLCJNMTY5LjcgLjljLTIyLjgtMS42LTQxLjkgMTQtNDcuNSAzNC43TDExMi41IDcyQzI5My4zIDcyLjMgNDM5LjcgMjE4LjcgNDQwIDM5OS41bDM2LjQtOS43YzIwLjgtNS41IDM2LjMtMjQuNyAzNC43LTQ3LjUtMTIuNi0xODIuOC0xNTguNi0zMjguOC0zNDEuNC0zNDEuNHptMjIyIDQxMS41Yy4yLTQuMSAuMy04LjIgLjMtMTIuNCAwLTE1NC42LTEyNS40LTI4MC0yODAtMjgwLTQuMSAwLTguMyAuMS0xMi40IC4zTC41IDQ5MS45Yy0xLjUgNS41IC4xIDExLjQgNC4xIDE1LjRzOS45IDUuNiAxNS40IDQuMWwzNzEuNi05OS4xek0xNzYgMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMTI4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTk2IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdfSxQUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3ByYXktY2FuIixpY29uOls1NzYsNTEyLFtdLCJmNWJkIiwiTTE5MiAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC0xMjggMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNTZjMC01MyA0My05NiA5Ni05NmwxMjggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjA4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMDh6bTI0MCA4MGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTMyMCA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTUxMiAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDQ4IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LEdSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbHVtZS1sb3ciLGljb246WzQ0OCw1MTIsWzEyODI2NCwidm9sdW1lLWRvd24iXSwiZjAyNyIsIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzgwLjYgMTgxLjVjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEMzNjEuMSAyMjcuNiAzNjggMjQxIDM2OCAyNTZzLTYuOSAyOC40LTE3LjcgMzcuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM0MDIuMSAzMTIuOSA0MTYgMjg2LjEgNDE2IDI1NnMtMTMuOS01Ni45LTM1LjUtNzQuNXoiXX0sSVJlPUdSLE5SZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm9zcyIsaWNvbjpbMzg0LDUxMixbMTI4MzI3LDEwMDEzXSwiZjY1NCIsIk0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MC04MCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDgwIDAgMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOCA4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgwIDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OEwxNzYgMHoiXX0sWVI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uIixpY29uOlszODQsNTEyLFsxMjk0ODUsIm1hbGUiXSwiZjE4MyIsIk0yNDggMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN2w0Ni4zIDYyLjRjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDMjc0IDEzMiAyMzQuMyAxMTIgMTkyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDExMiAyMzYuNyAxMTIgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6Il19LEZSZT1ZUixaUj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VyZ2xhc3MiLGljb246WzM4NCw1MTIsWzkyMDMsNjIwMzIsImhvdXJnbGFzcy1lbXB0eSJdLCJmMjU0IiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTFjMCA0Mi40LTE2LjkgODMuMS00Ni45IDExMy4xbC02Ny45IDY3LjkgNjcuOSA2Ny45YzMwIDMwIDQ2LjkgNzAuNyA0Ni45IDExMy4xbDAgMTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtMTFjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xbDY3LjktNjcuOS02Ny45LTY3LjlDNDguOSAxNTguMSAzMiAxMTcuNCAzMiA3NWwwLTExQzE0LjMgNjQgMCA0OS43IDAgMzJ6TTk2IDY0bDAgMTFjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlsNjcuOSA2Ny45IDY3LjktNjcuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45bDAtMTEtMTkyIDB6bTAgMzg0bDE5MiAwIDAtMTFjMC0yNS41LTEwLjEtNDkuOS0yOC4xLTY3LjlsLTY3LjktNjcuOS02Ny45IDY3LjljLTE4IDE4LTI4LjEgNDIuNC0yOC4xIDY3LjlsMCAxMXoiXX0sT1JlPVpSLFJSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXNoIixpY29uOls1NzYsNTEyLFsxMjgwMzFdLCJmNTc4IiwiTTE4MC41IDE0MS41QzIxOS43IDEwOC41IDI3Mi42IDgwIDMzNiA4MHMxMTYuMyAyOC41IDE1NS41IDYxLjVjMzkuMSAzMyA2Ni45IDcyLjQgODEgOTkuOCA0LjcgOS4yIDQuNyAyMC4xIDAgMjkuMy0xNC4xIDI3LjQtNDEuOSA2Ni44LTgxIDk5LjgtMzkuMiAzMy4xLTkyIDYxLjUtMTU1LjUgNjEuNXMtMTE2LjMtMjguNS0xNTUuNS02MS41Yy0xNi4yLTEzLjctMzAuNS0yOC41LTQyLjctNDMuMUw0OC4xIDM3OS42Yy0xMi41IDcuMy0yOC40IDUuMy0zOC43LTQuOXMtMTIuNC0yNi01LjMtMzguNkw1MCAyNTYgNC4yIDE3NS45Yy03LjItMTIuNi01LTI4LjQgNS4zLTM4LjZzMjYuMS0xMi4yIDM4LjctNC45bDg5LjcgNTIuM2MxMi4yLTE0LjYgMjYuNS0yOS40IDQyLjctNDMuMXpNNDQ4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxCUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZHJ1bXN0aWNrLWJpdGUiLGljb246WzUxMiw1MTIsW10sImY2ZDciLCJNMTYwIDI2NS4yYzAgOC41LTMuNCAxNi42LTkuNCAyMi42bC0yNi44IDI2LjhjLTEyLjMgMTIuMy0zMi41IDExLjQtNDkuNCA3LjItNC42LTEuMS05LjUtMS44LTE0LjUtMS44LTMzLjEgMC02MCAyNi45LTYwIDYwczI2LjkgNjAgNjAgNjBjNi4zIDAgMTIgNS43IDEyIDEyIDAgMzMuMSAyNi45IDYwIDYwIDYwczYwLTI2LjkgNjAtNjBjMC01LS42LTkuOC0xLjgtMTQuNS00LjItMTYuOS01LjItMzcuMSA3LjItNDkuNGwyNi44LTI2LjhjNi02IDE0LjEtOS40IDIyLjYtOS40bDg5LjIgMGM2LjMgMCAxMi40LS4zIDE4LjUtMSAxMS45LTEuMiAxNi40LTE1LjUgMTAuOC0yNi04LjUtMTUuOC0xMy4zLTMzLjgtMTMuMy01MyAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA4IDAgMTUuNyAuOCAyMy4yIDIuNCAxMS43IDIuNSAyNC4xLTUuOSAyMi0xNy42LTE0LjctODIuMy04Ni43LTE0NC44LTE3My4yLTE0NC44LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2bDAgODkuMnoiXX0sSFJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYXJ0LXNpbXBsZSIsaWNvbjpbNTEyLDUxMixbXSwiZTQ3MyIsIk0xOTIgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJ6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMjcyek00MzIgOTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yODhjMC0yNi41IDIxLjUtNDggNDgtNDh6Il19LHFSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhdG9tIixpY29uOls0NDgsNTEyLFs5ODgzXSwiZjVkMiIsIk0yMjQgMzk4LjhjLTExLjggNS4xLTIzLjQgOS43LTM0LjkgMTMuNSAxNi43IDMzLjggMzEgMzUuNyAzNC45IDM1LjdzMTguMS0xLjkgMzQuOS0zNS43Yy0xMS40LTMuOS0yMy4xLTguNC0zNC45LTEzLjV6TTQxNCAyNTZjMzMgNDUuMiA0NC4zIDkwLjkgMjMuNiAxMjgtMjAuMiAzNi4zLTYyLjUgNDkuMy0xMTUuMiA0My4yLTIyIDUyLjEtNTUuNyA4NC44LTk4LjQgODQuOHMtNzYuNC0zMi43LTk4LjQtODQuOEM3Mi45IDQzMy4zIDMwLjYgNDIwLjMgMTAuNCAzODQtMTAuMyAzNDYuOSAxIDMwMS4yIDM0IDI1NiAxIDIxMC44LTEwLjMgMTY1LjEgMTAuNCAxMjggMzAuNiA5MS43IDcyLjkgNzguNyAxMjUuNiA4NC44IDE0Ny42IDMyLjcgMTgxLjIgMCAyMjQgMHM3Ni40IDMyLjcgOTguNCA4NC44YzUyLjctNi4xIDk1IDYuOCAxMTUuMiA0My4yIDIwLjcgMzcuMSA5LjQgODIuOC0yMy42IDEyOHptLTY1LjggNjcuNGMtMS43IDE0LjItMy45IDI4LTYuNyA0MS4yIDMxLjggMS40IDM4LjYtOC43IDQwLjItMTEuNyAyLjMtNC4yIDctMTcuOS0xMS45LTQ4LjEtNi44IDYuMy0xNCAxMi41LTIxLjYgMTguNnptLTYuNy0xNzUuOWMyLjggMTMuMSA1IDI2LjkgNi43IDQxLjIgNy42IDYuMSAxNC44IDEyLjMgMjEuNiAxOC42IDE4LjktMzAuMiAxNC4yLTQ0IDExLjktNDguMS0xLjYtMi45LTguNC0xMy00MC4yLTExLjd6TTI1OC45IDk5LjdDMjQyLjEgNjUuOSAyMjcuOSA2NCAyMjQgNjRzLTE4LjEgMS45LTM0LjkgMzUuN2MxMS40IDMuOSAyMy4xIDguNCAzNC45IDEzLjUgMTEuOC01LjEgMjMuNC05LjcgMzQuOS0xMy41em0tMTU5IDg4LjljMS43LTE0LjMgMy45LTI4IDYuNy00MS4yLTMxLjgtMS40LTM4LjYgOC43LTQwLjIgMTEuNy0yLjMgNC4yLTcgMTcuOSAxMS45IDQ4LjEgNi44LTYuMyAxNC0xMi41IDIxLjYtMTguNnpNNzguMiAzMDQuOGMtMTguOSAzMC4yLTE0LjIgNDQtMTEuOSA0OC4xIDEuNiAyLjkgOC40IDEzIDQwLjIgMTEuNy0yLjgtMTMuMS01LTI2LjktNi43LTQxLjItNy42LTYuMS0xNC44LTEyLjMtMjEuNi0xOC42ek0zMDQgMjU2YTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHptLTgwLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sVlJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InAiLGljb246WzMyMCw1MTIsWzExMl0sIjUwIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMTI4IDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjBTMjQ4LjQgMzUyIDE2MCAzNTJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI4OGw5NiAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2bC05NiAwIDAgMTkyeiJdfSxqUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiamV0LWZpZ2h0ZXItdXAiLGljb246WzUxMiw1MTIsW10sImU1MTgiLCJNMjA2LjggNDcuOEMyMDIuMyA1OC41IDIwMCA3MCAyMDAgODEuNmwwIDEwMC40LTE1MiAxMTQgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDIzNC43IDAgMjQ4TDAgMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04IDE1MiAwIDAgNTQuNC02NiA1Mi44Yy0zLjggMy02IDcuNi02IDEyLjVsMCAyNC4zYzAgOC44IDcuMiAxNiAxNiAxNmw4OCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQuM2MwLTQuOS0yLjItOS41LTYtMTIuNWwtNjYtNTIuOCAwLTU0LjQgMTUyIDAgMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OC0xNTItMTE0IDAtMTAwLjRjMC0xMS42LTIuMy0yMy4xLTYuOC0zMy44bC0yNy4xLTY1QzI3NC40LTI2LjIgMjY1LjctMzIgMjU2LTMycy0xOC40IDUuOC0yMi4yIDE0LjhsLTI3LjEgNjV6Il19LFVSZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVnLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2MCIsIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdfSxXUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hlZXQtcGxhc3RpYyIsaWNvbjpbMzg0LDUxMixbXSwiZTU3MSIsIk0wIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDkuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDM2NS4zIDM4Ni43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4em0yMDggNS41bDAtOTMuNWMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5My41IDAtMTE3LjUgMTE3LjV6TTE1MyAxMDVsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ4LTQ4YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXptOTYgMzJMMTM3IDI0OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMTUgMTAzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXoiXX0sR1JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InYiLGljb246WzM4NCw1MTIsWzExOF0sIjU2IiwiTTE5LjcgMzQuNWMxNi4zLTYuOCAzNSAuOSA0MS44IDE3LjJMMTkyIDM2NC44IDMyMi41IDUxLjdjNi44LTE2LjMgMjUuNS0yNCA0MS44LTE3LjJzMjQgMjUuNSAxNy4yIDQxLjhsLTE2MCAzODRjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43cy0yNC42LTcuOC0yOS41LTE5LjdMMi41IDc2LjNjLTYuOC0xNi4zIC45LTM1IDE3LjItNDEuOHoiXX0sWFI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGlzdCIsaWNvbjpbNTEyLDUxMixbImxpc3Qtc3F1YXJlcyJdLCJmMDNhIiwiTTQwIDQ4QzI2LjcgNDggMTYgNTguNyAxNiA3MmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNEw0MCA0OHpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTE2IDIzMmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTQwIDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il19LFlSZT1YUixaUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGlzY2VzIixpY29uOls0NDgsNTEyLFtdLCJlODRjIiwiTTQwLjQgMTAuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTIgMi45IDIuNyAyOC4zIDI2LjcgNTMuNiA2Ny44IDIyLjMgMzYuMiA0NSA4Ni42IDUxLjEgMTQ3LjhsNjcuMyAwYzYuMS02MS4xIDI4LjgtMTExLjYgNTEuMS0xNDcuOCAyNS4zLTQxLjEgNTAuNy02NS4xIDUzLjYtNjcuOCAxMy0xMS45IDMzLjMtMTEuMSA0NS4yIDIgMTEuOSAxMyAxMSAzMy4zLTIgNDUuMi0xLjQgMS4zLTIyIDIxLjEtNDIuNCA1NC4yLTE3LjkgMjkuMS0zNS40IDY4LTQxLjIgMTE0LjJsOTQgMCAzLjMgLjJjMTYuMSAxLjYgMjguNyAxNS4zIDI4LjcgMzEuOHMtMTIuNiAzMC4yLTI4LjcgMzEuOGwtMy4zIC4yLTk0IDBjNS44IDQ2LjIgMjMuMyA4NS4xIDQxLjIgMTE0LjIgMjAuNCAzMy4xIDQxIDUyLjkgNDIuNCA1NC4yIDEzIDExLjkgMTMuOSAzMi4yIDIgNDUuMi0xMS45IDEzLTMyLjIgMTMuOS00NS4yIDItMi45LTIuNy0yOC4zLTI2LjctNTMuNi02Ny44LTIyLjMtMzYuMi00NS04Ni42LTUxLjEtMTQ3LjhsLTY3LjMgMGMtNi4xIDYxLjEtMjguOCAxMTEuNi01MS4xIDE0Ny44LTI1LjMgNDEuMS01MC43IDY1LjEtNTMuNiA2Ny44LTEzIDExLjktMzMuMyAxMS4xLTQ1LjItMi0xMS45LTEzLTExLTMzLjMgMi00NS4yIDEuNC0xLjMgMjItMjEuMSA0Mi40LTU0LjIgMTcuOS0yOS4xIDM1LjQtNjggNDEuMi0xMTQuMmwtOTQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NCAwYy01LjgtNDYuMi0yMy4zLTg1LjEtNDEuMi0xMTQuMi0yMC40LTMzLjEtNDEtNTIuOS00Mi40LTU0LjItMTMtMTEuOS0xMy45LTMyLjItMi00NS4yeiJdfSxYUmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic29sYXItcGFuZWwiLGljb246WzU3Niw1MTIsW10sImY1YmEiLCJNMTIxLjggMzJjLTMwIDAtNTYgMjAuOC02Mi41IDUwLjFMOS42IDMwNi4xQy43IDM0Ni4xIDMxLjEgMzg0IDcyIDM4NGwxODQuMSAwIDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0IDE4NC4xIDBjNDAuOSAwIDcxLjQtMzcuOSA2Mi41LTc3LjlsLTQ5LjgtMjI0QzUxMC40IDUyLjggNDg0LjUgMzIgNDU0LjUgMzJMMTIxLjggMzJ6TTI0NS42IDk2bDg1LjIgMCA3LjMgODgtOTkuOCAwIDcuMy04OHptLTU1LjUgODhsLTg3LjggMCAxOS42LTg4IDc1LjYgMC03LjMgODh6TTkxLjYgMjMybDk0LjUgMC03LjMgODgtMTA2LjcgMCAxOS42LTg4em0xNDIuNiAwbDEwNy44IDAgNy4zIDg4LTEyMi41IDAgNy4zLTg4em0xNTYgMGw5NC41IDAgMTkuNiA4OC0xMDYuNyAwLTcuMy04OHpNNDc0IDE4NGwtODcuOCAwLTcuMy04OCA3NS42IDAgMTkuNiA4OHoiXX0sS1JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxhbmQtbWluZS1vbiIsaWNvbjpbNTc2LDUxMixbXSwiZTUxYiIsIk0zMTIgMGwwIDEyOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNEwyNjQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek0xNjAgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDgwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw4MCAwIDAtMzJ6TTEyIDExNC43YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43bDk2IDY0YzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zcy0yMi4zIDE0LTMzLjMgNi43bC05Ni02NGMtMTEtNy40LTE0LTIyLjMtNi43LTMzLjN6TTUzMC43IDEwOGMxMS03LjQgMjUuOS00LjQgMzMuMyA2LjdzNC40IDI1LjktNi43IDMzLjNsLTk2IDY0Yy0xMSA3LjQtMjUuOSA0LjQtMzMuMy02LjdzLTQuNC0yNS45IDYuNy0zMy4zbDk2LTY0eiJdfSxMbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFkcGhvbmVzIixpY29uOls0NDgsNTEyLFsxMjc5MTEsNjI4NjMsImhlYWRwaG9uZXMtYWx0IiwiaGVhZHBob25lcy1zaW1wbGUiXSwiZjAyNSIsIk02NCAyMjRjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDM3LjVjLTEwLTMuNS0yMC44LTUuNS0zMi01LjVsLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTE2MEM0NDggMTAwLjMgMzQ3LjcgMCAyMjQgMFMwIDEwMC4zIDAgMjI0TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMGMtMTEuMiAwLTIyIDEuOS0zMiA1LjVMNjQgMjI0eiJdfSxRUmU9TG0sSlJlPUxtLGVCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidXMiLGljb246WzQ0OCw1MTIsWzEyODY1M10sImYyMDciLCJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxNzZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA0IDAgMCAxMTItMTA0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDh6bTE4NCA4MGwwLTExMiAxMDQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMDQgMHpNOTYgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjU2IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNTIgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il19LHRCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLXBvd2VycG9pbnQiLGljb246WzM4NCw1MTIsW10sImYxYzQiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1MiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNCAyNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcybC00OCAwem00OCA5NmwtMjQgMCAwLTQ4IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6Il19LEtSPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InF1b3RlLWxlZnQiLGljb246WzQ0OCw1MTIsWzgyMjAsInF1b3RlLWxlZnQtYWx0Il0sImYxMGQiLCJNMCAyMTZDMCAxNDkuNyA1My43IDk2IDEyMCA5Nmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMTZ6bTI1NiAwYzAtNjYuMyA1My43LTEyMCAxMjAtMTIwbDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTEzNnoiXX0sYUJlPUtSLGlCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGV2cm9uLWRvd24iLGljb246WzQ0OCw1MTIsW10sImYwNzgiLCJNMjAxLjQgNDA2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTkyLTE5MmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzM4LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MnoiXX0sUVI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWFydGgtYXNpYSIsaWNvbjpbNTEyLDUxMixbMTI3NzU5LCJnbG9iZS1hc2lhIl0sImY1N2UiLCJNNTAgMjg0LjhjNC4yIDIuMSA5IDMuMiAxNCAzLjJsNTAuNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDEzLjMgMTMuM2M2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMTguNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQtMTAuNyAyNC0yNGwwLTQyLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsMTMuMy0xMy4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNkwzMDQgNTdjMC0xLjItLjEtMi4zLS4yLTMuNS0xNS40LTMuNi0zMS40LTUuNS00Ny44LTUuNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDggMCA5LjggLjcgMTkuNCAyIDI4Ljh6bTQwMy4zIDM3LjNjLTMuMi0xLjQtNi43LTIuMS0xMC41LTIuMUw0MzIgMzIwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzQuNyAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNGwtNDUuMyA0NS4zYy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNCAyLjIgMi4yIDQuNyA0LjEgNy4zIDUuNSAzOS4zLTI1LjQgNjkuNS02My42IDg0LjYtMTA4Ljh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTEyOCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMjcyIDI1NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnptNDgtMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2eiJdfSxyQmU9UVIsc0JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNlbnQtc2lnbiIsaWNvbjpbMzg0LDUxMixbXSwiZTNmNSIsIk0yMDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1LjRjNDMuNiA1LjIgODMgMjQuNSAxMTMuMyA1My4xIDEyLjkgMTIuMSAxMy40IDMyLjQgMS4zIDQ1LjJzLTMyLjQgMTMuNC00NS4yIDEuM2MtMjQuNC0yMy01Ny4yLTM3LjEtOTMuMy0zNy4xLTc1LjEgMC0xMzYgNjAuOS0xMzYgMTM2czYwLjkgMTM2IDEzNiAxMzZjMzYuMiAwIDY5LTE0LjEgOTMuMy0zNy4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yQzMyMyA0MzAuMSAyODMuNiA0NDkuNCAyNDAgNDU0LjZsMCAyNS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjhDODQuNyA0MzMuNSAxNiAzNTIuOCAxNiAyNTZTODQuNyA3OC41IDE3NiA2MGwwLTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxuQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hpZWxkLWNhdCIsaWNvbjpbNTEyLDUxMixbXSwiZTU3MiIsIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwIDE1NC40YzAtNS44IDQuNy0xMC40IDEwLjQtMTAuNGwuMiAwYzMuNCAwIDYuNSAxLjYgOC41IDQuM2w0MCA1My4zYzMgNCA3LjggNi40IDEyLjggNi40bDQ4IDBjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNsLjIgMGM1LjggMCAxMC40IDQuNyAxMC40IDEwLjRMMzUyIDI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExNy42ek0yMTYgMjg4YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptOTYtMTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXX0sb0JlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjaG9vbC1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU1NmIiLCJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sSlI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFydGluaS1nbGFzcyIsaWNvbjpbNTEyLDUxMixbMTI3ODY0LCJnbGFzcy1tYXJ0aW5pLWFsdCJdLCJmNTdiIiwiTTIuNCA1MS44QzcuNCAzOS44IDE5LjEgMzIgMzIgMzJsNDQ4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwyODggMzAxLjMgMjg4IDQ0OCAzNTIgNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTQ2LjctMjE0LjYtMjE0LjZDLjIgNzcuNS0yLjUgNjMuNyAyLjQgNTEuOHpNMzU0LjcgMTQ0bDQ4LTQ4LTI5My41IDAgNDggNDggMTk3LjUgMHoiXX0sbEJlPUpSLGNCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVnIixpY29uOls0NDgsNTEyLFsxMjgyNjhdLCJmMWU2IiwiTTEyOC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA2NGMwIDk1LjEtNjkuMiAxNzQuMS0xNjAgMTg5LjNsMCA2Ni43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxMDEuMiAzOTguMSAzMiAzMTkuMSAzMiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LGRCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYW5vcmFtYSIsaWNvbjpbNTc2LDUxMixbXSwiZTIwOSIsIk00My45IDQ4QzE5LjcgNDggMCA2Ny43IDAgOTEuOUwwIDQyMC4xYzAgMjQuMyAxOS43IDQzLjkgNDMuOSA0My45IDUuNSAwIDEwLjctMSAxNS43LTIuOSAxMi45LTQuOSAxMDMuNC0zNy4xIDIyOC40LTM3LjFzMjE1LjUgMzIuMyAyMjguNCAzNy4xYzUgMS45IDEwLjIgMi45IDE1LjcgMi45IDI0LjMgMCA0My45LTE5LjcgNDMuOS00My45bDAtMzI4LjJjMC0yNC4zLTE5LjctNDMuOS00My45LTQzLjktNS41IDAtMTAuNyAxLTE1LjcgMi45LTEyLjkgNC45LTEwMy40IDM3LjEtMjI4LjQgMzcuMVM3Mi41IDU1LjcgNTkuNiA1MC45QzU0LjYgNDkgNDkuNCA0OCA0My45IDQ4ek03MiAxNzZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHptMjY0LjEtMTZjNy41IDAgMTQuNiAzLjYgMTkuMSA5LjZMNDc5LjcgMzM2LjJjNS45IDcuOSA2LjQgMTguNSAxLjMgMjYuOXMtMTQuOCAxMi44LTI0LjUgMTEuMWMtNDUuOC03LjgtMTAzLjMtMTQuMi0xNjguNC0xNC4yLTY1LjYgMC0xMjMuNCA2LjUtMTY5LjMgMTQuNC05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTY1LjMgMjQ5YzQuNi01LjcgMTEuNS05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjcuNSAzNC40IDg2LjctMTEzLjljNC42LTYgMTEuNy05LjUgMTkuMi05LjV6Il19LGQ4PXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb2NrLXJvdGF0ZS1sZWZ0IixpY29uOls1NzYsNTEyLFsiaGlzdG9yeSJdLCJmMWRhIiwiTTI4OCA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MlMzOTQgNDQ4IDI4OCA0NDhjLTY1LjIgMC0xMjIuOS0zMi41LTE1Ny42LTgyLjMtMTAuMS0xNC41LTMwLjEtMTgtNDQuNi03LjlzLTE4IDMwLjEtNy45IDQ0LjZDMTI0LjEgNDY4LjYgMjAxIDUxMiAyODggNTEyIDQyOS40IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NlM0MjkuNCAwIDI4OCAwQzIwMi4zIDAgMTI2LjUgNDIuMSA4MCAxMDYuN0w4MCA4MGMwLTE3LjctMTQuMy0zMi0zMi0zMlMxNiA2Mi4zIDE2IDgwbDAgMTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjYgMGMuNSAwIDEgMCAxLjUgMGw4NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zOC4zIDBDMTU0LjkgMTAyLjYgMjE3IDY0IDI4OCA2NHptMjQgODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDRjMCA2LjQgMi41IDEyLjUgNyAxN2w3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY1LTY1IDAtOTQuMXoiXX0scEJlPWQ4LGhCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqYXItd2hlYXQiLGljb246WzMyMCw1MTIsW10sImU1MTciLCJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0xMTIgMzJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMTYwYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6bTQ4IDExNy43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjdsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMjU2Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN3pNMTEyIDM1MmwtNDIuMiAwYy0zLjIgMC01LjggMi42LTUuOCA1LjggMCAzMi4xIDI2IDU4LjIgNTguMiA1OC4ybDIxLjggMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMiAyMS44IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMzUyYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6Il19LCRtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNsb3VkLWFycm93LWRvd24iLGljb246WzU3Niw1MTIsWzYyMzM3LCJjbG91ZC1kb3dubG9hZCIsImNsb3VkLWRvd25sb2FkLWFsdCJdLCJmMGVkIiwiTTE0NCA0ODBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNjMuNCA0MS0xMTcuMiA5Ny45LTEzNi41LTEuMy03LjctMS45LTE1LjUtMS45LTIzLjUgMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgNTUuNCAwIDEwMy41IDMxLjMgMTI3LjYgNzcuMSAxNC4yLTguMyAzMC44LTEzLjEgNDguNC0xMy4xIDUzIDAgOTYgNDMgOTYgOTYgMCAxNS43LTMuOCAzMC42LTEwLjUgNDMuNyA0NCAyMC4zIDc0LjUgNjQuNyA3NC41IDExNi4zIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMHpNMzc3IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6Il19LHVCZT0kbSxmQmU9JG0sZUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stcmFtcC1ib3giLGljb246WzU3Niw1MTIsWyJ0cnVjay1sb2FkaW5nIl0sImY0ZGUiLCJNNDAwIDMyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI0OC4yLTI5Ny4yIDg5LjJDNS45IDQ1NC40LTMuNyA0NzIuMyAxLjQgNDg5LjJzMjIuOSAyNi41IDM5LjggMjEuNWwzMTUuNS05NC42IDQzLjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhsMC0zOTItMTc2IDB6TTUyOCA0MjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDAgMTcuOS00MCA0MC00MGMyMi4xIDAgMzkuOSAxNy45IDQwIDM5LjlsMCAuMXpNNTEuOSAxNDkuNUMxOC4xIDE1OS44LS45IDE5NS42IDkuNCAyMjkuNGwyOC4xIDkxLjhDNDcuOCAzNTUgODMuNiAzNzQgMTE3LjQgMzYzLjdsOTEuOC0yOC4xYzMzLjgtMTAuMyA1Mi44LTQ2LjEgNDIuNS03OS45bC0yOC4xLTkxLjhjLTEwLjMtMzMuOC00Ni4xLTUyLjgtNzkuOS00Mi41TDUxLjkgMTQ5LjV6Il19LG1CZT1lQixnQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGUtZG93biIsaWNvbjpbMzg0LDUxMixbODk2NF0sImYxMDciLCJNMTY5LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMzA2LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXX0sYkJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsdWctY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNTVjIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXX0sdkJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndpbmRvdy1tYXhpbWl6ZSIsaWNvbjpbNTEyLDUxMixbMTI4NDcwXSwiZjJkMCIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMjQgNjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdfSx5QmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtaG9sZGluZy1jaXJjbGUiLGljb246WzY0MCw1MTIsW10sImU0ZmIiLCJNMzIwIDBhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2ek00MCA2NGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDE2MC4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDUxLjEgNTEuMWM4LjMgOC4zIDIxLjMgOS42IDMxIDMuMSAxMi45LTguNiAxNC43LTI2LjkgMy43LTM3LjgtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjJsMCAwIDI1LjMgMjUuM2MyMSAyMSAzMi44IDQ5LjUgMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjYuNyAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNUwwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyMjEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuMyAwIDBjNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4yLTExIDExLTkuMiAyOS4yIDMuNyAzNy44IDkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDU2MCAxMDRjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il19LHRCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxvY2F0aW9uLXBpbiIsaWNvbjpbMzg0LDUxMixbIm1hcC1tYXJrZXIiXSwiZjA0MSIsIk0xOTIgMEM4NiAwIDAgODQuNCAwIDE4OC42IDAgMzA3LjkgMTIwLjIgNDUwLjkgMTcwLjQgNTA1LjQgMTgyLjIgNTE4LjIgMjAxLjggNTE4LjIgMjEzLjYgNTA1LjQgMjYzLjggNDUwLjkgMzg0IDMwNy45IDM4NCAxODguNiAzODQgODQuNCAyOTggMCAxOTIgMHoiXX0seEJlPXRCLHdCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3dsaW5nLWJhbGwiLGljb246WzUxMiw1MTIsW10sImY0MzYiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCA4MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIwOCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTY0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sYUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FydC1mbGF0YmVkIixpY29uOls1NzYsNTEyLFsiZG9sbHktZmxhdGJlZCJdLCJmNDc0IiwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyODhjMCAzOS44IDI5LjEgNzIuOCA2Ny4xIDc5LTIgNS4zLTMuMSAxMS0zLjEgMTcgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwxOTcuNSAwYy0xLjggNS0yLjcgMTAuNC0yLjcgMTYgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQwMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yODhDMTI4IDM1LjggOTIuMiAwIDQ4IDBMMzIgMHpNMjI0IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE3NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNDAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwyMjQgNjR6Il19LE1CZT1hQixpQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS11c2VyIixpY29uOls1MTIsNTEyLFsiaG9tZS11c2VyIl0sImUxYjAiLCJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjAwIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTE0NCA0MzJjMC00NC4yIDM1LjgtODAgODAtODBsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZ6Il19LHpCZT1pQixrQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2hvc3QiLGljb246WzM4NCw1MTIsWzEyODEyM10sImY2ZTIiLCJNNDAuMSA0NjcuMWwtMTEuMiA5QzI1LjcgNDc4LjYgMjEuOCA0ODAgMTcuOCA0ODAgOCA0ODAgMCA0NzIgMCA0NjIuMkwwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJsMCAyNzAuMmMwIDkuOC04IDE3LjgtMTcuOCAxNy44LTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxTQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29tbWVudC1ub2RlcyIsaWNvbjpbNjQwLDUxMixbXSwiZTY5NiIsIk00ODAgMjA4QzUwMy43IDIwOCA1MjUuNiAyMTUuMyA1NDMuNyAyMjcuOSA1MzYuOSAxMDAuOSA0MjUgMCAyODggMCAxNDYuNiAwIDMyIDEwNy41IDMyIDI0MCAzMiAyOTQuMyA1MS4yIDM0NC4zIDgzLjYgMzg0LjVMMzQuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdjMjcuMiAxMS40IDU2LjkgMTguNCA4OC4xIDIwLjIgLjEtMTguOSA0LjktMzggMTUtNTUuNSAxNy4xLTI5LjcgNDUuOC00OC41IDc3LTU0LjJsOS4yLTE2Yy0zLjQtMTAuNy01LjItMjItNS4yLTMzLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTJ6TTMyOC42IDQ0OGMtMTcuNyAzMC42LTcuMiA2OS43IDIzLjQgODcuNHM2OS43IDcuMiA4Ny40LTIzLjRjMS41LTIuNiAyLjgtNS4zIDMuOS04bDczLjMgMGMxLjEgMi43IDIuNCA1LjQgMy45IDggMTcuNyAzMC42IDU2LjggNDEuMSA4Ny40IDIzLjRzNDEuMS01Ni44IDIzLjQtODcuNGMtMTMuNC0yMy4yLTM5LjEtMzQuOC02NC0zMS40bC0xNy42LTMwLjdjLTExIDExLjctMjUgMjAuNi00MC42IDI1LjZsMTYuNSAyOC45Yy0zLjggNC44LTYuOCAxMC05IDE1LjZsLTczLjQgMGMtMi4yLTUuNi01LjMtMTAuOC05LTE1LjZsMzMtNTcuN2M0LjEgLjggOC40IDEuMyAxMi44IDEuMyAzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0YzAgMTMuNCA0LjEgMjUuOCAxMS4yIDM2LjFsLTM0LjYgNjAuNWMtMjUtMy40LTUwLjYgOC4zLTY0IDMxLjR6Il19LENCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYXJyb3ctZG93bi10by1saW5lIixpY29uOls1NzYsNTEyLFtdLCJlNTM4IiwiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgNDgwbDMyIDAgMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMjh6TTU2Ni42IDE2Ni42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDQzMiAxNDYuNyA0MzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6Il19LF9CZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVnLWNpcmNsZS1wbHVzIixpY29uOls2NDAsNTEyLFtdLCJlNTVmIiwiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHoiXX0sckI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXN3aW1taW5nIixpY29uOls2NDAsNTEyLFsxMjc5NDYsInN3aW1tZXIiXSwiZjVjNCIsIk01NTIgMTUyYTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNMjkzLjQgMTk4LjJsLTg4LjYgNzMuOWMxLjEgMCAyLjItLjEgMy4zLS4xIDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCA0LjggMCA5LjcgLjIgMTQuNSAuNi04LjMtMzAtMjQuMy01Ny43LTQ2LjgtODAuMi0xOC40LTE4LjQtNDAuNi0zMi43LTY1LTQxLjhsLTY4LjYtMjUuN2MtMjcuNC0xMC4zLTU4LTcuNS04My4xIDcuNmwtNTMuNSAzMi4xYy0xNS4yIDkuMS0yMC4xIDI4LjctMTEgNDMuOXMyOC43IDIwLjEgNDMuOSAxMUwyMzAgMTg3LjNjOC40LTUgMTguNi01LjkgMjcuNy0yLjVsMzUuNyAxMy40em0xMTAgMTgxLjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyAzODYuMyAxNy42IDM5NC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXX0sVEJlPXJCLHNCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQtZG90cyIsaWNvbjpbNTEyLDUxMixbMTI4MTcyLDYyMDc1LCJjb21tZW50aW5nIl0sImY0YWQiLCJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTEyOCAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LExCZT1zQixuQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFydC1waWUiLGljb246WzU3Niw1MTIsWyJwaWUtY2hhcnQiXSwiZjIwMCIsIk01MTIuNCAyNDBsLTE3NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE3NmMwLTE3LjcgMTQuNC0zMi4yIDMxLjktMjkuOSAxMDcgMTQuMiAxOTEuOCA5OSAyMDYgMjA2IDIuMyAxNy41LTEyLjIgMzEuOS0yOS45IDMxLjl6TTIyMi42IDM3LjJjMTguMS0zLjggMzMuOCAxMSAzMy44IDI5LjVsMCAxOTcuM2MwIDUuNiAyIDExIDUuNSAxNS4zTDM5NCA0MzguN2MxMS43IDE0LjEgOS4yIDM1LjQtNi45IDQ0LjEtMzQuMSAxOC42LTczLjIgMjkuMi0xMTQuNyAyOS4yLTEzMi41IDAtMjQwLTEwNy41LTI0MC0yNDAgMC0xMTUuNSA4MS41LTIxMS45IDE5MC4yLTIzNC44ek00NzcuOCAyODhsNjQgMGMxOC41IDAgMzMuMyAxNS43IDI5LjUgMzMuOC0xMC4yIDQ4LjQtMzUgOTEuNC02OS42IDEyNC4yLTEyLjMgMTEuNy0zMS42IDkuMi00Mi40LTMuOUwzNzQuOSAzNDAuNGMtMTcuMy0yMC45LTIuNC01Mi40IDI0LjYtNTIuNGw3OC4yIDB6Il19LCRCZT1uQixBQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZnJvZyIsaWNvbjpbNTc2LDUxMixbXSwiZjUyZSIsIk0zNjggMzJjNDEuNyAwIDc1LjkgMzEuOCA3OS43IDcyLjVsODUuNiAyNi4zYzI1LjQgNy44IDQyLjggMzEuMyA0Mi44IDU3LjkgMCAyMS44LTExLjcgNDEuOS0zMC43IDUyLjdsLTE0NC41IDgyLjEgOTIuNSA5Mi41IDUwLjcgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43LTQwLjYtNDAuNi0xMDYuMy00MC42LTE0Ni45LS4xTDEwMSAzMjQuNGMtNi40IDYuMS02LjcgMTYuMi0uNiAyMi42czE2LjIgNi42IDIyLjYgLjZsNzMuOC03MC4yIC4xLS4xIC4xLS4xYzMuNS0zLjUgNy4zLTYuNiAxMS4zLTkuMiAyNy45LTE4LjUgNjUuOS0xNS40IDkwLjUgOS4yIDI0LjcgMjQuNyAyNy43IDYyLjkgOSA5MC45LTIuNiAzLjgtNS42IDcuNS05IDEwLjlMMjYxLjggNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwQzI4LjcgNDgwIDAgNDUxLjMgMCA0MTYgMCAyNDkuNiAxMjcgMTEyLjkgMjg5LjMgOTcuNSAyOTYuMiA2MC4yIDMyOC44IDMyIDM2OCAzMnptMCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxEQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZS1ib3R0bGUiLGljb246WzMyMCw1MTIsW10sImY3MmYiLCJNODAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDExLjgtNi40IDIyLjItMTYgMjcuN2wwIDE0NS42YzU2LjUgMjQuNyA5NiA4MS4xIDk2IDE0Ni43bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDU3NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyODhjMC02NS42IDM5LjUtMTIyIDk2LTE0Ni43TDk2LTQuM0M4Ni40LTkuOCA4MC0yMC4yIDgwLTMyek05NiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDI4OHoiXX0sRUJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImluYm94IixpY29uOls1MTIsNTEyLFtdLCJmMDFjIiwiTTkxLjggMzJDNTkuOSAzMiAzMi45IDU1LjQgMjguNCA4Ni45TC42IDI4MS4yYy0uNCAzLS42IDYtLjYgOS4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI1LjdjMC0zLS4yLTYuMS0uNi05LjFMNDgzLjYgODYuOUM0NzkuMSA1NS40IDQ1Mi4xIDMyIDQyMC4yIDMyTDkxLjggMzJ6bTAgNjRsMzI4LjUgMCAyNy40IDE5Mi01OS45IDBjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE0LjMgMjguNmMtNS40IDEwLjgtMTYuNSAxNy43LTI4LjYgMTcuN2wtMTIwLjQgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN2wtMTQuMy0yOC42Yy01LjQtMTAuOC0xNi41LTE3LjctMjguNi0xNy43TDY0LjMgMjg4IDkxLjggOTZ6Il19LG9CPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1oIixpY29uOls0NDgsNTEyLFsiaC1zcXVhcmUiXSwiZjBmZCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAgMTY4bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sUEJlPW9CLElCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1tZWRpY2FsIixpY29uOls1MTIsNTEyLFtdLCJlM2IyIiwiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTIyNCAyNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il19LGxCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1jaGV2cm9uLXJpZ2h0IixpY29uOls1MTIsNTEyLFsiY2hldnJvbi1jaXJjbGUtcmlnaHQiXSwiZjEzOCIsIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3eiJdfSxOQmU9bEIsRkJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY3N2IixpY29uOls1NzYsNTEyLFtdLCJmNmRkIiwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODAgMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwxNzYgMCAwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek0yNjQgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptMTM2IDBjLTI4LjcgMC01MiAyMy4zLTUyIDUyczIzLjMgNTIgNTIgNTJjNi42IDAgMTIgNS40IDEyIDEycy01LjQgMTItMTIgMTJsLTMyIDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJzLTIzLjMtNTItNTItNTJjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMjQgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI0IDB6bTk2IDBjLTExIDAtMjAgOS0yMCAyMGwwIDMxLjZjMCAzNS41IDEwLjUgNzAuMyAzMC4yIDk5LjhsNS4xIDcuN2MzLjcgNS42IDEwIDguOSAxNi42IDguOXMxMi45LTMuMyAxNi42LTguOWw1LjEtNy43YzE5LjctMjkuNiAzMC4yLTY0LjMgMzAuMi05OS44bDAtMzEuNmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMS42YzAgMTkuNi00LjEgMzguOS0xMiA1Ni43LTcuOS0xNy44LTEyLTM3LjEtMTItNTYuN2wwLTMxLjZjMC0xMS05LTIwLTIwLTIweiJdfSxPQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGF0LWNvd2JveSIsaWNvbjpbNjQwLDUxMixbXSwiZjhjMCIsIk0xODIuMiA3Ni4xTDEzMC44IDMwNy41QzE0NS41IDMyNC45IDE2Ny40IDMzNiAxOTIgMzM2bDI1NiAwYzI0LjYgMCA0Ni41LTExLjEgNjEuMi0yOC41TDQ1Ny44IDc2LjFjLTUuNy0yNS44LTI4LjYtNDQuMS01NS00NC4xLTEyLjIgMC0yNC4xIDQtMzMuOCAxMS4zbC00LjcgMy41Yy0yNi4zIDE5LjctNjIuNCAxOS43LTg4LjYgMEwyNzEgNDMuM2MtOS44LTcuMy0yMS42LTExLjMtMzMuOC0xMS4zLTI2LjQgMC00OS4zIDE4LjMtNTUgNDQuMXpNNjQgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjM4LjMgMCAyNTZDMCAzNjIgODYgNDQ4IDE5MiA0NDhsMjU2IDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTI1NiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHoiXX0sY0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLXRvbmd1ZS13aW5rIixpY29uOls1MTIsNTEyLFsxMjg1NDAsImdyaW4tdG9uZ3VlLXdpbmsiXSwiZjU4YiIsIk0xNTIuMiA0OTAuMUM2Mi41IDQ1MC4yIDAgMzYwLjQgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgMTA0LjQtNjIuNSAxOTQuMi0xNTIuMiAyMzQuMSA1LjMtMTMgOC4yLTI3LjIgOC4yLTQyLjFsMC02MS43YzE2LjktMTYuNSAzMC4xLTM2LjcgMzguMy01OS4zIDQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMS0zOS4yIDEyLjItODMuNyAxOS4xLTEzMC43IDE5LjFzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSA4LjMgMjIuNiAyMS41IDQyLjggMzguMyA1OS4zbDAgNjEuN2MwIDE0LjkgMi45IDI5LjEgOC4yIDQyLjF6TTE1MiAyMTJsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xODQgNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTMyMCA0MDIuNmwwIDQ1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC00NS40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45IDIuOCAxMi42IDIwLjggMTIuNiAyMy42IDAgMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTMzNiAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxSQmU9Y0IsQkJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImwiLGljb246WzMyMCw1MTIsWzEwOF0sIjRjIiwiTTY0IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzUyIDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEFtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tc2hvcnQtd2lkZSIsaWNvbjpbNTc2LDUxMixbInNvcnQtYW1vdW50LWRlc2MiLCJzb3J0LWFtb3VudC1kb3duLWFsdCJdLCJmODg0IiwiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdfSxIQmU9QW0scUJlPUFtLGRCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXJnbGFzcy1oYWxmIixpY29uOlszODQsNTEyLFsiaG91cmdsYXNzLTIiXSwiZjI1MiIsIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xbDY3LjkgNjcuOS02Ny45IDY3LjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtNjcuOS02Ny45IDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzM2OS43IDAgMzUyIDBMMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMTktNS42IDM3LjQtMTYgNTNMMTEyIDEyOGMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlsNjcuOS02Ny45IDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMiAxNC45TDExMiAzODR6Il19LFZCZT1kQixwQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcG9vbiIsaWNvbjpbNTEyLDUxMixbMTI5MzQ4LDYxODczLCJ1dGVuc2lsLXNwb29uIl0sImYyZTUiLCJNMjQ1LjggMjIwLjljLTE0LjUtMTcuNi0yMS44LTM5LjItMjEuOC02MC44IDAtODAuMiA5Ni0xNjAuMiAxOTItMTYwLjIgNTMgMCA5NiA0MyA5NiA5NiAwIDk2LTgwIDE5Mi0xNjAuMiAxOTItMjEuNiAwLTQzLjItNy4zLTYwLjgtMjEuOEw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDUuOCAyMjAuOXoiXX0sakJlPXBCLGhCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNyZWRpdC1jYXJkIixpY29uOls1MTIsNTEyLFsxMjgxNzksNjIwODMsImNyZWRpdC1jYXJkLWFsdCJdLCJmMDlkIiwiTTAgMTI4bDAgMzIgNTEyIDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOHptMCA4MEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3Ni01MTIgMHpNNjQgMzYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xNDQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXX0sVUJlPWhCLGhnPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtaW52b2ljZS1kb2xsYXIiLGljb246WzM4NCw1MTIsW10sImY1NzEiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjRDNzQuNyA2NCA2NCA3NC43IDY0IDg4em0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0xMTIgNzZsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMTUyIDQwMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHoiXX0sdUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3BhZ2hldHRpLW1vbnN0ZXItZmx5aW5nIixpY29uOls2NDAsNTEyLFsicGFzdGFmYXJpYW5pc20iXSwiZjY3YiIsIk0yMDggNjRhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMGMwIDE2LjItNiAzMS4xLTE2IDQyLjNsMTUuNiAzMS4yYzE4LjctNiAzOS45LTkuNSA2NC40LTkuNXM0NS44IDMuNSA2NC40IDkuNUw0MDAgMTA2LjNjLTEwLTExLjMtMTYtMjYuMS0xNi00Mi4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjQtMjguNyA2NC02NCA2NGMtMS43IDAtMy40LS4xLTUuMS0uMkw0MjcuOCAxNThjMjEuMSAxMy42IDM3LjcgMzAuMiA1MS40IDQ2LjQgNy4xIDguMyAxMy41IDE2LjYgMTkuMyAyNGwxLjQgMS44YzYuMyA4LjEgMTEuNiAxNC44IDE2LjcgMjAuNCAxMC43IDExLjcgMTYuMSAxMy40IDE5LjQgMTMuNCAyLjUgMCA0LjMtLjYgNy4xLTMuMyAzLjctMy41IDcuMS04LjggMTIuNS0xNy40bC42LS45YzQuNi03LjQgMTEtMTcuNiAxOS40LTI1LjcgOS43LTkuMyAyMi45LTE2LjcgNDAuNC0xNi43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yLjUgMC00LjMgLjYtNy4xIDMuMy0zLjcgMy41LTcuMSA4LjgtMTIuNSAxNy40bC0uNiAuOWMtNC42IDcuNC0xMSAxNy42LTE5LjQgMjUuNy05LjcgOS4zLTIyLjkgMTYuNy00MC40IDE2LjctMTguNSAwLTMyLjktOC41LTQ0LjMtMTguNi0zLjEgNC02LjYgOC4zLTEwLjUgMTIuNyAxLjQgNC4zIDIuOCA4LjUgNCAxMi41IC45IDMgMS44IDUuOCAyLjYgOC42IDMgOS44IDUuNSAxOC4yIDguNiAyNS45IDMuOSA5LjggNy40IDE1LjQgMTAuOCAxOC41IDIuNiAyLjQgNS45IDQuMyAxMi44IDQuMyA4LjcgMCAxNi45LTQuMiAzMy43LTEzLjIgMTUtOCAzNS43LTE4LjggNjIuMy0xOC44IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMy40IDAtMjQuNyA1LjItMzkuNyAxMy4yLTEgLjYtMi4xIDEuMS0zLjIgMS43LTEzLjEgNy4xLTMxLjYgMTcuMS01My4xIDE3LjEtMTguNCAwLTMzLjYtNi4xLTQ1LjUtMTcuMi0xMS4xLTEwLjMtMTcuOS0yMy43LTIyLjctMzYtMy42LTktNi43LTE5LjEtOS41LTI4LjUtMTYuNCAxMi4zLTM2LjEgMjMuNi01OC45IDMxLjMgMy42IDEwLjggOC40IDIzLjUgMTQuNCAzNi4yIDcuNSAxNS45IDE2LjIgMzAuNCAyNS44IDQwLjUgOS42IDEwLjIgMTcuNyAxMy43IDI0LjUgMTMuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjUuMiAwLTQ1LTEzLjUtNTkuNS0yOC44LTE0LjUtMTUuNC0yNS43LTM0LjktMzQuMi01My04LTE3LTE0LjEtMzMuOC0xOC4zLTQ2LjktNS4yIC40LTEwLjYgLjYtMTYgLjZzLTEwLjgtLjItMTYtLjZjLTQuMiAxMy0xMC4zIDI5LjktMTguMyA0Ni45LTguNSAxOC4xLTE5LjggMzcuNi0zNC4yIDUzLTE0LjQgMTUuMy0zNC4zIDI4LjgtNTkuNSAyOC44LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjNi44IDAgMTUtMy41IDI0LjUtMTMuNyA5LjUtMTAuMSAxOC4zLTI0LjYgMjUuOC00MC41IDUuOS0xMi42IDEwLjctMjUuNCAxNC40LTM2LjItMjIuOC03LjctNDIuNS0xOS01OC45LTMxLjMtMi45IDkuNC02IDE5LjUtOS41IDI4LjUtNC44IDEyLjItMTEuNiAyNS42LTIyLjcgMzYtMTEuOSAxMS4xLTI3LjEgMTcuMi00NS41IDE3LjItMTMuMSAwLTI0LjUtNC4xLTMzLjgtOC45LTcuOS00LTE1LjctOS4yLTIyLjEtMTMuNWwwIDAtMi40LTEuNmMtMTUuMy0xMC4yLTI1LjgtMTYtMzcuNy0xNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjEgMCA0OS42IDE0LjIgNjQuMyAyNGwyLjQgMS42YzYuOSA0LjYgMTIuMSA4LjEgMTcuMiAxMC43IDUuNSAyLjggOS4xIDMuNiAxMiAzLjYgNi44IDAgMTAuMi0xLjkgMTIuOC00LjMgMy40LTMuMiA3LTguOCAxMC44LTE4LjUgMy03LjcgNS42LTE2LjEgOC42LTI1LjkgLjgtMi43IDEuNy01LjYgMi42LTguNiAxLjItNCAyLjYtOC4yIDQtMTIuNS0zLjktNC41LTcuNC04LjgtMTAuNS0xMi43LTExLjQgMTAuMS0yNS45IDE4LjYtNDQuMyAxOC42LTE3LjUgMC0zMC43LTcuNC00MC40LTE2LjctOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjQtMi44LTIuNy00LjYtMy4zLTcuMS0zLjMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMxNy41IDAgMzAuNyA3LjQgNDAuNCAxNi43IDguNCA4LjEgMTQuOCAxOC4zIDE5LjQgMjUuN2wuNiAuOWM1LjQgOC42IDguOCAxMy45IDEyLjUgMTcuNCAyLjggMi43IDQuNiAzLjMgNy4xIDMuMyAzLjMgMCA4LjctMS43IDE5LjQtMTMuNCA1LjEtNS42IDEwLjQtMTIuMyAxNi43LTIwLjRsMS40LTEuOGM1LjgtNy40IDEyLjItMTUuNyAxOS4zLTI0IDEzLjgtMTYuMiAzMC4zLTMyLjggNTEuNC00Ni40bC0xNS4xLTMwLjJjLTEuNyAuMS0zLjQgLjItNS4xIC4yLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXX0sV0JlPXVCLGZCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hcnRpbmktZ2xhc3MtY2l0cnVzIixpY29uOls2NDAsNTEyLFsiY29ja3RhaWwiXSwiZjU2MSIsIk01NzYgODBjMC00NC4yLTM1LjgtODAtODAtODAtMTggMC0zNC42IDYtNDggMTZsLTgxIDBjMjMuNi00Ny40IDcyLjUtODAgMTI5LTgwIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzU3NS41IDIyNCA0OTYgMjI0Yy02LjUgMC0xMy0uNC0xOS4zLTEuM2w2NC03NC43YzEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDE5LjQtMTQuNiAzMi0zNy44IDMyLTY0ek02Ni45IDgyLjZDNzIuMiA3MS4zIDgzLjUgNjQgOTYgNjRsMzg0IDBjMTIuNSAwIDIzLjggNy4zIDI5LjEgMTguNnMzLjQgMjQuNy00LjggMzQuMmwtMTg0LjMgMjE1IDAgMTE2LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNi4yLTE4NC4zLTIxNWMtOC4xLTkuNS0xMC0yMi44LTQuOC0zNC4yek0xNjUuNiAxMjhMMjg4IDI3MC44IDQxMC40IDEyOCAxNjUuNiAxMjh6Il19LEdCZT1mQixZQmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVsbGhvcm4iLGljb246WzUxMiw1MTIsWzEyODIyNiwxMjgzNjNdLCJmMGExIiwiTTQ2MS4yIDE4LjlDNDcyLjcgMjQgNDgwIDM1LjQgNDgwIDQ4bDAgNDE2YzAgMTIuNi03LjMgMjQtMTguOCAyOS4xcy0yNC44IDMuMi0zNC4zLTUuMWwtNDYuNi00MC43Yy00My42LTM4LjEtOTguNy02MC4zLTE1Ni40LTYzbDAgOTUuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NkM1Ny4zIDM4NCAwIDMyNi43IDAgMjU2UzU3LjMgMTI4IDEyOCAxMjhsODQuNSAwYzYxLjgtLjIgMTIxLjQtMjIuNyAxNjcuOS02My4zbDQ2LjYtNDAuN2M5LjQtOC4zIDIyLjktMTAuMiAzNC4zLTUuMXpNMjI0IDMyMGwwIC4yYzcwLjMgMi43IDEzNy44IDI4LjUgMTkyIDczLjRsMC0yNzUuM2MtNTQuMiA0NC45LTEyMS43IDcwLjctMTkyIDczLjRMMjI0IDMyMHoiXX0sWkJlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJveC10aXNzdWUiLGljb246WzUxMiw1MTIsW10sImUwNWIiLCJNMTAzLjkgMzJsMTYxIDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlsMTcuNCA1Mi4yYzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsNjAuNSAwYzIxLjggMCAzNy4zIDIxLjQgMzAuNCA0Mi4xTDM4NCAzMjAgMTI4IDMyMCA3Mi43IDcwLjlDNjguMiA1MSA4My40IDMyIDEwMy45IDMyek00OCAyNTZsMTYuNiAwIDE2LjUgNzQuNEM4NiAzNTIuNCAxMDUuNSAzNjggMTI4IDM2OGwyNTYgMGMyMC43IDAgMzktMTMuMiA0NS41LTMyLjhsMjYuNC03OS4yIDguMSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDh6Il19LFhCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXR0cmVzcy1waWxsb3ciLGljb246WzU3Niw1MTIsW10sImU1MjUiLCJNMjU2IDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwIDAtMzg0em00OCAzODRsMjA4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTIwOCAwIDAgMzg0ek02NCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il19LEtCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGV2cm9uLWxlZnQiLGljb246WzMyMCw1MTIsWzkwMDFdLCJmMDUzIiwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDI0Ni42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE5MiAxOTJ6Il19LFFCZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjbG91ZC1tb29uLXJhaW4iLGljb246WzU3Niw1MTIsW10sImY3M2MiLCJNNDQ4IDBjLTY4LjYgMC0xMjcuMSA0My4xLTE0OS44IDEwMy44IDE3LjEgMTQuMSAyOS42IDMzLjUgMzQuOSA1NS44IDM5LjkgMjEuNyA2Ni45IDYzLjkgNjYuOSAxMTIuNSAwIDEzLjUtMi4xIDI2LjUtNS45IDM4LjcgMTYuOSA2IDM1IDkuMyA1My45IDkuMyA0MyAwIDgyLjEtMTcgMTEwLjgtNDQuNiA0LjYtNC40IDUuOS0xMS4yIDMuMy0xN3MtOC42LTkuMy0xNC45LTguOGMtMyAuMi02LjEgLjQtOS4yIC40LTYzLjUgMC0xMTUtNTEuNS0xMTUtMTE1IDAtNDUuMSAyNi04NC4yIDYzLjgtMTAzIDUuNy0yLjggOS04LjkgOC4yLTE1LjJTNDg5LjYgNS4zIDQ4My40IDMuOUM0NzIgMS40IDQ2MC4yIDAgNDQ4IDB6TTI3MiAzNTJjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zOS0yNy45LTcxLjUtNjQuOC03OC42IC41LTMuMSAuOC02LjIgLjgtOS40IDAtMzAuOS0yNS4xLTU2LTU2LTU2LTEyLjQgMC0yMy45IDQtMzMuMSAxMC44LTEzLjQtMjUuNS00MC4xLTQyLjgtNzAuOS00Mi44LTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgNy40IDEgMTQuNiAyLjkgMjEuNS0yOS44IDExLjYtNTAuOSA0MC42LTUwLjkgNzQuNSAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxOTIgMHpNNjkgNDAxLjFjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMkwxNy4yIDQ4MC40QzEzIDQ5MyAxOS44IDUwNi42IDMyLjQgNTEwLjhzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHoiXX0sRG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi0xLTkiLGljb246WzUxMiw1MTIsWyJzb3J0LW51bWVyaWMtYXNjIiwic29ydC1udW1lcmljLWRvd24iXSwiZjE2MiIsIk00MTguNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNmwwIDk2IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTUxLjYtNS45IDJjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVsNDgtMTZjOS44LTMuMyAyMC41LTEuNiAyOC44IDQuNHpNMzY1LjEgNDMwLjZsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAzMzZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTUwLjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2eiJdfSxKQmU9RG0sZUhlPURtLHRIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLXNwb2NrIixpY29uOls1MTIsNTEyLFsxMjg0MDZdLCJmMjU5IiwiTTIxNC45IDIzLjdDMjEwLjMgNi42IDE5Mi44LTMuNSAxNzUuNyAxLjFzLTI3LjIgMjIuMS0yMi42IDM5LjJMMjA2IDIzNy44YzIuNSA5LjItNC41IDE4LjItMTQgMTguMi02LjQgMC0xMi00LjItMTMuOS0xMC4zTDEzNC42IDEwMi43Yy01LjEtMTYuOS0yMy0yNi40LTM5LjktMjEuM3MtMjYuNCAyMy0yMS4zIDM5LjlsNjIuOCAyMDYuNGMyLjQgNy45LTcuMiAxMy44LTEzLjIgOC4xTDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjEgMGMuMSAwIC4xLS4xIC4xLS4xcy4xLS4xIC4xLS4xYzU4LjMtMy41IDEwOC42LTQzLjIgMTI1LjMtOTkuN2w4MS4yLTI3NWM1LTE2LjktNC43LTM0LjctMjEuNi0zOS44cy0zNC43IDQuNy0zOS44IDIxLjZMNDExLjUgMjQ3LjFjLTEuNiA1LjMtNi40IDguOS0xMiA4LjktNy45IDAtMTMuOC03LjMtMTIuMi0xNS4xbDM2LTE3MC4zYzMuNy0xNy4zLTcuNC0zNC4zLTI0LjctMzcuOXMtMzQuMyA3LjQtMzcuOSAyNC43TDMyMy4xIDIzNS4xYy0yLjYgMTIuMi0xMy4zIDIwLjktMjUuOCAyMC45LTExLjkgMC0yMi40LTgtMjUuNC0xOS41bC01Ny0yMTIuOHoiXX0sbUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2FuZC1tYWdpYy1zcGFya2xlcyIsaWNvbjpbNTc2LDUxMixbIm1hZ2ljLXdhbmQtc3BhcmtsZXMiXSwiZTJjYSIsIk0yNjMuNC0yN0wyNzguMiA5LjggMzE1IDI0LjZjMyAxLjIgNSA0LjIgNSA3LjRzLTIgNi4yLTUgNy40TDI3OC4yIDU0LjIgMjYzLjQgOTFjLTEuMiAzLTQuMiA1LTcuNCA1cy02LjItMi03LjQtNUwyMzMuOCA1NC4yIDE5NyAzOS40Yy0zLTEuMi01LTQuMi01LTcuNHMyLTYuMiA1LTcuNEwyMzMuOCA5LjggMjQ4LjYtMjdjMS4yLTMgNC4yLTUgNy40LTVzNi4yIDIgNy40IDV6TTExMC43IDQxLjdsMjEuNSA1MC4xIDUwLjEgMjEuNWM1LjkgMi41IDkuNyA4LjMgOS43IDE0LjdzLTMuOCAxMi4yLTkuNyAxNC43bC01MC4xIDIxLjUtMjEuNSA1MC4xYy0yLjUgNS45LTguMyA5LjctMTQuNyA5LjdzLTEyLjItMy44LTE0LjctOS43TDU5LjggMTY0LjIgOS43IDE0Mi43QzMuOCAxNDAuMiAwIDEzNC40IDAgMTI4czMuOC0xMi4yIDkuNy0xNC43TDU5LjggOTEuOCA4MS4zIDQxLjdDODMuOCAzNS44IDg5LjYgMzIgOTYgMzJzMTIuMiAzLjggMTQuNyA5Ljd6TTQ2NCAzMDRjNi40IDAgMTIuMiAzLjggMTQuNyA5LjdsMjEuNSA1MC4xIDUwLjEgMjEuNWM1LjkgMi41IDkuNyA4LjMgOS43IDE0LjdzLTMuOCAxMi4yLTkuNyAxNC43bC01MC4xIDIxLjUtMjEuNSA1MC4xYy0yLjUgNS45LTguMyA5LjctMTQuNyA5LjdzLTEyLjItMy44LTE0LjctOS43bC0yMS41LTUwLjEtNTAuMS0yMS41Yy01LjktMi41LTkuNy04LjMtOS43LTE0LjdzMy44LTEyLjIgOS43LTE0LjdsNTAuMS0yMS41IDIxLjUtNTAuMWMyLjUtNS45IDguMy05LjcgMTQuNy05Ljd6TTQ2MCAwYzExIDAgMjEuNiA0LjQgMjkuNSAxMi4ybDQyLjMgNDIuM0M1MzkuNiA2Mi40IDU0NCA3MyA1NDQgODRzLTQuNCAyMS42LTEyLjIgMjkuNWwtODguMiA4OC4yLTEwMS4zLTEwMS4zIDg4LjItODguMkM0MzguNCA0LjQgNDQ5IDAgNDYwIDB6TTQ0LjIgMzk4LjVMMzA4LjQgMTM0LjMgNDA5LjcgMjM1LjYgMTQ1LjUgNDk5LjhDMTM3LjYgNTA3LjYgMTI3IDUxMiAxMTYgNTEycy0yMS42LTQuNC0yOS41LTEyLjJMNDQuMiA0NTcuNUMzNi40IDQ0OS42IDMyIDQzOSAzMiA0MjhzNC40LTIxLjYgMTIuMi0yOS41eiJdfSxhSGU9bUIsaUhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbW1lbnQtbWVkaWNhbCIsaWNvbjpbNTEyLDUxMixbXSwiZjdmNSIsIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMjE3LjYgMTUzLjZjMC0xMC42IDguNi0xOS4yIDE5LjItMTkuMmwzOC40IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDQ4IDQ4IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDM4LjRjMCAxMC42LTguNiAxOS4yLTE5LjIgMTkuMmwtNDggMCAwIDQ4YzAgMTAuNi04LjYgMTkuMi0xOS4yIDE5LjJsLTM4LjQgMGMtMTAuNiAwLTE5LjItOC42LTE5LjItMTkuMmwwLTQ4LTQ4IDBjLTEwLjYgMC0xOS4yLTguNi0xOS4yLTE5LjJsMC0zOC40YzAtMTAuNiA4LjYtMTkuMiAxOS4yLTE5LjJsNDggMCAwLTQ4eiJdfSxySGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmVsbC1zbGFzaCIsaWNvbjpbNTc2LDUxMixbMTI4Mjc3LDYxOTQzXSwiZjFmNiIsIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04Ny41LTg3LjVjMTcuMi0yLjQgMzAuNS0xNy4zIDMwLjUtMzUuMiAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtOS44LTEyLjJDNDY0LjQgMzA4LjUgNDQ4IDI2MS44IDQ0OCAyMTMuN2wwLTIxLjdjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhsMC0zLjJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzLjJjLTM4LjYgNy44LTcyLjIgMjkuNi05NS4yIDU5LjdMNDEtMjQuOXptODcgMjM4LjVjMCA0OC4xLTE2LjQgOTQuOC00Ni40IDEzMi40bC05LjggMTIuMmMtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjM1LjMgMC0yMDYuOS0yMDYuOSAwIDQuNXpNMjg4IDUxMmMyOS44IDAgNTQuOS0yMC40IDYyLTQ4bC0xMjQgMGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4eiJdfSxFbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kc2hha2Utc2xhc2giLGljb246WzU3Niw1MTIsWzU3NDM5LCJoYW5kc2hha2UtYWx0LXNsYXNoIiwiaGFuZHNoYWtlLXNpbXBsZS1zbGFzaCJdLCJlMDYwIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI4OC0yODggMTQuMi0xNC4yYzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMWwtNTUuOCA2Mi4xLTM0LTM0IDQ0LjMtNDkuMi0zOS43IDBjLTE1LjMgMC0zMC4xIDMuNi00My41IDEwLjRMNDEtMjQuOXpNMCA2OS44TDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMyMi4yIDAgNDMuOC01LjggNjIuOC0xNi40TDAgNjkuOHoiXX0sc0hlPUVtLG5IZT1FbSxvSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm90dGxlLXdhdGVyIixpY29uOlszMjAsNTEyLFtdLCJlNGM1IiwiTTExMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwQzk0LjMgMzIgODAgMTcuNyA4MCAwczE0LjMtMzIgMzItMzJ6TTE2IDE0NGMwLTM1LjMgMjguNy02NCA2NC02NGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDI0LjEtMTMuMyA0NS4xLTMzIDU2IDE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTZzLTEzLjMgNDUuMS0zMyA1NmMxOS43IDEwLjkgMzMgMzEuOSAzMyA1NiAwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjQuMSAxMy4zLTQ1LjEgMzMtNTYtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnMxMy4zLTQ1LjEgMzMtNTZjLTE5LjctMTAuOS0zMy0zMS45LTMzLTU2eiJdfSxsSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS1kMjAiLGljb246WzUxMiw1MTIsW10sImY2Y2YiLCJNMjI0LjQtOC4yYzE5LjYtMTEuMSA0My42LTExLjEgNjMuMSAwbDE5MiAxMDguOGMyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAyMTUuNmMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE5MiAxMDguOGMtMTkuNiAxMS4xLTQzLjYgMTEuMS02My4xIDBMMzIuNCA0MjcuNUMxMi40IDQxNi4xIDAgMzk0LjggMCAzNzEuOEwwIDE1Ni4yYzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN0wyMjQuNC04LjJ6bTUyIDczLjJDMjY3IDQ5LjggMjQ1IDQ5LjggMjM1LjYgNjVsLTc2LjYgMTIzLjctODUuNC00Ni4zLTMuOC0xLjZjLTguOS0yLjctMTguOCAxLjEtMjMuNCA5LjZzLTIuNCAxOC45IDQuNyAyNC44bDMuMyAyLjMgODMuNCA0NS4yLTc0LjYgMTIwLjZDNTUuMyAzNTYuMiA2MSAzNzMgNzUgMzc4LjRsMTYxIDYxLjkgMCAzOS43YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMzkuNyAxNjEtNjEuOWMxNC01LjQgMTkuNy0yMi4yIDExLjgtMzVsLTc0LjctMTIwLjYgODMuNC00NS4yYzkuNy01LjMgMTMuMy0xNy40IDguMS0yNy4xcy0xNy40LTEzLjMtMjcuMS04LjFMMzUzIDE4OC43IDI3Ni40IDY1em0tNDcgMzI5LjlsLTEyMi00Ni45IDU0LjUtODguMSA2Ny41IDEzNXpNNDA0LjYgMzQ4bC0xMjIgNDYuOSA2Ny41LTEzNSA1NC41IDg4LjF6TTMxOS4zIDIzMkwyNTYgMzU4LjYgMTkyLjcgMjMyIDMxOS4zIDIzMnpNMzA4IDE5MmwtMTA0LjEgMCA1Mi04NCA1MiA4NHoiXX0sUG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi16LWEiLGljb246WzUxMiw1MTIsWyJzb3J0LWFscGhhLWRlc2MiLCJzb3J0LWFscGhhLWRvd24tYWx0Il0sImY4ODEiLCJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yODggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyAxNjAgNDQ4IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDM3MC44IDk2IDMyMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQxMi42IDI3My43bDgwIDE2MGM3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC03LjItMTQuMy04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsODAtMTYwYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdzMjMuMiA2LjggMjguNiAxNy43ek0zODQgMzU5LjZsLTIwLjIgNDAuNCA0MC40IDAtMjAuMi00MC40eiJdfSxjSGU9UG0sZEhlPVBtLHBIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicnVzaCIsaWNvbjpbMzg0LDUxMixbXSwiZjU1ZCIsIk0xNjIuNCA2Yy0xLjUtMy42LTUtNi04LjktNmwtMTkgMGMtMy45IDAtNy41IDIuNC04LjkgNkwxMDQuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDY2LjQgNmMtMS41LTMuNi01LTYtOC45LTZMNDggMEMyMS41IDAgMCAyMS41IDAgNDhsMCAyMDggMzg0IDAgMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjMwLjUgMGMtMy45IDAtNy41IDIuNC04LjkgNkwyMDAuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDE2Mi40IDZ6TTAgMzA0bDAgMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMCAwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC02NCA2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtMzg0IDB6TTE5MiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnoiXX0saEhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi13YWxraW5nLWRhc2hlZC1saW5lLWFycm93LXJpZ2h0IixpY29uOls2NDAsNTEyLFtdLCJlNTUzIiwiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNNDMyIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMzg0LTUuMyAzODQgOGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnptMCAxMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTQwOCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTYwOSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdfSxnQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy11cC1zaG9ydC13aWRlIixpY29uOls1NzYsNTEyLFsic29ydC1hbW91bnQtdXAtYWx0Il0sImY4ODUiLCJNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il19LHVIZT1nQixiQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmlwLXZlcnRpY2FsIixpY29uOlszMjAsNTEyLFsiZ3JpZC12ZXJ0aWNhbCJdLCJmNThlIiwiTTEyOCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHptMCAxOTJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4ek0wIDQyNGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEwyMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTE5MiAyMzJsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0zMjAgNDI0YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHoiXX0sZkhlPWJCLG1IZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXItdHVubmVsIixpY29uOls1MTIsNTEyLFtdLCJlNGRlIiwiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0Mi44IDBjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0xMTMuMWMwLTEzLjUgMy4xLTI2LjggOS0zOC45bDM5LjctODAuOGM5LjQtMTkuMSAyOC45LTMxLjMgNTAuMi0zMS4zTDMxNyAyMjRjMjEuMyAwIDQwLjggMTIuMSA1MC4yIDMxLjNMNDA3IDMzNmM1LjkgMTIuMSA5IDI1LjQgOSAzOC45TDQxNiA0ODhjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGw0Mi44IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJDNTEyIDExNC42IDM5Ny40IDAgMjU2IDB6TTM2Mi44IDUxMmMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNGwwLTI0LTE5MiAwIDAgMjRjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGwyMTMuNyAwem0tMTc1LTIzNS41bC0yOS4zIDU5LjUgMTk0LjkgMC0yOS4zLTU5LjVjLTEuMy0yLjctNC4xLTQuNS03LjItNC41TDE5NSAyNzJjLTMgMC01LjggMS43LTcuMiA0LjV6TTE3NiA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xODQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0sZ0hlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNoYXJ0LWNvbHVtbiIsaWNvbjpbNTEyLDUxMixbXSwiZTBlMyIsIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0xNDQgMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTQ0LTY0bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTgwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNTEyIDk2bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il19LGJIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXByaWNvcm4iLGljb246WzU3Niw1MTIsW10sImU4NDgiLCJNMjQwIDMyYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgNjUuMmMxOC44LTEwLjkgNDAuNy0xNy4yIDY0LTE3LjIgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNTE4LjcgNDgwIDQ0OCA0ODBjLTM1LjggMC02OC4yLTE0LjctOTEuNC0zOC40LTI4LjggNDIuNS03Ny40IDcwLjQtMTMyLjYgNzAuNC0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzUzIDAgOTYtNDMgOTYtOTZsMC0xNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjQtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyAzMiAzMiAzMkM3Mi42IDMyIDEwOC44IDUxIDEzMi4yIDgwLjUgMTU4LjYgNTAuNyAxOTcuMSAzMiAyNDAgMzJ6TTQ0OCAyODhhNjQgNjQgMCAxIDAgMCAxMjggNjQgNjQgMCAxIDAgMC0xMjh6Il19LHZIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1hcnJvdy1yaWdodCIsaWNvbjpbNTc2LDUxMixbXSwiZTU4YiIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMuMyAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMTAyLjYgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDMuMyAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ2LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDE0Ni43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43bC01MC43IDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNTEyIDIzNy4zbDAgNTAuNy05NiAwIDAtOTYgNTAuNyAwIDQ1LjMgNDUuM3pNMTUyIDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTIzMiA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0zMDUgMjI1bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXoiXX0sSW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHYiLGljb246WzU3Niw1MTIsWzYzNzE3LCJ0ZWxldmlzaW9uIiwidHYtYWx0Il0sImYyNmMiLCJNNjQgOTZsMCAyNDAgNDQ4IDAgMC0yNDAtNDQ4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNjAgNDQ4bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXX0seUhlPUltLHhIZT1JbSx3SGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2VjdGlvbiIsaWNvbjpbMjU2LDUxMixbXSwiZTQ0NyIsIk0xMTAgMEM0OS4yIDAgMCA0OS4yIDAgMTEwIDAgMTMzLjcgNy42IDE1NS44IDIwLjUgMTc0IDcuNiAxOTIgMCAyMTQuMSAwIDIzOCAwIDI5MS43IDM4LjkgMzM3LjYgOTEuOSAzNDYuNGw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDI1LjQtMjAuNiA0Ni00NiA0NmwtOTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5OCAwYzYwLjcgMCAxMTAtNDkuMiAxMTAtMTEwIDAtMjMuNy03LjYtNDUuOS0yMC41LTY0IDEyLjktMTggMjAuNS00MC4xIDIwLjUtNjQgMC01My44LTM4LjktOTkuNi05MS45LTEwOC41bC02MS43LTEwLjNDODAuMiAxNTEuNiA2NCAxMzIuNCA2NCAxMTAgNjQgODQuNiA4NC42IDY0IDExMCA2NGw5OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzIyNS43IDAgMjA4IDBMMTEwIDB6bTc0LjcgMjk5LjFjLTYuNS0yLjQtMTMuNC00LjMtMjAuNS01LjVsLTYxLjctMTAuM2MtMjIuMi0zLjctMzguNC0yMi45LTM4LjQtNDUuMyAwLTkuMiAyLjctMTcuOCA3LjQtMjUgNi41IDIuNCAxMy40IDQuMyAyMC41IDUuNWw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDkuMi0yLjcgMTcuOC03LjQgMjV6Il19LE1IZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZWFjZSIsaWNvbjpbNTEyLDUxMixbOTc3NF0sImY2N2MiLCJNMjI0IDQ0NS4zbDAtMTIxLjgtOTQuMyA3Ny4xYzI2LjEgMjIuOCA1OC41IDM4LjcgOTQuMyA0NC43ek04OS4yIDM1MS4xTDIyNCAyNDAuOCAyMjQgNjYuN2MtOTAuOCAxNS4yLTE2MCA5NC4yLTE2MCAxODkuMyAwIDM0LjYgOS4yIDY3LjEgMjUuMiA5NS4xem0yOTMuMSA0OS41bC05NC4zLTc3LjEgMCAxMjEuOGMzNS43LTYgNjguMS0yMS45IDk0LjMtNDQuN3ptNDAuNi00OS41YzE2LTI4IDI1LjItNjAuNSAyNS4yLTk1LjEgMC05NS4xLTY5LjItMTc0LjEtMTYwLTE4OS4zbDAgMTc0LjIgMTM0LjggMTEwLjN6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il19LHpIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdGFyIixpY29uOls1NzYsNTEyLFsxMTA4OCw2MTQ0Nl0sImYwMDUiLCJNMzA5LjUtMTguOWMtNC4xLTgtMTIuNC0xMy4xLTIxLjQtMTMuMXMtMTcuMyA1LjEtMjEuNCAxMy4xTDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjg4LjEgNDE3LjYgNDMyLjQgNDkxYzggNC4xIDE3LjcgMy4zIDI1LTJzMTEtMTQuMiA5LjYtMjMuMkw0NDEuNyAzMDUuOSA1NTYuMSAxOTEuNGM2LjQtNi40IDguNi0xNS44IDUuOC0yNC40cy0xMC4xLTE0LjktMTkuMS0xNi4zTDM4MyAxMjUuMyAzMDkuNS0xOC45eiJdfSxrSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmxhZyIsaWNvbjpbNDQ4LDUxMixbMTI3OTg4LDYxNzI1XSwiZjAyNCIsIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjEuNiA2Mi43LTE4LjhjNDEuOS0xMi42IDg3LjEtOC43IDEyNi4yIDEwLjkgNDIuNyAyMS40IDkyLjUgMjQgMTM3LjIgNy4ybDM3LjEtMTMuOWMxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMGwwLTI0Ny43YzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTExLjggNS45Yy00NC45IDIyLjUtOTcuOCAyMi41LTE0Mi44IDAtMzYuNC0xOC4yLTc4LjMtMjEuOC0xMTcuMi0xMC4xTDY0IDU0LjQgNjQgMzJ6Il19LE5tPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyaWFuZ2xlLWV4Y2xhbWF0aW9uIixpY29uOls1MTIsNTEyLFs5ODg4LCJleGNsYW1hdGlvbi10cmlhbmdsZSIsIndhcm5pbmciXSwiZjA3MSIsIk0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43eiJdfSxTSGU9Tm0sQ0hlPU5tLF9IZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2hvb2wtY2lyY2xlLWV4Y2xhbWF0aW9uIixpY29uOls2NDAsNTEyLFtdLCJlNTZjIiwiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LHZCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdyYWR1YXRpb24tY2FwIixpY29uOls1NzYsNTEyLFsxMjc4OTEsIm1vcnRhci1ib2FyZCJdLCJmMTlkIiwiTTQ4IDE5NS44bDIwOS4yIDg2LjFjOS44IDQgMjAuMiA2LjEgMzAuOCA2LjFzMjEtMi4xIDMwLjgtNi4xbDI0Mi40LTk5LjhjOS0zLjcgMTQuOC0xMi40IDE0LjgtMjIuMXMtNS44LTE4LjQtMTQuOC0yMi4xTDMxOC44IDM4LjFDMzA5IDM0LjEgMjk4LjYgMzIgMjg4IDMycy0yMSAyLjEtMzAuOCA2LjFMMTQuOCAxMzcuOUM1LjggMTQxLjYgMCAxNTAuMyAwIDE2MEwwIDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjYwLjJ6bTQ4IDcxLjdMOTYgMzg0YzAgNTMgODYgOTYgMTkyIDk2czE5Mi00MyAxOTItOTZsMC0xMTYuNi0xNDIuOSA1OC45Yy0xNS42IDYuNC0zMi4yIDkuNy00OS4xIDkuN3MtMzMuNS0zLjMtNDkuMS05LjdMOTYgMjY3LjR6Il19LFRIZT12QixMSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RvcmUiLGljb246WzUxMiw1MTIsW10sImY1NGUiLCJNMzAuNyA3Mi4zQzM3LjYgNDguNCA1OS41IDMyIDg0LjQgMzJsMzQ0IDBjMjQuOSAwIDQ2LjggMTYuNCA1My44IDQwLjNsMjMuNCA4MC4yYzEyLjggNDMuNy0yMC4xIDg3LjUtNjUuNiA4Ny41LTI2LjMgMC00OS40LTE0LjktNjAuOC0zNy4xLTExLjYgMjEuOS0zNC42IDM3LjEtNjEuNCAzNy4xLTI2LjYgMC00OS43LTE1LTYxLjMtMzctMTEuNiAyMi0zNC43IDM3LTYxLjMgMzctMjYuOCAwLTQ5LjgtMTUuMS02MS40LTM3LjEtMTEuNCAyMi4xLTM0LjUgMzcuMS02MC44IDM3LjEtNDUuNiAwLTc4LjQtNDMuNy02NS42LTg3LjVMMzAuNyA3Mi4zek05Ni40IDM1MmwzMjAgMCAwLTY2LjRjNy42IDEuNiAxNS41IDIuNCAyMy41IDIuNCAxNC4zIDAgMjgtMi42IDQwLjUtNy4ybDAgMTUxLjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE1MS4yYzEyLjUgNC42IDI2LjEgNy4yIDQwLjUgNy4yIDguMSAwIDE1LjktLjggMjMuNS0yLjRsMCA2Ni40eiJdfSwkSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1hc3Ryb25hdXQiLGljb246WzQ0OCw1MTIsW10sImY0ZmIiLCJNMjI0IDMzNmM3NC42IDAgMTM4LjQtNDYuNCAxNjQtMTEybDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC00IDBDMzYyLjQgMzAuNCAyOTguNi0xNiAyMjQtMTZTODUuNiAzMC40IDYwIDk2bC00IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNCAwYzI1LjYgNjUuNiA4OS40IDExMiAxNjQgMTEyek0yMDggODBsMzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMzIgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnpNMTYgNDg0LjZDMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsNTIuNiAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OCA1Mi42IDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC01OS44LTMxLjktMTEyLjItNzkuNi0xNDEtMzYuNCAyNS41LTgwLjYgNDAuNC0xMjguNCA0MC40cy05Mi0xNC45LTEyOC40LTQwLjRDNDcuOSAzNzIuNCAxNiA0MjQuOCAxNiA0ODQuNnpNMTgzLjMgMTQxLjVjLS45LTMuMy0zLjktNS41LTcuMy01LjVzLTYuNCAyLjItNy4zIDUuNWwtNiAyMS4yLTIxLjIgNmMtMy4zIC45LTUuNSAzLjktNS41IDcuM3MyLjIgNi40IDUuNSA3LjNsMjEuMiA2IDYgMjEuMmMuOSAzLjMgMy45IDUuNSA3LjMgNS41czYuNC0yLjIgNy4zLTUuNWw2LTIxLjIgMjEuMi02YzMuMy0uOSA1LjUtMy45IDUuNS03LjNzLTIuMi02LjQtNS41LTcuM2wtMjEuMi02LTYtMjEuMnpNMTUyIDQ4OGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTIwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXX0sQUhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWZsYWciLGljb246WzY0MCw1MTIsW10sImU0ZDUiLCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yODggMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LHlCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im11Zy1zYXVjZXIiLGljb246WzU3Niw1MTIsWyJjb2ZmZWUiXSwiZjBmNCIsIk02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNTIgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFM1MTguNyAyODggNDQ4IDI4OGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA2NHptNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0bDAgMTI4YzM1LjMgMCA2NC0yOC43IDY0LTY0ek02NCA0NDhsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdfSxESGU9eUIsRUhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxlbW9uIixpY29uOls0NDgsNTEyLFsxMjc4MTldLCJmMDk0IiwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NC02LjYgMC0xMyAxLTE5IDIuOS0yMi41IDctNDguMSAxNC45LTcxIDktNzUuMi0xOS4xLTE1Ni40IDExLTIxMy43IDY4LjNTLTcuMiAyNTAuOCAxMS45IDMyNmM1LjggMjIuOS0yIDQ4LjQtOSA3MS0xLjkgNi0yLjkgMTIuNC0yLjkgMTkgMCAzNS4zIDI4LjcgNjQgNjQgNjQgNi42IDAgMTMtMSAxOS4xLTIuOSAyMi41LTcgNDguMS0xNC45IDcxLTkgNzUuMiAxOS4xIDE1Ni40LTExIDIxMy43LTY4LjNTNDU1LjIgMjYxLjIgNDM2LjEgMTg2Yy01LjgtMjIuOSAyLTQ4LjQgOS03MSAxLjktNiAyLjktMTIuNCAyLjktMTkuMXpNMjIyLjcgMTQzYy01MiAxNS4yLTk2LjUgNTkuNy0xMTEuNyAxMTEuNy0zLjcgMTIuNy0xNy4xIDIwLTI5LjggMTYuM1M2MS4yIDI1NCA2NSAyNDEuM2MxOS44LTY3LjcgNzYuNi0xMjQuNSAxNDQuMy0xNDQuMyAxMi43LTMuNyAyNi4xIDMuNiAyOS44IDE2LjNzLTMuNiAyNi4xLTE2LjMgMjkuOHoiXX0sUEhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcmF2YW4iLGljb246WzY0MCw1MTIsW10sImY4ZmYiLCJNMzIgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjk2LjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThMOTYgNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA5NnpNMzUyIDM1Mmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDgtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0xNjAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMHptNjQgMzM2YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXX0sSUhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InEiLGljb246WzQ0OCw1MTIsWzExM10sIjUxIiwiTTY0IDI1NmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MCAyOC45IDAgNTYtNy43IDc5LjQtMjEuMWwtNzItODYuNGMtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDcwLjkgODUuMWMyMC40LTI2LjggMzIuNS02MC4zIDMyLjUtOTYuNiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFM2NCAxNjcuNiA2NCAyNTZ6TTM0NC45IDQ0NC42QzMxMCA0NjcgMjY4LjUgNDgwIDIyNCA0ODAgMTAwLjMgNDgwIDAgMzc5LjcgMCAyNTZTMTAwLjMgMzIgMjI0IDMyIDQ0OCAxMzIuMyA0NDggMjU2YzAgNTYuMS0yMC42IDEwNy40LTU0LjcgMTQ2LjdsNDcuMyA1Ni44YzExLjMgMTMuNiA5LjUgMzMuOC00LjEgNDUuMXMtMzMuOCA5LjUtNDUuMS00LjFsLTQ2LjYtNTUuOXoiXX0sTkhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImxvY2siLGljb246WzM4NCw1MTIsWzEyODI3NF0sImYwMjMiLCJNMTI4IDk2bDAgNjQgMTI4IDAgMC02NGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHpNNjQgMTYwbDAtNjRDNjQgMjUuMyAxMjEuMy0zMiAxOTItMzJTMzIwIDI1LjMgMzIwIDk2bDAgNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXX0sRkhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhaW50LXJvbGxlciIsaWNvbjpbNTEyLDUxMixbXSwiZjVhYSIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgOTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxOC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTE4LjdjMC00NC4yIDM1LjgtODAgODAtODBsMTYwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDE5MmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXX0seEI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidm9sdW1lLWhpZ2giLGljb246WzY0MCw1MTIsWzEyODI2Niwidm9sdW1lLXVwIl0sImYwMjgiLCJNNTMzLjYgMzIuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzU1Ny41IDExMy44IDU5MiAxODAuOCA1OTIgMjU2cy0zNC41IDE0Mi4yLTg4LjcgMTg2LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNTk4LjUgNDI2LjcgNjQwIDM0Ni4yIDY0MCAyNTZTNTk4LjUgODUuMiA1MzMuNiAzMi41ek00NzMuMSAxMDdjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEM0NzUuMyAxNzAuNyA0OTYgMjEwLjkgNDk2IDI1NnMtMjAuNyA4NS4zLTUzLjIgMTExLjhjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVjNDMuMi0zNS4yIDcwLjktODguOSA3MC45LTE0OXMtMjcuNy0xMTMuOC03MC45LTE0OXptLTYwLjUgNzQuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM5My4xIDIyNy42IDQwMCAyNDEgNDAwIDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQzNC4xIDMxMi45IDQ0OCAyODYuMSA0NDggMjU2cy0xMy45LTU2LjktMzUuNC03NC41ek04MCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMMTI4IDE2MCA4MCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6Il19LE9IZT14QixSSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9sZGVyLXBsdXMiLGljb246WzUxMiw1MTIsW10sImY2NWUiLCJNNTEyIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MHpNMjU2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdfSxCSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWVyY3VyeSIsaWNvbjpbMzg0LDUxMixbOTc5MV0sImYyMjMiLCJNMTE3LTRDMTA2LTE3LjggODUuOC0yMCA3Mi4xLTlzLTE2IDMxLjItNSA0NUM3NC45IDQ1LjcgODMuNyA1NC41IDkzLjUgNjIuMSA0Ni43IDkzLjcgMTYgMTQ3LjMgMTYgMjA4IDE2IDI5NC4zIDc4LjEgMzY2LjEgMTYwIDM4MS4xbDAgMzQuOS0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTM0LjljODEuOS0xNSAxNDQtODYuOCAxNDQtMTczLjEgMC02MC43LTMwLjctMTE0LjMtNzcuNS0xNDUuOSA5LjgtNy43IDE4LjctMTYuNCAyNi40LTI2LjEgMTEuMS0xMy44IDguOC0zMy45LTUtNDVTMjc4LTE3LjggMjY3LTRjLTE3LjYgMjItNDQuNyAzNi03NSAzNlMxMzQuNyAxOCAxMTctNHptNzUgMzI0Yy02MS45IDAtMTEyLTUwLjEtMTEyLTExMlMxMzAuMSA5NiAxOTIgOTYgMzA0IDE0Ni4xIDMwNCAyMDhjMCA2MS44LTUwLjEgMTEyLTExMS45IDExMmwtLjEgMHoiXX0sSEhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFuY2hvciIsaWNvbjpbNTc2LDUxMixbOTg3NV0sImYxM2QiLCJNMjg4IDY0YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgMjU3LjljNjIuOS0xNC4zIDExMC4yLTY5LjcgMTExLjktMTM2LjVsLTE2LjEgMTQuMWMtMTAgOC43LTI1LjEgNy43LTMzLjktMi4zcy03LjctMjUuMSAyLjMtMzMuOWw2NC01NmM5LTcuOSAyMi42LTcuOSAzMS42IDBsNjQgNTZjMTAgOC43IDExIDIzLjkgMi4zIDMzLjlzLTIzLjkgMTEtMzMuOSAyLjNMNDk2IDMwNy45QzQ5My45IDQyMSA0MDEuNiA1MTIgMjg4IDUxMlM4Mi4xIDQyMSA4MCAzMDcuOUw2My44IDMyMi4xYy0xMCA4LjctMjUuMSA3LjctMzMuOS0yLjNzLTcuNy0yNS4xIDIuMy0zMy45bDY0LTU2YzktNy45IDIyLjYtNy45IDMxLjYgMGw2NCA1NmMxMCA4LjcgMTEgMjMuOSAyLjMgMzMuOXMtMjMuOSAxMS0zMy45IDIuM2wtMTYuMS0xNC4xYzEuOCA2Ni44IDQ5LjEgMTIyLjIgMTExLjkgMTM2LjVsMC0yNTcuOWMtMzcuMy0xMy4yLTY0LTQ4LjctNjQtOTAuNXoiXX0sd0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBhcmtpbmciLGljb246WzQ0OCw1MTIsWzEyNzM1OSwicGFya2luZyJdLCJmNTQwIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTE5MiAyNTZsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDggMCAwIDY0em00OCA2NGwtNDggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTg0YzAtMjIuMSAxNy45LTQwIDQwLTQwbDcyIDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6Il19LHFIZT13QixWSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFudWtpYWgiLGljb246WzY0MCw1MTIsWzEyODMzNF0sImY2ZTYiLCJNMzE0LjIgMy4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zem0tMjg4IDQ4QzIxLjEgNjAuMSA4IDg0LjYgOCAxMDQgOCAxMTcuMyAxOC43IDEyOCAzMiAxMjhzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek04OCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzEwMS4xIDYwLjEgODggODQuNiA4OCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNMjE2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M0NTMuMSA2MC4xIDQ0MCA4NC42IDQ0MCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNTg0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNTk3LjEgNjAuMSA1ODQgODQuNiA1ODQgMTA0ek0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzUyIDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3Ni0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDE3NC4zIDAgMTkybDAgOTZjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMCAwIDY0LTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTY0IDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwLTE3NnoiXX0sWDU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm90YXRlLWxlZnQiLGljb246WzUxMiw1MTIsWyJyb3RhdGUtYmFjayIsInJvdGF0ZS1iYWNrd2FyZCIsInVuZG8tYWx0Il0sImYyZWEiLCJNMjQgMTkybDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDYuNy00Ni43Yzc1LjMtNTguNiAxODQuMy01My4zIDI1My41IDE1LjkgNzUgNzUgNzUgMTk2LjUgMCAyNzEuNXMtMTk2LjUgNzUtMjcxLjUgMGMtMTAuMi0xMC4yLTE5LTIxLjMtMjYuNC0zMy05LjUtMTQuOS0yOS4zLTE5LjMtNDQuMi05LjhzLTE5LjMgMjkuMy05LjggNDQuMkM0OS43IDQwOC43IDYxLjQgNDIzLjUgNzUgNDM3IDE3NSA1MzcgMzM3IDUzNyA0MzcgNDM3UzUzNyAxNzUgNDM3IDc1QzM0Mi44LTE5LjMgMTkzLjMtMjQuNyA5Mi43IDU4LjhMNDEgN0MzNC4xIC4yIDIzLjgtMS45IDE0LjggMS44UzAgMTQuMyAwIDI0TDAgMTY4YzAgMTMuMyAxMC43IDI0IDI0IDI0eiJdfSxqSGU9WDUsVUhlPVg1LFdIZT1YNSxNQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFkaW5nIixpY29uOls0NDgsNTEyLFsiaGVhZGVyIl0sImYxZGMiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMTEyIDIyNCAwIDAtMTEyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDMyMCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNDQtMjI0IDAgMCAxNDQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMzIwLTE2IDBDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXX0sR0hlPU1CLFlIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjcm9zc2hhaXJzIixpY29uOls1NzYsNTEyLFtdLCJmMDViIiwiTTI4OC0xNmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE4LjNjOTguMSAxNCAxNzUuNyA5MS42IDE4OS43IDE4OS43bDE4LjMgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguMyAwYy0xNCA5OC4xLTkxLjYgMTc1LjctMTg5LjcgMTg5LjdsMCAxOC4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguM0MxNTcuOSA0NjMuNyA4MC4zIDM4Ni4xIDY2LjMgMjg4TDQ4IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOC4zIDBDODAuMyAxMjUuOSAxNTcuOSA0OC4zIDI1NiAzNC4zTDI1NiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTMxLjIgMjg4YzEyLjcgNjIuNyA2Mi4xIDExMi4xIDEyNC44IDEyNC44bDAtMTIuOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTIuOGM2Mi43LTEyLjcgMTEyLjEtNjIuMSAxMjQuOC0xMjQuOEw0MzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyLjggMEM0MzIuMSAxNjEuMyAzODIuNyAxMTEuOSAzMjAgOTkuMmwwIDEyLjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMi44QzE5My4zIDExMS45IDE0My45IDE2MS4zIDEzMS4yIDIyNGwxMi44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyLjggMHpNMjg4IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il19LFpIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtbm9kZXMiLGljb246WzUxMiw1MTIsW10sImU0ZTIiLCJNNDE4LjQgMTU3LjljMzUuMy04LjMgNjEuNi00MCA2MS42LTc3LjkgMC00NC4yLTM1LjgtODAtODAtODAtNDMuNCAwLTc4LjcgMzQuNS04MCA3Ny41TDEzNi4yIDE1MS4xQzEyMS43IDEzNi44IDEwMS45IDEyOCA4MCAxMjggMzUuOCAxMjggMCAxNjMuOCAwIDIwOHMzNS44IDgwIDgwIDgwYzEyLjIgMCAyMy44LTIuNyAzNC4xLTcuNkwyNTkuNyA0MDcuOGMtMi40IDcuNi0zLjcgMTUuOC0zLjcgMjQuMiAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMjcuNy0xNC01Mi4xLTM1LjQtNjYuNGwzNy44LTIwNy43ek0xNTYuMyAyMzIuMmMyLjItNi45IDMuNS0xNC4yIDMuNy0yMS43bDE4My44LTczLjVjMy42IDMuNSA3LjQgNi43IDExLjYgOS41TDMxNy42IDM1NC4xYy01LjUgMS4zLTEwLjggMy4xLTE1LjggNS41TDE1Ni4zIDIzMi4yeiJdfSxYSGU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZG93LXJlc3RvcmUiLGljb246WzU3Niw1MTIsW10sImYyZDIiLCJNNTEyIDk2TDE2MCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDggMCAwLTY0IDQ4IDAgMC0xOTJ6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjR6bTY0IDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il19LEtIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyIixpY29uOlszMjAsNTEyLFsxMTRdLCI1MiIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggOTUuMyAwIDEwMi40IDE0Ni40YzEwLjEgMTQuNSAzMC4xIDE4IDQ0LjYgNy45czE4LTMwLjEgNy45LTQ0LjZMMjMwLjEgMzA5LjVDMjgyLjggMjg4LjEgMzIwIDIzNi40IDMyMCAxNzYgMzIwIDk2LjUgMjU1LjUgMzIgMTc2IDMyTDMyIDMyek0xNzYgMjU2bC0xMTIgMCAwLTE2MCAxMTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHoiXX0sUUhlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbHRlci1jaXJjbGUteG1hcmsiLGljb246WzU3Niw1MTIsW10sImUxN2IiLCJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMi41IDIuNSA1LjMgNC41IDguMyA2LTIxLjItMzAuOS0zMy42LTY4LjMtMzMuNi0xMDguNiAwLTk5LjQgNzUuNS0xODEuMSAxNzIuMy0xOTFsOTAuNC05MC40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDY0IDQ4MCA2NEwzMiA2NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il19LEpIZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnb3B1cmFtIixpY29uOls1MTIsNTEyLFtdLCJmNjY0IiwiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA0MCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOCA0OCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOCA0MCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgODBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTQ4IDAgMC0yMjQtMzIgMCAwLTEyOC00OCAwIDAgMTI4IDMyIDAgMCAyMjQtMjI0IDAgMC0yMjQgMzIgMCAwLTEyOC00OCAwIDAgMTI4LTMyIDAgMCAyMjQtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OEw5NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjU2IDIwOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6TTIwOCA0MDBsMCA2NCA5NiAwIDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTI1NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMiA2NCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il19LGVxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWFydC1jaXJjbGUtbWludXMiLGljb246WzU3Niw1MTIsW10sImU0ZmYiLCJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnoiXX0sdHFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YXItb2YtbGlmZSIsaWNvbjpbNTEyLDUxMixbXSwiZjYyMSIsIk0yMDguNSAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQwLjkgMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43bC0xMjIgNzAuNCAxMjIgNzAuNGMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43bC0xNiAyNy43Yy04LjggMTUuMy0yOC40IDIwLjYtNDMuNyAxMS43bC0xMjItNzAuNCAwIDE0MC45YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE0MC45LTEyMiA3MC40Yy0xNS4zIDguOC0zNC45IDMuNi00My43LTExLjdsLTE2LTI3LjdjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN2wxMjItNzAuNC0xMjItNzAuNGMtMTUuMy04LjgtMjAuNS0yOC40LTExLjctNDMuN2wxNi0yNy43YzguOC0xNS4zIDI4LjQtMjAuNSA0My43LTExLjdsMTIyIDcwLjQgMC0xNDAuOXoiXX0sekI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVzaW5lc3MtdGltZSIsaWNvbjpbNjQwLDUxMixbImJyaWVmY2FzZS1jbG9jayJdLCJmNjRhIiwiTTI2NCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDMwNSAwYzMzLjgtMjkuOSA3OC4zLTQ4IDEyNy00OCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyNjQgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDI5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTMuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0xNi42IDIuMS0zMi43IDYtNDhsLTIyIDB6bTM1MiA0OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek00OTYgMzIwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sYXFlPXpCLGlxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlLWV4dGluZ3Vpc2hlciIsaWNvbjpbNTEyLDUxMixbMTI5NTE5XSwiZjEzNCIsIk01MTIgMzJjMC05LjYtNC4zLTE4LjctMTEuNy0yNC43UzQ4My4xLTEuMyA0NzMuNyAuNmwtMTYwIDMyQzMwMS41IDM1LjEgMjkyIDQ0LjMgMjg5IDU2bC02NSAwIDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjguNGMtNTUuMyAxMi4zLTEwMS4zIDQ5LjUtMTI1LjUgOTkuMS01LjggMTEuOS0uOSAyNi4zIDExLjEgMzIuMXMyNi4zIC45IDMyLjEtMTEuMUM2MiAxNDYuOSA5MS44IDEyMS4xIDEyOCAxMTBsMCAyOC44Yy0zNy44IDE4LTY0IDU2LjUtNjQgMTAxLjJsMCAxMjggMjI0IDAgMC0xMjhjMC00NC43LTI2LjItODMuMi02NC0xMDEuMmwwLTM0LjggNjUgMGMzIDExLjcgMTIuNSAyMC45IDI0LjcgMjMuNGwxNjAgMzJjOS40IDEuOSAxOS4xLS42IDI2LjYtNi42UzUxMiAxMzcuNiA1MTIgMTI4bDAtOTZ6TTI4OCA0NDhsMC0zMi0yMjQgMCAwIDMyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDk2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6Il19LGtCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tbG9uZyIsaWNvbjpbMzIwLDUxMixbImxvbmctYXJyb3ctZG93biJdLCJmMTc1IiwiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDQzNC43IDE5MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzEyOC0xNy43IDEyOCAwbDAgNDM0LjctNzMuNC03My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4eiJdfSxycWU9a0Isc3FlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVzZXItbWludXMiLGljb246WzY0MCw1MTIsW10sImY1MDMiLCJNMjg1LjcgMzA0Yzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc3LjcgNTEyQzYxLjMgNTEyIDQ4IDQ5OC43IDQ4IDQ4Mi4zIDQ4IDM4My44IDEyNy44IDMwNCAyMjYuMyAzMDRsNTkuNCAwek0yNTYgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptMzQ0LTk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNDQgMHoiXX0sbnFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWNoZWNrIixpY29uOls1MTIsNTEyLFtdLCJmNTNjIiwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTk2IDMxMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNC0xMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI3MiAweiJdfSxTQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1sYXB0b3AiLGljb246WzY0MCw1MTIsWyJsYXB0b3AtaG91c2UiXSwiZTA2NiIsIk00NDggMjQwbDE5LjkgMGMxNS41IDAgMjguMS0xMi42IDI4LjEtMjguMSAwLTcuNi0zLjEtMTQuOS04LjYtMjAuMkwyODMuNS00LjlDMjc2LjEtMTIgMjY2LjMtMTYgMjU2LTE2cy0yMC4xIDQtMjcuNSAxMS4xTDI0LjYgMTkxLjdDMTkuMSAxOTcgMTYgMjA0LjMgMTYgMjExLjkgMTYgMjI3LjQgMjguNiAyNDAgNDQuMSAyNDBsMTkuOSAwIDAgMTQ0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDg1LjcgMGM3LjQtNi42IDE2LjQtMTEuNCAyNi4zLTE0bDAtMTMwYzAtNS41IC43LTEwLjkgMi0xNmwtMTAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjQgMTQ0IDB6TTM1MiAzNTJsMTYwIDAgMCAxMjgtMTYwIDAgMC0xMjh6bS02NC0zMmwwIDE2MC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCAyNi41IDIxLjUgNDggNDggNDhsMjg4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il19LG9xZT1TQixscWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG93bmxvYWQiLGljb246WzQ0OCw1MTIsW10sImYwMTkiLCJNMjU2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjEwLjctNDEuNC00MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyNTYgMjQyLjcgMjU2IDMyek02NCAzMjBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMmMwLTM1LjMtMjguNy02NC02NC02NGwtNDYuOSAwLTU2LjYgNTYuNmMtMzEuMiAzMS4yLTgxLjkgMzEuMi0xMTMuMSAwTDExMC45IDMyMCA2NCAzMjB6bTMwNCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LGNxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYWdpdHRhcml1cyIsaWNvbjpbNDQ4LDUxMixbXSwiZTg0ZCIsIk00MTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04Mi44LTE0Ni44IDE0Ni44IDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuMnMtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMzMzLjMgNTQuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4yIDBzLTEyLjUtMzIuOCAwLTQ1LjJMMTQ2LjggMjg4IDEwNS40IDI0Ni42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuMnMzMi44LTEyLjUgNDUuMiAwTDE5MiAyNDIuOCAzMzguOCA5NiAyNTYgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDB6Il19LGRxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3VjaCIsaWNvbjpbNjQwLDUxMixbXSwiZjRiOCIsIk0xNDQgMjcyQzE0NCAyMjQuNyAxMDkuOCAxODUuNCA2NC44IDE3Ny41IDcyIDExMy42IDEyNi4yIDY0IDE5MiA2NGwyNTYgMGM2NS44IDAgMTIwIDQ5LjYgMTI3LjIgMTEzLjUtNDUgOC03OS4yIDQ3LjItNzkuMiA5NC41bDAgMzItMzUyIDAgMC0zMnpNMCAzODRMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDQ0OCAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdfSxwcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9hZC1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJlNTY3IiwiTTI1NiAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwzMy40IDQyMC41QzI1LjkgNDUwLjcgNDguOCA0ODAgODAgNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiA2LjEgMCAxMS44IDEuNyAxNi43IDQuNyAyLjgtMjMuOSAxNC4zLTQ1LjEgMzEuNC02MC4zbDAtMjQuNGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2LjIgMCAxMi40IC40IDE4LjQgMS4zTDQ1OC41IDgwLjZDNDUxLjQgNTIuMSA0MjUuOCAzMiAzOTYuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xNzYgODAuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMzUyIDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXX0sQ0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2Npc3NvcnMiLGljb246WzUxMiw1MTIsWzk5ODQsOTk4Niw5OTg4LCJjdXQiXSwiZjBjNCIsIk0xOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41LTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyczUwLjEgMTEyIDExMiAxMTIgMTEyLTUwLjEgMTEyLTExMmMwLTE0LjMtMi43LTI3LjktNy41LTQwLjVMNDk5LjIgNzYuOGM3LjEtNy4xIDcuMS0xOC41IDAtMjUuNi0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MiAyMTYuNSAxNTIuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNSAwLTYxLjktNTAuMS0xMTItMTEyLTExMlMwIDUwLjEgMCAxMTIgNTAuMSAyMjQgMTEyIDIyNGMxNC4zIDAgMjcuOS0yLjcgNDAuNS03LjVMMTkyIDI1NnptOTcuOSA5Ny45TDM5Ni44IDQ2MC44YzI4LjMgMjguMyA3NC4xIDI4LjMgMTAyLjQgMCA3LjEtNy4xIDcuMS0xOC41IDAtMjUuNmwtMTQ1LjMtMTQ1LjMtNjQgNjR6TTY0IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00OCAyNDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdfSxocWU9Q0IsdWc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVnIixpY29uOls1NzYsNTEyLFtdLCJmMTg4IiwiTTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40bC0xMzUuMSAwYy0xNS43IDAtMjguNC0xMi43LTI4LjQtMjguNGwwLTMuNnptMzQ1LjYgMTIuOGMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDIuNi0uMSA1LjMtLjIgNy45bDgzLjQgNjIuNWMxNC4xIDEwLjYgMTcgMzAuNyA2LjQgNDQuOHMtMzAuNyAxNy00NC44IDYuNGwtNjMuMS00Ny4zYy0yMy4yIDQ0LjItNjYuNSA3Ni4yLTExNy43IDgzLjlMMzEyIDI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIzMC4yYy01MS4yLTcuNy05NC41LTM5LjctMTE3LjctODMuOUw4My4yIDQ3My42Yy0xNC4xIDEwLjYtMzQuMiA3LjctNDQuOC02LjRzLTcuNy0zNC4yIDYuNC00NC44bDgzLjQtNjIuNWMtLjEtMi42LS4yLTUuMi0uMi03LjlsMC0zMi05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk4LjggMGMyLjUtMTAuNCA2LjUtMjAuMiAxMS44LTI5LjFMNDQuOCAxNTMuNmMtMTQuMS0xMC42LTE3LTMwLjctNi40LTQ0LjhzMzAuNy0xNyA0NC44LTYuNEwxOTIgMTg0YzEyLjMtNS4xIDI1LjgtOCA0MC04bDExMiAwYzE0LjIgMCAyNy43IDIuOCA0MCA4bDEwOC44LTgxLjZjMTQuMS0xMC42IDM0LjItNy43IDQ0LjggNi40eiJdfSxfQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQiLGljb246WzUxMiw1MTIsWyJzaWduLW91dCJdLCJmMDhiIiwiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il19LHVxZT1fQixmcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1ob2xkaW5nLWhhbmQiLGljb246WzU3Niw1MTIsW10sImU0ZjciLCJNNDY2LjggMTg2LjVsNDIuNS00Mi41IDM0LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDIyMy42IDE2Yy0yOSAwLTU3LjMgOS4zLTgwLjcgMjYuNUwxNi4zIDEzNS44Yy0xNy44IDEzLjEtMjEuNiAzOC4xLTguNSA1NS45czM4LjEgMjEuNiA1NS45IDguNUwxODMuNCAxMTIgMjk2IDExMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNTIuMiAwYzMzLjkgMCA2Ni41LTEzLjUgOTAuNS0zNy41em0tMzU3LjUgMTM5TDY2LjcgMzY4IDMyIDM2OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQwMCAyODAgNDAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdfSxtcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Ryb29wd2FmZWwiLGljb246WzUxMiw1MTIsW10sImY1NTEiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzEyLjYgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjU2IDk3LjYgMjIyLjEgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzMy45IDMzLjktNDUuMyA0NS4zLTU2LjYtNTYuNmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw1Ni42IDU2LjYtNDUuMyA0NS4zLTMzLjktMzMuOWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSAzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zMy45IDMzLjktNDUuMy00NS4zIDU2LjYtNTYuNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC01Ni42IDU2LjYtNDUuMy00NS4zIDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpNMTQyLjkgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptNjcuOSA2Ny45bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3pNMjc4LjYgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptMjIuNi02Ny45bC00NS4zIDQ1LjMtNDUuMy00NS4zIDQ1LjMtNDUuMyA0NS4zIDQ1LjN6Il19LGdxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGlsZCIsaWNvbjpbMzIwLDUxMixbXSwiZjFhZSIsIk05NiA2NEE2NCA2NCAwIDEgMSAyMjQgNjQgNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDgwIDI4Ny44IDU5LjEgMzIxYy05LjQgMTUtMjkuMiAxOS40LTQ0LjEgMTBTLTQuNSAzMDEuOSA0LjkgMjg3bDM5LjktNjMuM0M2OS43IDE4NCAxMTMuMiAxNjAgMTYwIDE2MHM5MC4zIDI0IDExNS4yIDYzLjZMMzE1LjEgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwTDI0MCAyODcuOCAyNDAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHoiXX0sYnFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImljZS1jcmVhbSIsaWNvbjpbMzg0LDUxMixbMTI3ODQ4XSwiZjgxMCIsIk0zMzUuMSAxNjBjLjYtNS4zIC45LTEwLjYgLjktMTYgMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRTNDggNjQuNSA0OCAxNDRjMCA1LjQgLjMgMTAuNyAuOSAxNmwtLjkgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyODggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtLjkgMHpNNjQgMzA0TDE2OS4yIDUyOS41YzQuMSA4LjggMTMgMTQuNSAyMi44IDE0LjVzMTguNi01LjcgMjIuOC0xNC41TDMyMCAzMDQgNjQgMzA0eiJdfSxUQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wdXRlci1tb3VzZSIsaWNvbjpbMzg0LDUxMixbMTI4NDMzLCJtb3VzZSJdLCJmOGNjIiwiTTAgMTkybDE2OCAwIDAtMTkyLTggMEM3MS42IDAgMCA3MS42IDAgMTYwbDAgMzJ6bTAgNDhMMCAzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBsNjQgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTExMi0zODQgMHptMzg0LTQ4bDAtMzJDMzg0IDcxLjYgMzEyLjQgMCAyMjQgMGwtOCAwIDAgMTkyIDE2OCAweiJdfSx2cWU9VEIseXFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhdWNldCIsaWNvbjpbNTEyLDUxMixbXSwiZTAwNSIsIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNjQgMTguNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDIyLjYgMjIuNiAzMiAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwIDAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzYuMSAwYy0yMC4yIDI5LTUzLjkgNDgtOTEuOSA0OHMtNzEuNy0xOS05MS45LTQ4TDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDIyLjYtMjIuNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsMTguNyAwIDAtNjQtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA2NCA5NiA2NGw5NiAweiJdfSx4cWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXdhcmQiLGljb246WzQ0OCw1MTIsW10sImY1NTkiLCJNMjQ1LjktMjUuOWMtMTMuNC04LjItMzAuMy04LjItNDMuNyAwLTI0LjQgMTQuOS0zOS41IDE4LjktNjguMSAxOC4zLTE1LjctLjQtMzAuMyA4LjEtMzcuOSAyMS45LTEzLjcgMjUuMS0yNC44IDM2LjItNDkuOSA0OS45LTEzLjggNy41LTIyLjIgMjIuMi0yMS45IDM3LjkgLjcgMjguNi0zLjQgNDMuNy0xOC4zIDY4LjEtOC4yIDEzLjQtOC4yIDMwLjMgMCA0My43IDE0LjkgMjQuNCAxOC45IDM5LjUgMTguMyA2OC4xLS40IDE1LjcgOC4xIDMwLjMgMjEuOSAzNy45IDIyLjEgMTIuMSAzMy4zIDIyLjEgNDUuMSA0MS41TDQyLjcgNDU4LjVjLTUuOSAxMS45LTEuMSAyNi4zIDEwLjcgMzIuMmw4NiA0M2MxMS41IDUuNyAyNS41IDEuNCAzMS43LTkuOGw1Mi44LTk1LjEgNTIuOCA5NS4xYzYuMiAxMS4yIDIwLjIgMTUuNiAzMS43IDkuOGw4Ni00M2MxMS45LTUuOSAxNi43LTIwLjMgMTAuNy0zMi4ybC00OC42LTk3LjJjMTEuNy0xOS40IDIzLTI5LjQgNDUuMS00MS41IDEzLjgtNy41IDIyLjItMjIuMiAyMS45LTM3LjktLjctMjguNiAzLjQtNDMuNyAxOC4zLTY4LjEgOC4yLTEzLjQgOC4yLTMwLjMgMC00My43LTE0LjktMjQuNC0xOC45LTM5LjUtMTguMy02OC4xIC40LTE1LjctOC4xLTMwLjMtMjEuOS0zNy45LTI1LjEtMTMuNy0zNi4yLTI0LjgtNDkuOS00OS45LTcuNS0xMy44LTIyLjItMjIuMi0zNy45LTIxLjktMjguNiAuNy00My43LTMuNC02OC4xLTE4LjN6TTIyNCA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXX0sd3FlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1kcm93bmluZyIsaWNvbjpbNjQwLDUxMixbXSwiZTU0NSIsIk0yNjQgODhhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMzMuOSA2NS42YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMmwxMC45IDMyLjhjOS40IDI4LjMgMzMuMiA0OS41IDYyLjUgNTUuNiA1LjYgMS4yIDExLjMgMS44IDE3LjEgMS44bDg4IDBjMTcuMiAwIDM0LjMtMi44IDUwLjYtOC4ybDExNC40LTM4LjFjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMNDIzLjcgMjI4LjVjLTguNCAyLjgtMTcgNS4xLTI1LjcgNi45bC0yNi41IDg4LjNjLTYuMSAzLjQtMTIuMSA3LjMtMTcuOSAxMS43LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI2LjItMTkuNy01Ni45LTMwLjItODcuOC0zMS4zbDIwLjItNjcuMmMtNTEuNS0xMC43LTkzLjUtNDguMS0xMTAuMi05OGwtMTAuOS0zMi44Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjV6TTQwMy40IDQxMi4xQzM3OS4xIDQzMC4zIDM1MS4xIDQ0OCAzMjAgNDQ4cy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sTXFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhbWVyYS1yb3RhdGUiLGljb246WzUxMiw1MTIsW10sImUwZDgiLCJNMTM4LjcgOTZsMTAuNC0zMS4yQzE1NS42IDQ1LjIgMTczLjkgMzIgMTk0LjYgMzJsMTIyLjggMGMyMC43IDAgMzkgMTMuMiA0NS41IDMyLjhMMzczLjMgOTYgNDQ4IDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsNzQuNyAwek05NiAzMDUuOWMwIDMuOSAxLjQgNy43IDQgMTAuNmw0OCA1NGM2LjQgNy4yIDE3LjYgNy4yIDIzLjkgMGw0OC01NGMyLjYtMi45IDQtNi43IDQtMTAuNmwwLTEuOWMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjMC0zOS44IDMyLjItNzIgNzItNzIgNC40IDAgOC43IC40IDEyLjkgMS4ybDM0LjktMzkuM2MtMTQuNi02LjQtMzAuOC05LjktNDcuOC05LjktNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDEuOXptMTk2LTQ2LjVjLTIuNiAyLjktNCA2LjctNCAxMC42bDAgMS45YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzAgMzkuOC0zMi4yIDcyLTcyIDcyLTQuNCAwLTguNy0uNC0xMi45LTEuMmwtMzQuOSAzOS4zYzE0LjcgNi40IDMwLjggOS45IDQ3LjggOS45IDY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMS45YzAtMy45LTEuNC03LjctNC0xMC42bC00OC01NGMtNi40LTcuMi0xNy42LTcuMi0yMy45IDBsLTQ4IDU0eiJdfSxMQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4taGVhcnRzIixpY29uOls1MTIsNTEyLFsxMjg1MjUsImdyaW4taGVhcnRzIl0sImY1ODQiLCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2IDAtMjMuMy0zLjEtNDUuOS04LjktNjcuMyA1LjUtMTMuNSA4LjktMjguNCA4LjktNDQuNyAwLTUzLTQzLTk2LTk2LTk2bC0yLjkgMGMtMi41IDAtNSAuMS03LjQgLjMtNDIuMS0zMC40LTkzLjgtNDguMy0xNDkuNy00OC4zUzE0OC40IDE3LjkgMTA2LjMgNDguM2MtMi41LS4yLTQuOS0uMy03LjQtLjNMOTYgNDhjLTUzIDAtOTYgNDMtOTYgOTYgMCAxNi4zIDMuNSAzMS4yIDguOSA0NC43LTUuOCAyMS40LTguOSA0NC04LjkgNjcuMyAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2ek0zODYuNyAzMjQuOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgNDA0LjIgMTA1LjcgMzQyLjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMzIyLjkgOTZjMTMuNSAwIDI2LjUgNS40IDM2IDE0LjlsOS4xIDkuMSA5LjEtOS4xYzkuNS05LjUgMjIuNS0xNC45IDM2LTE0LjlsMi45IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA1My40LTY2LjkgOTUuNy04OSAxMDguMi00LjQgMi41LTkuNiAyLjUtMTQgMC0yMi4xLTEyLjUtODktNTQuOC04OS0xMDguMiAwLTI2LjUgMjEuNS00OCA0OC00OGwyLjkgMHptLTE4OCAxNC45bDkuMSA5LjEgOS4xLTkuMWM5LjUtOS41IDIyLjUtMTQuOSAzNi0xNC45bDIuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNTMuNC02Ni45IDk1LjctODkgMTA4LjItNC40IDIuNS05LjYgMi41LTE0IDAtMjIuMS0xMi41LTg5LTU0LjgtODktMTA4LjIgMC0yNi41IDIxLjUtNDggNDgtNDhsMi45IDBjMTMuNSAwIDI2LjUgNS40IDM2IDE0Ljl6Il19LHpxZT1MQixrcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1mcmFnbWVudCIsaWNvbjpbMzg0LDUxMixbXSwiZTY5NyIsIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI0MCAxMjggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOCAxMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2ek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAweiJdfSxTcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLW1pbGl0YXJ5LXJpZmxlIixpY29uOls0NDgsNTEyLFtdLCJlNTRiIiwiTTEyOCAzOWMwLTEzIDEwLTIzLjggMjIuOS0yNC45TDMwMi43IDEuNEMzMTIgLjcgMzIwIDggMzIwIDE3LjRMMzIwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNkwxNTMgNjRjLTEzLjggMC0yNS0xMS4yLTI1LTI1em0xNy42IDU3bDE1Ni44IDBjMSA1LjIgMS42IDEwLjUgMS42IDE2IDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtNS41IC42LTEwLjggMS42LTE2em0yMjggMzY0LjNMMzIwIDM2OS43IDMyMCA0ODBjMCAxLjMtLjEgMi41LS4yIDMuOEwxNDUuNSAyMzQuOWMxNi42LTcuMSAzNC42LTEwLjkgNTMuMy0xMC45bDUwLjQgMGMxNS45IDAgMzEuMyAyLjggNDUuOCA3LjlMMzg5LjkgNjcuN2MtNy43LTQuNC0xMC4zLTE0LjItNS45LTIxLjlzMTQuMi0xMC4zIDIxLjktNS45bDI3LjcgMTZjNy43IDQuNCAxMC4zIDE0LjIgNS45IDIxLjlsLTU1LjUgOTYuMSAxLjYgLjljMTUuMyA4LjggMjAuNiAyOC40IDExLjcgNDMuN0wzNjAuNyAyODJjMiAyLjggMy45IDUuOCA1LjcgOC44bDc2LjEgMTI4LjhjMTEuMiAxOSA0LjkgNDMuNS0xNC4xIDU0LjhzLTQzLjUgNC45LTU0LjgtMTQuMXpNMjg4IDUxMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTEwLjMtNTMuNiA5MC42Yy0xMS4yIDE5LTM1LjggMjUuMy01NC44IDE0LjFTLTUuNyA0MzguNyA1LjYgNDE5LjdMODEuNyAyOTAuOGM5LjQtMTUuOCAyMS43LTI5LjMgMzYtNDBMMjk5LjEgNTEwYy0zLjUgMS4zLTcuMiAyLTExLjEgMnpNMjY0IDMyMGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il19LENxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b2dnbGUtb24iLGljb246WzU3Niw1MTIsW10sImYyMDUiLCJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyUzQ5MCA2NCAzODQgNjRMMTkyIDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il19LF9xZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsdW5ncy12aXJ1cyIsaWNvbjpbNTc2LDUxMixbXSwiZTA2NyIsIk0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNTEuM2M5LjYtNC44IDIwLjUtNy41IDMyLTcuNXMyMi40IDIuNyAzMiA3LjVMMzIwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek00NTAuMSA0NTFjOCAxOC4zIDguMSAzOS4yIC4yIDU3LjUgMTAuMiAyLjMgMjAuNiAzLjUgMzEuMiAzLjUgNTIuMiAwIDk0LjUtNDIuMyA5NC41LTk0LjVsMC02LjJjMC0xMTEuMS0zNi43LTIxOS0xMDQuNC0zMDdMNDI4LjkgNDguN2MtOC4xLTEwLjYtMjAuNy0xNi43LTM0LTE2LjctMjMuNyAwLTQyLjkgMTkuMi00Mi45IDQyLjlsMCAxMzkuOWMxLjIgMi4yIDIuMiA0LjYgMy4xIDYuOSAyNi40LTExLjYgNTguMy02LjYgNzkuOSAxNXMyNi42IDUzLjYgMTUgNzkuOUM0NzcgMzI3LjIgNDk2IDM1My4zIDQ5NiAzODMuOHMtMTkgNTYuNy00NS45IDY3LjF6TTIyMC45IDIyMS44Yy45LTIuNCAyLTQuNyAzLjEtNi45bDAtMTM4LjVjMC0yNC41LTE5LjktNDQuNC00NC40LTQ0LjQtMTIuNSAwLTI0LjQgNS4zLTMyLjggMTQuNWwtMjYuNCAyOUM0Mi45IDE2MC44IDAgMjcxLjggMCAzODdsMCAzMC41YzAgNTIuMiA0Mi4zIDk0LjUgOTQuNSA5NC41IDEwLjUgMCAyMS0xLjIgMzEuMi0zLjUtNy45LTE4LjMtNy44LTM5LjMgLjItNTcuNS0yNi45LTEwLjQtNDUuOS0zNi42LTQ1LjktNjcuMXMxOS01Ni43IDQ1LjktNjcuMWMtMTEuNi0yNi40LTYuNi01OC4zIDE1LTc5LjlzNTMuNi0yNi42IDc5LjktMTV6TTE1MiA0MDhjMjguOCAwIDQzLjIgMzQuOCAyMi45IDU1LjItOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwYzIwLjQtMjAuNCA1NS4yLTUuOSA1NS4yIDIyLjkgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTI4LjggMzQuOC00My4yIDU1LjItMjIuOSA5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjljLTIwLjQtMjAuNC01LjktNTUuMiAyMi45LTU1LjIgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTI4LjggMC00My4yLTM0LjgtMjIuOS01NS4yIDkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTIwLjQgMjAuNC01NS4yIDUuOS01NS4yLTIyLjkgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCAyOC44LTM0LjggNDMuMi01NS4yIDIyLjktOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWMyMC40IDIwLjQgNS45IDU1LjItMjIuOSA1NS4yLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTEwNC04MGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LEZtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCIsaWNvbjpbNTEyLDUxMixbMTI3OTU1LCJwaW5nLXBvbmctcGFkZGxlLWJhbGwiLCJ0YWJsZS10ZW5uaXMiXSwiZjQ1ZCIsIk05NyAxMjdsNjcuNC02Ny40YzM4LjItMzguMiA5MC01OS42IDE0NC01OS42IDExMi41IDAgMjAzLjcgOTEuMiAyMDMuNyAyMDMuNiAwIDQ2LjQtMTUuOCA5MS4xLTQ0LjUgMTI3LTIzLjYtMTYuOC01Mi40LTI2LjctODMuNS0yNi43LTMxLjEgMC01OS45IDkuOS04My40IDI2LjZMOTcgMTI3ek0yNDAgNDQ4YzAgOS43IDEgMTkuMSAyLjggMjguMi0xOS44LTUuMi0zOC0xNS41LTUyLjctMzAuMi0xMi4yLTEyLjItMzEuOS0xMi4yLTQ0LjEgMEw5Ni42IDQ5NS40Yy0xMC42IDEwLjYtMjUgMTYuNi00MCAxNi42LTMxLjIgMC01Ni42LTI1LjMtNTYuNi01Ni42IDAtMTUgNi0yOS40IDE2LjYtNDBsNDkuNC00OS40YzEyLjItMTIuMiAxMi4yLTMxLjkgMC00NC4xLTIxLjctMjEuNy0zMy45LTUxLjItMzMuOS04MS45IDAtMjkuNCAxMS4xLTU3LjYgMzEuMS03OUwyNjYuNiAzNjQuNkMyNDkuOSAzODguMSAyNDAgNDE2LjkgMjQwIDQ0OHptMTQ0LTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdfSxUcWU9Rm0sTHFlPUZtLCRxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3hlcy1wYWNraW5nIixpY29uOls1NzYsNTEyLFtdLCJlNGM3IiwiTTIwOCAwbDgwIDAgMCA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNTYgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA4LjggMGM4LjItMTQuMSAxMi44LTMwLjUgMTIuOC00OGwwLTE2MGMxMC0xMy40IDE2LTMwIDE2LTQ4bDAtMzJjMC00NC4yLTM1LjgtODAtODAtODBsLTE3NiAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTMyIDMzNmwzMjAgMCAwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTI4ek00OCAxOTJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LEFxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tY2hhbGtib2FyZCIsaWNvbjpbNjQwLDUxMixbXSwiZTUzZCIsIk0xOTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTE3NiA1MTJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM2IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtNDggMTkyIDAgMCAxOTItMTkyIDAgMC0zMi02NCAwIDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzY4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjQtMTIyLjcgMGMtNDUuNiAwLTg4LjUgMjEuNi0xMTUuNiA1OC4yTDE0LjMgMjYwLjljLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxMTIgMjM2LjcgMTEyIDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdfSxEcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGljZS10d28iLGljb246WzQ0OCw1MTIsWzk4NTddLCJmNTI4IiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSwkQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC1hcnJvdy1sZWZ0IixpY29uOls1MTIsNTEyLFs4NjQ0LCJleGNoYW5nZSJdLCJmMGVjIiwiTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdfSxFcWU9JEIsQUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9vdGJhbGwiLGljb246WzUxMiw1MTIsWzEyNzk0NCwiZm9vdGJhbGwtYmFsbCJdLCJmNDRlIiwiTTI2MS4xIDIyLjZjLTg5IDE4LTE1MC41IDYzLjQtMTkwIDEyMy45LTIzLjMgMzUuNi0zOC4xIDc1LjMtNDYuNyAxMTUuNUwyNTEuOSA0ODkuNGM4OS0xOCAxNTAuNS02My40IDE5MC4xLTEyMy45IDIzLjMtMzUuNiAzOC4xLTc1LjMgNDYuNy0xMTUuNUwyNjEuMSAyMi42em0yMzYgMTY4LjFjMy4yLTQyLjMgLjctODMuMy00LjgtMTE4LjctNC40LTI3LjgtMjYuOC00OC01My4xLTUxLjYtNDMtNS45LTgyLjItNy41LTExNy44LTUuNEw0OTcuMSAxOTAuNnpNMTkxLjcgNDk3LjFMMTUuOSAzMjEuNGMtMy4yIDQyLjMtLjcgODMuMyA0LjggMTE4LjcgNC40IDI3LjggMjYuOCA0OCA1My4xIDUxLjYgNDMgNS45IDgyLjIgNy41IDExNy44IDUuNHpNMjcxLjUgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXX0sUHFlPUFCLElxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cnVjay1tb25zdGVyIixpY29uOls1NzYsNTEyLFtdLCJmNjNiIiwiTTMzNiA5Nmw0OCA2NC0xMjggMCAwLTY0IDgwIDB6bTEyOCA2NEwzODcuMiA1Ny42QzM3NS4xIDQxLjUgMzU2LjEgMzIgMzM2IDMyTDIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5Ni0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDE4LjEgMTAuMSAzMy45IDI0LjkgNDIuMS0uNSA1LjcgMS4xIDExLjYgNC43IDE2LjQtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4zIDMxLjNsMTEuMyAxMS4zYzguNiA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS43LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4zLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMi40LTMuMiAzLjktNi44IDQuNS0xMC41bDExNC4yIDBjLjYgMy43IDIuMSA3LjMgNC41IDEwLjUtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4yIDMxLjNsMTEuMyAxMS4zYzguNSA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS44LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4yLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMy42LTQuOCA1LjItMTAuNyA0LjctMTYuNCAxNC44LTguMiAyNC45LTIzLjkgMjQuOS00Mi4xbDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTEyOCAzMzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sTnFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFzdGVyaXNrIixpY29uOls0NDgsNTEyLFsxMDAzMyw2MTU0NV0sIjJhIiwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTY4LjYgMTQ0LTgzLjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43czMuNiAzNC45LTExLjcgNDMuN0wyODggMjU2IDQzMiAzMzkuMWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43cy0yOC40IDIwLjYtNDMuNyAxMS43TDI1NiAzMTEuNCAyNTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTY4LjYtMTQ0IDgzLjFjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN1MuNyAzNDggMTYgMzM5LjFMMTYwIDI1NiAxNiAxNzIuOUMuNyAxNjQtNC41IDE0NC41IDQuMyAxMjkuMVMzMi43IDEwOC42IDQ4IDExNy40TDE5MiAyMDAuNiAxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il19LE9tPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhdHRlcnktZnVsbCIsaWNvbjpbNjQwLDUxMixbMTI4MjY3LCJiYXR0ZXJ5IiwiYmF0dGVyeS01Il0sImYyNDAiLCJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMzA0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTMwNCAweiJdfSxGcWU9T20sT3FlPU9tLFJxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGlsZC1kcmVzcyIsaWNvbjpbMzIwLDUxMixbXSwiZTU5YyIsIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjQgNjQgNjQgMCAxIDAgMjI0IDY0ek04OCA0MDBsMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTYgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNy44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC43IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMkw4Ni4yIDI4NS41IDU1IDM3OC45QzUxLjYgMzg5LjMgNTkuMyA0MDAgNzAuMiA0MDBMODggNDAweiJdfSxEQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWtpc3MtYmVhbSIsaWNvbjpbNTEyLDUxMixbMTI4NTM3LCJraXNzLWJlYW0iXSwiZjU5NyIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sQnFlPURCLEVCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRyYXNoLWNhbi1hcnJvdy11cCIsaWNvbjpbNDQ4LDUxMixbInRyYXNoLXJlc3RvcmUtYWx0Il0sImY4MmEiLCJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTIwOSA3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXX0sSHFlPUVCLHFxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb250IixpY29uOls1MTIsNTEyLFtdLCJmMDMxIiwiTTI4NS4xIDUwLjdDMjc5LjkgMzkuMyAyNjguNSAzMiAyNTYgMzJzLTIzLjkgNy4zLTI5LjEgMTguN0w1OS41IDQxNiA0OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNi4xIDAgMjItNDggMjA4LjMgMCAyMiA0OC02LjEgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDAtMTY3LjQtMzY1LjN6TTMzMC44IDMwNEwxODEuMiAzMDQgMjU2IDE0MC44IDMzMC44IDMwNHoiXX0sVnFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvcmUtaG9sZSIsaWNvbjpbNTEyLDUxMixbXSwiZTRjMyIsIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMzIuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtMjMuNy0xMi45LTQ0LjQtMzItNTUuNEwyODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMzg0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTQ0YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzE0NCAzODEuOSAxNDQgMzIwbDAtMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NHoiXX0sanFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpcnVzLWNvdmlkIixpY29uOls1MTIsNTEyLFtdLCJlNGE4IiwiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMzMuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTEuMy0xMS4zLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM2wzMy42IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNi0zMy42IDBjLTQuMiAzMC43LTE2LjMgNTguOC0zNC4xIDgyLjNsMjMuOCAyMy44IDExLjMtMTEuM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU2LjYgNTYuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxMS4zLTExLjMtMjMuOC0yMy44Yy0yMy41IDE3LjktNTEuNyAyOS45LTgyLjMgMzQuMWwwIDMzLjYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMzMuNmMtMzAuNy00LjItNTguOC0xNi4zLTgyLjMtMzQuMWwtMjMuOCAyMy44IDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMS4zIDExLjMgMjMuOC0yMy44Qzk3LjkgMzM4LjggODUuOCAzMTAuNyA4MS42IDI4MGwtMzMuNiAwIDAgMTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCAzMDkuMyAwIDI5NmwwLTgwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNiAzMy42IDBjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTIgMTQ5LjcgMTE1LjdjMjMuNS0xNy45IDUxLjctMjkuOSA4Mi4zLTM0LjFsMC0zMy42LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zMiAyMDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxVcWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1wZGYiLGljb246WzU3Niw1MTIsW10sImYxYzEiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI0MCAzODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTI4IDEyIDBjMzMuMSAwIDYwLTI2LjkgNjAtNjBzLTI2LjktNjAtNjAtNjBsLTMyIDB6bTMyIDgwbC0xMiAwIDAtNDAgMTIgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjB6bTk2LTgwYy0xMSAwLTIwIDktMjAgMjBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJsMC02NGMwLTI4LjctMjMuMy01Mi01Mi01MmwtMzIgMHptMjAgMTI4bDAtODggMTIgMGM2LjYgMCAxMiA1LjQgMTIgMTJsMCA2NGMwIDYuNi01LjQgMTItMTIgMTJsLTEyIDB6bTg4LTEwOGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQ0IDI4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yOCAwIDAtMjQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQ4IDBjLTExIDAtMjAgOS0yMCAyMHoiXX0sV3FlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxhbmd1YWdlIixpY29uOls1NzYsNTEyLFtdLCJmMWFiIiwiTTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTkuNiAwLTguNCAyMy4xYy0xNi40IDQ1LjItNDEuMSA4Ni41LTcyLjIgMTIyIDE0LjIgOC44IDI5IDE2LjYgNDQuNCAyMy41bDUwLjQgMjIuNCA2Mi4yLTE0MGM1LjEtMTEuNiAxNi42LTE5IDI5LjItMTlzMjQuMSA3LjQgMjkuMiAxOWwxMjggMjg4YzcuMiAxNi4yLS4xIDM1LjEtMTYuMiA0Mi4ycy0zNS4xLS4xLTQyLjItMTYuMmwtMjAtNDUtMTU3LjUgMC0yMCA0NWMtNy4yIDE2LjItMjYuMSAyMy40LTQyLjIgMTYuMnMtMjMuNC0yNi4xLTE2LjItNDIuMmwzOS44LTg5LjUtNTAuNC0yMi40Yy0yMy0xMC4yLTQ1LTIyLjQtNjUuOC0zNi40LTIxLjMgMTcuMi00NC42IDMyLjItNjkuNSA0NC43TDc4LjMgMzgwLjZjLTE1LjggNy45LTM1IDEuNS00Mi45LTE0LjNzLTEuNS0zNSAxNC4zLTQyLjlsMzQuNS0xNy4zYzE2LjMtOC4yIDMxLjgtMTcuNyA0Ni40LTI4LjMtMTMuOC0xMi43LTI2LjgtMjYuNC0zOC45LTQwLjlMODEuNiAyMjQuN2MtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDEwLjIgMTIuMmMxMS41IDEzLjkgMjQuMSAyNi44IDM3LjQgMzguNyAyNy41LTMwLjQgNDkuMi02Ni4xIDYzLjUtMTA1LjRsLjUtMS4yLTIxMC4zIDBDMTQuMyAxMjggMCAxMTMuNyAwIDk2UzE0LjMgNjQgMzIgNjRsOTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek00MTYgMjcwLjhMMzY1LjcgMzg0IDQ2Ni4zIDM4NCA0MTYgMjcwLjh6Il19LFBCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoaWVsZC1oYWx2ZWQiLGljb246WzUxMiw1MTIsWyJzaGllbGQtYWx0Il0sImYzZWQiLCJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAwem0wIDY2LjhsMCAzNzguMWMxMzgtNjYuOCAxNzUuMS0yMTQuOCAxNzYtMzAzLjRsLTE3Ni03NC42IDAgMHoiXX0sR3FlPVBCLFlxZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJldC11cCIsaWNvbjpbMzIwLDUxMixbXSwiZjBkOCIsIk0xNDAuMyAxMzUuMmMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDEuNCAzMjAgMjg4LjUgMzIwbC0yNTYgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuNyAyNzQuNSA5LjkgMjY1LjRsMTI4LTEyOCAyLjQtMi4yeiJdfSxJQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLXBlbiIsaWNvbjpbNjQwLDUxMixbMTI4MjIxLCJmaWxlLWVkaXQiXSwiZjMxYyIsIk0xMjguMSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDYuMiAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmwxMzIuMi0xMzIuMiAwLTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzIyLjggMTguN0MzMTAuOCA2LjcgMjk0LjUgMCAyNzcuNiAwTDEyOC4xIDB6TTM4OS42IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTkzLjUgMTE3LjUgMTE3LjV6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXX0sWnFlPUlCLE5CPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlcnNvbi1iaWtpbmciLGljb246WzU3Niw1MTIsWzEyODY5MiwiYmlraW5nIl0sImY4NGEiLCJNMzY4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjcuMiA2NGwtNjEuOC00OC44Yy0xNy4zLTEzLjYtNDEuNy0xMy44LTU5LjEtLjNsLTgzLjEgNjQuMmMtMzAuNyAyMy44LTI4LjUgNzAuOCA0LjMgOTEuNkwyNTYgMzA1LjEgMjU2IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTAuNy01LjMtMjAuNy0xNC4yLTI2LjZMMjYzIDIzMi45IDMyMy4zIDE4NC40IDM2NCAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2w2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi44IDB6TTExMiA1MTJhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0zNTIgMGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il19LFhxZT1OQixGQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLW9wZW4tcmVhZGVyIixpY29uOls1MTIsNTEyLFsiYm9vay1yZWFkZXIiXSwiZjVkYSIsIk0yNTYgMTUyYTg4IDg4IDAgMSAwIDAtMTc2IDg4IDg4IDAgMSAwIDAgMTc2em0wIDI5OC43bDAtMTQ5LjNjMTYuMy02LjggMzIuOS0xMy43IDQ5LjctMjAuNyAzOS0xNi4yIDgwLjgtMjQuNiAxMjMuMS0yNC42bDE5LjIgMCAwIDE2MC0xOS4yIDBjLTU5LjEgMC0xMTcuNyAxMS43LTE3Mi4zIDM0LjVsLS41IC4yek0yNTYgMjMybC0yNS4xLTEwLjVDMTg0LjEgMjAyIDEzMy45IDE5MiA4My4yIDE5Mkw0OCAxOTJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNWwxMi44IDUuM2M3LjkgMy4zIDE2LjcgMy4zIDI0LjYgMGwxMi44LTUuM2M0Ni44LTE5LjUgOTctMjkuNSAxNDcuNy0yOS41bDM1LjIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5MmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzUuMiAwYy01MC43IDAtMTAwLjkgMTAtMTQ3LjcgMjkuNUwyNTYgMjMyeiJdfSxLcWU9RkIsUXFlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdsYXNzLXdhdGVyLWRyb3BsZXQiLGljb246WzM4NCw1MTIsW10sImU0ZjUiLCJNMzIgMEMyMy4xIDAgMTQuNiAzLjcgOC42IDEwLjJTLS42IDI1LjQgLjEgMzQuM0wyOC45IDQzNy43YzMgNDEuOSAzNy44IDc0LjMgNzkuOCA3NC4zbDE2Ni42IDBjNDIgMCA3Ni44LTMyLjQgNzkuOC03NC4zTDM4My45IDM0LjNjLjYtOC45LTIuNC0xNy42LTguNS0yNC4xUzM2MC45IDAgMzUyIDBMMzIgMHpNODMgMjk3LjVMNjYuNCA2NCAzMTcuNiA2NCAzMDEgMjk3LjUgMjg4IDMwNGMtMjAuMSAxMC4xLTQzLjkgMTAuMS02NCAwcy00My45LTEwLjEtNjQgMC00My45IDEwLjEtNjQgMGwtMTMtNi41ek0yNTYgMTk2YzAtMjQtMzMuNy03MC4xLTUyLjItOTMuNS02LjEtNy43LTE3LjUtNy43LTIzLjYgMC0xOC41IDIzLjQtNTIuMiA2OS41LTUyLjIgOTMuNSAwIDMzLjEgMjguNyA2MCA2NCA2MHM2NC0yNi45IDY0LTYweiJdfSxPQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0b3dlci1icm9hZGNhc3QiLGljb246WzU3Niw1MTIsWyJicm9hZGNhc3QtdG93ZXIiXSwiZjUxOSIsIk04Ny45IDExLjVjLTExLjMtNi45LTI2LjEtMy4yLTMzIDguMS0yNC44IDQxLTM5IDg5LjEtMzkgMTQwLjRzMTQuMiA5OS40IDM5IDE0MC40YzYuOSAxMS4zIDIxLjYgMTUgMzMgOC4xczE1LTIxLjYgOC4xLTMzQzc1LjcgMjQxLjkgNjQgMjAyLjMgNjQgMTYwUzc1LjcgNzguMSA5Ni4xIDQ0LjRjNi45LTExLjMgMy4yLTI2LjEtOC4xLTMzem00MDAuMSAwYy0xMS4zIDYuOS0xNSAyMS42LTguMSAzMyAyMC40IDMzLjcgMzIuMSA3My4zIDMyLjEgMTE1LjZzLTExLjcgODEuOS0zMi4xIDExNS42Yy02LjkgMTEuMy0zLjIgMjYuMSA4LjEgMzNzMjYuMSAzLjIgMzMtOC4xYzI0LjgtNDEgMzktODkuMSAzOS0xNDAuNFM1NDUuOCA2MC42IDUyMSAxOS42Yy02LjktMTEuMy0yMS42LTE1LTMzLTguMXpNMzIwIDIxNS40YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjQgMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAyMy43IDEyLjkgNDQuNCAzMiA1NS40TDI1NiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI2NC42ek0xODAuMiA5MWM3LjItMTEuMiAzLjktMjYtNy4yLTMzLjJzLTI2LTMuOS0zMy4yIDcuMmMtMTcuNiAyNy40LTI3LjggNjAtMjcuOCA5NXMxMC4yIDY3LjYgMjcuOCA5NWM3LjIgMTEuMiAyMiAxNC40IDMzLjIgNy4yczE0LjQtMjIgNy4yLTMzLjJjLTEyLjgtMTkuOS0yMC4yLTQzLjYtMjAuMi02OXM3LjQtNDkuMSAyMC4yLTY5ek00MzYuMiA2NWMtNy4yLTExLjItMjItMTQuNC0zMy4yLTcuMnMtMTQuNCAyMi03LjIgMzMuMmMxMi44IDE5LjkgMjAuMiA0My42IDIwLjIgNjlzLTcuNCA0OS4xLTIwLjIgNjljLTcuMiAxMS4yLTMuOSAyNiA3LjIgMzMuMnMyNiAzLjkgMzMuMi03LjJjMTcuNi0yNy40IDI3LjgtNjAgMjcuOC05NXMtMTAuMi02Ny42LTI3LjgtOTV6Il19LEpxZT1PQixSQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtaW5pbWl6ZSIsaWNvbjpbNTEyLDUxMixbImNvbXByZXNzLWFycm93cy1hbHQiXSwiZjc4YyIsIk00NTYgMjI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzMyMi4xIDMyLjIgMzI5IDM5bDQwIDQwIDczLjQtNzMuNEM0NDYgMiA0NTAuOSAwIDQ1NiAwczEwIDIgMTMuNyA1LjdsMzYuNyAzNi43QzUxMCA0NiA1MTIgNTAuOSA1MTIgNTZzLTIgMTAtNS43IDEzLjdMNDMzIDE0MyA0NzMgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDY1LjcgMjI0IDQ1NiAyMjR6bTAgNjRjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC00MCA0MCA3My40IDczLjRjMy42IDMuNiA1LjcgOC41IDUuNyAxMy43cy0yIDEwLTUuNyAxMy43bC0zNi43IDM2LjdDNDY2IDUxMCA0NjEuMSA1MTIgNDU2IDUxMnMtMTAtMi0xMy43LTUuN0wzNjkgNDMzIDMyOSA0NzNjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDQ2NS43IDI4OCA0NTZsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTQ0IDB6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC00MC00MC03My40IDczLjRDNjYgNTEwIDYxLjEgNTEyIDU2IDUxMnMtMTAtMi0xMy43LTUuN0w1LjcgNDY5LjdDMiA0NjYgMCA0NjEuMSAwIDQ1NnMyLTEwIDUuNy0xMy43TDc5IDM2OSAzOSAzMjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNDYuMyAyODggNTYgMjg4bDE0NCAwek01NiAyMjRjLTkuNyAwLTE4LjUtNS44LTIyLjItMTQuOFMzMi4yIDE4OS45IDM5IDE4M0w3OSAxNDMgNS43IDY5LjdDMiA2NiAwIDYxLjEgMCA1NlMyIDQ2IDUuNyA0Mi4zTDQyLjMgNS43QzQ2IDIgNTAuOSAwIDU2IDBTNjYgMiA2OS43IDUuN0wxNDMgNzkgMTgzIDM5YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDQ2LjMgMjI0IDU2bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0TDU2IDIyNHoiXX0sZVZlPVJCLHRWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1yaWdodC10by1jaXR5IixpY29uOls2NDAsNTEyLFtdLCJlNGIzIiwiTTI4OCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgODAgNDggMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC00MTZ6bTY0IDY0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTM1MiAzMDRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTc2LTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTUxMiAzMzZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTUzIDE2N2w3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTAyLjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMDIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6Il19LGFWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYXB0b3AtbWVkaWNhbCIsaWNvbjpbNjQwLDUxMixbXSwiZjgxMiIsIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4OCAxNjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il19LGlWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJicmVhZC1zbGljZSIsaWNvbjpbNTEyLDUxMixbXSwiZjdlYyIsIk02NCA0MzJsMC0xNzZjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjE2LjUgNTEyLTIxNi41IDUxMiAwIDAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTc2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yODggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il19LHJWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnbG9iZSIsaWNvbjpbNTEyLDUxMixbMTI3NzYwXSwiZjBhYyIsIk0zNTEuOSAyODBsLTE5MC45IDBjMi45IDY0LjUgMTcuMiAxMjMuOSAzNy41IDE2Ny40IDExLjQgMjQuNSAyMy43IDQxLjggMzUuMSA1Mi40IDExLjIgMTAuNSAxOC45IDEyLjIgMjIuOSAxMi4yczExLjctMS43IDIyLjktMTIuMmMxMS40LTEwLjYgMjMuNy0yOCAzNS4xLTUyLjQgMjAuMy00My41IDM0LjYtMTAyLjkgMzcuNS0xNjcuNHpNMTYwLjkgMjMybDE5MC45IDBDMzQ5IDE2Ny41IDMzNC43IDEwOC4xIDMxNC40IDY0LjYgMzAzIDQwLjIgMjkwLjcgMjIuOCAyNzkuMyAxMi4yIDI2OC4xIDEuNyAyNjAuNCAwIDI1Ni40IDBzLTExLjcgMS43LTIyLjkgMTIuMmMtMTEuNCAxMC42LTIzLjcgMjgtMzUuMSA1Mi40LTIwLjMgNDMuNS0zNC42IDEwMi45LTM3LjUgMTY3LjR6bS00OCAwQzExNi40IDE0Ni40IDEzOC41IDY2LjkgMTcwLjggMTQuNyA3OC43IDQ3LjMgMTAuOSAxMzEuMiAxLjUgMjMybDExMS40IDB6TTEuNSAyODBjOS40IDEwMC44IDc3LjIgMTg0LjcgMTY5LjMgMjE3LjMtMzIuMy01Mi4yLTU0LjQtMTMxLjctNTcuOS0yMTcuM0wxLjUgMjgwem0zOTguNCAwYy0zLjUgODUuNi0yNS42IDE2NS4xLTU3LjkgMjE3LjMgOTIuMS0zMi43IDE1OS45LTExNi41IDE2OS4zLTIxNy4zbC0xMTEuNCAwem0xMTEuNC00OEM1MDEuOSAxMzEuMiA0MzQuMSA0Ny4zIDM0MiAxNC43IDM3NC4zIDY2LjkgMzk2LjQgMTQ2LjQgMzk5LjkgMjMybDExMS40IDB6Il19LHNWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmb2xkZXItbWludXMiLGljb246WzUxMiw1MTIsW10sImY2NWQiLCJNNDQ4IDQ0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NHpNMTg0IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LG5WZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXNrLWZhY2UiLGljb246WzY0MCw1MTIsW10sImUxZDciLCJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUw2NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNzguN2MwIDYyLjYgNDUuMiAxMTYgMTA3IDEyNi4zbDk3LjkgMTYuM2MzMyAyMiA3Mi42IDM0LjcgMTE1LjEgMzQuN3M4Mi4yLTEyLjggMTE1LjEtMzQuN0w1MzMgMzk2LjljNjEuNy0xMC4zIDEwNy02My43IDEwNy0xMjYuM2wwLTc4LjdjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg5LjIgMGMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFMMzk2LjQgODcuMUMzNzMuOCA3MiAzNDcuMiA2NCAzMjAgNjR6TTEzNS45IDMzNi45bC0xOC40LTMuMUM4Ni42IDMyOC43IDY0IDMwMiA2NCAyNzAuN2wwLTc4LjcgNDggMCAwIDQ4YzAgMzUgOC42IDY3LjkgMjMuOSA5Ni45em0zODYuNi0zLjFsLTE4LjQgMy4xQzUxOS40IDMwNy45IDUyOCAyNzUgNTI4IDI0MGwwLTQ4IDQ4IDAgMCA3OC43YzAgMzEuMy0yMi42IDU4LTUzLjUgNjMuMXpNMTkyIDIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em01NiA1NmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LG9WZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib25nIixpY29uOls1MTIsNTEyLFtdLCJmNTVjIiwiTTQ0OC41IDM4NGMwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjMtNy45IDExLjEtMjEuMiAxNi43LTM0LjggMTYuN2wtMjQzLjMgMGMtMTMuNyAwLTI2LjktNS42LTM0LjgtMTYuNy0yMi40LTMxLjQtMzUuNS02OS44LTM1LjUtMTExLjMgMC03MS4xIDM4LjYtMTMzLjEgOTYtMTY2LjNsMC0xNTMuN2MtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE1My43YzE0LjIgOC4yIDI3LjIgMTguMiAzOC44IDI5LjZsMzkuMy0zOS4zLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2IDE2IDMyIDMyIDQ4IDQ4IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTctNy00My4zIDQzLjNjMTcuMyAyOC45IDI3LjMgNjIuNiAyNy4zIDk4Ljh6TTI4OC41IDY0bC02NCAwIDAgMTkwLjYtMzIgMTguNWMtMTkuNSAxMS4zLTM1LjcgMjcuNS00Ni45IDQ2LjlsMjIxLjggMGMtMTEuMi0xOS40LTI3LjQtMzUuNi00Ni45LTQ2LjlsLTMyLTE4LjUgMC0xOTAuNnoiXX0sbFZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvYWQtYnJpZGdlIixpY29uOls1NzYsNTEyLFtdLCJlNTYzIiwiTTMyIDMybDIwOCAwIDAgNjQtMjQgMCAwIDY0IDI0IDAgMCAxMjkuM2MtNDUuNCA3LjYtODAgNDcuMS04MCA5NC43bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMnpNODggOTZsMCA2NCA4MCAwIDAtNjQtODAgMHpNMzM2IDMybDcyIDAgMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzIgNzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNzIgMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTk2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il19LEJCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXVwLTktMSIsaWNvbjpbNTEyLDUxMixbInNvcnQtbnVtZXJpYy11cC1hbHQiXSwiZjg4NyIsIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTM2NS4xIDIwNi42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAxMTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDIuNyAxODJjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnoiXX0sY1ZlPUJCLGRWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb3VudGFpbi1jaXR5IixpY29uOls2NDAsNTEyLFtdLCJlNTJlIiwiTTI1Ni4zIDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTc3LjggMGM0LTE1LjQgMi40LTMyLjYtNi43LTQ4LjJMMzU0LjYgMjU2IDM2OC4zIDI1NmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTYuMSAwLTExLjQgMy40LTE0LjEgOC41bC00Mi42LTczYy02LTEwLjItMTQuMS0xOC0yMy4zLTIzLjNsMC01Ni4yem02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNjAgOTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptLTI3Mi02NC43bC02NS4xIDExMS42IDMzLjEgMzMuMSA0OC00OCA0MC40IDAtNTYuNC05Ni43em0tMjcuNi00Ny45YzEyLjMtMjEuMiA0Mi45LTIxLjIgNTUuMyAwTDQyMC4zIDQ2My45YzEyLjQgMjEuMy0yLjkgNDguMS0yNy42IDQ4LjFMNTYgNTEyYy0yNC43IDAtNDAuMS0yNi44LTI3LjYtNDguMUwxOTYuNyAxNzUuNHoiXX0sUm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi05LTEiLGljb246WzUxMiw1MTIsWyJzb3J0LW51bWVyaWMtZGVzYyIsInNvcnQtbnVtZXJpYy1kb3duLWFsdCJdLCJmODg2IiwiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTM0LjUtMTg0bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMTEyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS01LjMgMTgyYzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40eiJdfSxwVmU9Um0saFZlPVJtLEhCPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi13aWRlIixpY29uOls1MTIsNTEyLFsxMjg1MTUsImdyaW4tYWx0Il0sImY1ODEiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0yMDggMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0IDE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NHptMTI4IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXX0sdVZlPUhCLGZWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwb29wIixpY29uOls1MTIsNTEyLFtdLCJmNjE5IiwiTTI1NC40IDYuNmMzLjUtNC4zIDktNi41IDE0LjUtNS43IDQ2LjkgNi4zIDgzLjEgNDYuNSA4My4xIDk1LjEgMCAxMS4yLTEuOSAyMi01LjUgMzJsNS41IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAxOS4xLTguNCAzNi4zLTIxLjcgNDhsMTMuNyAwYzM5LjggMCA3MiAzMi4yIDcyIDcyIDAgMjMuMi0xMSA0My44LTI4IDU3IDM0LjEgNS43IDYwIDM1LjMgNjAgNzEgMCAzOS44LTMyLjIgNzItNzIgNzJMNzIgNTEyYy0zOS44IDAtNzItMzIuMi03Mi03MiAwLTM1LjcgMjUuOS02NS4zIDYwLTcxLTE3LTEzLjItMjgtMzMuOC0yOC01NyAwLTM5LjggMzIuMi03MiA3Mi03MmwxMy43IDBjLTEzLjMtMTEuNy0yMS43LTI4LjktMjEuNy00OCAwLTM1LjMgMjguNy02NCA2NC02NGwxNi4yIDBjNDQuMS0uMSA3OS44LTM1LjkgNzkuOC04MCAwLTkuMi0xLjUtMTcuOS00LjMtMjYuMS0xLjgtNS4yLS44LTExLjEgMi44LTE1LjR6Il19LG1WZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaGFybWFjaGFrcmEiLGljb246WzUxMiw1MTIsWzk3ODRdLCJmNjU1IiwiTTMzNy44IDIwNS43bDQ4LjYtNDIuNWMxMy44IDE5LjMgMjMuNCA0MS45IDI3LjQgNjYuMmwtNjQuNCA0LjNjLTIuNC0xMC4xLTYuNC0xOS41LTExLjYtMjh6bTE0MC4xIDE5LjVjLTUuMy0zOC44LTIwLjYtNzQuNS00My4yLTEwNC4zbC44LS43QzQ0OSAxMDguNCA0NDkuNyA4Ny42IDQzNyA3NXMtMzMuNC0xMi00NS4yIDEuNWwtLjcgLjhjLTI5LjgtMjIuNi02NS41LTM3LjktMTA0LjMtNDMuMmwuMS0xLjFjMS4yLTE3LjktMTMtMzMtMzAuOS0zM3MtMzIuMSAxNS4yLTMwLjkgMzNsLjEgMS4xYy0zOC44IDUuMy03NC41IDIwLjYtMTA0LjMgNDMuMmwtLjctLjhDMTA4LjQgNjMgODcuNiA2Mi4zIDc1IDc1cy0xMiAzMy40IDEuNSA0NS4ybC44IC43Yy0yMi42IDI5LjgtMzcuOSA2NS41LTQzLjIgMTA0LjNsLTEuMS0uMWMtMTcuOS0xLjItMzMgMTMtMzMgMzAuOXMxNS4yIDMyLjEgMzMgMzAuOWwxLjEtLjFjNS4zIDM4LjggMjAuNiA3NC41IDQzLjIgMTA0LjNsLS44IC43QzYzIDQwMy42IDYyLjMgNDI0LjQgNzUgNDM3czMzLjQgMTIgNDUuMi0xLjVsLjctLjhjMjkuOCAyMi42IDY1LjUgMzcuOSAxMDQuMyA0My4ybC0uMSAxLjFjLTEuMiAxNy45IDEzIDMzIDMwLjkgMzNzMzIuMS0xNS4yIDMwLjktMzNsLS4xLTEuMWMzOC44LTUuMyA3NC41LTIwLjYgMTA0LjMtNDMuMmwuNyAuOGMxMS44IDEzLjUgMzIuNSAxNC4yIDQ1LjIgMS41czEyLTMzLjQtMS41LTQ1LjJsLS44LS43YzIyLjYtMjkuOCAzNy45LTY1LjUgNDMuMi0xMDQuM2wxLjEgLjFjMTcuOSAxLjIgMzMtMTMgMzMtMzAuOXMtMTUuMi0zMi4xLTMzLTMwLjlsLTEuMSAuMXpNMTYzLjIgMTI1LjZjMTkuMy0xMy44IDQxLjktMjMuNCA2Ni4yLTI3LjVsNC4zIDY0LjRjLTEwIDIuNC0xOS41IDYuNC0yOCAxMS42bC00Mi41LTQ4LjZ6bS02NSAxMDMuOGM0LjEtMjQuNCAxMy43LTQ2LjkgMjcuNS02Ni4ybDQ4LjYgNDIuNWMtNS4zIDguNS05LjIgMTgtMTEuNiAyOGwtNjQuNC00LjN6bTI3LjUgMTE5LjRjLTEzLjgtMTkuMy0yMy40LTQxLjktMjcuNS02Ni4ybDY0LjQtNC4zYzIuNCAxMC4xIDYuNCAxOS41IDExLjYgMjhsLTQ4LjYgNDIuNXptMTAzLjggNjVjLTI0LjQtNC4xLTQ2LjktMTMuNy02Ni4yLTI3LjRsNDIuNS00OC42YzguNSA1LjMgMTggOS4yIDI4IDExLjZsLTQuMyA2NC40em0xMTkuNC0yNy40Yy0xOS4zIDEzLjgtNDEuOSAyMy40LTY2LjIgMjcuNGwtNC4zLTY0LjRjMTAtMi40IDE5LjUtNi40IDI4LTExLjZsNDIuNSA0OC42em02NS0xMDMuOGMtNC4xIDI0LjQtMTMuNyA0Ni45LTI3LjQgNjYuMmwtNDguNi00Mi41YzUuMy04LjYgOS4yLTE4IDExLjYtMjhsNjQuNCA0LjN6bS02NS0xNTYuOWwtNDIuNSA0OC42Yy04LjYtNS4zLTE4LTkuMi0yOC0xMS42bDQuMy02NC40YzI0LjQgNC4xIDQ2LjkgMTMuNyA2Ni4yIDI3LjV6TTI1NiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxxQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXR0ZXJ5LXF1YXJ0ZXIiLGljb246WzY0MCw1MTIsWyJiYXR0ZXJ5LTIiXSwiZjI0MyIsIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC02NCAweiJdfSxnVmU9cUIsYlZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFua2giLGljb246WzMyMCw1MTIsWzk3NjVdLCJmNjQ0IiwiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMS01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjctNS42LTQuOS0xMS41LTEwLjUtMTcuNC0xNi43LTI1LjktMjcuNS00Ni42LTYyLjYtNDYuNi0xMDQuMXpNMTYwIDBDODkuMyAwIDMyIDU3LjMgMzIgMTI4IDMyIDE4MC40IDUzLjUgMjIzLjUgNzguOCAyNTZMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Ni44IDBDMjY2LjUgMjIzLjUgMjg4IDE4MC40IDI4OCAxMjggMjg4IDU3LjMgMjMwLjcgMCAxNjAgMHoiXX0sdlZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpYW1vbmQiLGljb246WzUxMiw1MTIsWzk4MzBdLCJmMjE5IiwiTTE3IDIxNUwyMTUgMTdDMjI1LjkgNi4xIDI0MC42IDAgMjU2IDBzMzAuMSA2LjEgNDEgMTdMNDk1IDIxNWMxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFMMjk3IDQ5NWMtMTAuOSAxMC45LTI1LjYgMTctNDEgMTdzLTMwLjEtNi4xLTQxLTE3TDE3IDI5N0M2LjEgMjg2LjEgMCAyNzEuNCAwIDI1NnM2LjEtMzAuMSAxNy00MXoiXX0seVZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN1YnNjcmlwdCIsaWNvbjpbNTc2LDUxMixbXSwiZjEyYyIsIk05NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZzMTQuMyAzMiAzMiAzMmwxNS4zIDAgODkuNiAxMjgtODkuNiAxMjgtMTUuMyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwyNDAgMzExLjggMzI1LjggNDM0LjRjNiA4LjYgMTUuOCAxMy42IDI2LjIgMTMuNmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNS4zIDAtODkuNi0xMjggODkuNi0xMjggMTUuMyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDI0MCAyMDAuMiAxNTQuMiA3Ny42QzE0OC4yIDY5LjEgMTM4LjQgNjQgMTI4IDY0TDk2IDY0ek01NDQgMzIwYzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40bC0zMiAxNmMtMTUuOCA3LjktMjIuMiAyNy4xLTE0LjMgNDIuOSA1LjYgMTEuMiAxNi45IDE3LjcgMjguNiAxNy43bDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTEyOHoiXX0sVkI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicnVwZWUtc2lnbiIsaWNvbjpbNDQ4LDUxMixbODM2MCwicnVwZWUiXSwiZjE1NiIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6bTI4NS4xLTMybDM0LjkgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzQuOSAwYy03LjIgMC0xMy4xIDUuOS0xMy4xIDEzLjEgMCA1LjcgMy43IDEwLjcgOS4xIDEyLjVsNDkuNCAxNS45YzMxLjkgMTAuMyA1My41IDM5LjkgNTMuNSA3My40IDAgNDIuNi0zNC41IDc3LjEtNzcuMSA3Ny4xTDMyMCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTAuOSAwYzcuMiAwIDEzLjEtNS45IDEzLjEtMTMuMSAwLTUuNy0zLjctMTAuNy05LjEtMTIuNWwtNDkuNC0xNS45Yy0zMS45LTEwLjMtNTMuNS0zOS45LTUzLjUtNzMuNCAwLTQyLjYgMzQuNS03Ny4xIDc3LjEtNzcuMXoiXX0seFZlPVZCLHdWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tcmlmbGUiLGljb246WzUxMiw1MTIsW10sImU1NGUiLCJNNDE2IDBMMzg0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMCAxMDAuM2MtOS42IDUuNS0xNiAxNS45LTE2IDI3LjdsMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMCAwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmw1OS41IDBjMTAuNCAwIDE4LTkuOCAxNS41LTE5LjlsLTIzLTkyLjEgNDQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC0yNi43IDUzLjEtMTcuN2M2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMmwwLTg0LjVjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA1Ni0xNiA1LjMgMC0xMDkuM2MwLTExLjgtNi40LTIyLjItMTYtMjcuN0w0MzIgMTZjMC04LjgtNy4yLTE2LTE2LTE2ek0yMjQgMjA4QzExOCAyMDggMzIgMjk0IDMyIDQwMGwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00OGMwLTMyLjUgMTIuMS02Mi4xIDMyLTg0LjdsMCAxOTYuNyAxNjAgMCAwLTI5My4xYy0yMC03LjEtNDEuNi0xMC45LTY0LTEwLjl6TTI4MCA4OGE3MiA3MiAwIDEgMCAtMTQ0IDAgNzIgNzIgMCAxIDAgMTQ0IDB6Il19LE1WZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkIixpY29uOlszODQsNTEyLFsxMDBdLCI0NCIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRTMjgzLjcgNDgwIDE2MCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0ek02NCA5NmwwIDMyMCA5NiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwUzI0OC40IDk2IDE2MCA5Nkw2NCA5NnoiXX0selZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1uZmkiLGljb246WzQ0OCw1MTIsW10sImU1NzYiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTMgMTcyLjNsMzUgNjMgMC01MS40YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNDRjMCAxMC45LTcuNCAyMC41LTE4IDIzLjJzLTIxLjctMi0yNy0xMS42bC0zNS02MyAwIDUxLjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMC45IDcuNC0yMC41IDE4LTIzLjJzMjEuNyAyIDI3IDExLjZ6TTIwOCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDMyIDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NHptMTkyIDBsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXX0sa1ZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlZXRoIixpY29uOls1MTIsNTEyLFtdLCJmNjJlIiwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNDQgMjA4bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4em0xMjggMGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNODAgMTc2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnptMzIwIDMybDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek00OCAzMzZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZ6bTE0NCA0OGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAyNi41IDIxLjUgNDggNDggNDh6bTEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHptMTEyLTE2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnoiXX0sakI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFnbmlmeWluZy1nbGFzcy1kb2xsYXIiLGljb246WzUxMiw1MTIsWyJzZWFyY2gtZG9sbGFyIl0sImY2ODgiLCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMTIgOTZjLTExIDAtMjAgOS0yMCAyMGwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwxNjggMjU2Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIweiJdfSxTVmU9akIsQ1ZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImR1bXBzdGVyLWZpcmUiLGljb246WzY0MCw1MTIsW10sImY3OTQiLCJNMTY0LjMgNjRMMTM4LjcgMTkyIDU2IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMNTguNSA4MC40QzYxLjggNzAuNiA3MSA2NCA4MS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zNDQgNjRsODIuNyAwIDE2IDgwYy0xNC43IC4yLTI5LjMgNS41LTQwLjkgMTUuOS0xMS41IDEwLjMtMjIuNSAyMS0zMi44IDMyLjFsLTI0LjkgMCAwLTEyOHpNOTYgMjQwbDIzMy4yIDBjLTYuNCA4LjgtMTIuMyAxNy42LTE3LjcgMjYuMy0yMS40IDM0LjctMzkuNSA3Ni4xLTM5LjUgMTE1LjggMCAxNy4xIDIuMSAzMy44IDYgNDkuOWwtMTIwLjQgMCAxLjkgMTAuM2MzLjIgMTcuNC04LjQgMzQtMjUuOCAzNy4ycy0zNC04LjQtMzcuMi0yNS44QzcxIDMxMy4zIDU4IDI0Mi4xIDU3LjcgMjQwTDk2IDI0MHptNTEyLTcyYzAgMTEtNy40IDIwLjMtMTcuNSAyMy4xLS45LS44LTEuNy0xLjYtMi42LTIuNC0yMS44LTIwLTU0LjMtMjEuOC03OC01LjUtNC4yLTQuMy04LjUtOC41LTEyLjktMTIuNmwtMjEuMy0xMDYuNiA4MyAwYzEwLjMgMCAxOS41IDYuNiAyMi44IDE2LjRsMjUuMyA3NS45Yy44IDIuNCAxLjIgNSAxLjIgNy42bDAgNC4xek01MDUuNyAyNDAuM0w1MTggMjI2LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNNTQ0IDQzMi4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXX0sX1ZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InVwbG9hZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjA5MyIsIk0yNTYgMTA5LjNMMjU2IDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxMC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDEwOS4zek0yMjQgNDAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDgwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRsODAgMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHptMTQ0IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXX0sQm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1zbGFzaCIsaWNvbjpbNTc2LDUxMixbNjI3MTQsInVzZXItYWx0LXNsYXNoIiwidXNlci1sYXJnZS1zbGFzaCJdLCJmNTA2IiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzExLjUgMjQ1LjdjNTUtMTAuOSA5Ni41LTU5LjUgOTYuNS0xMTcuNyAwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC01OC4yIDAtMTA2LjggNDEuNS0xMTcuNyA5Ni41TDQxLTI0Ljl6TTIzNS42IDMwNS40QzE0Ny45IDMxNi42IDgwIDM5MS41IDgwIDQ4Mi4zIDgwIDQ5OC43IDkzLjMgNTEyIDEwOS43IDUxMmwzMzIuNSAwLTIwNi42LTIwNi42eiJdfSxUVmU9Qm0sTFZlPUJtLCRWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1sZWZ0IixpY29uOls1MTIsNTEyLFs4NTkyXSwiZjA2MCIsIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyODggNDgwIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzcwLjcgMCAxMDUuNC0xMDUuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHoiXX0sQVZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZpYWwtdmlydXMiLGljb246WzU3Niw1MTIsW10sImU1OTciLCJNNjQgMzJDNjQgMTQuMyA3OC4zIDAgOTYgMEwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE1MS43Yy0xOC41IDAtMzcgNy01MS4xIDIxLjEtMjEuNiAyMS42LTI2LjYgNTMuNi0xNSA3OS45LTI2LjkgMTAuNC00NS45IDM2LjYtNDUuOSA2Ny4xczE5IDU2LjcgNDUuOSA2Ny4xYy03LjMgMTYuNS04IDM1LjItMi4zIDUyLjItMTMuNCA1LjctMjguMiA4LjgtNDMuNiA4LjgtNjEuOSAwLTExMi01MC4xLTExMi0xMTJMOTYgNjRDNzguMyA2NCA2NCA0OS43IDY0IDMyem05NiAzMmwwIDEyOCA5NiAwIDAtMTI4LTk2IDB6TTI4MCA0MDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjguOCAwIDQzLjItMzQuOCAyMi45LTU1LjItOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzIwLjQgMjAuNCA1NS4yIDUuOSA1NS4yLTIyLjkgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDI4LjggMzQuOCA0My4yIDU1LjIgMjIuOSA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTIwLjQgMjAuNC01LjkgNTUuMiAyMi45IDU1LjIgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI4LjggMC00My4yIDM0LjgtMjIuOSA1NS4yIDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTIwLjQtMjAuNC01NS4yLTUuOS01NS4yIDIyLjkgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yOC44LTM0LjgtNDMuMi01NS4yLTIyLjktOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMyMC40LTIwLjQgNS45LTU1LjItMjIuOS01NS4yem0xMDQtMzJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSxEVmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlY2stZG91YmxlIixpY29uOlszODQsNTEyLFtdLCJmNTYwIiwiTTI0OS45IDY2LjhjMTAuNC0xNC4zIDcuMi0zNC4zLTcuMS00NC43cy0zNC4zLTcuMi00NC43IDcuMWwtMTA2IDE0NS43LTM3LjUtMzcuNWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi42IDYuNiAxNS44IDEwIDI1LjEgOS4zczE3LjktNS41IDIzLjQtMTMuMWwxMjgtMTc2em0xMjggMTM2YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTE3MCAyMzMuNy02OS41LTY5LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTkyLTI2NHoiXX0sRVZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhdyIsaWNvbjpbNTEyLDUxMixbXSwiZjFiMCIsIk0yMzQuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNSAuMy04Ni4yIDMyLjYtOTYuOCA3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjMtMTQuMy03MC4xIDEwLjItODQuMSA1OS43IC45IDc4LjUgMzMuM3pNNjkuMiA0MDEuMkMxMjEuNiAyNTkuOSAyMTQuNyAyMjQgMjU2IDIyNHMxMzQuNCAzNS45IDE4Ni44IDE3Ny4yYzMuNiA5LjcgNS4yIDIwLjEgNS4yIDMwLjVsMCAxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjctMTEuNSAwLTIyLjktMS40LTM0LTQuMmwtODgtMjJjLTE1LjMtMy44LTMxLjMtMy44LTQ2LjYgMGwtODggMjJjLTExLjEgMi44LTIyLjUgNC4yLTM0IDQuMi0yNS44IDAtNDYuNy0yMC45LTQ2LjctNDYuN2wwLTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjMgMjkuMSA1MS43IDEwLjIgODQuMS01NCA0Ny4zLTc4LjUgMzMuM3pNMzEwLjEgMTg5LjdjLTMyLjMtMTAuNi00Ni45LTUzLjktMzIuNi05Ni44czUyLjEtNjkuMSA4NC40LTU4LjUgNDYuOSA1My45IDMyLjYgOTYuOC01Mi4xIDY5LjEtODQuNCA1OC41eiJdfSxIbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoZWxtZXQtc2FmZXR5IixpY29uOls1NzYsNTEyLFsiaGFyZC1oYXQiLCJoYXQtaGFyZCJdLCJmODA3IiwiTTM1MiAyNjRsMC0yMDBjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTg1LjlDOTAgMTA5LjggMzIgMTkxLjggMzIgMjg4bDAgNjQgNTEyIDAgMC02NGMtMS05NS4yLTU4LjQtMTc3LjctMTQ0LTIwOS44TDQwMCAyNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6TTQwIDQwMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGw0OTYgMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MEw0MCA0MDB6Il19LFBWZT1IbSxJVmU9SG0sTlZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImUiLGljb246WzMyMCw1MTIsWzEwMV0sIjQ1IiwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMTI4IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTEyOCAyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXX0sVUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1sYXVnaC1zcXVpbnQiLGljb246WzUxMiw1MTIsWyJsYXVnaC1zcXVpbnQiXSwiZjU5YiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTA3LjcgMzMyLjFDMTAyIDMxOCAxMTMuNCAzMDQgMTI4LjYgMzA0bDI1NC45IDBjMTUuMiAwIDI2LjYgMTQgMjAuOSAyOC4xLTIzLjggNTguNi04MS4yIDk5LjktMTQ4LjMgOTkuOXMtMTI0LjYtNDEuMy0xNDguMy05OS45em0xNS0xODguOGM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMTkyIDM4Ni4yIDIxOS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdfSxGVmU9VUIsV0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZG93bi1sZWZ0LWFuZC11cC1yaWdodC10by1jZW50ZXIiLGljb246WzUxMiw1MTIsWyJjb21wcmVzcy1hbHQiXSwiZjQyMiIsIk00MzkuNSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzQ1MC4yIDI0MCA0NDAuNSAyNDBsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzkgODctODd6TTcyLjUgMjcybDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzYyLjggMjcyIDcyLjUgMjcyeiJdfSxPVmU9V0IsUlZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImdpZnRzIixpY29uOls1NzYsNTEyLFtdLCJmNzljIiwiTTIwMi0zMC42YzEyLjUgNC40IDE5IDE4LjEgMTQuNiAzMC42bC04LjIgMjMuMSAyNS40LTE4LjVjMTAuNy03LjggMjUuNy01LjQgMzMuNSA1LjNzNS40IDI1LjctNS4zIDMzLjVMMjMzLjggNjQgMjcyIDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMi4xYy01NC43IDEwLjQtOTYgNTguNC05NiAxMTZsMCAxLjljMCA4LjkgMSAxNy41IDIuOCAyNS45LTExLjkgMTcuOC0xOC44IDM5LjEtMTguOCA2Mi4xbDAgMTI4YzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMzguMiAwLTI4LjMtMjAuNkM0Ny4yIDM1LjYgNDQuOCAyMC42IDUyLjYgOS45Uzc1LjQtMy4yIDg2LjEgNC42bDI3LjQgMjAtOC4zLTI1QzEwMS0xMyAxMDcuOC0yNi42IDEyMC40LTMwLjhzMjYuMiAyLjYgMzAuNCAxNS4ybDkuOSAyOS44IDEwLjctMzAuMmM0LjQtMTIuNSAxOC4xLTE5IDMwLjYtMTQuNnpNNDg5LjkgMjA4Yy03LjUgMC0xNC41IDMuOC0xOC42IDEwLjFMNDQ2LjkgMjU2IDQ4OCAyNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xLjljMC0xMi4yLTkuOS0yMi4xLTIyLjEtMjIuMXpNMzg1LjEgMjU2bC0yNC40LTM3LjljLTQuMS02LjMtMTEuMS0xMC4xLTE4LjYtMTAuMS0xMi4yIDAtMjIuMSA5LjktMjIuMSAyMi4xbDAgMS45YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQxLjEgMHpNMjgxLjkgMjY4LjVjLTYuMy0xMC43LTkuOS0yMy4yLTkuOS0zNi41bDAtMS45YzAtMzguNyAzMS40LTcwLjEgNzAuMS03MC4xIDIzLjggMCA0NiAxMi4xIDU4LjkgMzIuMWwxNSAyMy4yIDE1LTIzLjJjMTIuOS0yMCAzNS4xLTMyLjEgNTguOS0zMi4xIDM4LjcgMCA3MC4xIDMxLjQgNzAuMSA3MC4xbDAgMS45YzAgMTMuMy0zLjYgMjUuOC05LjkgMzYuNSAxNS43IDExLjcgMjUuOSAzMC40IDI1LjkgNTEuNWwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNzIgMCAwLTIwOC00OCAwIDAgMjA4LTcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTI4YzAtMjEuMSAxMC4yLTM5LjggMjUuOS01MS41eiJdfSxCVmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmVkIixpY29uOls1NzYsNTEyLFsxMjg3MTZdLCJmMjM2IiwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0IDIyNCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptODAgMTYwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sSFZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1vbmV5LWJpbGwtdHJhbnNmZXIiLGljb246WzY0MCw1MTIsW10sImU1MjgiLCJNMzEgMTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwxMDMtMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDY3LjcgMCAwIDAgMzM4LjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE3OC4yLTUuMS01LjFjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMC0yNy4yIDI3LjItMjguMSA3MC42LTIuOCA5OC45bDY3LjcgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS00MDYuMSAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3OC4yIDUuMSA1LjFjMjguMSAyOC4xIDczLjcgMjguMSAxMDEuOCAwIDI3LjItMjcuMiAyOC4xLTcwLjYgMi44LTk4LjlsLTY3LjcgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDMxIDEwNXpNNDE2IDI1NmE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6bTg4LTY0LjVjNC40IC41IDgtMy4xIDgtNy41bDAtNDhjMC00LjQtMy42LTgtOC04bC00OCAwYy00LjQgMC04LjEgMy42LTcuNSA4IDMuNiAyOSAyNi42IDUxLjkgNTUuNSA1NS41em0tMzY4IDEyOWMtNC40LS41LTggMy4xLTggNy41bDAgNDhjMCA0LjQgMy42IDggOCA4bDQ4IDBjNC40IDAgOC4xLTMuNiA3LjUtOC0zLjYtMjktMjYuNi01MS45LTU1LjUtNTUuNXoiXX0sR0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLXJ1bm5pbmciLGljb246WzQ0OCw1MTIsWzEyNzkzOSwicnVubmluZyJdLCJmNzBjIiwiTTI1Ni41LTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xMjMuNiAxNzZjLTMuMyAwLTYuMiAyLTcuNCA1TDk0LjIgMjM1LjljLTYuNiAxNi40LTI1LjIgMjQuNC00MS42IDE3LjhzLTI0LjQtMjUuMi0xNy44LTQxLjZsMjEuOS01NC45QzY3LjcgMTI5LjkgOTQuMSAxMTIgMTIzLjYgMTEybDk3LjMgMGMyOC41IDAgNTQuOCAxNS4xIDY5LjEgMzkuN2wzMi44IDU2LjMgNjEuNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02MS42IDBjLTIyLjggMC00My44LTEyLjEtNTUuMy0zMS44bC0xMC0xNy4xLTIwLjcgNzAuNCA3NS40IDIyLjZjMjcuNyA4LjMgNDEuOCAzOSAzMC4xIDY1LjVMMjg1LjcgNTA5Yy03LjIgMTYuMi0yNi4xIDIzLjQtNDIuMiAxNi4ycy0yMy40LTI2LjEtMTYuMi00Mi4ybDQ5LjItMTEwLjgtOTUuOS0yOC44Yy0zMi43LTkuOC01Mi00My43LTQzLjctNzYuOGwyMi43LTkwLjYtMzUuOSAwem0tOCAxODFjMTMuMyAxNC45IDMwLjcgMjYuMyA1MS4yIDMyLjRsNC43IDEuNC02LjkgMTkuM2MtNS44IDE2LjMtMTYgMzAuOC0yOS4zIDQxLjhMNTIuOSA1MTkuOGMtMTMuNiAxMS4yLTMzLjggOS4zLTQ1LTQuM3MtOS4zLTMzLjggNC4zLTQ1bDgyLjQtNjcuOWM0LjUtMy43IDcuOC04LjUgOS44LTEzLjlMMTE1LjYgMzU3eiJdfSxxVmU9R0IsWUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWNoZXZyb24tZG93biIsaWNvbjpbNTEyLDUxMixbImNoZXZyb24tY2lyY2xlLWRvd24iXSwiZjEzYSIsIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTEzNSAyNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4NyA4NyA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMjczIDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTM1IDI0MXoiXX0sVlZlPVlCLGpWZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLW51cnNlIixpY29uOls0NDgsNTEyLFtdLCJmODJmIiwiTTk2IDQ0LjljMC0xMi43IDcuNS0yNC4yIDE5LjItMjkuM2w5Ni00MmM4LjItMy42IDE3LjUtMy42IDI1LjcgMGw5NiA0MkMzNDQuNSAyMC43IDM1MiAzMi4yIDM1MiA0NC45bDAgOTkuMWMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOFM5NiAyMTQuNyA5NiAxNDRsMC05OS4xek0zMDQgMTI4bC0xMTEuNiAwLS40IDAtNDggMCAwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBsMC0xNnpNMjA4IDE2bDAgMTYtMTYgMGMtNC40IDAtOCAzLjYtOCA4bDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDAgMCAxNmMwIDQuNCAzLjYgOCA4IDhsMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNiAxNiAwYzQuNCAwIDgtMy42IDgtOGwwLTE2YzAtNC40LTMuNi04LTgtOGwtMTYgMCAwLTE2YzAtNC40LTMuNi04LTgtOEwyMTYgOGMtNC40IDAtOCAzLjYtOCA4ek0xNDIuNiAzMjNjLTYuNS00LjktMTUuMi02LjItMjIuNi0yLjgtNjEuNCAyOC4yLTEwNC4xIDkwLjItMTA0LjEgMTYyLjEgMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTcyLTQyLjctMTM0LTEwNC4xLTE2Mi4xLTcuNC0zLjQtMTYuMS0yLjEtMjIuNiAyLjhsLTY3IDUwLjJjLTguNSA2LjQtMjAuMyA2LjQtMjguOCAwbC02Ny01MC4yeiJdfSxaQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWtpc3Mtd2luay1oZWFydCIsaWNvbjpbNjQwLDUxMixbMTI4NTM2LCJraXNzLXdpbmstaGVhcnQiXSwiZjU5OCIsIk01NDMuNyAyNjguM2MuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNy42LTE3LjEtMTYuMS0zOC44LTIxLjgtNjEuNy03LjctMzAuNS0xNC4xLTc2LjIgOC4yLTExNC43bDIuNy00LjZjMjkuNS01MSA5NC43LTY4LjUgMTQ1LjctMzkgMiAxLjIgNCAyLjQgNS45IDMuN3pNMjQwIDMwNGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMDggMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTUyIDIwYy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdfSxVVmU9WkIsV1ZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGwiLGljb246WzUxMiw1MTIsW10sImY1NzUiLCJNMjk2IDY0YzYuOSAwIDEzLjUgMi43IDE4LjMgNy42TDQ0MC40IDE5Ny43YzQuOSA0LjkgNy42IDExLjUgNy42IDE4LjNzLTIuNyAxMy41LTcuNiAxOC4zTDM4Ni43IDI4OCA2NS4zIDI4OGMxLjMtMy45IDMuNC03LjQgNi4zLTEwLjNsOTYuNC05Ni40IDMzLjQgMzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNiAyNzcuNyA3MS42YzQuOS00LjkgMTEuNS03LjYgMTguMy03LjZ6TTEyMi43IDEzNkwyNi4zIDIzMi40QzkuNSAyNDkuMyAwIDI3Mi4xIDAgMjk2czkuNSA0Ni43IDI2LjMgNjMuNkwxNTIuNCA0ODUuN0MxNjkuMyA1MDIuNSAxOTIuMSA1MTIgMjE2IDUxMnM0Ni43LTkuNSA2My42LTI2LjNMNDg1LjcgMjc5LjZDNTAyLjUgMjYyLjcgNTEyIDIzOS45IDUxMiAyMTZzLTkuNS00Ni43LTI2LjMtNjMuNkwzNTkuNiAyNi4zQzM0Mi43IDkuNSAzMTkuOSAwIDI5NiAwcy00Ni43IDkuNS02My42IDI2LjNMMTY4IDkwLjcgMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2eiJdfSxYQj17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsLTEtd2F2ZSIsaWNvbjpbNTEyLDUxMixbIm1vbmV5LWJpbGwtd2F2ZS1hbHQiXSwiZjUzYiIsIk0wIDEwOS41TDAgNDE5LjZjMCAxOS40IDExLjggMzcuMyAzMC4zIDQzLjMgOTQgMzAgMTU4LjggOC40IDIyMy4zLTEzLjEgNjIuNC0yMC44IDEyNC40LTQxLjUgMjEyLjEtMTUuMyAyMi4yIDYuNiA0Ni4yLTguOCA0Ni4yLTMybDAtMzEwLjFjMC0xOS40LTExLjgtMzcuMy0zMC4zLTQzLjMtOTQtMzAtMTU4LjgtOC40LTIyMy4zIDEzLjEtNjIuNCAyMC44LTEyNC40IDQxLjUtMjEyLjEgMTUuMy0yMi4yLTYuNi00Ni4zIDguOC00Ni4zIDMyek0yNTYgMzY4Yy01MyAwLTk2LTUwLjEtOTYtMTEyczQzLTExMiA5Ni0xMTIgOTYgNTAuMSA5NiAxMTItNDMgMTEyLTk2IDExMnpNMTI3LjEgNDA1LjVjLjcgNC40LTIuOCA4LjEtNy4yIDguMS0xNS43IDAtMzIuMS0xLjgtNTAtNi4xLTMuNS0uOC02LTQtNi03LjdMNjQgMzYwYzAtNC40IDMuNi04LjEgOC03LjUgMjguMSAzLjUgNTAuNiAyNS4yIDU1LjIgNTN6TTQ0OCAzNTQuNmMwIDUtNC42IDguOC05LjUgOC0xNS40LTIuNS0zMC4yLTMuOS00NC40LTQuMy00LjktLjEtOC43LTQuNS03LjItOS4yIDcuMy0yMy43IDI4LTQxLjQgNTMuMi00NC42IDQuNC0uNSA4IDMuMSA4IDcuNWwwIDQyLjZ6bS04LTE5NS4xYy0yOC4xLTMuNS01MC42LTI1LjItNTUuMi01My0uNy00LjQgMi44LTguMSA3LjItOC4xIDE1LjcgMCAzMi4xIDEuOCA1MCA2LjEgMy41IC44IDYgNCA2IDcuN2wwIDM5LjljMCA0LjQtMy42IDguMS04IDcuNXptLTMyMi4xLTUuOGM0LjkgLjEgOC43IDQuNSA3LjIgOS4yLTcuMyAyMy43LTI4IDQxLjQtNTMuMiA0NC42LTQuNCAuNS04LTMuMS04LTcuNWwwLTQyLjZjMC01IDQuNi04LjggOS41LTggMTUuNCAyLjUgMzAuMiAzLjkgNDQuNCA0LjN6TTI0MCAxODhjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNDguNC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDQ4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDB6Il19LEdWZT1YQixZVmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFuZG1hcmsiLGljb246WzUxMiw1MTIsWzEyNzk2M10sImY2NmYiLCJNMjM4LjcgNS4xYzEwLjUtNi44IDI0LjEtNi44IDM0LjYgMGwyMjQgMTQ0YzExLjkgNy43IDE3LjQgMjIuMyAxMy40IDM1LjlzLTE2LjUgMjMtMzAuNyAyM2wtMzIgMCAwIDIwOCA1MS4yIDM4LjRjOC4xIDYgMTIuOCAxNS41IDEyLjggMjUuNiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyIDAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZsNTEuMi0zOC40IDAgMCAwLTIwOC0zMiAwYy0xNC4yIDAtMjYuNy05LjQtMzAuNy0yM3MxLjUtMjguMyAxMy40LTM1LjlsMjI0LTE0NHpNMzM2IDIwOGwwIDIwOCA2NCAwIDAtMjA4LTY0IDB6TTIyNCA0MTZsNjQgMCAwLTIwOC02NCAwIDAgMjA4ek0xMTIgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHoiXX0sWlZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im11c2ljIixpY29uOls1MTIsNTEyLFsxMjc5MjVdLCJmMDAxIiwiTTQ2OCA3YzcuNiA2LjEgMTIgMTUuMyAxMiAyNWwwIDMwNGMwIDQ0LjItNDMgODAtOTYgODBzLTk2LTM1LjgtOTYtODAgNDMtODAgOTYtODBjMTEuMiAwIDIyIDEuNiAzMiA0LjZsMC0xMTYuNy0yMjQgNDkuOCAwIDIwNi4zYzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MCA0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNkwxMjggOTZjMC0xNSAxMC40LTI4IDI1LjEtMzEuMmwyODgtNjRjOS41LTIuMSAxOS40IC4yIDI3IDYuM3oiXX0sWFZlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stbWVkaWNhbCIsaWNvbjpbNDQ4LDUxMixbXSwiZjdlNiIsIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sS0I9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2h1ZmZsZSIsaWNvbjpbNTEyLDUxMixbMTI4MjU2LCJyYW5kb20iXSwiZjA3NCIsIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAyMDQuOSAzODQgMTkybDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOGwtMzIuNCA0My4yLTQwLTUzLjMgMjEuMi0yOC4zQzI5My4zIDExMC4yIDMyMS44IDk2IDM1MiA5NmwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTU0IDI5Nmw0MCA1My4zLTIxLjIgMjguM0MxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOEwxNTQgMjk2ek00MzguNiA0NzAuNmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzg0IDQ2MC45IDM4NCA0NDhsMC0zMi0zMiAwYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6Il19LEtWZT1LQixRVmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidW5kZXJsaW5lIixpY29uOlszODQsNTEyLFtdLCJmMGNkIiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJTMTEzLjcgNjQgOTYgNjRsMCAxNjBjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMjcwLjMgMCAyODggMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTYwYzAgODguNC03MS42IDE2MC0xNjAgMTYwUzMyIDMxMi40IDMyIDIyNEwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek0wIDQ4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxKVmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVpbGRpbmctdXNlciIsaWNvbjpbNjQwLDUxMixbXSwiZTRkYSIsIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyMS4zYy00Ni45IDE5LTgwIDY1LTgwIDExOC43IDAgMjcuNyA4LjggNTMuNCAyMy44IDc0LjQtNTEuNSAyMS04Ny44IDcxLjYtODcuOCAxMzAuNyAwIDEgMCAxLjkgMCAyLjlsLTE3NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA2NHpNMjA4IDQwMGwwIDY0IDUzLjQgMGM3LjItMjkuNCAyMS4zLTU2LjEgNDAuNC03OC4zLTYuMS0xOS41LTI0LjMtMzMuNy00NS44LTMzLjctMjYuNSAwLTQ4IDIxLjUtNDggNDh6TTMzOSAyMjQuM2MtMS0uMi0yLS4zLTMtLjNsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNi43IDBjMi4xLTIyLjggOC40LTQ0LjMgMTguMy02My43ek0xNzYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE3NiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMjQwIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMzUyIDUxMmMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdfSxlamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicm9ib3QiLGljb246WzY0MCw1MTIsWzEyOTMwMl0sImY1NDQiLCJNMzUyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMjg4LTE3LjcgMjg4IDBsMCA2NC05NiAwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIyNGMwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAtNjR6TTE2MCAzNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTEyMCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjI0IDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTE0NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek02NCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCAyMDYuMyAwIDIyNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NnptNTQ0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXX0scDg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGx1cyIsaWNvbjpbNDQ4LDUxMixbMTAxMzMsNjE1NDMsImFkZCJdLCIyYiIsIk0yNTYgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAtMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0xNjB6Il19LHRqZT1wOCxmZz17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb3B5IixpY29uOls0NDgsNTEyLFtdLCJmMGM1IiwiTTE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIwMC42YzAtMTcuNC03LjEtMzQuMS0xOS43LTQ2LjJMMzcwLjYgMTcuOEMzNTguNyA2LjQgMzQyLjggMCAzMjYuMyAwTDE5MiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNjQgMCAwIDE2LTE5MiAwIDAtMjU2IDE2IDAgMC02NC0xNiAweiJdfSxhamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlc3Mta2luZyIsaWNvbjpbNDQ4LDUxMixbOTgxOF0sImY0M2YiLCJNMjI0LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0IDE1My44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzUyIDM4NCA0MDguMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw2Ny41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMOTYgMzg0IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTUzLjggMCAwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxpamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtZmxvb2Qtd2F0ZXIiLGljb246WzY0MCw1MTIsW10sImU1MGUiLCJNNDk2IDIwOGw0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0wzNDggMTAuNUMzNDAuMyAzLjcgMzMwLjMgMCAzMjAgMHMtMjAuMyAzLjctMjggMTAuNUwxMjEuNCAxNTkuOGMtNiA1LjItOS40IDEyLjgtOS40IDIwLjcgMCAxNS4yIDEyLjMgMjcuNSAyNy41IDI3LjVsNC41IDAgMCA5NC40YzIwLjMtOS40IDQyLjEtMTQuMiA2NC0xNC40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAxNi45LS4xIDMzLjggMi42IDUwIDhsMC04OHptLTIyNC04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc0LjYgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0MTguMyAxNy42IDQyNi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA1MTQuMyAxNy42IDUyMi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXX0scmplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJpdGNvaW4tc2lnbiIsaWNvbjpbMzIwLDUxMixbXSwiZTBiNCIsIk02NCAyNEM2NCAxMC43IDc0LjcgMCA4OCAwczI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQxLjFjNTQuMyA3LjggOTYgNTQuNCA5NiAxMTAuOSAwIDI0LjItNy43IDQ2LjYtMjAuNyA2NC45IDMxLjcgMTkuOCA1Mi43IDU1IDUyLjcgOTUuMSAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTYgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMzIgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMjIuMyAwQzE4LjcgNDQ4IDAgNDI5LjMgMCA0MDYuM0wwIDEwMS42QzAgODAuOCAxNi44IDY0IDM3LjYgNjRMNjQgNjQgNjQgMjR6bTAgMjAwbDExMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0xMTIgMCAwIDk2em0xMTIgNjRsLTExMiAwIDAgOTYgMTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTMyIDB6Il19LHNqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3giLGljb246WzQ0OCw1MTIsWzEyODIzMF0sImY0NjYiLCJNMzY5LjQgMTI4bC0zNC4zLTQ4LTIyMi4xIDAtMzQuMyA0OCAyOTAuNyAwek0wIDE0OC41YzAtMTMuMyA0LjItMjYuMyAxMS45LTM3LjJMNjAuOSA0Mi44QzcyLjkgMjYgOTIuMyAxNiAxMTIuOSAxNmwyMjIuMSAwYzIwLjcgMCA0MC4xIDEwIDUyLjEgMjYuOGw0OC45IDY4LjVjNy44IDEwLjkgMTEuOSAyMy45IDExLjkgMzcuMkw0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNDguNXoiXX0sUUI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlLXBsdXMiLGljb246WzQ0OCw1MTIsWzYxODQ2LCJwbHVzLXNxdWFyZSJdLCJmMGZlIiwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdfSxuamU9UUIsSkI9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3dzLWxlZnQtcmlnaHQiLGljb246WzU3Niw1MTIsWyJhcnJvd3MtaCJdLCJmMDdlIiwiTTQ3MC42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNDEuNCA0MS40LTM1Ny41IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTQxLjQtNDEuNCAzNTcuNSAwLTQxLjQgNDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHoiXX0sb2plPUpCLGxqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYW4iLGljb246WzUxMiw1MTIsW10sImY4NjMiLCJNMTYwIDE0NGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxNTIuMmMxNS01LjMgMzEuMi04LjIgNDgtOC4yIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgOC44LTcuMiAxNi0xNiAxNmwtMTUyLjIgMGM1LjMgMTUgOC4yIDMxLjIgOC4yIDQ4IDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0LTguOCAwLTE2LTcuMi0xNi0xNmwwLTE1Mi4yYy0xNSA1LjMtMzEuMiA4LjItNDggOC4yLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtOC44IDcuMi0xNiAxNi0xNmwxNTIuMiAwYy01LjMtMTUtOC4yLTMxLjItOC4yLTQ4em05NiAxNDRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxjamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY3JvdyIsaWNvbjpbNjQwLDUxMixbXSwiZjUyMCIsIk00NTYuNSAwYy00OC42IDAtODggMzkuNC04OCA4OGwwIDM2LTM1NS4yIDI2Ni40Qy0uOCA0MDEtMy43IDQyMSA2LjkgNDM1LjJzMzAuNiAxNyA0NC44IDYuNGw3Ni44LTU3LjYgMTMxLjMgMCA0Ni42IDExMy4xIDEgMi4yYzUuNyAxMC43IDE4LjggMTUuNSAzMC4zIDEwLjhzMTcuMy0xNy4zIDEzLjktMjlsLS44LTIuMy0zOS4xLTk0LjkgNDAuOSAwYzEuMSAwIDIuMiAwIDMuMiAwbDQ2LjYgMTEzLjIgMSAyLjJjNS43IDEwLjcgMTguOCAxNS41IDMwLjMgMTAuOHMxNy4zLTE3LjMgMTMuOS0yOWwtLjgtMi4zLTQyLTEwMkM0ODUuMyAzNTQuMSA1NDQuNSAyODAgNTQ0LjUgMTkybDAtNzIgODAuNS0yMC4xYzguNi0yLjEgMTMuOC0xMC44IDExLjYtMTkuNC03LjEtMjguNS0zMi43LTQ4LjUtNjIuMS00OC41bC01MC4xIDBDNTA4LjIgMTIuNSA0ODMuOCAwIDQ1Ni41IDB6bTAgNjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxkamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1jaXJjbGUtY2hlY2siLGljb246WzU3Niw1MTIsW10sImU1YTAiLCJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sSzU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGluay1zbGFzaCIsaWNvbjpbNTc2LDUxMixbImNoYWluLWJyb2tlbiIsImNoYWluLXNsYXNoIiwidW5saW5rIl0sImYxMjciLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTIyLTEyMmM0LjItMy40IDguMy03LjEgMTIuMS0xMC45bDcxLjEtNzEuMWMyOS4zLTI5LjMgNDUuOC02OS4xIDQ1LjgtMTEwLjYgMC04Ni40LTcwLTE1Ni41LTE1Ni41LTE1Ni41LTM3LjMgMC03My4xIDEzLjMtMTAxLjMgMzcuMiAyMC4zIDEwLjEgMzguNyAyMy41IDU0LjUgMzkuNSAxNC4xLTguMyAzMC4yLTEyLjcgNDYuOC0xMi43IDUxLjEgMCA5Mi41IDQxLjQgOTIuNSA5Mi41IDAgMjQuNS05LjcgNDgtMjcuMSA2NS40bC03MS4xIDcxLjFjLTMuOSAzLjktOC4xIDcuNC0xMi42IDEwLjVsLTQ3LjUtNDcuNWMxNi41LS45IDI5LjctMTQuNCAzMC4yLTMxLjEgMC0xLjMgMC0yLjYgMC0zLjkgMC04Ni4zLTY5LjktMTU2LjktMTU2LjUtMTU2LjktMTkuMiAwLTM3LjkgMy41LTU1LjUgMTAuMkw0MS0yNC45ek0yMjUuOSAxNjBjLjYgMCAxLjEgMCAxLjcgMCAxNS4xIDAgMjkuNSAzLjcgNDIuMSAxMC4yIDEuOCAxLjIgMy42IDIuMyA1LjUgMy4xIDI2LjggMTYuMyA0NC44IDQ1LjkgNDQuOCA3OS42IDAgLjQgMCAuOCAwIDEuMkwyMjUuOSAxNjB6TTM0Ni4yIDQxNkwxOTIgMjYxLjhjMS4yIDg0LjYgNjkuNiAxNTIuOSAxNTQuMSAxNTQuMXpNMTM5LjcgMjA5LjVsLTQ1LjMtNDUuMy00OC42IDQ4LjZjLTI5LjMgMjkuMy00NS44IDY5LjEtNDUuOCAxMTAuNiAwIDg2LjQgNzAgMTU2LjUgMTU2LjUgMTU2LjUgMzcuMiAwIDczLjEtMTMuMyAxMDEuMy0zNy4yLTIwLjMtMTAuMS0zOC44LTIzLjUtNTQuNi0zOS41LTE0IDguMi0zMC4xIDEyLjYtNDYuNyAxMi42LTUxLjEgMC05Mi41LTQxLjQtOTIuNS05Mi41IDAtMjQuNSA5LjctNDggMjcuMS02NS40bDQ4LjYtNDguNnoiXX0scGplPUs1LGhqZT1LNSx1amU9SzUsUTU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctcm90YXRlLXJpZ2h0IixpY29uOls1MTIsNTEyLFs4NjM1LCJhcnJvdy1yaWdodC1yb3RhdGUiLCJhcnJvdy1yb3RhdGUtZm9yd2FyZCIsInJlZG8iXSwiZjAxZSIsIk00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3oiXX0sZmplPVE1LG1qZT1RNSxnamU9UTUsZUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVuLWNsaXAiLGljb246WzUxMiw1MTIsWyJwZW4tYWx0Il0sImYzMDUiLCJNNDA0IDBjMTkuMiAwIDM3LjYgNy42IDUxLjEgMjEuMmwzNS43IDM1LjdDNTA0LjQgNzAuNCA1MTIgODguOCA1MTIgMTA4cy03LjYgMzcuNi0yMS4yIDUxLjFMNDQ1LjkgMjA0IDMwOCA2Ni4xIDM1Mi45IDIxLjJDMzY2LjQgNy42IDM4NC44IDAgNDA0IDB6TTI3NC4xIDEwMGwwIDAgMTM3LjkgMTM3LjktMjE1LjEgMjE1LjFjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTExLjFjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4ycy04LjUtMTUuMS02LjItMjMuNEwzNi40IDM1My44YzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4LjdMMjQwLjEgMTMzLjkgMjIzIDExNi45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw4OSAyMTdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMTU1LjEgODIuOWMyOC4xLTI4LjEgNzMuNy0yOC4xIDEwMS44IDBMMjc0LjEgMTAweiJdfSxiamU9ZUgsdmplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvb3ItY2xvc2VkIixpY29uOls0NDgsNTEyLFsxMjg2ODJdLCJmNTJhIiwiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDY0ek0zMjAgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXX0scW09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctZG93bi13aWRlLXNob3J0IixpY29uOls1NzYsNTEyLFsic29ydC1hbW91bnQtYXNjIiwic29ydC1hbW91bnQtZG93biJdLCJmMTYwIiwiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyMCA5NnoiXX0seWplPXFtLHhqZT1xbSx3amU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2FyZXQtZG93biIsaWNvbjpbMzIwLDUxMixbXSwiZjBkNyIsIk0xNDAuMyAzNzYuOGMxMi42IDEwLjIgMzEuMSA5LjUgNDIuOC0yLjJsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMDEuNCAxOTIgMjg4LjUgMTkybC0yNTYgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuNyAyMzcuNSA5LjkgMjQ2LjZsMTI4IDEyOCAyLjQgMi4yeiJdfSxNamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiayIsaWNvbjpbMzIwLDUxMixbMTA3XSwiNGIiLCJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43QzE0My40IDE2Ny4yIDc2LjQgMjM2LjMgNjQgMjQ5TDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMDcgNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3oiXX0sdEg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlY2stdG8tc2xvdCIsaWNvbjpbNTc2LDUxMixbInZvdGUteWVhIl0sImY3NzIiLCJNNTUyIDI4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDE2IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjU2IDB6bS0zNy4xIDg0LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zbC04NS42IDExNy43LTI2LjUtMjcuNGMtOS4yLTkuNS0yNC40LTkuOC0zMy45LS42LTkuNSA5LjItOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMzg0LjIgMTUwLjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il19LHpqZT10SCxramU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlzaC1maW5zIixpY29uOls1NzYsNTEyLFtdLCJlNGYyIiwiTTI3NS4yIDM4LjRjLTEwLjYtOC0yNS04LjUtMzYuMy0xLjVTMjIyIDU3LjMgMjI0LjYgNzAuM2w5LjcgNDguNmMtMTkuNCA5LTM2LjkgMTkuOS01Mi40IDMxLjUtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjcgNC45cy0xMi40IDI2LTUuMyAzOC42TDUwIDI1NiA0LjIgMzM2LjFjLTcuMiAxMi42LTUgMjguNCA1LjMgMzguNnMyNi4xIDEyLjIgMzguNyA0LjlsOTMuMS01NC4zYzExLjggMTIuMyAyNS40IDI0LjggNDAuNyAzNi4zIDE1LjUgMTEuNiAzMyAyMi41IDUyLjQgMzEuNWwtOS43IDQ4LjZjLTIuNiAxMyAzLjEgMjYuMyAxNC4zIDMzLjNzMjUuNiA2LjUgMzYuMy0xLjVsNzcuNi01OC4yYzU0LjktNCAxMDEuNS0yNyAxMzcuMi01My44IDM5LjItMjkuNCA2Ny4yLTY0LjcgODEuNi04OS41IDUuOC05LjkgNS44LTIyLjIgMC0zMi4xLTE0LjQtMjQuOC00Mi41LTYwLjEtODEuNi04OS41LTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il19LFNqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wcmVzcyIsaWNvbjpbNDQ4LDUxMixbXSwiZjA2NiIsIk0xNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTOTYgNDYuMyA5NiA2NGwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2ek0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAweiJdfSxhSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy11cC1hLXoiLGljb246WzUxMiw1MTIsWyJzb3J0LWFscGhhLXVwIl0sImYxNWUiLCJNNDEyLjYgNDkuN0M0MDcuMiAzOC44IDM5Ni4xIDMyIDM4NCAzMnMtMjMuMiA2LjgtMjguNiAxNy43Yy01MC43IDEwMS4zLTc3LjMgMTU0LjctODAgMTYwLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45Yy0yLjctNS4zLTI5LjMtNTguNy04MC0xNjB6TTM4NCAxMzUuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHpNMjg4IDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSA0ODAgMzIwIDQ4MGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjAuOSAyODggNDQ4IDI4OGwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6Il19LENqZT1hSCxfamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1ncmFkdWF0ZSIsaWNvbjpbNDQ4LDUxMixbXSwiZjUwMSIsIk0yNDEuMy0xM2MtMTEuNC0yLjMtMjMuMS0yLjMtMzQuNSAwTDE5LjMgMjQuNUM4LjEgMjYuNyAwIDM2LjYgMCA0OCAwIDU4LjMgNi41IDY3LjMgMTYgNzAuNkwxNiAxNDQgLjMgMjIyLjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNmwzNC45IDBjOCAwIDE0LjYtNi41IDE0LjYtMTQuNiAwLTEtLjEtMS45LS4zLTIuOUw0OCAxNDQgNDggNzcuMyA5NiA4Ni45IDk2IDE0NGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4bDAtNTcuMSA3Ni43LTE1LjNDNDM5LjkgNjkuMyA0NDggNTkuNCA0NDggNDhzLTguMS0yMS4zLTE5LjMtMjMuNUwyNDEuMy0xM3pNMjI0IDIyNGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMTYwIDBjMCA0NC4yLTM1LjggODAtODAgODB6TTEyMC4xIDMyMC4xQzU4LjcgMzQ4LjMgMTYgNDEwLjMgMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMTU0LjMgMCAwLTE0Ni01Ny40LTQzYy02LjUtNC45LTE1LjItNi4yLTIyLjYtMi44ek0yNDggNTEybDE1NC4zIDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC03Mi00Mi43LTEzNC0xMDQuMS0xNjIuMS03LjQtMy40LTE2LjEtMi4xLTIyLjYgMi44bC01Ny40IDQzIDAgMTQ2eiJdfSxUamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmlsZS1jb2RlIixpY29uOlszODQsNTEyLFtdLCJmMWM5IiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNTQuMiAyOTUuNmM4LjYtMTAuMSA3LjUtMjUuMi0yLjYtMzMuOHMtMjUuMi03LjUtMzMuOCAyLjZsLTQ4IDU2Yy03LjcgOS03LjcgMjIuMiAwIDMxLjJsNDggNTZjOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOGwtMzQuNi00MC40IDM0LjYtNDAuNHptMTEyLTMxLjJjLTguNi0xMC4xLTIzLjgtMTEuMi0zMy44LTIuNnMtMTEuMiAyMy44LTIuNiAzMy44bDM0LjYgNDAuNC0zNC42IDQwLjRjLTguNiAxMC4xLTcuNSAyNS4yIDIuNiAzMy44czI1LjIgNy41IDMzLjgtMi42bDQ4LTU2YzcuNy05IDcuNy0yMi4yIDAtMzEuMmwtNDgtNTZ6Il19LExqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzb2FwIixpY29uOls1MTIsNTEyLFsxMjk1MzJdLCJlMDZlIiwiTTIwOC0zMmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTMyMCA5NmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMzUyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMTYwbDExMiAwYzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDE2MCAyMjRjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTM1LjEtMTguOS02NS45LTQ3LTgyLjYgMTktMTkuOCAzMC43LTQ2LjYgMzEtNzYuMSA0NS40IDcuNiA4MCA0Ny4xIDgwIDk0LjdsMCAxMjhjMCA1My00MyA5Ni05NiA5Nkw5NiA0ODBjLTUzIDAtOTYtNDMtOTYtOTZMMCAyNTZjMC01MyA0My05NiA5Ni05NnptNjQgMTEybDE5MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xOTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHoiXX0sJGplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJlY3ljbGUiLGljb246WzUxMiw1MTIsWzk4NDIsOTg1MCw5ODUxXSwiZjFiOCIsIk0xNTIuMyA2MEMxOTguNS0yMCAzMTQtMjAgMzYwLjIgNjBsMzcuMyA2NC42IDI3LjctMTZjOC40LTQuOSAxOC45LTQuMiAyNi42IDEuN3MxMS4xIDE1LjkgOC42IDI1LjNMNDM2LjkgMjIzYy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN2wtODcuNC0yMy40Yy05LjQtMi41LTE2LjMtMTAuNC0xNy42LTIwczMuNC0xOS4xIDExLjgtMjMuOWwyNy43LTE2LTM3LjMtNjQuNmMtMjEuNi0zNy4zLTc1LjQtMzcuMy05NyAwbC01LjMgOS4xYy04LjggMTUuMy0yOC40IDIwLjUtNDMuNyAxMS43UzEzOC4yIDg0LjUgMTQ3IDY5LjFsNS4zLTkuMXpNNDQ5LjcgMjc5LjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDUuMyA5LjFjNDYuMiA4MC0xMS41IDE4MC0xMDMuOSAxODBsLTc0LjYgMCAwIDMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJsMCAzMiA3NC42IDBjNDMuMSAwIDcwLjEtNDYuNyA0OC41LTg0bC01LjMtOS4xYy04LjgtMTUuMy0zLjYtMzQuOSAxMS43LTQzLjd6TTUxIDIzNS40bC0yNy43LTE2Yy04LjQtNC45LTEzLjEtMTQuMy0xMS44LTIzLjlzOC4yLTE3LjUgMTcuNi0yMEwxMTYuNSAxNTJjMTIuOC0zLjQgMjYgNC4yIDI5LjQgMTdsMjMuNCA4Ny40YzIuNSA5LjQtLjkgMTkuMy04LjYgMjUuM3MtMTguMiA2LjYtMjYuNiAxLjdsLTI3LjctMTYtMzcuMyA2NC42Yy0yMS42IDM3LjMgNS40IDg0IDQ4LjUgODRsMTAuNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMC42IDBDMjUuMyA0ODAtMzIuNCAzODAgMTMuOCAzMDBMNTEgMjM1LjR6Il19LGlIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZ3Jpbi13aW5rIixpY29uOls1MTIsNTEyLFsiZ3Jpbi13aW5rIl0sImY1OGMiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0zMjggMTk2Yy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXX0sQWplPWlILFZtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndhdGVyLWxhZGRlciIsaWNvbjpbNjQwLDUxMixbImxhZGRlci13YXRlciIsInN3aW1taW5nLXBvb2wiXSwiZjVjNSIsIk0zNzQuNSA0MDUuN2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOCAyNS43LTQuOCAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTI0LjIgMTguMy01Mi4zIDM1LjktODMuNCAzNS45cy01OS4xLTE3LjctODMuMy0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC42LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjN6TTUxMS44IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOC0xNy41IDAtMzEuOCAxNC4yLTMxLjggMzEuOGwwIDIxMS44Yy0yMy4xLTUuMS00NC45LTQuNC02NC0uNGwwLTUxLjItMTkyIDAgMCA0OC43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0xNi4yIC4xLTMyLjQgMi43LTQ4IDhsMC0yMTYuMmMwLTUyLjkgNDIuOS05NS44IDk1LjctOTUuOCA0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjhsMCA5Ni4yIDE5MiAwIDAtOTYuMkM0MTYgNzQuOSA0NTguOSAzMiA1MTEuOCAzMnoiXX0sRGplPVZtLEVqZT1WbSxQamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZ2VtaW5pIixpY29uOls0NDgsNTEyLFtdLCJlODQ5IiwiTTM5NS40IDhjMTMuMi0xMS43IDMzLjMtMTAuNSA0NS4xIDIuNyAxMS43IDEzLjIgMTAuNSAzMy40LTIuNyA0NS4yLTIuNyAyLjQtMjMuMSAxOS44LTU4LjMgMzYuOC04LjIgNC0xNy4yIDcuOS0yNyAxMS42bDAgMzAzLjJjOS44IDMuOCAxOC44IDcuNiAyNyAxMS42IDE4LjIgOC44IDMyLjQgMTcuNyA0Mi4yIDI0LjUgMyAyLjEgNS41IDQuMSA3LjcgNS43IDEuMiAuOSAyLjMgMS42IDMuMiAyLjQgLjIgLjEgLjMgLjIgLjUgLjQgMS4zIDEuMSAyLjQgMiAzLjIgMi42IC40IC4zIC43IC42IC45IC44IC4xIC4xIC4zIC4yIC4zIC4zIDAgMCAuMSAuMSAuMSAuMWwuMSAwIDAgMCAwIDBjMy4zIDIuOSA1LjkgNi40IDcuNyAxMC4yIDUuNCAxMS4zIDMuOCAyNS4xLTUgMzUtLjMgLjQtLjcgLjctMS4xIDEuMS0xMS45IDEyLjItMzEuMiAxMy4xLTQ0IDEuNy0uMy0uMy0xLjUtMS4zLTMuNS0yLjgtLjQtLjMtLjktLjctMS41LTEuMS0xLjktMS40LTQuMi0zLjEtNy4xLTUuMS0yLjItMS41LTQuNy0zLjEtNy40LTQuOC02LjYtNC4xLTE0LjgtOC44LTI0LjQtMTMuNS03LjQtMy42LTE1LjYtNy4yLTI0LjctMTAuNS0xMy42LTUuMS0yOS05LjYtNDYuMS0xMi45LTUuNy0xLjEtMTEuNi0yLjEtMTcuNy0yLjgtMTIuMS0xLjYtMjUtMi41LTM4LjYtMi41LTU0LjIgMC05Ny40IDE0LjQtMTI3IDI4LjgtMy40IDEuNi02LjUgMy4zLTkuNSA0LjktNS4xIDIuOC05LjcgNS40LTEzLjggNy45LTMuMyAyLjEtNi4zIDQtOC45IDUuNy0xLjcgMS4yLTMuMiAyLjMtNC42IDMuMy0xLjkgMS40LTMuNSAyLjUtNC42IDMuNC0xLjQgMS4xLTIuMiAxLjgtMi41IDItMTMuMiAxMS43LTMzLjMgMTAuNS00NS4xLTIuOC0yLjItMi41LTQtNS4yLTUuMi04LjFzLTIuMS01LjktMi41LTguOWMtMS40LTEwLjIgMi4yLTIwLjggMTAuNC0yOC4yIC4yLS4yIC42LS41IDEuMi0xIC4xLS4xIC4yLS4yIC4zLS4zbDMuMi0yLjZjMS43LTEuMyAzLjctMi44IDYuMi00LjYgMS42LTEuMiAzLjMtMi41IDUuMi0zLjggOS44LTYuOCAyNC0xNS43IDQyLjItMjQuNSA4LjItNCAxNy4yLTcuOSAyNy0xMS42bDAtMzAzLjJDODYuNyAxMDAuNiA3Ny43IDk2LjcgNjkuNSA5Mi44IDM0LjMgNzUuNyAxNCA1OC4zIDExLjMgNTUuOS0xLjkgNDQuMi0zLjEgMjQgOC42IDEwLjcgMjAuMy0yLjUgNDAuNS0zLjcgNTMuNyA4IDU1LjEgOS4yIDcwLjcgMjIuMiA5Ny41IDM1LjIgMTI3LjEgNDkuNiAxNzAuMyA2NCAyMjQuNSA2NHM5Ny40LTE0LjQgMTI3LTI4LjhjMjYuOC0xMyA0Mi40LTI2IDQzLjgtMjcuMnpNMjg4LjUgMTIyLjNjLTE5LjcgMy41LTQxIDUuNy02NCA1LjdzLTQ0LjMtMi4yLTY0LTUuN2wwIDI2Ny40YzEyLjYtMi4zIDI1LjktNCAzOS45LTQuOSA3LjgtLjUgMTUuOC0uOCAyNC0uOCAyMyAwIDQ0LjQgMi4yIDY0IDUuN2wwLTI2Ny40eiJdfSxJamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidG93ZXItY2VsbCIsaWNvbjpbNTc2LDUxMixbXSwiZTU4NSIsIk01OS42IDkuOEM0Ny4zIDQuOCAzMy4zIDEwLjcgMjguNCAyMyAxNS4yIDU1LjUgOCA5MC45IDggMTI4czcuMiA3Mi41IDIwLjQgMTA1YzUgMTIuMyAxOSAxOC4yIDMxLjMgMTMuMnMxOC4yLTE5IDEzLjItMzEuM0M2MiAxODguMiA1NiAxNTguOCA1NiAxMjhzNi02MC4yIDE2LjktODdjNS0xMi4zLTEtMjYuMy0xMy4yLTMxLjN6bTQ1Ni44IDBjLTEyLjMgNS0xOC4yIDE5LTEzLjIgMzEuMyAxMC45IDI2LjggMTYuOSA1Ni4yIDE2LjkgODdzLTYgNjAuMi0xNi45IDg3Yy01IDEyLjMgMSAyNi4zIDEzLjIgMzEuM3MyNi4zLTEgMzEuMy0xMy4yYzEzLjEtMzIuNSAyMC40LTY3LjkgMjAuNC0xMDVzLTcuMi03Mi41LTIwLjQtMTA1Yy01LTEyLjMtMTktMTguMi0zMS4zLTEzLjJ6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjIgMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOWwyMC42LTQ1LjIgMjIwLjYgMCAyMC42IDQ1LjJjNy4zIDE2LjEgMjYuMyAyMy4yIDQyLjQgMTUuOXMyMy4yLTI2LjMgMTUuOS00Mi40TDM0MC4xIDE2NS4yek0zNzYuNSA0MDBsLTE3NyAwIDIxLjgtNDggMTMzLjMgMCAyMS44IDQ4ek0yODggMjA1LjNsNDQuOCA5OC43LTg5LjcgMCA0NC44LTk4Ljd6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6Il19LE5qZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2xvbi1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMTQwIiwiTTIxMy44IDguN2MxMi45IDMuMiAyMC43IDE2LjIgMTcuNSAyOS4xbC00LjYgMTguNWMxNS40IC44IDMwLjQgMy40IDQ0LjcgNy41bDkuNC0zNy42QzI4My45IDEzLjMgMjk3IDUuNSAzMDkuOCA4LjdTMzMwLjUgMjUgMzI3LjMgMzcuOEwzMTYgODIuOGMxMy41IDcuOCAyNiAxNy4xIDM3LjIgMjcuOCAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTMuMS0yLjktNi40LTUuOC05LjgtOC40TDIzOS4yIDM5MGMyNi45LTQuNiA1MS4xLTE3LjEgNzAuMS0zNS4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yYy0zNC4zIDMyLjMtODAgNTIuOC0xMzAuNSA1NC40bC03LjUgMjkuOWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNXMtMjAuNy0xNi4yLTE3LjUtMjkuMWw1LjYtMjIuNWMtMTUtMy4yLTI5LjQtOC00Mi45LTE0LjRsLTEyLjEgNDguNWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNVM2OS41IDQ4NyA3Mi43IDQ3NC4ybDE2LTYzLjlDNDQuMyAzNzMuNiAxNiAzMTguMSAxNiAyNTYgMTYgMTU5LjIgODQuOCA3OC40IDE3Ni4zIDYwbDguNC0zMy44QzE4Ny45IDEzLjMgMjAxIDUuNSAyMTMuOCA4Ljd6TTE1OCAxMzIuOWMtNDYuMSAyMS44LTc4IDY4LjctNzggMTIzLjEgMCAzMC41IDEwIDU4LjYgMjYuOSA4MS4zTDE1OCAxMzIuOXpNMTQ3LjQgMzczLjRjMTMgNy42IDI3LjMgMTMuMSA0Mi41IDE2LjFsNjUuOS0yNjMuNmMtMTIuNi0zLjgtMjUuOS01LjktMzkuOC01LjktMS44IDAtMy41IDAtNS4zIC4xTDE0Ny40IDM3My40eiJdfSxGamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGFwdG9wLWZpbGUiLGljb246WzU3Niw1MTIsW10sImU1MWQiLCJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMNDE2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OC02NCAwIDAtNDgtMjg4IDAgMCAxOTIgMTEyIDAgMCA5Ni0xNjMuMiAwQzM0LjQgMzUyIDAgMzE3LjYgMCAyNzUuMiAwIDI2NC42IDguNiAyNTYgMTkuMiAyNTZMNjQgMjU2IDY0IDY0ek01MjkuOSAyNTcuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOUw1NDQgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yNTZjMC0yNi41IDIxLjUtNDggNDgtNDhsNzYuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjEgMjAgMjAgNDcuOSA0Ny45IDgzLjkgODMuOXpNNDE2IDI3MmMwIDguOCA3LjIgMTYgMTYgMTZsNjAuMSAwLTc2LjEtNzYuMSAwIDYwLjF6Il19LHJIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhaGFpIixpY29uOls1NzYsNTEyLFsiaGF5a2FsIl0sImY2NjYiLCJNMjg4LjQtOGMxMy4yIDAgMjUgOC4xIDI5LjggMjAuNGwzMS45IDgyIDc3LjItNDIuM2MxMS42LTYuMyAyNS44LTQuOSAzNS45IDMuNXMxNCAyMi4zIDkuNyAzNC44bC0yOC4yIDgzLjMgODYuMyAxNy4yYzEyLjkgMi42IDIzIDEyLjggMjUuMyAyNS44cy0zLjYgMjYuMS0xNC45IDMyLjlsLTc1LjIgNDUuNyA1NSA2OC42YzguMyAxMC4zIDkuMyAyNC42IDIuNyAzNnMtMTkuNSAxNy42LTMyLjYgMTUuNmwtODctMTMuMy0yIDg4Yy0uMyAxMy4yLTguNiAyNC44LTIxIDI5LjRzLTI2LjMgMS0zNS05bC01OC02Ni4xLTU4IDY2LjFjLTguNyA5LjktMjIuNiAxMy41LTM1IDlzLTIwLjgtMTYuMi0yMS0yOS40bC0yLTg4LTg3IDEzLjNjLTEzIDItMjYtNC4yLTMyLjYtMTUuNnMtNS41LTI1LjcgMi43LTM2bDU1LTY4LjYtNzUuMi00NS43Yy0xMS4zLTYuOC0xNy4yLTE5LjktMTQuOS0zMi45czEyLjMtMjMuMiAyNS4zLTI1LjhsODYuMy0xNy4yLTI4LjItODMuM2MtNC4yLTEyLjUtLjQtMjYuMyA5LjctMzQuOHMyNC40LTkuOSAzNS45LTMuNWw3Ny4xIDQyLjMgMzEuOS04MkMyNjMuMyAuMSAyNzUuMi04IDI4OC40LTh6bTAgMTIwLjJMMjczIDE1MS42Yy0zLjMgOC42LTEwLjIgMTUuMy0xOC45IDE4LjVzLTE4LjIgMi40LTI2LjMtMmwtMzctMjAuMyAxMy42IDQwYzMgOC43IDIgMTguMy0yLjYgMjYuM3MtMTIuNCAxMy42LTIxLjUgMTUuNGwtNDEuNCA4LjMgMzYuMSAyMS45YzcuOSA0LjggMTMuMyAxMi43IDE0LjkgMjEuOHMtLjggMTguNC02LjUgMjUuNmwtMjYuNCAzMyA0MS44LTYuNGM5LjEtMS40IDE4LjQgMS4yIDI1LjQgNy4xczExLjIgMTQuNiAxMS40IDIzLjhsLjkgNDIuMiAyNy45LTMxLjhjNi4xLTYuOSAxNC44LTEwLjkgMjQuMS0xMC45czE4IDQgMjQuMSAxMC45bDI3LjkgMzEuOCAuOS00Mi4yYy4yLTkuMiA0LjQtMTcuOSAxMS40LTIzLjhzMTYuMy04LjUgMjUuNC03LjFsNDEuOCA2LjQtMjYuNC0zM2MtNS44LTcuMi04LjItMTYuNS02LjYtMjUuNnM3LTE3IDE0LjktMjEuOGwzNi4xLTIxLjktNDEuNC04LjNjLTktMS44LTE2LjktNy40LTIxLjUtMTUuNHMtNS41LTE3LjYtMi42LTI2LjNsMTMuNi00MC0zNyAyMC4zYy04LjEgNC40LTE3LjcgNS4yLTI2LjMgMnMtMTUuNS05LjktMTguOS0xOC41bC0xNS4zLTM5LjR6Il19LE9qZT1ySCxzSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1iaWxsLTEiLGljb246WzUxMiw1MTIsWyJtb25leS1iaWxsLWFsdCJdLCJmM2QxIiwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0xOTIgODBhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek02NCAxODRsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxNDRjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek00NDAgMTkxLjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTQ0OCAzMjhsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdfSxSamU9c0gsbkg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2xvdWQtYm9sdCIsaWNvbjpbNTEyLDUxMixbMTI3Nzg1LCJ0aHVuZGVyc3Rvcm0iXSwiZjc2YyIsIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDM4LjYgMCAxMjQuMS0xMTFjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43TDM1NC4xIDMyMCA0MTYgMzIwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE2MC42IDQwMGw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM2Mi41IDM5Ni45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxNDkuNSAzNzEuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXX0sQmplPW5ILEhqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJldGhlcm5ldCIsaWNvbjpbNTEyLDUxMixbXSwiZjc5NiIsIk0wIDIyNEwwIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMTYwIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il19LG9IPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhyeXZuaWEtc2lnbiIsaWNvbjpbMzg0LDUxMixbODM3MiwiaHJ5dm5pYSJdLCJmNmYyIiwiTTMzNiAxNDkuNEMzMzYgNzcgMjY4LjUgMjMuNSAxOTggNDAuMUw5My4yIDY0LjlDNzYgNjguOSA2NS40IDg2LjIgNjkuNCAxMDMuNHMyMS4zIDI3LjkgMzguNSAyMy44bDEwNC44LTI0LjdjMzAuMy03LjEgNTkuMyAxNS44IDU5LjMgNDYuOSAwIDE3LjYtOS42IDMzLjgtMjUgNDIuM2wtLjcgLjQtMjIyLjMgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIuNCAwYzUuNS0xMy4zIDguNC0yNy44IDguNC00Mi42ek0zNjAgMjcyTDI0IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy4zIDBjLTYuMSAxMy40LTkuMyAyOC4xLTkuMyA0My4zIDAgNjQuMSA1Ni45IDExMy40IDEyMC40IDEwNC4ybDEzNy45LTE5LjljMTcuNS0yLjUgMjkuNi0xOC43IDI3LjEtMzYuMnMtMTguOC0yOS42LTM2LjItMjcuMUwxNTkuMiA0MDQuMmMtMjQuOSAzLjYtNDcuMi0xNS43LTQ3LjItNDAuOSAwLTE1LjEgOC4yLTI4LjkgMjEuNC0zNi4ybDEzLTcuMSAyMTMuNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0eiJdfSxxamU9b0gsbWc9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXllLXNsYXNoIixpY29uOls1NzYsNTEyLFtdLCJmMDcwIiwiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6Il19LGxIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNhcnQtZmxhdGJlZC1zdWl0Y2FzZSIsaWNvbjpbNTc2LDUxMixbImx1Z2dhZ2UtY2FydCJdLCJmNTlkIiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNC43IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2bC0xOTcuNSAwYzEuOCA1IDIuNyAxMC40IDIuNyAxNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTYgMS4xLTExLjcgMy4xLTE3LTM4LjEtNi4yLTY3LjEtMzkuMi02Ny4xLTc5TDY0IDgwYzAtOC44LTcuMi0xNi0xNi0xNkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek0xNzYgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDAgMC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01Nmw2NCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMjQgMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE0NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjQwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTQ0ek0zODQgOTZsMC0yNGMwLTQuNC0zLjYtOC04LThsLTY0IDBjLTQuNCAwLTggMy42LTggOGwwIDI0IDgwIDB6Il19LFZqZT1sSCxqamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicmFkaWF0aW9uIixpY29uOls1NzYsNTEyLFtdLCJmN2I5IiwiTTQ0Ni4yIDM0LjVjLTE0LjItMTAuMS0zMy41LTQuNi00Mi4yIDEwLjVMMzMxLjYgMTcwLjNjMzEuMyAxNS44IDUyLjggNDguMyA1Mi44IDg1LjdsMTQ0IDBjMTcuNyAwIDMyLjItMTQuNCAzMC4xLTMxLjktOS4xLTc4LjEtNTEuNC0xNDYuMS0xMTIuMy0xODkuNnpNMTcyLjcgNDQuOUMxNjQgMjkuOCAxNDQuNyAyNC4zIDEzMC41IDM0LjUgNjkuNiA3Ny45IDI3LjMgMTQ1LjkgMTguMiAyMjQuMSAxNi4xIDI0MS42IDMwLjcgMjU2IDQ4LjMgMjU2bDE0NCAwYzAtMzcuNSAyMS41LTY5LjkgNTIuOC04NS43TDE3Mi43IDQ0Ljl6bS05LjQgNDE2LjhjLTguNyAxNS4xLTMuOCAzNC41IDEyIDQxLjggMzQuNCAxNS43IDcyLjcgMjQuNSAxMTMgMjQuNXM3OC42LTguOCAxMTMtMjQuNWMxNS44LTcuMiAyMC43LTI2LjcgMTItNDEuOEwzNDEgMzM2LjNjLTE1LjEgOS45LTMzLjIgMTUuNy01Mi42IDE1LjdzLTM3LjUtNS44LTUyLjYtMTUuN0wxNjMuMyA0NjEuN3pNMjg4LjMgMzA0YTQ4IDQ4IDAgMSAwIC0uNy05NiA0OCA0OCAwIDEgMCAuNyA5NnoiXX0sVWplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtd29yZCIsaWNvbjpbMzg0LDUxMixbXSwiZjFjMiIsIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTM1LjQgMjc0LjhjLTIuOS0xMi45LTE1LjctMjEuMS0yOC42LTE4LjJzLTIxLjEgMTUuNy0xOC4yIDI4LjZsMzIgMTQ0YzIuMyAxMC41IDExLjQgMTguMiAyMi4yIDE4LjhzMjAuNi02LjEgMjQtMTYuNGwyNS4yLTc1LjcgMjUuMiA3NS43YzMuNCAxMC4yIDEzLjIgMTYuOSAyNCAxNi40czE5LjktOC4yIDIyLjItMTguOGwzMi0xNDRjMi45LTEyLjktNS4zLTI1LjgtMTguMi0yOC42cy0yNS44IDUuMy0yOC42IDE4LjJsLTEzLjIgNTkuNC0yMC42LTYxLjhjLTMuMy05LjgtMTIuNC0xNi40LTIyLjgtMTYuNHMtMTkuNSA2LjYtMjIuOCAxNi40bC0yMC42IDYxLjgtMTMuMi01OS40eiJdfSxjSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiZWQtcHVsc2UiLGljb246WzY0MCw1MTIsWyJwcm9jZWR1cmVzIl0sImY0ODciLCJNNTMxLjItMjIuNEw1NzIgMzIgNjE2IDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwYy03LjYgMC0xNC43LTMuNi0xOS4yLTkuNmwtMjQuMS0zMi4xLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDM4Ny4yIDgwIDM0NCA4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41YzMuNi03LjYgMTAuOS0xMi44IDE5LjMtMTMuN3MxNi42IDIuNyAyMS42IDkuNXpNMzIwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5LjUgMCAyNi42IDM5LjljMTQuNCAyMS42IDM5LjMgMzMuOCA2NS4yIDMxLjlzNDguOC0xNy42IDU5LjgtNDEuMUw1MjcgMTI5LjJjNDUuOSA3LjIgODEgNDYuOSA4MSA5NC44bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtNDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgMjI0IDIyNCAwIDAtMTI4ek0xNDQgMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXX0sV2plPWNILEdqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50cyIsaWNvbjpbNTc2LDUxMixbXSwiZTU4MiIsIk01MzkuOSAzNTJsLTk1LjYgMC04LjQtNjYuMWMtMi45LTIzLjItMTUuOS00My45LTM1LjQtNTYuOEwyNTIuMiAxMzEuNWMtMTgtMTEuOS0zOS43LTE1LjctNjAuMS0xMS41IDIuNS00LjMgNS45LTcuOSAxMC4xLTEwLjdMMzUwLjYgMTEuNmMxMC43LTcgMjQuNS03IDM1LjIgMGwxNDguNCA5Ny43YzcuOCA1LjEgMTMgMTMuNCAxNC4yIDIyLjdsMjMuMyAxODRjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2ek00LjggNDc2bDIzLjMtMTg0YzEuMi05LjMgNi4zLTE3LjYgMTQuMi0yMi43bDE0OC40LTk3LjdjMTAuNy03IDI0LjUtNyAzNS4yIDBsMTQ4LjQgOTcuN2M3LjggNS4xIDEzIDEzLjQgMTQuMiAyMi43bDIzLjMgMTg0YzIuNCAxOS4xLTEyLjUgMzYtMzEuNyAzNmwtNDkuNyAwYy0xMS4yIDAtMjEuNS01LjgtMjcuMy0xNS40bC03Ny0xMjYuN2MtMS43LTIuOC00LjgtNC42LTguMS00LjYtNS4zIDAtOS41IDQuMy05LjUgOS41bDAgMTA1LjJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzYuNSA1MTJjLTE5LjMgMC0zNC4yLTE2LjktMzEuNy0zNnoiXX0sZ2c9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibXVnLWhvdCIsaWNvbjpbNTc2LDUxMixbOTc0OV0sImY3YjYiLCJNMTUyLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMxODMuNSAzMS43IDE3NiAyNC4xIDE3NiA4IDE3Ni01LjMgMTY1LjMtMTYgMTUyLTE2ek05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNDEuOCAwIDc3LjQtMjYuNyA5MC41LTY0bDUuNSAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzUxOC43IDE5MiA0NDggMTkyTDk2IDE5MnpNNDQ4IDM4NGwwLTEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNMjg4IDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjQwLTUuMyAyNDAgOGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyOTUuNSAzMS43IDI4OCAyNC4xIDI4OCA4eiJdfSxkSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib2x0IixpY29uOls0NDgsNTEyLFs5ODg5LCJ6YXAiXSwiZjBlNyIsIk0zMzguOC05LjljMTEuOSA4LjYgMTYuMyAyNC4yIDEwLjkgMzcuOEwyNzEuMyAyMjQgNDE2IDIyNGMxMy41IDAgMjUuNSA4LjQgMzAuMSAyMS4xcy43IDI2LjktOS42IDM1LjVsLTI4OCAyNDBjLTExLjMgOS40LTI3LjQgOS45LTM5LjMgMS4zcy0xNi4zLTI0LjItMTAuOS0zNy44TDE3Ni43IDI4OCAzMiAyODhjLTEzLjUgMC0yNS41LTguNC0zMC4xLTIxLjFzLS43LTI2LjkgOS42LTM1LjVsMjg4LTI0MGMxMS4zLTkuNCAyNy40LTkuOSAzOS4zLTEuM3oiXX0sWWplPWRILFpqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJqYXIiLGljb246WzMyMCw1MTIsW10sImU1MTYiLCJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTkyeiJdfSxYamU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJ1Y2stcGxhbmUiLGljb246WzY0MCw1MTIsW10sImU1OGYiLCJNMTQ0IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAzMjBjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgMjcuM2MwIDcuMSAuOSAxNC4xIDIuNyAyMC43TDE5MiA0ODAgODMuOSA1MDdDNzMuOCA1MDkuNiA2NCA1MDEuOSA2NCA0OTEuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNzQtNTkuMiAwLTU3LjYtMTIyLjEgNDguOEMxMS40IDM5NS40IDAgMzg3LjcgMCAzNzYuNGwwLTQ0YzAtOCAzLTE1LjYgOC4zLTIxLjVMMTQ0IDE2MS42IDE0NCA0OHptMjI0IDgwbDE5MiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTYwYzAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMtMTkuNC0xNC42LTMyLTM3LjgtMzItNjRsMC0xNjBjMC00NC4yIDM1LjgtODAgODAtODB6bTAgMTc2bDE5MiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyem0wIDg4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjE2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LEtqZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmctaGVhcnQiLGljb246WzU3Niw1MTIsW10sImY0YmUiLCJNMjc5LjYgMzFDMjY1LjUgMTEuNSAyNDIuOSAwIDIxOC45IDAgMTc3LjUgMCAxNDQgMzMuNSAxNDQgNzQuOWwwIDIuNGMwIDY0LjQgODIgMTMzLjQgMTIyLjIgMTYzLjMgMTMgOS43IDMwLjUgOS43IDQzLjUgMCA0MC4yLTMwIDEyMi4yLTk4LjkgMTIyLjItMTYzLjNsMC0yLjRjMC00MS40LTMzLjUtNzQuOS03NC45LTc0LjktMjQgMC00Ni42IDExLjUtNjAuNyAzMUwyODggNDIuNyAyNzkuNiAzMXpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il19LG1sPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXJvdGF0ZS1sZWZ0IixpY29uOls1MTIsNTEyLFs4NjM0LCJhcnJvdy1sZWZ0LXJvdGF0ZSIsImFycm93LXJvdGF0ZS1iYWNrIiwiYXJyb3ctcm90YXRlLWJhY2t3YXJkIiwidW5kbyJdLCJmMGUyIiwiTTI1NiA2NGMtNTYuOCAwLTEwNy45IDI0LjctMTQzLjEgNjRsNDcuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBTNjQgMTQuMyA2NCAzMmwwIDU0LjdDMTEwLjkgMzMuNiAxNzkuNSAwIDI1NiAwIDM5Ny40IDAgNTEyIDExNC42IDUxMiAyNTZTMzk3LjQgNTEyIDI1NiA1MTJjLTg3IDAtMTYzLjktNDMuNC0yMTAuMS0xMDkuNy0xMC4xLTE0LjUtNi42LTM0LjQgNy45LTQ0LjZzMzQuNC02LjYgNDQuNiA3LjljMzQuOCA0OS44IDkyLjQgODIuMyAxNTcuNiA4Mi4zIDEwNiAwIDE5Mi04NiAxOTItMTkyUzM2MiA2NCAyNTYgNjR6Il19LFFqZT1tbCxKamU9bWwsZVVlPW1sLHRVZT1tbCxwSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWFuZ3J5IixpY29uOls1MTIsNTEyLFsxMjg1NDQsImFuZ3J5Il0sImY1NTYiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMjU2IDM2OGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il19LGFVZT1wSCxpVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVyc3QiLGljb246WzUxMiw1MTIsW10sImU0ZGMiLCJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN1MtMi4zIDI4IDQuMiAzNy42bDExMiAxNjMuMy05OS42IDMyLjNDNi43IDIzNi40IDAgMjQ1LjYgMCAyNTZzNi43IDE5LjYgMTYuNiAyMi44bDEwMy4xIDMzLjQtNTIuOSAxMDAuNmMtNC45IDkuMy0zLjIgMjAuNyA0LjMgMjguMXMxOC44IDkuMiAyOC4xIDQuM2wxMDAuNi01Mi45IDMzLjQgMTAzLjFjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42czE5LjYtNi43IDIyLjgtMTYuNmwzMy40LTEwMy4xIDEwMC42IDUyLjljOS4zIDQuOSAyMC43IDMuMiAyOC4xLTQuM3M5LjItMTguOCA0LjMtMjguMWwtNTIuOS0xMDAuNiAxMDMuMS0zMy40YzkuOS0zLjIgMTYuNi0xMi40IDE2LjYtMjIuOHMtNi43LTE5LjYtMTYuNi0yMi44bC0xMDYuNS0zNC41IDI1LjctNzAuNGMzLjItOC44IDEtMTguNi01LjYtMjUuMnMtMTYuNC04LjgtMjUuMi01LjZsLTcwLjQgMjUuNy0zNC41LTEwNi41QzI3NS42IDYuNyAyNjYuNCAwIDI1NiAwcy0xOS42IDYuNy0yMi44IDE2LjZMMjAwLjkgMTE2LjIgMzcuNiA0LjJ6Il19LHJVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ6IixpY29uOlszODQsNTEyLFsxMjJdLCI1YSIsIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDMyMCAwYzEyLjQgMCAyMy43IDcuMiAyOSAxOC40czMuNiAyNC41LTQuNCAzNC4xTDEwMC4zIDQxNiAzNTIgNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTIuNCAwLTIzLjctNy4yLTI5LTE4LjRzLTMuNi0yNC41IDQuNC0zNC4xTDI4My43IDk2IDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6Il19LGhIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhbmRhZ2UiLGljb246WzU3Niw1MTIsWzEyOTY1NywiYmFuZC1haWQiXSwiZjQ2MiIsIk00NjQgNDE2bDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ4IDAgMCAzMjB6TTQxNiA5NmwtMjU2IDAgMCAzMjAgMjU2IDAgMC0zMjB6TTY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0OCAwIDAtMzIwLTQ4IDB6TTIxNiAyMDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjE2IDMwNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdfSxzVWU9aEgsblVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU1NiIsIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDc4IDcxLjVjLTY5LjMgMjktMTE4IDk3LjQtMTE4IDE3Ny4yIDAgNDkuMyAxOC42IDk0LjMgNDkuMSAxMjguM0wyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il19LG9VZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJidXMtc2lkZSIsaWNvbjpbNjQwLDUxMixbXSwiZTgxZCIsIk00ODAgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNS42IDBjLTEzLjIgMzcuMy00OC42IDY0LTkwLjQgNjRzLTc3LjMtMjYuNy05MC40LTY0bC0xMzkuMSAwYy0xMy4yIDM3LjMtNDguNyA2NC05MC40IDY0cy03Ny4yLTI2LjctOTAuNC02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDgwIDB6TTE2MCAzNjhhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2em0zMjAgMGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTAtMzA0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6TTI0OCAyMjRsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTA0IDAgMCAxNjB6TTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwIDAtMTYwLTEwNCAweiJdfSxsVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVncyIsaWNvbjpbNTc2LDUxMixbXSwiZTRkMCIsIk00NDcuNSAxNzQuNmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43YzI2LjcgMTMuNSA0Ni4zIDM5LjEgNTEuNCA2OS42bDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMMjk2IDQzMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtMzItMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNS4zIDBjNS4xLTMwLjUgMjQuNy01Ni4xIDUxLjQtNjkuNmwtMjIuOS0yNi43Yy04LjYtMTAuMS03LjUtMjUuMiAyLjYtMzMuOHMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6bS0yNTYtMTkyYzguOC04LjQgMjIuNy04LjkgMzIuMi0uOHMxMSAyMS45IDQuMSAzMS45bC0xLjUgMS45LTIzIDI2LjdDMjMwIDU1LjkgMjQ5LjUgODEuNSAyNTQuNyAxMTJsMjUuMyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgMzIgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjUuMyAwYy03LjYgNDUuNC00Ny4xIDgwLTk0LjcgODBzLTg3LTM0LjYtOTQuNy04MEw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwQzcwLjUgODEuNSA5MCA1NS45IDExNi43IDQyLjRMOTMuOCAxNS42Qzg1LjIgNS42IDg2LjMtOS42IDk2LjQtMTguMnMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6Il19LHVIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJlZXItbXVnLWVtcHR5IixpY29uOls1NzYsNTEyLFsiYmVlciJdLCJmMGZjIiwiTTY0IDgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI4OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYgNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEwOC4yYzAgMjQuMi0xMy43IDQ2LjQtMzUuNCA1Ny4yTDQ0OCAzNzEuOCA0NDggMzg0YzAgNTMtNDMgOTYtOTYgOTZsLTE5MiAwYy01MyAwLTk2LTQzLTk2LTk2TDY0IDgwek00NDggMzAwLjJsNjQtMzIgMC0xMDguMi02NCAwIDAgMTQwLjJ6TTE5MiAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHptODggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4em04OCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6Il19LGNVZT11SCxkVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS1jaGVjayIsaWNvbjpbNjQwLDUxMixbXSwiZTUzZSIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdfSxwVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RhcGxlciIsaWNvbjpbNjQwLDUxMixbXSwiZTVhZiIsIk02NDAgMjk5LjNMNjQwIDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDAgMC00OC0zNTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTYuNi0zMC4yLTUuNGMtMTkuNi0zLjUtMzMuOC0yMC41LTMzLjgtNDAuNCAwLTguOSAyLjktMTcuNSA4LjItMjQuNmwzNS42LTQ3LjVjMzIuOC00My44IDg0LjQtNjkuNiAxMzkuMS02OS42IDI3IDAgNTMuNiA2LjMgNzcuOCAxOC40TDU4Ni45IDIxMy41QzYxOS41IDIyOS43IDY0MCAyNjMgNjQwIDI5OS4zek00NDggMzA0bDAtMTYtMzIwLTU3LjEgMCA3My4xIDMyMCAweiJdfSxoVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtbWVkaWNhbC1jaXJjbGUtY2hlY2siLGljb246WzY0MCw1MTIsW10sImU1MTEiLCJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il19LHVVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJuYWlyYS1zaWduIixpY29uOls0NDgsNTEyLFtdLCJlMWY2IiwiTTEyMi42IDQ2LjNjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzY0IDQ5LjkgNjQgNjRsMCAxOTItMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDQgODkuNSAwIDEwNy44IDE2MS44YzcuOCAxMS43IDIyLjQgMTcgMzUuOSAxMi45UzM4NCA0NjIuMSAzODQgNDQ4bDAtMTQ0IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTItNTcuNSAwLTEzOS44LTIwOS43ek0yOTQuNSAzMDRsMjUuNSAwIDAgMzguMy0yNS41LTM4LjN6TTE4NS41IDI1NmwtNTcuNSAwIDAtODYuMyA1Ny41IDg2LjN6Il19LGptPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6IndpZmkiLGljb246WzU3Niw1MTIsWyJ3aWZpLTMiLCJ3aWZpLXN0cm9uZyJdLCJmMWViIiwiTTI4OCA5NmMtOTAuOSAwLTE3My4yIDM2LTIzMy43IDk0LjYtMTIuNyAxMi4zLTMzIDEyLTQ1LjItLjdzLTEyLTMzIC43LTQ1LjJDODEuNyA3NC45IDE3OS45IDMyIDI4OCAzMlM0OTQuMyA3NC45IDU2Ni4zIDE0NC43YzEyLjcgMTIuMyAxMyAzMi42IC43IDQ1LjJzLTMyLjYgMTMtNDUuMiAuN0M0NjEuMiAxMzIgMzc4LjkgOTYgMjg4IDk2ek0yNDAgNDMyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAzMjYuMmMtMTEuNyAxMy4zLTMxLjkgMTQuNS00NS4yIDIuOHMtMTQuNS0zMS45LTIuOC00NS4yQzE2MSAyMzcuNCAyMjEuMSAyMDggMjg4IDIwOHMxMjcgMjkuNCAxNjggNzUuOGMxMS43IDEzLjMgMTAuNCAzMy41LTIuOCA0NS4ycy0zMy41IDEwLjQtNDUuMi0yLjhDMzc4LjYgMjkyLjkgMzM1LjggMjcyIDI4OCAyNzJzLTkwLjYgMjAuOS0xMjAgNTQuMnoiXX0sZlVlPWptLG1VZT1qbSxoOD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtb25leS1jaGVjay1kb2xsYXIiLGljb246WzUxMiw1MTIsWyJtb25leS1jaGVjay1hbHQiXSwiZjUzZCIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMjk2IDI4OGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bS0yNC04OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDggMTQ0YzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Qzk0LjUgMjY4IDc2IDI0Ni4xIDc2IDIyMC41IDc2IDE5MS43IDk5LjIgMTY4LjMgMTI4IDE2OGwwLTRjMC0xMSA5LTIwIDIwLTIweiJdfSxnVWU9aDgsZkg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZXllLWxvdy12aXNpb24iLGljb246WzU3Niw1MTIsWyJsb3ctdmlzaW9uIl0sImYyYTgiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0yMDQuNSAxMzguN2MyMy41LTE2LjggNTIuNC0yNi43IDgzLjUtMjYuNyA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDMxLjEtOS45IDU5LjktMjYuNyA4My41bC0zNC43LTM0LjdjMTIuNy0yMS40IDE3LTQ3LjcgMTAuMS03My43LTEzLjctNTEuMi02Ni40LTgxLjYtMTE3LjYtNjcuOS04LjYgMi4zLTE2LjcgNS43LTI0IDEwbC0zNC43LTM0Ljd6TTg4IDE1Ny45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDMyOC4yIDQ2NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMODggMTU3Ljl6TTQ1LjcgMjUxLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMTgxLjkgNDU1LjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ1LjcgMjUxLjN6Il19LGJVZT1mSCxtSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaXJjbGUtYXJyb3ctdXAiLGljb246WzUxMiw1MTIsWyJhcnJvdy1jaXJjbGUtdXAiXSwiZjBhYSIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTctMzc3bDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTM5LTM5IDAgMTUwLjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNTAuMS0zOSAzOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXX0sdlVlPW1ILHlVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYW1lcmEtcmV0cm8iLGljb246WzUxMiw1MTIsWzEyODI0N10sImYwODMiLCJNMCA0MTZsMC0yMDggMTM2LjIgMGMxMy41LTIwLjIgMzItMzYuOCA1My43LTQ4TDAgMTYwIDAgMTI1LjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjEgMEM2NS4zIDQ1LjEgNzkuMSAzMiA5NiAzMmwzMiAwYzE2LjkgMCAzMC43IDEzLjEgMzEuOSAyOS43bDMyLjEgMCA1MS4yLTIzLjhjOC40LTMuOSAxNy42LTYgMjYuOS02TDQ0OCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0LTE5MCAwYzIxLjcgMTEuMiA0MC4yIDI3LjggNTMuNyA0OGwxMzYuMiAwIDAgMjA4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI1NiAxOTJhOTYuMSA5Ni4xIDAgMSAwIDAgMTkyLjEgOTYuMSA5Ni4xIDAgMSAwIDAtMTkyLjF6Il19LHhVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXBzdWxlcyIsaWNvbjpbNTc2LDUxMixbXSwiZjQ2YiIsIk05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyem0tNjQgMGwwIDI4OGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEybDAtMTA1LjggMTE2LjMgMTY5LjVjMzUuNSA1MS43IDEwNS4zIDY0LjMgMTU2IDI4LjFzNjMtMTA3LjUgMjcuNS0xNTkuMkw0MjcuMyAxNDUuM2MtMzUuNS01MS43LTEwNS4zLTY0LjMtMTU2LTI4LjEtNS42IDQtMTAuNyA4LjQtMTUuMyAxMy4xbDAtMTguM0MyNTYgNTAuMSAyMDUuOSAwIDE0NCAwUzMyIDUwLjEgMzIgMTEyek0yOTYuNiAyNDAuMmMtMTYtMjMuMy0xMC01NS4zIDExLjktNzEgMjEuMi0xNS4xIDUwLjUtMTAuMyA2NiAxMi4ybDY3IDk3LjYtNzkuOSA1NS45LTY1LTk0Ljh6Il19LHdVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwb28iLGljb246WzUxMiw1MTIsWzEyODE2OV0sImYyZmUiLCJNMjY4LjkgLjljLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS40YzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjEgMCA0NC4xLTM1LjcgNzkuOS03OS44IDgwTDE2MCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0IDAgMTkuMSA4LjQgMzYuMyAyMS43IDQ4TDEwNCAyNDBjLTM5LjggMC03MiAzMi4yLTcyIDcyIDAgMjMuMiAxMSA0My44IDI4IDU3LTM0LjEgNS43LTYwIDM1LjMtNjAgNzEgMCAzOS44IDMyLjIgNzIgNzIgNzJsMzY4IDBjMzkuOCAwIDcyLTMyLjIgNzItNzIgMC0zNS43LTI1LjktNjUuMy02MC03MSAxNy0xMy4yIDI4LTMzLjggMjgtNTcgMC0zOS44LTMyLjItNzItNzItNzJsLTEzLjcgMGMxMy4zLTExLjcgMjEuNy0yOC45IDIxLjctNDggMC0zNS4zLTI4LjctNjQtNjQtNjRsLTUuNSAwYzMuNS0xMCA1LjUtMjAuOCA1LjUtMzIgMC00OC42LTM2LjItODguOC04My4xLTk1LjF6TTE5MiAyNTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem02NCAxMDguM2MwIDIuNC0uNyA0LjgtMi4yIDYuNy04LjIgMTAuNS0zOS41IDQ1LTkzLjggNDVzLTg1LjYtMzQuNi05My44LTQ1Yy0xLjUtMS45LTIuMi00LjMtMi4yLTYuNyAwLTYuOCA1LjUtMTIuMyAxMi4zLTEyLjNsMTY3LjQgMGM2LjggMCAxMi4zIDUuNSAxMi4zIDEyLjN6Il19LGdIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InZvbHVtZSIsaWNvbjpbNTEyLDUxMixbMTI4MjY1LCJ2b2x1bWUtbWVkaXVtIl0sImY2YTgiLCJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTQ0MS4xIDEwN2MtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzQ0My4zIDE3MC43IDQ2NCAyMTAuOSA0NjQgMjU2cy0yMC43IDg1LjMtNTMuMiAxMTEuOGMtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNWM0My4yLTM1LjIgNzAuOS04OC45IDcwLjktMTQ5cy0yNy43LTExMy44LTcwLjktMTQ5em0tNjAuNSA3NC41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzYxLjEgMjI3LjYgMzY4IDI0MSAzNjggMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDAyLjEgMzEyLjkgNDE2IDI4Ni4xIDQxNiAyNTZzLTEzLjktNTYuOS0zNS41LTc0LjV6Il19LE1VZT1nSCx6VWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZWxldmF0b3IiLGljb246WzUxMiw1MTIsW10sImUxNmQiLCJNMjkyLjctNC43bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTNDM4LjUtMzIgNDMyLTMyTDMwNC0zMmMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40em0tMTYwLTIyLjZsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40UzczLjUgNjQgODAgNjRsMTI4IDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTY0LTY0Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnptMTkyIDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0zMi0xMjhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXX0sa1VlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhZyIsaWNvbjpbNTEyLDUxMixbMTI3OTkxXSwiZjAyYiIsIk0zMi41IDk2bDAgMTQ5LjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTkyIDE5MmMyNSAyNSA2NS41IDI1IDkwLjUgMEw0ODMuMiAzMzMuM2MyNS0yNSAyNS02NS41IDAtOTAuNWwtMTkyLTE5MkMyNzkuMiAzOC43IDI2MyAzMiAyNDYgMzJMOTYuNSAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTExMiAxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LFNVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWNpcmNsZS1taW51cyIsaWNvbjpbNTc2LDUxMixbXSwiZTRlZCIsIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6Il19LGJIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRvd24tbG9uZyIsaWNvbjpbMzIwLDUxMixbImxvbmctYXJyb3ctYWx0LWRvd24iXSwiZjMwOSIsIk0xMzcuNCA1MzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMC45IDM1MiAyODggMzUybC02NCAwIDAtMzM2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMzNi02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDM5Ny41IDkuNCA0MDYuNmwxMjggMTI4eiJdfSxDVWU9YkgsX1VlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvbXBhY3QtZGlzYyIsaWNvbjpbNTEyLDUxMixbMTI4MTkxLDEyODE5MiwxMjg0NDBdLCJmNTFmIiwiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6bS01Ni0xNmMwLTMyLjQgMTYuMy02Ni42IDQyLjgtOTMuMlMyMDcuNiAxMDQgMjQwIDEwNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDcuOSAwLTkzLjcgMjMuNS0xMjcuMSA1Ni45UzU2IDE5Mi4xIDU2IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdfSxUVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3VpdGNhc2Utcm9sbGluZyIsaWNvbjpbMzg0LDUxMixbXSwiZjVjMSIsIk0xNDQgMjRjMC00LjQgMy42LTggOC04bDgwIDBjNC40IDAgOCAzLjYgOCA4bDAgNzItOTYgMCAwLTcyek0zMjAgOTZsLTMyIDAgMC03MmMwLTMwLjktMjUuMS01Ni01Ni01NmwtODAgMEMxMjEuMS0zMiA5Ni02LjkgOTYgMjRsMCA3Mi0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODhjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTEyMCAyMDhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LHZIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stcXVyYW4iLGljb246WzQ0OCw1MTIsWyJxdXJhbiJdLCJmNjg3IiwiTTY0IDUxMmwyODggMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzIwYzAtNTMtNDMtOTYtOTYtOTZMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCAzMzZjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zTDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwek0zNTIgMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMCAwLTY0IDI1NiAwek0yNzMuMSAxNDQuNGMyLjUtNi4xIDExLjItNi4xIDEzLjcgMGwxMC4zIDI0LjggMjYuOCAyLjFjNi42IC41IDkuMiA4LjcgNC4yIDEzTDMwNy44IDIwMS45IDMxNCAyMjhjMS41IDYuNC01LjUgMTEuNS0xMS4xIDguMWwtMjIuOS0xNC0yMi45IDE0Yy01LjYgMy40LTEyLjYtMS42LTExLjEtOC4xbDYuMi0yNi4xLTIwLjQtMTcuNWMtNS00LjMtMi4zLTEyLjUgNC4yLTEzbDI2LjgtMi4xIDEwLjMtMjQuOHpNMTAwIDE5MmMwLTY4LjUgNTUuNS0xMjQgMTI0LTEyNCAyMy44IDAgNDYuMSA2LjcgNjUgMTguNCA0LjggMi45IDYuOSA4LjggNSAxNC4xcy03LjEgOC42LTEyLjcgOGMtMy4xLS4zLTYuMi0uNS05LjQtLjUtNDYuNCAwLTg0IDM3LjYtODQgODRzMzcuNiA4NCA4NCA4NGMzLjIgMCA2LjMtLjIgOS40LS41IDUuNi0uNiAxMC44IDIuNyAxMi43IDhzLS4zIDExLjItNSAxNC4xYy0xOC45IDExLjctNDEuMiAxOC40LTY1IDE4LjQtNjguNSAwLTEyNC01NS41LTEyNC0xMjR6Il19LExVZT12SCwkVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGhvbmUtc2xhc2giLGljb246WzU3Niw1MTIsW10sImYzZGQiLCJNNTM1LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUzNy4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE0MS41IDM2OC42Qzg5LjIgMzEwLjUgNTEuNiAyMzguOCAzNC44IDE1OS40IDE4LjcgODMuMSA3My45IDIwLjYgMTM4LjUgMi45bDUuNS0xLjVjMTkuNy01LjQgNDAuMyA0LjcgNDguMSAyMy41bDQwLjUgOTcuM2M2LjkgMTYuNSAyLjEgMzUuNi0xMS44IDQ3bC00NC4xIDM2LjFjMTIuOSAyOC41IDI5LjYgNTQuOCA0OS41IDc4LjVMNTM1LTI0Ljl6bS0xNTAuNCA1MzRjLTYzLTEzLjQtMTIxLjMtMzkuOC0xNzEuNy03Ni4zTDI5Ny44IDM0OGMxMi4yIDguMiAyNSAxNS42IDM4LjMgMjIuMkwzNzQuNyAzMjNjMTEuMy0xMy45IDMwLjQtMTguNiA0Ny0xMS44TDUxOSAzNTEuOGMxOC44IDcuOCAyOC45IDI4LjQgMjMuNSA0OC4xbC0xLjUgNS41Yy0xNy42IDY0LjYtODAuMiAxMTkuOC0xNTYuNCAxMDMuN3oiXX0sQVVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvYWQtY2lyY2xlLWNoZWNrIixpY29uOls2NDAsNTEyLFtdLCJlNTY0IiwiTTI4OCAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS41IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDljMzUuMi0zOS45IDg2LjctNjUgMTQ0LTY1IDkgMCAxNy44IC42IDI2LjUgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXX0sRFVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNob3AtbG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTRhNSIsIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1NS42IDExMS4xYy04LjItMS42LTE2LjYtMi41LTI1LjItMi41LTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBsLTU3LjMgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXX0seUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaW1hZ2UtcG9ydHJhaXQiLGljb246WzM4NCw1MTIsWyJwb3J0cmFpdCJdLCJmM2UwIiwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNODAgMzY4YzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwek0xOTIgMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdfSxFVWU9eUgsUFVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyaWRnZS1sb2NrIixpY29uOls1NzYsNTEyLFtdLCJlNGNjIiwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMCAwIDMyLjJjMTMuOCAuNiAyNy4yIDIuOCA0MCA2LjRsMCA1MC43Yy0xNC44LTYtMzEtOS4zLTQ4LTkuMy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLS40IC4zLS43IC42LTEuMSAxLTE3LjMtMjUtNDYuMi00MS4zLTc4LjktNDEuMy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjR6bTQyNCA2OC42bDAtMzYuNi04MCAwIDAgNjQgMTguOCAwYzE4LjItMTIuOCAzOC45LTIyLjIgNjEuMi0yNy40ek0yMTYgOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDBsLTgwIDAgMCA2NCA4MCAwIDAtNjR6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il19LElVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW1tZXIiLGljb246WzY0MCw1MTIsWzEyODI5Nl0sImY2ZTMiLCJNMjQ2LjkgMTguM0wyNzEgMy44YzIxLjYtMTMgNDYuMy0xOS44IDcxLjUtMTkuOCAzNi44IDAgNzIuMiAxNC42IDk4LjIgNDAuN2w2My45IDYzLjljMTUgMTUgMjMuNCAzNS40IDIzLjQgNTYuNmwwIDMwLjkgMTkuNyAxOS43IDAgMGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHMxNS42IDQwLjkgMCA1Ni42bC02NCA2NGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZMNDY0IDI0MCA0MzMuMSAyNDBjLTIxLjIgMC00MS42LTguNC01Ni42LTIzLjRsLTQ5LjEtNDkuMWMtMTUtMTUtMjMuNC0zNS40LTIzLjQtNTYuNmwwLTEyLjdjMC0xMS4yLTUuOS0yMS43LTE1LjUtMjcuNGwtNDEuNi0yNWMtMTAuNC02LjItMTAuNC0yMS4yIDAtMjcuNHpNNTAuNyA0MDIuN2wyMjIuMS0yMjIuMSA5MC41IDkwLjUtMjIyLjEgMjIyLjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNXoiXX0seEg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtMS05IixpY29uOls1MTIsNTEyLFsic29ydC1udW1lcmljLXVwIl0sImYxNjMiLCJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2ek00MTguNyAzOGMtOC4zLTYtMTkuMS03LjctMjguOC00LjRsLTQ4IDE2Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsNS45LTIgMCA1MS42LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTk2YzAtMTAuMy00LjktMTkuOS0xMy4zLTI2ek0zNjUuMSA0MzAuNmMtOS42IDE0LjgtNS40IDM0LjYgOS40IDQ0LjNzMzQuNiA1LjQgNDQuMy05LjRsNDIuMS02NC45YzEyLjQtMTkuMiAxOS4xLTQxLjYgMTkuMS02NC41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzYuMSAyMy45IDY2LjcgNTYuOCA3Ni42bC0xMS43IDE4ek0zNzYgMzM2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LE5VZT14SCxGVWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2hlc3Mta25pZ2h0IixpY29uOlszODQsNTEyLFs5ODIyXSwiZjQ0MSIsIk0xOTItMzJjMTA2IDAgMTkyIDg2IDE5MiAxOTJsMCAxMzMuNWMwIDE3LTYuOCAzMy4yLTE4LjcgNDUuMkwzMjAgMzg0IDM3MC44IDQzNC43YzguNSA4LjUgMTMuMiAyMCAxMy4yIDMyIDAgMjUtMjAuMyA0NS4yLTQ1LjIgNDUuM0w0NS4zIDUxMmMtMjUgMC00NS4yLTIwLjMtNDUuMi00NS4zIDAtMTIgNC44LTIzLjUgMTMuMi0zMkw2NCAzODQgNjQgMzQ5LjRjMC0xOC43IDguMi0zNi40IDIyLjMtNDguNmw4OS43LTc2LjgtNDggMC0xMi4xIDEyLjFjLTEyLjcgMTIuNy0zMCAxOS45LTQ4IDE5LjktMzcuNSAwLTY3LjktMzAuNC02Ny45LTY3LjlsMC04LjdjMC0yMi44IDguMi00NC45IDIzLjEtNjIuM0w5NiAzMiA5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6TTE2MCA3MmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6Il19LE9VZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1mbG9vZC13YXRlci1jaXJjbGUtYXJyb3ctcmlnaHQiLGljb246WzY0MCw1MTIsW10sImU1MGYiLCJNMjg4LjUgMTEyYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTE0MS4yIDQ0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNTYgNTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTU2IDU2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDI4LjctMjguNy04OS40IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODkuNCAwLTI4LjctMjguN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6TTMzNi41IDExMmMwIDcxLjEtMzguNiAxMzMuMS05NiAxNjYuM2wwIDEyLjhjMjIuMSA0LjUgNDMuNCAxMy45IDYyLjQgMjguMiAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDYtNC41IDEyLjYtOCAxOS4zLTEwLjRsMC0xMTUuMiA0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0w0NDQuNSAxMC41QzQzNi44IDMuNyA0MjYuOCAwIDQxNi41IDBzLTIwLjMgMy43LTI4IDEwLjVMMzI5LjkgNjEuOGM0LjMgMTYgNi42IDMyLjggNi42IDUwLjJ6bTMyIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc1LjEgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCAzOTEuOCAyNjYgMzczLjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCA0ODcuOCAyNjYgNDY5LjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXX0sdTg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUiLGljb246WzUxMiw1MTIsWyJleHRlcm5hbC1saW5rIl0sImYwOGUiLCJNMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODIuNyAwLTIwMS40IDIwMS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ0OCAxMDkuMyA0NDggMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDB6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NkwwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDk2eiJdfSxSVWU9dTgsQlVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LWRvd24tdXAtYWNyb3NzLWxpbmUiLGljb246WzUxMiw1MTIsW10sImU0YWYiLCJNMjY1LjQgMTA1LjRsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTQxLjQtNDEuNCAwIDExNC43IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgMTE0LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgNDAyLjcgOTYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTExNC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6TTQxNiAzMzZsMCAxNDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQgNjQgMHpNOTYgMTc2TDk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDQtNjQgMHoiXX0sd0g9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmluLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUxNiwiZ3Jpbi1iZWFtIl0sImY1ODIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXX0sSFVlPXdILE1IPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJlY3RhbmdsZS1hZCIsaWNvbjpbNTEyLDUxMixbImFkIl0sImY2NDEiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTQxNiAxODRsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjQtNy4xIDAtMTMuNS0zLjEtMTcuOS04LTEwLjIgNS4xLTIxLjggOC0zNC4xIDgtNDIgMC03Ni0zNC03Ni03NnMzNC03NiA3Ni03NmM5LjkgMCAxOS4zIDEuOSAyOCA1LjNsMC0yMS4zYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bS00OCA5MmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0xNjAgMjA4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMiA0OCAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwem0zMiA5NmwtNDggMCAwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDE2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNHoiXX0scVVlPU1ILHpIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvb2stdGFuYWtoIixpY29uOls0NDgsNTEyLFsidGFuYWtoIl0sImY4MjciLCJNMzUyIDUxMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMC02Ni43QzEzLjQgMzc0LjcgMCAzNTYuOSAwIDMzNkwwIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzNTIgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMzIwYzAgNTMtNDMgOTYtOTYgOTZ6bTMyLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNTYgMCAwIDY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0xMTMuOSAyMjljLTEuMiAyLTEuOSA0LjItMS45IDYuNiAwIDYuOSA1LjYgMTIuNSAxMi41IDEyLjVsNTYuOSAwIDMwLjUgNDkuMmMyLjYgNC4yIDcuMiA2LjggMTIuMiA2LjhzOS42LTIuNiAxMi4yLTYuOGwzMC41LTQ5LjIgNTYuOSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTIuMy0uNi00LjYtMS45LTYuNmwtMjcuOC00NSAyNy44LTQ1YzEuMi0yIDEuOS00LjIgMS45LTYuNiAwLTYuOS01LjYtMTIuNS0xMi41LTEyLjVsLTU2LjkgMC0zMC41LTQ5LjJDMjMzLjYgNjYuNiAyMjkgNjQgMjI0IDY0cy05LjYgMi42LTEyLjIgNi44bC0zMC41IDQ5LjItNTYuOSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCAyLjMgLjYgNC42IDEuOSA2LjZsMjcuOCA0NS0yNy44IDQ1eiJdfSxWVWU9ekgsa0g9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG90LXR1Yi1wZXJzb24iLGljb246WzQ0OCw1MTIsWyJob3QtdHViIl0sImY1OTMiLCJNMjQwIDQwYzAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMjAzLjUgOTMuMSAxOTIgNjcuMiAxOTIgNDAgMTkyIDI2LjcgMjAyLjcgMTYgMjE2IDE2czI0IDEwLjcgMjQgMjR6TTAgMzM2bDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkuNyAwYzguMSAwIDE2LjIgMS42IDIzLjggNC42bDEzNy4xIDU0LjhjNy42IDMgMTUuNiA0LjYgMjMuOCA0LjZMMzg0IDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzM2em05Ni0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE1MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MHptMTA0LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzI4IDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMzE1LjUgOTMuMSAzMDQgNjcuMiAzMDQgNDAgMzA0IDI2LjcgMzE0LjcgMTYgMzI4IDE2ek02NCA0MGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXX0salVlPWtILFVVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWhhbGYtZGFzaGVkIixpY29uOlszODQsNTEyLFtdLCJlNjk4IiwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjU2IDM4NCAwIDAtMTQ5LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTAgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6TTY0IDUxMmwwLTY0LTY0IDBjMCAzNS4zIDI4LjcgNjQgNjQgNjR6bTMyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsLTY0IDAgMCA2NHptNjQtMTYwbC02NCAwIDAgNjQgNjQgMCAwLTY0eiJdfSxTSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvdXRkZW50IixpY29uOls0NDgsNTEyLFsiZGVkZW50Il0sImYwM2IiLCJNLjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwQzE0LjggOTYgLjQgODEuNyAuNCA2NHptMTkyIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TS40IDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzg0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0uNyAyNjguNmMtOC4yLTYuNC04LjItMTguOSAwLTI1LjNsMTAxLjktNzkuM2MxMC41LTguMiAyNS44LS43IDI1LjggMTIuNmwwIDE1OC42YzAgMTMuMy0xNS4zIDIwLjgtMjUuOCAxMi42TC43IDI2OC42eiJdfSxXVWU9U0gsR1VlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmQtcGVhY2UiLGljb246WzQ0OCw1MTIsWzk5OTZdLCJmMjViIiwiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02MS4zIDUxLjJMMTQzLjkgMjQwIDc0LjEgMjQwIDIuNyA3Ni44Qy00LjQgNjAuNiAzIDQxLjggMTkuMiAzNC43UzU0LjIgMzUgNjEuMyA1MS4yem0yNyAyMjEuM2wtLjItLjUgOTUuOSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDY5LjUgNDUzLjVDNDUuNSA0MjkuNSAzMiAzOTYuOSAzMiAzNjNsMC0yN2MwLTMyLjcgMjQuNi01OS43IDU2LjMtNjMuNXoiXX0sWVVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYWQtc2lkZS12aXJ1cyIsaWNvbjpbNTEyLDUxMixbXSwiZTA2NCIsIk0zMjkuNyA0NDhjLTUuMSAwLTkuNyAzLjctOS43IDguOGwwIDcuMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjMuNmMwLTEyLjYtNS4xLTI0LjUtMTMuMS0zNC4yLTMxLjgtMzguNy01MC45LTg4LjItNTAuOS0xNDIuMiAwLTEyMy43IDEwMC4zLTIyNCAyMjQtMjI0IDExMi43IDAgMjA2IDgzLjMgMjIxLjcgMTkxLjcgLjQgMyAxLjcgNS45IDMuNiA4LjNsMzUuOCA0Mi45YzcgOC40IDEwLjkgMTkuMSAxMC45IDMwLjEgMCAyNS45LTIxIDQ3LTQ3IDQ3bC0xIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zOC4zIDB6TTIyNCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjQgMCAyMi45LTI3LjcgMzQuNC00My45IDE4LjItOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWMxNi4yIDE2LjIgNC43IDQzLjktMTguMiA0My45LTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRjMjIuOSAwIDM0LjQgMjcuNyAxOC4yIDQzLjktOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwYzE2LjItMTYuMiA0My45LTQuNyA0My45IDE4LjIgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTIyLjkgMjcuNy0zNC40IDQzLjktMTguMiA5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjljLTE2LjItMTYuMi00LjctNDMuOSAxOC4yLTQzLjkgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTIyLjkgMC0zNC40LTI3LjctMTguMi00My45IDkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTE2LjIgMTYuMi00My45IDQuNy00My45LTE4LjIgMC0xMy4zLTEwLjctMjQtMjQtMjR6bS0zMiA4OGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LFpVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb21wYXNzIixpY29uOls1MTIsNTEyLFsxMjk1MTddLCJmMTRlIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXX0sWFVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlbi1uaWIiLGljb246WzUxMiw1MTIsWzEwMDAxXSwiZjVhZCIsIk0zNjguNSAxOC4zbC01MC4xIDUwLjEgMTI1LjMgMTI1LjMgNTAuMS01MC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ0Ny43IDE4LjNjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwek0yNzkuMyA5Ny4ybC0uNSAuMS0xNDQuMSA0My4yYy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0yLjkgOC43LTEuOSAxOC4yIDIuNSAyNkwxNjEuNyAzMTYuNGMtMS4xLTQtMS42LTguMS0xLjYtMTIuNCAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDhjLTQuMyAwLTguNS0uNi0xMi40LTEuNkw0MC4zIDUwNS43YzcuOCA0LjQgMTcuMiA1LjQgMjYgMi41bDI2NC4zLTg4LjZjMTkuNy02LjYgMzUtMjIuNCA0MS00Mi4zbDQzLjItMTQ0LjEgLjEtLjUtMTM1LjUtMTM1LjV6Il19LEtVZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0ZW50LWFycm93cy1kb3duIixpY29uOls1MTIsNTEyLFtdLCJlNTgxIiwiTTE4NS41IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6bTI0OCA3Mmw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXX0sQ0g9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZm9yd2FyZC1mYXN0IixpY29uOls1MTIsNTEyLFs5MTk3LCJmYXN0LWZvcndhcmQiXSwiZjA1MCIsIk0xOS44IDQ3Ny42YzEyIDUgMjUuNyAyLjIgMzQuOS02LjlMMjI0IDMwMS4zIDIyNCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOUw0NDggMzAxLjMgNDQ4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTQ2LjctMTY5LjQtMTY5LjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzIyNCA1MS4xIDIyNCA2NEwyMjQgMjEwLjcgNTQuNiA0MS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMwIDUxLjEgMCA2NEwwIDQ0OGMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42eiJdfSxRVWU9Q0gsSlVlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNyb3AiLGljb246WzUxMiw1MTIsW10sImYxMjUiLCJNNDQ4IDEwOS4zbDU0LjYtNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw0MDIuNyA2NCAxNzYgNjQgMTc2IDEyOCAzMzguNyAxMjggMTI4IDMzOC43IDEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTE2Mi43IDAgMjEwLjctMjEwLjcgMCAzMDYuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTI3NC43eiJdfSxfSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3aGlza2V5LWdsYXNzIixpY29uOls0NDgsNTEyLFsxMjkzNDcsImdsYXNzLXdoaXNrZXkiXSwiZjdhMCIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE5MiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAyNTZsMC0xNjAgMzIwIDAgMCAxNjAtMzIwIDB6Il19LGVXZT1fSCx0V2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3F1YXJlIixpY29uOls0NDgsNTEyLFs5NjMyLDk3MjMsOTcyNCw2MTU5MF0sImYwYzgiLCJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdfSxUSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLWdyaW4iLGljb246WzUxMiw1MTIsWzEyODUxMiwiZ3JpbiJdLCJmNTgwIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxhV2U9VEgsaVdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtY29udHJhY3QiLGljb246WzM4NCw1MTIsW10sImY1NmMiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNzAuMyAxNjBjLTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMNjkuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40eiJdfSxyV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGUtdXAiLGljb246WzM4NCw1MTIsWzg5NjNdLCJmMTA2IiwiTTE2OS40IDEzNy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMTkyIDIwNS4zIDU0LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjB6Il19LExIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2Utc21pbGUiLGljb246WzUxMiw1MTIsWzEyODU3OCwic21pbGUiXSwiZjExOCIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY1LjQgMzIxLjljMjAuNCAyOCA1My40IDQ2LjEgOTAuNiA0Ni4xczcwLjItMTguMSA5MC42LTQ2LjFjNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zczEzLjEgMjIuOCA1LjMgMzMuNUMzNTYuMyAzOTAgMzA5LjIgNDE2IDI1NiA0MTZzLTEwMC4zLTI2LTEyOS40LTY1LjljLTcuOC0xMC43LTUuNC0yNS43IDUuMy0zMy41czI1LjctNS40IDMzLjUgNS4zek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LHNXZT1MSCxuV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWRyZXNzLWJ1cnN0IixpY29uOls2NDAsNTEyLFtdLCJlNTQ0IiwiTTIwOCA0MC4xYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNOCAxNDQuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptOTIuNSAxNDEuNGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMjQ2LjIgMzg0bDI1LjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAyNS44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTQzLTEyOSA0OC4zIDY1LjFjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDNDM0IDEzMiAzOTQuMyAxMTIgMzUyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ4LjMtNjUuMS00MyAxMjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMXoiXX0sb1dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRpdmlkZSIsaWNvbjpbNDQ4LDUxMixbMTAxMzUsMjQ3XSwiZjUyOSIsIk0yMjQgNDhhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE2OCA0MDhhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAweiJdfSxsV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29kZS1mb3JrIixpY29uOls0NDgsNTEyLFtdLCJlMTNiIiwiTTgwIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIuN2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0zMiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNsMC03MC43LTMyIDBDOTguMSAyODggNDggMjM3LjkgNDggMTc2bDAtMjIuN0MxOS43IDE0MSAwIDExMi44IDAgODAgMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXX0sY1dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhvdXNlLWZsYWciLGljb246WzY0MCw1MTIsW10sImU1MGQiLCJNNDcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSA1OS4xbDEwMC41IDk2LjkgMCAzNTYtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjI4LjUgNTkuMUMyMzUuOSA1MiAyNDUuNyA0OCAyNTYgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjMyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il19LGdsPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1aWxkaW5nLWNvbHVtbnMiLGljb246WzUxMiw1MTIsWyJiYW5rIiwiaW5zdGl0dXRpb24iLCJtdXNldW0iLCJ1bml2ZXJzaXR5Il0sImYxOWMiLCJNMjcxLjkgMjAuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhjLTEyLjYgNy4yLTE4LjggMjItMTUuMSAzNlMxNy41IDIwOCAzMiAyMDhsMzIgMCAwIDIwOCAwIDAtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZsLTUxLjItMzguNCAwLTIwOCAzMiAwYzE0LjUgMCAyNy4yLTkuOCAzMC45LTIzLjhzLTIuNS0yOC44LTE1LjEtMzZsLTIyNC0xMjh6TTQwMCAyMDhsMCAyMDgtNjQgMCAwLTIwOCA2NCAwem0tMTEyIDBsMCAyMDgtNjQgMCAwLTIwOCA2NCAwem0tMTEyIDBsMCAyMDgtNjQgMCAwLTIwOCA2NCAwek0yNTYgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxkV2U9Z2wscFdlPWdsLGhXZT1nbCx1V2U9Z2wsZldlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJ1ZyIsaWNvbjpbNTc2LDUxMixbXSwiZTU2OSIsIk0yNCA2NGw1NiAwIDAgMzg0LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0zMi04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwQzEwLjcgMTEyIDAgMTAxLjMgMCA4OFMxMC43IDY0IDI0IDY0em0xMDQgMGwzMjAgMCAwIDM4NC0zMjAgMCAwLTM4NHpNNTc2IDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDMyIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDAgMC0zODQgNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHoiXX0sbVdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvZGUtbWVyZ2UiLGljb246WzQ0OCw1MTIsW10sImYzODciLCJNODAgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMi40IDk3LjJjMjgtMTIuNCA0Ny42LTQwLjUgNDcuNi03My4yIDAtNDQuMi0zNS44LTgwLTgwLTgwUzAgMzUuOCAwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM0MxOS43IDM3MSAwIDM5OS4yIDAgNDMyIDAgNDc2LjIgMzUuOCA1MTIgODAgNTEyczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTg2LjZjMjYuNyAyMC4xIDYwIDMyIDk2IDMybDg2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4IDQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwYy0zMi44IDAtNjEgMTkuNy03My4zIDQ4TDIwOCAyNDBjLTQ5LjkgMC05MS0zOC4xLTk1LjYtODYuOHpNODAgNDA4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzQ0IDI3MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdfSxnV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaG91c2UtdHN1bmFtaSIsaWNvbjpbNjQwLDUxMixbXSwiZTUxNSIsIk0yODggMTZDMTU1LjUgMTYgNDggMTIzLjUgNDggMjU2UzE1NS41IDQ5NiAyODggNDk2YzcuNCAwIDE5LjctMi4zIDMzLjctNy4zIDEzLjgtNC45IDI3LjEtMTEuNyAzNi43LTE4LjkgMzguNC0yOSA5MC41LTI5IDEyOSAwIDE1LjQgMTEuNiAzNS4zIDIxLjEgNTUgMjQuNCAxOS41IDMuMyAzNyAuNCA1MS4xLTEwLjIgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNy4zIDIwLjUtNTkuMiAyNC04Ny45IDE5LjItMjguNS00LjgtNTUuNC0xOC03NS45LTMzLjQtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjFsLS4xIDBDMTI4LjkgNTQzLjkgMCA0MTUgMCAyNTYgMCA5Ni45IDEyOC45LTMyIDI4OC0zMiAzMDEuMy0zMiAzMTItMjEuMyAzMTItOHMtMTAuNyAyNC0yNCAyNHptNDQuOCAxNjYuNGw5Ni03MmMxMS40LTguNSAyNy4xLTguNSAzOC41IDBsOTUuNSA3MmM4IDYgMTIuNyAxNS41IDEyLjcgMjUuNWwuMyAxMjEuNWMtMi4yIDEuMy00LjMgMi42LTYuNCA0LjItNC4zIDMuMS04LjcgLjgtMTMuMi0xLjVsLTEuMi0uNi0uNy0uM2MtNS40LTIuNy0xMS43LTYuNi0xOC45LTExLjctMjkuNS0yMS4xLTY0LjMtMzEuNi05OS4xLTMxLjQtMzQuMSAuMi02OC4xIDEwLjctOTcgMzEuNC03LjggNS42LTEzLjggOS4zLTE5LjMgMTEuMkwzMjAgMjA4YzAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZ6bTU0LjYgMjI5LjdjLTE0LjUgMTAuOS0zMi40IDE5LjctNDkuNSAyNS44LTE2LjggNi0zNC45IDEwLjEtNDkuOSAxMC4xLTEwNiAwLTE5Mi04Ni0xOTItMTkyUzE4MiA2NCAyODggNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXX0sYldlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1hZ25pZnlpbmctZ2xhc3MtY2hhcnQiLGljb246WzUxMiw1MTIsW10sImU1MjIiLCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4em0tMzEyIDhsMCA2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTgwLTk2bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTgwIDY0bDAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdfSx2V2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidW1icmVsbGEiLGljb246WzUxMiw1MTIsW10sImYwZTkiLCJNMjU2LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMmMxMjYuMyAxNS43IDIyNCAxMjMuNSAyMjQgMjU0IDAgMy44LS4xIDcuNS0uMiAxMS4zLS4zIDYuOS01IDEyLjgtMTEuNyAxNC43cy0xMy44LS43LTE3LjYtNi41Yy0xNC40LTIxLjQtMzguOC0zNS41LTY2LjUtMzUuNS0yOS4zIDAtNTQuOSAxNS43LTY4LjkgMzkuMy0yLjcgNC42LTcuNiA3LjYtMTMgNy44cy0xMC41LTIuMi0xMy43LTYuNWMtMTQuNi0xOS44LTM4LTMyLjYtNjQuNS0zMi42cy00OS45IDEyLjgtNjQuNSAzMi42Yy0zLjIgNC4zLTguMyA2LjgtMTMuNyA2LjVzLTEwLjItMy4yLTEzLTcuOGMtMTQtMjMuNi0zOS42LTM5LjMtNjguOS0zOS4zLTI3LjcgMC01Mi4xIDE0LjEtNjYuNSAzNS41LTMuOSA1LjctMTEgOC40LTE3LjYgNi41Uy41IDI3NC4yIC4yIDI2Ny4zQy4xIDI2My41IDAgMjU5LjggMCAyNTYgMCAxMjUuNSA5Ny43IDE3LjcgMjI0IDJsMC0yYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAzNjBsMCAxMDIuNmMwIDQ1LTM2LjUgODEuNC04MS40IDgxLjQtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjYgOS42IDAgMTcuNC03LjggMTcuNC0xNy40TDIyNCAzMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXX0seVdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhpbGwtcm9ja3NsaWRlIixpY29uOls1NzYsNTEyLFtdLCJlNTA4IiwiTTI1Mi40IDEwMy44bDI3IDQ4YzIuOCA1IDguMiA4LjIgMTMuOSA4LjJsNTMuMyAwYzUuOCAwIDExLjEtMy4xIDEzLjktOC4ybDI3LTQ4YzIuNy00LjkgMi43LTEwLjggMC0xNS43bC0yNy00OGMtMi44LTUtOC4yLTguMi0xMy45LTguMmwtNTMuMyAwYy01LjggMC0xMS4xIDMuMS0xMy45IDguMmwtMjcgNDhjLTIuNyA0LjktMi43IDEwLjggMCAxNS43ek02OC4zIDg3QzQzLjEgNjEuOCAwIDc5LjcgMCAxMTUuM0wwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMTYuNyAwYzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6TTUwNC4yIDQwMy42YzQuOSAyLjcgMTAuOCAyLjcgMTUuNyAwbDQ4LTI3YzUtMi44IDguMi04LjIgOC4yLTEzLjlsMC01My4zYzAtNS44LTMuMS0xMS4xLTguMi0xMy45bC00OC0yN2MtNC45LTIuNy0xMC44LTIuNy0xNS43IDBsLTQ4IDI3Yy01IDIuOC04LjIgOC4yLTguMiAxMy45bDAgNTMuM2MwIDUuOCAzLjEgMTEuMSA4LjIgMTMuOWw0OCAyN3pNMTkyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSx4V2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlci1zZWNyZXQiLGljb246WzQ0OCw1MTIsWzEyODM3M10sImYyMWIiLCJNMTcxLTE2Yy0zNi40IDAtNTcuOCA1OC4zLTY4LjMgMTEyTDcyIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMmMwIDE3IDMuMyAzMy4yIDkuMyA0OGwtOS4zIDAgMCAwLTIwLjUgMGMtMTUuMiAwLTI3LjUgMTIuMy0yNy41IDI3LjUgMCAzIC41IDUuOSAxLjQgOC43bDI4LjkgODYuNkM0MC4yIDM3OS42IDE2IDQyOC4xIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC01NC4yLTI0LjItMTAyLjctNjIuMy0xMzUuNGwyOC45LTg2LjZjLjktMi44IDEuNC01LjcgMS40LTguNyAwLTE1LjItMTIuMy0yNy41LTI3LjUtMjcuNWwtMjAuNSAwIDAgMC05LjMgMGM2LTE0LjggOS4zLTMxIDkuMy00OGwwLTMyIDI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMwLjcgMGMtMTAuNC01My43LTMxLjktMTEyLTY4LjMtMTEyLTkuNiAwLTE5IDMuOS0yNy41IDguMi04LjIgNC4xLTE4LjQgNy44LTI1LjUgNy44cy0xNy4zLTMuNy0yNS41LTcuOEMxOTAtMTIuMSAxODAuNi0xNiAxNzEtMTZ6bTkzLjcgNDg0LjRsLTI0LjgtNzAuOSAyNy45LTMyLjVjMi43LTMuMiA0LjItNy4yIDQuMi0xMS40IDAtOS43LTcuOC0xNy41LTE3LjUtMTcuNWwtNjEgMGMtOS43IDAtMTcuNSA3LjgtMTcuNSAxNy41IDAgNC4yIDEuNSA4LjIgNC4yIDExLjRsMjcuOSAzMi41LTI0LjggNzAuOS01Ny0xODAuNCAzNS43IDBjMTguNCAxMC4yIDM5LjUgMTYgNjIgMTZzNDMuNi01LjggNjItMTZsMzUuNyAwLTU3IDE4MC40ek0yMjQgMjU2Yy0zNC43IDAtNjQuMi0yMi4xLTc1LjMtNTMgNS43IDMuMiAxMi4zIDUgMTkuMyA1bDEyLjQgMGMxNi41IDAgMzEuMS0xMC42IDM2LjMtMjYuMiAyLjMtNyAxMi4yLTcgMTQuNSAwIDUuMiAxNS42IDE5LjkgMjYuMiAzNi4zIDI2LjJsMTIuNCAwYzcgMCAxMy42LTEuOCAxOS4zLTUtMTEuMSAzMC45LTQwLjYgNTMtNzUuMyA1M3oiXX0sd1dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhZ2VyIixpY29uOls1MTIsNTEyLFsxMjgyMjNdLCJmODE1IiwiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTY0IDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04OCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptMTI4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXX0sTVdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJyaWVmY2FzZSIsaWNvbjpbNTEyLDUxMixbMTI4MTg4XSwiZjBiMSIsIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBsMCA5NiA1MTIgMCAwLTk2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04MCAwIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjAwIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek01MTIgMzA0bC0xOTIgMCAwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTE5MiAwIDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTEyeiJdfSx6V2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJvd2VsLWJyaWNrcyIsaWNvbjpbNTEyLDUxMixbXSwiZTU4YSIsIk0yMjQgMzJjMC0xMS41LTYuMi0yMi4yLTE2LjItMjcuOHMtMjIuMy01LjUtMzIuMiAuNGwtMTYwIDk2QzUuOSAxMDYuMyAwIDExNi44IDAgMTI4czUuOSAyMS43IDE1LjUgMjcuNGwxNjAgOTZjOS45IDUuOSAyMi4yIDYuMSAzMi4yIC40UzIyNCAyMzUuNSAyMjQgMjI0bDAtNjQgMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI1NiAwIDAtNjR6bTk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xNjAgMHpNMCA0MTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0yMjQtMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjU2IDB6Il19LGtXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzb2NrcyIsaWNvbjpbNTEyLDUxMixbMTI5NTEwXSwiZjY5NiIsIk0yNTIuOCAwTDE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDExMiAwIDAtMTZjMC0xNy41IDQuNy0zMy45IDEyLjgtNDh6TTEyOCAxMTJsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMTUuNCAwIDMwLjUtMy43IDQ0LTEwLjctMTcuNi0yMy45LTI4LTUzLjQtMjgtODUuMyAwLTQ1LjMgMjEuMy04OCA1Ny42LTExNS4ybDY0LTQ4YzQtMyA2LjQtNy44IDYuNC0xMi44bDAtMTI4LTExMiAwem0xNjAgMGwwIDEyOGMwIDIwLjEtOS41IDM5LjEtMjUuNiA1MS4ybC02NCA0OGMtMjQuMiAxOC4xLTM4LjQgNDYuNi0zOC40IDc2LjggMCA1MyA0MyA5NiA5NiA5NiAyMC44IDAgNDEtNi43IDU3LjYtMTkuMmwxMTUuMi04Ni40QzQ2MSAzODIuMiA0ODAgMzQ0LjMgNDgwIDMwNGwwLTE5Mi0xOTIgMHpNNDgwIDY0bDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYgMTkyIDB6Il19LFNXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0IixpY29uOlszODQsNTEyLFsxMTZdLCI1NCIsIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMTI4IDAgMCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXX0sQ1dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im1pY3JvY2hpcCIsaWNvbjpbNTEyLDUxMixbXSwiZjJkYiIsIk0xNzYgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsLTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDU2LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDU2LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMGMwIDM1LjMgMjguNyA2NCA2NCA2NGwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA1NiAwIDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDU2IDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTU2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC01NiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwYzAtMzUuMy0yOC43LTY0LTY0LTY0bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MC01NiAwIDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MC01NiAwIDAtNDB6TTE2MCAxMjhsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYgNDhsMCAxNjAgMTYwIDAgMC0xNjAtMTYwIDB6Il19LCRIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRydWNrLW1lZGljYWwiLGljb246WzU3Niw1MTIsWzEyODY1NywiYW1idWxhbmNlIl0sImYwZjkiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTc2IDEzNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXX0sX1dlPSRILFRXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJvbSIsaWNvbjpbNTc2LDUxMixbMTI4MzI5XSwiZjY3OSIsIk0zODguNyA0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsMTYgMTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTE2IDE2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtMTYtMTZjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42bDE2LTE2ek0xNzYgMTYwYy0xMC44IDAtMjAuOCAzLjYtMjguOCA5LjYtMTQuMSAxMC42LTM0LjIgNy44LTQ0LjgtNi40cy03LjgtMzQuMiA2LjQtNDQuOGMxOC43LTE0LjEgNDItMjIuNCA2Ny4yLTIyLjQgNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCAxNy4yLTMuOSAzMy41LTEwLjggNDhsNDkuNyAwYzEyLjcgMCAyNC45LTUgMzMuOS0xNC4xbDIwLjctMjAuN2MxOC43LTE4LjcgNDQuMS0yOS4zIDcwLjYtMjkuMyA1NS4yIDAgOTkuOSA0NC43IDk5LjkgOTkuOWwwIDk2LjFjMCA1NS4yLTQ0LjggMTAwLTEwMCAxMDBTMzUyIDQ0My4yIDM1MiAzODhsMC00YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0YzAgMTkuOSAxNi4xIDM2IDM2IDM2czM2LTE2LjEgMzYtMzZsMC05Ni4xYzAtMTkuOC0xNi4xLTM1LjktMzUuOS0zNS45LTkuNSAwLTE4LjYgMy44LTI1LjQgMTAuNWwtMjAuNyAyMC43Yy0yMSAyMS00OS40IDMyLjgtNzkuMSAzMi44bC0yNi44IDBjMTIuNiAxOS42IDE5LjkgNDIuOCAxOS45IDY4IDAgNzUuMi02NSAxMzItMTQwIDEzMlM0MCA0NjMuMiA0MCAzODhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDM1LjMgMzEuNyA2OCA3NiA2OHM3Ni0zMi43IDc2LTY4LTMxLjctNjgtNzYtNjhsLTIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHpNMzM3LjEgNjAuMWMtMTEtMTMuOC0zMS4xLTE2LjItNDUtNS4ycy0xNi4yIDMxLjEtNS4yIDQ1QzMxMi42IDEzMi4yIDM1NC40IDE1MiA0MDAgMTUyczg3LjQtMTkuOCAxMTMuMS01Mi4xYzExLTEzLjggOC43LTM0LTUuMi00NXMtMzQtOC43LTQ1IDUuMkM0NTAuMyA3NiA0MjcuNSA4OCA0MDAgODhzLTUwLjMtMTItNjIuOS0yNy45eiJdfSxMV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9zcXVpdG8tbmV0IixpY29uOls2NDAsNTEyLFtdLCJlNTJjIiwiTTU3NiAzNTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNiAxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgNDggMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDE2LS4xIDIuNUM1OTguNiA1NjYuNiA1ODguNCA1NzYgNTc2IDU3NnMtMjIuNi05LjQtMjMuOS0yMS41bC0uMS0yLjUgMC0xNi00OCAwIDAgMTYtLjEgMi41QzUwMi42IDU2Ni42IDQ5Mi40IDU3NiA0ODAgNTc2cy0yMi42LTkuNC0yMy45LTIxLjVsLS4xLTIuNSAwLTE2LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTQ4LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNiA0OCAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQyOS45IDE2LjNjNy43LTkuNCAyMS4zLTExLjUgMzEuNC00LjMgMTAuMSA3LjEgMTMuMSAyMC45IDcuNCAzMS43bC0xLjMgMi4xLTI1LjkgMzguOSAxMy4zIDUzLjRjMiA4LS4xIDE2LjMtNS4zIDIyLjNsLTIuNCAyLjQtNDQuNyAzOC4zIDEzMC41IDE0LjVjNDIuOCA0LjggNzUuMSA0MC45IDc1LjEgODMuOSAwIDMuOS0uNCA3LjctLjkgMTEuNS03LjMtMy41LTE1LjMtNS44LTIzLjgtNi43TDU3NiAzMDRjLTE4LjUgMC0zNS4zIDctNDggMTguNC0xMS05LjktMjUuMS0xNi41LTQwLjYtMTguMUw0ODAgMzA0Yy0zMC4zIDAtNTYuMSAxOC43LTY2LjggNDUuMi0xMi41IDUtMjMuMiAxMy40LTMxLjEgMjRsLTMwLjItNDAuMSAwIDc0LjdjMCAxNy43LTE0LjMgMzItMzIgMzItMTYuNiAwLTMwLjItMTIuNi0zMS44LTI4LjdsLS4yLTMuMyAwLTc0LjYtMzIuMyA0MyAwIDM5LjhjMCAzLjUtLjcgNi45LTIuMSAxMC4xbC0xLjYgMy4xLTQwIDY0LTEuNCAyYy03LjUgOS42LTIxIDEyLjEtMzEuMyA1LjMtMTAuMy02LjgtMTMuNy0yMC41LTguMy0zMS41bDEuMi0yLjIgMzYuMi01OCAwLTQxIC4zLTRjLjYtMy45IDIuMi03LjcgNC42LTEwLjlsMzkuMy01Mi4yLTY2LjIgNTkuNWMtMTcgMTUuMy0zOSAyMy43LTYxLjkgMjMuOGwtOC4xIDBjLTQ2LjYgMC04NC40LTM3LjgtODQuNC04NC40IDAtNDMgMzIuNC03OS4yIDc1LjEtODMuOWwxMzAuNS0xNC41LTQ0LjctMzguMy0yLjQtMi40Yy01LjItNi03LjMtMTQuNC01LjMtMjIuM2wxMy4zLTUzLjQtMjUuOS0zOC45LTEuMi0yLjFjLTUuNy0xMC44LTIuNy0yNC42IDcuNC0zMS43IDEwLjEtNy4xIDIzLjctNS4xIDMxLjQgNC4zbDEuNSAyIDMyIDQ4IDEuNCAyLjJjMi44IDUuMyAzLjUgMTEuNiAyLjEgMTcuNmwtMTIuMyA0OS4yIDUzLjMgNDUuNyAwLTI4LjggLjItMy4yYzEuMS0xMC40IDcuMi0xOS40IDE1LjgtMjQuNGwwLTYwLjUgLjMtMy4yYzEuNS03LjMgOC0xMi43IDE1LjctMTIuOCA3LjcgMCAxNC4yIDUuNSAxNS43IDEyLjhsLjMgMy4yIDAgNjAuNWM4LjcgNSAxNC44IDE0IDE1LjggMjQuNGwuMiAzLjIgMCAyOC45IDUzLjQtNDUuNy0xMi4zLTQ5LjJjLTEuNS01LjktLjctMTIuMiAyLjEtMTcuNmwxLjQtMi4yIDMyLTQ4IDEuNS0yek01MDQgNDg4bDQ4IDAgMC00OC00OCAwIDAgNDh6Il19LCRXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwcmVzY3JpcHRpb24tYm90dGxlIixpY29uOlszODQsNTEyLFtdLCJmNDg1IiwiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NEwwIDMyek0zMiAxNDRsMzIwIDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC02NHoiXX0sQUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXNlcnMtZ2VhciIsaWNvbjpbNjQwLDUxMixbInVzZXJzLWNvZyJdLCJmNTA5IiwiTTMyMCAyMjRhMTA0IDEwNCAwIDEgMCAwLTIwOCAxMDQgMTA0IDAgMSAwIDAgMjA4ek05NiAyMzJhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6TTAgNDE2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsODYuNyAwYy00LjMtOS44LTYuNy0yMC42LTYuNy0zMmwwLTE2YzAtNTMuMiAyMC0xMDEuOCA1Mi45LTEzOC42LTExLjctMy41LTI0LjEtNS40LTM2LjktNS40LTcwLjcgMC0xMjggNTcuMy0xMjggMTI4ek02MTYgMTYwYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHpNMTYwIDQzMmwwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE1Ni44IDBjLTcuMS0yMS42LTYuMy00NC40IDEwLjctNjQtMTQtMTYuMi0yMC41LTM5LjctMTEuNC02My4zIDYuNi0xNy4xIDE1LjktMzMuMSAyNy40LTQ3LjMgNS40LTYuNiAxMS42LTExLjcgMTguMy0xNS40LTIyLjEtMTEuNS00Ny4yLTE4LTczLjgtMTgtODguNCAwLTE2MCA3MS42LTE2MCAxNjB6bTQ2NC42LTQ0LjFjNi4zLTMuNiA5LjUtMTEuMSA2LjgtMTgtNC44LTEyLjQtMTEuNS0yNC4xLTE5LjktMzQuNC00LjYtNS43LTEyLjctNi43LTE5LTMtMjEuOCAxMi42LTQ4LjYtMi44LTQ4LjYtMjguMSAwLTcuMy00LjktMTMuOC0xMi4xLTE0LjktMTIuOS0yLTI2LjgtMi0zOS43IDAtNy4yIDEuMS0xMi4xIDcuNi0xMi4xIDE0LjkgMCAyNS4yLTI2LjggNDAuNy00OC42IDI4LjEtNi4zLTMuNi0xNC40LTIuNi0xOSAzLTguNCAxMC4zLTE1LjEgMjItMTkuOSAzNC40LTIuNiA2LjggLjUgMTQuMyA2LjggMTcuOSAyMS45IDEyLjYgMjEuOSA0My41IDAgNTYuMi02LjMgMy42LTkuNSAxMS4xLTYuOCAxNy45IDQuOCAxMi40IDExLjUgMjQuMSAxOS45IDM0LjQgNC42IDUuNyAxMi43IDYuNyAxOSAzIDIxLjgtMTIuNiA0OC42IDIuOSA0OC42IDI4LjEgMCA3LjMgNC45IDEzLjggMTIuMSAxNC45IDEyLjkgMiAyNi44IDIgMzkuNyAwIDcuMi0xLjEgMTIuMS03LjYgMTIuMS0xNC45IDAtMjUuMiAyNi44LTQwLjcgNDguNi0yOC4xIDYuMyAzLjYgMTQuNCAyLjYgMTktMyA4LjQtMTAuMyAxNS4xLTIyIDE5LjktMzQuNCAyLjYtNi44LS41LTE0LjMtNi44LTE3LjktMjEuOS0xMi42LTIxLjktNDMuNSAwLTU2LjJ6TTQ3MiA0MTZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHoiXX0sQVdlPUFILERXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU2NSIsIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il19LEVXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwYXVzZSIsaWNvbjpbMzg0LDUxMixbOTIwOF0sImYwNGMiLCJNNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyem0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzNTJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHoiXX0sSjU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3RhZmYtc25ha2UiLGljb246WzQ0OCw1MTIsWyJyb2QtYXNjbGVwaXVzIiwicm9kLXNuYWtlIiwic3RhZmYtYWVzY3VsYXBpdXMiXSwiZTU3OSIsIk0xOTIgMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgNjQgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMTYgMCAwLTY0IDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMCAxOTIgMzIgMGM1MyAwIDk2IDQzIDk2IDk2IDAgNDcuNi0zNC42IDg3LjEtODAgOTQuN2wwLTY3YzkuNi01LjUgMTYtMTUuOSAxNi0yNy43IDAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjQtMzIgMGMtNTMgMC05Ni00My05Ni05NiAwLTQ3LjYgMzQuNi04Ny4xIDgwLTk0LjdsMCA2N2MtOS42IDUuNS0xNiAxNS45LTE2IDI3LjcgMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTE5Mi03Mi42IDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJsLTE2IDBDMjEuNSAxMjggMCAxMDYuNSAwIDgwUzIxLjUgMzIgNDggMzJsMTQ0IDB6Il19LFBXZT1KNSxJV2U9SjUsTldlPUo1LEZXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwaWdneS1iYW5rIixpY29uOls1NzYsNTEyLFtdLCJmNGQzIiwiTTI4OC0zMmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnpNNDggMzA0YzAtNzAuMSA0Ny0xMzEuNCAxMTcuMS0xNjQuOSAyNS4zIDQxLjMgNzAuOSA2OC45IDEyMi45IDY4LjkgNTUuNyAwIDEwNC4xLTMxLjcgMTI4LTc4IDE1LjgtMTEuMyAzNS4xLTE4IDU2LTE4bDE5LjUgMGMxMC40IDAgMTggOS44IDE1LjUgMTkuOWwtMTcuMSA2OC4zYzkuOSAxMi40IDE4LjIgMjUuNyAyNC40IDM5LjhsMjEuNyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00MCAwYy0xNi41IDIyLTM4LjUgMzkuNi02NCA1MC43bDAgMjkuM2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzMgMGMtMTQuMyAwLTI2LjgtOS41LTMwLjgtMjMuMmwtNy4xLTI0LjgtODIuMyAwLTcuMSAyNC44QzIzNS44IDUwMi41IDIyMy4zIDUxMiAyMDkgNTEybC0zMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI5LjNDODcuNSA0MjYgNDggMzY5LjYgNDggMzA0em0zNzYgMTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdfSxPV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9udW1lbnQiLGljb246WzM4NCw1MTIsW10sImY1YTYiLCJNMjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw5NSA0N2MtNC4xIDQuMS02LjUgOS40LTcgMTUuMUw1OC40IDQ0OCA0OCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjQgMC0yOS43LTM4NS44Yy0uNC01LjctMi45LTExLjEtNy0xNS4xTDIwOS0zM3pNMTI4IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXX0sREg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5nbGVzLXJpZ2h0IixpY29uOls0NDgsNTEyLFsxODcsImFuZ2xlLWRvdWJsZS1yaWdodCJdLCJmMTAxIiwiTTQzOS4xIDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzNzEuMiAyNTYgMjMzLjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHptLTM1MiAxNjBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTc5LjIgMjU2IDQxLjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6Il19LFJXZT1ESCxmOD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkZXNrdG9wIixpY29uOls1MTIsNTEyLFsxMjg0MjEsNjE3MDQsImRlc2t0b3AtYWx0Il0sImYzOTAiLCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDQgMC0xNiA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwLTE2LTQ4IDE0NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05NiA5NmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxCV2U9ZjgsSFdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBsYW5lLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTU1NyIsIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDc4IDcxLjVjLTY5LjMgMjktMTE4IDk3LjQtMTE4IDE3Ny4yIDAgNDkuMyAxOC42IDk0LjMgNDkuMSAxMjguM0wyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il19LHFXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZXR3ZWV0IixpY29uOls1NzYsNTEyLFtdLCJmMDc5IiwiTTExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDMyIDAgMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjI0IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6TTQ1Ny40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzU1Ni45IDM1MiA1NDQgMzUybC0zMiAwIDAtMjI0YzAtNTMtNDMtOTYtOTYtOTZMMjg4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0eiJdfSxFSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ1c2VyLWdlYXIiLGljb246WzY0MCw1MTIsWyJ1c2VyLWNvZyJdLCJmNGZlIiwiTTI1Ni41IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNyAzMDRsNTkuNCAwIDEuNSAwYy0xMi45IDI2LjgtNy44IDU4LjIgMTEuNSA3OS41LTIwLjIgMjIuMy0yNC44IDU1LjgtOS40IDgzLjRsMjIuNSA0MC40Yy45IDEuNiAxLjkgMy4yIDIuOSA0LjdsLTIzNyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3ptMjA1LjktNTYuNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNi4xYzAgMTguOSAyNC4xIDMyLjggNDAuNSAyMy40bDUtMi45YzExLjYtNi43IDI2LjUtMi42IDMzIDkuMWwyMi40IDQwLjJjNi4yIDExLjIgMi42IDI1LjItOC4yIDMybC00LjcgMi45Yy0xNi4yIDEwLjEtMTYuMiAzOS45IDAgNTAuMWw0LjYgMi45YzEwLjggNi44IDE0LjUgMjAuOCA4LjMgMzJMNjA3IDQ4My44Yy02LjUgMTEuNy0yMS40IDE1LjktMzMgOS4xbC00LjktMi45Yy0xNi40LTkuNS00MC41IDQuNS00MC41IDIzLjRsMCA2LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNS45YzAtMTktMjQuMi0zMy00MC43LTIzLjVsLTQuOCAyLjhjLTExLjYgNi43LTI2LjQgMi42LTMzLTkuMWwtMjIuNi00MC40Yy02LjItMTEuMi0yLjYtMjUuMyA4LjMtMzIuMWw0LjQtMi43YzE2LjMtMTAuMSAxNi4zLTQwLjEgMC01MC4ybC00LjUtMi44Yy0xMC45LTYuOC0xNC41LTIwLjktOC4zLTMyLjFsMjIuNS00MC4zYzYuNS0xMS43IDIxLjQtMTUuOCAzMi45LTkuMWw0LjggMi44YzE2LjUgOS41IDQwLjctNC41IDQwLjctMjMuNWwwLTUuOXptOTkuOSAxMzYuMmE1MiA1MiAwIDEgMCAtMTA0IDAgNTIgNTIgMCAxIDAgMTA0IDB6Il19LFZXZT1FSCxqV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm9yZGVyLWFsbCIsaWNvbjpbNDQ4LDUxMixbXSwiZjg0YyIsIk0zODQgOTZsMCAxMjgtMTI4IDAgMC0xMjggMTI4IDB6bTAgMTkybDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwek0xOTIgMjI0bC0xMjggMCAwLTEyOCAxMjggMCAwIDEyOHpNNjQgMjg4bDEyOCAwIDAgMTI4LTEyOCAwIDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdfSxVV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29pbnMiLGljb246WzUxMiw1MTIsW10sImY1MWUiLCJNMTI4IDk2bDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODBsMCAxNmMwIDMwLjYtNDEuMyA1Ny4yLTEwMiA3MC43LTIuNC0yLjgtNC45LTUuNS03LjQtOC0xNS41LTE1LjMtMzUuNS0yNi45LTU2LjQtMzUuNS00MS45LTE3LjUtOTYuNS0yNy4xLTE1NC4yLTI3LjEtMjEuOSAwLTQzLjMgMS40LTYzLjggNC4xLS4yLTEuMy0uMi0yLjctLjItNC4xek00MzIgMzUzbDAtNDYuMmMxNS4xLTMuOSAyOS4zLTguNSA0Mi4yLTEzLjkgMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXptMC05NmwwLTMzYzAtNC41LS40LTguOC0xLTEzIDE1LjUtMy45IDMwLTguNiA0My4yLTE0LjJzMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXpNMCAyNDBsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwczE5MiAzNS44IDE5MiA4MGwwIDE2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAyODQuMiAwIDI0MHptMzg0IDk2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAzODAuMiAwIDMzNmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjR6bTAgODAuNmwwIDE1LjRjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDQ3Ni4yIDAgNDMybDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zeiJdfSxXV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibWFycy1zdHJva2UiLGljb246WzU3Niw1MTIsWzk4OTRdLCJmMjI5IiwiTTQxNi0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MC43IDAtNTguNyA1OC43LTE3LjQtMTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTcuNCAxNy40LTIzIDIzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDIzLTIzIDE3LjQgMTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ1My4zIDEzNiA1MTIgNzcuMyA1MTIgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNTc2IDBjMC0xNy43LTE0LjMtMzItMzItMzJMNDE2LTMyek0xMjggMzA0YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6Il19LFBIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRzaGFrZS1hbmdsZSIsaWNvbjpbNTc2LDUxMixbImhhbmRzLWhlbHBpbmciXSwiZjRjNCIsIk0yNjguOSA1My4yTDE1Mi4zIDE4Mi44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM0NCA1NzYgMjg4IDU3NiAwIDQ2NCA2NCA0NDAuMiA0OC4xQzQyNC40IDM3LjYgNDA1LjkgMzIgMzg2LjkgMzJsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxNTAuN0wyMjMuNCAzMiAxODMuOCAzMmMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMCAxOTIgMCA1NDQgMTQ0IDQwOCAxNTYuNCA0MTguM2MyMyAxOS4yIDUyIDI5LjcgODEuOSAyOS43bDE1LjcgMC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0MSA0MSA5IDBjMTkuMSAwIDM3LjgtNC4zIDU0LjgtMTIuM0wzNTkgNDA5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzIgMzIgMTcuNS0xNy41YzguOS04LjkgMTEuNS0yMS44IDcuNi0zMy4xbC0xMzcuOS0xMzYuOC0xNC45IDE0LjljLTQ5LjMgNDkuMy0xMjkuMSA0OS4zLTE3OC40IDAtMjMtMjMtMjMuOS01OS45LTIuMi04NHoiXX0sR1dlPVBILFlXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1kb3duIixpY29uOlszODQsNTEyLFs4NTk1XSwiZjA2MyIsIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCA0MDIuNyAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzNzAuNy0xMDUuNC0xMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXX0sSUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibG9jYXRpb24tZG90IixpY29uOlszODQsNTEyLFsibWFwLW1hcmtlci1hbHQiXSwiZjNjNSIsIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwUzM4NCA4NC40IDM4NCAxODguNmMwIDExOS4zLTEyMC4yIDI2Mi4zLTE3MC40IDMxNi44LTExLjggMTIuOC0zMS41IDEyLjgtNDMuMyAwLTUwLjItNTQuNS0xNzAuNC0xOTcuNS0xNzAuNC0zMTYuOHpNMTkyIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXX0sWldlPUlILFhXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwbHVnLWNpcmNsZS1leGNsYW1hdGlvbiIsaWNvbjpbNjQwLDUxMixbXSwiZTU1ZCIsIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdfSxLV2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY29va2llLWJpdGUiLGljb246WzUxMiw1MTIsW10sImY1NjQiLCJNMjU3LjUgMjcuNmMtLjgtNS40LTQuOS05LjgtMTAuMy0xMC42LTIyLjEtMy4xLTQ0LjYgLjktNjQuNCAxMS40bC03NCAzOS41Qzg5LjEgNzguNCA3My4yIDk0LjkgNjMuNCAxMTVMMjYuNyAxOTAuNmMtOS44IDIwLjEtMTMgNDIuOS05LjEgNjQuOWwxNC41IDgyLjhjMy45IDIyLjEgMTQuNiA0Mi4zIDMwLjcgNTcuOWw2MC4zIDU4LjRjMTYuMSAxNS42IDM2LjYgMjUuNiA1OC43IDI4LjdsODMgMTEuN2MyMi4xIDMuMSA0NC42LS45IDY0LjQtMTEuNGw3NC0zOS41YzE5LjctMTAuNSAzNS42LTI3IDQ1LjQtNDcuMmwzNi43LTc1LjVjOS44LTIwLjEgMTMtNDIuOSA5LjEtNjQuOS0uOS01LjMtNS4zLTkuMy0xMC42LTEwLjEtNTEuNS04LjItOTIuOC00Ny4xLTEwNC41LTk3LjQtMS44LTcuNi04LTEzLjQtMTUuNy0xNC42LTU0LjYtOC43LTk3LjctNTItMTA2LjItMTA2Ljh6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LE5IPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNjcmV3ZHJpdmVyLXdyZW5jaCIsaWNvbjpbNTc2LDUxMixbInRvb2xzIl0sImY3ZDkiLCJNNzAuOC02LjdjNS40LTUuNCAxMy44LTYuMiAyMC4yLTJMMjA5LjkgNzAuNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZsMCA0OS42IDkwLjggOTAuOGMzMy4zLTE1IDczLjktOC45IDEwMS4yIDE4LjVMNTQyLjIgMzgyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTYwLjEgNjAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjg4LjEgMzg0Yy0yNy40LTI3LjQtMzMuNS02Ny45LTE4LjUtMTAxLjJsLTkwLjgtOTAuOC00OS42IDBjLTEwLjcgMC0yMC43LTUuMy0yNi42LTE0LjJMMjMuNCA1OC45Yy00LjItNi4zLTMuNC0xNC44IDItMjAuMkw3MC44LTYuN3ptMTQ1IDMwMy41Yy02LjMgMzYuOSAyLjMgNzUuOSAyNi4yIDEwNy4ybC05NC45IDk1Yy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDBzLTI4LjEtNzMuNyAwLTEwMS44bDEzNS40LTEzNS41IDM1LjIgMzUuMXpNMzg0LjEgMGMyMC4xIDAgMzkuNCAzLjcgNTcuMSAxMC41IDEwIDMuOCAxMS44IDE2LjUgNC4zIDI0LjFMMzg4LjggOTEuM2MtMyAzLTQuNyA3LjEtNC43IDExLjNsMCA0MS40YzAgOC44IDcuMiAxNiAxNiAxNmw0MS40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w1Ni43LTU2LjdjNy42LTcuNSAyMC4zLTUuNyAyNC4xIDQuMyA2LjggMTcuNyAxMC41IDM3IDEwLjUgNTcuMSAwIDQzLjItMTcuMiA4Mi4zLTQ1IDExMS4xbC00OS4xLTQ5LjFjLTMzLjEtMzMtNzguNS00NS43LTEyMS4xLTM4LjRsLTU2LjgtNTYuOCAwLTI5LjctLjItNWMtLjgtMTIuNC00LjQtMjQuMy0xMC41LTM0LjkgMjkuNC0zNSA3My40LTU3LjIgMTIyLjctNTcuM3oiXX0sUVdlPU5ILEpXZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJpbmRlbnQiLGljb246WzQ0OCw1MTIsW10sImYwM2MiLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTI3LjggMjY4LjZMMjUuOCAzNDcuOUMxNS4zIDM1Ni4xIDAgMzQ4LjYgMCAzMzUuM0wwIDE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6Il19LEZIPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhcnMiLGljb246WzQ0OCw1MTIsWyJuYXZpY29uIl0sImYwYzkiLCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXX0sZUdlPUZILE9IPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhhbmRzLXByYXlpbmciLGljb246WzY0MCw1MTIsWyJwcmF5aW5nLWhhbmRzIl0sImY2ODQiLCJNMjI0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMi42IDg4LjItMTE5LjdjMTMuMS0xNy44IDkuMy00Mi44LTguNS01NS45cy00Mi44LTkuMy01NS45IDguNUwxMDYuNSAxNDIuOUM4OS4zIDE2Ni4yIDgwIDE5NC41IDgwIDIyMy42bDAgMTEwLjctNTguMSAxOS40QzguOCAzNTggMCAzNzAuMiAwIDM4NGwwIDk2YzAgMTAgNC43IDE5LjUgMTIuNyAyNS41czE4LjQgOCAyOC4xIDUuMmwxNTQuNC00NC4xYzU1LTE1LjcgOTIuOC02NS45IDkyLjgtMTIzLjFMMjg4IDIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDcyem0xOTIgMGwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTE5LjZjMCA1Ny4yIDM3LjkgMTA3LjQgOTIuOCAxMjMuMWwxNTQuNCA0NC4xYzkuNyAyLjggMjAgLjggMjguMS01LjJTNjQwIDQ5MCA2NDAgNDgwbDAtOTZjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTU4LjEtMTkuNCAwLTExMC43YzAtMjktOS4zLTU3LjMtMjYuNS04MC43TDQ0MC4yIDE2LjNDNDI3LjEtMS41IDQwMi4xLTUuMyAzODQuMyA3LjhzLTIxLjYgMzguMS04LjUgNTUuOUw0NjQgMTgzLjQgNDY0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXX0sdEdlPU9ILGFHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ2aXJ1c2VzIixpY29uOls2NDAsNTEyLFtdLCJlMDc2IiwiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMzAuNSAzNi45IDQ1LjggNTguNSAyNC4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTIxLjYgMjEuNi02LjMgNTguNSAyNC4yIDU4LjUgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTMwLjUgMC00NS44IDM2LjktMjQuMiA1OC41IDEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwYy0yMS42LTIxLjYtNTguNS02LjMtNTguNSAyNC4yIDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMzAuNS0zNi45LTQ1LjgtNTguNS0yNC4yLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zQzc3LjggMjYwLjkgNjIuNSAyMjQgMzIgMjI0IDE0LjMgMjI0IDAgMjA5LjcgMCAxOTJzMTQuMy0zMiAzMi0zMmMzMC41IDAgNDUuOC0zNi45IDI0LjItNTguNS0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwQzEyMy4xIDc3LjggMTYwIDYyLjUgMTYwIDMyIDE2MCAxNC4zIDE3NC4zIDAgMTkyIDB6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjggNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjQ4IDQwYzAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01MDQgMzg0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il19LGlHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2hvb2wtZmxhZyIsaWNvbjpbNTc2LDUxMixbXSwiZTU2ZSIsIk0yNTYtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC03MiAwIDAgMTkuMiAxMjggNzYuOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAxMjgtNzYuOCAwLTkxLjJ6TTI0MCAzODRsMCA4MCA5NiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTExMiA0MTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiA0MTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6bS0yMjQgMGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6Il19LHJHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFkZW1hcmsiLGljb246WzY0MCw1MTIsWzg0ODJdLCJmMjVjIiwiTTM0Ni42IDExMC4yYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVMyODggMTEzLjkgMjg4IDEyOGwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTUwLjMgNjkuNCAxMDQuMWM1LjkgOC45IDE1LjkgMTQuMiAyNi42IDE0LjJzMjAuNy01LjMgMjYuNi0xNC4yTDU0NCAyMzMuNyA1NDQgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZjMC0xNC4xLTkuMi0yNi41LTIyLjctMzAuNnMtMjguMSAxLjEtMzUuOSAxMi45TDQ0OCAyNjIuMyAzNDYuNiAxMTAuMnpNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsNjQgMCAwIDIyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgOTZ6Il19LHNHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaXJlLWJ1cm5lciIsaWNvbjpbNTEyLDUxMixbXSwiZTRmMSIsIk0yODEuNyA0OC4zTDI5NCAzNC41YzUuNC02LjEgMTMuMy04LjggMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjEgMjYuMiA4OC4xIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVzMTMuNCAzLjIgMTguOCA3LjVjMTQuNCAxMS40IDM4LjkgNDAuNyAzOC45IDQwLjd6TTMyMCAyNDAuMmMwLTM2LjUtMzctNzMtNTQuOC04OC40LTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC44IDUxLjktNTQuOCA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTkyLjggMzIwYzM3LjcgNDguMyA5Ni4xIDgwIDE2My4yIDgwIDY2LjUgMCAxMjUuMS0zMS43IDE2My04MGw0NSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTY0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQ0LjggMHpNNDU2IDQwMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdfSxSSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXNtaWxlLWJlYW0iLGljb246WzUxMiw1MTIsWzEyODUyMiwic21pbGUtYmVhbSJdLCJmNWI4IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdfSxuR2U9Ukgsb0dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRlbnQtYXJyb3ctbGVmdC1yaWdodCIsaWNvbjpbNTEyLDUxMixbXSwiZTU3ZiIsIk0tLjUgMTEzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw3Mi03MmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDMxMC4xIDAgNTQuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDAtLjEgMC0yNjIgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03Mi03MnpNMzcuMSA0NzZMNjAuMyAyOTIuNmMxLjItOS43IDYuOC0xOC4zIDE1LjEtMjMuM0wyMzguOCAxNzBjMTAuMi02LjIgMjIuOS02LjIgMzMuMS0uMWwxNjUuNSA5OS40YzguNCA1IDE0IDEzLjcgMTUuMyAyMy40TDQ3NS45IDQ3NmMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTcxLjkgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN0wyNzUuNCAzNTcuOWMtMS44LTMuNi01LjUtNS45LTkuNS01LjktNS45IDAtMTAuNiA0LjctMTAuNiAxMC42bDAgMTE3LjRjMCAxNy43LTE0LjMgMzItMzIgMzJMNjguOCA1MTJjLTE5LjMgMC0zNC4yLTE2LjktMzEuNy0zNnoiXX0sbEdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InJvdXRlIixpY29uOls1MTIsNTEyLFtdLCJmNGQ3IiwiTTUxMiA5NmMwIDUwLjItNTkuMSAxMjUuMS04NC42IDE1NS0zLjggNC40LTkuNCA2LjEtMTQuNSA1TDMyMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMjc2LjQgMGM4LjctOS45IDE5LjMtMjIuNiAzMC0zNi44IDYuMy04LjQgMTIuOC0xNy42IDE5LTI3LjJMNDE2IDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NmwzOS44IDBjLTIxLTMxLjUtMzkuOC02Ny43LTM5LjgtOTYgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTE3LjEgNDg5LjFjLTMuOCA0LjMtNy4yIDguMS0xMC4xIDExLjNsLTEuOCAyLS4yLS4yYy02IDQuNi0xNC42IDQtMjAtMS44LTI1LjItMjcuNC04NS05Ny45LTg1LTE0OC40IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAzMC0yMS4xIDY3LTQzLjUgOTcuOS0xMC43IDE0LjctMjEuNyAyOC0zMC44IDM4LjVsLS42IC43ek0xMjggMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTQxNiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdfSxCSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmdsZXMtdXAiLGljb246WzM4NCw1MTIsWyJhbmdsZS1kb3VibGUtdXAiXSwiZjEwMiIsIk0yMTQuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMzI5LjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHptMTYwIDM1MmwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDMwMS4zIDMyOS40IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6Il19LGNHZT1CSCxkR2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYnVja2V0IixpY29uOls0NDgsNTEyLFtdLCJlNGNmIiwiTTQ0My43IDIwOGMyLjcgNC43IDQuMyAxMC4yIDQuMyAxNiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNS4xIDAtMjIuNCAyMTNjLTIuNiAyNC40LTIzLjIgNDMtNDcuOCA0M2wtMjMzLjYgMGMtMjQuNiAwLTQ1LjItMTguNS00Ny44LTQzTDM3LjEgMjU2IDMyIDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC01LjggMS42LTExLjMgNC4zLTE2bDQzOS40IDB6TTIyNC0xNmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGwwIDMyLTQ4IDAgMC0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLTQ4IDAgMC0zMkM4MCA0OC41IDE0NC41LTE2IDIyNC0xNnoiXX0scEdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Imxlc3MtdGhhbi1lcXVhbCIsaWNvbjpbNDQ4LDUxMixbXSwiZjUzNyIsIk00MjYuMSA5NC40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJsLTM4NCAxMjhDOC44IDE2NiAwIDE3OC4yIDAgMTkyczguOCAyNiAyMS45IDMwLjRsMzg0IDEyOGMxNi44IDUuNiAzNC45LTMuNSA0MC41LTIwLjJzLTMuNS0zNC45LTIwLjItNDAuNUwxMzMuMiAxOTIgNDI2LjEgOTQuNHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnoiXX0saEdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvbGRlci1jbG9zZWQiLGljb246WzUxMiw1MTIsW10sImUxODUiLCJNNDQ4IDQ0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2IDUxMiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0em02NC0yODhMMCAxNjAgMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTZ6Il19LHVHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tdGhyb3VnaC13aW5kb3ciLGljb246WzY0MCw1MTIsW10sImU1YTkiLCJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNC02MC41IDI0LjItMTAwLjEgODIuNy0xMDAuMSAxNDcuOWwwIDczLjgtNjQgMCAwLTMyMHptMjg4IDBsMjI0IDAgMCAzMjAtNjcuNyAwLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNCA0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwbC0yNi42IDAgNDIuNyA2NCAxNTAuOSAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI2MC4yIDAgMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRsLTg0LjItMTI2LjIgNzQuNiAwIDQwIDQ4em0tMTU5LjUgMGwtNzMuNSAwIDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il19LGZHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzY2hvb2wtbG9jayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2ZiIsIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzMgMCA2MC4yIDI1IDYzLjYgNTcuMi0xNC43LTUuOS0zMC44LTkuMi00Ny42LTkuMi03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTMzMi4zIDM0MS41Yy02LTMuNS0xMi45LTUuNS0yMC4zLTUuNWwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA4OCA5NiAwIDAtNjQuMWMwLTIwLjggNC40LTQwLjUgMTIuMy01OC40ek0xMTIgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0yMjQtNDhhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01NjAgMzUybDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMHptLTExMiAyLjdsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjN6Il19LG1HZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tYnVyc3QiLGljb246WzY0MCw1MTIsW10sImU1M2IiLCJNMjA0IDQwLjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0ek00IDE0NC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek05Ni41IDI4NS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMOTYuNSAyODUuNXpNNjIuNiAyLjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNjIuNiAzNi42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNMzUyLjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTQ3OC43IDI5OS4xbC00Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3NS4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjUuMi0zMy45IDY1LTUzLjkgMTA3LjItNTMuOXM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnoiXX0sSEg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibGVmdC1sb25nIixpY29uOls1NzYsNTEyLFsibG9uZy1hcnJvdy1hbHQtbGVmdCJdLCJmMzBhIiwiTTkuNCAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxOTIgMTE1LjEgMTkyIDEyOGwwIDY0IDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMzNiAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6Il19LGdHZT1ISCxxSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsb2NhdGlvbi1jcm9zc2hhaXJzIixpY29uOls1NzYsNTEyLFsibG9jYXRpb24iXSwiZjYwMSIsIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAyNTZhMTYwIDE2MCAwIDEgMCAzMjAgMCAxNjAgMTYwIDAgMSAwIC0zMjAgMHptMTYwLTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdfSxiR2U9cUgsVkg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWRvdHMtZnJvbS1saW5lIixpY29uOls1MTIsNTEyLFsiZGlhZ25vc2VzIl0sImY0NzAiLCJNMTg0IDcyYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDI5OS4zYy0xOS45IDIyLjYtMzIgNTIuMi0zMiA4NC43bDAgMzItNjQgMCAwLTMyYzAtMTA2IDg2LTE5MiAxOTItMTkyczE5MiA4NiAxOTIgMTkybDAgMzItNjQgMCAwLTMyYzAtMzIuNS0xMi4xLTYyLjEtMzItODQuN2wwIDExNi43LTE5MiAwIDAtMTE2Ljd6TTIzMiAzODRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OC0xMDRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjQgNDY0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNjQgMTg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il19LHZHZT1WSCxVbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYXVnZS1zaW1wbGUtaGlnaCIsaWNvbjpbNTEyLDUxMixbNjE2NjgsInRhY2hvbWV0ZXIiLCJ0YWNob21ldGVyLWZhc3QiXSwiZjYyYSIsIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NHoiXX0seUdlPVVtLHhHZT1VbSxqSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhbmdsZXMtbGVmdCIsaWNvbjpbNDQ4LDUxMixbMTcxLCJhbmdsZS1kb3VibGUtbGVmdCJdLCJmMTAwIiwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwem0zNTItMTYwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjY5LjMgMjU2IDQwNi42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAweiJdfSx3R2U9akgsVUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidXAtZG93biIsaWNvbjpbNTEyLDUxMixbODU5NywxMTAyMSwiYXJyb3dzLWFsdC12Il0sImYzMzgiLCJNNDA2LjYgNTAyLjZsOTYtOTZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgMzUyIDQ4MCAzNTJsLTY0IDAgMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMjAtNjQgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDB6TTE1MC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxOS4xIDE2MCAzMiAxNjBsNjQgMCAwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwIDY0IDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtOTYtOTZ6Il19LE1HZT1VSCxXSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJiYXR0ZXJ5LWVtcHR5IixpY29uOls2NDAsNTEyLFsiYmF0dGVyeS0wIl0sImYyNDQiLCJNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNmw0MTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yMjRjMC04LjgtNy4yLTE2LTE2LTE2bC00MTYgMHpNMzIgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwbC00MTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0yMjR6Il19LHpHZT1XSCxrR2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToia2V5Ym9hcmQiLGljb246WzU3Niw1MTIsWzllM10sImYxMWMiLCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE2IDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNzYgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXX0sU0dlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNvb2tpZSIsaWNvbjpbNTEyLDUxMixbMTI3ODUwXSwiZjU2MyIsIk0yNDcuMiAxN2MtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45bC0xNC42LTgyLjhjLTMuOS0yMi4xLTE0LjYtNDIuMy0zMC43LTU3LjlMMzg4LjkgNTcuNWMtMTYuMS0xNS42LTM2LjYtMjUuNi01OC43LTI4LjdMMjQ3LjIgMTd6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LENHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzdG9wd2F0Y2giLGljb246WzQ0OCw1MTIsWzkyMDFdLCJmMmYyIiwiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptODAgMTg0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il19LF9HZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJlamVjdCIsaWNvbjpbNDQ4LDUxMixbOTE2N10sImYwNTIiLCJNMjI0IDMyYzEzLjUgMCAyNi4zIDUuNiAzNS40IDE1LjZsMTc2IDE5MmMxMi45IDE0IDE2LjIgMzQuMyA4LjYgNTEuOFM0MTkgMzIwIDQwMCAzMjBMNDggMzIwYy0xOSAwLTM2LjMtMTEuMi00My45LTI4LjdzLTQuMy0zNy43IDguNi01MS44bDE3Ni0xOTJDMTk3LjcgMzcuNiAyMTAuNSAzMiAyMjQgMzJ6TTAgNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il19LFRHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzYXRlbGxpdGUtZGlzaCIsaWNvbjpbNTEyLDUxMixbMTI4MjI1XSwiZjdjMCIsIk0yMzIgMGMxNTQuNiAwIDI4MCAxMjUuNCAyODAgMjgwIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTI4LjEtMTAzLjktMjMyLTIzMi0yMzItMTMuMyAwLTI0LTEwLjctMjQtMjRTMjE4LjcgMCAyMzIgMHpNMjA4IDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI2LjQgMTQyLjdjOC44LTE3LjkgMzIuNC0xOS45IDQ2LjUtNS44bDEyOC41IDEyOC41IDMyLTMyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTMyIDMyIDEyOC41IDEyOC41YzE0LjEgMTQuMSAxMiAzNy42LTUuOCA0Ni41LTM0LjIgMTYuOS03Mi42IDI2LjQtMTEzLjMgMjYuNC0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2IDAtNDAuNyA5LjUtNzkuMiAyNi40LTExMy4zeiJdfSxHSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmYWNlLXJvbGxpbmctZXllcyIsaWNvbjpbNTEyLDUxMixbMTI4NTgwLCJtZWgtcm9sbGluZy1leWVzIl0sImY1YTUiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAzNTJsMTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTEyOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0zMi0xMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjR6bTEyOCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il19LExHZT1HSCxZSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaXN0LWNoZWNrIixpY29uOls1MTIsNTEyLFsidGFza3MiXSwiZjBhZSIsIk0xMzMuOCAzNi4zYzEwLjkgNy42IDEzLjUgMjIuNiA1LjkgMzMuNGwtNTYgODBjLTQuMSA1LjgtMTAuNSA5LjUtMTcuNiAxMC4xUzUyIDE1OCA0NyAxNTNMNyAxMTNDLTIuMyAxMDMuNi0yLjMgODguNCA3IDc5UzMxLjYgNjkuNyA0MSA3OWwxOS44IDE5LjggMzkuNi01Ni42YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXptMCAxNjBjMTAuOSA3LjYgMTMuNSAyMi42IDUuOSAzMy40bC01NiA4MGMtNC4xIDUuOC0xMC41IDkuNS0xNy42IDEwLjFTNTIgMzE4IDQ3IDMxM0w3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDE5LjggMTkuOCAzOS42LTU2LjZjNy42LTEwLjkgMjIuNi0xMy41IDMzLjQtNS45ek0yMjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTYwIDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek02NCAzNzZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdfSwkR2U9WUgsQUdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNhY2steG1hcmsiLGljb246WzUxMiw1MTIsW10sImU1NmEiLCJNMzI4IDExMmwtMTQ0IDAtMzcuMy03NC41Yy0xLjgtMy42LTIuNy03LjYtMi43LTExLjYgMC0xNC4zIDExLjYtMjUuOSAyNS45LTI1LjlMMzQyLjEgMGMxNC4zIDAgMjUuOSAxMS42IDI1LjkgMjUuOSAwIDQtLjkgOC0yLjcgMTEuNkwzMjggMTEyek0xNjkuNiAxNjBsMTcyLjggMCA0OC43IDQwLjZDNDU3LjYgMjU2IDQ5NiAzMzggNDk2IDQyNC41IDQ5NiA0NzIuOCA0NTYuOCA1MTIgNDA4LjUgNTEybC0zMDUuMSAwQzU1LjIgNTEyIDE2IDQ3Mi44IDE2IDQyNC41IDE2IDMzOCA1NC40IDI1NiAxMjAuOSAyMDAuNkwxNjkuNiAxNjB6TTMyMy45IDI4NC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il19LERHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYXNodGFnIixpY29uOls1MTIsNTEyLFs2MjA5OF0sIjIzIiwiTTIxNC43IC43YzE3LjMgMy43IDI4LjMgMjAuNyAyNC42IDM4bC0xOS4xIDg5LjMgMTI2LjUgMCAyMi0xMDIuN0MzNzIuNCA4IDM4OS40LTMgNDA2LjcgLjdzMjguMyAyMC43IDI0LjYgMzhMNDEyLjIgMTI4IDQ4MCAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTgxLjYgMC0yNy40IDEyOCA2Ny44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTgxLjYgMC0yMiAxMDIuN2MtMy43IDE3LjMtMjAuNyAyOC4zLTM4IDI0LjZzLTI4LjMtMjAuNy0yNC42LTM4bDE5LjEtODkuMy0xMjYuNSAwLTIyIDEwMi43Yy0zLjcgMTcuMy0yMC43IDI4LjMtMzggMjQuNnMtMjguMy0yMC43LTI0LjYtMzhMOTkuOCAzODQgMzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgxLjYgMCAyNy40LTEyOC02Ny44IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODEuNiAwIDIyLTEwMi43QzE4MC40IDggMTk3LjQtMyAyMTQuNyAuN3pNMjA2LjQgMTkybC0yNy40IDEyOCAxMjYuNSAwIDI3LjQtMTI4LTEyNi41IDB6Il19LEVHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0cmFpbiIsaWNvbjpbMzg0LDUxMixbMTI4NjQ2XSwiZjIzOCIsIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTkyIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LFBHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJnYW1lcGFkIixpY29uOls2NDAsNTEyLFtdLCJmMTFiIiwiTTQ0OCA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MlM1NTQgNDQ4IDQ0OCA0NDhsLTI1NiAwQzg2IDQ0OCAwIDM2MiAwIDI1NlM4NiA2NCAxOTIgNjRsMjU2IDB6TTE5MiAxNzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzItMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0zMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQwIDk2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptNjQtOTZhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0eiJdfSxaSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJmaWxlLWV4cG9ydCIsaWNvbjpbNTc2LDUxMixbImFycm93LXJpZ2h0LWZyb20tZmlsZSJdLCJmNTZlIiwiTTk2LjUgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05NiA3OC4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtNzguMSAwIDAtMTMzLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkxLjIgMTguN0MyNzkuMiA2LjcgMjYzIDAgMjQ2IDBMOTYuNSAwek0zNTggMTc2bC05My41IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MC41IDU4LjUgMzU4IDE3NnpNMjI0LjUgMzI4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEwNCAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxJR2U9WkgsWEg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmFjZS1ncmltYWNlIixpY29uOls1MTIsNTEyLFsxMjg1NTYsImdyaW1hY2UiXSwiZjU3ZiIsIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNNDAwIDM1MmMwIDI1LjItMTkuNCA0NS44LTQ0IDQ3LjhsMC05NS43YzI0LjYgMiA0NCAyMi43IDQ0IDQ3Ljh6TTI3NiAzMDRsNDAgMCAwIDk2LTQwIDAgMC05NnptLTgwIDk2bDAtOTYgNDAgMCAwIDk2LTQwIDB6bS00MC05NS44bDAgOTUuN2MtMjQuNi0yLTQ0LTIyLjctNDQtNDcuOHMxOS40LTQ1LjggNDQtNDcuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdfSxOR2U9WEgsS0g9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidHJhaW4tc3Vid2F5IixpY29uOlszODQsNTEyLFsic3Vid2F5Il0sImYyMzkiLCJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMCAwLTE2MC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjE2IDI1Nmw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTcyIDAgMCAxNjB6TTk2IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTIyNC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdfSxGR2U9S0gsUUg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWRvdCIsaWNvbjpbNTEyLDUxMixbMTI4MjgwLCJkb3QtY2lyY2xlIl0sImYxOTIiLCJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzUyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdfSxPR2U9UUgsUkdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im9iamVjdC1ncm91cCIsaWNvbjpbNTc2LDUxMixbXSwiZjI0NyIsIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwzMzcuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTMzNy4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjF6bTQ0OCAwYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xek0xNDQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTExMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yNTYgMzIwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXX0sQkdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNoaXAiLGljb246WzY0MCw1MTIsWzEyODY3NF0sImYyMWEiLCJNMjcyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAxMDguOC0yMS42IDguNmMtMTQuOCA1LjktMjIuNSAyMi40LTE3LjQgMzcuNSAxMC40IDMxLjMgMjYuOCA1OS4zIDQ3LjcgODMuMSAyMC4xLTkuMiA0MS43LTEzLjkgNjMuMy0xNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjRsMS42IDEuMiAwLTIxNS0xMDQgNDEuNiAwLTgzLjJjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgzLjItMTA0LTQxLjYgMCAyMTUgMS42LTEuMmMyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAyMi4zLS4xIDQ0LjYgNC41IDY1LjMgMTQgMjAuOS0yMy43IDM3LjMtNTEuOCA0Ny43LTgzLjEgNS0xNS4yLTIuNi0zMS42LTE3LjQtMzcuNUw1MTIgMjUyLjggNTEyIDE0NGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMCAwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDI3MiAwek00MDMuNCA0NzYuMWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45eiJdfSxIR2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYyIsaWNvbjpbMzg0LDUxMixbOTldLCI0MyIsIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zIDE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjggMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdfSxKSD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzcXVhcmUtcGhvbmUiLGljb246WzQ0OCw1MTIsWyJwaG9uZS1zcXVhcmUiXSwiZjA5OCIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem04OCA5Ni43YzkuOC0yLjcgMjAuMSAyLjQgMjQgMTEuOGwyMC4zIDQ4LjdjMy40IDguMyAxLjEgMTcuOC01LjkgMjMuNWwtMjIuMSAxOGMxNi4yIDM1LjggNDQuNSA2NSA3OS42IDgyLjRsMTkuMy0yMy42YzUuNy02LjkgMTUuMi05LjMgMjMuNS01LjlsNDguNyAyMC4zYzkuNCAzLjkgMTQuNCAxNC4yIDExLjggMjRsLS44IDIuOGMtOC44IDMyLjMtNDAuMSA1OS45LTc4LjIgNTEuOC04Ny41LTE4LjUtMTU2LjMtODcuNC0xNzQuOS0xNzQuOS04LjEtMzguMSAxOS41LTY5LjQgNTEuOC03OC4ybDIuOC0uOHoiXX0scUdlPUpILFZHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJydWxlci1jb21iaW5lZCIsaWNvbjpbNDQ4LDUxMixbXSwiZjU0NiIsIk0xIDQ0MS43QzUuNSA0NjMuNSAyNC44IDQ4MCA0OCA0ODBsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwIDcyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzItNjQgMCAwIDcyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzItNzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwIDAtNjQtNzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwIDAtNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDMuMyAuMyA2LjYgMSA5Ljd6Il19LFdtPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93cy1yb3RhdGUiLGljb246WzUxMiw1MTIsWzEyODQ3MiwicmVmcmVzaCIsInN5bmMiXSwiZjAyMSIsIk02NS45IDIyOC41YzEzLjMtOTMgOTMuNC0xNjQuNSAxOTAuMS0xNjQuNSA1MyAwIDEwMSAyMS41IDEzNS44IDU2LjIgLjIgLjIgLjQgLjQgLjYgLjZsNy42IDcuMi00Ny45IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1My40LTExLjMtMTAuN0MzOTAuNSAyOC42IDMyNi41IDAgMjU2IDAgMTI3IDAgMjAuMyA5NS40IDIuNiAyMTkuNSAuMSAyMzcgMTIuMiAyNTMuMiAyOS43IDI1NS43czMzLjctOS43IDM2LjItMjcuMXptNDQzLjUgNjRjMi41LTE3LjUtOS43LTMzLjctMjcuMS0zNi4ycy0zMy43IDkuNy0zNi4yIDI3LjFjLTEzLjMgOTMtOTMuNCAxNjQuNS0xOTAuMSAxNjQuNS01MyAwLTEwMS0yMS41LTEzNS44LTU2LjItLjItLjItLjQtLjQtLjYtLjZsLTcuNi03LjIgNDcuOSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMGMtOC41IDAtMTYuNyAzLjQtMjIuNyA5LjVTLS4xIDM0My43IDAgMzUyLjNsMSAxMjdjLjEgMTcuNyAxNC42IDMxLjkgMzIuMyAzMS43UzY1LjIgNDk2LjQgNjUgNDc4LjdsLS40LTUxLjUgMTAuNyAxMC4xYzQ2LjMgNDYuMSAxMTAuMiA3NC43IDE4MC43IDc0LjcgMTI5IDAgMjM1LjctOTUuNCAyNTMuNC0yMTkuNXoiXX0sakdlPVdtLFVHZT1XbSxlcT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJwZXJzb24tZHJlc3MiLGljb246WzM4NCw1MTIsWyJmZW1hbGUiXSwiZjE4MiIsIk0xMzYgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTIgMzg0bC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMjcwIDIzNCAzMTMgMzYyLjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0yNS44IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOHoiXX0sV0dlPWVxLEdHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib29rLW9wZW4iLGljb246WzUxMiw1MTIsWzEyODIxNCwxMjgzNjZdLCJmNTE4IiwiTTI1NiAxNDEuM2wwIDMwOS4zIC41LS4yQzMxMS4xIDQyNy43IDM2OS43IDQxNiA0MjguOCA0MTZsMTkuMiAwIDAtMzIwLTE5LjIgMGMtNDIuMiAwLTg0LjEgOC40LTEyMy4xIDI0LjYtMTYuOCA3LTMzLjQgMTMuOS00OS43IDIwLjd6TTIzMC45IDYxLjVMMjU2IDcyIDI4MS4xIDYxLjVDMzI3LjkgNDIgMzc4LjEgMzIgNDI4LjggMzJMNDY0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41bC0xMi44IDUuM2MtNy45IDMuMy0xNi43IDMuMy0yNC42IDBsLTEyLjgtNS4zQzE4NC4xIDQ5MCAxMzMuOSA0ODAgODMuMiA0ODBMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNXoiXX0sWUdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZvbGRlci10cmVlIixpY29uOls1NzYsNTEyLFtdLCJmODAyIiwiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCAzOTJjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTg0IDAgMC00OC0xODQgMGMtNC40IDAtOC0zLjYtOC04bDAtMjMyIDE5MiAwIDAtNDgtMTkyIDAgMC04OHpNMzM2IDIyNGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDh6bTAgMjg4bDE5MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTguNi04LjZjLTktOS0yMS4yLTE0LjEtMzMuOS0xNC4xTDMzNiAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4eiJdfSxaR2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidmlyZ28iLGljb246WzY0MCw1MTIsW10sImU4NTAiLCJNMzY4IDMyYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEybDAgMjYuOGMxNC41LTYuOSAzMC44LTEwLjggNDgtMTAuOCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM1ODkuOSAzODQgNTI4IDM4NGwtNDggMCAwIDMyYzAgMTYuNiAxMi42IDMwLjIgMjguNyAzMS44bDYuNiAuM2MxNi4xIDEuNiAyOC43IDE1LjMgMjguNyAzMS44IDAgMTcuNy0xNC4zIDMyLTMyIDMyLTUzIDAtOTYtNDMtOTYtOTZsMC0zMi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCAzMDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMDRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhsMCAzMDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMjBjMC0xNi42LTEyLjYtMzAuMi0yOC43LTMxLjhsLTYuNi0uM0M0NC42IDk0LjIgMzIgODAuNiAzMiA2NCAzMiA0Ni4zIDQ2LjMgMzIgNjQgMzIgOTEgMzIgMTE1LjMgNDMuMSAxMzIuNyA2MSAxNTIuNiA0MyAxNzkgMzIgMjA4IDMyIDIzOS4zIDMyIDI2Ny43IDQ0LjkgMjg4IDY1LjcgMzA4LjMgNDQuOSAzMzYuNiAzMiAzNjggMzJ6TTUyOCAyMjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNDggNDggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHoiXX0sdHE9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYm94LWFyY2hpdmUiLGljb246WzUxMiw1MTIsWyJhcmNoaXZlIl0sImYxODciLCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZMMCA2NHpNMzIgMTc2bDQ0OCAwIDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yNDB6bTE1MiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il19LFhHZT10cSxLR2U9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVudC1hcnJvdy1kb3duLXRvLWxpbmUiLGljb246WzU3Niw1MTIsW10sImU1N2UiLCJNMTg1IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xQzEyMCAyLjcgMTA5LjMtOCA5Ni04UzcyIDIuNyA3MiAxNmwwIDEwMi4xLTMxLTMxQzMxLjYgNzcuNyAxNi40IDc3LjcgNyA4N1MtMi4zIDExMS42IDcgMTIxbDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyek0xNTUuOCAyNjAuNkwxMzIuMSA0NDggMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMi44LS40LTUuNS0xLThMNTQ4LjIgMjYwLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDM2Ny40IDEzNy45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDE3MC45IDIzNy4zYy04LjMgNS4xLTEzLjkgMTMuNy0xNS4xIDIzLjN6TTQ0OCA0NDhsLTk3LjEgMCAwLTE0OS40YzAtNS45IDQuNy0xMC42IDEwLjYtMTAuNiA0IDAgNy43IDIuMyA5LjUgNS45TDQ0OCA0NDh6Il19LFFHZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJxcmNvZGUiLGljb246WzQ0OCw1MTIsW10sImYwMjkiLCJNNjQgMTYwbDY0IDAgMC02NC02NCAwIDAgNjR6TTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwek02NCA0MTZsNjQgMCAwLTY0LTY0IDAgMCA2NHpNMCAzMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2ek0zMjAgOTZsMCA2NCA2NCAwIDAtNjQtNjQgMHpNMzA0IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OHpNMjg4IDM1MmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTAgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMiAxNC4zLTMyIDMyLTMyem05NiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyLTE0LjMgMzItMzIgMzItMzItMTQuMy0zMi0zMnptMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0tMzIgMzJhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHoiXX0sSkdlPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImRyYWdvbiIsaWNvbjpbNjQwLDUxMixbMTI4MDA5XSwiZjZkNSIsIk0zNTIgMTI0LjVsLTUxLjktMTNjLTYuNS0xLjYtMTEuMy03LjEtMTItMTMuOHMyLjgtMTMuMSA4LjctMTYuMWw0MC44LTIwLjQtNDMuMy0zMi41Yy01LjUtNC4xLTcuOC0xMS4zLTUuNi0xNy45UzI5Ny4xIDAgMzA0IDBMNDY0IDBjMzAuMiAwIDU4LjcgMTQuMiA3Ni44IDM4LjRsNTcuNiA3Ni44YzYuMiA4LjMgOS42IDE4LjQgOS42IDI4LjggMCAyNi41LTIxLjUgNDgtNDggNDhsLTIxLjUgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdsLTEzLjMtMTMuMy0zMiAwIDAgMjEuNWMwIDI0LjggMTIuOCA0Ny45IDMzLjggNjEuMWwxMDYuNiA2Ni42YzMyLjEgMjAuMSA1MS42IDU1LjIgNTEuNiA5My4xIDAgNjAuNi00OS4xIDEwOS44LTEwOS44IDEwOS44TDMyLjMgNTEyYy0zLjMgMC02LjYtLjQtOS42LTEuNC05LjItMi44LTE2LjctOS42LTIwLjQtMTguNi0xLjMtMy4zLTIuMi02LjktMi4zLTEwLjctLjItMy43IC4zLTcuMyAxLjMtMTAuNyAyLjgtOS4yIDkuNi0xNi43IDE4LjYtMjAuNCAzLTEuMiA2LjItMiA5LjUtMi4yTDQzMy4zIDQxMmM4LjMtLjcgMTQuNy03LjcgMTQuNy0xNi4xIDAtNC4zLTEuNy04LjQtNC43LTExLjRsLTQ0LjQtNDQuNGMtMzAtMzAtNDYuOS03MC43LTQ2LjktMTEzLjFsMC0xMDIuNXpNNTEyIDcyLjNjMC0uMSAwLS4yIDAtLjNzMC0uMiAwLS4zbDAgLjZ6bS0xLjMgNy40TDQ2NC4zIDY4LjFjLS4yIDEuMy0uMyAyLjYtLjMgMy45IDAgMTMuMyAxMC43IDI0IDI0IDI0IDEwLjYgMCAxOS41LTYuOCAyMi43LTE2LjN6TTEzMC45IDExNi41YzE2LjMtMTQuNSA0MC40LTE2LjIgNTguNS00LjFsMTMwLjYgODcgMCAyNy41YzAgMzIuOCA4LjQgNjQuOCAyNCA5M2wtMjMyIDBjLTYuNyAwLTEyLjctNC4yLTE1LTEwLjRzLS41LTEzLjMgNC42LTE3LjdMMTcxIDIzMi4zIDE4LjQgMjU1LjhjLTcgMS4xLTEzLjktMi42LTE2LjktOVMuMSAyMzIuOCA1LjQgMjI4TDEzMC45IDExNi41eiJdfSxhcT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VyZ2xhc3MtZW5kIixpY29uOlszODQsNTEyLFs4OTg3LCJob3VyZ2xhc3MtMyJdLCJmMjUzIiwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlsLTY3LjkgNjcuOS02Ny45LTY3LjlDMTA2LjEgMTI0LjkgOTYgMTAwLjQgOTYgNzV6Il19LGVZZT1hcSx2bD17cHJlZml4OiJmYXMiLGljb25OYW1lOiJncmlwIixpY29uOls1MTIsNTEyLFs1ODExOSwiZ3JpZC1ob3Jpem9udGFsIiwiZ3JpcC1ob3Jpem9udGFsIl0sImY1OGQiLCJNODggOTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek0yODAgMjI0bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMTkyIDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDE5MmwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6TTI4MCAyODhjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek04OCA0MTZsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQweiJdfSx0WWU9dmwsYVllPXZsLGlxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJvcmRlci10b3AtbGVmdCIsaWNvbjpbNDQ4LDUxMixbImJvcmRlci1zdHlsZSJdLCJmODUzIiwiTTAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMzUyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OHptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyem0xNjAgMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0zODQgMTkyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LGlZZT1pcSxycT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsaXN0LXVsIixpY29uOls1MTIsNTEyLFsibGlzdC1kb3RzIl0sImYwY2EiLCJNNDggMTQ0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTQ4IDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTk2IDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdfSxyWWU9cnEsc1llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBlb3BsZS1yb2JiZXJ5IixpY29uOls1NzYsNTEyLFtdLCJlNTM2IiwiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42TDMyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDUuN2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMCAuNiAwIDE5MS40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI3LjMgMTMgMjAuNWM1LjkgOS4yIDE2LjEgMTQuOSAyNyAxNC45bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwLjQgMC0zNy40LTU4LjlDMTU3LjYgMTQyIDEzMi4xIDEyOCAxMDQuNyAxMjhMNzIgMTI4eiJdfSxuWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9iaWxlLWJ1dHRvbiIsaWNvbjpbMzg0LDUxMixbXSwiZjEwYiIsIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6TTE5MiA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyeiJdfSxHbT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJhcnJvdy1kb3duLWEteiIsaWNvbjpbNTEyLDUxMixbInNvcnQtYWxwaGEtYXNjIiwic29ydC1hbHBoYS1kb3duIl0sImYxNWQiLCJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0xODItMzQwLjljNTAuNyAxMDEuMyA3Ny4zIDE1NC43IDgwIDE2MCA3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC03LjItMTQuMy04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjljMi43LTUuMyAyOS4zLTU4LjcgODAtMTYwIDUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdzMjMuMiA2LjggMjguNiAxNy43ek0zODQgMTM1LjZsLTIwLjIgNDAuNCA0MC40IDAtMjAuMi00MC40ek0yODggMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlMMzk3LjMgNDE2IDQ0OCA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOWw3My40LTczLjQtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXX0sb1llPUdtLGxZZT1HbSxjWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToibW9uZXktYmlsbCIsaWNvbjpbNTEyLDUxMixbXSwiZjBkNiIsIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0xOTIgMjRjMCA0LjQtMy42IDguMS04IDcuNS0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OHpNNjQgMzI4YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHptOC0xMzYuNWMtNC40IC41LTgtMy4xLTgtNy41bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNXptMzY4IDEyOWM0LjQtLjUgOCAzLjEgOCA3LjVsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjV6Il19LHNxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNpcmNsZS1taW51cyIsaWNvbjpbNTEyLDUxMixbIm1pbnVzLWNpcmNsZSJdLCJmMDU2IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjggMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXX0sZFllPXNxLG5xPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXBvaW50ZXIiLGljb246WzQ0OCw1MTIsWyJtb3VzZS1wb2ludGVyIl0sImYyNDUiLCJNNzcuMyAyLjVjOC4xLTQuMSAxNy45LTMuMiAyNS4xIDIuM2wzMjAgMjM5LjljOC4zIDYuMiAxMS42IDE3IDguNCAyNi44cy0xMi40IDE2LjQtMjIuOCAxNi40bC0xNTIuMyAwIDg4LjkgMTc3LjdjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtODguOS0xNzcuNy05MS4zIDEyMS44Yy02LjIgOC4zLTE3IDExLjYtMjYuOCA4LjRTNjQgNDM0LjMgNjQgNDI0TDY0IDI0YzAtOS4xIDUuMS0xNy40IDEzLjMtMjEuNXoiXX0scFllPW5xLG9xPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InNxdWFyZS1zaGFyZS1ub2RlcyIsaWNvbjpbNDQ4LDUxMixbInNoYXJlLWFsdC1zcXVhcmUiXSwiZjFlMSIsIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zNjggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0LTE1LjQgMC0yOS41LTUuNC00MC42LTE0LjVsLTg1LjMgNDYuNSA4NS4zIDQ2LjVjMTEtOS4xIDI1LjItMTQuNSA0MC42LTE0LjUgMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjQtNjQtMjguNy02NC02NGMwLTIuNSAuMS00LjkgLjQtNy4zTDE1OC41IDMwMGMtMTEuNyAxMi4zLTI4LjIgMjAtNDYuNSAyMC0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE4LjMgMCAzNC44IDcuNyA0Ni41IDIwbDgxLjktNDQuN2MtLjMtMi40LS40LTQuOS0uNC03LjMgMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHoiXX0saFllPW9xLGxxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhYmxlLWNlbGxzLWxhcmdlIixpY29uOls0NDgsNTEyLFsidGgtbGFyZ2UiXSwiZjAwOSIsIk0zODQgOTZsLTEyOCAwIDAgMTI4IDEyOCAwIDAtMTI4em02NCAxMjhsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4ek02NCAyODhsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6bTEyOC02NGwwLTEyOC0xMjggMCAwIDEyOCAxMjggMHptNjQgNjRsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il19LHVZZT1scSxmWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2F0IixpY29uOls1NzYsNTEyLFsxMjgwMDhdLCJmNmJlIiwiTTY0IDk2YzUzIDAgOTYgNDMgOTYgOTZsMCA4NS44YzI5LjctNDQuNyA3Ny44LTc2LjIgMTMzLjQtODQgMjUuNiA2MCA4NS4yIDEwMi4xIDE1NC42IDEwMi4xIDEwLjkgMCAyMS42LTEuMSAzMi0zLjFMNDgwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0MC44LTEzNiAxMDguOCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNDQgMGMtNTMgMC05Ni00My05Ni05NmwwLTIyNGMwLTE2LjYtMTIuNi0zMC4yLTI4LjctMzEuOGwtNi42LS4zQzQ0LjYgMTU4LjIgMzIgMTQ0LjYgMzIgMTI4IDMyIDExMC4zIDQ2LjMgOTYgNjQgOTZ6TTUzMy44IDMuMkM1NDQuMi01LjUgNTYwIDEuOSA1NjAgMTUuNUw1NjAgMTI4YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzMzNiAxODkuOSAzMzYgMTI4bDAtMTEyLjVjMC0xMy42IDE1LjgtMjEgMjYuMi0xMi4zTDQxNiA0OCA0ODAgNDggNTMzLjggMy4yek00MDAgMTA4YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptOTYgMGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il19LG1ZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYWxlbmRhci13ZWVrIixpY29uOls0NDgsNTEyLFtdLCJmNzg0IiwiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDB6Il19LGdZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjb2RlLWNvbXBhcmUiLGljb246WzUxMiw1MTIsW10sImUxM2EiLCJNMTk4LjggMS44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMxODQgMTQ1LjcgMTg0IDEzNmwwLTI0LTI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjE0LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zTDY0IDE0NGMwLTUzIDQzLTk2IDk2LTk2bDI0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6TTM5MiA4MGEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAwem0tOCA3My4zYy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM0w0NDggMzY4YzAgNTMtNDMgOTYtOTYgOTZsLTI0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMzMjggMzY2LjMgMzI4IDM3NmwwIDI0IDI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMTQuN3pNNzIgNDMyYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6Il19LGJZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsZW8iLGljb246WzUxMiw1MTIsW10sImU4NGEiLCJNMjYwIDBjNzIuOSAwIDEzMiA1OS4xIDEzMiAxMzJsMCA1LjQtLjEgMS40LTIzLjggMjcwYy40IDIxLjcgMTguMiAzOS4yIDQwIDM5LjIgMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDBjMCA1Ny40LTQ2LjYgMTA0LTEwNCAxMDRTMzA0IDQ2NS40IDMwNCA0MDhsMC0xLjQgLjEtMS40IDIzLjktMjcwLjYgMC0yLjZjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA0YzAgMy43IC4zIDcuMyAuOCAxMWwyOS43IDE5My40Yy45IDYuMSAxLjQgMTIuMiAxLjQgMTguNGwwIDkuMmMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMwIDQyOS45IDAgMzY4IDUwLjEgMjU2IDExMiAyNTZjMTEuNyAwIDIzIDEuOCAzMy43IDUuMUwxMjkuNiAxNTYuN2MtMS4xLTYuOC0xLjYtMTMuOC0xLjYtMjAuN2wwLTRDMTI4IDU5LjEgMTg3LjEgMCAyNjAgMHpNMTEyIDMyMGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6Il19LHZZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyb2FkLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTU2NiIsIk0yODcuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS42IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDkuMmMzNS4yLTQwIDg2LjctNjUuMiAxNDQuMi02NS4yIDkgMCAxNy44IC42IDI2LjQgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni41IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXX0seVllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InBhbGxldCIsaWNvbjpbNTc2LDUxMixbXSwiZjQ4MiIsIk0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC02NCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHptOTYgNjRsMTI4IDAgMCA2NC0xMjggMCAwLTY0em0xOTIgMGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6Il19LFltPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImNha2UtY2FuZGxlcyIsaWNvbjpbNDQ4LDUxMixbMTI3ODc0LCJiaXJ0aGRheS1jYWtlIiwiY2FrZSJdLCJmMWZkIiwiTTg2LjQtMTAuNUw2MS44IDMxLjZDNTggMzguMSA1NiA0NS42IDU2IDUzLjJMNTYgNTZjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDEwNS42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41em0xMjggMEwxODkuOCAzMS42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMjMzLjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjV6TTMxNy44IDMxLjZjLTMuOCA2LjUtNS44IDE0LTUuOCAyMS42bDAgMi44YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwzNjEuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNUwzMTcuOCAzMS42ek0xMjggMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNUMyNi43IDIyNi42IDAgMjYyLjIgMCAzMDRsMCAyMC44YzIwLjkgMS4zIDQxLjYgNy4zIDYwLjMgMThsNy4xIDQuMWMyNi4zIDE1IDU4LjkgMTMuNCA4My42LTQuMiA0My43LTMxLjIgMTAyLjMtMzEuMiAxNDYgMCAyNC42IDE3LjYgNTcuMyAxOS4zIDgzLjYgNC4ybDcuMS00LjFjMTguNy0xMC43IDM5LjMtMTYuNyA2MC4zLTE4bDAtMjAuOGMwLTQxLjgtMjYuNy03Ny40LTY0LTkwLjVsMC01My41YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNjQgMCAwLTQ4ek00NDggMzczYy0xMi43IDEuMi0yNS4xIDUtMzYuNSAxMS41bC03LjEgNC4xYy00Mi42IDI0LjMtOTUuNCAyMS43LTEzNS4zLTYuOC0yNy0xOS4zLTYzLjItMTkuMy05MC4yIDAtMzkuOSAyOC41LTkyLjcgMzEuMi0xMzUuMyA2LjhsLTcuMS00LjFDMjUuMSAzNzggMTIuNyAzNzQuMSAwIDM3M2wwIDc1YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNzV6Il19LHhZZT1ZbSx3WWU9WW0sTVllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJ1Zy1zbGFzaCIsaWNvbjpbNTc2LDUxMixbXSwiZTQ5MCIsIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjQxLjggMTc2IDM0NCAxNzZjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjRzNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDkuNS0uOCAxOC43LTIuNCAyNy44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0zOTguMiA0NjhjLTIzLjIgMjIuMS01MyAzNy4yLTg2LjIgNDIuMmwwLTEyOC40IDg2LjIgODYuMnpNMjY0IDMzMy44bDAgMTc2LjRjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzMuMy0xMy45IDkuMy0yNi43IDE3LjYtMzcuOEwyNjQgMzMzLjh6TTM1NS42IDEyOGwtODIuNCAwLTcyLjMtNzIuM0MyMTYuMSAyMi44IDI0OS40IDAgMjg4IDAgMzQxIDAgMzg0IDQzIDM4NCA5NmwwIDMuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNHoiXX0selllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRhcnAiLGljb246WzUxMiw1MTIsW10sImU1N2IiLCJNNDQ4IDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ5LjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNMMzg2LjcgNDI5LjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMHptNS41IDIwOEwzNjAgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6TTk2IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il19LGtZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWFncmFtLXByZWRlY2Vzc29yIixpY29uOls0NDgsNTEyLFtdLCJlNDc3IiwiTTI4OS4yIDEzNy45YzIuNS02IDguMy05LjkgMTQuOC05LjlsNDAgMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05OCAwYzEuMyA1LjEgMiAxMC41IDIgMTZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDI0IDQwIDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTY0IDY0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjR6TTM4NCAzNTJsLTMyMCAwIDAgNjQgMzIwIDAgMC02NHptNjQgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjR6Il19LGNxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtZmx1c2hlZCIsaWNvbjpbNTEyLDUxMixbMTI4NTYzLCJmbHVzaGVkIl0sImY1NzkiLCJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTY4IDM5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0tOC05NmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHptMjY0LTcyYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHptLTI4OCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTE5MiAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il19LFNZZT1jcSxDWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZGlhZ3JhbS1uZXh0IixpY29uOls0NDgsNTEyLFtdLCJlNDc2IiwiTTM4NCAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDAgMCA2NC0zMiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMyOTQuNSAyODggMjg4IDI4OGwtMzIgMCAwLTY0IDEyOCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NGwtMzQgMGM1LjYgMjEuNy0uNSA0NS4xLTE2LjcgNjEuM2wtNjQgNjRjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC02NC02NEM5OC42IDMzMy4xIDkyLjQgMzA5LjcgOTggMjg4bC0zNCAweiJdfSxfWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYW5jaG9yLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTRhYyIsIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdfSxUWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVyc29uLWNpcmNsZS14bWFyayIsaWNvbjpbNjQwLDUxMixbXSwiZTU0MyIsIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdfSxMWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3BhIixpY29uOls1NzYsNTEyLFtdLCJmNWJiIiwiTTE2OS43IDIyNy41YzM0LjMgMTguNyA2NC41IDQ0LjEgODguOCA3NC41IDExLjEgMTMuOSAyMSAyOC45IDI5LjQgNDQuOCA4LjUtMTUuOSAxOC4zLTMwLjggMjkuNC00NC44IDI0LjMtMzAuNSA1NC41LTU1LjkgODguOC03NC41IDQxLjctMjIuNyA4OS40LTM1LjUgMTM5LjctMzUuNWw5LjkgMGMxMS4xIDAgMjAuMSA5IDIwLjEgMjAuMSAwIDE0OC0xMTkuOSAyNjcuOS0yNjcuOSAyNjcuOWwtNDAuMiAwQzExOS45IDQ4MCAwIDM2MC4xIDAgMjEyLjEgMCAyMDEgOSAxOTIgMjAuMSAxOTJsOS45IDBjNTAuNCAwIDk4LjEgMTIuOCAxMzkuNyAzNS41ek0zMDMuOSAzOGMxNi45IDE1LjkgNjEuNCA2My40IDg5IDE0Mi4zLTQwLjEgMjAuMi03NS44IDQ4LjItMTA0LjkgODIuMS0yOS4yLTMzLjktNjQuOC02MS44LTEwNC45LTgyLjEgMjcuNi03OC45IDcyLjItMTI2LjQgODktMTQyLjMgNC4zLTQuMSAxMC02IDE1LjktNnMxMS42IDIgMTUuOSA2eiJdfSwkWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYXJpZXMiLGljb246WzUxMiw1MTIsW10sImU4NDYiLCJNNDAxLjYgMGM2MS4zIDAgMTEwLjQgNTAuMyAxMTAuNCAxMTEgMCAyOS40LTExLjYgNTcuOS0zMi42IDc4LjhsLTguOCA4LjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMiAwcy0xMi41LTMyLjggMC00NS4ybDguOC04LjhjOC44LTguOCAxMy44LTIxIDEzLjgtMzMuNiAwLTI1LjktMjEuMS00Ny00Ni40LTQ3LTIyLjUgMC00MS43IDE2LjEtNDUuNyAzOC4yTDI4Ny41IDQ4NS42YzAgLjEtLjEgLjMtLjEgLjQtLjIgLjgtLjMgMS42LS41IDIuMy0uMSAuMy0uMSAuNS0uMiAuNy0uMiAuNi0uNCAxLjMtLjcgMS45LS4yIC41LS40IDEtLjYgMS41LS4xIC4zLS4zIC42LS40IC45LTEuNiAzLjUtMy44IDYuNS02LjQgOS4yLTIgMi00LjIgMy43LTYuNiA1LjEtLjIgLjEtLjMgLjItLjUgLjMtLjcgLjQtMS40IC43LTIuMSAxLS4zIC4xLS42IC4zLS45IC40LS41IC4yLTEgLjQtMS41IC42LS42IC4yLTEuMiAuNS0xLjkgLjctLjIgLjEtLjUgLjItLjcgLjItLjggLjItMS42IC40LTIuMyAuNS0uMiAwLS4zIC4xLS40IC4xLS4yIDAtLjQgMC0uNiAuMS0uNyAuMS0xLjMgLjItMiAuMi0uNCAwLS44IC4xLTEuMiAuMS0uNiAwLTEuMiAuMS0xLjggLjEtLjYgMC0xLjIgMC0xLjgtLjEtLjQgMC0uOC0uMS0xLjItLjEtLjctLjEtMS40LS4xLTItLjItLjIgMC0uNCAwLS42LS4xLS4yIDAtLjMtLjEtLjUtLjEtLjgtLjItMS42LS4zLTIuMy0uNS0uMy0uMS0uNS0uMS0uOC0uMi0uNi0uMi0xLjMtLjQtMS45LS43LS41LS4yLTEtLjQtMS41LS42LS4zLS4xLS42LS4zLS45LS40LS43LS4zLTEuNC0uNy0yLjEtMS0uMi0uMS0uMy0uMi0uNS0uMy0yLjQtMS40LTQuNy0zLjEtNi42LTUuMS0yLjYtMi42LTQuOC01LjctNi40LTkuMi0uMS0uMi0uMi0uMy0uMi0uNWwtLjUtMS4xYy0uMS0uMy0uMi0uNS0uMy0uOC0uMi0uNi0uNS0xLjItLjctMS45LS4xLS4yLS4yLS41LS4yLS43LS4yLS44LS40LTEuNi0uNS0yLjMgMC0uMS0uMS0uMy0uMS0uNEwxNTYgMTAyLjJjLTQtMjIuMS0yMy4yLTM4LjItNDUuNy0zOC4yLTI1LjMgMC00Ni40IDIxLjEtNDYuNCA0NyAwIDEyLjYgNSAyNC44IDEzLjggMzMuNmw4LjggOC44YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4ycy0zMi44IDEyLjUtNDUuMiAwbC04LjgtOC44QzExLjYgMTY4LjkgMCAxNDAuMyAwIDExMSAwIDUwLjMgNDkuMSAwIDExMC40IDAgMTYzLjggMCAyMDkuNiAzOC4zIDIxOSA5MWwzNyAyMDcgMzctMjA3YzkuNC01Mi42IDU1LjItOTEgMTA4LjctOTF6Il19LGRxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImJhcnMtcHJvZ3Jlc3MiLGljb246WzQ0OCw1MTIsWyJ0YXNrcy1hbHQiXSwiZjgyOCIsIk0yODggMTYwbDk2IDAgMC02NC05NiAwIDAgNjR6TTAgMTYwTDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAyMjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZ6TTE2MCA0MTZsMjI0IDAgMC02NC0yMjQgMCAwIDY0ek0wIDQxNmwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2eiJdfSxBWWU9ZHEsRFllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImhlYXJ0LWNpcmNsZS1jaGVjayIsaWNvbjpbNTc2LDUxMixbXSwiZTRmZCIsIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdfSxwcT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXJzLXN0cm9rZS1yaWdodCIsaWNvbjpbNjQwLDUxMixbOTg5NywibWFycy1zdHJva2UtaCJdLCJmMjJiIiwiTTMyMC41IDI1NmExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAwek0yMDguNSA4MGM4Ni4zIDAgMTU4LjEgNjIuMSAxNzMuMSAxNDQuMSAxLS4xIDEuOS0uMSAyLjktLjFsMTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2MS40IDAtMjIuNC0yOGMtMTEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVsNjQgODBjOS4zIDExLjcgOS4zIDI4LjMgMCA0MGwtNjQgODBjLTExIDEzLjgtMzEuMiAxNi00NSA1cy0xNi0zMS4yLTUtNDVsMjIuNC0yOC02MS40IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2IDBjLTEgMC0xLjkgMC0yLjktLjEtMTUgODItODYuOCAxNDQuMS0xNzMuMSAxNDQuMS05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2eiJdfSxFWWU9cHEsUFllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InRvd2VyLW9ic2VydmF0aW9uIixpY29uOls0NDgsNTEyLFtdLCJlNTg2IiwiTTIwOS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNS42IDExLjItMTYuOSAxNy43LTI4LjYgMTcuN2wwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMyAwIDMyIDE5MiA0NSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NSAwIDMyLTE5Mi0xMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYy0xMS43IDAtMjMtNi41LTI4LjYtMTcuNy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzEwLjcgNDQ4bC04Ni43LTYxLjktODYuNyA2MS45IDE3My40IDB6bS0xNTMtMTkybC0zLjUgMjEuMiA2OS45IDQ5LjkgNjkuOS00OS45LTMuNS0yMS4yLTEzMi43IDB6bS0xMi4zIDczLjlsLTEwLjEgNjAuNiA0Ny41LTMzLjktMzcuNC0yNi43em0xMTkuOSAyNi43bDQ3LjUgMzMuOS0xMC4xLTYwLjYtMzcuNCAyNi43ek0xNTIgMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXX0sWm09e3ByZWZpeDoiZmFzIixpY29uTmFtZToic3Rlcmxpbmctc2lnbiIsaWNvbjpbMzg0LDUxMixbMTYzLCJnYnAiLCJwb3VuZC1zaWduIl0sImYxNTQiLCJNOTEuMyAyODhsLTM0LjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMS40IDBDMzcuMyAxNDcuMyAxMDUuMSA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTU3LjMgMC05NC43IDU5LjktNjkuNyAxMTEuNCAzLjYgNy40IDYuNiAxNC45IDkuMSAyMi42bDE0OS41IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0MS4yIDBjMSAzNS4zLTguNyA3MC42LTI4LjkgMTAwLjlsLTE4LjEgMjcuMSAyMTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNzIgMGMtMTEuOCAwLTIyLjYtNi41LTI4LjItMTYuOXMtNS0yMyAxLjYtMzIuOWw1MS4yLTc2LjhjMTMuMS0xOS42IDE5LjItNDIuNiAxOC4yLTY1LjR6Il19LElZZT1abSxOWWU9Wm0sRlllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhdWNldC1kcmlwIixpY29uOls1MTIsNTEyLFsxMjg2ODhdLCJlMDA2IiwiTTIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsOTYgMCAwIDY0LTE4LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTAwLjEgMGMyMC4yIDI5IDUzLjkgNDggOTEuOSA0OHM3MS43LTE5IDkxLjktNDhsMzYuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MGwtMzIgMC0yMi42LTIyLjZjLTYtNi0xNC4xLTkuNC0yMi42LTkuNGwtMTguNyAwIDAtNjQgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDM2LjggNDU1LjRsLTE4LjIgNDIuNGMtMS44IDQuMS0yLjcgOC42LTIuNyAxMy4xbDAgMS4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xLjJjMC00LjUtLjktOC45LTIuNy0xMy4xbC0xOC4yLTQyLjRjLTEuOS00LjUtNi4zLTcuNC0xMS4yLTcuNHMtOS4yIDIuOS0xMS4yIDcuNHoiXX0sbTg9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiY2lyY2xlLWluZm8iLGljb246WzUxMiw1MTIsWyJpbmZvLWNpcmNsZSJdLCJmMDVhIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS04IDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4OCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LE9ZZT1tOCxSWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiZmVhdGhlciIsaWNvbjpbNTEyLDUxMixbMTI5NzE4XSwiZjUyZCIsIk0zNTIgMGM0MSAwIDgwLjMgMTYuMyAxMDkuMiA0NS4ybDUuNSA1LjVjMjkgMjkgNDUuMyA2OC4zIDQ1LjMgMTA5LjIgMCAyNC4xLTUuNyA0Ny42LTE2LjIgNjguOC0xLjkgMy43LTUuMyA2LjUtOS4zIDcuN0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzMi4yIDBjMTQuMyAwIDIxLjQgMTcuMiAxMS4zIDI3LjNsLTIyLjQgMjIuNGMtMS45IDEuOS00LjIgMy4yLTYuNyA0bC04MSAyNC4zYy0zLjkgMS4yLTYuNSA0LjctNi41IDguOCAwIDUuMSA0LjEgOS4yIDkuMiA5LjIgMTMuMiAwIDE4LjkgMTUuNyA3LjggMjIuOS00MS4xIDI2LjYtODkuMyA0MS4xLTEzOSA0MS4xbC04NiAwLTQ4IDQ4Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMNzkuNSAzMzYuNWMtNS43IDUuNy0xNS41IDEuNy0xNS41LTYuNCAwLTY3LjkgMjctMTMzIDc1LTE4MUwyNDIuOCA0NS4yQzI3MS43IDE2LjMgMzExIDAgMzUyIDB6Il19LEJZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJib3dsLXJpY2UiLGljb246WzUxMiw1MTIsW10sImUyZWIiLCJNMTc2IDQwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yNCA0OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek01NiAxNjBsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2bDQ1Ny4xIDBjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjQgMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOGwtMjMxLjUgMGMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6TTIyNCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS05NiAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xMDQgODhsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMjE2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0yOTYgODhsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMTIwIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0zOTIgODhsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjk2IDE2bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il19LGhxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6InN0YXItaGFsZi1zdHJva2UiLGljb246WzU3Niw1MTIsWyJzdGFyLWhhbGYtYWx0Il0sImY1YzAiLCJNMjg4LjEgMzUzLjZjMTAgMCAxOS45IDIuMyAyOSA3bDc0LjQgMzcuOS0xMy04Mi41Yy0zLjItMjAuMiAzLjUtNDAuNyAxNy45LTU1LjJsNTktNTkuMS04Mi41LTEzLjFjLTIwLjItMy4yLTM3LjctMTUuOS00Ny0zNC4xbC0zOC03NC40IDAgMjczLjZ6TTQ1Ny40IDQ4OWMtNy4zIDUuMy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXMxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4yeiJdfSxIWWU9aHEsdXE9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGVtcGVyYXR1cmUtYXJyb3ctZG93biIsaWNvbjpbNTEyLDUxMixbInRlbXBlcmF0dXJlLWRvd24iXSwiZTAzZiIsIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDM5LjEgMzEwLjZjLTYgNi0xNC4xIDkuNC0yMi42IDkuNHMtMTYuNi0zLjQtMjIuNi05LjRsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDkuNCA5LjQgMC0xNzguN2MwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC02NCA2NHoiXX0scVllPXVxLFZZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJtYXNrLXZlbnRpbGF0b3IiLGljb246WzY0MCw1MTIsW10sImU1MjQiLCJNMTUyLjIgMTkyYy0xNS40IDM4LjMtMjQuMiA3Ny4yLTI0LjIgMTA4LjggMCAxMy4zIDEuNSAyNi4yIDQuNCAzOC43bC0xNy0zLjRjLTI5LjktNi01MS40LTMyLjItNTEuNC02Mi44bDAtODEuMyA4OC4yIDB6bTMyLjktNjRMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgxLjNjMCA2MSA0My4xIDExMy41IDEwMi45IDEyNS41bDY2LjMgMTMuM2MxOC43IDIyLjEgNDIuOSA0MCA3MC44IDUxLjhsMC04Ny44Yy0xMC4xLTE0LjItMTYtMzEuMy0xNi00OS43IDAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNCA1Mi41IDAgOTYgODQuOSA5NiAxMzQuNCAwIDE4LjQtNS45IDM1LjQtMTYgNDkuNmwwIDg3LjdjMjcuNi0xMS44IDUxLjctMjkuNiA3MC40LTUxLjZsNjYuNy0xMy4zYzU5LjgtMTIgMTAyLjktNjQuNSAxMDIuOS0xMjUuNWwwLTgxLjNjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTEyMS41IDBjLTM0LjgtNTQuMi04Mi41LTk2LTEzNC41LTk2LTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0zMDIuNSA2NGw4OC40IDAgMCA4MS4zYzAgMzAuNS0yMS41IDU2LjgtNTEuNCA2Mi44bC0xNyAzLjRjMi45LTEyLjQgNC41LTI1LjQgNC41LTM4LjcgMC0zMS42LTguOS03MC41LTI0LjQtMTA4Ljh6TTI4OCAzMjBsMCAxOTIgNjQgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXX0salllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZpbGUtdmlkZW8iLGljb246WzM4NCw1MTIsW10sImYxYzgiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTgwIDMwNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yNCAzNSAzNWMzLjIgMy4yIDcuNSA1IDEyIDUgOS40IDAgMTctNy42IDE3LTE3bDAtOTQuMWMwLTkuNC03LjYtMTctMTctMTctNC41IDAtOC44IDEuOC0xMiA1bC0zNSAzNSAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXX0sVVllPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImFycm93LXRyZW5kLWRvd24iLGljb246WzU3Niw1MTIsW10sImUwOTciLCJNMzg0IDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgyLjctMTY5LjQtMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNDIuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDMyMCAyMDUuMyA0NjYuNyAzNTIgMzg0IDM1MnoiXX0sV1llPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im9pbC1jYW4iLGljb246WzY0MCw1MTIsW10sImY2MTMiLCJNMzIwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyLTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzAgMCAyMS4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI1OS4xIDBjMTguNCAwIDM1LjgtNy45IDQ4LTIxLjdMNjMzLjUgMTg3LjdjMTIuMy0xMy45LS4zLTM1LjQtMTguNC0zMS41TDQ0OCAxOTIgMzk3LjUgMTY2LjhjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhsLTgwLjkgMCAwLTMyIDMyIDB6TTk2IDIwOGwwIDg2LjEtNDgtMjEuMyAwLTY0LjggNDggMHoiXX0sZnE9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVvcGxlLWNhcnJ5LWJveCIsaWNvbjpbNTc2LDUxMixbInBlb3BsZS1jYXJyeSJdLCJmNGNlIiwiTTY0LTMyQTU2IDU2IDAgMSAxIDY0IDgwIDU2IDU2IDAgMSAxIDY0LTMyek0wIDE3MS4xYzAtMzIuNiAyNi41LTU5LjEgNTkuMS01OS4xIDIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM1LjggOC4yIDE1LjEgMTMuMSAyNS4xIDEzLjRsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzEwLS4zIDE5LjMtNS4yIDI1LjEtMTMuNGw0OC43LTY4LjJjMTMuNi0xOS4xIDM1LjYtMzAuNCA1OS4xLTMwLjQgMzIuNiAwIDU5LjEgMjYuNSA1OS4xIDU5LjFMNTc2IDI3MmMwIDMwLjItMTQuMiA1OC43LTM4LjQgNzYuOGwtNzYuOCA1Ny42Yy04LjEgNi0xMi44IDE1LjUtMTIuOCAyNS42bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTMwLjIgMTQuMi01OC43IDM4LjQtNzYuOGw0MS42LTMxLjIgMC04MC4xLTIuOCAzLjljLTE4IDI1LjItNDcuMSA0MC4yLTc4LjEgNDAuMkwzNTIgMjg4Yy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTEyMC40IDBjLS42IDAtMS4zIDAtMS45LS4xLS42IDAtMS4zIC4xLTEuOSAuMWwtMzEuMSAwYy0zMSAwLTYwLjEtMTUtNzguMS00MC4ybC0yLjgtMy45IDAgODAuMSA0MS42IDMxLjJDMTc3LjggMzczLjMgMTkyIDQwMS44IDE5MiA0MzJsMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwYzAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMMzguNCAzNDguOEMxNC4yIDMzMC43IDAgMzAyLjIgMCAyNzJMMCAxNzEuMXpNMCAzNzkuM2MzLjEgMi43IDYuMyA1LjQgOS42IDcuOUw2NCA0MjggNjQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNTI5LjcgMCA1MTJMMCAzNzkuM3pNNTY4IDI0YTU2IDU2IDAgMSAxIC0xMTIgMCA1NiA1NiAwIDEgMSAxMTIgMHptOCA0ODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04NCA1NC40LTQwLjhjMy4zLTIuNSA2LjUtNS4xIDkuNi03LjlMNTc2IDUxMnoiXX0sR1llPWZxLFlZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjaGFpciIsaWNvbjpbNDQ4LDUxMixbMTI5NjgxXSwiZjZjMCIsIk0xNTIgMjU2bDAtMTgxLjhjLTI0LjUgMjAuNS00MCA1MS40LTQwIDg1LjhsMCA5NiA0MCAwem00OCAwbDQ4IDAgMC0yMDUuNGMtNy43LTEuNy0xNS44LTIuNi0yNC0yLjZzLTE2LjMgLjktMjQgMi42TDIwMCAyNTZ6TTI5NiA3NC4ybDAgMTgxLjggNDAgMCAwLTk2YzAtMzQuNC0xNS41LTY1LjItNDAtODUuOHpNMzIgMjU2bDMyIDAgMC05NkM2NCA3MS42IDEzNS42IDAgMjI0IDBTMzg0IDcxLjYgMzg0IDE2MGwwIDk2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMjU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdfSxaWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToid2luZCIsaWNvbjpbNTEyLDUxMixbXSwiZjcyZSIsIk0yODggMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwzMiAxMTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzI4IDBjNDguNiAwIDg4LTM5LjQgODgtODhTNDA4LjYgMCAzNjAgMEwzMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTY0IDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2TDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTEyOCA1MTJsNDAgMGM0OC42IDAgODgtMzkuNCA4OC04OHMtMzkuNC04OC04OC04OEwzMiAzMzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6Il19LFhZZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJsYXllci1ncm91cCIsaWNvbjpbNTEyLDUxMixbXSwiZjVmZCIsIk0yMzIuNSA1LjJjMTQuOS02LjkgMzIuMS02LjkgNDcgMGwyMTguNiAxMDFjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEwxMy45IDE0OS44QzUuNCAxNDUuOCAwIDEzNy4zIDAgMTI4czUuNC0xNy45IDEzLjktMjEuOEwyMzIuNSA1LjJ6TTQ4LjEgMjE4LjRsMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMjc3LjhDNS40IDI3My44IDAgMjY1LjMgMCAyNTZzNS40LTE3LjkgMTMuOS0yMS44bDM0LjEtMTUuOHpNMTMuOSAzNjIuMmwzNC4xLTE1LjggMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgNDA1LjhDNS40IDQwMS44IDAgMzkzLjMgMCAzODRzNS40LTE3LjkgMTMuOS0yMS44eiJdfSxLWWU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGVhZC1zaWRlLW1hc2siLGljb246WzUxMiw1MTIsW10sImUwNjMiLCJNNDQ1LjkgMTkzYy0uMS0uNC0uMi0uOS0uMi0xLjMtMTUuNy0xMDguNC0xMDguOS0xOTEuNy0yMjEuNy0xOTEuNy04NSAwLTE1OSA0Ny40LTE5Ni45IDExNy4yTDI4My4zIDI4OCA0NTYgMjg4IDQ0Mi45IDMzNiAzMzYgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDk4LjIgMC04LjcgMzItODkuNSAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDgwLjYgMGMtNi43IDE5LjEtMjQuOCAzMi00NS4zIDMyTDI4OCA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTA0LjUtMjQ3LjUtMTY1QzMgMTgyLjEgMCAyMDIuNyAwIDIyNCAwIDI3OCAxOS4xIDMyNy41IDUwLjkgMzY2LjIgNTguOSAzNzUuOSA2NCAzODcuOCA2NCA0MDAuNEw2NCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTI3LjMgMCAuNyAwIDEzMS4zIDBjNDQuOSAwIDgzLjgtMzEuMSA5My42LTc0LjlsMzMuOS0xNTAuM2MzLjMtMTQuNC0uMy0yOS41LTkuNy00MUw0NDUuOSAxOTN6TTI4OCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXX0sWG09e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMiLGljb246WzUxMiw1MTIsWyJzaWduLWxhbmd1YWdlIiwic2lnbmluZyJdLCJmMmE3IiwiTTUxMiAxNjBsLS4xIDcyLjZjMCA0NC44LTE3LjYgODcuMS00Ny45IDExOC40LS4zLTc3LTQwLjEtMTQ4LjQtMTA1LjQtMTg5LjNsLTEuOS0xLjJjMi41LTMuNyAyLjgtOC42IC40LTEyLjdsLTYyLTEwNy40Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOFMzMzAgNSAzMzYuNiAxNi41bDY4IDExNy44IDAgMCAwIDAgNDMuMyA3NSAuMS00OS4zYzAtMTcuNyAxNC40LTMyIDMyLTMyczMyIDE0LjQgMzIgMzJ6TTI5OC40IDEyNC4yYy0xNC4xLTguOC0yOS44LTEyLjctNDUuMi0xMi4xTDIxNi43IDQ4LjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44bDY3LjEgMTE2LjItMjctMTYuOXpNMjExLjkgODguNWwxNi40IDI4LjRjLTE1LjEgNS41LTI4LjYgMTUuNi0zOC4zIDI5LjdsLTE5LjctMzQuMmMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4Ljh6bS00Ni40IDYzLjdsMTIuNSAyMS43Yy0yIDguNi0yLjUgMTcuNS0xLjcgMjYuMWwtNC4zIDAgMCAwLTM0LjQgMC0xMy43LTIzLjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44ek0yMjguOSAxNzVjOS40LTE1IDI5LjEtMTkuNSA0NC4xLTEwLjJsNjAuMiAzNy42QzM4NC43IDIzNC43IDQxNiAyOTEuMiA0MTYgMzUybDAgOGMwIDgzLjktNjguMSAxNTItMTUyIDE1Mkw4OCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTIgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiA0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTI0IDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMMjQgMzY4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1NiAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDU2IDI5NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMzYgMCAwIDAgMCAwIDkzLjIgMC00Ni4yLTI4LjljLTE1LTkuNC0xOS41LTI5LjEtMTAuMi00NC4xeiJdfSxRWWU9WG0sSlllPVhtLGVaZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ0YWJsZXRzIixpY29uOls1MTIsNTEyLFtdLCJmNDkwIiwiTTQ5NS4zIDc2LjZjLTQuNi04LjctMTYuMy05LjctMjMuMy0yLjdMMjk3LjkgMjQ4Yy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNHpNMjQwLjcgMjExLjRjNC42IDguNyAxNi4zIDkuNyAyMy4zIDIuN0w0MzguMSA0MGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMTQ0IDIyNEM3OS4yIDIyNCAyNC40IDI2Ni44IDYuMyAzMjUuNiAzLjQgMzM1LjEgMTEgMzQ0IDIwLjkgMzQ0bDI0Ni4yIDBjOS45IDAgMTcuNS04LjkgMTQuNi0xOC40LS45LTMtMS45LTUuOS0zLTguNy0zNy40LTE4LjEtNjgtNDgtODctODQuOC0xNC45LTUuMi0zMC45LTguMS00Ny42LTguMXpNMjgxLjcgNDEwLjRjMi45LTkuNS00LjctMTguNC0xNC42LTE4LjRMMjAuOSAzOTJDMTEgMzkyIDMuNCA0MDAuOSA2LjMgNDEwLjQgMjQuNCA0NjkuMiA3OS4yIDUxMiAxNDQgNTEyczExOS42LTQyLjggMTM3LjctMTAxLjZ6Il19LHRaZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJ3ZWlnaHQtaGFuZ2luZyIsaWNvbjpbNTEyLDUxMixbXSwiZjVjZCIsIk0yMjQgOTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTIyLjUgMzJjMy41LTEwIDUuNS0yMC44IDUuNS0zMiAwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDExLjIgMS45IDIyIDUuNSAzMmwtMjEuOCAwYy0yOC4zIDAtNTMuMiAxOC41LTYxLjMgNDUuNkwyLjQgNDQwLjJDLjggNDQ1LjQgMCA0NTAuOCAwIDQ1Ni4yIDAgNDg3IDI1IDUxMiA1NS44IDUxMmw0MDAuNCAwYzMwLjggMCA1NS44LTI1IDU1LjgtNTUuOCAwLTUuNC0uOC0xMC44LTIuNC0xNmwtODAtMjY2LjVjLTguMS0yNy4xLTMzLTQ1LjYtNjEuMy00NS42bC0yMS44IDB6Il19LGFaZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJkaWNlIixpY29uOls1MTIsNTEyLFsxMjc5MjJdLCJmNTIyIiwiTTE0MS40IDIuM0MxMDMtOCA2My41IDE0LjggNTMuMyA1My4yTDIuNSAyNDIuN0MtNy44IDI4MS4xIDE1IDMyMC42IDUzLjQgMzMwLjlsMTg5LjUgNTAuOGMzOC40IDEwLjMgNzcuOS0xMi41IDg4LjItNTAuOWw1MC44LTE4OS41YzEwLjMtMzguNC0xMi41LTc3LjktNTAuOS04OC4yTDE0MS40IDIuM3ptMjMgMjA1LjdhMzIgMzIgMCAxIDEgNTUuNC0zMiAzMiAzMiAwIDEgMSAtNTUuNCAzMnpNNzkuMiAyMjAuM2EzMiAzMiAwIDEgMSAzMiA1NS40IDMyIDMyIDAgMSAxIC0zMi01NS40em0xODUgOTYuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40em05LTIwOC40YTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bS0xMjEgMTQuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40ek00MTggMTkyTDM3Ny40IDM0My4yYy0xNy4yIDY0LTgzIDEwMi0xNDcgODQuOWwtMzguMy0xMC4zIDAgMzAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw0MTggMTkyeiJdfSxtcT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzaG9wLXNsYXNoIixpY29uOls1NzYsNTEyLFsic3RvcmUtYWx0LXNsYXNoIl0sImUwNzAiLCJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC0xOTAuM2MyNi44LTEuOSA0OC0yNC4zIDQ4LTUxLjYgMC04LTEuOS0xNi01LjUtMjMuMkw0OTcuNyA2Ny40QzQ4Ni44IDQ1LjcgNDY0LjcgMzIgNDQwLjQgMzJMMTM1LjYgMzJjLTEwLjcgMC0yMSAyLjctMzAuMiA3LjZMNDEtMjQuOXpNMzIxLjggMjU2TDQ0OCAyNTYgNDQ4IDM4Mi4yIDMyMS44IDI1NnpNMzUyIDQyMS44bC02NC02NCAwIDEwLjJjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTEyIDU4LjIgMC0xMzQuOC0xMzQuOC0yOS45IDU5LjljLTMuNiA3LjItNS41IDE1LjEtNS41IDIzLjIgMCAyNy4zIDIxLjIgNDkuNyA0OCA1MS42TDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEwLjJ6Il19LGlaZT1tcSxncT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJzb3J0LWRvd24iLGljb246WzM4NCw1MTIsWyJzb3J0LWRlc2MiXSwiZjBkZCIsIk0zMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjIgMzMzLjUgOS40IDM0Mi42bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODh6Il19LHJaZT1ncSxzWmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToicGVzZXRhLXNpZ24iLGljb246WzQ0OCw1MTIsW10sImUyMjEiLCJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDEwNC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAyMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjODAuMiAwIDE0Ni42LTU5IDE1OC4yLTEzNmwyNS44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1LjggMEMzODYuNiA5MSAzMjAuMiAzMiAyNDAgMzJMMTEyIDMyek0zMzMgMTY4bC0xODkgMCAwLTcyIDk2IDBjNDQuNyAwIDgyLjMgMzAuNiA5MyA3MnpNMTQ0IDIxNmwxODkgMGMtMTAuNyA0MS40LTQ4LjIgNzItOTMgNzJsLTk2IDAgMC03MnoiXX0sYnE9e3ByZWZpeDoiZmFzIixpY29uTmFtZToidGFibGV0LXNjcmVlbi1idXR0b24iLGljb246WzQ0OCw1MTIsWyJ0YWJsZXQtYWx0Il0sImYzZmEiLCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0yNTYgNDMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM4NCA2NGwtMzIwIDAgMCAyODggMzIwIDAgMC0yODh6Il19LG5aZT1icSx2cT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJoYW5kLWhvbGRpbmctZG9sbGFyIixpY29uOls1NzYsNTEyLFsiaGFuZC1ob2xkaW5nLXVzZCJdLCJmNGMwIiwiTTI4OC0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMi0xLjggMGMtMzYuNiAwLTY2LjIgMjkuNy02Ni4yIDY2LjIgMCAzMy40IDI0LjkgNjEuNiA1OCA2NS43bDYxIDcuNmM1LjEgLjYgOSA1IDkgMTAuMiAwIDUuNy00LjYgMTAuMi0xMC4yIDEwLjJMMjQwIDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhzMTIuNSAyOCAyOCAyOGwyNCAwIDAgMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEyIDEuOCAwYzM2LjYgMCA2Ni4yLTI5LjcgNjYuMi02Ni4yIDAtMzMuNC0yNC45LTYxLjYtNTgtNjUuN2wtNjEtNy42Yy01LjEtLjYtOS01LTktMTAuMiAwLTUuNyA0LjYtMTAuMiAxMC4yLTEwLjJMMzI4IDc2YzE1LjUgMCAyOC0xMi41IDI4LTI4cy0xMi41LTI4LTI4LTI4bC0xNiAwIDAtMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTEwOS4zIDM0MS41TDY2LjcgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNiAyODAgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdfSxvWmU9dnEseXE9e3ByZWZpeDoiZmFzIixpY29uTmFtZToic2hpZWxkIixpY29uOls1MTIsNTEyLFsxMjg3MzcsInNoaWVsZC1ibGFuayJdLCJmMTMyIiwiTTI1NiAwYzQuNiAwIDkuMiAxIDEzLjQgMi45TDQ1Ny44IDgyLjhjMjIgOS4zIDM4LjQgMzEgMzguMyA1Ny4yLS41IDk5LjItNDEuMyAyODAuNy0yMTMuNiAzNjMuMi0xNi43IDgtMzYuMSA4LTUyLjggMC0xNzIuNC04Mi41LTIxMy4xLTI2NC0yMTMuNi0zNjMuMi0uMS0yNi4yIDE2LjMtNDcuOSAzOC4zLTU3LjJMMjQyLjcgMi45QzI0Ni45IDEgMjUxLjQgMCAyNTYgMHoiXX0sbFplPXlxLHhxPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6ImZhY2UtbGF1Z2giLGljb246WzUxMiw1MTIsWyJsYXVnaCJdLCJmNTk5IiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il19LGNaZT14cSxkWmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZHMtaG9sZGluZyIsaWNvbjpbNjQwLDUxMixbXSwiZjRjMiIsIk04MCAxMDRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCA4MS45IDAgMTA0TDAgMzI1LjVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTI4IDQ5My4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdsNjYuNyAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNzguOWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjUuMy0yNS4zIDAgMGMtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4yIDExIDExIDkuMiAyOS4yLTMuNyAzNy44LTkuNyA2LjUtMjIuNyA1LjItMzEtMy4xTDk4LjcgMzA5LjVjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjNMODAgMTA0em00ODAgMGwwIDE2MC4yYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01MS4xIDUxLjFjLTguMyA4LjMtMjEuMyA5LjYtMzEgMy4xLTEyLjktOC42LTE0LjctMjYuOS0zLjctMzcuOCA3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4ybDAgMC0yNS4zIDI1LjNjLTIxIDIxLTMyLjggNDkuNS0zMi44IDc5LjJsMCA3OC45YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY2LjcgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOUw2NDAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQweiJdfSx3cT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJjYXJ0LXNob3BwaW5nIixpY29uOls2NDAsNTEyLFsxMjg3MjIsInNob3BwaW5nLWNhcnQiXSwiZjA3YSIsIk0yNC0xNkMxMC43LTE2IDAtNS4zIDAgOFMxMC43IDMyIDI0IDMybDQ1LjMgMGMzLjkgMCA3LjIgMi44IDcuOSA2LjZsNTIuMSAyODYuM2M2LjIgMzQuMiAzNiA1OS4xIDcwLjggNTkuMUw0NTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNTUuOSAwYy0xMS42IDAtMjEuNS04LjMtMjMuNi0xOS43bC01LjEtMjguMyAzMDMuNiAwYzMwLjggMCA1Ny4yLTIxLjkgNjIuOS01Mi4yTDU2OC45IDY5LjlDNTcyLjYgNTAuMiA1NTcuNSAzMiA1MzcuNCAzMmwtNDEyLjcgMC0uNC0yYy00LjgtMjYuNi0yOC00Ni01NS4xLTQ2TDI0LTE2ek0yMDggNTEyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdfSxwWmU9d3EsaFplPXtwcmVmaXg6ImZhcyIsaWNvbk5hbWU6Im9jdGFnb24iLGljb246WzUxMiw1MTIsWzEyODcyMV0sImYzMDYiLCJNMTg4LjYgLjFjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDE5LjIgMTQzQzcuMiAxNTUgLjUgMTcxLjIgLjUgMTg4LjJsMCAxMzUuNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0wxNDMuNCA0OTMuMmMxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDEzNS42IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjYgMzY5YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNsMC0xMzUuNmMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNjkuNSAxOC44Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDE4OC42IC4xeiJdfSx1WmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiaGFuZC1wb2ludGVyIixpY29uOls0NDgsNTEyLFtdLCJmMjVhIiwiTTEyOCA0MGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTQ4LjJjOC41LTcuNiAxOS43LTEyLjIgMzItMTIuMiAyMC42IDAgMzguMiAxMyA0NSAzMS4yIDguOC05LjMgMjEuMi0xNS4yIDM1LTE1LjIgMjUuMyAwIDQ2IDE5LjUgNDcuOSA0NC4zIDguNS03LjcgMTkuOC0xMi4zIDMyLjEtMTIuMyAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtODUuMyAwYy01IDAtOS45LS4zLTE0LjctMS01NS4zLTUuNi0xMDYuMi0zNC0xNDAtNzlMOCAzMzZjLTEzLjMtMTcuNy05LjctNDIuNyA4LTU2czQyLjctOS43IDU2IDhsNTYgNzQuNyAwLTMyMi43ek0yNDAgMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il19LGZaZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJyZWdpc3RlcmVkIixpY29uOls1MTIsNTEyLFsxNzRdLCJmMjVkIiwiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDAgMTQ0bDgwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyOC45LTE3IDUzLjgtNDEuNiA2NS4zbDMwLjIgNTAuM2M2LjggMTEuNCAzLjEgMjYuMS04LjIgMzIuOXMtMjYuMSAzLjEtMzIuOS04LjJsLTQxLTY4LjMtMzQuNCAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTcyIDk2bDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMCAwIDQ4IDQ4IDB6Il19LG1aZT17cHJlZml4OiJmYXMiLGljb25OYW1lOiJob3VzZS1zaWduYWwiLGljb246WzU3Niw1MTIsW10sImUwMTIiLCJNNTE1LjkgMjQwbC0xOS45IDAgMCAxNDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEzNyAwYy0yNC05MS43LTkzLjUtMTY1LTE4My0xOTQuM2wwLTEzLjctMTkuOSAwYy0xNS41IDAtMjguMS0xMi42LTI4LjEtMjguMSAwLTcuNiAzLjEtMTQuOSA4LjYtMjAuMkwyNzYuNS00LjlDMjgzLjktMTIgMjkzLjctMTYgMzA0LTE2czIwLjEgNCAyNy41IDExLjFMNTM1LjQgMTkxLjdjNS41IDUuMyA4LjYgMTIuNiA4LjYgMjAuMiAwIDE1LjUtMTIuNiAyOC4xLTI4LjEgMjguMXpNMjgwIDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6TTI0IDI4OGMxMjguMSAwIDIzMiAxMDMuOSAyMzIgMjMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTAxLjYtODIuNC0xODQtMTg0LTE4NC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTAgNDA4YzAtMTMuMyAxMC43LTI0IDI0LTI0IDc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNi0zOS40LTg4LTg4LTg4LTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdfSxnWmU9e3ByZWZpeDoiZmFzIixpY29uTmFtZToiYmFuZ2xhZGVzaGktdGFrYS1zaWduIixpY29uOlszODQsNTEyLFtdLCJlMmU2IiwiTTM2IDMyLjNDMTguNCAzMC4xIDIuNCA0Mi41IC4zIDYwUzEwLjUgOTMuNiAyOCA5NS44bDcuOSAxYzE2IDIgMjggMTUuNiAyOCAzMS44bDAgMzEuNS00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAxNzZjMCA1MyA0MyA5NiA5NiA5NmwzMiAwYzEwNiAwIDE5Mi04NiAxOTItMTkybDAtMzJjMC01My00My05Ni05Ni05NmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMS41QzEyOCA4MC4xIDkyIDM5LjIgNDMuOSAzMy4ybC03LjktMXoiXX0sSGp0PXtmYTA6VHdlLGZhMTpMd2UsZmEyOiR3ZSxmYTM6QXdlLGZhNDpEd2UsZmE1OkV3ZSxmYTY6UHdlLGZhNzpJd2UsZmE4Ok53ZSxmYTk6RndlLGZhRG9sbGFyU2lnbjplbSxmYURvbGxhcjpPd2UsZmFVc2Q6UndlLGZhRG9nOkJ3ZSxmYVRydWNrTW92aW5nOkh3ZSxmYVJvdGF0ZTpoSSxmYVN5bmNBbHQ6cXdlLGZhU3F1YXJlTWludXM6dUksZmFNaW51c1NxdWFyZTpWd2UsZmFBbGlnbkp1c3RpZnk6andlLGZhQ2FsZW5kYXJDaGVjazpVd2UsZmFGYWNlS2lzczpmSSxmYUtpc3M6V3dlLGZhS2l0Y2hlblNldDpHd2UsZmFEbmE6WXdlLGZhQ2hpbGRSZWFjaGluZzpad2UsZmFQYXN0ZTplOCxmYUZpbGVDbGlwYm9hcmQ6WHdlLGZhTWV0ZW9yOkt3ZSxmYUdlYXJzOm1JLGZhQ29nczpRd2UsZmFGaWxlQ2lyY2xlUGx1czpKd2UsZmFJY2ljbGVzOmVNZSxmYUFycm93VHJlbmRVcDp0TWUsZmFIZXhhZ29uTm9kZXNCb2x0OmFNZSxmYVF1ZXN0aW9uOmlNZSxmYUhhbmRzQm91bmQ6ck1lLGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2U6c01lLGZhRmlsZUFycm93RG93bjpnSSxmYUZpbGVEb3dubG9hZDpuTWUsZmFQZXJzb25Cb290aDpvTWUsZmFMb2N1c3Q6bE1lLGZhUmlnaHRMb25nOmJJLGZhTG9uZ0Fycm93QWx0UmlnaHQ6Y01lLGZhVHJ1Y2tEcm9wbGV0OmRNZSxmYUhhbmRIb2xkaW5nTWVkaWNhbDpwTWUsZmFIYW5kUG9pbnRMZWZ0OmhNZSxmYUNhbGN1bGF0b3I6dU1lLGZhTWludXM6dDgsZmFTdWJ0cmFjdDpmTWUsZmFBcnJvd1VwWkE6dkksZmFTb3J0QWxwaGFVcEFsdDptTWUsZmFNaWNyb3Bob25lU2xhc2g6Z01lLGZhU3F1YXJlUGVuOnRtLGZhUGVuU3F1YXJlOmJNZSxmYVBlbmNpbFNxdWFyZTp2TWUsZmFIYW5kRmlzdDp5SSxmYUZpc3RSYWlzZWQ6eU1lLGZhQ29tbWVudFNtczp4SSxmYVNtczp4TWUsZmFTaW1DYXJkOndNZSxmYVNjYWxlQmFsYW5jZWQ6d0ksZmFCYWxhbmNlU2NhbGU6TU1lLGZhQ2FyOk1JLGZhQXV0b21vYmlsZTp6TWUsZmFDcm9wU2ltcGxlOnpJLGZhQ3JvcEFsdDprTWUsZmFNZWRhbDpTTWUsZmFTY3JvbGw6Q01lLGZhRmlsZUV4Y2VsOl9NZSxmYUZpbHRlcjpUTWUsZmFEcnVtOkxNZSxmYU1hcFBpbjokTWUsZmFTY2FsZVVuYmFsYW5jZWRGbGlwOmtJLGZhQmFsYW5jZVNjYWxlUmlnaHQ6QU1lLGZhQXJyb3dzVG9DaXJjbGU6RE1lLGZhRW52ZWxvcGU6RU1lLGZhQmFieTpQTWUsZmFTcXVhcmVDYXJldERvd246U0ksZmFDYXJldFNxdWFyZURvd246SU1lLGZhVGVudDpOTWUsZmFBOkZNZSxmYVBhcmFjaHV0ZUJveDpPTWUsZmFDYXJ0QXJyb3dEb3duOlJNZSxmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uOkJNZSxmYUNsb3VkQXJyb3dVcDphbSxmYUNsb3VkVXBsb2FkOkhNZSxmYUNsb3VkVXBsb2FkQWx0OnFNZSxmYUF0OlZNZSxmYUluZGlhblJ1cGVlU2lnbjppbSxmYUluZGlhblJ1cGVlOmpNZSxmYUlucjpVTWUsZmFUcnVjazpXTWUsZmFDaGFsa2JvYXJkVXNlcjpDSSxmYUNoYWxrYm9hcmRUZWFjaGVyOkdNZSxmYVVzZXJDaGVjazpZTWUsZmFVc2VyTmluamE6Wk1lLGZhUGxhbnRXaWx0OlhNZSxmYVdlaWdodFNjYWxlOl9JLGZhV2VpZ2h0OktNZSxmYUNhcmV0UmlnaHQ6S20sZmFGbG9yaW5TaWduOlFNZSxmYUJlbGw6UW0sZmFMYXJpU2lnbjpKTWUsZmFNaWxsU2lnbjplemUsZmFQZXJzb25Tbm93Ym9hcmRpbmc6VEksZmFTbm93Ym9hcmRpbmc6dHplLGZhVHR5OkxJLGZhVGVsZXR5cGU6YXplLGZhVXNlcnNSZWN0YW5nbGU6aXplLGZhTW9iaWxlOnJtLGZhTW9iaWxlQW5kcm9pZDpyemUsZmFNb2JpbGVQaG9uZTpzemUsZmFBcnJvd3NUdXJuVG9Eb3RzOm56ZSxmYUV4Y2xhbWF0aW9uOm96ZSxmYUNodXJjaDpsemUsZmFUb2dnbGVPZmY6Y3plLGZhU2hvZVByaW50czpkemUsZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb246cHplLGZhV2FsbGV0OkptLGZhTWVzc2FnZTphOCxmYUNvbW1lbnRBbHQ6aHplLGZhVHJvcGh5OnV6ZSxmYUZhY2VEaXp6eTokSSxmYURpenp5OmZ6ZSxmYUJhY3RlcmlhOm16ZSxmYUVhckRlYWY6TzUsZmFEZWFmOmd6ZSxmYURlYWZuZXNzOmJ6ZSxmYUhhcmRPZkhlYXJpbmc6dnplLGZhUGVvcGxlQXJyb3dzOkFJLGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0Onl6ZSxmYUhhbmRzQ2xhcHBpbmc6eHplLGZhVmlydXNDb3ZpZFNsYXNoOnd6ZSxmYUNhbGVuZGFyRGF5czpESSxmYUNhbGVuZGFyQWx0Ok16ZSxmYURpYW1vbmRUdXJuUmlnaHQ6RUksZmFEaXJlY3Rpb25zOnp6ZSxmYUhhbmRQb2ludFVwOmt6ZSxmYUJlemllckN1cnZlOlN6ZSxmYVBlcnNvbkhhbGZEcmVzczpDemUsZmFTcXVhcmVQb2xsSG9yaXpvbnRhbDpQSSxmYVBvbGxIOl96ZSxmYVNjaG9vbENpcmNsZVhtYXJrOlR6ZSxmYUhhbmRMaXphcmQ6THplLGZhQ2hhbGtib2FyZDpJSSxmYUJsYWNrYm9hcmQ6JHplLGZhVXBSaWdodEZyb21TcXVhcmU6TkksZmFFeHRlcm5hbExpbmtBbHQ6QXplLGZhU3F1YXJlRnVsbDpEemUsZmFDbG92ZXI6RXplLGZhVGVldGhPcGVuOlB6ZSxmYUJhcnNTdGFnZ2VyZWQ6c20sZmFSZW9yZGVyOkl6ZSxmYVN0cmVhbTpOemUsZmFXYXJlaG91c2U6RnplLGZhU3dhdGNoYm9vazpPemUsZmFDYW1wZ3JvdW5kOlJ6ZSxmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0OkJ6ZSxmYUdsYXNzZXM6SHplLGZhQ2lyY2xlUGF1c2U6RkksZmFQYXVzZUNpcmNsZTpxemUsZmFNZW1vcnk6VnplLGZhR2lmdDpqemUsZmFNb25leUJpbGxXaGVhdDpVemUsZmFEdW5nZW9uOld6ZSxmYVN1aXRjYXNlTWVkaWNhbDpPSSxmYU1lZGtpdDpHemUsZmFQZXJzb25DYW5lOll6ZSxmYUdhdWdlOlI1LGZhRGFzaGJvYXJkOlp6ZSxmYUdhdWdlTWVkOlh6ZSxmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlOkt6ZSxmYUVudmVsb3BlT3BlblRleHQ6UXplLGZhVG9vbGJveDpKemUsZmFQb3dlck9mZjpla2UsZmFTaWduYWw6bm0sZmFTaWduYWw1OnRrZSxmYVNpZ25hbFBlcmZlY3Q6YWtlLGZhQXJyb3dzU3Bpbjppa2UsZmFKb2ludDpya2UsZmFCcmFpbGxlOnNrZSxmYUJhc2tldFNob3BwaW5nOlJJLGZhU2hvcHBpbmdCYXNrZXQ6bmtlLGZhQnJpZGdlOm9rZSxmYVBsYW5lQXJyaXZhbDpsa2UsZmFDYXNoUmVnaXN0ZXI6Y2tlLGZhUmluZzpka2UsZmFBcXVhcml1czpwa2UsZmFTaGFyZU5vZGVzOkJJLGZhU2hhcmVBbHQ6aGtlLGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb246dWtlLGZhQmlub2N1bGFyczpma2UsZmFLaXBTaWduOm1rZSxmYUhhcmREcml2ZTpISSxmYUhkZDpna2UsZmFSYW5raW5nU3Rhcjpia2UsZmFVc2VyVGllOnZrZSxmYUVsbGlwc2lzOnFJLGZhRWxsaXBzaXNIOnlrZSxmYVN0b3JlU2xhc2g6eGtlLGZhUGVyY2VudDpWSSxmYVBlcmNlbnRhZ2U6d2tlLGZhRmlsZVppcHBlcjpqSSxmYUZpbGVBcmNoaXZlOk1rZSxmYURpc3BsYXk6emtlLGZhSWNvbnM6VUksZmFIZWFydE11c2ljQ2FtZXJhQm9sdDpra2UsZmFSdWxlclZlcnRpY2FsOlNrZSxmYU1hcExvY2F0aW9uRG90OldJLGZhTWFwTWFya2VkQWx0OkNrZSxmYUhlYXJ0Q3JhY2s6R0ksZmFIZWFydEJyb2tlbjpfa2UsZmFDb3c6VGtlLGZhUnNzOmk4LGZhRmVlZDpMa2UsZmFNYWduaWZ5aW5nR2xhc3M6cjgsZmFTZWFyY2g6JGtlLGZhQ2xvdWRNb29uOkFrZSxmYUJveGVzU3RhY2tlZDpvbSxmYUJveGVzOkRrZSxmYUJveGVzQWx0OkVrZSxmYUNvZGVCcmFuY2g6UGtlLGZhQmFuOllJLGZhQ2FuY2VsOklrZSxmYUp1Z0RldGVyZ2VudDpOa2UsZmFSZXBseTpaSSxmYU1haWxSZXBseTpGa2UsZmFTdW5QbGFudFdpbHQ6T2tlLGZhQmFjdGVyaXVtOlJrZSxmYVJlY29yZFZpbnlsOkJrZSxmYUZsb3BweURpc2s6WEksZmFTYXZlOkhrZSxmYVRvaWxldHNQb3J0YWJsZTpxa2UsZmFPOlZrZSxmYVBhbGV0dGU6amtlLGZhVW5sb2NrOlVrZSxmYUVhckxpc3RlbjpLSSxmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXM6V2tlLGZhQ29kZVB1bGxSZXF1ZXN0OkdrZSxmYUtleTpZa2UsZmFTa3VsbDpaa2UsZmFNYXJzU3Ryb2tlVXA6UUksZmFNYXJzU3Ryb2tlVjpYa2UsZmFGaXJlRmxhbWVTaW1wbGU6SkksZmFCdXJuOktrZSxmYVRyZWU6UWtlLGZhU21vZzpKa2UsZmFTOmVTZSxmYUplZGk6dFNlLGZhUGVyc29uSGlraW5nOmVOLGZhSGlraW5nOmFTZSxmYUFycm93c1VwVG9MaW5lOmlTZSxmYU1hcnNEb3VibGU6clNlLGZhVGhlcm1vbWV0ZXI6c1NlLGZhUGFpbnRicnVzaDp0TixmYVBhaW50QnJ1c2g6blNlLGZhTmV1dGVyOm9TZSxmYVNxdWFyZVBob25lRmxpcDphTixmYVBob25lU3F1YXJlQWx0OmxTZSxmYUZhY2VHcmluVG9uZ3VlU3F1aW50OmlOLGZhR3JpblRvbmd1ZVNxdWludDpjU2UsZmFDb21tZW50RG9sbGFyOmRTZSxmYUhpcHBvOnBTZSxmYUJvd2xGb29kOmhTZSxmYVNxdWFyZVZpcnVzOnVTZSxmYUNsb3VkU3VuUmFpbjpmU2UsZmFBcnJvd1JpZ2h0TG9uZzpyTixmYUxvbmdBcnJvd1JpZ2h0Om1TZSxmYUJ1aWxkaW5nVW46Z1NlLGZhVGVtcGVyYXR1cmVMb3c6YlNlLGZhRG9vck9wZW46dlNlLGZhQWxpZ25MZWZ0OnlTZSxmYUNhbWVyYTpzTixmYUNhbWVyYUFsdDp4U2UsZmFVc2Vyc1JheXM6d1NlLGZhUmFpbmJvdzpNU2UsZmFTaXRlbWFwOnpTZSxmYUZhY2VHcmluU3RhcnM6bk4sZmFHcmluU3RhcnM6a1NlLGZhU29ydFVwOm9OLGZhU29ydEFzYzpTU2UsZmFFeWU6ZWcsZmFDYXJldExlZnQ6dGcsZmFBcHBsZVdob2xlOmxOLGZhQXBwbGVBbHQ6Q1NlLGZhU2Nyb2xsVG9yYWg6Y04sZmFUb3JhaDpfU2UsZmFIb3VzZUxvY2s6VFNlLGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lOkxTZSxmYVRyYXNoOmc4LGZhRmFjZVNhZFRlYXI6ZE4sZmFTYWRUZWFyOiRTZSxmYUZheDpBU2UsZmFQZXJzb25DaXJjbGVQbHVzOkRTZSxmYUhhbXNhOkVTZSxmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uOlBTZSxmYUNsaXBib2FyZENoZWNrOklTZSxmYVNoYXJlRnJvbVNxdWFyZTpwTixmYVNoYXJlU3F1YXJlOk5TZSxmYVJlY2VpcHQ6YWcsZmFFcXVhbHM6RlNlLGZhQ2hldnJvblVwOk9TZSxmYVZpcnVzU2xhc2g6UlNlLGZhU2xhc2g6QlNlLGZhRXhwYW5kOkhTZSxmYU5vdGVTdGlja3k6aE4sZmFTdGlja3lOb3RlOnFTZSxmYVRhYmxlQ29sdW1uczp1TixmYUNvbHVtbnM6VlNlLGZhUGVyc29uU2hlbHRlcjpqU2UsZmFDaXJjbGVOb3RjaDpVU2UsZmFXYXRlcjpXU2UsZmFEZWxldGVMZWZ0OmZOLGZhQmFja3NwYWNlOkdTZSxmYUJyb29tQmFsbDpsbSxmYVF1aWRkaXRjaDpZU2UsZmFRdWlkZGl0Y2hCcm9vbUJhbGw6WlNlLGZhSjpYU2UsZmFTaHV0dGxlU3BhY2U6bU4sZmFTcGFjZVNodXR0bGU6S1NlLGZhWWluWWFuZzpRU2UsZmFTdG9wOkpTZSxmYVRyb3dlbDplQ2UsZmFIYW5kQmFja0Zpc3Q6Z04sZmFIYW5kUm9jazp0Q2UsZmFUZW1wZXJhdHVyZUhpZ2g6YUNlLGZhR3JlYXRlclRoYW46aUNlLGZhQ3J1dGNoOnJDZSxmYVNlcHRhZ29uOmJOLGZhSGVwdGFnb246c0NlLGZhU3RyZWV0VmlldzpuQ2UsZmFXYXZlU3F1YXJlOm9DZSxmYUFuZ2xlTGVmdDpsQ2UsZmFTY3Jld2RyaXZlcjpjQ2UsZmFUcmFjdG9yOmRDZSxmYUJyaWRnZUNpcmNsZVhtYXJrOnBDZSxmYVZpYWxzOmhDZSxmYVN0ZXRob3Njb3BlOnVDZSxmYVBvZGNhc3Q6ZkNlLGZhQXJyb3dVcFJpZ2h0RG90czptQ2UsZmFDaGVzc1F1ZWVuOmdDZSxmYUFuY2hvckNpcmNsZUV4Y2xhbWF0aW9uOmJDZSxmYUVsbGlwc2lzVmVydGljYWw6dk4sZmFFbGxpcHNpc1Y6dkNlLGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbjp5Q2UsZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uOnhDZSxmYVBlcnNvbkFycm93VXBGcm9tTGluZTp3Q2UsZmFOb3RFcXVhbDpNQ2UsZmFUcmFpblRyYW06ekNlLGZhUGxhbmVEZXBhcnR1cmU6a0NlLGZhUmlnaHRUb0JyYWNrZXQ6eU4sZmFTaWduSW5BbHQ6U0NlLGZhU2RDYXJkOkNDZSxmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb246X0NlLGZhU2hla2VsU2lnbjp1bCxmYUlsczpUQ2UsZmFTaGVrZWw6TENlLGZhU2hlcWVsOiRDZSxmYVNoZXFlbFNpZ246QUNlLGZhUmFkaW86RENlLGZhSGFuZERvdHM6eE4sZmFBbGxlcmdpZXM6RUNlLGZhQm9va1NrdWxsOndOLGZhQm9va0RlYWQ6UENlLGZhVW5sb2NrS2V5aG9sZTpNTixmYVVubG9ja0FsdDpJQ2UsZmFGaWxlQXJyb3dVcDp6TixmYUZpbGVVcGxvYWQ6TkNlLGZhRmFjZUdyaW5UZWFyczprTixmYUdyaW5UZWFyczpGQ2UsZmFQZW5Ub1NxdWFyZTpzOCxmYUVkaXQ6T0NlLGZhRWFydGhFdXJvcGU6U04sZmFHbG9iZUV1cm9wZTpSQ2UsZmFGYWNlR3JpbkJlYW1Td2VhdDpDTixmYUdyaW5CZWFtU3dlYXQ6QkNlLGZhQ2lyY2xlSGFsZlN0cm9rZTpfTixmYUFkanVzdDpIQ2UsZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uOnFDZSxmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrOlZDZSxmYVRydWNrRmllbGRVbjpqQ2UsZmFDbG9jazpUTixmYUNsb2NrRm91cjpVQ2UsZmFCb29rOldDZSxmYUZhY2VMYXVnaFdpbms6TE4sZmFMYXVnaFdpbms6R0NlLGZhQ2xvdWRNZWF0YmFsbDpZQ2UsZmFDaGFydEFyZWE6JE4sZmFBcmVhQ2hhcnQ6WkNlLGZhUnVwaWFoU2lnbjpYQ2UsZmFUZXh0V2lkdGg6S0NlLGZhU2F0ZWxsaXRlOlFDZSxmYU1hZ25pZnlpbmdHbGFzc01pbnVzOkFOLGZhU2VhcmNoTWludXM6SkNlLGZhUGVvcGxlR3JvdXA6ZV9lLGZhU3F1YXJlQmluYXJ5OnRfZSxmYU1hc2tzVGhlYXRlcjpETixmYVRoZWF0ZXJNYXNrczphX2UsZmFDYXJ0UGx1czppX2UsZmFIYW5kc0FzbEludGVycHJldGluZzpCNSxmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nOnJfZSxmYUFzbEludGVycHJldGluZzpzX2UsZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nOm5fZSxmYVRhYmxlQ2VsbHNSb3dVbmxvY2s6b19lLGZhUm9ja2V0OmxfZSxmYVNocmltcDpjX2UsZmFUZW5nZVNpZ246RU4sZmFUZW5nZTpkX2UsZmFIb3VzZUNoaW1uZXlNZWRpY2FsOlBOLGZhQ2xpbmljTWVkaWNhbDpwX2UsZmFVc2Vyc1NsYXNoOmhfZSxmYVBhcGVyUGxhbmU6dV9lLGZhQm9va0F0bGFzOklOLGZhQXRsYXM6Zl9lLGZhVGFibGU6bV9lLGZhSGVhcnQ6Z19lLGZhQ2lyY2xlQ2hldnJvblVwOk5OLGZhQ2hldnJvbkNpcmNsZVVwOmJfZSxmYUJhdHRlcnlIYWxmOkZOLGZhQmF0dGVyeTM6dl9lLGZhRm9udEF3ZXNvbWU6Y20sZmFGb250QXdlc29tZUZsYWc6eV9lLGZhRm9udEF3ZXNvbWVMb2dvRnVsbDp4X2UsZmFIYW5kY3VmZnM6d19lLGZhSGF0Q293Ym95U2lkZTpNX2UsZmFJbmR1c3RyeTp6X2UsZmFMaW5lc0xlYW5pbmc6a19lLGZhUGFzc3BvcnQ6U19lLGZhSW5maW5pdHk6Q19lLGZhQ2xvbmU6X19lLGZhRm9yd2FyZDpUX2UsZmFNOkxfZSxmYVJvYWRTcGlrZXM6JF9lLGZhTW91bnRhaW46QV9lLGZhQ2hlc3M6RF9lLGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOkg1LGZhVGVtcGVyYXR1cmUzOkVfZSxmYVRoZXJtb21ldGVyMzpQX2UsZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnM6SV9lLGZhQjpOX2UsZmFTaGllbGRWaXJ1czpGX2UsZmFMaXRlY29pblNpZ246T19lLGZhRGljZUQ2OlJfZSxmYUdyaXBMaW5lc1ZlcnRpY2FsOkJfZSxmYUdvbGZCYWxsVGVlOk9OLGZhR29sZkJhbGw6SF9lLGZhSGV4YWdvbjpxX2UsZmFGb2xkZXJPcGVuOlZfZSxmYUthYWJhOmpfZSxmYUhhbmRIb2xkaW5nOlVfZSxmYVNpbmdsZVF1b3RlUmlnaHQ6V19lLGZhQm90dGxlRHJvcGxldDpHX2UsZmFXaW5kb3dNaW5pbWl6ZTpZX2UsZmFDaGV2cm9uUmlnaHQ6Wl9lLGZhRWdnOlhfZSxmYUxhbmRtYXJrRG9tZTpSTixmYUxhbmRtYXJrQWx0OktfZSxmYVdvcm06UV9lLGZhVXNlckluanVyZWQ6Sl9lLGZhU3RyaWtldGhyb3VnaDplVGUsZmFCbG9nOnRUZSxmYVN0b3B3YXRjaDIwOmFUZSxmYVRydWNrUGlja3VwOmlUZSxmYVNlZWRsaW5nOkJOLGZhU3Byb3V0OnJUZSxmYVRyYW5zZ2VuZGVyOkhOLGZhVHJhbnNnZW5kZXJBbHQ6c1RlLGZhU3RhckhhbGY6blRlLGZhUGhvdG9GaWxtOnFOLGZhUGhvdG9WaWRlbzpvVGUsZmFQaWN0dXJlSW5QaWN0dXJlOmxUZSxmYVB1bXBNZWRpY2FsOmNUZSxmYUZpcmU6ZFRlLGZhTWFnbmlmeWluZ0dsYXNzUGx1czpWTixmYVNlYXJjaFBsdXM6cFRlLGZhRmxhc2s6aFRlLGZhQWxpZ25SaWdodDp1VGUsZmFDYWJsZUNhcjpqTixmYVRyYW06ZlRlLGZhS2l0TWVkaWNhbDpVTixmYUZpcnN0QWlkOm1UZSxmYUdyaXBMaW5lczpnVGUsZmFCdXJnZXI6V04sZmFIYW1idXJnZXI6YlRlLGZhU25vd21hbjp2VGUsZmFIb3RlbDp5VGUsZmFQcmludDp4VGUsZmFWb2xsZXliYWxsOkdOLGZhVm9sbGV5YmFsbEJhbGw6d1RlLGZhVHJhZmZpY0xpZ2h0Ok1UZSxmYVBsYW5lQ2lyY2xlQ2hlY2s6elRlLGZhVXNlcnM6aWcsZmFDZXJ0aWZpY2F0ZTprVGUsZmFBbGFybUNsb2NrOlNUZSxmYUhlbGljb3B0ZXJTeW1ib2w6Q1RlLGZhSG91c2VDaGltbmV5Q3JhY2s6WU4sZmFIb3VzZURhbWFnZTpfVGUsZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nOlRUZSxmYURhdGFiYXNlOkxUZSxmYU5ld3NwYXBlcjokVGUsZmFDbG91ZFJhaW46QVRlLGZhTWF4aW1pemU6Wk4sZmFFeHBhbmRBcnJvd3NBbHQ6RFRlLGZhTG9jYXRpb25BcnJvdzpFVGUsZmFDaXR5OlBUZSxmYVhSYXk6SVRlLGZhVW1icmVsbGFCZWFjaDpOVGUsZmFBcnJvd1JpZ2h0VG9CcmFja2V0OlhOLGZhU2lnbkluOkZUZSxmYUhlYWRzZXQ6T1RlLGZhU3Bsb3RjaDpSVGUsZmFVcExvbmc6S04sZmFMb25nQXJyb3dBbHRVcDpCVGUsZmFIZXhhZ29uTm9kZXM6SFRlLGZhSG9zcGl0YWw6ZG0sZmFIb3NwaXRhbEFsdDpxVGUsZmFIb3NwaXRhbFdpZGU6VlRlLGZhUGVyc29uSGFyYXNzaW5nOmpUZSxmYU1vbmV5QmlsbFRyZW5kVXA6VVRlLGZhUGVuUnVsZXI6UU4sZmFQZW5jaWxSdWxlcjpXVGUsZmFSZXBlYXQ6R1RlLGZhQm9uZTpZVGUsZmFGaXJlRmxhbWVDdXJ2ZWQ6Sk4sZmFGaXJlQWx0OlpUZSxmYUJ1c1NpbXBsZTplRixmYUJ1c0FsdDpYVGUsZmFWZW51c01hcnM6S1RlLGZhQmxlbmRlcjpRVGUsZmFVOkpUZSxmYVNoYXJlOm44LGZhTWFpbEZvcndhcmQ6ZUxlLGZhUGhvbmVGbGlwOnRGLGZhUGhvbmVBbHQ6dExlLGZhVG9pbGV0UG9ydGFibGU6YUxlLGZhUGVyc29uUHJlZ25hbnQ6aUxlLGZhTGVzc1RoYW46ckxlLGZhU3VwZXJzY3JpcHQ6c0xlLGZhQ2lyY2xlU3RvcDphRixmYVN0b3BDaXJjbGU6bkxlLGZhQXJyb3dzVXBEb3duOmlGLGZhQXJyb3dzVjpvTGUsZmFQb29TdG9ybTpyRixmYVBvb0JvbHQ6bExlLGZhVmlkZW9TbGFzaDpjTGUsZmFTcXVhcmVYbWFyazpwbSxmYVRpbWVzU3F1YXJlOmRMZSxmYVhtYXJrU3F1YXJlOnBMZSxmYUhhbmRIb2xkaW5nRHJvcGxldDpzRixmYUhhbmRIb2xkaW5nV2F0ZXI6aExlLGZhV29uU2lnbjpobSxmYUtydzp1TGUsZmFXb246ZkxlLGZhT2JqZWN0VW5ncm91cDptTGUsZmFDb21tZW50OmdMZSxmYUhpbGxBdmFsYW5jaGU6YkxlLGZhQXJyb3dzVG9FeWU6dkxlLGZhU25vd3Bsb3c6eUxlLGZhQ2hhcnRHYW50dDp4TGUsZmFWaWRlbzpuRixmYVZpZGVvQ2FtZXJhOndMZSxmYUNoZXNzUGF3bjpNTGUsZmFTeW5hZ29ndWU6ekxlLGZhQnVpbGRpbmdDaXJjbGVDaGVjazprTGUsZmFDYWxlbmRhclBsdXM6U0xlLGZhV2hlZWxjaGFpck1vdmU6b0YsZmFXaGVlbGNoYWlyQWx0OkNMZSxmYVVzZXJTaGllbGQ6X0xlLGZhQm9sZDpUTGUsZmFIZWFydFB1bHNlOmxGLGZhSGVhcnRiZWF0OkxMZSxmYVNxdWFyZVJvb3RWYXJpYWJsZTpjRixmYVNxdWFyZVJvb3RBbHQ6JExlLGZhSGFuZHNCdWJibGVzOmRGLGZhSGFuZHNXYXNoOkFMZSxmYU1hcmtlcjpETGUsZmFDbGlwYm9hcmQ6RUxlLGZhUGxhY2VPZldvcnNoaXA6UExlLGZhQ2FubmFiaXM6SUxlLGZhUGVvcGxlUm9vZjpOTGUsZmFEaXNlYXNlOkZMZSxmYUJvb2tCaWJsZTpwRixmYUJpYmxlOk9MZSxmYUNoZXNzQm9hcmQ6UkxlLGZhTWFyczpCTGUsZmFMYXB0b3A6SExlLGZhVXNlclhtYXJrOmhGLGZhVXNlclRpbWVzOnFMZSxmYUZsYWdVc2E6VkxlLGZhSGFuZE1pZGRsZUZpbmdlcjpqTGUsZmFNb3J0YXJQZXN0bGU6VUxlLGZhSGVhZFNpZGVDb3VnaDpXTGUsZmFQbGFuZUxvY2s6R0xlLGZhQmF0dGVyeVRocmVlUXVhcnRlcnM6dUYsZmFCYXR0ZXJ5NDpZTGUsZmFGcmFuY1NpZ246WkxlLGZhRmlsdGVyQ2lyY2xlRG9sbGFyOmZGLGZhRnVubmVsRG9sbGFyOlhMZSxmYUNoZWVzZTpLTGUsZmFDaXJjbGVIOm1GLGZhSG9zcGl0YWxTeW1ib2w6UUxlLGZhU2Nob29sOkpMZSxmYURpY2VGaXZlOmUkZSxmYVRvcm5hZG86dCRlLGZhSmV0RmlnaHRlcjpnRixmYUZpZ2h0ZXJKZXQ6YSRlLGZhVGh1bWJzRG93bjppJGUsZmFCcm9vbTpyJGUsZmFGaWxlSW1wb3J0OmJGLGZhQXJyb3dSaWdodFRvRmlsZTpzJGUsZmFVdGVuc2lsczp2RixmYUN1dGxlcnk6biRlLGZhSWRCYWRnZTpvJGUsZmFTcGlkZXI6bCRlLGZhTW9iaWxlUmV0cm86YyRlLGZhU2lnbnNQb3N0OnlGLGZhTWFwU2lnbnM6ZCRlLGZhR3JvdXBBcnJvd3NSb3RhdGU6cCRlLGZhQXJyb3dzU3BsaXRVcEFuZExlZnQ6aCRlLGZhRmlsbERyaXA6dSRlLGZhU2hpZWxkSGVhcnQ6ZiRlLGZhUGVyc29uU2tpaW5nTm9yZGljOnhGLGZhU2tpaW5nTm9yZGljOm0kZSxmYVNxdWFyZUNoZWNrOndGLGZhQ2hlY2tTcXVhcmU6ZyRlLGZhQmF0aDpNRixmYUJhdGh0dWI6YiRlLGZhQ2hlc3NCaXNob3A6diRlLGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbDp6RixmYVByZXNjcmlwdGlvbkJvdHRsZUFsdDp5JGUsZmFEcmF3UG9seWdvbjprRixmYVZlY3RvclBvbHlnb246eCRlLGZhSUN1cnNvcjp3JGUsZmFIZWFydENpcmNsZVBsdXM6TSRlLGZhU2hpZWxkRG9nOnokZSxmYUdyZWF0ZXJUaGFuRXF1YWw6ayRlLGZhRW52ZWxvcGVPcGVuOlMkZSxmYU1vdW5kOkMkZSxmYVZvaWNlbWFpbDpfJGUsZmFWZXN0OlQkZSxmYUF1ZGlvRGVzY3JpcHRpb246TCRlLGZhVzokJGUsZmFFeWVEcm9wcGVyOnVtLGZhRXllRHJvcHBlckVtcHR5OkEkZSxmYUV5ZWRyb3BwZXI6RCRlLGZhQ2lyY2xlWG1hcms6YmwsZmFUaW1lc0NpcmNsZTpFJGUsZmFYbWFya0NpcmNsZTpQJGUsZmFUcmFpbGVyOkkkZSxmYVR1cmtpc2hMaXJhU2lnbjpmbSxmYVRyeTpOJGUsZmFUdXJraXNoTGlyYTpGJGUsZmFWb2xjYW5vOk8kZSxmYVdhbmRTcGFya2xlczpSJGUsZmFNaWNyb3Bob25lOkIkZSxmYUNyb3duOkgkZSxmYVRlbnRBcnJvd1R1cm5MZWZ0OnEkZSxmYVRydWNrRmFzdDpTRixmYVNoaXBwaW5nRmFzdDpWJGUsZmFVc2VyUGVuOkNGLGZhVXNlckVkaXQ6aiRlLGZhVXNlckNsb2NrOlUkZSxmYVNob3dlcjpXJGUsZmFTcXVhcmVDYXJldFVwOl9GLGZhQ2FyZXRTcXVhcmVVcDpHJGUsZmFNYXBMb2NhdGlvbjpURixmYU1hcE1hcmtlZDpZJGUsZmFQZW5GYW5jeTpaJGUsZmFFdXJvU2lnbjptbSxmYUV1cjpYJGUsZmFFdXJvOkskZSxmYUhvdXNlQ2lyY2xlWG1hcms6USRlLGZhTGlyYVNpZ246SiRlLGZhWWVuU2lnbjpmbCxmYUNueTplQWUsZmFKcHk6dEFlLGZhUm1iOmFBZSxmYVllbjppQWUsZmFCb3hPcGVuOnJBZSxmYVRydWNrRmllbGQ6c0FlLGZhTG9jYXRpb25QaW5Mb2NrOm5BZSxmYVBlcnNvblByYXlpbmc6TEYsZmFQcmF5Om9BZSxmYUNsaXBib2FyZExpc3Q6bEFlLGZhU2Fja0RvbGxhcjpjQWUsZmFNb3VudGFpblN1bjpkQWUsZmFBcnJvd1VwV2lkZVNob3J0OiRGLGZhU29ydEFtb3VudFVwOnBBZSxmYVVzZXJzTGluZTpoQWUsZmFTdGFyT2ZEYXZpZDp1QWUsZmFOb3Rlc01lZGljYWw6ZkFlLGZhQXVzdHJhbFNpZ246bUFlLGZhQ2xpcGJvYXJkVXNlcjpnQWUsZmFGaWxlSW1hZ2U6YkFlLGZhU3F1YXJlQ2FyZXRSaWdodDpBRixmYUNhcmV0U3F1YXJlUmlnaHQ6dkFlLGZhVmlhbDp5QWUsZmFIZWxpY29wdGVyOnhBZSxmYU1pdHRlbjp3QWUsZmFHYXNQdW1wOk1BZSxmYUVudmVsb3BlQ2lyY2xlQ2hlY2s6ekFlLGZhUGVyc29uU2thdGluZzpERixmYVNrYXRpbmc6a0FlLGZhU3VuOnJnLGZhQmFzZWJhbGw6RUYsZmFCYXNlYmFsbEJhbGw6U0FlLGZhSW1hZ2U6Q0FlLGZhTm90ZGVmOl9BZSxmYUJhc2tldGJhbGw6UEYsZmFCYXNrZXRiYWxsQmFsbDpUQWUsZmFQZW5jaWw6SUYsZmFQZW5jaWxBbHQ6TEFlLGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQ6JEFlLGZhRGljZVNpeDpBQWUsZmFBbmdsZXNEb3duOk5GLGZhQW5nbGVEb3VibGVEb3duOkRBZSxmYVN5cmluZ2U6RUFlLGZhV2hlYXRBd246RkYsZmFXaGVhdEFsdDpQQWUsZmFQbGFuZVVwOklBZSxmYUFsaWduQ2VudGVyOk5BZSxmYUhvY2tleVB1Y2s6RkFlLGZhQ2lyY2xlQXJyb3dMZWZ0Ok9GLGZhQXJyb3dDaXJjbGVMZWZ0Ok9BZSxmYVBsdWdDaXJjbGVCb2x0OlJBZSxmYVJlc3Ryb29tOkJBZSxmYUFuY2hvckxvY2s6SEFlLGZhVGltZWxpbmU6cUFlLGZhTGlnaHRidWxiOlZBZSxmYUNpcmNsZUFycm93UmlnaHQ6UkYsZmFBcnJvd0NpcmNsZVJpZ2h0OmpBZSxmYU1hcnNBbmRWZW51czpVQWUsZmFOZXR3b3JrV2lyZWQ6c2csZmFCdWlsZGluZ1NoaWVsZDpXQWUsZmFDb2RlOkdBZSxmYUZlYXRoZXJQb2ludGVkOkJGLGZhRmVhdGhlckFsdDpZQWUsZmFGaWxlQ2lyY2xlUXVlc3Rpb246WkFlLGZhU2lnbmF0dXJlOlhBZSxmYUVhcnRoQW1lcmljYXM6cTUsZmFFYXJ0aDpLQWUsZmFFYXJ0aEFtZXJpY2E6UUFlLGZhR2xvYmVBbWVyaWNhczpKQWUsZmFDYXJyb3Q6ZURlLGZhVGVtcGVyYXR1cmVGdWxsOlY1LGZhVGVtcGVyYXR1cmU0OnREZSxmYVRoZXJtb21ldGVyNDphRGUsZmFUaGVybW9tZXRlckZ1bGw6aURlLGZhVGFibGVDZWxsc1Jvd0xvY2s6ckRlLGZhQm9sdExpZ2h0bmluZzpzRGUsZmFDbG91ZFNob3dlcnNXYXRlcjpuRGUsZmFBcnJvd1VwTG9uZzpIRixmYUxvbmdBcnJvd1VwOm9EZSxmYUFkZHJlc3NDYXJkOmdtLGZhQ29udGFjdENhcmQ6bERlLGZhVmNhcmQ6Y0RlLGZhQW5nbGVSaWdodDpkRGUsZmFGYWNlTWVoOnFGLGZhTWVoOnBEZSxmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXI6aERlLGZhTWFwOnVEZSxmYVVzZXJQbHVzOmZEZSxmYVZlbnVzOm1EZSxmYURpYWdyYW1TdWNjZXNzb3I6Z0RlLGZhSGVhZFNpZGVDb3VnaFNsYXNoOmJEZSxmYURpYWdyYW1Qcm9qZWN0OlZGLGZhUHJvamVjdERpYWdyYW06dkRlLGZhVGVybWluYWw6bmcsZmFIb3VzZUZpcmU6eURlLGZhTWFzazp4RGUsZmFIdXJyaWNhbmU6d0RlLGZhRWFydGhBZnJpY2E6akYsZmFHbG9iZUFmcmljYTpNRGUsZmFUaHVtYnRhY2s6VUYsZmFUaHVtYlRhY2s6ekRlLGZhSGFuZFBvaW50RG93bjprRGUsZmFGYWNlTWVoQmxhbms6V0YsZmFNZWhCbGFuazpTRGUsZmFUZW1wZXJhdHVyZUVtcHR5Omo1LGZhVGVtcGVyYXR1cmUwOkNEZSxmYVRoZXJtb21ldGVyMDpfRGUsZmFUaGVybW9tZXRlckVtcHR5OlREZSxmYUJvcmRlck5vbmU6TERlLGZhSGlnaGxpZ2h0ZXI6JERlLGZhTW9uZXlCaWxsV2F2ZTpBRGUsZmFUb2lsZXRQYXBlclNsYXNoOkREZSxmYUZpbGVTaGllbGQ6RURlLGZhVGV4dEhlaWdodDpQRGUsZmFGYWNlR3JpblRvbmd1ZTpHRixmYUdyaW5Ub25ndWU6SURlLGZhRmlsZVNpZ25hdHVyZTpORGUsZmFCdWlsZGluZ1doZWF0OkZEZSxmYVBsdWdDaXJjbGVNaW51czpPRGUsZmFGdXRib2w6Ym0sZmFGdXRib2xCYWxsOlJEZSxmYVNvY2NlckJhbGw6QkRlLGZhQ2lyY2xlUGx1czpZRixmYVBsdXNDaXJjbGU6SERlLGZhQnJhemlsaWFuUmVhbFNpZ246cURlLGZhU3RhckFuZENyZXNjZW50OlZEZSxmYUZhY2VTdXJwcmlzZTpaRixmYVN1cnByaXNlOmpEZSxmYUhvc3BpdGFsVXNlcjpVRGUsZmFBcnJvd0Rvd25VcExvY2s6V0RlLGZhRm9sZGVyOlhGLGZhRm9sZGVyQmxhbms6R0RlLGZhSG9sbHlCZXJyeTpZRGUsZmFWZW51c0RvdWJsZTpaRGUsZmFDbGlwYm9hcmRRdWVzdGlvbjpYRGUsZmFIb3Rkb2c6S0RlLGZhQXJyb3dVcEZyb21CcmFja2V0OlFEZSxmYU1pY3Jvc2NvcGU6SkRlLGZhQ2xvdWQ6ZUVlLGZhQmFzZWJhbGxCYXRCYWxsOnRFZSxmYUNhclJlYXI6S0YsZmFDYXJBbHQ6YUVlLGZhVGh1bWJ0YWNrU2xhc2g6UUYsZmFUaHVtYlRhY2tTbGFzaDppRWUsZmFQbHVzTWludXM6ckVlLGZhSG91c2VDaXJjbGVDaGVjazpzRWUsZmFDYWxlbmRhckRheTpuRWUsZmFMaWJyYTpvRWUsZmFDaXJjbGU6bEVlLGZhTW9iaWxlVmlicmF0ZTpjRWUsZmFGYWNlR3JpblNxdWludDpKRixmYUdyaW5TcXVpbnQ6ZEVlLGZhVXNlcnNCZXR3ZWVuTGluZXM6cEVlLGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcms6aEVlLGZhVGFibGVMaXN0OmVPLGZhVGhMaXN0OnVFZSxmYUZsYXNrVmlhbDpmRWUsZmFDaXJjbGVFeGNsYW1hdGlvbjp0TyxmYUV4Y2xhbWF0aW9uQ2lyY2xlOm1FZSxmYVRheGk6YU8sZmFDYWI6Z0VlLGZhVGV4dFNsYXNoOmlPLGZhUmVtb3ZlRm9ybWF0OmJFZSxmYVBlb3BsZVB1bGxpbmc6dkVlLGZhQmFja3dhcmQ6eUVlLGZhQ2FyQnVyc3Q6ck8sZmFDYXJDcmFzaDp4RWUsZmFMaW5rOnNPLGZhQ2hhaW46d0VlLGZhQmFja3dhcmRTdGVwOm5PLGZhU3RlcEJhY2t3YXJkOk1FZSxmYVg6ekVlLGZhQ2lyY2xlVXNlcjpvTyxmYVVzZXJDaXJjbGU6a0VlLGZhUmVjdGFuZ2xlTGlzdDpsTyxmYUxpc3RBbHQ6U0VlLGZhSGFuZDpjTyxmYUhhbmRQYXBlcjpDRWUsZmFDYW5jZXI6X0VlLGZhVmFuU2h1dHRsZTpkTyxmYVNodXR0bGVWYW46VEVlLGZhU3RhaXJzOkxFZSxmYUhvcnNlSGVhZDokRWUsZmFWYXVsdDpBRWUsZmFDbG9zZWRDYXB0aW9uaW5nU2xhc2g6REVlLGZhRHJ1bVN0ZWVscGFuOkVFZSxmYVRodW1ic1VwOlBFZSxmYVN0YW1wOklFZSxmYU1lbm9yYWg6TkVlLGZhQ2hpbGRyZW46RkVlLGZhQ2hhcnRMaW5lOnBPLGZhTGluZUNoYXJ0Ok9FZSxmYVNxdWFyZUVudmVsb3BlOmhPLGZhRW52ZWxvcGVTcXVhcmU6UkVlLGZhQmFuU21va2luZzp1TyxmYVNtb2tpbmdCYW46QkVlLGZhVHJ1Y2tGcm9udDpIRWUsZmFCdWlsZGluZzpvZyxmYUJ1bGxzZXllOnFFZSxmYUFycm93TGVmdExvbmc6Zk8sZmFMb25nQXJyb3dMZWZ0OlZFZSxmYUNoZXNzUm9vazpqRWUsZmFCbGVuZGVyUGhvbmU6VUVlLGZhQXJyb3dUdXJuVXA6bU8sZmFMZXZlbFVwOldFZSxmYUJpY3ljbGU6R0VlLGZhQ2lyY2xlQXJyb3dEb3duOmdPLGZhQXJyb3dDaXJjbGVEb3duOllFZSxmYUdlYXI6bzgsZmFDb2c6WkVlLGZhTWFyc0FuZFZlbnVzQnVyc3Q6WEVlLGZhT3R0ZXI6S0VlLGZhQ2lyY2xlQ2hldnJvbkxlZnQ6Yk8sZmFDaGV2cm9uQ2lyY2xlTGVmdDpRRWUsZmFDaXJjbGVRdWVzdGlvbjp2TyxmYVF1ZXN0aW9uQ2lyY2xlOkpFZSxmYVdhbGtpZVRhbGtpZTplUGUsZmFVc2VyR3JvdXA6eU8sZmFVc2VyRnJpZW5kczp0UGUsZmFIb3VzZUNoaW1uZXk6eE8sZmFIb21lTGc6YVBlLGZhUmlnaHRGcm9tQnJhY2tldDp3TyxmYVNpZ25PdXRBbHQ6aVBlLGZhRmlsZTpyUGUsZmFQbGFuZVNsYXNoOnNQZSxmYUNsb3VkU2hvd2Vyc0hlYXZ5Om5QZSxmYVBlcnNvbkZhbGxpbmc6b1BlLGZhVHVybkRvd246TU8sZmFMZXZlbERvd25BbHQ6bFBlLGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjp6TyxmYUV4cGFuZEFsdDpjUGUsZmFVc2VyVGFnOmRQZSxmYUhhbmRTcGFya2xlczpwUGUsZmFBcnJvd3NUb0RvdDpoUGUsZmFGYWNlU2FkQ3J5OmtPLGZhU2FkQ3J5OnVQZSxmYURvbmdTaWduOmZQZSxmYVBlb3BsZUxpbmU6bVBlLGZhU3F1YXJlUnNzOlNPLGZhUnNzU3F1YXJlOmdQZSxmYUNhbGVuZGFyTWludXM6YlBlLGZhQ2hhcnREaWFncmFtOnZQZSxmYUZhY2VUaXJlZDpDTyxmYVRpcmVkOnlQZSxmYUhhbmRQb2ludFJpZ2h0OnhQZSxmYUFycm93VXA6d1BlLGZhQ3ViZXNTdGFja2VkOk1QZSxmYUNoaWxkQ29tYmF0YW50Ol9PLGZhQ2hpbGRSaWZsZTp6UGUsZmFWZXN0UGF0Y2hlczprUGUsZmFNYXJ0aW5pR2xhc3NFbXB0eTpUTyxmYUdsYXNzTWFydGluaTpTUGUsZmFNYWduZXQ6Q1BlLGZhUm9hZEJhcnJpZXI6X1BlLGZhQ29tcGFzc0RyYWZ0aW5nOkxPLGZhRHJhZnRpbmdDb21wYXNzOlRQZSxmYVNxdWFyZVBlcnNvbkNvbmZpbmVkOkxQZSxmYVBsYXRlV2hlYXQ6JFBlLGZhU2lnbkhhbmdpbmc6JE8sZmFTaWduOkFQZSxmYUNhckJhdHRlcnk6QU8sZmFCYXR0ZXJ5Q2FyOkRQZSxmYVNoaXJ0OnZtLGZhVFNoaXJ0OkVQZSxmYVRzaGlydDpQUGUsZmFQYXJhZ3JhcGg6SVBlLGZhRW52ZWxvcGVzQnVsazpETyxmYU1haWxCdWxrOk5QZSxmYUd1aXRhcjpGUGUsZmFTdWl0Y2FzZTpPUGUsZmFDaXJjbGVVcDpFTyxmYUFycm93QWx0Q2lyY2xlVXA6UlBlLGZhRjpCUGUsZmFYbWFya3NMaW5lczpIUGUsZmFFYXJ0aE9jZWFuaWE6UE8sZmFHbG9iZU9jZWFuaWE6cVBlLGZhQ29tbWVudFNsYXNoOlZQZSxmYVBsYXk6alBlLGZhVmlhbENpcmNsZUNoZWNrOlVQZSxmYUJyaWRnZUNpcmNsZUNoZWNrOldQZSxmYUNlZGlTaWduOkdQZSxmYVB1enpsZVBpZWNlOllQZSxmYUhlbG1ldFVuOlpQZSxmYUdsYXNzV2F0ZXI6WFBlLGZhSGVhcnRDaXJjbGVCb2x0OktQZSxmYVB1bXBTb2FwOlFQZSxmYUhhbmRTY2lzc29yczpKUGUsZmFEb2xseTpJTyxmYURvbGx5Qm94OmVJZSxmYVBhcGVyY2xpcDpsZyxmYURlbW9jcmF0OnRJZSxmYVNxdWFyZUFycm93VXBSaWdodDpOTyxmYUV4dGVybmFsTGlua1NxdWFyZTphSWUsZmFGZXJyeTppSWUsZmFNb3NxdWl0bzpySWUsZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQ6c0llLGZhTGVmdFJpZ2h0OkZPLGZhQXJyb3dzQWx0SDpuSWUsZmFWaXJ1czpvSWUsZmFHZW06bEllLGZhVG9pbGV0OmNJZSxmYVNpbmdsZVF1b3RlTGVmdDpkSWUsZmFNb25leUJpbGxzOnBJZSxmYVRhYmxldEJ1dHRvbjpoSWUsZmFSZWN0YW5nbGVYbWFyazpVNSxmYVJlY3RhbmdsZVRpbWVzOnVJZSxmYVRpbWVzUmVjdGFuZ2xlOmZJZSxmYVdpbmRvd0Nsb3NlOm1JZSxmYVdyZW5jaDpnSWUsZmFUcmFzaENhbjpsOCxmYVRyYXNoQWx0OmJJZSxmYVRhYmxlQ2VsbHM6T08sZmFUaDp2SWUsZmFSaWJib246eUllLGZhTGFuZG1hcmtGbGFnOnhJZSxmYVVwRG93bkxlZnRSaWdodDpSTyxmYUFycm93c0FsdDp3SWUsZmFDYXJTaWRlOk1JZSxmYVRyYXNoQXJyb3dVcDpCTyxmYVRyYXNoUmVzdG9yZTp6SWUsZmFMaWZlUmluZzprSWUsZmFDb3B5cmlnaHQ6U0llLGZhRmlsZVByZXNjcmlwdGlvbjpDSWUsZmFFcmFzZXI6X0llLGZhSG91cmdsYXNzU3RhcnQ6SE8sZmFIb3VyZ2xhc3MxOlRJZSxmYUNpcmNsZUxlZnQ6cU8sZmFBcnJvd0FsdENpcmNsZUxlZnQ6TEllLGZhQ3J1emVpcm9TaWduOiRJZSxmYVNtb2tpbmc6QUllLGZhU3F1YXJlUG9sbFZlcnRpY2FsOlZPLGZhUG9sbDpESWUsZmFQZXJzb25DaXJjbGVNaW51czpFSWUsZmFCaW9oYXphcmQ6UEllLGZhQmVsbENvbmNpZXJnZTpqTyxmYUNvbmNpZXJnZUJlbGw6SUllLGZhUnVsZXJIb3Jpem9udGFsOk5JZSxmYUhvcnNlOkZJZSxmYUNhbGVuZGFyOk9JZSxmYUhhbmRzSG9sZGluZ0NoaWxkOlJJZSxmYUl0YWxpYzpCSWUsZmFLaGFuZGE6SEllLGZhRmFjZUZyb3duT3BlbjpVTyxmYUZyb3duT3BlbjpxSWUsZmFDaGVjazpjZyxmYUZpbmdlcnByaW50OlZJZSxmYUNoYXJnaW5nU3RhdGlvbjpqSWUsZmFVc2VyTG9jazpVSWUsZmFNb2JpbGVTY3JlZW5CdXR0b246V08sZmFNb2JpbGVBbHQ6V0llLGZhQW5jaG9yQ2lyY2xlQ2hlY2s6R0llLGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lOkdPLGZhQmxpbmQ6WUllLGZhRmlsZVdhdmVmb3JtOllPLGZhRmlsZU1lZGljYWxBbHQ6WkllLGZhSG91c2VDcmFjazpYSWUsZmFIYXRXaXphcmQ6S0llLGZhVXNlckRvY3RvcjpaTyxmYVVzZXJNZDpRSWUsZmFDaGFydEJhcjpYTyxmYUJhckNoYXJ0OkpJZSxmYVNwcmF5Q2FuU3BhcmtsZXM6S08sZmFBaXJGcmVzaGVuZXI6ZU5lLGZhQmFodFNpZ246dE5lLGZhVGVtcGVyYXR1cmVBcnJvd1VwOlFPLGZhVGVtcGVyYXR1cmVVcDphTmUsZmFXZWJBd2Vzb21lOmlOZSxmYU5vbkJpbmFyeTpyTmUsZmFOOnNOZSxmYUFycm93c1VwRG93bkxlZnRSaWdodDpKTyxmYUFycm93czpuTmUsZmFIb3VzZTpXNSxmYUhvbWU6b05lLGZhSG9tZUFsdDpsTmUsZmFIb21lTGdBbHQ6Y05lLGZhU3Bpbm5lcjpkTmUsZmFHYXZlbDplUixmYUxlZ2FsOnBOZSxmYVRpY2tldFNpbXBsZTp0UixmYVRpY2tldEFsdDpoTmUsZmFEb3ZlOnVOZSxmYVRhcnBEcm9wbGV0OmZOZSxmYVRyZWVDaXR5Om1OZSxmYVR1cm5VcDphUixmYUxldmVsVXBBbHQ6Z05lLGZhVGVtcGVyYXR1cmVRdWFydGVyOkc1LGZhVGVtcGVyYXR1cmUxOmJOZSxmYVRoZXJtb21ldGVyMTp2TmUsZmFUaGVybW9tZXRlclF1YXJ0ZXI6eU5lLGZhU2xpZGVyczppUixmYVNsaWRlcnNIOnhOZSxmYU1vc3F1ZTp3TmUsZmFIOk1OZSxmYUluZm86ek5lLGZhUGVyc29uV2Fsa2luZzpyUixmYVdhbGtpbmc6a05lLGZhQXJyb3dUdXJuRG93bjpzUixmYUxldmVsRG93bjpTTmUsZmFSb2FkOkNOZSxmYVNwaXJhbDpfTmUsZmFGYWNlRnJvd246blIsZmFGcm93bjpUTmUsZmFXaW5lR2xhc3NFbXB0eTpvUixmYVdpbmVHbGFzc0FsdDpMTmUsZmFDbGFwcGVyYm9hcmQ6JE5lLGZhRm9yd2FyZFN0ZXA6bFIsZmFTdGVwRm9yd2FyZDpBTmUsZmFTcXVhcmVVcFJpZ2h0OmNSLGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0OkROZSxmYUJvb2tKb3VybmFsV2hpbGxzOmRSLGZhSm91cm5hbFdoaWxsczpFTmUsZmFDaGFtcGFnbmVHbGFzc2VzOnBSLGZhR2xhc3NDaGVlcnM6UE5lLGZhRHVtcHN0ZXI6SU5lLGZhSGVhcnRDaXJjbGVYbWFyazpOTmUsZmFDb21wdXRlcjpGTmUsZmFXYW5kTWFnaWM6aFIsZmFNYWdpYzpPTmUsZmFCcmFpbjpSTmUsZmFCcmllZmNhc2VNZWRpY2FsOkJOZSxmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uOkhOZSxmYUNvZGVDb21taXQ6cU5lLGZhUGVyc29uQnJlYXN0ZmVlZGluZzpWTmUsZmFQZXJzb25SYXlzOmpOZSxmYU1hbmF0U2lnbjpVTmUsZmFTb3J0OnVSLGZhVW5zb3J0ZWQ6V05lLGZhQ2lyY2xlUmFkaWF0aW9uOmZSLGZhUmFkaWF0aW9uQWx0OkdOZSxmYUxhcHRvcENvZGU6WU5lLGZhU2luazpaTmUsZmFBcnJvd1VwRnJvbVdhdGVyUHVtcDpYTmUsZmFNaWNyb3Bob25lTGluZXNTbGFzaDptUixmYU1pY3JvcGhvbmVBbHRTbGFzaDpLTmUsZmFTZXJ2ZXI6UU5lLGZhVXNlcjp5bSxmYVVzZXJBbHQ6Sk5lLGZhVXNlckxhcmdlOmVGZSxmYVNub3dmbGFrZTp0RmUsZmFUYXVydXM6YUZlLGZhU2t1bGxDcm9zc2JvbmVzOmlGZSxmYVBlc29TaWduOnJGZSxmYVdpbmVHbGFzczpzRmUsZmFUZW1wZXJhdHVyZUhhbGY6WTUsZmFUZW1wZXJhdHVyZTI6bkZlLGZhVGhlcm1vbWV0ZXIyOm9GZSxmYVRoZXJtb21ldGVySGFsZjpsRmUsZmFUaWNrZXQ6Y0ZlLGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbjpkRmUsZmFBcnJvd3NUdXJuUmlnaHQ6cEZlLGZhQ2FuZHlDYW5lOmhGZSxmYVdoZWVsY2hhaXI6dUZlLGZhU3BlbGxDaGVjazpmRmUsZmFWb2x1bWVPZmY6bUZlLGZhTHVuZ3M6Z0ZlLGZhQm9va21hcms6YkZlLGZhQmFyY29kZTp2RmUsZmFMaXN0T2w6eG0sZmFMaXN0MTI6eUZlLGZhTGlzdE51bWVyaWM6eEZlLGZhRmlsZUNpcmNsZVhtYXJrOndGZSxmYUN1YmU6TUZlLGZhVGFwZTp6RmUsZmFCb21iOmtGZSxmYVNjYWxlVW5iYWxhbmNlZDpnUixmYUJhbGFuY2VTY2FsZUxlZnQ6U0ZlLGZhU3F1YXJlQ2FyZXRMZWZ0OmJSLGZhQ2FyZXRTcXVhcmVMZWZ0OkNGZSxmYVJ1bGVyOl9GZSxmYUk6VEZlLGZhVm9sdW1lWG1hcms6d20sZmFWb2x1bWVNdXRlOkxGZSxmYVZvbHVtZVRpbWVzOiRGZSxmYUFyY2h3YXk6QUZlLGZhUGVyc29uRGlnZ2luZzp2UixmYURpZ2dpbmc6REZlLGZhR2F1Z2VIaWdoOk1tLGZhVGFjaG9tZXRlckFsdDpFRmUsZmFUYWNob21ldGVyQWx0RmFzdDpQRmUsZmFHZW5kZXJsZXNzOklGZSxmYUNsb3VkU3VuOk5GZSxmYUFycm93UmlnaHQ6ZGcsZmFIYW5kc2hha2U6em0sZmFIYW5kc2hha2VBbHQ6RkZlLGZhSGFuZHNoYWtlU2ltcGxlOk9GZSxmYVBlcnNvblNraWluZzp5UixmYVNraWluZzpSRmUsZmFCcmlkZ2VXYXRlcjpCRmUsZmFCdWlsZGluZ05nbzpIRmUsZmFJZ2xvbzpxRmUsZmFDaXJjbGVEb2xsYXJUb1Nsb3Q6eFIsZmFEb25hdGU6VkZlLGZhWTpqRmUsZmFGYWNlU21pbGVXaW5rOndSLGZhU21pbGVXaW5rOlVGZSxmYURpY2VGb3VyOldGZSxmYUZhY2VHcmluU3F1aW50VGVhcnM6TVIsZmFHcmluU3F1aW50VGVhcnM6R0ZlLGZhRmlsZUF1ZGlvOllGZSxmYUFycm93c0Rvd25Ub0xpbmU6WkZlLGZhRzpYRmUsZmFWaWhhcmE6S0ZlLGZhRmxhZ0NoZWNrZXJlZDpRRmUsZmFHYXVnZVNpbXBsZTprbSxmYUdhdWdlU2ltcGxlTWVkOkpGZSxmYVRhY2hvbWV0ZXJBdmVyYWdlOmVPZSxmYVJpZ2h0TGVmdDp6UixmYUV4Y2hhbmdlQWx0OnRPZSxmYVBpbGxzOmFPZSxmYUV4cGxvc2lvbjppT2UsZmFBcnJvd3NEb3duVG9QZW9wbGU6ck9lLGZhVXNlcnNWaWV3ZmluZGVyOnNPZSxmYUNhck9uOm5PZSxmYVNsZWlnaDpvT2UsZmFEdW1iYmVsbDpsT2UsZmFCYWJ5Q2FycmlhZ2U6a1IsZmFDYXJyaWFnZUJhYnk6Y09lLGZhS2l3aUJpcmQ6ZE9lLGZhQ2FsZW5kYXJYbWFyazpTUixmYUNhbGVuZGFyVGltZXM6cE9lLGZhQ2lyY2xlRG93bjpDUixmYUFycm93QWx0Q2lyY2xlRG93bjpoT2UsZmFGaWxlTWVkaWNhbDp1T2UsZmFYbWFyazpvbyxmYUNsb3NlOmZPZSxmYU11bHRpcGx5Om1PZSxmYVJlbW92ZTpnT2UsZmFUaW1lczpiT2UsZmFTaGFwZXM6X1IsZmFUcmlhbmdsZUNpcmNsZVNxdWFyZTp2T2UsZmFEaWNlT25lOnlPZSxmYUxvY2tPcGVuOnhPZSxmYVBlcHBlckhvdDp3T2UsZmFEcm9wbGV0U2xhc2g6VFIsZmFUaW50U2xhc2g6TU9lLGZhRHJvcGxldDpMUixmYVRpbnQ6ek9lLGZhRmlsZUxpbmVzOlNtLGZhRmlsZUFsdDprT2UsZmFGaWxlVGV4dDpTT2UsZmFDb21tZW50c0RvbGxhcjpDT2UsZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbjokUixmYVNlYXJjaExvY2F0aW9uOl9PZSxmYUZpbGVJbnZvaWNlOnBnLGZhUGVudGFnb246VE9lLGZhUmVwdWJsaWNhbjpMT2UsZmFTaG9wOkFSLGZhU3RvcmVBbHQ6JE9lLGZhRmlsbTpDbSxmYUZpbG1BbHQ6QU9lLGZhRmlsbVNpbXBsZTpET2UsZmFCdWlsZGluZ0NpcmNsZVhtYXJrOkVPZSxmYUNvbW1lbnRzOlBPZSxmYVRhZ3M6SU9lLGZhR3VuOk5PZSxmYUNpcmNsZUNoZWNrOmM4LGZhQ2hlY2tDaXJjbGU6Rk9lLGZhU2NvcnBpbzpPT2UsZmFJZENhcmRDbGlwOkRSLGZhSWRDYXJkQWx0OlJPZSxmYU1vb246Qk9lLGZhT2lsV2VsbDpIT2UsZmFUYWNob2dyYXBoRGlnaXRhbDpFUixmYURpZ2l0YWxUYWNob2dyYXBoOnFPZSxmYVRhYmxldDpQUixmYVRhYmxldEFuZHJvaWQ6Vk9lLGZhUnVibGVTaWduOlo1LGZhUm91YmxlOmpPZSxmYVJ1YjpVT2UsZmFSdWJsZTpXT2UsZmFDbG9zZWRDYXB0aW9uaW5nOkdPZSxmYVBlbjpZT2UsZmFQbGFuZTpaT2UsZmFJbWFnZXM6WE9lLGZhTW9iaWxlU2NyZWVuOklSLGZhTW9iaWxlQW5kcm9pZEFsdDpLT2UsZmFHdWFyYW5pU2lnbjpRT2UsZmFCYWdTaG9wcGluZzpOUixmYVNob3BwaW5nQmFnOkpPZSxmYUNpcmNsZVJpZ2h0OkZSLGZhQXJyb3dBbHRDaXJjbGVSaWdodDplUmUsZmFQaG9uZVZvbHVtZTpPUixmYVZvbHVtZUNvbnRyb2xQaG9uZTp0UmUsZmFDdWJlczphUmUsZmFQaG9uZTppUmUsZmFUb3JpaUdhdGU6clJlLGZhQmFjb246c1JlLGZhUGVyc29uRmFsbGluZ0J1cnN0Om5SZSxmYVF1b3RlUmlnaHQ6UlIsZmFRdW90ZVJpZ2h0QWx0Om9SZSxmYUhvdXNlTWVkaWNhbEZsYWc6bFJlLGZhUHJlc2NyaXB0aW9uOmNSZSxmYURpY2VUaHJlZTpkUmUsZmFCdWlsZGluZ0xvY2s6cFJlLGZhSWRDYXJkOkJSLGZhRHJpdmVyc0xpY2Vuc2U6aFJlLGZhQ2lyY2xlUGxheTpIUixmYVBsYXlDaXJjbGU6dVJlLGZhRmFjZUxhdWdoQmVhbTpxUixmYUxhdWdoQmVhbTpmUmUsZmFMZWFmOm1SZSxmYUhvdXNlQ2hpbW5leVVzZXI6Z1JlLGZhUm90YXRlUmlnaHQ6X20sZmFSZWRvQWx0OmJSZSxmYVJvdGF0ZUZvcndhcmQ6dlJlLGZhVG9vdGg6eVJlLGZhSG91c2VDaGltbmV5V2luZG93OnhSZSxmYU1vdG9yY3ljbGU6d1JlLGZhQmFja3dhcmRGYXN0OlZSLGZhRmFzdEJhY2t3YXJkOk1SZSxmYUFkZHJlc3NCb29rOmpSLGZhQ29udGFjdEJvb2s6elJlLGZhU2FpbGJvYXQ6a1JlLGZhQm9va0Jvb2ttYXJrOlNSZSxmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQ6Q1JlLGZhTWljcm9waG9uZUxpbmVzOlVSLGZhTWljcm9waG9uZUFsdDpfUmUsZmFSZXBseUFsbDpXUixmYU1haWxSZXBseUFsbDpUUmUsZmFVbml2ZXJzYWxBY2Nlc3M6TFJlLGZhVG9pbGV0UGFwZXI6VG0sZmFUb2lsZXRQYXBlckFsdDokUmUsZmFUb2lsZXRQYXBlckJsYW5rOkFSZSxmYVZyQ2FyZGJvYXJkOkRSZSxmYVBpenphU2xpY2U6RVJlLGZhU3ByYXlDYW46UFJlLGZhVm9sdW1lTG93OkdSLGZhVm9sdW1lRG93bjpJUmUsZmFDcm9zczpOUmUsZmFQZXJzb246WVIsZmFNYWxlOkZSZSxmYUhvdXJnbGFzczpaUixmYUhvdXJnbGFzc0VtcHR5Ok9SZSxmYUZpc2g6UlJlLGZhRHJ1bXN0aWNrQml0ZTpCUmUsZmFDaGFydFNpbXBsZTpIUmUsZmFBdG9tOnFSZSxmYVA6VlJlLGZhSmV0RmlnaHRlclVwOmpSZSxmYVBsdWdDaXJjbGVYbWFyazpVUmUsZmFTaGVldFBsYXN0aWM6V1JlLGZhVjpHUmUsZmFMaXN0OlhSLGZhTGlzdFNxdWFyZXM6WVJlLGZhUGlzY2VzOlpSZSxmYVNvbGFyUGFuZWw6WFJlLGZhTGFuZE1pbmVPbjpLUmUsZmFIZWFkcGhvbmVzOkxtLGZhSGVhZHBob25lc0FsdDpRUmUsZmFIZWFkcGhvbmVzU2ltcGxlOkpSZSxmYUJ1czplQmUsZmFGaWxlUG93ZXJwb2ludDp0QmUsZmFRdW90ZUxlZnQ6S1IsZmFRdW90ZUxlZnRBbHQ6YUJlLGZhQ2hldnJvbkRvd246aUJlLGZhRWFydGhBc2lhOlFSLGZhR2xvYmVBc2lhOnJCZSxmYUNlbnRTaWduOnNCZSxmYVNoaWVsZENhdDpuQmUsZmFTY2hvb2xDaXJjbGVDaGVjazpvQmUsZmFNYXJ0aW5pR2xhc3M6SlIsZmFHbGFzc01hcnRpbmlBbHQ6bEJlLGZhUGx1ZzpjQmUsZmFQYW5vcmFtYTpkQmUsZmFDbG9ja1JvdGF0ZUxlZnQ6ZDgsZmFIaXN0b3J5OnBCZSxmYUphcldoZWF0OmhCZSxmYUNsb3VkQXJyb3dEb3duOiRtLGZhQ2xvdWREb3dubG9hZDp1QmUsZmFDbG91ZERvd25sb2FkQWx0OmZCZSxmYVRydWNrUmFtcEJveDplQixmYVRydWNrTG9hZGluZzptQmUsZmFBbmdsZURvd246Z0JlLGZhUGx1Z0NpcmNsZUNoZWNrOmJCZSxmYVdpbmRvd01heGltaXplOnZCZSxmYUhhbmRzSG9sZGluZ0NpcmNsZTp5QmUsZmFMb2NhdGlvblBpbjp0QixmYU1hcE1hcmtlcjp4QmUsZmFCb3dsaW5nQmFsbDp3QmUsZmFDYXJ0RmxhdGJlZDphQixmYURvbGx5RmxhdGJlZDpNQmUsZmFIb3VzZVVzZXI6aUIsZmFIb21lVXNlcjp6QmUsZmFHaG9zdDprQmUsZmFDb21tZW50Tm9kZXM6U0JlLGZhUGVyc29uQXJyb3dEb3duVG9MaW5lOkNCZSxmYVBsdWdDaXJjbGVQbHVzOl9CZSxmYVBlcnNvblN3aW1taW5nOnJCLGZhU3dpbW1lcjpUQmUsZmFDb21tZW50RG90czpzQixmYUNvbW1lbnRpbmc6TEJlLGZhQ2hhcnRQaWU6bkIsZmFQaWVDaGFydDokQmUsZmFGcm9nOkFCZSxmYVdpbmVCb3R0bGU6REJlLGZhSW5ib3g6RUJlLGZhU3F1YXJlSDpvQixmYUhTcXVhcmU6UEJlLGZhSG91c2VNZWRpY2FsOklCZSxmYUNpcmNsZUNoZXZyb25SaWdodDpsQixmYUNoZXZyb25DaXJjbGVSaWdodDpOQmUsZmFGaWxlQ3N2OkZCZSxmYUhhdENvd2JveTpPQmUsZmFGYWNlR3JpblRvbmd1ZVdpbms6Y0IsZmFHcmluVG9uZ3VlV2luazpSQmUsZmFMOkJCZSxmYUFycm93RG93blNob3J0V2lkZTpBbSxmYVNvcnRBbW91bnREZXNjOkhCZSxmYVNvcnRBbW91bnREb3duQWx0OnFCZSxmYUhvdXJnbGFzc0hhbGY6ZEIsZmFIb3VyZ2xhc3MyOlZCZSxmYVNwb29uOnBCLGZhVXRlbnNpbFNwb29uOmpCZSxmYUNyZWRpdENhcmQ6aEIsZmFDcmVkaXRDYXJkQWx0OlVCZSxmYUZpbGVJbnZvaWNlRG9sbGFyOmhnLGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzp1QixmYVBhc3RhZmFyaWFuaXNtOldCZSxmYU1hcnRpbmlHbGFzc0NpdHJ1czpmQixmYUNvY2t0YWlsOkdCZSxmYUJ1bGxob3JuOllCZSxmYUJveFRpc3N1ZTpaQmUsZmFNYXR0cmVzc1BpbGxvdzpYQmUsZmFDaGV2cm9uTGVmdDpLQmUsZmFDbG91ZE1vb25SYWluOlFCZSxmYUFycm93RG93bjE5OkRtLGZhU29ydE51bWVyaWNBc2M6SkJlLGZhU29ydE51bWVyaWNEb3duOmVIZSxmYUhhbmRTcG9jazp0SGUsZmFXYW5kTWFnaWNTcGFya2xlczptQixmYU1hZ2ljV2FuZFNwYXJrbGVzOmFIZSxmYUNvbW1lbnRNZWRpY2FsOmlIZSxmYUJlbGxTbGFzaDpySGUsZmFIYW5kc2hha2VTbGFzaDpFbSxmYUhhbmRzaGFrZUFsdFNsYXNoOnNIZSxmYUhhbmRzaGFrZVNpbXBsZVNsYXNoOm5IZSxmYUJvdHRsZVdhdGVyOm9IZSxmYURpY2VEMjA6bEhlLGZhQXJyb3dEb3duWkE6UG0sZmFTb3J0QWxwaGFEZXNjOmNIZSxmYVNvcnRBbHBoYURvd25BbHQ6ZEhlLGZhQnJ1c2g6cEhlLGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0OmhIZSxmYUFycm93VXBTaG9ydFdpZGU6Z0IsZmFTb3J0QW1vdW50VXBBbHQ6dUhlLGZhR3JpcFZlcnRpY2FsOmJCLGZhR3JpZFZlcnRpY2FsOmZIZSxmYUNhclR1bm5lbDptSGUsZmFDaGFydENvbHVtbjpnSGUsZmFDYXByaWNvcm46YkhlLGZhVHJ1Y2tBcnJvd1JpZ2h0OnZIZSxmYVR2OkltLGZhVGVsZXZpc2lvbjp5SGUsZmFUdkFsdDp4SGUsZmFTZWN0aW9uOndIZSxmYVBlYWNlOk1IZSxmYVN0YXI6ekhlLGZhRmxhZzprSGUsZmFUcmlhbmdsZUV4Y2xhbWF0aW9uOk5tLGZhRXhjbGFtYXRpb25UcmlhbmdsZTpTSGUsZmFXYXJuaW5nOkNIZSxmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uOl9IZSxmYUdyYWR1YXRpb25DYXA6dkIsZmFNb3J0YXJCb2FyZDpUSGUsZmFTdG9yZTpMSGUsZmFVc2VyQXN0cm9uYXV0OiRIZSxmYUJ1aWxkaW5nRmxhZzpBSGUsZmFNdWdTYXVjZXI6eUIsZmFDb2ZmZWU6REhlLGZhTGVtb246RUhlLGZhQ2FyYXZhbjpQSGUsZmFROklIZSxmYUxvY2s6TkhlLGZhUGFpbnRSb2xsZXI6RkhlLGZhVm9sdW1lSGlnaDp4QixmYVZvbHVtZVVwOk9IZSxmYUZvbGRlclBsdXM6UkhlLGZhTWVyY3VyeTpCSGUsZmFBbmNob3I6SEhlLGZhU3F1YXJlUGFya2luZzp3QixmYVBhcmtpbmc6cUhlLGZhSGFudWtpYWg6VkhlLGZhUm90YXRlTGVmdDpYNSxmYVJvdGF0ZUJhY2s6akhlLGZhUm90YXRlQmFja3dhcmQ6VUhlLGZhVW5kb0FsdDpXSGUsZmFIZWFkaW5nOk1CLGZhSGVhZGVyOkdIZSxmYUNyb3NzaGFpcnM6WUhlLGZhQ2lyY2xlTm9kZXM6WkhlLGZhV2luZG93UmVzdG9yZTpYSGUsZmFSOktIZSxmYUZpbHRlckNpcmNsZVhtYXJrOlFIZSxmYUdvcHVyYW06SkhlLGZhSGVhcnRDaXJjbGVNaW51czplcWUsZmFTdGFyT2ZMaWZlOnRxZSxmYUJ1c2luZXNzVGltZTp6QixmYUJyaWVmY2FzZUNsb2NrOmFxZSxmYUZpcmVFeHRpbmd1aXNoZXI6aXFlLGZhQXJyb3dEb3duTG9uZzprQixmYUxvbmdBcnJvd0Rvd246cnFlLGZhVXNlck1pbnVzOnNxZSxmYU1vbmV5Q2hlY2s6bnFlLGZhSG91c2VMYXB0b3A6U0IsZmFMYXB0b3BIb3VzZTpvcWUsZmFEb3dubG9hZDpscWUsZmFTYWdpdHRhcml1czpjcWUsZmFDb3VjaDpkcWUsZmFSb2FkTG9jazpwcWUsZmFTY2lzc29yczpDQixmYUN1dDpocWUsZmFCdWc6dWcsZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ6X0IsZmFTaWduT3V0OnVxZSxmYUhhbmRIb2xkaW5nSGFuZDpmcWUsZmFTdHJvb3B3YWZlbDptcWUsZmFDaGlsZDpncWUsZmFJY2VDcmVhbTpicWUsZmFDb21wdXRlck1vdXNlOlRCLGZhTW91c2U6dnFlLGZhRmF1Y2V0OnlxZSxmYUF3YXJkOnhxZSxmYVBlcnNvbkRyb3duaW5nOndxZSxmYUNhbWVyYVJvdGF0ZTpNcWUsZmFGYWNlR3JpbkhlYXJ0czpMQixmYUdyaW5IZWFydHM6enFlLGZhRmlsZUZyYWdtZW50OmtxZSxmYVBlcnNvbk1pbGl0YXJ5UmlmbGU6U3FlLGZhVG9nZ2xlT246Q3FlLGZhTHVuZ3NWaXJ1czpfcWUsZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw6Rm0sZmFQaW5nUG9uZ1BhZGRsZUJhbGw6VHFlLGZhVGFibGVUZW5uaXM6THFlLGZhQm94ZXNQYWNraW5nOiRxZSxmYVBlcnNvbkNoYWxrYm9hcmQ6QXFlLGZhRGljZVR3bzpEcWUsZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OiRCLGZhRXhjaGFuZ2U6RXFlLGZhRm9vdGJhbGw6QUIsZmFGb290YmFsbEJhbGw6UHFlLGZhVHJ1Y2tNb25zdGVyOklxZSxmYUFzdGVyaXNrOk5xZSxmYUJhdHRlcnlGdWxsOk9tLGZhQmF0dGVyeTpGcWUsZmFCYXR0ZXJ5NTpPcWUsZmFDaGlsZERyZXNzOlJxZSxmYUZhY2VLaXNzQmVhbTpEQixmYUtpc3NCZWFtOkJxZSxmYVRyYXNoQ2FuQXJyb3dVcDpFQixmYVRyYXNoUmVzdG9yZUFsdDpIcWUsZmFGb250OnFxZSxmYUJvcmVIb2xlOlZxZSxmYVZpcnVzQ292aWQ6anFlLGZhRmlsZVBkZjpVcWUsZmFMYW5ndWFnZTpXcWUsZmFTaGllbGRIYWx2ZWQ6UEIsZmFTaGllbGRBbHQ6R3FlLGZhQ2FyZXRVcDpZcWUsZmFGaWxlUGVuOklCLGZhRmlsZUVkaXQ6WnFlLGZhUGVyc29uQmlraW5nOk5CLGZhQmlraW5nOlhxZSxmYUJvb2tPcGVuUmVhZGVyOkZCLGZhQm9va1JlYWRlcjpLcWUsZmFHbGFzc1dhdGVyRHJvcGxldDpRcWUsZmFUb3dlckJyb2FkY2FzdDpPQixmYUJyb2FkY2FzdFRvd2VyOkpxZSxmYU1pbmltaXplOlJCLGZhQ29tcHJlc3NBcnJvd3NBbHQ6ZVZlLGZhQXJyb3dSaWdodFRvQ2l0eTp0VmUsZmFMYXB0b3BNZWRpY2FsOmFWZSxmYUJyZWFkU2xpY2U6aVZlLGZhR2xvYmU6clZlLGZhRm9sZGVyTWludXM6c1ZlLGZhTWFza0ZhY2U6blZlLGZhQm9uZzpvVmUsZmFSb2FkQnJpZGdlOmxWZSxmYUFycm93VXA5MTpCQixmYVNvcnROdW1lcmljVXBBbHQ6Y1ZlLGZhTW91bnRhaW5DaXR5OmRWZSxmYUFycm93RG93bjkxOlJtLGZhU29ydE51bWVyaWNEZXNjOnBWZSxmYVNvcnROdW1lcmljRG93bkFsdDpoVmUsZmFGYWNlR3JpbldpZGU6SEIsZmFHcmluQWx0OnVWZSxmYVBvb3A6ZlZlLGZhRGhhcm1hY2hha3JhOm1WZSxmYUJhdHRlcnlRdWFydGVyOnFCLGZhQmF0dGVyeTI6Z1ZlLGZhQW5raDpiVmUsZmFEaWFtb25kOnZWZSxmYVN1YnNjcmlwdDp5VmUsZmFSdXBlZVNpZ246VkIsZmFSdXBlZTp4VmUsZmFQZXJzb25SaWZsZTp3VmUsZmFEOk1WZSxmYVNxdWFyZU5maTp6VmUsZmFUZWV0aDprVmUsZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXI6akIsZmFTZWFyY2hEb2xsYXI6U1ZlLGZhRHVtcHN0ZXJGaXJlOkNWZSxmYVVwbG9hZDpfVmUsZmFVc2VyU2xhc2g6Qm0sZmFVc2VyQWx0U2xhc2g6VFZlLGZhVXNlckxhcmdlU2xhc2g6TFZlLGZhQXJyb3dMZWZ0OiRWZSxmYVZpYWxWaXJ1czpBVmUsZmFDaGVja0RvdWJsZTpEVmUsZmFQYXc6RVZlLGZhSGVsbWV0U2FmZXR5OkhtLGZhSGFyZEhhdDpQVmUsZmFIYXRIYXJkOklWZSxmYUU6TlZlLGZhRmFjZUxhdWdoU3F1aW50OlVCLGZhTGF1Z2hTcXVpbnQ6RlZlLGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXI6V0IsZmFDb21wcmVzc0FsdDpPVmUsZmFHaWZ0czpSVmUsZmFCZWQ6QlZlLGZhTW9uZXlCaWxsVHJhbnNmZXI6SFZlLGZhUGVyc29uUnVubmluZzpHQixmYVJ1bm5pbmc6cVZlLGZhQ2lyY2xlQ2hldnJvbkRvd246WUIsZmFDaGV2cm9uQ2lyY2xlRG93bjpWVmUsZmFVc2VyTnVyc2U6alZlLGZhRmFjZUtpc3NXaW5rSGVhcnQ6WkIsZmFLaXNzV2lua0hlYXJ0OlVWZSxmYUZpbGw6V1ZlLGZhTW9uZXlCaWxsMVdhdmU6WEIsZmFNb25leUJpbGxXYXZlQWx0OkdWZSxmYUxhbmRtYXJrOllWZSxmYU11c2ljOlpWZSxmYUJvb2tNZWRpY2FsOlhWZSxmYVNodWZmbGU6S0IsZmFSYW5kb206S1ZlLGZhVW5kZXJsaW5lOlFWZSxmYUJ1aWxkaW5nVXNlcjpKVmUsZmFSb2JvdDplamUsZmFQbHVzOnA4LGZhQWRkOnRqZSxmYUNvcHk6ZmcsZmFDaGVzc0tpbmc6YWplLGZhSG91c2VGbG9vZFdhdGVyOmlqZSxmYUJpdGNvaW5TaWduOnJqZSxmYUJveDpzamUsZmFTcXVhcmVQbHVzOlFCLGZhUGx1c1NxdWFyZTpuamUsZmFBcnJvd3NMZWZ0UmlnaHQ6SkIsZmFBcnJvd3NIOm9qZSxmYUZhbjpsamUsZmFDcm93OmNqZSxmYUZpbGVDaXJjbGVDaGVjazpkamUsZmFMaW5rU2xhc2g6SzUsZmFDaGFpbkJyb2tlbjpwamUsZmFDaGFpblNsYXNoOmhqZSxmYVVubGluazp1amUsZmFBcnJvd1JvdGF0ZVJpZ2h0OlE1LGZhQXJyb3dSaWdodFJvdGF0ZTpmamUsZmFBcnJvd1JvdGF0ZUZvcndhcmQ6bWplLGZhUmVkbzpnamUsZmFQZW5DbGlwOmVILGZhUGVuQWx0OmJqZSxmYURvb3JDbG9zZWQ6dmplLGZhQXJyb3dEb3duV2lkZVNob3J0OnFtLGZhU29ydEFtb3VudEFzYzp5amUsZmFTb3J0QW1vdW50RG93bjp4amUsZmFDYXJldERvd246d2plLGZhSzpNamUsZmFDaGVja1RvU2xvdDp0SCxmYVZvdGVZZWE6emplLGZhRmlzaEZpbnM6a2plLGZhQ29tcHJlc3M6U2plLGZhQXJyb3dVcEFaOmFILGZhU29ydEFscGhhVXA6Q2plLGZhVXNlckdyYWR1YXRlOl9qZSxmYUZpbGVDb2RlOlRqZSxmYVNvYXA6TGplLGZhUmVjeWNsZTokamUsZmFGYWNlR3Jpbldpbms6aUgsZmFHcmluV2luazpBamUsZmFXYXRlckxhZGRlcjpWbSxmYUxhZGRlcldhdGVyOkRqZSxmYVN3aW1taW5nUG9vbDpFamUsZmFHZW1pbmk6UGplLGZhVG93ZXJDZWxsOklqZSxmYUNvbG9uU2lnbjpOamUsZmFMYXB0b3BGaWxlOkZqZSxmYUJhaGFpOnJILGZhSGF5a2FsOk9qZSxmYU1vbmV5QmlsbDE6c0gsZmFNb25leUJpbGxBbHQ6UmplLGZhQ2xvdWRCb2x0Om5ILGZhVGh1bmRlcnN0b3JtOkJqZSxmYUV0aGVybmV0OkhqZSxmYUhyeXZuaWFTaWduOm9ILGZhSHJ5dm5pYTpxamUsZmFFeWVTbGFzaDptZyxmYUNhcnRGbGF0YmVkU3VpdGNhc2U6bEgsZmFMdWdnYWdlQ2FydDpWamUsZmFSYWRpYXRpb246amplLGZhRmlsZVdvcmQ6VWplLGZhQmVkUHVsc2U6Y0gsZmFQcm9jZWR1cmVzOldqZSxmYVRlbnRzOkdqZSxmYU11Z0hvdDpnZyxmYUJvbHQ6ZEgsZmFaYXA6WWplLGZhSmFyOlpqZSxmYVRydWNrUGxhbmU6WGplLGZhSGFuZEhvbGRpbmdIZWFydDpLamUsZmFBcnJvd1JvdGF0ZUxlZnQ6bWwsZmFBcnJvd0xlZnRSb3RhdGU6UWplLGZhQXJyb3dSb3RhdGVCYWNrOkpqZSxmYUFycm93Um90YXRlQmFja3dhcmQ6ZVVlLGZhVW5kbzp0VWUsZmFGYWNlQW5ncnk6cEgsZmFBbmdyeTphVWUsZmFCdXJzdDppVWUsZmFaOnJVZSxmYUJhbmRhZ2U6aEgsZmFCYW5kQWlkOnNVZSxmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb246blVlLGZhQnVzU2lkZTpvVWUsZmFCdWdzOmxVZSxmYUJlZXJNdWdFbXB0eTp1SCxmYUJlZXI6Y1VlLGZhUGVyc29uQ2lyY2xlQ2hlY2s6ZFVlLGZhU3RhcGxlcjpwVWUsZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjazpoVWUsZmFOYWlyYVNpZ246dVVlLGZhV2lmaTpqbSxmYVdpZmkzOmZVZSxmYVdpZmlTdHJvbmc6bVVlLGZhTW9uZXlDaGVja0RvbGxhcjpoOCxmYU1vbmV5Q2hlY2tBbHQ6Z1VlLGZhRXllTG93VmlzaW9uOmZILGZhTG93VmlzaW9uOmJVZSxmYUNpcmNsZUFycm93VXA6bUgsZmFBcnJvd0NpcmNsZVVwOnZVZSxmYUNhbWVyYVJldHJvOnlVZSxmYUNhcHN1bGVzOnhVZSxmYVBvbzp3VWUsZmFWb2x1bWU6Z0gsZmFWb2x1bWVNZWRpdW06TVVlLGZhRWxldmF0b3I6elVlLGZhVGFnOmtVZSxmYUZpbGVDaXJjbGVNaW51czpTVWUsZmFEb3duTG9uZzpiSCxmYUxvbmdBcnJvd0FsdERvd246Q1VlLGZhQ29tcGFjdERpc2M6X1VlLGZhU3VpdGNhc2VSb2xsaW5nOlRVZSxmYUJvb2tRdXJhbjp2SCxmYVF1cmFuOkxVZSxmYVBob25lU2xhc2g6JFVlLGZhUm9hZENpcmNsZUNoZWNrOkFVZSxmYVNob3BMb2NrOkRVZSxmYUltYWdlUG9ydHJhaXQ6eUgsZmFQb3J0cmFpdDpFVWUsZmFCcmlkZ2VMb2NrOlBVZSxmYUhhbW1lcjpJVWUsZmFBcnJvd1VwMTk6eEgsZmFTb3J0TnVtZXJpY1VwOk5VZSxmYUNoZXNzS25pZ2h0OkZVZSxmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQ6T1VlLGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTp1OCxmYUV4dGVybmFsTGluazpSVWUsZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmU6QlVlLGZhRmFjZUdyaW5CZWFtOndILGZhR3JpbkJlYW06SFVlLGZhUmVjdGFuZ2xlQWQ6TUgsZmFBZDpxVWUsZmFCb29rVGFuYWtoOnpILGZhVGFuYWtoOlZVZSxmYUhvdFR1YlBlcnNvbjprSCxmYUhvdFR1YjpqVWUsZmFGaWxlSGFsZkRhc2hlZDpVVWUsZmFPdXRkZW50OlNILGZhRGVkZW50OldVZSxmYUhhbmRQZWFjZTpHVWUsZmFIZWFkU2lkZVZpcnVzOllVZSxmYUNvbXBhc3M6WlVlLGZhUGVuTmliOlhVZSxmYVRlbnRBcnJvd3NEb3duOktVZSxmYUZvcndhcmRGYXN0OkNILGZhRmFzdEZvcndhcmQ6UVVlLGZhQ3JvcDpKVWUsZmFXaGlza2V5R2xhc3M6X0gsZmFHbGFzc1doaXNrZXk6ZVdlLGZhU3F1YXJlOnRXZSxmYUZhY2VHcmluOlRILGZhR3JpbjphV2UsZmFGaWxlQ29udHJhY3Q6aVdlLGZhQW5nbGVVcDpyV2UsZmFGYWNlU21pbGU6TEgsZmFTbWlsZTpzV2UsZmFQZXJzb25EcmVzc0J1cnN0Om5XZSxmYURpdmlkZTpvV2UsZmFDb2RlRm9yazpsV2UsZmFIb3VzZUZsYWc6Y1dlLGZhQnVpbGRpbmdDb2x1bW5zOmdsLGZhQmFuazpkV2UsZmFJbnN0aXR1dGlvbjpwV2UsZmFNdXNldW06aFdlLGZhVW5pdmVyc2l0eTp1V2UsZmFSdWc6ZldlLGZhQ29kZU1lcmdlOm1XZSxmYUhvdXNlVHN1bmFtaTpnV2UsZmFNYWduaWZ5aW5nR2xhc3NDaGFydDpiV2UsZmFVbWJyZWxsYTp2V2UsZmFIaWxsUm9ja3NsaWRlOnlXZSxmYVVzZXJTZWNyZXQ6eFdlLGZhUGFnZXI6d1dlLGZhQnJpZWZjYXNlOk1XZSxmYVRyb3dlbEJyaWNrczp6V2UsZmFTb2NrczprV2UsZmFUOlNXZSxmYU1pY3JvY2hpcDpDV2UsZmFUcnVja01lZGljYWw6JEgsZmFBbWJ1bGFuY2U6X1dlLGZhT206VFdlLGZhTW9zcXVpdG9OZXQ6TFdlLGZhUHJlc2NyaXB0aW9uQm90dGxlOiRXZSxmYVVzZXJzR2VhcjpBSCxmYVVzZXJzQ29nOkFXZSxmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbjpEV2UsZmFQYXVzZTpFV2UsZmFTdGFmZlNuYWtlOko1LGZhUm9kQXNjbGVwaXVzOlBXZSxmYVJvZFNuYWtlOklXZSxmYVN0YWZmQWVzY3VsYXBpdXM6TldlLGZhUGlnZ3lCYW5rOkZXZSxmYU1vbnVtZW50Ok9XZSxmYUFuZ2xlc1JpZ2h0OkRILGZhQW5nbGVEb3VibGVSaWdodDpSV2UsZmFEZXNrdG9wOmY4LGZhRGVza3RvcEFsdDpCV2UsZmFQbGFuZUNpcmNsZVhtYXJrOkhXZSxmYVJldHdlZXQ6cVdlLGZhVXNlckdlYXI6RUgsZmFVc2VyQ29nOlZXZSxmYUJvcmRlckFsbDpqV2UsZmFDb2luczpVV2UsZmFNYXJzU3Ryb2tlOldXZSxmYUhhbmRzaGFrZUFuZ2xlOlBILGZhSGFuZHNIZWxwaW5nOkdXZSxmYUFycm93RG93bjpZV2UsZmFMb2NhdGlvbkRvdDpJSCxmYU1hcE1hcmtlckFsdDpaV2UsZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb246WFdlLGZhQ29va2llQml0ZTpLV2UsZmFTY3Jld2RyaXZlcldyZW5jaDpOSCxmYVRvb2xzOlFXZSxmYUluZGVudDpKV2UsZmFCYXJzOkZILGZhTmF2aWNvbjplR2UsZmFIYW5kc1ByYXlpbmc6T0gsZmFQcmF5aW5nSGFuZHM6dEdlLGZhVmlydXNlczphR2UsZmFTY2hvb2xGbGFnOmlHZSxmYVRyYWRlbWFyazpyR2UsZmFGaXJlQnVybmVyOnNHZSxmYUZhY2VTbWlsZUJlYW06UkgsZmFTbWlsZUJlYW06bkdlLGZhVGVudEFycm93TGVmdFJpZ2h0Om9HZSxmYVJvdXRlOmxHZSxmYUFuZ2xlc1VwOkJILGZhQW5nbGVEb3VibGVVcDpjR2UsZmFCdWNrZXQ6ZEdlLGZhTGVzc1RoYW5FcXVhbDpwR2UsZmFGb2xkZXJDbG9zZWQ6aEdlLGZhUGVyc29uVGhyb3VnaFdpbmRvdzp1R2UsZmFTY2hvb2xMb2NrOmZHZSxmYVBlcnNvbkJ1cnN0Om1HZSxmYUxlZnRMb25nOkhILGZhTG9uZ0Fycm93QWx0TGVmdDpnR2UsZmFMb2NhdGlvbkNyb3NzaGFpcnM6cUgsZmFMb2NhdGlvbjpiR2UsZmFQZXJzb25Eb3RzRnJvbUxpbmU6VkgsZmFEaWFnbm9zZXM6dkdlLGZhR2F1Z2VTaW1wbGVIaWdoOlVtLGZhVGFjaG9tZXRlcjp5R2UsZmFUYWNob21ldGVyRmFzdDp4R2UsZmFBbmdsZXNMZWZ0OmpILGZhQW5nbGVEb3VibGVMZWZ0OndHZSxmYVVwRG93bjpVSCxmYUFycm93c0FsdFY6TUdlLGZhQmF0dGVyeUVtcHR5OldILGZhQmF0dGVyeTA6ekdlLGZhS2V5Ym9hcmQ6a0dlLGZhQ29va2llOlNHZSxmYVN0b3B3YXRjaDpDR2UsZmFFamVjdDpfR2UsZmFTYXRlbGxpdGVEaXNoOlRHZSxmYUZhY2VSb2xsaW5nRXllczpHSCxmYU1laFJvbGxpbmdFeWVzOkxHZSxmYUxpc3RDaGVjazpZSCxmYVRhc2tzOiRHZSxmYVNhY2tYbWFyazpBR2UsZmFIYXNodGFnOkRHZSxmYVRyYWluOkVHZSxmYUdhbWVwYWQ6UEdlLGZhRmlsZUV4cG9ydDpaSCxmYUFycm93UmlnaHRGcm9tRmlsZTpJR2UsZmFGYWNlR3JpbWFjZTpYSCxmYUdyaW1hY2U6TkdlLGZhVHJhaW5TdWJ3YXk6S0gsZmFTdWJ3YXk6RkdlLGZhQ2lyY2xlRG90OlFILGZhRG90Q2lyY2xlOk9HZSxmYU9iamVjdEdyb3VwOlJHZSxmYVNoaXA6QkdlLGZhQzpIR2UsZmFTcXVhcmVQaG9uZTpKSCxmYVBob25lU3F1YXJlOnFHZSxmYVJ1bGVyQ29tYmluZWQ6VkdlLGZhQXJyb3dzUm90YXRlOldtLGZhUmVmcmVzaDpqR2UsZmFTeW5jOlVHZSxmYVBlcnNvbkRyZXNzOmVxLGZhRmVtYWxlOldHZSxmYUJvb2tPcGVuOkdHZSxmYUZvbGRlclRyZWU6WUdlLGZhVmlyZ286WkdlLGZhQm94QXJjaGl2ZTp0cSxmYUFyY2hpdmU6WEdlLGZhVGVudEFycm93RG93blRvTGluZTpLR2UsZmFRcmNvZGU6UUdlLGZhRHJhZ29uOkpHZSxmYUhvdXJnbGFzc0VuZDphcSxmYUhvdXJnbGFzczM6ZVllLGZhR3JpcDp2bCxmYUdyaWRIb3Jpem9udGFsOnRZZSxmYUdyaXBIb3Jpem9udGFsOmFZZSxmYUJvcmRlclRvcExlZnQ6aXEsZmFCb3JkZXJTdHlsZTppWWUsZmFMaXN0VWw6cnEsZmFMaXN0RG90czpyWWUsZmFQZW9wbGVSb2JiZXJ5OnNZZSxmYU1vYmlsZUJ1dHRvbjpuWWUsZmFBcnJvd0Rvd25BWjpHbSxmYVNvcnRBbHBoYUFzYzpvWWUsZmFTb3J0QWxwaGFEb3duOmxZZSxmYU1vbmV5QmlsbDpjWWUsZmFDaXJjbGVNaW51czpzcSxmYU1pbnVzQ2lyY2xlOmRZZSxmYUFycm93UG9pbnRlcjpucSxmYU1vdXNlUG9pbnRlcjpwWWUsZmFTcXVhcmVTaGFyZU5vZGVzOm9xLGZhU2hhcmVBbHRTcXVhcmU6aFllLGZhVGFibGVDZWxsc0xhcmdlOmxxLGZhVGhMYXJnZTp1WWUsZmFDYXQ6ZlllLGZhQ2FsZW5kYXJXZWVrOm1ZZSxmYUNvZGVDb21wYXJlOmdZZSxmYUxlbzpiWWUsZmFSb2FkQ2lyY2xlWG1hcms6dlllLGZhUGFsbGV0OnlZZSxmYUNha2VDYW5kbGVzOlltLGZhQmlydGhkYXlDYWtlOnhZZSxmYUNha2U6d1llLGZhQnVnU2xhc2g6TVllLGZhVGFycDp6WWUsZmFEaWFncmFtUHJlZGVjZXNzb3I6a1llLGZhRmFjZUZsdXNoZWQ6Y3EsZmFGbHVzaGVkOlNZZSxmYURpYWdyYW1OZXh0OkNZZSxmYUFuY2hvckNpcmNsZVhtYXJrOl9ZZSxmYVBlcnNvbkNpcmNsZVhtYXJrOlRZZSxmYVNwYTpMWWUsZmFBcmllczokWWUsZmFCYXJzUHJvZ3Jlc3M6ZHEsZmFUYXNrc0FsdDpBWWUsZmFIZWFydENpcmNsZUNoZWNrOkRZZSxmYU1hcnNTdHJva2VSaWdodDpwcSxmYU1hcnNTdHJva2VIOkVZZSxmYVRvd2VyT2JzZXJ2YXRpb246UFllLGZhU3RlcmxpbmdTaWduOlptLGZhR2JwOklZZSxmYVBvdW5kU2lnbjpOWWUsZmFGYXVjZXREcmlwOkZZZSxmYUNpcmNsZUluZm86bTgsZmFJbmZvQ2lyY2xlOk9ZZSxmYUZlYXRoZXI6UlllLGZhQm93bFJpY2U6QlllLGZhU3RhckhhbGZTdHJva2U6aHEsZmFTdGFySGFsZkFsdDpIWWUsZmFUZW1wZXJhdHVyZUFycm93RG93bjp1cSxmYVRlbXBlcmF0dXJlRG93bjpxWWUsZmFNYXNrVmVudGlsYXRvcjpWWWUsZmFGaWxlVmlkZW86alllLGZhQXJyb3dUcmVuZERvd246VVllLGZhT2lsQ2FuOldZZSxmYVBlb3BsZUNhcnJ5Qm94OmZxLGZhUGVvcGxlQ2Fycnk6R1llLGZhQ2hhaXI6WVllLGZhV2luZDpaWWUsZmFMYXllckdyb3VwOlhZZSxmYUhlYWRTaWRlTWFzazpLWWUsZmFIYW5kczpYbSxmYVNpZ25MYW5ndWFnZTpRWWUsZmFTaWduaW5nOkpZZSxmYVRhYmxldHM6ZVplLGZhV2VpZ2h0SGFuZ2luZzp0WmUsZmFEaWNlOmFaZSxmYVNob3BTbGFzaDptcSxmYVN0b3JlQWx0U2xhc2g6aVplLGZhU29ydERvd246Z3EsZmFTb3J0RGVzYzpyWmUsZmFQZXNldGFTaWduOnNaZSxmYVRhYmxldFNjcmVlbkJ1dHRvbjpicSxmYVRhYmxldEFsdDpuWmUsZmFIYW5kSG9sZGluZ0RvbGxhcjp2cSxmYUhhbmRIb2xkaW5nVXNkOm9aZSxmYVNoaWVsZDp5cSxmYVNoaWVsZEJsYW5rOmxaZSxmYUZhY2VMYXVnaDp4cSxmYUxhdWdoOmNaZSxmYUhhbmRzSG9sZGluZzpkWmUsZmFDYXJ0U2hvcHBpbmc6d3EsZmFTaG9wcGluZ0NhcnQ6cFplLGZhT2N0YWdvbjpoWmUsZmFIYW5kUG9pbnRlcjp1WmUsZmFSZWdpc3RlcmVkOmZaZSxmYUhvdXNlU2lnbmFsOm1aZSxmYUJhbmdsYWRlc2hpVGFrYVNpZ246Z1plfX0pO3ZhciBreD1odCh1PT57InVzZSBzdHJpY3QiO3ZhciB2WmU9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLCJzdHJva2Utd2lkdGgiOjIsInN0cm9rZS1saW5lY2FwIjoicm91bmQiLCJzdHJva2UtbGluZWpvaW4iOiJyb3VuZCJ9LHlaZT0oW3QsZSxhXSk9PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aS5zZXRBdHRyaWJ1dGUocixTdHJpbmcoZVtyXSkpfSksYT8ubGVuZ3RoJiZhLmZvckVhY2gocj0+e2xldCBzPXlaZShyKTtpLmFwcGVuZENoaWxkKHMpfSksaX0seFplPSh0LGU9e30pPT57bGV0IGk9ey4uLnZaZSwuLi5lfTtyZXR1cm4geVplKFsic3ZnIixpLHRdKX0scWp0PXQ9Pntmb3IobGV0IGUgaW4gdClpZihlLnN0YXJ0c1dpdGgoImFyaWEtIil8fGU9PT0icm9sZSJ8fGU9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfSxWanQ9KC4uLnQpPT50LmZpbHRlcigoZSxhLGkpPT4hIWUmJmUudHJpbSgpIT09IiImJmkuaW5kZXhPZihlKT09PWEpLmpvaW4oIiAiKS50cmltKCksamp0PXQ9PnQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoZSxhLGkpPT5pP2kudG9VcHBlckNhc2UoKTphLnRvTG93ZXJDYXNlKCkpLFVqdD10PT57bGV0IGU9amp0KHQpO3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9LFdqdD10PT5BcnJheS5mcm9tKHQuYXR0cmlidXRlcykucmVkdWNlKChlLGEpPT4oZVthLm5hbWVdPWEudmFsdWUsZSkse30pLHdaZT10PT50eXBlb2YgdD09InN0cmluZyI/dDohdHx8IXQuY2xhc3M/IiI6dC5jbGFzcyYmdHlwZW9mIHQuY2xhc3M9PSJzdHJpbmciP3QuY2xhc3Muc3BsaXQoIiAiKTp0LmNsYXNzJiZBcnJheS5pc0FycmF5KHQuY2xhc3MpP3QuY2xhc3M6IiIsTVplPSh0LHtuYW1lQXR0cjplLGljb25zOmEsYXR0cnM6aX0pPT57bGV0IHI9dC5nZXRBdHRyaWJ1dGUoZSk7aWYocj09bnVsbClyZXR1cm47bGV0IHM9VWp0KHIpLG49YVtzXTtpZighbilyZXR1cm4gY29uc29sZS53YXJuKGAke3Qub3V0ZXJIVE1MfSBpY29uIG5hbWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgaWNvbnMgb2JqZWN0LmApO2xldCBvPVdqdCh0KSxkPXFqdChvKT97fTp7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGM9ey4uLnZaZSwiZGF0YS1sdWNpZGUiOnIsLi4uZCwuLi5pLC4uLm99LHA9d1plKG8pLGw9d1plKGkpLGY9Vmp0KCJsdWNpZGUiLGBsdWNpZGUtJHtyfWAsLi4ucCwuLi5sKTtmJiZPYmplY3QuYXNzaWduKGMse2NsYXNzOmZ9KTtsZXQgZz14WmUobixjKTtyZXR1cm4gdC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQoZyx0KX0selplPVtbInBhdGgiLHtkOiJtMTQgMTIgNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNMTggMTZWNyJ9XSxbInBhdGgiLHtkOiJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik0zLjMwNCAxM2g2LjM5MiJ9XV0sa1plPVtbInBhdGgiLHtkOiJtMTQgMTEgNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTggMTZWNyJ9XSxbInBhdGgiLHtkOiJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik0zLjMwNCAxM2g2LjM5MiJ9XV0sU1plPVtbInBhdGgiLHtkOiJtMTUgMTYgMi41MzYtNy4zMjhhMS4wMiAxLjAyIDEgMCAxIDEuOTI4IDBMMjIgMTYifV0sWyJwYXRoIix7ZDoiTTE1LjY5NyAxNGg1LjYwNiJ9XSxbInBhdGgiLHtkOiJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik0zLjMwNCAxM2g2LjM5MiJ9XV0sQ1plPVtbImNpcmNsZSIse2N4OiIxNiIsY3k6IjQiLHI6IjEifV0sWyJwYXRoIix7ZDoibTE4IDE5IDEtNy02IDEifV0sWyJwYXRoIix7ZDoibTUgOCAzLTMgNS41IDMtMi4zNiAzLjUifV0sWyJwYXRoIix7ZDoiTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2In1dLFsicGF0aCIse2Q6Ik0xMy43NiAxNy41YTUgNSAwIDAgMC02Ljg4LTYifV1dLF9aZT1bWyJwYXRoIix7ZDoiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIifV0sWyJwYXRoIix7ZDoiTTYgMTJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNiA4aDEyIn1dLFsicGF0aCIse2Q6Ik02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSJ9XV0sVFplPVtbInBhdGgiLHtkOiJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiJ9XV0sTFplPVtbInBhdGgiLHtkOiJNNSAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtMSJ9XSxbInBhdGgiLHtkOiJtMTIgMTUgNSA2SDdaIn1dXSxiZz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiOCJ9XSxbInBhdGgiLHtkOiJNNSAzIDIgNiJ9XSxbInBhdGgiLHtkOiJtMjIgNi0zLTMifV0sWyJwYXRoIix7ZDoiTTYuMzggMTguNyA0IDIxIn1dLFsicGF0aCIse2Q6Ik0xNy42NCAxOC42NyAyMCAyMSJ9XSxbInBhdGgiLHtkOiJtOSAxMyAyIDIgNC00In1dXSx2Zz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiOCJ9XSxbInBhdGgiLHtkOiJNNSAzIDIgNiJ9XSxbInBhdGgiLHtkOiJtMjIgNi0zLTMifV0sWyJwYXRoIix7ZDoiTTYuMzggMTguNyA0IDIxIn1dLFsicGF0aCIse2Q6Ik0xNy42NCAxOC42NyAyMCAyMSJ9XSxbInBhdGgiLHtkOiJNOSAxM2g2In1dXSwkWmU9W1sicGF0aCIse2Q6Ik02Ljg3IDYuODdhOCA4IDAgMSAwIDExLjI2IDExLjI2In1dLFsicGF0aCIse2Q6Ik0xOS45IDE0LjI1YTggOCAwIDAgMC05LjE1LTkuMTUifV0sWyJwYXRoIix7ZDoibTIyIDYtMy0zIn1dLFsicGF0aCIse2Q6Ik02LjI2IDE4LjY3IDQgMjEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNCA0IDIgNiJ9XV0seWc9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjgifV0sWyJwYXRoIix7ZDoiTTUgMyAyIDYifV0sWyJwYXRoIix7ZDoibTIyIDYtMy0zIn1dLFsicGF0aCIse2Q6Ik02LjM4IDE4LjcgNCAyMSJ9XSxbInBhdGgiLHtkOiJNMTcuNjQgMTguNjcgMjAgMjEifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjYifV0sWyJwYXRoIix7ZDoiTTkgMTNoNiJ9XV0sQVplPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiI4In1dLFsicGF0aCIse2Q6Ik0xMiA5djRsMiAyIn1dLFsicGF0aCIse2Q6Ik01IDMgMiA2In1dLFsicGF0aCIse2Q6Im0yMiA2LTMtMyJ9XSxbInBhdGgiLHtkOiJNNi4zOCAxOC43IDQgMjEifV0sWyJwYXRoIix7ZDoiTTE3LjY0IDE4LjY3IDIwIDIxIn1dXSxEWmU9W1sicGF0aCIse2Q6Ik0xMSAyMWMwLTIuNSAyLTIuNSAyLTUifV0sWyJwYXRoIix7ZDoiTTE2IDIxYzAtMi41IDItMi41IDItNSJ9XSxbInBhdGgiLHtkOiJtMTkgOC0uOCAzYTEuMjUgMS4yNSAwIDAgMS0xLjIgMUg3YTEuMjUgMS4yNSAwIDAgMS0xLjItMUw1IDgifV0sWyJwYXRoIix7ZDoiTTIxIDNhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTYgMjFjMC0yLjUgMi0yLjUgMi01In1dXSxFWmU9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjExIDMgMTEgMTEgMTQgOCAxNyAxMSAxNyAzIn1dXSxQWmU9W1sicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Ik0xMCAxNnY0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi00In1dLFsicGF0aCIse2Q6Ik0xMCA4VjRhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjAgMTZ2MWEyIDIgMCAwIDEtMiAyaC0yYTIgMiAwIDAgMS0yLTJ2LTEifV0sWyJwYXRoIix7ZDoiTTE0IDhWN2MwLTEuMS45LTIgMi0yaDJhMiAyIDAgMCAxIDIgMnYxIn1dXSxJWmU9W1sicGF0aCIse2Q6Ik0xMiAydjIwIn1dLFsicGF0aCIse2Q6Ik04IDEwSDRhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoNCJ9XSxbInBhdGgiLHtkOiJNMTYgMTBoNGEyIDIgMCAwIDAgMi0yVjZhMiAyIDAgMCAwLTItMmgtNCJ9XSxbInBhdGgiLHtkOiJNOCAyMEg3YTIgMiAwIDAgMS0yLTJ2LTJjMC0xLjEuOS0yIDItMmgxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNGgxYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAyaC0xIn1dXSxOWmU9W1sicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjE2Iix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiI5Iix4OiIxNCIseToiOSIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIyIDIySDIifV1dLEZaZT1bWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI5IixoZWlnaHQ6IjYiLHg6IjkiLHk6IjE0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMjJWMiJ9XV0sT1plPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiNCIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE0Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTcgMjJ2LTUifV0sWyJwYXRoIix7ZDoiTTE3IDdWMiJ9XSxbInBhdGgiLHtkOiJNNyAyMnYtMyJ9XSxbInBhdGgiLHtkOiJNNyA1VjIifV1dLFJaZT1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTQiLHg6IjQiLHk6IjUiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNCIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEwIDJ2MjAifV0sWyJwYXRoIix7ZDoiTTIwIDJ2MjAifV1dLEJaZT1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTQiLHg6IjQiLHk6IjUiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNCIseToiNyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMnYyMCJ9XSxbInBhdGgiLHtkOiJNMTQgMnYyMCJ9XV0sSFplPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiMiIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE2Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyMCJ9XV0scVplPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiMiIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjEyIix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMnYyMCJ9XV0sVlplPVtbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxNCIseDoiNiIseToiNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTAiLHg6IjE2Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAydjIwIn1dXSxqWmU9W1sicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiI5Iix5OiI3IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNCAyMlYyIn1dLFsicGF0aCIse2Q6Ik0yMCAyMlYyIn1dXSxVWmU9W1sicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjE0Iix4OiIzIix5OiI1IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIxMCIseDoiMTUiLHk6IjciLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDJ2MjAifV0sWyJwYXRoIix7ZDoiTTIxIDJ2MjAifV1dLFdaZT1bWyJyZWN0Iix7d2lkdGg6IjYiLGhlaWdodDoiMTYiLHg6IjQiLHk6IjYiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjkiLHg6IjE0Iix5OiI2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMkgyIn1dXSxHWmU9W1sicmVjdCIse3dpZHRoOiI5IixoZWlnaHQ6IjYiLHg6IjYiLHk6IjE0IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiNiIseDoiNiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgMnYyMCJ9XV0sWVplPVtbInBhdGgiLHtkOiJNMjIgMTdoLTMifV0sWyJwYXRoIix7ZDoiTTIyIDdoLTUifV0sWyJwYXRoIix7ZDoiTTUgMTdIMiJ9XSxbInBhdGgiLHtkOiJNNyA3SDIifV0sWyJyZWN0Iix7eDoiNSIseToiMTQiLHdpZHRoOiIxNCIsaGVpZ2h0OiI2IixyeDoiMiJ9XSxbInJlY3QiLHt4OiI3Iix5OiI0Iix3aWR0aDoiMTAiLGhlaWdodDoiNiIscng6IjIifV1dLFpaZT1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjYiLHg6IjUiLHk6IjE0IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiNiIseDoiNyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgMjBoMjAifV0sWyJwYXRoIix7ZDoiTTIgMTBoMjAifV1dLFhaZT1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjYiLHg6IjUiLHk6IjE0IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiNiIseDoiNyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgMTRoMjAifV0sWyJwYXRoIix7ZDoiTTIgNGgyMCJ9XV0sS1plPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiNiIseDoiNSIseToiMTYiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI2Iix4OiI3Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMCJ9XV0sUVplPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiNiIseDoiNSIseToiMTIiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI2Iix4OiI3Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAyMmgyMCJ9XV0sSlplPVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiNiIseDoiNSIseToiMTYiLHJ4OiIyIn1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI2Iix4OiI3Iix5OiI2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAyaDIwIn1dXSxlWGU9W1sicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI2Iix4OiI3Iix5OiI5IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjIgMjBIMiJ9XSxbInBhdGgiLHtkOiJNMjIgNEgyIn1dXSx0WGU9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI2Iix4OiI1Iix5OiIxNSIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjYiLHg6IjciLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDIxaDIwIn1dLFsicGF0aCIse2Q6Ik0yIDNoMjAifV1dLGFYZT1bWyJwYXRoIix7ZDoiTTEwIDEwSDYifV0sWyJwYXRoIix7ZDoiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIn1dLFsicGF0aCIse2Q6Ik0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuMjhhMSAxIDAgMCAwLS42ODQtLjk0OGwtMS45MjMtLjY0MWExIDEgMCAwIDEtLjU3OC0uNTAybC0xLjUzOS0zLjA3NkExIDEgMCAwIDAgMTYuMzgyIDhIMTQifV0sWyJwYXRoIix7ZDoiTTggOHY0In1dLFsicGF0aCIse2Q6Ik05IDE4aDYifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxOCIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiMTgiLHI6IjIifV1dLGlYZT1bWyJwYXRoIix7ZDoiTTE2IDEyaDMifV0sWyJwYXRoIix7ZDoiTTE3LjUgMTJhOCA4IDAgMCAxLTggOEE0LjUgNC41IDAgMCAxIDUgMTUuNWMwLTYgOC00IDgtOC41YTMgMyAwIDEgMC02IDBjMCAzIDIuNSA4LjUgMTIgMTMifV1dLHJYZT1bWyJwYXRoIix7ZDoiTTEwIDE3Yy01LTMtNy03LTctOWEyIDIgMCAwIDEgNCAwYzAgMi41LTUgMi41LTUgNiAwIDEuNyAxLjMgMyAzIDMgMi44IDAgNS0yLjIgNS01In1dLFsicGF0aCIse2Q6Ik0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSJ9XV0sc1hlPVtbInBhdGgiLHtkOiJNMTAgMnY1LjYzMmMwIC40MjQtLjI3Mi43OTUtLjY1My45ODJBNiA2IDAgMCAwIDYgMTRjLjAwNiA0IDMgNyA1IDgifV0sWyJwYXRoIix7ZDoiTTEwIDVIOGEyIDIgMCAwIDAgMCA0aC42OCJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1LjYzMmMwIC40MjQuMjcyLjc5NS42NTIuOTgyQTYgNiAwIDAgMSAxOCAxNGMwIDQtMyA3LTUgOCJ9XSxbInBhdGgiLHtkOiJNMTQgNWgyYTIgMiAwIDAgMSAwIDRoLS42OCJ9XSxbInBhdGgiLHtkOiJNMTggMjJINiJ9XSxbInBhdGgiLHtkOiJNOSAyaDYifV1dLG5YZT1bWyJwYXRoIix7ZDoiTTEyIDZ2MTYifV0sWyJwYXRoIix7ZDoibTE5IDEzIDItMWE5IDkgMCAwIDEtMTggMGwyIDEifV0sWyJwYXRoIix7ZDoiTTkgMTFoNiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjQiLHI6IjIifV1dLG9YZT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiJ9XSxbInBhdGgiLHtkOiJNNy41IDggMTAgOSJ9XSxbInBhdGgiLHtkOiJtMTQgOSAyLjUtMSJ9XSxbInBhdGgiLHtkOiJNOSAxMGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDEwaC4wMSJ9XV0sbFhlPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOCAxNWg4In1dLFsicGF0aCIse2Q6Ik04IDloMiJ9XSxbInBhdGgiLHtkOiJNMTQgOWgyIn1dXSxjWGU9W1sicGF0aCIse2Q6Ik0yIDEyIDcgMiJ9XSxbInBhdGgiLHtkOiJtNyAxMiA1LTEwIn1dLFsicGF0aCIse2Q6Im0xMiAxMiA1LTEwIn1dLFsicGF0aCIse2Q6Im0xNyAxMiA1LTEwIn1dLFsicGF0aCIse2Q6Ik00LjUgN2gxNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTZ2NiJ9XV0sZFhlPVtbInBhdGgiLHtkOiJNNyAxMEg2YTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWg0In1dLFsicGF0aCIse2Q6Ik03IDVhMSAxIDAgMCAxIDEtMWgxM2ExIDEgMCAwIDEgMSAxIDcgNyAwIDAgMS03IDdIOGExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJNOSAxMnY1In1dLFsicGF0aCIse2Q6Ik0xNSAxMnY1In1dLFsicGF0aCIse2Q6Ik01IDIwYTMgMyAwIDAgMSAzLTNoOGEzIDMgMCAwIDEgMyAzIDEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xIn1dXSxwWGU9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xNC4zMSA4IDUuNzQgOS45NCJ9XSxbInBhdGgiLHtkOiJNOS42OSA4aDExLjQ4In1dLFsicGF0aCIse2Q6Im03LjM4IDEyIDUuNzQtOS45NCJ9XSxbInBhdGgiLHtkOiJNOS42OSAxNiAzLjk1IDYuMDYifV0sWyJwYXRoIix7ZDoiTTE0LjMxIDE2SDIuODMifV0sWyJwYXRoIix7ZDoibTE2LjYyIDEyLTUuNzQgOS45NCJ9XV0saFhlPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik02IDhoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgOGguMDEifV1dLHVYZT1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTAgNHY0In1dLFsicGF0aCIse2Q6Ik0yIDhoMjAifV0sWyJwYXRoIix7ZDoiTTYgNHY0In1dXSxmWGU9W1sicGF0aCIse2Q6Ik0xMiA2LjUyOFYzYTEgMSAwIDAgMSAxLTFoMCJ9XSxbInBhdGgiLHtkOiJNMTguMjM3IDIxQTE1IDE1IDAgMCAwIDIyIDExYTYgNiAwIDAgMC0xMC00LjQ3MkE2IDYgMCAwIDAgMiAxMWExNS4xIDE1LjEgMCAwIDAgMy43NjMgMTAgMyAzIDAgMCAwIDMuNjQ4LjY0OCA1LjUgNS41IDAgMCAxIDUuMTc4IDBBMyAzIDAgMCAwIDE4LjIzNyAyMSJ9XV0sbVhlPVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiNSIseDoiMiIseToiMyIscng6IjEifV0sWyJwYXRoIix7ZDoiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDIifV0sWyJwYXRoIix7ZDoiTTIwIDh2MTFhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJtOSAxNSAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Ik0xMiAxMnY5In1dXSxnWGU9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI1Iix4OiIyIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4In1dLFsicGF0aCIse2Q6Im05LjUgMTcgNS01In1dLFsicGF0aCIse2Q6Im05LjUgMTIgNSA1In1dXSxiWGU9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI1Iix4OiIyIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4In1dLFsicGF0aCIse2Q6Ik0xMCAxMmg0In1dXSx2WGU9W1sicGF0aCIse2Q6Ik0xOSA5VjZhMiAyIDAgMCAwLTItMkg3YTIgMiAwIDAgMC0yIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMyAxNmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTVhMiAyIDAgMCAwLTQgMHYxLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoifV0sWyJwYXRoIix7ZDoiTTUgMTh2MiJ9XSxbInBhdGgiLHtkOiJNMTkgMTh2MiJ9XV0seVhlPVtbInBhdGgiLHtkOiJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTkgNGg2In1dXSx4WGU9W1sicGF0aCIse2Q6Ik0xNSAxMWExIDEgMCAwIDAgMSAxaDIuOTM5YTEgMSAwIDAgMSAuNzUgMS44MTFsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAxLTEuNzA3IDBMNC4zMSAxMy44MWExIDEgMCAwIDEgLjc1LTEuODExSDhhMSAxIDAgMCAwIDEtMVY1YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxeiJ9XV0sd1hlPVtbInBhdGgiLHtkOiJNMTMgOWExIDEgMCAwIDEtMS0xVjUuMDYxYTEgMSAwIDAgMC0xLjgxMS0uNzVsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAwIDAgMS43MDdsNi44MzUgNi44MzVhMSAxIDAgMCAwIDEuODExLS43NVYxNmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAwIDEtMXYtNGExIDEgMCAwIDAtMS0xeiJ9XSxbInBhdGgiLHtkOiJNMjAgOXY2In1dXSxNWGU9W1sicGF0aCIse2Q6Ik0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6In1dXSx6WGU9W1sicGF0aCIse2Q6Ik0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik00IDl2NiJ9XV0sa1hlPVtbInBhdGgiLHtkOiJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiJ9XV0sU1hlPVtbInBhdGgiLHtkOiJNOSAxM2ExIDEgMCAwIDAtMS0xSDUuMDYxYTEgMSAwIDAgMS0uNzUtMS44MTFsNi44MzYtNi44MzVhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDcgMGw2LjgzNSA2LjgzNWExIDEgMCAwIDEtLjc1IDEuODExSDE2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF6In1dLFsicGF0aCIse2Q6Ik05IDIwaDYifV1dLENYZT1bWyJwYXRoIix7ZDoiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiJ9XV0sX1hlPVtbInBhdGgiLHtkOiJtMyAxNiA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik03IDIwVjQifV0sWyJyZWN0Iix7eDoiMTUiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjYiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik0xNyAyMHYtNmgtMiJ9XSxbInBhdGgiLHtkOiJNMTUgMjBoNCJ9XV0sVFhlPVtbInBhdGgiLHtkOiJtMyAxNiA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik03IDIwVjQifV0sWyJwYXRoIix7ZDoiTTE3IDEwVjRoLTIifV0sWyJwYXRoIix7ZDoiTTE1IDEwaDQifV0sWyJyZWN0Iix7eDoiMTUiLHk6IjE0Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeToiMiJ9XV0seGc9W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMjAgOGgtNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIn1dLFsicGF0aCIse2Q6Ik0xNSAxNGg1bC01IDZoNSJ9XV0sTFhlPVtbInBhdGgiLHtkOiJNMTkgM0g1In1dLFsicGF0aCIse2Q6Ik0xMiAyMVY3In1dLFsicGF0aCIse2Q6Im02IDE1IDYgNiA2LTYifV1dLCRYZT1bWyJwYXRoIix7ZDoiTTE3IDcgNyAxNyJ9XSxbInBhdGgiLHtkOiJNMTcgMTdIN1Y3In1dXSxBWGU9W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMTEgNGg0In1dLFsicGF0aCIse2Q6Ik0xMSA4aDcifV0sWyJwYXRoIix7ZDoiTTExIDEyaDEwIn1dXSxEWGU9W1sicGF0aCIse2Q6Im03IDcgMTAgMTAifV0sWyJwYXRoIix7ZDoiTTE3IDd2MTBINyJ9XV0sRVhlPVtbInBhdGgiLHtkOiJNMTIgMnYxNCJ9XSxbInBhdGgiLHtkOiJtMTkgOS03IDctNy03In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMjEiLHI6IjEifV1dLFBYZT1bWyJwYXRoIix7ZDoiTTEyIDE3VjMifV0sWyJwYXRoIix7ZDoibTYgMTEgNiA2IDYtNiJ9XSxbInBhdGgiLHtkOiJNMTkgMjFINSJ9XV0sSVhlPVtbInBhdGgiLHtkOiJtMyAxNiA0IDQgNC00In1dLFsicGF0aCIse2Q6Ik03IDIwVjQifV0sWyJwYXRoIix7ZDoibTIxIDgtNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNMTcgNHYxNiJ9XV0sd2c9W1sicGF0aCIse2Q6Im0zIDE2IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMTEgNGgxMCJ9XSxbInBhdGgiLHtkOiJNMTEgOGg3In1dLFsicGF0aCIse2Q6Ik0xMSAxMmg0In1dXSxNZz1bWyJwYXRoIix7ZDoibTMgMTYgNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xNSA0aDVsLTUgNmg1In1dLFsicGF0aCIse2Q6Ik0xNSAyMHYtMy41YTIuNSAyLjUgMCAwIDEgNSAwVjIwIn1dLFsicGF0aCIse2Q6Ik0yMCAxOGgtNSJ9XV0sTlhlPVtbInBhdGgiLHtkOiJNMTIgNXYxNCJ9XSxbInBhdGgiLHtkOiJtMTkgMTItNyA3LTctNyJ9XV0sRlhlPVtbInBhdGgiLHtkOiJtOSA2LTYgNiA2IDYifV0sWyJwYXRoIix7ZDoiTTMgMTJoMTQifV0sWyJwYXRoIix7ZDoiTTIxIDE5VjUifV1dLE9YZT1bWyJwYXRoIix7ZDoiTTggMyA0IDdsNCA0In1dLFsicGF0aCIse2Q6Ik00IDdoMTYifV0sWyJwYXRoIix7ZDoibTE2IDIxIDQtNC00LTQifV0sWyJwYXRoIix7ZDoiTTIwIDE3SDQifV1dLFJYZT1bWyJwYXRoIix7ZDoiTTMgMTlWNSJ9XSxbInBhdGgiLHtkOiJtMTMgNi02IDYgNiA2In1dLFsicGF0aCIse2Q6Ik03IDEyaDE0In1dXSxCWGU9W1sicGF0aCIse2Q6Im0xMiAxOS03LTcgNy03In1dLFsicGF0aCIse2Q6Ik0xOSAxMkg1In1dXSxIWGU9W1sicGF0aCIse2Q6Ik0zIDV2MTQifV0sWyJwYXRoIix7ZDoiTTIxIDEySDcifV0sWyJwYXRoIix7ZDoibTE1IDE4IDYtNi02LTYifV1dLHFYZT1bWyJwYXRoIix7ZDoibTE2IDMgNCA0LTQgNCJ9XSxbInBhdGgiLHtkOiJNMjAgN0g0In1dLFsicGF0aCIse2Q6Im04IDIxLTQtNCA0LTQifV0sWyJwYXRoIix7ZDoiTTQgMTdoMTYifV1dLFZYZT1bWyJwYXRoIix7ZDoiTTE3IDEySDMifV0sWyJwYXRoIix7ZDoibTExIDE4IDYtNi02LTYifV0sWyJwYXRoIix7ZDoiTTIxIDV2MTQifV1dLGpYZT1bWyJwYXRoIix7ZDoiTTUgMTJoMTQifV0sWyJwYXRoIix7ZDoibTEyIDUgNyA3LTcgNyJ9XV0sVVhlPVtbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XSxbInJlY3QiLHt4OiIxNSIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTE3IDIwdi02aC0yIn1dLFsicGF0aCIse2Q6Ik0xNSAyMGg0In1dXSxXWGU9W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xNyAxMFY0aC0yIn1dLFsicGF0aCIse2Q6Ik0xNSAxMGg0In1dLFsicmVjdCIse3g6IjE1Iix5OiIxNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscnk6IjIifV1dLHpnPVtbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMjAgOGgtNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIn1dLFsicGF0aCIse2Q6Ik0xNSAxNGg1bC01IDZoNSJ9XV0sR1hlPVtbInBhdGgiLHtkOiJtMjEgMTYtNCA0LTQtNCJ9XSxbInBhdGgiLHtkOiJNMTcgMjBWNCJ9XSxbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XV0sWVhlPVtbInBhdGgiLHtkOiJtNSA5IDctNyA3IDcifV0sWyJwYXRoIix7ZDoiTTEyIDE2VjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIyMSIscjoiMSJ9XV0sWlhlPVtbInBhdGgiLHtkOiJtMTggOS02LTYtNiA2In1dLFsicGF0aCIse2Q6Ik0xMiAzdjE0In1dLFsicGF0aCIse2Q6Ik01IDIxaDE0In1dXSxYWGU9W1sicGF0aCIse2Q6Ik03IDE3VjdoMTAifV0sWyJwYXRoIix7ZDoiTTE3IDE3IDcgNyJ9XV0sa2c9W1sicGF0aCIse2Q6Im0zIDggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xMSAxMmg0In1dLFsicGF0aCIse2Q6Ik0xMSAxNmg3In1dLFsicGF0aCIse2Q6Ik0xMSAyMGgxMCJ9XV0sS1hlPVtbInBhdGgiLHtkOiJNNyA3aDEwdjEwIn1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDcifV1dLFFYZT1bWyJwYXRoIix7ZDoiTTUgM2gxNCJ9XSxbInBhdGgiLHtkOiJtMTggMTMtNi02LTYgNiJ9XSxbInBhdGgiLHtkOiJNMTIgN3YxNCJ9XV0sSlhlPVtbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTEgMTJoMTAifV0sWyJwYXRoIix7ZDoiTTExIDE2aDcifV0sWyJwYXRoIix7ZDoiTTExIDIwaDQifV1dLFNnPVtbInBhdGgiLHtkOiJtMyA4IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTcgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTUgNGg1bC01IDZoNSJ9XSxbInBhdGgiLHtkOiJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMThoLTUifV1dLGVLZT1bWyJwYXRoIix7ZDoibTUgMTIgNy03IDcgNyJ9XSxbInBhdGgiLHtkOiJNMTIgMTlWNSJ9XV0sdEtlPVtbInBhdGgiLHtkOiJtNCA2IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoiTTcgMTdWMyJ9XSxbInBhdGgiLHtkOiJtMTQgNiAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Ik0xNyAxN1YzIn1dLFsicGF0aCIse2Q6Ik00IDIxaDE2In1dXSxhS2U9W1sicGF0aCIse2Q6Ik0xMiA2djEyIn1dLFsicGF0aCIse2Q6Ik0xNy4xOTYgOSA2LjgwNCAxNSJ9XSxbInBhdGgiLHtkOiJtNi44MDQgOSAxMC4zOTIgNiJ9XV0saUtlPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicGF0aCIse2Q6Ik0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC00IDgifV1dLHJLZT1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XSxbInBhdGgiLHtkOiJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIn1dLFsicGF0aCIse2Q6Ik0xNS43IDE1LjdjNC41Mi00LjU0IDYuNTQtOS44NyA0LjUtMTEuOS0yLjAzLTIuMDQtNy4zNi0uMDItMTEuOSA0LjUtNC41MiA0LjU0LTYuNTQgOS44Ny00LjUgMTEuOSAyLjAzIDIuMDQgNy4zNi4wMiAxMS45LTQuNVoifV1dLHNLZT1bWyJwYXRoIix7ZDoiTTIgMTB2MyJ9XSxbInBhdGgiLHtkOiJNNiA2djExIn1dLFsicGF0aCIse2Q6Ik0xMCAzdjE4In1dLFsicGF0aCIse2Q6Ik0xNCA4djcifV0sWyJwYXRoIix7ZDoiTTE4IDV2MTMifV0sWyJwYXRoIix7ZDoiTTIyIDEwdjMifV1dLG5LZT1bWyJwYXRoIix7ZDoiTTIgMTNhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMFY0YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgMi0yIn1dXSxvS2U9W1sicGF0aCIse2Q6Im0xNS40NzcgMTIuODkgMS41MTUgOC41MjZhLjUuNSAwIDAgMS0uODEuNDdsLTMuNTgtMi42ODdhMSAxIDAgMCAwLTEuMTk3IDBsLTMuNTg2IDIuNjg2YS41LjUgMCAwIDEtLjgxLS40NjlsMS41MTQtOC41MjYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI4IixyOiI2In1dXSxsS2U9W1sicGF0aCIse2Q6Im0xNCAxMi04LjM4MSA4LjM4YTEgMSAwIDAgMS0zLjAwMS0zTDExIDkifV0sWyJwYXRoIix7ZDoiTTE1IDE1LjVhLjUuNSAwIDAgMCAuNS41QTYuNSA2LjUgMCAwIDAgMjIgOS41YS41LjUgMCAwIDAtLjUtLjVoLTEuNjcyYTIgMiAwIDAgMS0xLjQxNC0uNTg2bC01LjA2Mi01LjA2MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDkuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsNS4wNjIgNS4wNjJBMiAyIDAgMCAxIDE1IDEzLjgyOHoifV1dLENnPVtbInBhdGgiLHtkOiJNMTMuNSAxMC41IDE1IDkifV0sWyJwYXRoIix7ZDoiTTQgNHYxNWExIDEgMCAwIDAgMSAxaDE1In1dLFsicGF0aCIse2Q6Ik00LjI5MyAxOS43MDcgNiAxOCJ9XSxbInBhdGgiLHtkOiJtOSAxNSAxLjUtMS41In1dXSxjS2U9W1sicGF0aCIse2Q6Ik00IDEwYTQgNCAwIDAgMSA0LTRoOGE0IDQgMCAwIDEgNCA0djEwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiJ9XSxbInBhdGgiLHtkOiJNOCAxMGg4In1dLFsicGF0aCIse2Q6Ik04IDE4aDgifV0sWyJwYXRoIix7ZDoiTTggMjJ2LTZhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2NiJ9XSxbInBhdGgiLHtkOiJNOSA2VjRhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MiJ9XV0sZEtlPVtbInBhdGgiLHtkOiJNMTAgMTZjLjUuMyAxLjIuNSAyIC41czEuNS0uMiAyLS41In1dLFsicGF0aCIse2Q6Ik0xNSAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE5LjM4IDYuODEzQTkgOSAwIDAgMSAyMC44IDEwLjJhMiAyIDAgMCAxIDAgMy42IDkgOSAwIDAgMS0xNy42IDAgMiAyIDAgMCAxIDAtMy42QTkgOSAwIDAgMSAxMiAzYzIgMCAzLjUgMS4xIDMuNSAyLjVzLS45IDIuNS0yIDIuNWMtLjggMC0xLjUtLjQtMS41LTEifV0sWyJwYXRoIix7ZDoiTTkgMTJoLjAxIn1dXSxwS2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjgiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjE2Iix5MjoiMTYifV1dLGhLZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Ik0xMiA3djEwIn1dLFsicGF0aCIse2Q6Ik0xNS40IDEwYTQgNCAwIDEgMCAwIDQifV1dLF9nPVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoibTkgMTIgMiAyIDQtNCJ9XV0sdUtlPVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoiTTggOGg4In1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJwYXRoIix7ZDoibTEzIDE3LTUtMWgxYTQgNCAwIDAgMCAwLTgifV1dLGZLZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV1dLG1LZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsicGF0aCIse2Q6Ik03IDEyaDUifV0sWyJwYXRoIix7ZDoiTTE1IDkuNGE0IDQgMCAxIDAgMCA1LjIifV1dLGdLZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMTYiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjgiLHkyOiI4In1dXSxiS2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJtOSA4IDMgM3Y3In1dLFsicGF0aCIse2Q6Im0xMiAxMSAzLTMifV0sWyJwYXRoIix7ZDoiTTkgMTJoNiJ9XSxbInBhdGgiLHtkOiJNOSAxNmg2In1dXSx2S2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjE2Iix5MToiMTIiLHkyOiIxMiJ9XV0seUtlPVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV0sWyJwYXRoIix7ZDoibTE1IDktNiA2In1dLFsicGF0aCIse2Q6Ik05IDloLjAxIn1dLFsicGF0aCIse2Q6Ik0xNSAxNWguMDEifV1dLHhLZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiOCIseTI6IjE2In1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxMiIseTI6IjEyIn1dXSx3S2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg0In1dLFsicGF0aCIse2Q6Ik0xMCAxNlY5LjVhMi41IDIuNSAwIDAgMSA1IDAifV0sWyJwYXRoIix7ZDoiTTggMTZoNyJ9XV0sVGc9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIuMDEiLHkxOiIxNyIseTI6IjE3In1dXSxNS2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNOSAxNmg1In1dLFsicGF0aCIse2Q6Ik05IDEyaDVhMiAyIDAgMSAwIDAtNGgtM3Y5In1dXSx6S2U9W1sicGF0aCIse2Q6Ik0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiJ9XSxbInBhdGgiLHtkOiJNMTEgMTdWOGg0In1dLFsicGF0aCIse2Q6Ik0xMSAxMmgzIn1dLFsicGF0aCIse2Q6Ik05IDE2aDQifV1dLGtLZT1bWyJwYXRoIix7ZDoiTTExIDd2MTBhNSA1IDAgMCAwIDUtNSJ9XSxbInBhdGgiLHtkOiJtMTUgOC02IDMifV0sWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzYifV1dLFNLZT1bWyJwYXRoIix7ZDoiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjkiLHkxOiI5Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjkiLHkyOiIxNSJ9XV0sQ0tlPVtbInBhdGgiLHtkOiJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloifV1dLF9LZT1bWyJwYXRoIix7ZDoiTTIyIDE4SDZhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMC0yLTIifV0sWyJwYXRoIix7ZDoiTTE3IDE0VjRhMiAyIDAgMCAwLTItMmgtMWEyIDIgMCAwIDAtMiAydjEwIn1dLFsicmVjdCIse3dpZHRoOiIxMyIsaGVpZ2h0OiI4Iix4OiI4Iix5OiI2IixyeDoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjIwIixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiIyMCIscjoiMiJ9XV0sVEtlPVtbInBhdGgiLHtkOiJNMTIgMTZ2MWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAxIDIgMnYxIn1dLFsicGF0aCIse2Q6Ik0xMiA2YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE4IDhjMCA0LTMuNSA4LTYgOHMtNi00LTYtOGE2IDYgMCAwIDEgMTIgMCJ9XV0sTEtlPVtbInBhdGgiLHtkOiJNNC45MjkgNC45MjkgMTkuMDcgMTkuMDcxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSwkS2U9W1sicGF0aCIse2Q6Ik00IDEzYzMuNS0yIDgtMiAxMCAyYTUuNSA1LjUgMCAwIDEgOCA1In1dLFsicGF0aCIse2Q6Ik01LjE1IDE3Ljg5YzUuNTItMS41MiA4LjY1LTYuODkgNy0xMkMxMS41NSA0IDExLjUgMiAxMyAyYzMuMjIgMCA1IDUuNSA1IDggMCA2LjUtNC4yIDEyLTEwLjQ5IDEyQzUuMTEgMjIgMiAyMiAyIDIwYzAtMS41IDEuMTQtMS41NSAzLjE1LTIuMTFaIn1dXSxBS2U9W1sicGF0aCIse2Q6Ik0xMCAxMC4wMWguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE0LjAxaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTAuMDFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNCAxNC4wMWguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDZ2MTIifV0sWyJwYXRoIix7ZDoiTTYgNnYxMiJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXSxES2U9W1sicGF0aCIse2Q6Ik0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSJ9XSxbInBhdGgiLHtkOiJtMTYgMTkgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik02IDEyaC4wMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dXSxFS2U9W1sicGF0aCIse2Q6Ik0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOSAyMnYtNiJ9XSxbInBhdGgiLHtkOiJtMjIgMTktMy0zLTMgMyJ9XSxbInBhdGgiLHtkOiJNNiAxMmguMDEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XV0sUEtlPVtbInBhdGgiLHtkOiJNMTMgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUifV0sWyJwYXRoIix7ZDoibTE3IDE3IDUgNSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Im0yMiAxNy01IDUifV0sWyJwYXRoIix7ZDoiTTYgMTJoLjAxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dLElLZT1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjEyIix4OiIyIix5OiI2IixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dLFsicGF0aCIse2Q6Ik02IDEyaC4wMU0xOCAxMmguMDEifV1dLE5LZT1bWyJwYXRoIix7ZDoiTTMgNXYxNCJ9XSxbInBhdGgiLHtkOiJNOCA1djE0In1dLFsicGF0aCIse2Q6Ik0xMiA1djE0In1dLFsicGF0aCIse2Q6Ik0xNyA1djE0In1dLFsicGF0aCIse2Q6Ik0yMSA1djE0In1dXSxGS2U9W1sicGF0aCIse2Q6Ik0xMCAzYTQxIDQxIDAgMCAwIDAgMTgifV0sWyJwYXRoIix7ZDoiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCJ9XSxbInBhdGgiLHtkOiJNMTcgM2EyIDIgMCAwIDEgMS42OC45MiAxNS4yNSAxNS4yNSAwIDAgMSAwIDE2LjE2QTIgMiAwIDAgMSAxNyAyMUg3YTIgMiAwIDAgMS0xLjY4LS45MiAxNS4yNSAxNS4yNSAwIDAgMSAwLTE2LjE2QTIgMiAwIDAgMSA3IDN6In1dLFsicGF0aCIse2Q6Ik0zLjg0IDE3aDE2LjMyIn1dLFsicGF0aCIse2Q6Ik0zLjg0IDdoMTYuMzIifV1dLE9LZT1bWyJwYXRoIix7ZDoiTTQgMjBoMTYifV0sWyJwYXRoIix7ZDoibTYgMTYgNi0xMiA2IDEyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV1dLFJLZT1bWyJwYXRoIix7ZDoiTTEwIDQgOCA2In1dLFsicGF0aCIse2Q6Ik0xNyAxOXYyIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Ik03IDE5djIifV0sWyJwYXRoIix7ZDoiTTkgNSA3LjYyMSAzLjYyMUEyLjEyMSAyLjEyMSAwIDAgMCA0IDV2MTJhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi01In1dXSxCS2U9W1sicGF0aCIse2Q6Im0xMSA3LTMgNWg0bC0zIDUifV0sWyJwYXRoIix7ZDoiTTE0Ljg1NiA2SDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjkzNSJ9XSxbInBhdGgiLHtkOiJNMjIgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTUuMTQgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyLjkzNiJ9XV0sSEtlPVtbInBhdGgiLHtkOiJNMTAgMTB2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTB2NCJ9XSxbInBhdGgiLHtkOiJNMjIgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTYgMTB2NCJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXSxxS2U9W1sicGF0aCIse2Q6Ik0yMiAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNNiAxNHYtNCJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXSxWS2U9W1sicGF0aCIse2Q6Ik0xMCAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNMjIgMTR2LTQifV0sWyJwYXRoIix7ZDoiTTYgMTR2LTQifV0sWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE2IixoZWlnaHQ6IjEyIixyeDoiMiJ9XV0saktlPVtbInBhdGgiLHtkOiJNMTAgOXY2In1dLFsicGF0aCIse2Q6Ik0xMi41NDMgNkgxNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy42MDUifV0sWyJwYXRoIix7ZDoiTTIyIDE0di00In1dLFsicGF0aCIse2Q6Ik03IDEyaDYifV0sWyJwYXRoIix7ZDoiTTcuNjA2IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy42MDYifV1dLFVLZT1bWyJwYXRoIix7ZDoiTTEwIDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTAgN3Y2In1dLFsicGF0aCIse2Q6Ik0xNCA2aDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDE0di00In1dLFsicGF0aCIse2Q6Ik02IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMiJ9XV0sV0tlPVtbInBhdGgiLHtkOiJNIDIyIDE0IEwgMjIgMTAifV0sWyJyZWN0Iix7eDoiMiIseToiNiIsd2lkdGg6IjE2IixoZWlnaHQ6IjEyIixyeDoiMiJ9XV0sR0tlPVtbInBhdGgiLHtkOiJNNC41IDNoMTUifV0sWyJwYXRoIix7ZDoiTTYgM3YxNmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzIn1dLFsicGF0aCIse2Q6Ik02IDE0aDEyIn1dXSxZS2U9W1sicGF0aCIse2Q6Ik05IDljLS42NC42NC0xLjUyMS45NTQtMi40MDIgMS4xNjVBNiA2IDAgMCAwIDggMjJhMTMuOTYgMTMuOTYgMCAwIDAgOS45LTQuMSJ9XSxbInBhdGgiLHtkOiJNMTAuNzUgNS4wOTNBNiA2IDAgMCAxIDIyIDhjMCAyLjQxMS0uNjEgNC42OC0xLjY4MyA2LjY2In1dLFsicGF0aCIse2Q6Ik01LjM0MSAxMC42MmE0IDQgMCAwIDAgNi40ODcgMS4yMDhNMTAuNjIgNS4zNDFhNC4wMTUgNC4wMTUgMCAwIDEgMi4wMzkgMi4wNCJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dXSxaS2U9W1sicGF0aCIse2Q6Ik0xMC4xNjUgNi41OThDOS45NTQgNy40NzggOS42NCA4LjM2IDkgOWMtLjY0LjY0LTEuNTIxLjk1NC0yLjQwMiAxLjE2NUE2IDYgMCAwIDAgOCAyMmM3LjczMiAwIDE0LTYuMjY4IDE0LTE0YTYgNiAwIDAgMC0xMS44MzUtMS40MDJaIn1dLFsicGF0aCIse2Q6Ik01LjM0MSAxMC42MmE0IDQgMCAxIDAgNS4yNzktNS4yOCJ9XV0sWEtlPVtbInBhdGgiLHtkOiJNMiAyMHYtOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2OCJ9XSxbInBhdGgiLHtkOiJNNCAxMFY2YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnY0In1dLFsicGF0aCIse2Q6Ik0xMiA0djYifV0sWyJwYXRoIix7ZDoiTTIgMThoMjAifV1dLEtLZT1bWyJwYXRoIix7ZDoiTTMgMjB2LThhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjgifV0sWyJwYXRoIix7ZDoiTTUgMTBWNmEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2NCJ9XSxbInBhdGgiLHtkOiJNMyAxOGgxOCJ9XV0sUUtlPVtbInBhdGgiLHtkOiJNMiA0djE2In1dLFsicGF0aCIse2Q6Ik0yIDhoMThhMiAyIDAgMCAxIDIgMnYxMCJ9XSxbInBhdGgiLHtkOiJNMiAxN2gyMCJ9XSxbInBhdGgiLHtkOiJNNiA4djkifV1dLEpLZT1bWyJwYXRoIix7ZDoiTTE2LjQgMTMuN0E2LjUgNi41IDAgMSAwIDYuMjggNi42Yy0xLjEgMy4xMy0uNzggMy45LTMuMTggNi4wOEEzIDMgMCAwIDAgNSAxOGM0IDAgOC40LTEuOCAxMS40LTQuMyJ9XSxbInBhdGgiLHtkOiJtMTguNSA2IDIuMTkgNC41YTYuNDggNi40OCAwIDAgMS0yLjI5IDcuMkMxNS40IDIwLjIgMTEgMjIgNyAyMmEzIDMgMCAwIDEtMi42OC0xLjY2TDIuNCAxNi41In1dLFsiY2lyY2xlIix7Y3g6IjEyLjUiLGN5OiI4LjUiLHI6IjIuNSJ9XV0sZVFlPVtbInBhdGgiLHtkOiJNMTMgMTN2NSJ9XSxbInBhdGgiLHtkOiJNMTcgMTEuNDdWOCJ9XSxbInBhdGgiLHtkOiJNMTcgMTFoMWEzIDMgMCAwIDEgMi43NDUgNC4yMTEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNSA4djEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0ydi0zIn1dLFsicGF0aCIse2Q6Ik03LjUzNiA3LjUzNUM2Ljc2NiA3LjY0OSA2LjE1NCA4IDUuNSA4YTIuNSAyLjUgMCAwIDEtMS43NjgtNC4yNjgifV0sWyJwYXRoIix7ZDoiTTguNzI3IDMuMjA0QzkuMzA2IDIuNzY3IDkuODg1IDIgMTEgMmMxLjU2IDAgMiAxLjUgMyAxLjVzMS43Mi0uNSAyLjUtLjVhMSAxIDAgMSAxIDAgNWMtLjc4IDAtMS41LS41LTIuNS0uNWEzLjE0OSAzLjE0OSAwIDAgMC0uODQyLjEyIn1dLFsicGF0aCIse2Q6Ik05IDE0LjZWMTgifV1dLHRRZT1bWyJwYXRoIix7ZDoiTTE3IDExaDFhMyAzIDAgMCAxIDAgNmgtMSJ9XSxbInBhdGgiLHtkOiJNOSAxMnY2In1dLFsicGF0aCIse2Q6Ik0xMyAxMnY2In1dLFsicGF0aCIse2Q6Ik0xNCA3LjVjLTEgMC0xLjQ0LjUtMyAuNXMtMi0uNS0zLS41LTEuNzIuNS0yLjUuNWEyLjUgMi41IDAgMCAxIDAtNWMuNzggMCAxLjU3LjUgMi41LjVTOS40NCAyIDExIDJzMiAxLjUgMyAxLjUgMS43Mi0uNSAyLjUtLjVhMi41IDIuNSAwIDAgMSAwIDVjLS43OCAwLTEuNS0uNS0yLjUtLjVaIn1dLFsicGF0aCIse2Q6Ik01IDh2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWOCJ9XV0sYVFlPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0xMS42OCAyLjAwOUE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M2MtLjgyNC0uODUtMS42NzgtMS43MzEtMi4yMS0zLjM0OCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjUiLHI6IjMifV1dLGlRZT1bWyJwYXRoIix7ZDoiTTE4LjUxOCAxNy4zNDdBNyA3IDAgMCAxIDE0IDE5In1dLFsicGF0aCIse2Q6Ik0xOC44IDRBMTEgMTEgMCAwIDEgMjAgOSJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjE2IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiI3In1dLFsicmVjdCIse3g6IjQiLHk6IjE2Iix3aWR0aDoiMTAiLGhlaWdodDoiNiIscng6IjIifV1dLHJRZT1bWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCJ9XSxbInBhdGgiLHtkOiJNMTUgOGg2In1dLFsicGF0aCIse2Q6Ik0xNi4yNDMgMy43NTdBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2QTEgMSAwIDAgMCA0IDE3aDE2YTEgMSAwIDAgMCAuNzQtMS42NzNBOS40IDkuNCAwIDAgMSAxOC42NjcgMTIifV1dLHNRZT1bWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCJ9XSxbInBhdGgiLHtkOiJNMTcgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgLjI1OC0xLjc0MiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04LjY2OCAzLjAxQTYgNiAwIDAgMSAxOCA4YzAgMi42ODcuNzcgNC42NTMgMS43MDcgNi4wNSJ9XV0sblFlPVtbInBhdGgiLHtkOiJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIn1dLFsicGF0aCIse2Q6Ik0xNSA4aDYifV0sWyJwYXRoIix7ZDoiTTE4IDV2NiJ9XSxbInBhdGgiLHtkOiJNMjAuMDAyIDE0LjQ2NGE5IDkgMCAwIDAgLjczOC44NjNBMSAxIDAgMCAxIDIwIDE3SDRhMSAxIDAgMCAxLS43NC0xLjY3M0M0LjU5IDEzLjk1NiA2IDEyLjQ5OSA2IDhhNiA2IDAgMCAxIDguNzUtNS4zMzIifV1dLG9RZT1bWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCJ9XSxbInBhdGgiLHtkOiJNMjIgOGMwLTIuMy0uOC00LjMtMi02In1dLFsicGF0aCIse2Q6Ik0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2In1dLFsicGF0aCIse2Q6Ik00IDJDMi44IDMuNyAyIDUuNyAyIDgifV1dLGxRZT1bWyJwYXRoIix7ZDoiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCJ9XSxbInBhdGgiLHtkOiJNMy4yNjIgMTUuMzI2QTEgMSAwIDAgMCA0IDE3aDE2YTEgMSAwIDAgMCAuNzQtMS42NzNDMTkuNDEgMTMuOTU2IDE4IDEyLjQ5OSAxOCA4QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNiJ9XV0sTGc9W1sicmVjdCIse3dpZHRoOiIxMyIsaGVpZ2h0OiI3Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJtMjIgMTUtMy0zIDMtMyJ9XSxbInJlY3QiLHt3aWR0aDoiMTMiLGhlaWdodDoiNyIseDoiMyIseToiMTQiLHJ4OiIxIn1dXSwkZz1bWyJyZWN0Iix7d2lkdGg6IjEzIixoZWlnaHQ6IjciLHg6IjgiLHk6IjMiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Im0yIDkgMyAzLTMgMyJ9XSxbInJlY3QiLHt3aWR0aDoiMTMiLGhlaWdodDoiNyIseDoiOCIseToiMTQiLHJ4OiIxIn1dXSxjUWU9W1sicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjEzIix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJtOSAyMiAzLTMgMyAzIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjEzIix4OiIxNCIseToiMyIscng6IjEifV1dLGRRZT1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiMTMiLHg6IjMiLHk6IjgiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Im0xNSAyLTMgMy0zLTMifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiMTMiLHg6IjE0Iix5OiI4IixyeDoiMSJ9XV0scFFlPVtbInBhdGgiLHtkOiJNMTIuNDA5IDEzLjAxN0E1IDUgMCAwIDEgMjIgMTVjMCAzLjg2Ni00IDctOSA3LTQuMDc3IDAtOC4xNTMtLjgyLTEwLjM3MS0yLjQ2Mi0uNDI2LS4zMTYtLjYzMS0uODMyLS42Mi0xLjM2MkMyLjExOCAxMi43MjMgMi42MjcgMiAxMCAyYTMgMyAwIDAgMSAzIDMgMiAyIDAgMCAxLTIgMmMtMS4xMDUgMC0xLjY0LS40NDQtMi0xIn1dLFsicGF0aCIse2Q6Ik0xNSAxNGE1IDUgMCAwIDAtNy41ODQgMiJ9XSxbInBhdGgiLHtkOiJNOS45NjQgNi44MjVDOC4wMTkgNy45NzcgOS41IDEzIDggMTUifV1dLGhRZT1bWyJjaXJjbGUiLHtjeDoiMTguNSIsY3k6IjE3LjUiLHI6IjMuNSJ9XSxbImNpcmNsZSIse2N4OiI1LjUiLGN5OiIxNy41IixyOiIzLjUifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiI1IixyOiIxIn1dLFsicGF0aCIse2Q6Ik0xMiAxNy41VjE0bC0zLTMgNC0zIDIgM2gyIn1dXSx1UWU9W1sicmVjdCIse3g6IjE0Iix5OiIxNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscng6IjIifV0sWyJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiNiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMjBoNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTBoNCJ9XSxbInBhdGgiLHtkOiJNNiAxNGgydjYifV0sWyJwYXRoIix7ZDoiTTE0IDRoMnY2In1dXSxmUWU9W1sicGF0aCIse2Q6Ik0xMCAxMGg0In1dLFsicGF0aCIse2Q6Ik0xOSA3VjRhMSAxIDAgMCAwLTEtMWgtMmExIDEgMCAwIDAtMSAxdjMifV0sWyJwYXRoIix7ZDoiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoifV0sWyJwYXRoIix7ZDoiTSAyMiAxNiBMIDIgMTYifV0sWyJwYXRoIix7ZDoiTTQgMjFhMiAyIDAgMCAxLTItMnYtMy44NTFjMC0xLjM5IDItMi45NjIgMi00LjgyOVY4YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjExYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIn1dXSxtUWU9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTEuOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNNi43IDMuNGMtLjkgMi41IDAgNS4yIDIuMiA2LjdDNi41IDkgMy43IDkuNiAyIDExLjYifV0sWyJwYXRoIix7ZDoibTguOSAxMC4xIDEuNC44In1dLFsicGF0aCIse2Q6Ik0xNy4zIDMuNGMuOSAyLjUgMCA1LjItMi4yIDYuNyAyLjQtMS4yIDUuMi0uNiA2LjkgMS41In1dLFsicGF0aCIse2Q6Im0xNS4xIDEwLjEtMS40LjgifV0sWyJwYXRoIix7ZDoiTTE2LjcgMjAuOGMtMi42LS40LTQuNi0yLjYtNC43LTUuMy0uMiAyLjYtMi4xIDQuOC00LjcgNS4yIn1dLFsicGF0aCIse2Q6Ik0xMiAxMy45djEuNiJ9XSxbInBhdGgiLHtkOiJNMTMuNSA1LjRjLTEtLjItMi0uMi0zIDAifV0sWyJwYXRoIix7ZDoiTTE3IDE2LjRjLjctLjcgMS4yLTEuNiAxLjUtMi41In1dLFsicGF0aCIse2Q6Ik01LjUgMTMuOWMuMy45LjggMS44IDEuNSAyLjUifV1dLGdRZT1bWyJwYXRoIix7ZDoiTTE2IDdoLjAxIn1dLFsicGF0aCIse2Q6Ik0zLjQgMThIMTJhOCA4IDAgMCAwIDgtOFY3YTQgNCAwIDAgMC03LjI4LTIuM0wyIDIwIn1dLFsicGF0aCIse2Q6Im0yMCA3IDIgLjUtMiAuNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTh2MyJ9XSxbInBhdGgiLHtkOiJNMTQgMTcuNzVWMjEifV0sWyJwYXRoIix7ZDoiTTcgMThhNiA2IDAgMCAwIDMuODQtMTAuNjEifV1dLGJRZT1bWyJwYXRoIix7ZDoiTTEyIDE4djQifV0sWyJwYXRoIix7ZDoibTE3IDE4IDEuOTU2LTExLjQ2OCJ9XSxbInBhdGgiLHtkOiJtMyA4IDcuODItNS42MTVhMiAyIDAgMCAxIDIuMzYgMEwyMSA4In1dLFsicGF0aCIse2Q6Ik00IDE4aDE2In1dLFsicGF0aCIse2Q6Ik03IDE4IDUuMDQ0IDYuNTMyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjIifV1dLHZRZT1bWyJwYXRoIix7ZDoiTTExLjc2NyAxOS4wODljNC45MjQuODY4IDYuMTQtNi4wMjUgMS4yMTYtNi44OTRtLTEuMjE2IDYuODk0TDUuODYgMTguMDQ3bTUuOTA4IDEuMDQyLS4zNDcgMS45N20xLjU2My04Ljg2NGM0LjkyNC44NjkgNi4xNC02LjAyNSAxLjIxNS02Ljg5M20tMS4yMTUgNi44OTMtMy45NC0uNjk0bTUuMTU1LTYuMkw4LjI5IDQuMjZtNS45MDggMS4wNDIuMzQ4LTEuOTdNNy40OCAyMC4zNjRsMy4xMjYtMTcuNzI3In1dXSx5UWU9W1siY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiI3In1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiMTUiLHI6IjcifV1dLHhRZT1bWyJwYXRoIix7ZDoiTTMgM2gxOCJ9XSxbInBhdGgiLHtkOiJNMjAgN0g4In1dLFsicGF0aCIse2Q6Ik0yMCAxMUg4In1dLFsicGF0aCIse2Q6Ik0xMCAxOWgxMCJ9XSxbInBhdGgiLHtkOiJNOCAxNWgxMiJ9XSxbInBhdGgiLHtkOiJNNCAzdjE0In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIxOSIscjoiMiJ9XV0sd1FlPVtbInBhdGgiLHtkOiJtNyA3IDEwIDEwLTUgNVYybDUgNUw3IDE3In1dLFsibGluZSIse3gxOiIxOCIseDI6IjIxIix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjYiLHkxOiIxMiIseTI6IjEyIn1dXSxNUWU9W1sicGF0aCIse2Q6Ik0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIifV0sWyJyZWN0Iix7eDoiMTQiLHk6IjIiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXSx6UWU9W1sicGF0aCIse2Q6Im0xNyAxNy01IDVWMTJsLTUgNSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0xNC41IDkuNSAxNyA3bC01LTV2NC41In1dXSxrUWU9W1sicGF0aCIse2Q6Im03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTcifV0sWyJwYXRoIix7ZDoiTTIwLjgzIDE0LjgzYTQgNCAwIDAgMCAwLTUuNjYifV0sWyJwYXRoIix7ZDoiTTE4IDEyaC4wMSJ9XV0sU1FlPVtbInBhdGgiLHtkOiJNNiAxMmg5YTQgNCAwIDAgMSAwIDhIN2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMWg3YTQgNCAwIDAgMSAwIDgifV1dLENRZT1bWyJwYXRoIix7ZDoibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyJ9XV0sX1FlPVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjEzIixyOiI5In1dLFsicGF0aCIse2Q6Ik0xNC4zNSA0LjY1IDE2LjMgMi43YTIuNDEgMi40MSAwIDAgMSAzLjQgMGwxLjYgMS42YTIuNCAyLjQgMCAwIDEgMCAzLjRsLTEuOTUgMS45NSJ9XSxbInBhdGgiLHtkOiJtMjIgMi0xLjUgMS41In1dXSxUUWU9W1sicGF0aCIse2Q6Ik0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCJ9XV0sTFFlPVtbInBhdGgiLHtkOiJNMTcgMTBjLjctLjcgMS42OSAwIDIuNSAwYTIuNSAyLjUgMCAxIDAgMC01IC41LjUgMCAwIDEtLjUtLjUgMi41IDIuNSAwIDEgMC01IDBjMCAuODEuNyAxLjggMCAyLjVsLTcgN2MtLjcuNy0xLjY5IDAtMi41IDBhMi41IDIuNSAwIDAgMCAwIDVjLjI4IDAgLjUuMjIuNS41YTIuNSAyLjUgMCAxIDAgNSAwYzAtLjgxLS43LTEuOCAwLTIuNVoifV1dLCRRZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoibTggMTMgNC03IDQgNyJ9XSxbInBhdGgiLHtkOiJNOS4xIDExaDUuNyJ9XV0sQVFlPVtbInBhdGgiLHtkOiJNMTIgMTNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA2djMifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV1dLERRZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoibTkgOS41IDIgMiA0LTQifV1dLEVRZT1bWyJwYXRoIix7ZDoiTTEyIDZ2NyJ9XSxbInBhdGgiLHtkOiJNMTYgOHYzIn1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Ik04IDh2MyJ9XV0sUFFlPVtbInBhdGgiLHtkOiJNNSA3YTIgMiAwIDAgMC0yIDJ2MTEifV0sWyJwYXRoIix7ZDoiTTUuODAzIDE4SDVhMiAyIDAgMCAwIDAgNGg5LjVhLjUuNSAwIDAgMCAuNS0uNVYyMSJ9XSxbInBhdGgiLHtkOiJNOSAxNVY0YTIgMiAwIDAgMSAyLTJoOS41YS41LjUgMCAwIDEgLjUuNXYxNGEuNS41IDAgMCAxLS41LjVIMTFhMiAyIDAgMCAxIDAtNGgxMCJ9XV0sQWc9W1sicGF0aCIse2Q6Ik0xMiAxN2gxLjUifV0sWyJwYXRoIix7ZDoiTTEyIDIyaDEuNSJ9XSxbInBhdGgiLHtkOiJNMTIgMmgxLjUifV0sWyJwYXRoIix7ZDoiTTE3LjUgMjJIMTlhMSAxIDAgMCAwIDEtMSJ9XSxbInBhdGgiLHtkOiJNMTcuNSAySDE5YTEgMSAwIDAgMSAxIDF2MS41In1dLFsicGF0aCIse2Q6Ik0yMCAxNHYzaC0yLjUifV0sWyJwYXRoIix7ZDoiTTIwIDguNVYxMCJ9XSxbInBhdGgiLHtkOiJNNCAxMFY4LjUifV0sWyJwYXRoIix7ZDoiTTQgMTkuNVYxNCJ9XSxbInBhdGgiLHtkOiJNNCA0LjVBMi41IDIuNSAwIDAgMSA2LjUgMkg4In1dLFsicGF0aCIse2Q6Ik04IDIySDYuNWExIDEgMCAwIDEgMC01SDgifV1dLElRZT1bWyJwYXRoIix7ZDoiTTEyIDEzVjcifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoibTkgMTAgMyAzIDMtMyJ9XV0sTlFlPVtbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNOCAxMnYtMmE0IDQgMCAwIDEgOCAwdjIifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxMiIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTIiLHI6IjEifV1dLEZRZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoiTTguNjIgOS44QTIuMjUgMi4yNSAwIDEgMSAxMiA2LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoifV1dLE9RZT1bWyJwYXRoIix7ZDoibTIwIDEzLjctMi4xLTIuMWEyIDIgMCAwIDAtMi44IDBMOS43IDE3In1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiOCIscjoiMiJ9XV0sUlFlPVtbInBhdGgiLHtkOiJNMTMgMkg2LjVBMi41IDIuNSAwIDAgMCA0IDQuNXYxNSJ9XSxbInBhdGgiLHtkOiJNMTcgMnY2In1dLFsicGF0aCIse2Q6Ik0xNyA0aDIifV0sWyJwYXRoIix7ZDoiTTIwIDE1LjJWMjFhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjEwIixyOiIyIn1dXSxCUWU9W1sicGF0aCIse2Q6Ik0xOCA2VjRhMiAyIDAgMSAwLTQgMHYyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNXY2YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxMCJ9XSxbInJlY3QiLHt4OiIxMiIseToiNiIsd2lkdGg6IjgiLGhlaWdodDoiNSIscng6IjEifV1dLEhRZT1bWyJwYXRoIix7ZDoiTTEwIDJ2OGwzLTMgMyAzVjIifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV1dLHFRZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV0sVlFlPVtbInBhdGgiLHtkOiJNMTIgMjFWNyJ9XSxbInBhdGgiLHtkOiJtMTYgMTIgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNMjIgNlY0YTEgMSAwIDAgMC0xLTFoLTVhNCA0IDAgMCAwLTQgNCA0IDQgMCAwIDAtNC00SDNhMSAxIDAgMCAwLTEgMXYxM2ExIDEgMCAwIDAgMSAxaDZhMyAzIDAgMCAxIDMgMyAzIDMgMCAwIDEgMy0zaDZhMSAxIDAgMCAwIDEtMXYtMS4zIn1dXSxqUWU9W1sicGF0aCIse2Q6Ik0xMiA3djE0In1dLFsicGF0aCIse2Q6Ik0xNiAxMmgyIn1dLFsicGF0aCIse2Q6Ik0xNiA4aDIifV0sWyJwYXRoIix7ZDoiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiJ9XSxbInBhdGgiLHtkOiJNNiAxMmgyIn1dLFsicGF0aCIse2Q6Ik02IDhoMiJ9XV0sVVFlPVtbInBhdGgiLHtkOiJNMTIgN3YxNCJ9XSxbInBhdGgiLHtkOiJNMyAxOGExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMWg1YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxIDQtNGg1YTEgMSAwIDAgMSAxIDF2MTNhMSAxIDAgMCAxLTEgMWgtNmEzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMC0zLTN6In1dXSxXUWU9W1sicGF0aCIse2Q6Ik0xMiA3djYifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV0sR1FlPVtbInBhdGgiLHtkOiJNMTEgMjJINS41YTEgMSAwIDAgMSAwLTVoNC41MDEifV0sWyJwYXRoIix7ZDoibTIxIDIyLTEuODc5LTEuODc4In1dLFsicGF0aCIse2Q6Ik0zIDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNS41IDJIMThhMSAxIDAgMCAxIDEgMXY4In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjMifV1dLFlRZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJwYXRoIix7ZDoiTTggMTFoOCJ9XSxbInBhdGgiLHtkOiJNOCA3aDYifV1dLFpRZT1bWyJwYXRoIix7ZDoiTTEwIDEzaDQifV0sWyJwYXRoIix7ZDoiTTEyIDZ2NyJ9XSxbInBhdGgiLHtkOiJNMTYgOFY2SDh2MiJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XV0sWFFlPVtbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInBhdGgiLHtkOiJNMTggMmgxYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCJ9XSxbInBhdGgiLHtkOiJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIn1dLFsicGF0aCIse2Q6Im05IDEwIDMtMyAzIDMifV0sWyJwYXRoIix7ZDoibTkgNSAzLTMgMyAzIn1dXSxLUWU9W1sicGF0aCIse2Q6Ik0xMiAxM1Y3In1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Im05IDEwIDMtMyAzIDMifV1dLFFRZT1bWyJwYXRoIix7ZDoiTTE1IDEzYTMgMyAwIDEgMC02IDAifV0sWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI4IixyOiIyIn1dXSxKUWU9W1sicGF0aCIse2Q6Im0xNC41IDctNSA1In1dLFsicGF0aCIse2Q6Ik00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIn1dLFsicGF0aCIse2Q6Im05LjUgNyA1IDUifV1dLGVKZT1bWyJwYXRoIix7ZDoiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAifV1dLHRKZT1bWyJwYXRoIix7ZDoiTTE3IDNhMiAyIDAgMCAxIDIgMnYxNWExIDEgMCAwIDEtMS40OTYuODY4bC00LjUxMi0yLjU3OGEyIDIgMCAwIDAtMS45ODQgMGwtNC41MTIgMi41NzhBMSAxIDAgMCAxIDUgMjBWNWEyIDIgMCAwIDEgMi0yeiJ9XSxbInBhdGgiLHtkOiJtOSAxMCAyIDIgNC00In1dXSxhSmU9W1sicGF0aCIse2Q6Ik0xNSAxMEg5In1dLFsicGF0aCIse2Q6Ik0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoifV1dLGlKZT1bWyJwYXRoIix7ZDoiTTEyIDd2NiJ9XSxbInBhdGgiLHtkOiJNMTUgMTBIOSJ9XSxbInBhdGgiLHtkOiJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6In1dXSxySmU9W1sicGF0aCIse2Q6Im0xNC41IDcuNS01IDUifV0sWyJwYXRoIix7ZDoiTTE3IDNhMiAyIDAgMCAxIDIgMnYxNWExIDEgMCAwIDEtMS40OTYuODY4bC00LjUxMi0yLjU3OGEyIDIgMCAwIDAtMS45ODQgMGwtNC41MTIgMi41NzhBMSAxIDAgMCAxIDUgMjBWNWEyIDIgMCAwIDEgMi0yeiJ9XSxbInBhdGgiLHtkOiJtOS41IDcuNSA1IDUifV1dLHNKZT1bWyJwYXRoIix7ZDoiTTE3IDNhMiAyIDAgMCAxIDIgMnYxNWExIDEgMCAwIDEtMS40OTYuODY4bC00LjUxMi0yLjU3OGEyIDIgMCAwIDAtMS45ODQgMGwtNC41MTIgMi41NzhBMSAxIDAgMCAxIDUgMjBWNWEyIDIgMCAwIDEgMi0yeiJ9XV0sbkplPVtbInBhdGgiLHtkOiJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQifV0sWyJwYXRoIix7ZDoiTTggOHYxIn1dLFsicGF0aCIse2Q6Ik0xMiA4djEifV0sWyJwYXRoIix7ZDoiTTE2IDh2MSJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjkiLHJ4OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIxNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE1IixyOiIyIn1dXSxvSmU9W1sicGF0aCIse2Q6Ik0xMiA2VjJIOCJ9XSxbInBhdGgiLHtkOiJNMTUgMTF2MiJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNmEyIDIgMCAwIDEtMiAySDguODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSA0IDIwLjI4NlY4YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoiTTkgMTF2MiJ9XV0sbEplPVtbInBhdGgiLHtkOiJNMTIgOFY0SDgifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjEyIix4OiI0Iix5OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNGgyIn1dLFsicGF0aCIse2Q6Ik0xNSAxM3YyIn1dLFsicGF0aCIse2Q6Ik05IDEzdjIifV1dLGNKZT1bWyJwYXRoIix7ZDoiTTEzLjY3IDhIMThhMiAyIDAgMCAxIDIgMnY0LjMzIn1dLFsicGF0aCIse2Q6Ik0yIDE0aDIifV0sWyJwYXRoIix7ZDoiTTIwIDE0aDIifV0sWyJwYXRoIix7ZDoiTTIyIDIyIDIgMiJ9XSxbInBhdGgiLHtkOiJNOCA4SDZhMiAyIDAgMCAwLTIgMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNDE0LS41ODYifV0sWyJwYXRoIix7ZDoiTTkgMTN2MiJ9XSxbInBhdGgiLHtkOiJNOS42NyA0SDEydjIuMzMifV1dLGRKZT1bWyJwYXRoIix7ZDoiTTEwIDNhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmE2IDYgMCAwIDAgMS4yIDMuNmwuNi44QTYgNiAwIDAgMSAxNyAxM3Y4YTEgMSAwIDAgMS0xIDFIOGExIDEgMCAwIDEtMS0xdi04YTYgNiAwIDAgMSAxLjItMy42bC42LS44QTYgNiAwIDAgMCAxMCA1eiJ9XSxbInBhdGgiLHtkOiJNMTcgMTNoLTRhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoNCJ9XV0scEplPVtbInBhdGgiLHtkOiJNMTcgM2g0djQifV0sWyJwYXRoIix7ZDoiTTE4LjU3NSAxMS4wODJhMTMgMTMgMCAwIDEgMS4wNDggOS4wMjcgMS4xNyAxLjE3IDAgMCAxLTEuOTE0LjU5N0wxNCAxNyJ9XSxbInBhdGgiLHtkOiJNNyAxMCAzLjI5IDYuMjlhMS4xNyAxLjE3IDAgMCAxIC42LTEuOTEgMTMgMTMgMCAwIDEgOS4wMyAxLjA1In1dLFsicGF0aCIse2Q6Ik03IDE0YTEuNyAxLjcgMCAwIDAtMS4yMDcuNWwtMi42NDYgMi42NDZBLjUuNSAwIDAgMCAzLjUgMThINWExIDEgMCAwIDEgMSAxdjEuNWEuNS41IDAgMCAwIC44NTQuMzU0TDkuNSAxOC4yMDdBMS43IDEuNyAwIDAgMCAxMCAxN3YtMmExIDEgMCAwIDAtMS0xeiJ9XSxbInBhdGgiLHtkOiJNOS43MDcgMTQuMjkzIDIxIDMifV1dLGhKZT1bWyJwYXRoIix7ZDoiTTIxIDhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2WiJ9XSxbInBhdGgiLHtkOiJtMy4zIDcgOC43IDUgOC43LTUifV0sWyJwYXRoIix7ZDoiTTEyIDIyVjEyIn1dXSx1SmU9W1sicGF0aCIse2Q6Ik0yLjk3IDEyLjkyQTIgMiAwIDAgMCAyIDE0LjYzdjMuMjRhMiAyIDAgMCAwIC45NyAxLjcxbDMgMS44YTIgMiAwIDAgMCAyLjA2IDBMMTIgMTl2LTUuNWwtNS0zLTQuMDMgMi40MloifV0sWyJwYXRoIix7ZDoibTcgMTYuNS00Ljc0LTIuODUifV0sWyJwYXRoIix7ZDoibTcgMTYuNSA1LTMifV0sWyJwYXRoIix7ZDoiTTcgMTYuNXY1LjE3In1dLFsicGF0aCIse2Q6Ik0xMiAxMy41VjE5bDMuOTcgMi4zOGEyIDIgMCAwIDAgMi4wNiAwbDMtMS44YTIgMiAwIDAgMCAuOTctMS43MXYtMy4yNGEyIDIgMCAwIDAtLjk3LTEuNzFMMTcgMTAuNWwtNSAzWiJ9XSxbInBhdGgiLHtkOiJtMTcgMTYuNS01LTMifV0sWyJwYXRoIix7ZDoibTE3IDE2LjUgNC43NC0yLjg1In1dLFsicGF0aCIse2Q6Ik0xNyAxNi41djUuMTcifV0sWyJwYXRoIix7ZDoiTTcuOTcgNC40MkEyIDIgMCAwIDAgNyA2LjEzdjQuMzdsNSAzIDUtM1Y2LjEzYTIgMiAwIDAgMC0uOTctMS43MWwtMy0xLjhhMiAyIDAgMCAwLTIuMDYgMGwtMyAxLjhaIn1dLFsicGF0aCIse2Q6Ik0xMiA4IDcuMjYgNS4xNSJ9XSxbInBhdGgiLHtkOiJtMTIgOCA0Ljc0LTIuODUifV0sWyJwYXRoIix7ZDoiTTEyIDEzLjVWOCJ9XV0sRGc9W1sicGF0aCIse2Q6Ik04IDNIN2EyIDIgMCAwIDAtMiAydjVhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEgMiAydjVjMCAxLjEuOSAyIDIgMmgxIn1dLFsicGF0aCIse2Q6Ik0xNiAyMWgxYTIgMiAwIDAgMCAyLTJ2LTVjMC0xLjEuOS0yIDItMmEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAwLTItMmgtMSJ9XV0sZkplPVtbInBhdGgiLHtkOiJNMTYgM2gzYTEgMSAwIDAgMSAxIDF2MTZhMSAxIDAgMCAxLTEgMWgtMyJ9XSxbInBhdGgiLHtkOiJNOCAyMUg1YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDMifV1dLG1KZT1bWyJwYXRoIix7ZDoiTTEyIDVhMyAzIDAgMSAwLTUuOTk3LjEyNSA0IDQgMCAwIDAtMi41MjYgNS43NyA0IDQgMCAwIDAgLjU1NiA2LjU4OEE0IDQgMCAxIDAgMTIgMThaIn1dLFsicGF0aCIse2Q6Ik05IDEzYTQuNSA0LjUgMCAwIDAgMy00In1dLFsicGF0aCIse2Q6Ik02LjAwMyA1LjEyNUEzIDMgMCAwIDAgNi40MDEgNi41In1dLFsicGF0aCIse2Q6Ik0zLjQ3NyAxMC44OTZhNCA0IDAgMCAxIC41ODUtLjM5NiJ9XSxbInBhdGgiLHtkOiJNNiAxOGE0IDQgMCAwIDEtMS45NjctLjUxNiJ9XSxbInBhdGgiLHtkOiJNMTIgMTNoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMThoNmEyIDIgMCAwIDEgMiAydjEifV0sWyJwYXRoIix7ZDoiTTEyIDhoOCJ9XSxbInBhdGgiLHtkOiJNMTYgOFY1YTIgMiAwIDAgMSAyLTIifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxMyIscjoiLjUifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIzIixyOiIuNSJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjIxIixyOiIuNSJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjgiLHI6Ii41In1dXSxnSmU9W1sicGF0aCIse2Q6Im0xMC44NTIgMTQuNzcyLS4zODMuOTIzIn1dLFsicGF0aCIse2Q6Im0xMC44NTIgOS4yMjgtLjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xMy4xNDggMTQuNzcyLjM4Mi45MjQifV0sWyJwYXRoIix7ZDoibTEzLjUzMSA4LjMwNS0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIn1dLFsicGF0aCIse2Q6Ik0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDAgMC01LjYzLTEuNDQ2IDMgMyAwIDAgMC0uMzY4IDEuNTcxIDQgNCAwIDAgMC0yLjUyNSA1Ljc3MSJ9XSxbInBhdGgiLHtkOiJNMTcuOTk4IDUuMTI1YTQgNCAwIDAgMSAyLjUyNSA1Ljc3MSJ9XSxbInBhdGgiLHtkOiJNMTkuNTA1IDEwLjI5NGE0IDQgMCAwIDEtMS41IDcuNzA2In1dLFsicGF0aCIse2Q6Ik00LjAzMiAxNy40ODNBNCA0IDAgMCAwIDExLjQ2NCAyMGMuMTgtLjMxMS44OTItLjMxMSAxLjA3MiAwYTQgNCAwIDAgMCA3LjQzMi0yLjUxNiJ9XSxbInBhdGgiLHtkOiJNNC41IDEwLjI5MUE0IDQgMCAwIDAgNiAxOCJ9XSxbInBhdGgiLHtkOiJNNi4wMDIgNS4xMjVhMyAzIDAgMCAwIC40IDEuMzc1In1dLFsicGF0aCIse2Q6Im05LjIyOCAxMC44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMy4xNDgtLjkyMy4zODMifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XV0sYkplPVtbInBhdGgiLHtkOiJNMTIgMThWNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTNhNC4xNyA0LjE3IDAgMCAxLTMtNCA0LjE3IDQuMTcgMCAwIDEtMyA0In1dLFsicGF0aCIse2Q6Ik0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDEgMC01LjU5OCAxLjUifV0sWyJwYXRoIix7ZDoiTTE3Ljk5NyA1LjEyNWE0IDQgMCAwIDEgMi41MjYgNS43NyJ9XSxbInBhdGgiLHtkOiJNMTggMThhNCA0IDAgMCAwIDItNy40NjQifV0sWyJwYXRoIix7ZDoiTTE5Ljk2NyAxNy40ODNBNCA0IDAgMSAxIDEyIDE4YTQgNCAwIDEgMS03Ljk2Ny0uNTE3In1dLFsicGF0aCIse2Q6Ik02IDE4YTQgNCAwIDAgMS0yLTcuNDY0In1dLFsicGF0aCIse2Q6Ik02LjAwMyA1LjEyNWE0IDQgMCAwIDAtMi41MjYgNS43NyJ9XV0sdkplPVtbInBhdGgiLHtkOiJNMTYgM3YyLjEwNyJ9XSxbInBhdGgiLHtkOiJNMTcgOWMxIDMgMi41IDMuNSAzLjUgNC41QTUgNSAwIDAgMSAyMiAxN2E1IDUgMCAwIDEtMTAgMGMwLS4zIDAtLjYuMS0uOWEyIDIgMCAxIDAgMy4zLTJDMTMgMTEuNSAxNiA5IDE3IDkifV0sWyJwYXRoIix7ZDoiTTIxIDguMjc0VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjkzOCJ9XSxbInBhdGgiLHtkOiJNMyAxNWg1LjI1MyJ9XSxbInBhdGgiLHtkOiJNMyA5aDguMjI4In1dLFsicGF0aCIse2Q6Ik04IDE1djYifV0sWyJwYXRoIix7ZDoiTTggM3Y2In1dXSx5SmU9W1sicGF0aCIse2Q6Ik0xMiA5djEuMjU4In1dLFsicGF0aCIse2Q6Ik0xNiAzdjUuNDYifV0sWyJwYXRoIix7ZDoiTTIxIDkuMTE4VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg1Ljc1In1dLFsicGF0aCIse2Q6Ik0yMiAxNy41YzAgMi40OTktMS43NSAzLjc0OS0zLjgzIDQuNDc0YS41LjUgMCAwIDEtLjMzNS0uMDA1Yy0yLjA4NS0uNzItMy44MzUtMS45Ny0zLjgzNS00LjQ3VjE0YS41LjUgMCAwIDEgLjUtLjQ5OWMxIDAgMi4yNS0uNiAzLjEyLTEuMzZhLjYuNiAwIDAgMSAuNzYtLjAwMWMuODc1Ljc2NSAyLjEyIDEuMzYgMy4xMiAxLjM2YS41LjUgMCAwIDEgLjUuNXoifV0sWyJwYXRoIix7ZDoiTTMgMTVoNyJ9XSxbInBhdGgiLHtkOiJNMyA5aDEyLjE0MiJ9XSxbInBhdGgiLHtkOiJNOCAxNXY2In1dLFsicGF0aCIse2Q6Ik04IDN2NiJ9XV0seEplPVtbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIifV0sWyJwYXRoIix7ZDoiTTIyIDEzYTE4LjE1IDE4LjE1IDAgMCAxLTIwIDAifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiI2IixyeDoiMiJ9XV0sd0plPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiA5djYifV0sWyJwYXRoIix7ZDoiTTE2IDE1djYifV0sWyJwYXRoIix7ZDoiTTE2IDN2NiJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicGF0aCIse2Q6Ik04IDE1djYifV0sWyJwYXRoIix7ZDoiTTggM3Y2In1dXSxNSmU9W1sicGF0aCIse2Q6Ik0xMCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xNCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOCAyMHYyIn1dLFsicGF0aCIse2Q6Ik0yMSAyMEgzIn1dLFsicGF0aCIse2Q6Ik02IDIwdjIifV0sWyJwYXRoIix7ZDoiTTggMTZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxMiJ9XSxbInJlY3QiLHt4OiI0Iix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiMTAiLHJ4OiIyIn1dXSx6SmU9W1sicGF0aCIse2Q6Ik0xMiAxMXY0In1dLFsicGF0aCIse2Q6Ik0xNCAxM2gtNCJ9XSxbInBhdGgiLHtkOiJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xOCA2djE0In1dLFsicGF0aCIse2Q6Ik02IDZ2MTQifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiI2IixyeDoiMiJ9XV0sa0plPVtbInBhdGgiLHtkOiJNMTYgMjBWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MTYifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiI2IixyeDoiMiJ9XV0sU0plPVtbInJlY3QiLHt4OiI4Iix5OiI4Iix3aWR0aDoiOCIsaGVpZ2h0OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE0IDIwYTIgMiAwIDAgMCAyIDJoNGEyIDIgMCAwIDAgMi0ydi00YTIgMiAwIDAgMC0yLTIifV1dLENKZT1bWyJwYXRoIix7ZDoibTE2IDIyLTEtNCJ9XSxbInBhdGgiLHtkOiJNMTkgMTRhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAtMi0yaC0zYTEgMSAwIDAgMS0xLTFWNGEyIDIgMCAwIDAtNCAwdjVhMSAxIDAgMCAxLTEgMUg2YTIgMiAwIDAgMC0yIDJ2MWExIDEgMCAwIDAgMSAxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNEg1bC0xLjk3MyA2Ljc2N0ExIDEgMCAwIDAgNCAyMmgxNmExIDEgMCAwIDAgLjk3My0xLjIzM3oifV0sWyJwYXRoIix7ZDoibTggMjIgMS00In1dXSxfSmU9W1sicGF0aCIse2Q6Im0xMSAxMCAzIDMifV0sWyJwYXRoIix7ZDoiTTYuNSAyMUEzLjUgMy41IDAgMSAwIDMgMTcuNWEyLjYyIDIuNjIgMCAwIDEtLjcwOCAxLjc5MkExIDEgMCAwIDAgMyAyMXoifV0sWyJwYXRoIix7ZDoiTTkuOTY5IDE3LjAzMSAyMS4zNzggNS42MjRhMSAxIDAgMCAwLTMuMDAyLTMuMDAyTDYuOTY3IDE0LjAzMSJ9XV0sVEplPVtbInBhdGgiLHtkOiJNNy4wMDEgMTUuMDg1QTEuNSAxLjUgMCAwIDEgOSAxNi41In1dLFsiY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiI4LjUiLHI6IjMuNSJ9XSxbImNpcmNsZSIse2N4OiI3LjUiLGN5OiIxNi41IixyOiI1LjUifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiNC41IixyOiIyLjUifV1dLExKZT1bWyJwYXRoIix7ZDoiTTEyIDIwdi04In1dLFsicGF0aCIse2Q6Ik0xMi42NTYgN0gxNGE0IDQgMCAwIDEgNCA0djEuMzQ0In1dLFsicGF0aCIse2Q6Ik0xNC4xMiAzLjg4IDE2IDIifV0sWyJwYXRoIix7ZDoiTTE3LjEyMyAxNy4xMjNBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDEuNzItMy4yODcifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik0yMiAxM2gtMy4zNDQifV0sWyJwYXRoIix7ZDoiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCJ9XSxbInBhdGgiLHtkOiJNMyA1YTQgNCAwIDAgMCAzLjU1IDMuOTcifV0sWyJwYXRoIix7ZDoiTTYgMTNIMiJ9XSxbInBhdGgiLHtkOiJtOCAyIDEuODggMS44OCJ9XSxbInBhdGgiLHtkOiJNOS43MTIgNC4wNkEzIDMgMCAwIDEgMTUgNnYxLjEzIn1dXSwkSmU9W1sicGF0aCIse2Q6Ik0xMCAxOS42NTVBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDQtNGg0YTQgNCAwIDAgMSA0IDMuOTcifV0sWyJwYXRoIix7ZDoiTTE0IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoifV0sWyJwYXRoIix7ZDoiTTE0LjEyIDMuODggMTYgMiJ9XSxbInBhdGgiLHtkOiJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik0zIDIxYTQgNCAwIDAgMSAzLjgxLTQifV0sWyJwYXRoIix7ZDoiTTMgNWE0IDQgMCAwIDAgMy41NSAzLjk3In1dLFsicGF0aCIse2Q6Ik02IDEzSDIifV0sWyJwYXRoIix7ZDoibTggMiAxLjg4IDEuODgifV0sWyJwYXRoIix7ZDoiTTkgNy4xM1Y2YTMgMyAwIDEgMSA2IDB2MS4xMyJ9XV0sQUplPVtbInBhdGgiLHtkOiJNMTIgMjB2LTkifV0sWyJwYXRoIix7ZDoiTTE0IDdhNCA0IDAgMCAxIDQgNHYzYTYgNiAwIDAgMS0xMiAwdi0zYTQgNCAwIDAgMSA0LTR6In1dLFsicGF0aCIse2Q6Ik0xNC4xMiAzLjg4IDE2IDIifV0sWyJwYXRoIix7ZDoiTTIxIDIxYTQgNCAwIDAgMC0zLjgxLTQifV0sWyJwYXRoIix7ZDoiTTIxIDVhNCA0IDAgMCAxLTMuNTUgMy45NyJ9XSxbInBhdGgiLHtkOiJNMjIgMTNoLTQifV0sWyJwYXRoIix7ZDoiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCJ9XSxbInBhdGgiLHtkOiJNMyA1YTQgNCAwIDAgMCAzLjU1IDMuOTcifV0sWyJwYXRoIix7ZDoiTTYgMTNIMiJ9XSxbInBhdGgiLHtkOiJtOCAyIDEuODggMS44OCJ9XSxbInBhdGgiLHtkOiJNOSA3LjEzVjZhMyAzIDAgMSAxIDYgMHYxLjEzIn1dXSxESmU9W1sicGF0aCIse2Q6Ik0xMCAxMmg0In1dLFsicGF0aCIse2Q6Ik0xMCA4aDQifV0sWyJwYXRoIix7ZDoiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyJ9XSxbInBhdGgiLHtkOiJNNiAxMEg0YTIgMiAwIDAgMC0yIDJ2N2EyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0yIn1dLFsicGF0aCIse2Q6Ik02IDIxVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2MTYifV1dLEVKZT1bWyJwYXRoIix7ZDoiTTEyIDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTggNmguMDEifV0sWyJwYXRoIix7ZDoiTTkgMjJ2LTNhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MyJ9XSxbInJlY3QiLHt4OiI0Iix5OiIyIix3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHJ4OiIyIn1dXSxQSmU9W1sicGF0aCIse2Q6Ik00IDYgMiA3In1dLFsicGF0aCIse2Q6Ik0xMCA2aDQifV0sWyJwYXRoIix7ZDoibTIyIDctMi0xIn1dLFsicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNiIseDoiNCIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTFoMTYifV0sWyJwYXRoIix7ZDoiTTggMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTYgMTl2MiJ9XSxbInBhdGgiLHtkOiJNMTggMjF2LTIifV1dLElKZT1bWyJwYXRoIix7ZDoiTTggNnY2In1dLFsicGF0aCIse2Q6Ik0xNSA2djYifV0sWyJwYXRoIix7ZDoiTTIgMTJoMTkuNiJ9XSxbInBhdGgiLHtkOiJNMTggMThoM3MuNS0xLjcuOC0yLjhjLjEtLjQuMi0uOC4yLTEuMiAwLS40LS4xLS44LS4yLTEuMmwtMS40LTVDMjAuMSA2LjggMTkuMSA2IDE4IDZINGEyIDIgMCAwIDAtMiAydjEwaDMifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIyIn1dLFsicGF0aCIse2Q6Ik05IDE4aDUifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxOCIscjoiMiJ9XV0sTkplPVtbInBhdGgiLHtkOiJNMTAgM2guMDEifV0sWyJwYXRoIix7ZDoiTTE0IDJoLjAxIn1dLFsicGF0aCIse2Q6Im0yIDkgMjAtNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJWNi41In1dLFsicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxMCIseDoiNCIseToiMTIiLHJ4OiIzIn1dLFsicGF0aCIse2Q6Ik05IDEydjUifV0sWyJwYXRoIix7ZDoiTTE1IDEydjUifV0sWyJwYXRoIix7ZDoiTTQgMTdoMTYifV1dLEZKZT1bWyJwYXRoIix7ZDoiTTE3IDE5YTEgMSAwIDAgMS0xLTF2LTJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MmExIDEgMCAwIDEtMSAxeiJ9XSxbInBhdGgiLHtkOiJNMTcgMjF2LTIifV0sWyJwYXRoIix7ZDoiTTE5IDE0VjYuNWExIDEgMCAwIDAtNyAwdjExYTEgMSAwIDAgMS03IDBWMTAifV0sWyJwYXRoIix7ZDoiTTIxIDIxdi0yIn1dLFsicGF0aCIse2Q6Ik0zIDVWMyJ9XSxbInBhdGgiLHtkOiJNNCAxMGEyIDIgMCAwIDEtMi0yVjZhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNNyA1VjMifV1dLE9KZT1bWyJwYXRoIix7ZDoiTTE2IDEzSDMifV0sWyJwYXRoIix7ZDoiTTE2IDE3SDMifV0sWyJwYXRoIix7ZDoibTcuMiA3LjktMy4zODggMi41QTIgMiAwIDAgMCAzIDEyLjAxVjIwYTEgMSAwIDAgMCAxIDFoMTZhMSAxIDAgMCAwIDEtMXYtOC42NTRjMC0yLTIuNDQtNi4wMjYtNi40NC04LjAyNmExIDEgMCAwIDAtMS4wODIuMDU3TDEwLjQgNS42In1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiIyIn1dXSxSSmU9W1sicGF0aCIse2Q6Ik0yMCAyMXYtOGEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnY4In1dLFsicGF0aCIse2Q6Ik00IDE2cy41LTEgMi0xIDIuNSAyIDQgMiAyLjUtMiA0LTIgMi41IDIgNCAyIDItMSAyLTEifV0sWyJwYXRoIix7ZDoiTTIgMjFoMjAifV0sWyJwYXRoIix7ZDoiTTcgOHYzIn1dLFsicGF0aCIse2Q6Ik0xMiA4djMifV0sWyJwYXRoIix7ZDoiTTE3IDh2MyJ9XSxbInBhdGgiLHtkOiJNNyA0aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgNGguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDRoLjAxIn1dXSxCSmU9W1sicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIyMCIseDoiNCIseToiMiIscng6IjIifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNiIseTE6IjYiLHkyOiI2In1dLFsibGluZSIse3gxOiIxNiIseDI6IjE2Iix5MToiMTQiLHkyOiIxOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMGguMDEifV0sWyJwYXRoIix7ZDoiTTggMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTggMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGguMDEifV0sWyJwYXRoIix7ZDoiTTggMThoLjAxIn1dXSxISmU9W1sicGF0aCIse2Q6Ik0xMSAxNGgxdjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV0sWyJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0scUplPVtbInBhdGgiLHtkOiJtMTQgMTggNCA0IDQtNCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0xOCAxNHY4In1dLFsicGF0aCIse2Q6Ik0yMSAxMS4zNTRWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMzQzIn1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV0sVkplPVtbInBhdGgiLHtkOiJtMTQgMTggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0xOCAyMnYtOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTEuMzQzVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg5In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV0sakplPVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTRWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDgifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoibTE2IDIwIDIgMiA0LTQifV1dLFVKZT1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJtOSAxNiAyIDIgNC00In1dXSxXSmU9W1sicGF0aCIse2Q6Ik0xNiAxNHYyLjJsMS42IDEifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgNy41VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjUifV0sWyJwYXRoIix7ZDoiTTMgMTBoNSJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxNiIscjoiNiJ9XV0sR0plPVtbInBhdGgiLHtkOiJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE1LjIyOCAxOS4xNDgtLjkyMy4zODMifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJtMTYuNDcgMTQuMzA1LjM4Mi45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAyMC43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxNS4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxNi44NTIuOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxOS4xNDguOTI0LjM4MyJ9XSxbInBhdGgiLHtkOiJNMjEgMTAuNTkyVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXSxZSmU9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE0aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxOGguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDE4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMThoLjAxIn1dXSxaSmU9W1sicGF0aCIse2Q6Ik0zIDIwYTIgMiAwIDAgMCAyIDJoMTBhMi40IDIuNCAwIDAgMCAxLjcwNi0uNzA2bDMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMjEgMTZWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE1IDIydi01YTEgMSAwIDAgMSAxLTFoNSJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XV0sWEplPVtbInBhdGgiLHtkOiJNMTIuMTI3IDIySDVhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY1LjEyNSJ9XSxbInBhdGgiLHtkOiJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV0sS0plPVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik0xMCAxNmg0In1dXSxRSmU9W1sicGF0aCIse2Q6Ik0xNiAxOWg2In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJwYXRoIix7ZDoiTTIxIDE1VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4LjUifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoiTTggMnY0In1dXSxKSmU9W1sicGF0aCIse2Q6Ik00LjIgNC4yQTIgMiAwIDAgMCAzIDZ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMS44Mi0xLjE4In1dLFsicGF0aCIse2Q6Ik0yMSAxNS41VjZhMiAyIDAgMCAwLTItMkg5LjUifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMyAxMGg3In1dLFsicGF0aCIse2Q6Ik0yMSAxMGgtNS41In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dLGVldD1bWyJwYXRoIix7ZDoiTTggMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJNMTAgMTZoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2NCJ9XV0sdGV0PVtbInBhdGgiLHtkOiJNMTYgMTloNiJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik0yMSAxMi41OThWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSJ9XSxbInBhdGgiLHtkOiJNMyAxMGgxOCJ9XSxbInBhdGgiLHtkOiJNOCAydjQifV1dLGFldD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTcgMTRoLTYifV0sWyJwYXRoIix7ZDoiTTEzIDE4SDcifV0sWyJwYXRoIix7ZDoiTTcgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNyAxOGguMDEifV1dLGlldD1bWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTEuNzVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMjUifV0sWyJwYXRoIix7ZDoibTIyIDIyLTEuODc1LTEuODc1In1dLFsicGF0aCIse2Q6Ik0zIDEwaDE4In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXSxyZXQ9W1sicGF0aCIse2Q6Ik0xMSAxMHY0aDQifV0sWyJwYXRoIix7ZDoibTExIDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Im0yMSAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUifV0sWyJwYXRoIix7ZDoiTTIxIDIydi00aC00In1dLFsicGF0aCIse2Q6Ik0yMSA4LjVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDQuMyJ9XSxbInBhdGgiLHtkOiJNMyAxMGg0In1dLFsicGF0aCIse2Q6Ik04IDJ2NCJ9XV0sc2V0PVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTE2IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTNWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDgifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoibTE3IDIyIDUtNSJ9XSxbInBhdGgiLHtkOiJtMTcgMTcgNSA1In1dXSxuZXQ9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV0sWyJwYXRoIix7ZDoibTE0IDE0LTQgNCJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgNCA0In1dXSxvZXQ9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMTBoMTgifV1dLGNldD1bWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTUuNzI2IDIxLjAxQTIgMiAwIDAgMSAxNCAyMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJNMTggMnYyIn1dLFsicGF0aCIse2Q6Ik0yIDEzaDIifV0sWyJwYXRoIix7ZDoiTTggOGgxNCJ9XSxbInJlY3QiLHt4OiI4Iix5OiIzIix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIyIn1dXSxkZXQ9W1sicGF0aCIse2Q6Ik0xNC41NjQgMTQuNTU4YTMgMyAwIDEgMS00LjEyMi00LjEyMSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMCAyMEg0YTIgMiAwIDAgMS0yLTJWOWEyIDIgMCAwIDEgMi0yaDEuOTk3YTIgMiAwIDAgMCAuODE5LS4xNzUifV0sWyJwYXRoIix7ZDoiTTkuNjk1IDQuMDI0QTIgMiAwIDAgMSAxMC4wMDQgNGgzLjk5M2EyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY3LjM0NCJ9XV0scGV0PVtbInBhdGgiLHtkOiJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjMifV1dLGhldD1bWyJwYXRoIix7ZDoiTTUuNyAyMWEyIDIgMCAwIDEtMy41LTJsOC42LTE0YTYgNiAwIDAgMSAxMC40IDYgMiAyIDAgMSAxLTMuNDY0LTIgMiAyIDAgMSAwLTMuNDY0LTJaIn1dLFsicGF0aCIse2Q6Ik0xNy43NSA3IDE1IDIuMSJ9XSxbInBhdGgiLHtkOiJNMTAuOSA0LjggMTMgOSJ9XSxbInBhdGgiLHtkOiJtNy45IDkuNyAyIDQuNCJ9XSxbInBhdGgiLHtkOiJNNC45IDE0LjcgNyAxOC45In1dXSx1ZXQ9W1sicGF0aCIse2Q6Ik0xMCAxMHY3LjkifV0sWyJwYXRoIix7ZDoiTTExLjgwMiA2LjE0NWE1IDUgMCAwIDEgNi4wNTMgNi4wNTMifV0sWyJwYXRoIix7ZDoiTTE0IDYuMXYyLjI0MyJ9XSxbInBhdGgiLHtkOiJtMTUuNSAxNS41NzEtLjk2NC45NjRhNSA1IDAgMCAxLTcuMDcxIDAgNSA1IDAgMCAxIDAtNy4wN2wuOTY0LS45NjUifV0sWyJwYXRoIix7ZDoiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTggMTd2NGExIDEgMCAwIDEtMS43MDcuNzA3IDIuNSAyLjUgMCAwIDAtMi4xNTItLjcxNyAxIDEgMCAwIDEtMS4xMzEtMS4xMzEgMi41IDIuNSAwIDAgMC0uNzE3LTIuMTUyQTEgMSAwIDAgMSAzIDE2aDQifV1dLGZldD1bWyJwYXRoIix7ZDoiTTEwIDd2MTAuOSJ9XSxbInBhdGgiLHtkOiJNMTQgNi4xVjE3In1dLFsicGF0aCIse2Q6Ik0xNiA3VjNhMSAxIDAgMCAxIDEuNzA3LS43MDcgMi41IDIuNSAwIDAgMCAyLjE1Mi43MTcgMSAxIDAgMCAxIDEuMTMxIDEuMTMxIDIuNSAyLjUgMCAwIDAgLjcxNyAyLjE1MkExIDEgMCAwIDEgMjEgOGgtNCJ9XSxbInBhdGgiLHtkOiJNMTYuNTM2IDcuNDY1YTUgNSAwIDAgMC03LjA3MiAwbC0yIDJhNSA1IDAgMCAwIDAgNy4wNyA1IDUgMCAwIDAgNy4wNzIgMGwyLTJhNSA1IDAgMCAwIDAtNy4wNyJ9XSxbInBhdGgiLHtkOiJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCJ9XV0sbWV0PVtbInBhdGgiLHtkOiJNMTIgMjJ2LTRjMS41IDEuNSAzLjUgMyA2IDMgMC0xLjUtLjUtMy41LTItNSJ9XSxbInBhdGgiLHtkOiJNMTMuOTg4IDguMzI3QzEzLjkwMiA2LjA1NCAxMy4zNjUgMy44MiAxMiAyYTkuMyA5LjMgMCAwIDAtMS40NDUgMi45In1dLFsicGF0aCIse2Q6Ik0xNy4zNzUgMTEuNzI1QzE4Ljg4MiAxMC41MyAyMSA3Ljg0MSAyMSA2Yy0yLjMyNCAwLTUuMDggMS4yOTYtNi42NjIgMi42ODQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjEuMDI0IDE1LjM3OEExNSAxNSAwIDAgMCAyMiAxNWMtLjQyNi0xLjI3OS0yLjY3LTIuNTU3LTQuMjUtMi45MDcifV0sWyJwYXRoIix7ZDoiTTYuOTk1IDYuOTkyQzUuNzE0IDYuNCA0LjI5IDYgMyA2YzAgMiAyLjUgNSA0IDYtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIn1dXSxnZXQ9W1sicGF0aCIse2Q6Ik0xMiAyMnYtNCJ9XSxbInBhdGgiLHtkOiJNNyAxMmMtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIDEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUgMCAwIDIuNS41IDYtMS0uNS0xLjUtMy41LTMtNS0zIDEuNS0xIDQtNCA0LTYtMi41IDAtNS41IDEuNS03IDMgMC0yLjUtLjUtNS0yLTctMS41IDItMiA0LjUtMiA3LTEuNS0xLjUtNC41LTMtNy0zIDAgMiAyLjUgNSA0IDYifV1dLGJldD1bWyJwYXRoIix7ZDoiTTEwLjUgNUgxOWEyIDIgMCAwIDEgMiAydjguNSJ9XSxbInBhdGgiLHtkOiJNMTcgMTFoLS41In1dLFsicGF0aCIse2Q6Ik0xOSAxOUg1YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTcgMTFoNCJ9XSxbInBhdGgiLHtkOiJNNyAxNWgyLjUifV1dLEVnPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTQiLHg6IjMiLHk6IjUiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNyAxNWg0TTE1IDE1aDJNNyAxMWgyTTEzIDExaDQifV1dLHZldD1bWyJwYXRoIix7ZDoibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgifV0sWyJwYXRoIix7ZDoiTTcgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNyAxNGguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjgiLHg6IjMiLHk6IjEwIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNSAxOHYyIn1dLFsicGF0aCIse2Q6Ik0xOSAxOHYyIn1dXSx5ZXQ9W1sicGF0aCIse2Q6Ik0xMCAyaDQifV0sWyJwYXRoIix7ZDoibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgifV0sWyJwYXRoIix7ZDoiTTcgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNyAxNGguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjgiLHg6IjMiLHk6IjEwIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNSAxOHYyIn1dLFsicGF0aCIse2Q6Ik0xOSAxOHYyIn1dXSx4ZXQ9W1sicGF0aCIse2Q6Ik0xOSAxN2gyYy42IDAgMS0uNCAxLTF2LTNjMC0uOS0uNy0xLjctMS41LTEuOUMxOC43IDEwLjYgMTYgMTAgMTYgMTBzLTEuMy0xLjQtMi4yLTIuM2MtLjUtLjQtMS4xLS43LTEuOC0uN0g1Yy0uNiAwLTEuMS40LTEuNC45bC0xLjQgMi45QTMuNyAzLjcgMCAwIDAgMiAxMnY0YzAgLjYuNCAxIDEgMWgyIn1dLFsiY2lyY2xlIix7Y3g6IjciLGN5OiIxNyIscjoiMiJ9XSxbInBhdGgiLHtkOiJNOSAxN2g2In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTciLHI6IjIifV1dLHdldD1bWyJwYXRoIix7ZDoiTTE4IDE5VjlhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2OGEyIDIgMCAwIDAgMiAyaDIifV0sWyJwYXRoIix7ZDoiTTIgOWgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDIifV0sWyJwYXRoIix7ZDoiTTIyIDE3djFhMSAxIDAgMCAxLTEgMUgxMHYtOWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY5In1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIxOSIscjoiMiJ9XV0sTWV0PVtbInBhdGgiLHtkOiJNMTIgMTR2NCJ9XSxbInBhdGgiLHtkOiJNMTQuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4NmwzLjgyOCAzLjgyOEEyIDIgMCAwIDEgMjAgNy44MjhWMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yeiJ9XSxbInBhdGgiLHtkOiJNOCAxNGg4In1dLFsicmVjdCIse3g6IjgiLHk6IjEwIix3aWR0aDoiOCIsaGVpZ2h0OiI4IixyeDoiMSJ9XV0semV0PVtbInBhdGgiLHtkOiJNMi4yNyAyMS43czkuODctMy41IDEyLjczLTYuMzZhNC41IDQuNSAwIDAgMC02LjM2LTYuMzdDNS43NyAxMS44NCAyLjI3IDIxLjcgMi4yNyAyMS43ek04LjY0IDE0bC0yLjA1LTIuMDRNMTUuMzQgMTVsLTIuNDYtMi40NiJ9XSxbInBhdGgiLHtkOiJNMjIgOXMtMS4zMy0yLTMuNS0yQzE2Ljg2IDcgMTUgOSAxNSA5czEuMzMgMiAzLjUgMlMyMiA5IDIyIDl6In1dLFsicGF0aCIse2Q6Ik0xNSAycy0yIDEuMzMtMiAzLjVTMTUgOSAxNSA5czItMS44NCAyLTMuNUMxNyAzLjMzIDE1IDIgMTUgMnoifV1dLGtldD1bWyJwYXRoIix7ZDoiTTEwIDl2NyJ9XSxbInBhdGgiLHtkOiJNMTQgNnYxMCJ9XSxbImNpcmNsZSIse2N4OiIxNy41IixjeToiMTIuNSIscjoiMy41In1dLFsiY2lyY2xlIix7Y3g6IjYuNSIsY3k6IjEyLjUiLHI6IjMuNSJ9XV0sQ2V0PVtbInBhdGgiLHtkOiJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2In1dLFsicGF0aCIse2Q6Ik0yMiA5djcifV0sWyJwYXRoIix7ZDoiTTMuMzA0IDEzaDYuMzkyIn1dLFsiY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiIxMi41IixyOiIzLjUifV1dLF9ldD1bWyJwYXRoIix7ZDoiTTE1IDExaDQuNWExIDEgMCAwIDEgMCA1aC00YS41LjUgMCAwIDEtLjUtLjV2LTlhLjUuNSAwIDAgMSAuNS0uNWgzYTEgMSAwIDAgMSAwIDUifV0sWyJwYXRoIix7ZDoibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiJ9XSxbInBhdGgiLHtkOiJNMy4zMDQgMTNoNi4zOTIifV1dLFRldD1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE2Iix4OiIyIix5OiI0IixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiMTAiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjEwIixyOiIyIn1dLFsicGF0aCIse2Q6Im02IDIwIC43LTIuOUExLjQgMS40IDAgMCAxIDguMSAxNmg3LjhhMS40IDEuNCAwIDAgMSAxLjQgMWwuNyAzIn1dXSxMZXQ9W1sicGF0aCIse2Q6Ik0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiJ9XSxbInBhdGgiLHtkOiJNMiAxMmE5IDkgMCAwIDEgOCA4In1dLFsicGF0aCIse2Q6Ik0yIDE2YTUgNSAwIDAgMSA0IDQifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyLjAxIix5MToiMjAiLHkyOiIyMCJ9XV0sJGV0PVtbInBhdGgiLHtkOiJNMTAgNVYzIn1dLFsicGF0aCIse2Q6Ik0xNCA1VjMifV0sWyJwYXRoIix7ZDoiTTE1IDIxdi0zYTMgMyAwIDAgMC02IDB2MyJ9XSxbInBhdGgiLHtkOiJNMTggM3Y4In1dLFsicGF0aCIse2Q6Ik0xOCA1SDYifV0sWyJwYXRoIix7ZDoiTTIyIDExSDIifV0sWyJwYXRoIix7ZDoiTTIyIDl2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOSJ9XSxbInBhdGgiLHtkOiJNNiAzdjgifV1dLEFldD1bWyJwYXRoIix7ZDoiTTEyIDVjLjY3IDAgMS4zNS4wOSAyIC4yNiAxLjc4LTIgNS4wMy0yLjg0IDYuNDItMi4yNiAxLjQuNTgtLjQyIDctLjQyIDcgLjU3IDEuMDcgMSAyLjI0IDEgMy40NEMyMSAxNy45IDE2Ljk3IDIxIDEyIDIxcy05LTMtOS03LjU2YzAtMS4yNS41LTIuNCAxLTMuNDQgMCAwLTEuODktNi40Mi0uNS03IDEuMzktLjU4IDQuNzIuMjMgNi41IDIuMjNBOS4wNCA5LjA0IDAgMCAxIDEyIDVaIn1dLFsicGF0aCIse2Q6Ik04IDE0di41In1dLFsicGF0aCIse2Q6Ik0xNiAxNHYuNSJ9XSxbInBhdGgiLHtkOiJNMTEuMjUgMTYuMjVoMS41TDEyIDE3bC0uNzUtLjc1WiJ9XV0sRGV0PVtbInBhdGgiLHtkOiJNMTYuNzUgMTJoMy42MzJhMSAxIDAgMCAxIC44OTQgMS40NDdsLTIuMDM0IDQuMDY5YTEgMSAwIDAgMS0xLjcwOC4xMzRsLTIuMTI0LTIuOTcifV0sWyJwYXRoIix7ZDoiTTE3LjEwNiA5LjA1M2ExIDEgMCAwIDEgLjQ0NyAxLjM0MWwtMy4xMDYgNi4yMTFhMSAxIDAgMCAxLTEuMzQyLjQ0N0wzLjYxIDEyLjNhMi45MiAyLjkyIDAgMCAxLTEuMy0zLjkxTDMuNjkgNS42YTIuOTIgMi45MiAwIDAgMSAzLjkyLTEuM3oifV0sWyJwYXRoIix7ZDoiTTIgMTloMy43NmEyIDIgMCAwIDAgMS44LTEuMUw5IDE1In1dLFsicGF0aCIse2Q6Ik0yIDIxdi00In1dLFsicGF0aCIse2Q6Ik03IDloLjAxIn1dXSxQZz1bWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicGF0aCIse2Q6Ik03IDExLjIwN2EuNS41IDAgMCAxIC4xNDYtLjM1M2wyLTJhLjUuNSAwIDAgMSAuNzA4IDBsMy4yOTIgMy4yOTJhLjUuNSAwIDAgMCAuNzA4IDBsNC4yOTItNC4yOTJhLjUuNSAwIDAgMSAuODU0LjM1M1YxNmExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXoifV1dLElnPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJyZWN0Iix7eDoiNyIseToiMTMiLHdpZHRoOiI5IixoZWlnaHQ6IjQiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjciLHk6IjUiLHdpZHRoOiIxMiIsaGVpZ2h0OiI0IixyeDoiMSJ9XV0sRWV0PVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTcgMTFoOCJ9XSxbInBhdGgiLHtkOiJNNyAxNmgzIn1dLFsicGF0aCIse2Q6Ik03IDZoMTIifV1dLFBldD1bWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicGF0aCIse2Q6Ik03IDExaDgifV0sWyJwYXRoIix7ZDoiTTcgMTZoMTIifV0sWyJwYXRoIix7ZDoiTTcgNmgzIn1dXSxJZXQ9W1sicGF0aCIse2Q6Ik0xMSAxM3Y0In1dLFsicGF0aCIse2Q6Ik0xNSA1djQifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicmVjdCIse3g6IjciLHk6IjEzIix3aWR0aDoiOSIsaGVpZ2h0OiI0IixyeDoiMSJ9XSxbInJlY3QiLHt4OiI3Iix5OiI1Iix3aWR0aDoiMTIiLGhlaWdodDoiNCIscng6IjEifV1dLE5nPVtbInBhdGgiLHtkOiJNOSA1djQifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiNiIseDoiNyIseToiOSIscng6IjEifV0sWyJwYXRoIix7ZDoiTTkgMTV2MiJ9XSxbInBhdGgiLHtkOiJNMTcgM3YyIn1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjgiLHg6IjE1Iix5OiI1IixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNMTcgMTN2MyJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV1dLEZnPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJyZWN0Iix7eDoiMTUiLHk6IjUiLHdpZHRoOiI0IixoZWlnaHQ6IjEyIixyeDoiMSJ9XSxbInJlY3QiLHt4OiI3Iix5OiI4Iix3aWR0aDoiNCIsaGVpZ2h0OiI5IixyeDoiMSJ9XV0sTmV0PVtbInBhdGgiLHtkOiJNMTMgMTdWOSJ9XSxbInBhdGgiLHtkOiJNMTggMTd2LTMifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicGF0aCIse2Q6Ik04IDE3VjUifV1dLE9nPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTcgMTZoOCJ9XSxbInBhdGgiLHtkOiJNNyAxMWgxMiJ9XSxbInBhdGgiLHtkOiJNNyA2aDMifV1dLFJnPVtbInBhdGgiLHtkOiJNMTMgMTdWOSJ9XSxbInBhdGgiLHtkOiJNMTggMTdWNSJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTggMTd2LTMifV1dLEZldD1bWyJwYXRoIix7ZDoiTTExIDEzSDcifV0sWyJwYXRoIix7ZDoiTTE5IDloLTQifV0sWyJwYXRoIix7ZDoiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2In1dLFsicmVjdCIse3g6IjE1Iix5OiI1Iix3aWR0aDoiNCIsaGVpZ2h0OiIxMiIscng6IjEifV0sWyJyZWN0Iix7eDoiNyIseToiOCIsd2lkdGg6IjQiLGhlaWdodDoiOSIscng6IjEifV1dLEJnPVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTE4IDE3VjkifV0sWyJwYXRoIix7ZDoiTTEzIDE3VjUifV0sWyJwYXRoIix7ZDoiTTggMTd2LTMifV1dLE9ldD1bWyJwYXRoIix7ZDoiTTEwIDZoOCJ9XSxbInBhdGgiLHtkOiJNMTIgMTZoNiJ9XSxbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTggMTFoNyJ9XV0sSGc9W1sicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbInBhdGgiLHtkOiJtMTkgOS01IDUtNC00LTMgMyJ9XV0sUmV0PVtbInBhdGgiLHtkOiJtMTMuMTEgNy42NjQgMS43OCAyLjY3MiJ9XSxbInBhdGgiLHtkOiJtMTQuMTYyIDEyLjc4OC0zLjMyNCAxLjQyNCJ9XSxbInBhdGgiLHtkOiJtMjAgNC02LjA2IDEuNTE1In1dLFsicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjYiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxMiIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTUiLHI6IjIifV1dLEJldD1bWyJwYXRoIix7ZDoiTTUgMjFWMyJ9XSxbInBhdGgiLHtkOiJNMTIgMjFWOSJ9XSxbInBhdGgiLHtkOiJNMTkgMjF2LTYifV1dLHFnPVtbInBhdGgiLHtkOiJNNSAyMXYtNiJ9XSxbInBhdGgiLHtkOiJNMTIgMjFWOSJ9XSxbInBhdGgiLHtkOiJNMTkgMjFWMyJ9XV0sVmc9W1sicGF0aCIse2Q6Ik01IDIxdi02In1dLFsicGF0aCIse2Q6Ik0xMiAyMVYzIn1dLFsicGF0aCIse2Q6Ik0xOSAyMVY5In1dXSxIZXQ9W1sicGF0aCIse2Q6Ik0xMiAxNnY1In1dLFsicGF0aCIse2Q6Ik0xNiAxNHY3In1dLFsicGF0aCIse2Q6Ik0yMCAxMHYxMSJ9XSxbInBhdGgiLHtkOiJtMjIgMy04LjY0NiA4LjY0NmEuNS41IDAgMCAxLS43MDggMEw5LjM1NCA4LjM1NGEuNS41IDAgMCAwLS43MDcgMEwyIDE1In1dLFsicGF0aCIse2Q6Ik00IDE4djMifV0sWyJwYXRoIix7ZDoiTTggMTR2NyJ9XV0samc9W1sicGF0aCIse2Q6Ik02IDVoMTIifV0sWyJwYXRoIix7ZDoiTTQgMTJoMTAifV0sWyJwYXRoIix7ZDoiTTEyIDE5aDgifV1dLFVnPVtbInBhdGgiLHtkOiJNMjEgMTJjLjU1MiAwIDEuMDA1LS40NDkuOTUtLjk5OGExMCAxMCAwIDAgMC04Ljk1My04Ljk1MWMtLjU1LS4wNTUtLjk5OC4zOTgtLjk5OC45NXY4YTEgMSAwIDAgMCAxIDF6In1dLFsicGF0aCIse2Q6Ik0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODMifV1dLFdnPVtbImNpcmNsZSIse2N4OiI3LjUiLGN5OiI3LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJjaXJjbGUiLHtjeDoiMTguNSIsY3k6IjUuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiIxMS41IixjeToiMTEuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiI3LjUiLGN5OiIxNi41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsiY2lyY2xlIix7Y3g6IjE3LjUiLGN5OiIxNC41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsicGF0aCIse2Q6Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiJ9XV0scWV0PVtbInBhdGgiLHtkOiJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYifV0sWyJwYXRoIix7ZDoiTTcgMTZjLjUtMiAxLjUtNyA0LTcgMiAwIDIgMyA0IDMgMi41IDAgNC41LTUgNS03In1dXSxWZXQ9W1sicGF0aCIse2Q6Ik0yMCA0TDkgMTUifV0sWyJwYXRoIix7ZDoiTTIxIDE5TDMgMTkifV0sWyJwYXRoIix7ZDoiTTkgMTVMNCAxMCJ9XV0samV0PVtbInBhdGgiLHtkOiJNMTggNiA3IDE3bC01LTUifV0sWyJwYXRoIix7ZDoibTIyIDEwLTcuNSA3LjVMMTMgMTYifV1dLFVldD1bWyJwYXRoIix7ZDoiTTE3IDIxYTEgMSAwIDAgMCAxLTF2LTUuMzVjMC0uNDU3LjMxNi0uODQ0LjcyNy0xLjA0MWE0IDQgMCAwIDAtMi4xMzQtNy41ODkgNSA1IDAgMCAwLTkuMTg2IDAgNCA0IDAgMCAwLTIuMTM0IDcuNTg4Yy40MTEuMTk4LjcyNy41ODUuNzI3IDEuMDQxVjIwYTEgMSAwIDAgMCAxIDFaIn1dLFsicGF0aCIse2Q6Ik02IDE3aDEyIn1dXSxXZXQ9W1sicGF0aCIse2Q6Ik0yIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiJ9XSxbInBhdGgiLHtkOiJNMTIgMTdhNSA1IDAgMCAwIDEwIDBjMC0yLjc2LTIuNS01LTUtMy0yLjUtMi01IC4yNC01IDNaIn1dLFsicGF0aCIse2Q6Ik03IDE0YzMuMjItMi45MSA0LjI5LTguNzUgNS0xMiAxLjY2IDIuMzggNC45NCA5IDUgMTIifV0sWyJwYXRoIix7ZDoiTTIyIDljLTQuMjkgMC03LjE0LTIuMzMtMTAtNyA1LjcxIDAgMTAgNC42NyAxMCA3WiJ9XV0sR2V0PVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUifV1dLFlldD1bWyJwYXRoIix7ZDoiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6In1dLFsicGF0aCIse2Q6Ik0xNSAxOGMxLjUtLjYxNSAzLTIuNDYxIDMtNC45MjNDMTggOC43NjkgMTQuNSA0LjQ2MiAxMiAyIDkuNSA0LjQ2MiA2IDguNzcgNiAxMy4wNzcgNiAxNS41MzkgNy41IDE3LjM4NSA5IDE4In1dLFsicGF0aCIse2Q6Im0xNiA3LTIuNSAyLjUifV0sWyJwYXRoIix7ZDoiTTkgMmg2In1dXSxaZXQ9W1sicGF0aCIse2Q6Ik00IDIwYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINWExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEifV0sWyJwYXRoIix7ZDoiTTEwIDRoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnY2LjgxOCJ9XV0sWGV0PVtbInBhdGgiLHtkOiJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoibTE0LjUgMTAgMS41IDgifV0sWyJwYXRoIix7ZDoiTTcgMTBoMTAifV0sWyJwYXRoIix7ZDoibTggMTggMS41LTgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI2IixyOiI0In1dXSxLZXQ9W1sicGF0aCIse2Q6Ik00IDIwYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINWExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIn1dLFsicGF0aCIse2Q6Im0yMCA5LTMgOSJ9XSxbInBhdGgiLHtkOiJtNS41OTQgOC4yMDkgMi42MTUgMy40MDNhMSAxIDAgMCAwIDEuNzUtLjMyOWwxLjU2Ny01LjM0In1dLFsicGF0aCIse2Q6Ik03IDE4IDQgOSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjQiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMjAiLGN5OiI3IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiI3IixyOiIyIn1dXSxRZXQ9W1sicGF0aCIse2Q6Ik01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJNMTYuNSAxOGMxLTIgMi41LTUgMi41LTlhNyA3IDAgMCAwLTctN0g2LjYzNWExIDEgMCAwIDAtLjc2OCAxLjY0TDcgNWwtMi4zMiA1LjgwMmEyIDIgMCAwIDAgLjk1IDIuNTI2bDIuODcgMS40NTYifV0sWyJwYXRoIix7ZDoibTE1IDUgMS40MjUtMS40MjUifV0sWyJwYXRoIix7ZDoibTE3IDggMS41My0xLjUzIn1dLFsicGF0aCIse2Q6Ik05LjcxMyAxMi4xODUgNyAxOCJ9XV0sSmV0PVtbInBhdGgiLHtkOiJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoiTTEwIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQgMnYyIn1dLFsicGF0aCIse2Q6Im0xNyAxOC0xLTkifV0sWyJwYXRoIix7ZDoiTTYgMnY1YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjIifV0sWyJwYXRoIix7ZDoiTTYgNGgxMiJ9XSxbInBhdGgiLHtkOiJtNyAxOCAxLTkifV1dLGV0dD1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02In1dXSx0dHQ9W1sicGF0aCIse2Q6Im0xNyAxOC02LTYgNi02In1dLFsicGF0aCIse2Q6Ik03IDZ2MTIifV1dLGF0dD1bWyJwYXRoIix7ZDoibTcgMTggNi02LTYtNiJ9XSxbInBhdGgiLHtkOiJNMTcgNnYxMiJ9XV0saXR0PVtbInBhdGgiLHtkOiJtMTUgMTgtNi02IDYtNiJ9XV0scnR0PVtbInBhdGgiLHtkOiJtOSAxOCA2LTYtNi02In1dXSxzdHQ9W1sicGF0aCIse2Q6Im0xOCAxNS02LTYtNiA2In1dXSxudHQ9W1sicGF0aCIse2Q6Im03IDIwIDUtNSA1IDUifV0sWyJwYXRoIix7ZDoibTcgNCA1IDUgNS01In1dXSxvdHQ9W1sicGF0aCIse2Q6Im03IDYgNSA1IDUtNSJ9XSxbInBhdGgiLHtkOiJtNyAxMyA1IDUgNS01In1dXSxsdHQ9W1sicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJtMTcgNyA1IDUtNSA1In1dLFsicGF0aCIse2Q6Im03IDctNSA1IDUgNSJ9XSxbInBhdGgiLHtkOiJNOCAxMmguMDEifV1dLGN0dD1bWyJwYXRoIix7ZDoibTkgNy01IDUgNSA1In1dLFsicGF0aCIse2Q6Im0xNSA3IDUgNS01IDUifV1dLGR0dD1bWyJwYXRoIix7ZDoibTExIDE3LTUtNSA1LTUifV0sWyJwYXRoIix7ZDoibTE4IDE3LTUtNSA1LTUifV1dLHB0dD1bWyJwYXRoIix7ZDoibTIwIDE3LTUtNSA1LTUifV0sWyJwYXRoIix7ZDoibTQgMTcgNS01LTUtNSJ9XV0saHR0PVtbInBhdGgiLHtkOiJtNiAxNyA1LTUtNS01In1dLFsicGF0aCIse2Q6Im0xMyAxNyA1LTUtNS01In1dXSx1dHQ9W1sicGF0aCIse2Q6Im0xNyAxMS01LTUtNSA1In1dLFsicGF0aCIse2Q6Im0xNyAxOC01LTUtNSA1In1dXSxHZz1bWyJwYXRoIix7ZDoiTTEwLjg4IDIxLjk0IDE1LjQ2IDE0In1dLFsicGF0aCIse2Q6Ik0yMS4xNyA4SDEyIn1dLFsicGF0aCIse2Q6Ik0zLjk1IDYuMDYgOC41NCAxNCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dXSxmdHQ9W1sicGF0aCIse2Q6Im03IDE1IDUgNSA1LTUifV0sWyJwYXRoIix7ZDoibTcgOSA1LTUgNSA1In1dXSxtdHQ9W1sicGF0aCIse2Q6Ik0xMiAxMkgzYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDEzIn1dLFsicGF0aCIse2Q6Ik0xOCA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLS41Ljg2NiJ9XSxbInBhdGgiLHtkOiJNMjIgOGMwLTIuNS0yLTIuNS0yLTUifV0sWyJwYXRoIix7ZDoiTTcgMTJ2NCJ9XV0sZ3R0PVtbInBhdGgiLHtkOiJNMTAgOWg0In1dLFsicGF0aCIse2Q6Ik0xMiA3djUifV0sWyJwYXRoIix7ZDoiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyJ9XSxbInBhdGgiLHtkOiJtMTggOSAzLjUyIDIuMTQ3YTEgMSAwIDAgMSAuNDguODU0VjE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi02Ljk5OWExIDEgMCAwIDEgLjQ4LS44NTRMNiA5In1dLFsicGF0aCIse2Q6Ik02IDIxVjdhMSAxIDAgMCAxIC4zNzYtLjc4Mmw1LTMuOTk5YTEgMSAwIDAgMSAxLjI0OS4wMDFsNSA0QTEgMSAwIDAgMSAxOCA3djE0In1dXSxidHQ9W1sicGF0aCIse2Q6Ik0xNyAxMkgzYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDE0In1dLFsicGF0aCIse2Q6Ik0xOCA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTZhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIn1dLFsicGF0aCIse2Q6Ik0yMiA4YzAtMi41LTItMi41LTItNSJ9XSxbInBhdGgiLHtkOiJNNyAxMnY0In1dXSxZZz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiI4Iix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIuMDEiLHkxOiIxNiIseTI6IjE2In1dXSxaZz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTEyIDh2OCJ9XSxbInBhdGgiLHtkOiJtOCAxMiA0IDQgNC00In1dXSxYZz1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTEyIDgtNCA0IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJIOCJ9XV0sS2c9W1sicGF0aCIse2Q6Ik0yIDEyYTEwIDEwIDAgMSAxIDEwIDEwIn1dLFsicGF0aCIse2Q6Im0yIDIyIDEwLTEwIn1dLFsicGF0aCIse2Q6Ik04IDIySDJ2LTYifV1dLFFnPVtbInBhdGgiLHtkOiJNMTIgMjJhMTAgMTAgMCAxIDEgMTAtMTAifV0sWyJwYXRoIix7ZDoiTTIyIDIyIDEyIDEyIn1dLFsicGF0aCIse2Q6Ik0yMiAxNnY2aC02In1dXSxKZz1bWyJwYXRoIix7ZDoiTTIgOFYyaDYifV0sWyJwYXRoIix7ZDoibTIgMiAxMCAxMCJ9XSxbInBhdGgiLHtkOiJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIn1dXSxlYj1bWyJwYXRoIix7ZDoiTTIyIDEyQTEwIDEwIDAgMSAxIDEyIDIifV0sWyJwYXRoIix7ZDoiTTIyIDIgMTIgMTIifV0sWyJwYXRoIix7ZDoiTTE2IDJoNnY2In1dXSx0Yj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTEyIDE2IDQtNC00LTQifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XV0sYWI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xNiAxMi00LTQtNCA0In1dLFsicGF0aCIse2Q6Ik0xMiAxNlY4In1dXSxpYj1bWyJwYXRoIix7ZDoiTTIxLjgwMSAxMEExMCAxMCAwIDEgMSAxNyAzLjMzNSJ9XSxbInBhdGgiLHtkOiJtOSAxMSAzIDNMMjIgNCJ9XV0scmI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQifV1dLHNiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJtMTYgMTAtNCA0LTQtNCJ9XV0sbmI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xNCAxNi00LTQgNC00In1dXSxvYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoibTEwIDggNCA0LTQgNCJ9XV0sbGI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im04IDE0IDQtNCA0IDQifV1dLHZ0dD1bWyJwYXRoIix7ZDoiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAifV0sWyJwYXRoIix7ZDoiTTEzLjkgMjEuODE4YTEwIDEwIDAgMCAxLTMuOCAwIn1dLFsicGF0aCIse2Q6Ik0xNy42MDkgMy43MjFhMTAgMTAgMCAwIDEgMi42OSAyLjcifV0sWyJwYXRoIix7ZDoiTTIuMTgyIDEzLjlhMTAgMTAgMCAwIDEgMC0zLjgifV0sWyJwYXRoIix7ZDoiTTIwLjI3OSAxNy42MDlhMTAgMTAgMCAwIDEtMi43IDIuNjkifV0sWyJwYXRoIix7ZDoiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44In1dLFsicGF0aCIse2Q6Ik0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSJ9XSxbInBhdGgiLHtkOiJNNi4zOTEgMjAuMjc5YTEwIDEwIDAgMCAxLTIuNjktMi43In1dXSxjYj1bWyJsaW5lIix7eDE6IjgiLHgyOiIxNiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIxNiIseTI6IjE2In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiOCIseTI6IjgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHl0dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XV0seHR0PVtbInBhdGgiLHtkOiJNMTAuMSAyLjE4YTkuOTMgOS45MyAwIDAgMSAzLjggMCJ9XSxbInBhdGgiLHtkOiJNMTcuNiAzLjcxYTkuOTUgOS45NSAwIDAgMSAyLjY5IDIuNyJ9XSxbInBhdGgiLHtkOiJNMjEuODIgMTAuMWE5LjkzIDkuOTMgMCAwIDEgMCAzLjgifV0sWyJwYXRoIix7ZDoiTTIwLjI5IDE3LjZhOS45NSA5Ljk1IDAgMCAxLTIuNyAyLjY5In1dLFsicGF0aCIse2Q6Ik0xMy45IDIxLjgyYTkuOTQgOS45NCAwIDAgMS0zLjggMCJ9XSxbInBhdGgiLHtkOiJNNi40IDIwLjI5YTkuOTUgOS45NSAwIDAgMS0yLjY5LTIuNyJ9XSxbInBhdGgiLHtkOiJNMi4xOCAxMy45YTkuOTMgOS45MyAwIDAgMSAwLTMuOCJ9XSxbInBhdGgiLHtkOiJNMy43MSA2LjRhOS45NSA5Ljk1IDAgMCAxIDIuNy0yLjY5In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV1dLHd0dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XV0sTXR0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTcgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTcgMTJoLjAxIn1dXSx6dHQ9W1sicGF0aCIse2Q6Ik03IDEwaDEwIn1dLFsicGF0aCIse2Q6Ik03IDE0aDEwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSxrdHQ9W1sicGF0aCIse2Q6Ik0xMiAyYTEwIDEwIDAgMCAxIDcuMzggMTYuNzUifV0sWyJwYXRoIix7ZDoibTE2IDEyLTQtNC00IDQifV0sWyJwYXRoIix7ZDoiTTEyIDE2VjgifV0sWyJwYXRoIix7ZDoiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIn1dLFsicGF0aCIse2Q6Ik0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40In1dLFsicGF0aCIse2Q6Ik00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTcifV0sWyJwYXRoIix7ZDoiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCJ9XV0sU3R0PVtbInBhdGgiLHtkOiJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1In1dLFsicGF0aCIse2Q6Ik0xMiA4djgifV0sWyJwYXRoIix7ZDoiTTE2IDEySDgifV0sWyJwYXRoIix7ZDoiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIn1dLFsicGF0aCIse2Q6Ik0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40In1dLFsicGF0aCIse2Q6Ik00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTcifV0sWyJwYXRoIix7ZDoiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCJ9XV0sZGI9W1sicGF0aCIse2Q6Ik0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEzLjQgMTAuNiAxOSA1In1dXSxwYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XV0saGI9W1sicGF0aCIse2Q6Ik0xMi42NTYgN0gxM2EzIDMgMCAwIDEgMi45ODQgMy4zMDcifV0sWyJwYXRoIix7ZDoiTTEzIDEzSDkifV0sWyJwYXRoIix7ZDoiTTE5LjA3MSAxOS4wNzFBMSAxIDAgMCAxIDQuOTMgNC45MyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik04LjM1NyAyLjY4N2ExMCAxMCAwIDAgMSAxMi45NTYgMTIuOTU2In1dLFsicGF0aCIse2Q6Ik05IDE3VjkifV1dLEN0dD1bWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUifV0sWyJwYXRoIix7ZDoiTTE5LjA4IDE5LjA4QTEwIDEwIDAgMSAxIDQuOTIgNC45MiJ9XV0sdWI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik05IDE3VjdoNGEzIDMgMCAwIDEgMCA2SDkifV1dLGZiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImxpbmUiLHt4MToiMTAiLHgyOiIxMCIseTE6IjE1Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiMTQiLHgyOiIxNCIseTE6IjE1Iix5MjoiOSJ9XV0sbWI9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoLjAxIn1dXSxnYj1bWyJwYXRoIix7ZDoiTTkgOS4wMDNhMSAxIDAgMCAxIDEuNTE3LS44NTlsNC45OTcgMi45OTdhMSAxIDAgMCAxIDAgMS43MThsLTQuOTk3IDIuOTk3QTEgMSAwIDAgMSA5IDE0Ljk5NnoifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLF90dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjUiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTYiLGN5OiIxMiIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiMTIiLHI6IjIifV1dLGJiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMiA4djgifV1dLFR0dD1bWyJwYXRoIix7ZDoiTTEwIDE2VjkuNWExIDEgMCAwIDEgNSAwIn1dLFsicGF0aCIse2Q6Ik04IDEyaDQifV0sWyJwYXRoIix7ZDoiTTggMTZoNyJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sdmI9W1sicGF0aCIse2Q6Ik0xMiA3djQifV0sWyJwYXRoIix7ZDoiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHlsPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV0seWI9W1sicGF0aCIse2Q6Ik0yMiAyIDIgMjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLEx0dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjE1Iix5MjoiOSJ9XV0sJHR0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI2In1dXSxBdHQ9W1sicGF0aCIse2Q6Ik0xMS4wNTEgNy42MTZhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjdsLTEuMTU2LTEuMTUyYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHhiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInJlY3QiLHt4OiI5Iix5OiI5Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XV0sd2I9W1sicGF0aCIse2Q6Ik0xOCAyMGE2IDYgMCAwIDAtMTIgMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiI0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSxNYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNNyAyMC42NjJWMTlhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MS42NjIifV1dLHpiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJtMTUgOS02IDYifV0sWyJwYXRoIix7ZDoibTkgOSA2IDYifV1dLER0dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLEV0dD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTEgOWg0YTIgMiAwIDAgMCAyLTJWMyJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNNyAyMXYtNGEyIDIgMCAwIDEgMi0yaDQifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiIxNSIscjoiMiJ9XV0sUHR0PVtbInBhdGgiLHtkOiJNMjEuNjYgMTcuNjdhMS4wOCAxLjA4IDAgMCAxLS4wNCAxLjZBMTIgMTIgMCAwIDEgNC43MyAyLjM4YTEuMSAxLjEgMCAwIDEgMS42MS0uMDR6In1dLFsicGF0aCIse2Q6Ik0xOS42NSAxNS42NkE4IDggMCAwIDEgOC4zNSA0LjM0In1dLFsicGF0aCIse2Q6Im0xNCAxMC01LjUgNS41In1dLFsicGF0aCIse2Q6Ik0xNCAxNy44NVYxMEg2LjE1In1dXSxJdHQ9W1sicGF0aCIse2Q6Ik0yMC4yIDYgMyAxMWwtLjktMi40Yy0uMy0xLjEuMy0yLjIgMS4zLTIuNWwxMy41LTRjMS4xLS4zIDIuMi4zIDIuNSAxLjNaIn1dLFsicGF0aCIse2Q6Im02LjIgNS4zIDMuMSAzLjkifV0sWyJwYXRoIix7ZDoibTEyLjQgMy40IDMuMSA0In1dLFsicGF0aCIse2Q6Ik0zIDExaDE4djhhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJaIn1dXSxOdHQ9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoibTkgMTQgMiAyIDQtNCJ9XV0sRnR0PVtbInBhdGgiLHtkOiJNMTYgMTR2Mi4ybDEuNiAxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYuODMyIn1dLFsicGF0aCIse2Q6Ik04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE2IixyOiI2In1dLFsicmVjdCIse3g6IjgiLHk6IjIiLHdpZHRoOiI4IixoZWlnaHQ6IjQiLHJ4OiIxIn1dXSxPdHQ9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTIifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjQifV0sWyJwYXRoIix7ZDoiTTIxIDE0SDExIn1dLFsicGF0aCIse2Q6Im0xNSAxMC00IDQgNCA0In1dXSxSdHQ9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTEyIDExaDQifV0sWyJwYXRoIix7ZDoiTTEyIDE2aDQifV0sWyJwYXRoIix7ZDoiTTggMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE2aC4wMSJ9XV0sQnR0PVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiI4Iix5OiIyIixyeDoiMSIscnk6IjEifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik05IDE0aDYifV1dLEh0dD1bWyJwYXRoIix7ZDoiTTExIDE0aDEwIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxLjM0NCJ9XSxbInBhdGgiLHtkOiJtMTcgMTggNC00LTQtNCJ9XSxbInBhdGgiLHtkOiJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjc5My0xLjExMyJ9XSxbInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiOCIsaGVpZ2h0OiI0IixyeDoiMSJ9XV0sa2I9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjUifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMS43MyAxIn1dLFsicGF0aCIse2Q6Ik04IDE4aDEifV0sWyJwYXRoIix7ZDoiTTIxLjM3OCAxMi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XV0sU2I9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC01LjUifV0sWyJwYXRoIix7ZDoiTTQgMTMuNVY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dXSxxdHQ9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjQiLHg6IjgiLHk6IjIiLHJ4OiIxIixyeToiMSJ9XSxbInBhdGgiLHtkOiJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTkgMTRoNiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2LTYifV1dLFZ0dD1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNOSAxMnYtMWg2djEifV0sWyJwYXRoIix7ZDoiTTExIDE3aDIifV0sWyJwYXRoIix7ZDoiTTEyIDExdjYifV1dLGp0dD1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNCIseDoiOCIseToiMiIscng6IjEiLHJ5OiIxIn1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJtMTUgMTEtNiA2In1dLFsicGF0aCIse2Q6Im05IDExIDYgNiJ9XV0sVXR0PVtbInBhdGgiLHtkOiJNMTIgNnY2bDItNCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sV3R0PVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiI4Iix5OiIyIixyeDoiMSIscnk6IjEifV0sWyJwYXRoIix7ZDoiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIn1dXSxHdHQ9W1sicGF0aCIse2Q6Ik0xMiA2djZsLTQtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sWXR0PVtbInBhdGgiLHtkOiJNMTIgNnY2bC0yLTQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLFp0dD1bWyJwYXRoIix7ZDoiTTEyIDZ2NiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sWHR0PVtbInBhdGgiLHtkOiJNMTIgNnY2bDQtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sS3R0PVtbInBhdGgiLHtkOiJNMTIgNnY2aDQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLFF0dD1bWyJwYXRoIix7ZDoiTTEyIDZ2Nmw0IDIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLEp0dD1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwyIDQifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLGUxdD1bWyJwYXRoIix7ZDoiTTEyIDZ2MTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHQxdD1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwtMiA0In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSxhMXQ9W1sicGF0aCIse2Q6Ik0xMiA2djZsLTQgMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0saTF0PVtbInBhdGgiLHtkOiJNMTIgNnY2SDgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHIxdD1bWyJwYXRoIix7ZDoiTTEyIDZ2NmwyIDEifV0sWyJwYXRoIix7ZDoiTTEyLjMzNyAyMS45OTRhMTAgMTAgMCAxIDEgOS41ODgtOC43NjcifV0sWyJwYXRoIix7ZDoibTE0IDE4IDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTE4IDE0djgifV1dLHMxdD1bWyJwYXRoIix7ZDoiTTEyIDZ2Nmw0IDIifV0sWyJwYXRoIix7ZDoiTTIwIDEydjUifV0sWyJwYXRoIix7ZDoiTTIwIDIxaC4wMSJ9XSxbInBhdGgiLHtkOiJNMjEuMjUgOC4yQTEwIDEwIDAgMSAwIDE2IDIxLjE2In1dXSxuMXQ9W1sicGF0aCIse2Q6Ik0xMiA2djZsMS41Ni43OCJ9XSxbInBhdGgiLHtkOiJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCJ9XSxbInBhdGgiLHtkOiJtMTQgMTggNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTggMjJ2LTgifV1dLG8xdD1bWyJwYXRoIix7ZDoiTTEyIDZ2Nmw0IDIifV0sWyJwYXRoIix7ZDoiTTIyIDEyYTEwIDEwIDAgMSAwLTExIDkuOTUifV0sWyJwYXRoIix7ZDoibTIyIDE2LTUuNSA1LjVMMTQgMTkifV1dLGwxdD1bWyJwYXRoIix7ZDoiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSJ9XSxbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbInBhdGgiLHtkOiJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMifV0sWyJwYXRoIix7ZDoiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQifV0sWyJwYXRoIix7ZDoiTTQuNjM2IDUuMjM1YTEwIDEwIDAgMCAxIC44OTEtLjg1NyJ9XSxbInBhdGgiLHtkOiJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4In1dXSxjMXQ9W1sicGF0aCIse2Q6Ik0xMiA2djZsMy42NDQgMS44MjIifV0sWyJwYXRoIix7ZDoiTTE2IDE5aDYifV0sWyJwYXRoIix7ZDoiTTE5IDE2djYifV0sWyJwYXRoIix7ZDoiTTIxLjkyIDEzLjI2N2ExMCAxMCAwIDEgMC04LjY1MyA4LjY1MyJ9XV0sZDF0PVtbInBhdGgiLHtkOiJNMTIgNnY2bDQgMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0scDF0PVtbInBhdGgiLHtkOiJNMTAgOS4xN2EzIDMgMCAxIDAgMCA1LjY2In1dLFsicGF0aCIse2Q6Ik0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYifV0sWyJyZWN0Iix7eDoiMiIseToiNSIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XV0saDF0PVtbInBhdGgiLHtkOiJNMTIgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik04LjEyOCAxNi45NDlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWExIDEgMCAwIDEgMCA5aC0xLjY0MiJ9XV0sdTF0PVtbInBhdGgiLHtkOiJNMjEgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNSA4aC0xLjc5QTcgNyAwIDEgMCAzIDEzLjYwNyJ9XSxbInBhdGgiLHtkOiJNNyAxMXY0aDQifV0sWyJwYXRoIix7ZDoiTTggMTlhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjUgNC44MiA0LjgyIDAgMCAwLTMuNDEgMS40MUw3IDE1In1dXSxmMXQ9W1sicGF0aCIse2Q6Im0xNyAxNS01LjUgNS41TDkgMTgifV0sWyJwYXRoIix7ZDoiTTUuNTE2IDE2LjA3QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAzLjUwMSA3LjMyNyJ9XV0sbTF0PVtbInBhdGgiLHtkOiJtMTAuODUyIDE5Ljc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTMuMTQ4IDE0LjIyOC4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJNMTMuMTQ4IDE5Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTMuNTMgMjAuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQifV0sWyJwYXRoIix7ZDoibTE0Ljc3MiAxNS44NTIuOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE0Ljc3MiAxOC4xNDguOTIzLjM4MyJ9XSxbInBhdGgiLHtkOiJNNC4yIDE1LjFhNyA3IDAgMSAxIDkuOTMtOS44NThBNyA3IDAgMCAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjIifV0sWyJwYXRoIix7ZDoibTkuMjI4IDE1Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTkuMjI4IDE4LjE0OC0uOTIzLjM4MyJ9XV0sQ2I9W1sicGF0aCIse2Q6Ik0xMiAxM3Y4bC00LTQifV0sWyJwYXRoIix7ZDoibTEyIDIxIDQtNCJ9XSxbInBhdGgiLHtkOiJNNC4zOTMgMTUuMjY5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjQzNiA4LjI4NCJ9XV0sZzF0PVtbInBhdGgiLHtkOiJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiJ9XSxbInBhdGgiLHtkOiJNOCAxOXYxIn1dLFsicGF0aCIse2Q6Ik04IDE0djEifV0sWyJwYXRoIix7ZDoiTTE2IDE5djEifV0sWyJwYXRoIix7ZDoiTTE2IDE0djEifV0sWyJwYXRoIix7ZDoiTTEyIDIxdjEifV0sWyJwYXRoIix7ZDoiTTEyIDE2djEifV1dLGIxdD1bWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoiTTE2IDE3SDcifV0sWyJwYXRoIix7ZDoiTTE3IDIxSDkifV1dLHYxdD1bWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoiTTE2IDE0djIifV0sWyJwYXRoIix7ZDoiTTggMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTYgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTZ2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMjJoLjAxIn1dXSx5MXQ9W1sicGF0aCIse2Q6Ik0xMSAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOC4zNzYgMTQuNTEyYTYgNiAwIDAgMCAzLjQ2MS00LjEyN2MuMTQ4LS42MjUtLjY1OS0uOTctMS4yNDgtLjcxNGE0IDQgMCAwIDEtNS4yNTktNS4yNmMuMjU1LS41ODktLjA5LTEuMzk1LS43MTYtMS4yNDhhNiA2IDAgMCAwLTQuNTk0IDUuMzYifV0sWyJwYXRoIix7ZDoiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQifV0sWyJwYXRoIix7ZDoiTTcgMTl2MiJ9XV0seDF0PVtbInBhdGgiLHtkOiJNNiAxNi4zMjZBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIC41IDguOTczIn1dLFsicGF0aCIse2Q6Im0xMyAxMi0zIDVoNGwtMyA1In1dXSx3MXQ9W1sicGF0aCIse2Q6Ik0xMyAxNmEzIDMgMCAwIDEgMCA2SDdhNSA1IDAgMSAxIDQuOS02eiJ9XSxbInBhdGgiLHtkOiJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2In1dXSxNMXQ9W1sicGF0aCIse2Q6Ik0xMC45NCA1LjI3NEE3IDcgMCAwIDEgMTUuNzEgMTBoMS43OWE0LjUgNC41IDAgMCAxIDQuMjIyIDYuMDU3In1dLFsicGF0aCIse2Q6Ik0xOC43OTYgMTguODFBNC41IDQuNSAwIDAgMSAxNy41IDE5SDlBNyA3IDAgMCAxIDUuNzkgNS43OCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSx6MXQ9W1sicGF0aCIse2Q6Ik00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIn1dLFsicGF0aCIse2Q6Im05LjIgMjIgMy03In1dLFsicGF0aCIse2Q6Im05IDEzLTMgNyJ9XSxbInBhdGgiLHtkOiJtMTcgMTMtMyA3In1dXSxrMXQ9W1sicGF0aCIse2Q6Ik00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIn1dLFsicGF0aCIse2Q6Ik0xNiAxNHY2In1dLFsicGF0aCIse2Q6Ik04IDE0djYifV0sWyJwYXRoIix7ZDoiTTEyIDE2djYifV1dLFMxdD1bWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoiTTggMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDE5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAyMWguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTloLjAxIn1dXSxDMXQ9W1sicGF0aCIse2Q6Ik0xMiAydjIifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTIwIDEyaDIifV0sWyJwYXRoIix7ZDoibTE5LjA3IDQuOTMtMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4In1dLFsicGF0aCIse2Q6Ik0zIDIwYTUgNSAwIDEgMSA4LjktNEgxM2EzIDMgMCAwIDEgMiA1LjI0In1dLFsicGF0aCIse2Q6Ik0xMSAyMHYyIn1dLFsicGF0aCIse2Q6Ik03IDE5djIifV1dLF8xdD1bWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJtNC45MyA0LjkzIDEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgNC45My0xLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTE1Ljk0NyAxMi42NWE0IDQgMCAwIDAtNS45MjUtNC4xMjgifV0sWyJwYXRoIix7ZDoiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIn1dXSxUMXQ9W1sicGF0aCIse2Q6Im0xNyAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUifV0sWyJwYXRoIix7ZDoiTTE3IDIydi00aC00In1dLFsicGF0aCIse2Q6Ik0yMC45OTYgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNDk1IDhoLTEuNzlhNyA3IDAgMSAwLTEyLjcwOSA1LjYwNyJ9XSxbInBhdGgiLHtkOiJNNyAxMHY0aDQifV0sWyJwYXRoIix7ZDoibTcgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41In1dXSxfYj1bWyJwYXRoIix7ZDoiTTEyIDEzdjgifV0sWyJwYXRoIix7ZDoiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIifV0sWyJwYXRoIix7ZDoibTggMTcgNC00IDQgNCJ9XV0sTDF0PVtbInBhdGgiLHtkOiJNMTcuNSAxOUg5YTcgNyAwIDEgMSA2LjcxLTloMS43OWE0LjUgNC41IDAgMSAxIDAgOVoifV1dLCQxdD1bWyJwYXRoIix7ZDoiTTE3LjUgMTJhMSAxIDAgMSAxIDAgOUg5LjAwNmE3IDcgMCAxIDEgNi43MDItOXoifV0sWyJwYXRoIix7ZDoiTTIxLjgzMiA5QTMgMyAwIDAgMCAxOSA3aC0yLjIwN2E1LjUgNS41IDAgMCAwLTEwLjcyLjYxIn1dXSxBMXQ9W1sicGF0aCIse2Q6Ik0xNi4xNyA3LjgzIDIgMjIifV0sWyJwYXRoIix7ZDoiTTQuMDIgMTJhMi44MjcgMi44MjcgMCAxIDEgMy44MS00LjE3QTIuODI3IDIuODI3IDAgMSAxIDEyIDQuMDJhMi44MjcgMi44MjcgMCAxIDEgNC4xNyAzLjgxQTIuODI3IDIuODI3IDAgMSAxIDE5Ljk4IDEyYTIuODI3IDIuODI3IDAgMSAxLTMuODEgNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiAxOS45OGEyLjgyNyAyLjgyNyAwIDEgMS00LjE3LTMuODFBMSAxIDAgMSAxIDQgMTIifV0sWyJwYXRoIix7ZDoibTcuODMgNy44MyA4LjM0IDguMzQifV1dLEQxdD1bWyJwYXRoIix7ZDoiTTE3LjI4IDkuMDVhNS41IDUuNSAwIDEgMC0xMC41NiAwQTUuNSA1LjUgMCAxIDAgMTIgMTcuNjZhNS41IDUuNSAwIDEgMCA1LjI4LTguNloifV0sWyJwYXRoIix7ZDoiTTEyIDE3LjY2TDEyIDIyIn1dXSxUYj1bWyJwYXRoIix7ZDoibTE4IDE2IDQtNC00LTQifV0sWyJwYXRoIix7ZDoibTYgOC00IDQgNCA0In1dLFsicGF0aCIse2Q6Im0xNC41IDQtNSAxNiJ9XV0sRTF0PVtbInBhdGgiLHtkOiJtMTYgMTggNi02LTYtNiJ9XSxbInBhdGgiLHtkOiJtOCA2LTYgNiA2IDYifV1dLFAxdD1bWyJwb2x5Z29uIix7cG9pbnRzOiIxMiAyIDIyIDguNSAyMiAxNS41IDEyIDIyIDIgMTUuNSAyIDguNSAxMiAyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMjIiLHkyOiIxNS41In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjIyIDguNSAxMiAxNS41IDIgOC41In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjIgMTUuNSAxMiA4LjUgMjIgMTUuNSJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIiLHkyOiI4LjUifV1dLEkxdD1bWyJwYXRoIix7ZDoiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiI3LjUgMTkuNzkgNy41IDE0LjYgMyAxMiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OSJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjIyLjA4Iix5MjoiMTIifV1dLE4xdD1bWyJwYXRoIix7ZDoiTTEwIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNiA4YTEgMSAwIDAgMSAxIDF2OGE0IDQgMCAwIDEtNCA0SDdhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTFoMTRhNCA0IDAgMSAxIDAgOGgtMSJ9XSxbInBhdGgiLHtkOiJNNiAydjIifV1dLEYxdD1bWyJwYXRoIix7ZDoiTTExIDEwLjI3IDcgMy4zNCJ9XSxbInBhdGgiLHtkOiJtMTEgMTMuNzMtNCA2LjkzIn1dLFsicGF0aCIse2Q6Ik0xMiAyMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNCAxMmg4In1dLFsicGF0aCIse2Q6Im0xNyAyMC42Ni0xLTEuNzMifV0sWyJwYXRoIix7ZDoibTE3IDMuMzQtMSAxLjczIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIifV0sWyJwYXRoIix7ZDoibTIwLjY2IDE3LTEuNzMtMSJ9XSxbInBhdGgiLHtkOiJtMjAuNjYgNy0xLjczIDEifV0sWyJwYXRoIix7ZDoibTMuMzQgMTcgMS43My0xIn1dLFsicGF0aCIse2Q6Im0zLjM0IDcgMS43MyAxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiOCJ9XV0sTzF0PVtbImNpcmNsZSIse2N4OiI4IixjeToiOCIscjoiNiJ9XSxbInBhdGgiLHtkOiJNMTguMDkgMTAuMzdBNiA2IDAgMSAxIDEwLjM0IDE4In1dLFsicGF0aCIse2Q6Ik03IDZoMXY0In1dLFsicGF0aCIse2Q6Im0xNi43MSAxMy44OC43LjcxLTIuODIgMi44MiJ9XV0sTGI9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDN2MTgifV1dLHhsPVtbInBhdGgiLHtkOiJNMTAuNSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NS41In1dLFsicGF0aCIse2Q6Im0xNC4zIDE5LjYgMS0uNCJ9XSxbInBhdGgiLHtkOiJNMTUgM3Y3LjUifV0sWyJwYXRoIix7ZDoibTE1LjIgMTYuOS0uOS0uMyJ9XSxbInBhdGgiLHtkOiJtMTYuNiAyMS43LjMtLjkifV0sWyJwYXRoIix7ZDoibTE2LjggMTUuMy0uNC0xIn1dLFsicGF0aCIse2Q6Im0xOS4xIDE1LjIuMy0uOSJ9XSxbInBhdGgiLHtkOiJtMTkuNiAyMS43LS40LTEifV0sWyJwYXRoIix7ZDoibTIwLjcgMTYuOCAxLS40In1dLFsicGF0aCIse2Q6Im0yMS43IDE5LjQtLjktLjMifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXSwkYj1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dXSxSMXQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcuNSAzdjE4In1dLFsicGF0aCIse2Q6Ik0xMiAzdjE4In1dLFsicGF0aCIse2Q6Ik0xNi41IDN2MTgifV1dLEIxdD1bWyJwYXRoIix7ZDoiTTE0IDNhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoiTTE5IDNhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoibTcgMTUgMyAzIn1dLFsicGF0aCIse2Q6Im03IDIxIDMtM0g1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJyZWN0Iix7eDoiMTQiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMSJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMSJ9XV0sSDF0PVtbInBhdGgiLHtkOiJNMTUgNnYxMmEzIDMgMCAxIDAgMy0zSDZhMyAzIDAgMSAwIDMgM1Y2YTMgMyAwIDEgMC0zIDNoMTJhMyAzIDAgMSAwLTMtMyJ9XV0scTF0PVtbInBhdGgiLHtkOiJtMTYuMjQgNy43Ni0xLjgwNCA1LjQxMWEyIDIgMCAwIDEtMS4yNjUgMS4yNjVMNy43NiAxNi4yNGwxLjgwNC01LjQxMWEyIDIgMCAwIDEgMS4yNjUtMS4yNjV6In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSxWMXQ9W1sicGF0aCIse2Q6Ik0xNS41MzYgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc2IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0bC0yLjM3Ny0yLjM3N2ExIDEgMCAwIDAtMS40MTQgMHoifV0sWyJwYXRoIix7ZDoiTTIuMjk3IDExLjI5M2ExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3N2ExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3N2ExIDEgMCAwIDAgMC0xLjQxNEw2LjA4OCA4LjkxNmExIDEgMCAwIDAtMS40MTQgMHoifV0sWyJwYXRoIix7ZDoiTTguOTE2IDE3LjkxMmExIDEgMCAwIDAgMCAxLjQxNWwyLjM3NyAyLjM3NmExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3NmExIDEgMCAwIDAgMC0xLjQxNWwtMi4zNzctMi4zNzZhMSAxIDAgMCAwLTEuNDE0IDB6In1dLFsicGF0aCIse2Q6Ik04LjkxNiA0LjY3NGExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3NmExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3NmExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6In1dXSxqMXQ9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiI4Iix4OiI1Iix5OiIyIixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiOCIseDoiMiIseToiMTQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik02IDE4aDIifV0sWyJwYXRoIix7ZDoiTTEyIDE4aDYifV1dLFUxdD1bWyJwYXRoIix7ZDoiTTMgMjBhMSAxIDAgMCAxLTEtMXYtMWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxWiJ9XSxbInBhdGgiLHtkOiJNMjAgMTZhOCA4IDAgMSAwLTE2IDAifV0sWyJwYXRoIix7ZDoiTTEyIDR2NCJ9XSxbInBhdGgiLHtkOiJNMTAgNGg0In1dXSxXMXQ9W1sicGF0aCIse2Q6Im0yMC45IDE4LjU1LTgtMTUuOThhMSAxIDAgMCAwLTEuOCAwbC04IDE1Ljk4In1dLFsiZWxsaXBzZSIse2N4OiIxMiIsY3k6IjE5IixyeDoiOSIscnk6IjMifV1dLEFiPVtbInBhdGgiLHtkOiJNMTYgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNy45MTUgMjJhNiA2IDAgMCAwLTEyIDAifV0sWyJwYXRoIix7ZDoiTTggMnYyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV0sWyJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0sRzF0PVtbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMjAiLGhlaWdodDoiOCIscng6IjEifV0sWyJwYXRoIix7ZDoiTTE3IDE0djcifV0sWyJwYXRoIix7ZDoiTTcgMTR2NyJ9XSxbInBhdGgiLHtkOiJNMTcgM3YzIn1dLFsicGF0aCIse2Q6Ik03IDN2MyJ9XSxbInBhdGgiLHtkOiJNMTAgMTQgMi4zIDYuMyJ9XSxbInBhdGgiLHtkOiJtMTQgNiA3LjcgNy43In1dLFsicGF0aCIse2Q6Im04IDYgOCA4In1dXSxZMXQ9W1sicGF0aCIse2Q6Ik0xNiAydjIifV0sWyJwYXRoIix7ZDoiTTcgMjJ2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNOCAydjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMSIscjoiMyJ9XSxbInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXSxaMXQ9W1sicGF0aCIse2Q6Ik0yMiA3LjdjMC0uNi0uNC0xLjItLjgtMS41bC02LjMtMy45YTEuNzIgMS43MiAwIDAgMC0xLjcgMGwtMTAuMyA2Yy0uNS4yLS45LjgtLjkgMS40djYuNmMwIC41LjQgMS4yLjggMS41bDYuMyAzLjlhMS43MiAxLjcyIDAgMCAwIDEuNyAwbDEwLjMtNmMuNS0uMy45LTEgLjktMS41WiJ9XSxbInBhdGgiLHtkOiJNMTAgMjEuOVYxNEwyLjEgOS4xIn1dLFsicGF0aCIse2Q6Im0xMCAxNCAxMS45LTYuOSJ9XSxbInBhdGgiLHtkOiJNMTQgMTkuOHYtOC4xIn1dLFsicGF0aCIse2Q6Ik0xOCAxNy41VjkuNCJ9XV0sWDF0PVtbInBhdGgiLHtkOiJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMCA0IDQgMCAwIDEtNS01IDQgNCAwIDAgMS01LTUifV0sWyJwYXRoIix7ZDoiTTguNSA4LjV2LjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNS41di4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2LjAxIn1dLFsicGF0aCIse2Q6Ik0xMSAxN3YuMDEifV0sWyJwYXRoIix7ZDoiTTcgMTR2LjAxIn1dXSxLMXQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifV1dLFExdD1bWyJwYXRoIix7ZDoiTTIgMTJoMjAifV0sWyJwYXRoIix7ZDoiTTIwIDEydjhhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ2LTgifV0sWyJwYXRoIix7ZDoibTQgOCAxNi00In1dLFsicGF0aCIse2Q6Im04Ljg2IDYuNzgtLjQ1LTEuODFhMiAyIDAgMCAxIDEuNDUtMi40M2wxLjk0LS40OGEyIDIgMCAwIDEgMi40MyAxLjQ2bC40NSAxLjgifV1dLEoxdD1bWyJwYXRoIix7ZDoibTEyIDE1IDIgMiA0LTQifV0sWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI4IixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiJ9XV0sZTJ0PVtbImxpbmUiLHt4MToiMTIiLHgyOiIxOCIseTE6IjE1Iix5MjoiMTUifV0sWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI4IixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiJ9XV0sdDJ0PVtbImxpbmUiLHt4MToiMTUiLHgyOiIxNSIseTE6IjEyIix5MjoiMTgifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTgiLHkxOiIxNSIseTI6IjE1In1dLFsicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIseDoiOCIseToiOCIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIifV1dLGEydD1bWyJsaW5lIix7eDE6IjEyIix4MjoiMTgiLHkxOiIxOCIseTI6IjEyIn1dLFsicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIseDoiOCIseToiOCIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIifV1dLGkydD1bWyJsaW5lIix7eDE6IjEyIix4MjoiMTgiLHkxOiIxMiIseTI6IjE4In1dLFsibGluZSIse3gxOiIxMiIseDI6IjE4Iix5MToiMTgiLHkyOiIxMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHg6IjgiLHk6IjgiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIn1dXSxyMnQ9W1sicmVjdCIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIseDoiOCIseToiOCIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIifV1dLHMydD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTkuMTcgMTQuODNhNCA0IDAgMSAwIDAtNS42NiJ9XV0sbjJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTQuODMgMTQuODNhNCA0IDAgMSAxIDAtNS42NiJ9XV0sbzJ0PVtbInBhdGgiLHtkOiJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCJ9XSxbInBhdGgiLHtkOiJtOSAxMC01IDUgNSA1In1dXSxsMnQ9W1sicGF0aCIse2Q6Im0xNSAxMCA1IDUtNSA1In1dLFsicGF0aCIse2Q6Ik00IDR2N2E0IDQgMCAwIDAgNCA0aDEyIn1dXSxjMnQ9W1sicGF0aCIse2Q6Im0xNCAxNS01IDUtNS01In1dLFsicGF0aCIse2Q6Ik0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTIifV1dLGQydD1bWyJwYXRoIix7ZDoiTTE0IDkgOSA0IDQgOSJ9XSxbInBhdGgiLHtkOiJNMjAgMjBoLTdhNCA0IDAgMCAxLTQtNFY0In1dXSxwMnQ9W1sicGF0aCIse2Q6Im0xMCAxNSA1IDUgNS01In1dLFsicGF0aCIse2Q6Ik00IDRoN2E0IDQgMCAwIDEgNCA0djEyIn1dXSxoMnQ9W1sicGF0aCIse2Q6Im0xMCA5IDUtNSA1IDUifV0sWyJwYXRoIix7ZDoiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjQifV1dLHUydD1bWyJwYXRoIix7ZDoiTTIwIDIwdi03YTQgNCAwIDAgMC00LTRINCJ9XSxbInBhdGgiLHtkOiJNOSAxNCA0IDlsNS01In1dXSxmMnQ9W1sicGF0aCIse2Q6Im0xNSAxNCA1LTUtNS01In1dLFsicGF0aCIse2Q6Ik00IDIwdi03YTQgNCAwIDAgMSA0LTRoMTIifV1dLG0ydD1bWyJwYXRoIix7ZDoiTTEyIDIwdjIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTcgMjB2MiJ9XSxbInBhdGgiLHtkOiJNMTcgMnYyIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIifV0sWyJwYXRoIix7ZDoiTTIgMTdoMiJ9XSxbInBhdGgiLHtkOiJNMiA3aDIifV0sWyJwYXRoIix7ZDoiTTIwIDEyaDIifV0sWyJwYXRoIix7ZDoiTTIwIDE3aDIifV0sWyJwYXRoIix7ZDoiTTIwIDdoMiJ9XSxbInBhdGgiLHtkOiJNNyAyMHYyIn1dLFsicGF0aCIse2Q6Ik03IDJ2MiJ9XSxbInJlY3QiLHt4OiI0Iix5OiI0Iix3aWR0aDoiMTYiLGhlaWdodDoiMTYiLHJ4OiIyIn1dLFsicmVjdCIse3g6IjgiLHk6IjgiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXSxnMnQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMCA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEifV0sWyJwYXRoIix7ZDoiTTE3IDkuM2EyLjggMi44IDAgMCAwLTMuNSAxIDMuMSAzLjEgMCAwIDAgMCAzLjQgMi43IDIuNyAwIDAgMCAzLjUgMSJ9XV0sYjJ0PVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjUiLHJ4OiIyIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIxMCIseTI6IjEwIn1dXSx2MnQ9W1sicGF0aCIse2Q6Ik0xMC4yIDE4SDQuNzc0YTEuNSAxLjUgMCAwIDEtMS4zNTItLjk3IDExIDExIDAgMCAxIC4xMzItNi40ODcifV0sWyJwYXRoIix7ZDoiTTE4IDEwLjJWNC43NzRhMS41IDEuNSAwIDAgMC0uOTctMS4zNTIgMTEgMTEgMCAwIDAtNi40ODYuMTMyIn1dLFsicGF0aCIse2Q6Ik0xOCA1YTQgMyAwIDAgMSA0IDMgMiAyIDAgMCAxLTIgMiAxMCAxMCAwIDAgMC01LjEzOSAxLjQyIn1dLFsicGF0aCIse2Q6Ik01IDE4YTMgNCAwIDAgMCAzIDQgMiAyIDAgMCAwIDItMiAxMCAxMCAwIDAgMSAxLjQyLTUuMTQifV0sWyJwYXRoIix7ZDoiTTguNzA5IDIuNTU0YTEwIDEwIDAgMCAwLTYuMTU1IDYuMTU1IDEuNSAxLjUgMCAwIDAgLjY3NiAxLjYyNmw5LjgwNyA1LjQyYTIgMiAwIDAgMCAyLjcxOC0yLjcxOGwtNS40Mi05LjgwN2ExLjUgMS41IDAgMCAwLTEuNjI2LS42NzYifV1dLHkydD1bWyJwYXRoIix7ZDoiTTYgMnYxNGEyIDIgMCAwIDAgMiAyaDE0In1dLFsicGF0aCIse2Q6Ik0xOCAyMlY4YTIgMiAwIDAgMC0yLTJIMiJ9XV0seDJ0PVtbInBhdGgiLHtkOiJNNCA5YTIgMiAwIDAgMC0yIDJ2MmEyIDIgMCAwIDAgMiAyaDRhMSAxIDAgMCAxIDEgMXY0YTIgMiAwIDAgMCAyIDJoMmEyIDIgMCAwIDAgMi0ydi00YTEgMSAwIDAgMSAxLTFoNGEyIDIgMCAwIDAgMi0ydi0yYTIgMiAwIDAgMC0yLTJoLTRhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC0yLTJoLTJhMiAyIDAgMCAwLTIgMnY0YTEgMSAwIDAgMS0xIDF6In1dXSx3MnQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsibGluZSIse3gxOiIyMiIseDI6IjE4Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjIiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiNiIseTI6IjIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjE4In1dXSxNMnQ9W1sicGF0aCIse2Q6Ik0xMS41NjIgMy4yNjZhLjUuNSAwIDAgMSAuODc2IDBMMTUuMzkgOC44N2ExIDEgMCAwIDAgMS41MTYuMjk0TDIxLjE4MyA1LjVhLjUuNSAwIDAgMSAuNzk4LjUxOWwtMi44MzQgMTAuMjQ2YTEgMSAwIDAgMS0uOTU2LjczNEg1LjgxYTEgMSAwIDAgMS0uOTU3LS43MzRMMi4wMiA2LjAyYS41LjUgMCAwIDEgLjc5OC0uNTE5bDQuMjc2IDMuNjY0YTEgMSAwIDAgMCAxLjUxNi0uMjk0eiJ9XSxbInBhdGgiLHtkOiJNNSAyMWgxNCJ9XV0sejJ0PVtbInBhdGgiLHtkOiJtMjEuMTIgNi40LTYuMDUtNC4wNmEyIDIgMCAwIDAtMi4xNy0uMDVMMi45NSA4LjQxYTIgMiAwIDAgMC0uOTUgMS43djUuODJhMiAyIDAgMCAwIC44OCAxLjY2bDYuMDUgNC4wN2EyIDIgMCAwIDAgMi4xNy4wNWw5Ljk1LTYuMTJhMiAyIDAgMCAwIC45NS0xLjdWOC4wNmEyIDIgMCAwIDAtLjg4LTEuNjZaIn1dLFsicGF0aCIse2Q6Ik0xMCAyMnYtOEwyLjI1IDkuMTUifV0sWyJwYXRoIix7ZDoibTEwIDE0IDExLjc3LTYuODcifV1dLGsydD1bWyJwYXRoIix7ZDoibTYgOCAxLjc1IDEyLjI4YTIgMiAwIDAgMCAyIDEuNzJoNC41NGEyIDIgMCAwIDAgMi0xLjcyTDE4IDgifV0sWyJwYXRoIix7ZDoiTTUgOGgxNCJ9XSxbInBhdGgiLHtkOiJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAifV0sWyJwYXRoIix7ZDoibTEyIDggMS02aDIifV1dLFMydD1bWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiNSIscng6IjkiLHJ5OiIzIn1dLFsicGF0aCIse2Q6Ik0zIDV2MTRhOSAzIDAgMCAwIDE4IDBWNSJ9XV0sQzJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI4In1dLFsibGluZSIse3gxOiIzIix4MjoiNiIseTE6IjMiLHkyOiI2In1dLFsibGluZSIse3gxOiIyMSIseDI6IjE4Iix5MToiMyIseTI6IjYifV0sWyJsaW5lIix7eDE6IjMiLHgyOiI2Iix5MToiMjEiLHkyOiIxOCJ9XSxbImxpbmUiLHt4MToiMjEiLHgyOiIxOCIseTE6IjIxIix5MjoiMTgifV1dLF8ydD1bWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiNSIscng6IjkiLHJ5OiIzIn1dLFsicGF0aCIse2Q6Ik0zIDEyYTkgMyAwIDAgMCA1IDIuNjkifV0sWyJwYXRoIix7ZDoiTTIxIDkuM1Y1In1dLFsicGF0aCIse2Q6Ik0zIDV2MTRhOSAzIDAgMCAwIDYuNDcgMi44OCJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2NGg0In1dLFsicGF0aCIse2Q6Ik0xMyAyMGE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNWMtMS4zMyAwLTIuNTQuNTQtMy40MSAxLjQxTDEyIDE2In1dXSxUMnQ9W1sicGF0aCIse2Q6Ik0xMSAxMS4zMWMxLjE3LjU2IDEuNTQgMS42OSAzLjUgMS42OSAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV0sWyJwYXRoIix7ZDoiTTExLjc1IDE4Yy4zNS41IDEuNDUgMSAyLjc1IDEgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Ik0yIDEwaDQifV0sWyJwYXRoIix7ZDoiTTIgMTRoNCJ9XSxbInBhdGgiLHtkOiJNMiAxOGg0In1dLFsicGF0aCIse2Q6Ik0yIDZoNCJ9XSxbInBhdGgiLHtkOiJNNyAzYTEgMSAwIDAgMC0xIDF2MTZhMSAxIDAgMCAwIDEgMWg0YTEgMSAwIDAgMCAxLTFMMTAgNGExIDEgMCAwIDAtMS0xeiJ9XV0sTDJ0PVtbInBhdGgiLHtkOiJNMjEgMTEuNjkzVjUifV0sWyJwYXRoIix7ZDoibTIyIDIyLTEuODc1LTEuODc1In1dLFsicGF0aCIse2Q6Ik0zIDEyYTkgMyAwIDAgMCA4LjY5NyAyLjk5OCJ9XSxbInBhdGgiLHtkOiJNMyA1djE0YTkgMyAwIDAgMCA5LjI4IDIuOTk5In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV0sWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiNSIscng6IjkiLHJ5OiIzIn1dXSwkMnQ9W1siZWxsaXBzZSIse2N4OiIxMiIsY3k6IjUiLHJ4OiI5IixyeToiMyJ9XSxbInBhdGgiLHtkOiJNMyA1VjE5QTkgMyAwIDAgMCAxNSAyMS44NCJ9XSxbInBhdGgiLHtkOiJNMjEgNVY4In1dLFsicGF0aCIse2Q6Ik0yMSAxMkwxOCAxN0gyMkwxOSAyMiJ9XSxbInBhdGgiLHtkOiJNMyAxMkE5IDMgMCAwIDAgMTQuNTkgMTQuODcifV1dLEEydD1bWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiNSIscng6IjkiLHJ5OiIzIn1dLFsicGF0aCIse2Q6Ik0zIDVWMTlBOSAzIDAgMCAwIDIxIDE5VjUifV0sWyJwYXRoIix7ZDoiTTMgMTJBOSAzIDAgMCAwIDIxIDEyIn1dXSxEMnQ9W1sicGF0aCIse2Q6Im0xMyAyMS0zLTMgMy0zIn1dLFsicGF0aCIse2Q6Ik0yMCAxOEgxMCJ9XSxbInBhdGgiLHtkOiJNMyAxMWguMDEifV0sWyJyZWN0Iix7eDoiNiIseToiMyIsd2lkdGg6IjUiLGhlaWdodDoiOCIscng6IjIuNSJ9XV0sRTJ0PVtbInBhdGgiLHtkOiJNMTAgMThoMTAifV0sWyJwYXRoIix7ZDoibTE3IDIxIDMtMy0zLTMifV0sWyJwYXRoIix7ZDoiTTMgMTFoLjAxIn1dLFsicmVjdCIse3g6IjE1Iix5OiIzIix3aWR0aDoiNSIsaGVpZ2h0OiI4IixyeDoiMi41In1dLFsicmVjdCIse3g6IjYiLHk6IjMiLHdpZHRoOiI1IixoZWlnaHQ6IjgiLHJ4OiIyLjUifV1dLFAydD1bWyJwYXRoIix7ZDoiTTEwIDVhMiAyIDAgMCAwLTEuMzQ0LjUxOWwtNi4zMjggNS43NGExIDEgMCAwIDAgMCAxLjQ4MWw2LjMyOCA1Ljc0MUEyIDIgMCAwIDAgMTAgMTloMTBhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJ6In1dLFsicGF0aCIse2Q6Im0xMiA5IDYgNiJ9XSxbInBhdGgiLHtkOiJtMTggOS02IDYifV1dLEkydD1bWyJwYXRoIix7ZDoiTTEwLjE2MiAzLjE2N0ExMCAxMCAwIDAgMCAyIDEzYTIgMiAwIDAgMCA0IDB2LTFhMiAyIDAgMCAxIDQgMHY0YTIgMiAwIDAgMCA0IDB2LTRhMiAyIDAgMCAxIDQgMHYxYTIgMiAwIDAgMCA0LS4wMDYgMTAgMTAgMCAwIDAtOC4xNjEtOS44MjYifV0sWyJwYXRoIix7ZDoiTTIwLjgwNCAxNC44NjlhOSA5IDAgMCAxLTE3LjYwOCAwIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNCIscjoiMiJ9XV0sTjJ0PVtbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiI1IixyOiIyIn1dLFsicGF0aCIse2Q6Ik02LjQ4IDMuNjZhMTAgMTAgMCAwIDEgMTMuODYgMTMuODYifV0sWyJwYXRoIix7ZDoibTYuNDEgNi40MSAxMS4xOCAxMS4xOCJ9XSxbInBhdGgiLHtkOiJNMy42NiA2LjQ4YTEwIDEwIDAgMCAwIDEzLjg2IDEzLjg2In1dXSxGMnQ9W1sicGF0aCIse2Q6Ik0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAweiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dXSxEYj1bWyJwYXRoIix7ZDoiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDBaIn1dLFsicGF0aCIse2Q6Ik05LjIgOS4yaC4wMSJ9XSxbInBhdGgiLHtkOiJtMTQuNSA5LjUtNSA1In1dLFsicGF0aCIse2Q6Ik0xNC43IDE0LjhoLjAxIn1dXSxPMnQ9W1sicGF0aCIse2Q6Ik0xMiA4djgifV0sWyJwYXRoIix7ZDoiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6In1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV1dLFIydD1bWyJwYXRoIix7ZDoiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFsLTcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiJ9XV0sQjJ0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dXSxIMnQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik0xNSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNOSAxNWguMDEifV1dLHEydD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTE2IDhoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTggMTZoLjAxIn1dXSxWMnQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC4wMSJ9XV0sajJ0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTggOGguMDEifV0sWyJwYXRoIix7ZDoiTTggMTZoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XV0sVTJ0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDhoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxNmguMDEifV1dLFcydD1bWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix4OiIyIix5OiIxMCIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Im0xNy45MiAxNCAzLjUtMy41YTIuMjQgMi4yNCAwIDAgMCAwLTNsLTUtNC45MmEyLjI0IDIuMjQgMCAwIDAtMyAwTDEwIDYifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA5aC4wMSJ9XV0sRzJ0PVtbInBhdGgiLHtkOiJNMTIgM3YxNCJ9XSxbInBhdGgiLHtkOiJNNSAxMGgxNCJ9XSxbInBhdGgiLHtkOiJNNSAyMWgxNCJ9XV0sWTJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV1dLFoydD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJwYXRoIix7ZDoiTTYgMTJjMC0xLjcuNy0zLjIgMS44LTQuMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dLFsicGF0aCIse2Q6Ik0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiJ9XV0sWDJ0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XV0sSzJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dXSxRMnQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiNiIscjoiMSJ9XSxbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiMTIiLHkyOiIxMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE4IixyOiIxIn1dXSxKMnQ9W1sicGF0aCIse2Q6Ik0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCJ9XSxbInBhdGgiLHtkOiJtMTcgNi0yLjg5MS0yLjg5MSJ9XSxbInBhdGgiLHtkOiJNMiAxNWMzLjMzMy0zIDYuNjY3LTMgMTAtMyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Im0yMCA5IC44OTEuODkxIn1dLFsicGF0aCIse2Q6Ik0yMiA5Yy0xLjUgMS4zNS0zIDIuMDkyLTQuNSAyLjVsLTEtMSJ9XSxbInBhdGgiLHtkOiJNMy4xMDkgMTQuMTA5IDQgMTUifV0sWyJwYXRoIix7ZDoibTYuNSAxMi41IDEgMSJ9XSxbInBhdGgiLHtkOiJtNyAxOCAyLjg5MSAyLjg5MSJ9XSxbInBhdGgiLHtkOiJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYifV1dLGVhdD1bWyJwYXRoIix7ZDoibTEwIDE2IDEuNSAxLjUifV0sWyJwYXRoIix7ZDoibTE0IDgtMS41LTEuNSJ9XSxbInBhdGgiLHtkOiJNMTUgMmMtMS43OTggMS45OTgtMi41MTggMy45OTUtMi44MDcgNS45OTMifV0sWyJwYXRoIix7ZDoibTE2LjUgMTAuNSAxIDEifV0sWyJwYXRoIix7ZDoibTE3IDYtMi44OTEtMi44OTEifV0sWyJwYXRoIix7ZDoiTTIgMTVjNi42NjctNiAxMy4zMzMgMCAyMC02In1dLFsicGF0aCIse2Q6Im0yMCA5IC44OTEuODkxIn1dLFsicGF0aCIse2Q6Ik0zLjEwOSAxNC4xMDkgNCAxNSJ9XSxbInBhdGgiLHtkOiJtNi41IDEyLjUgMSAxIn1dLFsicGF0aCIse2Q6Im03IDE4IDIuODkxIDIuODkxIn1dLFsicGF0aCIse2Q6Ik05IDIyYzEuNzk4LTEuOTk4IDIuNTE4LTMuOTk1IDIuODA3LTUuOTkzIn1dXSx0YXQ9W1sicGF0aCIse2Q6Ik0xMS4yNSAxNi4yNWgxLjVMMTIgMTd6In1dLFsicGF0aCIse2Q6Ik0xNiAxNHYuNSJ9XSxbInBhdGgiLHtkOiJNNC40MiAxMS4yNDdBMTMuMTUyIDEzLjE1MiAwIDAgMCA0IDE0LjU1NkM0IDE4LjcyOCA3LjU4MiAyMSAxMiAyMXM4LTIuMjcyIDgtNi40NDRhMTEuNzAyIDExLjcwMiAwIDAgMC0uNDkzLTMuMzA5In1dLFsicGF0aCIse2Q6Ik04IDE0di41In1dLFsicGF0aCIse2Q6Ik04LjUgOC41Yy0uMzg0IDEuMDUtMS4wODMgMi4wMjgtMi4zNDQgMi41LTEuOTMxLjcyMi0zLjU3Ni0uMjk3LTMuNjU2LTEtLjExMy0uOTk0IDEuMTc3LTYuNTMgNC03IDEuOTIzLS4zMjEgMy42NTEuODQ1IDMuNjUxIDIuMjM1QTcuNDk3IDcuNDk3IDAgMCAxIDE0IDUuMjc3YzAtMS4zOSAxLjg0NC0yLjU5OCAzLjc2Ny0yLjI3NyAyLjgyMy40NyA0LjExMyA2LjAwNiA0IDctLjA4LjcwMy0xLjcyNSAxLjcyMi0zLjY1NiAxLTEuMjYxLS40NzItMS44NTUtMS40NS0yLjIzOS0yLjUifV1dLGFhdD1bWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyIix5MjoiMjIifV0sWyJwYXRoIix7ZDoiTTE3IDVIOS41YTMuNSAzLjUgMCAwIDAgMCA3aDVhMy41IDMuNSAwIDAgMSAwIDdINiJ9XV0saWF0PVtbInBhdGgiLHtkOiJNMiA4aDIwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMTZoMTIifV1dLHJhdD1bWyJwYXRoIix7ZDoiTTIwLjUgMTBhMi41IDIuNSAwIDAgMS0yLjQtM0gxOGEyLjk1IDIuOTUgMCAwIDEtMi42LTQuNCAxMCAxMCAwIDEgMCA2LjMgNy4xYy0uMy4yLS44LjMtMS4yLjMifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XV0sc2F0PVtbInBhdGgiLHtkOiJNMTAgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA5VjZhMiAyIDAgMCAwLTItMkg4YTIgMiAwIDAgMC0yIDJ2MTQifV0sWyJwYXRoIix7ZDoiTTIgMjBoOCJ9XSxbInBhdGgiLHtkOiJNMjAgMTd2LTJhMiAyIDAgMSAwLTQgMHYyIn1dLFsicmVjdCIse3g6IjE0Iix5OiIxNyIsd2lkdGg6IjgiLGhlaWdodDoiNSIscng6IjEifV1dLG5hdD1bWyJwYXRoIix7ZDoiTTEwIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTggMjBWNmEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNCJ9XSxbInBhdGgiLHtkOiJNMiAyMGgyMCJ9XV0sb2F0PVtbInBhdGgiLHtkOiJNMTEgMjBIMiJ9XSxbInBhdGgiLHtkOiJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoifV0sWyJwYXRoIix7ZDoiTTExIDRIOGEyIDIgMCAwIDAtMiAydjE0In1dLFsicGF0aCIse2Q6Ik0xNCAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTIyIDIwaC0zIn1dXSxsYXQ9W1siY2lyY2xlIix7Y3g6IjEyLjEiLGN5OiIxMi4xIixyOiIxIn1dXSxjYXQ9W1sicGF0aCIse2Q6Ik0xMiAxNVYzIn1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00In1dLFsicGF0aCIse2Q6Im03IDEwIDUgNSA1LTUifV1dLGRhdD1bWyJwYXRoIix7ZDoibTEyLjk5IDYuNzQgMS45MyAzLjQ0In1dLFsicGF0aCIse2Q6Ik0xOS4xMzYgMTJhMTAgMTAgMCAwIDEtMTQuMjcxIDAifV0sWyJwYXRoIix7ZDoibTIxIDIxLTIuMTYtMy44NCJ9XSxbInBhdGgiLHtkOiJtMyAyMSA4LjAyLTE0LjI2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMiJ9XV0scGF0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTkuMTMgNS4wOUMxNS4yMiA5LjE0IDEwIDEwLjQ0IDIuMjUgMTAuOTQifV0sWyJwYXRoIix7ZDoiTTIxLjc1IDEyLjg0Yy02LjYyLTEuNDEtMTIuMTQgMS0xNi4zOCA2LjMyIn1dLFsicGF0aCIse2Q6Ik04LjU2IDIuNzVjNC4zNyA2IDYgOS40MiA4IDE3LjcyIn1dXSxoYXQ9W1sicGF0aCIse2Q6Ik0xMCAxMWguMDEifV0sWyJwYXRoIix7ZDoiTTE0IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNNi41IDEzLjFoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMiA1YzAgOS00IDEyLTYgMTJzLTYtMy02LTEyYzAtMiAyLTMgNi0zczYgMSA2IDMifV0sWyJwYXRoIix7ZDoiTTE3LjQgOS45Yy0uOC44LTIgLjgtMi44IDAifV0sWyJwYXRoIix7ZDoiTTEwLjEgNy4xQzkgNy4yIDcuNyA3LjcgNiA4LjZjLTMuNSAyLTQuNyAzLjktMy43IDUuNiA0LjUgNy44IDkuNSA4LjQgMTEuMiA3LjQuOS0uNSAxLjktMi4xIDEuOS00LjcifV0sWyJwYXRoIix7ZDoiTTkuMSAxNi41Yy4zLTEuMSAxLjQtMS43IDIuNC0xLjQifV1dLHVhdD1bWyJwYXRoIix7ZDoiTTEwIDE4YTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDVhMyAzIDAgMCAxLTMtMyAxIDEgMCAwIDEgMS0xeiJ9XSxbInBhdGgiLHtkOiJNMTMgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTEgMSAwIDAgMSAxIDF2NmExIDEgMCAwIDEtMSAxbC0uODEgMy4yNDJhMSAxIDAgMCAxLS45Ny43NThIOCJ9XSxbInBhdGgiLHtkOiJNMTQgNGgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0zIn1dLFsicGF0aCIse2Q6Ik0xOCA2aDQifV0sWyJwYXRoIix7ZDoibTUgMTAtMiA4In1dLFsicGF0aCIse2Q6Im03IDE4IDItOCJ9XV0sZmF0PVtbInBhdGgiLHtkOiJNMTAgMTAgNyA3In1dLFsicGF0aCIse2Q6Im0xMCAxNC0zIDMifV0sWyJwYXRoIix7ZDoibTE0IDEwIDMtMyJ9XSxbInBhdGgiLHtkOiJtMTQgMTQgMyAzIn1dLFsicGF0aCIse2Q6Ik0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIn1dLFsicGF0aCIse2Q6Ik0xOS42MzcgMTRhNCA0IDAgMSAxLTUuNDMyIDUuODY4In1dLFsicGF0aCIse2Q6Ik00LjM2NyAxMGE0IDQgMCAxIDEgNS40MzgtNS44NjIifV0sWyJwYXRoIix7ZDoiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMifV0sWyJyZWN0Iix7eDoiMTAiLHk6IjgiLHdpZHRoOiI0IixoZWlnaHQ6IjgiLHJ4OiIxIn1dXSxtYXQ9W1sicGF0aCIse2Q6Ik0xOC43MTUgMTMuMTg2QzE4LjI5IDExLjg1OCAxNy4zODQgMTAuNjA3IDE2IDkuNWMtMi0xLjYtMy41LTQtNC02LjVhMTAuNyAxMC43IDAgMCAxLS44ODQgMi41ODYifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4In1dXSxnYXQ9W1sicGF0aCIse2Q6Ik0xMiAyMmE3IDcgMCAwIDAgNy03YzAtMi0xLTMuOS0zLTUuNXMtMy41LTQtNC02LjVjLS41IDIuNS0yIDQuOS00IDYuNUM2IDExLjEgNSAxMyA1IDE1YTcgNyAwIDAgMCA3IDd6In1dXSxiYXQ9W1sicGF0aCIse2Q6Ik03IDE2LjNjMi4yIDAgNC0xLjgzIDQtNC4wNSAwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5UzcuMjkgNi43NSA3IDUuM2MtLjI5IDEuNDUtMS4xNCAyLjg0LTIuMjkgMy43NlMzIDExLjEgMyAxMi4yNWMwIDIuMjIgMS44IDQuMDUgNCA0LjA1eiJ9XSxbInBhdGgiLHtkOiJNMTIuNTYgNi42QTEwLjk3IDEwLjk3IDAgMCAwIDE0IDMuMDJjLjUgMi41IDIgNC45IDQgNi41czMgMy41IDMgNS41YTYuOTggNi45OCAwIDAgMS0xMS45MSA0Ljk3In1dXSx2YXQ9W1sicGF0aCIse2Q6Im0yIDIgOCA4In1dLFsicGF0aCIse2Q6Im0yMiAyLTggOCJ9XSxbImVsbGlwc2UiLHtjeDoiMTIiLGN5OiI5IixyeDoiMTAiLHJ5OiI1In1dLFsicGF0aCIse2Q6Ik03IDEzLjR2Ny45In1dLFsicGF0aCIse2Q6Ik0xMiAxNHY4In1dLFsicGF0aCIse2Q6Ik0xNyAxMy40djcuOSJ9XSxbInBhdGgiLHtkOiJNMiA5djhhMTAgNSAwIDAgMCAyMCAwVjkifV1dLHlhdD1bWyJwYXRoIix7ZDoiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyJ9XSxbInBhdGgiLHtkOiJtOC4yOSAxMi43MS0yLjYgMi42YTIuNSAyLjUgMCAxIDAtMS42NSA0LjY1QTIuNSAyLjUgMCAxIDAgOC43IDE4LjNsMi41OS0yLjU5In1dXSx4YXQ9W1sicGF0aCIse2Q6Ik0xNy41OTYgMTIuNzY4YTIgMiAwIDEgMCAyLjgyOS0yLjgyOWwtMS43NjgtMS43NjdhMiAyIDAgMCAwIDIuODI4LTIuODI5bC0yLjgyOC0yLjgyOGEyIDIgMCAwIDAtMi44MjkgMi44MjhsLTEuNzY3LTEuNzY4YTIgMiAwIDEgMC0yLjgyOSAyLjgyOXoifV0sWyJwYXRoIix7ZDoibTIuNSAyMS41IDEuNC0xLjQifV0sWyJwYXRoIix7ZDoibTIwLjEgMy45IDEuNC0xLjQifV0sWyJwYXRoIix7ZDoiTTUuMzQzIDIxLjQ4NWEyIDIgMCAxIDAgMi44MjktMi44MjhsMS43NjcgMS43NjhhMiAyIDAgMSAwIDIuODI5LTIuODI5bC02LjM2NC02LjM2NGEyIDIgMCAxIDAtMi44MjkgMi44MjlsMS43NjggMS43NjdhMiAyIDAgMCAwLTIuODI4IDIuODI5eiJ9XSxbInBhdGgiLHtkOiJtOS42IDE0LjQgNC44LTQuOCJ9XV0sd2F0PVtbInBhdGgiLHtkOiJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiJ9XSxbInBhdGgiLHtkOiJNNiA4LjVjMC0uNzUuMTMtMS40Ny4zNi0yLjE0In1dLFsicGF0aCIse2Q6Ik04LjggMy4xNUE2LjUgNi41IDAgMCAxIDE5IDguNWMwIDEuNjMtLjQ0IDIuODEtMS4wOSAzLjc2In1dLFsicGF0aCIse2Q6Ik0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dXSxNYXQ9W1sicGF0aCIse2Q6Ik03IDMuMzRWNWEzIDMgMCAwIDAgMyAzIn1dLFsicGF0aCIse2Q6Ik0xMSAyMS45NVYxOGEyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMS0yLTJ2LTFhMiAyIDAgMCAwLTItMkgyLjA1In1dLFsicGF0aCIse2Q6Ik0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTAgMTAgMCAxIDAgOS41NCAxMyJ9XSxbInBhdGgiLHtkOiJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI1Iix4OiIxNCIseToiNiIscng6IjEifV1dLHphdD1bWyJwYXRoIix7ZDoiTTYgOC41YTYuNSA2LjUgMCAxIDEgMTMgMGMwIDYtNiA2LTYgMTBhMy41IDMuNSAwIDEgMS03IDAifV0sWyJwYXRoIix7ZDoiTTE1IDguNWEyLjUgMi41IDAgMCAwLTUgMHYxYTIgMiAwIDEgMSAwIDQifV1dLEViPVtbInBhdGgiLHtkOiJNMjEuNTQgMTVIMTdhMiAyIDAgMCAwLTIgMnY0LjU0In1dLFsicGF0aCIse2Q6Ik03IDMuMzRWNWEzIDMgMCAwIDAgMyAzYTIgMiAwIDAgMSAyIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yYzAtMS4xLjktMiAyLTJoMy4xNyJ9XSxbInBhdGgiLHtkOiJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XV0sa2F0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTIgMmE3IDcgMCAxIDAgMTAgMTAifV1dLFNhdD1bWyJjaXJjbGUiLHtjeDoiMTEuNSIsY3k6IjEyLjUiLHI6IjMuNSJ9XSxbInBhdGgiLHtkOiJNMyA4YzAtMy41IDIuNS02IDYuNS02IDUgMCA0LjgzIDMgNy41IDVzNSAyIDUgNmMwIDQuNS0yLjUgNi41LTcgNi41LTIuNSAwLTIuNSAyLjUtNiAyLjVzLTctMi03LTUuNWMwLTMgMS41LTMgMS41LTVDMy41IDEwIDMgOSAzIDhaIn1dXSxDYXQ9W1sicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTIwIDE0LjM0N1YxNGMwLTYtNC0xMi04LTEyLTEuMDc4IDAtMi4xNTcuNDM2LTMuMTU3IDEuMTkifV0sWyJwYXRoIix7ZDoiTTYuMjA2IDYuMjFDNC44NzEgOC40IDQgMTEuMiA0IDE0YTggOCAwIDAgMCAxNC41NjggNC41NjgifV1dLF9hdD1bWyJwYXRoIix7ZDoiTTEyIDJDOCAyIDQgOCA0IDE0YTggOCAwIDAgMCAxNiAwYzAtNi00LTEyLTgtMTIifV1dLFBiPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE5IixyOiIxIn1dXSxJYj1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxMiIscjoiMSJ9XV0sVGF0PVtbInBhdGgiLHtkOiJNNSAxNWE2LjUgNi41IDAgMCAxIDcgMCA2LjUgNi41IDAgMCAwIDcgMCJ9XSxbInBhdGgiLHtkOiJNNSA5YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIn1dXSxMYXQ9W1sibGluZSIse3gxOiI1Iix4MjoiMTkiLHkxOiI5Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiMTUiLHkyOiIxNSJ9XSxbImxpbmUiLHt4MToiMTkiLHgyOiI1Iix5MToiNSIseTI6IjE5In1dXSwkYXQ9W1sibGluZSIse3gxOiI1Iix4MjoiMTkiLHkxOiI5Iix5MjoiOSJ9XSxbImxpbmUiLHt4MToiNSIseDI6IjE5Iix5MToiMTUiLHkyOiIxNSJ9XV0sQWF0PVtbInBhdGgiLHtkOiJtMTUgMjAgMy0zaDJhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgybDMgM3oifV0sWyJwYXRoIix7ZDoiTTYgOHYxIn1dLFsicGF0aCIse2Q6Ik0xMCA4djEifV0sWyJwYXRoIix7ZDoiTTE0IDh2MSJ9XSxbInBhdGgiLHtkOiJNMTggOHYxIn1dXSxEYXQ9W1sicGF0aCIse2Q6Ik0yMSAyMUg4YTIgMiAwIDAgMS0xLjQyLS41ODdsLTMuOTk0LTMuOTk5YTIgMiAwIDAgMSAwLTIuODI4bDEwLTEwYTIgMiAwIDAgMSAyLjgyOSAwbDUuOTk5IDZhMiAyIDAgMCAxIDAgMi44MjhMMTIuODM0IDIxIn1dLFsicGF0aCIse2Q6Im01LjA4MiAxMS4wOSA4LjgyOCA4LjgyOCJ9XV0sRWF0PVtbInBhdGgiLHtkOiJNNCAxMGgxMiJ9XSxbInBhdGgiLHtkOiJNNCAxNGg5In1dLFsicGF0aCIse2Q6Ik0xOSA2YTcuNyA3LjcgMCAwIDAtNS4yLTJBNy45IDcuOSAwIDAgMCA2IDEyYzAgNC40IDMuNSA4IDcuOCA4IDIgMCAzLjgtLjggNS4yLTIifV1dLFBhdD1bWyJwYXRoIix7ZDoiTTE0IDEzaDJhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMCA0IDB2LTYuOTk4YTIgMiAwIDAgMC0uNTktMS40MkwxOCA1In1dLFsicGF0aCIse2Q6Ik0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2In1dLFsicGF0aCIse2Q6Ik0yIDIxaDEzIn1dLFsicGF0aCIse2Q6Ik0zIDdoMTEifV0sWyJwYXRoIix7ZDoibTkgMTEtMiAzaDNsLTIgMyJ9XV0sSWF0PVtbInBhdGgiLHtkOiJtMTUgMTUgNiA2In1dLFsicGF0aCIse2Q6Im0xNSA5IDYtNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTZ2NWgtNSJ9XSxbInBhdGgiLHtkOiJNMjEgOFYzaC01In1dLFsicGF0aCIse2Q6Ik0zIDE2djVoNSJ9XSxbInBhdGgiLHtkOiJtMyAyMSA2LTYifV0sWyJwYXRoIix7ZDoiTTMgOFYzaDUifV0sWyJwYXRoIix7ZDoiTTkgOSAzIDMifV1dLE5hdD1bWyJwYXRoIix7ZDoiTTE1IDNoNnY2In1dLFsicGF0aCIse2Q6Ik0xMCAxNCAyMSAzIn1dLFsicGF0aCIse2Q6Ik0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2In1dXSxGYXQ9W1sicGF0aCIse2Q6Im0xNSAxOC0uNzIyLTMuMjUifV0sWyJwYXRoIix7ZDoiTTIgOGExMC42NDUgMTAuNjQ1IDAgMCAwIDIwIDAifV0sWyJwYXRoIix7ZDoibTIwIDE1LTEuNzI2LTIuMDUifV0sWyJwYXRoIix7ZDoibTQgMTUgMS43MjYtMi4wNSJ9XSxbInBhdGgiLHtkOiJtOSAxOCAuNzIyLTMuMjUifV1dLE9hdD1bWyJwYXRoIix7ZDoiTTIuMDYyIDEyLjM0OGExIDEgMCAwIDEgMC0uNjk2IDEwLjc1IDEwLjc1IDAgMCAxIDE5Ljg3NiAwIDEgMSAwIDAgMSAwIC42OTYgMTAuNzUgMTAuNzUgMCAwIDEtMTkuODc2IDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XV0sUmF0PVtbInBhdGgiLHtkOiJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5In1dLFsicGF0aCIse2Q6Ik0xNC4wODQgMTQuMTU4YTMgMyAwIDAgMS00LjI0Mi00LjI0MiJ9XSxbInBhdGgiLHtkOiJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSxCYXQ9W1sicGF0aCIse2Q6Ik0xOCAyaC0zYTUgNSAwIDAgMC01IDV2M0g3djRoM3Y4aDR2LThoM2wxLTRoLTRWN2ExIDEgMCAwIDEgMS0xaDN6In1dXSxIYXQ9W1sicGF0aCIse2Q6Ik0xMiAxNmguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoifV0sWyJwYXRoIix7ZDoiTTggMTZoLjAxIn1dXSxxYXQ9W1sicGF0aCIse2Q6Ik0xMC44MjcgMTYuMzc5YTYuMDgyIDYuMDgyIDAgMCAxLTguNjE4LTcuMDAybDUuNDEyIDEuNDVhNi4wODIgNi4wODIgMCAwIDEgNy4wMDItOC42MThsLTEuNDUgNS40MTJhNi4wODIgNi4wODIgMCAwIDEgOC42MTggNy4wMDJsLTUuNDEyLTEuNDVhNi4wODIgNi4wODIgMCAwIDEtNy4wMDIgOC42MThsMS40NS01LjQxMloifV0sWyJwYXRoIix7ZDoiTTEyIDEydi4wMSJ9XV0sVmF0PVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9XSxbInBhdGgiLHtkOiJNMiA2YTIgMiAwIDAgMSAzLjQxNC0xLjQxNGw2IDZhMiAyIDAgMCAxIDAgMi44MjhsLTYgNkEyIDIgMCAwIDEgMiAxOHoifV1dLGphdD1bWyJwYXRoIix7ZDoiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6In1dLFsicGF0aCIse2Q6Ik0xNiA4IDIgMjIifV0sWyJwYXRoIix7ZDoiTTE3LjUgMTVIOSJ9XV0sVWF0PVtbInBhdGgiLHtkOiJNNCAzIDIgNXYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIn1dLFsicGF0aCIse2Q6Ik02IDhoNCJ9XSxbInBhdGgiLHtkOiJNNiAxOGg0In1dLFsicGF0aCIse2Q6Im0xMiAzLTIgMnYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIn1dLFsicGF0aCIse2Q6Ik0xNCA4aDQifV0sWyJwYXRoIix7ZDoiTTE0IDE4aDQifV0sWyJwYXRoIix7ZDoibTIwIDMtMiAydjE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoifV1dLFdhdD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnY0In1dLFsicGF0aCIse2Q6Im02LjggMTUtMy41IDIifV0sWyJwYXRoIix7ZDoibTIwLjcgNy0zLjUgMiJ9XSxbInBhdGgiLHtkOiJNNi44IDkgMy4zIDcifV0sWyJwYXRoIix7ZDoibTIwLjcgMTctMy41LTIifV0sWyJwYXRoIix7ZDoibTkgMjIgMy04IDMgOCJ9XSxbInBhdGgiLHtkOiJNOCAyMmg4In1dLFsicGF0aCIse2Q6Ik0xOCAxOC43YTkgOSAwIDEgMC0xMiAwIn1dXSxHYXQ9W1sicGF0aCIse2Q6Ik01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6In1dLFsicGF0aCIse2Q6Ik0xMiAyaDMuNWEzLjUgMy41IDAgMSAxIDAgN0gxMlYyeiJ9XSxbInBhdGgiLHtkOiJNMTIgMTIuNWEzLjUgMy41IDAgMSAxIDcgMCAzLjUgMy41IDAgMSAxLTcgMHoifV0sWyJwYXRoIix7ZDoiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6In1dLFsicGF0aCIse2Q6Ik01IDEyLjVBMy41IDMuNSAwIDAgMSA4LjUgOUgxMnY3SDguNUEzLjUgMy41IDAgMCAxIDUgMTIuNXoifV1dLFlhdD1bWyJwYXRoIix7ZDoiTTEzLjY1OSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjExLjUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTggMTJ2LTEifV0sWyJwYXRoIix7ZDoiTTggMTh2LTIifV0sWyJwYXRoIix7ZDoiTTggN1Y2In1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIyMCIscjoiMiJ9XV0sTmI9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im04IDE4IDQtNCJ9XSxbInBhdGgiLHtkOiJNOCAxMHY4aDgifV1dLEZiPVtbInBhdGgiLHtkOiJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtNy42OSAxNi40NzkgMS4yOSA0Ljg4YS41LjUgMCAwIDEtLjY5OC41OTFsLTEuODQzLS44NDlhMSAxIDAgMCAwLS44NzkuMDAxbC0xLjg0Ni44NWEuNS41IDAgMCAxLS42OTItLjU5M2wxLjI5LTQuODgifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE0IixyOiIzIn1dXSxPYj1bWyJwYXRoIix7ZDoiTTE0IDIyaDRhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik01IDE0YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDAgMSAxIn1dLFsicGF0aCIse2Q6Ik05IDIyYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMC0xLTEifV1dLFphdD1bWyJwYXRoIix7ZDoiTTE0LjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYzLjgifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTExLjcgMTQuMiA3IDE3bC00LjctMi44In1dLFsicGF0aCIse2Q6Ik0zIDEzLjFhMiAyIDAgMCAwLS45OTkgMS43NnYzLjI0YTIgMiAwIDAgMCAuOTY5IDEuNzhMNiAyMS43YTIgMiAwIDAgMCAyLjAzLjAxTDExIDE5LjlhMiAyIDAgMCAwIDEtMS43NlYxNC45YTIgMiAwIDAgMC0uOTctMS43OEw4IDExLjNhMiAyIDAgMCAwLTIuMDMtLjAxeiJ9XSxbInBhdGgiLHtkOiJNNyAxN3Y1In1dXSxSYj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIn1dLFsicGF0aCIse2Q6Ik0xNCAxOGExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTEgMSAxIDAgMCAxLTEtMXYtMWExIDEgMCAwIDAtMS0xIn1dXSxCYj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTggMTh2LTIifV0sWyJwYXRoIix7ZDoiTTEyIDE4di00In1dLFsicGF0aCIse2Q6Ik0xNiAxOHYtNiJ9XV0sSGI9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik04IDE4di0xIn1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtNiJ9XSxbInBhdGgiLHtkOiJNMTYgMTh2LTMifV1dLHFiPVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMTYgMTMtMy41IDMuNS0yLTJMOCAxNyJ9XV0sVmI9W1sicGF0aCIse2Q6Ik0xNS45NDEgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNGwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYzLjUxMiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNNC4wMTcgMTEuNTEyYTYgNiAwIDEgMCA4LjQ2NiA4LjQ3NSJ9XSxbInBhdGgiLHtkOiJNOSAxNmExIDEgMCAwIDEtMS0xdi00YzAtLjU1Mi40NS0xLjAwOC45OTUtLjkxN2E2IDYgMCAwIDEgNC45MjIgNC45MjJjLjA5MS41NDQtLjM2NS45OTUtLjkxNy45OTV6In1dXSxqYj1bWyJwYXRoIix7ZDoiTTEwLjUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xNCAyMCAyIDIgNC00In1dXSxYYXQ9W1sicGF0aCIse2Q6Ik0xNiAyMmgyYTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Mi44NSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxNHYyLjJsMS42IDEifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjE2IixyOiI2In1dXSxLYXQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im05IDE1IDIgMiA0LTQifV1dLFViPVtbInBhdGgiLHtkOiJNNCAxMi4xNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMy4zNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtNSAxNi0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Im05IDIyIDMtMy0zLTMifV1dLFFhdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEwIDEyLjUgOCAxNWwyIDIuNSJ9XSxbInBhdGgiLHtkOiJtMTQgMTIuNSAyIDIuNS0yIDIuNSJ9XV0sV2I9W1sicGF0aCIse2Q6Ik0xNSA4YTEgMSAwIDAgMS0xLTFWMmEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh6In1dLFsicGF0aCIse2Q6Ik0yMCA4djEyYTIgMiAwIDAgMS0yIDJoLTQuMTgyIn1dLFsicGF0aCIse2Q6Im0zLjMwNSAxOS41My45MjMtLjM4MiJ9XSxbInBhdGgiLHtkOiJNNCAxMC41OTJWNGEyIDIgMCAwIDEgMi0yaDgifV0sWyJwYXRoIix7ZDoibTQuMjI4IDE2Ljg1Mi0uOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTUuODUyIDE1LjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtOC4xNDggMTUuMjI4LjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im04LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTkuNzczIDE2Ljg1Mi45MjItLjM4MyJ9XSxbInBhdGgiLHtkOiJtOS43NzMgMTkuMTQ4LjkyMi4zODMifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIzIn1dXSxKYXQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik05IDEwaDYifV0sWyJwYXRoIix7ZDoiTTEyIDEzVjcifV0sWyJwYXRoIix7ZDoiTTkgMTdoNiJ9XV0sZWl0PVtbInBhdGgiLHtkOiJNNCAxMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTZoMnY2In1dLFsicGF0aCIse2Q6Ik0xMCAyMmg0In1dLFsicmVjdCIse3g6IjIiLHk6IjE2Iix3aWR0aDoiNCIsaGVpZ2h0OiI2IixyeDoiMiJ9XV0sdGl0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTh2LTYifV0sWyJwYXRoIix7ZDoibTkgMTUgMyAzIDMtMyJ9XV0sR2I9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xMiA5djQifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV0sd2w9W1sicGF0aCIse2Q6Ik00IDYuODM1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0uMzQzIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0yIDE5YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDEtNCAwdi00YTYgNiAwIDAgMSAxMiAwdjRhMiAyIDAgMCAxLTQgMHYtMWEyIDIgMCAwIDEgNCAwIn1dXSxhaXQ9W1sicGF0aCIse2Q6Ik0xMyAyMmg1YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2NyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMy42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSA3IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhMSAxIDAgMCAxLTEuNTA3IDB6In1dXSxpaXQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTIiLHI6IjIifV0sWyJwYXRoIix7ZDoibTIwIDE3LTEuMjk2LTEuMjk2YTIuNDEgMi40MSAwIDAgMC0zLjQwOCAwTDkgMjIifV1dLHJpdD1bWyJwYXRoIix7ZDoiTTQgMTFWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi0xIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0yIDE1aDEwIn1dLFsicGF0aCIse2Q6Im05IDE4IDMtMy0zLTMifV1dLFliPVtbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNNCAxMnY2In1dLFsicGF0aCIse2Q6Ik00IDE0aDIifV0sWyJwYXRoIix7ZDoiTTkuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY0In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIyMCIscjoiMiJ9XV0sWmI9W1sicGF0aCIse2Q6Ik00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOSAxN3YtMmEyIDIgMCAwIDAtNCAwdjIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNSIseDoiMyIseToiMTciLHJ4OiIxIn1dXSxYYj1bWyJwYXRoIix7ZDoiTTIwIDE0VjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTE0IDE4aDYifV1dLHNpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTkgMTVoNiJ9XV0sbml0PVtbInBhdGgiLHtkOiJNMTEuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4zNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAyMHYtN2wzIDEuNDc0In1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIyMCIscjoiMiJ9XV0sb2l0PVtbInBhdGgiLHtkOiJNNC4yMjYgMjAuOTI1QTIgMiAwIDAgMCA2IDIyaDEyYTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My4xMjcifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTUgMTEtMyAzIn1dLFsicGF0aCIse2Q6Im01IDE3LTMtM2gxMCJ9XV0sS2I9W1sicGF0aCIse2Q6Im0xOC4yMjYgNS4yMjYtMi41Mi0yLjUyQTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0uMzUxIn1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV0sWyJwYXRoIix7ZDoiTTggMThoMSJ9XV0sUWI9W1sicGF0aCIse2Q6Ik0xMi42NTkgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY5LjM0In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xMC4zNzggMTIuNjIyYTEgMSAwIDAgMSAzIDMuMDAzTDguMzYgMjAuNjM3YTIgMiAwIDAgMS0uODU0LjUwNmwtMi44NjcuODM3YS41LjUgMCAwIDEtLjYyLS42MmwuODM2LTIuODY5YTIgMiAwIDAgMSAuNTA2LS44NTN6In1dXSxKYj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTE1LjAzMyAxMy40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2di00LjcwNGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoifV1dLGV2PVtbInBhdGgiLHtkOiJNMTEuMzUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY1LjM1In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xNCAxOWg2In1dLFsicGF0aCIse2Q6Ik0xNyAxNnY2In1dXSx0dj1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNOS4xIDlhMyAzIDAgMCAxIDUuODIgMWMwIDItMyAzLTMgMyJ9XV0sbGl0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOSAxNWg2In1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtNiJ9XV0sY2l0PVtbInBhdGgiLHtkOiJNMjAgMTBWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmg0LjM1In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0xNiAxNGEyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0xNiAyMmEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik0yMCAxNGEyIDIgMCAwIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0yMCAyMmEyIDIgMCAwIDAgMi0yIn1dXSxkaXQ9W1sicGF0aCIse2Q6Ik02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsiY2lyY2xlIix7Y3g6IjExLjUiLGN5OiIxNC41IixyOiIyLjUifV0sWyJwYXRoIix7ZDoiTTEzLjMgMTYuMyAxNSAxOCJ9XV0sYXY9W1sicGF0aCIse2Q6Ik0xMS4xIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OSAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2My4yNSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMjEgMjItMi44OC0yLjg4In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTciLHI6IjMifV1dLGl2PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTExLjUgMTMuNWEyLjUgMi41IDAgMCAxIDAgMyJ9XSxbInBhdGgiLHtkOiJNMTUgMTJhNSA1IDAgMCAxIDAgNiJ9XV0scGl0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMCAxMXYyIn1dLFsicGF0aCIse2Q6Ik04IDE3aDgifV0sWyJwYXRoIix7ZDoiTTE0IDE2djIifV1dLGhpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTggMTNoMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTNoMiJ9XSxbInBhdGgiLHtkOiJNOCAxN2gyIn1dLFsicGF0aCIse2Q6Ik0xNCAxN2gyIn1dXSx1aXQ9W1sicGF0aCIse2Q6Ik0xMSAyMWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xIn1dLFsicGF0aCIse2Q6Ik0xNiAxNmExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTEifV0sWyJwYXRoIix7ZDoiTTIxIDZhMiAyIDAgMCAwLS41ODYtMS40MTRsLTItMkEyIDIgMCAwIDAgMTcgMmgtM2ExIDEgMCAwIDAtMSAxdjhhMSAxIDAgMCAwIDEgMWg2YTEgMSAwIDAgMCAxLTF6In1dXSxmaXQ9W1sicGF0aCIse2Q6Ik00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDcifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTEwIDE4IDMtMy0zLTMifV1dLG1pdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTggMTYgMi0yLTItMiJ9XSxbInBhdGgiLHtkOiJNMTIgMThoNCJ9XV0sZ2l0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTAgOUg4In1dLFsicGF0aCIse2Q6Ik0xNiAxM0g4In1dLFsicGF0aCIse2Q6Ik0xNiAxN0g4In1dXSxydj1bWyJwYXRoIix7ZDoiTTEyIDIyaDZhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY2In1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiJ9XSxbInBhdGgiLHtkOiJNNiAyMmgyIn1dLFsicGF0aCIse2Q6Ik03IDE0djgifV1dLGJpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTExIDE4aDIifV0sWyJwYXRoIix7ZDoiTTEyIDEydjYifV0sWyJwYXRoIix7ZDoiTTkgMTN2LS41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIC41LjV2LjUifV1dLHZpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEyIDEydjYifV0sWyJwYXRoIix7ZDoibTE1IDE1LTMtMy0zIDMifV1dLHlpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTE2IDIyYTQgNCAwIDAgMC04IDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNSIscjoiMyJ9XV0sc3Y9W1sicGF0aCIse2Q6Ik00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIn1dLFsicGF0aCIse2Q6Ik0xNCAydjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Im0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3In1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjYiLHg6IjMiLHk6IjE2IixyeDoiMSJ9XV0seGl0PVtbInBhdGgiLHtkOiJNNCAxMS41NVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMS45NSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTVhNSA1IDAgMCAxIDAgNiJ9XSxbInBhdGgiLHtkOiJNOCAxNC41MDJhLjUuNSAwIDAgMC0uODI2LS4zODFsLTEuODkzIDEuNjMxYTEgMSAwIDAgMS0uNjUxLjI0M0gzLjVhLjUuNSAwIDAgMC0uNS41MDF2My4wMDZhLjUuNSAwIDAgMCAuNS41MDFoMS4xMjlhMSAxIDAgMCAxIC42NTIuMjQzbDEuODkzIDEuNjMzYS41LjUgMCAwIDAgLjgyNi0uMzh6In1dXSxudj1bWyJwYXRoIix7ZDoiTTExIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XSxbInBhdGgiLHtkOiJtMTUgMTcgNSA1In1dLFsicGF0aCIse2Q6Im0yMCAxNy01IDUifV1dLHdpdD1bWyJwYXRoIix7ZDoiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoibTE0LjUgMTIuNS01IDUifV0sWyJwYXRoIix7ZDoibTkuNSAxMi41IDUgNSJ9XV0sTWl0PVtbInBhdGgiLHtkOiJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiJ9XSxbInBhdGgiLHtkOiJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSJ9XV0seml0PVtbInBhdGgiLHtkOiJNMTUgMmgtNGEyIDIgMCAwIDAtMiAydjExYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjgifV0sWyJwYXRoIix7ZDoiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiJ9XSxbInBhdGgiLHtkOiJNNSA3YTIgMiAwIDAgMC0yIDJ2MTFhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAxLjczMi0xIn1dXSxraXQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMyA3LjVoNCJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxOCJ9XSxbInBhdGgiLHtkOiJNMyAxNi41aDQifV0sWyJwYXRoIix7ZDoiTTE3IDN2MTgifV0sWyJwYXRoIix7ZDoiTTE3IDcuNWg0In1dLFsicGF0aCIse2Q6Ik0xNyAxNi41aDQifV1dLG92PVtbInBhdGgiLHtkOiJNMTIgMTBhMiAyIDAgMCAwLTIgMmMwIDEuMDItLjEgMi41MS0uMjYgNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTMuMTJjMCAyLjM4IDAgNi4zOC0xIDguODgifV0sWyJwYXRoIix7ZDoiTTE3LjI5IDIxLjAyYy4xMi0uNi40My0yLjMuNS0zLjAyIn1dLFsicGF0aCIse2Q6Ik0yIDEyYTEwIDEwIDAgMCAxIDE4LTYifV0sWyJwYXRoIix7ZDoiTTIgMTZoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMS44IDE2Yy4yLTIgLjEzMS01LjM1NCAwLTYifV0sWyJwYXRoIix7ZDoiTTUgMTkuNUM1LjUgMTggNiAxNSA2IDEyYTYgNiAwIDAgMSAuMzQtMiJ9XSxbInBhdGgiLHtkOiJNOC42NSAyMmMuMjEtLjY2LjQ1LTEuMzIuNTctMiJ9XSxbInBhdGgiLHtkOiJNOSA2LjhhNiA2IDAgMCAxIDkgNS4ydjIifV1dLFNpdD1bWyJwYXRoIix7ZDoiTTE1IDYuNVYzYTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzLjUifV0sWyJwYXRoIix7ZDoiTTkgMThoOCJ9XSxbInBhdGgiLHtkOiJNMTggM2gtMyJ9XSxbInBhdGgiLHtkOiJNMTEgM2E2IDYgMCAwIDAtNiA2djExIn1dLFsicGF0aCIse2Q6Ik01IDEzaDQifV0sWyJwYXRoIix7ZDoiTTE3IDEwYTQgNCAwIDAgMC04IDB2MTBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJaIn1dXSxDaXQ9W1sicGF0aCIse2Q6Ik0xOCAxMi40N3YuMDNtMC0uNXYuNDdtLS40NzUgNS4wNTZBNi43NDQgNi43NDQgMCAwIDEgMTUgMThjLTMuNTYgMC03LjU2LTIuNTMtOC41LTYgLjM0OC0xLjI4IDEuMTE0LTIuNDMzIDIuMTIxLTMuMzhtMy40NDQtMi4wODhBOC44MDIgOC44MDIgMCAwIDEgMTUgNmMzLjU2IDAgNi4wNiAyLjU0IDcgNi0uMzA5IDEuMTQtLjc4NiAyLjE3Ny0xLjQxMyAzLjA1OCJ9XSxbInBhdGgiLHtkOiJNNyAxMC42N0M3IDggNS41OCA1Ljk3IDIuNzMgNS41Yy0xIDEuNS0xIDUgLjIzIDYuNS0xLjI0IDEuNS0xLjI0IDUtLjIzIDYuNUM1LjU4IDE4LjAzIDcgMTYgNyAxMy4zM203LjQ4LTQuMzcyQTkuNzcgOS43NyAwIDAgMSAxNiA2LjA3bTAgMTEuODZhOS43NyA5Ljc3IDAgMCAxLTEuNzI4LTMuNjE4In1dLFsicGF0aCIse2Q6Im0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4TTguNTMgM2g1LjI3YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNE0yIDJsMjAgMjAifV1dLF9pdD1bWyJwYXRoIix7ZDoiTTIgMTZzOS0xNSAyMC00QzExIDIzIDIgOCAyIDgifV1dLFRpdD1bWyJwYXRoIix7ZDoiTTYuNSAxMmMuOTQtMy40NiA0Ljk0LTYgOC41LTYgMy41NiAwIDYuMDYgMi41NCA3IDYtLjk0IDMuNDctMy40NCA2LTcgNnMtNy41Ni0yLjUzLTguNS02WiJ9XSxbInBhdGgiLHtkOiJNMTggMTJ2LjUifV0sWyJwYXRoIix7ZDoiTTE2IDE3LjkzYTkuNzcgOS43NyAwIDAgMSAwLTExLjg2In1dLFsicGF0aCIse2Q6Ik03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzIn1dLFsicGF0aCIse2Q6Ik0xMC40NiA3LjI2QzEwLjIgNS44OCA5LjE3IDQuMjQgOCAzaDUuOGEyIDIgMCAwIDEgMS45OCAxLjY3bC4yMyAxLjQifV0sWyJwYXRoIix7ZDoibTE2LjAxIDE3LjkzLS4yMyAxLjRBMiAyIDAgMCAxIDEzLjggMjFIOS41YTUuOTYgNS45NiAwIDAgMCAxLjQ5LTMuOTgifV1dLExpdD1bWyJwYXRoIix7ZDoibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCJ9XSxbInBhdGgiLHtkOiJNMjAuNDE0IDguNTg2IDIyIDcifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxMCIscjoiMiJ9XV0sJGl0PVtbInBhdGgiLHtkOiJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTQgMjJWNCJ9XSxbInBhdGgiLHtkOiJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3In1dXSxBaXQ9W1sicGF0aCIse2Q6Ik0xOCAyMlYyLjhhLjguOCAwIDAgMC0xLjE3LS43MUw1LjQ1IDcuNzhhLjguOCAwIDAgMCAwIDEuNDRMMTggMTUuNSJ9XV0sRGl0PVtbInBhdGgiLHtkOiJNNiAyMlYyLjhhLjguOCAwIDAgMSAxLjE3LS43MWwxMS4zOCA1LjY5YS44LjggMCAwIDEgMCAxLjQ0TDYgMTUuNSJ9XV0sRWl0PVtbInBhdGgiLHtkOiJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCJ9XV0sUGl0PVtbInBhdGgiLHtkOiJNMTIgMmMxIDMgMi41IDMuNSAzLjUgNC41QTUgNSAwIDAgMSAxNyAxMGE1IDUgMCAxIDEtMTAgMGMwLS4zIDAtLjYuMS0uOWEyIDIgMCAxIDAgMy4zLTJDOCA0LjUgMTEgMiAxMiAyWiJ9XSxbInBhdGgiLHtkOiJtNSAyMiAxNC00In1dLFsicGF0aCIse2Q6Im01IDE4IDE0IDQifV1dLElpdD1bWyJwYXRoIix7ZDoiTTEyIDNxMSA0IDQgNi41dDMgNS41YTEgMSAwIDAgMS0xNCAwIDUgNSAwIDAgMSAxLTMgMSAxIDAgMCAwIDUgMGMwLTItMS41LTMtMS41LTVxMC0yIDIuNS00In1dXSxOaXQ9W1sicGF0aCIse2Q6Ik0xMS42NTIgNkgxOCJ9XSxbInBhdGgiLHtkOiJNMTIgMTN2MSJ9XSxbInBhdGgiLHtkOiJNMTYgMTZ2NGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LThhNCA0IDAgMCAwLS44LTIuNGwtLjYtLjhBMyAzIDAgMCAxIDYgN1Y2In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTcuNjQ5IDJIMTdhMSAxIDAgMCAxIDEgMXY0YTMgMyAwIDAgMS0uNiAxLjhsLS42LjhhNCA0IDAgMCAwLS41NSAxLjAwNyJ9XV0sRml0PVtbInBhdGgiLHtkOiJNMTIgMTN2MSJ9XSxbInBhdGgiLHtkOiJNMTcgMmExIDEgMCAwIDEgMSAxdjRhMyAzIDAgMCAxLS42IDEuOGwtLjYuOEE0IDQgMCAwIDAgMTYgMTJ2OGEyIDIgMCAwIDEtMiAySDEwYTIgMiAwIDAgMS0yLTJ2LThhNCA0IDAgMCAwLS44LTIuNGwtLjYtLjhBMyAzIDAgMCAxIDYgN1YzYTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik02IDZoMTIifV1dLE9pdD1bWyJwYXRoIix7ZDoiTTEwIDJ2Mi4zNDMifV0sWyJwYXRoIix7ZDoiTTE0IDJ2Ni4zNDMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0xLjc1NS0yLjk2bDUuMjI3LTkuNTYzIn1dLFsicGF0aCIse2Q6Ik02LjQ1MyAxNUgxNSJ9XSxbInBhdGgiLHtkOiJNOC41IDJoNyJ9XV0sUml0PVtbInBhdGgiLHtkOiJNMTQgMnY2YTIgMiAwIDAgMCAuMjQ1Ljk2bDUuNTEgMTAuMDhBMiAyIDAgMCAxIDE4IDIySDZhMiAyIDAgMCAxLTEuNzU1LTIuOTZsNS41MS0xMC4wOEEyIDIgMCAwIDAgMTAgOFYyIn1dLFsicGF0aCIse2Q6Ik02LjQ1MyAxNWgxMS4wOTQifV0sWyJwYXRoIix7ZDoiTTguNSAyaDcifV1dLEJpdD1bWyJwYXRoIix7ZDoiTTEwIDJ2Ni4yOTJhNyA3IDAgMSAwIDQgMFYyIn1dLFsicGF0aCIse2Q6Ik01IDE1aDE0In1dLFsicGF0aCIse2Q6Ik04LjUgMmg3In1dXSxIaXQ9W1sicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIn1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV1dLHFpdD1bWyJwYXRoIix7ZDoiTTggM0g1YTIgMiAwIDAgMC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgzIn1dLFsicGF0aCIse2Q6Ik0xNiAzaDNhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC0zIn1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIn1dLFsicGF0aCIse2Q6Ik0xMiA4djIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiJ9XV0sVml0PVtbInBhdGgiLHtkOiJtMTcgMy01IDUtNS01aDEwIn1dLFsicGF0aCIse2Q6Im0xNyAyMS01LTUtNSA1aDEwIn1dLFsicGF0aCIse2Q6Ik00IDEySDIifV0sWyJwYXRoIix7ZDoiTTEwIDEySDgifV0sWyJwYXRoIix7ZDoiTTE2IDEyaC0yIn1dLFsicGF0aCIse2Q6Ik0yMiAxMmgtMiJ9XV0saml0PVtbInBhdGgiLHtkOiJNMjEgOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjMifV0sWyJwYXRoIix7ZDoiTTIxIDE2djNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTMifV0sWyJwYXRoIix7ZDoiTTQgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dXSxVaXQ9W1sicGF0aCIse2Q6Ik0xMiA1YTMgMyAwIDEgMSAzIDNtLTMtM2EzIDMgMCAxIDAtMyAzbTMtM3YxTTkgOGEzIDMgMCAxIDAgMyAzTTkgOGgxbTUgMGEzIDMgMCAxIDEtMyAzbTMtM2gtMW0tMiAzdi0xIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOCIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2MTIifV0sWyJwYXRoIix7ZDoiTTEyIDIyYzQuMiAwIDctMS42NjcgNy01LTQuMiAwLTcgMS42NjctNyA1WiJ9XSxbInBhdGgiLHtkOiJNMTIgMjJjLTQuMiAwLTctMS42NjctNy01IDQuMiAwIDcgMS42NjcgNyA1WiJ9XV0sV2l0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMiAxNi41QTQuNSA0LjUgMCAxIDEgNy41IDEyIDQuNSA0LjUgMCAxIDEgMTIgNy41YTQuNSA0LjUgMCAxIDEgNC41IDQuNSA0LjUgNC41IDAgMSAxLTQuNSA0LjUifV0sWyJwYXRoIix7ZDoiTTEyIDcuNVY5In1dLFsicGF0aCIse2Q6Ik03LjUgMTJIOSJ9XSxbInBhdGgiLHtkOiJNMTYuNSAxMkgxNSJ9XSxbInBhdGgiLHtkOiJNMTIgMTYuNVYxNSJ9XSxbInBhdGgiLHtkOiJtOCA4IDEuODggMS44OCJ9XSxbInBhdGgiLHtkOiJNMTQuMTIgOS44OCAxNiA4In1dLFsicGF0aCIse2Q6Im04IDE2IDEuODgtMS44OCJ9XSxbInBhdGgiLHtkOiJNMTQuMTIgMTQuMTIgMTYgMTYifV1dLEdpdD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dXSxZaXQ9W1sicGF0aCIse2Q6Ik0yIDEyaDYifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC02In1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJtMTkgOS0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Im01IDE1IDMtMy0zLTMifV1dLFppdD1bWyJwYXRoIix7ZDoiTTEyIDIydi02In1dLFsicGF0aCIse2Q6Ik0xMiA4VjIifV0sWyJwYXRoIix7ZDoiTTQgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dLFsicGF0aCIse2Q6Im0xNSAxOS0zLTMtMyAzIn1dLFsicGF0aCIse2Q6Im0xNSA1LTMgMy0zLTMifV1dLFhpdD1bWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XSxbInBhdGgiLHtkOiJtOSAxMyAyIDIgNC00In1dXSxLaXQ9W1siY2lyY2xlIix7Y3g6IjE1IixjeToiMTkiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTIwLjkgMTkuOEEyIDIgMCAwIDAgMjIgMThWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyaDUuMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTF2LTEifV0sWyJwYXRoIix7ZDoiTTE1IDE3di0yIn1dXSxRaXQ9W1sicGF0aCIse2Q6Ik0xNiAxNHYyLjJsMS42IDEifV0sWyJwYXRoIix7ZDoiTTcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE2IixyOiI2In1dXSxKaXQ9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTIgMTBoMjAifV1dLGVydD1bWyJwYXRoIix7ZDoiTTEwIDEwLjUgOCAxM2wyIDIuNSJ9XSxbInBhdGgiLHtkOiJtMTQgMTAuNSAyIDIuNS0yIDIuNSJ9XSxbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6In1dXSxsdj1bWyJwYXRoIix7ZDoiTTEwLjMgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjk4YTIgMiAwIDAgMSAxLjY5LjlsLjY2IDEuMkEyIDIgMCAwIDAgMTIgNmg4YTIgMiAwIDAgMSAyIDJ2My4zIn1dLFsicGF0aCIse2Q6Im0xNC4zMDUgMTkuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV1dLHRydD1bWyJwYXRoIix7ZDoiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiMSJ9XV0sYXJ0PVtbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIn1dLFsicGF0aCIse2Q6Ik0xMiAxMHY2In1dLFsicGF0aCIse2Q6Im0xNSAxMy0zIDMtMy0zIn1dXSxpcnQ9W1sicGF0aCIse2Q6Ik0xOCAxOWE1IDUgMCAwIDEtNS01djgifV0sWyJwYXRoIix7ZDoiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnY1In1dLFsiY2lyY2xlIix7Y3g6IjEzIixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMjAiLGN5OiIxOSIscjoiMiJ9XV0scnJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiIyIn1dLFsicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTE0IDEzaDMifV0sWyJwYXRoIix7ZDoiTTcgMTNoMyJ9XV0sc3J0PVtbInBhdGgiLHtkOiJNMTAuNjM4IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2My40MTcifV0sWyJwYXRoIix7ZDoiTTE0LjYyIDE4LjhBMi4yNSAyLjI1IDAgMSAxIDE4IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoifV1dLG5ydD1bWyJwYXRoIix7ZDoiTTIgOVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTEifV0sWyJwYXRoIix7ZDoiTTIgMTNoMTAifV0sWyJwYXRoIix7ZDoibTkgMTYgMy0zLTMtMyJ9XV0sb3J0PVtbInBhdGgiLHtkOiJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiJ9XSxbInBhdGgiLHtkOiJNOCAxMHY0In1dLFsicGF0aCIse2Q6Ik0xMiAxMHYyIn1dLFsicGF0aCIse2Q6Ik0xNiAxMHY2In1dXSxscnQ9W1sicGF0aCIse2Q6Ik0xMyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEuMzYifV0sWyJwYXRoIix7ZDoiTTE5IDEydjYifV0sWyJwYXRoIix7ZDoiTTE5IDE0aDIifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIyMCIscjoiMiJ9XV0sY3J0PVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI1Iix4OiIxNCIseToiMTciLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xMCAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjIuNSJ9XSxbInBhdGgiLHtkOiJNMjAgMTd2LTJhMiAyIDAgMSAwLTQgMHYyIn1dXSxkcnQ9W1sicGF0aCIse2Q6Ik05IDEzaDYifV0sWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XV0scHJ0PVtbInBhdGgiLHtkOiJtNiAxNCAxLjQ1LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTUgNmEyIDIgMCAwIDEtMS45NCAxLjVINGEyIDIgMCAwIDEtMi0yVjVjMC0xLjEuOS0yIDItMmgzLjkzYTIgMiAwIDAgMSAxLjY2LjlsLjgyIDEuMmEyIDIgMCAwIDAgMS42Ni45SDE4YTIgMiAwIDAgMSAyIDJ2MiJ9XSxbImNpcmNsZSIse2N4OiIxNCIsY3k6IjE1IixyOiIxIn1dXSxocnQ9W1sicGF0aCIse2Q6Im02IDE0IDEuNS0yLjlBMiAyIDAgMCAxIDkuMjQgMTBIMjBhMiAyIDAgMCAxIDEuOTQgMi41bC0xLjU0IDZhMiAyIDAgMCAxLTEuOTUgMS41SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDE4YTIgMiAwIDAgMSAyIDJ2MiJ9XV0sdXJ0PVtbInBhdGgiLHtkOiJNMiA3LjVWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0xLjUifV0sWyJwYXRoIix7ZDoiTTIgMTNoMTAifV0sWyJwYXRoIix7ZDoibTUgMTAtMyAzIDMgMyJ9XV0sY3Y9W1sicGF0aCIse2Q6Ik0yIDExLjVWNWEyIDIgMCAwIDEgMi0yaDMuOWMuNyAwIDEuMy4zIDEuNy45bC44IDEuMmMuNC42IDEgLjkgMS43LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC05LjUifV0sWyJwYXRoIix7ZDoiTTExLjM3OCAxMy42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XV0sZnJ0PVtbInBhdGgiLHtkOiJNMTIgMTB2NiJ9XSxbInBhdGgiLHtkOiJNOSAxM2g2In1dLFsicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV1dLG1ydD1bWyJwYXRoIix7ZDoiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTV2NSJ9XV0sZ3J0PVtbImNpcmNsZSIse2N4OiIxMS41IixjeToiMTIuNSIscjoiMi41In1dLFsicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoiTTEzLjMgMTQuMyAxNSAxNiJ9XV0sYnJ0PVtbInBhdGgiLHtkOiJNMTAuNyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjQuMSJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtMS45LTEuOSJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE3IixyOiIzIn1dXSx2cnQ9W1sicGF0aCIse2Q6Ik0yIDkuMzVWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoNyJ9XSxbInBhdGgiLHtkOiJtOCAxNiAzLTMtMy0zIn1dXSx5cnQ9W1sicGF0aCIse2Q6Ik05IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2LjUifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjRoNCJ9XSxbInBhdGgiLHtkOiJtMTIgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41In1dLFsicGF0aCIse2Q6Ik0yMiAyMnYtNGgtNCJ9XSxbInBhdGgiLHtkOiJtMjIgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41In1dXSx4cnQ9W1sicGF0aCIse2Q6Ik0yMCAxMGExIDEgMCAwIDAgMS0xVjZhMSAxIDAgMCAwLTEtMWgtMi41YTEgMSAwIDAgMS0uOC0uNGwtLjktMS4yQTEgMSAwIDAgMCAxNSAzaC0yYTEgMSAwIDAgMC0xIDF2NWExIDEgMCAwIDAgMSAxWiJ9XSxbInBhdGgiLHtkOiJNMjAgMjFhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0yLjlhMSAxIDAgMCAxLS44OC0uNTVsLS40Mi0uODVhMSAxIDAgMCAwLS45Mi0uNkgxM2ExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoifV0sWyJwYXRoIix7ZDoiTTMgNWEyIDIgMCAwIDAgMiAyaDMifV0sWyJwYXRoIix7ZDoiTTMgM3YxM2EyIDIgMCAwIDAgMiAyaDMifV1dLHdydD1bWyJwYXRoIix7ZDoiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiJ9XSxbInBhdGgiLHtkOiJNMTIgMTB2NiJ9XSxbInBhdGgiLHtkOiJtOSAxMyAzLTMgMyAzIn1dXSxNcnQ9W1sicGF0aCIse2Q6Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloifV0sWyJwYXRoIix7ZDoibTkuNSAxMC41IDUgNSJ9XSxbInBhdGgiLHtkOiJtMTQuNSAxMC41LTUgNSJ9XV0senJ0PVtbInBhdGgiLHtkOiJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIn1dXSxrcnQ9W1sicGF0aCIse2Q6Ik0yMCA1YTIgMiAwIDAgMSAyIDJ2N2EyIDIgMCAwIDEtMiAySDlhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMi41YTEuNSAxLjUgMCAwIDEgMS4yLjZsLjYuOGExLjUgMS41IDAgMCAwIDEuMi42eiJ9XSxbInBhdGgiLHtkOiJNMyA4LjI2OGEyIDIgMCAwIDAtMSAxLjczOFYxOWEyIDIgMCAwIDAgMiAyaDExYTIgMiAwIDAgMCAxLjczMi0xIn1dXSxTcnQ9W1sicGF0aCIse2Q6Ik0xMiAxMkg1YTIgMiAwIDAgMC0yIDJ2NSJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxOWgzbTUtMTd2MTdoNk02IDEyVjdjMC0xLjEuOS0yIDItMmgzbDUgNSJ9XV0sQ3J0PVtbInBhdGgiLHtkOiJNNCAxNnYtMi4zOEM0IDExLjUgMi45NyAxMC41IDMgOGMuMDMtMi43MiAxLjQ5LTYgNC41LTZDOS4zNyAyIDEwIDMuOCAxMCA1LjVjMCAzLjExLTIgNS42Ni0yIDguNjhWMTZhMiAyIDAgMSAxLTQgMFoifV0sWyJwYXRoIix7ZDoiTTIwIDIwdi0yLjM4YzAtMi4xMiAxLjAzLTMuMTIgMS01LjYyLS4wMy0yLjcyLTEuNDktNi00LjUtNkMxNC42MyA2IDE0IDcuOCAxNCA5LjVjMCAzLjExIDIgNS42NiAyIDguNjhWMjBhMiAyIDAgMSAwIDQgMFoifV0sWyJwYXRoIix7ZDoiTTE2IDE3aDQifV0sWyJwYXRoIix7ZDoiTTQgMTNoNCJ9XV0sX3J0PVtbInBhdGgiLHtkOiJNNCAxNGg2In1dLFsicGF0aCIse2Q6Ik00IDJoMTAifV0sWyJyZWN0Iix7eDoiNCIseToiMTgiLHdpZHRoOiIxNiIsaGVpZ2h0OiI0IixyeDoiMSJ9XSxbInJlY3QiLHt4OiI0Iix5OiI2Iix3aWR0aDoiMTYiLGhlaWdodDoiNCIscng6IjEifV1dLFRydD1bWyJwYXRoIix7ZDoibTE1IDE3IDUtNS01LTUifV0sWyJwYXRoIix7ZDoiTTQgMTh2LTJhNCA0IDAgMCAxIDQtNGgxMiJ9XV0sTHJ0PVtbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiNiIseTI6IjYifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMiIseTE6IjE4Iix5MjoiMTgifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2Iix5MToiMiIseTI6IjIyIn1dLFsibGluZSIse3gxOiIxOCIseDI6IjE4Iix5MToiMiIseTI6IjIyIn1dXSwkcnQ9W1sicGF0aCIse2Q6Ik01IDE2VjloMTRWMkg1bDE0IDE0aC03bS03IDAgNyA3di03bS03IDBoNyJ9XV0sQXJ0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9XSxbInBhdGgiLHtkOiJNMTYgMTZzLTEuNS0yLTQtMi00IDItNCAyIn1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV1dLERydD1bWyJwYXRoIix7ZDoiTTE0IDEzaDJhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMCA0IDB2LTYuOTk4YTIgMiAwIDAgMC0uNTktMS40MkwxOCA1In1dLFsicGF0aCIse2Q6Ik0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2In1dLFsicGF0aCIse2Q6Ik0yIDIxaDEzIn1dLFsicGF0aCIse2Q6Ik0zIDloMTEifV1dLEVydD1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInJlY3QiLHt3aWR0aDoiMTAiLGhlaWdodDoiOCIseDoiNyIseToiOCIscng6IjEifV1dLFBydD1bWyJwYXRoIix7ZDoiTTEzLjM1NCAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwxLjIxOC0xLjM0OCJ9XSxbInBhdGgiLHtkOiJNMTYgNmg2In1dLFsicGF0aCIse2Q6Ik0xOSAzdjYifV1dLGR2PVtbInBhdGgiLHtkOiJNMTIuNTMxIDNIM2ExIDEgMCAwIDAtLjc0MiAxLjY3bDcuMjI1IDcuOTg5QTIgMiAwIDAgMSAxMCAxNHY2YTEgMSAwIDAgMCAuNTUzLjg5NWwyIDFBMSAxIDAgMCAwIDE0IDIxdi03YTIgMiAwIDAgMSAuNTE3LTEuMzQxbC40MjctLjQ3MyJ9XSxbInBhdGgiLHtkOiJtMTYuNSAzLjUgNSA1In1dLFsicGF0aCIse2Q6Im0yMS41IDMuNS01IDUifV1dLHB2PVtbInBhdGgiLHtkOiJNMTAgMjBhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFMMjEuNzQgNC42N0ExIDEgMCAwIDAgMjEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0eiJ9XV0sSXJ0PVtbInBhdGgiLHtkOiJNMiA3djEwIn1dLFsicGF0aCIse2Q6Ik02IDV2MTQifV0sWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjE4Iix4OiIxMCIseToiMyIscng6IjIifV1dLE5ydD1bWyJwYXRoIix7ZDoiTTIgM3YxOCJ9XSxbInJlY3QiLHt3aWR0aDoiMTIiLGhlaWdodDoiMTgiLHg6IjYiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yMiAzdjE4In1dXSxGcnQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxNCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMjFoMSJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xNCAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xOSAyMWgxIn1dXSxPcnQ9W1sicGF0aCIse2Q6Ik03IDJoMTAifV0sWyJwYXRoIix7ZDoiTTUgNmgxNCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTIiLHg6IjMiLHk6IjEwIixyeDoiMiJ9XV0sUnJ0PVtbInBhdGgiLHtkOiJNMyAyaDE4In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMiIseDoiMyIseToiNiIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgMjJoMTgifV1dLEJydD1bWyJsaW5lIix7eDE6IjYiLHgyOiIxMCIseTE6IjExIix5MjoiMTEifV0sWyJsaW5lIix7eDE6IjgiLHgyOiI4Iix5MToiOSIseTI6IjEzIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIxOC4wMSIseTE6IjEwIix5MjoiMTAifV0sWyJwYXRoIix7ZDoiTTE3LjMyIDVINi42OGE0IDQgMCAwIDAtMy45NzggMy41OWMtLjAwNi4wNTItLjAxLjEwMS0uMDE3LjE1MkMyLjYwNCA5LjQxNiAyIDE0LjQ1NiAyIDE2YTMgMyAwIDAgMCAzIDNjMSAwIDEuNS0uNSAyLTFsMS40MTQtMS40MTRBMiAyIDAgMCAxIDkuODI4IDE2aDQuMzQ0YTIgMiAwIDAgMSAxLjQxNC41ODZMMTcgMThjLjUuNSAxIDEgMiAxYTMgMyAwIDAgMCAzLTNjMC0xLjU0NS0uNjA0LTYuNTg0LS42ODUtNy4yNTgtLjAwNy0uMDUtLjAxMS0uMS0uMDE3LS4xNTFBNCA0IDAgMCAwIDE3LjMyIDV6In1dXSxIcnQ9W1sicGF0aCIse2Q6Ik0xMS4xNDYgMTUuODU0YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA4IDBsMS41NiAxLjU2QTIgMiAwIDAgMSAxNSAxOC44MjhWMjFhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xdi0yLjE3MmEyIDIgMCAwIDEgLjU4Ni0xLjQxNHoifV0sWyJwYXRoIix7ZDoiTTE4LjgyOCAxNWEyIDIgMCAwIDEtMS40MTQtLjU4NmwtMS41Ni0xLjU2YTEuMjA3IDEuMjA3IDAgMCAxIDAtMS43MDhsMS41Ni0xLjU2QTIgMiAwIDAgMSAxOC44MjggOUgyMWExIDEgMCAwIDEgMSAxdjRhMSAxIDAgMCAxLTEgMXoifV0sWyJwYXRoIix7ZDoiTTYuNTg2IDE0LjQxNEEyIDIgMCAwIDEgNS4xNzIgMTVIM2ExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTFoMi4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwxLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwOHoifV0sWyJwYXRoIix7ZDoiTTkgM2ExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYyLjE3MmEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtMS41NiAxLjU2YTEuMjA3IDEuMjA3IDAgMCAxLTEuNzA4IDBsLTEuNTYtMS41NkEyIDIgMCAwIDEgOSA1LjE3MnoifV1dLHFydD1bWyJsaW5lIix7eDE6IjYiLHgyOiIxMCIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjgiLHgyOiI4Iix5MToiMTAiLHkyOiIxNCJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIxNS4wMSIseTE6IjEzIix5MjoiMTMifV0sWyJsaW5lIix7eDE6IjE4Iix4MjoiMTguMDEiLHkxOiIxMSIseTI6IjExIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxMiIseDoiMiIseToiNiIscng6IjIifV1dLFZydD1bWyJwYXRoIix7ZDoibTEyIDE0IDQtNCJ9XSxbInBhdGgiLHtkOiJNMy4zNCAxOWExMCAxMCAwIDEgMSAxNy4zMiAwIn1dXSxqcnQ9W1sicGF0aCIse2Q6Im0xNCAxMy04LjM4MSA4LjM4YTEgMSAwIDAgMS0zLjAwMS0zbDguMzg0LTguMzgxIn1dLFsicGF0aCIse2Q6Im0xNiAxNiA2LTYifV0sWyJwYXRoIix7ZDoibTIxLjUgMTAuNS04LTgifV0sWyJwYXRoIix7ZDoibTggOCA2LTYifV0sWyJwYXRoIix7ZDoibTguNSA3LjUgOCA4In1dXSxVcnQ9W1sicGF0aCIse2Q6Ik0xMC41IDMgOCA5bDQgMTMgNC0xMy0yLjUtNiJ9XSxbInBhdGgiLHtkOiJNMTcgM2EyIDIgMCAwIDEgMS42LjhsMyA0YTIgMiAwIDAgMSAuMDEzIDIuMzgybC03Ljk5IDEwLjk4NmEyIDIgMCAwIDEtMy4yNDcgMGwtNy45OS0xMC45ODZBMiAyIDAgMCAxIDIuNCA3LjhsMi45OTgtMy45OTdBMiAyIDAgMCAxIDcgM3oifV0sWyJwYXRoIix7ZDoiTTIgOWgyMCJ9XV0sV3J0PVtbInBhdGgiLHtkOiJNMTEuNSAyMWE3LjUgNy41IDAgMSAxIDcuMzUtOSJ9XSxbInBhdGgiLHtkOiJNMTMgMTJWMyJ9XSxbInBhdGgiLHtkOiJNNCAyMWgxNiJ9XSxbInBhdGgiLHtkOiJNOSAxMlYzIn1dXSxHcnQ9W1sicGF0aCIse2Q6Ik05IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAyYTggOCAwIDAgMC04IDh2MTJsMy0zIDIuNSAyLjVMMTIgMTlsMi41IDIuNUwxNyAxOWwzIDNWMTBhOCA4IDAgMCAwLTgtOHoifV1dLFlydD1bWyJwYXRoIix7ZDoiTTE1IDZhOSA5IDAgMCAwLTkgOVYzIn1dLFsicGF0aCIse2Q6Ik0yMSAxOGgtNiJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjYiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE4IixyOiIzIn1dXSxacnQ9W1sicGF0aCIse2Q6Ik02IDN2MTIifV0sWyJwYXRoIix7ZDoiTTE4IDlhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiJ9XSxbInBhdGgiLHtkOiJNNiAyMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6In1dLFsicGF0aCIse2Q6Ik0xNSA2YTkgOSAwIDAgMC05IDkifV0sWyJwYXRoIix7ZDoiTTE4IDE1djYifV0sWyJwYXRoIix7ZDoiTTIxIDE4aC02In1dXSxYcnQ9W1sicmVjdCIse3g6IjMiLHk6IjgiLHdpZHRoOiIxOCIsaGVpZ2h0OiI0IixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNMTIgOHYxMyJ9XSxbInBhdGgiLHtkOiJNMTkgMTJ2N2EyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMnYtNyJ9XSxbInBhdGgiLHtkOiJNNy41IDhhMi41IDIuNSAwIDAgMSAwLTVBNC44IDggMCAwIDEgMTIgOGE0LjggOCAwIDAgMSA0LjUtNSAyLjUgMi41IDAgMCAxIDAgNSJ9XV0sS3J0PVtbInBhdGgiLHtkOiJNMTUgNmE5IDkgMCAwIDAtOSA5VjMifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiI2IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxOCIscjoiMyJ9XV0saHY9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV0sWyJsaW5lIix7eDE6IjMiLHgyOiI5Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIyMSIseTE6IjEyIix5MjoiMTIifV1dLFFydD1bWyJwYXRoIix7ZDoiTTEyIDN2NiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMiAxNXY2In1dXSxKcnQ9W1siY2lyY2xlIix7Y3g6IjUiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMiA2aDVhMiAyIDAgMCAxIDIgMnY3In1dLFsicGF0aCIse2Q6Im0xNSA5LTMtMyAzLTMifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTIgMThIN2EyIDIgMCAwIDEtMi0yVjkifV0sWyJwYXRoIix7ZDoibTkgMTUgMyAzLTMgMyJ9XV0sZXN0PVtbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3In1dLFsicGF0aCIse2Q6Ik0xMSAxOEg4YTIgMiAwIDAgMS0yLTJWOSJ9XV0sdHN0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE4IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTggOXYyYzAgLjYtLjQgMS0xIDFIN2MtLjYgMC0xLS40LTEtMVY5In1dLFsicGF0aCIse2Q6Ik0xMiAxMnYzIn1dXSxhc3Q9W1siY2lyY2xlIix7Y3g6IjUiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik01IDl2NiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTgiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTEyIDN2MTgifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNiAxNS43QTkgOSAwIDAgMCAxOSA5In1dXSxpc3Q9W1siY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTYgMjFWOWE5IDkgMCAwIDAgOSA5In1dXSxyc3Q9W1siY2lyY2xlIix7Y3g6IjUiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik01IDl2MTIifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOCIscjoiMyJ9XSxbInBhdGgiLHtkOiJtMTUgOS0zLTMgMy0zIn1dLFsicGF0aCIse2Q6Ik0xMiA2aDVhMiAyIDAgMCAxIDIgMnY3In1dXSxzc3Q9W1siY2lyY2xlIix7Y3g6IjYiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik02IDl2MTIifV0sWyJwYXRoIix7ZDoibTIxIDMtNiA2In1dLFsicGF0aCIse2Q6Im0yMSA5LTYtNiJ9XSxbInBhdGgiLHtkOiJNMTggMTEuNVYxNSJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXSxuc3Q9W1siY2lyY2xlIix7Y3g6IjUiLGN5OiI2IixyOiIzIn1dLFsicGF0aCIse2Q6Ik01IDl2MTIifV0sWyJwYXRoIix7ZDoibTE1IDktMy0zIDMtMyJ9XSxbInBhdGgiLHtkOiJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMTkgMTV2NiJ9XSxbInBhdGgiLHtkOiJNMjIgMThoLTYifV1dLG9zdD1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTYgOXYxMiJ9XSxbInBhdGgiLHtkOiJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMTggMTV2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTYifV1dLGxzdD1bWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTggNlY1In1dLFsicGF0aCIse2Q6Ik0xOCAxMXYtMSJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYiLHkxOiI5Iix5MjoiMjEifV1dLGNzdD1bWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiNiIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2NyJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYiLHkxOiI5Iix5MjoiMjEifV1dLGRzdD1bWyJwYXRoIix7ZDoiTTE1IDIydi00YTQuOCA0LjggMCAwIDAtMS0zLjVjMyAwIDYtMiA2LTUuNS4wOC0xLjI1LS4yNy0yLjQ4LTEtMy41LjI4LTEuMTUuMjgtMi4zNSAwLTMuNSAwIDAtMSAwLTMgMS41LTIuNjQtLjUtNS4zNi0uNS04IDBDNiAyIDUgMiA1IDJjLS4zIDEuMTUtLjMgMi4zNSAwIDMuNUE1LjQwMyA1LjQwMyAwIDAgMCA0IDljMCAzLjUgMyA1LjUgNiA1LjUtLjM5LjQ5LS42OCAxLjA1LS44NSAxLjY1LS4xNy42LS4yMiAxLjIzLS4xNSAxLjg1djQifV0sWyJwYXRoIix7ZDoiTTkgMThjLTQuNTEgMi01LTItNy0yIn1dXSxwc3Q9W1sicGF0aCIse2Q6Im0yMiAxMy4yOS0zLjMzLTEwYS40Mi40MiAwIDAgMC0uMTQtLjE4LjM4LjM4IDAgMCAwLS4yMi0uMTEuMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOGwtMi4yNiA2LjY3SDguMzJMNi4xIDMuMjZhLjQyLjQyIDAgMCAwLS4xLS4xOC4zOC4zOCAwIDAgMC0uMjYtLjA4LjM5LjM5IDAgMCAwLS4yMy4wNy40Mi40MiAwIDAgMC0uMTQuMThMMiAxMy4yOWEuNzQuNzQgMCAwIDAgLjI3LjgzTDEyIDIxbDkuNjktNi44OGEuNzEuNzEgMCAwIDAgLjMxLS44M1oifV1dLGhzdD1bWyJwYXRoIix7ZDoiTTUuMTE2IDQuMTA0QTEgMSAwIDAgMSA2LjExIDNoMTEuNzhhMSAxIDAgMCAxIC45OTQgMS4xMDVMMTcuMTkgMjAuMjFBMiAyIDAgMCAxIDE1LjIgMjJIOC44YTIgMiAwIDAgMS0yLTEuNzl6In1dLFsicGF0aCIse2Q6Ik02IDEyYTUgNSAwIDAgMSA2IDAgNSA1IDAgMCAwIDYgMCJ9XV0sdXN0PVtbImNpcmNsZSIse2N4OiI2IixjeToiMTUiLHI6IjQifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxNSIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTVhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0yLjUgMTMgNSA3Yy43LTEuMyAxLjQtMiAzLTIifV0sWyJwYXRoIix7ZDoiTTIxLjUgMTMgMTkgN2MtLjctMS4zLTEuNS0yLTMtMiJ9XV0sZnN0PVtbInBhdGgiLHtkOiJNMTUuNjg2IDE1QTE0LjUgMTQuNSAwIDAgMSAxMiAyMmExNC41IDE0LjUgMCAwIDEgMC0yMCAxMCAxMCAwIDEgMCA5LjU0MiAxMyJ9XSxbInBhdGgiLHtkOiJNMiAxMmg4LjUifV0sWyJwYXRoIix7ZDoiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNSIseDoiMTQiLHk6IjYiLHJ4OiIxIn1dXSxtc3Q9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dXSxnc3Q9W1sicGF0aCIse2Q6Im0xNiAzIDUgNSJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyMEExMCAxMCAwIDEgMSAxMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCA0LTEwIn1dLFsicGF0aCIse2Q6Im0yMSAzLTUgNSJ9XV0sYnN0PVtbInBhdGgiLHtkOiJNMTIgMTNWMmw4IDQtOCA0In1dLFsicGF0aCIse2Q6Ik0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5In1dLFsicGF0aCIse2Q6Ik04LjAwMiA5Ljk5N2E1IDUgMCAxIDAgOC45IDIuMDIifV1dLHZzdD1bWyJwYXRoIix7ZDoiTTIgMjFWMyJ9XSxbInBhdGgiLHtkOiJNMiA1aDE4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDIuMjYifV0sWyJwYXRoIix7ZDoiTTcgMTd2M2ExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMXYtMyJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjExIixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjgiLGN5OiIxMSIscjoiMiJ9XV0seXN0PVtbInBhdGgiLHtkOiJNMjEuNDIgMTAuOTIyYTEgMSAwIDAgMC0uMDE5LTEuODM4TDEyLjgzIDUuMThhMiAyIDAgMCAwLTEuNjYgMEwyLjYgOS4wOGExIDEgMCAwIDAgMCAxLjgzMmw4LjU3IDMuOTA4YTIgMiAwIDAgMCAxLjY2IDB6In1dLFsicGF0aCIse2Q6Ik0yMiAxMHY2In1dLFsicGF0aCIse2Q6Ik02IDEyLjVWMTZhNiAzIDAgMCAwIDEyIDB2LTMuNSJ9XV0seHN0PVtbInBhdGgiLHtkOiJNMjIgNVYybC01Ljg5IDUuODkifV0sWyJjaXJjbGUiLHtjeDoiMTYuNiIsY3k6IjE1Ljg5IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjguMTEiLGN5OiI3LjQiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTIuMzUiLGN5OiIxMS42NSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxMy45MSIsY3k6IjUuODUiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiMTguMTUiLGN5OiIxMC4wOSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI2LjU2IixjeToiMTMuMiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxMC44IixjeToiMTcuNDQiLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE5IixyOiIzIn1dXSx1dj1bWyJwYXRoIix7ZDoiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMifV0sWyJwYXRoIix7ZDoibTE2IDE5IDIgMiA0LTQifV1dLGZ2PVtbInBhdGgiLHtkOiJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTloNiJ9XSxbInBhdGgiLHtkOiJNMTkgMjJ2LTYifV1dLG12PVtbInBhdGgiLHtkOiJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyJ9XSxbInBhdGgiLHtkOiJtMTYgMTYgNSA1In1dLFsicGF0aCIse2Q6Im0xNiAyMSA1LTUifV1dLGd2PVtbInBhdGgiLHtkOiJNMTIgM3YxOCJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxOCJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXSx3c3Q9W1sicGF0aCIse2Q6Ik0xNSAzdjE4In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0sTWw9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XSxbInBhdGgiLHtkOiJNOSAzdjE4In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dXSxNc3Q9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjkiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjkiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjUiLGN5OiIxNSIscjoiMSJ9XV0senN0PVtbImNpcmNsZSIse2N4OiI5IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjUiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjE5IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTUiLGN5OiI1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiMTkiLHI6IjEifV1dLGtzdD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI1IixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiNSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjEyIixyOiIxIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTkiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjEifV1dLFNzdD1bWyJwYXRoIix7ZDoiTTMgN1Y1YzAtMS4xLjktMiAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYzEuMSAwIDIgLjkgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJjMCAxLjEtLjkgMi0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWMtMS4xIDAtMi0uOS0yLTJ2LTIifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNSIseDoiNyIseToiNyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNSIseDoiMTAiLHk6IjEyIixyeDoiMSJ9XV0sQ3N0PVtbInBhdGgiLHtkOiJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0In1dLFsicGF0aCIse2Q6Ik0yMC4xIDIuM2ExIDEgMCAwIDAtMS40IDBsLTEuMTE0IDEuMTE0QTIgMiAwIDAgMCAxNyA0LjgyOHYxLjM0NGEyIDIgMCAwIDEtLjU4NiAxLjQxNEEyIDIgMCAwIDEgMTcuODI4IDdoMS4zNDRhMiAyIDAgMCAwIDEuNDE0LS41ODZMMjEuNyA1LjNhMSAxIDAgMCAwIDAtMS40eiJ9XSxbInBhdGgiLHtkOiJtNiAxNiAyIDIifV0sWyJwYXRoIix7ZDoiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oifV1dLF9zdD1bWyJwYXRoIix7ZDoiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYifV0sWyJwYXRoIix7ZDoiTTEzLjE0NCAyMS4xNDRBNy4yNzQgNC4zNjUgNDUgMCAwIDIuODU2IDEwLjg1NmE3LjI3NCA0LjM2NSA0NSAwIDAgMTAuMjg4IDEwLjI4OCJ9XSxbInBhdGgiLHtkOiJNMTYuNTY1IDEwLjQzNSAxOC42IDguNGEyLjUwMSAyLjUwMSAwIDEgMCAxLjY1LTQuNjUgMi41IDIuNSAwIDEgMC00LjY2IDEuNjZsLTIuMDI0IDIuMDI1In1dLFsicGF0aCIse2Q6Im04LjUgMTYuNS0xLTEifV1dLFRzdD1bWyJwYXRoIix7ZDoiTTEyIDE2SDRhMiAyIDAgMSAxIDAtNGgxNmEyIDIgMCAxIDEgMCA0aC00LjI1In1dLFsicGF0aCIse2Q6Ik01IDEyYTIgMiAwIDAgMS0yLTIgOSA3IDAgMCAxIDE4IDAgMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNNSAxNmEyIDIgMCAwIDAtMiAyIDMgMyAwIDAgMCAzIDNoMTJhMyAzIDAgMCAwIDMtMyAyIDIgMCAwIDAtMi0ycTAgMCAwIDAifV0sWyJwYXRoIix7ZDoibTYuNjcgMTIgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiJ9XV0sTHN0PVtbInBhdGgiLHtkOiJtMTUgMTItOS4zNzMgOS4zNzNhMSAxIDAgMCAxLTMuMDAxLTNMMTIgOSJ9XSxbInBhdGgiLHtkOiJtMTggMTUgNC00In1dLFsicGF0aCIse2Q6Im0yMS41IDExLjUtMS45MTQtMS45MTRBMiAyIDAgMCAxIDE5IDguMTcydi0uMzQ0YTIgMiAwIDAgMC0uNTg2LTEuNDE0bC0xLjY1Ny0xLjY1N0E2IDYgMCAwIDAgMTIuNTE2IDNIOWwxLjI0MyAxLjI0M0E2IDYgMCAwIDEgMTIgOC40ODVWMTBsMiAyaDEuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZMMTguNSAxNC41In1dXSwkc3Q9W1sicGF0aCIse2Q6Ik0xMSAxNWgyYTIgMiAwIDEgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNyJ9XSxbInBhdGgiLHtkOiJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45In1dLFsicGF0aCIse2Q6Im0yIDE2IDYgNiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjkiLHI6IjIuOSJ9XSxbImNpcmNsZSIse2N4OiI2IixjeToiNSIscjoiMyJ9XV0sQXN0PVtbInBhdGgiLHtkOiJNMTIuMDM1IDE3LjAxMmEzIDMgMCAwIDAtMy0zbC0uMzExLS4wMDJhLjcyLjcyIDAgMCAxLS41MDUtMS4yMjlsMS4xOTUtMS4xOTVBMiAyIDAgMCAxIDEwLjgyOCAxMUgxMmEyIDIgMCAwIDAgMC00SDkuMjQzYTMgMyAwIDAgMC0yLjEyMi44NzlsLTIuNzA3IDIuNzA3QTQuODMgNC44MyAwIDAgMCAzIDE0YTggOCAwIDAgMCA4IDhoMmE4IDggMCAwIDAgOC04VjdhMiAyIDAgMSAwLTQgMHYyYTIgMiAwIDEgMCA0IDAifV0sWyJwYXRoIix7ZDoiTTEzLjg4OCA5LjY2MkEyIDIgMCAwIDAgMTcgOFY1QTIgMiAwIDEgMCAxMyA1In1dLFsicGF0aCIse2Q6Ik05IDVBMiAyIDAgMSAwIDUgNVYxMCJ9XSxbInBhdGgiLHtkOiJNOSA3VjRBMiAyIDAgMSAxIDEzIDRWNy4yNjgifV1dLGJ2PVtbInBhdGgiLHtkOiJNMTggMTEuNVY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQifV0sWyJwYXRoIix7ZDoiTTE0IDEwVjhhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIifV0sWyJwYXRoIix7ZDoiTTEwIDkuOVY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnY1In1dLFsicGF0aCIse2Q6Ik02IDE0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTggMTFhMiAyIDAgMSAxIDQgMHYzYTggOCAwIDAgMS04IDhoLTRhOCA4IDAgMCAxLTgtOCAyIDIgMCAxIDEgNCAwIn1dXSxEc3Q9W1sicGF0aCIse2Q6Ik0xMSAxNGgyYTIgMiAwIDAgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNiJ9XSxbInBhdGgiLHtkOiJtMTQuNDUgMTMuMzkgNS4wNS00LjY5NEMyMC4xOTYgOCAyMSA2Ljg1IDIxIDUuNzVhMi43NSAyLjc1IDAgMCAwLTQuNzk3LTEuODM3LjI3Ni4yNzYgMCAwIDEtLjQwNiAwQTIuNzUgMi43NSAwIDAgMCAxMSA1Ljc1YzAgMS4yLjgwMiAyLjI0OCAxLjUgMi45NDZMMTYgMTEuOTUifV0sWyJwYXRoIix7ZDoibTIgMTUgNiA2In1dLFsicGF0aCIse2Q6Im03IDIwIDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTEgMSAwIDAgMC0yLjc1LTIuOTEifV1dLHZ2PVtbInBhdGgiLHtkOiJNMTEgMTJoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTQifV0sWyJwYXRoIix7ZDoibTcgMTggMS42LTEuNGMuMy0uNC44LS42IDEuNC0uNmg0YzEuMSAwIDIuMS0uNCAyLjgtMS4ybDQuNi00LjRhMiAyIDAgMCAwLTIuNzUtMi45MWwtNC4yIDMuOSJ9XSxbInBhdGgiLHtkOiJtMiAxMyA2IDYifV1dLEVzdD1bWyJwYXRoIix7ZDoiTTE4IDEyLjVWMTBhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjEuNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTFWOWEyIDIgMCAxIDAtNCAwdjIifV0sWyJwYXRoIix7ZDoiTTEwIDEwLjVWNWEyIDIgMCAxIDAtNCAwdjkifV0sWyJwYXRoIix7ZDoibTcgMTUtMS43Ni0xLjc2YTIgMiAwIDAgMC0yLjgzIDIuODJsMy42IDMuNkM3LjUgMjEuMTQgOS4yIDIyIDEyIDIyaDJhOCA4IDAgMCAwIDgtOFY3YTIgMiAwIDEgMC00IDB2NSJ9XV0sUHN0PVtbInBhdGgiLHtkOiJNMTIgM1YyIn1dLFsicGF0aCIse2Q6Im0xNS40IDE3LjQgMy4yLTIuOGEyIDIgMCAxIDEgMi44IDIuOWwtMy42IDMuM2MtLjcuOC0xLjcgMS4yLTIuOCAxLjJoLTRjLTEuMSAwLTIuMS0uNC0yLjgtMS4ybC0xLjMwMi0xLjQ2NEExIDEgMCAwIDAgNi4xNTEgMTlINSJ9XSxbInBhdGgiLHtkOiJNMiAxNGgxMmEyIDIgMCAwIDEgMCA0aC0yIn1dLFsicGF0aCIse2Q6Ik00IDEwaDE2In1dLFsicGF0aCIse2Q6Ik01IDEwYTcgNyAwIDAgMSAxNCAwIn1dLFsicGF0aCIse2Q6Ik01IDE0djZhMSAxIDAgMCAxLTEgMUgyIn1dXSxJc3Q9W1sicGF0aCIse2Q6Ik0xOCAxMVY2YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTBWNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTAgMTAuNVY2YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnY4In1dLFsicGF0aCIse2Q6Ik0xOCA4YTIgMiAwIDEgMSA0IDB2NmE4IDggMCAwIDEtOCA4aC0yYy0yLjggMC00LjUtLjg2LTUuOTktMi4zNGwtMy42LTMuNmEyIDIgMCAwIDEgMi44My0yLjgyTDcgMTUifV1dLE5zdD1bWyJwYXRoIix7ZDoiTTIuMDQ4IDE4LjU2NkEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45NTItMi40MzRsLTItOUEyIDIgMCAwIDAgMTggOEg2YTIgMiAwIDAgMC0xLjk1MiAxLjU2NnoifV0sWyJwYXRoIix7ZDoiTTggMTFWNmE0IDQgMCAwIDEgOCAwdjUifV1dLEZzdD1bWyJwYXRoIix7ZDoibTExIDE3IDIgMmExIDEgMCAxIDAgMy0zIn1dLFsicGF0aCIse2Q6Im0xNCAxNCAyLjUgMi41YTEgMSAwIDEgMCAzLTNsLTMuODgtMy44OGEzIDMgMCAwIDAtNC4yNCAwbC0uODguODhhMSAxIDAgMSAxLTMtM2wyLjgxLTIuODFhNS43OSA1Ljc5IDAgMCAxIDcuMDYtLjg3bC40Ny4yOGEyIDIgMCAwIDAgMS40Mi4yNUwyMSA0In1dLFsicGF0aCIse2Q6Im0yMSAzIDEgMTFoLTIifV0sWyJwYXRoIix7ZDoiTTMgMyAyIDE0bDYuNSA2LjVhMSAxIDAgMSAwIDMtMyJ9XSxbInBhdGgiLHtkOiJNMyA0aDgifV1dLE9zdD1bWyJwYXRoIix7ZDoiTTEyIDJ2OCJ9XSxbInBhdGgiLHtkOiJtMTYgNi00IDQtNC00In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIxNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxOGguMDEifV1dLFJzdD1bWyJwYXRoIix7ZDoibTE2IDYtNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnY4In1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIxNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxOGguMDEifV1dLEJzdD1bWyJwYXRoIix7ZDoiTTEwIDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMi4yMTIgMTEuNTc3YTIgMiAwIDAgMC0uMjEyLjg5NlYxOGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTUuNTI3YTIgMiAwIDAgMC0uMjEyLS44OTZMMTguNTUgNS4xMUEyIDIgMCAwIDAgMTYuNzYgNEg3LjI0YTIgMiAwIDAgMC0xLjc5IDEuMTF6In1dLFsicGF0aCIse2Q6Ik0yMS45NDYgMTIuMDEzSDIuMDU0In1dLFsicGF0aCIse2Q6Ik02IDE2aC4wMSJ9XV0sSHN0PVtbInBhdGgiLHtkOiJNMTAgMTBWNWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY1In1dLFsicGF0aCIse2Q6Ik0xNCA2YTYgNiAwIDAgMSA2IDZ2MyJ9XSxbInBhdGgiLHtkOiJNNCAxNXYtM2E2IDYgMCAwIDEgNi02In1dLFsicmVjdCIse3g6IjIiLHk6IjE1Iix3aWR0aDoiMjAiLGhlaWdodDoiNCIscng6IjEifV1dLHFzdD1bWyJsaW5lIix7eDE6IjQiLHgyOiIyMCIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxNSIseTI6IjE1In1dLFsibGluZSIse3gxOiIxMCIseDI6IjgiLHkxOiIzIix5MjoiMjEifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMTQiLHkxOiIzIix5MjoiMjEifV1dLFZzdD1bWyJwYXRoIix7ZDoiTTE0IDE4YTIgMiAwIDAgMC00IDAifV0sWyJwYXRoIix7ZDoibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEifV0sWyJwYXRoIix7ZDoiTTIgMTFoMjAifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiMTgiLHI6IjMifV1dLGpzdD1bWyJwYXRoIix7ZDoibTUuMiA2LjIgMS40IDEuNCJ9XSxbInBhdGgiLHtkOiJNMiAxM2gyIn1dLFsicGF0aCIse2Q6Ik0yMCAxM2gyIn1dLFsicGF0aCIse2Q6Im0xNy40IDcuNiAxLjQtMS40In1dLFsicGF0aCIse2Q6Ik0yMiAxN0gyIn1dLFsicGF0aCIse2Q6Ik0yMiAyMUgyIn1dLFsicGF0aCIse2Q6Ik0xNiAxM2E0IDQgMCAwIDAtOCAwIn1dLFsicGF0aCIse2Q6Ik0xMiA1VjIuNSJ9XV0sVXN0PVtbInBhdGgiLHtkOiJNMTAgMTJINiJ9XSxbInBhdGgiLHtkOiJNMTAgMTVWOSJ9XSxbInBhdGgiLHtkOiJNMTQgMTQuNWEuNS41IDAgMCAwIC41LjVoMWEyLjUgMi41IDAgMCAwIDIuNS0yLjV2LTFBMi41IDIuNSAwIDAgMCAxNS41IDloLTFhLjUuNSAwIDAgMC0uNS41eiJ9XSxbInBhdGgiLHtkOiJNNiAxNVY5In1dLFsicmVjdCIse3g6IjIiLHk6IjUiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNCIscng6IjIifV1dLFdzdD1bWyJwYXRoIix7ZDoiTTIyIDlhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMSAxaDFsMiAyaDEybDItMmgxYTEgMSAwIDAgMCAxLTFaIn1dLFsicGF0aCIse2Q6Ik03LjUgMTJoOSJ9XV0sR3N0PVtbInBhdGgiLHtkOiJNNCAxMmg4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV0sWyJwYXRoIix7ZDoibTE3IDEyIDMtMnY4In1dXSxZc3Q9W1sicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTRjMC00IDQtMyA0LTYgMC0xLjUtMi0yLjUtNC0xIn1dXSxac3Q9W1sicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTIgMThWNiJ9XSxbInBhdGgiLHtkOiJNMTcuNSAxMC41YzEuNy0xIDMuNSAwIDMuNSAxLjVhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTcgMTcuNWMyIDEuNSA0IC4zIDQtMS41YTIgMiAwIDAgMC0yLTIifV1dLFhzdD1bWyJwYXRoIix7ZDoiTTEyIDE4VjYifV0sWyJwYXRoIix7ZDoiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxMHY4In1dLFsicGF0aCIse2Q6Ik00IDEyaDgifV0sWyJwYXRoIix7ZDoiTTQgMThWNiJ9XV0sS3N0PVtbInBhdGgiLHtkOiJNNCAxMmg4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV0sWyJwYXRoIix7ZDoiTTE3IDEzdi0zaDQifV0sWyJwYXRoIix7ZDoiTTE3IDE3LjdjLjQuMi44LjMgMS4zLjMgMS41IDAgMi43LTEuMSAyLjctMi41UzE5LjggMTMgMTguMyAxM0gxNyJ9XV0sUXN0PVtbInBhdGgiLHtkOiJNNCAxMmg4In1dLFsicGF0aCIse2Q6Ik00IDE4VjYifV0sWyJwYXRoIix7ZDoiTTEyIDE4VjYifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxNiIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTBjLTIgMi0zIDMuNS0zIDYifV1dLEpzdD1bWyJwYXRoIix7ZDoiTTYgMTJoMTIifV0sWyJwYXRoIix7ZDoiTTYgMjBWNCJ9XSxbInBhdGgiLHtkOiJNMTggMjBWNCJ9XV0sZW50PVtbInBhdGgiLHtkOiJNMjEgMTRoLTEuMzQzIn1dLFsicGF0aCIse2Q6Ik05LjEyOCAzLjQ3QTkgOSAwIDAgMSAyMSAxMnYzLjM0MyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMC40MTQgMjAuNDE0QTIgMiAwIDAgMSAxOSAyMWgtMWEyIDIgMCAwIDEtMi0ydi0zIn1dLFsicGF0aCIse2Q6Ik0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAyLjYzNi02LjM2NCJ9XV0sdG50PVtbInBhdGgiLHtkOiJNMyAxNGgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtN2E5IDkgMCAwIDEgMTggMHY3YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDMifV1dLGFudD1bWyJwYXRoIix7ZDoiTTEyLjQwOSA1LjgyNGMtLjcwMi43OTItMS4xNSAxLjQ5Ni0xLjQxNSAyLjE2NmwyLjE1MyAyLjE1NmEuNS41IDAgMCAxIDAgLjcwN2wtMi4yOTMgMi4yOTNhLjUuNSAwIDAgMCAwIC43MDdMMTIgMTUifV0sWyJwYXRoIix7ZDoiTTEzLjUwOCAyMC4zMTNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzcuNi42IDAgMCAwIC44MTguMDAxQTUuNSA1LjUgMCAwIDEgMjIgOS41YzAgMi4yOS0xLjUgNC0zIDUuNXoifV1dLGludD1bWyJwYXRoIix7ZDoiTTMgMTFoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTVabTAgMGE5IDkgMCAxIDEgMTggMG0wIDB2NWEyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzWiJ9XSxbInBhdGgiLHtkOiJNMjEgMTZ2MmE0IDQgMCAwIDEtNCA0aC01In1dXSxybnQ9W1sicGF0aCIse2Q6Ik0xOS40MTQgMTQuNDE0QzIxIDEyLjgyOCAyMiAxMS41IDIyIDkuNWE1LjUgNS41IDAgMCAwLTkuNTkxLTMuNjc2LjYuNiAwIDAgMS0uODE4LjAwMUE1LjUgNS41IDAgMCAwIDIgOS41YzAgMi4zIDEuNSA0IDMgNS41bDUuNTM1IDUuMzYyYTIgMiAwIDAgMCAyLjg3OS4wNTIgMi4xMiAyLjEyIDAgMCAwLS4wMDQtMyAyLjEyNCAyLjEyNCAwIDEgMCAzLTMgMi4xMjQgMi4xMjQgMCAwIDAgMy4wMDQgMCAyIDIgMCAwIDAgMC0yLjgyOGwtMS44ODEtMS44ODJhMi40MSAyLjQxIDAgMCAwLTMuNDA5IDBsLTEuNzEgMS43MWEyIDIgMCAwIDEtMi44MjggMCAyIDIgMCAwIDEgMC0yLjgyOGwyLjgyMy0yLjc2MiJ9XV0sc250PVtbInBhdGgiLHtkOiJtMTQuODc2IDE4Ljk5LTEuMzY4IDEuMzIzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjI0NCAxLjU3MiJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoNiJ9XV0sbm50PVtbInBhdGgiLHtkOiJNMTAuNSA0Ljg5M2E1LjUgNS41IDAgMCAxIDEuMDkxLjkzMS41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDEuODcyLTEuMDAyIDMuMzU2LTIuMTg3IDQuNjU1In1dLFsicGF0aCIse2Q6Im0xNi45NjcgMTYuOTY3LTMuNDU5IDMuMzQ2YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDIuNzQ3LTQuNzYxIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dLG9udD1bWyJwYXRoIix7ZDoiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUifV0sWyJwYXRoIix7ZDoiTTMuMjIgMTNIOS41bC41LTEgMiA0LjUgMi03IDEuNSAzLjVoNS4yNyJ9XV0sbG50PVtbInBhdGgiLHtkOiJtMTQuNDc5IDE5LjM3NC0uOTcxLjkzOWEyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWE1LjIgNS4yIDAgMCAxLS4yMTkgMS40OSJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoNiJ9XSxbInBhdGgiLHtkOiJNMTggMTJ2NiJ9XV0sY250PVtbInBhdGgiLHtkOiJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSJ9XV0sZG50PVtbInBhdGgiLHtkOiJNMTEgOGMyLTMtMi0zIDAtNiJ9XSxbInBhdGgiLHtkOiJNMTUuNSA4YzItMy0yLTMgMC02In1dLFsicGF0aCIse2Q6Ik02IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNiAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE2di00In1dLFsicGF0aCIse2Q6Ik0xNCAxNnYtNCJ9XSxbInBhdGgiLHtkOiJNMTggMTZ2LTQifV0sWyJwYXRoIix7ZDoiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyJ9XSxbInBhdGgiLHtkOiJNNSAyMHYyIn1dLFsicGF0aCIse2Q6Ik0xOSAyMHYyIn1dXSxwbnQ9W1sicGF0aCIse2Q6Ik0xMSAxN3Y0In1dLFsicGF0aCIse2Q6Ik0xNCAzdjhhMiAyIDAgMCAwIDIgMmg1Ljg2NSJ9XSxbInBhdGgiLHtkOiJNMTcgMTd2NCJ9XSxbInBhdGgiLHtkOiJNMTggMTdhNCA0IDAgMCAwIDQtNCA4IDYgMCAwIDAtOC02IDYgNSAwIDAgMC02IDV2M2EyIDIgMCAwIDAgMiAyeiJ9XSxbInBhdGgiLHtkOiJNMiAxMHY1In1dLFsicGF0aCIse2Q6Ik02IDNoMTYifV0sWyJwYXRoIix7ZDoiTTcgMjFoMTQifV0sWyJwYXRoIix7ZDoiTTggMTNIMiJ9XV0saG50PVtbInBhdGgiLHtkOiJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6In1dXSx1bnQ9W1sicGF0aCIse2Q6Im05IDExLTYgNnYzaDlsMy0zIn1dLFsicGF0aCIse2Q6Im0yMiAxMi00LjYgNC42YTIgMiAwIDAgMS0yLjggMGwtNS4yLTUuMmEyIDIgMCAwIDEgMC0yLjhMMTQgNCJ9XV0sZm50PVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsicGF0aCIse2Q6Ik0xMiA3djVsNCAyIn1dXSxtbnQ9W1sicGF0aCIse2Q6Ik0xMC44MiAxNi4xMmMxLjY5LjYgMy45MS43OSA1LjE4Ljg1LjU1LjAzIDEtLjQyLjk3LS45Ny0uMDYtMS4yNy0uMjYtMy41LS44NS01LjE4In1dLFsicGF0aCIse2Q6Ik0xMS41IDYuNWMxLjY0IDAgNS0uMzggNi43MS0xLjA3LjUyLS4yLjU1LS44Mi4xMi0xLjE3QTEwIDEwIDAgMCAwIDQuMjYgMTguMzNjLjM1LjQzLjk2LjQgMS4xNy0uMTIuNjktMS43MSAxLjA3LTUuMDcgMS4wNy02LjcxIDEuMzQuNDUgMy4xLjkgNC44OC42MmEuODguODggMCAwIDAgLjczLS43NGMuMy0yLjE0LS4xNS0zLjUtLjYxLTQuODgifV0sWyJwYXRoIix7ZDoiTTE1LjYyIDE2Ljk1Yy4yLjg1LjYyIDIuNzYuNSA0LjI4YS43Ny43NyAwIDAgMS0uOS43IDE2LjY0IDE2LjY0IDAgMCAxLTQuMDgtMS4zNiJ9XSxbInBhdGgiLHtkOiJNMTYuMTMgMjEuMDVjMS42NS42MyAzLjY4Ljg0IDQuODcuOTFhLjkuOSAwIDAgMCAuOTYtLjk2IDE3LjY4IDE3LjY4IDAgMCAwLS45LTQuODcifV0sWyJwYXRoIix7ZDoiTTE2Ljk0IDE1LjYyYy44Ni4yIDIuNzcuNjIgNC4yOS41YS43Ny43NyAwIDAgMCAuNy0uOSAxNi42NCAxNi42NCAwIDAgMC0xLjM2LTQuMDgifV0sWyJwYXRoIix7ZDoiTTE3Ljk5IDUuNTJhMjAuODIgMjAuODIgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0yLjMzLjItNS4zLS4zMi04LjI3LTEuNTcifV0sWyJwYXRoIix7ZDoiTTQuOTMgNC45MyAzIDNhLjcuNyAwIDAgMSAwLTEifV0sWyJwYXRoIix7ZDoiTTkuNTggMTIuMThjMS4yNCAyLjk4IDEuNzcgNS45NSAxLjU3IDguMjhhLjguOCAwIDAgMS0xLjEzLjY4IDIwLjgyIDIwLjgyIDAgMCAxLTQuNS0zLjE1In1dXSxnbnQ9W1sicGF0aCIse2Q6Ik0xMC44MiAxNi4xMmMxLjY5LjYgMy45MS43OSA1LjE4Ljg1LjI4LjAxLjUzLS4wOS43LS4yNyJ9XSxbInBhdGgiLHtkOiJNMTEuMTQgMjAuNTdjLjUyLjI0IDIuNDQgMS4xMiA0LjA4IDEuMzcuNDYuMDYuODYtLjI1LjktLjcxLjEyLTEuNTItLjMtMy40My0uNS00LjI4In1dLFsicGF0aCIse2Q6Ik0xNi4xMyAyMS4wNWMxLjY1LjYzIDMuNjguODQgNC44Ny45MWEuOS45IDAgMCAwIC43LS4yNiJ9XSxbInBhdGgiLHtkOiJNMTcuOTkgNS41MmEyMC44MyAyMC44MyAwIDAgMSAzLjE1IDQuNS44LjggMCAwIDEtLjY4IDEuMTNjLTEuMTcuMS0yLjUuMDItMy45LS4yNSJ9XSxbInBhdGgiLHtkOiJNMjAuNTcgMTEuMTRjLjI0LjUyIDEuMTIgMi40NCAxLjM3IDQuMDguMDQuMy0uMDguNTktLjMxLjc1In1dLFsicGF0aCIse2Q6Ik00LjkzIDQuOTNhMTAgMTAgMCAwIDAtLjY3IDEzLjRjLjM1LjQzLjk2LjQgMS4xNy0uMTIuNjktMS43MSAxLjA3LTUuMDcgMS4wNy02LjcxIDEuMzQuNDUgMy4xLjkgNC44OC42MmEuODUuODUgMCAwIDAgLjQ4LS4yNCJ9XSxbInBhdGgiLHtkOiJNNS41MiAxNy45OWMxLjA1Ljk1IDIuOTEgMi40MiA0LjUgMy4xNWEuOC44IDAgMCAwIDEuMTMtLjY4Yy4yLTIuMzQtLjMzLTUuMy0xLjU3LTguMjgifV0sWyJwYXRoIix7ZDoiTTguMzUgMi42OGExMCAxMCAwIDAgMSA5Ljk4IDEuNThjLjQzLjM1LjQuOTYtLjEyIDEuMTctMS41LjYtNC4zLjk4LTYuMDcgMS4wNSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSxibnQ9W1sicGF0aCIse2Q6Ik0xMiA3djQifV0sWyJwYXRoIix7ZDoiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyJ9XSxbInBhdGgiLHtkOiJNMTQgOWgtNCJ9XSxbInBhdGgiLHtkOiJNMTggMTFoMmEyIDIgMCAwIDEgMiAydjZhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2In1dXSx2bnQ9W1sicGF0aCIse2Q6Ik0xMCAyMnYtNi41NyJ9XSxbInBhdGgiLHtkOiJNMTIgMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiA3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTUuNDNWMjIifV0sWyJwYXRoIix7ZDoiTTE1IDE2YTUgNSAwIDAgMC02IDAifV0sWyJwYXRoIix7ZDoiTTE2IDExaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgN2guMDEifV0sWyJwYXRoIix7ZDoiTTggMTFoLjAxIn1dLFsicGF0aCIse2Q6Ik04IDdoLjAxIn1dLFsicmVjdCIse3g6IjQiLHk6IjIiLHdpZHRoOiIxNiIsaGVpZ2h0OiIyMCIscng6IjIifV1dLHludD1bWyJwYXRoIix7ZDoiTTUgMjJoMTQifV0sWyJwYXRoIix7ZDoiTTUgMmgxNCJ9XSxbInBhdGgiLHtkOiJNMTcgMjJ2LTQuMTcyYTIgMiAwIDAgMC0uNTg2LTEuNDE0TDEyIDEybC00LjQxNCA0LjQxNEEyIDIgMCAwIDAgNyAxNy44MjhWMjIifV0sWyJwYXRoIix7ZDoiTTcgMnY0LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNEwxMiAxMmw0LjQxNC00LjQxNEEyIDIgMCAwIDAgMTcgNi4xNzJWMiJ9XV0seG50PVtbInBhdGgiLHtkOiJNOC42MiAxMy44QTIuMjUgMi4yNSAwIDEgMSAxMiAxMC44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6In1dLFsicGF0aCIse2Q6Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6In1dXSx3bnQ9W1sicGF0aCIse2Q6Ik0xMCAxMlY4Ljk2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJWOC45NjQifV0sWyJwYXRoIix7ZDoiTTE1IDEyYTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LTJhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTguNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAyaC01YTIgMiAwIDAgMS0yLTJ2LTIifV1dLE1udD1bWyJwYXRoIix7ZDoiTTEyLjM1IDIxSDVhMiAyIDAgMCAxLTItMnYtOWEyIDIgMCAwIDEgLjcxLTEuNTNsNy02YTIgMiAwIDAgMSAyLjU4IDBsNyA2QTIgMiAwIDAgMSAyMSAxMHYyLjM1In1dLFsicGF0aCIse2Q6Ik0xNC44IDEyLjRBMSAxIDAgMCAwIDE0IDEyaC00YTEgMSAwIDAgMC0xIDF2OCJ9XSxbInBhdGgiLHtkOiJNMTUgMThoNiJ9XSxbInBhdGgiLHtkOiJNMTggMTV2NiJ9XV0sem50PVtbInBhdGgiLHtkOiJNOS41IDEzLjg2NmE0IDQgMCAwIDEgNSAuMDEifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiJ9XSxbInBhdGgiLHtkOiJNNyAxMC43NTRhOCA4IDAgMCAxIDEwIDAifV1dLHl2PVtbInBhdGgiLHtkOiJNMTUgMjF2LThhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjgifV0sWyJwYXRoIix7ZDoiTTMgMTBhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnoifV1dLHh2PVtbInBhdGgiLHtkOiJNMTIgMTdjNSAwIDgtMi42OSA4LTZINGMwIDMuMzEgMyA2IDggNm0tNCA0aDhtLTQtM3YzTTUuMTQgMTFhMy41IDMuNSAwIDEgMSA2LjcxIDAifV0sWyJwYXRoIix7ZDoiTTEyLjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIn1dLFsicGF0aCIse2Q6Ik0xNS41IDYuNWEzLjUgMy41IDAgMSAwLTcgMCJ9XV0sd3Y9W1sicGF0aCIse2Q6Im03IDExIDQuMDggMTAuMzVhMSAxIDAgMCAwIDEuODQgMEwxNyAxMSJ9XSxbInBhdGgiLHtkOiJNMTcgN0E1IDUgMCAwIDAgNyA3In1dLFsicGF0aCIse2Q6Ik0xNyA3YTIgMiAwIDAgMSAwIDRIN2EyIDIgMCAwIDEgMC00In1dXSxrbnQ9W1sicGF0aCIse2Q6Ik0xMy41IDhoLTMifV0sWyJwYXRoIix7ZDoibTE1IDItMSAyaDNhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMyJ9XSxbInBhdGgiLHtkOiJNMTYuODk5IDIyQTUgNSAwIDAgMCA3LjEgMjIifV0sWyJwYXRoIix7ZDoibTkgMiAzIDYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNSIscjoiMyJ9XV0sU250PVtbInBhdGgiLHtkOiJNMTYgMTBoMiJ9XSxbInBhdGgiLHtkOiJNMTYgMTRoMiJ9XSxbInBhdGgiLHtkOiJNNi4xNyAxNWEzIDMgMCAwIDEgNS42NiAwIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiIxMSIscjoiMiJ9XSxbInJlY3QiLHt4OiIyIix5OiI1Iix3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHJ4OiIyIn1dXSxDbnQ9W1sicGF0aCIse2Q6Ik0xMC4zIDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxMGwtMy4xLTMuMWEyIDIgMCAwIDAtMi44MTQuMDE0TDYgMjEifV0sWyJwYXRoIix7ZDoibTE0IDE5IDMgM3YtNS41In1dLFsicGF0aCIse2Q6Im0xNyAyMiAzLTMifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjkiLHI6IjIifV1dLF9udD1bWyJwYXRoIix7ZDoiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDcifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMjIiLHkxOiI1Iix5MjoiNSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSJ9XV0sVG50PVtbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dLFsicGF0aCIse2Q6Ik0xMC40MSAxMC40MWEyIDIgMCAxIDEtMi44My0yLjgzIn1dLFsibGluZSIse3gxOiIxMy41Iix4MjoiNiIseTE6IjEzLjUiLHkyOiIyMSJ9XSxbImxpbmUiLHt4MToiMTgiLHgyOiIyMSIseTE6IjEyIix5MjoiMTUifV0sWyJwYXRoIix7ZDoiTTMuNTkgMy41OUExLjk5IDEuOTkgMCAwIDAgMyA1djE0YTIgMiAwIDAgMCAyIDJoMTRjLjU1IDAgMS4wNTItLjIyIDEuNDEtLjU5In1dLFsicGF0aCIse2Q6Ik0yMSAxNVY1YTIgMiAwIDAgMC0yLTJIOSJ9XV0sTG50PVtbInBhdGgiLHtkOiJNMTUgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiJ9XSxbInBhdGgiLHtkOiJNMjEgMTIuMTdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifV0sWyJwYXRoIix7ZDoibTYgMjEgNS01In1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiIyIn1dXSwkbnQ9W1sicGF0aCIse2Q6Ik0xNiA1aDYifV0sWyJwYXRoIix7ZDoiTTE5IDJ2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41In1dLFsicGF0aCIse2Q6Im0yMSAxNS0zLjA4Ni0zLjA4NmEyIDIgMCAwIDAtMi44MjggMEw2IDIxIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI5IixyOiIyIn1dXSxBbnQ9W1sicGF0aCIse2Q6Ik0xMC4zIDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxMGwtMy4xLTMuMWEyIDIgMCAwIDAtMi44MTQuMDE0TDYgMjEifV0sWyJwYXRoIix7ZDoibTE0IDE5LjUgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTcgMjJ2LTUuNSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XV0sRG50PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSJ9XV0sRW50PVtbInBhdGgiLHtkOiJNMTYgM2g1djUifV0sWyJwYXRoIix7ZDoiTTE3IDIxaDJhMiAyIDAgMCAwIDItMiJ9XSxbInBhdGgiLHtkOiJNMjEgMTJ2MyJ9XSxbInBhdGgiLHtkOiJtMjEgMy01IDUifV0sWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTIifV0sWyJwYXRoIix7ZDoibTUgMjEgNC4xNDQtNC4xNDRhMS4yMSAxLjIxIDAgMCAxIDEuNzEyIDBMMTMgMTkifV0sWyJwYXRoIix7ZDoiTTkgM2gzIn1dLFsicmVjdCIse3g6IjMiLHk6IjExIix3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHJ4OiIxIn1dXSxQbnQ9W1sicGF0aCIse2Q6Im0yMiAxMS0xLjI5Ni0xLjI5NmEyLjQgMi40IDAgMCAwLTMuNDA4IDBMMTEgMTYifV0sWyJwYXRoIix7ZDoiTTQgOGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMiJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInJlY3QiLHt4OiI4Iix5OiIyIix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIyIn1dXSxJbnQ9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIn1dLFsicGF0aCIse2Q6Im04IDExIDQgNCA0LTQifV0sWyJwYXRoIix7ZDoiTTggNUg0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtNCJ9XV0sTm50PVtbInBvbHlsaW5lIix7cG9pbnRzOiIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTIifV0sWyJwYXRoIix7ZDoiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiJ9XV0sRm50PVtbInBhdGgiLHtkOiJNNiAzaDEyIn1dLFsicGF0aCIse2Q6Ik02IDhoMTIifV0sWyJwYXRoIix7ZDoibTYgMTMgOC41IDgifV0sWyJwYXRoIix7ZDoiTTYgMTNoMyJ9XSxbInBhdGgiLHtkOiJNOSAxM2M2LjY2NyAwIDYuNjY3LTEwIDAtMTAifV1dLE9udD1bWyJwYXRoIix7ZDoiTTYgMTZjNSAwIDctOCAxMi04YTQgNCAwIDAgMSAwIDhjLTUgMC03LTgtMTItOGE0IDQgMCAxIDAgMCA4In1dXSxSbnQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xMiAxNnYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgOGguMDEifV1dLEJudD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyA3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcgN2guMDEifV0sWyJwYXRoIix7ZDoiTTcgMTdoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNyAxN2guMDEifV1dLEhudD1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjIwIix4OiIyIix5OiIyIixyeDoiNSIscnk6IjUifV0sWyJwYXRoIix7ZDoiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3oifV0sWyJsaW5lIix7eDE6IjE3LjUiLHgyOiIxNy41MSIseTE6IjYuNSIseTI6IjYuNSJ9XV0scW50PVtbInBhdGgiLHtkOiJtMTYgMTQgNCA0LTQgNCJ9XSxbInBhdGgiLHtkOiJNMjAgMTBhOCA4IDAgMSAwLTggOGg4In1dXSxWbnQ9W1sibGluZSIse3gxOiIxOSIseDI6IjEwIix5MToiNCIseTI6IjQifV0sWyJsaW5lIix7eDE6IjE0Iix4MjoiNSIseTE6IjIwIix5MjoiMjAifV0sWyJsaW5lIix7eDE6IjE1Iix4MjoiOSIseTE6IjQiLHkyOiIyMCJ9XV0sam50PVtbInBhdGgiLHtkOiJNNCAxMGE4IDggMCAxIDEgOCA4SDQifV0sWyJwYXRoIix7ZDoibTggMjItNC00IDQtNCJ9XV0sVW50PVtbInBhdGgiLHtkOiJNMTIgOS41VjIxbTAtMTEuNUw2IDNtNiA2LjVMMTggMyJ9XSxbInBhdGgiLHtkOiJNNiAxNWgxMiJ9XSxbInBhdGgiLHtkOiJNNiAxMWgxMiJ9XV0sV250PVtbInBhdGgiLHtkOiJNMjEgMTdhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTJaIn1dLFsicGF0aCIse2Q6Ik02IDE1di0yIn1dLFsicGF0aCIse2Q6Ik0xMiAxNVY5In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNiIscjoiMyJ9XV0sR250PVtbInBhdGgiLHtkOiJNNSAzdjE0In1dLFsicGF0aCIse2Q6Ik0xMiAzdjgifV0sWyJwYXRoIix7ZDoiTTE5IDN2MTgifV1dLFludD1bWyJwYXRoIix7ZDoiTTE4IDE3YTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDAgMi0yeiJ9XSxbInBhdGgiLHtkOiJNMjAuOTcgMy42MWEuNDUuNDUgMCAwIDAtLjU4LS41OEMxMC4yIDYuNiA2LjYgMTAuMiAzLjAzIDIwLjM5YS40NS40NSAwIDAgMCAuNTguNThDMTMuOCAxNy40IDE3LjQgMTMuOCAyMC45NyAzLjYxIn1dLFsicGF0aCIse2Q6Im02LjcwNyA2LjcwNyAxMC41ODYgMTAuNTg2In1dLFsicGF0aCIse2Q6Ik03IDVhMiAyIDAgMSAwLTIgMmgxYTEgMSAwIDAgMCAxLTF6In1dXSxabnQ9W1sicGF0aCIse2Q6Ik0yLjU4NiAxNy40MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTRhNi41IDYuNSAwIDEgMC00LTR6In1dLFsiY2lyY2xlIix7Y3g6IjE2LjUiLGN5OiI3LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV1dLFhudD1bWyJwYXRoIix7ZDoiTTEyLjQgMi43YTIuNSAyLjUgMCAwIDEgMy40IDBsNS41IDUuNWEyLjUgMi41IDAgMCAxIDAgMy40bC0zLjcgMy43YTIuNSAyLjUgMCAwIDEtMy40IDBMOC43IDkuOGEyLjUgMi41IDAgMCAxIDAtMy40eiJ9XSxbInBhdGgiLHtkOiJtMTQgNyAzIDMifV0sWyJwYXRoIix7ZDoibTkuNCAxMC42LTYuODE0IDYuODE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0In1dXSxLbnQ9W1sicGF0aCIse2Q6Im0xNS41IDcuNSAyLjMgMi4zYTEgMSAwIDAgMCAxLjQgMGwyLjEtMi4xYTEgMSAwIDAgMCAwLTEuNEwxOSA0In1dLFsicGF0aCIse2Q6Im0yMSAyLTkuNiA5LjYifV0sWyJjaXJjbGUiLHtjeDoiNy41IixjeToiMTUuNSIscjoiNS41In1dXSxRbnQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTYgOGg0In1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTggOGguMDEifV0sWyJwYXRoIix7ZDoiTTIgMTJoMjAifV0sWyJwYXRoIix7ZDoiTTYgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTAgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTggMTJ2NCJ9XV0sSm50PVtbInBhdGgiLHtkOiJNIDIwIDQgQTIgMiAwIDAgMSAyMiA2In1dLFsicGF0aCIse2Q6Ik0gMjIgNiBMIDIyIDE2LjQxIn1dLFsicGF0aCIse2Q6Ik0gNyAxNiBMIDE2IDE2In1dLFsicGF0aCIse2Q6Ik0gOS42OSA0IEwgMjAgNCJ9XSxbInBhdGgiLHtkOiJNMTQgOGguMDEifV0sWyJwYXRoIix7ZDoiTTE4IDhoLjAxIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIifV0sWyJwYXRoIix7ZDoiTTYgOGguMDEifV0sWyJwYXRoIix7ZDoiTTggMTJoLjAxIn1dXSxlb3Q9W1sicGF0aCIse2Q6Ik0xMCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNNiA4aC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAxNmgxMCJ9XSxbInBhdGgiLHtkOiJNOCAxMmguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE2Iix4OiIyIix5OiI0IixyeDoiMiJ9XV0sdG90PVtbInBhdGgiLHtkOiJNMTIgMnY1In1dLFsicGF0aCIse2Q6Ik0xNC44MjkgMTUuOTk4YTMgMyAwIDEgMS01LjY1OCAwIn1dLFsicGF0aCIse2Q6Ik0yMC45MiAxNC42MDZBMSAxIDAgMCAxIDIwIDE2SDRhMSAxIDAgMCAxLS45Mi0xLjM5NGwzLTdBMSAxIDAgMCAxIDcgN2gxMGExIDEgMCAwIDEgLjkyLjYwNnoifV1dLGFvdD1bWyJwYXRoIix7ZDoiTTEwLjI5MyAyLjI5M2ExIDEgMCAwIDEgMS40MTQgMGwyLjUgMi41IDUuOTk0IDEuMjI3YTEgMSAwIDAgMSAuNTA2IDEuNjg3bC03IDdhMSAxIDAgMCAxLTEuNjg3LS41MDZsLTEuMjI3LTUuOTk0LTIuNS0yLjVhMSAxIDAgMCAxIDAtMS40MTR6In1dLFsicGF0aCIse2Q6Im0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQifV0sWyJwYXRoIix7ZDoiTTMgMjBhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXoifV0sWyJwYXRoIix7ZDoibTkuMDg2IDYuNS00Ljc5MyA0Ljc5M2ExIDEgMCAwIDAtLjE4IDEuMTdMNyAxOCJ9XV0saW90PVtbInBhdGgiLHtkOiJNMTIgMTB2MTIifV0sWyJwYXRoIix7ZDoiTTE3LjkyOSA3LjYyOUExIDEgMCAwIDEgMTcgOUg3YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgOSAyaDZhMSAxIDAgMCAxIC45MjguNjI5eiJ9XSxbInBhdGgiLHtkOiJNOSAyMmg2In1dXSxyb3Q9W1sicGF0aCIse2Q6Ik0xOS45MjkgMTguNjI5QTEgMSAwIDAgMSAxOSAyMEg5YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgMTEgMTNoNmExIDEgMCAwIDEgLjkyOC42Mjl6In1dLFsicGF0aCIse2Q6Ik02IDNhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMXoifV0sWyJwYXRoIix7ZDoiTTggNmg0YTIgMiAwIDAgMSAyIDJ2NSJ9XV0sc290PVtbInBhdGgiLHtkOiJNMTkuOTI5IDkuNjI5QTEgMSAwIDAgMSAxOSAxMUg5YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgMTEgNGg2YTEgMSAwIDAgMSAuOTI4LjYyOXoifV0sWyJwYXRoIix7ZDoiTTYgMTVhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik04IDE4aDRhMiAyIDAgMCAwIDItMnYtNSJ9XV0sbm90PVtbInBhdGgiLHtkOiJNMTIgMTJ2NiJ9XSxbInBhdGgiLHtkOiJNNC4wNzcgMTAuNjE1QTEgMSAwIDAgMCA1IDEyaDE0YTEgMSAwIDAgMCAuOTIzLTEuMzg1bC0zLjA3Ny03LjM4NEEyIDIgMCAwIDAgMTUgMkg5YTIgMiAwIDAgMC0xLjg0NiAxLjIzWiJ9XSxbInBhdGgiLHtkOiJNOCAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xeiJ9XV0sb290PVtbInBhdGgiLHtkOiJNMTAgMTh2LTcifV0sWyJwYXRoIix7ZDoiTTExLjEyIDIuMTk4YTIgMiAwIDAgMSAxLjc2LjAwNmw3Ljg2NiAzLjg0N2MuNDc2LjIzMy4zMS45NDktLjIyLjk0OUgzLjQ3NGMtLjUzIDAtLjY5NS0uNzE2LS4yMi0uOTQ5eiJ9XSxbInBhdGgiLHtkOiJNMTQgMTh2LTcifV0sWyJwYXRoIix7ZDoiTTE4IDE4di03In1dLFsicGF0aCIse2Q6Ik0zIDIyaDE4In1dLFsicGF0aCIse2Q6Ik02IDE4di03In1dXSxsb3Q9W1sicGF0aCIse2Q6Im0xMiA4IDYtMy02LTN2MTAifV0sWyJwYXRoIix7ZDoibTggMTEuOTktNS41IDMuMTRhMSAxIDAgMCAwIDAgMS43NGw4LjUgNC44NmEyIDIgMCAwIDAgMiAwbDguNS00Ljg2YTEgMSAwIDAgMCAwLTEuNzRMMTYgMTIifV0sWyJwYXRoIix7ZDoibTYuNDkgMTIuODUgMTEuMDIgNi4zIn1dLFsicGF0aCIse2Q6Ik0xNy41MSAxMi44NSA2LjUgMTkuMTUifV1dLGNvdD1bWyJwYXRoIix7ZDoibTUgOCA2IDYifV0sWyJwYXRoIix7ZDoibTQgMTQgNi02IDItMyJ9XSxbInBhdGgiLHtkOiJNMiA1aDEyIn1dLFsicGF0aCIse2Q6Ik03IDJoMSJ9XSxbInBhdGgiLHtkOiJtMjIgMjItNS0xMC01IDEwIn1dLFsicGF0aCIse2Q6Ik0xNCAxOGg2In1dXSxkb3Q9W1sicGF0aCIse2Q6Ik0yIDIwaDIwIn1dLFsicGF0aCIse2Q6Im05IDEwIDIgMiA0LTQifV0sWyJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjEyIixyeDoiMiJ9XV0sTXY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMiIseDoiMyIseToiNCIscng6IjIiLHJ5OiIyIn1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyMCIseTI6IjIwIn1dXSxwb3Q9W1sicGF0aCIse2Q6Ik0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoiTTIwLjA1NCAxNS45ODdIMy45NDYifV1dLGhvdD1bWyJwYXRoIix7ZDoiTTcgMjJhNSA1IDAgMCAxLTItNCJ9XSxbInBhdGgiLHtkOiJNNyAxNi45M2MuOTYuNDMgMS45Ni43NCAyLjk5LjkxIn1dLFsicGF0aCIse2Q6Ik0zLjM0IDE0QTYuOCA2LjggMCAwIDEgMiAxMGMwLTQuNDIgNC40OC04IDEwLThzMTAgMy41OCAxMCA4YTcuMTkgNy4xOSAwIDAgMS0uMzMgMiJ9XSxbInBhdGgiLHtkOiJNNSAxOGEyIDIgMCAxIDAgMC00IDIgMiAwIDAgMCAwIDR6In1dLFsicGF0aCIse2Q6Ik0xNC4zMyAyMmgtLjA5YS4zNS4zNSAwIDAgMS0uMjQtLjMydi0xMGEuMzQuMzQgMCAwIDEgLjMzLS4zNGMuMDggMCAuMTUuMDMuMjEuMDhsNy4zNCA2YS4zMy4zMyAwIDAgMS0uMjEuNTloLTQuNDlsLTIuNTcgMy44NWEuMzUuMzUgMCAwIDEtLjI4LjE0eiJ9XV0sdW90PVtbInBhdGgiLHtkOiJNMy43MDQgMTQuNDY3YTEwIDggMCAxIDEgMy4xMTUgMi4zNzUifV0sWyJwYXRoIix7ZDoiTTcgMjJhNSA1IDAgMCAxLTItMy45OTQifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE2IixyOiIyIn1dXSxmb3Q9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIn1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV1dLG1vdD1bWyJwYXRoIix7ZDoiTTEzIDEzLjc0YTIgMiAwIDAgMS0yIDBMMi41IDguODdhMSAxIDAgMCAxIDAtMS43NEwxMSAyLjI2YTIgMiAwIDAgMSAyIDBsOC41IDQuODdhMSAxIDAgMCAxIDAgMS43NHoifV0sWyJwYXRoIix7ZDoibTIwIDE0LjI4NSAxLjUuODQ1YTEgMSAwIDAgMSAwIDEuNzRMMTMgMjEuNzRhMiAyIDAgMCAxLTIgMGwtOC41LTQuODdhMSAxIDAgMCAxIDAtMS43NGwxLjUtLjg0NSJ9XV0sZ290PVtbInBhdGgiLHtkOiJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6In1dLFsicGF0aCIse2Q6Ik0xNiAxN2g2In1dLFsicGF0aCIse2Q6Ik0xOSAxNHY2In1dLFsicGF0aCIse2Q6Ik0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4In1dLFsicGF0aCIse2Q6Ik0yIDE3YTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGwyLjExNi0uOTYyIn1dXSx6dj1bWyJwYXRoIix7ZDoiTTEyLjgzIDIuMThhMiAyIDAgMCAwLTEuNjYgMEwyLjYgNi4wOGExIDEgMCAwIDAgMCAxLjgzbDguNTggMy45MWEyIDIgMCAwIDAgMS42NiAwbDguNTgtMy45YTEgMSAwIDAgMCAwLTEuODN6In1dLFsicGF0aCIse2Q6Ik0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTIifV0sWyJwYXRoIix7ZDoiTTIgMTdhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDguNTgtMy45QTEgMSAwIDAgMCAyMiAxNyJ9XV0sYm90PVtbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI5Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI1Iix4OiIxNCIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiOSIseDoiMTQiLHk6IjEyIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI1Iix4OiIzIix5OiIxNiIscng6IjEifV1dLHZvdD1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMyIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMTQiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjE0Iix5OiIxNCIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMyIseToiMTQiLHJ4OiIxIn1dXSx5b3Q9W1sicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjMiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjMiLHk6IjE0IixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNMTQgNGg3In1dLFsicGF0aCIse2Q6Ik0xNCA5aDcifV0sWyJwYXRoIix7ZDoiTTE0IDE1aDcifV0sWyJwYXRoIix7ZDoiTTE0IDIwaDcifV1dLHhvdD1bWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI3IixoZWlnaHQ6IjciLHg6IjE0Iix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI3Iix4OiIxNCIseToiMTQiLHJ4OiIxIn1dXSx3b3Q9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiI3Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiI3Iix4OiIzIix5OiIxNCIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjciLGhlaWdodDoiNyIseDoiMTQiLHk6IjE0IixyeDoiMSJ9XV0sTW90PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiNyIseDoiMyIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjkiLGhlaWdodDoiNyIseDoiMyIseToiMTQiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI1IixoZWlnaHQ6IjciLHg6IjE2Iix5OiIxNCIscng6IjEifV1dLHpvdD1bWyJwYXRoIix7ZDoiTTExIDIwQTcgNyAwIDAgMSA5LjggNi4xQzE1LjUgNSAxNyA0LjQ4IDE5IDJjMSAyIDIgNC4xOCAyIDggMCA1LjUtNC43OCAxMC0xMCAxMFoifV0sWyJwYXRoIix7ZDoiTTIgMjFjMC0zIDEuODUtNS4zNiA1LjA4LTZDOS41IDE0LjUyIDEyIDEzIDEzIDEyIn1dXSxrb3Q9W1sicGF0aCIse2Q6Ik0yIDIyYzEuMjUtLjk4NyAyLjI3LTEuOTc1IDMuOS0yLjJhNS41NiA1LjU2IDAgMCAxIDMuOCAxLjUgNCA0IDAgMCAwIDYuMTg3LTIuMzUzIDMuNSAzLjUgMCAwIDAgMy42OS01LjExNkEzLjUgMy41IDAgMCAwIDIwLjk1IDggMy41IDMuNSAwIDEgMCAxNiAzLjA1YTMuNSAzLjUgMCAwIDAtNS44MzEgMS4zNzMgMy41IDMuNSAwIDAgMC01LjExNiAzLjY5IDQgNCAwIDAgMC0yLjM0OCA2LjE1NUMzLjQ5OSAxNS40MiA0LjQwOSAxNi43MTIgNC4yIDE4LjEgMy45MjYgMTkuNzQzIDMuMDE0IDIwLjczMiAyIDIyIn1dLFsicGF0aCIse2Q6Ik0yIDIyIDE3IDcifV1dLFNvdD1bWyJwYXRoIix7ZDoiTTE2IDEyaDNhMiAyIDAgMCAwIDEuOTAyLTEuMzhsMS4wNTYtMy4zMzNBMSAxIDAgMCAwIDIxIDZIM2ExIDEgMCAwIDAtLjk1OCAxLjI4N2wxLjA1NiAzLjMzNEEyIDIgMCAwIDAgNSAxMmgzIn1dLFsicGF0aCIse2Q6Ik0xOCA2VjNhMSAxIDAgMCAwLTEtMWgtMyJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiIxMiIseDoiOCIseToiMTAiLHJ4OiIxIn1dXSxDb3Q9W1sicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNyAzdjE4In1dLFsicGF0aCIse2Q6Ik0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIn1dXSxfb3Q9W1sicGF0aCIse2Q6Im0xNiA2IDQgMTQifV0sWyJwYXRoIix7ZDoiTTEyIDZ2MTQifV0sWyJwYXRoIix7ZDoiTTggOHYxMiJ9XSxbInBhdGgiLHtkOiJNNCA0djE2In1dXSxUb3Q9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgNC4yNCA0LjI0In1dLFsicGF0aCIse2Q6Im0xNC44MyA5LjE3IDQuMjQtNC4yNCJ9XSxbInBhdGgiLHtkOiJtMTQuODMgMTQuODMgNC4yNCA0LjI0In1dLFsicGF0aCIse2Q6Im05LjE3IDE0LjgzLTQuMjQgNC4yNCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dXSxMb3Q9W1sicGF0aCIse2Q6Ik0xNCAxMmgydjgifV0sWyJwYXRoIix7ZDoiTTE0IDIwaDQifV0sWyJwYXRoIix7ZDoiTTYgMTJoNCJ9XSxbInBhdGgiLHtkOiJNNiAyMGg0In1dLFsicGF0aCIse2Q6Ik04IDIwVjhhNCA0IDAgMCAxIDcuNDY0LTIifV1dLCRvdD1bWyJwYXRoIix7ZDoiTTE2LjggMTEuMmMuOC0uOSAxLjItMiAxLjItMy4yYTYgNiAwIDAgMC05LjMtNSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik02LjMgNi4zYTQuNjcgNC42NyAwIDAgMCAxLjIgNS4yYy43LjcgMS4zIDEuNSAxLjUgMi41In1dLFsicGF0aCIse2Q6Ik05IDE4aDYifV0sWyJwYXRoIix7ZDoiTTEwIDIyaDQifV1dLEFvdD1bWyJwYXRoIix7ZDoiTTE1IDE0Yy4yLTEgLjctMS43IDEuNS0yLjUgMS0uOSAxLjUtMi4yIDEuNS0zLjVBNiA2IDAgMCAwIDYgOGMwIDEgLjIgMi4yIDEuNSAzLjUuNy43IDEuMyAxLjUgMS41IDIuNSJ9XSxbInBhdGgiLHtkOiJNOSAxOGg2In1dLFsicGF0aCIse2Q6Ik0xMCAyMmg0In1dXSxEb3Q9W1sicGF0aCIse2Q6Ik03IDMuNWM1LTIgNyAyLjUgMyA0QzEuNSAxMCAyIDE1IDUgMTZjNSAyIDktMTAgMTQtN3MuNSAxMy41LTQgMTJjLTUtMi41LjUtMTEgNi0yIn1dXSxFb3Q9W1sicGF0aCIse2Q6Ik05IDE3SDdBNSA1IDAgMCAxIDcgNyJ9XSxbInBhdGgiLHtkOiJNMTUgN2gyYTUgNSAwIDAgMSA0IDgifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxMiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV0sUG90PVtbInBhdGgiLHtkOiJNOSAxN0g3QTUgNSAwIDAgMSA3IDdoMiJ9XSxbInBhdGgiLHtkOiJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxMiIseTI6IjEyIn1dXSxJb3Q9W1sicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIn1dLFsicGF0aCIse2Q6Ik0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MSJ9XV0sTm90PVtbInBhdGgiLHtkOiJNMTYgOGE2IDYgMCAwIDEgNiA2djdoLTR2LTdhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAydjdoLTR2LTdhNiA2IDAgMCAxIDYtNnoifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjkifV0sWyJjaXJjbGUiLHtjeDoiNCIsY3k6IjQiLHI6IjIifV1dLEZvdD1bWyJwYXRoIix7ZDoiTTE2IDVIMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTEgMTlIMyJ9XSxbInBhdGgiLHtkOiJtMTUgMTggMiAyIDQtNCJ9XV0sT290PVtbInBhdGgiLHtkOiJNMTMgNWg4In1dLFsicGF0aCIse2Q6Ik0xMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMyAxOWg4In1dLFsicGF0aCIse2Q6Im0zIDE3IDIgMiA0LTQifV0sWyJwYXRoIix7ZDoibTMgNyAyIDIgNC00In1dXSxSb3Q9W1sicGF0aCIse2Q6Ik0zIDVoOCJ9XSxbInBhdGgiLHtkOiJNMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0zIDE5aDgifV0sWyJwYXRoIix7ZDoibTE1IDUgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJtMTUgMTkgMy0zIDMgMyJ9XV0sQm90PVtbInBhdGgiLHtkOiJNMyA1aDgifV0sWyJwYXRoIix7ZDoiTTMgMTJoOCJ9XSxbInBhdGgiLHtkOiJNMyAxOWg4In1dLFsicGF0aCIse2Q6Im0xNSA4IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoibTE1IDE2IDMgMyAzLTMifV1dLEhvdD1bWyJwYXRoIix7ZDoiTTEwIDVoMTEifV0sWyJwYXRoIix7ZDoiTTEwIDEyaDExIn1dLFsicGF0aCIse2Q6Ik0xMCAxOWgxMSJ9XSxbInBhdGgiLHtkOiJtMyAxMCAzLTMtMy0zIn1dLFsicGF0aCIse2Q6Im0zIDIwIDMtMy0zLTMifV1dLHFvdD1bWyJwYXRoIix7ZDoiTTE2IDVIMyJ9XSxbInBhdGgiLHtkOiJNMTYgMTJIMyJ9XSxbInBhdGgiLHtkOiJNOSAxOUgzIn1dLFsicGF0aCIse2Q6Im0xNiAxNi0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Ik0yMSA1djEyYTIgMiAwIDAgMS0yIDJoLTYifV1dLFZvdD1bWyJwYXRoIix7ZDoiTTEyIDVIMiJ9XSxbInBhdGgiLHtkOiJNNiAxMmgxMiJ9XSxbInBhdGgiLHtkOiJNOSAxOWg2In1dLFsicGF0aCIse2Q6Ik0xNiA1aDYifV0sWyJwYXRoIix7ZDoiTTE5IDhWMiJ9XV0sam90PVtbInBhdGgiLHtkOiJNMiA1aDIwIn1dLFsicGF0aCIse2Q6Ik02IDEyaDEyIn1dLFsicGF0aCIse2Q6Ik05IDE5aDYifV1dLHpsPVtbInBhdGgiLHtkOiJNMjEgNUgxMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIMTEifV0sWyJwYXRoIix7ZDoiTTIxIDE5SDExIn1dLFsicGF0aCIse2Q6Im03IDgtNCA0IDQgNCJ9XV0sa2w9W1sicGF0aCIse2Q6Ik0yMSA1SDExIn1dLFsicGF0aCIse2Q6Ik0yMSAxMkgxMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTlIMTEifV0sWyJwYXRoIix7ZDoibTMgOCA0IDQtNCA0In1dXSxVb3Q9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTExIDEySDMifV0sWyJwYXRoIix7ZDoiTTE2IDE5SDMifV0sWyJwYXRoIix7ZDoiTTIxIDEyaC02In1dXSxXb3Q9W1sicGF0aCIse2Q6Ik0xNiA1SDMifV0sWyJwYXRoIix7ZDoiTTExIDEySDMifV0sWyJwYXRoIix7ZDoiTTExIDE5SDMifV0sWyJwYXRoIix7ZDoiTTIxIDE2VjUifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxNiIscjoiMyJ9XV0sR290PVtbInBhdGgiLHtkOiJNMTEgNWgxMCJ9XSxbInBhdGgiLHtkOiJNMTEgMTJoMTAifV0sWyJwYXRoIix7ZDoiTTExIDE5aDEwIn1dLFsicGF0aCIse2Q6Ik00IDRoMXY1In1dLFsicGF0aCIse2Q6Ik00IDloMiJ9XSxbInBhdGgiLHtkOiJNNi41IDIwSDMuNGMwLTEgMi42LTEuOTI1IDIuNi0zLjVhMS41IDEuNSAwIDAgMC0yLjYtMS4wMiJ9XV0sWW90PVtbInBhdGgiLHtkOiJNMTYgNUgzIn1dLFsicGF0aCIse2Q6Ik0xMSAxMkgzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOUgzIn1dLFsicGF0aCIse2Q6Ik0xOCA5djYifV0sWyJwYXRoIix7ZDoiTTIxIDEyaC02In1dXSxab3Q9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTcgMTJIMyJ9XSxbInBhdGgiLHtkOiJNNyAxOUgzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOGE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNWMtMS4zMyAwLTIuNTQuNTQtMy40MSAxLjQxTDExIDE0In1dLFsicGF0aCIse2Q6Ik0xMSAxMHY0aDQifV1dLFhvdD1bWyJwYXRoIix7ZDoiTTMgNWg2In1dLFsicGF0aCIse2Q6Ik0zIDEyaDEzIn1dLFsicGF0aCIse2Q6Ik0zIDE5aDEzIn1dLFsicGF0aCIse2Q6Im0xNiA4LTMtMyAzLTMifV0sWyJwYXRoIix7ZDoiTTIxIDE5VjdhMiAyIDAgMCAwLTItMmgtNiJ9XV0sS290PVtbInBhdGgiLHtkOiJNMTMgNWg4In1dLFsicGF0aCIse2Q6Ik0xMyAxMmg4In1dLFsicGF0aCIse2Q6Ik0xMyAxOWg4In1dLFsicGF0aCIse2Q6Im0zIDE3IDIgMiA0LTQifV0sWyJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV1dLFFvdD1bWyJwYXRoIix7ZDoiTTggNWgxMyJ9XSxbInBhdGgiLHtkOiJNMTMgMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTMgMTloOCJ9XSxbInBhdGgiLHtkOiJNMyAxMGEyIDIgMCAwIDAgMiAyaDMifV0sWyJwYXRoIix7ZDoiTTMgNXYxMmEyIDIgMCAwIDAgMiAyaDMifV1dLEpvdD1bWyJwYXRoIix7ZDoiTTIxIDVIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTlIMyJ9XSxbInBhdGgiLHtkOiJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiJ9XV0sZTB0PVtbInBhdGgiLHtkOiJNMTYgNUgzIn1dLFsicGF0aCIse2Q6Ik0xMSAxMkgzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOUgzIn1dLFsicGF0aCIse2Q6Im0xNS41IDkuNSA1IDUifV0sWyJwYXRoIix7ZDoibTIwLjUgOS41LTUgNSJ9XV0sdDB0PVtbInBhdGgiLHtkOiJNMyA1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTMgMTloLjAxIn1dLFsicGF0aCIse2Q6Ik04IDVoMTMifV0sWyJwYXRoIix7ZDoiTTggMTJoMTMifV0sWyJwYXRoIix7ZDoiTTggMTloMTMifV1dLGt2PVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYifV1dLGEwdD1bWyJwYXRoIix7ZDoiTTEyIDJ2NCJ9XSxbInBhdGgiLHtkOiJtMTYuMiA3LjggMi45LTIuOSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoNCJ9XSxbInBhdGgiLHtkOiJtMTYuMiAxNi4yIDIuOSAyLjkifV0sWyJwYXRoIix7ZDoiTTEyIDE4djQifV0sWyJwYXRoIix7ZDoibTQuOSAxOS4xIDIuOS0yLjkifV0sWyJwYXRoIix7ZDoiTTIgMTJoNCJ9XSxbInBhdGgiLHtkOiJtNC45IDQuOSAyLjkgMi45In1dXSxpMHQ9W1sicGF0aCIse2Q6Ik0yMiAxMmExIDEgMCAwIDEtMTAgMCAxIDEgMCAwIDAtMTAgMCJ9XSxbInBhdGgiLHtkOiJNNyAyMC43YTEgMSAwIDEgMSA1LTguNyAxIDEgMCAxIDAgNS04LjYifV0sWyJwYXRoIix7ZDoiTTcgMy4zYTEgMSAwIDEgMSA1IDguNiAxIDEgMCAxIDAgNSA4LjYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV1dLHIwdD1bWyJsaW5lIix7eDE6IjIiLHgyOiI1Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTkiLHgyOiIyMiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyIix5MjoiNSJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE5Iix5MjoiMjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNyJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dXSxzMHQ9W1sicGF0aCIse2Q6Ik0xMiAxOXYzIn1dLFsicGF0aCIse2Q6Ik0xMiAydjMifV0sWyJwYXRoIix7ZDoiTTE4Ljg5IDEzLjI0YTcgNyAwIDAgMC04LjEzLTguMTMifV0sWyJwYXRoIix7ZDoiTTE5IDEyaDMifV0sWyJwYXRoIix7ZDoiTTIgMTJoMyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik03LjA1IDcuMDVhNyA3IDAgMCAwIDkuOSA5LjkifV1dLG4wdD1bWyJsaW5lIix7eDE6IjIiLHgyOiI1Iix5MToiMTIiLHkyOiIxMiJ9XSxbImxpbmUiLHt4MToiMTkiLHgyOiIyMiIseTE6IjEyIix5MjoiMTIifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyIix5MjoiNSJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE5Iix5MjoiMjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNyJ9XV0sbzB0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE2IixyOiIxIn1dLFsicmVjdCIse3g6IjMiLHk6IjEwIix3aWR0aDoiMTgiLGhlaWdodDoiMTIiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik03IDEwVjdhNSA1IDAgMCAxIDEwIDB2MyJ9XV0sU3Y9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTYiLHI6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjEyIix4OiIzIix5OiIxMCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgMTBWN2E1IDUgMCAwIDEgOS4zMy0yLjUifV1dLGwwdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjExIix4OiIzIix5OiIxMSIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCJ9XV0sQ3Y9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMSIseDoiMyIseToiMTEiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMSJ9XV0sYzB0PVtbInBhdGgiLHtkOiJtMTAgMTcgNS01LTUtNSJ9XSxbInBhdGgiLHtkOiJNMTUgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNCJ9XV0sZDB0PVtbInBhdGgiLHtkOiJNMyA1aDEifV0sWyJwYXRoIix7ZDoiTTMgMTJoMSJ9XSxbInBhdGgiLHtkOiJNMyAxOWgxIn1dLFsicGF0aCIse2Q6Ik04IDVoMSJ9XSxbInBhdGgiLHtkOiJNOCAxMmgxIn1dLFsicGF0aCIse2Q6Ik04IDE5aDEifV0sWyJwYXRoIix7ZDoiTTEzIDVoOCJ9XSxbInBhdGgiLHtkOiJNMTMgMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTMgMTloOCJ9XV0scDB0PVtbInBhdGgiLHtkOiJtMTYgMTcgNS01LTUtNSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIOSJ9XSxbInBhdGgiLHtkOiJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQifV1dLGgwdD1bWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtNC4zLTQuMyJ9XSxbInBhdGgiLHtkOiJNMTEgMTFhMiAyIDAgMCAwIDQgMCA0IDQgMCAwIDAtOCAwIDYgNiAwIDAgMCAxMiAwIn1dXSx1MHQ9W1sicGF0aCIse2Q6Ik02IDIwYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNOCAxOFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjE0In1dLFsicGF0aCIse2Q6Ik0xMCAyMGg0In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMjAiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjIwIixyOiIyIn1dXSxmMHQ9W1sicGF0aCIse2Q6Im0xMiAxNSA0IDQifV0sWyJwYXRoIix7ZDoiTTIuMzUyIDEwLjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNi4wMjktNi4wMjlhMSAxIDAgMSAxIDMgM2wtNi4wMjkgNi4wMjlhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDYuMzY1LTYuMzY3QTEgMSAwIDAgMCA4LjcxNiA0LjI4MnoifV0sWyJwYXRoIix7ZDoibTUgOCA0IDQifV1dLG0wdD1bWyJwYXRoIix7ZDoiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4In1dLFsicGF0aCIse2Q6Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3In1dLFsicGF0aCIse2Q6Im0xNiAxOSAyIDIgNC00In1dXSxnMHQ9W1sicGF0aCIse2Q6Ik0yMiAxNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCJ9XSxbInBhdGgiLHtkOiJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyJ9XSxbInBhdGgiLHtkOiJNMTYgMTloNiJ9XV0sYjB0PVtbInBhdGgiLHtkOiJNMjEuMiA4LjRjLjUuMzguOC45Ny44IDEuNnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgLjgtMS42bDgtNmEyIDIgMCAwIDEgMi40IDBsOCA2WiJ9XSxbInBhdGgiLHtkOiJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIn1dXSx2MHQ9W1sicGF0aCIse2Q6Ik0yMiAxM1Y2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCJ9XSxbInBhdGgiLHtkOiJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyJ9XSxbInBhdGgiLHtkOiJNMTkgMTZ2NiJ9XSxbInBhdGgiLHtkOiJNMTYgMTloNiJ9XV0sX3Y9W1sicGF0aCIse2Q6Ik0yMiAxMC41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMi41In1dLFsicGF0aCIse2Q6Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3In1dLFsicGF0aCIse2Q6Ik0xOCAxNS4yOGMuMi0uNC41LS44LjktMWEyLjEgMi4xIDAgMCAxIDIuNi40Yy4zLjQuNS44LjUgMS4zIDAgMS4zLTIgMi0yIDIifV0sWyJwYXRoIix7ZDoiTTIwIDIydi4wMSJ9XV0seTB0PVtbInBhdGgiLHtkOiJNMjIgMTIuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoNy41In1dLFsicGF0aCIse2Q6Im0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3In1dLFsicGF0aCIse2Q6Ik0xOCAyMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV0sWyJwYXRoIix7ZDoibTIyIDIyLTEuNS0xLjUifV1dLHgwdD1bWyJwYXRoIix7ZDoiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUifV0sWyJwYXRoIix7ZDoibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDcifV0sWyJwYXRoIix7ZDoiTTIwIDE0djQifV0sWyJwYXRoIix7ZDoiTTIwIDIydi4wMSJ9XV0sdzB0PVtbInBhdGgiLHtkOiJtMjIgNy04Ljk5MSA1LjcyN2EyIDIgMCAwIDEtMi4wMDkgMEwyIDcifV0sWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiJ9XV0sTTB0PVtbInBhdGgiLHtkOiJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDkifV0sWyJwYXRoIix7ZDoibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDcifV0sWyJwYXRoIix7ZDoibTE3IDE3IDQgNCJ9XSxbInBhdGgiLHtkOiJtMjEgMTctNCA0In1dXSx6MHQ9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5LjVDMiA3IDQgNSA2LjUgNUgxOGMyLjIgMCA0IDEuOCA0IDR2OFoifV0sWyJwb2x5bGluZSIse3BvaW50czoiMTUsOSAxOCw5IDE4LDExIn1dLFsicGF0aCIse2Q6Ik02LjUgNUM5IDUgMTEgNyAxMSA5LjVWMTdhMiAyIDAgMCAxLTIgMiJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjciLHkxOiIxMCIseTI6IjEwIn1dXSxrMHQ9W1sicGF0aCIse2Q6Ik0xNyAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMS0xLjczMiJ9XSxbInBhdGgiLHtkOiJtMjIgNS41LTYuNDE5IDQuMTc5YTIgMiAwIDAgMS0yLjE2MiAwTDcgNS41In1dLFsicmVjdCIse3g6IjciLHk6IjMiLHdpZHRoOiIxNSIsaGVpZ2h0OiIxMiIscng6IjIifV1dLFMwdD1bWyJwYXRoIix7ZDoibTExIDE5LTEuMTA2LS41NTJhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDBsNC4yMTIgMi4xMDZhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTlWMTQifV0sWyJwYXRoIix7ZDoiTTE1IDUuNzY0VjE0In1dLFsicGF0aCIse2Q6Ik0yMSAxOGgtNiJ9XSxbInBhdGgiLHtkOiJNOSAzLjIzNnYxNSJ9XV0sQzB0PVtbInBhdGgiLHtkOiJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIn1dLFsicGF0aCIse2Q6Im05IDEwIDIgMiA0LTQifV1dLF8wdD1bWyJwYXRoIix7ZDoiTTE5LjQzIDEyLjkzNWMuMzU3LS45NjcuNTctMS45NTUuNTctMi45MzVhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyLjE5NyAzMi4xOTcgMCAwIDAgLjgxMy0uNzI4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjMifV0sWyJwYXRoIix7ZDoibTE2IDE4IDIgMiA0LTQifV1dLFQwdD1bWyJwYXRoIix7ZDoiTTE1IDIyYTEgMSAwIDAgMS0xLTF2LTRhMSAxIDAgMCAxIC40NDUtLjgzMmwzLTJhMSAxIDAgMCAxIDEuMTEgMGwzIDJBMSAxIDAgMCAxIDIyIDE3djRhMSAxIDAgMCAxLTEgMXoifV0sWyJwYXRoIix7ZDoiTTE4IDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgLjYwMS4yIn1dLFsicGF0aCIse2Q6Ik0xOCAyMnYtMyJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjEwIixyOiIzIn1dXSxMMHQ9W1sicGF0aCIse2Q6Ik0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAifV0sWyJwYXRoIix7ZDoiTTkgMTBoNiJ9XV0sJDB0PVtbInBhdGgiLHtkOiJNMTguOTc3IDE0QzE5LjYgMTIuNzAxIDIwIDExLjM0MyAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIgMzIgMCAwIDAgLjgyNC0uNzM4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTE2IDE4aDYifV1dLEEwdD1bWyJwYXRoIix7ZDoiTTEyLjc1IDcuMDlhMyAzIDAgMCAxIDIuMTYgMi4xNiJ9XSxbInBhdGgiLHtkOiJNMTcuMDcyIDE3LjA3MmMtMS42MzQgMi4xNy0zLjUyNyAzLjkxMi00LjQ3MSA0LjcyN2ExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMS40MzItNC41NjgifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOC40NzUgMi44MThBOCA4IDAgMCAxIDIwIDEwYzAgMS4xODMtLjMxIDIuMzc3LS44MSAzLjUzMyJ9XSxbInBhdGgiLHtkOiJNOS4xMyA5LjEzYTMgMyAwIDAgMCAzLjc0IDMuNzQifV1dLFR2PVtbInBhdGgiLHtkOiJNMTcuOTcgOS4zMDRBOCA4IDAgMCAwIDIgMTBjMCA0LjY5IDQuODg3IDkuNTYyIDcuMDIyIDExLjQ2OCJ9XSxbInBhdGgiLHtkOiJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTAiLHI6IjMifV1dLEQwdD1bWyJwYXRoIix7ZDoiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCJ9XSxbInBhdGgiLHtkOiJNMTIgN3Y2In1dLFsicGF0aCIse2Q6Ik05IDEwaDYifV1dLEUwdD1bWyJwYXRoIix7ZDoiTTE5LjkxNCAxMS4xMDVBNy4yOTggNy4yOTggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOGg2In1dLFsicGF0aCIse2Q6Ik0xOSAxNXY2In1dXSxQMHQ9W1sicGF0aCIse2Q6Ik0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAifV0sWyJwYXRoIix7ZDoibTE0LjUgNy41LTUgNSJ9XSxbInBhdGgiLHtkOiJtOS41IDcuNSA1IDUifV1dLEkwdD1bWyJwYXRoIix7ZDoiTTE5Ljc1MiAxMS45MDFBNy43OCA3Ljc4IDAgMCAwIDIwIDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAxOSAxOSAwIDAgMCAuMDktLjA3NyJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Im0yMS41IDE1LjUtNSA1In1dLFsicGF0aCIse2Q6Im0yMS41IDIwLjUtNS01In1dXSxOMHQ9W1sicGF0aCIse2Q6Ik0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyJ9XV0sRjB0PVtbInBhdGgiLHtkOiJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjgiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTguNzE0IDE0aC0zLjcxYTEgMSAwIDAgMC0uOTQ4LjY4M2wtMi4wMDQgNkExIDEgMCAwIDAgMyAyMmgxOGExIDEgMCAwIDAgLjk0OC0xLjMxNmwtMi02YTEgMSAwIDAgMC0uOTQ5LS42ODRoLTMuNzEyIn1dXSxPMHQ9W1sicGF0aCIse2Q6Im0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIn1dLFsicGF0aCIse2Q6Ik0xNSA1Ljc2NFYxMiJ9XSxbInBhdGgiLHtkOiJNMTggMTV2NiJ9XSxbInBhdGgiLHtkOiJNMjEgMThoLTYifV0sWyJwYXRoIix7ZDoiTTkgMy4yMzZ2MTUifV1dLFIwdD1bWyJwYXRoIix7ZDoiTTE0LjEwNiA1LjU1M2EyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOXYxMi43NjRhMSAxIDAgMCAxLS41NTMuODk0bC00LjU1MyAyLjI3N2EyIDIgMCAwIDEtMS43ODggMGwtNC4yMTItMi4xMDZhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDB6In1dLFsicGF0aCIse2Q6Ik0xNSA1Ljc2NHYxNSJ9XSxbInBhdGgiLHtkOiJNOSAzLjIzNnYxNSJ9XV0sQjB0PVtbInBhdGgiLHtkOiJtMTQgNiA0IDQifV0sWyJwYXRoIix7ZDoiTTE3IDNoNHY0In1dLFsicGF0aCIse2Q6Im0yMSAzLTcuNzUgNy43NSJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiMTUiLHI6IjYifV1dLEgwdD1bWyJwYXRoIix7ZDoiTTE2IDNoNXY1In1dLFsicGF0aCIse2Q6Im0yMSAzLTYuNzUgNi43NSJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjE0IixyOiI2In1dXSxxMHQ9W1sicGF0aCIse2Q6Ik04IDIyaDgifV0sWyJwYXRoIix7ZDoiTTEyIDExdjExIn1dLFsicGF0aCIse2Q6Im0xOSAzLTcgOC03LThaIn1dXSxWMHQ9W1sicGF0aCIse2Q6Ik0xNSAzaDZ2NiJ9XSxbInBhdGgiLHtkOiJtMjEgMy03IDcifV0sWyJwYXRoIix7ZDoibTMgMjEgNy03In1dLFsicGF0aCIse2Q6Ik05IDIxSDN2LTYifV1dLGowdD1bWyJwYXRoIix7ZDoiTTggM0g1YTIgMiAwIDAgMC0yIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMjEgOFY1YTIgMiAwIDAgMC0yLTJoLTMifV0sWyJwYXRoIix7ZDoiTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMifV0sWyJwYXRoIix7ZDoiTTE2IDIxaDNhMiAyIDAgMCAwIDItMnYtMyJ9XV0sVTB0PVtbInBhdGgiLHtkOiJNNy4yMSAxNSAyLjY2IDcuMTRhMiAyIDAgMCAxIC4xMy0yLjJMNC40IDIuOEEyIDIgMCAwIDEgNiAyaDEyYTIgMiAwIDAgMSAxLjYuOGwxLjYgMi4xNGEyIDIgMCAwIDEgLjE0IDIuMkwxNi43OSAxNSJ9XSxbInBhdGgiLHtkOiJNMTEgMTIgNS4xMiAyLjIifV0sWyJwYXRoIix7ZDoibTEzIDEyIDUuODgtOS44In1dLFsicGF0aCIse2Q6Ik04IDdoOCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE3IixyOiI1In1dLFsicGF0aCIse2Q6Ik0xMiAxOHYtMmgtLjUifV1dLFcwdD1bWyJwYXRoIix7ZDoiTTExLjYzNiA2QTEzIDEzIDAgMCAwIDE5LjQgMy4yIDEgMSAwIDAgMSAyMSA0djExLjM0NCJ9XSxbInBhdGgiLHtkOiJNMTQuMzc4IDE0LjM1N0ExMyAxMyAwIDAgMCAxMSAxNEg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNiAxNGExMiAxMiAwIDAgMCAyLjQgNy4yIDIgMiAwIDAgMCAzLjItMi40QTggOCAwIDAgMSAxMCAxNCJ9XSxbInBhdGgiLHtkOiJNOCA4djYifV1dLEcwdD1bWyJwYXRoIix7ZDoiTTExIDZhMTMgMTMgMCAwIDAgOC40LTIuOEExIDEgMCAwIDEgMjEgNHYxMmExIDEgMCAwIDEtMS42LjhBMTMgMTMgMCAwIDAgMTEgMTRINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQifV0sWyJwYXRoIix7ZDoiTTggNnY4In1dXSxZMHQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxNSIseTI6IjE1In1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV1dLFowdD1bWyJwYXRoIix7ZDoiTTQgNWgxNiJ9XSxbInBhdGgiLHtkOiJNNCAxMmgxNiJ9XSxbInBhdGgiLHtkOiJNNCAxOWgxNiJ9XV0sWDB0PVtbInBhdGgiLHtkOiJNMTIgMTJ2LTIifV0sWyJwYXRoIix7ZDoiTTEyIDE4di0yIn1dLFsicGF0aCIse2Q6Ik0xNiAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTYgMTh2LTIifV0sWyJwYXRoIix7ZDoiTTIgMTFoMS41In1dLFsicGF0aCIse2Q6Ik0yMCAxOHYtMiJ9XSxbInBhdGgiLHtkOiJNMjAuNSAxMUgyMiJ9XSxbInBhdGgiLHtkOiJNNCAxOHYtMiJ9XSxbInBhdGgiLHtkOiJNOCAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNOCAxOHYtMiJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMjAiLGhlaWdodDoiMTAiLHJ4OiIyIn1dXSxLMHQ9W1sicGF0aCIse2Q6Im04IDYgNC00IDQgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYxMC4zYTQgNCAwIDAgMS0xLjE3MiAyLjg3Mkw0IDIyIn1dLFsicGF0aCIse2Q6Im0yMCAyMi01LTUifV1dLFEwdD1bWyJwYXRoIix7ZDoibTEwIDktMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJtMTQgMTUgMy0zLTMtMyJ9XSxbInBhdGgiLHtkOiJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkifV1dLEowdD1bWyJwYXRoIix7ZDoiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAifV0sWyJwYXRoIix7ZDoiTTEzLjkgMjEuODE4YTEwIDEwIDAgMCAxLTMuOCAwIn1dLFsicGF0aCIse2Q6Ik0xNy42MDkgMy43MmExMCAxMCAwIDAgMSAyLjY5IDIuNyJ9XSxbInBhdGgiLHtkOiJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCJ9XSxbInBhdGgiLHtkOiJNMjAuMjggMTcuNjFhMTAgMTAgMCAwIDEtMi43IDIuNjkifV0sWyJwYXRoIix7ZDoiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44In1dLFsicGF0aCIse2Q6Ik0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSJ9XSxbInBhdGgiLHtkOiJtNi4xNjMgMjEuMTE3LTIuOTA2Ljg1YTEgMSAwIDAgMS0xLjIzNi0xLjE2OWwuOTY1LTIuOTgifV1dLGU0dD1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Ik03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDUuMDA0IDIuMjI0IDMgMyAwIDAgMS0uODMyIDIuMDgzbC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ1LS4wMDF6In1dXSx0NHQ9W1sicGF0aCIse2Q6Ik0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSJ9XSxbInBhdGgiLHtkOiJNOCAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLjAxIn1dXSxhNHQ9W1sicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTQuOTMgNC45MjlhMTAgMTAgMCAwIDAtMS45MzggMTEuNDEyIDIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAwIDAgMTEuMzAyLTEuOTg5In1dLFsicGF0aCIse2Q6Ik04LjM1IDIuNjlBMTAgMTAgMCAwIDEgMjEuMyAxNS42NSJ9XV0saTR0PVtbInBhdGgiLHtkOiJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dXSxMdj1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTdoLjAxIn1dXSxyNHQ9W1sicGF0aCIse2Q6Ik0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSJ9XSxbInBhdGgiLHtkOiJNMTIgOHY0In1dLFsicGF0aCIse2Q6Ik0xMiAxNmguMDEifV1dLHM0dD1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dLFsicGF0aCIse2Q6Im0xMCAxNS0zLTMgMy0zIn1dLFsicGF0aCIse2Q6Ik03IDEyaDhhMiAyIDAgMCAxIDIgMnYxIn1dXSxuNHQ9W1sicGF0aCIse2Q6Ik0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSJ9XSxbInBhdGgiLHtkOiJtMTUgOS02IDYifV0sWyJwYXRoIix7ZDoibTkgOSA2IDYifV1dLG80dD1bWyJwYXRoIix7ZDoiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5In1dXSxsNHQ9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoibTEwIDgtMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJtMTQgMTQgMy0zLTMtMyJ9XV0sYzR0PVtbInBhdGgiLHtkOiJNMTQgM2gyIn1dLFsicGF0aCIse2Q6Ik0xNiAxOWgtMiJ9XSxbInBhdGgiLHtkOiJNMiAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNMiAxNnY1LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDEuMTQ5LTEuMTQ5In1dLFsicGF0aCIse2Q6Ik0yMCAxOWEyIDIgMCAwIDAgMi0ydi0xIn1dLFsicGF0aCIse2Q6Ik0yMiAxMHYyIn1dLFsicGF0aCIse2Q6Ik0yMiA2VjVhMiAyIDAgMCAwLTItMiJ9XSxbInBhdGgiLHtkOiJNNCAzYTIgMiAwIDAgMC0yIDJ2MSJ9XSxbInBhdGgiLHtkOiJNOCAxOWgyIn1dLFsicGF0aCIse2Q6Ik04IDNoMiJ9XV0sZDR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMCAxNWg0In1dLFsicGF0aCIse2Q6Ik0xMCA5aDQifV0sWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XV0scDR0PVtbInBhdGgiLHtkOiJNMTIuNyAzSDRhMiAyIDAgMCAwLTIgMnYxNi4yODZhLjcxLjcxIDAgMCAwIDEuMjEyLjUwMmwyLjIwMi0yLjIwMkEyIDIgMCAwIDEgNi44MjggMTlIMjBhMiAyIDAgMCAwIDItMnYtNC43In1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiNiIscjoiMyJ9XV0saDR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik03LjUgOS41YzAgLjY4Ny4yNjUgMS4zODMuNjk3IDEuODQ0bDMuMDA5IDMuMjY0YTEuMTQgMS4xNCAwIDAgMCAuNDA3LjMxNCAxIDEgMCAwIDAgLjc4My0uMDA0IDEuMTQgMS4xNCAwIDAgMCAuMzk4LS4zMWwzLjAwOC0zLjI2NEEyLjc3IDIuNzcgMCAwIDAgMTYuNSA5LjUgMi41IDIuNSAwIDAgMCAxMiA4YTIuNSAyLjUgMCAwIDAtNC41IDEuNSJ9XV0sdTR0PVtbInBhdGgiLHtkOiJNMjIgOC41VjVhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDEwIn1dLFsicGF0aCIse2Q6Ik0yMCAxNXYtMmEyIDIgMCAwIDAtNCAwdjIifV0sWyJyZWN0Iix7eDoiMTQiLHk6IjE1Iix3aWR0aDoiOCIsaGVpZ2h0OiI1IixyeDoiMSJ9XV0sZjR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMiAxMWguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDExaC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxMWguMDEifV1dLG00dD1bWyJwYXRoIix7ZDoiTTE5IDE5SDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43LjcgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOC42NTYgM0gyMGEyIDIgMCAwIDEgMiAydjExLjM0NCJ9XV0sZzR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMiA4djYifV0sWyJwYXRoIix7ZDoiTTkgMTFoNiJ9XV0sYjR0PVtbInBhdGgiLHtkOiJNMTQgMTRhMiAyIDAgMCAwIDItMlY4aC0yIn1dLFsicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV0sWyJwYXRoIix7ZDoiTTggMTRhMiAyIDAgMCAwIDItMlY4SDgifV1dLHY0dD1bWyJwYXRoIix7ZDoiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiJ9XSxbInBhdGgiLHtkOiJtMTAgOC0zIDMgMyAzIn1dLFsicGF0aCIse2Q6Ik0xNyAxNHYtMWEyIDIgMCAwIDAtMi0ySDcifV1dLHk0dD1bWyJwYXRoIix7ZDoiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00In1dLFsicGF0aCIse2Q6Ik0xNiAzaDZ2NiJ9XSxbInBhdGgiLHtkOiJtMTYgOSA2LTYifV1dLHg0dD1bWyJwYXRoIix7ZDoiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiJ9XSxbInBhdGgiLHtkOiJNNyAxMWgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNWg2In1dLFsicGF0aCIse2Q6Ik03IDdoOCJ9XV0sdzR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Ik0xMiAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XV0sTTR0PVtbInBhdGgiLHtkOiJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6In1dLFsicGF0aCIse2Q6Im0xNC41IDguNS01IDUifV0sWyJwYXRoIix7ZDoibTkuNSA4LjUgNSA1In1dXSx6NHQ9W1sicGF0aCIse2Q6Ik0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoifV1dLGs0dD1bWyJwYXRoIix7ZDoiTTE2IDEwYTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMTQuMjg2VjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiJ9XSxbInBhdGgiLHtkOiJNMjAgOWEyIDIgMCAwIDEgMiAydjEwLjI4NmEuNzEuNzEgMCAwIDEtMS4yMTIuNTAybC0yLjIwMi0yLjIwMkEyIDIgMCAwIDAgMTcuMTcyIDE5SDEwYTIgMiAwIDAgMS0yLTJ2LTEifV1dLFM0dD1bWyJwYXRoIix7ZDoiTTEyIDE5djMifV0sWyJwYXRoIix7ZDoiTTE1IDkuMzRWNWEzIDMgMCAwIDAtNS42OC0xLjMzIn1dLFsicGF0aCIse2Q6Ik0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiJ9XSxbInBhdGgiLHtkOiJNMTguODkgMTMuMjNBNyA3IDAgMCAwIDE5IDEydi0yIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIifV1dLCR2PVtbInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9XSxbInBhdGgiLHtkOiJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9XV0sQzR0PVtbInBhdGgiLHtkOiJNMTIgMTl2MyJ9XSxbInBhdGgiLHtkOiJNMTkgMTB2MmE3IDcgMCAwIDEtMTQgMHYtMiJ9XSxbInJlY3QiLHt4OiI5Iix5OiIyIix3aWR0aDoiNiIsaGVpZ2h0OiIxMyIscng6IjMifV1dLF80dD1bWyJwYXRoIix7ZDoiTTEwIDEyaDQifV0sWyJwYXRoIix7ZDoiTTEwIDE3aDQifV0sWyJwYXRoIix7ZDoiTTEwIDdoNCJ9XSxbInBhdGgiLHtkOiJNMTggMTJoMiJ9XSxbInBhdGgiLHtkOiJNMTggMThoMiJ9XSxbInBhdGgiLHtkOiJNMTggNmgyIn1dLFsicGF0aCIse2Q6Ik00IDEyaDIifV0sWyJwYXRoIix7ZDoiTTQgMThoMiJ9XSxbInBhdGgiLHtkOiJNNCA2aDIifV0sWyJyZWN0Iix7eDoiNiIseToiMiIsd2lkdGg6IjEyIixoZWlnaHQ6IjIwIixyeDoiMiJ9XV0sVDR0PVtbInBhdGgiLHtkOiJNNiAxOGg4In1dLFsicGF0aCIse2Q6Ik0zIDIyaDE4In1dLFsicGF0aCIse2Q6Ik0xNCAyMmE3IDcgMCAxIDAgMC0xNGgtMSJ9XSxbInBhdGgiLHtkOiJNOSAxNGgyIn1dLFsicGF0aCIse2Q6Ik05IDEyYTIgMiAwIDAgMS0yLTJWNmg2djRhMiAyIDAgMCAxLTIgMloifV0sWyJwYXRoIix7ZDoiTTEyIDZWM2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIn1dXSxMNHQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNSIseDoiMiIseToiNCIscng6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNyIseDoiNiIseToiOCIscng6IjEifV0sWyJwYXRoIix7ZDoiTTE4IDh2NyJ9XSxbInBhdGgiLHtkOiJNNiAxOXYyIn1dLFsicGF0aCIse2Q6Ik0xOCAxOXYyIn1dXSwkNHQ9W1sicGF0aCIse2Q6Ik0xMiAxM3Y4In1dLFsicGF0aCIse2Q6Ik0xMiAzdjMifV0sWyJwYXRoIix7ZDoiTTQgNmExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMWgxM2EyIDIgMCAwIDAgMS4xNTItLjM2NWwzLjQyNC0yLjMxN2ExIDEgMCAwIDAgMC0xLjYzNWwtMy40MjQtMi4zMThBMiAyIDAgMCAwIDE3IDZ6In1dXSxBNHQ9W1sicGF0aCIse2Q6Ik04IDJoOCJ9XSxbInBhdGgiLHtkOiJNOSAydjEuMzQzTTE1IDJ2Mi43ODlhNCA0IDAgMCAwIC42NzIgMi4yMTlsLjY1Ni45ODRhNCA0IDAgMCAxIC42NzIgMi4yMnYxLjEzMU03LjggNy44bC0uMTI4LjE5MkE0IDQgMCAwIDAgNyAxMC4yMTJWMjBhMiAyIDAgMCAwIDIgMmg2YTIgMiAwIDAgMCAyLTJ2LTMifV0sWyJwYXRoIix7ZDoiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV0sRDR0PVtbInBhdGgiLHtkOiJtMTQgMTAgNy03In1dLFsicGF0aCIse2Q6Ik0yMCAxMGgtNlY0In1dLFsicGF0aCIse2Q6Im0zIDIxIDctNyJ9XSxbInBhdGgiLHtkOiJNNCAxNGg2djYifV1dLEU0dD1bWyJwYXRoIix7ZDoiTTggMmg4In1dLFsicGF0aCIse2Q6Ik05IDJ2Mi43ODlhNCA0IDAgMCAxLS42NzIgMi4yMTlsLS42NTYuOTg0QTQgNCAwIDAgMCA3IDEwLjIxMlYyMGEyIDIgMCAwIDAgMiAyaDZhMiAyIDAgMCAwIDItMnYtOS43ODlhNCA0IDAgMCAwLS42NzItMi4yMTlsLS42NTYtLjk4NEE0IDQgMCAwIDEgMTUgNC43ODhWMiJ9XSxbInBhdGgiLHtkOiJNNyAxNWE2LjQ3MiA2LjQ3MiAwIDAgMSA1IDAgNi40NyA2LjQ3IDAgMCAwIDUgMCJ9XV0sUDR0PVtbInBhdGgiLHtkOiJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIn1dLFsicGF0aCIse2Q6Ik0yMSA4aC0zYTIgMiAwIDAgMS0yLTJWMyJ9XSxbInBhdGgiLHtkOiJNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2MyJ9XSxbInBhdGgiLHtkOiJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIn1dXSxJNHQ9W1sicGF0aCIse2Q6Ik01IDEyaDE0In1dXSxONHQ9W1sicGF0aCIse2Q6Im05IDEwIDIgMiA0LTQifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dXSxGNHQ9W1sicGF0aCIse2Q6Ik0xMSAxM2EzIDMgMCAxIDEgMi44My00SDE0YTIgMiAwIDAgMSAwIDR6In1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJyZWN0Iix7eDoiMiIseToiMyIsd2lkdGg6IjIwIixoZWlnaHQ6IjE0IixyeDoiMiJ9XV0sTzR0PVtbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJtMTQuMzA1IDcuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTE1LjIyOCA0Ljg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAzLjIyOC0uMzgzLS45MjQifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiA4Ljc3Mi0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTkuMTQ4IDMuMjI4LjM4My0uOTI0In1dLFsicGF0aCIse2Q6Im0xOS41MyA5LjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoibTIwLjc3MiA0Ljg1Mi45MjQtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMjAuNzcyIDcuMTQ4LjkyNC4zODMifV0sWyJwYXRoIix7ZDoiTTIyIDEzdjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDcifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjYiLHI6IjMifV1dLFI0dD1bWyJwYXRoIix7ZDoiTTEyIDE3djQifV0sWyJwYXRoIix7ZDoiTTIyIDEyLjMwN1YxNWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoOC42OTMifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjYiLHI6IjMifV1dLEI0dD1bWyJwYXRoIix7ZDoiTTEyIDEzVjcifV0sWyJwYXRoIix7ZDoibTE1IDEwLTMgMy0zLTMifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dXSxINHQ9W1sicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dLFsicGF0aCIse2Q6Ik04LjY1NiAzSDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLS4yOTMgMS4wNDIifV1dLHE0dD1bWyJwYXRoIix7ZDoiTTEwIDEzVjcifV0sWyJwYXRoIix7ZDoiTTE0IDEzVjcifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dXSxWNHQ9W1sicGF0aCIse2Q6Ik0xNS4wMzMgOS40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2VjcuNjQ4YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dLFsicmVjdCIse3g6IjIiLHk6IjMiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNCIscng6IjIifV1dLGo0dD1bWyJwYXRoIix7ZDoiTTE4IDhWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoOCJ9XSxbInBhdGgiLHtkOiJNMTAgMTl2LTMuOTYgMy4xNSJ9XSxbInBhdGgiLHtkOiJNNyAxOWg1In1dLFsicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjEwIix4OiIxNiIseToiMTIiLHJ4OiIyIn1dXSxVNHQ9W1sicGF0aCIse2Q6Ik01LjUgMjBIOCJ9XSxbInBhdGgiLHtkOiJNMTcgOWguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjE2Iix4OiIxMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTggNkg0YTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyaDQifV0sWyJjaXJjbGUiLHtjeDoiMTciLGN5OiIxNSIscjoiMSJ9XV0sVzR0PVtbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJNOCAyMWg4In1dLFsicmVjdCIse3g6IjIiLHk6IjMiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNCIscng6IjIifV0sWyJyZWN0Iix7eDoiOSIseToiNyIsd2lkdGg6IjYiLGhlaWdodDoiNiIscng6IjEifV1dLEc0dD1bWyJwYXRoIix7ZDoibTkgMTAgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTIgMTNWNyJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV1dLFk0dD1bWyJwYXRoIix7ZDoibTE0LjUgMTIuNS01LTUifV0sWyJwYXRoIix7ZDoibTkuNSAxMi41IDUtNSJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV1dLFo0dD1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XSxbImxpbmUiLHt4MToiOCIseDI6IjE2Iix5MToiMjEiLHkyOiIyMSJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE3Iix5MjoiMjEifV1dLFg0dD1bWyJwYXRoIix7ZDoiTTE4IDVoNCJ9XSxbInBhdGgiLHtkOiJNMjAgM3Y0In1dLFsicGF0aCIse2Q6Ik0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIn1dXSxLNHQ9W1sicGF0aCIse2Q6Ik0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIn1dXSxRNHQ9W1sicGF0aCIse2Q6Im0xOCAxNC0xLTMifV0sWyJwYXRoIix7ZDoibTMgOSA2IDJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAxLjk5IDEuODEifV0sWyJwYXRoIix7ZDoiTTggMTdoM2ExIDEgMCAwIDAgMS0xIDYgNiAwIDAgMSA2LTYgMSAxIDAgMCAwIDEtMXYtLjc1QTUgNSAwIDAgMCAxNyA1In1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiMTciLHI6IjMifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE3IixyOiIzIn1dXSxKNHQ9W1sicGF0aCIse2Q6Im04IDMgNCA4IDUtNSA1IDE1SDJMOCAzeiJ9XSxbInBhdGgiLHtkOiJNNC4xNCAxNS4wOGMyLjYyLTEuNTcgNS4yNC0xLjQzIDcuODYuNDIgMi43NCAxLjk0IDUuNDkgMiA4LjIzLjE5In1dXSxlM3Q9W1sicGF0aCIse2Q6Im04IDMgNCA4IDUtNSA1IDE1SDJMOCAzeiJ9XV0sdDN0PVtbInBhdGgiLHtkOiJNMTIgNnYuMzQzIn1dLFsicGF0aCIse2Q6Ik0xOC4yMTggMTguMjE4QTcgNyAwIDAgMSA1IDE1VjlhNyA3IDAgMCAxIC43ODItMy4yMTgifV0sWyJwYXRoIix7ZDoiTTE5IDEzLjM0M1Y5QTcgNyAwIDAgMCA4LjU2IDIuOTAyIn1dLFsicGF0aCIse2Q6Ik0yMiAyMiAyIDIifV1dLGEzdD1bWyJwYXRoIix7ZDoibTE1LjU1IDguNDUgNS4xMzggMi4wODdhLjUuNSAwIDAgMS0uMDYzLjk0N2wtNi4xMjQgMS41OGEyIDIgMCAwIDAtMS40MzggMS40MzVsLTEuNTc5IDYuMTI2YS41LjUgMCAwIDEtLjk0Ny4wNjNMOC40NSAxNS41NTEifV0sWyJwYXRoIix7ZDoiTTIyIDIgMiAyMiJ9XSxbInBhdGgiLHtkOiJtNi44MTYgMTEuNTI4LTIuNzc5LTYuODRhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDYuODQgMi43NzkifV1dLGkzdD1bWyJwYXRoIix7ZDoiTTQuMDM3IDQuNjg4YS40OTUuNDk1IDAgMCAxIC42NTEtLjY1MWwxNiA2LjVhLjUuNSAwIDAgMS0uMDYzLjk0N2wtNi4xMjQgMS41OGEyIDIgMCAwIDAtMS40MzggMS40MzVsLTEuNTc5IDYuMTI2YS41LjUgMCAwIDEtLjk0Ny4wNjN6In1dXSxyM3Q9W1sicGF0aCIse2Q6Ik0yLjAzNCAyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0NEw4LjIwNCA3LjU0NWExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NiAzLjQ0M2EuNS41IDAgMCAxLS45NDQuMDMzeiJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE2IixyOiI2In1dLFsicGF0aCIse2Q6Im0xMS44IDExLjggOC40IDguNCJ9XV0sczN0PVtbInBhdGgiLHtkOiJNMTQgNC4xIDEyIDYifV0sWyJwYXRoIix7ZDoibTUuMSA4LTIuOS0uOCJ9XSxbInBhdGgiLHtkOiJtNiAxMi0xLjkgMiJ9XSxbInBhdGgiLHtkOiJNNy4yIDIuMiA4IDUuMSJ9XSxbInBhdGgiLHtkOiJNOS4wMzcgOS42OWEuNDk4LjQ5OCAwIDAgMSAuNjUzLS42NTNsMTEgNC41YS41LjUgMCAwIDEtLjA3NC45NDlsLTQuMzQ5IDEuMDQxYTEgMSAwIDAgMC0uNzQuNzM5bC0xLjA0IDQuMzVhLjUuNSAwIDAgMS0uOTUuMDc0eiJ9XV0sbjN0PVtbInBhdGgiLHtkOiJNMTIuNTg2IDEyLjU4NiAxOSAxOSJ9XSxbInBhdGgiLHtkOiJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiJ9XV0sbzN0PVtbInJlY3QiLHt4OiI1Iix5OiIyIix3aWR0aDoiMTQiLGhlaWdodDoiMjAiLHJ4OiI3In1dLFsicGF0aCIse2Q6Ik0xMiA2djQifV1dLEF2PVtbInBhdGgiLHtkOiJNNSAzdjE2aDE2In1dLFsicGF0aCIse2Q6Im01IDE5IDYtNiJ9XSxbInBhdGgiLHtkOiJtMiA2IDMtMyAzIDMifV0sWyJwYXRoIix7ZDoibTE4IDE2IDMgMy0zIDMifV1dLGwzdD1bWyJwYXRoIix7ZDoiTTE5IDEzdjZoLTYifV0sWyJwYXRoIix7ZDoiTTUgMTFWNWg2In1dLFsicGF0aCIse2Q6Im01IDUgMTQgMTQifV1dLGMzdD1bWyJwYXRoIix7ZDoiTTExIDE5SDV2LTYifV0sWyJwYXRoIix7ZDoiTTEzIDVoNnY2In1dLFsicGF0aCIse2Q6Ik0xOSA1IDUgMTkifV1dLGQzdD1bWyJwYXRoIix7ZDoiTTExIDE5SDVWMTMifV0sWyJwYXRoIix7ZDoiTTE5IDVMNSAxOSJ9XV0scDN0PVtbInBhdGgiLHtkOiJNMTkgMTNWMTlIMTMifV0sWyJwYXRoIix7ZDoiTTUgNUwxOSAxOSJ9XV0saDN0PVtbInBhdGgiLHtkOiJNOCAxOEwxMiAyMkwxNiAxOCJ9XSxbInBhdGgiLHtkOiJNMTIgMlYyMiJ9XV0sdTN0PVtbInBhdGgiLHtkOiJtMTggOCA0IDQtNCA0In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Im02IDgtNCA0IDQgNCJ9XV0sZjN0PVtbInBhdGgiLHtkOiJNNiA4TDIgMTJMNiAxNiJ9XSxbInBhdGgiLHtkOiJNMiAxMkgyMiJ9XV0sbTN0PVtbInBhdGgiLHtkOiJNMTggOEwyMiAxMkwxOCAxNiJ9XSxbInBhdGgiLHtkOiJNMiAxMkgyMiJ9XV0sZzN0PVtbInBhdGgiLHtkOiJNNSAxMVY1SDExIn1dLFsicGF0aCIse2Q6Ik01IDVMMTkgMTkifV1dLGIzdD1bWyJwYXRoIix7ZDoiTTEzIDVIMTlWMTEifV0sWyJwYXRoIix7ZDoiTTE5IDVMNSAxOSJ9XV0sdjN0PVtbInBhdGgiLHtkOiJNOCA2TDEyIDJMMTYgNiJ9XSxbInBhdGgiLHtkOiJNMTIgMlYyMiJ9XV0seTN0PVtbInBhdGgiLHtkOiJNMTIgMnYyMCJ9XSxbInBhdGgiLHtkOiJtOCAxOCA0IDQgNC00In1dLFsicGF0aCIse2Q6Im04IDYgNC00IDQgNCJ9XV0seDN0PVtbInBhdGgiLHtkOiJNMTIgMnYyMCJ9XSxbInBhdGgiLHtkOiJtMTUgMTktMyAzLTMtMyJ9XSxbInBhdGgiLHtkOiJtMTkgOSAzIDMtMyAzIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIn1dLFsicGF0aCIse2Q6Im01IDktMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJtOSA1IDMtMyAzIDMifV1dLHczdD1bWyJjaXJjbGUiLHtjeDoiOCIsY3k6IjE4IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAxOFYybDcgNCJ9XV0sTTN0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE4IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xNiAxOFYyIn1dXSx6M3Q9W1sicGF0aCIse2Q6Ik05IDE4VjVsMTItMnYxMyJ9XSxbInBhdGgiLHtkOiJtOSA5IDEyLTIifV0sWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjE4IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTYiLHI6IjMifV1dLGszdD1bWyJwYXRoIix7ZDoiTTkgMThWNWwxMi0ydjEzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxOCIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE2IixyOiIzIn1dXSxTM3Q9W1sicGF0aCIse2Q6Ik05LjMxIDkuMzEgNSAyMWw3LTQgNyA0LTEuMTctMy4xNyJ9XSxbInBhdGgiLHtkOiJNMTQuNTMgOC44OCAxMiAybC0xLjE3IDMuMTcifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV0sQzN0PVtbInBvbHlnb24iLHtwb2ludHM6IjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyIn1dXSxfM3Q9W1sicG9seWdvbiIse3BvaW50czoiMyAxMSAyMiAyIDEzIDIxIDExIDEzIDMgMTEifV1dLFQzdD1bWyJwYXRoIix7ZDoiTTguNDMgOC40MyAzIDExbDggMiAyIDggMi41Ny01LjQzIn1dLFsicGF0aCIse2Q6Ik0xNy4zOSAxMS43MyAyMiAybC05LjczIDQuNjEifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV0sTDN0PVtbInJlY3QiLHt4OiIxNiIseToiMTYiLHdpZHRoOiI2IixoZWlnaHQ6IjYiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjIiLHk6IjE2Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XSxbInJlY3QiLHt4OiI5Iix5OiIyIix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNNSAxNnYtM2ExIDEgMCAwIDEgMS0xaDEyYTEgMSAwIDAgMSAxIDF2MyJ9XSxbInBhdGgiLHtkOiJNMTIgMTJWOCJ9XV0sJDN0PVtbInBhdGgiLHtkOiJNMTUgMThoLTUifV0sWyJwYXRoIix7ZDoiTTE4IDE0aC04In1dLFsicGF0aCIse2Q6Ik00IDIyaDE2YTIgMiAwIDAgMCAyLTJWNGEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDEtNCAwdi05YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI0Iix4OiIxMCIseToiNiIscng6IjEifV1dLEEzdD1bWyJwYXRoIix7ZDoiTTYgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2In1dLFsicGF0aCIse2Q6Ik05LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCJ9XSxbInBhdGgiLHtkOiJNMTIuOTEgNC4xYTE1LjkxIDE1LjkxIDAgMCAxIC4wMSAxNS44In1dLFsicGF0aCIse2Q6Ik0xNi4zNyAyYTIwLjE2IDIwLjE2IDAgMCAxIDAgMjAifV1dLEQzdD1bWyJwYXRoIix7ZDoiTTEyIDJ2MTAifV0sWyJwYXRoIix7ZDoibTguNSA0IDcgNCJ9XSxbInBhdGgiLHtkOiJtOC41IDggNy00In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTciLHI6IjUifV1dLEUzdD1bWyJwYXRoIix7ZDoiTTEzLjQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi03LjQifV0sWyJwYXRoIix7ZDoiTTIgNmg0In1dLFsicGF0aCIse2Q6Ik0yIDEwaDQifV0sWyJwYXRoIix7ZDoiTTIgMTRoNCJ9XSxbInBhdGgiLHtkOiJNMiAxOGg0In1dLFsicGF0aCIse2Q6Ik0yMS4zNzggNS42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XV0sUDN0PVtbInBhdGgiLHtkOiJNMiA2aDQifV0sWyJwYXRoIix7ZDoiTTIgMTBoNCJ9XSxbInBhdGgiLHtkOiJNMiAxNGg0In1dLFsicGF0aCIse2Q6Ik0yIDE4aDQifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjIwIix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTUgMnYyMCJ9XSxbInBhdGgiLHtkOiJNMTUgN2g1In1dLFsicGF0aCIse2Q6Ik0xNSAxMmg1In1dLFsicGF0aCIse2Q6Ik0xNSAxN2g1In1dXSxJM3Q9W1sicGF0aCIse2Q6Ik0yIDZoNCJ9XSxbInBhdGgiLHtkOiJNMiAxMGg0In1dLFsicGF0aCIse2Q6Ik0yIDE0aDQifV0sWyJwYXRoIix7ZDoiTTIgMThoNCJ9XSxbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHg6IjQiLHk6IjIiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05LjUgOGg1In1dLFsicGF0aCIse2Q6Ik05LjUgMTJIMTYifV0sWyJwYXRoIix7ZDoiTTkuNSAxNkgxNCJ9XV0sTjN0PVtbInBhdGgiLHtkOiJNMiA2aDQifV0sWyJwYXRoIix7ZDoiTTIgMTBoNCJ9XSxbInBhdGgiLHtkOiJNMiAxNGg0In1dLFsicGF0aCIse2Q6Ik0yIDE4aDQifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjIwIix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTYgMnYyMCJ9XV0sRjN0PVtbInBhdGgiLHtkOiJNOCAydjQifV0sWyJwYXRoIix7ZDoiTTEyIDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMnY0In1dLFsicGF0aCIse2Q6Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMCAxMnYyIn1dLFsicGF0aCIse2Q6Ik0yMCAxOHYyYTIgMiAwIDAgMS0yIDJoLTEifV0sWyJwYXRoIix7ZDoiTTEzIDIyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIySDZhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNNCAxNHYtMiJ9XSxbInBhdGgiLHtkOiJNNCA4VjZhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik04IDEwaDYifV0sWyJwYXRoIix7ZDoiTTggMTRoOCJ9XSxbInBhdGgiLHtkOiJNOCAxOGg1In1dXSxPM3Q9W1sicGF0aCIse2Q6Ik04IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMnY0In1dLFsicGF0aCIse2Q6Ik0xNiAydjQifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjE4Iix4OiI0Iix5OiI0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxMGg2In1dLFsicGF0aCIse2Q6Ik04IDE0aDgifV0sWyJwYXRoIix7ZDoiTTggMThoNSJ9XV0sUjN0PVtbInBhdGgiLHtkOiJNMTIgNFYyIn1dLFsicGF0aCIse2Q6Ik01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgNEM4IDQgNC41IDYgNCA4Yy0uMjQzLjk3LS45MTkgMS45NTItMiAzIDEuMzEtLjA4MiAxLjk3Mi0uMjkgMy0xIC41NC45Mi45ODIgMS4zNTYgMiAyIDEuNDUyLS42NDcgMS45NTQtMS4wOTggMi41LTIgLjU5NS45OTUgMS4xNTEgMS40MjcgMi41IDIgMS4zMS0uNjIxIDEuODYyLTEuMDU4IDIuNS0yIC42MjkuOTc3IDEuMTYyIDEuNDIzIDIuNSAyIDEuMjA5LS41NDggMS42OC0uOTY3IDItMiAxLjAzMi45MTYgMS42ODMgMS4xNTcgMyAxLTEuMjk3LTEuMDM2LTEuNzU4LTIuMDMtMi0zLS41LTItNC00LTgtNFoifV1dLEIzdD1bWyJwYXRoIix7ZDoiTTEyIDRWMiJ9XSxbInBhdGgiLHtkOiJNNSAxMHY0YTcuMDA0IDcuMDA0IDAgMCAwIDUuMjc3IDYuNzg3Yy40MTIuMTA0LjgwMi4yOTIgMS4xMDIuNTkyTDEyIDIybC42MjEtLjYyMWMuMy0uMy42OS0uNDg4IDEuMTAyLS41OTJhNy4wMSA3LjAxIDAgMCAwIDQuMTI1LTIuOTM5In1dLFsicGF0aCIse2Q6Ik0xOSAxMHYzLjM0MyJ9XSxbInBhdGgiLHtkOiJNMTIgMTJjLTEuMzQ5LS41NzMtMS45MDUtMS4wMDUtMi41LTItLjU0Ni45MDItMS4wNDggMS4zNTMtMi41IDItMS4wMTgtLjY0NC0xLjQ2LTEuMDgtMi0yLTEuMDI4LjcxLTEuNjkuOTE4LTMgMSAxLjA4MS0xLjA0OCAxLjc1Ny0yLjAzIDItMyAuMTk0LS43NzYuODQtMS41NTEgMS43OS0yLjIxbTExLjY1NCA1Ljk5N2MuODg3LS40NTcgMS4yOC0uODkxIDEuNTU2LTEuNzg3IDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00LS43NCAwLTEuNDYxLjA2OC0yLjE1LjE5MiJ9XSxbImxpbmUiLHt4MToiMiIseDI6IjIyIix5MToiMiIseTI6IjIyIn1dXSxEdj1bWyJwYXRoIix7ZDoiTTEyIDE2aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgOHY0In1dLFsicGF0aCIse2Q6Ik0xNS4zMTIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNC42ODgtNC42ODhBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyeiJ9XV0sSDN0PVtbInBhdGgiLHtkOiJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XV0sRXY9W1sicGF0aCIse2Q6Ik0xMCAxNVY5In1dLFsicGF0aCIse2Q6Ik0xNCAxNVY5In1dLFsicGF0aCIse2Q6Ik0yLjU4NiAxNi43MjZBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyaDYuNjI0YTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2eiJ9XV0sUHY9W1sicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoifV0sWyJwYXRoIix7ZDoibTkgOSA2IDYifV1dLHEzdD1bWyJwYXRoIix7ZDoiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6In1dXSxWM3Q9W1sicGF0aCIse2Q6Ik0zIDIwaDQuNWEuNS41IDAgMCAwIC41LS41di0uMjgyYS41Mi41MiAwIDAgMC0uMjQ3LS40MzcgOCA4IDAgMSAxIDguNDk0LS4wMDEuNTIuNTIgMCAwIDAtLjI0Ny40Mzh2LjI4MmEuNS41IDAgMCAwIC41LjVIMjEifV1dLGozdD1bWyJwYXRoIix7ZDoiTTIwLjM0MSA2LjQ4NEExMCAxMCAwIDAgMSAxMC4yNjYgMjEuODUifV0sWyJwYXRoIix7ZDoiTTMuNjU5IDE3LjUxNkExMCAxMCAwIDAgMSAxMy43NCAyLjE1MiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjE5IixjeToiNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjIifV1dLFUzdD1bWyJwYXRoIix7ZDoiTTMgM2g2bDYgMThoNiJ9XSxbInBhdGgiLHtkOiJNMTQgM2g3In1dXSxXM3Q9W1sicGF0aCIse2Q6Ik0xMiAxMlY0YTEgMSAwIDAgMSAxLTFoNi4yOTdhMSAxIDAgMCAxIC42NTEgMS43NTlsLTQuNjk2IDQuMDI1In1dLFsicGF0aCIse2Q6Im0xMiAyMS03LjQxNC03LjQxNEEyIDIgMCAwIDEgNCAxMi4xNzJWNi40MTVhMS4wMDIgMS4wMDIgMCAwIDEgMS43MDctLjcwN0wyMCAyMC4wMDkifV0sWyJwYXRoIix7ZDoibTEyLjIxNCAzLjM4MSA4LjQxNCAxNC45NjZhMSAxIDAgMCAxLS4xNjcgMS4xOTlsLTEuMTY4IDEuMTYzYTEgMSAwIDAgMS0uNzA2LjI5MUg2LjM1MWExIDEgMCAwIDEtLjYyNS0uMjE5TDMuMjUgMTguOGExIDEgMCAwIDEgLjYzMS0xLjc4MWw0LjE2NS4wMjcifV1dLEczdD1bWyJwYXRoIix7ZDoiTTEyIDN2NiJ9XSxbInBhdGgiLHtkOiJNMTYuNzYgM2EyIDIgMCAwIDEgMS44IDEuMWwyLjIzIDQuNDc5YTIgMiAwIDAgMSAuMjEuODkxVjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjkuNDcyYTIgMiAwIDAgMSAuMjExLS44OTRMNS40NSA0LjFBMiAyIDAgMCAxIDcuMjQgM3oifV0sWyJwYXRoIix7ZDoiTTMuMDU0IDkuMDEzaDE3Ljg5MyJ9XV0sWTN0PVtbInBhdGgiLHtkOiJtMTYgMTYgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjMuMjkgNyAxMiAxMiAyMC43MSA3In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMjIiLHkyOiIxMiJ9XV0sWjN0PVtbInBhdGgiLHtkOiJNMTYgMTZoNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dLFsicG9seWxpbmUiLHtwb2ludHM6IjMuMjkgNyAxMiAxMiAyMC43MSA3In1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMjIiLHkyOiIxMiJ9XV0sWDN0PVtbInBhdGgiLHtkOiJNMTIgMjJ2LTkifV0sWyJwYXRoIix7ZDoiTTE1LjE3IDIuMjFhMS42NyAxLjY3IDAgMCAxIDEuNjMgMEwyMSA0LjU3YTEuOTMgMS45MyAwIDAgMSAwIDMuMzZMOC44MiAxNC43OWExLjY1NSAxLjY1NSAwIDAgMS0xLjY0IDBMMyAxMi40M2ExLjkzIDEuOTMgMCAwIDEgMC0zLjM2eiJ9XSxbInBhdGgiLHtkOiJNMjAgMTN2My44N2EyLjA2IDIuMDYgMCAwIDEtMS4xMSAxLjgzbC02IDMuMDhhMS45MyAxLjkzIDAgMCAxLTEuNzggMGwtNi0zLjA4QTIuMDYgMi4wNiAwIDAgMSA0IDE2Ljg3VjEzIn1dLFsicGF0aCIse2Q6Ik0yMSAxMi40M2ExLjkzIDEuOTMgMCAwIDAgMC0zLjM2TDguODMgMi4yYTEuNjQgMS42NCAwIDAgMC0xLjYzIDBMMyA0LjU3YTEuOTMgMS45MyAwIDAgMCAwIDMuMzZsMTIuMTggNi44NmExLjYzNiAxLjYzNiAwIDAgMCAxLjYzIDB6In1dXSxLM3Q9W1sicGF0aCIse2Q6Ik0xNiAxNmg2In1dLFsicGF0aCIse2Q6Ik0xOSAxM3Y2In1dLFsicGF0aCIse2Q6Ik0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0In1dLFsicGF0aCIse2Q6Im03LjUgNC4yNyA5IDUuMTUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMy4yOSA3IDEyIDEyIDIwLjcxIDcifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjEyIn1dXSxRM3Q9W1sicGF0aCIse2Q6Ik0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0In1dLFsicGF0aCIse2Q6Im03LjUgNC4yNyA5IDUuMTUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMy4yOSA3IDEyIDEyIDIwLjcxIDcifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjEyIn1dLFsiY2lyY2xlIix7Y3g6IjE4LjUiLGN5OiIxNS41IixyOiIyLjUifV0sWyJwYXRoIix7ZDoiTTIwLjI3IDE3LjI3IDIyIDE5In1dXSxKM3Q9W1sicGF0aCIse2Q6Ik0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0In1dLFsicGF0aCIse2Q6Im03LjUgNC4yNyA5IDUuMTUifV0sWyJwb2x5bGluZSIse3BvaW50czoiMy4yOSA3IDEyIDEyIDIwLjcxIDcifV0sWyJsaW5lIix7eDE6IjEyIix4MjoiMTIiLHkxOiIyMiIseTI6IjEyIn1dLFsicGF0aCIse2Q6Im0xNyAxMyA1IDVtLTUgMCA1LTUifV1dLGVsdD1bWyJwYXRoIix7ZDoiTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6In1dLFsicGF0aCIse2Q6Ik0xMiAyMlYxMiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIzLjI5IDcgMTIgMTIgMjAuNzEgNyJ9XSxbInBhdGgiLHtkOiJtNy41IDQuMjcgOSA1LjE1In1dXSx0bHQ9W1sicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiI2Iix4OiIyIix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTZ2LTJhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjYiLHg6IjgiLHk6IjE2IixyeDoiMSJ9XV0sYWx0PVtbInBhdGgiLHtkOiJNMTEgNyA2IDIifV0sWyJwYXRoIix7ZDoiTTE4Ljk5MiAxMkgyLjA0MSJ9XSxbInBhdGgiLHtkOiJNMjEuMTQ1IDE4LjM4QTMuMzQgMy4zNCAwIDAgMSAyMCAxNi41YTMuMyAzLjMgMCAwIDEtMS4xNDUgMS44OGMtLjU3NS40Ni0uODU1IDEuMDItLjg1NSAxLjU5NUEyIDIgMCAwIDAgMjAgMjJhMiAyIDAgMCAwIDItMi4wMjVjMC0uNTgtLjI4NS0xLjEzLS44NTUtMS41OTUifV0sWyJwYXRoIix7ZDoibTguNSA0LjUgMi4xNDgtMi4xNDhhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGw3LjI5NiA3LjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC03LjU5MiA3LjU5MmEzLjYxNSAzLjYxNSAwIDAgMS01LjExMiAwbC0zLjg4OC0zLjg4OGEzLjYxNSAzLjYxNSAwIDAgMSAwLTUuMTEyTDUuNjcgNy4zMyJ9XV0sSXY9W1sicGF0aCIse2Q6Ik0xMCAydjIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTcgMmExIDEgMCAwIDEgMSAxdjlINlYzYTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik02IDEyYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAwIDAgMiAyaDJhMSAxIDAgMCAxIDEgMXYyLjlhMiAyIDAgMSAwIDQgMFYxN2ExIDEgMCAwIDEgMS0xaDJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xIn1dXSxpbHQ9W1sicGF0aCIse2Q6Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIn1dLFsicGF0aCIse2Q6Ik0xOC4zNzYgMi42MjJhMSAxIDAgMSAxIDMuMDAyIDMuMDAyTDE3LjM2IDkuNjQzYS41LjUgMCAwIDAgMCAuNzA3bC45NDQuOTQ0YTIuNDEgMi40MSAwIDAgMSAwIDMuNDA4bC0uOTQ0Ljk0NGEuNS41IDAgMCAxLS43MDcgMEw4LjM1NCA3LjM0OGEuNS41IDAgMCAxIDAtLjcwN2wuOTQ0LS45NDRhMi40MSAyLjQxIDAgMCAxIDMuNDA4IDBsLjk0NC45NDRhLjUuNSAwIDAgMCAuNzA3IDB6In1dLFsicGF0aCIse2Q6Ik05IDhjLTEuODA0IDIuNzEtMy45NyAzLjQ2LTYuNTgzIDMuOTQ4YS41MDcuNTA3IDAgMCAwLS4zMDIuODE5bDcuMzIgOC44ODNhMSAxIDAgMCAwIDEuMTg1LjIwNEMxMi43MzUgMjAuNDA1IDE2IDE2Ljc5MiAxNiAxNSJ9XV0scmx0PVtbInBhdGgiLHtkOiJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoifV0sWyJjaXJjbGUiLHtjeDoiMTMuNSIsY3k6IjYuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiIxNy41IixjeToiMTAuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbImNpcmNsZSIse2N4OiI2LjUiLGN5OiIxMi41IixyOiIuNSIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsiY2lyY2xlIix7Y3g6IjguNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XV0sc2x0PVtbInBhdGgiLHtkOiJNMTEuMjUgMTcuMjVoMS41TDEyIDE4eiJ9XSxbInBhdGgiLHtkOiJtMTUgMTIgMiAyIn1dLFsicGF0aCIse2Q6Ik0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSJ9XSxbInBhdGgiLHtkOiJNMjAuNjkgOS42N2E0LjUgNC41IDAgMSAwLTcuMDQtNS41IDguMzUgOC4zNSAwIDAgMC0zLjMgMCA0LjUgNC41IDAgMSAwLTcuMDQgNS41QzIuNDkgMTEuMiAyIDEyLjg4IDIgMTQuNSAyIDE5LjQ3IDYuNDggMjIgMTIgMjJzMTAtMi41MyAxMC03LjVjMC0xLjYyLS40OC0zLjMtMS4zLTQuODMifV0sWyJwYXRoIix7ZDoiTTYgNi41YS40OTUuNDk1IDAgMCAxIC41LS41In1dLFsicGF0aCIse2Q6Im05IDEyLTIgMiJ9XV0sbmx0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDE1aDE4In1dLFsicGF0aCIse2Q6Im0xNSA4LTMgMy0zLTMifV1dLE52PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNCAxNWgxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNWgyIn1dLFsicGF0aCIse2Q6Ik0zIDE1aDIifV0sWyJwYXRoIix7ZDoiTTkgMTVoMSJ9XV0sb2x0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDE1aDE4In1dLFsicGF0aCIse2Q6Im05IDEwIDMtMyAzIDMifV1dLGxsdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XV0sRnY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCJ9XSxbInBhdGgiLHtkOiJtMTYgMTUtMy0zIDMtMyJ9XV0sT3Y9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkgMTR2MSJ9XSxbInBhdGgiLHtkOiJNOSAxOXYyIn1dLFsicGF0aCIse2Q6Ik05IDN2MiJ9XSxbInBhdGgiLHtkOiJNOSA5djEifV1dLFJ2PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJwYXRoIix7ZDoibTE0IDkgMyAzLTMgMyJ9XV0sY2x0PVtbInBhdGgiLHtkOiJNMTUgMTBWOSJ9XSxbInBhdGgiLHtkOiJNMTUgMTV2LTEifV0sWyJwYXRoIix7ZDoiTTE1IDIxdi0yIn1dLFsicGF0aCIse2Q6Ik0xNSA1VjMifV0sWyJwYXRoIix7ZDoiTTkgMTBWOSJ9XSxbInBhdGgiLHtkOiJNOSAxNXYtMSJ9XSxbInBhdGgiLHtkOiJNOSAyMXYtMiJ9XSxbInBhdGgiLHtkOiJNOSA1VjMifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0sQnY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCJ9XV0sZGx0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4In1dLFsicGF0aCIse2Q6Im04IDkgMyAzLTMgMyJ9XV0sSHY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE1IDE0djEifV0sWyJwYXRoIix7ZDoiTTE1IDE5djIifV0sWyJwYXRoIix7ZDoiTTE1IDN2MiJ9XSxbInBhdGgiLHtkOiJNMTUgOXYxIn1dXSxwbHQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgifV0sWyJwYXRoIix7ZDoibTEwIDE1LTMtMyAzLTMifV1dLGhsdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCJ9XV0sdWx0PVtbInBhdGgiLHtkOiJNMTQgMTVoMSJ9XSxbInBhdGgiLHtkOiJNMTQgOWgxIn1dLFsicGF0aCIse2Q6Ik0xOSAxNWgyIn1dLFsicGF0aCIse2Q6Ik0xOSA5aDIifV0sWyJwYXRoIix7ZDoiTTMgMTVoMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDIifV0sWyJwYXRoIix7ZDoiTTkgMTVoMSJ9XSxbInBhdGgiLHtkOiJNOSA5aDEifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0sZmx0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0zIDloMTgifV0sWyJwYXRoIix7ZDoibTkgMTYgMy0zIDMgMyJ9XV0scXY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE0IDloMSJ9XSxbInBhdGgiLHtkOiJNMTkgOWgyIn1dLFsicGF0aCIse2Q6Ik0zIDloMiJ9XSxbInBhdGgiLHtkOiJNOSA5aDEifV1dLG1sdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicGF0aCIse2Q6Im0xNSAxNC0zIDMtMy0zIn1dXSxnbHQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XV0sYmx0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik05IDN2MTgifV0sWyJwYXRoIix7ZDoiTTkgMTVoMTIifV1dLHZsdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxMiJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCJ9XV0sVnY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJNOSAyMVY5In1dXSx5bHQ9W1sicGF0aCIse2Q6Im0xNiA2LTguNDE0IDguNTg2YTIgMiAwIDAgMCAyLjgyOSAyLjgyOWw4LjQxNC04LjU4NmE0IDQgMCAxIDAtNS42NTctNS42NTdsLTguMzc5IDguNTUxYTYgNiAwIDEgMCA4LjQ4NSA4LjQ4NWw4LjM3OS04LjU1MSJ9XV0seGx0PVtbInBhdGgiLHtkOiJNOCAyMXMtNC0zLTQtOSA0LTkgNC05In1dLFsicGF0aCIse2Q6Ik0xNiAzczQgMyA0IDktNCA5LTQgOSJ9XV0sd2x0PVtbInBhdGgiLHtkOiJNMTEgMTVoMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2MyJ9XSxbInBhdGgiLHtkOiJNMTIgMTl2MyJ9XSxbInBhdGgiLHtkOiJNMTUuMjgyIDE5YTEgMSAwIDAgMCAuOTQ4LS42OGwyLjM3LTYuOTg4YTcgNyAwIDEgMC0xMy4yIDBsMi4zNyA2Ljk4OGExIDEgMCAwIDAgLjk0OC42OHoifV0sWyJwYXRoIix7ZDoiTTkgOWEzIDMgMCAxIDEgNiAwIn1dXSxNbHQ9W1sicGF0aCIse2Q6Ik01LjggMTEuMyAyIDIybDEwLjctMy43OSJ9XSxbInBhdGgiLHtkOiJNNCAzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMjIgOGguMDEifV0sWyJwYXRoIix7ZDoiTTE1IDJoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMiAyMGguMDEifV0sWyJwYXRoIix7ZDoibTIyIDItMi4yNC43NWEyLjkgMi45IDAgMCAwLTEuOTYgMy4xMmMuMS44Ni0uNTcgMS42My0xLjQ1IDEuNjNoLS4zOGMtLjg2IDAtMS42LjYtMS43NiAxLjQ0TDE0IDEwIn1dLFsicGF0aCIse2Q6Im0yMiAxMy0uODItLjMzYy0uODYtLjM0LTEuODIuMi0xLjk4IDEuMTFjLS4xMS43LS43MiAxLjIyLTEuNDMgMS4yMkgxNyJ9XSxbInBhdGgiLHtkOiJtMTEgMiAuMzMuODJjLjM0Ljg2LS4yIDEuODItMS4xMSAxLjk4QzkuNTIgNC45IDkgNS41MiA5IDYuMjNWNyJ9XSxbInBhdGgiLHtkOiJNMTEgMTNjMS45MyAxLjkzIDIuODMgNC4xNyAyIDUtLjgzLjgzLTMuMDctLjA3LTUtMi0xLjkzLTEuOTMtMi44My00LjE3LTItNSAuODMtLjgzIDMuMDcuMDcgNSAyWiJ9XV0semx0PVtbInJlY3QiLHt4OiIxNCIseToiMyIsd2lkdGg6IjUiLGhlaWdodDoiMTgiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjUiLHk6IjMiLHdpZHRoOiI1IixoZWlnaHQ6IjE4IixyeDoiMSJ9XV0sa2x0PVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjQiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiI4IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiMTYiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoifV1dLFNsdD1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjIwIix4OiI1Iix5OiIyIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTUgMTRoLjAxIn1dLFsicGF0aCIse2Q6Ik05IDZoNiJ9XSxbInBhdGgiLHtkOiJNOSAxMGg2In1dXSxqdj1bWyJwYXRoIix7ZDoiTTEzIDIxaDgifV0sWyJwYXRoIix7ZDoiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oifV1dLENsdD1bWyJwYXRoIix7ZDoibTEwIDEwLTYuMTU3IDYuMTYyYTIgMiAwIDAgMC0uNS44MzNsLTEuMzIyIDQuMzZhLjUuNSAwIDAgMCAuNjIyLjYyNGw0LjM1OC0xLjMyM2EyIDIgMCAwIDAgLjgzLS41TDE0IDEzLjk4MiJ9XSxbInBhdGgiLHtkOiJtMTIuODI5IDcuMTcyIDQuMzU5LTQuMzQ2YTEgMSAwIDEgMSAzLjk4NiAzLjk4NmwtNC4zNTMgNC4zNTMifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV0sX2x0PVtbInBhdGgiLHtkOiJNMTUuNzA3IDIxLjI5M2ExIDEgMCAwIDEtMS40MTQgMGwtMS41ODYtMS41ODZhMSAxIDAgMCAxIDAtMS40MTRsNS41ODYtNS41ODZhMSAxIDAgMCAxIDEuNDE0IDBsMS41ODYgMS41ODZhMSAxIDAgMCAxIDAgMS40MTR6In1dLFsicGF0aCIse2Q6Im0xOCAxMy0xLjM3NS02Ljg3NGExIDEgMCAwIDAtLjc0Ni0uNzc2TDMuMjM1IDIuMDI4YTEgMSAwIDAgMC0xLjIwNyAxLjIwN0w1LjM1IDE1Ljg3OWExIDEgMCAwIDAgLjc3Ni43NDZMMTMgMTgifV0sWyJwYXRoIix7ZDoibTIuMyAyLjMgNy4yODYgNy4yODYifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiMiJ9XV0sVXY9W1sicGF0aCIse2Q6Ik0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6In1dXSxUbHQ9W1sicGF0aCIse2Q6Ik0xMyAyMWg4In1dLFsicGF0aCIse2Q6Im0xNSA1IDQgNCJ9XSxbInBhdGgiLHtkOiJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiJ9XV0sTGx0PVtbInBhdGgiLHtkOiJtMTAgMTAtNi4xNTcgNi4xNjJhMiAyIDAgMCAwLS41LjgzM2wtMS4zMjIgNC4zNmEuNS41IDAgMCAwIC42MjIuNjI0bDQuMzU4LTEuMzIzYTIgMiAwIDAgMCAuODMtLjVMMTQgMTMuOTgyIn1dLFsicGF0aCIse2Q6Im0xMi44MjkgNy4xNzIgNC4zNTktNC4zNDZhMSAxIDAgMSAxIDMuOTg2IDMuOTg2bC00LjM1MyA0LjM1MyJ9XSxbInBhdGgiLHtkOiJtMTUgNSA0IDQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV0sJGx0PVtbInBhdGgiLHtkOiJNMTMgNyA4LjcgMi43YTIuNDEgMi40MSAwIDAgMC0zLjQgMEwyLjcgNS4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNEw3IDEzIn1dLFsicGF0aCIse2Q6Im04IDYgMi0yIn1dLFsicGF0aCIse2Q6Im0xOCAxNiAyLTIifV0sWyJwYXRoIix7ZDoibTE3IDExIDQuMyA0LjNjLjk0Ljk0Ljk0IDIuNDYgMCAzLjRsLTIuNiAyLjZjLS45NC45NC0yLjQ2Ljk0LTMuNCAwTDExIDE3In1dLFsicGF0aCIse2Q6Ik0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6In1dLFsicGF0aCIse2Q6Im0xNSA1IDQgNCJ9XV0sQWx0PVtbInBhdGgiLHtkOiJNMTAuODMgMi4zOGEyIDIgMCAwIDEgMi4zNCAwbDggNS43NGEyIDIgMCAwIDEgLjczIDIuMjVsLTMuMDQgOS4yNmEyIDIgMCAwIDEtMS45IDEuMzdINy4wNGEyIDIgMCAwIDEtMS45LTEuMzdMMi4xIDEwLjM3YTIgMiAwIDAgMSAuNzMtMi4yNXoifV1dLERsdD1bWyJwYXRoIix7ZDoiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oifV0sWyJwYXRoIix7ZDoibTE1IDUgNCA0In1dXSxFbHQ9W1sibGluZSIse3gxOiIxOSIseDI6IjUiLHkxOiI1Iix5MjoiMTkifV0sWyJjaXJjbGUiLHtjeDoiNi41IixjeToiNi41IixyOiIyLjUifV0sWyJjaXJjbGUiLHtjeDoiMTcuNSIsY3k6IjE3LjUiLHI6IjIuNSJ9XV0sUGx0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjUiLHI6IjEifV0sWyJwYXRoIix7ZDoibTkgMjAgMy02IDMgNiJ9XSxbInBhdGgiLHtkOiJtNiA4IDYgMiA2LTIifV0sWyJwYXRoIix7ZDoiTTEyIDEwdjQifV1dLElsdD1bWyJwYXRoIix7ZDoiTTIwIDExSDQifV0sWyJwYXRoIix7ZDoiTTIwIDdINCJ9XSxbInBhdGgiLHtkOiJNNyAyMVY0YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMCAxMkg3In1dXSxObHQ9W1sicGF0aCIse2Q6Ik0xMyAyYTkgOSAwIDAgMSA5IDkifV0sWyJwYXRoIix7ZDoiTTEzIDZhNSA1IDAgMCAxIDUgNSJ9XSxbInBhdGgiLHtkOiJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQifV1dLEZsdD1bWyJwYXRoIix7ZDoiTTE0IDZoOCJ9XSxbInBhdGgiLHtkOiJtMTggMiA0IDQtNCA0In1dLFsicGF0aCIse2Q6Ik0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCJ9XV0sT2x0PVtbInBhdGgiLHtkOiJNMTYgMnY2aDYifV0sWyJwYXRoIix7ZDoibTIyIDItNiA2In1dLFsicGF0aCIse2Q6Ik0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCJ9XV0sUmx0PVtbInBhdGgiLHtkOiJtMTYgMiA2IDYifV0sWyJwYXRoIix7ZDoibTIyIDItNiA2In1dLFsicGF0aCIse2Q6Ik0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCJ9XV0sQmx0PVtbInBhdGgiLHtkOiJNMTAuMSAxMy45YTE0IDE0IDAgMCAwIDMuNzMyIDIuNjY4IDEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMiAxOCAxOCAwIDAgMS0xMi43MjgtNS4yNzIifV0sWyJwYXRoIix7ZDoiTTIyIDIgMiAyMiJ9XSxbInBhdGgiLHtkOiJNNC43NiAxMy41ODJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgLjI0NC40NzMifV1dLEhsdD1bWyJwYXRoIix7ZDoibTE2IDggNi02In1dLFsicGF0aCIse2Q6Ik0yMiA4VjJoLTYifV0sWyJwYXRoIix7ZDoiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0In1dXSxxbHQ9W1sicGF0aCIse2Q6Ik0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCJ9XV0sVmx0PVtbImxpbmUiLHt4MToiOSIseDI6IjkiLHkxOiI0Iix5MjoiMjAifV0sWyJwYXRoIix7ZDoiTTQgN2MwLTEuNyAxLjMtMyAzLTNoMTMifV0sWyJwYXRoIix7ZDoiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCJ9XV0samx0PVtbInBhdGgiLHtkOiJNMTguNSA4Yy0xLjQgMC0yLjYtLjgtMy4yLTJBNi44NyA2Ljg3IDAgMCAwIDIgOXYxMWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTguNUMyMiA5LjYgMjAuNCA4IDE4LjUgOCJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyMCJ9XSxbInBhdGgiLHtkOiJNNiAxNHY0In1dLFsicGF0aCIse2Q6Ik0xMCAxNHY0In1dLFsicGF0aCIse2Q6Ik0xNCAxNHY0In1dLFsicGF0aCIse2Q6Ik0xOCAxNHY0In1dXSxVbHQ9W1sicGF0aCIse2Q6Im0xNCAxMy04LjM4MSA4LjM4YTEgMSAwIDAgMS0zLjAwMS0zTDExIDkuOTk5In1dLFsicGF0aCIse2Q6Ik0xNS45NzMgNC4wMjdBMTMgMTMgMCAwIDAgNS45MDIgMi4zNzNjLTEuMzk4LjM0Mi0xLjA5MiAyLjE1OC4yNzcgMi42MDFhMTkuOSAxOS45IDAgMCAxIDUuODIyIDMuMDI0In1dLFsicGF0aCIse2Q6Ik0xNi4wMDEgMTEuOTk5YTE5LjkgMTkuOSAwIDAgMSAzLjAyNCA1LjgyNGMuNDQ0IDEuMzY5IDIuMjYgMS42NzYgMi42MDMuMjc4QTEzIDEzIDAgMCAwIDIwIDguMDY5In1dLFsicGF0aCIse2Q6Ik0xOC4zNTIgMy4zNTJhMS4yMDUgMS4yMDUgMCAwIDAtMS43MDQgMGwtNS4yOTYgNS4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDUuMjk2LTUuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAtMS43MDR6In1dXSxXbHQ9W1sicGF0aCIse2Q6Ik0yMSA5VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBjMCAxLjEuOSAyIDIgMmg0In1dLFsicmVjdCIse3dpZHRoOiIxMCIsaGVpZ2h0OiI3Iix4OiIxMiIseToiMTMiLHJ4OiIyIn1dXSxHbHQ9W1sicGF0aCIse2Q6Ik0xMSAxN2gzdjJhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNhMy4xNiAzLjE2IDAgMCAwIDItMmgxYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMWgtMWE1IDUgMCAwIDAtMi00VjNhNCA0IDAgMCAwLTMuMiAxLjZsLS4zLjRIMTFhNiA2IDAgMCAwLTYgNnYxYTUgNSAwIDAgMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXoifV0sWyJwYXRoIix7ZDoiTTE2IDEwaC4wMSJ9XSxbInBhdGgiLHtkOiJNMiA4djFhMiAyIDAgMCAwIDIgMmgxIn1dXSxZbHQ9W1sicGF0aCIse2Q6Ik0yIDEwaDZWNCJ9XSxbInBhdGgiLHtkOiJtMiA0IDYgNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTBWN2EyIDIgMCAwIDAtMi0yaC03In1dLFsicGF0aCIse2Q6Ik0zIDE0djJhMiAyIDAgMCAwIDIgMmgzIn1dLFsicmVjdCIse3g6IjEyIix5OiIxNCIsd2lkdGg6IjEwIixoZWlnaHQ6IjciLHJ4OiIxIn1dXSxabHQ9W1sicGF0aCIse2Q6Ik0xNCAzdjExIn1dLFsicGF0aCIse2Q6Ik0xNCA5aC0zYTMgMyAwIDAgMSAwLTZoOSJ9XSxbInBhdGgiLHtkOiJNMTggM3YxMSJ9XSxbInBhdGgiLHtkOiJNMjIgMThIMmw0LTQifV0sWyJwYXRoIix7ZDoibTYgMjItNC00In1dXSxYbHQ9W1sicGF0aCIse2Q6Ik0xMCAzdjExIn1dLFsicGF0aCIse2Q6Ik0xMCA5SDdhMSAxIDAgMCAxIDAtNmg4In1dLFsicGF0aCIse2Q6Ik0xNCAzdjExIn1dLFsicGF0aCIse2Q6Im0xOCAxNCA0IDRIMiJ9XSxbInBhdGgiLHtkOiJtMjIgMTgtNCA0In1dXSxLbHQ9W1sicGF0aCIse2Q6Ik0xMyA0djE2In1dLFsicGF0aCIse2Q6Ik0xNyA0djE2In1dLFsicGF0aCIse2Q6Ik0xOSA0SDkuNWE0LjUgNC41IDAgMCAwIDAgOUgxMyJ9XV0sUWx0PVtbInBhdGgiLHtkOiJNMTggMTFoLTRhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoNCJ9XSxbInBhdGgiLHtkOiJNNiA3djEzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjcifV0sWyJyZWN0Iix7d2lkdGg6IjE2IixoZWlnaHQ6IjUiLHg6IjQiLHk6IjIiLHJ4OiIxIn1dXSxKbHQ9W1sicGF0aCIse2Q6Im0xMC41IDIwLjUgMTAtMTBhNC45NSA0Ljk1IDAgMSAwLTctN2wtMTAgMTBhNC45NSA0Ljk1IDAgMSAwIDcgN1oifV0sWyJwYXRoIix7ZDoibTguNSA4LjUgNyA3In1dXSxlY3Q9W1sicGF0aCIse2Q6Ik0xMiAxN3Y1In1dLFsicGF0aCIse2Q6Ik0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNOSA5djEuNzZhMiAyIDAgMCAxLTEuMTEgMS43OWwtMS43OC45QTIgMiAwIDAgMCA1IDE1LjI0VjE2YTEgMSAwIDAgMCAxIDFoMTEifV1dLHRjdD1bWyJwYXRoIix7ZDoiTTEyIDE3djUifV0sWyJwYXRoIix7ZDoiTTkgMTAuNzZhMiAyIDAgMCAxLTEuMTEgMS43OWwtMS43OC45QTIgMiAwIDAgMCA1IDE1LjI0VjE2YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtLjc2YTIgMiAwIDAgMC0xLjExLTEuNzlsLTEuNzgtLjlBMiAyIDAgMCAxIDE1IDEwLjc2VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDhhMiAyIDAgMCAwIDAgNCAxIDEgMCAwIDEgMSAxeiJ9XV0sYWN0PVtbInBhdGgiLHtkOiJtMTIgOS04LjQxNCA4LjQxNEEyIDIgMCAwIDAgMyAxOC44Mjh2MS4zNDRhMiAyIDAgMCAxLS41ODYgMS40MTRBMiAyIDAgMCAxIDMuODI4IDIxaDEuMzQ0YTIgMiAwIDAgMCAxLjQxNC0uNTg2TDE1IDEyIn1dLFsicGF0aCIse2Q6Im0xOCA5IC40LjRhMSAxIDAgMSAxLTMgM2wtMy44LTMuOGExIDEgMCAxIDEgMy0zbC40LjQgMy40LTMuNGExIDEgMCAxIDEgMyAzeiJ9XSxbInBhdGgiLHtkOiJtMiAyMiAuNDE0LS40MTQifV1dLGljdD1bWyJwYXRoIix7ZDoibTEyIDE0LTEgMSJ9XSxbInBhdGgiLHtkOiJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIn1dLFsicGF0aCIse2Q6Ik0xNy43NzUgNS42NTRhMTUuNjggMTUuNjggMCAwIDAtMTIuMTIxIDEyLjEyIn1dLFsicGF0aCIse2Q6Ik0xOC44IDkuM2ExIDEgMCAwIDAgMi4xIDcuNyJ9XSxbInBhdGgiLHtkOiJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6In1dXSxyY3Q9W1sicGF0aCIse2Q6Ik0yIDIyaDIwIn1dLFsicGF0aCIse2Q6Ik0zLjc3IDEwLjc3IDIgOWwyLTQuNSAxLjEuNTVjLjU1LjI4LjkuODQuOSAxLjQ1cy4zNSAxLjE3LjkgMS40NUw4IDguNWwzLTYgMS4wNS41M2EyIDIgMCAwIDEgMS4wOSAxLjUybC43MiA1LjRhMiAyIDAgMCAwIDEuMDkgMS41Mmw0LjQgMi4yYy40Mi4yMi43OC41NSAxLjAxLjk2bC42IDEuMDNjLjQ5Ljg4LS4wNiAxLjk4LTEuMDYgMi4xbC0xLjE4LjE1Yy0uNDcuMDYtLjk1LS4wMi0xLjM3LS4yNEw0LjI5IDExLjE1YTIgMiAwIDAgMS0uNTItLjM4WiJ9XV0sc2N0PVtbInBhdGgiLHtkOiJNMiAyMmgyMCJ9XSxbInBhdGgiLHtkOiJNNi4zNiAxNy40IDQgMTdsLTItNCAxLjEtLjU1YTIgMiAwIDAgMSAxLjggMGwuMTcuMWEyIDIgMCAwIDAgMS44IDBMOCAxMiA1IDZsLjktLjQ1YTIgMiAwIDAgMSAyLjA5LjJsNC4wMiAzYTIgMiAwIDAgMCAyLjEuMmw0LjE5LTIuMDZhMi40MSAyLjQxIDAgMCAxIDEuNzMtLjE3TDIxIDdhMS40IDEuNCAwIDAgMSAuODcgMS45OWwtLjM4Ljc2Yy0uMjMuNDYtLjYuODQtMS4wNyAxLjA4TDcuNTggMTcuMmEyIDIgMCAwIDEtMS4yMi4xOFoifV1dLG5jdD1bWyJwYXRoIix7ZDoiTTE3LjggMTkuMiAxNiAxMWwzLjUtMy41QzIxIDYgMjEuNSA0IDIxIDNjLTEtLjUtMyAwLTQuNSAxLjVMMTMgOCA0LjggNi4yYy0uNS0uMS0uOS4xLTEuMS41bC0uMy41Yy0uMi41LS4xIDEgLjMgMS4zTDkgMTJsLTIgM0g0bC0xIDEgMyAyIDIgMyAxLTF2LTNsMy0yIDMuNSA1LjNjLjMuNC44LjUgMS4zLjNsLjUtLjJjLjQtLjMuNi0uNy41LTEuMnoifV1dLG9jdD1bWyJwYXRoIix7ZDoiTTUgNWEyIDIgMCAwIDEgMy4wMDgtMS43MjhsMTEuOTk3IDYuOTk4YTIgMiAwIDAgMSAuMDAzIDMuNDU4bC0xMiA3QTIgMiAwIDAgMSA1IDE5eiJ9XV0sbGN0PVtbInBhdGgiLHtkOiJNOSAydjYifV0sWyJwYXRoIix7ZDoiTTE1IDJ2NiJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NSJ9XSxbInBhdGgiLHtkOiJNNSA4aDE0In1dLFsicGF0aCIse2Q6Ik02IDExVjhoMTJ2M2E2IDYgMCAxIDEtMTIgMFoifV1dLFd2PVtbInBhdGgiLHtkOiJNNi4zIDIwLjNhMi40IDIuNCAwIDAgMCAzLjQgMEwxMiAxOGwtNi02LTIuMyAyLjNhMi40IDIuNCAwIDAgMCAwIDMuNFoifV0sWyJwYXRoIix7ZDoibTIgMjIgMy0zIn1dLFsicGF0aCIse2Q6Ik03LjUgMTMuNSAxMCAxMSJ9XSxbInBhdGgiLHtkOiJNMTAuNSAxNi41IDEzIDE0In1dLFsicGF0aCIse2Q6Im0xOCAzLTQgNGg2bC00IDQifV1dLGNjdD1bWyJwYXRoIix7ZDoiTTEyIDIydi01In1dLFsicGF0aCIse2Q6Ik0xNSA4VjIifV0sWyJwYXRoIix7ZDoiTTE3IDhhMSAxIDAgMCAxIDEgMXY0YTQgNCAwIDAgMS00IDRoLTRhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik05IDhWMiJ9XV0sZGN0PVtbInBhdGgiLHtkOiJNNSAxMmgxNCJ9XSxbInBhdGgiLHtkOiJNMTIgNXYxNCJ9XV0scGN0PVtbInBhdGgiLHtkOiJNMyAydjFjMCAxIDIgMSAyIDJTMyA2IDMgN3MyIDEgMiAyLTIgMS0yIDIgMiAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMTggNmguMDEifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMC44MyA4LjgzYTQgNCAwIDAgMC01LjY2LTUuNjZsLTEyIDEyYTQgNCAwIDEgMCA1LjY2IDUuNjZaIn1dLFsicGF0aCIse2Q6Ik0xOCAxMS42NlYyMmE0IDQgMCAwIDAgNC00VjYifV1dLGhjdD1bWyJwYXRoIix7ZDoiTTEzIDE3YTEgMSAwIDEgMC0yIDBsLjUgNC41YTAuNSAwLjUgMCAwIDAgMSAweiIsZmlsbDoiY3VycmVudENvbG9yIn1dLFsicGF0aCIse2Q6Ik0xNi44NSAxOC41OGE5IDkgMCAxIDAtOS43IDAifV0sWyJwYXRoIix7ZDoiTTggMTRhNSA1IDAgMSAxIDggMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjExIixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifV1dLHVjdD1bWyJwYXRoIix7ZDoiTTIwIDNhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0yMCAwVjVhMiAyIDAgMCAxIDItMnoifV0sWyJwYXRoIix7ZDoibTggMTAgNCA0IDQtNCJ9XV0sZmN0PVtbInBhdGgiLHtkOiJNMTAgNC41VjRhMiAyIDAgMCAwLTIuNDEtMS45NTcifV0sWyJwYXRoIix7ZDoiTTEzLjkgOC40YTIgMiAwIDAgMC0xLjI2LTEuMjk1In1dLFsicGF0aCIse2Q6Ik0yMS43IDE2LjJBOCA4IDAgMCAwIDIyIDE0di0zYTIgMiAwIDEgMC00IDB2LTFhMiAyIDAgMCAwLTMuNjMtMS4xNTgifV0sWyJwYXRoIix7ZDoibTcgMTUtMS44LTEuOGEyIDIgMCAwIDAtMi43OSAyLjg2TDYgMTkuN2E3Ljc0IDcuNzQgMCAwIDAgNiAyLjNoMmE4IDggMCAwIDAgNS42NTctMi4zNDMifV0sWyJwYXRoIix7ZDoiTTYgNnY4In1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dLG1jdD1bWyJwYXRoIix7ZDoiTTIyIDE0YTggOCAwIDAgMS04IDgifV0sWyJwYXRoIix7ZDoiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMTBWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MSJ9XSxbInBhdGgiLHtkOiJNMTAgOS41VjRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjEwIn1dLFsicGF0aCIse2Q6Ik0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1In1dXSxnY3Q9W1sicGF0aCIse2Q6Ik0xOCA4YTIgMiAwIDAgMCAwLTQgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwIDAgNCJ9XSxbInBhdGgiLHtkOiJNMTAgMjIgOSA4In1dLFsicGF0aCIse2Q6Im0xNCAyMiAxLTE0In1dLFsicGF0aCIse2Q6Ik0yMCA4Yy41IDAgLjkuNC44IDFsLTIuNiAxMmMtLjEuNS0uNyAxLTEuMiAxSDdjLS42IDAtMS4xLS40LTEuMi0xTDMuMiA5Yy0uMS0uNi4zLTEgLjgtMVoifV1dLGJjdD1bWyJwYXRoIix7ZDoiTTE4LjYgMTQuNGMuOC0uOC44LTIgMC0yLjhsLTguMS04LjFhNC45NSA0Ljk1IDAgMSAwLTcuMSA3LjFsOC4xIDguMWMuOS43IDIuMS43IDIuOS0uMVoifV0sWyJwYXRoIix7ZDoibTIyIDIyLTUuNS01LjUifV1dLHZjdD1bWyJwYXRoIix7ZDoiTTE4IDdjMC01LjMzMy04LTUuMzMzLTggMCJ9XSxbInBhdGgiLHtkOiJNMTAgN3YxNCJ9XSxbInBhdGgiLHtkOiJNNiAyMWgxMiJ9XSxbInBhdGgiLHtkOiJNNiAxM2gxMCJ9XV0seWN0PVtbInBhdGgiLHtkOiJNMTguMzYgNi42NEE5IDkgMCAwIDEgMjAuNzcgMTUifV0sWyJwYXRoIix7ZDoiTTYuMTYgNi4xNmE5IDkgMCAxIDAgMTIuNjggMTIuNjgifV0sWyJwYXRoIix7ZDoiTTEyIDJ2NCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSx4Y3Q9W1sicGF0aCIse2Q6Ik0xMiAydjEwIn1dLFsicGF0aCIse2Q6Ik0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQifV1dLHdjdD1bWyJwYXRoIix7ZDoiTTEzLjUgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXYuNSJ9XSxbInBhdGgiLHtkOiJtMTYgMTkgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNNiAxOEg0YTIgMiAwIDAgMS0yLTJ2LTVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2In1dXSxNY3Q9W1sicGF0aCIse2Q6Ik0yIDNoMjAifV0sWyJwYXRoIix7ZDoiTTIxIDN2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWMyJ9XSxbInBhdGgiLHtkOiJtNyAyMSA1LTUgNSA1In1dXSx6Y3Q9W1sicGF0aCIse2Q6Ik0xMi41MzEgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoNi4zNzcifV0sWyJwYXRoIix7ZDoibTE2LjUgMTYuNSA1IDUifV0sWyJwYXRoIix7ZDoibTE2LjUgMjEuNSA1LTUifV0sWyJwYXRoIix7ZDoiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxLjUifV0sWyJwYXRoIix7ZDoiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2In1dXSxrY3Q9W1sicGF0aCIse2Q6Ik02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik02IDlWM2ExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2NiJ9XSxbInJlY3QiLHt4OiI2Iix5OiIxNCIsd2lkdGg6IjEyIixoZWlnaHQ6IjgiLHJ4OiIxIn1dXSxTY3Q9W1sicGF0aCIse2Q6Ik01IDcgMyA1In1dLFsicGF0aCIse2Q6Ik05IDZWMyJ9XSxbInBhdGgiLHtkOiJtMTMgNyAyLTIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEzIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xMS44MyAxMkgyMGEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTRhMiAyIDAgMCAxIDItMmgyLjE3In1dLFsicGF0aCIse2Q6Ik0xNiAxNmgyIn1dXSxDY3Q9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDl2MTEifV0sWyJwYXRoIix7ZDoiTTIgOWgxM2EyIDIgMCAwIDEgMiAydjkifV1dLF9jdD1bWyJwYXRoIix7ZDoiTTE1LjM5IDQuMzlhMSAxIDAgMCAwIDEuNjgtLjQ3NCAyLjUgMi41IDAgMSAxIDMuMDE0IDMuMDE1IDEgMSAwIDAgMC0uNDc0IDEuNjhsMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMCAzLjQxNEwxOS42MSAxNS4zOWExIDEgMCAwIDEtMS42OC0uNDc0IDIuNSAyLjUgMCAxIDAtMy4wMTQgMy4wMTUgMSAxIDAgMCAxIC40NzQgMS42OGwtMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEtMy40MTQgMEw4LjYxIDE5LjYxYTEgMSAwIDAgMC0xLjY4LjQ3NCAyLjUgMi41IDAgMSAxLTMuMDE0LTMuMDE1IDEgMSAwIDAgMCAuNDc0LTEuNjhsLTEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAtMy40MTRMNC4zOSA4LjYxYTEgMSAwIDAgMSAxLjY4LjQ3NCAyLjUgMi41IDAgMSAwIDMuMDE0LTMuMDE1IDEgMSAwIDAgMS0uNDc0LTEuNjhsMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMy40MTQgMHoifV1dLFRjdD1bWyJwYXRoIix7ZDoiTTIuNSAxNi44OGExIDEgMCAwIDEtLjMyLTEuNDNsOS0xMy4wMmExIDEgMCAwIDEgMS42NCAwbDkgMTMuMDFhMSAxIDAgMCAxLS4zMiAxLjQ0bC04LjUxIDQuODZhMiAyIDAgMCAxLTEuOTggMFoifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MjAifV1dLExjdD1bWyJyZWN0Iix7d2lkdGg6IjUiLGhlaWdodDoiNSIseDoiMyIseToiMyIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjUiLGhlaWdodDoiNSIseDoiMTYiLHk6IjMiLHJ4OiIxIn1dLFsicmVjdCIse3dpZHRoOiI1IixoZWlnaHQ6IjUiLHg6IjMiLHk6IjE2IixyeDoiMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTZoLTNhMiAyIDAgMCAwLTIgMnYzIn1dLFsicGF0aCIse2Q6Ik0yMSAyMXYuMDEifV0sWyJwYXRoIix7ZDoiTTEyIDd2M2EyIDIgMCAwIDEtMiAySDcifV0sWyJwYXRoIix7ZDoiTTMgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMiAzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTZ2LjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxMmgxIn1dLFsicGF0aCIse2Q6Ik0yMSAxMnYuMDEifV0sWyJwYXRoIix7ZDoiTTEyIDIxdi0xIn1dXSwkY3Q9W1sicGF0aCIse2Q6Ik0xNiAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiJ9XSxbInBhdGgiLHtkOiJNNSAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiJ9XV0sQWN0PVtbInBhdGgiLHtkOiJNMTMgMTZhMyAzIDAgMCAxIDIuMjQgNSJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCAyMWgtOGE0IDQgMCAwIDEtNC00IDcgNyAwIDAgMSA3LTdoLjJMOS42IDYuNGExIDEgMCAxIDEgMi44LTIuOEwxNS44IDdoLjJjMy4zIDAgNiAyLjcgNiA2djFhMiAyIDAgMCAxLTIgMmgtMWEzIDMgMCAwIDAtMyAzIn1dLFsicGF0aCIse2Q6Ik0yMCA4LjU0VjRhMiAyIDAgMSAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik03LjYxMiAxMi41MjRhMyAzIDAgMSAwLTEuNiA0LjMifV1dLERjdD1bWyJwYXRoIix7ZDoiTTE5LjA3IDQuOTNBMTAgMTAgMCAwIDAgNi45OSAzLjM0In1dLFsicGF0aCIse2Q6Ik00IDZoLjAxIn1dLFsicGF0aCIse2Q6Ik0yLjI5IDkuNjJBMTAgMTAgMCAxIDAgMjEuMzEgOC4zNSJ9XSxbInBhdGgiLHtkOiJNMTYuMjQgNy43NkE2IDYgMCAxIDAgOC4yMyAxNi42NyJ9XSxbInBhdGgiLHtkOiJNMTIgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNy45OSAxMS42NkE2IDYgMCAwIDEgMTUuNzcgMTYuNjcifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMTMuNDEgMTAuNTkgNS42Ni01LjY2In1dXSxFY3Q9W1sicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE0IDE1LjQ2NDFhNCA0IDAgMCAxLTQgMEw3LjUyNzg2IDE5Ljc0NTk3IEEgMSAxIDAgMCAwIDcuOTkzMDMgMjEuMTYyMTEgMTAgMTAgMCAwIDAgMTYuMDA2OTcgMjEuMTYyMTEgMSAxIDAgMCAwIDE2LjQ3MjE0IDE5Ljc0NTk3eiJ9XSxbInBhdGgiLHtkOiJNMTYgMTJhNCA0IDAgMCAwLTItMy40NjRsMi40NzItNC4yODJhMSAxIDAgMCAxIDEuNDYtLjMwNSAxMCAxMCAwIDAgMSA0LjAwNiA2Ljk0QTEgMSAwIDAgMSAyMSAxMnoifV0sWyJwYXRoIix7ZDoiTTggMTJhNCA0IDAgMCAxIDItMy40NjRMNy41MjggNC4yNTRhMSAxIDAgMCAwLTEuNDYtLjMwNSAxMCAxMCAwIDAgMC00LjAwNiA2Ljk0QTEgMSAwIDAgMCAzIDEyeiJ9XV0sUGN0PVtbInBhdGgiLHtkOiJNMyAxMmgzLjI4YTEgMSAwIDAgMSAuOTQ4LjY4NGwyLjI5OCA3LjkzNGEuNS41IDAgMCAwIC45Ni0uMDQ0TDEzLjgyIDQuNzcxQTEgMSAwIDAgMSAxNC43OTIgNEgyMSJ9XV0sSWN0PVtbInBhdGgiLHtkOiJNNSAxNnYyIn1dLFsicGF0aCIse2Q6Ik0xOSAxNnYyIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTggMTJoLjAxIn1dXSxOY3Q9W1sicGF0aCIse2Q6Ik00LjkgMTYuMUMxIDEyLjIgMSA1LjggNC45IDEuOSJ9XSxbInBhdGgiLHtkOiJNNy44IDQuN2E2LjE0IDYuMTQgMCAwIDAtLjggNy41In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTYuMiA0LjhjMiAyIDIuMjYgNS4xMS44IDcuNDcifV0sWyJwYXRoIix7ZDoiTTE5LjEgMS45YTkuOTYgOS45NiAwIDAgMSAwIDE0LjEifV0sWyJwYXRoIix7ZDoiTTkuNSAxOGg1In1dLFsicGF0aCIse2Q6Im04IDIyIDQtMTEgNCAxMSJ9XV0sRmN0PVtbInBhdGgiLHtkOiJNMTYuMjQ3IDcuNzYxYTYgNiAwIDAgMSAwIDguNDc4In1dLFsicGF0aCIse2Q6Ik0xOS4wNzUgNC45MzNhMTAgMTAgMCAwIDEgMCAxNC4xMzQifV0sWyJwYXRoIix7ZDoiTTQuOTI1IDE5LjA2N2ExMCAxMCAwIDAgMSAwLTE0LjEzNCJ9XSxbInBhdGgiLHtkOiJNNy43NTMgMTYuMjM5YTYgNiAwIDAgMSAwLTguNDc4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dLE9jdD1bWyJwYXRoIix7ZDoiTTIwLjM0IDE3LjUyYTEwIDEwIDAgMSAwLTIuODIgMi44MiJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjE5IixyOiIyIn1dLFsicGF0aCIse2Q6Im0xMy40MSAxMy40MSA0LjE4IDQuMTgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMiJ9XV0sUmN0PVtbInBhdGgiLHtkOiJNNSAxNWgxNCJ9XSxbInBhdGgiLHtkOiJNNSA5aDE0In1dLFsicGF0aCIse2Q6Im0xNCAyMC01LTUgNi02LTUtNSJ9XV0sQmN0PVtbInBhdGgiLHtkOiJNMjIgMTdhMTAgMTAgMCAwIDAtMjAgMCJ9XSxbInBhdGgiLHtkOiJNNiAxN2E2IDYgMCAwIDEgMTIgMCJ9XSxbInBhdGgiLHtkOiJNMTAgMTdhMiAyIDAgMCAxIDQgMCJ9XV0sSGN0PVtbInBhdGgiLHtkOiJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIn1dLFsicGF0aCIse2Q6Ik0xMy4yMzYgMThhMyAzIDAgMCAwLTIuMi01In1dLFsicGF0aCIse2Q6Ik0xNiA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyJ9XSxbInBhdGgiLHtkOiJNMTcgNC45ODhhMyAzIDAgMSAwLTUuMiAyLjA1MkE3IDcgMCAwIDAgNCAxNC4wMTUgNCA0IDAgMCAwIDggMTgifV1dLHFjdD1bWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjIwIix4OiI2Iix5OiIyIixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjYiLHJ4OiIyIn1dXSxWY3Q9W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik0xMiA2LjV2MTEifV0sWyJwYXRoIix7ZDoiTTE1IDkuNGE0IDQgMCAxIDAgMCA1LjIifV1dLGpjdD1bWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoifV0sWyJwYXRoIix7ZDoiTTggMTJoNSJ9XSxbInBhdGgiLHtkOiJNMTYgOS41YTQgNCAwIDEgMCAwIDUuMiJ9XV0sVWN0PVtbInBhdGgiLHtkOiJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiJ9XSxbInBhdGgiLHtkOiJNOCA3aDgifV0sWyJwYXRoIix7ZDoiTTEyIDE3LjUgOCAxNWgxYTQgNCAwIDAgMCAwLTgifV0sWyJwYXRoIix7ZDoiTTggMTFoOCJ9XV0sV2N0PVtbInBhdGgiLHtkOiJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiJ9XSxbInBhdGgiLHtkOiJtMTIgMTAgMy0zIn1dLFsicGF0aCIse2Q6Im05IDcgMyAzdjcuNSJ9XSxbInBhdGgiLHtkOiJNOSAxMWg2In1dLFsicGF0aCIse2Q6Ik05IDE1aDYifV1dLEdjdD1bWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoifV0sWyJwYXRoIix7ZDoiTTggMTNoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTdWOS41YTIuNSAyLjUgMCAwIDEgNSAwIn1dLFsicGF0aCIse2Q6Ik04IDE3aDcifV1dLFljdD1bWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoifV0sWyJwYXRoIix7ZDoiTTggMTVoNSJ9XSxbInBhdGgiLHtkOiJNOCAxMWg1YTIgMiAwIDEgMCAwLTRoLTN2MTAifV1dLFpjdD1bWyJwYXRoIix7ZDoiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoifV0sWyJwYXRoIix7ZDoiTTEwIDE3VjdoNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTFoNCJ9XSxbInBhdGgiLHtkOiJNOCAxNWg1In1dXSxYY3Q9W1sicGF0aCIse2Q6Ik0xMyAxNkg4In1dLFsicGF0aCIse2Q6Ik0xNCA4SDgifV0sWyJwYXRoIix7ZDoiTTE2IDEySDgifV0sWyJwYXRoIix7ZDoiTTQgM2ExIDEgMCAwIDEgMS0xIDEuMyAxLjMgMCAwIDEgLjcuMmwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTM0LS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzMy42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNmExLjMgMS4zIDAgMCAxIDEuNCAwbC45MzQuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzMtLjZBMS4zIDEuMyAwIDAgMSAxOSAyYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMSAxLjMgMS4zIDAgMCAxLS43LS4ybC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzQuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTM0LS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLS43LjIgMSAxIDAgMCAxLTEtMXoifV1dLEtjdD1bWyJwYXRoIix7ZDoiTTEwIDYuNXYxMWE1LjUgNS41IDAgMCAwIDUuNS01LjUifV0sWyJwYXRoIix7ZDoibTE0IDgtNiAzIn1dLFsicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6In1dXSxRY3Q9W1sicGF0aCIse2Q6Ik00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIn1dLFsicGF0aCIse2Q6Ik0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgifV0sWyJwYXRoIix7ZDoiTTEyIDE3LjV2LTExIn1dXSxKY3Q9W1sicGF0aCIse2Q6Ik0xNCA0djE2SDNhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTF6In1dLFsiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjgifV1dLEd2PVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTIiLHg6IjIiLHk6IjYiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiAxMmguMDEifV0sWyJwYXRoIix7ZDoiTTE3IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAxMmguMDEifV1dLGU2dD1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjEyIix4OiIyIix5OiI2IixyeDoiMiJ9XV0sdDZ0PVtbInBhdGgiLHtkOiJNMjAgNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMS42LS44bC0xLjYtMi4xM2ExIDEgMCAwIDAtMS42IDBMOS42IDE3LjJBMiAyIDAgMCAxIDggMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoifV1dLGE2dD1bWyJyZWN0Iix7d2lkdGg6IjEyIixoZWlnaHQ6IjIwIix4OiI2Iix5OiIyIixyeDoiMiJ9XV0saTZ0PVtbInBhdGgiLHtkOiJNNyAxOUg0LjgxNWExLjgzIDEuODMgMCAwIDEtMS41Ny0uODgxIDEuNzg1IDEuNzg1IDAgMCAxLS4wMDQtMS43ODRMNy4xOTYgOS41In1dLFsicGF0aCIse2Q6Ik0xMSAxOWg4LjIwM2ExLjgzIDEuODMgMCAwIDAgMS41NTYtLjg5IDEuNzg0IDEuNzg0IDAgMCAwIDAtMS43NzVsLTEuMjI2LTIuMTIifV0sWyJwYXRoIix7ZDoibTE0IDE2LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoiTTguMjkzIDEzLjU5NiA3LjE5NiA5LjUgMy4xIDEwLjU5OCJ9XSxbInBhdGgiLHtkOiJtOS4zNDQgNS44MTEgMS4wOTMtMS44OTJBMS44MyAxLjgzIDAgMCAxIDExLjk4NSAzYTEuNzg0IDEuNzg0IDAgMCAxIDEuNTQ2Ljg4OGwzLjk0MyA2Ljg0MyJ9XSxbInBhdGgiLHtkOiJtMTMuMzc4IDkuNjMzIDQuMDk2IDEuMDk4IDEuMDk3LTQuMDk2In1dXSxyNnQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTciLHI6IjEifV0sWyJwYXRoIix7ZDoiTTIxIDd2NmgtNiJ9XSxbInBhdGgiLHtkOiJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyJ9XV0sczZ0PVtbInBhdGgiLHtkOiJtMTUgMTQgNS01LTUtNSJ9XSxbInBhdGgiLHtkOiJNMjAgOUg5LjVBNS41IDUuNSAwIDAgMCA0IDE0LjVBNS41IDUuNSAwIDAgMCA5LjUgMjBIMTMifV1dLG42dD1bWyJwYXRoIix7ZDoiTTIxIDd2NmgtNiJ9XSxbInBhdGgiLHtkOiJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyJ9XV0sbzZ0PVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSJ9XSxbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAwIDAgOSA5IDkuNzUgOS43NSAwIDAgMCA2Ljc0LTIuNzRMMjEgMTYifV0sWyJwYXRoIix7ZDoiTTE2IDE2aDV2NSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dXSxsNnQ9W1sicGF0aCIse2Q6Ik0yMSAxMmE5IDkgMCAwIDAtOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoNXY1In1dXSxjNnQ9W1sicGF0aCIse2Q6Ik0yMSA4TDE4Ljc0IDUuNzRBOS43NSA5Ljc1IDAgMCAwIDEyIDNDMTEgMyAxMC4wMyAzLjE2IDkuMTMgMy40NyJ9XSxbInBhdGgiLHtkOiJNOCAxNkgzdjUifV0sWyJwYXRoIix7ZDoiTTMgMTJDMyA5LjUxIDQgNy4yNiA1LjY0IDUuNjQifV0sWyJwYXRoIix7ZDoibTMgMTYgMi4yNiAyLjI2QTkuNzUgOS43NSAwIDAgMCAxMiAyMWMyLjQ5IDAgNC43NC0xIDYuMzYtMi42NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJjMCAxLS4xNiAxLjk3LS40NyAyLjg3In1dLFsicGF0aCIse2Q6Ik0yMSAzdjVoLTUifV0sWyJwYXRoIix7ZDoiTTIyIDIyIDIgMiJ9XV0sZDZ0PVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOCJ9XSxbInBhdGgiLHtkOiJNMjEgM3Y1aC01In1dLFsicGF0aCIse2Q6Ik0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiJ9XSxbInBhdGgiLHtkOiJNOCAxNkgzdjUifV1dLHA2dD1bWyJwYXRoIix7ZDoiTTUgNmE0IDQgMCAwIDEgNC00aDZhNCA0IDAgMCAxIDQgNHYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2WiJ9XSxbInBhdGgiLHtkOiJNNSAxMGgxNCJ9XSxbInBhdGgiLHtkOiJNMTUgN3Y2In1dXSxoNnQ9W1sicGF0aCIse2Q6Ik0xNyAzdjEwIn1dLFsicGF0aCIse2Q6Im0xMi42NyA1LjUgOC42NiA1In1dLFsicGF0aCIse2Q6Im0xMi42NyAxMC41IDguNjYtNSJ9XSxbInBhdGgiLHtkOiJNOSAxN2EyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoMmEyIDIgMCAwIDAgMi0ydi0yeiJ9XV0sdTZ0PVtbInBhdGgiLHtkOiJNNCA3VjRoMTZ2MyJ9XSxbInBhdGgiLHtkOiJNNSAyMGg2In1dLFsicGF0aCIse2Q6Ik0xMyA0IDggMjAifV0sWyJwYXRoIix7ZDoibTE1IDE1IDUgNSJ9XSxbInBhdGgiLHtkOiJtMjAgMTUtNSA1In1dXSxmNnQ9W1sicGF0aCIse2Q6Im0yIDkgMy0zIDMgMyJ9XSxbInBhdGgiLHtkOiJNMTMgMThIN2EyIDIgMCAwIDEtMi0yVjYifV0sWyJwYXRoIix7ZDoibTIyIDE1LTMgMy0zLTMifV0sWyJwYXRoIix7ZDoiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIn1dXSxtNnQ9W1sicGF0aCIse2Q6Im0xNyAyIDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTMgMTF2LTFhNCA0IDAgMCAxIDQtNGgxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMi00LTQgNC00In1dLFsicGF0aCIse2Q6Ik0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyJ9XSxbInBhdGgiLHtkOiJNMTEgMTBoMXY0In1dXSxnNnQ9W1sicGF0aCIse2Q6Im0xNyAyIDQgNC00IDQifV0sWyJwYXRoIix7ZDoiTTMgMTF2LTFhNCA0IDAgMCAxIDQtNGgxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMi00LTQgNC00In1dLFsicGF0aCIse2Q6Ik0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyJ9XV0sYjZ0PVtbInBhdGgiLHtkOiJNMTQgMTRhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoiTTE0IDRhMSAxIDAgMCAxIDEtMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBhMSAxIDAgMCAxLTEtMSJ9XSxbInBhdGgiLHtkOiJNMTkgMTRhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoiTTIxIDRhMSAxIDAgMCAwLTEtMSJ9XSxbInBhdGgiLHtkOiJNMjEgOWExIDEgMCAwIDEtMSAxIn1dLFsicGF0aCIse2Q6Im0zIDcgMyAzIDMtMyJ9XSxbInBhdGgiLHtkOiJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInJlY3QiLHt4OiIzIix5OiIxNCIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEifV1dLHY2dD1bWyJwYXRoIix7ZDoiTTE0IDRhMSAxIDAgMCAxIDEtMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTBhMSAxIDAgMCAxLTEtMSJ9XSxbInBhdGgiLHtkOiJNMjEgNGExIDEgMCAwIDAtMS0xIn1dLFsicGF0aCIse2Q6Ik0yMSA5YTEgMSAwIDAgMS0xIDEifV0sWyJwYXRoIix7ZDoibTMgNyAzIDMgMy0zIn1dLFsicGF0aCIse2Q6Ik02IDEwVjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicmVjdCIse3g6IjMiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMSJ9XV0seTZ0PVtbInBhdGgiLHtkOiJtMTIgMTctNS01IDUtNSJ9XSxbInBhdGgiLHtkOiJNMjIgMTh2LTJhNCA0IDAgMCAwLTQtNEg3In1dLFsicGF0aCIse2Q6Im03IDE3LTUtNSA1LTUifV1dLHg2dD1bWyJwYXRoIix7ZDoiTTIwIDE4di0yYTQgNCAwIDAgMC00LTRINCJ9XSxbInBhdGgiLHtkOiJtOSAxNy01LTUgNS01In1dXSx3NnQ9W1sicGF0aCIse2Q6Ik0xMiA2YTIgMiAwIDAgMC0zLjQxNC0xLjQxNGwtNiA2YTIgMiAwIDAgMCAwIDIuODI4bDYgNkEyIDIgMCAwIDAgMTIgMTh6In1dLFsicGF0aCIse2Q6Ik0yMiA2YTIgMiAwIDAgMC0zLjQxNC0xLjQxNGwtNiA2YTIgMiAwIDAgMCAwIDIuODI4bDYgNkEyIDIgMCAwIDAgMjIgMTh6In1dXSxNNnQ9W1sicGF0aCIse2Q6Ik0xMiAxMS4yMkMxMSA5Ljk5NyAxMCA5IDEwIDhhMiAyIDAgMCAxIDQgMGMwIDEtLjk5OCAyLjAwMi0yLjAxIDMuMjIifV0sWyJwYXRoIix7ZDoibTEyIDE4IDIuNTctMy41In1dLFsicGF0aCIse2Q6Ik02LjI0MyA5LjAxNmE3IDcgMCAwIDEgMTEuNTA3LS4wMDkifV0sWyJwYXRoIix7ZDoiTTkuMzUgMTQuNTMgMTIgMTEuMjIifV0sWyJwYXRoIix7ZDoiTTkuMzUgMTQuNTNDNy43MjggMTIuMjQ2IDYgMTAuMjIxIDYgN2E2IDUgMCAwIDEgMTIgMGMtLjAwNSAzLjIyLTEuNzc4IDUuMjM1LTMuNDMgNy41bDMuNTU3IDQuNTI3YTEgMSAwIDAgMS0uMjAzIDEuNDNsLTEuODk0IDEuMzZhMSAxIDAgMCAxLTEuMzg0LS4yMTVMMTIgMThsLTIuNjc5IDMuNTkzYTEgMSAwIDAgMS0xLjM5LjIxM2wtMS44NjUtMS4zNTNhMSAxIDAgMCAxLS4yMDMtMS40MjJ6In1dXSx6NnQ9W1sicGF0aCIse2Q6Ik00LjUgMTYuNWMtMS41IDEuMjYtMiA1LTIgNXMzLjc0LS41IDUtMmMuNzEtLjg0LjctMi4xMy0uMDktMi45MWEyLjE4IDIuMTggMCAwIDAtMi45MS0uMDl6In1dLFsicGF0aCIse2Q6Im0xMiAxNS0zLTNhMjIgMjIgMCAwIDEgMi0zLjk1QTEyLjg4IDEyLjg4IDAgMCAxIDIyIDJjMCAyLjcyLS43OCA3LjUtNiAxMWEyMi4zNSAyMi4zNSAwIDAgMS00IDJ6In1dLFsicGF0aCIse2Q6Ik05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwIn1dLFsicGF0aCIse2Q6Ik0xMiAxNXY1czMuMDMtLjU1IDQtMmMxLjA4LTEuNjIgMC01IDAtNSJ9XV0sazZ0PVtbInBvbHlsaW5lIix7cG9pbnRzOiIzLjUgMiA2LjUgMTIuNSAxOCAxMi41In1dLFsibGluZSIse3gxOiI5LjUiLHgyOiI1LjUiLHkxOiIxMi41Iix5MjoiMjAifV0sWyJsaW5lIix7eDE6IjE1Iix4MjoiMTguNSIseTE6IjEyLjUiLHkyOiIyMCJ9XSxbInBhdGgiLHtkOiJNMi43NSAxOGExMyAxMyAwIDAgMCAxOC41IDAifV1dLFM2dD1bWyJwYXRoIix7ZDoiTTYgMTlWNSJ9XSxbInBhdGgiLHtkOiJNMTAgMTlWNi44In1dLFsicGF0aCIse2Q6Ik0xNCAxOXYtNy44In1dLFsicGF0aCIse2Q6Ik0xOCA1djQifV0sWyJwYXRoIix7ZDoiTTE4IDE5di02In1dLFsicGF0aCIse2Q6Ik0yMiAxOVY5In1dLFsicGF0aCIse2Q6Ik0yIDE5VjlhNCA0IDAgMCAxIDQtNGMyIDAgNCAxLjMzIDYgNHM0IDQgNiA0YTQgNCAwIDEgMC0zLTYuNjUifV1dLEM2dD1bWyJwYXRoIix7ZDoiTTE3IDEwaC0xYTQgNCAwIDEgMSA0LTR2LjUzNCJ9XSxbInBhdGgiLHtkOiJNMTcgNmgxYTQgNCAwIDAgMSAxLjQyIDcuNzRsLTIuMjkuODdhNiA2IDAgMCAxLTUuMzM5LTEwLjY4bDIuMDY5LTEuMzEifV0sWyJwYXRoIix7ZDoiTTQuNSAxN2MyLjgtLjUgNC40IDAgNS41LjhzMS44IDIuMiAyLjMgMy43Yy0yIC40LTMuNS40LTQuOC0uMy0xLjItLjYtMi4zLTEuOS0zLTQuMiJ9XSxbInBhdGgiLHtkOiJNOS43NyAxMkM0IDE1IDIgMjIgMiAyMiJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjgiLHI6IjIifV1dLFl2PVtbInBhdGgiLHtkOiJNMTYuNDY2IDcuNUMxNS42NDMgNC4yMzcgMTMuOTUyIDIgMTIgMiA5LjIzOSAyIDcgNi40NzcgNyAxMnMyLjIzOSAxMCA1IDEwYy4zNDIgMCAuNjc3LS4wNjkgMS0uMiJ9XSxbInBhdGgiLHtkOiJtMTUuMTk0IDEzLjcwNyAzLjgxNCAxLjg2LTEuODYgMy44MTQifV0sWyJwYXRoIix7ZDoiTTE5IDE1LjU3Yy0xLjgwNC44ODUtNC4yNzQgMS40My03IDEuNDMtNS41MjMgMC0xMC0yLjIzOS0xMC01czQuNDc3LTUgMTAtNWM0LjgzOCAwIDguODczIDEuNzE4IDkuOCA0In1dXSxfNnQ9W1sicGF0aCIse2Q6Ik0xMiA3djYifV0sWyJwYXRoIix7ZDoiTTEyIDloMiJ9XSxbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzQgOS43NCAwIDAgMC02Ljc0IDIuNzRMMyA4In1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTUiLHI6IjIifV1dLFQ2dD1bWyJwYXRoIix7ZDoiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02In1dLFsicGF0aCIse2Q6Im0xNSAyLTMgMyAzIDMifV0sWyJwYXRoIix7ZDoiTTIwIDEzdjVhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDIifV1dLEw2dD1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSJ9XV0sJDZ0PVtbInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9XSxbInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifV0sWyJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn1dXSxBNnQ9W1sicGF0aCIse2Q6Ik0yMSAxMmE5IDkgMCAxIDEtOS05YzIuNTIgMCA0LjkzIDEgNi43NCAyLjc0TDIxIDgifV0sWyJwYXRoIix7ZDoiTTIxIDN2NWgtNSJ9XV0sRDZ0PVtbImNpcmNsZSIse2N4OiI2IixjeToiMTkiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIn1dLFsicGF0aCIse2Q6Ik01LjIgNS4yQTMuNSAzLjUzIDAgMCAwIDYuNSAxMkgxMiJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyJ9XSxbInBhdGgiLHtkOiJNMTUgNWgtNC4zIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiNSIscjoiMyJ9XV0sRTZ0PVtbImNpcmNsZSIse2N4OiI2IixjeToiMTkiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTkgMTloOC41YTMuNSAzLjUgMCAwIDAgMC03aC0xMWEzLjUgMy41IDAgMCAxIDAtN0gxNSJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjUiLHI6IjMifV1dLFA2dD1bWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjE0IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNi4wMSAxOEg2In1dLFsicGF0aCIse2Q6Ik0xMC4wMSAxOEgxMCJ9XSxbInBhdGgiLHtkOiJNMTUgMTB2NCJ9XSxbInBhdGgiLHtkOiJNMTcuODQgNy4xN2E0IDQgMCAwIDAtNS42NiAwIn1dLFsicGF0aCIse2Q6Ik0yMC42NiA0LjM0YTggOCAwIDAgMC0xMS4zMSAwIn1dXSxadj1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxOCJ9XV0sWHY9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIxIDlIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTVIMyJ9XV0sSTZ0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yMSA3LjVIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMjEgMTYuNUgzIn1dXSxONnQ9W1sicGF0aCIse2Q6Ik00IDExYTkgOSAwIDAgMSA5IDkifV0sWyJwYXRoIix7ZDoiTTQgNGExNiAxNiAwIDAgMSAxNiAxNiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjEifV1dLEY2dD1bWyJwYXRoIix7ZDoiTTEwIDE1di0zIn1dLFsicGF0aCIse2Q6Ik0xNCAxNXYtMyJ9XSxbInBhdGgiLHtkOiJNMTggMTV2LTMifV0sWyJwYXRoIix7ZDoiTTIgOFY0In1dLFsicGF0aCIse2Q6Ik0yMiA2SDIifV0sWyJwYXRoIix7ZDoiTTIyIDhWNCJ9XSxbInBhdGgiLHtkOiJNNiAxNXYtMyJ9XSxbInJlY3QiLHt4OiIyIix5OiIxMiIsd2lkdGg6IjIwIixoZWlnaHQ6IjgiLHJ4OiIyIn1dXSxPNnQ9W1sicGF0aCIse2Q6Ik02IDExaDhhNCA0IDAgMCAwIDAtOEg5djE4In1dLFsicGF0aCIse2Q6Ik02IDE1aDgifV1dLFI2dD1bWyJwYXRoIix7ZDoiTTIxLjMgMTUuM2EyLjQgMi40IDAgMCAxIDAgMy40bC0yLjYgMi42YTIuNCAyLjQgMCAwIDEtMy40IDBMMi43IDguN2EyLjQxIDIuNDEgMCAwIDEgMC0zLjRsMi42LTIuNmEyLjQxIDIuNDEgMCAwIDEgMy40IDBaIn1dLFsicGF0aCIse2Q6Im0xNC41IDEyLjUgMi0yIn1dLFsicGF0aCIse2Q6Im0xMS41IDkuNSAyLTIifV0sWyJwYXRoIix7ZDoibTguNSA2LjUgMi0yIn1dLFsicGF0aCIse2Q6Im0xNy41IDE1LjUgMi0yIn1dXSxCNnQ9W1sicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicGF0aCIse2Q6Ik0xMiAyMWE5IDkgMCAwIDAgOS05SDNhOSA5IDAgMCAwIDkgOVoifV0sWyJwYXRoIix7ZDoiTTExLjM4IDEyYTIuNCAyLjQgMCAwIDEtLjQtNC43NyAyLjQgMi40IDAgMCAxIDMuMi0yLjc3IDIuNCAyLjQgMCAwIDEgMy40Ny0uNjMgMi40IDIuNCAwIDAgMSAzLjM3IDMuMzcgMi40IDIuNCAwIDAgMS0xLjEgMy43IDIuNTEgMi41MSAwIDAgMSAuMDMgMS4xIn1dLFsicGF0aCIse2Q6Im0xMyAxMiA0LTQifV0sWyJwYXRoIix7ZDoiTTEwLjkgNy4yNUEzLjk5IDMuOTkgMCAwIDAgNCAxMGMwIC43My4yIDEuNDEuNTQgMiJ9XV0sSDZ0PVtbInBhdGgiLHtkOiJNMTAgMnYxNSJ9XSxbInBhdGgiLHtkOiJNNyAyMmE0IDQgMCAwIDEtNC00IDEgMSAwIDAgMSAxLTFoMTZhMSAxIDAgMCAxIDEgMSA0IDQgMCAwIDEtNCA0eiJ9XSxbInBhdGgiLHtkOiJNOS4xNTkgMi40NmExIDEgMCAwIDEgMS41MjEtLjE5M2w5Ljk3NyA4Ljk4QTEgMSAwIDAgMSAyMCAxM0g0YTEgMSAwIDAgMS0uODI0LTEuNTY3eiJ9XV0scTZ0PVtbInBhdGgiLHtkOiJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzcifV0sWyJwYXRoIix7ZDoiTTIxIDE1YTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC01LjI1In1dLFsicGF0aCIse2Q6Ik0zIDE1YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDkifV0sWyJwYXRoIix7ZDoibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiNCIseDoiMiIseToiMTEiLHJ4OiIxIn1dXSxWNnQ9W1sicGF0aCIse2Q6Ik00IDEwYTcuMzEgNy4zMSAwIDAgMCAxMCAxMFoifV0sWyJwYXRoIix7ZDoibTkgMTUgMy0zIn1dLFsicGF0aCIse2Q6Ik0xNyAxM2E2IDYgMCAwIDAtNi02In1dLFsicGF0aCIse2Q6Ik0yMSAxM0ExMCAxMCAwIDAgMCAxMSAzIn1dXSxqNnQ9W1sicGF0aCIse2Q6Im0xMy41IDYuNS0zLjE0OC0zLjE0OGExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDYuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRMOS41IDEwLjUifV0sWyJwYXRoIix7ZDoiTTE2LjUgNy41IDE5IDUifV0sWyJwYXRoIix7ZDoibTE3LjUgMTAuNSAzLjE0OCAzLjE0OGExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0yLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMS0xLjcwNCAwTDEzLjUgMTQuNSJ9XSxbInBhdGgiLHtkOiJNOSAyMWE2IDYgMCAwIDAtNi02In1dLFsicGF0aCIse2Q6Ik05LjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDQuMjk2LTQuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAtMS43MDRsLTIuMjk2LTIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDB6In1dXSxVNnQ9W1sicGF0aCIse2Q6Im0yMCAxOS41LTUuNSAxLjIifV0sWyJwYXRoIix7ZDoiTTE0LjUgNHYxMS4yMmExIDEgMCAwIDAgMS4yNDIuOTdMMjAgMTUuMiJ9XSxbInBhdGgiLHtkOiJtMi45NzggMTkuMzUxIDUuNTQ5LTEuMzYzQTIgMiAwIDAgMCAxMCAxNlYyIn1dLFsicGF0aCIse2Q6Ik0yMCAxMCA0IDEzLjUifV1dLFc2dD1bWyJwYXRoIix7ZDoiTTEwIDJ2M2ExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTE4IDE4di02YTEgMSAwIDAgMC0xLTFoLTZhMSAxIDAgMCAwLTEgMXY2In1dLFsicGF0aCIse2Q6Ik0xOCAyMkg0YTIgMiAwIDAgMS0yLTJWNiJ9XSxbInBhdGgiLHtkOiJNOCAxOGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5LjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2bDIuODI4IDIuODI4QTIgMiAwIDAgMSAyMiA2LjgyOFYxNmEyIDIgMCAwIDEtMi4wMSAyeiJ9XV0sRzZ0PVtbInBhdGgiLHtkOiJNMTMgMTNIOGExIDEgMCAwIDAtMSAxdjcifV0sWyJwYXRoIix7ZDoiTTE0IDhoMSJ9XSxbInBhdGgiLHtkOiJNMTcgMjF2LTQifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAuNDEgMjAuNDFBMiAyIDAgMCAxIDE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAuNTktMS40MSJ9XSxbInBhdGgiLHtkOiJNMjkuNSAxMS41czUgNSA0IDUifV0sWyJwYXRoIix7ZDoiTTkgM2g2LjJhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxNSJ9XV0sWTZ0PVtbInBhdGgiLHtkOiJNMTUuMiAzYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiJ9XSxbInBhdGgiLHtkOiJNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NyJ9XSxbInBhdGgiLHtkOiJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3In1dXSxLdj1bWyJwYXRoIix7ZDoiTTUgN3YxMWExIDEgMCAwIDAgMSAxaDExIn1dLFsicGF0aCIse2Q6Ik01LjI5MyAxOC43MDcgMTEgMTMifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiNSIscjoiMiJ9XV0sWjZ0PVtbInBhdGgiLHtkOiJNMTIgM3YxOCJ9XSxbInBhdGgiLHtkOiJtMTkgOCAzIDhhNSA1IDAgMCAxLTYgMHpWNyJ9XSxbInBhdGgiLHtkOiJNMyA3aDFhMTcgMTcgMCAwIDAgOC0yIDE3IDE3IDAgMCAwIDggMmgxIn1dLFsicGF0aCIse2Q6Im01IDggMyA4YTUgNSAwIDAgMS02IDB6VjcifV0sWyJwYXRoIix7ZDoiTTcgMjFoMTAifV1dLFg2dD1bWyJwYXRoIix7ZDoiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyJ9XSxbInBhdGgiLHtkOiJNMTQgMTVIOXYtNSJ9XSxbInBhdGgiLHtkOiJNMTYgM2g1djUifV0sWyJwYXRoIix7ZDoiTTIxIDMgOSAxNSJ9XV0sSzZ0PVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEifV0sWyJwYXRoIix7ZDoiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCJ9XV0sUTZ0PVtbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIifV0sWyJwYXRoIix7ZDoiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsicGF0aCIse2Q6Ik04IDd2MTAifV0sWyJwYXRoIix7ZDoiTTEyIDd2MTAifV0sWyJwYXRoIix7ZDoiTTE3IDd2MTAifV1dLEo2dD1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgOWguMDEifV1dLGU1dD1bWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA0LjE3MiA0LjMwNmwtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NDkgMHoifV1dLHQ1dD1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbInBhdGgiLHtkOiJNNyAxMmgxMCJ9XV0sYTV0PVtbInBhdGgiLHtkOiJNMTcgMTJ2NGExIDEgMCAwIDEtMSAxaC00In1dLFsicGF0aCIse2Q6Ik0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNyA4VjcifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Ik03IDE3aC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJyZWN0Iix7eDoiNyIseToiNyIsd2lkdGg6IjUiLGhlaWdodDoiNSIscng6IjEifV1dLGk1dD1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Im0xNiAxNi0xLjktMS45In1dXSxyNXQ9W1sicGF0aCIse2Q6Ik0zIDdWNWEyIDIgMCAwIDEgMi0yaDIifV0sWyJwYXRoIix7ZDoiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIifV0sWyJwYXRoIix7ZDoiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIifV0sWyJwYXRoIix7ZDoiTTcgOGg4In1dLFsicGF0aCIse2Q6Ik03IDEyaDEwIn1dLFsicGF0aCIse2Q6Ik03IDE2aDYifV1dLHM1dD1bWyJwYXRoIix7ZDoiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiJ9XSxbInBhdGgiLHtkOiJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIn1dLFsicGF0aCIse2Q6Ik03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiJ9XV0sbjV0PVtbInBhdGgiLHtkOiJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIn1dLFsicGF0aCIse2Q6Ik0xOCA1djE2In1dLFsicGF0aCIse2Q6Im00IDYgNy4xMDYtMy43OWEyIDIgMCAwIDEgMS43ODggMEwyMCA2In1dLFsicGF0aCIse2Q6Im02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSJ9XSxbInBhdGgiLHtkOiJNNiA1djE2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiOSIscjoiMiJ9XV0sbzV0PVtbInBhdGgiLHtkOiJNNS40MiA5LjQyIDggMTIifV0sWyJjaXJjbGUiLHtjeDoiNCIsY3k6IjgiLHI6IjIifV0sWyJwYXRoIix7ZDoibTE0IDYtOC41OCA4LjU4In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIxNiIscjoiMiJ9XSxbInBhdGgiLHtkOiJNMTAuOCAxNC44IDE0IDE4In1dLFsicGF0aCIse2Q6Ik0xNiAxMmgtMiJ9XSxbInBhdGgiLHtkOiJNMjIgMTJoLTIifV1dLGw1dD1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjYiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTguMTIgOC4xMiAxMiAxMiJ9XSxbInBhdGgiLHtkOiJNMjAgNCA4LjEyIDE1Ljg4In1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxOCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNMTQuOCAxNC44IDIwIDIwIn1dXSxjNXQ9W1sicGF0aCIse2Q6Ik0yMSA0aC0zLjVsMiAxMS4wNSJ9XSxbInBhdGgiLHtkOiJNNi45NSAxN2g1LjE0MmMuNTIzIDAgLjk1LS40MDYgMS4wNjMtLjkxNmE2LjUgNi41IDAgMCAxIDUuMzQ1LTUuMDA5In1dLFsiY2lyY2xlIix7Y3g6IjE5LjUiLGN5OiIxNy41IixyOiIyLjUifV0sWyJjaXJjbGUiLHtjeDoiNC41IixjeToiMTcuNSIscjoiMi41In1dXSxkNXQ9W1sicGF0aCIse2Q6Ik0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJtMjIgMy01IDUifV0sWyJwYXRoIix7ZDoibTE3IDMgNSA1In1dXSxwNXQ9W1sicGF0aCIse2Q6Ik0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMifV0sWyJwYXRoIix7ZDoiTTggMjFoOCJ9XSxbInBhdGgiLHtkOiJNMTIgMTd2NCJ9XSxbInBhdGgiLHtkOiJtMTcgOCA1LTUifV0sWyJwYXRoIix7ZDoiTTE3IDNoNXY1In1dXSxoNXQ9W1sicGF0aCIse2Q6Ik0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCJ9XSxbInBhdGgiLHtkOiJNOCAyMWgxMmEyIDIgMCAwIDAgMi0ydi0xYTEgMSAwIDAgMC0xLTFIMTFhMSAxIDAgMCAwLTEgMXYxYTIgMiAwIDEgMS00IDBWNWEyIDIgMCAxIDAtNCAwdjJhMSAxIDAgMCAwIDEgMWgzIn1dXSx1NXQ9W1sicGF0aCIse2Q6Ik0xNSAxMmgtNSJ9XSxbInBhdGgiLHtkOiJNMTUgOGgtNSJ9XSxbInBhdGgiLHtkOiJNMTkgMTdWNWEyIDIgMCAwIDAtMi0ySDQifV0sWyJwYXRoIix7ZDoiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyJ9XV0sZjV0PVtbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4In1dLFsicGF0aCIse2Q6Im0yMSAyMS00LjMtNC4zIn1dLFsicGF0aCIse2Q6Ik0xMSA3djQifV0sWyJwYXRoIix7ZDoiTTExIDE1aC4wMSJ9XV0sbTV0PVtbInBhdGgiLHtkOiJtOCAxMSAyIDIgNC00In1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV0sWyJwYXRoIix7ZDoibTIxIDIxLTQuMy00LjMifV1dLGc1dD1bWyJwYXRoIix7ZDoibTEzIDEzLjUgMi0yLjUtMi0yLjUifV0sWyJwYXRoIix7ZDoibTIxIDIxLTQuMy00LjMifV0sWyJwYXRoIix7ZDoiTTkgOC41IDcgMTFsMiAyLjUifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XV0sYjV0PVtbInBhdGgiLHtkOiJtMTMuNSA4LjUtNSA1In1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV0sWyJwYXRoIix7ZDoibTIxIDIxLTQuMy00LjMifV1dLHY1dD1bWyJwYXRoIix7ZDoibTEzLjUgOC41LTUgNSJ9XSxbInBhdGgiLHtkOiJtOC41IDguNSA1IDUifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjEtNC4zLTQuMyJ9XV0seTV0PVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0In1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgifV1dLHg1dD1bWyJwYXRoIix7ZDoiTTE2IDVhNCAzIDAgMCAwLTggMGMwIDQgOCAzIDggN2E0IDMgMCAwIDEtOCAwIn1dLFsicGF0aCIse2Q6Ik04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCJ9XV0sUXY9W1sicGF0aCIse2Q6Ik0zLjcxNCAzLjA0OGEuNDk4LjQ5OCAwIDAgMC0uNjgzLjYyN2wyLjg0MyA3LjYyN2EyIDIgMCAwIDEgMCAxLjM5NmwtMi44NDIgNy42MjdhLjQ5OC40OTggMCAwIDAgLjY4Mi42MjdsMTgtOC41YS41LjUgMCAwIDAgMC0uOTA0eiJ9XSxbInBhdGgiLHtkOiJNNiAxMmgxNiJ9XV0sdzV0PVtbInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIyIn1dLFsicmVjdCIse3g6IjIiLHk6IjIiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik03IDE0djFhMiAyIDAgMCAwIDIgMmgxIn1dLFsicGF0aCIse2Q6Ik0xNCA3aDFhMiAyIDAgMCAxIDIgMnYxIn1dXSxNNXQ9W1sicGF0aCIse2Q6Ik0xNC41MzYgMjEuNjg2YS41LjUgMCAwIDAgLjkzNy0uMDI0bDYuNS0xOWEuNDk2LjQ5NiAwIDAgMC0uNjM1LS42MzVsLTE5IDYuNWEuNS41IDAgMCAwLS4wMjQuOTM3bDcuOTMgMy4xOGEyIDIgMCAwIDEgMS4xMTIgMS4xMXoifV0sWyJwYXRoIix7ZDoibTIxLjg1NCAyLjE0Ny0xMC45NCAxMC45MzkifV1dLHo1dD1bWyJwYXRoIix7ZDoiTTEyIDN2MTgifV0sWyJwYXRoIix7ZDoibTE2IDE2IDQtNC00LTQifV0sWyJwYXRoIix7ZDoibTggOC00IDQgNCA0In1dXSxrNXQ9W1sicGF0aCIse2Q6Im0xNiAxNi00IDQtNC00In1dLFsicGF0aCIse2Q6Ik0zIDEyaDE4In1dLFsicGF0aCIse2Q6Im04IDggNC00IDQgNCJ9XV0sUzV0PVtbInBhdGgiLHtkOiJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyJ9XSxbInBhdGgiLHtkOiJNMTMuMTQ4IDE0Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTMuMTQ4IDkuMjI4LjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xMy41MyAxNS42OTYtLjM4Mi0uOTI0YTMgMyAwIDEgMS0yLjI5Ni01LjU0NCJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIn1dLFsicGF0aCIse2Q6Ik00LjUgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtLjUifV0sWyJwYXRoIix7ZDoiTTQuNSAxNEg0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMmgtLjUifV0sWyJwYXRoIix7ZDoiTTYgMThoLjAxIn1dLFsicGF0aCIse2Q6Ik02IDZoLjAxIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMC44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im05LjIyOCAxMy4xNDgtLjkyMy4zODMifV1dLEM1dD1bWyJwYXRoIix7ZDoiTTYgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtMiJ9XSxbInBhdGgiLHtkOiJNNiAxNEg0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMmgtMiJ9XSxbInBhdGgiLHtkOiJNNiA2aC4wMSJ9XSxbInBhdGgiLHtkOiJNNiAxOGguMDEifV0sWyJwYXRoIix7ZDoibTEzIDYtNCA2aDZsLTQgNiJ9XV0sXzV0PVtbInBhdGgiLHtkOiJNNyAyaDEzYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC01In1dLFsicGF0aCIse2Q6Ik0xMCAxMCAyLjUgMi41QzIgMiAyIDIuNSAyIDV2M2EyIDIgMCAwIDAgMiAyaDZ6In1dLFsicGF0aCIse2Q6Ik0yMiAxN3YtMWEyIDIgMCAwIDAtMi0yaC0xIn1dLFsicGF0aCIse2Q6Ik00IDE0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2LjVsMS0uNS41LjUtOC04SDR6In1dLFsicGF0aCIse2Q6Ik02IDE4aC4wMSJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSxUNXQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI4Iix4OiIyIix5OiIyIixyeDoiMiIscnk6IjIifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjgiLHg6IjIiLHk6IjE0IixyeDoiMiIscnk6IjIifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2LjAxIix5MToiNiIseTI6IjYifV0sWyJsaW5lIix7eDE6IjYiLHgyOiI2LjAxIix5MToiMTgiLHkyOiIxOCJ9XV0sTDV0PVtbInBhdGgiLHtkOiJNMTQgMTdINSJ9XSxbInBhdGgiLHtkOiJNMTkgN2gtOSJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE3IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjciLGN5OiI3IixyOiIzIn1dXSwkNXQ9W1sicGF0aCIse2Q6Ik05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzIn1dXSxBNXQ9W1sicGF0aCIse2Q6Ik04LjMgMTBhLjcuNyAwIDAgMS0uNjI2LTEuMDc5TDExLjQgM2EuNy43IDAgMCAxIDEuMTk4LS4wNDNMMTYuMyA4LjlhLjcuNyAwIDAgMS0uNTcyIDEuMVoifV0sWyJyZWN0Iix7eDoiMyIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxIn1dLFsiY2lyY2xlIix7Y3g6IjE3LjUiLGN5OiIxNy41IixyOiIzLjUifV1dLEQ1dD1bWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiI1IixyOiIzIn1dLFsiY2lyY2xlIix7Y3g6IjYiLGN5OiIxMiIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE5IixyOiIzIn1dLFsibGluZSIse3gxOiI4LjU5Iix4MjoiMTUuNDIiLHkxOiIxMy41MSIseTI6IjE3LjQ5In1dLFsibGluZSIse3gxOiIxNS40MSIseDI6IjguNTkiLHkxOiI2LjUxIix5MjoiMTAuNDkifV1dLEU1dD1bWyJwYXRoIix7ZDoiTTEyIDJ2MTMifV0sWyJwYXRoIix7ZDoibTE2IDYtNC00LTQgNCJ9XSxbInBhdGgiLHtkOiJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCJ9XV0sUDV0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjIxIix5MToiOSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIyMSIseTE6IjE1Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjkiLHgyOiI5Iix5MToiOSIseTI6IjIxIn1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1Iix5MToiOSIseTI6IjIxIn1dXSxJNXQ9W1sicGF0aCIse2Q6Ik0xNCAxMWEyIDIgMCAxIDEtNCAwIDQgNCAwIDAgMSA4IDAgNiA2IDAgMCAxLTEyIDAgOCA4IDAgMCAxIDE2IDAgMTAgMTAgMCAxIDEtMjAgMCAxMS45MyAxMS45MyAwIDAgMSAyLjQyLTcuMjIgMiAyIDAgMSAxIDMuMTYgMi40NCJ9XV0sTjV0PVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTEyIDh2NCJ9XSxbInBhdGgiLHtkOiJNMTIgMTZoLjAxIn1dXSxGNXQ9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJtNC4yNDMgNS4yMSAxNC4zOSAxMi40NzIifV1dLE81dD1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQifV1dLFI1dD1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dLFsicGF0aCIse2Q6Ik04IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxMmguMDEifV1dLEI1dD1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dLFsicGF0aCIse2Q6Ik0xMiAyMlYyIn1dXSxINXQ9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJNOSAxMmg2In1dXSxxNXQ9W1sicGF0aCIse2Q6Im0yIDIgMjAgMjAifV0sWyJwYXRoIix7ZDoiTTUgNWExIDEgMCAwIDAtMSAxdjdjMCA1IDMuNSA3LjUgNy42NyA4Ljk0YTEgMSAwIDAgMCAuNjcuMDFjMi4zNS0uODIgNC40OC0xLjk3IDUuOS0zLjcxIn1dLFsicGF0aCIse2Q6Ik05LjMwOSAzLjY1MkExMi4yNTIgMTIuMjUyIDAgMCAwIDExLjI0IDIuMjhhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxdjdhOS43ODQgOS43ODQgMCAwIDEtLjA4IDEuMjY0In1dXSxWNXQ9W1sicGF0aCIse2Q6Ik0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiJ9XSxbInBhdGgiLHtkOiJNOSAxMmg2In1dLFsicGF0aCIse2Q6Ik0xMiA5djYifV1dLEp2PVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTkuMSA5YTMgMyAwIDAgMSA1LjgyIDFjMCAyLTMgMy0zIDMifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV0sajV0PVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTEiLHI6IjQifV1dLGV5PVtbInBhdGgiLHtkOiJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoifV0sWyJwYXRoIix7ZDoibTE0LjUgOS41LTUgNSJ9XSxbInBhdGgiLHtkOiJtOS41IDkuNSA1IDUifV1dLFU1dD1bWyJwYXRoIix7ZDoiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6In1dXSxXNXQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjgifV0sWyJwYXRoIix7ZDoiTTEyIDJ2Ny41In1dLFsicGF0aCIse2Q6Im0xOSA1LTUuMjMgNS4yMyJ9XSxbInBhdGgiLHtkOiJNMjIgMTJoLTcuNSJ9XSxbInBhdGgiLHtkOiJtMTkgMTktNS4yMy01LjIzIn1dLFsicGF0aCIse2Q6Ik0xMiAxNC41VjIyIn1dLFsicGF0aCIse2Q6Ik0xMC4yMyAxMy43NyA1IDE5In1dLFsicGF0aCIse2Q6Ik05LjUgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAuMjMgMTAuMjMgNSA1In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIuNSJ9XV0sRzV0PVtbInBhdGgiLHtkOiJNMTIgMTAuMTg5VjE0In1dLFsicGF0aCIse2Q6Ik0xMiAydjMifV0sWyJwYXRoIix7ZDoiTTE5IDEzVjdhMiAyIDAgMCAwLTItMkg3YTIgMiAwIDAgMC0yIDJ2NiJ9XSxbInBhdGgiLHtkOiJNMTkuMzggMjBBMTEuNiAxMS42IDAgMCAwIDIxIDE0bC04LjE4OC0zLjYzOWEyIDIgMCAwIDAtMS42MjQgMEwzIDE0YTExLjYgMTEuNiAwIDAgMCAyLjgxIDcuNzYifV0sWyJwYXRoIix7ZDoiTTIgMjFjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDFzMS4yIDEgMi41IDFjMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dXSxZNXQ9W1sicGF0aCIse2Q6Ik0yMC4zOCAzLjQ2IDE2IDJhNCA0IDAgMCAxLTggMEwzLjYyIDMuNDZhMiAyIDAgMCAwLTEuMzQgMi4yM2wuNTggMy40N2ExIDEgMCAwIDAgLjk5Ljg0SDZ2MTBjMCAxLjEuOSAyIDIgMmg4YTIgMiAwIDAgMCAyLTJWMTBoMi4xNWExIDEgMCAwIDAgLjk5LS44NGwuNTgtMy40N2EyIDIgMCAwIDAtMS4zNC0yLjIzeiJ9XV0sWjV0PVtbInBhdGgiLHtkOiJNMTYgMTBhNCA0IDAgMCAxLTggMCJ9XSxbInBhdGgiLHtkOiJNMy4xMDMgNi4wMzRoMTcuNzk0In1dLFsicGF0aCIse2Q6Ik0zLjQgNS40NjdhMiAyIDAgMCAwLS40IDEuMlYyMGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWNi42NjdhMiAyIDAgMCAwLS40LTEuMmwtMi0yLjY2N0EyIDIgMCAwIDAgMTcgMkg3YTIgMiAwIDAgMC0xLjYuOHoifV1dLFg1dD1bWyJwYXRoIix7ZDoibTE1IDExLTEgOSJ9XSxbInBhdGgiLHtkOiJtMTkgMTEtNC03In1dLFsicGF0aCIse2Q6Ik0yIDExaDIwIn1dLFsicGF0aCIse2Q6Im0zLjUgMTEgMS42IDcuNGEyIDIgMCAwIDAgMiAxLjZoOS44YTIgMiAwIDAgMCAyLTEuNmwxLjctNy40In1dLFsicGF0aCIse2Q6Ik00LjUgMTUuNWgxNSJ9XSxbInBhdGgiLHtkOiJtNSAxMSA0LTcifV0sWyJwYXRoIix7ZDoibTkgMTEgMSA5In1dXSxLNXQ9W1siY2lyY2xlIix7Y3g6IjgiLGN5OiIyMSIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjIxIixyOiIxIn1dLFsicGF0aCIse2Q6Ik0yLjA1IDIuMDVoMmwyLjY2IDEyLjQyYTIgMiAwIDAgMCAyIDEuNThoOS43OGEyIDIgMCAwIDAgMS45NS0xLjU3bDEuNjUtNy40M0g1LjEyIn1dXSxRNXQ9W1sicGF0aCIse2Q6Ik0yMS41NiA0LjU2YTEuNSAxLjUgMCAwIDEgMCAyLjEyMmwtLjQ3LjQ3YTMgMyAwIDAgMS00LjIxMi0uMDMgMyAzIDAgMCAxIDAtNC4yNDNsLjQ0LS40NGExLjUgMS41IDAgMCAxIDIuMTIxIDB6In1dLFsicGF0aCIse2Q6Ik0zIDIyYTEgMSAwIDAgMS0xLTF2LTMuNTg2YTEgMSAwIDAgMSAuMjkzLS43MDdsMy4zNTUtMy4zNTVhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGwzLjI5NiAzLjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0zLjM1NSAzLjM1NWExIDEgMCAwIDEtLjcwNy4yOTN6In1dLFsicGF0aCIse2Q6Im05IDE1IDcuODc5LTcuODc4In1dXSxKNXQ9W1sicGF0aCIse2Q6Im00IDQgMi41IDIuNSJ9XSxbInBhdGgiLHtkOiJNMTMuNSA2LjVhNC45NSA0Ljk1IDAgMCAwLTcgNyJ9XSxbInBhdGgiLHtkOiJNMTUgNSA1IDE1In1dLFsicGF0aCIse2Q6Ik0xNCAxN3YuMDEifV0sWyJwYXRoIix7ZDoiTTEwIDE2di4wMSJ9XSxbInBhdGgiLHtkOiJNMTMgMTN2LjAxIn1dLFsicGF0aCIse2Q6Ik0xNiAxMHYuMDEifV0sWyJwYXRoIix7ZDoiTTExIDIwdi4wMSJ9XSxbInBhdGgiLHtkOiJNMTcgMTR2LjAxIn1dLFsicGF0aCIse2Q6Ik0yMCAxMXYuMDEifV1dLGU4dD1bWyJwYXRoIix7ZDoiTTQgMTNWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUifV0sWyJwYXRoIix7ZDoiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUifV0sWyJwYXRoIix7ZDoiTTEwIDIydi01In1dLFsicGF0aCIse2Q6Ik0xNCAxOXYtMiJ9XSxbInBhdGgiLHtkOiJNMTggMjB2LTMifV0sWyJwYXRoIix7ZDoiTTIgMTNoMjAifV0sWyJwYXRoIix7ZDoiTTYgMjB2LTMifV1dLHQ4dD1bWyJwYXRoIix7ZDoiTTExIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTMgMjJjLjUtLjUgMS4xMi0xIDIuNS0xLTEuMzggMC0yLS41LTIuNS0xIn1dLFsicGF0aCIse2Q6Ik0xNCAyYTMuMjggMy4yOCAwIDAgMS0zLjIyNyAxLjc5OGwtNi4xNy0uNTYxQTIuMzg3IDIuMzg3IDAgMSAwIDQuMzg3IDhIMTUuNWExIDEgMCAwIDEgMCAxMyAxIDEgMCAwIDAgMC01SDEyYTcgNyAwIDAgMS03LTdWOCJ9XSxbInBhdGgiLHtkOiJNMTQgOGE4LjUgOC41IDAgMCAxIDAgOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTZjMiAwIDQuNS00IDQtNiJ9XV0sYTh0PVtbInBhdGgiLHtkOiJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCJ9XSxbInBhdGgiLHtkOiJNOSAxOS44VjE1bTAgMEg0LjJNOSAxNWwtNiA2In1dLFsicGF0aCIse2Q6Ik0xNSA0LjJWOW0wIDBoNC44TTE1IDlsNi02In1dLFsicGF0aCIse2Q6Ik05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyJ9XV0saTh0PVtbInBhdGgiLHtkOiJtMTggMTQgNCA0LTQgNCJ9XSxbInBhdGgiLHtkOiJtMTggMiA0IDQtNCA0In1dLFsicGF0aCIse2Q6Ik0yIDE4aDEuOTczYTQgNCAwIDAgMCAzLjMtMS43bDUuNDU0LTguNmE0IDQgMCAwIDEgMy4zLTEuN0gyMiJ9XSxbInBhdGgiLHtkOiJNMiA2aDEuOTcyYTQgNCAwIDAgMSAzLjYgMi4yIn1dLFsicGF0aCIse2Q6Ik0yMiAxOGgtNi4wNDFhNCA0IDAgMCAxLTMuMy0xLjhsLS4zNTktLjQ1In1dXSxyOHQ9W1sicGF0aCIse2Q6Ik0xMiAyMnYtNS4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMOS41IDEzLjUifV0sWyJwYXRoIix7ZDoiTTE0LjUgMTQuNSAxMiAxNyJ9XSxbInBhdGgiLHtkOiJNMTcgOC44QTYgNiAwIDAgMSAxMy44IDIwSDEwQTYuNSA2LjUgMCAwIDEgNyA4YTUgNSAwIDAgMSAxMCAweiJ9XV0sczh0PVtbInBhdGgiLHtkOiJNMTggN1Y1YTEgMSAwIDAgMC0xLTFINi41YS41LjUgMCAwIDAtLjQuOGw0LjUgNmEyIDIgMCAwIDEgMCAyLjRsLTQuNSA2YS41LjUgMCAwIDAgLjQuOEgxN2ExIDEgMCAwIDAgMS0xdi0yIn1dXSxuOHQ9W1sicGF0aCIse2Q6Ik0yIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMHYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTgifV0sWyJwYXRoIix7ZDoiTTE3IDIwVjgifV1dLG84dD1bWyJwYXRoIix7ZDoiTTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDIwdi00In1dXSxsOHQ9W1sicGF0aCIse2Q6Ik0yIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMHYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTgifV1dLGM4dD1bWyJwYXRoIix7ZDoiTTIgMjBoLjAxIn1dXSxkOHQ9W1sicGF0aCIse2Q6Ik0yIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNNyAyMHYtNCJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2LTgifV0sWyJwYXRoIix7ZDoiTTE3IDIwVjgifV0sWyJwYXRoIix7ZDoiTTIyIDR2MTYifV1dLHA4dD1bWyJwYXRoIix7ZDoibTIxIDE3LTIuMTU2LTEuODY4QS41LjUgMCAwIDAgMTggMTUuNXYuNWExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTFjMC0yLjU0NS0zLjk5MS0zLjk3LTguNS00YTEgMSAwIDAgMCAwIDVjNC4xNTMgMCA0Ljc0NS0xMS4yOTUgNS43MDgtMTMuNWEyLjUgMi41IDAgMSAxIDMuMzEgMy4yODQifV0sWyJwYXRoIix7ZDoiTTMgMjFoMTgifV1dLGg4dD1bWyJwYXRoIix7ZDoiTTEwIDlINEwyIDdsMi0yaDYifV0sWyJwYXRoIix7ZDoiTTE0IDVoNmwyIDItMiAyaC02In1dLFsicGF0aCIse2Q6Ik0xMCAyMlY0YTIgMiAwIDEgMSA0IDB2MTgifV0sWyJwYXRoIix7ZDoiTTggMjJoOCJ9XV0sdTh0PVtbInBhdGgiLHtkOiJNMTIgMTN2OCJ9XSxbInBhdGgiLHtkOiJNMTIgM3YzIn1dLFsicGF0aCIse2Q6Ik0xOCA2YTIgMiAwIDAgMSAxLjM4Ny41NmwyLjMwNyAyLjIyYTEgMSAwIDAgMSAwIDEuNDRsLTIuMzA3IDIuMjJBMiAyIDAgMCAxIDE4IDEzSDZhMiAyIDAgMCAxLTEuMzg3LS41NmwtMi4zMDYtMi4yMmExIDEgMCAwIDEgMC0xLjQ0bDIuMzA2LTIuMjJBMiAyIDAgMCAxIDYgNnoifV1dLGY4dD1bWyJwYXRoIix7ZDoiTTcgMTh2LTZhNSA1IDAgMSAxIDEwIDB2NiJ9XSxbInBhdGgiLHtkOiJNNSAyMWExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTF2LTFhMiAyIDAgMCAwLTItMkg3YTIgMiAwIDAgMC0yIDJ6In1dLFsicGF0aCIse2Q6Ik0yMSAxMmgxIn1dLFsicGF0aCIse2Q6Ik0xOC41IDQuNSAxOCA1In1dLFsicGF0aCIse2Q6Ik0yIDEyaDEifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MSJ9XSxbInBhdGgiLHtkOiJtNC45MjkgNC45MjkuNzA3LjcwNyJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2NiJ9XV0sbTh0PVtbInBhdGgiLHtkOiJNMTcuOTcxIDQuMjg1QTIgMiAwIDAgMSAyMSA2djEyYTIgMiAwIDAgMS0zLjAyOSAxLjcxNWwtOS45OTctNS45OThhMiAyIDAgMCAxLS4wMDMtMy40MzJ6In1dLFsicGF0aCIse2Q6Ik0zIDIwVjQifV1dLGc4dD1bWyJwYXRoIix7ZDoiTTIxIDR2MTYifV0sWyJwYXRoIix7ZDoiTTYuMDI5IDQuMjg1QTIgMiAwIDAgMCAzIDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiJ9XV0sYjh0PVtbInBhdGgiLHtkOiJtMTIuNSAxNy0uNS0xLS41IDFoMXoifV0sWyJwYXRoIix7ZDoiTTE1IDIyYTEgMSAwIDAgMCAxLTF2LTFhMiAyIDAgMCAwIDEuNTYtMy4yNSA4IDggMCAxIDAtMTEuMTIgMEEyIDIgMCAwIDAgOCAyMHYxYTEgMSAwIDAgMCAxIDF6In1dLFsiY2lyY2xlIix7Y3g6IjE1IixjeToiMTIiLHI6IjEifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjEyIixyOiIxIn1dXSx2OHQ9W1sicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjgiLHg6IjEzIix5OiIyIixyeDoiMS41In1dLFsicGF0aCIse2Q6Ik0xOSA4LjVWMTBoMS41QTEuNSAxLjUgMCAxIDAgMTkgOC41In1dLFsicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjgiLHg6IjgiLHk6IjE0IixyeDoiMS41In1dLFsicGF0aCIse2Q6Ik01IDE1LjVWMTRIMy41QTEuNSAxLjUgMCAxIDAgNSAxNS41In1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjMiLHg6IjE0Iix5OiIxMyIscng6IjEuNSJ9XSxbInBhdGgiLHtkOiJNMTUuNSAxOUgxNHYxLjVhMS41IDEuNSAwIDEgMCAxLjUtMS41In1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjMiLHg6IjIiLHk6IjgiLHJ4OiIxLjUifV0sWyJwYXRoIix7ZDoiTTguNSA1SDEwVjMuNUExLjUgMS41IDAgMSAwIDguNSA1In1dXSx5OHQ9W1sicGF0aCIse2Q6Ik0yMiAyIDIgMjIifV1dLHg4dD1bWyJwYXRoIix7ZDoiTTExIDE2LjU4NlYxOWExIDEgMCAwIDEtMSAxSDJMMTguMzcgMy42M2ExIDEgMCAxIDEgMyAzbC05LjY2MyA5LjY2M2ExIDEgMCAwIDEtMS40MTQgMEw4IDE0In1dXSx3OHQ9W1sicGF0aCIse2Q6Ik0xMCA1SDMifV0sWyJwYXRoIix7ZDoiTTEyIDE5SDMifV0sWyJwYXRoIix7ZDoiTTE0IDN2NCJ9XSxbInBhdGgiLHtkOiJNMTYgMTd2NCJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLTkifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC01In1dLFsicGF0aCIse2Q6Ik0yMSA1aC03In1dLFsicGF0aCIse2Q6Ik04IDEwdjQifV0sWyJwYXRoIix7ZDoiTTggMTJIMyJ9XV0sdHk9W1sicGF0aCIse2Q6Ik0xMCA4aDQifV0sWyJwYXRoIix7ZDoiTTEyIDIxdi05In1dLFsicGF0aCIse2Q6Ik0xMiA4VjMifV0sWyJwYXRoIix7ZDoiTTE3IDE2aDQifV0sWyJwYXRoIix7ZDoiTTE5IDEyVjMifV0sWyJwYXRoIix7ZDoiTTE5IDIxdi01In1dLFsicGF0aCIse2Q6Ik0zIDE0aDQifV0sWyJwYXRoIix7ZDoiTTUgMTBWMyJ9XSxbInBhdGgiLHtkOiJNNSAyMXYtNyJ9XV0sTTh0PVtbInJlY3QiLHt3aWR0aDoiMTQiLGhlaWdodDoiMjAiLHg6IjUiLHk6IjIiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJNMTIuNjY3IDggMTAgMTJoNGwtMi42NjcgNCJ9XV0sejh0PVtbInJlY3QiLHt3aWR0aDoiNyIsaGVpZ2h0OiIxMiIseDoiMiIseToiNiIscng6IjEifV0sWyJwYXRoIix7ZDoiTTEzIDguMzJhNy40MyA3LjQzIDAgMCAxIDAgNy4zNiJ9XSxbInBhdGgiLHtkOiJNMTYuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4In1dLFsicGF0aCIse2Q6Ik0xOS45MSA0LjFhMTUuOTEgMTUuOTEgMCAwIDEgLjAxIDE1LjgifV1dLGs4dD1bWyJyZWN0Iix7d2lkdGg6IjE0IixoZWlnaHQ6IjIwIix4OiI1Iix5OiIyIixyeDoiMiIscnk6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDE4aC4wMSJ9XV0sUzh0PVtbInBhdGgiLHtkOiJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIn1dLFsicGF0aCIse2Q6Ik04IDE0czEuNSAyIDQgMiA0LTIgNC0yIn1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV0sWyJwYXRoIix7ZDoiTTE2IDVoNiJ9XSxbInBhdGgiLHtkOiJNMTkgMnY2In1dXSxDOHQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dLFsicGF0aCIse2Q6Ik04IDE0czEuNSAyIDQgMiA0LTIgNC0yIn1dLFsibGluZSIse3gxOiI5Iix4MjoiOS4wMSIseTE6IjkiLHkyOiI5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjE1LjAxIix5MToiOSIseTI6IjkifV1dLF84dD1bWyJwYXRoIix7ZDoiTTIgMTNhNiA2IDAgMSAwIDEyIDAgNCA0IDAgMSAwLTggMCAyIDIgMCAwIDAgNCAwIn1dLFsiY2lyY2xlIix7Y3g6IjEwIixjeToiMTMiLHI6IjgifV0sWyJwYXRoIix7ZDoiTTIgMjFoMTJjNC40IDAgOC0zLjYgOC04VjdhMiAyIDAgMSAwLTQgMHY2In1dLFsicGF0aCIse2Q6Ik0xOCAzIDE5LjEgNS4yIn1dLFsicGF0aCIse2Q6Ik0yMiAzIDIwLjkgNS4yIn1dXSxUOHQ9W1sicGF0aCIse2Q6Ik0xMC41IDJ2NCJ9XSxbInBhdGgiLHtkOiJNMTQgMkg3YTIgMiAwIDAgMC0yIDIifV0sWyJwYXRoIix7ZDoiTTE5LjI5IDE0Ljc2QTYuNjcgNi42NyAwIDAgMSAxNyAxMWE2LjYgNi42IDAgMCAxLTIuMjkgMy43NmMtMS4xNS45Mi0xLjcxIDIuMDQtMS43MSAzLjE5IDAgMi4yMiAxLjggNC4wNSA0IDQuMDVzNC0xLjgzIDQtNC4wNWMwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5In1dLFsicGF0aCIse2Q6Ik05LjYwNyAyMUg2YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmg3VjdhMSAxIDAgMCAwLTEtMUg5YTEgMSAwIDAgMC0xIDF2MyJ9XV0sTDh0PVtbInBhdGgiLHtkOiJtMTAgMjAtMS4yNS0yLjVMNiAxOCJ9XSxbInBhdGgiLHtkOiJNMTAgNCA4Ljc1IDYuNSA2IDYifV0sWyJwYXRoIix7ZDoibTE0IDIwIDEuMjUtMi41TDE4IDE4In1dLFsicGF0aCIse2Q6Im0xNCA0IDEuMjUgMi41TDE4IDYifV0sWyJwYXRoIix7ZDoibTE3IDIxLTMtNmgtNCJ9XSxbInBhdGgiLHtkOiJtMTcgMy0zIDYgMS41IDMifV0sWyJwYXRoIix7ZDoiTTIgMTJoNi41TDEwIDkifV0sWyJwYXRoIix7ZDoibTIwIDEwLTEuNSAyIDEuNSAyIn1dLFsicGF0aCIse2Q6Ik0yMiAxMmgtNi41TDE0IDE1In1dLFsicGF0aCIse2Q6Im00IDEwIDEuNSAyTDQgMTQifV0sWyJwYXRoIix7ZDoibTcgMjEgMy02LTEuNS0zIn1dLFsicGF0aCIse2Q6Im03IDMgMyA2aDQifV1dLCQ4dD1bWyJwYXRoIix7ZDoiTTIwIDlWNmEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnYzIn1dLFsicGF0aCIse2Q6Ik0yIDE2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNWEyIDIgMCAwIDAtNCAwdjEuNWEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoifV0sWyJwYXRoIix7ZDoiTTQgMTh2MiJ9XSxbInBhdGgiLHtkOiJNMjAgMTh2MiJ9XSxbInBhdGgiLHtkOiJNMTIgNHY5In1dXSxBOHQ9W1sicGF0aCIse2Q6Ik0xMSAyaDIifV0sWyJwYXRoIix7ZDoibTE0LjI4IDE0LTQuNTYgOCJ9XSxbInBhdGgiLHtkOiJtMjEgMjItMS41NTgtNEg0LjU1OCJ9XSxbInBhdGgiLHtkOiJNMyAxMHYyIn1dLFsicGF0aCIse2Q6Ik02LjI0NSAxNS4wNEEyIDIgMCAwIDEgOCAxNGgxMmExIDEgMCAwIDEgLjg2NCAxLjUwNWwtMy4xMSA1LjQ1N0EyIDIgMCAwIDEgMTYgMjJINGExIDEgMCAwIDEtLjg2My0xLjUwNnoifV0sWyJwYXRoIix7ZDoiTTcgMmE0IDQgMCAwIDEtNCA0In1dLFsicGF0aCIse2Q6Im04LjY2IDcuNjYgMS40MSAxLjQxIn1dXSxEOHQ9W1sicGF0aCIse2Q6Ik0xMiAyMWE5IDkgMCAwIDAgOS05SDNhOSA5IDAgMCAwIDkgOVoifV0sWyJwYXRoIix7ZDoiTTcgMjFoMTAifV0sWyJwYXRoIix7ZDoiTTE5LjUgMTIgMjIgNiJ9XSxbInBhdGgiLHtkOiJNMTYuMjUgM2MuMjcuMS44LjUzLjc1IDEuMzYtLjA2LjgzLS45MyAxLjItMSAyLjAyLS4wNS43OC4zNCAxLjI0LjczIDEuNjIifV0sWyJwYXRoIix7ZDoiTTExLjI1IDNjLjI3LjEuOC41My43NCAxLjM2LS4wNS44My0uOTMgMS4yLS45OCAyLjAyLS4wNi43OC4zMyAxLjI0LjcyIDEuNjIifV0sWyJwYXRoIix7ZDoiTTYuMjUgM2MuMjcuMS44LjUzLjc1IDEuMzYtLjA2LjgzLS45MyAxLjItMSAyLjAyLS4wNS43OC4zNCAxLjI0Ljc0IDEuNjIifV1dLEU4dD1bWyJwYXRoIix7ZDoiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIn1dXSxQOHQ9W1sicGF0aCIse2Q6Ik0xMiAxOHY0In1dLFsicGF0aCIse2Q6Ik0yIDE0LjQ5OWE1LjUgNS41IDAgMCAwIDkuNTkxIDMuNjc1LjYuNiAwIDAgMSAuODE4LjAwMUE1LjUgNS41IDAgMCAwIDIyIDE0LjVjMC0yLjI5LTEuNS00LTMtNS41bC01LjQ5Mi01LjMxMmEyIDIgMCAwIDAtMy0uMDJMNSA4Ljk5OWMtMS41IDEuNS0zIDMuMi0zIDUuNSJ9XV0sSTh0PVtbInBhdGgiLHtkOiJNMTEuMDE3IDIuODE0YTEgMSAwIDAgMSAxLjk2NiAwbDEuMDUxIDUuNTU4YTIgMiAwIDAgMCAxLjU5NCAxLjU5NGw1LjU1OCAxLjA1MWExIDEgMCAwIDEgMCAxLjk2NmwtNS41NTggMS4wNTFhMiAyIDAgMCAwLTEuNTk0IDEuNTk0bC0xLjA1MSA1LjU1OGExIDEgMCAwIDEtMS45NjYgMGwtMS4wNTEtNS41NThhMiAyIDAgMCAwLTEuNTk0LTEuNTk0bC01LjU1OC0xLjA1MWExIDEgMCAwIDEgMC0xLjk2Nmw1LjU1OC0xLjA1MWEyIDIgMCAwIDAgMS41OTQtMS41OTR6In1dXSxheT1bWyJwYXRoIix7ZDoiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiJ9XSxbInBhdGgiLHtkOiJNMjAgMnY0In1dLFsicGF0aCIse2Q6Ik0yMiA0aC00In1dLFsiY2lyY2xlIix7Y3g6IjQiLGN5OiIyMCIscjoiMiJ9XV0sTjh0PVtbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHg6IjQiLHk6IjIiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xMiA2aC4wMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE0IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAxNGguMDEifV1dLEY4dD1bWyJwYXRoIix7ZDoiTTguOCAyMHYtNC4xbDEuOS4yYTIuMyAyLjMgMCAwIDAgMi4xNjQtMi4xVjguM0E1LjM3IDUuMzcgMCAwIDAgMiA4LjI1YzAgMi44LjY1NiAzLjA1NCAxIDQuNTVhNS43NyA1Ljc3IDAgMCAxIC4wMjkgMi43NThMMiAyMCJ9XSxbInBhdGgiLHtkOiJNMTkuOCAxNy44YTcuNSA3LjUgMCAwIDAgLjAwMy0xMC42MDMifV0sWyJwYXRoIix7ZDoiTTE3IDE1YTMuNSAzLjUgMCAwIDAtLjAyNS00Ljk3NSJ9XV0sTzh0PVtbInBhdGgiLHtkOiJtNiAxNiA2LTEyIDYgMTIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNNCAyMWMxLjEgMCAxLjEtMSAyLjMtMXMxLjEgMSAyLjMgMWMxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSJ9XV0sUjh0PVtbInBhdGgiLHtkOiJtNiAxNiA2LTEyIDYgMTIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJtMTYgMjAgMiAyIDQtNCJ9XV0sQjh0PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oifV0sWyJwYXRoIix7ZDoiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSJ9XSxbImNpcmNsZSIse2N4OiIxOSIsY3k6IjUiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNSIsY3k6IjE5IixyOiIyIn1dXSxIOHQ9W1siY2lyY2xlIix7Y3g6IjE5IixjeToiNSIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI1IixjeToiMTkiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSJ9XV0scTh0PVtbInBhdGgiLHtkOiJNMTYgM2g1djUifV0sWyJwYXRoIix7ZDoiTTggM0gzdjUifV0sWyJwYXRoIix7ZDoiTTEyIDIydi04LjNhNCA0IDAgMCAwLTEuMTcyLTIuODcyTDMgMyJ9XSxbInBhdGgiLHtkOiJtMTUgOSA2LTYifV1dLFY4dD1bWyJwYXRoIix7ZDoiTTE3IDEzLjQ0IDQuNDQyIDE3LjA4MkEyIDIgMCAwIDAgNC45ODIgMjFIMTlhMiAyIDAgMCAwIC41NTgtMy45MjFsLTEuMTE1LS4zMkEyIDIgMCAwIDEgMTcgMTQuODM3VjcuNjYifV0sWyJwYXRoIix7ZDoibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4In1dXSxqOHQ9W1sicGF0aCIse2Q6Ik0xNS4yOTUgMTkuNTYyIDE2IDIyIn1dLFsicGF0aCIse2Q6Im0xNyAxNiAzLjc1OCAyLjA5OCJ9XSxbInBhdGgiLHtkOiJtMTkgMTIuNSAzLjAyNi0uNTk4In1dLFsicGF0aCIse2Q6Ik03LjYxIDYuM2EzIDMgMCAwIDAtMy45MiAxLjNsLTEuMzggMi43OWEzIDMgMCAwIDAgMS4zIDMuOTFsNi44OSAzLjU5N2ExIDEgMCAwIDAgMS4zNDItLjQ0N2wzLjEwNi02LjIxMWExIDEgMCAwIDAtLjQ0Ny0xLjM0MXoifV0sWyJwYXRoIix7ZDoiTTggOVYyIn1dXSxVOHQ9W1sicGF0aCIse2Q6Ik0zIDNoLjAxIn1dLFsicGF0aCIse2Q6Ik03IDVoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMSA3aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyA3aC4wMSJ9XSxbInBhdGgiLHtkOiJNNyA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMyAxMWguMDEifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiNCIseDoiMTUiLHk6IjUifV0sWyJwYXRoIix7ZDoibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIn1dLFsicGF0aCIse2Q6Im0xMyAxNCA4LTIifV0sWyJwYXRoIix7ZDoibTEzIDE5IDgtMiJ9XV0sVzh0PVtbInBhdGgiLHtkOiJNMTQgOS41MzZWN2E0IDQgMCAwIDEgNC00aDEuNWEuNS41IDAgMCAxIC41LjVWNWE0IDQgMCAwIDEtNCA0IDQgNCAwIDAgMC00IDRjMCAyIDEgMyAxIDVhNSA1IDAgMCAxLTEgMyJ9XSxbInBhdGgiLHtkOiJNNCA5YTUgNSAwIDAgMSA4IDQgNSA1IDAgMCAxLTgtNCJ9XSxbInBhdGgiLHtkOiJNNSAyMWgxNCJ9XV0saXk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoibTE2IDgtOCA4In1dLFsicGF0aCIse2Q6Ik0xNiAxNkg4VjgifV1dLHJ5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0xNyAxMmgtMmwtMiA1LTItMTAtMiA1SDcifV1dLHN5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im04IDggOCA4In1dLFsicGF0aCIse2Q6Ik0xNiA4djhIOCJ9XV0sbnk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDh2OCJ9XSxbInBhdGgiLHtkOiJtOCAxMiA0IDQgNC00In1dXSxveT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTIgOC00IDQgNCA0In1dLFsicGF0aCIse2Q6Ik0xNiAxMkg4In1dXSxseT1bWyJwYXRoIix7ZDoiTTEzIDIxaDZhMiAyIDAgMCAwIDItMlY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjYifV0sWyJwYXRoIix7ZDoibTMgMjEgOS05In1dLFsicGF0aCIse2Q6Ik05IDIxSDN2LTYifV1dLGN5PVtbInBhdGgiLHtkOiJNMTMgM2g2YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTYifV0sWyJwYXRoIix7ZDoibTMgMyA5IDkifV0sWyJwYXRoIix7ZDoiTTMgOVYzaDYifV1dLGR5PVtbInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifV0sWyJwYXRoIix7ZDoibTIxIDIxLTktOSJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NmgtNiJ9XV0scHk9W1sicGF0aCIse2Q6Ik0yMSAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg2In1dLFsicGF0aCIse2Q6Im0yMSAzLTkgOSJ9XSxbInBhdGgiLHtkOiJNMTUgM2g2djYifV1dLGh5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDEyaDgifV0sWyJwYXRoIix7ZDoibTEyIDE2IDQtNC00LTQifV1dLHV5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik04IDE2VjhoOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTYgOCA4In1dXSxmeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOCA4aDh2OCJ9XSxbInBhdGgiLHtkOiJtOCAxNiA4LTgifV1dLG15PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im0xNiAxMi00LTQtNCA0In1dLFsicGF0aCIse2Q6Ik0xMiAxNlY4In1dXSxneT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dLFsicGF0aCIse2Q6Im04LjUgMTQgNy00In1dLFsicGF0aCIse2Q6Im04LjUgMTAgNyA0In1dXSxieT1bWyJsaW5lIix7eDE6IjUiLHkxOiIzIix4MjoiMTkiLHkyOiIzIn1dLFsibGluZSIse3gxOiIzIix5MToiNSIseDI6IjMiLHkyOiIxOSJ9XSxbImxpbmUiLHt4MToiMjEiLHkxOiI1Iix4MjoiMjEiLHkyOiIxOSJ9XSxbImxpbmUiLHt4MToiOSIseTE6IjIxIix4MjoiMTAiLHkyOiIyMSJ9XSxbImxpbmUiLHt4MToiMTQiLHkxOiIyMSIseDI6IjE1Iix5MjoiMjEifV0sWyJwYXRoIix7ZDoiTSAzIDUgQTIgMiAwIDAgMSA1IDMifV0sWyJwYXRoIix7ZDoiTSAxOSAzIEEyIDIgMCAwIDEgMjEgNSJ9XSxbInBhdGgiLHtkOiJNIDUgMjEgQTIgMiAwIDAgMSAzIDE5In1dLFsicGF0aCIse2Q6Ik0gMjEgMTkgQTIgMiAwIDAgMSAxOSAyMSJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiI4LjUiLHI6IjEuNSJ9XSxbImxpbmUiLHt4MToiOS41NjA2NiIseTE6IjkuNTYwNjYiLHgyOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxNyIseTE6IjE3Iix4MjoiMTQuODIiLHkyOiIxNC44MiJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiIxNS41IixyOiIxLjUifV0sWyJsaW5lIix7eDE6IjkuNTYwNjYiLHkxOiIxNC40MzkzNCIseDI6IjE3Iix5MjoiNyJ9XV0sU2w9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTkgOGg3In1dLFsicGF0aCIse2Q6Ik04IDEyaDYifV0sWyJwYXRoIix7ZDoiTTExIDE2aDUifV1dLHZ5PVtbInBhdGgiLHtkOiJNMjEgMTAuNjU2VjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMi4zNDQifV0sWyJwYXRoIix7ZDoibTkgMTEgMyAzTDIyIDQifV1dLHl5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQifV1dLHh5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im0xNiAxMC00IDQtNC00In1dXSx3eT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJtMTQgMTYtNC00IDQtNCJ9XV0sTXk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoibTEwIDggNCA0LTQgNCJ9XV0senk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoibTggMTQgNC00IDQgNCJ9XV0sRzh0PVtbInBhdGgiLHtkOiJNMTAgOS41IDggMTJsMiAyLjUifV0sWyJwYXRoIix7ZDoiTTE0IDIxaDEifV0sWyJwYXRoIix7ZDoibTE0IDkuNSAyIDIuNS0yIDIuNSJ9XSxbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTkgMjFoMSJ9XV0sa3k9W1sicGF0aCIse2Q6Im0xMCA5LTMgMyAzIDMifV0sWyJwYXRoIix7ZDoibTE0IDE1IDMtMy0zLTMifV0sWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XV0sWTh0PVtbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTkgMjFoMSJ9XSxbInBhdGgiLHtkOiJNMTQgMjFoMSJ9XV0sU3k9W1sicGF0aCIse2Q6Ik04IDd2NyJ9XSxbInBhdGgiLHtkOiJNMTIgN3Y0In1dLFsicGF0aCIse2Q6Ik0xNiA3djkifV0sWyJwYXRoIix7ZDoiTTUgM2EyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik05IDNoMSJ9XSxbInBhdGgiLHtkOiJNMTQgM2gxIn1dLFsicGF0aCIse2Q6Ik0xOSAzYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTIxIDl2MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTlhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMTQgMjFoMSJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTIifV0sWyJwYXRoIix7ZDoiTTMgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMyA5djEifV1dLEN5PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oifV0sWyJwYXRoIix7ZDoiTTUgM2EyIDIgMCAwIDAtMiAyIn1dLFsicGF0aCIse2Q6Ik0xOSAzYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNOSAzaDEifV0sWyJwYXRoIix7ZDoiTTkgMjFoMiJ9XSxbInBhdGgiLHtkOiJNMTQgM2gxIn1dLFsicGF0aCIse2Q6Ik0zIDl2MSJ9XSxbInBhdGgiLHtkOiJNMjEgOXYyIn1dLFsicGF0aCIse2Q6Ik0zIDE0djEifV1dLF95PVtbInBhdGgiLHtkOiJNNSAzYTIgMiAwIDAgMC0yIDIifV0sWyJwYXRoIix7ZDoiTTE5IDNhMiAyIDAgMCAxIDIgMiJ9XSxbInBhdGgiLHtkOiJNMjEgMTlhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNNSAyMWEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik05IDNoMSJ9XSxbInBhdGgiLHtkOiJNOSAyMWgxIn1dLFsicGF0aCIse2Q6Ik0xNCAzaDEifV0sWyJwYXRoIix7ZDoiTTE0IDIxaDEifV0sWyJwYXRoIix7ZDoiTTMgOXYxIn1dLFsicGF0aCIse2Q6Ik0yMSA5djEifV0sWyJwYXRoIix7ZDoiTTMgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTR2MSJ9XV0sWjh0PVtbInBhdGgiLHtkOiJNMTQgMjFoMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMjEgMTlhMiAyIDAgMCAxLTIgMiJ9XSxbInBhdGgiLHtkOiJNMjEgOXYxIn1dLFsicGF0aCIse2Q6Ik0zIDE0djEifV0sWyJwYXRoIix7ZDoiTTMgNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTMgOXYxIn1dLFsicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTIifV0sWyJwYXRoIix7ZDoiTTkgMjFoMSJ9XV0sVHk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjEyIix5MToiMTYiLHkyOiIxNiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjgiLHkyOiI4In1dXSxMeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dXSwkeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyAxMGgxMCJ9XSxbInBhdGgiLHtkOiJNNyAxNGgxMCJ9XV0sQXk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicGF0aCIse2Q6Ik05IDE3YzIgMCAyLjgtMSAyLjgtMi44VjEwYzAtMiAxLTMuMyAzLjItMyJ9XSxbInBhdGgiLHtkOiJNOSAxMS4yaDUuNyJ9XV0sRHk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTggN3Y3In1dLFsicGF0aCIse2Q6Ik0xMiA3djQifV0sWyJwYXRoIix7ZDoiTTE2IDd2OSJ9XV0sRXk9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTcgN3YxMCJ9XSxbInBhdGgiLHtkOiJNMTEgN3YxMCJ9XSxbInBhdGgiLHtkOiJtMTUgNyAyIDEwIn1dXSxQeT1bWyJwYXRoIix7ZDoiTTggMTZWOC41YS41LjUgMCAwIDEgLjktLjNsMi43IDMuNTk5YS41LjUgMCAwIDAgLjggMGwyLjctMy42YS41LjUgMCAwIDEgLjkuM1YxNiJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXSxJeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyA4aDEwIn1dLFsicGF0aCIse2Q6Ik03IDEyaDEwIn1dLFsicGF0aCIse2Q6Ik03IDE2aDEwIn1dXSxOeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOCAxMmg4In1dXSxGeT1bWyJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiJ9XV0sT3k9W1sicGF0aCIse2Q6Ik0zLjYgMy42QTIgMiAwIDAgMSA1IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtLjU5IDEuNDEifV0sWyJwYXRoIix7ZDoiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dLFsicGF0aCIse2Q6Ik0xMyAxM2EzIDMgMCAxIDAgMC02SDl2MiJ9XSxbInBhdGgiLHtkOiJNOSAxN3YtMi4zIn1dXSxSeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5In1dXSxYOHQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJsaW5lIix7eDE6IjEwIix4MjoiMTAiLHkxOiIxNSIseTI6IjkifV0sWyJsaW5lIix7eDE6IjE0Iix4MjoiMTQiLHkxOiIxNSIseTI6IjkifV1dLGxvPVtbInBhdGgiLHtkOiJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03In1dLFsicGF0aCIse2Q6Ik0xOC4zNzUgMi42MjVhMSAxIDAgMCAxIDMgM2wtOS4wMTMgOS4wMTRhMiAyIDAgMCAxLS44NTMuNTA1bC0yLjg3My44NGEuNS41IDAgMCAxLS42Mi0uNjJsLjg0LTIuODczYTIgMiAwIDAgMSAuNTA2LS44NTJ6In1dXSxCeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyA3aDEwIn1dLFsicGF0aCIse2Q6Ik0xMCA3djEwIn1dLFsicGF0aCIse2Q6Ik0xNiAxN2EyIDIgMCAwIDEtMi0yVjcifV1dLEh5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Im0xNSA5LTYgNiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTUgMTVoLjAxIn1dXSxxeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMTIgMTJIOS41YTIuNSAyLjUgMCAwIDEgMC01SDE3In1dLFsicGF0aCIse2Q6Ik0xMiA3djEwIn1dLFsicGF0aCIse2Q6Ik0xNiA3djEwIn1dXSxWeT1bWyJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjE4IixoZWlnaHQ6IjE4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiJ9XV0sank9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbInBhdGgiLHtkOiJNMTIgOHY4In1dXSxVeT1bWyJwYXRoIix7ZDoiTTEyIDd2NCJ9XSxbInBhdGgiLHtkOiJNNy45OTggOS4wMDNhNSA1IDAgMSAwIDgtLjAwNSJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXSxLOHQ9W1sicGF0aCIse2Q6Ik0yMSAxMWE4IDggMCAwIDAtOC04In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0In1dXSxROHQ9W1sicGF0aCIse2Q6Ik03IDEyaDJsMiA1IDItMTBoNCJ9XSxbInJlY3QiLHt4OiIzIix5OiIzIix3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHJ4OiIyIn1dXSxXeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiI4LjUiLHI6IjEuNSJ9XSxbImxpbmUiLHt4MToiOS41NjA2NiIseTE6IjkuNTYwNjYiLHgyOiIxMiIseTI6IjEyIn1dLFsibGluZSIse3gxOiIxNyIseTE6IjE3Iix4MjoiMTQuODIiLHkyOiIxNC44MiJ9XSxbImNpcmNsZSIse2N4OiI4LjUiLGN5OiIxNS41IixyOiIxLjUifV0sWyJsaW5lIix7eDE6IjkuNTYwNjYiLHkxOiIxNC40MzkzNCIseDI6IjE3Iix5MjoiNyJ9XV0sR3k9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTE2IDguOVY3SDhsNCA1LTQgNWg4di0xLjkifV1dLFl5PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsibGluZSIse3gxOiI5Iix4MjoiMTUiLHkxOiIxNSIseTI6IjkifV1dLFp5PVtbInBhdGgiLHtkOiJNOCAxOUg1Yy0xIDAtMi0xLTItMlY3YzAtMSAxLTIgMi0yaDMifV0sWyJwYXRoIix7ZDoiTTE2IDVoM2MxIDAgMiAxIDIgMnYxMGMwIDEtMSAyLTIgMmgtMyJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjQiLHkyOiIyMCJ9XV0sWHk9W1sicGF0aCIse2Q6Ik01IDhWNWMwLTEgMS0yIDItMmgxMGMxIDAgMiAxIDIgMnYzIn1dLFsicGF0aCIse2Q6Ik0xOSAxNnYzYzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0ydi0zIn1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxMiIseTI6IjEyIn1dXSxKOHQ9W1sicGF0aCIse2Q6Ik00IDEwYy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoNGMxLjEgMCAyIC45IDIgMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTZjLTEuMSAwLTItLjktMi0ydi00YzAtMS4xLjktMiAyLTJoNGMxLjEgMCAyIC45IDIgMiJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI4Iix4OiIxNCIseToiMTQiLHJ4OiIyIn1dXSxlZHQ9W1sicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV0sWyJyZWN0Iix7eDoiOCIseToiOCIsd2lkdGg6IjgiLGhlaWdodDoiOCIscng6IjEifV1dLHRkdD1bWyJwYXRoIix7ZDoiTTExLjAzNSA3LjY5YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY2bC0xLjE1Ni0xLjE1M2ExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6In1dLFsicmVjdCIse3g6IjMiLHk6IjMiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxOCIscng6IjIifV1dLGFkdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInJlY3QiLHt4OiI5Iix5OiI5Iix3aWR0aDoiNiIsaGVpZ2h0OiI2IixyeDoiMSJ9XV0sS3k9W1sicGF0aCIse2Q6Im03IDExIDItMi0yLTIifV0sWyJwYXRoIix7ZDoiTTExIDEzaDQifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIscnk6IjIifV1dLFF5PVtbInBhdGgiLHtkOiJNMTggMjFhNiA2IDAgMCAwLTEyIDAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMSIscjoiNCJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dXSxKeT1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEwIixyOiIzIn1dLFsicGF0aCIse2Q6Ik03IDIxdi0yYTIgMiAwIDAgMSAyLTJoNmEyIDIgMCAwIDEgMiAydjIifV1dLGV4PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixyeToiMiJ9XSxbInBhdGgiLHtkOiJtMTUgOS02IDYifV0sWyJwYXRoIix7ZDoibTkgOSA2IDYifV1dLGlkdD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XV0scmR0PVtbInBhdGgiLHtkOiJNMTYgMTJ2MmEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAwLTEgMXYzYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMlYxMGEyIDIgMCAwIDAtMi0yaDAifV0sWyJwYXRoIix7ZDoiTTQgMTZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYzYTEgMSAwIDAgMS0xIDFoLTVhMiAyIDAgMCAwLTIgMnYyIn1dXSxzZHQ9W1sicGF0aCIse2Q6Ik0xMCAyMmEyIDIgMCAwIDEtMi0yIn1dLFsicGF0aCIse2Q6Ik0xNCAyYTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTE2IDIyaC0yIn1dLFsicGF0aCIse2Q6Ik0yIDEwVjgifV0sWyJwYXRoIix7ZDoiTTIgNGEyIDIgMCAwIDEgMi0yIn1dLFsicGF0aCIse2Q6Ik0yMCA4YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTIyIDE0djIifV0sWyJwYXRoIix7ZDoiTTIyIDIwYTIgMiAwIDAgMS0yIDIifV0sWyJwYXRoIix7ZDoiTTQgMTZhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNOCAxMGEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAxIDEgMXY1YTIgMiAwIDAgMS0yIDJIOWExIDEgMCAwIDEtMS0xeiJ9XSxbInBhdGgiLHtkOiJNOCAyaDIifV1dLG5kdD1bWyJwYXRoIix7ZDoiTTEwIDIyYTIgMiAwIDAgMS0yLTIifV0sWyJwYXRoIix7ZDoiTTE2IDIyaC0yIn1dLFsicGF0aCIse2Q6Ik0xNiA0YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoM2ExIDEgMCAwIDAgMS0xdi01YTIgMiAwIDAgMSAyLTJoNWExIDEgMCAwIDAgMS0xeiJ9XSxbInBhdGgiLHtkOiJNMjAgOGEyIDIgMCAwIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0yMiAxNHYyIn1dLFsicGF0aCIse2Q6Ik0yMiAyMGEyIDIgMCAwIDEtMiAyIn1dXSxvZHQ9W1sicGF0aCIse2Q6Ik00IDE2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2M2ExIDEgMCAwIDAgMSAxaDNhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDEwYTIgMiAwIDAgMS0yLTJ2LTNhMSAxIDAgMCAwLTEtMXoifV1dLGxkdD1bWyJwYXRoIix7ZDoiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCJ9XSxbInBhdGgiLHtkOiJNMTMuNzcxIDIwLjk1NmEzMyAzMyAwIDAgMS0zLjU0MS4wMDEifV0sWyJwYXRoIix7ZDoiTTIwLjE4IDE3Ljc0Yy0uNTEgMS4xNS0xLjI5IDEuOTMtMi40MzkgMi40NCJ9XSxbInBhdGgiLHtkOiJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4In1dLFsicGF0aCIse2Q6Ik0yMC45NTcgMTAuMjNhMzMgMzMgMCAwIDEgMCAzLjU0In1dLFsicGF0aCIse2Q6Ik0zLjA0MyAxMC4yM2EzNCAzNCAwIDAgMCAuMDAxIDMuNTQxIn1dLFsicGF0aCIse2Q6Ik02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4In1dLFsicGF0aCIse2Q6Ik02LjI2IDMuODJjLTEuMTQ5LjUxLTEuOTMgMS4yOTEtMi40NCAyLjQ0In1dXSxjZHQ9W1sicGF0aCIse2Q6Ik0xMiAzYzcuMiAwIDkgMS44IDkgOXMtMS44IDktOSA5LTktMS44LTktOSAxLjgtOSA5LTkifV1dLGRkdD1bWyJwYXRoIix7ZDoiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUifV0sWyJwYXRoIix7ZDoiTTE2IDIwYTMgMyAwIDAgMSAzLTNoMWEyIDIgMCAwIDAgMi0ydi0yYTQgNCAwIDAgMC00LTRWNCJ9XSxbInBhdGgiLHtkOiJNMTggMTNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAifV1dLHBkdD1bWyJwYXRoIix7ZDoiTTE0IDEzVjguNUMxNCA3IDE1IDcgMTUgNWEzIDMgMCAwIDAtNiAwYzAgMiAxIDIgMSAzLjVWMTMifV0sWyJwYXRoIix7ZDoiTTIwIDE1LjVhMi41IDIuNSAwIDAgMC0yLjUtMi41aC0xMUEyLjUgMi41IDAgMCAwIDQgMTUuNVYxN2ExIDEgMCAwIDAgMSAxaDE0YTEgMSAwIDAgMCAxLTF6In1dLFsicGF0aCIse2Q6Ik01IDIyaDE0In1dXSxoZHQ9W1sicGF0aCIse2Q6Ik0xMiAxOC4zMzhhMi4xIDIuMSAwIDAgMC0uOTg3LjI0NEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIgMi4xMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIgMi4xMiAwIDAgMCAxLjU5Ny0xLjE2bDIuMzA5LTQuNjc5QS41My41MyAwIDAgMSAxMiAyIn1dXSx1ZHQ9W1sicGF0aCIse2Q6Im0xMC4zNDQgNC42ODggMS4xODEtMi4zOTNhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMiAyLjEyIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy4yMzcgMy4xNTIifV0sWyJwYXRoIix7ZDoibTE3Ljk0NSAxNy45NDUuNDMgMi41MDVhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIgMi4xMiAwIDAgMC0xLjk3MyAwTDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhOCA4IDAgMCAwIC40LS4wOTkifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV0sZmR0PVtbInBhdGgiLHtkOiJNMTEuNTI1IDIuMjk1YS41My41MyAwIDAgMSAuOTUgMGwyLjMxIDQuNjc5YTIuMTIzIDIuMTIzIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy43MzYgMy42MzhhMi4xMjMgMi4xMjMgMCAwIDAtLjYxMSAxLjg3OGwuODgyIDUuMTRhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIyIDIuMTIyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyMiAyLjEyMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIyIDIuMTIyIDAgMCAwIDEuNTk3LTEuMTZ6In1dXSxtZHQ9W1sicGF0aCIse2Q6Ik0xMy45NzEgNC4yODVBMiAyIDAgMCAxIDE3IDZ2MTJhMiAyIDAgMCAxLTMuMDI5IDEuNzE1bC05Ljk5Ny01Ljk5OGEyIDIgMCAwIDEtLjAwMy0zLjQzMnoifV0sWyJwYXRoIix7ZDoiTTIxIDIwVjQifV1dLGdkdD1bWyJwYXRoIix7ZDoiTTEwLjAyOSA0LjI4NUEyIDIgMCAwIDAgNyA2djEyYTIgMiAwIDAgMCAzLjAyOSAxLjcxNWw5Ljk5Ny01Ljk5OGEyIDIgMCAwIDAgLjAwMy0zLjQzMnoifV0sWyJwYXRoIix7ZDoiTTMgNHYxNiJ9XV0sYmR0PVtbInBhdGgiLHtkOiJNMTEgMnYyIn1dLFsicGF0aCIse2Q6Ik01IDJ2MiJ9XSxbInBhdGgiLHtkOiJNNSAzSDRhMiAyIDAgMCAwLTIgMnY0YTYgNiAwIDAgMCAxMiAwVjVhMiAyIDAgMCAwLTItMmgtMSJ9XSxbInBhdGgiLHtkOiJNOCAxNWE2IDYgMCAwIDAgMTIgMHYtMyJ9XSxbImNpcmNsZSIse2N4OiIyMCIsY3k6IjEwIixyOiIyIn1dXSx2ZHQ9W1sicGF0aCIse2Q6Ik0yMSA5YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNSAzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ6In1dLFsicGF0aCIse2Q6Ik0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1In1dLFsicGF0aCIse2Q6Ik04IDEzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTYgMTNoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxNnMuOCAxIDIgMWMxLjMgMCAyLTEgMi0xIn1dXSx5ZHQ9W1sicGF0aCIse2Q6Ik0yMSA5YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNSAzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ6In1dLFsicGF0aCIse2Q6Ik0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1In1dXSx4ZHQ9W1sicGF0aCIse2Q6Ik0xMS4yNjQgMi4yMDVBNCA0IDAgMCAwIDYuNDIgNC4yMTFsLTQgOGE0IDQgMCAwIDAgMS4zNTkgNS4xMTdsNiA0YTQgNCAwIDAgMCA0LjQzOCAwbDYtNGE0IDQgMCAwIDAgMS41NzYtNC41OTJsLTItNmE0IDQgMCAwIDAtMi41My0yLjUzeiJ9XSxbInBhdGgiLHtkOiJNMTEuOTkgMjIgMTQgMTJsNy44MjIgMy4xODQifV0sWyJwYXRoIix7ZDoiTTE0IDEyIDguNDcgMi4zMDIifV1dLHdkdD1bWyJwYXRoIix7ZDoiTTE1IDIxdi01YTEgMSAwIDAgMC0xLTFoLTRhMSAxIDAgMCAwLTEgMXY1In1dLFsicGF0aCIse2Q6Ik0xNy43NzQgMTAuMzFhMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjQ1MSAwIDEuMTIgMS4xMiAwIDAgMC0xLjU0OCAwIDIuNSAyLjUgMCAwIDEtMy40NTIgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDkgMCAyLjUgMi41IDAgMCAxLTMuNzctMy4yNDhsMi44ODktNC4xODRBMiAyIDAgMCAxIDcgMmgxMGEyIDIgMCAwIDEgMS42NTMuODczbDIuODk1IDQuMTkyYTIuNSAyLjUgMCAwIDEtMy43NzQgMy4yNDQifV0sWyJwYXRoIix7ZDoiTTQgMTAuOTVWMTlhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04LjA1In1dXSxNZHQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiI2Iix4OiIyIix5OiI0IixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiNiIseDoiMiIseToiMTQiLHJ4OiIyIn1dXSx6ZHQ9W1sicmVjdCIse3dpZHRoOiI2IixoZWlnaHQ6IjIwIix4OiI0Iix5OiIyIixyeDoiMiJ9XSxbInJlY3QiLHt3aWR0aDoiNiIsaGVpZ2h0OiIyMCIseDoiMTQiLHk6IjIiLHJ4OiIyIn1dXSxrZHQ9W1sicGF0aCIse2Q6Ik0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCJ9XSxbInBhdGgiLHtkOiJNMTQgMTJhNCA0IDAgMCAxIDAgOEg2In1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiIxMiIseTI6IjEyIn1dXSxTZHQ9W1sicGF0aCIse2Q6Im00IDUgOCA4In1dLFsicGF0aCIse2Q6Im0xMiA1LTggOCJ9XSxbInBhdGgiLHtkOiJNMjAgMTloLTRjMC0xLjUuNDQtMiAxLjUtMi41UzIwIDE1LjMzIDIwIDE0YzAtLjQ3LS4xNy0uOTMtLjQ4LTEuMjlhMi4xMSAyLjExIDAgMCAwLTIuNjItLjQ0Yy0uNDIuMjQtLjc0LjYyLS45IDEuMDcifV1dLENkdD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTIgNGguMDEifV0sWyJwYXRoIix7ZDoiTTIwIDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik00IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcuNjU3IDYuMzQzaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTcuNjU3IDE3LjY1N2guMDEifV0sWyJwYXRoIix7ZDoiTTYuMzQzIDE3LjY1N2guMDEifV0sWyJwYXRoIix7ZDoiTTYuMzQzIDYuMzQzaC4wMSJ9XV0sX2R0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMiAzdjEifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjEifV0sWyJwYXRoIix7ZDoiTTMgMTJoMSJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMSJ9XSxbInBhdGgiLHtkOiJtMTguMzY0IDUuNjM2LS43MDcuNzA3In1dLFsicGF0aCIse2Q6Im02LjM0MyAxNy42NTctLjcwNy43MDcifV0sWyJwYXRoIix7ZDoibTUuNjM2IDUuNjM2LjcwNy43MDcifV0sWyJwYXRoIix7ZDoibTE3LjY1NyAxNy42NTcuNzA3LjcwNyJ9XV0sVGR0PVtbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifV0sWyJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifV0sWyJwYXRoIix7ZDoibTE5IDUtMS4yNTYgMS4yNTYifV0sWyJwYXRoIix7ZDoiTTIwIDEyaDIifV1dLExkdD1bWyJwYXRoIix7ZDoiTTEwIDIxdi0xIn1dLFsicGF0aCIse2Q6Ik0xMCA0VjMifV0sWyJwYXRoIix7ZDoiTTEwIDlhMyAzIDAgMCAwIDAgNiJ9XSxbInBhdGgiLHtkOiJtMTQgMjAgMS4yNS0yLjVMMTggMTgifV0sWyJwYXRoIix7ZDoibTE0IDQgMS4yNSAyLjVMMTggNiJ9XSxbInBhdGgiLHtkOiJtMTcgMjEtMy02IDEuNS0zSDIyIn1dLFsicGF0aCIse2Q6Im0xNyAzLTMgNiAxLjUgMyJ9XSxbInBhdGgiLHtkOiJNMiAxMmgxIn1dLFsicGF0aCIse2Q6Im0yMCAxMC0xLjUgMiAxLjUgMiJ9XSxbInBhdGgiLHtkOiJtMy42NCAxOC4zNi43LS43In1dLFsicGF0aCIse2Q6Im00LjM0IDYuMzQtLjctLjcifV1dLCRkdD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xMiAyMHYyIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoiTTIgMTJoMiJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoibTE5LjA3IDQuOTMtMS40MSAxLjQxIn1dXSxBZHQ9W1sicGF0aCIse2Q6Ik0xMiAydjgifV0sWyJwYXRoIix7ZDoibTQuOTMgMTAuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yIDE4aDIifV0sWyJwYXRoIix7ZDoiTTIwIDE4aDIifV0sWyJwYXRoIix7ZDoibTE5LjA3IDEwLjkzLTEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMjIgMjJIMiJ9XSxbInBhdGgiLHtkOiJtOCA2IDQtNCA0IDQifV0sWyJwYXRoIix7ZDoiTTE2IDE4YTQgNCAwIDAgMC04IDAifV1dLERkdD1bWyJwYXRoIix7ZDoiTTEyIDEwVjIifV0sWyJwYXRoIix7ZDoibTQuOTMgMTAuOTMgMS40MSAxLjQxIn1dLFsicGF0aCIse2Q6Ik0yIDE4aDIifV0sWyJwYXRoIix7ZDoiTTIwIDE4aDIifV0sWyJwYXRoIix7ZDoibTE5LjA3IDEwLjkzLTEuNDEgMS40MSJ9XSxbInBhdGgiLHtkOiJNMjIgMjJIMiJ9XSxbInBhdGgiLHtkOiJtMTYgNi00IDQtNC00In1dLFsicGF0aCIse2Q6Ik0xNiAxOGE0IDQgMCAwIDAtOCAwIn1dXSxFZHQ9W1sicGF0aCIse2Q6Im00IDE5IDgtOCJ9XSxbInBhdGgiLHtkOiJtMTIgMTktOC04In1dLFsicGF0aCIse2Q6Ik0yMCAxMmgtNGMwLTEuNS40NDItMiAxLjUtMi41UzIwIDguMzM0IDIwIDcuMDAyYzAtLjQ3Mi0uMTctLjkzLS40ODQtMS4yOWEyLjEwNSAyLjEwNSAwIDAgMC0yLjYxNy0uNDM2Yy0uNDIuMjM5LS43MzguNjE0LS44OTkgMS4wNiJ9XV0sUGR0PVtbInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9XSxbInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In1dLFsicGF0aCIse2Q6Ik0gNyAxN2guMDEifV0sWyJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifV1dLElkdD1bWyJwYXRoIix7ZDoiTTEwIDIxVjNoOCJ9XSxbInBhdGgiLHtkOiJNNiAxNmg5In1dLFsicGF0aCIse2Q6Ik0xMCA5LjVoNyJ9XV0sTmR0PVtbInBhdGgiLHtkOiJNMTEgMTlINGEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmg1In1dLFsicGF0aCIse2Q6Ik0xMyA1aDdhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC01In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMifV0sWyJwYXRoIix7ZDoibTE4IDIyLTMtMyAzLTMifV0sWyJwYXRoIix7ZDoibTYgMiAzIDMtMyAzIn1dXSxGZHQ9W1sicGF0aCIse2Q6Im0xMSAxOS02LTYifV0sWyJwYXRoIix7ZDoibTUgMjEtMi0yIn1dLFsicGF0aCIse2Q6Im04IDE2LTQgNCJ9XSxbInBhdGgiLHtkOiJNOS41IDE3LjUgMjEgNlYzaC0zTDYuNSAxNC41In1dXSxPZHQ9W1sicG9seWxpbmUiLHtwb2ludHM6IjE0LjUgMTcuNSAzIDYgMyAzIDYgMyAxNy41IDE0LjUifV0sWyJsaW5lIix7eDE6IjEzIix4MjoiMTkiLHkxOiIxOSIseTI6IjEzIn1dLFsibGluZSIse3gxOiIxNiIseDI6IjIwIix5MToiMTYiLHkyOiIyMCJ9XSxbImxpbmUiLHt4MToiMTkiLHgyOiIyMSIseTE6IjIxIix5MjoiMTkifV0sWyJwb2x5bGluZSIse3BvaW50czoiMTQuNSA2LjUgMTggMyAyMSAzIDIxIDYgMTcuNSA5LjUifV0sWyJsaW5lIix7eDE6IjUiLHgyOiI5Iix5MToiMTQiLHkyOiIxOCJ9XSxbImxpbmUiLHt4MToiNyIseDI6IjQiLHkxOiIxNyIseTI6IjIwIn1dLFsibGluZSIse3gxOiIzIix4MjoiNSIseTE6IjE5Iix5MjoiMjEifV1dLFJkdD1bWyJwYXRoIix7ZDoibTE4IDIgNCA0In1dLFsicGF0aCIse2Q6Im0xNyA3IDMtMyJ9XSxbInBhdGgiLHtkOiJNMTkgOSA4LjcgMTkuM2MtMSAxLTIuNSAxLTMuNCAwbC0uNi0uNmMtMS0xLTEtMi41IDAtMy40TDE1IDUifV0sWyJwYXRoIix7ZDoibTkgMTEgNCA0In1dLFsicGF0aCIse2Q6Im01IDE5LTMgMyJ9XSxbInBhdGgiLHtkOiJtMTQgNCA2IDYifV1dLEJkdD1bWyJwYXRoIix7ZDoiTTkgM0g1YTIgMiAwIDAgMC0yIDJ2NG02LTZoMTBhMiAyIDAgMCAxIDIgMnY0TTkgM3YxOG0wIDBoMTBhMiAyIDAgMCAwIDItMlY5TTkgMjFINWEyIDIgMCAwIDEtMi0yVjltMCAwaDE4In1dXSxIZHQ9W1sicGF0aCIse2Q6Ik0xMiAyMXYtNiJ9XSxbInBhdGgiLHtkOiJNMTIgOVYzIn1dLFsicGF0aCIse2Q6Ik0zIDE1aDE4In1dLFsicGF0aCIse2Q6Ik0zIDloMTgifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XV0scWR0PVtbInBhdGgiLHtkOiJNMTIgMTVWOSJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XSxbInBhdGgiLHtkOiJNMyA5aDE4In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV1dLFZkdD1bWyJwYXRoIix7ZDoiTTE0IDE0djIifV0sWyJwYXRoIix7ZDoiTTE0IDIwdjIifV0sWyJwYXRoIix7ZDoiTTE0IDJ2MiJ9XSxbInBhdGgiLHtkOiJNMTQgOHYyIn1dLFsicGF0aCIse2Q6Ik0yIDE1aDgifV0sWyJwYXRoIix7ZDoiTTIgM2g2YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkgyIn1dLFsicGF0aCIse2Q6Ik0yIDloOCJ9XSxbInBhdGgiLHtkOiJNMjIgMTVoLTQifV0sWyJwYXRoIix7ZDoiTTIyIDNoLTJhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDIifV0sWyJwYXRoIix7ZDoiTTIyIDloLTQifV0sWyJwYXRoIix7ZDoiTTUgM3YxOCJ9XV0samR0PVtbInBhdGgiLHtkOiJNMTYgNUgzIn1dLFsicGF0aCIse2Q6Ik0xNiAxMkgzIn1dLFsicGF0aCIse2Q6Ik0xNiAxOUgzIn1dLFsicGF0aCIse2Q6Ik0yMSA1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTJoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWguMDEifV1dLFVkdD1bWyJwYXRoIix7ZDoiTTE1IDN2MTgifV0sWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNMjEgOUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxNUgzIn1dXSxXZHQ9W1sicGF0aCIse2Q6Ik0xNCAxMGgyIn1dLFsicGF0aCIse2Q6Ik0xNSAyMnYtOCJ9XSxbInBhdGgiLHtkOiJNMTUgMnY0In1dLFsicGF0aCIse2Q6Ik0yIDEwaDIifV0sWyJwYXRoIix7ZDoiTTIwIDEwaDIifV0sWyJwYXRoIix7ZDoiTTMgMTloMTgifV0sWyJwYXRoIix7ZDoiTTMgMjJ2LTZhMiAyIDEzNSAwIDEgMi0yaDE0YTIgMiA0NSAwIDEgMiAydjYifV0sWyJwYXRoIix7ZDoiTTMgMnYyYTIgMiA0NSAwIDAgMiAyaDE0YTIgMiAxMzUgMCAwIDItMlYyIn1dLFsicGF0aCIse2Q6Ik04IDEwaDIifV0sWyJwYXRoIix7ZDoiTTkgMjJ2LTgifV0sWyJwYXRoIix7ZDoiTTkgMnY0In1dXSxHZHQ9W1sicGF0aCIse2Q6Ik0xMiAzdjE4In1dLFsicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWgxOCJ9XSxbInBhdGgiLHtkOiJNMyAxNWgxOCJ9XV0sWWR0PVtbInJlY3QiLHt3aWR0aDoiMTYiLGhlaWdodDoiMjAiLHg6IjQiLHk6IjIiLHJ4OiIyIixyeToiMiJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMi4wMSIseTE6IjE4Iix5MjoiMTgifV1dLFpkdD1bWyJyZWN0Iix7d2lkdGg6IjEwIixoZWlnaHQ6IjE0Iix4OiIzIix5OiI4IixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNSA0YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxNmEyIDIgMCAwIDEtMiAyaC0yLjQifV0sWyJwYXRoIix7ZDoiTTggMThoLjAxIn1dXSxYZHQ9W1siY2lyY2xlIix7Y3g6IjciLGN5OiI3IixyOiI1In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTciLHI6IjUifV0sWyJwYXRoIix7ZDoiTTEyIDE3aDEwIn1dLFsicGF0aCIse2Q6Im0zLjQ2IDEwLjU0IDcuMDgtNy4wOCJ9XV0sS2R0PVtbInBhdGgiLHtkOiJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6In1dLFsiY2lyY2xlIix7Y3g6IjcuNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XV0sUWR0PVtbInBhdGgiLHtkOiJNMTMuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4Nmw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMSAwIDMuNDA4bC00LjU5MiA0LjU5MmEyLjQgMi40IDAgMCAxLTMuNDA4IDBsLTYuNzEtNi43MUEyIDIgMCAwIDEgNiA5LjE3MlYzYTEgMSAwIDAgMSAxLTF6In1dLFsicGF0aCIse2Q6Ik0yIDd2Ni4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsNi43MSA2LjcxYTIuNCAyLjQgMCAwIDAgMy4xOTEuMTkzIn1dLFsiY2lyY2xlIix7Y3g6IjEwLjUiLGN5OiI2LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV1dLEpkdD1bWyJwYXRoIix7ZDoiTTQgNHYxNiJ9XV0sZTd0PVtbInBhdGgiLHtkOiJNNCA0djE2In1dLFsicGF0aCIse2Q6Ik05IDR2MTYifV1dLHQ3dD1bWyJwYXRoIix7ZDoiTTQgNHYxNiJ9XSxbInBhdGgiLHtkOiJNOSA0djE2In1dLFsicGF0aCIse2Q6Ik0xNCA0djE2In1dXSxhN3Q9W1sicGF0aCIse2Q6Ik00IDR2MTYifV0sWyJwYXRoIix7ZDoiTTkgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTQgNHYxNiJ9XSxbInBhdGgiLHtkOiJNMTkgNHYxNiJ9XV0saTd0PVtbInBhdGgiLHtkOiJNNCA0djE2In1dLFsicGF0aCIse2Q6Ik05IDR2MTYifV0sWyJwYXRoIix7ZDoiTTE0IDR2MTYifV0sWyJwYXRoIix7ZDoiTTE5IDR2MTYifV0sWyJwYXRoIix7ZDoiTTIyIDYgMiAxOCJ9XV0scjd0PVtbImNpcmNsZSIse2N4OiIxNyIsY3k6IjQiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTE1LjU5IDUuNDEgNS40MSAxNS41OSJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiMTciLHI6IjIifV0sWyJwYXRoIix7ZDoiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIifV1dLHM3dD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIyIn1dXSxuN3Q9W1sicGF0aCIse2Q6Im0xMC4wNjUgMTIuNDkzLTYuMTggMS4zMThhLjkzNC45MzQgMCAwIDEtMS4xMDgtLjcwMmwtLjUzNy0yLjE1YTEuMDcgMS4wNyAwIDAgMSAuNjkxLTEuMjY1bDEzLjUwNC00LjQ0In1dLFsicGF0aCIse2Q6Im0xMy41NiAxMS43NDcgNC4zMzItLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTYgMjEtMy4xMDUtNi4yMSJ9XSxbInBhdGgiLHtkOiJNMTYuNDg1IDUuOTRhMiAyIDAgMCAxIDEuNDU1LTIuNDI1bDEuMDktLjI3MmExIDEgMCAwIDEgMS4yMTIuNzI3bDEuNTE1IDYuMDZhMSAxIDAgMCAxLS43MjcgMS4yMTNsLTEuMDkuMjcyYTIgMiAwIDAgMS0yLjQyNS0xLjQ1NXoifV0sWyJwYXRoIix7ZDoibTYuMTU4IDguNjMzIDEuMTE0IDQuNDU2In1dLFsicGF0aCIse2Q6Im04IDIxIDMuMTA1LTYuMjEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiMiJ9XV0sbzd0PVtbImNpcmNsZSIse2N4OiI0IixjeToiNCIscjoiMiJ9XSxbInBhdGgiLHtkOiJtMTQgNSAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Im0xNCAxMCAzLTMgMyAzIn1dLFsicGF0aCIse2Q6Ik0xNyAxNFYyIn1dLFsicGF0aCIse2Q6Ik0xNyAxNEg3bC01IDhoMjBaIn1dLFsicGF0aCIse2Q6Ik04IDE0djgifV0sWyJwYXRoIix7ZDoibTkgMTQgNSA4In1dXSxsN3Q9W1sicGF0aCIse2Q6Ik0zLjUgMjEgMTQgMyJ9XSxbInBhdGgiLHtkOiJNMjAuNSAyMSAxMCAzIn1dLFsicGF0aCIse2Q6Ik0xNS41IDIxIDEyIDE1bC0zLjUgNiJ9XSxbInBhdGgiLHtkOiJNMiAyMWgyMCJ9XV0sYzd0PVtbInBhdGgiLHtkOiJNMTIgMTloOCJ9XSxbInBhdGgiLHtkOiJtNCAxNyA2LTYtNi02In1dXSx0eD1bWyJwYXRoIix7ZDoiTTIxIDcgNi44MiAyMS4xOGEyLjgzIDIuODMgMCAwIDEtMy45OS0uMDFhMi44MyAyLjgzIDAgMCAxIDAtNEwxNyAzIn1dLFsicGF0aCIse2Q6Im0xNiAyIDYgNiJ9XSxbInBhdGgiLHtkOiJNMTIgMTZINCJ9XV0sZDd0PVtbInBhdGgiLHtkOiJNMTQuNSAydjE3LjVjMCAxLjQtMS4xIDIuNS0yLjUgMi41Yy0xLjQgMC0yLjUtMS4xLTIuNS0yLjVWMiJ9XSxbInBhdGgiLHtkOiJNOC41IDJoNyJ9XSxbInBhdGgiLHtkOiJNMTQuNSAxNmgtNSJ9XV0scDd0PVtbInBhdGgiLHtkOiJNOSAydjE3LjVBMi41IDIuNSAwIDAgMSA2LjUgMjJBMi41IDIuNSAwIDAgMSA0IDE5LjVWMiJ9XSxbInBhdGgiLHtkOiJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiJ9XSxbInBhdGgiLHtkOiJNMyAyaDcifV0sWyJwYXRoIix7ZDoiTTE0IDJoNyJ9XSxbInBhdGgiLHtkOiJNOSAxNkg0In1dLFsicGF0aCIse2Q6Ik0yMCAxNmgtNSJ9XV0sYXg9W1sicGF0aCIse2Q6Ik0yMSA1SDMifV0sWyJwYXRoIix7ZDoiTTE3IDEySDcifV0sWyJwYXRoIix7ZDoiTTE5IDE5SDUifV1dLGl4PVtbInBhdGgiLHtkOiJNMjEgNUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxMkg5In1dLFsicGF0aCIse2Q6Ik0yMSAxOUg3In1dXSxyeD1bWyJwYXRoIix7ZDoiTTMgNWgxOCJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxOCJ9XSxbInBhdGgiLHtkOiJNMyAxOWgxOCJ9XV0saDd0PVtbInBhdGgiLHtkOiJNMTIgMjBoLTFhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEtMiAySDYifV0sWyJwYXRoIix7ZDoiTTEzIDhoN2EyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtNyJ9XSxbInBhdGgiLHtkOiJNNSAxNkg0YTIgMiAwIDAgMS0yLTJ2LTRhMiAyIDAgMCAxIDItMmgxIn1dLFsicGF0aCIse2Q6Ik02IDRoMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMSAyLTJoMSJ9XSxbInBhdGgiLHtkOiJNOSA2djEyIn1dXSxDbD1bWyJwYXRoIix7ZDoiTTIxIDVIMyJ9XSxbInBhdGgiLHtkOiJNMTUgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTcgMTlIMyJ9XV0sdTd0PVtbInBhdGgiLHtkOiJNMTcgMjJoLTFhNCA0IDAgMCAxLTQtNFY2YTQgNCAwIDAgMSA0LTRoMSJ9XSxbInBhdGgiLHtkOiJNNyAyMmgxYTQgNCAwIDAgMCA0LTR2LTEifV0sWyJwYXRoIix7ZDoiTTcgMmgxYTQgNCAwIDAgMSA0IDR2MSJ9XV0sc3g9W1sicGF0aCIse2Q6Ik0xNSA1aDYifV0sWyJwYXRoIix7ZDoiTTE1IDEyaDYifV0sWyJwYXRoIix7ZDoiTTMgMTloMTgifV0sWyJwYXRoIix7ZDoibTMgMTIgMy41NTMtNy43MjRhLjUuNSAwIDAgMSAuODk0IDBMMTEgMTIifV0sWyJwYXRoIix7ZDoiTTMuOTIgMTBoNi4xNiJ9XV0sZjd0PVtbInBhdGgiLHtkOiJNMTcgNUgzIn1dLFsicGF0aCIse2Q6Ik0yMSAxMkg4In1dLFsicGF0aCIse2Q6Ik0yMSAxOUg4In1dLFsicGF0aCIse2Q6Ik0zIDEydjcifV1dLG03dD1bWyJwYXRoIix7ZDoiTTIxIDVIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIMyJ9XSxbInBhdGgiLHtkOiJNMTAgMTlIMyJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE1IixyOiIzIn1dLFsicGF0aCIse2Q6Im0yMSAxOS0xLjktMS45In1dXSxueD1bWyJwYXRoIix7ZDoiTTE0IDIxaDEifV0sWyJwYXRoIix7ZDoiTTE0IDNoMSJ9XSxbInBhdGgiLHtkOiJNMTkgM2EyIDIgMCAwIDEgMiAyIn1dLFsicGF0aCIse2Q6Ik0yMSAxNHYxIn1dLFsicGF0aCIse2Q6Ik0yMSAxOWEyIDIgMCAwIDEtMiAyIn1dLFsicGF0aCIse2Q6Ik0yMSA5djEifV0sWyJwYXRoIix7ZDoiTTMgMTR2MSJ9XSxbInBhdGgiLHtkOiJNMyA5djEifV0sWyJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMiJ9XSxbInBhdGgiLHtkOiJNNSAzYTIgMiAwIDAgMC0yIDIifV0sWyJwYXRoIix7ZDoiTTcgMTJoMTAifV0sWyJwYXRoIix7ZDoiTTcgMTZoNiJ9XSxbInBhdGgiLHtkOiJNNyA4aDgifV0sWyJwYXRoIix7ZDoiTTkgMjFoMSJ9XSxbInBhdGgiLHtkOiJNOSAzaDEifV1dLG94PVtbInBhdGgiLHtkOiJtMTYgMTYtMyAzIDMgMyJ9XSxbInBhdGgiLHtkOiJNMyAxMmgxNC41YTEgMSAwIDAgMSAwIDdIMTMifV0sWyJwYXRoIix7ZDoiTTMgMTloNiJ9XSxbInBhdGgiLHtkOiJNMyA1aDE4In1dXSxnN3Q9W1sicGF0aCIse2Q6Ik0yIDEwczMtMyAzLTgifV0sWyJwYXRoIix7ZDoiTTIyIDEwcy0zLTMtMy04In1dLFsicGF0aCIse2Q6Ik0xMCAyYzAgNC40LTMuNiA4LTggOCJ9XSxbInBhdGgiLHtkOiJNMTQgMmMwIDQuNCAzLjYgOCA4IDgifV0sWyJwYXRoIix7ZDoiTTIgMTBzMiAyIDIgNSJ9XSxbInBhdGgiLHtkOiJNMjIgMTBzLTIgMi0yIDUifV0sWyJwYXRoIix7ZDoiTTggMTVoOCJ9XSxbInBhdGgiLHtkOiJNMiAyMnYtMWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxIn1dLFsicGF0aCIse2Q6Ik0xNCAyMnYtMWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxIn1dXSxiN3Q9W1sicGF0aCIse2Q6Im0xMCAyMC0xLjI1LTIuNUw2IDE4In1dLFsicGF0aCIse2Q6Ik0xMCA0IDguNzUgNi41IDYgNiJ9XSxbInBhdGgiLHtkOiJNMTAuNTg1IDE1SDEwIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDYuNUwxMCA5In1dLFsicGF0aCIse2Q6Ik0yMCAxNC41NGE0IDQgMCAxIDEtNCAwVjRhMiAyIDAgMCAxIDQgMHoifV0sWyJwYXRoIix7ZDoibTQgMTAgMS41IDJMNCAxNCJ9XSxbInBhdGgiLHtkOiJtNyAyMSAzLTYtMS41LTMifV0sWyJwYXRoIix7ZDoibTcgMyAzIDZoMiJ9XV0sdjd0PVtbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xMiA4YTQgNCAwIDAgMC0xLjY0NSA3LjY0NyJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIn1dLFsicGF0aCIse2Q6Ik0yMCAxNC41NGE0IDQgMCAxIDEtNCAwVjRhMiAyIDAgMCAxIDQgMHoifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIn1dXSx5N3Q9W1sicGF0aCIse2Q6Ik0xNCA0djEwLjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAwWiJ9XV0seDd0PVtbInBhdGgiLHtkOiJNOSAxOC4xMiAxMCAxNEg0LjE3YTIgMiAwIDAgMS0xLjkyLTIuNTZsMi4zMy04QTIgMiAwIDAgMSA2LjUgMkgyMGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMi43NmEyIDIgMCAwIDAtMS43OSAxLjExTDEyIDIyYTMuMTMgMy4xMyAwIDAgMS0zLTMuODhaIn1dLFsicGF0aCIse2Q6Ik0xNyAxNFYyIn1dXSx3N3Q9W1sicGF0aCIse2Q6Ik0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIn1dLFsicGF0aCIse2Q6Ik03IDEwdjEyIn1dXSxNN3Q9W1sicGF0aCIse2Q6Ik0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIn1dLFsicGF0aCIse2Q6Im05IDEyIDIgMiA0LTQifV1dLHo3dD1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoiTTkgMTJoNiJ9XV0sazd0PVtbInBhdGgiLHtkOiJNMiA5YTMgMyAwIDEgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMSAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiJ9XSxbInBhdGgiLHtkOiJNOSA5aC4wMSJ9XSxbInBhdGgiLHtkOiJtMTUgOS02IDYifV0sWyJwYXRoIix7ZDoiTTE1IDE1aC4wMSJ9XV0sUzd0PVtbInBhdGgiLHtkOiJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiJ9XSxbInBhdGgiLHtkOiJNOSAxMmg2In1dLFsicGF0aCIse2Q6Ik0xMiA5djYifV1dLEM3dD1bWyJwYXRoIix7ZDoiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloifV0sWyJwYXRoIix7ZDoibTkuNSAxNC41IDUtNSJ9XV0sXzd0PVtbInBhdGgiLHtkOiJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiJ9XSxbInBhdGgiLHtkOiJtOS41IDE0LjUgNS01In1dLFsicGF0aCIse2Q6Im05LjUgOS41IDUgNSJ9XV0sVDd0PVtbInBhdGgiLHtkOiJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiJ9XSxbInBhdGgiLHtkOiJNMTMgNXYyIn1dLFsicGF0aCIse2Q6Ik0xMyAxN3YyIn1dLFsicGF0aCIse2Q6Ik0xMyAxMXYyIn1dXSxMN3Q9W1sicGF0aCIse2Q6Ik0xMC41IDE3aDEuMjI3YTIgMiAwIDAgMCAxLjM0NS0uNTJMMTggMTIifV0sWyJwYXRoIix7ZDoibTEyIDEzLjUgMy43OTQuNTA2In1dLFsicGF0aCIse2Q6Im0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4In1dLFsicGF0aCIse2Q6Ik02IDEwVjgifV0sWyJwYXRoIix7ZDoiTTYgMTR2MSJ9XSxbInBhdGgiLHtkOiJNNiAxOXYyIn1dLFsicmVjdCIse3g6IjIiLHk6IjgiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxMyIscng6IjIifV1dLCQ3dD1bWyJwYXRoIix7ZDoiTTEwIDJoNCJ9XSxbInBhdGgiLHtkOiJNNC42IDExYTggOCAwIDAgMCAxLjcgOC43IDggOCAwIDAgMCA4LjcgMS43In1dLFsicGF0aCIse2Q6Ik03LjQgNy40YTggOCAwIDAgMSAxMC4zIDEgOCA4IDAgMCAxIC45IDEwLjIifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMTIgMTJ2LTIifV1dLEE3dD1bWyJwYXRoIix7ZDoibTMuMTczIDguMTggMTEtNWEyIDIgMCAwIDEgMi42NDcuOTkzTDE4LjU2IDgifV0sWyJwYXRoIix7ZDoiTTYgMTBWOCJ9XSxbInBhdGgiLHtkOiJNNiAxNHYxIn1dLFsicGF0aCIse2Q6Ik02IDE5djIifV0sWyJyZWN0Iix7eDoiMiIseToiOCIsd2lkdGg6IjIwIixoZWlnaHQ6IjEzIixyeDoiMiJ9XV0sRDd0PVtbInBhdGgiLHtkOiJNMTAgMmg0In1dLFsicGF0aCIse2Q6Ik0xMiAxNHYtNCJ9XSxbInBhdGgiLHtkOiJNNCAxM2E4IDggMCAwIDEgOC03IDggOCAwIDEgMS01LjMgMTRMNCAxNy42In1dLFsicGF0aCIse2Q6Ik05IDE3SDR2NSJ9XV0sRTd0PVtbImxpbmUiLHt4MToiMTAiLHgyOiIxNCIseTE6IjIiLHkyOiIyIn1dLFsibGluZSIse3gxOiIxMiIseDI6IjE1Iix5MToiMTQiLHkyOiIxMSJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjE0IixyOiI4In1dXSxQN3Q9W1siY2lyY2xlIix7Y3g6IjkiLGN5OiIxMiIscjoiMyJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHg6IjIiLHk6IjUiLHJ4OiI3In1dXSxJN3Q9W1siY2lyY2xlIix7Y3g6IjE1IixjeToiMTIiLHI6IjMifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiI1IixyeDoiNyJ9XV0sTjd0PVtbInBhdGgiLHtkOiJNNyAxMmgxM2ExIDEgMCAwIDEgMSAxIDUgNSAwIDAgMS01IDVoLS41OThhLjUuNSAwIDAgMC0uNDI0Ljc2NWwxLjU0NCAyLjQ3YS41LjUgMCAwIDEtLjQyNC43NjVINS40MDJhLjUuNSAwIDAgMS0uNDI0LS43NjVMNyAxOCJ9XSxbInBhdGgiLHtkOiJNOCAxOGE1IDUgMCAwIDEtNS01VjRhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2OCJ9XV0sRjd0PVtbInBhdGgiLHtkOiJNMTAgMTVoNCJ9XSxbInBhdGgiLHtkOiJtMTQuODE3IDEwLjk5NS0uOTcxLTEuNDUgMS4wMzQtMS4yMzJhMiAyIDAgMCAwLTIuMDI1LTMuMjM4bC0xLjgyLjM2NEw5LjkxIDMuODg1YTIgMiAwIDAgMC0zLjYyNS43NDhMNi4xNDEgNi41NWwtMS43MjUuNDI2YTIgMiAwIDAgMC0uMTkgMy43NTZsLjY1Ny4yNyJ9XSxbInBhdGgiLHtkOiJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIn1dLFsicGF0aCIse2Q6Ik00IDEyLjAwNkExIDEgMCAwIDEgNC45OTQgMTFIMTlhMSAxIDAgMCAxIDEgMXY3YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiJ9XV0sTzd0PVtbInBhdGgiLHtkOiJNMTYgMTJ2NCJ9XSxbInBhdGgiLHtkOiJNMTYgNmEyIDIgMCAwIDEgMS40MTQuNTg2bDQgNEEyIDIgMCAwIDEgMjIgMTJ2N2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtN2EyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LTRBMiAyIDAgMCAxIDggNnoifV0sWyJwYXRoIix7ZDoiTTE2IDZWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MiJ9XSxbInBhdGgiLHtkOiJNMiAxNGgyMCJ9XSxbInBhdGgiLHtkOiJNOCAxMnY0In1dXSxSN3Q9W1sicGF0aCIse2Q6Ik0yMSA0SDMifV0sWyJwYXRoIix7ZDoiTTE4IDhINiJ9XSxbInBhdGgiLHtkOiJNMTkgMTJIOSJ9XSxbInBhdGgiLHtkOiJNMTYgMTZoLTYifV0sWyJwYXRoIix7ZDoiTTExIDIwSDkifV1dLEI3dD1bWyJlbGxpcHNlIix7Y3g6IjEyIixjeToiMTEiLHJ4OiIzIixyeToiMiJ9XSxbImVsbGlwc2UiLHtjeDoiMTIiLGN5OiIxMi41IixyeDoiMTAiLHJ5OiI4LjUifV1dLEg3dD1bWyJwYXRoIix7ZDoiTTEyIDIwdi02In1dLFsicGF0aCIse2Q6Ik0xOS42NTYgMTRIMjIifV0sWyJwYXRoIix7ZDoiTTIgMTRoMTIifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMiJ9XSxbInBhdGgiLHtkOiJNOS42NTYgNEgyMGEyIDIgMCAwIDEgMiAydjEwLjM0NCJ9XV0scTd0PVtbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTYiLHg6IjIiLHk6IjQiLHJ4OiIyIn1dLFsicGF0aCIse2Q6Ik0yIDE0aDIwIn1dLFsicGF0aCIse2Q6Ik0xMiAyMHYtNiJ9XV0sVjd0PVtbInBhdGgiLHtkOiJNMTguMiAxMi4yNyAyMCA2SDRsMS44IDYuMjdhMSAxIDAgMCAwIC45NS43M2gxMC41YTEgMSAwIDAgMCAuOTYtLjczWiJ9XSxbInBhdGgiLHtkOiJNOCAxM3Y5In1dLFsicGF0aCIse2Q6Ik0xNiAyMnYtOSJ9XSxbInBhdGgiLHtkOiJtOSA2IDEgNyJ9XSxbInBhdGgiLHtkOiJtMTUgNi0xIDcifV0sWyJwYXRoIix7ZDoiTTEyIDZWMiJ9XSxbInBhdGgiLHtkOiJNMTMgMmgtMiJ9XV0sajd0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTIiLHg6IjMiLHk6IjgiLHJ4OiIxIn1dLFsicGF0aCIse2Q6Ik0xMCA4VjVjMC0uNi0uNC0xLTEtMUg2YTEgMSAwIDAgMC0xIDF2MyJ9XSxbInBhdGgiLHtkOiJNMTkgOFY1YzAtLjYtLjQtMS0xLTFoLTNhMSAxIDAgMCAwLTEgMXYzIn1dXSxVN3Q9W1sicGF0aCIse2Q6Im0xMCAxMSAxMSAuOWExIDEgMCAwIDEgLjggMS4xbC0uNjY1IDQuMTU4YTEgMSAwIDAgMS0uOTg4Ljg0MkgyMCJ9XSxbInBhdGgiLHtkOiJNMTYgMThoLTUifV0sWyJwYXRoIix7ZDoiTTE4IDVhMSAxIDAgMCAwLTEgMXY1LjU3MyJ9XSxbInBhdGgiLHtkOiJNMyA0aDguMTI5YTEgMSAwIDAgMSAuOTkuODYzTDEzIDExLjI0NiJ9XSxbInBhdGgiLHtkOiJNNCAxMVY0In1dLFsicGF0aCIse2Q6Ik03IDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNOCAxMC4xVjQifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxOCIscjoiMiJ9XSxbImNpcmNsZSIse2N4OiI3IixjeToiMTUiLHI6IjUifV1dLFc3dD1bWyJwYXRoIix7ZDoiTTE2LjA1IDEwLjk2NmE1IDIuNSAwIDAgMS04LjEgMCJ9XSxbInBhdGgiLHtkOiJtMTYuOTIzIDE0LjA0OSA0LjQ4IDIuMDRhMSAxIDAgMCAxIC4wMDEgMS44MzFsLTguNTc0IDMuOWEyIDIgMCAwIDEtMS42NiAwbC04LjU3NC0zLjkxYTEgMSAwIDAgMSAwLTEuODNsNC40ODQtMi4wNCJ9XSxbInBhdGgiLHtkOiJNMTYuOTQ5IDE0LjE0YTUgMi41IDAgMSAxLTkuOSAwTDEwLjA2MyAzLjVhMiAyIDAgMCAxIDMuODc0IDB6In1dLFsicGF0aCIse2Q6Ik05LjE5NCA2LjU3YTUgMi41IDAgMCAwIDUuNjEgMCJ9XV0sRzd0PVtbInBhdGgiLHtkOiJNMiAyMlYxMmExMCAxMCAwIDEgMSAyMCAwdjEwIn1dLFsicGF0aCIse2Q6Ik0xNSA2Ljh2MS40YTMgMi44IDAgMSAxLTYgMFY2LjgifV0sWyJwYXRoIix7ZDoiTTEwIDE1aC4wMSJ9XSxbInBhdGgiLHtkOiJNMTQgMTVoLjAxIn1dLFsicGF0aCIse2Q6Ik0xMCAxOWE0IDQgMCAwIDEtNC00di0zYTYgNiAwIDEgMSAxMiAwdjNhNCA0IDAgMCAxLTQgNFoifV0sWyJwYXRoIix7ZDoibTkgMTktMiAzIn1dLFsicGF0aCIse2Q6Im0xNSAxOSAyIDMifV1dLFk3dD1bWyJwYXRoIix7ZDoiTTggMy4xVjdhNCA0IDAgMCAwIDggMFYzLjEifV0sWyJwYXRoIix7ZDoibTkgMTUtMS0xIn1dLFsicGF0aCIse2Q6Im0xNSAxNSAxLTEifV0sWyJwYXRoIix7ZDoiTTkgMTljLTIuOCAwLTUtMi4yLTUtNXYtNGE4IDggMCAwIDEgMTYgMHY0YzAgMi44LTIuMiA1LTUgNVoifV0sWyJwYXRoIix7ZDoibTggMTktMiAzIn1dLFsicGF0aCIse2Q6Im0xNiAxOSAyIDMifV1dLFo3dD1bWyJwYXRoIix7ZDoiTTIgMTcgMTcgMiJ9XSxbInBhdGgiLHtkOiJtMiAxNCA4IDgifV0sWyJwYXRoIix7ZDoibTUgMTEgOCA4In1dLFsicGF0aCIse2Q6Im04IDggOCA4In1dLFsicGF0aCIse2Q6Im0xMSA1IDggOCJ9XSxbInBhdGgiLHtkOiJtMTQgMiA4IDgifV0sWyJwYXRoIix7ZDoiTTcgMjIgMjIgNyJ9XV0sbHg9W1sicmVjdCIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNiIseDoiNCIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTQgMTFoMTYifV0sWyJwYXRoIix7ZDoiTTEyIDN2OCJ9XSxbInBhdGgiLHtkOiJtOCAxOS0yIDMifV0sWyJwYXRoIix7ZDoibTE4IDIyLTItMyJ9XSxbInBhdGgiLHtkOiJNOCAxNWguMDEifV0sWyJwYXRoIix7ZDoiTTE2IDE1aC4wMSJ9XV0sWDd0PVtbInBhdGgiLHtkOiJNMTIgMTZ2NiJ9XSxbInBhdGgiLHtkOiJNMTQgMjBoLTQifV0sWyJwYXRoIix7ZDoiTTE4IDJoNHY0In1dLFsicGF0aCIse2Q6Im0yIDIgNy4xNyA3LjE3In1dLFsicGF0aCIse2Q6Ik0yIDUuMzU1VjJoMy4zNTcifV0sWyJwYXRoIix7ZDoibTIyIDItNy4xNyA3LjE3In1dLFsicGF0aCIse2Q6Ik04IDUgNSA4In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjQifV1dLEs3dD1bWyJwYXRoIix7ZDoiTTEwIDExdjYifV0sWyJwYXRoIix7ZDoiTTE0IDExdjYifV0sWyJwYXRoIix7ZDoiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNiJ9XSxbInBhdGgiLHtkOiJNMyA2aDE4In1dLFsicGF0aCIse2Q6Ik04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIn1dXSxRN3Q9W1sicGF0aCIse2Q6Ik0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjYifV0sWyJwYXRoIix7ZDoiTTMgNmgxOCJ9XSxbInBhdGgiLHtkOiJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiJ9XV0sSjd0PVtbInBhdGgiLHtkOiJNOCAxOWE0IDQgMCAwIDEtMi4yNC03LjMyQTMuNSAzLjUgMCAwIDEgOSA2LjAzVjZhMyAzIDAgMSAxIDYgMHYuMDRhMy41IDMuNSAwIDAgMSAzLjI0IDUuNjVBNCA0IDAgMCAxIDE2IDE5WiJ9XSxbInBhdGgiLHtkOiJNMTIgMTl2MyJ9XV0sY3g9W1sicGF0aCIse2Q6Ik0xMyA4YzAtMi43Ni0yLjQ2LTUtNS41LTVTMiA1LjI0IDIgOGgybDEtMSAxIDFoNCJ9XSxbInBhdGgiLHtkOiJNMTMgNy4xNEE1LjgyIDUuODIgMCAwIDEgMTYuNSA2YzMuMDQgMCA1LjUgMi4yNCA1LjUgNWgtM2wtMS0xLTEgMWgtMyJ9XSxbInBhdGgiLHtkOiJNNS44OSA5LjcxYy0yLjE1IDIuMTUtMi4zIDUuNDctLjM1IDcuNDNsNC4yNC00LjI1LjctLjcuNzEtLjcxIDIuMTItMi4xMmMtMS45NS0xLjk2LTUuMjctMS44LTcuNDIuMzUifV0sWyJwYXRoIix7ZDoiTTExIDE1LjVjLjUgMi41LS4xNyA0LjUtMSA2LjVoNGMyLTUuNS0uNS0xMi0xLTE0In1dXSxlcHQ9W1sicGF0aCIse2Q6Im0xNyAxNCAzIDMuM2ExIDEgMCAwIDEtLjcgMS43SDQuN2ExIDEgMCAwIDEtLjctMS43TDcgMTRoLS4zYTEgMSAwIDAgMS0uNy0xLjdMOSA5aC0uMkExIDEgMCAwIDEgOCA3LjNMMTIgM2w0IDQuM2ExIDEgMCAwIDEtLjggMS43SDE1bDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdIMTdaIn1dLFsicGF0aCIse2Q6Ik0xMiAyMnYtMyJ9XV0sdHB0PVtbInBhdGgiLHtkOiJNMTAgMTB2LjJBMyAzIDAgMCAxIDguOSAxNkg1YTMgMyAwIDAgMS0xLTUuOFYxMGEzIDMgMCAwIDEgNiAwWiJ9XSxbInBhdGgiLHtkOiJNNyAxNnY2In1dLFsicGF0aCIse2Q6Ik0xMyAxOXYzIn1dLFsicGF0aCIse2Q6Ik0xMiAxOWg4LjNhMSAxIDAgMCAwIC43LTEuN0wxOCAxNGguM2ExIDEgMCAwIDAgLjctMS43TDE2IDloLjJhMSAxIDAgMCAwIC44LTEuN0wxMyAzbC0xLjQgMS41In1dXSxhcHQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLHJ5OiIyIn1dLFsicmVjdCIse3dpZHRoOiIzIixoZWlnaHQ6IjkiLHg6IjciLHk6IjcifV0sWyJyZWN0Iix7d2lkdGg6IjMiLGhlaWdodDoiNSIseDoiMTQiLHk6IjcifV1dLGlwdD1bWyJwYXRoIix7ZDoiTTE2IDE3aDZ2LTYifV0sWyJwYXRoIix7ZDoibTIyIDE3LTguNS04LjUtNSA1TDIgNyJ9XV0scnB0PVtbInBhdGgiLHtkOiJNMTQuODI4IDE0LjgyOCAyMSAyMSJ9XSxbInBhdGgiLHtkOiJNMjEgMTZ2NWgtNSJ9XSxbInBhdGgiLHtkOiJtMjEgMy05IDktNC00LTYgNiJ9XSxbInBhdGgiLHtkOiJNMjEgOFYzaC01In1dXSxzcHQ9W1sicGF0aCIse2Q6Ik0xNiA3aDZ2NiJ9XSxbInBhdGgiLHtkOiJtMjIgNy04LjUgOC41LTUtNUwyIDE3In1dXSxkeD1bWyJwYXRoIix7ZDoibTIxLjczIDE4LTgtMTRhMiAyIDAgMCAwLTMuNDggMGwtOCAxNEEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS43My0zIn1dLFsicGF0aCIse2Q6Ik0xMiA5djQifV0sWyJwYXRoIix7ZDoiTTEyIDE3aC4wMSJ9XV0sbnB0PVtbInBhdGgiLHtkOiJNMTAuMTcgNC4xOTNhMiAyIDAgMCAxIDMuNjY2LjAxMyJ9XSxbInBhdGgiLHtkOiJNMTQgMjFoMiJ9XSxbInBhdGgiLHtkOiJtMTUuODc0IDcuNzQzIDEgMS43MzIifV0sWyJwYXRoIix7ZDoibTE4Ljg0OSAxMi45NTIgMSAxLjczMiJ9XSxbInBhdGgiLHtkOiJNMjEuODI0IDE4LjE4YTIgMiAwIDAgMS0xLjgzNSAyLjgyNCJ9XSxbInBhdGgiLHtkOiJNNC4wMjQgMjFhMiAyIDAgMCAxLTEuODM5LTIuODM5In1dLFsicGF0aCIse2Q6Im01LjEzNiAxMi45NTItMSAxLjczMiJ9XSxbInBhdGgiLHtkOiJNOCAyMWgyIn1dLFsicGF0aCIse2Q6Im04LjEwMiA3Ljc0My0xIDEuNzMyIn1dXSxvcHQ9W1sicGF0aCIse2Q6Ik0yMiAxOGEyIDIgMCAwIDEtMiAySDNjLTEuMSAwLTEuMy0uNi0uNC0xLjNMMjAuNCA0LjNjLjktLjcgMS42LS40IDEuNi43WiJ9XV0sbHB0PVtbInBhdGgiLHtkOiJNMTMuNzMgNGEyIDIgMCAwIDAtMy40NiAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTNaIn1dXSxjcHQ9W1sicGF0aCIse2Q6Ik0xNCAxOVY3YTIgMiAwIDAgMC0yLTJIOSJ9XSxbInBhdGgiLHtkOiJNMTUgMTlIOSJ9XSxbInBhdGgiLHtkOiJNMTkgMTloMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyTDE4LjMgOS4zOGExIDEgMCAwIDAtLjc4LS4zOEgxNCJ9XSxbInBhdGgiLHtkOiJNMiAxM3Y1YTEgMSAwIDAgMCAxIDFoMiJ9XSxbInBhdGgiLHtkOiJNNCAzIDIuMTUgNS4xNWEuNDk1LjQ5NSAwIDAgMCAuMzUuODZoMi4xNWEuNDcuNDcgMCAwIDEgLjM1Ljg2TDMgOS4wMiJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjE5IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjciLGN5OiIxOSIscjoiMiJ9XV0sZHB0PVtbInBhdGgiLHtkOiJNMTAgMTQuNjZ2MS42MjZhMiAyIDAgMCAxLS45NzYgMS42OTZBNSA1IDAgMCAwIDcgMjEuOTc4In1dLFsicGF0aCIse2Q6Ik0xNCAxNC42NnYxLjYyNmEyIDIgMCAwIDAgLjk3NiAxLjY5NkE1IDUgMCAwIDEgMTcgMjEuOTc4In1dLFsicGF0aCIse2Q6Ik0xOCA5aDEuNWExIDEgMCAwIDAgMC01SDE4In1dLFsicGF0aCIse2Q6Ik00IDIyaDE2In1dLFsicGF0aCIse2Q6Ik02IDlhNiA2IDAgMCAwIDEyIDBWM2ExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXoifV0sWyJwYXRoIix7ZDoiTTYgOUg0LjVhMSAxIDAgMCAxIDAtNUg2In1dXSxwcHQ9W1sicGF0aCIse2Q6Ik0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiJ9XSxbInBhdGgiLHtkOiJNMTUgMThIOSJ9XSxbInBhdGgiLHtkOiJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyNGwtMy40OC00LjM1QTEgMSAwIDAgMCAxNy41MiA4SDE0In1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTgiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIyIn1dXSxocHQ9W1sicGF0aCIse2Q6Ik0xNSA0IDUgOSJ9XSxbInBhdGgiLHtkOiJtMTUgOC41LTEwIDUifV0sWyJwYXRoIix7ZDoiTTE4IDEyYTkgOSAwIDAgMS05IDlWMyJ9XV0sdXB0PVtbInBhdGgiLHtkOiJNMTAgMTIuMDFoLjAxIn1dLFsicGF0aCIse2Q6Ik0xOCA4djRhOCA4IDAgMCAxLTEuMDcgNCJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjEyIixyOiI0In1dLFsicmVjdCIse3g6IjIiLHk6IjQiLHdpZHRoOiIyMCIsaGVpZ2h0OiIxNiIscng6IjIifV1dLGZwdD1bWyJwYXRoIix7ZDoibTEyIDEwIDIgNHYzYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTggOCAwIDEgMC0xNiAwdjNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNsMi00aDRaIn1dLFsicGF0aCIse2Q6Ik00LjgyIDcuOSA4IDEwIn1dLFsicGF0aCIse2Q6Ik0xNS4xOCA3LjkgMTIgMTAifV0sWyJwYXRoIix7ZDoiTTE2LjkzIDEwSDIwYTIgMiAwIDAgMSAwIDRIMiJ9XV0sbXB0PVtbInBhdGgiLHtkOiJNMTUuMDMzIDkuNDRhLjY0Ny42NDcgMCAwIDEgMCAxLjEybC00LjA2NSAyLjM1MmEuNjQ1LjY0NSAwIDAgMS0uOTY4LS41NlY3LjY0OGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoifV0sWyJwYXRoIix7ZDoiTTcgMjFoMTAifV0sWyJyZWN0Iix7d2lkdGg6IjIwIixoZWlnaHQ6IjE0Iix4OiIyIix5OiIzIixyeDoiMiJ9XV0scHg9W1sicGF0aCIse2Q6Ik03IDIxaDEwIn1dLFsicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIifV1dLGdwdD1bWyJwYXRoIix7ZDoibTE3IDItNSA1LTUtNSJ9XSxbInJlY3QiLHt3aWR0aDoiMjAiLGhlaWdodDoiMTUiLHg6IjIiLHk6IjciLHJ4OiIyIn1dXSxicHQ9W1sicGF0aCIse2Q6Ik0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3In1dXSx2cHQ9W1sicGF0aCIse2Q6Ik0yMiA0cy0uNyAyLjEtMiAzLjRjMS42IDEwLTkuNCAxNy4zLTE4IDExLjYgMi4yLjEgNC40LS42IDYtMkMzIDE1LjUuNSA5LjYgMyA1YzIuMiAyLjYgNS42IDQuMSA5IDQtLjktNC4yIDQtNi42IDctMy44IDEuMSAwIDMtMS4yIDMtMS4yeiJ9XV0seXB0PVtbInBhdGgiLHtkOiJNMTQgMTYuNWEuNS41IDAgMCAwIC41LjVoLjVhMiAyIDAgMCAxIDAgNEg5YTIgMiAwIDAgMSAwLTRoLjVhLjUuNSAwIDAgMCAuNS0uNXYtOWEuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDAtLjUuNVY4YTIgMiAwIDAgMS00IDBWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtNCAwdi0uNWEuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDAtLjUuNVoifV1dLHhwdD1bWyJwYXRoIix7ZDoiTTEyIDR2MTYifV0sWyJwYXRoIix7ZDoiTTQgN1Y1YTEgMSAwIDAgMSAxLTFoMTRhMSAxIDAgMCAxIDEgMXYyIn1dLFsicGF0aCIse2Q6Ik05IDIwaDYifV1dLHdwdD1bWyJwYXRoIix7ZDoiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0xOC42NTYgMTNoMi4zMzZhMSAxIDAgMCAwIC45Ny0xLjI3NCAxMC4yODQgMTAuMjg0IDAgMCAwLTEyLjA3LTcuNTEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJNNS45NjEgNS45NTdhMTAuMjggMTAuMjggMCAwIDAtMy45MjIgNS43NjlBMSAxIDAgMCAwIDMgMTNoMTAifV1dLE1wdD1bWyJwYXRoIix7ZDoiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIn1dLFsicGF0aCIse2Q6Ik0yMC45OTIgMTNhMSAxIDAgMCAwIC45Ny0xLjI3NCAxMC4yODQgMTAuMjg0IDAgMCAwLTE5LjkyMyAwQTEgMSAwIDAgMCAzIDEzeiJ9XV0senB0PVtbInBhdGgiLHtkOiJNNiA0djZhNiA2IDAgMCAwIDEyIDBWNCJ9XSxbImxpbmUiLHt4MToiNCIseDI6IjIwIix5MToiMjAiLHkyOiIyMCJ9XV0sa3B0PVtbInBhdGgiLHtkOiJNOSAxNCA0IDlsNS01In1dLFsicGF0aCIse2Q6Ik00IDloMTAuNWE1LjUgNS41IDAgMCAxIDUuNSA1LjVhNS41IDUuNSAwIDAgMS01LjUgNS41SDExIn1dXSxTcHQ9W1sicGF0aCIse2Q6Ik0yMSAxN2E5IDkgMCAwIDAtMTUtNi43TDMgMTMifV0sWyJwYXRoIix7ZDoiTTMgN3Y2aDYifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxNyIscjoiMSJ9XV0sQ3B0PVtbInBhdGgiLHtkOiJNMyA3djZoNiJ9XSxbInBhdGgiLHtkOiJNMjEgMTdhOSA5IDAgMCAwLTktOSA5IDkgMCAwIDAtNiAyLjNMMyAxMyJ9XV0sX3B0PVtbInBhdGgiLHtkOiJNMTYgMTJoNiJ9XSxbInBhdGgiLHtkOiJNOCAxMkgyIn1dLFsicGF0aCIse2Q6Ik0xMiAydjIifV0sWyJwYXRoIix7ZDoiTTEyIDh2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMTR2MiJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiJ9XSxbInBhdGgiLHtkOiJtMTkgMTUgMy0zLTMtMyJ9XSxbInBhdGgiLHtkOiJtNSA5LTMgMyAzIDMifV1dLFRwdD1bWyJwYXRoIix7ZDoiTTEyIDIydi02In1dLFsicGF0aCIse2Q6Ik0xMiA4VjIifV0sWyJwYXRoIix7ZDoiTTQgMTJIMiJ9XSxbInBhdGgiLHtkOiJNMTAgMTJIOCJ9XSxbInBhdGgiLHtkOiJNMTYgMTJoLTIifV0sWyJwYXRoIix7ZDoiTTIyIDEyaC0yIn1dLFsicGF0aCIse2Q6Im0xNSAxOS0zIDMtMy0zIn1dLFsicGF0aCIse2Q6Im0xNSA1LTMtMy0zIDMifV1dLExwdD1bWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNiIseDoiNSIseToiNCIscng6IjEifV0sWyJyZWN0Iix7d2lkdGg6IjgiLGhlaWdodDoiNiIseDoiMTEiLHk6IjE0IixyeDoiMSJ9XV0saHg9W1sicGF0aCIse2Q6Ik0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMifV0sWyJwYXRoIix7ZDoiTTE4IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNMTggMTZoLjAxIn1dLFsicGF0aCIse2Q6Ik0yMiA3YTEgMSAwIDAgMC0xLTFoLTJhMiAyIDAgMCAxLTEuMTQzLS4zNTlMMTMuMTQzIDIuMzZhMiAyIDAgMCAwLTIuMjg2LS4wMDFMNi4xNDMgNS42NEEyIDIgMCAwIDEgNSA2SDNhMSAxIDAgMCAwLTEgMXYxMmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ6In1dLFsicGF0aCIse2Q6Ik02IDEyaC4wMSJ9XSxbInBhdGgiLHtkOiJNNiAxNmguMDEifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMiJ9XV0sJHB0PVtbInBhdGgiLHtkOiJtMTguODQgMTIuMjUgMS43Mi0xLjcxaC0uMDJhNS4wMDQgNS4wMDQgMCAwIDAtLjEyLTcuMDcgNS4wMDYgNS4wMDYgMCAwIDAtNi45NSAwbC0xLjcyIDEuNzEifV0sWyJwYXRoIix7ZDoibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEifV0sWyJsaW5lIix7eDE6IjgiLHgyOiI4Iix5MToiMiIseTI6IjUifV0sWyJsaW5lIix7eDE6IjIiLHgyOiI1Iix5MToiOCIseTI6IjgifV0sWyJsaW5lIix7eDE6IjE2Iix4MjoiMTYiLHkxOiIxOSIseTI6IjIyIn1dLFsibGluZSIse3gxOiIxOSIseDI6IjIyIix5MToiMTYiLHkyOiIxNiJ9XV0sQXB0PVtbInBhdGgiLHtkOiJNMTUgN2gyYTUgNSAwIDAgMSAwIDEwaC0ybS02IDBIN0E1IDUgMCAwIDEgNyA3aDIifV1dLERwdD1bWyJwYXRoIix7ZDoibTE5IDUgMy0zIn1dLFsicGF0aCIse2Q6Im0yIDIyIDMtMyJ9XSxbInBhdGgiLHtkOiJNNi4zIDIwLjNhMi40IDIuNCAwIDAgMCAzLjQgMEwxMiAxOGwtNi02LTIuMyAyLjNhMi40IDIuNCAwIDAgMCAwIDMuNFoifV0sWyJwYXRoIix7ZDoiTTcuNSAxMy41IDEwIDExIn1dLFsicGF0aCIse2Q6Ik0xMC41IDE2LjUgMTMgMTQifV0sWyJwYXRoIix7ZDoibTEyIDYgNiA2IDIuMy0yLjNhMi40IDIuNCAwIDAgMCAwLTMuNGwtMi42LTIuNmEyLjQgMi40IDAgMCAwLTMuNCAwWiJ9XV0sRXB0PVtbInBhdGgiLHtkOiJNMTIgM3YxMiJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00In1dXSxQcHQ9W1siY2lyY2xlIix7Y3g6IjEwIixjeToiNyIscjoiMSJ9XSxbImNpcmNsZSIse2N4OiI0IixjeToiMjAiLHI6IjEifV0sWyJwYXRoIix7ZDoiTTQuNyAxOS4zIDE5IDUifV0sWyJwYXRoIix7ZDoibTIxIDMtMyAxIDIgMloifV0sWyJwYXRoIix7ZDoiTTkuMjYgNy42OCA1IDEybDIgNSJ9XSxbInBhdGgiLHtkOiJtMTAgMTQgNSAyIDMuNS0zLjUifV0sWyJwYXRoIix7ZDoibTE4IDEyIDEtMSAxIDEtMSAxWiJ9XV0sSXB0PVtbInBhdGgiLHtkOiJtMTYgMTEgMiAyIDQtNCJ9XSxbInBhdGgiLHtkOiJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiNyIscjoiNCJ9XV0sTnB0PVtbInBhdGgiLHtkOiJNMTAgMTVINmE0IDQgMCAwIDAtNCA0djIifV0sWyJwYXRoIix7ZDoibTE0LjMwNSAxNi41My45MjMtLjM4MiJ9XSxbInBhdGgiLHtkOiJtMTUuMjI4IDEzLjg1Mi0uOTIzLS4zODMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAxMi4yMjgtLjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xNi44NTIgMTcuNzcyLS4zODMuOTI0In1dLFsicGF0aCIse2Q6Im0xOS4xNDggMTIuMjI4LjM4My0uOTIzIn1dLFsicGF0aCIse2Q6Im0xOS41MyAxOC42OTYtLjM4Mi0uOTI0In1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTMuODUyLjkyNC0uMzgzIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTYuMTQ4LjkyNC4zODMifV0sWyJjaXJjbGUiLHtjeDoiMTgiLGN5OiIxNSIscjoiMyJ9XSxbImNpcmNsZSIse2N4OiI5IixjeToiNyIscjoiNCJ9XV0sRnB0PVtbInBhdGgiLHtkOiJNMjAgMTF2NiJ9XSxbInBhdGgiLHtkOiJNMjAgMTNoMiJ9XSxbInBhdGgiLHtkOiJNMyAyMXYtMmE0IDQgMCAwIDEgNC00aDZhNCA0IDAgMCAxIDIuMDcyLjU3OCJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjciLHI6IjQifV0sWyJjaXJjbGUiLHtjeDoiMjAiLGN5OiIxOSIscjoiMiJ9XV0sT3B0PVtbInBhdGgiLHtkOiJNMTkgMTZ2LTJhMiAyIDAgMCAwLTQgMHYyIn1dLFsicGF0aCIse2Q6Ik05LjUgMTVIN2E0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI3IixyOiI0In1dLFsicmVjdCIse3g6IjEzIix5OiIxNiIsd2lkdGg6IjgiLGhlaWdodDoiNSIscng6Ii44OTkifV1dLFJwdD1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiOSIsY3k6IjciLHI6IjQifV0sWyJsaW5lIix7eDE6IjIyIix4MjoiMTYiLHkxOiIxMSIseTI6IjExIn1dXSxCcHQ9W1sicGF0aCIse2Q6Ik0xMS41IDE1SDdhNCA0IDAgMCAwLTQgNHYyIn1dLFsicGF0aCIse2Q6Ik0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI3IixyOiI0In1dXSxIcHQ9W1sicGF0aCIse2Q6Ik0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiI0In1dLFsibGluZSIse3gxOiIxOSIseDI6IjE5Iix5MToiOCIseTI6IjE0In1dLFsibGluZSIse3gxOiIyMiIseDI6IjE2Iix5MToiMTEiLHkyOiIxMSJ9XV0sdXg9W1sicGF0aCIse2Q6Ik0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoibTE2IDE5IDIgMiA0LTQifV1dLGZ4PVtbInBhdGgiLHtkOiJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIn1dLFsicGF0aCIse2Q6Im0xNS4yMjggMTYuODUyLS45MjMtLjM4MyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE2Ljg1MiAyMC43NzItLjM4My45MjQifV0sWyJwYXRoIix7ZDoibTE5LjE0OCAxNS4yMjguMzgzLS45MjMifV0sWyJwYXRoIix7ZDoibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQifV0sWyJwYXRoIix7ZDoiTTIgMjFhOCA4IDAgMCAxIDEwLjQzNC03LjYyIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTYuODUyLjkyNC0uMzgzIn1dLFsicGF0aCIse2Q6Im0yMC43NzIgMTkuMTQ4LjkyNC4zODMifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV1dLHFwdD1bWyJwYXRoIix7ZDoiTTE5IDExdjYifV0sWyJwYXRoIix7ZDoiTTE5IDEzaDIifV0sWyJwYXRoIix7ZDoiTTIgMjFhOCA4IDAgMCAxIDEyLjg2OC02LjM0OSJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJjaXJjbGUiLHtjeDoiMTkiLGN5OiIxOSIscjoiMiJ9XV0sbXg9W1sicGF0aCIse2Q6Ik0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTIyIDE5aC02In1dXSxWcHQ9W1sicGF0aCIse2Q6Ik0yIDIxYTggOCAwIDAgMSAxMC44MjEtNy40ODcifV0sWyJwYXRoIix7ZDoiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV1dLGd4PVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Ik0xOSAxNnY2In1dLFsicGF0aCIse2Q6Ik0yMiAxOWgtNiJ9XV0sanB0PVtbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTIgMjFhOCA4IDAgMCAxIDEwLjQzNC03LjYyIn1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTgiLHI6IjMifV0sWyJwYXRoIix7ZDoibTIyIDIyLTEuOS0xLjkifV1dLGJ4PVtbInBhdGgiLHtkOiJNMiAyMWE4IDggMCAwIDEgMTEuODczLTcifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI4IixyOiI1In1dLFsicGF0aCIse2Q6Im0xNyAxNyA1IDUifV0sWyJwYXRoIix7ZDoibTIyIDE3LTUgNSJ9XV0sdng9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiOCIscjoiNSJ9XSxbInBhdGgiLHtkOiJNMjAgMjFhOCA4IDAgMCAwLTE2IDAifV1dLFVwdD1bWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI3IixyOiI0In1dLFsicGF0aCIse2Q6Ik0xMC4zIDE1SDdhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjE3IixjeToiMTciLHI6IjMifV0sWyJwYXRoIix7ZDoibTIxIDIxLTEuOS0xLjkifV1dLFdwdD1bWyJwYXRoIix7ZDoiTTE2LjA1MSAxMi42MTZhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoifV0sWyJwYXRoIix7ZDoiTTggMTVIN2E0IDQgMCAwIDAtNCA0djIifV0sWyJjaXJjbGUiLHtjeDoiMTAiLGN5OiI3IixyOiI0In1dXSxHcHQ9W1sicGF0aCIse2Q6Ik0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiI0In1dLFsibGluZSIse3gxOiIxNyIseDI6IjIyIix5MToiOCIseTI6IjEzIn1dLFsibGluZSIse3gxOiIyMiIseDI6IjE3Iix5MToiOCIseTI6IjEzIn1dXSxZcHQ9W1sicGF0aCIse2Q6Ik0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiNyIscjoiNCJ9XV0seXg9W1sicGF0aCIse2Q6Ik0xOCAyMWE4IDggMCAwIDAtMTYgMCJ9XSxbImNpcmNsZSIse2N4OiIxMCIsY3k6IjgiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTIyIDIwYzAtMy4zNy0yLTYuNS00LThhNSA1IDAgMCAwLS40NS04LjMifV1dLFpwdD1bWyJwYXRoIix7ZDoiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIifV0sWyJwYXRoIix7ZDoiTTE2IDMuMTI4YTQgNCAwIDAgMSAwIDcuNzQ0In1dLFsicGF0aCIse2Q6Ik0yMiAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3In1dLFsiY2lyY2xlIix7Y3g6IjkiLGN5OiI3IixyOiI0In1dXSx4eD1bWyJwYXRoIix7ZDoibTE2IDItMi4zIDIuM2EzIDMgMCAwIDAgMCA0LjJsMS44IDEuOGEzIDMgMCAwIDAgNC4yIDBMMjIgOCJ9XSxbInBhdGgiLHtkOiJNMTUgMTUgMy4zIDMuM2E0LjIgNC4yIDAgMCAwIDAgNmw3LjMgNy4zYy43LjcgMiAuNyAyLjggMEwxNSAxNVptMCAwIDcgNyJ9XSxbInBhdGgiLHtkOiJtMi4xIDIxLjggNi40LTYuMyJ9XSxbInBhdGgiLHtkOiJtMTkgNS03IDcifV1dLHd4PVtbInBhdGgiLHtkOiJNMyAydjdjMCAxLjEuOSAyIDIgMmg0YTIgMiAwIDAgMCAyLTJWMiJ9XSxbInBhdGgiLHtkOiJNNyAydjIwIn1dLFsicGF0aCIse2Q6Ik0yMSAxNVYyYTUgNSAwIDAgMC01IDV2NmMwIDEuMS45IDIgMiAyaDNabTAgMHY3In1dXSxYcHQ9W1sicGF0aCIse2Q6Ik0xMiAydjIwIn1dLFsicGF0aCIse2Q6Ik0yIDVoMjAifV0sWyJwYXRoIix7ZDoiTTMgM3YyIn1dLFsicGF0aCIse2Q6Ik03IDN2MiJ9XSxbInBhdGgiLHtkOiJNMTcgM3YyIn1dLFsicGF0aCIse2Q6Ik0yMSAzdjIifV0sWyJwYXRoIix7ZDoibTE5IDUtNyA3LTctNyJ9XV0sS3B0PVtbInBhdGgiLHtkOiJNMTMgNnY1YTEgMSAwIDAgMCAxIDFoNi4xMDJhMSAxIDAgMCAxIC43MTIuMjk4bC44OTguOTFhMSAxIDAgMCAxIC4yODguNzAyVjE3YTEgMSAwIDAgMS0xIDFoLTMifV0sWyJwYXRoIix7ZDoiTTUgMThIM2ExIDEgMCAwIDEtMS0xVjhhMiAyIDAgMCAxIDItMmgxMmMxLjEgMCAyLjEuOCAyLjQgMS44bDEuMTc2IDQuMiJ9XSxbInBhdGgiLHtkOiJNOSAxOGg1In1dLFsiY2lyY2xlIix7Y3g6IjE2IixjeToiMTgiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNyIsY3k6IjE4IixyOiIyIn1dXSxRcHQ9W1sicGF0aCIse2Q6Ik04IDIxcy00LTMtNC05IDQtOSA0LTkifV0sWyJwYXRoIix7ZDoiTTE2IDNzNCAzIDQgOS00IDktNCA5In1dLFsibGluZSIse3gxOiIxNSIseDI6IjkiLHkxOiI5Iix5MjoiMTUifV0sWyJsaW5lIix7eDE6IjkiLHgyOiIxNSIseTE6IjkiLHkyOiIxNSJ9XV0sSnB0PVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjcuNSIsY3k6IjcuNSIscjoiLjUiLGZpbGw6ImN1cnJlbnRDb2xvciJ9XSxbInBhdGgiLHtkOiJtNy45IDcuOSAyLjcgMi43In1dLFsiY2lyY2xlIix7Y3g6IjE2LjUiLGN5OiI3LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJwYXRoIix7ZDoibTEzLjQgMTAuNiAyLjctMi43In1dLFsiY2lyY2xlIix7Y3g6IjcuNSIsY3k6IjE2LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJwYXRoIix7ZDoibTcuOSAxNi4xIDIuNy0yLjcifV0sWyJjaXJjbGUiLHtjeDoiMTYuNSIsY3k6IjE2LjUiLHI6Ii41IixmaWxsOiJjdXJyZW50Q29sb3IifV0sWyJwYXRoIix7ZDoibTEzLjQgMTMuNCAyLjcgMi43In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjIifV1dLGVodD1bWyJwYXRoIix7ZDoiTTE5LjUgN2EyNCAyNCAwIDAgMSAwIDEwIn1dLFsicGF0aCIse2Q6Ik00LjUgN2EyNCAyNCAwIDAgMCAwIDEwIn1dLFsicGF0aCIse2Q6Ik03IDE5LjVhMjQgMjQgMCAwIDAgMTAgMCJ9XSxbInBhdGgiLHtkOiJNNyA0LjVhMjQgMjQgMCAwIDEgMTAgMCJ9XSxbInJlY3QiLHt4OiIxNyIseToiMTciLHdpZHRoOiI1IixoZWlnaHQ6IjUiLHJ4OiIxIn1dLFsicmVjdCIse3g6IjE3Iix5OiIyIix3aWR0aDoiNSIsaGVpZ2h0OiI1IixyeDoiMSJ9XSxbInJlY3QiLHt4OiIyIix5OiIxNyIsd2lkdGg6IjUiLGhlaWdodDoiNSIscng6IjEifV0sWyJyZWN0Iix7eDoiMiIseToiMiIsd2lkdGg6IjUiLGhlaWdodDoiNSIscng6IjEifV1dLHRodD1bWyJwYXRoIix7ZDoiTTE2IDhxNiAwIDYtNi02IDAtNiA2In1dLFsicGF0aCIse2Q6Ik0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyJ9XSxbInBhdGgiLHtkOiJNMiAyYTI2LjYgMjYuNiAwIDAgMSAxMCAyMGMuOS02LjgyIDEuNS05LjUgNC0xNCJ9XV0sYWh0PVtbInBhdGgiLHtkOiJNMTggMTFjLTEuNSAwLTIuNS41LTMgMiJ9XSxbInBhdGgiLHtkOiJNNCA2YTIgMiAwIDAgMC0yIDJ2NGE1IDUgMCAwIDAgNSA1IDggOCAwIDAgMSA1IDIgOCA4IDAgMCAxIDUtMiA1IDUgMCAwIDAgNS01VjhhMiAyIDAgMCAwLTItMmgtM2E4IDggMCAwIDAtNSAyIDggOCAwIDAgMC01LTJ6In1dLFsicGF0aCIse2Q6Ik02IDExYzEuNSAwIDIuNS41IDMgMiJ9XV0saWh0PVtbInBhdGgiLHtkOiJNMTAgMjBoNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTZ2NiJ9XSxbInBhdGgiLHtkOiJNMTcgMmg0djQifV0sWyJwYXRoIix7ZDoibTIxIDItNS40NiA1LjQ2In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTEiLHI6IjUifV1dLHJodD1bWyJwYXRoIix7ZDoiTTEyIDE1djcifV0sWyJwYXRoIix7ZDoiTTkgMTloNiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjkiLHI6IjYifV1dLHNodD1bWyJwYXRoIix7ZDoibTIgOCAyIDItMiAyIDIgMi0yIDIifV0sWyJwYXRoIix7ZDoibTIyIDgtMiAyIDIgMi0yIDIgMiAyIn1dLFsicGF0aCIse2Q6Ik04IDh2MTBjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIifV0sWyJwYXRoIix7ZDoiTTE2IDEwLjM0VjZjMC0uNTUtLjQ1LTEtMS0xaC00LjM0In1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dLG5odD1bWyJwYXRoIix7ZDoibTIgOCAyIDItMiAyIDIgMi0yIDIifV0sWyJwYXRoIix7ZDoibTIyIDgtMiAyIDIgMi0yIDIgMiAyIn1dLFsicmVjdCIse3dpZHRoOiI4IixoZWlnaHQ6IjE0Iix4OiI4Iix5OiI1IixyeDoiMSJ9XV0sb2h0PVtbInBhdGgiLHtkOiJNMTAuNjYgNkgxNGEyIDIgMCAwIDEgMiAydjIuNWw1LjI0OC0zLjA2MkEuNS41IDAgMCAxIDIyIDcuODd2OC4xOTYifV0sWyJwYXRoIix7ZDoiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dLGxodD1bWyJwYXRoIix7ZDoibTE2IDEzIDUuMjIzIDMuNDgyYS41LjUgMCAwIDAgLjc3Ny0uNDE2VjcuODdhLjUuNSAwIDAgMC0uNzUyLS40MzJMMTYgMTAuNSJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIn1dXSxjaHQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNiIseDoiMiIseToiNCIscng6IjIifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiMTQiLHI6IjIifV0sWyJwYXRoIix7ZDoiTTggMTJoOCJ9XSxbImNpcmNsZSIse2N4OiIxNiIsY3k6IjE0IixyOiIyIn1dXSxkaHQ9W1sicGF0aCIse2Q6Ik0yMSAxN3YyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0yIn1dLFsicGF0aCIse2Q6Ik0yMSA3VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MiJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxIn1dLFsicGF0aCIse2Q6Ik0xOC45NDQgMTIuMzNhMSAxIDAgMCAwIDAtLjY2IDcuNSA3LjUgMCAwIDAtMTMuODg4IDAgMSAxIDAgMCAwIDAgLjY2IDcuNSA3LjUgMCAwIDAgMTMuODg4IDAifV1dLHBodD1bWyJjaXJjbGUiLHtjeDoiNiIsY3k6IjEyIixyOiI0In1dLFsiY2lyY2xlIix7Y3g6IjE4IixjeToiMTIiLHI6IjQifV0sWyJsaW5lIix7eDE6IjYiLHgyOiIxOCIseTE6IjE2Iix5MjoiMTYifV1dLGhodD1bWyJwYXRoIix7ZDoiTTExLjEgNy4xYTE2LjU1IDE2LjU1IDAgMCAxIDEwLjkgNCJ9XSxbInBhdGgiLHtkOiJNMTIgMTJhMTIuNiAxMi42IDAgMCAxLTguNyA1In1dLFsicGF0aCIse2Q6Ik0xNi44IDEzLjZhMTYuNTUgMTYuNTUgMCAwIDEtOSA3LjUifV0sWyJwYXRoIix7ZDoiTTIwLjcgMTdhMTIuOCAxMi44IDAgMCAwLTguNy01IDEzLjMgMTMuMyAwIDAgMSAwLTEwIn1dLFsicGF0aCIse2Q6Ik02LjMgMy44YTE2LjU1IDE2LjU1IDAgMCAwIDEuOSAxMS41In1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn1dXSx1aHQ9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2In1dXSxmaHQ9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2In1dLFsicGF0aCIse2Q6Ik0xOS4zNjQgMTguMzY0YTkgOSAwIDAgMCAwLTEyLjcyOCJ9XV0sbWh0PVtbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIn1dLFsicGF0aCIse2Q6Ik0xOS4zNjQgNS42MzZhOSA5IDAgMCAxIDEuODg5IDkuOTYifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XSxbInBhdGgiLHtkOiJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIn1dLFsicGF0aCIse2Q6Ik05LjgyOCA0LjE3MkEuNjg2LjY4NiAwIDAgMSAxMSA0LjY1N3YuNjg2In1dXSxnaHQ9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiJ9XSxbImxpbmUiLHt4MToiMjIiLHgyOiIxNiIseTE6IjkiLHkyOiIxNSJ9XSxbImxpbmUiLHt4MToiMTYiLHgyOiIyMiIseTE6IjkiLHkyOiIxNSJ9XV0sYmh0PVtbInBhdGgiLHtkOiJtOSAxMiAyIDIgNC00In1dLFsicGF0aCIse2Q6Ik01IDdjMC0xLjEuOS0yIDItMmgxMGEyIDIgMCAwIDEgMiAydjEySDVWN1oifV0sWyJwYXRoIix7ZDoiTTIyIDE5SDIifV1dLHZodD1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6In1dXSx5aHQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIifV0sWyJwYXRoIix7ZDoiTTMgOWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIifV0sWyJwYXRoIix7ZDoiTTMgMTFoM2MuOCAwIDEuNi4zIDIuMS45bDEuMS45YzEuNiAxLjYgNC4xIDEuNiA1LjcgMGwxLjEtLjljLjUtLjUgMS4zLS45IDIuMS0uOUgyMSJ9XV0sTXg9W1sicGF0aCIse2Q6Ik0xNyAxNGguMDEifV0sWyJwYXRoIix7ZDoiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCJ9XV0seGh0PVtbInBhdGgiLHtkOiJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIn1dLFsicGF0aCIse2Q6Ik0zIDV2MTRhMiAyIDAgMCAwIDIgMmgxNWExIDEgMCAwIDAgMS0xdi00In1dXSx3aHQ9W1sicGF0aCIse2Q6Ik0xMiAxN3Y0In1dLFsicGF0aCIse2Q6Ik04IDIxaDgifV0sWyJwYXRoIix7ZDoibTkgMTcgNi4xLTYuMWEyIDIgMCAwIDEgMi44MS4wMUwyMiAxNSJ9XSxbImNpcmNsZSIse2N4OiI4IixjeToiOSIscjoiMiJ9XSxbInJlY3QiLHt4OiIyIix5OiIzIix3aWR0aDoiMjAiLGhlaWdodDoiMTQiLHJ4OiIyIn1dXSx6eD1bWyJwYXRoIix7ZDoibTIxLjY0IDMuNjQtMS4yOC0xLjI4YTEuMjEgMS4yMSAwIDAgMC0xLjcyIDBMMi4zNiAxOC42NGExLjIxIDEuMjEgMCAwIDAgMCAxLjcybDEuMjggMS4yOGExLjIgMS4yIDAgMCAwIDEuNzIgMEwyMS42NCA1LjM2YTEuMiAxLjIgMCAwIDAgMC0xLjcyIn1dLFsicGF0aCIse2Q6Im0xNCA3IDMgMyJ9XSxbInBhdGgiLHtkOiJNNSA2djQifV0sWyJwYXRoIix7ZDoiTTE5IDE0djQifV0sWyJwYXRoIix7ZDoiTTEwIDJ2MiJ9XSxbInBhdGgiLHtkOiJNNyA4SDMifV0sWyJwYXRoIix7ZDoiTTIxIDE2aC00In1dLFsicGF0aCIse2Q6Ik0xMSAzSDkifV1dLE1odD1bWyJwYXRoIix7ZDoiTTE1IDRWMiJ9XSxbInBhdGgiLHtkOiJNMTUgMTZ2LTIifV0sWyJwYXRoIix7ZDoiTTggOWgyIn1dLFsicGF0aCIse2Q6Ik0yMCA5aDIifV0sWyJwYXRoIix7ZDoiTTE3LjggMTEuOCAxOSAxMyJ9XSxbInBhdGgiLHtkOiJNMTUgOWguMDEifV0sWyJwYXRoIix7ZDoiTTE3LjggNi4yIDE5IDUifV0sWyJwYXRoIix7ZDoibTMgMjEgOS05In1dLFsicGF0aCIse2Q6Ik0xMi4yIDYuMiAxMSA1In1dXSx6aHQ9W1sicGF0aCIse2Q6Ik0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSJ9XSxbInBhdGgiLHtkOiJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMS4xMzItMS44MDNsNy45NS0zLjk3NGEyIDIgMCAwIDEgMS44MzcgMGw3Ljk0OCAzLjk3NEEyIDIgMCAwIDEgMjIgOHoifV0sWyJwYXRoIix7ZDoiTTYgMTNoMTIifV0sWyJwYXRoIix7ZDoiTTYgMTdoMTIifV1dLGtodD1bWyJwYXRoIix7ZDoiTTMgNmgzIn1dLFsicGF0aCIse2Q6Ik0xNyA2aC4wMSJ9XSxbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMjAiLHg6IjMiLHk6IjIiLHJ4OiIyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjUifV0sWyJwYXRoIix7ZDoiTTEyIDE4YTIuNSAyLjUgMCAwIDAgMC01IDIuNSAyLjUgMCAwIDEgMC01In1dXSxTaHQ9W1sicGF0aCIse2Q6Ik0xMiAxMHYyLjJsMS42IDEifV0sWyJwYXRoIix7ZDoibTE2LjEzIDcuNjYtLjgxLTQuMDVhMiAyIDAgMCAwLTItMS42MWgtMi42OGEyIDIgMCAwIDAtMiAxLjYxbC0uNzggNC4wNSJ9XSxbInBhdGgiLHtkOiJtNy44OCAxNi4zNi44IDRhMiAyIDAgMCAwIDIgMS42MWgyLjcyYTIgMiAwIDAgMCAyLTEuNjFsLjgxLTQuMDUifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNiJ9XV0sQ2h0PVtbInBhdGgiLHtkOiJNMTIgMTBMMTIgMiJ9XSxbInBhdGgiLHtkOiJNMTYgNkwxMiAxMEw4IDYifV0sWyJwYXRoIix7ZDoiTTIgMTVDMi42IDE1LjUgMy4yIDE2IDQuNSAxNkM3IDE2IDcgMTQgOS41IDE0QzEyLjEgMTQgMTEuOSAxNiAxNC41IDE2QzE3IDE2IDE3IDE0IDE5LjUgMTRDMjAuOCAxNCAyMS40IDE0LjUgMjIgMTUifV0sWyJwYXRoIix7ZDoiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEifV1dLF9odD1bWyJwYXRoIix7ZDoiTTEyIDJ2OCJ9XSxbInBhdGgiLHtkOiJNMiAxNWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Ik0yIDIxYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV0sWyJwYXRoIix7ZDoibTggNiA0LTQgNCA0In1dXSxUaHQ9W1sicGF0aCIse2Q6Ik0xOSA1YTIgMiAwIDAgMC0yIDJ2MTEifV0sWyJwYXRoIix7ZDoiTTIgMThjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSJ9XSxbInBhdGgiLHtkOiJNNyAxM2gxMCJ9XSxbInBhdGgiLHtkOiJNNyA5aDEwIn1dLFsicGF0aCIse2Q6Ik05IDVhMiAyIDAgMCAwLTIgMnYxMSJ9XV0sTGh0PVtbInBhdGgiLHtkOiJNMiA2Yy42LjUgMS4yIDEgMi41IDFDNyA3IDcgNSA5LjUgNWMyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIn1dLFsicGF0aCIse2Q6Ik0yIDEyYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEifV0sWyJwYXRoIix7ZDoiTTIgMThjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSJ9XV0sJGh0PVtbInBhdGgiLHtkOiJtMTAuNTg2IDUuNDE0LTUuMTcyIDUuMTcyIn1dLFsicGF0aCIse2Q6Im0xOC41ODYgMTMuNDE0LTUuMTcyIDUuMTcyIn1dLFsicGF0aCIse2Q6Ik02IDEyaDEyIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMjAiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiI0IixyOiIyIn1dLFsiY2lyY2xlIix7Y3g6IjIwIixjeToiMTIiLHI6IjIifV0sWyJjaXJjbGUiLHtjeDoiNCIsY3k6IjEyIixyOiIyIn1dXSxBaHQ9W1siY2lyY2xlIix7Y3g6IjEyIixjeToiMTAiLHI6IjgifV0sWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMCIscjoiMyJ9XSxbInBhdGgiLHtkOiJNNyAyMmgxMCJ9XSxbInBhdGgiLHtkOiJNMTIgMjJ2LTQifV1dLERodD1bWyJwYXRoIix7ZDoiTTE3IDE3aC01Yy0xLjA5LS4wMi0xLjk0LjkyLTIuNSAxLjlBMyAzIDAgMSAxIDIuNTcgMTUifV0sWyJwYXRoIix7ZDoiTTkgMy40YTQgNCAwIDAgMSA2LjUyLjY2In1dLFsicGF0aCIse2Q6Im02IDE3IDMuMS01LjhhMi41IDIuNSAwIDAgMCAuMDU3LTIuMDUifV0sWyJwYXRoIix7ZDoiTTIwLjMgMjAuM2E0IDQgMCAwIDEtMi4zLjcifV0sWyJwYXRoIix7ZDoiTTE4LjYgMTNhNCA0IDAgMCAxIDMuMzU3IDMuNDE0In1dLFsicGF0aCIse2Q6Im0xMiA2IC42IDEifV0sWyJwYXRoIix7ZDoibTIgMiAyMCAyMCJ9XV0sRWh0PVtbInBhdGgiLHtkOiJNMTggMTYuOThoLTUuOTljLTEuMSAwLTEuOTUuOTQtMi40OCAxLjlBNCA0IDAgMCAxIDIgMTdjLjAxLS43LjItMS40LjU3LTIifV0sWyJwYXRoIix7ZDoibTYgMTcgMy4xMy01Ljc4Yy41My0uOTcuMS0yLjE4LS41LTMuMWE0IDQgMCAxIDEgNi44OS00LjA2In1dLFsicGF0aCIse2Q6Im0xMiA2IDMuMTMgNS43M0MxNS42NiAxMi43IDE2LjkgMTMgMTggMTNhNCA0IDAgMCAxIDAgOCJ9XV0sUGh0PVtbInBhdGgiLHtkOiJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6In1dLFsicGF0aCIse2Q6Ik03Ljk5OSAxNWEyLjUgMi41IDAgMCAxIDQgMCAyLjUgMi41IDAgMCAwIDQgMCJ9XSxbImNpcmNsZSIse2N4OiIxMiIsY3k6IjUiLHI6IjMifV1dLElodD1bWyJwYXRoIix7ZDoibTIgMjIgMTAtMTAifV0sWyJwYXRoIix7ZDoibTE2IDgtMS4xNyAxLjE3In1dLFsicGF0aCIse2Q6Ik0zLjQ3IDEyLjUzIDUgMTFsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDUgMTlsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoifV0sWyJwYXRoIix7ZDoibTggOC0uNTMuNTNhMy41IDMuNSAwIDAgMCAwIDQuOTRMOSAxNWwxLjUzLTEuNTNjLjU1LS41NS44OC0xLjI1Ljk4LTEuOTcifV0sWyJwYXRoIix7ZDoiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIifV0sWyJwYXRoIix7ZDoiTTIwIDJoMnYyYTQgNCAwIDAgMS00IDRoLTJWNmE0IDQgMCAwIDEgNC00WiJ9XSxbInBhdGgiLHtkOiJNMTEuNDcgMTcuNDcgMTMgMTlsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw1IDE5bDEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDQuOTQgMFoifV0sWyJwYXRoIix7ZDoibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgifV0sWyJwYXRoIix7ZDoiTTE4Ljc0IDEzLjA5Yy4yNi0uMTUuNTEtLjM0LjczLS41NkwyMSAxMWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDAtNC42Mi0uMjgifV0sWyJsaW5lIix7eDE6IjIiLHgyOiIyMiIseTE6IjIiLHkyOiIyMiJ9XV0sTmh0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjUiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTYuNSA4YTIgMiAwIDAgMC0xLjkwNSAxLjQ2TDIuMSAxOC41QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjkyNS0yLjU0TDE5LjQgOS41QTIgMiAwIDAgMCAxNy40OCA4WiJ9XV0sRmh0PVtbInBhdGgiLHtkOiJNMiAyMiAxNiA4In1dLFsicGF0aCIse2Q6Ik0zLjQ3IDEyLjUzIDUgMTFsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDUgMTlsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoifV0sWyJwYXRoIix7ZDoiTTcuNDcgOC41MyA5IDdsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDkgMTVsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoifV0sWyJwYXRoIix7ZDoiTTExLjQ3IDQuNTMgMTMgM2wxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMMTMgMTFsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoifV0sWyJwYXRoIix7ZDoiTTIwIDJoMnYyYTQgNCAwIDAgMS00IDRoLTJWNmE0IDQgMCAwIDEgNC00WiJ9XSxbInBhdGgiLHtkOiJNMTEuNDcgMTcuNDcgMTMgMTlsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw1IDE5bDEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDQuOTQgMFoifV0sWyJwYXRoIix7ZDoiTTE1LjQ3IDEzLjQ3IDE3IDE1bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMOSAxNWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIn1dLFsicGF0aCIse2Q6Ik0xOS40NyA5LjQ3IDIxIDExbC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMMTMgMTFsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiJ9XV0sT2h0PVtbImNpcmNsZSIse2N4OiI3IixjeToiMTIiLHI6IjMifV0sWyJwYXRoIix7ZDoiTTEwIDl2NiJ9XSxbImNpcmNsZSIse2N4OiIxNyIsY3k6IjEyIixyOiIzIn1dLFsicGF0aCIse2Q6Ik0xNCA3djgifV0sWyJwYXRoIix7ZDoiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIn1dXSxSaHQ9W1sicGF0aCIse2Q6Im0xNC4zMDUgMTkuNTMuOTIzLS4zODIifV0sWyJwYXRoIix7ZDoibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIn1dLFsicGF0aCIse2Q6Im0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCJ9XSxbInBhdGgiLHtkOiJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyJ9XSxbInBhdGgiLHtkOiJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCJ9XSxbInBhdGgiLHtkOiJNMiA3LjgyYTE1IDE1IDAgMCAxIDIwIDAifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxNi44NTIuOTI0LS4zODMifV0sWyJwYXRoIix7ZDoibTIwLjc3MiAxOS4xNDguOTI0LjM4MyJ9XSxbInBhdGgiLHtkOiJNNSAxMS44NThhMTAgMTAgMCAwIDEgMTEuNS0xLjc4NSJ9XSxbInBhdGgiLHtkOiJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSJ9XSxbImNpcmNsZSIse2N4OiIxOCIsY3k6IjE4IixyOiIzIn1dXSxCaHQ9W1sicGF0aCIse2Q6Ik0xMiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAifV0sWyJwYXRoIix7ZDoiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCJ9XV0sSGh0PVtbInBhdGgiLHtkOiJNMTIgMjBoLjAxIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAifV1dLHFodD1bWyJwYXRoIix7ZDoiTTEyIDIwaC4wMSJ9XSxbInBhdGgiLHtkOiJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIn1dLFsicGF0aCIse2Q6Ik01IDEyLjg1OWExMCAxMCAwIDAgMSA1LjE3LTIuNjkifV0sWyJwYXRoIix7ZDoiTTE5IDEyLjg1OWExMCAxMCAwIDAgMC0yLjAwNy0xLjUyMyJ9XSxbInBhdGgiLHtkOiJNMiA4LjgyYTE1IDE1IDAgMCAxIDQuMTc3LTIuNjQzIn1dLFsicGF0aCIse2Q6Ik0yMiA4LjgyYTE1IDE1IDAgMCAwLTExLjI4OC0zLjc2NCJ9XSxbInBhdGgiLHtkOiJtMiAyIDIwIDIwIn1dXSxWaHQ9W1sicGF0aCIse2Q6Ik0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCJ9XSxbInBhdGgiLHtkOiJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6In1dLFsicGF0aCIse2Q6Ik01IDEyLjg1OWExMCAxMCAwIDAgMSAxMC41LTIuMjIyIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5YTUgNSAwIDAgMSAzLTEuNDA2In1dXSxqaHQ9W1sicGF0aCIse2Q6Ik0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSJ9XSxbInBhdGgiLHtkOiJNMTEuOTY1IDE0LjEwNWg0In1dLFsicGF0aCIse2Q6Ik0xNy45NjUgMTguMTA1aDRMMjAuNDMgMTkuNzFhNSA1IDAgMCAxLTgtMS41In1dLFsicGF0aCIse2Q6Ik0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCJ9XSxbInBhdGgiLHtkOiJNMjEuOTY1IDIyLjEwNXYtNCJ9XSxbInBhdGgiLHtkOiJNNSAxMi44NmExMCAxMCAwIDAgMSAzLTIuMDMyIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5aC4wMSJ9XV0sVWh0PVtbInBhdGgiLHtkOiJNMTIgMjBoLjAxIn1dXSxXaHQ9W1sicGF0aCIse2Q6Ik0xMiAyMGguMDEifV0sWyJwYXRoIix7ZDoiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIn1dLFsicGF0aCIse2Q6Ik01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIn1dLFsicGF0aCIse2Q6Ik04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAifV1dLEdodD1bWyJwYXRoIix7ZDoiTTEwIDJ2OCJ9XSxbInBhdGgiLHtkOiJNMTIuOCAyMS42QTIgMiAwIDEgMCAxNCAxOEgyIn1dLFsicGF0aCIse2Q6Ik0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIifV0sWyJwYXRoIix7ZDoibTYgNiA0IDQgNC00In1dXSxZaHQ9W1sicGF0aCIse2Q6Ik0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIifV0sWyJwYXRoIix7ZDoiTTE3LjUgOGEyLjUgMi41IDAgMSAxIDIgNEgyIn1dLFsicGF0aCIse2Q6Ik05LjggNC40QTIgMiAwIDEgMSAxMSA4SDIifV1dLFpodD1bWyJwYXRoIix7ZDoiTTggMjJoOCJ9XSxbInBhdGgiLHtkOiJNNyAxMGgxMCJ9XSxbInBhdGgiLHtkOiJNMTIgMTV2NyJ9XSxbInBhdGgiLHtkOiJNMTIgMTVhNSA1IDAgMCAwIDUtNWMwLTItLjUtNC0yLThIOWMtMS41IDQtMiA2LTIgOGE1IDUgMCAwIDAgNSA1WiJ9XV0sWGh0PVtbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI4Iix4OiIzIix5OiIzIixyeDoiMiJ9XSxbInBhdGgiLHtkOiJNNyAxMXY0YTIgMiAwIDAgMCAyIDJoNCJ9XSxbInJlY3QiLHt3aWR0aDoiOCIsaGVpZ2h0OiI4Iix4OiIxMyIseToiMTMiLHJ4OiIyIn1dXSxLaHQ9W1sicGF0aCIse2Q6Ik04IDIyaDgifV0sWyJwYXRoIix7ZDoiTTcgMTBoM203IDBoLTEuMzQzIn1dLFsicGF0aCIse2Q6Ik0xMiAxNXY3In1dLFsicGF0aCIse2Q6Ik03LjMwNyA3LjMwN0ExMi4zMyAxMi4zMyAwIDAgMCA3IDEwYTUgNSAwIDAgMCA3LjM5MSA0LjM5MU04LjYzOCAyLjk4MUM4Ljc1IDIuNjY4IDguODcyIDIuMzQgOSAyaDZjMS41IDQgMiA2IDIgOCAwIC40MDctLjA1LjgwOS0uMTQ1IDEuMTk4In1dLFsibGluZSIse3gxOiIyIix4MjoiMjIiLHkxOiIyIix5MjoiMjIifV1dLFFodD1bWyJwYXRoIix7ZDoibTE5IDEyLTEuNSAzIn1dLFsicGF0aCIse2Q6Ik0xOS42MyAxOC44MSAyMiAyMCJ9XSxbInBhdGgiLHtkOiJNNi40NyA4LjIzYTEuNjggMS42OCAwIDAgMSAyLjQ0IDEuOTNsLS42NCAyLjA4YTYuNzYgNi43NiAwIDAgMCAxMC4xNiA3LjY3bC40Mi0uMjdhMSAxIDAgMSAwLTIuNzMtNC4yMWwtLjQyLjI3YTEuNzYgMS43NiAwIDAgMS0yLjYzLTEuOTlsLjY0LTIuMDhBNi42NiA2LjY2IDAgMCAwIDMuOTQgMy45bC0uNy40YTEgMSAwIDEgMCAyLjU1IDQuMzR6In1dXSxKaHQ9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiJ9XV0sZTl0PVtbInBhdGgiLHtkOiJNMi41IDE3YTI0LjEyIDI0LjEyIDAgMCAxIDAtMTAgMiAyIDAgMCAxIDEuNC0xLjQgNDkuNTYgNDkuNTYgMCAwIDEgMTYuMiAwQTIgMiAwIDAgMSAyMS41IDdhMjQuMTIgMjQuMTIgMCAwIDEgMCAxMCAyIDIgMCAwIDEtMS40IDEuNCA0OS41NSA0OS41NSAwIDAgMS0xNi4yIDBBMiAyIDAgMCAxIDIuNSAxNyJ9XSxbInBhdGgiLHtkOiJtMTAgMTUgNS0zLTUtM3oifV1dLHQ5dD1bWyJwYXRoIix7ZDoiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiJ9XV0sYTl0PVtbInBhdGgiLHtkOiJNMTAuNTEzIDQuODU2IDEzLjEyIDIuMTdhLjUuNSAwIDAgMSAuODYuNDZsLTEuMzc3IDQuMzE3In1dLFsicGF0aCIse2Q6Ik0xNS42NTYgMTBIMjBhMSAxIDAgMCAxIC43OCAxLjYzbC0xLjcyIDEuNzczIn1dLFsicGF0aCIse2Q6Ik0xNi4yNzMgMTYuMjczIDEwLjg4IDIxLjgzYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0SDRhMSAxIDAgMCAxLS43OC0xLjYzbDQuNTA3LTQuNjQzIn1dLFsicGF0aCIse2Q6Im0yIDIgMjAgMjAifV1dLGk5dD1bWyJwYXRoIix7ZDoiTTQgMTRhMSAxIDAgMCAxLS43OC0xLjYzbDkuOS0xMC4yYS41LjUgMCAwIDEgLjg2LjQ2bC0xLjkyIDYuMDJBMSAxIDAgMCAwIDEzIDEwaDdhMSAxIDAgMCAxIC43OCAxLjYzbC05LjkgMTAuMmEuNS41IDAgMCAxLS44Ni0uNDZsMS45Mi02LjAyQTEgMSAwIDAgMCAxMSAxNHoifV1dLHI5dD1bWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbImxpbmUiLHt4MToiMjEiLHgyOiIxNi42NSIseTE6IjIxIix5MjoiMTYuNjUifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNCIseTE6IjExIix5MjoiMTEifV1dLHM5dD1bWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCJ9XSxbImxpbmUiLHt4MToiMjEiLHgyOiIxNi42NSIseTE6IjIxIix5MjoiMTYuNjUifV0sWyJsaW5lIix7eDE6IjExIix4MjoiMTEiLHkxOiI4Iix5MjoiMTQifV0sWyJsaW5lIix7eDE6IjgiLHgyOiIxNCIseTE6IjExIix5MjoiMTEifV1dLEdqdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBQXJyb3dEb3duOnpaZSxBQXJyb3dVcDprWmUsQUxhcmdlU21hbGw6U1plLEFjY2Vzc2liaWxpdHk6Q1plLEFjdGl2aXR5OlRaZSxBY3Rpdml0eVNxdWFyZTpyeSxBaXJWZW50Ol9aZSxBaXJwbGF5OkxaZSxBbGFybUNoZWNrOmJnLEFsYXJtQ2xvY2s6QVplLEFsYXJtQ2xvY2tDaGVjazpiZyxBbGFybUNsb2NrTWludXM6dmcsQWxhcm1DbG9ja09mZjokWmUsQWxhcm1DbG9ja1BsdXM6eWcsQWxhcm1NaW51czp2ZyxBbGFybVBsdXM6eWcsQWxhcm1TbW9rZTpEWmUsQWxidW06RVplLEFsZXJ0Q2lyY2xlOllnLEFsZXJ0T2N0YWdvbjpEdixBbGVydFRyaWFuZ2xlOmR4LEFsaWduQ2VudGVyOmF4LEFsaWduQ2VudGVySG9yaXpvbnRhbDpQWmUsQWxpZ25DZW50ZXJWZXJ0aWNhbDpJWmUsQWxpZ25FbmRIb3Jpem9udGFsOk5aZSxBbGlnbkVuZFZlcnRpY2FsOkZaZSxBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyOk9aZSxBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOlJaZSxBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQ6QlplLEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI6SFplLEFsaWduSG9yaXpvbnRhbEp1c3RpZnlFbmQ6cVplLEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydDpWWmUsQWxpZ25Ib3Jpem9udGFsU3BhY2VBcm91bmQ6alplLEFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbjpVWmUsQWxpZ25KdXN0aWZ5OnJ4LEFsaWduTGVmdDpDbCxBbGlnblJpZ2h0Oml4LEFsaWduU3RhcnRIb3Jpem9udGFsOldaZSxBbGlnblN0YXJ0VmVydGljYWw6R1plLEFsaWduVmVydGljYWxEaXN0cmlidXRlQ2VudGVyOllaZSxBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZDpaWmUsQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydDpYWmUsQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXI6S1plLEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOlFaZSxBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0OkpaZSxBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQ6ZVhlLEFsaWduVmVydGljYWxTcGFjZUJldHdlZW46dFhlLEFtYnVsYW5jZTphWGUsQW1wZXJzYW5kOmlYZSxBbXBlcnNhbmRzOnJYZSxBbXBob3JhOnNYZSxBbmNob3I6blhlLEFuZ3J5Om9YZSxBbm5veWVkOmxYZSxBbnRlbm5hOmNYZSxBbnZpbDpkWGUsQXBlcnR1cmU6cFhlLEFwcFdpbmRvdzp1WGUsQXBwV2luZG93TWFjOmhYZSxBcHBsZTpmWGUsQXJjaGl2ZTpiWGUsQXJjaGl2ZVJlc3RvcmU6bVhlLEFyY2hpdmVYOmdYZSxBcmVhQ2hhcnQ6UGcsQXJtY2hhaXI6dlhlLEFycm93QmlnRG93bjp4WGUsQXJyb3dCaWdEb3duRGFzaDp5WGUsQXJyb3dCaWdMZWZ0Ok1YZSxBcnJvd0JpZ0xlZnREYXNoOndYZSxBcnJvd0JpZ1JpZ2h0OmtYZSxBcnJvd0JpZ1JpZ2h0RGFzaDp6WGUsQXJyb3dCaWdVcDpDWGUsQXJyb3dCaWdVcERhc2g6U1hlLEFycm93RG93bjpOWGUsQXJyb3dEb3duMDE6X1hlLEFycm93RG93bjEwOlRYZSxBcnJvd0Rvd25BWjp4ZyxBcnJvd0Rvd25Bejp4ZyxBcnJvd0Rvd25DaXJjbGU6WmcsQXJyb3dEb3duRnJvbUxpbmU6TFhlLEFycm93RG93bkxlZnQ6JFhlLEFycm93RG93bkxlZnRGcm9tQ2lyY2xlOktnLEFycm93RG93bkxlZnRGcm9tU3F1YXJlOmx5LEFycm93RG93bkxlZnRTcXVhcmU6aXksQXJyb3dEb3duTmFycm93V2lkZTpBWGUsQXJyb3dEb3duUmlnaHQ6RFhlLEFycm93RG93blJpZ2h0RnJvbUNpcmNsZTpRZyxBcnJvd0Rvd25SaWdodEZyb21TcXVhcmU6ZHksQXJyb3dEb3duUmlnaHRTcXVhcmU6c3ksQXJyb3dEb3duU3F1YXJlOm55LEFycm93RG93blRvRG90OkVYZSxBcnJvd0Rvd25Ub0xpbmU6UFhlLEFycm93RG93blVwOklYZSxBcnJvd0Rvd25XaWRlTmFycm93OndnLEFycm93RG93blpBOk1nLEFycm93RG93blphOk1nLEFycm93TGVmdDpCWGUsQXJyb3dMZWZ0Q2lyY2xlOlhnLEFycm93TGVmdEZyb21MaW5lOkZYZSxBcnJvd0xlZnRSaWdodDpPWGUsQXJyb3dMZWZ0U3F1YXJlOm95LEFycm93TGVmdFRvTGluZTpSWGUsQXJyb3dSaWdodDpqWGUsQXJyb3dSaWdodENpcmNsZTp0YixBcnJvd1JpZ2h0RnJvbUxpbmU6SFhlLEFycm93UmlnaHRMZWZ0OnFYZSxBcnJvd1JpZ2h0U3F1YXJlOmh5LEFycm93UmlnaHRUb0xpbmU6VlhlLEFycm93VXA6ZUtlLEFycm93VXAwMTpVWGUsQXJyb3dVcDEwOldYZSxBcnJvd1VwQVo6emcsQXJyb3dVcEF6OnpnLEFycm93VXBDaXJjbGU6YWIsQXJyb3dVcERvd246R1hlLEFycm93VXBGcm9tRG90OllYZSxBcnJvd1VwRnJvbUxpbmU6WlhlLEFycm93VXBMZWZ0OlhYZSxBcnJvd1VwTGVmdEZyb21DaXJjbGU6SmcsQXJyb3dVcExlZnRGcm9tU3F1YXJlOmN5LEFycm93VXBMZWZ0U3F1YXJlOnV5LEFycm93VXBOYXJyb3dXaWRlOmtnLEFycm93VXBSaWdodDpLWGUsQXJyb3dVcFJpZ2h0RnJvbUNpcmNsZTplYixBcnJvd1VwUmlnaHRGcm9tU3F1YXJlOnB5LEFycm93VXBSaWdodFNxdWFyZTpmeSxBcnJvd1VwU3F1YXJlOm15LEFycm93VXBUb0xpbmU6UVhlLEFycm93VXBXaWRlTmFycm93OkpYZSxBcnJvd1VwWkE6U2csQXJyb3dVcFphOlNnLEFycm93c1VwRnJvbUxpbmU6dEtlLEFzdGVyaXNrOmFLZSxBc3Rlcmlza1NxdWFyZTpneSxBdFNpZ246aUtlLEF0b206cktlLEF1ZGlvTGluZXM6c0tlLEF1ZGlvV2F2ZWZvcm06bktlLEF3YXJkOm9LZSxBeGU6bEtlLEF4aXMzRDpDZyxBeGlzM2Q6Q2csQmFieTpkS2UsQmFja3BhY2s6Y0tlLEJhZGdlOkNLZSxCYWRnZUFsZXJ0OnBLZSxCYWRnZUNlbnQ6aEtlLEJhZGdlQ2hlY2s6X2csQmFkZ2VEb2xsYXJTaWduOmZLZSxCYWRnZUV1cm86bUtlLEJhZGdlSGVscDpUZyxCYWRnZUluZGlhblJ1cGVlOnVLZSxCYWRnZUluZm86Z0tlLEJhZGdlSmFwYW5lc2VZZW46YktlLEJhZGdlTWludXM6dktlLEJhZGdlUGVyY2VudDp5S2UsQmFkZ2VQbHVzOnhLZSxCYWRnZVBvdW5kU3Rlcmxpbmc6d0tlLEJhZGdlUXVlc3Rpb25NYXJrOlRnLEJhZGdlUnVzc2lhblJ1YmxlOk1LZSxCYWRnZVN3aXNzRnJhbmM6ektlLEJhZGdlVHVya2lzaExpcmE6a0tlLEJhZGdlWDpTS2UsQmFnZ2FnZUNsYWltOl9LZSxCYWxsb29uOlRLZSxCYW46TEtlLEJhbmFuYTokS2UsQmFuZGFnZTpBS2UsQmFua25vdGU6SUtlLEJhbmtub3RlQXJyb3dEb3duOkRLZSxCYW5rbm90ZUFycm93VXA6RUtlLEJhbmtub3RlWDpQS2UsQmFyQ2hhcnQ6cWcsQmFyQ2hhcnQyOlZnLEJhckNoYXJ0MzpCZyxCYXJDaGFydDQ6UmcsQmFyQ2hhcnRCaWc6RmcsQmFyQ2hhcnRIb3Jpem9udGFsOk9nLEJhckNoYXJ0SG9yaXpvbnRhbEJpZzpJZyxCYXJjb2RlOk5LZSxCYXJyZWw6RktlLEJhc2VsaW5lOk9LZSxCYXRoOlJLZSxCYXR0ZXJ5OldLZSxCYXR0ZXJ5Q2hhcmdpbmc6QktlLEJhdHRlcnlGdWxsOkhLZSxCYXR0ZXJ5TG93OnFLZSxCYXR0ZXJ5TWVkaXVtOlZLZSxCYXR0ZXJ5UGx1czpqS2UsQmF0dGVyeVdhcm5pbmc6VUtlLEJlYWtlcjpHS2UsQmVhbjpaS2UsQmVhbk9mZjpZS2UsQmVkOlFLZSxCZWREb3VibGU6WEtlLEJlZFNpbmdsZTpLS2UsQmVlZjpKS2UsQmVlcjp0UWUsQmVlck9mZjplUWUsQmVsbDpsUWUsQmVsbERvdDphUWUsQmVsbEVsZWN0cmljOmlRZSxCZWxsTWludXM6clFlLEJlbGxPZmY6c1FlLEJlbGxQbHVzOm5RZSxCZWxsUmluZzpvUWUsQmV0d2Vlbkhvcml6b25hbEVuZDpMZyxCZXR3ZWVuSG9yaXpvbmFsU3RhcnQ6JGcsQmV0d2Vlbkhvcml6b250YWxFbmQ6TGcsQmV0d2Vlbkhvcml6b250YWxTdGFydDokZyxCZXR3ZWVuVmVydGljYWxFbmQ6Y1FlLEJldHdlZW5WZXJ0aWNhbFN0YXJ0OmRRZSxCaWNlcHNGbGV4ZWQ6cFFlLEJpa2U6aFFlLEJpbmFyeTp1UWUsQmlub2N1bGFyczpmUWUsQmlvaGF6YXJkOm1RZSxCaXJkOmdRZSxCaXJkaG91c2U6YlFlLEJpdGNvaW46dlFlLEJsZW5kOnlRZSxCbGluZHM6eFFlLEJsb2NrczpNUWUsQmx1ZXRvb3RoOkNRZSxCbHVldG9vdGhDb25uZWN0ZWQ6d1FlLEJsdWV0b290aE9mZjp6UWUsQmx1ZXRvb3RoU2VhcmNoaW5nOmtRZSxCb2xkOlNRZSxCb2x0OlRRZSxCb21iOl9RZSxCb25lOkxRZSxCb29rOmVKZSxCb29rQTokUWUsQm9va0FsZXJ0OkFRZSxCb29rQXVkaW86RVFlLEJvb2tDaGVjazpEUWUsQm9va0NvcHk6UFFlLEJvb2tEYXNoZWQ6QWcsQm9va0Rvd246SVFlLEJvb2tIZWFkcGhvbmVzOk5RZSxCb29rSGVhcnQ6RlFlLEJvb2tJbWFnZTpPUWUsQm9va0tleTpSUWUsQm9va0xvY2s6QlFlLEJvb2tNYXJrZWQ6SFFlLEJvb2tNaW51czpxUWUsQm9va09wZW46VVFlLEJvb2tPcGVuQ2hlY2s6VlFlLEJvb2tPcGVuVGV4dDpqUWUsQm9va1BsdXM6V1FlLEJvb2tTZWFyY2g6R1FlLEJvb2tUZW1wbGF0ZTpBZyxCb29rVGV4dDpZUWUsQm9va1R5cGU6WlFlLEJvb2tVcDpLUWUsQm9va1VwMjpYUWUsQm9va1VzZXI6UVFlLEJvb2tYOkpRZSxCb29rbWFyazpzSmUsQm9va21hcmtDaGVjazp0SmUsQm9va21hcmtNaW51czphSmUsQm9va21hcmtQbHVzOmlKZSxCb29rbWFya1g6ckplLEJvb21Cb3g6bkplLEJvdDpsSmUsQm90TWVzc2FnZVNxdWFyZTpvSmUsQm90T2ZmOmNKZSxCb3R0bGVXaW5lOmRKZSxCb3dBcnJvdzpwSmUsQm94OmhKZSxCb3hTZWxlY3Q6X3ksQm94ZXM6dUplLEJyYWNlczpEZyxCcmFja2V0czpmSmUsQnJhaW46YkplLEJyYWluQ2lyY3VpdDptSmUsQnJhaW5Db2c6Z0plLEJyaWNrV2FsbDp3SmUsQnJpY2tXYWxsRmlyZTp2SmUsQnJpY2tXYWxsU2hpZWxkOnlKZSxCcmllZmNhc2U6a0plLEJyaWVmY2FzZUJ1c2luZXNzOnhKZSxCcmllZmNhc2VDb252ZXlvckJlbHQ6TUplLEJyaWVmY2FzZU1lZGljYWw6ekplLEJyaW5nVG9Gcm9udDpTSmUsQnJ1c2g6X0plLEJydXNoQ2xlYW5pbmc6Q0plLEJ1YmJsZXM6VEplLEJ1ZzpBSmUsQnVnT2ZmOkxKZSxCdWdQbGF5OiRKZSxCdWlsZGluZzpFSmUsQnVpbGRpbmcyOkRKZSxCdXM6SUplLEJ1c0Zyb250OlBKZSxDYWJsZTpGSmUsQ2FibGVDYXI6TkplLENha2U6UkplLENha2VTbGljZTpPSmUsQ2FsY3VsYXRvcjpCSmUsQ2FsZW5kYXI6b2V0LENhbGVuZGFyMTpISmUsQ2FsZW5kYXJBcnJvd0Rvd246cUplLENhbGVuZGFyQXJyb3dVcDpWSmUsQ2FsZW5kYXJDaGVjazpVSmUsQ2FsZW5kYXJDaGVjazI6akplLENhbGVuZGFyQ2xvY2s6V0plLENhbGVuZGFyQ29nOkdKZSxDYWxlbmRhckRheXM6WUplLENhbGVuZGFyRm9sZDpaSmUsQ2FsZW5kYXJIZWFydDpYSmUsQ2FsZW5kYXJNaW51czpRSmUsQ2FsZW5kYXJNaW51czI6S0plLENhbGVuZGFyT2ZmOkpKZSxDYWxlbmRhclBsdXM6dGV0LENhbGVuZGFyUGx1czI6ZWV0LENhbGVuZGFyUmFuZ2U6YWV0LENhbGVuZGFyU2VhcmNoOmlldCxDYWxlbmRhclN5bmM6cmV0LENhbGVuZGFyWDpuZXQsQ2FsZW5kYXJYMjpzZXQsQ2FsZW5kYXJzOmNldCxDYW1lcmE6cGV0LENhbWVyYU9mZjpkZXQsQ2FuZGxlc3RpY2tDaGFydDpOZyxDYW5keTpmZXQsQ2FuZHlDYW5lOmhldCxDYW5keU9mZjp1ZXQsQ2FubmFiaXM6Z2V0LENhbm5hYmlzT2ZmOm1ldCxDYXB0aW9uczpFZyxDYXB0aW9uc09mZjpiZXQsQ2FyOnhldCxDYXJGcm9udDp2ZXQsQ2FyVGF4aUZyb250OnlldCxDYXJhdmFuOndldCxDYXJkU2ltOk1ldCxDYXJyb3Q6emV0LENhc2VMb3dlcjprZXQsQ2FzZVNlbnNpdGl2ZTpDZXQsQ2FzZVVwcGVyOl9ldCxDYXNzZXR0ZVRhcGU6VGV0LENhc3Q6TGV0LENhc3RsZTokZXQsQ2F0OkFldCxDY3R2OkRldCxDaGFydEFyZWE6UGcsQ2hhcnRCYXI6T2csQ2hhcnRCYXJCaWc6SWcsQ2hhcnRCYXJEZWNyZWFzaW5nOkVldCxDaGFydEJhckluY3JlYXNpbmc6UGV0LENoYXJ0QmFyU3RhY2tlZDpJZXQsQ2hhcnRDYW5kbGVzdGljazpOZyxDaGFydENvbHVtbjpCZyxDaGFydENvbHVtbkJpZzpGZyxDaGFydENvbHVtbkRlY3JlYXNpbmc6TmV0LENoYXJ0Q29sdW1uSW5jcmVhc2luZzpSZyxDaGFydENvbHVtblN0YWNrZWQ6RmV0LENoYXJ0R2FudHQ6T2V0LENoYXJ0TGluZTpIZyxDaGFydE5ldHdvcms6UmV0LENoYXJ0Tm9BeGVzQ29sdW1uOlZnLENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZzpCZXQsQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOnFnLENoYXJ0Tm9BeGVzQ29tYmluZWQ6SGV0LENoYXJ0Tm9BeGVzR2FudHQ6amcsQ2hhcnRQaWU6VWcsQ2hhcnRTY2F0dGVyOldnLENoYXJ0U3BsaW5lOnFldCxDaGVjazpHZXQsQ2hlY2tDaGVjazpqZXQsQ2hlY2tDaXJjbGU6aWIsQ2hlY2tDaXJjbGUyOnJiLENoZWNrTGluZTpWZXQsQ2hlY2tTcXVhcmU6dnksQ2hlY2tTcXVhcmUyOnl5LENoZWZIYXQ6VWV0LENoZXJyeTpXZXQsQ2hlc3NCaXNob3A6WWV0LENoZXNzS2luZzpaZXQsQ2hlc3NLbmlnaHQ6UWV0LENoZXNzUGF3bjpYZXQsQ2hlc3NRdWVlbjpLZXQsQ2hlc3NSb29rOkpldCxDaGV2cm9uRG93bjpldHQsQ2hldnJvbkRvd25DaXJjbGU6c2IsQ2hldnJvbkRvd25TcXVhcmU6eHksQ2hldnJvbkZpcnN0OnR0dCxDaGV2cm9uTGFzdDphdHQsQ2hldnJvbkxlZnQ6aXR0LENoZXZyb25MZWZ0Q2lyY2xlOm5iLENoZXZyb25MZWZ0U3F1YXJlOnd5LENoZXZyb25SaWdodDpydHQsQ2hldnJvblJpZ2h0Q2lyY2xlOm9iLENoZXZyb25SaWdodFNxdWFyZTpNeSxDaGV2cm9uVXA6c3R0LENoZXZyb25VcENpcmNsZTpsYixDaGV2cm9uVXBTcXVhcmU6enksQ2hldnJvbnNEb3duOm90dCxDaGV2cm9uc0Rvd25VcDpudHQsQ2hldnJvbnNMZWZ0OmR0dCxDaGV2cm9uc0xlZnRSaWdodDpjdHQsQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczpsdHQsQ2hldnJvbnNSaWdodDpodHQsQ2hldnJvbnNSaWdodExlZnQ6cHR0LENoZXZyb25zVXA6dXR0LENoZXZyb25zVXBEb3duOmZ0dCxDaHJvbWU6R2csQ2hyb21pdW06R2csQ2h1cmNoOmd0dCxDaWdhcmV0dGU6YnR0LENpZ2FyZXR0ZU9mZjptdHQsQ2lyY2xlOkR0dCxDaXJjbGVBbGVydDpZZyxDaXJjbGVBcnJvd0Rvd246WmcsQ2lyY2xlQXJyb3dMZWZ0OlhnLENpcmNsZUFycm93T3V0RG93bkxlZnQ6S2csQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ6UWcsQ2lyY2xlQXJyb3dPdXRVcExlZnQ6SmcsQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0OmViLENpcmNsZUFycm93UmlnaHQ6dGIsQ2lyY2xlQXJyb3dVcDphYixDaXJjbGVDaGVjazpyYixDaXJjbGVDaGVja0JpZzppYixDaXJjbGVDaGV2cm9uRG93bjpzYixDaXJjbGVDaGV2cm9uTGVmdDpuYixDaXJjbGVDaGV2cm9uUmlnaHQ6b2IsQ2lyY2xlQ2hldnJvblVwOmxiLENpcmNsZURhc2hlZDp2dHQsQ2lyY2xlRGl2aWRlOmNiLENpcmNsZURvbGxhclNpZ246eXR0LENpcmNsZURvdDp3dHQsQ2lyY2xlRG90RGFzaGVkOnh0dCxDaXJjbGVFbGxpcHNpczpNdHQsQ2lyY2xlRXF1YWw6enR0LENpcmNsZUZhZGluZ0Fycm93VXA6a3R0LENpcmNsZUZhZGluZ1BsdXM6U3R0LENpcmNsZUdhdWdlOmRiLENpcmNsZUhlbHA6eWwsQ2lyY2xlTWludXM6cGIsQ2lyY2xlT2ZmOkN0dCxDaXJjbGVQYXJraW5nOnViLENpcmNsZVBhcmtpbmdPZmY6aGIsQ2lyY2xlUGF1c2U6ZmIsQ2lyY2xlUGVyY2VudDptYixDaXJjbGVQaWxlOl90dCxDaXJjbGVQbGF5OmdiLENpcmNsZVBsdXM6YmIsQ2lyY2xlUG91bmRTdGVybGluZzpUdHQsQ2lyY2xlUG93ZXI6dmIsQ2lyY2xlUXVlc3Rpb25NYXJrOnlsLENpcmNsZVNsYXNoOkx0dCxDaXJjbGVTbGFzaDI6eWIsQ2lyY2xlU2xhc2hlZDp5YixDaXJjbGVTbWFsbDokdHQsQ2lyY2xlU3RhcjpBdHQsQ2lyY2xlU3RvcDp4YixDaXJjbGVVc2VyOk1iLENpcmNsZVVzZXJSb3VuZDp3YixDaXJjbGVYOnpiLENpcmN1aXRCb2FyZDpFdHQsQ2l0cnVzOlB0dCxDbGFwcGVyYm9hcmQ6SXR0LENsaXBib2FyZDpXdHQsQ2xpcGJvYXJkQ2hlY2s6TnR0LENsaXBib2FyZENsb2NrOkZ0dCxDbGlwYm9hcmRDb3B5Ok90dCxDbGlwYm9hcmRFZGl0OlNiLENsaXBib2FyZExpc3Q6UnR0LENsaXBib2FyZE1pbnVzOkJ0dCxDbGlwYm9hcmRQYXN0ZTpIdHQsQ2xpcGJvYXJkUGVuOlNiLENsaXBib2FyZFBlbkxpbmU6a2IsQ2xpcGJvYXJkUGx1czpxdHQsQ2xpcGJvYXJkU2lnbmF0dXJlOmtiLENsaXBib2FyZFR5cGU6VnR0LENsaXBib2FyZFg6anR0LENsb2NrOmQxdCxDbG9jazE6VXR0LENsb2NrMTA6R3R0LENsb2NrMTE6WXR0LENsb2NrMTI6WnR0LENsb2NrMjpYdHQsQ2xvY2szOkt0dCxDbG9jazQ6UXR0LENsb2NrNTpKdHQsQ2xvY2s2OmUxdCxDbG9jazc6dDF0LENsb2NrODphMXQsQ2xvY2s5OmkxdCxDbG9ja0FsZXJ0OnMxdCxDbG9ja0Fycm93RG93bjpyMXQsQ2xvY2tBcnJvd1VwOm4xdCxDbG9ja0NoZWNrOm8xdCxDbG9ja0ZhZGluZzpsMXQsQ2xvY2tQbHVzOmMxdCxDbG9zZWRDYXB0aW9uOnAxdCxDbG91ZDpMMXQsQ2xvdWRBbGVydDpoMXQsQ2xvdWRCYWNrdXA6dTF0LENsb3VkQ2hlY2s6ZjF0LENsb3VkQ29nOm0xdCxDbG91ZERvd25sb2FkOkNiLENsb3VkRHJpenpsZTpnMXQsQ2xvdWRGb2c6YjF0LENsb3VkSGFpbDp2MXQsQ2xvdWRMaWdodG5pbmc6eDF0LENsb3VkTW9vbjp3MXQsQ2xvdWRNb29uUmFpbjp5MXQsQ2xvdWRPZmY6TTF0LENsb3VkUmFpbjprMXQsQ2xvdWRSYWluV2luZDp6MXQsQ2xvdWRTbm93OlMxdCxDbG91ZFN1bjpfMXQsQ2xvdWRTdW5SYWluOkMxdCxDbG91ZFN5bmM6VDF0LENsb3VkVXBsb2FkOl9iLENsb3VkeTokMXQsQ2xvdmVyOkExdCxDbHViOkQxdCxDb2RlOkUxdCxDb2RlMjpUYixDb2RlU3F1YXJlOmt5LENvZGVYbWw6VGIsQ29kZXBlbjpQMXQsQ29kZXNhbmRib3g6STF0LENvZmZlZTpOMXQsQ29nOkYxdCxDb2luczpPMXQsQ29sdW1uczpMYixDb2x1bW5zMjpMYixDb2x1bW5zMzokYixDb2x1bW5zM0NvZzp4bCxDb2x1bW5zNDpSMXQsQ29sdW1uc1NldHRpbmdzOnhsLENvbWJpbmU6QjF0LENvbW1hbmQ6SDF0LENvbXBhc3M6cTF0LENvbXBvbmVudDpWMXQsQ29tcHV0ZXI6ajF0LENvbmNpZXJnZUJlbGw6VTF0LENvbmU6VzF0LENvbnN0cnVjdGlvbjpHMXQsQ29udGFjdDpZMXQsQ29udGFjdDI6QWIsQ29udGFjdFJvdW5kOkFiLENvbnRhaW5lcjpaMXQsQ29udHJhc3Q6SzF0LENvb2tpZTpYMXQsQ29va2luZ1BvdDpRMXQsQ29weTpyMnQsQ29weUNoZWNrOkoxdCxDb3B5TWludXM6ZTJ0LENvcHlQbHVzOnQydCxDb3B5U2xhc2g6YTJ0LENvcHlYOmkydCxDb3B5bGVmdDpzMnQsQ29weXJpZ2h0Om4ydCxDb3JuZXJEb3duTGVmdDpvMnQsQ29ybmVyRG93blJpZ2h0OmwydCxDb3JuZXJMZWZ0RG93bjpjMnQsQ29ybmVyTGVmdFVwOmQydCxDb3JuZXJSaWdodERvd246cDJ0LENvcm5lclJpZ2h0VXA6aDJ0LENvcm5lclVwTGVmdDp1MnQsQ29ybmVyVXBSaWdodDpmMnQsQ3B1Om0ydCxDcmVhdGl2ZUNvbW1vbnM6ZzJ0LENyZWRpdENhcmQ6YjJ0LENyb2lzc2FudDp2MnQsQ3JvcDp5MnQsQ3Jvc3M6eDJ0LENyb3NzaGFpcjp3MnQsQ3Jvd246TTJ0LEN1Ym9pZDp6MnQsQ3VwU29kYTprMnQsQ3VybHlCcmFjZXM6RGcsQ3VycmVuY3k6QzJ0LEN5bGluZGVyOlMydCxEYW06VDJ0LERhdGFiYXNlOkEydCxEYXRhYmFzZUJhY2t1cDpfMnQsRGF0YWJhc2VTZWFyY2g6TDJ0LERhdGFiYXNlWmFwOiQydCxEZWNpbWFsc0Fycm93TGVmdDpEMnQsRGVjaW1hbHNBcnJvd1JpZ2h0OkUydCxEZWxldGU6UDJ0LERlc3NlcnQ6STJ0LERpYW1ldGVyOk4ydCxEaWFtb25kOlIydCxEaWFtb25kTWludXM6RjJ0LERpYW1vbmRQZXJjZW50OkRiLERpYW1vbmRQbHVzOk8ydCxEaWNlMTpCMnQsRGljZTI6SDJ0LERpY2UzOnEydCxEaWNlNDpWMnQsRGljZTU6ajJ0LERpY2U2OlUydCxEaWNlczpXMnQsRGlmZjpHMnQsRGlzYzpLMnQsRGlzYzI6WTJ0LERpc2MzOloydCxEaXNjQWxidW06WDJ0LERpdmlkZTpRMnQsRGl2aWRlQ2lyY2xlOmNiLERpdmlkZVNxdWFyZTpUeSxEbmE6ZWF0LERuYU9mZjpKMnQsRG9jazppYXQsRG9nOnRhdCxEb2xsYXJTaWduOmFhdCxEb251dDpyYXQsRG9vckNsb3NlZDpuYXQsRG9vckNsb3NlZExvY2tlZDpzYXQsRG9vck9wZW46b2F0LERvdDpsYXQsRG90U3F1YXJlOkx5LERvd25sb2FkOmNhdCxEb3dubG9hZENsb3VkOkNiLERyYWZ0aW5nQ29tcGFzczpkYXQsRHJhbWE6aGF0LERyaWJiYmxlOnBhdCxEcmlsbDp1YXQsRHJvbmU6ZmF0LERyb3BsZXQ6Z2F0LERyb3BsZXRPZmY6bWF0LERyb3BsZXRzOmJhdCxEcnVtOnZhdCxEcnVtc3RpY2s6eWF0LER1bWJiZWxsOnhhdCxFYXI6emF0LEVhck9mZjp3YXQsRWFydGg6RWIsRWFydGhMb2NrOk1hdCxFY2xpcHNlOmthdCxFZGl0OmxvLEVkaXQyOlV2LEVkaXQzOmp2LEVnZzpfYXQsRWdnRnJpZWQ6U2F0LEVnZ09mZjpDYXQsRWxsaXBzaXM6SWIsRWxsaXBzaXNWZXJ0aWNhbDpQYixFcXVhbDokYXQsRXF1YWxBcHByb3hpbWF0ZWx5OlRhdCxFcXVhbE5vdDpMYXQsRXF1YWxTcXVhcmU6JHksRXJhc2VyOkRhdCxFdGhlcm5ldFBvcnQ6QWF0LEV1cm86RWF0LEV2Q2hhcmdlcjpQYXQsRXhwYW5kOklhdCxFeHRlcm5hbExpbms6TmF0LEV5ZTpPYXQsRXllQ2xvc2VkOkZhdCxFeWVPZmY6UmF0LEZhY2Vib29rOkJhdCxGYWN0b3J5OkhhdCxGYW46cWF0LEZhc3RGb3J3YXJkOlZhdCxGZWF0aGVyOmphdCxGZW5jZTpVYXQsRmVycmlzV2hlZWw6V2F0LEZpZ21hOkdhdCxGaWxlOk1pdCxGaWxlQXJjaGl2ZTpZYXQsRmlsZUF1ZGlvOndsLEZpbGVBdWRpbzI6d2wsRmlsZUF4aXMzRDpOYixGaWxlQXhpczNkOk5iLEZpbGVCYWRnZTpGYixGaWxlQmFkZ2UyOkZiLEZpbGVCYXJDaGFydDpCYixGaWxlQmFyQ2hhcnQyOkhiLEZpbGVCb3g6WmF0LEZpbGVCcmFjZXM6UmIsRmlsZUJyYWNlc0Nvcm5lcjpPYixGaWxlQ2hhcnRDb2x1bW46SGIsRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZzpCYixGaWxlQ2hhcnRMaW5lOnFiLEZpbGVDaGFydFBpZTpWYixGaWxlQ2hlY2s6S2F0LEZpbGVDaGVjazI6amIsRmlsZUNoZWNrQ29ybmVyOmpiLEZpbGVDbG9jazpYYXQsRmlsZUNvZGU6UWF0LEZpbGVDb2RlMjpVYixGaWxlQ29kZUNvcm5lcjpVYixGaWxlQ29nOldiLEZpbGVDb2cyOldiLEZpbGVEaWZmOkphdCxGaWxlRGlnaXQ6ZWl0LEZpbGVEb3duOnRpdCxGaWxlRWRpdDpRYixGaWxlRXhjbGFtYXRpb25Qb2ludDpHYixGaWxlSGVhZHBob25lOndsLEZpbGVIZWFydDphaXQsRmlsZUltYWdlOmlpdCxGaWxlSW5wdXQ6cml0LEZpbGVKc29uOlJiLEZpbGVKc29uMjpPYixGaWxlS2V5OlliLEZpbGVLZXkyOlliLEZpbGVMaW5lQ2hhcnQ6cWIsRmlsZUxvY2s6WmIsRmlsZUxvY2syOlpiLEZpbGVNaW51czpzaXQsRmlsZU1pbnVzMjpYYixGaWxlTWludXNDb3JuZXI6WGIsRmlsZU11c2ljOm5pdCxGaWxlT3V0cHV0Om9pdCxGaWxlUGVuOlFiLEZpbGVQZW5MaW5lOktiLEZpbGVQaWVDaGFydDpWYixGaWxlUGxheTpKYixGaWxlUGx1czpsaXQsRmlsZVBsdXMyOmV2LEZpbGVQbHVzQ29ybmVyOmV2LEZpbGVRdWVzdGlvbjp0dixGaWxlUXVlc3Rpb25NYXJrOnR2LEZpbGVTY2FuOmNpdCxGaWxlU2VhcmNoOmRpdCxGaWxlU2VhcmNoMjphdixGaWxlU2VhcmNoQ29ybmVyOmF2LEZpbGVTaWduYWw6aXYsRmlsZVNpZ25hdHVyZTpLYixGaWxlU2xpZGVyczpwaXQsRmlsZVNwcmVhZHNoZWV0OmhpdCxGaWxlU3RhY2s6dWl0LEZpbGVTeW1saW5rOmZpdCxGaWxlVGVybWluYWw6bWl0LEZpbGVUZXh0OmdpdCxGaWxlVHlwZTpiaXQsRmlsZVR5cGUyOnJ2LEZpbGVUeXBlQ29ybmVyOnJ2LEZpbGVVcDp2aXQsRmlsZVVzZXI6eWl0LEZpbGVWaWRlbzpKYixGaWxlVmlkZW8yOnN2LEZpbGVWaWRlb0NhbWVyYTpzdixGaWxlVm9sdW1lOnhpdCxGaWxlVm9sdW1lMjppdixGaWxlV2FybmluZzpHYixGaWxlWDp3aXQsRmlsZVgyOm52LEZpbGVYQ29ybmVyOm52LEZpbGVzOnppdCxGaWxtOmtpdCxGaWx0ZXI6cHYsRmlsdGVyWDpkdixGaW5nZXJwcmludDpvdixGaW5nZXJwcmludFBhdHRlcm46b3YsRmlyZUV4dGluZ3Vpc2hlcjpTaXQsRmlzaDpUaXQsRmlzaE9mZjpDaXQsRmlzaFN5bWJvbDpfaXQsRmlzaGluZ0hvb2s6TGl0LEZsYWc6RWl0LEZsYWdPZmY6JGl0LEZsYWdUcmlhbmdsZUxlZnQ6QWl0LEZsYWdUcmlhbmdsZVJpZ2h0OkRpdCxGbGFtZTpJaXQsRmxhbWVLaW5kbGluZzpQaXQsRmxhc2hsaWdodDpGaXQsRmxhc2hsaWdodE9mZjpOaXQsRmxhc2tDb25pY2FsOlJpdCxGbGFza0NvbmljYWxPZmY6T2l0LEZsYXNrUm91bmQ6Qml0LEZsaXBIb3Jpem9udGFsOnFpdCxGbGlwSG9yaXpvbnRhbDI6SGl0LEZsaXBWZXJ0aWNhbDpqaXQsRmxpcFZlcnRpY2FsMjpWaXQsRmxvd2VyOldpdCxGbG93ZXIyOlVpdCxGb2N1czpHaXQsRm9sZEhvcml6b250YWw6WWl0LEZvbGRWZXJ0aWNhbDpaaXQsRm9sZGVyOnpydCxGb2xkZXJBcmNoaXZlOktpdCxGb2xkZXJDaGVjazpYaXQsRm9sZGVyQ2xvY2s6UWl0LEZvbGRlckNsb3NlZDpKaXQsRm9sZGVyQ29kZTplcnQsRm9sZGVyQ29nOmx2LEZvbGRlckNvZzI6bHYsRm9sZGVyRG90OnRydCxGb2xkZXJEb3duOmFydCxGb2xkZXJFZGl0OmN2LEZvbGRlckdpdDpycnQsRm9sZGVyR2l0MjppcnQsRm9sZGVySGVhcnQ6c3J0LEZvbGRlcklucHV0Om5ydCxGb2xkZXJLYW5iYW46b3J0LEZvbGRlcktleTpscnQsRm9sZGVyTG9jazpjcnQsRm9sZGVyTWludXM6ZHJ0LEZvbGRlck9wZW46aHJ0LEZvbGRlck9wZW5Eb3Q6cHJ0LEZvbGRlck91dHB1dDp1cnQsRm9sZGVyUGVuOmN2LEZvbGRlclBsdXM6ZnJ0LEZvbGRlclJvb3Q6bXJ0LEZvbGRlclNlYXJjaDpicnQsRm9sZGVyU2VhcmNoMjpncnQsRm9sZGVyU3ltbGluazp2cnQsRm9sZGVyU3luYzp5cnQsRm9sZGVyVHJlZTp4cnQsRm9sZGVyVXA6d3J0LEZvbGRlclg6TXJ0LEZvbGRlcnM6a3J0LEZvb3RwcmludHM6Q3J0LEZvcmtLbmlmZTp3eCxGb3JrS25pZmVDcm9zc2VkOnh4LEZvcmtsaWZ0OlNydCxGb3JtOl9ydCxGb3JtSW5wdXQ6R3YsRm9yd2FyZDpUcnQsRnJhbWU6THJ0LEZyYW1lcjokcnQsRnJvd246QXJ0LEZ1ZWw6RHJ0LEZ1bGxzY3JlZW46RXJ0LEZ1bmN0aW9uU3F1YXJlOkF5LEZ1bm5lbDpwdixGdW5uZWxQbHVzOlBydCxGdW5uZWxYOmR2LEdhbGxlcnlIb3Jpem9udGFsOk5ydCxHYWxsZXJ5SG9yaXpvbnRhbEVuZDpJcnQsR2FsbGVyeVRodW1ibmFpbHM6RnJ0LEdhbGxlcnlWZXJ0aWNhbDpScnQsR2FsbGVyeVZlcnRpY2FsRW5kOk9ydCxHYW1lcGFkOnFydCxHYW1lcGFkMjpCcnQsR2FtZXBhZERpcmVjdGlvbmFsOkhydCxHYW50dENoYXJ0OmpnLEdhbnR0Q2hhcnRTcXVhcmU6U2wsR2F1Z2U6VnJ0LEdhdWdlQ2lyY2xlOmRiLEdhdmVsOmpydCxHZW06VXJ0LEdlb3JnaWFuTGFyaTpXcnQsR2hvc3Q6R3J0LEdpZnQ6WHJ0LEdpdEJyYW5jaDpLcnQsR2l0QnJhbmNoTWludXM6WXJ0LEdpdEJyYW5jaFBsdXM6WnJ0LEdpdENvbW1pdDpodixHaXRDb21taXRIb3Jpem9udGFsOmh2LEdpdENvbW1pdFZlcnRpY2FsOlFydCxHaXRDb21wYXJlOmVzdCxHaXRDb21wYXJlQXJyb3dzOkpydCxHaXRGb3JrOnRzdCxHaXRHcmFwaDphc3QsR2l0TWVyZ2U6aXN0LEdpdFB1bGxSZXF1ZXN0OmNzdCxHaXRQdWxsUmVxdWVzdEFycm93OnJzdCxHaXRQdWxsUmVxdWVzdENsb3NlZDpzc3QsR2l0UHVsbFJlcXVlc3RDcmVhdGU6b3N0LEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c6bnN0LEdpdFB1bGxSZXF1ZXN0RHJhZnQ6bHN0LEdpdGh1Yjpkc3QsR2l0bGFiOnBzdCxHbGFzc1dhdGVyOmhzdCxHbGFzc2VzOnVzdCxHbG9iZTptc3QsR2xvYmUyOkViLEdsb2JlTG9jazpmc3QsR2xvYmVYOmdzdCxHb2FsOmJzdCxHcHU6dnN0LEdyYWI6YnYsR3JhZHVhdGlvbkNhcDp5c3QsR3JhcGU6eHN0LEdyaWQ6TWwsR3JpZDJYMjpndixHcmlkMlgyQ2hlY2s6dXYsR3JpZDJYMlBsdXM6ZnYsR3JpZDJYMlg6bXYsR3JpZDJ4MjpndixHcmlkMngyQ2hlY2s6dXYsR3JpZDJ4MlBsdXM6ZnYsR3JpZDJ4Mlg6bXYsR3JpZDNYMzpNbCxHcmlkM3gyOndzdCxHcmlkM3gzOk1sLEdyaXA6a3N0LEdyaXBIb3Jpem9udGFsOk1zdCxHcmlwVmVydGljYWw6enN0LEdyb3VwOlNzdCxHdWl0YXI6Q3N0LEhhbTpfc3QsSGFtYnVyZ2VyOlRzdCxIYW1tZXI6THN0LEhhbmQ6SXN0LEhhbmRDb2luczokc3QsSGFuZEZpc3Q6QXN0LEhhbmRHcmFiOmJ2LEhhbmRIZWFydDpEc3QsSGFuZEhlbHBpbmc6dnYsSGFuZE1ldGFsOkVzdCxIYW5kUGxhdHRlcjpQc3QsSGFuZGJhZzpOc3QsSGFuZHNoYWtlOkZzdCxIYXJkRHJpdmU6QnN0LEhhcmREcml2ZURvd25sb2FkOk9zdCxIYXJkRHJpdmVVcGxvYWQ6UnN0LEhhcmRIYXQ6SHN0LEhhc2g6cXN0LEhhdEdsYXNzZXM6VnN0LEhhemU6anN0LEhkOlVzdCxIZG1pUG9ydDpXc3QsSGVhZGluZzpKc3QsSGVhZGluZzE6R3N0LEhlYWRpbmcyOllzdCxIZWFkaW5nMzpac3QsSGVhZGluZzQ6WHN0LEhlYWRpbmc1OktzdCxIZWFkaW5nNjpRc3QsSGVhZHBob25lT2ZmOmVudCxIZWFkcGhvbmVzOnRudCxIZWFkc2V0OmludCxIZWFydDpjbnQsSGVhcnRDcmFjazphbnQsSGVhcnRIYW5kc2hha2U6cm50LEhlYXJ0TWludXM6c250LEhlYXJ0T2ZmOm5udCxIZWFydFBsdXM6bG50LEhlYXJ0UHVsc2U6b250LEhlYXRlcjpkbnQsSGVsaWNvcHRlcjpwbnQsSGVscENpcmNsZTp5bCxIZWxwaW5nSGFuZDp2dixIZXhhZ29uOmhudCxIaWdobGlnaHRlcjp1bnQsSGlzdG9yeTpmbnQsSG9tZTp5dixIb3A6bW50LEhvcE9mZjpnbnQsSG9zcGl0YWw6Ym50LEhvdGVsOnZudCxIb3VyZ2xhc3M6eW50LEhvdXNlOnl2LEhvdXNlSGVhcnQ6eG50LEhvdXNlUGx1Zzp3bnQsSG91c2VQbHVzOk1udCxIb3VzZVdpZmk6em50LEljZUNyZWFtOnd2LEljZUNyZWFtMjp4dixJY2VDcmVhbUJvd2w6eHYsSWNlQ3JlYW1Db25lOnd2LElkQ2FyZDpTbnQsSWRDYXJkTGFueWFyZDprbnQsSW1hZ2U6RG50LEltYWdlRG93bjpDbnQsSW1hZ2VNaW51czpfbnQsSW1hZ2VPZmY6VG50LEltYWdlUGxheTpMbnQsSW1hZ2VQbHVzOiRudCxJbWFnZVVwOkFudCxJbWFnZVVwc2NhbGU6RW50LEltYWdlczpQbnQsSW1wb3J0OkludCxJbmJveDpObnQsSW5kZW50OmtsLEluZGVudERlY3JlYXNlOnpsLEluZGVudEluY3JlYXNlOmtsLEluZGlhblJ1cGVlOkZudCxJbmZpbml0eTpPbnQsSW5mbzpSbnQsSW5zcGVjdDpGeSxJbnNwZWN0aW9uUGFuZWw6Qm50LEluc3RhZ3JhbTpIbnQsSXRhbGljOlZudCxJdGVyYXRpb25DY3c6cW50LEl0ZXJhdGlvbkN3OmpudCxKYXBhbmVzZVllbjpVbnQsSm95c3RpY2s6V250LEthbmJhbjpHbnQsS2FuYmFuU3F1YXJlOkR5LEthbmJhblNxdWFyZURhc2hlZDpTeSxLYXlhazpZbnQsS2V5OktudCxLZXlSb3VuZDpabnQsS2V5U3F1YXJlOlhudCxLZXlib2FyZDplb3QsS2V5Ym9hcmRNdXNpYzpRbnQsS2V5Ym9hcmRPZmY6Sm50LExhbXA6bm90LExhbXBDZWlsaW5nOnRvdCxMYW1wRGVzazphb3QsTGFtcEZsb29yOmlvdCxMYW1wV2FsbERvd246cm90LExhbXBXYWxsVXA6c290LExhbmRQbG90OmxvdCxMYW5kbWFyazpvb3QsTGFuZ3VhZ2VzOmNvdCxMYXB0b3A6cG90LExhcHRvcDI6TXYsTGFwdG9wTWluaW1hbDpNdixMYXB0b3BNaW5pbWFsQ2hlY2s6ZG90LExhc3NvOnVvdCxMYXNzb1NlbGVjdDpob3QsTGF1Z2g6Zm90LExheWVyczp6dixMYXllcnMyOm1vdCxMYXllcnMzOnp2LExheWVyc1BsdXM6Z290LExheW91dDpWdixMYXlvdXREYXNoYm9hcmQ6Ym90LExheW91dEdyaWQ6dm90LExheW91dExpc3Q6eW90LExheW91dFBhbmVsTGVmdDp4b3QsTGF5b3V0UGFuZWxUb3A6d290LExheW91dFRlbXBsYXRlOk1vdCxMZWFmOnpvdCxMZWFmeUdyZWVuOmtvdCxMZWN0ZXJuOlNvdCxMZXR0ZXJUZXh0OnN4LExpYnJhcnk6X290LExpYnJhcnlCaWc6Q290LExpYnJhcnlTcXVhcmU6RXksTGlmZUJ1b3k6VG90LExpZ2F0dXJlOkxvdCxMaWdodGJ1bGI6QW90LExpZ2h0YnVsYk9mZjokb3QsTGluZUNoYXJ0OkhnLExpbmVTcXVpZ2dsZTpEb3QsTGluazpJb3QsTGluazI6UG90LExpbmsyT2ZmOkVvdCxMaW5rZWRpbjpOb3QsTGlzdDp0MHQsTGlzdENoZWNrOkZvdCxMaXN0Q2hlY2tzOk9vdCxMaXN0Q2hldnJvbnNEb3duVXA6Um90LExpc3RDaGV2cm9uc1VwRG93bjpCb3QsTGlzdENvbGxhcHNlOkhvdCxMaXN0RW5kOnFvdCxMaXN0RmlsdGVyOmpvdCxMaXN0RmlsdGVyUGx1czpWb3QsTGlzdEluZGVudERlY3JlYXNlOnpsLExpc3RJbmRlbnRJbmNyZWFzZTprbCxMaXN0TWludXM6VW90LExpc3RNdXNpYzpXb3QsTGlzdE9yZGVyZWQ6R290LExpc3RQbHVzOllvdCxMaXN0UmVzdGFydDpab3QsTGlzdFN0YXJ0OlhvdCxMaXN0VG9kbzpLb3QsTGlzdFRyZWU6UW90LExpc3RWaWRlbzpKb3QsTGlzdFg6ZTB0LExvYWRlcjphMHQsTG9hZGVyMjprdixMb2FkZXJDaXJjbGU6a3YsTG9hZGVyUGlud2hlZWw6aTB0LExvY2F0ZTpuMHQsTG9jYXRlRml4ZWQ6cjB0LExvY2F0ZU9mZjpzMHQsTG9jYXRpb25FZGl0OlR2LExvY2s6bDB0LExvY2tLZXlob2xlOm8wdCxMb2NrS2V5aG9sZU9wZW46U3YsTG9ja09wZW46Q3YsTG9nSW46YzB0LExvZ091dDpwMHQsTG9nczpkMHQsTG9sbGlwb3A6aDB0LEx1Z2dhZ2U6dTB0LE1TcXVhcmU6UHksTWFnbmV0OmYwdCxNYWlsOncwdCxNYWlsQ2hlY2s6bTB0LE1haWxNaW51czpnMHQsTWFpbE9wZW46YjB0LE1haWxQbHVzOnYwdCxNYWlsUXVlc3Rpb246X3YsTWFpbFF1ZXN0aW9uTWFyazpfdixNYWlsU2VhcmNoOnkwdCxNYWlsV2FybmluZzp4MHQsTWFpbFg6TTB0LE1haWxib3g6ejB0LE1haWxzOmswdCxNYXA6UjB0LE1hcE1pbnVzOlMwdCxNYXBQaW46TjB0LE1hcFBpbkNoZWNrOl8wdCxNYXBQaW5DaGVja0luc2lkZTpDMHQsTWFwUGluSG91c2U6VDB0LE1hcFBpbk1pbnVzOiQwdCxNYXBQaW5NaW51c0luc2lkZTpMMHQsTWFwUGluT2ZmOkEwdCxNYXBQaW5QZW46VHYsTWFwUGluUGx1czpFMHQsTWFwUGluUGx1c0luc2lkZTpEMHQsTWFwUGluWDpJMHQsTWFwUGluWEluc2lkZTpQMHQsTWFwUGlubmVkOkYwdCxNYXBQbHVzOk8wdCxNYXJzOkgwdCxNYXJzU3Ryb2tlOkIwdCxNYXJ0aW5pOnEwdCxNYXhpbWl6ZTpqMHQsTWF4aW1pemUyOlYwdCxNZWRhbDpVMHQsTWVnYXBob25lOkcwdCxNZWdhcGhvbmVPZmY6VzB0LE1laDpZMHQsTWVtb3J5U3RpY2s6WDB0LE1lbnU6WjB0LE1lbnVTcXVhcmU6SXksTWVyZ2U6SzB0LE1lc3NhZ2VDaXJjbGU6bzR0LE1lc3NhZ2VDaXJjbGVDb2RlOlEwdCxNZXNzYWdlQ2lyY2xlRGFzaGVkOkowdCxNZXNzYWdlQ2lyY2xlSGVhcnQ6ZTR0LE1lc3NhZ2VDaXJjbGVNb3JlOnQ0dCxNZXNzYWdlQ2lyY2xlT2ZmOmE0dCxNZXNzYWdlQ2lyY2xlUGx1czppNHQsTWVzc2FnZUNpcmNsZVF1ZXN0aW9uOkx2LE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms6THYsTWVzc2FnZUNpcmNsZVJlcGx5OnM0dCxNZXNzYWdlQ2lyY2xlV2FybmluZzpyNHQsTWVzc2FnZUNpcmNsZVg6bjR0LE1lc3NhZ2VTcXVhcmU6ejR0LE1lc3NhZ2VTcXVhcmVDb2RlOmw0dCxNZXNzYWdlU3F1YXJlRGFzaGVkOmM0dCxNZXNzYWdlU3F1YXJlRGlmZjpkNHQsTWVzc2FnZVNxdWFyZURvdDpwNHQsTWVzc2FnZVNxdWFyZUhlYXJ0Omg0dCxNZXNzYWdlU3F1YXJlTG9jazp1NHQsTWVzc2FnZVNxdWFyZU1vcmU6ZjR0LE1lc3NhZ2VTcXVhcmVPZmY6bTR0LE1lc3NhZ2VTcXVhcmVQbHVzOmc0dCxNZXNzYWdlU3F1YXJlUXVvdGU6YjR0LE1lc3NhZ2VTcXVhcmVSZXBseTp2NHQsTWVzc2FnZVNxdWFyZVNoYXJlOnk0dCxNZXNzYWdlU3F1YXJlVGV4dDp4NHQsTWVzc2FnZVNxdWFyZVdhcm5pbmc6dzR0LE1lc3NhZ2VTcXVhcmVYOk00dCxNZXNzYWdlc1NxdWFyZTprNHQsTWljOkM0dCxNaWMyOiR2LE1pY09mZjpTNHQsTWljVm9jYWw6JHYsTWljcm9jaGlwOl80dCxNaWNyb3Njb3BlOlQ0dCxNaWNyb3dhdmU6TDR0LE1pbGVzdG9uZTokNHQsTWlsazpFNHQsTWlsa09mZjpBNHQsTWluaW1pemU6UDR0LE1pbmltaXplMjpENHQsTWludXM6STR0LE1pbnVzQ2lyY2xlOnBiLE1pbnVzU3F1YXJlOk55LE1vbml0b3I6WjR0LE1vbml0b3JDaGVjazpONHQsTW9uaXRvckNsb3VkOkY0dCxNb25pdG9yQ29nOk80dCxNb25pdG9yRG90OlI0dCxNb25pdG9yRG93bjpCNHQsTW9uaXRvck9mZjpINHQsTW9uaXRvclBhdXNlOnE0dCxNb25pdG9yUGxheTpWNHQsTW9uaXRvclNtYXJ0cGhvbmU6ajR0LE1vbml0b3JTcGVha2VyOlU0dCxNb25pdG9yU3RvcDpXNHQsTW9uaXRvclVwOkc0dCxNb25pdG9yWDpZNHQsTW9vbjpLNHQsTW9vblN0YXI6WDR0LE1vcmVIb3Jpem9udGFsOkliLE1vcmVWZXJ0aWNhbDpQYixNb3RvcmJpa2U6UTR0LE1vdW50YWluOmUzdCxNb3VudGFpblNub3c6SjR0LE1vdXNlOm8zdCxNb3VzZU9mZjp0M3QsTW91c2VQb2ludGVyOm4zdCxNb3VzZVBvaW50ZXIyOmkzdCxNb3VzZVBvaW50ZXIyT2ZmOmEzdCxNb3VzZVBvaW50ZXJCYW46cjN0LE1vdXNlUG9pbnRlckNsaWNrOnMzdCxNb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ6Q3ksTW92ZTp4M3QsTW92ZTNEOkF2LE1vdmUzZDpBdixNb3ZlRGlhZ29uYWw6YzN0LE1vdmVEaWFnb25hbDI6bDN0LE1vdmVEb3duOmgzdCxNb3ZlRG93bkxlZnQ6ZDN0LE1vdmVEb3duUmlnaHQ6cDN0LE1vdmVIb3Jpem9udGFsOnUzdCxNb3ZlTGVmdDpmM3QsTW92ZVJpZ2h0Om0zdCxNb3ZlVXA6djN0LE1vdmVVcExlZnQ6ZzN0LE1vdmVVcFJpZ2h0OmIzdCxNb3ZlVmVydGljYWw6eTN0LE11c2ljOmszdCxNdXNpYzI6dzN0LE11c2ljMzpNM3QsTXVzaWM0OnozdCxOYXZpZ2F0aW9uOl8zdCxOYXZpZ2F0aW9uMjpDM3QsTmF2aWdhdGlvbjJPZmY6UzN0LE5hdmlnYXRpb25PZmY6VDN0LE5ldHdvcms6TDN0LE5ld3NwYXBlcjokM3QsTmZjOkEzdCxOb25CaW5hcnk6RDN0LE5vdGVib29rOk4zdCxOb3RlYm9va1BlbjpFM3QsTm90ZWJvb2tUYWJzOlAzdCxOb3RlYm9va1RleHQ6STN0LE5vdGVwYWRUZXh0Ok8zdCxOb3RlcGFkVGV4dERhc2hlZDpGM3QsTnV0OlIzdCxOdXRPZmY6QjN0LE9jdGFnb246cTN0LE9jdGFnb25BbGVydDpEdixPY3RhZ29uTWludXM6SDN0LE9jdGFnb25QYXVzZTpFdixPY3RhZ29uWDpQdixPbWVnYTpWM3QsT3B0aW9uOlUzdCxPcmJpdDpqM3QsT3JpZ2FtaTpXM3QsT3V0ZGVudDp6bCxQYWNrYWdlOmVsdCxQYWNrYWdlMjpHM3QsUGFja2FnZUNoZWNrOlkzdCxQYWNrYWdlTWludXM6WjN0LFBhY2thZ2VPcGVuOlgzdCxQYWNrYWdlUGx1czpLM3QsUGFja2FnZVNlYXJjaDpRM3QsUGFja2FnZVg6SjN0LFBhaW50QnVja2V0OmFsdCxQYWludFJvbGxlcjp0bHQsUGFpbnRicnVzaDppbHQsUGFpbnRicnVzaDI6SXYsUGFpbnRicnVzaFZlcnRpY2FsOkl2LFBhbGV0dGU6cmx0LFBhbG10cmVlOmN4LFBhbmRhOnNsdCxQYW5lbEJvdHRvbTpsbHQsUGFuZWxCb3R0b21DbG9zZTpubHQsUGFuZWxCb3R0b21EYXNoZWQ6TnYsUGFuZWxCb3R0b21JbmFjdGl2ZTpOdixQYW5lbEJvdHRvbU9wZW46b2x0LFBhbmVsTGVmdDpCdixQYW5lbExlZnRDbG9zZTpGdixQYW5lbExlZnREYXNoZWQ6T3YsUGFuZWxMZWZ0SW5hY3RpdmU6T3YsUGFuZWxMZWZ0T3BlbjpSdixQYW5lbExlZnRSaWdodERhc2hlZDpjbHQsUGFuZWxSaWdodDpobHQsUGFuZWxSaWdodENsb3NlOmRsdCxQYW5lbFJpZ2h0RGFzaGVkOkh2LFBhbmVsUmlnaHRJbmFjdGl2ZTpIdixQYW5lbFJpZ2h0T3BlbjpwbHQsUGFuZWxUb3A6Z2x0LFBhbmVsVG9wQm90dG9tRGFzaGVkOnVsdCxQYW5lbFRvcENsb3NlOmZsdCxQYW5lbFRvcERhc2hlZDpxdixQYW5lbFRvcEluYWN0aXZlOnF2LFBhbmVsVG9wT3BlbjptbHQsUGFuZWxzTGVmdEJvdHRvbTpibHQsUGFuZWxzTGVmdFJpZ2h0OiRiLFBhbmVsc1JpZ2h0Qm90dG9tOnZsdCxQYW5lbHNUb3BCb3R0b206WHYsUGFuZWxzVG9wTGVmdDpWdixQYXBlcmNsaXA6eWx0LFBhcmVudGhlc2VzOnhsdCxQYXJraW5nQ2lyY2xlOnViLFBhcmtpbmdDaXJjbGVPZmY6aGIsUGFya2luZ01ldGVyOndsdCxQYXJraW5nU3F1YXJlOlJ5LFBhcmtpbmdTcXVhcmVPZmY6T3ksUGFydHlQb3BwZXI6TWx0LFBhdXNlOnpsdCxQYXVzZUNpcmNsZTpmYixQYXVzZU9jdGFnb246RXYsUGF3UHJpbnQ6a2x0LFBjQ2FzZTpTbHQsUGVuOlV2LFBlbkJveDpsbyxQZW5MaW5lOmp2LFBlbk9mZjpDbHQsUGVuU3F1YXJlOmxvLFBlblRvb2w6X2x0LFBlbmNpbDpEbHQsUGVuY2lsTGluZTpUbHQsUGVuY2lsT2ZmOkxsdCxQZW5jaWxSdWxlcjokbHQsUGVudGFnb246QWx0LFBlcmNlbnQ6RWx0LFBlcmNlbnRDaXJjbGU6bWIsUGVyY2VudERpYW1vbmQ6RGIsUGVyY2VudFNxdWFyZTpIeSxQZXJzb25TdGFuZGluZzpQbHQsUGhpbGlwcGluZVBlc286SWx0LFBob25lOnFsdCxQaG9uZUNhbGw6Tmx0LFBob25lRm9yd2FyZGVkOkZsdCxQaG9uZUluY29taW5nOk9sdCxQaG9uZU1pc3NlZDpSbHQsUGhvbmVPZmY6Qmx0LFBob25lT3V0Z29pbmc6SGx0LFBpOlZsdCxQaVNxdWFyZTpCeSxQaWFubzpqbHQsUGlja2F4ZTpVbHQsUGljdHVyZUluUGljdHVyZTpZbHQsUGljdHVyZUluUGljdHVyZTI6V2x0LFBpZUNoYXJ0OlVnLFBpZ2d5QmFuazpHbHQsUGlsY3JvdzpLbHQsUGlsY3Jvd0xlZnQ6Wmx0LFBpbGNyb3dSaWdodDpYbHQsUGlsY3Jvd1NxdWFyZTpxeSxQaWxsOkpsdCxQaWxsQm90dGxlOlFsdCxQaW46dGN0LFBpbk9mZjplY3QsUGlwZXR0ZTphY3QsUGl6emE6aWN0LFBsYW5lOm5jdCxQbGFuZUxhbmRpbmc6cmN0LFBsYW5lVGFrZW9mZjpzY3QsUGxheTpvY3QsUGxheUNpcmNsZTpnYixQbGF5U3F1YXJlOlZ5LFBsdWc6Y2N0LFBsdWcyOmxjdCxQbHVnWmFwOld2LFBsdWdaYXAyOld2LFBsdXM6ZGN0LFBsdXNDaXJjbGU6YmIsUGx1c1NxdWFyZTpqeSxQb2NrZXQ6dWN0LFBvY2tldEtuaWZlOnBjdCxQb2RjYXN0OmhjdCxQb2ludGVyOm1jdCxQb2ludGVyT2ZmOmZjdCxQb3Bjb3JuOmdjdCxQb3BzaWNsZTpiY3QsUG91bmRTdGVybGluZzp2Y3QsUG93ZXI6eGN0LFBvd2VyQ2lyY2xlOnZiLFBvd2VyT2ZmOnljdCxQb3dlclNxdWFyZTpVeSxQcmVzZW50YXRpb246TWN0LFByaW50ZXI6a2N0LFByaW50ZXJDaGVjazp3Y3QsUHJpbnRlclg6emN0LFByb2plY3RvcjpTY3QsUHJvcG9ydGlvbnM6Q2N0LFB1enpsZTpfY3QsUHlyYW1pZDpUY3QsUXJDb2RlOkxjdCxRdW90ZTokY3QsUmFiYml0OkFjdCxSYWRhcjpEY3QsUmFkaWF0aW9uOkVjdCxSYWRpY2FsOlBjdCxSYWRpbzpGY3QsUmFkaW9SZWNlaXZlcjpJY3QsUmFkaW9Ub3dlcjpOY3QsUmFkaXVzOk9jdCxSYWlsU3ltYm9sOlJjdCxSYWluYm93OkJjdCxSYXQ6SGN0LFJhdGlvOnFjdCxSZWNlaXB0OlFjdCxSZWNlaXB0Q2VudDpWY3QsUmVjZWlwdEV1cm86amN0LFJlY2VpcHRJbmRpYW5SdXBlZTpVY3QsUmVjZWlwdEphcGFuZXNlWWVuOldjdCxSZWNlaXB0UG91bmRTdGVybGluZzpHY3QsUmVjZWlwdFJ1c3NpYW5SdWJsZTpZY3QsUmVjZWlwdFN3aXNzRnJhbmM6WmN0LFJlY2VpcHRUZXh0OlhjdCxSZWNlaXB0VHVya2lzaExpcmE6S2N0LFJlY3RhbmdsZUNpcmNsZTpKY3QsUmVjdGFuZ2xlRWxsaXBzaXM6R3YsUmVjdGFuZ2xlR29nZ2xlczp0NnQsUmVjdGFuZ2xlSG9yaXpvbnRhbDplNnQsUmVjdGFuZ2xlVmVydGljYWw6YTZ0LFJlY3ljbGU6aTZ0LFJlZG86bjZ0LFJlZG8yOnM2dCxSZWRvRG90OnI2dCxSZWZyZXNoQ2N3Omw2dCxSZWZyZXNoQ2N3RG90Om82dCxSZWZyZXNoQ3c6ZDZ0LFJlZnJlc2hDd09mZjpjNnQsUmVmcmlnZXJhdG9yOnA2dCxSZWdleDpoNnQsUmVtb3ZlRm9ybWF0dGluZzp1NnQsUmVwZWF0Omc2dCxSZXBlYXQxOm02dCxSZXBlYXQyOmY2dCxSZXBsYWNlOnY2dCxSZXBsYWNlQWxsOmI2dCxSZXBseTp4NnQsUmVwbHlBbGw6eTZ0LFJld2luZDp3NnQsUmliYm9uOk02dCxSb2NrZXQ6ejZ0LFJvY2tpbmdDaGFpcjprNnQsUm9sbGVyQ29hc3RlcjpTNnQsUm9zZTpDNnQsUm90YXRlM0Q6WXYsUm90YXRlM2Q6WXYsUm90YXRlQ2N3Okw2dCxSb3RhdGVDY3dLZXk6XzZ0LFJvdGF0ZUNjd1NxdWFyZTpUNnQsUm90YXRlQ3c6QTZ0LFJvdGF0ZUN3U3F1YXJlOiQ2dCxSb3V0ZTpFNnQsUm91dGVPZmY6RDZ0LFJvdXRlcjpQNnQsUm93czpadixSb3dzMjpadixSb3dzMzpYdixSb3dzNDpJNnQsUnNzOk42dCxSdWxlcjpSNnQsUnVsZXJEaW1lbnNpb25MaW5lOkY2dCxSdXNzaWFuUnVibGU6TzZ0LFNhaWxib2F0Okg2dCxTYWxhZDpCNnQsU2FuZHdpY2g6cTZ0LFNhdGVsbGl0ZTpqNnQsU2F0ZWxsaXRlRGlzaDpWNnQsU2F1ZGlSaXlhbDpVNnQsU2F2ZTpZNnQsU2F2ZUFsbDpXNnQsU2F2ZU9mZjpHNnQsU2NhbGU6WjZ0LFNjYWxlM0Q6S3YsU2NhbGUzZDpLdixTY2FsaW5nOlg2dCxTY2FuOnM1dCxTY2FuQmFyY29kZTpRNnQsU2NhbkV5ZTpLNnQsU2NhbkZhY2U6SjZ0LFNjYW5IZWFydDplNXQsU2NhbkxpbmU6dDV0LFNjYW5RckNvZGU6YTV0LFNjYW5TZWFyY2g6aTV0LFNjYW5UZXh0OnI1dCxTY2F0dGVyQ2hhcnQ6V2csU2Nob29sOm41dCxTY2hvb2wyOmh4LFNjaXNzb3JzOmw1dCxTY2lzc29yc0xpbmVEYXNoZWQ6bzV0LFNjaXNzb3JzU3F1YXJlOld5LFNjaXNzb3JzU3F1YXJlRGFzaGVkQm90dG9tOmJ5LFNjb290ZXI6YzV0LFNjcmVlblNoYXJlOnA1dCxTY3JlZW5TaGFyZU9mZjpkNXQsU2Nyb2xsOmg1dCxTY3JvbGxUZXh0OnU1dCxTZWFyY2g6eTV0LFNlYXJjaEFsZXJ0OmY1dCxTZWFyY2hDaGVjazptNXQsU2VhcmNoQ29kZTpnNXQsU2VhcmNoU2xhc2g6YjV0LFNlYXJjaFg6djV0LFNlY3Rpb246eDV0LFNlbmQ6TTV0LFNlbmRIb3Jpem9uYWw6UXYsU2VuZEhvcml6b250YWw6UXYsU2VuZFRvQmFjazp3NXQsU2VwYXJhdG9ySG9yaXpvbnRhbDprNXQsU2VwYXJhdG9yVmVydGljYWw6ejV0LFNlcnZlcjpUNXQsU2VydmVyQ29nOlM1dCxTZXJ2ZXJDcmFzaDpDNXQsU2VydmVyT2ZmOl81dCxTZXR0aW5nczokNXQsU2V0dGluZ3MyOkw1dCxTaGFwZXM6QTV0LFNoYXJlOkU1dCxTaGFyZTI6RDV0LFNoZWV0OlA1dCxTaGVsbDpJNXQsU2hpZWxkOlU1dCxTaGllbGRBbGVydDpONXQsU2hpZWxkQmFuOkY1dCxTaGllbGRDaGVjazpPNXQsU2hpZWxkQ2xvc2U6ZXksU2hpZWxkRWxsaXBzaXM6UjV0LFNoaWVsZEhhbGY6QjV0LFNoaWVsZE1pbnVzOkg1dCxTaGllbGRPZmY6cTV0LFNoaWVsZFBsdXM6VjV0LFNoaWVsZFF1ZXN0aW9uOkp2LFNoaWVsZFF1ZXN0aW9uTWFyazpKdixTaGllbGRVc2VyOmo1dCxTaGllbGRYOmV5LFNoaXA6RzV0LFNoaXBXaGVlbDpXNXQsU2hpcnQ6WTV0LFNob3BwaW5nQmFnOlo1dCxTaG9wcGluZ0Jhc2tldDpYNXQsU2hvcHBpbmdDYXJ0Oks1dCxTaG92ZWw6UTV0LFNob3dlckhlYWQ6SjV0LFNocmVkZGVyOmU4dCxTaHJpbXA6dDh0LFNocmluazphOHQsU2hydWI6cjh0LFNodWZmbGU6aTh0LFNpZGViYXI6QnYsU2lkZWJhckNsb3NlOkZ2LFNpZGViYXJPcGVuOlJ2LFNpZ21hOnM4dCxTaWdtYVNxdWFyZTpHeSxTaWduYWw6ZDh0LFNpZ25hbEhpZ2g6bjh0LFNpZ25hbExvdzpvOHQsU2lnbmFsTWVkaXVtOmw4dCxTaWduYWxaZXJvOmM4dCxTaWduYXR1cmU6cDh0LFNpZ25wb3N0OnU4dCxTaWducG9zdEJpZzpoOHQsU2lyZW46Zjh0LFNraXBCYWNrOm04dCxTa2lwRm9yd2FyZDpnOHQsU2t1bGw6Yjh0LFNsYWNrOnY4dCxTbGFzaDp5OHQsU2xhc2hTcXVhcmU6WXksU2xpY2U6eDh0LFNsaWRlcnM6dHksU2xpZGVyc0hvcml6b250YWw6dzh0LFNsaWRlcnNWZXJ0aWNhbDp0eSxTbWFydHBob25lOms4dCxTbWFydHBob25lQ2hhcmdpbmc6TTh0LFNtYXJ0cGhvbmVOZmM6ejh0LFNtaWxlOkM4dCxTbWlsZVBsdXM6Uzh0LFNuYWlsOl84dCxTbm93Zmxha2U6TDh0LFNvYXBEaXNwZW5zZXJEcm9wbGV0OlQ4dCxTb2ZhOiQ4dCxTb2xhclBhbmVsOkE4dCxTb3J0QXNjOmtnLFNvcnREZXNjOndnLFNvdXA6RDh0LFNwYWNlOkU4dCxTcGFkZTpQOHQsU3BhcmtsZTpJOHQsU3BhcmtsZXM6YXksU3BlYWtlcjpOOHQsU3BlZWNoOkY4dCxTcGVsbENoZWNrOlI4dCxTcGVsbENoZWNrMjpPOHQsU3BsaW5lOkg4dCxTcGxpbmVQb2ludGVyOkI4dCxTcGxpdDpxOHQsU3BsaXRTcXVhcmVIb3Jpem9udGFsOlp5LFNwbGl0U3F1YXJlVmVydGljYWw6WHksU3Bvb2w6Vjh0LFNwb3RsaWdodDpqOHQsU3ByYXlDYW46VTh0LFNwcm91dDpXOHQsU3F1YXJlOmlkdCxTcXVhcmVBY3Rpdml0eTpyeSxTcXVhcmVBcnJvd0Rvd246bnksU3F1YXJlQXJyb3dEb3duTGVmdDppeSxTcXVhcmVBcnJvd0Rvd25SaWdodDpzeSxTcXVhcmVBcnJvd0xlZnQ6b3ksU3F1YXJlQXJyb3dPdXREb3duTGVmdDpseSxTcXVhcmVBcnJvd091dERvd25SaWdodDpkeSxTcXVhcmVBcnJvd091dFVwTGVmdDpjeSxTcXVhcmVBcnJvd091dFVwUmlnaHQ6cHksU3F1YXJlQXJyb3dSaWdodDpoeSxTcXVhcmVBcnJvd1VwOm15LFNxdWFyZUFycm93VXBMZWZ0OnV5LFNxdWFyZUFycm93VXBSaWdodDpmeSxTcXVhcmVBc3RlcmlzazpneSxTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczpieSxTcXVhcmVDaGFydEdhbnR0OlNsLFNxdWFyZUNoZWNrOnl5LFNxdWFyZUNoZWNrQmlnOnZ5LFNxdWFyZUNoZXZyb25Eb3duOnh5LFNxdWFyZUNoZXZyb25MZWZ0Ond5LFNxdWFyZUNoZXZyb25SaWdodDpNeSxTcXVhcmVDaGV2cm9uVXA6enksU3F1YXJlQ29kZTpreSxTcXVhcmVEYXNoZWQ6X3ksU3F1YXJlRGFzaGVkQm90dG9tOlk4dCxTcXVhcmVEYXNoZWRCb3R0b21Db2RlOkc4dCxTcXVhcmVEYXNoZWRLYW5iYW46U3ksU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyOkN5LFNxdWFyZURhc2hlZFRvcFNvbGlkOlo4dCxTcXVhcmVEaXZpZGU6VHksU3F1YXJlRG90Okx5LFNxdWFyZUVxdWFsOiR5LFNxdWFyZUZ1bmN0aW9uOkF5LFNxdWFyZUdhbnR0Q2hhcnQ6U2wsU3F1YXJlS2FuYmFuOkR5LFNxdWFyZUxpYnJhcnk6RXksU3F1YXJlTTpQeSxTcXVhcmVNZW51Okl5LFNxdWFyZU1pbnVzOk55LFNxdWFyZU1vdXNlUG9pbnRlcjpGeSxTcXVhcmVQYXJraW5nOlJ5LFNxdWFyZVBhcmtpbmdPZmY6T3ksU3F1YXJlUGF1c2U6WDh0LFNxdWFyZVBlbjpsbyxTcXVhcmVQZXJjZW50Okh5LFNxdWFyZVBpOkJ5LFNxdWFyZVBpbGNyb3c6cXksU3F1YXJlUGxheTpWeSxTcXVhcmVQbHVzOmp5LFNxdWFyZVBvd2VyOlV5LFNxdWFyZVJhZGljYWw6UTh0LFNxdWFyZVJvdW5kQ29ybmVyOks4dCxTcXVhcmVTY2lzc29yczpXeSxTcXVhcmVTaWdtYTpHeSxTcXVhcmVTbGFzaDpZeSxTcXVhcmVTcGxpdEhvcml6b250YWw6WnksU3F1YXJlU3BsaXRWZXJ0aWNhbDpYeSxTcXVhcmVTcXVhcmU6ZWR0LFNxdWFyZVN0YWNrOko4dCxTcXVhcmVTdGFyOnRkdCxTcXVhcmVTdG9wOmFkdCxTcXVhcmVUZXJtaW5hbDpLeSxTcXVhcmVVc2VyOkp5LFNxdWFyZVVzZXJSb3VuZDpReSxTcXVhcmVYOmV4LFNxdWFyZXNFeGNsdWRlOnJkdCxTcXVhcmVzSW50ZXJzZWN0OnNkdCxTcXVhcmVzU3VidHJhY3Q6bmR0LFNxdWFyZXNVbml0ZTpvZHQsU3F1aXJjbGU6Y2R0LFNxdWlyY2xlRGFzaGVkOmxkdCxTcXVpcnJlbDpkZHQsU3RhbXA6cGR0LFN0YXI6ZmR0LFN0YXJIYWxmOmhkdCxTdGFyT2ZmOnVkdCxTdGFyczpheSxTdGVwQmFjazptZHQsU3RlcEZvcndhcmQ6Z2R0LFN0ZXRob3Njb3BlOmJkdCxTdGlja2VyOnZkdCxTdGlja3lOb3RlOnlkdCxTdG9uZTp4ZHQsU3RvcENpcmNsZTp4YixTdG9yZTp3ZHQsU3RyZXRjaEhvcml6b250YWw6TWR0LFN0cmV0Y2hWZXJ0aWNhbDp6ZHQsU3RyaWtldGhyb3VnaDprZHQsU3Vic2NyaXB0OlNkdCxTdWJ0aXRsZXM6RWcsU3VuOiRkdCxTdW5EaW06Q2R0LFN1bk1lZGl1bTpfZHQsU3VuTW9vbjpUZHQsU3VuU25vdzpMZHQsU3VucmlzZTpBZHQsU3Vuc2V0OkRkdCxTdXBlcnNjcmlwdDpFZHQsU3dhdGNoQm9vazpQZHQsU3dpc3NGcmFuYzpJZHQsU3dpdGNoQ2FtZXJhOk5kdCxTd29yZDpGZHQsU3dvcmRzOk9kdCxTeXJpbmdlOlJkdCxUYWJsZTpHZHQsVGFibGUyOkJkdCxUYWJsZUNlbGxzTWVyZ2U6SGR0LFRhYmxlQ2VsbHNTcGxpdDpxZHQsVGFibGVDb2x1bW5zU3BsaXQ6VmR0LFRhYmxlQ29uZmlnOnhsLFRhYmxlT2ZDb250ZW50czpqZHQsVGFibGVQcm9wZXJ0aWVzOlVkdCxUYWJsZVJvd3NTcGxpdDpXZHQsVGFibGV0OllkdCxUYWJsZXRTbWFydHBob25lOlpkdCxUYWJsZXRzOlhkdCxUYWc6S2R0LFRhZ3M6UWR0LFRhbGx5MTpKZHQsVGFsbHkyOmU3dCxUYWxseTM6dDd0LFRhbGx5NDphN3QsVGFsbHk1Omk3dCxUYW5nZW50OnI3dCxUYXJnZXQ6czd0LFRlbGVzY29wZTpuN3QsVGVudDpsN3QsVGVudFRyZWU6bzd0LFRlcm1pbmFsOmM3dCxUZXJtaW5hbFNxdWFyZTpLeSxUZXN0VHViZTpkN3QsVGVzdFR1YmUyOnR4LFRlc3RUdWJlRGlhZ29uYWw6dHgsVGVzdFR1YmVzOnA3dCxUZXh0OkNsLFRleHRBbGlnbkNlbnRlcjpheCxUZXh0QWxpZ25FbmQ6aXgsVGV4dEFsaWduSnVzdGlmeTpyeCxUZXh0QWxpZ25TdGFydDpDbCxUZXh0Q3Vyc29yOnU3dCxUZXh0Q3Vyc29ySW5wdXQ6aDd0LFRleHRJbml0aWFsOnN4LFRleHRRdW90ZTpmN3QsVGV4dFNlYXJjaDptN3QsVGV4dFNlbGVjdDpueCxUZXh0U2VsZWN0aW9uOm54LFRleHRXcmFwOm94LFRoZWF0ZXI6Zzd0LFRoZXJtb21ldGVyOnk3dCxUaGVybW9tZXRlclNub3dmbGFrZTpiN3QsVGhlcm1vbWV0ZXJTdW46djd0LFRodW1ic0Rvd246eDd0LFRodW1ic1VwOnc3dCxUaWNrZXQ6VDd0LFRpY2tldENoZWNrOk03dCxUaWNrZXRNaW51czp6N3QsVGlja2V0UGVyY2VudDprN3QsVGlja2V0UGx1czpTN3QsVGlja2V0U2xhc2g6Qzd0LFRpY2tldFg6Xzd0LFRpY2tldHM6QTd0LFRpY2tldHNQbGFuZTpMN3QsVGltZXI6RTd0LFRpbWVyT2ZmOiQ3dCxUaW1lclJlc2V0OkQ3dCxUb2dnbGVMZWZ0OlA3dCxUb2dnbGVSaWdodDpJN3QsVG9pbGV0Ok43dCxUb29sQ2FzZTpGN3QsVG9vbGJveDpPN3QsVG9ybmFkbzpSN3QsVG9ydXM6Qjd0LFRvdWNocGFkOnE3dCxUb3VjaHBhZE9mZjpIN3QsVG93ZXJDb250cm9sOlY3dCxUb3lCcmljazpqN3QsVHJhY3RvcjpVN3QsVHJhZmZpY0NvbmU6Vzd0LFRyYWluOmx4LFRyYWluRnJvbnQ6WTd0LFRyYWluRnJvbnRUdW5uZWw6Rzd0LFRyYWluVHJhY2s6Wjd0LFRyYW1Gcm9udDpseCxUcmFuc2dlbmRlcjpYN3QsVHJhc2g6UTd0LFRyYXNoMjpLN3QsVHJlZURlY2lkdW91czpKN3QsVHJlZVBhbG06Y3gsVHJlZVBpbmU6ZXB0LFRyZWVzOnRwdCxUcmVsbG86YXB0LFRyZW5kaW5nRG93bjppcHQsVHJlbmRpbmdVcDpzcHQsVHJlbmRpbmdVcERvd246cnB0LFRyaWFuZ2xlOmxwdCxUcmlhbmdsZUFsZXJ0OmR4LFRyaWFuZ2xlRGFzaGVkOm5wdCxUcmlhbmdsZVJpZ2h0Om9wdCxUcm9waHk6ZHB0LFRydWNrOnBwdCxUcnVja0VsZWN0cmljOmNwdCxUdXJraXNoTGlyYTpocHQsVHVybnRhYmxlOnVwdCxUdXJ0bGU6ZnB0LFR2OmdwdCxUdjI6cHgsVHZNaW5pbWFsOnB4LFR2TWluaW1hbFBsYXk6bXB0LFR3aXRjaDpicHQsVHdpdHRlcjp2cHQsVHlwZTp4cHQsVHlwZU91dGxpbmU6eXB0LFVtYnJlbGxhOk1wdCxVbWJyZWxsYU9mZjp3cHQsVW5kZXJsaW5lOnpwdCxVbmRvOkNwdCxVbmRvMjprcHQsVW5kb0RvdDpTcHQsVW5mb2xkSG9yaXpvbnRhbDpfcHQsVW5mb2xkVmVydGljYWw6VHB0LFVuZ3JvdXA6THB0LFVuaXZlcnNpdHk6aHgsVW5saW5rOiRwdCxVbmxpbmsyOkFwdCxVbmxvY2s6Q3YsVW5sb2NrS2V5aG9sZTpTdixVbnBsdWc6RHB0LFVwbG9hZDpFcHQsVXBsb2FkQ2xvdWQ6X2IsVXNiOlBwdCxVc2VyOllwdCxVc2VyMjp2eCxVc2VyQ2hlY2s6SXB0LFVzZXJDaGVjazI6dXgsVXNlckNpcmNsZTpNYixVc2VyQ2lyY2xlMjp3YixVc2VyQ29nOk5wdCxVc2VyQ29nMjpmeCxVc2VyS2V5OkZwdCxVc2VyTG9jazpPcHQsVXNlck1pbnVzOlJwdCxVc2VyTWludXMyOm14LFVzZXJQZW46QnB0LFVzZXJQbHVzOkhwdCxVc2VyUGx1czI6Z3gsVXNlclJvdW5kOnZ4LFVzZXJSb3VuZENoZWNrOnV4LFVzZXJSb3VuZENvZzpmeCxVc2VyUm91bmRLZXk6cXB0LFVzZXJSb3VuZE1pbnVzOm14LFVzZXJSb3VuZFBlbjpWcHQsVXNlclJvdW5kUGx1czpneCxVc2VyUm91bmRTZWFyY2g6anB0LFVzZXJSb3VuZFg6YngsVXNlclNlYXJjaDpVcHQsVXNlclNxdWFyZTpKeSxVc2VyU3F1YXJlMjpReSxVc2VyU3RhcjpXcHQsVXNlclg6R3B0LFVzZXJYMjpieCxVc2VyczpacHQsVXNlcnMyOnl4LFVzZXJzUm91bmQ6eXgsVXRlbnNpbHM6d3gsVXRlbnNpbHNDcm9zc2VkOnh4LFV0aWxpdHlQb2xlOlhwdCxWYW46S3B0LFZhcmlhYmxlOlFwdCxWYXVsdDpKcHQsVmVjdG9yU3F1YXJlOmVodCxWZWdhbjp0aHQsVmVuZXRpYW5NYXNrOmFodCxWZW51czpyaHQsVmVudXNBbmRNYXJzOmlodCxWZXJpZmllZDpfZyxWaWJyYXRlOm5odCxWaWJyYXRlT2ZmOnNodCxWaWRlbzpsaHQsVmlkZW9PZmY6b2h0LFZpZGVvdGFwZTpjaHQsVmlldzpkaHQsVm9pY2VtYWlsOnBodCxWb2xsZXliYWxsOmhodCxWb2x1bWU6dmh0LFZvbHVtZTE6dWh0LFZvbHVtZTI6Zmh0LFZvbHVtZU9mZjptaHQsVm9sdW1lWDpnaHQsVm90ZTpiaHQsV2FsbGV0OnhodCxXYWxsZXQyOk14LFdhbGxldENhcmRzOnlodCxXYWxsZXRNaW5pbWFsOk14LFdhbGxwYXBlcjp3aHQsV2FuZDpNaHQsV2FuZDI6engsV2FuZFNwYXJrbGVzOnp4LFdhcmVob3VzZTp6aHQsV2FzaGluZ01hY2hpbmU6a2h0LFdhdGNoOlNodCxXYXZlczpMaHQsV2F2ZXNBcnJvd0Rvd246Q2h0LFdhdmVzQXJyb3dVcDpfaHQsV2F2ZXNMYWRkZXI6VGh0LFdheXBvaW50czokaHQsV2ViY2FtOkFodCxXZWJob29rOkVodCxXZWJob29rT2ZmOkRodCxXZWlnaHQ6Tmh0LFdlaWdodFRpbGRlOlBodCxXaGVhdDpGaHQsV2hlYXRPZmY6SWh0LFdob2xlV29yZDpPaHQsV2lmaTpXaHQsV2lmaUNvZzpSaHQsV2lmaUhpZ2g6Qmh0LFdpZmlMb3c6SGh0LFdpZmlPZmY6cWh0LFdpZmlQZW46Vmh0LFdpZmlTeW5jOmpodCxXaWZpWmVybzpVaHQsV2luZDpZaHQsV2luZEFycm93RG93bjpHaHQsV2luZTpaaHQsV2luZU9mZjpLaHQsV29ya2Zsb3c6WGh0LFdvcm06UWh0LFdyYXBUZXh0Om94LFdyZW5jaDp0OXQsWDpKaHQsWENpcmNsZTp6YixYT2N0YWdvbjpQdixYU3F1YXJlOmV4LFlvdXR1YmU6ZTl0LFphcDppOXQsWmFwT2ZmOmE5dCxab29tSW46czl0LFpvb21PdXQ6cjl0fSksbjl0PSh7aWNvbnM6dD17fSxuYW1lQXR0cjplPSJkYXRhLWx1Y2lkZSIsYXR0cnM6YT17fSxyb290Omk9ZG9jdW1lbnQsaW5UZW1wbGF0ZXM6cn09e30pPT57aWYoIU9iamVjdC52YWx1ZXModCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgYW4gaWNvbnMgb2JqZWN0LgpJZiB5b3Ugd2FudCB0byB1c2UgYWxsIHRoZSBpY29ucyB5b3UgY2FuIGltcG9ydCBpdCBsaWtlOgogXGBpbXBvcnQgeyBjcmVhdGVJY29ucywgaWNvbnMgfSBmcm9tICdsdWNpZGUnOwpsdWNpZGUuY3JlYXRlSWNvbnMoe2ljb25zfSk7XGBgKTtpZih0eXBlb2YgaT4idSIpdGhyb3cgbmV3IEVycm9yKCJgY3JlYXRlSWNvbnMoKWAgb25seSB3b3JrcyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIik7aWYoQXJyYXkuZnJvbShpLnF1ZXJ5U2VsZWN0b3JBbGwoYFske2V9XWApKS5mb3JFYWNoKG49Pk1aZShuLHtuYW1lQXR0cjplLGljb25zOnQsYXR0cnM6YX0pKSxyJiZBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbCgidGVtcGxhdGUiKSkuZm9yRWFjaChvPT5uOXQoe2ljb25zOnQsbmFtZUF0dHI6ZSxhdHRyczphLHJvb3Q6by5jb250ZW50LGluVGVtcGxhdGVzOnJ9KSksZT09PSJkYXRhLWx1Y2lkZSIpe2xldCBuPWkucXVlcnlTZWxlY3RvckFsbCgiW2ljb24tbmFtZV0iKTtuLmxlbmd0aD4wJiYoY29uc29sZS53YXJuKCJbTHVjaWRlXSBTb21lIGljb25zIHdlcmUgZm91bmQgd2l0aCB0aGUgbm93IGRlcHJlY2F0ZWQgaWNvbi1uYW1lIGF0dHJpYnV0ZS4gVGhlc2Ugd2lsbCBzdGlsbCBiZSByZXBsYWNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCB3aWxsIG5vIGxvbmdlciBiZSBzdXBwb3J0ZWQgaW4gdjEuMCBhbmQgeW91IHNob3VsZCBzd2l0Y2ggdG8gZGF0YS1sdWNpZGUiKSxBcnJheS5mcm9tKG4pLmZvckVhY2gobz0+TVplKG8se25hbWVBdHRyOiJpY29uLW5hbWUiLGljb25zOnQsYXR0cnM6YX0pKSl9fTt1LkFBcnJvd0Rvd249elplLHUuQUFycm93VXA9a1plLHUuQUxhcmdlU21hbGw9U1plLHUuQWNjZXNzaWJpbGl0eT1DWmUsdS5BY3Rpdml0eT1UWmUsdS5BY3Rpdml0eVNxdWFyZT1yeSx1LkFpclZlbnQ9X1plLHUuQWlycGxheT1MWmUsdS5BbGFybUNoZWNrPWJnLHUuQWxhcm1DbG9jaz1BWmUsdS5BbGFybUNsb2NrQ2hlY2s9YmcsdS5BbGFybUNsb2NrTWludXM9dmcsdS5BbGFybUNsb2NrT2ZmPSRaZSx1LkFsYXJtQ2xvY2tQbHVzPXlnLHUuQWxhcm1NaW51cz12Zyx1LkFsYXJtUGx1cz15Zyx1LkFsYXJtU21va2U9RFplLHUuQWxidW09RVplLHUuQWxlcnRDaXJjbGU9WWcsdS5BbGVydE9jdGFnb249RHYsdS5BbGVydFRyaWFuZ2xlPWR4LHUuQWxpZ25DZW50ZXI9YXgsdS5BbGlnbkNlbnRlckhvcml6b250YWw9UFplLHUuQWxpZ25DZW50ZXJWZXJ0aWNhbD1JWmUsdS5BbGlnbkVuZEhvcml6b250YWw9TlplLHUuQWxpZ25FbmRWZXJ0aWNhbD1GWmUsdS5BbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyPU9aZSx1LkFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ9UlplLHUuQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0PUJaZSx1LkFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI9SFplLHUuQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZD1xWmUsdS5BbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQ9VlplLHUuQWxpZ25Ib3Jpem9udGFsU3BhY2VBcm91bmQ9alplLHUuQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuPVVaZSx1LkFsaWduSnVzdGlmeT1yeCx1LkFsaWduTGVmdD1DbCx1LkFsaWduUmlnaHQ9aXgsdS5BbGlnblN0YXJ0SG9yaXpvbnRhbD1XWmUsdS5BbGlnblN0YXJ0VmVydGljYWw9R1plLHUuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI9WVplLHUuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ9WlplLHUuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydD1YWmUsdS5BbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcj1LWmUsdS5BbGlnblZlcnRpY2FsSnVzdGlmeUVuZD1RWmUsdS5BbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0PUpaZSx1LkFsaWduVmVydGljYWxTcGFjZUFyb3VuZD1lWGUsdS5BbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuPXRYZSx1LkFtYnVsYW5jZT1hWGUsdS5BbXBlcnNhbmQ9aVhlLHUuQW1wZXJzYW5kcz1yWGUsdS5BbXBob3JhPXNYZSx1LkFuY2hvcj1uWGUsdS5BbmdyeT1vWGUsdS5Bbm5veWVkPWxYZSx1LkFudGVubmE9Y1hlLHUuQW52aWw9ZFhlLHUuQXBlcnR1cmU9cFhlLHUuQXBwV2luZG93PXVYZSx1LkFwcFdpbmRvd01hYz1oWGUsdS5BcHBsZT1mWGUsdS5BcmNoaXZlPWJYZSx1LkFyY2hpdmVSZXN0b3JlPW1YZSx1LkFyY2hpdmVYPWdYZSx1LkFyZWFDaGFydD1QZyx1LkFybWNoYWlyPXZYZSx1LkFycm93QmlnRG93bj14WGUsdS5BcnJvd0JpZ0Rvd25EYXNoPXlYZSx1LkFycm93QmlnTGVmdD1NWGUsdS5BcnJvd0JpZ0xlZnREYXNoPXdYZSx1LkFycm93QmlnUmlnaHQ9a1hlLHUuQXJyb3dCaWdSaWdodERhc2g9elhlLHUuQXJyb3dCaWdVcD1DWGUsdS5BcnJvd0JpZ1VwRGFzaD1TWGUsdS5BcnJvd0Rvd249TlhlLHUuQXJyb3dEb3duMDE9X1hlLHUuQXJyb3dEb3duMTA9VFhlLHUuQXJyb3dEb3duQVo9eGcsdS5BcnJvd0Rvd25Bej14Zyx1LkFycm93RG93bkNpcmNsZT1aZyx1LkFycm93RG93bkZyb21MaW5lPUxYZSx1LkFycm93RG93bkxlZnQ9JFhlLHUuQXJyb3dEb3duTGVmdEZyb21DaXJjbGU9S2csdS5BcnJvd0Rvd25MZWZ0RnJvbVNxdWFyZT1seSx1LkFycm93RG93bkxlZnRTcXVhcmU9aXksdS5BcnJvd0Rvd25OYXJyb3dXaWRlPUFYZSx1LkFycm93RG93blJpZ2h0PURYZSx1LkFycm93RG93blJpZ2h0RnJvbUNpcmNsZT1RZyx1LkFycm93RG93blJpZ2h0RnJvbVNxdWFyZT1keSx1LkFycm93RG93blJpZ2h0U3F1YXJlPXN5LHUuQXJyb3dEb3duU3F1YXJlPW55LHUuQXJyb3dEb3duVG9Eb3Q9RVhlLHUuQXJyb3dEb3duVG9MaW5lPVBYZSx1LkFycm93RG93blVwPUlYZSx1LkFycm93RG93bldpZGVOYXJyb3c9d2csdS5BcnJvd0Rvd25aQT1NZyx1LkFycm93RG93blphPU1nLHUuQXJyb3dMZWZ0PUJYZSx1LkFycm93TGVmdENpcmNsZT1YZyx1LkFycm93TGVmdEZyb21MaW5lPUZYZSx1LkFycm93TGVmdFJpZ2h0PU9YZSx1LkFycm93TGVmdFNxdWFyZT1veSx1LkFycm93TGVmdFRvTGluZT1SWGUsdS5BcnJvd1JpZ2h0PWpYZSx1LkFycm93UmlnaHRDaXJjbGU9dGIsdS5BcnJvd1JpZ2h0RnJvbUxpbmU9SFhlLHUuQXJyb3dSaWdodExlZnQ9cVhlLHUuQXJyb3dSaWdodFNxdWFyZT1oeSx1LkFycm93UmlnaHRUb0xpbmU9VlhlLHUuQXJyb3dVcD1lS2UsdS5BcnJvd1VwMDE9VVhlLHUuQXJyb3dVcDEwPVdYZSx1LkFycm93VXBBWj16Zyx1LkFycm93VXBBej16Zyx1LkFycm93VXBDaXJjbGU9YWIsdS5BcnJvd1VwRG93bj1HWGUsdS5BcnJvd1VwRnJvbURvdD1ZWGUsdS5BcnJvd1VwRnJvbUxpbmU9WlhlLHUuQXJyb3dVcExlZnQ9WFhlLHUuQXJyb3dVcExlZnRGcm9tQ2lyY2xlPUpnLHUuQXJyb3dVcExlZnRGcm9tU3F1YXJlPWN5LHUuQXJyb3dVcExlZnRTcXVhcmU9dXksdS5BcnJvd1VwTmFycm93V2lkZT1rZyx1LkFycm93VXBSaWdodD1LWGUsdS5BcnJvd1VwUmlnaHRGcm9tQ2lyY2xlPWViLHUuQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZT1weSx1LkFycm93VXBSaWdodFNxdWFyZT1meSx1LkFycm93VXBTcXVhcmU9bXksdS5BcnJvd1VwVG9MaW5lPVFYZSx1LkFycm93VXBXaWRlTmFycm93PUpYZSx1LkFycm93VXBaQT1TZyx1LkFycm93VXBaYT1TZyx1LkFycm93c1VwRnJvbUxpbmU9dEtlLHUuQXN0ZXJpc2s9YUtlLHUuQXN0ZXJpc2tTcXVhcmU9Z3ksdS5BdFNpZ249aUtlLHUuQXRvbT1yS2UsdS5BdWRpb0xpbmVzPXNLZSx1LkF1ZGlvV2F2ZWZvcm09bktlLHUuQXdhcmQ9b0tlLHUuQXhlPWxLZSx1LkF4aXMzRD1DZyx1LkF4aXMzZD1DZyx1LkJhYnk9ZEtlLHUuQmFja3BhY2s9Y0tlLHUuQmFkZ2U9Q0tlLHUuQmFkZ2VBbGVydD1wS2UsdS5CYWRnZUNlbnQ9aEtlLHUuQmFkZ2VDaGVjaz1fZyx1LkJhZGdlRG9sbGFyU2lnbj1mS2UsdS5CYWRnZUV1cm89bUtlLHUuQmFkZ2VIZWxwPVRnLHUuQmFkZ2VJbmRpYW5SdXBlZT11S2UsdS5CYWRnZUluZm89Z0tlLHUuQmFkZ2VKYXBhbmVzZVllbj1iS2UsdS5CYWRnZU1pbnVzPXZLZSx1LkJhZGdlUGVyY2VudD15S2UsdS5CYWRnZVBsdXM9eEtlLHUuQmFkZ2VQb3VuZFN0ZXJsaW5nPXdLZSx1LkJhZGdlUXVlc3Rpb25NYXJrPVRnLHUuQmFkZ2VSdXNzaWFuUnVibGU9TUtlLHUuQmFkZ2VTd2lzc0ZyYW5jPXpLZSx1LkJhZGdlVHVya2lzaExpcmE9a0tlLHUuQmFkZ2VYPVNLZSx1LkJhZ2dhZ2VDbGFpbT1fS2UsdS5CYWxsb29uPVRLZSx1LkJhbj1MS2UsdS5CYW5hbmE9JEtlLHUuQmFuZGFnZT1BS2UsdS5CYW5rbm90ZT1JS2UsdS5CYW5rbm90ZUFycm93RG93bj1ES2UsdS5CYW5rbm90ZUFycm93VXA9RUtlLHUuQmFua25vdGVYPVBLZSx1LkJhckNoYXJ0PXFnLHUuQmFyQ2hhcnQyPVZnLHUuQmFyQ2hhcnQzPUJnLHUuQmFyQ2hhcnQ0PVJnLHUuQmFyQ2hhcnRCaWc9RmcsdS5CYXJDaGFydEhvcml6b250YWw9T2csdS5CYXJDaGFydEhvcml6b250YWxCaWc9SWcsdS5CYXJjb2RlPU5LZSx1LkJhcnJlbD1GS2UsdS5CYXNlbGluZT1PS2UsdS5CYXRoPVJLZSx1LkJhdHRlcnk9V0tlLHUuQmF0dGVyeUNoYXJnaW5nPUJLZSx1LkJhdHRlcnlGdWxsPUhLZSx1LkJhdHRlcnlMb3c9cUtlLHUuQmF0dGVyeU1lZGl1bT1WS2UsdS5CYXR0ZXJ5UGx1cz1qS2UsdS5CYXR0ZXJ5V2FybmluZz1VS2UsdS5CZWFrZXI9R0tlLHUuQmVhbj1aS2UsdS5CZWFuT2ZmPVlLZSx1LkJlZD1RS2UsdS5CZWREb3VibGU9WEtlLHUuQmVkU2luZ2xlPUtLZSx1LkJlZWY9SktlLHUuQmVlcj10UWUsdS5CZWVyT2ZmPWVRZSx1LkJlbGw9bFFlLHUuQmVsbERvdD1hUWUsdS5CZWxsRWxlY3RyaWM9aVFlLHUuQmVsbE1pbnVzPXJRZSx1LkJlbGxPZmY9c1FlLHUuQmVsbFBsdXM9blFlLHUuQmVsbFJpbmc9b1FlLHUuQmV0d2Vlbkhvcml6b25hbEVuZD1MZyx1LkJldHdlZW5Ib3Jpem9uYWxTdGFydD0kZyx1LkJldHdlZW5Ib3Jpem9udGFsRW5kPUxnLHUuQmV0d2Vlbkhvcml6b250YWxTdGFydD0kZyx1LkJldHdlZW5WZXJ0aWNhbEVuZD1jUWUsdS5CZXR3ZWVuVmVydGljYWxTdGFydD1kUWUsdS5CaWNlcHNGbGV4ZWQ9cFFlLHUuQmlrZT1oUWUsdS5CaW5hcnk9dVFlLHUuQmlub2N1bGFycz1mUWUsdS5CaW9oYXphcmQ9bVFlLHUuQmlyZD1nUWUsdS5CaXJkaG91c2U9YlFlLHUuQml0Y29pbj12UWUsdS5CbGVuZD15UWUsdS5CbGluZHM9eFFlLHUuQmxvY2tzPU1RZSx1LkJsdWV0b290aD1DUWUsdS5CbHVldG9vdGhDb25uZWN0ZWQ9d1FlLHUuQmx1ZXRvb3RoT2ZmPXpRZSx1LkJsdWV0b290aFNlYXJjaGluZz1rUWUsdS5Cb2xkPVNRZSx1LkJvbHQ9VFFlLHUuQm9tYj1fUWUsdS5Cb25lPUxRZSx1LkJvb2s9ZUplLHUuQm9va0E9JFFlLHUuQm9va0FsZXJ0PUFRZSx1LkJvb2tBdWRpbz1FUWUsdS5Cb29rQ2hlY2s9RFFlLHUuQm9va0NvcHk9UFFlLHUuQm9va0Rhc2hlZD1BZyx1LkJvb2tEb3duPUlRZSx1LkJvb2tIZWFkcGhvbmVzPU5RZSx1LkJvb2tIZWFydD1GUWUsdS5Cb29rSW1hZ2U9T1FlLHUuQm9va0tleT1SUWUsdS5Cb29rTG9jaz1CUWUsdS5Cb29rTWFya2VkPUhRZSx1LkJvb2tNaW51cz1xUWUsdS5Cb29rT3Blbj1VUWUsdS5Cb29rT3BlbkNoZWNrPVZRZSx1LkJvb2tPcGVuVGV4dD1qUWUsdS5Cb29rUGx1cz1XUWUsdS5Cb29rU2VhcmNoPUdRZSx1LkJvb2tUZW1wbGF0ZT1BZyx1LkJvb2tUZXh0PVlRZSx1LkJvb2tUeXBlPVpRZSx1LkJvb2tVcD1LUWUsdS5Cb29rVXAyPVhRZSx1LkJvb2tVc2VyPVFRZSx1LkJvb2tYPUpRZSx1LkJvb2ttYXJrPXNKZSx1LkJvb2ttYXJrQ2hlY2s9dEplLHUuQm9va21hcmtNaW51cz1hSmUsdS5Cb29rbWFya1BsdXM9aUplLHUuQm9va21hcmtYPXJKZSx1LkJvb21Cb3g9bkplLHUuQm90PWxKZSx1LkJvdE1lc3NhZ2VTcXVhcmU9b0plLHUuQm90T2ZmPWNKZSx1LkJvdHRsZVdpbmU9ZEplLHUuQm93QXJyb3c9cEplLHUuQm94PWhKZSx1LkJveFNlbGVjdD1feSx1LkJveGVzPXVKZSx1LkJyYWNlcz1EZyx1LkJyYWNrZXRzPWZKZSx1LkJyYWluPWJKZSx1LkJyYWluQ2lyY3VpdD1tSmUsdS5CcmFpbkNvZz1nSmUsdS5Ccmlja1dhbGw9d0plLHUuQnJpY2tXYWxsRmlyZT12SmUsdS5Ccmlja1dhbGxTaGllbGQ9eUplLHUuQnJpZWZjYXNlPWtKZSx1LkJyaWVmY2FzZUJ1c2luZXNzPXhKZSx1LkJyaWVmY2FzZUNvbnZleW9yQmVsdD1NSmUsdS5CcmllZmNhc2VNZWRpY2FsPXpKZSx1LkJyaW5nVG9Gcm9udD1TSmUsdS5CcnVzaD1fSmUsdS5CcnVzaENsZWFuaW5nPUNKZSx1LkJ1YmJsZXM9VEplLHUuQnVnPUFKZSx1LkJ1Z09mZj1MSmUsdS5CdWdQbGF5PSRKZSx1LkJ1aWxkaW5nPUVKZSx1LkJ1aWxkaW5nMj1ESmUsdS5CdXM9SUplLHUuQnVzRnJvbnQ9UEplLHUuQ2FibGU9RkplLHUuQ2FibGVDYXI9TkplLHUuQ2FrZT1SSmUsdS5DYWtlU2xpY2U9T0plLHUuQ2FsY3VsYXRvcj1CSmUsdS5DYWxlbmRhcj1vZXQsdS5DYWxlbmRhcjE9SEplLHUuQ2FsZW5kYXJBcnJvd0Rvd249cUplLHUuQ2FsZW5kYXJBcnJvd1VwPVZKZSx1LkNhbGVuZGFyQ2hlY2s9VUplLHUuQ2FsZW5kYXJDaGVjazI9akplLHUuQ2FsZW5kYXJDbG9jaz1XSmUsdS5DYWxlbmRhckNvZz1HSmUsdS5DYWxlbmRhckRheXM9WUplLHUuQ2FsZW5kYXJGb2xkPVpKZSx1LkNhbGVuZGFySGVhcnQ9WEplLHUuQ2FsZW5kYXJNaW51cz1RSmUsdS5DYWxlbmRhck1pbnVzMj1LSmUsdS5DYWxlbmRhck9mZj1KSmUsdS5DYWxlbmRhclBsdXM9dGV0LHUuQ2FsZW5kYXJQbHVzMj1lZXQsdS5DYWxlbmRhclJhbmdlPWFldCx1LkNhbGVuZGFyU2VhcmNoPWlldCx1LkNhbGVuZGFyU3luYz1yZXQsdS5DYWxlbmRhclg9bmV0LHUuQ2FsZW5kYXJYMj1zZXQsdS5DYWxlbmRhcnM9Y2V0LHUuQ2FtZXJhPXBldCx1LkNhbWVyYU9mZj1kZXQsdS5DYW5kbGVzdGlja0NoYXJ0PU5nLHUuQ2FuZHk9ZmV0LHUuQ2FuZHlDYW5lPWhldCx1LkNhbmR5T2ZmPXVldCx1LkNhbm5hYmlzPWdldCx1LkNhbm5hYmlzT2ZmPW1ldCx1LkNhcHRpb25zPUVnLHUuQ2FwdGlvbnNPZmY9YmV0LHUuQ2FyPXhldCx1LkNhckZyb250PXZldCx1LkNhclRheGlGcm9udD15ZXQsdS5DYXJhdmFuPXdldCx1LkNhcmRTaW09TWV0LHUuQ2Fycm90PXpldCx1LkNhc2VMb3dlcj1rZXQsdS5DYXNlU2Vuc2l0aXZlPUNldCx1LkNhc2VVcHBlcj1fZXQsdS5DYXNzZXR0ZVRhcGU9VGV0LHUuQ2FzdD1MZXQsdS5DYXN0bGU9JGV0LHUuQ2F0PUFldCx1LkNjdHY9RGV0LHUuQ2hhcnRBcmVhPVBnLHUuQ2hhcnRCYXI9T2csdS5DaGFydEJhckJpZz1JZyx1LkNoYXJ0QmFyRGVjcmVhc2luZz1FZXQsdS5DaGFydEJhckluY3JlYXNpbmc9UGV0LHUuQ2hhcnRCYXJTdGFja2VkPUlldCx1LkNoYXJ0Q2FuZGxlc3RpY2s9TmcsdS5DaGFydENvbHVtbj1CZyx1LkNoYXJ0Q29sdW1uQmlnPUZnLHUuQ2hhcnRDb2x1bW5EZWNyZWFzaW5nPU5ldCx1LkNoYXJ0Q29sdW1uSW5jcmVhc2luZz1SZyx1LkNoYXJ0Q29sdW1uU3RhY2tlZD1GZXQsdS5DaGFydEdhbnR0PU9ldCx1LkNoYXJ0TGluZT1IZyx1LkNoYXJ0TmV0d29yaz1SZXQsdS5DaGFydE5vQXhlc0NvbHVtbj1WZyx1LkNoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZz1CZXQsdS5DaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc9cWcsdS5DaGFydE5vQXhlc0NvbWJpbmVkPUhldCx1LkNoYXJ0Tm9BeGVzR2FudHQ9amcsdS5DaGFydFBpZT1VZyx1LkNoYXJ0U2NhdHRlcj1XZyx1LkNoYXJ0U3BsaW5lPXFldCx1LkNoZWNrPUdldCx1LkNoZWNrQ2hlY2s9amV0LHUuQ2hlY2tDaXJjbGU9aWIsdS5DaGVja0NpcmNsZTI9cmIsdS5DaGVja0xpbmU9VmV0LHUuQ2hlY2tTcXVhcmU9dnksdS5DaGVja1NxdWFyZTI9eXksdS5DaGVmSGF0PVVldCx1LkNoZXJyeT1XZXQsdS5DaGVzc0Jpc2hvcD1ZZXQsdS5DaGVzc0tpbmc9WmV0LHUuQ2hlc3NLbmlnaHQ9UWV0LHUuQ2hlc3NQYXduPVhldCx1LkNoZXNzUXVlZW49S2V0LHUuQ2hlc3NSb29rPUpldCx1LkNoZXZyb25Eb3duPWV0dCx1LkNoZXZyb25Eb3duQ2lyY2xlPXNiLHUuQ2hldnJvbkRvd25TcXVhcmU9eHksdS5DaGV2cm9uRmlyc3Q9dHR0LHUuQ2hldnJvbkxhc3Q9YXR0LHUuQ2hldnJvbkxlZnQ9aXR0LHUuQ2hldnJvbkxlZnRDaXJjbGU9bmIsdS5DaGV2cm9uTGVmdFNxdWFyZT13eSx1LkNoZXZyb25SaWdodD1ydHQsdS5DaGV2cm9uUmlnaHRDaXJjbGU9b2IsdS5DaGV2cm9uUmlnaHRTcXVhcmU9TXksdS5DaGV2cm9uVXA9c3R0LHUuQ2hldnJvblVwQ2lyY2xlPWxiLHUuQ2hldnJvblVwU3F1YXJlPXp5LHUuQ2hldnJvbnNEb3duPW90dCx1LkNoZXZyb25zRG93blVwPW50dCx1LkNoZXZyb25zTGVmdD1kdHQsdS5DaGV2cm9uc0xlZnRSaWdodD1jdHQsdS5DaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzPWx0dCx1LkNoZXZyb25zUmlnaHQ9aHR0LHUuQ2hldnJvbnNSaWdodExlZnQ9cHR0LHUuQ2hldnJvbnNVcD11dHQsdS5DaGV2cm9uc1VwRG93bj1mdHQsdS5DaHJvbWU9R2csdS5DaHJvbWl1bT1HZyx1LkNodXJjaD1ndHQsdS5DaWdhcmV0dGU9YnR0LHUuQ2lnYXJldHRlT2ZmPW10dCx1LkNpcmNsZT1EdHQsdS5DaXJjbGVBbGVydD1ZZyx1LkNpcmNsZUFycm93RG93bj1aZyx1LkNpcmNsZUFycm93TGVmdD1YZyx1LkNpcmNsZUFycm93T3V0RG93bkxlZnQ9S2csdS5DaXJjbGVBcnJvd091dERvd25SaWdodD1RZyx1LkNpcmNsZUFycm93T3V0VXBMZWZ0PUpnLHUuQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0PWViLHUuQ2lyY2xlQXJyb3dSaWdodD10Yix1LkNpcmNsZUFycm93VXA9YWIsdS5DaXJjbGVDaGVjaz1yYix1LkNpcmNsZUNoZWNrQmlnPWliLHUuQ2lyY2xlQ2hldnJvbkRvd249c2IsdS5DaXJjbGVDaGV2cm9uTGVmdD1uYix1LkNpcmNsZUNoZXZyb25SaWdodD1vYix1LkNpcmNsZUNoZXZyb25VcD1sYix1LkNpcmNsZURhc2hlZD12dHQsdS5DaXJjbGVEaXZpZGU9Y2IsdS5DaXJjbGVEb2xsYXJTaWduPXl0dCx1LkNpcmNsZURvdD13dHQsdS5DaXJjbGVEb3REYXNoZWQ9eHR0LHUuQ2lyY2xlRWxsaXBzaXM9TXR0LHUuQ2lyY2xlRXF1YWw9enR0LHUuQ2lyY2xlRmFkaW5nQXJyb3dVcD1rdHQsdS5DaXJjbGVGYWRpbmdQbHVzPVN0dCx1LkNpcmNsZUdhdWdlPWRiLHUuQ2lyY2xlSGVscD15bCx1LkNpcmNsZU1pbnVzPXBiLHUuQ2lyY2xlT2ZmPUN0dCx1LkNpcmNsZVBhcmtpbmc9dWIsdS5DaXJjbGVQYXJraW5nT2ZmPWhiLHUuQ2lyY2xlUGF1c2U9ZmIsdS5DaXJjbGVQZXJjZW50PW1iLHUuQ2lyY2xlUGlsZT1fdHQsdS5DaXJjbGVQbGF5PWdiLHUuQ2lyY2xlUGx1cz1iYix1LkNpcmNsZVBvdW5kU3Rlcmxpbmc9VHR0LHUuQ2lyY2xlUG93ZXI9dmIsdS5DaXJjbGVRdWVzdGlvbk1hcms9eWwsdS5DaXJjbGVTbGFzaD1MdHQsdS5DaXJjbGVTbGFzaDI9eWIsdS5DaXJjbGVTbGFzaGVkPXliLHUuQ2lyY2xlU21hbGw9JHR0LHUuQ2lyY2xlU3Rhcj1BdHQsdS5DaXJjbGVTdG9wPXhiLHUuQ2lyY2xlVXNlcj1NYix1LkNpcmNsZVVzZXJSb3VuZD13Yix1LkNpcmNsZVg9emIsdS5DaXJjdWl0Qm9hcmQ9RXR0LHUuQ2l0cnVzPVB0dCx1LkNsYXBwZXJib2FyZD1JdHQsdS5DbGlwYm9hcmQ9V3R0LHUuQ2xpcGJvYXJkQ2hlY2s9TnR0LHUuQ2xpcGJvYXJkQ2xvY2s9RnR0LHUuQ2xpcGJvYXJkQ29weT1PdHQsdS5DbGlwYm9hcmRFZGl0PVNiLHUuQ2xpcGJvYXJkTGlzdD1SdHQsdS5DbGlwYm9hcmRNaW51cz1CdHQsdS5DbGlwYm9hcmRQYXN0ZT1IdHQsdS5DbGlwYm9hcmRQZW49U2IsdS5DbGlwYm9hcmRQZW5MaW5lPWtiLHUuQ2xpcGJvYXJkUGx1cz1xdHQsdS5DbGlwYm9hcmRTaWduYXR1cmU9a2IsdS5DbGlwYm9hcmRUeXBlPVZ0dCx1LkNsaXBib2FyZFg9anR0LHUuQ2xvY2s9ZDF0LHUuQ2xvY2sxPVV0dCx1LkNsb2NrMTA9R3R0LHUuQ2xvY2sxMT1ZdHQsdS5DbG9jazEyPVp0dCx1LkNsb2NrMj1YdHQsdS5DbG9jazM9S3R0LHUuQ2xvY2s0PVF0dCx1LkNsb2NrNT1KdHQsdS5DbG9jazY9ZTF0LHUuQ2xvY2s3PXQxdCx1LkNsb2NrOD1hMXQsdS5DbG9jazk9aTF0LHUuQ2xvY2tBbGVydD1zMXQsdS5DbG9ja0Fycm93RG93bj1yMXQsdS5DbG9ja0Fycm93VXA9bjF0LHUuQ2xvY2tDaGVjaz1vMXQsdS5DbG9ja0ZhZGluZz1sMXQsdS5DbG9ja1BsdXM9YzF0LHUuQ2xvc2VkQ2FwdGlvbj1wMXQsdS5DbG91ZD1MMXQsdS5DbG91ZEFsZXJ0PWgxdCx1LkNsb3VkQmFja3VwPXUxdCx1LkNsb3VkQ2hlY2s9ZjF0LHUuQ2xvdWRDb2c9bTF0LHUuQ2xvdWREb3dubG9hZD1DYix1LkNsb3VkRHJpenpsZT1nMXQsdS5DbG91ZEZvZz1iMXQsdS5DbG91ZEhhaWw9djF0LHUuQ2xvdWRMaWdodG5pbmc9eDF0LHUuQ2xvdWRNb29uPXcxdCx1LkNsb3VkTW9vblJhaW49eTF0LHUuQ2xvdWRPZmY9TTF0LHUuQ2xvdWRSYWluPWsxdCx1LkNsb3VkUmFpbldpbmQ9ejF0LHUuQ2xvdWRTbm93PVMxdCx1LkNsb3VkU3VuPV8xdCx1LkNsb3VkU3VuUmFpbj1DMXQsdS5DbG91ZFN5bmM9VDF0LHUuQ2xvdWRVcGxvYWQ9X2IsdS5DbG91ZHk9JDF0LHUuQ2xvdmVyPUExdCx1LkNsdWI9RDF0LHUuQ29kZT1FMXQsdS5Db2RlMj1UYix1LkNvZGVTcXVhcmU9a3ksdS5Db2RlWG1sPVRiLHUuQ29kZXBlbj1QMXQsdS5Db2Rlc2FuZGJveD1JMXQsdS5Db2ZmZWU9TjF0LHUuQ29nPUYxdCx1LkNvaW5zPU8xdCx1LkNvbHVtbnM9TGIsdS5Db2x1bW5zMj1MYix1LkNvbHVtbnMzPSRiLHUuQ29sdW1uczNDb2c9eGwsdS5Db2x1bW5zND1SMXQsdS5Db2x1bW5zU2V0dGluZ3M9eGwsdS5Db21iaW5lPUIxdCx1LkNvbW1hbmQ9SDF0LHUuQ29tcGFzcz1xMXQsdS5Db21wb25lbnQ9VjF0LHUuQ29tcHV0ZXI9ajF0LHUuQ29uY2llcmdlQmVsbD1VMXQsdS5Db25lPVcxdCx1LkNvbnN0cnVjdGlvbj1HMXQsdS5Db250YWN0PVkxdCx1LkNvbnRhY3QyPUFiLHUuQ29udGFjdFJvdW5kPUFiLHUuQ29udGFpbmVyPVoxdCx1LkNvbnRyYXN0PUsxdCx1LkNvb2tpZT1YMXQsdS5Db29raW5nUG90PVExdCx1LkNvcHk9cjJ0LHUuQ29weUNoZWNrPUoxdCx1LkNvcHlNaW51cz1lMnQsdS5Db3B5UGx1cz10MnQsdS5Db3B5U2xhc2g9YTJ0LHUuQ29weVg9aTJ0LHUuQ29weWxlZnQ9czJ0LHUuQ29weXJpZ2h0PW4ydCx1LkNvcm5lckRvd25MZWZ0PW8ydCx1LkNvcm5lckRvd25SaWdodD1sMnQsdS5Db3JuZXJMZWZ0RG93bj1jMnQsdS5Db3JuZXJMZWZ0VXA9ZDJ0LHUuQ29ybmVyUmlnaHREb3duPXAydCx1LkNvcm5lclJpZ2h0VXA9aDJ0LHUuQ29ybmVyVXBMZWZ0PXUydCx1LkNvcm5lclVwUmlnaHQ9ZjJ0LHUuQ3B1PW0ydCx1LkNyZWF0aXZlQ29tbW9ucz1nMnQsdS5DcmVkaXRDYXJkPWIydCx1LkNyb2lzc2FudD12MnQsdS5Dcm9wPXkydCx1LkNyb3NzPXgydCx1LkNyb3NzaGFpcj13MnQsdS5Dcm93bj1NMnQsdS5DdWJvaWQ9ejJ0LHUuQ3VwU29kYT1rMnQsdS5DdXJseUJyYWNlcz1EZyx1LkN1cnJlbmN5PUMydCx1LkN5bGluZGVyPVMydCx1LkRhbT1UMnQsdS5EYXRhYmFzZT1BMnQsdS5EYXRhYmFzZUJhY2t1cD1fMnQsdS5EYXRhYmFzZVNlYXJjaD1MMnQsdS5EYXRhYmFzZVphcD0kMnQsdS5EZWNpbWFsc0Fycm93TGVmdD1EMnQsdS5EZWNpbWFsc0Fycm93UmlnaHQ9RTJ0LHUuRGVsZXRlPVAydCx1LkRlc3NlcnQ9STJ0LHUuRGlhbWV0ZXI9TjJ0LHUuRGlhbW9uZD1SMnQsdS5EaWFtb25kTWludXM9RjJ0LHUuRGlhbW9uZFBlcmNlbnQ9RGIsdS5EaWFtb25kUGx1cz1PMnQsdS5EaWNlMT1CMnQsdS5EaWNlMj1IMnQsdS5EaWNlMz1xMnQsdS5EaWNlND1WMnQsdS5EaWNlNT1qMnQsdS5EaWNlNj1VMnQsdS5EaWNlcz1XMnQsdS5EaWZmPUcydCx1LkRpc2M9SzJ0LHUuRGlzYzI9WTJ0LHUuRGlzYzM9WjJ0LHUuRGlzY0FsYnVtPVgydCx1LkRpdmlkZT1RMnQsdS5EaXZpZGVDaXJjbGU9Y2IsdS5EaXZpZGVTcXVhcmU9VHksdS5EbmE9ZWF0LHUuRG5hT2ZmPUoydCx1LkRvY2s9aWF0LHUuRG9nPXRhdCx1LkRvbGxhclNpZ249YWF0LHUuRG9udXQ9cmF0LHUuRG9vckNsb3NlZD1uYXQsdS5Eb29yQ2xvc2VkTG9ja2VkPXNhdCx1LkRvb3JPcGVuPW9hdCx1LkRvdD1sYXQsdS5Eb3RTcXVhcmU9THksdS5Eb3dubG9hZD1jYXQsdS5Eb3dubG9hZENsb3VkPUNiLHUuRHJhZnRpbmdDb21wYXNzPWRhdCx1LkRyYW1hPWhhdCx1LkRyaWJiYmxlPXBhdCx1LkRyaWxsPXVhdCx1LkRyb25lPWZhdCx1LkRyb3BsZXQ9Z2F0LHUuRHJvcGxldE9mZj1tYXQsdS5Ecm9wbGV0cz1iYXQsdS5EcnVtPXZhdCx1LkRydW1zdGljaz15YXQsdS5EdW1iYmVsbD14YXQsdS5FYXI9emF0LHUuRWFyT2ZmPXdhdCx1LkVhcnRoPUViLHUuRWFydGhMb2NrPU1hdCx1LkVjbGlwc2U9a2F0LHUuRWRpdD1sbyx1LkVkaXQyPVV2LHUuRWRpdDM9anYsdS5FZ2c9X2F0LHUuRWdnRnJpZWQ9U2F0LHUuRWdnT2ZmPUNhdCx1LkVsbGlwc2lzPUliLHUuRWxsaXBzaXNWZXJ0aWNhbD1QYix1LkVxdWFsPSRhdCx1LkVxdWFsQXBwcm94aW1hdGVseT1UYXQsdS5FcXVhbE5vdD1MYXQsdS5FcXVhbFNxdWFyZT0keSx1LkVyYXNlcj1EYXQsdS5FdGhlcm5ldFBvcnQ9QWF0LHUuRXVybz1FYXQsdS5FdkNoYXJnZXI9UGF0LHUuRXhwYW5kPUlhdCx1LkV4dGVybmFsTGluaz1OYXQsdS5FeWU9T2F0LHUuRXllQ2xvc2VkPUZhdCx1LkV5ZU9mZj1SYXQsdS5GYWNlYm9vaz1CYXQsdS5GYWN0b3J5PUhhdCx1LkZhbj1xYXQsdS5GYXN0Rm9yd2FyZD1WYXQsdS5GZWF0aGVyPWphdCx1LkZlbmNlPVVhdCx1LkZlcnJpc1doZWVsPVdhdCx1LkZpZ21hPUdhdCx1LkZpbGU9TWl0LHUuRmlsZUFyY2hpdmU9WWF0LHUuRmlsZUF1ZGlvPXdsLHUuRmlsZUF1ZGlvMj13bCx1LkZpbGVBeGlzM0Q9TmIsdS5GaWxlQXhpczNkPU5iLHUuRmlsZUJhZGdlPUZiLHUuRmlsZUJhZGdlMj1GYix1LkZpbGVCYXJDaGFydD1CYix1LkZpbGVCYXJDaGFydDI9SGIsdS5GaWxlQm94PVphdCx1LkZpbGVCcmFjZXM9UmIsdS5GaWxlQnJhY2VzQ29ybmVyPU9iLHUuRmlsZUNoYXJ0Q29sdW1uPUhiLHUuRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZz1CYix1LkZpbGVDaGFydExpbmU9cWIsdS5GaWxlQ2hhcnRQaWU9VmIsdS5GaWxlQ2hlY2s9S2F0LHUuRmlsZUNoZWNrMj1qYix1LkZpbGVDaGVja0Nvcm5lcj1qYix1LkZpbGVDbG9jaz1YYXQsdS5GaWxlQ29kZT1RYXQsdS5GaWxlQ29kZTI9VWIsdS5GaWxlQ29kZUNvcm5lcj1VYix1LkZpbGVDb2c9V2IsdS5GaWxlQ29nMj1XYix1LkZpbGVEaWZmPUphdCx1LkZpbGVEaWdpdD1laXQsdS5GaWxlRG93bj10aXQsdS5GaWxlRWRpdD1RYix1LkZpbGVFeGNsYW1hdGlvblBvaW50PUdiLHUuRmlsZUhlYWRwaG9uZT13bCx1LkZpbGVIZWFydD1haXQsdS5GaWxlSW1hZ2U9aWl0LHUuRmlsZUlucHV0PXJpdCx1LkZpbGVKc29uPVJiLHUuRmlsZUpzb24yPU9iLHUuRmlsZUtleT1ZYix1LkZpbGVLZXkyPVliLHUuRmlsZUxpbmVDaGFydD1xYix1LkZpbGVMb2NrPVpiLHUuRmlsZUxvY2syPVpiLHUuRmlsZU1pbnVzPXNpdCx1LkZpbGVNaW51czI9WGIsdS5GaWxlTWludXNDb3JuZXI9WGIsdS5GaWxlTXVzaWM9bml0LHUuRmlsZU91dHB1dD1vaXQsdS5GaWxlUGVuPVFiLHUuRmlsZVBlbkxpbmU9S2IsdS5GaWxlUGllQ2hhcnQ9VmIsdS5GaWxlUGxheT1KYix1LkZpbGVQbHVzPWxpdCx1LkZpbGVQbHVzMj1ldix1LkZpbGVQbHVzQ29ybmVyPWV2LHUuRmlsZVF1ZXN0aW9uPXR2LHUuRmlsZVF1ZXN0aW9uTWFyaz10dix1LkZpbGVTY2FuPWNpdCx1LkZpbGVTZWFyY2g9ZGl0LHUuRmlsZVNlYXJjaDI9YXYsdS5GaWxlU2VhcmNoQ29ybmVyPWF2LHUuRmlsZVNpZ25hbD1pdix1LkZpbGVTaWduYXR1cmU9S2IsdS5GaWxlU2xpZGVycz1waXQsdS5GaWxlU3ByZWFkc2hlZXQ9aGl0LHUuRmlsZVN0YWNrPXVpdCx1LkZpbGVTeW1saW5rPWZpdCx1LkZpbGVUZXJtaW5hbD1taXQsdS5GaWxlVGV4dD1naXQsdS5GaWxlVHlwZT1iaXQsdS5GaWxlVHlwZTI9cnYsdS5GaWxlVHlwZUNvcm5lcj1ydix1LkZpbGVVcD12aXQsdS5GaWxlVXNlcj15aXQsdS5GaWxlVmlkZW89SmIsdS5GaWxlVmlkZW8yPXN2LHUuRmlsZVZpZGVvQ2FtZXJhPXN2LHUuRmlsZVZvbHVtZT14aXQsdS5GaWxlVm9sdW1lMj1pdix1LkZpbGVXYXJuaW5nPUdiLHUuRmlsZVg9d2l0LHUuRmlsZVgyPW52LHUuRmlsZVhDb3JuZXI9bnYsdS5GaWxlcz16aXQsdS5GaWxtPWtpdCx1LkZpbHRlcj1wdix1LkZpbHRlclg9ZHYsdS5GaW5nZXJwcmludD1vdix1LkZpbmdlcnByaW50UGF0dGVybj1vdix1LkZpcmVFeHRpbmd1aXNoZXI9U2l0LHUuRmlzaD1UaXQsdS5GaXNoT2ZmPUNpdCx1LkZpc2hTeW1ib2w9X2l0LHUuRmlzaGluZ0hvb2s9TGl0LHUuRmxhZz1FaXQsdS5GbGFnT2ZmPSRpdCx1LkZsYWdUcmlhbmdsZUxlZnQ9QWl0LHUuRmxhZ1RyaWFuZ2xlUmlnaHQ9RGl0LHUuRmxhbWU9SWl0LHUuRmxhbWVLaW5kbGluZz1QaXQsdS5GbGFzaGxpZ2h0PUZpdCx1LkZsYXNobGlnaHRPZmY9Tml0LHUuRmxhc2tDb25pY2FsPVJpdCx1LkZsYXNrQ29uaWNhbE9mZj1PaXQsdS5GbGFza1JvdW5kPUJpdCx1LkZsaXBIb3Jpem9udGFsPXFpdCx1LkZsaXBIb3Jpem9udGFsMj1IaXQsdS5GbGlwVmVydGljYWw9aml0LHUuRmxpcFZlcnRpY2FsMj1WaXQsdS5GbG93ZXI9V2l0LHUuRmxvd2VyMj1VaXQsdS5Gb2N1cz1HaXQsdS5Gb2xkSG9yaXpvbnRhbD1ZaXQsdS5Gb2xkVmVydGljYWw9Wml0LHUuRm9sZGVyPXpydCx1LkZvbGRlckFyY2hpdmU9S2l0LHUuRm9sZGVyQ2hlY2s9WGl0LHUuRm9sZGVyQ2xvY2s9UWl0LHUuRm9sZGVyQ2xvc2VkPUppdCx1LkZvbGRlckNvZGU9ZXJ0LHUuRm9sZGVyQ29nPWx2LHUuRm9sZGVyQ29nMj1sdix1LkZvbGRlckRvdD10cnQsdS5Gb2xkZXJEb3duPWFydCx1LkZvbGRlckVkaXQ9Y3YsdS5Gb2xkZXJHaXQ9cnJ0LHUuRm9sZGVyR2l0Mj1pcnQsdS5Gb2xkZXJIZWFydD1zcnQsdS5Gb2xkZXJJbnB1dD1ucnQsdS5Gb2xkZXJLYW5iYW49b3J0LHUuRm9sZGVyS2V5PWxydCx1LkZvbGRlckxvY2s9Y3J0LHUuRm9sZGVyTWludXM9ZHJ0LHUuRm9sZGVyT3Blbj1ocnQsdS5Gb2xkZXJPcGVuRG90PXBydCx1LkZvbGRlck91dHB1dD11cnQsdS5Gb2xkZXJQZW49Y3YsdS5Gb2xkZXJQbHVzPWZydCx1LkZvbGRlclJvb3Q9bXJ0LHUuRm9sZGVyU2VhcmNoPWJydCx1LkZvbGRlclNlYXJjaDI9Z3J0LHUuRm9sZGVyU3ltbGluaz12cnQsdS5Gb2xkZXJTeW5jPXlydCx1LkZvbGRlclRyZWU9eHJ0LHUuRm9sZGVyVXA9d3J0LHUuRm9sZGVyWD1NcnQsdS5Gb2xkZXJzPWtydCx1LkZvb3RwcmludHM9Q3J0LHUuRm9ya0tuaWZlPXd4LHUuRm9ya0tuaWZlQ3Jvc3NlZD14eCx1LkZvcmtsaWZ0PVNydCx1LkZvcm09X3J0LHUuRm9ybUlucHV0PUd2LHUuRm9yd2FyZD1UcnQsdS5GcmFtZT1McnQsdS5GcmFtZXI9JHJ0LHUuRnJvd249QXJ0LHUuRnVlbD1EcnQsdS5GdWxsc2NyZWVuPUVydCx1LkZ1bmN0aW9uU3F1YXJlPUF5LHUuRnVubmVsPXB2LHUuRnVubmVsUGx1cz1QcnQsdS5GdW5uZWxYPWR2LHUuR2FsbGVyeUhvcml6b250YWw9TnJ0LHUuR2FsbGVyeUhvcml6b250YWxFbmQ9SXJ0LHUuR2FsbGVyeVRodW1ibmFpbHM9RnJ0LHUuR2FsbGVyeVZlcnRpY2FsPVJydCx1LkdhbGxlcnlWZXJ0aWNhbEVuZD1PcnQsdS5HYW1lcGFkPXFydCx1LkdhbWVwYWQyPUJydCx1LkdhbWVwYWREaXJlY3Rpb25hbD1IcnQsdS5HYW50dENoYXJ0PWpnLHUuR2FudHRDaGFydFNxdWFyZT1TbCx1LkdhdWdlPVZydCx1LkdhdWdlQ2lyY2xlPWRiLHUuR2F2ZWw9anJ0LHUuR2VtPVVydCx1Lkdlb3JnaWFuTGFyaT1XcnQsdS5HaG9zdD1HcnQsdS5HaWZ0PVhydCx1LkdpdEJyYW5jaD1LcnQsdS5HaXRCcmFuY2hNaW51cz1ZcnQsdS5HaXRCcmFuY2hQbHVzPVpydCx1LkdpdENvbW1pdD1odix1LkdpdENvbW1pdEhvcml6b250YWw9aHYsdS5HaXRDb21taXRWZXJ0aWNhbD1RcnQsdS5HaXRDb21wYXJlPWVzdCx1LkdpdENvbXBhcmVBcnJvd3M9SnJ0LHUuR2l0Rm9yaz10c3QsdS5HaXRHcmFwaD1hc3QsdS5HaXRNZXJnZT1pc3QsdS5HaXRQdWxsUmVxdWVzdD1jc3QsdS5HaXRQdWxsUmVxdWVzdEFycm93PXJzdCx1LkdpdFB1bGxSZXF1ZXN0Q2xvc2VkPXNzdCx1LkdpdFB1bGxSZXF1ZXN0Q3JlYXRlPW9zdCx1LkdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c9bnN0LHUuR2l0UHVsbFJlcXVlc3REcmFmdD1sc3QsdS5HaXRodWI9ZHN0LHUuR2l0bGFiPXBzdCx1LkdsYXNzV2F0ZXI9aHN0LHUuR2xhc3Nlcz11c3QsdS5HbG9iZT1tc3QsdS5HbG9iZTI9RWIsdS5HbG9iZUxvY2s9ZnN0LHUuR2xvYmVYPWdzdCx1LkdvYWw9YnN0LHUuR3B1PXZzdCx1LkdyYWI9YnYsdS5HcmFkdWF0aW9uQ2FwPXlzdCx1LkdyYXBlPXhzdCx1LkdyaWQ9TWwsdS5HcmlkMlgyPWd2LHUuR3JpZDJYMkNoZWNrPXV2LHUuR3JpZDJYMlBsdXM9ZnYsdS5HcmlkMlgyWD1tdix1LkdyaWQyeDI9Z3YsdS5HcmlkMngyQ2hlY2s9dXYsdS5HcmlkMngyUGx1cz1mdix1LkdyaWQyeDJYPW12LHUuR3JpZDNYMz1NbCx1LkdyaWQzeDI9d3N0LHUuR3JpZDN4Mz1NbCx1LkdyaXA9a3N0LHUuR3JpcEhvcml6b250YWw9TXN0LHUuR3JpcFZlcnRpY2FsPXpzdCx1Lkdyb3VwPVNzdCx1Lkd1aXRhcj1Dc3QsdS5IYW09X3N0LHUuSGFtYnVyZ2VyPVRzdCx1LkhhbW1lcj1Mc3QsdS5IYW5kPUlzdCx1LkhhbmRDb2lucz0kc3QsdS5IYW5kRmlzdD1Bc3QsdS5IYW5kR3JhYj1idix1LkhhbmRIZWFydD1Ec3QsdS5IYW5kSGVscGluZz12dix1LkhhbmRNZXRhbD1Fc3QsdS5IYW5kUGxhdHRlcj1Qc3QsdS5IYW5kYmFnPU5zdCx1LkhhbmRzaGFrZT1Gc3QsdS5IYXJkRHJpdmU9QnN0LHUuSGFyZERyaXZlRG93bmxvYWQ9T3N0LHUuSGFyZERyaXZlVXBsb2FkPVJzdCx1LkhhcmRIYXQ9SHN0LHUuSGFzaD1xc3QsdS5IYXRHbGFzc2VzPVZzdCx1LkhhemU9anN0LHUuSGQ9VXN0LHUuSGRtaVBvcnQ9V3N0LHUuSGVhZGluZz1Kc3QsdS5IZWFkaW5nMT1Hc3QsdS5IZWFkaW5nMj1Zc3QsdS5IZWFkaW5nMz1ac3QsdS5IZWFkaW5nND1Yc3QsdS5IZWFkaW5nNT1Lc3QsdS5IZWFkaW5nNj1Rc3QsdS5IZWFkcGhvbmVPZmY9ZW50LHUuSGVhZHBob25lcz10bnQsdS5IZWFkc2V0PWludCx1LkhlYXJ0PWNudCx1LkhlYXJ0Q3JhY2s9YW50LHUuSGVhcnRIYW5kc2hha2U9cm50LHUuSGVhcnRNaW51cz1zbnQsdS5IZWFydE9mZj1ubnQsdS5IZWFydFBsdXM9bG50LHUuSGVhcnRQdWxzZT1vbnQsdS5IZWF0ZXI9ZG50LHUuSGVsaWNvcHRlcj1wbnQsdS5IZWxwQ2lyY2xlPXlsLHUuSGVscGluZ0hhbmQ9dnYsdS5IZXhhZ29uPWhudCx1LkhpZ2hsaWdodGVyPXVudCx1Lkhpc3Rvcnk9Zm50LHUuSG9tZT15dix1LkhvcD1tbnQsdS5Ib3BPZmY9Z250LHUuSG9zcGl0YWw9Ym50LHUuSG90ZWw9dm50LHUuSG91cmdsYXNzPXludCx1LkhvdXNlPXl2LHUuSG91c2VIZWFydD14bnQsdS5Ib3VzZVBsdWc9d250LHUuSG91c2VQbHVzPU1udCx1LkhvdXNlV2lmaT16bnQsdS5JY2VDcmVhbT13dix1LkljZUNyZWFtMj14dix1LkljZUNyZWFtQm93bD14dix1LkljZUNyZWFtQ29uZT13dix1LklkQ2FyZD1TbnQsdS5JZENhcmRMYW55YXJkPWtudCx1LkltYWdlPURudCx1LkltYWdlRG93bj1DbnQsdS5JbWFnZU1pbnVzPV9udCx1LkltYWdlT2ZmPVRudCx1LkltYWdlUGxheT1MbnQsdS5JbWFnZVBsdXM9JG50LHUuSW1hZ2VVcD1BbnQsdS5JbWFnZVVwc2NhbGU9RW50LHUuSW1hZ2VzPVBudCx1LkltcG9ydD1JbnQsdS5JbmJveD1ObnQsdS5JbmRlbnQ9a2wsdS5JbmRlbnREZWNyZWFzZT16bCx1LkluZGVudEluY3JlYXNlPWtsLHUuSW5kaWFuUnVwZWU9Rm50LHUuSW5maW5pdHk9T250LHUuSW5mbz1SbnQsdS5JbnNwZWN0PUZ5LHUuSW5zcGVjdGlvblBhbmVsPUJudCx1Lkluc3RhZ3JhbT1IbnQsdS5JdGFsaWM9Vm50LHUuSXRlcmF0aW9uQ2N3PXFudCx1Lkl0ZXJhdGlvbkN3PWpudCx1LkphcGFuZXNlWWVuPVVudCx1LkpveXN0aWNrPVdudCx1LkthbmJhbj1HbnQsdS5LYW5iYW5TcXVhcmU9RHksdS5LYW5iYW5TcXVhcmVEYXNoZWQ9U3ksdS5LYXlhaz1ZbnQsdS5LZXk9S250LHUuS2V5Um91bmQ9Wm50LHUuS2V5U3F1YXJlPVhudCx1LktleWJvYXJkPWVvdCx1LktleWJvYXJkTXVzaWM9UW50LHUuS2V5Ym9hcmRPZmY9Sm50LHUuTGFtcD1ub3QsdS5MYW1wQ2VpbGluZz10b3QsdS5MYW1wRGVzaz1hb3QsdS5MYW1wRmxvb3I9aW90LHUuTGFtcFdhbGxEb3duPXJvdCx1LkxhbXBXYWxsVXA9c290LHUuTGFuZFBsb3Q9bG90LHUuTGFuZG1hcms9b290LHUuTGFuZ3VhZ2VzPWNvdCx1LkxhcHRvcD1wb3QsdS5MYXB0b3AyPU12LHUuTGFwdG9wTWluaW1hbD1Ndix1LkxhcHRvcE1pbmltYWxDaGVjaz1kb3QsdS5MYXNzbz11b3QsdS5MYXNzb1NlbGVjdD1ob3QsdS5MYXVnaD1mb3QsdS5MYXllcnM9enYsdS5MYXllcnMyPW1vdCx1LkxheWVyczM9enYsdS5MYXllcnNQbHVzPWdvdCx1LkxheW91dD1Wdix1LkxheW91dERhc2hib2FyZD1ib3QsdS5MYXlvdXRHcmlkPXZvdCx1LkxheW91dExpc3Q9eW90LHUuTGF5b3V0UGFuZWxMZWZ0PXhvdCx1LkxheW91dFBhbmVsVG9wPXdvdCx1LkxheW91dFRlbXBsYXRlPU1vdCx1LkxlYWY9em90LHUuTGVhZnlHcmVlbj1rb3QsdS5MZWN0ZXJuPVNvdCx1LkxldHRlclRleHQ9c3gsdS5MaWJyYXJ5PV9vdCx1LkxpYnJhcnlCaWc9Q290LHUuTGlicmFyeVNxdWFyZT1FeSx1LkxpZmVCdW95PVRvdCx1LkxpZ2F0dXJlPUxvdCx1LkxpZ2h0YnVsYj1Bb3QsdS5MaWdodGJ1bGJPZmY9JG90LHUuTGluZUNoYXJ0PUhnLHUuTGluZVNxdWlnZ2xlPURvdCx1Lkxpbms9SW90LHUuTGluazI9UG90LHUuTGluazJPZmY9RW90LHUuTGlua2VkaW49Tm90LHUuTGlzdD10MHQsdS5MaXN0Q2hlY2s9Rm90LHUuTGlzdENoZWNrcz1Pb3QsdS5MaXN0Q2hldnJvbnNEb3duVXA9Um90LHUuTGlzdENoZXZyb25zVXBEb3duPUJvdCx1Lkxpc3RDb2xsYXBzZT1Ib3QsdS5MaXN0RW5kPXFvdCx1Lkxpc3RGaWx0ZXI9am90LHUuTGlzdEZpbHRlclBsdXM9Vm90LHUuTGlzdEluZGVudERlY3JlYXNlPXpsLHUuTGlzdEluZGVudEluY3JlYXNlPWtsLHUuTGlzdE1pbnVzPVVvdCx1Lkxpc3RNdXNpYz1Xb3QsdS5MaXN0T3JkZXJlZD1Hb3QsdS5MaXN0UGx1cz1Zb3QsdS5MaXN0UmVzdGFydD1ab3QsdS5MaXN0U3RhcnQ9WG90LHUuTGlzdFRvZG89S290LHUuTGlzdFRyZWU9UW90LHUuTGlzdFZpZGVvPUpvdCx1Lkxpc3RYPWUwdCx1LkxvYWRlcj1hMHQsdS5Mb2FkZXIyPWt2LHUuTG9hZGVyQ2lyY2xlPWt2LHUuTG9hZGVyUGlud2hlZWw9aTB0LHUuTG9jYXRlPW4wdCx1LkxvY2F0ZUZpeGVkPXIwdCx1LkxvY2F0ZU9mZj1zMHQsdS5Mb2NhdGlvbkVkaXQ9VHYsdS5Mb2NrPWwwdCx1LkxvY2tLZXlob2xlPW8wdCx1LkxvY2tLZXlob2xlT3Blbj1Tdix1LkxvY2tPcGVuPUN2LHUuTG9nSW49YzB0LHUuTG9nT3V0PXAwdCx1LkxvZ3M9ZDB0LHUuTG9sbGlwb3A9aDB0LHUuTHVnZ2FnZT11MHQsdS5NU3F1YXJlPVB5LHUuTWFnbmV0PWYwdCx1Lk1haWw9dzB0LHUuTWFpbENoZWNrPW0wdCx1Lk1haWxNaW51cz1nMHQsdS5NYWlsT3Blbj1iMHQsdS5NYWlsUGx1cz12MHQsdS5NYWlsUXVlc3Rpb249X3YsdS5NYWlsUXVlc3Rpb25NYXJrPV92LHUuTWFpbFNlYXJjaD15MHQsdS5NYWlsV2FybmluZz14MHQsdS5NYWlsWD1NMHQsdS5NYWlsYm94PXowdCx1Lk1haWxzPWswdCx1Lk1hcD1SMHQsdS5NYXBNaW51cz1TMHQsdS5NYXBQaW49TjB0LHUuTWFwUGluQ2hlY2s9XzB0LHUuTWFwUGluQ2hlY2tJbnNpZGU9QzB0LHUuTWFwUGluSG91c2U9VDB0LHUuTWFwUGluTWludXM9JDB0LHUuTWFwUGluTWludXNJbnNpZGU9TDB0LHUuTWFwUGluT2ZmPUEwdCx1Lk1hcFBpblBlbj1Udix1Lk1hcFBpblBsdXM9RTB0LHUuTWFwUGluUGx1c0luc2lkZT1EMHQsdS5NYXBQaW5YPUkwdCx1Lk1hcFBpblhJbnNpZGU9UDB0LHUuTWFwUGlubmVkPUYwdCx1Lk1hcFBsdXM9TzB0LHUuTWFycz1IMHQsdS5NYXJzU3Ryb2tlPUIwdCx1Lk1hcnRpbmk9cTB0LHUuTWF4aW1pemU9ajB0LHUuTWF4aW1pemUyPVYwdCx1Lk1lZGFsPVUwdCx1Lk1lZ2FwaG9uZT1HMHQsdS5NZWdhcGhvbmVPZmY9VzB0LHUuTWVoPVkwdCx1Lk1lbW9yeVN0aWNrPVgwdCx1Lk1lbnU9WjB0LHUuTWVudVNxdWFyZT1JeSx1Lk1lcmdlPUswdCx1Lk1lc3NhZ2VDaXJjbGU9bzR0LHUuTWVzc2FnZUNpcmNsZUNvZGU9UTB0LHUuTWVzc2FnZUNpcmNsZURhc2hlZD1KMHQsdS5NZXNzYWdlQ2lyY2xlSGVhcnQ9ZTR0LHUuTWVzc2FnZUNpcmNsZU1vcmU9dDR0LHUuTWVzc2FnZUNpcmNsZU9mZj1hNHQsdS5NZXNzYWdlQ2lyY2xlUGx1cz1pNHQsdS5NZXNzYWdlQ2lyY2xlUXVlc3Rpb249THYsdS5NZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrPUx2LHUuTWVzc2FnZUNpcmNsZVJlcGx5PXM0dCx1Lk1lc3NhZ2VDaXJjbGVXYXJuaW5nPXI0dCx1Lk1lc3NhZ2VDaXJjbGVYPW40dCx1Lk1lc3NhZ2VTcXVhcmU9ejR0LHUuTWVzc2FnZVNxdWFyZUNvZGU9bDR0LHUuTWVzc2FnZVNxdWFyZURhc2hlZD1jNHQsdS5NZXNzYWdlU3F1YXJlRGlmZj1kNHQsdS5NZXNzYWdlU3F1YXJlRG90PXA0dCx1Lk1lc3NhZ2VTcXVhcmVIZWFydD1oNHQsdS5NZXNzYWdlU3F1YXJlTG9jaz11NHQsdS5NZXNzYWdlU3F1YXJlTW9yZT1mNHQsdS5NZXNzYWdlU3F1YXJlT2ZmPW00dCx1Lk1lc3NhZ2VTcXVhcmVQbHVzPWc0dCx1Lk1lc3NhZ2VTcXVhcmVRdW90ZT1iNHQsdS5NZXNzYWdlU3F1YXJlUmVwbHk9djR0LHUuTWVzc2FnZVNxdWFyZVNoYXJlPXk0dCx1Lk1lc3NhZ2VTcXVhcmVUZXh0PXg0dCx1Lk1lc3NhZ2VTcXVhcmVXYXJuaW5nPXc0dCx1Lk1lc3NhZ2VTcXVhcmVYPU00dCx1Lk1lc3NhZ2VzU3F1YXJlPWs0dCx1Lk1pYz1DNHQsdS5NaWMyPSR2LHUuTWljT2ZmPVM0dCx1Lk1pY1ZvY2FsPSR2LHUuTWljcm9jaGlwPV80dCx1Lk1pY3Jvc2NvcGU9VDR0LHUuTWljcm93YXZlPUw0dCx1Lk1pbGVzdG9uZT0kNHQsdS5NaWxrPUU0dCx1Lk1pbGtPZmY9QTR0LHUuTWluaW1pemU9UDR0LHUuTWluaW1pemUyPUQ0dCx1Lk1pbnVzPUk0dCx1Lk1pbnVzQ2lyY2xlPXBiLHUuTWludXNTcXVhcmU9TnksdS5Nb25pdG9yPVo0dCx1Lk1vbml0b3JDaGVjaz1ONHQsdS5Nb25pdG9yQ2xvdWQ9RjR0LHUuTW9uaXRvckNvZz1PNHQsdS5Nb25pdG9yRG90PVI0dCx1Lk1vbml0b3JEb3duPUI0dCx1Lk1vbml0b3JPZmY9SDR0LHUuTW9uaXRvclBhdXNlPXE0dCx1Lk1vbml0b3JQbGF5PVY0dCx1Lk1vbml0b3JTbWFydHBob25lPWo0dCx1Lk1vbml0b3JTcGVha2VyPVU0dCx1Lk1vbml0b3JTdG9wPVc0dCx1Lk1vbml0b3JVcD1HNHQsdS5Nb25pdG9yWD1ZNHQsdS5Nb29uPUs0dCx1Lk1vb25TdGFyPVg0dCx1Lk1vcmVIb3Jpem9udGFsPUliLHUuTW9yZVZlcnRpY2FsPVBiLHUuTW90b3JiaWtlPVE0dCx1Lk1vdW50YWluPWUzdCx1Lk1vdW50YWluU25vdz1KNHQsdS5Nb3VzZT1vM3QsdS5Nb3VzZU9mZj10M3QsdS5Nb3VzZVBvaW50ZXI9bjN0LHUuTW91c2VQb2ludGVyMj1pM3QsdS5Nb3VzZVBvaW50ZXIyT2ZmPWEzdCx1Lk1vdXNlUG9pbnRlckJhbj1yM3QsdS5Nb3VzZVBvaW50ZXJDbGljaz1zM3QsdS5Nb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ9Q3ksdS5Nb3ZlPXgzdCx1Lk1vdmUzRD1Bdix1Lk1vdmUzZD1Bdix1Lk1vdmVEaWFnb25hbD1jM3QsdS5Nb3ZlRGlhZ29uYWwyPWwzdCx1Lk1vdmVEb3duPWgzdCx1Lk1vdmVEb3duTGVmdD1kM3QsdS5Nb3ZlRG93blJpZ2h0PXAzdCx1Lk1vdmVIb3Jpem9udGFsPXUzdCx1Lk1vdmVMZWZ0PWYzdCx1Lk1vdmVSaWdodD1tM3QsdS5Nb3ZlVXA9djN0LHUuTW92ZVVwTGVmdD1nM3QsdS5Nb3ZlVXBSaWdodD1iM3QsdS5Nb3ZlVmVydGljYWw9eTN0LHUuTXVzaWM9azN0LHUuTXVzaWMyPXczdCx1Lk11c2ljMz1NM3QsdS5NdXNpYzQ9ejN0LHUuTmF2aWdhdGlvbj1fM3QsdS5OYXZpZ2F0aW9uMj1DM3QsdS5OYXZpZ2F0aW9uMk9mZj1TM3QsdS5OYXZpZ2F0aW9uT2ZmPVQzdCx1Lk5ldHdvcms9TDN0LHUuTmV3c3BhcGVyPSQzdCx1Lk5mYz1BM3QsdS5Ob25CaW5hcnk9RDN0LHUuTm90ZWJvb2s9TjN0LHUuTm90ZWJvb2tQZW49RTN0LHUuTm90ZWJvb2tUYWJzPVAzdCx1Lk5vdGVib29rVGV4dD1JM3QsdS5Ob3RlcGFkVGV4dD1PM3QsdS5Ob3RlcGFkVGV4dERhc2hlZD1GM3QsdS5OdXQ9UjN0LHUuTnV0T2ZmPUIzdCx1Lk9jdGFnb249cTN0LHUuT2N0YWdvbkFsZXJ0PUR2LHUuT2N0YWdvbk1pbnVzPUgzdCx1Lk9jdGFnb25QYXVzZT1Fdix1Lk9jdGFnb25YPVB2LHUuT21lZ2E9VjN0LHUuT3B0aW9uPVUzdCx1Lk9yYml0PWozdCx1Lk9yaWdhbWk9VzN0LHUuT3V0ZGVudD16bCx1LlBhY2thZ2U9ZWx0LHUuUGFja2FnZTI9RzN0LHUuUGFja2FnZUNoZWNrPVkzdCx1LlBhY2thZ2VNaW51cz1aM3QsdS5QYWNrYWdlT3Blbj1YM3QsdS5QYWNrYWdlUGx1cz1LM3QsdS5QYWNrYWdlU2VhcmNoPVEzdCx1LlBhY2thZ2VYPUozdCx1LlBhaW50QnVja2V0PWFsdCx1LlBhaW50Um9sbGVyPXRsdCx1LlBhaW50YnJ1c2g9aWx0LHUuUGFpbnRicnVzaDI9SXYsdS5QYWludGJydXNoVmVydGljYWw9SXYsdS5QYWxldHRlPXJsdCx1LlBhbG10cmVlPWN4LHUuUGFuZGE9c2x0LHUuUGFuZWxCb3R0b209bGx0LHUuUGFuZWxCb3R0b21DbG9zZT1ubHQsdS5QYW5lbEJvdHRvbURhc2hlZD1Odix1LlBhbmVsQm90dG9tSW5hY3RpdmU9TnYsdS5QYW5lbEJvdHRvbU9wZW49b2x0LHUuUGFuZWxMZWZ0PUJ2LHUuUGFuZWxMZWZ0Q2xvc2U9RnYsdS5QYW5lbExlZnREYXNoZWQ9T3YsdS5QYW5lbExlZnRJbmFjdGl2ZT1Pdix1LlBhbmVsTGVmdE9wZW49UnYsdS5QYW5lbExlZnRSaWdodERhc2hlZD1jbHQsdS5QYW5lbFJpZ2h0PWhsdCx1LlBhbmVsUmlnaHRDbG9zZT1kbHQsdS5QYW5lbFJpZ2h0RGFzaGVkPUh2LHUuUGFuZWxSaWdodEluYWN0aXZlPUh2LHUuUGFuZWxSaWdodE9wZW49cGx0LHUuUGFuZWxUb3A9Z2x0LHUuUGFuZWxUb3BCb3R0b21EYXNoZWQ9dWx0LHUuUGFuZWxUb3BDbG9zZT1mbHQsdS5QYW5lbFRvcERhc2hlZD1xdix1LlBhbmVsVG9wSW5hY3RpdmU9cXYsdS5QYW5lbFRvcE9wZW49bWx0LHUuUGFuZWxzTGVmdEJvdHRvbT1ibHQsdS5QYW5lbHNMZWZ0UmlnaHQ9JGIsdS5QYW5lbHNSaWdodEJvdHRvbT12bHQsdS5QYW5lbHNUb3BCb3R0b209WHYsdS5QYW5lbHNUb3BMZWZ0PVZ2LHUuUGFwZXJjbGlwPXlsdCx1LlBhcmVudGhlc2VzPXhsdCx1LlBhcmtpbmdDaXJjbGU9dWIsdS5QYXJraW5nQ2lyY2xlT2ZmPWhiLHUuUGFya2luZ01ldGVyPXdsdCx1LlBhcmtpbmdTcXVhcmU9UnksdS5QYXJraW5nU3F1YXJlT2ZmPU95LHUuUGFydHlQb3BwZXI9TWx0LHUuUGF1c2U9emx0LHUuUGF1c2VDaXJjbGU9ZmIsdS5QYXVzZU9jdGFnb249RXYsdS5QYXdQcmludD1rbHQsdS5QY0Nhc2U9U2x0LHUuUGVuPVV2LHUuUGVuQm94PWxvLHUuUGVuTGluZT1qdix1LlBlbk9mZj1DbHQsdS5QZW5TcXVhcmU9bG8sdS5QZW5Ub29sPV9sdCx1LlBlbmNpbD1EbHQsdS5QZW5jaWxMaW5lPVRsdCx1LlBlbmNpbE9mZj1MbHQsdS5QZW5jaWxSdWxlcj0kbHQsdS5QZW50YWdvbj1BbHQsdS5QZXJjZW50PUVsdCx1LlBlcmNlbnRDaXJjbGU9bWIsdS5QZXJjZW50RGlhbW9uZD1EYix1LlBlcmNlbnRTcXVhcmU9SHksdS5QZXJzb25TdGFuZGluZz1QbHQsdS5QaGlsaXBwaW5lUGVzbz1JbHQsdS5QaG9uZT1xbHQsdS5QaG9uZUNhbGw9Tmx0LHUuUGhvbmVGb3J3YXJkZWQ9Rmx0LHUuUGhvbmVJbmNvbWluZz1PbHQsdS5QaG9uZU1pc3NlZD1SbHQsdS5QaG9uZU9mZj1CbHQsdS5QaG9uZU91dGdvaW5nPUhsdCx1LlBpPVZsdCx1LlBpU3F1YXJlPUJ5LHUuUGlhbm89amx0LHUuUGlja2F4ZT1VbHQsdS5QaWN0dXJlSW5QaWN0dXJlPVlsdCx1LlBpY3R1cmVJblBpY3R1cmUyPVdsdCx1LlBpZUNoYXJ0PVVnLHUuUGlnZ3lCYW5rPUdsdCx1LlBpbGNyb3c9S2x0LHUuUGlsY3Jvd0xlZnQ9Wmx0LHUuUGlsY3Jvd1JpZ2h0PVhsdCx1LlBpbGNyb3dTcXVhcmU9cXksdS5QaWxsPUpsdCx1LlBpbGxCb3R0bGU9UWx0LHUuUGluPXRjdCx1LlBpbk9mZj1lY3QsdS5QaXBldHRlPWFjdCx1LlBpenphPWljdCx1LlBsYW5lPW5jdCx1LlBsYW5lTGFuZGluZz1yY3QsdS5QbGFuZVRha2VvZmY9c2N0LHUuUGxheT1vY3QsdS5QbGF5Q2lyY2xlPWdiLHUuUGxheVNxdWFyZT1WeSx1LlBsdWc9Y2N0LHUuUGx1ZzI9bGN0LHUuUGx1Z1phcD1Xdix1LlBsdWdaYXAyPVd2LHUuUGx1cz1kY3QsdS5QbHVzQ2lyY2xlPWJiLHUuUGx1c1NxdWFyZT1qeSx1LlBvY2tldD11Y3QsdS5Qb2NrZXRLbmlmZT1wY3QsdS5Qb2RjYXN0PWhjdCx1LlBvaW50ZXI9bWN0LHUuUG9pbnRlck9mZj1mY3QsdS5Qb3Bjb3JuPWdjdCx1LlBvcHNpY2xlPWJjdCx1LlBvdW5kU3Rlcmxpbmc9dmN0LHUuUG93ZXI9eGN0LHUuUG93ZXJDaXJjbGU9dmIsdS5Qb3dlck9mZj15Y3QsdS5Qb3dlclNxdWFyZT1VeSx1LlByZXNlbnRhdGlvbj1NY3QsdS5QcmludGVyPWtjdCx1LlByaW50ZXJDaGVjaz13Y3QsdS5QcmludGVyWD16Y3QsdS5Qcm9qZWN0b3I9U2N0LHUuUHJvcG9ydGlvbnM9Q2N0LHUuUHV6emxlPV9jdCx1LlB5cmFtaWQ9VGN0LHUuUXJDb2RlPUxjdCx1LlF1b3RlPSRjdCx1LlJhYmJpdD1BY3QsdS5SYWRhcj1EY3QsdS5SYWRpYXRpb249RWN0LHUuUmFkaWNhbD1QY3QsdS5SYWRpbz1GY3QsdS5SYWRpb1JlY2VpdmVyPUljdCx1LlJhZGlvVG93ZXI9TmN0LHUuUmFkaXVzPU9jdCx1LlJhaWxTeW1ib2w9UmN0LHUuUmFpbmJvdz1CY3QsdS5SYXQ9SGN0LHUuUmF0aW89cWN0LHUuUmVjZWlwdD1RY3QsdS5SZWNlaXB0Q2VudD1WY3QsdS5SZWNlaXB0RXVybz1qY3QsdS5SZWNlaXB0SW5kaWFuUnVwZWU9VWN0LHUuUmVjZWlwdEphcGFuZXNlWWVuPVdjdCx1LlJlY2VpcHRQb3VuZFN0ZXJsaW5nPUdjdCx1LlJlY2VpcHRSdXNzaWFuUnVibGU9WWN0LHUuUmVjZWlwdFN3aXNzRnJhbmM9WmN0LHUuUmVjZWlwdFRleHQ9WGN0LHUuUmVjZWlwdFR1cmtpc2hMaXJhPUtjdCx1LlJlY3RhbmdsZUNpcmNsZT1KY3QsdS5SZWN0YW5nbGVFbGxpcHNpcz1Hdix1LlJlY3RhbmdsZUdvZ2dsZXM9dDZ0LHUuUmVjdGFuZ2xlSG9yaXpvbnRhbD1lNnQsdS5SZWN0YW5nbGVWZXJ0aWNhbD1hNnQsdS5SZWN5Y2xlPWk2dCx1LlJlZG89bjZ0LHUuUmVkbzI9czZ0LHUuUmVkb0RvdD1yNnQsdS5SZWZyZXNoQ2N3PWw2dCx1LlJlZnJlc2hDY3dEb3Q9bzZ0LHUuUmVmcmVzaEN3PWQ2dCx1LlJlZnJlc2hDd09mZj1jNnQsdS5SZWZyaWdlcmF0b3I9cDZ0LHUuUmVnZXg9aDZ0LHUuUmVtb3ZlRm9ybWF0dGluZz11NnQsdS5SZXBlYXQ9ZzZ0LHUuUmVwZWF0MT1tNnQsdS5SZXBlYXQyPWY2dCx1LlJlcGxhY2U9djZ0LHUuUmVwbGFjZUFsbD1iNnQsdS5SZXBseT14NnQsdS5SZXBseUFsbD15NnQsdS5SZXdpbmQ9dzZ0LHUuUmliYm9uPU02dCx1LlJvY2tldD16NnQsdS5Sb2NraW5nQ2hhaXI9azZ0LHUuUm9sbGVyQ29hc3Rlcj1TNnQsdS5Sb3NlPUM2dCx1LlJvdGF0ZTNEPVl2LHUuUm90YXRlM2Q9WXYsdS5Sb3RhdGVDY3c9TDZ0LHUuUm90YXRlQ2N3S2V5PV82dCx1LlJvdGF0ZUNjd1NxdWFyZT1UNnQsdS5Sb3RhdGVDdz1BNnQsdS5Sb3RhdGVDd1NxdWFyZT0kNnQsdS5Sb3V0ZT1FNnQsdS5Sb3V0ZU9mZj1ENnQsdS5Sb3V0ZXI9UDZ0LHUuUm93cz1adix1LlJvd3MyPVp2LHUuUm93czM9WHYsdS5Sb3dzND1JNnQsdS5Sc3M9TjZ0LHUuUnVsZXI9UjZ0LHUuUnVsZXJEaW1lbnNpb25MaW5lPUY2dCx1LlJ1c3NpYW5SdWJsZT1PNnQsdS5TYWlsYm9hdD1INnQsdS5TYWxhZD1CNnQsdS5TYW5kd2ljaD1xNnQsdS5TYXRlbGxpdGU9ajZ0LHUuU2F0ZWxsaXRlRGlzaD1WNnQsdS5TYXVkaVJpeWFsPVU2dCx1LlNhdmU9WTZ0LHUuU2F2ZUFsbD1XNnQsdS5TYXZlT2ZmPUc2dCx1LlNjYWxlPVo2dCx1LlNjYWxlM0Q9S3YsdS5TY2FsZTNkPUt2LHUuU2NhbGluZz1YNnQsdS5TY2FuPXM1dCx1LlNjYW5CYXJjb2RlPVE2dCx1LlNjYW5FeWU9SzZ0LHUuU2NhbkZhY2U9SjZ0LHUuU2NhbkhlYXJ0PWU1dCx1LlNjYW5MaW5lPXQ1dCx1LlNjYW5RckNvZGU9YTV0LHUuU2NhblNlYXJjaD1pNXQsdS5TY2FuVGV4dD1yNXQsdS5TY2F0dGVyQ2hhcnQ9V2csdS5TY2hvb2w9bjV0LHUuU2Nob29sMj1oeCx1LlNjaXNzb3JzPWw1dCx1LlNjaXNzb3JzTGluZURhc2hlZD1vNXQsdS5TY2lzc29yc1NxdWFyZT1XeSx1LlNjaXNzb3JzU3F1YXJlRGFzaGVkQm90dG9tPWJ5LHUuU2Nvb3Rlcj1jNXQsdS5TY3JlZW5TaGFyZT1wNXQsdS5TY3JlZW5TaGFyZU9mZj1kNXQsdS5TY3JvbGw9aDV0LHUuU2Nyb2xsVGV4dD11NXQsdS5TZWFyY2g9eTV0LHUuU2VhcmNoQWxlcnQ9ZjV0LHUuU2VhcmNoQ2hlY2s9bTV0LHUuU2VhcmNoQ29kZT1nNXQsdS5TZWFyY2hTbGFzaD1iNXQsdS5TZWFyY2hYPXY1dCx1LlNlY3Rpb249eDV0LHUuU2VuZD1NNXQsdS5TZW5kSG9yaXpvbmFsPVF2LHUuU2VuZEhvcml6b250YWw9UXYsdS5TZW5kVG9CYWNrPXc1dCx1LlNlcGFyYXRvckhvcml6b250YWw9azV0LHUuU2VwYXJhdG9yVmVydGljYWw9ejV0LHUuU2VydmVyPVQ1dCx1LlNlcnZlckNvZz1TNXQsdS5TZXJ2ZXJDcmFzaD1DNXQsdS5TZXJ2ZXJPZmY9XzV0LHUuU2V0dGluZ3M9JDV0LHUuU2V0dGluZ3MyPUw1dCx1LlNoYXBlcz1BNXQsdS5TaGFyZT1FNXQsdS5TaGFyZTI9RDV0LHUuU2hlZXQ9UDV0LHUuU2hlbGw9STV0LHUuU2hpZWxkPVU1dCx1LlNoaWVsZEFsZXJ0PU41dCx1LlNoaWVsZEJhbj1GNXQsdS5TaGllbGRDaGVjaz1PNXQsdS5TaGllbGRDbG9zZT1leSx1LlNoaWVsZEVsbGlwc2lzPVI1dCx1LlNoaWVsZEhhbGY9QjV0LHUuU2hpZWxkTWludXM9SDV0LHUuU2hpZWxkT2ZmPXE1dCx1LlNoaWVsZFBsdXM9VjV0LHUuU2hpZWxkUXVlc3Rpb249SnYsdS5TaGllbGRRdWVzdGlvbk1hcms9SnYsdS5TaGllbGRVc2VyPWo1dCx1LlNoaWVsZFg9ZXksdS5TaGlwPUc1dCx1LlNoaXBXaGVlbD1XNXQsdS5TaGlydD1ZNXQsdS5TaG9wcGluZ0JhZz1aNXQsdS5TaG9wcGluZ0Jhc2tldD1YNXQsdS5TaG9wcGluZ0NhcnQ9SzV0LHUuU2hvdmVsPVE1dCx1LlNob3dlckhlYWQ9SjV0LHUuU2hyZWRkZXI9ZTh0LHUuU2hyaW1wPXQ4dCx1LlNocmluaz1hOHQsdS5TaHJ1Yj1yOHQsdS5TaHVmZmxlPWk4dCx1LlNpZGViYXI9QnYsdS5TaWRlYmFyQ2xvc2U9RnYsdS5TaWRlYmFyT3Blbj1Sdix1LlNpZ21hPXM4dCx1LlNpZ21hU3F1YXJlPUd5LHUuU2lnbmFsPWQ4dCx1LlNpZ25hbEhpZ2g9bjh0LHUuU2lnbmFsTG93PW84dCx1LlNpZ25hbE1lZGl1bT1sOHQsdS5TaWduYWxaZXJvPWM4dCx1LlNpZ25hdHVyZT1wOHQsdS5TaWducG9zdD11OHQsdS5TaWducG9zdEJpZz1oOHQsdS5TaXJlbj1mOHQsdS5Ta2lwQmFjaz1tOHQsdS5Ta2lwRm9yd2FyZD1nOHQsdS5Ta3VsbD1iOHQsdS5TbGFjaz12OHQsdS5TbGFzaD15OHQsdS5TbGFzaFNxdWFyZT1ZeSx1LlNsaWNlPXg4dCx1LlNsaWRlcnM9dHksdS5TbGlkZXJzSG9yaXpvbnRhbD13OHQsdS5TbGlkZXJzVmVydGljYWw9dHksdS5TbWFydHBob25lPWs4dCx1LlNtYXJ0cGhvbmVDaGFyZ2luZz1NOHQsdS5TbWFydHBob25lTmZjPXo4dCx1LlNtaWxlPUM4dCx1LlNtaWxlUGx1cz1TOHQsdS5TbmFpbD1fOHQsdS5Tbm93Zmxha2U9TDh0LHUuU29hcERpc3BlbnNlckRyb3BsZXQ9VDh0LHUuU29mYT0kOHQsdS5Tb2xhclBhbmVsPUE4dCx1LlNvcnRBc2M9a2csdS5Tb3J0RGVzYz13Zyx1LlNvdXA9RDh0LHUuU3BhY2U9RTh0LHUuU3BhZGU9UDh0LHUuU3BhcmtsZT1JOHQsdS5TcGFya2xlcz1heSx1LlNwZWFrZXI9Tjh0LHUuU3BlZWNoPUY4dCx1LlNwZWxsQ2hlY2s9Ujh0LHUuU3BlbGxDaGVjazI9Tzh0LHUuU3BsaW5lPUg4dCx1LlNwbGluZVBvaW50ZXI9Qjh0LHUuU3BsaXQ9cTh0LHUuU3BsaXRTcXVhcmVIb3Jpem9udGFsPVp5LHUuU3BsaXRTcXVhcmVWZXJ0aWNhbD1YeSx1LlNwb29sPVY4dCx1LlNwb3RsaWdodD1qOHQsdS5TcHJheUNhbj1VOHQsdS5TcHJvdXQ9Vzh0LHUuU3F1YXJlPWlkdCx1LlNxdWFyZUFjdGl2aXR5PXJ5LHUuU3F1YXJlQXJyb3dEb3duPW55LHUuU3F1YXJlQXJyb3dEb3duTGVmdD1peSx1LlNxdWFyZUFycm93RG93blJpZ2h0PXN5LHUuU3F1YXJlQXJyb3dMZWZ0PW95LHUuU3F1YXJlQXJyb3dPdXREb3duTGVmdD1seSx1LlNxdWFyZUFycm93T3V0RG93blJpZ2h0PWR5LHUuU3F1YXJlQXJyb3dPdXRVcExlZnQ9Y3ksdS5TcXVhcmVBcnJvd091dFVwUmlnaHQ9cHksdS5TcXVhcmVBcnJvd1JpZ2h0PWh5LHUuU3F1YXJlQXJyb3dVcD1teSx1LlNxdWFyZUFycm93VXBMZWZ0PXV5LHUuU3F1YXJlQXJyb3dVcFJpZ2h0PWZ5LHUuU3F1YXJlQXN0ZXJpc2s9Z3ksdS5TcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycz1ieSx1LlNxdWFyZUNoYXJ0R2FudHQ9U2wsdS5TcXVhcmVDaGVjaz15eSx1LlNxdWFyZUNoZWNrQmlnPXZ5LHUuU3F1YXJlQ2hldnJvbkRvd249eHksdS5TcXVhcmVDaGV2cm9uTGVmdD13eSx1LlNxdWFyZUNoZXZyb25SaWdodD1NeSx1LlNxdWFyZUNoZXZyb25VcD16eSx1LlNxdWFyZUNvZGU9a3ksdS5TcXVhcmVEYXNoZWQ9X3ksdS5TcXVhcmVEYXNoZWRCb3R0b209WTh0LHUuU3F1YXJlRGFzaGVkQm90dG9tQ29kZT1HOHQsdS5TcXVhcmVEYXNoZWRLYW5iYW49U3ksdS5TcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXI9Q3ksdS5TcXVhcmVEYXNoZWRUb3BTb2xpZD1aOHQsdS5TcXVhcmVEaXZpZGU9VHksdS5TcXVhcmVEb3Q9THksdS5TcXVhcmVFcXVhbD0keSx1LlNxdWFyZUZ1bmN0aW9uPUF5LHUuU3F1YXJlR2FudHRDaGFydD1TbCx1LlNxdWFyZUthbmJhbj1EeSx1LlNxdWFyZUxpYnJhcnk9RXksdS5TcXVhcmVNPVB5LHUuU3F1YXJlTWVudT1JeSx1LlNxdWFyZU1pbnVzPU55LHUuU3F1YXJlTW91c2VQb2ludGVyPUZ5LHUuU3F1YXJlUGFya2luZz1SeSx1LlNxdWFyZVBhcmtpbmdPZmY9T3ksdS5TcXVhcmVQYXVzZT1YOHQsdS5TcXVhcmVQZW49bG8sdS5TcXVhcmVQZXJjZW50PUh5LHUuU3F1YXJlUGk9QnksdS5TcXVhcmVQaWxjcm93PXF5LHUuU3F1YXJlUGxheT1WeSx1LlNxdWFyZVBsdXM9anksdS5TcXVhcmVQb3dlcj1VeSx1LlNxdWFyZVJhZGljYWw9UTh0LHUuU3F1YXJlUm91bmRDb3JuZXI9Szh0LHUuU3F1YXJlU2Npc3NvcnM9V3ksdS5TcXVhcmVTaWdtYT1HeSx1LlNxdWFyZVNsYXNoPVl5LHUuU3F1YXJlU3BsaXRIb3Jpem9udGFsPVp5LHUuU3F1YXJlU3BsaXRWZXJ0aWNhbD1YeSx1LlNxdWFyZVNxdWFyZT1lZHQsdS5TcXVhcmVTdGFjaz1KOHQsdS5TcXVhcmVTdGFyPXRkdCx1LlNxdWFyZVN0b3A9YWR0LHUuU3F1YXJlVGVybWluYWw9S3ksdS5TcXVhcmVVc2VyPUp5LHUuU3F1YXJlVXNlclJvdW5kPVF5LHUuU3F1YXJlWD1leCx1LlNxdWFyZXNFeGNsdWRlPXJkdCx1LlNxdWFyZXNJbnRlcnNlY3Q9c2R0LHUuU3F1YXJlc1N1YnRyYWN0PW5kdCx1LlNxdWFyZXNVbml0ZT1vZHQsdS5TcXVpcmNsZT1jZHQsdS5TcXVpcmNsZURhc2hlZD1sZHQsdS5TcXVpcnJlbD1kZHQsdS5TdGFtcD1wZHQsdS5TdGFyPWZkdCx1LlN0YXJIYWxmPWhkdCx1LlN0YXJPZmY9dWR0LHUuU3RhcnM9YXksdS5TdGVwQmFjaz1tZHQsdS5TdGVwRm9yd2FyZD1nZHQsdS5TdGV0aG9zY29wZT1iZHQsdS5TdGlja2VyPXZkdCx1LlN0aWNreU5vdGU9eWR0LHUuU3RvbmU9eGR0LHUuU3RvcENpcmNsZT14Yix1LlN0b3JlPXdkdCx1LlN0cmV0Y2hIb3Jpem9udGFsPU1kdCx1LlN0cmV0Y2hWZXJ0aWNhbD16ZHQsdS5TdHJpa2V0aHJvdWdoPWtkdCx1LlN1YnNjcmlwdD1TZHQsdS5TdWJ0aXRsZXM9RWcsdS5TdW49JGR0LHUuU3VuRGltPUNkdCx1LlN1bk1lZGl1bT1fZHQsdS5TdW5Nb29uPVRkdCx1LlN1blNub3c9TGR0LHUuU3VucmlzZT1BZHQsdS5TdW5zZXQ9RGR0LHUuU3VwZXJzY3JpcHQ9RWR0LHUuU3dhdGNoQm9vaz1QZHQsdS5Td2lzc0ZyYW5jPUlkdCx1LlN3aXRjaENhbWVyYT1OZHQsdS5Td29yZD1GZHQsdS5Td29yZHM9T2R0LHUuU3lyaW5nZT1SZHQsdS5UYWJsZT1HZHQsdS5UYWJsZTI9QmR0LHUuVGFibGVDZWxsc01lcmdlPUhkdCx1LlRhYmxlQ2VsbHNTcGxpdD1xZHQsdS5UYWJsZUNvbHVtbnNTcGxpdD1WZHQsdS5UYWJsZUNvbmZpZz14bCx1LlRhYmxlT2ZDb250ZW50cz1qZHQsdS5UYWJsZVByb3BlcnRpZXM9VWR0LHUuVGFibGVSb3dzU3BsaXQ9V2R0LHUuVGFibGV0PVlkdCx1LlRhYmxldFNtYXJ0cGhvbmU9WmR0LHUuVGFibGV0cz1YZHQsdS5UYWc9S2R0LHUuVGFncz1RZHQsdS5UYWxseTE9SmR0LHUuVGFsbHkyPWU3dCx1LlRhbGx5Mz10N3QsdS5UYWxseTQ9YTd0LHUuVGFsbHk1PWk3dCx1LlRhbmdlbnQ9cjd0LHUuVGFyZ2V0PXM3dCx1LlRlbGVzY29wZT1uN3QsdS5UZW50PWw3dCx1LlRlbnRUcmVlPW83dCx1LlRlcm1pbmFsPWM3dCx1LlRlcm1pbmFsU3F1YXJlPUt5LHUuVGVzdFR1YmU9ZDd0LHUuVGVzdFR1YmUyPXR4LHUuVGVzdFR1YmVEaWFnb25hbD10eCx1LlRlc3RUdWJlcz1wN3QsdS5UZXh0PUNsLHUuVGV4dEFsaWduQ2VudGVyPWF4LHUuVGV4dEFsaWduRW5kPWl4LHUuVGV4dEFsaWduSnVzdGlmeT1yeCx1LlRleHRBbGlnblN0YXJ0PUNsLHUuVGV4dEN1cnNvcj11N3QsdS5UZXh0Q3Vyc29ySW5wdXQ9aDd0LHUuVGV4dEluaXRpYWw9c3gsdS5UZXh0UXVvdGU9Zjd0LHUuVGV4dFNlYXJjaD1tN3QsdS5UZXh0U2VsZWN0PW54LHUuVGV4dFNlbGVjdGlvbj1ueCx1LlRleHRXcmFwPW94LHUuVGhlYXRlcj1nN3QsdS5UaGVybW9tZXRlcj15N3QsdS5UaGVybW9tZXRlclNub3dmbGFrZT1iN3QsdS5UaGVybW9tZXRlclN1bj12N3QsdS5UaHVtYnNEb3duPXg3dCx1LlRodW1ic1VwPXc3dCx1LlRpY2tldD1UN3QsdS5UaWNrZXRDaGVjaz1NN3QsdS5UaWNrZXRNaW51cz16N3QsdS5UaWNrZXRQZXJjZW50PWs3dCx1LlRpY2tldFBsdXM9Uzd0LHUuVGlja2V0U2xhc2g9Qzd0LHUuVGlja2V0WD1fN3QsdS5UaWNrZXRzPUE3dCx1LlRpY2tldHNQbGFuZT1MN3QsdS5UaW1lcj1FN3QsdS5UaW1lck9mZj0kN3QsdS5UaW1lclJlc2V0PUQ3dCx1LlRvZ2dsZUxlZnQ9UDd0LHUuVG9nZ2xlUmlnaHQ9STd0LHUuVG9pbGV0PU43dCx1LlRvb2xDYXNlPUY3dCx1LlRvb2xib3g9Tzd0LHUuVG9ybmFkbz1SN3QsdS5Ub3J1cz1CN3QsdS5Ub3VjaHBhZD1xN3QsdS5Ub3VjaHBhZE9mZj1IN3QsdS5Ub3dlckNvbnRyb2w9Vjd0LHUuVG95QnJpY2s9ajd0LHUuVHJhY3Rvcj1VN3QsdS5UcmFmZmljQ29uZT1XN3QsdS5UcmFpbj1seCx1LlRyYWluRnJvbnQ9WTd0LHUuVHJhaW5Gcm9udFR1bm5lbD1HN3QsdS5UcmFpblRyYWNrPVo3dCx1LlRyYW1Gcm9udD1seCx1LlRyYW5zZ2VuZGVyPVg3dCx1LlRyYXNoPVE3dCx1LlRyYXNoMj1LN3QsdS5UcmVlRGVjaWR1b3VzPUo3dCx1LlRyZWVQYWxtPWN4LHUuVHJlZVBpbmU9ZXB0LHUuVHJlZXM9dHB0LHUuVHJlbGxvPWFwdCx1LlRyZW5kaW5nRG93bj1pcHQsdS5UcmVuZGluZ1VwPXNwdCx1LlRyZW5kaW5nVXBEb3duPXJwdCx1LlRyaWFuZ2xlPWxwdCx1LlRyaWFuZ2xlQWxlcnQ9ZHgsdS5UcmlhbmdsZURhc2hlZD1ucHQsdS5UcmlhbmdsZVJpZ2h0PW9wdCx1LlRyb3BoeT1kcHQsdS5UcnVjaz1wcHQsdS5UcnVja0VsZWN0cmljPWNwdCx1LlR1cmtpc2hMaXJhPWhwdCx1LlR1cm50YWJsZT11cHQsdS5UdXJ0bGU9ZnB0LHUuVHY9Z3B0LHUuVHYyPXB4LHUuVHZNaW5pbWFsPXB4LHUuVHZNaW5pbWFsUGxheT1tcHQsdS5Ud2l0Y2g9YnB0LHUuVHdpdHRlcj12cHQsdS5UeXBlPXhwdCx1LlR5cGVPdXRsaW5lPXlwdCx1LlVtYnJlbGxhPU1wdCx1LlVtYnJlbGxhT2ZmPXdwdCx1LlVuZGVybGluZT16cHQsdS5VbmRvPUNwdCx1LlVuZG8yPWtwdCx1LlVuZG9Eb3Q9U3B0LHUuVW5mb2xkSG9yaXpvbnRhbD1fcHQsdS5VbmZvbGRWZXJ0aWNhbD1UcHQsdS5Vbmdyb3VwPUxwdCx1LlVuaXZlcnNpdHk9aHgsdS5Vbmxpbms9JHB0LHUuVW5saW5rMj1BcHQsdS5VbmxvY2s9Q3YsdS5VbmxvY2tLZXlob2xlPVN2LHUuVW5wbHVnPURwdCx1LlVwbG9hZD1FcHQsdS5VcGxvYWRDbG91ZD1fYix1LlVzYj1QcHQsdS5Vc2VyPVlwdCx1LlVzZXIyPXZ4LHUuVXNlckNoZWNrPUlwdCx1LlVzZXJDaGVjazI9dXgsdS5Vc2VyQ2lyY2xlPU1iLHUuVXNlckNpcmNsZTI9d2IsdS5Vc2VyQ29nPU5wdCx1LlVzZXJDb2cyPWZ4LHUuVXNlcktleT1GcHQsdS5Vc2VyTG9jaz1PcHQsdS5Vc2VyTWludXM9UnB0LHUuVXNlck1pbnVzMj1teCx1LlVzZXJQZW49QnB0LHUuVXNlclBsdXM9SHB0LHUuVXNlclBsdXMyPWd4LHUuVXNlclJvdW5kPXZ4LHUuVXNlclJvdW5kQ2hlY2s9dXgsdS5Vc2VyUm91bmRDb2c9ZngsdS5Vc2VyUm91bmRLZXk9cXB0LHUuVXNlclJvdW5kTWludXM9bXgsdS5Vc2VyUm91bmRQZW49VnB0LHUuVXNlclJvdW5kUGx1cz1neCx1LlVzZXJSb3VuZFNlYXJjaD1qcHQsdS5Vc2VyUm91bmRYPWJ4LHUuVXNlclNlYXJjaD1VcHQsdS5Vc2VyU3F1YXJlPUp5LHUuVXNlclNxdWFyZTI9UXksdS5Vc2VyU3Rhcj1XcHQsdS5Vc2VyWD1HcHQsdS5Vc2VyWDI9YngsdS5Vc2Vycz1acHQsdS5Vc2VyczI9eXgsdS5Vc2Vyc1JvdW5kPXl4LHUuVXRlbnNpbHM9d3gsdS5VdGVuc2lsc0Nyb3NzZWQ9eHgsdS5VdGlsaXR5UG9sZT1YcHQsdS5WYW49S3B0LHUuVmFyaWFibGU9UXB0LHUuVmF1bHQ9SnB0LHUuVmVjdG9yU3F1YXJlPWVodCx1LlZlZ2FuPXRodCx1LlZlbmV0aWFuTWFzaz1haHQsdS5WZW51cz1yaHQsdS5WZW51c0FuZE1hcnM9aWh0LHUuVmVyaWZpZWQ9X2csdS5WaWJyYXRlPW5odCx1LlZpYnJhdGVPZmY9c2h0LHUuVmlkZW89bGh0LHUuVmlkZW9PZmY9b2h0LHUuVmlkZW90YXBlPWNodCx1LlZpZXc9ZGh0LHUuVm9pY2VtYWlsPXBodCx1LlZvbGxleWJhbGw9aGh0LHUuVm9sdW1lPXZodCx1LlZvbHVtZTE9dWh0LHUuVm9sdW1lMj1maHQsdS5Wb2x1bWVPZmY9bWh0LHUuVm9sdW1lWD1naHQsdS5Wb3RlPWJodCx1LldhbGxldD14aHQsdS5XYWxsZXQyPU14LHUuV2FsbGV0Q2FyZHM9eWh0LHUuV2FsbGV0TWluaW1hbD1NeCx1LldhbGxwYXBlcj13aHQsdS5XYW5kPU1odCx1LldhbmQyPXp4LHUuV2FuZFNwYXJrbGVzPXp4LHUuV2FyZWhvdXNlPXpodCx1Lldhc2hpbmdNYWNoaW5lPWtodCx1LldhdGNoPVNodCx1LldhdmVzPUxodCx1LldhdmVzQXJyb3dEb3duPUNodCx1LldhdmVzQXJyb3dVcD1faHQsdS5XYXZlc0xhZGRlcj1UaHQsdS5XYXlwb2ludHM9JGh0LHUuV2ViY2FtPUFodCx1LldlYmhvb2s9RWh0LHUuV2ViaG9va09mZj1EaHQsdS5XZWlnaHQ9Tmh0LHUuV2VpZ2h0VGlsZGU9UGh0LHUuV2hlYXQ9Rmh0LHUuV2hlYXRPZmY9SWh0LHUuV2hvbGVXb3JkPU9odCx1LldpZmk9V2h0LHUuV2lmaUNvZz1SaHQsdS5XaWZpSGlnaD1CaHQsdS5XaWZpTG93PUhodCx1LldpZmlPZmY9cWh0LHUuV2lmaVBlbj1WaHQsdS5XaWZpU3luYz1qaHQsdS5XaWZpWmVybz1VaHQsdS5XaW5kPVlodCx1LldpbmRBcnJvd0Rvd249R2h0LHUuV2luZT1aaHQsdS5XaW5lT2ZmPUtodCx1LldvcmtmbG93PVhodCx1Lldvcm09UWh0LHUuV3JhcFRleHQ9b3gsdS5XcmVuY2g9dDl0LHUuWD1KaHQsdS5YQ2lyY2xlPXpiLHUuWE9jdGFnb249UHYsdS5YU3F1YXJlPWV4LHUuWW91dHViZT1lOXQsdS5aYXA9aTl0LHUuWmFwT2ZmPWE5dCx1Llpvb21Jbj1zOXQsdS5ab29tT3V0PXI5dCx1LmNyZWF0ZUVsZW1lbnQ9eFplLHUuY3JlYXRlSWNvbnM9bjl0LHUuaWNvbnM9R2p0fSk7dmFyIF9sLG85dCxsOXQ9YigoKT0+e3VlKCk7RXQoKTtfbD1VMShreCgpLDEpLG85dD0oKT0+e2xldCB0PU9iamVjdC5rZXlzKFN4LmZhKTtjb25zb2xlLmxvZygiRmlyc3QgZmV3IEx1Y2lkZSBrZXlzOiIsT2JqZWN0LmtleXMoX2wpLnNsaWNlKDAsNSkpO2xldCBlPU9iamVjdC5rZXlzKF9sKS5maWx0ZXIocz0+e2xldCBuPXNbMF09PT1zWzBdLnRvVXBwZXJDYXNlKCkmJnNbMF0hPT1zWzBdLnRvTG93ZXJDYXNlKCksbz10eXBlb2YgX2xbc109PSJmdW5jdGlvbiIsZD0hWyJjcmVhdGVFbGVtZW50IiwiY3JlYXRlSWNvbnMiLCJkZWZhdWx0Il0uaW5jbHVkZXMocyk7cmV0dXJuIG8mJm4mJmR9KS5tYXAocz0+cy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKStzLnNsaWNlKDEpKTtpZihjb25zb2xlLmxvZyhgRm91bmQgJHtlLmxlbmd0aH0gTHVjaWRlIGljb25zYCksZS5sZW5ndGg9PT0wJiYoY29uc29sZS5sb2coIlRyeWluZyBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBmaW5kIEx1Y2lkZSBpY29ucyIpLF9sLmljb25zKSl7bGV0IHM9X2wuaWNvbnN8fHt9O2UucHVzaCguLi5PYmplY3Qua2V5cyhzKSksY29uc29sZS5sb2coYEZvdW5kICR7ZS5sZW5ndGh9IGljb25zIHZpYSBhbHRlcm5hdGl2ZSBtZXRob2RgKX1sZXQgYT0oKT0+e2xldCBzPXQubWFwKGM9PmBmYToke2N9YCksbj1lLm1hcChjPT5gbHVjaWRlOiR7Y31gKSxvPVsuLi5zLC4uLm5dLGQ9by5qb2luKGAKYCk7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZCkudGhlbigoKT0+e2xldCBwPXdpbmRvdy5ldmVudC5jdXJyZW50VGFyZ2V0LGw9cC50ZXh0Q29udGVudDtwLnRleHRDb250ZW50PWBcdTI3MTMgQ29waWVkICR7by5sZW5ndGh9IGljb24gbmFtZXMhYCxzZXRUaW1lb3V0KCgpPT57cC50ZXh0Q29udGVudD1sfSwyZTMpfSl9LGk9cz0+e2xldCBuPXMudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpLG89cy50YXJnZXQuY2xvc2VzdCgiLmRlbW9Db250YWluZXIiKTtvLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyIikuZm9yRWFjaChjPT57bGV0IHA9Yy5nZXRBdHRyaWJ1dGUoImRhdGEtbmFtZSIpO249PT0iInx8cCYmcC5pbmNsdWRlcyhuKT9jLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmMuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9KSxvLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWN0aW9uLWNvbnRhaW5lciIpLmZvckVhY2goYz0+e2xldCBwPWMucXVlcnlTZWxlY3RvckFsbCgiLmljb25Db250YWluZXI6bm90KC5oaWRkZW4pIikubGVuZ3RoLGw9Yy5xdWVyeVNlbGVjdG9yKCIuaWNvbi1jb3VudCIpO2lmKGwpe2xldCBmPWMuY2xhc3NMaXN0LmNvbnRhaW5zKCJmYS1zZWN0aW9uIik/dC5sZW5ndGg6ZS5sZW5ndGg7bC50ZXh0Q29udGVudD1wPT09Zj9gJHtmfSBpY29uc2A6YCR7cH0gb2YgJHtmfSBpY29uc2B9fSl9LHI9KHMsbik9PntsZXQgbz1gJHtufToke3N9YDtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChvKS50aGVuKCgpPT57bGV0IHA9d2luZG93LmV2ZW50LmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcigiLmNvcHktdG9vbHRpcCIpO3AmJihwLnRleHRDb250ZW50PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57cC50ZXh0Q29udGVudD0iQ2xpY2sgdG8gY29weSJ9LDJlMykpfSl9O3JldHVybiB3YAogIDxzdHlsZT4KICAgIC5kZW1vQ29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgYmFja2dyb3VuZDogIzExMTExMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgZm9udC1zaXplOiAzMHB4OwogICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICAgIH0KICAgIAogICAgLnNlYXJjaC1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxMHB4OwogICAgfQogICAgCiAgICAjaWNvblNlYXJjaCB7CiAgICAgIGZsZXg6IDE7CiAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogIzIyMjsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICB9CiAgICAKICAgICNpY29uU2VhcmNoOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgYm9yZGVyLWNvbG9yOiAjZTQwMDJiOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uIHsKICAgICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZTQwMDJiOwogICAgICBjb2xvcjogI2ZmZjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICNjNDAwMWI7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbjphY3RpdmUgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgICAKICAgIGRlZXMtaWNvbiB7CiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgfQoKICAgIC5pY29uQ29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMjBweCAxNnB4IDBweCAxNnB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzMzMzOwogICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KICAgIAogICAgLmljb25Db250YWluZXI6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogICAgfQoKICAgIC5pY29uTmFtZSB7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBjb2xvcjogI2NjYzsKICAgICAgYmFja2dyb3VuZDogIzMzMzMzMzsKICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgbWFyZ2luLXJpZ2h0OiAtMTZweDsKICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIG1heC13aWR0aDogMTIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4OwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgIG1hcmdpbjogMjBweCAwOwogICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzMzMzM7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIH0KICAgIAogICAgLmFwaS1ub3RlIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogI2U0MDAyYjsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgcGFkZGluZzogMTBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U0MDAyYjsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIyOCwgMCwgNDMsIDAuMSk7CiAgICB9CiAgICAKICAgIC5pY29uLWNvdW50IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogIzg4ODsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgYmFja2dyb3VuZDogIzIyMjsKICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICB9CiAgICAKICAgIC5pY29ucy1ncmlkIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7CiAgICB9CiAgICAKICAgIC5jb3B5LXRvb2x0aXAgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB0b3A6IC0zMHB4OwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciAuY29weS10b29sdGlwIHsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciBkZWVzLWljb24gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICB9CiAgICAKICAgIC5oaWRkZW4gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vQ29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Imljb25TZWFyY2giIHBsYWNlaG9sZGVyPSJTZWFyY2ggaWNvbnMuLi4iIEBpbnB1dD0ke2l9PgogICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWFsbC1idXR0b24iIEBjbGljaz0ke2F9PvCfk4sgQ29weSBBbGwgSWNvbiBOYW1lczwvYnV0dG9uPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImFwaS1ub3RlIj4KICAgICAgTmV3IEFQSTogVXNlIDxjb2RlPmljb249ImZhOmljb25OYW1lIjwvY29kZT4gb3IgPGNvZGU+aWNvbj0ibHVjaWRlOmljb25OYW1lIjwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5pY29uRkE8L2NvZGU+LiAKICAgICAgQ2xpY2sgYW55IGljb24gdG8gY29weSBpdHMgbmV3IGZvcm1hdCB0byBjbGlwYm9hcmQuCiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1jb250YWluZXIgZmEtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEZvbnRBd2Vzb21lIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7dC5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHt0Lm1hcChzPT57bGV0IG49YGZhOiR7c31gO3JldHVybiB3YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgZmEtaWNvbiIgZGF0YS1uYW1lPSR7cy50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKT0+cihzLCJmYSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtufSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmZhOiR7c308L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3B5LXRvb2x0aXAiPkNsaWNrIHRvIGNvcHk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBsdWNpZGUtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEx1Y2lkZSBJY29ucwogICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWNvdW50Ij4ke2UubGVuZ3RofSBpY29uczwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imljb25zLWdyaWQiPgogICAgICAgICR7ZS5tYXAocz0+e2xldCBuPWBsdWNpZGU6JHtzfWA7cmV0dXJuIHdgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbkNvbnRhaW5lciBsdWNpZGUtaWNvbiIgZGF0YS1uYW1lPSR7cy50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKT0+cihzLCJsdWNpZGUiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7bn0gaWNvblNpemU9IjI0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25OYW1lIj5sdWNpZGU6JHtzfTwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdG9vbHRpcCI+Q2xpY2sgdG8gY29weTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0pfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIGB9fSk7ZnVuY3Rpb24gWmp0KCl7TGwuc2l6ZT5jOXQmJkFycmF5LmZyb20oTGwua2V5cygpKS5zbGljZSgwLGM5dC81KS5mb3JFYWNoKGU9PkxsLmRlbGV0ZShlKSl9dmFyIEN4LE1xLFRsLEdpLFlqdCxTeCxMbCxjOXQsZDl0LEV0PWIoKCk9Pnt1ZSgpO0x0KCk7VmUoKTtpZGUoKTtsdmUoKTtfd2UoKTtiWmUoKTtsOXQoKTtDeD1VMShreCgpLDEpLE1xPVUxKGt4KCksMSksVGw9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxHaT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sWWp0PXthcnJvd1JpZ2h0OmRnLGFycm93VXBSaWdodEZyb21TcXVhcmU6dTgsYmVsbDpRbSxidWc6dWcsYnVpbGRpbmc6b2csY2FyZXRMZWZ0OnRnLGNhcmV0UmlnaHQ6S20sY2hlY2s6Y2csY2lyY2xlSW5mbzptOCxjaXJjbGVDaGVjazpGNSxjaXJjbGVDaGVja1NvbGlkOmM4LGNpcmNsZVhtYXJrOmhsLGNpcmNsZVhtYXJrU29saWQ6YmwsY2xvY2tSb3RhdGVMZWZ0OmQ4LGNvcHk6SmYsY29weVNvbGlkOmZnLGRlc2t0b3A6ZjgsZXllOmVnLGV5ZVNsYXNoOm1nLGZpbGVJbnZvaWNlOnBnLGZpbGVJbnZvaWNlRG9sbGVyOmhnLGdlYXI6bzgsZ3JpcDp2bCxtYWduaWZ5aW5nR2xhc3M6cjgsbWVzc2FnZTpJNSxtZXNzYWdlU29saWQ6YTgsbW9uZXlDaGVja0RvbGxhcjpoOCxtdWdIb3Q6Z2csbWludXM6dDgsbmV0d29ya1dpcmVkOnNnLHBhcGVyY2xpcDpsZyxwYXN0ZTpQNSxwYXN0ZVNvbGlkOmU4LHBlblRvU3F1YXJlOnM4LHBsdXM6cDgscmVjZWlwdDphZyxyc3M6aTgsc2hhcmU6bjgsc3VuOlFmLHN1blNvbGlkOnJnLHRlcm1pbmFsOm5nLHRyYXNoOmc4LHRyYXNoU29saWQ6ZzgsdHJhc2hDYW46TjUsdHJhc2hDYW5Tb2xpZDpsOCx1c2VyczppZyx3YWxsZXQ6Sm0seG1hcms6b28sZmFjZWJvb2s6UmYsZ29vZ2xlOkZmLGluc3RhZ3JhbTpxZixsaW5rZWRpbjpPZixtZWRpdW06QTUsc2xhY2s6QmYsdGlrdG9rOkhmLHR3aXR0ZXI6VmZ9LFN4PXtmYTpZanR9LExsPW5ldyBNYXAsYzl0PTUwMDtkOXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWljb24iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmcsY29udmVydGVyOntmcm9tQXR0cmlidXRlOms9PmssdG9BdHRyaWJ1dGU6az0+a319KV0sZD1bSSh7dHlwZTpTdHJpbmcsY29udmVydGVyOntmcm9tQXR0cmlidXRlOms9PmssdG9BdHRyaWJ1dGU6az0+a319KV0sbD1bSSh7dHlwZTpOdW1iZXJ9KV0seT1bSSh7dHlwZTpTdHJpbmd9KV0seD1bSSh7dHlwZTpOdW1iZXJ9KV0sVGwodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uRkEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpY29uRkEiaW4gayxnZXQ6az0+ay5pY29uRkEsc2V0OihrLE4pPT57ay5pY29uRkE9Tn19LG1ldGFkYXRhOl99LG4sbyksVGwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iaWNvbiJpbiBrLGdldDprPT5rLmljb24sc2V0OihrLE4pPT57ay5pY29uPU59fSxtZXRhZGF0YTpffSxjLHApLFRsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaWNvblNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpY29uU2l6ZSJpbiBrLGdldDprPT5rLmljb25TaXplLHNldDooayxOKT0+e2suaWNvblNpemU9Tn19LG1ldGFkYXRhOl99LGYsZyksVGwodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xvciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvbG9yImluIGssZ2V0Oms9PmsuY29sb3Isc2V0OihrLE4pPT57ay5jb2xvcj1OfX0sbWV0YWRhdGE6X30sdixtKSxUbCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN0cm9rZVdpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic3Ryb2tlV2lkdGgiaW4gayxnZXQ6az0+ay5zdHJva2VXaWR0aCxzZXQ6KGssTik9PntrLnN0cm9rZVdpZHRoPU59fSxtZXRhZGF0YTpffSxNLFMpLFRsKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOl99LG51bGwsYSksRj1pPWUudmFsdWUsXyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSl9c3RhdGljIGRlbW89bzl0O3N0YXRpYyBkZW1vR3JvdXBzPVsiVXRpbGl0eSJdOyNlPUdpKHRoaXMsbix2b2lkIDApO2dldCBpY29uRkEoKXtyZXR1cm4gdGhpcy4jZX1zZXQgaWNvbkZBKF8pe3RoaXMuI2U9X30jdD0oR2kodGhpcyxvKSxHaSh0aGlzLGMsdm9pZCAwKSk7Z2V0IGljb24oKXtyZXR1cm4gdGhpcy4jdH1zZXQgaWNvbihfKXt0aGlzLiN0PV99I2E9KEdpKHRoaXMscCksR2kodGhpcyxmLHZvaWQgMCkpO2dldCBpY29uU2l6ZSgpe3JldHVybiB0aGlzLiNhfXNldCBpY29uU2l6ZShfKXt0aGlzLiNhPV99I2k9KEdpKHRoaXMsZyksR2kodGhpcyx2LCJjdXJyZW50Q29sb3IiKSk7Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGNvbG9yKF8pe3RoaXMuI2k9X30jcj0oR2kodGhpcyxtKSxHaSh0aGlzLE0sMikpO2dldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLiNyfXNldCBzdHJva2VXaWR0aChfKXt0aGlzLiNyPV99bGFzdEljb249KEdpKHRoaXMsUyksbnVsbCk7bGFzdEljb25TaXplPW51bGw7bGFzdENvbG9yPW51bGw7bGFzdFN0cm9rZVdpZHRoPW51bGw7Y29uc3RydWN0b3IoKXtzdXBlcigpLHYxLnNldHVwKCl9Z2V0RWZmZWN0aXZlSWNvbigpe3JldHVybiB0aGlzLmljb24/dGhpcy5pY29uOnRoaXMuaWNvbkZBP3RoaXMuaWNvbkZBLnN0YXJ0c1dpdGgoImx1Y2lkZToiKT90aGlzLmljb25GQTpgZmE6JHt0aGlzLmljb25GQX1gOm51bGx9cGFyc2VJY29uU3RyaW5nKF8pe2xldCBrPV8udG9Mb3dlckNhc2UoKTtyZXR1cm4gay5zdGFydHNXaXRoKCJmYToiKT97dHlwZToiZmEiLG5hbWU6Xy5zdWJzdHJpbmcoMyl9Omsuc3RhcnRzV2l0aCgibHVjaWRlOiIpP3t0eXBlOiJsdWNpZGUiLG5hbWU6Xy5zdWJzdHJpbmcoNyl9Ont0eXBlOiJsdWNpZGUiLG5hbWU6X319cmVuZGVyTHVjaWRlSWNvbihfKXtsZXQgaz1gbHVjaWRlOiR7X306JHt0aGlzLmljb25TaXplfToke3RoaXMuY29sb3J9OiR7dGhpcy5zdHJva2VXaWR0aH1gO2lmKExsLmhhcyhrKSlyZXR1cm4gTGwuZ2V0KGspfHwiIjt0cnl7bGV0IE49Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpO2lmKCFDeFtOXSlyZXR1cm4gY29uc29sZS53YXJuKGBMdWNpZGUgaWNvbiAnJHtOfScgbm90IGZvdW5kIGluIGx1Y2lkZUljb25zIG9iamVjdGApLCIiO2xldCBMPSgwLE1xLmNyZWF0ZUVsZW1lbnQpKEN4W05dLHtjb2xvcjp0aGlzLmNvbG9yLHNpemU6dGhpcy5pY29uU2l6ZSxzdHJva2VXaWR0aDp0aGlzLnN0cm9rZVdpZHRofSk7aWYoIUwpcmV0dXJuIGNvbnNvbGUud2FybihgY3JlYXRlRWxlbWVudCByZXR1cm5lZCBlbXB0eSByZXN1bHQgZm9yICR7Tn1gKSwiIjtsZXQgQT1MLm91dGVySFRNTDtyZXR1cm4gTGwuc2V0KGssQSksWmp0KCksQX1jYXRjaChOKXtyZXR1cm4gY29uc29sZS5lcnJvcihgRXJyb3IgcmVuZGVyaW5nIEx1Y2lkZSBpY29uICR7X306YCxOKSxgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIke3RoaXMuaWNvblNpemV9IiBoZWlnaHQ9IiR7dGhpcy5pY29uU2l6ZX0iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIke3RoaXMuY29sb3J9IiBzdHJva2Utd2lkdGg9IiR7dGhpcy5zdHJva2VXaWR0aH0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgICAgICAgPHRleHQgeD0iNTAlIiB5PSI1MCUiIGZvbnQtc2l6ZT0iNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgZmlsbD0iJHt0aGlzLmNvbG9yfSI+JHtffTwvdGV4dD4KICAgICAgPC9zdmc+YH19c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC8qIEltcHJvdmUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlICovCiAgICAgICNpY29uQ29udGFpbmVyIHN2ZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07IC8qIEhlbHBzIHdpdGggYW5pbWF0aW9ucyAqLwogICAgICAgIGNvbnRhaW46IHN0cmljdDsgLyogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uICovCiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICAke3YxLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYH11cGRhdGVkKCl7dGhpcy5pY29uU2l6ZXx8KHRoaXMuaWNvblNpemU9cGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csIiIpKSk7bGV0IF89dGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7aWYodGhpcy5sYXN0SWNvbj09PV8mJnRoaXMubGFzdEljb25TaXplPT09dGhpcy5pY29uU2l6ZSYmdGhpcy5sYXN0Q29sb3I9PT10aGlzLmNvbG9yJiZ0aGlzLmxhc3RTdHJva2VXaWR0aD09PXRoaXMuc3Ryb2tlV2lkdGgpcmV0dXJuO3RoaXMubGFzdEljb249Xyx0aGlzLmxhc3RJY29uU2l6ZT10aGlzLmljb25TaXplLHRoaXMubGFzdENvbG9yPXRoaXMuY29sb3IsdGhpcy5sYXN0U3Ryb2tlV2lkdGg9dGhpcy5zdHJva2VXaWR0aDtsZXQgaz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIiNpY29uQ29udGFpbmVyIik7aWYoISgha3x8IV8pKXRyeXtsZXR7dHlwZTpOLG5hbWU6TH09dGhpcy5wYXJzZUljb25TdHJpbmcoXyk7aWYoTj09PSJsdWNpZGUiKXtrLmlubmVySFRNTD0iIjt0cnl7bGV0IEE9TC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStMLnNsaWNlKDEpO2lmKEN4W0FdKXtsZXQgcT0oMCxNcS5jcmVhdGVFbGVtZW50KShDeFtBXSx7Y29sb3I6dGhpcy5jb2xvcixzaXplOnRoaXMuaWNvblNpemUsc3Ryb2tlV2lkdGg6dGhpcy5zdHJva2VXaWR0aH0pO2lmKHEpe2suYXBwZW5kQ2hpbGQocSk7cmV0dXJufX10aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCBmb3IgJHtBfWApfWNhdGNoKEEpe2NvbnNvbGUuZXJyb3IoIkVycm9yIHJlbmRlcmluZyBMdWNpZGUgaWNvbjoiLEEpO2xldCBxPXRoaXMucmVuZGVyTHVjaWRlSWNvbihMKTtxJiYoay5pbm5lckhUTUw9cSl9fWVsc2V7bGV0IEE9U3guZmFbTF07aWYoQSl7bGV0IHE9Y0UoQSkuaHRtbFswXTtrLmlubmVySFRNTD1xfWVsc2UgY29uc29sZS53YXJuKGBGb250QXdlc29tZSBpY29uIG5vdCBmb3VuZDogJHtMfWApfX1jYXRjaChOKXtjb25zb2xlLmVycm9yKGBFcnJvciB1cGRhdGluZyBpY29uICR7X306YCxOKX19YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMubGFzdEljb249bnVsbCx0aGlzLmxhc3RJY29uU2l6ZT1udWxsLHRoaXMubGFzdENvbG9yPW51bGwsdGhpcy5sYXN0U3Ryb2tlV2lkdGg9bnVsbH1zdGF0aWN7R2koaSxhKX19O3JldHVybiBGPWl9KSgpfSk7dmFyIHA5dCx6cSxXdCxuMj1iKCgpPT57czIoKTtNNWUoKTt1ZSgpO0x0KCk7RHMoKTttaSgpO0V0KCk7VmUoKTtwOXQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx6cT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sV3Q9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWNvbnRleHRtZW51IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6QXJyYXl9KV0scDl0KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWVudUl0ZW1zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4ibWVudUl0ZW1zImluIHAsZ2V0OnA9PnAubWVudUl0ZW1zLHNldDoocCxsKT0+e3AubWVudUl0ZW1zPWx9fSxtZXRhZGF0YTpjfSxuLG8pLHA5dChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPXc1ZTtzdGF0aWMgZGVtb0dyb3Vwcz1bIk92ZXJsYXkiXTtzdGF0aWMgY29udGV4dE1lbnVEZWFjdGl2YXRlZD0hMTtzdGF0aWMgYWNjdW11bGF0ZWRNZW51SXRlbXM9W107c3RhdGljIGluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixjPT57aWYodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKXJldHVybjtjLnByZXZlbnREZWZhdWx0KCksZC5hY2N1bXVsYXRlZE1lbnVJdGVtcz1bXTtsZXQgcD1jLmNvbXBvc2VkUGF0aCgpO2ZvcihsZXQgbCBvZiBwKWlmKGwuZ2V0Q29udGV4dE1lbnVJdGVtcyl7bGV0IGY9bC5nZXRDb250ZXh0TWVudUl0ZW1zKCk7ZiYmZi5sZW5ndGg+MCYmKGQuYWNjdW11bGF0ZWRNZW51SXRlbXMubGVuZ3RoPjAmJmQuYWNjdW11bGF0ZWRNZW51SXRlbXMucHVzaCh7ZGl2aWRlcjohMH0pLGQuYWNjdW11bGF0ZWRNZW51SXRlbXMucHVzaCguLi5mKSl9ZC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhjLGQuYWNjdW11bGF0ZWRNZW51SXRlbXMpfSl9c3RhdGljIGFzeW5jIG9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGMscCl7aWYodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKXJldHVybjtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbD1uZXcgZDtsLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsbC5zdHlsZS56SW5kZXg9U3RyaW5nKHIyLm92ZXJsYXkuY29udGV4dE1lbnUpLGwuc3R5bGUub3BhY2l0eT0iMCIsbC5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIixsLm1lbnVJdGVtcz1wLGwud2luZG93TGF5ZXI9YXdhaXQgZ2kuY3JlYXRlQW5kU2hvdygpLGwud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jIHg9Pnt4LnRhcmdldC5jbG9zZXN0KCJkZWVzLWNvbnRleHRtZW51Iil8fGF3YWl0IGwuZGVzdHJveSgpfSksZG9jdW1lbnQuYm9keS5hcHBlbmQobCksYXdhaXQgenQuc21hcnRkZWxheS5kZWxheUZvcigwKTtsZXQgZj1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9d2luZG93LmlubmVyV2lkdGgseT13aW5kb3cuaW5uZXJIZWlnaHQsdj1jLmNsaWVudFksbT1jLmNsaWVudFg7bStmLndpZHRoPmcmJihtPWctZi53aWR0aC0xMCksditmLmhlaWdodD55JiYodj15LWYuaGVpZ2h0LTEwKSxtPDEwJiYobT0xMCksdjwxMCYmKHY9MTApLGwuc3R5bGUudG9wPWAke3Z9cHhgLGwuc3R5bGUubGVmdD1gJHttfXB4YCxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0idG9wIGxlZnQiLGF3YWl0IHp0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksbC5zdHlsZS5vcGFjaXR5PSIxIixsLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUoMSkgdHJhbnNsYXRlWSgwKSJ9I2U9enEodGhpcyxuLFtdKTtnZXQgbWVudUl0ZW1zKCl7cmV0dXJuIHRoaXMuI2V9c2V0IG1lbnVJdGVtcyhjKXt0aGlzLiNlPWN9d2luZG93TGF5ZXI9enEodGhpcyxvKTtzdWJtZW51PW51bGw7c3VibWVudVRpbWVvdXQ9bnVsbDtwYXJlbnRNZW51PW51bGw7aXNEZXN0cm95aW5nPSExO2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnRhYkluZGV4PTB9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgICAgIG1heC13aWR0aDogMjgwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjY2NjIil9OwogICAgICB9CgogICAgICAubWVudWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5oYXMtc3VibWVudTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICfigLonOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbTphY3RpdmU6bm90KC5oYXMtc3VibWVudSkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1lbnVpdGVtLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbS1zaG9ydGN1dCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKGM9PntpZigiZGl2aWRlciJpbiBjJiZjLmRpdmlkZXIpcmV0dXJuIHdgPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gO2xldCBwPWMsbD1wLnN1Ym1lbnUmJnAuc3VibWVudS5sZW5ndGg+MDtyZXR1cm4gd2AKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ibWVudWl0ZW0gJHtwLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9ICR7bD8iaGFzLXN1Ym1lbnUiOiIifSIgCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PiFwLmRpc2FibGVkJiYhbCYmdGhpcy5oYW5kbGVDbGljayhwKX0KICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpPT50aGlzLmhhbmRsZU1lbnVJdGVtSG92ZXIocCxsKX0KICAgICAgICAgICAgICBAbW91c2VsZWF2ZT0keygpPT50aGlzLmhhbmRsZU1lbnVJdGVtTGVhdmUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7cC5pY29uTmFtZT93YAogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHtwLmljb25OYW1lfSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+JHtwLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICR7cC5zaG9ydGN1dCYmIWw/d2AKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51aXRlbS1zaG9ydGN1dCI+JHtwLnNob3J0Y3V0fTwvc3Bhbj4KICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9KX0KICAgICAgICAke3RoaXMubWVudUl0ZW1zLmxlbmd0aD09PTA/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVudWl0ZW0iIEBjbGljaz0keygpPT57ZC5jb250ZXh0TWVudURlYWN0aXZhdGVkPSEwLHRoaXMuZGVzdHJveSgpfX0+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ibHVjaWRlOngiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51aXRlbS10ZXh0Ij5BbGxvdyBuYXRpdmUgY29udGV4dDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgYDp3YGB9CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmZvY3VzKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmhhbmRsZUtleWRvd24pfWhhbmRsZUtleWRvd249Yz0+e2xldCBwPUFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbTpub3QoLmRpc2FibGVkKSIpKSxsPXAuZmluZEluZGV4KGY9PmYubWF0Y2hlcygiOmhvdmVyIikpO3N3aXRjaChjLmtleSl7Y2FzZSJBcnJvd0Rvd24iOmMucHJldmVudERlZmF1bHQoKTtsZXQgZj1sKzE8cC5sZW5ndGg/bCsxOjA7cFtmXS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJtb3VzZWVudGVyIikpO2JyZWFrO2Nhc2UiQXJyb3dVcCI6Yy5wcmV2ZW50RGVmYXVsdCgpO2xldCBnPWwtMT49MD9sLTE6cC5sZW5ndGgtMTtwW2ddLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSk7YnJlYWs7Y2FzZSJFbnRlciI6Yy5wcmV2ZW50RGVmYXVsdCgpLGw+PTAmJnBbbF0uY2xpY2soKTticmVhaztjYXNlIkVzY2FwZSI6Yy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZGVzdHJveSgpO2JyZWFrfX07YXN5bmMgaGFuZGxlQ2xpY2soYyl7Yy5hY3Rpb24oKSxhd2FpdCB0aGlzLmRlc3Ryb3lBbGwoKX1hc3luYyBoYW5kbGVNZW51SXRlbUhvdmVyKGMscCl7dGhpcy5zdWJtZW51VGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KSx0aGlzLnN1Ym1lbnVUaW1lb3V0PW51bGwpLHRoaXMuc3VibWVudSYmYXdhaXQgdGhpcy5oaWRlU3VibWVudSgpLHAmJmMuc3VibWVudSYmKHRoaXMuc3VibWVudVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuc2hvd1N1Ym1lbnUoYyl9LDIwMCkpfWhhbmRsZU1lbnVJdGVtTGVhdmUoKXt0aGlzLnN1Ym1lbnVUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCksdGhpcy5zdWJtZW51VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5zdWJtZW51JiYhdGhpcy5zdWJtZW51Lm1hdGNoZXMoIjpob3ZlciIpJiZ0aGlzLmhpZGVTdWJtZW51KCl9LDMwMCl9YXN5bmMgc2hvd1N1Ym1lbnUoYyl7aWYoIWMuc3VibWVudXx8Yy5zdWJtZW51Lmxlbmd0aD09PTApcmV0dXJuO2xldCBsPUFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbSIpKS5maW5kKE09Pk0ucXVlcnlTZWxlY3RvcigiLm1lbnVpdGVtLXRleHQiKT8udGV4dENvbnRlbnQ9PT1jLm5hbWUpO2lmKCFsKXJldHVybjt0aGlzLnN1Ym1lbnU9bmV3IGQsdGhpcy5zdWJtZW51Lm1lbnVJdGVtcz1jLnN1Ym1lbnUsdGhpcy5zdWJtZW51LnBhcmVudE1lbnU9dGhpcyx0aGlzLnN1Ym1lbnUuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN1Ym1lbnUuc3R5bGUuekluZGV4PVN0cmluZyhwYXJzZUludCh0aGlzLnN0eWxlLnpJbmRleCkrMSksdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHk9IjAiLHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDAuOTUpIixkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLnN1Ym1lbnUpLGF3YWl0IHp0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7bGV0IGY9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseT10aGlzLnN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj13aW5kb3cuaW5uZXJXaWR0aCxtPWcucmlnaHQtNCx4PWYudG9wO20reS53aWR0aD52LTEwJiYobT1nLmxlZnQteS53aWR0aCs0KSx4K3kuaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodC0xMCYmKHg9d2luZG93LmlubmVySGVpZ2h0LXkuaGVpZ2h0LTEwKSx0aGlzLnN1Ym1lbnUuc3R5bGUubGVmdD1gJHttfXB4YCx0aGlzLnN1Ym1lbnUuc3R5bGUudG9wPWAke3h9cHhgLGF3YWl0IHp0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHk9IjEiLHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIix0aGlzLnN1Ym1lbnUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsKCk9Pnt0aGlzLnN1Ym1lbnVUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpLHRoaXMuc3VibWVudVRpbWVvdXQ9bnVsbCl9KSx0aGlzLnN1Ym1lbnUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsKCk9Pnt0aGlzLmhhbmRsZU1lbnVJdGVtTGVhdmUoKX0pfWFzeW5jIGhpZGVTdWJtZW51KCl7dGhpcy5zdWJtZW51JiYoYXdhaXQgdGhpcy5zdWJtZW51LmRlc3Ryb3koKSx0aGlzLnN1Ym1lbnU9bnVsbCl9YXN5bmMgZGVzdHJveSgpe3RoaXMuaXNEZXN0cm95aW5nfHwodGhpcy5pc0Rlc3Ryb3lpbmc9ITAsdGhpcy5zdWJtZW51VGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KSx0aGlzLnN1Ym1lbnVUaW1lb3V0PW51bGwpLHRoaXMuc3VibWVudSYmKGF3YWl0IHRoaXMuc3VibWVudS5kZXN0cm95KCksdGhpcy5zdWJtZW51PW51bGwpLHRoaXMud2luZG93TGF5ZXImJiF0aGlzLnBhcmVudE1lbnUmJnRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpLHRoaXMuc3R5bGUub3BhY2l0eT0iMCIsdGhpcy5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIixhd2FpdCB6dC5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCksdGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcykpfWFzeW5jIGRlc3Ryb3lBbGwoKXtsZXQgYz10aGlzO2Zvcig7Yy5wYXJlbnRNZW51OyljPWMucGFyZW50TWVudTthd2FpdCBjLmRlc3Ryb3koKX1zdGF0aWN7enEoaSxhKX19O3JldHVybiBkPWl9KSgpO1d0LmluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpfSk7dmFyIGg5dCxrcSxYanQsdTl0PWIoKCk9Pnt1ZSgpO2g5dD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGtxPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxYanQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWRlbW93cmFwcGVyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe2F0dHJpYnV0ZTohMX0pXSxoOXQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJydW5BZnRlclJlbmRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cD0+InJ1bkFmdGVyUmVuZGVyImluIHAsZ2V0OnA9PnAucnVuQWZ0ZXJSZW5kZXIsc2V0OihwLGwpPT57cC5ydW5BZnRlclJlbmRlcj1sfX0sbWV0YWRhdGE6Y30sbixvKSxoOXQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxkPWk9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX0jZT1rcSh0aGlzLG4sdm9pZCAwKTtnZXQgcnVuQWZ0ZXJSZW5kZXIoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcnVuQWZ0ZXJSZW5kZXIoYyl7dGhpcy4jZT1jfXN0YXRpYyBzdHlsZXM9W1FgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7aWYoYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxhd2FpdCBuZXcgUHJvbWlzZShjPT5zZXRUaW1lb3V0KGMsNTApKSx0aGlzLmNoaWxkcmVuLmxlbmd0aD4wJiZ0aGlzLnJ1bkFmdGVyUmVuZGVyKXRyeXthd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpfWNhdGNoKGMpe2NvbnNvbGUuZXJyb3IoIkVycm9yIGluIHJ1bkFmdGVyUmVuZGVyOiIsYyl9fWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxrcSh0aGlzLG8pfXN0YXRpY3trcShpLGEpfX07cmV0dXJuIGQ9aX0pKCl9KTt2YXIgeDE9YigoKT0+e3U5dCgpfSk7dmFyIGY5dCxtOXQ9YigoKT0+e3VlKCk7eDEoKTtmOXQ9KCk9PntsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIik7cmV0dXJuIHNldFRpbWVvdXQoKCk9Pnt0LmFkZE1hbnkoW3t0eXBlOiJsb2dpbiIsdXNlcjoiSm9obiBEb2UiLG1lc3NhZ2U6ImxvZ2dlZCBpbiBmcm9tIENocm9tZSBvbiBtYWNPUyJ9LHt0eXBlOiJjcmVhdGUiLHVzZXI6IkpvaG4gRG9lIixtZXNzYWdlOidjcmVhdGVkIGEgbmV3IHByb2plY3QgIkZyb250ZW5kIEFwcCInfSx7dHlwZToidXBkYXRlIix1c2VyOiJKYW5lIFNtaXRoIixtZXNzYWdlOiJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIn0se3R5cGU6InZpZXciLHVzZXI6IkpvaG4gRG9lIixtZXNzYWdlOiJ2aWV3ZWQgZGFzaGJvYXJkIGFuYWx5dGljcyJ9LHt0eXBlOiJkZWxldGUiLHVzZXI6IkFkbWluIixtZXNzYWdlOiJyZW1vdmVkIGRlcHJlY2F0ZWQgZW5kcG9pbnQifSx7dHlwZToiY3VzdG9tIix1c2VyOiJTeXN0ZW0iLG1lc3NhZ2U6InNjaGVkdWxlZCBiYWNrdXAgY29tcGxldGVkIixpY29uTmFtZToibHVjaWRlOmRhdGFiYXNlIn0se3R5cGU6ImxvZ291dCIsdXNlcjoiQWxpY2UgQnJvd24iLG1lc3NhZ2U6ImxvZ2dlZCBvdXQifSx7dHlwZToiY3JlYXRlIix1c2VyOiJKYW5lIFNtaXRoIixtZXNzYWdlOiJjcmVhdGVkIGludm9pY2UgIzEyMzQifV0pLHQuZW50cmllcyQuc3Vic2NyaWJlKGU9Pntjb25zb2xlLmxvZygiQWN0aXZpdHkgbG9nIHVwZGF0ZWQ6IixlLmxlbmd0aCwiZW50cmllcyIpfSl9LDEwMCksd2AKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMDkwOTBiIil9OwogICAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICAke3R9CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGB9fSk7dmFyIF94LGowLGc5dCxTcT1iKCgpPT57dWUoKTtMdCgpO24yKCk7RXQoKTttOXQoKTtWZSgpO194PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sajA9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGc5dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXTt2YXIgeT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IHY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtLKCldLGw9W0soKV0sX3godGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbnRyaWVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iZW50cmllcyJpbiBtLGdldDptPT5tLmVudHJpZXMsc2V0OihtLHgpPT57bS5lbnRyaWVzPXh9fSxtZXRhZGF0YTp2fSxuLG8pLF94KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VhcmNoUXVlcnkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJzZWFyY2hRdWVyeSJpbiBtLGdldDptPT5tLnNlYXJjaFF1ZXJ5LHNldDoobSx4KT0+e20uc2VhcmNoUXVlcnk9eH19LG1ldGFkYXRhOnZ9LGMscCksX3godGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWx0ZXJDcml0ZXJpYSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImZpbHRlckNyaXRlcmlhImluIG0sZ2V0Om09Pm0uZmlsdGVyQ3JpdGVyaWEsc2V0OihtLHgpPT57bS5maWx0ZXJDcml0ZXJpYT14fX0sbWV0YWRhdGE6dn0sZixnKSxfeChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTp2fSxudWxsLGEpLHk9aT1lLnZhbHVlLHYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dn0pfXN0YXRpYyBkZW1vPWY5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkFwcCBVSSJdOyNlPWowKHRoaXMsbixbXSk7Z2V0IGVudHJpZXMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZW50cmllcyh2KXt0aGlzLiNlPXZ9I3Q9KGowKHRoaXMsbyksajAodGhpcyxjLCIiKSk7Z2V0IHNlYXJjaFF1ZXJ5KCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNlYXJjaFF1ZXJ5KHYpe3RoaXMuI3Q9dn0jYT0oajAodGhpcyxwKSxqMCh0aGlzLGYse30pKTtnZXQgZmlsdGVyQ3JpdGVyaWEoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZmlsdGVyQ3JpdGVyaWEodil7dGhpcy4jYT12fWVudHJpZXMkPShqMCh0aGlzLGcpLG5ldyB6dC5zbWFydHJ4LnJ4anMuU3ViamVjdCk7c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGFsaWduZWQgd2l0aCBzZWNvbmRhcnkgbWVudSAqLwogICAgICAgIC0tYWN0aXZpdHlsb2ctYmc6ICR7aC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnOiAke2guYmRUaGVtZSgiIzUyNTI1MiIsIiNhM2EzYTMiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZy1tdXRlZDogJHtoLmJkVGhlbWUoIiM3MzczNzMiLCIjNzM3MzczIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlOiAke2guYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ib3JkZXI6ICR7aC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWhvdmVyOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1hY2NlbnQ6ICR7aC5iZFRoZW1lKCIjNzg3MTZjIiwiI2I1YTk5YSIpfTsKCiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgd2l0aCBzdHJlYW1pbmcgaW5kaWNhdG9yICovCiAgICAgIC50b3BiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRvcGJhciAuaGVhZGluZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5saXZlLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgLmRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzIyYzU1ZSIsIiMyMmM1NWUiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMC41OyB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7IH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH0KICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgY29udGFpbmVyICovCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDhweDsKICAgICAgICBib3R0b206IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgICAgICBzY3JvbGxiYXItY29sb3I6ICR7aC5iZFRoZW1lKCIjZDRkNGQ0IiwiIzMzMzMzMyIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZDRkNGQ0IiwiIzMzMzMzMyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjYTNhM2EzIiwiIzUyNTI1MiIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHggMTZweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAvKiBEYXRlIHNlcGFyYXRvciAtIHdhcm0gdGF1cGUgc3R5bGluZyAqLwogICAgICAuZGF0ZS1zZXBhcmF0b3IgewogICAgICAgIHBhZGRpbmc6IDEycHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWFjY2VudCk7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGVudHJ5IC0gbW9kZXJuIHN0YWNrZWQgbGF5b3V0ICovCiAgICAgIC5hY3Rpdml0eWVudHJ5IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmFjdGl2aXR5ZW50cnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWhvdmVyKTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ2luIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgzNCwgMTk3LCA5NCwgMC4wOCkiLCJyZ2JhKDM0LCAxOTcsIDk0LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxNmEzNGEiLCIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5sb2dvdXQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wOCkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMjU2M2ViIiwiIzYwYTVmYSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgxNjgsIDg1LCAyNDcsIDAuMDgpIiwicmdiYSgxNjgsIDg1LCAyNDcsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzkzMzNlYSIsIiNjMDg0ZmMiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnVwZGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjUxLCAxNDYsIDYwLCAwLjA4KSIsInJnYmEoMjUxLCAxNDYsIDYwLCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNlYTU4MGMiLCIjZmI5MjNjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmN1c3RvbSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMTAwLCAxMTYsIDEzOSwgMC4wOCkiLCJyZ2JhKDEwMCwgMTE2LCAxMzksIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzQ3NTU2OSIsIiM5NGEzYjgiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXVzZXIgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAuYWN0aXZpdHktc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQoKICAgICAgLnRpbWVzdGFtcCB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLyogU2VhcmNoIGJveCAtIHJlZmluZWQgc3R5bGluZyAqLwogICAgICAuc2VhcmNoYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuc2VhcmNoLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAzNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAyKSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlcjpoYXMoaW5wdXQ6Zm9jdXMpIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IHY9dGhpcy5nZXRGaWx0ZXJlZEVudHJpZXMoKSxtPXRoaXMuZ3JvdXBFbnRyaWVzQnlEYXRlKHYpO3JldHVybiB3YAogICAgICAke3YxLnN0eWxlc30KICAgICAgPHN0eWxlPjwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj5BY3Rpdml0eSBMb2c8L2Rpdj4KICAgICAgICAgICR7di5sZW5ndGg+MD93YDxkaXYgY2xhc3M9ImxpdmUtaW5kaWNhdG9yIj48c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+TGl2ZTwvZGl2PmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHlDb250YWluZXIiPgogICAgICAgICAgJHt2Lmxlbmd0aD09PTA/d2A8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gYWN0aXZpdHkgZW50cmllczwvZGl2PmA6bS5tYXAoeD0+d2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0ZS1zZXBhcmF0b3IiPiR7eC5sYWJlbH08L2Rpdj4KICAgICAgICAgICAgICAgICAgJHt4LmVudHJpZXMubWFwKE09PnRoaXMucmVuZGVyQWN0aXZpdHlFbnRyeShNKSl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJzZWFyY2gtaWNvbiIgLmljb249JHsibHVjaWRlOnNlYXJjaCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggYWN0aXZpdGllcywgdXNlcnMuLi4iCiAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5zZWFyY2hRdWVyeX0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVNlYXJjaElucHV0fQogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJBY3Rpdml0eUVudHJ5KHYpe2xldCBtPXYudGltZXN0YW1wfHxuZXcgRGF0ZSx4PXRoaXMuZm9ybWF0VGltZShtKSxNPXYuaWNvbk5hbWV8fHRoaXMuZ2V0SWNvbkZvclR5cGUodi50eXBlKTtyZXR1cm4gd2AKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpdml0eWVudHJ5IgogICAgICAgIEBjb250ZXh0bWVudT0ke1M9PnRoaXMuaGFuZGxlQ29udGV4dE1lbnUoUyx2KX0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWljb24gJHt2LnR5cGV9Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtNfT48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1jb250ZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWhlYWRlciI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS11c2VyIj4ke3YudXNlcn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1zZXBhcmF0b3IiPsK3PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZXN0YW1wIj4ke3h9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1tZXNzYWdlIj4ke3YubWVzc2FnZX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFkZCh2KXtsZXQgbT17Li4udixpZDp2LmlkfHx0aGlzLmdlbmVyYXRlSWQoKSx0aW1lc3RhbXA6di50aW1lc3RhbXB8fG5ldyBEYXRlfTt0aGlzLmVudHJpZXM9W20sLi4udGhpcy5lbnRyaWVzXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1hZGRNYW55KHYpe2xldCBtPXYubWFwKHg9Pih7Li4ueCxpZDp4LmlkfHx0aGlzLmdlbmVyYXRlSWQoKSx0aW1lc3RhbXA6eC50aW1lc3RhbXB8fG5ldyBEYXRlfSkpO3RoaXMuZW50cmllcz1bLi4ubS5yZXZlcnNlKCksLi4udGhpcy5lbnRyaWVzXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1jbGVhcigpe3RoaXMuZW50cmllcz1bXSx0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKX1nZXRFbnRyaWVzKCl7cmV0dXJuWy4uLnRoaXMuZW50cmllc119ZmlsdGVyKHYpe3JldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKG09PiEodi51c2VyJiZtLnVzZXIhPT12LnVzZXJ8fHYudHlwZSYmbS50eXBlIT09di50eXBlKSl9c2VhcmNoKHYpe2xldCBtPXYudG9Mb3dlckNhc2UoKTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcih4PT54Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhtKXx8eC51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobSkpfWdlbmVyYXRlSWQoKXtyZXR1cm5gYWN0aXZpdHktJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9Z2V0RmlsdGVyZWRFbnRyaWVzKCl7bGV0IHY9dGhpcy5lbnRyaWVzO2lmKHRoaXMuc2VhcmNoUXVlcnkpe2xldCBtPXRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKTt2PXYuZmlsdGVyKHg9PngubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG0pfHx4LnVzZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhtKSl9cmV0dXJuKHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcnx8dGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlKSYmKHY9di5maWx0ZXIobT0+ISh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXImJm0udXNlciE9PXRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcnx8dGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlJiZtLnR5cGUhPT10aGlzLmZpbHRlckNyaXRlcmlhLnR5cGUpKSksdn1ncm91cEVudHJpZXNCeURhdGUodil7bGV0IG09bmV3IE1hcCx4PW5ldyBEYXRlLE09bmV3IERhdGUoeCk7TS5zZXREYXRlKE0uZ2V0RGF0ZSgpLTEpO2ZvcihsZXQgUyBvZiB2KXtsZXQgRj1TLnRpbWVzdGFtcHx8bmV3IERhdGUsXzt0aGlzLmlzU2FtZURheShGLHgpP189IlRvZGF5Ijp0aGlzLmlzU2FtZURheShGLE0pP189Illlc3RlcmRheSI6Xz1GLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHttb250aDoic2hvcnQiLGRheToibnVtZXJpYyIseWVhcjpGLmdldEZ1bGxZZWFyKCkhPT14LmdldEZ1bGxZZWFyKCk/Im51bWVyaWMiOnZvaWQgMH0pLG0uaGFzKF8pfHxtLnNldChfLFtdKSxtLmdldChfKS5wdXNoKFMpfXJldHVybiBBcnJheS5mcm9tKG0uZW50cmllcygpKS5tYXAoKFtTLEZdKT0+KHtsYWJlbDpTLGVudHJpZXM6Rn0pKX1pc1NhbWVEYXkodixtKXtyZXR1cm4gdi5nZXRGdWxsWWVhcigpPT09bS5nZXRGdWxsWWVhcigpJiZ2LmdldE1vbnRoKCk9PT1tLmdldE1vbnRoKCkmJnYuZ2V0RGF0ZSgpPT09bS5nZXREYXRlKCl9Zm9ybWF0VGltZSh2KXtyZXR1cm4gdi50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIix7aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0Iixob3VyMTI6ITF9KX1nZXRJY29uRm9yVHlwZSh2KXtsZXQgbT17bG9naW46Imx1Y2lkZTpsb2dJbiIsbG9nb3V0OiJsdWNpZGU6bG9nT3V0Iix2aWV3OiJsdWNpZGU6ZXllIixjcmVhdGU6Imx1Y2lkZTpwbHVzIix1cGRhdGU6Imx1Y2lkZTplZGl0IixkZWxldGU6Imx1Y2lkZTp0cmFzaDIiLGN1c3RvbToibHVjaWRlOmFjdGl2aXR5In07cmV0dXJuIG1bdl18fG0uY3VzdG9tfWhhbmRsZVNlYXJjaElucHV0KHYpe2xldCBtPXYudGFyZ2V0O3RoaXMuc2VhcmNoUXVlcnk9bS52YWx1ZX1oYW5kbGVDb250ZXh0TWVudSh2LG0pe3YucHJldmVudERlZmF1bHQoKSxXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyh2LFt7bmFtZToiQ29weSBhY3Rpdml0eSIsaWNvbk5hbWU6Imx1Y2lkZTpjb3B5IixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke20udXNlcn0gJHttLm1lc3NhZ2V9YCl9fSx7bmFtZToiRmlsdGVyIGJ5IHVzZXIiLGljb25OYW1lOiJsdWNpZGU6dXNlciIsYWN0aW9uOmFzeW5jKCk9Pnt0aGlzLmZpbHRlckNyaXRlcmlhPXt1c2VyOm0udXNlcn19fSx7bmFtZToiRmlsdGVyIGJ5IHR5cGUiLGljb25OYW1lOiJsdWNpZGU6ZmlsdGVyIixhY3Rpb246YXN5bmMoKT0+e3RoaXMuZmlsdGVyQ3JpdGVyaWE9e3R5cGU6bS50eXBlfX19LHtuYW1lOiJDbGVhciBmaWx0ZXJzIixpY29uTmFtZToibHVjaWRlOngiLGFjdGlvbjphc3luYygpPT57dGhpcy5maWx0ZXJDcml0ZXJpYT17fSx0aGlzLnNlYXJjaFF1ZXJ5PSIifX1dKX1zdGF0aWN7ajAoaSxhKX19O3JldHVybiB5PWl9KSgpfSk7dmFyIGI5dD1iKCgpPT57U3EoKX0pO3ZhciB2OXQ9YigoKT0+e30pO3ZhciB5OXQ9YigoKT0+e3MyKCl9KTt2YXIgeDl0PWIoKCk9Pnt9KTt2YXIgdzl0PWIoKCk9Pnt9KTt2YXIgTTl0PWIoKCk9Pnt9KTt2YXIgY289YigoKT0+e3Y5dCgpO3k5dCgpO3g5dCgpO3c5dCgpO005dCgpfSk7dmFyIHo5dCxrOXQ9YigoKT0+e3VlKCk7eDEoKTtDcSgpO3o5dD0oKT0+e2xldCB0PVt7bmFtZToiRmlsZSIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJOZXcgRmlsZSIsc2hvcnRjdXQ6IkNtZCtOIixpY29uTmFtZToiZmlsZS1wbHVzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk5ldyBmaWxlIil9LHtuYW1lOiJPcGVuLi4uIixzaG9ydGN1dDoiQ21kK08iLGljb25OYW1lOiJmb2xkZXItb3BlbiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIil9LHtuYW1lOiJPcGVuIFJlY2VudCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJwcm9qZWN0LWFscGhhLnRzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcmVjZW50IDEiKX0se25hbWU6ImNvbmZpZy5qc29uIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gcmVjZW50IDIiKX0se25hbWU6InJlYWRtZS5tZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAzIil9XX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTYXZlIixzaG9ydGN1dDoiQ21kK1MiLGljb25OYW1lOiJzYXZlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNhdmUiKX0se25hbWU6IlNhdmUgQXMuLi4iLHNob3J0Y3V0OiJDbWQrU2hpZnQrUyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTYXZlIGFzIiksZGlzYWJsZWQ6ITB9LHtkaXZpZGVyOiEwfSx7bmFtZToiRXhpdCIsc2hvcnRjdXQ6IkNtZCtRIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkV4aXQiKX1dfSx7bmFtZToiRWRpdCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJVbmRvIixzaG9ydGN1dDoiQ21kK1oiLGljb25OYW1lOiJ1bmRvIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlVuZG8iKX0se25hbWU6IlJlZG8iLHNob3J0Y3V0OiJDbWQrU2hpZnQrWiIsaWNvbk5hbWU6InJlZG8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVkbyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkN1dCIsc2hvcnRjdXQ6IkNtZCtYIixpY29uTmFtZToic2Npc3NvcnMiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ3V0Iil9LHtuYW1lOiJDb3B5IixzaG9ydGN1dDoiQ21kK0MiLGljb25OYW1lOiJjb3B5IixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkNvcHkiKX0se25hbWU6IlBhc3RlIixzaG9ydGN1dDoiQ21kK1YiLGljb25OYW1lOiJjbGlwYm9hcmQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUGFzdGUiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJGaW5kIixzaG9ydGN1dDoiQ21kK0YiLGljb25OYW1lOiJzZWFyY2giLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiRmluZCIpfSx7bmFtZToiUmVwbGFjZSIsc2hvcnRjdXQ6IkNtZCtIIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlcGxhY2UiKX1dfSx7bmFtZToiVmlldyIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJUb2dnbGUgRnVsbHNjcmVlbiIsc2hvcnRjdXQ6IkYxMSIsaWNvbk5hbWU6ImV4cGFuZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJGdWxsc2NyZWVuIil9LHtuYW1lOiJab29tIEluIixzaG9ydGN1dDoiQ21kKysiLGljb25OYW1lOiJ6b29tLWluIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlpvb20gaW4iKX0se25hbWU6Ilpvb20gT3V0IixzaG9ydGN1dDoiQ21kKy0iLGljb25OYW1lOiJ6b29tLW91dCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJab29tIG91dCIpfSx7bmFtZToiUmVzZXQgWm9vbSIsc2hvcnRjdXQ6IkNtZCswIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlJlc2V0IHpvb20iKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJUb2dnbGUgU2lkZWJhciIsc2hvcnRjdXQ6IkNtZCtCIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRvZ2dsZSBzaWRlYmFyIil9LHtuYW1lOiJUb2dnbGUgVGVybWluYWwiLHNob3J0Y3V0OiJDbWQrSiIsaWNvbk5hbWU6InRlcm1pbmFsIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlRvZ2dsZSB0ZXJtaW5hbCIpfV19LHtuYW1lOiJIZWxwIixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IkRvY3VtZW50YXRpb24iLGljb25OYW1lOiJib29rIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKX0se25hbWU6IlJlbGVhc2UgTm90ZXMiLGljb25OYW1lOiJmaWxlLXRleHQiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUmVsZWFzZSBub3RlcyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlJlcG9ydCBJc3N1ZSIsaWNvbk5hbWU6ImJ1ZyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJSZXBvcnQgaXNzdWUiKX0se25hbWU6IkFib3V0IixpY29uTmFtZToiaW5mbyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJBYm91dCIpfV19XTtyZXR1cm4gd2AKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIGU9PntsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIiKSxpPWUucXVlcnlTZWxlY3RvckFsbCgiLnN0YXR1cy10b2dnbGUgZGVlcy1idXR0b24iKTtpWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EudXNlcj17Li4uYS51c2VyLHN0YXR1czoib25saW5lIn19KSxpWzFdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EudXNlcj17Li4uYS51c2VyLHN0YXR1czoiYnVzeSJ9fSksaVsyXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnthLnVzZXI9ey4uLmEudXNlcixzdGF0dXM6ImF3YXkifX0pLGlbM10uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS51c2VyPXsuLi5hLnVzZXIsc3RhdHVzOiJvZmZsaW5lIn19KSxlLnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3ctY29udHJvbHMtdG9nZ2xlIGRlZXMtYnV0dG9uIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS5zaG93V2luZG93Q29udHJvbHM9IWEuc2hvd1dpbmRvd0NvbnRyb2xzfSk7bGV0IHM9ZS5xdWVyeVNlbGVjdG9yQWxsKCIuYnJlYWRjcnVtYi10b2dnbGUgZGVlcy1idXR0b24iKTtzWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2EuYnJlYWRjcnVtYnM9IkhvbWUgPiBEb2N1bWVudHMgPiBQcm9qZWN0cyA+IE15QXBwID4gc3JjID4gaW5kZXgudHMifSksc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PnthLmJyZWFkY3J1bWJzPSJEYXNoYm9hcmQifSl9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udGVudCB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGNvbG9yOiAjY2NjOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIGxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtYXBwdWktYXBwYmFyCiAgICAgICAgaWQ9ImFwcGJhciIKICAgICAgICAubWVudUl0ZW1zPSR7dH0KICAgICAgICAuYnJlYWRjcnVtYnM9JHsiUHJvamVjdCA+IHNyYyA+IGNvbXBvbmVudHMgPiBBcHBCYXIudHMifQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7IiA+ICJ9CiAgICAgICAgLnNob3dXaW5kb3dDb250cm9scz0keyEwfQogICAgICAgIC5zaG93U2VhcmNoPSR7ITB9CiAgICAgICAgLnRoZW1lPSR7ImRhcmsifQogICAgICAgIC51c2VyPSR7e25hbWU6IkpvaG4gRG9lIixzdGF0dXM6Im9ubGluZSJ9fQogICAgICAgIEBtZW51LXNlbGVjdD0ke2U9PmNvbnNvbGUubG9nKCJNZW51IHNlbGVjdGVkOiIsZS5kZXRhaWwuaXRlbSl9CiAgICAgICAgQGJyZWFkY3J1bWItbmF2aWdhdGU9JHtlPT5jb25zb2xlLmxvZygiQnJlYWRjcnVtYiBjbGlja2VkOiIsZS5kZXRhaWwpfQogICAgICAgIEBzZWFyY2gtY2xpY2s9JHsoKT0+Y29uc29sZS5sb2coIlNlYXJjaCBjbGlja2VkIil9CiAgICAgICAgQHVzZXItbWVudS1vcGVuPSR7KCk9PmNvbnNvbGUubG9nKCJVc2VyIG1lbnUgY2xpY2tlZCIpfQogICAgICA+PC9kZWVzLWFwcHVpLWFwcGJhcj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxoMj5BcHAgQmFyIERlbW88L2gyPgogICAgICAgIDxwPlRoaXMgZGVtbyBzaG93cyB2YXJpb3VzIGZlYXR1cmVzIG9mIHRoZSBhcHAgYmFyIGNvbXBvbmVudDo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkR5bmFtaWMgbWVudSBpdGVtcyB3aXRoIGljb25zLCBzaG9ydGN1dHMsIGFuZCBzdWJtZW51czwvbGk+CiAgICAgICAgICA8bGk+QnJlYWRjcnVtYiBuYXZpZ2F0aW9uPC9saT4KICAgICAgICAgIDxsaT5Vc2VyIGFjY291bnQgc2VjdGlvbiB3aXRoIHN0YXR1cyBpbmRpY2F0b3I8L2xpPgogICAgICAgICAgPGxpPlNlYXJjaCBpY29uPC9saT4KICAgICAgICAgIDxsaT5XaW5kb3cgY29udHJvbHMgKHBsYXRmb3JtLXNwZWNpZmljKTwvbGk+CiAgICAgICAgICA8bGk+RGFyay9saWdodCB0aGVtZSBzdXBwb3J0PC9saT4KICAgICAgICAgIDxsaT5LZXlib2FyZCBuYXZpZ2F0aW9uIChUYWIsIEVudGVyLCBFc2NhcGUpPC9saT4KICAgICAgICAgIDxsaT5DdXN0b20gZXZlbnRzIGZvciBhbGwgaW50ZXJhY3Rpb25zPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5UaGVtZTwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9InRoZW1lLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5EYXJrPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkxpZ2h0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+VXNlciBTdGF0dXM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJzdGF0dXMtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk9ubGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5CdXN5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkF3YXk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+T2ZmbGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPldpbmRvdyBDb250cm9sczwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9IndpbmRvdy1jb250cm9scy10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+QnJlYWRjcnVtYnM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJicmVhZGNydW1iLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Mb25nIFBhdGg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2hvcnQgUGF0aDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGB9fSk7dmFyIFM5dCxDOXQ9YigoKT0+e3VlKCk7Uzl0PVtoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIHRoZW1pbmcgKi8KICAgICAgICAtLWFwcGJhci1oZWlnaHQ6IDQwcHg7CiAgICAgICAgLS1hcHBiYXItZm9udC1zaXplOiAxMnB4OwogICAgICAgIAogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWFwcGJhci1oZWlnaHQpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMyMDIwMjAiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMDgwIiwiI2ZmZmZmZjgwIil9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tYXBwYmFyLWZvbnQtc2l6ZSk7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyIGF1dG87CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBkcmFnOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDBweCAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBPcHRpb25hbDogU3R5bGUgZm9yIG1lbnUgaXRlbXMgd2l0aCBpY29ucyAobm90IHR5cGljYWxseSB1c2VkIGZvciB0b3AtbGV2ZWwgaXRlbXMpICovCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMwMDAwMDAxMCIsIiNmZmZmZmYyMCIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDAwMDAiLCIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzAwMDAwMDIwIiwiI2ZmZmZmZjMwIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7aC5iZFRoZW1lKCIjMDAwMDAwODAiLCIjZmZmZmZmODAiKX07CiAgICAgIH0KCgogICAgICAvKiBEcm9wZG93biBzdHlsZXMgKi8KICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2guYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5vcGVuIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbTpob3ZlciwKICAgICAgLmRyb3Bkb3duLWl0ZW0uZm9jdXNlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMwMDAwMDAxMCIsIiNmZmZmZmYyMCIpfTsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbSAuc2hvcnRjdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC8qIEJyZWFkY3J1bWJzICovCiAgICAgIC5icmVhZGNydW1icyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1pdGVtIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDAwMDA4MCIsIiNmZmZmZmY4MCIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4yczsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbTpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogQWNjb3VudCBzZWN0aW9uICovCiAgICAgIC5hY2NvdW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWljb24gewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAuc2VhcmNoLWljb246aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CgogICAgICAudXNlci1pbmZvOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzAwMDAwMDEwIiwiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMDAwMDAwMjAiLCIjZmZmZmZmMzAiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAtMnB4OwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9ubGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzRjYWY1MDsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9mZmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM3NTc1NzU7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5idXN5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjQ0MzM2OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYXdheSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgbG9nIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmFjdGl2aXR5LXRvZ2dsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZzsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDAwMDA2MCIsIiNmZmZmZmY2MCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzAwMDAwMDEwIiwiI2ZmZmZmZjE1Iil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMDAwMDAwMTUiLCIjZmZmZmZmMjAiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktYmFkZ2UgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiM1MjUyNTIiLCIjNTI1MjUyIil9OwogICAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIGBdfSk7dmFyIF85dCxUOXQ9YigoKT0+e3VlKCk7Xzl0PXQ9PndgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudXMiPgogICAgICAgICAgJHt0LnNob3dXaW5kb3dDb250cm9scz93YDxkZWVzLXdpbmRvd2NvbnRyb2xzPjwvZGVlcy13aW5kb3djb250cm9scz5gOiIifQogICAgICAgICAgJHt0LnJlbmRlck1lbnVJdGVtcygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzIj4KICAgICAgICAgICR7dC5yZW5kZXJCcmVhZGNydW1icygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjY291bnQiPgogICAgICAgICAgJHt0LnJlbmRlckFjY291bnRTZWN0aW9uKCl9CiAgICAgICAgPC9kaXY+CiAgICAgIGB9KTt2YXIgX3EsYjgsTDl0LFRxPWIoKCk9Pnt1ZSgpO1ZlKCk7X3E9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxiOD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sTDl0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy13aW5kb3djb250cm9scyIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdO3ZhciBsPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgZj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHtyZWZsZWN0OiEwfSldLGQ9W0koe3JlZmxlY3Q6ITB9KV0sX3EodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0eXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idHlwZSJpbiBnLGdldDpnPT5nLnR5cGUsc2V0OihnLHkpPT57Zy50eXBlPXl9fSxtZXRhZGF0YTpmfSxuLG8pLF9xKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJwb3NpdGlvbiJpbiBnLGdldDpnPT5nLnBvc2l0aW9uLHNldDooZyx5KT0+e2cucG9zaXRpb249eX19LG1ldGFkYXRhOmZ9LGMscCksX3EobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1zdGF0aWMgZGVtbz0oKT0+d2A8ZGVlcy13aW5kb3djb250cm9scz48L2RlZXMtd2luZG93Y29udHJvbHM+YDtzdGF0aWMgZGVtb0dyb3Vwcz1bIlV0aWxpdHkiXTsjZT1iOCh0aGlzLG4sIm1hYyIpO2dldCB0eXBlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHR5cGUoZil7dGhpcy4jZT1mfSN0PShiOCh0aGlzLG8pLGI4KHRoaXMsYywibGVmdCIpKTtnZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jdH1zZXQgcG9zaXRpb24oZil7dGhpcy4jdD1mfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYgewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyMjIyOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LmNsb3NlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1ZjU3OwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdi50b0RvY2sgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmJkMmU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2Lm1pbk1heCB7CiAgICAgICAgYmFja2dyb3VuZDogIzI3YzkzZjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzMzMzMzMzsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgICR7dGhpcy50eXBlPT09Im1hYyImJnRoaXMucG9zaXRpb249PT0ibGVmdCJ8fCh0aGlzLnR5cGU9PT0ibGludXgifHx0aGlzLnR5cGU9PT0id2luZG93cyIpJiZ0aGlzLnBvc2l0aW9uPT09InJpZ2h0Ij93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aW5kb3dDb250cm9scyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvRG9jayI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWluTWF4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOndgYH0KICAgIGB9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGI4KHRoaXMscCl9c3RhdGlje2I4KGksYSl9fTtyZXR1cm4gbD1pfSkoKX0pO3ZhciB2OCxOcywkOXQsTHE9YigoKT0+e3MyKCk7bWkoKTt1ZSgpO1ZlKCk7djg9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxOcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sJDl0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXTt2YXIgeD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IE09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpPYmplY3R9KV0sZD1bSSh7dHlwZTpBcnJheX0pXSxsPVtJKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSx5PVtJKHt0eXBlOlN0cmluZ30pXSx2OCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InVzZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJ1c2VyImluIFMsZ2V0OlM9PlMudXNlcixzZXQ6KFMsRik9PntTLnVzZXI9Rn19LG1ldGFkYXRhOk19LG4sbyksdjgodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJtZW51SXRlbXMiaW4gUyxnZXQ6Uz0+Uy5tZW51SXRlbXMsc2V0OihTLEYpPT57Uy5tZW51SXRlbXM9Rn19LG1ldGFkYXRhOk19LGMscCksdjgodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc09wZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJpc09wZW4iaW4gUyxnZXQ6Uz0+Uy5pc09wZW4sc2V0OihTLEYpPT57Uy5pc09wZW49Rn19LG1ldGFkYXRhOk19LGYsZyksdjgodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InBvc2l0aW9uImluIFMsZ2V0OlM9PlMucG9zaXRpb24sc2V0OihTLEYpPT57Uy5wb3NpdGlvbj1GfX0sbWV0YWRhdGE6TX0sdixtKSx2OChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vPSgpPT53YAogICAgPGRlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duCiAgICAgIC51c2VyPSR7e25hbWU6IkpvaG4gRG9lIixlbWFpbDoiam9obi5kb2VAZXhhbXBsZS5jb20iLGF2YXRhcjoiaHR0cHM6Ly9yYW5kb211c2VyLm1lL2FwaS9wb3J0cmFpdHMvbWVuLzEuanBnIixzdGF0dXM6Im9ubGluZSJ9fQogICAgICAubWVudUl0ZW1zPSR7W3tuYW1lOiJQcm9maWxlIFNldHRpbmdzIixpY29uTmFtZToidXNlciIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJQcm9maWxlIil9LHtuYW1lOiJBY2NvdW50IixpY29uTmFtZToic2V0dGluZ3MiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQWNjb3VudCIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkhlbHAgJiBTdXBwb3J0IixpY29uTmFtZToiaGVscENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJIZWxwIil9LHtuYW1lOiJLZXlib2FyZCBTaG9ydGN1dHMiLGljb25OYW1lOiJrZXlib2FyZCIsc2hvcnRjdXQ6IkNtZCtLIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNob3J0Y3V0cyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IlNpZ24gT3V0IixpY29uTmFtZToibG9nT3V0IixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNpZ24gb3V0Iil9XX0KICAgICAgLmlzT3Blbj0keyEwfQogICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgYDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkFwcCBVSSJdOyNlPU5zKHRoaXMsbix2b2lkIDApO2dldCB1c2VyKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHVzZXIoTSl7dGhpcy4jZT1NfSN0PShOcyh0aGlzLG8pLE5zKHRoaXMsYyxbXSkpO2dldCBtZW51SXRlbXMoKXtyZXR1cm4gdGhpcy4jdH1zZXQgbWVudUl0ZW1zKE0pe3RoaXMuI3Q9TX0jYT0oTnModGhpcyxwKSxOcyh0aGlzLGYsITEpKTtnZXQgaXNPcGVuKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGlzT3BlbihNKXt0aGlzLiNhPU19I2k9KE5zKHRoaXMsZyksTnModGhpcyx2LCJ0b3AtcmlnaHQiKSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHBvc2l0aW9uKE0pe3RoaXMuI2k9TX1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2guYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgei1pbmRleDogJHtyMi5vdmVybGF5LmRyb3Bkb3dufTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgdHJhbnNsYXRlWSgtMTBweCk7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2lzb3Blbl0pIC5kcm9wZG93biB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5iYWNrZHJvcCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogUG9zaXRpb24gdmFyaWFudHMgKi8KICAgICAgLmRyb3Bkb3duLnRvcC1yaWdodCB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLnRvcC1sZWZ0IHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5ib3R0b20tcmlnaHQgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICByaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5ib3R0b20tbGVmdCB7CiAgICAgICAgYm90dG9tOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAvKiBVc2VyIHNlY3Rpb24gKi8KICAgICAgLnVzZXItc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlMGUwZTAiLCIjMjAyMDIwIil9OwogICAgICB9CgogICAgICAudXNlci1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjBmMGYwIiwiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNjY2IiwiIzk5OSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9ubGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzRjYWY1MDsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9mZmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM3NTc1NzU7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5idXN5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjQ0MzM2OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYXdheSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgfQoKICAgICAgLnVzZXItZGV0YWlscyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC51c2VyLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMCIsIiNmZmYiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAudXNlci1lbWFpbCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzY2NiIsIiM5OTkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLyogTWVudSBzZWN0aW9uICovCiAgICAgIC5tZW51LXNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICB9CgogICAgICAubWVudS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjY2NjIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubWVudS1pdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudS1pdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudS1zaG9ydGN1dCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQoKICAgICAgLyogQmFja2Ryb3AgZm9yIG1vYmlsZSAqLwogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAuYmFja2Ryb3AgewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwOwogICAgICAgICAgbGVmdDogMDsKICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgICAgei1pbmRleDogJHtyMi5iYWNrZHJvcC5kcm9wZG93bn07CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtpc29wZW5dKSAuYmFja2Ryb3AgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgfQoKICAgICAgICAuZHJvcGRvd24gewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICByaWdodDogYXV0bzsKICAgICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuOTUpOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCk7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzJweCk7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtpc29wZW5dKSAuZHJvcGRvd24gewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7CiAgICAgICAgfQogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iYmFja2Ryb3AiIEBjbGljaz0keygpPT50aGlzLmNsb3NlKCl9PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93biAke3RoaXMucG9zaXRpb259Ij4KICAgICAgICAke3RoaXMudXNlcj93YAogICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1pbmZvIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWF2YXRhciI+CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5hdmF0YXI/d2A8aW1nIHNyYz0iJHt0aGlzLnVzZXIuYXZhdGFyfSIgYWx0PSIke3RoaXMudXNlci5uYW1lfSI+YDp0aGlzLmdldEluaXRpYWxzKHRoaXMudXNlci5uYW1lKX0KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cz93YAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItbmFtZSI+JHt0aGlzLnVzZXIubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLmVtYWlsP3dgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItZW1haWwiPiR7dGhpcy51c2VyLmVtYWlsfTwvZGl2PgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtc2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcChNPT50aGlzLnJlbmRlck1lbnVJdGVtKE0pKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlck1lbnVJdGVtKE0pe2lmKCJkaXZpZGVyImluIE0mJk0uZGl2aWRlcilyZXR1cm4gd2A8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7bGV0IFM9TTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWVudS1pdGVtIiBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVNZW51Q2xpY2soUyl9PgogICAgICAgICR7Uy5pY29uTmFtZT93YAogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7Uy5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+CiAgICAgICAgYDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1pdGVtLXRleHQiPiR7Uy5uYW1lfTwvc3Bhbj4KICAgICAgICAke1Muc2hvcnRjdXQ/d2AKICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51LXNob3J0Y3V0Ij4ke1Muc2hvcnRjdXR9PC9zcGFuPgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1nZXRJbml0aWFscyhNKXtyZXR1cm4gTS5zcGxpdCgiICIpLm1hcChTPT5TWzBdKS5qb2luKCIiKS50b1VwcGVyQ2FzZSgpLnNsaWNlKDAsMil9YXN5bmMgaGFuZGxlTWVudUNsaWNrKE0pe2F3YWl0IE0uYWN0aW9uKCksdGhpcy5jbG9zZSgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0Iix7ZGV0YWlsOntpdGVtOk19LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9b3Blbigpe3RoaXMuaXNPcGVuPSEwfWNsb3NlKCl7dGhpcy5pc09wZW49ITF9dG9nZ2xlKCl7dGhpcy5pc09wZW49IXRoaXMuaXNPcGVufWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhbmRsZU91dHNpZGVDbGljaz10aGlzLmhhbmRsZU91dHNpZGVDbGljay5iaW5kKHRoaXMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZU91dHNpZGVDbGljayl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZU91dHNpZGVDbGljayl9aGFuZGxlT3V0c2lkZUNsaWNrKE0pe2lmKHRoaXMuaXNPcGVuJiYhdGhpcy5jb250YWlucyhNLnRhcmdldCkpe2xldCBTPXRoaXMucGFyZW50RWxlbWVudDtpZihTJiZTLmNvbnRhaW5zKE0udGFyZ2V0KSlyZXR1cm47dGhpcy5jbG9zZSgpfX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksTnModGhpcyxtKX1zdGF0aWN7TnMoaSxhKX19O3JldHVybiB4PWl9KSgpfSk7dmFyIFgyLEd0LEE5dCxDcT1iKCgpPT57dWUoKTtMdCgpO2NvKCk7czIoKTtrOXQoKTtDOXQoKTtUOXQoKTtFdCgpO1RxKCk7THEoKTtYMj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LEd0PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxBOXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWFwcHVpLWFwcGJhciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdLFYsUj1bXSxVPVtdLHJlLGo9W10sbWU9W10sd2UsSD1bXSxjZT1bXSxrZSxXPVtdLEQ9W10sTyxaPVtdLFk9W10sb2UsZ2U9W10sYmU9W107dmFyICRlPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOkFycmF5fSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6U3RyaW5nfSldLHk9W0koe3R5cGU6Qm9vbGVhbn0pXSx4PVtJKHt0eXBlOk9iamVjdH0pXSxGPVtJKHt0eXBlOkFycmF5fSldLE49W0koe3R5cGU6Qm9vbGVhbn0pXSxxPVtJKHt0eXBlOkJvb2xlYW59KV0sRT1bSSh7dHlwZTpOdW1iZXJ9KV0sVj1bSSh7dHlwZTpCb29sZWFufSldLHJlPVtLKCldLHdlPVtLKCldLGtlPVtLKCldLE89W0soKV0sb2U9W0soKV0sWDIodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJtZW51SXRlbXMiaW4gUCxnZXQ6UD0+UC5tZW51SXRlbXMsc2V0OihQLEopPT57UC5tZW51SXRlbXM9Sn19LG1ldGFkYXRhOkJ9LG4sbyksWDIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJicmVhZGNydW1icyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImJyZWFkY3J1bWJzImluIFAsZ2V0OlA9PlAuYnJlYWRjcnVtYnMsc2V0OihQLEopPT57UC5icmVhZGNydW1icz1KfX0sbWV0YWRhdGE6Qn0sYyxwKSxYMih0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJyZWFkY3J1bWJTZXBhcmF0b3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJicmVhZGNydW1iU2VwYXJhdG9yImluIFAsZ2V0OlA9PlAuYnJlYWRjcnVtYlNlcGFyYXRvcixzZXQ6KFAsSik9PntQLmJyZWFkY3J1bWJTZXBhcmF0b3I9Sn19LG1ldGFkYXRhOkJ9LGYsZyksWDIodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93V2luZG93Q29udHJvbHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJzaG93V2luZG93Q29udHJvbHMiaW4gUCxnZXQ6UD0+UC5zaG93V2luZG93Q29udHJvbHMsc2V0OihQLEopPT57UC5zaG93V2luZG93Q29udHJvbHM9Sn19LG1ldGFkYXRhOkJ9LHYsbSksWDIodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ1c2VyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4idXNlciJpbiBQLGdldDpQPT5QLnVzZXIsc2V0OihQLEopPT57UC51c2VyPUp9fSxtZXRhZGF0YTpCfSxNLFMpLFgyKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJvZmlsZU1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+InByb2ZpbGVNZW51SXRlbXMiaW4gUCxnZXQ6UD0+UC5wcm9maWxlTWVudUl0ZW1zLHNldDooUCxKKT0+e1AucHJvZmlsZU1lbnVJdGVtcz1KfX0sbWV0YWRhdGE6Qn0sXyxrKSxYMih0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTZWFyY2giLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJzaG93U2VhcmNoImluIFAsZ2V0OlA9PlAuc2hvd1NlYXJjaCxzZXQ6KFAsSik9PntQLnNob3dTZWFyY2g9Sn19LG1ldGFkYXRhOkJ9LEwsQSksWDIodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93QWN0aXZpdHlMb2dUb2dnbGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJzaG93QWN0aXZpdHlMb2dUb2dnbGUiaW4gUCxnZXQ6UD0+UC5zaG93QWN0aXZpdHlMb2dUb2dnbGUsc2V0OihQLEopPT57UC5zaG93QWN0aXZpdHlMb2dUb2dnbGU9Sn19LG1ldGFkYXRhOkJ9LEMseiksWDIodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3Rpdml0eUxvZ0NvdW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4iYWN0aXZpdHlMb2dDb3VudCJpbiBQLGdldDpQPT5QLmFjdGl2aXR5TG9nQ291bnQsc2V0OihQLEopPT57UC5hY3Rpdml0eUxvZ0NvdW50PUp9fSxtZXRhZGF0YTpCfSxULCQpLFgyKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlMb2dBY3RpdmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJhY3Rpdml0eUxvZ0FjdGl2ZSJpbiBQLGdldDpQPT5QLmFjdGl2aXR5TG9nQWN0aXZlLHNldDooUCxKKT0+e1AuYWN0aXZpdHlMb2dBY3RpdmU9Sn19LG1ldGFkYXRhOkJ9LFIsVSksWDIodGhpcyxudWxsLHJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZlTWVudSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImFjdGl2ZU1lbnUiaW4gUCxnZXQ6UD0+UC5hY3RpdmVNZW51LHNldDooUCxKKT0+e1AuYWN0aXZlTWVudT1KfX0sbWV0YWRhdGE6Qn0saixtZSksWDIodGhpcyxudWxsLHdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3BlbkRyb3Bkb3ducyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+Im9wZW5Ecm9wZG93bnMiaW4gUCxnZXQ6UD0+UC5vcGVuRHJvcGRvd25zLHNldDooUCxKKT0+e1Aub3BlbkRyb3Bkb3ducz1KfX0sbWV0YWRhdGE6Qn0sSCxjZSksWDIodGhpcyxudWxsLGtlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZm9jdXNlZEl0ZW0iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJmb2N1c2VkSXRlbSJpbiBQLGdldDpQPT5QLmZvY3VzZWRJdGVtLHNldDooUCxKKT0+e1AuZm9jdXNlZEl0ZW09Sn19LG1ldGFkYXRhOkJ9LFcsRCksWDIodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmb2N1c2VkRHJvcGRvd25JdGVtIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4iZm9jdXNlZERyb3Bkb3duSXRlbSJpbiBQLGdldDpQPT5QLmZvY3VzZWREcm9wZG93bkl0ZW0sc2V0OihQLEopPT57UC5mb2N1c2VkRHJvcGRvd25JdGVtPUp9fSxtZXRhZGF0YTpCfSxaLFkpLFgyKHRoaXMsbnVsbCxvZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzUHJvZmlsZURyb3Bkb3duT3BlbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImlzUHJvZmlsZURyb3Bkb3duT3BlbiJpbiBQLGdldDpQPT5QLmlzUHJvZmlsZURyb3Bkb3duT3BlbixzZXQ6KFAsSik9PntQLmlzUHJvZmlsZURyb3Bkb3duT3Blbj1KfX0sbWV0YWRhdGE6Qn0sZ2UsYmUpLFgyKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkJ9LG51bGwsYSksJGU9aT1lLnZhbHVlLEImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pfXN0YXRpYyBkZW1vPXo5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkFwcCBVSSJdOyNlPUd0KHRoaXMsbixbXSk7Z2V0IG1lbnVJdGVtcygpe3JldHVybiB0aGlzLiNlfXNldCBtZW51SXRlbXMoQil7dGhpcy4jZT1CfSN0PShHdCh0aGlzLG8pLEd0KHRoaXMsYywiIikpO2dldCBicmVhZGNydW1icygpe3JldHVybiB0aGlzLiN0fXNldCBicmVhZGNydW1icyhCKXt0aGlzLiN0PUJ9I2E9KEd0KHRoaXMscCksR3QodGhpcyxmLCIgPiAiKSk7Z2V0IGJyZWFkY3J1bWJTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy4jYX1zZXQgYnJlYWRjcnVtYlNlcGFyYXRvcihCKXt0aGlzLiNhPUJ9I2k9KEd0KHRoaXMsZyksR3QodGhpcyx2LCEwKSk7Z2V0IHNob3dXaW5kb3dDb250cm9scygpe3JldHVybiB0aGlzLiNpfXNldCBzaG93V2luZG93Q29udHJvbHMoQil7dGhpcy4jaT1CfSNyPShHdCh0aGlzLG0pLEd0KHRoaXMsTSx2b2lkIDApKTtnZXQgdXNlcigpe3JldHVybiB0aGlzLiNyfXNldCB1c2VyKEIpe3RoaXMuI3I9Qn0jcz0oR3QodGhpcyxTKSxHdCh0aGlzLF8sW10pKTtnZXQgcHJvZmlsZU1lbnVJdGVtcygpe3JldHVybiB0aGlzLiNzfXNldCBwcm9maWxlTWVudUl0ZW1zKEIpe3RoaXMuI3M9Qn0jbj0oR3QodGhpcyxrKSxHdCh0aGlzLEwsITEpKTtnZXQgc2hvd1NlYXJjaCgpe3JldHVybiB0aGlzLiNufXNldCBzaG93U2VhcmNoKEIpe3RoaXMuI249Qn0jbz0oR3QodGhpcyxBKSxHdCh0aGlzLEMsITEpKTtnZXQgc2hvd0FjdGl2aXR5TG9nVG9nZ2xlKCl7cmV0dXJuIHRoaXMuI299c2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZShCKXt0aGlzLiNvPUJ9I2w9KEd0KHRoaXMseiksR3QodGhpcyxULDApKTtnZXQgYWN0aXZpdHlMb2dDb3VudCgpe3JldHVybiB0aGlzLiNsfXNldCBhY3Rpdml0eUxvZ0NvdW50KEIpe3RoaXMuI2w9Qn0jYz0oR3QodGhpcywkKSxHdCh0aGlzLFIsITEpKTtnZXQgYWN0aXZpdHlMb2dBY3RpdmUoKXtyZXR1cm4gdGhpcy4jY31zZXQgYWN0aXZpdHlMb2dBY3RpdmUoQil7dGhpcy4jYz1CfSNkPShHdCh0aGlzLFUpLEd0KHRoaXMsaixudWxsKSk7Z2V0IGFjdGl2ZU1lbnUoKXtyZXR1cm4gdGhpcy4jZH1zZXQgYWN0aXZlTWVudShCKXt0aGlzLiNkPUJ9I3A9KEd0KHRoaXMsbWUpLEd0KHRoaXMsSCxuZXcgU2V0KSk7Z2V0IG9wZW5Ecm9wZG93bnMoKXtyZXR1cm4gdGhpcy4jcH1zZXQgb3BlbkRyb3Bkb3ducyhCKXt0aGlzLiNwPUJ9I2g9KEd0KHRoaXMsY2UpLEd0KHRoaXMsVyxudWxsKSk7Z2V0IGZvY3VzZWRJdGVtKCl7cmV0dXJuIHRoaXMuI2h9c2V0IGZvY3VzZWRJdGVtKEIpe3RoaXMuI2g9Qn0jdT0oR3QodGhpcyxEKSxHdCh0aGlzLFosLTEpKTtnZXQgZm9jdXNlZERyb3Bkb3duSXRlbSgpe3JldHVybiB0aGlzLiN1fXNldCBmb2N1c2VkRHJvcGRvd25JdGVtKEIpe3RoaXMuI3U9Qn0jZj0oR3QodGhpcyxZKSxHdCh0aGlzLGdlLCExKSk7Z2V0IGlzUHJvZmlsZURyb3Bkb3duT3Blbigpe3JldHVybiB0aGlzLiNmfXNldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4oQil7dGhpcy4jZj1CfXN0YXRpYyBzdHlsZXM9Uzl0O3JlbmRlcigpe3JldHVybiBfOXQodGhpcyl9cmVuZGVyTWVudUl0ZW1zKCl7cmV0dXJuIHdgCiAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKChCLFApPT50aGlzLnJlbmRlck1lbnVJdGVtKEIsYG1lbnUtJHtQfWApKX0KICAgIGB9cmVuZGVyTWVudUl0ZW0oQixQKXtpZigiZGl2aWRlciJpbiBCJiZCLmRpdmlkZXIpcmV0dXJuIHdgPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDtsZXQgSj1CLGZlPXRoaXMuYWN0aXZlTWVudT09PVAsZGU9Si5zdWJtZW51JiZKLnN1Ym1lbnUubGVuZ3RoPjA7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gJHtmZT8iYWN0aXZlIjoiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7Si5kaXNhYmxlZH0KICAgICAgICB0YWJpbmRleD0iJHtKLmRpc2FibGVkPy0xOjB9IgogICAgICAgIGRhdGEtaXRlbS1pZD0iJHtQfSIKICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVNZW51Q2xpY2soSixQKX0KICAgICAgICBAa2V5ZG93bj0ke19lPT50aGlzLmhhbmRsZU1lbnVLZXlkb3duKF9lLEosUCl9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgYXJpYS1oYXNwb3B1cD0iJHtkZX0iCiAgICAgICAgYXJpYS1leHBhbmRlZD0iJHtmZX0iCiAgICAgID4KICAgICAgICAke0ouaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHtKLmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgICR7Si5uYW1lfQogICAgICAgICR7ZGU/dGhpcy5yZW5kZXJEcm9wZG93bihKLnN1Ym1lbnUsUCxmZSk6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJEcm9wZG93bihCLFAsSil7cmV0dXJuIHdgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImRyb3Bkb3duICR7Sj8ib3BlbiI6IiJ9IiAKICAgICAgICBAY2xpY2s9JHtmZT0+ZmUuc3RvcFByb3BhZ2F0aW9uKCl9CiAgICAgICAgQGtleWRvd249JHtmZT0+dGhpcy5oYW5kbGVEcm9wZG93bktleWRvd24oZmUsQixQKX0KICAgICAgICB0YWJpbmRleD0iJHtKPzA6LTF9IgogICAgICAgIHJvbGU9Im1lbnUiCiAgICAgID4KICAgICAgICAke0IubWFwKChmZSxkZSk9PnRoaXMucmVuZGVyRHJvcGRvd25JdGVtKGZlLGAke1B9LSR7ZGV9YCkpfQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRHJvcGRvd25JdGVtKEIsUCl7aWYoImRpdmlkZXIiaW4gQiYmQi5kaXZpZGVyKXJldHVybiB3YDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7bGV0IEo9QixmZT1wYXJzZUludChQLnNwbGl0KCItIikucG9wKCl8fCIwIiksZGU9dGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPT09ZmU7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZHJvcGRvd24taXRlbSAke2RlPyJmb2N1c2VkIjoiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7Si5kaXNhYmxlZH0KICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhKKX0KICAgICAgICBAbW91c2VlbnRlcj0keygpPT50aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09ZmV9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgdGFiaW5kZXg9IiR7Si5kaXNhYmxlZD8tMTowfSIKICAgICAgPgogICAgICAgICR7Si5pY29uTmFtZT93YDxkZWVzLWljb24gLmljb249IiR7YGx1Y2lkZToke0ouaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgPHNwYW4+JHtKLm5hbWV9PC9zcGFuPgogICAgICAgICR7Si5zaG9ydGN1dD93YDxzcGFuIGNsYXNzPSJzaG9ydGN1dCI+JHtKLnNob3J0Y3V0fTwvc3Bhbj5gOiIifQogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyQnJlYWRjcnVtYnMoKXtpZighdGhpcy5icmVhZGNydW1icylyZXR1cm4gd2BgO2xldCBCPXRoaXMuYnJlYWRjcnVtYnMuc3BsaXQodGhpcy5icmVhZGNydW1iU2VwYXJhdG9yKTtyZXR1cm4gd2AKICAgICAgJHtCLm1hcCgoUCxKKT0+d2AKICAgICAgICAke0o+MD93YDxzcGFuIGNsYXNzPSJicmVhZGNydW1iLXNlcGFyYXRvciI+JHt0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3J9PC9zcGFuPmA6IiJ9CiAgICAgICAgPHNwYW4gCiAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIiAKICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLmhhbmRsZUJyZWFkY3J1bWJDbGljayhQLEopfQogICAgICAgID4KICAgICAgICAgICR7UH0KICAgICAgICA8L3NwYW4+CiAgICAgIGApfQogICAgYH1yZW5kZXJBY2NvdW50U2VjdGlvbigpe3JldHVybiB3YAogICAgICAke3RoaXMuc2hvd1NlYXJjaD93YAogICAgICAgIDxkZWVzLWljb24KICAgICAgICAgIGNsYXNzPSJzZWFyY2gtaWNvbiIKICAgICAgICAgIC5pY29uPSR7Imx1Y2lkZTpzZWFyY2gifQogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVTZWFyY2hDbGlja30KICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgIGA6IiJ9CiAgICAgICR7dGhpcy51c2VyP3dgCiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iIEBjbGljaz0ke3RoaXMuaGFuZGxlVXNlckNsaWNrfT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhcj93YDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gOndgJHt0aGlzLnVzZXIubmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX1gfQogICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cz93YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxzcGFuPiR7dGhpcy51c2VyLm5hbWV9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24KICAgICAgICAgICAgLnVzZXI9JHt0aGlzLnVzZXJ9CiAgICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLnByb2ZpbGVNZW51SXRlbXN9CiAgICAgICAgICAgIC5pc09wZW49JHt0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3Blbn0KICAgICAgICAgICAgLnBvc2l0aW9uPSR7InRvcC1yaWdodCJ9CiAgICAgICAgICAgIEBtZW51LXNlbGVjdD0ke0I9PnRoaXMuaGFuZGxlUHJvZmlsZU1lbnVTZWxlY3QoQil9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KICAgICAgJHt0aGlzLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZT93YAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhY3Rpdml0eS10b2dnbGUgJHt0aGlzLmFjdGl2aXR5TG9nQWN0aXZlPyJhY3RpdmUiOiIifSIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQWN0aXZpdHlUb2dnbGV9CiAgICAgICAgICB0aXRsZT0iQWN0aXZpdHkgTG9nIgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmFjdGl2aXR5In0+PC9kZWVzLWljb24+CiAgICAgICAgICAke3RoaXMuYWN0aXZpdHlMb2dDb3VudD4wP3dgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1iYWRnZSI+JHt0aGlzLmFjdGl2aXR5TG9nQ291bnQ+OTk/Ijk5KyI6dGhpcy5hY3Rpdml0eUxvZ0NvdW50fTwvc3Bhbj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA6IiJ9CiAgICBgfWhhbmRsZU1lbnVDbGljayhCLFApe0IuZGlzYWJsZWR8fChCLnN1Ym1lbnUmJkIuc3VibWVudS5sZW5ndGg+MD90aGlzLmFjdGl2ZU1lbnU9PT1QP3RoaXMuYWN0aXZlTWVudT1udWxsOnRoaXMuYWN0aXZlTWVudT1QOih0aGlzLmFjdGl2ZU1lbnU9bnVsbCxCLmFjdGlvbiYmQi5hY3Rpb24oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIse2RldGFpbDp7aXRlbTpCfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKSl9aGFuZGxlRHJvcGRvd25JdGVtQ2xpY2soQil7Qi5kaXNhYmxlZHx8KHRoaXMuYWN0aXZlTWVudT1udWxsLEIuYWN0aW9uJiZCLmFjdGlvbigpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0Iix7ZGV0YWlsOntpdGVtOkJ9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpfWhhbmRsZU1lbnVLZXlkb3duKEIsUCxKKXtzd2l0Y2goQi5rZXkpe2Nhc2UiRW50ZXIiOmNhc2UiICI6Qi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGFuZGxlTWVudUNsaWNrKFAsSik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOmlmKFAuc3VibWVudSYmdGhpcy5hY3RpdmVNZW51PT09Sil7Qi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT0wO2xldCBmZT10aGlzLmZpbmROZXh0VmFsaWRJdGVtKFAuc3VibWVudSwtMSwxKTtmZSE9PS0xJiYodGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPWZlLHNldFRpbWVvdXQoKCk9PntsZXQgZGU9dGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wZG93bi5vcGVuIik7ZGUmJmRlLmZvY3VzKCl9LDApKX1icmVhaztjYXNlIkVzY2FwZSI6dGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xO2JyZWFrO2Nhc2UiVGFiIjp0aGlzLmFjdGl2ZU1lbnU9PT1KJiYodGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xKTticmVhaztjYXNlIkFycm93UmlnaHQiOkIucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKEosMSk7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOkIucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKEosLTEpO2JyZWFrfX1oYW5kbGVCcmVhZGNydW1iQ2xpY2soQixQKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJicmVhZGNydW1iLW5hdmlnYXRlIix7ZGV0YWlsOnticmVhZGNydW1iOkIsaW5kZXg6UH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVTZWFyY2hDbGljaygpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jbGljayIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQWN0aXZpdHlUb2dnbGUoKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhY3Rpdml0eS10b2dnbGUiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZVVzZXJDbGljaygpe3RoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuPSF0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3Blbix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ1c2VyLW1lbnUtb3BlbiIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlUHJvZmlsZU1lbnVTZWxlY3QoQil7dGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW49ITEsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicHJvZmlsZS1tZW51LXNlbGVjdCIse2RldGFpbDpCLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUdsb2JhbENsaWNrKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayl9aGFuZGxlR2xvYmFsQ2xpY2s9KEd0KHRoaXMsYmUpLEI9PntCLnN0b3BQcm9wYWdhdGlvbigpfSk7aGFuZGxlRG9jdW1lbnRDbGljaz0oKT0+e3RoaXMuYWN0aXZlTWVudT1udWxsLHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT0tMX07aGFuZGxlRHJvcGRvd25LZXlkb3duKEIsUCxKKXtsZXQgZmU9UC5maWx0ZXIoZGU9PiEoImRpdmlkZXIiaW4gZGUmJmRlLmRpdmlkZXIpKTtzd2l0Y2goQi5rZXkpe2Nhc2UiQXJyb3dEb3duIjpCLnByZXZlbnREZWZhdWx0KCk7bGV0IGRlPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oUCx0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sMSk7ZGUhPT0tMSYmKHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT1kZSk7YnJlYWs7Y2FzZSJBcnJvd1VwIjpCLnByZXZlbnREZWZhdWx0KCk7bGV0IF9lPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oUCx0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sLTEpO19lIT09LTEmJih0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09X2UpO2JyZWFrO2Nhc2UiRW50ZXIiOmlmKEIucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0hPT0tMSl7bGV0IEZlPWZlW3RoaXMuZm9jdXNlZERyb3Bkb3duSXRlbV07RmUmJiJhY3Rpb24iaW4gRmUmJiFGZS5kaXNhYmxlZCYmdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhGZSl9YnJlYWs7Y2FzZSJIb21lIjpCLnByZXZlbnREZWZhdWx0KCk7bGV0IGhlPXRoaXMuZmluZE5leHRWYWxpZEl0ZW0oUCwtMSwxKTtoZSE9PS0xJiYodGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPWhlKTticmVhaztjYXNlIkVuZCI6Qi5wcmV2ZW50RGVmYXVsdCgpO2xldCB0ZT10aGlzLmZpbmROZXh0VmFsaWRJdGVtKFAsUC5sZW5ndGgsLTEpO3RlIT09LTEmJih0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW09dGUpO2JyZWFrO2Nhc2UiRXNjYXBlIjpCLnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmVNZW51PW51bGwsdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtPS0xO2xldCB6ZT10aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcigiLm1lbnVJdGVtLmFjdGl2ZSIpO3plJiZ6ZS5mb2N1cygpO2JyZWFrfX1maW5kTmV4dFZhbGlkSXRlbShCLFAsSil7bGV0IGZlPVArSjtmb3IoO2ZlPj0wJiZmZTxCLmxlbmd0aDspe2xldCBkZT1CW2ZlXTtpZighKCJkaXZpZGVyImluIGRlJiZkZS5kaXZpZGVyKSYmISgiZGlzYWJsZWQiaW4gZGUmJmRlLmRpc2FibGVkKSlyZXR1cm4gZmU7ZmUrPUp9cmV0dXJuLTF9Zm9jdXNOZXh0TWVudUl0ZW0oQixQKXtsZXQgSj1BcnJheS5mcm9tKHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudUl0ZW0iKSksZmU9Si5maW5kSW5kZXgoaGU9PmhlLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWlkIik9PT1CKTtpZihmZT09PS0xKXJldHVybjtsZXQgZGU9ZmUrUDtkZTwwP2RlPUoubGVuZ3RoLTE6ZGU+PUoubGVuZ3RoJiYoZGU9MCk7bGV0IF9lPTA7Zm9yKDtfZTxKLmxlbmd0aDspe2xldCBoZT1KW2RlXTtpZighaGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtoZS5mb2N1cygpLHRoaXMuYWN0aXZlTWVudSYmKHRoaXMuYWN0aXZlTWVudT1udWxsLHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbT0tMSk7YnJlYWt9ZGU9KGRlK1ArSi5sZW5ndGgpJUoubGVuZ3RoLF9lKyt9fXN0YXRpY3tHdChpLGEpfX07cmV0dXJuICRlPWl9KSgpfSk7dmFyICRxPWIoKCk9PntDcSgpfSk7dmFyIEQ5dCxFOXQsUDl0PWIoKCk9Pnt1ZSgpO3gxKCk7RTl0PSgpPT53KEQ5dHx8KEQ5dD16NChbYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjNzM3MzczOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWJvdHRvbWJhci13cmFwcGVyIHsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCgwIDAlIDIwJSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWxhYmVsIj5Cb3R0b20gYmFyIHdpdGggc3RhdHVzIHdpZGdldHMgYW5kIGFjdGlvbnM8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tYm90dG9tYmFyLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1hcHB1aS1ib3R0b21iYXIKICAgICAgICAgICAgICBpZD0iZGVtby1ib3R0b21iYXIiCiAgICAgICAgICAgID48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWxhYmVsIj5Db250cm9sczwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3JhcDogd3JhcDsiPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFN1Y2Nlc3NXaWRnZXQoKSI+QWRkIFN1Y2Nlc3MgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkV2FybmluZ1dpZGdldCgpIj5BZGQgV2FybmluZyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRFcnJvcldpZGdldCgpIj5BZGQgRXJyb3IgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkTG9hZGluZ1dpZGdldCgpIj5BZGQgTG9hZGluZyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRSaWdodFdpZGdldCgpIj5BZGQgUmlnaHQgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkQWN0aW9uKCkiPkFkZCBBY3Rpb248L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJjbGVhckFsbCgpIj5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHNjcmlwdCB0eXBlPSJtb2R1bGUiPgogICAgICAgIGNvbnN0IGJvdHRvbWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZW1vLWJvdHRvbWJhcicpOwoKICAgICAgICAvLyBXYWl0IGZvciBjb21wb25lbnQgdG8gaW5pdGlhbGl6ZQogICAgICAgIGF3YWl0IGJvdHRvbWJhci51cGRhdGVDb21wbGV0ZTsKCiAgICAgICAgLy8gQWRkIGluaXRpYWwgd2lkZ2V0cwogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICdzdGF0dXMnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YWN0aXZpdHknLAogICAgICAgICAgbGFiZWw6ICdTeXN0ZW0gT25saW5lJywKICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgdG9vbHRpcDogJ0FsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsJywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdTdGF0dXMgY2xpY2tlZCcpLAogICAgICAgICAgY29udGV4dE1lbnVJdGVtczogWwogICAgICAgICAgICB7IG5hbWU6ICdWaWV3IERldGFpbHMnLCBpY29uTmFtZTogJ2x1Y2lkZTppbmZvJywgYWN0aW9uOiAoKSA9PiBhbGVydCgnU3lzdGVtIGRldGFpbHMnKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAnUmVmcmVzaCBTdGF0dXMnLCBpY29uTmFtZTogJ2x1Y2lkZTpyZWZyZXNoQ3cnLCBhY3Rpb246ICgpID0+IGFsZXJ0KCdSZWZyZXNoaW5nLi4uJykgfSwKICAgICAgICAgIF0sCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICdub3RpZmljYXRpb25zJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmJlbGwnLAogICAgICAgICAgbGFiZWw6ICczIG5vdGlmaWNhdGlvbnMnLAogICAgICAgICAgc3RhdHVzOiAnd2FybmluZycsCiAgICAgICAgICB0b29sdGlwOiAnWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ05vdGlmaWNhdGlvbnMgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAndmVyc2lvbicsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpnaXRCcmFuY2gnLAogICAgICAgICAgbGFiZWw6ICd2MS4yLjMnLAogICAgICAgICAgdG9vbHRpcDogJ0N1cnJlbnQgdmVyc2lvbicsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdWZXJzaW9uIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgLy8gQWRkIGluaXRpYWwgYWN0aW9ucwogICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgaWQ6ICdzZXR0aW5ncycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpzZXR0aW5ncycsCiAgICAgICAgICB0b29sdGlwOiAnU2V0dGluZ3MnLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBhbGVydCgnU2V0dGluZ3MgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgIGlkOiAnaGVscCcsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpoZWxwQ2lyY2xlJywKICAgICAgICAgIHRvb2x0aXA6ICdIZWxwJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gYWxlcnQoJ0hlbHAgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICAvLyBEZW1vIGNvbnRyb2wgZnVuY3Rpb25zCiAgICAgICAgbGV0IHdpZGdldENvdW50ZXIgPSAwOwogICAgICAgIGxldCBhY3Rpb25Db3VudGVyID0gMDsKCiAgICAgICAgd2luZG93LmFkZFN1Y2Nlc3NXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdzdWNjZXNzLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpjaGVja0NpcmNsZScsCiAgICAgICAgICAgIGxhYmVsOiAnU3VjY2VzcyAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICAgIHRvb2x0aXA6ICdTdWNjZXNzIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3N1Y2Nlc3MtJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZFdhcm5pbmdXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICd3YXJuaW5nLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTphbGVydFRyaWFuZ2xlJywKICAgICAgICAgICAgbGFiZWw6ICdXYXJuaW5nICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICd3YXJuaW5nJywKICAgICAgICAgICAgdG9vbHRpcDogJ1dhcm5pbmcgd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnd2FybmluZy0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkRXJyb3JXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdlcnJvci0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6eENpcmNsZScsCiAgICAgICAgICAgIGxhYmVsOiAnRXJyb3IgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJywKICAgICAgICAgICAgdG9vbHRpcDogJ0Vycm9yIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ2Vycm9yLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRMb2FkaW5nV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgY29uc3QgaWQgPSAnbG9hZGluZy0nICsgd2lkZ2V0Q291bnRlcjsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogaWQsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmxvYWRlcjInLAogICAgICAgICAgICBsYWJlbDogJ0xvYWRpbmcuLi4nLAogICAgICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLAogICAgICAgICAgICBsb2FkaW5nOiB0cnVlLAogICAgICAgICAgICB0b29sdGlwOiAnTG9hZGluZyBpbiBwcm9ncmVzcycsCiAgICAgICAgICB9KTsKCiAgICAgICAgICAvLyBTaW11bGF0ZSBjb21wbGV0aW9uIGFmdGVyIDMgc2Vjb25kcwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGJvdHRvbWJhci51cGRhdGVXaWRnZXQoaWQsIHsKICAgICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpjaGVjaycsCiAgICAgICAgICAgICAgbGFiZWw6ICdEb25lIScsCiAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZFJpZ2h0V2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAncmlnaHQtJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmluZm8nLAogICAgICAgICAgICBsYWJlbDogJ1JpZ2h0ICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgncmlnaHQtJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZEFjdGlvbiA9ICgpID0+IHsKICAgICAgICAgIGFjdGlvbkNvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgICBpZDogJ2FjdGlvbi0nICsgYWN0aW9uQ291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6emFwJywKICAgICAgICAgICAgdG9vbHRpcDogJ0FjdGlvbiAnICsgYWN0aW9uQ291bnRlciwKICAgICAgICAgICAgb25DbGljazogKCkgPT4gewogICAgICAgICAgICAgIGFsZXJ0KCdBY3Rpb24gJyArIGFjdGlvbkNvdW50ZXIgKyAnIGNsaWNrZWQnKTsKICAgICAgICAgICAgICBib3R0b21iYXIucmVtb3ZlQWN0aW9uKCdhY3Rpb24tJyArIGFjdGlvbkNvdW50ZXIpOwogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmNsZWFyQWxsID0gKCkgPT4gewogICAgICAgICAgYm90dG9tYmFyLmNsZWFyV2lkZ2V0cygpOwogICAgICAgICAgYm90dG9tYmFyLmNsZWFyQWN0aW9ucygpOwogICAgICAgICAgd2lkZ2V0Q291bnRlciA9IDA7CiAgICAgICAgICBhY3Rpb25Db3VudGVyID0gMDsKICAgICAgICB9OwogICAgICA8XC9zY3JpcHQ+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSl9KTt2YXIgQXEseTgsSTl0LERxPWIoKCk9Pnt1ZSgpO1ZlKCk7RXQoKTtuMigpO1A5dCgpO0FxPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0seTg9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LEk5dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYXBwdWktYm90dG9tYmFyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W107dmFyIGw9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0soKV0sZD1bSygpXSxBcSh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndpZGdldHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJ3aWRnZXRzImluIGcsZ2V0Omc9Pmcud2lkZ2V0cyxzZXQ6KGcseSk9PntnLndpZGdldHM9eX19LG1ldGFkYXRhOmZ9LG4sbyksQXEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iYWN0aW9ucyJpbiBnLGdldDpnPT5nLmFjdGlvbnMsc2V0OihnLHkpPT57Zy5hY3Rpb25zPXl9fSxtZXRhZGF0YTpmfSxjLHApLEFxKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmZ9LG51bGwsYSksbD1pPWUudmFsdWUsZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9c3RhdGljIGRlbW89RTl0O3N0YXRpYyBkZW1vR3JvdXBzPVsiQXBwIFVJIl07I2U9eTgodGhpcyxuLFtdKTtnZXQgd2lkZ2V0cygpe3JldHVybiB0aGlzLiNlfXNldCB3aWRnZXRzKGYpe3RoaXMuI2U9Zn0jdD0oeTgodGhpcyxvKSx5OCh0aGlzLGMsW10pKTtnZXQgYWN0aW9ucygpe3JldHVybiB0aGlzLiN0fXNldCBhY3Rpb25zKGYpe3RoaXMuI3Q9Zn1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLmJvdHRvbS1iYXIgewogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCJoc2woMCAwJSA2JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLndpZGdldDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICAvKiBTdGF0dXMgY29sb3JzIG1hdGNoaW5nIGRlZXMtd29ya3NwYWNlLWJvdHRvbWJhciAqLwogICAgICAud2lkZ2V0LmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsImhzbCgxNDIgNzAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLnNwaW5uaW5nIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldCBmPXRoaXMud2lkZ2V0cy5maWx0ZXIobT0+bS5wb3NpdGlvbiE9PSJyaWdodCIpLnNvcnQoKG0seCk9PihtLm9yZGVyfHwwKS0oeC5vcmRlcnx8MCkpLGc9dGhpcy53aWRnZXRzLmZpbHRlcihtPT5tLnBvc2l0aW9uPT09InJpZ2h0Iikuc29ydCgobSx4KT0+KG0ub3JkZXJ8fDApLSh4Lm9yZGVyfHwwKSkseT10aGlzLmFjdGlvbnMuZmlsdGVyKG09Pm0ucG9zaXRpb249PT0ibGVmdCIpLHY9dGhpcy5hY3Rpb25zLmZpbHRlcihtPT5tLnBvc2l0aW9uIT09ImxlZnQiKTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iYm90dG9tLWJhciI+CiAgICAgICAgPCEtLSBMZWZ0IGFjdGlvbnMgLS0+CiAgICAgICAgJHt5Lm1hcChtPT50aGlzLnJlbmRlckFjdGlvbihtKSl9CgogICAgICAgIDwhLS0gTGVmdCB3aWRnZXRzIC0tPgogICAgICAgICR7Zi5tYXAoKG0seCk9PndgCiAgICAgICAgICAke3g+MHx8eS5sZW5ndGg+MD93YDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PmA6IiJ9CiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KG0pfQogICAgICAgIGApfQoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIFJpZ2h0IHdpZGdldHMgLS0+CiAgICAgICAgJHtnLm1hcCgobSx4KT0+d2AKICAgICAgICAgICR7dGhpcy5yZW5kZXJXaWRnZXQobSl9CiAgICAgICAgICAke3g8Zy5sZW5ndGgtMXx8di5sZW5ndGg+MD93YDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PmA6IiJ9CiAgICAgICAgYCl9CgogICAgICAgIDwhLS0gUmlnaHQgYWN0aW9ucyAtLT4KICAgICAgICAke3YubWFwKG09PnRoaXMucmVuZGVyQWN0aW9uKG0pKX0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlcldpZGdldChmKXtsZXQgZz1mLnN0YXR1cyYmZi5zdGF0dXMhPT0iaWRsZSI/Zi5zdGF0dXM6IiIseT1mLmljb25OYW1lP2YuaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpP2YuaWNvbk5hbWU6YGx1Y2lkZToke2YuaWNvbk5hbWV9YDoiIjtyZXR1cm4gd2AKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ3aWRnZXQgJHtnfSIKICAgICAgICB0aXRsZT0iJHtmLnRvb2x0aXB8fCIifSIKICAgICAgICBAY2xpY2s9JHsoKT0+Zi5vbkNsaWNrPy4oKX0KICAgICAgICBAY29udGV4dG1lbnU9JHt2PT50aGlzLmhhbmRsZVdpZGdldENvbnRleHRNZW51KHYsZil9CiAgICAgID4KICAgICAgICAke3k/d2AKICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt5fQogICAgICAgICAgICBpY29uU2l6ZT0iMTIiCiAgICAgICAgICAgIGNsYXNzPSIke2YubG9hZGluZz8ic3Bpbm5pbmciOiIifSIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICBgOiIifQogICAgICAgICR7Zi5sYWJlbD93YDxzcGFuPiR7Zi5sYWJlbH08L3NwYW4+YDoiIn0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckFjdGlvbihmKXtsZXQgZz1mLmljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKT9mLmljb25OYW1lOmBsdWNpZGU6JHtmLmljb25OYW1lfWA7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYWN0aW9uLWJ1dHRvbiAke2YuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgdGl0bGU9IiR7Zi50b29sdGlwfHwiIn0iCiAgICAgICAgQGNsaWNrPSR7KCk9PiFmLmRpc2FibGVkJiZmLm9uQ2xpY2s/LigpfQogICAgICA+CiAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgLmljb249JHtnfQogICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGhhbmRsZVdpZGdldENvbnRleHRNZW51KGYsZyl7aWYoIWcuY29udGV4dE1lbnVJdGVtc3x8Zy5jb250ZXh0TWVudUl0ZW1zLmxlbmd0aD09PTApcmV0dXJuO2YucHJldmVudERlZmF1bHQoKTtsZXQgeT1bXTtmb3IobGV0IHYgb2YgZy5jb250ZXh0TWVudUl0ZW1zKXYuZGl2aWRlcj95LnB1c2goe2RpdmlkZXI6ITB9KTp5LnB1c2goe25hbWU6di5uYW1lLGljb25OYW1lOnYuaWNvbk5hbWUsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB2LmFjdGlvbigpfSxkaXNhYmxlZDp2LmRpc2FibGVkfSk7YXdhaXQgV3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZix5KX1hZGRXaWRnZXQoZil7dGhpcy53aWRnZXRzPXRoaXMud2lkZ2V0cy5maWx0ZXIoZz0+Zy5pZCE9PWYuaWQpLHRoaXMud2lkZ2V0cz1bLi4udGhpcy53aWRnZXRzLGZdfXVwZGF0ZVdpZGdldChmLGcpe3RoaXMud2lkZ2V0cz10aGlzLndpZGdldHMubWFwKHk9PnkuaWQ9PT1mP3suLi55LC4uLmd9OnkpfXJlbW92ZVdpZGdldChmKXt0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLmZpbHRlcihnPT5nLmlkIT09Zil9Z2V0V2lkZ2V0KGYpe3JldHVybiB0aGlzLndpZGdldHMuZmluZChnPT5nLmlkPT09Zil9Y2xlYXJXaWRnZXRzKCl7dGhpcy53aWRnZXRzPVtdfWFkZEFjdGlvbihmKXt0aGlzLmFjdGlvbnM9dGhpcy5hY3Rpb25zLmZpbHRlcihnPT5nLmlkIT09Zi5pZCksdGhpcy5hY3Rpb25zPVsuLi50aGlzLmFjdGlvbnMsZl19cmVtb3ZlQWN0aW9uKGYpe3RoaXMuYWN0aW9ucz10aGlzLmFjdGlvbnMuZmlsdGVyKGc9PmcuaWQhPT1mKX1jbGVhckFjdGlvbnMoKXt0aGlzLmFjdGlvbnM9W119Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHk4KHRoaXMscCl9c3RhdGlje3k4KGksYSl9fTtyZXR1cm4gbD1pfSkoKX0pO3ZhciBOOXQ9YigoKT0+e0RxKCl9KTt2YXIgRjl0LE85dD1iKCgpPT57dWUoKTtGOXQ9KCk9PndgCiAgPHN0eWxlPgogICAgJHtRYAogICAgICAuZGVtby1iYWNrZ3JvdW5kIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBtYXJnaW46IDMycHggMCAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLnNlY3Rpb24tdGl0bGU6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC0zY29sIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTY4cHgpIHsKICAgICAgICAuZ3JpZC0zY29sIHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWJhY2tncm91bmQiPgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkRlZmF1bHQgUGFuZWxzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQYW5lbCBDb21wb25lbnQifSAuc3VidGl0bGU9JHsiVGhlIGRlZmF1bHQgcGFuZWwgdmFyaWFudCB3aXRoIHNoYWRjbi1pbnNwaXJlZCBzdHlsaW5nIn0+CiAgICAgICAgPHA+VGhlIHBhbmVsIGNvbXBvbmVudCBhdXRvbWF0aWNhbGx5IGZvbGxvd3MgdGhlIHRoZW1lIGFuZCBwcm92aWRlcyBjb25zaXN0ZW50IHN0eWxpbmcgZm9yIGdyb3VwZWQgY29udGVudC48L3A+CiAgICAgICAgPHA+SXQncyBwZXJmZWN0IGZvciBjcmVhdGluZyBzZWN0aW9ucyBpbiB5b3VyIGFwcGxpY2F0aW9uIHdpdGggcHJvcGVyIHNwYWNpbmcgYW5kIGJvcmRlcnMuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgT3ZlcnZpZXcifSAuc3VidGl0bGU9JHsiS2V5IGNhcGFiaWxpdGllcyJ9PgogICAgICAgICAgPHA+R3JpZCBsYXlvdXRzIHdvcmsgZ3JlYXQgd2l0aCBwYW5lbHMgZm9yIGNyZWF0aW5nIGRhc2hib2FyZHMgYW5kIGZlYXR1cmUgc2VjdGlvbnMuPC9wPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkxlYXJuIE1vcmU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUXVpY2sgQWN0aW9ucyJ9IC5zdWJ0aXRsZT0keyJDb21tb24gdGFza3MifT4KICAgICAgICAgIDxwPkVhY2ggcGFuZWwgbWFpbnRhaW5zIGNvbnNpc3RlbnQgc3BhY2luZyBhbmQgc3R5bGluZyBhY3Jvc3MgeW91ciBhcHBsaWNhdGlvbi48L3A+CiAgICAgICAgICA8ZGVlcy1idXR0b24+R2V0IFN0YXJ0ZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhbmVsIFZhcmlhbnRzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEZWZhdWx0IFZhcmlhbnQifSAudmFyaWFudD0keyJkZWZhdWx0In0+CiAgICAgICAgPHA+VGhlIGRlZmF1bHQgdmFyaWFudCBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBzdWJ0bGUgYm9yZGVyLCBhbmQgbWluaW1hbCBzaGFkb3cuIEl0J3MgdGhlIHN0YW5kYXJkIGNob2ljZSBmb3IgbW9zdCBjb250ZW50LjwvcD4KICAgICAgICA8cD5Vc2UgPGNvZGU+dmFyaWFudD0iZGVmYXVsdCI8L2NvZGU+IG9yIG9taXQgdGhlIHZhcmlhbnQgcHJvcGVydHkuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3V0bGluZSBWYXJpYW50In0gLnN1YnRpdGxlPSR7IlRyYW5zcGFyZW50IGJhY2tncm91bmQgd2l0aCBib3JkZXIifSAudmFyaWFudD0keyJvdXRsaW5lIn0+CiAgICAgICAgPHA+VGhlIG91dGxpbmUgdmFyaWFudCByZW1vdmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFuZCBzaGFkb3csIGtlZXBpbmcgb25seSB0aGUgYm9yZGVyLjwvcD4KICAgICAgICA8cD5Vc2UgPGNvZGU+dmFyaWFudD0ib3V0bGluZSI8L2NvZGU+IGZvciBhIGxpZ2h0ZXIgdmlzdWFsIHdlaWdodC48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJHaG9zdCBWYXJpYW50In0gLnN1YnRpdGxlPSR7Ik1pbmltYWwgc3R5bGluZyBmb3Igc3VidGxlIHNlY3Rpb25zIn0gLnZhcmlhbnQ9JHsiZ2hvc3QifT4KICAgICAgICA8cD5UaGUgZ2hvc3QgdmFyaWFudCBoYXMgbm8gYm9yZGVyIG9yIGJhY2tncm91bmQgYnkgZGVmYXVsdCwgb25seSBzaG93aW5nIGEgc3VidGxlIGJhY2tncm91bmQgb24gaG92ZXIuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJnaG9zdCI8L2NvZGU+IGZvciB0aGUgbW9zdCBtaW5pbWFsIGFwcGVhcmFuY2UuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhbmVsIFNpemVzPC9oMj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtM2NvbCI+CiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNtYWxsIFBhbmVsIn0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPkNvbXBhY3QgcGFkZGluZyBmb3IgZGVuc2UgbGF5b3V0cy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ic20iPC9jb2RlPjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik1lZGl1bSBQYW5lbCJ9IC5zaXplPSR7Im1kIn0+CiAgICAgICAgICA8cD5EZWZhdWx0IHNpemUgd2l0aCBiYWxhbmNlZCBzcGFjaW5nLjwvcD4KICAgICAgICAgIDxwPlVzZSA8Y29kZT5zaXplPSJtZCI8L2NvZGU+IG9yIG9taXQuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTGFyZ2UgUGFuZWwifSAuc2l6ZT0keyJsZyJ9PgogICAgICAgICAgPHA+R2VuZXJvdXMgcGFkZGluZyBmb3IgcHJvbWluZW50IHNlY3Rpb25zLjwvcD4KICAgICAgICAgIDxwPlVzZSA8Y29kZT5zaXplPSJsZyI8L2NvZGU+PC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbXBsZXggRXhhbXBsZXM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZvcm0gRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJQYW5lbHMgd29yayBncmVhdCBmb3Igb3JnYW5pemluZyBmb3JtIHNlY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlByb2plY3QgTmFtZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkRlc2NyaXB0aW9uIn0gLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24gCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9IAogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJXZWIgRGV2ZWxvcG1lbnQiLGtleToid2ViIn0se29wdGlvbjoiTW9iaWxlIEFwcCIsa2V5OiJtb2JpbGUifSx7b3B0aW9uOiJEZXNrdG9wIFNvZnR3YXJlIixrZXk6ImRlc2t0b3AifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIFByb2plY3Q8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWxzIn0gLnN1YnRpdGxlPSR7IlBhbmVscyBjYW4gYmUgbmVzdGVkIGZvciBoaWVyYXJjaGljYWwgb3JnYW5pemF0aW9uIn0+CiAgICAgICAgPHA+WW91IGNhbiBuZXN0IHBhbmVscyB0byBjcmVhdGUgbW9yZSBjb21wbGV4IGxheW91dHM6PC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWwgMSJ9IC52YXJpYW50PSR7Im91dGxpbmUifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+VGhpcyBpcyBhIG5lc3RlZCBwYW5lbCB3aXRoIG91dGxpbmUgdmFyaWFudCBhbmQgc21hbGwgc2l6ZS48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWwgMiJ9IC52YXJpYW50PSR7Imdob3N0In0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPlRoaXMgaXMgYW5vdGhlciBuZXN0ZWQgcGFuZWwgd2l0aCBnaG9zdCB2YXJpYW50LjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VW50aXRsZWQgUGFuZWxzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgIDxwPlBhbmVscyB3b3JrIGdyZWF0IGV2ZW4gd2l0aG91dCBhIHRpdGxlIGZvciBzaW1wbGUgY29udGVudCBncm91cGluZy48L3A+CiAgICAgICAgPHA+VGhleSBwcm92aWRlIHZpc3VhbCBzZXBhcmF0aW9uIGFuZCBjb25zaXN0ZW50IHBhZGRpbmcgdGhyb3VnaG91dCB5b3VyIGludGVyZmFjZS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICA8ZGVlcy1wYW5lbCAudmFyaWFudD0keyJvdXRsaW5lIn0+CiAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbi10b3A6IDA7Ij5DdXN0b20gQ29udGVudDwvaDQ+CiAgICAgICAgICA8cD5Zb3UgY2FuIGFkZCB5b3VyIG93biBoZWFkaW5ncyBhbmQgc3RydWN0dXJlIHdpdGhpbiB1bnRpdGxlZCBwYW5lbHMuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudmFyaWFudD0keyJnaG9zdCJ9PgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW4tdG9wOiAwOyI+TWluaW1hbCBTdHlsZTwvaDQ+CiAgICAgICAgICA8cD5HaG9zdCBwYW5lbHMgd2l0aG91dCB0aXRsZXMgY3JlYXRlIHZlcnkgc3VidGxlIGNvbnRlbnQgc2VjdGlvbnMuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBLanQsUWp0LEVxLEpqdCx0MSxVMCxlVXQsdFV0LFI5dCxhVXQsaVV0LGVLMSx0SzEscGE9YigoKT0+e3VlKCk7S2p0PSJHZWlzdCBTYW5zIixRanQ9IkludGVsIE9uZSBNb25vIixFcT1gJyR7S2p0fScsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsICdPeHlnZW4nLCAnVWJ1bnR1JywgJ0NhbnRhcmVsbCcsICdGaXJhIFNhbnMnLCAnRHJvaWQgU2FucycsICdIZWx2ZXRpY2EgTmV1ZScsIHNhbnMtc2VyaWZgLEpqdD1gJyR7UWp0fScsICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCAnRmlyYSBNb25vJywgJ0Ryb2lkIFNhbnMgTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZWAsdDE9cXQoRXEpLFUwPXF0KEpqdCksZVV0PSJDYWwgU2FucyIsdFV0PWAnJHtlVXR9JywgJHtFcX1gLFI5dD1xdCh0VXQpLGFVdD0iUm9ib3RvIFNsYWIiLGlVdD1gJyR7YVV0fScsIEdlb3JnaWEsIHNlcmlmYCxlSzE9cXQoaVV0KSx0SzE9cXQoYAogIGZvbnQtZmFtaWx5OiAke0VxfTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2N2MTEnLCAndG51bScsICdjdjA1JyAxOwpgKX0pO3ZhciAkbCxZaSxCOXQsZzI9YigoKT0+e3VlKCk7Tzl0KCk7cGEoKTtWZSgpOyRsPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sWWk9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LEI5dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtcGFuZWwiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpTdHJpbmd9KV0seT1bSSh7dHlwZTpTdHJpbmd9KV0seD1bSSh7YXR0cmlidXRlOiExfSldLCRsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGl0bGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ0aXRsZSJpbiBrLGdldDprPT5rLnRpdGxlLHNldDooayxOKT0+e2sudGl0bGU9Tn19LG1ldGFkYXRhOl99LG4sbyksJGwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdWJ0aXRsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InN1YnRpdGxlImluIGssZ2V0Oms9Pmsuc3VidGl0bGUsc2V0OihrLE4pPT57ay5zdWJ0aXRsZT1OfX0sbWV0YWRhdGE6X30sYyxwKSwkbCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhcmlhbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ2YXJpYW50ImluIGssZ2V0Oms9PmsudmFyaWFudCxzZXQ6KGssTik9PntrLnZhcmlhbnQ9Tn19LG1ldGFkYXRhOl99LGYsZyksJGwodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2l6ZSJpbiBrLGdldDprPT5rLnNpemUsc2V0OihrLE4pPT57ay5zaXplPU59fSxtZXRhZGF0YTpffSx2LG0pLCRsKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToicnVuQWZ0ZXJSZW5kZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJydW5BZnRlclJlbmRlciJpbiBrLGdldDprPT5rLnJ1bkFmdGVyUmVuZGVyLHNldDooayxOKT0+e2sucnVuQWZ0ZXJSZW5kZXI9Tn19LG1ldGFkYXRhOl99LE0sUyksJGwobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxGPWk9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX1zdGF0aWMgZGVtbz1GOXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJMYXlvdXQiXTsjZT1ZaSh0aGlzLG4sIiIpO2dldCB0aXRsZSgpe3JldHVybiB0aGlzLiNlfXNldCB0aXRsZShfKXt0aGlzLiNlPV99I3Q9KFlpKHRoaXMsbyksWWkodGhpcyxjLCIiKSk7Z2V0IHN1YnRpdGxlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHN1YnRpdGxlKF8pe3RoaXMuI3Q9X30jYT0oWWkodGhpcyxwKSxZaSh0aGlzLGYsImRlZmF1bHQiKSk7Z2V0IHZhcmlhbnQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgdmFyaWFudChfKXt0aGlzLiNhPV99I2k9KFlpKHRoaXMsZyksWWkodGhpcyx2LCJtZCIpKTtnZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNpfXNldCBzaXplKF8pe3RoaXMuI2k9X30jcj0oWWkodGhpcyxtKSxZaSh0aGlzLE0sdm9pZCAwKSk7Z2V0IHJ1bkFmdGVyUmVuZGVyKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHJ1bkFmdGVyUmVuZGVyKF8pe3RoaXMuI3I9X31zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAke3QxfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGRlZmF1bHQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXSkgewogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIGhzbCgwIDAlIDAlIC8gMC4wNSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IG91dGxpbmUgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGdob3N0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJnaG9zdCJdKSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmhlYWRlcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBUaXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgbWFyZ2luOiA0cHggMCAwIDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTdWJ0aXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA4NC45JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KCiAgICAgIC8qIENvbnRlbnQgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQoKICAgICAgLyogUmVtb3ZlIG1hcmdpbnMgZnJvbSBmaXJzdCBhbmQgbGFzdCBjaGlsZHJlbiAqLwogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGRlZmF1bHQgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZGVmYXVsdCJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIG91dGxpbmUgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0ib3V0bGluZSJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgNy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3IgZ2hvc3QgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXTpob3ZlcikgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEZvY3VzIHN0YXRlcyAqLwogICAgICA6aG9zdCg6Zm9jdXMtd2l0aGluKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBOZXN0ZWQgcGFuZWxzIHNwYWNpbmcgKi8KICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWwpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoZGVlcy1wYW5lbDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICR7dGhpcy50aXRsZT93YDxoMyBjbGFzcz0idGl0bGUiPiR7dGhpcy50aXRsZX08L2gzPmA6IiJ9CiAgICAgICAgJHt0aGlzLnN1YnRpdGxlP3dgPHAgY2xhc3M9InN1YnRpdGxlIj4ke3RoaXMuc3VidGl0bGV9PC9wPmA6IiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLnJ1bkFmdGVyUmVuZGVyJiZhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxZaSh0aGlzLFMpfXN0YXRpY3tZaShpLGEpfX07cmV0dXJuIEY9aX0pKCl9KTt2YXIgSDl0LFBxLHE5dCxWOXQ9YigoKT0+e3VlKCk7eDEoKTtnMigpO1BxPXQ9PkFycmF5LmZyb20oe2xlbmd0aDp0fSwoZSxhKT0+KHtpZDphLHVzYWdlOk1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDApLGxhYmVsOmAke2F9YH0pKSxxOXQ9KCk9PncoSDl0fHwoSDl0PXo0KFtgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgIGAsYAogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgICAudGlsZXM9YCxgCiAgICAgICAgICAuZ3JpZEFjdGlvbnM9YCxgCiAgICAgICAgICAubWluVGlsZVdpZHRoPWAsYAogICAgICAgICAgLmdhcD1gLGAKICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJhY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogYCwiOyBib3JkZXItcmFkaXVzOiA2cHg7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICIsYDsiPgogICAgICAgICAgPGVtPkNsaWNrIG9uIHRpbGUgYWN0aW9ucyBvciBncmlkIGFjdGlvbnMgdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgICAudGlsZXM9YCxgCiAgICAgICAgICAubWluVGlsZVdpZHRoPWAsYAogICAgICAgICAgLmdhcD1gLGAKICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWNvbmZpZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+Q29uZmlndXJhdGlvbiBPcHRpb25zPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgRWFjaCB0aWxlIHR5cGUgc3VwcG9ydHMgZGlmZmVyZW50IHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPk51bWJlcjo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5HYXVnZTo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIGdhdWdlT3B0aW9ucyAobWluLCBtYXgsIHRocmVzaG9sZHMpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlBlcmNlbnRhZ2U6PC9zdHJvbmc+IHZhbHVlICgwLTEwMCksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5UcmVuZDo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIHRyZW5kRGF0YSBhcnJheSwgZGVzY3JpcHRpb248L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGV4dDo8L3N0cm9uZz4gdmFsdWUgKHN0cmluZyksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+CiAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgMTZweCAwOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7Ij5Db21wYWN0IExheW91dCAoMTgwcHggdGlsZXMpPC9oND4KICAgICAgICA8ZGVlcy1zdGF0c2dyaWQKICAgICAgICAgIC50aWxlcz1gLGAKICAgICAgICAgIC5taW5UaWxlV2lkdGg9YCxgCiAgICAgICAgICAuZ2FwPWAsYAogICAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgICAgIAogICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAyNHB4IDAgMTZweCAwOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7Ij5TcGFjaW91cyBMYXlvdXQgKDMyMHB4IHRpbGVzKTwvaDQ+CiAgICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgICAudGlsZXM9YCxgCiAgICAgICAgICAubWluVGlsZVdpZHRoPWAsYAogICAgICAgICAgLmdhcD1gLGAKICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgICAgaWQ9ImNwdS1jb3Jlcy1ncmlkIgogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLmdyaWRBY3Rpb25zPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1zdGF0c2dyaWQKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1ncmlkIgogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLmdyaWRBY3Rpb25zPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrIj5gLGA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgICAgLnRpbGVzPWAsYAogICAgICAgICAgLm1pblRpbGVXaWR0aD1gLGAKICAgICAgICAgIC5nYXA9YCxgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5QYXJ0aXRpb24gVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudXNlZDo8L3N0cm9uZz4gVXNlZCBzcGFjZSBpbiBieXRlcyAoYXV0by1mb3JtYXR0ZWQpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudG90YWw6PC9zdHJvbmc+IFRvdGFsIGNhcGFjaXR5IGluIGJ5dGVzPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEuZmlsZXN5c3RlbTo8L3N0cm9uZz4gRmlsZXN5c3RlbSB0eXBlIChleHQ0LCB4ZnMsIG50ZnMpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEubW91bnRQb2ludDo8L3N0cm9uZz4gTW91bnQgcG9pbnQgcGF0aCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIENvbG9yIHRocmVzaG9sZHM6IE5vcm1hbCAoJmx0Ozc1JSksIFdhcm5pbmcgKDc1LTkwJSksIENyaXRpY2FsICgmZ3Q7OTAlKQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkRpc2sgVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLmNhcGFjaXR5Ojwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5tb2RlbDo8L3N0cm9uZz4gRGlzayBtb2RlbCBuYW1lIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEudHlwZTo8L3N0cm9uZz4gRGlzayB0eXBlOiAnc3NkJywgJ2hkZCcsIG9yICdudm1lJzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5pb3BzOjwvc3Ryb25nPiBSZWFkL3dyaXRlIElPUFMgKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5oZWFsdGg6PC9zdHJvbmc+IEhlYWx0aCBwZXJjZW50YWdlIDAtMTAwIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgSGVhbHRoIHRocmVzaG9sZHM6IEdvb2QgKDcwLTEwMCUpLCBXYXJuaW5nICgzMC03MCUpLCBDcml0aWNhbCAoJmx0OzMwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgLy8gQ2xlYW51cCBsaXZlIHVwZGF0ZXMgb24gcGFnZSB1bmxvYWQKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsICgpID0+IHsKICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCgod2luZG93IGFzIGFueSkubGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgPFwvc2NyaXB0PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgXSkpLFFgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTQwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50aWxlLWNvbmZpZyB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29uZmlnLXNlY3Rpb24gewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvZGUtYmxvY2sgewogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgfQogICAgICBgLCIxLiBDb21wcmVoZW5zaXZlIERhc2hib2FyZCIsIkZ1bGwtZmVhdHVyZWQgc3RhdHMgZ3JpZCB3aXRoIHZhcmlvdXMgdGlsZSB0eXBlcywgYWN0aW9ucywgYW5kIEx1Y2lkZSBpY29ucyIsW3tpZDoicmV2ZW51ZSIsdGl0bGU6IlRvdGFsIFJldmVudWUiLHZhbHVlOjEyNTQyMCx1bml0OiIkIix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpkb2xsYXItc2lnbiIsZGVzY3JpcHRpb246IisxMi41JSBmcm9tIGxhc3QgbW9udGgiLGFjdGlvbnM6W3tuYW1lOiJWaWV3IERldGFpbHMiLGljb25OYW1lOiJsdWNpZGU6dHJlbmRpbmctdXAiLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTt0JiYodC50ZXh0Q29udGVudD0iVmlld2luZyByZXZlbnVlIGRldGFpbHM6ICQxMjUsNDIwICgrMTIuNSUpIil9fSx7bmFtZToiRXhwb3J0IERhdGEiLGljb25OYW1lOiJsdWNpZGU6ZG93bmxvYWQiLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTt0JiYodC50ZXh0Q29udGVudD0iRXhwb3J0aW5nIHJldmVudWUgZGF0YSB0byBDU1YuLi4iKX19XX0se2lkOiJ1c2VycyIsdGl0bGU6IkFjdGl2ZSBVc2VycyIsdmFsdWU6Mzg0Nyx0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTp1c2VycyIsZGVzY3JpcHRpb246IjMyNCBuZXcgdGhpcyB3ZWVrIixhY3Rpb25zOlt7bmFtZToiVmlldyBVc2VyIExpc3QiLGljb25OYW1lOiJsdWNpZGU6bGlzdCIsYWN0aW9uOmFzeW5jKCk9PntsZXQgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpO3QmJih0LnRleHRDb250ZW50PSJPcGVuaW5nIHVzZXIgbGlzdC4uLiIpfX1dfSx7aWQ6ImNwdSIsdGl0bGU6IkNQVSBVc2FnZSIsdmFsdWU6NzMsdW5pdDoiJSIsdHlwZToiZ2F1Z2UiLGljb246Imx1Y2lkZTpjcHUiLGdhdWdlT3B0aW9uczp7bWluOjAsbWF4OjEwMCx0aHJlc2hvbGRzOlt7dmFsdWU6MCxjb2xvcjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSJ9LHt2YWx1ZTo2MCxjb2xvcjoiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIn0se3ZhbHVlOjgwLGNvbG9yOiJoc2woMCA4NC4yJSA2MC4yJSkifV19fSx7aWQ6InN0b3JhZ2UiLHRpdGxlOiJTdG9yYWdlIFVzZWQiLHZhbHVlOjY1LHR5cGU6InBlcmNlbnRhZ2UiLGljb246Imx1Y2lkZTpoYXJkLWRyaXZlIixkZXNjcmlwdGlvbjoiNjUwIEdCIG9mIDEgVEIifSx7aWQ6ImxhdGVuY3kiLHRpdGxlOiJSZXNwb25zZSBUaW1lIix2YWx1ZToxNDIsdW5pdDoibXMiLHR5cGU6InRyZW5kIixpY29uOiJsdWNpZGU6YWN0aXZpdHkiLHRyZW5kRGF0YTpbMTUwLDE0NSwxNDgsMTQyLDEzOCwxNDAsMTM1LDE0NSwxNDJdLGRlc2NyaXB0aW9uOiJQOTUifSx7aWQ6InVwdGltZSIsdGl0bGU6IlN5c3RlbSBVcHRpbWUiLHZhbHVlOiI5OS45NSUiLHR5cGU6InRleHQiLGljb246Imx1Y2lkZTpjaGVjay1jaXJjbGUiLGNvbG9yOiJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIixkZXNjcmlwdGlvbjoiTGFzdCAzMCBkYXlzIn1dLFt7bmFtZToiUmVmcmVzaCIsaWNvbk5hbWU6Imx1Y2lkZTpyZWZyZXNoLWN3IixhY3Rpb246YXN5bmMoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc3RhdHNncmlkIik7dCYmKHQuc3R5bGUub3BhY2l0eT0iMC41IixzZXRUaW1lb3V0KCgpPT57dC5zdHlsZS5vcGFjaXR5PSIxIn0sMzAwKSl9fSx7bmFtZToiRXhwb3J0IixpY29uTmFtZToibHVjaWRlOnNoYXJlIixhY3Rpb246YXN5bmMoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7dCYmKHQudGV4dENvbnRlbnQ9IkV4cG9ydGluZyBkYXNoYm9hcmQgcmVwb3J0Li4uIil9fSx7bmFtZToiU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTt0JiYodC50ZXh0Q29udGVudD0iT3BlbmluZyBkYXNoYm9hcmQgc2V0dGluZ3MuLi4iKX19XSwyNTAsMTYsaC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpLGguYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKSwiMi4gVGlsZSBUeXBlcyIsIkRpZmZlcmVudCB2aXN1YWxpemF0aW9uIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgc3RhdHMgZ3JpZCIsW3tpZDoibnVtYmVyLWV4YW1wbGUiLHRpdGxlOiJOdW1iZXIgVGlsZSIsdmFsdWU6NDIxOTUsdW5pdDoiJCIsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6aGFzaCIsZGVzY3JpcHRpb246IlNpbXBsZSBudW1lcmljIGRpc3BsYXkifSx7aWQ6ImdhdWdlLWV4YW1wbGUiLHRpdGxlOiJHYXVnZSBUaWxlIix2YWx1ZTo2OCx1bml0OiIlIix0eXBlOiJnYXVnZSIsaWNvbjoibHVjaWRlOmdhdWdlIixnYXVnZU9wdGlvbnM6e21pbjowLG1heDoxMDAsdGhyZXNob2xkczpbe3ZhbHVlOjAsY29sb3I6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkifSx7dmFsdWU6NTAsY29sb3I6ImhzbCg0NS40IDkzLjQlIDQ3LjUlKSJ9LHt2YWx1ZTo4MCxjb2xvcjoiaHNsKDAgODQuMiUgNjAuMiUpIn1dfX0se2lkOiJwZXJjZW50YWdlLWV4YW1wbGUiLHRpdGxlOiJQZXJjZW50YWdlIFRpbGUiLHZhbHVlOjc4LHR5cGU6InBlcmNlbnRhZ2UiLGljb246Imx1Y2lkZTpwZXJjZW50IixkZXNjcmlwdGlvbjoiUHJvZ3Jlc3MgYmFyIHZpc3VhbGl6YXRpb24ifSx7aWQ6InRyZW5kLWV4YW1wbGUiLHRpdGxlOiJUcmVuZCBUaWxlIix2YWx1ZTo4OTIsdW5pdDoib3BzL3MiLHR5cGU6InRyZW5kIixpY29uOiJsdWNpZGU6dHJlbmRpbmctdXAiLHRyZW5kRGF0YTpbNzIwLDc1MCw3ODAsNzk1LDgxMCw4MzUsODUwLDg2NSw4ODAsODkyXSxkZXNjcmlwdGlvbjoiYXZnIn0se2lkOiJ0ZXh0LWV4YW1wbGUiLHRpdGxlOiJUZXh0IFRpbGUiLHZhbHVlOiJPcGVyYXRpb25hbCIsdHlwZToidGV4dCIsaWNvbjoibHVjaWRlOmluZm8iLGNvbG9yOiJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIixkZXNjcmlwdGlvbjoiU3RhdHVzIGRpc3BsYXkifV0sMjgwLDE2LCIzLiBHcmlkIENvbmZpZ3VyYXRpb25zIiwiRGlmZmVyZW50IGxheW91dCBvcHRpb25zIGFuZCByZXNwb25zaXZlIGJlaGF2aW9yIixbe2lkOiIxIix0aXRsZToiT3JkZXJzIix2YWx1ZToxNTYsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6c2hvcHBpbmctY2FydCJ9LHtpZDoiMiIsdGl0bGU6IlJldmVudWUiLHZhbHVlOjg0MjAsdW5pdDoiJCIsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6ZG9sbGFyLXNpZ24ifSx7aWQ6IjMiLHRpdGxlOiJVc2VycyIsdmFsdWU6NDIzLHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOnVzZXJzIn0se2lkOiI0Iix0aXRsZToiR3Jvd3RoIix2YWx1ZToxMi41LHVuaXQ6IiUiLHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOnRyZW5kaW5nLXVwIixjb2xvcjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSJ9XSwxODAsMTIsW3tpZDoic3BhY2lvdXMxIix0aXRsZToiTW9udGhseSBSZXZlbnVlIix2YWx1ZToxODQ1MDAsdW5pdDoiJCIsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6Y3JlZGl0LWNhcmQiLGRlc2NyaXB0aW9uOiJUb3RhbCByZXZlbnVlIHRoaXMgbW9udGgifSx7aWQ6InNwYWNpb3VzMiIsdGl0bGU6IkN1c3RvbWVyIFNhdGlzZmFjdGlvbiIsdmFsdWU6OTQsdHlwZToicGVyY2VudGFnZSIsaWNvbjoibHVjaWRlOnNtaWxlIixkZXNjcmlwdGlvbjoiQmFzZWQgb24gMSwyMzQgcmV2aWV3cyJ9LHtpZDoic3BhY2lvdXMzIix0aXRsZToiU2VydmVyIFJlc3BvbnNlIix2YWx1ZTo5OCx1bml0OiJtcyIsdHlwZToidHJlbmQiLGljb246Imx1Y2lkZTpzZXJ2ZXIiLHRyZW5kRGF0YTpbMTA1LDEwMiwxMDAsOTksOTgsOTgsOTcsOThdLGRlc2NyaXB0aW9uOiJhdmcgcmVzcG9uc2UgdGltZSJ9XSwzMjAsMjAsIjQuIENQVSBDb3JlcyBWaXN1YWxpemF0aW9uIiwiVmVydGljYWwgYmFyIHZpc3VhbGl6YXRpb24gZm9yIG11bHRpLWNvcmUgQ1BVIHVzYWdlIHdpdGggY29sdW1uIHNwYW5uaW5nIixbe2lkOiJjcHUtY29yZXMtOCIsdGl0bGU6IkNQVSBDb3JlcyAoOC1jb3JlKSIsdmFsdWU6MCx0eXBlOiJjcHVDb3JlcyIsaWNvbjoibHVjaWRlOmNwdSIsY29sdW1uU3BhbjoyLGNvcmVzRGF0YTpQcSg4KSxkZXNjcmlwdGlvbjoiSW50ZWwgaTcgLSA4IGNvcmVzIn0se2lkOiJtZW1vcnkiLHRpdGxlOiJNZW1vcnkgVXNhZ2UiLHZhbHVlOjY4LHR5cGU6InBlcmNlbnRhZ2UiLGljb246Imx1Y2lkZTpkYXRhYmFzZSIsZGVzY3JpcHRpb246IjEzLjYgR0Igb2YgMjAgR0IifSx7aWQ6ImNwdS1jb3Jlcy0xNiIsdGl0bGU6IkNQVSBDb3JlcyAoMTYtY29yZSkiLHZhbHVlOjAsdHlwZToiY3B1Q29yZXMiLGljb246Imx1Y2lkZTpjcHUiLGNvbHVtblNwYW46Mixjb3Jlc0RhdGE6UHEoMTYpLGRlc2NyaXB0aW9uOiJBTUQgUnl6ZW4gOSAtIDE2IGNvcmVzIn0se2lkOiJuZXR3b3JrIix0aXRsZToiTmV0d29yayBJL08iLHZhbHVlOjI0NSx1bml0OiJNQi9zIix0eXBlOiJ0cmVuZCIsaWNvbjoibHVjaWRlOm5ldHdvcmsiLHRyZW5kRGF0YTpbMjAwLDIyMCwyMzUsMjQwLDIzOCwyNDVdLGRlc2NyaXB0aW9uOiJ0aHJvdWdocHV0In0se2lkOiJjcHUtY29yZXMtMzIiLHRpdGxlOiJTZXJ2ZXIgQ1BVICgzMi1jb3JlKSIsdmFsdWU6MCx0eXBlOiJjcHVDb3JlcyIsaWNvbjoibHVjaWRlOnNlcnZlciIsY29sdW1uU3BhbjozLGNvcmVzRGF0YTpQcSgzMiksZGVzY3JpcHRpb246IkFNRCBFUFlDIC0gMzIgY29yZXMifSx7aWQ6ImRpc2siLHRpdGxlOiJEaXNrIFVzYWdlIix2YWx1ZTo0Mix0eXBlOiJwZXJjZW50YWdlIixpY29uOiJsdWNpZGU6aGFyZC1kcml2ZSIsZGVzY3JpcHRpb246IjQyMCBHQiBvZiAxIFRCIn1dLFt7bmFtZToiUmFuZG9taXplIixpY29uTmFtZToibHVjaWRlOnNodWZmbGUiLGFjdGlvbjphc3luYygpPT57bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NwdS1jb3Jlcy1ncmlkIik7aWYoIXQpcmV0dXJuO2xldCBlPXQudGlsZXMubWFwKGE9PmEudHlwZT09PSJjcHVDb3JlcyImJmEuY29yZXNEYXRhP3suLi5hLGNvcmVzRGF0YTphLmNvcmVzRGF0YS5tYXAoaT0+KHsuLi5pLHVzYWdlOk1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDApfSkpfTphKTt0LnRpbGVzPWV9fV0sMjUwLDE2LCI1LiBJbnRlcmFjdGl2ZSBGZWF0dXJlcyIsIlRpbGVzIHdpdGggYWN0aW9ucyBhbmQgcmVhbC10aW1lIHVwZGF0ZXMiLFt7aWQ6ImxpdmUtY3B1Iix0aXRsZToiTGl2ZSBDUFUiLHZhbHVlOjQ1LHVuaXQ6IiUiLHR5cGU6ImdhdWdlIixpY29uOiJsdWNpZGU6Y3B1IixnYXVnZU9wdGlvbnM6e21pbjowLG1heDoxMDAsdGhyZXNob2xkczpbe3ZhbHVlOjAsY29sb3I6ImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkifSx7dmFsdWU6NjAsY29sb3I6ImhzbCg0NS40IDkzLjQlIDQ3LjUlKSJ9LHt2YWx1ZTo4MCxjb2xvcjoiaHNsKDAgODQuMiUgNjAuMiUpIn1dfX0se2lkOiJsaXZlLXJlcXVlc3RzIix0aXRsZToiUmVxdWVzdHMvc2VjIix2YWx1ZTo4OTIsdHlwZToidHJlbmQiLGljb246Imx1Y2lkZTphY3Rpdml0eSIsdHJlbmREYXRhOls4NTAsODYwLDg3MCw4ODAsODg1LDg5MCw4OTJdfSx7aWQ6ImxpdmUtbWVtb3J5Iix0aXRsZToiTWVtb3J5IFVzYWdlIix2YWx1ZTo2Mix0eXBlOiJwZXJjZW50YWdlIixpY29uOiJsdWNpZGU6ZGF0YWJhc2UifSx7aWQ6ImNvdW50ZXIiLHRpdGxlOiJFdmVudCBDb3VudGVyIix2YWx1ZTowLHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOnphcCIsYWN0aW9uczpbe25hbWU6IkluY3JlbWVudCIsaWNvbk5hbWU6Imx1Y2lkZTpwbHVzIixhY3Rpb246YXN5bmMoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7aWYoIXQpcmV0dXJuO2xldCBlPXQudGlsZXMuZmluZChhPT5hLmlkPT09ImNvdW50ZXIiKTtlLnZhbHVlPXR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9lLnZhbHVlKzE6MSx0LnRpbGVzPVsuLi50LnRpbGVzXX19LHtuYW1lOiJSZXNldCIsaWNvbk5hbWU6Imx1Y2lkZTpyb3RhdGUtY2N3IixhY3Rpb246YXN5bmMoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7aWYoIXQpcmV0dXJuO2xldCBlPXQudGlsZXMuZmluZChhPT5hLmlkPT09ImNvdW50ZXIiKTtlLnZhbHVlPTAsdC50aWxlcz1bLi4udC50aWxlc119fV19XSxbe25hbWU6IlN0YXJ0IExpdmUgVXBkYXRlcyIsaWNvbk5hbWU6Imx1Y2lkZTpwbGF5IixhY3Rpb246YXN5bmMgZnVuY3Rpb24oKXt3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsPyhjbGVhckludGVydmFsKHdpbmRvdy5saXZlVXBkYXRlSW50ZXJ2YWwpLHdpbmRvdy5saXZlVXBkYXRlSW50ZXJ2YWw9bnVsbCx0aGlzLm5hbWU9IlN0YXJ0IExpdmUgVXBkYXRlcyIsdGhpcy5pY29uTmFtZT0ibHVjaWRlOnBsYXkiKTood2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7aWYodCl7bGV0IGU9Wy4uLnQudGlsZXNdLGE9ZS5maW5kKG49Pm4uaWQ9PT0ibGl2ZS1jcHUiKTthLnZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMTAwLGEudmFsdWUrKE1hdGgucmFuZG9tKCkqMjAtMTApKSk7bGV0IGk9ZS5maW5kKG49Pm4uaWQ9PT0ibGl2ZS1yZXF1ZXN0cyIpLHI9aS52YWx1ZStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqNTAtMjUpO2kudmFsdWU9TWF0aC5tYXgoODAwLHIpLGkudHJlbmREYXRhPVsuLi5pLnRyZW5kRGF0YS5zbGljZSgxKSxpLnZhbHVlXTtsZXQgcz1lLmZpbmQobj0+bi5pZD09PSJsaXZlLW1lbW9yeSIpO3MudmFsdWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAscy52YWx1ZSsoTWF0aC5yYW5kb20oKSoxMC01KSkpLHQudGlsZXM9ZX19LDFlMyksdGhpcy5uYW1lPSJTdG9wIExpdmUgVXBkYXRlcyIsdGhpcy5pY29uTmFtZT0ibHVjaWRlOnBhdXNlIil9fV0sMjUwLDE2LCI2LiBDb2RlIEV4YW1wbGUiLCJIb3cgdG8gaW1wbGVtZW50IGEgc3RhdHMgZ3JpZCB3aXRoIFR5cGVTY3JpcHQiLGBjb25zdCB0aWxlczogSVN0YXRzVGlsZVtdID0gWwogIHsKICAgIGlkOiAncmV2ZW51ZScsCiAgICB0aXRsZTogJ1RvdGFsIFJldmVudWUnLAogICAgdmFsdWU6IDEyNTQyMCwKICAgIHVuaXQ6ICckJywKICAgIHR5cGU6ICdudW1iZXInLAogICAgaWNvbjogJ2x1Y2lkZTpkb2xsYXItc2lnbicsCiAgICBkZXNjcmlwdGlvbjogJysxMi41JSBmcm9tIGxhc3QgbW9udGgnLAogICAgYWN0aW9uczogWwogICAgICB7CiAgICAgICAgbmFtZTogJ1ZpZXcgRGV0YWlscycsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6dHJlbmRpbmctdXAnLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coJ1ZpZXcgcmV2ZW51ZSBkZXRhaWxzJyk7CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICBpZDogJ2NwdScsCiAgICB0aXRsZTogJ0NQVSBVc2FnZScsCiAgICB2YWx1ZTogNzMsCiAgICB1bml0OiAnJScsCiAgICB0eXBlOiAnZ2F1Z2UnLAogICAgaWNvbjogJ2x1Y2lkZTpjcHUnLAogICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgIG1pbjogMCwKICAgICAgbWF4OiAxMDAsCiAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogJ2hzbCgxNDIuMSA3Ni4yJSAzNi4zJSknIH0sCiAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAnaHNsKDQ1LjQgOTMuNCUgNDcuNSUpJyB9LAogICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogJ2hzbCgwIDg0LjIlIDYwLjIlKScgfQogICAgICBdCiAgICB9CiAgfQpdOwoKLy8gUmVuZGVyIHRoZSBzdGF0cyBncmlkCmh0bWxcYAogIDxkZWVzLXN0YXRzZ3JpZAogICAgLnRpbGVzPVwke3RpbGVzfQogICAgLm1pblRpbGVXaWR0aD1cJHsyNTB9CiAgICAuZ2FwPVwkezE2fQogICAgLmdyaWRBY3Rpb25zPVwke1sKICAgICAgewogICAgICAgIG5hbWU6ICdSZWZyZXNoJywKICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpyZWZyZXNoLWN3JywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCdSZWZyZXNoJykKICAgICAgfQogICAgXX0KICA+PC9kZWVzLXN0YXRzZ3JpZD4KXGA7YCwiNy4gRGlzayAmIFN0b3JhZ2UgVGlsZXMiLCJQYXJ0aXRpb24gYW5kIHBoeXNpY2FsIGRpc2sgdmlzdWFsaXphdGlvbiB0aWxlcyIsW3tpZDoicm9vdC1wYXJ0aXRpb24iLHRpdGxlOiJSb290IFBhcnRpdGlvbiIsdmFsdWU6MCx0eXBlOiJwYXJ0aXRpb24iLGljb246Imx1Y2lkZTpmb2xkZXItcm9vdCIscGFydGl0aW9uRGF0YTp7dXNlZDo2OTgzNDE0MjUxNTIsdG90YWw6MTA3Mzc0MTgyNGUzLGZpbGVzeXN0ZW06ImV4dDQiLG1vdW50UG9pbnQ6Ii8ifX0se2lkOiJob21lLXBhcnRpdGlvbiIsdGl0bGU6IkhvbWUgUGFydGl0aW9uIix2YWx1ZTowLHR5cGU6InBhcnRpdGlvbiIsaWNvbjoibHVjaWRlOmhvbWUiLHBhcnRpdGlvbkRhdGE6e3VzZWQ6MjE0NzQ4MzY0ODAwLHRvdGFsOjUzNjg3MDkxMmUzLGZpbGVzeXN0ZW06ImV4dDQiLG1vdW50UG9pbnQ6Ii9ob21lIn19LHtpZDoiZGF0YS1wYXJ0aXRpb24iLHRpdGxlOiJEYXRhIFBhcnRpdGlvbiIsdmFsdWU6MCx0eXBlOiJwYXJ0aXRpb24iLGljb246Imx1Y2lkZTpkYXRhYmFzZSIscGFydGl0aW9uRGF0YTp7dXNlZDoxOTMyNzM1MjgzMjAwLHRvdGFsOjIxNDc0ODM2NDhlMyxmaWxlc3lzdGVtOiJ4ZnMiLG1vdW50UG9pbnQ6Ii9kYXRhIn19LHtpZDoibnZtZS1zc2QiLHRpdGxlOiJQcmltYXJ5IE5WTWUiLHZhbHVlOjAsdHlwZToiZGlzayIsaWNvbjoibHVjaWRlOmhhcmQtZHJpdmUiLGNvbHVtblNwYW46MixkaXNrRGF0YTp7Y2FwYWNpdHk6MmUxMixtb2RlbDoiU2Ftc3VuZyA5OTAgUHJvIix0eXBlOiJudm1lIixpb3BzOntyZWFkOjc0NTAsd3JpdGU6NjkwMH0saGVhbHRoOjk4fX0se2lkOiJzYXRhLXNzZCIsdGl0bGU6IlNlY29uZGFyeSBTU0QiLHZhbHVlOjAsdHlwZToiZGlzayIsaWNvbjoibHVjaWRlOmhhcmQtZHJpdmUiLGRpc2tEYXRhOntjYXBhY2l0eToxZTEyLG1vZGVsOiJDcnVjaWFsIE1YNTAwIix0eXBlOiJzc2QiLGlvcHM6e3JlYWQ6NTYwLHdyaXRlOjUxMH0saGVhbHRoOjg1fX0se2lkOiJoZGQtc3RvcmFnZSIsdGl0bGU6IkJhY2t1cCBIREQiLHZhbHVlOjAsdHlwZToiZGlzayIsaWNvbjoibHVjaWRlOmFyY2hpdmUiLGRpc2tEYXRhOntjYXBhY2l0eTo4ZTEyLG1vZGVsOiJTZWFnYXRlIElyb25Xb2xmIix0eXBlOiJoZGQiLGlvcHM6e3JlYWQ6MjEwLHdyaXRlOjE5NX0saGVhbHRoOjQyfX1dLDI4MCwxNil9KTt2YXIgVzAsRGEsWGUsXzE9YigoKT0+e3VlKCk7THQoKTtXMD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LERhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxYZT0oKCk9PntsZXQgdD14ZSxlLGE9W10saT1bXSxyLHM9W10sbj1bXSxvLGQ9W10sYz1bXSxwLGw9W10sZj1bXSxnLHk9W10sdj1bXSxtLHg9W10sTT1bXSxTLEY9W10sXz1bXTtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0e3N0YXRpY3tsZXQgTj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZSh0W1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtlPVtJKHt0eXBlOlN0cmluZ30pXSxyPVtJKHt0eXBlOlN0cmluZ30pXSxvPVtJKHt0eXBlOlN0cmluZ30pXSxwPVtJKHt0eXBlOlN0cmluZ30pXSxnPVtJKHt0eXBlOkJvb2xlYW59KV0sbT1bSSh7dHlwZTpCb29sZWFufSldLFM9W0koe3R5cGU6U3RyaW5nfSldLFcwKHRoaXMsbnVsbCxlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGF5b3V0TW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TD0+ImxheW91dE1vZGUiaW4gTCxnZXQ6TD0+TC5sYXlvdXRNb2RlLHNldDooTCxBKT0+e0wubGF5b3V0TW9kZT1BfX0sbWV0YWRhdGE6Tn0sYSxpKSxXMCh0aGlzLG51bGwscix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxhYmVsUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkw9PiJsYWJlbFBvc2l0aW9uImluIEwsZ2V0Okw9PkwubGFiZWxQb3NpdGlvbixzZXQ6KEwsQSk9PntMLmxhYmVsUG9zaXRpb249QX19LG1ldGFkYXRhOk59LHMsbiksVzAodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJrZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkw9PiJrZXkiaW4gTCxnZXQ6TD0+TC5rZXksc2V0OihMLEEpPT57TC5rZXk9QX19LG1ldGFkYXRhOk59LGQsYyksVzAodGhpcyxudWxsLHAse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TD0+ImxhYmVsImluIEwsZ2V0Okw9PkwubGFiZWwsc2V0OihMLEEpPT57TC5sYWJlbD1BfX0sbWV0YWRhdGE6Tn0sbCxmKSxXMCh0aGlzLG51bGwsZyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlcXVpcmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpMPT4icmVxdWlyZWQiaW4gTCxnZXQ6TD0+TC5yZXF1aXJlZCxzZXQ6KEwsQSk9PntMLnJlcXVpcmVkPUF9fSxtZXRhZGF0YTpOfSx5LHYpLFcwKHRoaXMsbnVsbCxtLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlzYWJsZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkw9PiJkaXNhYmxlZCJpbiBMLGdldDpMPT5MLmRpc2FibGVkLHNldDooTCxBKT0+e0wuZGlzYWJsZWQ9QX19LG1ldGFkYXRhOk59LHgsTSksVzAodGhpcyxudWxsLFMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkZXNjcmlwdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TD0+ImRlc2NyaXB0aW9uImluIEwsZ2V0Okw9PkwuZGVzY3JpcHRpb24sc2V0OihMLEEpPT57TC5kZXNjcmlwdGlvbj1BfX0sbWV0YWRhdGE6Tn0sRixfKSxOJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk59KX0jZT1EYSh0aGlzLGEsImF1dG8iKTtnZXQgbGF5b3V0TW9kZSgpe3JldHVybiB0aGlzLiNlfXNldCBsYXlvdXRNb2RlKE4pe3RoaXMuI2U9Tn0jdD0oRGEodGhpcyxpKSxEYSh0aGlzLHMsInRvcCIpKTtnZXQgbGFiZWxQb3NpdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBsYWJlbFBvc2l0aW9uKE4pe3RoaXMuI3Q9Tn0jYT0oRGEodGhpcyxuKSxEYSh0aGlzLGQsdm9pZCAwKSk7Z2V0IGtleSgpe3JldHVybiB0aGlzLiNhfXNldCBrZXkoTil7dGhpcy4jYT1OfSNpPShEYSh0aGlzLGMpLERhKHRoaXMsbCx2b2lkIDApKTtnZXQgbGFiZWwoKXtyZXR1cm4gdGhpcy4jaX1zZXQgbGFiZWwoTil7dGhpcy4jaT1OfSNyPShEYSh0aGlzLGYpLERhKHRoaXMseSwhMSkpO2dldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLiNyfXNldCByZXF1aXJlZChOKXt0aGlzLiNyPU59I3M9KERhKHRoaXMsdiksRGEodGhpcyx4LCExKSk7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGRpc2FibGVkKE4pe3RoaXMuI3M9Tn0jbj0oRGEodGhpcyxNKSxEYSh0aGlzLEYsdm9pZCAwKSk7Z2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuI259c2V0IGRlc2NyaXB0aW9uKE4pe3RoaXMuI249Tn1zdGF0aWMgZ2V0IGJhc2VTdHlsZXMoKXtyZXR1cm5bUWAKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICAtLWRlZXMtaW5wdXQtc3BhY2luZy11bml0OiA4cHg7CiAgICAgICAgICAtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwOiB2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCk7IC8qIDhweCAqLwogICAgICAgIH0KCiAgICAgICAgLyogRGVmYXVsdCBibG9jayBkaXNwbGF5IHdpdGggbm8gbWFyZ2lucyAtIHNwYWNpbmcgaXMgY29udGFpbmVyLWRyaXZlbiAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIH0KCiAgICAgICAgLyogSG9yaXpvbnRhbCBsYXlvdXQgbW9kZSAtIGFjdGl2YXRlZCBieSBhdHRyaWJ1dGUgKi8KICAgICAgICA6aG9zdChbbGF5b3V0LW1vZGU9Imhvcml6b250YWwiXSkgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLyogTGFiZWwgcG9zaXRpb24gdmFyaWF0aW9ucyAqLwogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmcjsKICAgICAgICAgIGdhcDogdmFyKC0tZGVlcy1pbnB1dC1sYWJlbC1nYXApOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InRvcCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibm9uZSJdKSBkZWVzLWxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICBgXX1jaGFuZ2VTdWJqZWN0PShEYSh0aGlzLF8pLG5ldyB6dC5zbWFydHJ4LnJ4anMuU3ViamVjdCk7YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuZGV0ZWN0TGF5b3V0TW9kZSgpfWRldGVjdExheW91dE1vZGUoKXtpZih0aGlzLmxheW91dE1vZGUhPT0iYXV0byIpe3RoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsdGhpcy5sYXlvdXRNb2RlKTtyZXR1cm59bGV0IE49dGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTtOJiZOLmhhc0F0dHJpYnV0ZSgiaG9yaXpvbnRhbC1sYXlvdXQiKT90aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCJob3Jpem9udGFsIik6dGhpcy5zZXRBdHRyaWJ1dGUoImxheW91dC1tb2RlIiwidmVydGljYWwiKX11cGRhdGVkKE4pe3N1cGVyLnVwZGF0ZWQoTiksTi5oYXMoImxheW91dE1vZGUiKSYmdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCksTi5oYXMoImxhYmVsUG9zaXRpb24iKSYmdGhpcy5zZXRBdHRyaWJ1dGUoImxhYmVsLXBvc2l0aW9uIix0aGlzLmxhYmVsUG9zaXRpb24pfWFzeW5jIGZyZWV6ZSgpe3RoaXMuZGlzYWJsZWQ9ITB9YXN5bmMgdW5mcmVlemUoKXt0aGlzLmRpc2FibGVkPSExfX19KSgpfSk7dmFyIGo5dCxVOXQ9YigoKT0+e3VlKCk7eDEoKTtnMigpO3BvKCk7ajl0PSgpPT53YAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtY2hlY2tib3giKSxhPXQucXVlcnlTZWxlY3RvcigiI3NlbGVjdC1hbGwtYnRuIiksaT10LnF1ZXJ5U2VsZWN0b3IoIiNjbGVhci1hbGwtYnRuIik7YSYmaSYmKGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ZS5mb3JFYWNoKHI9Pnshci5kaXNhYmxlZCYmci5rZXk/LnN0YXJ0c1dpdGgoImZlYXR1cmUiKSYmKHIudmFsdWU9ITApfSl9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuZm9yRWFjaChyPT57IXIuZGlzYWJsZWQmJnIua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikmJihyLnZhbHVlPSExKX0pfSkpfX0+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoZWNrYm94LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1jaGVja2JveGVzIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXRleHQgewogICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5mb3JtLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbGlzdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIENoZWNrYm94ZXMifSAuc3VidGl0bGU9JHsiU2ltcGxlIGNoZWNrYm94IGV4YW1wbGVzIHdpdGggdmFyaW91cyBsYWJlbHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkkgYWdyZWUgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAua2V5PSR7InRlcm1zIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiU3Vic2NyaWJlIHRvIG5ld3NsZXR0ZXIifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5rZXk9JHsibmV3c2xldHRlciJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBub3RpZmljYXRpb25zIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBlbWFpbCB1cGRhdGVzIGFib3V0IHlvdXIgYWNjb3VudCJ9CiAgICAgICAgICAgIC5rZXk9JHsibm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2hlY2tib3ggU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBjaGVja2JveCBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWZhdWx0IHN0YXRlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJDaGVja2VkIHN0YXRlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCB1bmNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBjaGVja2VkIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgY2hlY2tib3gifSAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsicmVxdWlyZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1jaGVja2JveGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEEifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkEifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQiJ9IAogICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBDIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25DIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEQifSAKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgU2VsZWN0aW9uIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ29tbW9uIHVzZSBjYXNlIGZvciBmZWF0dXJlIHRvZ2dsZXMgd2l0aCBiYXRjaCBvcGVyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0ic2VsZWN0LWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+U2VsZWN0IEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9ImNsZWFyLWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+Q2xlYXIgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWxpc3QiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIFN1cHBvcnQifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUxIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBOb3RpZmljYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMiJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiVHdvLUZhY3RvciBBdXRoZW50aWNhdGlvbiJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkFQSSBBY2Nlc3MifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU0In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJBZHZhbmNlZCBBbmFseXRpY3MifSAKICAgICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU1In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJpdmFjeSBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgaW4gYSB0eXBpY2FsIGZvcm0gY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+CiAgICAgICAgICA8aDQgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlByaXZhY3kgUHJlZmVyZW5jZXM8L2g0PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJTaGFyZSBhbmFseXRpY3MgZGF0YSJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIZWxwIHVzIGltcHJvdmUgYnkgc2hhcmluZyBhbm9ueW1vdXMgdXNhZ2UgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiUGVyc29uYWxpemVkIHJlY29tbWVuZGF0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgc3VnZ2VzdGlvbnMgYmFzZWQgb24geW91ciBhY3Rpdml0eSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiTWFya2V0aW5nIGNvbW11bmljYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHJvbW90aW9uYWwgZW1haWxzIGFuZCBzcGVjaWFsIG9mZmVycyJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiVGhpcmQtcGFydHkgaW50ZWdyYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFsbG93IGFwcHJvdmVkIHBhcnRuZXJzIHRvIGFjY2VzcyB5b3VyIGRhdGEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNsaWNrIGNoZWNrYm94ZXMgdG8gc2VlIHZhbHVlIGNoYW5nZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkZlYXR1cmUgdG9nZ2xlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0ke3Q9PntsZXQgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY2hlY2tib3gtb3V0cHV0Iik7aWYoZSYmdC5kZXRhaWwpe2xldCBhPXQuZGV0YWlsLmdldFZhbHVlKCk7ZS50ZXh0Q29udGVudD1gRmVhdHVyZSBpcyAke2E/ImVuYWJsZWQiOiJkaXNhYmxlZCJ9YH19fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWJ1ZyBtb2RlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0ke3Q9PntsZXQgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZGVidWctb3V0cHV0Iik7aWYoZSYmdC5kZXRhaWwpe2xldCBhPXQuZGV0YWlsLmdldFZhbHVlKCk7ZS50ZXh0Q29udGVudD1gRGVidWcgbW9kZTogJHthPyJPTiI6Ik9GRiJ9YH19fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImNoZWNrYm94LW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5GZWF0dXJlIGlzIGRpc2FibGVkPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJkZWJ1Zy1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRlYnVnIG1vZGU6IE9GRjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmB9KTt2YXIgSXEseDgsVHgsTHg9YigoKT0+e3VlKCk7XzEoKTtVOXQoKTtwYSgpO1ZlKCk7SXE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx4OD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sVHg9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LWNoZWNrYm94IildLGUsYT1bXSxpLHI9WGUscyxuPVtdLG89W10sZCxjPVtdLHA9W107dmFyIGw9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6Qm9vbGVhbn0pXSxkPVtJKHt0eXBlOkJvb2xlYW59KV0sSXEodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InZhbHVlImluIGcsZ2V0Omc9PmcudmFsdWUsc2V0OihnLHkpPT57Zy52YWx1ZT15fX0sbWV0YWRhdGE6Zn0sbixvKSxJcSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluZGV0ZXJtaW5hdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJpbmRldGVybWluYXRlImluIGcsZ2V0Omc9PmcuaW5kZXRlcm1pbmF0ZSxzZXQ6KGcseSk9PntnLmluZGV0ZXJtaW5hdGU9eX19LG1ldGFkYXRhOmZ9LGMscCksSXEobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1zdGF0aWMgZGVtbz1qOXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPXg4KHRoaXMsbiwhMSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKGYpe3RoaXMuI2U9Zn0jdD0oeDgodGhpcyxvKSx4OCh0aGlzLGMsITEpKTtnZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLiN0fXNldCBpbmRldGVybWluYXRlKGYpe3RoaXMuI3Q9Zn1jb25zdHJ1Y3Rvcigpe3N1cGVyKCkseDgodGhpcyxwKSx0aGlzLmxhYmVsUG9zaXRpb249InJpZ2h0In1zdGF0aWMgc3R5bGVzPVtDZSwuLi5YZS5iYXNlU3R5bGVzLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICAgKiB7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgICB3aWR0aDogMThweDsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3ggewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LnNlbGVjdGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94OmZvY3VzLXZpc2libGUgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBDaGVja21hcmsgdXNpbmcgTHVjaWRlIGljb24gc3R5bGUgKi8KICAgICAgICAuY2hlY2tib3ggLmNoZWNrbWFyayB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5zZWxlY3RlZCAuY2hlY2ttYXJrIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3ggLmNoZWNrbWFyayBzdmcgewogICAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgICBzdHJva2U6IHdoaXRlOwogICAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICAgIH0KCiAgICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgICAubWFpbmNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBMYWJlbCAqLwogICAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDJweDsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC5jaGVja2JveC1sYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lci5kaXNhYmxlZDpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIERlc2NyaXB0aW9uICovCiAgICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSIgQGNsaWNrPSIke3RoaXMudG9nZ2xlU2VsZWN0ZWR9Ij4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCAke3RoaXMudmFsdWU/InNlbGVjdGVkIjoiIn0gJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IiAKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZD8iLTEiOiIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZT93YAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCA2TDkgMTdMNCAxMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBgOnRoaXMuaW5kZXRlcm1pbmF0ZT93YAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPgogICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01IDEySDE5IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGA6d2BgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWw/d2A8ZGl2IGNsYXNzPSJjaGVja2JveC1sYWJlbCI+JHt0aGlzLmxhYmVsfTwvZGl2PmA6IiJ9CiAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbj93YDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyB0b2dnbGVTZWxlY3RlZCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnZhbHVlPSF0aGlzLnZhbHVlLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm5ld1ZhbHVlIix7ZGV0YWlsOnRoaXMudmFsdWUsYnViYmxlczohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShmKXt0aGlzLnZhbHVlPWZ9Zm9jdXMoKXtsZXQgZj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoZWNrYm94Iik7ZiYmZi5mb2N1cygpfWhhbmRsZUtleWRvd24oZil7KGYua2V5PT09IiAifHxmLmtleT09PSJFbnRlciIpJiYoZi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlU2VsZWN0ZWQoKSl9c3RhdGlje3g4KGksYSl9fTtyZXR1cm4gbD1pfSkoKX0pO3ZhciBZMD17fTtXZShZMCx7YnJpZ2h0OigpPT5HMCxkYXJrOigpPT5iaX0pO3ZhciBiaSxHMCx2aT1iKCgpPT57Ymk9e2JsdWU6IiMwMDUwYjkiLGJsdWVBY3RpdmU6IiMwMDY5ZjIiLGJsdWVNdXRlZDoiIzAxMjQ1MiIsdGV4dDoiI2ZmZmZmZiJ9LEcwPXtibHVlOiIjMDA1MGI5IixibHVlQWN0aXZlOiIjMDA2OWYyIixibHVlTXV0ZWQ6IiMwMDY5ZjIiLHRleHQ6IiMzMzMzMzMifX0pO3ZhciBXOXQsRzl0PWIoKCk9Pnt1ZSgpO1owKCk7Vzl0PSgpPT53YAogIDxzdHlsZT4KICAgICR7UWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjhmOWZhIiwiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMzMzMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gaDMgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjZmZmIil9OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHAgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzY2NiIsIiM5OTkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5IZWFkZXIgQnV0dG9uczwvaDM+CiAgICAgIDxwPk1vZGFscyBjYW4gaGF2ZSBvcHRpb25hbCBoZWFkZXIgYnV0dG9ucyBmb3IgaGVscCBhbmQgY2xvc2luZy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJXaXRoIEhlbHAgQnV0dG9uIixzaG93SGVscEJ1dHRvbjohMCxvbkhlbHA6YXN5bmMoKT0+e2xldCB0PWF3YWl0IGwxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkhlbHAiLHdpZHRoOiJzbWFsbCIsc2hvd0Nsb3NlQnV0dG9uOiEwLHNob3dIZWxwQnV0dG9uOiExLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICAgICAgPHA+VGhpcyBpcyB0aGUgaGVscCBjb250ZW50IGZvciB0aGUgbW9kYWwuPC9wPgogICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHByb3ZpZGUgY29udGV4dC1zcGVjaWZpYyBoZWxwIGhlcmUuPC9wPgogICAgICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkdvdCBpdCIsYWN0aW9uOmFzeW5jIGU9PmUuZGVzdHJveSgpfV19KX0sY29udGVudDp3YAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgaGVscCBidXR0b24gaW4gdGhlIGhlYWRlci4gQ2xpY2sgaXQgdG8gc2VlIGhlbHAgY29udGVudC48L3A+CiAgICAgICAgICAgICAgPHA+VGhlIGNsb3NlIGJ1dHRvbiBpcyBhbHNvIHZpc2libGUgYnkgZGVmYXVsdC48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJPSyIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PldpdGggSGVscCBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6Ik5vIENsb3NlIEJ1dHRvbiIsc2hvd0Nsb3NlQnV0dG9uOiExLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBubyBjbG9zZSBidXR0b24gaW4gdGhlIGhlYWRlci48L3A+CiAgICAgICAgICAgICAgPHA+WW91IG11c3QgdXNlIHRoZSBhY3Rpb24gYnV0dG9ucyBvciBjbGljayBvdXRzaWRlIHRvIGNsb3NlIGl0LjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNsb3NlIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+Tm8gQ2xvc2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJCb3RoIEJ1dHRvbnMiLHNob3dIZWxwQnV0dG9uOiEwLHNob3dDbG9zZUJ1dHRvbjohMCxvbkhlbHA6KCk9PmFsZXJ0KCJIZWxwIGNsaWNrZWQhIiksY29udGVudDp3YAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGJvdGggaGVscCBhbmQgY2xvc2UgYnV0dG9ucy48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJEb25lIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+Qm90aCBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJDbGVhbiBIZWFkZXIiLHNob3dDbG9zZUJ1dHRvbjohMSxzaG93SGVscEJ1dHRvbjohMSxjb250ZW50OndgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYSBjbGVhbiBoZWFkZXIgd2l0aCBubyBidXR0b25zLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNsb3NlIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+Q2xlYW4gSGVhZGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPk1vZGFsIFdpZHRoIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IHdpZHRoczogc21hbGwsIG1lZGl1bSwgbGFyZ2UsIGZ1bGxzY3JlZW4sIG9yIGN1c3RvbSBwaXhlbCB2YWx1ZXMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57bDEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiU21hbGwgTW9kYWwiLHdpZHRoOiJzbWFsbCIsY29udGVudDp3YAogICAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBzbWFsbCBtb2RhbCB3aXRoIGEgd2lkdGggb2YgMzgwcHguIFBlcmZlY3QgZm9yIHNpbXBsZSBjb25maXJtYXRpb25zIG9yIGJyaWVmIG1lc3NhZ2VzLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfSx7bmFtZToiT0siLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5TbWFsbCBNb2RhbDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57bDEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiTWVkaXVtIE1vZGFsIChEZWZhdWx0KSIsd2lkdGg6Im1lZGl1bSIsY29udGVudDp3YAogICAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJVc2VybmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRW1haWwifSAuaW5wdXRUeXBlPSR7ImVtYWlsIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQYXNzd29yZCJ9IC5pbnB1dFR5cGU9JHsicGFzc3dvcmQifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfSx7bmFtZToiU2lnbiBVcCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19Pk1lZGl1bSBNb2RhbDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57bDEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiTGFyZ2UgTW9kYWwiLHdpZHRoOiJsYXJnZSIsY29udGVudDp3YAogICAgICAgICAgICAgIDxoND5XaWRlIENvbnRlbnQgQXJlYTwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBsYXJnZSBtb2RhbCBpcyA4MDBweCB3aWRlIGFuZCBwZXJmZWN0IGZvciBkaXNwbGF5aW5nIG1vcmUgY29tcGxleCBjb250ZW50IGxpa2UgZm9ybXMgd2l0aCBtdWx0aXBsZSBjb2x1bW5zLCB0YWJsZXMsIG9yIGRldGFpbGVkIGluZm9ybWF0aW9uLjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMTZweDsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiTGFzdCBOYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJDb21wYW55In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQb3NpdGlvbiJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9LHtuYW1lOiJTYXZlIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+TGFyZ2UgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkZ1bGxzY3JlZW4gRWRpdG9yIix3aWR0aDoiZnVsbHNjcmVlbiIsc2hvd0hlbHBCdXR0b246ITAsb25IZWxwOmFzeW5jKCk9PnthbGVydCgiSW4gYSByZWFsIGFwcCwgdGhpcyB3b3VsZCBzaG93IGVkaXRvciBkb2N1bWVudGF0aW9uIil9LGNvbnRlbnQ6d2AKICAgICAgICAgICAgICA8aDQ+RnVsbHNjcmVlbiBFeHBlcmllbmNlIHdpdGggSGVhZGVyIENvbnRyb2xzPC9oND4KICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIHRha2VzIHVwIGFsbW9zdCB0aGUgZW50aXJlIHZpZXdwb3J0IHdpdGggYSAyMHB4IG1hcmdpbiBvbiBhbGwgc2lkZXMuIFRoZSBoZWFkZXIgYnV0dG9ucyBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBmdWxsc2NyZWVuIG1vZGUuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjb250ZW50IGFyZWEgY2FuIGJlIGFzIHRhbGwgYXMgbmVlZGVkIGFuZCB3aWxsIHNjcm9sbCBpZiBuZWNlc3NhcnkuPC9wPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjBmMGYwIiwiIzJhMmEyYSIpfTsgYm9yZGVyLXJhZGl1czogOHB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAke2guYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX0iPkxhcmdlIGNvbnRlbnQgYXJlYTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IlNhdmUiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX0se25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PkZ1bGxzY3JlZW4gTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q3VzdG9tIFdpZHRoICYgQ29uc3RyYWludHM8L2gzPgogICAgICA8cD5Zb3UgY2FuIGFsc28gc2V0IGN1c3RvbSBwaXhlbCB3aWR0aHMgYW5kIG1pbi9tYXggY29uc3RyYWludHMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT57bDEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiQ3VzdG9tIFdpZHRoICg3MDBweCkiLHdpZHRoOjcwMCxjb250ZW50OndgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYSBjdXN0b20gd2lkdGggb2YgZXhhY3RseSA3MDAgcGl4ZWxzLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNsb3NlIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+Q3VzdG9tIDcwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJXaXRoIE1heCBXaWR0aCIsd2lkdGg6ImxhcmdlIixtYXhXaWR0aDo2MDAsY29udGVudDp3YAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaXMgc2V0IHRvICdsYXJnZScgYnV0IGNvbnN0cmFpbmVkIGJ5IGEgbWF4V2lkdGggb2YgNjAwcHguPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiR290IGl0IixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9XX0pfX0+TWF4IFdpZHRoIDYwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJXaXRoIE1pbiBXaWR0aCIsd2lkdGg6MzAwLG1pbldpZHRoOjQwMCxjb250ZW50OndgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCB3aWR0aCBpcyBzZXQgdG8gMzAwcHggYnV0IGhhcyBhIG1pbldpZHRoIG9mIDQwMHB4LCBzbyBpdCB3aWxsIGJlIDQwMHB4IHdpZGUuPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiT0siLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5NaW4gV2lkdGggNDAwcHg8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QnV0dG9uIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IGJ1dHRvbiBjb25maWd1cmF0aW9ucyB3aXRoIHByb3BlciBzcGFjaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6Ik11bHRpcGxlIEFjdGlvbnMiLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGRlbW9uc3RyYXRlcyBtdWx0aXBsZSBidXR0b25zIHdpdGggcHJvcGVyIHNwYWNpbmcgYmV0d2VlbiB0aGVtLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkRlbGV0ZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfSx7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgdD0+dC5kZXN0cm95KCl9LHtuYW1lOiJTYXZlIENoYW5nZXMiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5UaHJlZSBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJTaW5nbGUgQWN0aW9uIixjb250ZW50OndgCiAgICAgICAgICAgICAgPHA+U29tZXRpbWVzIHlvdSBqdXN0IG5lZWQgb25lIGJ1dHRvbi48L3A+CiAgICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJBY2tub3dsZWRnZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PlNpbmdsZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6Ik5vIEFjdGlvbnMiLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBubyBib3R0b20gYnV0dG9ucy4gVXNlIHRoZSBYIGJ1dHRvbiBvciBjbGljayBvdXRzaWRlIHRvIGNsb3NlLjwvcD4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgY29sb3I6ICR7aC5iZFRoZW1lKCIjNjY2IiwiIzk5OSIpfTsiPlRoaXMgaXMgdXNlZnVsIGZvciBpbmZvcm1hdGlvbmFsIG1vZGFscyB0aGF0IGRvbid0IHJlcXVpcmUgdXNlciBhY3Rpb24uPC9wPgogICAgICAgICAgICBgLG1lbnVPcHRpb25zOltdfSl9fT5ObyBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PntsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJMb25nIEJ1dHRvbiBMYWJlbHMiLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICA8cD5UZXN0aW5nIGJ1dHRvbiBsYXlvdXQgd2l0aCBsb25nZXIgbGFiZWxzLjwvcD4KICAgICAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkRpc2NhcmQgQWxsIENoYW5nZXMiLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX0se25hbWU6IlNhdmUgYW5kIENvbnRpbnVlIEVkaXRpbmciLGFjdGlvbjphc3luYyB0PT50LmRlc3Ryb3koKX1dfSl9fT5Mb25nIExhYmVsczwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5SZXNwb25zaXZlIEJlaGF2aW9yPC9oMz4KICAgICAgPHA+QWxsIG1vZGFscyBhdXRvbWF0aWNhbGx5IGJlY29tZSBmdWxsLXdpZHRoIG9uIG1vYmlsZSBkZXZpY2VzICg8IDc2OHB4IHZpZXdwb3J0IHdpZHRoKSBmb3IgYmV0dGVyIHVzYWJpbGl0eS48L3A+CiAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IlJlc3BvbnNpdmUgTW9kYWwiLHdpZHRoOiJsYXJnZSIsc2hvd0hlbHBCdXR0b246ITAsb25IZWxwOigpPT5jb25zb2xlLmxvZygiSGVscCByZXF1ZXN0ZWQgZm9yIHJlc3BvbnNpdmUgbW9kYWwiKSxjb250ZW50OndgCiAgICAgICAgICAgIDxwPlJlc2l6ZSB5b3VyIGJyb3dzZXIgd2luZG93IHRvIHNlZSBob3cgdGhpcyBtb2RhbCBhZGFwdHMuIE9uIG1vYmlsZSB2aWV3cG9ydHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSB0YWtlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIG1hcmdpbnMuPC9wPgogICAgICAgICAgICA8cD5UaGUgaGVhZGVyIGJ1dHRvbnMgcmVtYWluIGFjY2Vzc2libGUgYXQgYWxsIHZpZXdwb3J0IHNpemVzLjwvcD4KICAgICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDbG9zZSIsYWN0aW9uOmFzeW5jIHQ9PnQuZGVzdHJveSgpfV19KX19PlRlc3QgUmVzcG9uc2l2ZTwvZGVlcy1idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBVYSx3MSxsMSxaMD1iKCgpPT57dmkoKTtzMigpO21pKCk7cGEoKTtHOXQoKTt1ZSgpO0x0KCk7RHMoKTtFdCgpO1ZlKCk7VWE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx3MT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sbDE9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLW1vZGFsIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W10sTixMPVtdLEE9W10scSxDPVtdLHo9W10sRSxUPVtdLCQ9W10sVixSPVtdLFU9W10scmUsaj1bXSxtZT1bXSx3ZSxIPVtdLGNlPVtdO3ZhciBrZT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IFc9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSyh7fSldLGw9W0soe30pXSx5PVtJKHt0eXBlOlN0cmluZ30pXSx4PVtJKHt0eXBlOk51bWJlcn0pXSxGPVtJKHt0eXBlOk51bWJlcn0pXSxOPVtJKHt0eXBlOkJvb2xlYW59KV0scT1bSSh7dHlwZTpCb29sZWFufSldLEU9W0koe2F0dHJpYnV0ZTohMX0pXSxWPVtJKHt0eXBlOkJvb2xlYW59KV0scmU9W0koe3R5cGU6TnVtYmVyfSldLHdlPVtLKCldLFVhKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+ImhlYWRpbmciaW4gRCxnZXQ6RD0+RC5oZWFkaW5nLHNldDooRCxPKT0+e0QuaGVhZGluZz1PfX0sbWV0YWRhdGE6V30sbixvKSxVYSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRlbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJjb250ZW50ImluIEQsZ2V0OkQ9PkQuY29udGVudCxzZXQ6KEQsTyk9PntELmNvbnRlbnQ9T319LG1ldGFkYXRhOld9LGMscCksVWEodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtZW51T3B0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+Im1lbnVPcHRpb25zImluIEQsZ2V0OkQ9PkQubWVudU9wdGlvbnMsc2V0OihELE8pPT57RC5tZW51T3B0aW9ucz1PfX0sbWV0YWRhdGE6V30sZixnKSxVYSh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4id2lkdGgiaW4gRCxnZXQ6RD0+RC53aWR0aCxzZXQ6KEQsTyk9PntELndpZHRoPU99fSxtZXRhZGF0YTpXfSx2LG0pLFVhKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4V2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJtYXhXaWR0aCJpbiBELGdldDpEPT5ELm1heFdpZHRoLHNldDooRCxPKT0+e0QubWF4V2lkdGg9T319LG1ldGFkYXRhOld9LE0sUyksVWEodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtaW5XaWR0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+Im1pbldpZHRoImluIEQsZ2V0OkQ9PkQubWluV2lkdGgsc2V0OihELE8pPT57RC5taW5XaWR0aD1PfX0sbWV0YWRhdGE6V30sXyxrKSxVYSh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dDbG9zZUJ1dHRvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InNob3dDbG9zZUJ1dHRvbiJpbiBELGdldDpEPT5ELnNob3dDbG9zZUJ1dHRvbixzZXQ6KEQsTyk9PntELnNob3dDbG9zZUJ1dHRvbj1PfX0sbWV0YWRhdGE6V30sTCxBKSxVYSh0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dIZWxwQnV0dG9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4ic2hvd0hlbHBCdXR0b24iaW4gRCxnZXQ6RD0+RC5zaG93SGVscEJ1dHRvbixzZXQ6KEQsTyk9PntELnNob3dIZWxwQnV0dG9uPU99fSxtZXRhZGF0YTpXfSxDLHopLFVhKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib25IZWxwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4ib25IZWxwImluIEQsZ2V0OkQ9PkQub25IZWxwLHNldDooRCxPKT0+e0Qub25IZWxwPU99fSxtZXRhZGF0YTpXfSxULCQpLFVhKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9iaWxlRnVsbHNjcmVlbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+Im1vYmlsZUZ1bGxzY3JlZW4iaW4gRCxnZXQ6RD0+RC5tb2JpbGVGdWxsc2NyZWVuLHNldDooRCxPKT0+e0QubW9iaWxlRnVsbHNjcmVlbj1PfX0sbWV0YWRhdGE6V30sUixVKSxVYSh0aGlzLG51bGwscmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50UGFkZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+ImNvbnRlbnRQYWRkaW5nImluIEQsZ2V0OkQ9PkQuY29udGVudFBhZGRpbmcsc2V0OihELE8pPT57RC5jb250ZW50UGFkZGluZz1PfX0sbWV0YWRhdGE6V30saixtZSksVWEodGhpcyxudWxsLHdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9kYWxaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJtb2RhbFpJbmRleCJpbiBELGdldDpEPT5ELm1vZGFsWkluZGV4LHNldDooRCxPKT0+e0QubW9kYWxaSW5kZXg9T319LG1ldGFkYXRhOld9LEgsY2UpLFVhKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOld9LG51bGwsYSksa2U9aT1lLnZhbHVlLFcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6V30pfXN0YXRpYyBkZW1vPVc5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIk92ZXJsYXkiXTtzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhXKXtsZXQgRD1kb2N1bWVudC5ib2R5LE89bmV3IGtlO3JldHVybiBPLmhlYWRpbmc9Vy5oZWFkaW5nLE8uY29udGVudD1XLmNvbnRlbnQsTy5tZW51T3B0aW9ucz1XLm1lbnVPcHRpb25zLFcud2lkdGgmJihPLndpZHRoPVcud2lkdGgpLFcubWF4V2lkdGgmJihPLm1heFdpZHRoPVcubWF4V2lkdGgpLFcubWluV2lkdGgmJihPLm1pbldpZHRoPVcubWluV2lkdGgpLFcuc2hvd0Nsb3NlQnV0dG9uIT09dm9pZCAwJiYoTy5zaG93Q2xvc2VCdXR0b249Vy5zaG93Q2xvc2VCdXR0b24pLFcuc2hvd0hlbHBCdXR0b24hPT12b2lkIDAmJihPLnNob3dIZWxwQnV0dG9uPVcuc2hvd0hlbHBCdXR0b24pLFcub25IZWxwJiYoTy5vbkhlbHA9Vy5vbkhlbHApLFcubW9iaWxlRnVsbHNjcmVlbiE9PXZvaWQgMCYmKE8ubW9iaWxlRnVsbHNjcmVlbj1XLm1vYmlsZUZ1bGxzY3JlZW4pLFcuY29udGVudFBhZGRpbmchPT12b2lkIDAmJihPLmNvbnRlbnRQYWRkaW5nPVcuY29udGVudFBhZGRpbmcpLE8ud2luZG93TGF5ZXI9YXdhaXQgZ2kuY3JlYXRlQW5kU2hvdyh7Ymx1cjohMH0pLE8ud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9Pnthd2FpdCBPLmRlc3Ryb3koKX0pLEQuYXBwZW5kKE8ud2luZG93TGF5ZXIpLEQuYXBwZW5kKE8pLE8ubW9kYWxaSW5kZXg9aDEuZ2V0TmV4dFpJbmRleCgpLGgxLnJlZ2lzdGVyKE8sTy5tb2RhbFpJbmRleCksT30jZT13MSh0aGlzLG4sIiIpO2dldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGhlYWRpbmcoVyl7dGhpcy4jZT1XfSN0PSh3MSh0aGlzLG8pLHcxKHRoaXMsYyx2b2lkIDApKTtnZXQgY29udGVudCgpe3JldHVybiB0aGlzLiN0fXNldCBjb250ZW50KFcpe3RoaXMuI3Q9V30jYT0odzEodGhpcyxwKSx3MSh0aGlzLGYsW10pKTtnZXQgbWVudU9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWVudU9wdGlvbnMoVyl7dGhpcy4jYT1XfSNpPSh3MSh0aGlzLGcpLHcxKHRoaXMsdiwibWVkaXVtIikpO2dldCB3aWR0aCgpe3JldHVybiB0aGlzLiNpfXNldCB3aWR0aChXKXt0aGlzLiNpPVd9I3I9KHcxKHRoaXMsbSksdzEodGhpcyxNLHZvaWQgMCkpO2dldCBtYXhXaWR0aCgpe3JldHVybiB0aGlzLiNyfXNldCBtYXhXaWR0aChXKXt0aGlzLiNyPVd9I3M9KHcxKHRoaXMsUyksdzEodGhpcyxfLHZvaWQgMCkpO2dldCBtaW5XaWR0aCgpe3JldHVybiB0aGlzLiNzfXNldCBtaW5XaWR0aChXKXt0aGlzLiNzPVd9I249KHcxKHRoaXMsayksdzEodGhpcyxMLCEwKSk7Z2V0IHNob3dDbG9zZUJ1dHRvbigpe3JldHVybiB0aGlzLiNufXNldCBzaG93Q2xvc2VCdXR0b24oVyl7dGhpcy4jbj1XfSNvPSh3MSh0aGlzLEEpLHcxKHRoaXMsQywhMSkpO2dldCBzaG93SGVscEJ1dHRvbigpe3JldHVybiB0aGlzLiNvfXNldCBzaG93SGVscEJ1dHRvbihXKXt0aGlzLiNvPVd9I2w9KHcxKHRoaXMseiksdzEodGhpcyxULHZvaWQgMCkpO2dldCBvbkhlbHAoKXtyZXR1cm4gdGhpcy4jbH1zZXQgb25IZWxwKFcpe3RoaXMuI2w9V30jYz0odzEodGhpcywkKSx3MSh0aGlzLFIsITEpKTtnZXQgbW9iaWxlRnVsbHNjcmVlbigpe3JldHVybiB0aGlzLiNjfXNldCBtb2JpbGVGdWxsc2NyZWVuKFcpe3RoaXMuI2M9V30jZD0odzEodGhpcyxVKSx3MSh0aGlzLGosMTYpKTtnZXQgY29udGVudFBhZGRpbmcoKXtyZXR1cm4gdGhpcy4jZH1zZXQgY29udGVudFBhZGRpbmcoVyl7dGhpcy4jZD1XfSNwPSh3MSh0aGlzLG1lKSx3MSh0aGlzLEgsMWUzKSk7Z2V0IG1vZGFsWkluZGV4KCl7cmV0dXJuIHRoaXMuI3B9c2V0IG1vZGFsWkluZGV4KFcpe3RoaXMuI3A9V31jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHt0MX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgIC5tb2RhbENvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDB2dzsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAubW9kYWwgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgc2NhbGUoMC45NSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgLyogV2lkdGggdmFyaWF0aW9ucyAqLwogICAgICAubW9kYWwud2lkdGgtc21hbGwgewogICAgICAgIHdpZHRoOiAzODBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLW1lZGl1bSB7CiAgICAgICAgd2lkdGg6IDU2MHB4OwogICAgICB9CgogICAgICAubW9kYWwud2lkdGgtbGFyZ2UgewogICAgICAgIHdpZHRoOiA4MDBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWZ1bGxzY3JlZW4gewogICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAubW9kYWwgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSA0MHB4KSAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEFsbG93IGZ1bGwgaGVpZ2h0IG9uIG1vYmlsZSB3aGVuIGNvbnRlbnQgbmVlZHMgaXQgKi8KICAgICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyMHB4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRnVsbCBzY3JlZW4gbW9kZSBvbiBtb2JpbGUgKi8KICAgICAgICAubW9kYWwubW9iaWxlLWZ1bGxzY3JlZW4gewogICAgICAgICAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tb2RhbC5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICB9CgogICAgICAubW9kYWwuc2hvdy5wcmVkZXN0cm95IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIHsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBmb250LWZhbWlseTogJHt0MX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRpbmctdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjM2YzZjQ2Iil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjZDFkNWRiIiwiIzUyNTI1YiIpfTsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzUyNTI1YiIpfTsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzI1NjNlYiIsIiMyNTYzZWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzI1NjNlYiIsIiMyNTYzZWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMWQ0ZWQ4IiwiIzFkNGVkOCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjMWQ0ZWQ4IiwiIzFkNGVkOCIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IFc9dHlwZW9mIHRoaXMud2lkdGg9PSJzdHJpbmciP2B3aWR0aC0ke3RoaXMud2lkdGh9YDoiIixEPXR5cGVvZiB0aGlzLndpZHRoPT0ibnVtYmVyIj9gJHt0aGlzLndpZHRofXB4YDoiIixPPXRoaXMubWF4V2lkdGg/YCR7dGhpcy5tYXhXaWR0aH1weGA6IiIsWj10aGlzLm1pbldpZHRoP2Ake3RoaXMubWluV2lkdGh9cHhgOiIiLFk9dGhpcy5tb2JpbGVGdWxsc2NyZWVuPyJtb2JpbGUtZnVsbHNjcmVlbiI6IiI7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICAke0Q/YC5tb2RhbCB7IHdpZHRoOiAke0R9OyB9YDoiIn0KICAgICAgICAke08/YC5tb2RhbCB7IG1heC13aWR0aDogJHtPfTsgfWA6IiJ9CiAgICAgICAgJHtaP2AubW9kYWwgeyBtaW4td2lkdGg6ICR7Wn07IH1gOiIifQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2t9IHN0eWxlPSJ6LWluZGV4OiAke3RoaXMubW9kYWxaSW5kZXh9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCAke1d9ICR7WX0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctdGV4dCI+JHt0aGlzLmhlYWRpbmd9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b25zIj4KICAgICAgICAgICAgICAke3RoaXMuc2hvd0hlbHBCdXR0b24/d2AKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b24iIEBjbGljaz0ke3RoaXMuaGFuZGxlSGVscH0gdGl0bGU9IkhlbHAiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpoZWxwQ2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgICR7dGhpcy5zaG93Q2xvc2VCdXR0b24/d2AKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b24iIEBjbGljaz0keygpPT50aGlzLmRlc3Ryb3koKX0gdGl0bGU9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOiAke3RoaXMuY29udGVudFBhZGRpbmd9cHg7Ij4ke3RoaXMuY29udGVudH08L2Rpdj4KICAgICAgICAgICR7dGhpcy5tZW51T3B0aW9ucy5sZW5ndGg+MD93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CdXR0b25zIj4KICAgICAgICAgICAgICAke3RoaXMubWVudU9wdGlvbnMubWFwKChvZSxnZSk9PndgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbUJ1dHRvbiAke2dlPT09dGhpcy5tZW51T3B0aW9ucy5sZW5ndGgtMT8icHJpbWFyeSI6IiJ9ICR7b2UubmFtZT09PSJPSyI/Im9rIjoiIn0iIEBjbGljaz0keygpPT57b2UuYWN0aW9uKHRoaXMpfX0+JHtvZS5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXdpbmRvd0xheWVyPXcxKHRoaXMsY2UpO2FzeW5jIGZpcnN0VXBkYXRlZChXKXtzdXBlci5maXJzdFVwZGF0ZWQoVyksYXdhaXQoYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UpLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzApLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKS5jbGFzc0xpc3QuYWRkKCJzaG93Iil9YXN5bmMgaGFuZGxlT3V0c2lkZUNsaWNrKFcpe1cuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IEQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbENvbnRhaW5lciIpO1cudGFyZ2V0PT09RCYmYXdhaXQgdGhpcy5kZXN0cm95KCl9YXN5bmMgZGVzdHJveSgpe2xldCBXPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO3RoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKS5jbGFzc0xpc3QuYWRkKCJwcmVkZXN0cm95IiksYXdhaXQgVy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDIwMCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzKSxhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKSxoMS51bnJlZ2lzdGVyKHRoaXMpfWFzeW5jIGhhbmRsZUhlbHAoKXt0aGlzLm9uSGVscCYmYXdhaXQgdGhpcy5vbkhlbHAoKX1zdGF0aWN7dzEoaSxhKX19O3JldHVybiBrZT1pfSkoKX0pO3ZhciBZOXQsWjl0PWIoKCk9Pnt1ZSgpO1k5dD0oKT0+d2AKICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0keyJhIGxhYmVsIn0+PC9kZWVzLWxhYmVsPgogIGB9KTt2YXIgJHgsWDAsWDl0LEFsPWIoKCk9PntzMigpO3ZpKCk7dWUoKTtaOXQoKTtWZSgpOyR4PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sWDA9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LFg5dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtbGFiZWwiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXTt2YXIgeT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IHY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxkPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGw9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLCR4KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJsYWJlbCJpbiBtLGdldDptPT5tLmxhYmVsLHNldDoobSx4KT0+e20ubGFiZWw9eH19LG1ldGFkYXRhOnZ9LG4sbyksJHgodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkZXNjcmlwdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImRlc2NyaXB0aW9uImluIG0sZ2V0Om09Pm0uZGVzY3JpcHRpb24sc2V0OihtLHgpPT57bS5kZXNjcmlwdGlvbj14fX0sbWV0YWRhdGE6dn0sYyxwKSwkeCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlcXVpcmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4icmVxdWlyZWQiaW4gbSxnZXQ6bT0+bS5yZXF1aXJlZCxzZXQ6KG0seCk9PnttLnJlcXVpcmVkPXh9fSxtZXRhZGF0YTp2fSxmLGcpLCR4KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOnZ9LG51bGwsYSkseT1pPWUudmFsdWUsdiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2fSl9c3RhdGljIGRlbW89WTl0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTGF5b3V0IiwiSW5wdXQiXTsjZT1YMCh0aGlzLG4sIiIpO2dldCBsYWJlbCgpe3JldHVybiB0aGlzLiNlfXNldCBsYWJlbCh2KXt0aGlzLiNlPXZ9I3Q9KFgwKHRoaXMsbyksWDAodGhpcyxjLHZvaWQgMCkpO2dldCBkZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLiN0fXNldCBkZXNjcmlwdGlvbih2KXt0aGlzLiN0PXZ9I2E9KFgwKHRoaXMscCksWDAodGhpcyxmLCExKSk7Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHJlcXVpcmVkKHYpe3RoaXMuI2E9dn1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnJlcXVpcmVkIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICAke3RoaXMubGFiZWw/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICR7dGhpcy5sYWJlbH0KICAgICAgICAgICAgICAke3RoaXMucmVxdWlyZWQ/d2A8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+YDoiIn0KICAgICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/d2AKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTppbmZvIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICAgICAgICAgICAgICAgICAgYDp3YGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDp3YGB9CiAgICBgfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxYMCh0aGlzLGcpfXN0YXRpY3tYMChpLGEpfX07cmV0dXJuIHk9aX0pKCl9KTt2YXIgQXgsTnE9YigoKT0+e0F4PSIwLjU1LjEifSk7dmFyIERsLFppLEs5dCxLMD1iKCgpPT57dWUoKTtMdCgpO05xKCk7VmUoKTtEbD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFppPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxLOXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpTdHJpbmd9KV0seT1bSSh7dHlwZTpPYmplY3R9KV0seD1bSSh7dHlwZTpCb29sZWFufSldLERsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvbnRlbnQiaW4gayxnZXQ6az0+ay5jb250ZW50LHNldDooayxOKT0+e2suY29udGVudD1OfX0sbWV0YWRhdGE6X30sbixvKSxEbCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imxhbmd1YWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ibGFuZ3VhZ2UiaW4gayxnZXQ6az0+ay5sYW5ndWFnZSxzZXQ6KGssTik9PntrLmxhbmd1YWdlPU59fSxtZXRhZGF0YTpffSxjLHApLERsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsZVBhdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJmaWxlUGF0aCJpbiBrLGdldDprPT5rLmZpbGVQYXRoLHNldDooayxOKT0+e2suZmlsZVBhdGg9Tn19LG1ldGFkYXRhOl99LGYsZyksRGwodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50U3ViamVjdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImNvbnRlbnRTdWJqZWN0ImluIGssZ2V0Oms9PmsuY29udGVudFN1YmplY3Qsc2V0OihrLE4pPT57ay5jb250ZW50U3ViamVjdD1OfX0sbWV0YWRhdGE6X30sdixtKSxEbCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndvcmRXcmFwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4id29yZFdyYXAiaW4gayxnZXQ6az0+ay53b3JkV3JhcCxzZXQ6KGssTik9PntrLndvcmRXcmFwPU59fSxtZXRhZGF0YTpffSxNLFMpLERsKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOl99LG51bGwsYSksRj1pPWUudmFsdWUsXyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSl9c3RhdGljIGRlbW89KCk9PndgPGRlZXMtd29ya3NwYWNlLW1vbmFjbz48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz5gO3N0YXRpYyBkZW1vR3JvdXBzPVsiV29ya3NwYWNlIl07c3RhdGljIG1vbmFjb0RlZmVycmVkO2VkaXRvckRlZmVycmVkPXp0LnNtYXJ0cHJvbWlzZS5kZWZlcigpOyNlPVppKHRoaXMsbixgZnVuY3Rpb24gaGVsbG8oKSB7CglhbGVydCgnSGVsbG8gd29ybGQhJyk7Cn1gKTtnZXQgY29udGVudCgpe3JldHVybiB0aGlzLiNlfXNldCBjb250ZW50KF8pe3RoaXMuI2U9X30jdD0oWmkodGhpcyxvKSxaaSh0aGlzLGMsInR5cGVzY3JpcHQiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxhbmd1YWdlKF8pe3RoaXMuI3Q9X30jYT0oWmkodGhpcyxwKSxaaSh0aGlzLGYsIiIpKTtnZXQgZmlsZVBhdGgoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZmlsZVBhdGgoXyl7dGhpcy4jYT1ffSNpPShaaSh0aGlzLGcpLFppKHRoaXMsdixuZXcgenQuc21hcnRyeC5yeGpzLlN1YmplY3QpKTtnZXQgY29udGVudFN1YmplY3QoKXtyZXR1cm4gdGhpcy4jaX1zZXQgY29udGVudFN1YmplY3QoXyl7dGhpcy4jaT1ffSNyPShaaSh0aGlzLG0pLFppKHRoaXMsTSwib2ZmIikpO2dldCB3b3JkV3JhcCgpe3JldHVybiB0aGlzLiNyfXNldCB3b3JkV3JhcChfKXt0aGlzLiNyPV99bW9uYWNvVGhlbWVTdWJzY3JpcHRpb249KFppKHRoaXMsUyksbnVsbCk7aXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksWTIuc2V0dXBEb21Ub29scygpfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKF8pe3N1cGVyLmZpcnN0VXBkYXRlZChfKTtsZXQgaz10aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpLE49YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbW9uYWNvLWVkaXRvckAke0F4fWA7aWYoIUYubW9uYWNvRGVmZXJyZWQpe0YubW9uYWNvRGVmZXJyZWQ9enQuc21hcnRwcm9taXNlLmRlZmVyKCk7bGV0IEM9YCR7Tn0vbWluL3ZzL2xvYWRlci5qc2Asej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTt6LnNyYz1DLHoub25sb2FkPSgpPT57Ri5tb25hY29EZWZlcnJlZC5yZXNvbHZlKCl9LGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeil9YXdhaXQgRi5tb25hY29EZWZlcnJlZC5wcm9taXNlLHdpbmRvdy5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOmAke059L21pbi92c2B9fSksd2luZG93LnJlcXVpcmUoWyJ2cy9lZGl0b3IvZWRpdG9yLm1haW4iXSxhc3luYygpPT57bGV0IEM9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UsRT1DLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4/InZzIjoidnMtZGFyayIsVD13aW5kb3cubW9uYWNvLCQ9bnVsbDtpZih0aGlzLmZpbGVQYXRoKXtsZXQgUj1ULlVyaS5wYXJzZShgZmlsZTovLyR7dGhpcy5maWxlUGF0aH1gKTskPVQuZWRpdG9yLmdldE1vZGVsKFIpLCQ/JC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOiQ9VC5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5jb250ZW50LHRoaXMubGFuZ3VhZ2UsUil9bGV0IFY9VC5lZGl0b3IuY3JlYXRlKGsse21vZGVsOiR8fHZvaWQgMCx2YWx1ZTokP3ZvaWQgMDp0aGlzLmNvbnRlbnQsbGFuZ3VhZ2U6JD92b2lkIDA6dGhpcy5sYW5ndWFnZSx0aGVtZTpFLHVzZVNoYWRvd0RPTTohMCxmb250U2l6ZToxNixhdXRvbWF0aWNMYXlvdXQ6ITAsd29yZFdyYXA6dGhpcy53b3JkV3JhcCxob3Zlcjp7ZW5hYmxlZDohMCxkZWxheTozMDAsc3RpY2t5OiEwLGFib3ZlOiExfX0pO3RoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb249Qy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZShSPT57bGV0IFU9Uj8idnMiOiJ2cy1kYXJrIjtWLnVwZGF0ZU9wdGlvbnMoe3RoZW1lOlV9KX0pLHRoaXMuZWRpdG9yRGVmZXJyZWQucmVzb2x2ZShWKX0pO2xldCBMPWF3YWl0KGF3YWl0IGZldGNoKGAke059L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCkpLnRleHQoKSxBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7QS50ZXh0Q29udGVudD1MLHRoaXMuc2hhZG93Um9vdC5hcHBlbmQoQSk7bGV0IHE9YXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlO3Eub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoYXN5bmMgQz0+e2lmKHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbClyZXR1cm47bGV0IHo9cS5nZXRWYWx1ZSgpO3RoaXMuY29udGVudFN1YmplY3QubmV4dCh6KSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LWNoYW5nZSIse2RldGFpbDp6LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9KSx0aGlzLmNvbnRlbnRTdWJqZWN0Lm5leHQocS5nZXRWYWx1ZSgpKX1hc3luYyB1cGRhdGVkKF8pe3N1cGVyLnVwZGF0ZWQoXyk7bGV0IGs9d2luZG93Lm1vbmFjbztpZihrKXtpZihfLmhhcygiZmlsZVBhdGgiKSYmdGhpcy5maWxlUGF0aCl7bGV0IE49YXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlLEw9ay5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCksQT1rLmVkaXRvci5nZXRNb2RlbChMKTtBP0EuZ2V0VmFsdWUoKSE9PXRoaXMuY29udGVudCYmKHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMCxBLnNldFZhbHVlKHRoaXMuY29udGVudCksdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsPSExKTpBPWsuZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuY29udGVudCx0aGlzLmxhbmd1YWdlLEwpLE4uZ2V0TW9kZWwoKT8udXJpLnRvU3RyaW5nKCkhPT1MLnRvU3RyaW5nKCkmJk4uc2V0TW9kZWwoQSk7cmV0dXJufWlmKF8uaGFzKCJjb250ZW50Iikpe2xldCBOPWF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTtOLmdldFZhbHVlKCkhPT10aGlzLmNvbnRlbnQmJih0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWw9ITAsTi5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpLHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMSl9aWYoXy5oYXMoImxhbmd1YWdlIikpe2xldCBMPShhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2UpLmdldE1vZGVsKCk7TCYmay5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShMLHRoaXMubGFuZ3VhZ2UpfX19YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24mJih0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbj1udWxsKX1hc3luYyBzZXRDb250ZW50RXh0ZXJuYWwoXyxrPSEwKXtsZXQgTj1hd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7aWYoTi5nZXRWYWx1ZSgpPT09XylyZXR1cm47bGV0IEE9az9OLmdldFBvc2l0aW9uKCk6bnVsbCxxPWs/Ti5nZXRTZWxlY3Rpb25zKCk6bnVsbCxDPWs/Ti5nZXRTY3JvbGxUb3AoKTowLHo9az9OLmdldFNjcm9sbExlZnQoKTowO2lmKHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMCxOLnNldFZhbHVlKF8pLHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbD0hMSxrKXtpZihBKXtsZXQgRT1OLmdldE1vZGVsKCksVD1FPy5nZXRMaW5lQ291bnQoKXx8MSwkPU1hdGgubWluKEEubGluZU51bWJlcixUKSxWPUU/LmdldExpbmVNYXhDb2x1bW4oJCl8fDEsUj1NYXRoLm1pbihBLmNvbHVtbixWKTtOLnNldFBvc2l0aW9uKHtsaW5lTnVtYmVyOiQsY29sdW1uOlJ9KX1pZihxJiZxLmxlbmd0aD4wKXRyeXtOLnNldFNlbGVjdGlvbnMocSl9Y2F0Y2h7fU4uc2V0U2Nyb2xsUG9zaXRpb24oe3Njcm9sbFRvcDpDLHNjcm9sbExlZnQ6en0pfX1zdGF0aWN7WmkoaSxhKX19O3JldHVybiBGPWl9KSgpfSk7dmFyIGhvLGhhLHc4LER4LEZxPWIoKCk9PntfMSgpO3VlKCk7VmUoKTtaMCgpO0V0KCk7QWwoKTtLMCgpO0swKCk7aG89ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxoYT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sdzg9W3trZXk6InR5cGVzY3JpcHQiLGxhYmVsOiJUeXBlU2NyaXB0In0se2tleToiamF2YXNjcmlwdCIsbGFiZWw6IkphdmFTY3JpcHQifSx7a2V5OiJqc29uIixsYWJlbDoiSlNPTiJ9LHtrZXk6Imh0bWwiLGxhYmVsOiJIVE1MIn0se2tleToiY3NzIixsYWJlbDoiQ1NTIn0se2tleToic2NzcyIsbGFiZWw6IlNDU1MifSx7a2V5OiJtYXJrZG93biIsbGFiZWw6Ik1hcmtkb3duIn0se2tleToieWFtbCIsbGFiZWw6IllBTUwifSx7a2V5OiJ4bWwiLGxhYmVsOiJYTUwifSx7a2V5OiJzcWwiLGxhYmVsOiJTUUwifSx7a2V5OiJweXRob24iLGxhYmVsOiJQeXRob24ifSx7a2V5OiJqYXZhIixsYWJlbDoiSmF2YSJ9LHtrZXk6ImNzaGFycCIsbGFiZWw6IkMjIn0se2tleToiY3BwIixsYWJlbDoiQysrIn0se2tleToiZ28iLGxhYmVsOiJHbyJ9LHtrZXk6InJ1c3QiLGxhYmVsOiJSdXN0In0se2tleToic2hlbGwiLGxhYmVsOiJTaGVsbCJ9LHtrZXk6InBsYWludGV4dCIsbGFiZWw6IlBsYWluIFRleHQifV0sRHg9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LWNvZGUiKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXTt2YXIgcT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IEM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpTdHJpbmd9KV0seT1bSSh7dHlwZTpTdHJpbmd9KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0soKV0sTj1bSygpXSxobyh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4idmFsdWUiaW4geixnZXQ6ej0+ei52YWx1ZSxzZXQ6KHosRSk9Pnt6LnZhbHVlPUV9fSxtZXRhZGF0YTpDfSxuLG8pLGhvKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFuZ3VhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJsYW5ndWFnZSJpbiB6LGdldDp6PT56Lmxhbmd1YWdlLHNldDooeixFKT0+e3oubGFuZ3VhZ2U9RX19LG1ldGFkYXRhOkN9LGMscCksaG8odGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoZWlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJoZWlnaHQiaW4geixnZXQ6ej0+ei5oZWlnaHQsc2V0Oih6LEUpPT57ei5oZWlnaHQ9RX19LG1ldGFkYXRhOkN9LGYsZyksaG8odGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3b3JkV3JhcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+IndvcmRXcmFwImluIHosZ2V0Ono9Pnoud29yZFdyYXAsc2V0Oih6LEUpPT57ei53b3JkV3JhcD1FfX0sbWV0YWRhdGE6Q30sdixtKSxobyh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dMaW5lTnVtYmVycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNob3dMaW5lTnVtYmVycyJpbiB6LGdldDp6PT56LnNob3dMaW5lTnVtYmVycyxzZXQ6KHosRSk9Pnt6LnNob3dMaW5lTnVtYmVycz1FfX0sbWV0YWRhdGE6Q30sTSxTKSxobyh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJpc0xhbmd1YWdlRHJvcGRvd25PcGVuImluIHosZ2V0Ono9PnouaXNMYW5ndWFnZURyb3Bkb3duT3BlbixzZXQ6KHosRSk9Pnt6LmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49RX19LG1ldGFkYXRhOkN9LF8sayksaG8odGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb3B5U3VjY2VzcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNvcHlTdWNjZXNzImluIHosZ2V0Ono9PnouY29weVN1Y2Nlc3Msc2V0Oih6LEUpPT57ei5jb3B5U3VjY2Vzcz1FfX0sbWV0YWRhdGE6Q30sTCxBKSxobyhudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLHE9aT1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfXN0YXRpYyBkZW1vPSgpPT53YAogICAgPGRlZXMtaW5wdXQtY29kZQogICAgICBsYWJlbD0iVHlwZVNjcmlwdCBDb2RlIgogICAgICBrZXk9ImNvZGUiCiAgICAgIGxhbmd1YWdlPSJ0eXBlc2NyaXB0IgogICAgICBoZWlnaHQ9IjMwMHB4IgogICAgICAudmFsdWU9JHtgY29uc3QgZ3JlZXRpbmc6IHN0cmluZyA9ICJIZWxsbyBXb3JsZCI7CmNvbnNvbGUubG9nKGdyZWV0aW5nKTtgfQogICAgPjwvZGVlcy1pbnB1dC1jb2RlPgogIGA7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCIsIldvcmtzcGFjZSJdOyNlPWhhKHRoaXMsbiwiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKEMpe3RoaXMuI2U9Q30jdD0oaGEodGhpcyxvKSxoYSh0aGlzLGMsInR5cGVzY3JpcHQiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxhbmd1YWdlKEMpe3RoaXMuI3Q9Q30jYT0oaGEodGhpcyxwKSxoYSh0aGlzLGYsIjIwMHB4IikpO2dldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgaGVpZ2h0KEMpe3RoaXMuI2E9Q30jaT0oaGEodGhpcyxnKSxoYSh0aGlzLHYsIm9mZiIpKTtnZXQgd29yZFdyYXAoKXtyZXR1cm4gdGhpcy4jaX1zZXQgd29yZFdyYXAoQyl7dGhpcy4jaT1DfSNyPShoYSh0aGlzLG0pLGhhKHRoaXMsTSwhMCkpO2dldCBzaG93TGluZU51bWJlcnMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2hvd0xpbmVOdW1iZXJzKEMpe3RoaXMuI3I9Q30jcz0oaGEodGhpcyxTKSxoYSh0aGlzLF8sITEpKTtnZXQgaXNMYW5ndWFnZURyb3Bkb3duT3Blbigpe3JldHVybiB0aGlzLiNzfXNldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKEMpe3RoaXMuI3M9Q30jbj0oaGEodGhpcyxrKSxoYSh0aGlzLEwsITEpKTtnZXQgY29weVN1Y2Nlc3MoKXtyZXR1cm4gdGhpcy4jbn1zZXQgY29weVN1Y2Nlc3MoQyl7dGhpcy4jbj1DfWVkaXRvckVsZW1lbnQ9KGhhKHRoaXMsQSksbnVsbCk7c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIsCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJyaWdodCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItbGVmdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudG9vbGJhci1yaWdodCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utc2VsZWN0b3IgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2UtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uc3VjY2VzcyB7CiAgICAgICAgY29sb3I6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3Itd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuY29kZS1jb250YWluZXIgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IEM9dzguZmluZCh6PT56LmtleT09PXRoaXMubGFuZ3VhZ2UpfHx3OFswXTtyZXR1cm4gd2AKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7Qy5sYWJlbH0KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAke3RoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3Blbj93YAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgJHt3OC5tYXAoej0+d2AKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imxhbmd1YWdlLW9wdGlvbiAke3oua2V5PT09dGhpcy5sYW5ndWFnZT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke0U9PnRoaXMuc2VsZWN0TGFuZ3VhZ2UoRSx6LmtleSl9CiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7ei5sYWJlbH0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLndvcmRXcmFwPT09Im9uIj8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iV29yZCBXcmFwIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVXb3JkV3JhcH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpXcmFwVGV4dCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy5zaG93TGluZU51bWJlcnM/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IkxpbmUgTnVtYmVycyIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlTGluZU51bWJlcnN9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6SGFzaCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLmNvcHlTdWNjZXNzPyJzdWNjZXNzIjoiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2Vzcz8ibHVjaWRlOkNoZWNrIjoibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIHRpdGxlPSJFeHBhbmQiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLm9wZW5GdWxsc2NyZWVufQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOk1heGltaXplMiJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3Itd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgICAuY29udGVudD0ke3RoaXMudmFsdWV9CiAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5sYW5ndWFnZX0KICAgICAgICAgICAgICAud29yZFdyYXA9JHt0aGlzLndvcmRXcmFwfQogICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmVkaXRvckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKSx0aGlzLmVkaXRvckVsZW1lbnQmJnRoaXMuZWRpdG9yRWxlbWVudC5jb250ZW50U3ViamVjdC5zdWJzY3JpYmUoQz0+e3RoaXMudmFsdWUhPT1DJiYodGhpcy52YWx1ZT1DLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpKX0pfXRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKXt0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49IXRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3Blbn1oYW5kbGVMYW5ndWFnZUJsdXIoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuPSExfSwxNTApfWFzeW5jIHNlbGVjdExhbmd1YWdlKEMseil7aWYoQy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubGFuZ3VhZ2U9eix0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW49ITEsdGhpcy5lZGl0b3JFbGVtZW50KXt0aGlzLmVkaXRvckVsZW1lbnQubGFuZ3VhZ2U9ejtsZXQgVD0oYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UpLmdldE1vZGVsKCk7VCYmd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShULHopfX10b2dnbGVXb3JkV3JhcCgpe3RoaXMud29yZFdyYXA9dGhpcy53b3JkV3JhcD09PSJvbiI/Im9mZiI6Im9uIix0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigid29yZFdyYXAiLHRoaXMud29yZFdyYXApfXRvZ2dsZUxpbmVOdW1iZXJzKCl7dGhpcy5zaG93TGluZU51bWJlcnM9IXRoaXMuc2hvd0xpbmVOdW1iZXJzLHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJsaW5lTnVtYmVycyIsdGhpcy5zaG93TGluZU51bWJlcnM/Im9uIjoib2ZmIil9YXN5bmMgdXBkYXRlRWRpdG9yT3B0aW9uKEMseil7dGhpcy5lZGl0b3JFbGVtZW50JiYoYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UpLnVwZGF0ZU9wdGlvbnMoe1tDXTp6fSl9YXN5bmMgY29weUNvZGUoKXt0cnl7YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy52YWx1ZSksdGhpcy5jb3B5U3VjY2Vzcz0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5jb3B5U3VjY2Vzcz0hMX0sMmUzKX1jYXRjaChDKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsQyl9fWhhbmRsZUNvbnRlbnRDaGFuZ2UoQyl7bGV0IHo9Qy5kZXRhaWw7dGhpcy52YWx1ZSE9PXomJih0aGlzLnZhbHVlPXosdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWFzeW5jIG9wZW5GdWxsc2NyZWVuKCl7bGV0IEM9dGhpcy52YWx1ZSx6PW51bGwsRT10aGlzLmxhbmd1YWdlLFQ9dGhpcy53b3JkV3JhcCwkPXRoaXMuc2hvd0xpbmVOdW1iZXJzLFY9ITEsUj0hMSxVPSgpPT57bGV0IHdlPXc4LmZpbmQoSD0+SC5rZXk9PT1FKTtyZXR1cm4gd2U/d2UubGFiZWw6IlR5cGVTY3JpcHQifSxyZT13ZT0+e2xldCBIPXdlLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7aWYoIUgpcmV0dXJuO2xldCBjZT1ILnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24gc3BhbiIpO2NlJiYoY2UudGV4dENvbnRlbnQ9VSgpKTtsZXQga2U9SC5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTtrZSYma2UuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIixUPT09Im9uIik7bGV0IFc9SC5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7VyYmVy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCQpO2xldCBEPUgucXVlcnlTZWxlY3RvcigiLmNvcHktYnRuIiksTz1EPy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTtEJiZPJiYoRC5jbGFzc0xpc3QudG9nZ2xlKCJzdWNjZXNzIixSKSxPLmljb249Uj8ibHVjaWRlOkNoZWNrIjoibHVjaWRlOkNvcHkiKTtsZXQgWj1ILnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpO1omJihaLnN0eWxlLmRpc3BsYXk9Vj8iYmxvY2siOiJub25lIil9LGo9YXdhaXQgbDEuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzp0aGlzLmxhYmVsfHwiQ29kZSBFZGl0b3IiLHdpZHRoOiJmdWxsc2NyZWVuIixjb250ZW50UGFkZGluZzowLGNvbnRlbnQ6d2AKICAgICAgICA8c3R5bGU+CiAgICAgICAgICAubW9kYWwtdG9vbGJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAxMDAlOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb24uc2VsZWN0ZWQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbi5zdWNjZXNzIHsKICAgICAgICAgICAgY29sb3I6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1kaXZpZGVyIHsKICAgICAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtVKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7dzgubWFwKHdlPT53YAogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imxhbmd1YWdlLW9wdGlvbiAke3dlLmtleT09PUU/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke3dlLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3dlLmxhYmVsfQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIHdyYXAtYnRuICR7VD09PSJvbiI/ImFjdGl2ZSI6IiJ9IiB0aXRsZT0iV29yZCBXcmFwIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpXcmFwVGV4dCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiBsaW5lcy1idG4gJHskPyJhY3RpdmUiOiIifSIgdGl0bGU9IkxpbmUgTnVtYmVycyI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6SGFzaCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiBjb3B5LWJ0biIgdGl0bGU9IkNvcHkgQ29kZSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q29weSJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAuY29udGVudD0ke0N9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke0V9CiAgICAgICAgICAgIC53b3JkV3JhcD0ke1R9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyB3ZT0+e2F3YWl0IHdlLmRlc3Ryb3koKX19LHtuYW1lOiJTYXZlICYgQ2xvc2UiLGFjdGlvbjphc3luYyB3ZT0+e2lmKHo9d2Uuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIikseil7bGV0IGNlPShhd2FpdCB6LmVkaXRvckRlZmVycmVkLnByb21pc2UpLmdldFZhbHVlKCk7dGhpcy5zZXRWYWx1ZShjZSl9YXdhaXQgd2UuZGVzdHJveSgpfX1dfSk7YXdhaXQgbmV3IFByb21pc2Uod2U9PnNldFRpbWVvdXQod2UsMTAwKSksej1qLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpO2xldCBtZT1qLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7aWYobWUpe2xldCB3ZT1tZS5xdWVyeVNlbGVjdG9yKCIubGFuZ3VhZ2UtYnV0dG9uIik7d2U/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e1Y9IVYscmUoail9KTtsZXQgSD1tZS5xdWVyeVNlbGVjdG9yQWxsKCIubGFuZ3VhZ2Utb3B0aW9uIik7SC5mb3JFYWNoKEQ9PntELmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixhc3luYygpPT57bGV0IE89RC5kYXRhc2V0Lmxhbmc7aWYoTyYmeil7RT1PLFY9ITE7bGV0IFk9KGF3YWl0IHouZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkuZ2V0TW9kZWwoKTtZJiZ3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKFksTyksSC5mb3JFYWNoKG9lPT5vZS5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpKSxELmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIikscmUoail9fSl9KSxtZS5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKT8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9PntUPVQ9PT0ib24iPyJvZmYiOiJvbiIseiYmKGF3YWl0IHouZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkudXBkYXRlT3B0aW9ucyh7d29yZFdyYXA6VH0pLHJlKGopfSksbWUucXVlcnlTZWxlY3RvcigiLmxpbmVzLWJ0biIpPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYXN5bmMoKT0+eyQ9ISQseiYmKGF3YWl0IHouZWRpdG9yRGVmZXJyZWQucHJvbWlzZSkudXBkYXRlT3B0aW9ucyh7bGluZU51bWJlcnM6JD8ib24iOiJvZmYifSkscmUoail9KSxtZS5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKT8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFzeW5jKCk9PntpZih6KXtsZXQgTz0oYXdhaXQgei5lZGl0b3JEZWZlcnJlZC5wcm9taXNlKS5nZXRWYWx1ZSgpO3RyeXthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChPKSxSPSEwLHJlKGopLHNldFRpbWVvdXQoKCk9PntSPSExLHJlKGopfSwyZTMpfWNhdGNoKFope2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IixaKX19fSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEQ9PntWJiYhd2U/LmNvbnRhaW5zKEQudGFyZ2V0KSYmKFY9ITEscmUoaikpfSx7b25jZTohMH0pfX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKEMpe3RoaXMudmFsdWU9Qyx0aGlzLmVkaXRvckVsZW1lbnQmJih0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudD1DLHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlLnRoZW4oej0+e3ouZ2V0VmFsdWUoKSE9PUMmJnouc2V0VmFsdWUoQyl9KSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9c3RhdGlje2hhKGksYSl9fTtyZXR1cm4gcT1pfSkoKX0pO3ZhciBROXQsSjl0PWIoKCk9Pnt1ZSgpO3gxKCk7ZzIoKTtPcSgpO1E5dD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuZGF0ZS1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGE9Pntjb25zb2xlLmxvZygiQmFzaWMgZGF0ZSBzZWxlY3RlZDoiLGEudGFyZ2V0LnZhbHVlKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBEYXRlIFBpY2tlciJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgZGF0ZSBzZWxlY3Rpb24gd2l0aG91dCB0aW1lIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IlNlbGVjdCBEYXRlIgogICAgICAgICAgZGVzY3JpcHRpb249IkNob29zZSBhIGRhdGUgZnJvbSB0aGUgY2FsZW5kYXIiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJFdmVudCBEYXRlICYgVGltZSJdJyksYT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZGF0ZXBpY2tlcltsYWJlbD0iQXBwb2ludG1lbnQiXScpO2UmJmUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixpPT57bGV0IHI9aS50YXJnZXQudmFsdWU7Y29uc29sZS5sb2coIjI0aCBmb3JtYXQgZGF0ZXRpbWU6IixyKX0pLGEmJmEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixpPT57bGV0IHI9aS50YXJnZXQudmFsdWU7Y29uc29sZS5sb2coIjEyaCBmb3JtYXQgZGF0ZXRpbWU6IixyKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIGFuZCBUaW1lIFNlbGVjdGlvbiJ9IC5zdWJ0aXRsZT0keyJEYXRlIHBpY2tlcnMgd2l0aCB0aW1lIHNlbGVjdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEYXRlICYgVGltZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYm90aCBkYXRlIGFuZCB0aW1lICgyNC1ob3VyIGZvcm1hdCkiCiAgICAgICAgICAuZW5hYmxlVGltZT0keyEwfQogICAgICAgICAgdGltZUZvcm1hdD0iMjRoIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iQXBwb2ludG1lbnQiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iRGF0ZSBhbmQgdGltZSB3aXRoIEFNL1BNIHNlbGVjdG9yICgxNS1taW51dGUgaW5jcmVtZW50cykiCiAgICAgICAgICAuZW5hYmxlVGltZT0keyEwfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgLm1pbnV0ZUluY3JlbWVudD0kezE1fQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixpPT57bGV0IHI9aS50YXJnZXQ7Y29uc29sZS5sb2coYCR7ci5sYWJlbH0gdmFsdWU6YCxyLnZhbHVlKTtsZXQgcz1yLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRlLWlucHV0Iik7cyYmY29uc29sZS5sb2coYCR7ci5sYWJlbH0gZm9ybWF0dGVkOmAscy52YWx1ZSl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJUaW1lem9uZSBTdXBwb3J0In0gLnN1YnRpdGxlPSR7IkRhdGUgYW5kIHRpbWUgc2VsZWN0aW9uIHdpdGggdGltZXpvbmUgYXdhcmVuZXNzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgVGltZSAod2l0aCBUaW1lem9uZSkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZS90aW1lIGFuZCB0aW1lem9uZSBmb3IgdGhlIG1lZXRpbmciCiAgICAgICAgICAuZW5hYmxlVGltZT0keyEwfQogICAgICAgICAgLmVuYWJsZVRpbWV6b25lPSR7ITB9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgICB0aW1lem9uZT0iQW1lcmljYS9OZXdfWW9yayIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ikdsb2JhbCBFdmVudCBTY2hlZHVsZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTY2hlZHVsZSBhbiBldmVudCBhY3Jvc3MgZGlmZmVyZW50IHRpbWV6b25lcyIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7ITB9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHshMH0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjEyaCIKICAgICAgICAgIHRpbWV6b25lPSJFdXJvcGUvTG9uZG9uIgogICAgICAgICAgLm1pbnV0ZUluY3JlbWVudD0kezMwfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpO2UmJmUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixhPT57bGV0IGk9YS50YXJnZXQudmFsdWU7aWYoaSl7bGV0IHI9bmV3IERhdGUoaSkscz1uZXcgRGF0ZSxuPU1hdGguZmxvb3IoKHIuZ2V0VGltZSgpLXMuZ2V0VGltZSgpKS8oMWUzKjYwKjYwKjI0KSk7Y29uc29sZS5sb2coYFNlbGVjdGVkIGRhdGUgaXMgJHtufSBkYXlzIGZyb20gdG9kYXlgKX19KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGF0ZSBSYW5nZSBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaW1pdCBzZWxlY3RhYmxlIGRhdGVzIHdpdGggbWluIGFuZCBtYXggdmFsdWVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkZ1dHVyZSBEYXRlIE9ubHkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2FuIG9ubHkgc2VsZWN0IGRhdGVzIGZyb20gdG9kYXkgdG8gOTAgZGF5cyBpbiB0aGUgZnV0dXJlIgogICAgICAgICAgLm1pbkRhdGU9JHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgICAubWF4RGF0ZT0ke25ldyBEYXRlKERhdGUubm93KCkrMjE2MCo2MCo2MCoxZTMpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXsiREQvTU0vWVlZWSI6IkV1cm9wZWFuIiwiTU0vREQvWVlZWSI6IlVTIiwiWVlZWS1NTS1ERCI6IklTTyJ9O3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIikuZm9yRWFjaChpPT57aS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHI9PntsZXQgcz1yLnRhcmdldCxuPXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTtuJiZjb25zb2xlLmxvZyhgJHtzLmxhYmVsfSBmb3JtYXQ6YCxuLnZhbHVlKX0pfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRhdGUgRm9ybWF0cyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgZGF0ZSBkaXNwbGF5IGZvcm1hdHMgZm9yIHZhcmlvdXMgcmVnaW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRhdGUtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRXVyb3BlYW4gRm9ybWF0IgogICAgICAgICAgICBkYXRlRm9ybWF0PSJERC9NTS9ZWVlZIgogICAgICAgICAgICAudmFsdWU9JHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iTU0vREQvWVlZWSIKICAgICAgICAgICAgLnZhbHVlPSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJJU08gRm9ybWF0IgogICAgICAgICAgICBkYXRlRm9ybWF0PSJZWVlZLU1NLUREIgogICAgICAgICAgICAudmFsdWU9JHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXJbcmVxdWlyZWRdIik7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2UuZ2V0VmFsdWUoKXx8Y29uc29sZS5sb2coIlJlcXVpcmVkIGRhdGUgZmllbGQgaXMgZW1wdHkiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgcGxhY2Vob2xkZXI9IlNlbGVjdCB5b3VyIGJpcnRoIGRhdGUiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJEaXNhYmxlZCBEYXRlIgogICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgY2Fubm90IGJlIGVkaXRlZCIKICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgLnZhbHVlPSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZGF0ZXBpY2tlcltsYWJlbD0iVVMgQ2FsZW5kYXIiXScpLGE9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkVVIENhbGVuZGFyIl0nKTtlJiZjb25zb2xlLmxvZygiVVMgQ2FsZW5kYXIgc3RhcnRzIG9uIFN1bmRheSAoMCkiKSxhJiZjb25zb2xlLmxvZygiRVUgQ2FsZW5kYXIgc3RhcnRzIG9uIE1vbmRheSAoMSkiKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPSgpPT57bGV0IGk9W10scj1uZXcgRGF0ZSxzPXIuZ2V0RnVsbFllYXIoKSxuPXIuZ2V0TW9udGgoKSxvPW5ldyBEYXRlKHMsbiwxKTtmb3IoO28uZ2V0TW9udGgoKT09PW47KShvLmdldERheSgpPT09MHx8by5nZXREYXkoKT09PTYpJiZpLnB1c2gobmV3IERhdGUobykudG9JU09TdHJpbmcoKSksby5zZXREYXRlKG8uZ2V0RGF0ZSgpKzEpO3JldHVybiBpfSxhPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7YSYmKGEuZGlzYWJsZWREYXRlcz1lKCksY29uc29sZS5sb2coIkRpc2FibGVkIHdlZWtlbmQgZGF0ZXMgZm9yIGN1cnJlbnQgbW9udGgiKSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRpc2FibGVkIERhdGVzIn0gLnN1YnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggc3BlY2lmaWMgZGF0ZXMgZGlzYWJsZWQgKHdlZWtlbmRzIGluIGN1cnJlbnQgbW9udGgpIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkF2YWlsYWJpbGl0eSBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrZW5kcyBhcmUgZGlzYWJsZWQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT1uZXcgRGF0ZSxhPWUuZ2V0TW9udGgoKSxpPWUuZ2V0RnVsbFllYXIoKSxyPVt7ZGF0ZTpgJHtpfS0keyhhKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0ke2UuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWAsdGl0bGU6IlRlYW0gTWVldGluZyIsdHlwZToiaW5mbyIsY291bnQ6Mn0se2RhdGU6YCR7aX0tJHsoYSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHsoZS5nZXREYXRlKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YCx0aXRsZToiUHJvamVjdCBEZWFkbGluZSIsdHlwZToid2FybmluZyJ9LHtkYXRlOmAke2l9LSR7KGErMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7KGUuZ2V0RGF0ZSgpKzIpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWAsdGl0bGU6IlJlbGVhc2UgRGF5Iix0eXBlOiJzdWNjZXNzIn0se2RhdGU6YCR7aX0tJHsoYSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHsoZS5nZXREYXRlKCkrNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YCx0aXRsZToiVXJnZW50IEZpeCBSZXF1aXJlZCIsdHlwZToiZXJyb3IifSx7ZGF0ZTpgJHtpfS0keyhhKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0keyhlLmdldERhdGUoKSs3KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gLHRpdGxlOiJNdWx0aXBsZSBFdmVudHMgVG9kYXkiLHR5cGU6ImluZm8iLGNvdW50OjV9LHtkYXRlOmAke2l9LSR7KGErMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LTE1YCx0aXRsZToiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLHR5cGU6ImluZm8ifV0scz10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpO3MmJihzLmV2ZW50cz1yLGNvbnNvbGUubG9nKCJDYWxlbmRhciBldmVudHMgbG9hZGVkOiIscikpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJDYWxlbmRhciB3aXRoIEV2ZW50cyJ9IC5zdWJ0aXRsZT0keyJWaXN1YWwgZmVlZGJhY2sgZm9yIHNjaGVkdWxlZCBldmVudHMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRXZlbnQgQ2FsZW5kYXIiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iRGF5cyB3aXRoIGNvbG9yZWQgZG90cyBoYXZlIGV2ZW50cy4gSG92ZXIgdG8gc2VlIGRldGFpbHMuIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxzdHJvbmc+RXZlbnQgTGVnZW5kOjwvc3Ryb25nPjxicj4KICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzA5NjlkYTsiPuKXjyBJbmZvPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZDI5OTIyOyI+4pePIFdhcm5pbmc8L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMyZWEwNDM7Ij7il48gU3VjY2Vzczwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2NmMjIyZTsiPuKXjyBFcnJvcjwvc3Bhbj48YnI+CiAgICAgICAgICA8ZW0+RGF5cyB3aXRoIG1vcmUgdGhhbiAzIGV2ZW50cyBzaG93IGEgY291bnQgYmFkZ2U8L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIiksYT10LnF1ZXJ5U2VsZWN0b3IoIiNldmVudC1vdXRwdXQiKTtlJiZhJiYoZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGk9PntsZXQgcj1pLnRhcmdldCxzPXIudmFsdWU7aWYocyl7bGV0IG49bmV3IERhdGUocyksZD1yLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRlLWlucHV0Iik/LnZhbHVlfHwiTi9BIjthLmlubmVySFRNTD1gCiAgICAgICAgICAgICAgPHN0cm9uZz5FdmVudCB0cmlnZ2VyZWQhPC9zdHJvbmc+PGJyPgogICAgICAgICAgICAgIElTTyBWYWx1ZTogJHtzfTxicj4KICAgICAgICAgICAgICBGb3JtYXR0ZWQ6ICR7ZH08YnI+CiAgICAgICAgICAgICAgRGF0ZSBvYmplY3Q6ICR7bi50b0xvY2FsZVN0cmluZygpfQogICAgICAgICAgICBgfWVsc2UgYS5pbm5lckhUTUw9IjxlbT5EYXRlIGNsZWFyZWQ8L2VtPiJ9KSxlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57Y29uc29sZS5sb2coIkRhdGVwaWNrZXIgbG9zdCBmb2N1cyIpfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJFdmVudCBIYW5kbGluZyJ9IC5zdWJ0aXRsZT0keyJJbnRlcmFjdGl2ZSBkZW1vbnN0cmF0aW9uIG9mIGNoYW5nZSBldmVudHMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRXZlbnQgRGVtbyIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYSBkYXRlIHRvIHNlZSB0aGUgZXZlbnQgZGV0YWlscyIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZXZlbnQtb3V0cHV0IiBjbGFzcz0iZGVtby1vdXRwdXQiPgogICAgICAgICAgPGVtPlNlbGVjdCBhIGRhdGUgdG8gc2VlIGV2ZW50IGRldGFpbHMuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmB9KTt2YXIgZXV0LHR1dD1iKCgpPT57dWUoKTtfMSgpO2V1dD1bLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjI0IDcxLjQlIDQuMSUpIil9LAogICAgICAgICAgICAgICAgICAgIDAgMCAwIDRweCAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBJY29uIGNvbnRhaW5lciB1c2luZyBmbGV4Ym94IGZvciBiZXR0ZXIgcG9zaXRpb25pbmcgKi8KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaWNvbi1jb250YWluZXIgPiAqIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmNhbGVuZGFyLWljb24gewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIjAgMTBweCAxNXB4IC0zcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDRweCA2cHggLTRweCBoc2woMCAwJSAwJSAvIDAuMSkiLCIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubmF2LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAubmF2LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAubmF2LWJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLyogV2Vla2RheSBoZWFkZXJzICovCiAgICAgIC53ZWVrZGF5cyB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KCiAgICAgIC53ZWVrZGF5IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuZGF5OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICB9CgogICAgICAuZGF5Lm90aGVyLW1vbnRoIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgIH0KCiAgICAgIC8qIEV2ZW50IGluZGljYXRvcnMgKi8KICAgICAgLmRheS5oYXMtZXZlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmV2ZW50LWluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogNHB4OwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdCB7CiAgICAgICAgd2lkdGg6IDRweDsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5pbmZvIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMSA3MCUgNTIlKSIsImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsImhzbCg0NSA5MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5zdWNjZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDE0MiA2OSUgNDUlKSIsImhzbCgxNDIgNjklIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA3MiUgNTElKSIsImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwiaHNsKDAgNzIlIDYxJSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGV2ZW50IGRldGFpbHMgKi8KICAgICAgLmV2ZW50LXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDhweCk7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkuaGFzLWV2ZW50OmhvdmVyIC5ldmVudC10b29sdGlwIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBUaW1lIHNlbGVjdG9yICovCiAgICAgIC50aW1lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLXNlbGVjdG9yLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICB9CgogICAgICAudGltZS1pbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAudGltZS1zZXBhcmF0b3IgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgfQoKICAgICAgLmFtLXBtLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLmFtLXBtLWJ1dHRvbjpob3Zlcjpub3QoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLyogQWN0aW9uIGJ1dHRvbnMgKi8KICAgICAgLmNhbGVuZGFyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2RheS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC50b2RheS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC50b2RheS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwiaHNsKDAgNjIuOCUgMzAuNiUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIsImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Rvci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnRpbWV6b25lLXNlbGVjdDpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWV6b25lLXNlbGVjdDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgXX0pO3ZhciBhdXQsaXV0PWIoKCk9Pnt1ZSgpO2F1dD10PT57bGV0IGU9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLGE9dC53ZWVrU3RhcnRzT249PT0xP1siTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIiwiU3UiXTpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0saT10LmdldERheXNJbk1vbnRoKCkscj10LnNlbGVjdGVkSG91cjwxMixzPXQuZ2V0VGltZXpvbmVzKCk7cmV0dXJuIHdgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0LmxhYmVsfSAuZGVzY3JpcHRpb249JHt0LmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0LnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1jb250YWluZXIiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIGNsYXNzPSJkYXRlLWlucHV0ICR7dC5pc09wZW5lZD8ib3BlbiI6IiJ9IgogICAgICAgICAgICAgIC52YWx1ZT0ke3QuZm9ybWF0RGF0ZSh0LnZhbHVlKX0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0LnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgID9kaXNhYmxlZD0ke3QuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7dC50b2dnbGVDYWxlbmRhcn0KICAgICAgICAgICAgICBAa2V5ZG93bj0ke3QuaGFuZGxlS2V5ZG93bn0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7dC5oYW5kbGVJbnB1dEJsdXJ9CiAgICAgICAgICAgICAgc3R5bGU9InBhZGRpbmctcmlnaHQ6ICR7dC52YWx1ZT8iNjRweCI6IjQwcHgifSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dC52YWx1ZSYmIXQuZGlzYWJsZWQ/d2AKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWJ1dHRvbiIgQGNsaWNrPSR7dC5jbGVhclZhbHVlfSB0aXRsZT0iQ2xlYXIiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7dC5pc09wZW5lZD8ic2hvdyI6IiJ9ICR7dC5vcGVuc1RvVG9wPyJ0b3AiOiJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke3QucHJldmlvdXNNb250aH0+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZXZyb25MZWZ0IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb250aC15ZWFyLWRpc3BsYXkiPgogICAgICAgICAgICAgICAgICAke2VbdC52aWV3RGF0ZS5nZXRNb250aCgpXX0gJHt0LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke3QubmV4dE1vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvblJpZ2h0IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gV2Vla2RheSBIZWFkZXJzIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndlZWtkYXlzIj4KICAgICAgICAgICAgICAgICR7YS5tYXAobj0+d2A8ZGl2IGNsYXNzPSJ3ZWVrZGF5Ij4ke259PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2kubWFwKG49PntsZXQgbz10LmlzVG9kYXkobiksZD10LmlzU2VsZWN0ZWQobiksYz1uLmdldE1vbnRoKCkhPT10LnZpZXdEYXRlLmdldE1vbnRoKCkscD10LmlzRGlzYWJsZWQobiksbD10LmdldEV2ZW50c0ZvckRhdGUobiksZj1sLmxlbmd0aD4wLGc9bC5yZWR1Y2UoKHksdik9PnkrKHYuY291bnR8fDEpLDApO3JldHVybiB3YAogICAgICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGF5ICR7Yz8ib3RoZXItbW9udGgiOiIifSAke28/InRvZGF5IjoiIn0gJHtkPyJzZWxlY3RlZCI6IiJ9ICR7cD8iZGlzYWJsZWQiOiIifSAke2Y/Imhhcy1ldmVudCI6IiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PiFwJiZ0LnNlbGVjdERhdGUobil9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtuLmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7Zj93YAogICAgICAgICAgICAgICAgICAgICAgICAke2c+Mz93YAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke2d9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGA6d2AKICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJldmVudC1pbmRpY2F0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsLnNsaWNlKDAsMykubWFwKHk9PndgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWRvdCAke3kudHlwZXx8ImluZm8ifSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgICAgICAgICAgJHtsWzBdLnRpdGxlP3dgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtdG9vbHRpcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2c+MT93YCAoKyR7Zy0xfSBtb3JlKWA6IiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke3QuZW5hYmxlVGltZT93YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWUtc2VsZWN0b3ItdGl0bGUiPlRpbWU8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1pbnB1dHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZS1pbnB1dCIgCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnRpbWVGb3JtYXQ9PT0iMTJoIj8odC5zZWxlY3RlZEhvdXI9PT0wPzEyOnQuc2VsZWN0ZWRIb3VyPjEyP3Quc2VsZWN0ZWRIb3VyLTEyOnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKTp0LnNlbGVjdGVkSG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0ke249PnQuaGFuZGxlSG91cklucHV0KG4pfQogICAgICAgICAgICAgICAgICAgICAgbWluPSIke3QudGltZUZvcm1hdD09PSIxMmgiPzE6MH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7dC50aW1lRm9ybWF0PT09IjEyaCI/MTI6MjN9IgogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUtc2VwYXJhdG9yIj46PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZS1pbnB1dCIgCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnNlbGVjdGVkTWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfQogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7bj0+dC5oYW5kbGVNaW51dGVJbnB1dChuKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke3QubWludXRlSW5jcmVtZW50fHwxfSIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICR7dC50aW1lRm9ybWF0PT09IjEyaCI/d2AKICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFtLXBtLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYW0tcG0tYnV0dG9uICR7cj8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dC5zZXRBTVBNKCJhbSIpfQogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQU0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFtLXBtLWJ1dHRvbiAke3I/IiI6InNlbGVjdGVkIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnQuc2V0QU1QTSgicG0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIFBNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgOiIifQoKICAgICAgICAgICAgICA8IS0tIFRpbWV6b25lIFNlbGVjdG9yIC0tPgogICAgICAgICAgICAgICR7dC5lbmFibGVUaW1lem9uZT93YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lem9uZS1zZWxlY3Rvci10aXRsZSI+VGltZXpvbmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCAKICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGltZXpvbmUtc2VsZWN0IiAKICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHtuPT50LmhhbmRsZVRpbWV6b25lQ2hhbmdlKG4pfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHtzLm1hcChuPT53YAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHtuLnZhbHVlfSIgP3NlbGVjdGVkPSR7bi52YWx1ZT09PXQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke24ubGFiZWx9CiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgOiIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke3Quc2VsZWN0VG9kYXl9PgogICAgICAgICAgICAgICAgICBUb2RheQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIGNsZWFyLWJ1dHRvbiIgQGNsaWNrPSR7dC5jbGVhcn0+CiAgICAgICAgICAgICAgICAgIENsZWFyCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYH19KTt2YXIgSzEsa3QsRXgsT3E9YigoKT0+e3VlKCk7XzEoKTtKOXQoKTt0dXQoKTtpdXQoKTtFdCgpO0FsKCk7SzE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxrdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sRXg9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXSxyZSxqPVtdLG1lPVtdLHdlLEg9W10sY2U9W10sa2UsVz1bXSxEPVtdLE8sWj1bXSxZPVtdLG9lLGdlPVtdLGJlPVtdLCRlLEI9W10sUD1bXSxKLGZlPVtdLGRlPVtdLF9lLGhlPVtdLHRlPVtdLHplLEZlPVtdLEdlPVtdO3ZhciB5ZT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGVlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe3R5cGU6Qm9vbGVhbn0pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtJKHt0eXBlOk51bWJlcn0pXSx4PVtJKHt0eXBlOlN0cmluZ30pXSxGPVtJKHt0eXBlOlN0cmluZ30pXSxOPVtJKHt0eXBlOlN0cmluZ30pXSxxPVtJKHt0eXBlOkFycmF5fSldLEU9W0koe3R5cGU6TnVtYmVyfSldLFY9W0koe3R5cGU6U3RyaW5nfSldLHJlPVtJKHt0eXBlOkJvb2xlYW59KV0sd2U9W0koe3R5cGU6U3RyaW5nfSldLGtlPVtJKHt0eXBlOkFycmF5fSldLE89W0soKV0sb2U9W0soKV0sJGU9W0soKV0sSj1bSygpXSxfZT1bSygpXSx6ZT1bSygpXSxLMSh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+InZhbHVlImluIGFlLGdldDphZT0+YWUudmFsdWUsc2V0OihhZSx2ZSk9PnthZS52YWx1ZT12ZX19LG1ldGFkYXRhOmVlfSxuLG8pLEsxKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW5hYmxlVGltZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6YWU9PiJlbmFibGVUaW1lImluIGFlLGdldDphZT0+YWUuZW5hYmxlVGltZSxzZXQ6KGFlLHZlKT0+e2FlLmVuYWJsZVRpbWU9dmV9fSxtZXRhZGF0YTplZX0sYyxwKSxLMSh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRpbWVGb3JtYXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4idGltZUZvcm1hdCJpbiBhZSxnZXQ6YWU9PmFlLnRpbWVGb3JtYXQsc2V0OihhZSx2ZSk9PnthZS50aW1lRm9ybWF0PXZlfX0sbWV0YWRhdGE6ZWV9LGYsZyksSzEodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtaW51dGVJbmNyZW1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4ibWludXRlSW5jcmVtZW50ImluIGFlLGdldDphZT0+YWUubWludXRlSW5jcmVtZW50LHNldDooYWUsdmUpPT57YWUubWludXRlSW5jcmVtZW50PXZlfX0sbWV0YWRhdGE6ZWV9LHYsbSksSzEodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRlRm9ybWF0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+ImRhdGVGb3JtYXQiaW4gYWUsZ2V0OmFlPT5hZS5kYXRlRm9ybWF0LHNldDooYWUsdmUpPT57YWUuZGF0ZUZvcm1hdD12ZX19LG1ldGFkYXRhOmVlfSxNLFMpLEsxKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWluRGF0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6YWU9PiJtaW5EYXRlImluIGFlLGdldDphZT0+YWUubWluRGF0ZSxzZXQ6KGFlLHZlKT0+e2FlLm1pbkRhdGU9dmV9fSxtZXRhZGF0YTplZX0sXyxrKSxLMSh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1heERhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4ibWF4RGF0ZSJpbiBhZSxnZXQ6YWU9PmFlLm1heERhdGUsc2V0OihhZSx2ZSk9PnthZS5tYXhEYXRlPXZlfX0sbWV0YWRhdGE6ZWV9LEwsQSksSzEodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaXNhYmxlZERhdGVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+ImRpc2FibGVkRGF0ZXMiaW4gYWUsZ2V0OmFlPT5hZS5kaXNhYmxlZERhdGVzLHNldDooYWUsdmUpPT57YWUuZGlzYWJsZWREYXRlcz12ZX19LG1ldGFkYXRhOmVlfSxDLHopLEsxKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToid2Vla1N0YXJ0c09uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+IndlZWtTdGFydHNPbiJpbiBhZSxnZXQ6YWU9PmFlLndlZWtTdGFydHNPbixzZXQ6KGFlLHZlKT0+e2FlLndlZWtTdGFydHNPbj12ZX19LG1ldGFkYXRhOmVlfSxULCQpLEsxKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGxhY2Vob2xkZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4icGxhY2Vob2xkZXIiaW4gYWUsZ2V0OmFlPT5hZS5wbGFjZWhvbGRlcixzZXQ6KGFlLHZlKT0+e2FlLnBsYWNlaG9sZGVyPXZlfX0sbWV0YWRhdGE6ZWV9LFIsVSksSzEodGhpcyxudWxsLHJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW5hYmxlVGltZXpvbmUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4iZW5hYmxlVGltZXpvbmUiaW4gYWUsZ2V0OmFlPT5hZS5lbmFibGVUaW1lem9uZSxzZXQ6KGFlLHZlKT0+e2FlLmVuYWJsZVRpbWV6b25lPXZlfX0sbWV0YWRhdGE6ZWV9LGosbWUpLEsxKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRpbWV6b25lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+InRpbWV6b25lImluIGFlLGdldDphZT0+YWUudGltZXpvbmUsc2V0OihhZSx2ZSk9PnthZS50aW1lem9uZT12ZX19LG1ldGFkYXRhOmVlfSxILGNlKSxLMSh0aGlzLG51bGwsa2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJldmVudHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4iZXZlbnRzImluIGFlLGdldDphZT0+YWUuZXZlbnRzLHNldDooYWUsdmUpPT57YWUuZXZlbnRzPXZlfX0sbWV0YWRhdGE6ZWV9LFcsRCksSzEodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc09wZW5lZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6YWU9PiJpc09wZW5lZCJpbiBhZSxnZXQ6YWU9PmFlLmlzT3BlbmVkLHNldDooYWUsdmUpPT57YWUuaXNPcGVuZWQ9dmV9fSxtZXRhZGF0YTplZX0sWixZKSxLMSh0aGlzLG51bGwsb2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcGVuc1RvVG9wIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+Im9wZW5zVG9Ub3AiaW4gYWUsZ2V0OmFlPT5hZS5vcGVuc1RvVG9wLHNldDooYWUsdmUpPT57YWUub3BlbnNUb1RvcD12ZX19LG1ldGFkYXRhOmVlfSxnZSxiZSksSzEodGhpcyxudWxsLCRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWREYXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczphZT0+InNlbGVjdGVkRGF0ZSJpbiBhZSxnZXQ6YWU9PmFlLnNlbGVjdGVkRGF0ZSxzZXQ6KGFlLHZlKT0+e2FlLnNlbGVjdGVkRGF0ZT12ZX19LG1ldGFkYXRhOmVlfSxCLFApLEsxKHRoaXMsbnVsbCxKLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmlld0RhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4idmlld0RhdGUiaW4gYWUsZ2V0OmFlPT5hZS52aWV3RGF0ZSxzZXQ6KGFlLHZlKT0+e2FlLnZpZXdEYXRlPXZlfX0sbWV0YWRhdGE6ZWV9LGZlLGRlKSxLMSh0aGlzLG51bGwsX2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZEhvdXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmFlPT4ic2VsZWN0ZWRIb3VyImluIGFlLGdldDphZT0+YWUuc2VsZWN0ZWRIb3VyLHNldDooYWUsdmUpPT57YWUuc2VsZWN0ZWRIb3VyPXZlfX0sbWV0YWRhdGE6ZWV9LGhlLHRlKSxLMSh0aGlzLG51bGwsemUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZE1pbnV0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6YWU9PiJzZWxlY3RlZE1pbnV0ZSJpbiBhZSxnZXQ6YWU9PmFlLnNlbGVjdGVkTWludXRlLHNldDooYWUsdmUpPT57YWUuc2VsZWN0ZWRNaW51dGU9dmV9fSxtZXRhZGF0YTplZX0sRmUsR2UpLEsxKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmVlfSxudWxsLGEpLHllPWk9ZS52YWx1ZSxlZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplZX0pfXN0YXRpYyBkZW1vPVE5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIklucHV0Il07I2U9a3QodGhpcyxuLCIiKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoZWUpe3RoaXMuI2U9ZWV9I3Q9KGt0KHRoaXMsbyksa3QodGhpcyxjLCExKSk7Z2V0IGVuYWJsZVRpbWUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgZW5hYmxlVGltZShlZSl7dGhpcy4jdD1lZX0jYT0oa3QodGhpcyxwKSxrdCh0aGlzLGYsIjI0aCIpKTtnZXQgdGltZUZvcm1hdCgpe3JldHVybiB0aGlzLiNhfXNldCB0aW1lRm9ybWF0KGVlKXt0aGlzLiNhPWVlfSNpPShrdCh0aGlzLGcpLGt0KHRoaXMsdiwxKSk7Z2V0IG1pbnV0ZUluY3JlbWVudCgpe3JldHVybiB0aGlzLiNpfXNldCBtaW51dGVJbmNyZW1lbnQoZWUpe3RoaXMuI2k9ZWV9I3I9KGt0KHRoaXMsbSksa3QodGhpcyxNLCJZWVlZLU1NLUREIikpO2dldCBkYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuI3J9c2V0IGRhdGVGb3JtYXQoZWUpe3RoaXMuI3I9ZWV9I3M9KGt0KHRoaXMsUyksa3QodGhpcyxfLCIiKSk7Z2V0IG1pbkRhdGUoKXtyZXR1cm4gdGhpcy4jc31zZXQgbWluRGF0ZShlZSl7dGhpcy4jcz1lZX0jbj0oa3QodGhpcyxrKSxrdCh0aGlzLEwsIiIpKTtnZXQgbWF4RGF0ZSgpe3JldHVybiB0aGlzLiNufXNldCBtYXhEYXRlKGVlKXt0aGlzLiNuPWVlfSNvPShrdCh0aGlzLEEpLGt0KHRoaXMsQyxbXSkpO2dldCBkaXNhYmxlZERhdGVzKCl7cmV0dXJuIHRoaXMuI299c2V0IGRpc2FibGVkRGF0ZXMoZWUpe3RoaXMuI289ZWV9I2w9KGt0KHRoaXMseiksa3QodGhpcyxULDEpKTtnZXQgd2Vla1N0YXJ0c09uKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHdlZWtTdGFydHNPbihlZSl7dGhpcy4jbD1lZX0jYz0oa3QodGhpcywkKSxrdCh0aGlzLFIsIllZWVktTU0tREQiKSk7Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuI2N9c2V0IHBsYWNlaG9sZGVyKGVlKXt0aGlzLiNjPWVlfSNkPShrdCh0aGlzLFUpLGt0KHRoaXMsaiwhMSkpO2dldCBlbmFibGVUaW1lem9uZSgpe3JldHVybiB0aGlzLiNkfXNldCBlbmFibGVUaW1lem9uZShlZSl7dGhpcy4jZD1lZX0jcD0oa3QodGhpcyxtZSksa3QodGhpcyxILEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpO2dldCB0aW1lem9uZSgpe3JldHVybiB0aGlzLiNwfXNldCB0aW1lem9uZShlZSl7dGhpcy4jcD1lZX0jaD0oa3QodGhpcyxjZSksa3QodGhpcyxXLFtdKSk7Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLiNofXNldCBldmVudHMoZWUpe3RoaXMuI2g9ZWV9I3U9KGt0KHRoaXMsRCksa3QodGhpcyxaLCExKSk7Z2V0IGlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuI3V9c2V0IGlzT3BlbmVkKGVlKXt0aGlzLiN1PWVlfSNmPShrdCh0aGlzLFkpLGt0KHRoaXMsZ2UsITEpKTtnZXQgb3BlbnNUb1RvcCgpe3JldHVybiB0aGlzLiNmfXNldCBvcGVuc1RvVG9wKGVlKXt0aGlzLiNmPWVlfSNtPShrdCh0aGlzLGJlKSxrdCh0aGlzLEIsbnVsbCkpO2dldCBzZWxlY3RlZERhdGUoKXtyZXR1cm4gdGhpcy4jbX1zZXQgc2VsZWN0ZWREYXRlKGVlKXt0aGlzLiNtPWVlfSNnPShrdCh0aGlzLFApLGt0KHRoaXMsZmUsbmV3IERhdGUpKTtnZXQgdmlld0RhdGUoKXtyZXR1cm4gdGhpcy4jZ31zZXQgdmlld0RhdGUoZWUpe3RoaXMuI2c9ZWV9I2I9KGt0KHRoaXMsZGUpLGt0KHRoaXMsaGUsMCkpO2dldCBzZWxlY3RlZEhvdXIoKXtyZXR1cm4gdGhpcy4jYn1zZXQgc2VsZWN0ZWRIb3VyKGVlKXt0aGlzLiNiPWVlfSN2PShrdCh0aGlzLHRlKSxrdCh0aGlzLEZlLDApKTtnZXQgc2VsZWN0ZWRNaW51dGUoKXtyZXR1cm4gdGhpcy4jdn1zZXQgc2VsZWN0ZWRNaW51dGUoZWUpe3RoaXMuI3Y9ZWV9c3RhdGljIHN0eWxlcz1ldXQ7Z2V0VGltZXpvbmVzKCl7cmV0dXJuW3t2YWx1ZToiVVRDIixsYWJlbDoiVVRDIChDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSkifSx7dmFsdWU6IkFtZXJpY2EvTmV3X1lvcmsiLGxhYmVsOiJFYXN0ZXJuIFRpbWUgKFVTICYgQ2FuYWRhKSJ9LHt2YWx1ZToiQW1lcmljYS9DaGljYWdvIixsYWJlbDoiQ2VudHJhbCBUaW1lIChVUyAmIENhbmFkYSkifSx7dmFsdWU6IkFtZXJpY2EvRGVudmVyIixsYWJlbDoiTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpIn0se3ZhbHVlOiJBbWVyaWNhL0xvc19BbmdlbGVzIixsYWJlbDoiUGFjaWZpYyBUaW1lIChVUyAmIENhbmFkYSkifSx7dmFsdWU6IkFtZXJpY2EvUGhvZW5peCIsbGFiZWw6IkFyaXpvbmEifSx7dmFsdWU6IkFtZXJpY2EvQW5jaG9yYWdlIixsYWJlbDoiQWxhc2thIn0se3ZhbHVlOiJQYWNpZmljL0hvbm9sdWx1IixsYWJlbDoiSGF3YWlpIn0se3ZhbHVlOiJFdXJvcGUvTG9uZG9uIixsYWJlbDoiTG9uZG9uIn0se3ZhbHVlOiJFdXJvcGUvUGFyaXMiLGxhYmVsOiJQYXJpcyJ9LHt2YWx1ZToiRXVyb3BlL0JlcmxpbiIsbGFiZWw6IkJlcmxpbiJ9LHt2YWx1ZToiRXVyb3BlL01vc2NvdyIsbGFiZWw6Ik1vc2NvdyJ9LHt2YWx1ZToiQXNpYS9EdWJhaSIsbGFiZWw6IkR1YmFpIn0se3ZhbHVlOiJBc2lhL0tvbGthdGEiLGxhYmVsOiJJbmRpYSBTdGFuZGFyZCBUaW1lIn0se3ZhbHVlOiJBc2lhL1NoYW5naGFpIixsYWJlbDoiQ2hpbmEgU3RhbmRhcmQgVGltZSJ9LHt2YWx1ZToiQXNpYS9Ub2t5byIsbGFiZWw6IlRva3lvIn0se3ZhbHVlOiJBdXN0cmFsaWEvU3lkbmV5IixsYWJlbDoiU3lkbmV5In0se3ZhbHVlOiJQYWNpZmljL0F1Y2tsYW5kIixsYWJlbDoiQXVja2xhbmQifV19cmVuZGVyKCl7cmV0dXJuIGF1dCh0aGlzKX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYW5kbGVDbGlja091dHNpZGU9dGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX1hc3luYyBmaXJzdFVwZGF0ZWQoKXtpZih0aGlzLnZhbHVlfHwodGhpcy52YWx1ZT0iIiksdGhpcy52YWx1ZSl0cnl7bGV0IGVlPW5ldyBEYXRlKHRoaXMudmFsdWUpO2lzTmFOKGVlLmdldFRpbWUoKSl8fCh0aGlzLnNlbGVjdGVkRGF0ZT1lZSx0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKGVlKSx0aGlzLnNlbGVjdGVkSG91cj1lZS5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9ZWUuZ2V0TWludXRlcygpKX1jYXRjaHt9ZWxzZXtsZXQgZWU9bmV3IERhdGU7dGhpcy52aWV3RGF0ZT1uZXcgRGF0ZShlZSksdGhpcy5zZWxlY3RlZEhvdXI9ZWUuZ2V0SG91cnMoKSx0aGlzLnNlbGVjdGVkTWludXRlPTB9fWZvcm1hdERhdGUoZWUpe2lmKCFlZSlyZXR1cm4iIjt0cnl7bGV0IGFlPW5ldyBEYXRlKGVlKTtpZihpc05hTihhZS5nZXRUaW1lKCkpKXJldHVybiIiO2xldCB2ZT10aGlzLmRhdGVGb3JtYXQsUGU9YWUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGplPShhZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLHd0PWFlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtpZih2ZT12ZS5yZXBsYWNlKCJZWVlZIix3dCksdmU9dmUucmVwbGFjZSgiWVkiLHd0LnNsaWNlKC0yKSksdmU9dmUucmVwbGFjZSgiTU0iLGplKSx2ZT12ZS5yZXBsYWNlKCJERCIsUGUpLHRoaXMuZW5hYmxlVGltZSl7bGV0IG90PWFlLmdldEhvdXJzKCksJHQ9b3Q9PT0wPzEyOm90PjEyP290LTEyOm90LEt0PWFlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxpZT1vdD49MTI/IlBNIjoiQU0iO3RoaXMudGltZUZvcm1hdD09PSIxMmgiP3ZlKz1gICR7JHR9OiR7S3R9ICR7aWV9YDp2ZSs9YCAke290LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke0t0fWB9aWYodGhpcy5lbmFibGVUaW1lem9uZSl7bGV0IEt0PW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIse3RpbWVab25lTmFtZToic2hvcnQiLHRpbWVab25lOnRoaXMudGltZXpvbmV9KS5mb3JtYXRUb1BhcnRzKGFlKS5maW5kKGllPT5pZS50eXBlPT09InRpbWVab25lTmFtZSIpO0t0JiYodmUrPWAgJHtLdC52YWx1ZX1gKX1yZXR1cm4gdmV9Y2F0Y2h7cmV0dXJuIiJ9fWhhbmRsZUNsaWNrT3V0c2lkZT0oa3QodGhpcyxHZSksZWU9PntlZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyh0aGlzKXx8KHRoaXMuaXNPcGVuZWQ9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKSl9KTthc3luYyB0b2dnbGVDYWxlbmRhcigpe2lmKCF0aGlzLmRpc2FibGVkKWlmKHRoaXMuaXNPcGVuZWQ9IXRoaXMuaXNPcGVuZWQsdGhpcy5pc09wZW5lZCl7bGV0IGFlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuaW5wdXQtY29udGFpbmVyIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdmU9d2luZG93LmlubmVySGVpZ2h0LWFlLmJvdHRvbSxQZT1hZS50b3A7dGhpcy5vcGVuc1RvVG9wPXZlPDQwMCYmUGU+dmUsc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9LDApfWVsc2UgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX1nZXREYXlzSW5Nb250aCgpe2xldCBlZT10aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksYWU9dGhpcy52aWV3RGF0ZS5nZXRNb250aCgpLHZlPW5ldyBEYXRlKGVlLGFlLDEpLFBlPW5ldyBEYXRlKGVlLGFlKzEsMCksamU9W10sd3Q9dGhpcy53ZWVrU3RhcnRzT249PT0xP3ZlLmdldERheSgpPT09MD82OnZlLmdldERheSgpLTE6dmUuZ2V0RGF5KCk7Zm9yKGxldCAkdD13dDskdD4wOyR0LS0pamUucHVzaChuZXcgRGF0ZShlZSxhZSwxLSR0KSk7Zm9yKGxldCAkdD0xOyR0PD1QZS5nZXREYXRlKCk7JHQrKylqZS5wdXNoKG5ldyBEYXRlKGVlLGFlLCR0KSk7bGV0IG90PTQyLWplLmxlbmd0aDtmb3IobGV0ICR0PTE7JHQ8PW90OyR0KyspamUucHVzaChuZXcgRGF0ZShlZSxhZSsxLCR0KSk7cmV0dXJuIGplfWlzVG9kYXkoZWUpe2xldCBhZT1uZXcgRGF0ZTtyZXR1cm4gZWUuZ2V0RGF0ZSgpPT09YWUuZ2V0RGF0ZSgpJiZlZS5nZXRNb250aCgpPT09YWUuZ2V0TW9udGgoKSYmZWUuZ2V0RnVsbFllYXIoKT09PWFlLmdldEZ1bGxZZWFyKCl9aXNTZWxlY3RlZChlZSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlP2VlLmdldERhdGUoKT09PXRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSYmZWUuZ2V0TW9udGgoKT09PXRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkmJmVlLmdldEZ1bGxZZWFyKCk9PT10aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpOiExfWlzRGlzYWJsZWQoZWUpe2lmKHRoaXMubWluRGF0ZSl7bGV0IGFlPW5ldyBEYXRlKHRoaXMubWluRGF0ZSk7aWYoZWU8YWUpcmV0dXJuITB9aWYodGhpcy5tYXhEYXRlKXtsZXQgYWU9bmV3IERhdGUodGhpcy5tYXhEYXRlKTtpZihlZT5hZSlyZXR1cm4hMH1yZXR1cm4gdGhpcy5kaXNhYmxlZERhdGVzJiZ0aGlzLmRpc2FibGVkRGF0ZXMubGVuZ3RoPjA/dGhpcy5kaXNhYmxlZERhdGVzLnNvbWUoYWU9Pnt0cnl7bGV0IHZlPW5ldyBEYXRlKGFlKTtyZXR1cm4gZWUuZ2V0RGF0ZSgpPT09dmUuZ2V0RGF0ZSgpJiZlZS5nZXRNb250aCgpPT09dmUuZ2V0TW9udGgoKSYmZWUuZ2V0RnVsbFllYXIoKT09PXZlLmdldEZ1bGxZZWFyKCl9Y2F0Y2h7cmV0dXJuITF9fSk6ITF9Z2V0RXZlbnRzRm9yRGF0ZShlZSl7aWYoIXRoaXMuZXZlbnRzfHx0aGlzLmV2ZW50cy5sZW5ndGg9PT0wKXJldHVybltdO2xldCBhZT1gJHtlZS5nZXRGdWxsWWVhcigpfS0keyhlZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0ke2VlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIodmU9PnZlLmRhdGU9PT1hZSl9c2VsZWN0RGF0ZShlZSl7dGhpcy5zZWxlY3RlZERhdGU9bmV3IERhdGUoZWUuZ2V0RnVsbFllYXIoKSxlZS5nZXRNb250aCgpLGVlLmdldERhdGUoKSx0aGlzLnNlbGVjdGVkSG91cix0aGlzLnNlbGVjdGVkTWludXRlKSx0aGlzLnZhbHVlPXRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpLHRoaXMuZW5hYmxlVGltZXx8KHRoaXMuaXNPcGVuZWQ9ITEpfXNlbGVjdFRvZGF5KCl7bGV0IGVlPW5ldyBEYXRlO3RoaXMuc2VsZWN0ZWREYXRlPWVlLHRoaXMudmlld0RhdGU9bmV3IERhdGUoZWUpLHRoaXMuc2VsZWN0ZWRIb3VyPWVlLmdldEhvdXJzKCksdGhpcy5zZWxlY3RlZE1pbnV0ZT1lZS5nZXRNaW51dGVzKCksdGhpcy52YWx1ZT10aGlzLmZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKHRoaXMuc2VsZWN0ZWREYXRlKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx0aGlzLmVuYWJsZVRpbWV8fCh0aGlzLmlzT3BlbmVkPSExKX1jbGVhcigpe3RoaXMudmFsdWU9IiIsdGhpcy5zZWxlY3RlZERhdGU9bnVsbCx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx0aGlzLmlzT3BlbmVkPSExfXByZXZpb3VzTW9udGgoKXt0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCktMSwxKX1uZXh0TW9udGgoKXt0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkrMSwxKX1oYW5kbGVIb3VySW5wdXQoZWUpe2xldCBhZT1lZS50YXJnZXQsdmU9cGFyc2VJbnQoYWUudmFsdWUpfHwwO3RoaXMudGltZUZvcm1hdD09PSIxMmgiPyh2ZT1NYXRoLm1heCgxLE1hdGgubWluKDEyLHZlKSksdGhpcy5zZWxlY3RlZEhvdXI+PTEyJiZ2ZSE9PTEyP3RoaXMuc2VsZWN0ZWRIb3VyPXZlKzEyOnRoaXMuc2VsZWN0ZWRIb3VyPDEyJiZ2ZT09PTEyP3RoaXMuc2VsZWN0ZWRIb3VyPTA6dGhpcy5zZWxlY3RlZEhvdXI9dmUpOnRoaXMuc2VsZWN0ZWRIb3VyPU1hdGgubWF4KDAsTWF0aC5taW4oMjMsdmUpKSx0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKX1oYW5kbGVNaW51dGVJbnB1dChlZSl7bGV0IGFlPWVlLnRhcmdldCx2ZT1wYXJzZUludChhZS52YWx1ZSl8fDA7dmU9TWF0aC5tYXgoMCxNYXRoLm1pbig1OSx2ZSkpLHRoaXMubWludXRlSW5jcmVtZW50JiZ0aGlzLm1pbnV0ZUluY3JlbWVudD4xJiYodmU9TWF0aC5yb3VuZCh2ZS90aGlzLm1pbnV0ZUluY3JlbWVudCkqdGhpcy5taW51dGVJbmNyZW1lbnQpLHRoaXMuc2VsZWN0ZWRNaW51dGU9dmUsdGhpcy51cGRhdGVTZWxlY3RlZERhdGVUaW1lKCl9c2V0QU1QTShlZSl7ZWU9PT0iYW0iJiZ0aGlzLnNlbGVjdGVkSG91cj49MTI/dGhpcy5zZWxlY3RlZEhvdXItPTEyOmVlPT09InBtIiYmdGhpcy5zZWxlY3RlZEhvdXI8MTImJih0aGlzLnNlbGVjdGVkSG91cis9MTIpLHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpfXVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKXt0aGlzLnNlbGVjdGVkRGF0ZSYmKHRoaXMuc2VsZWN0ZWREYXRlPW5ldyBEYXRlKHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSx0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksdGhpcy5zZWxlY3RlZEhvdXIsdGhpcy5zZWxlY3RlZE1pbnV0ZSksdGhpcy52YWx1ZT10aGlzLmZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKHRoaXMuc2VsZWN0ZWREYXRlKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9aGFuZGxlVGltZXpvbmVDaGFuZ2UoZWUpe2xldCBhZT1lZS50YXJnZXQ7dGhpcy50aW1lem9uZT1hZS52YWx1ZSx0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKX1mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZShlZSl7aWYoIXRoaXMuZW5hYmxlVGltZXpvbmUpcmV0dXJuIGVlLnRvSVNPU3RyaW5nKCk7bGV0IHZlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIse3llYXI6Im51bWVyaWMiLG1vbnRoOiIyLWRpZ2l0IixkYXk6IjItZGlnaXQiLGhvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0Iixob3VyMTI6ITEsdGltZVpvbmU6dGhpcy50aW1lem9uZSx0aW1lWm9uZU5hbWU6InNob3J0In0pLmZvcm1hdFRvUGFydHMoZWUpLFBlPXt9O3ZlLmZvckVhY2gob3Q9PntQZVtvdC50eXBlXT1vdC52YWx1ZX0pO2xldCBqZT1gJHtQZS55ZWFyfS0ke1BlLm1vbnRofS0ke1BlLmRheX1UJHtQZS5ob3VyfToke1BlLm1pbnV0ZX06JHtQZS5zZWNvbmR9YCx3dD10aGlzLmdldFRpbWV6b25lT2Zmc2V0KGVlLHRoaXMudGltZXpvbmUpO3JldHVybmAke2plfSR7d3R9YH1nZXRUaW1lem9uZU9mZnNldChlZSxhZSl7bGV0IHZlPW5ldyBEYXRlKGVlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIse3RpbWVab25lOmFlfSkpLFBlPW5ldyBEYXRlKGVlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIse3RpbWVab25lOiJVVEMifSkpLGplPSh2ZS5nZXRUaW1lKCktUGUuZ2V0VGltZSgpKS8oMWUzKjYwKSx3dD1NYXRoLmZsb29yKE1hdGguYWJzKGplKS82MCksb3Q9TWF0aC5hYnMoamUpJTYwO3JldHVybmAke2plPj0wPyIrIjoiLSJ9JHt3dC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtvdC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWhhbmRsZUtleWRvd24oZWUpe2VlLmtleT09PSJFbnRlciJ8fGVlLmtleT09PSIgIj8oZWUucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZUNhbGVuZGFyKCkpOmVlLmtleT09PSJFc2NhcGUiJiZ0aGlzLmlzT3BlbmVkJiYoZWUucHJldmVudERlZmF1bHQoKSx0aGlzLmlzT3BlbmVkPSExKX1jbGVhclZhbHVlKGVlKXtlZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWREYXRlPW51bGwsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9aGFuZGxlTWFudWFsSW5wdXQoZWUpe2xldCB2ZT1lZS50YXJnZXQudmFsdWUudHJpbSgpO2lmKCF2ZSl7dGhpcy52YWx1ZT0iIix0aGlzLnNlbGVjdGVkRGF0ZT1udWxsO3JldHVybn1sZXQgUGU9dGhpcy5wYXJzZU1hbnVhbERhdGUodmUpO1BlJiYhaXNOYU4oUGUuZ2V0VGltZSgpKSYmKHRoaXMudmFsdWU9UGUudG9JU09TdHJpbmcoKSx0aGlzLnNlbGVjdGVkRGF0ZT1QZSx0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKFBlKSx0aGlzLnNlbGVjdGVkSG91cj1QZS5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9UGUuZ2V0TWludXRlcygpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpKX1oYW5kbGVJbnB1dEJsdXIoZWUpe2xldCBhZT1lZS50YXJnZXQsdmU9YWUudmFsdWUudHJpbSgpO2lmKCF2ZSl7dGhpcy52YWx1ZT0iIix0aGlzLnNlbGVjdGVkRGF0ZT1udWxsLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpO3JldHVybn1sZXQgUGU9dGhpcy5wYXJzZU1hbnVhbERhdGUodmUpO1BlJiYhaXNOYU4oUGUuZ2V0VGltZSgpKT8odGhpcy52YWx1ZT1QZS50b0lTT1N0cmluZygpLHRoaXMuc2VsZWN0ZWREYXRlPVBlLHRoaXMudmlld0RhdGU9bmV3IERhdGUoUGUpLHRoaXMuc2VsZWN0ZWRIb3VyPVBlLmdldEhvdXJzKCksdGhpcy5zZWxlY3RlZE1pbnV0ZT1QZS5nZXRNaW51dGVzKCksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyksYWUudmFsdWU9dGhpcy5mb3JtYXREYXRlKHRoaXMudmFsdWUpKTphZS52YWx1ZT10aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSl9cGFyc2VNYW51YWxEYXRlKGVlKXtpZighZWUpcmV0dXJuIG51bGw7bGV0IGFlPWVlLnNwbGl0KCIgIiksdmU9YWVbMF0sUGU9YWVbMV18fCIiLGplPW51bGwsd3Q9dmUubWF0Y2goL14oXGR7NH0pLShcZHsxLDJ9KS0oXGR7MSwyfSkkLyk7aWYod3Qpe2xldFtvdCwkdCxLdCxpZV09d3Q7amU9bmV3IERhdGUocGFyc2VJbnQoJHQpLHBhcnNlSW50KEt0KS0xLHBhcnNlSW50KGllKSl9aWYoIWplKXtsZXQgb3Q9dmUubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTtpZihvdCl7bGV0WyR0LEt0LGllLHNlXT1vdDtqZT1uZXcgRGF0ZShwYXJzZUludChzZSkscGFyc2VJbnQoaWUpLTEscGFyc2VJbnQoS3QpKX19aWYoIWplKXtsZXQgb3Q9dmUubWF0Y2goL14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezR9KSQvKTtpZihvdCl7bGV0WyR0LEt0LGllLHNlXT1vdDtqZT1uZXcgRGF0ZShwYXJzZUludChzZSkscGFyc2VJbnQoS3QpLTEscGFyc2VJbnQoaWUpKX19aWYoIWplfHxpc05hTihqZS5nZXRUaW1lKCkpKXJldHVybiBudWxsO2lmKFBlKXtsZXQgb3Q9UGUubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTtpZihvdCl7bGV0WyR0LEt0LGllXT1vdDtqZS5zZXRIb3VycyhwYXJzZUludChLdCkpLGplLnNldE1pbnV0ZXMocGFyc2VJbnQoaWUpKX19ZWxzZSBpZighdGhpcy5lbmFibGVUaW1lKXtsZXQgb3Q9bmV3IERhdGU7amUuc2V0SG91cnMob3QuZ2V0SG91cnMoKSksamUuc2V0TWludXRlcyhvdC5nZXRNaW51dGVzKCkpLGplLnNldFNlY29uZHMoMCksamUuc2V0TWlsbGlzZWNvbmRzKDApfXJldHVybiBqZX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKGVlKXtpZih0aGlzLnZhbHVlPWVlLGVlKXRyeXtsZXQgYWU9bmV3IERhdGUoZWUpO2lzTmFOKGFlLmdldFRpbWUoKSl8fCh0aGlzLnNlbGVjdGVkRGF0ZT1hZSx0aGlzLnZpZXdEYXRlPW5ldyBEYXRlKGFlKSx0aGlzLnNlbGVjdGVkSG91cj1hZS5nZXRIb3VycygpLHRoaXMuc2VsZWN0ZWRNaW51dGU9YWUuZ2V0TWludXRlcygpKX1jYXRjaHt9fXN0YXRpY3trdChpLGEpfX07cmV0dXJuIHllPWl9KSgpfSk7dmFyIFJxPWIoKCk9PntPcSgpfSk7dmFyIHJ1dCxzdXQ9YigoKT0+e3VlKCk7eDEoKTtnMigpO3J1dD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmlucHV0LWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLmludGVyYWN0aXZlLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAub3V0cHV0LXRleHQgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0IikuZm9yRWFjaChpPT57aS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IixyPT57Y29uc29sZS5sb2coYElucHV0ICIke2kubGFiZWx9IiBjaGFuZ2VkIHRvOmAsaS5nZXRWYWx1ZSgpKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pntjb25zb2xlLmxvZyhgSW5wdXQgIiR7aS5sYWJlbH0iIGxvc3QgZm9jdXNgKX0pfSksdC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJwYXNzd29yZCJdJykmJmNvbnNvbGUubG9nKCJQYXNzd29yZCBpbnB1dCBpbmNsdWRlcyB2aXNpYmlsaXR5IHRvZ2dsZSIpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUZXh0IElucHV0cyJ9IC5zdWJ0aXRsZT0keyJTdGFuZGFyZCB0ZXh0IGlucHV0cyB3aXRoIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifQogICAgICAgICAgICAudmFsdWU9JHsiam9obmRvZSJ9CiAgICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifQogICAgICAgICAgICAudmFsdWU9JHsiam9obkBleGFtcGxlLmNvbSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJXZSB3aWxsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwgd2l0aCBhbnlvbmUifQogICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCJ9CiAgICAgICAgICAgIC5pc1Bhc3N3b3JkQm9vbD0keyEwfQogICAgICAgICAgICAudmFsdWU9JHsic2VjcmV0MTIzIn0KICAgICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0IikuZm9yRWFjaChyPT57bGV0IHM9d2luZG93LmdldENvbXB1dGVkU3R5bGUocik7Y29uc29sZS5sb2coYEhvcml6b250YWwgaW5wdXQgIiR7ci5sYWJlbH0iIGRpc3BsYXk6YCxzLmRpc3BsYXkpfSk7bGV0IGE9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJmaXJzdE5hbWUiXScpLGk9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJsYXN0TmFtZSJdJyk7aWYoYSYmaSl7bGV0IHI9KCk9PntsZXQgcz1hLmdldFZhbHVlKCksbj1pLmdldFZhbHVlKCk7Y29uc29sZS5sb2coYEZ1bGwgbmFtZTogJHtzfSAke259YCl9O2EuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsciksaS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IixyKX19fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkgZm9yIGNvbXBhY3QgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJGaXJzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJKb2huIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImZpcnN0TmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJMYXN0IE5hbWUifSAKICAgICAgICAgICAgLnZhbHVlPSR7IkRvZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJsYXN0TmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBZ2UifSAKICAgICAgICAgICAgLnZhbHVlPSR7IjI4In0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImFnZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0IikuZm9yRWFjaChpPT57bGV0IHI9aS5sYWJlbFBvc2l0aW9uO2NvbnNvbGUubG9nKGBJbnB1dCAiJHtpLmxhYmVsfSIgaGFzIGxhYmVsIHBvc2l0aW9uOiAke3J9YCl9KTtsZXQgYT10LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RlZXMtaW5wdXQtdGV4dFtsYWJlbFBvc2l0aW9uPSJsZWZ0Il0nKTthLmxlbmd0aD4wJiZjb25zb2xlLmxvZyhgJHthLmxlbmd0aH0gaW5wdXRzIGhhdmUgbGVmdC1hbGlnbmVkIGxhYmVscyBmb3IgaW5saW5lIGxheW91dGApfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYWJlbCBQb3NpdGlvbnMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGxhYmVsIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHZhcmlvdXMgbGF5b3V0cyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IkxhYmVsIG9uIFRvcCAoRGVmYXVsdCkifQogICAgICAgICAgICAudmFsdWU9JHsiU3RhbmRhcmQgbGF5b3V0In0KICAgICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsidG9wIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBMZWZ0In0KICAgICAgICAgICAgLnZhbHVlPSR7IklubGluZSBsYWJlbCJ9CiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJDaXR5In0gCiAgICAgICAgICAgIC52YWx1ZT0keyJOZXcgWW9yayJ9IAogICAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiWklQIENvZGUifQogICAgICAgICAgICAudmFsdWU9JHsiMTAwMDEifQogICAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHRbcmVxdWlyZWRdIiksYT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKSxpPXQucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdJyk7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2UuZ2V0VmFsdWUoKXx8Y29uc29sZS5sb2coIlJlcXVpcmVkIGZpZWxkIGlzIGVtcHR5ISIpfSksYSYmY29uc29sZS5sb2coIkRpc2FibGVkIGlucHV0IGNhbm5vdCBiZSBlZGl0ZWQiKSxpJiYoY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLGkudmFsaWRhdGlvblRleHQpLGkuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsKCk9PntsZXQgcj1pLmdldFZhbHVlKCk7ci5pbmNsdWRlcygiQCIpJiZyLmluY2x1ZGVzKCIuIikmJihpLnZhbGlkYXRpb25TdGF0ZT0idmFsaWQiLGkudmFsaWRhdGlvblRleHQ9IiIsY29uc29sZS5sb2coIkVtYWlsIHZhbGlkYXRpb24gcGFzc2VkISIpKX0pKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVmFsaWRhdGlvbiAmIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgdmFsaWRhdGlvbiBzdGF0ZXMgYW5kIGlucHV0IGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgRmllbGQifQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLmtleT0keyJyZXF1aXJlZEZpZWxkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBGaWVsZCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJDYW5ub3QgZWRpdCB0aGlzIn0KICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiRmllbGQgd2l0aCBFcnJvciJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJpbnZhbGlkQCJ9CiAgICAgICAgICAgIC52YWxpZGF0aW9uVGV4dD0keyJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIn0KICAgICAgICAgICAgLnZhbGlkYXRpb25TdGF0ZT0keyJpbnZhbGlkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHRbaXNQYXNzd29yZEJvb2xdIikuZm9yRWFjaChhPT57bGV0IGk9KCk9PntsZXQgcj1hLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7ciYmY29uc29sZS5sb2coYFBhc3N3b3JkIGZpZWxkICIke2EubGFiZWx9IiB0eXBlOmAsci50eXBlKX07aWYoYS5zaGFkb3dSb290KXtsZXQgcj1uZXcgTXV0YXRpb25PYnNlcnZlcihpKSxzPWEuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpO3MmJnIub2JzZXJ2ZShzLHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInR5cGUiXX0pfX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBZHZhbmNlZCBGZWF0dXJlcyJ9IC5zdWJ0aXRsZT0keyJQYXNzd29yZCB2aXNpYmlsaXR5IHRvZ2dsZSBhbmQgb3RoZXIgYWR2YW5jZWQgZmVhdHVyZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9CiAgICAgICAgICAgIC5pc1Bhc3N3b3JkQm9vbD0keyEwfQogICAgICAgICAgICAudmFsdWU9JHsibXlTZWN1cmVQYXNzd29yZDEyMyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0KICAgICAgICAgICAgLmlzUGFzc3dvcmRCb29sPSR7ITB9CiAgICAgICAgICAgIC52YWx1ZT0keyJzay0xMjM0NTY3ODkwYWJjZGVmIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IktlZXAgdGhpcyBrZXkgc2VjdXJlIGFuZCBuZXZlciBzaGFyZSBpdCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0IiksYT10LnF1ZXJ5U2VsZWN0b3IoIiN0ZXh0LWlucHV0LW91dHB1dCIpO2lmKGUmJmEpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIscj0+e2xldCBzPXIuZGV0YWlsLmdldFZhbHVlKCk7YS50ZXh0Q29udGVudD1gQ3VycmVudCB2YWx1ZTogIiR7c30iYH0pLGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT57Y29uc29sZS5sb2coIklucHV0IGZvY3VzZWQiKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pntjb25zb2xlLmxvZygiSW5wdXQgYmx1cnJlZCIpfSk7bGV0IGk9MDtlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCgpPT57aSsrLGNvbnNvbGUubG9nKGBLZXlwcmVzcyBjb3VudDogJHtpfWApfSl9fX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlRyeSB0eXBpbmcgaW4gdGhlIGlucHV0cyB0byBzZWUgcmVhbC10aW1lIHZhbHVlIGNoYW5nZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkR5bmFtaWMgSW5wdXQifSAKICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJUeXBlIHNvbWV0aGluZyBoZXJlLi4uIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJhY3RpdmUtc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGlkPSJ0ZXh0LWlucHV0LW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5DdXJyZW50IHZhbHVlOiAiIjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmB9KTt2YXIgUTAsV2EsUHgsdW89YigoKT0+e3ZpKCk7XzEoKTtzdXQoKTtwYSgpO3VlKCk7VmUoKTtRMD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFdhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxQeD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtdGV4dCIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGQ9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLGw9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLHk9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLHg9W0koe3JlZmxlY3Q6ITB9KV0sRj1bSSh7fSldLFEwKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJ2YWx1ZSJpbiBBLGdldDpBPT5BLnZhbHVlLHNldDooQSxxKT0+e0EudmFsdWU9cX19LG1ldGFkYXRhOkx9LG4sbyksUTAodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1Bhc3N3b3JkQm9vbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+ImlzUGFzc3dvcmRCb29sImluIEEsZ2V0OkE9PkEuaXNQYXNzd29yZEJvb2wsc2V0OihBLHEpPT57QS5pc1Bhc3N3b3JkQm9vbD1xfX0sbWV0YWRhdGE6TH0sYyxwKSxRMCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dQYXNzd29yZEJvb2wiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJzaG93UGFzc3dvcmRCb29sImluIEEsZ2V0OkE9PkEuc2hvd1Bhc3N3b3JkQm9vbCxzZXQ6KEEscSk9PntBLnNob3dQYXNzd29yZEJvb2w9cX19LG1ldGFkYXRhOkx9LGYsZyksUTAodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uU3RhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJ2YWxpZGF0aW9uU3RhdGUiaW4gQSxnZXQ6QT0+QS52YWxpZGF0aW9uU3RhdGUsc2V0OihBLHEpPT57QS52YWxpZGF0aW9uU3RhdGU9cX19LG1ldGFkYXRhOkx9LHYsbSksUTAodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InZhbGlkYXRpb25UZXh0ImluIEEsZ2V0OkE9PkEudmFsaWRhdGlvblRleHQsc2V0OihBLHEpPT57QS52YWxpZGF0aW9uVGV4dD1xfX0sbWV0YWRhdGE6TH0sTSxTKSxRMCh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbGlkYXRpb25GdW5jdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InZhbGlkYXRpb25GdW5jdGlvbiJpbiBBLGdldDpBPT5BLnZhbGlkYXRpb25GdW5jdGlvbixzZXQ6KEEscSk9PntBLnZhbGlkYXRpb25GdW5jdGlvbj1xfX0sbWV0YWRhdGE6TH0sXyxrKSxRMChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpMfSxudWxsLGEpLE49aT1lLnZhbHVlLEwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TH0pfXN0YXRpYyBkZW1vPXJ1dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIklucHV0Il07I2U9V2EodGhpcyxuLCIiKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoTCl7dGhpcy4jZT1MfSN0PShXYSh0aGlzLG8pLFdhKHRoaXMsYywhMSkpO2dldCBpc1Bhc3N3b3JkQm9vbCgpe3JldHVybiB0aGlzLiN0fXNldCBpc1Bhc3N3b3JkQm9vbChMKXt0aGlzLiN0PUx9I2E9KFdhKHRoaXMscCksV2EodGhpcyxmLCExKSk7Z2V0IHNob3dQYXNzd29yZEJvb2woKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd1Bhc3N3b3JkQm9vbChMKXt0aGlzLiNhPUx9I2k9KFdhKHRoaXMsZyksV2EodGhpcyx2LHZvaWQgMCkpO2dldCB2YWxpZGF0aW9uU3RhdGUoKXtyZXR1cm4gdGhpcy4jaX1zZXQgdmFsaWRhdGlvblN0YXRlKEwpe3RoaXMuI2k9TH0jcj0oV2EodGhpcyxtKSxXYSh0aGlzLE0sIiIpKTtnZXQgdmFsaWRhdGlvblRleHQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgdmFsaWRhdGlvblRleHQoTCl7dGhpcy4jcj1MfSNzPShXYSh0aGlzLFMpLFdhKHRoaXMsXyx2b2lkIDApKTtnZXQgdmFsaWRhdGlvbkZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuI3N9c2V0IHZhbGlkYXRpb25GdW5jdGlvbihMKXt0aGlzLiNzPUx9c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke3QxfTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBQYXNzd29yZCB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5zaG93UGFzc3dvcmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMXB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM4cHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDVweCA1cHggMDsKICAgICAgfQoKICAgICAgLnNob3dQYXNzd29yZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4xKSIsImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb25Db250YWluZXIud2FybiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlIC8gMC4xKSIsImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb25Db250YWluZXIudmFsaWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAvKiBFcnJvciBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4wNSkiLCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBXYXJuaW5nIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2guYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjA1KSIsImhzbCgyNSA5NSUgNjMlIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2guYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4wNSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjA1KSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICBpbnB1dCB7CiAgICAgICAgICBmb250LWZhbWlseTogJHt0aGlzLmlzUGFzc3dvcmRCb29sP1UwOiJpbmhlcml0In07CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogJHt0aGlzLmlzUGFzc3dvcmRCb29sPyIwLjVweCI6Im5vcm1hbCJ9OwogICAgICAgICAgcGFkZGluZy1yaWdodDogJHt0aGlzLmlzUGFzc3dvcmRCb29sPyI0OHB4IjoiMTJweCJ9OwogICAgICAgIH0KICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQ/UWAKICAgICAgICAgICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgYDpRYAogICAgICAgICAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICAgICAgICAgIGhlaWdodDogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iJHt0aGlzLmlzUGFzc3dvcmRCb29sJiYhdGhpcy5zaG93UGFzc3dvcmRCb29sPyJwYXNzd29yZCI6InRleHQifSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy52YWx1ZX0KICAgICAgICAgICAgQGlucHV0PSIke3RoaXMudXBkYXRlVmFsdWV9IgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHt0aGlzLmxhYmVsPyIiOiJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sP3dgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbD8ibHVjaWRlOkV5ZSI6Imx1Y2lkZTpFeWVPZmYifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGA6d2BgfQogICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0P3dgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uQ29udGFpbmVyICR7dGhpcy52YWxpZGF0aW9uU3RhdGV8fCJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDp3YDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1maXJzdFVwZGF0ZWQoKXt9YXN5bmMgdXBkYXRlVmFsdWUoTCl7bGV0IEE9TC50YXJnZXQ7dGhpcy52YWx1ZT1BLnZhbHVlLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoTCl7dGhpcy52YWx1ZT1MfWFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpe3RoaXMuc2hvd1Bhc3N3b3JkQm9vbD0hdGhpcy5zaG93UGFzc3dvcmRCb29sfWFzeW5jIGZvY3VzKCl7dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKX1hc3luYyBibHVyKCl7dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuYmx1cigpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxXYSh0aGlzLGspfXN0YXRpY3tXYShpLGEpfX07cmV0dXJuIE49aX0pKCl9KTt2YXIgbnV0LG91dD1iKCgpPT57dWUoKTt4MSgpO2cyKCk7bnV0PSgpPT53YAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke1FgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtdG90YWwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBib3JkZXItdG9wOiAycHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiU2ltcGxlIHByb2R1Y3QgZGlzcGxheSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IldpcmVsZXNzIEJsdWV0b290aCBIZWFkcGhvbmVzIixjYXRlZ29yeToiQXVkaW8iLGRlc2NyaXB0aW9uOiJQcmVtaXVtIHNvdW5kIHF1YWxpdHkgd2l0aCBhY3RpdmUgbm9pc2UgY2FuY2VsbGF0aW9uIixwcmljZToxNDkuOTksb3JpZ2luYWxQcmljZToxOTkuOTksaWNvbk5hbWU6Imx1Y2lkZTpoZWFkcGhvbmVzIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJTbWFydCBXYXRjaCBTZXJpZXMgNyIsY2F0ZWdvcnk6IldlYXJhYmxlcyIsZGVzY3JpcHRpb246IlRyYWNrIHlvdXIgZml0bmVzcyBhbmQgc3RheSBjb25uZWN0ZWQgb24gdGhlIGdvIixwcmljZTozOTksaWNvbk5hbWU6Imx1Y2lkZTp3YXRjaCJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiVVNCLUMgSHViIixjYXRlZ29yeToiQWNjZXNzb3JpZXMiLHByaWNlOjQ5Ljk5LGljb25OYW1lOiJsdWNpZGU6dXNiIixpblN0b2NrOiExfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBTaG9wcGluZyBDYXJ0In0gLnN1YnRpdGxlPSR7IlByb2R1Y3QgY2FyZHMgd2l0aCBkeW5hbWljIGNhcnQgY2FsY3VsYXRpb24ifSAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9W3tpZDoibGFwdG9wIixlbGVtZW50Om51bGwsZGF0YTp7bmFtZTonTWFjQm9vayBQcm8gMTQiJyxjYXRlZ29yeToiQ29tcHV0ZXJzIixkZXNjcmlwdGlvbjoiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIscHJpY2U6MTk5OSxvcmlnaW5hbFByaWNlOjIxOTksaWNvbk5hbWU6Imx1Y2lkZTpsYXB0b3AifX0se2lkOiJpcGFkIixlbGVtZW50Om51bGwsZGF0YTp7bmFtZToiaVBhZCBBaXIiLGNhdGVnb3J5OiJUYWJsZXRzIixkZXNjcmlwdGlvbjonMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JyxwcmljZTo1OTksaWNvbk5hbWU6Imx1Y2lkZTp0YWJsZXQifX0se2lkOiJrZXlib2FyZCIsZWxlbWVudDpudWxsLGRhdGE6e25hbWU6Ik1hZ2ljIEtleWJvYXJkIixjYXRlZ29yeToiQWNjZXNzb3JpZXMiLGRlc2NyaXB0aW9uOiJXaXJlbGVzcyBrZXlib2FyZCB3aXRoIFRvdWNoIElEIixwcmljZToxNDksaWNvbk5hbWU6Imx1Y2lkZTprZXlib2FyZCJ9fV0sYT0oKT0+e2xldCBpPTAscj1bXTtlLmZvckVhY2gobj0+e2xldCBvPXQucXVlcnlTZWxlY3RvcihgIyR7bi5pZH1gKTtpZihvJiZvLnF1YW50aXR5PjApe2xldCBkPW4uZGF0YS5wcmljZSpvLnF1YW50aXR5O2krPWQsci5wdXNoKGAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPiR7bi5kYXRhLm5hbWV9ICgke28ucXVhbnRpdHl9KTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+JCR7ZC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfX0pO2xldCBzPXQucXVlcnlTZWxlY3RvcigiI2ludGVyYWN0aXZlLWNhcnQtc3VtbWFyeSIpO3MmJihzLmlubmVySFRNTD1gCiAgICAgICAgICAgICAgJHtyLmpvaW4oIiIpfQogICAgICAgICAgICAgICR7ci5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjOTk5OyI+WW91ciBjYXJ0IGlzIGVtcHR5PC9kaXY+JzoiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7aS50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9O3NldFRpbWVvdXQoYSwxMDApLHQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goaT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLGEpfSl9fT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImxhcHRvcCIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6J01hY0Jvb2sgUHJvIDE0IicsY2F0ZWdvcnk6IkNvbXB1dGVycyIsZGVzY3JpcHRpb246Ik0zIFBybyBjaGlwIHdpdGggMThHQiBSQU0iLHByaWNlOjE5OTksb3JpZ2luYWxQcmljZToyMTk5LGljb25OYW1lOiJsdWNpZGU6bGFwdG9wIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJpcGFkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiaVBhZCBBaXIiLGNhdGVnb3J5OiJUYWJsZXRzIixkZXNjcmlwdGlvbjonMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JyxwcmljZTo1OTksaWNvbk5hbWU6Imx1Y2lkZTp0YWJsZXQifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiTWFnaWMgS2V5Ym9hcmQiLGNhdGVnb3J5OiJBY2Nlc3NvcmllcyIsZGVzY3JpcHRpb246IldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLHByaWNlOjE0OSxpY29uTmFtZToibHVjaWRlOmtleWJvYXJkIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPlNob3BwaW5nIENhcnQ8L2gzPgogICAgICAgICAgPGRpdiBpZD0iaW50ZXJhY3RpdmUtY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZWxlY3RhYmxlIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2FyZHMgb3IgY2hlY2tib3hlcyB0byBzZWxlY3QgcHJvZHVjdHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IlNvbnkgQWxwaGEgNyBJViIsY2F0ZWdvcnk6IkNhbWVyYXMiLGRlc2NyaXB0aW9uOiJGdWxsLWZyYW1lIG1pcnJvcmxlc3MgY2FtZXJhIixwcmljZToyNDk4LGljb25OYW1lOiJsdWNpZGU6Y2FtZXJhIn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7ITB9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0keyExfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7aWYoZSl7bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpLGk9W107YS5mb3JFYWNoKHI9PntyLnNlbGVjdGVkJiZpLnB1c2goci5wcm9kdWN0RGF0YS5uYW1lKX0pLGUudGV4dENvbnRlbnQ9aS5sZW5ndGg+MD9gU2VsZWN0ZWQ6ICR7aS5qb2luKCIsICIpfWA6Ik5vIHByb2R1Y3RzIHNlbGVjdGVkIn19fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiREpJIE1pbmkgMyBQcm8iLGNhdGVnb3J5OiJEcm9uZXMiLGRlc2NyaXB0aW9uOiJMaWdodHdlaWdodCBkcm9uZSB3aXRoIDRLIGNhbWVyYSIscHJpY2U6NzU5LGljb25OYW1lOiJsdWNpZGU6cGxhbmUifX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHshMH0KICAgICAgICAgICAgLnNob3dRdWFudGl0eVNlbGVjdG9yPSR7ITF9CiAgICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHt0PT57bGV0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTtpZihlKXtsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIiksaT1bXTthLmZvckVhY2gocj0+e3Iuc2VsZWN0ZWQmJmkucHVzaChyLnByb2R1Y3REYXRhLm5hbWUpfSksZS50ZXh0Q29udGVudD1pLmxlbmd0aD4wP2BTZWxlY3RlZDogJHtpLmpvaW4oIiwgIil9YDoiTm8gcHJvZHVjdHMgc2VsZWN0ZWQifX19CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJHb1BybyBIRVJPMTIiLGNhdGVnb3J5OiJBY3Rpb24gQ2FtZXJhcyIsZGVzY3JpcHRpb246IjUuM0sgdmlkZW8gd2l0aCBIeXBlclNtb290aCA2LjAiLHByaWNlOjM5OSxvcmlnaW5hbFByaWNlOjQ0OSxpY29uTmFtZToibHVjaWRlOnZpZGVvIn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7ITB9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0keyExfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7aWYoZSl7bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpLGk9W107YS5mb3JFYWNoKHI9PntyLnNlbGVjdGVkJiZpLnB1c2goci5wcm9kdWN0RGF0YS5uYW1lKX0pLGUudGV4dENvbnRlbnQ9aS5sZW5ndGg+MD9gU2VsZWN0ZWQ6ICR7aS5qb2luKCIsICIpfWA6Ik5vIHByb2R1Y3RzIHNlbGVjdGVkIn19fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3RlZC1wcm9kdWN0cyIgaWQ9InNlbGVjdGlvbi1vdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOiAxNnB4OyI+CiAgICAgICAgICBObyBwcm9kdWN0cyBzZWxlY3RlZAogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJvZHVjdCBWYXJpYXRpb25zIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJMaW1pdGVkIEVkaXRpb24gU25lYWtlcnMiLGNhdGVnb3J5OiJGb290d2VhciIsZGVzY3JpcHRpb246IkV4Y2x1c2l2ZSBjb2xvcndheSAtIE9ubHkgNTAwIHBhaXJzIixwcmljZToyOTksaWNvbk5hbWU6Imx1Y2lkZTpmb290cHJpbnRzIixpblN0b2NrOiExLHN0b2NrVGV4dDoiU29sZCBPdXQifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6Ik1pbmltYWxpc3QgV2FsbGV0IixwcmljZTozOS45OSxpY29uTmFtZToibHVjaWRlOndhbGxldCJ9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiUHJlbWl1bSBDb2ZmZWUgQmVhbnMiLGNhdGVnb3J5OiJGb29kICYgQmV2ZXJhZ2UiLGRlc2NyaXB0aW9uOiJTaW5nbGUgb3JpZ2luLCBtZWRpdW0gcm9hc3QiLHByaWNlOjE4LjUsaWNvbk5hbWU6Imx1Y2lkZTpjb2ZmZWUiLGN1cnJlbmN5OiJcdTIwQUMifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciBFbCxYaSxsdXQsQnE9YigoKT0+e3VlKCk7b3V0KCk7VmUoKTtFbD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFhpPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxsdXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W107dmFyIEY9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBfPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6T2JqZWN0fSldLGQ9W0koe3R5cGU6TnVtYmVyfSldLGw9W0koe3R5cGU6Qm9vbGVhbn0pXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEVsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJvZHVjdERhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJwcm9kdWN0RGF0YSJpbiBrLGdldDprPT5rLnByb2R1Y3REYXRhLHNldDooayxOKT0+e2sucHJvZHVjdERhdGE9Tn19LG1ldGFkYXRhOl99LG4sbyksRWwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJxdWFudGl0eSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InF1YW50aXR5ImluIGssZ2V0Oms9PmsucXVhbnRpdHksc2V0OihrLE4pPT57ay5xdWFudGl0eT1OfX0sbWV0YWRhdGE6X30sYyxwKSxFbCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dRdWFudGl0eVNlbGVjdG9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2hvd1F1YW50aXR5U2VsZWN0b3IiaW4gayxnZXQ6az0+ay5zaG93UXVhbnRpdHlTZWxlY3RvcixzZXQ6KGssTik9PntrLnNob3dRdWFudGl0eVNlbGVjdG9yPU59fSxtZXRhZGF0YTpffSxmLGcpLEVsKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0YWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNlbGVjdGFibGUiaW4gayxnZXQ6az0+ay5zZWxlY3RhYmxlLHNldDooayxOKT0+e2suc2VsZWN0YWJsZT1OfX0sbWV0YWRhdGE6X30sdixtKSxFbCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2VsZWN0ZWQiaW4gayxnZXQ6az0+ay5zZWxlY3RlZCxzZXQ6KGssTik9PntrLnNlbGVjdGVkPU59fSxtZXRhZGF0YTpffSxNLFMpLEVsKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOl99LG51bGwsYSksRj1pPWUudmFsdWUsXyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpffSl9c3RhdGljIGRlbW89bnV0O3N0YXRpYyBkZW1vR3JvdXBzPVsiU2ltcGxlIl07I2U9WGkodGhpcyxuLHtuYW1lOiJQcm9kdWN0IE5hbWUiLHByaWNlOjB9KTtnZXQgcHJvZHVjdERhdGEoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcHJvZHVjdERhdGEoXyl7dGhpcy4jZT1ffSN0PShYaSh0aGlzLG8pLFhpKHRoaXMsYywwKSk7Z2V0IHF1YW50aXR5KCl7cmV0dXJuIHRoaXMuI3R9c2V0IHF1YW50aXR5KF8pe3RoaXMuI3Q9X30jYT0oWGkodGhpcyxwKSxYaSh0aGlzLGYsITApKTtnZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IoXyl7dGhpcy4jYT1ffSNpPShYaSh0aGlzLGcpLFhpKHRoaXMsdiwhMSkpO2dldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNlbGVjdGFibGUoXyl7dGhpcy4jaT1ffSNyPShYaSh0aGlzLG0pLFhpKHRoaXMsTSwhMSkpO2dldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLiNyfXNldCBzZWxlY3RlZChfKXt0aGlzLiNyPV99c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQuc2VsZWN0YWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0aW9uLWNoZWNrYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uLWNoZWNrYm94LmNoZWNrZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICAucHJvZHVjdC1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtcHJpY2UgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnByaWNlLWN1cnJlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByaWNlLW9yaWdpbmFsIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIpfTsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5vdXQtb2Ytc3RvY2sgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICB9CgogICAgICAuc3RvY2stc3RhdHVzIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXR7bmFtZTpfLGNhdGVnb3J5OmssZGVzY3JpcHRpb246TixwcmljZTpMLG9yaWdpbmFsUHJpY2U6QSxjdXJyZW5jeTpxPSIkIixpblN0b2NrOkM9ITAsc3RvY2tUZXh0Ono9Qz8iSW4gU3RvY2siOiJPdXQgb2YgU3RvY2siLGltYWdlVXJsOkUsaWNvbk5hbWU6VD0ibHVjaWRlOnBhY2thZ2UifT10aGlzLnByb2R1Y3REYXRhLCQ9Vj0+YCR7cX0ke1YudG9GaXhlZCgyKX1gO3JldHVybiB3YAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJwcm9kdWN0LWNhcmQgJHt0aGlzLnNlbGVjdGFibGU/InNlbGVjdGFibGUiOiIifSAke3RoaXMuc2VsZWN0ZWQ/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVDYXJkQ2xpY2t9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWltYWdlIj4KICAgICAgICAgICR7RT93YAogICAgICAgICAgICA8aW1nIHNyYz0iJHtFfSIgYWx0PSIke199Ij4KICAgICAgICAgIGA6d2AKICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke1R9PjwvZGVlcy1pY29uPgogICAgICAgICAgYH0KICAgICAgICAgICR7dGhpcy5zZWxlY3RhYmxlP3dgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9InNlbGVjdGlvbi1jaGVja2JveCAke3RoaXMuc2VsZWN0ZWQ/ImNoZWNrZWQiOiIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHtWPT57Vi5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmhhbmRsZVNlbGVjdGlvblRvZ2dsZSgpfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1oZWFkZXIiPgogICAgICAgICAgICAke2s/d2A8ZGl2IGNsYXNzPSJwcm9kdWN0LWNhdGVnb3J5Ij4ke2t9PC9kaXY+YDoiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1uYW1lIj4ke199PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7Tj93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWRlc2NyaXB0aW9uIj4ke059PC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgICAgPGRpdiBjbGFzcz0ic3RvY2stc3RhdHVzICR7Qz8iaW4tc3RvY2siOiJvdXQtb2Ytc3RvY2sifSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtDPyJsdWNpZGU6Y2hlY2stY2lyY2xlIjoibHVjaWRlOngtY2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICR7en0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1mb290ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXByaWNlIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpY2UtY3VycmVudCI+JHskKEwpfTwvc3Bhbj4KICAgICAgICAgICAgICAke0EmJkE+TD93YAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9yaWdpbmFsIj4keyQoQSl9PC9zcGFuPgogICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuc2hvd1F1YW50aXR5U2VsZWN0b3I/d2AKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnF1YW50aXR5fQogICAgICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHtWPT57dGhpcy5xdWFudGl0eT1WLmRldGFpbC5nZXRWYWx1ZSgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInF1YW50aXR5Q2hhbmdlIix7ZGV0YWlsOntxdWFudGl0eTp0aGlzLnF1YW50aXR5LHByb2R1Y3REYXRhOnRoaXMucHJvZHVjdERhdGF9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9aGFuZGxlQ2FyZENsaWNrKCl7dGhpcy5zZWxlY3RhYmxlJiYodGhpcy5zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLHtkZXRhaWw6e3NlbGVjdGVkOnRoaXMuc2VsZWN0ZWQscHJvZHVjdERhdGE6dGhpcy5wcm9kdWN0RGF0YX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSl9aGFuZGxlU2VsZWN0aW9uVG9nZ2xlKCl7dGhpcy5zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLHtkZXRhaWw6e3NlbGVjdGVkOnRoaXMuc2VsZWN0ZWQscHJvZHVjdERhdGE6dGhpcy5wcm9kdWN0RGF0YX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksWGkodGhpcyxTKX1zdGF0aWN7WGkoaSxhKX19O3JldHVybiBGPWl9KSgpfSk7dmFyIGN1dCxkdXQ9YigoKT0+e3VlKCk7QnEoKTtjdXQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmlucHV0LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNob3BwaW5nLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtdG90YWwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBib3JkZXItdG9wOiAycHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUXVhbnRpdHkgU2VsZWN0b3IifSAuc3VidGl0bGU9JHsiU2ltcGxlIHF1YW50aXR5IGlucHV0IHdpdGggaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHRoZSBkZXNpcmVkIHF1YW50aXR5In0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgIC5sYWJlbD0keyJJdGVtcyBpbiBDYXJ0In0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkanVzdCB0aGUgcXVhbnRpdHkgb2YgaXRlbXMifQogICAgICAgICAgICAudmFsdWU9JHszfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJNb2Rlcm4gZS1jb21tZXJjZSBwcm9kdWN0IGNhcmRzIHdpdGggaW50ZXJhY3RpdmUgcXVhbnRpdHkgc2VsZWN0b3JzIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPSgpPT57bGV0IGE9dC5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKSxpPXQucXVlcnlTZWxlY3RvcigiI21vdXNlLXF0eSIpLHI9dC5xdWVyeVNlbGVjdG9yKCIja2V5Ym9hcmQtcXR5Iikscz1hPy5xdWFudGl0eXx8MCxuPWk/LnF1YW50aXR5fHwwLG89cj8ucXVhbnRpdHl8fDAsZD0zNDkuOTkqcyxjPTk5Ljk5Km4scD03OS45OSpvLGw9ZCtjK3AsZj10LnF1ZXJ5U2VsZWN0b3IoIiNjYXJ0LXN1bW1hcnktY29udGVudCIpO2YmJihmLmlubmVySFRNTD1gCiAgICAgICAgICAgICAgJHtzPjA/YDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7c30pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7ZC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj5gOiIifQogICAgICAgICAgICAgICR7bj4wP2A8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4+TG9naXRlY2ggTVggTWFzdGVyIDNTICgke259KTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPiQke2MudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YDoiIn0KICAgICAgICAgICAgICAke28+MD9gPGRpdiBjbGFzcz0iY2FydC1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuPktleWNocm9uIEsyICgke299KTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPiQke3AudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YDoiIn0KICAgICAgICAgICAgICAke2w9PT0wPyc8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjOTk5OyI+WW91ciBjYXJ0IGlzIGVtcHR5PC9kaXY+JzoiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7bC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9O3NldFRpbWVvdXQoZSwxMDApLHQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLGUpfSl9fT4KICAgICAgICA8ZGl2IGNsYXNzPSJzaG9wcGluZy1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJoZWFkcGhvbmVzLXF0eSIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7e25hbWU6IlNvbnkgV0gtMTAwMFhNNSBXaXJlbGVzcyBIZWFkcGhvbmVzIixjYXRlZ29yeToiQXVkaW8iLGRlc2NyaXB0aW9uOiJJbmR1c3RyeS1sZWFkaW5nIG5vaXNlIGNhbmNlbGluZyB3aXRoIEF1dG8gTkMgT3B0aW1pemVyIixwcmljZTozNDkuOTksb3JpZ2luYWxQcmljZTozOTkuOTksaWNvbk5hbWU6Imx1Y2lkZTpoZWFkcGhvbmVzIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibW91c2UtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7bmFtZToiTG9naXRlY2ggTVggTWFzdGVyIDNTIixjYXRlZ29yeToiQWNjZXNzb3JpZXMiLGRlc2NyaXB0aW9uOiJQZXJmb3JtYW5jZSB3aXJlbGVzcyBtb3VzZSB3aXRoIHVsdHJhLWZhc3Qgc2Nyb2xsaW5nIixwcmljZTo5OS45OSxpY29uTmFtZToibHVjaWRlOm1vdXNlLXBvaW50ZXIifX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZC1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3tuYW1lOiJLZXljaHJvbiBLMiBXaXJlbGVzcyBNZWNoYW5pY2FsIEtleWJvYXJkIixjYXRlZ29yeToiS2V5Ym9hcmRzIixkZXNjcmlwdGlvbjoiQ29tcGFjdCA3NSUgbGF5b3V0IHdpdGggaG90LXN3YXBwYWJsZSBzd2l0Y2hlcyIscHJpY2U6NzkuOTksb3JpZ2luYWxQcmljZTo5NC45OSxpY29uTmFtZToibHVjaWRlOmtleWJvYXJkIn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPk9yZGVyIFN1bW1hcnk8L2gzPgogICAgICAgICAgPGRpdiBpZD0iY2FydC1zdW1tYXJ5LWNvbnRlbnQiPgogICAgICAgICAgICA8IS0tIENvbnRlbnQgd2lsbCBiZSBkeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJSZXF1aXJlZCAmIERpc2FibGVkIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGZvciB2YWxpZGF0aW9uIGFuZCByZXN0cmljdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgIC5sYWJlbD0keyJOdW1iZXIgb2YgTGljZW5zZXMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBxdWFudGl0eSBjYW5ub3QgYmUgY2hhbmdlZCJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgICAudmFsdWU9JHs1fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3JkZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBvcmRlciBmb3JtIHdpdGggcXVhbnRpdHkgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkN1c3RvbWVyIE5hbWUifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyBQbGFuIiwiUHJvIFBsYW4iLCJFbnRlcnByaXNlIFBsYW4iXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTnVtYmVyIG9mIGxpY2Vuc2VzIn0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWNpYWwgSW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciBwdXQsSHEsSXgscXE9YigoKT0+e3VlKCk7THQoKTtfMSgpO2R1dCgpO1ZlKCk7cHV0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sSHE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LEl4PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yIildLGUsYT1bXSxpLHI9WGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6TnVtYmVyfSldLHB1dCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4idmFsdWUiaW4gcCxnZXQ6cD0+cC52YWx1ZSxzZXQ6KHAsbCk9PntwLnZhbHVlPWx9fSxtZXRhZGF0YTpjfSxuLG8pLHB1dChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPWN1dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIklucHV0Il07I2U9SHEodGhpcyxuLDEpO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShjKXt0aGlzLiNlPWN9c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyIHsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgbWluLXdpZHRoOiAxMjBweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5xdWFudGl0eS1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yIHsKICAgICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3I6YWN0aXZlIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yLnBsdXMgewogICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICB9CgogICAgICAgIC8qIEtleWJvYXJkIG5hdmlnYXRpb24gZm9jdXMgc3R5bGVzICovCiAgICAgICAgLnNlbGVjdG9yOmZvY3VzIHsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KCiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgJHt0aGlzLmxhYmVsP3dgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPmA6IiJ9CiAgICAgICAgPGRpdiAKICAgICAgICAgIGNsYXNzPSJxdWFudGl0eS1jb250YWluZXIgJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgICAgZGF0YS1taW49IiR7dGhpcy52YWx1ZTw9MH0iCiAgICAgICAgPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIG1pbnVzIiAKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy5kZWNyZWFzZSgpfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHtjPT57KGMua2V5PT09IkVudGVyInx8Yy5rZXk9PT0iICIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZGVjcmVhc2UoKSl9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJEZWNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID7iiJI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InF1YW50aXR5IiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1hdG9taWM9InRydWUiPiR7dGhpcy52YWx1ZX08L2Rpdj4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBwbHVzIiAKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy5pbmNyZWFzZSgpfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHtjPT57KGMua2V5PT09IkVudGVyInx8Yy5rZXk9PT0iICIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVhc2UoKSl9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1pbmNyZWFzZSgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnZhbHVlKyssdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfWRlY3JlYXNlKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMudmFsdWU+MCYmKHRoaXMudmFsdWUtLSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShjKXt0aGlzLnZhbHVlPWN9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLEhxKHRoaXMsbyl9c3RhdGlje0hxKGksYSl9fTtyZXR1cm4gZD1pfSkoKX0pO3ZhciBodXQsdXV0PWIoKCk9Pnt1ZSgpO3gxKCk7ZzIoKTtodXQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmlucHV0LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5yZXN1bHQtZGlzcGxheSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIFJhZGlvIEdyb3VwcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgc3RyaW5nIG9wdGlvbnMgZm9yIGNvbW1vbiB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiU3Vic2NyaXB0aW9uIFBsYW4ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siQmFzaWMgLSAkOS9tb250aCIsIlBybyAtICQyOS9tb250aCIsIkVudGVycHJpc2UgLSAkOTkvbW9udGgiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlBybyAtICQyOS9tb250aCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgeW91ciBzdWJzY3JpcHRpb24gdGllciJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkhpZ2giLCJNZWRpdW0iLCJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiUmFkaW8gZ3JvdXBzIHdpdGggaG9yaXpvbnRhbCBhcnJhbmdlbWVudCJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRvIHlvdSBhZ3JlZSB3aXRoIHRoZSB0ZXJtcz8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siWWVzIiwiTm8iLCJNYXliZSJdfQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiWWVzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFeHBlcmllbmNlIExldmVsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJlZ2lubmVyIiwiSW50ZXJtZWRpYXRlIiwiRXhwZXJ0Il19CiAgICAgICAgICAgIC5kaXJlY3Rpb249JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgZXhwZXJpZW5jZSBsZXZlbCB3aXRoIHdlYiBkZXZlbG9wbWVudCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBBZHZhbmNlZCBPcHRpb25zIn0gLnN1YnRpdGxlPSR7IlVzaW5nIG9iamVjdCBmb3JtYXQgd2l0aCBrZXlzIGFuZCBwYXlsb2FkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIGlkPSJhZHZhbmNlZC1yYWRpbyIKICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUmVnaW9uIn0KICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IlVuaXRlZCBTdGF0ZXMgKFVTIEVhc3QpIixrZXk6InVzLWVhc3QiLHBheWxvYWQ6e3JlZ2lvbjoidXMtZWFzdC0xIixsYXRlbmN5OjIwfX0se29wdGlvbjoiRXVyb3BlIChGcmFua2Z1cnQpIixrZXk6ImV1LWNlbnRyYWwiLHBheWxvYWQ6e3JlZ2lvbjoiZXUtY2VudHJhbC0xIixsYXRlbmN5OjUwfX0se29wdGlvbjoiQXNpYSBQYWNpZmljIChTaW5nYXBvcmUpIixrZXk6ImFwLXNvdXRoZWFzdCIscGF5bG9hZDp7cmVnaW9uOiJhcC1zb3V0aGVhc3QtMSIsbGF0ZW5jeToxMjB9fV19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZXUtY2VudHJhbCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHRoZSBjbG9zZXN0IHJlZ2lvbiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSJ9CiAgICAgICAgICBAY2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZWdpb24tcmVzdWx0Iik7ZSYmKGUudGV4dENvbnRlbnQ9IlNlbGVjdGVkOiAiK0pTT04uc3RyaW5naWZ5KHQuZGV0YWlsLnZhbHVlLG51bGwsMikpfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPGRpdiBpZD0icmVnaW9uLXJlc3VsdCIgY2xhc3M9InJlc3VsdC1kaXNwbGF5Ij5TZWxlY3RlZDogeyAicmVnaW9uIjogImV1LWNlbnRyYWwtMSIsICJsYXRlbmN5IjogNTAgfTwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gU3VydmV5IEV4YW1wbGUifSAuc3VidGl0bGU9JHsiTXVsdGlwbGUgcmFkaW8gZ3JvdXBzIGZvciBzdXJ2ZXlzIGFuZCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJIb3cgc2F0aXNmaWVkIGFyZSB5b3U/In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIlZlcnkgU2F0aXNmaWVkIiwiU2F0aXNmaWVkIiwiTmV1dHJhbCIsIkRpc3NhdGlzZmllZCIsIlZlcnkgRGlzc2F0aXNmaWVkIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJTYXRpc2ZpZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJXb3VsZCB5b3UgcmVjb21tZW5kIHVzPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEZWZpbml0ZWx5IiwiUHJvYmFibHkiLCJOb3QgU3VyZSIsIlByb2JhYmx5IE5vdCIsIkRlZmluaXRlbHkgTm90Il19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm9iYWJseSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBTdGF0ZXMgJiBWYWxpZGF0aW9uIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgYW5kIHZhbGlkYXRpb24gZXhhbXBsZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgU2VsZWN0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk9wdGlvbiBBIiwiT3B0aW9uIEIiLCJPcHRpb24gQyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBTdGF0ZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEaXNhYmxlZCBPcHRpb24gMSIsIkRpc2FibGVkIE9wdGlvbiAyIiwiRGlzYWJsZWQgT3B0aW9uIDMiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkRpc2FibGVkIE9wdGlvbiAyIn0KICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiBwYXR0ZXJucyBpbiBhcHBsaWNhdGlvbiBzZXR0aW5ncyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIFByZWZlcmVuY2UifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJMaWdodCBUaGVtZSIsa2V5OiJsaWdodCIscGF5bG9hZDoibGlnaHQifSx7b3B0aW9uOiJEYXJrIFRoZW1lIixrZXk6ImRhcmsiLHBheWxvYWQ6ImRhcmsifSx7b3B0aW9uOiJTeXN0ZW0gRGVmYXVsdCIsa2V5OiJzeXN0ZW0iLHBheWxvYWQ6ImF1dG8ifV19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJkYXJrIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNob29zZSBob3cgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhcHBlYXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siQWxsIE5vdGlmaWNhdGlvbnMiLCJJbXBvcnRhbnQgT25seSIsIk5vbmUiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkltcG9ydGFudCBPbmx5In0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNvbnRyb2wgaG93IG9mdGVuIHlvdSByZWNlaXZlIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7Ikxhbmd1YWdlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCJHZXJtYW4iLCJGcmVuY2giLCJTcGFuaXNoIiwiSmFwYW5lc2UiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVuZ2xpc2gifQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJXb3JrcyBzZWFtbGVzc2x5IHdpdGggZGVlcy1mb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgTmFtZSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAua2V5PSR7InByb2R1Y3ROYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbGVjdHJvbmljcyIsIkNsb3RoaW5nIiwiQm9va3MiLCJIb21lICYgR2FyZGVuIiwiU3BvcnRzIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAua2V5PSR7ImNhdGVnb3J5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiQ29uZGl0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk5ldyIsIkxpa2UgTmV3IiwiR29vZCIsIkZhaXIiLCJQb29yIl19CiAgICAgICAgICAgIC5kaXJlY3Rpb249JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsiY29uZGl0aW9uIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik5ldyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlNoaXBwaW5nIFNwZWVkIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiU3RhbmRhcmQgKDUtNyBkYXlzKSIsa2V5OiJzdGFuZGFyZCIscGF5bG9hZDp7ZGF5czo3LHByaWNlOjB9fSx7b3B0aW9uOiJFeHByZXNzICgyLTMgZGF5cykiLGtleToiZXhwcmVzcyIscGF5bG9hZDp7ZGF5czozLHByaWNlOjEwfX0se29wdGlvbjoiT3Zlcm5pZ2h0IixrZXk6Im92ZXJuaWdodCIscGF5bG9hZDp7ZGF5czoxLHByaWNlOjI1fX1dfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsic3RhbmRhcmQifQogICAgICAgICAgICAua2V5PSR7InNoaXBwaW5nIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IFByb2R1Y3QifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciBNOCxGcyxOeCxGeD1iKCgpPT57dWUoKTtfMSgpO3V1dCgpO1ZlKCk7TTg9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxGcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sTng9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LXJhZGlvZ3JvdXAiKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXTt2YXIgeD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IE09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpBcnJheX0pXSxkPVtJKCldLGw9W0koe3R5cGU6U3RyaW5nfSldLHk9W0koe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sTTgodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4ib3B0aW9ucyJpbiBTLGdldDpTPT5TLm9wdGlvbnMsc2V0OihTLEYpPT57Uy5vcHRpb25zPUZ9fSxtZXRhZGF0YTpNfSxuLG8pLE04KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRPcHRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJzZWxlY3RlZE9wdGlvbiJpbiBTLGdldDpTPT5TLnNlbGVjdGVkT3B0aW9uLHNldDooUyxGKT0+e1Muc2VsZWN0ZWRPcHRpb249Rn19LG1ldGFkYXRhOk19LGMscCksTTgodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaXJlY3Rpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJkaXJlY3Rpb24iaW4gUyxnZXQ6Uz0+Uy5kaXJlY3Rpb24sc2V0OihTLEYpPT57Uy5kaXJlY3Rpb249Rn19LG1ldGFkYXRhOk19LGYsZyksTTgodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uU3RhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJ2YWxpZGF0aW9uU3RhdGUiaW4gUyxnZXQ6Uz0+Uy52YWxpZGF0aW9uU3RhdGUsc2V0OihTLEYpPT57Uy52YWxpZGF0aW9uU3RhdGU9Rn19LG1ldGFkYXRhOk19LHYsbSksTTgobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6TX0sbnVsbCxhKSx4PWk9ZS52YWx1ZSxNJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk19KX1zdGF0aWMgZGVtbz1odXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPUZzKHRoaXMsbixbXSk7Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgb3B0aW9ucyhNKXt0aGlzLiNlPU19I3Q9KEZzKHRoaXMsbyksRnModGhpcyxjLCIiKSk7Z2V0IHNlbGVjdGVkT3B0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNlbGVjdGVkT3B0aW9uKE0pe3RoaXMuI3Q9TX0jYT0oRnModGhpcyxwKSxGcyh0aGlzLGYsInZlcnRpY2FsIikpO2dldCBkaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy4jYX1zZXQgZGlyZWN0aW9uKE0pe3RoaXMuI2E9TX0jaT0oRnModGhpcyxnKSxGcyh0aGlzLHYsbnVsbCkpO2dldCB2YWxpZGF0aW9uU3RhdGUoKXtyZXR1cm4gdGhpcy4jaX1zZXQgdmFsaWRhdGlvblN0YXRlKE0pe3RoaXMuI2k9TX1nZXQgdmFsdWUoKXtsZXQgTT10aGlzLmdldE9wdGlvbkJ5S2V5KHRoaXMuc2VsZWN0ZWRPcHRpb24pO3JldHVybiB0eXBlb2YgTT09Im9iamVjdCImJk0ucGF5bG9hZCE9PXZvaWQgMD9NLnBheWxvYWQ6dGhpcy5zZWxlY3RlZE9wdGlvbn1zZXQgdmFsdWUoTSl7aWYodHlwZW9mIE09PSJzdHJpbmciKXRoaXMuc2VsZWN0ZWRPcHRpb249TTtlbHNle2xldCBTPXRoaXMub3B0aW9ucy5maW5kKEY9PnR5cGVvZiBGPT0ib2JqZWN0IiYmRi5wYXlsb2FkPT09TSk7UyYmdHlwZW9mIFM9PSJvYmplY3QiJiYodGhpcy5zZWxlY3RlZE9wdGlvbj1TLmtleSl9fXN0YXRpYyBzdHlsZXM9W0NlLC4uLlhlLmJhc2VTdHlsZXMsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lci5ob3Jpem9udGFsIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogNnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuaG9yaXpvbnRhbCAucmFkaW8tb3B0aW9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMjBweCA2cHggMDsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1jaXJjbGUgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjE1IDMwJSAzLjklKSIpfSwKICAgICAgICAgICAgICAgICAgICAwIDAgMCA0cHggJHtoLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYWJlbC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDAzZW07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9InZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiLCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvblN0YXRlPSJ3YXJuIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE92ZXJyaWRlIGJhc2UgZ3JpZCBsYXlvdXQgZm9yIHJhZGlvZ3JvdXAgdG8gcHJldmVudCBsYXJnZSBnYXBzICovCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgJHt0aGlzLmxhYmVsP3dgPGRpdiBjbGFzcz0ibGFiZWwtdGV4dCI+JHt0aGlzLmxhYmVsfTwvZGl2PmA6IiJ9CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciAke3RoaXMuZGlyZWN0aW9ufSI+CiAgICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoTT0+e2xldCBTPXRoaXMuZ2V0T3B0aW9uS2V5KE0pLEY9dGhpcy5nZXRPcHRpb25MYWJlbChNKSxfPXRoaXMuc2VsZWN0ZWRPcHRpb249PT1TO3JldHVybiB3YAogICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tb3B0aW9uICR7Xz8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKT0+dGhpcy5zZWxlY3RPcHRpb24oUyl9IgogICAgICAgICAgICAgICAgQGtleWRvd249IiR7az0+dGhpcy5oYW5kbGVLZXlkb3duKGssUyl9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyYWRpby1jaXJjbGUiIAogICAgICAgICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkPyItMSI6IjAifSIKICAgICAgICAgICAgICAgICAgcm9sZT0icmFkaW8iCiAgICAgICAgICAgICAgICAgIGFyaWEtY2hlY2tlZD0iJHtffSIKICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iJHtGfSIKICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvLWxhYmVsIj4ke0Z9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/d2A8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICBgfWdldE9wdGlvbktleShNKXtyZXR1cm4gdHlwZW9mIE09PSJzdHJpbmciP006TS5rZXl9Z2V0T3B0aW9uTGFiZWwoTSl7cmV0dXJuIHR5cGVvZiBNPT0ic3RyaW5nIj9NOk0ub3B0aW9ufWdldE9wdGlvbkJ5S2V5KE0pe3JldHVybiB0aGlzLm9wdGlvbnMuZmluZChTPT50aGlzLmdldE9wdGlvbktleShTKT09PU0pfXNlbGVjdE9wdGlvbihNKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXQgUz10aGlzLnNlbGVjdGVkT3B0aW9uO3RoaXMuc2VsZWN0ZWRPcHRpb249TSxTIT09TSYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpbnB1dCIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShNKXt0aGlzLnZhbHVlPU19YXN5bmMgdmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXF1aXJlZCYmIXRoaXMuc2VsZWN0ZWRPcHRpb24/KHRoaXMudmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIiwhMSk6KHRoaXMudmFsaWRhdGlvblN0YXRlPSJ2YWxpZCIsITApfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2lmKCF0aGlzLnNlbGVjdGVkT3B0aW9uJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjAmJiF0aGlzLnJlcXVpcmVkKXtsZXQgTT10aGlzLm9wdGlvbnNbMF07dGhpcy5zZWxlY3RlZE9wdGlvbj10aGlzLmdldE9wdGlvbktleShNKX19aGFuZGxlS2V5ZG93bihNLFMpe3RoaXMuZGlzYWJsZWR8fChNLmtleT09PSIgInx8TS5rZXk9PT0iRW50ZXIiPyhNLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxlY3RPcHRpb24oUykpOk0ua2V5PT09IkFycm93RG93biJ8fE0ua2V5PT09IkFycm93UmlnaHQiPyhNLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c05leHRPcHRpb24oKSk6KE0ua2V5PT09IkFycm93VXAifHxNLmtleT09PSJBcnJvd0xlZnQiKSYmKE0ucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzUHJldmlvdXNPcHRpb24oKSkpfWZvY3VzTmV4dE9wdGlvbigpe2xldCBNPUFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yYWRpby1jaXJjbGUiKSksRj0oTS5maW5kSW5kZXgoXz0+Xz09PXRoaXMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KSsxKSVNLmxlbmd0aDtNW0ZdLmZvY3VzKCl9Zm9jdXNQcmV2aW91c09wdGlvbigpe2xldCBNPUFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yYWRpby1jaXJjbGUiKSksUz1NLmZpbmRJbmRleChfPT5fPT09dGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpLEY9Uzw9MD9NLmxlbmd0aC0xOlMtMTtNW0ZdLmZvY3VzKCl9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLEZzKHRoaXMsbSl9c3RhdGlje0ZzKGksYSl9fTtyZXR1cm4geD1pfSkoKX0pO3ZhciBmdXQsbXV0PWIoKCk9Pnt1ZSgpO2Z1dD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDI0cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICB9CiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgfQogICAgLmRlbW8tc2VjdGlvbiBoMyB7CiAgICAgIG1hcmdpbjogMCAwIDhweCAwOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAjODg4OwogICAgfQogICAgLmRlbW8tcm93IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxMnB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QmFzaWMgVXNhZ2U8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgdGV4dD0iV2l0aCBUZXh0IFByb3BlcnR5Ij48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPldpdGggSWNvbnMgKGluaGVyaXRlZCBmcm9tIERlZXNCdXR0b24pPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1yb3ciPgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IGljb249Imx1Y2lkZTpzZW5kIj5TdWJtaXQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgaWNvbj0ibHVjaWRlOnNhdmUiIGljb25Qb3NpdGlvbj0ibGVmdCI+U2F2ZSBGb3JtPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IGljb249Imx1Y2lkZTphcnJvdy1yaWdodCIgaWNvblBvc2l0aW9uPSJyaWdodCI+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkJ1dHRvbiBUeXBlczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCB0eXBlPSJoaWdobGlnaHRlZCIgaWNvbj0ibHVjaWRlOnNlbmQiPkhpZ2hsaWdodGVkPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHR5cGU9Im5vcm1hbCIgaWNvbj0ibHVjaWRlOnNlbmQiPk5vcm1hbDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCB0eXBlPSJkaXNjcmVldCIgaWNvbj0ibHVjaWRlOnNlbmQiPkRpc2NyZWV0PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzaXplPSJzbWFsbCIgaWNvbj0ibHVjaWRlOnNlbmQiPlNtYWxsPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHNpemU9Im5vcm1hbCIgaWNvbj0ibHVjaWRlOnNlbmQiPk5vcm1hbDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzaXplPSJsYXJnZSIgaWNvbj0ibHVjaWRlOnNlbmQiPkxhcmdlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TdGF0ZXM8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgc3RhdHVzPSJub3JtYWwiIGljb249Imx1Y2lkZTpzZW5kIj5Ob3JtYWw8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgc3RhdHVzPSJwZW5kaW5nIiBpY29uPSJsdWNpZGU6c2VuZCI+UGVuZGluZzwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzdGF0dXM9InN1Y2Nlc3MiIGljb249Imx1Y2lkZTpjaGVjayI+U3VjY2VzczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzdGF0dXM9ImVycm9yIiBpY29uPSJsdWNpZGU6eCI+RXJyb3I8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgZGlzYWJsZWQgaWNvbj0ibHVjaWRlOnNlbmQiPkRpc2FibGVkPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5JbiBhIEZvcm0gQ29udGV4dDwvaDM+CiAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iTmFtZSIga2V5PSJuYW1lIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJFbWFpbCIga2V5PSJlbWFpbCI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgaWNvbj0ibHVjaWRlOnNlbmQiIHR5cGU9ImhpZ2hsaWdodGVkIj5TdWJtaXQgRm9ybTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgPC9kZWVzLWZvcm0+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBmbyx1YSxPeCxKMD1iKCgpPT57bXV0KCk7dWUoKTtWZSgpO2ZvPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sdWE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LE94PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1mb3JtLXN1Ym1pdCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLHg9W0koe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sRj1bSSh7dHlwZTpTdHJpbmd9KV0sTj1bSSh7dHlwZTpTdHJpbmd9KV0sZm8odGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaXNhYmxlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImRpc2FibGVkImluIHosZ2V0Ono9PnouZGlzYWJsZWQsc2V0Oih6LEUpPT57ei5kaXNhYmxlZD1FfX0sbWV0YWRhdGE6Q30sbixvKSxmbyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ0ZXh0ImluIHosZ2V0Ono9PnoudGV4dCxzZXQ6KHosRSk9Pnt6LnRleHQ9RX19LG1ldGFkYXRhOkN9LGMscCksZm8odGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdGF0dXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzdGF0dXMiaW4geixnZXQ6ej0+ei5zdGF0dXMsc2V0Oih6LEUpPT57ei5zdGF0dXM9RX19LG1ldGFkYXRhOkN9LGYsZyksZm8odGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0eXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4idHlwZSJpbiB6LGdldDp6PT56LnR5cGUsc2V0Oih6LEUpPT57ei50eXBlPUV9fSxtZXRhZGF0YTpDfSx2LG0pLGZvKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNpemUiaW4geixnZXQ6ej0+ei5zaXplLHNldDooeixFKT0+e3ouc2l6ZT1FfX0sbWV0YWRhdGE6Q30sTSxTKSxmbyh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imljb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJpY29uImluIHosZ2V0Ono9PnouaWNvbixzZXQ6KHosRSk9Pnt6Lmljb249RX19LG1ldGFkYXRhOkN9LF8sayksZm8odGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJpY29uUG9zaXRpb24iaW4geixnZXQ6ej0+ei5pY29uUG9zaXRpb24sc2V0Oih6LEUpPT57ei5pY29uUG9zaXRpb249RX19LG1ldGFkYXRhOkN9LEwsQSksZm8obnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Q30sbnVsbCxhKSxxPWk9ZS52YWx1ZSxDJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX1zdGF0aWMgZGVtbz1mdXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJGb3JtIiwiQnV0dG9uIl07I2U9dWEodGhpcyxuLCExKTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZGlzYWJsZWQoQyl7dGhpcy4jZT1DfSN0PSh1YSh0aGlzLG8pLHVhKHRoaXMsYyx2b2lkIDApKTtnZXQgdGV4dCgpe3JldHVybiB0aGlzLiN0fXNldCB0ZXh0KEMpe3RoaXMuI3Q9Q30jYT0odWEodGhpcyxwKSx1YSh0aGlzLGYsIm5vcm1hbCIpKTtnZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHN0YXR1cyhDKXt0aGlzLiNhPUN9I2k9KHVhKHRoaXMsZyksdWEodGhpcyx2LCJkZWZhdWx0IikpO2dldCB0eXBlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHR5cGUoQyl7dGhpcy4jaT1DfSNyPSh1YSh0aGlzLG0pLHVhKHRoaXMsTSwiZGVmYXVsdCIpKTtnZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNyfXNldCBzaXplKEMpe3RoaXMuI3I9Q30jcz0odWEodGhpcyxTKSx1YSh0aGlzLF8sdm9pZCAwKSk7Z2V0IGljb24oKXtyZXR1cm4gdGhpcy4jc31zZXQgaWNvbihDKXt0aGlzLiNzPUN9I249KHVhKHRoaXMsayksdWEodGhpcyxMLCJsZWZ0IikpO2dldCBpY29uUG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jbn1zZXQgaWNvblBvc2l0aW9uKEMpe3RoaXMuI249Q31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdWEodGhpcyxBKX1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICBkZWVzLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICAuc3RhdHVzPSR7dGhpcy5zdGF0dXN9CiAgICAgICAgLnR5cGU9JHt0aGlzLnR5cGV9CiAgICAgICAgLnNpemU9JHt0aGlzLnNpemV9CiAgICAgICAgLmljb249JHt0aGlzLmljb259CiAgICAgICAgLmljb25Qb3NpdGlvbj0ke3RoaXMuaWNvblBvc2l0aW9ufQogICAgICAgIC50ZXh0PSR7dGhpcy50ZXh0fQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgQGNsaWNrZWQ9JHt0aGlzLnN1Ym1pdH0KICAgICAgPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgIGB9YXN5bmMgc3VibWl0KCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0IEM9dGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTtDJiZDLmdhdGhlckFuZERpc3BhdGNoJiZDLmdhdGhlckFuZERpc3BhdGNoKCl9YXN5bmMgZm9jdXMoKXtsZXQgQz1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLmRpc2FibGVkfHwoYXdhaXQgQy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLHRoaXMuc3VibWl0KCkpfXN0YXRpY3t1YShpLGEpfX07cmV0dXJuIHE9aX0pKCl9KTt2YXIgZ3V0LGJ1dD1iKCgpPT57dWUoKTt4MSgpO2cyKCk7UGwoKTtKMCgpO2d1dD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmlucHV0LWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRyb3Bkb3duW2xhYmVsPSJTZWxlY3QgQ291bnRyeSJdJyksYT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixpPT57Y29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IixpLmRldGFpbCl9KSxhJiZhLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIixpPT57Y29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IixpLmRldGFpbCl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgRHJvcGRvd25zIn0gLnN1YnRpdGxlPSR7IlN0YW5kYXJkIGRyb3Bkb3duIHdpdGggc2VhcmNoIGZ1bmN0aW9uYWxpdHkgYW5kIHZhcmlvdXMgb3B0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgQ291bnRyeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IlVuaXRlZCBTdGF0ZXMiLGtleToidXMifSx7b3B0aW9uOiJDYW5hZGEiLGtleToiY2EifSx7b3B0aW9uOiJHZXJtYW55IixrZXk6ImRlIn0se29wdGlvbjoiRnJhbmNlIixrZXk6ImZyIn0se29wdGlvbjoiVW5pdGVkIEtpbmdkb20iLGtleToidWsifSx7b3B0aW9uOiJBdXN0cmFsaWEiLGtleToiYXUifSx7b3B0aW9uOiJKYXBhbiIsa2V5OiJqcCJ9LHtvcHRpb246IkJyYXppbCIsa2V5OiJiciJ9XX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiVW5pdGVkIFN0YXRlcyIsa2V5OiJ1cyJ9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiU2VsZWN0IFJvbGUifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJBZG1pbmlzdHJhdG9yIixrZXk6ImFkbWluIn0se29wdGlvbjoiRWRpdG9yIixrZXk6ImVkaXRvciJ9LHtvcHRpb246IlZpZXdlciIsa2V5OiJ2aWV3ZXIifSx7b3B0aW9uOiJHdWVzdCIsa2V5OiJndWVzdCJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpO2UmJmUuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLGE9Pntjb25zb2xlLmxvZyhgUHJpb3JpdHkgY2hhbmdlZCB0bzogJHthLmRldGFpbC5vcHRpb259YCl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aG91dCBTZWFyY2gifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBmb3Igc2ltcGxlciBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHshMX0KICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkhpZ2giLGtleToiaGlnaCJ9LHtvcHRpb246Ik1lZGl1bSIsa2V5OiJtZWRpdW0ifSx7b3B0aW9uOiJMb3ciLGtleToibG93In1dfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiTWVkaXVtIixrZXk6Im1lZGl1bSJ9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kcm9wZG93biIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLGk9PntsZXQgcj1hLmdldEF0dHJpYnV0ZSgibGFiZWwiKTtjb25zb2xlLmxvZyhgJHtyfTogJHtpLmRldGFpbC5vcHRpb259YCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBkcm9wZG93bnMgaW4gYSBob3Jpem9udGFsIGxheW91dCBmb3IgY29tcGFjdCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkRlcGFydG1lbnQifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiRW5naW5lZXJpbmciLGtleToiZW5nIn0se29wdGlvbjoiRGVzaWduIixrZXk6ImRlc2lnbiJ9LHtvcHRpb246Ik1hcmtldGluZyIsa2V5OiJtYXJrZXRpbmcifSx7b3B0aW9uOiJTYWxlcyIsa2V5OiJzYWxlcyJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIFNpemUifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0keyExfQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiIxLTUiLGtleToic21hbGwifSx7b3B0aW9uOiI2LTIwIixrZXk6Im1lZGl1bSJ9LHtvcHRpb246IjIxLTUwIixrZXk6ImxhcmdlIn0se29wdGlvbjoiNTArIixrZXk6InhsYXJnZSJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJMb2NhdGlvbiJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJSZW1vdGUiLGtleToicmVtb3RlIn0se29wdGlvbjoiT24tc2l0ZSIsa2V5OiJvbnNpdGUifSx7b3B0aW9uOiJIeWJyaWQiLGtleToiaHlicmlkIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRyb3Bkb3duW3JlcXVpcmVkXSIpO2UmJmUuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pntjb25zb2xlLmxvZygiUmVxdWlyZWQgZHJvcGRvd24gbG9zdCBmb2N1cyIpfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBGaWVsZCJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJPcHRpb24gQSIsa2V5OiJhIn0se29wdGlvbjoiT3B0aW9uIEIiLGtleToiYiJ9LHtvcHRpb246Ik9wdGlvbiBDIixrZXk6ImMifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgoKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJDYW5ub3QgU2VsZWN0IixrZXk6ImRpc2FibGVkIn1dfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHt7b3B0aW9uOiJDYW5ub3QgU2VsZWN0IixrZXk6ImRpc2FibGVkIn19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIChTcGFjZXIgdG8gdGVzdCBkcm9wZG93biBwb3NpdGlvbmluZykKICAgIDwvZGl2PgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRyb3Bkb3duIik7ZSYmZS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlZE9wdGlvbiIsYT0+e2NvbnNvbGUubG9nKCJCb3R0b20gZHJvcGRvd24gc2VsZWN0ZWQ6IixhLmRldGFpbCl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gQm90dG9tIFBvc2l0aW9uaW5nIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHRoYXQgb3BlbnMgdXB3YXJkIHdoZW4gbmVhciBib3R0b20gb2Ygdmlld3BvcnQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7Ik9wZW5zIFVwd2FyZCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJGaXJzdCBPcHRpb24iLGtleToiZmlyc3QifSx7b3B0aW9uOiJTZWNvbmQgT3B0aW9uIixrZXk6InNlY29uZCJ9LHtvcHRpb246IlRoaXJkIE9wdGlvbiIsa2V5OiJ0aGlyZCJ9LHtvcHRpb246IkZvdXJ0aCBPcHRpb24iLGtleToiZm91cnRoIn0se29wdGlvbjoiRmlmdGggT3B0aW9uIixrZXk6ImZpZnRoIn1dfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRyb3Bkb3duIiksYT10LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7ZSYmYSYmKGEuaW5uZXJIVE1MPSI8ZW0+U2VsZWN0IGEgcHJvZHVjdCB0byBzZWUgZGV0YWlscy4uLjwvZW0+IixlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsaT0+e2kuZGV0YWlsLnZhbHVlJiYoYS5pbm5lckhUTUw9YAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7aS5kZXRhaWwudmFsdWUub3B0aW9ufTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPktleTo8L3N0cm9uZz4gJHtpLmRldGFpbC52YWx1ZS5rZXl9PGJyPgogICAgICAgICAgICAgIDxzdHJvbmc+UHJpY2U6PC9zdHJvbmc+ICQke2kuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlfHwiTi9BIn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5GZWF0dXJlczo8L3N0cm9uZz4gJHtpLmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKXx8Ik4vQSJ9CiAgICAgICAgICAgIGApfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBFdmVudCBIYW5kbGluZyAmIFBheWxvYWQifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBwYXlsb2FkIGRhdGEgYW5kIGNoYW5nZSBldmVudCBoYW5kbGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiU2VsZWN0IFByb2R1Y3QifQogICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiQmFzaWMgUGxhbiIsa2V5OiJiYXNpYyIscGF5bG9hZDp7cHJpY2U6OS45OSxmZWF0dXJlczpbIkZlYXR1cmUgQSJdfX0se29wdGlvbjoiUHJvIFBsYW4iLGtleToicHJvIixwYXlsb2FkOntwcmljZToxOS45OSxmZWF0dXJlczpbIkZlYXR1cmUgQSIsIkZlYXR1cmUgQiJdfX0se29wdGlvbjoiRW50ZXJwcmlzZSBQbGFuIixrZXk6ImVudGVycHJpc2UiLHBheWxvYWQ6e3ByaWNlOjQ5Ljk5LGZlYXR1cmVzOlsiRmVhdHVyZSBBIiwiRmVhdHVyZSBCIiwiRmVhdHVyZSBDIl19fV19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLGE9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRyb3Bkb3duW2tleT0icHJvamVjdFR5cGUiXScpLGk9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRyb3Bkb3duW2tleT0iZnJhbWV3b3JrIl0nKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIixyPT57Y29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLHIuZGV0YWlsLmRhdGEpfSksYSYmaSYmYS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlZE9wdGlvbiIscj0+e2xldCBzPXIuZGV0YWlsLmtleTtjb25zb2xlLmxvZyhgUHJvamVjdCB0eXBlIGNoYW5nZWQgdG86ICR7c31gKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdvcmtpbmcgd2l0aGluIGEgZm9ybSB3aXRoIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvamVjdFR5cGUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiV2ViIEFwcGxpY2F0aW9uIixrZXk6IndlYiJ9LHtvcHRpb246Ik1vYmlsZSBBcHBsaWNhdGlvbiIsa2V5OiJtb2JpbGUifSx7b3B0aW9uOiJEZXNrdG9wIEFwcGxpY2F0aW9uIixrZXk6ImRlc2t0b3AifSx7b3B0aW9uOiJBUEkgU2VydmljZSIsa2V5OiJhcGkifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGV2ZWxvcG1lbnQgRnJhbWV3b3JrIn0KICAgICAgICAgICAgLmtleT0keyJmcmFtZXdvcmsifQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiUmVhY3QiLGtleToicmVhY3QiLHBheWxvYWQ6e3R5cGU6IndlYiJ9fSx7b3B0aW9uOiJWdWUuanMiLGtleToidnVlIixwYXlsb2FkOnt0eXBlOiJ3ZWIifX0se29wdGlvbjoiQW5ndWxhciIsa2V5OiJhbmd1bGFyIixwYXlsb2FkOnt0eXBlOiJ3ZWIifX0se29wdGlvbjoiUmVhY3QgTmF0aXZlIixrZXk6InJlYWN0LW5hdGl2ZSIscGF5bG9hZDp7dHlwZToibW9iaWxlIn19LHtvcHRpb246IkZsdXR0ZXIiLGtleToiZmx1dHRlciIscGF5bG9hZDp7dHlwZToibW9iaWxlIn19LHtvcHRpb246IkVsZWN0cm9uIixrZXk6ImVsZWN0cm9uIixwYXlsb2FkOnt0eXBlOiJkZXNrdG9wIn19XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IkNyZWF0ZSBQcm9qZWN0In0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmB9KTt2YXIgT3MsXzIsUngsQng9YigoKT0+e3VlKCk7THQoKTtidXQoKTtfMSgpO3BhKCk7VmUoKTtPcz1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LF8yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxSeD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtZHJvcGRvd24iKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXTt2YXIgRT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IFQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSgpXSxkPVtJKCldLGw9W0koe3R5cGU6Qm9vbGVhbn0pXSx5PVtLKCldLHg9W0soKV0sRj1bSygpXSxOPVtLKCldLHE9W0soKV0sT3ModGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4ib3B0aW9ucyJpbiAkLGdldDokPT4kLm9wdGlvbnMsc2V0OigkLFYpPT57JC5vcHRpb25zPVZ9fSxtZXRhZGF0YTpUfSxuLG8pLE9zKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRPcHRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzZWxlY3RlZE9wdGlvbiJpbiAkLGdldDokPT4kLnNlbGVjdGVkT3B0aW9uLHNldDooJCxWKT0+eyQuc2VsZWN0ZWRPcHRpb249Vn19LG1ldGFkYXRhOlR9LGMscCksT3ModGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbmFibGVTZWFyY2giLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJlbmFibGVTZWFyY2giaW4gJCxnZXQ6JD0+JC5lbmFibGVTZWFyY2gsc2V0OigkLFYpPT57JC5lbmFibGVTZWFyY2g9Vn19LG1ldGFkYXRhOlR9LGYsZyksT3ModGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcGVuc1RvVG9wIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4ib3BlbnNUb1RvcCJpbiAkLGdldDokPT4kLm9wZW5zVG9Ub3Asc2V0OigkLFYpPT57JC5vcGVuc1RvVG9wPVZ9fSxtZXRhZGF0YTpUfSx2LG0pLE9zKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsdGVyZWRPcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iZmlsdGVyZWRPcHRpb25zImluICQsZ2V0OiQ9PiQuZmlsdGVyZWRPcHRpb25zLHNldDooJCxWKT0+eyQuZmlsdGVyZWRPcHRpb25zPVZ9fSxtZXRhZGF0YTpUfSxNLFMpLE9zKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGlnaGxpZ2h0ZWRJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+ImhpZ2hsaWdodGVkSW5kZXgiaW4gJCxnZXQ6JD0+JC5oaWdobGlnaHRlZEluZGV4LHNldDooJCxWKT0+eyQuaGlnaGxpZ2h0ZWRJbmRleD1WfX0sbWV0YWRhdGE6VH0sXyxrKSxPcyh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzT3BlbmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iaXNPcGVuZWQiaW4gJCxnZXQ6JD0+JC5pc09wZW5lZCxzZXQ6KCQsVik9PnskLmlzT3BlbmVkPVZ9fSxtZXRhZGF0YTpUfSxMLEEpLE9zKHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VhcmNoVmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzZWFyY2hWYWx1ZSJpbiAkLGdldDokPT4kLnNlYXJjaFZhbHVlLHNldDooJCxWKT0+eyQuc2VhcmNoVmFsdWU9Vn19LG1ldGFkYXRhOlR9LEMseiksT3MobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6VH0sbnVsbCxhKSxFPWk9ZS52YWx1ZSxUJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlR9KX1zdGF0aWMgZGVtbz1ndXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPV8yKHRoaXMsbixbXSk7Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgb3B0aW9ucyhUKXt0aGlzLiNlPVR9I3Q9KF8yKHRoaXMsbyksXzIodGhpcyxjLG51bGwpKTtnZXQgc2VsZWN0ZWRPcHRpb24oKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VsZWN0ZWRPcHRpb24oVCl7dGhpcy4jdD1UfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ufXNldCB2YWx1ZShUKXt0aGlzLnNlbGVjdGVkT3B0aW9uPVR9I2E9KF8yKHRoaXMscCksXzIodGhpcyxmLCEwKSk7Z2V0IGVuYWJsZVNlYXJjaCgpe3JldHVybiB0aGlzLiNhfXNldCBlbmFibGVTZWFyY2goVCl7dGhpcy4jYT1UfSNpPShfMih0aGlzLGcpLF8yKHRoaXMsdiwhMSkpO2dldCBvcGVuc1RvVG9wKCl7cmV0dXJuIHRoaXMuI2l9c2V0IG9wZW5zVG9Ub3AoVCl7dGhpcy4jaT1UfSNyPShfMih0aGlzLG0pLF8yKHRoaXMsTSxbXSkpO2dldCBmaWx0ZXJlZE9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgZmlsdGVyZWRPcHRpb25zKFQpe3RoaXMuI3I9VH0jcz0oXzIodGhpcyxTKSxfMih0aGlzLF8sMCkpO2dldCBoaWdobGlnaHRlZEluZGV4KCl7cmV0dXJuIHRoaXMuI3N9c2V0IGhpZ2hsaWdodGVkSW5kZXgoVCl7dGhpcy4jcz1UfSNuPShfMih0aGlzLGspLF8yKHRoaXMsTCwhMSkpO2dldCBpc09wZW5lZCgpe3JldHVybiB0aGlzLiNufXNldCBpc09wZW5lZChUKXt0aGlzLiNuPVR9I289KF8yKHRoaXMsQSksXzIodGhpcyxDLCIiKSk7Z2V0IHNlYXJjaFZhbHVlKCl7cmV0dXJuIHRoaXMuI299c2V0IHNlYXJjaFZhbHVlKFQpe3RoaXMuI289VH1zdGF0aWMgc3R5bGVzPVtDZSwuLi5YZS5iYXNlU3R5bGVzLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3ggewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveDpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3guZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBEcm9wZG93biBhcnJvdyAqLwogICAgICAuc2VsZWN0ZWRCb3g6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci10b3A6IDRweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3gub3Blbjo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICB6LWluZGV4OiA1MDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CiAgICAgIAogICAgICAuc2VsZWN0aW9uQm94LnRvcCB7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA0cHgpOwogICAgICAgIHRvcDogYXV0bzsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLnNlbGVjdGlvbkJveC5ib3R0b20gewogICAgICAgIHRvcDogMTAwJTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBPcHRpb25zIGNvbnRhaW5lciAqLwogICAgICAub3B0aW9ucy1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICAvKiBPcHRpb25zICovCiAgICAgIC5vcHRpb24gewogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDJweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE5vIG9wdGlvbnMgbWVzc2FnZSAqLwogICAgICAubm8tb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAvKiBTZWFyY2ggKi8KICAgICAgLnNlYXJjaCB7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnNlYXJjaC5ib3R0b20gewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2ggaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAub3B0aW9ucy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0ic2VsZWN0ZWRCb3ggJHt0aGlzLmlzT3BlbmVkPyJvcGVuIjoiIn0gJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCk9PiF0aGlzLmRpc2FibGVkJiZ0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpfSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZD8iLTEiOiIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VsZWN0ZWRCb3hLZXlkb3dufSIKICAgICAgICAgID4KICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkT3B0aW9uPy5vcHRpb258fCJTZWxlY3QgYW4gb3B0aW9uIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9uQm94ICR7dGhpcy5pc09wZW5lZD8ic2hvdyI6IiJ9ICR7dGhpcy5vcGVuc1RvVG9wPyJ0b3AiOiJib3R0b20ifSI+CiAgICAgICAgICAgICR7dGhpcy5lbmFibGVTZWFyY2g/d2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IiAKICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggb3B0aW9ucy4uLiIgCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9IiR7dGhpcy5zZWFyY2hWYWx1ZX0iCiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9IiR7dGhpcy5oYW5kbGVTZWFyY2h9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIke1Q9PlQuc3RvcFByb3BhZ2F0aW9uKCl9IgogICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249IiR7dGhpcy5oYW5kbGVTZWFyY2hLZXlkb3dufSIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6bnVsbH0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoPT09MD93YDxkaXYgY2xhc3M9Im5vLW9wdGlvbnMiPk5vIG9wdGlvbnMgZm91bmQ8L2Rpdj5gOnRoaXMuZmlsdGVyZWRPcHRpb25zLm1hcCgoVCwkKT0+e2xldCBWPXRoaXMuaGlnaGxpZ2h0ZWRJbmRleD09PSQ7cmV0dXJuIHdgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcHRpb24gJHtWPyJoaWdobGlnaHRlZCI6IiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCk9PnRoaXMudXBkYXRlU2VsZWN0aW9uKFQpfSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9IiR7KCk9PnRoaXMuaGlnaGxpZ2h0ZWRJbmRleD0kfSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtULm9wdGlvbn0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGB9KX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZT10aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpfWZpcnN0VXBkYXRlZCgpe3RoaXMuc2VsZWN0ZWRPcHRpb249dGhpcy5zZWxlY3RlZE9wdGlvbnx8bnVsbCx0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnN9dXBkYXRlZChUKXtzdXBlci51cGRhdGVkKFQpLFQuaGFzKCJvcHRpb25zIikmJih0aGlzLmZpbHRlcmVkT3B0aW9ucz10aGlzLm9wdGlvbnMpfWFzeW5jIHVwZGF0ZVNlbGVjdGlvbihUKXt0aGlzLnNlbGVjdGVkT3B0aW9uPVQsdGhpcy5pc09wZW5lZD0hMSx0aGlzLnNlYXJjaFZhbHVlPSIiLHRoaXMuZmlsdGVyZWRPcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLmhpZ2hsaWdodGVkSW5kZXg9MCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3RlZE9wdGlvbiIse2RldGFpbDpULGJ1YmJsZXM6ITB9KSksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyl9aGFuZGxlQ2xpY2tPdXRzaWRlPShfMih0aGlzLHopLFQ9PntULmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKHRoaXMpfHwodGhpcy5pc09wZW5lZD0hMSx0aGlzLnNlYXJjaFZhbHVlPSIiLHRoaXMuZmlsdGVyZWRPcHRpb25zPXRoaXMub3B0aW9ucyxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpKX0pO2FzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpe2lmKHRoaXMuaXNPcGVuZWQ9IXRoaXMuaXNPcGVuZWQsdGhpcy5pc09wZW5lZCl7bGV0ICQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFY9d2luZG93LmlubmVySGVpZ2h0LSQuYm90dG9tLFI9JC50b3A7dGhpcy5vcGVuc1RvVG9wPVY8MzAwJiZSPlYsYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtsZXQgVT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNlYXJjaCBpbnB1dCIpO1UmJlUuZm9jdXMoKSxzZXRUaW1lb3V0KCgpPT57ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKX0sMCl9ZWxzZSB0aGlzLnNlYXJjaFZhbHVlPSIiLHRoaXMuZmlsdGVyZWRPcHRpb25zPXRoaXMub3B0aW9ucyxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5oYW5kbGVDbGlja091dHNpZGUpfWhhbmRsZVNlYXJjaChUKXtsZXQgJD1ULnRhcmdldC52YWx1ZTt0aGlzLnNlYXJjaFZhbHVlPSQ7bGV0IFY9JC50b0xvd2VyQ2FzZSgpO3RoaXMuZmlsdGVyZWRPcHRpb25zPXRoaXMub3B0aW9ucy5maWx0ZXIoUj0+Ui5vcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhWKSksdGhpcy5oaWdobGlnaHRlZEluZGV4PTB9aGFuZGxlS2V5RG93bihUKXtsZXQgJD1ULmtleSxWPXRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aC0xOyQ9PT0iQXJyb3dEb3duIj8oVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGlnaGxpZ2h0ZWRJbmRleD10aGlzLmhpZ2hsaWdodGVkSW5kZXgrMT5WPzA6dGhpcy5oaWdobGlnaHRlZEluZGV4KzEpOiQ9PT0iQXJyb3dVcCI/KFQucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZ2hsaWdodGVkSW5kZXg9dGhpcy5oaWdobGlnaHRlZEluZGV4LTE8MD9WOnRoaXMuaGlnaGxpZ2h0ZWRJbmRleC0xKTokPT09IkVudGVyIj8oVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF0mJnRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF0pKTokPT09IkVzY2FwZSImJihULnByZXZlbnREZWZhdWx0KCksdGhpcy5pc09wZW5lZD0hMSl9aGFuZGxlU2VhcmNoS2V5ZG93bihUKXsoVC5rZXk9PT0iQXJyb3dEb3duInx8VC5rZXk9PT0iQXJyb3dVcCJ8fFQua2V5PT09IkVudGVyIikmJnRoaXMuaGFuZGxlS2V5RG93bihUKX1oYW5kbGVTZWxlY3RlZEJveEtleWRvd24oVCl7dGhpcy5kaXNhYmxlZHx8KFQua2V5PT09IkVudGVyInx8VC5rZXk9PT0iICI/KFQucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpKTpULmtleT09PSJBcnJvd0Rvd24ifHxULmtleT09PSJBcnJvd1VwIj8oVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNPcGVuZWR8fHRoaXMudG9nZ2xlU2VsZWN0aW9uQm94KCkpOlQua2V5PT09IkVzY2FwZSImJihULnByZXZlbnREZWZhdWx0KCksdGhpcy5pc09wZW5lZCYmKHRoaXMuaXNPcGVuZWQ9ITEpKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbn1zZXRWYWx1ZShUKXt0aGlzLnNlbGVjdGVkT3B0aW9uPVR9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSl9c3RhdGlje18yKGksYSl9fTtyZXR1cm4gRT1pfSkoKX0pO3ZhciB2dXQseXV0PWIoKCk9Pnt1ZSgpO1ZxKCk7ZzIoKTt2dXQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1zaGVsbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDExNjBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgICAgICAgICAuZGVtby1ncmlkLS10d28gewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zdGFjayB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMThweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLW5vdGUgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCJoc2woMjE1IDIwJSAyNiUpIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTMgMTAwJSA5NyUpIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzIlKSIsImhzbCgyMTUgMjAlIDgyJSkiKX07CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS41NTsKICAgICAgICB9CgogICAgICAgIC5kZW1vLW5vdGUgc3Ryb25nIHsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNDUlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zaGVsbCI+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7Ik1vZGVybiBmaWxlIHVwbG9hZGVyIn0KICAgICAgICAuc3VidGl0bGU9JHsiU2hhZGNuLWluc3BpcmVkIGxheW91dCB3aXRoIGRyYWcgJiBkcm9wLCBwcmV2aWV3cyBhbmQgdmFsaWRhdGlvbiJ9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQgZGVtby1ncmlkLS10d28iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQXR0YWNobWVudHMifQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVcGxvYWQgc3VwcG9ydGluZyBkb2N1bWVudHMgZm9yIHlvdXIgcmVxdWVzdCJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS8qLC5wZGYsLnppcCJ9CiAgICAgICAgICAgICAgLm1heFNpemU9JHsxMCoxMDI0KjEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQnJhbmQgYXNzZXRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGhpZ2gtcmVzb2x1dGlvbiBpbWFnZXJ5IChKUEcvUE5HKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS9qcGVnLGltYWdlL3BuZyJ9CiAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ITF9CiAgICAgICAgICAgICAgLm1heFNpemU9JHs1KjEwMjQqMTAyNH0KICAgICAgICAgICAgICAuYnV0dG9uVGV4dD0keyJTZWxlY3QgY292ZXIgaW1hZ2UifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdWRpbyB1cGxvYWRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2hhcmUgcG9kY2FzdCBkcmFmdHMgKE1QMy9XQVYsIG1heCAyNU1CIGVhY2gpIn0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImF1ZGlvLyoifQogICAgICAgICAgICAgIC5tYXhTaXplPSR7MjUqMTAyNCoxMDI0fQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIGV4YW1wbGUifQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVcGxvYWRlciBpcyBkaXNhYmxlZCB3aGlsZSBtb2RlcmF0aW9uIGlzIHBlbmRpbmcifQogICAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiRm9ybSBpbnRlZ3JhdGlvbiJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IkNvbWJpbmUgZmlsZSB1cGxvYWRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERFRVMgZm9ybSBlY29zeXN0ZW0ifQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc3RhY2siPgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IG5hbWUifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkhvdyBzaG91bGQgd2UgcmVmZXIgdG8gdGhpcyBwcm9qZWN0IGludGVybmFsbHk/In0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0TmFtZSJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ29udGFjdCBlbWFpbCJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7ImVtYWlsIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAgICAgLmtleT0keyJjb250YWN0RW1haWwifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IlN0YXRlbWVudCBvZiB3b3JrIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVcGxvYWQgYSBzaWduZWQgc3RhdGVtZW50IG9mIHdvcmsgKFBERiwgbWF4IDE1TUIpIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAgICAgLmFjY2VwdD0keyJhcHBsaWNhdGlvbi9wZGYifQogICAgICAgICAgICAgICAgLm1heFNpemU9JHsxNSoxMDI0KjEwMjR9CiAgICAgICAgICAgICAgICAubXVsdGlwbGU9JHshMX0KICAgICAgICAgICAgICAgIC5rZXk9JHsic293In0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJDcmVhdGl2ZSByZWZlcmVuY2VzIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJPcHRpb25hbC4gVXBsb2FkIHVwIHRvIGZpdmUgdmlzdWFsIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS8qIn0KICAgICAgICAgICAgICAgIC5tYXhGaWxlcz0kezV9CiAgICAgICAgICAgICAgICAubWF4U2l6ZT0kezgqMTAyNCoxMDI0fQogICAgICAgICAgICAgICAgLmtleT0keyJyZWZlcmVuY2VzIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJOb3RlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIG9wdGlvbmFsIGNvbnRleHQgZm9yIHJldmlld2VycyJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgICAgIC5rZXk9JHsibm90ZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IGJyaWVmaW5nIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGVlcy1mb3JtPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+R29vZCB0byBrbm93Ojwvc3Ryb25nPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkRyYWcgJiBkcm9wIGhpZ2hsaWdodHMgdGhlIGRyb3B6b25lIGFuZCBzdXBwb3J0cyBrZXlib2FyZCBhY3RpdmF0aW9uLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHN1bW1hcmlzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSA8Y29kZT5hY2NlcHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgogICAgICAgICAgICAgIDxsaT5JbWFnZSB1cGxvYWRzIHNob3cgbGl2ZSBwcmV2aWV3cyBnZW5lcmF0ZWQgdmlhIDxjb2RlPlVSTC5jcmVhdGVPYmplY3RVUkw8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpPkZpbGUgc2l6ZSBhbmQgZmlsZS1jb3VudCBsaW1pdHMgc3VyZmFjZSBpbmxpbmUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UaGUgY29tcG9uZW50IHN0YXlzIGNvbXBhdGlibGUgd2l0aCA8Y29kZT5kZWVzLWZvcm08L2NvZGU+IHZhbHVlIGFjY2Vzc29ycy48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciB4dXQsd3V0PWIoKCk9Pnt1ZSgpO18xKCk7eHV0PVtoLmRlZmF1bHRTdHlsZXMsLi4uWGUuYmFzZVN0eWxlcyxRYAogICAgOmhvc3QgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKCiAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZHJvcHpvbmUgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgIGJvcmRlcjogMS41cHggZGFzaGVkICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA4MCUpIiwiaHNsKDIxNyAyMCUgMjUlKSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMCUgMTIlKSIpfSwKICAgICAgICAwIDAgMCA0cHggJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuNSkiLCJoc2woMjEzIDkzJSA2OCUgLyAwLjQpIil9OwogICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBib3gtc2hhZG93OiAwIDEycHggMzJweCAke2guYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjEyKSIsInJnYmEoMCwgMCwgMCwgMC4zNSkiKX07CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjA2KSIsImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCJoc2woMjE1IDIwJSAxMSUpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0tZGlzYWJsZWQgewogICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgfQoKICAgIC5kcm9wem9uZV9fYm9keSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogMTZweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2ljb24gewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMTIpIiwiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkiKX07CiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYW5pbWF0aW9uOiBsb2FkZXItc3BpbiAwLjZzIGxpbmVhciBpbmZpbml0ZTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2NvbnRlbnQgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDRweDsKICAgICAgbWluLXdpZHRoOiAwOwogICAgfQoKICAgIC5kcm9wem9uZV9faGVhZGxpbmUgewogICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMiA0NyUgMTElKSIsImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBwYWRkaW5nOiAwOwogICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZTpob3ZlciB7CiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmRpc2FibGVkIHsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgb3BhY2l0eTogMC42OwogICAgfQoKICAgIC5kcm9wem9uZV9fbWV0YSB7CiAgICAgIG1hcmdpbi10b3A6IDE0cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA1MCUpIiwiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCJoc2woMjEzIDkzJSAxOCUpIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgOTAlKSIsImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgcGFkZGluZy10b3A6IDIwcHg7CiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgOTAlKSIsImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDY4JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXIgewogICAgICBhcHBlYXJhbmNlOiBub25lOwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmZpbGUtbGlzdF9faXRlbXMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmZpbGUtcm93IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC41KSIsImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwiaHNsKDIxNyAyNSUgMjYlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICB9CgogICAgLmZpbGUtcm93OmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjgpIiwiaHNsKDIxNSAyMCUgMTYlIC8gMC44KSIpfTsKICAgIH0KCiAgICAuZmlsZS10aHVtYiB7CiAgICAgIHdpZHRoOiAzNnB4OwogICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIGhlaWdodDogMThweDsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKCiAgICAudGh1bWItaW1hZ2UgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgIH0KCiAgICAuZmlsZS1tZXRhIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiA0cHg7CiAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAuZmlsZS1uYW1lIHsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCJoc2woMjEwIDIwJSA5NiUpIil9OwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICAuZmlsZS1kZXRhaWxzIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDMyJSAyOCUpIil9OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtOwogICAgICBsaW5lLWhlaWdodDogMTsKICAgIH0KCiAgICAuZmlsZS1hY3Rpb25zIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uIHsKICAgICAgd2lkdGg6IDI4cHg7CiAgICAgIGhlaWdodDogMjhweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIHRyYW5zZm9ybSAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUyJSkiLCJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsImhzbCgwIDYyJSAzMiUgLyAwLjE1KSIpfTsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCA3MiUgNDYlKSIsImhzbCgwIDcwJSA3MCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmFjdGl2ZSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Nik7CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxNHB4OwogICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC52YWxpZGF0aW9uLW1lc3NhZ2UgewogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIlIDQwJSkiLCJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgXX0pO3ZhciBXcixvMixIeCxWcT1iKCgpPT57XzEoKTt5dXQoKTt3dXQoKTtFdCgpO0FsKCk7dWUoKTtXcj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LG8yPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxIeD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdO3ZhciBWPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgUj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHthdHRyaWJ1dGU6ITF9KV0sZD1bSygpXSxsPVtLKCldLHk9W0koe3R5cGU6U3RyaW5nfSldLHg9W0koe3R5cGU6U3RyaW5nfSldLEY9W0koe3R5cGU6Qm9vbGVhbn0pXSxOPVtJKHt0eXBlOk51bWJlcn0pXSxxPVtJKHt0eXBlOk51bWJlcn0pXSxFPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLFdyKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJ2YWx1ZSJpbiBVLGdldDpVPT5VLnZhbHVlLHNldDooVSxyZSk9PntVLnZhbHVlPXJlfX0sbWV0YWRhdGE6Un0sbixvKSxXcih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN0YXRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4ic3RhdGUiaW4gVSxnZXQ6VT0+VS5zdGF0ZSxzZXQ6KFUscmUpPT57VS5zdGF0ZT1yZX19LG1ldGFkYXRhOlJ9LGMscCksV3IodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0xvYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJpc0xvYWRpbmciaW4gVSxnZXQ6VT0+VS5pc0xvYWRpbmcsc2V0OihVLHJlKT0+e1UuaXNMb2FkaW5nPXJlfX0sbWV0YWRhdGE6Un0sZixnKSxXcih0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJ1dHRvblRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJidXR0b25UZXh0ImluIFUsZ2V0OlU9PlUuYnV0dG9uVGV4dCxzZXQ6KFUscmUpPT57VS5idXR0b25UZXh0PXJlfX0sbWV0YWRhdGE6Un0sdixtKSxXcih0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjY2VwdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VT0+ImFjY2VwdCJpbiBVLGdldDpVPT5VLmFjY2VwdCxzZXQ6KFUscmUpPT57VS5hY2NlcHQ9cmV9fSxtZXRhZGF0YTpSfSxNLFMpLFdyKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibXVsdGlwbGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJtdWx0aXBsZSJpbiBVLGdldDpVPT5VLm11bHRpcGxlLHNldDooVSxyZSk9PntVLm11bHRpcGxlPXJlfX0sbWV0YWRhdGE6Un0sXyxrKSxXcih0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1heFNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJtYXhTaXplImluIFUsZ2V0OlU9PlUubWF4U2l6ZSxzZXQ6KFUscmUpPT57VS5tYXhTaXplPXJlfX0sbWV0YWRhdGE6Un0sTCxBKSxXcih0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1heEZpbGVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4ibWF4RmlsZXMiaW4gVSxnZXQ6VT0+VS5tYXhGaWxlcyxzZXQ6KFUscmUpPT57VS5tYXhGaWxlcz1yZX19LG1ldGFkYXRhOlJ9LEMseiksV3IodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWxpZGF0aW9uU3RhdGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJ2YWxpZGF0aW9uU3RhdGUiaW4gVSxnZXQ6VT0+VS52YWxpZGF0aW9uU3RhdGUsc2V0OihVLHJlKT0+e1UudmFsaWRhdGlvblN0YXRlPXJlfX0sbWV0YWRhdGE6Un0sVCwkKSxXcihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpSfSxudWxsLGEpLFY9aT1lLnZhbHVlLFImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Un0pfXN0YXRpYyBkZW1vPXZ1dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIklucHV0Il07I2U9bzIodGhpcyxuLFtdKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoUil7dGhpcy4jZT1SfSN0PShvMih0aGlzLG8pLG8yKHRoaXMsYywiaWRsZSIpKTtnZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc3RhdGUoUil7dGhpcy4jdD1SfSNhPShvMih0aGlzLHApLG8yKHRoaXMsZiwhMSkpO2dldCBpc0xvYWRpbmcoKXtyZXR1cm4gdGhpcy4jYX1zZXQgaXNMb2FkaW5nKFIpe3RoaXMuI2E9Un0jaT0obzIodGhpcyxnKSxvMih0aGlzLHYsIlNlbGVjdCBmaWxlcyIpKTtnZXQgYnV0dG9uVGV4dCgpe3JldHVybiB0aGlzLiNpfXNldCBidXR0b25UZXh0KFIpe3RoaXMuI2k9Un0jcj0obzIodGhpcyxtKSxvMih0aGlzLE0sIiIpKTtnZXQgYWNjZXB0KCl7cmV0dXJuIHRoaXMuI3J9c2V0IGFjY2VwdChSKXt0aGlzLiNyPVJ9I3M9KG8yKHRoaXMsUyksbzIodGhpcyxfLCEwKSk7Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IG11bHRpcGxlKFIpe3RoaXMuI3M9Un0jbj0obzIodGhpcyxrKSxvMih0aGlzLEwsMCkpO2dldCBtYXhTaXplKCl7cmV0dXJuIHRoaXMuI259c2V0IG1heFNpemUoUil7dGhpcy4jbj1SfSNvPShvMih0aGlzLEEpLG8yKHRoaXMsQywwKSk7Z2V0IG1heEZpbGVzKCl7cmV0dXJuIHRoaXMuI299c2V0IG1heEZpbGVzKFIpe3RoaXMuI289Un0jbD0obzIodGhpcyx6KSxvMih0aGlzLFQsbnVsbCkpO2dldCB2YWxpZGF0aW9uU3RhdGUoKXtyZXR1cm4gdGhpcy4jbH1zZXQgdmFsaWRhdGlvblN0YXRlKFIpe3RoaXMuI2w9Un0jYz0obzIodGhpcywkKSwiIik7Z2V0IHZhbGlkYXRpb25NZXNzYWdlKCl7cmV0dXJuIHRoaXMuI2N9c2V0IHZhbGlkYXRpb25NZXNzYWdlKFIpe3RoaXMuI2M9Un1wcmV2aWV3VXJsTWFwPW5ldyBXZWFrTWFwO2Ryb3BBcmVhPW51bGw7c3RhdGljIHN0eWxlcz14dXQ7cmVuZGVyKCl7bGV0IFI9dGhpcy5nZXRBY2NlcHRlZFN1bW1hcnkoKSxVPVt0aGlzLm11bHRpcGxlPyJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiOiJTaW5nbGUgZmlsZSBvbmx5Iix0aGlzLm1heFNpemU+MD9gTWF4ICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWA6Ik5vIHNpemUgbGltaXQiXTtyZXR1cm4gUiYmVS5wdXNoKGBBY2NlcHRzICR7Un1gKSx3YAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZT09PSJkcmFnT3ZlciI/ImRyb3B6b25lLS1hY3RpdmUiOiIifSAke3RoaXMuZGlzYWJsZWQ/ImRyb3B6b25lLS1kaXNhYmxlZCI6IiJ9ICR7dGhpcy52YWx1ZS5sZW5ndGg+MD8iZHJvcHpvbmUtLWhhcy1maWxlcyI6IiJ9IgogICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgdGFiaW5kZXg9JHt0aGlzLmRpc2FibGVkPy0xOjB9CiAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIGFyaWEtbGFiZWw9JHtgU2VsZWN0IGZpbGVzJHtSP2AgKCR7Un0pYDoiIn1gfQogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVEcm9wem9uZUNsaWNrfQogICAgICAgICAgQGtleWRvd249JHt0aGlzLmhhbmRsZURyb3B6b25lS2V5ZG93bn0KICAgICAgICA+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgY2xhc3M9ImZpbGUtaW5wdXQiCiAgICAgICAgICAgIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IG9wYWNpdHk6IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsgdG9wOiAwOyBsZWZ0OiAwOyBvdmVyZmxvdzogaGlkZGVuOyIKICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgP211bHRpcGxlPSR7dGhpcy5tdWx0aXBsZX0KICAgICAgICAgICAgYWNjZXB0PSR7dGhpcy5hY2NlcHR8fCIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nP3dgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YDp3YDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHR8fCJTZWxlY3QgZmlsZXMifTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZHJvcHpvbmVfX3N1YmxpbmUiPgogICAgICAgICAgICAgICAgRHJhZyBhbmQgZHJvcCBmaWxlcyBoZXJlIG9yCiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3B6b25lX19icm93c2UiCiAgICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQnJvd3NlQ2xpY2t9CiAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIGJyb3dzZQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcHpvbmVfX21ldGEiPgogICAgICAgICAgICAke1UubWFwKHJlPT53YDxzcGFuPiR7cmV9PC9zcGFuPmApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke3RoaXMucmVuZGVyRmlsZUxpc3QoKX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMudmFsaWRhdGlvbk1lc3NhZ2U/d2A8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uLW1lc3NhZ2UiIGFyaWEtbGl2ZT0icG9saXRlIj4ke3RoaXMudmFsaWRhdGlvbk1lc3NhZ2V9PC9kaXY+YDp3YGB9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJGaWxlTGlzdCgpe3JldHVybiB0aGlzLnZhbHVlLmxlbmd0aD09PTA/d2BgOndgCiAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19oZWFkZXIiPgogICAgICAgICAgPHNwYW4+JHt0aGlzLnZhbHVlLmxlbmd0aH0gZmlsZSR7dGhpcy52YWx1ZS5sZW5ndGg9PT0xPyIiOiJzIn0gc2VsZWN0ZWQ8L3NwYW4+CiAgICAgICAgICAke3RoaXMudmFsdWUubGVuZ3RoPjA/d2A8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImZpbGUtbGlzdF9fY2xlYXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xlYXJBbGx9PkNsZWFyICR7dGhpcy52YWx1ZS5sZW5ndGg+MT8iYWxsIjoiIn08L2J1dHRvbj5gOndgYH0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2l0ZW1zIj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5tYXAoUj0+dGhpcy5yZW5kZXJGaWxlUm93KFIpKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckZpbGVSb3coUil7bGV0IFU9dGhpcy5nZXRGaWxlVHlwZShSKSxyZT10aGlzLmNhblNob3dQcmV2aWV3KFIpP3RoaXMuZ2V0UHJldmlld1VybChSKTpudWxsO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJmaWxlLXJvdyAke1V9LWZpbGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtdGh1bWIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICR7cmU/d2A8aW1nIGNsYXNzPSJ0aHVtYi1pbWFnZSIgc3JjPSR7cmV9IGFsdD0ke2BQcmV2aWV3IG9mICR7Ui5uYW1lfWB9PmA6d2A8ZGVlcy1pY29uIGljb249JHt0aGlzLmdldEZpbGVJY29uKFIpfT48L2RlZXMtaWNvbj5gfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbWV0YSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSR7Ui5uYW1lfT4ke1IubmFtZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtZGV0YWlscyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPiR7dGhpcy5mb3JtYXRGaWxlU2l6ZShSLnNpemUpfTwvc3Bhbj4KICAgICAgICAgICAgJHtVIT09ImZpbGUiP3dgPHNwYW4gY2xhc3M9ImZpbGUtdHlwZSI+JHtVfTwvc3Bhbj5gOndgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtYWN0aW9ucyI+CiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgY2xhc3M9InJlbW92ZS1idXR0b24iCiAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLnJlbW92ZUZpbGUoUil9CiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgUmVtb3ZlICR7Ui5uYW1lfWB9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1oYW5kbGVGaWxlSW5wdXRDaGFuZ2U9YXN5bmMgUj0+e3RoaXMuaXNMb2FkaW5nPSExO2xldCBVPVIudGFyZ2V0LHJlPUFycmF5LmZyb20oVS5maWxlcz8/W10pO3JlLmxlbmd0aD4wJiZhd2FpdCB0aGlzLmFkZEZpbGVzKHJlKSxVLnZhbHVlPSIifTtoYW5kbGVEcm9wem9uZUNsaWNrPVI9Pnt0aGlzLmRpc2FibGVkfHxSLnRhcmdldC5jbG9zZXN0KCIuZHJvcHpvbmVfX2Jyb3dzZSwgLmZpbGUtbGlzdCIpfHx0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKX07aGFuZGxlQnJvd3NlQ2xpY2s9Uj0+e3RoaXMuZGlzYWJsZWR8fChSLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3BlbkZpbGVTZWxlY3RvcigpKX07aGFuZGxlRHJvcHpvbmVLZXlkb3duPVI9Pnt0aGlzLmRpc2FibGVkfHwoUi5rZXk9PT0iRW50ZXIifHxSLmtleT09PSIgIikmJihSLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCkpfTtoYW5kbGVDbGVhckFsbD1SPT57Ui5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xlYXJBbGwoKX07aGFuZGxlRHJhZ0V2ZW50PWFzeW5jIFI9PntpZihSLnByZXZlbnREZWZhdWx0KCksUi5zdG9wUHJvcGFnYXRpb24oKSwhdGhpcy5kaXNhYmxlZCl7aWYoUi50eXBlPT09ImRyYWdlbnRlciJ8fFIudHlwZT09PSJkcmFnb3ZlciIpe1IuZGF0YVRyYW5zZmVyJiYoUi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSIpLHRoaXMuc3RhdGU9ImRyYWdPdmVyIjtyZXR1cm59aWYoUi50eXBlPT09ImRyYWdsZWF2ZSIpe2lmKCF0aGlzLmRyb3BBcmVhKXt0aGlzLnN0YXRlPSJpZGxlIjtyZXR1cm59bGV0IFU9dGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7Y2xpZW50WDpyZT0wLGNsaWVudFk6aj0wfT1SOyhyZTw9VS5sZWZ0fHxyZT49VS5yaWdodHx8ajw9VS50b3B8fGo+PVUuYm90dG9tKSYmKHRoaXMuc3RhdGU9ImlkbGUiKTtyZXR1cm59aWYoUi50eXBlPT09ImRyb3AiKXt0aGlzLnN0YXRlPSJpZGxlIjtsZXQgVT1BcnJheS5mcm9tKFIuZGF0YVRyYW5zZmVyPy5maWxlcz8/W10pO1UubGVuZ3RoPjAmJmF3YWl0IHRoaXMuYWRkRmlsZXMoVSl9fX07YXR0YWNoRHJvcExpc3RlbmVycygpe3RoaXMuZHJvcEFyZWEmJlsiZHJhZ2VudGVyIiwiZHJhZ292ZXIiLCJkcmFnbGVhdmUiLCJkcm9wIl0uZm9yRWFjaChSPT57dGhpcy5kcm9wQXJlYS5hZGRFdmVudExpc3RlbmVyKFIsdGhpcy5oYW5kbGVEcmFnRXZlbnQpfSl9ZGV0YWNoRHJvcExpc3RlbmVycygpe3RoaXMuZHJvcEFyZWEmJlsiZHJhZ2VudGVyIiwiZHJhZ292ZXIiLCJkcmFnbGVhdmUiLCJkcm9wIl0uZm9yRWFjaChSPT57dGhpcy5kcm9wQXJlYS5yZW1vdmVFdmVudExpc3RlbmVyKFIsdGhpcy5oYW5kbGVEcmFnRXZlbnQpfSl9cmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpe2xldCBSPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRyb3B6b25lIik7UiE9PXRoaXMuZHJvcEFyZWEmJih0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKSx0aGlzLmRyb3BBcmVhPVIsdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCkpfWZvcm1hdEZpbGVTaXplKFIpe2xldCBVPVsiQnl0ZXMiLCJLQiIsIk1CIiwiR0IiXTtpZihSPT09MClyZXR1cm4iMCBCeXRlcyI7bGV0IHJlPU1hdGgubWluKE1hdGguZmxvb3IoTWF0aC5sb2coUikvTWF0aC5sb2coMTAyNCkpLFUubGVuZ3RoLTEpLGo9Ui9NYXRoLnBvdygxMDI0LHJlKTtyZXR1cm5gJHtNYXRoLnJvdW5kKGoqMTAwKS8xMDB9ICR7VVtyZV19YH1nZXRGaWxlVHlwZShSKXtsZXQgVT1SLnR5cGUudG9Mb3dlckNhc2UoKTtyZXR1cm4gVS5zdGFydHNXaXRoKCJpbWFnZS8iKT8iaW1hZ2UiOlU9PT0iYXBwbGljYXRpb24vcGRmIj8icGRmIjpVLmluY2x1ZGVzKCJ3b3JkIil8fFUuaW5jbHVkZXMoImRvY3VtZW50Iik/ImRvYyI6VS5pbmNsdWRlcygic2hlZXQiKXx8VS5pbmNsdWRlcygiZXhjZWwiKT8ic3ByZWFkc2hlZXQiOlUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpfHxVLmluY2x1ZGVzKCJwb3dlcnBvaW50Iik/InByZXNlbnRhdGlvbiI6VS5zdGFydHNXaXRoKCJ2aWRlby8iKT8idmlkZW8iOlUuc3RhcnRzV2l0aCgiYXVkaW8vIik/ImF1ZGlvIjpVLmluY2x1ZGVzKCJ6aXAiKXx8VS5pbmNsdWRlcygiY29tcHJlc3NlZCIpPyJhcmNoaXZlIjoiZmlsZSJ9Z2V0RmlsZUljb24oUil7bGV0IFU9dGhpcy5nZXRGaWxlVHlwZShSKTtyZXR1cm57aW1hZ2U6Imx1Y2lkZTpGaWxlSW1hZ2UiLHBkZjoibHVjaWRlOkZpbGVUZXh0Iixkb2M6Imx1Y2lkZTpGaWxlVGV4dCIsc3ByZWFkc2hlZXQ6Imx1Y2lkZTpGaWxlU3ByZWFkc2hlZXQiLHByZXNlbnRhdGlvbjoibHVjaWRlOkZpbGVCYXJDaGFydCIsdmlkZW86Imx1Y2lkZTpGaWxlVmlkZW8iLGF1ZGlvOiJsdWNpZGU6RmlsZUF1ZGlvIixhcmNoaXZlOiJsdWNpZGU6RmlsZUFyY2hpdmUiLGZpbGU6Imx1Y2lkZTpGaWxlIn1bVV0/PyJsdWNpZGU6RmlsZSJ9Y2FuU2hvd1ByZXZpZXcoUil7cmV0dXJuIFIudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSYmUi5zaXplPDUqMTAyNCoxMDI0fXZhbGlkYXRlRmlsZShSKXtpZih0aGlzLm1heFNpemU+MCYmUi5zaXplPnRoaXMubWF4U2l6ZSlyZXR1cm4gdGhpcy52YWxpZGF0aW9uTWVzc2FnZT1gRmlsZSAiJHtSLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YCx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCIsITE7aWYodGhpcy5hY2NlcHQpe2xldCBVPXRoaXMuYWNjZXB0LnNwbGl0KCIsIikubWFwKHJlPT5yZS50cmltKCkpLmZpbHRlcihyZT0+cmUubGVuZ3RoPjApO2lmKFUubGVuZ3RoPjApe2xldCByZT0hMTtmb3IobGV0IGogb2YgVSlpZihqLnN0YXJ0c1dpdGgoIi4iKSl7aWYoUi5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoai50b0xvd2VyQ2FzZSgpKSl7cmU9ITA7YnJlYWt9fWVsc2UgaWYoai5lbmRzV2l0aCgiLyoiKSl7bGV0IG1lPWouc2xpY2UoMCwtMik7aWYoUi50eXBlLnN0YXJ0c1dpdGgobWUpKXtyZT0hMDticmVha319ZWxzZSBpZihSLnR5cGU9PT1qKXtyZT0hMDticmVha31pZighcmUpcmV0dXJuIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9YEZpbGUgdHlwZSBub3QgYWNjZXB0ZWQuIEFsbG93ZWQ6ICR7VS5qb2luKCIsICIpfWAsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiLCExfX1yZXR1cm4hMH1nZXRQcmV2aWV3VXJsKFIpe2xldCBVPXRoaXMucHJldmlld1VybE1hcC5nZXQoUik7cmV0dXJuIFV8fChVPVVSTC5jcmVhdGVPYmplY3RVUkwoUiksdGhpcy5wcmV2aWV3VXJsTWFwLnNldChSLFUpKSxVfXJlbGVhc2VQcmV2aWV3KFIpe2xldCBVPXRoaXMucHJldmlld1VybE1hcC5nZXQoUik7VSYmKFVSTC5yZXZva2VPYmplY3RVUkwoVSksdGhpcy5wcmV2aWV3VXJsTWFwLmRlbGV0ZShSKSl9Z2V0QWNjZXB0ZWRTdW1tYXJ5KCl7aWYoIXRoaXMuYWNjZXB0KXJldHVybiBudWxsO2xldCBSPUFycmF5LmZyb20obmV3IFNldCh0aGlzLmFjY2VwdC5zcGxpdCgiLCIpLm1hcChVPT5VLnRyaW0oKSkuZmlsdGVyKFU9PlUubGVuZ3RoPjApLm1hcChVPT50aGlzLmZvcm1hdEFjY2VwdFRva2VuKFUpKSkpLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gUi5sZW5ndGg9PT0wP251bGw6Ui5sZW5ndGg9PT0xP1JbMF06Ui5sZW5ndGg9PT0yP2Ake1JbMF19LCAke1JbMV19YDpgJHtSLnNsaWNlKDAsMikuam9pbigiLCAiKX1cdTIwMjZgfWZvcm1hdEFjY2VwdFRva2VuKFIpe2lmKFI9PT0iKi8qIilyZXR1cm4iQWxsIGZpbGVzIjtpZihSLmVuZHNXaXRoKCIvKiIpKXtsZXQgaj1SLnNwbGl0KCIvIilbMF07cmV0dXJuIGo/YCR7ai5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2ouc2xpY2UoMSl9IGZpbGVzYDoiQWxsIGZpbGVzIn1yZXR1cm4gUi5zdGFydHNXaXRoKCIuIik/Ui5zbGljZSgxKS50b1VwcGVyQ2FzZSgpOlIuaW5jbHVkZXMoInBkZiIpPyJQREYiOlIuaW5jbHVkZXMoInppcCIpPyJaSVAiOlIuaW5jbHVkZXMoImpzb24iKT8iSlNPTiI6Ui5pbmNsdWRlcygibXN3b3JkIik/IkRPQyI6Ui5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpPyJET0NYIjpSLmluY2x1ZGVzKCJleGNlbCIpPyJYTFMiOlIuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpPyJQUFQiOihSLnNwbGl0KCIvIikucG9wKCk/P1IpLnRvVXBwZXJDYXNlKCl9YXR0YWNoTGlmZWN5Y2xlTGlzdGVuZXJzKCl7dGhpcy5yZWJpbmRJbnRlcmFjdGl2ZUVsZW1lbnRzKCl9Zmlyc3RVcGRhdGVkKFIpe3N1cGVyLmZpcnN0VXBkYXRlZChSKSx0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpfXVwZGF0ZWQoUil7c3VwZXIudXBkYXRlZChSKSxSLmhhcygidmFsdWUiKSYmdGhpcy52YWxpZGF0ZSgpLHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5kZXRhY2hEcm9wTGlzdGVuZXJzKCksdGhpcy52YWx1ZS5mb3JFYWNoKFI9PnRoaXMucmVsZWFzZVByZXZpZXcoUikpLHRoaXMucHJldmlld1VybE1hcD1uZXcgV2Vha01hcCxhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfWFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKXtpZih0aGlzLmRpc2FibGVkfHx0aGlzLmlzTG9hZGluZylyZXR1cm47dGhpcy5pc0xvYWRpbmc9ITA7bGV0IFI9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZmlsZS1pbnB1dCIpO2lmKCFSKXt0aGlzLmlzTG9hZGluZz0hMTtyZXR1cm59bGV0IFU9KCk9PntzZXRUaW1lb3V0KCgpPT57KCFSLmZpbGVzfHxSLmZpbGVzLmxlbmd0aD09PTApJiYodGhpcy5pc0xvYWRpbmc9ITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsVSl9LDMwMCl9O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsVSksUi5jbGljaygpfXJlbW92ZUZpbGUoUil7bGV0IFU9dGhpcy52YWx1ZS5pbmRleE9mKFIpO1U+LTEmJih0aGlzLnJlbGVhc2VQcmV2aWV3KFIpLHRoaXMudmFsdWUuc3BsaWNlKFUsMSksdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpLHRoaXMudmFsaWRhdGUoKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSl9Y2xlYXJBbGwoKXtsZXQgUj1bLi4udGhpcy52YWx1ZV07dGhpcy52YWx1ZT1bXSxSLmZvckVhY2goVT0+dGhpcy5yZWxlYXNlUHJldmlldyhVKSksdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpLHRoaXMudmFsaWRhdGUoKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx0aGlzLmJ1dHRvblRleHQ9IlNlbGVjdCBmaWxlcyJ9YXN5bmMgdXBkYXRlVmFsdWUoUil7bGV0IFU9Ui50YXJnZXQ7dGhpcy52YWx1ZT1BcnJheS5mcm9tKFUuZmlsZXM/P1tdKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1zZXRWYWx1ZShSKXt0aGlzLnZhbHVlLmZvckVhY2goVT0+dGhpcy5yZWxlYXNlUHJldmlldyhVKSksdGhpcy52YWx1ZT1SLFIubGVuZ3RoPjA/dGhpcy5idXR0b25UZXh0PXRoaXMubXVsdGlwbGU/IkFkZCBtb3JlIGZpbGVzIjoiUmVwbGFjZSBmaWxlIjp0aGlzLmJ1dHRvblRleHQ9IlNlbGVjdCBmaWxlcyIsdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpLHRoaXMudmFsaWRhdGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfWFzeW5jIGFkZEZpbGVzKFIpe2xldCBVPVtdO2ZvcihsZXQgcmUgb2YgUil0aGlzLnZhbGlkYXRlRmlsZShyZSkmJlUucHVzaChyZSk7aWYoVS5sZW5ndGg9PT0wKXt0aGlzLmlzTG9hZGluZz0hMTtyZXR1cm59aWYodGhpcy5tYXhGaWxlcz4wJiZ0aGlzLnZhbHVlLmxlbmd0aCtVLmxlbmd0aD50aGlzLm1heEZpbGVzKXtsZXQgaj10aGlzLm1heEZpbGVzLXRoaXMudmFsdWUubGVuZ3RoO2lmKGo8PTApe3RoaXMudmFsaWRhdGlvbk1lc3NhZ2U9YE1heGltdW0gJHt0aGlzLm1heEZpbGVzfSBmaWxlcyBhbGxvd2VkYCx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCIsdGhpcy5pc0xvYWRpbmc9ITE7cmV0dXJufVUuc3BsaWNlKGopLHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9YE9ubHkgJHtqfSBtb3JlIGZpbGUocykgY2FuIGJlIGFkZGVkYCx0aGlzLnZhbGlkYXRpb25TdGF0ZT0id2FybiJ9IXRoaXMubXVsdGlwbGUmJlUubGVuZ3RoPjA/KHRoaXMudmFsdWUuZm9yRWFjaChyZT0+dGhpcy5yZWxlYXNlUHJldmlldyhyZSkpLHRoaXMudmFsdWU9W1VbMF1dKTp0aGlzLnZhbHVlLnB1c2goLi4uVSksdGhpcy52YWxpZGF0aW9uTWVzc2FnZT0iIix0aGlzLnZhbGlkYXRpb25TdGF0ZT1udWxsLHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKSxhd2FpdCB0aGlzLnZhbGlkYXRlKCksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyksdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy52YWx1ZS5sZW5ndGg+MD90aGlzLmJ1dHRvblRleHQ9dGhpcy5tdWx0aXBsZT8iQWRkIG1vcmUgZmlsZXMiOiJSZXBsYWNlIGZpbGUiOnRoaXMuYnV0dG9uVGV4dD0iU2VsZWN0IGZpbGVzIn1hc3luYyB2YWxpZGF0ZSgpe2lmKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9IiIsdGhpcy5yZXF1aXJlZCYmdGhpcy52YWx1ZS5sZW5ndGg9PT0wKXJldHVybiB0aGlzLnZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCIsdGhpcy52YWxpZGF0aW9uTWVzc2FnZT0iUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZmlsZSIsITE7Zm9yKGxldCBSIG9mIHRoaXMudmFsdWUpaWYoIXRoaXMudmFsaWRhdGVGaWxlKFIpKXJldHVybiExO3JldHVybiB0aGlzLnZhbGlkYXRpb25TdGF0ZT10aGlzLnZhbHVlLmxlbmd0aD4wPyJ2YWxpZCI6bnVsbCwhMH1zdGF0aWN7bzIoaSxhKX19O3JldHVybiBWPWl9KSgpfSk7dmFyIGpxPWIoKCk9PntWcSgpfSk7ZnVuY3Rpb24gR3EodCxlKXtpZihlPT09dm9pZCAwJiYoZT17YWxsb3dRUklCQU46ITB9KSx0PT1udWxsKXJldHVybiExO3ZhciBhPW5ldyBSZWdFeHAoIl5bMC05XXsyfSQiLCIiKSxpPXQuc2xpY2UoMCwyKSxyPXlpW2ldO3JldHVybiByPT09dm9pZCAwfHxyLmJiYW5fcmVnZXhwPT09dm9pZCAwfHxyLmJiYW5fcmVnZXhwPT09bnVsbHx8ci5jaGFycz09PXZvaWQgMD8hMTpyLmNoYXJzPT09dC5sZW5ndGgmJmEudGVzdCh0LnNsaWNlKDIsNCkpJiZyVXQodC5zbGljZSg0KSxpKSYmenV0KHQpJiYoZS5hbGxvd1FSSUJBTnx8IU11dCh0KSl9ZnVuY3Rpb24gbWUyKHQsZSl7ZT09PXZvaWQgMCYmKGU9e2FsbG93UVJJQkFOOiEwfSk7dmFyIGE9e2Vycm9yQ29kZXM6W10sdmFsaWQ6ITB9O2lmKHQhPW51bGwmJnQhPT0iIil7dmFyIGk9eWlbdC5zbGljZSgwLDIpXTtpZighaXx8IShpLmJiYW5fcmVnZXhwfHxpLmNoYXJzKSlyZXR1cm4gYS52YWxpZD0hMSxhLmVycm9yQ29kZXMucHVzaChLaS5Ob0lCQU5Db3VudHJ5KSxhO2kmJmkuY2hhcnMmJmkuY2hhcnMhPT10Lmxlbmd0aCYmKGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2goS2kuV3JvbmdCQkFOTGVuZ3RoKSksaSYmaS5iYmFuX3JlZ2V4cCYmIVVxKHQuc2xpY2UoNCksaS5iYmFuX3JlZ2V4cCkmJihhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKEtpLldyb25nQkJBTkZvcm1hdCkpLGkmJmkuYmJhbl92YWxpZGF0aW9uX2Z1bmMmJiFpLmJiYW5fdmFsaWRhdGlvbl9mdW5jKHQuc2xpY2UoNCkpJiYoYS52YWxpZD0hMSxhLmVycm9yQ29kZXMucHVzaChLaS5Xcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0pKTt2YXIgcj1uZXcgUmVnRXhwKCJeWzAtOV17Mn0kIiwiIik7ci50ZXN0KHQuc2xpY2UoMiw0KSl8fChhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKEtpLkNoZWNrc3VtTm90TnVtYmVyKSksKGEuZXJyb3JDb2Rlcy5pbmRleE9mKEtpLldyb25nQkJBTkZvcm1hdCkhPT0tMXx8IXp1dCh0KSkmJihhLnZhbGlkPSExLGEuZXJyb3JDb2Rlcy5wdXNoKEtpLldyb25nSUJBTkNoZWNrc3VtKSksIWUuYWxsb3dRUklCQU4mJk11dCh0KSYmKGEudmFsaWQ9ITEsYS5lcnJvckNvZGVzLnB1c2goS2kuUVJJQkFOTm90QWxsb3dlZCkpfWVsc2UgYS52YWxpZD0hMSxhLmVycm9yQ29kZXMucHVzaChLaS5Ob0lCQU5Qcm92aWRlZCk7cmV0dXJuIGF9ZnVuY3Rpb24gclV0KHQsZSl7aWYodD09bnVsbHx8ZT09PXZvaWQgMHx8ZT09PW51bGwpcmV0dXJuITE7dmFyIGE9eWlbZV07cmV0dXJuIGE9PW51bGx8fGEuYmJhbl9yZWdleHA9PT12b2lkIDB8fGEuYmJhbl9yZWdleHA9PT1udWxsfHxhLmNoYXJzPT09dm9pZCAwfHxhLmNoYXJzPT09bnVsbD8hMTphLmNoYXJzLTQ9PT10Lmxlbmd0aCYmVXEodCxhLmJiYW5fcmVnZXhwKT9hLmJiYW5fdmFsaWRhdGlvbl9mdW5jP2EuYmJhbl92YWxpZGF0aW9uX2Z1bmModC5yZXBsYWNlKC9bXHMuXSsvZywiIikpOiEwOiExfWZ1bmN0aW9uIGdlMih0KXtpZih0IT1udWxsKXt2YXIgZT15aVt0XTtpZihlIT09dm9pZCAwKXJldHVybiBlLlNFUEE/ZS5TRVBBOiExfXJldHVybiExfWZ1bmN0aW9uIE11dCh0KXtpZih0PT1udWxsKXJldHVybiExO3ZhciBlPXQuc2xpY2UoMCwyKSxhPVsiTEkiLCJDSCJdO2lmKCFhLmluY2x1ZGVzKGUpKXJldHVybiExO3ZhciBpPW5ldyBSZWdFeHAoIl4zWzAtMV17MX1bMC05XXszfSQiLCIiKTtyZXR1cm4gaS50ZXN0KHQuc2xpY2UoNCw5KSl9ZnVuY3Rpb24gYmUyKHQpe3ZhciBlPVdxKHQuYmJhbil8fCIiO2lmKHQuY291bnRyeUNvZGU9PT1udWxsfHx0LmNvdW50cnlDb2RlPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBhPXlpW3QuY291bnRyeUNvZGVdO2lmKGUhPT0iIiYmYSE9PXZvaWQgMCYmYS5jaGFycyYmYS5jaGFycyE9PW51bGwmJmEuY2hhcnM9PT1lLmxlbmd0aCs0JiZhLmJiYW5fcmVnZXhwJiZhLmJiYW5fcmVnZXhwIT09bnVsbCYmVXEoZSxhLmJiYW5fcmVnZXhwKSl7dmFyIGk9c1V0KHQuY291bnRyeUNvZGUrIjAwIitlKTtyZXR1cm4gdC5jb3VudHJ5Q29kZSsoIjAiKyg5OC1pKSkuc2xpY2UoLTIpK2V9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdmUyKHQpe3ZhciBlPXt9LGE9V3EodCk7aWYoZS5pYmFuPWF8fHQsYSYmR3EoYSkpe2UuYmJhbj1hLnNsaWNlKDQpLGUuY291bnRyeUNvZGU9YS5zbGljZSgwLDIpLGUudmFsaWQ9ITA7dmFyIGk9eWlbZS5jb3VudHJ5Q29kZV07aWYoaS5hY2NvdW50X2luZGVudGlmaWVyKXt2YXIgcj1pLmFjY291bnRfaW5kZW50aWZpZXIuc3BsaXQoIi0iKSxzPXBhcnNlSW50KHJbMF0pLG49cGFyc2VJbnQoclsxXSk7ZS5hY2NvdW50TnVtYmVyPWUuaWJhbi5zbGljZShzLG4rMSl9aWYoaS5iYW5rX2lkZW50aWZpZXIpe3ZhciByPWkuYmFua19pZGVudGlmaWVyLnNwbGl0KCItIikscz1wYXJzZUludChyWzBdKSxuPXBhcnNlSW50KHJbMV0pO2UuYmFua0lkZW50aWZpZXI9ZS5iYmFuLnNsaWNlKHMsbisxKX1pZihpLmJyYW5jaF9pbmRlbnRpZmllcil7dmFyIHI9aS5icmFuY2hfaW5kZW50aWZpZXIuc3BsaXQoIi0iKSxzPXBhcnNlSW50KHJbMF0pLG49cGFyc2VJbnQoclsxXSk7ZS5icmFuY2hJZGVudGlmaWVyPWUuYmJhbi5zbGljZShzLG4rMSl9fWVsc2UgZS52YWxpZD0hMTtyZXR1cm4gZX1mdW5jdGlvbiBVcSh0LGUpe3ZhciBhPW5ldyBSZWdFeHAoZSwiIik7cmV0dXJuIGEudGVzdCh0KX1mdW5jdGlvbiBXcSh0KXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmciP251bGw6dC5yZXBsYWNlKC9bLVwgXS9nLCIiKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFlxKHQsZSl7aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiBudWxsO2U9PW51bGwmJihlPSIgIik7dmFyIGE9V3EodCk7cmV0dXJuIGE9PT1udWxsP251bGw6YS5yZXBsYWNlKC8oLns0fSkoPyEkKS9nLCIkMSIrZSl9ZnVuY3Rpb24genV0KHQpe3ZhciBlPXQuc2xpY2UoMCwyKSxhPXBhcnNlSW50KHQuc2xpY2UoMiw0KSwxMCksaT10LnNsaWNlKDQpLHI9a3V0KCIiLmNvbmNhdChpKS5jb25jYXQoZSwiMDAiKSkscz1xeChyKTtyZXR1cm4gOTgtcz09PWF9ZnVuY3Rpb24ga3V0KHQpe3JldHVybiB0LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGE9ZS5jaGFyQ29kZUF0KDApO3JldHVybiBhPj02NT8oYS01NSkudG9TdHJpbmcoKTplfSkuam9pbigiIil9ZnVuY3Rpb24gc1V0KHQpe3JldHVybiBxeChrdXQodC5zbGljZSg0KSt0LnNsaWNlKDAsNCkpKX1mdW5jdGlvbiB5ZTIoKXt2YXIgdD17fTtmb3IodmFyIGUgaW4geWkpe3ZhciBhPXlpW2VdO3RbZV09e2NoYXJzOmEuY2hhcnN8fG51bGwsYmJhbl9yZWdleHA6YS5iYmFuX3JlZ2V4cHx8bnVsbCxJQkFOUmVnaXN0cnk6YS5JQkFOUmVnaXN0cnl8fCExLFNFUEE6YS5TRVBBfHwhMX19cmV0dXJuIHR9ZnVuY3Rpb24gblV0KHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwiIiksYT15aVt0LnRvVXBwZXJDYXNlKCkuc2xpY2UoNCw2KV07cmV0dXJuIGUudGVzdCh0KSYmYSE9PXZvaWQgMH1mdW5jdGlvbiB4ZTIodCl7dmFyIGU9e2Vycm9yQ29kZXM6W10sdmFsaWQ6ITB9O2lmKHQhPW51bGwmJnQhPT0iIil7dmFyIGE9eWlbdC50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsNildO2lmKGE9PT12b2lkIDApZS52YWxpZD0hMSxlLmVycm9yQ29kZXMucHVzaCh6OC5Ob0JJQ0NvdW50cnkpO2Vsc2V7dmFyIGk9bmV3IFJlZ0V4cCgiXlthLXpBLVpdezZ9W2EtekEtWjAtOV17Mn0oW2EtekEtWjAtOV17M30pPyQiLCIiKTtpLnRlc3QodCl8fChlLnZhbGlkPSExLGUuZXJyb3JDb2Rlcy5wdXNoKHo4Lldyb25nQklDRm9ybWF0KSl9fWVsc2UgZS52YWxpZD0hMSxlLmVycm9yQ29kZXMucHVzaCh6OC5Ob0JJQ1Byb3ZpZGVkKTtyZXR1cm4gZX1mdW5jdGlvbiB3ZTIodCl7dmFyIGU9e30sYT10LnRvVXBwZXJDYXNlKCk7cmV0dXJuIG5VdChhKT8oZS5iYW5rQ29kZT1hLnNsaWNlKDAsNCksZS5jb3VudHJ5Q29kZT1hLnNsaWNlKDQsNiksZS5sb2NhdGlvbkNvZGU9YS5zbGljZSg2LDgpLGUudGVzdEJJQz1lLmxvY2F0aW9uQ29kZVsxXT09PSIwIixlLmJyYW5jaENvZGU9YS5sZW5ndGg+OD9hLnNsaWNlKDgpOm51bGwsZS52YWxpZD0hMCk6ZS52YWxpZD0hMSxlfXZhciBLaSx6OCxvVXQsbFV0LHF4LElsLGNVdCxkVXQsU3V0LHBVdCxDdXQsaFV0LF91dCx1VXQsTWUyLHlpLFR1dD1iKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXt0W3QuTm9JQkFOUHJvdmlkZWQ9MF09Ik5vSUJBTlByb3ZpZGVkIix0W3QuTm9JQkFOQ291bnRyeT0xXT0iTm9JQkFOQ291bnRyeSIsdFt0Lldyb25nQkJBTkxlbmd0aD0yXT0iV3JvbmdCQkFOTGVuZ3RoIix0W3QuV3JvbmdCQkFORm9ybWF0PTNdPSJXcm9uZ0JCQU5Gb3JtYXQiLHRbdC5DaGVja3N1bU5vdE51bWJlcj00XT0iQ2hlY2tzdW1Ob3ROdW1iZXIiLHRbdC5Xcm9uZ0lCQU5DaGVja3N1bT01XT0iV3JvbmdJQkFOQ2hlY2tzdW0iLHRbdC5Xcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW09Nl09Ildyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSIsdFt0LlFSSUJBTk5vdEFsbG93ZWQ9N109IlFSSUJBTk5vdEFsbG93ZWQifSkoS2l8fChLaT17fSkpOyhmdW5jdGlvbih0KXt0W3QuTm9CSUNQcm92aWRlZD0wXT0iTm9CSUNQcm92aWRlZCIsdFt0Lk5vQklDQ291bnRyeT0xXT0iTm9CSUNDb3VudHJ5Iix0W3QuV3JvbmdCSUNGb3JtYXQ9Ml09Ildyb25nQklDRm9ybWF0In0pKHo4fHwoejg9e30pKTtvVXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVs1LDQsMywyLDcsNiw1LDQsMywyXSxhPXQucmVwbGFjZSgvW1xzLl0rL2csIiIpLGk9cGFyc2VJbnQoYS5jaGFyQXQoMTApLDEwKSxyPWEuc3Vic3RyaW5nKDAsMTApLHM9MCxuPTA7bjwxMDtuKyspcys9cGFyc2VJbnQoci5jaGFyQXQobiksMTApKmVbbl07dmFyIG89cyUxMTtyZXR1cm4gaT09PShvPT09MD8wOjExLW8pfSxsVXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKC9bXHMuXSsvZywiIiksYT1wYXJzZUludChlLnN1YnN0cmluZygwLGUubGVuZ3RoLTIpLDEwKSxpPXBhcnNlSW50KGUuc3Vic3RyaW5nKGUubGVuZ3RoLTIsZS5sZW5ndGgpLDEwKSxyPWElOTc9PT0wPzk3OmElOTc7cmV0dXJuIHI9PT1pfSxxeD1mdW5jdGlvbih0KXtmb3IoO3QubGVuZ3RoPjI7KXt2YXIgZT10LnNsaWNlKDAsNiksYT1wYXJzZUludChlLDEwKTtpZihpc05hTihhKSlyZXR1cm4gTmFOO3Q9YSU5Nyt0LnNsaWNlKGUubGVuZ3RoKX1yZXR1cm4gcGFyc2VJbnQodCwxMCklOTd9LElsPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZSgvW1xzLl0rL2csIiIpLGE9cXgoZSk7cmV0dXJuIGE9PT0xfSxjVXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVszLDksNywxLDMsOSw3XSxhPXBhcnNlSW50KHQuY2hhckF0KDcpLDEwKSxpPXQuc3Vic3RyaW5nKDAsNykscj0wLHM9MDtzPDc7cysrKXIrPXBhcnNlSW50KGkuY2hhckF0KHMpLDEwKSplW3NdO3ZhciBuPXIlMTA7cmV0dXJuIGE9PT0obj09PTA/MDoxMC1uKX0sZFV0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bNCw4LDUsMTAsOSw3LDMsNl0sYT1bMSwyLDQsOCw1LDEwLDksNywzLDZdLGk9cGFyc2VJbnQodC5jaGFyQXQoOCksMTApLHI9cGFyc2VJbnQodC5jaGFyQXQoOSksMTApLHM9dC5zdWJzdHJpbmcoMCw4KSxuPXQuc3Vic3RyaW5nKDEwLDIwKSxvPTAsZD0wO2Q8ODtkKyspbys9cGFyc2VJbnQocy5jaGFyQXQoZCksMTApKmVbZF07dmFyIGM9byUxMTtpZihpIT09KGM9PT0wPzA6Yz09PTE/MToxMS1jKSlyZXR1cm4hMTtvPTA7Zm9yKHZhciBkPTA7ZDwxMDtkKyspbys9cGFyc2VJbnQobi5jaGFyQXQoZCksMTApKmFbZF07cmV0dXJuIGM9byUxMSxyPT09KGM9PT0wPzA6Yz09PTE/MToxMS1jKX0sU3V0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBhPTEwLGk9MDtpPHQubGVuZ3RoO2krKylhKz1wYXJzZUludCh0LmNoYXJBdChpKSwxMCksYSUxMCE9PTAmJihhPWElMTApLGE9YSoyLGE9YSUxMTtyZXR1cm4gZT09PSgxMS1hPT09MTA/MDoxMS1hKX0scFV0PWZ1bmN0aW9uKHQpe3ZhciBlPXBhcnNlSW50KHQuY2hhckF0KDYpLDEwKSxhPXBhcnNlSW50KHQuY2hhckF0KDE2KSwxMCksaT10LnN1YnN0cmluZygwLDYpLHI9dC5zdWJzdHJpbmcoNywxNik7cmV0dXJuIFN1dChpLGUpJiZTdXQocixhKX0sQ3V0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMTAsNSw4LDQsMiwxXSxhPVs2LDMsNyw5LDEwLDUsOCw0LDIsMV0saT1wYXJzZUludCh0LmNoYXJBdCg5KSwxMCkscj1wYXJzZUludCh0LmNoYXJBdCgxOSksMTApLHM9dC5zdWJzdHJpbmcoNCw5KSxuPXQuc3Vic3RyaW5nKDEwLDE5KSxvPTAsZD0wO2Q8cy5sZW5ndGg7ZCsrKW8rPXBhcnNlSW50KHMuY2hhckF0KGQpLDEwKSplW2RdO3ZhciBjPW8lMTE7aWYoaSE9PShjPT09MD8wOmM9PT0xPzE6MTEtYykpcmV0dXJuITE7bz0wO2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKW8rPXBhcnNlSW50KG4uY2hhckF0KGQpLDEwKSphW2RdO3JldHVybiBjPW8lMTEscj09PShjPT09MD8wOmM9PT0xPzE6MTEtYyl9LGhVdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzcsMSwzLDcsMSwzLDcsMSwzLDcsMSwzLDddLGE9cGFyc2VJbnQodC5jaGFyQXQoMTUpLDEwKSxpPXQuc3Vic3RyaW5nKDIsMTUpLHI9MCxzPTA7czxpLmxlbmd0aDtzKyspcis9cGFyc2VJbnQoaS5jaGFyQXQocyksMTApKmVbc107dmFyIG49ciUxMDtyZXR1cm4gYT09PShuPT09MD8wOjEwLW4pfSxfdXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQucmVwbGFjZSgvW1xzLl0rL2csIiIpLGE9QXJyYXkuZnJvbShlKSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciByPWFbaV0uY2hhckNvZGVBdCgwKTtpZihyPj02NSlzd2l0Y2gocil7Y2FzZSA2NTpjYXNlIDc0OmFbaV09IjEiO2JyZWFrO2Nhc2UgNjY6Y2FzZSA3NTpjYXNlIDgzOmFbaV09IjIiO2JyZWFrO2Nhc2UgNjc6Y2FzZSA3NjpjYXNlIDg0OmFbaV09IjMiO2JyZWFrO2Nhc2UgNjg6Y2FzZSA3NzpjYXNlIDg1OmFbaV09IjQiO2JyZWFrO2Nhc2UgNjk6Y2FzZSA3ODpjYXNlIDg2OmFbaV09IjUiO2JyZWFrO2Nhc2UgNzA6Y2FzZSA3OTpjYXNlIDg3OmFbaV09IjYiO2JyZWFrO2Nhc2UgNzE6Y2FzZSA4MDpjYXNlIDg4OmFbaV09IjciO2JyZWFrO2Nhc2UgNzI6Y2FzZSA4MTpjYXNlIDg5OmFbaV09IjgiO2JyZWFrO2Nhc2UgNzM6Y2FzZSA4MjpjYXNlIDkwOmFbaV09IjkiO2JyZWFrfX12YXIgcz1xeChhLmpvaW4oIiIpKTtyZXR1cm4gcz09PTB9LHVVdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9WzksNywzLDEsOSw3LDMsMSw5LDcsMywxLDksNywzXSxhPXBhcnNlSW50KHQuY2hhckF0KDcpLDEwKSxpPXQuc3Vic3RyaW5nKDAsNykscj0wLHM9MDtzPGkubGVuZ3RoO3MrKylyKz1wYXJzZUludChpLmNoYXJBdChzKSwxMCkqZVtzXTt2YXIgbj1yJTEwO2lmKGEhPT0obj09PTA/MDoxMC1uKSlyZXR1cm4hMTtpZihyPTAsdC5lbmRzV2l0aCgiMDAwMDAwMDAiKSl7Zm9yKHZhciBvPXQuc3Vic3RyaW5nKDgsMTUpLGQ9cGFyc2VJbnQodC5jaGFyQXQoMTUpLDEwKSxzPTA7czxvLmxlbmd0aDtzKyspcis9cGFyc2VJbnQoby5jaGFyQXQocyksMTApKmVbc107dmFyIGM9ciUxMDtyZXR1cm4gZD09PShjPT09MD8wOjEwLWMpfWVsc2V7Zm9yKHZhciBvPXQuc3Vic3RyaW5nKDgsMjMpLGQ9cGFyc2VJbnQodC5jaGFyQXQoMjMpLDEwKSxzPTA7czxvLmxlbmd0aDtzKyspcis9cGFyc2VJbnQoby5jaGFyQXQocyksMTApKmVbc107dmFyIHA9ciUxMDtyZXR1cm4gZD09PShwPT09MD8wOjEwLXApfX0sTWUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR5cGVvZiB5aVt0XT4idSI/ITE6KHlpW3RdLmJiYW5fdmFsaWRhdGlvbl9mdW5jPWUsITApfSx5aT17QUQ6e2NoYXJzOjI0LGJiYW5fcmVnZXhwOiJeWzAtOV17OH1bQS1aMC05XXsxMn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNyIsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjQifSxBRTp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bMC05XXszfVswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiNy0yMyJ9LEFGOnt9LEFHOnt9LEFJOnt9LEFMOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXlswLTldezh9W0EtWjAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMy03IixiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTItMjgifSxBTTp7fSxBTzp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bMC05XXsyMX0kIn0sQVE6e30sQVI6e30sQVM6e30sQVQ6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTQifSxBVTp7fSxBVzp7fSxBWDp7Y2hhcnM6MTgsYmJhbl9yZWdleHA6Il5bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITB9LEFaOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MjB9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTI4In0sQkE6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6SWwsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMy01IixiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LEJCOnt9LEJEOnt9LEJFOntjaGFyczoxNixiYmFuX3JlZ2V4cDoiXlswLTldezEyfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOmxVdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0xNiJ9LEJGOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezJ9WzAtOV17MjJ9JCJ9LEJHOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17Nn1bQS1aMC05XXs4fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC03IixiYW5rX2lkZW50aWZpZXI6IjAtMyJ9LEJIOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTIyIn0sQkk6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCIsYnJhbmNoX2luZGVudGlmaWVyOiI1LTkiLGJhbmtfaWRlbnRpZmllcjoiMC00IixhY2NvdW50X2luZGVudGlmaWVyOiIxNC0yNyJ9LEJKOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezJ9WzAtOV17MjJ9JCJ9LEJMOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCJ9LEJNOnt9LEJOOnt9LEJPOnt9LEJROnt9LEJSOntjaGFyczoyOSxiYmFuX3JlZ2V4cDoiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI4LTEyIixiYW5rX2lkZW50aWZpZXI6IjAtNyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTctMjkifSxCUzp7fSxCVDp7fSxCVjp7fSxCVzp7fSxCWTp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezR9W0EtWjAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIn0sQlo6e30sQ0E6e30sQ0M6e30sQ0Q6e30sQ0Y6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCJ9LENHOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxDSDp7Y2hhcnM6MjEsYmJhbl9yZWdleHA6Il5bMC05XXs1fVtBLVowLTldezEyfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC00In0sQ0k6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWl17MX1bMC05XXsyM30kIn0sQ0s6e30sQ0w6e30sQ006e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCJ9LENOOnt9LENPOnt9LENSOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXlswLTldezE4fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yMiJ9LENVOnt9LENWOntjaGFyczoyNSxiYmFuX3JlZ2V4cDoiXlswLTldezIxfSQifSxDVzp7fSxDWDp7fSxDWTp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bMC05XXs4fVtBLVowLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMy03IixiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTItMjgifSxDWjp7Y2hhcnM6MjQsYmJhbl9yZWdleHA6Il5bMC05XXsyMH0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpDdXQsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMifSxERTp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bMC05XXsxOH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtNyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTMtMjIifSxESjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIixicmFuY2hfaW5kZW50aWZpZXI6IjUtOSIsYmFua19pZGVudGlmaWVyOiIwLTQiLGFjY291bnRfaW5kZW50aWZpZXI6IjE0LTI3In0sREs6e2NoYXJzOjE4LGJiYW5fcmVnZXhwOiJeWzAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMTgifSxETTp7fSxETzp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yOCJ9LERaOntjaGFyczoyNixiYmFuX3JlZ2V4cDoiXlswLTldezIyfSQifSxFQzp7fSxFRTp7Y2hhcnM6MjAsYmJhbl9yZWdleHA6Il5bMC05XXsxNn0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpoVXQsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTEiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjAifSxFRzp7Y2hhcnM6MjksYmJhbl9yZWdleHA6Il5bMC05XXsyNX0iLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNyIsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjE3LTI5In0sRUg6e30sRVI6e30sRVM6e2NoYXJzOjI0LGJiYW5fdmFsaWRhdGlvbl9mdW5jOmRVdCxiYmFuX3JlZ2V4cDoiXlswLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC03IixiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTQtMjQifSxFVDp7fSxGSTp7Y2hhcnM6MTgsYmJhbl9yZWdleHA6Il5bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0wIn0sRko6e30sRks6e2NoYXJzOjE4LGJiYW5fcmVnZXhwOiJeW0EtWl17Mn1bMC05XXsxMn0kIixiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiNi0xOCJ9LEZNOnt9LEZPOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXlswLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0xOCJ9LEZSOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6X3V0LElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC00IixicmFuY2hfaW5kZW50aWZpZXI6IjUtOSIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTQtMjQifSxHQTp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsyM30kIn0sR0I6e2NoYXJzOjIyLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bMC05XXsxNH0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtOSIsYmFua19pZGVudGlmaWVyOiIwLTMifSxHRDp7fSxHRTp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bQS1aMC05XXsyfVswLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiNi0yMiJ9LEdGOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxHRzp7fSxHSDp7fSxHSTp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVtBLVowLTldezE1fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTIzIn0sR0w6e2NoYXJzOjE4LGJiYW5fcmVnZXhwOiJeWzAtOV17MTR9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTE4In0sR006e30sR046e30sR1A6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LEdROntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxHUjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXs3fVtBLVowLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMy02IixiYW5rX2lkZW50aWZpZXI6IjAtMiIsYWNjb3VudF9pbmRlbnRpZmllcjoiNy0yNyJ9LEdTOnt9LEdUOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezI0fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yOCJ9LEdVOnt9LEdXOntjaGFyczoyNSxiYmFuX3JlZ2V4cDoiXltBLVpdezJ9WzAtOV17MTl9JCJ9LEdZOnt9LEhLOnt9LEhNOnt9LEhOOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17MjB9JCJ9LEhSOntjaGFyczoyMSxiYmFuX3JlZ2V4cDoiXlswLTldezE3fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOnBVdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtNiJ9LEhUOnt9LEhVOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXlswLTldezI0fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOnVVdCxJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNiIsYmFua19pZGVudGlmaWVyOiIwLTIifSxJRDp7fSxJRTp7Y2hhcnM6MjIsYmJhbl9yZWdleHA6Il5bQS1aMC05XXs0fVswLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNC05IixiYW5rX2lkZW50aWZpZXI6IjAtMyJ9LElMOntjaGFyczoyMyxiYmFuX3JlZ2V4cDoiXlswLTldezE5fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNSIsYmFua19pZGVudGlmaWVyOiIwLTIifSxJTTp7fSxJTjp7fSxJTzp7fSxJUTp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezE1fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNiIsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjExLTIzIn0sSVI6e2NoYXJzOjI2LGJiYW5fcmVnZXhwOiJeWzAtOV17MjJ9JCJ9LElTOntjaGFyczoyNixiYmFuX3JlZ2V4cDoiXlswLTldezIyfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMi0zIixiYW5rX2lkZW50aWZpZXI6IjAtMSJ9LElUOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXltBLVpdezF9WzAtOV17MTB9W0EtWjAtOV17MTJ9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI2LTEwIixiYW5rX2lkZW50aWZpZXI6IjEtNSIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yNyJ9LEpFOnt9LEpNOnt9LEpPOntjaGFyczozMCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17NH1bQS1aMC05XXsxOH0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTciLGJhbmtfaWRlbnRpZmllcjoiNC03In0sSlA6e30sS0U6e30sS0c6e30sS0g6e30sS0k6e30sS006e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCJ9LEtOOnt9LEtQOnt9LEtSOnt9LEtXOntjaGFyczozMCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIyMC0zMCJ9LEtZOnt9LEtaOntjaGFyczoyMCxiYmFuX3JlZ2V4cDoiXlswLTldezN9W0EtWjAtOV17MTN9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0yIixhY2NvdW50X2luZGVudGlmaWVyOiIwLTIwIn0sTEE6e30sTEI6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeWzAtOV17NH1bQS1aMC05XXsyMH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjE0LTI4In0sTEM6e2NoYXJzOjMyLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bQS1aMC05XXsyNH0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMzIifSxMSTp7Y2hhcnM6MjEsYmJhbl9yZWdleHA6Il5bMC05XXs1fVtBLVowLTldezEyfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC00In0sTEs6e30sTFI6e30sTFM6e30sTFQ6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTQifSxMVTp7Y2hhcnM6MjAsYmJhbl9yZWdleHA6Il5bMC05XXszfVtBLVowLTldezEzfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sTFY6e2NoYXJzOjIxLGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bQS1aMC05XXsxM30kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0yMSJ9LExZOntjaGFyczoyNSxiYmFuX3JlZ2V4cDoiXlswLTldezIxfSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjMtNSIsYmFua19pZGVudGlmaWVyOiIwLTIiLGFjY291bnRfaW5kZW50aWZpZXI6IjEwLTI1In0sTUE6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeWzAtOV17MjR9JCJ9LE1DOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6X3V0LElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNS05IixiYW5rX2lkZW50aWZpZXI6IjAtNCJ9LE1EOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezJ9W0EtWjAtOV17MTh9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0xIixhY2NvdW50X2luZGVudGlmaWVyOiI2LTI0In0sTUU6e2NoYXJzOjIyLGJiYW5fcmVnZXhwOiJeWzAtOV17MTh9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6SWwsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0yIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTIyIn0sTUY6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LE1HOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQifSxNSDp7fSxNSzp7Y2hhcnM6MTksYmJhbl9yZWdleHA6Il5bMC05XXszfVtBLVowLTldezEwfVswLTldezJ9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6SWwsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sTUw6e2NoYXJzOjI4LGJiYW5fcmVnZXhwOiJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIn0sTU06e30sTU46e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiI4LTIwIn0sTU86e30sTVA6e30sTVE6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LE1SOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezIzfSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjUtOSIsYmFua19pZGVudGlmaWVyOiIwLTQiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMjcifSxNUzp7fSxNVDp7Y2hhcnM6MzEsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezV9W0EtWjAtOV17MTh9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTgiLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIxNS0zMSJ9LE1VOntjaGFyczozMCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17MTl9W0EtWl17M30kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI2LTciLGJhbmtfaWRlbnRpZmllcjoiMC01IixhY2NvdW50X2luZGVudGlmaWVyOiIwLTMwIn0sTVY6e30sTVc6e30sTVg6e30sTVk6e30sTVo6e2NoYXJzOjI1LGJiYW5fcmVnZXhwOiJeWzAtOV17MjF9JCJ9LE5BOnt9LE5DOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxORTp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXsyfVswLTldezIyfSQifSxORjp7fSxORzp7fSxOSTp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezIwfSQiLGJhbmtfaWRlbnRpZmllcjoiMC0zIixJQkFOUmVnaXN0cnk6ITAsYWNjb3VudF9pbmRlbnRpZmllcjoiOC0yOCJ9LE5MOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17MTB9JCIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMTgifSxOTzp7Y2hhcnM6MTUsYmJhbl9yZWdleHA6Il5bMC05XXsxMX0kIixiYmFuX3ZhbGlkYXRpb25fZnVuYzpvVXQsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjQtMTUifSxOUDp7fSxOUjp7fSxOVTp7fSxOWjp7fSxPTTp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bMC05XXszfVtBLVowLTldezE2fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiExLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sUEE6e30sUEU6e30sUEY6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LFBHOnt9LFBIOnt9LFBLOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezR9WzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIn0sUEw6e2NoYXJzOjI4LGJiYW5fdmFsaWRhdGlvbl9mdW5jOmNVdCxiYmFuX3JlZ2V4cDoiXlswLTldezI0fSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMC03IixhY2NvdW50X2luZGVudGlmaWVyOiIyLTI4In0sUE06e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LFBOOnt9LFBSOnt9LFBTOntjaGFyczoyOSxiYmFuX3JlZ2V4cDoiXltBLVowLTldezR9WzAtOV17MjF9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIixhY2NvdW50X2luZGVudGlmaWVyOiIxNy0yOSJ9LFBUOntjaGFyczoyNSxiYmFuX3JlZ2V4cDoiXlswLTldezIxfSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOklsLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0zIn0sUFc6e30sUFk6e30sUUE6e2NoYXJzOjI5LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bQS1aMC05XXsyMX0kIixJQkFOUmVnaXN0cnk6ITAsYmFua19pZGVudGlmaWVyOiIwLTMiLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjkifSxSRTp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLElCQU5SZWdpc3RyeTohMH0sUk86e2NoYXJzOjI0LGJiYW5fcmVnZXhwOiJeW0EtWl17NH1bQS1aMC05XXsxNn0kIixJQkFOUmVnaXN0cnk6ITAsU0VQQTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMyIsYWNjb3VudF9pbmRlbnRpZmllcjoiMC0yNCJ9LFJTOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXlswLTldezE4fSQiLGJiYW5fdmFsaWRhdGlvbl9mdW5jOklsLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMiJ9LFJVOntjaGFyczozMyxiYmFuX3JlZ2V4cDoiXlswLTldezE0fVtBLVowLTldezE1fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjktMTMiLGJhbmtfaWRlbnRpZmllcjoiMC04IixhY2NvdW50X2luZGVudGlmaWVyOiIxMy0zMyJ9LFJXOnt9LFNBOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXlswLTldezJ9W0EtWjAtOV17MTh9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJhbmtfaWRlbnRpZmllcjoiMC0xIixhY2NvdW50X2luZGVudGlmaWVyOiIxMi0yNCJ9LFNCOnt9LFNDOntjaGFyczozMSxiYmFuX3JlZ2V4cDoiXltBLVpdezR9WzAtOV17MjB9W0EtWl17M30kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI2LTciLGJhbmtfaWRlbnRpZmllcjoiMC01IixhY2NvdW50X2luZGVudGlmaWVyOiIxMi0yOCJ9LFNEOntjaGFyczoxOCxiYmFuX3JlZ2V4cDoiXlswLTldezE0fSQiLElCQU5SZWdpc3RyeTohMCxiYW5rX2lkZW50aWZpZXI6IjAtMSIsYWNjb3VudF9pbmRlbnRpZmllcjoiNi0xOCJ9LFNFOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXlswLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJhbmtfaWRlbnRpZmllcjoiMC0yIn0sU0c6e30sU0g6e30sU0k6e2NoYXJzOjE5LGJiYW5fcmVnZXhwOiJeWzAtOV17MTV9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6SWwsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYnJhbmNoX2luZGVudGlmaWVyOiIyLTQiLGJhbmtfaWRlbnRpZmllcjoiMC0xIixhY2NvdW50X2luZGVudGlmaWVyOiI5LTE2In0sU0o6e30sU0s6e2NoYXJzOjI0LGJiYW5fcmVnZXhwOiJeWzAtOV17MjB9JCIsYmJhbl92YWxpZGF0aW9uX2Z1bmM6Q3V0LElCQU5SZWdpc3RyeTohMCxTRVBBOiEwfSxTTDp7fSxTTTp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLElCQU5SZWdpc3RyeTohMCxTRVBBOiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiNi0xMCJ9LFNOOntjaGFyczoyOCxiYmFuX3JlZ2V4cDoiXltBLVpdezJ9WzAtOV17MjJ9JCJ9LFNPOntjaGFyczoyMyxiYmFuX3JlZ2V4cDoiXlswLTldezE5fSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjQtNiIsYWNjb3VudF9pbmRlbnRpZmllcjoiMTEtMjMifSxTUjp7fSxTUzp7fSxTVDp7Y2hhcnM6MjUsYmJhbl9yZWdleHA6Il5bMC05XXsyMX0kIixJQkFOUmVnaXN0cnk6ITAsYnJhbmNoX2luZGVudGlmaWVyOiI0LTcifSxTVjp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXs0fVswLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxhY2NvdW50X2luZGVudGlmaWVyOiI4LTI4In0sU1g6e30sU1k6e30sU1o6e30sVEM6e30sVEQ6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MjN9JCJ9LFRGOntjaGFyczoyNyxiYmFuX3JlZ2V4cDoiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxURzp7Y2hhcnM6MjgsYmJhbl9yZWdleHA6Il5bQS1aXXsyfVswLTldezIyfSQifSxUSDp7fSxUSjp7fSxUSzp7fSxUTDp7Y2hhcnM6MjMsYmJhbl9yZWdleHA6Il5bMC05XXsxOX0kIixJQkFOUmVnaXN0cnk6ITAsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yMyJ9LFRNOnt9LFROOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXlswLTldezIwfSQiLElCQU5SZWdpc3RyeTohMCxicmFuY2hfaW5kZW50aWZpZXI6IjItNCIsYWNjb3VudF9pbmRlbnRpZmllcjoiNC0yNCJ9LFRPOnt9LFRSOntjaGFyczoyNixiYmFuX3JlZ2V4cDoiXlswLTldezV9W0EtWjAtOV17MTd9JCIsSUJBTlJlZ2lzdHJ5OiEwfSxUVDp7fSxUVjp7fSxUVzp7fSxUWjp7fSxVQTp7Y2hhcnM6MjksYmJhbl9yZWdleHA6Il5bMC05XXs2fVtBLVowLTldezE5fSQiLElCQU5SZWdpc3RyeTohMCxhY2NvdW50X2luZGVudGlmaWVyOiIxNS0yOSJ9LFVHOnt9LFVNOnt9LFVTOnt9LFVZOnt9LFVaOnt9LFZBOntjaGFyczoyMixiYmFuX3JlZ2V4cDoiXlswLTldezE4fSIsSUJBTlJlZ2lzdHJ5OiEwLFNFUEE6ITAsYWNjb3VudF9pbmRlbnRpZmllcjoiNy0yMiJ9LFZDOnt9LFZFOnt9LFZHOntjaGFyczoyNCxiYmFuX3JlZ2V4cDoiXltBLVowLTldezR9WzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGFjY291bnRfaW5kZW50aWZpZXI6IjgtMjQifSxWSTp7fSxWTjp7fSxWVTp7fSxXRjp7Y2hhcnM6MjcsYmJhbl9yZWdleHA6Il5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLElCQU5SZWdpc3RyeTohMH0sV1M6e30sWEs6e2NoYXJzOjIwLGJiYW5fcmVnZXhwOiJeWzAtOV17MTZ9JCIsSUJBTlJlZ2lzdHJ5OiEwLGJyYW5jaF9pbmRlbnRpZmllcjoiMi0zIixhY2NvdW50X2luZGVudGlmaWVyOiI0LTIwIn0sWUU6e30sWVQ6e2NoYXJzOjI3LGJiYW5fcmVnZXhwOiJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIixJQkFOUmVnaXN0cnk6ITB9LFpBOnt9LFpNOnt9LFpXOnt9fX0pO3ZhciBMdXQsJHV0PWIoKCk9Pnt1ZSgpO0x1dD0oKT0+d2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtRYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAucGF5bWVudC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBJQkFOIElucHV0In0gLnN1YnRpdGxlPSR7IkludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciB3aXRoIGF1dG9tYXRpYyBmb3JtYXR0aW5nIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbgogICAgICAgICAgICAubGFiZWw9JHsiQmFuayBBY2NvdW50IElCQU4ifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW50ZXIgeW91ciBJbnRlcm5hdGlvbmFsIEJhbmsgQWNjb3VudCBOdW1iZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgoKICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4KICAgICAgICAgICAgLmxhYmVsPSR7IlZlcmlmaWVkIElCQU4ifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBJQkFOIGhhcyBiZWVuIHZlcmlmaWVkIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkRFODkzNzA0MDA0NDA1MzIwMTMwMDAifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGF5bWVudCBJbmZvcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJJQkFOIGlucHV0IHdpdGggaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHBheW1lbnQgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IEhvbGRlciJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkpvaG4gRG9lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAgLmxhYmVsPSR7IklCQU4ifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJHQjgyV0VTVDEyMzQ1Njk4NzY1NDMyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiUmVxdWlyZWQgZmllbGRzIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuCiAgICAgICAgICAgIC5sYWJlbD0keyJQYXltZW50IEFjY291bnQifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVxdWlyZWQgZm9yIHByb2Nlc3NpbmcgcGF5bWVudHMifQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuCiAgICAgICAgICAgIC5sYWJlbD0keyJMb2NrZWQgSUJBTiJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgICAudmFsdWU9JHsiRlIxNDIwMDQxMDEwMDUwNTAwMDEzTTAyNjA2In0KICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYW5rIFRyYW5zZmVyIEZvcm0ifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZm9ybSBleGFtcGxlIHdpdGggSUJBTiB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlJlY2lwaWVudCBOYW1lIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAubGFiZWw9JHsiUmVjaXBpZW50IElCQU4ifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmB9KTt2YXIgVngsZTQsangsWnE9YigoKT0+e3VlKCk7THQoKTtfMSgpO1R1dCgpOyR1dCgpO1ZlKCk7Vng9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxlND1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sang9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LWliYW4iKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXTt2YXIgeT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IHY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtLKCldLGw9W0koe3R5cGU6U3RyaW5nfSldLFZ4KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW50ZXJlZFN0cmluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImVudGVyZWRTdHJpbmciaW4gbSxnZXQ6bT0+bS5lbnRlcmVkU3RyaW5nLHNldDoobSx4KT0+e20uZW50ZXJlZFN0cmluZz14fX0sbWV0YWRhdGE6dn0sbixvKSxWeCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVudGVyZWRJYmFuSXNWYWxpZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImVudGVyZWRJYmFuSXNWYWxpZCJpbiBtLGdldDptPT5tLmVudGVyZWRJYmFuSXNWYWxpZCxzZXQ6KG0seCk9PnttLmVudGVyZWRJYmFuSXNWYWxpZD14fX0sbWV0YWRhdGE6dn0sYyxwKSxWeCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4idmFsdWUiaW4gbSxnZXQ6bT0+bS52YWx1ZSxzZXQ6KG0seCk9PnttLnZhbHVlPXh9fSxtZXRhZGF0YTp2fSxmLGcpLFZ4KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOnZ9LG51bGwsYSkseT1pPWUudmFsdWUsdiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2fSl9c3RhdGljIGRlbW89THV0O3N0YXRpYyBkZW1vR3JvdXBzPVsiSW5wdXQiXTsjZT1lNCh0aGlzLG4sIiIpO2dldCBlbnRlcmVkU3RyaW5nKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGVudGVyZWRTdHJpbmcodil7dGhpcy4jZT12fSN0PShlNCh0aGlzLG8pLGU0KHRoaXMsYywhMSkpO2dldCBlbnRlcmVkSWJhbklzVmFsaWQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgZW50ZXJlZEliYW5Jc1ZhbGlkKHYpe3RoaXMuI3Q9dn0jYT0oZTQodGhpcyxwKSxlNCh0aGlzLGYsIiIpKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgdmFsdWUodil7dGhpcy4jYT12fXN0YXRpYyBzdHlsZXM9W0NlLC4uLlhlLmJhc2VTdHlsZXMsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIElCQU4gaW5wdXQgc3BlY2lmaWMgc3R5bGVzIGNhbiBnbyBoZXJlICovCiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbHx8IklCQU4ifSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgLnZhbHVlPSR7dGhpcy52YWx1ZX0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkRFODkgMzcwNCAwMDQ0IDA1MzIgMDEzMCAwMCJ9CiAgICAgICAgICBAaW5wdXQ9JHt2PT57dGhpcy52YWxpZGF0ZUliYW4odil9fQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgPC9kaXY+CiAgICBgfWZpcnN0VXBkYXRlZCh2KXtzdXBlci5maXJzdFVwZGF0ZWQodik7bGV0IG09dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpO20mJm0uY2hhbmdlU3ViamVjdCYmbS5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoKT0+e3RoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfSl9YXN5bmMgdmFsaWRhdGVJYmFuKHYpe2xldCBtPXYudGFyZ2V0LHg9bT8udmFsdWU7eD14fHwiIix0aGlzLmVudGVyZWRTdHJpbmchPT14JiYodGhpcy5lbnRlcmVkU3RyaW5nPVlxKHgpfHwiIixtJiYobS52YWx1ZT10aGlzLmVudGVyZWRTdHJpbmcsdGhpcy52YWx1ZT10aGlzLmVudGVyZWRTdHJpbmcsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpKSx0aGlzLmVudGVyZWRJYmFuSXNWYWxpZD1HcSh0aGlzLmVudGVyZWRTdHJpbmcucmVwbGFjZSgvIC9nLCIiKSk7bGV0IE09dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpO00udmFsaWRhdGlvblRleHQ9YElCQU4gaXMgdmFsaWQ6ICR7dGhpcy5lbnRlcmVkSWJhbklzVmFsaWR9YH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKHYpe3RoaXMudmFsdWU9dix0aGlzLmVudGVyZWRTdHJpbmc9WXEodil8fCIifWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxlNCh0aGlzLGcpfXN0YXRpY3tlNChpLGEpfX07cmV0dXJuIHk9aX0pKCl9KTt2YXIgQXV0LER1dD1iKCgpPT57dWUoKTtBdXQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk11bHRpLU9wdGlvbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TZWxlY3QgZnJvbSBtdWx0aXBsZSBvcHRpb25zIHdpdGggYSBzbW9vdGggc2xpZGluZyBpbmRpY2F0b3IgYW5pbWF0aW9uLjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiRGlzcGxheSBNb2RlIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgaG93IGNvbnRlbnQgaXMgZGlzcGxheWVkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJMaXN0IFZpZXciLCJHcmlkIFZpZXciLCJDb21wYWN0Il19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiR3JpZCBWaWV3In0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIAogICAgICAgIDxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJULVNoaXJ0IFNpemUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIHByZWZlcnJlZCBzaXplIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJYUyIsIlMiLCJNIiwiTCIsIlhMIiwiWFhMIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiTSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Cb29sZWFuIFRvZ2dsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlNpbXBsZSBvbi9vZmYgc3dpdGNoZXMgd2l0aCBjdXN0b21pemFibGUgbGFiZWxzIGZvciBjbGVhcmVyIGNvbnRleHQuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb25zIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbmFibGUgb3IgZGlzYWJsZSBwdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidHJ1ZSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiVGhlbWUgTW9kZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU3dpdGNoIGJldHdlZW4gbGlnaHQgYW5kIGRhcmsgdGhlbWUifQogICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkRhcmsifQogICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiTGlnaHQifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkRhcmsifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U2V0dGluZ3MgR3JpZDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcnJhbmdlZCBpbiBhIHJlc3BvbnNpdmUgZ3JpZCBsYXlvdXQuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiQXV0by1TYXZlIn0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiRW5hYmxlZCJ9CiAgICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkRpc2FibGVkIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVuYWJsZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7Ikxhbmd1YWdlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCJHZXJtYW4iLCJGcmVuY2giLCJTcGFuaXNoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmdsaXNoIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJRdWFsaXR5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkxvdyIsIk1lZGl1bSIsIkhpZ2giLCJVbHRyYSJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSGlnaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUHJpdmFjeSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IlByaXZhdGUifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJQdWJsaWMifQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJpdmF0ZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXRlcyAmIEZvcm0gSW50ZWdyYXRpb248L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5FeGFtcGxlcyBvZiBkaXNhYmxlZCBzdGF0ZXMgYW5kIGludGVncmF0aW9uIHdpdGhpbiBmb3Jtcy48L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IkFjY291bnQgVHlwZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBzZXR0aW5nIGlzIGxvY2tlZCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siRnJlZSIsIlBybyIsIkVudGVycHJpc2UiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbnRlcnByaXNlIn0KICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUHJvamVjdCBOYW1lIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlZpc2liaWxpdHkifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQdWJsaWMifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMaWNlbnNlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk1JVCIsIkFwYWNoZSAyLjAiLCJHUEwgdjMiLCJQcm9wcmlldGFyeSJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiTUlUIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgfSk7dmFyIHQ0LEdhLFV4LFhxPWIoKCk9Pnt1ZSgpO18xKCk7dmkoKTtEdXQoKTtWZSgpO3Q0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sR2E9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LFV4PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZSIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLGQ9W0koKV0sbD1bSSgpXSx5PVtJKHt0eXBlOkFycmF5fSldLHg9W0koKV0sRj1bSSh7dHlwZTpCb29sZWFufSldLHQ0KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InR5cGUiaW4gQSxnZXQ6QT0+QS50eXBlLHNldDooQSxxKT0+e0EudHlwZT1xfX0sbWV0YWRhdGE6TH0sbixvKSx0NCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJvb2xlYW5UcnVlTmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+ImJvb2xlYW5UcnVlTmFtZSJpbiBBLGdldDpBPT5BLmJvb2xlYW5UcnVlTmFtZSxzZXQ6KEEscSk9PntBLmJvb2xlYW5UcnVlTmFtZT1xfX0sbWV0YWRhdGE6TH0sYyxwKSx0NCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJvb2xlYW5GYWxzZU5hbWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJib29sZWFuRmFsc2VOYW1lImluIEEsZ2V0OkE9PkEuYm9vbGVhbkZhbHNlTmFtZSxzZXQ6KEEscSk9PntBLmJvb2xlYW5GYWxzZU5hbWU9cX19LG1ldGFkYXRhOkx9LGYsZyksdDQodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcHRpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4ib3B0aW9ucyJpbiBBLGdldDpBPT5BLm9wdGlvbnMsc2V0OihBLHEpPT57QS5vcHRpb25zPXF9fSxtZXRhZGF0YTpMfSx2LG0pLHQ0KHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRPcHRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJzZWxlY3RlZE9wdGlvbiJpbiBBLGdldDpBPT5BLnNlbGVjdGVkT3B0aW9uLHNldDooQSxxKT0+e0Euc2VsZWN0ZWRPcHRpb249cX19LG1ldGFkYXRhOkx9LE0sUyksdDQodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib29sVmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJib29sVmFsdWUiaW4gQSxnZXQ6QT0+QS5ib29sVmFsdWUsc2V0OihBLHEpPT57QS5ib29sVmFsdWU9cX19LG1ldGFkYXRhOkx9LF8sayksdDQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6TH0sbnVsbCxhKSxOPWk9ZS52YWx1ZSxMJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkx9KX1zdGF0aWMgZGVtbz1BdXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPUdhKHRoaXMsbiwibXVsdGkiKTtnZXQgdHlwZSgpe3JldHVybiB0aGlzLiNlfXNldCB0eXBlKEwpe3RoaXMuI2U9TH0jdD0oR2EodGhpcyxvKSxHYSh0aGlzLGMsInRydWUiKSk7Z2V0IGJvb2xlYW5UcnVlTmFtZSgpe3JldHVybiB0aGlzLiN0fXNldCBib29sZWFuVHJ1ZU5hbWUoTCl7dGhpcy4jdD1MfSNhPShHYSh0aGlzLHApLEdhKHRoaXMsZiwiZmFsc2UiKSk7Z2V0IGJvb2xlYW5GYWxzZU5hbWUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgYm9vbGVhbkZhbHNlTmFtZShMKXt0aGlzLiNhPUx9I2k9KEdhKHRoaXMsZyksR2EodGhpcyx2LFtdKSk7Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgb3B0aW9ucyhMKXt0aGlzLiNpPUx9I3I9KEdhKHRoaXMsbSksR2EodGhpcyxNLCIiKSk7Z2V0IHNlbGVjdGVkT3B0aW9uKCl7cmV0dXJuIHRoaXMuI3J9c2V0IHNlbGVjdGVkT3B0aW9uKEwpe3RoaXMuI3I9TH0jcz0oR2EodGhpcyxTKSxHYSh0aGlzLF8sITEpKTtnZXQgYm9vbFZhbHVlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGJvb2xWYWx1ZShMKXt0aGlzLiNzPUx9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudHlwZT09PSJib29sZWFuIj90aGlzLnNlbGVjdGVkT3B0aW9uPT09dGhpcy5ib29sZWFuVHJ1ZU5hbWU6dGhpcy5zZWxlY3RlZE9wdGlvbn1zZXQgdmFsdWUoTCl7dGhpcy50eXBlPT09ImJvb2xlYW4iJiZ0eXBlb2YgTD09ImJvb2xlYW4iP3RoaXMuc2VsZWN0ZWRPcHRpb249TD90aGlzLmJvb2xlYW5UcnVlTmFtZTp0aGlzLmJvb2xlYW5GYWxzZU5hbWU6dGhpcy5zZWxlY3RlZE9wdGlvbj1MLHRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMuaGFzVXBkYXRlZCYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zZXRJbmRpY2F0b3IoKX0pfXN0YXRpYyBzdHlsZXM9W0NlLC4uLlhlLmJhc2VTdHlsZXMsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc2VsZWN0aW9ucyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5vcHRpb24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQoKICAgICAgLm9wdGlvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMTgxODFiIiwiI2U0ZTRlNyIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgfQoKICAgICAgLmluZGljYXRvciB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA4cHgpOwogICAgICAgIHRvcDogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuc2VsZWN0aW9ucyB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5vcHRpb24gewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5pbmRpY2F0b3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDExMywgMTEzLCAxMjIsIDAuMTUpIiwicmdiYSgxMTMsIDExMywgMTIyLCAwLjE1KSIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlbGVjdGlvbnMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5kaWNhdG9yIj48L2Rpdj4KICAgICAgICAgICR7dGhpcy5vcHRpb25zLm1hcChMPT53YDxkaXYgY2xhc3M9Im9wdGlvbiAke0w9PT10aGlzLnNlbGVjdGVkT3B0aW9uPyJzZWxlY3RlZCI6IiJ9IiBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVTZWxlY3Rpb24oTCl9PgogICAgICAgICAgICAgICAgJHtMfQogICAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMudHlwZT09PSJib29sZWFuIiYmdGhpcy5vcHRpb25zLmxlbmd0aD09PTAmJih0aGlzLm9wdGlvbnM9W3RoaXMuYm9vbGVhblRydWVOYW1lfHwidHJ1ZSIsdGhpcy5ib29sZWFuRmFsc2VOYW1lfHwiZmFsc2UiXSx0aGlzLnNlbGVjdGVkT3B0aW9ufHwodGhpcy5zZWxlY3RlZE9wdGlvbj10aGlzLmJvb2xlYW5GYWxzZU5hbWV8fCJmYWxzZSIpKSwhdGhpcy5zZWxlY3RlZE9wdGlvbiYmdGhpcy5vcHRpb25zLmxlbmd0aD4wJiYodGhpcy5zZWxlY3RlZE9wdGlvbj10aGlzLm9wdGlvbnNbMF0pfWFzeW5jIGZpcnN0VXBkYXRlZChMKXtzdXBlci5maXJzdFVwZGF0ZWQoTCksdGhpcy50eXBlPT09ImJvb2xlYW4iJiYodGhpcy5vcHRpb25zPVt0aGlzLmJvb2xlYW5UcnVlTmFtZXx8InRydWUiLHRoaXMuYm9vbGVhbkZhbHNlTmFtZXx8ImZhbHNlIl0pLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsZG9jdW1lbnQuZm9udHMmJmF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5LGF3YWl0IG5ldyBQcm9taXNlKEE9PnJlcXVlc3RBbmltYXRpb25GcmFtZShBKSksdGhpcy5zZXRJbmRpY2F0b3IoKX1hc3luYyBoYW5kbGVTZWxlY3Rpb24oTCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWRPcHRpb249TCx0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMuc2V0SW5kaWNhdG9yKCkpfWluZGljYXRvckluaXRpYWxpemVkPShHYSh0aGlzLGspLCExKTthc3luYyBzZXRJbmRpY2F0b3IoKXtsZXQgTD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmluZGljYXRvciIpLEE9dGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7aWYoQT09PS0xfHwhTCl7TCYmKEwuc3R5bGUub3BhY2l0eT0iMCIpO3JldHVybn1sZXQgcT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgLm9wdGlvbjpudGgtY2hpbGQoJHtBKzJ9KWApO0wmJnEmJih0aGlzLmluZGljYXRvckluaXRpYWxpemVkfHwoTC5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIiksdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZD0hMCxzZXRUaW1lb3V0KCgpPT57TC5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIil9LDUwKSksTC5zdHlsZS53aWR0aD1gJHtxLmNsaWVudFdpZHRofXB4YCxMLnN0eWxlLmxlZnQ9YCR7cS5vZmZzZXRMZWZ0fXB4YCxMLnN0eWxlLm9wYWNpdHk9IjEiKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnR5cGU9PT0iYm9vbGVhbiI/dGhpcy5zZWxlY3RlZE9wdGlvbj09PXRoaXMuYm9vbGVhblRydWVOYW1lOnRoaXMuc2VsZWN0ZWRPcHRpb259c2V0VmFsdWUoTCl7dGhpcy50eXBlPT09ImJvb2xlYW4iJiZ0eXBlb2YgTD09ImJvb2xlYW4iP3RoaXMuc2VsZWN0ZWRPcHRpb249TD90aGlzLmJvb2xlYW5UcnVlTmFtZXx8InRydWUiOnRoaXMuYm9vbGVhbkZhbHNlTmFtZXx8ImZhbHNlIjp0aGlzLnNlbGVjdGVkT3B0aW9uPUwsdGhpcy5yZXF1ZXN0VXBkYXRlKCksdGhpcy5oYXNVcGRhdGVkJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnNldEluZGljYXRvcigpfSl9c3RhdGlje0dhKGksYSl9fTtyZXR1cm4gTj1pfSkoKX0pO3ZhciBFdXQsUHV0PWIoKCk9Pnt1ZSgpO0V1dD0oKT0+d2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtRYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lCiAgICAgICAgICAgIC5sYWJlbD0keyJQaG9uZSBOdW1iZXIifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW50ZXIgeW91ciBwaG9uZSBudW1iZXIgd2l0aCBjb3VudHJ5IGNvZGUifQogICAgICAgICAgICAudmFsdWU9JHsiNTU1MTIzNDU2NyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lCiAgICAgICAgICAgIC5sYWJlbD0keyJDb250YWN0IFBob25lIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBhY2NvdW50IHZlcmlmaWNhdGlvbiJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiKzEgKDU1NSkgMDAwLTAwMDAifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiTW9iaWxlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiNDE1NTU1MTIzNCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9mZmljZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg4MDApIDU1NS0wMDAwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcm5hdGlvbmFsIE51bWJlcnMifSAuc3VidGl0bGU9JHsiU3VwcG9ydHMgZm9ybWF0dGluZyBmb3IgbnVtYmVycyB3aXRoIGNvdW50cnkgY29kZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICAubGFiZWw9JHsiSW50ZXJuYXRpb25hbCBDb250YWN0In0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkF1dG9tYXRpY2FsbHkgZm9ybWF0cyBpbnRlcm5hdGlvbmFsIG51bWJlcnMifQogICAgICAgICAgICAudmFsdWU9JHsiNDQxMjM0NTY3ODkwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUKICAgICAgICAgICAgLmxhYmVsPSR7IkVtZXJnZW5jeSBDb250YWN0In0KICAgICAgICAgICAgLnZhbHVlPSR7IjkxMSJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiUGhvbmUgaW5wdXQgYXMgcGFydCBvZiBhIGNvbnRhY3QgZm9ybSJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJGdWxsIE5hbWUifSAucmVxdWlyZWQ9JHshMH0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAubGFiZWw9JHsiUGhvbmUgTnVtYmVyIn0gLnJlcXVpcmVkPSR7ITB9PjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmB9KTt2YXIgV3gsYTQsR3gsS3E9YigoKT0+e3VlKCk7THQoKTtfMSgpO1B1dCgpO1ZlKCk7V3g9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxhND1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sR3g9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWlucHV0LXBob25lIildLGUsYT1bXSxpLHI9WGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W107dmFyIHk9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCB2PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0soKV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpTdHJpbmd9KV0sV3godGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmb3JtYXR0ZWRQaG9uZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+ImZvcm1hdHRlZFBob25lImluIG0sZ2V0Om09Pm0uZm9ybWF0dGVkUGhvbmUsc2V0OihtLHgpPT57bS5mb3JtYXR0ZWRQaG9uZT14fX0sbWV0YWRhdGE6dn0sbixvKSxXeCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4idmFsdWUiaW4gbSxnZXQ6bT0+bS52YWx1ZSxzZXQ6KG0seCk9PnttLnZhbHVlPXh9fSxtZXRhZGF0YTp2fSxjLHApLFd4KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGxhY2Vob2xkZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJwbGFjZWhvbGRlciJpbiBtLGdldDptPT5tLnBsYWNlaG9sZGVyLHNldDoobSx4KT0+e20ucGxhY2Vob2xkZXI9eH19LG1ldGFkYXRhOnZ9LGYsZyksV3gobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6dn0sbnVsbCxhKSx5PWk9ZS52YWx1ZSx2JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KX1zdGF0aWMgZGVtbz1FdXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPWE0KHRoaXMsbiwiIik7Z2V0IGZvcm1hdHRlZFBob25lKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGZvcm1hdHRlZFBob25lKHYpe3RoaXMuI2U9dn0jdD0oYTQodGhpcyxvKSxhNCh0aGlzLGMsIiIpKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdmFsdWUodil7dGhpcy4jdD12fSNhPShhNCh0aGlzLHApLGE0KHRoaXMsZiwiKzEgKDU1NSkgMTIzLTQ1NjciKSk7Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHBsYWNlaG9sZGVyKHYpe3RoaXMuI2E9dn1zdGF0aWMgc3R5bGVzPVtDZSwuLi5YZS5iYXNlU3R5bGVzLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgLnZhbHVlPSR7dGhpcy5mb3JtYXR0ZWRQaG9uZX0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7dGhpcy5wbGFjZWhvbGRlcn0KICAgICAgICAgIEBpbnB1dD0ke3Y9PnRoaXMuaGFuZGxlUGhvbmVJbnB1dCh2KX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYH1maXJzdFVwZGF0ZWQodil7c3VwZXIuZmlyc3RVcGRhdGVkKHYpLHRoaXMudmFsdWUmJih0aGlzLmZvcm1hdHRlZFBob25lPXRoaXMuZm9ybWF0UGhvbmVOdW1iZXIodGhpcy52YWx1ZSkpO2xldCBtPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTttJiZtLmNoYW5nZVN1YmplY3QmJm0uY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX0pfWhhbmRsZVBob25lSW5wdXQodil7bGV0IG09di50YXJnZXQseD10aGlzLmNsZWFuUGhvbmVOdW1iZXIobS52YWx1ZSksTT10aGlzLmZvcm1hdFBob25lTnVtYmVyKHgpO2lmKG0udmFsdWUhPT1NKXtsZXQgUz1tLnNlbGVjdGlvblN0YXJ0fHwwO20udmFsdWU9TTtsZXQgRj10aGlzLmNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKHgsTSxTKTttLnNldFNlbGVjdGlvblJhbmdlKEYsRil9dGhpcy5mb3JtYXR0ZWRQaG9uZT1NLHRoaXMudmFsdWU9eCx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1jbGVhblBob25lTnVtYmVyKHYpe3JldHVybiB2LnJlcGxhY2UoL1xEL2csIiIpfWZvcm1hdFBob25lTnVtYmVyKHYpe2xldCBtPXRoaXMuY2xlYW5QaG9uZU51bWJlcih2KTtyZXR1cm4gbS5sZW5ndGg9PT0wPyIiOm0ubGVuZ3RoPD0zP206bS5sZW5ndGg8PTY/YCgke20uc2xpY2UoMCwzKX0pICR7bS5zbGljZSgzKX1gOm0ubGVuZ3RoPD0xMD9gKCR7bS5zbGljZSgwLDMpfSkgJHttLnNsaWNlKDMsNil9LSR7bS5zbGljZSg2KX1gOmArJHttLnNsaWNlKDAsbS5sZW5ndGgtMTApfSAoJHttLnNsaWNlKC0xMCwtNyl9KSAke20uc2xpY2UoLTcsLTQpfS0ke20uc2xpY2UoLTQpfWB9Y2FsY3VsYXRlQ3Vyc29yUG9zaXRpb24odixtLHgpe2xldCBNPTA7Zm9yKGxldCBTPTA7Uzx4JiZTPG0ubGVuZ3RoO1MrKykvXGQvLnRlc3QobVtTXSl8fE0rKztyZXR1cm4gTWF0aC5taW4oeCtNLG0ubGVuZ3RoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKHYpe3RoaXMudmFsdWU9dix0aGlzLmZvcm1hdHRlZFBob25lPXRoaXMuZm9ybWF0UGhvbmVOdW1iZXIodil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGE0KHRoaXMsZyl9c3RhdGlje2E0KGksYSl9fTtyZXR1cm4geT1pfSkoKX0pO3ZhciBJdXQsTnV0PWIoKCk9Pnt1ZSgpO3gxKCk7ZzIoKTtJdXQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiI3RvZ2dsZS1hbGwtb24iKSxhPXQucXVlcnlTZWxlY3RvcigiI3RvZ2dsZS1hbGwtb2ZmIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoIi5mZWF0dXJlLXRvZ2dsZXMgZGVlcy1pbnB1dC10b2dnbGUiKTtlJiZhJiYoZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntpLmZvckVhY2gocj0+eyFyLmRpc2FibGVkJiYhci5yZXF1aXJlZCYmKHIudmFsdWU9ITApfSl9KSxhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2kuZm9yRWFjaChyPT57IXIuZGlzYWJsZWQmJiFyLnJlcXVpcmVkJiYoci52YWx1ZT0hMSl9KX0pKX19PgogICAgPHN0eWxlPgogICAgICAke1FgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQoKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CgogICAgICAgIC50b2dnbGUtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaG9yaXpvbnRhbC10b2dnbGVzIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQoKICAgICAgICAuaW50ZXJhY3RpdmUtc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTAgNDAlIDgwJSkiKX07CiAgICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgICB9CgogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuZmVhdHVyZS10b2dnbGVzIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmRyYWctaGludCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFRvZ2dsZSJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgb24vb2ZmIHRvZ2dsZSBzd2l0Y2ggd2l0aCBkcmFnIHN1cHBvcnQifT4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGUgZmVhdHVyZSJ9CiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAua2V5PSR7ImJhc2ljIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiQWN0aXZlIHRvZ2dsZSJ9CiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAua2V5PSR7ImFjdGl2ZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IldpdGggZGVzY3JpcHRpb24ifQogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgdG9nZ2xlIGhhcyBhZGRpdGlvbmFsIGhlbHBlciB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UifQogICAgICAgICAgICAua2V5PSR7IndpdGhEZXNjIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxwIGNsYXNzPSJkcmFnLWhpbnQiPlRpcDogWW91IGNhbiBkcmFnIHRoZSB0b2dnbGUga25vYiB0byBzd2l0Y2ggc3RhdGVzPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVG9nZ2xlIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgdG9nZ2xlIHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWZhdWx0IChvZmYpIn0KICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZWQgKG9uKSJ9CiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgKG9uKSJ9CiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgKGFsd2F5cyBvbikifQogICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBjYW5ub3QgYmUgdHVybmVkIG9mZiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlRvZ2dsZXMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGludGVyZmFjZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLXRvZ2dsZXMiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaUZpIn0KICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJCbHVldG9vdGgifQogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkdQUyJ9CiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTkZDIn0KICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlRvZ2dsZXMgaW4gYSB0eXBpY2FsIHNldHRpbmdzIGNvbnRleHQifT4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICAgIDxoNCBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Tm90aWZpY2F0aW9uIFNldHRpbmdzPC9oND4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiUHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAudmFsdWU9JHshMH0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBwdXNoIG5vdGlmaWNhdGlvbnMgb24geW91ciBkZXZpY2UifQogICAgICAgICAgICAgIC5rZXk9JHsicHVzaCJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgaW1wb3J0YW50IHVwZGF0ZXMgdmlhIGVtYWlsIn0KICAgICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU291bmQifQogICAgICAgICAgICAgIC52YWx1ZT0keyExfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQbGF5IGEgc291bmQgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsic291bmQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJWaWJyYXRpb24ifQogICAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJWaWJyYXRlIGZvciBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAua2V5PSR7InZpYnJhdGlvbiJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIFRvZ2dsZXMifSAuc3VidGl0bGU9JHsiQmF0Y2ggb3BlcmF0aW9ucyBvbiBtdWx0aXBsZSB0b2dnbGVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0idG9nZ2xlLWFsbC1vbiIgdHlwZT0ic2Vjb25kYXJ5Ij5FbmFibGUgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0idG9nZ2xlLWFsbC1vZmYiIHR5cGU9InNlY29uZGFyeSI+RGlzYWJsZSBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLXRvZ2dsZXMiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkRhcmsgTW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgICAgLmtleT0keyJkYXJrTW9kZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tc2F2ZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICAgICAgLmtleT0keyJhdXRvU2F2ZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWxsIGNoZWNrIn0KICAgICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgICAua2V5PSR7InNwZWxsQ2hlY2sifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wZXIgbW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgICAgLmtleT0keyJkZXZNb2RlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiQmV0YSBmZWF0dXJlcyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ITF9CiAgICAgICAgICAgICAgLmtleT0keyJiZXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIGluIHJlYWwtdGltZSJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFpcnBsYW5lIG1vZGUifQogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhaXJwbGFuZS1vdXRwdXQiKTtlJiYoZS50ZXh0Q29udGVudD1gQWlycGxhbmUgbW9kZTogJHt0LmRldGFpbD8iT04iOiJPRkYifWApfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRG8gbm90IGRpc3R1cmIifQogICAgICAgICAgICAudmFsdWU9JHshMX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkbmQtb3V0cHV0Iik7ZSYmKGUudGV4dENvbnRlbnQ9YERvIG5vdCBkaXN0dXJiOiAke3QuZGV0YWlsPyJFTkFCTEVEIjoiRElTQUJMRUQifWApfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmB9KTt2YXIgRnV0LFFxLFl4LEpxPWIoKCk9Pnt1ZSgpO0x0KCk7XzEoKTtOdXQoKTtwYSgpO1ZlKCk7RnV0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sUXE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LFl4PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC10b2dnbGUiKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITB9KV0sRnV0KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnA9PiJ2YWx1ZSJpbiBwLGdldDpwPT5wLnZhbHVlLHNldDoocCxsKT0+e3AudmFsdWU9bH19LG1ldGFkYXRhOmN9LG4sbyksRnV0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZD1pPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89SXV0O3N0YXRpYyBkZW1vR3JvdXBzPVsiSW5wdXQiXTsjZT1RcSh0aGlzLG4sITEpO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShjKXt0aGlzLiNlPWN9Y3VycmVudFg9KFFxKHRoaXMsbyksMCk7aXNEcmFnZ2luZz0hMTtoYXNEcmFnZ2VkPSExO3N0YXJ0WD0wO3RyYWNrV2lkdGg9MzY7dHJhY2tIZWlnaHQ9MjA7a25vYlNpemU9MTQ7cGFkZGluZz0yO21heFRyYXZlbD0xNjtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5sYWJlbFBvc2l0aW9uPSJyaWdodCJ9c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG1hcmdpbi10b3A6IDFweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLnRvZ2dsZS10cmFjayB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsdWVdKSAudG9nZ2xlLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgIH0KCiAgICAgIC50b2dnbGUtdHJhY2s6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogUmVxdWlyZWQgc3RhdGUgKGxvY2tlZCBvbikgKi8KICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICA6aG9zdChbcmVxdWlyZWRdW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC8qIExhYmVsICovCiAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQ6aG92ZXIgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLyogRGVzY3JpcHRpb24gKi8KICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iIEBjbGljaz0iJHt0aGlzLmhhbmRsZUNsaWNrfSI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtdHJhY2sgJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkPyItMSI6IjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7dGhpcy5oYW5kbGVLZXlkb3dufSIKICAgICAgICAgID4KICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUta25vYiIKICAgICAgICAgICAgICBzdHlsZT0ibGVmdDogJHt0aGlzLnBhZGRpbmcrdGhpcy5jdXJyZW50WH1weDsiCiAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSIke3RoaXMub25Qb2ludGVyRG93bn0iCiAgICAgICAgICAgICAgQHBvaW50ZXJtb3ZlPSIke3RoaXMub25Qb2ludGVyTW92ZX0iCiAgICAgICAgICAgICAgQHBvaW50ZXJ1cD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgICBAcG9pbnRlcmNhbmNlbD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWw/d2A8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gOiIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/d2A8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKGMpe2F3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChjKSx0aGlzLnJlcXVpcmVkJiYhdGhpcy52YWx1ZSYmKHRoaXMudmFsdWU9ITApLHRoaXMuY3VycmVudFg9dGhpcy52YWx1ZT90aGlzLm1heFRyYXZlbDowLHRoaXMucmVxdWVzdFVwZGF0ZSgpfWFzeW5jIGhhbmRsZUNsaWNrKGMpe2lmKHRoaXMuaXNEcmFnZ2luZ3x8dGhpcy5oYXNEcmFnZ2VkKXtjLnN0b3BQcm9wYWdhdGlvbigpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoIXRoaXMuZGlzYWJsZWQpe2lmKHRoaXMucmVxdWlyZWQpe3RoaXMuY3VycmVudFg9dGhpcy5tYXhUcmF2ZWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCksYXdhaXQgbmV3IFByb21pc2UocD0+c2V0VGltZW91dChwLDEwKSksdGhpcy5jdXJyZW50WD10aGlzLm1heFRyYXZlbC0zLHRoaXMucmVxdWVzdFVwZGF0ZSgpLGF3YWl0IHp0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwKSx0aGlzLmN1cnJlbnRYPXRoaXMubWF4VHJhdmVsLHRoaXMucmVxdWVzdFVwZGF0ZSgpO3JldHVybn1jLnN0b3BQcm9wYWdhdGlvbigpLGMucHJldmVudERlZmF1bHQoKSx0aGlzLnZhbHVlPSF0aGlzLnZhbHVlLHRoaXMuY3VycmVudFg9dGhpcy52YWx1ZT90aGlzLm1heFRyYXZlbDowLHRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm5ld1ZhbHVlIix7ZGV0YWlsOnRoaXMudmFsdWUsYnViYmxlczohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx6dC5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLnRoZW4oKCk9Pnt0aGlzLmhhc0RyYWdnZWQ9ITF9KX19b25Qb2ludGVyRG93bihjKXt0aGlzLnJlcXVpcmVkfHx0aGlzLmRpc2FibGVkfHwodGhpcy5pc0RyYWdnaW5nPSEwLHRoaXMuc3RhcnRYPWMuY2xpZW50WC10aGlzLmN1cnJlbnRYLGMudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGMucG9pbnRlcklkKSl9b25Qb2ludGVyTW92ZShjKXtpZighdGhpcy5pc0RyYWdnaW5nKXJldHVybjtsZXQgcD1jLmNsaWVudFgtdGhpcy5zdGFydFg7dGhpcy5oYXNEcmFnZ2VkPSEwO2xldCBsPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRvZ2dsZS1rbm9iIik7bCYmbC5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpLHRoaXMuY3VycmVudFg9TWF0aC5tYXgoMCxNYXRoLm1pbihwLHRoaXMubWF4VHJhdmVsKSksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9b25Qb2ludGVyVXAoYyl7aWYoIXRoaXMuaXNEcmFnZ2luZ3x8KGMudGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShjLnBvaW50ZXJJZCksdGhpcy5pc0RyYWdnaW5nPSExLCF0aGlzLmhhc0RyYWdnZWQpKXJldHVybjtsZXQgcD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpO3AmJnAuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTtsZXQgbD10aGlzLm1heFRyYXZlbC8yO3RoaXMudmFsdWU9dGhpcy5jdXJyZW50WD5sLHRoaXMuY3VycmVudFg9dGhpcy52YWx1ZT90aGlzLm1heFRyYXZlbDowLHRoaXMucmVxdWVzdFVwZGF0ZSgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm5ld1ZhbHVlIix7ZGV0YWlsOnRoaXMudmFsdWUsYnViYmxlczohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKSx6dC5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLnRoZW4oKCk9Pnt0aGlzLmhhc0RyYWdnZWQ9ITF9KX11cGRhdGVkKGMpe3N1cGVyLnVwZGF0ZWQoYyksYy5oYXMoInZhbHVlIikmJiF0aGlzLmlzRHJhZ2dpbmcmJiF0aGlzLmhhc0RyYWdnZWQmJih0aGlzLmN1cnJlbnRYPXRoaXMudmFsdWU/dGhpcy5tYXhUcmF2ZWw6MCx0aGlzLnJlcXVlc3RVcGRhdGUoKSl9aGFuZGxlS2V5ZG93bihjKXsoYy5rZXk9PT0iICJ8fGMua2V5PT09IkVudGVyIikmJihjLnByZXZlbnREZWZhdWx0KCksdGhpcy5oYW5kbGVDbGljayhjKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX1zZXRWYWx1ZShjKXt0aGlzLnZhbHVlPWN9Zm9jdXMoKXtsZXQgYz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTtjJiZjLmZvY3VzKCl9c3RhdGlje1FxKGksYSl9fTtyZXR1cm4gZD1pfSkoKX0pO3ZhciBPdXQsUnV0PWIoKCk9Pnt1ZSgpO091dD0oKT0+d2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtRYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbmZvLWJveCB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlM2YyZmQ7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzE5NzZkMjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFlM2E1ZjsKICAgICAgICAgICAgY29sb3I6ICM5MGNhZjk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVHlwZSBMaXN0In0gLnN1YnRpdGxlPSR7IkFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gYSBsaXN0In0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIHRhZ3MgYnkgdHlwaW5nIGFuZCBwcmVzc2luZyBFbnRlciJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siamF2YXNjcmlwdCIsInR5cGVzY3JpcHQiLCJ3ZWItY29tcG9uZW50cyJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGVhbSBNZW1iZXJzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCBlbWFpbCBhZGRyZXNzZXMgb2YgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJhbGljZUBleGFtcGxlLmNvbSIsImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNraWxscyAmIEtleXdvcmRzIn0gLnN1YnRpdGxlPSR7Ik1hbmFnZSBsaXN0cyBvZiBza2lsbHMgYW5kIGtleXdvcmRzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IllvdXIgU2tpbGxzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJIVE1MIiwiQ1NTIiwiSmF2YVNjcmlwdCIsIk5vZGUuanMiLCJSZWFjdCJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yaWVzIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siVGVjaG5vbG9neSIsIkRlc2lnbiIsIkJ1c2luZXNzIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiS2V5d29yZHMifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJpbm5vdmF0aW9uIiwic3RhcnR1cCIsImdyb3d0aCJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlJlcXVpcmVkICYgRGlzYWJsZWQgU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBpbnB1dCBzdGF0ZXMgZm9yIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBEZXBlbmRlbmNpZXMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTGlzdCBhbGwgcmVxdWlyZWQgbnBtIHBhY2thZ2VzIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC52YWx1ZT0ke1siQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50IiwiQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scyJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiU3lzdGVtIFRhZ3MifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhlc2UgdGFncyBhcmUgbWFuYWdlZCBieSB0aGUgc3lzdGVtIn0KICAgICAgICAgICAgLmRpc2FibGVkPSR7ITB9CiAgICAgICAgICAgIC52YWx1ZT0ke1sic3lzdGVtIiwicHJvdGVjdGVkIiwicmVhZG9ubHkiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0keyEwfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTdW1tYXJ5In0gCiAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGFydGljbGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIHJlbGV2YW50IHRhZ3MgZm9yIGJldHRlciBkaXNjb3ZlcmFiaWxpdHkifQogICAgICAgICAgICAudmFsdWU9JHtbInR1dG9yaWFsIiwid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciBlVixrOCxaeCx0Vj1iKCgpPT57dWUoKTtMdCgpO18xKCk7UnV0KCk7VmUoKTtlVj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGs4PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxaeD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV0sZSxhPVtdLGkscj1YZSxzLG49W10sbz1bXSxkLGM9W10scD1bXTt2YXIgbD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpBcnJheX0pXSxkPVtLKCldLGVWKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJ2YWx1ZSJpbiBnLGdldDpnPT5nLnZhbHVlLHNldDooZyx5KT0+e2cudmFsdWU9eX19LG1ldGFkYXRhOmZ9LG4sbyksZVYodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbnB1dFZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iaW5wdXRWYWx1ZSJpbiBnLGdldDpnPT5nLmlucHV0VmFsdWUsc2V0OihnLHkpPT57Zy5pbnB1dFZhbHVlPXl9fSxtZXRhZGF0YTpmfSxjLHApLGVWKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmZ9LG51bGwsYSksbD1pPWUudmFsdWUsZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9c3RhdGljIGRlbW89T3V0O3N0YXRpYyBkZW1vR3JvdXBzPVsiSW5wdXQiXTsjZT1rOCh0aGlzLG4sW10pO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShmKXt0aGlzLiNlPWZ9I3Q9KGs4KHRoaXMsbyksazgodGhpcyxjLCIiKSk7Z2V0IGlucHV0VmFsdWUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgaW5wdXRWYWx1ZShmKXt0aGlzLiN0PWZ9c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzMzMyIsIiNmZmYiKX07CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZhZmFmYSIsIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2guYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCIxcHggc29saWQgI2ZmZmZmZjEwIil9OwogICAgICAgIGJvcmRlci1ib3R0b206ICR7aC5iZFRoZW1lKCIxcHggc29saWQgI0NDQyIsIjFweCBzb2xpZCAjMjIyIil9OwogICAgICAgIGJvcmRlci1yaWdodDogJHtoLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtoLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2guYmRUaGVtZSgiMHB4IDFweCA0cHggcmdiYSgwLDAsMCwwLjMpIiwibm9uZSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYWluYm94OmhvdmVyIHsKICAgICAgICBmaWx0ZXI6ICR7aC5iZFRoZW1lKCJicmlnaHRuZXNzKDAuOTgpIiwiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtoLmJkVGhlbWUoIiMwMDY5ZjIiLCIjMDA4NGZmIil9OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgICB9CgogICAgICAudGFncyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC5ub3RhZ3MgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5OTkiLCIjNjY2Iil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjVmNWY1IiwiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmYWZhZmEiLCIjMWExYTFhIil9OwogICAgICB9CiAgICAgIAogICAgICBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U4ZjVlOSIsIiMyZDNhMmQiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMmU3ZDMyIiwiIzgxYzc4NCIpfTsKICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luOiAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNjOGU2YzkiLCIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2M4ZTZjOSIsIiMzZDRmM2QiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmUgewogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC50YWcgLnJlbW92ZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNjNjI4MjgiLCIjZWY1MzUwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICA6aG9zdChbZGlzYWJsZWRdKSAubWFpbmJveCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWdzIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudGFnIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgaW5wdXQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmMGYwZjAiLCIjMWExYTFhIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFncyIgQGNsaWNrPSR7KCk9Pnt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpfX0+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGg9PT0wP3dgPGRpdiBjbGFzcz0ibm90YWdzIj5ObyB0YWdzIHlldDwvZGl2PmA6dGhpcy52YWx1ZS5tYXAoZj0+d2AKICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIj4KICAgICAgICAgICAgICAgICAgICAgICR7Zn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUiIEBjbGljaz0ke2c9PntnLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMucmVtb3ZlVGFnKGYpfX0+w5c8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlLCBwcmVzcyBFbnRlciB0byBhZGQgaXQuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgQGlucHV0PSR7Zj0+e3RoaXMuaW5wdXRWYWx1ZT1mLnRhcmdldC52YWx1ZX19CiAgICAgICAgICAgIEBrZXlkb3duPSR7Zj0+e2Yua2V5PT09IkVudGVyIiYmdGhpcy5pbnB1dFZhbHVlLnRyaW0oKSYmKGYucHJldmVudERlZmF1bHQoKSx0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKSl9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFkZFRhZyhmKXt0aGlzLnZhbHVlLmluY2x1ZGVzKGYpfHwodGhpcy52YWx1ZT1bLi4udGhpcy52YWx1ZSxmXSx0aGlzLmlucHV0VmFsdWU9IiIsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpfXJlbW92ZVRhZyhmKXt0aGlzLnZhbHVlPXRoaXMudmFsdWUuZmlsdGVyKGc9PmchPT1mKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKGYpe3RoaXMudmFsdWU9Zn1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksazgodGhpcyxwKX1zdGF0aWN7azgoaSxhKX19O3JldHVybiBsPWl9KSgpfSk7dmFyIEJ1dCxIdXQ9YigoKT0+e2FWKCk7czIoKTt1ZSgpO0J1dD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSA1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7CiAgICAgIH0KICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIC50aGVtZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDE2cHg7CiAgICAgICAgcmlnaHQ6IDE2cHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2s9JHsoKT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0IiksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIil9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5CYXNpYyBUYWJsZSB3aXRoIEFjdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5BIHN0YW5kYXJkIHRhYmxlIHdpdGggcm93IGFjdGlvbnMsIGVkaXRhYmxlIGZpZWxkcywgYW5kIGNvbnRleHQgbWVudSBzdXBwb3J0LiBEb3VibGUtY2xpY2sgb24gZGVzY3JpcHRpb25zIHRvIGVkaXQuIEdyaWQgbGluZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJDdXJyZW50IEFjY291bnQgU3RhdGVtZW50IgogICAgICAgICAgaGVhZGluZzI9IkJ1bnEgLSBQYXltZW50IEFjY291bnQgMiAtIEFwcmlsIDIwMjEiCiAgICAgICAgICAuZWRpdGFibGVGaWVsZHM9IiR7WyJkZXNjcmlwdGlvbiJdfSIKICAgICAgICAgIC5kYXRhPSR7W3tkYXRlOiIyMDIxLTA0LTAxIixhbW91bnQ6IjI0NjQuNjUgXHUyMEFDIixkZXNjcmlwdGlvbjoiUHJpbnRpbmcgUGFwZXIgKE9mZmljZSBTdXBwbGllcykgLSBTVEFQTEVTIEJSRU1FTiJ9LHtkYXRlOiIyMDIxLTA0LTAyIixhbW91bnQ6IjE2NS42NSBcdTIwQUMiLGRlc2NyaXB0aW9uOiJMb2dpdGVjaCBNb3VzZSAoSGFyZHdhcmUpIC0gbG9naS5jb20gT25saW5lU2hvcCJ9LHtkYXRlOiIyMDIxLTA0LTAzIixhbW91bnQ6IjI5OTksMDAgXHUyMEFDIixkZXNjcmlwdGlvbjoiTWFjYm9vayBQcm8gMTZpbmNoIChIYXJkd2FyZSkgLSBBcHBsZS5kZSBPbmxpbmVTaG9wIn0se2RhdGU6IjIwMjEtMDQtMDEiLGFtb3VudDoiMjQ2NC42NSBcdTIwQUMiLGRlc2NyaXB0aW9uOiJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiJ9LHtkYXRlOiIyMDIxLTA0LTAxIixhbW91bnQ6IjI0NjQuNjUgXHUyMEFDIixkZXNjcmlwdGlvbjoiT2ZmaWNlLVN1cHBsaWVzIC0gU1RBUExFUyBCUkVNRU4ifV19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1t7bmFtZToidXBsb2FkIixpY29uTmFtZToiYmVsbCIsdXNlVGFibGVCZWhhdmlvdXI6InVwbG9hZCIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyB0PT57YWxlcnQodC5pdGVtLmFtb3VudCl9fSx7bmFtZToidmlzaWJpbGl0eSIsaWNvbk5hbWU6ImNvcHkiLHR5cGU6WyJpblJvdyJdLHVzZVRhYmxlQmVoYXZpb3VyOiJwcmV2aWV3IixhY3Rpb25GdW5jOmFzeW5jIHQ9Pnt9fSx7bmFtZToiY3JlYXRlIG5ldyIsaWNvbk5hbWU6Imluc3RhZ3JhbSIsdHlwZTpbImhlYWRlciJdLHVzZVRhYmxlQmVoYXZpb3VyOiJwcmV2aWV3IixhY3Rpb25GdW5jOmFzeW5jIHQ9Pnt9fSx7bmFtZToidG8gZ2FsbGVyeSIsaWNvbk5hbWU6Im1lc3NhZ2UiLHR5cGU6WyJmb290ZXIiXSx1c2VUYWJsZUJlaGF2aW91cjoicHJldmlldyIsYWN0aW9uRnVuYzphc3luYyB0PT57fX0se25hbWU6ImNvcHkiLGljb25OYW1lOiJjb3B5U29saWQiLHR5cGU6WyJjb250ZXh0bWVudSIsImluUm93Il0sYWN0aW9uOmFzeW5jKCk9Pm51bGx9LHtuYW1lOiJlZGl0IChmcm9tIGRlbW8pIixpY29uTmFtZToicGVuVG9TcXVhcmUiLHR5cGU6WyJjb250ZXh0bWVudSJdLGFjdGlvbjphc3luYygpPT5udWxsfSx7bmFtZToicGFzdGUiLGljb25OYW1lOiJwYXN0ZVNvbGlkIix0eXBlOlsiY29udGV4dG1lbnUiXSxhY3Rpb246YXN5bmMoKT0+bnVsbH0se25hbWU6InByZXZpZXciLHR5cGU6WyJkb3VibGVDbGljayIsImNvbnRleHRtZW51Il0saWNvbk5hbWU6ImV5ZSIsYWN0aW9uRnVuYzphc3luYyB0PT4oYWxlcnQodC5pdGVtLmFtb3VudCksbnVsbCl9XX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0keyEwfQogICAgICAgICAgLmRhdGE9JHtbe3Byb2R1Y3Q6J01hY0Jvb2sgUHJvIDE2Iicsd2FyZWhvdXNlX2E6IjQ1Iix3YXJlaG91c2VfYjoiMzIiLHdhcmVob3VzZV9jOiIyOCIsdG90YWw6IjEwNSIsc3RhdHVzOiJcdTI3MTMgSW4gU3RvY2sifSx7cHJvZHVjdDoiaVBob25lIDE1IFBybyIsd2FyZWhvdXNlX2E6IjEyMCIsd2FyZWhvdXNlX2I6Ijg5Iix3YXJlaG91c2VfYzoiMTU2Iix0b3RhbDoiMzY1IixzdGF0dXM6Ilx1MjcxMyBJbiBTdG9jayJ9LHtwcm9kdWN0OiJBaXJQb2RzIFBybyIsd2FyZWhvdXNlX2E6IjAiLHdhcmVob3VzZV9iOiIxMiIsd2FyZWhvdXNlX2M6IjUiLHRvdGFsOiIxNyIsc3RhdHVzOiJcdTI2QTAgTG93IFN0b2NrIn0se3Byb2R1Y3Q6ImlQYWQgQWlyIix3YXJlaG91c2VfYToiMjMiLHdhcmVob3VzZV9iOiI0NSIsd2FyZWhvdXNlX2M6IjY3Iix0b3RhbDoiMTM1IixzdGF0dXM6Ilx1MjcxMyBJbiBTdG9jayJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHshMH0KICAgICAgICAgIC5kYXRhPSR7W3tzZXJ2ZXI6IkFQSS0xIixyZWdpb246IlVTLUVhc3QiLGNwdToiNDUlIixtZW1vcnk6IjYyJSIsZGlzazoiNzglIixsYXRlbmN5OiIxMm1zIix1cHRpbWU6Ijk5LjklIixzdGF0dXM6Ilx1ezFGN0UyfSBIZWFsdGh5In0se3NlcnZlcjoiQVBJLTIiLHJlZ2lvbjoiRVUtV2VzdCIsY3B1OiIzOCUiLG1lbW9yeToiNTUlIixkaXNrOiI0NSUiLGxhdGVuY3k6IjI1bXMiLHVwdGltZToiOTkuOCUiLHN0YXR1czoiXHV7MUY3RTJ9IEhlYWx0aHkifSx7c2VydmVyOiJEQi1NYXN0ZXIiLHJlZ2lvbjoiVVMtRWFzdCIsY3B1OiI3MiUiLG1lbW9yeToiODElIixkaXNrOiI5MiUiLGxhdGVuY3k6IjhtcyIsdXB0aW1lOiIxMDAlIixzdGF0dXM6Ilx1ezFGN0UxfSBXYXJuaW5nIn0se3NlcnZlcjoiREItUmVwbGljYSIscmVnaW9uOiJFVS1XZXN0IixjcHU6IjIzJSIsbWVtb3J5OiIzNCUiLGRpc2s6IjQ1JSIsbGF0ZW5jeToiMTVtcyIsdXB0aW1lOiI5OS43JSIsc3RhdHVzOiJcdXsxRjdFMn0gSGVhbHRoeSJ9LHtzZXJ2ZXI6IkNhY2hlLTEiLHJlZ2lvbjoiQVAtU291dGgiLGNwdToiODklIixtZW1vcnk6IjkyJSIsZGlzazoiMTIlIixsYXRlbmN5OiIxMjBtcyIsdXB0aW1lOiI5OC41JSIsc3RhdHVzOiJcdXsxRjUzNH0gQ3JpdGljYWwifV19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbe25hbWU6IlNTSCBDb25uZWN0IixpY29uTmFtZToibHVjaWRlOnRlcm1pbmFsIix0eXBlOlsiaW5Sb3ciXSxhY3Rpb25GdW5jOmFzeW5jIHQ9Pntjb25zb2xlLmxvZygiQ29ubmVjdGluZyB0bzoiLHQuaXRlbS5zZXJ2ZXIpfX0se25hbWU6IlZpZXcgTG9ncyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlLXRleHQiLHR5cGU6WyJpblJvdyIsImNvbnRleHRtZW51Il0sYWN0aW9uRnVuYzphc3luYyB0PT57Y29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iix0Lml0ZW0uc2VydmVyKX19LHtuYW1lOiJSZXN0YXJ0IFNlcnZlciIsaWNvbk5hbWU6Imx1Y2lkZTpyZWZyZXNoLWN3Iix0eXBlOlsiY29udGV4dG1lbnUiXSxhY3Rpb25GdW5jOmFzeW5jIHQ9Pntjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLHQuaXRlbS5zZXJ2ZXIpfX1dfSIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEhvcml6b250YWwgTGluZXMgT25seTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVtcGhhc2lzIG9uIHJvdyBzZXBhcmF0aW9uIHdpdGhvdXQgY29sdW1uIGRpdmlkZXJzLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFBlcmZvcm1hbmNlIgogICAgICAgICAgaGVhZGluZzI9IlRvcCBwZXJmb3JtZXJzIHRoaXMgcXVhcnRlciIKICAgICAgICAgIC5zaG93SG9yaXpvbnRhbExpbmVzPSR7ITB9CiAgICAgICAgICAuc2hvd1ZlcnRpY2FsTGluZXM9JHshMX0KICAgICAgICAgIC5kYXRhPSR7W3tzYWxlc3BlcnNvbjoiRW1pbHkgSm9obnNvbiIscmVnaW9uOiJOb3J0aCBBbWVyaWNhIixkZWFsc19jbG9zZWQ6IjQyIixyZXZlbnVlOiIkMS4yTSIscXVvdGFfYWNoaWV2ZW1lbnQ6IjEyOCUiLHJhdGluZzoiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIn0se3NhbGVzcGVyc29uOiJNaWNoYWVsIENoZW4iLHJlZ2lvbjoiQXNpYSBQYWNpZmljIixkZWFsc19jbG9zZWQ6IjM4IixyZXZlbnVlOiIkOTgwSyIscXVvdGFfYWNoaWV2ZW1lbnQ6IjExNSUiLHJhdGluZzoiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIn0se3NhbGVzcGVyc29uOiJTYXJhaCBXaWxsaWFtcyIscmVnaW9uOiJFdXJvcGUiLGRlYWxzX2Nsb3NlZDoiMzUiLHJldmVudWU6IiQ4NzVLIixxdW90YV9hY2hpZXZlbWVudDoiMTA4JSIscmF0aW5nOiJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAifSx7c2FsZXNwZXJzb246IkRhdmlkIEdhcmNpYSIscmVnaW9uOiJMYXRpbiBBbWVyaWNhIixkZWFsc19jbG9zZWQ6IjMxIixyZXZlbnVlOiIkNzUwSyIscXVvdGFfYWNoaWV2ZW1lbnQ6Ijk1JSIscmF0aW5nOiJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAifV19CiAgICAgICAgICBkYXRhTmFtZT0ic2FsZXMgcmVwcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TaW1wbGUgVGFibGUgKE5vIEdyaWQpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+Q2xlYW4sIG1pbmltYWwgZGVzaWduIHdpdGhvdXQgZ3JpZCBsaW5lcy4gU2V0IHNob3dHcmlkIHRvIGZhbHNlIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgZ3JpZC48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJUZWFtIE1lbWJlcnMiCiAgICAgICAgICBoZWFkaW5nMj0iRW5naW5lZXJpbmcgRGVwYXJ0bWVudCIKICAgICAgICAgIC5zaG93R3JpZD0keyExfQogICAgICAgICAgLmRhdGE9JHtbe25hbWU6IkFsaWNlIEpvaG5zb24iLHJvbGU6IkxlYWQgRW5naW5lZXIiLGVtYWlsOiJhbGljZUBjb21wYW55LmNvbSIsbG9jYXRpb246IlNhbiBGcmFuY2lzY28iLGpvaW5lZDoiMjAyMC0wMy0xNSJ9LHtuYW1lOiJCb2IgU21pdGgiLHJvbGU6IlNlbmlvciBEZXZlbG9wZXIiLGVtYWlsOiJib2JAY29tcGFueS5jb20iLGxvY2F0aW9uOiJOZXcgWW9yayIsam9pbmVkOiIyMDE5LTA3LTIyIn0se25hbWU6IkNoYXJsaWUgRGF2aXMiLHJvbGU6IkRldk9wcyBFbmdpbmVlciIsZW1haWw6ImNoYXJsaWVAY29tcGFueS5jb20iLGxvY2F0aW9uOiJMb25kb24iLGpvaW5lZDoiMjAyMS0wMS0xMCJ9LHtuYW1lOiJEaWFuYSBNYXJ0aW5leiIscm9sZToiRnJvbnRlbmQgRGV2ZWxvcGVyIixlbWFpbDoiZGlhbmFAY29tcGFueS5jb20iLGxvY2F0aW9uOiJCYXJjZWxvbmEiLGpvaW5lZDoiMjAyMi0wNS0xOCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbe3Byb2R1Y3Q6IkVudGVycHJpc2UgTGljZW5zZSIsdW5pdHM6NDUscmV2ZW51ZToyMjVlMyxncm93dGg6LjIzLGZvcmVjYXN0OjI4ZTR9LHtwcm9kdWN0OiJQcm9mZXNzaW9uYWwgTGljZW5zZSIsdW5pdHM6MTI4LHJldmVudWU6MTI4ZTMsZ3Jvd3RoOi4xNSxmb3JlY2FzdDoxNDdlM30se3Byb2R1Y3Q6IlN0YXJ0ZXIgTGljZW5zZSIsdW5pdHM6MzQyLHJldmVudWU6Njg0MDAsZ3Jvd3RoOi40Mixmb3JlY2FzdDo5N2UzfV19CiAgICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7dD0+KHtQcm9kdWN0OnQucHJvZHVjdCwiVW5pdHMgU29sZCI6dC51bml0cy50b0xvY2FsZVN0cmluZygpLFJldmVudWU6IiQiK3QucmV2ZW51ZS50b0xvY2FsZVN0cmluZygpLEdyb3d0aDoodC5ncm93dGgqMTAwKS50b0ZpeGVkKDEpKyIlIiwiUTEgMjAyNCBGb3JlY2FzdCI6IiQiK3QuZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKX0pfQogICAgICAgICAgZGF0YU5hbWU9InByb2R1Y3RzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkVtcHR5IFRhYmxlIFN0YXRlPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+SG93IHRoZSB0YWJsZSBsb29rcyB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9Ik5vIERhdGEgQXZhaWxhYmxlIgogICAgICAgICAgaGVhZGluZzI9IlRoaXMgdGFibGUgaXMgY3VycmVudGx5IGVtcHR5IgogICAgICAgICAgLmRhdGE9JHtbXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY2hlbWEtRmlyc3QgQ29sdW1ucyAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRlZmluZXMgY29sdW1ucyBleHBsaWNpdGx5IGFuZCByZW5kZXJzIHZpYSBzY2hlbWEuIE5vIGRpc3BsYXlGdW5jdGlvbiBuZWVkZWQuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFNjaGVtYS1GaXJzdCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ29sdW1ucyBkZWZpbmUgcmVuZGVyaW5nIGFuZCBvcmRlciIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6ImVtYWlsIixoZWFkZXI6IkVtYWlsIixyZW5kZXJlcjp0PT53YDxkZWVzLWJhZGdlPiR7dH08L2RlZXMtYmFkZ2U+YH0se2tleToiam9pbmVkQXQiLGhlYWRlcjoiSm9pbmVkIixyZW5kZXJlcjp0PT5uZXcgRGF0ZSh0KS50b0xvY2FsZURhdGVTdHJpbmcoKX1dfQogICAgICAgICAgLmRhdGE9JHtbe25hbWU6IkFsaWNlIixlbWFpbDoiYWxpY2VAZXhhbXBsZS5jb20iLGpvaW5lZEF0OiIyMDIyLTA4LTAxIn0se25hbWU6IkJvYiIsZW1haWw6ImJvYkBleGFtcGxlLmNvbSIsam9pbmVkQXQ6IjIwMjEtMTItMTEifSx7bmFtZToiQ2Fyb2wiLGVtYWlsOiJjYXJvbEBleGFtcGxlLmNvbSIsam9pbmVkQXQ6IjIwMjMtMDMtMjIifV19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1t7a2V5OiJuYW1lIixoZWFkZXI6Ik5hbWUiLHNvcnRhYmxlOiEwfV19CiAgICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7dD0+KHtuYW1lOnQubmFtZSxlbWFpbDp0LmVtYWlsLHJvbGU6dC5yb2xlfSl9CiAgICAgICAgICAuYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb249JHshMH0KICAgICAgICAgIC5kYXRhPSR7W3tuYW1lOiJFcmluIixlbWFpbDoiZXJpbkBleGFtcGxlLmNvbSIscm9sZToiQWRtaW4ifSx7bmFtZToiRmlubiIsZW1haWw6ImZpbm5AZXhhbXBsZS5jb20iLHJvbGU6IlVzZXIifSx7bmFtZToiR2luYSIsZW1haWw6ImdpbmFAZXhhbXBsZS5jb20iLHJvbGU6IlVzZXIifV19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iIAogICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHt0PT57Y29uc29sZS5sb2coIlNlbGVjdGlvbiBjaGFuZ2VkIix0LmRldGFpbCl9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0ke3Q9PntsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7ZSYmZS5zZXRGaWx0ZXJUZXh0KHQuZGV0YWlsLnZhbHVlKX19CiAgICAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHt0PT57bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhYmxlRmlsdGVyU2VsZWN0RGVtbyIpO2UmJmUuc2V0RmlsdGVyVGV4dCh0LmRldGFpbC52YWx1ZSl9fQogICAgICA+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5GaWx0ZXJpbmcgKyBNdWx0aS1TZWxlY3Rpb24gKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5Vc2UgdGhlIHNlYXJjaCBiYXIgdG8gZmlsdGVyIHJvd3M7IHRvZ2dsZSBzZWxlY3Rpb24gdmlhIGNoZWNrYm94ZXMuIENsaWNrIGhlYWRlcnMgdG8gc29ydC48L3A+CiAgICAgICAgPGRlZXMtc2VhcmNoYmFyPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMnB4Ij48L2Rpdj4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaWQ9InRhYmxlRmlsdGVyU2VsZWN0RGVtbyIKICAgICAgICAgIGhlYWRpbmcxPSJJbnZlbnRvcnkgKEZpbHRlciArIFNlbGVjdCkiCiAgICAgICAgICBoZWFkaW5nMj0iVHJ5IHR5cGluZyB0byBmaWx0ZXIgYW5kIHNlbGVjdGluZyBtdWx0aXBsZSByb3dzIgogICAgICAgICAgLnNlbGVjdGlvbk1vZGU9JHsibXVsdGkifQogICAgICAgICAgLnJvd0tleT0keyJza3UifQogICAgICAgICAgLmNvbHVtbnM9JHtbe2tleToic2t1IixoZWFkZXI6IlNLVSIsc29ydGFibGU6ITB9LHtrZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6InN0b2NrIixoZWFkZXI6IlN0b2NrIixzb3J0YWJsZTohMH1dfQogICAgICAgICAgLmRhdGE9JHtbe3NrdToiQS0xMDAiLG5hbWU6IlVTQi1DIENhYmxlIixzdG9jazoxMjB9LHtza3U6IkEtMTAxIixuYW1lOiJXaXJlbGVzcyBNb3VzZSIsc3RvY2s6NTV9LHtza3U6IkEtMTAyIixuYW1lOiJMYXB0b3AgU3RhbmQiLHN0b2NrOjE4fSx7c2t1OiJCLTIwMCIsbmFtZToiS2V5Ym9hcmQgKElTTykiLHN0b2NrOjg5fSx7c2t1OiJCLTIwMSIsbmFtZToiSERNSSBBZGFwdGVyIixzdG9jazowfSx7c2t1OiJDLTMwMCIsbmFtZToiV2ViY2FtIDEwODBwIixzdG9jazo0Mn1dfQogICAgICAgICAgZGF0YU5hbWU9Iml0ZW1zIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkNvbHVtbiBGaWx0ZXJzICsgU3RpY2t5IEhlYWRlciAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlBlci1jb2x1bW4gcXVpY2sgZmlsdGVycyBhbmQgc3RpY2t5IGhlYWRlciB3aXRoIGludGVybmFsIHNjcm9sbC4gVHJ5IGZpbHRlcmluZyB0aGUgTmFtZSBjb2x1bW4uIFVzZXMgLS10YWJsZS1tYXgtaGVpZ2h0IHZhci48L3A+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgZGVlcy10YWJsZVtzdGlja3ktaGVhZGVyXSB7IC0tdGFibGUtbWF4LWhlaWdodDogMjIwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iRW1wbG95ZWVzIgogICAgICAgICAgaGVhZGluZzI9IlF1aWNrIGZpbHRlciBwZXIgY29sdW1uICsgc3RpY2t5IGhlYWRlciIKICAgICAgICAgIC5zaG93Q29sdW1uRmlsdGVycz0keyEwfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0keyEwfQogICAgICAgICAgLmNvbHVtbnM9JHtbe2tleToibmFtZSIsaGVhZGVyOiJOYW1lIixzb3J0YWJsZTohMH0se2tleToiZW1haWwiLGhlYWRlcjoiRW1haWwiLHNvcnRhYmxlOiEwfSx7a2V5OiJkZXBhcnRtZW50IixoZWFkZXI6IkRlcGFydG1lbnQiLHNvcnRhYmxlOiEwfV19CiAgICAgICAgICAuZGF0YT0ke1t7bmFtZToiQWxpY2UgSm9obnNvbiIsZW1haWw6ImFsaWNlQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJCb2IgU21pdGgiLGVtYWlsOiJib2JAY29ycC5jb20iLGRlcGFydG1lbnQ6IlNhbGVzIn0se25hbWU6IkNoYXJsaWUgRGF2aXMiLGVtYWlsOiJjaGFybGllQGNvcnAuY29tIixkZXBhcnRtZW50OiJIUiJ9LHtuYW1lOiJEaWFuYSBNYXJ0aW5leiIsZW1haWw6ImRpYW5hQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJFdGhhbiBCcm93biIsZW1haWw6ImV0aGFuQGNvcnAuY29tIixkZXBhcnRtZW50OiJGaW5hbmNlIn0se25hbWU6IkZpb25hIENsYXJrIixlbWFpbDoiZmlvbmFAY29ycC5jb20iLGRlcGFydG1lbnQ6IlNhbGVzIn0se25hbWU6IkdyYWNlIExlZSIsZW1haWw6ImdyYWNlQGNvcnAuY29tIixkZXBhcnRtZW50OiJFbmdpbmVlcmluZyJ9LHtuYW1lOiJIZW5yeSBXaWxzb24iLGVtYWlsOiJoZW5yeUBjb3JwLmNvbSIsZGVwYXJ0bWVudDoiTWFya2V0aW5nIn0se25hbWU6IklyZW5lIFdhbGtlciIsZW1haWw6ImlyZW5lQGNvcnAuY29tIixkZXBhcnRtZW50OiJGaW5hbmNlIn0se25hbWU6IkphY2sgVHVybmVyIixlbWFpbDoiamFja0Bjb3JwLmNvbSIsZGVwYXJ0bWVudDoiU3VwcG9ydCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJlbXBsb3llZXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iCiAgICAgICAgQHNlYXJjaFJlcXVlc3Q9JHthc3luYyB0PT57bGV0e3F1ZXJ5OmV9PXQuZGV0YWlsfHx7cXVlcnk6IiJ9LGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKSxpPVt7aWQ6MSxuYW1lOiJBbGljZSIsY2l0eToiQmVybGluIix0aXRsZToiRW5naW5lZXIifSx7aWQ6MixuYW1lOiJCb2IiLGNpdHk6IlBhcmlzIix0aXRsZToiRGVzaWduZXIifSx7aWQ6MyxuYW1lOiJDaGFybGllIixjaXR5OiJMb25kb24iLHRpdGxlOiJNYW5hZ2VyIn0se2lkOjQsbmFtZToiRGlhbmEiLGNpdHk6Ik1hZHJpZCIsdGl0bGU6IkVuZ2luZWVyIn0se2lkOjUsbmFtZToiRXRoYW4iLGNpdHk6IlJvbWUiLHRpdGxlOiJTdXBwb3J0In1dO2F3YWl0IG5ldyBQcm9taXNlKG49PnNldFRpbWVvdXQobiwzMDApKTtsZXQgcj1TdHJpbmcoZXx8IiIpLnRvTG93ZXJDYXNlKCkscz1yP2kuZmlsdGVyKG49Pk9iamVjdC52YWx1ZXMobikuc29tZShvPT5TdHJpbmcobykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyKSkpOmk7YS5kYXRhPXN9fQogICAgICA+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TZXJ2ZXIgU2VhcmNoIChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+U2VsZWN0IFNlcnZlciBtb2RlLCB0eXBlIGEgcXVlcnksIGFuZCB3YXRjaCB0aGUgdGFibGUgZmV0Y2ggc2ltdWxhdGVkIHJlc3VsdHMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2VydmVyU2VhcmNoRGVtbyIKICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgKFNlcnZlciBTZWFyY2gpIgogICAgICAgICAgaGVhZGluZzI9IkNsaWNrIFNlYXJjaCwgY2hvb3NlIFNlcnZlciBtb2RlLCBhbmQgdHlwZSIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSJ9LHtrZXk6ImNpdHkiLGhlYWRlcjoiQ2l0eSJ9LHtrZXk6InRpdGxlIixoZWFkZXI6IlRpdGxlIn1dfQogICAgICAgICAgLmRhdGE9JHtbe2lkOjEsbmFtZToiQWxpY2UiLGNpdHk6IkJlcmxpbiIsdGl0bGU6IkVuZ2luZWVyIn0se2lkOjIsbmFtZToiQm9iIixjaXR5OiJQYXJpcyIsdGl0bGU6IkRlc2lnbmVyIn0se2lkOjMsbmFtZToiQ2hhcmxpZSIsY2l0eToiTG9uZG9uIix0aXRsZToiTWFuYWdlciJ9LHtpZDo0LG5hbWU6IkRpYW5hIixjaXR5OiJNYWRyaWQiLHRpdGxlOiJFbmdpbmVlciJ9LHtpZDo1LG5hbWU6IkV0aGFuIixjaXR5OiJSb21lIix0aXRsZToiU3VwcG9ydCJ9XX0KICAgICAgICAgIGRhdGFOYW1lPSJwZW9wbGUiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+V2lkZSBQcm9wZXJ0aWVzICsgTWFueSBBY3Rpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QSB0YWJsZSB3aXRoIG1hbnkgY29sdW1ucyBhbmQgcmljaCBhY3Rpb25zIHRvIHN0cmVzcyB0ZXN0IGxheW91dCBhbmQgc3RpY2t5IEFjdGlvbnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iUGVvcGxlIERpcmVjdG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJNYW55IHByb3BlcnRpZXMgYW5kIGFjdGlvbnMiCiAgICAgICAgICAuY29sdW1ucz0ke1t7a2V5OiJpZCIsaGVhZGVyOiJJRCIsc29ydGFibGU6ITB9LHtrZXk6Im5hbWUiLGhlYWRlcjoiTmFtZSIsc29ydGFibGU6ITB9LHtrZXk6InJvbGUiLGhlYWRlcjoiUm9sZSIsc29ydGFibGU6ITB9LHtrZXk6ImRlcGFydG1lbnQiLGhlYWRlcjoiRGVwYXJ0bWVudCIsc29ydGFibGU6ITB9LHtrZXk6ImVtYWlsIixoZWFkZXI6IkVtYWlsIn0se2tleToicGhvbmUiLGhlYWRlcjoiUGhvbmUifSx7a2V5OiJsb2NhdGlvbiIsaGVhZGVyOiJMb2NhdGlvbiIsc29ydGFibGU6ITB9LHtrZXk6InN0YXR1cyIsaGVhZGVyOiJTdGF0dXMiLHNvcnRhYmxlOiEwfSx7a2V5OiJjcmVhdGVkQXQiLGhlYWRlcjoiQ3JlYXRlZCIsc29ydGFibGU6ITB9LHtrZXk6InVwZGF0ZWRBdCIsaGVhZGVyOiJVcGRhdGVkIixzb3J0YWJsZTohMH0se2tleToibGFzdExvZ2luIixoZWFkZXI6Ikxhc3QgTG9naW4iLHNvcnRhYmxlOiEwfSx7a2V5OiJwcm9qZWN0cyIsaGVhZGVyOiJQcm9qZWN0cyJ9LHtrZXk6InRhZ3MiLGhlYWRlcjoiVGFncyJ9LHtrZXk6Im5vdGVzIixoZWFkZXI6Ik5vdGVzIn1dfQogICAgICAgICAgLmRhdGE9JHtbe2lkOjEsbmFtZToiQWxpY2UgSm9obnNvbiIscm9sZToiRW5naW5lZXIiLGRlcGFydG1lbnQ6IlImRCIsZW1haWw6ImFsaWNlQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTExIixsb2NhdGlvbjoiQmVybGluIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIzLTAxLTEyIix1cGRhdGVkQXQ6IjIwMjQtMDUtMDMiLGxhc3RMb2dpbjoiMjAyNC0xMC0wMSIscHJvamVjdHM6NSx0YWdzOiJ0eXBlc2NyaXB0LCB1aSIsbm90ZXM6Ik1lbnRvciJ9LHtpZDoyLG5hbWU6IkJvYiBTbWl0aCIscm9sZToiRGVzaWduZXIiLGRlcGFydG1lbnQ6IkRlc2lnbiIsZW1haWw6ImJvYkBjb3JwLmNvbSIscGhvbmU6IisxIDIwMiA1NTUgMDExMiIsbG9jYXRpb246IlBhcmlzIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIyLTExLTA1Iix1cGRhdGVkQXQ6IjIwMjQtMDQtMTAiLGxhc3RMb2dpbjoiMjAyNC0wOS0yOCIscHJvamVjdHM6OCx0YWdzOiJmaWdtYSwgYnJhbmQiLG5vdGVzOiJQYXJ0LXRpbWUifSx7aWQ6MyxuYW1lOiJDaGFybGllIERhdmlzIixyb2xlOiJNYW5hZ2VyIixkZXBhcnRtZW50OiJPcHMiLGVtYWlsOiJjaGFybGllQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTEzIixsb2NhdGlvbjoiTG9uZG9uIixzdGF0dXM6Ik9uIExlYXZlIixjcmVhdGVkQXQ6IjIwMjEtMDQtMjEiLHVwZGF0ZWRBdDoiMjAyNC0wMi0xNSIsbGFzdExvZ2luOiIyMDI0LTA4LTEyIixwcm9qZWN0czozLHRhZ3M6InNyZSwgbGVhZGVyc2hpcCIsbm90ZXM6IiJ9LHtpZDo0LG5hbWU6IkRpYW5hIE1hcnRpbmV6Iixyb2xlOiJFbmdpbmVlciIsZGVwYXJ0bWVudDoiUGxhdGZvcm0iLGVtYWlsOiJkaWFuYUBjb3JwLmNvbSIscGhvbmU6IisxIDIwMiA1NTUgMDExNCIsbG9jYXRpb246Ik1hZHJpZCIsc3RhdHVzOiJBY3RpdmUiLGNyZWF0ZWRBdDoiMjAyMC0wNi0zMCIsdXBkYXRlZEF0OiIyMDI0LTA2LTI1IixsYXN0TG9naW46IjIwMjQtMTAtMDIiLHByb2plY3RzOjYsdGFnczoibm9kZSwgYXBpIixub3RlczoiT24tY2FsbCJ9LHtpZDo1LG5hbWU6IkV0aGFuIEJyb3duIixyb2xlOiJTdXBwb3J0IixkZXBhcnRtZW50OiJDUyIsZW1haWw6ImV0aGFuQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTE1Iixsb2NhdGlvbjoiUm9tZSIsc3RhdHVzOiJJbmFjdGl2ZSIsY3JlYXRlZEF0OiIyMDE5LTA5LTE4Iix1cGRhdGVkQXQ6IjIwMjQtMDMtMDkiLGxhc3RMb2dpbjoiMjAyNC0wNi0xOSIscHJvamVjdHM6Mix0YWdzOiJ6ZW5kZXNrIixub3RlczoiUmVoaXJlIn0se2lkOjYsbmFtZToiRmlvbmEgQ2xhcmsiLHJvbGU6IlFBIixkZXBhcnRtZW50OiJRQSIsZW1haWw6ImZpb25hQGNvcnAuY29tIixwaG9uZToiKzEgMjAyIDU1NSAwMTE2Iixsb2NhdGlvbjoiVmllbm5hIixzdGF0dXM6IkFjdGl2ZSIsY3JlYXRlZEF0OiIyMDIyLTAzLTE0Iix1cGRhdGVkQXQ6IjIwMjQtMDMtMDEiLGxhc3RMb2dpbjoiMjAyNC0wOS0wNyIscHJvamVjdHM6Nyx0YWdzOiJwbGF5d3JpZ2h0Iixub3RlczoiIn1dfQogICAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IixpY29uTmFtZToibHVjaWRlOmV5ZSIsdHlwZTpbImluUm93IiwiY29udGV4dG1lbnUiXSxhY3Rpb25GdW5jOmFzeW5jKHtpdGVtOnR9KT0+e2NvbnNvbGUubG9nKCJ2aWV3Iix0KX19LHtuYW1lOiJFZGl0IixpY29uTmFtZToibHVjaWRlOmVkaXQiLHR5cGU6WyJpblJvdyIsImNvbnRleHRtZW51Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygiZWRpdCIsdCl9fSx7bmFtZToiRGVsZXRlIixpY29uTmFtZToibHVjaWRlOnRyYXNoIix0eXBlOlsiaW5Sb3ciLCJjb250ZXh0bWVudSJdLGFjdGlvbkZ1bmM6YXN5bmMoe2l0ZW06dH0pPT57Y29uc29sZS5sb2coImRlbGV0ZSIsdCl9fSx7bmFtZToiTWVzc2FnZSIsaWNvbk5hbWU6Imx1Y2lkZTptZXNzYWdlLXNxdWFyZSIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygibWVzc2FnZSIsdCl9fSx7bmFtZToiSGlzdG9yeSIsaWNvbk5hbWU6Imx1Y2lkZTpjbG9jayIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pntjb25zb2xlLmxvZygiaGlzdG9yeSIsdCl9fSx7bmFtZToiQWRkIE5ldyIsaWNvbk5hbWU6Imx1Y2lkZTpwbHVzIix0eXBlOlsiaGVhZGVyIl0sYWN0aW9uRnVuYzphc3luYyh7dGFibGU6dH0pPT57Y29uc29sZS5sb2coImFkZCIpfX0se25hbWU6IkV4cG9ydCBDU1YiLGljb25OYW1lOiJsdWNpZGU6ZG93bmxvYWQiLHR5cGU6WyJoZWFkZXIiXSxhY3Rpb25GdW5jOmFzeW5jKHt0YWJsZTp0fSk9Pntjb25zb2xlLmxvZygiZXhwb3J0Iil9fSx7bmFtZToiQnVsayBEZWxldGUiLGljb25OYW1lOiJsdWNpZGU6dHJhc2gtMiIsdHlwZTpbImZvb3RlciJdLGFjdGlvbkZ1bmM6YXN5bmMoe3RhYmxlOnR9KT0+e2NvbnNvbGUubG9nKCJidWxrIGRlbGV0ZSIpfX1dfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNjcm9sbGFibGUgU21hbGwgSGVpZ2h0PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+U2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggbWFueSBpdGVtcyBhbmQgYSBzbWFsbCBmaXhlZCBoZWlnaHQgdG8gZm9yY2UgdmVydGljYWwgc2Nyb2xsaW5nIGluc2lkZSB0aGUgdGFibGUuIEFjdGlvbnMgcmVtYWluIHZpc2libGUgb24gdGhlIHJpZ2h0OyBob3Jpem9udGFsIHNjcm9sbCBhcHBlYXJzIGlmIG5lZWRlZC48L3A+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgI3Njcm9sbFNtYWxsSGVpZ2h0IHsgLS10YWJsZS1tYXgtaGVpZ2h0OiAyNDBweDsgfQogICAgICAgIDwvc3R5bGU+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzY3JvbGxTbWFsbEhlaWdodCIKICAgICAgICAgIC5zdGlja3lIZWFkZXI9JHshMH0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7W3trZXk6ImlkIixoZWFkZXI6IklEIixzb3J0YWJsZTohMH0se2tleToibmFtZSIsaGVhZGVyOiJOYW1lIixzb3J0YWJsZTohMH0se2tleToicm9sZSIsaGVhZGVyOiJSb2xlIixzb3J0YWJsZTohMH0se2tleToiZGVwYXJ0bWVudCIsaGVhZGVyOiJEZXBhcnRtZW50Iixzb3J0YWJsZTohMH0se2tleToiZW1haWwiLGhlYWRlcjoiRW1haWwifSx7a2V5OiJwaG9uZSIsaGVhZGVyOiJQaG9uZSJ9LHtrZXk6ImxvY2F0aW9uIixoZWFkZXI6IkxvY2F0aW9uIixzb3J0YWJsZTohMH0se2tleToic3RhdHVzIixoZWFkZXI6IlN0YXR1cyIsc29ydGFibGU6ITB9LHtrZXk6ImNyZWF0ZWRBdCIsaGVhZGVyOiJDcmVhdGVkIixzb3J0YWJsZTohMH0se2tleToidXBkYXRlZEF0IixoZWFkZXI6IlVwZGF0ZWQiLHNvcnRhYmxlOiEwfSx7a2V5OiJsYXN0TG9naW4iLGhlYWRlcjoiTGFzdCBMb2dpbiIsc29ydGFibGU6ITB9LHtrZXk6InByb2plY3RzIixoZWFkZXI6IlByb2plY3RzIn0se2tleToidGFncyIsaGVhZGVyOiJUYWdzIn0se2tleToibm90ZXMiLGhlYWRlcjoiTm90ZXMifV19CiAgICAgICAgICAuZGF0YT0ke0FycmF5LmZyb20oe2xlbmd0aDoxMDB9LCh0LGUpPT4oe2lkOmUrMSxuYW1lOmBVc2VyICR7ZSsxfWAscm9sZTpbIkVuZ2luZWVyIiwiRGVzaWduZXIiLCJNYW5hZ2VyIiwiUUEiLCJTdXBwb3J0Il1bZSU1XSxkZXBhcnRtZW50OlsiUiZEIiwiRGVzaWduIiwiT3BzIiwiUUEiLCJDUyJdW2UlNV0sZW1haWw6YHVzZXIke2UrMX1AY29ycC5jb21gLHBob25lOmArMSAyMDIgNTU1ICR7U3RyaW5nKDFlMytlKS5zbGljZSgtNCl9YCxsb2NhdGlvbjpbIkJlcmxpbiIsIlBhcmlzIiwiTG9uZG9uIiwiTWFkcmlkIiwiUm9tZSJdW2UlNV0sc3RhdHVzOlsiQWN0aXZlIiwiSW5hY3RpdmUiLCJPbiBMZWF2ZSJdW2UlM10sY3JlYXRlZEF0OmAyMDIzLSR7U3RyaW5nKGUlMTIrMSkucGFkU3RhcnQoMiwiMCIpfS0ke1N0cmluZyhlJTI4KzEpLnBhZFN0YXJ0KDIsIjAiKX1gLHVwZGF0ZWRBdDpgMjAyNC0ke1N0cmluZygoZSszKSUxMisxKS5wYWRTdGFydCgyLCIwIil9LSR7U3RyaW5nKChlKzcpJTI4KzEpLnBhZFN0YXJ0KDIsIjAiKX1gLGxhc3RMb2dpbjpgMjAyNC0ke1N0cmluZygoZSs2KSUxMisxKS5wYWRTdGFydCgyLCIwIil9LSR7U3RyaW5nKChlKzEwKSUyOCsxKS5wYWRTdGFydCgyLCIwIil9YCxwcm9qZWN0czplJTEyLHRhZ3M6ZSUyPyJ0eXBlc2NyaXB0IjoiZGVzaWduIixub3RlczplJTM/IiI6Ik5vdGUifSkpfQogICAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IixpY29uTmFtZToibHVjaWRlOmV5ZSIsdHlwZTpbImluUm93Il0sYWN0aW9uRnVuYzphc3luYyh7aXRlbTp0fSk9Pnt9fSx7bmFtZToiRWRpdCIsaWNvbk5hbWU6Imx1Y2lkZTplZGl0Iix0eXBlOlsiaW5Sb3ciXSxhY3Rpb25GdW5jOmFzeW5jKHtpdGVtOnR9KT0+e319LHtuYW1lOiJEZWxldGUiLGljb25OYW1lOiJsdWNpZGU6dHJhc2giLHR5cGU6WyJpblJvdyJdLGFjdGlvbkZ1bmM6YXN5bmMoe2l0ZW06dH0pPT57fX1dfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgcXV0LFZ1dD1iKCgpPT57dWUoKTtwYSgpO1ZlKCk7cXV0PVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBtaW4taGVpZ2h0OiA2NHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuaGVhZGluZ0NvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nMSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICB9CgogICAgICAuaGVhZGluZ1NlcGFyYXRpb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb25zIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5oZWFkZXJBY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiBsZXQgc2VhcmNoIG1vZGUgc2l6ZSB0byBjb250ZW50IChubyBmb3JjZWQgd2lkdGgpICovCgogICAgICAuc2VhcmNoR3JpZC5oaWRkZW4gewogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiAwcHggMjRweDsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7CiAgICAgIH0KCiAgICAgIC50YWJsZVNjcm9sbCB7CiAgICAgICAgLyogZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsIG9ubHkgd2hlbiBjb250ZW50IGV4Y2VlZHMgd2lkdGggKi8KICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIC8qIHByZXZlbnQgdmVydGljYWwgc2Nyb2xsIGluc2lkZSB0aGUgdGFibGUgY29udGFpbmVyICovCiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIC8qIGF2b2lkIHJlc2VydmluZyBleHRyYSBzcGFjZSBmb3IgY2xhc3NpYyBzY3JvbGxiYXJzIHdoZXJlIHBvc3NpYmxlICovCiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7CiAgICAgIH0KICAgICAgLyogSGlkZSBob3Jpem9udGFsIHNjcm9sbGJhciBlbnRpcmVseSB3aGVuIG5vdCB1c2luZyBzdGlja3kgaGVhZGVyICovCiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7IC8qIElFL0VkZ2UgKi8KICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7ICAgLyogRmlyZWZveCAoaGlkZXMgYm90aCBheGVzKSAqLwogICAgICB9CiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsgLyogQ2hyb21lL1NhZmFyaSAqLwogICAgICB9CiAgICAgIC8qIEluIHN0aWNreS1oZWFkZXIgbW9kZSwgaGlkZSBvbmx5IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBpbiBXZWJLaXQvQmxpbmsgKi8KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyOmhvcml6b250YWwgewogICAgICAgIGhlaWdodDogMHB4OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICBtYXgtaGVpZ2h0OiB2YXIoLS10YWJsZS1tYXgtaGVpZ2h0LCAzNjBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICAvKiBhbGxvdyB0YWJsZSB0byBncm93IHdpZGVyIHRoYW4gY29udGFpbmVyIHNvIGFjdGlvbnMgY29sdW1uIGNhbiBzdGljayAqLwogICAgICAgIHdpZHRoOiBtYXgtY29udGVudDsKICAgICAgICBtaW4td2lkdGg6IDEwMCU7CiAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ub0RhdGFTZXQgewogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgdGhlYWQgdGggewogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyIHsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAvKiBEZWZhdWx0IGhvcml6b250YWwgbGluZXMgKGJvdHRvbSBib3JkZXIgb25seSkgKi8KICAgICAgdGJvZHkgdHIgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsImhzbCgwIDAlIDE0LjklIC8gMC41KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogQ29sdW1uIGhvdmVyIGVmZmVjdCBmb3IgYmV0dGVyIHRyYWNlYWJpbGl0eSAqLwogICAgICB0ZCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICB0ZDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC4zKSIsImhzbCgwIDAlIDE0LjklIC8gMC4zKSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgfQogICAgICAKICAgICAgdGQ6aG92ZXI6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAvKiBHcmlkIG1vZGUgLSBzaG93cyBib3RoIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGxpbmVzICovCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoOmZpcnN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAvKiBTdGlja3kgQWN0aW9ucyBjb2x1bW4gKHJpZ2h0IHBpbm5lZCkgKi8KICAgICAgdGhlYWQgdGguYWN0aW9uc0NvbCwKICAgICAgdGJvZHkgdGQuYWN0aW9uc0NvbCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIHRib2R5IHRyLmhhc0F0dGFjaG1lbnQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpIiwiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRoIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoOmZpcnN0LWNoaWxkLAogICAgICB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICB0aDpsYXN0LWNoaWxkLAogICAgICB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRoOmxhc3QtY2hpbGQsCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICB9CiAgICAgIAogICAgICAuaW5uZXJDZWxsQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfQogICAgICB0ZCBpbnB1dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNHB4OwogICAgICAgIGJvdHRvbTogNHB4OwogICAgICAgIGxlZnQ6IDIwcHg7CiAgICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgICB9CiAgICAgIAogICAgICB0ZCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjIpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTEuOCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuYWN0aW9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNTJweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWJsZVN0YXRpc3RpY3MgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQogIGBdfSk7ZnVuY3Rpb24gaVYodCxlKXtpZighZXx8ZS5sZW5ndGg9PT0wKXJldHVybltdO2xldCBhPXQoZVswXSk7cmV0dXJuIE9iamVjdC5rZXlzKGEpLm1hcChyPT4oe2tleTpyLGhlYWRlcjpyLHZhbHVlOnM9PnQocylbcl19KSl9ZnVuY3Rpb24ganV0KHQsZSxhLGkpe2xldCByPSh0fHxbXSkuc2xpY2UoKTtpZighZSlyZXR1cm4gcjtsZXQgcz1pVihhLGkpLG49bmV3IFNldChyLm1hcChvPT5TdHJpbmcoby5rZXkpKSk7Zm9yKGxldCBvIG9mIHMpbi5oYXMoU3RyaW5nKG8ua2V5KSl8fHIucHVzaChvKTtyZXR1cm4gcn1mdW5jdGlvbiBObCh0LGUsYSl7cmV0dXJuIGUudmFsdWU/ZS52YWx1ZSh0KTp0W2Uua2V5XX1mdW5jdGlvbiBVdXQodCxlLGEsaSxyLHMsbj0idGFibGUiLG8pe2xldCBkPXQuc2xpY2UoKSxjPShyfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCkscD1zfHx7fSxsPU9iamVjdC5rZXlzKHApLmZpbHRlcih5PT4ocFt5XT8/IiIpLnRyaW0oKS5sZW5ndGg+MCk7aWYoKGN8fGwubGVuZ3RoPjApJiYoZD1kLmZpbHRlcih5PT57Zm9yKGxldCB2IG9mIGwpaWYobj09PSJkYXRhIil7bGV0IG09eVt2XSx4PVN0cmluZyhtPz8iIikudG9Mb3dlckNhc2UoKSxNPVN0cmluZyhwW3ZdKS50b0xvd2VyQ2FzZSgpO2lmKCF4LmluY2x1ZGVzKE0pKXJldHVybiExfWVsc2V7bGV0IG09ZS5maW5kKEY9PlN0cmluZyhGLmtleSk9PT12KTtpZighbXx8bS5oaWRkZW58fG0uZmlsdGVyYWJsZT09PSExKWNvbnRpbnVlO2xldCB4PU5sKHksbSksTT1TdHJpbmcoeD8/IiIpLnRvTG93ZXJDYXNlKCksUz1TdHJpbmcocFt2XSkudG9Mb3dlckNhc2UoKTtpZighTS5pbmNsdWRlcyhTKSlyZXR1cm4hMX1pZihjKXtpZihvKXJldHVybiEhbyh5KTtsZXQgdj0hMTtpZihuPT09ImRhdGEiKXtmb3IobGV0IG0gb2YgT2JqZWN0LnZhbHVlcyh5KSlpZihTdHJpbmcobT8/IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYykpe3Y9ITA7YnJlYWt9fWVsc2UgZm9yKGxldCBtIG9mIGUpe2lmKG0uaGlkZGVuKWNvbnRpbnVlO2xldCB4PU5sKHksbSk7aWYoU3RyaW5nKHg/PyIiKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGMpKXt2PSEwO2JyZWFrfX1pZighdilyZXR1cm4hMX1yZXR1cm4hMH0pKSwhYXx8IWkpcmV0dXJuIGQ7bGV0IGY9ZS5maW5kKHk9PlN0cmluZyh5LmtleSk9PT1hKTtpZighZilyZXR1cm4gZDtsZXQgZz1pPT09ImFzYyI/MTotMTtyZXR1cm4gZC5zb3J0KCh5LHYpPT57bGV0IG09TmwoeSxmKSx4PU5sKHYsZik7aWYobT09bnVsbCYmeD09bnVsbClyZXR1cm4gMDtpZihtPT1udWxsKXJldHVybi0xKmc7aWYoeD09bnVsbClyZXR1cm4gMSpnO2lmKHR5cGVvZiBtPT0ibnVtYmVyIiYmdHlwZW9mIHg9PSJudW1iZXIiKXJldHVybihtLXgpKmc7bGV0IE09U3RyaW5nKG0pLnRvTG93ZXJDYXNlKCksUz1TdHJpbmcoeCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gTTxTPy0xKmc6TT5TPzEqZzowfSksZH12YXIgV3V0PWIoKCk9Pnt9KTtmdW5jdGlvbiBYeCh0KXtyZXR1cm4gdC5zdGFydHNXaXRoKCciJykmJnQuZW5kc1dpdGgoJyInKXx8dC5zdGFydHNXaXRoKCInIikmJnQuZW5kc1dpdGgoIiciKT90LnNsaWNlKDEsLTEpOnR9ZnVuY3Rpb24gbVV0KHQpe3JldHVybiB0LnNwbGl0KC9ccytPUlxzKy9pKS5tYXAoZT0+ZS50cmltKCkpLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBnVXQodCl7cmV0dXJuIHQuc3BsaXQoL1xzK0FORFxzKy9pKS5tYXAoZT0+ZS50cmltKCkpLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBiVXQodCl7aWYoIXQpcmV0dXJuIG51bGw7bGV0IGU9ITEsYT10Lm1hdGNoKC9eXHMqKE5PVFxzK3wtKVxzKiguKikkL2kpO2EmJihlPSEwLHQ9YVsyXSk7bGV0IGk9dC5tYXRjaCgvXihbXjpcc10rKVxzKjpccypcWyguKj8pXHMrVE9ccysoLio/KVxdJC9pKTtpZihpKXJldHVybntmaWVsZDppWzFdLG5lZ2F0ZTplLHJhbmdlOntsb3dlcjpYeChpWzJdKS50b0xvd2VyQ2FzZSgpLHVwcGVyOlh4KGlbM10pLnRvTG93ZXJDYXNlKCksaW5jbHVzaXZlOiEwfX07bGV0IHI9dC5tYXRjaCgvXihbXjpcc10rKVxzKjpccyooIlteIl0qInwnW14nXSonfFteIidcc10rKSQvKTtyZXR1cm4gcj97ZmllbGQ6clsxXSx2YWx1ZTpYeChyWzJdKS50b0xvd2VyQ2FzZSgpLG5lZ2F0ZTplfTp0Lmxlbmd0aD4wP3t2YWx1ZTpYeCh0KS50b0xvd2VyQ2FzZSgpLG5lZ2F0ZTplfTpudWxsfWZ1bmN0aW9uIHZVdCh0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT1tVXQodCkubWFwKGE9Pih7dGVybXM6Z1V0KGEpLm1hcChiVXQpLmZpbHRlcihyPT4hIXImJiEhci52YWx1ZSl9KSkuZmlsdGVyKGE9PmEudGVybXMubGVuZ3RoPjApO3JldHVybiBlLmxlbmd0aD09PTA/bnVsbDp7Y2xhdXNlczplfX1mdW5jdGlvbiBHdXQodCxlLGEpe2xldCBpPXZVdCh0KTtpZighaSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgTWFwKGEubWFwKGQ9PltTdHJpbmcoZC5rZXkpLGRdKSkscz0oZCxjKT0+ZDxjPy0xOmQ+Yz8xOjAsbj1kPT57bGV0IGM9U3RyaW5nKGQ/PyIiKS50b0xvd2VyQ2FzZSgpLHA9TnVtYmVyKGMpLGw9RGF0ZS5wYXJzZShjKTtyZXR1cm4hTnVtYmVyLmlzTmFOKHApJiZjLnRyaW0oKSE9PSIiP3t0OiJuIix2OnB9Ok51bWJlci5pc05hTihsKT97dDoicyIsdjpjfTp7dDoiZCIsdjpsfX0sbz0oZCxjLHApPT57bGV0IGw9bihkKSxmPW4oYyksZz1uKHApO2lmKGwudD09PSJzIiYmZi50PT09InMiJiZnLnQ9PT0icyIpe2xldCB2PWwudjtyZXR1cm4gcyh2LGYudik+PTAmJnModixnLnYpPD0wfWlmKGwudD09PSJuIiYmZi50PT09Im4iJiZnLnQ9PT0ibiIpe2xldCB2PWwudjtyZXR1cm4gdj49Zi52JiZ2PD1nLnZ9aWYobC50PT09ImQiJiZmLnQ9PT0iZCImJmcudD09PSJkIil7bGV0IHY9bC52O3JldHVybiB2Pj1mLnYmJnY8PWcudn1sZXQgeT1TdHJpbmcoZD8/IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHMoeSxjKT49MCYmcyh5LHApPD0wfTtyZXR1cm4gZD0+e2ZvcihsZXQgYyBvZiBpLmNsYXVzZXMpe2xldCBwPSEwO2ZvcihsZXQgbCBvZiBjLnRlcm1zKXtsZXQgZj0hMTtpZihsLnJhbmdlJiZsLmZpZWxkKWlmKGU9PT0iZGF0YSIpZj1vKGRbbC5maWVsZF0sbC5yYW5nZS5sb3dlcixsLnJhbmdlLnVwcGVyKTtlbHNle2xldCBnPXIuZ2V0KGwuZmllbGQpO2lmKCFnfHxnLmhpZGRlbilmPSExO2Vsc2V7bGV0IHk9Zy52YWx1ZT9nLnZhbHVlKGQpOmRbZy5rZXldO2Y9byh5LGwucmFuZ2UubG93ZXIsbC5yYW5nZS51cHBlcil9fWVsc2UgaWYobC5maWVsZCYmbC52YWx1ZSE9bnVsbClpZihlPT09ImRhdGEiKWY9U3RyaW5nKGRbbC5maWVsZF0/PyIiKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGwudmFsdWUpO2Vsc2V7bGV0IGc9ci5nZXQobC5maWVsZCk7aWYoIWd8fGcuaGlkZGVuPT09ITApZj0hMTtlbHNle2xldCB5PWcudmFsdWU/Zy52YWx1ZShkKTpkW2cua2V5XTtmPVN0cmluZyh5Pz8iIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsLnZhbHVlKX19ZWxzZSBsLnZhbHVlIT1udWxsJiYoZT09PSJkYXRhIj9mPU9iamVjdC52YWx1ZXMoZCkuc29tZShnPT5TdHJpbmcoZz8/IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobC52YWx1ZSkpOmY9YS5zb21lKGc9PntpZihnLmhpZGRlbilyZXR1cm4hMTtsZXQgeT1nLnZhbHVlP2cudmFsdWUoZCk6ZFtnLmtleV07cmV0dXJuIFN0cmluZyh5Pz8iIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsLnZhbHVlKX0pKTtpZihsLm5lZ2F0ZSYmKGY9IWYpLCFmKXtwPSExO2JyZWFrfX1pZihwKXJldHVybiEwfXJldHVybiExfX12YXIgWXV0PWIoKCk9Pnt9KTt2YXIgYTEsS2UsS3gsYVY9YigoKT0+e3MyKCk7SHV0KCk7dWUoKTtuMigpO0x0KCk7RXQoKTtWdXQoKTtXdXQoKTtZdXQoKTtWZSgpO2ExPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sS2U9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LEt4PSgoKT0+e2xldCB0PVtwZSgiZGVlcy10YWJsZSIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdLFYsUj1bXSxVPVtdLHJlLGo9W10sbWU9W10sd2UsSD1bXSxjZT1bXSxrZSxXPVtdLEQ9W10sTyxaPVtdLFk9W10sb2UsZ2U9W10sYmU9W10sJGUsQj1bXSxQPVtdLEosZmU9W10sZGU9W10sX2UsaGU9W10sdGU9W10semUsRmU9W10sR2U9W10seWUsZWU9W10sYWU9W10sdmUsUGU9W10samU9W10sd3Qsb3Q9W10sJHQ9W10sS3QsaWU9W10sc2U9W10sVGUsbHQ9W10sY3Q9W10sbTEsYWk9W10sdHM9W10sYXMsSWU9W10sWmU9W10sJDEseDI9W10sSTI9W10saWEsTjI9W10sc249W10sbm4sb249W10sS2w9W107dmFyIFFsPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTWU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpBcnJheX0pXSx5PVtJKHt0eXBlOlN0cmluZ30pXSx4PVtJKHt0eXBlOlN0cmluZ30pXSxGPVtJKHt0eXBlOkJvb2xlYW59KV0sTj1bSSh7dHlwZTpCb29sZWFufSldLHE9W0koe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sRT1bSSh7dHlwZTpCb29sZWFufSldLFY9W0koe3R5cGU6QXJyYXl9KV0scmU9W0koe2F0dHJpYnV0ZTohMX0pXSx3ZT1bSSh7YXR0cmlidXRlOiExfSldLGtlPVtJKHt0eXBlOkJvb2xlYW59KV0sTz1bSSh7YXR0cmlidXRlOiExfSldLG9lPVtJKHthdHRyaWJ1dGU6ITF9KV0sJGU9W0koe3R5cGU6T2JqZWN0fSldLEo9W0koe3R5cGU6QXJyYXl9KV0sX2U9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic2hvdy12ZXJ0aWNhbC1saW5lcyJ9KV0semU9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic2hvdy1ob3Jpem9udGFsLWxpbmVzIn0pXSx5ZT1bSSh7dHlwZTpCb29sZWFuLHJlZmxlY3Q6ITAsYXR0cmlidXRlOiJzaG93LWdyaWQifSldLHZlPVtJKHthdHRyaWJ1dGU6ITF9KV0sd3Q9W0koe2F0dHJpYnV0ZTohMX0pXSxLdD1bSSh7dHlwZTpTdHJpbmd9KV0sVGU9W0koe2F0dHJpYnV0ZTohMX0pXSxtMT1bSSh7dHlwZTpCb29sZWFuLGF0dHJpYnV0ZToic2hvdy1jb2x1bW4tZmlsdGVycyJ9KV0sYXM9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToic3RpY2t5LWhlYWRlciJ9KV0sJDE9W0koe3R5cGU6U3RyaW5nfSldLGlhPVtJKHt0eXBlOlN0cmluZ30pXSxubj1bSSh7YXR0cmlidXRlOiExfSldLGExKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZzEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4iaGVhZGluZzEiaW4gbGUsZ2V0OmxlPT5sZS5oZWFkaW5nMSxzZXQ6KGxlLERlKT0+e2xlLmhlYWRpbmcxPURlfX0sbWV0YWRhdGE6TWV9LG4sbyksYTEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoZWFkaW5nMiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJoZWFkaW5nMiJpbiBsZSxnZXQ6bGU9PmxlLmhlYWRpbmcyLHNldDoobGUsRGUpPT57bGUuaGVhZGluZzI9RGV9fSxtZXRhZGF0YTpNZX0sYyxwKSxhMSh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4iZGF0YSJpbiBsZSxnZXQ6bGU9PmxlLmRhdGEsc2V0OihsZSxEZSk9PntsZS5kYXRhPURlfX0sbWV0YWRhdGE6TWV9LGYsZyksYTEodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJrZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4ia2V5ImluIGxlLGdldDpsZT0+bGUua2V5LHNldDoobGUsRGUpPT57bGUua2V5PURlfX0sbWV0YWRhdGE6TWV9LHYsbSksYTEodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJsYWJlbCJpbiBsZSxnZXQ6bGU9PmxlLmxhYmVsLHNldDoobGUsRGUpPT57bGUubGFiZWw9RGV9fSxtZXRhZGF0YTpNZX0sTSxTKSxhMSh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpc2FibGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+ImRpc2FibGVkImluIGxlLGdldDpsZT0+bGUuZGlzYWJsZWQsc2V0OihsZSxEZSk9PntsZS5kaXNhYmxlZD1EZX19LG1ldGFkYXRhOk1lfSxfLGspLGExKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicmVxdWlyZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4icmVxdWlyZWQiaW4gbGUsZ2V0OmxlPT5sZS5yZXF1aXJlZCxzZXQ6KGxlLERlKT0+e2xlLnJlcXVpcmVkPURlfX0sbWV0YWRhdGE6TWV9LEwsQSksYTEodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRhTmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJkYXRhTmFtZSJpbiBsZSxnZXQ6bGU9PmxlLmRhdGFOYW1lLHNldDoobGUsRGUpPT57bGUuZGF0YU5hbWU9RGV9fSxtZXRhZGF0YTpNZX0sQyx6KSxhMSh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlYXJjaGFibGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4ic2VhcmNoYWJsZSJpbiBsZSxnZXQ6bGU9PmxlLnNlYXJjaGFibGUsc2V0OihsZSxEZSk9PntsZS5zZWFyY2hhYmxlPURlfX0sbWV0YWRhdGE6TWV9LFQsJCksYTEodGhpcyxudWxsLFYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkYXRhQWN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJkYXRhQWN0aW9ucyJpbiBsZSxnZXQ6bGU9PmxlLmRhdGFBY3Rpb25zLHNldDoobGUsRGUpPT57bGUuZGF0YUFjdGlvbnM9RGV9fSxtZXRhZGF0YTpNZX0sUixVKSxhMSh0aGlzLG51bGwscmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2x1bW5zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+ImNvbHVtbnMiaW4gbGUsZ2V0OmxlPT5sZS5jb2x1bW5zLHNldDoobGUsRGUpPT57bGUuY29sdW1ucz1EZX19LG1ldGFkYXRhOk1lfSxqLG1lKSxhMSh0aGlzLG51bGwsd2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb3dLZXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4icm93S2V5ImluIGxlLGdldDpsZT0+bGUucm93S2V5LHNldDoobGUsRGUpPT57bGUucm93S2V5PURlfX0sbWV0YWRhdGE6TWV9LEgsY2UpLGExKHRoaXMsbnVsbCxrZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+ImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uImluIGxlLGdldDpsZT0+bGUuYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sc2V0OihsZSxEZSk9PntsZS5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbj1EZX19LG1ldGFkYXRhOk1lfSxXLEQpLGExKHRoaXMsbnVsbCxPLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlzcGxheUZ1bmN0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+ImRpc3BsYXlGdW5jdGlvbiJpbiBsZSxnZXQ6bGU9PmxlLmRpc3BsYXlGdW5jdGlvbixzZXQ6KGxlLERlKT0+e2xlLmRpc3BsYXlGdW5jdGlvbj1EZX19LG1ldGFkYXRhOk1lfSxaLFkpLGExKHRoaXMsbnVsbCxvZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJldmVyc2VEaXNwbGF5RnVuY3Rpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4icmV2ZXJzZURpc3BsYXlGdW5jdGlvbiJpbiBsZSxnZXQ6bGU9PmxlLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sc2V0OihsZSxEZSk9PntsZS5yZXZlcnNlRGlzcGxheUZ1bmN0aW9uPURlfX0sbWV0YWRhdGE6TWV9LGdlLGJlKSxhMSh0aGlzLG51bGwsJGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZERhdGFSb3ciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4ic2VsZWN0ZWREYXRhUm93ImluIGxlLGdldDpsZT0+bGUuc2VsZWN0ZWREYXRhUm93LHNldDoobGUsRGUpPT57bGUuc2VsZWN0ZWREYXRhUm93PURlfX0sbWV0YWRhdGE6TWV9LEIsUCksYTEodGhpcyxudWxsLEose2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlZGl0YWJsZUZpZWxkcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJlZGl0YWJsZUZpZWxkcyJpbiBsZSxnZXQ6bGU9PmxlLmVkaXRhYmxlRmllbGRzLHNldDoobGUsRGUpPT57bGUuZWRpdGFibGVGaWVsZHM9RGV9fSxtZXRhZGF0YTpNZX0sZmUsZGUpLGExKHRoaXMsbnVsbCxfZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dWZXJ0aWNhbExpbmVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+InNob3dWZXJ0aWNhbExpbmVzImluIGxlLGdldDpsZT0+bGUuc2hvd1ZlcnRpY2FsTGluZXMsc2V0OihsZSxEZSk9PntsZS5zaG93VmVydGljYWxMaW5lcz1EZX19LG1ldGFkYXRhOk1lfSxoZSx0ZSksYTEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd0hvcml6b250YWxMaW5lcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJzaG93SG9yaXpvbnRhbExpbmVzImluIGxlLGdldDpsZT0+bGUuc2hvd0hvcml6b250YWxMaW5lcyxzZXQ6KGxlLERlKT0+e2xlLnNob3dIb3Jpem9udGFsTGluZXM9RGV9fSxtZXRhZGF0YTpNZX0sRmUsR2UpLGExKHRoaXMsbnVsbCx5ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dHcmlkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+InNob3dHcmlkImluIGxlLGdldDpsZT0+bGUuc2hvd0dyaWQsc2V0OihsZSxEZSk9PntsZS5zaG93R3JpZD1EZX19LG1ldGFkYXRhOk1lfSxlZSxhZSksYTEodGhpcyxudWxsLHZlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic29ydEtleSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJzb3J0S2V5ImluIGxlLGdldDpsZT0+bGUuc29ydEtleSxzZXQ6KGxlLERlKT0+e2xlLnNvcnRLZXk9RGV9fSxtZXRhZGF0YTpNZX0sUGUsamUpLGExKHRoaXMsbnVsbCx3dCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNvcnREaXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4ic29ydERpciJpbiBsZSxnZXQ6bGU9PmxlLnNvcnREaXIsc2V0OihsZSxEZSk9PntsZS5zb3J0RGlyPURlfX0sbWV0YWRhdGE6TWV9LG90LCR0KSxhMSh0aGlzLG51bGwsS3Qse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWx0ZXJUZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+ImZpbHRlclRleHQiaW4gbGUsZ2V0OmxlPT5sZS5maWx0ZXJUZXh0LHNldDoobGUsRGUpPT57bGUuZmlsdGVyVGV4dD1EZX19LG1ldGFkYXRhOk1lfSxpZSxzZSksYTEodGhpcyxudWxsLFRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sdW1uRmlsdGVycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJjb2x1bW5GaWx0ZXJzImluIGxlLGdldDpsZT0+bGUuY29sdW1uRmlsdGVycyxzZXQ6KGxlLERlKT0+e2xlLmNvbHVtbkZpbHRlcnM9RGV9fSxtZXRhZGF0YTpNZX0sbHQsY3QpLGExKHRoaXMsbnVsbCxtMSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dDb2x1bW5GaWx0ZXJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+InNob3dDb2x1bW5GaWx0ZXJzImluIGxlLGdldDpsZT0+bGUuc2hvd0NvbHVtbkZpbHRlcnMsc2V0OihsZSxEZSk9PntsZS5zaG93Q29sdW1uRmlsdGVycz1EZX19LG1ldGFkYXRhOk1lfSxhaSx0cyksYTEodGhpcyxudWxsLGFzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RpY2t5SGVhZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpsZT0+InN0aWNreUhlYWRlciJpbiBsZSxnZXQ6bGU9PmxlLnN0aWNreUhlYWRlcixzZXQ6KGxlLERlKT0+e2xlLnN0aWNreUhlYWRlcj1EZX19LG1ldGFkYXRhOk1lfSxJZSxaZSksYTEodGhpcyxudWxsLCQxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VhcmNoTW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJzZWFyY2hNb2RlImluIGxlLGdldDpsZT0+bGUuc2VhcmNoTW9kZSxzZXQ6KGxlLERlKT0+e2xlLnNlYXJjaE1vZGU9RGV9fSxtZXRhZGF0YTpNZX0seDIsSTIpLGExKHRoaXMsbnVsbCxpYSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGlvbk1vZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmxlPT4ic2VsZWN0aW9uTW9kZSJpbiBsZSxnZXQ6bGU9PmxlLnNlbGVjdGlvbk1vZGUsc2V0OihsZSxEZSk9PntsZS5zZWxlY3Rpb25Nb2RlPURlfX0sbWV0YWRhdGE6TWV9LE4yLHNuKSxhMSh0aGlzLG51bGwsbm4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZElkcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bGU9PiJzZWxlY3RlZElkcyJpbiBsZSxnZXQ6bGU9PmxlLnNlbGVjdGVkSWRzLHNldDoobGUsRGUpPT57bGUuc2VsZWN0ZWRJZHM9RGV9fSxtZXRhZGF0YTpNZX0sb24sS2wpLGExKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOk1lfSxudWxsLGEpLFFsPWk9ZS52YWx1ZSxNZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpNZX0pfXN0YXRpYyBkZW1vPUJ1dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkRhdGEgVmlldyJdOyNlPUtlKHRoaXMsbiwiaGVhZGluZyAxIik7Z2V0IGhlYWRpbmcxKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGhlYWRpbmcxKE1lKXt0aGlzLiNlPU1lfSN0PShLZSh0aGlzLG8pLEtlKHRoaXMsYywiaGVhZGluZyAyIikpO2dldCBoZWFkaW5nMigpe3JldHVybiB0aGlzLiN0fXNldCBoZWFkaW5nMihNZSl7dGhpcy4jdD1NZX0jYT0oS2UodGhpcyxwKSxLZSh0aGlzLGYsW10pKTtnZXQgZGF0YSgpe3JldHVybiB0aGlzLiNhfXNldCBkYXRhKE1lKXt0aGlzLiNhPU1lfSNpPShLZSh0aGlzLGcpLEtlKHRoaXMsdix2b2lkIDApKTtnZXQga2V5KCl7cmV0dXJuIHRoaXMuI2l9c2V0IGtleShNZSl7dGhpcy4jaT1NZX0jcj0oS2UodGhpcyxtKSxLZSh0aGlzLE0sdm9pZCAwKSk7Z2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGxhYmVsKE1lKXt0aGlzLiNyPU1lfSNzPShLZSh0aGlzLFMpLEtlKHRoaXMsXywhMSkpO2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLiNzfXNldCBkaXNhYmxlZChNZSl7dGhpcy4jcz1NZX0jbj0oS2UodGhpcyxrKSxLZSh0aGlzLEwsITEpKTtnZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy4jbn1zZXQgcmVxdWlyZWQoTWUpe3RoaXMuI249TWV9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZGF0YX1zZXQgdmFsdWUoTWUpe31jaGFuZ2VTdWJqZWN0PShLZSh0aGlzLEEpLG5ldyB6dC5zbWFydHJ4LnJ4anMuU3ViamVjdCk7I289S2UodGhpcyxDLHZvaWQgMCk7Z2V0IGRhdGFOYW1lKCl7cmV0dXJuIHRoaXMuI299c2V0IGRhdGFOYW1lKE1lKXt0aGlzLiNvPU1lfSNsPShLZSh0aGlzLHopLEtlKHRoaXMsVCwhMCkpO2dldCBzZWFyY2hhYmxlKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHNlYXJjaGFibGUoTWUpe3RoaXMuI2w9TWV9I2M9KEtlKHRoaXMsJCksS2UodGhpcyxSLFtdKSk7Z2V0IGRhdGFBY3Rpb25zKCl7cmV0dXJuIHRoaXMuI2N9c2V0IGRhdGFBY3Rpb25zKE1lKXt0aGlzLiNjPU1lfSNkPShLZSh0aGlzLFUpLEtlKHRoaXMsaixbXSkpO2dldCBjb2x1bW5zKCl7cmV0dXJuIHRoaXMuI2R9c2V0IGNvbHVtbnMoTWUpe3RoaXMuI2Q9TWV9I3A9KEtlKHRoaXMsbWUpLEtlKHRoaXMsSCx2b2lkIDApKTtnZXQgcm93S2V5KCl7cmV0dXJuIHRoaXMuI3B9c2V0IHJvd0tleShNZSl7dGhpcy4jcD1NZX0jaD0oS2UodGhpcyxjZSksS2UodGhpcyxXLCExKSk7Z2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuI2h9c2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKE1lKXt0aGlzLiNoPU1lfSN1PShLZSh0aGlzLEQpLEtlKHRoaXMsWixNZT0+TWUpKTtnZXQgZGlzcGxheUZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuI3V9c2V0IGRpc3BsYXlGdW5jdGlvbihNZSl7dGhpcy4jdT1NZX0jZj0oS2UodGhpcyxZKSxLZSh0aGlzLGdlLE1lPT5NZSkpO2dldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IHJldmVyc2VEaXNwbGF5RnVuY3Rpb24oTWUpe3RoaXMuI2Y9TWV9I209KEtlKHRoaXMsYmUpLEtlKHRoaXMsQix2b2lkIDApKTtnZXQgc2VsZWN0ZWREYXRhUm93KCl7cmV0dXJuIHRoaXMuI219c2V0IHNlbGVjdGVkRGF0YVJvdyhNZSl7dGhpcy4jbT1NZX0jZz0oS2UodGhpcyxQKSxLZSh0aGlzLGZlLFtdKSk7Z2V0IGVkaXRhYmxlRmllbGRzKCl7cmV0dXJuIHRoaXMuI2d9c2V0IGVkaXRhYmxlRmllbGRzKE1lKXt0aGlzLiNnPU1lfSNiPShLZSh0aGlzLGRlKSxLZSh0aGlzLGhlLCExKSk7Z2V0IHNob3dWZXJ0aWNhbExpbmVzKCl7cmV0dXJuIHRoaXMuI2J9c2V0IHNob3dWZXJ0aWNhbExpbmVzKE1lKXt0aGlzLiNiPU1lfSN2PShLZSh0aGlzLHRlKSxLZSh0aGlzLEZlLCExKSk7Z2V0IHNob3dIb3Jpem9udGFsTGluZXMoKXtyZXR1cm4gdGhpcy4jdn1zZXQgc2hvd0hvcml6b250YWxMaW5lcyhNZSl7dGhpcy4jdj1NZX0jeT0oS2UodGhpcyxHZSksS2UodGhpcyxlZSwhMCkpO2dldCBzaG93R3JpZCgpe3JldHVybiB0aGlzLiN5fXNldCBzaG93R3JpZChNZSl7dGhpcy4jeT1NZX1maWxlcz0oS2UodGhpcyxhZSksW10pO2ZpbGVXZWFrTWFwPW5ldyBXZWFrTWFwO2RhdGFDaGFuZ2VTdWJqZWN0PW5ldyB6dC5zbWFydHJ4LnJ4anMuU3ViamVjdDsjeD1LZSh0aGlzLFBlLHZvaWQgMCk7Z2V0IHNvcnRLZXkoKXtyZXR1cm4gdGhpcy4jeH1zZXQgc29ydEtleShNZSl7dGhpcy4jeD1NZX0jdz0oS2UodGhpcyxqZSksS2UodGhpcyxvdCxudWxsKSk7Z2V0IHNvcnREaXIoKXtyZXR1cm4gdGhpcy4jd31zZXQgc29ydERpcihNZSl7dGhpcy4jdz1NZX0jTT0oS2UodGhpcywkdCksS2UodGhpcyxpZSwiIikpO2dldCBmaWx0ZXJUZXh0KCl7cmV0dXJuIHRoaXMuI019c2V0IGZpbHRlclRleHQoTWUpe3RoaXMuI009TWV9I3o9KEtlKHRoaXMsc2UpLEtlKHRoaXMsbHQse30pKTtnZXQgY29sdW1uRmlsdGVycygpe3JldHVybiB0aGlzLiN6fXNldCBjb2x1bW5GaWx0ZXJzKE1lKXt0aGlzLiN6PU1lfSNrPShLZSh0aGlzLGN0KSxLZSh0aGlzLGFpLCExKSk7Z2V0IHNob3dDb2x1bW5GaWx0ZXJzKCl7cmV0dXJuIHRoaXMuI2t9c2V0IHNob3dDb2x1bW5GaWx0ZXJzKE1lKXt0aGlzLiNrPU1lfSNTPShLZSh0aGlzLHRzKSxLZSh0aGlzLEllLCExKSk7Z2V0IHN0aWNreUhlYWRlcigpe3JldHVybiB0aGlzLiNTfXNldCBzdGlja3lIZWFkZXIoTWUpe3RoaXMuI1M9TWV9I0M9KEtlKHRoaXMsWmUpLEtlKHRoaXMseDIsInRhYmxlIikpO2dldCBzZWFyY2hNb2RlKCl7cmV0dXJuIHRoaXMuI0N9c2V0IHNlYXJjaE1vZGUoTWUpe3RoaXMuI0M9TWV9X19zZWFyY2hUZXh0U3ViPUtlKHRoaXMsSTIpO19fc2VhcmNoTW9kZVN1YjsjXz1LZSh0aGlzLE4yLCJub25lIik7Z2V0IHNlbGVjdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy4jX31zZXQgc2VsZWN0aW9uTW9kZShNZSl7dGhpcy4jXz1NZX0jVD0oS2UodGhpcyxzbiksS2UodGhpcyxvbixuZXcgU2V0KSk7Z2V0IHNlbGVjdGVkSWRzKCl7cmV0dXJuIHRoaXMuI1R9c2V0IHNlbGVjdGVkSWRzKE1lKXt0aGlzLiNUPU1lfV9yb3dJZE1hcD0oS2UodGhpcyxLbCksbmV3IFdlYWtNYXApO19yb3dJZENvdW50ZXI9MDtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIHN0eWxlcz1xdXQ7cmVuZGVyKCl7bGV0IGxlPUFycmF5LmlzQXJyYXkodGhpcy5jb2x1bW5zKSYmdGhpcy5jb2x1bW5zLmxlbmd0aD4wP2p1dCh0aGlzLmNvbHVtbnMsdGhpcy5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbix0aGlzLmRpc3BsYXlGdW5jdGlvbix0aGlzLmRhdGEpOmlWKHRoaXMuZGlzcGxheUZ1bmN0aW9uLHRoaXMuZGF0YSksRGU9R3V0KHRoaXMuZmlsdGVyVGV4dCx0aGlzLnNlYXJjaE1vZGU9PT0iZGF0YSI/ImRhdGEiOiJ0YWJsZSIsbGUpLEYxPVV1dCh0aGlzLmRhdGEsbGUsdGhpcy5zb3J0S2V5LHRoaXMuc29ydERpcix0aGlzLmZpbHRlclRleHQsdGhpcy5jb2x1bW5GaWx0ZXJzLHRoaXMuc2VhcmNoTW9kZT09PSJkYXRhIj8iZGF0YSI6InRhYmxlIixEZXx8dm9pZCAwKTtyZXR1cm4gdGhpcy5fbGFzdFZpZXdEYXRhPUYxLHdgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDwhLS0gdGhlIGhlYWRpbmcgcGFydCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZ0NvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzEiPiR7dGhpcy5sYWJlbHx8dGhpcy5oZWFkaW5nMX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMiI+JHt0aGlzLmhlYWRpbmcyfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJBY3Rpb25zIj4KICAgICAgICAgICAgJHtqYS5yZXNvbHZlRXhlYyhhc3luYygpPT57bGV0IHN0PVtdO2ZvcihsZXQgZDEgb2YgdGhpcy5kYXRhQWN0aW9ucylkMS50eXBlPy5pbmNsdWRlcygiaGVhZGVyIikmJnN0LnB1c2god2A8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRlckFjdGlvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+e2QxLmFjdGlvbkZ1bmMoe2l0ZW06dGhpcy5zZWxlY3RlZERhdGFSb3csdGFibGU6dGhpc30pfX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7ZDEuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2QxLmljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAke2QxLm5hbWV9YDpkMS5uYW1lfQogICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtyZXR1cm4gc3R9KX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdTZXBhcmF0aW9uIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hHcmlkIGhpZGRlbiI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJsdWNlbmUgc3ludGF4IHNlYXJjaCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke2AKICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgbHVjZW5lIHN5bnRheCB0byBzZWFyY2ggZm9yIGRhdGEsIGUuZy46CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgbmFtZTogImpvaG4iIEFORCBhZ2U6IDE4CiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIGB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsic2VhcmNoIG1vZGUifQogICAgICAgICAgICAub3B0aW9ucz0ke1sidGFibGUiLCJkYXRhIiwic2VydmVyIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJ0YWJsZSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke2AKICAgICAgICAgICAgICBUaGVyZSBhcmUgdGhyZWUgYmFzaWMgbW9kZXM6CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgKiB0YWJsZTogb25seSBzZWFyY2hlcyBkYXRhIGFscmVhZHkgaW4gdGhlIHRhYmxlCiAgICAgICAgICAgICAgKiBkYXRhOiBzZWFyY2hlcyBvcmlnaW5hbCBkYXRhLCBpZ25vcmluZyB0YWJsZSB0cmFuc2Zvcm1zCiAgICAgICAgICAgICAgKiBzZXJ2ZXI6IHNlYXJjaGVzIGRhdGEgb24gdGhlIHNlcnZlcgogICAgICAgICAgICAgIAogICAgICAgICAgICBgfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSB0aGUgYWN0dWFsIHRhYmxlIC0tPgogICAgICAgIDxzdHlsZT48L3N0eWxlPgogICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aD4wP3dgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlIT09Im5vbmUiP3dgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo0MnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGU9PT0ibXVsdGkiP3dgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmFyZUFsbFZpc2libGVTZWxlY3RlZCgpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5kZXRlcm1pbmF0ZT0ke3RoaXMuaXNWaXNpYmxlU2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbmV3VmFsdWU9JHtzdD0+e3N0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0U2VsZWN0VmlzaWJsZShzdC5kZXRhaWw9PT0hMCl9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOndgYH0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICBgOndgYH0KICAgICAgICAgICAgICAgICAgICAke2xlLmZpbHRlcihzdD0+IXN0LmhpZGRlbikubWFwKHN0PT57bGV0IGQxPSEhc3Quc29ydGFibGUscmE9dGhpcy5nZXRBcmlhU29ydChzdCk7cmV0dXJuIHdgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPSJjb2x1bW5oZWFkZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXNvcnQ9JHtyYX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSIke2QxPyJjdXJzb3I6IHBvaW50ZXI7IjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+ZDE/dGhpcy50b2dnbGVTb3J0KHN0KTpudWxsfQogICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3QuaGVhZGVyPz9zdC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcihzdCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5gfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCk9PntpZih0aGlzLmRhdGFBY3Rpb25zJiZ0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aD4wKXJldHVybiB3YCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzP3dgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUhPT0ibm9uZSI/d2A8dGggc3R5bGU9IndpZHRoOjQycHg7Ij48L3RoPmA6d2BgfQogICAgICAgICAgICAgICAgICAgICAgICAke2xlLmZpbHRlcihzdD0+IXN0LmhpZGRlbikubWFwKHN0PT57bGV0IGQxPVN0cmluZyhzdC5rZXkpO3JldHVybiBzdC5maWx0ZXJhYmxlPT09ITE/d2A8dGg+PC90aD5gOndgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IkZpbHRlci4uLiIgLnZhbHVlPSR7dGhpcy5jb2x1bW5GaWx0ZXJzW2QxXXx8IiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7cmE9PnRoaXMuc2V0Q29sdW1uRmlsdGVyKGQxLHJhLnRhcmdldC52YWx1ZSl9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPmB9KX0KICAgICAgICAgICAgICAgICAgICAgICAgJHsoKCk9PntpZih0aGlzLmRhdGFBY3Rpb25zJiZ0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aD4wKXJldHVybiB3YCA8dGg+PC90aD4gYH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA6d2BgfQogICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgJHtGMS5tYXAoKHN0LGQxKT0+e2xldCByYT10dD0+dHQudGFnTmFtZT09PSJUUiI/dHQ6cmEodHQucGFyZW50RWxlbWVudCk7cmV0dXJuIHdgCiAgICAgICAgICAgICAgICAgICAgICA8dHIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PntpZih0aGlzLnNlbGVjdGVkRGF0YVJvdz1zdCx0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIil7bGV0IHR0PXRoaXMuZ2V0Um93SWQoc3QpO3RoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKSx0aGlzLnNlbGVjdGVkSWRzLmFkZCh0dCksdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9fX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIHR0PT57dHQucHJldmVudERlZmF1bHQoKSx0dC5zdG9wUHJvcGFnYXRpb24oKTtsZXQgajE9cmEodHQudGFyZ2V0KTtzZXRUaW1lb3V0KCgpPT57ajEuY2xhc3NMaXN0LmFkZCgiaGFzQXR0YWNobWVudCIpfSwwKX19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnbGVhdmU9JHthc3luYyB0dD0+e3R0LnByZXZlbnREZWZhdWx0KCksdHQuc3RvcFByb3BhZ2F0aW9uKCkscmEodHQudGFyZ2V0KS5jbGFzc0xpc3QucmVtb3ZlKCJoYXNBdHRhY2htZW50Iil9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXI9JHthc3luYyB0dD0+e3R0LnByZXZlbnREZWZhdWx0KCl9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIHR0PT57dHQucHJldmVudERlZmF1bHQoKTtsZXQgajE9W107Zm9yKGxldCAkaSBvZiBBcnJheS5mcm9tKHR0LmRhdGFUcmFuc2Zlci5maWxlcykpdGhpcy5maWxlcy5wdXNoKCRpKSxqMS5wdXNoKCRpKSx0aGlzLnJlcXVlc3RVcGRhdGUoKTtsZXQgc2E9dGhpcy5maWxlV2Vha01hcC5nZXQoc3QpO3NhP3NhLnB1c2goLi4uajEpOnRoaXMuZmlsZVdlYWtNYXAuc2V0KHN0LGoxKX19CiAgICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0ke2FzeW5jIHR0PT57V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnModHQsdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoajE9Pih7bmFtZTpqMS5uYW1lLGljb25OYW1lOmoxLmljb25OYW1lLGFjdGlvbjphc3luYygpPT4oYXdhaXQgajEuYWN0aW9uRnVuYyh7aXRlbTpzdCx0YWJsZTp0aGlzfSksbnVsbCl9KSkpfX0KICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9IiR7c3Q9PT10aGlzLnNlbGVjdGVkRGF0YVJvdz8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUhPT0ibm9uZSI/d2A8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKHN0KX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbmV3VmFsdWU9JHt0dD0+e3R0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0Um93U2VsZWN0ZWQoc3QsdHQuZGV0YWlsPT09ITApfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YDp3YGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7bGUuZmlsdGVyKHR0PT4hdHQuaGlkZGVuKS5tYXAoKHR0LGoxKT0+e2xldCBzYT1ObChzdCx0dCx0aGlzLmRpc3BsYXlGdW5jdGlvbiksJGk9dHQucmVuZGVyZXI/dHQucmVuZGVyZXIoc2Esc3Qse3Jvd0luZGV4OmQxLGNvbEluZGV4OmoxLGNvbHVtbjp0dH0pOnNhLEpsPVN0cmluZyh0dC5rZXkpO3JldHVybiB3YAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHtkZD0+e2xldCBlYz10aGlzLmRhdGFBY3Rpb25zLmZpbmQocGQ9PnBkLnR5cGU/LmluY2x1ZGVzKCJkb3VibGVDbGljayIpKTt0aGlzLmVkaXRhYmxlRmllbGRzLmluY2x1ZGVzKEpsKT90aGlzLmhhbmRsZUNlbGxFZGl0aW5nKGRkLHN0LEpsKTplYyYmZWMuYWN0aW9uRnVuYyh7aXRlbTpzdCx0YWJsZTp0aGlzfSl9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5uZXJDZWxsQ29udGFpbmVyIj4keyRpfTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYH0pfQogICAgICAgICAgICAgICAgICAgICAgICAkeygoKT0+e2lmKHRoaXMuZGF0YUFjdGlvbnMmJnRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoPjApcmV0dXJuIHdgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYWN0aW9uc0NvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uc0NvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuZ2V0QWN0aW9uc0ZvclR5cGUoImluUm93IikubWFwKHR0PT53YAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dHQuYWN0aW9uRnVuYyh7aXRlbTpzdCx0YWJsZTp0aGlzfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0dC5pY29uTmFtZT93YCA8ZGVlcy1pY29uIC5pY29uPSR7dHQuaWNvbk5hbWV9PjwvZGVlcy1pY29uPiBgOnR0Lm5hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmB9KX0KICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDp3YCA8ZGl2IGNsYXNzPSJub0RhdGFTZXQiPk5vIGRhdGEgc2V0ITwvZGl2PiBgfQogICAgICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZVN0YXRpc3RpY3MiPgogICAgICAgICAgICAke3RoaXMuZGF0YS5sZW5ndGh9ICR7dGhpcy5kYXRhTmFtZXx8ImRhdGEgcm93cyJ9ICh0b3RhbCkgfAogICAgICAgICAgICAke3RoaXMuc2VsZWN0ZWREYXRhUm93P2AjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpKzF9YDoiTm8ifQogICAgICAgICAgICBzZWxlY3RlZAogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJBY3Rpb25zIj4KICAgICAgICAgICAgJHtqYS5yZXNvbHZlRXhlYyhhc3luYygpPT57bGV0IHN0PVtdO2ZvcihsZXQgZDEgb2YgdGhpcy5kYXRhQWN0aW9ucylkMS50eXBlPy5pbmNsdWRlcygiZm9vdGVyIikmJnN0LnB1c2god2A8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZvb3RlckFjdGlvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+e2QxLmFjdGlvbkZ1bmMoe2l0ZW06dGhpcy5zZWxlY3RlZERhdGFSb3csdGFibGU6dGhpc30pfX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7ZDEuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2QxLmljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAke2QxLm5hbWV9YDpkMS5uYW1lfQogICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtyZXR1cm4gc3R9KX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7fWFzeW5jIHVwZGF0ZWQoTWUpe3N1cGVyLnVwZGF0ZWQoTWUpLHRoaXMuZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCksdGhpcy5zZWFyY2hhYmxlJiYodGhpcy5kYXRhQWN0aW9ucy5maW5kKERlPT5EZS50eXBlPy5pbmNsdWRlcygiaGVhZGVyIikmJkRlLm5hbWU9PT0iU2VhcmNoIil8fCh0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoe25hbWU6IlNlYXJjaCIsaWNvbk5hbWU6Imx1Y2lkZTpTZWFyY2giLHR5cGU6WyJoZWFkZXIiXSxhY3Rpb25GdW5jOmFzeW5jKCk9Pntjb25zb2xlLmxvZygib3BlbiBzZWFyY2giKSx0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNlYXJjaEdyaWQiKS5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iKX19KSxjb25zb2xlLmxvZyh0aGlzLmRhdGFBY3Rpb25zKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSksdGhpcy53aXJlU2VhcmNoSW5wdXRzKCkpfV9fZGVib3VuY2VUaW1lcjtkZWJvdW5jZVJ1bihNZSxsZT0yMDApe3RoaXMuX19kZWJvdW5jZVRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5fX2RlYm91bmNlVGltZXIpLHRoaXMuX19kZWJvdW5jZVRpbWVyPXNldFRpbWVvdXQoTWUsbGUpfXdpcmVTZWFyY2hJbnB1dHMoKXtsZXQgTWU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LXRleHQiKSxsZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zZWFyY2hHcmlkIGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKTtNZSYmIXRoaXMuX19zZWFyY2hUZXh0U3ViJiYodGhpcy5fX3NlYXJjaFRleHRTdWI9TWUuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoRGU9PntsZXQgRjE9RGU/LnZhbHVlPz8iIjt0aGlzLmRlYm91bmNlUnVuKCgpPT57dGhpcy5zZWFyY2hNb2RlPT09InNlcnZlciI/dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIse2RldGFpbDp7cXVlcnk6RjEsbW9kZToic2VydmVyIn0sYnViYmxlczohMH0pKTp0aGlzLnNldEZpbHRlclRleHQoRjEpfSl9KSksbGUmJiF0aGlzLl9fc2VhcmNoTW9kZVN1YiYmKHRoaXMuX19zZWFyY2hNb2RlU3ViPWxlLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKERlPT57bGV0IEYxPURlPy5zZWxlY3RlZE9wdGlvbnx8RGU/LnZhbHVlfHwidGFibGUiO2lmKEYxPT09InRhYmxlInx8RjE9PT0iZGF0YSJ8fEYxPT09InNlcnZlciIpe3RoaXMuc2VhcmNoTW9kZT1GMTtsZXQgc3Q9TWU/LnZhbHVlPz8iIjt0aGlzLmRlYm91bmNlUnVuKCgpPT57dGhpcy5zZWFyY2hNb2RlPT09InNlcnZlciI/dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIse2RldGFpbDp7cXVlcnk6c3QsbW9kZToic2VydmVyIn0sYnViYmxlczohMH0pKTp0aGlzLnNldEZpbHRlclRleHQoc3QpfSl9fSkpfWFzeW5jIGRldGVybWluZUNvbHVtbldpZHRocygpe2F3YWl0KGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlKS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApO2xldCBsZT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigidGFibGUiKTtpZighbGUpcmV0dXJuO2xldCBEZT1sZS5yb3dzWzBdLmNlbGxzLEYxPWFzeW5jKHN0LGQxPSExKT0+e2xldCByYT1IZS5kZWZlcigpLHR0PURlW3N0XSxqMT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0dCkud2lkdGg7aWYodHQudGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSl7bGV0IHNhPXRoaXMuZGF0YUFjdGlvbnMuZmlsdGVyKCRpPT4kaS50eXBlPy5pbmNsdWRlcygiaW5Sb3ciKSkubGVuZ3RoKjM2O3R0LnN0eWxlLndpZHRoPWAke01hdGgubWF4KHNhLDY4KX1weGB9ZWxzZSB0dC5zdHlsZS53aWR0aD1qMTtkMSYmKHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JhLnJlc29sdmUoKX0pLGF3YWl0IHJhLnByb21pc2UpfTtEZVtEZS5sZW5ndGgtMV0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSYmYXdhaXQgRjEoRGUubGVuZ3RoLTEsITApO2ZvcihsZXQgc3Q9MDtzdDxEZS5sZW5ndGg7c3QrKylEZVtzdF0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKXx8YXdhaXQgRjEoc3QpO2xlLnN0eWxlLnRhYmxlTGF5b3V0PSJmaXhlZCJ9dG9nZ2xlU29ydChNZSl7bGV0IGxlPVN0cmluZyhNZS5rZXkpO3RoaXMuc29ydEtleSE9PWxlPyh0aGlzLnNvcnRLZXk9bGUsdGhpcy5zb3J0RGlyPSJhc2MiKTp0aGlzLnNvcnREaXI9PT0iYXNjIj90aGlzLnNvcnREaXI9ImRlc2MiOnRoaXMuc29ydERpcj09PSJkZXNjIj8odGhpcy5zb3J0RGlyPW51bGwsdGhpcy5zb3J0S2V5PXZvaWQgMCk6dGhpcy5zb3J0RGlyPSJhc2MiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNvcnRDaGFuZ2UiLHtkZXRhaWw6e2tleTp0aGlzLnNvcnRLZXksZGlyOnRoaXMuc29ydERpcn0sYnViYmxlczohMH0pKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1nZXRBcmlhU29ydChNZSl7cmV0dXJuIFN0cmluZyhNZS5rZXkpIT09dGhpcy5zb3J0S2V5fHwhdGhpcy5zb3J0RGlyPyJub25lIjp0aGlzLnNvcnREaXI9PT0iYXNjIj8iYXNjZW5kaW5nIjoiZGVzY2VuZGluZyJ9cmVuZGVyU29ydEluZGljYXRvcihNZSl7cmV0dXJuIFN0cmluZyhNZS5rZXkpIT09dGhpcy5zb3J0S2V5fHwhdGhpcy5zb3J0RGlyP3dgYDp3YDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDo2cHg7IG9wYWNpdHk6MC43OyI+JHt0aGlzLnNvcnREaXI9PT0iYXNjIj8iXHUyNUIyIjoiXHUyNUJDIn08L3NwYW4+YH1zZXRGaWx0ZXJUZXh0KE1lKXtsZXQgbGU9dGhpcy5maWx0ZXJUZXh0O3RoaXMuZmlsdGVyVGV4dD1NZT8/IiIsbGUhPT10aGlzLmZpbHRlclRleHQmJih0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWx0ZXJDaGFuZ2UiLHtkZXRhaWw6e3RleHQ6dGhpcy5maWx0ZXJUZXh0LGNvbHVtbnM6ey4uLnRoaXMuY29sdW1uRmlsdGVyc319LGJ1YmJsZXM6ITB9KSksdGhpcy5yZXF1ZXN0VXBkYXRlKCkpfXNldENvbHVtbkZpbHRlcihNZSxsZSl7dGhpcy5jb2x1bW5GaWx0ZXJzPXsuLi50aGlzLmNvbHVtbkZpbHRlcnMsW01lXTpsZX0sdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsdGVyQ2hhbmdlIix7ZGV0YWlsOnt0ZXh0OnRoaXMuZmlsdGVyVGV4dCxjb2x1bW5zOnsuLi50aGlzLmNvbHVtbkZpbHRlcnN9fSxidWJibGVzOiEwfSkpLHRoaXMucmVxdWVzdFVwZGF0ZSgpfWdldFJvd0lkKE1lKXtpZih0aGlzLnJvd0tleSlyZXR1cm4gdHlwZW9mIHRoaXMucm93S2V5PT0iZnVuY3Rpb24iP3RoaXMucm93S2V5KE1lKTpTdHJpbmcoTWVbdGhpcy5yb3dLZXldKTtsZXQgbGU9TWU7cmV0dXJuIHRoaXMuX3Jvd0lkTWFwLmhhcyhsZSl8fHRoaXMuX3Jvd0lkTWFwLnNldChsZSxTdHJpbmcoKyt0aGlzLl9yb3dJZENvdW50ZXIpKSx0aGlzLl9yb3dJZE1hcC5nZXQobGUpfWlzUm93U2VsZWN0ZWQoTWUpe3JldHVybiB0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKE1lKSl9dG9nZ2xlUm93U2VsZWN0ZWQoTWUpe2xldCBsZT10aGlzLmdldFJvd0lkKE1lKTt0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIj8odGhpcy5zZWxlY3RlZElkcy5jbGVhcigpLHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGxlKSk6dGhpcy5zZWxlY3Rpb25Nb2RlPT09Im11bHRpIiYmKHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGxlKT90aGlzLnNlbGVjdGVkSWRzLmRlbGV0ZShsZSk6dGhpcy5zZWxlY3RlZElkcy5hZGQobGUpKSx0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1zZXRSb3dTZWxlY3RlZChNZSxsZSl7bGV0IERlPXRoaXMuZ2V0Um93SWQoTWUpO3RoaXMuc2VsZWN0aW9uTW9kZT09PSJzaW5nbGUiPyh0aGlzLnNlbGVjdGVkSWRzLmNsZWFyKCksbGUmJnRoaXMuc2VsZWN0ZWRJZHMuYWRkKERlKSk6dGhpcy5zZWxlY3Rpb25Nb2RlPT09Im11bHRpIiYmKGxlP3RoaXMuc2VsZWN0ZWRJZHMuYWRkKERlKTp0aGlzLnNlbGVjdGVkSWRzLmRlbGV0ZShEZSkpLHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMucmVxdWVzdFVwZGF0ZSgpfWFyZUFsbFZpc2libGVTZWxlY3RlZCgpe2xldCBNZT10aGlzLl9sYXN0Vmlld0RhdGF8fFtdO2lmKE1lLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKGxldCBsZSBvZiBNZSlpZighdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChsZSkpKXJldHVybiExO3JldHVybiEwfWlzVmlzaWJsZVNlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKXtsZXQgTWU9dGhpcy5fbGFzdFZpZXdEYXRhfHxbXTtpZihNZS5sZW5ndGg9PT0wKXJldHVybiExO2xldCBsZT0wO2ZvcihsZXQgRGUgb2YgTWUpdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChEZSkpJiZsZSsrO3JldHVybiBsZT4wJiZsZTxNZS5sZW5ndGh9c2V0U2VsZWN0VmlzaWJsZShNZSl7bGV0IGxlPXRoaXMuX2xhc3RWaWV3RGF0YXx8W107aWYoTWUpZm9yKGxldCBEZSBvZiBsZSl0aGlzLnNlbGVjdGVkSWRzLmFkZCh0aGlzLmdldFJvd0lkKERlKSk7ZWxzZSBmb3IobGV0IERlIG9mIGxlKXRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKHRoaXMuZ2V0Um93SWQoRGUpKTt0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1lbWl0U2VsZWN0aW9uQ2hhbmdlKCl7bGV0IE1lPUFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyksbGU9dGhpcy5kYXRhLmZpbHRlcihEZT0+dGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChEZSkpKTt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLHtkZXRhaWw6e3NlbGVjdGVkSWRzOk1lLHNlbGVjdGVkUm93czpsZX0sYnViYmxlczohMH0pKX1nZXRBY3Rpb25zRm9yVHlwZShNZSl7bGV0IGxlPVtdO2ZvcihsZXQgRGUgb2YgdGhpcy5kYXRhQWN0aW9ucylEZS50eXBlPy5pbmNsdWRlcyhNZSkmJmxlLnB1c2goRGUpO3JldHVybiBsZX1hc3luYyBoYW5kbGVDZWxsRWRpdGluZyhNZSxsZSxEZSl7YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7bGV0IEYxPU1lLnRhcmdldCxzdD1GMS5zdHlsZS5jb2xvcjtGMS5zdHlsZS5jb2xvcj0idHJhbnNwYXJlbnQiO2xldCByYT10aGlzLmRpc3BsYXlGdW5jdGlvbihsZSlbRGVdPz9sZVtEZV0/PyIiLHR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7dHQudHlwZT0idGV4dCIsdHQudmFsdWU9cmE7bGV0IGoxPWFzeW5jKHNhPSEwLCRpPSExKT0+e3NhJiZ0dC5ibHVyKCksJGkmJihsZVtEZV09dHQudmFsdWUsdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcykpLHR0LnJlbW92ZSgpLEYxLnN0eWxlLmNvbG9yPXN0LHRoaXMucmVxdWVzdFVwZGF0ZSgpfTt0dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2oxKCExLCExKX0pLHR0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHNhPT57c2Eua2V5PT09IkVudGVyIiYmajEoITAsITApfSksRjEuYXBwZW5kQ2hpbGQodHQpLHR0LmZvY3VzKCl9c3RhdGlje0tlKGksYSl9fTtyZXR1cm4gUWw9aX0pKCl9KTt2YXIgclY9YigoKT0+e2FWKCl9KTt2YXIgWnV0LFh1dD1iKCgpPT57dWUoKTt4MSgpO1p1dD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5mb3JtLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDM1LjMlKSIsImhzbCgxNDIuMSA3MC42JSA2NS4zJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5zdGF0dXMtbWVzc2FnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsImhzbCgwIDcyLjIlIDYwLjYlKSIpfTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLGE9dC5xdWVyeVNlbGVjdG9yKCIuZm9ybS1vdXRwdXQiKTtlJiZhJiYoZS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsYXN5bmMgcj0+e2xldCBzPXIuZGV0YWlsLmRhdGE7Y29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLHMpLGUuc2V0U3RhdHVzKCJwZW5kaW5nIiwiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpLGEuaW5uZXJIVE1MPWA8c3Ryb25nPlN1Ym1pdHRlZCBEYXRhOjwvc3Ryb25nPgoke0pTT04uc3RyaW5naWZ5KHMsbnVsbCwyKX1gLGF3YWl0IHJ0LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpLGUuc2V0U3RhdHVzKCJzdWNjZXNzIiwiUmVnaXN0cmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhIiksYXdhaXQgcnQucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyksZS5yZXNldCgpLGEuaW5uZXJIVE1MPSI8ZW0+Rm9ybSBoYXMgYmVlbiByZXNldDwvZW0+In0pLGUucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0LCBkZWVzLWlucHV0LWRyb3Bkb3duLCBkZWVzLWlucHV0LWNoZWNrYm94IikuZm9yRWFjaChyPT57ci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwoKT0+e2NvbnNvbGUubG9nKCJGaWVsZCBjaGFuZ2VkOiIsci5nZXRBdHRyaWJ1dGUoImtleSIpKX0pfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC5oZWFkaW5nPSJDb21wbGV0ZSBGb3JtIEV4YW1wbGUiIC5kZXNjcmlwdGlvbj0iQSBjb21wcmVoZW5zaXZlIGZvcm0gd2l0aCB2YXJpb3VzIGlucHV0IHR5cGVzLCB2YWxpZGF0aW9uLCBhbmQgZm9ybSBzdWJtaXNzaW9uIGhhbmRsaW5nIj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9ImZpcnN0TmFtZSIgCiAgICAgICAgICAgIGxhYmVsPSJGaXJzdCBOYW1lIgogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiWW91ciBnaXZlbiBuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9IAogICAgICAgICAgICBrZXk9ImVtYWlsIiAKICAgICAgICAgICAgbGFiZWw9IkVtYWlsIEFkZHJlc3MiCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJXZSB3aWxsIHVzZSB0aGlzIHRvIGNvbnRhY3QgeW91In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIGtleT0iY291bnRyeSIKICAgICAgICAgICAgLmxhYmVsPSR7IkNvdW50cnkifQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJVbml0ZWQgU3RhdGVzIixrZXk6InVzIn0se29wdGlvbjoiQ2FuYWRhIixrZXk6ImNhIn0se29wdGlvbjoiR2VybWFueSIsa2V5OiJkZSJ9LHtvcHRpb246IkZyYW5jZSIsa2V5OiJmciJ9LHtvcHRpb246IlVuaXRlZCBLaW5nZG9tIixrZXk6InVrIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAga2V5PSJwYXNzd29yZCIKICAgICAgICAgICAgbGFiZWw9IlBhc3N3b3JkIgogICAgICAgICAgICBpc1Bhc3N3b3JkQm9vbAogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTWluaW11bSA4IGNoYXJhY3RlcnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveAogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAga2V5PSJ0ZXJtcyIKICAgICAgICAgICAgbGFiZWw9IkkgYWdyZWUgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJuZXdzbGV0dGVyIgogICAgICAgICAgICBsYWJlbD0iU2VuZCBtZSBwcm9tb3Rpb25hbCBlbWFpbHMiCiAgICAgICAgICAgIC52YWx1ZT0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTtlJiYoY29uc29sZS5sb2coIkhvcml6b250YWwgZm9ybSBsYXlvdXQgYWN0aXZlIiksZS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsaT0+e2xldCByPWkuZGV0YWlsLmRhdGE7Y29uc29sZS5sb2coIkZpbHRlciBhcHBsaWVkOiIscik7bGV0IHM9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMCkrMTtjb25zb2xlLmxvZyhgRm91bmQgJHtzfSByZXN1bHRzIHdpdGggZmlsdGVyczpgLHIpfSksZS5xdWVyeVNlbGVjdG9yQWxsKCJba2V5XSIpLmZvckVhY2goaT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsYXN5bmMoKT0+e2xldCByPWF3YWl0IGUuY29sbGVjdEZvcm1EYXRhKCk7Y29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLHIpfSl9KSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHshMX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiQWxsIixrZXk6ImFsbCJ9LHtvcHRpb246IlByb2R1Y3RzIixrZXk6InByb2R1Y3RzIn0se29wdGlvbjoiU2VydmljZXMiLGtleToic2VydmljZXMifSx7b3B0aW9uOiJTdXBwb3J0IixrZXk6InN1cHBvcnQifV19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0keyExfQogICAgICAgICAgICAub3B0aW9ucz0ke1t7b3B0aW9uOiJOZXdlc3QiLGtleToibmV3ZXN0In0se29wdGlvbjoiUG9wdWxhciIsa2V5OiJwb3B1bGFyIn0se29wdGlvbjoiUHJpY2U6IExvdyB0byBIaWdoIixrZXk6InByaWNlX2FzYyJ9LHtvcHRpb246IlByaWNlOiBIaWdoIHRvIExvdyIsa2V5OiJwcmljZV9kZXNjIn1dfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLGE9dC5xdWVyeVNlbGVjdG9yKCIjc3RhdHVzLWRpc3BsYXkiKTtpZihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIixhc3luYyByPT57bGV0IHM9ci5kZXRhaWwuZGF0YTtjb25zb2xlLmxvZygiQWR2YW5jZWQgZm9ybSBkYXRhOiIscyksZS5zZXRTdGF0dXMoInBlbmRpbmciLCJWYWxpZGF0aW5nIHlvdXIgaW5mb3JtYXRpb24uLi4iKSxhd2FpdCBydC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwMCkscy5pYmFuJiZzLmliYW4ubGVuZ3RoPjE1PyhlLnNldFN0YXR1cygic3VjY2VzcyIsIkFwcGxpY2F0aW9uIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHkhIiksYSYmKGEuY2xhc3NOYW1lPSJzdGF0dXMtbWVzc2FnZSBzdWNjZXNzIixhLnRleHRDb250ZW50PSJcdTI3MTMgWW91ciBhcHBsaWNhdGlvbiBoYXMgYmVlbiBzdWJtaXR0ZWQuIFdlIHdpbGwgY29udGFjdCB5b3Ugc29vbi4iKSk6KGUuc2V0U3RhdHVzKCJlcnJvciIsIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKSxhJiYoYS5jbGFzc05hbWU9InN0YXR1cy1tZXNzYWdlIGVycm9yIixhLnRleHRDb250ZW50PSJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIikpLGNvbnNvbGUubG9nKCJGb3JtIGRhdGEgbG9nZ2VkOiIscyl9KTtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpO2kmJmkuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyPT57bGV0IHM9ci5kZXRhaWw/LmZpbGVzfHxbXTtjb25zb2xlLmxvZyhgJHtzLmxlbmd0aH0gZmlsZShzKSBzZWxlY3RlZCBmb3IgdXBsb2FkYCl9KX19fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUKICAgICAgICAgICAga2V5PSJwaG9uZSIKICAgICAgICAgICAgbGFiZWw9IlBob25lIE51bWJlciIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICBrZXk9InByZWZlcmVuY2VzIgogICAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9uIFByZWZlcmVuY2VzIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVtYWlsIiwiU01TIiwiUHVzaCIsIkluLUFwcCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW1haWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGlzZWxlY3QKICAgICAgICAgICAga2V5PSJpbnRlcmVzdHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJBcmVhcyBvZiBJbnRlcmVzdCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IlRlY2hub2xvZ3kiLGtleToidGVjaCJ9LHtvcHRpb246IkRlc2lnbiIsa2V5OiJkZXNpZ24ifSx7b3B0aW9uOiJCdXNpbmVzcyIsa2V5OiJidXNpbmVzcyJ9LHtvcHRpb246Ik1hcmtldGluZyIsa2V5OiJtYXJrZXRpbmcifSx7b3B0aW9uOiJTYWxlcyIsa2V5OiJzYWxlcyJ9XX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmB9KTt2YXIgS3V0LHNWLFF1dCxKdXQsUGw9YigoKT0+e3VlKCk7THQoKTtMeCgpO0ZxKCk7UnEoKTt1bygpO3FxKCk7RngoKTtCeCgpO2pxKCk7WnEoKTtYcSgpO0txKCk7SnEoKTt0VigpO0owKCk7clYoKTtYdXQoKTtLdXQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxzVj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sUXV0PVtUeCxEeCxFeCxSeCxIeCxqeCxVeCxHeCxJeCxOeCxQeCxZeCxaeCxLeF0sSnV0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1mb3JtIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToiaG9yaXpvbnRhbC1sYXlvdXQifSldLEt1dCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imhvcml6b250YWxMYXlvdXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnA9PiJob3Jpem9udGFsTGF5b3V0ImluIHAsZ2V0OnA9PnAuaG9yaXpvbnRhbExheW91dCxzZXQ6KHAsbCk9PntwLmhvcml6b250YWxMYXlvdXQ9bH19LG1ldGFkYXRhOmN9LG4sbyksS3V0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZD1pPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89WnV0O3N0YXRpYyBkZW1vR3JvdXBzPVsiRm9ybSJdO25hbWU9Im15Zm9ybSI7Y2hhbmdlU3ViamVjdD1uZXcgenQuc21hcnRyeC5yeGpzLlN1YmplY3Q7cmVhZHlEZWZlcnJlZD16dC5zbWFydHByb21pc2UuZGVmZXIoKTsjZT1zVih0aGlzLG4sITEpO2dldCBob3Jpem9udGFsTGF5b3V0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGhvcml6b250YWxMYXlvdXQoYyl7dGhpcy4jZT1jfXN0YXRpYyBzdHlsZXM9W1FgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICA6aG9zdChbaG9yaXpvbnRhbC1sYXlvdXRdKSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPHNsb3Q+PC9zbG90PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXtsZXQgYz10aGlzLmdldEZvcm1FbGVtZW50cygpO3RoaXMudXBkYXRlUmVxdWlyZWRTdGF0dXMoKSx0aGlzLnVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpO2ZvcihsZXQgcCBvZiBjKXAuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMoKT0+e2xldCBsPWF3YWl0IHRoaXMuY29sbGVjdEZvcm1EYXRhKCk7dGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQobCksY29uc29sZS5sb2cobCksdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpfSk7YXdhaXQgdGhpcy5hZGRCZWhhdmlvdXJzKCksdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKX1nZXRGb3JtRWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoYz0+UXV0LmluY2x1ZGVzKGMuY29uc3RydWN0b3IpKX1nZXRTdWJtaXRCdXR0b24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maW5kKGM9PmMgaW5zdGFuY2VvZiBPeCl9YXN5bmMgdXBkYXRlUmVxdWlyZWRTdGF0dXMoKXtjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTtsZXQgYz0hMDtmb3IobGV0IHAgb2YgdGhpcy5nZXRGb3JtRWxlbWVudHMoKSlwLnJlcXVpcmVkJiYhcC52YWx1ZSYmKGM9ITEpO3RoaXMuZ2V0U3VibWl0QnV0dG9uKCkmJih0aGlzLmdldFN1Ym1pdEJ1dHRvbigpLmRpc2FibGVkPSFjKX1hc3luYyBjb2xsZWN0Rm9ybURhdGEoKXtsZXQgYz10aGlzLmdldEZvcm1FbGVtZW50cygpLHA9e307Zm9yKGxldCBsIG9mIGMpe2lmKCFsLmtleSl7Y29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2wubGFiZWx9IiBoYXMgbm8ga2V5LiBza2lwcGluZy5gKTtjb250aW51ZX1wW2wua2V5XT1sLnZhbHVlfXJldHVybiBwfWFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCl7bGV0IGM9YXdhaXQgdGhpcy5jb2xsZWN0Rm9ybURhdGEoKSxwPW5ldyBDdXN0b21FdmVudCgiZm9ybURhdGEiLHtkZXRhaWw6e2RhdGE6Y30sYnViYmxlczohMH0pO3RoaXMuZGlzcGF0Y2hFdmVudChwKSxjb25zb2xlLmxvZygiZGlzcGF0Y2hlZCBkYXRhOiIpLGNvbnNvbGUubG9nKGMpfXNldFN0YXR1cyhjLHApe2xldCBsPXRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCksZj10aGlzLmdldFN1Ym1pdEJ1dHRvbigpO3N3aXRjaChjKXtjYXNlIm5vcm1hbCI6Zi5kaXNhYmxlZD0hMSxmLnN0YXR1cz0ibm9ybWFsIjtmb3IobGV0IGcgb2YgbClnLmRpc2FibGVkPSExO2JyZWFrO2Nhc2UicGVuZGluZyI6Zi5kaXNhYmxlZD0hMCxmLnN0YXR1cz0icGVuZGluZyI7Zm9yKGxldCBnIG9mIGwpZy5kaXNhYmxlZD0hMDticmVhaztjYXNlInN1Y2Nlc3MiOmYuZGlzYWJsZWQ9ITAsZi5zdGF0dXM9InN1Y2Nlc3MiO2ZvcihsZXQgZyBvZiBsKWcuZGlzYWJsZWQ9ITA7YnJlYWs7Y2FzZSJlcnJvciI6Zi5kaXNhYmxlZD0hMCxmLnN0YXR1cz0iZXJyb3IiO2ZvcihsZXQgZyBvZiBsKWcuZGlzYWJsZWQ9ITA7YnJlYWt9Zi50ZXh0PXB9cmVzZXQoKXtsZXQgYz10aGlzLmdldEZvcm1FbGVtZW50cygpLHA9dGhpcy5nZXRTdWJtaXRCdXR0b24oKTtmb3IobGV0IGwgb2YgYylsLnZhbHVlPW51bGw7dGhpcy5zZXRTdGF0dXMoIm5vcm1hbCIsIlN1Ym1pdCIpfWFzeW5jIGFkZEJlaGF2aW91cnMoKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGM9PntsZXQgcD1jLnRhcmdldDtpZihRdXQuaW5jbHVkZXMocC5jb25zdHJ1Y3RvcikmJmMua2V5PT09IkVudGVyIil7bGV0IGw9dGhpcy5nZXRGb3JtRWxlbWVudHMoKSxmPWwuaW5kZXhPZihwKTtmPGwubGVuZ3RoLTE/bFtmKzFdLmZvY3VzKCk6KHAuYmx1cigpLHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk/LmZvY3VzKCkpfX0pfXVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpe2xldCBjPXRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7Zm9yKGxldCBwIG9mIGMpImxheW91dE1vZGUiaW4gcCYmKHAubGF5b3V0TW9kZT0iYXV0byIpfXVwZGF0ZWQoYyl7c3VwZXIudXBkYXRlZChjKSxjLmhhcygiaG9yaXpvbnRhbExheW91dCIpJiZ0aGlzLnVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxzVih0aGlzLG8pfXN0YXRpY3tzVihpLGEpfX07cmV0dXJuIGQ9aX0pKCl9KTt2YXIgZWZ0LHRmdD1iKCgpPT57dWUoKTt4MSgpO2cyKCk7UGwoKTtKMCgpO3VvKCk7RXQoKTtlZnQ9KCk9PndgCiAgPHN0eWxlPgogICAgJHtRYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnZlcnRpY2FsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1vdXRwdXQgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pY29uLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1zbmlwcGV0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57bGV0IGk9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKXx8ImRlZmF1bHQiO2NvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke2l9YCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCdXR0b24gVmFyaWFudHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZpc3VhbCBzdHlsZXMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZWZhdWx0Ij5EZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNlY29uZGFyeTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiPkRlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIj5PdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCI+R2hvc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImxpbmsiPkxpbmsgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgaT1hLmdldEF0dHJpYnV0ZSgic2l6ZSIpfHwiZGVmYXVsdCI7Y29uc29sZS5sb2coYEJ1dHRvbiBzaXplOiAke2l9YCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBCdXR0b24gU2l6ZXMifSAuc3VidGl0bGU9JHsiTXVsdGlwbGUgc2l6ZXMgZm9yIGRpZmZlcmVudCBjb250ZXh0cyBhbmQgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSI+U21hbGwgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJkZWZhdWx0Ij5EZWZhdWx0IFNpemU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImxnIj5MYXJnZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiIC50ZXh0PSR7Ilx1ezFGNjgwfSJ9PjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9InNtIiB0eXBlPSJzZWNvbmRhcnkiPlNtYWxsIFNlY29uZGFyeTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCIgdHlwZT0iZGVzdHJ1Y3RpdmUiPkRlZmF1bHQgRGVzdHJ1Y3RpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImxnIiB0eXBlPSJvdXRsaW5lIj5MYXJnZSBPdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2goYT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgaT1hLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpO2lmKGkpe2xldCByPWkuZ2V0QXR0cmlidXRlKCJpY29uRkEiKXx8InVua25vd24iO2NvbnNvbGUubG9nKGBJY29uIGJ1dHRvbiBjbGlja2VkOiAke3J9YCl9fSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBZGQgSXRlbQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEZWxldGUKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgRG93bmxvYWQKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgU2V0dGluZ3MKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmNhcmV0TGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEJhY2sKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICBOZXh0CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9InNlY29uZGFyeSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Z2VhciI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTZWFyY2giPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57bGV0IGk9YS5nZXRBdHRyaWJ1dGUoImljb24iKXx8Im5vbmUiLHI9YS5nZXRBdHRyaWJ1dGUoImljb25Qb3NpdGlvbiIpfHwibGVmdCI7Y29uc29sZS5sb2coYEljb24gcHJvcGVydHkgYnV0dG9uOiBpY29uPSR7aX0sIHBvc2l0aW9uPSR7cn1gKX0pfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIEljb25zIHZpYSBQcm9wZXJ0eSJ9IC5zdWJ0aXRsZT0keyJTaW1wbGlmaWVkIGljb24gc3ludGF4IHVzaW5nIHRoZSBpY29uIHByb3BlcnR5In0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGljb249ImZhOnBsdXMiPkFkZCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPkRlbGV0ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOkRvd25sb2FkIj5Eb3dubG9hZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIiBpY29uPSJmYTpnZWFyIj5TZXR0aW5nczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIGljb249ImZhOmNhcmV0TGVmdCI+QmFjazwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIGljb249ImZhOmNhcmV0UmlnaHQiIGljb25Qb3NpdGlvbj0icmlnaHQiPk5leHQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCIgaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJzZWNvbmRhcnkiIGljb249Imx1Y2lkZTpTZXR0aW5ncyI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiBpY29uPSJsdWNpZGU6U2VhcmNoIj48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Imdob3N0IiBpY29uPSJsdWNpZGU6TW9yZVZlcnRpY2FsIj48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1zbmlwcGV0Ij4KICAgICAgICAgICAgJmx0O2RlZXMtYnV0dG9uIGljb249ImZhOnBsdXMiJmd0O0FkZCBJdGVtJmx0Oy9kZWVzLWJ1dHRvbiZndDs8YnI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0IiZndDtOZXh0Jmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKSxhPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJzdWNjZXNzIl0nKSxpPXQucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJlcnJvciJdJyk7ZSYmc2V0VGltZW91dCgoKT0+e2NvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKX0sMWUzKSxhJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57Y29uc29sZS5sb2coIlN1Y2Nlc3Mgc3RhdGUgYnV0dG9uIGNsaWNrZWQiKX0pLGkmJmkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9Pntjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiI2NsaWNrLW91dHB1dCIpLGE9dC5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIiksaT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9InNlY29uZGFyeSJdJykscj10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9ImRlc3RydWN0aXZlIl0nKTthJiZlJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCgpPT57ZS50ZXh0Q29udGVudD1gQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpfWB9KSxpJiZlJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLHM9PntlLnRleHRDb250ZW50PWBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtzLmRldGFpbC5kYXRhfWB9KSxyJiZlJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLGFzeW5jKCk9PntlLnRleHRDb250ZW50PSJQcm9jZXNzaW5nLi4uIixhd2FpdCBydC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKSxlLnRleHRDb250ZW50PSJBY3Rpb24gY29tcGxldGVkISJ9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRXZlbnQgSGFuZGxpbmcifSAuc3VidGl0bGU9JHsiSW50ZXJhY3RpdmUgZXhhbXBsZXMgd2l0aCBjbGljayBldmVudCBoYW5kbGluZyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+Q2xpY2sgTWU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgLmV2ZW50RGV0YWlsRGF0YT0keyJjdXN0b20tZGF0YS0xMjMifT4KICAgICAgICAgICAgQ2xpY2sgd2l0aCBEYXRhCiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5Bc3luYyBBY3Rpb248L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9ImNsaWNrLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIDxlbT5DbGljayBhIGJ1dHRvbiB0byBzZWUgdGhlIHJlc3VsdC4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPXQucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIiksYT10LnF1ZXJ5U2VsZWN0b3IoIiNmb3JtLW91dHB1dCIpO2UmJmEmJmUuYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLHM9PnthLmlubmVySFRNTD0iPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIrSlNPTi5zdHJpbmdpZnkocy5kZXRhaWwuZGF0YSxudWxsLDIpfSk7bGV0IGk9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpLHI9dC5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJnaG9zdCJdJyk7aSYmaS5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwoKT0+e2NvbnNvbGUubG9nKCJTYXZlIERyYWZ0IGNsaWNrZWQiKX0pLHImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9Pntjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIikuZm9yRWFjaChhPT57bGV0IGk9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKTtpJiZjb25zb2xlLmxvZyhgTGVnYWN5IHR5cGUgIiR7aX0iIGlzIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eWApfSl9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIEJhY2t3YXJkIENvbXBhdGliaWxpdHkifSAuc3VidGl0bGU9JHsiT2xkIGJ1dHRvbiB0eXBlcyBhcmUgYXV0b21hdGljYWxseSBtYXBwZWQgdG8gbmV3IHZhcmlhbnRzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJub3JtYWwiPk5vcm1hbCDihpIgRGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPkhpZ2hsaWdodGVkIOKGkiBEZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGlzY3JlZXQiPkRpc2NyZWV0IOKGkiBPdXRsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJiaWciPkJpZyDihpIgTGFyZ2UgU2l6ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdLGE9dC5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTtlJiZlLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIikuZm9yRWFjaCgocixzKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsKCk9PntsZXQgbj1bIlNhdmUgQ2hhbmdlcyIsIkRpc2NhcmQiLCJIZWxwIl1bc107Y29uc29sZS5sb2coYEFjdGlvbiBncm91cDogJHtufSBjbGlja2VkYCl9KX0pLGEmJmEucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKChyLHMpPT57ci5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwoKT0+e2xldCBuPVsiRGVsZXRlIEFjY291bnQiLCJBcmNoaXZlIERhdGEiLCJOb3QgQXZhaWxhYmxlIl1bc107cyE9PTImJmNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHtufSBjbGlja2VkYCl9KX0pfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI5LiBBZHZhbmNlZCBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJDb21wbGV4IGJ1dHRvbiBjb25maWd1cmF0aW9ucyBhbmQgcmVhbC13b3JsZCB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsLWdyb3VwIj4KICAgICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+QWN0aW9uIEdyb3VwPC9oND4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTYXZlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBTYXZlIENoYW5nZXMKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlVuZG8yIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBEaXNjYXJkCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkhlbHBDaXJjbGUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIEhlbHAKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsLWdyb3VwIj4KICAgICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+RGFuZ2VyIFpvbmU8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnRyYXNoIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBEZWxldGUgQWNjb3VudAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkFyY2hpdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIEFyY2hpdmUgRGF0YQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIHNpemU9InNtIiBkaXNhYmxlZD4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpCYW4iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIE5vdCBBdmFpbGFibGUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDI0cHg7Ij4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgOHB4IDA7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsiPkNvZGUgRXhhbXBsZTo8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1zbmlwcGV0Ij4KICAgICAgICAgICAgJmx0O2RlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBpY29uPSJsdWNpZGU6U2F2ZSIgQGNsaWNrZWQ9Ilwke2hhbmRsZUNsaWNrfSImZ3Q7PGJyPgogICAgICAgICAgICAmbmJzcDsmbmJzcDtTYXZlIENoYW5nZXM8YnI+CiAgICAgICAgICAgICZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgfSk7dmFyIFFpLHExLGFmdCxwbz1iKCgpPT57dWUoKTtMdCgpO3RmdCgpO1ZlKCk7UWk9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxxMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sYWZ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1idXR0b24iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXTt2YXIgcmU9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBqPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3JlZmxlY3Q6ITAsaGFzQ2hhbmdlZCgpe3JldHVybiEwfX0pXSxkPVtJKCldLGw9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLHk9W0koe3R5cGU6Qm9vbGVhbn0pXSx4PVtJKHt0eXBlOlN0cmluZ30pXSxGPVtJKHt0eXBlOlN0cmluZ30pXSxOPVtJKHt0eXBlOlN0cmluZ30pXSxxPVtJKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMH0pXSxFPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLFY9W0koe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sUWkodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0ZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptZT0+InRleHQiaW4gbWUsZ2V0Om1lPT5tZS50ZXh0LHNldDoobWUsd2UpPT57bWUudGV4dD13ZX19LG1ldGFkYXRhOmp9LG4sbyksUWkodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJldmVudERldGFpbERhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm1lPT4iZXZlbnREZXRhaWxEYXRhImluIG1lLGdldDptZT0+bWUuZXZlbnREZXRhaWxEYXRhLHNldDoobWUsd2UpPT57bWUuZXZlbnREZXRhaWxEYXRhPXdlfX0sbWV0YWRhdGE6an0sYyxwKSxRaSh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRpc2FibGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptZT0+ImRpc2FibGVkImluIG1lLGdldDptZT0+bWUuZGlzYWJsZWQsc2V0OihtZSx3ZSk9PnttZS5kaXNhYmxlZD13ZX19LG1ldGFkYXRhOmp9LGYsZyksUWkodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0hpZGRlbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bWU9PiJpc0hpZGRlbiJpbiBtZSxnZXQ6bWU9Pm1lLmlzSGlkZGVuLHNldDoobWUsd2UpPT57bWUuaXNIaWRkZW49d2V9fSxtZXRhZGF0YTpqfSx2LG0pLFFpKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToidHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bWU9PiJ0eXBlImluIG1lLGdldDptZT0+bWUudHlwZSxzZXQ6KG1lLHdlKT0+e21lLnR5cGU9d2V9fSxtZXRhZGF0YTpqfSxNLFMpLFFpKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bWU9PiJzaXplImluIG1lLGdldDptZT0+bWUuc2l6ZSxzZXQ6KG1lLHdlKT0+e21lLnNpemU9d2V9fSxtZXRhZGF0YTpqfSxfLGspLFFpKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RhdHVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptZT0+InN0YXR1cyJpbiBtZSxnZXQ6bWU9Pm1lLnN0YXR1cyxzZXQ6KG1lLHdlKT0+e21lLnN0YXR1cz13ZX19LG1ldGFkYXRhOmp9LEwsQSksUWkodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbnNpZGVGb3JtIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptZT0+Imluc2lkZUZvcm0iaW4gbWUsZ2V0Om1lPT5tZS5pbnNpZGVGb3JtLHNldDoobWUsd2UpPT57bWUuaW5zaWRlRm9ybT13ZX19LG1ldGFkYXRhOmp9LEMseiksUWkodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptZT0+Imljb24iaW4gbWUsZ2V0Om1lPT5tZS5pY29uLHNldDoobWUsd2UpPT57bWUuaWNvbj13ZX19LG1ldGFkYXRhOmp9LFQsJCksUWkodGhpcyxudWxsLFYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpY29uUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm1lPT4iaWNvblBvc2l0aW9uImluIG1lLGdldDptZT0+bWUuaWNvblBvc2l0aW9uLHNldDoobWUsd2UpPT57bWUuaWNvblBvc2l0aW9uPXdlfX0sbWV0YWRhdGE6an0sUixVKSxRaShudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpqfSxudWxsLGEpLHJlPWk9ZS52YWx1ZSxqJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmp9KX1zdGF0aWMgZGVtbz1lZnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJCdXR0b24iXTsjZT1xMSh0aGlzLG4sdm9pZCAwKTtnZXQgdGV4dCgpe3JldHVybiB0aGlzLiNlfXNldCB0ZXh0KGope3RoaXMuI2U9an0jdD0ocTEodGhpcyxvKSxxMSh0aGlzLGMsdm9pZCAwKSk7Z2V0IGV2ZW50RGV0YWlsRGF0YSgpe3JldHVybiB0aGlzLiN0fXNldCBldmVudERldGFpbERhdGEoail7dGhpcy4jdD1qfSNhPShxMSh0aGlzLHApLHExKHRoaXMsZiwhMSkpO2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLiNhfXNldCBkaXNhYmxlZChqKXt0aGlzLiNhPWp9I2k9KHExKHRoaXMsZykscTEodGhpcyx2LCExKSk7Z2V0IGlzSGlkZGVuKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGlzSGlkZGVuKGope3RoaXMuI2k9an0jcj0ocTEodGhpcyxtKSxxMSh0aGlzLE0sImRlZmF1bHQiKSk7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgdHlwZShqKXt0aGlzLiNyPWp9I3M9KHExKHRoaXMsUykscTEodGhpcyxfLCJkZWZhdWx0IikpO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI3N9c2V0IHNpemUoail7dGhpcy4jcz1qfSNuPShxMSh0aGlzLGspLHExKHRoaXMsTCwibm9ybWFsIikpO2dldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy4jbn1zZXQgc3RhdHVzKGope3RoaXMuI249an0jbz0ocTEodGhpcyxBKSxxMSh0aGlzLEMsITEpKTtnZXQgaW5zaWRlRm9ybSgpe3JldHVybiB0aGlzLiNvfXNldCBpbnNpZGVGb3JtKGope3RoaXMuI289an0jbD0ocTEodGhpcyx6KSxxMSh0aGlzLFQsdm9pZCAwKSk7Z2V0IGljb24oKXtyZXR1cm4gdGhpcy4jbH1zZXQgaWNvbihqKXt0aGlzLiNsPWp9I2M9KHExKHRoaXMsJCkscTEodGhpcyxSLCJsZWZ0IikpO2dldCBpY29uUG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jY31zZXQgaWNvblBvc2l0aW9uKGope3RoaXMuI2M9an1jb25zdHJ1Y3Rvcigpe3N1cGVyKCkscTEodGhpcyxVKX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksIXRoaXMuaW5zaWRlRm9ybSYmdGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKSYmKHRoaXMuaW5zaWRlRm9ybT0hMCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxMC4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVmYXVsdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDIxLjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5vdXRsaW5lOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDI2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5vdXRsaW5lOmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDEzLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Vjb25kYXJ5IHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCJoc2woMjE1IDIwLjIlIDEzLjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmdob3N0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24uZ2hvc3Q6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuYnV0dG9uLmxpbms6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBTdGF0dXMgc3RhdGVzICovCiAgICAgIC5idXR0b24ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zdWNjZXNzLAogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDM2cHg7IC8qIFNwYWNlIGZvciBzcGlubmVyICovCiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbS5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtc20uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLXNtLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDMycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZy5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtbGcuc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLWxnLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDQ0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24ucGVuZGluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgNjIuOCUgNzAuNiUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogSGlkZGVuIHN0YXRlICovCiAgICAgIC5idXR0b24uaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZSAqLwogICAgICAuYnV0dG9uOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgfQoKICAgICAgLyogTG9hZGluZyBzcGlubmVyICovCiAgICAgIGRlZXMtc3Bpbm5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1zcGlubmVyIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcgZGVlcy1zcGlubmVyIHsKICAgICAgICBsZWZ0OiAxNHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAKICAgICAgLyogSWNvbiBzaXppbmcgd2l0aGluIGJ1dHRvbnMgKi8KICAgICAgLmJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi5zaXplLXNtIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KCiAgICAgIC8qIFRleHQgYWxpZ25tZW50ICovCiAgICAgIC50ZXh0Ym94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICBgXTtleHRyYWN0TGlnaHREb20oKXtsZXQgaj10aGlzLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpLG1lPUFycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzKS5maWx0ZXIod2U9PndlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpLm1hcCh3ZT0+d2UudGV4dENvbnRlbnQ/LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtpZihtZSYmIXRoaXMudGV4dCYmKHRoaXMudGV4dD1tZSksail7bGV0IHdlPWouaWNvbnx8ai5nZXRBdHRyaWJ1dGUoImljb24iKXx8KGouaWNvbkZBP2BmYToke2ouaWNvbkZBfWA6bnVsbCk7aWYod2Upe2xldCBIPUFycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzKSxjZT1ILmluZGV4T2Yoaiksa2U9SC5maWx0ZXIoVz0+Vy5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiZXLnRleHRDb250ZW50Py50cmltKCkpO2lmKGtlLmxlbmd0aD4wKXtsZXQgVz1ILmluZGV4T2Yoa2VbMF0pO3RoaXMuaWNvblBvc2l0aW9uPWNlPFc/ImxlZnQiOiJyaWdodCJ9dGhpcy5pY29uPXdlfWoucmVtb3ZlKCl9dGhpcy5pbm5lckhUTUw9IiJ9cmVuZGVyKCl7bGV0IG1lPXtub3JtYWw6ImRlZmF1bHQiLGhpZ2hsaWdodGVkOiJkZXN0cnVjdGl2ZSIsZGlzY3JlZXQ6Im91dGxpbmUiLGJpZzoiZGVmYXVsdCJ9W3RoaXMudHlwZV18fHRoaXMudHlwZSx3ZT10aGlzLnR5cGU9PT0iYmlnIj8ibGciOnRoaXMuc2l6ZSxIPXRoaXMuaWNvblBvc2l0aW9uPT09ImxlZnQiJiZ0aGlzLmljb24/d2A8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5pY29ufT48L2RlZXMtaWNvbj5gOiIiLGNlPXRoaXMuaWNvblBvc2l0aW9uPT09InJpZ2h0IiYmdGhpcy5pY29uP3dgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YDoiIixrZT13ZT09PSJpY29uIiYmdGhpcy5pY29uO3JldHVybiB3YAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJ1dHRvbiAke3RoaXMuaXNIaWRkZW4/ImhpZGRlbiI6IiJ9ICR7bWV9IHNpemUtJHt3ZX0gJHt0aGlzLnN0YXR1c30gJHt0aGlzLmRpc2FibGVkPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgIEBjbGljaz0iJHt0aGlzLmRpc3BhdGNoQ2xpY2t9IgogICAgICA+CiAgICAgICAgJHt0aGlzLnN0YXR1cz09PSJub3JtYWwiP3dgYDp3YAogICAgICAgICAgPGRlZXMtc3Bpbm5lcgogICAgICAgICAgICAuYm53PSR7ITB9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7d2U9PT0ic20iPzE0OndlPT09ImxnIj8xODoxNn0iCiAgICAgICAgICA+PC9kZWVzLXNwaW5uZXI+CiAgICAgICAgYH0KICAgICAgICAke0h9CiAgICAgICAgJHtrZT8iIjp3YDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0fHwiQnV0dG9uIn08L2Rpdj5gfQogICAgICAgICR7Y2V9CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBkaXNwYXRjaENsaWNrKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2xpY2tlZCIse2RldGFpbDp7ZGF0YTp0aGlzLmV2ZW50RGV0YWlsRGF0YX0sYnViYmxlczohMH0pKX1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmV4dHJhY3RMaWdodERvbSgpfXN0YXRpY3txMShpLGEpfX07cmV0dXJuIHJlPWl9KSgpfSk7dmFyIG1vLGZhLGlmdCxReD1iKCgpPT57Vjl0KCk7czIoKTtwYSgpO3VlKCk7RXQoKTtuMigpO3BvKCk7VmUoKTttbz1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGZhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxpZnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXN0YXRzZ3JpZCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOkFycmF5fSldLGQ9W0koe3R5cGU6TnVtYmVyfSldLGw9W0koe3R5cGU6TnVtYmVyfSldLHk9W0koe3R5cGU6QXJyYXl9KV0seD1bSygpXSxGPVtLKCldLE49W0soKV0sbW8odGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aWxlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InRpbGVzImluIHosZ2V0Ono9PnoudGlsZXMsc2V0Oih6LEUpPT57ei50aWxlcz1FfX0sbWV0YWRhdGE6Q30sbixvKSxtbyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pblRpbGVXaWR0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+Im1pblRpbGVXaWR0aCJpbiB6LGdldDp6PT56Lm1pblRpbGVXaWR0aCxzZXQ6KHosRSk9Pnt6Lm1pblRpbGVXaWR0aD1FfX0sbWV0YWRhdGE6Q30sYyxwKSxtbyh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImdhcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImdhcCJpbiB6LGdldDp6PT56LmdhcCxzZXQ6KHosRSk9Pnt6LmdhcD1FfX0sbWV0YWRhdGE6Q30sZixnKSxtbyh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImdyaWRBY3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iZ3JpZEFjdGlvbnMiaW4geixnZXQ6ej0+ei5ncmlkQWN0aW9ucyxzZXQ6KHosRSk9Pnt6LmdyaWRBY3Rpb25zPUV9fSxtZXRhZGF0YTpDfSx2LG0pLG1vKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGV4dE1lbnVWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iY29udGV4dE1lbnVWaXNpYmxlImluIHosZ2V0Ono9PnouY29udGV4dE1lbnVWaXNpYmxlLHNldDooeixFKT0+e3ouY29udGV4dE1lbnVWaXNpYmxlPUV9fSxtZXRhZGF0YTpDfSxNLFMpLG1vKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29udGV4dE1lbnVQb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNvbnRleHRNZW51UG9zaXRpb24iaW4geixnZXQ6ej0+ei5jb250ZXh0TWVudVBvc2l0aW9uLHNldDooeixFKT0+e3ouY29udGV4dE1lbnVQb3NpdGlvbj1FfX0sbWV0YWRhdGE6Q30sXyxrKSxtbyh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRleHRNZW51QWN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNvbnRleHRNZW51QWN0aW9ucyJpbiB6LGdldDp6PT56LmNvbnRleHRNZW51QWN0aW9ucyxzZXQ6KHosRSk9Pnt6LmNvbnRleHRNZW51QWN0aW9ucz1FfX0sbWV0YWRhdGE6Q30sTCxBKSxtbyhudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLHE9aT1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfXN0YXRpYyBkZW1vPXE5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkRhdGEgVmlldyJdOyNlPWZhKHRoaXMsbixbXSk7Z2V0IHRpbGVzKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHRpbGVzKEMpe3RoaXMuI2U9Q30jdD0oZmEodGhpcyxvKSxmYSh0aGlzLGMsMjUwKSk7Z2V0IG1pblRpbGVXaWR0aCgpe3JldHVybiB0aGlzLiN0fXNldCBtaW5UaWxlV2lkdGgoQyl7dGhpcy4jdD1DfSNhPShmYSh0aGlzLHApLGZhKHRoaXMsZiwxNikpO2dldCBnYXAoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZ2FwKEMpe3RoaXMuI2E9Q30jaT0oZmEodGhpcyxnKSxmYSh0aGlzLHYsW10pKTtnZXQgZ3JpZEFjdGlvbnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgZ3JpZEFjdGlvbnMoQyl7dGhpcy4jaT1DfSNyPShmYSh0aGlzLG0pLGZhKHRoaXMsTSwhMSkpO2dldCBjb250ZXh0TWVudVZpc2libGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY29udGV4dE1lbnVWaXNpYmxlKEMpe3RoaXMuI3I9Q30jcz0oZmEodGhpcyxTKSxmYSh0aGlzLF8se3g6MCx5OjB9KSk7Z2V0IGNvbnRleHRNZW51UG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jc31zZXQgY29udGV4dE1lbnVQb3NpdGlvbihDKXt0aGlzLiNzPUN9I249KGZhKHRoaXMsayksZmEodGhpcyxMLFtdKSk7Z2V0IGNvbnRleHRNZW51QWN0aW9ucygpe3JldHVybiB0aGlzLiNufXNldCBjb250ZXh0TWVudUFjdGlvbnMoQyl7dGhpcy4jbj1DfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICB9CgogICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHNpemluZyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1ncmlkLWdhcDogMTJweDsKICAgICAgICAtLXRpbGUtcGFkZGluZzogMTZweDsKICAgICAgICAtLWhlYWRlci1zcGFjaW5nOiAxMnB4OwogICAgICAgIC0tY29udGVudC1taW4taGVpZ2h0OiA0MHB4OwogICAgICAgIC0tdmFsdWUtZm9udC1zaXplOiAyNnB4OwogICAgICAgIC0tdW5pdC1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1sYWJlbC1mb250LXNpemU6IDEycHg7CiAgICAgICAgLS10aXRsZS1mb250LXNpemU6IDEzcHg7CiAgICAgICAgLS1kZXNjcmlwdGlvbi1zcGFjaW5nOiA4cHg7CiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgLS10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgfQoKICAgICAgLyogR3JpZCBMYXlvdXQgKi8KICAgICAgLmdyaWQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IGNhbGModmFyKC0tZ3JpZC1nYXApICogMS41KTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JpZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmdyaWQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmdyaWQtYWN0aW9ucyBkZWVzLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICB9CgogICAgICAuc3RhdHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KCR7cXQoMjUwKX1weCwgMWZyKSk7CiAgICAgICAgZ2FwOiAke3F0KDE2KX1weDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLyogVGlsZSBCYXNlIFN0eWxlcyAqLwogICAgICAuc3RhdHMtdGlsZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTBlMGUwIiwiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsKICAgICAgICBwYWRkaW5nOiB2YXIoLS10aWxlLXBhZGRpbmcpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uKSBlYXNlOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZhZmFmYSIsIiMwZDBkMGQiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiI2QwZDBkMCIsIiMyYTJhMmEiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZS5jbGlja2FibGU6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggJHtoLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMykiLCJyZ2JhKDAsMCwwLDAuMTUpIil9OwogICAgICB9CgogICAgICAvKiBUaWxlIEhlYWRlciAqLwogICAgICAudGlsZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWhlYWRlci1zcGFjaW5nKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRpbGUtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGl0bGUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAudGlsZS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUaWxlIENvbnRlbnQgKi8KICAgICAgLnRpbGUtY29udGVudCB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tY29udGVudC1taW4taGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnRpbGUtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC50aWxlLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC50aWxlLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLWxhYmVsLWZvbnQtc2l6ZSk7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tZGVzY3JpcHRpb24tc3BhY2luZyk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIEdhdWdlIFN0eWxlcyAqLwogICAgICAuZ2F1Z2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuZ2F1Z2UtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZ2F1Z2Utc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogJHtoLmJkVGhlbWUoIiNlOGU4ZTgiLCIjMWExYTFhIil9OwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgfQoKICAgICAgLmdhdWdlLWZpbGwgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiA2OwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICB0cmFuc2l0aW9uOiBzdHJva2UtZGFzaG9mZnNldCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC5nYXVnZS10ZXh0IHsKICAgICAgICBmaWxsOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CiAgICAgIAogICAgICAuZ2F1Z2UtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZmlsbDogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAke3QxfTsKICAgICAgfQoKICAgICAgLyogUGVyY2VudGFnZSBTdHlsZXMgKi8KICAgICAgLnBlcmNlbnRhZ2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAucGVyY2VudGFnZS12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlOGU4ZTgiLCIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzMzMzMzMyIsIiNlMGUwZTAiKX07CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLyogTXVsdGkgUGVyY2VudGFnZSBTdHlsZXMgKi8KICAgICAgLm11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWl0ZW1zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlOGU4ZTgiLCIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzMzMzMzMiLCIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIENQVSBDb3JlcyBTdHlsZXMgKi8KICAgICAgLmNwdS1jb3Jlcy13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLWxhYmVsLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDNweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtYmFycy5jZW50ZXJlZCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogNnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItd3JhcHBlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U4ZThlOCIsIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItZmlsbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjNjY2NjY2IiwiIzg4ODg4OCIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1maWxsLmxvdyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubWVkaXVtIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwuaGlnaCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBQYXJ0aXRpb24gU3R5bGVzICovCiAgICAgIC5wYXJ0aXRpb24td3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1wZXJjZW50YWdlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAucGFydGl0aW9uLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlOGU4ZTgiLCIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucGFydGl0aW9uLWJhci1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzMzMzMzMiLCIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXItZmlsbC5jcml0aWNhbCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1zdGF0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tZXRhIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLWZpbGVzeXN0ZW0gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tb3VudHBvaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERpc2sgU3R5bGVzICovCiAgICAgIC5kaXNrLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlzay1jYXBhY2l0eSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLmRpc2stbW9kZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLXR5cGUtYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAuZGlzay1tZXRyaWNzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLmRpc2staW9wcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZThlOGU4IiwiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtZmlsbC5nb29kIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLmNyaXRpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAvKiBUcmVuZCBTdHlsZXMgKi8KICAgICAgLnRyZW5kLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50cmVuZC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudHJlbmQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC50cmVuZC11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudHJlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAudHJlbmQtZ3JhcGggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLXN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAudHJlbmQtbGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICR7aC5iZFRoZW1lKCIjOTk5OTk5IiwiIzY2NjY2NiIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgfQoKICAgICAgLnRyZW5kLWFyZWEgewogICAgICAgIGZpbGw6ICR7aC5iZFRoZW1lKCJyZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMDgpIiwicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC8qIENvbnRleHQgTWVudSAqLwogICAgICBkZWVzLWNvbnRleHRtZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYF07Y29uc3RydWN0b3IoKXtzdXBlcigpLGZhKHRoaXMsQSl9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgICR7dGhpcy5ncmlkQWN0aW9ucy5sZW5ndGg+MD93YAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcChDPT53YAogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiAKICAgICAgICAgICAgICAgIEBjbGlja2VkPSR7KCk9PnRoaXMuaGFuZGxlR3JpZEFjdGlvbihDKX0KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBzaXplPSJzbSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke0MuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uPSR7Qy5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgICAgICAgICAke0MubmFtZX0KICAgICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoQz0+dGhpcy5yZW5kZXJUaWxlKEMpKX0KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuY29udGV4dE1lbnVWaXNpYmxlP3dgCiAgICAgICAgPGRlZXMtY29udGV4dG1lbnUKICAgICAgICAgIC54PSR7dGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnh9CiAgICAgICAgICAueT0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55fQogICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMuY29udGV4dE1lbnVBY3Rpb25zfQogICAgICAgICAgQGNsaWNrZWQ9JHsoKT0+dGhpcy5jb250ZXh0TWVudVZpc2libGU9ITF9CiAgICAgICAgPjwvZGVlcy1jb250ZXh0bWVudT4KICAgICAgYDoiIn0KICAgIGB9cmVuZGVyVGlsZShDKXtsZXQgej1DLmFjdGlvbnMmJkMuYWN0aW9ucy5sZW5ndGg+MCxFPXomJkMuYWN0aW9ucy5sZW5ndGg9PT0xLFQ9Qy5jb2x1bW5TcGFuJiZDLmNvbHVtblNwYW4+MT9DLmNvbHVtblNwYW46dm9pZCAwO3JldHVybiB3YAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InN0YXRzLXRpbGUgJHtFPyJjbGlja2FibGUiOiIifSIKICAgICAgICBzdHlsZT0iJHtUP2BncmlkLWNvbHVtbjogc3BhbiAke1R9YDoiIn0iCiAgICAgICAgQGNsaWNrPSR7RT8oKT0+dGhpcy5oYW5kbGVUaWxlQWN0aW9uKEMuYWN0aW9uc1swXSxDKTp2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7ej8kPT50aGlzLnNob3dDb250ZXh0TWVudSgkLEMpOnZvaWQgMH0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0idGlsZS10aXRsZSI+JHtDLnRpdGxlfTwvaDM+CiAgICAgICAgICAke0MuaWNvbj93YAogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJ0aWxlLWljb24iIC5pY29uPSR7Qy5pY29ufSBzaXplPSJzbWFsbCI+PC9kZWVzLWljb24+CiAgICAgICAgICBgOiIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQoQyl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHtDLmRlc2NyaXB0aW9uJiZDLnR5cGUhPT0idHJlbmQiP3dgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWRlc2NyaXB0aW9uIj4ke0MuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclRpbGVDb250ZW50KEMpe3N3aXRjaChDLnR5cGUpe2Nhc2UibnVtYmVyIjpyZXR1cm4gd2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiIHN0eWxlPSIke0MuY29sb3I/YGNvbG9yOiAke0MuY29sb3J9YDoiIn0iPgogICAgICAgICAgICA8c3Bhbj4ke0MudmFsdWV9PC9zcGFuPgogICAgICAgICAgICAke0MudW5pdD93YDxzcGFuIGNsYXNzPSJ0aWxlLXVuaXQiPiR7Qy51bml0fTwvc3Bhbj5gOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDtjYXNlImdhdWdlIjpyZXR1cm4gdGhpcy5yZW5kZXJHYXVnZShDKTtjYXNlInBlcmNlbnRhZ2UiOnJldHVybiB0aGlzLnJlbmRlclBlcmNlbnRhZ2UoQyk7Y2FzZSJ0cmVuZCI6cmV0dXJuIHRoaXMucmVuZGVyVHJlbmQoQyk7Y2FzZSJtdWx0aVBlcmNlbnRhZ2UiOnJldHVybiB0aGlzLnJlbmRlck11bHRpUGVyY2VudGFnZShDKTtjYXNlImNwdUNvcmVzIjpyZXR1cm4gdGhpcy5yZW5kZXJDcHVDb3JlcyhDKTtjYXNlInBhcnRpdGlvbiI6cmV0dXJuIHRoaXMucmVuZGVyUGFydGl0aW9uKEMpO2Nhc2UiZGlzayI6cmV0dXJuIHRoaXMucmVuZGVyRGlzayhDKTtjYXNlInRleHQiOnJldHVybiB3YAogICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC12YWx1ZSIgc3R5bGU9IiR7Qy5jb2xvcj9gY29sb3I6ICR7Qy5jb2xvcn1gOiIifSI+CiAgICAgICAgICAgICR7Qy52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7ZGVmYXVsdDpyZXR1cm4gd2A8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke0MudmFsdWV9PC9kaXY+YH19cmVuZGVyR2F1Z2UoQyl7bGV0IHo9dHlwZW9mIEMudmFsdWU9PSJudW1iZXIiP0MudmFsdWU6cGFyc2VGbG9hdChDLnZhbHVlKSxFPUMuZ2F1Z2VPcHRpb25zfHx7bWluOjAsbWF4OjEwMH0sVD0oei1FLm1pbikvKEUubWF4LUUubWluKSoxMDAsJD0xMjAsVj03MCxVPTYvMisyLHJlPTQwLGo9JC8yLG1lPVYtVSx3ZT1qLXJlLEg9bWUsY2U9aityZSxXPWBNICR7d2V9ICR7SH0gQSAke3JlfSAke3JlfSAwIDAgMSAke2NlfSAke21lfWAsRD1NYXRoLlBJKnJlLE89RC1EKlQvMTAwLFo9Qy5jb2xvcnx8aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI4LjglKSIsImhzbCgyMTAgNDAlIDc4JSkiKTtpZihFLnRocmVzaG9sZHMpe2xldCBZPVsuLi5FLnRocmVzaG9sZHNdLnNvcnQoKG9lLGdlKT0+Z2UudmFsdWUtb2UudmFsdWUpO2ZvcihsZXQgb2Ugb2YgWSlpZih6Pj1vZS52YWx1ZSl7Wj1vZS5jb2xvcjticmVha319cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAkeyR9ICR7Vn0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7V30iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke1d9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtafSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PSIke0R9IgogICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0PSIke099IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8IS0tIFZhbHVlIHRleHQgLS0+CiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJnYXVnZS10ZXh0IiB4PSIke2p9IiB5PSIke21lLTh9IiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIj4KICAgICAgICAgICAgICA8dHNwYW4+JHt6fTwvdHNwYW4+JHtDLnVuaXQ/d2A8dHNwYW4gY2xhc3M9ImdhdWdlLXVuaXQiIGR4PSIyIiBkeT0iMCI+JHtDLnVuaXR9PC90c3Bhbj5gOiIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclBlcmNlbnRhZ2UoQyl7bGV0IHo9dHlwZW9mIEMudmFsdWU9PSJudW1iZXIiP0MudmFsdWU6cGFyc2VGbG9hdChDLnZhbHVlKSxFPU1hdGgubWluKDEwMCxNYXRoLm1heCgwLHopKTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLXZhbHVlIj4ke0V9JTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2UtYmFyIj4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJwZXJjZW50YWdlLWZpbGwiIAogICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7RX0lOyAke0MuY29sb3I/YGJhY2tncm91bmQ6ICR7Qy5jb2xvcn1gOiIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclRyZW5kKEMpe2lmKCFDLnRyZW5kRGF0YXx8Qy50cmVuZERhdGEubGVuZ3RoPDIpcmV0dXJuIHdgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHtDLnZhbHVlfTwvZGl2PmA7bGV0IHo9Qy50cmVuZERhdGEsRT1NYXRoLm1heCguLi56KSxUPU1hdGgubWluKC4uLnopLCQ9RS1UfHwxLFY9MzAwLFI9MzIsVT0yLHJlPXoubWFwKChtZSx3ZSk9PntsZXQgSD13ZS8oei5sZW5ndGgtMSkqVixjZT1VKyhSLTIqVSktKG1lLVQpLyQqKFItMipVKTtyZXR1cm5gJHtIfSwke2NlfWB9KS5qb2luKCIgIiksaj1gMCwke1J9ICR7cmV9ICR7Vn0sJHtSfWA7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InRyZW5kLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0cmVuZC12YWx1ZSI+JHtDLnZhbHVlfTwvc3Bhbj4KICAgICAgICAgICR7Qy51bml0P3dgPHNwYW4gY2xhc3M9InRyZW5kLXVuaXQiPiR7Qy51bml0fTwvc3Bhbj5gOiIifQogICAgICAgICAgJHtDLmRlc2NyaXB0aW9uP3dgPHNwYW4gY2xhc3M9InRyZW5kLWxhYmVsIj4ke0MuZGVzY3JpcHRpb259PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtZ3JhcGgiPgogICAgICAgICAgPHN2ZyBjbGFzcz0idHJlbmQtc3ZnIiB2aWV3Qm94PSIwIDAgJHtWfSAke1J9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9InRyZW5kLWFyZWEiIHBvaW50cz0iJHtqfSIgLz4KICAgICAgICAgICAgPHBvbHlsaW5lIGNsYXNzPSJ0cmVuZC1saW5lIiBwb2ludHM9IiR7cmV9IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJNdWx0aVBlcmNlbnRhZ2UoQyl7aWYoIUMucGVyY2VudGFnZXN8fEMucGVyY2VudGFnZXMubGVuZ3RoPT09MClyZXR1cm4gd2A8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke0MudmFsdWV9PC9kaXY+YDtsZXQgej1DLnBlcmNlbnRhZ2VzLnNsaWNlKDAsMyk7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtcyI+CiAgICAgICAgICAke3oubWFwKEU9PntsZXQgVD1NYXRoLm1pbigxMDAsTWF0aC5tYXgoMCxFLnZhbHVlKSk7cmV0dXJuIHdgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtbGFiZWwiPiR7RS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLXZhbHVlIj4ke1R9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtZmlsbCIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7VH0lOyAke0UuY29sb3I/YGJhY2tncm91bmQ6ICR7RS5jb2xvcn1gOiIifSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckNwdUNvcmVzKEMpe2lmKCFDLmNvcmVzRGF0YXx8Qy5jb3Jlc0RhdGEubGVuZ3RoPT09MClyZXR1cm4gd2A8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke0MudmFsdWV9PC9kaXY+YDtsZXQgej1DLmNvcmVzRGF0YSxFPU1hdGgucm91bmQoei5yZWR1Y2UoKHJlLGopPT5yZStqLnVzYWdlLDApL3oubGVuZ3RoKSxUPXJlPT5yZTw1MD8ibG93IjpyZTw4MD8ibWVkaXVtIjoiaGlnaCIsJD16Lmxlbmd0aCoyNCsoei5sZW5ndGgtMSkqMyxWPUMuY29sdW1uU3Bhbnx8MSxSPXRoaXMubWluVGlsZVdpZHRoKlYrKFYtMSkqdGhpcy5nYXAtMzIsVT0kPFIqLjY2NjtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3Jlcy1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImNwdS1jb3Jlcy12YWx1ZSI+JHtFfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7ei5sZW5ndGh9IGNvcmVzPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3Jlcy1iYXJzICR7VT8iY2VudGVyZWQiOiIifSI+CiAgICAgICAgICAke3oubWFwKHJlPT57bGV0IGo9TWF0aC5taW4oMTAwLE1hdGgubWF4KDAscmUudXNhZ2UpKSxtZT1UKGopO3JldHVybiB3YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci1jb250YWluZXIiIHRpdGxlPSJDb3JlICR7cmUubGFiZWx8fHJlLmlkfTogJHtqfSUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmUtYmFyLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImNwdS1jb3JlLWJhci1maWxsICR7bWV9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7an0lIgogICAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICR7ei5sZW5ndGg8PTE2P3dgCiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZS1sYWJlbCI+JHtyZS5sYWJlbHx8cmUuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0pfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9Zm9ybWF0Qnl0ZXMoQyl7aWYoQz09PTApcmV0dXJuIjAgQiI7bGV0IHo9MTAyNCxFPVsiQiIsIktCIiwiTUIiLCJHQiIsIlRCIiwiUEIiXSxUPU1hdGguZmxvb3IoTWF0aC5sb2coQykvTWF0aC5sb2coeikpO3JldHVybiBwYXJzZUZsb2F0KChDL01hdGgucG93KHosVCkpLnRvRml4ZWQoMSkpKyIgIitFW1RdfXJlbmRlclBhcnRpdGlvbihDKXtpZighQy5wYXJ0aXRpb25EYXRhKXJldHVybiB3YDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiPiR7Qy52YWx1ZX08L2Rpdj5gO2xldHt1c2VkOnosdG90YWw6RSxmaWxlc3lzdGVtOlQsbW91bnRQb2ludDokfT1DLnBhcnRpdGlvbkRhdGEsVj1NYXRoLm1pbigxMDAsTWF0aC5tYXgoMCx6L0UqMTAwKSksUj1FLXosVT0oKT0+Vj49OTA/ImNyaXRpY2FsIjpWPj03NT8id2FybmluZyI6IiI7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24taGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tcGVyY2VudGFnZSI+JHtNYXRoLnJvdW5kKFYpfSU8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLWJhciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJwYXJ0aXRpb24tYmFyLWZpbGwgJHtVKCl9IgogICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7Vn0lIgogICAgICAgICAgPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1zdGF0cyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC1sYWJlbCI+VXNlZDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1zdGF0LXZhbHVlIj4ke3RoaXMuZm9ybWF0Qnl0ZXMoeil9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC1sYWJlbCI+RnJlZTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1zdGF0LXZhbHVlIj4ke3RoaXMuZm9ybWF0Qnl0ZXMoUil9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLW1ldGEiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1maWxlc3lzdGVtIj4ke1R9PC9zcGFuPgogICAgICAgICAgJHskP3dgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1tb3VudHBvaW50Ij4keyR9PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJEaXNrKEMpe2lmKCFDLmRpc2tEYXRhKXJldHVybiB3YDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiPiR7Qy52YWx1ZX08L2Rpdj5gO2xldHtjYXBhY2l0eTp6LG1vZGVsOkUsdHlwZTpULGlvcHM6JCxoZWFsdGg6Vn09Qy5kaXNrRGF0YSxSPVU9PlU+PTcwPyJnb29kIjpVPj0zMD8id2FybmluZyI6ImNyaXRpY2FsIjtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iZGlzay13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWNhcGFjaXR5Ij4ke3RoaXMuZm9ybWF0Qnl0ZXMoeil9PC9kaXY+CiAgICAgICAgJHtFfHxUP3dgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHtFP3dgPHNwYW4+JHtFfTwvc3Bhbj5gOiIifQogICAgICAgICAgICAke1Q/d2A8c3BhbiBjbGFzcz0iZGlzay10eXBlLWJhZGdlIj4ke1R9PC9zcGFuPmA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICAgIDxkaXYgY2xhc3M9ImRpc2stbWV0cmljcyI+CiAgICAgICAgICAkeyQ/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWlvcHMtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1pb3BzLWxhYmVsIj5SZWFkPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHskLnJlYWQudG9Mb2NhbGVTdHJpbmcoKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+V3JpdGU8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1pb3BzLXZhbHVlIj4keyQud3JpdGUudG9Mb2NhbGVTdHJpbmcoKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICAgICR7ViE9PXZvaWQgMD93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC1sYWJlbCI+SGVhbHRoPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staGVhbHRoLXZhbHVlIj4ke1Z9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke1IoVil9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7Vn0lIgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBoYW5kbGVHcmlkQWN0aW9uKEMpe0MuYWN0aW9uJiZhd2FpdCBDLmFjdGlvbigpfWFzeW5jIGhhbmRsZVRpbGVBY3Rpb24oQyx6KXtDLmFjdGlvbiYmYXdhaXQgQy5hY3Rpb24oKX1zaG93Q29udGV4dE1lbnUoQyx6KXtpZighei5hY3Rpb25zfHx6LmFjdGlvbnMubGVuZ3RoPT09MClyZXR1cm47Qy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbj17eDpDLmNsaWVudFgseTpDLmNsaWVudFl9LHRoaXMuY29udGV4dE1lbnVBY3Rpb25zPXouYWN0aW9ucyx0aGlzLmNvbnRleHRNZW51VmlzaWJsZT0hMDtsZXQgRT0oKT0+e3RoaXMuY29udGV4dE1lbnVWaXNpYmxlPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixFKX07c2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixFKX0sMTAwKX1zdGF0aWN7ZmEoaSxhKX19O3JldHVybiBxPWl9KSgpfSk7dmFyIGk0LEdyLE4xMixGMTIsTzEyLFIxMixyZnQsc2Z0PWIoKCk9Pnt1ZSgpO3gxKCk7UXgoKTtpND1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LEdyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxOMTI9KCgpPT57bGV0IHQ9W3BlKCJkZW1vLWRhc2hib2FyZC12aWV3IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0soKV0saTQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhY3RpdmF0ZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnA9PiJhY3RpdmF0ZWQiaW4gcCxnZXQ6cD0+cC5hY3RpdmF0ZWQsc2V0OihwLGwpPT57cC5hY3RpdmF0ZWQ9bH19LG1ldGFkYXRhOmN9LG4sbyksaTQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxkPWk9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KSxHcihpLGEpfSNlPUdyKHRoaXMsbiwhMSk7Z2V0IGFjdGl2YXRlZCgpe3JldHVybiB0aGlzLiNlfXNldCBhY3RpdmF0ZWQoYyl7dGhpcy4jZT1jfWN0eD1Hcih0aGlzLG8pO3N0YXRzVGlsZXM9W3tpZDoidXNlcnMiLHRpdGxlOiJBY3RpdmUgVXNlcnMiLHZhbHVlOjEyMzQsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6dXNlcnMiLGRlc2NyaXB0aW9uOiJPbmxpbmUgbm93Iixjb2xvcjoiIzIyYzU1ZSJ9LHtpZDoiYXBpLWNhbGxzIix0aXRsZToiQVBJIENhbGxzIix2YWx1ZTo0NTIwMCx0eXBlOiJ0cmVuZCIsaWNvbjoibHVjaWRlOmFjdGl2aXR5IixkZXNjcmlwdGlvbjoiKzEyJSBmcm9tIGxhc3QgaG91ciIsY29sb3I6IiMzYjgyZjYiLHRyZW5kRGF0YTpbMzJlMywzNWUzLDM4ZTMsNDFlMywzOWUzLDQyZTMsNDUyMDBdfSx7aWQ6ImhlYWx0aCIsdGl0bGU6IlN5c3RlbSBIZWFsdGgiLHZhbHVlOjk5LjksdW5pdDoiJSIsdHlwZToiZ2F1Z2UiLGljb246Imx1Y2lkZTpoZWFydC1wdWxzZSIsZGVzY3JpcHRpb246IkFsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsIixjb2xvcjoiIzEwYjk4MSIsZ2F1Z2VPcHRpb25zOnttaW46MCxtYXg6MTAwLHRocmVzaG9sZHM6W3t2YWx1ZTo4MCxjb2xvcjoiI2VmNDQ0NCJ9LHt2YWx1ZTo5NSxjb2xvcjoiI2Y1OWUwYiJ9LHt2YWx1ZToxMDAsY29sb3I6IiMxMGI5ODEifV19fSx7aWQ6InJlc3BvbnNlIix0aXRsZToiQXZnIFJlc3BvbnNlIix2YWx1ZToxMjcsdW5pdDoibXMiLHR5cGU6Im51bWJlciIsaWNvbjoibHVjaWRlOnRpbWVyIixkZXNjcmlwdGlvbjoiLTE1bXMgZnJvbSB5ZXN0ZXJkYXkiLGNvbG9yOiIjOGI1Y2Y2In0se2lkOiJyZXNvdXJjZXMiLHRpdGxlOiJSZXNvdXJjZSBVc2FnZSIsdmFsdWU6IiIsdHlwZToibXVsdGlQZXJjZW50YWdlIixpY29uOiJsdWNpZGU6c2VydmVyIixwZXJjZW50YWdlczpbe2xhYmVsOiJDUFUiLHZhbHVlOjY3LGNvbG9yOiIjM2I4MmY2In0se2xhYmVsOiJNZW1vcnkiLHZhbHVlOjg0LGNvbG9yOiIjOGI1Y2Y2In0se2xhYmVsOiJEaXNrIix2YWx1ZTo0NSxjb2xvcjoiIzEwYjk4MSJ9XX0se2lkOiJyZXF1ZXN0cyIsdGl0bGU6IlJlcXVlc3RzL3NlYyIsdmFsdWU6MTg1MCx0eXBlOiJ0cmVuZCIsaWNvbjoibHVjaWRlOnphcCIsZGVzY3JpcHRpb246IkN1cnJlbnQgdGhyb3VnaHB1dCIsY29sb3I6IiMwNmI2ZDQiLHRyZW5kRGF0YTpbMTIwMCwxNDAwLDEzNTAsMTYwMCwxNzUwLDE2ODAsMTg1MF19XTtvbkFjdGl2YXRlKGMpe3RoaXMuY3R4PWMsdGhpcy5hY3RpdmF0ZWQ9ITAsY29uc29sZS5sb2coIkRhc2hib2FyZCBhY3RpdmF0ZWQgd2l0aCBjb250ZXh0OiIsYyksYy5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHtoZWFkaW5nOiJEYXNoYm9hcmQiLGdyb3Vwczpbe25hbWU6IlF1aWNrIEFjY2VzcyIsaWNvbk5hbWU6Imx1Y2lkZTp6YXAiLGl0ZW1zOlt7a2V5OiJPdmVydmlldyIsaWNvbk5hbWU6ImxheW91dERhc2hib2FyZCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiT3ZlcnZpZXciKX0se2tleToiUmVjZW50IixpY29uTmFtZToiY2xvY2siLGJhZGdlOjUsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUmVjZW50Iil9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImFjdGlvbiIsa2V5OiJSZWZyZXNoIERhdGEiLGljb25OYW1lOiJsdWNpZGU6cmVmcmVzaEN3IixhY3Rpb246KCk9PmFsZXJ0KCJSZWZyZXNoaW5nIGRhc2hib2FyZCBkYXRhLi4uIil9XX0se25hbWU6IkZpbHRlcnMiLGljb25OYW1lOiJsdWNpZGU6ZmlsdGVyIixpdGVtczpbe3R5cGU6ImhlYWRlciIsbGFiZWw6IlRpbWUgUmFuZ2UifSx7dHlwZToiZmlsdGVyIixrZXk6IkxpdmUgVXBkYXRlcyIsaWNvbk5hbWU6Imx1Y2lkZTpyYWRpbyIsYWN0aXZlOiEwLG9uVG9nZ2xlOnA9PmNvbnNvbGUubG9nKCJMaXZlIHVwZGF0ZXM6IixwKX0se3R5cGU6ImZpbHRlciIsa2V5OiJTaG93IEFyY2hpdmVkIixpY29uTmFtZToibHVjaWRlOmFyY2hpdmUiLGFjdGl2ZTohMSxvblRvZ2dsZTpwPT5jb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLHApfSx7dHlwZToiZGl2aWRlciJ9LHt0eXBlOiJtdWx0aUZpbHRlciIsa2V5OiJEYXRhIFNvdXJjZXMiLGljb25OYW1lOiJsdWNpZGU6ZGF0YWJhc2UiLG9wdGlvbnM6W3trZXk6ImFwaSIsbGFiZWw6IkFQSSBTZXJ2ZXIiLGNoZWNrZWQ6ITAsaWNvbk5hbWU6Imx1Y2lkZTpzZXJ2ZXIifSx7a2V5OiJ3ZWIiLGxhYmVsOiJXZWIgVHJhZmZpYyIsY2hlY2tlZDohMCxpY29uTmFtZToibHVjaWRlOmdsb2JlIn0se2tleToibW9iaWxlIixsYWJlbDoiTW9iaWxlIEFwcCIsY2hlY2tlZDohMSxpY29uTmFtZToibHVjaWRlOnNtYXJ0cGhvbmUifV0sb25DaGFuZ2U6cD0+Y29uc29sZS5sb2coIkRhdGEgc291cmNlczoiLHApfV19LHtuYW1lOiJBbmFseXRpY3MiLGljb25OYW1lOiJsdWNpZGU6YmFyQ2hhcnQzIixpdGVtczpbe2tleToiTWV0cmljcyIsaWNvbk5hbWU6ImFjdGl2aXR5IixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJNZXRyaWNzIil9LHtrZXk6IlJlcG9ydHMiLGljb25OYW1lOiJmaWxlVGV4dCIsYmFkZ2U6Im5ldyIsYmFkZ2VWYXJpYW50OiJzdWNjZXNzIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJSZXBvcnRzIil9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImxpbmsiLGtleToiQW5hbHl0aWNzIERvY3MiLGljb25OYW1lOiJsdWNpZGU6ZXh0ZXJuYWxMaW5rIixocmVmOiJodHRwczovL2RvY3MuZXhhbXBsZS5jb20vYW5hbHl0aWNzIn1dfV19KSxjLmFwcHVpLnNldENvbnRlbnRUYWJzKFt7a2V5OiJPdmVydmlldyIsaWNvbk5hbWU6Imx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIk92ZXJ2aWV3IHRhYiIpfSx7a2V5OiJBbmFseXRpY3MiLGljb25OYW1lOiJsdWNpZGU6YmFyQ2hhcnQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFuYWx5dGljcyB0YWIiKX0se2tleToiUmVwb3J0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWxlVGV4dCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUmVwb3J0cyB0YWIiKX1dKX1vbkRlYWN0aXZhdGUoKXt0aGlzLmFjdGl2YXRlZD0hMSxjb25zb2xlLmxvZygiRGFzaGJvYXJkIGRlYWN0aXZhdGVkIil9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9CiAgICAgICAgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW4tYm90dG9tOiAzMnB4OyB9CiAgICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHtjPT5jb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IixjLmRldGFpbCl9CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgPGRpdiBjbGFzcz0iY3R4LWFjdGlvbnMiPgogICAgICAgIDxoMj5Db250ZXh0IEFjdGlvbnMgKGN0eC5hcHB1aSk8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVWaXNpYmxlKCExKX0+SGlkZSBNYWluIE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoITApfT5TaG93IE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRTZWNvbmRhcnlNZW51VmlzaWJsZSghMSl9PkhpZGUgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRTZWNvbmRhcnlNZW51VmlzaWJsZSghMCl9PlNob3cgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNWaXNpYmxlKCExKX0+SGlkZSBDb250ZW50IFRhYnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoITApfT5TaG93IENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudUNvbGxhcHNlZCghMCl9PkNvbGxhcHNlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKCExKX0+RXhwYW5kIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5zZXRCcmVhZGNydW1icyhbIkRhc2hib2FyZCIsIk92ZXJ2aWV3IiwiU3RhdHMiXSl9PlNldCBCcmVhZGNydW1iczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygicHJvamVjdHMiKX0+R28gdG8gUHJvamVjdHM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkubmF2aWdhdGVUb1ZpZXcoInNldHRpbmdzIix7c2VjdGlvbjoic2VjdXJpdHkifSl9PkdvIHRvIFNldHRpbmdzL1NlY3VyaXR5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLmFjdGl2aXR5TG9nLmFkZCh7dHlwZToiY3VzdG9tIix1c2VyOiJEZW1vIFVzZXIiLG1lc3NhZ2U6IkJ1dHRvbiBjbGlja2VkIGZyb20gY3R4ISIsaWNvbk5hbWU6Imx1Y2lkZTptb3VzZS1wb2ludGVyLWNsaWNrIn0pfT5BZGQgQWN0aXZpdHkgRW50cnk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLDk5KX0+U2V0IFRhc2tzIEJhZGdlIHRvIDk5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIGRhbmdlciIgQGNsaWNrPSR7KCk9PnRoaXMuY3R4Py5hcHB1aS5jbGVhck1haW5NZW51QmFkZ2UoInRhc2tzIil9PkNsZWFyIFRhc2tzIEJhZGdlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKT0+dGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUoITAsMSl9PkF1dG8taGlkZSBUYWJzICjiiaQxKTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpPT50aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNBdXRvSGlkZSghMSl9PkRpc2FibGUgQXV0by1oaWRlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIHN1Y2Nlc3MiIEBjbGljaz0keygpPT50aGlzLmFkZENsb3NlYWJsZVRhYigpfT5BZGQgQ2xvc2VhYmxlIFRhYjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9dGFiQ291bnRlcj0wO2FkZENsb3NlYWJsZVRhYigpe2lmKCF0aGlzLmN0eClyZXR1cm47dGhpcy50YWJDb3VudGVyKys7bGV0IGM9YFRhYiAke3RoaXMudGFiQ291bnRlcn1gO3RoaXMuY3R4LmFwcHVpLmFkZENvbnRlbnRUYWIoe2tleTpjLGljb25OYW1lOiJsdWNpZGU6ZmlsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZyhgU2VsZWN0ZWQgJHtjfWApLGNsb3NlYWJsZTohMCxvbkNsb3NlOigpPT57dGhpcy5jdHg/LmFwcHVpLnJlbW92ZUNvbnRlbnRUYWIoYyl9fSl9fTtyZXR1cm4gZD1pfSkoKSxGMTI9KCgpPT57bGV0IHQ9W3BlKCJkZW1vLXNldHRpbmdzLXZpZXciKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXTt2YXIgbD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtLKCldLGk0KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VjdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InNlY3Rpb24iaW4gZyxnZXQ6Zz0+Zy5zZWN0aW9uLHNldDooZyx5KT0+e2cuc2VjdGlvbj15fX0sbWV0YWRhdGE6Zn0sbixvKSxpNCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imhhc0NoYW5nZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJoYXNDaGFuZ2VzImluIGcsZ2V0Omc9PmcuaGFzQ2hhbmdlcyxzZXQ6KGcseSk9PntnLmhhc0NoYW5nZXM9eX19LG1ldGFkYXRhOmZ9LGMscCksaTQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KSxHcihpLGEpfSNlPUdyKHRoaXMsbiwiZ2VuZXJhbCIpO2dldCBzZWN0aW9uKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNlY3Rpb24oZil7dGhpcy4jZT1mfSN0PShHcih0aGlzLG8pLEdyKHRoaXMsYywhMSkpO2dldCBoYXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGhhc0NoYW5nZXMoZil7dGhpcy4jdD1mfWFwcHVpPUdyKHRoaXMscCk7b25BY3RpdmF0ZShmKXt0aGlzLmFwcHVpPWYuYXBwdWksY29uc29sZS5sb2coIlNldHRpbmdzIGFjdGl2YXRlZCB3aXRoIHBhcmFtczoiLGYucGFyYW1zKSxmLnBhcmFtcz8uc2VjdGlvbiYmKHRoaXMuc2VjdGlvbj1mLnBhcmFtcy5zZWN0aW9uKSxmLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoe2hlYWRpbmc6IlNldHRpbmdzIixncm91cHM6W3tuYW1lOiJBY2NvdW50IixpY29uTmFtZToibHVjaWRlOnVzZXIiLGl0ZW1zOlt7a2V5OiJnZW5lcmFsIixpY29uTmFtZToic2V0dGluZ3MiLGFjdGlvbjooKT0+dGhpcy5zaG93U2VjdGlvbigiZ2VuZXJhbCIpfSx7a2V5OiJwcm9maWxlIixpY29uTmFtZToidXNlciIsYWN0aW9uOigpPT50aGlzLnNob3dTZWN0aW9uKCJwcm9maWxlIil9LHtrZXk6InNlY3VyaXR5IixpY29uTmFtZToic2hpZWxkIixhY3Rpb246KCk9PnRoaXMuc2hvd1NlY3Rpb24oInNlY3VyaXR5Iil9XX0se25hbWU6IlByZWZlcmVuY2VzIixpY29uTmFtZToibHVjaWRlOnNsaWRlcnMiLGl0ZW1zOlt7a2V5OiJub3RpZmljYXRpb25zIixpY29uTmFtZToiYmVsbCIsYmFkZ2U6MyxhY3Rpb246KCk9PnRoaXMuc2hvd1NlY3Rpb24oIm5vdGlmaWNhdGlvbnMiKX0se2tleToiYXBwZWFyYW5jZSIsaWNvbk5hbWU6InBhbGV0dGUiLGFjdGlvbjooKT0+dGhpcy5zaG93U2VjdGlvbigiYXBwZWFyYW5jZSIpfV19XX0pLGYuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pLGYuYXBwdWkuc2V0Q29udGVudFRhYnMoW10pfW9uRGVhY3RpdmF0ZSgpe2NvbnNvbGUubG9nKCJTZXR0aW5ncyBkZWFjdGl2YXRlZCIpLHRoaXMuaGFzQ2hhbmdlcz0hMX1jYW5EZWFjdGl2YXRlKCl7cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcz8iWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBMZWF2ZSBhbnl3YXk/IjohMH1zaG93U2VjdGlvbihmKXt0aGlzLnNlY3Rpb249Zix0aGlzLmFwcHVpPy5zZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKGYpfXNpbXVsYXRlQ2hhbmdlKCl7dGhpcy5oYXNDaGFuZ2VzPSEwfXJlbmRlcigpe3JldHVybiB3YAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5zaW11bGF0ZUNoYW5nZSgpfT5NYWtlIENoYW5nZXM8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5oYXNDaGFuZ2VzP3dgPHAgY2xhc3M9Indhcm5pbmciPllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTmF2aWdhdGlvbiB3aWxsIHByb21wdCBmb3IgY29uZmlybWF0aW9uLjwvcD5gOiIifQogICAgYH19O3JldHVybiBsPWl9KSgpLE8xMj0oKCk9PntsZXQgdD1bcGUoImRlbW8tcHJvamVjdHMtdmlldyIpXSxlLGE9W10saSxyPXhlO3ZhciBzPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgbj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtpNChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpufSxudWxsLGEpLHM9aT1lLnZhbHVlLG4mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pLEdyKGksYSl9b25BY3RpdmF0ZShuKXtuLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoe2hlYWRpbmc6IlByb2plY3RzIixncm91cHM6W3tuYW1lOiJNeSBQcm9qZWN0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmb2xkZXIiLGl0ZW1zOlt7a2V5OiJBY3RpdmUiLGljb25OYW1lOiJmb2xkZXIiLGJhZGdlOjMsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQWN0aXZlIil9LHtrZXk6IkFyY2hpdmVkIixpY29uTmFtZToiYXJjaGl2ZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQXJjaGl2ZWQiKX0se2tleToiU2hhcmVkIixpY29uTmFtZToidXNlcnMiLGJhZGdlOjIsYmFkZ2VWYXJpYW50OiJ3YXJuaW5nIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJTaGFyZWQiKX1dfSx7bmFtZToiUXVpY2sgQWN0aW9ucyIsaWNvbk5hbWU6Imx1Y2lkZTp6YXAiLGl0ZW1zOlt7dHlwZToiYWN0aW9uIixrZXk6Ik5ldyBQcm9qZWN0IixpY29uTmFtZToibHVjaWRlOmZvbGRlclBsdXMiLGFjdGlvbjooKT0+YWxlcnQoIkNyZWF0ZSBuZXcgcHJvamVjdCIpfSx7dHlwZToiYWN0aW9uIixrZXk6IkltcG9ydCIsaWNvbk5hbWU6Imx1Y2lkZTpkb3dubG9hZCIsYWN0aW9uOigpPT5hbGVydCgiSW1wb3J0IHByb2plY3QiKX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToibGluayIsa2V5OiJUZW1wbGF0ZXMiLGljb25OYW1lOiJsdWNpZGU6bGF5b3V0VGVtcGxhdGUiLGhyZWY6Imh0dHBzOi8vdGVtcGxhdGVzLmV4YW1wbGUuY29tIn1dfV19KSxuLmFwcHVpLnNldENvbnRlbnRUYWJzKFt7a2V5OiJHcmlkIixpY29uTmFtZToibHVjaWRlOmdyaWQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkdyaWQgdmlldyIpfSx7a2V5OiJMaXN0IixpY29uTmFtZToibHVjaWRlOmxpc3QiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkxpc3QgdmlldyIpfSx7a2V5OiJCb2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTprYW5iYW4iLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkJvYXJkIHZpZXciKX1dKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnByb2plY3RzIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAucHJvamVjdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsKICAgICAgICB9CiAgICAgICAgLnByb2plY3Q6aG92ZXIgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IGgzIHsgY29sb3I6ICNmYWZhZmE7IG1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAucHJvamVjdCBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgICAgLmJhZGdlIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxNDUzMmQ7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlByb2plY3RzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0icHJvamVjdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkZyb250ZW5kIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QtYmFzZWQgZGFzaGJvYXJkIGFwcGxpY2F0aW9uPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkFQSSBTZXJ2ZXIgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPk5vZGUuanMgUkVTVCBBUEkgYmFja2VuZDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Nb2JpbGUgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdCBOYXRpdmUgaU9TL0FuZHJvaWQgYXBwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkRvY3VtZW50YXRpb248L2gzPgogICAgICAgICAgPHA+VGVjaG5pY2FsIGRvY3VtZW50YXRpb24gc2l0ZTwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfX07cmV0dXJuIHM9aX0pKCksUjEyPSgoKT0+e2xldCB0PVtwZSgiZGVtby10YXNrcy12aWV3IildLGUsYT1bXSxpLHI9eGU7dmFyIHM9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO2k0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOm59LG51bGwsYSkscz1pPWUudmFsdWUsbiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSksR3IoaSxhKX1vbkFjdGl2YXRlKG4pe24uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7aGVhZGluZzoiVGFza3MiLGdyb3Vwczpbe25hbWU6IlZpZXdzIixpY29uTmFtZToibHVjaWRlOmV5ZSIsaXRlbXM6W3trZXk6IkFsbCBUYXNrcyIsaWNvbk5hbWU6Imxpc3QiLGJhZGdlOjEyLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFsbCIpfSx7a2V5OiJUb2RheSIsaWNvbk5hbWU6ImNhbGVuZGFyIixiYWRnZTozLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlRvZGF5Iil9LHtrZXk6IlVwY29taW5nIixpY29uTmFtZToiY2xvY2siLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlVwY29taW5nIil9LHtrZXk6IkNvbXBsZXRlZCIsaWNvbk5hbWU6ImNoZWNrQ2lyY2xlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJDb21wbGV0ZWQiKX1dfSx7bmFtZToiRmlsdGVycyIsaWNvbk5hbWU6Imx1Y2lkZTpmaWx0ZXIiLGl0ZW1zOlt7dHlwZToiaGVhZGVyIixsYWJlbDoiUHJpb3JpdHkifSx7dHlwZToibXVsdGlGaWx0ZXIiLGtleToiUHJpb3JpdHkiLGljb25OYW1lOiJsdWNpZGU6ZmxhZyIsb3B0aW9uczpbe2tleToiaGlnaCIsbGFiZWw6IkhpZ2giLGNoZWNrZWQ6ITAsaWNvbk5hbWU6Imx1Y2lkZTphbGVydENpcmNsZSJ9LHtrZXk6Im1lZGl1bSIsbGFiZWw6Ik1lZGl1bSIsY2hlY2tlZDohMCxpY29uTmFtZToibHVjaWRlOm1pbnVzQ2lyY2xlIn0se2tleToibG93IixsYWJlbDoiTG93IixjaGVja2VkOiExLGljb25OYW1lOiJsdWNpZGU6Y2lyY2xlIn1dLG9uQ2hhbmdlOm89PmNvbnNvbGUubG9nKCJQcmlvcml0eSBmaWx0ZXI6IixvKX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToiaGVhZGVyIixsYWJlbDoiT3B0aW9ucyJ9LHt0eXBlOiJmaWx0ZXIiLGtleToiU2hvdyBTdWJ0YXNrcyIsaWNvbk5hbWU6Imx1Y2lkZTpsaXN0VHJlZSIsYWN0aXZlOiEwLG9uVG9nZ2xlOm89PmNvbnNvbGUubG9nKCJTaG93IHN1YnRhc2tzOiIsbyl9LHt0eXBlOiJmaWx0ZXIiLGtleToiU2hvdyBDb21wbGV0ZWQiLGljb25OYW1lOiJsdWNpZGU6Y2hlY2tTcXVhcmUiLGFjdGl2ZTohMSxvblRvZ2dsZTpvPT5jb25zb2xlLmxvZygiU2hvdyBjb21wbGV0ZWQ6IixvKX1dfSx7bmFtZToiQWN0aW9ucyIsaWNvbk5hbWU6Imx1Y2lkZTp6YXAiLGl0ZW1zOlt7dHlwZToiYWN0aW9uIixrZXk6IkFkZCBUYXNrIixpY29uTmFtZToibHVjaWRlOnBsdXMiLGFjdGlvbjooKT0+YWxlcnQoIkFkZCBuZXcgdGFzayIpfSx7dHlwZToiYWN0aW9uIixrZXk6IkltcG9ydCBUYXNrcyIsaWNvbk5hbWU6Imx1Y2lkZTp1cGxvYWQiLGFjdGlvbjooKT0+YWxlcnQoIkltcG9ydCB0YXNrcyIpfSx7dHlwZToiZGl2aWRlciJ9LHt0eXBlOiJhY3Rpb24iLGtleToiQ2xlYXIgQ29tcGxldGVkIixpY29uTmFtZToibHVjaWRlOnRyYXNoMiIsdmFyaWFudDoiZGFuZ2VyIixjb25maXJtTWVzc2FnZToiRGVsZXRlIGFsbCBjb21wbGV0ZWQgdGFza3M/IixhY3Rpb246KCk9PmFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpfV19XX0pLG4uYXBwdWkuc2V0Q29udGVudFRhYnMoW3trZXk6Ikxpc3QiLGljb25OYW1lOiJsdWNpZGU6bGlzdCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiTGlzdCIpfSx7a2V5OiJDYWxlbmRhciIsaWNvbk5hbWU6Imx1Y2lkZTpjYWxlbmRhciIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQ2FsZW5kYXIiKX1dKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnRhc2stbGlzdCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAudGFzayB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIH0KICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjNTI1MjUyOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgICAudGFzay10ZXh0IHsgY29sb3I6ICNmYWZhZmE7IGZsZXg6IDE7IH0KICAgICAgICAuZHVlLWRhdGUgeyBjb2xvcjogIzczNzM3MzsgZm9udC1zaXplOiAxMnB4OyB9CiAgICAgICAgLnByaW9yaXR5IHsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgfQogICAgICAgIC5wcmlvcml0eS5oaWdoIHsgYmFja2dyb3VuZDogIzQ1MGEwYTsgY29sb3I6ICNmODcxNzE7IH0KICAgICAgICAucHJpb3JpdHkubWVkaXVtIHsgYmFja2dyb3VuZDogIzQ1MWEwMzsgY29sb3I6ICNmYmJmMjQ7IH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlRhc2tzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0idGFzay1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlJldmlldyBwdWxsIHJlcXVlc3QgIzQyPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub2RheTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBoaWdoIj5IaWdoPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhc2siPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPjwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9InRhc2stdGV4dCI+VXBkYXRlIGRvY3VtZW50YXRpb248L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPlRvbW9ycm93PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InByaW9yaXR5IG1lZGl1bSI+TWVkaXVtPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhc2siPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPjwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9InRhc2stdGV4dCI+V3JpdGUgdW5pdCB0ZXN0czwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+RGVjIDIwPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9fTtyZXR1cm4gcz1pfSkoKSxyZnQ9KCk9PntsZXQgdD17YnJhbmRpbmc6e2xvZ29JY29uOiJsdWNpZGU6Ym94Iixsb2dvVGV4dDoiQWNtZSBBcHAifSxhcHBCYXI6e21lbnVJdGVtczpbe25hbWU6IkZpbGUiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToiTmV3IFByb2plY3QiLHNob3J0Y3V0OiJDbWQrTiIsaWNvbk5hbWU6ImZpbGVQbHVzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk5ldyIpfSx7bmFtZToiT3Blbi4uLiIsc2hvcnRjdXQ6IkNtZCtPIixpY29uTmFtZToiZm9sZGVyT3BlbiIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJPcGVuIil9LHtuYW1lOiJSZWNlbnQgUHJvamVjdHMiLGFjdGlvbjphc3luYygpPT57fSxzdWJtZW51Olt7bmFtZToibXktYXBwIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gbXktYXBwIil9LHtuYW1lOiJjb21wb25lbnQtbGliIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpfV19LHtkaXZpZGVyOiEwfSx7bmFtZToiU2F2ZSBBbGwiLHNob3J0Y3V0OiJDbWQrUyIsaWNvbk5hbWU6InNhdmUiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiU2F2ZSIpfV19LHtuYW1lOiJFZGl0IixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlVuZG8iLHNob3J0Y3V0OiJDbWQrWiIsaWNvbk5hbWU6InVuZG8iLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiVW5kbyIpfSx7bmFtZToiUmVkbyIsc2hvcnRjdXQ6IkNtZCtTaGlmdCtaIixpY29uTmFtZToicmVkbyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJSZWRvIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiQ3V0IixzaG9ydGN1dDoiQ21kK1giLGljb25OYW1lOiJzY2lzc29ycyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJDdXQiKX0se25hbWU6IkNvcHkiLHNob3J0Y3V0OiJDbWQrQyIsaWNvbk5hbWU6ImNvcHkiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiQ29weSIpfSx7bmFtZToiUGFzdGUiLHNob3J0Y3V0OiJDbWQrViIsaWNvbk5hbWU6ImNsaXBib2FyZCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJQYXN0ZSIpfV19LHtuYW1lOiJWaWV3IixhY3Rpb246YXN5bmMoKT0+e30sc3VibWVudTpbe25hbWU6IlRvZ2dsZSBTaWRlYmFyIixzaG9ydGN1dDoiQ21kK0IiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKX0se25hbWU6IlRvZ2dsZSBBY3Rpdml0eSBMb2ciLHNob3J0Y3V0OiJDbWQrU2hpZnQrQSIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJUb2dnbGUgYWN0aXZpdHkiKX1dfSx7bmFtZToiSGVscCIsYWN0aW9uOmFzeW5jKCk9Pnt9LHN1Ym1lbnU6W3tuYW1lOiJEb2N1bWVudGF0aW9uIixpY29uTmFtZToiYm9vayIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJEb2NzIil9LHtuYW1lOiJLZXlib2FyZCBTaG9ydGN1dHMiLGljb25OYW1lOiJrZXlib2FyZCIsc2hvcnRjdXQ6IkNtZCsvIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNob3J0Y3V0cyIpfSx7ZGl2aWRlcjohMH0se25hbWU6IkFib3V0IixpY29uTmFtZToiaW5mbyIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJBYm91dCIpfV19XSxicmVhZGNydW1iczoiRGFzaGJvYXJkIixzaG93V2luZG93Q29udHJvbHM6ITAsc2hvd1NlYXJjaDohMCx1c2VyOntuYW1lOiJKYW5lIFNtaXRoIixlbWFpbDoiamFuZS5zbWl0aEBleGFtcGxlLmNvbSIsc3RhdHVzOiJvbmxpbmUifSxwcm9maWxlTWVudUl0ZW1zOlt7bmFtZToiUHJvZmlsZSIsaWNvbk5hbWU6InVzZXIiLGFjdGlvbjphc3luYygpPT5jb25zb2xlLmxvZygiUHJvZmlsZSIpfSx7bmFtZToiQWNjb3VudCBTZXR0aW5ncyIsaWNvbk5hbWU6InNldHRpbmdzIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIlNldHRpbmdzIil9LHtkaXZpZGVyOiEwfSx7bmFtZToiSGVscCAmIFN1cHBvcnQiLGljb25OYW1lOiJoZWxwQ2lyY2xlIixhY3Rpb246YXN5bmMoKT0+Y29uc29sZS5sb2coIkhlbHAiKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTaWduIE91dCIsaWNvbk5hbWU6ImxvZ091dCIsYWN0aW9uOmFzeW5jKCk9PmNvbnNvbGUubG9nKCJTaWduIG91dCIpfV19LHZpZXdzOlt7aWQ6ImRhc2hib2FyZCIsbmFtZToiRGFzaGJvYXJkIixpY29uTmFtZToibHVjaWRlOmhvbWUiLGNvbnRlbnQ6ImRlbW8tZGFzaGJvYXJkLXZpZXciLHJvdXRlOiJkYXNoYm9hcmQifSx7aWQ6InByb2plY3RzIixuYW1lOiJQcm9qZWN0cyIsaWNvbk5hbWU6Imx1Y2lkZTpmb2xkZXIiLGNvbnRlbnQ6ImRlbW8tcHJvamVjdHMtdmlldyIscm91dGU6InByb2plY3RzIixiYWRnZTozfSx7aWQ6InRhc2tzIixuYW1lOiJUYXNrcyIsaWNvbk5hbWU6Imx1Y2lkZTpjaGVja1NxdWFyZSIsY29udGVudDoiZGVtby10YXNrcy12aWV3Iixyb3V0ZToidGFza3MiLGJhZGdlOjEyfSx7aWQ6InNldHRpbmdzIixuYW1lOiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsY29udGVudDoiZGVtby1zZXR0aW5ncy12aWV3Iixyb3V0ZToic2V0dGluZ3MvOnNlY3Rpb24/In1dLG1haW5NZW51OntzZWN0aW9uczpbe25hbWU6Ik1haW4iLHZpZXdzOlsiZGFzaGJvYXJkIl19LHtuYW1lOiJXb3Jrc3BhY2UiLHZpZXdzOlsicHJvamVjdHMiLCJ0YXNrcyJdfV0sYm90dG9tSXRlbXM6WyJzZXR0aW5ncyJdfSxkZWZhdWx0VmlldzoiZGFzaGJvYXJkIixib3R0b21CYXI6e3Zpc2libGU6ITAsd2lkZ2V0czpbe2lkOiJzdGF0dXMiLGljb25OYW1lOiJsdWNpZGU6YWN0aXZpdHkiLGxhYmVsOiJTeXN0ZW0gT25saW5lIixzdGF0dXM6InN1Y2Nlc3MiLHRvb2x0aXA6IkFsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsIixvbkNsaWNrOigpPT5jb25zb2xlLmxvZygiU3RhdHVzIGNsaWNrZWQiKX0se2lkOiJub3RpZmljYXRpb25zIixpY29uTmFtZToibHVjaWRlOmJlbGwiLGxhYmVsOiIzIG5vdGlmaWNhdGlvbnMiLHN0YXR1czoid2FybmluZyIsdG9vbHRpcDoiWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMiLG9uQ2xpY2s6KCk9PmNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKX0se2lkOiJ2ZXJzaW9uIixpY29uTmFtZToibHVjaWRlOmdpdEJyYW5jaCIsbGFiZWw6InYxLjIuMyIscG9zaXRpb246InJpZ2h0Iix0b29sdGlwOiJDdXJyZW50IHZlcnNpb24ifV0sYWN0aW9uczpbe2lkOiJ0ZXJtaW5hbCIsaWNvbk5hbWU6Imx1Y2lkZTp0ZXJtaW5hbCIsdG9vbHRpcDoiT3BlbiBUZXJtaW5hbCIscG9zaXRpb246InJpZ2h0IixvbkNsaWNrOigpPT5jb25zb2xlLmxvZygiVGVybWluYWwgY2xpY2tlZCIpfV19LG9uVmlld0NoYW5nZTooaSxyKT0+e2NvbnNvbGUubG9nKGBWaWV3IGNoYW5nZWQgdG86ICR7aX0gKCR7ci5uYW1lfSlgKX0sb25TZWFyY2g6aT0+e2NvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IixpKX19LGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc05hbWU9ImRlbW8tY29udGFpbmVyIixlLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy1hcHB1aSIpO3JldHVybiBlLmFwcGVuZENoaWxkKGEpLHNldFRpbWVvdXQoYXN5bmMoKT0+e2F3YWl0IGEudXBkYXRlQ29tcGxldGUsYS5jb25maWd1cmUodCksc2V0VGltZW91dCgoKT0+e2EuYWN0aXZpdHlMb2cuYWRkTWFueShbe3R5cGU6ImxvZ2luIix1c2VyOiJKYW5lIFNtaXRoIixtZXNzYWdlOiJsb2dnZWQgaW4gZnJvbSBDaHJvbWUgb24gbWFjT1MifSx7dHlwZToiY3JlYXRlIix1c2VyOiJKYW5lIFNtaXRoIixtZXNzYWdlOidjcmVhdGVkIHByb2plY3QgIkZyb250ZW5kIEFwcCInfSx7dHlwZToidXBkYXRlIix1c2VyOiJKb2huIERvZSIsbWVzc2FnZToidXBkYXRlZCBBUEkgZG9jdW1lbnRhdGlvbiJ9LHt0eXBlOiJ2aWV3Iix1c2VyOiJKYW5lIFNtaXRoIixtZXNzYWdlOiJ2aWV3ZWQgZGFzaGJvYXJkIGFuYWx5dGljcyJ9LHt0eXBlOiJkZWxldGUiLHVzZXI6IkFkbWluIixtZXNzYWdlOiJyZW1vdmVkIGRlcHJlY2F0ZWQgZW5kcG9pbnQifSx7dHlwZToiY3VzdG9tIix1c2VyOiJTeXN0ZW0iLG1lc3NhZ2U6InNjaGVkdWxlZCBiYWNrdXAgY29tcGxldGVkIixpY29uTmFtZToibHVjaWRlOmRhdGFiYXNlIn1dKX0sNTAwKSxhLnZpZXdDaGFuZ2VkJC5zdWJzY3JpYmUoaT0+e2NvbnNvbGUubG9nKCJWaWV3IGNoYW5nZWQgZXZlbnQ6IixpKSxhLnNldEJyZWFkY3J1bWJzKGkudmlldy5uYW1lKX0pLGEudmlld0xpZmVjeWNsZSQuc3Vic2NyaWJlKGk9Pntjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsaS50eXBlLGkudmlld0lkKX0pLHNldFRpbWVvdXQoKCk9PnthLnNldE1haW5NZW51QmFkZ2UoInRhc2tzIiwxNSksYS5hY3Rpdml0eUxvZy5hZGQoe3R5cGU6InVwZGF0ZSIsdXNlcjoiU3lzdGVtIixtZXNzYWdlOiJuZXcgdGFza3MgYWRkZWQifSl9LDVlMyl9LDApLHdgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgJHtlfQogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGB9fSk7dmFyIFM4LG5WPWIoKCk9Pnt1ZSgpO1M4PWNsYXNze3ZpZXdzPW5ldyBNYXA7aW5zdGFuY2VzPW5ldyBNYXA7Y3VycmVudFZpZXdJZD1udWxsO2FwcHVpPW51bGw7c2V0QXBwdWlSZWYoZSl7dGhpcy5hcHB1aT1lfXJlZ2lzdGVyKGUpe3RoaXMudmlld3MuaGFzKGUuaWQpJiZjb25zb2xlLndhcm4oYFZpZXcgd2l0aCBpZCAiJHtlLmlkfSIgYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKSx0aGlzLnZpZXdzLnNldChlLmlkLGUpfXJlZ2lzdGVyQWxsKGUpe2UuZm9yRWFjaChhPT50aGlzLnJlZ2lzdGVyKGEpKX1nZXQoZSl7cmV0dXJuIHRoaXMudmlld3MuZ2V0KGUpfWdldFZpZXdJZHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnZpZXdzLmtleXMoKSl9Z2V0QWxsKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy52YWx1ZXMoKSl9Z2V0Um91dGUoZSl7bGV0IGE9dGhpcy52aWV3cy5nZXQoZSk7cmV0dXJuIGE/LnJvdXRlfHxhPy5pZHx8IiJ9ZmluZEJ5Um91dGUoZSl7Zm9yKGxldCBhIG9mIHRoaXMudmlld3MudmFsdWVzKCkpe2xldCBpPWEucm91dGV8fGEuaWQscj10aGlzLm1hdGNoUm91dGUoaSxlKTtpZihyIT09bnVsbClyZXR1cm57dmlldzphLHBhcmFtczpyfX19bWF0Y2hSb3V0ZShlLGEpe2xldCBpPWUuc3BsaXQoIi8iKSxyPWEuc3BsaXQoIi8iKTtpZihpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdLmVuZHNXaXRoKCI/Iikpe2lmKHIubGVuZ3RoPGkubGVuZ3RoLTF8fHIubGVuZ3RoPmkubGVuZ3RoKXJldHVybiBudWxsfWVsc2UgaWYoaS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbj17fTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGQ9aVtvXSxjPWQuZW5kc1dpdGgoIj8iKTtpZihjJiYoZD1kLnNsaWNlKDAsLTEpKSxkLnN0YXJ0c1dpdGgoIjoiKSl7bGV0IHA9ZC5zbGljZSgxKTtpZihyW29dIT09dm9pZCAwKW5bcF09cltvXTtlbHNlIGlmKCFjKXJldHVybiBudWxsfWVsc2UgaWYocltvXSE9PWQpcmV0dXJuIG51bGx9cmV0dXJuIG59YXN5bmMgY2FuTGVhdmVDdXJyZW50Vmlldygpe2lmKCF0aGlzLmN1cnJlbnRWaWV3SWQpcmV0dXJuITA7bGV0IGU9dGhpcy5pbnN0YW5jZXMuZ2V0KHRoaXMuY3VycmVudFZpZXdJZCk7aWYoIWUpcmV0dXJuITA7bGV0IGE9ZTtyZXR1cm4gdHlwZW9mIGEuY2FuRGVhY3RpdmF0ZT09ImZ1bmN0aW9uIj9hd2FpdCBhLmNhbkRlYWN0aXZhdGUoKTohMH1hc3luYyBhY3RpdmF0ZVZpZXcoZSxhLGkpe2xldCByPXRoaXMudmlld3MuZ2V0KGUpO2lmKCFyKXJldHVybiBjb25zb2xlLmVycm9yKGBWaWV3ICIke2V9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKSxudWxsO2xldCBzPXIuY2FjaGUhPT0hMTt0aGlzLmN1cnJlbnRWaWV3SWQmJnRoaXMuY3VycmVudFZpZXdJZCE9PWUmJmF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTtsZXQgbj1zP3RoaXMuaW5zdGFuY2VzLmdldChlKTp2b2lkIDA7aWYobiluLnN0eWxlLmRpc3BsYXk9IiI7ZWxzZXtpZihuPWF3YWl0IHRoaXMuY3JlYXRlVmlld0VsZW1lbnQociksIW4pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZWxlbWVudCBmb3IgdmlldyAiJHtlfSJgKSxudWxsO2EuYXBwZW5kQ2hpbGQobikscyYmdGhpcy5pbnN0YW5jZXMuc2V0KGUsbil9cmV0dXJuIHRoaXMuY3VycmVudFZpZXdJZD1lLGF3YWl0IHRoaXMuY2FsbE9uQWN0aXZhdGUobixlLGkpLG59YXN5bmMgZGVhY3RpdmF0ZVZpZXcoZSl7bGV0IGE9dGhpcy5pbnN0YW5jZXMuZ2V0KGUpO2lmKCFhKXJldHVybjtsZXQgaT1hO3R5cGVvZiBpLm9uRGVhY3RpdmF0ZT09ImZ1bmN0aW9uIiYmYXdhaXQgaS5vbkRlYWN0aXZhdGUoKSxhLnN0eWxlLmRpc3BsYXk9Im5vbmUifWFzeW5jIGNyZWF0ZVZpZXdFbGVtZW50KGUpe2xldCBhPWUuY29udGVudDtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIiYmIShhLnByb3RvdHlwZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSYmYS5jb25zdHJ1Y3Rvci5uYW1lPT09IkFzeW5jRnVuY3Rpb24iKXRyeXthPWF3YWl0IGEoKX1jYXRjaChyKXtyZXR1cm4gY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgYXN5bmMgY29udGVudCBmb3IgdmlldyAiJHtlLmlkfSI6YCxyKSxudWxsfWxldCBpO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYSk7ZWxzZSBpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilpZihhLnByb3RvdHlwZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KWk9bmV3IGE7ZWxzZXtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0idmlldy1jb250ZW50LXdyYXBwZXIiLHIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTogY29udGVudHM7IjtsZXQgcz1hKCk7bG4ocyxyKSxpPXJ9ZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7ZS5pZH0iYCksbnVsbDtyZXR1cm4gaS5kYXRhc2V0LnZpZXdJZD1lLmlkLGl9YXN5bmMgY2FsbE9uQWN0aXZhdGUoZSxhLGkpe2xldCByPWU7aWYodHlwZW9mIHIub25BY3RpdmF0ZT09ImZ1bmN0aW9uIil7bGV0IHM9e2FwcHVpOnRoaXMuYXBwdWksdmlld0lkOmEscGFyYW1zOml9O2F3YWl0IHIub25BY3RpdmF0ZShzKX19cmVuZGVyVmlldyhlLGEpe2xldCBpPXRoaXMudmlld3MuZ2V0KGUpO2lmKCFpKXJldHVybiBjb25zb2xlLmVycm9yKGBWaWV3ICIke2V9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKSxudWxsO2EuaW5uZXJIVE1MPSIiO2xldCByLHM9aS5jb250ZW50O2lmKHR5cGVvZiBzPT0ic3RyaW5nIilyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIilpZihzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXI9bmV3IHM7ZWxzZXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT0idmlldy1jb250ZW50LXdyYXBwZXIiLG4uc3R5bGUuY3NzVGV4dD0iZGlzcGxheTogY29udGVudHM7IjtsZXQgbz1zKCk7bG4obyxuKSxyPW59ZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7ZX0iYCksbnVsbDtyZXR1cm4gYS5hcHBlbmRDaGlsZChyKSx0aGlzLmluc3RhbmNlcy5zZXQoZSxyKSx0aGlzLmN1cnJlbnRWaWV3SWQ9ZSxyfWdldEN1cnJlbnRWaWV3SWQoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0lkfWdldEluc3RhbmNlKGUpe3JldHVybiB0aGlzLmluc3RhbmNlcy5nZXQoZSl9Y2xlYXJJbnN0YW5jZShlKXtsZXQgYT10aGlzLmluc3RhbmNlcy5nZXQoZSk7YSYmYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksdGhpcy5pbnN0YW5jZXMuZGVsZXRlKGUpLHRoaXMuY3VycmVudFZpZXdJZD09PWUmJih0aGlzLmN1cnJlbnRWaWV3SWQ9bnVsbCl9Y2xlYXJJbnN0YW5jZXMoKXtmb3IobGV0W2UsYV1vZiB0aGlzLmluc3RhbmNlcylhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTt0aGlzLmluc3RhbmNlcy5jbGVhcigpLHRoaXMuY3VycmVudFZpZXdJZD1udWxsfXVucmVnaXN0ZXIoZSl7cmV0dXJuIHRoaXMuY2xlYXJJbnN0YW5jZShlKSx0aGlzLnZpZXdzLmRlbGV0ZShlKX1jbGVhcigpe3RoaXMudmlld3MuY2xlYXIoKSx0aGlzLmNsZWFySW5zdGFuY2VzKCl9aGFzKGUpe3JldHVybiB0aGlzLnZpZXdzLmhhcyhlKX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnZpZXdzLnNpemV9fX0pO3ZhciBuZnQsb2Z0PWIoKCk9Pnt1ZSgpO25mdD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtby1tYWlubWVudS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tbWFpbm1lbnUtY29udGFpbmVyIj4KICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgIC5sb2dvSWNvbj0keyJsdWNpZGU6Ym94In0KICAgICAgLmxvZ29UZXh0PSR7IkFjbWUgQXBwIn0KICAgICAgLm1lbnVHcm91cHM9JHtbe3RhYnM6W3trZXk6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJEYXNoYm9hcmQiKX0se2tleToiSW5ib3giLGljb25OYW1lOiJsdWNpZGU6aW5ib3giLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkluYm94Iil9XX0se25hbWU6IldvcmtzcGFjZSIsdGFiczpbe2tleToiUHJvamVjdHMiLGljb25OYW1lOiJsdWNpZGU6Zm9sZGVyIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJQcm9qZWN0cyIpfSx7a2V5OiJUYXNrcyIsaWNvbk5hbWU6Imx1Y2lkZTpjaGVja1NxdWFyZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiVGFza3MiKX0se2tleToiRG9jdW1lbnRzIixpY29uTmFtZToibHVjaWRlOmZpbGVUZXh0IixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJEb2N1bWVudHMiKX1dfSx7bmFtZToiQW5hbHl0aWNzIix0YWJzOlt7a2V5OiJSZXBvcnRzIixpY29uTmFtZToibHVjaWRlOmJhckNoYXJ0MyIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUmVwb3J0cyIpfSx7a2V5OiJJbnNpZ2h0cyIsaWNvbk5hbWU6Imx1Y2lkZTpsaWdodGJ1bGIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkluc2lnaHRzIil9XX1dfQogICAgICAuYm90dG9tVGFicz0ke1t7a2V5OiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiU2V0dGluZ3MiKX0se2tleToiSGVscCIsaWNvbk5hbWU6Imx1Y2lkZTpoZWxwQ2lyY2xlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJIZWxwIil9XX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgfSk7dmFyIGdvLG1hLGxmdCxvVj1iKCgpPT57czIoKTtjbygpO21pKCk7dWUoKTtuMigpO29mdCgpO1ZlKCk7Z289ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxtYT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sbGZ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1hcHB1aS1tYWlubWVudSIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOkFycmF5fSldLHk9W0koe3R5cGU6QXJyYXl9KV0seD1bSSh7dHlwZTpBcnJheX0pXSxGPVtJKCldLE49W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLGdvKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibG9nb0ljb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJsb2dvSWNvbiJpbiB6LGdldDp6PT56LmxvZ29JY29uLHNldDooeixFKT0+e3oubG9nb0ljb249RX19LG1ldGFkYXRhOkN9LG4sbyksZ28odGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2dvVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImxvZ29UZXh0ImluIHosZ2V0Ono9PnoubG9nb1RleHQsc2V0Oih6LEUpPT57ei5sb2dvVGV4dD1FfX0sbWV0YWRhdGE6Q30sYyxwKSxnbyh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1lbnVHcm91cHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJtZW51R3JvdXBzImluIHosZ2V0Ono9PnoubWVudUdyb3VwcyxzZXQ6KHosRSk9Pnt6Lm1lbnVHcm91cHM9RX19LG1ldGFkYXRhOkN9LGYsZyksZ28odGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib3R0b21UYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iYm90dG9tVGFicyJpbiB6LGdldDp6PT56LmJvdHRvbVRhYnMsc2V0Oih6LEUpPT57ei5ib3R0b21UYWJzPUV9fSxtZXRhZGF0YTpDfSx2LG0pLGdvKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFicyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InRhYnMiaW4geixnZXQ6ej0+ei50YWJzLHNldDooeixFKT0+e3oudGFicz1FfX0sbWV0YWRhdGE6Q30sTSxTKSxnbyh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkVGFiIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2VsZWN0ZWRUYWIiaW4geixnZXQ6ej0+ei5zZWxlY3RlZFRhYixzZXQ6KHosRSk9Pnt6LnNlbGVjdGVkVGFiPUV9fSxtZXRhZGF0YTpDfSxfLGspLGdvKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sbGFwc2VkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iY29sbGFwc2VkImluIHosZ2V0Ono9PnouY29sbGFwc2VkLHNldDooeixFKT0+e3ouY29sbGFwc2VkPUV9fSxtZXRhZGF0YTpDfSxMLEEpLGdvKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSkscT1pPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89bmZ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiQXBwIFVJIl07I2U9bWEodGhpcyxuLCIiKTtnZXQgbG9nb0ljb24oKXtyZXR1cm4gdGhpcy4jZX1zZXQgbG9nb0ljb24oQyl7dGhpcy4jZT1DfSN0PShtYSh0aGlzLG8pLG1hKHRoaXMsYywiIikpO2dldCBsb2dvVGV4dCgpe3JldHVybiB0aGlzLiN0fXNldCBsb2dvVGV4dChDKXt0aGlzLiN0PUN9I2E9KG1hKHRoaXMscCksbWEodGhpcyxmLFtdKSk7Z2V0IG1lbnVHcm91cHMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWVudUdyb3VwcyhDKXt0aGlzLiNhPUN9I2k9KG1hKHRoaXMsZyksbWEodGhpcyx2LFtdKSk7Z2V0IGJvdHRvbVRhYnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgYm90dG9tVGFicyhDKXt0aGlzLiNpPUN9I3I9KG1hKHRoaXMsbSksbWEodGhpcyxNLFtdKSk7Z2V0IHRhYnMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgdGFicyhDKXt0aGlzLiNyPUN9I3M9KG1hKHRoaXMsUyksbWEodGhpcyxfLHZvaWQgMCkpO2dldCBzZWxlY3RlZFRhYigpe3JldHVybiB0aGlzLiNzfXNldCBzZWxlY3RlZFRhYihDKXt0aGlzLiNzPUN9I249KG1hKHRoaXMsayksbWEodGhpcyxMLCExKSk7Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLiNufXNldCBjb2xsYXBzZWQoQyl7dGhpcy4jbj1DfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtoLmJkVGhlbWUoIiMxODE4MWIiLCIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1mZzogJHtoLmJkVGhlbWUoIiNmYWZhZmEiLCIjMTgxODFiIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5tYWluQ29udGFpbmVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2NjYiLCIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7cjIuZml4ZWQuYXBwQmFyfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTVlNSIsIiMzZjNmNDYiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzczNzM3MyIsIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwYTBhMGEiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC8qIExvZ28gU2VjdGlvbiAqLwogICAgICAubG9nb1NlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU1ZTUiLCIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwYTBhMGEiLCIjZmFmYWZhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubG9nb1NlY3Rpb24gLmxvZ29UZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5sb2dvU2VjdGlvbiAubG9nb1RleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIE1pZGRsZSBTZWN0aW9uIChzY3JvbGxhYmxlKSAqLwogICAgICAubWVudVNlY3Rpb24gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSIpfTsKICAgICAgfQoKICAgICAgLyogTWVudSBHcm91cCAqLwogICAgICAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51R3JvdXA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzM3MzczIiwiIzczNzM3MyIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAzMHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cFRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51R3JvdXAgewogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICAvKiBUYWIgSXRlbSAqLwogICAgICAudGFiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM1MjUyNTIiLCIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMjYyNjI2IiwiI2U1ZTVlNSIpfTsKICAgICAgfQoKICAgICAgLnRhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzBhMGEwYSIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzcHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMGEwYTBhIiwiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2YzZjQ2IiwiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZGNmY2U3IiwiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxNjY1MzQiLCIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZWYzYzciLCIjNDUxYTAzIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzkyNDAwZSIsIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZWUyZTIiLCIjNDUwYTBhIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzk5MWIxYiIsIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEJvdHRvbSBTZWN0aW9uICovCiAgICAgIC5ib3R0b21TZWN0aW9uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlNWU1IiwiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7bGV0IEM9dGhpcy5nZXRBbGxUYWJzKCk7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0ke3o9PntXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyh6LFt7bmFtZToiYXBwIHNldHRpbmdzIixhY3Rpb246YXN5bmMoKT0+e30saWNvbk5hbWU6ImdlYXIifV0pfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29ufHx0aGlzLmxvZ29UZXh0P3dgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvU2VjdGlvbiI+CiAgICAgICAgICAgICR7dGhpcy5sb2dvSWNvbj93YDxkZWVzLWljb24gY2xhc3M9ImxvZ29JY29uIiAuaWNvbj0iJHt0aGlzLmxvZ29JY29ufSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICAgICAgJHt0aGlzLmxvZ29UZXh0P3dgPHNwYW4gY2xhc3M9ImxvZ29UZXh0Ij4ke3RoaXMubG9nb1RleHR9PC9zcGFuPmA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQoKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51U2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUdyb3Vwcy5sZW5ndGg+MD90aGlzLnJlbmRlck1lbnVHcm91cHMoKTp0aGlzLnJlbmRlckxlZ2FjeVRhYnMoKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubGVuZ3RoPjA/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbVNlY3Rpb24iPgogICAgICAgICAgICAke3RoaXMuYm90dG9tVGFicy5tYXAoej0+dGhpcy5yZW5kZXJUYWIoeikpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvbGxhcHNlLXRvZ2dsZSIgQGNsaWNrPSIkeygpPT50aGlzLnRvZ2dsZUNvbGxhcHNlKCl9Ij4KICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMuY29sbGFwc2VkPyJsdWNpZGU6Y2hldnJvblJpZ2h0IjoibHVjaWRlOmNoZXZyb25MZWZ0In0iPjwvZGVlcy1pY29uPgogICAgICA8L2J1dHRvbj4KICAgIGB9cmVuZGVyTWVudUdyb3Vwcygpe3JldHVybiB3YAogICAgICAke3RoaXMubWVudUdyb3Vwcy5tYXAoQz0+d2AKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgICAgJHtDLm5hbWU/d2A8ZGl2IGNsYXNzPSJncm91cEhlYWRlciI+JHtDLm5hbWV9PC9kaXY+YDoiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAgICR7Qy5pdGVtcy5tYXAoej0+dGhpcy5yZW5kZXJUYWIoeikpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGApfQogICAgYH1yZW5kZXJMZWdhY3lUYWJzKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcChDPT50aGlzLnJlbmRlclRhYihDKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJUYWIoQyl7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0idGFiICR7Qz09PXRoaXMuc2VsZWN0ZWRUYWI/InNlbGVjdGVkVGFiIjoiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpPT57dGhpcy51cGRhdGVUYWIoQyl9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Qy5pY29uTmFtZXx8IiJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8c3BhbiBjbGFzcz0idGFiTGFiZWwiPiR7Qy5rZXl9PC9zcGFuPgogICAgICAgICR7Qy5iYWRnZSE9PXZvaWQgMD93YAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7Qy5iYWRnZVZhcmlhbnR8fCJkZWZhdWx0In0iPiR7Qy5iYWRnZX08L3NwYW4+CiAgICAgICAgYDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7Qy5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGB9Z2V0QWxsVGFicygpe3JldHVybiB0aGlzLm1lbnVHcm91cHMubGVuZ3RoPjA/Wy4uLnRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKHo9PnouaXRlbXMpLC4uLnRoaXMuYm90dG9tVGFic106Wy4uLnRoaXMudGFicywuLi50aGlzLmJvdHRvbVRhYnNdfXVwZGF0ZVRhYihDKXt0aGlzLnNlbGVjdGVkVGFiPUMsdGhpcy5zZWxlY3RlZFRhYi5hY3Rpb24oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0Iix7ZGV0YWlsOnt0YWI6Q30sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1maXJzdFVwZGF0ZWQoKXtsZXQgQz10aGlzLmdldEFsbFRhYnMoKTtDLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZVRhYihDWzBdKX10b2dnbGVDb2xsYXBzZSgpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNvbGxhcHNlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLHtkZXRhaWw6e2NvbGxhcHNlZDp0aGlzLmNvbGxhcHNlZH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksbWEodGhpcyxBKX1zdGF0aWN7bWEoaSxhKX19O3JldHVybiBxPWl9KSgpfSk7dmFyIGNmdCxkZnQ9YigoKT0+e3VlKCk7Y2Z0PSgpPT53YAogIDxzdHlsZT4KICAgIC5kZW1vLXNlY29uZGFyeW1lbnUtY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIGgzIHsKICAgICAgY29sb3I6ICNmYWZhZmE7CiAgICAgIG1hcmdpbi10b3A6IDA7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIGNvZGUgewogICAgICBiYWNrZ3JvdW5kOiAjMjcyNzJhOwogICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIC5kZW1vLXNlY29uZGFyeW1lbnUtY29udGFpbmVyIC5zcGFjZXIgdWwgewogICAgICBsaW5lLWhlaWdodDogMS44OwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciI+CiAgICA8ZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51CiAgICAgIC5oZWFkaW5nPSR7IlByb2plY3RzIn0KICAgICAgLmdyb3Vwcz0ke1t7bmFtZToiTmF2aWdhdGlvbiIsaWNvbk5hbWU6Imx1Y2lkZTpjb21wYXNzIixpdGVtczpbe2tleToiRGFzaGJvYXJkIixpY29uTmFtZToibHVjaWRlOmxheW91dERhc2hib2FyZCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiRGFzaGJvYXJkIGNsaWNrZWQiKSxiYWRnZTozLGJhZGdlVmFyaWFudDoid2FybmluZyJ9LHtrZXk6IlByb2plY3RzIixpY29uTmFtZToibHVjaWRlOmZvbGRlciIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiUHJvamVjdHMgY2xpY2tlZCIpLGJhZGdlOiJuZXciLGJhZGdlVmFyaWFudDoic3VjY2VzcyJ9LHtrZXk6IkFuYWx5dGljcyIsaWNvbk5hbWU6Imx1Y2lkZTpiYXJDaGFydDIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIil9XX0se25hbWU6IkFjdGlvbnMiLGljb25OYW1lOiJsdWNpZGU6emFwIixpdGVtczpbe3R5cGU6ImFjdGlvbiIsa2V5OiJDcmVhdGUgTmV3IixpY29uTmFtZToibHVjaWRlOnBsdXMiLGFjdGlvbjooKT0+YWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKX0se3R5cGU6ImFjdGlvbiIsa2V5OiJJbXBvcnQgRGF0YSIsaWNvbk5hbWU6Imx1Y2lkZTp1cGxvYWQiLGFjdGlvbjooKT0+YWxlcnQoIkltcG9ydCBEYXRhIGNsaWNrZWQhIil9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImFjdGlvbiIsa2V5OiJEZWxldGUgQWxsIixpY29uTmFtZToibHVjaWRlOnRyYXNoMiIsdmFyaWFudDoiZGFuZ2VyIixjb25maXJtTWVzc2FnZToiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgaXRlbXM/IixhY3Rpb246KCk9PmFsZXJ0KCJEZWxldGVkISIpfV19LHtuYW1lOiJGaWx0ZXJzIixpY29uTmFtZToibHVjaWRlOmZpbHRlciIsaXRlbXM6W3t0eXBlOiJoZWFkZXIiLGxhYmVsOiJTdGF0dXMifSx7dHlwZToiZmlsdGVyIixrZXk6IlNob3cgQWN0aXZlIixpY29uTmFtZToibHVjaWRlOmNoZWNrQ2lyY2xlIixhY3RpdmU6ITAsb25Ub2dnbGU6dD0+Y29uc29sZS5sb2coIlNob3cgQWN0aXZlOiIsdCl9LHt0eXBlOiJmaWx0ZXIiLGtleToiU2hvdyBBcmNoaXZlZCIsaWNvbk5hbWU6Imx1Y2lkZTphcmNoaXZlIixhY3RpdmU6ITEsb25Ub2dnbGU6dD0+Y29uc29sZS5sb2coIlNob3cgQXJjaGl2ZWQ6Iix0KX0se3R5cGU6ImRpdmlkZXIifSx7dHlwZToibXVsdGlGaWx0ZXIiLGtleToiQ2F0ZWdvcmllcyIsaWNvbk5hbWU6Imx1Y2lkZTp0YWciLGNvbGxhcHNlZDohMSxvcHRpb25zOlt7a2V5OiJmcm9udGVuZCIsbGFiZWw6IkZyb250ZW5kIixjaGVja2VkOiEwLGljb25OYW1lOiJsdWNpZGU6bW9uaXRvciJ9LHtrZXk6ImJhY2tlbmQiLGxhYmVsOiJCYWNrZW5kIixjaGVja2VkOiEwLGljb25OYW1lOiJsdWNpZGU6c2VydmVyIn0se2tleToiZGV2b3BzIixsYWJlbDoiRGV2T3BzIixjaGVja2VkOiExLGljb25OYW1lOiJsdWNpZGU6Y2xvdWQifSx7a2V5OiJkZXNpZ24iLGxhYmVsOiJEZXNpZ24iLGNoZWNrZWQ6ITEsaWNvbk5hbWU6Imx1Y2lkZTpwYWxldHRlIn1dLG9uQ2hhbmdlOnQ9PmNvbnNvbGUubG9nKCJTZWxlY3RlZCBjYXRlZ29yaWVzOiIsdCl9XX0se25hbWU6IlJlc291cmNlcyIsaWNvbk5hbWU6Imx1Y2lkZTpib29rT3BlbiIsY29sbGFwc2VkOiEwLGl0ZW1zOlt7dHlwZToiaGVhZGVyIixsYWJlbDoiRG9jdW1lbnRhdGlvbiJ9LHt0eXBlOiJsaW5rIixrZXk6IkFQSSBSZWZlcmVuY2UiLGljb25OYW1lOiJsdWNpZGU6ZmlsZVRleHQiLGhyZWY6Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL2RvY3MifSx7dHlwZToibGluayIsa2V5OiJVc2VyIEd1aWRlIixpY29uTmFtZToibHVjaWRlOmJvb2siLGhyZWY6Imh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9ndWlkZSJ9LHt0eXBlOiJkaXZpZGVyIn0se3R5cGU6ImhlYWRlciIsbGFiZWw6IlN1cHBvcnQifSx7dHlwZToibGluayIsa2V5OiJIZWxwIENlbnRlciIsaWNvbk5hbWU6Imx1Y2lkZTpoZWxwQ2lyY2xlIixocmVmOiIvaGVscCIsZXh0ZXJuYWw6ITF9LHt0eXBlOiJsaW5rIixrZXk6IkdpdEh1YiBJc3N1ZXMiLGljb25OYW1lOiJsdWNpZGU6Z2l0aHViIixocmVmOiJodHRwczovL2dpdGh1Yi5jb20vZXhhbXBsZS9pc3N1ZXMifV19XX0KICAgICAgQGl0ZW0tc2VsZWN0PSR7dD0+Y29uc29sZS5sb2coIlRhYiBzZWxlY3RlZDoiLHQuZGV0YWlsKX0KICAgICAgQGFjdGlvbi1jbGljaz0ke3Q9PmNvbnNvbGUubG9nKCJBY3Rpb24gY2xpY2tlZDoiLHQuZGV0YWlsKX0KICAgICAgQGZpbHRlci10b2dnbGU9JHt0PT5jb25zb2xlLmxvZygiRmlsdGVyIHRvZ2dsZWQ6Iix0LmRldGFpbCl9CiAgICAgIEBtdWx0aWZpbHRlci1jaGFuZ2U9JHt0PT5jb25zb2xlLmxvZygiTXVsdGktZmlsdGVyIGNoYW5nZWQ6Iix0LmRldGFpbCl9CiAgICAgIEBsaW5rLWNsaWNrPSR7dD0+Y29uc29sZS5sb2coIkxpbmsgY2xpY2tlZDoiLHQuZGV0YWlsKX0KICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIDxoMz5TZWNvbmRhcnkgTWVudSBEZW1vPC9oMz4KICAgICAgPHA+VGhpcyBkZW1vIHNob3djYXNlcyBhbGwgOCBpdGVtIHR5cGVzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Y29kZT50YWI8L2NvZGU+IC0gU2VsZWN0YWJsZSBpdGVtcyAoTmF2aWdhdGlvbiBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IC0gQmx1ZSBhY3Rpb25zIChBY3Rpb25zIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gd2l0aCA8Y29kZT52YXJpYW50OiAnZGFuZ2VyJzwvY29kZT4gLSBSZWQgZGFuZ2VyIGFjdGlvbjwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmZpbHRlcjwvY29kZT4gLSBDaGVja2JveCB0b2dnbGVzIChGaWx0ZXJzIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPm11bHRpRmlsdGVyPC9jb2RlPiAtIENvbGxhcHNpYmxlIG11bHRpLXNlbGVjdCAoQ2F0ZWdvcmllcyk8L2xpPgogICAgICAgIDxsaT48Y29kZT5kaXZpZGVyPC9jb2RlPiAtIFZpc3VhbCBzZXBhcmF0b3JzPC9saT4KICAgICAgICA8bGk+PGNvZGU+aGVhZGVyPC9jb2RlPiAtIFNlY3Rpb24gbGFiZWxzPC9saT4KICAgICAgICA8bGk+PGNvZGU+bGluazwvY29kZT4gLSBFeHRlcm5hbC9pbnRlcm5hbCBsaW5rcyAoUmVzb3VyY2VzIGdyb3VwKTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlRyeSB0aGUgY29sbGFwc2UgdG9nZ2xlIG9uIHRoZSBsZWZ0IGVkZ2UhPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgUnMsVDIscGZ0LGxWPWIoKCk9PntzMigpO2NvKCk7bjIoKTtFdCgpO3VlKCk7ZGZ0KCk7VmUoKTtScz1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFQyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxwZnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXTt2YXIgRT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IFQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpBcnJheX0pXSxsPVtJKHt0eXBlOkFycmF5fSldLHk9W0koe3R5cGU6T2JqZWN0fSldLHg9W0soKV0sRj1bSygpXSxOPVtLKCldLHE9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLFJzKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGVhZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+ImhlYWRpbmciaW4gJCxnZXQ6JD0+JC5oZWFkaW5nLHNldDooJCxWKT0+eyQuaGVhZGluZz1WfX0sbWV0YWRhdGE6VH0sbixvKSxScyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imdyb3VwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Imdyb3VwcyJpbiAkLGdldDokPT4kLmdyb3VwcyxzZXQ6KCQsVik9PnskLmdyb3Vwcz1WfX0sbWV0YWRhdGE6VH0sYyxwKSxScyh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGlvbk9wdGlvbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzZWxlY3Rpb25PcHRpb25zImluICQsZ2V0OiQ9PiQuc2VsZWN0aW9uT3B0aW9ucyxzZXQ6KCQsVik9PnskLnNlbGVjdGlvbk9wdGlvbnM9Vn19LG1ldGFkYXRhOlR9LGYsZyksUnModGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZEl0ZW0iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzZWxlY3RlZEl0ZW0iaW4gJCxnZXQ6JD0+JC5zZWxlY3RlZEl0ZW0sc2V0OigkLFYpPT57JC5zZWxlY3RlZEl0ZW09Vn19LG1ldGFkYXRhOlR9LHYsbSksUnModGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xsYXBzZWRHcm91cHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJjb2xsYXBzZWRHcm91cHMiaW4gJCxnZXQ6JD0+JC5jb2xsYXBzZWRHcm91cHMsc2V0OigkLFYpPT57JC5jb2xsYXBzZWRHcm91cHM9Vn19LG1ldGFkYXRhOlR9LE0sUyksUnModGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2xsYXBzZWRNdWx0aUZpbHRlcnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJjb2xsYXBzZWRNdWx0aUZpbHRlcnMiaW4gJCxnZXQ6JD0+JC5jb2xsYXBzZWRNdWx0aUZpbHRlcnMsc2V0OigkLFYpPT57JC5jb2xsYXBzZWRNdWx0aUZpbHRlcnM9Vn19LG1ldGFkYXRhOlR9LF8sayksUnModGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZW5kZXJDb3VudGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4icmVuZGVyQ291bnRlciJpbiAkLGdldDokPT4kLnJlbmRlckNvdW50ZXIsc2V0OigkLFYpPT57JC5yZW5kZXJDb3VudGVyPVZ9fSxtZXRhZGF0YTpUfSxMLEEpLFJzKHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29sbGFwc2VkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iY29sbGFwc2VkImluICQsZ2V0OiQ9PiQuY29sbGFwc2VkLHNldDooJCxWKT0+eyQuY29sbGFwc2VkPVZ9fSxtZXRhZGF0YTpUfSxDLHopLFJzKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOlR9LG51bGwsYSksRT1pPWUudmFsdWUsVCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpUfSl9c3RhdGljIGRlbW89Y2Z0O3N0YXRpYyBkZW1vR3JvdXBzPVsiQXBwIFVJIl07I2U9VDIodGhpcyxuLCJNZW51Iik7Z2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgaGVhZGluZyhUKXt0aGlzLiNlPVR9I3Q9KFQyKHRoaXMsbyksVDIodGhpcyxjLFtdKSk7Z2V0IGdyb3Vwcygpe3JldHVybiB0aGlzLiN0fXNldCBncm91cHMoVCl7dGhpcy4jdD1UfSNhPShUMih0aGlzLHApLFQyKHRoaXMsZixbXSkpO2dldCBzZWxlY3Rpb25PcHRpb25zKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlbGVjdGlvbk9wdGlvbnMoVCl7dGhpcy4jYT1UfSNpPShUMih0aGlzLGcpLFQyKHRoaXMsdixudWxsKSk7Z2V0IHNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLiNpfXNldCBzZWxlY3RlZEl0ZW0oVCl7dGhpcy4jaT1UfSNyPShUMih0aGlzLG0pLFQyKHRoaXMsTSxuZXcgU2V0KSk7Z2V0IGNvbGxhcHNlZEdyb3Vwcygpe3JldHVybiB0aGlzLiNyfXNldCBjb2xsYXBzZWRHcm91cHMoVCl7dGhpcy4jcj1UfSNzPShUMih0aGlzLFMpLFQyKHRoaXMsXyxuZXcgU2V0KSk7Z2V0IGNvbGxhcHNlZE11bHRpRmlsdGVycygpe3JldHVybiB0aGlzLiNzfXNldCBjb2xsYXBzZWRNdWx0aUZpbHRlcnMoVCl7dGhpcy4jcz1UfSNuPShUMih0aGlzLGspLFQyKHRoaXMsTCwwKSk7Z2V0IHJlbmRlckNvdW50ZXIoKXtyZXR1cm4gdGhpcy4jbn1zZXQgcmVuZGVyQ291bnRlcihUKXt0aGlzLiNuPVR9I289KFQyKHRoaXMsQSksVDIodGhpcyxDLCExKSk7Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLiNvfXNldCBjb2xsYXBzZWQoVCl7dGhpcy4jbz1UfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkOiAyNDBweDsKICAgICAgICAtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tc2lkZWJhci1iZzogJHtoLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICAgIC0tc2lkZWJhci1mZzogJHtoLmJkVGhlbWUoIiM1MjUyNTIiLCIjYTNhM2EzIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1tdXRlZDogJHtoLmJkVGhlbWUoIiM3MzczNzMiLCIjNzM3MzczIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1hY3RpdmU6ICR7aC5iZFRoZW1lKCIjMGEwYTBhIiwiI2ZhZmFmYSIpfTsKICAgICAgICAtLXNpZGViYXItYm9yZGVyOiAke2guYmRUaGVtZSgiI2U1ZTVlNSIsIiMxYTFhMWEiKX07CiAgICAgICAgLS1zaWRlYmFyLWhvdmVyOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1zaWRlYmFyLWFjdGl2ZTogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIC0tc2lkZWJhci1hY2NlbnQ6ICR7aC5iZFRoZW1lKCIjMGEwYTBhIiwiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtYmc6ICR7aC5iZFRoZW1lKCIjMTgxODFiIiwiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7aC5iZFRoZW1lKCIjZmFmYWZhIiwiIzE4MTgxYiIpfTsKCiAgICAgICAgLyogQmFkZ2UgY29sb3JzICovCiAgICAgICAgLS1iYWRnZS1kZWZhdWx0LWJnOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgLS1iYWRnZS1kZWZhdWx0LWZnOiAke2guYmRUaGVtZSgiIzNmM2Y0NiIsIiNhMWExYWEiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWJnOiAke2guYmRUaGVtZSgiI2RjZmNlNyIsIiMxNDUzMmQiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWZnOiAke2guYmRUaGVtZSgiIzE2NjUzNCIsIiM0YWRlODAiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWJnOiAke2guYmRUaGVtZSgiI2ZlZjNjNyIsIiM0NTFhMDMiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWZnOiAke2guYmRUaGVtZSgiIzkyNDAwZSIsIiNmYmJmMjQiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1iZzogJHtoLmJkVGhlbWUoIiNmZWUyZTIiLCIjNDUwYTBhIil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItZmc6ICR7aC5iZFRoZW1lKCIjOTkxYjFiIiwiI2Y4NzE3MSIpfTsKCiAgICAgICAgLyogQWN0aW9uIGNvbG9ycyAqLwogICAgICAgIC0tYWN0aW9uLXByaW1hcnk6ICR7aC5iZFRoZW1lKCIjMjU2M2ViIiwiIzNiODJmNiIpfTsKICAgICAgICAtLWFjdGlvbi1wcmltYXJ5LWhvdmVyOiAke2guYmRUaGVtZSgiIzFkNGVkOCIsIiM2MGE1ZmEiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNlZjQ0NDQiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyLWhvdmVyOiAke2guYmRUaGVtZSgiI2I5MWMxYyIsIiNmODcxNzEiKX07CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtZXhwYW5kZWQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYmcpOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIHsKICAgICAgICB3aWR0aDogdmFyKC0tc2lkZWJhci13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogRmxvYXRpbmcgY29sbGFwc2UgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IC0xMnB4OwogICAgICAgIHRvcDogMjRweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU1ZTUiLCIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MzczNzMiLCIjYTFhMWFhIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMGEwYTBhIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgU2VjdGlvbiAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGFibGUgTWVudSBTZWN0aW9uICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4yNSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIil9OwogICAgICB9CgogICAgICAvKiBNZW51IEdyb3VwICovCiAgICAgIC5tZW51R3JvdXAgewogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51R3JvdXAgewogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXgtaGVpZ2h0IDAuMjVzIGVhc2U7CiAgICAgICAgbWF4LWhlaWdodDogNDBweDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyOmhvdmVyIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgxNDAsIDEyMCwgMTAwLCAwLjA2KSIsInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpub3QoLmNvbGxhcHNlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwicmdiYSgxODAsIDE2MCwgMTQwLCAwLjA4KSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzc4NzE2YyIsIiNiNWE5OWEiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzg3MTZjIiwiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3ODcxNmMiLCIjYjVhOTlhIil9OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIuY29sbGFwc2VkIC5jaGV2cm9uIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOwogICAgICB9CgogICAgICAvKiBIaWRlIGdyb3VwIGhlYWRlcnMgd2hlbiBob3Jpem9udGFsbHkgY29sbGFwc2VkICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogR3JvdXAgSXRlbXMgQ29udGFpbmVyICovCiAgICAgIC5ncm91cEl0ZW1zIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4yNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1hcmdpbiAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDEwMDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEl0ZW1zLmNvbGxhcHNlZCB7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIEFsd2F5cyBzaG93IGl0ZW1zIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAocmVnYXJkbGVzcyBvZiBncm91cCBjb2xsYXBzZSBzdGF0ZSkgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5ncm91cEl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgSXRlbSBCYXNlICovCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiAycHggMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQ1MDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWhvdmVyKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW06YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLnNlbGVjdGVkOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAycHggMnB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgLyogQWN0aW9uIEl0ZW0gU3R5bGVzICovCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeSB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1wcmltYXJ5OmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLXByaW1hcnktaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1wcmltYXJ5IGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tZGFuZ2VyKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXI6aG92ZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tZGFuZ2VyLWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgyMjAsIDM4LCAzOCwgMC4wOCkiLCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBGaWx0ZXIgSXRlbSBTdHlsZXMgKi8KICAgICAgLm1lbnVJdGVtLmZpbHRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyIC5maWx0ZXItY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2guYmRUaGVtZSgiI2Q0ZDRkNCIsIiM1MjUyNTIiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlciAuZmlsdGVyLWNoZWNrYm94LmNoZWNrZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWNjZW50KTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXNpZGViYXItYWNjZW50KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlciAuZmlsdGVyLWNoZWNrYm94IGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2ZhZmFmYSIsIiMwYTBhMGEiKX07CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlci5hY3RpdmUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC8qIE11bHRpLUZpbHRlciBDb250YWluZXIgKi8KICAgICAgLm11bHRpRmlsdGVyIHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAyKSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlci5jb2xsYXBzZWQgLmNoZXZyb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiAub3B0aW9uLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtoLmJkVGhlbWUoIiNkNGQ0ZDQiLCIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gLm9wdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gLm9wdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNmYWZhZmEiLCIjMGEwYTBhIil9OwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIGRlZXMtaWNvbi5vcHRpb24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLyogRGl2aWRlciAqLwogICAgICAubWVudURpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBtYXJnaW46IDhweCAxMnB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVEaXZpZGVyIHsKICAgICAgICBtYXJnaW46IDhweCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlci9MYWJlbCAqLwogICAgICAubWVudUhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxMnB4IDRweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBMaW5rIEl0ZW0gKi8KICAgICAgLm1lbnVJdGVtLmxpbmsgLmV4dGVybmFsLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qIENvbGxhcHNlZCBtZW51IGl0ZW0gc3R5bGVzICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0uc2VsZWN0ZWQ6OmJlZm9yZSB7CiAgICAgICAgbGVmdDogLTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuZmlsdGVyLWNoZWNrYm94LAogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5leHRlcm5hbC1pY29uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm11bHRpRmlsdGVyIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBjb2xsYXBzZWQgc3RhdGUgKi8KICAgICAgLml0ZW0tdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwMCU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS10b29sdGlwLWZnKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICB9CgogICAgICAuaXRlbS10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtOmhvdmVyIC5pdGVtLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIFN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tYmFkZ2UtZGVmYXVsdC1mZyk7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5zdWNjZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1zdWNjZXNzLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tYmFkZ2Utc3VjY2Vzcy1mZyk7CiAgICAgIH0KCiAgICAgIC5iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS13YXJuaW5nLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tYmFkZ2Utd2FybmluZy1mZyk7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZXJyb3ItYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1lcnJvci1mZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExlZ2FjeSBvcHRpb25zIGNvbnRhaW5lciAqLwogICAgICAubGVnYWN5T3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIC8qIERpdmlkZXIgKGxlZ2FjeSkgKi8KICAgICAgLmRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBtYXJnaW46IDhweCAxMnB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkaW5nIj4ke3RoaXMuaGVhZGluZ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudVNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLmdyb3Vwcy5sZW5ndGg+MD90aGlzLnJlbmRlckdyb3VwcygpOnRoaXMucmVuZGVyTGVnYWN5T3B0aW9ucygpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCk9PnRoaXMudG9nZ2xlQ29sbGFwc2UoKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGhpcy5jb2xsYXBzZWQ/Imx1Y2lkZTpjaGV2cm9uUmlnaHQiOiJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYH1yZW5kZXJHcm91cHMoKXtyZXR1cm4gd2AKICAgICAgJHt0aGlzLmdyb3Vwcy5tYXAoVD0+d2AKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iZ3JvdXBIZWFkZXIgJHt0aGlzLmNvbGxhcHNlZEdyb3Vwcy5oYXMoVC5uYW1lKT8iY29sbGFwc2VkIjoiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKT0+dGhpcy50b2dnbGVHcm91cChULm5hbWUpfSIKICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwVGl0bGUiPgogICAgICAgICAgICAgICR7VC5pY29uTmFtZT93YDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKFQuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YDoiIn0KICAgICAgICAgICAgICAke1QubmFtZX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncm91cEl0ZW1zICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKFQubmFtZSk/ImNvbGxhcHNlZCI6IiJ9Ij4KICAgICAgICAgICAgJHtULml0ZW1zLm1hcCgkPT50aGlzLnJlbmRlckl0ZW0oJCxUKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgfXJlbmRlckl0ZW0oVCwkKXtpZigiaGlkZGVuImluIFQmJlQuaGlkZGVuKXJldHVybiB3YGA7c3dpdGNoKCJ0eXBlImluIFQ/VC50eXBlOiJ0YWIiKXtjYXNlImFjdGlvbiI6cmV0dXJuIHRoaXMucmVuZGVyQWN0aW9uSXRlbShUKTtjYXNlImZpbHRlciI6cmV0dXJuIHRoaXMucmVuZGVyRmlsdGVySXRlbShUKTtjYXNlIm11bHRpRmlsdGVyIjpyZXR1cm4gdGhpcy5yZW5kZXJNdWx0aUZpbHRlckl0ZW0oVCk7Y2FzZSJkaXZpZGVyIjpyZXR1cm4gdGhpcy5yZW5kZXJEaXZpZGVyKCk7Y2FzZSJoZWFkZXIiOnJldHVybiB0aGlzLnJlbmRlckhlYWRlcihUKTtjYXNlImxpbmsiOnJldHVybiB0aGlzLnJlbmRlckxpbmtJdGVtKFQpO2RlZmF1bHQ6cmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShULCQpfX1yZW5kZXJUYWJJdGVtKFQsJCl7bGV0IFY9dGhpcy5zZWxlY3RlZEl0ZW0/LmtleT09PVQua2V5LFI9VC5kaXNhYmxlZD09PSEwO3JldHVybiB3YAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7Vj8ic2VsZWN0ZWQiOiIifSAke1I/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpPT4hUiYmdGhpcy5zZWxlY3RUYWJJdGVtKFQsJCl9IgogICAgICAgIEBjb250ZXh0bWVudT0iJHtVPT50aGlzLmhhbmRsZUNvbnRleHRNZW51KFUsVCl9IgogICAgICA+CiAgICAgICAgJHtULmljb25OYW1lP3dgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oVC5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7VC5rZXl9PC9zcGFuPgogICAgICAgICR7VC5iYWRnZSE9PXZvaWQgMD93YAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7VC5iYWRnZVZhcmlhbnR8fCJkZWZhdWx0In0iPiR7VC5iYWRnZX08L3NwYW4+CiAgICAgICAgYDoiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke1Qua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckFjdGlvbkl0ZW0oVCl7bGV0ICQ9VC52YXJpYW50fHwicHJpbWFyeSIsVj1ULmRpc2FibGVkPT09ITA7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gYWN0aW9uLSR7JH0gJHtWPyJkaXNhYmxlZCI6IiJ9IgogICAgICAgIEBjbGljaz0iJHsoKT0+IVYmJnRoaXMuaGFuZGxlQWN0aW9uQ2xpY2soVCl9IgogICAgICA+CiAgICAgICAgJHtULmljb25OYW1lP3dgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oVC5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7VC5rZXl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7VC5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRmlsdGVySXRlbShUKXtsZXQgJD1ULmRpc2FibGVkPT09ITA7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gZmlsdGVyICR7VC5hY3RpdmU/ImFjdGl2ZSI6IiJ9ICR7JD8iZGlzYWJsZWQiOiIifSIKICAgICAgICBAY2xpY2s9IiR7KCk9PiEkJiZ0aGlzLmhhbmRsZUZpbHRlclRvZ2dsZShUKX0iCiAgICAgID4KICAgICAgICAke1QuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihULmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW1MYWJlbCI+JHtULmtleX08L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVyLWNoZWNrYm94ICR7VC5hY3RpdmU/ImNoZWNrZWQiOiIifSI+CiAgICAgICAgICAke1QuYWN0aXZlP3dgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmNoZWNrIn0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtULmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJNdWx0aUZpbHRlckl0ZW0oVCl7bGV0ICQ9dGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMuaGFzKFQua2V5KSxWPVQub3B0aW9ucy5maWx0ZXIoUj0+Ui5jaGVja2VkKS5sZW5ndGg7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpRmlsdGVyIj4KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0ibXVsdGlGaWx0ZXItaGVhZGVyICR7JD8iY29sbGFwc2VkIjoiIn0iCiAgICAgICAgICBAY2xpY2s9IiR7KCk9PnRoaXMudG9nZ2xlTXVsdGlGaWx0ZXIoVC5rZXkpfSIKICAgICAgICA+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibXVsdGlGaWx0ZXItdGl0bGUiPgogICAgICAgICAgICAke1QuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihULmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgICAgICR7VC5rZXl9CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAke1Y+MD93YDxzcGFuIGNsYXNzPSJtdWx0aUZpbHRlci1jb3VudCI+JHtWfTwvc3Bhbj5gOiIifQogICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlci1vcHRpb25zICR7JD8iY29sbGFwc2VkIjoiIn0iPgogICAgICAgICAgJHtULm9wdGlvbnMubWFwKFI9PndgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ibXVsdGlGaWx0ZXItb3B0aW9uIgogICAgICAgICAgICAgIEBjbGljaz0iJHsoKT0+dGhpcy5oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShULFIua2V5KX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcHRpb24tY2hlY2tib3ggJHtSLmNoZWNrZWQ/ImNoZWNrZWQiOiIifSI+CiAgICAgICAgICAgICAgICAke1IuY2hlY2tlZD93YDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTpjaGVjayJ9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICR7Ui5pY29uTmFtZT93YDxkZWVzLWljb24gY2xhc3M9Im9wdGlvbi1pY29uIiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oUi5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgICAgICAgIDxzcGFuPiR7Ui5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJEaXZpZGVyKCl7cmV0dXJuIHdgPGRpdiBjbGFzcz0ibWVudURpdmlkZXIiPjwvZGl2PmB9cmVuZGVySGVhZGVyKFQpe3JldHVybiB3YDxkaXYgY2xhc3M9Im1lbnVIZWFkZXIiPiR7VC5sYWJlbH08L2Rpdj5gfXJlbmRlckxpbmtJdGVtKFQpe2xldCAkPVQuZXh0ZXJuYWw/P1QuaHJlZi5zdGFydHNXaXRoKCJodHRwIiksVj1ULmRpc2FibGVkPT09ITA7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gbGluayAke1Y/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpPT4hViYmdGhpcy5oYW5kbGVMaW5rQ2xpY2soVCl9IgogICAgICA+CiAgICAgICAgJHtULmljb25OYW1lP3dgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oVC5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7VC5rZXl9PC9zcGFuPgogICAgICAgICR7JD93YDxkZWVzLWljb24gY2xhc3M9ImV4dGVybmFsLWljb24iIC5pY29uPSIkeyJsdWNpZGU6ZXh0ZXJuYWxMaW5rIn0iPjwvZGVlcy1pY29uPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtULmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJMZWdhY3lPcHRpb25zKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImxlZ2FjeU9wdGlvbnMiPgogICAgICAgICR7dGhpcy5zZWxlY3Rpb25PcHRpb25zLm1hcChUPT57aWYoImRpdmlkZXIiaW4gVCYmVC5kaXZpZGVyKXJldHVybiB3YDxkaXYgY2xhc3M9ImRpdmlkZXIiPjwvZGl2PmA7bGV0ICQ9VCxWPXtrZXk6JC5rZXksaWNvbk5hbWU6JC5pY29uTmFtZSxhY3Rpb246JC5hY3Rpb24sYmFkZ2U6JC5iYWRnZSxiYWRnZVZhcmlhbnQ6JC5iYWRnZVZhcmlhbnR9O3JldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0oVil9KX0KICAgICAgPC9kaXY+CiAgICBgfW5vcm1hbGl6ZUljb24oVCl7cmV0dXJuIFQuc3RhcnRzV2l0aCgibHVjaWRlOiIpP1Q6YGx1Y2lkZToke1R9YH10b2dnbGVHcm91cChUKXtsZXQgJD1uZXcgU2V0KHRoaXMuY29sbGFwc2VkR3JvdXBzKTskLmhhcyhUKT8kLmRlbGV0ZShUKTokLmFkZChUKSx0aGlzLmNvbGxhcHNlZEdyb3Vwcz0kfXRvZ2dsZU11bHRpRmlsdGVyKFQpe2xldCAkPW5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOyQuaGFzKFQpPyQuZGVsZXRlKFQpOiQuYWRkKFQpLHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzPSR9dG9nZ2xlQ29sbGFwc2UoKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sbGFwc2UtY2hhbmdlIix7ZGV0YWlsOntjb2xsYXBzZWQ6dGhpcy5jb2xsYXBzZWR9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9c2VsZWN0VGFiSXRlbShULCQpe3RoaXMuc2VsZWN0ZWRJdGVtPVQsVC5hY3Rpb24oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXNlbGVjdCIse2RldGFpbDp7aXRlbTpULGdyb3VwOiR9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9YXN5bmMgaGFuZGxlQWN0aW9uQ2xpY2soVCl7VC5jb25maXJtTWVzc2FnZSYmIXdpbmRvdy5jb25maXJtKFQuY29uZmlybU1lc3NhZ2UpfHwoYXdhaXQgVC5hY3Rpb24oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhY3Rpb24tY2xpY2siLHtkZXRhaWw6e2l0ZW06VH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSl9aGFuZGxlRmlsdGVyVG9nZ2xlKFQpe2xldCAkPSFULmFjdGl2ZTtULmFjdGl2ZT0kLFQub25Ub2dnbGUoJCksdGhpcy5yZW5kZXJDb3VudGVyKyssdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsdGVyLXRvZ2dsZSIse2RldGFpbDp7aXRlbTpULGFjdGl2ZTokfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZU11bHRpRmlsdGVyT3B0aW9uVG9nZ2xlKFQsJCl7bGV0IFY9VC5vcHRpb25zLmZpbmQoVT0+VS5rZXk9PT0kKTtWJiYoVi5jaGVja2VkPSFWLmNoZWNrZWQpO2xldCBSPVQub3B0aW9ucy5maWx0ZXIoVT0+VS5jaGVja2VkKS5tYXAoVT0+VS5rZXkpO1Qub25DaGFuZ2UoUiksdGhpcy5yZW5kZXJDb3VudGVyKyssdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibXVsdGlmaWx0ZXItY2hhbmdlIix7ZGV0YWlsOntpdGVtOlQsc2VsZWN0ZWRLZXlzOlJ9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlTGlua0NsaWNrKFQpe1QuZXh0ZXJuYWw/P1QuaHJlZi5zdGFydHNXaXRoKCJodHRwIik/d2luZG93Lm9wZW4oVC5ocmVmLCJfYmxhbmsiLCJub29wZW5lcixub3JlZmVycmVyIik6d2luZG93LmxvY2F0aW9uLmhyZWY9VC5ocmVmLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxpbmstY2xpY2siLHtkZXRhaWw6e2l0ZW06VH0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVDb250ZXh0TWVudShULCQpe1d0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKFQsW3tuYW1lOiJWaWV3IGRldGFpbHMiLGFjdGlvbjphc3luYygpPT57fSxpY29uTmFtZToibHVjaWRlOmV5ZSJ9LHtuYW1lOiJFZGl0IixhY3Rpb246YXN5bmMoKT0+e30saWNvbk5hbWU6Imx1Y2lkZTpwZW5jaWwifV0pfWFzeW5jIGZpcnN0VXBkYXRlZChUKXtpZihhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoVCksdGhpcy5ncm91cHMubGVuZ3RoPjApe2xldCAkPW5ldyBTZXQsVj1uZXcgU2V0O2lmKHRoaXMuZ3JvdXBzLmZvckVhY2goUj0+e1IuY29sbGFwc2VkJiYkLmFkZChSLm5hbWUpLFIuaXRlbXMuZm9yRWFjaChVPT57aWYoInR5cGUiaW4gVSYmVS50eXBlPT09Im11bHRpRmlsdGVyIil7bGV0IHJlPVU7cmUuY29sbGFwc2VkJiZWLmFkZChyZS5rZXkpfX0pfSksdGhpcy5jb2xsYXBzZWRHcm91cHM9JCx0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycz1WLCF0aGlzLnNlbGVjdGVkSXRlbSlmb3IobGV0IFIgb2YgdGhpcy5ncm91cHMpZm9yKGxldCBVIG9mIFIuaXRlbXMpe2xldCByZT0idHlwZSJpbiBVP1UudHlwZToidGFiIjtpZihyZT09PSJ0YWIifHxyZT09PXZvaWQgMCl7bGV0IGo9VTtpZighai5kaXNhYmxlZCl7dGhpcy5zZWxlY3RUYWJJdGVtKGosUik7cmV0dXJufX19fWVsc2UgaWYodGhpcy5zZWxlY3Rpb25PcHRpb25zLmxlbmd0aD4wKXtsZXQgJD10aGlzLnNlbGVjdGlvbk9wdGlvbnMuZmluZChWPT4hKCJkaXZpZGVyImluIFYpKTtpZigkJiYhdGhpcy5zZWxlY3RlZEl0ZW0pe2xldCBWPXtrZXk6JC5rZXksaWNvbk5hbWU6JC5pY29uTmFtZSxhY3Rpb246JC5hY3Rpb259O3RoaXMuc2VsZWN0VGFiSXRlbShWKX19fWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxUMih0aGlzLHopfXN0YXRpY3tUMihpLGEpfX07cmV0dXJuIEU9aX0pKCl9KTt2YXIgcjQseGksdjIyLHkyMixoZnQsdWZ0PWIoKCk9Pnt1ZSgpO2NvKCk7cjQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx4aT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sdjIyPSgoKT0+e2xldCB0PVtwZSgiZGVtby1jbG9zZWFibGUtdGFicyIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdO3ZhciBsPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgZj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtLKCldLGQ9W0soKV0scjQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idGFicyJpbiBnLGdldDpnPT5nLnRhYnMsc2V0OihnLHkpPT57Zy50YWJzPXl9fSxtZXRhZGF0YTpmfSxuLG8pLHI0KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFiQ291bnRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InRhYkNvdW50ZXIiaW4gZyxnZXQ6Zz0+Zy50YWJDb3VudGVyLHNldDooZyx5KT0+e2cudGFiQ291bnRlcj15fX0sbWV0YWRhdGE6Zn0sYyxwKSxyNChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpmfSxudWxsLGEpLGw9aT1lLnZhbHVlLGYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Zn0pfSNlPXhpKHRoaXMsbixbe2tleToiTWFpbiIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJNYWluIGNsaWNrZWQiKX1dKTtnZXQgdGFicygpe3JldHVybiB0aGlzLiNlfXNldCB0YWJzKGYpe3RoaXMuI2U9Zn0jdD0oeGkodGhpcyxvKSx4aSh0aGlzLGMsMCkpO2dldCB0YWJDb3VudGVyKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRhYkNvdW50ZXIoZil7dGhpcy4jdD1mfXN0YXRpYyBzdHlsZXM9W1FgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICAuaW5mbyB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMikiLCJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYF07YWRkVGFiKCl7dGhpcy50YWJDb3VudGVyKys7bGV0IGY9YERvY3VtZW50ICR7dGhpcy50YWJDb3VudGVyfWA7dGhpcy50YWJzPVsuLi50aGlzLnRhYnMse2tleTpmLGljb25OYW1lOiJsdWNpZGU6ZmlsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZyhgJHtmfSBjbGlja2VkYCksY2xvc2VhYmxlOiEwLG9uQ2xvc2U6KCk9PnRoaXMucmVtb3ZlVGFiKGYpfV19cmVtb3ZlVGFiKGYpe3RoaXMudGFicz10aGlzLnRhYnMuZmlsdGVyKGc9Pmcua2V5IT09Zil9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkZWVzLWFwcHVpLXRhYnMKICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICBAdGFiLWNsb3NlPSR7Zj0+dGhpcy5yZW1vdmVUYWIoZi5kZXRhaWwudGFiLmtleSl9CiAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCk9PnRoaXMuYWRkVGFiKCl9PisgQWRkIE5ldyBUYWI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIENsaWNrIHRoZSBYIGJ1dHRvbiBvbiB0YWJzIHRvIGNsb3NlIHRoZW0uIFRoZSAiTWFpbiIgdGFiIGlzIG5vdCBjbG9zZWFibGUuCiAgICAgICAgPGJyPkN1cnJlbnQgdGFiczogJHt0aGlzLnRhYnMubGVuZ3RofQogICAgICA8L2Rpdj4KICAgIGB9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHhpKHRoaXMscCl9c3RhdGlje3hpKGksYSl9fTtyZXR1cm4gbD1pfSkoKSx5MjI9KCgpPT57bGV0IHQ9W3BlKCJkZW1vLWF1dG9oaWRlLXRhYnMiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXTt2YXIgeT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IHY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtLKCldLGw9W0soKV0scjQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4idGFicyJpbiBtLGdldDptPT5tLnRhYnMsc2V0OihtLHgpPT57bS50YWJzPXh9fSxtZXRhZGF0YTp2fSxuLG8pLHI0KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXV0b0hpZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJhdXRvSGlkZSJpbiBtLGdldDptPT5tLmF1dG9IaWRlLHNldDoobSx4KT0+e20uYXV0b0hpZGU9eH19LG1ldGFkYXRhOnZ9LGMscCkscjQodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aHJlc2hvbGQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJ0aHJlc2hvbGQiaW4gbSxnZXQ6bT0+bS50aHJlc2hvbGQsc2V0OihtLHgpPT57bS50aHJlc2hvbGQ9eH19LG1ldGFkYXRhOnZ9LGYsZykscjQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6dn0sbnVsbCxhKSx5PWk9ZS52YWx1ZSx2JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KX0jZT14aSh0aGlzLG4sW3trZXk6IlRhYiAxIixpY29uTmFtZToibHVjaWRlOmZpbGUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlRhYiAxIil9LHtrZXk6IlRhYiAyIixpY29uTmFtZToibHVjaWRlOmZpbGUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlRhYiAyIil9XSk7Z2V0IHRhYnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdGFicyh2KXt0aGlzLiNlPXZ9I3Q9KHhpKHRoaXMsbykseGkodGhpcyxjLCEwKSk7Z2V0IGF1dG9IaWRlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGF1dG9IaWRlKHYpe3RoaXMuI3Q9dn0jYT0oeGkodGhpcyxwKSx4aSh0aGlzLGYsMSkpO2dldCB0aHJlc2hvbGQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgdGhyZXNob2xkKHYpe3RoaXMuI2E9dn1zdGF0aWMgc3R5bGVzPVtRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2ExYTFhYSIsIiM3MTcxN2EiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgYnV0dG9uLmRhbmdlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMSkiLCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2VmNDQ0NCIsIiNmODcxNzEiKX07CiAgICAgIH0KICAgICAgYnV0dG9uLmRhbmdlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMikiLCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICB9CiAgICBgXTt0YWJDb3VudGVyPSh4aSh0aGlzLGcpLDIpO2FkZFRhYigpe3RoaXMudGFiQ291bnRlcisrLHRoaXMudGFicz1bLi4udGhpcy50YWJzLHtrZXk6YFRhYiAke3RoaXMudGFiQ291bnRlcn1gLGljb25OYW1lOiJsdWNpZGU6ZmlsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZyhgVGFiICR7dGhpcy50YWJDb3VudGVyfWApfV19cmVtb3ZlTGFzdFRhYigpe3RoaXMudGFicy5sZW5ndGg+MCYmKHRoaXMudGFicz10aGlzLnRhYnMuc2xpY2UoMCwtMSkpfWNsZWFyVGFicygpe3RoaXMudGFicz1bXX1yZW5kZXIoKXtsZXQgdj10aGlzLmF1dG9IaWRlJiZ0aGlzLnRhYnMubGVuZ3RoPD10aGlzLnRocmVzaG9sZDtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7dj93YDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gOndgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCk9PnRoaXMuYWRkVGFiKCl9PisgQWRkIFRhYjwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImRhbmdlciIgQGNsaWNrPSR7KCk9PnRoaXMucmVtb3ZlTGFzdFRhYigpfT4tIFJlbW92ZSBUYWI8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJkYW5nZXIiIEBjbGljaz0keygpPT50aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpPT57dGhpcy50aHJlc2hvbGQ9MH19PlRocmVzaG9sZDogMDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCk9Pnt0aGlzLnRocmVzaG9sZD0xfX0+VGhyZXNob2xkOiAxPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKT0+e3RoaXMudGhyZXNob2xkPTJ9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlPyJPTiI6Ik9GRiJ9IHwgVGhyZXNob2xkOiAke3RoaXMudGhyZXNob2xkfSB8IFRhYnM6ICR7dGhpcy50YWJzLmxlbmd0aH0KICAgICAgICA8YnI+VGFicyB3aWxsIGhpZGUgd2hlbiBjb3VudCDiiaQgdGhyZXNob2xkLgogICAgICA8L2Rpdj4KICAgIGB9c3RhdGlje3hpKGksYSl9fTtyZXR1cm4geT1pfSkoKSxoZnQ9KCk9PntsZXQgdD1be2tleToiSG9tZSIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKX0se2tleToiQW5hbHl0aWNzIERhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpsaW5lQ2hhcnQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIil9LHtrZXk6IlJlcG9ydHMiLGljb25OYW1lOiJsdWNpZGU6ZmlsZVRleHQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlJlcG9ydHMgY2xpY2tlZCIpfSx7a2V5OiJVc2VyIFNldHRpbmdzIixpY29uTmFtZToibHVjaWRlOnNldHRpbmdzIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIil9LHtrZXk6IkhlbHAiLGljb25OYW1lOiJsdWNpZGU6aGVscENpcmNsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiSGVscCBjbGlja2VkIil9XSxlPVt7a2V5OiJQcm9maWxlIixpY29uTmFtZToibHVjaWRlOnVzZXIiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlByb2ZpbGUgY2xpY2tlZCIpfSx7a2V5OiJTZWN1cml0eSIsaWNvbk5hbWU6Imx1Y2lkZTpzaGllbGQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIlNlY3VyaXR5IGNsaWNrZWQiKX0se2tleToiTm90aWZpY2F0aW9ucyIsaWNvbk5hbWU6Imx1Y2lkZTpiZWxsIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKX0se2tleToiSW50ZWdyYXRpb25zIixpY29uTmFtZToibHVjaWRlOmxpbmsiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkludGVncmF0aW9ucyBjbGlja2VkIil9LHtrZXk6IkFkdmFuY2VkIixpY29uTmFtZToibHVjaWRlOmNvZGUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkFkdmFuY2VkIGNsaWNrZWQiKX1dLGE9W3trZXk6IkFsbCIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiQWxsIGNsaWNrZWQiKX0se2tleToiQWN0aXZlIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJBY3RpdmUgY2xpY2tlZCIpfSx7a2V5OiJDb21wbGV0ZWQiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIkNvbXBsZXRlZCBjbGlja2VkIil9LHtrZXk6IkFyY2hpdmVkIixhY3Rpb246KCk9PmNvbnNvbGUubG9nKCJBcmNoaXZlZCBjbGlja2VkIil9XSxpPXI9PndgCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OyI+CiAgICAgICR7cn0KICAgIDwvZGl2PgogIGA7cmV0dXJuIHdgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnR3by1jb2x1bW4gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyMDBweCAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SG9yaXpvbnRhbCBUYWJzIHdpdGggQW5pbWF0ZWQgSW5kaWNhdG9yPC9kaXY+CiAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFicz0ke3R9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7aSgiU2VsZWN0IGEgdGFiIHRvIHNlZSB0aGUgc21vb3RoIHNsaWRpbmcgYW5pbWF0aW9uIG9mIHRoZSBpbmRpY2F0b3IuIFRoZSBpbmRpY2F0b3IgYXV0b21hdGljYWxseSBhZGp1c3RzIGl0cyB3aWR0aCB0byBtYXRjaCB0aGUgdGFiIGNvbnRlbnQgd2l0aCBtaW5pbWFsIHBhZGRpbmcuIil9CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q2xvc2VhYmxlIFRhYnMgKEJyb3dzZXItc3R5bGUpPC9kaXY+CiAgICAgICAgPGRlbW8tY2xvc2VhYmxlLXRhYnM+PC9kZW1vLWNsb3NlYWJsZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1dG8taGlkZSBUYWJzPC9kaXY+CiAgICAgICAgPGRlbW8tYXV0b2hpZGUtdGFicz48L2RlbW8tYXV0b2hpZGUtdGFicz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WZXJ0aWNhbCBUYWJzIExheW91dDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InR3by1jb2x1bW4iPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFiU3R5bGU9JHsidmVydGljYWwifSAudGFicz0ke2V9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICAgJHtpKCJWZXJ0aWNhbCB0YWJzIHdvcmsgZ3JlYXQgZm9yIHNldHRpbmdzIHBhZ2VzIGFuZCBuYXZpZ2F0aW9uIG1lbnVzLiBUaGUgYW5pbWF0ZWQgaW5kaWNhdG9yIHNtb290aGx5IHRyYW5zaXRpb25zIGJldHdlZW4gc2VsZWN0aW9ucy4iKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5XaXRob3V0IEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnNob3dUYWJJbmRpY2F0b3I9JHshMX0gLnRhYnM9JHthfT48L2RlZXMtYXBwdWktdGFicz4KICAgICAgICAke2koIlRhYnMgY2FuIGFsc28gYmUgdXNlZCB3aXRob3V0IHRoZSBhbmltYXRlZCBpbmRpY2F0b3IgYnkgc2V0dGluZyBzaG93VGFiSW5kaWNhdG9yIHRvIGZhbHNlLiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGB9fSk7dmFyIEJzLEwyLGZmdCxjVj1iKCgpPT57Y28oKTt1ZSgpO0x0KCk7dWZ0KCk7VmUoKTtCcz1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LEwyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxmZnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWFwcHVpLXRhYnMiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXTt2YXIgRT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IFQ9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpBcnJheX0pXSxkPVtJKHt0eXBlOk9iamVjdH0pXSxsPVtJKHt0eXBlOkJvb2xlYW59KV0seT1bSSh7dHlwZTpTdHJpbmd9KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0koe3R5cGU6TnVtYmVyfSldLE49W0soKV0scT1bSygpXSxCcyh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ0YWJzImluICQsZ2V0OiQ9PiQudGFicyxzZXQ6KCQsVik9PnskLnRhYnM9Vn19LG1ldGFkYXRhOlR9LG4sbyksQnModGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWxlY3RlZFRhYiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InNlbGVjdGVkVGFiImluICQsZ2V0OiQ9PiQuc2VsZWN0ZWRUYWIsc2V0OigkLFYpPT57JC5zZWxlY3RlZFRhYj1WfX0sbWV0YWRhdGE6VH0sYyxwKSxCcyh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dUYWJJbmRpY2F0b3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJzaG93VGFiSW5kaWNhdG9yImluICQsZ2V0OiQ9PiQuc2hvd1RhYkluZGljYXRvcixzZXQ6KCQsVik9PnskLnNob3dUYWJJbmRpY2F0b3I9Vn19LG1ldGFkYXRhOlR9LGYsZyksQnModGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJTdHlsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InRhYlN0eWxlImluICQsZ2V0OiQ9PiQudGFiU3R5bGUsc2V0OigkLFYpPT57JC50YWJTdHlsZT1WfX0sbWV0YWRhdGE6VH0sdixtKSxCcyh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9IaWRlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iYXV0b0hpZGUiaW4gJCxnZXQ6JD0+JC5hdXRvSGlkZSxzZXQ6KCQsVik9PnskLmF1dG9IaWRlPVZ9fSxtZXRhZGF0YTpUfSxNLFMpLEJzKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXV0b0hpZGVUaHJlc2hvbGQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJhdXRvSGlkZVRocmVzaG9sZCJpbiAkLGdldDokPT4kLmF1dG9IaWRlVGhyZXNob2xkLHNldDooJCxWKT0+eyQuYXV0b0hpZGVUaHJlc2hvbGQ9Vn19LG1ldGFkYXRhOlR9LF8sayksQnModGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjYW5TY3JvbGxMZWZ0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iY2FuU2Nyb2xsTGVmdCJpbiAkLGdldDokPT4kLmNhblNjcm9sbExlZnQsc2V0OigkLFYpPT57JC5jYW5TY3JvbGxMZWZ0PVZ9fSxtZXRhZGF0YTpUfSxMLEEpLEJzKHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY2FuU2Nyb2xsUmlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJjYW5TY3JvbGxSaWdodCJpbiAkLGdldDokPT4kLmNhblNjcm9sbFJpZ2h0LHNldDooJCxWKT0+eyQuY2FuU2Nyb2xsUmlnaHQ9Vn19LG1ldGFkYXRhOlR9LEMseiksQnMobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6VH0sbnVsbCxhKSxFPWk9ZS52YWx1ZSxUJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlR9KX1zdGF0aWMgZGVtbz1oZnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJBcHAgVUkiXTsjZT1MMih0aGlzLG4sW10pO2dldCB0YWJzKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHRhYnMoVCl7dGhpcy4jZT1UfSN0PShMMih0aGlzLG8pLEwyKHRoaXMsYyxudWxsKSk7Z2V0IHNlbGVjdGVkVGFiKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNlbGVjdGVkVGFiKFQpe3RoaXMuI3Q9VH0jYT0oTDIodGhpcyxwKSxMMih0aGlzLGYsITApKTtnZXQgc2hvd1RhYkluZGljYXRvcigpe3JldHVybiB0aGlzLiNhfXNldCBzaG93VGFiSW5kaWNhdG9yKFQpe3RoaXMuI2E9VH0jaT0oTDIodGhpcyxnKSxMMih0aGlzLHYsImhvcml6b250YWwiKSk7Z2V0IHRhYlN0eWxlKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHRhYlN0eWxlKFQpe3RoaXMuI2k9VH0jcj0oTDIodGhpcyxtKSxMMih0aGlzLE0sITEpKTtnZXQgYXV0b0hpZGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgYXV0b0hpZGUoVCl7dGhpcy4jcj1UfSNzPShMMih0aGlzLFMpLEwyKHRoaXMsXywwKSk7Z2V0IGF1dG9IaWRlVGhyZXNob2xkKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGF1dG9IaWRlVGhyZXNob2xkKFQpe3RoaXMuI3M9VH0jbj0oTDIodGhpcyxrKSxMMih0aGlzLEwsITEpKTtnZXQgY2FuU2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLiNufXNldCBjYW5TY3JvbGxMZWZ0KFQpe3RoaXMuI249VH0jbz0oTDIodGhpcyxBKSxMMih0aGlzLEMsITEpKTtnZXQgY2FuU2Nyb2xsUmlnaHQoKXtyZXR1cm4gdGhpcy4jb31zZXQgY2FuU2Nyb2xsUmlnaHQoVCl7dGhpcy4jbz1UfXJlc2l6ZU9ic2VydmVyPShMMih0aGlzLHopLG51bGwpO3N0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyLmhvcml6b250YWwtd3JhcHBlciB7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2guYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsInJnYmEoMjIsMjIsMjIsMCkiKX0gMTAwJSk7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwtZmFkZS1yaWdodCB7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGxlZnQsCiAgICAgICAgICAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2guYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsInJnYmEoMjIsMjIsMjIsMCkiKX0gMTAwJSk7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwtZmFkZS52aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgICAgICBzY3JvbGxiYXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFNob3cgc2Nyb2xsYmFyIG9uIGhvdmVyICovCiAgICAgIC50YWJzLXdyYXBwZXI6aG92ZXIgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiAke2guYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjIpIil9IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCJyZ2JhKDI1NSwyNTUsMjU1LDAuMzUpIil9OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KCiAgICAgIC50YWIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbCAudGFiIC50YWItY29udGVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIC50YWIgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAzKSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwicmdiYSgzOSwgMzksIDQyLCAwLjUpIil9OwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiOjphZnRlciwKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiArIC50YWI6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAudmVydGljYWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgei1pbmRleDogMzsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsLXdyYXBwZXIgLnRhYkluZGljYXRvciB7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzI3MjcyYSIpfTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpOwogICAgICB9CgogICAgICAvKiBDbG9zZSBidXR0b24gKi8KICAgICAgLnRhYi1jbG9zZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMsIGJhY2tncm91bmQgMC4xNXM7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsInJnYmEoMjU1LDI1NSwyNTUsMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNlZjQ0NDQiLCIjZjg3MTcxIil9OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHRoaXMuYXV0b0hpZGUmJnRoaXMudGFicy5sZW5ndGg8PXRoaXMuYXV0b0hpZGVUaHJlc2hvbGQ/d2BgOndgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYH1yZW5kZXJUYWJzV3JhcHBlcigpe2xldCBUPXRoaXMudGFiU3R5bGU9PT0iaG9yaXpvbnRhbCIsJD1UPyJ0YWJzLXdyYXBwZXIgaG9yaXpvbnRhbC13cmFwcGVyIjoidmVydGljYWwtd3JhcHBlciIsVj1gdGFic0NvbnRhaW5lciAke3RoaXMudGFiU3R5bGV9YDtyZXR1cm4gVD93YAogICAgICAgIDxkaXYgY2xhc3M9IiR7JH0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtbGVmdCAke3RoaXMuY2FuU2Nyb2xsTGVmdD8idmlzaWJsZSI6IiJ9Ij48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9IiR7Vn0iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy50YWJzLm1hcChSPT50aGlzLnJlbmRlclRhYihSLFQpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtcmlnaHQgJHt0aGlzLmNhblNjcm9sbFJpZ2h0PyJ2aXNpYmxlIjoiIn0iPjwvZGl2PgogICAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3I/d2A8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA6d2AKICAgICAgPGRpdiBjbGFzcz0iJHskfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iJHtWfSI+CiAgICAgICAgICAke3RoaXMudGFicy5tYXAoUj0+dGhpcy5yZW5kZXJUYWIoUixUKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3I/d2A8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJUYWIoVCwkKXtsZXQgUj1gdGFiICR7VD09PXRoaXMuc2VsZWN0ZWRUYWI/InNlbGVjdGVkVGFiIjoiIn1gLFU9VC5jbG9zZWFibGU/d2AKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSIke2o9PnRoaXMuY2xvc2VUYWIoaixUKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyI+PC9kZWVzLWljb24+CiAgICAgIDwvc3Bhbj4KICAgIGA6IiIscmU9JD93YAogICAgICA8c3BhbiBjbGFzcz0idGFiLWNvbnRlbnQiPgogICAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKFQpfQogICAgICAgICR7VC5rZXl9CiAgICAgIDwvc3Bhbj4KICAgICAgJHtVfQogICAgYDp3YAogICAgICAke3RoaXMucmVuZGVyVGFiSWNvbihUKX0KICAgICAgJHtULmtleX0KICAgICAgJHtVfQogICAgYDtyZXR1cm4gd2AKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSIke1J9IgogICAgICAgIEBjbGljaz0iJHsoKT0+dGhpcy5zZWxlY3RUYWIoVCl9IgogICAgICA+CiAgICAgICAgJHtyZX0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlclRhYkljb24oVCl7cmV0dXJuIFQuaWNvbk5hbWU/d2A8ZGVlcy1pY29uIC5pY29uPSR7VC5pY29uTmFtZX0+PC9kZWVzLWljb24+YDoiIn1zZWxlY3RUYWIoVCl7dGhpcy5zZWxlY3RlZFRhYj1ULFQuYWN0aW9uKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zY3JvbGxUYWJJbnRvVmlldyhUKX0pLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zZWxlY3QiLHtkZXRhaWw6e3RhYjpUfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNsb3NlVGFiKFQsJCl7VC5zdG9wUHJvcGFnYXRpb24oKSwkLm9uQ2xvc2UmJiQub25DbG9zZSgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZSIse2RldGFpbDp7dGFiOiR9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Zmlyc3RVcGRhdGVkKCl7dGhpcy50YWJzJiZ0aGlzLnRhYnMubGVuZ3RoPjAmJnRoaXMuc2VsZWN0VGFiKHRoaXMudGFic1swXSksdGhpcy5zZXR1cFJlc2l6ZU9ic2VydmVyKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpfSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVzaXplT2JzZXJ2ZXImJih0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPW51bGwpfXNldHVwUmVzaXplT2JzZXJ2ZXIoKXtpZih0aGlzLnRhYlN0eWxlIT09Imhvcml6b250YWwiKXJldHVybjt0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKX0pO2xldCBUPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpO1QmJnRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShUKX1oYW5kbGVTY3JvbGw9KCk9Pnt0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlKCl9O3VwZGF0ZVNjcm9sbFN0YXRlKCl7bGV0IFQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFic0NvbnRhaW5lci5ob3Jpem9udGFsIik7aWYoIVQpcmV0dXJuO2xldCAkPVQuc2Nyb2xsTGVmdCxWPVQuc2Nyb2xsV2lkdGgsUj1ULmNsaWVudFdpZHRoLFU9Mjt0aGlzLmNhblNjcm9sbExlZnQ9JD5VLHRoaXMuY2FuU2Nyb2xsUmlnaHQ9JDxWLVItVX1zY3JvbGxUYWJJbnRvVmlldyhUKXtpZih0aGlzLnRhYlN0eWxlIT09Imhvcml6b250YWwiKXJldHVybjtsZXQgJD10aGlzLnRhYnMuaW5kZXhPZihUKTtpZigkPT09LTEpcmV0dXJuO2xldCBWPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpLFI9Vj8ucXVlcnlTZWxlY3RvcihgLnRhYjpudGgtY2hpbGQoJHskKzF9KWApO2lmKFImJlYpe2xldCBVPVYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscmU9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZS5sZWZ0Pj1VLmxlZnQmJnJlLnJpZ2h0PD1VLnJpZ2h0fHxSLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pfX1hc3luYyB1cGRhdGVkKFQpe3N1cGVyLnVwZGF0ZWQoVCksVC5oYXMoInRhYnMiKSYmdGhpcy50YWJzJiZ0aGlzLnRhYnMubGVuZ3RoPjAmJiF0aGlzLnNlbGVjdGVkVGFiJiZ0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pLChULmhhcygic2VsZWN0ZWRUYWIiKXx8VC5oYXMoInRhYnMiKSkmJihhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLCF0aGlzLmluZGljYXRvckluaXRpYWxpemVkJiZkb2N1bWVudC5mb250cyYmYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVUYWJJbmRpY2F0b3IoKSx0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlKCl9KSl9aW5kaWNhdG9ySW5pdGlhbGl6ZWQ9ITE7dXBkYXRlVGFiSW5kaWNhdG9yKCl7aWYoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKXJldHVybjtsZXQgVD10aGlzLmdldFNlbGVjdGVkVGFiRWxlbWVudCgpO2lmKCFUKXJldHVybjtsZXQgJD10aGlzLmdldEluZGljYXRvckVsZW1lbnQoKTskJiYodGhpcy5oYW5kbGVJbml0aWFsVHJhbnNpdGlvbigkKSx0aGlzLnRhYlN0eWxlPT09Imhvcml6b250YWwiP3RoaXMudXBkYXRlSG9yaXpvbnRhbEluZGljYXRvcigkLFQpOnRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoJCxUKSwkLnN0eWxlLm9wYWNpdHk9IjEiKX1zaG91bGRTaG93SW5kaWNhdG9yKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWImJnRoaXMuc2hvd1RhYkluZGljYXRvciYmdGhpcy50YWJzLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRUYWIpfWdldFNlbGVjdGVkVGFiRWxlbWVudCgpe2xldCBUPXRoaXMudGFicy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRUYWIpLFY9dGhpcy50YWJTdHlsZT09PSJob3Jpem9udGFsIj9gLnRhYnMtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke1QrMX0pYDpgLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtUKzF9KWA7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFYpfWdldEluZGljYXRvckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi50YWJJbmRpY2F0b3IiKX1oYW5kbGVJbml0aWFsVHJhbnNpdGlvbihUKXt0aGlzLmluZGljYXRvckluaXRpYWxpemVkfHwoVC5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIiksdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZD0hMCxzZXRUaW1lb3V0KCgpPT57VC5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIil9LDUwKSl9dXBkYXRlSG9yaXpvbnRhbEluZGljYXRvcihULCQpe2xldCBWPSQucXVlcnlTZWxlY3RvcigiLnRhYi1jb250ZW50Iik7aWYoIVYpcmV0dXJuO2xldCBSPVQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxVPVYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscmU9VS5sZWZ0LVIubGVmdCxqPVUud2lkdGgrOCxtZT1yZS00O1Quc3R5bGUud2lkdGg9YCR7an1weGAsVC5zdHlsZS5sZWZ0PWAke21lfXB4YH11cGRhdGVWZXJ0aWNhbEluZGljYXRvcihULCQpe2xldCBWPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciIpO1YmJihULnN0eWxlLnRvcD1gJHskLm9mZnNldFRvcCtWLm9mZnNldFRvcH1weGAsVC5zdHlsZS5oZWlnaHQ9YCR7JC5jbGllbnRIZWlnaHR9cHhgKX1zdGF0aWN7TDIoaSxhKX19O3JldHVybiBFPWl9KSgpfSk7dmFyIEZsLEppLG1mdCxkVj1iKCgpPT57Y28oKTt1ZSgpO0x0KCk7Y1YoKTtWZSgpO0ZsPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sSmk9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LG1mdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpBcnJheX0pXSxkPVtJKHt0eXBlOk9iamVjdH0pXSxsPVtJKHt0eXBlOkJvb2xlYW59KV0seT1bSSh7dHlwZTpCb29sZWFufSldLHg9W0koe3R5cGU6TnVtYmVyfSldLEZsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFicyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InRhYnMiaW4gayxnZXQ6az0+ay50YWJzLHNldDooayxOKT0+e2sudGFicz1OfX0sbWV0YWRhdGE6X30sbixvKSxGbCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkVGFiIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2VsZWN0ZWRUYWIiaW4gayxnZXQ6az0+ay5zZWxlY3RlZFRhYixzZXQ6KGssTik9PntrLnNlbGVjdGVkVGFiPU59fSxtZXRhZGF0YTpffSxjLHApLEZsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1RhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJzaG93VGFicyJpbiBrLGdldDprPT5rLnNob3dUYWJzLHNldDooayxOKT0+e2suc2hvd1RhYnM9Tn19LG1ldGFkYXRhOl99LGYsZyksRmwodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzQXV0b0hpZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ0YWJzQXV0b0hpZGUiaW4gayxnZXQ6az0+ay50YWJzQXV0b0hpZGUsc2V0OihrLE4pPT57ay50YWJzQXV0b0hpZGU9Tn19LG1ldGFkYXRhOl99LHYsbSksRmwodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzQXV0b0hpZGVUaHJlc2hvbGQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ0YWJzQXV0b0hpZGVUaHJlc2hvbGQiaW4gayxnZXQ6az0+ay50YWJzQXV0b0hpZGVUaHJlc2hvbGQsc2V0OihrLE4pPT57ay50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9Tn19LG1ldGFkYXRhOl99LE0sUyksRmwobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxGPWk9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX1zdGF0aWMgZGVtbz0oKT0+d2AKICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgIC50YWJzPSR7W3trZXk6Ik92ZXJ2aWV3IixpY29uTmFtZToibHVjaWRlOmhvbWUiLGFjdGlvbjooKT0+Y29uc29sZS5sb2coIk92ZXJ2aWV3Iil9LHtrZXk6IkRldGFpbHMiLGljb25OYW1lOiJsdWNpZGU6ZmlsZSIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiRGV0YWlscyIpfSx7a2V5OiJTZXR0aW5ncyIsaWNvbk5hbWU6Imx1Y2lkZTpzZXR0aW5ncyIsYWN0aW9uOigpPT5jb25zb2xlLmxvZygiU2V0dGluZ3MiKX1dfQogICAgPgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOiA0MHB4OyBjb2xvcjogI2NjYzsiPgogICAgICAgIDxoMT5NYWluIENvbnRlbnQgQXJlYTwvaDE+CiAgICAgICAgPHA+VGhpcyBpcyB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIGNvbnRlbnQgZ29lcy48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLWFwcHVpLW1haW5jb250ZW50PgogIGA7c3RhdGljIGRlbW9Hcm91cHM9WyJBcHAgVUkiXTsjZT1KaSh0aGlzLG4sW3trZXk6Ilx1MjZBMFx1RkUwRiBQbGVhc2Ugc2V0IHRhYnMiLGFjdGlvbjooKT0+Y29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50Iil9XSk7Z2V0IHRhYnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdGFicyhfKXt0aGlzLiNlPV99I3Q9KEppKHRoaXMsbyksSmkodGhpcyxjLG51bGwpKTtnZXQgc2VsZWN0ZWRUYWIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VsZWN0ZWRUYWIoXyl7dGhpcy4jdD1ffSNhPShKaSh0aGlzLHApLEppKHRoaXMsZiwhMCkpO2dldCBzaG93VGFicygpe3JldHVybiB0aGlzLiNhfXNldCBzaG93VGFicyhfKXt0aGlzLiNhPV99I2k9KEppKHRoaXMsZyksSmkodGhpcyx2LCExKSk7Z2V0IHRhYnNBdXRvSGlkZSgpe3JldHVybiB0aGlzLiNpfXNldCB0YWJzQXV0b0hpZGUoXyl7dGhpcy4jaT1ffSNyPShKaSh0aGlzLG0pLEppKHRoaXMsTSwwKSk7Z2V0IHRhYnNBdXRvSGlkZVRocmVzaG9sZCgpe3JldHVybiB0aGlzLiNyfXNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoXyl7dGhpcy4jcj1ffXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzE2MTYxNiIpfTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CgogICAgICAudG9wYmFyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLnRvcGJhciA+ICogewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWFyZWEgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgOmhvc3QoW25vdGFic10pIC50b3BiYXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMGZyOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXRhYnMKICAgICAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgICAgIC5zZWxlY3RlZFRhYj0ke3RoaXMuc2VsZWN0ZWRUYWJ9CiAgICAgICAgICAgIC5zaG93VGFiSW5kaWNhdG9yPSR7ITB9CiAgICAgICAgICAgIC50YWJTdHlsZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmF1dG9IaWRlPSR7dGhpcy50YWJzQXV0b0hpZGV9CiAgICAgICAgICAgIC5hdXRvSGlkZVRocmVzaG9sZD0ke3RoaXMudGFic0F1dG9IaWRlVGhyZXNob2xkfQogICAgICAgICAgICBAdGFiLXNlbGVjdD0ke189PnRoaXMuaGFuZGxlVGFiU2VsZWN0KF8pfQogICAgICAgICAgICBAdGFiLWNsb3NlPSR7Xz0+dGhpcy5oYW5kbGVUYWJDbG9zZShfKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICAgICAgPHNsb3QgbmFtZT0iY29udGVudCI+PC9zbG90PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9aGFuZGxlVGFiU2VsZWN0KF8pe3RoaXMuc2VsZWN0ZWRUYWI9Xy5kZXRhaWwudGFiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zZWxlY3QiLHtkZXRhaWw6Xy5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVUYWJDbG9zZShfKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLHtkZXRhaWw6Xy5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX11cGRhdGVkKF8pe3N1cGVyLnVwZGF0ZWQoXyksXy5oYXMoInNob3dUYWJzIikmJih0aGlzLnNob3dUYWJzP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJub3RhYnMiKTp0aGlzLnNldEF0dHJpYnV0ZSgibm90YWJzIiwiIikpfWFzeW5jIGZpcnN0VXBkYXRlZChfKXthd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoXyksdGhpcy5zaG93VGFic3x8dGhpcy5zZXRBdHRyaWJ1dGUoIm5vdGFicyIsIiIpO2xldCBrPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLXRhYnMiKTtrJiZhd2FpdCBrLnVwZGF0ZUNvbXBsZXRlfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxKaSh0aGlzLFMpfXN0YXRpY3tKaShpLGEpfX07cmV0dXJuIEY9aX0pKCl9KTt2YXIgUHQscWUsZ2Z0LGJmdD1iKCgpPT57dWUoKTtMdCgpO2NvKCk7c2Z0KCk7VmUoKTtuVigpOyRxKCk7RHEoKTtvVigpO2xWKCk7ZFYoKTtTcSgpO1B0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0scWU9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGdmdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYXBwdWkiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXSxyZSxqPVtdLG1lPVtdLHdlLEg9W10sY2U9W10sa2UsVz1bXSxEPVtdLE8sWj1bXSxZPVtdLG9lLGdlPVtdLGJlPVtdLCRlLEI9W10sUD1bXSxKLGZlPVtdLGRlPVtdLF9lLGhlPVtdLHRlPVtdLHplLEZlPVtdLEdlPVtdLHllLGVlPVtdLGFlPVtdLHZlLFBlPVtdLGplPVtdLHd0LG90PVtdLCR0PVtdLEt0LGllPVtdLHNlPVtdLFRlLGx0PVtdLGN0PVtdLG0xLGFpPVtdLHRzPVtdLGFzLEllPVtdLFplPVtdLCQxLHgyPVtdLEkyPVtdLGlhLE4yPVtdLHNuPVtdLG5uLG9uPVtdLEtsPVtdLFFsLE1lPVtdLGxlPVtdLERlLEYxPVtdLHN0PVtdLGQxLHJhPVtdLHR0PVtdLGoxLHNhPVtdLCRpPVtdLEpsLGRkPVtdLGVjPVtdLHBkLGJVPVtdLHZVPVtdO3ZhciB5VT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IEc9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpBcnJheX0pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpPYmplY3R9KV0sRj1bSSh7dHlwZTpBcnJheX0pXSxOPVtJKHt0eXBlOkJvb2xlYW59KV0scT1bSSh7dHlwZTpTdHJpbmd9KV0sRT1bSSh7dHlwZTpTdHJpbmd9KV0sVj1bSSh7dHlwZTpBcnJheX0pXSxyZT1bSSh7dHlwZTpBcnJheX0pXSx3ZT1bSSh7dHlwZTpBcnJheX0pXSxrZT1bSSh7dHlwZTpPYmplY3R9KV0sTz1bSSh7dHlwZTpTdHJpbmd9KV0sb2U9W0koe3R5cGU6QXJyYXl9KV0sJGU9W0koe3R5cGU6T2JqZWN0fSldLEo9W0koe3R5cGU6Qm9vbGVhbn0pXSxfZT1bSSh7dHlwZTpCb29sZWFufSldLHplPVtJKHt0eXBlOkJvb2xlYW59KV0seWU9W0koe3R5cGU6Qm9vbGVhbn0pXSx2ZT1bSSh7dHlwZTpCb29sZWFufSldLHd0PVtJKHt0eXBlOkJvb2xlYW59KV0sS3Q9W0koe3R5cGU6TnVtYmVyfSldLFRlPVtLKCldLG0xPVtLKCldLGFzPVtJKHt0eXBlOkFycmF5fSldLCQxPVtJKHt0eXBlOk9iamVjdH0pXSxpYT1bSygpXSxubj1bSygpXSxRbD1bSygpXSxEZT1bSygpXSxkMT1bSygpXSxqMT1bSygpXSxKbD1bSygpXSxwZD1bSygpXSxQdCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhck1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFwcGJhck1lbnVJdGVtcyJpbiBYLGdldDpYPT5YLmFwcGJhck1lbnVJdGVtcyxzZXQ6KFgsU2UpPT57WC5hcHBiYXJNZW51SXRlbXM9U2V9fSxtZXRhZGF0YTpHfSxuLG8pLFB0KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyQnJlYWRjcnVtYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJhcHBiYXJCcmVhZGNydW1icyJpbiBYLGdldDpYPT5YLmFwcGJhckJyZWFkY3J1bWJzLHNldDooWCxTZSk9PntYLmFwcGJhckJyZWFkY3J1bWJzPVNlfX0sbWV0YWRhdGE6R30sYyxwKSxQdCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yImluIFgsZ2V0Olg9PlguYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcixzZXQ6KFgsU2UpPT57WC5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yPVNlfX0sbWV0YWRhdGE6R30sZixnKSxQdCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFwcGJhclNob3dXaW5kb3dDb250cm9scyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFwcGJhclNob3dXaW5kb3dDb250cm9scyJpbiBYLGdldDpYPT5YLmFwcGJhclNob3dXaW5kb3dDb250cm9scyxzZXQ6KFgsU2UpPT57WC5hcHBiYXJTaG93V2luZG93Q29udHJvbHM9U2V9fSxtZXRhZGF0YTpHfSx2LG0pLFB0KHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyVXNlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFwcGJhclVzZXIiaW4gWCxnZXQ6WD0+WC5hcHBiYXJVc2VyLHNldDooWCxTZSk9PntYLmFwcGJhclVzZXI9U2V9fSxtZXRhZGF0YTpHfSxNLFMpLFB0KHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFwcGJhclByb2ZpbGVNZW51SXRlbXMiaW4gWCxnZXQ6WD0+WC5hcHBiYXJQcm9maWxlTWVudUl0ZW1zLHNldDooWCxTZSk9PntYLmFwcGJhclByb2ZpbGVNZW51SXRlbXM9U2V9fSxtZXRhZGF0YTpHfSxfLGspLFB0KHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXBwYmFyU2hvd1NlYXJjaCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFwcGJhclNob3dTZWFyY2giaW4gWCxnZXQ6WD0+WC5hcHBiYXJTaG93U2VhcmNoLHNldDooWCxTZSk9PntYLmFwcGJhclNob3dTZWFyY2g9U2V9fSxtZXRhZGF0YTpHfSxMLEEpLFB0KHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVMb2dvSWNvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+Im1haW5tZW51TG9nb0ljb24iaW4gWCxnZXQ6WD0+WC5tYWlubWVudUxvZ29JY29uLHNldDooWCxTZSk9PntYLm1haW5tZW51TG9nb0ljb249U2V9fSxtZXRhZGF0YTpHfSxDLHopLFB0KHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVMb2dvVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+Im1haW5tZW51TG9nb1RleHQiaW4gWCxnZXQ6WD0+WC5tYWlubWVudUxvZ29UZXh0LHNldDooWCxTZSk9PntYLm1haW5tZW51TG9nb1RleHQ9U2V9fSxtZXRhZGF0YTpHfSxULCQpLFB0KHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVHcm91cHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJtYWlubWVudUdyb3VwcyJpbiBYLGdldDpYPT5YLm1haW5tZW51R3JvdXBzLHNldDooWCxTZSk9PntYLm1haW5tZW51R3JvdXBzPVNlfX0sbWV0YWRhdGE6R30sUixVKSxQdCh0aGlzLG51bGwscmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWlubWVudUJvdHRvbVRhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJtYWlubWVudUJvdHRvbVRhYnMiaW4gWCxnZXQ6WD0+WC5tYWlubWVudUJvdHRvbVRhYnMsc2V0OihYLFNlKT0+e1gubWFpbm1lbnVCb3R0b21UYWJzPVNlfX0sbWV0YWRhdGE6R30saixtZSksUHQodGhpcyxudWxsLHdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVUYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ibWFpbm1lbnVUYWJzImluIFgsZ2V0Olg9PlgubWFpbm1lbnVUYWJzLHNldDooWCxTZSk9PntYLm1haW5tZW51VGFicz1TZX19LG1ldGFkYXRhOkd9LEgsY2UpLFB0KHRoaXMsbnVsbCxrZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51U2VsZWN0ZWRUYWIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJtYWlubWVudVNlbGVjdGVkVGFiImluIFgsZ2V0Olg9PlgubWFpbm1lbnVTZWxlY3RlZFRhYixzZXQ6KFgsU2UpPT57WC5tYWlubWVudVNlbGVjdGVkVGFiPVNlfX0sbWV0YWRhdGE6R30sVyxEKSxQdCh0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlY29uZGFyeW1lbnVIZWFkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ic2Vjb25kYXJ5bWVudUhlYWRpbmciaW4gWCxnZXQ6WD0+WC5zZWNvbmRhcnltZW51SGVhZGluZyxzZXQ6KFgsU2UpPT57WC5zZWNvbmRhcnltZW51SGVhZGluZz1TZX19LG1ldGFkYXRhOkd9LFosWSksUHQodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2Vjb25kYXJ5bWVudUdyb3VwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+InNlY29uZGFyeW1lbnVHcm91cHMiaW4gWCxnZXQ6WD0+WC5zZWNvbmRhcnltZW51R3JvdXBzLHNldDooWCxTZSk9PntYLnNlY29uZGFyeW1lbnVHcm91cHM9U2V9fSxtZXRhZGF0YTpHfSxnZSxiZSksUHQodGhpcyxudWxsLCRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+InNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0iaW4gWCxnZXQ6WD0+WC5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLHNldDooWCxTZSk9PntYLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW09U2V9fSxtZXRhZGF0YTpHfSxCLFApLFB0KHRoaXMsbnVsbCxKLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbm1lbnVDb2xsYXBzZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJtYWlubWVudUNvbGxhcHNlZCJpbiBYLGdldDpYPT5YLm1haW5tZW51Q29sbGFwc2VkLHNldDooWCxTZSk9PntYLm1haW5tZW51Q29sbGFwc2VkPVNlfX0sbWV0YWRhdGE6R30sZmUsZGUpLFB0KHRoaXMsbnVsbCxfZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlY29uZGFyeW1lbnVDb2xsYXBzZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJzZWNvbmRhcnltZW51Q29sbGFwc2VkImluIFgsZ2V0Olg9Plguc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCxzZXQ6KFgsU2UpPT57WC5zZWNvbmRhcnltZW51Q29sbGFwc2VkPVNlfX0sbWV0YWRhdGE6R30saGUsdGUpLFB0KHRoaXMsbnVsbCx6ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51VmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+Im1haW5tZW51VmlzaWJsZSJpbiBYLGdldDpYPT5YLm1haW5tZW51VmlzaWJsZSxzZXQ6KFgsU2UpPT57WC5tYWlubWVudVZpc2libGU9U2V9fSxtZXRhZGF0YTpHfSxGZSxHZSksUHQodGhpcyxudWxsLHllLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2Vjb25kYXJ5bWVudVZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJzZWNvbmRhcnltZW51VmlzaWJsZSJpbiBYLGdldDpYPT5YLnNlY29uZGFyeW1lbnVWaXNpYmxlLHNldDooWCxTZSk9PntYLnNlY29uZGFyeW1lbnVWaXNpYmxlPVNlfX0sbWV0YWRhdGE6R30sZWUsYWUpLFB0KHRoaXMsbnVsbCx2ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5jb250ZW50VGFic1Zpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJtYWluY29udGVudFRhYnNWaXNpYmxlImluIFgsZ2V0Olg9PlgubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSxzZXQ6KFgsU2UpPT57WC5tYWluY29udGVudFRhYnNWaXNpYmxlPVNlfX0sbWV0YWRhdGE6R30sUGUsamUpLFB0KHRoaXMsbnVsbCx3dCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRlbnRUYWJzQXV0b0hpZGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJjb250ZW50VGFic0F1dG9IaWRlImluIFgsZ2V0Olg9PlguY29udGVudFRhYnNBdXRvSGlkZSxzZXQ6KFgsU2UpPT57WC5jb250ZW50VGFic0F1dG9IaWRlPVNlfX0sbWV0YWRhdGE6R30sb3QsJHQpLFB0KHRoaXMsbnVsbCxLdCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkImluIFgsZ2V0Olg9PlguY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCxzZXQ6KFgsU2UpPT57WC5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkPVNlfX0sbWV0YWRhdGE6R30saWUsc2UpLFB0KHRoaXMsbnVsbCxUZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2aXR5TG9nVmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFjdGl2aXR5TG9nVmlzaWJsZSJpbiBYLGdldDpYPT5YLmFjdGl2aXR5TG9nVmlzaWJsZSxzZXQ6KFgsU2UpPT57WC5hY3Rpdml0eUxvZ1Zpc2libGU9U2V9fSxtZXRhZGF0YTpHfSxsdCxjdCksUHQodGhpcyxudWxsLG0xLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlMb2dDb3VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImFjdGl2aXR5TG9nQ291bnQiaW4gWCxnZXQ6WD0+WC5hY3Rpdml0eUxvZ0NvdW50LHNldDooWCxTZSk9PntYLmFjdGl2aXR5TG9nQ291bnQ9U2V9fSxtZXRhZGF0YTpHfSxhaSx0cyksUHQodGhpcyxudWxsLGFzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFpbmNvbnRlbnRUYWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ibWFpbmNvbnRlbnRUYWJzImluIFgsZ2V0Olg9PlgubWFpbmNvbnRlbnRUYWJzLHNldDooWCxTZSk9PntYLm1haW5jb250ZW50VGFicz1TZX19LG1ldGFkYXRhOkd9LEllLFplKSxQdCh0aGlzLG51bGwsJDEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWluY29udGVudFNlbGVjdGVkVGFiIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ibWFpbmNvbnRlbnRTZWxlY3RlZFRhYiJpbiBYLGdldDpYPT5YLm1haW5jb250ZW50U2VsZWN0ZWRUYWIsc2V0OihYLFNlKT0+e1gubWFpbmNvbnRlbnRTZWxlY3RlZFRhYj1TZX19LG1ldGFkYXRhOkd9LHgyLEkyKSxQdCh0aGlzLG51bGwsaWEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhcHBiYXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlg9PiJhcHBiYXIiaW4gWCxnZXQ6WD0+WC5hcHBiYXIsc2V0OihYLFNlKT0+e1guYXBwYmFyPVNlfX0sbWV0YWRhdGE6R30sTjIsc24pLFB0KHRoaXMsbnVsbCxubix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1haW5tZW51IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ibWFpbm1lbnUiaW4gWCxnZXQ6WD0+WC5tYWlubWVudSxzZXQ6KFgsU2UpPT57WC5tYWlubWVudT1TZX19LG1ldGFkYXRhOkd9LG9uLEtsKSxQdCh0aGlzLG51bGwsUWwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWNvbmRhcnltZW51IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4ic2Vjb25kYXJ5bWVudSJpbiBYLGdldDpYPT5YLnNlY29uZGFyeW1lbnUsc2V0OihYLFNlKT0+e1guc2Vjb25kYXJ5bWVudT1TZX19LG1ldGFkYXRhOkd9LE1lLGxlKSxQdCh0aGlzLG51bGwsRGUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYWluY29udGVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+Im1haW5jb250ZW50ImluIFgsZ2V0Olg9PlgubWFpbmNvbnRlbnQsc2V0OihYLFNlKT0+e1gubWFpbmNvbnRlbnQ9U2V9fSxtZXRhZGF0YTpHfSxGMSxzdCksUHQodGhpcyxudWxsLGQxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZpdHlsb2dFbGVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4iYWN0aXZpdHlsb2dFbGVtZW50ImluIFgsZ2V0Olg9PlguYWN0aXZpdHlsb2dFbGVtZW50LHNldDooWCxTZSk9PntYLmFjdGl2aXR5bG9nRWxlbWVudD1TZX19LG1ldGFkYXRhOkd9LHJhLHR0KSxQdCh0aGlzLG51bGwsajEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib3R0b21iYXJFbGVtZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4iYm90dG9tYmFyRWxlbWVudCJpbiBYLGdldDpYPT5YLmJvdHRvbWJhckVsZW1lbnQsc2V0OihYLFNlKT0+e1guYm90dG9tYmFyRWxlbWVudD1TZX19LG1ldGFkYXRhOkd9LHNhLCRpKSxQdCh0aGlzLG51bGwsSmwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJib3R0b21iYXJWaXNpYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpYPT4iYm90dG9tYmFyVmlzaWJsZSJpbiBYLGdldDpYPT5YLmJvdHRvbWJhclZpc2libGUsc2V0OihYLFNlKT0+e1guYm90dG9tYmFyVmlzaWJsZT1TZX19LG1ldGFkYXRhOkd9LGRkLGVjKSxQdCh0aGlzLG51bGwscGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50VmlldyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WD0+ImN1cnJlbnRWaWV3ImluIFgsZ2V0Olg9PlguY3VycmVudFZpZXcsc2V0OihYLFNlKT0+e1guY3VycmVudFZpZXc9U2V9fSxtZXRhZGF0YTpHfSxiVSx2VSksUHQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6R30sbnVsbCxhKSx5VT1pPWUudmFsdWUsRyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpHfSl9c3RhdGljIGRlbW89cmZ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiQXBwIFVJIl07dmlld0xpZmVjeWNsZSQ9bmV3IHp0LnNtYXJ0cngucnhqcy5TdWJqZWN0O3ZpZXdDaGFuZ2VkJD1uZXcgenQuc21hcnRyeC5yeGpzLlN1YmplY3Q7I2U9cWUodGhpcyxuLFtdKTtnZXQgYXBwYmFyTWVudUl0ZW1zKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGFwcGJhck1lbnVJdGVtcyhHKXt0aGlzLiNlPUd9I3Q9KHFlKHRoaXMsbykscWUodGhpcyxjLCIiKSk7Z2V0IGFwcGJhckJyZWFkY3J1bWJzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGFwcGJhckJyZWFkY3J1bWJzKEcpe3RoaXMuI3Q9R30jYT0ocWUodGhpcyxwKSxxZSh0aGlzLGYsIiA+ICIpKTtnZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcigpe3JldHVybiB0aGlzLiNhfXNldCBhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yKEcpe3RoaXMuI2E9R30jaT0ocWUodGhpcyxnKSxxZSh0aGlzLHYsITApKTtnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGFwcGJhclNob3dXaW5kb3dDb250cm9scyhHKXt0aGlzLiNpPUd9I3I9KHFlKHRoaXMsbSkscWUodGhpcyxNLHZvaWQgMCkpO2dldCBhcHBiYXJVc2VyKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGFwcGJhclVzZXIoRyl7dGhpcy4jcj1HfSNzPShxZSh0aGlzLFMpLHFlKHRoaXMsXyxbXSkpO2dldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGFwcGJhclByb2ZpbGVNZW51SXRlbXMoRyl7dGhpcy4jcz1HfSNuPShxZSh0aGlzLGspLHFlKHRoaXMsTCwhMSkpO2dldCBhcHBiYXJTaG93U2VhcmNoKCl7cmV0dXJuIHRoaXMuI259c2V0IGFwcGJhclNob3dTZWFyY2goRyl7dGhpcy4jbj1HfSNvPShxZSh0aGlzLEEpLHFlKHRoaXMsQywiIikpO2dldCBtYWlubWVudUxvZ29JY29uKCl7cmV0dXJuIHRoaXMuI299c2V0IG1haW5tZW51TG9nb0ljb24oRyl7dGhpcy4jbz1HfSNsPShxZSh0aGlzLHopLHFlKHRoaXMsVCwiIikpO2dldCBtYWlubWVudUxvZ29UZXh0KCl7cmV0dXJuIHRoaXMuI2x9c2V0IG1haW5tZW51TG9nb1RleHQoRyl7dGhpcy4jbD1HfSNjPShxZSh0aGlzLCQpLHFlKHRoaXMsUixbXSkpO2dldCBtYWlubWVudUdyb3Vwcygpe3JldHVybiB0aGlzLiNjfXNldCBtYWlubWVudUdyb3VwcyhHKXt0aGlzLiNjPUd9I2Q9KHFlKHRoaXMsVSkscWUodGhpcyxqLFtdKSk7Z2V0IG1haW5tZW51Qm90dG9tVGFicygpe3JldHVybiB0aGlzLiNkfXNldCBtYWlubWVudUJvdHRvbVRhYnMoRyl7dGhpcy4jZD1HfSNwPShxZSh0aGlzLG1lKSxxZSh0aGlzLEgsW10pKTtnZXQgbWFpbm1lbnVUYWJzKCl7cmV0dXJuIHRoaXMuI3B9c2V0IG1haW5tZW51VGFicyhHKXt0aGlzLiNwPUd9I2g9KHFlKHRoaXMsY2UpLHFlKHRoaXMsVyx2b2lkIDApKTtnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpe3JldHVybiB0aGlzLiNofXNldCBtYWlubWVudVNlbGVjdGVkVGFiKEcpe3RoaXMuI2g9R30jdT0ocWUodGhpcyxEKSxxZSh0aGlzLFosIiIpKTtnZXQgc2Vjb25kYXJ5bWVudUhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jdX1zZXQgc2Vjb25kYXJ5bWVudUhlYWRpbmcoRyl7dGhpcy4jdT1HfSNmPShxZSh0aGlzLFkpLHFlKHRoaXMsZ2UsW10pKTtnZXQgc2Vjb25kYXJ5bWVudUdyb3Vwcygpe3JldHVybiB0aGlzLiNmfXNldCBzZWNvbmRhcnltZW51R3JvdXBzKEcpe3RoaXMuI2Y9R30jbT0ocWUodGhpcyxiZSkscWUodGhpcyxCLHZvaWQgMCkpO2dldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuI219c2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0oRyl7dGhpcy4jbT1HfSNnPShxZSh0aGlzLFApLHFlKHRoaXMsZmUsITEpKTtnZXQgbWFpbm1lbnVDb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy4jZ31zZXQgbWFpbm1lbnVDb2xsYXBzZWQoRyl7dGhpcy4jZz1HfSNiPShxZSh0aGlzLGRlKSxxZSh0aGlzLGhlLCExKSk7Z2V0IHNlY29uZGFyeW1lbnVDb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy4jYn1zZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZChHKXt0aGlzLiNiPUd9I3Y9KHFlKHRoaXMsdGUpLHFlKHRoaXMsRmUsITApKTtnZXQgbWFpbm1lbnVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuI3Z9c2V0IG1haW5tZW51VmlzaWJsZShHKXt0aGlzLiN2PUd9I3k9KHFlKHRoaXMsR2UpLHFlKHRoaXMsZWUsITApKTtnZXQgc2Vjb25kYXJ5bWVudVZpc2libGUoKXtyZXR1cm4gdGhpcy4jeX1zZXQgc2Vjb25kYXJ5bWVudVZpc2libGUoRyl7dGhpcy4jeT1HfSN4PShxZSh0aGlzLGFlKSxxZSh0aGlzLFBlLCEwKSk7Z2V0IG1haW5jb250ZW50VGFic1Zpc2libGUoKXtyZXR1cm4gdGhpcy4jeH1zZXQgbWFpbmNvbnRlbnRUYWJzVmlzaWJsZShHKXt0aGlzLiN4PUd9I3c9KHFlKHRoaXMsamUpLHFlKHRoaXMsb3QsITEpKTtnZXQgY29udGVudFRhYnNBdXRvSGlkZSgpe3JldHVybiB0aGlzLiN3fXNldCBjb250ZW50VGFic0F1dG9IaWRlKEcpe3RoaXMuI3c9R30jTT0ocWUodGhpcywkdCkscWUodGhpcyxpZSwwKSk7Z2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKXtyZXR1cm4gdGhpcy4jTX1zZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZChHKXt0aGlzLiNNPUd9I3o9KHFlKHRoaXMsc2UpLHFlKHRoaXMsbHQsITEpKTtnZXQgYWN0aXZpdHlMb2dWaXNpYmxlKCl7cmV0dXJuIHRoaXMuI3p9c2V0IGFjdGl2aXR5TG9nVmlzaWJsZShHKXt0aGlzLiN6PUd9I2s9KHFlKHRoaXMsY3QpLHFlKHRoaXMsYWksMCkpO2dldCBhY3Rpdml0eUxvZ0NvdW50KCl7cmV0dXJuIHRoaXMuI2t9c2V0IGFjdGl2aXR5TG9nQ291bnQoRyl7dGhpcy4jaz1HfSNTPShxZSh0aGlzLHRzKSxxZSh0aGlzLEllLFtdKSk7Z2V0IG1haW5jb250ZW50VGFicygpe3JldHVybiB0aGlzLiNTfXNldCBtYWluY29udGVudFRhYnMoRyl7dGhpcy4jUz1HfSNDPShxZSh0aGlzLFplKSxxZSh0aGlzLHgyLHZvaWQgMCkpO2dldCBtYWluY29udGVudFNlbGVjdGVkVGFiKCl7cmV0dXJuIHRoaXMuI0N9c2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoRyl7dGhpcy4jQz1HfSNfPShxZSh0aGlzLEkyKSxxZSh0aGlzLE4yLHZvaWQgMCkpO2dldCBhcHBiYXIoKXtyZXR1cm4gdGhpcy4jX31zZXQgYXBwYmFyKEcpe3RoaXMuI189R30jVD0ocWUodGhpcyxzbikscWUodGhpcyxvbix2b2lkIDApKTtnZXQgbWFpbm1lbnUoKXtyZXR1cm4gdGhpcy4jVH1zZXQgbWFpbm1lbnUoRyl7dGhpcy4jVD1HfSNMPShxZSh0aGlzLEtsKSxxZSh0aGlzLE1lLHZvaWQgMCkpO2dldCBzZWNvbmRhcnltZW51KCl7cmV0dXJuIHRoaXMuI0x9c2V0IHNlY29uZGFyeW1lbnUoRyl7dGhpcy4jTD1HfSMkPShxZSh0aGlzLGxlKSxxZSh0aGlzLEYxLHZvaWQgMCkpO2dldCBtYWluY29udGVudCgpe3JldHVybiB0aGlzLiMkfXNldCBtYWluY29udGVudChHKXt0aGlzLiMkPUd9I0E9KHFlKHRoaXMsc3QpLHFlKHRoaXMscmEsdm9pZCAwKSk7Z2V0IGFjdGl2aXR5bG9nRWxlbWVudCgpe3JldHVybiB0aGlzLiNBfXNldCBhY3Rpdml0eWxvZ0VsZW1lbnQoRyl7dGhpcy4jQT1HfSNEPShxZSh0aGlzLHR0KSxxZSh0aGlzLHNhLHZvaWQgMCkpO2dldCBib3R0b21iYXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuI0R9c2V0IGJvdHRvbWJhckVsZW1lbnQoRyl7dGhpcy4jRD1HfSNFPShxZSh0aGlzLCRpKSxxZSh0aGlzLGRkLCEwKSk7Z2V0IGJvdHRvbWJhclZpc2libGUoKXtyZXR1cm4gdGhpcy4jRX1zZXQgYm90dG9tYmFyVmlzaWJsZShHKXt0aGlzLiNFPUd9I1A9KHFlKHRoaXMsZWMpLHFlKHRoaXMsYlUsdm9pZCAwKSk7Z2V0IGN1cnJlbnRWaWV3KCl7cmV0dXJuIHRoaXMuI1B9c2V0IGN1cnJlbnRWaWV3KEcpe3RoaXMuI1A9R312aWV3UmVnaXN0cnk9KHFlKHRoaXMsdlUpLG5ldyBTOCk7cm91dGVyQ2xlYW51cD1udWxsO3NlYXJjaENhbGxiYWNrPW51bGw7c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjBmMGYwIiwiIzFhMWExYSIpfTsKICAgICAgfQogICAgICAubWFpbmdyaWQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4IC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAvKiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgc2V0IGR5bmFtaWNhbGx5IGluIHRlbXBsYXRlICovCiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIDAuM3MgZWFzZSwgaGVpZ2h0IDAuM3MgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6aG9zdChbYm90dG9tYmFyLWhpZGRlbl0pIC5tYWluZ3JpZCB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgfQoKICAgICAgZGVlcy1hcHB1aS1ib3R0b21iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiA0OwogICAgICB9CgogICAgICAvKiBaLWluZGV4IGxheWVyaW5nIGZvciBwcm9wZXIgc3RhY2tpbmcgKi8KICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1tYWlubWVudSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbmNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHRyYW5zZm9ybSAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cuaGlkZGVuIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy52aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgfQoKICAgICAgLyogVmlldyBjb250YWluZXIgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCB2aWV3cyAqLwogICAgICAudmlldy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CgogICAgICAudmlldy1jb250YWluZXI6ZW1wdHkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGVlcy1hcHB1aS1hcHBiYXIKICAgICAgICAubWVudUl0ZW1zPSR7dGhpcy5hcHBiYXJNZW51SXRlbXN9CiAgICAgICAgLmJyZWFkY3J1bWJzPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1ic30KICAgICAgICAuYnJlYWRjcnVtYlNlcGFyYXRvcj0ke3RoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcn0KICAgICAgICAuc2hvd1dpbmRvd0NvbnRyb2xzPSR7dGhpcy5hcHBiYXJTaG93V2luZG93Q29udHJvbHN9CiAgICAgICAgLnVzZXI9JHt0aGlzLmFwcGJhclVzZXJ9CiAgICAgICAgLnByb2ZpbGVNZW51SXRlbXM9JHt0aGlzLmFwcGJhclByb2ZpbGVNZW51SXRlbXN9CiAgICAgICAgLnNob3dTZWFyY2g9JHt0aGlzLmFwcGJhclNob3dTZWFyY2h9CiAgICAgICAgLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZT0keyEwfQogICAgICAgIC5hY3Rpdml0eUxvZ0NvdW50PSR7dGhpcy5hY3Rpdml0eUxvZ0NvdW50fQogICAgICAgIC5hY3Rpdml0eUxvZ0FjdGl2ZT0ke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlfQogICAgICAgIEBtZW51LXNlbGVjdD0ke0c9PnRoaXMuaGFuZGxlQXBwYmFyTWVudVNlbGVjdChHKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0ke0c9PnRoaXMuaGFuZGxlQXBwYmFyQnJlYWRjcnVtYk5hdmlnYXRlKEcpfQogICAgICAgIEBzZWFyY2gtY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hDbGljaygpfQogICAgICAgIEBzZWFyY2gtcXVlcnk9JHtHPT50aGlzLmhhbmRsZUFwcGJhclNlYXJjaFF1ZXJ5KEcpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpPT50aGlzLmhhbmRsZUFwcGJhclVzZXJNZW51T3BlbigpfQogICAgICAgIEBwcm9maWxlLW1lbnUtc2VsZWN0PSR7Rz0+dGhpcy5oYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChHKX0KICAgICAgICBAYWN0aXZpdHktdG9nZ2xlPSR7KCk9PnRoaXMudG9nZ2xlQWN0aXZpdHlMb2coKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5ncmlkIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyICR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU/IjI4MHB4IjoiMHB4In07Ij4KICAgICAgICAke3RoaXMubWFpbm1lbnVWaXNpYmxlP3dgCiAgICAgICAgICA8ZGVlcy1hcHB1aS1tYWlubWVudQogICAgICAgICAgICAubG9nb0ljb249JHt0aGlzLm1haW5tZW51TG9nb0ljb259CiAgICAgICAgICAgIC5sb2dvVGV4dD0ke3RoaXMubWFpbm1lbnVMb2dvVGV4dH0KICAgICAgICAgICAgLm1lbnVHcm91cHM9JHt0aGlzLm1haW5tZW51R3JvdXBzfQogICAgICAgICAgICAuYm90dG9tVGFicz0ke3RoaXMubWFpbm1lbnVCb3R0b21UYWJzfQogICAgICAgICAgICAudGFicz0ke3RoaXMubWFpbm1lbnVUYWJzfQogICAgICAgICAgICAuc2VsZWN0ZWRUYWI9JHt0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWJ9CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLm1haW5tZW51Q29sbGFwc2VkfQogICAgICAgICAgICBAdGFiLXNlbGVjdD0ke0c9PnRoaXMuaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoRyl9CiAgICAgICAgICAgIEBjb2xsYXBzZS1jaGFuZ2U9JHtHPT50aGlzLmhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoRyl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLW1haW5tZW51PgogICAgICAgIGA6IiJ9CiAgICAgICAgJHt0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlP3dgCiAgICAgICAgICA8ZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51CiAgICAgICAgICAgIC5oZWFkaW5nPSR7dGhpcy5zZWNvbmRhcnltZW51SGVhZGluZ30KICAgICAgICAgICAgLmdyb3Vwcz0ke3RoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwc30KICAgICAgICAgICAgLnNlbGVjdGVkSXRlbT0ke3RoaXMuc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbX0KICAgICAgICAgICAgLmNvbGxhcHNlZD0ke3RoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQGl0ZW0tc2VsZWN0PSR7Rz0+dGhpcy5oYW5kbGVTZWNvbmRhcnltZW51SXRlbVNlbGVjdChHKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0ke0c9PnRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKEcpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51PgogICAgICAgIGA6IiJ9CiAgICAgICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgICAgIC50YWJzPSR7dGhpcy5tYWluY29udGVudFRhYnN9CiAgICAgICAgICAuc2VsZWN0ZWRUYWI9JHt0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWJ9CiAgICAgICAgICAuc2hvd1RhYnM9JHt0aGlzLm1haW5jb250ZW50VGFic1Zpc2libGV9CiAgICAgICAgICAudGFic0F1dG9IaWRlPSR7dGhpcy5jb250ZW50VGFic0F1dG9IaWRlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZVRocmVzaG9sZD0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgIEB0YWItc2VsZWN0PSR7Rz0+dGhpcy5oYW5kbGVDb250ZW50VGFiU2VsZWN0KEcpfQogICAgICAgICAgQHRhYi1jbG9zZT0ke0c9PnRoaXMuaGFuZGxlQ29udGVudFRhYkNsb3NlKEcpfQogICAgICAgID4KICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXctY29udGFpbmVyIj48L2Rpdj4KICAgICAgICAgIDxzbG90IG5hbWU9Im1haW5jb250ZW50Ij48L3Nsb3Q+CiAgICAgICAgPC9kZWVzLWFwcHVpLW1haW5jb250ZW50PgogICAgICAgIDxkZWVzLWFwcHVpLWFjdGl2aXR5bG9nCiAgICAgICAgICBjbGFzcz0iJHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZT8idmlzaWJsZSI6ImhpZGRlbiJ9IgogICAgICAgID48L2RlZXMtYXBwdWktYWN0aXZpdHlsb2c+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuYm90dG9tYmFyVmlzaWJsZT93YAogICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcj48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICBgOiIifQogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXt0aGlzLmFwcGJhcj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hcHBiYXIiKSx0aGlzLm1haW5tZW51PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLW1haW5tZW51IiksdGhpcy5zZWNvbmRhcnltZW51PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKSx0aGlzLm1haW5jb250ZW50PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLW1haW5jb250ZW50IiksdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKSx0aGlzLmJvdHRvbWJhckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktYm90dG9tYmFyIiksdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQmJnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmVudHJpZXMkLnN1YnNjcmliZShHPT57dGhpcy5hY3Rpdml0eUxvZ0NvdW50PUcubGVuZ3RofSksdGhpcy52aWV3UmVnaXN0cnkuc2V0QXBwdWlSZWYodGhpcyl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucm91dGVyQ2xlYW51cCYmKHRoaXMucm91dGVyQ2xlYW51cCgpLHRoaXMucm91dGVyQ2xlYW51cD1udWxsKSx0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlZCQuY29tcGxldGUoKX1zZXRBcHBCYXJNZW51cyhHKXt0aGlzLmFwcGJhck1lbnVJdGVtcz1bLi4uR119dXBkYXRlQXBwQmFyTWVudShHLFgpe3RoaXMuYXBwYmFyTWVudUl0ZW1zPXRoaXMuYXBwYmFyTWVudUl0ZW1zLm1hcChTZT0+Im5hbWUiaW4gU2UmJlNlLm5hbWU9PT1HP3suLi5TZSwuLi5YfTpTZSl9c2V0QnJlYWRjcnVtYnMoRyl7QXJyYXkuaXNBcnJheShHKT90aGlzLmFwcGJhckJyZWFkY3J1bWJzPUcuam9pbih0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IpOnRoaXMuYXBwYmFyQnJlYWRjcnVtYnM9R31zZXRVc2VyKEcpe3RoaXMuYXBwYmFyVXNlcj1HfXNldFByb2ZpbGVNZW51SXRlbXMoRyl7dGhpcy5hcHBiYXJQcm9maWxlTWVudUl0ZW1zPVsuLi5HXX1zZXRTZWFyY2hWaXNpYmxlKEcpe3RoaXMuYXBwYmFyU2hvd1NlYXJjaD1HfXNldFdpbmRvd0NvbnRyb2xzVmlzaWJsZShHKXt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9scz1HfW9uU2VhcmNoKEcpe3RoaXMuc2VhcmNoQ2FsbGJhY2s9R31zZXRNYWluTWVudShHKXtHLmxvZ29JY29uIT09dm9pZCAwJiYodGhpcy5tYWlubWVudUxvZ29JY29uPUcubG9nb0ljb24pLEcubG9nb1RleHQhPT12b2lkIDAmJih0aGlzLm1haW5tZW51TG9nb1RleHQ9Ry5sb2dvVGV4dCksRy5ncm91cHMhPT12b2lkIDAmJih0aGlzLm1haW5tZW51R3JvdXBzPVsuLi5HLmdyb3Vwc10pLEcuYm90dG9tVGFicyE9PXZvaWQgMCYmKHRoaXMubWFpbm1lbnVCb3R0b21UYWJzPVsuLi5HLmJvdHRvbVRhYnNdKX11cGRhdGVNYWluTWVudUdyb3VwKEcsWCl7dGhpcy5tYWlubWVudUdyb3Vwcz10aGlzLm1haW5tZW51R3JvdXBzLm1hcChTZT0+U2UubmFtZT09PUc/ey4uLlNlLC4uLlh9OlNlKX1hZGRNYWluTWVudUl0ZW0oRyxYKXt0aGlzLm1haW5tZW51R3JvdXBzPXRoaXMubWFpbm1lbnVHcm91cHMubWFwKFNlPT5TZS5uYW1lPT09Rz97Li4uU2UsaXRlbXM6Wy4uLlNlLml0ZW1zfHxbXSxYXX06U2UpfXJlbW92ZU1haW5NZW51SXRlbShHLFgpe3RoaXMubWFpbm1lbnVHcm91cHM9dGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoU2U9PlNlLm5hbWU9PT1HP3suLi5TZSxpdGVtczooU2UuaXRlbXN8fFtdKS5maWx0ZXIoUnQ9PlJ0LmtleSE9PVgpfTpTZSl9c2V0TWFpbk1lbnVTZWxlY3Rpb24oRyl7Zm9yKGxldCBTZSBvZiB0aGlzLm1haW5tZW51R3JvdXBzKXtsZXQgUnQ9U2UuaXRlbXM/LmZpbmQoa2E9PmthLmtleT09PUcpO2lmKFJ0KXt0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWI9UnQ7cmV0dXJufX1sZXQgWD10aGlzLm1haW5tZW51Qm90dG9tVGFicy5maW5kKFNlPT5TZS5rZXk9PT1HKTtYJiYodGhpcy5tYWlubWVudVNlbGVjdGVkVGFiPVgpfXNldE1haW5NZW51Q29sbGFwc2VkKEcpe3RoaXMubWFpbm1lbnVDb2xsYXBzZWQ9R31zZXRNYWluTWVudVZpc2libGUoRyl7dGhpcy5tYWlubWVudVZpc2libGU9R31zZXRTZWNvbmRhcnlNZW51Q29sbGFwc2VkKEcpe3RoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZD1HfXNldFNlY29uZGFyeU1lbnVWaXNpYmxlKEcpe3RoaXMuc2Vjb25kYXJ5bWVudVZpc2libGU9R31zZXRDb250ZW50VGFic1Zpc2libGUoRyl7dGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlPUd9c2V0Q29udGVudFRhYnNBdXRvSGlkZShHLFg9MCl7dGhpcy5jb250ZW50VGFic0F1dG9IaWRlPUcsdGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkPVh9c2V0TWFpbk1lbnVCYWRnZShHLFgpe3RoaXMubWFpbm1lbnVHcm91cHM9dGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoU2U9Pih7Li4uU2UsaXRlbXM6KFNlLml0ZW1zfHxbXSkubWFwKFJ0PT5SdC5rZXk9PT1HP3suLi5SdCxiYWRnZTpYfTpSdCl9KSksdGhpcy5tYWlubWVudUJvdHRvbVRhYnM9dGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKFNlPT5TZS5rZXk9PT1HP3suLi5TZSxiYWRnZTpYfTpTZSl9Y2xlYXJNYWluTWVudUJhZGdlKEcpe3RoaXMubWFpbm1lbnVHcm91cHM9dGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoWD0+KHsuLi5YLGl0ZW1zOihYLml0ZW1zfHxbXSkubWFwKFNlPT57aWYoU2Uua2V5PT09Ryl7bGV0e2JhZGdlOlJ0LC4uLmthfT1TZTtyZXR1cm4ga2F9cmV0dXJuIFNlfSl9KSksdGhpcy5tYWlubWVudUJvdHRvbVRhYnM9dGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKFg9PntpZihYLmtleT09PUcpe2xldHtiYWRnZTpTZSwuLi5SdH09WDtyZXR1cm4gUnR9cmV0dXJuIFh9KX1zZXRTZWNvbmRhcnlNZW51KEcpe0cuaGVhZGluZyE9PXZvaWQgMCYmKHRoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmc9Ry5oZWFkaW5nKSx0aGlzLnNlY29uZGFyeW1lbnVHcm91cHM9Wy4uLkcuZ3JvdXBzXX11cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoRyxYKXt0aGlzLnNlY29uZGFyeW1lbnVHcm91cHM9dGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcChTZT0+U2UubmFtZT09PUc/ey4uLlNlLC4uLlh9OlNlKX1hZGRTZWNvbmRhcnlNZW51SXRlbShHLFgpe3RoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcz10aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKFNlPT5TZS5uYW1lPT09Rz97Li4uU2UsaXRlbXM6Wy4uLlNlLml0ZW1zLFhdfTpTZSl9c2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbihHKXtmb3IobGV0IFggb2YgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzKXtsZXQgU2U9WC5pdGVtcy5maW5kKFJ0PT4ia2V5ImluIFJ0JiZSdC5rZXk9PT1HKTtpZihTZSYmKCEoInR5cGUiaW4gU2UpfHxTZS50eXBlPT09InRhYiJ8fFNlLnR5cGU9PT12b2lkIDApKXt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW09U2U7cmV0dXJufX19Y2xlYXJTZWNvbmRhcnlNZW51KCl7dGhpcy5zZWNvbmRhcnltZW51SGVhZGluZz0iIix0aGlzLnNlY29uZGFyeW1lbnVHcm91cHM9W10sdGhpcy5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtPXZvaWQgMH1zZXRDb250ZW50VGFicyhHKXt0aGlzLm1haW5jb250ZW50VGFicz1bLi4uR10sRy5sZW5ndGg+MCYmIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiYmKHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYj1HWzBdKX1hZGRDb250ZW50VGFiKEcpe3RoaXMubWFpbmNvbnRlbnRUYWJzPVsuLi50aGlzLm1haW5jb250ZW50VGFicyxHXX1yZW1vdmVDb250ZW50VGFiKEcpe3RoaXMubWFpbmNvbnRlbnRUYWJzPXRoaXMubWFpbmNvbnRlbnRUYWJzLmZpbHRlcihYPT5YLmtleSE9PUcpLHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYj8ua2V5PT09RyYmKHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYj10aGlzLm1haW5jb250ZW50VGFic1swXSl9c2VsZWN0Q29udGVudFRhYihHKXtsZXQgWD10aGlzLm1haW5jb250ZW50VGFicy5maW5kKFNlPT5TZS5rZXk9PT1HKTtYJiYodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPVgpfWdldFNlbGVjdGVkQ29udGVudFRhYigpe3JldHVybiB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWJ9Z2V0IGFjdGl2aXR5TG9nKCl7cmV0dXJuIHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50P3thZGQ6Rz0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuYWRkKEcpLGFkZE1hbnk6Rz0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuYWRkTWFueShHKSxjbGVhcjooKT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuY2xlYXIoKSxnZXRFbnRyaWVzOigpPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5nZXRFbnRyaWVzKCksZmlsdGVyOkc9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmZpbHRlcihHKSxzZWFyY2g6Rz0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKEcpfTp7YWRkOkc9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5hZGQoRykpfSxhZGRNYW55Okc9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5hZGRNYW55KEcpKX0sY2xlYXI6KCk9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5jbGVhcigpKX0sZ2V0RW50cmllczooKT0+dGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmdldEVudHJpZXMoKXx8W10sZmlsdGVyOkc9PnRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5maWx0ZXIoRyl8fFtdLHNlYXJjaDpHPT50aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uc2VhcmNoKEcpfHxbXX19c2V0QWN0aXZpdHlMb2dWaXNpYmxlKEcpe3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlPUd9dG9nZ2xlQWN0aXZpdHlMb2coKXt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZT0hdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGV9Z2V0QWN0aXZpdHlMb2dWaXNpYmxlKCl7cmV0dXJuIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlfWdldCBib3R0b21CYXIoKXtyZXR1cm4gdGhpcy5ib3R0b21iYXJFbGVtZW50P3thZGRXaWRnZXQ6Rz0+dGhpcy5ib3R0b21iYXJFbGVtZW50LmFkZFdpZGdldChHKSx1cGRhdGVXaWRnZXQ6KEcsWCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudC51cGRhdGVXaWRnZXQoRyxYKSxyZW1vdmVXaWRnZXQ6Rz0+dGhpcy5ib3R0b21iYXJFbGVtZW50LnJlbW92ZVdpZGdldChHKSxnZXRXaWRnZXQ6Rz0+dGhpcy5ib3R0b21iYXJFbGVtZW50LmdldFdpZGdldChHKSxjbGVhcldpZGdldHM6KCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudC5jbGVhcldpZGdldHMoKSxhZGRBY3Rpb246Rz0+dGhpcy5ib3R0b21iYXJFbGVtZW50LmFkZEFjdGlvbihHKSxyZW1vdmVBY3Rpb246Rz0+dGhpcy5ib3R0b21iYXJFbGVtZW50LnJlbW92ZUFjdGlvbihHKSxjbGVhckFjdGlvbnM6KCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudC5jbGVhckFjdGlvbnMoKX06e2FkZFdpZGdldDpHPT57dGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZFdpZGdldChHKSl9LHVwZGF0ZVdpZGdldDooRyxYKT0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50Py51cGRhdGVXaWRnZXQoRyxYKSl9LHJlbW92ZVdpZGdldDpHPT57dGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnJlbW92ZVdpZGdldChHKSl9LGdldFdpZGdldDpHPT50aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmdldFdpZGdldChHKSxjbGVhcldpZGdldHM6KCk9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJXaWRnZXRzKCkpfSxhZGRBY3Rpb246Rz0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50Py5hZGRBY3Rpb24oRykpfSxyZW1vdmVBY3Rpb246Rz0+e3RoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+dGhpcy5ib3R0b21iYXJFbGVtZW50Py5yZW1vdmVBY3Rpb24oRykpfSxjbGVhckFjdGlvbnM6KCk9Pnt0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PnRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJBY3Rpb25zKCkpfX19c2V0Qm90dG9tQmFyVmlzaWJsZShHKXt0aGlzLmJvdHRvbWJhclZpc2libGU9RyxHP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIik6dGhpcy5zZXRBdHRyaWJ1dGUoImJvdHRvbWJhci1oaWRkZW4iLCIiKX1nZXRCb3R0b21CYXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuYm90dG9tYmFyVmlzaWJsZX1hc3luYyBuYXZpZ2F0ZVRvVmlldyhHLFgpe2xldCBTZT10aGlzLnZpZXdSZWdpc3RyeS5nZXQoRyk7aWYoIVNlKXJldHVybiBjb25zb2xlLndhcm4oYENhbm5vdCBuYXZpZ2F0ZSB0byB1bmtub3duIHZpZXc6ICR7R31gKSwhMTtsZXQgUnQ9YXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuY2FuTGVhdmVDdXJyZW50VmlldygpO2lmKFJ0IT09ITApaWYodHlwZW9mIFJ0PT0ic3RyaW5nIil7aWYoIXdpbmRvdy5jb25maXJtKFJ0KSlyZXR1cm4hMX1lbHNlIHJldHVybiExO3RoaXMudmlld0xpZmVjeWNsZSQubmV4dCh7dHlwZToibG9hZGluZyIsdmlld0lkOkd9KTt0cnl7YXdhaXQgdGhpcy5sb2FkVmlldyhTZSxYKTtsZXQgdGM9YCMke1NlLnJvdXRlfHxHfWA7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNoIT09dGMmJndpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7dmlld0lkOkd9LCIiLHRjKSwhMH1jYXRjaChrYSl7cmV0dXJuIHRoaXMudmlld0xpZmVjeWNsZSQubmV4dCh7dHlwZToibG9hZEVycm9yIix2aWV3SWQ6RyxlcnJvcjprYX0pLCExfX1nZXRDdXJyZW50Vmlldygpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3fWdldFZpZXdSZWdpc3RyeSgpe3JldHVybiB0aGlzLnZpZXdSZWdpc3RyeX1jb25maWd1cmUoRyl7Ry52aWV3cyYmKHRoaXMudmlld1JlZ2lzdHJ5LmNsZWFyKCksdGhpcy52aWV3UmVnaXN0cnkucmVnaXN0ZXJBbGwoRy52aWV3cykpLEcuYnJhbmRpbmcmJih0aGlzLm1haW5tZW51TG9nb0ljb249Ry5icmFuZGluZy5sb2dvSWNvbnx8IiIsdGhpcy5tYWlubWVudUxvZ29UZXh0PUcuYnJhbmRpbmcubG9nb1RleHR8fCIiKSxHLmFwcEJhciYmKHRoaXMuYXBwYmFyTWVudUl0ZW1zPUcuYXBwQmFyLm1lbnVJdGVtc3x8W10sdGhpcy5hcHBiYXJCcmVhZGNydW1icz1HLmFwcEJhci5icmVhZGNydW1ic3x8IiIsdGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yPUcuYXBwQmFyLmJyZWFkY3J1bWJTZXBhcmF0b3J8fCIgPiAiLHRoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzPUcuYXBwQmFyLnNob3dXaW5kb3dDb250cm9scz8/ITAsdGhpcy5hcHBiYXJTaG93U2VhcmNoPUcuYXBwQmFyLnNob3dTZWFyY2g/PyExLHRoaXMuYXBwYmFyVXNlcj1HLmFwcEJhci51c2VyLHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcz1HLmFwcEJhci5wcm9maWxlTWVudUl0ZW1zfHxbXSksRy5tYWluTWVudSYmKEcubWFpbk1lbnUuc2VjdGlvbnM/dGhpcy5tYWlubWVudUdyb3Vwcz10aGlzLmJ1aWxkTWFpbk1lbnVGcm9tU2VjdGlvbnMoRyk6Ry5tYWluTWVudS5ncm91cHMmJih0aGlzLm1haW5tZW51R3JvdXBzPUcubWFpbk1lbnUuZ3JvdXBzKSxHLm1haW5NZW51LmxvZ29JY29uJiYodGhpcy5tYWlubWVudUxvZ29JY29uPUcubWFpbk1lbnUubG9nb0ljb24pLEcubWFpbk1lbnUubG9nb1RleHQmJih0aGlzLm1haW5tZW51TG9nb1RleHQ9Ry5tYWluTWVudS5sb2dvVGV4dCksRy5tYWluTWVudS5ib3R0b21UYWJzP3RoaXMubWFpbm1lbnVCb3R0b21UYWJzPUcubWFpbk1lbnUuYm90dG9tVGFiczpHLm1haW5NZW51LmJvdHRvbUl0ZW1zJiYodGhpcy5tYWlubWVudUJvdHRvbVRhYnM9dGhpcy5idWlsZEJvdHRvbVRhYnNGcm9tSXRlbXMoRy5tYWluTWVudS5ib3R0b21JdGVtcykpKSxHLmJvdHRvbUJhciYmKHRoaXMuc2V0Qm90dG9tQmFyVmlzaWJsZShHLmJvdHRvbUJhci52aXNpYmxlPz8hMCksRy5ib3R0b21CYXIud2lkZ2V0cyYmRy5ib3R0b21CYXIud2lkZ2V0cy5mb3JFYWNoKFg9Pnt0aGlzLmJvdHRvbUJhci5hZGRXaWRnZXQoWCl9KSxHLmJvdHRvbUJhci5hY3Rpb25zJiZHLmJvdHRvbUJhci5hY3Rpb25zLmZvckVhY2goWD0+e3RoaXMuYm90dG9tQmFyLmFkZEFjdGlvbihYKX0pKSx0aGlzLnNldHVwUm91dGVySW50ZWdyYXRpb24oRyksRy5vblZpZXdDaGFuZ2UmJnRoaXMudmlld0NoYW5nZWQkLnN1YnNjcmliZShYPT57Ry5vblZpZXdDaGFuZ2UoWC52aWV3SWQsWC52aWV3KX0pLEcub25TZWFyY2gmJih0aGlzLnNlYXJjaENhbGxiYWNrPUcub25TZWFyY2gpLEcuZGVmYXVsdFZpZXcmJnRoaXMubmF2aWdhdGVUb1ZpZXcoRy5kZWZhdWx0Vmlldyl9c2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihHKXtsZXQgWD0oKT0+e2xldCBSdD13aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTtpZighUnQpcmV0dXJuO2xldCBrYT10aGlzLnZpZXdSZWdpc3RyeS5maW5kQnlSb3V0ZShSdCk7a2EmJnRoaXMubmF2aWdhdGVUb1ZpZXcoa2Eudmlldy5pZCxrYS5wYXJhbXMpfTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsWCksdGhpcy5yb3V0ZXJDbGVhbnVwPSgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLFgpfTtsZXQgU2U9d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk7aWYoU2Upe2xldCBSdD10aGlzLnZpZXdSZWdpc3RyeS5maW5kQnlSb3V0ZShTZSk7UnQmJnNldFRpbWVvdXQoKCk9PnRoaXMubmF2aWdhdGVUb1ZpZXcoUnQudmlldy5pZCxSdC5wYXJhbXMpLDApfX1idWlsZE1haW5NZW51RnJvbVNlY3Rpb25zKEcpe3JldHVybiBHLm1haW5NZW51Py5zZWN0aW9ucz9HLm1haW5NZW51LnNlY3Rpb25zLm1hcChYPT4oe25hbWU6WC5uYW1lLGl0ZW1zOlgudmlld3MubWFwKFNlPT57bGV0IFJ0PXRoaXMudmlld1JlZ2lzdHJ5LmdldChTZSk7cmV0dXJuIFJ0P3trZXk6UnQuaWQsaWNvbk5hbWU6UnQuaWNvbk5hbWUsYWN0aW9uOigpPT50aGlzLm5hdmlnYXRlVG9WaWV3KFNlKSxiYWRnZTpSdC5iYWRnZX06KGNvbnNvbGUud2FybihgVmlldyAiJHtTZX0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApLG51bGwpfSkuZmlsdGVyKEJvb2xlYW4pfSkpOltdfWJ1aWxkQm90dG9tVGFic0Zyb21JdGVtcyhHKXtyZXR1cm4gRy5tYXAoWD0+e2xldCBTZT10aGlzLnZpZXdSZWdpc3RyeS5nZXQoWCk7cmV0dXJuIFNlP3trZXk6U2UuaWQsaWNvbk5hbWU6U2UuaWNvbk5hbWUsYWN0aW9uOigpPT50aGlzLm5hdmlnYXRlVG9WaWV3KFgpfTooY29uc29sZS53YXJuKGBWaWV3ICIke1h9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKSxudWxsKX0pLmZpbHRlcihCb29sZWFuKX1hc3luYyBsb2FkVmlldyhHLFgpe2xldCBTZT10aGlzLmN1cnJlbnRWaWV3O3RoaXMuY3VycmVudFZpZXc9RztsZXQgUnQ9dGhpcy5tYWluY29udGVudD8ucXVlcnlTZWxlY3RvcigiLnZpZXctY29udGFpbmVyIil8fHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXctY29udGFpbmVyIik7aWYoUnQpe2xldCB0Yz1hd2FpdCB0aGlzLnZpZXdSZWdpc3RyeS5hY3RpdmF0ZVZpZXcoRy5pZCxSdCxYKTt0YyYmdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHt0eXBlOiJhY3RpdmF0ZWQiLHZpZXdJZDpHLmlkLGVsZW1lbnQ6dGMscGFyYW1zOlh9KX1HLnNlY29uZGFyeU1lbnUmJih0aGlzLnNlY29uZGFyeW1lbnVHcm91cHM9Ry5zZWNvbmRhcnlNZW51LHRoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmc9Ry5uYW1lKSxHLmNvbnRlbnRUYWJzJiYodGhpcy5tYWluY29udGVudFRhYnM9Ry5jb250ZW50VGFicyksdGhpcy5zZXRNYWluTWVudVNlbGVjdGlvbihHLmlkKTtsZXQga2E9e3ZpZXdJZDpHLmlkLHZpZXc6RyxwcmV2aW91c1ZpZXc6U2UscGFyYW1zOlh9O3RoaXMudmlld0NoYW5nZWQkLm5leHQoa2EpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInZpZXctY2hhbmdlIix7ZGV0YWlsOmthLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQXBwYmFyTWVudVNlbGVjdChHKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItbWVudS1zZWxlY3QiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoRyl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLWJyZWFkY3J1bWItbmF2aWdhdGUiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVBcHBiYXJTZWFyY2hDbGljaygpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1zZWFyY2gtY2xpY2siLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUFwcGJhclNlYXJjaFF1ZXJ5KEcpe3RoaXMuc2VhcmNoQ2FsbGJhY2smJnRoaXMuc2VhcmNoQ2FsbGJhY2soRy5kZXRhaWwucXVlcnkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1xdWVyeSIse2RldGFpbDpHLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUFwcGJhclVzZXJNZW51T3Blbigpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci11c2VyLW1lbnUtb3BlbiIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlQXBwYmFyUHJvZmlsZU1lbnVTZWxlY3QoRyl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVNYWlubWVudVRhYlNlbGVjdChHKXt0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWI9Ry5kZXRhaWwudGFiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1haW5tZW51LXRhYi1zZWxlY3QiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVTZWNvbmRhcnltZW51SXRlbVNlbGVjdChHKXt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW09Ry5kZXRhaWwuaXRlbSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWNvbmRhcnltZW51LWl0ZW0tc2VsZWN0Iix7ZGV0YWlsOkcuZGV0YWlsLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9aGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShHKXt0aGlzLm1haW5tZW51Q29sbGFwc2VkPUcuZGV0YWlsLmNvbGxhcHNlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVTZWNvbmRhcnltZW51Q29sbGFwc2VDaGFuZ2UoRyl7dGhpcy5zZWNvbmRhcnltZW51Q29sbGFwc2VkPUcuZGV0YWlsLmNvbGxhcHNlZCx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWNvbmRhcnltZW51LWNvbGxhcHNlLWNoYW5nZSIse2RldGFpbDpHLmRldGFpbCxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWhhbmRsZUNvbnRlbnRUYWJTZWxlY3QoRyl7dGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPUcuZGV0YWlsLnRhYix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LXRhYi1zZWxlY3QiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1oYW5kbGVDb250ZW50VGFiQ2xvc2UoRyl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29udGVudC10YWItY2xvc2UiLHtkZXRhaWw6Ry5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1zdGF0aWN7cWUoaSxhKX19O3JldHVybiB5VT1pfSkoKX0pO3ZhciB2ZnQ9YigoKT0+e2JmdCgpO25WKCl9KTt2YXIgeWZ0PWIoKCk9PntkVigpfSk7dmFyIHhmdD1iKCgpPT57b1YoKX0pO3ZhciB3ZnQ9YigoKT0+e2xWKCl9KTt2YXIgTWZ0PWIoKCk9PntMcSgpfSk7dmFyIHpmdD1iKCgpPT57Y1YoKX0pO3ZhciBKeCxzNCxrZnQsU2Z0PWIoKCk9PntzMigpO21pKCk7cGEoKTt1ZSgpO0RzKCk7RXQoKTtWZSgpO0p4PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sczQ9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGtmdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtbW9iaWxlbmF2aWdhdGlvbiIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdO3ZhciB5PWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgdj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOkFycmF5fSldLGw9W0soKV0sSngodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJoZWFkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iaGVhZGluZyJpbiBtLGdldDptPT5tLmhlYWRpbmcsc2V0OihtLHgpPT57bS5oZWFkaW5nPXh9fSxtZXRhZGF0YTp2fSxuLG8pLEp4KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWVudUl0ZW1zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4ibWVudUl0ZW1zImluIG0sZ2V0Om09Pm0ubWVudUl0ZW1zLHNldDoobSx4KT0+e20ubWVudUl0ZW1zPXh9fSxtZXRhZGF0YTp2fSxjLHApLEp4KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9iaWxlTmF2WkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4ibW9iaWxlTmF2WkluZGV4ImluIG0sZ2V0Om09Pm0ubW9iaWxlTmF2WkluZGV4LHNldDoobSx4KT0+e20ubW9iaWxlTmF2WkluZGV4PXh9fSxtZXRhZGF0YTp2fSxmLGcpLEp4KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOnZ9LG51bGwsYSkseT1pPWUudmFsdWUsdiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2fSl9c3RhdGljIGRlbW9Hcm91cHM9WyJBcHAgVUkiXTtzdGF0aWMgZGVtbz0oKT0+d2AKICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+e3kuY3JlYXRlQW5kU2hvdyhbe25hbWU6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpsYXlvdXQtZGFzaGJvYXJkIixhY3Rpb246YXN5bmMgdj0+KGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKSxudWxsKX0se25hbWU6IlByb2ZpbGUiLGljb25OYW1lOiJsdWNpZGU6dXNlciIsYWN0aW9uOmFzeW5jIHY9Pihjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gcHJvZmlsZSIpLG51bGwpfSx7bmFtZToiU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGFjdGlvbjphc3luYyB2PT4oY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHNldHRpbmdzIiksbnVsbCl9LHtkaXZpZGVyOiEwfSx7bmFtZToiSGVscCIsaWNvbk5hbWU6Imx1Y2lkZTpoZWxwLWNpcmNsZSIsYWN0aW9uOmFzeW5jIHY9Pihjb25zb2xlLmxvZygiU2hvdyBoZWxwIiksbnVsbCl9LHtuYW1lOiJTaWduIE91dCIsaWNvbk5hbWU6Imx1Y2lkZTpsb2ctb3V0IixhY3Rpb246YXN5bmMgdj0+KGNvbnNvbGUubG9nKCJTaWduIG91dCIpLG51bGwpfV0pfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDtzdGF0aWMgc2luZ2xldG9uUmVmO3N0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KHYpe3JldHVybiB0aGlzLnNpbmdsZXRvblJlZnx8KHRoaXMuc2luZ2xldG9uUmVmPW5ldyB5LGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKSxhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCkpLHRoaXMuc2luZ2xldG9uUmVmLm1lbnVJdGVtcz12LGF3YWl0IHRoaXMuc2luZ2xldG9uUmVmLnJlYWR5RGVmZXJyZWQucHJvbWlzZSx0aGlzLnNpbmdsZXRvblJlZi5zaG93KCksdGhpcy5zaW5nbGV0b25SZWZ9I2U9czQodGhpcyxuLCJNZW51Iik7Z2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgaGVhZGluZyh2KXt0aGlzLiNlPXZ9I3Q9KHM0KHRoaXMsbyksczQodGhpcyxjLFtdKSk7Z2V0IG1lbnVJdGVtcygpe3JldHVybiB0aGlzLiN0fXNldCBtZW51SXRlbXModil7dGhpcy4jdD12fSNhPShzNCh0aGlzLHApLHM0KHRoaXMsZiwxZTMpKTtnZXQgbW9iaWxlTmF2WkluZGV4KCl7cmV0dXJuIHRoaXMuI2F9c2V0IG1vYmlsZU5hdlpJbmRleCh2KXt0aGlzLiNhPXZ9cmVhZHlEZWZlcnJlZD0oczQodGhpcyxnKSxydC5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpKTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9YXN5bmMgaW5pdCgpe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKX1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke3QxfTsKICAgICAgfQoKICAgICAgLm1haW4gewogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDMyMHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjA0KSIsIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLm1haW4uc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAubWVudUl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW06YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBtYXJnaW46IDhweCAxNnB4OwogICAgICB9CgogICAgICAvKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7CiAgICAgICAgLm1haW4gewogICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICAgIHdpZHRoOiA4NXZ3OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQW5pbWF0aW9uIGZvciBtZW51IGl0ZW1zICovCiAgICAgIEBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubWFpbi5zaG93IC5tZW51SXRlbSB7CiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IGNhbGModmFyKC0taXRlbS1pbmRleCwgMCkgKiAwLjA1cyk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZDFkNWRiIiwiIzUyNTI1YiIpfTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbiB7CiAgICAgICAgICAtLXotaW5kZXg6ICR7dGhpcy5tb2JpbGVOYXZaSW5kZXh9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxoMiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgodixtKT0+ImRpdmlkZXIiaW4gdiYmdi5kaXZpZGVyP3dgPGRpdiBjbGFzcz0ibWVudUl0ZW0tZGl2aWRlciI+PC9kaXY+YDp3YAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJtZW51SXRlbSIKICAgICAgICAgICAgICAgIHN0eWxlPSItLWl0ZW0taW5kZXg6ICR7bX0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCk9Pnt0aGlzLmhpZGUoKSx2LmFjdGlvbih0aGlzKX19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7di5pY29uTmFtZT93YAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7di5pY29uTmFtZX0gc2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51SXRlbS10ZXh0Ij4ke3YubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9d2luZG93TGF5ZXI7YXN5bmMgc2hvdygpe2xldCB2PWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLG09dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7dGhpcy53aW5kb3dMYXllcj8oZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllciksYXdhaXQgdGhpcy53aW5kb3dMYXllci5zaG93KCkpOih0aGlzLndpbmRvd0xheWVyPWF3YWl0IGdpLmNyZWF0ZUFuZFNob3coe2JsdXI6ITB9KSx0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuaGlkZSgpfSkpLHRoaXMubW9iaWxlTmF2WkluZGV4PWgxLmdldE5leHRaSW5kZXgoKSxoMS5yZWdpc3Rlcih0aGlzLHRoaXMubW9iaWxlTmF2WkluZGV4KSxhd2FpdCB2LmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTApLG0uY2xhc3NMaXN0LmFkZCgic2hvdyIpfWFzeW5jIGhpZGUoKXtsZXQgdj1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKS5jbGFzc0xpc3QucmVtb3ZlKCJzaG93IiksaDEudW5yZWdpc3Rlcih0aGlzKSx0aGlzLndpbmRvd0xheWVyJiZhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksaDEudW5yZWdpc3Rlcih0aGlzKSx0aGlzLndpbmRvd0xheWVyJiZhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKX1zdGF0aWN7czQoaSxhKX19O3JldHVybiB5PWl9KSgpfSk7dmFyIENmdD1iKCgpPT57U2Z0KCl9KTt2YXIgX2Z0PWIoKCk9PntiOXQoKTskcSgpO045dCgpO3ZmdCgpO3lmdCgpO3hmdCgpO3dmdCgpO01mdCgpO3pmdCgpO0NmdCgpfSk7dmFyIFRmdD1iKCgpPT57cG8oKX0pO3ZhciBMZnQscFYsJGZ0LEFmdD1iKCgpPT57dWUoKTtMZnQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxwVj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sJGZ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1idXR0b24tZXhpdCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOk51bWJlcn0pXSxMZnQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4ic2l6ZSJpbiBwLGdldDpwPT5wLnNpemUsc2V0OihwLGwpPT57cC5zaXplPWx9fSxtZXRhZGF0YTpjfSxuLG8pLExmdChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPSgpPT53YAogICAgPGRlZXMtYnV0dG9uLWV4aXQ+PC9kZWVzLWJ1dHRvbi1leGl0PgogIGA7c3RhdGljIGRlbW9Hcm91cHM9WyJCdXR0b24iXTsjZT1wVih0aGlzLG4sMjQpO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNpemUoYyl7dGhpcy4jZT1jfXN0eWxlcz0ocFYodGhpcyxvKSxbaC5kZWZhdWx0U3R5bGVzLFFgCgogICAgYF0pO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6ICR7dGhpcy5zaXplfXB4OwogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuc2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpcnN0TGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2Vjb25kTGluZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1zdGF0aWN7cFYoaSxhKX19O3JldHVybiBkPWl9KSgpfSk7dmFyIERmdD1iKCgpPT57QWZ0KCl9KTt2YXIgRWZ0LFBmdD1iKCgpPT57dWUoKTtFZnQ9KCk9PndgCiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXRpdGxlIHsKICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5CYXNpYyBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRob3V0IGxhYmVscyBmb3Igc2ltcGxlIGdyb3VwaW5nPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDI8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5MYWJlbGVkIEJ1dHRvbiBHcm91cHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5CdXR0b24gZ3JvdXBzIHdpdGggZGVzY3JpcHRpdmUgbGFiZWxzPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iVmlldyBNb2RlOiI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPkdyaWQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkxpc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNhcmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5NdWx0aXBsZSBHcm91cHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5NdWx0aXBsZSBidXR0b24gZ3JvdXBzIHVzZWQgdG9nZXRoZXI8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxNnB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPlN5c3RlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5OZXR3b3JrPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlNhbGVzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iVGltZSBSYW5nZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MUg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiPjI0SDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj43RDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj4zMEQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJBY3Rpb25zOiI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkV4cG9ydDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5WZXJ0aWNhbCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIHZlcnRpY2FsIGxheW91dDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDI0cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBkaXJlY3Rpb249InZlcnRpY2FsIiBsYWJlbD0iTmF2aWdhdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGFzaGJvYXJkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5BbmFseXRpY3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVwb3J0czwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TZXR0aW5nczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FZGl0IEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGVsZXRlIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TWl4ZWQgQnV0dG9uIFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RGlmZmVyZW50IGJ1dHRvbiB0eXBlcyB3aXRoaW4gZ3JvdXBzPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iU3RhdHVzOiI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic3VjY2VzcyI+QWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5QZW5kaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkYW5nZXIiPkluYWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGB9KTt2YXIgaFYsQzgsSWZ0LE5mdD1iKCgpPT57dWUoKTtMdCgpO1BmdCgpO1ZlKCk7aFY9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxDOD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sSWZ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1idXR0b24tZ3JvdXAiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXTt2YXIgbD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSgpXSxkPVtJKCldLGhWKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFiZWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJsYWJlbCJpbiBnLGdldDpnPT5nLmxhYmVsLHNldDooZyx5KT0+e2cubGFiZWw9eX19LG1ldGFkYXRhOmZ9LG4sbyksaFYodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaXJlY3Rpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJkaXJlY3Rpb24iaW4gZyxnZXQ6Zz0+Zy5kaXJlY3Rpb24sc2V0OihnLHkpPT57Zy5kaXJlY3Rpb249eX19LG1ldGFkYXRhOmZ9LGMscCksaFYobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1zdGF0aWMgZGVtbz1FZnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJCdXR0b24iXTsjZT1DOCh0aGlzLG4sIiIpO2dldCBsYWJlbCgpe3JldHVybiB0aGlzLiNlfXNldCBsYWJlbChmKXt0aGlzLiNlPWZ9I3Q9KEM4KHRoaXMsbyksQzgodGhpcyxjLCJob3Jpem9udGFsIikpO2dldCBkaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy4jdH1zZXQgZGlyZWN0aW9uKGYpe3RoaXMuI3Q9Zn1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksQzgodGhpcyxwKSx2MS5zZXR1cCgpfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNjY2IiwiIzk5OSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnV0dG9uLWdyb3VwLnZlcnRpY2FsIC5sYWJlbCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKCopIHsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCAke3RoaXMuZGlyZWN0aW9ufSI+CiAgICAgICAgJHt0aGlzLmxhYmVsP3dgPHNwYW4gY2xhc3M9ImxhYmVsIj4ke3RoaXMubGFiZWx9PC9zcGFuPmA6IiJ9CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGB9c3RhdGlje0M4KGksYSl9fTtyZXR1cm4gbD1pfSkoKX0pO3ZhciBGZnQ9YigoKT0+e05mdCgpfSk7dmFyIE9mdD1iKCgpPT57VGZ0KCk7RGZ0KCk7RmZ0KCl9KTt2YXIgUmZ0LEJmdD1iKCgpPT57dWUoKTt4MSgpO3VWKCk7UmZ0PSgpPT57bGV0IHQ9e3N5c3RlbTp7bGFiZWw6IlN5c3RlbSBVc2FnZSAoJSkiLHNlcmllczpbe25hbWU6IkNQVSIsZGF0YTpbe3g6bmV3IERhdGUoRGF0ZS5ub3coKS0zZTUpLnRvSVNPU3RyaW5nKCkseToyNX0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS0yNGU0KS50b0lTT1N0cmluZygpLHk6MzB9LHt4Om5ldyBEYXRlKERhdGUubm93KCktMThlNCkudG9JU09TdHJpbmcoKSx5OjI4fSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTEyZTQpLnRvSVNPU3RyaW5nKCkseTozNX0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS02ZTQpLnRvSVNPU3RyaW5nKCkseTozMn0se3g6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLHk6Mzh9XX0se25hbWU6Ik1lbW9yeSIsZGF0YTpbe3g6bmV3IERhdGUoRGF0ZS5ub3coKS0zZTUpLnRvSVNPU3RyaW5nKCkseTo0NX0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS0yNGU0KS50b0lTT1N0cmluZygpLHk6NDh9LHt4Om5ldyBEYXRlKERhdGUubm93KCktMThlNCkudG9JU09TdHJpbmcoKSx5OjQ2fSx7eDpuZXcgRGF0ZShEYXRlLm5vdygpLTEyZTQpLnRvSVNPU3RyaW5nKCkseTo1Mn0se3g6bmV3IERhdGUoRGF0ZS5ub3coKS02ZTQpLnRvSVNPU3RyaW5nKCkseTo1MH0se3g6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLHk6NTV9XX1dfX0sZT17c3lzdGVtOmE9PmAke2F9JWB9O3JldHVybiB3YAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgYT0+e2xldCBpPWEucXVlcnlTZWxlY3RvcigiI21haW4tY2hhcnQiKSxyPWEucXVlcnlTZWxlY3RvcigiI2Nvbm5lY3Rpb25zLWNoYXJ0IikscyxuLG89InN5c3RlbSIsZD17c3lzdGVtOno9PmAke3p9JWAsbmV0d29yazp6PT5gJHt6fSBNYnBzYCxzYWxlczp6PT5gJCR7ei50b0xvY2FsZVN0cmluZygpfWB9LGM9MTIwKjFlMyxwPTFlMyxsPTVlMyxmPXtjcHU6MzAsbWVtb3J5OjUwLGRvd25sb2FkOjE1MCx1cGxvYWQ6MzAsY29ubmVjdGlvbnM6MTUwfSxnPSh6LEUsVD1sKT0+e2xldCAkPVtdLFY9RGF0ZS5ub3coKSxSPU1hdGguZmxvb3IoYy9UKTtmb3IobGV0IFU9UjtVPj0wO1UtLSl7bGV0IHJlPW5ldyBEYXRlKFYtVSpUKS50b0lTT1N0cmluZygpLGo9eisoTWF0aC5yYW5kb20oKS0uNSkqRTskLnB1c2goe3g6cmUseTpNYXRoLnJvdW5kKGopfSl9cmV0dXJuICR9LHk9e3N5c3RlbTp7bGFiZWw6IlN5c3RlbSBVc2FnZSAoJSkiLHNlcmllczpbe25hbWU6IkNQVSIsZGF0YTpnKGYuY3B1LDEwKX0se25hbWU6Ik1lbW9yeSIsZGF0YTpnKGYubWVtb3J5LDgpfV19LG5ldHdvcms6e2xhYmVsOiJOZXR3b3JrIFRyYWZmaWMgKE1icHMpIixzZXJpZXM6W3tuYW1lOiJEb3dubG9hZCIsZGF0YTpnKGYuZG93bmxvYWQsMzApfSx7bmFtZToiVXBsb2FkIixkYXRhOmcoZi51cGxvYWQsMTApfV19LHNhbGVzOntsYWJlbDoiU2FsZXMgQW5hbHl0aWNzIixzZXJpZXM6W3tuYW1lOiJSZXZlbnVlIixkYXRhOlt7eDoiMjAyNS0wMS0wMSIseTo0NWUzfSx7eDoiMjAyNS0wMS0wMiIseTo1MmUzfSx7eDoiMjAyNS0wMS0wMyIseTo0OGUzfSx7eDoiMjAyNS0wMS0wNCIseTo2MWUzfSx7eDoiMjAyNS0wMS0wNSIseTo1OGUzfSx7eDoiMjAyNS0wMS0wNiIseTo2NWUzfV19LHtuYW1lOiJQcm9maXQiLGRhdGE6W3t4OiIyMDI1LTAxLTAxIix5OjEyZTN9LHt4OiIyMDI1LTAxLTAyIix5OjE0ZTN9LHt4OiIyMDI1LTAxLTAzIix5OjExZTN9LHt4OiIyMDI1LTAxLTA0Iix5OjE4ZTN9LHt4OiIyMDI1LTAxLTA1Iix5OjE2ZTN9LHt4OiIyMDI1LTAxLTA2Iix5OjJlNH1dfV19fSx2PSh6LEUsVCwkPTUpPT57bGV0IFY9KE1hdGgucmFuZG9tKCktLjUpKiQqMixSPXorVixyZT0oKEUrVCkvMi1SKSouMTtyZXR1cm4gUis9cmUsUj1NYXRoLm1heChFLE1hdGgubWluKFQsUikpLE1hdGgucm91bmQoUil9LG09RGF0ZS5ub3coKSx4PURhdGUubm93KCksTT0oKT0+e2lmKCFpKXJldHVybjtsZXQgej1EYXRlLm5vdygpO2lmKHotbT49bCl7bT16O2xldCBUPW5ldyBEYXRlKHopLnRvSVNPU3RyaW5nKCk7aWYobz09PSJzeXN0ZW0iKXtmLmNwdT12KGYuY3B1LDIwLDUwLDMpLGYubWVtb3J5PXYoZi5tZW1vcnksNDAsNzAsMik7bGV0ICQ9aS5jaGFydFNlcmllcy5tYXAoKFYsUik9Pih7bmFtZTpWLm5hbWUsZGF0YTpbLi4uVi5kYXRhLFI9PT0wP3t4OlQseTpmLmNwdX06e3g6VCx5OmYubWVtb3J5fV19KSk7aS51cGRhdGVTZXJpZXMoJCwhMSl9ZWxzZSBpZihvPT09Im5ldHdvcmsiKXtmLmRvd25sb2FkPXYoZi5kb3dubG9hZCwxMDAsMjAwLDEwKSxmLnVwbG9hZD12KGYudXBsb2FkLDIwLDUwLDUpO2xldCAkPWkuY2hhcnRTZXJpZXMubWFwKChWLFIpPT4oe25hbWU6Vi5uYW1lLGRhdGE6Wy4uLlYuZGF0YSxSPT09MD97eDpULHk6Zi5kb3dubG9hZH06e3g6VCx5OmYudXBsb2FkfV19KSk7aS51cGRhdGVTZXJpZXMoJCwhMSl9fX0sUz0oKT0+e2lmKCFyKXJldHVybjtsZXQgej1EYXRlLm5vdygpLEU9bmV3IERhdGUoeikudG9JU09TdHJpbmcoKSxUPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyMSktMTA7Zi5jb25uZWN0aW9ucz1NYXRoLm1heCg1MCxNYXRoLm1pbigzMDAsZi5jb25uZWN0aW9ucytUKSk7bGV0ICQ9ci5jaGFydFNlcmllcyxWPVt7bmFtZTokWzBdPy5uYW1lfHwiQ29ubmVjdGlvbnMiLGRhdGE6Wy4uLiRbMF0/LmRhdGF8fFtdLHt4OkUseTpmLmNvbm5lY3Rpb25zfV19XTtyLnVwZGF0ZVNlcmllcyhWLCExKX0sRj16PT57bz16O2xldCBFPXlbel07aS5sYWJlbD1FLmxhYmVsLGkuc2VyaWVzPUUuc2VyaWVzLGkueUF4aXNGb3JtYXR0ZXI9ZFt6XSx6PT09InN5c3RlbSI/KGkueUF4aXNTY2FsaW5nPSJwZXJjZW50YWdlIixpLnlBeGlzTWF4PTEwMCk6aS55QXhpc1NjYWxpbmc9ImR5bmFtaWMiLG09RGF0ZS5ub3coKS1sfSxfPSgpPT57IXMmJihvPT09InN5c3RlbSJ8fG89PT0ibmV0d29yayIpJiYoaS5yZWFsdGltZU1vZGU9ITAscz13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9Pk0oKSxsKSksbnx8KHIucmVhbHRpbWVNb2RlPSEwLG49d2luZG93LnNldEludGVydmFsKCgpPT5TKCkscCkpfSxrPSgpPT57cyYmKHdpbmRvdy5jbGVhckludGVydmFsKHMpLHM9bnVsbCxpLnJlYWx0aW1lTW9kZT0hMSksbiYmKHdpbmRvdy5jbGVhckludGVydmFsKG4pLG49bnVsbCxyLnJlYWx0aW1lTW9kZT0hMSl9LE49KCk9PntvPT09InN5c3RlbSI/KGYuY3B1PU1hdGgucmFuZG9tKCk+LjU/ODU6MjUsZi5tZW1vcnk9TWF0aC5yYW5kb20oKT4uNT84MDo0NSk6bz09PSJuZXR3b3JrIiYmKGYuZG93bmxvYWQ9TWF0aC5yYW5kb20oKT4uNT8yNTA6MTAwLGYudXBsb2FkPU1hdGgucmFuZG9tKCk+LjU/ODA6MjApLGYuY29ubmVjdGlvbnM9TWF0aC5yYW5kb20oKT4uNT8yODA6ODAsbT0wLHg9MH0sTD1hLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7TC5mb3JFYWNoKHo9PntsZXQgRT16LnRleHRDb250ZW50Py50cmltKCk7RT09PSJTeXN0ZW0gVXNhZ2UiP3ouYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5GKCJzeXN0ZW0iKSk6RT09PSJOZXR3b3JrIFRyYWZmaWMiP3ouYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5GKCJuZXR3b3JrIikpOkU9PT0iU2FsZXMgRGF0YSI/ei5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkYoInNhbGVzIikpOkU9PT0iU3RhcnQgTGl2ZSI/ei5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pl8oKSk6RT09PSJTdG9wIExpdmUiP3ouYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5rKCkpOkU9PT0iU3Bpa2UgVmFsdWVzIiYmei5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pk4oKSl9KTtsZXQgQT0oKT0+e2EucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKEU9PntsZXQgVD1FLnRleHRDb250ZW50Py50cmltKCk7VD09PSJTeXN0ZW0gVXNhZ2UiP0UudHlwZT1vPT09InN5c3RlbSI/ImhpZ2hsaWdodGVkIjoibm9ybWFsIjpUPT09Ik5ldHdvcmsgVHJhZmZpYyI/RS50eXBlPW89PT0ibmV0d29yayI/ImhpZ2hsaWdodGVkIjoibm9ybWFsIjpUPT09IlNhbGVzIERhdGEiJiYoRS50eXBlPW89PT0ic2FsZXMiPyJoaWdobGlnaHRlZCI6Im5vcm1hbCIpfSl9O2kucm9sbGluZ1dpbmRvdz1jLGkucmVhbHRpbWVNb2RlPSExLGkueUF4aXNTY2FsaW5nPSJwZXJjZW50YWdlIixpLnlBeGlzTWF4PTEwMCxpLmF1dG9TY3JvbGxJbnRlcnZhbD0xZTMsc2V0VGltZW91dCgoKT0+e2kudXBkYXRlVGltZVdpbmRvdygpfSwxMDApO2xldCBxPUYsQz16PT57cSh6KSxBKCl9O2lmKEwuZm9yRWFjaCh6PT57bGV0IEU9ei50ZXh0Q29udGVudD8udHJpbSgpO0U9PT0iU3lzdGVtIFVzYWdlIj8oei5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkYoInN5c3RlbSIpKSx6LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+Qygic3lzdGVtIikpKTpFPT09Ik5ldHdvcmsgVHJhZmZpYyI/KHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5GKCJuZXR3b3JrIikpLHouYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5DKCJuZXR3b3JrIikpKTpFPT09IlNhbGVzIERhdGEiJiYoei5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PkYoInNhbGVzIikpLHouYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5DKCJzYWxlcyIpKSl9KSxyKXtsZXQgej1nKGYuY29ubmVjdGlvbnMsMzAscCk7ci5zZXJpZXM9W3tuYW1lOiJDb25uZWN0aW9ucyIsZGF0YTp6fV0sci5yb2xsaW5nV2luZG93PWMsci5yZWFsdGltZU1vZGU9ITEsci55QXhpc1NjYWxpbmc9ImZpeGVkIixyLnlBeGlzTWF4PTM1MCxyLmF1dG9TY3JvbGxJbnRlcnZhbD0xZTMsc2V0VGltZW91dCgoKT0+e3IudXBkYXRlVGltZVdpbmRvdygpfSwxMDApfX19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtRYAogICAgICAgIC5kZW1vQm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoYXJ0LWNvbnRhaW5lciB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgbWluLWhlaWdodDogNDAwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbmZvIHsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke3Quc3lzdGVtLmxhYmVsfQogICAgICAgICAgLnNlcmllcz0ke3Quc3lzdGVtLnNlcmllc30KICAgICAgICAgIC55QXhpc0Zvcm1hdHRlcj0ke2Uuc3lzdGVtfQogICAgICAgID48L2RlZXMtY2hhcnQtYXJlYT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiIHN0eWxlPSJtYXJnaW4tdG9wOiAyMHB4OyI+CiAgICAgICAgPGRlZXMtY2hhcnQtYXJlYQogICAgICAgICAgaWQ9ImNvbm5lY3Rpb25zLWNoYXJ0IgogICAgICAgICAgLmxhYmVsPSR7IkFjdGl2ZSBDb25uZWN0aW9ucyJ9CiAgICAgICAgICAuc2VyaWVzPSR7W3tuYW1lOiJDb25uZWN0aW9ucyIsZGF0YTpbXX1dfQogICAgICAgICAgLnlBeGlzRm9ybWF0dGVyPSR7YT0+YCR7YX1gfQogICAgICAgID48L2RlZXMtY2hhcnQtYXJlYT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICBSZWFsLXRpbWUgbW9uaXRvcmluZyB3aXRoIDItbWludXRlIHJvbGxpbmcgd2luZG93IOKAoiAKICAgICAgICBVcGRhdGVzIGV2ZXJ5IHNlY29uZCB3aXRoIHNtb290aCB2YWx1ZSB0cmFuc2l0aW9ucyDigKIgCiAgICAgICAgQ2xpY2sgJ1NwaWtlIFZhbHVlcycgdG8gc2ltdWxhdGUgbG9hZCBzcGlrZXMKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgfX0pO3ZhciBIZnQscWZ0PWIoKCk9Pnt1ZSgpO0hmdD1baC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KICAgICAgLmNoYXJ0Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgcGFkZGluZzogNDRweCAxNnB4IDE2cHggMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IC8qIEVuc3VyZSBjb250YWluZXIgZG9lc24ndCBvdmVycmlkZSBjaGFydCBiYWNrZ3JvdW5kICovCiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFwZXhDaGFydHMgdGhlbWUgb3ZlcnJpZGVzICovCiAgICAgIC5hcGV4Y2hhcnRzLWNhbnZhcyB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQogICAgICAKICAgICAgLmFwZXhjaGFydHMtaW5uZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWdyYXBoaWNhbCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQogICAgYF19KTt2YXIgVmZ0LGpmdD1iKCgpPT57dWUoKTtWZnQ9dD0+d2AKICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0VGl0bGUiPiR7dC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYH0pO3ZhciBlcixLMixmVj1iKCgpPT57ZXI9e3h0ZXJtOiI1LjMuMCIseHRlcm1BZGRvbkZpdDoiMC44LjAiLHh0ZXJtQWRkb25TZWFyY2g6IjAuMTMuMCIsaGlnaGxpZ2h0SnM6IjExLjExLjEiLGFwZXhjaGFydHM6IjUuMy42Iix0aXB0YXA6IjIuMjMuMCIsZm9udGF3ZXNvbWU6IjcuMS4wIn0sSzI9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0ifSk7dmFyICQyLFVmdD1iKCgpPT57ZlYoKTskMj1jbGFzcyB0e3N0YXRpYyBpbnN0YW5jZTt4dGVybUxpYj1udWxsO3h0ZXJtRml0QWRkb25MaWI9bnVsbDt4dGVybVNlYXJjaEFkZG9uTGliPW51bGw7aGlnaGxpZ2h0SnNMaWI9bnVsbDthcGV4Q2hhcnRzTGliPW51bGw7dGlwdGFwTGliPW51bGw7eHRlcm1Mb2FkaW5nUHJvbWlzZT1udWxsO3h0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZT1udWxsO3h0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZT1udWxsO2hpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U9bnVsbDthcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U9bnVsbDt0aXB0YXBMb2FkaW5nUHJvbWlzZT1udWxsO2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0Lmluc3RhbmNlfHwodC5pbnN0YW5jZT1uZXcgdCksdC5pbnN0YW5jZX1hc3luYyBsb2FkWHRlcm0oKXtyZXR1cm4gdGhpcy54dGVybUxpYj90aGlzLnh0ZXJtTGliOnRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZT90aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2U6KHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZT0oYXN5bmMoKT0+e2xldCBhPWF3YWl0IGltcG9ydChgJHtLMn0veHRlcm1AJHtlci54dGVybX0vK2VzbWApO3JldHVybiBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzKCksdGhpcy54dGVybUxpYj17VGVybWluYWw6YS5UZXJtaW5hbH0sdGhpcy54dGVybUxpYn0pKCksdGhpcy54dGVybUxvYWRpbmdQcm9taXNlKX1hc3luYyBsb2FkWHRlcm1GaXRBZGRvbigpe3JldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI/dGhpcy54dGVybUZpdEFkZG9uTGliOnRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlP3RoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOih0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZT0oYXN5bmMoKT0+e2xldCBhPWF3YWl0IGltcG9ydChgJHtLMn0veHRlcm0tYWRkb24tZml0QCR7ZXIueHRlcm1BZGRvbkZpdH0vK2VzbWApO3JldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI9e0ZpdEFkZG9uOmEuRml0QWRkb259LHRoaXMueHRlcm1GaXRBZGRvbkxpYn0pKCksdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2UpfWFzeW5jIGxvYWRYdGVybVNlYXJjaEFkZG9uKCl7cmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYj90aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWI6dGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2U/dGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2U6KHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlPShhc3luYygpPT57bGV0IGE9YXdhaXQgaW1wb3J0KGAke0syfS94dGVybS1hZGRvbi1zZWFyY2hAJHtlci54dGVybUFkZG9uU2VhcmNofS8rZXNtYCk7cmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYj17U2VhcmNoQWRkb246YS5TZWFyY2hBZGRvbn0sdGhpcy54dGVybVNlYXJjaEFkZG9uTGlifSkoKSx0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSl9YXN5bmMgaW5qZWN0WHRlcm1TdHlsZXMoKXtsZXQgZT0ieHRlcm0tY2RuLXN0eWxlcyI7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkpcmV0dXJuO2xldCBhPWAke0syfS94dGVybUAke2VyLnh0ZXJtfS9jc3MveHRlcm0uY3NzYCxyPWF3YWl0KGF3YWl0IGZldGNoKGEpKS50ZXh0KCkscz1gCi8qIEZpeCB4dGVybS5qcyBXaWR0aENhY2hlIG1lYXN1cmVtZW50IGNvbnRhaW5lciBjYXVzaW5nIGhvcml6b250YWwgc2Nyb2xsYmFyICovCi8qIHh0ZXJtIGNyZWF0ZXMgdGhpcyBvbiBkb2N1bWVudC5ib2R5IC0gbW92ZSBpdCBvZmYtc2NyZWVuIGhvcml6b250YWxseSB0b28gKi8KYm9keSA+IGRpdltzdHlsZSo9InRvcDogLTUwMDAwcHgiXVtzdHlsZSo9IndpZHRoOiA1MDAwMHB4Il0gewogIGxlZnQ6IC01MDAwMHB4ICFpbXBvcnRhbnQ7Cn0KYCxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bi5pZD1lLG4udGV4dENvbnRlbnQ9citzLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobil9YXN5bmMgbG9hZEhpZ2hsaWdodEpzKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI/dGhpcy5oaWdobGlnaHRKc0xpYjp0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U/dGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlOih0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgYT1hd2FpdCBpbXBvcnQoYCR7SzJ9L2hpZ2hsaWdodC5qc0Ake2VyLmhpZ2hsaWdodEpzfS8rZXNtYCk7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI9YS5kZWZhdWx0LHRoaXMuaGlnaGxpZ2h0SnNMaWJ9KSgpLHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSl9YXN5bmMgbG9hZEFwZXhDaGFydHMoKXtyZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliP3RoaXMuYXBleENoYXJ0c0xpYjp0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZT90aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZToodGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgYT1hd2FpdCBpbXBvcnQoYCR7SzJ9L2FwZXhjaGFydHNAJHtlci5hcGV4Y2hhcnRzfS8rZXNtYCk7cmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYj1hLmRlZmF1bHQsdGhpcy5hcGV4Q2hhcnRzTGlifSkoKSx0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZSl9YXN5bmMgbG9hZFRpcHRhcCgpe3JldHVybiB0aGlzLnRpcHRhcExpYj90aGlzLnRpcHRhcExpYjp0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlP3RoaXMudGlwdGFwTG9hZGluZ1Byb21pc2U6KHRoaXMudGlwdGFwTG9hZGluZ1Byb21pc2U9KGFzeW5jKCk9PntsZXQgZT1lci50aXB0YXAsW2EsaSxyLHMsbixvXT1hd2FpdCBQcm9taXNlLmFsbChbaW1wb3J0KGAke0syfS9AdGlwdGFwL2NvcmVAJHtlfS8rZXNtYCksaW1wb3J0KGAke0syfS9AdGlwdGFwL3N0YXJ0ZXIta2l0QCR7ZX0vK2VzbWApLGltcG9ydChgJHtLMn0vQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lQCR7ZX0vK2VzbWApLGltcG9ydChgJHtLMn0vQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnbkAke2V9Lytlc21gKSxpbXBvcnQoYCR7SzJ9L0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmtAJHtlfS8rZXNtYCksaW1wb3J0KGAke0syfS9AdGlwdGFwL2V4dGVuc2lvbi10eXBvZ3JhcGh5QCR7ZX0vK2VzbWApXSk7cmV0dXJuIHRoaXMudGlwdGFwTGliPXtFZGl0b3I6YS5FZGl0b3IsU3RhcnRlcktpdDppLmRlZmF1bHR8fGkuU3RhcnRlcktpdCxVbmRlcmxpbmU6ci5kZWZhdWx0fHxyLlVuZGVybGluZSxUZXh0QWxpZ246cy5kZWZhdWx0fHxzLlRleHRBbGlnbixMaW5rOm4uZGVmYXVsdHx8bi5MaW5rLFR5cG9ncmFwaHk6by5kZWZhdWx0fHxvLlR5cG9ncmFwaHl9LHRoaXMudGlwdGFwTGlifSkoKSx0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlKX1hc3luYyBwcmVsb2FkQWxsKCl7YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZFh0ZXJtKCksdGhpcy5sb2FkWHRlcm1GaXRBZGRvbigpLHRoaXMubG9hZFh0ZXJtU2VhcmNoQWRkb24oKSx0aGlzLmxvYWRIaWdobGlnaHRKcygpLHRoaXMubG9hZEFwZXhDaGFydHMoKSx0aGlzLmxvYWRUaXB0YXAoKV0pfWlzTG9hZGVkKGUpe3N3aXRjaChlKXtjYXNlInh0ZXJtIjpyZXR1cm4gdGhpcy54dGVybUxpYiE9PW51bGw7Y2FzZSJ4dGVybUZpdEFkZG9uIjpyZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliIT09bnVsbDtjYXNlInh0ZXJtU2VhcmNoQWRkb24iOnJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIhPT1udWxsO2Nhc2UiaGlnaGxpZ2h0SnMiOnJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliIT09bnVsbDtjYXNlImFwZXhDaGFydHMiOnJldHVybiB0aGlzLmFwZXhDaGFydHNMaWIhPT1udWxsO2Nhc2UidGlwdGFwIjpyZXR1cm4gdGhpcy50aXB0YXBMaWIhPT1udWxsO2RlZmF1bHQ6cmV0dXJuITF9fX19KTt2YXIgYm89YigoKT0+e1VmdCgpO2ZWKCl9KTt2YXIgWXIsbDIsV2Z0LHVWPWIoKCk9Pnt1ZSgpO0x0KCk7QmZ0KCk7cWZ0KCk7amZ0KCk7Ym8oKTtZcj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGwyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxXZnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWNoYXJ0LWFyZWEiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXTt2YXIgVj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IFI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtJKCldLGw9W0koe3R5cGU6QXJyYXl9KV0seT1bSSh7YXR0cmlidXRlOiExfSldLHg9W0koe3R5cGU6TnVtYmVyfSldLEY9W0koe3R5cGU6Qm9vbGVhbn0pXSxOPVtJKHt0eXBlOlN0cmluZ30pXSxxPVtJKHt0eXBlOk51bWJlcn0pXSxFPVtJKHt0eXBlOk51bWJlcn0pXSxZcih0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNoYXJ0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4iY2hhcnQiaW4gVSxnZXQ6VT0+VS5jaGFydCxzZXQ6KFUscmUpPT57VS5jaGFydD1yZX19LG1ldGFkYXRhOlJ9LG4sbyksWXIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VT0+ImxhYmVsImluIFUsZ2V0OlU9PlUubGFiZWwsc2V0OihVLHJlKT0+e1UubGFiZWw9cmV9fSxtZXRhZGF0YTpSfSxjLHApLFlyKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VyaWVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4ic2VyaWVzImluIFUsZ2V0OlU9PlUuc2VyaWVzLHNldDooVSxyZSk9PntVLnNlcmllcz1yZX19LG1ldGFkYXRhOlJ9LGYsZyksWXIodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ5QXhpc0Zvcm1hdHRlciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VT0+InlBeGlzRm9ybWF0dGVyImluIFUsZ2V0OlU9PlUueUF4aXNGb3JtYXR0ZXIsc2V0OihVLHJlKT0+e1UueUF4aXNGb3JtYXR0ZXI9cmV9fSxtZXRhZGF0YTpSfSx2LG0pLFlyKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToicm9sbGluZ1dpbmRvdyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6VT0+InJvbGxpbmdXaW5kb3ciaW4gVSxnZXQ6VT0+VS5yb2xsaW5nV2luZG93LHNldDooVSxyZSk9PntVLnJvbGxpbmdXaW5kb3c9cmV9fSxtZXRhZGF0YTpSfSxNLFMpLFlyKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicmVhbHRpbWVNb2RlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4icmVhbHRpbWVNb2RlImluIFUsZ2V0OlU9PlUucmVhbHRpbWVNb2RlLHNldDooVSxyZSk9PntVLnJlYWx0aW1lTW9kZT1yZX19LG1ldGFkYXRhOlJ9LF8sayksWXIodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ5QXhpc1NjYWxpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJ5QXhpc1NjYWxpbmciaW4gVSxnZXQ6VT0+VS55QXhpc1NjYWxpbmcsc2V0OihVLHJlKT0+e1UueUF4aXNTY2FsaW5nPXJlfX0sbWV0YWRhdGE6Un0sTCxBKSxZcih0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InlBeGlzTWF4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpVPT4ieUF4aXNNYXgiaW4gVSxnZXQ6VT0+VS55QXhpc01heCxzZXQ6KFUscmUpPT57VS55QXhpc01heD1yZX19LG1ldGFkYXRhOlJ9LEMseiksWXIodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhdXRvU2Nyb2xsSW50ZXJ2YWwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlU9PiJhdXRvU2Nyb2xsSW50ZXJ2YWwiaW4gVSxnZXQ6VT0+VS5hdXRvU2Nyb2xsSW50ZXJ2YWwsc2V0OihVLHJlKT0+e1UuYXV0b1Njcm9sbEludGVydmFsPXJlfX0sbWV0YWRhdGE6Un0sVCwkKSxZcihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpSfSxudWxsLGEpLFY9aT1lLnZhbHVlLFImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Un0pfXN0YXRpYyBkZW1vPVJmdDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkNoYXJ0Il07I2U9bDIodGhpcyxuLHZvaWQgMCk7Z2V0IGNoYXJ0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGNoYXJ0KFIpe3RoaXMuI2U9Un0jdD0obDIodGhpcyxvKSxsMih0aGlzLGMsIlVudGl0bGVkIENoYXJ0IikpO2dldCBsYWJlbCgpe3JldHVybiB0aGlzLiN0fXNldCBsYWJlbChSKXt0aGlzLiN0PVJ9I2E9KGwyKHRoaXMscCksbDIodGhpcyxmLFtdKSk7Z2V0IHNlcmllcygpe3JldHVybiB0aGlzLiNhfXNldCBzZXJpZXMoUil7dGhpcy4jYT1SfWdldCBjaGFydFNlcmllcygpe3JldHVybiB0aGlzLmludGVybmFsQ2hhcnREYXRhLmxlbmd0aD4wP3RoaXMuaW50ZXJuYWxDaGFydERhdGE6dGhpcy5zZXJpZXN9I2k9KGwyKHRoaXMsZyksbDIodGhpcyx2LFI9PmAke1J9IE1icHNgKSk7Z2V0IHlBeGlzRm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHlBeGlzRm9ybWF0dGVyKFIpe3RoaXMuI2k9Un0jcj0obDIodGhpcyxtKSxsMih0aGlzLE0sMCkpO2dldCByb2xsaW5nV2luZG93KCl7cmV0dXJuIHRoaXMuI3J9c2V0IHJvbGxpbmdXaW5kb3coUil7dGhpcy4jcj1SfSNzPShsMih0aGlzLFMpLGwyKHRoaXMsXywhMSkpO2dldCByZWFsdGltZU1vZGUoKXtyZXR1cm4gdGhpcy4jc31zZXQgcmVhbHRpbWVNb2RlKFIpe3RoaXMuI3M9Un0jbj0obDIodGhpcyxrKSxsMih0aGlzLEwsImR5bmFtaWMiKSk7Z2V0IHlBeGlzU2NhbGluZygpe3JldHVybiB0aGlzLiNufXNldCB5QXhpc1NjYWxpbmcoUil7dGhpcy4jbj1SfSNvPShsMih0aGlzLEEpLGwyKHRoaXMsQywxMDApKTtnZXQgeUF4aXNNYXgoKXtyZXR1cm4gdGhpcy4jb31zZXQgeUF4aXNNYXgoUil7dGhpcy4jbz1SfSNsPShsMih0aGlzLHopLGwyKHRoaXMsVCwxZTMpKTtnZXQgYXV0b1Njcm9sbEludGVydmFsKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGF1dG9TY3JvbGxJbnRlcnZhbChSKXt0aGlzLiNsPVJ9cmVzaXplT2JzZXJ2ZXI9bDIodGhpcywkKTtyZXNpemVUaW1lb3V0O2ludGVybmFsQ2hhcnREYXRhPVtdO2F1dG9TY3JvbGxUaW1lcj1udWxsO0RFQlVHX1JFU0laRT0hMTtDSEFSVF9DT0xPUlM9e2Rhcms6WyJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwiaHNsKDE3My40IDgwLjQlIDQwJSkiLCJoc2woMjgwLjMgODcuNCUgNjYuNyUpIiwiaHNsKDI0LjYgOTUlIDUzLjElKSJdLGxpZ2h0OlsiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCJoc2woMjgwLjMgNDcuNyUgNTAuMiUpIiwiaHNsKDIwLjUgOTAuMiUgNDguMiUpIl19O2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx2MS5zZXR1cCgpLHRoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKFI9Pnt0aGlzLnJlc2l6ZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpLHRoaXMucmVzaXplVGltZW91dD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKHRoaXMuY2hhcnQpe2lmKHRoaXMuREVCVUdfUkVTSVpFJiZSLmxlbmd0aD4wKXtsZXQgVT1SWzBdO2NvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gUmVzaXplIGRldGVjdGVkOiIse3dpZHRoOlUuY29udGVudFJlY3Qud2lkdGgsaGVpZ2h0OlUuY29udGVudFJlY3QuaGVpZ2h0fSl9dGhpcy5yZXNpemVDaGFydCgpfX0sMTAwKX0pLHRoaXMucmVnaXN0ZXJHYXJiYWdlRnVuY3Rpb24oYXN5bmMoKT0+e2lmKHRoaXMucmVzaXplVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCksdGhpcy5yZXNpemVPYnNlcnZlciYmdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5zdG9wQXV0b1Njcm9sbCgpLHRoaXMuY2hhcnQpdHJ5e3RoaXMuY2hhcnQuZGVzdHJveSgpLHRoaXMuY2hhcnQ9bnVsbH1jYXRjaChSKXtjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIGNoYXJ0OiIsUil9fSl9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY2hhcnQmJihhd2FpdCBuZXcgUHJvbWlzZShSPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUikpLGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKSl9c3RhdGljIHN0eWxlcz1IZnQ7cmVuZGVyKCl7cmV0dXJuIFZmdCh0aGlzKX1hc3luYyBmaXJzdFVwZGF0ZWQoKXthd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTtsZXQgUj1hd2FpdCAkMi5nZXRJbnN0YW5jZSgpLmxvYWRBcGV4Q2hhcnRzKCk7YXdhaXQgbmV3IFByb21pc2Uob2U9PnJlcXVlc3RBbmltYXRpb25GcmFtZShvZSkpO2xldCBVPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpLHJlPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKTtpZighVXx8IXJlKXtjb25zb2xlLmVycm9yKCJDaGFydCBjb250YWluZXJzIG5vdCBmb3VuZCIpO3JldHVybn1sZXQgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyZSksbWU9cGFyc2VJbnQoai5wYWRkaW5nVG9wLDEwKSx3ZT1wYXJzZUludChqLnBhZGRpbmdCb3R0b20sMTApLEg9cGFyc2VJbnQoai5wYWRkaW5nTGVmdCwxMCksY2U9cGFyc2VJbnQoai5wYWRkaW5nUmlnaHQsMTApLGtlPVUuY2xpZW50V2lkdGgtSC1jZSxXPVUub2Zmc2V0SGVpZ2h0LW1lLXdlLEQ9dGhpcy5zZXJpZXMubGVuZ3RoPjA/dGhpcy5zZXJpZXM6W3tuYW1lOiJjcHUiLGRhdGE6W3t4OiIyMDI1LTAxLTE1VDAzOjAwOjAwIix5OjI1fSx7eDoiMjAyNS0wMS0xNVQwNzowMDowMCIseTozMH0se3g6IjIwMjUtMDEtMTVUMTE6MDA6MDAiLHk6MjB9LHt4OiIyMDI1LTAxLTE1VDE1OjAwOjAwIix5OjM1fSx7eDoiMjAyNS0wMS0xNVQxOTowMDowMCIseToyNX1dfSx7bmFtZToibWVtb3J5IixkYXRhOlt7eDoiMjAyNS0wMS0xNVQwMzowMDowMCIseToxMH0se3g6IjIwMjUtMDEtMTVUMDc6MDA6MDAiLHk6MTJ9LHt4OiIyMDI1LTAxLTE1VDExOjAwOjAwIix5OjEwfSx7eDoiMjAyNS0wMS0xNVQxNTowMDowMCIseTozMH0se3g6IjIwMjUtMDEtMTVUMTk6MDA6MDAiLHk6NDB9XX1dO3RoaXMuaW50ZXJuYWxDaGFydERhdGE9RDtsZXQgTz0hdGhpcy5nb0JyaWdodCxaPU8/ImRhcmsiOiJsaWdodCI7dmFyIFk9e3NlcmllczpELGNoYXJ0Ont3aWR0aDprZXx8MTAwLGhlaWdodDpXfHwxMDAsdHlwZToiYXJlYSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHRvb2xiYXI6e3Nob3c6ITF9LGFuaW1hdGlvbnM6e2VuYWJsZWQ6IXRoaXMucmVhbHRpbWVNb2RlLHNwZWVkOjQwMCxhbmltYXRlR3JhZHVhbGx5OntlbmFibGVkOiExLGRlbGF5OjB9LGR5bmFtaWNBbmltYXRpb246e2VuYWJsZWQ6IXRoaXMucmVhbHRpbWVNb2RlLHNwZWVkOjM1MH19LHpvb206e2VuYWJsZWQ6ITF9LHNlbGVjdGlvbjp7ZW5hYmxlZDohMX19LGRhdGFMYWJlbHM6e2VuYWJsZWQ6ITF9LHN0cm9rZTp7d2lkdGg6MixjdXJ2ZToic21vb3RoIn0seGF4aXM6e3R5cGU6ImRhdGV0aW1lIixsYWJlbHM6e2Zvcm1hdDoiSEg6bW06c3MiLGRhdGV0aW1lVVRDOiExLHN0eWxlOntjb2xvcnM6W08/ImhzbCgwIDAlIDYzLjklKSI6ImhzbCgwIDAlIDIwJSkiXSxmb250U2l6ZToiMTJweCIsZm9udEZhbWlseTonLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJyxmb250V2VpZ2h0OiI0MDAifX0sYXhpc0JvcmRlcjp7c2hvdzohMX0sYXhpc1RpY2tzOntzaG93OiExfX0seWF4aXM6e21pbjowLG1heDp0aGlzLnlBeGlzU2NhbGluZz09PSJkeW5hbWljIj92b2lkIDA6dGhpcy55QXhpc01heCxsYWJlbHM6e2Zvcm1hdHRlcjp0aGlzLnlBeGlzRm9ybWF0dGVyLHN0eWxlOntjb2xvcnM6W08/ImhzbCgwIDAlIDYzLjklKSI6ImhzbCgwIDAlIDIwJSkiXSxmb250U2l6ZToiMTJweCIsZm9udEZhbWlseTonLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJyxmb250V2VpZ2h0OiI0MDAifX0sYXhpc0JvcmRlcjp7c2hvdzohMX0sYXhpc1RpY2tzOntzaG93OiExfX0sdG9vbHRpcDp7c2hhcmVkOiEwLGludGVyc2VjdDohMSxmb2xsb3dDdXJzb3I6ITAseDp7Zm9ybWF0OiJkZC9NTS95eSBISDptbSJ9LGN1c3RvbTooe3NlcmllczpvZSxkYXRhUG9pbnRJbmRleDpnZSx3OmJlfSk9PntsZXQgQj1iZS5jb25maWcudGhlbWUubW9kZT09PSJkYXJrIixQPUI/ImhzbCgwIDAlIDklKSI6ImhzbCgwIDAlIDEwMCUpIixKPUI/ImhzbCgwIDAlIDk1JSkiOiJoc2woMCAwJSA5JSkiLGZlPUI/ImhzbCgwIDAlIDE0LjklKSI6ImhzbCgwIDAlIDg5LjglKSIsZGU9YmUuY29uZmlnLnlheGlzWzBdPy5sYWJlbHM/LmZvcm1hdHRlcnx8KGhlPT5oZS50b1N0cmluZygpKSxfZT1gPGRpdiBzdHlsZT0icGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogJHtQfTsgY29sb3I6ICR7Sn07IGJvcmRlci1yYWRpdXM6IDZweDsgYm94LXNoYWRvdzogMCAycHggOHB4IDAgaHNsKDAgMCUgMCUgLyAke0I/IjAuMiI6IjAuMSJ9KTsgYm9yZGVyOiAxcHggc29saWQgJHtmZX07Zm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI+YDtyZXR1cm4gb2UuZm9yRWFjaCgoaGUsdGUpPT57bGV0IHplPWJlLmdsb2JhbHMuc2VyaWVzTmFtZXNbdGVdLEZlPWhlW2dlXSxHZT1iZS5nbG9iYWxzLmNvbG9yc1t0ZV0seWU9ZGUoRmUpO19lKz1gPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbjogJHt0ZT4wPyI2cHgiOiIwIn0gMDsiPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7R2V9OyBib3JkZXItcmFkaXVzOiAycHg7Ij48L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA1MDA7Ij4ke3plfTo8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiBhdXRvOyBmb250LXdlaWdodDogNjAwOyI+JHt5ZX08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmB9KSxfZSs9IjwvZGl2PiIsX2V9fSxncmlkOnt4YXhpczp7bGluZXM6e3Nob3c6ITF9fSx5YXhpczp7bGluZXM6e3Nob3c6ITB9fSxib3JkZXJDb2xvcjpPPyJoc2woMCAwJSAxNC45JSkiOiJoc2woMCAwJSA5NCUpIixzdHJva2VEYXNoQXJyYXk6MCxwYWRkaW5nOnt0b3A6MTAscmlnaHQ6MjAsYm90dG9tOjEwLGxlZnQ6MjB9fSxmaWxsOnt0eXBlOiJncmFkaWVudCIsZ3JhZGllbnQ6e3NoYWRlOk8/ImRhcmsiOiJsaWdodCIsdHlwZToidmVydGljYWwiLHNoYWRlSW50ZW5zaXR5Oi4xLG9wYWNpdHlGcm9tOk8/LjI6LjMsb3BhY2l0eVRvOjAsc3RvcHM6WzAsMTAwXX19LGNvbG9yczpPP3RoaXMuQ0hBUlRfQ09MT1JTLmRhcms6dGhpcy5DSEFSVF9DT0xPUlMubGlnaHQsdGhlbWU6e21vZGU6Wn19O3RyeXt0aGlzLmNoYXJ0PW5ldyBSKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSxZKSxhd2FpdCB0aGlzLmNoYXJ0LnJlbmRlcigpLGF3YWl0IG5ldyBQcm9taXNlKGdlPT5zZXRUaW1lb3V0KGdlLDEwMCkpLGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTtsZXQgb2U9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluYm94Iik7b2UmJnRoaXMucmVzaXplT2JzZXJ2ZXImJih0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUob2UpLHRoaXMuREVCVUdfUkVTSVpFJiZjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIFJlc2l6ZU9ic2VydmVyIGF0dGFjaGVkIHRvIG1haW5ib3giKSl9Y2F0Y2gob2Upe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYXJ0OiIsb2UpfX1hc3luYyB1cGRhdGVkKFIpe3N1cGVyLnVwZGF0ZWQoUiksUi5oYXMoImdvQnJpZ2h0IikmJnRoaXMuY2hhcnQmJmF3YWl0IHRoaXMudXBkYXRlQ2hhcnRUaGVtZSgpLFIuaGFzKCJzZXJpZXMiKSYmdGhpcy5jaGFydCYmdGhpcy5zZXJpZXMubGVuZ3RoPjAmJmF3YWl0IHRoaXMudXBkYXRlU2VyaWVzKHRoaXMuc2VyaWVzKSxSLmhhcygieUF4aXNGb3JtYXR0ZXIiKSYmdGhpcy5jaGFydCYmYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHt5YXhpczp7bGFiZWxzOntmb3JtYXR0ZXI6dGhpcy55QXhpc0Zvcm1hdHRlcn19fSksUi5oYXMoInJlYWx0aW1lTW9kZSIpJiZ0aGlzLmNoYXJ0JiYoYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHtjaGFydDp7YW5pbWF0aW9uczp7ZW5hYmxlZDohdGhpcy5yZWFsdGltZU1vZGUsc3BlZWQ6NDAwLGFuaW1hdGVHcmFkdWFsbHk6e2VuYWJsZWQ6ITEsZGVsYXk6MH0sZHluYW1pY0FuaW1hdGlvbjp7ZW5hYmxlZDohdGhpcy5yZWFsdGltZU1vZGUsc3BlZWQ6MzUwfX19fSksdGhpcy5yZWFsdGltZU1vZGUmJnRoaXMucm9sbGluZ1dpbmRvdz4wJiZ0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbD4wP3RoaXMuc3RhcnRBdXRvU2Nyb2xsKCk6dGhpcy5zdG9wQXV0b1Njcm9sbCgpKSxSLmhhcygiYXV0b1Njcm9sbEludGVydmFsIikmJnRoaXMuY2hhcnQmJih0aGlzLnN0b3BBdXRvU2Nyb2xsKCksdGhpcy5yZWFsdGltZU1vZGUmJnRoaXMucm9sbGluZ1dpbmRvdz4wJiZ0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbD4wJiZ0aGlzLnN0YXJ0QXV0b1Njcm9sbCgpKSwoUi5oYXMoInlBeGlzU2NhbGluZyIpfHxSLmhhcygieUF4aXNNYXgiKSkmJnRoaXMuY2hhcnQmJmF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7eWF4aXM6e21pbjowLG1heDp0aGlzLnlBeGlzU2NhbGluZz09PSJkeW5hbWljIj92b2lkIDA6dGhpcy55QXhpc01heH19KX1hc3luYyB1cGRhdGVTZXJpZXMoUixVPSEwKXtpZih0aGlzLmNoYXJ0KXRyeXtpZih0aGlzLmludGVybmFsQ2hhcnREYXRhPVIsdGhpcy5yb2xsaW5nV2luZG93PjAmJnRoaXMucmVhbHRpbWVNb2RlKXtsZXQgaj1EYXRlLm5vdygpLXRoaXMucm9sbGluZ1dpbmRvdyxtZT1SLm1hcCh3ZT0+KHtuYW1lOndlLm5hbWUsZGF0YTp3ZS5kYXRhLmZpbHRlcihIPT50eXBlb2YgSD09Im9iamVjdCImJkghPT1udWxsJiYieCJpbiBIP25ldyBEYXRlKEgueCkuZ2V0VGltZSgpPmo6ITEpfSkpO2lmKG1lLnNvbWUod2U9PndlLmRhdGEubGVuZ3RoPjApKXtpZih0aGlzLnlBeGlzU2NhbGluZz09PSJkeW5hbWljIil7bGV0IHdlPW1lLmZsYXRNYXAoSD0+SC5kYXRhLm1hcChjZT0+Y2UueSkpO2lmKHdlLmxlbmd0aD4wKXtsZXQgSD1NYXRoLm1heCguLi53ZSksY2U9TWF0aC5jZWlsKEgqMS4xKTthd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoe3lheGlzOnttaW46MCxtYXg6Y2V9fSwhMSwhMSl9fWF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKG1lLCExKX19ZWxzZSBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZVNlcmllcyhSLFUpfWNhdGNoKHJlKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gdXBkYXRlIGNoYXJ0IHNlcmllczoiLHJlKX19YXN5bmMgdXBkYXRlVGltZVdpbmRvdygpe2lmKCF0aGlzLmNoYXJ0fHx0aGlzLnJvbGxpbmdXaW5kb3c8PTApcmV0dXJuO2xldCBSPURhdGUubm93KCksVT1SLXRoaXMucm9sbGluZ1dpbmRvdzthd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoe3hheGlzOnttaW46VSxtYXg6UixsYWJlbHM6e2Zvcm1hdDoiSEg6bW06c3MiLGRhdGV0aW1lVVRDOiExLHN0eWxlOntjb2xvcnM6W3RoaXMuZ29CcmlnaHQ/ImhzbCgwIDAlIDIwJSkiOiJoc2woMCAwJSA2My45JSkiXSxmb250U2l6ZToiMTJweCIsZm9udEZhbWlseTonLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJyxmb250V2VpZ2h0OiI0MDAifX0sdGlja0Ftb3VudDo2fX0sITEsITEpfWFzeW5jIGFwcGVuZERhdGEoUil7dGhpcy5jaGFydCYmdGhpcy5jaGFydC5hcHBlbmREYXRhKFIpfWFzeW5jIHVwZGF0ZU9wdGlvbnMoUixVLHJlKXtpZih0aGlzLmNoYXJ0KXJldHVybiB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoUixVLHJlKX1hc3luYyByZXNpemVDaGFydCgpe2lmKHRoaXMuY2hhcnQpe3RoaXMuREVCVUdfUkVTSVpFJiZjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpO3RyeXtsZXQgUj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKSxVPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKTtpZighUnx8IVUpcmV0dXJuO1Iub2Zmc2V0SGVpZ2h0O2xldCByZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShVKSxqPXBhcnNlSW50KHJlLnBhZGRpbmdUb3AsMTApLG1lPXBhcnNlSW50KHJlLnBhZGRpbmdCb3R0b20sMTApLHdlPXBhcnNlSW50KHJlLnBhZGRpbmdMZWZ0LDEwKSxIPXBhcnNlSW50KHJlLnBhZGRpbmdSaWdodCwxMCksY2U9Ui5jbGllbnRXaWR0aC13ZS1ILGtlPVIub2Zmc2V0SGVpZ2h0LWotbWU7Y2U+MCYma2U+MCYmKHRoaXMuREVCVUdfUkVTSVpFJiZjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIFVwZGF0aW5nIGNoYXJ0IGRpbWVuc2lvbnM6Iix7d2lkdGg6Y2UsaGVpZ2h0OmtlfSksYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHtjaGFydDp7d2lkdGg6Y2UsaGVpZ2h0OmtlfX0sITAsITEpKX1jYXRjaChSKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVzaXplIGNoYXJ0OiIsUil9fX1hc3luYyBmb3JjZVJlc2l6ZSgpe2F3YWl0IHRoaXMucmVzaXplQ2hhcnQoKX1zdGFydEF1dG9TY3JvbGwoKXt0aGlzLmF1dG9TY3JvbGxUaW1lcnx8KHRoaXMuYXV0b1Njcm9sbFRpbWVyPXdpbmRvdy5zZXRJbnRlcnZhbCgoKT0+e3RoaXMudXBkYXRlVGltZVdpbmRvdygpfSx0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCkpfXN0b3BBdXRvU2Nyb2xsKCl7dGhpcy5hdXRvU2Nyb2xsVGltZXImJih3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TY3JvbGxUaW1lciksdGhpcy5hdXRvU2Nyb2xsVGltZXI9bnVsbCl9YXN5bmMgdXBkYXRlQ2hhcnRUaGVtZSgpe2lmKCF0aGlzLmNoYXJ0KXJldHVybjtsZXQgUj0hdGhpcy5nb0JyaWdodCxVPVI/ImRhcmsiOiJsaWdodCI7YXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHt0aGVtZTp7bW9kZTpVfSxjb2xvcnM6Uj90aGlzLkNIQVJUX0NPTE9SUy5kYXJrOnRoaXMuQ0hBUlRfQ09MT1JTLmxpZ2h0LHhheGlzOntsYWJlbHM6e3N0eWxlOntjb2xvcnM6W1I/ImhzbCgwIDAlIDYzLjklKSI6ImhzbCgwIDAlIDIwJSkiXX19fSx5YXhpczp7bGFiZWxzOntzdHlsZTp7Y29sb3JzOltSPyJoc2woMCAwJSA2My45JSkiOiJoc2woMCAwJSAyMCUpIl19fX0sZ3JpZDp7Ym9yZGVyQ29sb3I6Uj8iaHNsKDAgMCUgMTQuOSUpIjoiaHNsKDAgMCUgOTQlKSJ9LGZpbGw6e2dyYWRpZW50OntzaGFkZTpSPyJkYXJrIjoibGlnaHQiLG9wYWNpdHlGcm9tOlI/LjI6LjN9fX0pfXN0YXRpY3tsMihpLGEpfX07cmV0dXJuIFY9aX0pKCl9KTt2YXIgR2Z0PWIoKCk9Pnt1VigpfSk7dmFyIFlmdCxaZnQ9YigoKT0+e3VlKCk7eDEoKTtZZnQ9KCk9PndgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCIjc3RydWN0dXJlZC1sb2ciKSxhPXQucXVlcnlTZWxlY3RvcigiI3Jhdy1sb2ciKSxpLHIscz1bIlNlcnZlciIsIkRhdGFiYXNlIiwiQVBJIiwiQXV0aCIsIkNhY2hlIiwiUXVldWUiLCJXZWJTb2NrZXQiLCJTY2hlZHVsZXIiXSxuPXtkZWJ1ZzpbIkxvYWRpbmcgbW9kdWxlOiB7e21vZHVsZX19IiwiQ2FjaGUgaGl0IGZvciBrZXk6IHt7a2V5fX0iLCJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsIlJlcXVlc3QgaGVhZGVyczoge3toZWFkZXJzfX0iLCJFbnZpcm9ubWVudCB2YXJpYWJsZSBsb2FkZWQ6IHt7dmFyfX0iXSxpbmZvOlsiUmVxdWVzdCByZWNlaXZlZDoge3ttZXRob2R9fSB7e3BhdGh9fSIsIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsIlByb2Nlc3Npbmcgam9iIHt7am9iSWR9fSBmcm9tIHF1ZXVlIiwnU2NoZWR1bGVkIHRhc2sgInt7dGFza319IiBzdGFydGVkJywiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iXSx3YXJuOlsiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsIk1lbW9yeSB1c2FnZSBhdCB7e3BlcmNlbnR9fSUiLCJSYXRlIGxpbWl0IGFwcHJvYWNoaW5nIGZvciBJUCB7e2lwfX0iLCJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsIkNlcnRpZmljYXRlIGV4cGlyZXMgaW4ge3tkYXlzfX0gZGF5cyJdLGVycm9yOlsiRGF0YWJhc2UgY29ubmVjdGlvbiBsb3N0OiB7e2Vycm9yfX0iLCJGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiB7e2Vycm9yfX0iLCJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLCJGaWxlIG5vdCBmb3VuZDoge3twYXRofX0iLCJTZXJ2aWNlIHVuYXZhaWxhYmxlOiB7e3NlcnZpY2V9fSJdLHN1Y2Nlc3M6WyJTZXJ2ZXIgc3RhcnRlZCBzdWNjZXNzZnVsbHkgb24gcG9ydCB7e3BvcnR9fSIsIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLCJCYWNrdXAgY29tcGxldGVkOiB7e3NpemV9fSBNQiIsIlNTTCBjZXJ0aWZpY2F0ZSByZW5ld2VkIiwiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiXX0sbz1bIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0NS4xMjNaXHgxQlswbSBceDFCWzM2bUlORk9ceDFCWzBtICBbbmdpbnhdIEdFVCAvYXBpL2hlYWx0aCAyMDAgLSAybXMiLCJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNDU2Wlx4MUJbMG0gXHgxQlszM21XQVJOXHgxQlswbSAgW3JlZGlzXSBDb25uZWN0aW9uIHBvb2wgcnVubmluZyBsb3c6IDMvMTAiLCJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ni4wMTJaXHgxQlswbSBceDFCWzM2bUlORk9ceDFCWzBtICBbYXBwXSBQcm9jZXNzaW5nIGJhdGNoIGpvYiAje3tqb2JJZH19IiwiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjM0NVpceDFCWzBtIFx4MUJbMzJtT0tceDFCWzBtICAgIFtoZWFsdGhdIEFsbCBzZXJ2aWNlcyBoZWFsdGh5IiwiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLCJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuMDAxWlx4MUJbMG0gXHgxQlszNW1ERUJVR1x4MUJbMG0gW2dycGNdIFJlcXVlc3QgcmVjZWl2ZWQ6IEdldFVzZXIoaWQ9e3t1c2VySWR9fSkiLCJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuMjM0Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW2F1dGhdIFRva2VuIHZhbGlkYXRpb24gZmFpbGVkOiBleHBpcmVkIiwiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny44OTBaXHgxQlswbSBceDFCWzM2bUlORk9ceDFCWzBtICBbd2Vic29ja2V0XSBDbGllbnQgY29ubmVjdGVkOiBzZXNzaW9uPXt7c2Vzc2lvbn19IixgXHgxQlszMW1FcnJvcjogQ29ubmVjdGlvbiByZWZ1c2VkXHgxQlswbQogICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSkKICAgIGF0IFBvb2wuY29ubmVjdCAoL2FwcC9ub2RlX21vZHVsZXMvcGcvbGliL3Bvb2wuanM6NDU6MjMpCiAgICBhdCBhc3luYyBEYXRhYmFzZVNlcnZpY2UucXVlcnkgKC9hcHAvc3JjL2RiL3NlcnZpY2UudHM6ODk6MTIpYF0sZD0oKT0+e2xldCB2PVsiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwic3VjY2VzcyJdLG09Wy4yLC41LC4xNSwuMSwuMDVdLHg9TWF0aC5yYW5kb20oKSxNPTAsUz0iaW5mbyI7Zm9yKGxldCBMPTA7TDxtLmxlbmd0aDtMKyspaWYoTSs9bVtMXSx4PE0pe1M9dltMXTticmVha31sZXQgRj1zW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpzLmxlbmd0aCldLF89bltTXSxOPV9bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKl8ubGVuZ3RoKV0ucmVwbGFjZSgie3ttb2R1bGV9fSIsWyJleHByZXNzIiwibW9uZ29vc2UiLCJyZWRpcyIsInNvY2tldC5pbyJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KV0pLnJlcGxhY2UoInt7a2V5fX0iLCJ1c2VyOiIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlMykpLnJlcGxhY2UoInt7dGltZX19IixTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjUwMCkrNTApKS5yZXBsYWNlKCJ7e2hlYWRlcnN9fSIsIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLFsiTk9ERV9FTlYiLCJEQVRBQkFTRV9VUkwiLCJBUElfS0VZIiwiUE9SVCJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLFsiR0VUIiwiUE9TVCIsIlBVVCIsIkRFTEVURSJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KV0pLnJlcGxhY2UoInt7cGF0aH19IixbIi9hcGkvdXNlcnMiLCIvYXBpL2F1dGgvbG9naW4iLCIvYXBpL3Byb2R1Y3RzIiwiL2hlYWx0aCJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsImpvYl8iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDExKSkucmVwbGFjZSgie3t0YXNrfX0iLFsiY2xlYW51cCIsImJhY2t1cCIsInJlcG9ydC1nZW5lcmF0aW9uIiwiY2FjaGUtcmVmcmVzaCJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KV0pLnJlcGxhY2UoInt7aXB9fSIsYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyNTUpfWApLnJlcGxhY2UoInt7cXVlcnl9fSIsIlNFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgLi4uIikucmVwbGFjZSgie3twZXJjZW50fX0iLFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMzApKzcwKSkucmVwbGFjZSgie3tlbmRwb2ludH19IiwiL2FwaS92MS9sZWdhY3kiKS5yZXBsYWNlKCJ7e2RheXN9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSozMCkrMSkpLnJlcGxhY2UoInt7ZXJyb3J9fSIsWyJFQ09OTlJFRlVTRUQiLCJFVElNRURPVVQiLCJFTk9URk9VTkQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsInVzZXJfIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWUzKSkucmVwbGFjZSgie3tzZXJ2aWNlfX0iLFsiUmVkaXMiLCJNb25nb0RCIiwiRWxhc3RpY1NlYXJjaCJdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSozKV0pLnJlcGxhY2UoInt7cG9ydH19IixTdHJpbmcoM2UzK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo1MDApKzEwMCkpO2UuYWRkTG9nKFMsTixGKX0sYz0oKT0+e2xldCB2PW9bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8ubGVuZ3RoKV0sbT1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkseD12LnJlcGxhY2UoLzIwMjQtMDEtMTVUMTA6MjM6XGR7Mn1cLlxkezN9Wi9nLG0pLnJlcGxhY2UoInt7am9iSWR9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpKSkucmVwbGFjZSgie3tpcH19IixgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDExKSk7YS53cml0ZWxuUmF3KHgpfSxwPSgpPT57aWYoIWkpe2xldCB2PSgpPT57ZCgpO2xldCBtPU1hdGgucmFuZG9tKCkqMmUzKzUwMDtpPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57aSYmdigpfSxtKX07digpfX0sbD0oKT0+e2kmJih3aW5kb3cuY2xlYXJUaW1lb3V0KGkpLGk9bnVsbCl9LGY9KCk9PntpZighcil7bGV0IHY9KCk9PntjKCk7bGV0IG09TWF0aC5yYW5kb20oKSoxZTMrMjAwO3I9d2luZG93LnNldFRpbWVvdXQoKCk9PntyJiZ2KCl9LG0pfTt2KCl9fSxnPSgpPT57ciYmKHdpbmRvdy5jbGVhclRpbWVvdXQocikscj1udWxsKX07dC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpLmZvckVhY2godj0+e3N3aXRjaCh2LnRleHRDb250ZW50Py50cmltKCkpe2Nhc2UiQWRkIFN0cnVjdHVyZWQgTG9nIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+ZCgpKTticmVhaztjYXNlIlN0YXJ0IFN0cnVjdHVyZWQiOnYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT5wKCkpO2JyZWFrO2Nhc2UiU3RvcCBTdHJ1Y3R1cmVkIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+bCgpKTticmVhaztjYXNlIkFkZCBEb2NrZXIgTG9nIjp2LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+YygpKTticmVhaztjYXNlIlN0YXJ0IERvY2tlciI6di5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PmYoKSk7YnJlYWs7Y2FzZSJTdG9wIERvY2tlciI6di5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PmcoKSk7YnJlYWt9fSl9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7UWAKICAgICAgICAgIC5kZW1vQm94IHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLmNvbnRyb2xzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8IS0tIFN0cnVjdHVyZWQgTG9ncyBTZWN0aW9uIC0tPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdHJ1Y3R1cmVkIExvZ3MgKElMb2dFbnRyeSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFN0cnVjdHVyZWQgbG9nIGVudHJpZXMgd2l0aCBsZXZlbCwgbWVzc2FnZSwgYW5kIHNvdXJjZS4gU3VwcG9ydHMgc2VhcmNoIGFuZCBrZXl3b3JkIGhpZ2hsaWdodGluZy4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIFN0cnVjdHVyZWQgTG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdGFydCBTdHJ1Y3R1cmVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdG9wIFN0cnVjdHVyZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgICAgaWQ9InN0cnVjdHVyZWQtbG9nIgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3Rpb24gU2VydmVyIExvZ3MifQogICAgICAgICAgLmhpZ2hsaWdodEtleXdvcmRzPSR7WyJlcnJvciIsImZhaWxlZCIsInRpbWVvdXQiXX0KICAgICAgICAgIC5zaG93TWV0cmljcz0keyEwfQogICAgICAgID48L2RlZXMtY2hhcnQtbG9nPgogICAgICA8L2Rpdj4KCiAgICAgIDwhLS0gUmF3IExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmF3IExvZ3MgKERvY2tlci9Db250YWluZXIgU3R5bGUpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBSYXcgbG9nIG91dHB1dCB3aXRoIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmb3IgcmVhbCBEb2NrZXIvY29udGFpbmVyIGxvZ3MuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBEb2NrZXIgTG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdGFydCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgRG9ja2VyPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJyYXctbG9nIgogICAgICAgICAgLmxhYmVsPSR7IkRvY2tlciBDb250YWluZXIgTG9ncyJ9CiAgICAgICAgICAubW9kZT0keyJyYXcifQogICAgICAgICAgLnNob3dNZXRyaWNzPSR7ITF9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYH0pO3ZhciB3aSxUMSxYZnQsS2Z0PWIoKCk9Pnt1ZSgpO0x0KCk7WmZ0KCk7VmUoKTtibygpO3dpPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sVDE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LFhmdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtY2hhcnQtbG9nIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W10sTixMPVtdLEE9W10scSxDPVtdLHo9W10sRSxUPVtdLCQ9W10sVixSPVtdLFU9W10scmUsaj1bXSxtZT1bXTt2YXIgd2U9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBIPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koKV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpBcnJheX0pXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpOdW1iZXJ9KV0sRj1bSSh7dHlwZTpBcnJheX0pXSxOPVtJKHt0eXBlOkJvb2xlYW59KV0scT1bSygpXSxFPVtLKCldLFY9W0soKV0scmU9W0soKV0sd2kodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJsYWJlbCJpbiBjZSxnZXQ6Y2U9PmNlLmxhYmVsLHNldDooY2Usa2UpPT57Y2UubGFiZWw9a2V9fSxtZXRhZGF0YTpIfSxuLG8pLHdpKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJtb2RlImluIGNlLGdldDpjZT0+Y2UubW9kZSxzZXQ6KGNlLGtlKT0+e2NlLm1vZGU9a2V9fSxtZXRhZGF0YTpIfSxjLHApLHdpKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibG9nRW50cmllcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJsb2dFbnRyaWVzImluIGNlLGdldDpjZT0+Y2UubG9nRW50cmllcyxzZXQ6KGNlLGtlKT0+e2NlLmxvZ0VudHJpZXM9a2V9fSxtZXRhZGF0YTpIfSxmLGcpLHdpKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXV0b1Njcm9sbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJhdXRvU2Nyb2xsImluIGNlLGdldDpjZT0+Y2UuYXV0b1Njcm9sbCxzZXQ6KGNlLGtlKT0+e2NlLmF1dG9TY3JvbGw9a2V9fSxtZXRhZGF0YTpIfSx2LG0pLHdpKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4RW50cmllcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJtYXhFbnRyaWVzImluIGNlLGdldDpjZT0+Y2UubWF4RW50cmllcyxzZXQ6KGNlLGtlKT0+e2NlLm1heEVudHJpZXM9a2V9fSxtZXRhZGF0YTpIfSxNLFMpLHdpKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGlnaGxpZ2h0S2V5d29yZHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmNlPT4iaGlnaGxpZ2h0S2V5d29yZHMiaW4gY2UsZ2V0OmNlPT5jZS5oaWdobGlnaHRLZXl3b3JkcyxzZXQ6KGNlLGtlKT0+e2NlLmhpZ2hsaWdodEtleXdvcmRzPWtlfX0sbWV0YWRhdGE6SH0sXyxrKSx3aSh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dNZXRyaWNzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpjZT0+InNob3dNZXRyaWNzImluIGNlLGdldDpjZT0+Y2Uuc2hvd01ldHJpY3Msc2V0OihjZSxrZSk9PntjZS5zaG93TWV0cmljcz1rZX19LG1ldGFkYXRhOkh9LEwsQSksd2kodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzZWFyY2hRdWVyeSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJzZWFyY2hRdWVyeSJpbiBjZSxnZXQ6Y2U9PmNlLnNlYXJjaFF1ZXJ5LHNldDooY2Usa2UpPT57Y2Uuc2VhcmNoUXVlcnk9a2V9fSxtZXRhZGF0YTpIfSxDLHopLHdpKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsdGVyTW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJmaWx0ZXJNb2RlImluIGNlLGdldDpjZT0+Y2UuZmlsdGVyTW9kZSxzZXQ6KGNlLGtlKT0+e2NlLmZpbHRlck1vZGU9a2V9fSxtZXRhZGF0YTpIfSxULCQpLHdpKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWV0cmljcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Y2U9PiJtZXRyaWNzImluIGNlLGdldDpjZT0+Y2UubWV0cmljcyxzZXQ6KGNlLGtlKT0+e2NlLm1ldHJpY3M9a2V9fSxtZXRhZGF0YTpIfSxSLFUpLHdpKHRoaXMsbnVsbCxyZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRlcm1pbmFsUmVhZHkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmNlPT4idGVybWluYWxSZWFkeSJpbiBjZSxnZXQ6Y2U9PmNlLnRlcm1pbmFsUmVhZHksc2V0OihjZSxrZSk9PntjZS50ZXJtaW5hbFJlYWR5PWtlfX0sbWV0YWRhdGE6SH0saixtZSksd2kobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6SH0sbnVsbCxhKSx3ZT1pPWUudmFsdWUsSCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpIfSl9c3RhdGljIGRlbW89WWZ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiQ2hhcnQiLCJXb3Jrc3BhY2UiXTsjZT1UMSh0aGlzLG4sIlNlcnZlciBMb2dzIik7Z2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGxhYmVsKEgpe3RoaXMuI2U9SH0jdD0oVDEodGhpcyxvKSxUMSh0aGlzLGMsInN0cnVjdHVyZWQiKSk7Z2V0IG1vZGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgbW9kZShIKXt0aGlzLiN0PUh9I2E9KFQxKHRoaXMscCksVDEodGhpcyxmLFtdKSk7Z2V0IGxvZ0VudHJpZXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbG9nRW50cmllcyhIKXt0aGlzLiNhPUh9I2k9KFQxKHRoaXMsZyksVDEodGhpcyx2LCEwKSk7Z2V0IGF1dG9TY3JvbGwoKXtyZXR1cm4gdGhpcy4jaX1zZXQgYXV0b1Njcm9sbChIKXt0aGlzLiNpPUh9I3I9KFQxKHRoaXMsbSksVDEodGhpcyxNLDFlNCkpO2dldCBtYXhFbnRyaWVzKCl7cmV0dXJuIHRoaXMuI3J9c2V0IG1heEVudHJpZXMoSCl7dGhpcy4jcj1IfSNzPShUMSh0aGlzLFMpLFQxKHRoaXMsXyxbXSkpO2dldCBoaWdobGlnaHRLZXl3b3Jkcygpe3JldHVybiB0aGlzLiNzfXNldCBoaWdobGlnaHRLZXl3b3JkcyhIKXt0aGlzLiNzPUh9I249KFQxKHRoaXMsayksVDEodGhpcyxMLCEwKSk7Z2V0IHNob3dNZXRyaWNzKCl7cmV0dXJuIHRoaXMuI259c2V0IHNob3dNZXRyaWNzKEgpe3RoaXMuI249SH0jbz0oVDEodGhpcyxBKSxUMSh0aGlzLEMsIiIpKTtnZXQgc2VhcmNoUXVlcnkoKXtyZXR1cm4gdGhpcy4jb31zZXQgc2VhcmNoUXVlcnkoSCl7dGhpcy4jbz1IfSNsPShUMSh0aGlzLHopLFQxKHRoaXMsVCwhMSkpO2dldCBmaWx0ZXJNb2RlKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGZpbHRlck1vZGUoSCl7dGhpcy4jbD1IfSNjPShUMSh0aGlzLCQpLFQxKHRoaXMsUix7ZGVidWc6MCxpbmZvOjAsd2FybjowLGVycm9yOjAsc3VjY2VzczowLHRvdGFsOjAscmF0ZTowfSkpO2dldCBtZXRyaWNzKCl7cmV0dXJuIHRoaXMuI2N9c2V0IG1ldHJpY3MoSCl7dGhpcy4jYz1IfSNkPShUMSh0aGlzLFUpLFQxKHRoaXMsaiwhMSkpO2dldCB0ZXJtaW5hbFJlYWR5KCl7cmV0dXJuIHRoaXMuI2R9c2V0IHRlcm1pbmFsUmVhZHkoSCl7dGhpcy4jZD1IfWxvZ0J1ZmZlcj0oVDEodGhpcyxtZSksW10pO3RyYWlsaW5nSGlkZGVuQ291bnQ9MDt0ZXJtaW5hbD1udWxsO2ZpdEFkZG9uPW51bGw7c2VhcmNoQWRkb249bnVsbDtyZXNpemVPYnNlcnZlcj1udWxsO3Rlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249bnVsbDtkb210b29sc0luc3RhbmNlPW51bGw7cmF0ZUJ1ZmZlcj1bXTtyYXRlSW50ZXJ2YWw9bnVsbDtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIG1heC13aWR0aDogMzAwcHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYm94IGlucHV0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLW5hdiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAuc2VhcmNoLW5hdiBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDQ1IDkzJSA0NyUpIiwiaHNsKDQ1IDkzJSA0NyUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsImhzbCg0NSA5MyUgNDclKSIpfTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOSUpOwogICAgICB9CgogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgLnh0ZXJtIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5tZXRyaWNzLWJhciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLm1ldHJpYzo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5lcnJvcjo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA2MC4yJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMud2Fybjo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMjUgOTUlIDUzJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuaW5mbzo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMjIyLjIgNDcuNCUgNTEuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLnN1Y2Nlc3M6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5kZWJ1Zzo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCAwJSA2My45JSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMucmF0ZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXRyaWMucmF0ZTo6YmVmb3JlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICBgXTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdjEuc2V0dXAoKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3RoaXMubGFiZWx9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtYm94Ij4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIGxvZ3MuLi4iCiAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5zZWFyY2hRdWVyeX0KICAgICAgICAgICAgICBAaW5wdXQ9JHtIPT50aGlzLmhhbmRsZVNlYXJjaElucHV0KEgpfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7SD0+dGhpcy5oYW5kbGVTZWFyY2hLZXlkb3duKEgpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpPT50aGlzLnNlYXJjaFByZXZpb3VzKCl9IHRpdGxlPSJQcmV2aW91cyBtYXRjaCI+4oaRPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5zZWFyY2hOZXh0KCl9IHRpdGxlPSJOZXh0IG1hdGNoIj7ihpM8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZmlsdGVyLXRvZ2dsZSAke3RoaXMuZmlsdGVyTW9kZT8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMudG9nZ2xlRmlsdGVyTW9kZSgpfQogICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuZmlsdGVyTW9kZT8iU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIjoiU3dpdGNoIHRvIGZpbHRlciBtb2RlIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZmlsdGVyTW9kZT8iRmlsdGVyIjoiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbD8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKT0+dGhpcy5jbGVhckxvZ3MoKX0+CiAgICAgICAgICAgICAgQ2xlYXIKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgICR7dGhpcy50ZXJtaW5hbFJlYWR5PyIiOndgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy5zaG93TWV0cmljcz93YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpY3MtYmFyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgZXJyb3IiPmVycm9yczogJHt0aGlzLm1ldHJpY3MuZXJyb3J9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyB3YXJuIj53YXJuczogJHt0aGlzLm1ldHJpY3Mud2Fybn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIGluZm8iPmluZm86ICR7dGhpcy5tZXRyaWNzLmluZm99PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBzdWNjZXNzIj5zdWNjZXNzOiAke3RoaXMubWV0cmljcy5zdWNjZXNzfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgZGVidWciPmRlYnVnOiAke3RoaXMubWV0cmljcy5kZWJ1Z308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHJhdGUiPiR7dGhpcy5tZXRyaWNzLnJhdGUudG9GaXhlZCgxKX0gbG9ncy9zZWM8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXtpZih0aGlzLmRvbXRvb2xzSW5zdGFuY2U9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UsYXdhaXQgdGhpcy5pbml0aWFsaXplVGVybWluYWwoKSx0aGlzLmxvZ0VudHJpZXMubGVuZ3RoPjAmJnRoaXMubG9nQnVmZmVyLmxlbmd0aD09PTApe3RoaXMubG9nQnVmZmVyPVsuLi50aGlzLmxvZ0VudHJpZXNdO2ZvcihsZXQgSCBvZiB0aGlzLmxvZ0VudHJpZXMpdGhpcy51cGRhdGVNZXRyaWNzKEgubGV2ZWwpLHRoaXMud3JpdGVMb2dFbnRyeShIKX1lbHNlIGlmKHRoaXMubG9nRW50cmllcy5sZW5ndGg+MCYmdGhpcy5sb2dCdWZmZXIubGVuZ3RoPjApe2xldCBIPW5ldyBTZXQodGhpcy5sb2dCdWZmZXIubWFwKGNlPT5gJHtjZS50aW1lc3RhbXB9fCR7Y2UubWVzc2FnZX1gKSk7Zm9yKGxldCBjZSBvZiB0aGlzLmxvZ0VudHJpZXMpSC5oYXMoYCR7Y2UudGltZXN0YW1wfXwke2NlLm1lc3NhZ2V9YCl8fCh0aGlzLmxvZ0J1ZmZlci5wdXNoKGNlKSx0aGlzLnVwZGF0ZU1ldHJpY3MoY2UubGV2ZWwpLHRoaXMud3JpdGVMb2dFbnRyeShjZSkpfX1hc3luYyBpbml0aWFsaXplVGVybWluYWwoKXtsZXQgSD0kMi5nZXRJbnN0YW5jZSgpLFtjZSxrZSxXXT1hd2FpdCBQcm9taXNlLmFsbChbSC5sb2FkWHRlcm0oKSxILmxvYWRYdGVybUZpdEFkZG9uKCksSC5sb2FkWHRlcm1TZWFyY2hBZGRvbigpXSk7YXdhaXQgdGhpcy5pbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKSx0aGlzLnRlcm1pbmFsPW5ldyBjZS5UZXJtaW5hbCh7Y3Vyc29yQmxpbms6ITEsZGlzYWJsZVN0ZGluOiEwLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6IidTRiBNb25vJywgJ01vbmFjbycsICdDb25zb2xhcycsICdMaWJlcmF0aW9uIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2UiLHRoZW1lOnRoaXMuZ2V0VGVybWluYWxUaGVtZSgpLHNjcm9sbGJhY2s6dGhpcy5tYXhFbnRyaWVzLGNvbnZlcnRFb2w6ITB9KSx0aGlzLmZpdEFkZG9uPW5ldyBrZS5GaXRBZGRvbix0aGlzLnNlYXJjaEFkZG9uPW5ldyBXLlNlYXJjaEFkZG9uLHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuZml0QWRkb24pLHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuc2VhcmNoQWRkb24pO2xldCBEPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7dGhpcy50ZXJtaW5hbC5vcGVuKEQpLGF3YWl0IG5ldyBQcm9taXNlKE89PnJlcXVlc3RBbmltYXRpb25GcmFtZShPKSksdGhpcy5maXRBZGRvbi5maXQoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMuZml0QWRkb24/LmZpdCgpfSksdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKEQpLHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbj10aGlzLmRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRlcm1pbmFsJiYodGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lPXRoaXMuZ2V0VGVybWluYWxUaGVtZSgpKX0pLHRoaXMucmF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT50aGlzLmNhbGN1bGF0ZVJhdGUoKSwxZTMpLHRoaXMudGVybWluYWxSZWFkeT0hMDtmb3IobGV0IE8gb2YgdGhpcy5sb2dCdWZmZXIpdGhpcy53cml0ZUxvZ0VudHJ5KE8pfXVwZGF0ZWQoSCl7aWYoc3VwZXIudXBkYXRlZChIKSxILmhhcygibG9nRW50cmllcyIpJiZ0aGlzLnRlcm1pbmFsUmVhZHkmJnRoaXMubG9nRW50cmllcy5sZW5ndGg+MCl7bGV0IGNlPUguZ2V0KCJsb2dFbnRyaWVzIil8fFtdLGtlPXRoaXMubG9nRW50cmllcztpZihjZS5sZW5ndGg9PT1rZS5sZW5ndGgmJmNlLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0udGltZXN0YW1wPT09a2Vba2UubGVuZ3RoLTFdLnRpbWVzdGFtcCYmY2VbY2UubGVuZ3RoLTFdLm1lc3NhZ2U9PT1rZVtrZS5sZW5ndGgtMV0ubWVzc2FnZSlyZXR1cm47aWYoa2UubGVuZ3RoPmNlLmxlbmd0aCYmY2UubGVuZ3RoPjAmJmNlW2NlLmxlbmd0aC0xXS50aW1lc3RhbXA9PT1rZVtjZS5sZW5ndGgtMV0udGltZXN0YW1wJiZjZVtjZS5sZW5ndGgtMV0ubWVzc2FnZT09PWtlW2NlLmxlbmd0aC0xXS5tZXNzYWdlKXtsZXQgVz1rZS5zbGljZShjZS5sZW5ndGgpO2ZvcihsZXQgRCBvZiBXKXRoaXMubG9nQnVmZmVyLnB1c2goRCksdGhpcy51cGRhdGVNZXRyaWNzKEQubGV2ZWwpLHRoaXMubG9nQnVmZmVyLmxlbmd0aD50aGlzLm1heEVudHJpZXMmJnRoaXMubG9nQnVmZmVyLnNoaWZ0KCksKCF0aGlzLmZpbHRlck1vZGV8fCF0aGlzLnNlYXJjaFF1ZXJ5fHx0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihEKSkmJnRoaXMud3JpdGVMb2dFbnRyeShEKTtyZXR1cm59dGhpcy5sb2dCdWZmZXI9Wy4uLmtlXSx0aGlzLnJlUmVuZGVyRmlsdGVyZWRMb2dzKCl9fWdldFRlcm1pbmFsVGhlbWUoKXtyZXR1cm4gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGU/PyEwP3tiYWNrZ3JvdW5kOiIjMGEwYTBhIixmb3JlZ3JvdW5kOiIjZTBlMGUwIixjdXJzb3I6IiNlMGUwZTAiLHNlbGVjdGlvbkJhY2tncm91bmQ6IiM0MDQwNDAiLGJsYWNrOiIjMDAwMDAwIixyZWQ6IiNmZjU1NTUiLGdyZWVuOiIjNTBmYTdiIix5ZWxsb3c6IiNmMWZhOGMiLGJsdWU6IiM2MjcyYTQiLG1hZ2VudGE6IiNmZjc5YzYiLGN5YW46IiM4YmU5ZmQiLHdoaXRlOiIjZjhmOGYyIixicmlnaHRCbGFjazoiIzYyNzJhNCIsYnJpZ2h0UmVkOiIjZmY2ZTZlIixicmlnaHRHcmVlbjoiIzY5ZmY5NCIsYnJpZ2h0WWVsbG93OiIjZmZmZmE1IixicmlnaHRCbHVlOiIjZDZhY2ZmIixicmlnaHRNYWdlbnRhOiIjZmY5MmRmIixicmlnaHRDeWFuOiIjYTRmZmZmIixicmlnaHRXaGl0ZToiI2ZmZmZmZiJ9OntiYWNrZ3JvdW5kOiIjZmZmZmZmIixmb3JlZ3JvdW5kOiIjMzMzMzMzIixjdXJzb3I6IiMzMzMzMzMiLHNlbGVjdGlvbkJhY2tncm91bmQ6IiNhZGQ2ZmYiLGJsYWNrOiIjMDAwMDAwIixyZWQ6IiNjZDMxMzEiLGdyZWVuOiIjMDBiYzAwIix5ZWxsb3c6IiM5NDk4MDAiLGJsdWU6IiMwNDUxYTUiLG1hZ2VudGE6IiNiYzA1YmMiLGN5YW46IiMwNTk4YmMiLHdoaXRlOiIjNTU1NTU1IixicmlnaHRCbGFjazoiIzY2NjY2NiIsYnJpZ2h0UmVkOiIjY2QzMTMxIixicmlnaHRHcmVlbjoiIzE0Y2UxNCIsYnJpZ2h0WWVsbG93OiIjYjViYTAwIixicmlnaHRCbHVlOiIjMDQ1MWE1IixicmlnaHRNYWdlbnRhOiIjYmMwNWJjIixicmlnaHRDeWFuOiIjMDU5OGJjIixicmlnaHRXaGl0ZToiI2E1YTVhNSJ9fWFzeW5jIGluamVjdFh0ZXJtU3R5bGVzSW50b1NoYWRvdygpe2xldCBIPSJ4dGVybS1zaGFkb3ctc3R5bGVzIjtpZih0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoSCkpcmV0dXJuO2xldCBjZT1gJHtLMn0veHRlcm1AJHtlci54dGVybX0vY3NzL3h0ZXJtLmNzc2AsVz1hd2FpdChhd2FpdCBmZXRjaChjZSkpLnRleHQoKSxEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7RC5pZD1ILEQudGV4dENvbnRlbnQ9Vyx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoRCl9YWRkTG9nKEgsY2Usa2Upe2xldCBXPXt0aW1lc3RhbXA6bmV3IERhdGUoKS50b0lTT1N0cmluZygpLGxldmVsOkgsbWVzc2FnZTpjZSxzb3VyY2U6a2V9O3RoaXMubG9nQnVmZmVyLnB1c2goVyksdGhpcy5sb2dCdWZmZXIubGVuZ3RoPnRoaXMubWF4RW50cmllcyYmdGhpcy5sb2dCdWZmZXIuc2hpZnQoKSwhdGhpcy5maWx0ZXJNb2RlfHwhdGhpcy5zZWFyY2hRdWVyeT90aGlzLndyaXRlTG9nRW50cnkoVyk6dGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoVyk/KHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudD0wLHRoaXMud3JpdGVMb2dFbnRyeShXKSk6dGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCksdGhpcy51cGRhdGVNZXRyaWNzKFcubGV2ZWwpfXVwZGF0ZUxvZyhIKXtpZihIKWZvcihsZXQgY2Ugb2YgSCl0aGlzLmxvZ0J1ZmZlci5wdXNoKGNlKSx0aGlzLmxvZ0J1ZmZlci5sZW5ndGg+dGhpcy5tYXhFbnRyaWVzJiZ0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpLCF0aGlzLmZpbHRlck1vZGV8fCF0aGlzLnNlYXJjaFF1ZXJ5P3RoaXMud3JpdGVMb2dFbnRyeShjZSk6dGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoY2UpPyh0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQ9MCx0aGlzLndyaXRlTG9nRW50cnkoY2UpKTp0aGlzLnVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKSx0aGlzLnVwZGF0ZU1ldHJpY3MoY2UubGV2ZWwpfXVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKXt0aGlzLnRlcm1pbmFsJiYodGhpcy50cmFpbGluZ0hpZGRlbkNvdW50PjAmJnRoaXMudGVybWluYWwud3JpdGUoIlx4MUJbMUFceDFCWzJLXHIiKSx0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQrKyx0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIodGhpcy50cmFpbGluZ0hpZGRlbkNvdW50KSx0aGlzLmF1dG9TY3JvbGwmJnRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKSl9ZW50cnlNYXRjaGVzRmlsdGVyKEgpe2lmKCF0aGlzLnNlYXJjaFF1ZXJ5KXJldHVybiEwO2xldCBjZT10aGlzLnNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCk7cmV0dXJuIEgubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNlKXx8SC5sZXZlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNlKXx8KEguc291cmNlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNlKT8/ITEpfXdyaXRlTG9nRW50cnkoSCl7aWYoIXRoaXMudGVybWluYWwpcmV0dXJuO2xldCBjZT10aGlzLmZvcm1hdExvZ0VudHJ5KEgpO3RoaXMudGVybWluYWwud3JpdGVsbihjZSksdGhpcy5hdXRvU2Nyb2xsJiZ0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCl9Zm9ybWF0TG9nRW50cnkoSCl7bGV0IGNlPXRoaXMuZm9ybWF0VGltZXN0YW1wKEgudGltZXN0YW1wKSxrZT17ZGVidWc6Ilx4MUJbOTBtIixpbmZvOiJceDFCWzM2bSIsd2FybjoiXHgxQlszM20iLGVycm9yOiJceDFCWzMxbSIsc3VjY2VzczoiXHgxQlszMm0ifSxXPSJceDFCWzBtIixEPSJceDFCWzJtIixPPWAke2tlW0gubGV2ZWxdfVske0gubGV2ZWwudG9VcHBlckNhc2UoKS5wYWRFbmQoNyl9XSR7V31gLFo9SC5zb3VyY2U/YCR7RH1bJHtILnNvdXJjZX1dJHtXfSBgOiIiLFk9dGhpcy5hcHBseUhpZ2hsaWdodHMoSC5tZXNzYWdlKTtyZXR1cm5gJHtEfSR7Y2V9JHtXfSAke099ICR7Wn0ke1l9YH1mb3JtYXRUaW1lc3RhbXAoSCl7cmV0dXJuIG5ldyBEYXRlKEgpLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLHtob3VyMTI6ITEsaG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0IixzZWNvbmQ6IjItZGlnaXQiLGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6M30pfWFwcGx5SGlnaGxpZ2h0cyhIKXtsZXQgY2U9Wy4uLnRoaXMuaGlnaGxpZ2h0S2V5d29yZHNdO2lmKHRoaXMuZmlsdGVyTW9kZSYmdGhpcy5zZWFyY2hRdWVyeSYmY2UucHVzaCh0aGlzLnNlYXJjaFF1ZXJ5KSxjZS5sZW5ndGg9PT0wKXJldHVybiBIO2xldCBrZT1IO2ZvcihsZXQgVyBvZiBjZSl7bGV0IEQ9Vy5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpLE89bmV3IFJlZ0V4cChgKCR7RH0pYCwiZ2kiKTtrZT1rZS5yZXBsYWNlKE8sIlx4MUJbNDNtXHgxQlszMG0kMVx4MUJbMG0iKX1yZXR1cm4ga2V9d3JpdGVSYXcoSCl7dGhpcy50ZXJtaW5hbCYmKHRoaXMudGVybWluYWwud3JpdGUoSCksdGhpcy5yZWNvcmRMb2dFdmVudCgpLHRoaXMuYXV0b1Njcm9sbCYmdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpKX13cml0ZWxuUmF3KEgpe3RoaXMudGVybWluYWwmJih0aGlzLnRlcm1pbmFsLndyaXRlbG4oSCksdGhpcy5yZWNvcmRMb2dFdmVudCgpLHRoaXMuYXV0b1Njcm9sbCYmdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpKX1oYW5kbGVTZWFyY2hJbnB1dChIKXtsZXQga2U9SC50YXJnZXQudmFsdWUsVz10aGlzLnNlYXJjaFF1ZXJ5IT09a2U7dGhpcy5zZWFyY2hRdWVyeT1rZSx0aGlzLmZpbHRlck1vZGUmJlc/dGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOnRoaXMuc2VhcmNoUXVlcnkmJnRoaXMuc2VhcmNoQWRkb24/LmZpbmROZXh0KHRoaXMuc2VhcmNoUXVlcnkpfWhhbmRsZVNlYXJjaEtleWRvd24oSCl7SC5rZXk9PT0iRW50ZXIiP0guc2hpZnRLZXk/dGhpcy5zZWFyY2hQcmV2aW91cygpOnRoaXMuc2VhcmNoTmV4dCgpOkgua2V5PT09IkVzY2FwZSImJih0aGlzLnNlYXJjaFF1ZXJ5PSIiLEgudGFyZ2V0LnZhbHVlPSIiKX1zZWFyY2goSCl7dGhpcy5zZWFyY2hRdWVyeT1ILHRoaXMuc2VhcmNoQWRkb24/LmZpbmROZXh0KEgpfXNlYXJjaE5leHQoKXt0aGlzLnNlYXJjaFF1ZXJ5JiZ0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KX1zZWFyY2hQcmV2aW91cygpe3RoaXMuc2VhcmNoUXVlcnkmJnRoaXMuc2VhcmNoQWRkb24/LmZpbmRQcmV2aW91cyh0aGlzLnNlYXJjaFF1ZXJ5KX10b2dnbGVBdXRvU2Nyb2xsKCl7dGhpcy5hdXRvU2Nyb2xsPSF0aGlzLmF1dG9TY3JvbGwsdGhpcy5hdXRvU2Nyb2xsJiZ0aGlzLnRlcm1pbmFsJiZ0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCl9dG9nZ2xlRmlsdGVyTW9kZSgpe3RoaXMuZmlsdGVyTW9kZT0hdGhpcy5maWx0ZXJNb2RlLHRoaXMucmVSZW5kZXJGaWx0ZXJlZExvZ3MoKX1yZVJlbmRlckZpbHRlcmVkTG9ncygpe2lmKHRoaXMudGVybWluYWwpe2lmKHRoaXMudGVybWluYWwuY2xlYXIoKSx0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQ9MCwhdGhpcy5maWx0ZXJNb2RlfHwhdGhpcy5zZWFyY2hRdWVyeSlmb3IobGV0IEggb2YgdGhpcy5sb2dCdWZmZXIpe2xldCBjZT10aGlzLmZvcm1hdExvZ0VudHJ5KEgpO3RoaXMudGVybWluYWwud3JpdGVsbihjZSl9ZWxzZXtsZXQgSD0wO2ZvcihsZXQgY2Ugb2YgdGhpcy5sb2dCdWZmZXIpaWYodGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoY2UpKXtIPjAmJih0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoSCksSD0wKTtsZXQga2U9dGhpcy5mb3JtYXRMb2dFbnRyeShjZSk7dGhpcy50ZXJtaW5hbC53cml0ZWxuKGtlKX1lbHNlIEgrKztIPjAmJih0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoSCksdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50PUgpfXRoaXMuYXV0b1Njcm9sbCYmdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpfX13cml0ZUhpZGRlblBsYWNlaG9sZGVyKEgpe2xldCBjZT0iXHgxQlsybSIsa2U9Ilx4MUJbMG0iLFc9SD09PTE/IlsxIGxvZyBsaW5lIGhpZGRlbiBieSBmaWx0ZXIgLi4uXSI6YFske0h9IGxvZyBsaW5lcyBoaWRkZW4gYnkgZmlsdGVyIC4uLl1gO3RoaXMudGVybWluYWw/LndyaXRlbG4oYCR7Y2V9JHtXfSR7a2V9YCl9Y2xlYXJMb2dzKCl7dGhpcy50ZXJtaW5hbD8uY2xlYXIoKSx0aGlzLmxvZ0J1ZmZlcj1bXSx0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQ9MCx0aGlzLnJlc2V0TWV0cmljcygpfXNjcm9sbFRvQm90dG9tKCl7dGhpcy50ZXJtaW5hbD8uc2Nyb2xsVG9Cb3R0b20oKX11cGRhdGVNZXRyaWNzKEgpe3RoaXMubWV0cmljcz17Li4udGhpcy5tZXRyaWNzLFtIXTp0aGlzLm1ldHJpY3NbSF0rMSx0b3RhbDp0aGlzLm1ldHJpY3MudG90YWwrMX0sdGhpcy5yZWNvcmRMb2dFdmVudCgpfXJlY29yZExvZ0V2ZW50KCl7dGhpcy5yYXRlQnVmZmVyLnB1c2goRGF0ZS5ub3coKSl9Y2FsY3VsYXRlUmF0ZSgpe2xldCBIPURhdGUubm93KCk7dGhpcy5yYXRlQnVmZmVyPXRoaXMucmF0ZUJ1ZmZlci5maWx0ZXIoa2U9Pkgta2U8MWU0KTtsZXQgY2U9dGhpcy5yYXRlQnVmZmVyLmxlbmd0aC8xMDtjZSE9PXRoaXMubWV0cmljcy5yYXRlJiYodGhpcy5tZXRyaWNzPXsuLi50aGlzLm1ldHJpY3MscmF0ZTpjZX0pfXJlc2V0TWV0cmljcygpe3RoaXMubWV0cmljcz17ZGVidWc6MCxpbmZvOjAsd2FybjowLGVycm9yOjAsc3VjY2VzczowLHRvdGFsOjAscmF0ZTowfSx0aGlzLnJhdGVCdWZmZXI9W119YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVzaXplT2JzZXJ2ZXImJnRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiYmdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yYXRlSW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpLHRoaXMudGVybWluYWwmJnRoaXMudGVybWluYWwuZGlzcG9zZSgpfXN0YXRpY3tUMShpLGEpfX07cmV0dXJuIHdlPWl9KSgpfSk7dmFyIFFmdD1iKCgpPT57S2Z0KCl9KTt2YXIgSmZ0PWIoKCk9PntHZnQoKTtRZnQoKX0pO3ZhciBlbXQsdG10PWIoKCk9Pnt1ZSgpO2VtdD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtb1dyYXBwZXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VHlwZVNjcmlwdCBDb2RlIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QSBjb21wcmVoZW5zaXZlIFR5cGVTY3JpcHQgY29kZSBleGFtcGxlIHdpdGggdmFyaW91cyBzeW50YXggaGlnaGxpZ2h0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJ0eXBlc2NyaXB0Ij4KaW50ZXJmYWNlIFVzZXIgewogIGlkOiBudW1iZXI7CiAgbmFtZTogc3RyaW5nOwogIGVtYWlsOiBzdHJpbmc7CiAgaXNBY3RpdmU6IGJvb2xlYW47Cn0KCmNsYXNzIFVzZXJTZXJ2aWNlIHsKICBwcml2YXRlIHVzZXJzOiBVc2VyW10gPSBbXTsKICAKICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVVybDogc3RyaW5nKSB7CiAgICBjb25zb2xlLmxvZygnVXNlclNlcnZpY2UgaW5pdGlhbGl6ZWQnKTsKICB9CiAgCiAgYXN5bmMgZ2V0VXNlcnMoKTogUHJvbWlzZTxVc2VyW10+IHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwpOwogICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICByZXR1cm4gZGF0YS51c2VyczsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB1c2VyczonLCBlcnJvcik7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CiAgCiAgYWRkVXNlcih1c2VyOiBVc2VyKTogdm9pZCB7CiAgICB0aGlzLnVzZXJzLnB1c2godXNlcik7CiAgfQp9CgovLyBVc2FnZSBleGFtcGxlCmNvbnN0IHNlcnZpY2UgPSBuZXcgVXNlclNlcnZpY2UoJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3VzZXJzJyk7CmNvbnN0IHVzZXJzID0gYXdhaXQgc2VydmljZS5nZXRVc2VycygpOwpjb25zb2xlLmxvZygnRm91bmQgdXNlcnM6JywgdXNlcnMubGVuZ3RoKTsKICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkphdmFTY3JpcHQgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gSmF2YVNjcmlwdCB3aXRoIEVTNisgZmVhdHVyZXMuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImphdmFzY3JpcHQiPgovLyBBcnJheSBtYW5pcHVsYXRpb24gZXhhbXBsZXMKY29uc3QgbnVtYmVycyA9IFsxLCAyLCAzLCA0LCA1XTsKY29uc3QgZG91YmxlZCA9IG51bWJlcnMubWFwKG4gPT4gbiAqIDIpOwpjb25zdCBmaWx0ZXJlZCA9IG51bWJlcnMuZmlsdGVyKG4gPT4gbiA+IDMpOwoKLy8gT2JqZWN0IGRlc3RydWN0dXJpbmcKY29uc3QgdXNlciA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwLCBjaXR5OiAnTmV3IFlvcmsnIH07CmNvbnN0IHsgbmFtZSwgYWdlIH0gPSB1c2VyOwoKLy8gUHJvbWlzZSBoYW5kbGluZwpjb25zdCBmZXRjaERhdGEgPSBhc3luYyAodXJsKSA9PiB7CiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpOwogIHJldHVybiByZXNwb25zZS5qc29uKCk7Cn07CgovLyBNb2Rlcm4gc3ludGF4CmNvbnN0IGdyZWV0ID0gKG5hbWUgPSAnV29ybGQnKSA9PiBcYEhlbGxvLCBcJHtuYW1lfSFcYDsKY29uc29sZS5sb2coZ3JlZXQoJ1NoYWRDTicpKTsKICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlB5dGhvbiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlB5dGhvbiBjb2RlIHdpdGggY2xhc3NlcyBhbmQgdHlwZSBoaW50cy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0icHl0aG9uIj4KZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIE9wdGlvbmFsCmltcG9ydCBhc3luY2lvCgpjbGFzcyBEYXRhUHJvY2Vzc29yOgogICAgIiIiQSBzaW1wbGUgZGF0YSBwcm9jZXNzb3IgY2xhc3MiIiIKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU6IHN0cik6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYuZGF0YTogTGlzdFtkaWN0XSA9IFtdCiAgICAKICAgIGFzeW5jIGRlZiBwcm9jZXNzX2RhdGEoc2VsZiwgaXRlbXM6IExpc3RbZGljdF0pIC0+IExpc3RbZGljdF06CiAgICAgICAgIiIiUHJvY2VzcyBkYXRhIGl0ZW1zIGFzeW5jaHJvbm91c2x5IiIiCiAgICAgICAgcmVzdWx0cyA9IFtdCiAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CiAgICAgICAgICAgICMgU2ltdWxhdGUgYXN5bmMgcHJvY2Vzc2luZwogICAgICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDAuMSkKICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoewogICAgICAgICAgICAgICAgJ2lkJzogaXRlbS5nZXQoJ2lkJyksCiAgICAgICAgICAgICAgICAncHJvY2Vzc2VkJzogVHJ1ZSwKICAgICAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUKICAgICAgICAgICAgfSkKICAgICAgICByZXR1cm4gcmVzdWx0cwogICAgCiAgICBkZWYgZ2V0X3N1bW1hcnkoc2VsZikgLT4gZGljdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAncHJvY2Vzc29yJzogc2VsZi5uYW1lLAogICAgICAgICAgICAnaXRlbXNfcHJvY2Vzc2VkJzogbGVuKHNlbGYuZGF0YSkKICAgICAgICB9CgojIFVzYWdlCnByb2Nlc3NvciA9IERhdGFQcm9jZXNzb3IoIk1haW4iKQpkYXRhID0gYXdhaXQgcHJvY2Vzc29yLnByb2Nlc3NfZGF0YShbeydpZCc6IDF9LCB7J2lkJzogMn1dKQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q1NTIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+TW9kZXJuIENTUyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBhbmltYXRpb25zLiBOb3RlIHRoZSBzaG9ydGVyIGxhbmd1YWdlIGxhYmVsLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJjc3MiPgovKiBNb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgKi8KOnJvb3QgewogIC0tcHJpbWFyeS1jb2xvcjogIzNiODJmNjsKICAtLXNlY29uZGFyeS1jb2xvcjogIzEwYjk4MTsKICAtLWJhY2tncm91bmQ6ICNmZmZmZmY7CiAgLS10ZXh0LWNvbG9yOiAjMDkwOTBiOwogIC0tYm9yZGVyLXJhZGl1czogNnB4Owp9CgouY2FyZCB7CiAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZCk7CiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsKICBwYWRkaW5nOiAyNHB4OwogIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKfQoKLmNhcmQ6aG92ZXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICBib3gtc2hhZG93OiAwIDRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEpOwp9CgpAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfQogIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkpTT04gRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5KU09OIGNvbmZpZ3VyYXRpb24gd2l0aCBwcm9wZXIgZm9ybWF0dGluZy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0ianNvbiI+CnsKICAibmFtZSI6ICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciLAogICJ2ZXJzaW9uIjogIjEuMTAuNyIsCiAgImRlc2NyaXB0aW9uIjogIkEgY29tcHJlaGVuc2l2ZSBjYXRhbG9nIG9mIHdlYiBjb21wb25lbnRzIiwKICAibWFpbiI6ICJkaXN0X3RzX3dlYi9pbmRleC5qcyIsCiAgInR5cGUiOiAibW9kdWxlIiwKICAic2NyaXB0cyI6IHsKICAgICJidWlsZCI6ICJ0c2J1aWxkIHRzZm9sZGVycyAtLWFsbG93aW1wbGljaXRhbnkgJiYgdHNidW5kbGUgZWxlbWVudCAtLXByb2R1Y3Rpb24iLAogICAgIndhdGNoIjogInRzd2F0Y2ggZWxlbWVudCIsCiAgICAidGVzdCI6ICJ0c3Rlc3QgdGVzdC8gLS13ZWIgLS12ZXJib3NlIgogIH0sCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiOiAiXjIuMC40NSIsCiAgICAiaGlnaGxpZ2h0LmpzIjogIl4xMS45LjAiCiAgfQp9CiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgbVYsXzgsYW10LGdWPWIoKCk9Pnt0bXQoKTt1ZSgpO3BhKCk7ZzMoKTtMdCgpO24yKCk7Ym8oKTttVj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LF84PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxhbXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWRhdGF2aWV3LWNvZGVib3giKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXTt2YXIgbD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSgpXSxkPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLG1WKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJvZ0xhbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJwcm9nTGFuZyJpbiBnLGdldDpnPT5nLnByb2dMYW5nLHNldDooZyx5KT0+e2cucHJvZ0xhbmc9eX19LG1ldGFkYXRhOmZ9LG4sbyksbVYodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2RlVG9EaXNwbGF5IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iY29kZVRvRGlzcGxheSJpbiBnLGdldDpnPT5nLmNvZGVUb0Rpc3BsYXksc2V0OihnLHkpPT57Zy5jb2RlVG9EaXNwbGF5PXl9fSxtZXRhZGF0YTpmfSxjLHApLG1WKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmZ9LG51bGwsYSksbD1pPWUudmFsdWUsZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9c3RhdGljIGRlbW89ZW10O3N0YXRpYyBkZW1vR3JvdXBzPVsiRGF0YSBWaWV3IiwiV29ya3NwYWNlIl07I2U9XzgodGhpcyxuLCJ0eXBlc2NyaXB0Iik7Z2V0IHByb2dMYW5nKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHByb2dMYW5nKGYpe3RoaXMuI2U9Zn0jdD0oXzgodGhpcyxvKSxfOCh0aGlzLGMsIiIpKTtnZXQgY29kZVRvRGlzcGxheSgpe3JldHVybiB0aGlzLiN0fXNldCBjb2RlVG9EaXNwbGF5KGYpe3RoaXMuI3Q9Zn1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgICR7djEuc3R5bGVzfQogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dDF9OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CiAgICAgICAgLm1haW5ib3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIC5hcHBiYXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5hcHBiYXIgLmZpbGVOYW1lIHsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5ib3R0b21CYXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VzTGFiZWwgewogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubGFuZ3VhZ2VMYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiLCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmhsanMta2V5d29yZCB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmNvZGVncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggYXV0bzsKICAgICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgfQoKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzUyNTI1YiIpfTsKICAgICAgICAgIHBhZGRpbmc6IDI0cHggMTZweCAwcHggMHB4OwogICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgfQoKICAgICAgICAubGluZUNvdW50ZXI6bGFzdC1jaGlsZCB7CiAgICAgICAgICBvcGFjaXR5OiA1MCU7CiAgICAgICAgfQoKICAgICAgICBwcmUgewogICAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgICAgcGFkZGluZzogMjRweCAyNHB4OwogICAgICAgIH0KCiAgICAgICAgY29kZSB7CiAgICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgfQoKICAgICAgICBjb2RlLAogICAgICAgIGNvZGUgKiwKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtOwogICAgICAgICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke1UwfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXN0cmluZyB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwNTk2NjkiLCIjMTBiOTgxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYnVpbHRfaW4gewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjOGI1Y2Y2IiwiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWZ1bmN0aW9uIHsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1wYXJhbXMgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDg5MWIyIiwiIzA2YjZkNCIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWNvbW1lbnQgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLW51bWJlciB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNlYTU4MGMiLCIjZmI5MjNjIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtbGl0ZXJhbCB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYXR0ciB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM4YjVjZjYiLCIjYTc4YmZhIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtdmFyaWFibGUgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWFpbmJveCIKICAgICAgICBAY29udGV4dG1lbnU9IiR7Zj0+e1d0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGYsW3tuYW1lOiJBYm91dCIsaWNvbk5hbWU6ImNpcmNsZUluZm8iLGFjdGlvbjphc3luYygpPT5udWxsfV0pfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZU51bWJlcnMiPgogICAgICAgICAgICAkeygoKT0+e2xldCBmPTA7cmV0dXJuIHRoaXMuY29kZVRvRGlzcGxheS5zcGxpdChgCmApLm1hcChnPT4oZisrLHdgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7Zn08L2Rpdj5gKSl9KSgpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cHJlPjxjb2RlPjwvY29kZT48L3ByZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2VzTGFiZWwiPlNwYWNlczogMjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2VMYWJlbCI+JHt0aGlzLnByb2dMYW5nfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9Y29kZVRvRGlzcGxheVN0b3JlPShfOCh0aGlzLHApLCIiKTtoaWdobGlnaHRKcz1udWxsO2FzeW5jIHVwZGF0ZWQoZil7c3VwZXIudXBkYXRlZChmKSxjb25zb2xlLmxvZygiaGlnaGxpZ2h0aW5nIG5vdyIpLGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7bGV0IGc9W107dGhpcy5jaGlsZE5vZGVzLmZvckVhY2gobT0+e20ubm9kZU5hbWU9PT0iI3RleHQiJiZnLnB1c2gobSl9KSx0aGlzLmNvZGVUb0Rpc3BsYXkmJnRoaXMuY29kZVRvRGlzcGxheSE9PXRoaXMuY29kZVRvRGlzcGxheVN0b3JlJiYodGhpcy5jb2RlVG9EaXNwbGF5U3RvcmU9dDAubm9ybWFsaXplKHRoaXMuY29kZVRvRGlzcGxheSkudHJpbVN0YXJ0KCkpLGdbMF0mJmdbMF0ud2hvbGVUZXh0JiYhdGhpcy5jb2RlVG9EaXNwbGF5JiYodGhpcy5jb2RlVG9EaXNwbGF5U3RvcmU9dDAubm9ybWFsaXplKGdbMF0ud2hvbGVUZXh0KS50cmltU3RhcnQoKSx0aGlzLmNvZGVUb0Rpc3BsYXk9dGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUpLGF3YWl0IHp0LnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksdGhpcy5oaWdobGlnaHRKc3x8KHRoaXMuaGlnaGxpZ2h0SnM9YXdhaXQgJDIuZ2V0SW5zdGFuY2UoKS5sb2FkSGlnaGxpZ2h0SnMoKSk7bGV0IHk9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImNvZGUiKSx2PXRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHRoaXMuY29kZVRvRGlzcGxheVN0b3JlLHtsYW5ndWFnZTp0aGlzLnByb2dMYW5nLGlnbm9yZUlsbGVnYWxzOiEwfSk7eS5pbm5lckhUTUw9di52YWx1ZX1zdGF0aWN7XzgoaSxhKX19O3JldHVybiBsPWl9KSgpfSk7dmFyIGltdD1iKCgpPT57Z1YoKX0pO3ZhciBybXQsc210PWIoKCk9Pnt1ZSgpO1ZpKCk7cm10PSgpPT53YCA8c3R5bGU+CiAgICAuZGVtbyB7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjVmNWY1IiwiIzBhMGEwYSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwYWRkaW5nOiA0MHB4OwogICAgfQogICAgCiAgICAuZGVtby1ncmlkIHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KICAgIAogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTZweDsKICAgIH0KICAgIAogICAgLmRlbW8tdGl0bGUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8iPgogICAgPGRpdiBjbGFzcz0iZGVtby1ub3RlIj4KICAgICAgUmlnaHQtY2xpY2sgb24gYW55IGRldGFpbCByb3cgdG8gY29weSB0aGUgdmFsdWUsIGtleSwgb3Iga2V5OnZhbHVlIGNvbWJpbmF0aW9uCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+U2VydmljZSBIZWFsdGggU3RhdHVzPC9kaXY+CiAgICAgICAgPGRlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0CiAgICAgICAgICAuc3RhdHVzT2JqZWN0PSR7e2lkOiIxIixuYW1lOiJBUEkgR2F0ZXdheSBTZXJ2aWNlIixjb21iaW5lZFN0YXR1czoib2siLGNvbWJpbmVkU3RhdHVzVGV4dDoiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLGRldGFpbHM6W3tuYW1lOiJSZXNwb25zZSBUaW1lIix2YWx1ZToiNDVtcyAoYXZnKSIsc3RhdHVzOiJvayIsc3RhdHVzVGV4dDoiV2l0aGluIG5vcm1hbCByYW5nZSJ9LHtuYW1lOiJVcHRpbWUiLHZhbHVlOiI5OS45OSUgKDMwIGRheXMpIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJFeGNlbGxlbnQgdXB0aW1lIn0se25hbWU6IkFjdGl2ZSBDb25uZWN0aW9ucyIsdmFsdWU6IjEsMjM0IC8gMTAsMDAwIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJOb3JtYWwgbG9hZCJ9LHtuYW1lOiJTU0wgQ2VydGlmaWNhdGUiLHZhbHVlOiJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJDZXJ0aWZpY2F0ZSB2YWxpZCJ9XX19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5EYXRhYmFzZSBDbHVzdGVyIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3tpZDoiMiIsbmFtZToiUG9zdGdyZVNRTCBDbHVzdGVyIixjb21iaW5lZFN0YXR1czoicGFydGx5X29rIixjb21iaW5lZFN0YXR1c1RleHQ6Ik1pbm9yIGlzc3VlcyBkZXRlY3RlZCIsZGV0YWlsczpbe25hbWU6IlByaW1hcnkgTm9kZSIsdmFsdWU6ImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJPcGVyYXRpbmcgbm9ybWFsbHkifSx7bmFtZToiUmVwbGljYSBMYWciLHZhbHVlOiIyLjUgc2Vjb25kcyIsc3RhdHVzOiJwYXJ0bHlfb2siLHN0YXR1c1RleHQ6IlNsaWdodGx5IGVsZXZhdGVkIn0se25hbWU6IkRpc2sgVXNhZ2UiLHZhbHVlOiI3OCUgKDMxMkdCIC8gNDAwR0IpIixzdGF0dXM6InBhcnRseV9vayIsc3RhdHVzVGV4dDoiQXBwcm9hY2hpbmcgdGhyZXNob2xkIn0se25hbWU6IkNvbm5lY3Rpb24gUG9vbCIsdmFsdWU6Ijg5IC8gMTAwIGNvbm5lY3Rpb25zIixzdGF0dXM6Im9rIixzdGF0dXNUZXh0OiJXaXRoaW4gbGltaXRzIn1dfX0KICAgICAgICA+CiAgICAgICAgPC9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPkJ1aWxkIFBpcGVsaW5lIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3tpZDoiMyIsbmFtZToiQ0kvQ0QgUGlwZWxpbmUiLGNvbWJpbmVkU3RhdHVzOiJub3Rfb2siLGNvbWJpbmVkU3RhdHVzVGV4dDoiQnVpbGQgZmFpbHVyZSIsZGV0YWlsczpbe25hbWU6Ikxhc3QgQnVpbGQiLHZhbHVlOiJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsc3RhdHVzOiJub3Rfb2siLHN0YXR1c1RleHQ6IlRlc3QgZmFpbHVyZXMifSx7bmFtZToiRmFpbGVkIFRlc3RzIix2YWx1ZToiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsc3RhdHVzOiJub3Rfb2siLHN0YXR1c1RleHQ6IlVuaXQgdGVzdCBmYWlsdXJlcyJ9LHtuYW1lOiJDb2RlIENvdmVyYWdlIix2YWx1ZToiODIuNSUgKHRhcmdldDogODUlKSIsc3RhdHVzOiJwYXJ0bHlfb2siLHN0YXR1c1RleHQ6IkJlbG93IHRhcmdldCJ9LHtuYW1lOiJCdWlsZCBEdXJhdGlvbiIsdmFsdWU6IjEybSAzNHMiLHN0YXR1czoib2siLHN0YXR1c1RleHQ6Ik5vcm1hbCBkdXJhdGlvbiJ9XX19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+YH0pO3ZhciBubXQsYlYsb210LGxtdD1iKCgpPT57dmkoKTtzMigpO3NtdCgpO3VlKCk7VmkoKTtuMigpO1ZlKCk7bm10PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sYlY9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LG9tdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6T2JqZWN0fSldLG5tdCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN0YXR1c09iamVjdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cD0+InN0YXR1c09iamVjdCJpbiBwLGdldDpwPT5wLnN0YXR1c09iamVjdCxzZXQ6KHAsbCk9PntwLnN0YXR1c09iamVjdD1sfX0sbWV0YWRhdGE6Y30sbixvKSxubXQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxkPWk9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz1ybXQ7c3RhdGljIGRlbW9Hcm91cHM9WyJEYXRhIFZpZXciXTsjZT1iVih0aGlzLG4sdm9pZCAwKTtnZXQgc3RhdHVzT2JqZWN0KCl7cmV0dXJuIHRoaXMuI2V9c2V0IHN0YXR1c09iamVjdChjKXt0aGlzLiNlPWN9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwIGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAxcHggMnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDhweCBhdXRvIDEwMHB4OwogICAgICAgIGhlaWdodDogNTZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIGgxIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0dXNkb3QgewogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSAvIDAuMikiLCJoc2woMCAwJSA0NS4xJSAvIDAuMikiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmNvcHlNYWluIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmNvcHlNYWluOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5zdGF0dXNkb3Qub2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMikiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAuc3RhdHVzZG90Lm5vdF9vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4yKSIsImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5wYXJ0bHlfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7aC5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMikiLCJoc2woMjUgOTUlIDYzJSAvIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDhweCBhdXRvOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTQlKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgICAgfQoKICAgICAgLmRldGFpbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgIH0KCiAgICAgIC5kZXRhaWw6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLmRldGFpbCAuZGV0YWlsc1RleHQgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAubGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAudmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0dXNkb3QgJHt0aGlzLnN0YXR1c09iamVjdD8uY29tYmluZWRTdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgIDxoMT4ke3RoaXMuc3RhdHVzT2JqZWN0Py5uYW1lfHwiTm8gc3RhdHVzIG9iamVjdCBhc3NpZ25lZCJ9PC9oMT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvcHlNYWluIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvcHlBc0pzb259PkNvcHkgSlNPTjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zdGF0dXNPYmplY3Q/LmRldGFpbHM/Lm1hcChjPT53YAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJkZXRhaWwiCiAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7cD0+e3AucHJldmVudERlZmF1bHQoKSxXdC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhwLFt7bmFtZToiQ29weSBWYWx1ZSIsaWNvbk5hbWU6Imx1Y2lkZTpjb3B5IixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGMudmFsdWUsIlZhbHVlIil9fSx7bmFtZToiQ29weSBLZXkiLGljb25OYW1lOiJsdWNpZGU6a2V5IixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGMubmFtZSwiS2V5Iil9fSx7bmFtZToiQ29weSBLZXk6VmFsdWUiLGljb25OYW1lOiJsdWNpZGU6Y29weS1wbHVzIixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2MubmFtZX06ICR7Yy52YWx1ZX1gLCJLZXk6VmFsdWUiKX19XSl9fQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzZG90ICR7Yy5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzVGV4dCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+JHtjLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+JHtjLnZhbHVlfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7fWFzeW5jIGNvcHlUb0NsaXBib2FyZChjLHA9IlRleHQiKXt0cnl7YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoYyksY29uc29sZS5sb2coYCR7cH0gY29waWVkIHRvIGNsaXBib2FyZGApfWNhdGNoKGwpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjb3B5ICR7cH06YCxsKX19YXN5bmMgaGFuZGxlQ29weUFzSnNvbigpe2lmKHRoaXMuc3RhdHVzT2JqZWN0KXRyeXthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCxudWxsLDIpKTtsZXQgYz10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvcHlNYWluIikscD1jLnRleHRDb250ZW50O2MudGV4dENvbnRlbnQ9IkNvcGllZCEiO2xldCBsPSF0aGlzLmdvQnJpZ2h0O2Muc3R5bGUuYmFja2dyb3VuZD1sPyJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsYy5zdHlsZS5ib3JkZXJDb2xvcj1sPyJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsYy5zdHlsZS5jb2xvcj1sPyJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIjoiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsc2V0VGltZW91dCgoKT0+e2MudGV4dENvbnRlbnQ9cCxjLnN0eWxlLmJhY2tncm91bmQ9IiIsYy5zdHlsZS5ib3JkZXJDb2xvcj0iIixjLnN0eWxlLmNvbG9yPSIifSwxNTAwKX1jYXRjaChjKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weToiLGMpfX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYlYodGhpcyxvKX1zdGF0aWN7YlYoaSxhKX19O3JldHVybiBkPWl9KSgpfSk7dmFyIGNtdD1iKCgpPT57bG10KCl9KTt2YXIgZG10PWIoKCk9PntReCgpfSk7dmFyIHBtdD1iKCgpPT57aW10KCk7Y210KCk7clYoKTtkbXQoKX0pO3ZhciBUOCxIcyxobXQsZXc9YigoKT0+e3VlKCk7VmUoKTtFdCgpO1Q4PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sSHM9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGhtdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYWN0aW9uYmFyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W107dmFyIHg9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBNPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0soKV0sZD1bSygpXSxsPVtLKCldLHk9W0soKV0sVDgodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50QmFyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iY3VycmVudEJhciJpbiBTLGdldDpTPT5TLmN1cnJlbnRCYXIsc2V0OihTLEYpPT57Uy5jdXJyZW50QmFyPUZ9fSxtZXRhZGF0YTpNfSxuLG8pLFQ4KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGltZVJlbWFpbmluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InRpbWVSZW1haW5pbmciaW4gUyxnZXQ6Uz0+Uy50aW1lUmVtYWluaW5nLHNldDooUyxGKT0+e1MudGltZVJlbWFpbmluZz1GfX0sbWV0YWRhdGE6TX0sYyxwKSxUOCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InByb2dyZXNzUGVyY2VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InByb2dyZXNzUGVyY2VudCJpbiBTLGdldDpTPT5TLnByb2dyZXNzUGVyY2VudCxzZXQ6KFMsRik9PntTLnByb2dyZXNzUGVyY2VudD1GfX0sbWV0YWRhdGE6TX0sZixnKSxUOCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzVmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+ImlzVmlzaWJsZSJpbiBTLGdldDpTPT5TLmlzVmlzaWJsZSxzZXQ6KFMsRik9PntTLmlzVmlzaWJsZT1GfX0sbWV0YWRhdGE6TX0sdixtKSxUOChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vR3JvdXBzPVsiRmVlZGJhY2siLCJPdmVybGF5Il07c3RhdGljIGRlbW89KCk9PntsZXQgTT1rPT5rLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmRlbW8tY29udGFpbmVyIik/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgIC5kZW1vLWNvbnRlbnQgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRlbnQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0ke2FzeW5jIGs9PntsZXQgTj1NKGspO2lmKCFOKXJldHVybjtsZXQgTD1hd2FpdCBOLnNob3coe21lc3NhZ2U6IkZpbGUgY2hhbmdlZCBleHRlcm5hbGx5LiBSZWxvYWQ/Iix0eXBlOiJ3YXJuaW5nIixpY29uOiJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsYWN0aW9uczpbe2lkOiJyZWxvYWQiLGxhYmVsOiJSZWxvYWQiLHByaW1hcnk6ITB9LHtpZDoiaWdub3JlIixsYWJlbDoiSWdub3JlIn1dLHRpbWVvdXQ6e2R1cmF0aW9uOjVlMyxkZWZhdWx0QWN0aW9uSWQ6InJlbG9hZCJ9LGRpc21pc3NpYmxlOiEwfSk7Y29uc29sZS5sb2coIkFjdGlvbiBiYXIgcmVzdWx0OiIsTCl9fT5XYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHthc3luYyBrPT57bGV0IE49TShrKTtpZighTilyZXR1cm47bGV0IEw9YXdhaXQgTi5zaG93KHttZXNzYWdlOiJQcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxIix0eXBlOiJlcnJvciIsaWNvbjoibHVjaWRlOnhDaXJjbGUiLGFjdGlvbnM6W3tpZDoicmV0cnkiLGxhYmVsOiJSZXRyeSIscHJpbWFyeTohMH0se2lkOiJkaXNtaXNzIixsYWJlbDoiRGlzbWlzcyJ9XSx0aW1lb3V0OntkdXJhdGlvbjoxZTQsZGVmYXVsdEFjdGlvbklkOiJkaXNtaXNzIn19KTtjb25zb2xlLmxvZygiRXJyb3IgYmFyIHJlc3VsdDoiLEwpfX0+RXJyb3I8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0ke2FzeW5jIGs9PntsZXQgTj1NKGspO2lmKCFOKXJldHVybjtsZXQgTD1hd2FpdCBOLnNob3coe21lc3NhZ2U6IlNhdmUgY2hhbmdlcyBiZWZvcmUgY2xvc2luZz8iLHR5cGU6InF1ZXN0aW9uIixpY29uOiJsdWNpZGU6aGVscENpcmNsZSIsYWN0aW9uczpbe2lkOiJzYXZlIixsYWJlbDoiU2F2ZSIscHJpbWFyeTohMH0se2lkOiJkaXNjYXJkIixsYWJlbDoiRGlzY2FyZCJ9LHtpZDoiY2FuY2VsIixsYWJlbDoiQ2FuY2VsIn1dfSk7Y29uc29sZS5sb2coIlF1ZXN0aW9uIGJhciByZXN1bHQ6IixMKX19PlF1ZXN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgPC9kaXY+CiAgICBgfTtxdWV1ZT1bXTsjZT1Icyh0aGlzLG4sbnVsbCk7Z2V0IGN1cnJlbnRCYXIoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY3VycmVudEJhcihNKXt0aGlzLiNlPU19I3Q9KEhzKHRoaXMsbyksSHModGhpcyxjLDApKTtnZXQgdGltZVJlbWFpbmluZygpe3JldHVybiB0aGlzLiN0fXNldCB0aW1lUmVtYWluaW5nKE0pe3RoaXMuI3Q9TX0jYT0oSHModGhpcyxwKSxIcyh0aGlzLGYsMTAwKSk7Z2V0IHByb2dyZXNzUGVyY2VudCgpe3JldHVybiB0aGlzLiNhfXNldCBwcm9ncmVzc1BlcmNlbnQoTSl7dGhpcy4jYT1NfSNpPShIcyh0aGlzLGcpLEhzKHRoaXMsdiwhMSkpO2dldCBpc1Zpc2libGUoKXtyZXR1cm4gdGhpcy4jaX1zZXQgaXNWaXNpYmxlKE0pe3RoaXMuI2k9TX10aW1lb3V0SW50ZXJ2YWw9KEhzKHRoaXMsbSksbnVsbCk7Y3VycmVudFJlc29sdmU9bnVsbDtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYWN0aW9uYmFyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDAuMnMgZWFzZS1vdXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KC52aXNpYmxlKSAuYWN0aW9uYmFyLWl0ZW0gewogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICB9CgogICAgICAuYWN0aW9uYmFyLWNvbnRlbnQgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgOmhvc3QoLnZpc2libGUpIC5hY3Rpb25iYXItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAzcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCJoc2woMCAwJSAxOCUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNTAlKSIsImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMgbGluZWFyOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgzOCA5MiUgNTAlKSIsImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsImhzbCgyNzAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLXNlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbi5pbmZvIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbi5xdWVzdGlvbiB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjcwIDcwJSA1MCUpIiwiaHNsKDI3MCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDg1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuYWN0aW9ucy1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDcwJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsImhzbCgwIDAlIDMwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNlY29uZGFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkyJSkiLCJoc2woMCAwJSAxOCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCJoc2woMjEwIDEwMCUgNTUlKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsImhzbCgyMTAgMTAwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCJoc2woMzggOTIlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgzOCA5MiUgNDAlKSIsImhzbCgzOCA5MiUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3I6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsImhzbCgwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsImhzbCgyNzAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkucXVlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjcwIDcwJSA0NSUpIiwiaHNsKDI3MCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmNvdW50ZG93biB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwiaHNsKDAgMCUgMjIlKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCJoc2woMCAwJSA3MCUpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgTT10aGlzLmN1cnJlbnRCYXIsUz1NPy50eXBlfHwiaW5mbyIsRj1NPy50aW1lb3V0JiZ0aGlzLnRpbWVSZW1haW5pbmc+MDtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uYmFyLWl0ZW0iPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1jb250ZW50Ij4KICAgICAgICAgICR7TT93YAogICAgICAgICAgICAke0Y/d2AKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZ3Jlc3MtYmFyLWZpbGwgJHtTfSIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMucHJvZ3Jlc3NQZXJjZW50fSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2Utc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke00uaWNvbj93YAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1lc3NhZ2UtaWNvbiAke1N9IgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7TS5pY29ufQogICAgICAgICAgICAgICAgICAgIGljb25TaXplPSIxNiIKICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXNzYWdlLXRleHQiPiR7TS5tZXNzYWdlfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgJHtNLmFjdGlvbnMubWFwKF89PnRoaXMucmVuZGVyQWN0aW9uQnV0dG9uKF8sTSxGKSl9CiAgICAgICAgICAgICAgICAke00uZGlzbWlzc2libGU/d2AKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNtaXNzLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5oYW5kbGVEaXNtaXNzKCl9CiAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkRpc21pc3MiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgOiIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJBY3Rpb25CdXR0b24oTSxTLEYpe2xldCBfPU0ucHJpbWFyeSxrPVMudHlwZXx8ImluZm8iLE49Uy50aW1lb3V0Py5kZWZhdWx0QWN0aW9uSWQ9PT1NLmlkLEw9RiYmTixBPU1hdGguY2VpbCh0aGlzLnRpbWVSZW1haW5pbmcvMWUzKTtyZXR1cm4gd2AKICAgICAgPGJ1dHRvbgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7Xz9gcHJpbWFyeSAke2t9YDoic2Vjb25kYXJ5In0iCiAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuaGFuZGxlQWN0aW9uKE0uaWQsITEpfQogICAgICA+CiAgICAgICAgJHtNLmljb24/d2AKICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtNLmljb259IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgYDoiIn0KICAgICAgICA8c3Bhbj4ke00ubGFiZWx9PC9zcGFuPgogICAgICAgICR7TD93YAogICAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50ZG93biI+KCR7QX1zKTwvc3Bhbj4KICAgICAgICBgOiIifQogICAgICA8L2J1dHRvbj4KICAgIGB9YXN5bmMgc2hvdyhNKXtyZXR1cm4gbmV3IFByb21pc2UoUz0+e3RoaXMucXVldWUucHVzaCh7b3B0aW9uczpNLHJlc29sdmU6U30pLHRoaXMuY3VycmVudEJhcnx8dGhpcy5wcm9jZXNzUXVldWUoKX0pfWRpc21pc3MoKXt0aGlzLmhhbmRsZURpc21pc3MoKX1jbGVhclF1ZXVlKCl7Zm9yKGxldCBNIG9mIHRoaXMucXVldWUpTS5yZXNvbHZlKHthY3Rpb25JZDoiZGlzbWlzc2VkIix0aW1lZE91dDohMX0pO3RoaXMucXVldWU9W119YXN5bmMgaGlkZUN1cnJlbnRCYXIoKXt0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInZpc2libGUiKSx0aGlzLmlzVmlzaWJsZT0hMSxhd2FpdCBuZXcgUHJvbWlzZShNPT5zZXRUaW1lb3V0KE0sMjIwKSksdGhpcy5jdXJyZW50QmFyPW51bGwsdGhpcy5jdXJyZW50UmVzb2x2ZT1udWxsfWFzeW5jIHByb2Nlc3NRdWV1ZSgpe2lmKHRoaXMucXVldWUubGVuZ3RoPT09MCl7dGhpcy5oaWRlQ3VycmVudEJhcigpO3JldHVybn1sZXQgTT10aGlzLnF1ZXVlLnNoaWZ0KCk7dGhpcy5jdXJyZW50QmFyPU0ub3B0aW9ucyx0aGlzLmN1cnJlbnRSZXNvbHZlPU0ucmVzb2x2ZSx0aGlzLmlzVmlzaWJsZT0hMCxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpfSksTS5vcHRpb25zLnRpbWVvdXQmJnRoaXMuc3RhcnRUaW1lb3V0KE0ub3B0aW9ucy50aW1lb3V0LmR1cmF0aW9uLE0ub3B0aW9ucy50aW1lb3V0LmRlZmF1bHRBY3Rpb25JZCl9c3RhcnRUaW1lb3V0KE0sUyl7dGhpcy50aW1lUmVtYWluaW5nPU0sdGhpcy5wcm9ncmVzc1BlcmNlbnQ9MTAwO2xldCBGPURhdGUubm93KCksXz01MDt0aGlzLnRpbWVvdXRJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e2xldCBrPURhdGUubm93KCktRjt0aGlzLnRpbWVSZW1haW5pbmc9TWF0aC5tYXgoMCxNLWspLHRoaXMucHJvZ3Jlc3NQZXJjZW50PXRoaXMudGltZVJlbWFpbmluZy9NKjEwMCx0aGlzLnRpbWVSZW1haW5pbmc8PTAmJih0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCksdGhpcy5oYW5kbGVBY3Rpb24oUywhMCkpfSxfKX1jbGVhclRpbWVvdXRJbnRlcnZhbCgpe3RoaXMudGltZW91dEludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJbnRlcnZhbCksdGhpcy50aW1lb3V0SW50ZXJ2YWw9bnVsbCl9aGFuZGxlQWN0aW9uKE0sUyl7dGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpLHRoaXMuY3VycmVudFJlc29sdmUmJnRoaXMuY3VycmVudFJlc29sdmUoe2FjdGlvbklkOk0sdGltZWRPdXQ6U30pLHRoaXMucHJvY2Vzc1F1ZXVlKCl9aGFuZGxlRGlzbWlzcygpe3RoaXMuaGFuZGxlQWN0aW9uKCJkaXNtaXNzZWQiLCExKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpfXN0YXRpY3tIcyhpLGEpfX07cmV0dXJuIHg9aX0pKCl9KTt2YXIgdW10PWIoKCk9Pnt9KTt2YXIgZm10PWIoKCk9PntldygpO3VtdCgpfSk7dmFyIG1tdCxnbXQ9YigoKT0+e3VlKCk7bW10PSgpPT53YAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0keyEwfSAudGV4dD0keyJSb3VuZGVkIn0+PC9kZWVzLWJhZGdlPgogIDwvZGl2PgpgfSk7dmFyIHR3LG40LGJtdCx2bXQ9YigoKT0+e3VlKCk7THQoKTtnbXQoKTtWZSgpO3R3PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sbjQ9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGJtdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtYmFkZ2UiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXTt2YXIgeT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IHY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpCb29sZWFufSldLHR3KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InR5cGUiaW4gbSxnZXQ6bT0+bS50eXBlLHNldDoobSx4KT0+e20udHlwZT14fX0sbWV0YWRhdGE6dn0sbixvKSx0dyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJ0ZXh0ImluIG0sZ2V0Om09Pm0udGV4dCxzZXQ6KG0seCk9PnttLnRleHQ9eH19LG1ldGFkYXRhOnZ9LGMscCksdHcodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb3VuZGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4icm91bmRlZCJpbiBtLGdldDptPT5tLnJvdW5kZWQsc2V0OihtLHgpPT57bS5yb3VuZGVkPXh9fSxtZXRhZGF0YTp2fSxmLGcpLHR3KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOnZ9LG51bGwsYSkseT1pPWUudmFsdWUsdiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2fSl9c3RhdGljIGRlbW89bW10O3N0YXRpYyBkZW1vR3JvdXBzPVsiRmVlZGJhY2siXTsjZT1uNCh0aGlzLG4sImRlZmF1bHQiKTtnZXQgdHlwZSgpe3JldHVybiB0aGlzLiNlfXNldCB0eXBlKHYpe3RoaXMuI2U9dn0jdD0objQodGhpcyxvKSxuNCh0aGlzLGMsIiIpKTtnZXQgdGV4dCgpe3JldHVybiB0aGlzLiN0fXNldCB0ZXh0KHYpe3RoaXMuI3Q9dn0jYT0objQodGhpcyxwKSxuNCh0aGlzLGYsITEpKTtnZXQgcm91bmRlZCgpe3JldHVybiB0aGlzLiNhfXNldCByb3VuZGVkKHYpe3RoaXMuI2E9dn1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksbjQodGhpcyxnKSx2MS5zZXR1cCgpfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjVmNWY1IiwiIzMzMyIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2NjYiLCIjY2NjIil9OwogICAgICB9CgogICAgICAuYmFkZ2UucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwNTBiOTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICMyZTdkMzI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZWQ2YzAyOwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICNlNDAwMmI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQ/InJvdW5kZWQiOiIifSI+CiAgICAgICAgJHt0aGlzLnRleHR9CiAgICAgIDwvZGl2PgogICAgYH1zdGF0aWN7bjQoaSxhKX19O3JldHVybiB5PWl9KSgpfSk7dmFyIHltdD1iKCgpPT57dm10KCl9KTt2YXIgeG10LHdtdD1iKCgpPT57dWUoKTt4bXQ9KCk9PndgCiAgPGRlZXMtaGludD48L2RlZXMtaGludD4KYH0pO3ZhciBNbXQsdlYsem10LGttdD1iKCgpPT57dWUoKTtMdCgpO3dtdCgpO1ZlKCk7TW10PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sdlY9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LHptdD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaGludCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxNbXQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0eXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4idHlwZSJpbiBwLGdldDpwPT5wLnR5cGUsc2V0OihwLGwpPT57cC50eXBlPWx9fSxtZXRhZGF0YTpjfSxuLG8pLE1tdChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPXhtdDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkZlZWRiYWNrIl07I2U9dlYodGhpcyxuLCJpbmZvIik7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdHlwZShjKXt0aGlzLiNlPWN9Y29uc3RydWN0b3IoKXtzdXBlcigpLHZWKHRoaXMsbyksdjEuc2V0dXAoKX1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YCA8ZGl2IGNsYXNzPSJtYWluYm94Ij48L2Rpdj4gYH1zdGF0aWN7dlYoaSxhKX19O3JldHVybiBkPWl9KSgpfSk7dmFyIFNtdD1iKCgpPT57a210KCl9KTt2YXIgQ210LF9tdD1iKCgpPT57dWUoKTt5VigpO0NtdD0oKT0+d2AKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGB9KTt2YXIgVG10LHhWLExtdCx5Vj1iKCgpPT57czIoKTt2aSgpO19tdCgpO3VlKCk7THQoKTtWZSgpO1RtdD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LHhWPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxMbXQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXByb2dyZXNzYmFyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W107dmFyIGQ9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBjPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6TnVtYmVyfSldLFRtdCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBlcmNlbnRhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnA9PiJwZXJjZW50YWdlImluIHAsZ2V0OnA9PnAucGVyY2VudGFnZSxzZXQ6KHAsbCk9PntwLnBlcmNlbnRhZ2U9bH19LG1ldGFkYXRhOmN9LG4sbyksVG10KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZD1pPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89Q210O3N0YXRpYyBkZW1vR3JvdXBzPVsiRmVlZGJhY2siXTsjZT14Vih0aGlzLG4sMCk7Z2V0IHBlcmNlbnRhZ2UoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcGVyY2VudGFnZShjKXt0aGlzLiNlPWN9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoRzAudGV4dCxiaS50ZXh0KX07CiAgICAgIH0KICAgICAgLnByb2dyZXNzQmFyQ29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2VlZWVlYiIsIiM0NDQiKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJvcmRlci10b3A6IDAuNXB4IHNvbGlkICR7aC5iZFRoZW1lKCJub25lIiwiIzU1NSIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyRmlsbCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoYmkuYmx1ZUFjdGl2ZSxHMC5ibHVlQWN0aXZlKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNXB4OwogICAgICAgIHRyYW5zaXRpb246IDAuMnMgd2lkdGg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41IHNvbGlkICR7aC5iZFRoZW1lKCJub25lIiwiIzM5OGZmZiIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzVGV4dCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyQ29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc0JhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc0JhckZpbGwiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NUZXh0Ij4KICAgICAgICAgICAgJHt0aGlzLnBlcmNlbnRhZ2V9JQogICAgICAgICAgPGRpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWZpcnN0VXBkYXRlZChjKXtzdXBlci5maXJzdFVwZGF0ZWQoYyksdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT57dGhpcy51cGRhdGVQZXJjZW50YWdlKCl9KX1hc3luYyB1cGRhdGVQZXJjZW50YWdlKCl7bGV0IGM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5wcm9ncmVzc0JhckZpbGwiKTtjLnN0eWxlLndpZHRoPWAke3RoaXMucGVyY2VudGFnZX0lYH11cGRhdGVkKCl7dGhpcy51cGRhdGVQZXJjZW50YWdlKCl9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHhWKHRoaXMsbyl9c3RhdGlje3hWKGksYSl9fTtyZXR1cm4gZD1pfSkoKX0pO3ZhciAkbXQ9YigoKT0+e3lWKCl9KTt2YXIgYXcsbzQsQW10LERtdD1iKCgpPT57dWUoKTtMdCgpO1ZlKCk7YXc9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxvND1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sQW10PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1zcGlubmVyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W107dmFyIHk9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCB2PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6TnVtYmVyfSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koKV0sYXcodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaXplIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4ic2l6ZSJpbiBtLGdldDptPT5tLnNpemUsc2V0OihtLHgpPT57bS5zaXplPXh9fSxtZXRhZGF0YTp2fSxuLG8pLGF3KHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYm53IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4iYm53ImluIG0sZ2V0Om09Pm0uYm53LHNldDoobSx4KT0+e20uYm53PXh9fSxtZXRhZGF0YTp2fSxjLHApLGF3KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3RhdHVzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczptPT4ic3RhdHVzImluIG0sZ2V0Om09Pm0uc3RhdHVzLHNldDoobSx4KT0+e20uc3RhdHVzPXh9fSxtZXRhZGF0YTp2fSxmLGcpLGF3KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOnZ9LG51bGwsYSkseT1pPWUudmFsdWUsdiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2fSl9c3RhdGljIGRlbW9Hcm91cHM9WyJGZWVkYmFjayJdO3N0YXRpYyBkZW1vPSgpPT53YAogICAgPGRlZXMtc3Bpbm5lcj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHNpemU9JHs2NH0gc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgLnNpemU9JHs2NH0gc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgYDsjZT1vNCh0aGlzLG4sMjApO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNpemUodil7dGhpcy4jZT12fSN0PShvNCh0aGlzLG8pLG80KHRoaXMsYywhMSkpO2dldCBibncoKXtyZXR1cm4gdGhpcy4jdH1zZXQgYm53KHYpe3RoaXMuI3Q9dn0jYT0obzQodGhpcyxwKSxvNCh0aGlzLGYsIm5vcm1hbCIpKTtnZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHN0YXR1cyh2KXt0aGlzLiNhPXZ9Y29uc3RydWN0b3IoKXtzdXBlcigpLG80KHRoaXMsZyl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgI2xvYWRpbmcgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICM4YmMzNGEwMDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2guYmRUaGVtZSgiIzMzMyIsIiNmZmYiKX07CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzcGluIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICB9CgogICAgICAjbG9hZGluZy5zdWNjZXNzIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmcuZXJyb3IgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBub25lOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBub25lOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICAjbG9hZGluZyB7CiAgICAgICAgICB3aWR0aDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgICAjbG9hZGluZy5zdWNjZXNzIHsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSh0aGlzLmJudz8iIzMzMyI6IiM4YmMzNGEiLHRoaXMuYm53PyIjZmZmIjoiIzhiYzM0YSIpfTsKICAgICAgICAgIAogICAgICAgIH0KICAgICAgICAjbG9hZGluZy5lcnJvciB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUodGhpcy5ibnc/IiMzMzMiOiIjZTY0YTE5Iix0aGlzLmJudz8iI2ZmZiI6IiNlNjRhMTkiKX07CiAgICAgICAgfQogICAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgICBmb250LXNpemU6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iJHt0aGlzLnN0YXR1c30iIGlkPSJsb2FkaW5nIj4KICAgICAgICAkeygoKT0+e2lmKHRoaXMuc3RhdHVzPT09InN1Y2Nlc3MiKXJldHVybiB3YDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gO2lmKHRoaXMuc3RhdHVzPT09ImVycm9yIilyZXR1cm4gd2A8ZGVlcy1pY29uIC5pY29uPSR7ImZhOmNpcmNsZS14bWFyayJ9PjwvZGVlcy1pY29uPmB9KSgpfQogICAgICA8L2Rpdj4KICAgIGB9c3RhdGlje280KGksYSl9fTtyZXR1cm4geT1pfSkoKX0pO3ZhciBFbXQ9YigoKT0+e0RtdCgpfSk7dmFyIFBtdCxJbXQ9YigoKT0+e3VlKCk7d1YoKTtwbygpO1BtdD0oKT0+d2AKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjhmOWZhIiwiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2NjYiLCIjYWFhIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQoKICAgICAgLnRoZW1lLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMTZweDsKICAgICAgICByaWdodDogMTZweDsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrZWQ9JHsoKT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iil9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57QnQuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKX19PkluZm8gVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iaGlnaGxpZ2h0ZWQiIEBjbGlja2VkPSR7KCk9PntCdC5zdWNjZXNzKCJPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEiKX19PlN1Y2Nlc3MgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0Lndhcm5pbmcoIlBsZWFzZSByZXZpZXcgYmVmb3JlIHByb2NlZWRpbmciKX19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIil9fT5FcnJvciBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFBvc2l0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgVG9hc3RzIGNhbiBhcHBlYXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucyBvbiB0aGUgc2NyZWVuLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LnNob3coe21lc3NhZ2U6IlRvcCBSaWdodCBQb3NpdGlvbiIsdHlwZToiaW5mbyIscG9zaXRpb246InRvcC1yaWdodCJ9KX19PlRvcCBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57QnQuc2hvdyh7bWVzc2FnZToiVG9wIExlZnQgUG9zaXRpb24iLHR5cGU6ImluZm8iLHBvc2l0aW9uOiJ0b3AtbGVmdCJ9KX19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5zaG93KHttZXNzYWdlOiJCb3R0b20gUmlnaHQgUG9zaXRpb24iLHR5cGU6ImluZm8iLHBvc2l0aW9uOiJib3R0b20tcmlnaHQifSl9fT5Cb3R0b20gUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LnNob3coe21lc3NhZ2U6IkJvdHRvbSBMZWZ0IFBvc2l0aW9uIix0eXBlOiJpbmZvIixwb3NpdGlvbjoiYm90dG9tLWxlZnQifSl9fT5Cb3R0b20gTGVmdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57QnQuc2hvdyh7bWVzc2FnZToiVG9wIENlbnRlciBQb3NpdGlvbiIsdHlwZToiaW5mbyIscG9zaXRpb246InRvcC1jZW50ZXIifSl9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5zaG93KHttZXNzYWdlOiJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIix0eXBlOiJpbmZvIixwb3NpdGlvbjoiYm90dG9tLWNlbnRlciJ9KX19PkJvdHRvbSBDZW50ZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5EdXJhdGlvbiBPcHRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDb250cm9sIGhvdyBsb25nIHRvYXN0cyBzdGF5IHZpc2libGUuIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5zaG93KHttZXNzYWdlOiJRdWljayB0b2FzdCAoMSBzZWNvbmQpIix0eXBlOiJpbmZvIixkdXJhdGlvbjoxZTN9KX19PjEgU2Vjb25kPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5zaG93KHttZXNzYWdlOiJTdGFuZGFyZCB0b2FzdCAoMyBzZWNvbmRzKSIsdHlwZToiaW5mbyIsZHVyYXRpb246M2UzfSl9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5zaG93KHttZXNzYWdlOiJMb25nIHRvYXN0ICg1IHNlY29uZHMpIix0eXBlOiJpbmZvIixkdXJhdGlvbjo1ZTN9KX19PjUgU2Vjb25kczwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57QnQuc2hvdyh7bWVzc2FnZToiTWFudWFsIGRpc21pc3Mgb25seSAoY2xpY2sgdG8gY2xvc2UpIix0eXBlOiJ3YXJuaW5nIixkdXJhdGlvbjowfSl9fT5ObyBBdXRvLURpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5NdWx0aXBsZSBUb2FzdHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIE11bHRpcGxlIHRvYXN0cyBzdGFjayBhdXRvbWF0aWNhbGx5LiBUaGV5IG1haW50YWluIHRoZWlyIG9yZGVyIGFuZCBhbmltYXRlIHNtb290aGx5LgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LmluZm8oIkZpcnN0IG5vdGlmaWNhdGlvbiIpLHNldFRpbWVvdXQoKCk9PkJ0LnN1Y2Nlc3MoIlNlY29uZCBub3RpZmljYXRpb24iKSwyMDApLHNldFRpbWVvdXQoKCk9PkJ0Lndhcm5pbmcoIlRoaXJkIG5vdGlmaWNhdGlvbiIpLDQwMCksc2V0VGltZW91dCgoKT0+QnQuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSw2MDApfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpPT57Zm9yKGxldCB0PTE7dDw9NTt0Kyspc2V0VGltZW91dCgoKT0+e0J0LnNob3coe21lc3NhZ2U6YE5vdGlmaWNhdGlvbiAjJHt0fWAsdHlwZTp0JTI9PT0wPyJzdWNjZXNzIjoiaW5mbyIsZHVyYXRpb246MmUzK3QqNTAwfSl9LHQqMTAwKX19PlJhcGlkIEZpcmU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5SZWFsLVdvcmxkIEV4YW1wbGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDb21tb24gdXNlIGNhc2VzIGZvciB0b2FzdCBub3RpZmljYXRpb25zIGluIGFwcGxpY2F0aW9ucy4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7YXN5bmMoKT0+e2xldCB0PWF3YWl0IEJ0LnNob3coe21lc3NhZ2U6IlNhdmluZyBjaGFuZ2VzLi4uIix0eXBlOiJpbmZvIixkdXJhdGlvbjowfSk7c2V0VGltZW91dCgoKT0+e3QuZGlzbWlzcygpLEJ0LnN1Y2Nlc3MoIkNoYW5nZXMgc2F2ZWQgc3VjY2Vzc2Z1bGx5ISIpfSwyZTMpfX0+U2F2ZSBPcGVyYXRpb248L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LmVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXIuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uIil9fT5OZXR3b3JrIEVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC53YXJuaW5nKCJZb3VyIHNlc3Npb24gd2lsbCBleHBpcmUgaW4gNSBtaW51dGVzIil9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKT0+e0J0LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpfX0+VXBsb2FkIENvbXBsZXRlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UHJvZ3JhbW1hdGljIENvbnRyb2w8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEFkdmFuY2VkIGNvbnRyb2wgb3ZlciB0b2FzdCBiZWhhdmlvci4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7YXN5bmMoKT0+e2xldCB0PWF3YWl0IEJ0LnNob3coe21lc3NhZ2U6IlRoaXMgdG9hc3QgY2FuIGJlIGRpc21pc3NlZCBwcm9ncmFtbWF0aWNhbGx5Iix0eXBlOiJpbmZvIixkdXJhdGlvbjowfSk7c2V0VGltZW91dCgoKT0+e3QuZGlzbWlzcygpLEJ0LnN1Y2Nlc3MoIlRvYXN0IGRpc21pc3NlZCBhZnRlciAyIHNlY29uZHMiKX0sMmUzKX19PlByb2dyYW1tYXRpYyBEaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCk9PntCdC5pbmZvKCJJbmZvIG1lc3NhZ2UiLDJlMyksc2V0VGltZW91dCgoKT0+QnQuc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwyZTMpLDUwMCksc2V0VGltZW91dCgoKT0+QnQud2FybmluZygiV2FybmluZyBtZXNzYWdlIiwyZTMpLDFlMyksc2V0VGltZW91dCgoKT0+QnQuZXJyb3IoIkVycm9yIG1lc3NhZ2UiLDJlMyksMTUwMCl9fT5Db252ZW5pZW5jZSBNZXRob2RzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgfSk7dmFyIEw4LHFzLEJ0LHdWPWIoKCk9Pnt1ZSgpO0x0KCk7bWkoKTtJbXQoKTtwYSgpO1ZlKCk7TDg9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxxcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sQnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXRvYXN0IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W107dmFyIHg9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBNPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6TnVtYmVyfSldLHk9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLEw4KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWVzc2FnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+Im1lc3NhZ2UiaW4gUyxnZXQ6Uz0+Uy5tZXNzYWdlLHNldDooUyxGKT0+e1MubWVzc2FnZT1GfX0sbWV0YWRhdGE6TX0sbixvKSxMOCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InR5cGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJ0eXBlImluIFMsZ2V0OlM9PlMudHlwZSxzZXQ6KFMsRik9PntTLnR5cGU9Rn19LG1ldGFkYXRhOk19LGMscCksTDgodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkdXJhdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+ImR1cmF0aW9uImluIFMsZ2V0OlM9PlMuZHVyYXRpb24sc2V0OihTLEYpPT57Uy5kdXJhdGlvbj1GfX0sbWV0YWRhdGE6TX0sZixnKSxMOCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzVmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+ImlzVmlzaWJsZSJpbiBTLGdldDpTPT5TLmlzVmlzaWJsZSxzZXQ6KFMsRik9PntTLmlzVmlzaWJsZT1GfX0sbWV0YWRhdGE6TX0sdixtKSxMOChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vPVBtdDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkZlZWRiYWNrIiwiT3ZlcmxheSJdO3N0YXRpYyB0b2FzdENvbnRhaW5lcnM9bmV3IE1hcDtzdGF0aWMgZ2V0T3JDcmVhdGVDb250YWluZXIoTSl7aWYoIXRoaXMudG9hc3RDb250YWluZXJzLmhhcyhNKSl7bGV0IFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7c3dpdGNoKFMuY2xhc3NOYW1lPWB0b2FzdC1jb250YWluZXIgdG9hc3QtY29udGFpbmVyLSR7TX1gLFMuc3R5bGUuY3NzVGV4dD1gCiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6ICR7cjIub3ZlcmxheS50b2FzdH07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIGAsTSl7Y2FzZSJ0b3AtcmlnaHQiOlMuc3R5bGUudG9wPSIwIixTLnN0eWxlLnJpZ2h0PSIwIjticmVhaztjYXNlInRvcC1sZWZ0IjpTLnN0eWxlLnRvcD0iMCIsUy5zdHlsZS5sZWZ0PSIwIjticmVhaztjYXNlImJvdHRvbS1yaWdodCI6Uy5zdHlsZS5ib3R0b209IjAiLFMuc3R5bGUucmlnaHQ9IjAiO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOlMuc3R5bGUuYm90dG9tPSIwIixTLnN0eWxlLmxlZnQ9IjAiO2JyZWFrO2Nhc2UidG9wLWNlbnRlciI6Uy5zdHlsZS50b3A9IjAiLFMuc3R5bGUubGVmdD0iNTAlIixTLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWCgtNTAlKSI7YnJlYWs7Y2FzZSJib3R0b20tY2VudGVyIjpTLnN0eWxlLmJvdHRvbT0iMCIsUy5zdHlsZS5sZWZ0PSI1MCUiLFMuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGVYKC01MCUpIjticmVha31kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFMpLHRoaXMudG9hc3RDb250YWluZXJzLnNldChNLFMpfXJldHVybiB0aGlzLnRvYXN0Q29udGFpbmVycy5nZXQoTSl9c3RhdGljIGFzeW5jIHNob3coTSl7bGV0IFM9dHlwZW9mIE09PSJzdHJpbmciP3ttZXNzYWdlOk19Ok0sRj1uZXcgeDtyZXR1cm4gRi5tZXNzYWdlPVMubWVzc2FnZSxGLnR5cGU9Uy50eXBlfHwiaW5mbyIsRi5kdXJhdGlvbj1TLmR1cmF0aW9ufHwzZTMsdGhpcy5nZXRPckNyZWF0ZUNvbnRhaW5lcihTLnBvc2l0aW9ufHwidG9wLXJpZ2h0IikuYXBwZW5kQ2hpbGQoRiksYXdhaXQgRi51cGRhdGVDb21wbGV0ZSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntGLmlzVmlzaWJsZT0hMH0pLEYuZHVyYXRpb24+MCYmc2V0VGltZW91dCgoKT0+e0YuZGlzbWlzcygpfSxGLmR1cmF0aW9uKSxGfXN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KE0pe3JldHVybiB0aGlzLnNob3coTSl9c3RhdGljIGluZm8oTSxTKXtyZXR1cm4gdGhpcy5zaG93KHttZXNzYWdlOk0sdHlwZToiaW5mbyIsZHVyYXRpb246U30pfXN0YXRpYyBzdWNjZXNzKE0sUyl7cmV0dXJuIHRoaXMuc2hvdyh7bWVzc2FnZTpNLHR5cGU6InN1Y2Nlc3MiLGR1cmF0aW9uOlN9KX1zdGF0aWMgd2FybmluZyhNLFMpe3JldHVybiB0aGlzLnNob3coe21lc3NhZ2U6TSx0eXBlOiJ3YXJuaW5nIixkdXJhdGlvbjpTfSl9c3RhdGljIGVycm9yKE0sUyl7cmV0dXJuIHRoaXMuc2hvdyh7bWVzc2FnZTpNLHR5cGU6ImVycm9yIixkdXJhdGlvbjpTfSl9I2U9cXModGhpcyxuLCIiKTtnZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLiNlfXNldCBtZXNzYWdlKE0pe3RoaXMuI2U9TX0jdD0ocXModGhpcyxvKSxxcyh0aGlzLGMsImluZm8iKSk7Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgdHlwZShNKXt0aGlzLiN0PU19I2E9KHFzKHRoaXMscCkscXModGhpcyxmLDNlMykpO2dldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLiNhfXNldCBkdXJhdGlvbihNKXt0aGlzLiNhPU19I2k9KHFzKHRoaXMsZykscXModGhpcyx2LCExKSk7Z2V0IGlzVmlzaWJsZSgpe3JldHVybiB0aGlzLiNpfXNldCBpc1Zpc2libGUoTSl7dGhpcy4jaT1NfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxxcyh0aGlzLG0pLHYxLnNldHVwKCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBmb250LWZhbWlseTogJHt0MX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc3Zpc2libGVdKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KCiAgICAgIC50b2FzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmIiwiIzIyMiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2UwZTBlMCIsIiMzMzMiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAke2guYmRUaGVtZSgicmdiYSgwLDAsMCwwLjEpIiwicmdiYSgwLDAsMCwwLjMpIil9OwogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2FzdDpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLmljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjZmZmIil9OwogICAgICB9CgogICAgICAuY2xvc2UgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgLmNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY2xvc2Ugc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBUeXBlLXNwZWNpZmljIHN0eWxlcyAqLwogICAgICA6aG9zdChbdHlwZT0iaW5mbyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMwMDg0ZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJzdWNjZXNzIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogIzIyYzU1ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9Indhcm5pbmciXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjZjU5ZTBiOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0iZXJyb3IiXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjZWY0NDQ0OwogICAgICB9CgogICAgICAvKiBQcm9ncmVzcyBiYXIgKi8KICAgICAgLnByb2dyZXNzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAzcHg7CiAgICAgICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgOHB4IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0OwogICAgICAgIGFuaW1hdGlvbjogcHJvZ3Jlc3MgbGluZWFyIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHByb2dyZXNzIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKTsKICAgICAgICB9CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldCBNPXtpbmZvOndgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMWExIDEgMCAxMC0yIDB2Mkg3YTEgMSAwIDEwMCAyaDJ2MmExIDEgMCAxMDIgMHYtMmgyYTEgMSAwIDEwMC0yaC0yVjd6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCxzdWNjZXNzOndgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy43MDctOS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMOSAxMC41ODYgNy43MDcgOS4yOTNhMSAxIDAgMDAtMS40MTQgMS40MTRsMiAyYTEgMSAwIDAwMS40MTQgMGw0LTR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCx3YXJuaW5nOndgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC4yNTcgMy4wOTljLjc2NS0xLjM2IDIuNzIyLTEuMzYgMy40ODYgMGw1LjU4IDkuOTJjLjc1IDEuMzM0LS4yMTMgMi45OC0xLjc0MiAyLjk4SDQuNDJjLTEuNTMgMC0yLjQ5My0xLjY0Ni0xLjc0My0yLjk4bDUuNTgtOS45MnpNMTEgMTNhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS04YTEgMSAwIDAwLTEgMXYzYTEgMSAwIDAwMiAwVjZhMSAxIDAgMDAtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgICAgIDwvc3ZnPmAsZXJyb3I6d2A8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2ek04LjcwNyA3LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNEw4LjU4NiAxMGwtMS4yOTMgMS4yOTNhMSAxIDAgMTAxLjQxNCAxLjQxNEwxMCAxMS40MTRsMS4yOTMgMS4yOTNhMSAxIDAgMDAxLjQxNC0xLjQxNEwxMS40MTQgMTBsMS4yOTMtMS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMMTAgOC41ODYgOC43MDcgNy4yOTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YH07cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InRvYXN0IiBAY2xpY2s9JHt0aGlzLmRpc21pc3N9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24iPgogICAgICAgICAgJHtNW3RoaXMudHlwZV19CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+JHt0aGlzLm1lc3NhZ2V9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xvc2UiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDh6Ii8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZHVyYXRpb24+MD93YAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiIHN0eWxlPSJhbmltYXRpb24tZHVyYXRpb246ICR7dGhpcy5kdXJhdGlvbn1tcyI+PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZGlzbWlzcygpe3RoaXMuaXNWaXNpYmxlPSExLGF3YWl0IG5ldyBQcm9taXNlKFM9PnNldFRpbWVvdXQoUywzMDApKSx0aGlzLnJlbW92ZSgpO2xldCBNPXRoaXMucGFyZW50RWxlbWVudDtpZihNJiZNLmNoaWxkcmVuLmxlbmd0aD09PTApe00ucmVtb3ZlKCk7Zm9yKGxldFtTLEZdb2YgeC50b2FzdENvbnRhaW5lcnMuZW50cmllcygpKWlmKEY9PT1NKXt4LnRvYXN0Q29udGFpbmVycy5kZWxldGUoUyk7YnJlYWt9fX1maXJzdFVwZGF0ZWQoKXt0aGlzLnNldEF0dHJpYnV0ZSgidHlwZSIsdGhpcy50eXBlKX1zdGF0aWN7cXMoaSxhKX19O3JldHVybiB4PWl9KSgpfSk7dmFyIE5tdD1iKCgpPT57d1YoKX0pO3ZhciBGbXQ9YigoKT0+e2ZtdCgpO3ltdCgpO1NtdCgpOyRtdCgpO0VtdCgpO05tdCgpfSk7dmFyIE9tdD1iKCgpPT57UGwoKX0pO3ZhciBSbXQ9YigoKT0+e0owKCl9KTt2YXIgQm10PWIoKCk9PntPbXQoKTtSbXQoKX0pO3ZhciBIbXQ9YigoKT0+e18xKCl9KTt2YXIgcW10PWIoKCk9PntMeCgpfSk7dmFyIFZtdD1iKCgpPT57RnEoKX0pO3ZhciBqbXQ9YigoKT0+e0J4KCl9KTt2YXIgVW10PWIoKCk9PntacSgpfSk7dmFyIFdtdCxHbXQ9YigoKT0+e3VlKCk7eDEoKTtnMigpO1BsKCk7dW8oKTtKMCgpO1dtdD0oKT0+d2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtRYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwiQnJlYWQiLCJFZ2dzIiwiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgIC52YWx1ZT0ke1siUmV2aWV3IHB1bGwgcmVxdWVzdHMiLCJGaXggY3JpdGljYWwgYnVnIiwiVXBkYXRlIGRvY3VtZW50YXRpb24iLCJEZXBsb3kgdG8gcHJvZHVjdGlvbiIsIlRlYW0gc3RhbmR1cCBtZWV0aW5nIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsIkJvYiJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0keyExfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwiYmFja2VuZCIsImRhdGFiYXNlIl19CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEdXBsaWNhdGUgaXRlbXMgYXJlIG5vdCBhbGxvd2VkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIERlbGV0ZSBDb25maXJtYXRpb24ifSAuc3VidGl0bGU9JHsiUmVxdWlyZSBjb25maXJtYXRpb24gYmVmb3JlIGRlbGV0aW5nIGl0ZW1zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IkltcG9ydGFudCBEb2N1bWVudHMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBkb2N1bWVudCBuYW1lLi4uIn0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ITB9CiAgICAgICAgICAudmFsdWU9JHtbIkNvbnRyYWN0XzIwMjQucGRmIiwiRmluYW5jaWFsX1JlcG9ydF9RMy54bHN4IiwiUHJvamVjdF9Qcm9wb3NhbC5kb2N4IiwiTWVldGluZ19Ob3Rlcy50eHQiXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEZWxldGlvbiByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHNhZmV0eSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRGlzYWJsZWQgU3RhdGUifSAuc3VidGl0bGU9JHsiUmVhZC1vbmx5IGxpc3QgZGlzcGxheSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTeXN0ZW0gRGVmYXVsdHMifQogICAgICAgICAgLnZhbHVlPSR7WyJEZWZhdWx0IFNldHRpbmcgMSIsIkRlZmF1bHQgU2V0dGluZyAyIiwiRGVmYXVsdCBTZXR0aW5nIDMiXX0KICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7ITB9CiAgICAgICAgICAgIC5rZXk9JHsibmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbmdyZWRpZW50cyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbmdyZWRpZW50Li4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5ncmVkaWVudHMifQogICAgICAgICAgICAgIC5zb3J0YWJsZT0keyEwfQogICAgICAgICAgICAgIC52YWx1ZT0ke1siMiBjdXBzIGZsb3VyIiwiMSBjdXAgc3VnYXIiLCIzIGVnZ3MiXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGF0IGxlYXN0IDMgaW5ncmVkaWVudHMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7Ikluc3RydWN0aW9ucyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbnN0cnVjdGlvbiBzdGVwLi4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgICAgICAudmFsdWU9JHtbIlByZWhlYXQgb3ZlbiB0byAzNTBceEIwRiIsIk1peCBkcnkgaW5ncmVkaWVudHMiXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7ITB9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0keyExfQogICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0keyExfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTB9CiAgICAgICAgICBAY2hhbmdlPSR7dD0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTtpZihlKXtsZXQgYT17aXRlbXM6dC5kZXRhaWwudmFsdWUsY291bnQ6dC5kZXRhaWwudmFsdWUubGVuZ3RoLHRpbWVzdGFtcDpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9O2UudGV4dENvbnRlbnQ9SlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0ibGlzdC1qc29uIj4KICAgICAgICAgIHsKICAgICAgICAgICAgIml0ZW1zIjogW10sCiAgICAgICAgICAgICJjb3VudCI6IDAsCiAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAiJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9IgogICAgICAgICAgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDinKggQWRkLCBlZGl0LCByZW1vdmUsIGFuZCByZW9yZGVyIGl0ZW1zIHRvIHNlZSB0aGUgSlNPTiBvdXRwdXQgdXBkYXRlIGluIHJlYWwtdGltZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQWR2YW5jZWQgQ29uZmlndXJhdGlvbiJ9IC5zdWJ0aXRsZT0keyJDb21iaW5lIGFsbCBmZWF0dXJlcyBmb3IgY29tcGxleCB1c2UgY2FzZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBNaWxlc3RvbmVzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgbWlsZXN0b25lLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1siUHJvamVjdCBLaWNrb2ZmIC0gV2VlayAxIiwiUmVxdWlyZW1lbnRzIEdhdGhlcmluZyAtIFdlZWsgMi0zIiwiRGVzaWduIFBoYXNlIC0gV2VlayA0LTYiLCJEZXZlbG9wbWVudCBTcHJpbnQgMSAtIFdlZWsgNy05IiwiVGVzdGluZyAmIFFBIC0gV2VlayAxMC0xMSIsIkRlcGxveW1lbnQgLSBXZWVrIDEyIl19CiAgICAgICAgICAuc29ydGFibGU9JHshMH0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ITB9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ITF9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHshMH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNYW5hZ2UgcHJvamVjdCBtaWxlc3RvbmVzICgzLTEyIGl0ZW1zLCBzb3J0YWJsZSwgbm8gZHVwbGljYXRlcykifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEVtcHR5IFN0YXRlIn0gLnN1YnRpdGxlPSR7IkhvdyB0aGUgY29tcG9uZW50IGxvb2tzIHdpdGggbm8gaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBJZGVhcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU2hhcmUgeW91ciBpZGVhcy4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJTdGFydCBhZGRpbmcgaXRlbXMgdG8gYnVpbGQgeW91ciBsaXN0In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciBiMixOdCxZbXQsWm10PWIoKCk9Pnt1ZSgpO18xKCk7RXQoKTtwbygpO0dtdCgpO1ZlKCk7YjI9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxOdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sWW10PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC1saXN0IildLGUsYT1bXSxpLHI9WGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W10sTixMPVtdLEE9W10scSxDPVtdLHo9W10sRSxUPVtdLCQ9W10sVixSPVtdLFU9W10scmUsaj1bXSxtZT1bXSx3ZSxIPVtdLGNlPVtdLGtlLFc9W10sRD1bXSxPLFo9W10sWT1bXSxvZSxnZT1bXSxiZT1bXSwkZSxCPVtdLFA9W10sSixmZT1bXSxkZT1bXTt2YXIgX2U9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBoZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOkFycmF5fSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6TnVtYmVyfSldLHk9W0koe3R5cGU6TnVtYmVyfSldLHg9W0koe3R5cGU6Qm9vbGVhbn0pXSxGPVtJKHt0eXBlOkJvb2xlYW59KV0sTj1bSSh7dHlwZTpCb29sZWFufSldLHE9W0koe3R5cGU6U3RyaW5nfSldLEU9W0soKV0sVj1bSygpXSxyZT1bSygpXSx3ZT1bSygpXSxrZT1bSygpXSxPPVtLKCldLG9lPVtLKCldLCRlPVtLKCldLEo9W0soKV0sYjIodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJ2YWx1ZSJpbiB0ZSxnZXQ6dGU9PnRlLnZhbHVlLHNldDoodGUsemUpPT57dGUudmFsdWU9emV9fSxtZXRhZGF0YTpoZX0sbixvKSxiMih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp0ZT0+InBsYWNlaG9sZGVyImluIHRlLGdldDp0ZT0+dGUucGxhY2Vob2xkZXIsc2V0Oih0ZSx6ZSk9Pnt0ZS5wbGFjZWhvbGRlcj16ZX19LG1ldGFkYXRhOmhlfSxjLHApLGIyKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4SXRlbXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnRlPT4ibWF4SXRlbXMiaW4gdGUsZ2V0OnRlPT50ZS5tYXhJdGVtcyxzZXQ6KHRlLHplKT0+e3RlLm1heEl0ZW1zPXplfX0sbWV0YWRhdGE6aGV9LGYsZyksYjIodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtaW5JdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJtaW5JdGVtcyJpbiB0ZSxnZXQ6dGU9PnRlLm1pbkl0ZW1zLHNldDoodGUsemUpPT57dGUubWluSXRlbXM9emV9fSxtZXRhZGF0YTpoZX0sdixtKSxiMih0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFsbG93RHVwbGljYXRlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJhbGxvd0R1cGxpY2F0ZXMiaW4gdGUsZ2V0OnRlPT50ZS5hbGxvd0R1cGxpY2F0ZXMsc2V0Oih0ZSx6ZSk9Pnt0ZS5hbGxvd0R1cGxpY2F0ZXM9emV9fSxtZXRhZGF0YTpoZX0sTSxTKSxiMih0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNvcnRhYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp0ZT0+InNvcnRhYmxlImluIHRlLGdldDp0ZT0+dGUuc29ydGFibGUsc2V0Oih0ZSx6ZSk9Pnt0ZS5zb3J0YWJsZT16ZX19LG1ldGFkYXRhOmhlfSxfLGspLGIyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY29uZmlybURlbGV0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJjb25maXJtRGVsZXRlImluIHRlLGdldDp0ZT0+dGUuY29uZmlybURlbGV0ZSxzZXQ6KHRlLHplKT0+e3RlLmNvbmZpcm1EZWxldGU9emV9fSxtZXRhZGF0YTpoZX0sTCxBKSxiMih0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbGlkYXRpb25UZXh0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp0ZT0+InZhbGlkYXRpb25UZXh0ImluIHRlLGdldDp0ZT0+dGUudmFsaWRhdGlvblRleHQsc2V0Oih0ZSx6ZSk9Pnt0ZS52YWxpZGF0aW9uVGV4dD16ZX19LG1ldGFkYXRhOmhlfSxDLHopLGIyKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5wdXRWYWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJpbnB1dFZhbHVlImluIHRlLGdldDp0ZT0+dGUuaW5wdXRWYWx1ZSxzZXQ6KHRlLHplKT0+e3RlLmlucHV0VmFsdWU9emV9fSxtZXRhZGF0YTpoZX0sVCwkKSxiMih0aGlzLG51bGwsVix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVkaXRpbmdJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJlZGl0aW5nSW5kZXgiaW4gdGUsZ2V0OnRlPT50ZS5lZGl0aW5nSW5kZXgsc2V0Oih0ZSx6ZSk9Pnt0ZS5lZGl0aW5nSW5kZXg9emV9fSxtZXRhZGF0YTpoZX0sUixVKSxiMih0aGlzLG51bGwscmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlZGl0aW5nVmFsdWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnRlPT4iZWRpdGluZ1ZhbHVlImluIHRlLGdldDp0ZT0+dGUuZWRpdGluZ1ZhbHVlLHNldDoodGUsemUpPT57dGUuZWRpdGluZ1ZhbHVlPXplfX0sbWV0YWRhdGE6aGV9LGosbWUpLGIyKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRyYWdnZWRJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJkcmFnZ2VkSW5kZXgiaW4gdGUsZ2V0OnRlPT50ZS5kcmFnZ2VkSW5kZXgsc2V0Oih0ZSx6ZSk9Pnt0ZS5kcmFnZ2VkSW5kZXg9emV9fSxtZXRhZGF0YTpoZX0sSCxjZSksYjIodGhpcyxudWxsLGtlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ092ZXJJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6dGU9PiJkcmFnT3ZlckluZGV4ImluIHRlLGdldDp0ZT0+dGUuZHJhZ092ZXJJbmRleCxzZXQ6KHRlLHplKT0+e3RlLmRyYWdPdmVySW5kZXg9emV9fSxtZXRhZGF0YTpoZX0sVyxEKSxiMih0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRyYWdTdGFydFkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnRlPT4iZHJhZ1N0YXJ0WSJpbiB0ZSxnZXQ6dGU9PnRlLmRyYWdTdGFydFksc2V0Oih0ZSx6ZSk9Pnt0ZS5kcmFnU3RhcnRZPXplfX0sbWV0YWRhdGE6aGV9LFosWSksYjIodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ0N1cnJlbnRZIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp0ZT0+ImRyYWdDdXJyZW50WSJpbiB0ZSxnZXQ6dGU9PnRlLmRyYWdDdXJyZW50WSxzZXQ6KHRlLHplKT0+e3RlLmRyYWdDdXJyZW50WT16ZX19LG1ldGFkYXRhOmhlfSxnZSxiZSksYjIodGhpcyxudWxsLCRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGFyZ2V0SW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnRlPT4idGFyZ2V0SW5kZXgiaW4gdGUsZ2V0OnRlPT50ZS50YXJnZXRJbmRleCxzZXQ6KHRlLHplKT0+e3RlLnRhcmdldEluZGV4PXplfX0sbWV0YWRhdGE6aGV9LEIsUCksYjIodGhpcyxudWxsLEose2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpdGVtSGVpZ2h0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp0ZT0+Iml0ZW1IZWlnaHQiaW4gdGUsZ2V0OnRlPT50ZS5pdGVtSGVpZ2h0LHNldDoodGUsemUpPT57dGUuaXRlbUhlaWdodD16ZX19LG1ldGFkYXRhOmhlfSxmZSxkZSksYjIobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6aGV9LG51bGwsYSksX2U9aT1lLnZhbHVlLGhlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmhlfSl9c3RhdGljIGRlbW89V210O3N0YXRpYyBkZW1vR3JvdXBzPVsiSW5wdXQiXTsjZT1OdCh0aGlzLG4sW10pO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShoZSl7dGhpcy4jZT1oZX0jdD0oTnQodGhpcyxvKSxOdCh0aGlzLGMsIkFkZCBuZXcgaXRlbS4uLiIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgcGxhY2Vob2xkZXIoaGUpe3RoaXMuI3Q9aGV9I2E9KE50KHRoaXMscCksTnQodGhpcyxmLDApKTtnZXQgbWF4SXRlbXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWF4SXRlbXMoaGUpe3RoaXMuI2E9aGV9I2k9KE50KHRoaXMsZyksTnQodGhpcyx2LDApKTtnZXQgbWluSXRlbXMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgbWluSXRlbXMoaGUpe3RoaXMuI2k9aGV9I3I9KE50KHRoaXMsbSksTnQodGhpcyxNLCExKSk7Z2V0IGFsbG93RHVwbGljYXRlcygpe3JldHVybiB0aGlzLiNyfXNldCBhbGxvd0R1cGxpY2F0ZXMoaGUpe3RoaXMuI3I9aGV9I3M9KE50KHRoaXMsUyksTnQodGhpcyxfLCExKSk7Z2V0IHNvcnRhYmxlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IHNvcnRhYmxlKGhlKXt0aGlzLiNzPWhlfSNuPShOdCh0aGlzLGspLE50KHRoaXMsTCwhMSkpO2dldCBjb25maXJtRGVsZXRlKCl7cmV0dXJuIHRoaXMuI259c2V0IGNvbmZpcm1EZWxldGUoaGUpe3RoaXMuI249aGV9I289KE50KHRoaXMsQSksTnQodGhpcyxDLCIiKSk7Z2V0IHZhbGlkYXRpb25UZXh0KCl7cmV0dXJuIHRoaXMuI299c2V0IHZhbGlkYXRpb25UZXh0KGhlKXt0aGlzLiNvPWhlfSNsPShOdCh0aGlzLHopLE50KHRoaXMsVCwiIikpO2dldCBpbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGlucHV0VmFsdWUoaGUpe3RoaXMuI2w9aGV9I2M9KE50KHRoaXMsJCksTnQodGhpcyxSLC0xKSk7Z2V0IGVkaXRpbmdJbmRleCgpe3JldHVybiB0aGlzLiNjfXNldCBlZGl0aW5nSW5kZXgoaGUpe3RoaXMuI2M9aGV9I2Q9KE50KHRoaXMsVSksTnQodGhpcyxqLCIiKSk7Z2V0IGVkaXRpbmdWYWx1ZSgpe3JldHVybiB0aGlzLiNkfXNldCBlZGl0aW5nVmFsdWUoaGUpe3RoaXMuI2Q9aGV9I3A9KE50KHRoaXMsbWUpLE50KHRoaXMsSCwtMSkpO2dldCBkcmFnZ2VkSW5kZXgoKXtyZXR1cm4gdGhpcy4jcH1zZXQgZHJhZ2dlZEluZGV4KGhlKXt0aGlzLiNwPWhlfSNoPShOdCh0aGlzLGNlKSxOdCh0aGlzLFcsLTEpKTtnZXQgZHJhZ092ZXJJbmRleCgpe3JldHVybiB0aGlzLiNofXNldCBkcmFnT3ZlckluZGV4KGhlKXt0aGlzLiNoPWhlfSN1PShOdCh0aGlzLEQpLE50KHRoaXMsWiwwKSk7Z2V0IGRyYWdTdGFydFkoKXtyZXR1cm4gdGhpcy4jdX1zZXQgZHJhZ1N0YXJ0WShoZSl7dGhpcy4jdT1oZX0jZj0oTnQodGhpcyxZKSxOdCh0aGlzLGdlLDApKTtnZXQgZHJhZ0N1cnJlbnRZKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IGRyYWdDdXJyZW50WShoZSl7dGhpcy4jZj1oZX0jbT0oTnQodGhpcyxiZSksTnQodGhpcyxCLC0xKSk7Z2V0IHRhcmdldEluZGV4KCl7cmV0dXJuIHRoaXMuI219c2V0IHRhcmdldEluZGV4KGhlKXt0aGlzLiNtPWhlfSNnPShOdCh0aGlzLFApLE50KHRoaXMsZmUsMCkpO2dldCBpdGVtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI2d9c2V0IGl0ZW1IZWlnaHQoaGUpe3RoaXMuI2c9aGV9Ym91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcj0oTnQodGhpcyxkZSksbnVsbCk7Ym91bmRIYW5kbGVHbG9iYWxEcmFnRW5kPW51bGw7b3JpZ2luYWxJdGVtUmVjdHM9W107c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGlzdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZSwgYm94LXNoYWRvdyAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBQcmV2ZW50IGFuaW1hdGlvbiBmcm9tIGFmZmVjdGluZyBzY3JvbGwgYm91bmRzICovCiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW06bGFzdC1vZi10eXBlIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CgogICAgICAubGlzdC1pdGVtczpub3QoLmlzLWRyYWdnaW5nKSAubGlzdC1pdGVtOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTcuNSUpIiwiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERyYWdnaW5nIGl0ZW0gLSBmb2xsb3dzIGN1cnNvciAqLwogICAgICAubGlzdC1pdGVtLmRyYWdnaW5nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwiaHNsKDIxNSAyMC4yJSAxMiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCJyZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBJdGVtcyB0aGF0IG5lZWQgdG8gbW92ZSB1cCB0byBtYWtlIHNwYWNlICovCiAgICAgIC5saXN0LWl0ZW0ubW92ZS11cCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1pdGVtLWhlaWdodCwgNDhweCkpKTsKICAgICAgfQoKICAgICAgLyogSXRlbXMgdGhhdCBuZWVkIHRvIG1vdmUgZG93biB0byBtYWtlIHNwYWNlICovCiAgICAgIC5saXN0LWl0ZW0ubW92ZS1kb3duIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0taXRlbS1oZWlnaHQsIDQ4cHgpKTsKICAgICAgfQoKCiAgICAgIC5kcmFnLWhhbmRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5pdGVtLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLml0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC5pdGVtLWVkaXQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pdGVtLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5jYW5jZWwgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5jYW5jZWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsImhzbCgwIDYyLjglIDUwLjYlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5hZGQtaXRlbS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5Ny41JSkiLCJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAuYWRkLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMzJweCAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDI0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDM0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSB0cmFuc2l0aW9ucyBkdXJpbmcgZHJvcCB0byBwcmV2ZW50IGZsYXNoICovCiAgICAgIC5saXN0LWl0ZW1zLmRyb3BwaW5nIC5saXN0LWl0ZW0gewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICR7dGhpcy5sYWJlbD93YDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD5gOiIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZD8iZGlzYWJsZWQiOiIifSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaXN0LWl0ZW1zIj4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aD4wP3RoaXMudmFsdWUubWFwKChoZSx0ZSk9PndgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9Imxpc3QtaXRlbSAke3RoaXMuZHJhZ2dlZEluZGV4PT09dGU/ImRyYWdnaW5nIjoiIn0iCiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9IiR7dGhpcy5zb3J0YWJsZSYmIXRoaXMuZGlzYWJsZWR9IgogICAgICAgICAgICAgICAgQGRyYWdzdGFydD0ke3plPT50aGlzLmhhbmRsZURyYWdTdGFydCh6ZSx0ZSl9CiAgICAgICAgICAgICAgICBAZHJhZ2VuZD0ke3RoaXMuaGFuZGxlRHJhZ0VuZH0KICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj0ke3plPT50aGlzLmhhbmRsZURyYWdPdmVyKHplLHRlKX0KICAgICAgICAgICAgICAgIEBkcm9wPSR7emU9PnRoaXMuaGFuZGxlRHJvcCh6ZSx0ZSl9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHt0aGlzLnNvcnRhYmxlJiYhdGhpcy5kaXNhYmxlZD93YAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcmFnLWhhbmRsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Z3JpcFZlcnRpY2FsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmVkaXRpbmdJbmRleD09PXRlP3dgCiAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Iml0ZW0tZWRpdC1pbnB1dCIKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZWRpdGluZ1ZhbHVlfQogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7emU9PnRoaXMuZWRpdGluZ1ZhbHVlPXplLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7emU9PnRoaXMuaGFuZGxlRWRpdEtleURvd24oemUsdGUpfQogICAgICAgICAgICAgICAgICAgICAgQGJsdXI9JHsoKT0+dGhpcy5zYXZlRWRpdCh0ZSl9CiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgYDp3YAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tdGV4dCIgQGRibGNsaWNrPSR7KCk9PiF0aGlzLmRpc2FibGVkJiZ0aGlzLnN0YXJ0RWRpdCh0ZSl9PgogICAgICAgICAgICAgICAgICAgICAgJHtoZX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZWRpdGluZ0luZGV4PT09dGU/d2AKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIHNhdmUiIEBjbGljaz0keygpPT50aGlzLnNhdmVFZGl0KHRlKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2FuY2VsIiBAY2xpY2s9JHsoKT0+dGhpcy5jYW5jZWxFZGl0KCl9PgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgOndgCiAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmRpc2FibGVkPyIiOndgCiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIiBAY2xpY2s9JHsoKT0+dGhpcy5zdGFydEVkaXQodGUpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGVuY2lsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoKT0+dGhpcy5yZW1vdmVJdGVtKHRlKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRyYXNoMiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgKTp3YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgIE5vIGl0ZW1zIGFkZGVkIHlldAogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgICR7IXRoaXMuZGlzYWJsZWQmJighdGhpcy5tYXhJdGVtc3x8dGhpcy52YWx1ZS5sZW5ndGg8dGhpcy5tYXhJdGVtcyk/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkLWl0ZW0tY29udGFpbmVyIj4KICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICBjbGFzcz0iYWRkLWlucHV0IgogICAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7dGhpcy5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgICAgIEBpbnB1dD0ke3RoaXMuaGFuZGxlSW5wdXR9CiAgICAgICAgICAgICAgICBAa2V5ZG93bj0ke3RoaXMuaGFuZGxlQWRkS2V5RG93bn0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJhZGQtYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hZGRJdGVtfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuaW5wdXRWYWx1ZS50cmltKCl9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGx1cyJ9PjwvZGVlcy1pY29uPiBBZGQKICAgICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dD93YAogICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbi1tZXNzYWdlIj4ke3RoaXMudmFsaWRhdGlvblRleHR9PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICBgfWhhbmRsZUlucHV0KGhlKXt0aGlzLmlucHV0VmFsdWU9aGUudGFyZ2V0LnZhbHVlfWhhbmRsZUFkZEtleURvd24oaGUpe2hlLmtleT09PSJFbnRlciImJnRoaXMuaW5wdXRWYWx1ZS50cmltKCkmJihoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWRkSXRlbSgpKX1oYW5kbGVFZGl0S2V5RG93bihoZSx0ZSl7aGUua2V5PT09IkVudGVyIj8oaGUucHJldmVudERlZmF1bHQoKSx0aGlzLnNhdmVFZGl0KHRlKSk6aGUua2V5PT09IkVzY2FwZSImJihoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsRWRpdCgpKX1hZGRJdGVtKCl7bGV0IGhlPXRoaXMuaW5wdXRWYWx1ZS50cmltKCk7aWYoIWhlKXJldHVybjtpZighdGhpcy5hbGxvd0R1cGxpY2F0ZXMmJnRoaXMudmFsdWUuaW5jbHVkZXMoaGUpKXt0aGlzLnZhbGlkYXRpb25UZXh0PSJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiLHNldFRpbWVvdXQoKCk9PnRoaXMudmFsaWRhdGlvblRleHQ9IiIsM2UzKTtyZXR1cm59aWYodGhpcy5tYXhJdGVtcyYmdGhpcy52YWx1ZS5sZW5ndGg+PXRoaXMubWF4SXRlbXMpe3RoaXMudmFsaWRhdGlvblRleHQ9YE1heGltdW0gJHt0aGlzLm1heEl0ZW1zfSBpdGVtcyBhbGxvd2VkYCxzZXRUaW1lb3V0KCgpPT50aGlzLnZhbGlkYXRpb25UZXh0PSIiLDNlMyk7cmV0dXJufXRoaXMudmFsdWU9Wy4uLnRoaXMudmFsdWUsaGVdLHRoaXMuaW5wdXRWYWx1ZT0iIix0aGlzLnZhbGlkYXRpb25UZXh0PSIiO2xldCB0ZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5hZGQtaW5wdXQiKTt0ZSYmKHRlLnZhbHVlPSIiLHRlLmZvY3VzKCkpLHRoaXMuZW1pdENoYW5nZSgpfXN0YXJ0RWRpdChoZSl7dGhpcy5lZGl0aW5nSW5kZXg9aGUsdGhpcy5lZGl0aW5nVmFsdWU9dGhpcy52YWx1ZVtoZV0sdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT57bGV0IHRlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLml0ZW0tZWRpdC1pbnB1dCIpO3RlJiYodGUuZm9jdXMoKSx0ZS5zZWxlY3QoKSl9KX1zYXZlRWRpdChoZSl7bGV0IHRlPXRoaXMuZWRpdGluZ1ZhbHVlLnRyaW0oKTtpZighdGUpe3RoaXMuY2FuY2VsRWRpdCgpO3JldHVybn1pZighdGhpcy5hbGxvd0R1cGxpY2F0ZXMmJnRlIT09dGhpcy52YWx1ZVtoZV0mJnRoaXMudmFsdWUuaW5jbHVkZXModGUpKXt0aGlzLnZhbGlkYXRpb25UZXh0PSJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiLHNldFRpbWVvdXQoKCk9PnRoaXMudmFsaWRhdGlvblRleHQ9IiIsM2UzKTtyZXR1cm59bGV0IHplPVsuLi50aGlzLnZhbHVlXTt6ZVtoZV09dGUsdGhpcy52YWx1ZT16ZSx0aGlzLmVkaXRpbmdJbmRleD0tMSx0aGlzLmVkaXRpbmdWYWx1ZT0iIix0aGlzLnZhbGlkYXRpb25UZXh0PSIiLHRoaXMuZW1pdENoYW5nZSgpfWNhbmNlbEVkaXQoKXt0aGlzLmVkaXRpbmdJbmRleD0tMSx0aGlzLmVkaXRpbmdWYWx1ZT0iIn1hc3luYyByZW1vdmVJdGVtKGhlKXt0aGlzLmNvbmZpcm1EZWxldGUmJiFhd2FpdCB0aGlzLnNob3dDb25maXJtRGlhbG9nKGBEZWxldGUgIiR7dGhpcy52YWx1ZVtoZV19Ij9gKXx8KHRoaXMudmFsdWU9dGhpcy52YWx1ZS5maWx0ZXIoKHRlLHplKT0+emUhPT1oZSksdGhpcy5lbWl0Q2hhbmdlKCkpfWFzeW5jIHNob3dDb25maXJtRGlhbG9nKGhlKXtyZXR1cm4gY29uZmlybShoZSl9aGFuZGxlRHJhZ1N0YXJ0KGhlLHRlKXtpZighdGhpcy5zb3J0YWJsZXx8dGhpcy5kaXNhYmxlZClyZXR1cm47dGhpcy5kcmFnZ2VkSW5kZXg9dGUsdGhpcy50YXJnZXRJbmRleD10ZSxoZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0ibW92ZSIsaGUuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHRlLnRvU3RyaW5nKCkpO2xldCB6ZT1uZXcgSW1hZ2U7emUuc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IixoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHplLDAsMCksdGhpcy5kcmFnU3RhcnRZPWhlLmNsaWVudFksdGhpcy5kcmFnQ3VycmVudFk9aGUuY2xpZW50WTtsZXQgRmU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpLEdlPUFycmF5LmZyb20oRmU/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKXx8W10pO0dlW3RlXSYmKHRoaXMuaXRlbUhlaWdodD1HZVt0ZV0ub2Zmc2V0SGVpZ2h0KSx0aGlzLm9yaWdpbmFsSXRlbVJlY3RzPUdlLm1hcCh5ZT0+eWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLEZlPy5jbGFzc0xpc3QuYWRkKCJpcy1kcmFnZ2luZyIpLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcj10aGlzLmhhbmRsZUdsb2JhbERyYWdPdmVyLmJpbmQodGhpcyksdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQ9dGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kLmJpbmQodGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpfWhhbmRsZUdsb2JhbERyYWdPdmVyKGhlKXtpZihoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZHJhZ2dlZEluZGV4PT09LTEpcmV0dXJuO3RoaXMuZHJhZ0N1cnJlbnRZPWhlLmNsaWVudFk7bGV0IHRlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKTtpZighdGUpcmV0dXJuO2xldCB6ZT1BcnJheS5mcm9tKHRlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKSksRmU9emVbdGhpcy5kcmFnZ2VkSW5kZXhdO2lmKCFGZSlyZXR1cm47bGV0IEdlPXRoaXMuZHJhZ0N1cnJlbnRZLXRoaXMuZHJhZ1N0YXJ0WTtGZS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHtHZX1weClgO2xldCB5ZT10aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTtpZigheWUpcmV0dXJuO2xldCBlZT15ZS50b3AreWUuaGVpZ2h0LzIrR2UsYWU9dGhpcy5kcmFnZ2VkSW5kZXg7Zm9yKGxldCB2ZT0wO3ZlPHplLmxlbmd0aDt2ZSsrKXtpZih2ZT09PXRoaXMuZHJhZ2dlZEluZGV4KWNvbnRpbnVlO2xldCBQZT10aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3ZlXTtpZighUGUpY29udGludWU7bGV0IGplPVBlLnRvcCtQZS5oZWlnaHQvMjtpZih6ZVt2ZV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLXVwIik/amUtPXRoaXMuaXRlbUhlaWdodDp6ZVt2ZV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLWRvd24iKSYmKGplKz10aGlzLml0ZW1IZWlnaHQpLGVlPGplJiZ2ZTx0aGlzLmRyYWdnZWRJbmRleCl7YWU9dmU7YnJlYWt9ZWxzZSBlZT5qZSYmdmU+dGhpcy5kcmFnZ2VkSW5kZXgmJihhZT12ZSl9YWUhPT10aGlzLnRhcmdldEluZGV4JiYodGhpcy50YXJnZXRJbmRleD1hZSx0aGlzLnVwZGF0ZUl0ZW1Qb3NpdGlvbnMoemUpKX11cGRhdGVJdGVtUG9zaXRpb25zKGhlKXtsZXQgdGU9dGhpcy5kcmFnZ2VkSW5kZXgsemU9dGhpcy50YXJnZXRJbmRleCxGZT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7RmUmJkZlLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IixgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKSxoZS5mb3JFYWNoKChHZSx5ZSk9Pnt5ZSE9PXRlJiYoR2UuY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsIm1vdmUtZG93biIpLEdlLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IixgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKSx0ZTx6ZT95ZT50ZSYmeWU8PXplJiZHZS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik6dGU+emUmJnllPj16ZSYmeWU8dGUmJkdlLmNsYXNzTGlzdC5hZGQoIm1vdmUtZG93biIpKX0pfWhhbmRsZUdsb2JhbERyYWdFbmQoKXt0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyKSx0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXI9bnVsbCksdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIix0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZCksdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQ9bnVsbCk7bGV0IGhlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKSx0ZT1oZT8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpLHplPXRlPy5bdGhpcy5kcmFnZ2VkSW5kZXhdO2lmKHRoaXMuZHJhZ2dlZEluZGV4PT09LTF8fHRoaXMudGFyZ2V0SW5kZXg9PT0tMXx8dGhpcy5kcmFnZ2VkSW5kZXg9PT10aGlzLnRhcmdldEluZGV4KXtpZih6ZSYmdGhpcy5kcmFnZ2VkSW5kZXghPT0tMSl7emUuc3R5bGUudHJhbnNpdGlvbj0idHJhbnNmb3JtIDAuMTVzIGVhc2UiLHplLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWSgwKSI7bGV0IHZlPSExLFBlPSgpPT57dmV8fCh2ZT0hMCx6ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixQZSksdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGhlLHRlKSl9O3plLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLFBlLHtvbmNlOiEwfSksc2V0VGltZW91dChQZSwyMDApfWVsc2UgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGhlLHRlKTtyZXR1cm59bGV0IEZlPXRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy5kcmFnZ2VkSW5kZXhdLEdlPXRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy50YXJnZXRJbmRleF07aWYoIUZlfHwhR2V8fCF6ZSl7dGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGhlLHRlKTtyZXR1cm59bGV0IHllO3RoaXMudGFyZ2V0SW5kZXg+dGhpcy5kcmFnZ2VkSW5kZXg/eWU9R2UuYm90dG9tLUZlLmJvdHRvbTp5ZT1HZS50b3AtRmUudG9wLHplLnN0eWxlLnRyYW5zaXRpb249InRyYW5zZm9ybSAwLjE1cyBlYXNlIix6ZS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHt5ZX1weClgO2xldCBlZT0hMSxhZT0oKT0+e2lmKGVlKXJldHVybjtlZT0hMCx6ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixhZSksaGU/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIiksaGU/Lm9mZnNldEhlaWdodCx0ZT8uZm9yRWFjaChqZT0+e2plLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCJtb3ZlLWRvd24iLCJkcmFnZ2luZyIpLGplLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKSxqZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpfSk7bGV0IHZlPVsuLi50aGlzLnZhbHVlXSxbUGVdPXZlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwxKTt2ZS5zcGxpY2UodGhpcy50YXJnZXRJbmRleCwwLFBlKSx0aGlzLnZhbHVlPXZlLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuZHJhZ2dlZEluZGV4PS0xLHRoaXMuZHJhZ092ZXJJbmRleD0tMSx0aGlzLnRhcmdldEluZGV4PS0xLHRoaXMuZHJhZ1N0YXJ0WT0wLHRoaXMuZHJhZ0N1cnJlbnRZPTAsdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cz1bXSx0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCk9PntsZXQgamU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7amU/LmZvckVhY2god3Q9Pnt3dC5zdHlsZS50cmFuc2l0aW9uPSJub25lIn0pLHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKT8ub2Zmc2V0SGVpZ2h0LHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2plPy5mb3JFYWNoKHd0PT57d3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKX0pLGhlPy5jbGFzc0xpc3QucmVtb3ZlKCJkcm9wcGluZyIsImlzLWRyYWdnaW5nIil9KX0pfTt6ZS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixhZSx7b25jZTohMH0pLHNldFRpbWVvdXQoYWUsMjAwKX1jbGVhbnVwRHJhZ1N0YXRlKGhlLHRlKXtoZT8uY2xhc3NMaXN0LmFkZCgiZHJvcHBpbmciKSxoZT8ub2Zmc2V0SGVpZ2h0LHRlPy5mb3JFYWNoKHplPT57emUuY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsIm1vdmUtZG93biIsImRyYWdnaW5nIiksemUuc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpLHplLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIil9KSx0aGlzLmRyYWdnZWRJbmRleD0tMSx0aGlzLmRyYWdPdmVySW5kZXg9LTEsdGhpcy50YXJnZXRJbmRleD0tMSx0aGlzLmRyYWdTdGFydFk9MCx0aGlzLmRyYWdDdXJyZW50WT0wLHRoaXMub3JpZ2luYWxJdGVtUmVjdHM9W10sdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT57bGV0IHplPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpO3plPy5mb3JFYWNoKEZlPT57RmUuc3R5bGUudHJhbnNpdGlvbj0ibm9uZSJ9KSx0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt6ZT8uZm9yRWFjaChGZT0+e0ZlLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIil9KSxoZT8uY2xhc3NMaXN0LnJlbW92ZSgiZHJvcHBpbmciLCJpcy1kcmFnZ2luZyIpfSl9KX1oYW5kbGVEcmFnRW5kKCl7dGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKCl9aGFuZGxlRHJhZ092ZXIoaGUsdGUpeyF0aGlzLnNvcnRhYmxlfHx0aGlzLmRpc2FibGVkfHwoaGUucHJldmVudERlZmF1bHQoKSxoZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIpfWhhbmRsZURyYWdMZWF2ZSgpe31oYW5kbGVEcm9wKGhlLHRlKXshdGhpcy5zb3J0YWJsZXx8dGhpcy5kaXNhYmxlZHx8aGUucHJldmVudERlZmF1bHQoKX1lbWl0Q2hhbmdlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7ZGV0YWlsOnt2YWx1ZTp0aGlzLnZhbHVlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoaGUpe3RoaXMudmFsdWU9aGV8fFtdfWFzeW5jIHZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucmVxdWlyZWQmJighdGhpcy52YWx1ZXx8dGhpcy52YWx1ZS5sZW5ndGg9PT0wKT8odGhpcy52YWxpZGF0aW9uVGV4dD0iQXQgbGVhc3Qgb25lIGl0ZW0gaXMgcmVxdWlyZWQiLCExKTp0aGlzLm1pbkl0ZW1zJiZ0aGlzLnZhbHVlLmxlbmd0aDx0aGlzLm1pbkl0ZW1zPyh0aGlzLnZhbGlkYXRpb25UZXh0PWBBdCBsZWFzdCAke3RoaXMubWluSXRlbXN9IGl0ZW1zIHJlcXVpcmVkYCwhMSk6KHRoaXMudmFsaWRhdGlvblRleHQ9IiIsITApfXN0YXRpY3tOdChpLGEpfX07cmV0dXJuIF9lPWl9KSgpfSk7dmFyIFhtdD1iKCgpPT57Wm10KCl9KTt2YXIgS210PWIoKCk9PntYcSgpfSk7dmFyIFFtdD1iKCgpPT57S3EoKX0pO3ZhciBKbXQ9YigoKT0+e3FxKCl9KTt2YXIgZWd0PWIoKCk9PntGeCgpfSk7dmFyIHRndCxhZ3Q9YigoKT0+e3VlKCk7eDEoKTtNVigpO2cyKCk7dGd0PSgpPT53YAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke1FgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIFJpY2ggVGV4dCBFZGl0b3IifSAuc3VidGl0bGU9JHsiQSBmdWxsLWZlYXR1cmVkIHJpY2ggdGV4dCBlZGl0b3Igd2l0aCBmb3JtYXR0aW5nIHRvb2xiYXIifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBcnRpY2xlIENvbnRlbnQifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDE+V2VsY29tZSB0byB0aGUgUmljaCBUZXh0IEVkaXRvciE8L2gxPjxwPlRoaXMgaXMgYSBmZWF0dXJlLXJpY2ggZWRpdG9yIGJ1aWx0IHdpdGggVGlwVGFwLiBZb3UgY2FuOjwvcD48dWw+PGxpPjxzdHJvbmc+Rm9ybWF0IHRleHQ8L3N0cm9uZz4gd2l0aCA8ZW0+dmFyaW91czwvZW0+IDx1PnN0eWxlczwvdT48L2xpPjxsaT5DcmVhdGUgZGlmZmVyZW50IGhlYWRpbmcgbGV2ZWxzPC9saT48bGk+QWRkIDxhIGhyZWY9Imh0dHBzOi8vZXhhbXBsZS5jb20iPmxpbmtzPC9hPiB0byBleHRlcm5hbCByZXNvdXJjZXM8L2xpPjxsaT5Xcml0ZSA8Y29kZT5pbmxpbmUgY29kZTwvY29kZT4gb3IgY29kZSBibG9ja3M8L2xpPjwvdWw+PGJsb2NrcXVvdGU+PHA+VXNlIHRoZSB0b29sYmFyIGFib3ZlIHRvIGV4cGxvcmUgYWxsIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXZhaWxhYmxlITwvcD48L2Jsb2NrcXVvdGU+PHA+U3RhcnQgdHlwaW5nIHRvIHNlZSB0aGUgbWFnaWMgaGFwcGVuLi4uPC9wPid9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXNlIHRoZSB0b29sYmFyIHRvIGZvcm1hdCB5b3VyIGNvbnRlbnQgd2l0aCBoZWFkaW5ncywgbGlzdHMsIGxpbmtzLCBhbmQgbW9yZSJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0keyEwfQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBXaXRoIFBsYWNlaG9sZGVyIn0gLnN1YnRpdGxlPSR7IkVtcHR5IGVkaXRvciB3aXRoIHBsYWNlaG9sZGVyIHRleHQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJCbG9nIFBvc3QifSAKICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTdGFydCB3cml0aW5nIHlvdXIgYmxvZyBwb3N0IGhlcmUuLi4ifQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIENvZGUgRXhhbXBsZXMifSAuc3VidGl0bGU9JHsiRWRpdG9yIHByZS1maWxsZWQgd2l0aCBjb2RlIGV4YW1wbGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVGVjaG5pY2FsIERvY3VtZW50YXRpb24ifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDI+SW5zdGFsbGF0aW9uIEd1aWRlPC9oMj48cD5UbyBpbnN0YWxsIHRoZSBwYWNrYWdlLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOjwvcD48cHJlPjxjb2RlPm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT48cD5UaGVuIGltcG9ydCB0aGUgY29tcG9uZW50IGluIHlvdXIgVHlwZVNjcmlwdCBmaWxlOjwvcD48cHJlPjxjb2RlPmltcG9ydCB7IERlZXNJbnB1dFJpY2h0ZXh0IH0gZnJvbSAiQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nIjs8L2NvZGU+PC9wcmU+PHA+WW91IGNhbiBub3cgdXNlIHRoZSA8Y29kZT4mbHQ7ZGVlcy1pbnB1dC1yaWNodGV4dCZndDs8L2NvZGU+IGVsZW1lbnQgaW4geW91ciB0ZW1wbGF0ZXMuPC9wPid9CiAgICAgICAgICAubWluSGVpZ2h0PSR7MjUwfQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRGlzYWJsZWQgU3RhdGUifSAuc3VidGl0bGU9JHsiUmVhZC1vbmx5IHJpY2ggdGV4dCBjb250ZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUHVibGlzaGVkIEFydGljbGUgKFJlYWQgT25seSkifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDI+VGhlIEZ1dHVyZSBvZiBXZWIgQ29tcG9uZW50czwvaDI+PHA+V2ViIENvbXBvbmVudHMgaGF2ZSByZXZvbHV0aW9uaXplZCBob3cgd2UgYnVpbGQgbW9kZXJuIHdlYiBhcHBsaWNhdGlvbnMuLi48L3A+PGJsb2NrcXVvdGU+PHA+IlRoZSBmdXR1cmUgb2Ygd2ViIGRldmVsb3BtZW50IGxpZXMgaW4gcmV1c2FibGUsIGVuY2Fwc3VsYXRlZCBjb21wb25lbnRzLiI8L3A+PC9ibG9ja3F1b3RlPid9CiAgICAgICAgICAuZGlzYWJsZWQ9JHshMH0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7ITB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEludGVyYWN0aXZlIERlbW8ifSAuc3VidGl0bGU9JHsiVHlwZSBpbiB0aGUgZWRpdG9yIGJlbG93IGFuZCBzZWUgdGhlIEhUTUwgb3V0cHV0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtZWRpdG9yIgogICAgICAgICAgLmxhYmVsPSR7IlRyeSBpdCB5b3Vyc2VsZiJ9IAogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlR5cGUgc29tZXRoaW5nIGhlcmUuLi4ifQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHshMH0KICAgICAgICAgIEBjaGFuZ2U9JHt0PT57bGV0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3Iik7ZSYmKGUudGV4dENvbnRlbnQ9dC5kZXRhaWwudmFsdWUpfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0ib3V0cHV0LXByZXZpZXciPgogICAgICAgICAgPGVtPkhUTUwgb3V0cHV0IHdpbGwgYXBwZWFyIGhlcmUuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmB9KTt2YXIgaWd0LHJndD1iKCgpPT57dWUoKTtfMSgpO2lndD1bLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmb250LWZhbWlseTogSW50ZXIsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtoLmJkVGhlbWUoIjIwMHB4IiwiMjAwcHgiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXIuZm9jdXNlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b246ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAudG9vbGJhci1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tbWluLWhlaWdodCwgMjAwcHgpOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG1hcmdpbjogMWVtIDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGE6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDQxLjIlKSIsImhzbCgyMTcuMiA5MS4yJSA2OS44JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAud29yZC1jb3VudCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC5zaG93IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAubGluay1pbnB1dCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250YWluZXIgewogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9vbGJhci1idXR0b24sCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5lZGl0b3ItY29udGVudCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGBdfSk7dmFyIHNndCxuZ3Q9YigoKT0+e3VlKCk7c2d0PXQ9PndgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgICAke3QubGFiZWw/d2A8bGFiZWwgY2xhc3M9ImxhYmVsIj4ke3QubGFiZWx9PC9sYWJlbD5gOiIifQogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRhaW5lciAke3QuZWRpdG9yPy5pc0ZvY3VzZWQ/ImZvY3VzZWQiOiIifSIgc3R5bGU9Ii0tbWluLWhlaWdodDogJHt0Lm1pbkhlaWdodH1weCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci10b29sYmFyIj4KICAgICAgICAgICAgICAke3QucmVuZGVyVG9vbGJhcigpfQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQgJHt0LnNob3dMaW5rSW5wdXQ/InNob3ciOiIifSI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iRW50ZXIgVVJMLi4uIiBAa2V5ZG93bj0ke3QuaGFuZGxlTGlua0lucHV0S2V5ZG93bn0gLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQtYnV0dG9ucyI+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InByaW1hcnkiIEBjbGljaz0ke3Quc2F2ZUxpbmt9PlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHt0LnJlbW92ZUxpbmt9PlJlbW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ke3QuaGlkZUxpbmtJbnB1dH0+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1jb250ZW50Ij48L2Rpdj4KICAgICAgICAgICAgJHt0LnNob3dXb3JkQ291bnQ/d2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndvcmQtY291bnQiPiR7dC53b3JkQ291bnR9IHdvcmQke3Qud29yZENvdW50IT09MT8icyI6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dC5kZXNjcmlwdGlvbj93YDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3QuZGVzY3JpcHRpb259PC9kaXY+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYH0pO3ZhciBsNCxZYSxvZ3QsTVY9YigoKT0+e18xKCk7YWd0KCk7cmd0KCk7bmd0KCk7RXQoKTt1ZSgpO2JvKCk7bDQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxZYT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sb2d0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC1yaWNodGV4dCIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdO3ZhciBOPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6Qm9vbGVhbn0pXSx5PVtJKHt0eXBlOk51bWJlcn0pXSx4PVtLKCldLEY9W0soKV0sbDQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InZhbHVlImluIEEsZ2V0OkE9PkEudmFsdWUsc2V0OihBLHEpPT57QS52YWx1ZT1xfX0sbWV0YWRhdGE6TH0sbixvKSxsNCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4icGxhY2Vob2xkZXIiaW4gQSxnZXQ6QT0+QS5wbGFjZWhvbGRlcixzZXQ6KEEscSk9PntBLnBsYWNlaG9sZGVyPXF9fSxtZXRhZGF0YTpMfSxjLHApLGw0KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd1dvcmRDb3VudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InNob3dXb3JkQ291bnQiaW4gQSxnZXQ6QT0+QS5zaG93V29yZENvdW50LHNldDooQSxxKT0+e0Euc2hvd1dvcmRDb3VudD1xfX0sbWV0YWRhdGE6TH0sZixnKSxsNCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pbkhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+Im1pbkhlaWdodCJpbiBBLGdldDpBPT5BLm1pbkhlaWdodCxzZXQ6KEEscSk9PntBLm1pbkhlaWdodD1xfX0sbWV0YWRhdGE6TH0sdixtKSxsNCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dMaW5rSW5wdXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJzaG93TGlua0lucHV0ImluIEEsZ2V0OkE9PkEuc2hvd0xpbmtJbnB1dCxzZXQ6KEEscSk9PntBLnNob3dMaW5rSW5wdXQ9cX19LG1ldGFkYXRhOkx9LE0sUyksbDQodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3b3JkQ291bnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJ3b3JkQ291bnQiaW4gQSxnZXQ6QT0+QS53b3JkQ291bnQsc2V0OihBLHEpPT57QS53b3JkQ291bnQ9cX19LG1ldGFkYXRhOkx9LF8sayksbDQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6TH0sbnVsbCxhKSxOPWk9ZS52YWx1ZSxMJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkx9KX1zdGF0aWMgZGVtbz10Z3Q7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPVlhKHRoaXMsbiwiIik7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKEwpe3RoaXMuI2U9TH0jdD0oWWEodGhpcyxvKSxZYSh0aGlzLGMsIiIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgcGxhY2Vob2xkZXIoTCl7dGhpcy4jdD1MfSNhPShZYSh0aGlzLHApLFlhKHRoaXMsZiwhMCkpO2dldCBzaG93V29yZENvdW50KCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNob3dXb3JkQ291bnQoTCl7dGhpcy4jYT1MfSNpPShZYSh0aGlzLGcpLFlhKHRoaXMsdiwyMDApKTtnZXQgbWluSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI2l9c2V0IG1pbkhlaWdodChMKXt0aGlzLiNpPUx9I3I9KFlhKHRoaXMsbSksWWEodGhpcyxNLCExKSk7Z2V0IHNob3dMaW5rSW5wdXQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2hvd0xpbmtJbnB1dChMKXt0aGlzLiNyPUx9I3M9KFlhKHRoaXMsUyksWWEodGhpcyxfLDApKTtnZXQgd29yZENvdW50KCl7cmV0dXJuIHRoaXMuI3N9c2V0IHdvcmRDb3VudChMKXt0aGlzLiNzPUx9ZWRpdG9yRWxlbWVudD1ZYSh0aGlzLGspO2xpbmtJbnB1dEVsZW1lbnQ7dGlwdGFwQnVuZGxlPW51bGw7ZWRpdG9yO3N0YXRpYyBzdHlsZXM9aWd0O3JlbmRlcigpe3JldHVybiBzZ3QodGhpcyl9cmVuZGVyVG9vbGJhcigpe2xldCBMPXRoaXMuZ2V0VG9vbGJhckJ1dHRvbnMoKTtyZXR1cm4gd2AKICAgICAgJHtMLm1hcChBPT5BLmlzRGl2aWRlcj93YDxkaXYgY2xhc3M9InRvb2xiYXItZGl2aWRlciI+PC9kaXY+YDp3YAogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHtBLmlzQWN0aXZlPy4oKT8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgIEBjbGljaz0ke0EuYWN0aW9ufQogICAgICAgICAgICB0aXRsZT0ke0EudGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR8fCF0aGlzLmVkaXRvcn0KICAgICAgICAgID4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke0EuaWNvbn0+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICBgKX0KICAgIGB9Z2V0VG9vbGJhckJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5lZGl0b3I/W3tuYW1lOiJib2xkIixpY29uOiJsdWNpZGU6Ym9sZCIsdGl0bGU6IkJvbGQgKEN0cmwrQikiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJvbGQoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImJvbGQiKX0se25hbWU6Iml0YWxpYyIsaWNvbjoibHVjaWRlOml0YWxpYyIsdGl0bGU6Ikl0YWxpYyAoQ3RybCtJKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJpdGFsaWMiKX0se25hbWU6InVuZGVybGluZSIsaWNvbjoibHVjaWRlOnVuZGVybGluZSIsdGl0bGU6IlVuZGVybGluZSAoQ3RybCtVKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKX0se25hbWU6InN0cmlrZSIsaWNvbjoibHVjaWRlOnN0cmlrZXRocm91Z2giLHRpdGxlOiJTdHJpa2V0aHJvdWdoIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdHJpa2UoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoInN0cmlrZSIpfSx7bmFtZToiZGl2aWRlcjEiLHRpdGxlOiIiLGlzRGl2aWRlcjohMH0se25hbWU6ImgxIixpY29uOiJsdWNpZGU6aGVhZGluZzEiLHRpdGxlOiJIZWFkaW5nIDEiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoe2xldmVsOjF9KS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImhlYWRpbmciLHtsZXZlbDoxfSl9LHtuYW1lOiJoMiIsaWNvbjoibHVjaWRlOmhlYWRpbmcyIix0aXRsZToiSGVhZGluZyAyIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkaW5nKHtsZXZlbDoyfSkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJoZWFkaW5nIix7bGV2ZWw6Mn0pfSx7bmFtZToiaDMiLGljb246Imx1Y2lkZTpoZWFkaW5nMyIsdGl0bGU6IkhlYWRpbmcgMyIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7bGV2ZWw6M30pLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIse2xldmVsOjN9KX0se25hbWU6ImRpdmlkZXIyIix0aXRsZToiIixpc0RpdmlkZXI6ITB9LHtuYW1lOiJidWxsZXRMaXN0IixpY29uOiJsdWNpZGU6bGlzdCIsdGl0bGU6IkJ1bGxldCBMaXN0IixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJidWxsZXRMaXN0Iil9LHtuYW1lOiJvcmRlcmVkTGlzdCIsaWNvbjoibHVjaWRlOmxpc3RPcmRlcmVkIix0aXRsZToiTnVtYmVyZWQgTGlzdCIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlT3JkZXJlZExpc3QoKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0Iil9LHtuYW1lOiJibG9ja3F1b3RlIixpY29uOiJsdWNpZGU6cXVvdGUiLHRpdGxlOiJRdW90ZSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQmxvY2txdW90ZSgpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiYmxvY2txdW90ZSIpfSx7bmFtZToiY29kZSIsaWNvbjoibHVjaWRlOmNvZGUiLHRpdGxlOiJDb2RlIixhY3Rpb246KCk9PnRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksaXNBY3RpdmU6KCk9PnRoaXMuZWRpdG9yLmlzQWN0aXZlKCJjb2RlIil9LHtuYW1lOiJjb2RlQmxvY2siLGljb246Imx1Y2lkZTpmaWxlQ29kZSIsdGl0bGU6IkNvZGUgQmxvY2siLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGVCbG9jaygpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIil9LHtuYW1lOiJkaXZpZGVyMyIsdGl0bGU6IiIsaXNEaXZpZGVyOiEwfSx7bmFtZToibGluayIsaWNvbjoibHVjaWRlOmxpbmsiLHRpdGxlOiJBZGQgTGluayIsYWN0aW9uOigpPT50aGlzLnRvZ2dsZUxpbmsoKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKX0se25hbWU6ImFsaWduTGVmdCIsaWNvbjoibHVjaWRlOmFsaWduTGVmdCIsdGl0bGU6IkFsaWduIExlZnQiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSh7dGV4dEFsaWduOiJsZWZ0In0pfSx7bmFtZToiYWxpZ25DZW50ZXIiLGljb246Imx1Y2lkZTphbGlnbkNlbnRlciIsdGl0bGU6IkFsaWduIENlbnRlciIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKCJjZW50ZXIiKS5ydW4oKSxpc0FjdGl2ZTooKT0+dGhpcy5lZGl0b3IuaXNBY3RpdmUoe3RleHRBbGlnbjoiY2VudGVyIn0pfSx7bmFtZToiYWxpZ25SaWdodCIsaWNvbjoibHVjaWRlOmFsaWduUmlnaHQiLHRpdGxlOiJBbGlnbiBSaWdodCIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKCJyaWdodCIpLnJ1bigpLGlzQWN0aXZlOigpPT50aGlzLmVkaXRvci5pc0FjdGl2ZSh7dGV4dEFsaWduOiJyaWdodCJ9KX0se25hbWU6ImRpdmlkZXI0Iix0aXRsZToiIixpc0RpdmlkZXI6ITB9LHtuYW1lOiJ1bmRvIixpY29uOiJsdWNpZGU6dW5kbyIsdGl0bGU6IlVuZG8gKEN0cmwrWikiLGFjdGlvbjooKT0+dGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKX0se25hbWU6InJlZG8iLGljb246Imx1Y2lkZTpyZWRvIix0aXRsZToiUmVkbyAoQ3RybCtZKSIsYWN0aW9uOigpPT50aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkucmVkbygpLnJ1bigpfV06W119YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLnRpcHRhcEJ1bmRsZT1hd2FpdCAkMi5nZXRJbnN0YW5jZSgpLmxvYWRUaXB0YXAoKSx0aGlzLmVkaXRvckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItY29udGVudCIpLHRoaXMubGlua0lucHV0RWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxpbmstaW5wdXQgaW5wdXQiKSx0aGlzLmluaXRpYWxpemVFZGl0b3IoKX1pbml0aWFsaXplRWRpdG9yKCl7aWYodGhpcy5kaXNhYmxlZHx8IXRoaXMudGlwdGFwQnVuZGxlKXJldHVybjtsZXR7RWRpdG9yOkwsU3RhcnRlcktpdDpBLFVuZGVybGluZTpxLFRleHRBbGlnbjpDLExpbms6eixUeXBvZ3JhcGh5OkV9PXRoaXMudGlwdGFwQnVuZGxlO3RoaXMuZWRpdG9yPW5ldyBMKHtlbGVtZW50OnRoaXMuZWRpdG9yRWxlbWVudCxleHRlbnNpb25zOltBLmNvbmZpZ3VyZSh7aGVhZGluZzp7bGV2ZWxzOlsxLDIsM119fSkscS5jb25maWd1cmUoe30pLEMuY29uZmlndXJlKHt0eXBlczpbImhlYWRpbmciLCJwYXJhZ3JhcGgiXX0pLHouY29uZmlndXJlKHtvcGVuT25DbGljazohMSxIVE1MQXR0cmlidXRlczp7Y2xhc3M6ImVkaXRvci1saW5rIn19KSxFLmNvbmZpZ3VyZSh7fSldLGNvbnRlbnQ6dGhpcy52YWx1ZXx8KHRoaXMucGxhY2Vob2xkZXI/YDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YDoiIiksb25VcGRhdGU6KHtlZGl0b3I6VH0pPT57dGhpcy52YWx1ZT1ULmdldEhUTUwoKSx0aGlzLnVwZGF0ZVdvcmRDb3VudCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0Iix7ZGV0YWlsOnt2YWx1ZTp0aGlzLnZhbHVlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX0sb25TZWxlY3Rpb25VcGRhdGU6KCk9Pnt0aGlzLnJlcXVlc3RVcGRhdGUoKX0sb25Gb2N1czooKT0+e3RoaXMucmVxdWVzdFVwZGF0ZSgpfSxvbkJsdXI6KCk9Pnt0aGlzLnJlcXVlc3RVcGRhdGUoKX19KSx0aGlzLnVwZGF0ZVdvcmRDb3VudCgpfXVwZGF0ZVdvcmRDb3VudCgpe2lmKCF0aGlzLmVkaXRvcilyZXR1cm47bGV0IEw9dGhpcy5lZGl0b3IuZ2V0VGV4dCgpO3RoaXMud29yZENvdW50PUwudHJpbSgpP0wudHJpbSgpLnNwbGl0KC9ccysvKS5sZW5ndGg6MH10b2dnbGVMaW5rKCl7aWYodGhpcy5lZGl0b3IpaWYodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSl7bGV0IEw9dGhpcy5lZGl0b3IuZ2V0QXR0cmlidXRlcygibGluayIpLmhyZWY7dGhpcy5zaG93TGlua0lucHV0PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubGlua0lucHV0RWxlbWVudCYmKHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZT1MfHwiIix0aGlzLmxpbmtJbnB1dEVsZW1lbnQuZm9jdXMoKSx0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCkpfSl9ZWxzZSB0aGlzLnNob3dMaW5rSW5wdXQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5saW5rSW5wdXRFbGVtZW50JiYodGhpcy5saW5rSW5wdXRFbGVtZW50LnZhbHVlPSIiLHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpKX0pfXNhdmVMaW5rKCl7aWYoIXRoaXMuZWRpdG9yfHwhdGhpcy5saW5rSW5wdXRFbGVtZW50KXJldHVybjtsZXQgTD10aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7TCYmdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldExpbmsoe2hyZWY6TH0pLnJ1bigpLHRoaXMuaGlkZUxpbmtJbnB1dCgpfXJlbW92ZUxpbmsoKXt0aGlzLmVkaXRvciYmKHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS51bnNldExpbmsoKS5ydW4oKSx0aGlzLmhpZGVMaW5rSW5wdXQoKSl9aGlkZUxpbmtJbnB1dCgpe3RoaXMuc2hvd0xpbmtJbnB1dD0hMSx0aGlzLmVkaXRvcj8uY29tbWFuZHMuZm9jdXMoKX1oYW5kbGVMaW5rSW5wdXRLZXlkb3duKEwpe0wua2V5PT09IkVudGVyIj8oTC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2F2ZUxpbmsoKSk6TC5rZXk9PT0iRXNjYXBlIiYmKEwucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZGVMaW5rSW5wdXQoKSl9c2V0VmFsdWUoTCl7dGhpcy52YWx1ZT1MLHRoaXMuZWRpdG9yJiZMIT09dGhpcy5lZGl0b3IuZ2V0SFRNTCgpJiZ0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KEwpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9Y2xlYXIoKXt0aGlzLnNldFZhbHVlKCIiKX1mb2N1cygpe3RoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IuZGVzdHJveSgpfXN0YXRpY3tZYShpLGEpfX07cmV0dXJuIE49aX0pKCl9KTt2YXIgbGd0PWIoKCk9PntNVigpfSk7dmFyIGNndD1iKCgpPT57fSk7dmFyIGRndD1iKCgpPT57Y2d0KCl9KTt2YXIgcGd0LGhndCx1Z3Q9YigoKT0+e3VlKCk7eDEoKTtnMigpO2hndD0oKT0+dyhwZ3R8fChwZ3Q9ejQoW2AKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgYCxgCiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAudmFsdWU9YCxgCiAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgLnBsYWNlaG9sZGVyPWAsYAogICAgICAgICAgLnN1Z2dlc3Rpb25zPWAsYAogICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgLmRlc2NyaXB0aW9uPWAsYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3MKICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgIC5tYXhUYWdzPWAsYAogICAgICAgICAgICAudmFsdWU9YCxgCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj1gLGAKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgICAgLm1heFRhZ3M9YCxgCiAgICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAubGFiZWw9YCxgCiAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAucmVxdWlyZWQ9YCxgCiAgICAgICAgICAuZGVzY3JpcHRpb249YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9YCwiIC5zdWJ0aXRsZT0iLGA+CiAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgLnZhbHVlPWAsYAogICAgICAgICAgLmRpc2FibGVkPWAsYAogICAgICAgICAgLmRlc2NyaXB0aW9uPWAsYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPWAsIiAuc3VidGl0bGU9IixgPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgICAgLnBsYWNlaG9sZGVyPWAsYAogICAgICAgICAgICAucmVxdWlyZWQ9YCxgCiAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFncwogICAgICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgICAgLnJlcXVpcmVkPWAsYAogICAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPWAsYAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgICAgICAua2V5PWAsYAogICAgICAgICAgICAgIC5tYXhUYWdzPWAsYAogICAgICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPWAsYAogICAgICAgICAgICAuaW5wdXRUeXBlPWAsYAogICAgICAgICAgICAucGxhY2Vob2xkZXI9YCxgCiAgICAgICAgICAgIC5rZXk9YCxgCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PWAsYD48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT1gLCIgLnN1YnRpdGxlPSIsYD4KICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtdGFncyIKICAgICAgICAgIC5sYWJlbD1gLGAKICAgICAgICAgIC5wbGFjZWhvbGRlcj1gLGAKICAgICAgICAgIC5zdWdnZXN0aW9ucz1gLGAKICAgICAgICAgIEBjaGFuZ2U9YCxgCiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRhZy1wcmV2aWV3IiBpZD0idGFncy1wcmV2aWV3Ij4KICAgICAgICAgIDxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJ0YWdzLWpzb24iPgogICAgICAgICAgPGVtPkpTT04gb3V0cHV0IHdpbGwgYXBwZWFyIGhlcmUuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAvLyBVcGRhdGUgSlNPTiBwcmV2aWV3CiAgICAgICAgICBjb25zdCB0YWdzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaW50ZXJhY3RpdmUtdGFncycpOwogICAgICAgICAgdGFnc0lucHV0Py5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICAgICAgICBjb25zdCBqc29uUHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0YWdzLWpzb24nKTsKICAgICAgICAgICAgaWYgKGpzb25QcmV2aWV3KSB7CiAgICAgICAgICAgICAganNvblByZXZpZXcudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShlLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIDxcL3NjcmlwdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgXSkpLFFgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmOWZhZmI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLnRhZy1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFmMjkzNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRhZy1wcmV2aWV3LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgcGFkZGluZzogNHB4IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZTBlN2ZmOwogICAgICAgICAgY29sb3I6ICM0MzM4Y2E7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMzMTJlODE7CiAgICAgICAgICAgIGNvbG9yOiAjYzdkMmZlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYCwiMS4gQmFzaWMgVGFncyBJbnB1dCIsIlNpbXBsZSB0YWcgaW5wdXQgd2l0aCBjb21tb24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIiwiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIiwiQWRkIGEgbGFuZ3VhZ2UuLi4iLFsiSmF2YVNjcmlwdCIsIlR5cGVTY3JpcHQiLCJQeXRob24iLCJHbyJdLCJQcmVzcyBFbnRlciBvciBjb21tYSB0byBhZGQgdGFncyIsIjIuIFRhZ3Mgd2l0aCBTdWdnZXN0aW9ucyIsIkF1dG8tY29tcGxldGUgc3VnZ2VzdGlvbnMgZm9yIGZhc3RlciBpbnB1dCIsIlRlY2ggU3RhY2siLCJUeXBlIHRvIHNlZSBzdWdnZXN0aW9ucy4uLiIsWyJSZWFjdCIsIlZ1ZSIsIkFuZ3VsYXIiLCJTdmVsdGUiLCJMaXQiLCJOZXh0LmpzIiwiTnV4dCIsIlN2ZWx0ZUtpdCIsIk5vZGUuanMiLCJEZW5vIiwiQnVuIiwiRXhwcmVzcyIsIkZhc3RpZnkiLCJOZXN0LmpzIiwiS29hIiwiTW9uZ29EQiIsIlBvc3RncmVTUUwiLCJSZWRpcyIsIk15U1FMIiwiU1FMaXRlIiwiQ2Fzc2FuZHJhIiwiRG9ja2VyIiwiS3ViZXJuZXRlcyIsIkFXUyIsIkF6dXJlIiwiR0NQIiwiVmVyY2VsIiwiTmV0bGlmeSJdLFsiUmVhY3QiLCJOb2RlLmpzIiwiUG9zdGdyZVNRTCIsIkRvY2tlciJdLCJTdGFydCB0eXBpbmcgdG8gc2VlIHN1Z2dlc3Rpb25zIGZyb20gcG9wdWxhciB0ZWNobm9sb2dpZXMiLCIzLiBMaW1pdGVkIFRhZ3MiLCJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsIlRvcCAzIFNraWxscyIsIkFkZCB1cCB0byAzIHNraWxscy4uLiIsMyxbIkRlc2lnbiIsIkRldmVsb3BtZW50Il0sIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCJDYXRlZ29yaWVzIChNYXggNSkiLCJTZWxlY3QgY2F0ZWdvcmllcy4uLiIsNSxbIkJsb2ciLCJUdXRvcmlhbCIsIk5ld3MiLCJSZXZpZXciLCJHdWlkZSIsIkNhc2UgU3R1ZHkiLCJJbnRlcnZpZXciXSxbIlR1dG9yaWFsIiwiR3VpZGUiXSwiQ2hvb3NlIHVwIHRvIDUgY2F0ZWdvcmllcyIsIjQuIFJlcXVpcmVkICYgVmFsaWRhdGlvbiIsIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsIlByb2plY3QgVGFncyIsIkFkZCBhdCBsZWFzdCBvbmUgdGFnLi4uIiwhMCwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwiNS4gRGlzYWJsZWQgU3RhdGUiLCJSZWFkLW9ubHkgdGFncyBkaXNwbGF5IiwiU3lzdGVtIFRhZ3MiLFsiU3lzdGVtIiwiUHJvdGVjdGVkIiwiUmVhZC1Pbmx5IiwiQXJjaGl2ZSJdLCEwLCJUaGVzZSB0YWdzIGNhbm5vdCBiZSBtb2RpZmllZCIsIjYuIEZvcm0gSW50ZWdyYXRpb24iLCJUYWdzIGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0IiwiUHJvamVjdCBOYW1lIiwiTXkgQXdlc29tZSBQcm9qZWN0IiwhMCwibmFtZSIsIlRlY2hub2xvZ2llcyBVc2VkIiwiQWRkIHRlY2hub2xvZ2llcy4uLiIsITAsInRlY2hub2xvZ2llcyIsWyJUeXBlU2NyaXB0IiwiSmF2YVNjcmlwdCIsIlB5dGhvbiIsIkdvIiwiUnVzdCIsIlJlYWN0IiwiVnVlIiwiQW5ndWxhciIsIlN2ZWx0ZSIsIk5vZGUuanMiLCJEZW5vIiwiRXhwcmVzcyIsIkZhc3RBUEkiXSwiUHJvamVjdCBUYWdzIiwiQWRkIGRlc2NyaXB0aXZlIHRhZ3MuLi4iLCJ0YWdzIiwxMCxbImZyb250ZW5kIiwiYmFja2VuZCIsImZ1bGxzdGFjayIsIm1vYmlsZSIsImRlc2t0b3AiLCJ3ZWIiLCJhcGkiLCJkYXRhYmFzZSIsImRldm9wcyIsInVpL3V4Iiwib3BlbnNvdXJjZSIsInNhYXMiLCJlbnRlcnByaXNlIiwic3RhcnR1cCJdLCJEZXNjcmlwdGlvbiIsInRleHRhcmVhIiwiRGVzY3JpYmUgeW91ciBwcm9qZWN0Li4uIiwiZGVzY3JpcHRpb24iLCJDcmVhdGUgUHJvamVjdCIsIjcuIEludGVyYWN0aXZlIERlbW8iLCJBZGQgdGFncyBhbmQgc2VlIHRoZW0gY29sbGVjdGVkIGluIHJlYWwtdGltZSIsIllvdXIgSW50ZXJlc3RzIiwiVHlwZSB5b3VyIGludGVyZXN0cy4uLiIsWyJNdXNpYyIsIk1vdmllcyIsIkJvb2tzIiwiVHJhdmVsIiwiUGhvdG9ncmFwaHkiLCJDb29raW5nIiwiR2FtaW5nIiwiU3BvcnRzIiwiQXJ0IiwiVGVjaG5vbG9neSIsIkZhc2hpb24iLCJGaXRuZXNzIiwiTmF0dXJlIiwiU2NpZW5jZSIsIkhpc3RvcnkiXSx0PT57bGV0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3RhZ3MtcHJldmlldyIpLGE9dC5kZXRhaWwudmFsdWU7ZSYmKGEubGVuZ3RoPT09MD9lLmlubmVySFRNTD0nPGVtIHN0eWxlPSJjb2xvcjogIzk5OTsiPk5vIHRhZ3MgYWRkZWQgeWV0Li4uPC9lbT4nOmUuaW5uZXJIVE1MPWEubWFwKGk9PmA8c3BhbiBjbGFzcz0idGFnLXByZXZpZXctaXRlbSI+JHtpfTwvc3Bhbj5gKS5qb2luKCIiKSl9KX0pO3ZhciBWcyxBMixmZ3QsbWd0PWIoKCk9Pnt1ZSgpO18xKCk7RXQoKTt1Z3QoKTtWZSgpO1ZzPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sQTI9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGZndD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtdGFncyIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdO3ZhciBFPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgVD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOkFycmF5fSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6TnVtYmVyfSldLHk9W0koe3R5cGU6QXJyYXl9KV0seD1bSygpXSxGPVtLKCldLE49W0soKV0scT1bSSh7dHlwZTpTdHJpbmd9KV0sVnModGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InZhbHVlImluICQsZ2V0OiQ9PiQudmFsdWUsc2V0OigkLFYpPT57JC52YWx1ZT1WfX0sbWV0YWRhdGE6VH0sbixvKSxWcyh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4icGxhY2Vob2xkZXIiaW4gJCxnZXQ6JD0+JC5wbGFjZWhvbGRlcixzZXQ6KCQsVik9PnskLnBsYWNlaG9sZGVyPVZ9fSxtZXRhZGF0YTpUfSxjLHApLFZzKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4VGFncyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+Im1heFRhZ3MiaW4gJCxnZXQ6JD0+JC5tYXhUYWdzLHNldDooJCxWKT0+eyQubWF4VGFncz1WfX0sbWV0YWRhdGE6VH0sZixnKSxWcyh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN1Z2dlc3Rpb25zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4ic3VnZ2VzdGlvbnMiaW4gJCxnZXQ6JD0+JC5zdWdnZXN0aW9ucyxzZXQ6KCQsVik9PnskLnN1Z2dlc3Rpb25zPVZ9fSxtZXRhZGF0YTpUfSx2LG0pLFZzKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5wdXRWYWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+ImlucHV0VmFsdWUiaW4gJCxnZXQ6JD0+JC5pbnB1dFZhbHVlLHNldDooJCxWKT0+eyQuaW5wdXRWYWx1ZT1WfX0sbWV0YWRhdGE6VH0sTSxTKSxWcyh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTdWdnZXN0aW9ucyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6JD0+InNob3dTdWdnZXN0aW9ucyJpbiAkLGdldDokPT4kLnNob3dTdWdnZXN0aW9ucyxzZXQ6KCQsVik9PnskLnNob3dTdWdnZXN0aW9ucz1WfX0sbWV0YWRhdGE6VH0sXyxrKSxWcyh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczokPT4iaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiaW4gJCxnZXQ6JD0+JC5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCxzZXQ6KCQsVik9PnskLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PVZ9fSxtZXRhZGF0YTpUfSxMLEEpLFZzKHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmFsaWRhdGlvblRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOiQ9PiJ2YWxpZGF0aW9uVGV4dCJpbiAkLGdldDokPT4kLnZhbGlkYXRpb25UZXh0LHNldDooJCxWKT0+eyQudmFsaWRhdGlvblRleHQ9Vn19LG1ldGFkYXRhOlR9LEMseiksVnMobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6VH0sbnVsbCxhKSxFPWk9ZS52YWx1ZSxUJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlR9KX1zdGF0aWMgZGVtbz1oZ3Q7c3RhdGljIGRlbW9Hcm91cHM9WyJJbnB1dCJdOyNlPUEyKHRoaXMsbixbXSk7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHZhbHVlKFQpe3RoaXMuI2U9VH0jdD0oQTIodGhpcyxvKSxBMih0aGlzLGMsIkFkZCB0YWdzLi4uIikpO2dldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLiN0fXNldCBwbGFjZWhvbGRlcihUKXt0aGlzLiN0PVR9I2E9KEEyKHRoaXMscCksQTIodGhpcyxmLDApKTtnZXQgbWF4VGFncygpe3JldHVybiB0aGlzLiNhfXNldCBtYXhUYWdzKFQpe3RoaXMuI2E9VH0jaT0oQTIodGhpcyxnKSxBMih0aGlzLHYsW10pKTtnZXQgc3VnZ2VzdGlvbnMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgc3VnZ2VzdGlvbnMoVCl7dGhpcy4jaT1UfSNyPShBMih0aGlzLG0pLEEyKHRoaXMsTSwiIikpO2dldCBpbnB1dFZhbHVlKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGlucHV0VmFsdWUoVCl7dGhpcy4jcj1UfSNzPShBMih0aGlzLFMpLEEyKHRoaXMsXywhMSkpO2dldCBzaG93U3VnZ2VzdGlvbnMoKXtyZXR1cm4gdGhpcy4jc31zZXQgc2hvd1N1Z2dlc3Rpb25zKFQpe3RoaXMuI3M9VH0jbj0oQTIodGhpcyxrKSxBMih0aGlzLEwsLTEpKTtnZXQgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgoKXtyZXR1cm4gdGhpcy4jbn1zZXQgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgoVCl7dGhpcy4jbj1UfSNvPShBMih0aGlzLEEpLEEyKHRoaXMsQywiIikpO2dldCB2YWxpZGF0aW9uVGV4dCgpe3JldHVybiB0aGlzLiNvfXNldCB2YWxpZGF0aW9uVGV4dChUKXt0aGlzLiNvPVR9c3RhdGljIHN0eWxlcz1bQ2UsLi4uWGUuYmFzZVN0eWxlcyxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2guYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMikiLCJoc2woMjE1IDIwLjIlIDM1LjElIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMykiLCJoc2woMjE1IDIwLjIlIDM1LjElIC8gMC4zKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiB0YWdBcHBlYXIgMC4xNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB0YWdBcHBlYXIgewogICAgICAgIGZyb20gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnRhZy1yZW1vdmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA0Ni43JSkiLCJoc2woMjE3LjkgMTAuNiUgNTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wOCkiLCJoc2woMCAwJSAxMDAlIC8gMC4wOCkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CgogICAgICAudGFnLWlucHV0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAudGFnLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duICovCiAgICAgIC5zdWdnZXN0aW9ucy1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb24gewogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9uLmhpZ2hsaWdodGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIERlc2NyaXB0aW9uIHN0eWxlcyAqLwogICAgICAuZGVzY3JpcHRpb24gewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgVD10aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcigkPT4hdGhpcy52YWx1ZS5pbmNsdWRlcygkKSYmJC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICR7dGhpcy5sYWJlbD93YDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD5gOiIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0YWdzLWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQ/ImRpc2FibGVkIjoiIn0iCiAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ29udGFpbmVyQ2xpY2t9CiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5tYXAoJD0+d2AKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWciPgogICAgICAgICAgICAgICAgPHNwYW4+JHskfTwvc3Bhbj4KICAgICAgICAgICAgICAgICR7dGhpcy5kaXNhYmxlZD8iIjp3YAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctcmVtb3ZlIiBAY2xpY2s9JHtWPT50aGlzLnJlbW92ZVRhZyhWLCQpfT4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIAogICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkJiYoIXRoaXMubWF4VGFnc3x8dGhpcy52YWx1ZS5sZW5ndGg8dGhpcy5tYXhUYWdzKT93YAogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWctaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVLZXlEb3dufQogICAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5oYW5kbGVGb2N1c30KICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVCbHVyfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLnNob3dTdWdnZXN0aW9ucyYmVC5sZW5ndGg+MD93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1kcm9wZG93biI+CiAgICAgICAgICAgICAgJHtULm1hcCgoJCxWKT0+d2AKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InN1Z2dlc3Rpb24gJHtWPT09dGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleD8iaGlnaGxpZ2h0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke1I9PntSLnByZXZlbnREZWZhdWx0KCksdGhpcy5hZGRUYWcoJCl9fQogICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpPT50aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PVZ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7JH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dD93YAogICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbi1tZXNzYWdlIj4ke3RoaXMudmFsaWRhdGlvblRleHR9PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CiAgICBgfWhhbmRsZUNvbnRhaW5lckNsaWNrKFQpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldCAkPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhZy1pbnB1dCIpOyQmJlQudGFyZ2V0IT09JCYmJC5mb2N1cygpfWhhbmRsZUlucHV0KFQpe2xldCAkPVQudGFyZ2V0O2lmKHRoaXMuaW5wdXRWYWx1ZT0kLnZhbHVlLHRoaXMuaW5wdXRWYWx1ZS5pbmNsdWRlcygiLCIpfHx0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSl7bGV0IFY9dGhpcy5pbnB1dFZhbHVlLnJlcGxhY2UoL1ssO10vZywiIikudHJpbSgpO1YmJnRoaXMuYWRkVGFnKFYpfX1oYW5kbGVLZXlEb3duKFQpe2xldCAkPVQudGFyZ2V0O2lmKFQua2V5PT09IkVudGVyIilpZihULnByZXZlbnREZWZhdWx0KCksdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleD49MCYmdGhpcy5zaG93U3VnZ2VzdGlvbnMpe2xldCBWPXRoaXMuc3VnZ2VzdGlvbnMuZmlsdGVyKFI9PiF0aGlzLnZhbHVlLmluY2x1ZGVzKFIpJiZSLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtWW3RoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhdJiZ0aGlzLmFkZFRhZyhWW3RoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhdKX1lbHNlIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkmJnRoaXMuYWRkVGFnKHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpO2Vsc2UgaWYoVC5rZXk9PT0iQmFja3NwYWNlIiYmIXRoaXMuaW5wdXRWYWx1ZSYmdGhpcy52YWx1ZS5sZW5ndGg+MCl0aGlzLnJlbW92ZVRhZyhULHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGgtMV0pO2Vsc2UgaWYoVC5rZXk9PT0iQXJyb3dEb3duIiYmdGhpcy5zaG93U3VnZ2VzdGlvbnMpe1QucHJldmVudERlZmF1bHQoKTtsZXQgVj10aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcihSPT4hdGhpcy52YWx1ZS5pbmNsdWRlcyhSKSYmUi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoO3RoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg9TWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCsxLFYtMSl9ZWxzZSBULmtleT09PSJBcnJvd1VwIiYmdGhpcy5zaG93U3VnZ2VzdGlvbnM/KFQucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4PU1hdGgubWF4KHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgtMSwwKSk6VC5rZXk9PT0iRXNjYXBlIiYmKHRoaXMuc2hvd1N1Z2dlc3Rpb25zPSExLHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg9LTEpfWhhbmRsZUZvY3VzKCl7dGhpcy5zdWdnZXN0aW9ucy5sZW5ndGg+MCYmKHRoaXMuc2hvd1N1Z2dlc3Rpb25zPSEwKX1oYW5kbGVCbHVyKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2hvd1N1Z2dlc3Rpb25zPSExLHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg9LTF9LDIwMCl9YWRkVGFnKFQpe2lmKCFUfHx0aGlzLnZhbHVlLmluY2x1ZGVzKFQpfHx0aGlzLm1heFRhZ3MmJnRoaXMudmFsdWUubGVuZ3RoPj10aGlzLm1heFRhZ3MpcmV0dXJuO3RoaXMudmFsdWU9Wy4uLnRoaXMudmFsdWUsVF0sdGhpcy5pbnB1dFZhbHVlPSIiLHRoaXMuc2hvd1N1Z2dlc3Rpb25zPSExLHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXg9LTE7bGV0ICQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7JCYmKCQudmFsdWU9IiIpLHRoaXMuZW1pdENoYW5nZSgpfXJlbW92ZVRhZyhULCQpe1Quc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZT10aGlzLnZhbHVlLmZpbHRlcihWPT5WIT09JCksdGhpcy5lbWl0Q2hhbmdlKCl9ZW1pdENoYW5nZSgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2RldGFpbDp7dmFsdWU6dGhpcy52YWx1ZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSx0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKFQpe3RoaXMudmFsdWU9VHx8W119YXN5bmMgdmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXF1aXJlZCYmKCF0aGlzLnZhbHVlfHx0aGlzLnZhbHVlLmxlbmd0aD09PTApPyh0aGlzLnZhbGlkYXRpb25UZXh0PSJBdCBsZWFzdCBvbmUgdGFnIGlzIHJlcXVpcmVkIiwhMSk6KHRoaXMudmFsaWRhdGlvblRleHQ9IiIsITApfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxBMih0aGlzLHopfXN0YXRpY3tBMihpLGEpfX07cmV0dXJuIEU9aX0pKCl9KTt2YXIgZ2d0PWIoKCk9PnttZ3QoKX0pO3ZhciBiZ3Q9YigoKT0+e3VvKCl9KTt2YXIgdmd0PWIoKCk9PntKcSgpfSk7dmFyIHlndD1iKCgpPT57dFYoKX0pO3ZhciB5VXQseFV0LHdVdCxNVXQselV0LGtVdCxTVXQseGd0LHdndD1iKCgpPT57dWUoKTt4MSgpO2cyKCk7eVV0PSgpPT57bGV0IHQ9RGF0ZS5ub3coKTtyZXR1cm5be2lkOmB0aXRsZS0ke3R9YCx0eXBlOiJoZWFkaW5nLTEiLGNvbnRlbnQ6IlN5c3RlbSBQZXJmb3JtYW5jZSBSZXBvcnQifSx7aWQ6YGRhdGUtJHt0KzF9YCx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6YEdlbmVyYXRlZCBvbjogJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9YH0se2lkOmBzdW1tYXJ5LWhlYWRpbmctJHt0KzJ9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6IkV4ZWN1dGl2ZSBTdW1tYXJ5In0se2lkOmBzdW1tYXJ5LSR7dCszfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJUaGlzIHJlcG9ydCBwcm92aWRlcyBhbiBhbmFseXNpcyBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UgbWV0cmljcyBvdmVyIHRoZSBsYXN0IDMwIGRheXMuIn0se2lkOmBtZXRyaWNzLWhlYWRpbmctJHt0KzR9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6IktleSBNZXRyaWNzIn0se2lkOmBtZXRyaWNzLWxpc3QtJHt0KzV9YCx0eXBlOiJsaXN0Iixjb250ZW50OmBBdmVyYWdlIHJlc3BvbnNlIHRpbWU6IDEyNG1zClVwdGltZTogOTkuOTclCkNQVSB1dGlsaXphdGlvbjogNDUlCk1lbW9yeSB1c2FnZTogMi4zR0IgLyA4R0JgLG1ldGFkYXRhOntsaXN0VHlwZToiYnVsbGV0In19LHtpZDpgYW5hbHlzaXMtaGVhZGluZy0ke3QrNn1gLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDoiUGVyZm9ybWFuY2UgQW5hbHlzaXMifSx7aWQ6YGFuYWx5c2lzLXF1b3RlLSR7dCs3fWAsdHlwZToicXVvdGUiLGNvbnRlbnQ6IlN5c3RlbSBwZXJmb3JtYW5jZSByZW1haW5zIHdpdGhpbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgd2l0aCByb29tIGZvciBvcHRpbWl6YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIn0se2lkOmBjb2RlLWhlYWRpbmctJHt0Kzh9YCx0eXBlOiJoZWFkaW5nLTMiLGNvbnRlbnQ6IlNhbXBsZSBRdWVyeSBQZXJmb3JtYW5jZSJ9LHtpZDpgY29kZS1ibG9jay0ke3QrOX1gLHR5cGU6ImNvZGUiLGNvbnRlbnQ6YFNFTEVDVCBBVkcocmVzcG9uc2VfdGltZSkgYXMgYXZnX3RpbWUsCiAgICAgICBDT1VOVCgqKSBhcyB0b3RhbF9yZXF1ZXN0cywKICAgICAgIERBVEUoY3JlYXRlZF9hdCkgYXMgZGF0ZQpGUk9NIHBlcmZvcm1hbmNlX2xvZ3MKV0hFUkUgY3JlYXRlZF9hdCA+PSBOT1coKSAtIElOVEVSVkFMIDMwIERBWQpHUk9VUCBCWSBEQVRFKGNyZWF0ZWRfYXQpCk9SREVSIEJZIGRhdGUgREVTQztgLG1ldGFkYXRhOntsYW5ndWFnZToic3FsIn19LHtpZDpgZGl2aWRlci0ke3QrMTB9YCx0eXBlOiJkaXZpZGVyIixjb250ZW50OiIifSx7aWQ6YGZvb3Rlci0ke3QrMTF9YCx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6IlJlcG9ydCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBTeXN0ZW0gTW9uaXRvciB2Mi41LjAifV19LHhVdD0oKT0+e2xldCB0PURhdGUubm93KCk7cmV0dXJuW3tpZDpgcmVjaXBlLXRpdGxlLSR7dH1gLHR5cGU6ImhlYWRpbmctMSIsY29udGVudDoiQ2xhc3NpYyBNYXJnaGVyaXRhIFBpenphIn0se2lkOmByZWNpcGUtaW50cm8tJHt0KzF9YCx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6IkEgdHJhZGl0aW9uYWwgSXRhbGlhbiBwaXp6YSB3aXRoIGZyZXNoIGJhc2lsLCBtb3p6YXJlbGxhLCBhbmQgdG9tYXRvIHNhdWNlLiJ9LHtpZDpgaW5ncmVkaWVudHMtaGVhZGluZy0ke3QrMn1gLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDoiXHV7MUYzNTV9IEluZ3JlZGllbnRzIn0se2lkOmBkb3VnaC1oZWFkaW5nLSR7dCszfWAsdHlwZToiaGVhZGluZy0zIixjb250ZW50OiJGb3IgdGhlIERvdWdoOiJ9LHtpZDpgZG91Z2gtbGlzdC0ke3QrNH1gLHR5cGU6Imxpc3QiLGNvbnRlbnQ6YDUwMGcgdGlwbyAiMDAiIGZsb3VyCjMyNW1sIHdhcm0gd2F0ZXIKMTBnIHNhbHQKN2cgYWN0aXZlIGRyeSB5ZWFzdAoyIHRic3Agb2xpdmUgb2lsYCxtZXRhZGF0YTp7bGlzdFR5cGU6ImJ1bGxldCJ9fSx7aWQ6YHRvcHBpbmdzLWhlYWRpbmctJHt0KzV9YCx0eXBlOiJoZWFkaW5nLTMiLGNvbnRlbnQ6IkZvciB0aGUgVG9wcGluZ3M6In0se2lkOmB0b3BwaW5ncy1saXN0LSR7dCs2fWAsdHlwZToibGlzdCIsY29udGVudDpgNDAwZyBjYW5uZWQgU2FuIE1hcnphbm8gdG9tYXRvZXMKMjUwZyBmcmVzaCBtb3p6YXJlbGxhCkZyZXNoIGJhc2lsIGxlYXZlcwpFeHRyYSB2aXJnaW4gb2xpdmUgb2lsClNhbHQgYW5kIHBlcHBlciB0byB0YXN0ZWAsbWV0YWRhdGE6e2xpc3RUeXBlOiJidWxsZXQifX0se2lkOmBpbnN0cnVjdGlvbnMtaGVhZGluZy0ke3QrN31gLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDoiXHV7MUY0Njh9XHUyMDBEXHV7MUYzNzN9IEluc3RydWN0aW9ucyJ9LHtpZDpgc3RlcHMtbGlzdC0ke3QrOH1gLHR5cGU6Imxpc3QiLGNvbnRlbnQ6YERpc3NvbHZlIHllYXN0IGluIHdhcm0gd2F0ZXIgYW5kIGxldCBzdGFuZCBmb3IgNSBtaW51dGVzCk1peCBmbG91ciBhbmQgc2FsdCwgY3JlYXRlIGEgd2VsbCBpbiBjZW50ZXIKQWRkIHllYXN0IG1peHR1cmUgYW5kIG9saXZlIG9pbApLbmVhZCBmb3IgMTAgbWludXRlcyB1bnRpbCBzbW9vdGgKTGV0IHJpc2UgZm9yIDEtMiBob3VycyB1bnRpbCBkb3VibGVkClB1bmNoIGRvd24gYW5kIGRpdmlkZSBpbnRvIHBvcnRpb25zClJvbGwgb3V0IGVhY2ggcG9ydGlvbiB0byAxMi1pbmNoIGNpcmNsZXMKVG9wIHdpdGggY3J1c2hlZCB0b21hdG9lcywgbW96emFyZWxsYSwgYW5kIGJhc2lsCkJha2UgYXQgNDc1XHhCMEYgKDI0NVx4QjBDKSBmb3IgMTAtMTIgbWludXRlc2AsbWV0YWRhdGE6e2xpc3RUeXBlOiJvcmRlcmVkIn19LHtpZDpgdGlwLSR7dCs5fWAsdHlwZToicXVvdGUiLGNvbnRlbnQ6IlBybyB0aXA6IEZvciBhbiBhdXRoZW50aWMgdGFzdGUsIHVzZSBhIHBpenphIHN0b25lIGFuZCBwcmVoZWF0IGl0IGluIHRoZSBvdmVuIGZvciBhdCBsZWFzdCAzMCBtaW51dGVzIGJlZm9yZSBiYWtpbmcuIn0se2lkOmBkaXZpZGVyLSR7dCsxMH1gLHR5cGU6ImRpdmlkZXIiLGNvbnRlbnQ6IiJ9LHtpZDpgc2VydmluZ3MtJHt0KzExfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJTZXJ2aW5nczogNCBwaXp6YXMgfCBQcmVwIHRpbWU6IDIgaG91cnMgfCBDb29rIHRpbWU6IDEyIG1pbnV0ZXMifV19LHdVdD10PT57bGV0IGU9e307cmV0dXJuIGUuYmFzaWM9dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWJhc2ljIiksZS5hcnRpY2xlPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci1hcnRpY2xlIiksZS5kcmFnRHJvcD10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItZHJhZ2Ryb3AiKSxlLnR1dG9yaWFsPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci10dXRvcmlhbCIpLGUubWVldGluZz10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItbWVldGluZyIpLGUucmVjaXBlPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci1yZWNpcGUiKSxlLnRlY2huaWNhbD10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItdGVjaG5pY2FsIiksZS5mb3JtSW50ZWdyYXRpb249dC5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iKSxlLnByb2dyYW1tYXRpYz10LnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcHJvZ3JhbW1hdGljIiksZS5leHBvcnREZW1vPXQucXVlcnlTZWxlY3RvcigiI2VkaXRvci1leHBvcnQiKSxlfSxNVXQ9KHQsZSk9PntsZXQgYT10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVwb3J0IiksaT10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVjaXBlIikscj10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tY2xlYXItZWRpdG9yIik7YSYmYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmltcG9ydEJsb2Nrcyh5VXQoKSl9KSxpJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2UuaW1wb3J0QmxvY2tzKHhVdCgpKX0pLHImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ZS5pbXBvcnRCbG9ja3MoW10pfSl9LHpVdD0odCxlKT0+e2xldCBhPXQucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtYmxvY2tzIiksaT10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWh0bWwiKSxyPXQucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtbWFya2Rvd24iKSxzPXQucXVlcnlTZWxlY3RvcigiI2J0bi1zYXZlLXN0YXRlIiksbj10LnF1ZXJ5U2VsZWN0b3IoIiNidG4tcmVzdG9yZS1zdGF0ZSIpLG89bnVsbDthJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2xldCBkPWUuZXhwb3J0QmxvY2tzKCk7Y29uc29sZS5sb2coIkV4cG9ydGVkIGJsb2NrczoiLGQpLGFsZXJ0KGBFeHBvcnRlZCAke2QubGVuZ3RofSBibG9ja3MgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLmApfSksaSYmaS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntsZXQgZD1lLmV4cG9ydEFzSHRtbCgpO2NvbnNvbGUubG9nKCJIVE1MIEV4cG9ydDoiLGQpLGFsZXJ0KCJIVE1MIGV4cG9ydGVkIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy4iKX0pLHImJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57bGV0IGQ9ZS5leHBvcnRBc01hcmtkb3duKCk7Y29uc29sZS5sb2coIk1hcmtkb3duIEV4cG9ydDoiLGQpLGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIil9KSxzJiZzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e289ZS5leHBvcnRTdGF0ZSgpLGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLG8pLGFsZXJ0KCJFZGl0b3Igc3RhdGUgc2F2ZWQhIil9KSxuJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e28/KGUuaW1wb3J0U3RhdGUobyksYWxlcnQoIkVkaXRvciBzdGF0ZSByZXN0b3JlZCEiKSk6YWxlcnQoIk5vIHNhdmVkIHN0YXRlIGZvdW5kLiBTYXZlIHN0YXRlIGZpcnN0ISIpfSl9LGtVdD0odCxlLGEpPT57bGV0IGk9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLXNob3ctaHRtbC1vdXRwdXQiKSxyPXQucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LWh0bWwiKTtpJiZyJiZlJiZpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3IudGV4dENvbnRlbnQ9ZS5nZXRWYWx1ZSgpLHIuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpfSk7bGV0IHM9dC5xdWVyeVNlbGVjdG9yKCIjYnRuLXNob3ctbWFya2Rvd24tb3V0cHV0Iiksbj10LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldy1tYXJrZG93biIpO3MmJm4mJmEmJnMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57bi50ZXh0Q29udGVudD1hLmdldFZhbHVlKCksbi5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIil9KX0sU1V0PXQ9Pnt0LmFydGljbGUmJnNldFRpbWVvdXQoKCk9PntsZXQgZT1be2lkOiJpbnRyby1oZWFkaW5nLSIrRGF0ZS5ub3coKSx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6IkludHJvZHVjdGlvbiB0byBNb2Rlcm4gV2ViIERldmVsb3BtZW50In0se2lkOiJpbnRyby1wYXJhLSIrRGF0ZS5ub3coKSx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6Ik1vZGVybiB3ZWIgZGV2ZWxvcG1lbnQgaGFzIGV2b2x2ZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRoZSBwYXN0IGRlY2FkZS4gSW4gdGhpcyBhcnRpY2xlLCB3ZSdsbCBleHBsb3JlIHRoZSBrZXkgdGVjaG5vbG9naWVzIGFuZCBiZXN0IHByYWN0aWNlcyB0aGF0IGRlZmluZSB3ZWIgZGV2ZWxvcG1lbnQgaW4gMjAyNC4ifSx7aWQ6InRlY2gtaGVhZGluZy0iK0RhdGUubm93KCksdHlwZToiaGVhZGluZy0zIixjb250ZW50OiJLZXkgVGVjaG5vbG9naWVzIn0se2lkOiJ0ZWNoLWxpc3QtIitEYXRlLm5vdygpLHR5cGU6Imxpc3QiLGNvbnRlbnQ6YFR5cGVTY3JpcHQgLSBUeXBlLXNhZmUgSmF2YVNjcmlwdCBkZXZlbG9wbWVudApXZWIgQ29tcG9uZW50cyAtIE5hdGl2ZSBjb21wb25lbnQgbW9kZWwKRVMgTW9kdWxlcyAtIE1vZGVybiBtb2R1bGUgc3lzdGVtCldlYkFzc2VtYmx5IC0gSGlnaC1wZXJmb3JtYW5jZSBjb21wdXRpbmdgLG1ldGFkYXRhOntsaXN0VHlwZToib3JkZXJlZCJ9fSx7aWQ6InF1b3RlLSIrRGF0ZS5ub3coKSx0eXBlOiJxdW90ZSIsY29udGVudDoiVGhlIGJlc3Qgd2F5IHRvIHByZWRpY3QgdGhlIGZ1dHVyZSBpcyB0byBpbnZlbnQgaXQuIC0gQWxhbiBLYXkifSx7aWQ6ImV4YW1wbGUtaGVhZGluZy0iK0RhdGUubm93KCksdHlwZToiaGVhZGluZy0zIixjb250ZW50OiJDb2RlIEV4YW1wbGUifSx7aWQ6ImNvZGUtZXhhbXBsZS0iK0RhdGUubm93KCksdHlwZToiY29kZSIsY29udGVudDpgY2xhc3MgTW9kZXJuV2ViQXBwIGV4dGVuZHMgSFRNTEVsZW1lbnQgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoKTsKICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pOwogIH0KICAKICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHRoaXMucmVuZGVyKCk7CiAgfQp9YCxtZXRhZGF0YTp7bGFuZ3VhZ2U6ImphdmFzY3JpcHQifX1dO3QuYXJ0aWNsZS5pbXBvcnRCbG9ja3MoZSl9LDUwMCksdC5kcmFnRHJvcCYmc2V0VGltZW91dCgoKT0+e2xldCBlPVt7aWQ6ImRyYWctdGl0bGUtIitEYXRlLm5vdygpLHR5cGU6ImhlYWRpbmctMSIsY29udGVudDoiRHJhZyAmIERyb3AgRGVtbyJ9LHtpZDoiZHJhZy1pbnRyby0iK0RhdGUubm93KCksdHlwZToicGFyYWdyYXBoIixjb250ZW50OiJUaGlzIGVkaXRvciBkZW1vbnN0cmF0ZXMgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5LiBUcnkgZHJhZ2dpbmcgdGhlc2UgYmxvY2tzIGFyb3VuZCEifSx7aWQ6ImRyYWctaGVhZGluZy0iK0RhdGUubm93KCksdHlwZToiaGVhZGluZy0yIixjb250ZW50OiJIb3cgSXQgV29ya3MifSx7aWQ6ImRyYWctbGlzdC0iK0RhdGUubm93KCksdHlwZToibGlzdCIsY29udGVudDpgSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZQpDbGljayBhbmQgaG9sZCB0aGUgaGFuZGxlIHRvIHN0YXJ0IGRyYWdnaW5nCkRyYWcgdG8gcmVvcmRlciBibG9ja3MKUmVsZWFzZSB0byBkcm9wIGluIHRoZSBuZXcgcG9zaXRpb25gLG1ldGFkYXRhOntsaXN0VHlwZToib3JkZXJlZCJ9fSx7aWQ6ImRyYWctcXVvdGUtIitEYXRlLm5vdygpLHR5cGU6InF1b3RlIixjb250ZW50OiJUaGUgZHJhZyBhbmQgZHJvcCBmZWF0dXJlIG1ha2VzIGl0IGVhc3kgdG8gcmVvcmdhbml6ZSB5b3VyIGNvbnRlbnQgd2l0aG91dCBjdXR0aW5nIGFuZCBwYXN0aW5nLiJ9LHtpZDoiZHJhZy1kaXZpZGVyLSIrRGF0ZS5ub3coKSx0eXBlOiJkaXZpZGVyIixjb250ZW50OiIifSx7aWQ6ImRyYWctZm9vdGVyLSIrRGF0ZS5ub3coKSx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6Ik5vdGU6IERpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkLCBidXQgb3RoZXIgYmxvY2tzIGNhbiBiZSBtb3ZlZCBhcm91bmQgdGhlbS4ifV07dC5kcmFnRHJvcC5pbXBvcnRCbG9ja3MoZSl9LDYwMCl9LHhndD0oKT0+d2AKICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57YXdhaXQgbmV3IFByb21pc2UoYT0+c2V0VGltZW91dChhLDUwMCkpO2xldCBlPXdVdCh0KTtlLnByb2dyYW1tYXRpYyYmTVV0KHQsZS5wcm9ncmFtbWF0aWMpLGUuZXhwb3J0RGVtbyYmelV0KHQsZS5leHBvcnREZW1vKSxrVXQodCxlLm1lZXRpbmcsZS5yZWNpcGUpLFNVdChlKSxjb25zb2xlLmxvZygiV1lTSVdZRyBEZW1vIGluaXRpYWxpemVkIHdpdGggZWRpdG9yczoiLE9iamVjdC5rZXlzKGUpKX19PgogIDxzdHlsZT4KICAgICR7UWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnBhbmVsLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZlYXR1cmUtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtaWNvbiB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgICAgfQogICAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWJveCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4wNSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAxMDIsIDIwNCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTQ4LCAyNTUsIDAuMSk7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTJweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0cy10aXRsZSB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxODBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICB9CgogICAgICAuc2hvcnRjdXQta2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgICBjb2xvcjogI2JiYjsKICAgICAgICB9CiAgICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICAgICAgY29sb3I6ICNkZGQ7CiAgICAgICAgfQogICAgICB9CgogICAgICAub3V0cHV0LWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMjBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtY2FyZCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm91dHB1dC1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMDQpOwogICAgICAgIGNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXRleHQsICMwZjE3MmEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTUsIDIzLCA0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWF4LWhlaWdodDogMjgwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aGVtZT0nZGFyayddKSAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4wNik7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMTUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXRleHQsICNmNGY0ZjUpOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcudmlzaWJsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5vdXRwdXQtZ3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmMGY4ZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAudGlwcy1ib3ggc3Ryb25nIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCB7CiAgICAgICAgbWFyZ2luOiA4cHggMCAwIDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAudGlwcy1saXN0IGxpIHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjY2NjOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b246YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5kZW1vLWJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNTU1OwogICAgICAgICAgY29sb3I6ICNkZGQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5kZW1vLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNDQ0OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNTBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuYmxvY2tzIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwMiwgMjA0LCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc2LCAxNzUsIDgwLCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5tYXJrZG93biB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuc3RhdGUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTU2LCAzOSwgMTc2LCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCBzdHJvbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuYmxvY2tzIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmh0bWwgc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzRDQUY1MDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gc3Ryb25nIHsKICAgICAgICBjb2xvcjogI0ZGOTgwMDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuc3RhdGUgc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzlDMjdCMDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgcCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBcdXsxRjY4MH0gTW9kZXJuIFdZU0lXWUcgRWRpdG9yIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEEgcG93ZXJmdWwgYmxvY2stYmFzZWQgZWRpdG9yIHdpdGggc2xhc2ggY29tbWFuZHMsIGtleWJvYXJkIHNob3J0Y3V0cywgYW5kIG11bHRpcGxlIG91dHB1dCBmb3JtYXRzLiAKICAgICAgICAgIFBlcmZlY3QgZm9yIGNvbnRlbnQgY3JlYXRpb24sIGJsb2cgcG9zdHMsIGRvY3VtZW50YXRpb24sIGFuZCBtb3JlLgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5TbGFzaCBjb21tYW5kcyAoLyk8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+S2V5Ym9hcmQgc2hvcnRjdXRzPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkJsb2NrLWJhc2VkIGVkaXRpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+RHJhZyAmIGRyb3AgcmVvcmRlcmluZzwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5IVE1MICYgTWFya2Rvd24gb3V0cHV0PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRhcmsgbW9kZSBzdXBwb3J0PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPk1vYmlsZSByZXNwb25zaXZlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItYmFzaWMiCiAgICAgICAgICBsYWJlbD0iUmljaCBUZXh0IEVkaXRvciIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU3RhcnQgdHlwaW5nIG9yIHVzZSAnLycgdG8gaW5zZXJ0IGRpZmZlcmVudCBibG9jayB0eXBlcyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CgogICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ib3giPgogICAgICAgICAgPGg0IGNsYXNzPSJzaG9ydGN1dHMtdGl0bGUiPuKMqO+4jyBLZXlib2FyZCBTaG9ydGN1dHM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXRzLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4vPC9zcGFuPiBTbGFzaCBjb21tYW5kcwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Izwvc3Bhbj4gSGVhZGluZyAxCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4jIzwvc3Bhbj4gSGVhZGluZyAyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4jIyM8L3NwYW4+IEhlYWRpbmcgMwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Pjwvc3Bhbj4gUXVvdGUKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPlxgXGBcYDwvc3Bhbj4gQ29kZSBibG9jawogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Kjwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LTwvc3Bhbj4gQnVsbGV0IGxpc3QKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPjEuPC9zcGFuPiBOdW1iZXJlZCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4tLS08L3NwYW4+IERpdmlkZXIKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjIuIFx1ezFGNEREfSBCbG9nIFBvc3QgRXhhbXBsZSJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBQZXJmZWN0IGZvciBjcmVhdGluZyByaWNoIGNvbnRlbnQgd2l0aCBtdWx0aXBsZSBibG9jayB0eXBlcy4gCiAgICAgICAgICBUaGUgZWRpdG9yIHByZXNlcnZlcyBmb3JtYXR0aW5nIGFuZCBwcm92aWRlcyBhIGNsZWFuIGVkaXRpbmcgZXhwZXJpZW5jZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItYXJ0aWNsZSIKICAgICAgICAgIGxhYmVsPSJCbG9nIFBvc3QgQ29udGVudCIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV3JpdGUgeW91ciBhcnRpY2xlIHVzaW5nIHZhcmlvdXMgZm9ybWF0dGluZyBvcHRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJodG1sIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFx1ezFGNTAwfSBEcmFnICYgRHJvcCBSZW9yZGVyaW5nIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEVhc2lseSByZWFycmFuZ2UgeW91ciBjb250ZW50IGJsb2NrcyBieSBkcmFnZ2luZyB0aGVtLiAKICAgICAgICAgIEhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHJldmVhbCB0aGUgZHJhZyBoYW5kbGUgb24gdGhlIGxlZnQgc2lkZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItZHJhZ2Ryb3AiCiAgICAgICAgICBsYWJlbD0iRHJhZyAmIERyb3AgRGVtbyIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IGRyYWdnaW5nIGJsb2NrcyB0byByZW9yZGVyIHRoZW0gLSBob3ZlciB0byBzZWUgZHJhZyBoYW5kbGVzIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aXBzLWJveCI+CiAgICAgICAgICA8c3Ryb25nPvCfkqEgVGlwczo8L3N0cm9uZz4KICAgICAgICAgIDx1bCBjbGFzcz0idGlwcy1saXN0Ij4KICAgICAgICAgICAgPGxpPkhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHNlZSB0aGUgZHJhZyBoYW5kbGUgKOKLruKLrikgb24gdGhlIGxlZnQ8L2xpPgogICAgICAgICAgICA8bGk+Q2xpY2sgYW5kIGhvbGQgdGhlIGRyYWcgaGFuZGxlIHRvIHN0YXJ0IGRyYWdnaW5nPC9saT4KICAgICAgICAgICAgPGxpPkJsdWUgaW5kaWNhdG9ycyBzaG93IHdoZXJlIHRoZSBibG9jayB3aWxsIGJlIGRyb3BwZWQ8L2xpPgogICAgICAgICAgICA8bGk+RGl2aWRlciBibG9ja3MgY2Fubm90IGJlIGRyYWdnZWQ8L2xpPgogICAgICAgICAgICA8bGk+VGhlIGVkaXRvciBtYWludGFpbnMgZm9jdXMgb24gdGhlIG1vdmVkIGJsb2NrIGFmdGVyIGRyb3BwaW5nPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBcdXsxRjREQX0gVHV0b3JpYWwgJiBEb2N1bWVudGF0aW9uIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENyZWF0ZSBjb21wcmVoZW5zaXZlIHR1dG9yaWFscyBhbmQgZG9jdW1lbnRhdGlvbiB3aXRoIGNvZGUgZXhhbXBsZXMsIGxpc3RzLCBhbmQgc3RydWN0dXJlZCBjb250ZW50LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci10dXRvcmlhbCIKICAgICAgICAgIGxhYmVsPSJHaXQgVHV0b3JpYWwiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0ZXAtYnktc3RlcCBndWlkZSB3aXRoIGNvbW1hbmRzIGFuZCBleHBsYW5hdGlvbnMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgdmFsdWU9IiMgR2l0IFR1dG9yaWFsIGZvciBCZWdpbm5lcnMKCkdpdCBpcyBhIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gdGhhdCBoZWxwcyB5b3UgdHJhY2sgY2hhbmdlcyBpbiB5b3VyIGNvZGUgb3ZlciB0aW1lLiBUaGlzIHR1dG9yaWFsIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggdGhlIGJhc2ljcy4KCiMjIFByZXJlcXVpc2l0ZXMKCkJlZm9yZSBzdGFydGluZywgZW5zdXJlIHlvdSBoYXZlOgoKLSBHaXQgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtCi0gQSB0ZXh0IGVkaXRvciBvciBJREUKLSBCYXNpYyBjb21tYW5kIGxpbmUga25vd2xlZGdlCgojIyBHZXR0aW5nIFN0YXJ0ZWQKCiMjIyAxLiBDb25maWd1cmUgR2l0CgpGaXJzdCwgc2V0IHVwIHlvdXIgaWRlbnRpdHk6CgpcYFxgXGBiYXNoCmdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICZxdW90O1lvdXIgTmFtZSZxdW90OwpnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgJnF1b3Q7eW91ci5lbWFpbEBleGFtcGxlLmNvbSZxdW90OwpcYFxgXGAKCiMjIyAyLiBJbml0aWFsaXplIGEgUmVwb3NpdG9yeQoKQ3JlYXRlIGEgbmV3IEdpdCByZXBvc2l0b3J5OgoKXGBcYFxgYmFzaApta2RpciBteS1wcm9qZWN0CmNkIG15LXByb2plY3QKZ2l0IGluaXQKXGBcYFxgCgojIyMgMy4gQmFzaWMgR2l0IFdvcmtmbG93CgojIyMjIEFkZGluZyBGaWxlcwoKQ3JlYXRlIGEgZmlsZSBhbmQgYWRkIGl0IHRvIHN0YWdpbmc6CgpcYFxgXGBiYXNoCmVjaG8gJnF1b3Q7IyBNeSBQcm9qZWN0JnF1b3Q7ID4gUkVBRE1FLm1kCmdpdCBhZGQgUkVBRE1FLm1kClxgXGBcYAoKIyMjIyBDb21taXR0aW5nIENoYW5nZXMKClxgXGBcYGJhc2gKZ2l0IGNvbW1pdCAtbSAmcXVvdDtJbml0aWFsIGNvbW1pdCZxdW90OwpcYFxgXGAKCj4gKipCZXN0IFByYWN0aWNlOioqIFdyaXRlIGNsZWFyLCBkZXNjcmlwdGl2ZSBjb21taXQgbWVzc2FnZXMgdGhhdCBleHBsYWluIHdoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgYW5kIHdoeS4KCiMjIyA0LiBXb3JraW5nIHdpdGggQnJhbmNoZXMKCkJyYW5jaGVzIGFsbG93IHlvdSB0byB3b3JrIG9uIGZlYXR1cmVzIGluZGVwZW5kZW50bHk6CgpcYFxgXGBiYXNoCiMgQ3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoCmdpdCBjaGVja291dCAtYiBmZWF0dXJlLWJyYW5jaAoKIyBNYWtlIGNoYW5nZXMgYW5kIGNvbW1pdApnaXQgYWRkIC4KZ2l0IGNvbW1pdCAtbSAmcXVvdDtBZGQgbmV3IGZlYXR1cmUmcXVvdDsKCiMgU3dpdGNoIGJhY2sgdG8gbWFpbgpnaXQgY2hlY2tvdXQgbWFpbgoKIyBNZXJnZSB0aGUgZmVhdHVyZQpnaXQgbWVyZ2UgZmVhdHVyZS1icmFuY2gKXGBcYFxgCgotLS0KCiMjIENvbW1vbiBDb21tYW5kcyBSZWZlcmVuY2UKCnwgQ29tbWFuZCB8IERlc2NyaXB0aW9uIHwKfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfAp8IFxgZ2l0IHN0YXR1c1xgIHwgQ2hlY2sgcmVwb3NpdG9yeSBzdGF0dXMgfAp8IFxgZ2l0IGxvZ1xgIHwgVmlldyBjb21taXQgaGlzdG9yeSB8CnwgXGBnaXQgZGlmZlxgIHwgU2hvdyBjaGFuZ2VzIHwKfCBcYGdpdCBwdWxsXGAgfCBGZXRjaCBhbmQgbWVyZ2UgY2hhbmdlcyB8CnwgXGBnaXQgcHVzaFxgIHwgVXBsb2FkIGNoYW5nZXMgdG8gcmVtb3RlIHwKCiMjIE5leHQgU3RlcHMKCjEuIExlYXJuIGFib3V0IHJlbW90ZSByZXBvc2l0b3JpZXMKMi4gRXhwbG9yZSBhZHZhbmNlZCBHaXQgZmVhdHVyZXMKMy4gUHJhY3RpY2Ugd2l0aCByZWFsIHByb2plY3RzCjQuIENvbnRyaWJ1dGUgdG8gb3BlbiBzb3VyY2UKCioqSGFwcHkgY29kaW5nISoqIPCfmoAiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gXHV7MUY1MDR9IE91dHB1dCBGb3JtYXRzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENob29zZSBiZXR3ZWVuIEhUTUwgYW5kIE1hcmtkb3duIG91dHB1dCBmb3JtYXRzIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiAKICAgICAgICAgIFBlcmZlY3QgZm9yIHN0YXRpYyBzaXRlIGdlbmVyYXRvcnMsIGRvY3VtZW50YXRpb24gc3lzdGVtcywgb3IgYW55IGNvbnRlbnQgbWFuYWdlbWVudCB3b3JrZmxvdy4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWNhcmQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgICAgIGlkPSJlZGl0b3ItbWVldGluZyIKICAgICAgICAgICAgICBsYWJlbD0iTWVldGluZyBOb3RlcyIgCiAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlN0cnVjdHVyZWQgbWVldGluZyBkb2N1bWVudGF0aW9uIgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICAgICAgICB2YWx1ZT0iPGgyPlE0IFBsYW5uaW5nIE1lZXRpbmc8L2gyPjxwPjxzdHJvbmc+RGF0ZTo8L3N0cm9uZz4gRGVjZW1iZXIgMTUsIDIwMjQ8YnI+PHN0cm9uZz5BdHRlbmRlZXM6PC9zdHJvbmc+IFByb2R1Y3QgVGVhbSwgRW5naW5lZXJpbmcsIERlc2lnbjwvcD48aDM+QWdlbmRhIEl0ZW1zPC9oMz48b2w+PGxpPlJldmlldyBRMyBhY2hpZXZlbWVudHM8L2xpPjxsaT5TZXQgUTQgb2JqZWN0aXZlczwvbGk+PGxpPlJlc291cmNlIGFsbG9jYXRpb248L2xpPjxsaT5UaW1lbGluZSBkaXNjdXNzaW9uPC9saT48L29sPjxoMz5LZXkgRGVjaXNpb25zPC9oMz48dWw+PGxpPkxhdW5jaCBuZXcgZGFzaGJvYXJkIGZlYXR1cmUgYnkgZW5kIG9mIEphbnVhcnk8L2xpPjxsaT5JbmNyZWFzZSBlbmdpbmVlcmluZyB0ZWFtIGJ5IDIgZGV2ZWxvcGVyczwvbGk+PGxpPkltcGxlbWVudCB3ZWVrbHkgZGVzaWduIHJldmlld3M8L2xpPjwvdWw+PGJsb2NrcXVvdGU+JnF1b3Q7Rm9jdXMgb24gdXNlciBleHBlcmllbmNlIGltcHJvdmVtZW50cyBiYXNlZCBvbiBRMyBmZWVkYmFjayZxdW90OyAtIFByb2R1Y3QgTWFuYWdlcjwvYmxvY2txdW90ZT48aDM+QWN0aW9uIEl0ZW1zPC9oMz48dWw+PGxpPlNhcmFoOiBDcmVhdGUgZGV0YWlsZWQgcHJvamVjdCB0aW1lbGluZTwvbGk+PGxpPk1pa2U6IERyYWZ0IHRlY2huaWNhbCByZXF1aXJlbWVudHM8L2xpPjxsaT5MaXNhOiBTY2hlZHVsZSB1c2VyIHJlc2VhcmNoIHNlc3Npb25zPC9saT48L3VsPjxocj48cD5OZXh0IG1lZXRpbmc6IEphbnVhcnkgNSwgMjAyNTwvcD4iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LWh0bWwtb3V0cHV0IiBjbGFzcz0iZGVtby1idXR0b24iPlNob3cgSFRNTCBPdXRwdXQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgaWQ9Im91dHB1dC1wcmV2aWV3LWh0bWwiIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLXJlY2lwZSIKICAgICAgICAgICAgICBsYWJlbD0iUmVjaXBlIEJsb2cgUG9zdCIgCiAgICAgICAgICAgICAgZGVzY3JpcHRpb249IkZvb2QgYmxvZyB3aXRoIG1peGVkIGNvbnRlbnQiCiAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgICAgICB2YWx1ZT0iIyBVbHRpbWF0ZSBDaG9jb2xhdGUgQ2hpcCBDb29raWVzCgpUaGVyZSdzIG5vdGhpbmcgcXVpdGUgbGlrZSB0aGUgc21lbGwgb2YgZnJlc2hseSBiYWtlZCBjaG9jb2xhdGUgY2hpcCBjb29raWVzLiBUaGlzIHJlY2lwZSBoYXMgYmVlbiBwZXJmZWN0ZWQgb3ZlciB5ZWFycyBvZiB0ZXN0aW5nIQoKIyMgSW5ncmVkaWVudHMKCi0gMsK8IGN1cHMgYWxsLXB1cnBvc2UgZmxvdXIKLSAxIHRzcCBiYWtpbmcgc29kYQotIDEgdHNwIHNhbHQKLSAxIGN1cCBidXR0ZXIsIHNvZnRlbmVkCi0gwr4gY3VwIGdyYW51bGF0ZWQgc3VnYXIKLSDCviBjdXAgcGFja2VkIGJyb3duIHN1Z2FyCi0gMiBsYXJnZSBlZ2dzCi0gMiB0c3AgdmFuaWxsYSBleHRyYWN0Ci0gMiBjdXBzIGNob2NvbGF0ZSBjaGlwcwoKIyMgSW5zdHJ1Y3Rpb25zCgojIyMgU3RlcCAxOiBQcmVwYXJhdGlvbgoKUHJlaGVhdCB5b3VyIG92ZW4gdG8gKiozNzXCsEYgKDE5MMKwQykqKi4gVGhpcyB0ZW1wZXJhdHVyZSBpcyBjcnVjaWFsIGZvciBhY2hpZXZpbmcgdGhlIHBlcmZlY3QgdGV4dHVyZS4KCiMjIyBTdGVwIDI6IE1peCBEcnkgSW5ncmVkaWVudHMKCkluIGEgbWVkaXVtIGJvd2wsIHdoaXNrIHRvZ2V0aGVyOgoKMS4gRmxvdXIKMi4gQmFraW5nIHNvZGEKMy4gU2FsdAoKIyMjIFN0ZXAgMzogQ3JlYW0gQnV0dGVyIGFuZCBTdWdhcnMKClxgXGBcYApDcmVhbSBidXR0ZXIgYW5kIHN1Z2FycyBmb3IgMy00IG1pbnV0ZXMKdW50aWwgbGlnaHQgYW5kIGZsdWZmeQpcYFxgXGAKCj4gKipQcm8gdGlwOioqIFJvb20gdGVtcGVyYXR1cmUgaW5ncmVkaWVudHMgbWl4IGJldHRlciBhbmQgY3JlYXRlIGEgbW9yZSB1bmlmb3JtIGRvdWdoLgoKIyMjIFN0ZXAgNDogQWRkIFdldCBJbmdyZWRpZW50cwoKQmVhdCBpbiBlZ2dzIG9uZSBhdCBhIHRpbWUsIHRoZW4gYWRkIHZhbmlsbGEgZXh0cmFjdC4KCiMjIyBTdGVwIDU6IENvbWJpbmUgYW5kIEJha2UKCkdyYWR1YWxseSBibGVuZCBpbiBmbG91ciBtaXh0dXJlLCB0aGVuIHN0aXIgaW4gY2hvY29sYXRlIGNoaXBzLiBEcm9wIHJvdW5kZWQgdGFibGVzcG9vbnMgb250byB1bmdyZWFzZWQgY29va2llIHNoZWV0cy4KCi0tLQoKKipCYWtpbmcgdGltZToqKiA5LTExIG1pbnV0ZXMgb3IgdW50aWwgZ29sZGVuIGJyb3duCgoqKllpZWxkOioqIEFib3V0IDUgZG96ZW4gY29va2llcyIKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNob3ctbWFya2Rvd24tb3V0cHV0IiBjbGFzcz0iZGVtby1idXR0b24iPlNob3cgTWFya2Rvd24gT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1tYXJrZG93biIgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIFx1ezFGM0E4fSBBZHZhbmNlZCBFZGl0aW5nIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENyZWF0ZSBjb21wbGV4IGRvY3VtZW50cyB3aXRoIG1peGVkIGNvbnRlbnQgdHlwZXMuIFRoZSBlZGl0b3IgaGFuZGxlcyBhbGwgZm9ybWF0dGluZyBzZWFtbGVzc2x5LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci10ZWNobmljYWwiCiAgICAgICAgICBsYWJlbD0iVGVjaG5pY2FsIERvY3VtZW50YXRpb24iIAogICAgICAgICAgZGVzY3JpcHRpb249IkNyZWF0ZSB0ZWNobmljYWwgZG9jcyB3aXRoIGNvZGUgZXhhbXBsZXMgYW5kIHN0cnVjdHVyZWQgY29udGVudCIKICAgICAgICAgIHZhbHVlPSI8aDE+QVBJIERvY3VtZW50YXRpb248L2gxPjxwPldlbGNvbWUgdG8gb3VyIEFQSSBkb2N1bWVudGF0aW9uLiBCZWxvdyB5b3UnbGwgZmluZCBleGFtcGxlcyBvZiBob3cgdG8gdXNlIG91ciBlbmRwb2ludHMuPC9wPjxoMj5BdXRoZW50aWNhdGlvbjwvaDI+PHA+QWxsIEFQSSByZXF1ZXN0cyByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFuIEFQSSBrZXk6PC9wPjxwcmU+PGNvZGU+QXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWTwvY29kZT48L3ByZT48aDI+RW5kcG9pbnRzPC9oMj48aDM+R0VUIC91c2VyczwvaDM+PHA+UmV0cmlldmUgYSBsaXN0IG9mIHVzZXJzIGZyb20gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT5jdXJsIC1YIEdFVCBodHRwczovL2FwaS5leGFtcGxlLmNvbS91c2VycyBcXAogIC1IICZxdW90O0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVkmcXVvdDs8L2NvZGU+PC9wcmU+PGJsb2NrcXVvdGU+Tm90ZTogUmF0ZSBsaW1pdGluZyBhcHBsaWVzIHRvIGFsbCBlbmRwb2ludHMuIFlvdSBjYW4gbWFrZSB1cCB0byAxMDAgcmVxdWVzdHMgcGVyIG1pbnV0ZS48L2Jsb2NrcXVvdGU+PGgzPlBPU1QgL3VzZXJzPC9oMz48cD5DcmVhdGUgYSBuZXcgdXNlciBpbiB0aGUgc3lzdGVtLjwvcD48cHJlPjxjb2RlPnsKICAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtKb2huIERvZSZxdW90OywKICAmcXVvdDtlbWFpbCZxdW90OzogJnF1b3Q7am9obkBleGFtcGxlLmNvbSZxdW90OywKICAmcXVvdDtyb2xlJnF1b3Q7OiAmcXVvdDt1c2VyJnF1b3Q7Cn08L2NvZGU+PC9wcmU+PGhyPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gb3VyIGNvbXBsZXRlIGRvY3VtZW50YXRpb24uPC9wPiIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBcdTI2OTlcdUZFMEYgRm9ybSBJbnRlZ3JhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTZWFtbGVzc2x5IGludGVncmF0ZXMgd2l0aCBkZWVzLWZvcm0gZm9yIGNvbXBsZXRlIGZvcm0gc29sdXRpb25zLiAKICAgICAgICAgIEFsbCBzdGFuZGFyZCBmb3JtIGZlYXR1cmVzIGxpa2UgdmFsaWRhdGlvbiwgcmVxdWlyZWQgZmllbGRzLCBhbmQgZGF0YSBiaW5kaW5nIHdvcmsgb3V0IG9mIHRoZSBib3guCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBUaXRsZSIgCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICB2YWx1ZT0iSG93IHRvIEJ1aWxkIE1vZGVybiBXZWIgQXBwbGljYXRpb25zIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgICBpZD0iZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iCiAgICAgICAgICAgIGxhYmVsPSJBcnRpY2xlIENvbnRlbnQiIAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV3JpdGUgeW91ciBhcnRpY2xlIGNvbnRlbnQgaGVyZSIKICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCiAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3MKICAgICAgICAgICAgbGFiZWw9IlRhZ3MiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJBZGQgcmVsZXZhbnQgdGFncyBmb3IgeW91ciBhcnRpY2xlIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gXHV7MUY5RTl9IFByb2dyYW1tYXRpYyBCbG9jayBDcmVhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29udGVudCBwcm9ncmFtbWF0aWNhbGx5IHVzaW5nIHRoZSBibG9jayBBUEkgZm9yIGR5bmFtaWMgZG9jdW1lbnQgZ2VuZXJhdGlvbi4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgICAgICAgaWQ9ImVkaXRvci1wcm9ncmFtbWF0aWMiCiAgICAgICAgICBsYWJlbD0iUHJvZ3JhbW1hdGljYWxseSBHZW5lcmF0ZWQgQ29udGVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGNvbnRlbnQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGltcG9ydEJsb2NrcyBBUEkiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZ2VuZXJhdGUtcmVwb3J0IiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBHZW5lcmF0ZSBSZXBvcnQKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZ2VuZXJhdGUtcmVjaXBlIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBHZW5lcmF0ZSBSZWNpcGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tY2xlYXItZWRpdG9yIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBDbGVhciBFZGl0b3IKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gXHV7MUY0RTR9IEV4cG9ydC9JbXBvcnQgRmVhdHVyZXMifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgVGhlIFdZU0lXWUcgZWRpdG9yIHByb3ZpZGVzIG11bHRpcGxlIGV4cG9ydCBmb3JtYXRzIGFuZCBsb3NzbGVzcyBzYXZlL3Jlc3RvcmUgY2FwYWJpbGl0aWVzIGZvciBtYXhpbXVtIGZsZXhpYmlsaXR5LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgYmxvY2tzIj4KICAgICAgICAgICAgPHN0cm9uZz5Mb3NzbGVzcyBCbG9ja3M8L3N0cm9uZz4KICAgICAgICAgICAgPHA+RXhwb3J0IGFuZCBpbXBvcnQgcmF3IGJsb2NrIHN0cnVjdHVyZSBmb3IgcGVyZmVjdCByb3VuZC10cmlwIGVkaXRpbmc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgaHRtbCI+CiAgICAgICAgICAgIDxzdHJvbmc+SFRNTCBFeHBvcnQ8L3N0cm9uZz4KICAgICAgICAgICAgPHA+R2V0IGNsZWFuLCBzZW1hbnRpYyBIVE1MIHJlZ2FyZGxlc3Mgb2Ygb3V0cHV0IGZvcm1hdCBzZXR0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIG1hcmtkb3duIj4KICAgICAgICAgICAgPHN0cm9uZz5NYXJrZG93biBFeHBvcnQ8L3N0cm9uZz4KICAgICAgICAgICAgPHA+RXhwb3J0IGFzIE1hcmtkb3duIGZvciBkb2NzLCBSRUFETUVzLCBhbmQgc3RhdGljIHNpdGVzPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIHN0YXRlIj4KICAgICAgICAgICAgPHN0cm9uZz5TdGF0ZSBNYW5hZ2VtZW50PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPlNhdmUgYW5kIHJlc3RvcmUgY29tcGxldGUgZWRpdG9yIHN0YXRlIGluY2x1ZGluZyBzZXR0aW5nczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItZXhwb3J0IgogICAgICAgICAgbGFiZWw9IkV4cG9ydCBEZW1vIEVkaXRvciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUcnkgdGhlIGV4cG9ydCBidXR0b25zIGJlbG93IHRvIHNlZSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdHMiCiAgICAgICAgICB2YWx1ZT0iPGgxPlNvZnR3YXJlIFJlbGVhc2UgTm90ZXM8L2gxPjxwPjxzdHJvbmc+VmVyc2lvbiAyLjUuMDwvc3Ryb25nPiAtIFJlbGVhc2VkIERlY2VtYmVyIDE1LCAyMDI0PC9wPjxoMj7wn46JIE5ldyBGZWF0dXJlczwvaDI+PHVsPjxsaT5BZGRlZCBkYXJrIG1vZGUgc3VwcG9ydCBhY3Jvc3MgYWxsIGNvbXBvbmVudHM8L2xpPjxsaT5JbXBsZW1lbnRlZCByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBmZWF0dXJlczwvbGk+PGxpPk5ldyBkYXNoYm9hcmQgYW5hbHl0aWNzIHdpZGdldHM8L2xpPjxsaT5FeHBvcnQgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIHJlcG9ydCB0eXBlczwvbGk+PC91bD48aDI+8J+QmyBCdWcgRml4ZXM8L2gyPjx1bD48bGk+Rml4ZWQgbWVtb3J5IGxlYWsgaW4gZGF0YSBwcm9jZXNzaW5nIG1vZHVsZTwvbGk+PGxpPlJlc29sdmVkIGF1dGhlbnRpY2F0aW9uIHRpbWVvdXQgaXNzdWVzPC9saT48bGk+Q29ycmVjdGVkIHRpbWV6b25lIGhhbmRsaW5nIGluIHNjaGVkdWxlZCB0YXNrczwvbGk+PC91bD48aDI+4pqhIFBlcmZvcm1hbmNlIEltcHJvdmVtZW50czwvaDI+PGJsb2NrcXVvdGU+UGFnZSBsb2FkIHRpbWVzIHJlZHVjZWQgYnkgNDAlIHRocm91Z2ggbGF6eSBsb2FkaW5nIGFuZCBjb2RlIHNwbGl0dGluZzwvYmxvY2txdW90ZT48aDI+8J+UpyBUZWNobmljYWwgRGV0YWlsczwvaDI+PHByZT48Y29kZT4vLyBOZXcgQVBJIGVuZHBvaW50IGZvciBiYXRjaCBvcGVyYXRpb25zClBPU1QgL2FwaS92Mi9iYXRjaAp7CiAgJnF1b3Q7b3BlcmF0aW9ucyZxdW90OzogWwogICAgeyAmcXVvdDttZXRob2QmcXVvdDs6ICZxdW90O0dFVCZxdW90OywgJnF1b3Q7cGF0aCZxdW90OzogJnF1b3Q7L3VzZXJzLzEyMyZxdW90OyB9LAogICAgeyAmcXVvdDttZXRob2QmcXVvdDs6ICZxdW90O1BVVCZxdW90OywgJnF1b3Q7cGF0aCZxdW90OzogJnF1b3Q7L3NldHRpbmdzJnF1b3Q7LCAmcXVvdDtib2R5JnF1b3Q7OiB7Li4ufSB9CiAgXQp9PC9jb2RlPjwvcHJlPjxoMj7wn5KhIE1pZ3JhdGlvbiBHdWlkZTwvaDI+PG9sPjxsaT5VcGRhdGUgeW91ciBkZXBlbmRlbmNpZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uczwvbGk+PGxpPlJ1biBkYXRhYmFzZSBtaWdyYXRpb25zOiA8Y29kZT5ucG0gcnVuIG1pZ3JhdGU8L2NvZGU+PC9saT48bGk+Q2xlYXIgY2FjaGU6IDxjb2RlPm5wbSBydW4gY2FjaGU6Y2xlYXI8L2NvZGU+PC9saT48bGk+UmVzdGFydCBhbGwgc2VydmljZXM8L2xpPjwvb2w+PGhyPjxwPkZvciBxdWVzdGlvbnMgb3IgaXNzdWVzLCBwbGVhc2UgY29udGFjdCB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBvciBmaWxlIGEgdGlja2V0IGluIG91ciBpc3N1ZSB0cmFja2VyLjwvcD4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWJsb2NrcyIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IEJsb2NrcwogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1leHBvcnQtaHRtbCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIEhUTUwKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LW1hcmtkb3duIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBFeHBvcnQgYXMgTWFya2Rvd24KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2F2ZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgU2F2ZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1yZXN0b3JlLXN0YXRlIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBSZXN0b3JlIFN0YXRlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgfSk7dmFyIEVhPWIoKCk9Pnt9KTt2YXIgVjEsYzQ9YigoKT0+e0VhKCk7VjE9Y2xhc3N7c3RhdGljIEhFQURJTkdfUEFUVEVSTlM9W3twYXR0ZXJuOi9eI1tcc1x1MDBBMF0kLyx0eXBlOiJoZWFkaW5nLTEifSx7cGF0dGVybjovXiMjW1xzXHUwMEEwXSQvLHR5cGU6ImhlYWRpbmctMiJ9LHtwYXR0ZXJuOi9eIyMjW1xzXHUwMEEwXSQvLHR5cGU6ImhlYWRpbmctMyJ9XTtzdGF0aWMgTElTVF9QQVRURVJOUz1be3BhdHRlcm46L15bKi1dW1xzXHUwMEEwXSQvLHR5cGU6ImJ1bGxldCJ9LHtwYXR0ZXJuOi9eKFxkKylcLltcc1x1MDBBMF0kLyx0eXBlOiJvcmRlcmVkIn0se3BhdHRlcm46L14oXGQrKVwpW1xzXHUwMEEwXSQvLHR5cGU6Im9yZGVyZWQifV07c3RhdGljIFFVT1RFX1BBVFRFUk49L14+W1xzXHUwMEEwXSQvO3N0YXRpYyBDT0RFX1BBVFRFUk49L15gYGAkLztzdGF0aWMgRElWSURFUl9QQVRURVJOUz1bIi0tLSIsIioqKiIsIl9fXyJdO3N0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChlKXtmb3IobGV0e3BhdHRlcm46YSx0eXBlOml9b2YgdGhpcy5IRUFESU5HX1BBVFRFUk5TKWlmKGEudGVzdChlKSlyZXR1cm57dHlwZTppfTtyZXR1cm4gbnVsbH1zdGF0aWMgY2hlY2tMaXN0U2hvcnRjdXQoZSl7Zm9yKGxldHtwYXR0ZXJuOmEsdHlwZTppfW9mIHRoaXMuTElTVF9QQVRURVJOUylpZihhLnRlc3QoZSkpcmV0dXJue3R5cGU6Imxpc3QiLGxpc3RUeXBlOml9O3JldHVybiBudWxsfXN0YXRpYyBjaGVja1F1b3RlU2hvcnRjdXQoZSl7cmV0dXJuIHRoaXMuUVVPVEVfUEFUVEVSTi50ZXN0KGUpfXN0YXRpYyBjaGVja0NvZGVTaG9ydGN1dChlKXtyZXR1cm4gdGhpcy5DT0RFX1BBVFRFUk4udGVzdChlKX1zdGF0aWMgY2hlY2tEaXZpZGVyU2hvcnRjdXQoZSl7cmV0dXJuIHRoaXMuRElWSURFUl9QQVRURVJOUy5pbmNsdWRlcyhlKX1zdGF0aWMgZ2V0U2xhc2hNZW51SXRlbXMoKXtyZXR1cm5be3R5cGU6InBhcmFncmFwaCIsbGFiZWw6IlBhcmFncmFwaCIsaWNvbjoibHVjaWRlOnBpbGNyb3cifSx7dHlwZToiaGVhZGluZy0xIixsYWJlbDoiSGVhZGluZyAxIixpY29uOiJsdWNpZGU6aGVhZGluZzEifSx7dHlwZToiaGVhZGluZy0yIixsYWJlbDoiSGVhZGluZyAyIixpY29uOiJsdWNpZGU6aGVhZGluZzIifSx7dHlwZToiaGVhZGluZy0zIixsYWJlbDoiSGVhZGluZyAzIixpY29uOiJsdWNpZGU6aGVhZGluZzMifSx7dHlwZToicXVvdGUiLGxhYmVsOiJRdW90ZSIsaWNvbjoibHVjaWRlOnF1b3RlIn0se3R5cGU6ImNvZGUiLGxhYmVsOiJDb2RlIEJsb2NrIixpY29uOiJsdWNpZGU6ZmlsZUNvZGUifSx7dHlwZToibGlzdCIsbGFiZWw6IkJ1bGxldCBMaXN0IixpY29uOiJsdWNpZGU6bGlzdCJ9LHt0eXBlOiJpbWFnZSIsbGFiZWw6IkltYWdlIixpY29uOiJsdWNpZGU6aW1hZ2UifSx7dHlwZToiZGl2aWRlciIsbGFiZWw6IkRpdmlkZXIiLGljb246Imx1Y2lkZTptaW51cyJ9LHt0eXBlOiJ5b3V0dWJlIixsYWJlbDoiWW91VHViZSIsaWNvbjoibHVjaWRlOnlvdXR1YmUifSx7dHlwZToibWFya2Rvd24iLGxhYmVsOiJNYXJrZG93biIsaWNvbjoibHVjaWRlOmZpbGVUZXh0In0se3R5cGU6Imh0bWwiLGxhYmVsOiJIVE1MIixpY29uOiJsdWNpZGU6Y29kZSJ9LHt0eXBlOiJhdHRhY2htZW50IixsYWJlbDoiRmlsZSBBdHRhY2htZW50IixpY29uOiJsdWNpZGU6cGFwZXJjbGlwIn1dfXN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKXtyZXR1cm5gYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWB9fX0pO3ZhciBPbCx0cixpdyx6Vj1iKCgpPT57dWUoKTttaSgpO0V0KCk7RWEoKTtjNCgpO1ZlKCk7T2w9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx0cj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0saXc9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXNsYXNoLW1lbnUiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSygpXSxkPVtLKCldLGw9W0soKV0seT1bSygpXSx4PVtLKCldLE9sKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmlzaWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InZpc2libGUiaW4gayxnZXQ6az0+ay52aXNpYmxlLHNldDooayxOKT0+e2sudmlzaWJsZT1OfX0sbWV0YWRhdGE6X30sbixvKSxPbCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBvc2l0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4icG9zaXRpb24iaW4gayxnZXQ6az0+ay5wb3NpdGlvbixzZXQ6KGssTik9PntrLnBvc2l0aW9uPU59fSxtZXRhZGF0YTpffSxjLHApLE9sKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsdGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iZmlsdGVyImluIGssZ2V0Oms9PmsuZmlsdGVyLHNldDooayxOKT0+e2suZmlsdGVyPU59fSxtZXRhZGF0YTpffSxmLGcpLE9sKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRJbmRleCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNlbGVjdGVkSW5kZXgiaW4gayxnZXQ6az0+ay5zZWxlY3RlZEluZGV4LHNldDooayxOKT0+e2suc2VsZWN0ZWRJbmRleD1OfX0sbWV0YWRhdGE6X30sdixtKSxPbCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1lbnVaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJtZW51WkluZGV4ImluIGssZ2V0Oms9PmsubWVudVpJbmRleCxzZXQ6KGssTik9PntrLm1lbnVaSW5kZXg9Tn19LG1ldGFkYXRhOl99LE0sUyksT2wobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxGPWk9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX1zdGF0aWMgaW5zdGFuY2U7c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIEYuaW5zdGFuY2V8fChGLmluc3RhbmNlPW5ldyBGLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRi5pbnN0YW5jZSkpLEYuaW5zdGFuY2V9I2U9dHIodGhpcyxuLCExKTtnZXQgdmlzaWJsZSgpe3JldHVybiB0aGlzLiNlfXNldCB2aXNpYmxlKF8pe3RoaXMuI2U9X30jdD0odHIodGhpcyxvKSx0cih0aGlzLGMse3g6MCx5OjB9KSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHBvc2l0aW9uKF8pe3RoaXMuI3Q9X30jYT0odHIodGhpcyxwKSx0cih0aGlzLGYsIiIpKTtnZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGZpbHRlcihfKXt0aGlzLiNhPV99I2k9KHRyKHRoaXMsZyksdHIodGhpcyx2LDApKTtnZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLiNpfXNldCBzZWxlY3RlZEluZGV4KF8pe3RoaXMuI2k9X30jcj0odHIodGhpcyxtKSx0cih0aGlzLE0sMWUzKSk7Z2V0IG1lbnVaSW5kZXgoKXtyZXR1cm4gdGhpcy4jcn1zZXQgbWVudVpJbmRleChfKXt0aGlzLiNyPV99Y2FsbGJhY2s9KHRyKHRoaXMsUyksbnVsbCk7c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuc2xhc2gtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogICAgICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogICAgICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIC5pY29uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtpZighdGhpcy52aXNpYmxlKXJldHVybiB3YGA7dGhpcy5zdHlsZS56SW5kZXg9dGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7bGV0IF89dGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpO3JldHVybiB3YAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJzbGFzaC1tZW51IiAKICAgICAgICBzdHlsZT0ibGVmdDogJHt0aGlzLnBvc2l0aW9uLnh9cHg7IHRvcDogJHt0aGlzLnBvc2l0aW9uLnl9cHg7IgogICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICBkYXRhLW1lbnUtdHlwZT0ic2xhc2giCiAgICAgID4KICAgICAgICAke18ubWFwKChrLE4pPT53YAogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUtaXRlbSAke049PT10aGlzLnNlbGVjdGVkSW5kZXg/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2sudHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtOfSIKICAgICAgICAgID4KICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iaWNvbiIgLmljb249IiR7ay5pY29ufSIgaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+JHtrLmxhYmVsfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGB9Z2V0RmlsdGVyZWRNZW51SXRlbXMoKXtyZXR1cm4gVjEuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoaz0+dGhpcy5maWx0ZXI9PT0iInx8ay5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyLnRvTG93ZXJDYXNlKCkpKX1zZWxlY3RJdGVtKF8pe3RoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2soXyksdGhpcy5oaWRlKCl9c2hvdyhfLGspe3RoaXMucG9zaXRpb249Xyx0aGlzLmNhbGxiYWNrPWssdGhpcy5maWx0ZXI9IiIsdGhpcy5zZWxlY3RlZEluZGV4PTAsdGhpcy5tZW51WkluZGV4PWgxLmdldE5leHRaSW5kZXgoKSxoMS5yZWdpc3Rlcih0aGlzLHRoaXMubWVudVpJbmRleCksdGhpcy5zdHlsZS56SW5kZXg9dGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCksdGhpcy52aXNpYmxlPSEwfWhpZGUoKXt0aGlzLnZpc2libGU9ITEsdGhpcy5jYWxsYmFjaz1udWxsLHRoaXMuZmlsdGVyPSIiLHRoaXMuc2VsZWN0ZWRJbmRleD0wLGgxLnVucmVnaXN0ZXIodGhpcyl9dXBkYXRlRmlsdGVyKF8pe3RoaXMuZmlsdGVyPV8sdGhpcy5zZWxlY3RlZEluZGV4PTB9bmF2aWdhdGUoXyl7bGV0IGs9dGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpO189PT0iZG93biI/dGhpcy5zZWxlY3RlZEluZGV4PSh0aGlzLnNlbGVjdGVkSW5kZXgrMSklay5sZW5ndGg6dGhpcy5zZWxlY3RlZEluZGV4PXRoaXMuc2VsZWN0ZWRJbmRleD09PTA/ay5sZW5ndGgtMTp0aGlzLnNlbGVjdGVkSW5kZXgtMX1zZWxlY3RDdXJyZW50KCl7bGV0IF89dGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpO19bdGhpcy5zZWxlY3RlZEluZGV4XSYmdGhpcy5zZWxlY3RJdGVtKF9bdGhpcy5zZWxlY3RlZEluZGV4XS50eXBlKX1maXJzdFVwZGF0ZWQoKXt0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXz0+e2xldCBrPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTtrJiZrLmNvbnRhaW5zKF8udGFyZ2V0KSYmKF8ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpKX0pLHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLF89PntsZXQgTj1fLnRhcmdldC5jbG9zZXN0KCIuc2xhc2gtbWVudS1pdGVtIik7aWYoTil7Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCk7bGV0IEw9Ti5nZXRBdHRyaWJ1dGUoImRhdGEtaXRlbS10eXBlIik7TCYmdGhpcy5zZWxlY3RJdGVtKEwpfX0pLHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsXz0+e2xldCBOPV8udGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTtpZihOKXtsZXQgTD1wYXJzZUludChOLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWluZGV4Iil8fCIwIiwxMCk7dGhpcy5zZWxlY3RlZEluZGV4PUx9fSwhMCksdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsXz0+e2xldCBrPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTtrJiZrLmNvbnRhaW5zKF8udGFyZ2V0KSYmKF8ucHJldmVudERlZmF1bHQoKSxfLnN0b3BQcm9wYWdhdGlvbigpKX0sITApfXN0YXRpY3t0cihpLGEpfX07cmV0dXJuIEY9aX0pKCl9KTt2YXIgQmUsWnI9YigoKT0+e0JlPWNsYXNze3N0YXRpYyBnZXRTZWxlY3Rpb25JbmZvKC4uLmUpe2xldCBhPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihjb25zb2xlLmxvZygiV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvIC0gc2VsZWN0aW9uOiIsYSwicmFuZ2VDb3VudDoiLGE/LnJhbmdlQ291bnQpLCFhKXJldHVybiBudWxsO2lmKCJnZXRDb21wb3NlZFJhbmdlcyJpbiBhJiZ0eXBlb2YgYS5nZXRDb21wb3NlZFJhbmdlcz09ImZ1bmN0aW9uIil7Y29uc29sZS5sb2coIlVzaW5nIGdldENvbXBvc2VkUmFuZ2VzIHdpdGgiLGUubGVuZ3RoLCJzaGFkb3cgcm9vdHMiKTt0cnl7bGV0IGk9YS5nZXRDb21wb3NlZFJhbmdlcyh7c2hhZG93Um9vdHM6ZX0pO2lmKGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyByZXR1cm5lZCIsaS5sZW5ndGgsInJhbmdlcyIpLGkubGVuZ3RoPjApe2xldCByPWlbMF07cmV0dXJue3N0YXJ0Q29udGFpbmVyOnIuc3RhcnRDb250YWluZXIsc3RhcnRPZmZzZXQ6ci5zdGFydE9mZnNldCxlbmRDb250YWluZXI6ci5lbmRDb250YWluZXIsZW5kT2Zmc2V0OnIuZW5kT2Zmc2V0LGNvbGxhcHNlZDpyLmNvbGxhcHNlZH19fWNhdGNoKGkpe2NvbnNvbGUud2FybigiZ2V0Q29tcG9zZWRSYW5nZXMgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZ2V0UmFuZ2VBdDoiLGkpfX1lbHNlIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayIpO2lmKGEucmFuZ2VDb3VudD4wKXtsZXQgaT1hLmdldFJhbmdlQXQoMCk7cmV0dXJue3N0YXJ0Q29udGFpbmVyOmkuc3RhcnRDb250YWluZXIsc3RhcnRPZmZzZXQ6aS5zdGFydE9mZnNldCxlbmRDb250YWluZXI6aS5lbmRDb250YWluZXIsZW5kT2Zmc2V0OmkuZW5kT2Zmc2V0LGNvbGxhcHNlZDppLmNvbGxhcHNlZH19cmV0dXJuIG51bGx9c3RhdGljIGlzU2VsZWN0aW9uSW5FbGVtZW50KGUsYSl7bGV0IGk9YT90aGlzLmdldFNlbGVjdGlvbkluZm8oYSk6dGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7cmV0dXJuIGk/ZS5jb250YWlucyhpLnN0YXJ0Q29udGFpbmVyKXx8ZS5jb250YWlucyhpLmVuZENvbnRhaW5lcik6ITF9c3RhdGljIGdldFNlbGVjdGVkVGV4dCgpe2xldCBlPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gZT9lLnRvU3RyaW5nKCk6IiJ9c3RhdGljIGNyZWF0ZVJhbmdlRnJvbUluZm8oZSl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gYS5zZXRTdGFydChlLnN0YXJ0Q29udGFpbmVyLGUuc3RhcnRPZmZzZXQpLGEuc2V0RW5kKGUuZW5kQ29udGFpbmVyLGUuZW5kT2Zmc2V0KSxhfXN0YXRpYyBzZXRTZWxlY3Rpb25Gcm9tUmFuZ2UoZSl7bGV0IGE9d2luZG93LmdldFNlbGVjdGlvbigpO2EmJihhLnJlbW92ZUFsbFJhbmdlcygpLGEuYWRkUmFuZ2UoZSkpfXN0YXRpYyBnZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChlLC4uLmEpe2xldCBpPWEubGVuZ3RoPjA/dGhpcy5nZXRTZWxlY3Rpb25JbmZvKC4uLmEpOnRoaXMuZ2V0U2VsZWN0aW9uSW5mbygpO2lmKCFpfHwhaS5jb2xsYXBzZWQpcmV0dXJuIG51bGw7dHJ5e2xldCByPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7aWYoci5zZWxlY3ROb2RlQ29udGVudHMoZSksdGhpcy5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShlLGkuc3RhcnRDb250YWluZXIpKXJldHVybiByLnNldEVuZChpLnN0YXJ0Q29udGFpbmVyLGkuc3RhcnRPZmZzZXQpLHIudG9TdHJpbmcoKS5sZW5ndGg7e2xldCBuPWUudGV4dENvbnRlbnR8fCIiLG89aS5zdGFydENvbnRhaW5lci50ZXh0Q29udGVudHx8IiI7cmV0dXJuIGkuc3RhcnRPZmZzZXQ9PT0wPzA6aS5zdGFydE9mZnNldD09PW8ubGVuZ3RoP24ubGVuZ3RoOihjb25zb2xlLndhcm4oIlNlbGVjdGlvbiBjb250YWluZXIgbm90IHdpdGhpbiBlbGVtZW50LCB1c2luZyB0ZXh0IG1hdGNoaW5nIGZhbGxiYWNrIiksaS5zdGFydE9mZnNldCl9fWNhdGNoKHIpe3JldHVybiBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBnZXQgY3Vyc29yIHBvc2l0aW9uOiIsciksbnVsbH19c3RhdGljIGdldEN1cnNvclBvc2l0aW9uRnJvbVBvaW50KGUsYSxpLC4uLnIpe2lmKCJjYXJldFBvc2l0aW9uRnJvbVBvaW50ImluIGRvY3VtZW50JiZkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KXtsZXQgcz1udWxsO3RyeXtzPWRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoZSxhLC4uLnIpfWNhdGNoe3M9ZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludChlLGEpfWlmKHMmJmkuY29udGFpbnMocy5vZmZzZXROb2RlKSlyZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocy5vZmZzZXROb2RlLHMub2Zmc2V0LGkpfWlmKCJjYXJldFJhbmdlRnJvbVBvaW50ImluIGRvY3VtZW50KXtsZXQgcz1kb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KGUsYSk7aWYocyYmaS5jb250YWlucyhzLnN0YXJ0Q29udGFpbmVyKSlyZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocy5zdGFydENvbnRhaW5lcixzLnN0YXJ0T2Zmc2V0LGkpfXJldHVybiBudWxsfXN0YXRpYyBnZXRPZmZzZXRJbkVsZW1lbnQoZSxhLGkpe2xldCByPTAscz0hMSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoaSxOb2RlRmlsdGVyLlNIT1dfVEVYVCxudWxsKSxvO2Zvcig7bz1uLm5leHROb2RlKCk7KWlmKG89PT1lKXtyKz1hLHM9ITA7YnJlYWt9ZWxzZSByKz1vLnRleHRDb250ZW50Py5sZW5ndGh8fDA7cmV0dXJuIHM/cjowfXN0YXRpYyBzZXRDdXJzb3JQb3NpdGlvbihlLGEpe2xldCBpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfVEVYVCxudWxsKSxyPTAscz1udWxsLG49MDtmb3IoO2kubmV4dE5vZGUoKTspe2xldCBvPWkuY3VycmVudE5vZGUsZD1vLnRleHRDb250ZW50Py5sZW5ndGh8fDA7aWYocitkPj1hKXtzPW8sbj1hLXI7YnJlYWt9cis9ZH1pZihzKXtsZXQgbz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO28uc2V0U3RhcnQocyxuKSxvLmNvbGxhcHNlKCEwKSx0aGlzLnNldFNlbGVjdGlvbkZyb21SYW5nZShvKX19c3RhdGljIGNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGUsYSl7aWYoIWV8fCFhKXJldHVybiExO2xldCBpPWE7Zm9yKDtpOyl7aWYoaT09PWUpcmV0dXJuITA7aWYoaS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmaS5ob3N0KXtsZXQgcj1pO2lmKHIuY29udGFpbnMoZSkpcmV0dXJuITE7aT1yLmhvc3R9ZWxzZSBpPWkucGFyZW50Tm9kZX1yZXR1cm4hMX19fSk7dmFyIGpzLGtWPWIoKCk9Pnt1ZSgpO1pyKCk7anM9Y2xhc3N7c3RhdGljIGZvcm1hdEJ1dHRvbnM9W3tjb21tYW5kOiJib2xkIixpY29uOiJCIixsYWJlbDoiQm9sZCIsc2hvcnRjdXQ6Ilx1MjMxOEIifSx7Y29tbWFuZDoiaXRhbGljIixpY29uOiJJIixsYWJlbDoiSXRhbGljIixzaG9ydGN1dDoiXHUyMzE4SSJ9LHtjb21tYW5kOiJ1bmRlcmxpbmUiLGljb246IlUiLGxhYmVsOiJVbmRlcmxpbmUiLHNob3J0Y3V0OiJcdTIzMThVIn0se2NvbW1hbmQ6InN0cmlrZVRocm91Z2giLGljb246IlNcdTAzMzYiLGxhYmVsOiJTdHJpa2V0aHJvdWdoIn0se2NvbW1hbmQ6ImNvZGUiLGljb246InsgfSIsbGFiZWw6IklubGluZSBDb2RlIn0se2NvbW1hbmQ6ImxpbmsiLGljb246Ilx1ezFGNTE3fSIsbGFiZWw6IkxpbmsiLHNob3J0Y3V0OiJcdTIzMThLIn1dO3N0YXRpYyByZW5kZXJGb3JtYXR0aW5nTWVudShlLGEpe3JldHVybiB3YAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7ZS55fXB4OyBsZWZ0OiAke2UueH1weDsiCiAgICAgICAgQG1vdXNlZG93bj0iJHtpPT57aS5wcmV2ZW50RGVmYXVsdCgpLGkuc3RvcFByb3BhZ2F0aW9uKCl9fSIKICAgICAgICBAY2xpY2s9IiR7aT0+aS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoaT0+d2AKICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgIGNsYXNzPSJmb3JtYXQtYnV0dG9uICR7aS5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpPT5hKGkuY29tbWFuZCl9IgogICAgICAgICAgICB0aXRsZT0iJHtpLmxhYmVsfSR7aS5zaG9ydGN1dD9gICgke2kuc2hvcnRjdXR9KWA6IiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtpLmNvbW1hbmQ9PT0iY29kZSI/ImNvZGUtaWNvbiI6IiJ9Ij4ke2kuaWNvbn08L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgfXN0YXRpYyBhcHBseUZvcm1hdChlLGEsaSxyKXtsZXQgcztpZihpKXM9aTtlbHNle2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighbnx8bi5yYW5nZUNvdW50PT09MClyZXR1cm4hMTtzPW4uZ2V0UmFuZ2VBdCgwKX1zd2l0Y2goZSl7Y2FzZSJib2xkIjp0aGlzLndyYXBTZWxlY3Rpb24ocywic3Ryb25nIik7YnJlYWs7Y2FzZSJpdGFsaWMiOnRoaXMud3JhcFNlbGVjdGlvbihzLCJlbSIpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjp0aGlzLndyYXBTZWxlY3Rpb24ocywidSIpO2JyZWFrO2Nhc2Uic3RyaWtlVGhyb3VnaCI6dGhpcy53cmFwU2VsZWN0aW9uKHMsInMiKTticmVhaztjYXNlImNvZGUiOnRoaXMud3JhcFNlbGVjdGlvbihzLCJjb2RlIik7YnJlYWs7Y2FzZSJsaW5rIjppZighYSlyZXR1cm4hMTt0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayhzLGEpO2JyZWFrfWlmKHImJnIubGVuZ3RoPjApQmUuc2V0U2VsZWN0aW9uRnJvbVJhbmdlKHMpO2Vsc2V7bGV0IG49d2luZG93LmdldFNlbGVjdGlvbigpO24mJihuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UocykpfXJldHVybiEwfXN0YXRpYyB3cmFwU2VsZWN0aW9uKGUsYSl7bGV0IGk9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFpKXJldHVybjtpZih0aGlzLnNlbGVjdGlvbkNvbnRhaW5zVGFnKGUsYSkpdGhpcy5yZW1vdmVUYWdGcm9tU2VsZWN0aW9uKGUsYSk7ZWxzZXtsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGEpO3RyeXtsZXQgbj1lLmV4dHJhY3RDb250ZW50cygpO3MuYXBwZW5kQ2hpbGQobiksZS5pbnNlcnROb2RlKHMpLGUuc2VsZWN0Tm9kZUNvbnRlbnRzKHMpLGkucmVtb3ZlQWxsUmFuZ2VzKCksaS5hZGRSYW5nZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gd3JhcCBzZWxlY3Rpb246IixuKX19fXN0YXRpYyBzZWxlY3Rpb25Db250YWluc1RhZyhlLGEpe2xldCBpPWUuc3RhcnRDb250YWluZXI7Zm9yKDtpJiZpIT09ZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50Oyl7aWYoaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZpLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITA7aT1pLnBhcmVudE5vZGV9Zm9yKGk9ZS5lbmRDb250YWluZXI7aSYmaSE9PWUuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudDspe2lmKGkubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmaS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1hKXJldHVybiEwO2k9aS5wYXJlbnROb2RlfWxldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9ZS5jbG9uZUNvbnRlbnRzKCk7cmV0dXJuIHIuYXBwZW5kQ2hpbGQocyksci5nZXRFbGVtZW50c0J5VGFnTmFtZShhKS5sZW5ndGg+MH1zdGF0aWMgcmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihlLGEpe2xldCBpPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighaSlyZXR1cm47bGV0IHI9ZS5jbG9uZVJhbmdlKCkscz1lLnN0YXJ0Q29udGFpbmVyLG49bnVsbDtmb3IoO3MmJnMhPT1lLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQ7KXtpZihzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09YSl7bj1zO2JyZWFrfXM9cy5wYXJlbnROb2RlfWxldCBvPWUuZW5kQ29udGFpbmVyLGQ9bnVsbDtmb3IoO28mJm8hPT1lLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQ7KXtpZihvLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09YSl7ZD1vO2JyZWFrfW89by5wYXJlbnROb2RlfW4mJnIuc2V0U3RhcnRCZWZvcmUobiksZCYmci5zZXRFbmRBZnRlcihkKTtsZXQgYz1yLmV4dHJhY3RDb250ZW50cygpLHA9dGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGMsYSk7ci5pbnNlcnROb2RlKHApO2xldCBsPVtdLGY9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihwLE5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwpLGc7Zm9yKDtnPWYubmV4dE5vZGUoKTspbC5wdXNoKGcpO2lmKGwubGVuZ3RoPjApe2xldCB5PWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7eS5zZXRTdGFydChsWzBdLDApLHkuc2V0RW5kKGxbbC5sZW5ndGgtMV0sbFtsLmxlbmd0aC0xXS50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSxpLnJlbW92ZUFsbFJhbmdlcygpLGkuYWRkUmFuZ2UoeSl9fXN0YXRpYyByZW1vdmVUYWdzRnJvbUZyYWdtZW50KGUsYSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5hcHBlbmRDaGlsZChlKTtsZXQgcj1pLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO0FycmF5LmZyb20ocikuZm9yRWFjaChvPT57bGV0IGQ9by5wYXJlbnROb2RlO2lmKGQpe2Zvcig7by5maXJzdENoaWxkOylkLmluc2VydEJlZm9yZShvLmZpcnN0Q2hpbGQsbyk7ZC5yZW1vdmVDaGlsZChvKX19KTtsZXQgbj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKDtpLmZpcnN0Q2hpbGQ7KW4uYXBwZW5kQ2hpbGQoaS5maXJzdENoaWxkKTtyZXR1cm4gbn1zdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKGUsYSl7bGV0IGk9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFpKXJldHVybjt0aGlzLnNlbGVjdGlvbkNvbnRhaW5zVGFnKGUsImEiKSYmKHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihlLCJhIiksaS5yYW5nZUNvdW50PjAmJihlPWkuZ2V0UmFuZ2VBdCgwKSkpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLmhyZWY9YSxyLnRhcmdldD0iX2JsYW5rIixyLnJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI7dHJ5e2xldCBzPWUuZXh0cmFjdENvbnRlbnRzKCk7ci5hcHBlbmRDaGlsZChzKSxlLmluc2VydE5vZGUociksZS5zZWxlY3ROb2RlQ29udGVudHMociksaS5yZW1vdmVBbGxSYW5nZXMoKSxpLmFkZFJhbmdlKGUpfWNhdGNoKHMpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLHMpfX1zdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uZSl7bGV0IGE9QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5lKTtpZihjb25zb2xlLmxvZygiZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMgLSBzZWxlY3Rpb25JbmZvOiIsYSksIWEpcmV0dXJuIGNvbnNvbGUubG9nKCJObyBzZWxlY3Rpb24gaW5mbyBhdmFpbGFibGUiKSxudWxsO2xldCByPUJlLmNyZWF0ZVJhbmdlRnJvbUluZm8oYSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoY29uc29sZS5sb2coIlJhbmdlIHJlY3Q6IixyKSxyLndpZHRoPT09MCYmci5oZWlnaHQ9PT0wKXtpZihjb25zb2xlLmxvZygiUmVjdCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSAwLCB0cnlpbmcgZGlmZmVyZW50IGFwcHJvYWNoIiksImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiaW4gZG9jdW1lbnQpe2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihuJiZuLnJhbmdlQ291bnQ+MCl7bGV0IG89bi5nZXRSYW5nZUF0KDApLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2QudGV4dENvbnRlbnQ9Ilx1MjAwQiIsby5pbnNlcnROb2RlKGQpO2xldCBjPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZC5yZW1vdmUoKSxjLndpZHRoPjB8fGMuaGVpZ2h0PjApe2xldCBwPXt4OmMubGVmdCx5Ok1hdGgubWF4KDQ1LGMudG9wLTQ1KX07cmV0dXJuIGNvbnNvbGUubG9nKCJVc2VkIHNwYW4gdHJpY2sgZm9yIGNvb3JkczoiLHApLHB9fX1yZXR1cm4gbnVsbH1sZXQgcz17eDpyLmxlZnQrci53aWR0aC8yLHk6TWF0aC5tYXgoNDUsci50b3AtNDUpfTtyZXR1cm4gY29uc29sZS5sb2coIlJldHVybmluZyBjb29yZHM6IixzKSxzfX19KTt2YXIgcncsZDQsc3csU1Y9YigoKT0+e3VlKCk7bWkoKTtrVigpO1ZlKCk7cnc9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxkND1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sc3c9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWZvcm1hdHRpbmctbWVudSIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdO3ZhciB5PWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgdj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtLKCldLGQ9W0soKV0sbD1bSygpXSxydyh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJ2aXNpYmxlImluIG0sZ2V0Om09Pm0udmlzaWJsZSxzZXQ6KG0seCk9PnttLnZpc2libGU9eH19LG1ldGFkYXRhOnZ9LG4sbykscncodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6bT0+InBvc2l0aW9uImluIG0sZ2V0Om09Pm0ucG9zaXRpb24sc2V0OihtLHgpPT57bS5wb3NpdGlvbj14fX0sbWV0YWRhdGE6dn0sYyxwKSxydyh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1lbnVaSW5kZXgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOm09PiJtZW51WkluZGV4ImluIG0sZ2V0Om09Pm0ubWVudVpJbmRleCxzZXQ6KG0seCk9PnttLm1lbnVaSW5kZXg9eH19LG1ldGFkYXRhOnZ9LGYsZykscncobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6dn0sbnVsbCxhKSx5PWk9ZS52YWx1ZSx2JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KX1zdGF0aWMgaW5zdGFuY2U7c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHkuaW5zdGFuY2V8fCh5Lmluc3RhbmNlPW5ldyB5LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeS5pbnN0YW5jZSkpLHkuaW5zdGFuY2V9I2U9ZDQodGhpcyxuLCExKTtnZXQgdmlzaWJsZSgpe3JldHVybiB0aGlzLiNlfXNldCB2aXNpYmxlKHYpe3RoaXMuI2U9dn0jdD0oZDQodGhpcyxvKSxkNCh0aGlzLGMse3g6MCx5OjB9KSk7Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHBvc2l0aW9uKHYpe3RoaXMuI3Q9dn0jYT0oZDQodGhpcyxwKSxkNCh0aGlzLGYsMWUzKSk7Z2V0IG1lbnVaSW5kZXgoKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWVudVpJbmRleCh2KXt0aGlzLiNhPXZ9Y2FsbGJhY2s9KGQ0KHRoaXMsZyksbnVsbCk7c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMjYyNjI2Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTBlMGUwIiwiIzQwNDA0MCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgdHJhbnNsYXRlWSg1cHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b24gewogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2YwZjBmMCIsIiMzMzMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDA2NmNjIiwiIzRkOTRmZiIpfTsKICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gdGhpcy52aXNpYmxlPyh0aGlzLnN0eWxlLnpJbmRleD10aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKSx3YAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJmb3JtYXR0aW5nIgogICAgICA+CiAgICAgICAgJHtqcy5mb3JtYXRCdXR0b25zLm1hcCh2PT53YAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHt2LmNvbW1hbmR9IgogICAgICAgICAgICBkYXRhLWNvbW1hbmQ9IiR7di5jb21tYW5kfSIKICAgICAgICAgICAgdGl0bGU9IiR7di5sYWJlbH0ke3Yuc2hvcnRjdXQ/YCAoJHt2LnNob3J0Y3V0fSlgOiIifSIKICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9IiR7di5jb21tYW5kPT09ImNvZGUiPyJjb2RlLWljb24iOiIifSI+JHt2Lmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYCk6d2BgfWFwcGx5Rm9ybWF0KHYpe3RoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodiksdj09PSJsaW5rIiYmdGhpcy5oaWRlKCl9c2hvdyh2LG0pe2NvbnNvbGUubG9nKCJGb3JtYXR0aW5nTWVudS5zaG93IGNhbGxlZDoiLHtwb3NpdGlvbjp2LHZpc2libGU6dGhpcy52aXNpYmxlfSksdGhpcy5wb3NpdGlvbj12LHRoaXMuY2FsbGJhY2s9bSx0aGlzLm1lbnVaSW5kZXg9aDEuZ2V0TmV4dFpJbmRleCgpLGgxLnJlZ2lzdGVyKHRoaXMsdGhpcy5tZW51WkluZGV4KSx0aGlzLnN0eWxlLnpJbmRleD10aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKSx0aGlzLnZpc2libGU9ITB9aGlkZSgpe3RoaXMudmlzaWJsZT0hMSx0aGlzLmNhbGxiYWNrPW51bGwsaDEudW5yZWdpc3Rlcih0aGlzKX11cGRhdGVQb3NpdGlvbih2KXt0aGlzLnBvc2l0aW9uPXZ9Zmlyc3RVcGRhdGVkKCl7dGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHY9PntsZXQgbT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTttJiZtLmNvbnRhaW5zKHYudGFyZ2V0KSYmKHYucHJldmVudERlZmF1bHQoKSx2LnN0b3BQcm9wYWdhdGlvbigpKX0pLHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHY9PntsZXQgeD12LnRhcmdldC5jbG9zZXN0KCIuZm9ybWF0LWJ1dHRvbiIpO2lmKHgpe3YucHJldmVudERlZmF1bHQoKSx2LnN0b3BQcm9wYWdhdGlvbigpO2xldCBNPXguZ2V0QXR0cmlidXRlKCJkYXRhLWNvbW1hbmQiKTtNJiZ0aGlzLmFwcGx5Rm9ybWF0KE0pfX0pLHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHY9PntsZXQgbT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTttJiZtLmNvbnRhaW5zKHYudGFyZ2V0KSYmKHYucHJldmVudERlZmF1bHQoKSx2LnN0b3BQcm9wYWdhdGlvbigpKX0sITApfXN0YXRpY3tkNChpLGEpfX07cmV0dXJuIHk9aX0pKCl9KTt2YXIgUmw9YigoKT0+e3VlKCk7RWEoKTt6VigpO1NWKCl9KTt2YXIgJDgsbnc9YigoKT0+eyQ4PVsiSmF2YVNjcmlwdCIsIlR5cGVTY3JpcHQiLCJQeXRob24iLCJKYXZhIiwiQysrIiwiQyMiLCJHbyIsIlJ1c3QiLCJIVE1MIiwiQ1NTIiwiU1FMIiwiU2hlbGwiLCJKU09OIiwiWUFNTCIsIk1hcmtkb3duIiwiUGxhaW4gVGV4dCJdfSk7dmFyIENWLE1ndD1iKCgpPT57dWUoKTtDVj1RYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgcGFkZGluZzogMjRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjM2YzZjQ2Iil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmZvY3VzLXdpdGhpbiB7CiAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzE4MTgxYiIpfSwgMCAwIDAgNHB4ICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC41KSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIil9OwogICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgfQoKICAvKiBWaXN1YWwgaGludCBmb3IgdGV4dCBzZWxlY3Rpb24gKi8KICAuZWRpdG9yLWNvbnRlbnQ6aG92ZXIgewogICAgY3Vyc29yOiB0ZXh0OwogIH0KCiAgLmVkaXRvci1jb250ZW50IHsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBtaW4taGVpZ2h0OiAxNjBweDsKICAgIG1hcmdpbjogMCAtOHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgfQoKICAuYmxvY2sgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogNHB4IDA7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIG1pbi1oZWlnaHQ6IDEuNmVtOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC8qIEZpcnN0IGFuZCBsYXN0IGJsb2NrcyBkb24ndCBuZWVkIGV4dHJhIHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlcjpmaXJzdC1jaGlsZCAuYmxvY2sgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogIH0KCiAgLmJsb2NrLXdyYXBwZXI6bGFzdC1jaGlsZCAuYmxvY2sgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIC5ibG9jay5zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgb3V0bGluZTogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXJnaW4tbGVmdDogLThweDsKICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgcGFkZGluZy1yaWdodDogOHB4OwogIH0KCiAgLmJsb2NrW2NvbnRlbnRlZGl0YWJsZV0gewogICAgb3V0bGluZTogbm9uZTsKICB9CgogIC5ibG9jay5wYXJhZ3JhcGggewogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiI7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC5ibG9jay5oZWFkaW5nLTEgewogICAgZm9udC1zaXplOiAzMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDEiOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAzMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuYmxvY2suaGVhZGluZy0yIHsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogMS4zOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jay5oZWFkaW5nLTI6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiSGVhZGluZyAyIjsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2suaGVhZGluZy0zOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIkhlYWRpbmcgMyI7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICB9CgogIC5ibG9jay5xdW90ZSB7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQoKICAuYmxvY2sucXVvdGU6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiUXVvdGUiOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQoKICAuY29kZS1ibG9jay1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luOiAyMHB4IDA7CiAgfQoKICAuY29kZS1sYW5ndWFnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICByaWdodDogMDsKICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDAgNHB4OwogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsKICAgIHotaW5kZXg6IDE7CiAgfQoKICAuYmxvY2suY29kZSB7CiAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMxODE4MWIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgcGFkZGluZy10b3A6IDMycHg7IC8qIE1ha2Ugcm9vbSBmb3IgbGFuZ3VhZ2UgaW5kaWNhdG9yICovCiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgb3ZlcmZsb3cteDogYXV0bzsKICB9CgogIC5ibG9jay5jb2RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIi8vIENvZGUgYmxvY2siOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC5ibG9jay5saXN0IHsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9CgogIC5ibG9jay5saXN0IHVsLAogIC5ibG9jay5saXN0IG9sIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDAgMCAwIDI0cHg7CiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwgewogICAgbGlzdC1zdHlsZTogZGlzYzsKICB9CgogIC5ibG9jay5saXN0IG9sIHsKICAgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7CiAgfQoKICAuYmxvY2subGlzdCBsaSB7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLmRpdmlkZXIgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMjBweCAwOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgfQoKICAuYmxvY2suZGl2aWRlciBociB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgbWFyZ2luOiAwOwogIH0KCiAgLnNsYXNoLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICB9CgogIC50b29sYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTQwcHg7CiAgICBsZWZ0OiAwOwogICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBub25lOwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogIH0KCiAgLnRvb2xiYXIudmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgfQoKICAvKiBEcmFnIGFuZCBEcm9wIFN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogIH0KCiAgLyogRW5zdXJlIHByb3BlciBzcGFjaW5nIGNvbnRleHQgZm9yIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgfQoKICAvKiBPdmVycmlkZSBmb3IgaGVhZGluZ3MgZm9sbG93aW5nIG90aGVyIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTIsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0zIHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgfQoKICAvKiBDb2RlIGFuZCBxdW90ZSBibG9ja3MgbmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5jb2RlLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLnF1b3RlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgfQoKICAuZHJhZy1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogLTI4cHg7CiAgICB0b3A6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgY3Vyc29yOiBncmFiOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgfQoKICAuZHJhZy1oYW5kbGU6OmJlZm9yZSB7CiAgICBjb250ZW50OiAi4ouu4ouuIjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAtMnB4OwogIH0KCiAgLmJsb2NrLXdyYXBwZXI6aG92ZXIgLmRyYWctaGFuZGxlIHsKICAgIG9wYWNpdHk6IDE7CiAgfQoKICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzI3MjcyYSIpfTsKICB9CgogIC5kcmFnLWhhbmRsZTphY3RpdmUgewogICAgY3Vyc29yOiBncmFiYmluZzsKICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICB9CgogIC5ibG9jay13cmFwcGVyLmRyYWdnaW5nIHsKICAgIG9wYWNpdHk6IDAuODsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjAwMTsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9CgoKICAvKiBCbG9ja3MgdGhhdCBzaG91bGQgbW92ZSBvdXQgb2YgdGhlIHdheSAqLwogIC5ibG9jay13cmFwcGVyLm1vdmUtZG93biB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tZHJhZy1vZmZzZXQsIDBweCkpOwogIH0KCiAgLmJsb2NrLXdyYXBwZXIubW92ZS11cCB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKSk7CiAgfQoKICAvKiBEcm9wIGluZGljYXRvciAqLwogIC5kcm9wLWluZGljYXRvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgYm9yZGVyOiAycHggZGFzaGVkICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UsIGhlaWdodCAwLjJzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE5OTk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogUmVtb3ZlIG9sZCBkcmFnLW92ZXIgc3R5bGVzICovCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWJlZm9yZSwKICAuYmxvY2std3JhcHBlci5kcmFnLW92ZXItYWZ0ZXIgewogICAgLyogTm8gbG9uZ2VyIG5lZWRlZCwgdXNpbmcgZHJvcCBpbmRpY2F0b3IgaW5zdGVhZCAqLwogIH0KCiAgLmVkaXRvci1jb250ZW50LmRyYWdnaW5nICogewogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAvKiBCbG9jayBTZXR0aW5ncyBCdXR0b24gLSBSZW1vdmVkIGluIGZhdm9yIG9mIGNvbnRleHQgbWVudSAqLwoKICAvKiBUZXh0IFNlbGVjdGlvbiBTdHlsZXMgKi8KICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICBjb2xvcjogaW5oZXJpdDsKICB9CgogIC8qIEZvcm1hdHRpbmcgTWVudSAqLwogIC5mb3JtYXR0aW5nLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICB6LWluZGV4OiAxMDAxOwogICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgZnJvbSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgycHgpOwogICAgfQogICAgdG8gewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgfQoKICAuZm9ybWF0LWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogIH0KCiAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICB9CgogIC8qIEFwcGxpZWQgZm9ybWF0IHN0eWxlcyBpbiBjb250ZW50ICovCiAgLmJsb2NrIHN0cm9uZywKICAuYmxvY2sgYiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBlbSwKICAuYmxvY2sgaSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQoKICAuYmxvY2sgdSB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIC5ibG9jayBzdHJpa2UsCiAgLmJsb2NrIHMgewogICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICBvcGFjaXR5OiAwLjc7CiAgfQoKICAuYmxvY2sgY29kZSB7CiAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBhIHsKICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZTsKICB9CgogIC5ibG9jayBhOmhvdmVyIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICB9CmB9KTt2YXIgTWksX1Y9YigoKT0+e0VhKCk7TWk9Y2xhc3N7c3RhdGljIGVzY2FwZUh0bWwoZSl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEudGV4dENvbnRlbnQ9ZSxhLmlubmVySFRNTH1zdGF0aWMgZm9ybWF0RmlsZVNpemUoZSl7aWYoZT09PTApcmV0dXJuIjAgQnl0ZXMiO2xldCBhPTEwMjQsaT1bIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIl0scj1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGgubG9nKGEpKTtyZXR1cm4gcGFyc2VGbG9hdCgoZS9NYXRoLnBvdyhhLHIpKS50b0ZpeGVkKDIpKSsiICIraVtyXX1zdGF0aWMgZ2V0SHRtbE91dHB1dChlKXtyZXR1cm4gZS5tYXAoYT0+e2xldCBpPWEuY29udGVudC5pbmNsdWRlcygiPCIpJiZhLmNvbnRlbnQuaW5jbHVkZXMoIj4iKT9hLmNvbnRlbnQ6dGhpcy5lc2NhcGVIdG1sKGEuY29udGVudCk7c3dpdGNoKGEudHlwZSl7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiBhLmNvbnRlbnQ/YDxwPiR7aX08L3A+YDoiIjtjYXNlImhlYWRpbmctMSI6cmV0dXJuYDxoMT4ke2l9PC9oMT5gO2Nhc2UiaGVhZGluZy0yIjpyZXR1cm5gPGgyPiR7aX08L2gyPmA7Y2FzZSJoZWFkaW5nLTMiOnJldHVybmA8aDM+JHtpfTwvaDM+YDtjYXNlInF1b3RlIjpyZXR1cm5gPGJsb2NrcXVvdGU+JHtpfTwvYmxvY2txdW90ZT5gO2Nhc2UiY29kZSI6cmV0dXJuYDxwcmU+PGNvZGU+JHt0aGlzLmVzY2FwZUh0bWwoYS5jb250ZW50KX08L2NvZGU+PC9wcmU+YDtjYXNlImxpc3QiOmxldCByPWEuY29udGVudC5zcGxpdChgCmApLmZpbHRlcihkPT5kLnRyaW0oKSk7aWYoci5sZW5ndGg+MCl7bGV0IGQ9YS5tZXRhZGF0YT8ubGlzdFR5cGU9PT0ib3JkZXJlZCI/Im9sIjoidWwiO3JldHVybmA8JHtkfT4ke3IubWFwKGM9PmA8bGk+JHtjfTwvbGk+YCkuam9pbigiIil9PC8ke2R9PmB9cmV0dXJuIiI7Y2FzZSJkaXZpZGVyIjpyZXR1cm4iPGhyPiI7Y2FzZSJpbWFnZSI6bGV0IHM9YS5tZXRhZGF0YT8udXJsO2lmKHMpe2xldCBkPXRoaXMuZXNjYXBlSHRtbChhLmNvbnRlbnR8fCJJbWFnZSIpO3JldHVybmA8aW1nIHNyYz0iJHtzfSIgYWx0PSIke2R9IiAvPmB9cmV0dXJuIiI7Y2FzZSJ5b3V0dWJlIjpsZXQgbj1hLm1ldGFkYXRhPy52aWRlb0lkO3JldHVybiBuP2A8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7bn0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA6IiI7Y2FzZSJtYXJrZG93biI6cmV0dXJuYDxkaXYgY2xhc3M9Im1hcmtkb3duLWNvbnRlbnQiPiR7dGhpcy5lc2NhcGVIdG1sKGEuY29udGVudCl9PC9kaXY+YDtjYXNlImh0bWwiOnJldHVybiBhLmNvbnRlbnQ7Y2FzZSJhdHRhY2htZW50IjpsZXQgbz1hLm1ldGFkYXRhPy5maWxlc3x8W107cmV0dXJuIG8ubGVuZ3RoPjA/YDxkaXYgY2xhc3M9ImF0dGFjaG1lbnRzIj4ke28ubWFwKGQ9PmA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtkLmlkfSI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIke2QuZGF0YX0iIGRvd25sb2FkPSIke2QubmFtZX0iPiR7dGhpcy5lc2NhcGVIdG1sKGQubmFtZSl9PC9hPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtc2l6ZSI+KCR7dGhpcy5mb3JtYXRGaWxlU2l6ZShkLnNpemUpfSk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YDoiIjtkZWZhdWx0OnJldHVybmA8cD4ke2l9PC9wPmB9fSkuZmlsdGVyKGE9PmEhPT0iIikuam9pbihgCmApfXN0YXRpYyBnZXRNYXJrZG93bk91dHB1dChlKXtyZXR1cm4gZS5tYXAoYT0+e3N3aXRjaChhLnR5cGUpe2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gYS5jb250ZW50O2Nhc2UiaGVhZGluZy0xIjpyZXR1cm5gIyAke2EuY29udGVudH1gO2Nhc2UiaGVhZGluZy0yIjpyZXR1cm5gIyMgJHthLmNvbnRlbnR9YDtjYXNlImhlYWRpbmctMyI6cmV0dXJuYCMjIyAke2EuY29udGVudH1gO2Nhc2UicXVvdGUiOnJldHVybmA+ICR7YS5jb250ZW50fWA7Y2FzZSJjb2RlIjpyZXR1cm5gXGBcYFxgCiR7YS5jb250ZW50fQpcYFxgXGBgO2Nhc2UibGlzdCI6bGV0IGk9YS5jb250ZW50LnNwbGl0KGAKYCkuZmlsdGVyKGM9PmMudHJpbSgpKTtyZXR1cm4gYS5tZXRhZGF0YT8ubGlzdFR5cGU9PT0ib3JkZXJlZCI/aS5tYXAoKGMscCk9PmAke3ArMX0uICR7Y31gKS5qb2luKGAKYCk6aS5tYXAoYz0+YC0gJHtjfWApLmpvaW4oYApgKTtjYXNlImRpdmlkZXIiOnJldHVybiItLS0iO2Nhc2UiaW1hZ2UiOmxldCByPWEubWV0YWRhdGE/LnVybCxzPWEuY29udGVudHx8IkltYWdlIjtyZXR1cm4gcj9gIVske3N9XSgke3J9KWA6IiI7Y2FzZSJ5b3V0dWJlIjpsZXQgbj1hLm1ldGFkYXRhPy52aWRlb0lkLG89YS5tZXRhZGF0YT8udXJsfHwobj9gaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PSR7bn1gOiIiKTtyZXR1cm4gbz9gW1lvdVR1YmUgVmlkZW9dKCR7b30pYDoiIjtjYXNlIm1hcmtkb3duIjpyZXR1cm4gYS5jb250ZW50O2Nhc2UiaHRtbCI6cmV0dXJuYDwhLS0gSFRNTCBCbG9jawoke2EuY29udGVudH0KLS0+YDtjYXNlImF0dGFjaG1lbnQiOmxldCBkPWEubWV0YWRhdGE/LmZpbGVzfHxbXTtyZXR1cm4gZC5sZW5ndGg+MD9kLm1hcChjPT5gLSBbJHtjLm5hbWV9XSgke2MuZGF0YX0pYCkuam9pbihgCmApOiIiO2RlZmF1bHQ6cmV0dXJuIGEuY29udGVudH19KS5maWx0ZXIoYT0+YSE9PSIiKS5qb2luKGAKCmApfXN0YXRpYyBwYXJzZUh0bWxUb0Jsb2NrcyhlKXtsZXQgaT1uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGUsInRleHQvaHRtbCIpLHI9W10scz1uPT57aWYobi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiZuLnRleHRDb250ZW50Py50cmltKCkpci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToicGFyYWdyYXBoIixjb250ZW50Om4udGV4dENvbnRlbnQudHJpbSgpfSk7ZWxzZSBpZihuLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2xldCBvPW4sZD1vLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2goZCl7Y2FzZSJwIjpyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJwYXJhZ3JhcGgiLGNvbnRlbnQ6by5pbm5lckhUTUx8fCIifSk7YnJlYWs7Y2FzZSJoMSI6ci5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaGVhZGluZy0xIixjb250ZW50Om8uaW5uZXJIVE1MfHwiIn0pO2JyZWFrO2Nhc2UiaDIiOnIucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImhlYWRpbmctMiIsY29udGVudDpvLmlubmVySFRNTHx8IiJ9KTticmVhaztjYXNlImgzIjpyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJoZWFkaW5nLTMiLGNvbnRlbnQ6by5pbm5lckhUTUx8fCIifSk7YnJlYWs7Y2FzZSJibG9ja3F1b3RlIjpyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJxdW90ZSIsY29udGVudDpvLmlubmVySFRNTHx8IiJ9KTticmVhaztjYXNlInByZSI6Y2FzZSJjb2RlIjpyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJjb2RlIixjb250ZW50Om8udGV4dENvbnRlbnR8fCIifSk7YnJlYWs7Y2FzZSJ1bCI6Y2FzZSJvbCI6bGV0IHA9QXJyYXkuZnJvbShvLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIikpLm1hcChmPT5mLmlubmVySFRNTHx8IiIpLmpvaW4oYApgKTtyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJsaXN0Iixjb250ZW50OnAsbWV0YWRhdGE6e2xpc3RUeXBlOmQ9PT0ib2wiPyJvcmRlcmVkIjoiYnVsbGV0In19KTticmVhaztjYXNlImhyIjpyLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJkaXZpZGVyIixjb250ZW50OiIgIn0pO2JyZWFrO2Nhc2UiaW1nIjpsZXQgbD1vO3IucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImltYWdlIixjb250ZW50OmwuYWx0fHwiIixtZXRhZGF0YTp7dXJsOmwuc3JjfX0pO2JyZWFrO2RlZmF1bHQ6by5jaGlsZE5vZGVzLmZvckVhY2goZj0+cyhmKSl9fX07cmV0dXJuIGkuYm9keS5jaGlsZE5vZGVzLmZvckVhY2gobj0+cyhuKSkscn1zdGF0aWMgcGFyc2VNYXJrZG93blRvQmxvY2tzKGUpe2xldCBhPWUuc3BsaXQoYApgKSxpPVtdLHI9W107Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBuPWFbc107aWYobi5zdGFydHNXaXRoKCIjICIpKWkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImhlYWRpbmctMSIsY29udGVudDpuLnN1YnN0cmluZygyKX0pO2Vsc2UgaWYobi5zdGFydHNXaXRoKCIjIyAiKSlpLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJoZWFkaW5nLTIiLGNvbnRlbnQ6bi5zdWJzdHJpbmcoMyl9KTtlbHNlIGlmKG4uc3RhcnRzV2l0aCgiIyMjICIpKWkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImhlYWRpbmctMyIsY29udGVudDpuLnN1YnN0cmluZyg0KX0pO2Vsc2UgaWYobi5zdGFydHNXaXRoKCI+ICIpKWkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6InF1b3RlIixjb250ZW50Om4uc3Vic3RyaW5nKDIpfSk7ZWxzZSBpZihuLnN0YXJ0c1dpdGgoImBgYCIpKXtsZXQgbz1bXTtmb3IocysrO3M8YS5sZW5ndGgmJiFhW3NdLnN0YXJ0c1dpdGgoImBgYCIpOylvLnB1c2goYVtzXSkscysrO2kucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImNvZGUiLGNvbnRlbnQ6by5qb2luKGAKYCl9KX1lbHNlIGlmKG4ubWF0Y2goL14oXCp8LSkgLykpci5wdXNoKG4uc3Vic3RyaW5nKDIpKSwocz09PWEubGVuZ3RoLTF8fCFhW3MrMV0ubWF0Y2goL14oXCp8LSkgLykpJiYoaS5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToibGlzdCIsY29udGVudDpyLmpvaW4oYApgKSxtZXRhZGF0YTp7bGlzdFR5cGU6ImJ1bGxldCJ9fSkscj1bXSk7ZWxzZSBpZihuLm1hdGNoKC9eXGQrXC4gLykpci5wdXNoKG4ucmVwbGFjZSgvXlxkK1wuIC8sIiIpKSwocz09PWEubGVuZ3RoLTF8fCFhW3MrMV0ubWF0Y2goL15cZCtcLiAvKSkmJihpLnB1c2goe2lkOmBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsOSl9YCx0eXBlOiJsaXN0Iixjb250ZW50OnIuam9pbihgCmApLG1ldGFkYXRhOntsaXN0VHlwZToib3JkZXJlZCJ9fSkscj1bXSk7ZWxzZSBpZihuPT09Ii0tLSJ8fG49PT0iKioqInx8bj09PSJfX18iKWkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6ImRpdmlkZXIiLGNvbnRlbnQ6IiAifSk7ZWxzZSBpZihuLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKSl7bGV0IG89bi5tYXRjaCgvXiFcWyhbXlxdXSopXF1cKChbXlwpXSspXCkkLyk7byYmaS5wdXNoKHtpZDpgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpfWAsdHlwZToiaW1hZ2UiLGNvbnRlbnQ6b1sxXXx8IiIsbWV0YWRhdGE6e3VybDpvWzJdfX0pfWVsc2Ugbi50cmltKCkmJmkucHVzaCh7aWQ6YGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiw5KX1gLHR5cGU6InBhcmFncmFwaCIsY29udGVudDpufSl9cmV0dXJuIGl9fX0pO3ZhciBEMixVcz1iKCgpPT57dWUoKTtFYSgpO19WKCk7RDI9Y2xhc3N7c3RhdGljIHJlbmRlckxpc3RDb250ZW50KGUsYSl7bGV0IGk9ZS5zcGxpdChgCmApLmZpbHRlcihzPT5zLnRyaW0oKSk7aWYoaS5sZW5ndGg9PT0wKXJldHVybiIiO2xldCByPWE/Lmxpc3RUeXBlPT09Im9yZGVyZWQiPyJvbCI6InVsIjtyZXR1cm5gPCR7cn0+JHtpLm1hcChzPT5gPGxpPiR7c308L2xpPmApLmpvaW4oIiIpfTwvJHtyfT5gfXN0YXRpYyByZW5kZXJCbG9jayhlLGEsaSl7aWYoZS50eXBlPT09ImRpdmlkZXIiKXJldHVybiB3YAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJibG9jayBkaXZpZGVyIgogICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtlLmlkfSIKICAgICAgICA+CiAgICAgICAgICA8aHI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7aWYoZS50eXBlPT09Imxpc3QiKXJldHVybiB3YAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJibG9jayBsaXN0ICR7YT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICBAaW5wdXQ9IiR7aS5vbklucHV0fSIKICAgICAgICAgIEBrZXlkb3duPSIke2kub25LZXlEb3dufSIKICAgICAgICAgIEBmb2N1cz0iJHtpLm9uRm9jdXN9IgogICAgICAgICAgQGJsdXI9IiR7aS5vbkJsdXJ9IgogICAgICAgICAgQGNvbXBvc2l0aW9uc3RhcnQ9IiR7aS5vbkNvbXBvc2l0aW9uU3RhcnR9IgogICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2kub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICBAbW91c2V1cD0iJHtzPT57Y29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKSxpLm9uTW91c2VVcCYmaS5vbk1vdXNlVXAocyl9fSIKICAgICAgICAgIC5pbm5lckhUTUw9IiR7dGhpcy5yZW5kZXJMaXN0Q29udGVudChlLmNvbnRlbnQsZS5tZXRhZGF0YSl9IgogICAgICAgID48L2Rpdj4KICAgICAgYDtpZihlLnR5cGU9PT0iY29kZSIpe2xldCBzPWUubWV0YWRhdGE/Lmxhbmd1YWdlfHwicGxhaW4gdGV4dCI7cmV0dXJuIHdgCiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ibG9jay1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1sYW5ndWFnZSI+JHtzfTwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iYmxvY2sgJHtlLnR5cGV9ICR7YT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgICAgICBAaW5wdXQ9IiR7aS5vbklucHV0fSIKICAgICAgICAgICAgQGtleWRvd249IiR7aS5vbktleURvd259IgogICAgICAgICAgICBAZm9jdXM9IiR7aS5vbkZvY3VzfSIKICAgICAgICAgICAgQGJsdXI9IiR7aS5vbkJsdXJ9IgogICAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtpLm9uQ29tcG9zaXRpb25TdGFydH0iCiAgICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtpLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgICAgICBAbW91c2V1cD0iJHtuPT57Y29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKSxpLm9uTW91c2VVcCYmaS5vbk1vdXNlVXAobil9fSIKICAgICAgICAgICAgLnRleHRDb250ZW50PSIke2UuY29udGVudHx8IiJ9IgogICAgICAgICAgPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgfXJldHVybiB3YAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7ZS50eXBlfSAke2E/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIEBpbnB1dD0iJHtpLm9uSW5wdXR9IgogICAgICAgIEBrZXlkb3duPSIke2kub25LZXlEb3dufSIKICAgICAgICBAZm9jdXM9IiR7aS5vbkZvY3VzfSIKICAgICAgICBAYmx1cj0iJHtpLm9uQmx1cn0iCiAgICAgICAgQGNvbXBvc2l0aW9uc3RhcnQ9IiR7aS5vbkNvbXBvc2l0aW9uU3RhcnR9IgogICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtpLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgIEBtb3VzZXVwPSIke3M9Pntjb25zb2xlLmxvZygiQmxvY2sgbW91c2V1cCBldmVudCBmaXJlZCIpLGkub25Nb3VzZVVwJiZpLm9uTW91c2VVcChzKX19IgogICAgICAgIC5pbm5lckhUTUw9IiR7ZS5jb250ZW50fHwiIn0iCiAgICAgID48L2Rpdj4KICAgIGB9c3RhdGljIHNldEN1cnNvclRvRW5kKGUpe2xldCBhPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighYSlyZXR1cm47bGV0IGk9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtpZihlLmNoaWxkTm9kZXMubGVuZ3RoPT09MCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjAwQiIpO2UuYXBwZW5kQ2hpbGQociksaS5zZXRTdGFydChyLDEpLGkuY29sbGFwc2UoITApfWVsc2V7bGV0IHI9dGhpcy5nZXRMYXN0Tm9kZShlKTtyLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/aS5zZXRTdGFydChyLHIudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MCk6aS5zZXRTdGFydEFmdGVyKHIpLGkuY29sbGFwc2UoITApfWEucmVtb3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShpKSxlLnRleHRDb250ZW50PT09Ilx1MjAwQiImJihlLnRleHRDb250ZW50PSIiKX1zdGF0aWMgc2V0Q3Vyc29yVG9TdGFydChlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIWEpcmV0dXJuO2xldCBpPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7aWYoZS5jaGlsZE5vZGVzLmxlbmd0aD09PTApaS5zZXRTdGFydChlLDApLGkuY29sbGFwc2UoITApO2Vsc2V7bGV0IHI9dGhpcy5nZXRGaXJzdE5vZGUoZSk7ci5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP2kuc2V0U3RhcnQociwwKTppLnNldFN0YXJ0QmVmb3JlKHIpLGkuY29sbGFwc2UoITApfWEucmVtb3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShpKX1zdGF0aWMgZ2V0TGFzdE5vZGUoZSl7aWYoZS5jaGlsZE5vZGVzLmxlbmd0aD09PTApcmV0dXJuIGU7bGV0IGE9ZS5jaGlsZE5vZGVzW2UuY2hpbGROb2Rlcy5sZW5ndGgtMV07cmV0dXJuIGEubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERXx8YS5jaGlsZE5vZGVzLmxlbmd0aD09PTA/YTp0aGlzLmdldExhc3ROb2RlKGEpfXN0YXRpYyBnZXRGaXJzdE5vZGUoZSl7aWYoZS5jaGlsZE5vZGVzLmxlbmd0aD09PTApcmV0dXJuIGU7bGV0IGE9ZS5jaGlsZE5vZGVzWzBdO3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREV8fGEuY2hpbGROb2Rlcy5sZW5ndGg9PT0wP2E6dGhpcy5nZXRGaXJzdE5vZGUoYSl9c3RhdGljIGZvY3VzTGlzdEl0ZW0oZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCJsaSIpO2lmKGEpe2EuZm9jdXMoKTtsZXQgaT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLHI9d2luZG93LmdldFNlbGVjdGlvbigpO2kuc2VsZWN0Tm9kZUNvbnRlbnRzKGEpLGkuY29sbGFwc2UoITApLHIucmVtb3ZlQWxsUmFuZ2VzKCksci5hZGRSYW5nZShpKX19fX0pO3ZhciBBOCxUVj1iKCgpPT57RWEoKTtSbCgpO2M0KCk7VXMoKTtBOD1jbGFzc3tjb21wb25lbnQ7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnQ9ZX1jcmVhdGVCbG9jayhlPSJwYXJhZ3JhcGgiLGE9IiIsaSl7cmV0dXJue2lkOlYxLmdlbmVyYXRlQmxvY2tJZCgpLHR5cGU6ZSxjb250ZW50OmEsLi4uaSYme21ldGFkYXRhOml9fX1hc3luYyBpbnNlcnRCbG9ja0FmdGVyKGUsYSxpPSEwKXtsZXQgcj10aGlzLmNvbXBvbmVudC5ibG9ja3Mscz1yLmZpbmRJbmRleChuPT5uLmlkPT09ZS5pZCk7aWYodGhpcy5jb21wb25lbnQuYmxvY2tzPVsuLi5yLnNsaWNlKDAscysxKSxhLC4uLnIuc2xpY2UocysxKV0sdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZil7bGV0IG49dGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtlLmlkfSJdYCk7aWYobil7bGV0IG89dGhpcy5jb21wb25lbnQuY3JlYXRlQmxvY2tFbGVtZW50KGEpO24uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmVuZCIsbyl9fXRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCksaSYmYS50eXBlIT09ImRpdmlkZXIiJiYoYXdhaXQgbmV3IFByb21pc2Uobj0+c2V0VGltZW91dChuLDApKSxhd2FpdCB0aGlzLmZvY3VzQmxvY2soYS5pZCwic3RhcnQiKSl9cmVtb3ZlQmxvY2soZSl7aWYodGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSksdGhpcy5jb21wb25lbnQuYmxvY2tzPXRoaXMuY29tcG9uZW50LmJsb2Nrcy5maWx0ZXIoYT0+YS5pZCE9PWUpLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpe2xldCBhPXRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZX0iXWApO2EmJmEucmVtb3ZlKCl9dGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKX1maW5kQmxvY2soZSl7cmV0dXJuIHRoaXMuY29tcG9uZW50LmJsb2Nrcy5maW5kKGE9PmEuaWQ9PT1lKX1nZXRCbG9ja0luZGV4KGUpe3JldHVybiB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZEluZGV4KGE9PmEuaWQ9PT1lKX1hc3luYyBmb2N1c0Jsb2NrKGUsYT0ic3RhcnQiKXtsZXQgaT10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2V9Il1gKTtpZihpKXtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO3ImJihhd2FpdCBuZXcgUHJvbWlzZShzPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocykpLHIuZm9jdXNXaXRoQ3Vyc29yKGEpKX19dXBkYXRlQmxvY2tDb250ZW50KGUsYSl7bGV0IGk9dGhpcy5maW5kQmxvY2soZSk7aSYmKGkuY29udGVudD1hLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCkpfXRyYW5zZm9ybUJsb2NrKGUsYSxpKXtsZXQgcj10aGlzLmZpbmRCbG9jayhlKTtyJiYodGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSksci50eXBlPWEsci5jb250ZW50PSIiLGkmJihyLm1ldGFkYXRhPWkpLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChlKSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpKX1tb3ZlQmxvY2soZSxhKXtsZXQgaT1bLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXSxyPXRoaXMuZ2V0QmxvY2tJbmRleChlKTtpZihyPT09LTF8fGE8MHx8YT49aS5sZW5ndGgpcmV0dXJuO2xldFtzXT1pLnNwbGljZShyLDEpO2kuc3BsaWNlKGEsMCxzKSx0aGlzLmNvbXBvbmVudC5ibG9ja3M9aSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpfWdldFByZXZpb3VzQmxvY2soZSl7bGV0IGE9dGhpcy5nZXRCbG9ja0luZGV4KGUpO3JldHVybiBhPjA/dGhpcy5jb21wb25lbnQuYmxvY2tzW2EtMV06bnVsbH1nZXROZXh0QmxvY2soZSl7bGV0IGE9dGhpcy5nZXRCbG9ja0luZGV4KGUpO3JldHVybiBhPHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGgtMT90aGlzLmNvbXBvbmVudC5ibG9ja3NbYSsxXTpudWxsfX19KTt2YXIgTTEsWmE9YigoKT0+e00xPWNsYXNze3NldHVwKGUsYSxpKXt9Z2V0U3R5bGVzKCl7cmV0dXJuIiJ9fX0pO3ZhciBpMSx6Z3Q9YigoKT0+e2kxPWNsYXNze3N0YXRpYyBoYW5kbGVycz1uZXcgTWFwO3N0YXRpYyByZWdpc3RlcihlLGEpe3RoaXMuaGFuZGxlcnMuc2V0KGUsYSl9c3RhdGljIGdldEhhbmRsZXIoZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMuZ2V0KGUpfXN0YXRpYyBnZXRBbGxUeXBlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKX19fSk7dmFyIGtndD1iKCgpPT57fSk7dmFyIEQ4LFNndD1iKCgpPT57WmEoKTt1ZSgpO1VzKCk7WnIoKTtEOD1jbGFzcyBleHRlbmRzIE0xe3R5cGU9InBhcmFncmFwaCI7bGFzdEtub3duQ3Vyc29yUG9zaXRpb249MDtsYXN0U2VsZWN0ZWRUZXh0PSIiO3NlbGVjdGlvbkhhbmRsZXI9bnVsbDtyZW5kZXIoZSxhKXtsZXQgaT1hPyIgc2VsZWN0ZWQiOiIiLHI9dGhpcy5nZXRQbGFjZWhvbGRlcigpO3JldHVybmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke2l9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3J9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2UudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGB9c2V0dXAoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFyKXtjb25zb2xlLmVycm9yKCJQYXJhZ3JhcGhCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIHBhcmFncmFwaCBibG9jayBlbGVtZW50IGZvdW5kIik7cmV0dXJufWEuY29udGVudCYmIXIuaW5uZXJIVE1MJiYoci5pbm5lckhUTUw9YS5jb250ZW50KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixzPT57aS5vbklucHV0KHMpO2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pfSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249biksaS5vbktleURvd24ocyl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e2kub25Gb2N1cygpfSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2kub25CbHVyKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCgpPT57aS5vbkNvbXBvc2l0aW9uU3RhcnQoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCgpPT57aS5vbkNvbXBvc2l0aW9uRW5kKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHM9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKSxpLm9uTW91c2VVcD8uKHMpfSksci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e3NldFRpbWVvdXQoKCk9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKX0sMCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249bil9KSx0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlLHIsYSl9c2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsYSxpKXtsZXQgcj0oKT0+e2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighbnx8bi5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IG89bi50b1N0cmluZygpO2lmKG8ubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6aS5pZCxoYXNTZWxlY3Rpb246ITF9KSk7cmV0dXJufWxldCBkPWEuZ2V0Um9vdE5vZGUoKS5ob3N0LHA9ZD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1kPy5zaGFkb3dSb290LGY9W107cCYmZi5wdXNoKHApLGwmJmYucHVzaChsKTtsZXQgZz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFnKXJldHVybjtsZXQgeT1CZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuc3RhcnRDb250YWluZXIpLHY9QmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oYSxnLmVuZENvbnRhaW5lcik7aWYoeXx8dil7aWYobyE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PW87bGV0IG09QmUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhnKSx4PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6by50cmltKCksYmxvY2tJZDppLmlkLHJhbmdlOm0scmVjdDp4LGhhc1NlbGVjdGlvbjohMH0pfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDoiIixibG9ja0lkOmkuaWQsaGFzU2VsZWN0aW9uOiExfSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1yO2xldCBzPWUuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYocyl7bGV0IG49cy5kaXNjb25uZWN0ZWRDYWxsYmFjaztzLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWFzeW5jIGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb25IYW5kbGVyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1udWxsKSxuJiZhd2FpdCBuLmNhbGwocyl9LmJpbmQodGhpcyl9fWRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSxhKXtsZXQgaT1uZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6YSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSk7ZS5kaXNwYXRjaEV2ZW50KGkpfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogUGFyYWdyYXBoIHNwZWNpZmljIHN0eWxlcyAqLwogICAgICAuYmxvY2sucGFyYWdyYXBoIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CiAgICBgfWdldFBsYWNlaG9sZGVyKCl7cmV0dXJuIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiJ9Z2V0TGFzdFRleHROb2RlKGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gZTtmb3IobGV0IGE9ZS5jaGlsZE5vZGVzLmxlbmd0aC0xO2E+PTA7YS0tKXtsZXQgaT10aGlzLmdldExhc3RUZXh0Tm9kZShlLmNoaWxkTm9kZXNbYV0pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9Z2V0Q3Vyc29yUG9zaXRpb24oZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtpZighaSlyZXR1cm4gbnVsbDtsZXQgbj1hPy5jb21wb25lbnQ/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LG89YT8uc2hhZG93Um9vdCxkPVtdO24mJmQucHVzaChuKSxvJiZkLnB1c2gobyk7bGV0IGM9QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5kKTtpZighY3x8IUJlLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGksYy5zdGFydENvbnRhaW5lcikpcmV0dXJuIG51bGw7bGV0IHA9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gcC5zZWxlY3ROb2RlQ29udGVudHMoaSkscC5zZXRFbmQoYy5zdGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0KSxwLnRvU3RyaW5nKCkubGVuZ3RofWdldENvbnRlbnQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtyZXR1cm4gaSYmaS5pbm5lckhUTUx8fCIifXNldENvbnRlbnQoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFyKXJldHVybjtsZXQgcz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09cnx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09cjtyLmlubmVySFRNTD1hLHMmJnIuZm9jdXMoKX1zZXRDdXJzb3JUb1N0YXJ0KGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7aSYmRDIuc2V0Q3Vyc29yVG9TdGFydChpKX1zZXRDdXJzb3JUb0VuZChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2kmJkQyLnNldEN1cnNvclRvRW5kKGkpfWZvY3VzKGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7aSYmKGkuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8aS5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxpLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWkmJmUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCE9PWkmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpLmZvY3VzKCl9KSl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIixpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTtpZighcilyZXR1cm47aWYoci5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxyLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwidHJ1ZSIpLGE9PT0iZW5kIiYmci50ZXh0Q29udGVudCYmci50ZXh0Q29udGVudC5sZW5ndGg+MCl7bGV0IG49d2luZG93LmdldFNlbGVjdGlvbigpO2lmKG4pe2xldCBvPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksZD10aGlzLmdldExhc3RUZXh0Tm9kZShyKXx8cjtkLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/KG8uc2V0U3RhcnQoZCxkLnRleHRDb250ZW50Py5sZW5ndGh8fDApLG8uc2V0RW5kKGQsZC50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSk6KG8uc2VsZWN0Tm9kZUNvbnRlbnRzKGQpLG8uY29sbGFwc2UoITEpKSxuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2Uobyl9fXIuZm9jdXMoKTtsZXQgcz0oKT0+e2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlLGkpOmE9PT0iZW5kIiYmKCFyLnRleHRDb250ZW50fHxyLnRleHRDb250ZW50Lmxlbmd0aD09PTApP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxpKTp0eXBlb2YgYT09Im51bWJlciImJkJlLnNldEN1cnNvclBvc2l0aW9uKHIsYSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1yfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1yP3MoKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXI/cygpOnNldFRpbWVvdXQoKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXIpJiZzKCl9LDEwKX0pfWdldFNwbGl0Q29udGVudChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpO2lmKCFpKXJldHVybiBudWxsO2xldCBuPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3Qsbz1hPy5zaGFkb3dSb290LGQ9W107biYmZC5wdXNoKG4pLG8mJmQucHVzaChvKTtsZXQgYz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmQpO2lmKCFjKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IE09aS50ZXh0Q29udGVudHx8IiIsUz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLE0ubGVuZ3RoKTtyZXR1cm57YmVmb3JlOk0uc3Vic3RyaW5nKDAsUyksYWZ0ZXI6TS5zdWJzdHJpbmcoUyl9fXJldHVybiBudWxsfWlmKCFCZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShpLGMuc3RhcnRDb250YWluZXIpKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IE09aS50ZXh0Q29udGVudHx8IiIsUz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLE0ubGVuZ3RoKTtyZXR1cm57YmVmb3JlOk0uc3Vic3RyaW5nKDAsUyksYWZ0ZXI6TS5zdWJzdHJpbmcoUyl9fXJldHVybiBudWxsfWxldCBwPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSxhKTtpZihwPT09bnVsbHx8cD09PTApcmV0dXJue2JlZm9yZToiIixhZnRlcjppLmlubmVySFRNTH07bGV0IGw9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxmPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bC5zZXRTdGFydChpLDApLGwuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCksZi5zZXRTdGFydChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGYuc2V0RW5kKGksaS5jaGlsZE5vZGVzLmxlbmd0aCk7bGV0IGc9bC5jbG9uZUNvbnRlbnRzKCkseT1mLmNsb25lQ29udGVudHMoKSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3YuYXBwZW5kQ2hpbGQoZyk7bGV0IG09di5pbm5lckhUTUw7di5pbm5lckhUTUw9IiIsdi5hcHBlbmRDaGlsZCh5KTtsZXQgeD12LmlubmVySFRNTDtyZXR1cm57YmVmb3JlOm0sYWZ0ZXI6eH19fX0pO3ZhciBwNCxDZ3Q9YigoKT0+e1phKCk7dWUoKTtVcygpO1pyKCk7cDQ9Y2xhc3MgZXh0ZW5kcyBNMXt0eXBlO2xldmVsO2xhc3RLbm93bkN1cnNvclBvc2l0aW9uPTA7bGFzdFNlbGVjdGVkVGV4dD0iIjtzZWxlY3Rpb25IYW5kbGVyPW51bGw7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLmxldmVsPXBhcnNlSW50KGUuc3BsaXQoIi0iKVsxXSl9cmVuZGVyKGUsYSl7bGV0IGk9YT8iIHNlbGVjdGVkIjoiIixyPXRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtyZXR1cm5gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgaGVhZGluZy0ke3RoaXMubGV2ZWx9JHtpfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgfXNldHVwKGUsYSxpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpZighcil7Y29uc29sZS5lcnJvcigiSGVhZGluZ0Jsb2NrSGFuZGxlci5zZXR1cDogTm8gaGVhZGluZyBibG9jayBlbGVtZW50IGZvdW5kIik7cmV0dXJufWEuY29udGVudCYmIXIuaW5uZXJIVE1MJiYoci5pbm5lckhUTUw9YS5jb250ZW50KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixzPT57aS5vbklucHV0KHMpO2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pfSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249biksaS5vbktleURvd24ocyl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e2kub25Gb2N1cygpfSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2kub25CbHVyKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCgpPT57aS5vbkNvbXBvc2l0aW9uU3RhcnQoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCgpPT57aS5vbkNvbXBvc2l0aW9uRW5kKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHM9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKSxpLm9uTW91c2VVcD8uKHMpfSksci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e3NldFRpbWVvdXQoKCk9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKX0sMCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249bil9KSx0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlLHIsYSl9c2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsYSxpKXtsZXQgcj0oKT0+e2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighbnx8bi5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IG89bi50b1N0cmluZygpO2lmKG8ubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6aS5pZCxoYXNTZWxlY3Rpb246ITF9KSk7cmV0dXJufWxldCBkPWEuZ2V0Um9vdE5vZGUoKS5ob3N0LHA9ZD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1kPy5zaGFkb3dSb290LGY9W107cCYmZi5wdXNoKHApLGwmJmYucHVzaChsKTtsZXQgZz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFnKXJldHVybjtsZXQgeT1CZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuc3RhcnRDb250YWluZXIpLHY9QmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oYSxnLmVuZENvbnRhaW5lcik7aWYoeXx8dil7aWYobyE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PW87bGV0IG09QmUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhnKSx4PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6by50cmltKCksYmxvY2tJZDppLmlkLHJhbmdlOm0scmVjdDp4LGhhc1NlbGVjdGlvbjohMH0pfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDoiIixibG9ja0lkOmkuaWQsaGFzU2VsZWN0aW9uOiExfSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1yO2xldCBzPWEuZ2V0Um9vdE5vZGUoKS5ob3N0O2lmKHMpe2xldCBuPXMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7cy5kaXNjb25uZWN0ZWRDYWxsYmFjaz1hc3luYyBmdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uSGFuZGxlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVyKSx0aGlzLnNlbGVjdGlvbkhhbmRsZXI9bnVsbCksbiYmYXdhaXQgbi5jYWxsKHMpfS5iaW5kKHRoaXMpfX1kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUsYSl7bGV0IGk9bmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIix7ZGV0YWlsOmEsYnViYmxlczohMCxjb21wb3NlZDohMH0pO2UuZGlzcGF0Y2hFdmVudChpKX1nZXRTdHlsZXMoKXtyZXR1cm5gCiAgICAgIC5ibG9jay5oZWFkaW5nLTEgewogICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgbWFyZ2luOiAyNHB4IDAgOHB4IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgICAgICBtYXJnaW46IDIwcHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDAwMDAiLCIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNmZmZmZmYiKX07CiAgICAgIH0KICAgIGB9Z2V0UGxhY2Vob2xkZXIoKXtzd2l0Y2godGhpcy5sZXZlbCl7Y2FzZSAxOnJldHVybiJIZWFkaW5nIDEiO2Nhc2UgMjpyZXR1cm4iSGVhZGluZyAyIjtjYXNlIDM6cmV0dXJuIkhlYWRpbmcgMyI7ZGVmYXVsdDpyZXR1cm4iSGVhZGluZyJ9fWdldExhc3RUZXh0Tm9kZShlKXtpZihlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpcmV0dXJuIGU7Zm9yKGxldCBhPWUuY2hpbGROb2Rlcy5sZW5ndGgtMTthPj0wO2EtLSl7bGV0IGk9dGhpcy5nZXRMYXN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfWdldEN1cnNvclBvc2l0aW9uKGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IG49YT8uY29tcG9uZW50Py5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKT8uc2hhZG93Um9vdCxvPWE/LnNoYWRvd1Jvb3QsZD1bXTtuJiZkLnB1c2gobiksbyYmZC5wdXNoKG8pO2xldCBjPUJlLmdldFNlbGVjdGlvbkluZm8oLi4uZCk7aWYoIWN8fCFCZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShpLGMuc3RhcnRDb250YWluZXIpKXJldHVybiBudWxsO2xldCBwPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmV0dXJuIHAuc2VsZWN0Tm9kZUNvbnRlbnRzKGkpLHAuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCkscC50b1N0cmluZygpLmxlbmd0aH1nZXRDb250ZW50KGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7cmV0dXJuIGkmJmkuaW5uZXJIVE1MfHwiIn1zZXRDb250ZW50KGUsYSxpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpZighcilyZXR1cm47bGV0IHM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXI7ci5pbm5lckhUTUw9YSxzJiZyLmZvY3VzKCl9c2V0Q3Vyc29yVG9TdGFydChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO2kmJkQyLnNldEN1cnNvclRvU3RhcnQoaSl9c2V0Q3Vyc29yVG9FbmQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpJiZEMi5zZXRDdXJzb3JUb0VuZChpKX1mb2N1cyhlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApO2kmJihpLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksaS5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1pJiZlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQhPT1pJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aS5mb2N1cygpfSkpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7aWYoIXIpcmV0dXJuO2lmKHIuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8ci5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxhPT09ImVuZCImJnIudGV4dENvbnRlbnQmJnIudGV4dENvbnRlbnQubGVuZ3RoPjApe2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihuKXtsZXQgbz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGQ9dGhpcy5nZXRMYXN0VGV4dE5vZGUocil8fHI7ZC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFPyhvLnNldFN0YXJ0KGQsZC50ZXh0Q29udGVudD8ubGVuZ3RofHwwKSxvLnNldEVuZChkLGQudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MCkpOihvLnNlbGVjdE5vZGVDb250ZW50cyhkKSxvLmNvbGxhcHNlKCExKSksbi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKG8pfX1yLmZvY3VzKCk7bGV0IHM9KCk9PnthPT09InN0YXJ0Ij90aGlzLnNldEN1cnNvclRvU3RhcnQoZSxpKTphPT09ImVuZCImJighci50ZXh0Q29udGVudHx8ci50ZXh0Q29udGVudC5sZW5ndGg9PT0wKT90aGlzLnNldEN1cnNvclRvRW5kKGUsaSk6dHlwZW9mIGE9PSJudW1iZXIiJiZCZS5zZXRDdXJzb3JQb3NpdGlvbihyLGEpfTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09cnx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09cj9zKCk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1yfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1yP3MoKTpzZXRUaW1lb3V0KCgpPT57KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1yfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1yKSYmcygpfSwxMCl9KX1nZXRTcGxpdENvbnRlbnQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTtpZighaSlyZXR1cm4gbnVsbDtsZXQgbj1hPy5jb21wb25lbnQ/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LG89YT8uc2hhZG93Um9vdCxkPVtdO24mJmQucHVzaChuKSxvJiZkLnB1c2gobyk7bGV0IGM9QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5kKTtpZighYyl7aWYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCBNPWkudGV4dENvbnRlbnR8fCIiLFM9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbixNLmxlbmd0aCk7cmV0dXJue2JlZm9yZTpNLnN1YnN0cmluZygwLFMpLGFmdGVyOk0uc3Vic3RyaW5nKFMpfX1yZXR1cm4gbnVsbH1pZighQmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaSxjLnN0YXJ0Q29udGFpbmVyKSl7aWYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCBNPWkudGV4dENvbnRlbnR8fCIiLFM9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbixNLmxlbmd0aCk7cmV0dXJue2JlZm9yZTpNLnN1YnN0cmluZygwLFMpLGFmdGVyOk0uc3Vic3RyaW5nKFMpfX1yZXR1cm4gbnVsbH1sZXQgcD10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUsYSk7aWYocD09PW51bGx8fHA9PT0wKXJldHVybntiZWZvcmU6IiIsYWZ0ZXI6aS5pbm5lckhUTUx9O2xldCBsPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksZj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2wuc2V0U3RhcnQoaSwwKSxsLnNldEVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGYuc2V0U3RhcnQoYy5zdGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0KSxmLnNldEVuZChpLGkuY2hpbGROb2Rlcy5sZW5ndGgpO2xldCBnPWwuY2xvbmVDb250ZW50cygpLHk9Zi5jbG9uZUNvbnRlbnRzKCksdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt2LmFwcGVuZENoaWxkKGcpO2xldCBtPXYuaW5uZXJIVE1MO3YuaW5uZXJIVE1MPSIiLHYuYXBwZW5kQ2hpbGQoeSk7bGV0IHg9di5pbm5lckhUTUw7cmV0dXJue2JlZm9yZTptLGFmdGVyOnh9fX19KTt2YXIgRTgsX2d0PWIoKCk9PntaYSgpO3VlKCk7VXMoKTtacigpO0U4PWNsYXNzIGV4dGVuZHMgTTF7dHlwZT0icXVvdGUiO2xhc3RLbm93bkN1cnNvclBvc2l0aW9uPTA7bGFzdFNlbGVjdGVkVGV4dD0iIjtzZWxlY3Rpb25IYW5kbGVyPW51bGw7cmVuZGVyKGUsYSl7bGV0IGk9YT8iIHNlbGVjdGVkIjoiIixyPXRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtyZXR1cm5gCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgcXVvdGUke2l9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3J9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2UudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGB9c2V0dXAoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7aWYoIXIpe2NvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7cmV0dXJufWEuY29udGVudCYmIXIuaW5uZXJIVE1MJiYoci5pbm5lckhUTUw9YS5jb250ZW50KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixzPT57aS5vbklucHV0KHMpO2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pfSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249biksaS5vbktleURvd24ocyl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e2kub25Gb2N1cygpfSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+e2kub25CbHVyKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCgpPT57aS5vbkNvbXBvc2l0aW9uU3RhcnQoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCgpPT57aS5vbkNvbXBvc2l0aW9uRW5kKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHM9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKSxpLm9uTW91c2VVcD8uKHMpfSksci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e3NldFRpbWVvdXQoKCk9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKX0sMCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249bil9KSx0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlLHIsYSl9c2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUsYSxpKXtsZXQgcj0oKT0+e2xldCBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighbnx8bi5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IG89bi50b1N0cmluZygpO2lmKG8ubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6aS5pZCxoYXNTZWxlY3Rpb246ITF9KSk7cmV0dXJufWxldCBkPWEuZ2V0Um9vdE5vZGUoKS5ob3N0LHA9ZD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QsbD1kPy5zaGFkb3dSb290LGY9W107cCYmZi5wdXNoKHApLGwmJmYucHVzaChsKTtsZXQgZz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmYpO2lmKCFnKXJldHVybjtsZXQgeT1CZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuc3RhcnRDb250YWluZXIpLHY9QmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oYSxnLmVuZENvbnRhaW5lcik7aWYoeXx8dil7aWYobyE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PW87bGV0IG09QmUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhnKSx4PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6by50cmltKCksYmxvY2tJZDppLmlkLHJhbmdlOm0scmVjdDp4LGhhc1NlbGVjdGlvbjohMH0pfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDoiIixibG9ja0lkOmkuaWQsaGFzU2VsZWN0aW9uOiExfSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1yO2xldCBzPWEuZ2V0Um9vdE5vZGUoKS5ob3N0O2lmKHMpe2xldCBuPXMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7cy5kaXNjb25uZWN0ZWRDYWxsYmFjaz1hc3luYyBmdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uSGFuZGxlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVyKSx0aGlzLnNlbGVjdGlvbkhhbmRsZXI9bnVsbCksbiYmYXdhaXQgbi5jYWxsKHMpfS5iaW5kKHRoaXMpfX1kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUsYSl7bGV0IGk9bmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIix7ZGV0YWlsOmEsYnViYmxlczohMCxjb21wb3NlZDohMH0pO2UuZGlzcGF0Y2hFdmVudChpKX1nZXRTdHlsZXMoKXtyZXR1cm5gCiAgICAgIC8qIFF1b3RlIHNwZWNpZmljIHN0eWxlcyAqLwogICAgICAuYmxvY2sucXVvdGUgewogICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJHtoLmJkVGhlbWUoIiMwMDY2Y2MiLCIjNGQ5NGZmIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM1NTUiLCIjYjBiMGIwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICB9CiAgICBgfWdldFBsYWNlaG9sZGVyKCl7cmV0dXJuIkFkZCBhIHF1b3RlLi4uIn1nZXRDdXJzb3JQb3NpdGlvbihlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7aWYoIWkpcmV0dXJuIG51bGw7bGV0IG49YT8uY29tcG9uZW50Py5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKT8uc2hhZG93Um9vdCxvPWE/LnNoYWRvd1Jvb3QsZD1bXTtuJiZkLnB1c2gobiksbyYmZC5wdXNoKG8pO2xldCBjPUJlLmdldFNlbGVjdGlvbkluZm8oLi4uZCk7aWYoIWN8fCFCZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShpLGMuc3RhcnRDb250YWluZXIpKXJldHVybiBudWxsO2xldCBwPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cmV0dXJuIHAuc2VsZWN0Tm9kZUNvbnRlbnRzKGkpLHAuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCkscC50b1N0cmluZygpLmxlbmd0aH1nZXRDb250ZW50KGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTtyZXR1cm4gaSYmaS5pbm5lckhUTUx8fCIifXNldENvbnRlbnQoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7aWYoIXIpcmV0dXJuO2xldCBzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1yfHxlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1yO3IuaW5uZXJIVE1MPWEscyYmci5mb2N1cygpfXNldEN1cnNvclRvU3RhcnQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2kmJkQyLnNldEN1cnNvclRvU3RhcnQoaSl9c2V0Q3Vyc29yVG9FbmQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2kmJkQyLnNldEN1cnNvclRvRW5kKGkpfWZvY3VzKGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTtpJiYoaS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxpLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwidHJ1ZSIpLGkuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09aSYmZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50IT09aSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2kuZm9jdXMoKX0pKX1mb2N1c1dpdGhDdXJzb3IoZSxhPSJlbmQiLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7aWYoIXIpcmV0dXJuO3IuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8ci5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsInRydWUiKSxyLmZvY3VzKCk7bGV0IHM9KCk9PnthPT09InN0YXJ0Ij90aGlzLnNldEN1cnNvclRvU3RhcnQoZSxpKTphPT09ImVuZCI/dGhpcy5zZXRDdXJzb3JUb0VuZChlLGkpOnR5cGVvZiBhPT0ibnVtYmVyIiYmQmUuc2V0Q3Vyc29yUG9zaXRpb24ocixhKX07ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXI/cygpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXIpJiZzKCl9KX1nZXRTcGxpdENvbnRlbnQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpO2lmKCFpKXJldHVybiBudWxsO2xldCBuPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3Qsbz1hPy5zaGFkb3dSb290LGQ9W107biYmZC5wdXNoKG4pLG8mJmQucHVzaChvKTtsZXQgYz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmQpO2lmKCFjKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IE09aS50ZXh0Q29udGVudHx8IiIsUz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLE0ubGVuZ3RoKTtyZXR1cm57YmVmb3JlOk0uc3Vic3RyaW5nKDAsUyksYWZ0ZXI6TS5zdWJzdHJpbmcoUyl9fXJldHVybiBudWxsfWlmKCFCZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShpLGMuc3RhcnRDb250YWluZXIpKXtpZih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uIT09bnVsbCl7bGV0IE09aS50ZXh0Q29udGVudHx8IiIsUz1NYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLE0ubGVuZ3RoKTtyZXR1cm57YmVmb3JlOk0uc3Vic3RyaW5nKDAsUyksYWZ0ZXI6TS5zdWJzdHJpbmcoUyl9fXJldHVybiBudWxsfWxldCBwPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSxhKTtpZihwPT09bnVsbHx8cD09PTApcmV0dXJue2JlZm9yZToiIixhZnRlcjppLmlubmVySFRNTH07bGV0IGw9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxmPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bC5zZXRTdGFydChpLDApLGwuc2V0RW5kKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCksZi5zZXRTdGFydChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLGYuc2V0RW5kKGksaS5jaGlsZE5vZGVzLmxlbmd0aCk7bGV0IGc9bC5jbG9uZUNvbnRlbnRzKCkseT1mLmNsb25lQ29udGVudHMoKSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3YuYXBwZW5kQ2hpbGQoZyk7bGV0IG09di5pbm5lckhUTUw7di5pbm5lckhUTUw9IiIsdi5hcHBlbmRDaGlsZCh5KTtsZXQgeD12LmlubmVySFRNTDtyZXR1cm57YmVmb3JlOm0sYWZ0ZXI6eH19fX0pO3ZhciBQOCxUZ3Q9YigoKT0+e1phKCk7dWUoKTtacigpO3BhKCk7bncoKTtibygpO1A4PWNsYXNzIGV4dGVuZHMgTTF7dHlwZT0iY29kZSI7aGlnaGxpZ2h0VGltZXI9bnVsbDtoaWdobGlnaHRKcz1udWxsO3JlbmRlcihlLGEpe2xldCBpPWUubWV0YWRhdGE/Lmxhbmd1YWdlfHwidHlwZXNjcmlwdCIscj1lLmNvbnRlbnR8fCIiLHM9ci5zcGxpdChgCmApLmxlbmd0aCxuPSIiO2ZvcihsZXQgZD0xO2Q8PXM7ZCsrKW4rPWA8ZGl2IGNsYXNzPSJsaW5lLW51bWJlciI+JHtkfTwvZGl2PmA7bGV0IG89JDgubWFwKGQ9PntsZXQgYz1kLnRvTG93ZXJDYXNlKCk7cmV0dXJuYDxvcHRpb24gdmFsdWU9IiR7Y30iICR7Yz09PWk/InNlbGVjdGVkIjoiIn0+JHtkfTwvb3B0aW9uPmB9KS5qb2luKCIiKTtyZXR1cm5gCiAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyJHthPyIgc2VsZWN0ZWQiOiIifSIgZGF0YS1sYW5ndWFnZT0iJHtpfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iPgogICAgICAgICAgICAke299CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnV0dG9uIiB0aXRsZT0iQ29weSBjb2RlIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29weS1pY29uIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMCA2Ljc1QzAgNS43ODQuNzg0IDUgMS43NSA1aDEuNWEuNzUuNzUgMCAwMTAgMS41aC0xLjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTEuNWEuNzUuNzUgMCAwMTEuNSAwdjEuNUExLjc1IDEuNzUgMCAwMTkuMjUgMTZoLTcuNUExLjc1IDEuNzUgMCAwMTAgMTQuMjV2LTcuNXoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxLjc1QzUgLjc4NCA1Ljc4NCAwIDYuNzUgMGg3LjVDMTUuMjE2IDAgMTYgLjc4NCAxNiAxLjc1djcuNUExLjc1IDEuNzUgMCAwMTE0LjI1IDExaC03LjVBMS43NSAxLjc1IDAgMDE1IDkuMjV2LTcuNXptMS43NS0uMjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTcuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10ZXh0Ij5Db3B5PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVycyI+JHtufTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250ZW50Ij4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1wcmUiPjxjb2RlIGNsYXNzPSJjb2RlLWVkaXRvciIgCiAgICAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2UudHlwZX0iCiAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKHIpfTwvY29kZT48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9c2V0dXAoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikscz1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpLG49ZS5xdWVyeVNlbGVjdG9yKCIuY29weS1idXR0b24iKSxvPWUucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLXNlbGVjdG9yIik7aWYoIXJ8fCFzKXJldHVybjtvJiZvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYz0+e2xldCBwPWMudGFyZ2V0LnZhbHVlO2EubWV0YWRhdGE9ey4uLmEubWV0YWRhdGEsbGFuZ3VhZ2U6cH0scy5zZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiLHApLGEuY29udGVudCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXImJnRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZSxhKSxpLm9uSW5wdXQmJmkub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSl9KSxuJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixhc3luYygpPT57bGV0IGM9ci50ZXh0Q29udGVudHx8IiI7dHJ5e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGMpO2xldCBwPW4ucXVlcnlTZWxlY3RvcigiLmNvcHktdGV4dCIpLGw9cC50ZXh0Q29udGVudDtwLnRleHRDb250ZW50PSJDb3BpZWQhIixuLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpLHNldFRpbWVvdXQoKCk9PntwLnRleHRDb250ZW50PWwsbi5jbGFzc0xpc3QucmVtb3ZlKCJjb3BpZWQiKX0sMmUzKX1jYXRjaChwKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weToiLHApO2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7bC52YWx1ZT1jLGwuc3R5bGUucG9zaXRpb249ImZpeGVkIixsLnN0eWxlLm9wYWNpdHk9IjAiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobCksbC5zZWxlY3QoKTt0cnl7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTtsZXQgZj1uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKSxnPWYudGV4dENvbnRlbnQ7Zi50ZXh0Q29udGVudD0iQ29waWVkISIsbi5jbGFzc0xpc3QuYWRkKCJjb3BpZWQiKSxzZXRUaW1lb3V0KCgpPT57Zi50ZXh0Q29udGVudD1nLG4uY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIil9LDJlMyl9Y2F0Y2goZil7Y29uc29sZS5lcnJvcigiRmFsbGJhY2sgY29weSBmYWlsZWQ6IixmKX1kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGwpfX0pO2xldCBkPSExO3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT57ZD0hMCxzLmNsYXNzTGlzdC5hZGQoImVkaXRpbmciKTtsZXQgYz1yLnRleHRDb250ZW50fHwiIjtyLnRleHRDb250ZW50PWMscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bGV0IHA9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxsPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyLmZpcnN0Q2hpbGQmJihwLnNldFN0YXJ0KHIuZmlyc3RDaGlsZCwwKSxwLmNvbGxhcHNlKCEwKSxsPy5yZW1vdmVBbGxSYW5nZXMoKSxsPy5hZGRSYW5nZShwKSl9KSxpLm9uRm9jdXMoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PntkPSExLHMuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpLHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZSxhKSxpLm9uQmx1cigpfSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsYz0+e2kub25JbnB1dChjKSx0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGUpLGNsZWFyVGltZW91dCh0aGlzLmhpZ2hsaWdodFRpbWVyKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYz0+e2lmKGMua2V5PT09IlRhYiIpe2MucHJldmVudERlZmF1bHQoKTtsZXQgcD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYocCYmcC5yYW5nZUNvdW50PjApe2xldCBsPXAuZ2V0UmFuZ2VBdCgwKSxmPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgICIpO2wuaW5zZXJ0Tm9kZShmKSxsLnNldFN0YXJ0QWZ0ZXIoZiksbC5zZXRFbmRBZnRlcihmKSxwLnJlbW92ZUFsbFJhbmdlcygpLHAuYWRkUmFuZ2UobCksaS5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKSx0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGUpfXJldHVybn1pZihbIkFycm93TGVmdCIsIkFycm93UmlnaHQiLCJBcnJvd1VwIiwiQXJyb3dEb3duIl0uaW5jbHVkZXMoYy5rZXkpKXtsZXQgcD10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpLGw9ci50ZXh0Q29udGVudD8ubGVuZ3RofHwwO2lmKGMua2V5PT09IkFycm93TGVmdCImJnA9PT0wfHxjLmtleT09PSJBcnJvd1JpZ2h0IiYmcD09PWwpe2kub25LZXlEb3duKGMpO3JldHVybn1pZihjLmtleT09PSJBcnJvd1VwInx8Yy5rZXk9PT0iQXJyb3dEb3duIil7bGV0IGY9KHIudGV4dENvbnRlbnR8fCIiKS5zcGxpdChgCmApLGc9dGhpcy5nZXRDdXJyZW50TGluZUluZGV4KHIpO2lmKGMua2V5PT09IkFycm93VXAiJiZnPT09MHx8Yy5rZXk9PT0iQXJyb3dEb3duIiYmZz09PWYubGVuZ3RoLTEpe2kub25LZXlEb3duKGMpO3JldHVybn19fWkub25LZXlEb3duKGMpfSksci5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsYz0+e2MucHJldmVudERlZmF1bHQoKTtsZXQgcD1jLmNsaXBib2FyZERhdGE/LmdldERhdGEoInRleHQvcGxhaW4iKTtpZihwKXtsZXQgbD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYobCYmbC5yYW5nZUNvdW50PjApe2xldCBmPWwuZ2V0UmFuZ2VBdCgwKTtmLmRlbGV0ZUNvbnRlbnRzKCk7bGV0IGc9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocCk7Zi5pbnNlcnROb2RlKGcpLGYuc2V0U3RhcnRBZnRlcihnKSxmLnNldEVuZEFmdGVyKGcpLGwucmVtb3ZlQWxsUmFuZ2VzKCksbC5hZGRSYW5nZShmKSxpLm9uSW5wdXQobmV3IElucHV0RXZlbnQoImlucHV0IikpLHRoaXMudXBkYXRlTGluZU51bWJlcnMoZSl9fX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsKCk9Pmkub25Db21wb3NpdGlvblN0YXJ0KCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCgpPT5pLm9uQ29tcG9zaXRpb25FbmQoKSksYS5jb250ZW50JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ciYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5hcHBseUhpZ2hsaWdodGluZyhlLGEpfSl9dXBkYXRlTGluZU51bWJlcnMoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSxpPWUucXVlcnlTZWxlY3RvcigiLmxpbmUtbnVtYmVycyIpO2lmKCFhfHwhaSlyZXR1cm47bGV0IG49KGEudGV4dENvbnRlbnR8fCIiKS5zcGxpdChgCmApLmxlbmd0aHx8MSxvPSIiO2ZvcihsZXQgZD0xO2Q8PW47ZCsrKW8rPWA8ZGl2IGNsYXNzPSJsaW5lLW51bWJlciI+JHtkfTwvZGl2PmA7aS5pbm5lckhUTUw9b31nZXRDdXJyZW50TGluZUluZGV4KGUpe2xldCBhPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighYXx8YS5yYW5nZUNvdW50PT09MClyZXR1cm4gMDtsZXQgaT1hLmdldFJhbmdlQXQoMCkscj1pLmNsb25lUmFuZ2UoKTtyZXR1cm4gci5zZWxlY3ROb2RlQ29udGVudHMoZSksci5zZXRFbmQoaS5zdGFydENvbnRhaW5lcixpLnN0YXJ0T2Zmc2V0KSxyLnRvU3RyaW5nKCkuc3BsaXQoYApgKS5sZW5ndGgtMX1hc3luYyBhcHBseUhpZ2hsaWdodGluZyhlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7aWYoIWkpcmV0dXJuO3RoaXMuaGlnaGxpZ2h0SnN8fCh0aGlzLmhpZ2hsaWdodEpzPWF3YWl0ICQyLmdldEluc3RhbmNlKCkubG9hZEhpZ2hsaWdodEpzKCkpO2xldCByPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSkscz1pLnRleHRDb250ZW50fHwiIixuPWEubWV0YWRhdGE/Lmxhbmd1YWdlfHwidHlwZXNjcmlwdCI7dHJ5e2xldCBvPXRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHMse2xhbmd1YWdlOm4saWdub3JlSWxsZWdhbHM6ITB9KTtvLnZhbHVlJiYoaS5pbm5lckhUTUw9by52YWx1ZSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aSYmciE9PW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0JlLnNldEN1cnNvclBvc2l0aW9uKGkscil9KSl9Y2F0Y2gobyl7Y29uc29sZS53YXJuKCJTeW50YXggaGlnaGxpZ2h0aW5nIGZhaWxlZDoiLG8pfX1lc2NhcGVIdG1sKGUpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLnRleHRDb250ZW50PWUsYS5pbm5lckhUTUx9Z2V0Q29udGVudChlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKT8udGV4dENvbnRlbnR8fCIifXNldENvbnRlbnQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpO2lmKGkmJihpLnRleHRDb250ZW50PWEsdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09aSkpe2xldCByPXtpZDppLmRhdGFzZXQuYmxvY2tJZHx8IiIsdHlwZToiY29kZSIsY29udGVudDphLG1ldGFkYXRhOntsYW5ndWFnZTplLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiKXx8InR5cGVzY3JpcHQifX07dGhpcy5hcHBseUhpZ2hsaWdodGluZyhlLHIpfX1nZXRDdXJzb3JQb3NpdGlvbihlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpO2lmKCFhKXJldHVybiBudWxsO2xldCBpPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighaXx8aS5yYW5nZUNvdW50PT09MClyZXR1cm4gbnVsbDtsZXQgcj1pLmdldFJhbmdlQXQoMCk7aWYoIWEuY29udGFpbnMoci5zdGFydENvbnRhaW5lcikpcmV0dXJuIG51bGw7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gcy5zZWxlY3ROb2RlQ29udGVudHMoYSkscy5zZXRFbmQoci5zdGFydENvbnRhaW5lcixyLnN0YXJ0T2Zmc2V0KSxzLnRvU3RyaW5nKCkubGVuZ3RofXNldEN1cnNvclRvU3RhcnQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTthJiZCZS5zZXRDdXJzb3JQb3NpdGlvbihhLDApfXNldEN1cnNvclRvRW5kKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7aWYoYSl7bGV0IGk9YS50ZXh0Q29udGVudD8ubGVuZ3RofHwwO0JlLnNldEN1cnNvclBvc2l0aW9uKGEsaSl9fWZvY3VzKGUpe2UucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik/LmZvY3VzKCl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIil7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTtpJiYoaS5mb2N1cygpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlKTphPT09ImVuZCI/dGhpcy5zZXRDdXJzb3JUb0VuZChlKTp0eXBlb2YgYT09Im51bWJlciImJkJlLnNldEN1cnNvclBvc2l0aW9uKGksYSl9KSl9Z2V0U3BsaXRDb250ZW50KGUpe2xldCBhPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5nZXRDb250ZW50KGUpO3JldHVybntiZWZvcmU6aS5zdWJzdHJpbmcoMCxhKSxhZnRlcjppLnN1YnN0cmluZyhhKX19Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBDb2RlIEJsb2NrIENvbnRhaW5lciAtIE1pbmltYWxpc3Qgc2hhZGNuIHN0eWxlICovCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLmVkaXRpbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyIC0gU2ltcGxpZmllZCAqLwogICAgICAuY29kZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBmb250LWZhbWlseTogJHt0MX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvcHkgQnV0dG9uIC0gTWluaW1hbCAqLwogICAgICAuY29weS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LWZhbWlseTogJHt0MX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbi5jb3BpZWQgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA1OTY2OSIsIiMxMGI5ODEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQogICAgICAKICAgICAgLmNvcHktYnV0dG9uOmhvdmVyIC5jb3B5LWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LXRleHQgewogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQm9keSAqLwogICAgICAuY29kZS1ib2R5IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZhZmFmYSIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExpbmUgTnVtYmVycyAtIFN1YnRsZSAqLwogICAgICAubGluZS1udW1iZXJzIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWluLXdpZHRoOiA0MHB4OwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCA4cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzRiNTU2MyIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtVMH07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogQ29kZSBDb250ZW50ICovCiAgICAgIC5jb2RlLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLXByZSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LWZhbWlseTogJHtVMH07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuY29kZS1lZGl0b3I6ZW1wdHk6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogIi8vIFR5cGUgb3IgcGFzdGUgY29kZSBoZXJlLi4uIjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNGI1NTYzIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBXaGVuIGVkaXRpbmcgKGZvY3VzZWQpLCBzaG93IGdyZXkgdGV4dCB3aXRob3V0IGhpZ2hsaWdodGluZyAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuZWRpdGluZyAuY29kZS1lZGl0b3IgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX0gIWltcG9ydGFudDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLmVkaXRpbmcgLmNvZGUtZWRpdG9yICogewogICAgICAgIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFN5bnRheCBIaWdobGlnaHRpbmcgLSBNdXRlZCBjb2xvcnMgKi8KICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWtleXdvcmQgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXN0cmluZyB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDU5NjY5IiwiIzEwYjk4MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW51bWJlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjN2MzYWVkIiwiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWZ1bmN0aW9uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMyNTYzZWIiLCIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY29tbWVudCB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy12YXJpYWJsZSwKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2VhNTgwYyIsIiNmYjkyM2MiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jbGFzcywKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXRpdGxlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMyNTYzZWIiLCIjNjBhNWZhIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1wYXJhbXMgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjN2MzYWVkIiwiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWxpdGVyYWwgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzdjM2FlZCIsIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1tZXRhIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcHVuY3R1YXRpb24gewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNkMWQ1ZGIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10YWcgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1hdHRyaWJ1dGUgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzI1NjNlYiIsIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci10YWcgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmODcxNzEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci1jbGFzcyB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMjU2M2ViIiwiIzYwYTVmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXNlbGVjdG9yLWlkIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3YzNhZWQiLCIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTZWxlY3Rpb24gKi8KICAgICAgLmNvZGUtZWRpdG9yOjpzZWxlY3Rpb24sCiAgICAgIC5jb2RlLWVkaXRvciAqOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKSIsInJnYmEoOTksIDEwMiwgMjQxLCAwLjMpIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAtIE1pbmltYWwgKi8KICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIGhlaWdodDogNnB4OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICBgfX19KTt2YXIgSTgsTGd0PWIoKCk9PntaYSgpO3VlKCk7VXMoKTtacigpO0k4PWNsYXNzIGV4dGVuZHMgTTF7dHlwZT0ibGlzdCI7bGFzdEtub3duQ3Vyc29yUG9zaXRpb249MDtsYXN0U2VsZWN0ZWRUZXh0PSIiO3NlbGVjdGlvbkhhbmRsZXI9bnVsbDtyZW5kZXIoZSxhKXtsZXQgaT1hPyIgc2VsZWN0ZWQiOiIiLHM9KGUubWV0YWRhdGE/Lmxpc3RUeXBlfHwidW5vcmRlcmVkIik9PT0ib3JkZXJlZCI/Im9sIjoidWwiLG49dGhpcy5yZW5kZXJMaXN0Q29udGVudChlLmNvbnRlbnQsZS5tZXRhZGF0YSk7cmV0dXJuYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIGxpc3Qke2l9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IgogICAgICA+JHtufTwvZGl2PgogICAgYH1yZW5kZXJMaXN0Q29udGVudChlLGEpe2lmKCFlKXJldHVybiI8dWw+PGxpPjwvbGk+PC91bD4iO2xldCByPShhPy5saXN0VHlwZXx8InVub3JkZXJlZCIpPT09Im9yZGVyZWQiPyJvbCI6InVsIixzPWUuc3BsaXQoYApgKS5maWx0ZXIobz0+by50cmltKCkpO2lmKHMubGVuZ3RoPT09MClyZXR1cm5gPCR7cn0+PGxpPjwvbGk+PC8ke3J9PmA7bGV0IG49cy5tYXAobz0+YDxsaT4ke299PC9saT5gKS5qb2luKCIiKTtyZXR1cm5gPCR7cn0+JHtufTwvJHtyfT5gfXNldHVwKGUsYSxpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7aWYoIXIpe2NvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpO3JldHVybn1hLmNvbnRlbnQmJiFyLmlubmVySFRNTCYmKHIuaW5uZXJIVE1MPXRoaXMucmVuZGVyTGlzdENvbnRlbnQoYS5jb250ZW50LGEubWV0YWRhdGEpKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixzPT57aS5vbklucHV0KHMpO2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pfSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixzPT57bGV0IG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlKTtpZihuIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249bikscy5rZXk9PT0iRW50ZXIiJiYhcy5zaGlmdEtleSl7bGV0IG89d2luZG93LmdldFNlbGVjdGlvbigpO2lmKG8mJm8ucmFuZ2VDb3VudD4wKXtsZXQgYz1vLmdldFJhbmdlQXQoMCkuc3RhcnRDb250YWluZXIucGFyZW50RWxlbWVudD8uY2xvc2VzdCgibGkiKTtpZihjJiZjLnRleHRDb250ZW50PT09IiIpe3MucHJldmVudERlZmF1bHQoKSxpLm9uS2V5RG93bihzKTtyZXR1cm59fX1pLm9uS2V5RG93bihzKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT57aS5vbkZvY3VzKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57aS5vbkJsdXIoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsKCk9PntpLm9uQ29tcG9zaXRpb25TdGFydCgpfSksci5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsKCk9PntpLm9uQ29tcG9zaXRpb25FbmQoKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscz0+e2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pLGkub25Nb3VzZVVwPy4ocyl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzPT57c2V0VGltZW91dCgoKT0+e2xldCBuPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZSk7biE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPW4pfSwwKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHM9PntsZXQgbj10aGlzLmdldEN1cnNvclBvc2l0aW9uKGUpO24hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1uKX0pLHRoaXMuc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGUscixhKX1zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZSxhLGkpe2xldCByPSgpPT57bGV0IG49d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCFufHxuLnJhbmdlQ291bnQ9PT0wKXJldHVybjtsZXQgbz1uLnRvU3RyaW5nKCk7aWYoby5sZW5ndGg9PT0wKXt0aGlzLmxhc3RTZWxlY3RlZFRleHQmJih0aGlzLmxhc3RTZWxlY3RlZFRleHQ9IiIsdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGUse3RleHQ6IiIsYmxvY2tJZDppLmlkLGhhc1NlbGVjdGlvbjohMX0pKTtyZXR1cm59bGV0IGQ9YS5nZXRSb290Tm9kZSgpLmhvc3QscD1kPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKT8uc2hhZG93Um9vdCxsPWQ/LnNoYWRvd1Jvb3QsZj1bXTtwJiZmLnB1c2gocCksbCYmZi5wdXNoKGwpO2xldCBnPUJlLmdldFNlbGVjdGlvbkluZm8oLi4uZik7aWYoIWcpcmV0dXJuO2xldCB5PUJlLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGEsZy5zdGFydENvbnRhaW5lciksdj1CZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShhLGcuZW5kQ29udGFpbmVyKTtpZih5fHx2KXtpZihvIT09dGhpcy5sYXN0U2VsZWN0ZWRUZXh0KXt0aGlzLmxhc3RTZWxlY3RlZFRleHQ9bztsZXQgbT1CZS5jcmVhdGVSYW5nZUZyb21JbmZvKGcpLHg9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSx7dGV4dDpvLnRyaW0oKSxibG9ja0lkOmkuaWQscmFuZ2U6bSxyZWN0OngsaGFzU2VsZWN0aW9uOiEwfSl9fWVsc2UgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlLHt0ZXh0OiIiLGJsb2NrSWQ6aS5pZCxoYXNTZWxlY3Rpb246ITF9KSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsciksdGhpcy5zZWxlY3Rpb25IYW5kbGVyPXI7bGV0IHM9YS5nZXRSb290Tm9kZSgpLmhvc3Q7aWYocyl7bGV0IG49cy5kaXNjb25uZWN0ZWRDYWxsYmFjaztzLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWFzeW5jIGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb25IYW5kbGVyJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXIpLHRoaXMuc2VsZWN0aW9uSGFuZGxlcj1udWxsKSxuJiZhd2FpdCBuLmNhbGwocyl9LmJpbmQodGhpcyl9fWRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZSxhKXtsZXQgaT1uZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6YSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSk7ZS5kaXNwYXRjaEV2ZW50KGkpfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYH1nZXRQbGFjZWhvbGRlcigpe3JldHVybiIifWdldEN1cnNvclBvc2l0aW9uKGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFpKXJldHVybiBudWxsO2xldCBuPWE/LmNvbXBvbmVudD8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3Qsbz1hPy5zaGFkb3dSb290LGQ9W107biYmZC5wdXNoKG4pLG8mJmQucHVzaChvKTtsZXQgYz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmQpO2lmKCFjfHwhQmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaSxjLnN0YXJ0Q29udGFpbmVyKSlyZXR1cm4gbnVsbDtsZXQgcD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3JldHVybiBwLnNlbGVjdE5vZGVDb250ZW50cyhpKSxwLnNldEVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpLHAudG9TdHJpbmcoKS5sZW5ndGh9Z2V0Q29udGVudChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTtpZighaSlyZXR1cm4iIjtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7cmV0dXJuIEFycmF5LmZyb20ocikubWFwKG49Pm4udGV4dENvbnRlbnR8fCIiKS5qb2luKGAKYCl9c2V0Q29udGVudChlLGEsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFyKXJldHVybjtsZXQgcz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09cnx8ZS5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50PT09cixvPXIucXVlcnlTZWxlY3RvcigidWwsIG9sIik/LnRhZ05hbWU9PT0iT0wiO3IuaW5uZXJIVE1MPXRoaXMucmVuZGVyTGlzdENvbnRlbnQoYSx7bGlzdFR5cGU6bz8ib3JkZXJlZCI6InVub3JkZXJlZCJ9KSxzJiZyLmZvY3VzKCl9c2V0Q3Vyc29yVG9TdGFydChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTtpZighaSlyZXR1cm47bGV0IHI9aS5xdWVyeVNlbGVjdG9yKCJsaSIpO2lmKHIpe2xldCBzPXRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShyKTtpZihzKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLG89d2luZG93LmdldFNlbGVjdGlvbigpO24uc2V0U3RhcnQocywwKSxuLnNldEVuZChzLDApLG8/LnJlbW92ZUFsbFJhbmdlcygpLG8/LmFkZFJhbmdlKG4pfX19c2V0Q3Vyc29yVG9FbmQoZSxhKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7aWYoIWkpcmV0dXJuO2xldCByPWkucXVlcnlTZWxlY3RvcigibGk6bGFzdC1jaGlsZCIpO2lmKHIpe2xldCBzPXRoaXMuZ2V0TGFzdFRleHROb2RlKHIpO2lmKHMpe2xldCBuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksbz13aW5kb3cuZ2V0U2VsZWN0aW9uKCksZD1zLnRleHRDb250ZW50Py5sZW5ndGh8fDA7bi5zZXRTdGFydChzLGQpLG4uc2V0RW5kKHMsZCksbz8ucmVtb3ZlQWxsUmFuZ2VzKCksbz8uYWRkUmFuZ2Uobil9fX1nZXRGaXJzdFRleHROb2RlKGUpe2lmKGUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gZTtmb3IobGV0IGE9MDthPGUuY2hpbGROb2Rlcy5sZW5ndGg7YSsrKXtsZXQgaT10aGlzLmdldEZpcnN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfWdldExhc3RUZXh0Tm9kZShlKXtpZihlLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpcmV0dXJuIGU7Zm9yKGxldCBhPWUuY2hpbGROb2Rlcy5sZW5ndGgtMTthPj0wO2EtLSl7bGV0IGk9dGhpcy5nZXRMYXN0VGV4dE5vZGUoZS5jaGlsZE5vZGVzW2FdKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfWZvY3VzKGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2kmJihpLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGkuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksaS5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1pJiZlLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQhPT1pJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aS5mb2N1cygpfSkpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpO2lmKCFyKXJldHVybjtyLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fHIuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksci5mb2N1cygpO2xldCBzPSgpPT57YT09PSJzdGFydCI/dGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGUsaSk6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSxpKTp0eXBlb2YgYT09Im51bWJlciImJnRoaXMuc2V0Q3Vyc29yVG9FbmQoZSxpKX07ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXI/cygpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnsoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXJ8fGUuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PXIpJiZzKCl9KX1nZXRTcGxpdENvbnRlbnQoZSxhKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpLG51bGx9fX0pO3ZhciBOOCwkZ3Q9YigoKT0+e1phKCk7dWUoKTtOOD1jbGFzcyBleHRlbmRzIE0xe3R5cGU9ImltYWdlIjtyZW5kZXIoZSxhKXtsZXQgaT1lLm1ldGFkYXRhPy51cmwscj1lLmNvbnRlbnR8fCJJbWFnZSIscz1lLm1ldGFkYXRhPy5sb2FkaW5nO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHthPyIgc2VsZWN0ZWQiOiIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtlLmlkfSIKICAgICAgICAgICBkYXRhLWhhcy1pbWFnZT0iJHshIWl9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke3M/dGhpcy5yZW5kZXJMb2FkaW5nKCk6aT90aGlzLnJlbmRlckltYWdlKGkscik6dGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImltYWdlLWZpbGUtaW5wdXQiIAogICAgICAgICAgICAgICBhY2NlcHQ9ImltYWdlLyoiIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcigpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJJbWFnZShlLGEpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtY29udGFpbmVyIj4KICAgICAgICA8aW1nIHNyYz0iJHtlfSIgYWx0PSIke3RoaXMuZXNjYXBlSHRtbChhKX0iIC8+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJMb2FkaW5nKCl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIikscz1lLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7aWYoIXIpe2NvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBjb250YWluZXIiKTtyZXR1cm59aWYoIXMpe2NvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7cmV0dXJufWxldCBuPXIucXVlcnlTZWxlY3RvcigiLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciIpO24mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG89PntvLnByZXZlbnREZWZhdWx0KCksby5zdG9wUHJvcGFnYXRpb24oKSxjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFBsYWNlaG9sZGVyIGNsaWNrZWQsIG9wZW5pbmcgZmlsZSBzZWxlY3RvciIpLHMuY2xpY2soKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57aS5vbkZvY3VzKCl9KSxzLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYXN5bmMgbz0+e2xldCBjPW8udGFyZ2V0LmZpbGVzPy5bMF07YyYmKGNvbnNvbGUubG9nKCJJbWFnZUJsb2NrSGFuZGxlcjogRmlsZSBzZWxlY3RlZDoiLGMubmFtZSksYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGMsYSxpKSl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixvPT57by5wcmV2ZW50RGVmYXVsdCgpLG8uc3RvcFByb3BhZ2F0aW9uKCksYS5tZXRhZGF0YT8udXJsfHxyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpfSksci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLG89PntvLnByZXZlbnREZWZhdWx0KCksby5zdG9wUHJvcGFnYXRpb24oKSxyLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpfSksci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixhc3luYyBvPT57by5wcmV2ZW50RGVmYXVsdCgpLG8uc3RvcFByb3BhZ2F0aW9uKCksci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTtsZXQgZD1vLmRhdGFUcmFuc2Zlcj8uZmlsZXNbMF07ZCYmZC50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpJiYhYS5tZXRhZGF0YT8udXJsJiZhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZCxhLGkpfSksci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmkub25Gb2N1cygpKSxyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5pLm9uQmx1cigpKSxyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLG89PntpZigoby5rZXk9PT0iRGVsZXRlInx8by5rZXk9PT0iQmFja3NwYWNlIikmJmEubWV0YWRhdGE/LnVybCl7YS5tZXRhZGF0YS51cmw9dm9pZCAwLGEubWV0YWRhdGEubG9hZGluZz0hMSxhLmNvbnRlbnQ9IiIsaS5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTtyZXR1cm59aS5vbktleURvd24obyl9KX1hc3luYyBoYW5kbGVGaWxlVXBsb2FkKGUsYSxpKXtpZihjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFN0YXJ0aW5nIGZpbGUgdXBsb2FkIix7ZmlsZU5hbWU6ZS5uYW1lLGZpbGVTaXplOmUuc2l6ZSxibG9ja0lkOmEuaWR9KSwhZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpKXtjb25zb2xlLmVycm9yKCJJbnZhbGlkIGZpbGUgdHlwZToiLGUudHlwZSk7cmV0dXJufWxldCByPTEwKjEwMjQqMTAyNDtpZihlLnNpemU+cil7Y29uc29sZS5lcnJvcigiRmlsZSB0b28gbGFyZ2UuIE1heGltdW0gc2l6ZSBpcyAxME1CIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLmxvYWRpbmc9ITAsYS5tZXRhZGF0YS5maWxlTmFtZT1lLm5hbWUsYS5tZXRhZGF0YS5maWxlU2l6ZT1lLnNpemUsYS5tZXRhZGF0YS5taW1lVHlwZT1lLnR5cGUsY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKSxpLm9uUmVxdWVzdFVwZGF0ZT8uKCk7dHJ5e2xldCBzPWF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChlKTthLm1ldGFkYXRhLnVybD1zLGEubWV0YWRhdGEubG9hZGluZz0hMTtsZXQgbj1lLm5hbWUucmVwbGFjZSgvXC5bXi8uXSskLywiIik7YS5jb250ZW50PW4sY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIix7aGFzVXJsOiEhYS5tZXRhZGF0YS51cmwsdXJsTGVuZ3RoOnMubGVuZ3RoLGFsdFRleHQ6YS5jb250ZW50fSksaS5vblJlcXVlc3RVcGRhdGU/LigpfWNhdGNoKHMpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IixzKSxhLm1ldGFkYXRhLmxvYWRpbmc9ITEsaS5vblJlcXVlc3RVcGRhdGU/LigpfX1maWxlVG9EYXRhVXJsKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxpKT0+e2xldCByPW5ldyBGaWxlUmVhZGVyO3Iub25sb2FkPXM9PntsZXQgbj1zLnRhcmdldD8ucmVzdWx0O3R5cGVvZiBuPT0ic3RyaW5nIj9hKG4pOmkobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpfSxyLm9uZXJyb3I9aSxyLnJlYWRBc0RhdGFVUkwoZSl9KX1lc2NhcGVIdG1sKGUpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLnRleHRDb250ZW50PWUsYS5pbm5lckhUTUx9Z2V0Q29udGVudChlKXtyZXR1cm4gdGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGUpPy5jb250ZW50fHwiIn1zZXRDb250ZW50KGUsYSl7bGV0IGk9dGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGUpO2kmJihpLmNvbnRlbnQ9YSl9Z2V0QmxvY2tGcm9tRWxlbWVudChlKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIGk/e2lkOmksdHlwZToiaW1hZ2UiLGNvbnRlbnQ6IiIsbWV0YWRhdGE6e319Om51bGx9Z2V0Q3Vyc29yUG9zaXRpb24oZSl7cmV0dXJuIG51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXt0aGlzLmZvY3VzKGUpfXNldEN1cnNvclRvRW5kKGUpe3RoaXMuZm9jdXMoZSl9Zm9jdXMoZSl7ZS5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik/LmZvY3VzKCl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIil7dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7cmV0dXJuIG51bGx9Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBJbWFnZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtoLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBVcGxvYWQgUGxhY2Vob2xkZXIgKi8KICAgICAgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lcjpob3ZlciAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZWZmNmZmIiwiIzFlMWI0YiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnVwbG9hZC1pY29uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtaGludCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEltYWdlIENvbnRhaW5lciAqLwogICAgICAuaW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZhZmFmYSIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtoLmJkVGhlbWUoIiM2MzY2ZjEiLCIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEZpbGUgaW5wdXQgaGlkZGVuICovCiAgICAgIC5pbWFnZS1maWxlLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGB9fX0pO3ZhciBGOCxBZ3Q9YigoKT0+e1phKCk7dWUoKTtGOD1jbGFzcyBleHRlbmRzIE0xe3R5cGU9InlvdXR1YmUiO3JlbmRlcihlLGEpe2xldCBpPWUubWV0YWRhdGE/LnZpZGVvSWQscj1lLm1ldGFkYXRhPy51cmx8fCIiO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIGRhdGEtaGFzLXZpZGVvPSIkeyEhaX0iPgogICAgICAgICR7aT90aGlzLnJlbmRlclZpZGVvKGkpOnRoaXMucmVuZGVyUGxhY2Vob2xkZXIocil9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcihlKXtyZXR1cm5gCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwoZSl9IiAvPgogICAgICAgIDxidXR0b24gY2xhc3M9InlvdXR1YmUtZW1iZWQtYnRuIj5FbWJlZCBWaWRlbzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyVmlkZW8oZSl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJ5b3V0dWJlLWNvbnRhaW5lciI+CiAgICAgICAgPGlmcmFtZSAKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtlfSIKICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIgogICAgICAgICAgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiCiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4KICAgICAgICA+PC9pZnJhbWU+CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTtpZighcilyZXR1cm47aWYoYS5tZXRhZGF0YT8udmlkZW9JZCl7ci5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5pLm9uRm9jdXMoKSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+aS5vbkJsdXIoKSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvPT57KG8ua2V5PT09IkRlbGV0ZSJ8fG8ua2V5PT09IkJhY2tzcGFjZSIpJiZvLnByZXZlbnREZWZhdWx0KCksaS5vbktleURvd24obyl9KTtyZXR1cm59bGV0IHM9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKSxuPWUucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7IXN8fCFufHwocy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmkub25Gb2N1cygpKSxzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5pLm9uQmx1cigpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuZW1iZWRWaWRlbyhzLnZhbHVlLGEsaSl9KSxzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLG89PntvLmtleT09PSJFbnRlciI/KG8ucHJldmVudERlZmF1bHQoKSx0aGlzLmVtYmVkVmlkZW8ocy52YWx1ZSxhLGkpKTpvLmtleT09PSJFc2NhcGUiJiYoby5wcmV2ZW50RGVmYXVsdCgpLHMuYmx1cigpKX0pLHMuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLG89PntzZXRUaW1lb3V0KCgpPT57bGV0IGQ9cy52YWx1ZTt0aGlzLmV4dHJhY3RZb3VUdWJlVmlkZW9JZChkKSYmdGhpcy5lbWJlZFZpZGVvKGQsYSxpKX0sMCl9KSxzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwoKT0+e2EubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLnVybD1zLnZhbHVlfSkpfWVtYmVkVmlkZW8oZSxhLGkpe2xldCByPXRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKGUpO2lmKCFyKXtjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLnZpZGVvSWQ9cixhLm1ldGFkYXRhLnVybD1lLGEuY29udGVudD1gWW91VHViZSBWaWRlbzogJHtyfWAsaS5vblJlcXVlc3RVcGRhdGU/LigpfWV4dHJhY3RZb3VUdWJlVmlkZW9JZChlKXtsZXQgYT1bLyg/OnlvdXR1YmVcLmNvbVwvKD86W15cL10rXC8uK1wvfCg/OnZ8ZSg/Om1iZWQpPylcL3wuKls/Jl12PSl8eW91dHVcLmJlXC8pKFteIiY/XC8gXXsxMX0pLywveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywveW91dHViZVwuY29tXC93YXRjaFw/dj0oW14iJj9cLyBdezExfSkvLC95b3V0dVwuYmVcLyhbXiImP1wvIF17MTF9KS9dO2ZvcihsZXQgaSBvZiBhKXtsZXQgcj1lLm1hdGNoKGkpO2lmKHIpcmV0dXJuIHJbMV19cmV0dXJuIG51bGx9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7cmV0dXJuIHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKT8uY29udGVudHx8IiJ9c2V0Q29udGVudChlLGEpe2xldCBpPXRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKTtpJiYoaS5jb250ZW50PWEpfWdldEJsb2NrRnJvbUVsZW1lbnQoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIGk/e2lkOmksdHlwZToieW91dHViZSIsY29udGVudDoiIixtZXRhZGF0YTp7fX06bnVsbH1nZXRDdXJzb3JQb3NpdGlvbihlKXtyZXR1cm4gbnVsbH1zZXRDdXJzb3JUb1N0YXJ0KGUpe3RoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7dGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi55b3V0dWJlLWJsb2NrLWNvbnRhaW5lciIpLGk9ZS5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTtpP2kuZm9jdXMoKTphJiZhLmZvY3VzKCl9Zm9jdXNXaXRoQ3Vyc29yKGUsYT0iZW5kIil7dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7cmV0dXJuIG51bGx9Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBZb3VUdWJlIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2guYmRUaGVtZSgiIzYzNjZmMSIsIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFlvdVR1YmUgUGxhY2Vob2xkZXIgKi8KICAgICAgLnlvdXR1YmUtcGxhY2Vob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDMycHggMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmFmYWZhIiwiIzBhMGEwYSIpfTsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNkYzI2MjYiLCIjZWY0NDQ0Iil9OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzExMTgyNyIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzZiNzI4MCIsIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS11cmwtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMTExODI3Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiMwMDAwMDAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWNvbnRhaW5lciBpZnJhbWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQogICAgYH19fSk7dmFyIE84LERndD1iKCgpPT57WmEoKTt1ZSgpO084PWNsYXNzIGV4dGVuZHMgTTF7dHlwZT0iYXR0YWNobWVudCI7cmVuZGVyKGUsYSl7bGV0IGk9ZS5tZXRhZGF0YT8uZmlsZXN8fFtdO3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWljb24iPlx1ezFGNENFfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC10aXRsZSI+RmlsZSBBdHRhY2htZW50czwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtbGlzdCI+CiAgICAgICAgICAke2kubGVuZ3RoPjA/dGhpcy5yZW5kZXJGaWxlcyhpKTp0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIAogICAgICAgICAgICAgICBjbGFzcz0iYXR0YWNobWVudC1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgbXVsdGlwbGUgCiAgICAgICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgLz4KICAgICAgICAke2kubGVuZ3RoPjA/JzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPic6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcigpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1wbGFjZWhvbGRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+Q2xpY2sgdG8gYWRkIGZpbGVzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItaGludCI+b3IgZHJhZyBhbmQgZHJvcDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyRmlsZXMoZSl7cmV0dXJuIGUubWFwKGE9PmAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7YS5pZH0iPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtaWNvbiI+JHt0aGlzLmdldEZpbGVJY29uKGEudHlwZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbmFtZSI+JHt0aGlzLmVzY2FwZUh0bWwoYS5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtc2l6ZSI+JHt0aGlzLmZvcm1hdEZpbGVTaXplKGEuc2l6ZSl9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVtb3ZlLWZpbGUiIGRhdGEtZmlsZS1pZD0iJHthLmlkfSI+XHhENzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGApLmpvaW4oIiIpfXNldHVwKGUsYSxpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciIpLHM9ZS5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1maWxlLWlucHV0Iik7aWYoIXJ8fCFzKXtjb25zb2xlLmVycm9yKCJBdHRhY2htZW50QmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCByZXF1aXJlZCBlbGVtZW50cyIpO3JldHVybn1hLm1ldGFkYXRhfHwoYS5tZXRhZGF0YT17fSksYS5tZXRhZGF0YS5maWxlc3x8KGEubWV0YWRhdGEuZmlsZXM9W10pO2xldCBuPXIucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiKTtuJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixkPT57ZC5wcmV2ZW50RGVmYXVsdCgpLGQuc3RvcFByb3BhZ2F0aW9uKCkscy5jbGljaygpfSk7bGV0IG89ci5xdWVyeVNlbGVjdG9yKCIuYWRkLW1vcmUtZmlsZXMiKTtvJiZvLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixkPT57ZC5wcmV2ZW50RGVmYXVsdCgpLGQuc3RvcFByb3BhZ2F0aW9uKCkscy5jbGljaygpfSkscy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGFzeW5jIGQ9PntsZXQgYz1kLnRhcmdldCxwPWMuZmlsZXM7cCYmcC5sZW5ndGg+MCYmKGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKHAsYSxpKSxjLnZhbHVlPSIiKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGQ9PntsZXQgYz1kLnRhcmdldDtpZihjLmNsYXNzTGlzdC5jb250YWlucygicmVtb3ZlLWZpbGUiKSl7ZC5wcmV2ZW50RGVmYXVsdCgpLGQuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IHA9Yy5nZXRBdHRyaWJ1dGUoImRhdGEtZmlsZS1pZCIpO3AmJnRoaXMucmVtb3ZlRmlsZShwLGEsaSl9fSksci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsZD0+e2QucHJldmVudERlZmF1bHQoKSxkLnN0b3BQcm9wYWdhdGlvbigpLHIuY2xhc3NMaXN0LmFkZCgiZHJhZy1vdmVyIil9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsZD0+e2QucHJldmVudERlZmF1bHQoKSxkLnN0b3BQcm9wYWdhdGlvbigpLHIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIil9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLGFzeW5jIGQ9PntkLnByZXZlbnREZWZhdWx0KCksZC5zdG9wUHJvcGFnYXRpb24oKSxyLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpO2xldCBjPWQuZGF0YVRyYW5zZmVyPy5maWxlcztjJiZjLmxlbmd0aD4wJiZhd2FpdCB0aGlzLmhhbmRsZUZpbGVBdHRhY2htZW50cyhjLGEsaSl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+aS5vbkZvY3VzKCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pmkub25CbHVyKCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZD0+e2lmKChkLmtleT09PSJEZWxldGUifHxkLmtleT09PSJCYWNrc3BhY2UiKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXImJmEubWV0YWRhdGE/LmZpbGVzPy5sZW5ndGg+MCl7ZC5wcmV2ZW50RGVmYXVsdCgpLGEubWV0YWRhdGEuZmlsZXM9W10saS5vblJlcXVlc3RVcGRhdGU/LigpO3JldHVybn1pLm9uS2V5RG93bihkKX0pfWFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhlLGEsaSl7YS5tZXRhZGF0YXx8KGEubWV0YWRhdGE9e30pLGEubWV0YWRhdGEuZmlsZXN8fChhLm1ldGFkYXRhLmZpbGVzPVtdKTtmb3IobGV0IHIgb2YgQXJyYXkuZnJvbShlKSl0cnl7bGV0IHM9YXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKHIpLG49e2lkOnRoaXMuZ2VuZXJhdGVJZCgpLG5hbWU6ci5uYW1lLHNpemU6ci5zaXplLHR5cGU6ci50eXBlLGRhdGE6c307YS5tZXRhZGF0YS5maWxlcy5wdXNoKG4pfWNhdGNoKHMpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBhdHRhY2ggZmlsZToiLHIubmFtZSxzKX1hLmNvbnRlbnQ9YCR7YS5tZXRhZGF0YS5maWxlcy5sZW5ndGh9IGZpbGUke2EubWV0YWRhdGEuZmlsZXMubGVuZ3RoIT09MT8icyI6IiJ9IGF0dGFjaGVkYCxpLm9uUmVxdWVzdFVwZGF0ZT8uKCl9cmVtb3ZlRmlsZShlLGEsaSl7YS5tZXRhZGF0YT8uZmlsZXMmJihhLm1ldGFkYXRhLmZpbGVzPWEubWV0YWRhdGEuZmlsZXMuZmlsdGVyKHI9PnIuaWQhPT1lKSxhLmNvbnRlbnQ9YS5tZXRhZGF0YS5maWxlcy5sZW5ndGg+MD9gJHthLm1ldGFkYXRhLmZpbGVzLmxlbmd0aH0gZmlsZSR7YS5tZXRhZGF0YS5maWxlcy5sZW5ndGghPT0xPyJzIjoiIn0gYXR0YWNoZWRgOiIiLGkub25SZXF1ZXN0VXBkYXRlPy4oKSl9ZmlsZVRvRGF0YVVybChlKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsaSk9PntsZXQgcj1uZXcgRmlsZVJlYWRlcjtyLm9ubG9hZD1zPT57bGV0IG49cy50YXJnZXQ/LnJlc3VsdDt0eXBlb2Ygbj09InN0cmluZyI/YShuKTppKG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlYWQgZmlsZSIpKX0sci5vbmVycm9yPWksci5yZWFkQXNEYXRhVVJMKGUpfSl9Z2V0RmlsZUljb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiaW1hZ2UvIik/Ilx1ezFGNUJDfVx1RkUwRiI6ZS5zdGFydHNXaXRoKCJ2aWRlby8iKT8iXHV7MUYzQTV9IjplLnN0YXJ0c1dpdGgoImF1ZGlvLyIpPyJcdXsxRjNCNX0iOmUuaW5jbHVkZXMoInBkZiIpPyJcdXsxRjRDNH0iOmUuaW5jbHVkZXMoInppcCIpfHxlLmluY2x1ZGVzKCJyYXIiKXx8ZS5pbmNsdWRlcygidGFyIik/Ilx1ezFGNUM0fVx1RkUwRiI6ZS5pbmNsdWRlcygic2hlZXQiKT8iXHV7MUY0Q0F9IjplLmluY2x1ZGVzKCJkb2N1bWVudCIpfHxlLmluY2x1ZGVzKCJtc3dvcmQiKT8iXHV7MUY0RER9IjplLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKT8iXHV7MUY0Q0J9IjplLmluY2x1ZGVzKCJ0ZXh0Iik/Ilx1ezFGNEMzfSI6Ilx1ezFGNEMxfSJ9Zm9ybWF0RmlsZVNpemUoZSl7aWYoZT09PTApcmV0dXJuIjAgQnl0ZXMiO2xldCBhPTEwMjQsaT1bIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIl0scj1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGgubG9nKGEpKTtyZXR1cm4gcGFyc2VGbG9hdCgoZS9NYXRoLnBvdyhhLHIpKS50b0ZpeGVkKDIpKSsiICIraVtyXX1nZW5lcmF0ZUlkKCl7cmV0dXJuYGZpbGUtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7cmV0dXJuIHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKT8uY29udGVudHx8IiJ9c2V0Q29udGVudChlLGEpe2xldCBpPXRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlKTtpJiYoaS5jb250ZW50PWEpfWdldEJsb2NrRnJvbUVsZW1lbnQoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIGk/e2lkOmksdHlwZToiYXR0YWNobWVudCIsY29udGVudDoiIixtZXRhZGF0YTp7fX06bnVsbH1nZXRDdXJzb3JQb3NpdGlvbihlKXtyZXR1cm4gbnVsbH1zZXRDdXJzb3JUb1N0YXJ0KGUpe3RoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7dGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtlLnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciIpPy5mb2N1cygpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIpe3RoaXMuZm9jdXMoZSl9Z2V0U3BsaXRDb250ZW50KGUpe3JldHVybiBudWxsfWdldFN0eWxlcygpe3JldHVybmAKICAgICAgLyogQXR0YWNobWVudCBCbG9jayBDb250YWluZXIgKi8KICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzYzNjZmMSIsIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1oaW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2YzZjRmNiIsIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZmlsZS1zaXplIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZSB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZWUyZTIiLCIjOTkxYjFiIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNmY2E1YTUiLCIjZGMyNjI2Iil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2RjMjYyNiIsIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgIH0KICAgICAgCiAgICAgIC5hZGQtbW9yZS1maWxlczpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIaWRkZW4gZmlsZSBpbnB1dCAqLwogICAgICAuYXR0YWNobWVudC1maWxlLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGB9fX0pO3ZhciBSOCxFZ3Q9YigoKT0+e1phKCk7dWUoKTtSOD1jbGFzcyBleHRlbmRzIE0xe3R5cGU9ImRpdmlkZXIiO3JlbmRlcihlLGEpe3JldHVybmAKICAgICAgPGRpdiBjbGFzcz0iYmxvY2sgZGl2aWRlciR7YT8iIHNlbGVjdGVkIjoiIn0iIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iIGRhdGEtYmxvY2stdHlwZT0iJHtlLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGB9c2V0dXAoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmJsb2NrLmRpdmlkZXIiKTtyJiYoci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscz0+e3Muc3RvcFByb3BhZ2F0aW9uKCksci5mb2N1cygpLGkub25Gb2N1cz8uKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+e2kub25Gb2N1cz8uKCl9KSxyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT57aS5vbkJsdXI/LigpfSksci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixzPT57KHMua2V5PT09IkJhY2tzcGFjZSJ8fHMua2V5PT09IkRlbGV0ZSIpJiZzLnByZXZlbnREZWZhdWx0KCksaS5vbktleURvd24/LihzKX0pKX1nZXRTdHlsZXMoKXtyZXR1cm5gCiAgICAgIC5ibG9jay5kaXZpZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmJsb2NrLmRpdmlkZXI6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4wNSkiLCJyZ2JhKDc3LCAxNDgsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjIpIiwicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTBlMGUwIiwiIzMzMyIpfTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGB9fX0pO3ZhciBCOCxQZ3Q9YigoKT0+e1phKCk7dWUoKTtCOD1jbGFzcyBleHRlbmRzIE0xe3R5cGU9Im1hcmtkb3duIjtyZW5kZXIoZSxhKXtsZXQgaT1lLm1ldGFkYXRhPy5pc0VkaXRNb2RlPz8hMCxyPWUuY29udGVudHx8IiI7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1ibG9jay1jb250YWluZXIke2E/IiBzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2UuaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke2l9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7aT8iUHJldmlldyI6IkVkaXQifSI+CiAgICAgICAgICAgICR7aT8iXHV7MUY0NDF9XHVGRTBGIjoiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWNvbnRlbnQiPgogICAgICAgICAgJHtpP3RoaXMucmVuZGVyRWRpdG9yKHIpOnRoaXMucmVuZGVyUHJldmlldyhyKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlckVkaXRvcihlKXtyZXR1cm5gCiAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ibWFya2Rvd24tZWRpdG9yIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBtYXJrZG93biBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGUpfTwvdGV4dGFyZWE+CiAgICBgfXJlbmRlclByZXZpZXcoZSl7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1wcmV2aWV3Ij4KICAgICAgICAke3RoaXMucGFyc2VNYXJrZG93bihlKXx8JzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYH1zZXR1cChlLGEsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tYmxvY2stY29udGFpbmVyIikscz1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpO2lmKCFyfHwhcyl7Y29uc29sZS5lcnJvcigiTWFya2Rvd25CbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7cmV0dXJufWEubWV0YWRhdGF8fChhLm1ldGFkYXRhPXt9KSxhLm1ldGFkYXRhLmlzRWRpdE1vZGU9PT12b2lkIDAmJihhLm1ldGFkYXRhLmlzRWRpdE1vZGU9ITApLHMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG49PntpZihuLnByZXZlbnREZWZhdWx0KCksbi5zdG9wUHJvcGFnYXRpb24oKSxhLm1ldGFkYXRhLmlzRWRpdE1vZGUpe2xldCBvPXIucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO28mJihhLmNvbnRlbnQ9by52YWx1ZSl9YS5tZXRhZGF0YS5pc0VkaXRNb2RlPSFhLm1ldGFkYXRhLmlzRWRpdE1vZGUsaS5vblJlcXVlc3RVcGRhdGU/LigpfSksYS5tZXRhZGF0YS5pc0VkaXRNb2RlP3RoaXMuc2V0dXBFZGl0b3IoZSxhLGkpOnRoaXMuc2V0dXBQcmV2aWV3KGUsYSxpKX1zZXR1cEVkaXRvcihlLGEsaSl7bGV0IHI9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7ciYmKHIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5pLm9uRm9jdXMoKSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+aS5vbkJsdXIoKSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKCk9PnthLmNvbnRlbnQ9ci52YWx1ZX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscz0+e2lmKHMua2V5PT09IlRhYiIpe3MucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLnNlbGVjdGlvblN0YXJ0LG89ci5zZWxlY3Rpb25FbmQsZD1yLnZhbHVlO2lmKHMuc2hpZnRLZXkpe2xldCBsPWQuc3Vic3RyaW5nKDAsbikubGFzdEluZGV4T2YoYApgKSsxLGY9ZC5zdWJzdHJpbmcobCxuKTtmLnN0YXJ0c1dpdGgoIiAgIikmJihyLnZhbHVlPWQuc3Vic3RyaW5nKDAsbCkrZi5zdWJzdHJpbmcoMikrZC5zdWJzdHJpbmcobiksci5zZWxlY3Rpb25TdGFydD1yLnNlbGVjdGlvbkVuZD1uLTIpfWVsc2Ugci52YWx1ZT1kLnN1YnN0cmluZygwLG4pKyIgICIrZC5zdWJzdHJpbmcobyksci5zZWxlY3Rpb25TdGFydD1yLnNlbGVjdGlvbkVuZD1uKzI7YS5jb250ZW50PXIudmFsdWU7cmV0dXJufWlmKChzLmN0cmxLZXl8fHMubWV0YUtleSkmJnMua2V5PT09ImIiKXtzLnByZXZlbnREZWZhdWx0KCksdGhpcy53cmFwU2VsZWN0aW9uKHIsIioqIiwiKioiKSxhLmNvbnRlbnQ9ci52YWx1ZTtyZXR1cm59aWYoKHMuY3RybEtleXx8cy5tZXRhS2V5KSYmcy5rZXk9PT0iaSIpe3MucHJldmVudERlZmF1bHQoKSx0aGlzLndyYXBTZWxlY3Rpb24ociwiXyIsIl8iKSxhLmNvbnRlbnQ9ci52YWx1ZTtyZXR1cm59aWYoKHMuY3RybEtleXx8cy5tZXRhS2V5KSYmcy5rZXk9PT0iayIpe3MucHJldmVudERlZmF1bHQoKSx0aGlzLmluc2VydExpbmsociksYS5jb250ZW50PXIudmFsdWU7cmV0dXJufWkub25LZXlEb3duKHMpfSksdGhpcy5hdXRvUmVzaXplKHIpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT50aGlzLmF1dG9SZXNpemUocikpKX1zZXR1cFByZXZpZXcoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpLHM9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tcHJldmlldyIpOyFyfHwhc3x8KHMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSxzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+aS5vbkZvY3VzKCkpLHMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pmkub25CbHVyKCkpLHMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbj0+e2lmKG4ua2V5PT09IkVudGVyIiYmIW4uc2hpZnRLZXkpe24ucHJldmVudERlZmF1bHQoKSxhLm1ldGFkYXRhLmlzRWRpdE1vZGU9ITAsaS5vblJlcXVlc3RVcGRhdGU/LigpO3JldHVybn1pLm9uS2V5RG93bihuKX0pKX13cmFwU2VsZWN0aW9uKGUsYSxpKXtsZXQgcj1lLnNlbGVjdGlvblN0YXJ0LHM9ZS5zZWxlY3Rpb25FbmQsbj1lLnZhbHVlLnN1YnN0cmluZyhyLHMpLG89YSsobnx8InRleHQiKStpO2UudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxyKStvK2UudmFsdWUuc3Vic3RyaW5nKHMpLG4/KGUuc2VsZWN0aW9uU3RhcnQ9cixlLnNlbGVjdGlvbkVuZD1yK28ubGVuZ3RoKTooZS5zZWxlY3Rpb25TdGFydD1yK2EubGVuZ3RoLGUuc2VsZWN0aW9uRW5kPXIrYS5sZW5ndGgrNCksZS5mb2N1cygpfWluc2VydExpbmsoZSl7bGV0IGE9ZS5zZWxlY3Rpb25TdGFydCxpPWUuc2VsZWN0aW9uRW5kLHM9ZS52YWx1ZS5zdWJzdHJpbmcoYSxpKXx8ImxpbmsgdGV4dCIsbj1gWyR7c31dKHVybClgO2UudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxhKStuK2UudmFsdWUuc3Vic3RyaW5nKGkpLGUuc2VsZWN0aW9uU3RhcnQ9YStzLmxlbmd0aCszLGUuc2VsZWN0aW9uRW5kPWErcy5sZW5ndGgrNixlLmZvY3VzKCl9YXV0b1Jlc2l6ZShlKXtlLnN0eWxlLmhlaWdodD0iYXV0byIsZS5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxIZWlnaHQrInB4In1wYXJzZU1hcmtkb3duKGUpe2xldCBhPXRoaXMuZXNjYXBlSHRtbChlKTtyZXR1cm4gYT1hLnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sIjxoMz4kMTwvaDM+IiksYT1hLnJlcGxhY2UoL14jIyAoLispJC9nbSwiPGgyPiQxPC9oMj4iKSxhPWEucmVwbGFjZSgvXiMgKC4rKSQvZ20sIjxoMT4kMTwvaDE+IiksYT1hLnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywiPHN0cm9uZz4kMTwvc3Ryb25nPiIpLGE9YS5yZXBsYWNlKC9fXyguKz8pX18vZywiPHN0cm9uZz4kMTwvc3Ryb25nPiIpLGE9YS5yZXBsYWNlKC9cKiguKz8pXCovZywiPGVtPiQxPC9lbT4iKSxhPWEucmVwbGFjZSgvXyguKz8pXy9nLCI8ZW0+JDE8L2VtPiIpLGE9YS5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csIjxwcmU+PGNvZGU+JDE8L2NvZGU+PC9wcmU+IiksYT1hLnJlcGxhY2UoL2AoLis/KWAvZywiPGNvZGU+JDE8L2NvZGU+IiksYT1hLnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csJzxhIGhyZWY9IiQyIj4kMTwvYT4nKSxhPWEucmVwbGFjZSgvXlwqICguKykkL2dtLCI8bGk+JDE8L2xpPiIpLGE9YS5yZXBsYWNlKC9eLSAoLispJC9nbSwiPGxpPiQxPC9saT4iKSxhPWEucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCI8bGk+JDE8L2xpPiIpLGE9YS5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZyxpPT4iPHVsPiIraSsiPC91bD4iKSxhPWEucmVwbGFjZSgvXG5cbi9nLCI8L3A+PHA+IiksYT0iPHA+IithKyI8L3A+IixhPWEucmVwbGFjZSgvPHA+PFwvcD4vZywiIiksYT1hLnJlcGxhY2UoLzxwPig8aFsxLTNdPikvZywiJDEiKSxhPWEucmVwbGFjZSgvKDxcL2hbMS0zXT4pPFwvcD4vZywiJDEiKSxhPWEucmVwbGFjZSgvPHA+KDx1bD4pL2csIiQxIiksYT1hLnJlcGxhY2UoLyg8XC91bD4pPFwvcD4vZywiJDEiKSxhPWEucmVwbGFjZSgvPHA+KDxwcmU+KS9nLCIkMSIpLGE9YS5yZXBsYWNlKC8oPFwvcHJlPik8XC9wPi9nLCIkMSIpLGF9ZXNjYXBlSHRtbChlKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS50ZXh0Q29udGVudD1lLGEuaW5uZXJIVE1MfWdldENvbnRlbnQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7aWYoYSlyZXR1cm4gYS52YWx1ZTtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7cmV0dXJuIiJ9c2V0Q29udGVudChlLGEpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2kmJihpLnZhbHVlPWEsdGhpcy5hdXRvUmVzaXplKGkpKX1nZXRDdXJzb3JQb3NpdGlvbihlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtyZXR1cm4gYT9hLnNlbGVjdGlvblN0YXJ0Om51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTthPyhhLnNlbGVjdGlvblN0YXJ0PWEuc2VsZWN0aW9uRW5kPTAsYS5mb2N1cygpKTp0aGlzLmZvY3VzKGUpfXNldEN1cnNvclRvRW5kKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2lmKGEpe2xldCBpPWEudmFsdWUubGVuZ3RoO2Euc2VsZWN0aW9uU3RhcnQ9YS5zZWxlY3Rpb25FbmQ9aSxhLmZvY3VzKCl9ZWxzZSB0aGlzLmZvY3VzKGUpfWZvY3VzKGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpO2E/YS5mb2N1cygpOmUucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKT8uZm9jdXMoKX1mb2N1c1dpdGhDdXJzb3IoZSxhPSJlbmQiKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtpP2E9PT0ic3RhcnQiP3RoaXMuc2V0Q3Vyc29yVG9TdGFydChlKTphPT09ImVuZCI/dGhpcy5zZXRDdXJzb3JUb0VuZChlKTp0eXBlb2YgYT09Im51bWJlciImJihpLnNlbGVjdGlvblN0YXJ0PWkuc2VsZWN0aW9uRW5kPWEsaS5mb2N1cygpKTp0aGlzLmZvY3VzKGUpfWdldFNwbGl0Q29udGVudChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgaT1hLnNlbGVjdGlvblN0YXJ0O3JldHVybntiZWZvcmU6YS52YWx1ZS5zdWJzdHJpbmcoMCxpKSxhZnRlcjphLnZhbHVlLnN1YnN0cmluZyhpKX19Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBNYXJrZG93biBCbG9jayBDb250YWluZXIgKi8KICAgICAgLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLm1hcmtkb3duLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXRvZ2dsZS1tb2RlIHsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXRvZ2dsZS1tb2RlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2YzZjRmNiIsIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbnRlbnQgKi8KICAgICAgLm1hcmtkb3duLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5tYXJrZG93bi1lZGl0b3IgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLWVkaXRvcjo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLyogTWFya2Rvd24gcHJldmlldyBzdHlsZXMgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTZweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxMnB4IDAgNHB4IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgcCB7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgdWwsCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IG9sIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHByZSBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBzdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgYSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2YjcyODAiLCIjOWNhM2FmIil9OwogICAgICB9CiAgICBgfX19KTt2YXIgSDgsSWd0PWIoKCk9PntaYSgpO3VlKCk7SDg9Y2xhc3MgZXh0ZW5kcyBNMXt0eXBlPSJodG1sIjtyZW5kZXIoZSxhKXtsZXQgaT1lLm1ldGFkYXRhPy5pc0VkaXRNb2RlPz8hMCxyPWUuY29udGVudHx8IiI7cmV0dXJuYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7YT8iIHNlbGVjdGVkIjoiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7ZS5pZH0iCiAgICAgICAgICAgZGF0YS1lZGl0LW1vZGU9IiR7aX0iPgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtaWNvbiI+Jmx0Oy8mZ3Q7PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJodG1sLXRpdGxlIj5IVE1MPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJodG1sLXRvZ2dsZS1tb2RlIiB0aXRsZT0iJHtpPyJQcmV2aWV3IjoiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpPyJcdXsxRjQ0MX1cdUZFMEYiOiJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1jb250ZW50Ij4KICAgICAgICAgICR7aT90aGlzLnJlbmRlckVkaXRvcihyKTp0aGlzLnJlbmRlclByZXZpZXcocil9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJFZGl0b3IoZSl7cmV0dXJuYAogICAgICA8dGV4dGFyZWEgY2xhc3M9Imh0bWwtZWRpdG9yIiAKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJFbnRlciBIVE1MIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoZSl9PC90ZXh0YXJlYT4KICAgIGB9cmVuZGVyUHJldmlldyhlKXtyZXR1cm5gCiAgICAgIDxkaXYgY2xhc3M9Imh0bWwtcHJldmlldyI+CiAgICAgICAgJHtlfHwnPGRpdiBjbGFzcz0icHJldmlldy1lbXB0eSI+Tm8gY29udGVudCB0byBwcmV2aWV3PC9kaXY+J30KICAgICAgPC9kaXY+CiAgICBgfXNldHVwKGUsYSxpKXtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWJsb2NrLWNvbnRhaW5lciIpLHM9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC10b2dnbGUtbW9kZSIpO2lmKCFyfHwhcyl7Y29uc29sZS5lcnJvcigiSHRtbEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTtyZXR1cm59YS5tZXRhZGF0YXx8KGEubWV0YWRhdGE9e30pLGEubWV0YWRhdGEuaXNFZGl0TW9kZT09PXZvaWQgMCYmKGEubWV0YWRhdGEuaXNFZGl0TW9kZT0hMCkscy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsbj0+e2lmKG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpLGEubWV0YWRhdGEuaXNFZGl0TW9kZSl7bGV0IG89ci5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtvJiYoYS5jb250ZW50PW8udmFsdWUpfWEubWV0YWRhdGEuaXNFZGl0TW9kZT0hYS5tZXRhZGF0YS5pc0VkaXRNb2RlLGkub25SZXF1ZXN0VXBkYXRlPy4oKX0pLGEubWV0YWRhdGEuaXNFZGl0TW9kZT90aGlzLnNldHVwRWRpdG9yKGUsYSxpKTp0aGlzLnNldHVwUHJldmlldyhlLGEsaSl9c2V0dXBFZGl0b3IoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7ciYmKHIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5pLm9uRm9jdXMoKSksci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwoKT0+aS5vbkJsdXIoKSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKCk9PnthLmNvbnRlbnQ9ci52YWx1ZSx0aGlzLnZhbGlkYXRlSHRtbChyLnZhbHVlKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscz0+e2lmKHMua2V5PT09IlRhYiIpe3MucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLnNlbGVjdGlvblN0YXJ0LG89ci5zZWxlY3Rpb25FbmQsZD1yLnZhbHVlO2lmKHMuc2hpZnRLZXkpe2xldCBsPWQuc3Vic3RyaW5nKDAsbikubGFzdEluZGV4T2YoYApgKSsxLGY9ZC5zdWJzdHJpbmcobCxuKTtmLnN0YXJ0c1dpdGgoIiAgIikmJihyLnZhbHVlPWQuc3Vic3RyaW5nKDAsbCkrZi5zdWJzdHJpbmcoMikrZC5zdWJzdHJpbmcobiksci5zZWxlY3Rpb25TdGFydD1yLnNlbGVjdGlvbkVuZD1uLTIpfWVsc2Ugci52YWx1ZT1kLnN1YnN0cmluZygwLG4pKyIgICIrZC5zdWJzdHJpbmcobyksci5zZWxlY3Rpb25TdGFydD1yLnNlbGVjdGlvbkVuZD1uKzI7YS5jb250ZW50PXIudmFsdWU7cmV0dXJufWlmKChzLmN0cmxLZXl8fHMubWV0YUtleSkmJnMua2V5PT09Ii8iKXtzLnByZXZlbnREZWZhdWx0KCksdGhpcy5hdXRvQ2xvc2VUYWcociksYS5jb250ZW50PXIudmFsdWU7cmV0dXJufWkub25LZXlEb3duKHMpfSksdGhpcy5hdXRvUmVzaXplKHIpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCgpPT50aGlzLmF1dG9SZXNpemUocikpKX1zZXR1cFByZXZpZXcoZSxhLGkpe2xldCByPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIikscz1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXByZXZpZXciKTshcnx8IXN8fChzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIikscy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmkub25Gb2N1cygpKSxzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5pLm9uQmx1cigpKSxzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLG49PntpZihuLmtleT09PSJFbnRlciImJiFuLnNoaWZ0S2V5KXtuLnByZXZlbnREZWZhdWx0KCksYS5tZXRhZGF0YS5pc0VkaXRNb2RlPSEwLGkub25SZXF1ZXN0VXBkYXRlPy4oKTtyZXR1cm59aS5vbktleURvd24obil9KSx0aGlzLnNhbmRib3hDb250ZW50KHMpKX1hdXRvQ2xvc2VUYWcoZSl7bGV0IGE9ZS5zZWxlY3Rpb25TdGFydCxpPWUudmFsdWUscj1hO2Zvcig7cj4wJiZpW3ItMV0hPT0iPCI7KXItLTtpZihyPjApe2xldCBuPWkuc3Vic3RyaW5nKHIsYSkubWF0Y2goL14oXHcrKS8pO2lmKG4pe2xldCBkPWA8LyR7blsxXX0+YDtlLnZhbHVlPWkuc3Vic3RyaW5nKDAsYSkrIj4iK2QraS5zdWJzdHJpbmcoYSksZS5zZWxlY3Rpb25TdGFydD1lLnNlbGVjdGlvbkVuZD1hKzF9fX1hdXRvUmVzaXplKGUpe2Uuc3R5bGUuaGVpZ2h0PSJhdXRvIixlLnN0eWxlLmhlaWdodD1lLnNjcm9sbEhlaWdodCsicHgifXZhbGlkYXRlSHRtbChlKXtsZXQgYT1bXSxpPS88XC8/KFthLXpBLVpdW2EtekEtWjAtOV0qKVxiW14+XSo+L2cscjtmb3IoOyhyPWkuZXhlYyhlKSkhPT1udWxsOyl7bGV0IHM9clswXS5zdGFydHNXaXRoKCI8LyIpLG49clsxXS50b0xvd2VyQ2FzZSgpO2lmKHMpe2lmKGEubGVuZ3RoPT09MHx8YVthLmxlbmd0aC0xXSE9PW4pcmV0dXJuIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHtufWApLCExO2EucG9wKCl9ZWxzZSByWzBdLmVuZHNXaXRoKCIvPiIpfHxhLnB1c2gobil9cmV0dXJuIGEubGVuZ3RoPjA/KGNvbnNvbGUud2FybihgVW5jbG9zZWQgdGFnczogJHthLmpvaW4oIiwgIil9YCksITEpOiEwfXNhbmRib3hDb250ZW50KGUpe2UucXVlcnlTZWxlY3RvckFsbCgic2NyaXB0IikuZm9yRWFjaChzPT5zLnJlbW92ZSgpKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKS5mb3JFYWNoKHM9PntBcnJheS5mcm9tKHMuYXR0cmlidXRlcykuZm9yRWFjaChuPT57bi5uYW1lLnN0YXJ0c1dpdGgoIm9uIikmJnMucmVtb3ZlQXR0cmlidXRlKG4ubmFtZSl9KX0pLGUucXVlcnlTZWxlY3RvckFsbCgiZm9ybSIpLmZvckVhY2gocz0+e3MuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixuPT57bi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCl9KX0pfWVzY2FwZUh0bWwoZSl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEudGV4dENvbnRlbnQ9ZSxhLmlubmVySFRNTH1nZXRDb250ZW50KGUpe2xldCBhPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7aWYoYSlyZXR1cm4gYS52YWx1ZTtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTtyZXR1cm4iIn1zZXRDb250ZW50KGUsYSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtpJiYoaS52YWx1ZT1hLHRoaXMuYXV0b1Jlc2l6ZShpKSl9Z2V0Q3Vyc29yUG9zaXRpb24oZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtyZXR1cm4gYT9hLnNlbGVjdGlvblN0YXJ0Om51bGx9c2V0Q3Vyc29yVG9TdGFydChlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpO2E/KGEuc2VsZWN0aW9uU3RhcnQ9YS5zZWxlY3Rpb25FbmQ9MCxhLmZvY3VzKCkpOnRoaXMuZm9jdXMoZSl9c2V0Q3Vyc29yVG9FbmQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtpZihhKXtsZXQgaT1hLnZhbHVlLmxlbmd0aDthLnNlbGVjdGlvblN0YXJ0PWEuc2VsZWN0aW9uRW5kPWksYS5mb2N1cygpfWVsc2UgdGhpcy5mb2N1cyhlKX1mb2N1cyhlKXtsZXQgYT1lLnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpO2E/YS5mb2N1cygpOmUucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpPy5mb2N1cygpfWZvY3VzV2l0aEN1cnNvcihlLGE9ImVuZCIpe2xldCBpPWUucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7aT9hPT09InN0YXJ0Ij90aGlzLnNldEN1cnNvclRvU3RhcnQoZSk6YT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoZSk6dHlwZW9mIGE9PSJudW1iZXIiJiYoaS5zZWxlY3Rpb25TdGFydD1pLnNlbGVjdGlvbkVuZD1hLGkuZm9jdXMoKSk6dGhpcy5mb2N1cyhlKX1nZXRTcGxpdENvbnRlbnQoZSl7bGV0IGE9ZS5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgaT1hLnNlbGVjdGlvblN0YXJ0O3JldHVybntiZWZvcmU6YS52YWx1ZS5zdWJzdHJpbmcoMCxpKSxhZnRlcjphLnZhbHVlLnN1YnN0cmluZyhpKX19Z2V0U3R5bGVzKCl7cmV0dXJuYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzc0MTUxIiwiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10b2dnbGUtbW9kZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNkMWQ1ZGIiLCIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMWYyOTM3IiwiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1lZGl0b3I6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBQcmV2aWV3ICovCiAgICAgIC5odG1sLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzFmMjkzNyIsIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmI3MjgwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLyogU2FuZGJveGVkIEhUTUwgcHJldmlldyBzdHlsZXMgKi8KICAgICAgLmh0bWwtcHJldmlldyAqIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgaW1nIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgYSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0aCwKICAgICAgLmh0bWwtcHJldmlldyB0ZCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMxZjI5MzciKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjNmNGY2IiwiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGB9fX0pO3ZhciBMVj1iKCgpPT57WmEoKTt6Z3QoKTtrZ3QoKTtTZ3QoKTtDZ3QoKTtfZ3QoKTtUZ3QoKTtMZ3QoKTskZ3QoKTtBZ3QoKTtEZ3QoKTtFZ3QoKTtQZ3QoKTtJZ3QoKX0pO2Z1bmN0aW9uIE5ndCgpe2kxLnJlZ2lzdGVyKCJkaXZpZGVyIixuZXcgUjgpLGkxLnJlZ2lzdGVyKCJwYXJhZ3JhcGgiLG5ldyBEOCksaTEucmVnaXN0ZXIoImhlYWRpbmctMSIsbmV3IHA0KCJoZWFkaW5nLTEiKSksaTEucmVnaXN0ZXIoImhlYWRpbmctMiIsbmV3IHA0KCJoZWFkaW5nLTIiKSksaTEucmVnaXN0ZXIoImhlYWRpbmctMyIsbmV3IHA0KCJoZWFkaW5nLTMiKSksaTEucmVnaXN0ZXIoInF1b3RlIixuZXcgRTgpLGkxLnJlZ2lzdGVyKCJjb2RlIixuZXcgUDgpLGkxLnJlZ2lzdGVyKCJsaXN0IixuZXcgSTgpLGkxLnJlZ2lzdGVyKCJpbWFnZSIsbmV3IE44KSxpMS5yZWdpc3RlcigieW91dHViZSIsbmV3IEY4KSxpMS5yZWdpc3RlcigiYXR0YWNobWVudCIsbmV3IE84KSxpMS5yZWdpc3RlcigibWFya2Rvd24iLG5ldyBCOCksaTEucmVnaXN0ZXIoImh0bWwiLG5ldyBIOCl9dmFyICRWPWIoKCk9PntMVigpO05ndCgpfSk7dmFyIHE4LEFWPWIoKCk9Pnt1ZSgpO1owKCk7RWEoKTtjNCgpO253KCk7cTg9Y2xhc3N7c3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgYT1udWxsO2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IlNlbGVjdCBQcm9ncmFtbWluZyBMYW5ndWFnZSIsY29udGVudDp3YAogICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAubGFuZ3VhZ2UtY29udGFpbmVyIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxhbmd1YWdlLWdyaWQgewogICAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpOwogICAgICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHggOHB4OwogICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiIzFmMjkzNyIpfTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjZDFkNWRiIiwiIzRiNTU2MyIpfTsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uLnNlbGVjdGVkIHsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2YzZjRmNiIsIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMTExODI3IiwiI2Y5ZmFmYiIpfTsKICAgICAgICAgICAgfQogICAgICAgICAgPC9zdHlsZT4KICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWdyaWQiPgogICAgICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoaT0+d2AKICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHthPT09aS50b0xvd2VyQ2FzZSgpPyJzZWxlY3RlZCI6IiJ9IiAKICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpPT57YT1pLnRvTG93ZXJDYXNlKCk7bGV0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpO3ImJnR5cGVvZiByLmRlc3Ryb3k9PSJmdW5jdGlvbiImJnIuZGVzdHJveSgpLGUoYSl9fSI+CiAgICAgICAgICAgICAgICAgICR7aX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAsbWVudU9wdGlvbnM6W3tuYW1lOiJDYW5jZWwiLGFjdGlvbjphc3luYyBpPT57aS5kZXN0cm95KCksZShudWxsKX19XX0pfSl9c3RhdGljIGFzeW5jIHNob3dCbG9ja1NldHRpbmdzTW9kYWwoZSxhKXtsZXQgaT13YAogICAgICA8c3R5bGU+CiAgICAgICAgLnNldHRpbmdzLWNvbnRhaW5lciB7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KICAgICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAuc2V0dGluZ3Mtc2VjdGlvbjpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1sYWJlbCB7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNmI3MjgwIiwiIzljYTNhZiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNjBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzNzQxNTEiLCIjZTVlN2ViIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2YzZjRmNiIsIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZiNzI4MCIpfTsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzExMTgyNyIsIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWljb24gewogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5nZXRCbG9ja1R5cGVTZWxlY3RvcihlLGEpfQogICAgICAgICR7ZS50eXBlPT09ImNvZGUiP3RoaXMuZ2V0Q29kZUJsb2NrU2V0dGluZ3MoZSxhKToiIn0KICAgICAgPC9kaXY+CiAgICBgO2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkJsb2NrIFNldHRpbmdzIixjb250ZW50OmksbWVudU9wdGlvbnM6W3tuYW1lOiJEb25lIixhY3Rpb246YXN5bmMgcj0+e3IuZGVzdHJveSgpfX1dfSl9c3RhdGljIGdldENvZGVCbG9ja1NldHRpbmdzKGUsYSl7bGV0IGk9ZS5tZXRhZGF0YT8ubGFuZ3VhZ2V8fCJqYXZhc2NyaXB0IjtyZXR1cm4gd2AKICAgICAgPHN0eWxlPgogICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxMDBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDZweDsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICBwYWRkaW5nOiA4cHggNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzM3NDE1MSIsIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiI2QxZDVkYiIsIiM0YjU1NjMiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmM2Y0ZjYiLCIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzljYTNhZiIsIiM2YjcyODAiKX07CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxMTE4MjciLCIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPlByb2dyYW1taW5nIExhbmd1YWdlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZ3JpZCI+CiAgICAgICAgICAke3RoaXMuZ2V0TGFuZ3VhZ2VzKCkubWFwKHI9PndgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9Imxhbmd1YWdlLWJ1dHRvbiAke2k9PT1yLnRvTG93ZXJDYXNlKCk/InNlbGVjdGVkIjoiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKT0+e2UubWV0YWRhdGF8fChlLm1ldGFkYXRhPXt9KSxlLm1ldGFkYXRhLmxhbmd1YWdlPXIudG9Mb3dlckNhc2UoKSxhKGUpO2xldCBzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwiKTtzJiZ0eXBlb2Ygcy5kZXN0cm95PT0iZnVuY3Rpb24iJiZzLmRlc3Ryb3koKX19IgogICAgICAgICAgICAgIGRhdGEtbGFuZz0iJHtyfSIKICAgICAgICAgICAgPiR7cn08L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9c3RhdGljIGdldExhbmd1YWdlcygpe3JldHVyblsuLi4kOF19c3RhdGljIGdldEJsb2NrVHlwZVNlbGVjdG9yKGUsYSl7bGV0IGk9VjEuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIocj0+ci50eXBlIT09ImRpdmlkZXIiKTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPkJsb2NrIFR5cGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay10eXBlLWdyaWQiPgogICAgICAgICAgJHtpLm1hcChyPT53YAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJibG9jay10eXBlLWJ1dHRvbiAke2UudHlwZT09PXIudHlwZT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICBAY2xpY2s9IiR7YXN5bmMgcz0+e2xldCBuPXMuY3VycmVudFRhcmdldCxvPWUudHlwZTtpZihlLnR5cGU9ci50eXBlLG89PT0iY29kZSImJmUudHlwZSE9PSJjb2RlIilkZWxldGUgZS5tZXRhZGF0YT8ubGFuZ3VhZ2U7ZWxzZSBpZihvPT09Imxpc3QiJiZlLnR5cGUhPT0ibGlzdCIpZGVsZXRlIGUubWV0YWRhdGE/Lmxpc3RUeXBlO2Vsc2UgaWYoZS50eXBlPT09Imxpc3QiJiYhZS5tZXRhZGF0YT8ubGlzdFR5cGUpZS5tZXRhZGF0YT17bGlzdFR5cGU6ImJ1bGxldCJ9O2Vsc2UgaWYoZS50eXBlPT09ImNvZGUiJiYhZS5tZXRhZGF0YT8ubGFuZ3VhZ2Upe2xldCBjPWF3YWl0IHRoaXMuc2hvd0xhbmd1YWdlU2VsZWN0aW9uTW9kYWwoKTtpZihjKWUubWV0YWRhdGE9e2xhbmd1YWdlOmN9O2Vsc2V7ZS50eXBlPW87cmV0dXJufX1hKGUpO2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwiKTtkJiZ0eXBlb2YgZC5kZXN0cm95PT0iZnVuY3Rpb24iJiZkLmRlc3Ryb3koKX19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJsb2NrLXR5cGUtaWNvbiI+JHtyLmljb259PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuPiR7ci5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH19fSk7dmFyIFY4LEZndD1iKCgpPT57RWEoKTtSbCgpO2M0KCk7VXMoKTtUVigpO0FWKCk7Vjg9Y2xhc3N7Y29tcG9uZW50O3NhdmVUaW1lb3V0PW51bGw7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnQ9ZX1oYW5kbGVCbG9ja0lucHV0KGUsYSl7aWYodGhpcy5jb21wb25lbnQuaXNDb21wb3NpbmcpcmV0dXJuO2xldCBpPWUudGFyZ2V0LHI9aS50ZXh0Q29udGVudHx8IiIscz10aGlzLmRldGVjdEJsb2NrVHlwZUludGVudChyKTtpZihzJiZzLnR5cGUhPT1hLnR5cGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYSxzLGkpO3JldHVybn10aGlzLmhhbmRsZVNsYXNoQ29tbWFuZChyLGkpLHRoaXMuc2NoZWR1bGVBdXRvU2F2ZSgpfXVwZGF0ZUJsb2NrQ29udGVudChlLGEpe2xldCByPWEuY2xvc2VzdCgiLmJsb2NrLXdyYXBwZXIiKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYocil7bGV0IHM9ci5nZXRDb250ZW50KCk7aWYoZS5jb250ZW50IT09cyYmKGUuY29udGVudD1zKSxlLnR5cGU9PT0ibGlzdCIpe2xldCBuPWEucXVlcnlTZWxlY3Rvcigib2wsIHVsIik7biYmKGUubWV0YWRhdGE9e2xpc3RUeXBlOm4udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09Im9sIj8ib3JkZXJlZCI6ImJ1bGxldCJ9KX19ZWxzZSBpZihlLnR5cGU9PT0ibGlzdCIpe2xldCBzPWEucXVlcnlTZWxlY3RvckFsbCgibGkiKTtlLmNvbnRlbnQ9QXJyYXkuZnJvbShzKS5tYXAobz0+by5pbm5lckhUTUx8fCIiKS5qb2luKGAKYCk7bGV0IG49YS5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTtuJiYoZS5tZXRhZGF0YT17bGlzdFR5cGU6bi50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT0ib2wiPyJvcmRlcmVkIjoiYnVsbGV0In0pfWVsc2UgZS50eXBlPT09ImNvZGUiP2UuY29udGVudD1hLnRleHRDb250ZW50fHwiIjplLmNvbnRlbnQ9YS5pbm5lckhUTUx8fCIifWRldGVjdEJsb2NrVHlwZUludGVudChlKXtsZXQgYT1WMS5jaGVja0hlYWRpbmdTaG9ydGN1dChlKTtpZihhKXJldHVybiBhO2xldCBpPVYxLmNoZWNrTGlzdFNob3J0Y3V0KGUpO3JldHVybiBpfHwoVjEuY2hlY2tRdW90ZVNob3J0Y3V0KGUpP3t0eXBlOiJxdW90ZSJ9OlYxLmNoZWNrQ29kZVNob3J0Y3V0KGUpP3t0eXBlOiJjb2RlIn06VjEuY2hlY2tEaXZpZGVyU2hvcnRjdXQoZSk/e3R5cGU6ImRpdmlkZXIifTpudWxsKX1hc3luYyBoYW5kbGVCbG9ja1RyYW5zZm9ybWF0aW9uKGUsYSxpKXtsZXQgcj10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7aWYoYS50eXBlPT09Imxpc3QiKXtlLnR5cGU9Imxpc3QiLGUuY29udGVudD0iIixlLm1ldGFkYXRhPXtsaXN0VHlwZTphLmxpc3RUeXBlfTtsZXQgcz1hLmxpc3RUeXBlPT09Im9yZGVyZWQiPyJvbCI6InVsIjtpLmlubmVySFRNTD1gPCR7c30+PGxpPjwvbGk+PC8ke3N9PmAsdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSx0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmJiZ0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoZS5pZCksc2V0VGltZW91dCgoKT0+e0QyLmZvY3VzTGlzdEl0ZW0oaSl9LDApfWVsc2UgaWYoYS50eXBlPT09ImRpdmlkZXIiKXtlLnR5cGU9ImRpdmlkZXIiLGUuY29udGVudD0iICIsdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGUuaWQpO2xldCBzPXIuY3JlYXRlQmxvY2soKTtyLmluc2VydEJsb2NrQWZ0ZXIoZSxzKSx0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpfWVsc2UgaWYoYS50eXBlPT09ImNvZGUiKXtsZXQgcz1hd2FpdCBxOC5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpO3MmJihlLnR5cGU9ImNvZGUiLGUuY29udGVudD0iIixlLm1ldGFkYXRhPXtsYW5ndWFnZTpzfSxpLnRleHRDb250ZW50PSIiLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGUuaWQpLHNldFRpbWVvdXQoYXN5bmMoKT0+e2F3YWl0IHIuZm9jdXNCbG9jayhlLmlkLCJzdGFydCIpfSw1MCkpfWVsc2UgZS50eXBlPWEudHlwZSxlLmNvbnRlbnQ9IiIsaS50ZXh0Q29udGVudD0iIix0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChlLmlkKSxzZXRUaW1lb3V0KGFzeW5jKCk9Pnthd2FpdCByLmZvY3VzQmxvY2soZS5pZCwic3RhcnQiKX0sNTApfWhhbmRsZVNsYXNoQ29tbWFuZChlLGEpe2xldCBpPXRoaXMuY29tcG9uZW50LnNsYXNoTWVudSxyPWkmJmkudmlzaWJsZTtpZihlPT09Ii8ifHxlLnN0YXJ0c1dpdGgoIi8iKSYmcil7aWYoIXImJmU9PT0iLyIpe2xldCBzPXRoaXMuZ2V0Q2FyZXRDb29yZGluYXRlcyhhKTtpLnNob3coe3g6cy5sZWZ0LHk6cy5ib3R0b20rNH0sbj0+e3RoaXMuY29tcG9uZW50Lmluc2VydEJsb2NrKG4pfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJmEuZm9jdXMoKX0pfWkmJmkudXBkYXRlRmlsdGVyKGUuc2xpY2UoMSkpfWVsc2UgZS5zdGFydHNXaXRoKCIvIil8fHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCl9Z2V0Q2FyZXRDb29yZGluYXRlcyhlKXtsZXQgYT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoYSYmYS5yYW5nZUNvdW50PjApe2xldCByPWEuZ2V0UmFuZ2VBdCgwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihyLndpZHRoPjB8fHIuaGVpZ2h0PjApcmV0dXJuIHJ9cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9c2NoZWR1bGVBdXRvU2F2ZSgpe3RoaXMuc2F2ZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnNhdmVUaW1lb3V0KSwhKHRoaXMuY29tcG9uZW50LnNsYXNoTWVudSYmdGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUpJiYodGhpcy5zYXZlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKX0sMmUzKSl9c3luY0FsbEJsb2NrQ29udGVudCgpe3RoaXMuY29tcG9uZW50LmJsb2Nrcy5mb3JFYWNoKGU9PntsZXQgaT10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtlLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKGkmJmkuZ2V0Q29udGVudCl7bGV0IHI9aS5nZXRDb250ZW50KCk7ZS5jb250ZW50IT09ciYmKGUuY29udGVudD1yKX19KX1kZXN0cm95KCl7dGhpcy5zYXZlVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuc2F2ZVRpbWVvdXQpfX19KTt2YXIgajgsT2d0PWIoKCk9PntFYSgpO1JsKCk7WnIoKTtqOD1jbGFzc3tjb21wb25lbnQ7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnQ9ZX1hc3luYyBoYW5kbGVCbG9ja0tleURvd24oZSxhKXtpZih0aGlzLmNvbXBvbmVudC5zbGFzaE1lbnUudmlzaWJsZSYmdGhpcy5pc1NsYXNoTWVudUtleShlLmtleSkpe3RoaXMuY29tcG9uZW50LmhhbmRsZVNsYXNoTWVudUtleWJvYXJkKGUpO3JldHVybn1pZighdGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUpKXN3aXRjaChlLmtleSl7Y2FzZSJUYWIiOnRoaXMuaGFuZGxlVGFiKGUsYSk7YnJlYWs7Y2FzZSJFbnRlciI6YXdhaXQgdGhpcy5oYW5kbGVFbnRlcihlLGEpO2JyZWFrO2Nhc2UiQmFja3NwYWNlIjphd2FpdCB0aGlzLmhhbmRsZUJhY2tzcGFjZShlLGEpO2JyZWFrO2Nhc2UiRGVsZXRlIjphd2FpdCB0aGlzLmhhbmRsZURlbGV0ZShlLGEpO2JyZWFrO2Nhc2UiQXJyb3dVcCI6YXdhaXQgdGhpcy5oYW5kbGVBcnJvd1VwKGUsYSk7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOmF3YWl0IHRoaXMuaGFuZGxlQXJyb3dEb3duKGUsYSk7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmF3YWl0IHRoaXMuaGFuZGxlQXJyb3dMZWZ0KGUsYSk7YnJlYWs7Y2FzZSJBcnJvd1JpZ2h0Ijphd2FpdCB0aGlzLmhhbmRsZUFycm93UmlnaHQoZSxhKTticmVha319aXNTbGFzaE1lbnVLZXkoZSl7cmV0dXJuWyJBcnJvd0Rvd24iLCJBcnJvd1VwIiwiRW50ZXIiLCJFc2NhcGUiXS5pbmNsdWRlcyhlKX1oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUpe2lmKCEoZS5tZXRhS2V5fHxlLmN0cmxLZXkpKXJldHVybiExO3N3aXRjaChlLmtleS50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoImJvbGQiKSksITA7Y2FzZSJpIjpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJpdGFsaWMiKSksITA7Y2FzZSJ1IjpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJ1bmRlcmxpbmUiKSksITA7Y2FzZSJrIjpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJsaW5rIikpLCEwfXJldHVybiExfWhhbmRsZVRhYihlLGEpe2EudHlwZSE9PSJjb2RlIiYmYS50eXBlPT09Imxpc3QiJiZlLnByZXZlbnREZWZhdWx0KCl9YXN5bmMgaGFuZGxlRW50ZXIoZSxhKXtsZXQgaT10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7aWYoWyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKGEudHlwZSkpe2UucHJldmVudERlZmF1bHQoKTtsZXQgcz1pLmNyZWF0ZUJsb2NrKCk7YXdhaXQgaS5pbnNlcnRCbG9ja0FmdGVyKGEscyk7cmV0dXJufWlmKGEudHlwZT09PSJjb2RlIil7aWYoZS5zaGlmdEtleSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBzPWkuY3JlYXRlQmxvY2soKTthd2FpdCBpLmluc2VydEJsb2NrQWZ0ZXIoYSxzKX1yZXR1cm59aWYoIWUuc2hpZnRLZXkpaWYoYS50eXBlPT09Imxpc3QiKWF3YWl0IHRoaXMuaGFuZGxlRW50ZXJJbkxpc3QoZSxhKTtlbHNle2UucHJldmVudERlZmF1bHQoKTtsZXQgbj10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHthLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKG4mJm4uZ2V0U3BsaXRDb250ZW50KXtsZXQgbz1uLmdldFNwbGl0Q29udGVudCgpO2lmKG8pe24uc2V0Q29udGVudChvLmJlZm9yZSksYS5jb250ZW50PW8uYmVmb3JlO2xldCBkPWkuY3JlYXRlQmxvY2soInBhcmFncmFwaCIsby5hZnRlcik7YXdhaXQgaS5pbnNlcnRCbG9ja0FmdGVyKGEsZCksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKX1lbHNle2xldCBkPWkuY3JlYXRlQmxvY2soKTthd2FpdCBpLmluc2VydEJsb2NrQWZ0ZXIoYSxkKX19ZWxzZXtsZXQgbz1pLmNyZWF0ZUJsb2NrKCk7YXdhaXQgaS5pbnNlcnRCbG9ja0FmdGVyKGEsbyl9fX1hc3luYyBoYW5kbGVFbnRlckluTGlzdChlLGEpe2xldCBpPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZihpJiZpLnJhbmdlQ291bnQ+MCl7bGV0IHM9aS5nZXRSYW5nZUF0KDApLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7aWYocyYmcy50ZXh0Q29udGVudD09PSIiKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IG49dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLG89bi5jcmVhdGVCbG9jaygpO2F3YWl0IG4uaW5zZXJ0QmxvY2tBZnRlcihhLG8pfX19YXN5bmMgaGFuZGxlQmFja3NwYWNlKGUsYSl7bGV0IGk9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zO2lmKFsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhhLnR5cGUpKXtpZihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aD09PTEpe3RoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoITEpLGkucmVtb3ZlQmxvY2soYS5pZCk7bGV0IHk9aS5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwiIik7dGhpcy5jb21wb25lbnQuYmxvY2tzPVt5XSx0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCksYXdhaXQgaS5mb2N1c0Jsb2NrKHkuaWQsInN0YXJ0IiksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTtyZXR1cm59dGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeSghMSk7bGV0IGY9aS5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpLGc9aS5nZXROZXh0QmxvY2soYS5pZCk7aS5yZW1vdmVCbG9jayhhLmlkKSxmJiZmLnR5cGUhPT0iZGl2aWRlciImJmYudHlwZSE9PSJpbWFnZSI/YXdhaXQgaS5mb2N1c0Jsb2NrKGYuaWQsImVuZCIpOmcmJmcudHlwZSE9PSJkaXZpZGVyIiYmZy50eXBlIT09ImltYWdlIj9hd2FpdCBpLmZvY3VzQmxvY2soZy5pZCwic3RhcnQiKTpmP2F3YWl0IGkuZm9jdXNCbG9jayhmLmlkKTpnJiZhd2FpdCBpLmZvY3VzQmxvY2soZy5pZCk7cmV0dXJufWxldCBuPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoIW58fCFuLnNoYWRvd1Jvb3QpcmV0dXJuO2xldCBvPWEudHlwZT09PSJjb2RlIj9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik6bi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFvKXJldHVybjtsZXQgZD1uLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpLGM9W107ZD8uc2hhZG93Um9vdCYmYy5wdXNoKGQuc2hhZG93Um9vdCksYy5wdXNoKG4uc2hhZG93Um9vdCk7bGV0IHA9QmUuZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQobywuLi5jKSxsPW4uZ2V0Q29udGVudD9uLmdldENvbnRlbnQoKTpvLnRleHRDb250ZW50O2lmKHA9PT0wKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGY9aS5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2lmKGYpe2lmKFsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhmLnR5cGUpKXthd2FpdCBpLmZvY3VzQmxvY2soZi5pZCk7cmV0dXJufWlmKHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoITEpLGYudHlwZT09PSJjb2RlIiYmYS50eXBlIT09ImNvZGUiKXthLmNvbnRlbnQ9PT0iIiYmKGkucmVtb3ZlQmxvY2soYS5pZCksYXdhaXQgaS5mb2N1c0Jsb2NrKGYuaWQsImVuZCIpKTtyZXR1cm59aWYoYS50eXBlPT09ImNvZGUiJiZmLnR5cGUhPT0iY29kZSIpe2xldCBGPW4uZ2V0Q29udGVudD9uLmdldENvbnRlbnQoKTphLmNvbnRlbnQ7KEY9PT0iInx8Ri50cmltKCk9PT0iIikmJihpLnJlbW92ZUJsb2NrKGEuaWQpLGF3YWl0IGkuZm9jdXNCbG9jayhmLmlkLCJlbmQiKSk7cmV0dXJufWxldCB2PXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2YuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIiksbT12Py5nZXRDb250ZW50KCl8fGYuY29udGVudHx8IiIseD1uLmdldENvbnRlbnQoKXx8YS5jb250ZW50fHwiIixNPSIiO2YudHlwZT09PSJjb2RlIiYmYS50eXBlPT09ImNvZGUifHxmLnR5cGU9PT0ibGlzdCImJmEudHlwZT09PSJsaXN0Ij9NPW0rKG0mJng/YApgOiIiKSt4Ok09bSsobSYmeD8iICI6IiIpK3g7bGV0IFM9bS5sZW5ndGg7aS51cGRhdGVCbG9ja0NvbnRlbnQoZi5pZCxNKSx2JiZ2LnNldENvbnRlbnQoTSksaS5yZW1vdmVCbG9jayhhLmlkKSxhd2FpdCBpLmZvY3VzQmxvY2soZi5pZCxTKX19ZWxzZSBpZih0aGlzLmNvbXBvbmVudC5ibG9ja3MubGVuZ3RoPjEpe2xldCBmPW4uZ2V0Q29udGVudD9uLmdldENvbnRlbnQoKTphLmNvbnRlbnQ7aWYoZj09PSIifHxmLnRyaW0oKT09PSIiKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGc9aS5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2cmJihpLnJlbW92ZUJsb2NrKGEuaWQpLGcudHlwZSE9PSJkaXZpZGVyIiYmYXdhaXQgaS5mb2N1c0Jsb2NrKGcuaWQsImVuZCIpKX19fWFzeW5jIGhhbmRsZURlbGV0ZShlLGEpe2xldCBpPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucztpZihbImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoYS50eXBlKSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGg9PT0xKXt0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KCExKSxpLnJlbW92ZUJsb2NrKGEuaWQpO2xldCB2PWkuY3JlYXRlQmxvY2soInBhcmFncmFwaCIsIiIpO3RoaXMuY29tcG9uZW50LmJsb2Nrcz1bdl0sdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpLGF3YWl0IGkuZm9jdXNCbG9jayh2LmlkLCJzdGFydCIpLHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7cmV0dXJufXRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoITEpO2xldCBmPWkuZ2V0UHJldmlvdXNCbG9jayhhLmlkKSxnPWkuZ2V0TmV4dEJsb2NrKGEuaWQpO2kucmVtb3ZlQmxvY2soYS5pZCk7bGV0IHk9WyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdO2cmJiF5LmluY2x1ZGVzKGcudHlwZSk/YXdhaXQgaS5mb2N1c0Jsb2NrKGcuaWQsInN0YXJ0Iik6ZiYmIXkuaW5jbHVkZXMoZi50eXBlKT9hd2FpdCBpLmZvY3VzQmxvY2soZi5pZCwiZW5kIik6Zz9hd2FpdCBpLmZvY3VzQmxvY2soZy5pZCk6ZiYmYXdhaXQgaS5mb2N1c0Jsb2NrKGYuaWQpO3JldHVybn1sZXQgbj10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHthLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKCFufHwhbi5zaGFkb3dSb290KXJldHVybjtsZXQgbz1hLnR5cGU9PT0iY29kZSI/bi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOm4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighbylyZXR1cm47bGV0IGQ9bi5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKSxjPVtdO2Q/LnNoYWRvd1Jvb3QmJmMucHVzaChkLnNoYWRvd1Jvb3QpLGMucHVzaChuLnNoYWRvd1Jvb3QpO2xldCBwPUJlLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KG8sLi4uYyksbD1vLnRleHRDb250ZW50Py5sZW5ndGh8fDA7aWYocD09PWwpe2xldCBmPWkuZ2V0TmV4dEJsb2NrKGEuaWQpO2lmKGYmJlsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXS5pbmNsdWRlcyhmLnR5cGUpKXtlLnByZXZlbnREZWZhdWx0KCksYXdhaXQgaS5mb2N1c0Jsb2NrKGYuaWQpO3JldHVybn19fWFzeW5jIGhhbmRsZUFycm93VXAoZSxhKXtsZXQgaT1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07aWYoaS5pbmNsdWRlcyhhLnR5cGUpKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGw9cC5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2wmJmF3YWl0IHAuZm9jdXNCbG9jayhsLmlkLGkuaW5jbHVkZXMobC50eXBlKT92b2lkIDA6ImVuZCIpO3JldHVybn1sZXQgcz10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHthLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKCFzfHwhcy5zaGFkb3dSb290KXJldHVybjtsZXQgbj1hLnR5cGU9PT0iY29kZSI/cy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighbilyZXR1cm47bGV0IG89cy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKSxkPVtdO28/LnNoYWRvd1Jvb3QmJmQucHVzaChvLnNoYWRvd1Jvb3QpLGQucHVzaChzLnNoYWRvd1Jvb3QpO2xldCBjPUJlLmdldFNlbGVjdGlvbkluZm8oLi4uZCk7aWYoISghY3x8IWMuY29sbGFwc2VkKSYmdGhpcy5pc09uRmlyc3RMaW5lKGMsbiwuLi5kKSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBwPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucyxsPXAuZ2V0UHJldmlvdXNCbG9jayhhLmlkKTtpZihsKXtsZXQgZj1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07YXdhaXQgcC5mb2N1c0Jsb2NrKGwuaWQsZi5pbmNsdWRlcyhsLnR5cGUpP3ZvaWQgMDoiZW5kIil9fX1hc3luYyBoYW5kbGVBcnJvd0Rvd24oZSxhKXtpZihbImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoYS50eXBlKSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBwPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucyxsPXAuZ2V0TmV4dEJsb2NrKGEuaWQpO2lmKGwpe2xldCBmPVsiZGl2aWRlciIsImltYWdlIiwieW91dHViZSIsImF0dGFjaG1lbnQiXTthd2FpdCBwLmZvY3VzQmxvY2sobC5pZCxmLmluY2x1ZGVzKGwudHlwZSk/dm9pZCAwOiJzdGFydCIpfXJldHVybn1sZXQgcz10aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHthLmlkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO2lmKCFzfHwhcy5zaGFkb3dSb290KXJldHVybjtsZXQgbj1hLnR5cGU9PT0iY29kZSI/cy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighbilyZXR1cm47bGV0IG89cy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKSxkPVtdO28/LnNoYWRvd1Jvb3QmJmQucHVzaChvLnNoYWRvd1Jvb3QpLGQucHVzaChzLnNoYWRvd1Jvb3QpO2xldCBjPUJlLmdldFNlbGVjdGlvbkluZm8oLi4uZCk7aWYoISghY3x8IWMuY29sbGFwc2VkKSYmdGhpcy5pc09uTGFzdExpbmUoYyxuLC4uLmQpKXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGw9cC5nZXROZXh0QmxvY2soYS5pZCk7aWYobCl7bGV0IGY9WyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdO2F3YWl0IHAuZm9jdXNCbG9jayhsLmlkLGYuaW5jbHVkZXMobC50eXBlKT92b2lkIDA6InN0YXJ0Iil9fX1nZXRMYXN0VGV4dE5vZGUoZSl7aWYoZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXJldHVybiBlO2ZvcihsZXQgYT1lLmNoaWxkTm9kZXMubGVuZ3RoLTE7YT49MDthLS0pe2xldCBpPXRoaXMuZ2V0TGFzdFRleHROb2RlKGUuY2hpbGROb2Rlc1thXSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH1hc3luYyBoYW5kbGVBcnJvd0xlZnQoZSxhKXtpZihbImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoYS50eXBlKSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBsPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucyxmPWwuZ2V0UHJldmlvdXNCbG9jayhhLmlkKTtpZihmKXtsZXQgZz1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07YXdhaXQgbC5mb2N1c0Jsb2NrKGYuaWQsZy5pbmNsdWRlcyhmLnR5cGUpP3ZvaWQgMDoiZW5kIil9cmV0dXJufWxldCBzPXRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoIXN8fCFzLnNoYWRvd1Jvb3QpcmV0dXJuO2xldCBuPWEudHlwZT09PSJjb2RlIj9zLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik6cy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFuKXJldHVybjtsZXQgbz1zLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpLGQ9W107bz8uc2hhZG93Um9vdCYmZC5wdXNoKG8uc2hhZG93Um9vdCksZC5wdXNoKHMuc2hhZG93Um9vdCk7bGV0IGM9QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5kKTtpZighY3x8IWMuY29sbGFwc2VkKXJldHVybjtpZihCZS5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChuLC4uLmQpPT09MCl7bGV0IGw9dGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLGY9bC5nZXRQcmV2aW91c0Jsb2NrKGEuaWQpO2lmKGYpe2UucHJldmVudERlZmF1bHQoKTtsZXQgeT1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il0uaW5jbHVkZXMoZi50eXBlKT92b2lkIDA6ImVuZCI7YXdhaXQgbC5mb2N1c0Jsb2NrKGYuaWQseSl9fX1hc3luYyBoYW5kbGVBcnJvd1JpZ2h0KGUsYSl7aWYoWyJkaXZpZGVyIiwiaW1hZ2UiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKGEudHlwZSkpe2UucHJldmVudERlZmF1bHQoKTtsZXQgZj10aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMsZz1mLmdldE5leHRCbG9jayhhLmlkKTtpZihnKXtsZXQgeT1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07YXdhaXQgZi5mb2N1c0Jsb2NrKGcuaWQseS5pbmNsdWRlcyhnLnR5cGUpP3ZvaWQgMDoic3RhcnQiKX1yZXR1cm59bGV0IHM9dGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YS5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZighc3x8IXMuc2hhZG93Um9vdClyZXR1cm47bGV0IG49YS50eXBlPT09ImNvZGUiP3Muc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTpzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIW4pcmV0dXJuO2xldCBvPXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIiksZD1bXTtvPy5zaGFkb3dSb290JiZkLnB1c2goby5zaGFkb3dSb290KSxkLnB1c2gocy5zaGFkb3dSb290KTtsZXQgYz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLmQpO2lmKCFjfHwhYy5jb2xsYXBzZWQpcmV0dXJuO2xldCBwPUJlLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KG4sLi4uZCksbD1uLnRleHRDb250ZW50Py5sZW5ndGh8fDA7aWYocD09PWwpe2xldCBmPXRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucyxnPWYuZ2V0TmV4dEJsb2NrKGEuaWQpO2lmKGcpe2UucHJldmVudERlZmF1bHQoKTtsZXQgeT1bImRpdmlkZXIiLCJpbWFnZSIsInlvdXR1YmUiLCJhdHRhY2htZW50Il07YXdhaXQgZi5mb2N1c0Jsb2NrKGcuaWQseS5pbmNsdWRlcyhnLnR5cGUpP3ZvaWQgMDoic3RhcnQiKX19fWlzT25GaXJzdExpbmUoZSxhLC4uLmkpe3RyeXtsZXQgcj1CZS5jcmVhdGVSYW5nZUZyb21JbmZvKGUpLHM9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuY29tbW9uQW5jZXN0b3JDb250YWluZXI7bi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiYobj1uLnBhcmVudEVsZW1lbnQpO2xldCBvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1zLnRvcC1vLnRvcDw1O3JldHVybiBuLnRleHRDb250ZW50JiYhbi50ZXh0Q29udGVudC5pbmNsdWRlcyhgCmApP0JlLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KG4sLi4uaSk9PT0wOmR9Y2F0Y2gocil7cmV0dXJuIGNvbnNvbGUud2FybigiRXJyb3IgY2hlY2tpbmcgZmlyc3QgbGluZToiLHIpLGUuc3RhcnRPZmZzZXQ9PT0wfX1pc09uTGFzdExpbmUoZSxhLC4uLmkpe3RyeXtsZXQgcj1CZS5jcmVhdGVSYW5nZUZyb21JbmZvKGUpLHM9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuY29tbW9uQW5jZXN0b3JDb250YWluZXI7bi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiYobj1uLnBhcmVudEVsZW1lbnQpO2xldCBkPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLXMuYm90dG9tPDU7aWYobi50ZXh0Q29udGVudCYmIW4udGV4dENvbnRlbnQuaW5jbHVkZXMoYApgKSl7bGV0IGM9YS50ZXh0Q29udGVudD8ubGVuZ3RofHwwO3JldHVybiBCZS5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChhLC4uLmkpPT09Y31yZXR1cm4gZH1jYXRjaChyKXtjb25zb2xlLndhcm4oIkVycm9yIGNoZWNraW5nIGxhc3QgbGluZToiLHIpO2xldCBzPWEudGV4dENvbnRlbnQ/Lmxlbmd0aHx8MDtyZXR1cm4gQmUuZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQoYSwuLi5pKT09PXN9fX19KTt2YXIgVTgsUmd0PWIoKCk9PntFYSgpO1JsKCk7VTg9Y2xhc3N7Y29tcG9uZW50O2RyYWdnZWRCbG9ja0lkPW51bGw7ZHJhZ092ZXJCbG9ja0lkPW51bGw7ZHJhZ092ZXJQb3NpdGlvbj1udWxsO2Ryb3BJbmRpY2F0b3I9bnVsbDtpbml0aWFsTW91c2VZPTA7aW5pdGlhbEJsb2NrWT0wO2RyYWdnZWRCbG9ja0VsZW1lbnQ9bnVsbDtkcmFnZ2VkQmxvY2tIZWlnaHQ9MDtkcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0PTA7ZHJhZ2dlZEJsb2NrTWFyZ2luVG9wPTA7bGFzdFVwZGF0ZVRpbWU9MDt1cGRhdGVUaHJvdHRsZT04MDtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudD1lfWdldCBkcmFnU3RhdGUoKXtyZXR1cm57ZHJhZ2dlZEJsb2NrSWQ6dGhpcy5kcmFnZ2VkQmxvY2tJZCxkcmFnT3ZlckJsb2NrSWQ6dGhpcy5kcmFnT3ZlckJsb2NrSWQsZHJhZ092ZXJQb3NpdGlvbjp0aGlzLmRyYWdPdmVyUG9zaXRpb259fWhhbmRsZURyYWdTdGFydChlLGEpe2lmKCFlLmRhdGFUcmFuc2ZlcilyZXR1cm47dGhpcy5kcmFnZ2VkQmxvY2tJZD1hLmlkLGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUiLGUuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLGEuaWQpO2xldCBpPW5ldyBJbWFnZTtpZihpLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSIsZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGksMCwwKSx0aGlzLmluaXRpYWxNb3VzZVk9ZS5jbGllbnRZLHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudD10aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2EuaWR9Il1gKSx0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpe2xldCByPXRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmluaXRpYWxCbG9ja1k9ci50b3A7bGV0IHM9dGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKHMpe2xldCBuPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKTt0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcD1wYXJzZUludChvLm1hcmdpblRvcCl8fDAsdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0PW4uaGVpZ2h0fXRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0PXIuaGVpZ2h0LGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLHt3cmFwcGVySGVpZ2h0OnIuaGVpZ2h0LG1hcmdpblRvcDp0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCxkcm9wSW5kaWNhdG9ySGVpZ2h0OnRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0LGNvbnRlbnRIZWlnaHQ6dGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0LGJsb2NrSWQ6YS5pZH0pLHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0aGlzLmhhbmRsZUdsb2JhbERyYWdPdmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIix0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQpfXRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkPXRoaXMuZHJhZ2dlZEJsb2NrSWQsc2V0VGltZW91dCgoKT0+e3RoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCYmdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSwxMCl9aGFuZGxlRHJhZ0VuZCgpe3RoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKS5mb3JFYWNoKGE9PnthLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiwibW92ZS11cCIsIm1vdmUtZG93biIpLGEuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKSxhLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKX0pLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLmRyYWdnZWRCbG9ja0lkPW51bGwsdGhpcy5kcmFnT3ZlckJsb2NrSWQ9bnVsbCx0aGlzLmRyYWdPdmVyUG9zaXRpb249bnVsbCx0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQ9bnVsbCx0aGlzLmRyYWdnZWRCbG9ja0hlaWdodD0wLHRoaXMuZHJhZ2dlZEJsb2NrQ29udGVudEhlaWdodD0wLHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wPTAsdGhpcy5pbml0aWFsQmxvY2tZPTAsdGhpcy5jb21wb25lbnQuZHJhZ2dlZEJsb2NrSWQ9bnVsbCx0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQ9bnVsbCx0aGlzLmNvbXBvbmVudC5kcmFnT3ZlclBvc2l0aW9uPW51bGx9aGFuZGxlRHJhZ092ZXIoZSxhKXtpZihlLnByZXZlbnREZWZhdWx0KCksIWUuZGF0YVRyYW5zZmVyfHwhdGhpcy5kcmFnZ2VkQmxvY2tJZHx8dGhpcy5kcmFnZ2VkQmxvY2tJZD09PWEuaWQpcmV0dXJuO2UuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiO2xldCBpPWUuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWkudG9wK2kuaGVpZ2h0LzI7dGhpcy5kcmFnT3ZlckJsb2NrSWQ9YS5pZCx0aGlzLmRyYWdPdmVyUG9zaXRpb249ZS5jbGllbnRZPHI/ImJlZm9yZSI6ImFmdGVyIix0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQ9dGhpcy5kcmFnT3ZlckJsb2NrSWQsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbj10aGlzLmRyYWdPdmVyUG9zaXRpb259aGFuZGxlRHJhZ0xlYXZlKGUpe3RoaXMuZHJhZ092ZXJCbG9ja0lkPT09ZS5pZCYmKHRoaXMuZHJhZ092ZXJCbG9ja0lkPW51bGwsdGhpcy5kcmFnT3ZlclBvc2l0aW9uPW51bGwsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkPW51bGwsdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbj1udWxsKX1oYW5kbGVEcm9wKGUsYSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCEoIXRoaXMuZHJhZ2dlZEJsb2NrSWR8fHRoaXMuZHJhZ2dlZEJsb2NrSWQ9PT1hLmlkKSYmdGhpcy5jb21wb25lbnQuaGFuZGxlRHJvcChlLGEpfWlzRHJhZ2dpbmcoZSl7cmV0dXJuIHRoaXMuZHJhZ2dlZEJsb2NrSWQ9PT1lfWlzRHJhZ092ZXIoZSl7cmV0dXJuIHRoaXMuZHJhZ092ZXJCbG9ja0lkPT09ZX1nZXREcmFnT3ZlckNsYXNzZXMoZSl7cmV0dXJuIHRoaXMuaXNEcmFnT3ZlcihlKT90aGlzLmRyYWdPdmVyUG9zaXRpb249PT0iYmVmb3JlIj8iZHJhZy1vdmVyLWJlZm9yZSI6ImRyYWctb3Zlci1hZnRlciI6IiJ9Y3JlYXRlRHJvcEluZGljYXRvcigpe3RoaXMuZHJvcEluZGljYXRvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRyb3BJbmRpY2F0b3IuY2xhc3NOYW1lPSJkcm9wLWluZGljYXRvciIsdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKX1oYW5kbGVHbG9iYWxEcmFnT3Zlcj1lPT57aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpcmV0dXJuO2xldCBhPWUuY2xpZW50WS10aGlzLmluaXRpYWxNb3VzZVk7dGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke2F9cHgpYDtsZXQgaT1EYXRlLm5vdygpO2ktdGhpcy5sYXN0VXBkYXRlVGltZTx0aGlzLnVwZGF0ZVRocm90dGxlfHwodGhpcy5sYXN0VXBkYXRlVGltZT1pLHRoaXMudXBkYXRlQmxvY2tQb3NpdGlvbnMoZS5jbGllbnRZKSl9O3VwZGF0ZUJsb2NrUG9zaXRpb25zKGUpe2xldCBhPUFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKSxpPWEuZmluZEluZGV4KHM9PnMuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik9PT10aGlzLmRyYWdnZWRCbG9ja0lkKTtpZihpPT09LTEpcmV0dXJuO2EuZm9yRWFjaChzPT57cy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSE9PXRoaXMuZHJhZ2dlZEJsb2NrSWQmJihzLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCJtb3ZlLWRvd24iKSxzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLWRyYWctb2Zmc2V0IikpfSk7bGV0IHI9YS5sZW5ndGg7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2lmKHM9PT1pKWNvbnRpbnVlO2xldCBvPWFbc10uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1vLnRvcDtpZihlPGQrby5oZWlnaHQqLjUpe3I9czticmVha319Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2lmKHM9PT1pKWNvbnRpbnVlO2xldCBuPWFbc107aTxyP3M+aSYmczxyJiYobi5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIiksbi5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1kcmFnLW9mZnNldCIsYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKSk6aT5yJiZzPj1yJiZzPGkmJihuLmNsYXNzTGlzdC5hZGQoIm1vdmUtZG93biIpLG4uc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLGAke3RoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0fXB4YCkpfXRoaXMudXBkYXRlRHJvcEluZGljYXRvcihhLHIsaSl9dXBkYXRlRHJvcEluZGljYXRvcihlLGEsaSl7aWYoIXRoaXMuZHJvcEluZGljYXRvcnx8IXRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudClyZXR1cm47dGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgcj10aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9MCxuPVtdO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtpZihjPT09aSljb250aW51ZTtsZXQgcD1lW2NdLGw9cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWwudG9wLXIudG9wLGc9bC5ib3R0b20tci50b3AseT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwKS50cmFuc2Zvcm07aWYoeSYmeSE9PSJub25lIil7bGV0IG09bmV3IERPTU1hdHJpeCh5KS5tNDI7Zis9bSxnKz1tfW4ucHVzaCh7aW5kZXg6Yyx0b3A6Zixib3R0b206Z30pfW4uc29ydCgoYyxwKT0+Yy50b3AtcC50b3ApO2xldCBvPWE7YT5pJiZvLS07bGV0IGQ9MTY7aWYodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KXtsZXQgYz10aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZChwPT5wLmlkPT09dGhpcy5kcmFnZ2VkQmxvY2tJZCk7aWYoYyl7bGV0IHA9Yy50eXBlO3A9PT0iaGVhZGluZy0xInx8cD09PSJoZWFkaW5nLTIifHxwPT09ImhlYWRpbmctMyI/ZD0yNDoocD09PSJjb2RlInx8cD09PSJxdW90ZSIpJiYoZD0yMCl9fWlmKG89PT0wKXM9MDtlbHNlIGlmKG8+PW4ubGVuZ3RoKXtsZXQgYz1uW24ubGVuZ3RoLTFdO2MmJihzPWMuYm90dG9tLHMrPWQpfWVsc2V7bGV0IGM9bltvLTFdO2MmJihzPWMuYm90dG9tLHMrPWQpfXRoaXMuZHJvcEluZGljYXRvci5zdHlsZS5oZWlnaHQ9YCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgLHRoaXMuZHJvcEluZGljYXRvci5zdHlsZS50b3A9YCR7TWF0aC5tYXgoMCxzKX1weGAsY29uc29sZS5sb2coIkRyb3AgaW5kaWNhdG9yIHVwZGF0ZToiLHt0YXJnZXRJbmRleDphLGFkanVzdGVkVGFyZ2V0SW5kZXg6byxkcmFnZ2VkSW5kZXg6aSx0b3BQb3NpdGlvbjpzLGhlaWdodDp0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCxibG9ja01hcmdpbjpkLHZpc3VhbEJsb2NrczpuLm1hcChjPT4oe2luZGV4OmMuaW5kZXgsdG9wOmMudG9wLGJvdHRvbTpjLmJvdHRvbX0pKX0pfWhhbmRsZUdsb2JhbERyYWdFbmQ9KCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5oYW5kbGVHbG9iYWxEcmFnT3ZlciksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKSx0aGlzLmRyb3BJbmRpY2F0b3ImJih0aGlzLmRyb3BJbmRpY2F0b3IucmVtb3ZlKCksdGhpcy5kcm9wSW5kaWNhdG9yPW51bGwpLHRoaXMuZHJhZ2dlZEJsb2NrSWQ/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5wZXJmb3JtRHJvcCgpLHRoaXMuaGFuZGxlRHJhZ0VuZCgpfSk6dGhpcy5oYW5kbGVEcmFnRW5kKCl9O3BlcmZvcm1Ecm9wKCl7aWYoIXRoaXMuZHJhZ2dlZEJsb2NrSWQpcmV0dXJuO2xldCBlPUFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTtpZighZS5maW5kKHA9PnAuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik9PT10aGlzLmRyYWdnZWRCbG9ja0lkKSlyZXR1cm47bGV0IGk9ZS5tYXAocD0+e2xldCBsPXAuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIiksZj1wLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9Zi50b3ArZi5oZWlnaHQvMjtyZXR1cm57aWQ6bCxjZW50ZXJZOmcsZWxlbWVudDpwfX0pO2kuc29ydCgocCxsKT0+cC5jZW50ZXJZLWwuY2VudGVyWSk7bGV0IHI9aS5tYXAocD0+cC5pZCkuZmlsdGVyKHA9PnAhPT1udWxsKSxzPVsuLi50aGlzLmNvbXBvbmVudC5ibG9ja3NdLG49cy5maW5kKHA9PnAuaWQ9PT10aGlzLmRyYWdnZWRCbG9ja0lkKTtpZighbilyZXR1cm47bGV0IG89cy5tYXAocD0+cC5pZCk7aWYoISFyLmV2ZXJ5KChwLGwpPT5wPT09b1tsXSkpcmV0dXJuO2xldCBjPXIubWFwKHA9PnMuZmluZChsPT5sLmlkPT09cCkpLmZpbHRlcihCb29sZWFuKTt0aGlzLmNvbXBvbmVudC5ibG9ja3M9Yyx0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCksdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKSxzZXRUaW1lb3V0KCgpPT57bi50eXBlIT09ImRpdmlkZXIiJiZ0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhuLmlkKX0sMTAwKX19fSk7dmFyIFc4LEJndD1iKCgpPT57RWEoKTtXOD1jbGFzc3toaXN0b3J5PVtdO2N1cnJlbnRJbmRleD0tMTttYXhIaXN0b3J5U2l6ZT01MDtsYXN0U2F2ZVRpbWU9MDtzYXZlRGVib3VuY2VNcz01MDA7Y29uc3RydWN0b3IoKXt0aGlzLmhpc3Rvcnk9W10sdGhpcy5jdXJyZW50SW5kZXg9LTF9c2F2ZVN0YXRlKGUsYSxpKXtsZXQgcj1EYXRlLm5vdygpO2lmKHItdGhpcy5sYXN0U2F2ZVRpbWU8dGhpcy5zYXZlRGVib3VuY2VNcyYmdGhpcy5jdXJyZW50SW5kZXg+PTApe3RoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF09e2Jsb2Nrczp0aGlzLmNsb25lQmxvY2tzKGUpLHNlbGVjdGVkQmxvY2tJZDphLGN1cnNvclBvc2l0aW9uOmk/ey4uLml9OnZvaWQgMCx0aW1lc3RhbXA6cn07cmV0dXJufXRoaXMuY3VycmVudEluZGV4PHRoaXMuaGlzdG9yeS5sZW5ndGgtMSYmKHRoaXMuaGlzdG9yeT10aGlzLmhpc3Rvcnkuc2xpY2UoMCx0aGlzLmN1cnJlbnRJbmRleCsxKSk7bGV0IHM9e2Jsb2Nrczp0aGlzLmNsb25lQmxvY2tzKGUpLHNlbGVjdGVkQmxvY2tJZDphLGN1cnNvclBvc2l0aW9uOmk/ey4uLml9OnZvaWQgMCx0aW1lc3RhbXA6cn07dGhpcy5oaXN0b3J5LnB1c2gocyksdGhpcy5jdXJyZW50SW5kZXgrKyx0aGlzLmhpc3RvcnkubGVuZ3RoPnRoaXMubWF4SGlzdG9yeVNpemUmJih0aGlzLmhpc3Rvcnkuc2hpZnQoKSx0aGlzLmN1cnJlbnRJbmRleC0tKSx0aGlzLmxhc3RTYXZlVGltZT1yfXNhdmVDaGVja3BvaW50KGUsYSxpKXt0aGlzLmxhc3RTYXZlVGltZT0wLHRoaXMuc2F2ZVN0YXRlKGUsYSxpKX11bmRvKCl7cmV0dXJuIHRoaXMuY2FuVW5kbygpPyh0aGlzLmN1cnJlbnRJbmRleC0tLHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKSk6bnVsbH1yZWRvKCl7cmV0dXJuIHRoaXMuY2FuUmVkbygpPyh0aGlzLmN1cnJlbnRJbmRleCsrLHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKSk6bnVsbH1jYW5VbmRvKCl7cmV0dXJuIHRoaXMuY3VycmVudEluZGV4PjB9Y2FuUmVkbygpe3JldHVybiB0aGlzLmN1cnJlbnRJbmRleDx0aGlzLmhpc3RvcnkubGVuZ3RoLTF9Z2V0Q3VycmVudFN0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudEluZGV4Pj0wJiZ0aGlzLmN1cnJlbnRJbmRleDx0aGlzLmhpc3RvcnkubGVuZ3RoP3RoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTpudWxsfWNsZWFyKCl7dGhpcy5oaXN0b3J5PVtdLHRoaXMuY3VycmVudEluZGV4PS0xLHRoaXMubGFzdFNhdmVUaW1lPTB9Y2xvbmVCbG9ja3MoZSl7cmV0dXJuIGUubWFwKGE9Pih7Li4uYSxtZXRhZGF0YTphLm1ldGFkYXRhP3suLi5hLm1ldGFkYXRhfTp2b2lkIDB9KSl9Y2xvbmVTdGF0ZShlKXtyZXR1cm57YmxvY2tzOnRoaXMuY2xvbmVCbG9ja3MoZS5ibG9ja3MpLHNlbGVjdGVkQmxvY2tJZDplLnNlbGVjdGVkQmxvY2tJZCxjdXJzb3JQb3NpdGlvbjplLmN1cnNvclBvc2l0aW9uP3suLi5lLmN1cnNvclBvc2l0aW9ufTp2b2lkIDAsdGltZXN0YW1wOmUudGltZXN0YW1wfX1nZXRIaXN0b3J5SW5mbygpe3JldHVybntzaXplOnRoaXMuaGlzdG9yeS5sZW5ndGgsY3VycmVudEluZGV4OnRoaXMuY3VycmVudEluZGV4LGNhblVuZG86dGhpcy5jYW5VbmRvKCksY2FuUmVkbzp0aGlzLmNhblJlZG8oKX19fX0pO3ZhciBHOCxXcyxIZ3QscWd0PWIoKCk9Pnt1ZSgpO0VhKCk7VXMoKTtacigpO0xWKCk7JFYoKTtjNCgpO24yKCk7VmUoKTtHOD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFdzPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxIZ3Q9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXd5c2l3eWctYmxvY2siKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXTt2YXIgeD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IE09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpPYmplY3R9KV0sZD1bSSh7dHlwZTpCb29sZWFufSldLGw9W0koe3R5cGU6T2JqZWN0fSldLHk9W0koe3R5cGU6T2JqZWN0fSldLEc4KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYmxvY2siLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJibG9jayJpbiBTLGdldDpTPT5TLmJsb2NrLHNldDooUyxGKT0+e1MuYmxvY2s9Rn19LG1ldGFkYXRhOk19LG4sbyksRzgodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1NlbGVjdGVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iaXNTZWxlY3RlZCJpbiBTLGdldDpTPT5TLmlzU2VsZWN0ZWQsc2V0OihTLEYpPT57Uy5pc1NlbGVjdGVkPUZ9fSxtZXRhZGF0YTpNfSxjLHApLEc4KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaGFuZGxlcnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJoYW5kbGVycyJpbiBTLGdldDpTPT5TLmhhbmRsZXJzLHNldDooUyxGKT0+e1MuaGFuZGxlcnM9Rn19LG1ldGFkYXRhOk19LGYsZyksRzgodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3eXNpd3lnQ29tcG9uZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4id3lzaXd5Z0NvbXBvbmVudCJpbiBTLGdldDpTPT5TLnd5c2l3eWdDb21wb25lbnQsc2V0OihTLEYpPT57Uy53eXNpd3lnQ29tcG9uZW50PUZ9fSxtZXRhZGF0YTpNfSx2LG0pLEc4KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOk19LG51bGwsYSkseD1pPWUudmFsdWUsTSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpNfSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3NlbGVjdGlvbkhhbmRsZXImJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsdGhpcy5fc2VsZWN0aW9uSGFuZGxlcil9I2U9V3ModGhpcyxuLHZvaWQgMCk7Z2V0IGJsb2NrKCl7cmV0dXJuIHRoaXMuI2V9c2V0IGJsb2NrKE0pe3RoaXMuI2U9TX0jdD0oV3ModGhpcyxvKSxXcyh0aGlzLGMsITEpKTtnZXQgaXNTZWxlY3RlZCgpe3JldHVybiB0aGlzLiN0fXNldCBpc1NlbGVjdGVkKE0pe3RoaXMuI3Q9TX0jYT0oV3ModGhpcyxwKSxXcyh0aGlzLGYsdm9pZCAwKSk7Z2V0IGhhbmRsZXJzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGhhbmRsZXJzKE0pe3RoaXMuI2E9TX0jaT0oV3ModGhpcyxnKSxXcyh0aGlzLHYsdm9pZCAwKSk7Z2V0IHd5c2l3eWdDb21wb25lbnQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgd3lzaXd5Z0NvbXBvbmVudChNKXt0aGlzLiNpPU19YmxvY2tFbGVtZW50PShXcyh0aGlzLG0pLG51bGwpO2NvbnRlbnRJbml0aWFsaXplZD0hMTtsYXN0S25vd25DdXJzb3JQb3NpdGlvbj0wO2xhc3RTZWxlY3RlZFRleHQ9IiI7aGFuZGxlclN0eWxlc0luamVjdGVkPSExO3N0YXRpYyBOT05fRURJVEFCTEVfVFlQRVM9WyJpbWFnZSIsImRpdmlkZXIiLCJ5b3V0dWJlIl07aW5qZWN0SGFuZGxlclN0eWxlcygpe2lmKHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkKXJldHVybjt0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZD0hMDtsZXQgTT0iIixTPWkxLmdldEFsbFR5cGVzKCk7Zm9yKGxldCBGIG9mIFMpe2xldCBfPWkxLmdldEhhbmRsZXIoRik7XyYmKE0rPV8uZ2V0U3R5bGVzKCkpfWlmKE0pe2xldCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Ri50ZXh0Q29udGVudD1NLHRoaXMuc2hhZG93Um9vdD8uYXBwZW5kQ2hpbGQoRil9fXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5ibG9jayB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgICAgbWluLWhlaWdodDogMS42ZW07CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNlMGUwZTAiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jazplbXB0eTpub3QoOmZvY3VzKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzk5OSIsIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrIDppcyhpLCBlbSkgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmJsb2NrIHUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuYmxvY2sgcyB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5ibG9jayBjb2RlIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2QxNCIsIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDY2Y2MiLCIjNGQ5NGZmIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuYmxvY2sgYTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtoLmJkVGhlbWUoIiMwMDY2Y2MiLCIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrIGNvbnRhaW5lciBhbmQgbGFuZ3VhZ2Ugc3R5bGVzIG1vdmVkIHRvIGhhbmRsZXIgKi8KCiAgICAgIC8qIFNlbGVjdGlvbiBzdHlsZXMgKi8KICAgICAgLmJsb2NrIDo6c2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4zKSIsInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwicmdiYSg3NywgMTQ4LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAke2guYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4yKSIsInJnYmEoNzcsIDE0OCwgMjU1LCAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogLThweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OwogICAgICB9CgoKCgogICAgYF07c2hvdWxkVXBkYXRlKE0pe2lmKE0uaGFzKCJpc1NlbGVjdGVkIikmJnRoaXMuYmxvY2spe2xldCBTPW51bGwsXz1gLmJsb2NrLiR7dGhpcy5ibG9jay50eXBlfWA7cmV0dXJuIFM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKF8pLFMmJih0aGlzLmlzU2VsZWN0ZWQ/Uy5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOlMuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKSksITF9aWYoTS5oYXMoImJsb2NrIikmJnRoaXMuYmxvY2spe2xldCBTPU0uZ2V0KCJibG9jayIpO2lmKFMmJlMuaWQmJlMudHlwZSYmUy5pZD09PXRoaXMuYmxvY2suaWQmJlMudHlwZT09PXRoaXMuYmxvY2sudHlwZSlyZXR1cm4hMX1yZXR1cm4hdGhpcy5ibG9ja0VsZW1lbnR8fHRoaXMuYmxvY2s/LnR5cGUhPT10aGlzLmJsb2NrRWxlbWVudC5kYXRhc2V0LmJsb2NrVHlwZX1maXJzdFVwZGF0ZWQoKXt0aGlzLmNvbnRlbnRJbml0aWFsaXplZD0hMCx0aGlzLmluamVjdEhhbmRsZXJTdHlsZXMoKTtsZXQgTT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpO2lmKE0mJnRoaXMuYmxvY2smJihNLmlubmVySFRNTD10aGlzLnJlbmRlckJsb2NrQ29udGVudCgpKSx0aGlzLmJsb2NrKXtsZXQgRj1pMS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYoRil7bGV0IF89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTtfJiZGLnNldHVwKF8sdGhpcy5ibG9jayx0aGlzLmhhbmRsZXJzKTtyZXR1cm59fWxldCBTPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoUyl7Uy5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLHRoaXMuYmxvY2suaWQpLFMuc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLHRoaXMuYmxvY2sudHlwZSksUy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsXz0+e3RoaXMuaGFuZGxlcnM/Lm9uSW5wdXQ/LihfKTtsZXQgaz10aGlzLmdldEN1cnNvclBvc2l0aW9uKFMpO2shPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1rKX0pLFMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsXz0+e2xldCBrPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oUyk7ayE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPWspLHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKF8pfSksUy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pnt0aGlzLmhhbmRsZXJzPy5vbkZvY3VzPy4oKX0pLFMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9Pnt0aGlzLmhhbmRsZXJzPy5vbkJsdXI/LigpfSksUy5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwoKT0+e3RoaXMuaGFuZGxlcnM/Lm9uQ29tcG9zaXRpb25TdGFydD8uKCl9KSxTLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwoKT0+e3RoaXMuaGFuZGxlcnM/Lm9uQ29tcG9zaXRpb25FbmQ/LigpfSksUy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixfPT57bGV0IGs9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbihTKTtrIT09bnVsbCYmKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb249ayksdGhpcy5oYW5kbGVycz8ub25Nb3VzZVVwPy4oXyl9KSxTLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3NldFRpbWVvdXQoKCk9PntsZXQgXz10aGlzLmdldEN1cnNvclBvc2l0aW9uKFMpO18hPT1udWxsJiYodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbj1fKX0sMCl9KTtsZXQgRj0oKT0+e2xldCBfPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtpZighX3x8Xy5yYW5nZUNvdW50PT09MClyZXR1cm47bGV0IGs9Xy50b1N0cmluZygpO2lmKGsubGVuZ3RoPT09MCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0JiYodGhpcy5sYXN0U2VsZWN0ZWRUZXh0PSIiLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLHtkZXRhaWw6e3RleHQ6IiIsYmxvY2tJZDp0aGlzLmJsb2NrLmlkLGhhc1NlbGVjdGlvbjohMX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSk7cmV0dXJufWxldCBOPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIU4pcmV0dXJuO2xldCBBPXRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik/LnNoYWRvd1Jvb3QscT1bXTtBJiZxLnB1c2goQSksdGhpcy5zaGFkb3dSb290JiZxLnB1c2godGhpcy5zaGFkb3dSb290KTtsZXQgQz1CZS5nZXRTZWxlY3Rpb25JbmZvKC4uLnEpO2lmKCFDKXJldHVybjtsZXQgej1CZS5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShOLEMuc3RhcnRDb250YWluZXIpLEU9QmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oTixDLmVuZENvbnRhaW5lcik7aWYoenx8RSl7aWYoayE9PXRoaXMubGFzdFNlbGVjdGVkVGV4dCl7dGhpcy5sYXN0U2VsZWN0ZWRUZXh0PWs7bGV0IFQ9QmUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhDKSwkPVQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIse2RldGFpbDp7dGV4dDprLnRyaW0oKSxibG9ja0lkOnRoaXMuYmxvY2suaWQscmFuZ2U6VCxyZWN0OiQsaGFzU2VsZWN0aW9uOiEwfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfX1lbHNlIHRoaXMubGFzdFNlbGVjdGVkVGV4dCYmKHRoaXMubGFzdFNlbGVjdGVkVGV4dD0iIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIix7ZGV0YWlsOnt0ZXh0OiIiLGJsb2NrSWQ6dGhpcy5ibG9jay5pZCxoYXNTZWxlY3Rpb246ITF9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLEYpLHRoaXMuX3NlbGVjdGlvbkhhbmRsZXI9RixTLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwoKT0+e2xldCBfPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oUyk7XyE9PW51bGwmJih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uPV8pfSksdGhpcy5ibG9jay5jb250ZW50JiYoUy5pbm5lckhUTUw9dGhpcy5ibG9jay5jb250ZW50KX10aGlzLmJsb2NrRWxlbWVudD1TfXJlbmRlcigpe3JldHVybiB0aGlzLmJsb2NrP1RzYDxkaXYgY2xhc3M9Ind5c2l3eWctYmxvY2stY29udGFpbmVyIj48L2Rpdj5gOlRzYGB9cmVuZGVyQmxvY2tDb250ZW50KCl7aWYoIXRoaXMuYmxvY2spcmV0dXJuIiI7bGV0IE09aTEuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKE0pcmV0dXJuIE0ucmVuZGVyKHRoaXMuYmxvY2ssdGhpcy5pc1NlbGVjdGVkKTtsZXQgUz10aGlzLmlzU2VsZWN0ZWQ/IiBzZWxlY3RlZCI6IiI7cmV0dXJuYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7U30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgfWZvY3VzKCl7bGV0IE09aTEuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKE0mJk0uZm9jdXMpe2xldCBGPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksXz17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiBNLmZvY3VzKEYsXyl9aWYodGhpcy5ibG9jayYmeC5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSl7bGV0IEY9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7RiYmRi5mb2N1cygpO3JldHVybn1sZXQgUz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO1MmJihTLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFMuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksUy5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1TJiZ0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQhPT1TJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57Uy5mb2N1cygpfSkpfWZvY3VzV2l0aEN1cnNvcihNPSJlbmQiKXtsZXQgUz1pMS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYoUyYmUy5mb2N1c1dpdGhDdXJzb3Ipe2xldCBrPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksTj17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiBTLmZvY3VzV2l0aEN1cnNvcihrLE0sTil9aWYodGhpcy5ibG9jayYmeC5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSl7dGhpcy5mb2N1cygpO3JldHVybn1sZXQgRj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO2lmKCFGKXJldHVybjtGLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEYuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCJ0cnVlIiksRi5mb2N1cygpO2xldCBfPSgpPT57TT09PSJzdGFydCI/dGhpcy5zZXRDdXJzb3JUb1N0YXJ0KCk6TT09PSJlbmQiP3RoaXMuc2V0Q3Vyc29yVG9FbmQoKTp0eXBlb2YgTT09Im51bWJlciImJkJlLnNldEN1cnNvclBvc2l0aW9uKEYsTSl9O2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1GfHx0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1GP18oKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1GfHx0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQ9PT1GKSYmXygpfSl9Z2V0Q3Vyc29yUG9zaXRpb24oTSl7bGV0IFM9aTEuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKFMmJlMuZ2V0Q3Vyc29yUG9zaXRpb24pe2xldCBxPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIFMuZ2V0Q3Vyc29yUG9zaXRpb24oTSxxKX1sZXQgXz10aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGs9W107XyYmay5wdXNoKF8pLHRoaXMuc2hhZG93Um9vdCYmay5wdXNoKHRoaXMuc2hhZG93Um9vdCk7bGV0IE49QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5rKTtpZihjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFNlbGVjdGlvbiBpbmZvIGZyb20gc2hhZG93IERPTXM6Iix7c2VsZWN0aW9uSW5mbzpOLHNoYWRvd1Jvb3RzQ291bnQ6ay5sZW5ndGh9KSwhTilyZXR1cm4gY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKSxudWxsO2lmKGNvbnNvbGUubG9nKCJnZXRDdXJzb3JQb3NpdGlvbjogUmFuZ2UgaW5mbzoiLHtzdGFydENvbnRhaW5lcjpOLnN0YXJ0Q29udGFpbmVyLHN0YXJ0T2Zmc2V0Ok4uc3RhcnRPZmZzZXQsY29sbGFwc2VkOk4uY29sbGFwc2VkLHN0YXJ0Q29udGFpbmVyVGV4dDpOLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50fSksIU0uY29udGFpbnMoTi5zdGFydENvbnRhaW5lcikpcmV0dXJuIGNvbnNvbGUubG9nKCJnZXRDdXJzb3JQb3NpdGlvbjogUmFuZ2Ugbm90IGluIGVsZW1lbnQiKSxudWxsO2xldCBMPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7TC5zZWxlY3ROb2RlQ29udGVudHMoTSksTC5zZXRFbmQoTi5zdGFydENvbnRhaW5lcixOLnN0YXJ0T2Zmc2V0KTtsZXQgQT1MLnRvU3RyaW5nKCkubGVuZ3RoO3JldHVybiBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246Iix7cG9zaXRpb246QSxwcmVDYXJldFRleHQ6TC50b1N0cmluZygpLGVsZW1lbnRUZXh0Ok0udGV4dENvbnRlbnQsZWxlbWVudFRleHRMZW5ndGg6TS50ZXh0Q29udGVudD8ubGVuZ3RofSksQX1nZXRDb250ZW50KCl7bGV0IE09aTEuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKE0mJk0uZ2V0Q29udGVudCl7bGV0IF89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSxrPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIE0uZ2V0Q29udGVudChfLGspfWxldCBTPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYoIVMpcmV0dXJuIiI7bGV0IEY9Uy5pbm5lckhUTUx8fCIiO3JldHVybiBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IixGKSxGfXNldENvbnRlbnQoTSl7bGV0IFM9aTEuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpO2lmKFMmJlMuc2V0Q29udGVudCl7bGV0IGs9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSxOPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIFMuc2V0Q29udGVudChrLE0sTil9bGV0IEY9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighRilyZXR1cm47bGV0IF89ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PUZ8fHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD09PUY7Ri5pbm5lckhUTUw9TSxfJiZGLmZvY3VzKCl9c2V0Q3Vyc29yVG9TdGFydCgpe2xldCBNPWkxLmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTtpZihNJiZNLnNldEN1cnNvclRvU3RhcnQpe2xldCBGPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIiksXz17c2hhZG93Um9vdDp0aGlzLnNoYWRvd1Jvb3QsY29tcG9uZW50OnRoaXN9O3JldHVybiBNLnNldEN1cnNvclRvU3RhcnQoRixfKX1sZXQgUz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO1MmJkQyLnNldEN1cnNvclRvU3RhcnQoUyl9c2V0Q3Vyc29yVG9FbmQoKXtsZXQgTT1pMS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7aWYoTSYmTS5zZXRDdXJzb3JUb0VuZCl7bGV0IEY9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKSxfPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIE0uc2V0Q3Vyc29yVG9FbmQoRixfKX1sZXQgUz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpO1MmJkQyLnNldEN1cnNvclRvRW5kKFMpfWdldENvbnRleHRNZW51SXRlbXMoKXtpZighdGhpcy5ibG9ja3x8dGhpcy5ibG9jay50eXBlPT09ImRpdmlkZXIiKXJldHVybltdO2xldCBNPVYxLmdldFNsYXNoTWVudUl0ZW1zKCksUz10aGlzLmJsb2NrLnR5cGUsRj10aGlzLnd5c2l3eWdDb21wb25lbnQsXz10aGlzLmJsb2NrLmlkLE49W3tuYW1lOiJDaGFuZ2UgVHlwZSIsaWNvbk5hbWU6InR5cGUiLHN1Ym1lbnU6TS5maWx0ZXIoTD0+TC50eXBlIT09UyYmTC50eXBlIT09ImRpdmlkZXIiKS5tYXAoTD0+KHtuYW1lOkwubGFiZWwsaWNvbk5hbWU6TC5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCIiKSxhY3Rpb246YXN5bmMoKT0+e2lmKEYmJkYuYmxvY2tPcGVyYXRpb25zKXtsZXQgQT1GLmJsb2Nrcy5maW5kKHE9PnEuaWQ9PT1fKTtBJiYoQS50eXBlPUwudHlwZSxBLmNvbnRlbnQ9QS5jb250ZW50fHwiIixMLnR5cGU9PT0iY29kZSI/QS5tZXRhZGF0YT17bGFuZ3VhZ2U6InR5cGVzY3JpcHQifTpMLnR5cGU9PT0ibGlzdCI/QS5tZXRhZGF0YT17bGlzdFR5cGU6ImJ1bGxldCJ9OkwudHlwZT09PSJpbWFnZSI/KEEuY29udGVudD0iIixBLm1ldGFkYXRhPXt1cmw6IiIsbG9hZGluZzohMX0pOkwudHlwZT09PSJ5b3V0dWJlIj8oQS5jb250ZW50PSIiLEEubWV0YWRhdGE9e3ZpZGVvSWQ6IiIsdXJsOiIifSk6TC50eXBlPT09Im1hcmtkb3duIj9BLm1ldGFkYXRhPXtzaG93UHJldmlldzohMX06TC50eXBlPT09Imh0bWwiP0EubWV0YWRhdGE9e3Nob3dQcmV2aWV3OiExfTpMLnR5cGU9PT0iYXR0YWNobWVudCImJihBLmNvbnRlbnQ9IiIsQS5tZXRhZGF0YT17ZmlsZXM6W119KSxGLnVwZGF0ZUJsb2NrRWxlbWVudChfKSxGLnVwZGF0ZVZhbHVlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ri5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhfKX0pKX19fSkpfV07cmV0dXJuWyJpbWFnZSIsImRpdmlkZXIiLCJ5b3V0dWJlIiwiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSl8fE4ucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IkN1dCIsaWNvbk5hbWU6InNjaXNzb3JzIixzaG9ydGN1dDoiQ21kK1giLGFjdGlvbjphc3luYygpPT57ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIpfX0se25hbWU6IkNvcHkiLGljb25OYW1lOiJjb3B5IixzaG9ydGN1dDoiQ21kK0MiLGFjdGlvbjphc3luYygpPT57ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX19LHtuYW1lOiJQYXN0ZSIsaWNvbk5hbWU6ImNsaXBib2FyZCIsc2hvcnRjdXQ6IkNtZCtWIixhY3Rpb246YXN5bmMoKT0+e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJwYXN0ZSIpfX0pLE4ucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IkRlbGV0ZSBCbG9jayIsaWNvbk5hbWU6InRyYXNoMiIsYWN0aW9uOmFzeW5jKCk9PntGJiZGLmJsb2NrT3BlcmF0aW9ucyYmRi5ibG9ja09wZXJhdGlvbnMuZGVsZXRlQmxvY2soXyl9fSksTn1nZXRTcGxpdENvbnRlbnQoKXtjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTdGFydGluZy4uLiIpO2xldCBNPWkxLmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTtpZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBDaGVja2luZyBmb3IgaGFuZGxlciIse2Jsb2NrVHlwZTp0aGlzLmJsb2NrLnR5cGUsaGFzSGFuZGxlcjohIU0saGFzU3BsaXRNZXRob2Q6ISEoTSYmTS5nZXRTcGxpdENvbnRlbnQpfSksTSYmTS5nZXRTcGxpdENvbnRlbnQpe2xldCBWPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7Y29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIix7Y29udGFpbmVyOiEhVixjb250YWluZXJIVE1MOlY/LmlubmVySFRNTD8uc3Vic3RyaW5nKDAsMTAwKX0pO2xldCBSPXtzaGFkb3dSb290OnRoaXMuc2hhZG93Um9vdCxjb21wb25lbnQ6dGhpc307cmV0dXJuIE0uZ2V0U3BsaXRDb250ZW50KFYsUil9bGV0IFM9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZighUylyZXR1cm4gY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpLG51bGw7Y29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRWxlbWVudCBpbmZvOiIse2Jsb2NrVHlwZTp0aGlzLmJsb2NrLnR5cGUsaW5uZXJIVE1MOlMuaW5uZXJIVE1MLHRleHRDb250ZW50OlMudGV4dENvbnRlbnQsdGV4dExlbmd0aDpTLnRleHRDb250ZW50Py5sZW5ndGh9KTtsZXQgXz10aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpPy5zaGFkb3dSb290LGs9W107XyYmay5wdXNoKF8pLHRoaXMuc2hhZG93Um9vdCYmay5wdXNoKHRoaXMuc2hhZG93Um9vdCk7bGV0IE49QmUuZ2V0U2VsZWN0aW9uSW5mbyguLi5rKTtpZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIse3NlbGVjdGlvbkluZm86TixzaGFkb3dSb290c0NvdW50OmsubGVuZ3RofSksIU4pe2lmKGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24pLHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24hPT1udWxsKXtsZXQgVj1TLnRleHRDb250ZW50fHwiIixSPU1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sVi5sZW5ndGgpO3JldHVybiBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTcGxpdHRpbmcgd2l0aCBsYXN0IGtub3duIHBvc2l0aW9uOiIse3BvczpSLGZ1bGxUZXh0TGVuZ3RoOlYubGVuZ3RoLGJlZm9yZTpWLnN1YnN0cmluZygwLFIpLGFmdGVyOlYuc3Vic3RyaW5nKFIpfSkse2JlZm9yZTpWLnN1YnN0cmluZygwLFIpLGFmdGVyOlYuc3Vic3RyaW5nKFIpfX1yZXR1cm4gbnVsbH1pZihjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTZWxlY3Rpb24gcmFuZ2U6Iix7c3RhcnRDb250YWluZXI6Ti5zdGFydENvbnRhaW5lcixzdGFydE9mZnNldDpOLnN0YXJ0T2Zmc2V0LHN0YXJ0Q29udGFpbmVySW5FbGVtZW50OlMuY29udGFpbnMoTi5zdGFydENvbnRhaW5lcil9KSwhQmUuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oUyxOLnN0YXJ0Q29udGFpbmVyKSl7aWYoY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIG5vdCBpbiB0aGlzIGJsb2NrLCB1c2luZyBsYXN0IGtub3duIHBvc2l0aW9uOiIsdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiksdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiE9PW51bGwpe2xldCBWPVMudGV4dENvbnRlbnR8fCIiLFI9TWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbixWLmxlbmd0aCk7cmV0dXJue2JlZm9yZTpWLnN1YnN0cmluZygwLFIpLGFmdGVyOlYuc3Vic3RyaW5nKFIpfX1yZXR1cm4gbnVsbH1sZXQgTD10aGlzLmdldEN1cnNvclBvc2l0aW9uKFMpO2lmKGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLEwpLEw9PT1udWxsfHxMPT09MClyZXR1cm4gY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ3Vyc29yIGF0IHN0YXJ0IG9yIG51bGwsIG1vdmluZyBhbGwgY29udGVudCIpLHtiZWZvcmU6IiIsYWZ0ZXI6Uy5pbm5lckhUTUx9O2xldCBBPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCkscT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO0Euc2V0U3RhcnQoUywwKSxBLnNldEVuZChOLnN0YXJ0Q29udGFpbmVyLE4uc3RhcnRPZmZzZXQpLHEuc2V0U3RhcnQoTi5zdGFydENvbnRhaW5lcixOLnN0YXJ0T2Zmc2V0KSxxLnNldEVuZChTLFMuY2hpbGROb2Rlcy5sZW5ndGgpO2xldCBDPUEuY2xvbmVDb250ZW50cygpLHo9cS5jbG9uZUNvbnRlbnRzKCksRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtFLmFwcGVuZENoaWxkKEMpO2xldCBUPUUuaW5uZXJIVE1MO0UuaW5uZXJIVE1MPSIiLEUuYXBwZW5kQ2hpbGQoeik7bGV0ICQ9RS5pbm5lckhUTUw7cmV0dXJuIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEZpbmFsIHNwbGl0IHJlc3VsdDoiLHtjdXJzb3JQb3M6TCxiZWZvcmVIdG1sOlQsYmVmb3JlTGVuZ3RoOlQubGVuZ3RoLGJlZm9yZUh0bWxQcmV2aWV3OlQuc3Vic3RyaW5nKDAsMTAwKSsoVC5sZW5ndGg+MTAwPyIuLi4iOiIiKSxhZnRlckh0bWw6JCxhZnRlckxlbmd0aDokLmxlbmd0aCxhZnRlckh0bWxQcmV2aWV3OiQuc3Vic3RyaW5nKDAsMTAwKSsoJC5sZW5ndGg+MTAwPyIuLi4iOiIiKX0pLHtiZWZvcmU6VCxhZnRlcjokfX1zdGF0aWN7V3MoaSxhKX19O3JldHVybiB4PWl9KSgpfSk7dmFyIERWPWIoKCk9PntFVigpO0VhKCk7UmwoKTtudygpO01ndCgpO19WKCk7YzQoKTtrVigpO1pyKCk7VXMoKTtUVigpOyRWKCk7Rmd0KCk7T2d0KCk7Umd0KCk7QVYoKTtCZ3QoKTt6VigpO1NWKCk7cWd0KCl9KTt2YXIgdm8sZ2EsUFYsRVY9YigoKT0+e18xKCk7d2d0KCk7WjAoKTt1ZSgpO0RWKCk7VmUoKTt2bz1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGdhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxQVj0oKCk9PntsZXQgdD1bcGUoImRlZXMtaW5wdXQtd3lzaXd5ZyIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtLKCldLHk9W0soKV0seD1bSygpXSxGPVtLKCldLE49W0soKV0sdm8odGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2YWx1ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InZhbHVlImluIHosZ2V0Ono9PnoudmFsdWUsc2V0Oih6LEUpPT57ei52YWx1ZT1FfX0sbWV0YWRhdGE6Q30sbixvKSx2byh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dHB1dEZvcm1hdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+Im91dHB1dEZvcm1hdCJpbiB6LGdldDp6PT56Lm91dHB1dEZvcm1hdCxzZXQ6KHosRSk9Pnt6Lm91dHB1dEZvcm1hdD1FfX0sbWV0YWRhdGE6Q30sYyxwKSx2byh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImJsb2NrcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImJsb2NrcyJpbiB6LGdldDp6PT56LmJsb2NrcyxzZXQ6KHosRSk9Pnt6LmJsb2Nrcz1FfX0sbWV0YWRhdGE6Q30sZixnKSx2byh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImRyYWdnZWRCbG9ja0lkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iZHJhZ2dlZEJsb2NrSWQiaW4geixnZXQ6ej0+ei5kcmFnZ2VkQmxvY2tJZCxzZXQ6KHosRSk9Pnt6LmRyYWdnZWRCbG9ja0lkPUV9fSxtZXRhZGF0YTpDfSx2LG0pLHZvKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ092ZXJCbG9ja0lkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iZHJhZ092ZXJCbG9ja0lkImluIHosZ2V0Ono9PnouZHJhZ092ZXJCbG9ja0lkLHNldDooeixFKT0+e3ouZHJhZ092ZXJCbG9ja0lkPUV9fSxtZXRhZGF0YTpDfSxNLFMpLHZvKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHJhZ092ZXJQb3NpdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImRyYWdPdmVyUG9zaXRpb24iaW4geixnZXQ6ej0+ei5kcmFnT3ZlclBvc2l0aW9uLHNldDooeixFKT0+e3ouZHJhZ092ZXJQb3NpdGlvbj1FfX0sbWV0YWRhdGE6Q30sXyxrKSx2byh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InNlbGVjdGVkVGV4dCJpbiB6LGdldDp6PT56LnNlbGVjdGVkVGV4dCxzZXQ6KHosRSk9Pnt6LnNlbGVjdGVkVGV4dD1FfX0sbWV0YWRhdGE6Q30sTCxBKSx2byhudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLHE9aT1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfXN0YXRpYyBkZW1vPXhndDtzdGF0aWMgZGVtb0dyb3Vwcz1bIklucHV0IiwiV29ya3NwYWNlIl07I2U9Z2EodGhpcyxuLCIiKTtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgdmFsdWUoQyl7dGhpcy4jZT1DfSN0PShnYSh0aGlzLG8pLGdhKHRoaXMsYywiaHRtbCIpKTtnZXQgb3V0cHV0Rm9ybWF0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IG91dHB1dEZvcm1hdChDKXt0aGlzLiN0PUN9I2E9KGdhKHRoaXMscCksZ2EodGhpcyxmLFt7aWQ6VjEuZ2VuZXJhdGVCbG9ja0lkKCksdHlwZToicGFyYWdyYXBoIixjb250ZW50OiIifV0pKTtnZXQgYmxvY2tzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGJsb2NrcyhDKXt0aGlzLiNhPUN9c2VsZWN0ZWRCbG9ja0lkPShnYSh0aGlzLGcpLG51bGwpO3NsYXNoTWVudT1pdy5nZXRJbnN0YW5jZSgpOyNpPWdhKHRoaXMsdixudWxsKTtnZXQgZHJhZ2dlZEJsb2NrSWQoKXtyZXR1cm4gdGhpcy4jaX1zZXQgZHJhZ2dlZEJsb2NrSWQoQyl7dGhpcy4jaT1DfSNyPShnYSh0aGlzLG0pLGdhKHRoaXMsTSxudWxsKSk7Z2V0IGRyYWdPdmVyQmxvY2tJZCgpe3JldHVybiB0aGlzLiNyfXNldCBkcmFnT3ZlckJsb2NrSWQoQyl7dGhpcy4jcj1DfSNzPShnYSh0aGlzLFMpLGdhKHRoaXMsXyxudWxsKSk7Z2V0IGRyYWdPdmVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jc31zZXQgZHJhZ092ZXJQb3NpdGlvbihDKXt0aGlzLiNzPUN9Zm9ybWF0dGluZ01lbnU9KGdhKHRoaXMsayksc3cuZ2V0SW5zdGFuY2UoKSk7I249Z2EodGhpcyxMLCIiKTtnZXQgc2VsZWN0ZWRUZXh0KCl7cmV0dXJuIHRoaXMuI259c2V0IHNlbGVjdGVkVGV4dChDKXt0aGlzLiNuPUN9ZWRpdG9yQ29udGVudFJlZj1nYSh0aGlzLEEpO2lzQ29tcG9zaW5nPSExO2Jsb2NrT3BlcmF0aW9ucztpbnB1dEhhbmRsZXI7a2V5Ym9hcmRIYW5kbGVyO2RyYWdEcm9wSGFuZGxlcjtoaXN0b3J5O3N0YXRpYyBzdHlsZXM9W0NlLC4uLlhlLmJhc2VTdHlsZXMsaC5kZWZhdWx0U3R5bGVzLENWXTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5ibG9ja09wZXJhdGlvbnM9bmV3IEE4KHRoaXMpLHRoaXMuaW5wdXRIYW5kbGVyPW5ldyBWOCh0aGlzKSx0aGlzLmtleWJvYXJkSGFuZGxlcj1uZXcgajgodGhpcyksdGhpcy5kcmFnRHJvcEhhbmRsZXI9bmV3IFU4KHRoaXMpLHRoaXMuaGlzdG9yeT1uZXcgVzh9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlucHV0SGFuZGxlcj8uZGVzdHJveSgpLHRoaXMuYmx1clRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCksdGhpcy5ibHVyVGltZW91dD1udWxsKX1hc3luYyBmaXJzdFVwZGF0ZWQoKXtpZih0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGg+MCl7bGV0IEM9dGhpcy5vdXRwdXRGb3JtYXQ9PT0iaHRtbCI/TWkucGFyc2VIdG1sVG9CbG9ja3ModGhpcy52YWx1ZSk6TWkucGFyc2VNYXJrZG93blRvQmxvY2tzKHRoaXMudmFsdWUpO0MubGVuZ3RoPjAmJih0aGlzLmJsb2Nrcz1DKX10aGlzLnVwZGF0ZVZhbHVlKCksdGhpcy5lZGl0b3JDb250ZW50UmVmPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKSx0aGlzLmVkaXRvckNvbnRlbnRSZWYmJnRoaXMuZWRpdG9yQ29udGVudFJlZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsQz0+dGhpcy5oYW5kbGVFZGl0b3JDbGljayhDKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibG9jay10ZXh0LXNlbGVjdGVkIixDPT57aWYoIXRoaXMuc2xhc2hNZW51LnZpc2libGUmJkMuZGV0YWlsLmhhc1NlbGVjdGlvbiYmQy5kZXRhaWwudGV4dC5sZW5ndGg+MCYmKHRoaXMuc2VsZWN0ZWRUZXh0PUMuZGV0YWlsLnRleHQsQy5kZXRhaWwucmVjdCkpe2xldCB6PXt4OkMuZGV0YWlsLnJlY3QubGVmdCtDLmRldGFpbC5yZWN0LndpZHRoLzIseTpNYXRoLm1heCg0NSxDLmRldGFpbC5yZWN0LnRvcC00NSl9O3RoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh6LGFzeW5jIEU9PmF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoRSkpfX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQz0+e2xldCB6PXRoaXMuZm9ybWF0dGluZ01lbnUuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpO2lmKHomJnouY29udGFpbnMoQy50YXJnZXQpKXJldHVybjtsZXQgRT13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7RSYmRS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGg+MHx8dGhpcy5mb3JtYXR0aW5nTWVudS52aXNpYmxlJiZ0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixDPT57bGV0IHo9Qy50YXJnZXQ7IXRoaXMuY29udGFpbnMoeikmJiF0aGlzLnNoYWRvd1Jvb3Q/LmNvbnRhaW5zKHopfHwoKEMubWV0YUtleXx8Qy5jdHJsS2V5KSYmIUMuc2hpZnRLZXkmJkMua2V5PT09InoiPyhDLnByZXZlbnREZWZhdWx0KCksdGhpcy51bmRvKCkpOihDLm1ldGFLZXl8fEMuY3RybEtleSkmJkMuc2hpZnRLZXkmJkMua2V5PT09InoiJiYoQy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucmVkbygpKSl9KSx0aGlzLmhpc3Rvcnkuc2F2ZVN0YXRlKHRoaXMuYmxvY2tzLHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSx0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKX1yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCl7dGhpcy5lZGl0b3JDb250ZW50UmVmJiYodGhpcy5lZGl0b3JDb250ZW50UmVmLmlubmVySFRNTD0iIix0aGlzLmJsb2Nrcy5mb3JFYWNoKEM9PntsZXQgej10aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChDKTt0aGlzLmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQoeil9KSl9Y3JlYXRlQmxvY2tFbGVtZW50KEMpe2xldCB6PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKHouY2xhc3NOYW1lPSJibG9jay13cmFwcGVyIix6LnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsQy5pZCksQy50eXBlIT09ImRpdmlkZXIiKXtsZXQgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtULmNsYXNzTmFtZT0iZHJhZy1oYW5kbGUiLFQuZHJhZ2dhYmxlPSEwLFQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwkPT50aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnU3RhcnQoJCxDKSksei5hcHBlbmRDaGlsZChUKX1sZXQgRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXd5c2l3eWctYmxvY2siKTtyZXR1cm4gRS5ibG9jaz1DLEUuaXNTZWxlY3RlZD10aGlzLnNlbGVjdGVkQmxvY2tJZD09PUMuaWQsRS53eXNpd3lnQ29tcG9uZW50PXRoaXMsRS5oYW5kbGVycz17b25JbnB1dDpUPT50aGlzLmlucHV0SGFuZGxlci5oYW5kbGVCbG9ja0lucHV0KFQsQyksb25LZXlEb3duOlQ9PnRoaXMua2V5Ym9hcmRIYW5kbGVyLmhhbmRsZUJsb2NrS2V5RG93bihULEMpLG9uRm9jdXM6KCk9PnRoaXMuaGFuZGxlQmxvY2tGb2N1cyhDKSxvbkJsdXI6KCk9PnRoaXMuaGFuZGxlQmxvY2tCbHVyKEMpLG9uQ29tcG9zaXRpb25TdGFydDooKT0+dGhpcy5pc0NvbXBvc2luZz0hMCxvbkNvbXBvc2l0aW9uRW5kOigpPT50aGlzLmlzQ29tcG9zaW5nPSExLG9uTW91c2VVcDpUPT50aGlzLmhhbmRsZVRleHRTZWxlY3Rpb24oVCksb25SZXF1ZXN0VXBkYXRlOigpPT50aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChDLmlkKX0sei5hcHBlbmRDaGlsZChFKSx6LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixUPT50aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnT3ZlcihULEMpKSx6LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLFQ9PnRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoVCxDKSksei5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCgpPT50aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnTGVhdmUoQykpLHp9dXBkYXRlQmxvY2tFbGVtZW50KEMpe2xldCB6PXRoaXMuYmxvY2tzLmZpbmQoJD0+JC5pZD09PUMpO2lmKCF6KXJldHVybjtsZXQgRT10aGlzLmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Q30iXWApO2lmKCFFKXJldHVybjtsZXQgVD10aGlzLmNyZWF0ZUJsb2NrRWxlbWVudCh6KTtFLnJlcGxhY2VXaXRoKFQpfXJlbmRlcigpe3JldHVybiBUc2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkPyJkcmFnZ2luZyI6IiJ9IgogICAgICAgICAgaWQ9ImVkaXRvci1jb250ZW50IgogICAgICAgID4KICAgICAgICAgIDwhLS0gQmxvY2tzIHdpbGwgYmUgcmVuZGVyZWQgcHJvZ3JhbW1hdGljYWxseSAtLT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWhhbmRsZVNsYXNoTWVudUtleWJvYXJkKEMpe3N3aXRjaChDLmtleSl7Y2FzZSJBcnJvd0Rvd24iOkMucHJldmVudERlZmF1bHQoKSx0aGlzLnNsYXNoTWVudS5uYXZpZ2F0ZSgiZG93biIpO2JyZWFrO2Nhc2UiQXJyb3dVcCI6Qy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2xhc2hNZW51Lm5hdmlnYXRlKCJ1cCIpO2JyZWFrO2Nhc2UiRW50ZXIiOkMucHJldmVudERlZmF1bHQoKSx0aGlzLnNsYXNoTWVudS5zZWxlY3RDdXJyZW50KCk7YnJlYWs7Y2FzZSJFc2NhcGUiOkMucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlU2xhc2hNZW51KCEwKTticmVha319Y2xvc2VTbGFzaE1lbnUoQz0hMSl7aWYoQyYmdGhpcy5zZWxlY3RlZEJsb2NrSWQpe2xldCB6PXRoaXMuYmxvY2tzLmZpbmQoRT0+RS5pZD09PXRoaXMuc2VsZWN0ZWRCbG9ja0lkKTtpZih6KXtsZXQgVD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ei5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZihUKXtsZXQgJD1ULmdldENvbnRlbnQoKTtpZigkLnN0YXJ0c1dpdGgoIi8iKSl7bGV0IFY9JC5yZXBsYWNlKC9eXC9bXlxzXSpccyovLCIiKS50cmltKCk7VC5zZXRDb250ZW50KFYpLHouY29udGVudD1WLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1QuZm9jdXNXaXRoQ3Vyc29yKDApfSl9fX19dGhpcy5zbGFzaE1lbnUuaGlkZSgpfWhhbmRsZUJsb2NrRm9jdXMoQyl7dGhpcy5ibHVyVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KSx0aGlzLmJsdXJUaW1lb3V0PW51bGwpO2xldCB6PXRoaXMuc2VsZWN0ZWRCbG9ja0lkO2lmKHRoaXMuc2VsZWN0ZWRCbG9ja0lkPUMuaWQseiE9PUMuaWQpe2lmKHope2xldCBWPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7en0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtWJiYoVi5pc1NlbGVjdGVkPSExKX1sZXQgVD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke0MuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7VCYmKFQuaXNTZWxlY3RlZD0hMCl9fWJsdXJUaW1lb3V0PW51bGw7aGFuZGxlQmxvY2tCbHVyKEMpe2lmKHRoaXMuYmx1clRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KSx0aGlzLnNsYXNoTWVudS52aXNpYmxlKXJldHVybjtsZXQgRT10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke0MuaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7aWYoRSYmRS5nZXRDb250ZW50KXtsZXQgVD1FLmdldENvbnRlbnQoKTtDLmNvbnRlbnQhPT1UJiYoQy5jb250ZW50PVQpfXRoaXMuYmx1clRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCJibG9jayIpfHx0aGlzLnVwZGF0ZVZhbHVlKCl9LDEwMCl9aGFuZGxlRWRpdG9yQ2xpY2soQyl7bGV0IHo9Qy50YXJnZXQ7aWYodGhpcy5zbGFzaE1lbnUudmlzaWJsZSYmdGhpcy5jbG9zZVNsYXNoTWVudSghMCksei5jbGFzc0xpc3QuY29udGFpbnMoImVkaXRvci1jb250ZW50Iikpe2xldCBFPXRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aC0xXTt0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKEUuaWQsRS50eXBlPT09ImRpdmlkZXIifHxFLnR5cGU9PT0iaW1hZ2UiP3ZvaWQgMDoiZW5kIil9fWNyZWF0ZU5ld0Jsb2NrKEM9InBhcmFncmFwaCIsej0iIixFKXtyZXR1cm57aWQ6VjEuZ2VuZXJhdGVCbG9ja0lkKCksdHlwZTpDLGNvbnRlbnQ6eiwuLi5FJiZ7bWV0YWRhdGE6RX19fWFzeW5jIGluc2VydEJsb2NrQWZ0ZXIoQyx6LEU9ITApe2xldCBUPXRoaXMuYmxvY2tzLmZpbmRJbmRleChWPT5WLmlkPT09Qy5pZCk7dGhpcy5ibG9ja3M9Wy4uLnRoaXMuYmxvY2tzLnNsaWNlKDAsVCsxKSx6LC4uLnRoaXMuYmxvY2tzLnNsaWNlKFQrMSldO2xldCAkPXRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtDLmlkfSJdYCk7aWYoJCl7bGV0IFY9dGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoeik7JC5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyZW5kIixWKX10aGlzLnVwZGF0ZVZhbHVlKCksRSYmei50eXBlIT09ImRpdmlkZXIiJiYoYXdhaXQgbmV3IFByb21pc2UoVj0+c2V0VGltZW91dChWLDApKSxhd2FpdCB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKHouaWQsInN0YXJ0IikpfWFzeW5jIGluc2VydEJsb2NrKEMpe2xldCB6PXRoaXMuYmxvY2tzLmZpbmQoJD0+JC5pZD09PXRoaXMuc2VsZWN0ZWRCbG9ja0lkKTtpZigheil7dGhpcy5jbG9zZVNsYXNoTWVudSgpO3JldHVybn1sZXQgVD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ei5pZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZihUKXtsZXQgJD1ULmdldENvbnRlbnQoKTtpZigkLnN0YXJ0c1dpdGgoIi8iKSl7bGV0IFY9JC5yZXBsYWNlKC9eXC9bXlxzXSpccyovLCIiKS50cmltKCk7VC5zZXRDb250ZW50KFYpLHouY29udGVudD1WfX1pZih0aGlzLmNsb3NlU2xhc2hNZW51KCExKSxDPT09ImNvZGUiJiYoei5tZXRhZGF0YT17bGFuZ3VhZ2U6InR5cGVzY3JpcHQifSksei50eXBlPUMsei5jb250ZW50PXouY29udGVudHx8IiIsQz09PSJkaXZpZGVyIil7ei5jb250ZW50PSIgIjtsZXQgJD10aGlzLmNyZWF0ZU5ld0Jsb2NrKCk7dGhpcy5pbnNlcnRCbG9ja0FmdGVyKHosJCl9ZWxzZSBDPT09Imxpc3QiPyh6Lm1ldGFkYXRhPXtsaXN0VHlwZToiYnVsbGV0In0sei5jb250ZW50PSIiKTpDPT09ImltYWdlIj8oei5jb250ZW50PSIiLHoubWV0YWRhdGE9e3VybDoiIixsb2FkaW5nOiExfSk6Qz09PSJ5b3V0dWJlIj8oei5jb250ZW50PSIiLHoubWV0YWRhdGE9e3ZpZGVvSWQ6IiIsdXJsOiIifSk6Qz09PSJtYXJrZG93biI/ei5tZXRhZGF0YT17c2hvd1ByZXZpZXc6ITF9OkM9PT0iaHRtbCI/ei5tZXRhZGF0YT17c2hvd1ByZXZpZXc6ITF9OkM9PT0iYXR0YWNobWVudCI/KHouY29udGVudD0iIix6Lm1ldGFkYXRhPXtmaWxlczpbXX0pOnouY29udGVudD16LmNvbnRlbnR8fCIiO3RoaXMudXBkYXRlQmxvY2tFbGVtZW50KHouaWQpLHRoaXMudXBkYXRlVmFsdWUoKSxhd2FpdCBuZXcgUHJvbWlzZSgkPT5zZXRUaW1lb3V0KCQsMCkpLEM9PT0ibGlzdCI/KHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soei5pZCwic3RhcnQiKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgVj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3ouaWR9Il1gKT8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7ViYmVi5mb2N1c0xpc3RJdGVtKCl9KSk6QyE9PSJkaXZpZGVyIiYmQyE9PSJpbWFnZSImJkMhPT0ieW91dHViZSImJkMhPT0ibWFya2Rvd24iJiZDIT09Imh0bWwiJiZDIT09ImF0dGFjaG1lbnQiP3RoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soei5pZCwic3RhcnQiKTooQz09PSJpbWFnZSJ8fEM9PT0ieW91dHViZSJ8fEM9PT0ibWFya2Rvd24ifHxDPT09Imh0bWwifHxDPT09ImF0dGFjaG1lbnQiKSYmdGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayh6LmlkKX11cGRhdGVWYWx1ZSgpe3RoaXMub3V0cHV0Rm9ybWF0PT09Imh0bWwiP3RoaXMudmFsdWU9TWkuZ2V0SHRtbE91dHB1dCh0aGlzLmJsb2Nrcyk6dGhpcy52YWx1ZT1NaS5nZXRNYXJrZG93bk91dHB1dCh0aGlzLmJsb2NrcyksdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSksdGhpcy5zYXZlVG9IaXN0b3J5KCEwKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXNldFZhbHVlKEMpe3RoaXMudmFsdWU9Qyx0aGlzLm91dHB1dEZvcm1hdD09PSJodG1sIj90aGlzLmJsb2Nrcz1NaS5wYXJzZUh0bWxUb0Jsb2NrcyhDKTp0aGlzLmJsb2Nrcz1NaS5wYXJzZU1hcmtkb3duVG9CbG9ja3MoQyksdGhpcy5ibG9ja3MubGVuZ3RoPT09MCYmKHRoaXMuYmxvY2tzPVt7aWQ6VjEuZ2VuZXJhdGVCbG9ja0lkKCksdHlwZToicGFyYWdyYXBoIixjb250ZW50OiIifV0pLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpLHRoaXMuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCl9ZXhwb3J0QmxvY2tzKCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ibG9ja3MpKX1pbXBvcnRCbG9ja3MoQyl7dGhpcy5ibG9ja3M9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShDKSksdGhpcy51cGRhdGVWYWx1ZSgpLHRoaXMuZWRpdG9yQ29udGVudFJlZiYmdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCl9ZXhwb3J0QXNIdG1sKCl7cmV0dXJuIE1pLmdldEh0bWxPdXRwdXQodGhpcy5ibG9ja3MpfWV4cG9ydEFzTWFya2Rvd24oKXtyZXR1cm4gTWkuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpfWV4cG9ydFN0YXRlKCl7cmV0dXJue2Jsb2Nrczp0aGlzLmV4cG9ydEJsb2NrcygpLG91dHB1dEZvcm1hdDp0aGlzLm91dHB1dEZvcm1hdH19aW1wb3J0U3RhdGUoQyl7Qy5vdXRwdXRGb3JtYXQmJih0aGlzLm91dHB1dEZvcm1hdD1DLm91dHB1dEZvcm1hdCksdGhpcy5pbXBvcnRCbG9ja3MoQy5ibG9ja3MpfWhhbmRsZURyYWdFbmQoKXtpZih0aGlzLmRyYWdnZWRCbG9ja0lkKXtsZXQgej10aGlzLmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7dGhpcy5kcmFnZ2VkQmxvY2tJZH0iXWApO3omJnouY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKX10aGlzLmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKS5mb3JFYWNoKHo9Pnt6LmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3Zlci1iZWZvcmUiLCJkcmFnLW92ZXItYWZ0ZXIiKX0pLHRoaXMuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMuZHJhZ2dlZEJsb2NrSWQ9bnVsbCx0aGlzLmRyYWdPdmVyQmxvY2tJZD1udWxsLHRoaXMuZHJhZ092ZXJQb3NpdGlvbj1udWxsfWhhbmRsZURyb3AoQyx6KXtpZihDLnByZXZlbnREZWZhdWx0KCksIXRoaXMuZHJhZ2dlZEJsb2NrSWR8fHRoaXMuZHJhZ2dlZEJsb2NrSWQ9PT16LmlkKXJldHVybjtsZXQgRT10aGlzLmJsb2Nrcy5maW5kSW5kZXgoUj0+Ui5pZD09PXRoaXMuZHJhZ2dlZEJsb2NrSWQpLFQ9dGhpcy5ibG9ja3MuZmluZEluZGV4KFI9PlIuaWQ9PT16LmlkKTtpZihFPT09LTF8fFQ9PT0tMSlyZXR1cm47bGV0WyRdPXRoaXMuYmxvY2tzLnNwbGljZShFLDEpLFY9VDt0aGlzLmRyYWdPdmVyUG9zaXRpb249PT0iYWZ0ZXIiP1Y9RTxUP1Q6VCsxOlY9RTxUP1QtMTpULHRoaXMuYmxvY2tzLnNwbGljZShWLDAsJCksdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCksdGhpcy51cGRhdGVWYWx1ZSgpLHRoaXMuaGFuZGxlRHJhZ0VuZCgpLHNldFRpbWVvdXQoKCk9PntsZXQgUj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7JC5pZH0iXSAuYmxvY2tgKTtSJiYkLnR5cGUhPT0iZGl2aWRlciImJlIuZm9jdXMoKX0sMTAwKX1oYW5kbGVUZXh0U2VsZWN0aW9uKEMpe3RoaXMuc2xhc2hNZW51LnZpc2libGV9dXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpe2xldCBDPVtdO3RoaXMuc2hhZG93Um9vdCYmQy5wdXNoKHRoaXMuc2hhZG93Um9vdCksdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpPy5mb3JFYWNoKFQ9PntsZXQgJD1ULnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOyQ/LnNoYWRvd1Jvb3QmJkMucHVzaCgkLnNoYWRvd1Jvb3QpfSk7bGV0IEU9anMuZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uQyk7RSYmdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KHt4OkUueCx5OkUueX0sYXN5bmMgVD0+YXdhaXQgdGhpcy5hcHBseUZvcm1hdChUKSl9aGlkZUZvcm1hdHRpbmdNZW51KCl7dGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCksdGhpcy5zZWxlY3RlZFRleHQ9IiJ9YXN5bmMgYXBwbHlGb3JtYXQoQyl7bGV0IHo9W107dGhpcy5zaGFkb3dSb290JiZ6LnB1c2godGhpcy5zaGFkb3dSb290KSx0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik/LmZvckVhY2gocmU9PntsZXQgaj1yZS5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtqPy5zaGFkb3dSb290JiZ6LnB1c2goai5zaGFkb3dSb290KX0pO2xldCBUPUJlLmdldFNlbGVjdGlvbkluZm8oLi4ueik7aWYoIVQpcmV0dXJuO2xldCAkLFYsUj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKTtmb3IobGV0IHJlPTA7cmU8Ui5sZW5ndGg7cmUrKyl7bGV0IGo9UltyZV0sbWU9ai5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZihtZT8uc2hhZG93Um9vdCl7bGV0IHdlPW1lLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7aWYod2UmJih3ZS5jb250YWlucyhULnN0YXJ0Q29udGFpbmVyKXx8d2UuY29udGFpbnMoVC5lbmRDb250YWluZXIpKSl7bGV0IEg9ai5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTskPXRoaXMuYmxvY2tzLmZpbmQoY2U9PmNlLmlkPT09SCksVj1tZTticmVha319fWlmKCEkfHwhVilyZXR1cm47bGV0IFU9QmUuY3JlYXRlUmFuZ2VGcm9tSW5mbyhUKTtpZihDPT09ImxpbmsiKXtsZXQgcmU9YXdhaXQgdGhpcy5zaG93TGlua0RpYWxvZygpO2lmKCFyZSl7Vi5mb2N1cygpO3JldHVybn1qcy5hcHBseUZvcm1hdChDLHJlLFUseil9ZWxzZSBqcy5hcHBseUZvcm1hdChDLHZvaWQgMCxVLHopO2F3YWl0IG5ldyBQcm9taXNlKHJlPT5zZXRUaW1lb3V0KHJlLDEwKSksJC5jb250ZW50PVYuZ2V0Q29udGVudCgpLHRoaXMudXBkYXRlVmFsdWUoKSxWLmZvY3VzKCksQz09PSJsaW5rIj90aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOnRoaXMuc2VsZWN0ZWRUZXh0PSIifWFzeW5jIHNob3dMaW5rRGlhbG9nKCl7cmV0dXJuIG5ldyBQcm9taXNlKEM9PntsZXQgej1udWxsO2wxLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkFkZCBMaW5rIixjb250ZW50OlRzYAogICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAubGluay1pbnB1dCB7CiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGVlcy1jb2xvci1saW5lLWJyaWdodCk7CiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRlZXMtY29sb3ItaW5wdXQpOwogICAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXRleHQpOwogICAgICAgICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5saW5rLWlucHV0OmZvY3VzIHsKICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGVlcy1jb2xvci1wcmltYXJ5KTsKICAgICAgICAgICAgfQogICAgICAgICAgPC9zdHlsZT4KICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgY2xhc3M9ImxpbmstaW5wdXQiIAogICAgICAgICAgICB0eXBlPSJ1cmwiIAogICAgICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly9leGFtcGxlLmNvbSIgCiAgICAgICAgICAgIEBrZXlkb3duPSIke0U9PntpZihFLmtleT09PSJFbnRlciIpe2xldCBUPUUudGFyZ2V0O3o9VC52YWx1ZTtsZXQgJD1ULmNsb3Nlc3QoImRlZXMtbW9kYWwiKTtpZigkKXtsZXQgVj0kLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ib3R0b21CdXR0b246bGFzdC1jaGlsZCIpO1YmJlYuY2xpY2soKX19fX0iCiAgICAgICAgICAgIEBpbnB1dD0iJHtFPT57ej1FLnRhcmdldC52YWx1ZX19IgogICAgICAgICAgLz4KICAgICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgRT0+e0UuZGVzdHJveSgpLEMobnVsbCl9fSx7bmFtZToiQWRkIExpbmsiLGFjdGlvbjphc3luYyBFPT57RS5kZXN0cm95KCksQyh6KX19XX0pLHNldFRpbWVvdXQoKCk9PntsZXQgRT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIC5saW5rLWlucHV0Iik7RSYmRS5mb2N1cygpfSwxMDApfSl9dW5kbygpe2xldCBDPXRoaXMuaGlzdG9yeS51bmRvKCk7QyYmdGhpcy5yZXN0b3JlU3RhdGUoQyl9cmVkbygpe2xldCBDPXRoaXMuaGlzdG9yeS5yZWRvKCk7QyYmdGhpcy5yZXN0b3JlU3RhdGUoQyl9cmVzdG9yZVN0YXRlKEMpe3RoaXMuYmxvY2tzPUMuYmxvY2tzLHRoaXMuc2VsZWN0ZWRCbG9ja0lkPUMuc2VsZWN0ZWRCbG9ja0lkLHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpLEMuY3Vyc29yUG9zaXRpb24/c2V0VGltZW91dCgoKT0+e2xldCBFPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Qy5jdXJzb3JQb3NpdGlvbi5ibG9ja0lkfSJdYCk/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpO0UmJkUuZm9jdXNXaXRoQ3Vyc29yKEMuY3Vyc29yUG9zaXRpb24ub2Zmc2V0KX0sNTApOkMuc2VsZWN0ZWRCbG9ja0lkJiZzZXRUaW1lb3V0KCgpPT57dGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhDLnNlbGVjdGVkQmxvY2tJZCl9LDUwKSx0aGlzLnVwZGF0ZVZhbHVlKCl9c2F2ZVRvSGlzdG9yeShDPSEwKXtsZXQgejtpZih0aGlzLnNlbGVjdGVkQmxvY2tJZCl7bGV0IFQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHt0aGlzLnNlbGVjdGVkQmxvY2tJZH0iXWApPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTtpZihUJiZ0eXBlb2YgVC5nZXRDdXJzb3JQb3NpdGlvbj09ImZ1bmN0aW9uIil7bGV0ICQ9VC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTtpZigkKXtsZXQgVj1ULmdldEN1cnNvclBvc2l0aW9uKCQpO1YhPT1udWxsJiYoej17YmxvY2tJZDp0aGlzLnNlbGVjdGVkQmxvY2tJZCxvZmZzZXQ6Vn0pfX19Qz90aGlzLmhpc3Rvcnkuc2F2ZVN0YXRlKHRoaXMuYmxvY2tzLHRoaXMuc2VsZWN0ZWRCbG9ja0lkLHopOnRoaXMuaGlzdG9yeS5zYXZlQ2hlY2twb2ludCh0aGlzLmJsb2Nrcyx0aGlzLnNlbGVjdGVkQmxvY2tJZCx6KX1zdGF0aWN7Z2EoaSxhKX19O3JldHVybiBxPWl9KSgpfSk7dmFyIFZndD1iKCgpPT57RVYoKTtEVigpfSk7dmFyIG93LGpndD1iKCgpPT57b3c9Y2xhc3N7b3B0aW9ucztjYW52YXM7Y3R4O2ltZztvdmVybGF5Q2FudmFzO292ZXJsYXlDdHg7Y3JvcFg9MDtjcm9wWT0wO2Nyb3BTaXplPTIwMDttaW5Dcm9wU2l6ZT01MDtpc0RyYWdnaW5nPSExO2lzUmVzaXppbmc9ITE7ZHJhZ1N0YXJ0WD0wO2RyYWdTdGFydFk9MDtyZXNpemVIYW5kbGU9IiI7aW1hZ2VTY2FsZT0xO2ltYWdlT2Zmc2V0WD0wO2ltYWdlT2Zmc2V0WT0wO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz17bWluU2l6ZTo1MCxvdXRwdXRTaXplOjgwMCxvdXRwdXRRdWFsaXR5Oi45NSwuLi5lfSx0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMub3ZlcmxheUNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLm92ZXJsYXlDdHg9dGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5pbWc9bmV3IEltYWdlfWFzeW5jIGluaXRpYWxpemUoKXthd2FpdCB0aGlzLmxvYWRJbWFnZSgpLHRoaXMuc2V0dXBDYW52YXNlcygpLHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpLHRoaXMucmVuZGVyKCl9YXN5bmMgbG9hZEltYWdlKCl7cmV0dXJuIG5ldyBQcm9taXNlKChlLGEpPT57dGhpcy5pbWcub25sb2FkPSgpPT5lKCksdGhpcy5pbWcub25lcnJvcj1hLHRoaXMuaW1nLnNyYz10aGlzLm9wdGlvbnMuaW1hZ2V9KX1zZXR1cENhbnZhc2VzKCl7bGV0IGU9dGhpcy5vcHRpb25zLmNvbnRhaW5lcixhPU1hdGgubWluKGUuY2xpZW50V2lkdGgsZS5jbGllbnRIZWlnaHQpO3RoaXMuY2FudmFzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PWEsdGhpcy5jYW52YXMuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNhbnZhcy5zdHlsZS50b3A9IjAiLHRoaXMuY2FudmFzLnN0eWxlLmxlZnQ9IjAiLHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aD1hLHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQ9YSx0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS50b3A9IjAiLHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5sZWZ0PSIwIix0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yPSJtb3ZlIixlLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxlLmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheUNhbnZhcyk7bGV0IGk9TWF0aC5taW4oYS90aGlzLmltZy53aWR0aCxhL3RoaXMuaW1nLmhlaWdodCk7dGhpcy5pbWFnZVNjYWxlPWksdGhpcy5pbWFnZU9mZnNldFg9KGEtdGhpcy5pbWcud2lkdGgqaSkvMix0aGlzLmltYWdlT2Zmc2V0WT0oYS10aGlzLmltZy5oZWlnaHQqaSkvMjtsZXQgcj10aGlzLmltZy53aWR0aCppLHM9dGhpcy5pbWcuaGVpZ2h0Kmksbj1NYXRoLm1pbihyLHMsYSouOCk7dGhpcy5jcm9wU2l6ZT1uKi44LHRoaXMuY3JvcFg9KGEtdGhpcy5jcm9wU2l6ZSkvMix0aGlzLmNyb3BZPShhLXRoaXMuY3JvcFNpemUpLzJ9c2V0dXBFdmVudExpc3RlbmVycygpe3RoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSksdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHRoaXMuaGFuZGxlTW91c2VVcC5iaW5kKHRoaXMpKSx0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuaGFuZGxlVG91Y2hNb3ZlLmJpbmQodGhpcykpLHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5oYW5kbGVUb3VjaEVuZC5iaW5kKHRoaXMpKX1oYW5kbGVNb3VzZURvd24oZSl7bGV0IGE9dGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9KGUuY2xpZW50WC1hLmxlZnQpKih0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgvYS53aWR0aCkscj0oZS5jbGllbnRZLWEudG9wKSoodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodC9hLmhlaWdodCkscz10aGlzLmdldFJlc2l6ZUhhbmRsZShpLHIpO3M/KHRoaXMuaXNSZXNpemluZz0hMCx0aGlzLnJlc2l6ZUhhbmRsZT1zKTp0aGlzLmlzSW5zaWRlQ3JvcEFyZWEoaSxyKSYmKHRoaXMuaXNEcmFnZ2luZz0hMCksdGhpcy5kcmFnU3RhcnRYPWksdGhpcy5kcmFnU3RhcnRZPXJ9aGFuZGxlTW91c2VNb3ZlKGUpe2xldCBhPXRoaXMub3ZlcmxheUNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPShlLmNsaWVudFgtYS5sZWZ0KSoodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoL2Eud2lkdGgpLHI9KGUuY2xpZW50WS1hLnRvcCkqKHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQvYS5oZWlnaHQpLHM9dGhpcy5nZXRSZXNpemVIYW5kbGUoaSxyKTtpZihzP3RoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5jdXJzb3I9dGhpcy5nZXRSZXNpemVDdXJzb3Iocyk6dGhpcy5pc0luc2lkZUNyb3BBcmVhKGkscik/dGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvcj0ibW92ZSI6dGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvcj0iZGVmYXVsdCIsdGhpcy5pc0RyYWdnaW5nKXtsZXQgbj1pLXRoaXMuZHJhZ1N0YXJ0WCxvPXItdGhpcy5kcmFnU3RhcnRZLGQ9dGhpcy5pbWFnZU9mZnNldFgsYz10aGlzLmltYWdlT2Zmc2V0WCt0aGlzLmltZy53aWR0aCp0aGlzLmltYWdlU2NhbGUtdGhpcy5jcm9wU2l6ZSxwPXRoaXMuaW1hZ2VPZmZzZXRZLGw9dGhpcy5pbWFnZU9mZnNldFkrdGhpcy5pbWcuaGVpZ2h0KnRoaXMuaW1hZ2VTY2FsZS10aGlzLmNyb3BTaXplO3RoaXMuY3JvcFg9TWF0aC5tYXgoZCxNYXRoLm1pbihjLHRoaXMuY3JvcFgrbikpLHRoaXMuY3JvcFk9TWF0aC5tYXgocCxNYXRoLm1pbihsLHRoaXMuY3JvcFkrbykpLHRoaXMuZHJhZ1N0YXJ0WD1pLHRoaXMuZHJhZ1N0YXJ0WT1yLHRoaXMucmVuZGVyKCl9dGhpcy5pc1Jlc2l6aW5nJiYodGhpcy5oYW5kbGVSZXNpemUoaSxyKSx0aGlzLmRyYWdTdGFydFg9aSx0aGlzLmRyYWdTdGFydFk9cix0aGlzLnJlbmRlcigpKX1oYW5kbGVNb3VzZVVwKCl7dGhpcy5pc0RyYWdnaW5nPSExLHRoaXMuaXNSZXNpemluZz0hMSx0aGlzLnJlc2l6ZUhhbmRsZT0iIn1oYW5kbGVUb3VjaFN0YXJ0KGUpe2UucHJldmVudERlZmF1bHQoKTtsZXQgYT1lLnRvdWNoZXNbMF0saT1uZXcgTW91c2VFdmVudCgibW91c2Vkb3duIix7Y2xpZW50WDphLmNsaWVudFgsY2xpZW50WTphLmNsaWVudFl9KTt0aGlzLmhhbmRsZU1vdXNlRG93bihpKX1oYW5kbGVUb3VjaE1vdmUoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBhPWUudG91Y2hlc1swXSxpPW5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLHtjbGllbnRYOmEuY2xpZW50WCxjbGllbnRZOmEuY2xpZW50WX0pO3RoaXMuaGFuZGxlTW91c2VNb3ZlKGkpfWhhbmRsZVRvdWNoRW5kKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmhhbmRsZU1vdXNlVXAoKX1nZXRSZXNpemVIYW5kbGUoZSxhKXtsZXQgcj17bnc6e3g6dGhpcy5jcm9wWCx5OnRoaXMuY3JvcFl9LG5lOnt4OnRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZSx5OnRoaXMuY3JvcFl9LHN3Ont4OnRoaXMuY3JvcFgseTp0aGlzLmNyb3BZK3RoaXMuY3JvcFNpemV9LHNlOnt4OnRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZSx5OnRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX19O2ZvcihsZXRbcyxuXW9mIE9iamVjdC5lbnRyaWVzKHIpKWlmKE1hdGguYWJzKGUtbi54KTwyMCYmTWF0aC5hYnMoYS1uLnkpPDIwKXJldHVybiBzO3JldHVybiIifWdldFJlc2l6ZUN1cnNvcihlKXtyZXR1cm57bnc6Im53LXJlc2l6ZSIsbmU6Im5lLXJlc2l6ZSIsc3c6InN3LXJlc2l6ZSIsc2U6InNlLXJlc2l6ZSJ9W2VdfHwiZGVmYXVsdCJ9aXNJbnNpZGVDcm9wQXJlYShlLGEpe3JldHVybiBlPj10aGlzLmNyb3BYJiZlPD10aGlzLmNyb3BYK3RoaXMuY3JvcFNpemUmJmE+PXRoaXMuY3JvcFkmJmE8PXRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX1oYW5kbGVSZXNpemUoZSxhKXtsZXQgaT1lLXRoaXMuZHJhZ1N0YXJ0WCxyPWEtdGhpcy5kcmFnU3RhcnRZLHM9dGhpcy5pbWFnZU9mZnNldFgsbj10aGlzLmltYWdlT2Zmc2V0WSxvPXRoaXMuaW1hZ2VPZmZzZXRYK3RoaXMuaW1nLndpZHRoKnRoaXMuaW1hZ2VTY2FsZSxkPXRoaXMuaW1hZ2VPZmZzZXRZK3RoaXMuaW1nLmhlaWdodCp0aGlzLmltYWdlU2NhbGU7c3dpdGNoKHRoaXMucmVzaXplSGFuZGxlKXtjYXNlInNlIjp0aGlzLmNyb3BTaXplPU1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsTWF0aC5taW4odGhpcy5jcm9wU2l6ZStNYXRoLm1heChpLHIpLE1hdGgubWluKG8tdGhpcy5jcm9wWCxkLXRoaXMuY3JvcFkpKSk7YnJlYWs7Y2FzZSJudyI6bGV0IGM9TWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSx0aGlzLmNyb3BTaXplLU1hdGgubWF4KGkscikpLHA9dGhpcy5jcm9wU2l6ZS1jLGw9dGhpcy5jcm9wWCtwLGY9dGhpcy5jcm9wWStwO2w+PXMmJmY+PW4mJih0aGlzLmNyb3BYPWwsdGhpcy5jcm9wWT1mLHRoaXMuY3JvcFNpemU9Yyk7YnJlYWs7Y2FzZSJuZSI6bGV0IGc9TWF0aC5tYXgoaSwtcikseT1NYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLHRoaXMuY3JvcFNpemUrZyksdj15LXRoaXMuY3JvcFNpemUsbT10aGlzLmNyb3BZLXY7bT49biYmdGhpcy5jcm9wWCt5PD1vJiYodGhpcy5jcm9wWT1tLHRoaXMuY3JvcFNpemU9eSk7YnJlYWs7Y2FzZSJzdyI6bGV0IHg9TWF0aC5tYXgoLWksciksTT1NYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLHRoaXMuY3JvcFNpemUreCksUz1NLXRoaXMuY3JvcFNpemUsRj10aGlzLmNyb3BYLVM7Rj49cyYmdGhpcy5jcm9wWStNPD1kJiYodGhpcy5jcm9wWD1GLHRoaXMuY3JvcFNpemU9TSk7YnJlYWt9fXJlbmRlcigpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsMCx0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCksdGhpcy5jdHguZmlsbFN0eWxlPSIjMDAwMDAwIix0aGlzLmN0eC5maWxsUmVjdCgwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0KSx0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsdGhpcy5pbWFnZU9mZnNldFgsdGhpcy5pbWFnZU9mZnNldFksdGhpcy5pbWcud2lkdGgqdGhpcy5pbWFnZVNjYWxlLHRoaXMuaW1nLmhlaWdodCp0aGlzLmltYWdlU2NhbGUpLHRoaXMub3ZlcmxheUN0eC5maWxsU3R5bGU9InJnYmEoMCwgMCwgMCwgMC41KSIsdGhpcy5vdmVybGF5Q3R4LmZpbGxSZWN0KHRoaXMuaW1hZ2VPZmZzZXRYLHRoaXMuaW1hZ2VPZmZzZXRZLHRoaXMuaW1nLndpZHRoKnRoaXMuaW1hZ2VTY2FsZSx0aGlzLmltZy5oZWlnaHQqdGhpcy5pbWFnZVNjYWxlKSx0aGlzLm92ZXJsYXlDdHguc2F2ZSgpLHRoaXMub3B0aW9ucy5zaGFwZT09PSJyb3VuZCI/KHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKSx0aGlzLm92ZXJsYXlDdHguYXJjKHRoaXMuY3JvcFgrdGhpcy5jcm9wU2l6ZS8yLHRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZS8yLHRoaXMuY3JvcFNpemUvMiwwLE1hdGguUEkqMiksdGhpcy5vdmVybGF5Q3R4LmNsaXAoKSk6KHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKSx0aGlzLm92ZXJsYXlDdHgucmVjdCh0aGlzLmNyb3BYLHRoaXMuY3JvcFksdGhpcy5jcm9wU2l6ZSx0aGlzLmNyb3BTaXplKSx0aGlzLm92ZXJsYXlDdHguY2xpcCgpKSx0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsMCx0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCksdGhpcy5vdmVybGF5Q3R4LnJlc3RvcmUoKSx0aGlzLm92ZXJsYXlDdHguc3Ryb2tlU3R5bGU9IndoaXRlIix0aGlzLm92ZXJsYXlDdHgubGluZVdpZHRoPTIsdGhpcy5vcHRpb25zLnNoYXBlPT09InJvdW5kIj8odGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpLHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLzIsdGhpcy5jcm9wWSt0aGlzLmNyb3BTaXplLzIsdGhpcy5jcm9wU2l6ZS8yLDAsTWF0aC5QSSoyKSx0aGlzLm92ZXJsYXlDdHguc3Ryb2tlKCkpOnRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsdGhpcy5jcm9wWSx0aGlzLmNyb3BTaXplLHRoaXMuY3JvcFNpemUpLHRoaXMuZHJhd1Jlc2l6ZUhhbmRsZXMoKX1kcmF3UmVzaXplSGFuZGxlcygpe2xldCBhPVt7eDp0aGlzLmNyb3BYLHk6dGhpcy5jcm9wWX0se3g6dGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLHk6dGhpcy5jcm9wWX0se3g6dGhpcy5jcm9wWCx5OnRoaXMuY3JvcFkrdGhpcy5jcm9wU2l6ZX0se3g6dGhpcy5jcm9wWCt0aGlzLmNyb3BTaXplLHk6dGhpcy5jcm9wWSt0aGlzLmNyb3BTaXplfV07dGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZT0id2hpdGUiLGEuZm9yRWFjaChpPT57dGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpLHRoaXMub3ZlcmxheUN0eC5hcmMoaS54LGkueSw4LDAsTWF0aC5QSSoyKSx0aGlzLm92ZXJsYXlDdHguZmlsbCgpfSl9YXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT1lLmdldENvbnRleHQoIjJkIiksaT0xL3RoaXMuaW1hZ2VTY2FsZSxyPXRoaXMuY3JvcFNpemUqaSxzPXRoaXMub3B0aW9ucy5vdXRwdXRTaXplO3M+ciYmY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChyKX1weCB0byAke3N9cHhgKSxlLndpZHRoPXMsZS5oZWlnaHQ9cztsZXQgbj0odGhpcy5jcm9wWC10aGlzLmltYWdlT2Zmc2V0WCkqaSxvPSh0aGlzLmNyb3BZLXRoaXMuaW1hZ2VPZmZzZXRZKSppLGQ9dGhpcy5jcm9wU2l6ZSppO3RoaXMub3B0aW9ucy5zaGFwZT09PSJyb3VuZCImJihhLmJlZ2luUGF0aCgpLGEuYXJjKHMvMixzLzIscy8yLDAsTWF0aC5QSSoyKSxhLmNsaXAoKSksYS5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITAsYS5pbWFnZVNtb290aGluZ1F1YWxpdHk9ImhpZ2giLGEuZHJhd0ltYWdlKHRoaXMuaW1nLG4sbyxkLGQsMCwwLHMscyk7bGV0IHA9dGhpcy5vcHRpb25zLmltYWdlLmluY2x1ZGVzKCJpbWFnZS9wbmciKT8iaW1hZ2UvcG5nIjoiaW1hZ2UvanBlZyI7cmV0dXJuIGUudG9EYXRhVVJMKHAsdGhpcy5vcHRpb25zLm91dHB1dFF1YWxpdHkpfWRlc3Ryb3koKXt0aGlzLmNhbnZhcy5yZW1vdmUoKSx0aGlzLm92ZXJsYXlDYW52YXMucmVtb3ZlKCl9fX0pO3ZhciB5byxiYSxJVixVZ3Q9YigoKT0+e3VlKCk7dmkoKTtwYSgpO21pKCk7RXQoKTtwbygpO0RzKCk7RHMoKTtqZ3QoKTtWZSgpO3lvPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sYmE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LElWPSgoKT0+e2xldCB0PVtwZSgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOk51bWJlcn0pXSx5PVtJKHt0eXBlOk51bWJlcn0pXSx4PVtLKCldLEY9W0soKV0sTj1bSygpXSx5byh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRpYWxJbWFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImluaXRpYWxJbWFnZSJpbiB6LGdldDp6PT56LmluaXRpYWxJbWFnZSxzZXQ6KHosRSk9Pnt6LmluaXRpYWxJbWFnZT1FfX0sbWV0YWRhdGE6Q30sbixvKSx5byh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNoYXBlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2hhcGUiaW4geixnZXQ6ej0+ei5zaGFwZSxzZXQ6KHosRSk9Pnt6LnNoYXBlPUV9fSxtZXRhZGF0YTpDfSxjLHApLHlvKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3V0cHV0U2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+Im91dHB1dFNpemUiaW4geixnZXQ6ej0+ei5vdXRwdXRTaXplLHNldDooeixFKT0+e3oub3V0cHV0U2l6ZT1FfX0sbWV0YWRhdGE6Q30sZixnKSx5byh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dHB1dFF1YWxpdHkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJvdXRwdXRRdWFsaXR5ImluIHosZ2V0Ono9Pnoub3V0cHV0UXVhbGl0eSxzZXQ6KHosRSk9Pnt6Lm91dHB1dFF1YWxpdHk9RX19LG1ldGFkYXRhOkN9LHYsbSkseW8odGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50U3RlcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImN1cnJlbnRTdGVwImluIHosZ2V0Ono9PnouY3VycmVudFN0ZXAsc2V0Oih6LEUpPT57ei5jdXJyZW50U3RlcD1FfX0sbWV0YWRhdGE6Q30sTSxTKSx5byh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNyb3BwZWRJbWFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImNyb3BwZWRJbWFnZSJpbiB6LGdldDp6PT56LmNyb3BwZWRJbWFnZSxzZXQ6KHosRSk9Pnt6LmNyb3BwZWRJbWFnZT1FfX0sbWV0YWRhdGE6Q30sXyxrKSx5byh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzUHJvY2Vzc2luZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImlzUHJvY2Vzc2luZyJpbiB6LGdldDp6PT56LmlzUHJvY2Vzc2luZyxzZXQ6KHosRSk9Pnt6LmlzUHJvY2Vzc2luZz1FfX0sbWV0YWRhdGE6Q30sTCxBKSx5byhudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpDfSxudWxsLGEpLHE9aT1lLnZhbHVlLEMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Q30pfSNlPWJhKHRoaXMsbiwiIik7Z2V0IGluaXRpYWxJbWFnZSgpe3JldHVybiB0aGlzLiNlfXNldCBpbml0aWFsSW1hZ2UoQyl7dGhpcy4jZT1DfSN0PShiYSh0aGlzLG8pLGJhKHRoaXMsYywicm91bmQiKSk7Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHNoYXBlKEMpe3RoaXMuI3Q9Q30jYT0oYmEodGhpcyxwKSxiYSh0aGlzLGYsODAwKSk7Z2V0IG91dHB1dFNpemUoKXtyZXR1cm4gdGhpcy4jYX1zZXQgb3V0cHV0U2l6ZShDKXt0aGlzLiNhPUN9I2k9KGJhKHRoaXMsZyksYmEodGhpcyx2LC45NSkpO2dldCBvdXRwdXRRdWFsaXR5KCl7cmV0dXJuIHRoaXMuI2l9c2V0IG91dHB1dFF1YWxpdHkoQyl7dGhpcy4jaT1DfSNyPShiYSh0aGlzLG0pLGJhKHRoaXMsTSwiY3JvcCIpKTtnZXQgY3VycmVudFN0ZXAoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY3VycmVudFN0ZXAoQyl7dGhpcy4jcj1DfSNzPShiYSh0aGlzLFMpLGJhKHRoaXMsXywiIikpO2dldCBjcm9wcGVkSW1hZ2UoKXtyZXR1cm4gdGhpcy4jc31zZXQgY3JvcHBlZEltYWdlKEMpe3RoaXMuI3M9Q30jbj0oYmEodGhpcyxrKSxiYSh0aGlzLEwsITEpKTtnZXQgaXNQcm9jZXNzaW5nKCl7cmV0dXJuIHRoaXMuI259c2V0IGlzUHJvY2Vzc2luZyhDKXt0aGlzLiNuPUN9Y3JvcHBlcj0oYmEodGhpcyxBKSxudWxsKTt3aW5kb3dMYXllcjt6SW5kZXg9MDtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke3QxfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjZmZmIil9OwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICB9CgogICAgICAubW9kYWwtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwYTBhMGEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCIwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMikiKX07CiAgICAgICAgd2lkdGg6IDQ4MHB4OwogICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMycHgpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbjogbW9kYWxTaG93IDAuMjVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgZm9yd2FyZHM7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbW9kYWxTaG93IHsKICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgc2NhbGUoMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubW9kYWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgcGFkZGluZzogMCAyMHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmNsb3NlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbC1ib2R5IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5jcm9wcGVyLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzNjBweDsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMDAwMDAwIiwiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoImluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDYpIiwiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMxODE4MWIiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIjAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDUpIiwiMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctaW1hZ2Uucm91bmQgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLnByZXZpZXctaW1hZ2Uuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgICB9CgogICAgICAuc3VjY2Vzcy1tZXNzYWdlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzEwYjk4MSIsIiMxMGI5ODEiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGFuaW1hdGlvbjogc3VjY2Vzc1B1bHNlIDAuNHMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHsKICAgICAgICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgICB9CgogICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuaW5zdHJ1Y3Rpb25zIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBtYXgtd2lkdGg6IDMyMHB4OwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjZzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDMycHgpOwogICAgICAgICAgbWFyZ2luOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIH0KICAgICAgfQogICAgYF07YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMud2luZG93TGF5ZXI9YXdhaXQgZ2kuY3JlYXRlQW5kU2hvdyh7Ymx1cjohMH0pLHRoaXMud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT50aGlzLmNsb3NlKCkpLHRoaXMuekluZGV4PWgxLmdldE5leHRaSW5kZXgoKSx0aGlzLnN0eWxlLnNldFByb3BlcnR5KCItLXotaW5kZXgiLHRoaXMuekluZGV4LnRvU3RyaW5nKCkpLGgxLnJlZ2lzdGVyKHRoaXMsdGhpcy56SW5kZXgpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmNyb3BwZXImJnRoaXMuY3JvcHBlci5kZXN0cm95KCksdGhpcy53aW5kb3dMYXllciYmYXdhaXQgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCksaDEudW5yZWdpc3Rlcih0aGlzKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGFpbmVyIiBAY2xpY2s9JHtDPT5DLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcD09PSJjcm9wIj8iQWRqdXN0IEltYWdlIjoiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXA9PT0iY3JvcCI/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj4KICAgICAgICAgICAgICBQb3NpdGlvbiBhbmQgcmVzaXplIHRoZSBzcXVhcmUgdG8gc2VsZWN0IHlvdXIgcHJvZmlsZSBhcmVhCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcm9wcGVyLWNvbnRhaW5lciIgaWQ9ImNyb3BwZXJDb250YWluZXIiPjwvZGl2PgogICAgICAgICAgYDp3YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHt0aGlzLmlzUHJvY2Vzc2luZz93YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imluc3RydWN0aW9ucyI+U2F2aW5nLi4uPC9kaXY+CiAgICAgICAgICAgICAgYDp3YAogICAgICAgICAgICAgICAgPGltZyAKICAgICAgICAgICAgICAgICAgY2xhc3M9InByZXZpZXctaW1hZ2UgJHt0aGlzLnNoYXBlfSIgCiAgICAgICAgICAgICAgICAgIHNyYz0iJHt0aGlzLmNyb3BwZWRJbWFnZX0iIAogICAgICAgICAgICAgICAgICBhbHQ9IkNyb3BwZWQgcHJldmlldyIKICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWNjZXNzLW1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGVjayIgaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+TG9va2luZyBnb29kITwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgJHt0aGlzLmN1cnJlbnRTdGVwPT09ImNyb3AiP3dgCiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc2l6ZT0ic20iIEBjbGljaz0ke3RoaXMuY2xvc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIEBjbGljaz0ke3RoaXMuaGFuZGxlQ3JvcH0+CiAgICAgICAgICAgICAgU2F2ZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgYDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe3RoaXMuY3VycmVudFN0ZXA9PT0iY3JvcCImJmF3YWl0IHRoaXMuaW5pdGlhbGl6ZUNyb3BwZXIoKX1hc3luYyBpbml0aWFsaXplQ3JvcHBlcigpe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IEM9dGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7QyYmKHRoaXMuY3JvcHBlcj1uZXcgb3coe2NvbnRhaW5lcjpDLGltYWdlOnRoaXMuaW5pdGlhbEltYWdlLHNoYXBlOnRoaXMuc2hhcGUsYXNwZWN0UmF0aW86MSxvdXRwdXRTaXplOnRoaXMub3V0cHV0U2l6ZSxvdXRwdXRRdWFsaXR5OnRoaXMub3V0cHV0UXVhbGl0eX0pLGF3YWl0IHRoaXMuY3JvcHBlci5pbml0aWFsaXplKCkpfWFzeW5jIGhhbmRsZUNyb3AoKXtpZih0aGlzLmNyb3BwZXIpdHJ5e3RoaXMuaXNQcm9jZXNzaW5nPSEwLHRoaXMuY3VycmVudFN0ZXA9InByZXZpZXciLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7bGV0IEM9YXdhaXQgdGhpcy5jcm9wcGVyLmdldENyb3BwZWRJbWFnZSgpO3RoaXMuY3JvcHBlZEltYWdlPUMsYXdhaXQgbmV3IFByb21pc2Uoej0+c2V0VGltZW91dCh6LDgwMCkpLHRoaXMuaXNQcm9jZXNzaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNhdmUiLHtkZXRhaWw6e2Nyb3BwZWRJbWFnZTp0aGlzLmNyb3BwZWRJbWFnZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5jbG9zZSgpfSwxNTAwKX1jYXRjaChDKXtjb25zb2xlLmVycm9yKCJFcnJvciBjcm9wcGluZyBpbWFnZToiLEMpLHRoaXMuaXNQcm9jZXNzaW5nPSExfX1jbG9zZSgpe3RoaXMucmVtb3ZlKCl9c3RhdGlje2JhKGksYSl9fTtyZXR1cm4gcT1pfSkoKX0pO3ZhciBXZ3QsR2d0PWIoKCk9Pnt1ZSgpO3gxKCk7ZzIoKTtOVigpO1dndD0oKT0+d2AKICA8c3R5bGU+CiAgICAke1FgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0OHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1vdXRwdXQgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwNSwgMjQyLCAwLjEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgbWF4LWhlaWdodDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5mZWF0dXJlLWxpc3QgbGkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9PntsZXQgZT10LnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsYT0+e2xldCBpPWEudGFyZ2V0O2NvbnNvbGUubG9nKCJSb3VuZCBwcm9maWxlIHBpY3R1cmUgY2hhbmdlZDoiLGkudmFsdWU/LnN1YnN0cmluZygwLDUwKSsiLi4uIil9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJvZmlsZSBQaWN0dXJlIElucHV0In0gLnN1YnRpdGxlPSR7IkJhc2ljIHVzYWdlIHdpdGggcm91bmQgYW5kIHNxdWFyZSBzaGFwZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChSb3VuZCkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDbGljayB0byB1cGxvYWQgb3IgZHJhZyAmIGRyb3AgYW4gaW1hZ2UiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlByb2ZpbGUgUGljdHVyZSAoU3F1YXJlKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlN1cHBvcnRzIEpQRUcsIFBORywgYW5kIFdlYlAgZm9ybWF0cyIKICAgICAgICAgICAgc2hhcGU9InNxdWFyZSIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnt0LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUiKS5mb3JFYWNoKGE9PnthLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsaT0+e2xldCByPWkudGFyZ2V0O2NvbnNvbGUubG9nKGBQcm9maWxlIChzaXplICR7ci5zaXplfSkgY2hhbmdlZGApfSl9KX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2l6ZSBWYXJpYXRpb25zIn0gLnN1YnRpdGxlPSR7IlByb2ZpbGUgcGljdHVyZXMgaW4gZGlmZmVyZW50IHNpemVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlNtYWxsICg4MHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSI4MCIKICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJNZWRpdW0gKDEyMHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTGFyZ2UgKDE2MHB4KSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxNjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgdD0+e2xldCBlPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4WkdWbWN6NEtJQ0FnSUR4c2FXNWxZWEpIY21Ga2FXVnVkQ0JwWkQwaVozSmhaR2xsYm5RaUlIZ3hQU0l3SlNJZ2VURTlJakFsSWlCNE1qMGlNVEF3SlNJZ2VUSTlJakV3TUNVaVBnb2dJQ0FnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJakFsSWlCemRHOXdMV052Ykc5eVBTSWpOalkzWldWaElpQXZQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpFd01DVWlJSE4wYjNBdFkyOXNiM0k5SWlNM05qUmlZVElpSUM4K0NpQWdJQ0E4TDJ4cGJtVmhja2R5WVdScFpXNTBQZ29nSUR3dlpHVm1jejRLSUNBOGNtVmpkQ0IzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdabWxzYkQwaWRYSnNLQ05uY21Ga2FXVnVkQ2tpSUM4K0NpQWdQSFJsZUhRZ2VEMGlOVEFsSWlCNVBTSTFNQ1VpSUdSdmJXbHVZVzUwTFdKaGMyVnNhVzVsUFNKdGFXUmtiR1VpSUhSbGVIUXRZVzVqYUc5eVBTSnRhV1JrYkdVaUlHWnZiblF0Wm1GdGFXeDVQU0pCY21saGJDSWdabTl1ZEMxemFYcGxQU0k0TUNJZ1ptbHNiRDBpZDJocGRHVWlQa3BFUEM5MFpYaDBQZ284TDNOMlp6ND0iLGE9dC5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTthJiYoYS52YWx1ZT1lLGEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixpPT57bGV0IHI9aS50YXJnZXQscz10LnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7cyYmKHMudGV4dENvbnRlbnQ9ci52YWx1ZT9gSW1hZ2UgZGF0YTogJHtyLnZhbHVlLnN1YnN0cmluZygwLDgwKX0uLi5gOiJObyBpbWFnZSBzZWxlY3RlZCIpfSkpfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcmUtZmlsbGVkIGFuZCBWYWx1ZSBCaW5kaW5nIn0gLnN1YnRpdGxlPSR7IlByb2ZpbGUgcGljdHVyZSB3aXRoIGluaXRpYWwgdmFsdWUgYW5kIGNoYW5nZSB0cmFja2luZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICBpZD0icHJlZmlsbGVkLXByb2ZpbGUiCiAgICAgICAgICBsYWJlbD0iRWRpdCBFeGlzdGluZyBQcm9maWxlIgogICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRoZSBlZGl0IGJ1dHRvbiB0byBjaGFuZ2Ugb3IgZGVsZXRlIHRvIHJlbW92ZSIKICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgIHNpemU9IjE1MCIKICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9InByZWZpbGxlZC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICBJbWFnZSBkYXRhIHdpbGwgYXBwZWFyIGhlcmUgd2hlbiBjaGFuZ2VkCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpO2UmJihlLnZhbHVlPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iKX19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUmVxdWlyZWQgRmllbGQiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5yZXF1aXJlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgaWQ9ImRpc2FibGVkLXByb2ZpbGUiCiAgICAgICAgICAgIGxhYmVsPSJEaXNhYmxlZCBTdGF0ZSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNhbm5vdCBiZSBlZGl0ZWQiCiAgICAgICAgICAgIHNoYXBlPSJzcXVhcmUiCiAgICAgICAgICAgIC5kaXNhYmxlZD0keyEwfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0keyExfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmB9KTt2YXIgUGEsdTEsWWd0LE5WPWIoKCk9Pnt1ZSgpO18xKCk7RXQoKTtBbCgpO1VndCgpO0dndCgpO1ZlKCk7UGE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx1MT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sWWd0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpXSxlLGE9W10saSxyPVhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdLFYsUj1bXSxVPVtdLHJlLGo9W10sbWU9W10sd2UsSD1bXSxjZT1bXSxrZSxXPVtdLEQ9W107dmFyIE89Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBaPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6TnVtYmVyfSldLHk9W0koe3R5cGU6U3RyaW5nfSldLHg9W0koe3R5cGU6Qm9vbGVhbn0pXSxGPVtJKHt0eXBlOkJvb2xlYW59KV0sTj1bSSh7dHlwZTpOdW1iZXJ9KV0scT1bSSh7dHlwZTpBcnJheX0pXSxFPVtJKHt0eXBlOk51bWJlcn0pXSxWPVtJKHt0eXBlOk51bWJlcn0pXSxyZT1bSygpXSx3ZT1bSygpXSxrZT1bSygpXSxQYSh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InZhbHVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4idmFsdWUiaW4gWSxnZXQ6WT0+WS52YWx1ZSxzZXQ6KFksb2UpPT57WS52YWx1ZT1vZX19LG1ldGFkYXRhOlp9LG4sbyksUGEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaGFwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+InNoYXBlImluIFksZ2V0Olk9Plkuc2hhcGUsc2V0OihZLG9lKT0+e1kuc2hhcGU9b2V9fSxtZXRhZGF0YTpafSxjLHApLFBhKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+InNpemUiaW4gWSxnZXQ6WT0+WS5zaXplLHNldDooWSxvZSk9PntZLnNpemU9b2V9fSxtZXRhZGF0YTpafSxmLGcpLFBhKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGxhY2Vob2xkZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJwbGFjZWhvbGRlciJpbiBZLGdldDpZPT5ZLnBsYWNlaG9sZGVyLHNldDooWSxvZSk9PntZLnBsYWNlaG9sZGVyPW9lfX0sbWV0YWRhdGE6Wn0sdixtKSxQYSh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFsbG93VXBsb2FkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4iYWxsb3dVcGxvYWQiaW4gWSxnZXQ6WT0+WS5hbGxvd1VwbG9hZCxzZXQ6KFksb2UpPT57WS5hbGxvd1VwbG9hZD1vZX19LG1ldGFkYXRhOlp9LE0sUyksUGEodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhbGxvd0RlbGV0ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFsbG93RGVsZXRlImluIFksZ2V0Olk9PlkuYWxsb3dEZWxldGUsc2V0OihZLG9lKT0+e1kuYWxsb3dEZWxldGU9b2V9fSxtZXRhZGF0YTpafSxfLGspLFBhKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWF4RmlsZVNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlk9PiJtYXhGaWxlU2l6ZSJpbiBZLGdldDpZPT5ZLm1heEZpbGVTaXplLHNldDooWSxvZSk9PntZLm1heEZpbGVTaXplPW9lfX0sbWV0YWRhdGE6Wn0sTCxBKSxQYSh0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjY2VwdGVkRm9ybWF0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImFjY2VwdGVkRm9ybWF0cyJpbiBZLGdldDpZPT5ZLmFjY2VwdGVkRm9ybWF0cyxzZXQ6KFksb2UpPT57WS5hY2NlcHRlZEZvcm1hdHM9b2V9fSxtZXRhZGF0YTpafSxDLHopLFBhKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3V0cHV0U2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im91dHB1dFNpemUiaW4gWSxnZXQ6WT0+WS5vdXRwdXRTaXplLHNldDooWSxvZSk9PntZLm91dHB1dFNpemU9b2V9fSxtZXRhZGF0YTpafSxULCQpLFBhKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToib3V0cHV0UXVhbGl0eSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+Im91dHB1dFF1YWxpdHkiaW4gWSxnZXQ6WT0+WS5vdXRwdXRRdWFsaXR5LHNldDooWSxvZSk9PntZLm91dHB1dFF1YWxpdHk9b2V9fSxtZXRhZGF0YTpafSxSLFUpLFBhKHRoaXMsbnVsbCxyZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzSG92ZXJlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImlzSG92ZXJlZCJpbiBZLGdldDpZPT5ZLmlzSG92ZXJlZCxzZXQ6KFksb2UpPT57WS5pc0hvdmVyZWQ9b2V9fSxtZXRhZGF0YTpafSxqLG1lKSxQYSh0aGlzLG51bGwsd2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0RyYWdnaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpZPT4iaXNEcmFnZ2luZyJpbiBZLGdldDpZPT5ZLmlzRHJhZ2dpbmcsc2V0OihZLG9lKT0+e1kuaXNEcmFnZ2luZz1vZX19LG1ldGFkYXRhOlp9LEgsY2UpLFBhKHRoaXMsbnVsbCxrZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzTG9hZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6WT0+ImlzTG9hZGluZyJpbiBZLGdldDpZPT5ZLmlzTG9hZGluZyxzZXQ6KFksb2UpPT57WS5pc0xvYWRpbmc9b2V9fSxtZXRhZGF0YTpafSxXLEQpLFBhKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOlp9LG51bGwsYSksTz1pPWUudmFsdWUsWiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpafSl9c3RhdGljIGRlbW89V2d0O3N0YXRpYyBkZW1vR3JvdXBzPVsiSW5wdXQiXTsjZT11MSh0aGlzLG4sIiIpO2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLiNlfXNldCB2YWx1ZShaKXt0aGlzLiNlPVp9I3Q9KHUxKHRoaXMsbyksdTEodGhpcyxjLCJyb3VuZCIpKTtnZXQgc2hhcGUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2hhcGUoWil7dGhpcy4jdD1afSNhPSh1MSh0aGlzLHApLHUxKHRoaXMsZiwxMjApKTtnZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNhfXNldCBzaXplKFope3RoaXMuI2E9Wn0jaT0odTEodGhpcyxnKSx1MSh0aGlzLHYsIiIpKTtnZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy4jaX1zZXQgcGxhY2Vob2xkZXIoWil7dGhpcy4jaT1afSNyPSh1MSh0aGlzLG0pLHUxKHRoaXMsTSwhMCkpO2dldCBhbGxvd1VwbG9hZCgpe3JldHVybiB0aGlzLiNyfXNldCBhbGxvd1VwbG9hZChaKXt0aGlzLiNyPVp9I3M9KHUxKHRoaXMsUyksdTEodGhpcyxfLCEwKSk7Z2V0IGFsbG93RGVsZXRlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGFsbG93RGVsZXRlKFope3RoaXMuI3M9Wn0jbj0odTEodGhpcyxrKSx1MSh0aGlzLEwsNSoxMDI0KjEwMjQpKTtnZXQgbWF4RmlsZVNpemUoKXtyZXR1cm4gdGhpcy4jbn1zZXQgbWF4RmlsZVNpemUoWil7dGhpcy4jbj1afSNvPSh1MSh0aGlzLEEpLHUxKHRoaXMsQyxbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS93ZWJwIl0pKTtnZXQgYWNjZXB0ZWRGb3JtYXRzKCl7cmV0dXJuIHRoaXMuI299c2V0IGFjY2VwdGVkRm9ybWF0cyhaKXt0aGlzLiNvPVp9I2w9KHUxKHRoaXMseiksdTEodGhpcyxULDgwMCkpO2dldCBvdXRwdXRTaXplKCl7cmV0dXJuIHRoaXMuI2x9c2V0IG91dHB1dFNpemUoWil7dGhpcy4jbD1afSNjPSh1MSh0aGlzLCQpLHUxKHRoaXMsUiwuOTUpKTtnZXQgb3V0cHV0UXVhbGl0eSgpe3JldHVybiB0aGlzLiNjfXNldCBvdXRwdXRRdWFsaXR5KFope3RoaXMuI2M9Wn0jZD0odTEodGhpcyxVKSx1MSh0aGlzLGosITEpKTtnZXQgaXNIb3ZlcmVkKCl7cmV0dXJuIHRoaXMuI2R9c2V0IGlzSG92ZXJlZChaKXt0aGlzLiNkPVp9I3A9KHUxKHRoaXMsbWUpLHUxKHRoaXMsSCwhMSkpO2dldCBpc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuI3B9c2V0IGlzRHJhZ2dpbmcoWil7dGhpcy4jcD1afSNoPSh1MSh0aGlzLGNlKSx1MSh0aGlzLFcsITEpKTtnZXQgaXNMb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2h9c2V0IGlzTG9hZGluZyhaKXt0aGlzLiNoPVp9bW9kYWxJbnN0YW5jZT0odTEodGhpcyxEKSxudWxsKTtzdGF0aWMgc3R5bGVzPVtDZSwuLi5YZS5iYXNlU3R5bGVzLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUgewogICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmNWY1ZjUiLCIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZS5yb3VuZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnNxdWFyZSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZS5kcmFnZ2luZyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgNHB4ICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCJyZ2JhKDk2LCAxNjUsIDI1MCwgMC4xNSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNkNGQ0ZDgiLCIjM2YzZjQ2Iil9OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlOmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtaW1hZ2UgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnBsYWNlaG9sZGVyLWljb24gewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyOmhvdmVyIC5vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3ZlcmxheS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpIiwicmdiYSgzOSwgMzksIDQyLCAwLjk1KSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjM2YzZjQ2Iil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuOSkiLCJyZ2JhKDIyMCwgMzgsIDM4LCAwLjkpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAub3ZlcmxheS1idXR0b24uZGVsZXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2VmNDQ0NCIsIiNkYzI2MjYiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wLXpvbmUtdGV4dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgYW5pbWF0aW9uICovCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSIsInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAubG9hZGluZy1vdmVybGF5LnNob3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmNsaWNraW5nIHsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDAuM3MgZWFzZS1vdXQ7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgCiAgICAgICAgPGRpdiAKICAgICAgICAgIGNsYXNzPSJwcm9maWxlLWNvbnRhaW5lciIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9CiAgICAgICAgICBAZHJhZ292ZXI9JHt0aGlzLmhhbmRsZURyYWdPdmVyfQogICAgICAgICAgQGRyYWdsZWF2ZT0ke3RoaXMuaGFuZGxlRHJhZ0xlYXZlfQogICAgICAgICAgQGRyb3A9JHt0aGlzLmhhbmRsZURyb3B9CiAgICAgICAgICBzdHlsZT0iLS1zaXplOiAke3RoaXMuc2l6ZX1weCIKICAgICAgICA+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9maWxlLXBpY3R1cmUgJHt0aGlzLnNoYXBlfSAke3RoaXMuaXNEcmFnZ2luZz8iZHJhZ2dpbmciOiIifSAke3RoaXMuaXNMb2FkaW5nJiYhdGhpcy52YWx1ZT8iY2xpY2tpbmciOiIifSI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZT93YAogICAgICAgICAgICAgIDxpbWcgY2xhc3M9InByb2ZpbGUtaW1hZ2UiIHNyYz0iJHt0aGlzLnZhbHVlfSIgYWx0PSJQcm9maWxlIHBpY3R1cmUiIC8+CiAgICAgICAgICAgIGA6d2AKICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJwbGFjZWhvbGRlci1pY29uIiBpY29uPSJsdWNpZGU6dXNlciIgaWNvblNpemU9IiR7dGhpcy5zaXplKi41fSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIGB9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMuaXNEcmFnZ2luZz93YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXkiIHN0eWxlPSJvcGFjaXR5OiAxIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3Atem9uZS10ZXh0Ij4KICAgICAgICAgICAgICAgICAgRHJvcCBpbWFnZSBoZXJlCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy52YWx1ZSYmIXRoaXMuZGlzYWJsZWQ/d2AKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5hbGxvd1VwbG9hZD93YAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im92ZXJsYXktYnV0dG9uIiBAY2xpY2s9JHtaPT57Wi5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5Nb2RhbCgpfX0gdGl0bGU9IkNoYW5nZSBwaWN0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOnBlbmNpbCIgaWNvblNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93RGVsZXRlP3dgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHtaPT57Wi5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRlbGV0ZVBpY3R1cmUoKX19IHRpdGxlPSJEZWxldGUgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp0cmFzaDIiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0xvYWRpbmcmJiF0aGlzLnZhbHVlP3dgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5IHNob3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxpbnB1dAogICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgIGNsYXNzPSJoaWRkZW4taW5wdXQiCiAgICAgICAgICBhY2NlcHQ9IiR7dGhpcy5hY2NlcHRlZEZvcm1hdHMuam9pbigiLCIpfSIKICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgLz4KICAgICAgPC9kaXY+CiAgICBgfWhhbmRsZUNsaWNrKCl7aWYoISh0aGlzLmRpc2FibGVkfHwhdGhpcy5hbGxvd1VwbG9hZCkmJiF0aGlzLnZhbHVlKXt0aGlzLmlzTG9hZGluZz0hMDtsZXQgWj10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpLFk9KCk9PntzZXRUaW1lb3V0KCgpPT57KCFaLmZpbGVzfHxaLmZpbGVzLmxlbmd0aD09PTApJiYodGhpcy5pc0xvYWRpbmc9ITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsWSl9LDMwMCl9O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsWSksWi5jbGljaygpfX1oYW5kbGVGaWxlU2VsZWN0KFope2xldCBZPVoudGFyZ2V0LG9lPVkuZmlsZXM/LlswXTt0aGlzLmlzTG9hZGluZz0hMSxvZSYmdGhpcy5wcm9jZXNzRmlsZShvZSksWS52YWx1ZT0iIn1oYW5kbGVEcmFnT3ZlcihaKXtaLnByZXZlbnREZWZhdWx0KCksIXRoaXMuZGlzYWJsZWQmJnRoaXMuYWxsb3dVcGxvYWQmJih0aGlzLmlzRHJhZ2dpbmc9ITApfWhhbmRsZURyYWdMZWF2ZSgpe3RoaXMuaXNEcmFnZ2luZz0hMX1oYW5kbGVEcm9wKFope2lmKFoucHJldmVudERlZmF1bHQoKSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5kaXNhYmxlZHx8IXRoaXMuYWxsb3dVcGxvYWQpcmV0dXJuO2xldCBZPVouZGF0YVRyYW5zZmVyPy5maWxlc1swXTtZJiZ0aGlzLnByb2Nlc3NGaWxlKFkpfWFzeW5jIHByb2Nlc3NGaWxlKFope2lmKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhaLnR5cGUpKXtjb25zb2xlLmVycm9yKCJJbnZhbGlkIGZpbGUgdHlwZToiLFoudHlwZSk7cmV0dXJufWlmKFouc2l6ZT50aGlzLm1heEZpbGVTaXplKXtjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZToiLFouc2l6ZSk7cmV0dXJufWxldCBZPW5ldyBGaWxlUmVhZGVyO1kub25sb2FkPWFzeW5jIG9lPT57bGV0IGdlPW9lLnRhcmdldD8ucmVzdWx0O2F3YWl0IHRoaXMub3Blbk1vZGFsKGdlKX0sWS5yZWFkQXNEYXRhVVJMKFopfWFzeW5jIG9wZW5Nb2RhbChaKXtsZXQgWT1afHx0aGlzLnZhbHVlO2lmKCFZKXt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpLmNsaWNrKCk7cmV0dXJufXRoaXMubW9kYWxJbnN0YW5jZT1uZXcgSVYsdGhpcy5tb2RhbEluc3RhbmNlLnNoYXBlPXRoaXMuc2hhcGUsdGhpcy5tb2RhbEluc3RhbmNlLmluaXRpYWxJbWFnZT1ZLHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRTaXplPXRoaXMub3V0cHV0U2l6ZSx0aGlzLm1vZGFsSW5zdGFuY2Uub3V0cHV0UXVhbGl0eT10aGlzLm91dHB1dFF1YWxpdHksdGhpcy5tb2RhbEluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoInNhdmUiLG9lPT57dGhpcy52YWx1ZT1vZS5kZXRhaWwuY3JvcHBlZEltYWdlLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpfWRlbGV0ZVBpY3R1cmUoKXt0aGlzLnZhbHVlPSIiLHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9c2V0VmFsdWUoWil7dGhpcy52YWx1ZT1afXN0YXRpY3t1MShpLGEpfX07cmV0dXJuIE89aX0pKCl9KTt2YXIgWmd0PWIoKCk9PntIbXQoKTtxbXQoKTtWbXQoKTtScSgpO2ptdCgpO2pxKCk7VW10KCk7WG10KCk7S210KCk7UW10KCk7Sm10KCk7ZWd0KCk7bGd0KCk7ZGd0KCk7Z2d0KCk7Ymd0KCk7dmd0KCk7eWd0KCk7Vmd0KCk7TlYoKX0pO3ZhciBYZ3QsS2d0PWIoKCk9Pnt1ZSgpO1hndD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgIH0KICAgIAogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMxODE4MWIiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vQ29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ob24tU2VsZWN0YWJsZSBDaGlwczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5CYXNpYyBjaGlwcyB3aXRob3V0IHNlbGVjdGlvbiBjYXBhYmlsaXR5LiBVc2UgZm9yIGRpc3BsYXktb25seSB0YWdzLjwvZGl2PgogICAgICA8ZGVlcy1jaGlwcwogICAgICAgIHNlbGVjdGlvbk1vZGU9Im5vbmUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1t7a2V5OiJzdGF0dXMiLHZhbHVlOiJBY3RpdmUifSx7a2V5OiJ0aWVyIix2YWx1ZToiUHJlbWl1bSJ9LHtrZXk6InJlZ2lvbiIsdmFsdWU6IkVVLVdlc3QifSx7a2V5OiJ0eXBlIix2YWx1ZToiRW50ZXJwcmlzZSJ9XX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U2luZ2xlIFNlbGVjdGlvbiBDaGlwczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DbGljayB0byBzZWxlY3Qgb25lIGNoaXAgYXQgYSB0aW1lLiBVc2VmdWwgZm9yIGZpbHRlcnMgYW5kIG9wdGlvbnMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbe2tleToiYWxsIix2YWx1ZToiQWxsIFByb2plY3RzIn0se2tleToiYWN0aXZlIix2YWx1ZToiQWN0aXZlIn0se2tleToiYXJjaGl2ZWQiLHZhbHVlOiJBcmNoaXZlZCJ9LHtrZXk6ImRyYWZ0cyIsdmFsdWU6IkRyYWZ0cyJ9XX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TXVsdGlwbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlNlbGVjdCBtdWx0aXBsZSBjaGlwcyBzaW11bHRhbmVvdXNseS4gR3JlYXQgZm9yIHRhZyBzZWxlY3Rpb24uPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibXVsdGlwbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1t7a2V5OiJqcyIsdmFsdWU6IkphdmFTY3JpcHQifSx7a2V5OiJ0cyIsdmFsdWU6IlR5cGVTY3JpcHQifSx7a2V5OiJyZWFjdCIsdmFsdWU6IlJlYWN0In0se2tleToidnVlIix2YWx1ZToiVnVlIn0se2tleToiYW5ndWxhciIsdmFsdWU6IkFuZ3VsYXIifSx7a2V5OiJub2RlIix2YWx1ZToiTm9kZS5qcyJ9XX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmVtb3ZhYmxlIENoaXBzIHdpdGggS2V5czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DaGlwcyB3aXRoIHJlbW92ZSBidXR0b25zIGFuZCBrZXktdmFsdWUgcGFpcnMuIFBlcmZlY3QgZm9yIGR5bmFtaWMgbGlzdHMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1t7a2V5OiJlbnYiLHZhbHVlOiJQcm9kdWN0aW9uIn0se2tleToidmVyc2lvbiIsdmFsdWU6IjIuNC4xIn0se2tleToiYnJhbmNoIix2YWx1ZToibWFpbiJ9LHtrZXk6ImF1dGhvciIsdmFsdWU6IkpvaG4gRG9lIn1dfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbe2tleToicHJpb3JpdHkiLHZhbHVlOiJIaWdoIn0se2tleToic3RhdHVzIix2YWx1ZToiSW4gUHJvZ3Jlc3MifSx7a2V5OiJidWciLHZhbHVlOiJCdWcifSx7a2V5OiJmZWF0dXJlIix2YWx1ZToiRmVhdHVyZSJ9LHtrZXk6InNwcmludCIsdmFsdWU6IlNwcmludCAyMyJ9LHtrZXk6ImFzc2lnbmVlIix2YWx1ZToiQWxpY2UifV19CiAgICAgID48L2RlZXMtY2hpcHM+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBCbCxhcixRZ3QsSmd0PWIoKCk9Pnt1ZSgpO0x0KCk7S2d0KCk7VmUoKTtCbD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGFyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxRZ3Q9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWNoaXBzIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W107dmFyIEY9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBfPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koKV0sZD1bSSh7dHlwZTpCb29sZWFufSldLGw9W0koe3R5cGU6QXJyYXl9KV0seT1bSSgpXSx4PVtJKHt0eXBlOkFycmF5fSldLEJsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0aW9uTW9kZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNlbGVjdGlvbk1vZGUiaW4gayxnZXQ6az0+ay5zZWxlY3Rpb25Nb2RlLHNldDooayxOKT0+e2suc2VsZWN0aW9uTW9kZT1OfX0sbWV0YWRhdGE6X30sbixvKSxCbCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNoaXBzQXJlUmVtb3ZhYmxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iY2hpcHNBcmVSZW1vdmFibGUiaW4gayxnZXQ6az0+ay5jaGlwc0FyZVJlbW92YWJsZSxzZXQ6KGssTik9PntrLmNoaXBzQXJlUmVtb3ZhYmxlPU59fSxtZXRhZGF0YTpffSxjLHApLEJsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0YWJsZUNoaXBzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2VsZWN0YWJsZUNoaXBzImluIGssZ2V0Oms9Pmsuc2VsZWN0YWJsZUNoaXBzLHNldDooayxOKT0+e2suc2VsZWN0YWJsZUNoaXBzPU59fSxtZXRhZGF0YTpffSxmLGcpLEJsKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRDaGlwIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2VsZWN0ZWRDaGlwImluIGssZ2V0Oms9Pmsuc2VsZWN0ZWRDaGlwLHNldDooayxOKT0+e2suc2VsZWN0ZWRDaGlwPU59fSxtZXRhZGF0YTpffSx2LG0pLEJsKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2VsZWN0ZWRDaGlwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InNlbGVjdGVkQ2hpcHMiaW4gayxnZXQ6az0+ay5zZWxlY3RlZENoaXBzLHNldDooayxOKT0+e2suc2VsZWN0ZWRDaGlwcz1OfX0sbWV0YWRhdGE6X30sTSxTKSxCbChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLEY9aT1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPVhndDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkxheW91dCJdOyNlPWFyKHRoaXMsbiwic2luZ2xlIik7Z2V0IHNlbGVjdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgc2VsZWN0aW9uTW9kZShfKXt0aGlzLiNlPV99I3Q9KGFyKHRoaXMsbyksYXIodGhpcyxjLCExKSk7Z2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGNoaXBzQXJlUmVtb3ZhYmxlKF8pe3RoaXMuI3Q9X30jYT0oYXIodGhpcyxwKSxhcih0aGlzLGYsW10pKTtnZXQgc2VsZWN0YWJsZUNoaXBzKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlbGVjdGFibGVDaGlwcyhfKXt0aGlzLiNhPV99I2k9KGFyKHRoaXMsZyksYXIodGhpcyx2LG51bGwpKTtnZXQgc2VsZWN0ZWRDaGlwKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNlbGVjdGVkQ2hpcChfKXt0aGlzLiNpPV99I3I9KGFyKHRoaXMsbSksYXIodGhpcyxNLFtdKSk7Z2V0IHNlbGVjdGVkQ2hpcHMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2VsZWN0ZWRDaGlwcyhfKXt0aGlzLiNyPV99Y29uc3RydWN0b3IoKXtzdXBlcigpLGFyKHRoaXMsUyl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5jaGlwIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y0ZjRmNSIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjM2YzZjQ2Iil9OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDBweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNoaXA6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjZDFkNWRiIiwiIzUyNTI1YiIpfTsKICAgICAgfQoKICAgICAgLmNoaXA6YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMyNTYzZWIiLCIjMjU2M2ViIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiMyNTYzZWIiLCIjMjU2M2ViIil9OwogICAgICB9CgogICAgICAuY2hpcEtleSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgLmNoaXBLZXkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC02cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2VmNDQ0NCIsIiNlZjQ0NDQiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIGRlZXMtaWNvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgJHt0aGlzLnNlbGVjdGFibGVDaGlwcy5tYXAoXz0+d2AKICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLnNlbGVjdENoaXAoXyl9CiAgICAgICAgICAgICAgY2xhc3M9ImNoaXAgJHt0aGlzLmlzU2VsZWN0ZWQoXyk/InNlbGVjdGVkIjoiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke18ua2V5P3dgPGRpdiBjbGFzcz0iY2hpcEtleSI+JHtfLmtleX08L2Rpdj5gOndgYH0gJHtfLnZhbHVlfQogICAgICAgICAgICAgICR7dGhpcy5jaGlwc0FyZVJlbW92YWJsZT93YAogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ke2s9PntrLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMucmVtb3ZlQ2hpcChfKX19CiAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0keyJmYTp4bWFyayJ9CiAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICBgOndgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe31pc1NlbGVjdGVkKF8pe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIj90aGlzLnNlbGVjdGVkQ2hpcD90aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsXyk6ITE6dGhpcy5zZWxlY3RlZENoaXBzLnNvbWUoaz0+dGhpcy5pc1NhbWVDaGlwKGssXykpfWlzU2FtZUNoaXAoXyxrKXtyZXR1cm4oXy5rZXkmJmsua2V5fHxfLnZhbHVlPT09ay52YWx1ZSkmJl8ua2V5PT09ay5rZXl9YXN5bmMgc2VsZWN0Q2hpcChfKXt0aGlzLnNlbGVjdGlvbk1vZGUhPT0ibm9uZSImJih0aGlzLnNlbGVjdGlvbk1vZGU9PT0ic2luZ2xlIj90aGlzLmlzU2VsZWN0ZWQoXyk/KHRoaXMuc2VsZWN0ZWRDaGlwPW51bGwsdGhpcy5zZWxlY3RlZENoaXBzPVtdKToodGhpcy5zZWxlY3RlZENoaXA9Xyx0aGlzLnNlbGVjdGVkQ2hpcHM9W19dKTp0aGlzLnNlbGVjdGlvbk1vZGU9PT0ibXVsdGlwbGUiJiYodGhpcy5pc1NlbGVjdGVkKF8pP3RoaXMuc2VsZWN0ZWRDaGlwcz10aGlzLnNlbGVjdGVkQ2hpcHMuZmlsdGVyKGs9PiF0aGlzLmlzU2FtZUNoaXAoayxfKSk6dGhpcy5zZWxlY3RlZENoaXBzPVsuLi50aGlzLnNlbGVjdGVkQ2hpcHMsX10sdGhpcy5yZXF1ZXN0VXBkYXRlKCkpLGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRDaGlwcykpfXJlbW92ZUNoaXAoXyl7dGhpcy5zZWxlY3RhYmxlQ2hpcHM9dGhpcy5zZWxlY3RhYmxlQ2hpcHMuZmlsdGVyKGs9PiF0aGlzLmlzU2FtZUNoaXAoayxfKSksdGhpcy5zZWxlY3RlZENoaXBzPXRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoaz0+IXRoaXMuaXNTYW1lQ2hpcChrLF8pKSx0aGlzLnNlbGVjdGVkQ2hpcCYmdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLF8pJiYodGhpcy5zZWxlY3RlZENoaXA9bnVsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCl9c3RhdGlje2FyKGksYSl9fTtyZXR1cm4gRj1pfSkoKX0pO3ZhciBlYnQ9YigoKT0+e0pndCgpfSk7dmFyIHRidCxhYnQ9YigoKT0+e3VlKCk7eDEoKTt0YnQ9KCk9PndgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57bGV0IGU9dC5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpLGE9W3tpZDoibWV0cmljczEiLHg6MCx5OjAsdzozLGg6Mix0aXRsZToiUmV2ZW51ZSIsaWNvbjoibHVjaWRlOmRvbGxhclNpZ24iLGNvbnRlbnQ6d2AKICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMzJweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsiPiQxMjQsNTYzPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMyMmM1NWU7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+4oaRIDEyLjUlIGZyb20gbGFzdCBtb250aDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9LHtpZDoibWV0cmljczIiLHg6Myx5OjAsdzozLGg6Mix0aXRsZToiVXNlcnMiLGljb246Imx1Y2lkZTp1c2VycyIsY29udGVudDp3YAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OyI+OCwyMzQ8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzNiODJmNjsgZm9udC1zaXplOiAxNHB4OyBtYXJnaW4tdG9wOiA4cHg7Ij7ihpEgNS4yJSBmcm9tIGxhc3Qgd2VlazwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9LHtpZDoiY2hhcnQxIix4OjYseTowLHc6NixoOjQsdGl0bGU6IkFuYWx5dGljcyIsaWNvbjoibHVjaWRlOmxpbmVDaGFydCIsY29udGVudDp3YAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfV07ZS53aWRnZXRzPWEubWFwKHg9Pih7Li4ueH0pKSxlLmNlbGxIZWlnaHQ9ODAsZS5tYXJnaW49e3RvcDoxMCxyaWdodDoxMCxib3R0b206MTAsbGVmdDoxMH0sZS5lbmFibGVBbmltYXRpb249ITAsZS5zaG93R3JpZExpbmVzPSExO2xldCBpPWUuZ2V0TGF5b3V0KCkubWFwKHg9Pih7Li4ueH0pKSxyPWUud2lkZ2V0cy5tYXAoKHgsTSk9Pih7aWQ6eC5pZCx4OjAseTpNPT09MD8wOmUud2lkZ2V0cy5zbGljZSgwLE0pLnJlZHVjZSgoUyxGKT0+UytGLmgsMCksdzplLmNvbHVtbnMsaDp4Lmh9KSk7ZS5sYXlvdXRzPXtiYXNlOmksbW9iaWxlOnJ9O2xldCBzPXQucXVlcnlTZWxlY3RvcigiI2Rhc2hib2FyZExheW91dFN0YXR1cyIpLG49KCk9PntsZXQgeD1lLmdldExheW91dCgpO3MudGV4dENvbnRlbnQ9YEFjdGl2ZSBicmVha3BvaW50OiAke2UuYWN0aXZlQnJlYWtwb2ludH0gXHUyMDIyIFRpbGVzOiAke3gubGVuZ3RofWB9LG89d2luZG93Lm1hdGNoTWVkaWEoIihtYXgtd2lkdGg6IDc2OHB4KSIpLGQ9KCk9PntsZXQgeD1vLm1hdGNoZXM/Im1vYmlsZSI6ImJhc2UiO2UuYXBwbHlCcmVha3BvaW50TGF5b3V0KHgpLG4oKX07dHlwZW9mIG8uYWRkRXZlbnRMaXN0ZW5lcj09ImZ1bmN0aW9uIj9vLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZCk6by5hZGRMaXN0ZW5lcj8uKGQpLGQoKTtsZXQgYz00O3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKS5mb3JFYWNoKHg9Pntzd2l0Y2goeC50ZXh0Q29udGVudD8udHJpbSgpKXtjYXNlIlRvZ2dsZSBBbmltYXRpb24iOnguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ZS5lbmFibGVBbmltYXRpb249IWUuZW5hYmxlQW5pbWF0aW9ufSk7YnJlYWs7Y2FzZSJUb2dnbGUgR3JpZCBMaW5lcyI6eC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLnNob3dHcmlkTGluZXM9IWUuc2hvd0dyaWRMaW5lc30pO2JyZWFrO2Nhc2UiQWRkIFdpZGdldCI6eC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntsZXQgUz17aWQ6YHdpZGdldCR7YysrfWAseDowLHk6MCx3OjMsaDoyLGF1dG9Qb3NpdGlvbjohMCx0aXRsZTpgV2lkZ2V0ICR7Yy0xfWAsaWNvbjoibHVjaWRlOnBhY2thZ2UiLGNvbnRlbnQ6d2AKICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICM3MTcxN2E7Ij5OZXcgd2lkZ2V0IGNvbnRlbnQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiA4cHg7IGZvbnQtc2l6ZTogMjRweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsiPiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlMyl9PC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYH07ZS5hZGRXaWRnZXQoUywhMCl9KTticmVhaztjYXNlIkNvbXBhY3QgR3JpZCI6eC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmNvbXBhY3QoKX0pO2JyZWFrO2Nhc2UiVG9nZ2xlIEVkaXQgTW9kZSI6eC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntlLmVkaXRhYmxlPSFlLmVkaXRhYmxlLHgudGV4dENvbnRlbnQ9ZS5lZGl0YWJsZT8iTG9jayBHcmlkIjoiVW5sb2NrIEdyaWQifSk7YnJlYWs7Y2FzZSJSZXNldCBMYXlvdXQiOnguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ZS5hcHBseUJyZWFrcG9pbnRMYXlvdXQoZS5hY3RpdmVCcmVha3BvaW50KX0pO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fSk7bGV0IGw9bnVsbCxmPTAsZz0oeCxNKT0+e2xldCBTPWUuZ2V0TGF5b3V0KCk7Y29uc29sZS5ncm91cChgXHV7MUY1MDR9ICR7eH0gW0V2ZW50ICMkeysrZn1dYCksY29uc29sZS5sb2coIlRpbWVzdGFtcDoiLG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSksY29uc29sZS5sb2coIkdyaWQgQ29uZmlndXJhdGlvbjoiLHtjb2x1bW5zOmUuY29sdW1ucyxjZWxsSGVpZ2h0OmUuY2VsbEhlaWdodCxtYXJnaW46ZS5tYXJnaW4sZWRpdGFibGU6ZS5lZGl0YWJsZSxhY3RpdmVCcmVha3BvaW50OmUuYWN0aXZlQnJlYWtwb2ludH0pLGNvbnNvbGUubG9nKCJDdXJyZW50IExheW91dDoiLFMpLGNvbnNvbGUubG9nKCJXaWRnZXQgQ291bnQ6IixTLmxlbmd0aCksY29uc29sZS5sb2coIkdyaWQgQm91bmRzOiIse3RvdGFsV2lkZ2V0czplLndpZGdldHMubGVuZ3RoLG1heFk6TWF0aC5tYXgoLi4uUy5tYXAoRj0+Ri55K0YuaCkpLG9jY3VwaWVkOlMubWFwKEY9PmAke0YuaWR9OiAoJHtGLnh9LCR7Ri55fSkgJHtGLnd9eCR7Ri5ofWApLmpvaW4oIiwgIil9KSxNJiZjb25zb2xlLmxvZygiRXZlbnQgRGV0YWlsczoiLE0pLGNvbnNvbGUuZ3JvdXBFbmQoKX0seT1uZXcgTXV0YXRpb25PYnNlcnZlcigoKT0+e2xldCB4PWUuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnBsYWNlaG9sZGVyIik7aWYoeCl7bGV0IE09e2xlZnQ6eC5zdHlsZS5sZWZ0LHRvcDp4LnN0eWxlLnRvcCx3aWR0aDp4LnN0eWxlLndpZHRoLGhlaWdodDp4LnN0eWxlLmhlaWdodH07aWYoSlNPTi5zdHJpbmdpZnkoTSkhPT1KU09OLnN0cmluZ2lmeShsKSl7Y29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKSxjb25zb2xlLmxvZygiUHJldmlvdXM6IixsKSxjb25zb2xlLmxvZygiQ3VycmVudDoiLE0pO2xldCBTPWUuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmdyaWQtY29udGFpbmVyIik7UyYmY29uc29sZS5sb2coIkdyaWQgQ29udGFpbmVyIERpbWVuc2lvbnM6Iix7d2lkdGg6Uy5jbGllbnRXaWR0aCxoZWlnaHQ6Uy5jbGllbnRIZWlnaHR9KSxjb25zb2xlLmdyb3VwRW5kKCksbD1NfX19KTtlLnNoYWRvd1Jvb3QmJnkub2JzZXJ2ZShlLnNoYWRvd1Jvb3Qse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsic3R5bGUiXX0pLGcoIkluaXRpYWwgR3JpZCBTdGF0ZSIpLGUuYWRkRXZlbnRMaXN0ZW5lcigid2lkZ2V0LW1vdmUiLHg9PntnKCJXaWRnZXQgTW92ZSIse3dpZGdldDp4LmRldGFpbC53aWRnZXQsZGlzcGxhY2VkOnguZGV0YWlsLmRpc3BsYWNlZCxzd2FwcGVkV2l0aDp4LmRldGFpbC5zd2FwcGVkV2l0aH0pfSksZS5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVzaXplIix4PT57ZygiV2lkZ2V0IFJlc2l6ZSIse3dpZGdldDp4LmRldGFpbC53aWRnZXQsZGlzcGxhY2VkOnguZGV0YWlsLmRpc3BsYWNlZCxzd2FwcGVkV2l0aDp4LmRldGFpbC5zd2FwcGVkV2l0aH0pfSksZS5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVtb3ZlIix4PT57ZygiV2lkZ2V0IFJlbW92ZSIse3JlbW92ZWRXaWRnZXQ6eC5kZXRhaWwud2lkZ2V0fSksbigpfSksZS5hZGRFdmVudExpc3RlbmVyKCJsYXlvdXQtY2hhbmdlIiwoKT0+e2coIkxheW91dCBDaGFuZ2UiKSxuKCl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix4PT57bGV0IE09eC50YXJnZXQuY2xvc2VzdCgiLndpZGdldC1oZWFkZXIiKSxTPXgudGFyZ2V0LmNsb3Nlc3QoIi5yZXNpemUtaGFuZGxlIik7aWYoTXx8Uyl7Y29uc29sZS5ncm91cChgXHV7MUYzQUZ9IEludGVyYWN0aW9uIFN0YXJ0ZWQ6ICR7TT8iRHJhZyI6IlJlc2l6ZSJ9YCksY29uc29sZS5sb2coIlRhcmdldCBXaWRnZXQ6Iix4LnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik/LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSksY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246Iix7eDp4LmNsaWVudFgseTp4LmNsaWVudFl9KSxjb25zb2xlLmdyb3VwRW5kKCk7bGV0IEY9az0+e2xldCBOPXgudGFyZ2V0LmNsb3Nlc3QoIi53aWRnZXQiKTtOJiZjb25zb2xlLmxvZygiXHUyMTk0XHVGRTBGIFBvaW50ZXIgTW92ZToiLHt3aWRnZXRJZDpOLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSxwb3NpdGlvbjp7eDprLmNsaWVudFgseTprLmNsaWVudFl9LGRlbHRhOnt4OmsuY2xpZW50WC14LmNsaWVudFgseTprLmNsaWVudFkteC5jbGllbnRZfX0pfSxfPSgpPT57Y29uc29sZS5ncm91cCgiXHV7MUYzQzF9IEludGVyYWN0aW9uIEVuZGVkIiksZygiRmluYWwgU3RhdGUgQWZ0ZXIgSW50ZXJhY3Rpb24iKSxjb25zb2xlLmdyb3VwRW5kKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsXyl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixGKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLF8pfX0pO2xldCB2PWUuYWRkV2lkZ2V0LmJpbmQoZSk7ZS5hZGRXaWRnZXQ9KHgsTSk9Pntjb25zb2xlLmdyb3VwKCJcdTI3OTUgQWRkaW5nIFdpZGdldCIpLGNvbnNvbGUubG9nKCJOZXcgV2lkZ2V0OiIseCksY29uc29sZS5sb2coIkF1dG8gUG9zaXRpb246IixNKTtsZXQgUz12KHgsTSk7cmV0dXJuIGcoIkFmdGVyIFdpZGdldCBBZGRlZCIpLGNvbnNvbGUuZ3JvdXBFbmQoKSxTfTtsZXQgbT1lLmNvbXBhY3QuYmluZChlKTtlLmNvbXBhY3Q9eD0+e2NvbnNvbGUuZ3JvdXAoIlx1ezFGNURDfVx1RkUwRiBDb21wYWN0aW5nIEdyaWQiKSxjb25zb2xlLmxvZygiRGlyZWN0aW9uOiIseHx8InZlcnRpY2FsIiksZygiQmVmb3JlIENvbXBhY3QiKTtsZXQgTT1tKHgpO3JldHVybiBnKCJBZnRlciBDb21wYWN0IiksY29uc29sZS5ncm91cEVuZCgpLE19LG4oKX19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtRYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzA5MDkwYiIpfTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICB9CgogICAgICAgICAgLmRlbW8tY29udHJvbHMgZGVlcy1idXR0b24gewogICAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZ3JpZC1jb250YWluZXItd3JhcHBlciB7CiAgICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDYwMHB4OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB9CgogICAgICAgICAgLmluZm8gewogICAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjNzE3MTdhIil9OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgICB9CgogICAgICAgICAgI2Rhc2hib2FyZExheW91dFN0YXR1cyB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYH0pO3ZhciBpYnQscmJ0PWIoKCk9Pnt1ZSgpO2lidD1baC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZ3JpZC1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWxsLWNoYW5nZTogYXV0bzsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2VuYWJsZWFuaW1hdGlvbl0pIC5ncmlkLXdpZGdldCB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmdyaWQtd2lkZ2V0LmRyYWdnaW5nIHsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC13aWRnZXQucGxhY2Vob2xkZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgfQoKICAgICAgLmdyaWQtd2lkZ2V0LnJlc2l6aW5nIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7aC5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwiMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmdyaWQtd2lkZ2V0OmhvdmVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYm94LXNoYWRvdzogJHtoLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjQpIil9OwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgLndpZGdldC1jb250ZW50IHsKICAgICAgICBib3gtc2hhZG93OiAke2guYmRUaGVtZSgiMCAxNnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjI1KSIsIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOWZhZmIiLCIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjRmNGY1IiwiIzE4MTgxYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6YWN0aXZlIHsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlci5sb2NrZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y5ZmFmYiIsIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtaGVhZGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LWJvZHkuaGFzLWhlYWRlciB7CiAgICAgICAgdG9wOiA0NXB4OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtZSB7CiAgICAgICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgcmlnaHQ6IC02cHg7CiAgICAgICAgdG9wOiAxMCU7CiAgICAgICAgaGVpZ2h0OiA4MCU7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXMgewogICAgICAgIGN1cnNvcjogbnMtcmVzaXplOwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIGJvdHRvbTogLTZweDsKICAgICAgICBsZWZ0OiAxMCU7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXNlIHsKICAgICAgICBjdXJzb3I6IHNlLXJlc2l6ZTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgcmlnaHQ6IC0ycHg7CiAgICAgICAgYm90dG9tOiAtMnB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZXNpemUtaGFuZGxlLXNlOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiA0cHg7CiAgICAgICAgYm90dG9tOiA0cHg7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtd2lkZ2V0OmhvdmVyIC5yZXNpemUtaGFuZGxlLXNlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXNlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZXNpemUtaGFuZGxlLXNlOmhvdmVyOjphZnRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXBsYWNlaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiIzcxNzE3YSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtbGluZS12ZXJ0aWNhbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgIH0KICBgXX0pO3ZhciBIbDIsRlYsb2J0LGxidCxzYnQsWTgsbmJ0LENVdCxfVXQsT1YseG8sY2J0LGRidCxwYnQ9YigoKT0+e0hsMj0xMCxGVj10PT57aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybntob3Jpem9udGFsOnQsdmVydGljYWw6dCx0b3A6dCxyaWdodDp0LGJvdHRvbTp0LGxlZnQ6dH07bGV0IGU9e3RvcDp0LnRvcD8/MTAscmlnaHQ6dC5yaWdodD8/MTAsYm90dG9tOnQuYm90dG9tPz8xMCxsZWZ0OnQubGVmdD8/MTB9O3JldHVybnsuLi5lLGhvcml6b250YWw6KGUubGVmdCtlLnJpZ2h0KS8yLHZlcnRpY2FsOihlLnRvcCtlLmJvdHRvbSkvMn19LG9idD0odCxlLGEsaSxyKT0+e2xldCBzPWEuaG9yaXpvbnRhbCooZSsxKSxuPU1hdGgubWF4KHQtcywwKSxvPWU+MD9uL2U6MCxkPXI9PT0iYXV0byI/bzppO3JldHVybntjb250YWluZXJXaWR0aDp0LGNlbGxXaWR0aFB4Om8sbWFyZ2luSG9yaXpvbnRhbFB4OmEuaG9yaXpvbnRhbCxjZWxsSGVpZ2h0UHg6ZCxtYXJnaW5WZXJ0aWNhbFB4OmEudmVydGljYWx9fSxsYnQ9KHQsZSxhKT0+e2lmKHQubGVuZ3RoPT09MClyZXR1cm4gMDtsZXQgaT1NYXRoLm1heCguLi50Lm1hcChyPT5yLnkrci5oKSwwKTtyZXR1cm4gaSphKyhpKzEpKmUudmVydGljYWx9LHNidD0odCxlLGEsaSxyKT0+ZTx0LngrdC53JiZlK2k+dC54JiZhPHQueSt0LmgmJmErcj50LnksWTg9KHQsZSxhLGkscj1lLncscz1lLmgpPT50LmZpbHRlcihuPT5uLmlkPT09ZS5pZD8hMTpzYnQobixhLGkscixzKSksbmJ0PSh0LGUsYSxpKT0+WTgodCxlLGEsaSkubGVuZ3RoPjAsQ1V0PXQ9Pih7Li4udH0pLF9VdD10PT50Lm1hcChDVXQpLE9WPSh0LGUsYSxpKT0+e2ZvcihsZXQgcz0wO3M8MjAwO3MrKylmb3IobGV0IG49MDtuPD1pLWU7bisrKWlmKCF0LnNvbWUoZD0+c2J0KGQsbixzLGUsYSkpKXJldHVybnt4Om4seTpzfTtyZXR1cm57eDowLHk6dC5yZWR1Y2UoKHMsbik9Pk1hdGgubWF4KHMsbi55K24uaCksMCl9fSx4bz0odCxlLGEsaSxyKT0+e2xldCBzPV9VdCh0KSxuPXMuZmluZChmPT5mLmlkPT09ZSksbz10LmZpbmQoZj0+Zi5pZD09PWUpO2lmKCFufHwhbylyZXR1cm4gbnVsbDtsZXQgZD17eDphLngseTphLnksdzphLnc/P24udyxoOmEuaD8/bi5ofTtuLng9ZC54LG4ueT1kLnksbi53PWQudyxuLmg9ZC5oO2xldCBjPVk4KHMsbixkLngsZC55LGQudyxkLmgpO2lmKGMubGVuZ3RoPT09MClyZXR1cm57d2lkZ2V0czpzLG1vdmVkV2lkZ2V0czpbbi5pZF19O2lmKGMubGVuZ3RoPT09MSl7bGV0IGY9Y1swXTtpZighZi5sb2NrZWQmJiFmLm5vTW92ZSYmZi53PT09bi53JiZmLmg9PT1uLmgpe2xldCBnPXMuZmluZCh5PT55LmlkPT09Zi5pZCk7aWYoZyl7bGV0IHk9byx2PXt4OmcueCx5OmcueX07aWYoZy54PXkueCxnLnk9eS55LFk4KHMsbixuLngsbi55LG4udyxuLmgpLmxlbmd0aD09PTAmJlk4KHMsZyxnLngsZy55LGcudyxnLmgpLmxlbmd0aD09PTApcmV0dXJue3dpZGdldHM6cyxtb3ZlZFdpZGdldHM6W24uaWQsZy5pZF0sc3dhcHBlZFdpdGg6Zy5pZH07Zy54PXYueCxnLnk9di55fX19bGV0IHA9bmV3IFNldChbbi5pZF0pO2ZvcihsZXQgZiBvZiBjKXtpZihmLmxvY2tlZHx8Zi5ub01vdmUpcmV0dXJuIG51bGw7bGV0IGc9cy5maW5kKG09Pm0uaWQ9PT1mLmlkKTtpZighZyljb250aW51ZTtsZXQgeT1zLmZpbHRlcihtPT5tLmlkIT09Zi5pZCksdj1PVih5LGcudyxnLmgsaSk7Zy54PXYueCxnLnk9di55LHAuYWRkKGcuaWQpfXJldHVybiBZOChzLG4sbi54LG4ueSxuLncsbi5oKS5sZW5ndGg+MD9udWxsOnt3aWRnZXRzOnMsbW92ZWRXaWRnZXRzOkFycmF5LmZyb20ocCl9fSxjYnQ9KHQsZT0idmVydGljYWwiKT0+e2xldCBhPVsuLi50XS5zb3J0KChpLHIpPT5lPT09InZlcnRpY2FsIj9pLnkhPT1yLnk/aS55LXIueTppLngtci54OmkueCE9PXIueD9pLngtci54OmkueS1yLnkpO2ZvcihsZXQgaSBvZiBhKWlmKCEoaS5sb2NrZWR8fGkubm9Nb3ZlKSlpZihlPT09InZlcnRpY2FsIilmb3IoO2kueT4wJiYhbmJ0KHQsaSxpLngsaS55LTEpOylpLnktPTE7ZWxzZSBmb3IoO2kueD4wJiYhbmJ0KHQsaSxpLngtMSxpLnkpOylpLngtPTF9LGRidD0odCxlKT0+dC5tYXAoYT0+e2xldCBpPWUuZmluZChyPT5yLmlkPT09YS5pZCk7cmV0dXJuIGk/ey4uLmEsLi4uaX06YX0pfSk7dmFyIGhidCx1YnQsZmJ0PWIoKCk9PntoYnQ9KHtwb2ludGVyOnQsY29udGFpbmVyUmVjdDplLG1ldHJpY3M6YSxjb2x1bW5zOmksd2lkZ2V0OnIscnRsOnMsZHJhZ09mZnNldFg6bj0wLGRyYWdPZmZzZXRZOm89MH0pPT57bGV0IGQ9dC5jbGllbnRYLWUubGVmdC1uLGM9dC5jbGllbnRZLWUudG9wLW8scD1hLm1hcmdpbkhvcml6b250YWxQeCxsPWEubWFyZ2luVmVydGljYWxQeCxmPWEuY2VsbFdpZHRoUHgsZz1hLmNlbGxIZWlnaHRQeCx5PShfLGssTik9Pk1hdGgubWF4KGssTWF0aC5taW4oTixfKSksdj15KGQtcCwwLGUud2lkdGgtcCksbT15KGMtbCwwLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkseD1mK3AsTT1nK2wsUz1NYXRoLnJvdW5kKHYveCk7cyYmKFM9aS1yLnctUyksUz15KFMsMCxpLXIudyk7bGV0IEY9eShNYXRoLnJvdW5kKG0vTSksMCxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7cmV0dXJue3g6Uyx5OkZ9fSx1YnQ9KHtwb2ludGVyOnQsY29udGFpbmVyUmVjdDplLG1ldHJpY3M6YSxzdGFydFdpZHRoOmksc3RhcnRIZWlnaHQ6cixzdGFydFBvaW50ZXI6cyxoYW5kbGVyOm4sd2lkZ2V0Om8sY29sdW1uczpkfSk9PntsZXQgYz10LmNsaWVudFgtcy5jbGllbnRYLHA9dC5jbGllbnRZLXMuY2xpZW50WSxsPWksZj1yLGc9YS5jZWxsV2lkdGhQeCthLm1hcmdpbkhvcml6b250YWxQeCx5PWEuY2VsbEhlaWdodFB4K2EubWFyZ2luVmVydGljYWxQeDtpZihuLmluY2x1ZGVzKCJlIikpe2xldCB4PU1hdGgucm91bmQoYy9nKTtsPWkreH1pZihuLmluY2x1ZGVzKCJzIikpe2xldCB4PU1hdGgucm91bmQocC95KTtmPXIreH1sZXQgdj1NYXRoLm1heChvLm1pbld8fDEsTWF0aC5taW4obCxvLm1heFd8fGQtby54KSksbT1NYXRoLm1heChvLm1pbkh8fDEsTWF0aC5taW4oZixvLm1heEh8fE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSk7cmV0dXJue3dpZHRoOnYsaGVpZ2h0Om19fX0pO3ZhciBtYnQsZ2J0PWIoKCk9PntuMigpO3MyKCk7bWJ0PSh7d2lkZ2V0OnQsaG9zdDplLGV2ZW50OmF9KT0+e2xldCBpPVt7bmFtZToiRGVsZXRlIHRpbGUiLGljb25OYW1lOiJsdWNpZGU6dHJhc2gyIixhY3Rpb246YXN5bmMoKT0+KGUucmVtb3ZlV2lkZ2V0KHQuaWQpLG51bGwpfV07V3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoYSxpKX19KTt2YXIgUTIsWXQsYmJ0LHZidD1iKCgpPT57dWUoKTtFdCgpO24yKCk7YWJ0KCk7cmJ0KCk7cGJ0KCk7ZmJ0KCk7Z2J0KCk7UTI9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxZdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sYmJ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1kYXNoYm9hcmRncmlkIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W10sTixMPVtdLEE9W10scSxDPVtdLHo9W10sRSxUPVtdLCQ9W10sVixSPVtdLFU9W10scmUsaj1bXSxtZT1bXSx3ZSxIPVtdLGNlPVtdLGtlLFc9W10sRD1bXSxPLFo9W10sWT1bXSxvZSxnZT1bXSxiZT1bXTt2YXIgJGU9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBCPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6QXJyYXl9KV0sZD1bSSh7dHlwZTpOdW1iZXJ9KV0sbD1bSSh7dHlwZTpPYmplY3R9KV0seT1bSSh7dHlwZTpOdW1iZXJ9KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0koe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwfSldLE49W0koe3R5cGU6U3RyaW5nfSldLHE9W0koe3R5cGU6Qm9vbGVhbn0pXSxFPVtJKHt0eXBlOkJvb2xlYW59KV0sVj1bSSh7YXR0cmlidXRlOiExfSldLHJlPVtJKHt0eXBlOlN0cmluZ30pXSx3ZT1bSygpXSxrZT1bSygpXSxPPVtLKCldLG9lPVtLKCldLFEyKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToid2lkZ2V0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+IndpZGdldHMiaW4gUCxnZXQ6UD0+UC53aWRnZXRzLHNldDooUCxKKT0+e1Aud2lkZ2V0cz1KfX0sbWV0YWRhdGE6Qn0sbixvKSxRMih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNlbGxIZWlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJjZWxsSGVpZ2h0ImluIFAsZ2V0OlA9PlAuY2VsbEhlaWdodCxzZXQ6KFAsSik9PntQLmNlbGxIZWlnaHQ9Sn19LG1ldGFkYXRhOkJ9LGMscCksUTIodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtYXJnaW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJtYXJnaW4iaW4gUCxnZXQ6UD0+UC5tYXJnaW4sc2V0OihQLEopPT57UC5tYXJnaW49Sn19LG1ldGFkYXRhOkJ9LGYsZyksUTIodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb2x1bW5zIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4iY29sdW1ucyJpbiBQLGdldDpQPT5QLmNvbHVtbnMsc2V0OihQLEopPT57UC5jb2x1bW5zPUp9fSxtZXRhZGF0YTpCfSx2LG0pLFEyKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZWRpdGFibGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJlZGl0YWJsZSJpbiBQLGdldDpQPT5QLmVkaXRhYmxlLHNldDooUCxKKT0+e1AuZWRpdGFibGU9Sn19LG1ldGFkYXRhOkJ9LE0sUyksUTIodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlbmFibGVBbmltYXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJlbmFibGVBbmltYXRpb24iaW4gUCxnZXQ6UD0+UC5lbmFibGVBbmltYXRpb24sc2V0OihQLEopPT57UC5lbmFibGVBbmltYXRpb249Sn19LG1ldGFkYXRhOkJ9LF8sayksUTIodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjZWxsSGVpZ2h0VW5pdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImNlbGxIZWlnaHRVbml0ImluIFAsZ2V0OlA9PlAuY2VsbEhlaWdodFVuaXQsc2V0OihQLEopPT57UC5jZWxsSGVpZ2h0VW5pdD1KfX0sbWV0YWRhdGE6Qn0sTCxBKSxRMih0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJ0bCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+InJ0bCJpbiBQLGdldDpQPT5QLnJ0bCxzZXQ6KFAsSik9PntQLnJ0bD1KfX0sbWV0YWRhdGE6Qn0sQyx6KSxRMih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dHcmlkTGluZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJzaG93R3JpZExpbmVzImluIFAsZ2V0OlA9PlAuc2hvd0dyaWRMaW5lcyxzZXQ6KFAsSik9PntQLnNob3dHcmlkTGluZXM9Sn19LG1ldGFkYXRhOkJ9LFQsJCksUTIodGhpcyxudWxsLFYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYXlvdXRzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4ibGF5b3V0cyJpbiBQLGdldDpQPT5QLmxheW91dHMsc2V0OihQLEopPT57UC5sYXlvdXRzPUp9fSxtZXRhZGF0YTpCfSxSLFUpLFEyKHRoaXMsbnVsbCxyZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2ZUJyZWFrcG9pbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJhY3RpdmVCcmVha3BvaW50ImluIFAsZ2V0OlA9PlAuYWN0aXZlQnJlYWtwb2ludCxzZXQ6KFAsSik9PntQLmFjdGl2ZUJyZWFrcG9pbnQ9Sn19LG1ldGFkYXRhOkJ9LGosbWUpLFEyKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBsYWNlaG9sZGVyUG9zaXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJwbGFjZWhvbGRlclBvc2l0aW9uImluIFAsZ2V0OlA9PlAucGxhY2Vob2xkZXJQb3NpdGlvbixzZXQ6KFAsSik9PntQLnBsYWNlaG9sZGVyUG9zaXRpb249Sn19LG1ldGFkYXRhOkJ9LEgsY2UpLFEyKHRoaXMsbnVsbCxrZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1ldHJpY3MiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJtZXRyaWNzImluIFAsZ2V0OlA9PlAubWV0cmljcyxzZXQ6KFAsSik9PntQLm1ldHJpY3M9Sn19LG1ldGFkYXRhOkJ9LFcsRCksUTIodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZXNvbHZlZE1hcmdpbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJyZXNvbHZlZE1hcmdpbnMiaW4gUCxnZXQ6UD0+UC5yZXNvbHZlZE1hcmdpbnMsc2V0OihQLEopPT57UC5yZXNvbHZlZE1hcmdpbnM9Sn19LG1ldGFkYXRhOkJ9LFosWSksUTIodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicHJldmlld1dpZGdldHMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJwcmV2aWV3V2lkZ2V0cyJpbiBQLGdldDpQPT5QLnByZXZpZXdXaWRnZXRzLHNldDooUCxKKT0+e1AucHJldmlld1dpZGdldHM9Sn19LG1ldGFkYXRhOkJ9LGdlLGJlKSxRMihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpCfSxudWxsLGEpLCRlPWk9ZS52YWx1ZSxCJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkJ9KX1zdGF0aWMgZGVtbz10YnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJMYXlvdXQiXTtzdGF0aWMgc3R5bGVzPWlidDsjZT1ZdCh0aGlzLG4sW10pO2dldCB3aWRnZXRzKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHdpZGdldHMoQil7dGhpcy4jZT1CfSN0PShZdCh0aGlzLG8pLFl0KHRoaXMsYyw4MCkpO2dldCBjZWxsSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IGNlbGxIZWlnaHQoQil7dGhpcy4jdD1CfSNhPShZdCh0aGlzLHApLFl0KHRoaXMsZiwxMCkpO2dldCBtYXJnaW4oKXtyZXR1cm4gdGhpcy4jYX1zZXQgbWFyZ2luKEIpe3RoaXMuI2E9Qn0jaT0oWXQodGhpcyxnKSxZdCh0aGlzLHYsMTIpKTtnZXQgY29sdW1ucygpe3JldHVybiB0aGlzLiNpfXNldCBjb2x1bW5zKEIpe3RoaXMuI2k9Qn0jcj0oWXQodGhpcyxtKSxZdCh0aGlzLE0sITApKTtnZXQgZWRpdGFibGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgZWRpdGFibGUoQil7dGhpcy4jcj1CfSNzPShZdCh0aGlzLFMpLFl0KHRoaXMsXywhMCkpO2dldCBlbmFibGVBbmltYXRpb24oKXtyZXR1cm4gdGhpcy4jc31zZXQgZW5hYmxlQW5pbWF0aW9uKEIpe3RoaXMuI3M9Qn0jbj0oWXQodGhpcyxrKSxZdCh0aGlzLEwsInB4IikpO2dldCBjZWxsSGVpZ2h0VW5pdCgpe3JldHVybiB0aGlzLiNufXNldCBjZWxsSGVpZ2h0VW5pdChCKXt0aGlzLiNuPUJ9I289KFl0KHRoaXMsQSksWXQodGhpcyxDLCExKSk7Z2V0IHJ0bCgpe3JldHVybiB0aGlzLiNvfXNldCBydGwoQil7dGhpcy4jbz1CfSNsPShZdCh0aGlzLHopLFl0KHRoaXMsVCwhMSkpO2dldCBzaG93R3JpZExpbmVzKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHNob3dHcmlkTGluZXMoQil7dGhpcy4jbD1CfSNjPShZdCh0aGlzLCQpLFl0KHRoaXMsUix2b2lkIDApKTtnZXQgbGF5b3V0cygpe3JldHVybiB0aGlzLiNjfXNldCBsYXlvdXRzKEIpe3RoaXMuI2M9Qn0jZD0oWXQodGhpcyxVKSxZdCh0aGlzLGosImJhc2UiKSk7Z2V0IGFjdGl2ZUJyZWFrcG9pbnQoKXtyZXR1cm4gdGhpcy4jZH1zZXQgYWN0aXZlQnJlYWtwb2ludChCKXt0aGlzLiNkPUJ9I3A9KFl0KHRoaXMsbWUpLFl0KHRoaXMsSCxudWxsKSk7Z2V0IHBsYWNlaG9sZGVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy4jcH1zZXQgcGxhY2Vob2xkZXJQb3NpdGlvbihCKXt0aGlzLiNwPUJ9I2g9KFl0KHRoaXMsY2UpLFl0KHRoaXMsVyxudWxsKSk7Z2V0IG1ldHJpY3MoKXtyZXR1cm4gdGhpcy4jaH1zZXQgbWV0cmljcyhCKXt0aGlzLiNoPUJ9I3U9KFl0KHRoaXMsRCksWXQodGhpcyxaLG51bGwpKTtnZXQgcmVzb2x2ZWRNYXJnaW5zKCl7cmV0dXJuIHRoaXMuI3V9c2V0IHJlc29sdmVkTWFyZ2lucyhCKXt0aGlzLiN1PUJ9I2Y9KFl0KHRoaXMsWSksWXQodGhpcyxnZSxudWxsKSk7Z2V0IHByZXZpZXdXaWRnZXRzKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IHByZXZpZXdXaWRnZXRzKEIpe3RoaXMuI2Y9Qn1jb250YWluZXJCb3VuZHM9KFl0KHRoaXMsYmUpLG51bGwpO2RyYWdTdGF0ZT1udWxsO3Jlc2l6ZVN0YXRlPW51bGw7cmVzaXplT2JzZXJ2ZXI7aW50ZXJhY3Rpb25BY3RpdmU9ITE7YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29tcHV0ZU1ldHJpY3MoKSx0aGlzLm9ic2VydmVSZXNpemUoKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5kaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSx0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCl9dXBkYXRlZChCKXsoQi5oYXMoIm1hcmdpbiIpfHxCLmhhcygiY29sdW1ucyIpfHxCLmhhcygiY2VsbEhlaWdodCIpfHxCLmhhcygiY2VsbEhlaWdodFVuaXQiKSkmJnRoaXMuY29tcHV0ZU1ldHJpY3MoKSxCLmhhcygid2lkZ2V0cyIpJiYhdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSYmdGhpcy5ub3RpZnlMYXlvdXRDaGFuZ2UoKX1yZW5kZXIoKXtsZXQgQj10aGlzLndpZGdldHM7aWYoQi5sZW5ndGg9PT0wKXJldHVybiB3YAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxheW91dEdyaWQifT48L2RlZXMtaWNvbj4KICAgICAgICAgIDxkaXY+Tm8gd2lkZ2V0cyBjb25maWd1cmVkPC9kaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPkFkZCB3aWRnZXRzIHRvIHBvcHVsYXRlIHRoZSBkYXNoYm9hcmQ8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDtsZXQgUD10aGlzLmVuc3VyZU1ldHJpY3MoKSxKPXRoaXMucmVzb2x2ZWRNYXJnaW5zPz9GVih0aGlzLm1hcmdpbiksZmU9UC5jZWxsSGVpZ2h0UHgsZGU9dGhpcy5wcmV2aWV3V2lkZ2V0cz8/dGhpcy53aWRnZXRzLF9lPWxidChkZSxKLGZlKSxoZT10aGlzLnByZXZpZXdXaWRnZXRzP25ldyBNYXAodGhpcy5wcmV2aWV3V2lkZ2V0cy5tYXAodGU9Plt0ZS5pZCx0ZV0pKTpudWxsO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lciIgc3R5bGU9ImhlaWdodDogJHtfZX1weDsiPgogICAgICAgICR7dGhpcy5zaG93R3JpZExpbmVzP3RoaXMucmVuZGVyR3JpZExpbmVzKFAsX2UpOm51bGx9CiAgICAgICAgJHtCLm1hcCh0ZT0+dGhpcy5yZW5kZXJXaWRnZXQodGUsUCxKLGhlKSl9CiAgICAgICAgJHt0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/dGhpcy5yZW5kZXJQbGFjZWhvbGRlcihQLEopOm51bGx9CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJHcmlkTGluZXMoQixQKXtsZXQgSj1bXSxmZT1bXSxkZT1CLmNlbGxXaWR0aFB4K0IubWFyZ2luSG9yaXpvbnRhbFB4LF9lPUIuY2VsbEhlaWdodFB4K0IubWFyZ2luVmVydGljYWxQeDtmb3IobGV0IHRlPTA7dGU8PXRoaXMuY29sdW1uczt0ZSsrKXtsZXQgemU9dGUqZGUrQi5tYXJnaW5Ib3Jpem9udGFsUHgsRmU9dGhpcy5weFRvUGVyY2VudCh6ZSxCLmNvbnRhaW5lcldpZHRoKTtKLnB1c2god2A8ZGl2IGNsYXNzPSJncmlkLWxpbmUtdmVydGljYWwiIHN0eWxlPSJsZWZ0OiAke0ZlfSU7Ij48L2Rpdj5gKX1sZXQgaGU9TWF0aC5jZWlsKFAvX2UpO2ZvcihsZXQgdGU9MDt0ZTw9aGU7dGUrKyl7bGV0IHplPXRlKl9lO2ZlLnB1c2god2A8ZGl2IGNsYXNzPSJncmlkLWxpbmUtaG9yaXpvbnRhbCIgc3R5bGU9InRvcDogJHt6ZX1weDsiPjwvZGl2PmApfXJldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke0p9CiAgICAgICAgJHtmZX0KICAgICAgPC9kaXY+CiAgICBgfXJlbmRlcldpZGdldChCLFAsSixmZSl7bGV0IGRlPXRoaXMuZHJhZ1N0YXRlPy53aWRnZXRJZD09PUIuaWQsX2U9dGhpcy5yZXNpemVTdGF0ZT8ud2lkZ2V0SWQ9PT1CLmlkLGhlPUIubG9ja2VkfHwhdGhpcy5lZGl0YWJsZSx0ZT1mZT8uZ2V0KEIuaWQpPz9udWxsLHplPWRlP0I6dGU/P0IsRmU9dGhpcy5jb21wdXRlV2lkZ2V0UmVjdCh6ZSxQLEopLEdlPXRoaXMucnRsPyJyaWdodCI6ImxlZnQiLHllPXRoaXMucHhUb1BlcmNlbnQoRmUubGVmdCxQLmNvbnRhaW5lcldpZHRoKSxlZT10aGlzLnB4VG9QZXJjZW50KEZlLndpZHRoLFAuY29udGFpbmVyV2lkdGgpLGFlPSIiO2lmKGRlJiZ0aGlzLmRyYWdTdGF0ZT8uY3VycmVudFBvaW50ZXIpe2xldCB2ZT10aGlzLmRyYWdTdGF0ZS5jdXJyZW50UG9pbnRlcixQZT10aGlzLmNvbnRhaW5lckJvdW5kcz8/dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxqZT12ZS5jbGllbnRYLVBlLmxlZnQtdGhpcy5kcmFnU3RhdGUub2Zmc2V0WC1GZS5sZWZ0LHd0PXZlLmNsaWVudFktUGUudG9wLXRoaXMuZHJhZ1N0YXRlLm9mZnNldFktRmUudG9wO2FlPWB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgke2plfXB4LCAke3d0fXB4KTtgfXJldHVybiB3YAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7ZGU/ImRyYWdnaW5nIjoiIn0gJHtfZT8icmVzaXppbmciOiIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke0dlfTogJHt5ZX0lOwogICAgICAgICAgdG9wOiAke0ZlLnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke2VlfSU7CiAgICAgICAgICBoZWlnaHQ6ICR7RmUuaGVpZ2h0fXB4OwogICAgICAgICAgJHthZX0KICAgICAgICAiCiAgICAgICAgZGF0YS13aWRnZXQtaWQ9JHtCLmlkfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0LWNvbnRlbnQiPgogICAgICAgICAgJHtCLnRpdGxlP3dgCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3aWRnZXQtaGVhZGVyICR7aGU/ImxvY2tlZCI6IiJ9IgogICAgICAgICAgICAgICAgICBAcG9pbnRlcmRvd249JHshaGUmJiFCLm5vTW92ZT92ZT0+dGhpcy5zdGFydERyYWcodmUsQik6bnVsbH0KICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7dmU9PnRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUodmUsQil9CiAgICAgICAgICAgICAgICAgIHRhYmluZGV4PSR7IWhlJiYhQi5ub01vdmU/MDotMX0KICAgICAgICAgICAgICAgICAgQGtleWRvd249JHt2ZT0+dGhpcy5oYW5kbGVIZWFkZXJLZXlkb3duKHZlLEIpfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke0IuaWNvbj93YDxkZWVzLWljb24gLmljb249JHtCLmljb259PjwvZGVlcy1pY29uPmA6bnVsbH0KICAgICAgICAgICAgICAgICAgJHtCLnRpdGxlfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYDpudWxsfQogICAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0LWJvZHkgJHtCLnRpdGxlPyJoYXMtaGVhZGVyIjoiIn0iPgogICAgICAgICAgICAke0IuY29udGVudH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHshaGUmJiFCLm5vUmVzaXplP3dgCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7dmU9PnRoaXMuc3RhcnRSZXNpemUodmUsQiwiZSIpfQogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLXMiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0ke3ZlPT50aGlzLnN0YXJ0UmVzaXplKHZlLEIsInMiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7dmU9PnRoaXMuc3RhcnRSZXNpemUodmUsQiwic2UiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICBgOm51bGx9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1yZW5kZXJQbGFjZWhvbGRlcihCLFApe2lmKCF0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24pcmV0dXJuIHdgYDtsZXQgSj10aGlzLmNvbXB1dGVXaWRnZXRSZWN0KHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbixCLFApLGZlPXRoaXMucnRsPyJyaWdodCI6ImxlZnQiLGRlPXRoaXMucHhUb1BlcmNlbnQoSi5sZWZ0LEIuY29udGFpbmVyV2lkdGgpLF9lPXRoaXMucHhUb1BlcmNlbnQoSi53aWR0aCxCLmNvbnRhaW5lcldpZHRoKTtyZXR1cm4gd2AKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJncmlkLXdpZGdldCBwbGFjZWhvbGRlciIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke2ZlfTogJHtkZX0lOwogICAgICAgICAgdG9wOiAke0oudG9wfXB4OwogICAgICAgICAgd2lkdGg6ICR7X2V9JTsKICAgICAgICAgIGhlaWdodDogJHtKLmhlaWdodH1weDsKICAgICAgICAiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1zdGFydERyYWcoQixQKXtpZighdGhpcy5lZGl0YWJsZXx8UC5ub01vdmV8fFAubG9ja2VkKXJldHVybjtCLnByZXZlbnREZWZhdWx0KCksQi5zdG9wUHJvcGFnYXRpb24oKTtsZXQgSj1CLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmdyaWQtd2lkZ2V0Iik7aWYoIUopcmV0dXJuO2xldCBmZT1KLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuY29udGFpbmVyQm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5lbnN1cmVNZXRyaWNzKCksdGhpcy5kcmFnU3RhdGU9e3dpZGdldElkOlAuaWQscG9pbnRlcklkOkIucG9pbnRlcklkLG9mZnNldFg6Qi5jbGllbnRYLWZlLmxlZnQsb2Zmc2V0WTpCLmNsaWVudFktZmUudG9wLHN0YXJ0OntpZDpQLmlkLHg6UC54LHk6UC55LHc6UC53LGg6UC5ofSxwcmV2aW91c1Bvc2l0aW9uOntpZDpQLmlkLHg6UC54LHk6UC55LHc6UC53LGg6UC5ofSxjdXJyZW50UG9pbnRlcjp7Y2xpZW50WDpCLmNsaWVudFgsY2xpZW50WTpCLmNsaWVudFl9LGxhc3RQbGFjZW1lbnQ6bnVsbH0sdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZT0hMCxCLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoQi5wb2ludGVySWQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLmhhbmRsZURyYWdNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuaGFuZGxlRHJhZ0VuZCksdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDpQLmlkLHg6UC54LHk6UC55LHc6UC53LGg6UC5ofX1oYW5kbGVEcmFnTW92ZT1CPT57aWYoIXRoaXMuZHJhZ1N0YXRlKXJldHVybjtsZXQgUD10aGlzLmVuc3VyZU1ldHJpY3MoKSxKPXRoaXMud2lkZ2V0cyxmZT1KLmZpbmQodGU9PnRlLmlkPT09dGhpcy5kcmFnU3RhdGUud2lkZ2V0SWQpO2lmKCFmZSlyZXR1cm47Qi5wcmV2ZW50RGVmYXVsdCgpO2xldCBkZT10aGlzLmRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uLF9lPWhidCh7cG9pbnRlcjp7Y2xpZW50WDpCLmNsaWVudFgsY2xpZW50WTpCLmNsaWVudFl9LGNvbnRhaW5lclJlY3Q6dGhpcy5jb250YWluZXJCb3VuZHM/P3RoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbWV0cmljczpQLGNvbHVtbnM6dGhpcy5jb2x1bW5zLHdpZGdldDpmZSxydGw6dGhpcy5ydGwsZHJhZ09mZnNldFg6dGhpcy5kcmFnU3RhdGUub2Zmc2V0WCxkcmFnT2Zmc2V0WTp0aGlzLmRyYWdTdGF0ZS5vZmZzZXRZfSksaGU9eG8oSixmZS5pZCx7eDpfZS54LHk6X2UueX0sdGhpcy5jb2x1bW5zLGRlKTtpZihoZSl7bGV0IHRlPWhlLndpZGdldHMuZmluZChGZT0+RmUuaWQ9PT1mZS5pZCk7dGhpcy5kcmFnU3RhdGU9ey4uLnRoaXMuZHJhZ1N0YXRlLGN1cnJlbnRQb2ludGVyOntjbGllbnRYOkIuY2xpZW50WCxjbGllbnRZOkIuY2xpZW50WX0sbGFzdFBsYWNlbWVudDpoZSxwcmV2aW91c1Bvc2l0aW9uOnRlP3tpZDp0ZS5pZCx4OnRlLngseTp0ZS55LHc6dGUudyxoOnRlLmh9OntpZDpmZS5pZCx4Ol9lLngseTpfZS55LHc6ZmUudyxoOmZlLmh9fSx0aGlzLnByZXZpZXdXaWRnZXRzPWhlLndpZGdldHM7bGV0IHplPWhlLndpZGdldHMuZmluZChGZT0+RmUuaWQ9PT1mZS5pZCk7emU/dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDp6ZS5pZCx4OnplLngseTp6ZS55LHc6emUudyxoOnplLmh9OnRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj17aWQ6ZmUuaWQseDpfZS54LHk6X2UueSx3OmZlLncsaDpmZS5ofX1lbHNlIHRoaXMucHJldmlld1dpZGdldHM9bnVsbCx0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb249bnVsbDt0aGlzLnJlcXVlc3RVcGRhdGUoKX07aGFuZGxlRHJhZ0VuZD1CPT57bGV0IFA9dGhpcy5kcmFnU3RhdGU7aWYoIVB8fEIucG9pbnRlcklkIT09UC5wb2ludGVySWQpcmV0dXJuO2xldCBKPXRoaXMud2lkZ2V0czt0aGlzLnByZXZpZXdXaWRnZXRzPW51bGw7bGV0IGZlPXRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8/UC5zdGFydCxkZT14byhKLFAud2lkZ2V0SWQse3g6ZmUueCx5OmZlLnl9LHRoaXMuY29sdW1ucyxQLnByZXZpb3VzUG9zaXRpb24pO2lmKGRlKXtsZXQgX2U9ZGUud2lkZ2V0cy5maW5kKGhlPT5oZS5pZD09PVAud2lkZ2V0SWQpO19lJiYoZGUud2lkZ2V0cy5zb21lKHRlPT50ZS5pZD09PVAud2lkZ2V0SWQ/ITE6X2UueDx0ZS54K3RlLncmJl9lLngrX2Uudz50ZS54JiZfZS55PHRlLnkrdGUuaCYmX2UueStfZS5oPnRlLnkpP3RoaXMud2lkZ2V0cz10aGlzLndpZGdldHMubWFwKHRlPT50ZS5pZD09PVAud2lkZ2V0SWQ/ey4uLnRlLHg6UC5zdGFydC54LHk6UC5zdGFydC55fTp0ZSk6dGhpcy5jb21taXRQbGFjZW1lbnQoZGUsUC53aWRnZXRJZCwid2lkZ2V0LW1vdmUiKSl9ZWxzZSB0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLm1hcChfZT0+X2UuaWQ9PT1QLndpZGdldElkP3suLi5fZSx4OlAuc3RhcnQueCx5OlAuc3RhcnQueX06X2UpO3RoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj1udWxsLHRoaXMuZHJhZ1N0YXRlPW51bGwsdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZT0hMSx0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCl9O3N0YXJ0UmVzaXplKEIsUCxKKXshdGhpcy5lZGl0YWJsZXx8UC5ub1Jlc2l6ZXx8UC5sb2NrZWR8fChCLnByZXZlbnREZWZhdWx0KCksQi5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmVuc3VyZU1ldHJpY3MoKSx0aGlzLnJlc2l6ZVN0YXRlPXt3aWRnZXRJZDpQLmlkLHBvaW50ZXJJZDpCLnBvaW50ZXJJZCxoYW5kbGVyOkosc3RhcnRQb2ludGVyOntjbGllbnRYOkIuY2xpZW50WCxjbGllbnRZOkIuY2xpZW50WX0sc3RhcnQ6e2lkOlAuaWQseDpQLngseTpQLnksdzpQLncsaDpQLmh9LHN0YXJ0V2lkdGg6UC53LHN0YXJ0SGVpZ2h0OlAuaCxsYXN0UGxhY2VtZW50Om51bGx9LHRoaXMuaW50ZXJhY3Rpb25BY3RpdmU9ITAsQi5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKEIucG9pbnRlcklkKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsdGhpcy5oYW5kbGVSZXNpemVNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuaGFuZGxlUmVzaXplRW5kKSx0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb249e2lkOlAuaWQseDpQLngseTpQLnksdzpQLncsaDpQLmh9KX1oYW5kbGVSZXNpemVNb3ZlPUI9PntpZighdGhpcy5yZXNpemVTdGF0ZSlyZXR1cm47bGV0IFA9dGhpcy5lbnN1cmVNZXRyaWNzKCksSj10aGlzLndpZGdldHMsZmU9Si5maW5kKGhlPT5oZS5pZD09PXRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpO2lmKCFmZSlyZXR1cm47Qi5wcmV2ZW50RGVmYXVsdCgpO2xldCBkZT11YnQoe3BvaW50ZXI6e2NsaWVudFg6Qi5jbGllbnRYLGNsaWVudFk6Qi5jbGllbnRZfSxjb250YWluZXJSZWN0OnRoaXMuY29udGFpbmVyQm91bmRzPz90aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG1ldHJpY3M6UCxzdGFydFdpZHRoOnRoaXMucmVzaXplU3RhdGUuc3RhcnRXaWR0aCxzdGFydEhlaWdodDp0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0SGVpZ2h0LHN0YXJ0UG9pbnRlcjp0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlcixoYW5kbGVyOnRoaXMucmVzaXplU3RhdGUuaGFuZGxlcix3aWRnZXQ6ZmUsY29sdW1uczp0aGlzLmNvbHVtbnN9KSxfZT14byhKLGZlLmlkLHt4OmZlLngseTpmZS55LHc6ZGUud2lkdGgsaDpkZS5oZWlnaHR9LHRoaXMuY29sdW1ucyx0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0KTtpZihfZSl7dGhpcy5yZXNpemVTdGF0ZT17Li4udGhpcy5yZXNpemVTdGF0ZSxsYXN0UGxhY2VtZW50Ol9lfSx0aGlzLnByZXZpZXdXaWRnZXRzPV9lLndpZGdldHM7bGV0IGhlPV9lLndpZGdldHMuZmluZCh0ZT0+dGUuaWQ9PT1mZS5pZCk7aGU/dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPXtpZDpoZS5pZCx4OmhlLngseTpoZS55LHc6aGUudyxoOmhlLmh9OnRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj17aWQ6ZmUuaWQseDpmZS54LHk6ZmUueSx3OmRlLndpZHRoLGg6ZGUuaGVpZ2h0fX1lbHNlIHRoaXMucHJldmlld1dpZGdldHM9bnVsbCx0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb249bnVsbDt0aGlzLnJlcXVlc3RVcGRhdGUoKX07aGFuZGxlUmVzaXplRW5kPUI9PntsZXQgUD10aGlzLnJlc2l6ZVN0YXRlO2lmKCFQfHxCLnBvaW50ZXJJZCE9PVAucG9pbnRlcklkKXJldHVybjtsZXQgSj10aGlzLndpZGdldHM7dGhpcy5wcmV2aWV3V2lkZ2V0cz1udWxsO2xldCBmZT1QLmxhc3RQbGFjZW1lbnQ/P3hvKEosUC53aWRnZXRJZCx7eDp0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/Lng/P1Auc3RhcnQueCx5OnRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueT8/UC5zdGFydC55LHc6dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPy53Pz9QLnN0YXJ0LncsaDp0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/Lmg/P1Auc3RhcnQuaH0sdGhpcy5jb2x1bW5zLFAuc3RhcnQpO2ZlP3RoaXMuY29tbWl0UGxhY2VtZW50KGZlLFAud2lkZ2V0SWQsIndpZGdldC1yZXNpemUiKTp0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLm1hcChkZT0+ZGUuaWQ9PT1QLndpZGdldElkP3suLi5kZSx3OlAuc3RhcnQudyxoOlAuc3RhcnQuaH06ZGUpLHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj1udWxsLHRoaXMucmVzaXplU3RhdGU9bnVsbCx0aGlzLmludGVyYWN0aW9uQWN0aXZlPSExLHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKX07aGFuZGxlSGVhZGVyS2V5ZG93bihCLFApe2lmKCF0aGlzLmVkaXRhYmxlfHxQLm5vTW92ZXx8UC5sb2NrZWQpcmV0dXJuO2xldCBKPUIua2V5LGZlPUIuc2hpZnRLZXksZGU9bnVsbDtpZihmZSYmWyJBcnJvd0xlZnQiLCJBcnJvd1JpZ2h0IiwiQXJyb3dVcCIsIkFycm93RG93biJdLmluY2x1ZGVzKEopKXtCLnByZXZlbnREZWZhdWx0KCk7bGV0IEZlPUo9PT0iQXJyb3dSaWdodCJ8fEo9PT0iQXJyb3dEb3duIj8xOi0xO2lmKEo9PT0iQXJyb3dMZWZ0Inx8Sj09PSJBcnJvd1JpZ2h0Iil7bGV0IEdlPVAubWF4Vz8/dGhpcy5jb2x1bW5zLVAueCx5ZT1NYXRoLm1heChQLm1pblc/PzEsTWF0aC5taW4oR2UsUC53K0ZlKSk7ZGU9eG8odGhpcy53aWRnZXRzLFAuaWQse3g6UC54LHk6UC55LHc6eWUsaDpQLmh9LHRoaXMuY29sdW1ucyl9ZWxzZXtsZXQgR2U9UC5tYXhIPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseWU9TWF0aC5tYXgoUC5taW5IPz8xLE1hdGgubWluKEdlLFAuaCtGZSkpO2RlPXhvKHRoaXMud2lkZ2V0cyxQLmlkLHt4OlAueCx5OlAueSx3OlAudyxoOnllfSx0aGlzLmNvbHVtbnMpfWRlJiZ0aGlzLmNvbW1pdFBsYWNlbWVudChkZSxQLmlkLCJ3aWRnZXQtcmVzaXplIik7cmV0dXJufWxldCBoZT17QXJyb3dMZWZ0OntkeDotMSxkeTowfSxBcnJvd1JpZ2h0OntkeDoxLGR5OjB9LEFycm93VXA6e2R4OjAsZHk6LTF9LEFycm93RG93bjp7ZHg6MCxkeToxfX1bSl07aWYoIWhlKXJldHVybjtCLnByZXZlbnREZWZhdWx0KCk7bGV0IHRlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5jb2x1bW5zLVAudyxQLngraGUuZHgpKSx6ZT1NYXRoLm1heCgwLFAueStoZS5keSk7ZGU9eG8odGhpcy53aWRnZXRzLFAuaWQse3g6dGUseTp6ZX0sdGhpcy5jb2x1bW5zKSxkZSYmdGhpcy5jb21taXRQbGFjZW1lbnQoZGUsUC5pZCwid2lkZ2V0LW1vdmUiKX1oYW5kbGVXaWRnZXRDb250ZXh0TWVudShCLFApe0IucHJldmVudERlZmF1bHQoKSxCLnN0b3BQcm9wYWdhdGlvbigpLG1idCh7d2lkZ2V0OlAsaG9zdDp0aGlzLGV2ZW50OkJ9KX1jb21taXRQbGFjZW1lbnQoQixQLEope3RoaXMucHJldmlld1dpZGdldHM9bnVsbCx0aGlzLndpZGdldHM9Qi53aWRnZXRzO2xldCBmZT10aGlzLndpZGdldHMuZmluZChkZT0+ZGUuaWQ9PT1QKTtmZSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChKLHtkZXRhaWw6e3dpZGdldDpmZSxkaXNwbGFjZWQ6Qi5tb3ZlZFdpZGdldHMuZmlsdGVyKGRlPT5kZSE9PVApLHN3YXBwZWRXaXRoOkIuc3dhcHBlZFdpdGh9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9cmVtb3ZlV2lkZ2V0KEIpe2xldCBQPXRoaXMud2lkZ2V0cy5maW5kKEo9PkouaWQ9PT1CKTtQJiYodGhpcy53aWRnZXRzPXRoaXMud2lkZ2V0cy5maWx0ZXIoSj0+Si5pZCE9PUIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIndpZGdldC1yZW1vdmUiLHtkZXRhaWw6e3dpZGdldDpQfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKX11cGRhdGVXaWRnZXQoQixQKXt0aGlzLndpZGdldHM9dGhpcy53aWRnZXRzLm1hcChKPT5KLmlkPT09Qj97Li4uSiwuLi5QfTpKKX1nZXRMYXlvdXQoKXtyZXR1cm4gdGhpcy53aWRnZXRzLm1hcCgoe2lkOkIseDpQLHk6Six3OmZlLGg6ZGV9KT0+KHtpZDpCLHg6UCx5OkosdzpmZSxoOmRlfSkpfXNldExheW91dChCKXt0aGlzLndpZGdldHM9ZGJ0KHRoaXMud2lkZ2V0cyxCKX1sb2NrR3JpZCgpe3RoaXMuZWRpdGFibGU9ITF9dW5sb2NrR3JpZCgpe3RoaXMuZWRpdGFibGU9ITB9YWRkV2lkZ2V0KEIsUD0hMSl7bGV0IEo9ey4uLkJ9O2lmKFB8fEouYXV0b1Bvc2l0aW9uKXtsZXQgZmU9T1YodGhpcy53aWRnZXRzLEoudyxKLmgsdGhpcy5jb2x1bW5zKTtKLng9ZmUueCxKLnk9ZmUueX10aGlzLndpZGdldHM9Wy4uLnRoaXMud2lkZ2V0cyxKXX1jb21wYWN0KEI9InZlcnRpY2FsIil7bGV0IFA9dGhpcy53aWRnZXRzLm1hcChKPT4oey4uLkp9KSk7Y2J0KFAsQiksdGhpcy53aWRnZXRzPVB9YXBwbHlCcmVha3BvaW50TGF5b3V0KEIpe3RoaXMuYWN0aXZlQnJlYWtwb2ludD1CO2xldCBQPXRoaXMubGF5b3V0cz8uW0JdO1AmJnRoaXMuc2V0TGF5b3V0KFApfW5vdGlmeUxheW91dENoYW5nZSgpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLHtkZXRhaWw6e2xheW91dDp0aGlzLmdldExheW91dCgpfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWVuc3VyZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy5tZXRyaWNzfHx0aGlzLmNvbXB1dGVNZXRyaWNzKCksdGhpcy5tZXRyaWNzfWNvbXB1dGVNZXRyaWNzKCl7aWYoIXRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuO2xldCBCPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5jb250YWluZXJCb3VuZHM9QjtsZXQgUD1GVih0aGlzLm1hcmdpbik7dGhpcy5yZXNvbHZlZE1hcmdpbnM9UCx0aGlzLm1ldHJpY3M9b2J0KEIud2lkdGgsdGhpcy5jb2x1bW5zLFAsdGhpcy5jZWxsSGVpZ2h0LHRoaXMuY2VsbEhlaWdodFVuaXQpfW9ic2VydmVSZXNpemUoKXt0aGlzLnJlc2l6ZU9ic2VydmVyfHwodGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLmNvbXB1dGVNZXRyaWNzKCl9KSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcykpfWRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpe3RoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPXZvaWQgMH1yZWxlYXNlUG9pbnRlckV2ZW50cygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix0aGlzLmhhbmRsZURyYWdNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLHRoaXMuaGFuZGxlRHJhZ0VuZCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHRoaXMuaGFuZGxlUmVzaXplTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIix0aGlzLmhhbmRsZVJlc2l6ZUVuZCl9cHhUb1BlcmNlbnQoQixQKXtyZXR1cm4gUD9OdW1iZXIoKEIvUCoxMDApLnRvRml4ZWQoNCkpOjB9Y29tcHV0ZVdpZGdldFJlY3QoQixQLEope2xldCBmZT1QLmNlbGxXaWR0aFB4LGRlPVAuY2VsbEhlaWdodFB4LF9lPUIueCooZmUrSi5ob3Jpem9udGFsKStKLmhvcml6b250YWwsaGU9Qi55KihkZStKLnZlcnRpY2FsKStKLnZlcnRpY2FsLHRlPUIudypmZStNYXRoLm1heCgwLEIudy0xKSpKLmhvcml6b250YWwsemU9Qi5oKmRlK01hdGgubWF4KDAsQi5oLTEpKkoudmVydGljYWw7cmV0dXJue2xlZnQ6X2UsdG9wOmhlLHdpZHRoOnRlLGhlaWdodDp6ZX19c3RhdGlje1l0KGksYSl9fTtyZXR1cm4gJGU9aX0pKCl9KTt2YXIgeWJ0PWIoKCk9Pnt2YnQoKX0pO2Z1bmN0aW9uIHhidCgpe3JldHVybiB3YAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGB9dmFyIHdidD1iKCgpPT57dWUoKX0pO3ZhciBNYnQsUlYsemJ0LGtidD1iKCgpPT57dWUoKTt3YnQoKTtwYSgpO1ZlKCk7TWJ0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sUlY9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LHpidD0oKCk9PntsZXQgdD1bcGUoImRlZXMtaGVhZGluZyIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZyxyZWZsZWN0OiEwfSldLE1idCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxldmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4ibGV2ZWwiaW4gcCxnZXQ6cD0+cC5sZXZlbCxzZXQ6KHAsbCk9PntwLmxldmVsPWx9fSxtZXRhZGF0YTpjfSxuLG8pLE1idChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPXhidDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkxheW91dCJdOyNlPVJWKHRoaXMsbiwiMSIpO2dldCBsZXZlbCgpe3JldHVybiB0aGlzLiNlfXNldCBsZXZlbChjKXt0aGlzLiNlPWN9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIEhlYWRpbmcgc3R5bGVzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbjogMTZweCAwIDhweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMCIsIiNmZmYiKX07CiAgICAgIH0KICAgICAgaDEgeyBmb250LXNpemU6IDMycHg7IGZvbnQtZmFtaWx5OiAke1I5dH07IGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO30KICAgICAgaDIgeyBmb250LXNpemU6IDI4cHg7IH0KICAgICAgaDMgeyBmb250LXNpemU6IDI0cHg7IH0KICAgICAgaDQgeyBmb250LXNpemU6IDIwcHg7IH0KICAgICAgaDUgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgaDYgeyBmb250LXNpemU6IDE0cHg7IH0KICAgICAgLyogSG9yaXpvbnRhbCBydWxlIHN0eWxlIGhlYWRpbmcgKi8KICAgICAgLmhlYWRpbmctaHIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICAvKiBGYWRlIGxpbmVzIHRvd2FyZCBhbmQgYXdheSBmcm9tIHRleHQgZm9yIGhyIHN0eWxlICovCiAgICAgIC5oZWFkaW5nLWhyOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgLyogZmFkZSBpbiB0b3dhcmQgY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsICNjY2MpIiwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgIzMzMykiKX07CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgfQogICAgICAuaGVhZGluZy1ocjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgLyogZmFkZSBvdXQgYXdheSBmcm9tIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNjY2MsIHRyYW5zcGFyZW50KSIsImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMzMywgdHJhbnNwYXJlbnQpIil9OwogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgICAgLyogU21hbGwgaHIgdmFyaWFudCB3aXRoIHJlZHVjZWQgbWFyZ2lucyAqLwogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjpiZWZvcmUsCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmFmdGVyIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtzd2l0Y2godGhpcy5sZXZlbCl7Y2FzZSIxIjpyZXR1cm4gd2A8aDE+PHNsb3Q+PC9zbG90PjwvaDE+YDtjYXNlIjIiOnJldHVybiB3YDxoMj48c2xvdD48L3Nsb3Q+PC9oMj5gO2Nhc2UiMyI6cmV0dXJuIHdgPGgzPjxzbG90Pjwvc2xvdD48L2gzPmA7Y2FzZSI0IjpyZXR1cm4gd2A8aDQ+PHNsb3Q+PC9zbG90PjwvaDQ+YDtjYXNlIjUiOnJldHVybiB3YDxoNT48c2xvdD48L3Nsb3Q+PC9oNT5gO2Nhc2UiNiI6cmV0dXJuIHdgPGg2PjxzbG90Pjwvc2xvdD48L2g2PmA7Y2FzZSJociI6cmV0dXJuIHdgPGRpdiBjbGFzcz0iaGVhZGluZy1ociI+PHNsb3Q+PC9zbG90PjwvZGl2PmA7Y2FzZSJoci1zbWFsbCI6cmV0dXJuIHdgPGRpdiBjbGFzcz0iaGVhZGluZy1ociBoZWFkaW5nLWhyLXNtYWxsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtkZWZhdWx0OnJldHVybiB3YDxoMT48c2xvdD48L3Nsb3Q+PC9oMT5gfX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksUlYodGhpcyxvKX1zdGF0aWN7UlYoaSxhKX19O3JldHVybiBkPWl9KSgpfSk7dmFyIFNidD1iKCgpPT57a2J0KCl9KTt2YXIgQ2J0PWIoKCk9PntBbCgpfSk7dmFyIF9idCxUYnQ9YigoKT0+e3VlKCk7X2J0PSgpPT53YAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTZweDsiPgogICAgPCEtLSBTbWFsbCBzZXQgb2YgcGFnZXMgLS0+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDRweDsiPgogICAgICA8c3Bhbj41IHBhZ2VzLCBzdGFydGluZyBhdCAxOjwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezV9CiAgICAgICAgLnBhZ2U9JHsxfQogICAgICAgIEBwYWdlLWNoYW5nZT0ke3Q9PmNvbnNvbGUubG9nKCJQYWdlIGNoYW5nZWQgdG8iLHQuZGV0YWlsLnBhZ2UpfQogICAgICA+PC9kZWVzLXBhZ2luYXRpb24+CiAgICA8L2Rpdj4KCiAgICA8IS0tIExhcmdlciBzZXQgb2YgcGFnZXMgLS0+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDRweDsiPgogICAgICA8c3Bhbj4xNSBwYWdlcywgc3RhcnRpbmcgYXQgODo8L3NwYW4+CiAgICAgIDxkZWVzLXBhZ2luYXRpb24KICAgICAgICAudG90YWw9JHsxNX0KICAgICAgICAucGFnZT0kezh9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7dD0+Y29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsdC5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgogIDwvZGl2PgpgfSk7dmFyIEJWLFo4LExidCwkYnQ9YigoKT0+e3VlKCk7VGJ0KCk7VmUoKTtCVj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFo4PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxMYnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXBhZ2luYXRpb24iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXTt2YXIgbD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGY9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpOdW1iZXIscmVmbGVjdDohMH0pXSxkPVtJKHt0eXBlOk51bWJlcixyZWZsZWN0OiEwfSldLEJWKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGFnZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InBhZ2UiaW4gZyxnZXQ6Zz0+Zy5wYWdlLHNldDooZyx5KT0+e2cucGFnZT15fX0sbWV0YWRhdGE6Zn0sbixvKSxCVih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRvdGFsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4idG90YWwiaW4gZyxnZXQ6Zz0+Zy50b3RhbCxzZXQ6KGcseSk9PntnLnRvdGFsPXl9fSxtZXRhZGF0YTpmfSxjLHApLEJWKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmZ9LG51bGwsYSksbD1pPWUudmFsdWUsZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9c3RhdGljIGRlbW89X2J0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTGF5b3V0Il07I2U9WjgodGhpcyxuLDEpO2dldCBwYWdlKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHBhZ2UoZil7dGhpcy4jZT1mfSN0PShaOCh0aGlzLG8pLFo4KHRoaXMsYywxKSk7Z2V0IHRvdGFsKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRvdGFsKGYpe3RoaXMuI3Q9Zn1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBtYXJnaW46IDAgMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlZWUiLCIjNDQ0Iil9OwogICAgICB9CiAgICAgIGJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2FhYSIsIiM2NjYiKX07CiAgICAgIH0KICAgICAgYnV0dG9uLmN1cnJlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICMwMDUwYjk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CiAgICAgIHNwYW4uZWxsaXBzaXMgewogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2NjYyIpfTsKICAgICAgfQogICAgYF07Z2V0IHBhZ2VzKCl7bGV0IGY9W10sZz10aGlzLnRvdGFsLHk9dGhpcy5wYWdlO2lmKGc8PTcpZm9yKGxldCB2PTE7djw9Zzt2KyspZi5wdXNoKHYpO2Vsc2V7Zi5wdXNoKDEpLHk+NCYmZi5wdXNoKCIuLi4iKTtsZXQgdj1NYXRoLm1heCgyLHktMiksbT1NYXRoLm1pbihnLTEseSsyKTtmb3IobGV0IHg9djt4PD1tO3grKylmLnB1c2goeCk7eTxnLTMmJmYucHVzaCgiLi4uIiksZi5wdXNoKGcpfXJldHVybiBmfXJlbmRlcigpe3JldHVybiB3YAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UtMSl9CiAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlPD0xfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoZj0+Zj09PSIuLi4iP3dgPHNwYW4gY2xhc3M9ImVsbGlwc2lzIj7igKY8L3NwYW4+YDp3YAogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSIke2Y9PT10aGlzLnBhZ2U/ImN1cnJlbnQiOiIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLmNoYW5nZVBhZ2UoZil9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtmPT09dGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke2Z9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7Zn0KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgIDxidXR0b24KICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSsxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2U+PXRoaXMudG90YWx9CiAgICAgICAgYXJpYS1sYWJlbD0iTmV4dCBwYWdlIgogICAgICA+CiAgICAgICAg4oC6CiAgICAgIDwvYnV0dG9uPgogICAgYH1jaGFuZ2VQYWdlKGYpe2Y8MXx8Zj50aGlzLnRvdGFsfHxmPT09dGhpcy5wYWdlfHwodGhpcy5wYWdlPWYsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLHtkZXRhaWw6e3BhZ2U6dGhpcy5wYWdlfSxidWJibGVzOiEwfSkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksWjgodGhpcyxwKX1zdGF0aWN7WjgoaSxhKX19O3JldHVybiBsPWl9KSgpfSk7dmFyIEFidD1iKCgpPT57JGJ0KCl9KTt2YXIgRGJ0PWIoKCk9PntnMigpfSk7dmFyIEVidCxQYnQ9YigoKT0+e3VlKCk7RWJ0PSgpPT53YAogIDxkZWVzLXN0ZXBwZXIKICAgIC5zdGVwcz0ke1t7dGl0bGU6IkFjY291bnQgU2V0dXAiLGNvbnRlbnQ6d2AKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJlbWFpbCIgbGFiZWw9IldvcmsgRW1haWwiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJDcmVhdGUgUGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJQcm9maWxlIERldGFpbHMiLGNvbnRlbnQ6d2AKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJDb250YWN0IEluZm9ybWF0aW9uIixjb250ZW50OndgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSBrZXk9InBob25lIiBsYWJlbD0iTW9iaWxlIE51bWJlciIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iY29tcGFueSIgbGFiZWw9IkNvbXBhbnkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsdmFsaWRhdGlvbkZ1bmM6YXN5bmModCxlKT0+e2UucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIikuYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCgpPT50LmdvTmV4dCgpLHtvbmNlOiEwfSl9fSx7dGl0bGU6IlRlYW0gU2l6ZSIsY29udGVudDp3YAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRlYW1TaXplIgogICAgICAgICAgICAgIGxhYmVsPSJIb3cgYmlnIGlzIHlvdXIgdGVhbT8iCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbe2xhYmVsOiIxLTUiLHZhbHVlOiIxLTUifSx7bGFiZWw6IjYtMjAiLHZhbHVlOiI2LTIwIn0se2xhYmVsOiIyMS01MCIsdmFsdWU6IjIxLTUwIn0se2xhYmVsOiI1MSsiLHZhbHVlOiI1MSsifV19CiAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJHb2FscyIsY29udGVudDp3YAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgICBrZXk9ImdvYWwiCiAgICAgICAgICAgICAgbGFiZWw9Ik1haW4gb2JqZWN0aXZlIgogICAgICAgICAgICAgIC5vcHRpb25zPSR7W3tsYWJlbDoiT25ib2FyZGluZyIsdmFsdWU6Im9uYm9hcmRpbmcifSx7bGFiZWw6IkFuYWx5dGljcyIsdmFsdWU6ImFuYWx5dGljcyJ9LHtsYWJlbDoiQXV0b21hdGlvbiIsdmFsdWU6ImF1dG9tYXRpb24ifV19CiAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLHZhbGlkYXRpb25GdW5jOmFzeW5jKHQsZSk9PntlLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwoKT0+dC5nb05leHQoKSx7b25jZTohMH0pfX0se3RpdGxlOiJCcmFuZCBQcmVmZXJlbmNlcyIsY29udGVudDp3YAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImJyYW5kQ29sb3IiIGxhYmVsPSJQcmltYXJ5IGJyYW5kIGNvbG9yIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InRvbmUiIGxhYmVsPSJQcmVmZXJyZWQgdG9uZSAoZS5nLiBmcmllbmRseSwgZm9ybWFsKSI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCx2YWxpZGF0aW9uRnVuYzphc3luYyh0LGUpPT57ZS5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsKCk9PnQuZ29OZXh0KCkse29uY2U6ITB9KX19LHt0aXRsZToiSW50ZWdyYXRpb25zIixjb250ZW50OndgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAga2V5PSJpbnRlZ3JhdGlvbnMiCiAgICAgICAgICAgICAgbGFiZWw9IkludGVncmF0aW9ucyBpbiB1c2UiCiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkFkZCBpbnRlZ3JhdGlvbiIKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsdmFsaWRhdGlvbkZ1bmM6YXN5bmModCxlKT0+e2UucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIikuYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCgpPT50LmdvTmV4dCgpLHtvbmNlOiEwfSl9fSx7dGl0bGU6IlJldmlldyAmIExhdW5jaCIsY29udGVudDp3YAogICAgICAgICAgPGRlZXMtcGFuZWw+CiAgICAgICAgICAgIDxwPkFsbW9zdCB0aGVyZSEgUmV2aWV3IHlvdXIgc2VsZWN0aW9ucyBhbmQgbGF1bmNoIHdoZW5ldmVyIHlvdSdyZSByZWFkeS48L3A+CiAgICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgYH1dfQogID48L2RlZXMtc3RlcHBlcj4KYH0pO3ZhciBIVixYOCxJYnQsTmJ0PWIoKCk9PntzMigpO3ZpKCk7dWUoKTtMdCgpO1BidCgpO1ZlKCk7SFY9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxYOD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sSWJ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1zdGVwcGVyIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W107dmFyIGw9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6QXJyYXl9KV0sZD1bSSh7dHlwZTpPYmplY3R9KV0sSFYodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzdGVwcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InN0ZXBzImluIGcsZ2V0Omc9Pmcuc3RlcHMsc2V0OihnLHkpPT57Zy5zdGVwcz15fX0sbWV0YWRhdGE6Zn0sbixvKSxIVih0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkU3RlcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+InNlbGVjdGVkU3RlcCJpbiBnLGdldDpnPT5nLnNlbGVjdGVkU3RlcCxzZXQ6KGcseSk9PntnLnNlbGVjdGVkU3RlcD15fX0sbWV0YWRhdGE6Zn0sYyxwKSxIVihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpmfSxudWxsLGEpLGw9aT1lLnZhbHVlLGYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Zn0pfXN0YXRpYyBkZW1vPUVidDtzdGF0aWMgZGVtb0dyb3Vwcz1bIkxheW91dCIsIkZvcm0iXTsjZT1YOCh0aGlzLG4sW10pO2dldCBzdGVwcygpe3JldHVybiB0aGlzLiNlfXNldCBzdGVwcyhmKXt0aGlzLiNlPWZ9I3Q9KFg4KHRoaXMsbyksWDgodGhpcyxjLHZvaWQgMCkpO2dldCBzZWxlY3RlZFN0ZXAoKXtyZXR1cm4gdGhpcy4jdH1zZXQgc2VsZWN0ZWRTdGVwKGYpe3RoaXMuI3Q9Zn1jb25zdHJ1Y3Rvcigpe3N1cGVyKCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwZjBmMTEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlMmU4ZjAiLCIjMjcyNzI5Iil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzBmMTcyYSIsIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2NDc0OGIiLCIjYTFhMWFhIil9OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNDUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNykiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuODUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSkiLCJyZ2JhKDM5LCAzOSwgNDIsIDAuODUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzQ3NTU2OSIsIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzBmMTcyYSIsIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZShiaS5ibHVlLGJpLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsInJnYmEoNjMsIDYzLCA3MCwgMC43KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6YWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwZjE3MmEiLCIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoYmkuYmx1ZUFjdGl2ZSxiaS5ibHVlQWN0aXZlKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC44NSkiLCJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgc3BhbiB7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgc3BhbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAudGl0bGUgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXRvcDogNjRweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgogICAgICAuc3RlcCAuY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQogICAgYF07cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoZj0+d2A8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9InN0ZXAgJHtmPT09dGhpcy5zZWxlY3RlZFN0ZXA/InNlbGVjdGVkIjpudWxsfSAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoZik+dGhpcy5nZXRJbmRleE9mU3RlcCh0aGlzLnNlbGVjdGVkU3RlcCk/ImhpZGRlblN0ZXAiOiIifSAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoZik9PT0wPyJlbnRyYW5jZSI6IiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHt0aGlzLmdldEluZGV4T2ZTdGVwKGYpPjA/d2A8ZGl2IGNsYXNzPSJnb0JhY2siIEBjbGljaz0ke3RoaXMuZ29CYWNrfT48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEludGVyIj48LTwvc3Bhbj4gZ28gdG8gcHJldmlvdXMgc3RlcDwvZGl2PmA6IiJ9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KGc9Pmc9PT1mKSsxfSBvZgogICAgICAgICAgICAgICAgJHt0aGlzLnN0ZXBzLmxlbmd0aH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+JHtmLnRpdGxlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPiR7Zi5jb250ZW50fTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4gYCl9CiAgICAgIDwvZGl2PgogICAgYH1nZXRJbmRleE9mU3RlcD0oWDgodGhpcyxwKSxmPT50aGlzLnN0ZXBzLmZpbmRJbmRleChnPT5mPT09ZykpO2FzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKSx0aGlzLnNlbGVjdGVkU3RlcD10aGlzLnN0ZXBzWzBdLHRoaXMuc2V0U2Nyb2xsU3RhdHVzKCksYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwLmVudHJhbmNlIik/LmNsYXNzTGlzdC5yZW1vdmUoImVudHJhbmNlIil9YXN5bmMgdXBkYXRlZCgpe3RoaXMuc2V0U2Nyb2xsU3RhdHVzKCl9c2Nyb2xsZXI7YXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCl7bGV0IGY9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIiksZz10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKSx5PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTtpZigheSlyZXR1cm47Zi5zdHlsZS5wYWRkaW5nVG9wfHwoZi5zdHlsZS5wYWRkaW5nVG9wPWAke2Yub2Zmc2V0SGVpZ2h0LzIteS5vZmZzZXRIZWlnaHQvMn1weGApLGNvbnNvbGUubG9nKCJTZXR0aW5nIHNjcm9sbCBzdGF0dXMiKSxjb25zb2xlLmxvZyh5KTtsZXQgdj15Lm9mZnNldFRvcC1mLm9mZnNldEhlaWdodC8yK3kub2Zmc2V0SGVpZ2h0LzI7Y29uc29sZS5sb2codik7bGV0IG09YXdhaXQgWTIuc2V0dXBEb21Ub29scygpO3RoaXMuc2Nyb2xsZXJ8fCh0aGlzLnNjcm9sbGVyPW5ldyB6dC5Td2VldFNjcm9sbCh7dmVydGljYWw6ITAsaG9yaXpvbnRhbDohMSxlYXNpbmc6ImVhc2VJbk91dEV4cG8iLGR1cmF0aW9uOjcwMH0sZikpLCF0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCYmdGhpcy5zZWxlY3RlZFN0ZXAudmFsaWRhdGlvbkZ1bmMmJih0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcix0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMCxhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLHksdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyLnNpZ25hbCkpLHRoaXMuc2Nyb2xsZXIudG8odil9YXN5bmMgZ29CYWNrKCl7bGV0IGY9dGhpcy5zdGVwcy5maW5kSW5kZXgodj0+dj09PXRoaXMuc2VsZWN0ZWRTdGVwKTtpZihmPD0wKXJldHVybjt0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXImJnRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO2xldCBnPXRoaXMuc3RlcHNbZl07Zy52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMTtsZXQgeT10aGlzLnN0ZXBzW2YtMV07eS52YWxpZGF0aW9uRnVuY0NhbGxlZD0hMSx0aGlzLnNlbGVjdGVkU3RlcD15LGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlLGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMDApLHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZCIpKX1nb05leHQoKXtsZXQgZj10aGlzLnN0ZXBzLmZpbmRJbmRleCh2PT52PT09dGhpcy5zZWxlY3RlZFN0ZXApO2lmKGY8MHx8Zj49dGhpcy5zdGVwcy5sZW5ndGgtMSlyZXR1cm47dGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyJiZ0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtsZXQgZz10aGlzLnN0ZXBzW2ZdO2cudmFsaWRhdGlvbkZ1bmNDYWxsZWQ9ITE7bGV0IHk9dGhpcy5zdGVwc1tmKzFdO3kudmFsaWRhdGlvbkZ1bmNDYWxsZWQ9ITEsdGhpcy5zZWxlY3RlZFN0ZXA9eX1zdGF0aWN7WDgoaSxhKX19O3JldHVybiBsPWl9KSgpfSk7dmFyIEZidD1iKCgpPT57TmJ0KCl9KTt2YXIgT2J0PWIoKCk9PntlYnQoKTt5YnQoKTtTYnQoKTtDYnQoKTtBYnQoKTtEYnQoKTtGYnQoKX0pO3ZhciBSYnQsQmJ0PWIoKCk9Pnt1ZSgpO1JidD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y4ZjlmYSIsIiMwYTBhMGEiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgIH0KCiAgICAuc2VjdGlvbiB7CiAgICAgIG1heC13aWR0aDogOTAwcHg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQoKICAgIGRlZXMtaW1hZ2Utdmlld2VyIHsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLmNvbXBhY3QgewogICAgICBoZWlnaHQ6IDI1MHB4OwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5KUEVHIEltYWdlIHdpdGggVG9vbGJhcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGxhbmRzY2FwZSBwaG90byB3aXRoIHpvb20sIHBhbiwgZml0LCBhbmQgZG93bmxvYWQgY29udHJvbHMuPC9kaXY+CiAgICAgIDxkZWVzLWltYWdlLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE1MDY3NDQwMzgxMzYtNDYyNzM4MzRiM2ZiP3c9MTIwMCIKICAgICAgICBhbHQ9Ik1vdW50YWluIGxhbmRzY2FwZSIKICAgICAgPjwvZGVlcy1pbWFnZS12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UE5HIHdpdGggVHJhbnNwYXJlbmN5PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlRyYW5zcGFyZW50IFBORyBkaXNwbGF5ZWQgb24gYSBjaGVja2VyYm9hcmQgYmFja2dyb3VuZC48L2Rpdj4KICAgICAgPGRlZXMtaW1hZ2Utdmlld2VyCiAgICAgICAgc3JjPSJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzQvNDcvUE5HX3RyYW5zcGFyZW5jeV9kZW1vbnN0cmF0aW9uXzEucG5nIgogICAgICAgIGFsdD0iUE5HIHRyYW5zcGFyZW5jeSBkZW1vIgogICAgICA+PC9kZWVzLWltYWdlLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TVkcgSW1hZ2U8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2NhbGFibGUgdmVjdG9yIGdyYXBoaWMuPC9kaXY+CiAgICAgIDxkZWVzLWltYWdlLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy8wLzAyL1NWR19sb2dvLnN2ZyIKICAgICAgICBhbHQ9IlNWRyBsb2dvIgogICAgICAgIGZpdD0iY29udGFpbiIKICAgICAgPjwvZGVlcy1pbWFnZS12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Tm8gVG9vbGJhciBWYXJpYW50PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkltYWdlIHZpZXdlciB3aXRoIHRoZSB0b29sYmFyIGhpZGRlbi48L2Rpdj4KICAgICAgPGRlZXMtaW1hZ2Utdmlld2VyCiAgICAgICAgY2xhc3M9ImNvbXBhY3QiCiAgICAgICAgc3JjPSJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2OTQ3NDk2ODAyOC01NjYyM2YwMmU0MmU/dz04MDAiCiAgICAgICAgYWx0PSJOYXR1cmUgc2NlbmUiCiAgICAgICAgLnNob3dUb29sYmFyPSR7ITF9CiAgICAgID48L2RlZXMtaW1hZ2Utdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgWGEsejEsSGJ0LHFWPWIoKCk9Pnt1ZSgpO0V0KCk7QmJ0KCk7WGE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx6MT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sSGJ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1pbWFnZS12aWV3ZXIiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXSxyZSxqPVtdLG1lPVtdLHdlLEg9W10sY2U9W107dmFyIGtlPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgVz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLGQ9W0koKV0sbD1bSSgpXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSygpXSxGPVtLKCldLE49W0soKV0scT1bSygpXSxFPVtLKCldLFY9W0soKV0scmU9W0soKV0sd2U9W0soKV0sWGEodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzcmMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJzcmMiaW4gRCxnZXQ6RD0+RC5zcmMsc2V0OihELE8pPT57RC5zcmM9T319LG1ldGFkYXRhOld9LG4sbyksWGEodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhbHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJhbHQiaW4gRCxnZXQ6RD0+RC5hbHQsc2V0OihELE8pPT57RC5hbHQ9T319LG1ldGFkYXRhOld9LGMscCksWGEodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaXQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJmaXQiaW4gRCxnZXQ6RD0+RC5maXQsc2V0OihELE8pPT57RC5maXQ9T319LG1ldGFkYXRhOld9LGYsZyksWGEodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93VG9vbGJhciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InNob3dUb29sYmFyImluIEQsZ2V0OkQ9PkQuc2hvd1Rvb2xiYXIsc2V0OihELE8pPT57RC5zaG93VG9vbGJhcj1PfX0sbWV0YWRhdGE6V30sdixtKSxYYSh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Inpvb20iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJ6b29tImluIEQsZ2V0OkQ9PkQuem9vbSxzZXQ6KEQsTyk9PntELnpvb209T319LG1ldGFkYXRhOld9LE0sUyksWGEodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYW5YIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4icGFuWCJpbiBELGdldDpEPT5ELnBhblgsc2V0OihELE8pPT57RC5wYW5YPU99fSxtZXRhZGF0YTpXfSxfLGspLFhhKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGFuWSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InBhblkiaW4gRCxnZXQ6RD0+RC5wYW5ZLHNldDooRCxPKT0+e0QucGFuWT1PfX0sbWV0YWRhdGE6V30sTCxBKSxYYSh0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzRHJhZ2dpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJpc0RyYWdnaW5nImluIEQsZ2V0OkQ9PkQuaXNEcmFnZ2luZyxzZXQ6KEQsTyk9PntELmlzRHJhZ2dpbmc9T319LG1ldGFkYXRhOld9LEMseiksWGEodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4ibG9hZGluZyJpbiBELGdldDpEPT5ELmxvYWRpbmcsc2V0OihELE8pPT57RC5sb2FkaW5nPU99fSxtZXRhZGF0YTpXfSxULCQpLFhhKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXJyb3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJlcnJvciJpbiBELGdldDpEPT5ELmVycm9yLHNldDooRCxPKT0+e0QuZXJyb3I9T319LG1ldGFkYXRhOld9LFIsVSksWGEodGhpcyxudWxsLHJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW1hZ2VOYXR1cmFsV2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJpbWFnZU5hdHVyYWxXaWR0aCJpbiBELGdldDpEPT5ELmltYWdlTmF0dXJhbFdpZHRoLHNldDooRCxPKT0+e0QuaW1hZ2VOYXR1cmFsV2lkdGg9T319LG1ldGFkYXRhOld9LGosbWUpLFhhKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImltYWdlTmF0dXJhbEhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+ImltYWdlTmF0dXJhbEhlaWdodCJpbiBELGdldDpEPT5ELmltYWdlTmF0dXJhbEhlaWdodCxzZXQ6KEQsTyk9PntELmltYWdlTmF0dXJhbEhlaWdodD1PfX0sbWV0YWRhdGE6V30sSCxjZSksWGEobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6V30sbnVsbCxhKSxrZT1pPWUudmFsdWUsVyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpXfSl9c3RhdGljIGRlbW89UmJ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiXTsjZT16MSh0aGlzLG4sIiIpO2dldCBzcmMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgc3JjKFcpe3RoaXMuI2U9V30jdD0oejEodGhpcyxvKSx6MSh0aGlzLGMsIiIpKTtnZXQgYWx0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IGFsdChXKXt0aGlzLiN0PVd9I2E9KHoxKHRoaXMscCksejEodGhpcyxmLCJjb250YWluIikpO2dldCBmaXQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgZml0KFcpe3RoaXMuI2E9V30jaT0oejEodGhpcyxnKSx6MSh0aGlzLHYsITApKTtnZXQgc2hvd1Rvb2xiYXIoKXtyZXR1cm4gdGhpcy4jaX1zZXQgc2hvd1Rvb2xiYXIoVyl7dGhpcy4jaT1XfSNyPSh6MSh0aGlzLG0pLHoxKHRoaXMsTSwxKSk7Z2V0IHpvb20oKXtyZXR1cm4gdGhpcy4jcn1zZXQgem9vbShXKXt0aGlzLiNyPVd9I3M9KHoxKHRoaXMsUyksejEodGhpcyxfLDApKTtnZXQgcGFuWCgpe3JldHVybiB0aGlzLiNzfXNldCBwYW5YKFcpe3RoaXMuI3M9V30jbj0oejEodGhpcyxrKSx6MSh0aGlzLEwsMCkpO2dldCBwYW5ZKCl7cmV0dXJuIHRoaXMuI259c2V0IHBhblkoVyl7dGhpcy4jbj1XfSNvPSh6MSh0aGlzLEEpLHoxKHRoaXMsQywhMSkpO2dldCBpc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuI299c2V0IGlzRHJhZ2dpbmcoVyl7dGhpcy4jbz1XfSNsPSh6MSh0aGlzLHopLHoxKHRoaXMsVCwhMCkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2x9c2V0IGxvYWRpbmcoVyl7dGhpcy4jbD1XfSNjPSh6MSh0aGlzLCQpLHoxKHRoaXMsUiwiIikpO2dldCBlcnJvcigpe3JldHVybiB0aGlzLiNjfXNldCBlcnJvcihXKXt0aGlzLiNjPVd9I2Q9KHoxKHRoaXMsVSksejEodGhpcyxqLDApKTtnZXQgaW1hZ2VOYXR1cmFsV2lkdGgoKXtyZXR1cm4gdGhpcy4jZH1zZXQgaW1hZ2VOYXR1cmFsV2lkdGgoVyl7dGhpcy4jZD1XfSNwPSh6MSh0aGlzLG1lKSx6MSh0aGlzLEgsMCkpO2dldCBpbWFnZU5hdHVyYWxIZWlnaHQoKXtyZXR1cm4gdGhpcy4jcH1zZXQgaW1hZ2VOYXR1cmFsSGVpZ2h0KFcpe3RoaXMuI3A9V31kcmFnU3RhcnRYPSh6MSh0aGlzLGNlKSwwKTtkcmFnU3RhcnRZPTA7ZHJhZ1N0YXJ0UGFuWD0wO2RyYWdTdGFydFBhblk9MDtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLnZpZXdlci1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsImhzbCgyMTUgMjAlIDEwJSkiKX07CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDRweDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1idXR0b246YWN0aXZlIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICB9CgogICAgICAgIC56b29tLWxldmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLmltYWdlLWFyZWEgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICBjdXJzb3I6ICR7dGhpcy56b29tPjE/dGhpcy5pc0RyYWdnaW5nPyJncmFiYmluZyI6ImdyYWIiOiJkZWZhdWx0In07CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tlcmJvYXJkIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgYmFja2dyb3VuZC1pbWFnZToKICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAke2guYmRUaGVtZSgiI2YwZjBmMCIsIiMxYTFhMWEiKX0gMjUlLCB0cmFuc3BhcmVudCAyNSUpLAogICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAke2guYmRUaGVtZSgiI2YwZjBmMCIsIiMxYTFhMWEiKX0gMjUlLCB0cmFuc3BhcmVudCAyNSUpLAogICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgJHtoLmJkVGhlbWUoIiNmMGYwZjAiLCIjMWExYTFhIil9IDc1JSksCiAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgJHtoLmJkVGhlbWUoIiNmMGYwZjAiLCIjMWExYTFhIil9IDc1JSk7CiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE2cHggMTZweDsKICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMCwgMCA4cHgsIDhweCAtOHB4LCAtOHB4IDBweDsKICAgICAgICAgIG9wYWNpdHk6IDAuMzsKICAgICAgICB9CgogICAgICAgIC5pbWFnZS13cmFwcGVyIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKCR7dGhpcy5wYW5YfXB4LCAke3RoaXMucGFuWX1weCkgc2NhbGUoJHt0aGlzLnpvb219KTsKICAgICAgICAgIHRyYW5zaXRpb246ICR7dGhpcy5pc0RyYWdnaW5nPyJub25lIjoidHJhbnNmb3JtIDAuMnMgZWFzZSJ9OwogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB9CgogICAgICAgIC5pbWFnZS13cmFwcGVyIGltZyB7CiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb2JqZWN0LWZpdDogJHt0aGlzLmZpdH07CiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIC13ZWJraXQtdXNlci1kcmFnOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLmltYWdlLXdyYXBwZXIgaW1nLmFjdHVhbCB7CiAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgICAgb2JqZWN0LWZpdDogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMC44KSIsInJnYmEoMCwwLDAsMC42KSIpfTsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzZjNmNDYiKX07CiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiM2MGE1ZmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgICAgfQoKICAgICAgICAuZXJyb3Itb3ZlcmxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM3MTcxN2EiLCIjYTFhMWFhIil9OwogICAgICAgIH0KCiAgICAgICAgLmVycm9yLW92ZXJsYXkgLmVycm9yLWljb24gewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjZGMyNjI2IiwiI2Y4NzE3MSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5lcnJvci10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CgogICAgICAgIC5pbWFnZS1pbmZvIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiI2ExYTFhYSIsIiM3MTcxN2EiKX07CiAgICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3ZXItY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuc2hvd1Rvb2xiYXI/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy56b29tT3V0fSB0aXRsZT0iWm9vbSBvdXQiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbU91dCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0ke3RoaXMucmVzZXRab29tfT4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ6b29tLWxldmVsIj4ke01hdGgucm91bmQodGhpcy56b29tKjEwMCl9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy56b29tSW59IHRpdGxlPSJab29tIGluIj4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlpvb21JbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5maXRUb1NjcmVlbn0gdGl0bGU9IkZpdCB0byBzY3JlZW4iPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6TWF4aW1pemUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmFjdHVhbFNpemV9IHRpdGxlPSJBY3R1YWwgc2l6ZSAoMTAwJSkiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6U2NhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5kb3dubG9hZH0gdGl0bGU9IkRvd25sb2FkIj4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5pbWFnZU5hdHVyYWxXaWR0aD4wP3dgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW1hZ2UtaW5mbyI+JHt0aGlzLmltYWdlTmF0dXJhbFdpZHRofSB4ICR7dGhpcy5pbWFnZU5hdHVyYWxIZWlnaHR9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOiIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImltYWdlLWFyZWEiCiAgICAgICAgICBAd2hlZWw9JHt0aGlzLmhhbmRsZVdoZWVsfQogICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlTW91c2VEb3dufQogICAgICAgICAgQG1vdXNlbW92ZT0ke3RoaXMuaGFuZGxlTW91c2VNb3ZlfQogICAgICAgICAgQG1vdXNldXA9JHt0aGlzLmhhbmRsZU1vdXNlVXB9CiAgICAgICAgICBAbW91c2VsZWF2ZT0ke3RoaXMuaGFuZGxlTW91c2VVcH0KICAgICAgICAgIEBkYmxjbGljaz0ke3RoaXMuaGFuZGxlRG91YmxlQ2xpY2t9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tlcmJvYXJkIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLXdyYXBwZXIiPgogICAgICAgICAgICAke3RoaXMuc3JjP3dgCiAgICAgICAgICAgICAgPGltZwogICAgICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5maXQ9PT0iYWN0dWFsIj8iYWN0dWFsIjoiIn0iCiAgICAgICAgICAgICAgICBzcmM9IiR7dGhpcy5zcmN9IgogICAgICAgICAgICAgICAgYWx0PSIke3RoaXMuYWx0fSIKICAgICAgICAgICAgICAgIEBsb2FkPSR7dGhpcy5oYW5kbGVJbWFnZUxvYWR9CiAgICAgICAgICAgICAgICBAZXJyb3I9JHt0aGlzLmhhbmRsZUltYWdlRXJyb3J9CiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9ImZhbHNlIgogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nJiZ0aGlzLnNyYz93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW92ZXJsYXkiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICAgICR7dGhpcy5lcnJvcj93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1vdmVybGF5Ij4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJsdWNpZGU6SW1hZ2VPZmYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvci10ZXh0Ij4ke3RoaXMuZXJyb3J9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH16b29tSW4oKXt0aGlzLnpvb209TWF0aC5taW4oMTAsdGhpcy56b29tKjEuMjUpfXpvb21PdXQoKXt0aGlzLnpvb209TWF0aC5tYXgoLjEsdGhpcy56b29tLzEuMjUpLHRoaXMuem9vbTw9MSYmKHRoaXMucGFuWD0wLHRoaXMucGFuWT0wKX1yZXNldFpvb20oKXt0aGlzLnpvb209MSx0aGlzLnBhblg9MCx0aGlzLnBhblk9MH1maXRUb1NjcmVlbigpe3RoaXMuem9vbT0xLHRoaXMucGFuWD0wLHRoaXMucGFuWT0wLHRoaXMuZml0PSJjb250YWluIn1hY3R1YWxTaXplKCl7dGhpcy56b29tPTEsdGhpcy5wYW5YPTAsdGhpcy5wYW5ZPTAsdGhpcy5maXQ9ImFjdHVhbCJ9ZG93bmxvYWQoKXtpZighdGhpcy5zcmMpcmV0dXJuO2xldCBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtXLmhyZWY9dGhpcy5zcmMsVy5kb3dubG9hZD10aGlzLnNyYy5zcGxpdCgiLyIpLnBvcCgpfHwiaW1hZ2UiLFcuY2xpY2soKX1oYW5kbGVJbWFnZUxvYWQoVyl7bGV0IEQ9Vy50YXJnZXQ7dGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3I9IiIsdGhpcy5pbWFnZU5hdHVyYWxXaWR0aD1ELm5hdHVyYWxXaWR0aCx0aGlzLmltYWdlTmF0dXJhbEhlaWdodD1ELm5hdHVyYWxIZWlnaHR9aGFuZGxlSW1hZ2VFcnJvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yPSJGYWlsZWQgdG8gbG9hZCBpbWFnZSJ9aGFuZGxlV2hlZWwoVyl7Vy5wcmV2ZW50RGVmYXVsdCgpO2xldCBEPVcuZGVsdGFZPjA/Ljk6MS4xLE89TWF0aC5taW4oMTAsTWF0aC5tYXgoLjEsdGhpcy56b29tKkQpKTt0aGlzLnpvb209Tyx0aGlzLnpvb208PTEmJih0aGlzLnBhblg9MCx0aGlzLnBhblk9MCl9aGFuZGxlTW91c2VEb3duKFcpe3RoaXMuem9vbTw9MXx8KHRoaXMuaXNEcmFnZ2luZz0hMCx0aGlzLmRyYWdTdGFydFg9Vy5jbGllbnRYLHRoaXMuZHJhZ1N0YXJ0WT1XLmNsaWVudFksdGhpcy5kcmFnU3RhcnRQYW5YPXRoaXMucGFuWCx0aGlzLmRyYWdTdGFydFBhblk9dGhpcy5wYW5ZKX1oYW5kbGVNb3VzZU1vdmUoVyl7dGhpcy5pc0RyYWdnaW5nJiYodGhpcy5wYW5YPXRoaXMuZHJhZ1N0YXJ0UGFuWCsoVy5jbGllbnRYLXRoaXMuZHJhZ1N0YXJ0WCksdGhpcy5wYW5ZPXRoaXMuZHJhZ1N0YXJ0UGFuWSsoVy5jbGllbnRZLXRoaXMuZHJhZ1N0YXJ0WSkpfWhhbmRsZU1vdXNlVXAoKXt0aGlzLmlzRHJhZ2dpbmc9ITF9aGFuZGxlRG91YmxlQ2xpY2soKXt0aGlzLnpvb209PT0xP3RoaXMuem9vbT0yOih0aGlzLnpvb209MSx0aGlzLnBhblg9MCx0aGlzLnBhblk9MCl9dXBkYXRlZChXKXtzdXBlci51cGRhdGVkKFcpLFcuaGFzKCJzcmMiKSYmKHRoaXMubG9hZGluZz0hMCx0aGlzLmVycm9yPSIiLHRoaXMuem9vbT0xLHRoaXMucGFuWD0wLHRoaXMucGFuWT0wLHRoaXMuaW1hZ2VOYXR1cmFsV2lkdGg9MCx0aGlzLmltYWdlTmF0dXJhbEhlaWdodD0wKX1zdGF0aWN7ejEoaSxhKX19O3JldHVybiBrZT1pfSkoKX0pO3ZhciBxYnQ9YigoKT0+e3FWKCl9KTt2YXIgVmJ0LGpidD1iKCgpPT57dWUoKTtWYnQ9KCk9PndgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KCiAgICBkZWVzLWF1ZGlvLXZpZXdlciB7CiAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5BdWRpbyB3aXRoIFdhdmVmb3JtPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkF1ZGlvIHBsYXllciB3aXRoIHdhdmVmb3JtIHZpc3VhbGl6YXRpb24gYW5kIGZ1bGwgdHJhbnNwb3J0IGNvbnRyb2xzLjwvZGl2PgogICAgICA8ZGVlcy1hdWRpby12aWV3ZXIKICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMS5tcDMiCiAgICAgICAgdGl0bGU9IlNvdW5kSGVsaXggU29uZyAxIgogICAgICAgIGFydGlzdD0iVC4gU2NodWVyZ2VyIgogICAgICA+PC9kZWVzLWF1ZGlvLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5BdWRpbyB3aXRob3V0IFdhdmVmb3JtPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlNpbXBsZSBhdWRpbyBwbGF5ZXIgd2l0aCBhIHNlZWtiYXIgaW5zdGVhZCBvZiBhIHdhdmVmb3JtLjwvZGl2PgogICAgICA8ZGVlcy1hdWRpby12aWV3ZXIKICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMi5tcDMiCiAgICAgICAgdGl0bGU9IlNvdW5kSGVsaXggU29uZyAyIgogICAgICAgIC5zaG93V2F2ZWZvcm09JHshMX0KICAgICAgPjwvZGVlcy1hdWRpby12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TWluaW1hbCBBdWRpbyBQbGF5ZXI8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Tm8gdGl0bGUgb3IgYXJ0aXN0IG1ldGFkYXRhIOKAlCBqdXN0IHRoZSBwbGF5ZXIuPC9kaXY+CiAgICAgIDxkZWVzLWF1ZGlvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0zLm1wMyIKICAgICAgPjwvZGVlcy1hdWRpby12aWV3ZXI+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBKMixadCxVYnQsVlY9YigoKT0+e3VlKCk7RXQoKTtqYnQoKTtKMj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFp0PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxVYnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLWF1ZGlvLXZpZXdlciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdLFYsUj1bXSxVPVtdLHJlLGo9W10sbWU9W10sd2UsSD1bXSxjZT1bXSxrZSxXPVtdLEQ9W10sTyxaPVtdLFk9W10sb2UsZ2U9W10sYmU9W107dmFyICRlPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLGQ9W0koKV0sbD1bSSgpXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0koe3R5cGU6Qm9vbGVhbn0pXSxOPVtLKCldLHE9W0soKV0sRT1bSygpXSxWPVtLKCldLHJlPVtLKCldLHdlPVtLKCldLGtlPVtLKCldLE89W0soKV0sb2U9W0soKV0sSjIodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzcmMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJzcmMiaW4gUCxnZXQ6UD0+UC5zcmMsc2V0OihQLEopPT57UC5zcmM9Sn19LG1ldGFkYXRhOkJ9LG4sbyksSjIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aXRsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+InRpdGxlImluIFAsZ2V0OlA9PlAudGl0bGUsc2V0OihQLEopPT57UC50aXRsZT1KfX0sbWV0YWRhdGE6Qn0sYyxwKSxKMih0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFydGlzdCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImFydGlzdCJpbiBQLGdldDpQPT5QLmFydGlzdCxzZXQ6KFAsSik9PntQLmFydGlzdD1KfX0sbWV0YWRhdGE6Qn0sZixnKSxKMih0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dXYXZlZm9ybSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+InNob3dXYXZlZm9ybSJpbiBQLGdldDpQPT5QLnNob3dXYXZlZm9ybSxzZXQ6KFAsSik9PntQLnNob3dXYXZlZm9ybT1KfX0sbWV0YWRhdGE6Qn0sdixtKSxKMih0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9wbGF5IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4iYXV0b3BsYXkiaW4gUCxnZXQ6UD0+UC5hdXRvcGxheSxzZXQ6KFAsSik9PntQLmF1dG9wbGF5PUp9fSxtZXRhZGF0YTpCfSxNLFMpLEoyKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibG9vcCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+Imxvb3AiaW4gUCxnZXQ6UD0+UC5sb29wLHNldDooUCxKKT0+e1AubG9vcD1KfX0sbWV0YWRhdGE6Qn0sXyxrKSxKMih0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzUGxheWluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImlzUGxheWluZyJpbiBQLGdldDpQPT5QLmlzUGxheWluZyxzZXQ6KFAsSik9PntQLmlzUGxheWluZz1KfX0sbWV0YWRhdGE6Qn0sTCxBKSxKMih0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRUaW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpQPT4iY3VycmVudFRpbWUiaW4gUCxnZXQ6UD0+UC5jdXJyZW50VGltZSxzZXQ6KFAsSik9PntQLmN1cnJlbnRUaW1lPUp9fSxtZXRhZGF0YTpCfSxDLHopLEoyKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZHVyYXRpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJkdXJhdGlvbiJpbiBQLGdldDpQPT5QLmR1cmF0aW9uLHNldDooUCxKKT0+e1AuZHVyYXRpb249Sn19LG1ldGFkYXRhOkJ9LFQsJCksSjIodGhpcyxudWxsLFYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ2b2x1bWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJ2b2x1bWUiaW4gUCxnZXQ6UD0+UC52b2x1bWUsc2V0OihQLEopPT57UC52b2x1bWU9Sn19LG1ldGFkYXRhOkJ9LFIsVSksSjIodGhpcyxudWxsLHJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNNdXRlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImlzTXV0ZWQiaW4gUCxnZXQ6UD0+UC5pc011dGVkLHNldDooUCxKKT0+e1AuaXNNdXRlZD1KfX0sbWV0YWRhdGE6Qn0saixtZSksSjIodGhpcyxudWxsLHdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibG9hZGluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+ImxvYWRpbmciaW4gUCxnZXQ6UD0+UC5sb2FkaW5nLHNldDooUCxKKT0+e1AubG9hZGluZz1KfX0sbWV0YWRhdGE6Qn0sSCxjZSksSjIodGhpcyxudWxsLGtlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXJyb3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJlcnJvciJpbiBQLGdldDpQPT5QLmVycm9yLHNldDooUCxKKT0+e1AuZXJyb3I9Sn19LG1ldGFkYXRhOkJ9LFcsRCksSjIodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3YXZlZm9ybURhdGEiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlA9PiJ3YXZlZm9ybURhdGEiaW4gUCxnZXQ6UD0+UC53YXZlZm9ybURhdGEsc2V0OihQLEopPT57UC53YXZlZm9ybURhdGE9Sn19LG1ldGFkYXRhOkJ9LFosWSksSjIodGhpcyxudWxsLG9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToid2F2ZWZvcm1SZWFkeSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6UD0+IndhdmVmb3JtUmVhZHkiaW4gUCxnZXQ6UD0+UC53YXZlZm9ybVJlYWR5LHNldDooUCxKKT0+e1Aud2F2ZWZvcm1SZWFkeT1KfX0sbWV0YWRhdGE6Qn0sZ2UsYmUpLEoyKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkJ9LG51bGwsYSksJGU9aT1lLnZhbHVlLEImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Qn0pfXN0YXRpYyBkZW1vPVZidDtzdGF0aWMgZGVtb0dyb3Vwcz1bIk1lZGlhIl07I2U9WnQodGhpcyxuLCIiKTtnZXQgc3JjKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNyYyhCKXt0aGlzLiNlPUJ9I3Q9KFp0KHRoaXMsbyksWnQodGhpcyxjLCIiKSk7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRpdGxlKEIpe3RoaXMuI3Q9Qn0jYT0oWnQodGhpcyxwKSxadCh0aGlzLGYsIiIpKTtnZXQgYXJ0aXN0KCl7cmV0dXJuIHRoaXMuI2F9c2V0IGFydGlzdChCKXt0aGlzLiNhPUJ9I2k9KFp0KHRoaXMsZyksWnQodGhpcyx2LCEwKSk7Z2V0IHNob3dXYXZlZm9ybSgpe3JldHVybiB0aGlzLiNpfXNldCBzaG93V2F2ZWZvcm0oQil7dGhpcy4jaT1CfSNyPShadCh0aGlzLG0pLFp0KHRoaXMsTSwhMSkpO2dldCBhdXRvcGxheSgpe3JldHVybiB0aGlzLiNyfXNldCBhdXRvcGxheShCKXt0aGlzLiNyPUJ9I3M9KFp0KHRoaXMsUyksWnQodGhpcyxfLCExKSk7Z2V0IGxvb3AoKXtyZXR1cm4gdGhpcy4jc31zZXQgbG9vcChCKXt0aGlzLiNzPUJ9I249KFp0KHRoaXMsayksWnQodGhpcyxMLCExKSk7Z2V0IGlzUGxheWluZygpe3JldHVybiB0aGlzLiNufXNldCBpc1BsYXlpbmcoQil7dGhpcy4jbj1CfSNvPShadCh0aGlzLEEpLFp0KHRoaXMsQywwKSk7Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuI299c2V0IGN1cnJlbnRUaW1lKEIpe3RoaXMuI289Qn0jbD0oWnQodGhpcyx6KSxadCh0aGlzLFQsMCkpO2dldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLiNsfXNldCBkdXJhdGlvbihCKXt0aGlzLiNsPUJ9I2M9KFp0KHRoaXMsJCksWnQodGhpcyxSLDEpKTtnZXQgdm9sdW1lKCl7cmV0dXJuIHRoaXMuI2N9c2V0IHZvbHVtZShCKXt0aGlzLiNjPUJ9I2Q9KFp0KHRoaXMsVSksWnQodGhpcyxqLCExKSk7Z2V0IGlzTXV0ZWQoKXtyZXR1cm4gdGhpcy4jZH1zZXQgaXNNdXRlZChCKXt0aGlzLiNkPUJ9I3A9KFp0KHRoaXMsbWUpLFp0KHRoaXMsSCwhMSkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI3B9c2V0IGxvYWRpbmcoQil7dGhpcy4jcD1CfSNoPShadCh0aGlzLGNlKSxadCh0aGlzLFcsIiIpKTtnZXQgZXJyb3IoKXtyZXR1cm4gdGhpcy4jaH1zZXQgZXJyb3IoQil7dGhpcy4jaD1CfSN1PShadCh0aGlzLEQpLFp0KHRoaXMsWixbXSkpO2dldCB3YXZlZm9ybURhdGEoKXtyZXR1cm4gdGhpcy4jdX1zZXQgd2F2ZWZvcm1EYXRhKEIpe3RoaXMuI3U9Qn0jZj0oWnQodGhpcyxZKSxadCh0aGlzLGdlLCExKSk7Z2V0IHdhdmVmb3JtUmVhZHkoKXtyZXR1cm4gdGhpcy4jZn1zZXQgd2F2ZWZvcm1SZWFkeShCKXt0aGlzLiNmPUJ9YXVkaW9FbGVtZW50PShadCh0aGlzLGJlKSxudWxsKTtjYW52YXNFbGVtZW50PW51bGw7YW5pbUZyYW1lSWQ9MDt2b2x1bWVCZWZvcmVNdXRlPTE7cmVuZGVyKCl7bGV0IEI9dGhpcy50aXRsZSYmdGhpcy5hcnRpc3Q/YCR7dGhpcy50aXRsZX0gXHUyMDE0ICR7dGhpcy5hcnRpc3R9YDp0aGlzLnRpdGxlfHx0aGlzLmFydGlzdHx8IiI7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC52aWV3ZXItY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNlNWU3ZWIiLCJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogNHB4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1idXR0b246YWN0aXZlIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbi5hY3RpdmUgewogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICB9CgogICAgICAgIC50aW1lLWRpc3BsYXkgewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgbWluLXdpZHRoOiA5MHB4OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlciB7CiAgICAgICAgICB3aWR0aDogNzBweDsKICAgICAgICAgIGhlaWdodDogNHB4OwogICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlcjo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlcjo6LW1vei1yYW5nZS10aHVtYiB7CiAgICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC5jb250ZW50LWFyZWEgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLndhdmVmb3JtLWNvbnRhaW5lciB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAud2F2ZWZvcm0tY29udGFpbmVyIGNhbnZhcyB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnNlZWtiYXItY29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTElKSIsImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLnNlZWtiYXItZmlsbCB7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzIGxpbmVhcjsKICAgICAgICB9CgogICAgICAgIC5lcnJvci1vdmVybGF5IHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgICAgfQoKICAgICAgICAuZXJyb3Itb3ZlcmxheSAuZXJyb3ItaWNvbiB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNkYzI2MjYiLCIjZjg3MTcxIil9OwogICAgICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgICAgIH0KCiAgICAgICAgLmVycm9yLXRleHQgewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctb3ZlcmxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxkaXYgY2xhc3M9InZpZXdlci1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVBsYXl9PgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOiR7dGhpcy5pc1BsYXlpbmc/IlBhdXNlIjoiUGxheSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lLWRpc3BsYXkiPgogICAgICAgICAgICAgICR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuY3VycmVudFRpbWUpfSAvICR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuZHVyYXRpb24pfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAke0I/d2AKICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvb2xiYXItdGl0bGUiPiR7Qn08L3NwYW4+CiAgICAgICAgICBgOiIifQoKICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAtLWVuZCI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLmxvb3A/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlTG9vcH0KICAgICAgICAgICAgICB0aXRsZT0iTG9vcCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlJlcGVhdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idm9sdW1lLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy50b2dnbGVNdXRlfSB0aXRsZT0iJHt0aGlzLmlzTXV0ZWQ/IlVubXV0ZSI6Ik11dGUifSI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZToke3RoaXMuaXNNdXRlZHx8dGhpcy52b2x1bWU9PT0wPyJWb2x1bWVYIjp0aGlzLnZvbHVtZTwuNT8iVm9sdW1lMSI6IlZvbHVtZTIifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICBjbGFzcz0idm9sdW1lLXNsaWRlciIKICAgICAgICAgICAgICAgIHR5cGU9InJhbmdlIgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICAgICAgc3RlcD0iMC4wMSIKICAgICAgICAgICAgICAgIC52YWx1ZT0ke1N0cmluZyh0aGlzLmlzTXV0ZWQ/MDp0aGlzLnZvbHVtZSl9CiAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVZvbHVtZUNoYW5nZX0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgJHt0aGlzLmVycm9yP3dgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLW92ZXJsYXkiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imx1Y2lkZTpNdXNpY09mZiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yLXRleHQiPiR7dGhpcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDp0aGlzLmxvYWRpbmc/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6dGhpcy5zaG93V2F2ZWZvcm0/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0id2F2ZWZvcm0tY29udGFpbmVyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZVdhdmVmb3JtQ2xpY2t9PgogICAgICAgICAgICAgIDxjYW52YXM+PC9jYW52YXM+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDp3YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWVrYmFyLWNvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVTZWVrYmFyQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlZWtiYXItZmlsbCIgc3R5bGU9IndpZHRoOiAke3RoaXMuZHVyYXRpb24/dGhpcy5jdXJyZW50VGltZS90aGlzLmR1cmF0aW9uKjEwMDowfSUiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zcmMmJnRoaXMuaW5pdEF1ZGlvKCl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY2xlYW51cCgpfWFzeW5jIHVwZGF0ZWQoQil7c3VwZXIudXBkYXRlZChCKSxCLmhhcygic3JjIikmJnRoaXMuc3JjJiYodGhpcy5jbGVhbnVwKCksdGhpcy5pbml0QXVkaW8oKSksKEIuaGFzKCJ3YXZlZm9ybURhdGEiKXx8Qi5oYXMoImN1cnJlbnRUaW1lIikpJiZ0aGlzLmRyYXdXYXZlZm9ybSgpfXBsYXkoKXt0aGlzLmF1ZGlvRWxlbWVudD8ucGxheSgpfXBhdXNlKCl7dGhpcy5hdWRpb0VsZW1lbnQ/LnBhdXNlKCl9dG9nZ2xlUGxheSgpe3RoaXMuaXNQbGF5aW5nP3RoaXMucGF1c2UoKTp0aGlzLnBsYXkoKX1zZWVrKEIpe3RoaXMuYXVkaW9FbGVtZW50JiYodGhpcy5hdWRpb0VsZW1lbnQuY3VycmVudFRpbWU9Qil9c2V0Vm9sdW1lKEIpe3RoaXMudm9sdW1lPU1hdGgubWF4KDAsTWF0aC5taW4oMSxCKSksdGhpcy5hdWRpb0VsZW1lbnQmJih0aGlzLmF1ZGlvRWxlbWVudC52b2x1bWU9dGhpcy52b2x1bWUpLHRoaXMudm9sdW1lPjAmJih0aGlzLmlzTXV0ZWQ9ITEpfXRvZ2dsZU11dGUoKXt0aGlzLmlzTXV0ZWQ/KHRoaXMuaXNNdXRlZD0hMSx0aGlzLnZvbHVtZT10aGlzLnZvbHVtZUJlZm9yZU11dGV8fC41LHRoaXMuYXVkaW9FbGVtZW50JiYodGhpcy5hdWRpb0VsZW1lbnQudm9sdW1lPXRoaXMudm9sdW1lKSk6KHRoaXMudm9sdW1lQmVmb3JlTXV0ZT10aGlzLnZvbHVtZSx0aGlzLmlzTXV0ZWQ9ITAsdGhpcy5hdWRpb0VsZW1lbnQmJih0aGlzLmF1ZGlvRWxlbWVudC52b2x1bWU9MCkpfXRvZ2dsZUxvb3AoKXt0aGlzLmxvb3A9IXRoaXMubG9vcCx0aGlzLmF1ZGlvRWxlbWVudCYmKHRoaXMuYXVkaW9FbGVtZW50Lmxvb3A9dGhpcy5sb29wKX1pbml0QXVkaW8oKXt0aGlzLmF1ZGlvRWxlbWVudD1uZXcgQXVkaW8sdGhpcy5hdWRpb0VsZW1lbnQuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy5hdWRpb0VsZW1lbnQuc3JjPXRoaXMuc3JjLHRoaXMuYXVkaW9FbGVtZW50LnZvbHVtZT10aGlzLmlzTXV0ZWQ/MDp0aGlzLnZvbHVtZSx0aGlzLmF1ZGlvRWxlbWVudC5sb29wPXRoaXMubG9vcCx0aGlzLmF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsKCk9Pnt0aGlzLmR1cmF0aW9uPXRoaXMuYXVkaW9FbGVtZW50LmR1cmF0aW9uLHRoaXMubG9hZGluZz0hMX0pLHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBsYXkiLCgpPT57dGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zdGFydFRpbWVVcGRhdGUoKX0pLHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIiwoKT0+e3RoaXMuaXNQbGF5aW5nPSExLHRoaXMuc3RvcFRpbWVVcGRhdGUoKX0pLHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVuZGVkIiwoKT0+e3RoaXMuaXNQbGF5aW5nPSExLHRoaXMuc3RvcFRpbWVVcGRhdGUoKX0pLHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e3RoaXMuZXJyb3I9IkZhaWxlZCB0byBsb2FkIGF1ZGlvIix0aGlzLmxvYWRpbmc9ITF9KSx0aGlzLmF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIiwoKT0+e3RoaXMuY3VycmVudFRpbWU9dGhpcy5hdWRpb0VsZW1lbnQuY3VycmVudFRpbWV9KSx0aGlzLmF1dG9wbGF5JiZ0aGlzLmF1ZGlvRWxlbWVudC5wbGF5KCkuY2F0Y2goKCk9Pnt9KSx0aGlzLnNob3dXYXZlZm9ybSYmdGhpcy5sb2FkV2F2ZWZvcm0oKX1hc3luYyBsb2FkV2F2ZWZvcm0oKXt0cnl7dGhpcy5sb2FkaW5nPSEwO2xldCBQPWF3YWl0KGF3YWl0IGZldGNoKHRoaXMuc3JjKSkuYXJyYXlCdWZmZXIoKSxKPW5ldyBBdWRpb0NvbnRleHQsZGU9KGF3YWl0IEouZGVjb2RlQXVkaW9EYXRhKFApKS5nZXRDaGFubmVsRGF0YSgwKSxfZT0yMDAsaGU9TWF0aC5mbG9vcihkZS5sZW5ndGgvX2UpLHRlPVtdO2ZvcihsZXQgRmU9MDtGZTxfZTtGZSsrKXtsZXQgR2U9MDtmb3IobGV0IHllPTA7eWU8aGU7eWUrKylHZSs9TWF0aC5hYnMoZGVbRmUqaGUreWVdKTt0ZS5wdXNoKEdlL2hlKX1sZXQgemU9TWF0aC5tYXgoLi4udGUpO3RoaXMud2F2ZWZvcm1EYXRhPXRlLm1hcChGZT0+emU+MD9GZS96ZTowKSx0aGlzLndhdmVmb3JtUmVhZHk9ITAsdGhpcy5sb2FkaW5nPSExLGF3YWl0IEouY2xvc2UoKX1jYXRjaHt0aGlzLndhdmVmb3JtUmVhZHk9ITEsdGhpcy5sb2FkaW5nPSExfX1kcmF3V2F2ZWZvcm0oKXtpZighdGhpcy5zaG93V2F2ZWZvcm18fCF0aGlzLndhdmVmb3JtUmVhZHkpcmV0dXJuO2xldCBCPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiY2FudmFzIik7aWYoIUIpcmV0dXJuO3RoaXMuY2FudmFzRWxlbWVudD1CO2xldCBQPUIucGFyZW50RWxlbWVudCxKPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxLGZlPVAuY2xpZW50V2lkdGgsZGU9UC5jbGllbnRIZWlnaHQ7Qi53aWR0aD1mZSpKLEIuaGVpZ2h0PWRlKko7bGV0IF9lPUIuZ2V0Q29udGV4dCgiMmQiKTtpZighX2UpcmV0dXJuO19lLnNjYWxlKEosSiksX2UuY2xlYXJSZWN0KDAsMCxmZSxkZSk7bGV0IGhlPXRoaXMud2F2ZWZvcm1EYXRhLmxlbmd0aDtpZihoZT09PTApcmV0dXJuO2xldCB0ZT1mZS9oZSx6ZT10aGlzLmR1cmF0aW9uPjA/dGhpcy5jdXJyZW50VGltZS90aGlzLmR1cmF0aW9uOjAsRmU9TWF0aC5mbG9vcih6ZSpoZSksR2U9ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoInRoZW1lLWRhcmsiKXx8d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzLHllPUdlPyJoc2woMjEzIDkzJSA2OCUpIjoiaHNsKDIxNyA5MSUgNjAlKSIsZWU9R2U/ImhzbCgyMTcgMjUlIDIyJSkiOiJoc2woMjE0IDMxJSA4NiUpIjtmb3IobGV0IGFlPTA7YWU8aGU7YWUrKyl7bGV0IHZlPXRoaXMud2F2ZWZvcm1EYXRhW2FlXSxQZT1NYXRoLm1heCgyLHZlKihkZS00KSksamU9YWUqdGUsd3Q9KGRlLVBlKS8yO19lLmZpbGxTdHlsZT1hZTxGZT95ZTplZSxfZS5maWxsUmVjdChqZSsuNSx3dCx0ZS0xLFBlKX19aGFuZGxlV2F2ZWZvcm1DbGljayhCKXtsZXQgUD1CLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSj0oQi5jbGllbnRYLVAubGVmdCkvUC53aWR0aDt0aGlzLnNlZWsoSip0aGlzLmR1cmF0aW9uKX1oYW5kbGVTZWVrYmFyQ2xpY2soQil7bGV0IFA9Qi5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9KEIuY2xpZW50WC1QLmxlZnQpL1Aud2lkdGg7dGhpcy5zZWVrKEoqdGhpcy5kdXJhdGlvbil9aGFuZGxlVm9sdW1lQ2hhbmdlKEIpe2xldCBQPXBhcnNlRmxvYXQoQi50YXJnZXQudmFsdWUpO3RoaXMuc2V0Vm9sdW1lKFApfXN0YXJ0VGltZVVwZGF0ZSgpe3RoaXMuc3RvcFRpbWVVcGRhdGUoKTtsZXQgQj0oKT0+e3RoaXMuYXVkaW9FbGVtZW50JiZ0aGlzLmlzUGxheWluZyYmKHRoaXMuY3VycmVudFRpbWU9dGhpcy5hdWRpb0VsZW1lbnQuY3VycmVudFRpbWUsdGhpcy5hbmltRnJhbWVJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoQikpfTt0aGlzLmFuaW1GcmFtZUlkPXJlcXVlc3RBbmltYXRpb25GcmFtZShCKX1zdG9wVGltZVVwZGF0ZSgpe3RoaXMuYW5pbUZyYW1lSWQmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1GcmFtZUlkKSx0aGlzLmFuaW1GcmFtZUlkPTApfWZvcm1hdFRpbWUoQil7aWYoIWlzRmluaXRlKEIpfHxCPDApcmV0dXJuIjA6MDAiO2xldCBQPU1hdGguZmxvb3IoQi82MCksSj1NYXRoLmZsb29yKEIlNjApO3JldHVybmAke1B9OiR7Si50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWNsZWFudXAoKXt0aGlzLnN0b3BUaW1lVXBkYXRlKCksdGhpcy5hdWRpb0VsZW1lbnQmJih0aGlzLmF1ZGlvRWxlbWVudC5wYXVzZSgpLHRoaXMuYXVkaW9FbGVtZW50LnNyYz0iIix0aGlzLmF1ZGlvRWxlbWVudD1udWxsKSx0aGlzLmlzUGxheWluZz0hMSx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5kdXJhdGlvbj0wLHRoaXMud2F2ZWZvcm1EYXRhPVtdLHRoaXMud2F2ZWZvcm1SZWFkeT0hMX1zdGF0aWN7WnQoaSxhKX19O3JldHVybiAkZT1pfSkoKX0pO3ZhciBXYnQ9YigoKT0+e1ZWKCl9KTt2YXIgR2J0LFlidD1iKCgpPT57dWUoKTtHYnQ9KCk9PndgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VmlkZW8gd2l0aCBDdXN0b20gQ29udHJvbHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QSB2aWRlbyBwbGF5ZXIgd2l0aCBvdmVybGF5IGNvbnRyb2xzLCBzZWVraW5nLCBhbmQgdm9sdW1lIGFkanVzdG1lbnQuPC9kaXY+CiAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvQmlnQnVja0J1bm55Lm1wNCIKICAgICAgICBwb3N0ZXI9Imh0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ3R2LXZpZGVvcy1idWNrZXQvc2FtcGxlL2ltYWdlcy9CaWdCdWNrQnVubnkuanBnIgogICAgICA+PC9kZWVzLXZpZGVvLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5BdXRvcGxheSBNdXRlZDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5WaWRlbyB0aGF0IGF1dG9wbGF5cyBtdXRlZCwgY29tbW9ubHkgdXNlZCBmb3IgcHJldmlld3MuPC9kaXY+CiAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvRWxlcGhhbnRzRHJlYW0ubXA0IgogICAgICAgIHBvc3Rlcj0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvaW1hZ2VzL0VsZXBoYW50c0RyZWFtLmpwZyIKICAgICAgICAuYXV0b3BsYXk9JHshMH0KICAgICAgICAubXV0ZWQ9JHshMH0KICAgICAgPjwvZGVlcy12aWRlby12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TmF0aXZlIENvbnRyb2xzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlZpZGVvIHVzaW5nIGJyb3dzZXItbmF0aXZlIGNvbnRyb2xzIGluc3RlYWQgb2YgY3VzdG9tIG92ZXJsYXkuPC9kaXY+CiAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvRm9yQmlnZ2VyQmxhemVzLm1wNCIKICAgICAgICAuc2hvd0NvbnRyb2xzPSR7ITF9CiAgICAgID48L2RlZXMtdmlkZW8tdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgdmEsYzEsWmJ0LGpWPWIoKCk9Pnt1ZSgpO0V0KCk7WWJ0KCk7dmE9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxjMT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sWmJ0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy12aWRlby12aWV3ZXIiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXSxyZSxqPVtdLG1lPVtdLHdlLEg9W10sY2U9W10sa2UsVz1bXSxEPVtdLE8sWj1bXSxZPVtdO3ZhciBvZT1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGdlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koKV0sZD1bSSgpXSxsPVtJKHt0eXBlOkJvb2xlYW59KV0seT1bSSh7dHlwZTpCb29sZWFufSldLHg9W0koe3R5cGU6Qm9vbGVhbn0pXSxGPVtJKHt0eXBlOkJvb2xlYW59KV0sTj1bSygpXSxxPVtLKCldLEU9W0soKV0sVj1bSygpXSxyZT1bSygpXSx3ZT1bSygpXSxrZT1bSygpXSxPPVtLKCldLHZhKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3JjIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+InNyYyJpbiBiZSxnZXQ6YmU9PmJlLnNyYyxzZXQ6KGJlLCRlKT0+e2JlLnNyYz0kZX19LG1ldGFkYXRhOmdlfSxuLG8pLHZhKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicG9zdGVyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+InBvc3RlciJpbiBiZSxnZXQ6YmU9PmJlLnBvc3RlcixzZXQ6KGJlLCRlKT0+e2JlLnBvc3Rlcj0kZX19LG1ldGFkYXRhOmdlfSxjLHApLHZhKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd0NvbnRyb2xzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+InNob3dDb250cm9scyJpbiBiZSxnZXQ6YmU9PmJlLnNob3dDb250cm9scyxzZXQ6KGJlLCRlKT0+e2JlLnNob3dDb250cm9scz0kZX19LG1ldGFkYXRhOmdlfSxmLGcpLHZhKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYXV0b3BsYXkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4iYXV0b3BsYXkiaW4gYmUsZ2V0OmJlPT5iZS5hdXRvcGxheSxzZXQ6KGJlLCRlKT0+e2JlLmF1dG9wbGF5PSRlfX0sbWV0YWRhdGE6Z2V9LHYsbSksdmEodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb29wIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+Imxvb3AiaW4gYmUsZ2V0OmJlPT5iZS5sb29wLHNldDooYmUsJGUpPT57YmUubG9vcD0kZX19LG1ldGFkYXRhOmdlfSxNLFMpLHZhKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibXV0ZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4ibXV0ZWQiaW4gYmUsZ2V0OmJlPT5iZS5tdXRlZCxzZXQ6KGJlLCRlKT0+e2JlLm11dGVkPSRlfX0sbWV0YWRhdGE6Z2V9LF8sayksdmEodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1BsYXlpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4iaXNQbGF5aW5nImluIGJlLGdldDpiZT0+YmUuaXNQbGF5aW5nLHNldDooYmUsJGUpPT57YmUuaXNQbGF5aW5nPSRlfX0sbWV0YWRhdGE6Z2V9LEwsQSksdmEodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50VGltZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6YmU9PiJjdXJyZW50VGltZSJpbiBiZSxnZXQ6YmU9PmJlLmN1cnJlbnRUaW1lLHNldDooYmUsJGUpPT57YmUuY3VycmVudFRpbWU9JGV9fSxtZXRhZGF0YTpnZX0sQyx6KSx2YSh0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImR1cmF0aW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+ImR1cmF0aW9uImluIGJlLGdldDpiZT0+YmUuZHVyYXRpb24sc2V0OihiZSwkZSk9PntiZS5kdXJhdGlvbj0kZX19LG1ldGFkYXRhOmdlfSxULCQpLHZhKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidm9sdW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+InZvbHVtZSJpbiBiZSxnZXQ6YmU9PmJlLnZvbHVtZSxzZXQ6KGJlLCRlKT0+e2JlLnZvbHVtZT0kZX19LG1ldGFkYXRhOmdlfSxSLFUpLHZhKHRoaXMsbnVsbCxyZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxvYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4ibG9hZGluZyJpbiBiZSxnZXQ6YmU9PmJlLmxvYWRpbmcsc2V0OihiZSwkZSk9PntiZS5sb2FkaW5nPSRlfX0sbWV0YWRhdGE6Z2V9LGosbWUpLHZhKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImVycm9yIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpiZT0+ImVycm9yImluIGJlLGdldDpiZT0+YmUuZXJyb3Isc2V0OihiZSwkZSk9PntiZS5lcnJvcj0kZX19LG1ldGFkYXRhOmdlfSxILGNlKSx2YSh0aGlzLG51bGwsa2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0Z1bGxzY3JlZW4iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4iaXNGdWxsc2NyZWVuImluIGJlLGdldDpiZT0+YmUuaXNGdWxsc2NyZWVuLHNldDooYmUsJGUpPT57YmUuaXNGdWxsc2NyZWVuPSRlfX0sbWV0YWRhdGE6Z2V9LFcsRCksdmEodGhpcyxudWxsLE8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250cm9sc1Zpc2libGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmJlPT4iY29udHJvbHNWaXNpYmxlImluIGJlLGdldDpiZT0+YmUuY29udHJvbHNWaXNpYmxlLHNldDooYmUsJGUpPT57YmUuY29udHJvbHNWaXNpYmxlPSRlfX0sbWV0YWRhdGE6Z2V9LFosWSksdmEobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Z2V9LG51bGwsYSksb2U9aT1lLnZhbHVlLGdlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmdlfSl9c3RhdGljIGRlbW89R2J0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiXTsjZT1jMSh0aGlzLG4sIiIpO2dldCBzcmMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgc3JjKGdlKXt0aGlzLiNlPWdlfSN0PShjMSh0aGlzLG8pLGMxKHRoaXMsYywiIikpO2dldCBwb3N0ZXIoKXtyZXR1cm4gdGhpcy4jdH1zZXQgcG9zdGVyKGdlKXt0aGlzLiN0PWdlfSNhPShjMSh0aGlzLHApLGMxKHRoaXMsZiwhMCkpO2dldCBzaG93Q29udHJvbHMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgc2hvd0NvbnRyb2xzKGdlKXt0aGlzLiNhPWdlfSNpPShjMSh0aGlzLGcpLGMxKHRoaXMsdiwhMSkpO2dldCBhdXRvcGxheSgpe3JldHVybiB0aGlzLiNpfXNldCBhdXRvcGxheShnZSl7dGhpcy4jaT1nZX0jcj0oYzEodGhpcyxtKSxjMSh0aGlzLE0sITEpKTtnZXQgbG9vcCgpe3JldHVybiB0aGlzLiNyfXNldCBsb29wKGdlKXt0aGlzLiNyPWdlfSNzPShjMSh0aGlzLFMpLGMxKHRoaXMsXywhMSkpO2dldCBtdXRlZCgpe3JldHVybiB0aGlzLiNzfXNldCBtdXRlZChnZSl7dGhpcy4jcz1nZX0jbj0oYzEodGhpcyxrKSxjMSh0aGlzLEwsITEpKTtnZXQgaXNQbGF5aW5nKCl7cmV0dXJuIHRoaXMuI259c2V0IGlzUGxheWluZyhnZSl7dGhpcy4jbj1nZX0jbz0oYzEodGhpcyxBKSxjMSh0aGlzLEMsMCkpO2dldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLiNvfXNldCBjdXJyZW50VGltZShnZSl7dGhpcy4jbz1nZX0jbD0oYzEodGhpcyx6KSxjMSh0aGlzLFQsMCkpO2dldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLiNsfXNldCBkdXJhdGlvbihnZSl7dGhpcy4jbD1nZX0jYz0oYzEodGhpcywkKSxjMSh0aGlzLFIsMSkpO2dldCB2b2x1bWUoKXtyZXR1cm4gdGhpcy4jY31zZXQgdm9sdW1lKGdlKXt0aGlzLiNjPWdlfSNkPShjMSh0aGlzLFUpLGMxKHRoaXMsaiwhMCkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2R9c2V0IGxvYWRpbmcoZ2Upe3RoaXMuI2Q9Z2V9I3A9KGMxKHRoaXMsbWUpLGMxKHRoaXMsSCwiIikpO2dldCBlcnJvcigpe3JldHVybiB0aGlzLiNwfXNldCBlcnJvcihnZSl7dGhpcy4jcD1nZX0jaD0oYzEodGhpcyxjZSksYzEodGhpcyxXLCExKSk7Z2V0IGlzRnVsbHNjcmVlbigpe3JldHVybiB0aGlzLiNofXNldCBpc0Z1bGxzY3JlZW4oZ2Upe3RoaXMuI2g9Z2V9I3U9KGMxKHRoaXMsRCksYzEodGhpcyxaLCEwKSk7Z2V0IGNvbnRyb2xzVmlzaWJsZSgpe3JldHVybiB0aGlzLiN1fXNldCBjb250cm9sc1Zpc2libGUoZ2Upe3RoaXMuI3U9Z2V9aGlkZUNvbnRyb2xzVGltZXI9KGMxKHRoaXMsWSksbnVsbCk7dmlkZW9FbGVtZW50PW51bGw7cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC52aWRlby1jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgdmlkZW8gewogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICAub3ZlcmxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC5jZW50ZXItcGxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgICAgd2lkdGg6IDY0cHg7CiAgICAgICAgICBoZWlnaHQ6IDY0cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICAgIG9wYWNpdHk6ICR7dGhpcy5pc1BsYXlpbmc/MDoxfTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiAke3RoaXMuaXNQbGF5aW5nPyJub25lIjoiYXV0byJ9OwogICAgICAgIH0KCiAgICAgICAgLmNlbnRlci1wbGF5IGRlZXMtaWNvbiB7CiAgICAgICAgICBmb250LXNpemU6IDI4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2VudGVyLXBsYXk6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMS4xKTsKICAgICAgICB9CgogICAgICAgIC5jb250cm9scy1iYXIgewogICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCByZ2JhKDAsIDAsIDAsIDAuNykpOwogICAgICAgICAgcGFkZGluZzogMjRweCAxMnB4IDEycHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgb3BhY2l0eTogJHt0aGlzLmNvbnRyb2xzVmlzaWJsZXx8IXRoaXMuaXNQbGF5aW5nPzE6MH07CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICB9CgogICAgICAgIC5zZWVrYmFyLXJvdyB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlZWtiYXItcm93OmhvdmVyIHsKICAgICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlZWtiYXItcHJvZ3Jlc3MgewogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjNjBhNWZhIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAuY29udHJvbHMtcm93IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY3RybC1idXR0b24gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KCiAgICAgICAgLmN0cmwtYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuY3RybC1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgICB9CgogICAgICAgIC50aW1lLWRpc3BsYXkgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KCiAgICAgICAgLnNwYWNlciB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLnZvbHVtZS1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogNHB4OwogICAgICAgIH0KCiAgICAgICAgLnZvbHVtZS1zbGlkZXIgewogICAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLnZvbHVtZS1zbGlkZXI6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC52b2x1bWUtc2xpZGVyOjotbW96LXJhbmdlLXRodW1iIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgICB9CgogICAgICAgIC5lcnJvci1vdmVybGF5IHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgfQoKICAgICAgICAuZXJyb3Itb3ZlcmxheSBkZWVzLWljb24gewogICAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZXJyb3ItdGV4dCB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ2aWRlby1jb250YWluZXIiCiAgICAgICAgQG1vdXNlbW92ZT0ke3RoaXMuaGFuZGxlTW91c2VNb3ZlfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICA+CiAgICAgICAgPHZpZGVvCiAgICAgICAgICAuc3JjPSR7dGhpcy5zcmN9CiAgICAgICAgICAucG9zdGVyPSR7dGhpcy5wb3N0ZXJ9CiAgICAgICAgICAubXV0ZWQ9JHt0aGlzLm11dGVkfQogICAgICAgICAgLmxvb3A9JHt0aGlzLmxvb3B9CiAgICAgICAgICA/YXV0b3BsYXk9JHt0aGlzLmF1dG9wbGF5fQogICAgICAgICAgP2NvbnRyb2xzPSR7IXRoaXMuc2hvd0NvbnRyb2xzfQogICAgICAgICAgcGxheXNpbmxpbmUKICAgICAgICAgIEBsb2FkZWRtZXRhZGF0YT0ke3RoaXMuaGFuZGxlTG9hZGVkTWV0YWRhdGF9CiAgICAgICAgICBAcGxheT0ke3RoaXMuaGFuZGxlUGxheX0KICAgICAgICAgIEBwYXVzZT0ke3RoaXMuaGFuZGxlUGF1c2V9CiAgICAgICAgICBAZW5kZWQ9JHt0aGlzLmhhbmRsZUVuZGVkfQogICAgICAgICAgQHRpbWV1cGRhdGU9JHt0aGlzLmhhbmRsZVRpbWVVcGRhdGV9CiAgICAgICAgICBAZXJyb3I9JHt0aGlzLmhhbmRsZUVycm9yfQogICAgICAgICAgQHdhaXRpbmc9JHsoKT0+e3RoaXMubG9hZGluZz0hMH19CiAgICAgICAgICBAY2FucGxheT0keygpPT57dGhpcy5sb2FkaW5nPSExfX0KICAgICAgICA+PC92aWRlbz4KCiAgICAgICAgJHt0aGlzLnNob3dDb250cm9scz93YAogICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgQGNsaWNrPSR7dGhpcy5oYW5kbGVPdmVybGF5Q2xpY2t9PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXItcGxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6UGxheSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMtYmFyIiBAY2xpY2s9JHtnZT0+Z2Uuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlZWtiYXItcm93IiBAY2xpY2s9JHt0aGlzLmhhbmRsZVNlZWt9PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2Vla2Jhci1wcm9ncmVzcyIgc3R5bGU9IndpZHRoOiAke3RoaXMuZHVyYXRpb24/dGhpcy5jdXJyZW50VGltZS90aGlzLmR1cmF0aW9uKjEwMDowfSUiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scy1yb3ciPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3RybC1idXR0b24iIEBjbGljaz0ke3RoaXMudG9nZ2xlUGxheX0+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOiR7dGhpcy5pc1BsYXlpbmc/IlBhdXNlIjoiUGxheSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgoKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lLWRpc3BsYXkiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZm9ybWF0VGltZSh0aGlzLmN1cnJlbnRUaW1lKX0gLyAke3RoaXMuZm9ybWF0VGltZSh0aGlzLmR1cmF0aW9uKX0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm9sdW1lLWdyb3VwIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3RybC1idXR0b24iIEBjbGljaz0ke3RoaXMudG9nZ2xlTXV0ZX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6JHt0aGlzLm11dGVkfHx0aGlzLnZvbHVtZT09PTA/IlZvbHVtZVgiOnRoaXMudm9sdW1lPC41PyJWb2x1bWUxIjoiVm9sdW1lMiJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2b2x1bWUtc2xpZGVyIgogICAgICAgICAgICAgICAgICAgIHR5cGU9InJhbmdlIgogICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICBtYXg9IjEiCiAgICAgICAgICAgICAgICAgICAgc3RlcD0iMC4wMSIKICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHtTdHJpbmcodGhpcy5tdXRlZD8wOnRoaXMudm9sdW1lKX0KICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVZvbHVtZUNoYW5nZX0KICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0cmwtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZUZ1bGxzY3JlZW59IHRpdGxlPSJGdWxsc2NyZWVuIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6JHt0aGlzLmlzRnVsbHNjcmVlbj8iTWluaW1pemUiOiJNYXhpbWl6ZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CgogICAgICAgICR7dGhpcy5sb2FkaW5nJiYhdGhpcy5lcnJvcj93YAogICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CgogICAgICAgICR7dGhpcy5lcnJvcj93YAogICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3Itb3ZlcmxheSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlZpZGVvT2ZmIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yLXRleHQiPiR7dGhpcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7dGhpcy52aWRlb0VsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpfHxudWxsLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZ1bGxzY3JlZW5jaGFuZ2UiLHRoaXMuaGFuZGxlRnVsbHNjcmVlbkNoYW5nZSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZ1bGxzY3JlZW5jaGFuZ2UiLHRoaXMuaGFuZGxlRnVsbHNjcmVlbkNoYW5nZSksdGhpcy5oaWRlQ29udHJvbHNUaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuaGlkZUNvbnRyb2xzVGltZXIpfXBsYXkoKXt0aGlzLnZpZGVvRWxlbWVudD8ucGxheSgpfXBhdXNlKCl7dGhpcy52aWRlb0VsZW1lbnQ/LnBhdXNlKCl9dG9nZ2xlUGxheSgpe3RoaXMuaXNQbGF5aW5nP3RoaXMucGF1c2UoKTp0aGlzLnBsYXkoKX1zZWVrKGdlKXt0aGlzLnZpZGVvRWxlbWVudCYmKHRoaXMudmlkZW9FbGVtZW50LmN1cnJlbnRUaW1lPWdlKX1zZXRWb2x1bWUoZ2Upe3RoaXMudm9sdW1lPU1hdGgubWF4KDAsTWF0aC5taW4oMSxnZSkpLHRoaXMudmlkZW9FbGVtZW50JiYodGhpcy52aWRlb0VsZW1lbnQudm9sdW1lPXRoaXMudm9sdW1lKX10b2dnbGVGdWxsc2NyZWVuKCl7bGV0IGdlPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZGVvLWNvbnRhaW5lciIpO2dlJiYodGhpcy5pc0Z1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/LigpOmdlLnJlcXVlc3RGdWxsc2NyZWVuPy4oKSl9aGFuZGxlTG9hZGVkTWV0YWRhdGEoKXt0aGlzLnZpZGVvRWxlbWVudCYmKHRoaXMuZHVyYXRpb249dGhpcy52aWRlb0VsZW1lbnQuZHVyYXRpb24sdGhpcy5sb2FkaW5nPSExKX1oYW5kbGVQbGF5KCl7dGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zY2hlZHVsZUhpZGVDb250cm9scygpfWhhbmRsZVBhdXNlKCl7dGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5jb250cm9sc1Zpc2libGU9ITB9aGFuZGxlRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMSx0aGlzLmNvbnRyb2xzVmlzaWJsZT0hMH1oYW5kbGVUaW1lVXBkYXRlKCl7dGhpcy52aWRlb0VsZW1lbnQmJih0aGlzLmN1cnJlbnRUaW1lPXRoaXMudmlkZW9FbGVtZW50LmN1cnJlbnRUaW1lKX1oYW5kbGVFcnJvcigpe3RoaXMuZXJyb3I9IkZhaWxlZCB0byBsb2FkIHZpZGVvIix0aGlzLmxvYWRpbmc9ITF9aGFuZGxlT3ZlcmxheUNsaWNrKCl7dGhpcy50b2dnbGVQbGF5KCl9aGFuZGxlU2VlayhnZSl7bGV0IGJlPWdlLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksJGU9KGdlLmNsaWVudFgtYmUubGVmdCkvYmUud2lkdGg7dGhpcy5zZWVrKCRlKnRoaXMuZHVyYXRpb24pfWhhbmRsZVZvbHVtZUNoYW5nZShnZSl7bGV0IGJlPXBhcnNlRmxvYXQoZ2UudGFyZ2V0LnZhbHVlKTt0aGlzLnNldFZvbHVtZShiZSksdGhpcy5tdXRlZD1iZT09PTB9dG9nZ2xlTXV0ZSgpe3RoaXMubXV0ZWQ9IXRoaXMubXV0ZWQsdGhpcy52aWRlb0VsZW1lbnQmJih0aGlzLnZpZGVvRWxlbWVudC5tdXRlZD10aGlzLm11dGVkKX1oYW5kbGVNb3VzZU1vdmUoKXt0aGlzLmNvbnRyb2xzVmlzaWJsZT0hMCx0aGlzLnNjaGVkdWxlSGlkZUNvbnRyb2xzKCl9aGFuZGxlTW91c2VMZWF2ZSgpe3RoaXMuaXNQbGF5aW5nJiYodGhpcy5jb250cm9sc1Zpc2libGU9ITEpfXNjaGVkdWxlSGlkZUNvbnRyb2xzKCl7dGhpcy5oaWRlQ29udHJvbHNUaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuaGlkZUNvbnRyb2xzVGltZXIpLHRoaXMuaXNQbGF5aW5nJiYodGhpcy5oaWRlQ29udHJvbHNUaW1lcj1zZXRUaW1lb3V0KCgpPT57dGhpcy5jb250cm9sc1Zpc2libGU9ITF9LDNlMykpfWhhbmRsZUZ1bGxzY3JlZW5DaGFuZ2U9KCk9Pnt0aGlzLmlzRnVsbHNjcmVlbj0hIWRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fTtmb3JtYXRUaW1lKGdlKXtpZighaXNGaW5pdGUoZ2UpfHxnZTwwKXJldHVybiIwOjAwIjtsZXQgYmU9TWF0aC5mbG9vcihnZS82MCksJGU9TWF0aC5mbG9vcihnZSU2MCk7cmV0dXJuYCR7YmV9OiR7JGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1zdGF0aWN7YzEoaSxhKX19O3JldHVybiBvZT1pfSkoKX0pO3ZhciBYYnQ9YigoKT0+e2pWKCl9KTt2YXIgWHIsbHc9YigoKT0+e3VlKCk7WHI9Y2xhc3N7c3RhdGljIHBkZmpzTGliO3N0YXRpYyBpbml0aWFsaXplZD0hMTtzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSgpe3RoaXMuaW5pdGlhbGl6ZWR8fCh0aGlzLnBkZmpzTGliPWF3YWl0IGltcG9ydCgiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvK2VzbSIpLHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5L2J1aWxkL3BkZi53b3JrZXIubWpzIix0aGlzLmluaXRpYWxpemVkPSEwKX1zdGF0aWMgYXN5bmMgbG9hZERvY3VtZW50KGUpe3JldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemUoKSxhd2FpdCB0aGlzLnBkZmpzTGliLmdldERvY3VtZW50KGUpLnByb21pc2V9c3RhdGljIHJlbGVhc2VEb2N1bWVudChlKXt9fX0pO3ZhciBLYnQsUWJ0PWIoKCk9Pnt1ZSgpO0tidD1baC5kZWZhdWx0U3R5bGVzLFFgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7CiAgICB9CgogICAgLnBkZi12aWV3ZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsImhzbCgyMTUgMjAlIDEwJSkiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAudG9vbGJhciB7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA0cHg7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246ZGlzYWJsZWQgewogICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICB9CgogICAgLnRvb2xiYXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIH0KCiAgICAucGFnZS1pbmZvIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnBhZ2UtaW5wdXQgewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwiaHNsKDIxNyAyNSUgMjglKSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC5wYWdlLWlucHV0OmZvY3VzIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICB9CgogICAgLnBhZ2Utc2VwYXJhdG9yIHsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA2MCUpIiwiaHNsKDIxNSAxNiUgNTAlKSIpfTsKICAgIH0KCiAgICAuem9vbS1sZXZlbCB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgbWluLXdpZHRoOiA0OHB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLnZpZXdlci1jb250YWluZXIgewogICAgICBmbGV4OiAxOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICB9CgogICAgLnNpZGViYXIgewogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgIGhlaWdodDogNDBweDsKICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTElKSIsImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZSB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5zaWRlYmFyLWNsb3NlOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC5zaWRlYmFyLWNsb3NlIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIH0KCiAgICAuc2lkZWJhci1jb250ZW50IHsKICAgICAgZmxleDogMTsKICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICBwYWRkaW5nOiAxMnB4OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAudGh1bWJuYWlsIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgLyogRGVmYXVsdCBBNCBhc3BlY3QgcmF0aW8gKDI5N21tIC8gMjEwbW0g4omIIDEuNDE0KSAqLwogICAgICBtaW4taGVpZ2h0OiBjYWxjKDE3NnB4ICogMS40MTQpOwogICAgfQoKICAgIC50aHVtYm5haWw6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB9CgogICAgLnRodW1ibmFpbDpob3ZlciB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCJoc2woMjE3IDI1JSAzNSUpIil9OwogICAgfQoKICAgIC50aHVtYm5haWwuYWN0aXZlIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICB9CgogICAgLnRodW1ibmFpbC1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC50aHVtYm5haWwtbnVtYmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDRweDsKICAgICAgcmlnaHQ6IDRweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC43KSIsInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAudmlld2VyLW1haW4gewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmxvYWRpbmctY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZ2FwOiAxNnB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICB3aWR0aDogMzJweDsKICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwiaHNsKDIxNyAyNSUgMjglKSIpfTsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAubG9hZGluZy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wYWdlcy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDIwcHg7CiAgICB9CgogICAgLnBhZ2Utd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuY2FudmFzLWNvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCJyZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLnBhZ2UtY2FudmFzIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlczsKICAgIH0KCiAgICAvKiBUZXh0IGxheWVyIGZvciBzZWxlY3Rpb24gKi8KICAgIC50ZXh0LWxheWVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBpbnNldDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB0ZXh0LXNpemUtYWRqdXN0OiBub25lOwogICAgICBmb3JjZWQtY29sb3ItYWRqdXN0OiBub25lOwogICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CiAgICAgIHotaW5kZXg6IDE7CiAgICAgIHVzZXItc2VsZWN0OiB0ZXh0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwogICAgfQoKICAgIC50ZXh0LWxheWVyIHNwYW4sCiAgICAudGV4dC1sYXllciBiciB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICBjdXJzb3I6IHRleHQ7CiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAlIDAlOwogICAgICB1c2VyLXNlbGVjdDogdGV4dDsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKICAgIH0KCiAgICAudGV4dC1sYXllciA6OnNlbGVjdGlvbiB7CiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAwLCAyMDAsIDAuMyk7CiAgICB9CgogICAgLnRleHQtbGF5ZXIgYnI6OnNlbGVjdGlvbiB7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgfQoKICAgIC50ZXh0LWxheWVyIC5lbmRPZkNvbnRlbnQgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBpbnNldDogMTAwJSAwIDA7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLnRleHQtbGF5ZXIuc2VsZWN0aW5nIC5lbmRPZkNvbnRlbnQgewogICAgICB0b3A6IDA7CiAgICB9CgogICAgLnBkZi12aWV3ZXIud2l0aC1zaWRlYmFyIC52aWV3ZXItbWFpbiB7CiAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgfQogIGBdfSk7dmFyIEpidCxldnQ9YigoKT0+e3VlKCk7SmJ0PSgpPT53YAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgS2EsazEsdHZ0LFVWPWIoKCk9Pnt1ZSgpO2x3KCk7UWJ0KCk7ZXZ0KCk7RXQoKTtLYT1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGsxPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSx0dnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXBkZi12aWV3ZXIiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXSxOLEw9W10sQT1bXSxxLEM9W10sej1bXSxFLFQ9W10sJD1bXSxWLFI9W10sVT1bXSxyZSxqPVtdLG1lPVtdLHdlLEg9W10sY2U9W107dmFyIGtlPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgVz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOk51bWJlcn0pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0koe3R5cGU6TnVtYmVyfSldLE49W0koe3R5cGU6TnVtYmVyfSldLHE9W0koe3R5cGU6TnVtYmVyfSldLEU9W0koe3R5cGU6Qm9vbGVhbn0pXSxWPVtJKHt0eXBlOlN0cmluZ30pXSxyZT1bSSh7dHlwZTpBcnJheX0pXSx3ZT1bSSh7dHlwZTpBcnJheX0pXSxLYSh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBkZlVybCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InBkZlVybCJpbiBELGdldDpEPT5ELnBkZlVybCxzZXQ6KEQsTyk9PntELnBkZlVybD1PfX0sbWV0YWRhdGE6V30sbixvKSxLYSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRpYWxQYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4iaW5pdGlhbFBhZ2UiaW4gRCxnZXQ6RD0+RC5pbml0aWFsUGFnZSxzZXQ6KEQsTyk9PntELmluaXRpYWxQYWdlPU99fSxtZXRhZGF0YTpXfSxjLHApLEthKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5pdGlhbFpvb20iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJpbml0aWFsWm9vbSJpbiBELGdldDpEPT5ELmluaXRpYWxab29tLHNldDooRCxPKT0+e0QuaW5pdGlhbFpvb209T319LG1ldGFkYXRhOld9LGYsZyksS2EodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzaG93VG9vbGJhciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InNob3dUb29sYmFyImluIEQsZ2V0OkQ9PkQuc2hvd1Rvb2xiYXIsc2V0OihELE8pPT57RC5zaG93VG9vbGJhcj1PfX0sbWV0YWRhdGE6V30sdixtKSxLYSh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dTaWRlYmFyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4ic2hvd1NpZGViYXIiaW4gRCxnZXQ6RD0+RC5zaG93U2lkZWJhcixzZXQ6KEQsTyk9PntELnNob3dTaWRlYmFyPU99fSxtZXRhZGF0YTpXfSxNLFMpLEthKHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudFBhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJjdXJyZW50UGFnZSJpbiBELGdldDpEPT5ELmN1cnJlbnRQYWdlLHNldDooRCxPKT0+e0QuY3VycmVudFBhZ2U9T319LG1ldGFkYXRhOld9LF8sayksS2EodGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0b3RhbFBhZ2VzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4idG90YWxQYWdlcyJpbiBELGdldDpEPT5ELnRvdGFsUGFnZXMsc2V0OihELE8pPT57RC50b3RhbFBhZ2VzPU99fSxtZXRhZGF0YTpXfSxMLEEpLEthKHRoaXMsbnVsbCxxLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudFpvb20iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkQ9PiJjdXJyZW50Wm9vbSJpbiBELGdldDpEPT5ELmN1cnJlbnRab29tLHNldDooRCxPKT0+e0QuY3VycmVudFpvb209T319LG1ldGFkYXRhOld9LEMseiksS2EodGhpcyxudWxsLEUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4ibG9hZGluZyJpbiBELGdldDpEPT5ELmxvYWRpbmcsc2V0OihELE8pPT57RC5sb2FkaW5nPU99fSxtZXRhZGF0YTpXfSxULCQpLEthKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZG9jdW1lbnRJZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+ImRvY3VtZW50SWQiaW4gRCxnZXQ6RD0+RC5kb2N1bWVudElkLHNldDooRCxPKT0+e0QuZG9jdW1lbnRJZD1PfX0sbWV0YWRhdGE6V30sUixVKSxLYSh0aGlzLG51bGwscmUse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0aHVtYm5haWxEYXRhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpEPT4idGh1bWJuYWlsRGF0YSJpbiBELGdldDpEPT5ELnRodW1ibmFpbERhdGEsc2V0OihELE8pPT57RC50aHVtYm5haWxEYXRhPU99fSxtZXRhZGF0YTpXfSxqLG1lKSxLYSh0aGlzLG51bGwsd2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYWdlRGF0YSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6RD0+InBhZ2VEYXRhImluIEQsZ2V0OkQ9PkQucGFnZURhdGEsc2V0OihELE8pPT57RC5wYWdlRGF0YT1PfX0sbWV0YWRhdGE6V30sSCxjZSksS2EobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6V30sbnVsbCxhKSxrZT1pPWUudmFsdWUsVyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpXfSl9c3RhdGljIGRlbW89SmJ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiLCJQREYiXTtzdGF0aWMgc3R5bGVzPUtidDsjZT1rMSh0aGlzLG4sIiIpO2dldCBwZGZVcmwoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcGRmVXJsKFcpe3RoaXMuI2U9V30jdD0oazEodGhpcyxvKSxrMSh0aGlzLGMsMSkpO2dldCBpbml0aWFsUGFnZSgpe3JldHVybiB0aGlzLiN0fXNldCBpbml0aWFsUGFnZShXKXt0aGlzLiN0PVd9I2E9KGsxKHRoaXMscCksazEodGhpcyxmLCJhdXRvIikpO2dldCBpbml0aWFsWm9vbSgpe3JldHVybiB0aGlzLiNhfXNldCBpbml0aWFsWm9vbShXKXt0aGlzLiNhPVd9I2k9KGsxKHRoaXMsZyksazEodGhpcyx2LCEwKSk7Z2V0IHNob3dUb29sYmFyKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNob3dUb29sYmFyKFcpe3RoaXMuI2k9V30jcj0oazEodGhpcyxtKSxrMSh0aGlzLE0sITEpKTtnZXQgc2hvd1NpZGViYXIoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2hvd1NpZGViYXIoVyl7dGhpcy4jcj1XfSNzPShrMSh0aGlzLFMpLGsxKHRoaXMsXywxKSk7Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGN1cnJlbnRQYWdlKFcpe3RoaXMuI3M9V30jbj0oazEodGhpcyxrKSxrMSh0aGlzLEwsMSkpO2dldCB0b3RhbFBhZ2VzKCl7cmV0dXJuIHRoaXMuI259c2V0IHRvdGFsUGFnZXMoVyl7dGhpcy4jbj1XfSNvPShrMSh0aGlzLEEpLGsxKHRoaXMsQywxKSk7Z2V0IGN1cnJlbnRab29tKCl7cmV0dXJuIHRoaXMuI299c2V0IGN1cnJlbnRab29tKFcpe3RoaXMuI289V30jbD0oazEodGhpcyx6KSxrMSh0aGlzLFQsITEpKTtnZXQgbG9hZGluZygpe3JldHVybiB0aGlzLiNsfXNldCBsb2FkaW5nKFcpe3RoaXMuI2w9V30jYz0oazEodGhpcywkKSxrMSh0aGlzLFIsIiIpKTtnZXQgZG9jdW1lbnRJZCgpe3JldHVybiB0aGlzLiNjfXNldCBkb2N1bWVudElkKFcpe3RoaXMuI2M9V30jZD0oazEodGhpcyxVKSxrMSh0aGlzLGosW10pKTtnZXQgdGh1bWJuYWlsRGF0YSgpe3JldHVybiB0aGlzLiNkfXNldCB0aHVtYm5haWxEYXRhKFcpe3RoaXMuI2Q9V30jcD0oazEodGhpcyxtZSksazEodGhpcyxILFtdKSk7Z2V0IHBhZ2VEYXRhKCl7cmV0dXJuIHRoaXMuI3B9c2V0IHBhZ2VEYXRhKFcpe3RoaXMuI3A9V31wZGZEb2N1bWVudD1rMSh0aGlzLGNlKTtyZW5kZXJTdGF0ZT0iaWRsZSI7cmVuZGVyQWJvcnRDb250cm9sbGVyPW51bGw7cGFnZVJlbmRlcmluZz0hMTtwYWdlTnVtUGVuZGluZz1udWxsO2N1cnJlbnRSZW5kZXJUYXNrPW51bGw7Y3VycmVudFJlbmRlclByb21pc2U9bnVsbDt0aHVtYm5haWxSZW5kZXJUYXNrcz1bXTtwYWdlUmVuZGVyVGFza3M9bmV3IE1hcDt0ZXh0TGF5ZXJSZW5kZXJUYXNrcz1uZXcgTWFwO2NhbnZhcztjdHg7dmlld2VyTWFpbj1udWxsO3Jlc2l6ZU9ic2VydmVyO2ludGVyc2VjdGlvbk9ic2VydmVyO3Njcm9sbFRocm90dGxlVGltZW91dDt2aWV3cG9ydERpbWVuc2lvbnM9e3dpZHRoOjAsaGVpZ2h0OjB9O3ZpZXdwb3J0TW9kZT0iYXV0byI7TUFOVUFMX01JTl9aT09NPS41O01BTlVBTF9NQVhfWk9PTT0zO0FCU09MVVRFX01JTl9aT09NPS4xO0FCU09MVVRFX01BWF9aT09NPTQ7UEFHRV9HQVA9MjA7UkVOREVSX0JVRkZFUj0zO2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0icGRmLXZpZXdlciAke3RoaXMuc2hvd1NpZGViYXI/IndpdGgtc2lkZWJhciI6IiJ9Ij4KICAgICAgICAke3RoaXMuc2hvd1Rvb2xiYXI/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByZXZpb3VzUGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2U8PTF9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Q2hldnJvbkxlZnQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtaW5mbyI+CiAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iJHt0aGlzLnRvdGFsUGFnZXN9IgogICAgICAgICAgICAgICAgICAudmFsdWU9JHtTdHJpbmcodGhpcy5jdXJyZW50UGFnZSl9CiAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZVBhZ2VJbnB1dH0KICAgICAgICAgICAgICAgICAgY2xhc3M9InBhZ2UtaW5wdXQiCiAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhZ2Utc2VwYXJhdG9yIj4vPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhZ2UtdG90YWwiPiR7dGhpcy50b3RhbFBhZ2VzfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLm5leHRQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZT49dGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20qMTAwKX0lPC9zcGFuPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuem9vbUlufQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbUlufQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlpvb21JbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1BhZ2V9CiAgICAgICAgICAgICAgICB0aXRsZT0iRml0IHRvIHBhZ2UiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6TWF4aW1pemUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuZml0VG9XaWR0aH0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gd2lkdGgiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6QXJyb3dMZWZ0UmlnaHQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAgdG9vbGJhci1ncm91cC0tZW5kIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5zaG93U2lkZWJhcj0hdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXI/IkhpZGUgdGh1bWJuYWlscyI6IlNob3cgdGh1bWJuYWlscyJ9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iJHt0aGlzLnNob3dTaWRlYmFyPyJsdWNpZGU6U2lkZWJhckNsb3NlIjoibHVjaWRlOlNpZGViYXIifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5kb3dubG9hZFBkZn0KICAgICAgICAgICAgICAgIHRpdGxlPSJEb3dubG9hZCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpEb3dubG9hZCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5wcmludFBkZn0KICAgICAgICAgICAgICAgIHRpdGxlPSJQcmludCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpQcmludGVyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQoKICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3ZXItY29udGFpbmVyIj4KICAgICAgICAgICR7dGhpcy5zaG93U2lkZWJhcj93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3Bhbj5QYWdlczwvc3Bhbj4KICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgY2xhc3M9InNpZGViYXItY2xvc2UiCiAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpPT50aGlzLnNob3dTaWRlYmFyPSExfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpYIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItY29udGVudCI+CiAgICAgICAgICAgICAgICAke2phLmtleWVkKHRoaXMuZG9jdW1lbnRJZCx3YAogICAgICAgICAgICAgICAgICAke2phLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsVz0+Vy5wYWdlLFc9PndgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aHVtYm5haWwgJHt0aGlzLmN1cnJlbnRQYWdlPT09Vy5wYWdlPyJhY3RpdmUiOiIifSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1wYWdlPSIke1cucGFnZX0iCiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlVGh1bWJuYWlsQ2xpY2t9CiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InRodW1ibmFpbC1jYW52YXMiIGRhdGEtcGFnZT0iJHtXLnBhZ2V9Ij48L2NhbnZhcz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRodW1ibmFpbC1udW1iZXIiPiR7Vy5wYWdlfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3ZXItbWFpbiIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLmxvYWRpbmc/d2AKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy10ZXh0Ij5Mb2FkaW5nIFBERi4uLjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOndgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZXMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICR7amEucmVwZWF0KHRoaXMucGFnZURhdGEsVz0+Vy5wYWdlLFc9PndgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS13cmFwcGVyIiBkYXRhLXBhZ2U9IiR7Vy5wYWdlfSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYW52YXMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0icGFnZS1jYW52YXMiIGRhdGEtcGFnZT0iJHtXLnBhZ2V9Ij48L2NhbnZhcz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1sYXllciIgZGF0YS1wYWdlPSIke1cucGFnZX0iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmVuc3VyZVZpZXdlclJlZnMoKSx0aGlzLnBkZlVybCYmKHRoaXMuZG9jdW1lbnRJZD1gJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCxhd2FpdCB0aGlzLmxvYWRQZGYoKSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPXZvaWQgMCx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDAsdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpLHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0PXZvaWQgMCksdGhpcy5yZW5kZXJTdGF0ZT0iZGlzcG9zZWQiLGF3YWl0IHRoaXMuY2xlYW51cERvY3VtZW50KCksdGhpcy5jYW52YXM9dm9pZCAwLHRoaXMuY3R4PXZvaWQgMH1hc3luYyB1cGRhdGVkKFcpe2lmKHN1cGVyLnVwZGF0ZWQoVyksVy5oYXMoInBkZlVybCIpJiZ0aGlzLnBkZlVybCl7bGV0IEQ9Vy5nZXQoInBkZlVybCIpO0QmJlhyLnJlbGVhc2VEb2N1bWVudChEKSx0aGlzLmRvY3VtZW50SWQ9YCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWAsYXdhaXQgdGhpcy5sb2FkUGRmKCl9Vy5oYXMoInNob3dTaWRlYmFyIikmJnRoaXMuc2hvd1NpZGViYXImJnRoaXMucGRmRG9jdW1lbnQmJihhd2FpdCBuZXcgUHJvbWlzZShEPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRCkpLHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKEQ9PkQucmVuZGVyZWQ9ITEpLGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpLHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpLHRoaXMuc2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcodGhpcy5jdXJyZW50UGFnZSkpfWFzeW5jIGxvYWRQZGYoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5yZW5kZXJTdGF0ZT0ibG9hZGluZyI7dHJ5e2F3YWl0IHRoaXMuY2xlYW51cERvY3VtZW50KCksdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlcjtsZXQgVz10aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5zaWduYWw7aWYodGhpcy5wZGZEb2N1bWVudD1hd2FpdCBYci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpLFcuYWJvcnRlZHx8KHRoaXMudG90YWxQYWdlcz10aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzLHRoaXMuY3VycmVudFBhZ2U9dGhpcy5pbml0aWFsUGFnZSx0aGlzLnJlc29sdmVJbml0aWFsVmlld3BvcnRNb2RlKCksdGhpcy50aHVtYm5haWxEYXRhPUFycmF5LmZyb20oe2xlbmd0aDp0aGlzLnRvdGFsUGFnZXN9LChELE8pPT4oe3BhZ2U6TysxLHJlbmRlcmVkOiExfSkpLHRoaXMucGFnZURhdGE9QXJyYXkuZnJvbSh7bGVuZ3RoOnRoaXMudG90YWxQYWdlc30sKEQsTyk9Pih7cGFnZTpPKzEscmVuZGVyZWQ6ITEscmVuZGVyaW5nOiExLHRleHRMYXllclJlbmRlcmVkOiExfSkpLHRoaXMubG9hZGluZz0hMSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMuZW5zdXJlVmlld2VyUmVmcygpLHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpLGF3YWl0IG5ldyBQcm9taXNlKEQ9PnJlcXVlc3RBbmltYXRpb25GcmFtZShEKSksVy5hYm9ydGVkKXx8KHRoaXMucmVuZGVyU3RhdGU9InJlbmRlcmluZy1tYWluIixhd2FpdCB0aGlzLnJlbmRlclZpc2libGVQYWdlcygpLFcuYWJvcnRlZCl8fCh0aGlzLmluaXRpYWxQYWdlPjEmJmF3YWl0IHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuaW5pdGlhbFBhZ2UsITEpLHRoaXMuc2hvd1NpZGViYXImJihhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLGF3YWl0IG5ldyBQcm9taXNlKEQ9PnJlcXVlc3RBbmltYXRpb25GcmFtZShEKSksVy5hYm9ydGVkfHwoYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCksVy5hYm9ydGVkKSkpKXJldHVybjt0aGlzLnJlbmRlclN0YXRlPSJyZW5kZXJlZCJ9Y2F0Y2goVyl7Y29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBQREY6IixXKSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5yZW5kZXJTdGF0ZT0iZXJyb3IifX1zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCl7dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoRD0+e2ZvcihsZXQgTyBvZiBEKXtsZXQgWj1PLnRhcmdldCxZPXBhcnNlSW50KFouZGF0YXNldC5wYWdlfHwiMSIpO08uaXNJbnRlcnNlY3RpbmcmJnRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKFkpfX0se3Jvb3Q6dGhpcy52aWV3ZXJNYWluLHJvb3RNYXJnaW46YCR7dGhpcy5SRU5ERVJfQlVGRkVSKjEwMH1weCAwcHhgLHRocmVzaG9sZDouMDF9KTtsZXQgVz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTtXJiZXLmZvckVhY2goRD0+e3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/Lm9ic2VydmUoRCl9KX1hc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKXtpZighdGhpcy52aWV3ZXJNYWluKXJldHVybjtsZXQgVz10aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0O2ZvcihsZXQgRCBvZiB0aGlzLnBhZ2VEYXRhKXtsZXQgTz10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke0QucGFnZX0iXWApO2lmKCFPKWNvbnRpbnVlO2xldCBaPU8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWT10aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksb2U9Wi50b3AtWS50b3AsZ2U9b2UrWi5oZWlnaHQsYmU9dGhpcy5SRU5ERVJfQlVGRkVSKlc7Z2U+PS1iZSYmb2U8PVcrYmUmJmF3YWl0IHRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKEQucGFnZSl9fWFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChXKXtsZXQgRD10aGlzLnBhZ2VEYXRhLmZpbmQoTz0+Ty5wYWdlPT09Vyk7aWYoISghRHx8RC5yZW5kZXJlZHx8RC5yZW5kZXJpbmcpKXtELnJlbmRlcmluZz0hMDt0cnl7bGV0IE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS1jYW52YXNbZGF0YS1wYWdlPSIke1d9Il1gKTtpZighTyl7RC5yZW5kZXJpbmc9ITE7cmV0dXJufWxldCBaPWF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShXKSxZPXRoaXMuY29tcHV0ZVZpZXdwb3J0KFopLG9lPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO08ud2lkdGg9TWF0aC5mbG9vcihZLndpZHRoKm9lKSxPLmhlaWdodD1NYXRoLmZsb29yKFkuaGVpZ2h0Km9lKSxPLnN0eWxlLndpZHRoPWAke1kud2lkdGh9cHhgLE8uc3R5bGUuaGVpZ2h0PWAke1kuaGVpZ2h0fXB4YDtsZXQgZ2U9Ty5nZXRDb250ZXh0KCIyZCIpO2lmKCFnZSl7Wi5jbGVhbnVwPy4oKSxELnJlbmRlcmluZz0hMTtyZXR1cm59Z2Uuc2NhbGUob2Usb2UpO2xldCBiZT17Y2FudmFzQ29udGV4dDpnZSx2aWV3cG9ydDpZfSwkZT1aLnJlbmRlcihiZSk7dGhpcy5wYWdlUmVuZGVyVGFza3Muc2V0KFcsJGUpLGF3YWl0ICRlLnByb21pc2UsWi5jbGVhbnVwPy4oKSxELnJlbmRlcmVkPSEwLEQucmVuZGVyaW5nPSExLHRoaXMucGFnZVJlbmRlclRhc2tzLmRlbGV0ZShXKSxhd2FpdCB0aGlzLnJlbmRlclRleHRMYXllcihXKSx0aGlzLnJlcXVlc3RVcGRhdGUoInBhZ2VEYXRhIil9Y2F0Y2goTyl7Tz8ubmFtZSE9PSJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iJiZjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgcGFnZSAke1d9OmAsTyksRC5yZW5kZXJpbmc9ITEsdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKFcpfX19YXN5bmMgcmVuZGVyVGV4dExheWVyKFcpe2xldCBEPXRoaXMucGFnZURhdGEuZmluZChPPT5PLnBhZ2U9PT1XKTtpZighKCFEfHxELnRleHRMYXllclJlbmRlcmVkKSl0cnl7bGV0IE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGV4dC1sYXllcltkYXRhLXBhZ2U9IiR7V30iXWApO2lmKCFPKXJldHVybjtPLmlubmVySFRNTD0iIjtsZXQgWj1hd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UoVyksWT1hd2FpdCBaLmdldFRleHRDb250ZW50KCksb2U9dGhpcy5jb21wdXRlVmlld3BvcnQoWiksZ2U9YXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7Ty5zdHlsZS53aWR0aD1gJHtvZS53aWR0aH1weGAsTy5zdHlsZS5oZWlnaHQ9YCR7b2UuaGVpZ2h0fXB4YCxPLnN0eWxlLnNldFByb3BlcnR5KCItLXNjYWxlLWZhY3RvciIsU3RyaW5nKG9lLnNjYWxlKSk7bGV0IGJlPWdlLnJlbmRlclRleHRMYXllcih7dGV4dENvbnRlbnRTb3VyY2U6WSxjb250YWluZXI6Tyx2aWV3cG9ydDpvZX0pO3RoaXMudGV4dExheWVyUmVuZGVyVGFza3Muc2V0KFcsYmUpLGF3YWl0IGJlLnByb21pc2U7bGV0ICRlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyRlLmNsYXNzTmFtZT0iZW5kT2ZDb250ZW50IixPLmFwcGVuZENoaWxkKCRlKTtsZXQgQj0hMSxQPW51bGwsSj0wLGZlPShoZSx0ZSk9PntsZXQgemU9QXJyYXkuZnJvbShPLnF1ZXJ5U2VsZWN0b3JBbGwoInNwYW4iKSk7Zm9yKGxldCBGZSBvZiB6ZSl7bGV0IEdlPUZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGhlPj1HZS5sZWZ0JiZoZTw9R2UucmlnaHQmJnRlPj1HZS50b3AmJnRlPD1HZS5ib3R0b20pe2xldCB5ZT1GZS5maXJzdENoaWxkO2lmKHllJiZ5ZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgZWU9eWUudGV4dENvbnRlbnR8fCIiLGFlPUdlLndpZHRoL2VlLmxlbmd0aCx2ZT1oZS1HZS5sZWZ0LFBlPU1hdGgubWluKE1hdGgucm91bmQodmUvYWUpLGVlLmxlbmd0aCk7cmV0dXJue25vZGU6eWUsb2Zmc2V0OlBlfX19fXJldHVybiBudWxsfSxkZT0oKT0+e0ImJihCPSExLFA9bnVsbCxPLmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGluZyIpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixkZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixfZSl9LF9lPWhlPT57aWYoIUJ8fCFQKXJldHVybjtoZS5wcmV2ZW50RGVmYXVsdCgpO2xldCB0ZT1mZShoZS5jbGllbnRYLGhlLmNsaWVudFkpO2lmKHRlKXtsZXQgemU9d2luZG93LmdldFNlbGVjdGlvbigpO2lmKHplKXRyeXt6ZS5zZXRCYXNlQW5kRXh0ZW50KFAsSix0ZS5ub2RlLHRlLm9mZnNldCl9Y2F0Y2h7fX19O08uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixoZT0+e2lmKGhlLmJ1dHRvbiE9PTApcmV0dXJuO2xldCB0ZT1mZShoZS5jbGllbnRYLGhlLmNsaWVudFkpO3RlJiYoaGUucHJldmVudERlZmF1bHQoKSxCPSEwLFA9dGUubm9kZSxKPXRlLm9mZnNldCxPLmNsYXNzTGlzdC5hZGQoInNlbGVjdGluZyIpLHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixfZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZGUpKX0pLEQudGV4dExheWVyUmVuZGVyZWQ9ITAsWi5jbGVhbnVwPy4oKSx0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmRlbGV0ZShXKX1jYXRjaChPKXtPPy5uYW1lIT09IlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiImJmNvbnNvbGUuZXJyb3IoYEVycm9yIHJlbmRlcmluZyB0ZXh0IGxheWVyIGZvciBwYWdlICR7V306YCxPKSx0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmRlbGV0ZShXKX19aGFuZGxlU2Nyb2xsPSgpPT57dGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCksdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQ9d2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0ZUN1cnJlbnRQYWdlKCksdGhpcy5yZW5kZXJWaXNpYmxlUGFnZXMoKX0sNTApfTt1cGRhdGVDdXJyZW50UGFnZSgpe2lmKCF0aGlzLnZpZXdlck1haW4pcmV0dXJuO2xldCBXPXRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3AsRD10aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0LE89VytELzI7Zm9yKGxldCBaPTA7Wjx0aGlzLnBhZ2VEYXRhLmxlbmd0aDtaKyspe2xldCBZPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLnBhZ2Utd3JhcHBlcltkYXRhLXBhZ2U9IiR7WisxfSJdYCk7aWYoIVkpY29udGludWU7bGV0IG9lPVkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZ2U9dGhpcy52aWV3ZXJNYWluLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGJlPW9lLnRvcC1nZS50b3ArVywkZT1iZStvZS5oZWlnaHQ7aWYoTz49YmUmJk88PSRlKXt0aGlzLmN1cnJlbnRQYWdlIT09WisxJiYodGhpcy5jdXJyZW50UGFnZT1aKzEsdGhpcy5zaG93U2lkZWJhciYmdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhaKzEpKTticmVha319fXNjcm9sbFRodW1ibmFpbEludG9WaWV3KFcpe2xldCBEPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLnRodW1ibmFpbFtkYXRhLXBhZ2U9IiR7V30iXWApLE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50Iik7aWYoRCYmTyl7bGV0IFo9RC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxZPU8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksb2U9Wi50b3A8WS50b3AsZ2U9Wi5ib3R0b20+WS5ib3R0b207aWYob2V8fGdlKXtsZXQgYmU9RC5vZmZzZXRUb3AsJGU9RC5vZmZzZXRIZWlnaHQsQj1PLmNsaWVudEhlaWdodCxQPWJlLUIvMiskZS8yO08uc2Nyb2xsVG8oe3RvcDpNYXRoLm1heCgwLFApLGJlaGF2aW9yOiJzbW9vdGgifSl9fX1hc3luYyBzY3JvbGxUb1BhZ2UoVyxEPSEwKXthd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO2xldCBPPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLnBhZ2Utd3JhcHBlcltkYXRhLXBhZ2U9IiR7V30iXWApO2lmKE8mJnRoaXMudmlld2VyTWFpbil7bGV0IFo9Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxZPXRoaXMudmlld2VyTWFpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnZT10aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wKyhaLnRvcC1ZLnRvcCktdGhpcy52aWV3ZXJNYWluLmNsaWVudFRvcDtEP3RoaXMudmlld2VyTWFpbi5zY3JvbGxUbyh7dG9wOmdlLGJlaGF2aW9yOiJzbW9vdGgifSk6dGhpcy52aWV3ZXJNYWluLnNjcm9sbFRvcD1nZSx0aGlzLmN1cnJlbnRQYWdlPVcsdGhpcy5zaG93U2lkZWJhciYmdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhXKSxhd2FpdCB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChXKX19YXN5bmMgcmVuZGVyVGh1bWJuYWlscygpe2lmKCF0aGlzLnBkZkRvY3VtZW50fHx0aGlzLnRodW1ibmFpbERhdGEubGVuZ3RoPjAmJnRoaXMudGh1bWJuYWlsRGF0YS5ldmVyeShEPT5ELnJlbmRlcmVkKXx8dGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbC5hYm9ydGVkKXJldHVybjtsZXQgVz10aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsO3RoaXMucmVuZGVyU3RhdGU9InJlbmRlcmluZy10aHVtYnMiO2ZvcihsZXQgRCBvZiB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzKXRyeXtELmNhbmNlbCgpfWNhdGNoe310aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzPVtdO3RyeXthd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO2xldCBEPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLnRodW1ibmFpbCIpLE89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsLWNhbnZhcyIpLFo9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50IiksWT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShaKSxnZT0yMDAtKHBhcnNlRmxvYXQoWS5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdChZLnBhZGRpbmdSaWdodCkpLTQ7Zm9yKGxldCBiZSBvZiBBcnJheS5mcm9tKE8pKXtsZXQgJGU9YmUuZ2V0Q29udGV4dCgiMmQiKTskZSYmJGUuY2xlYXJSZWN0KDAsMCxiZS53aWR0aCxiZS5oZWlnaHQpfWZvcihsZXQgYmU9MDtiZTxPLmxlbmd0aDtiZSsrKXtpZihXPy5hYm9ydGVkKXJldHVybjtsZXQgJGU9T1tiZV0sQj1EW2JlXSxQPXBhcnNlSW50KCRlLmRhdGFzZXQucGFnZXx8IjEiKSxKPWF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShQKSxmZT1KLmdldFZpZXdwb3J0KHtzY2FsZToxfSksZGU9Z2UvZmUud2lkdGgsX2U9Si5nZXRWaWV3cG9ydCh7c2NhbGU6ZGV9KSxoZT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTskZS53aWR0aD1NYXRoLmZsb29yKF9lLndpZHRoKmhlKSwkZS5oZWlnaHQ9TWF0aC5mbG9vcihfZS5oZWlnaHQqaGUpLCRlLnN0eWxlLndpZHRoPWAke19lLndpZHRofXB4YCwkZS5zdHlsZS5oZWlnaHQ9YCR7X2UuaGVpZ2h0fXB4YCxCLnN0eWxlLmhlaWdodD1gJHtfZS5oZWlnaHR9cHhgLEIuc3R5bGUubWluSGVpZ2h0PWAke19lLmhlaWdodH1weGA7bGV0IHRlPSRlLmdldENvbnRleHQoIjJkIik7aWYoIXRlKXtKLmNsZWFudXA/LigpO2NvbnRpbnVlfXRlLnNjYWxlKGhlLGhlKTtsZXQgemU9e2NhbnZhc0NvbnRleHQ6dGUsdmlld3BvcnQ6X2V9LEZlPUoucmVuZGVyKHplKTt0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzLnB1c2goRmUpLGF3YWl0IEZlLnByb21pc2UsSi5jbGVhbnVwPy4oKTtsZXQgR2U9dGhpcy50aHVtYm5haWxEYXRhLmZpbmQoeWU9PnllLnBhZ2U9PT1QKTtHZSYmKEdlLnJlbmRlcmVkPSEwKX10aGlzLnJlcXVlc3RVcGRhdGUoInRodW1ibmFpbERhdGEiKX1jYXRjaChEKXtEPy5uYW1lIT09IlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiImJmNvbnNvbGUuZXJyb3IoIkVycm9yIHJlbmRlcmluZyB0aHVtYm5haWxzOiIsRCl9ZmluYWxseXt0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzPVtdfX1wcmV2aW91c1BhZ2UoKXt0aGlzLmN1cnJlbnRQYWdlPjEmJnRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UtMSl9bmV4dFBhZ2UoKXt0aGlzLmN1cnJlbnRQYWdlPHRoaXMudG90YWxQYWdlcyYmdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5jdXJyZW50UGFnZSsxKX1oYW5kbGVUaHVtYm5haWxDbGljayhXKXtsZXQgRD1XLmN1cnJlbnRUYXJnZXQsTz1wYXJzZUludChELmRhdGFzZXQucGFnZXx8IjEiKTt0aGlzLnNjcm9sbFRvUGFnZShPKX1oYW5kbGVQYWdlSW5wdXQoVyl7bGV0IEQ9Vy50YXJnZXQsTz1wYXJzZUludChELnZhbHVlKTt0aGlzLnNjcm9sbFRvUGFnZShPKX16b29tSW4oKXtsZXQgVz1NYXRoLm1pbih0aGlzLk1BTlVBTF9NQVhfWk9PTSx0aGlzLmN1cnJlbnRab29tKjEuMik7dGhpcy52aWV3cG9ydE1vZGU9ImN1c3RvbSIsVyE9PXRoaXMuY3VycmVudFpvb20mJih0aGlzLmN1cnJlbnRab29tPVcsdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCkpfXpvb21PdXQoKXtsZXQgVz1NYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSx0aGlzLmN1cnJlbnRab29tLzEuMik7dGhpcy52aWV3cG9ydE1vZGU9ImN1c3RvbSIsVyE9PXRoaXMuY3VycmVudFpvb20mJih0aGlzLmN1cnJlbnRab29tPVcsdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCkpfXJlc2V0Wm9vbSgpe3RoaXMudmlld3BvcnRNb2RlPSJjdXN0b20iLHRoaXMuY3VycmVudFpvb209MSx0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKX1maXRUb1BhZ2UoKXt0aGlzLnZpZXdwb3J0TW9kZT0icGFnZS1maXQiLHRoaXMucmVSZW5kZXJBbGxQYWdlcygpfWZpdFRvV2lkdGgoKXt0aGlzLnZpZXdwb3J0TW9kZT0icGFnZS13aWR0aCIsdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCl9cmVSZW5kZXJBbGxQYWdlcygpe3RoaXMucGFnZURhdGEuZm9yRWFjaChXPT57Vy5yZW5kZXJlZD0hMSxXLnJlbmRlcmluZz0hMSxXLnRleHRMYXllclJlbmRlcmVkPSExfSksdGhpcy5wYWdlUmVuZGVyVGFza3MuZm9yRWFjaChXPT57dHJ5e1cuY2FuY2VsKCl9Y2F0Y2h7fX0pLHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCksdGhpcy50ZXh0TGF5ZXJSZW5kZXJUYXNrcy5mb3JFYWNoKFc9Pnt0cnl7Vy5jYW5jZWw/LigpfWNhdGNoe319KSx0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmNsZWFyKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpPT57dGhpcy5yZW5kZXJWaXNpYmxlUGFnZXMoKX0pfWFzeW5jIGRvd25sb2FkUGRmKCl7aWYodGhpcy5wZGZEb2N1bWVudCl0cnl7bGV0IFc9YXdhaXQgdGhpcy5wZGZEb2N1bWVudC5nZXREYXRhKCksRD1uZXcgQmxvYihbVy5idWZmZXJdLHt0eXBlOiJhcHBsaWNhdGlvbi9wZGYifSksTz1VUkwuY3JlYXRlT2JqZWN0VVJMKEQpLFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO1ouaHJlZj1PLFouZG93bmxvYWQ9dGhpcy5wZGZVcmwmJnRoaXMucGRmVXJsLnNwbGl0KCIvIikucG9wKCl8fCJkb2N1bWVudC5wZGYiLFouY2xpY2soKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKE8pLDFlMyl9Y2F0Y2goVyl7Y29uc29sZS5lcnJvcigiRXJyb3IgZG93bmxvYWRpbmcgUERGOiIsVyl9fWFzeW5jIHByaW50UGRmKCl7aWYodGhpcy5wZGZEb2N1bWVudCl0cnl7bGV0IFc9YXdhaXQgdGhpcy5wZGZEb2N1bWVudC5nZXREYXRhKCksRD1uZXcgQmxvYihbVy5idWZmZXJdLHt0eXBlOiJhcHBsaWNhdGlvbi9wZGYifSksTz1VUkwuY3JlYXRlT2JqZWN0VVJMKEQpLFo9YAogICAgICAgIDwhRE9DVFlQRSBodG1sPgogICAgICAgIDxodG1sPgogICAgICAgIDxoZWFkPgogICAgICAgICAgPHRpdGxlPlByaW50IFBERjwvdGl0bGU+CiAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH0KICAgICAgICAgICAgaHRtbCwgYm9keSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IH0KICAgICAgICAgICAgaWZyYW1lIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiBub25lOyB9CiAgICAgICAgICAgIEBtZWRpYSBwcmludCB7CiAgICAgICAgICAgICAgaHRtbCwgYm9keSwgaWZyYW1lIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfQogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgIDwvaGVhZD4KICAgICAgICA8Ym9keT4KICAgICAgICAgIDxpZnJhbWUgc3JjPSIke099IiB0eXBlPSJhcHBsaWNhdGlvbi9wZGYiPjwvaWZyYW1lPgogICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5wcmludCgpOwogICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHdpbmRvdy5vbmFmdGVycHJpbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgLy8gU2FmZXR5IGNsb3NlIGFmdGVyIDIgbWludXRlcwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB3aW5kb3cuY2xvc2UoKTsgfSwgMTIwMDAwKTsKICAgICAgICAgIDxcL3NjcmlwdD4KICAgICAgICA8L2JvZHk+CiAgICAgICAgPC9odG1sPgogICAgICBgLFk9bmV3IEJsb2IoW1pdLHt0eXBlOiJ0ZXh0L2h0bWwifSksb2U9VVJMLmNyZWF0ZU9iamVjdFVSTChZKSxnZT13aW5kb3cub3BlbihvZSwiX2JsYW5rIiwid2lkdGg9ODAwLGhlaWdodD02MDAiKTtpZihnZSl7bGV0IGJlPXNldEludGVydmFsKCgpPT57Z2UuY2xvc2VkJiYoY2xlYXJJbnRlcnZhbChiZSksVVJMLnJldm9rZU9iamVjdFVSTChPKSxVUkwucmV2b2tlT2JqZWN0VVJMKG9lKSl9LDUwMCk7c2V0VGltZW91dCgoKT0+e2NsZWFySW50ZXJ2YWwoYmUpLFVSTC5yZXZva2VPYmplY3RVUkwoTyksVVJMLnJldm9rZU9iamVjdFVSTChvZSl9LDEyZTQpfWVsc2Ugd2luZG93Lm9wZW4oTywiX2JsYW5rIiksc2V0VGltZW91dCgoKT0+VVJMLnJldm9rZU9iamVjdFVSTChPKSw2ZTQpLFVSTC5yZXZva2VPYmplY3RVUkwob2UpfWNhdGNoKFcpe2NvbnNvbGUuZXJyb3IoIkVycm9yIHByaW50aW5nIFBERjoiLFcpfX1nZXRDb250ZXh0TWVudUl0ZW1zKCl7bGV0IFc9W10sTz13aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCl8fCIiO3JldHVybiBPJiYoVy5wdXNoKHtuYW1lOiJDb3B5IixpY29uTmFtZToibHVjaWRlOkNvcHkiLGFjdGlvbjphc3luYygpPT57YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoTyl9fSksVy5wdXNoKHtkaXZpZGVyOiEwfSkpLFcucHVzaCh7bmFtZToiRG93bmxvYWQgUERGIixpY29uTmFtZToibHVjaWRlOkRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+e2F3YWl0IHRoaXMuZG93bmxvYWRQZGYoKX19LHtuYW1lOiJQcmludCBQREYiLGljb25OYW1lOiJsdWNpZGU6UHJpbnRlciIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLnByaW50UGRmKCl9fSksV31nZXQgY2FuWm9vbUluKCl7cmV0dXJuIHRoaXMudmlld3BvcnRNb2RlIT09ImN1c3RvbSJ8fHRoaXMuY3VycmVudFpvb208dGhpcy5NQU5VQUxfTUFYX1pPT019Z2V0IGNhblpvb21PdXQoKXtyZXR1cm4gdGhpcy52aWV3cG9ydE1vZGUhPT0iY3VzdG9tInx8dGhpcy5jdXJyZW50Wm9vbT50aGlzLk1BTlVBTF9NSU5fWk9PTX1lbnN1cmVWaWV3ZXJSZWZzKCl7dGhpcy52aWV3ZXJNYWlufHwodGhpcy52aWV3ZXJNYWluPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXdlci1tYWluIikpLHRoaXMudmlld2VyTWFpbiYmIXRoaXMucmVzaXplT2JzZXJ2ZXImJih0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpLHRoaXMucGRmRG9jdW1lbnQmJnRoaXMucmVSZW5kZXJBbGxQYWdlcygpfSksdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMudmlld2VyTWFpbiksdGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCksdGhpcy52aWV3ZXJNYWluLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixXPT57bGV0IEQ9Vy5jdXJyZW50VGFyZ2V0LE89RC5zY3JvbGxUb3AsWj1ELnNjcm9sbEhlaWdodCxZPUQuY2xpZW50SGVpZ2h0LG9lPVcuZGVsdGFZLGdlPU89PT0wLGJlPU1hdGguYWJzKE8rWS1aKTwxO29lPDAmJiFnZXx8b2U+MCYmIWJlP1cuc3RvcFByb3BhZ2F0aW9uKCk6KG9lPDAmJmdlfHxvZT4wJiZiZSkmJihXLnByZXZlbnREZWZhdWx0KCksVy5zdG9wUHJvcGFnYXRpb24oKSl9LHtwYXNzaXZlOiExfSkpfW1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKXtpZighdGhpcy52aWV3ZXJNYWluKXt0aGlzLnZpZXdwb3J0RGltZW5zaW9ucz17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJufWxldCBXPWdldENvbXB1dGVkU3R5bGUodGhpcy52aWV3ZXJNYWluKSxEPXBhcnNlRmxvYXQoVy5wYWRkaW5nTGVmdHx8IjAiKStwYXJzZUZsb2F0KFcucGFkZGluZ1JpZ2h0fHwiMCIpLE89cGFyc2VGbG9hdChXLnBhZGRpbmdUb3B8fCIwIikrcGFyc2VGbG9hdChXLnBhZGRpbmdCb3R0b218fCIwIiksWj1NYXRoLm1heCh0aGlzLnZpZXdlck1haW4uY2xpZW50V2lkdGgtRCwwKSxZPU1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQtTywwKTt0aGlzLnZpZXdwb3J0RGltZW5zaW9ucz17d2lkdGg6WixoZWlnaHQ6WX19cmVzb2x2ZUluaXRpYWxWaWV3cG9ydE1vZGUoKXt0eXBlb2YgdGhpcy5pbml0aWFsWm9vbT09Im51bWJlciI/KHRoaXMudmlld3BvcnRNb2RlPSJjdXN0b20iLHRoaXMuY3VycmVudFpvb209dGhpcy5ub3JtYWxpemVab29tKHRoaXMuaW5pdGlhbFpvb20sITApKTp0aGlzLmluaXRpYWxab29tPT09InBhZ2Utd2lkdGgiP3RoaXMudmlld3BvcnRNb2RlPSJwYWdlLXdpZHRoIjp0aGlzLmluaXRpYWxab29tPT09InBhZ2UtZml0Inx8dGhpcy5pbml0aWFsWm9vbT09PSJhdXRvIj90aGlzLnZpZXdwb3J0TW9kZT0icGFnZS1maXQiOnRoaXMudmlld3BvcnRNb2RlPSJhdXRvIix0aGlzLnZpZXdwb3J0TW9kZSE9PSJjdXN0b20iJiYodGhpcy5jdXJyZW50Wm9vbT0xKX1jb21wdXRlVmlld3BvcnQoVyl7dGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCk7bGV0IEQ9Vy5nZXRWaWV3cG9ydCh7c2NhbGU6MX0pLE87c3dpdGNoKHRoaXMudmlld3BvcnRNb2RlKXtjYXNlInBhZ2Utd2lkdGgiOntPPSh0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aHx8RC53aWR0aCkvRC53aWR0aDticmVha31jYXNlInBhZ2UtZml0IjpjYXNlImF1dG8iOntsZXQgWT10aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aHx8RC53aWR0aCxvZT10aGlzLnZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHR8fEQuaGVpZ2h0LGdlPVkvRC53aWR0aCxiZT1vZS9ELmhlaWdodDtPPU1hdGgubWluKGdlLGJlKTticmVha31kZWZhdWx0OntPPXRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmN1cnJlbnRab29tfHwxLCExKTticmVha319KCFOdW1iZXIuaXNGaW5pdGUoTyl8fE88PTApJiYoTz0xKTtsZXQgWj10aGlzLnZpZXdwb3J0TW9kZT09PSJjdXN0b20iP3RoaXMubm9ybWFsaXplWm9vbShPLCEwKTp0aGlzLm5vcm1hbGl6ZVpvb20oTywhMSk7cmV0dXJuIHRoaXMudmlld3BvcnRNb2RlIT09ImN1c3RvbSImJih0aGlzLmN1cnJlbnRab29tPVopLFcuZ2V0Vmlld3BvcnQoe3NjYWxlOlp9KX1ub3JtYWxpemVab29tKFcsRCl7bGV0IE89RD90aGlzLk1BTlVBTF9NSU5fWk9PTTp0aGlzLkFCU09MVVRFX01JTl9aT09NLFo9RD90aGlzLk1BTlVBTF9NQVhfWk9PTTp0aGlzLkFCU09MVVRFX01BWF9aT09NO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChXLE8pLFopfWFzeW5jIGNsZWFudXBEb2N1bWVudCgpe2lmKHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyJiYodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIuYWJvcnQoKSx0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj1udWxsKSx0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlKXt0cnl7YXdhaXQgdGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZX1jYXRjaHt9dGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZT1udWxsfXRoaXMuY3VycmVudFJlbmRlclRhc2s9bnVsbCx0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKFc9Pnt0cnl7Vy5jYW5jZWwoKX1jYXRjaHt9fSksdGhpcy5wYWdlUmVuZGVyVGFza3MuY2xlYXIoKSx0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmZvckVhY2goVz0+e3RyeXtXLmNhbmNlbD8uKCl9Y2F0Y2h7fX0pLHRoaXMudGV4dExheWVyUmVuZGVyVGFza3MuY2xlYXIoKTtmb3IobGV0IFcgb2YgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrc3x8W10pdHJ5e1cuY2FuY2VsKCl9Y2F0Y2h7fWlmKHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3M9W10sdGhpcy5yZW5kZXJTdGF0ZT0iaWRsZSIsdGhpcy5wYWdlUmVuZGVyaW5nPSExLHRoaXMucGFnZU51bVBlbmRpbmc9bnVsbCx0aGlzLnRodW1ibmFpbERhdGE9W10sdGhpcy5wYWdlRGF0YT1bXSx0aGlzLmRvY3VtZW50SWQ9IiIsdGhpcy5jYW52YXMmJnRoaXMuY3R4JiZ0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCksdGhpcy5wZGZEb2N1bWVudCl0cnl7dGhpcy5wZGZEb2N1bWVudC5kZXN0cm95KCl9Y2F0Y2goVyl7Y29uc29sZS5lcnJvcigiRXJyb3IgZGVzdHJveWluZyBQREYgZG9jdW1lbnQ6IixXKX10aGlzLnBkZkRvY3VtZW50PW51bGwsdGhpcy5yZXF1ZXN0VXBkYXRlKCl9c3RhdGlje2sxKGksYSl9fTtyZXR1cm4ga2U9aX0pKCl9KTt2YXIgYXZ0LGl2dD1iKCgpPT57dWUoKTthdnQ9KCk9PndgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmOGY5ZmEiLCIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDQwcHg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBtYXgtd2lkdGg6IDkwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KCiAgICAucHJldmlldy1pbWFnZSB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgLnByZXZpZXctcGRmIHsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SW1hZ2UgUHJldmlldyAoVVJMKTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BdXRvLWRldGVjdHMgaW1hZ2UgZnJvbSBVUkwgZXh0ZW5zaW9uIGFuZCByZW5kZXJzIHdpdGggdGhlIGltYWdlIHZpZXdlci48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIGNsYXNzPSJwcmV2aWV3LWltYWdlIgogICAgICAgIHVybD0iaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE1MDY3NDQwMzgxMzYtNDYyNzM4MzRiM2ZiP3c9MTIwMCIKICAgICAgICBmaWxlbmFtZT0ibGFuZHNjYXBlLmpwZyIKICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBERiBQcmV2aWV3IChVUkwpPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkF1dG8tZGV0ZWN0cyBQREYgYW5kIGRpc3BsYXlzIHdpdGggdGhlIFBERiB2aWV3ZXIgaW5jbHVkaW5nIHRvb2xiYXIuPC9kaXY+CiAgICAgIDxkZWVzLXByZXZpZXcKICAgICAgICBjbGFzcz0icHJldmlldy1wZGYiCiAgICAgICAgdXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgZmlsZW5hbWU9InJlc2VhcmNoLXBhcGVyLnBkZiIKICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvZGUgUHJldmlldyAoVGV4dCBDb250ZW50KTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5UeXBlU2NyaXB0IGNvZGUgZGlzcGxheWVkIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyB2aWEgdGhlIGNvZGVib3guPC9kaXY+CiAgICAgIDxkZWVzLXByZXZpZXcKICAgICAgICBmaWxlbmFtZT0iZXhhbXBsZS50cyIKICAgICAgICBsYW5ndWFnZT0idHlwZXNjcmlwdCIKICAgICAgICAudGV4dENvbnRlbnQ9JHtgaW1wb3J0IHsgaHRtbCwgY3NzIH0gZnJvbSAnbGl0JzsKCmV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBleHRlbmRzIExpdEVsZW1lbnQgewogIHN0YXRpYyBzdHlsZXMgPSBjc3NcYAogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcGFkZGluZzogMTZweDsKICAgIH0KICBcYDsKCiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWxcYDxoMT5IZWxsbyBXb3JsZDwvaDE+XGA7CiAgfQp9YH0KICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1ZGlvIFByZXZpZXcgKFVSTCk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QXVkaW8gZmlsZSBkZXRlY3RlZCBieSBleHRlbnNpb24sIHNob3duIHdpdGggd2F2ZWZvcm0gcGxheWVyLjwvZGl2PgogICAgICA8ZGVlcy1wcmV2aWV3CiAgICAgICAgdXJsPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTEubXAzIgogICAgICAgIGZpbGVuYW1lPSJzb25nLm1wMyIKICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlZpZGVvIFByZXZpZXcgKFVSTCk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+VmlkZW8gZmlsZSBkZXRlY3RlZCBmcm9tIFVSTCwgcmVuZGVyZWQgd2l0aCBjdXN0b20gdmlkZW8gY29udHJvbHMuPC9kaXY+CiAgICAgIDxkZWVzLXByZXZpZXcKICAgICAgICB1cmw9Imh0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ3R2LXZpZGVvcy1idWNrZXQvc2FtcGxlL0JpZ0J1Y2tCdW5ueS5tcDQiCiAgICAgICAgZmlsZW5hbWU9ImJpZy1idWNrLWJ1bm55Lm1wNCIKICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkV4cGxpY2l0IFR5cGUgT3ZlcnJpZGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Rm9yY2UgY29udGVudCB0eXBlIHRvICd0ZXh0JyBldmVuIHRob3VnaCB0aGUgVVJMIGhhcyBubyBleHRlbnNpb24uPC9kaXY+CiAgICAgIDxkZWVzLXByZXZpZXcKICAgICAgICBjb250ZW50VHlwZT0idGV4dCIKICAgICAgICAudGV4dENvbnRlbnQ9JHtgVGhpcyBpcyBwbGFpbiB0ZXh0IGNvbnRlbnQuCkl0IHByZXNlcnZlcyB3aGl0ZXNwYWNlIGFuZCBsaW5lIGJyZWFrcy4KClVzZWZ1bCBmb3IgbG9nIGZpbGVzLCBSRUFETUVzLCBldGMuYH0KICAgICAgICBmaWxlbmFtZT0ibm90ZXMudHh0IgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VW5rbm93biBUeXBlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPldoZW4gY29udGVudCB0eXBlIGNhbm5vdCBiZSBkZXRlY3RlZCwgc2hvd3MgYSBwbGFjZWhvbGRlci48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIGZpbGVuYW1lPSJkYXRhLmJpbiIKICAgICAgICBjb250ZW50VHlwZT0idW5rbm93biIKICAgICAgPjwvZGVlcy1wcmV2aWV3PgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgRTIsSHQscnZ0LFRVdCxMVXQsJFV0LHN2dCxudnQ9YigoKT0+e3VlKCk7cVYoKTtWVigpO2pWKCk7Z1YoKTtVVigpO0V0KCk7aXZ0KCk7RTI9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxIdD1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0scnZ0PXtqcGc6ImltYWdlIixqcGVnOiJpbWFnZSIscG5nOiJpbWFnZSIsZ2lmOiJpbWFnZSIsd2VicDoiaW1hZ2UiLHN2ZzoiaW1hZ2UiLGJtcDoiaW1hZ2UiLGF2aWY6ImltYWdlIixpY286ImltYWdlIixwZGY6InBkZiIsbXAzOiJhdWRpbyIsd2F2OiJhdWRpbyIsb2dnOiJhdWRpbyIsZmxhYzoiYXVkaW8iLGFhYzoiYXVkaW8iLG00YToiYXVkaW8iLG9wdXM6ImF1ZGlvIix3ZWJhOiJhdWRpbyIsbXA0OiJ2aWRlbyIsd2VibToidmlkZW8iLG1vdjoidmlkZW8iLGF2aToidmlkZW8iLG1rdjoidmlkZW8iLG9ndjoidmlkZW8iLHRzOiJjb2RlIixqczoiY29kZSIsanN4OiJjb2RlIix0c3g6ImNvZGUiLGpzb246ImNvZGUiLGh0bWw6ImNvZGUiLGNzczoiY29kZSIsc2NzczoiY29kZSIsbGVzczoiY29kZSIscHk6ImNvZGUiLGphdmE6ImNvZGUiLGdvOiJjb2RlIixyczoiY29kZSIseWFtbDoiY29kZSIseW1sOiJjb2RlIix4bWw6ImNvZGUiLHNxbDoiY29kZSIsc2g6ImNvZGUiLGJhc2g6ImNvZGUiLHpzaDoiY29kZSIsbWQ6ImNvZGUiLGM6ImNvZGUiLGNwcDoiY29kZSIsaDoiY29kZSIsaHBwOiJjb2RlIixyYjoiY29kZSIscGhwOiJjb2RlIixzd2lmdDoiY29kZSIsa3Q6ImNvZGUiLHR4dDoidGV4dCIsbG9nOiJ0ZXh0Iixjc3Y6InRleHQiLGVudjoidGV4dCJ9LFRVdD17ImltYWdlLyI6ImltYWdlIiwiYXVkaW8vIjoiYXVkaW8iLCJ2aWRlby8iOiJ2aWRlbyIsImFwcGxpY2F0aW9uL3BkZiI6InBkZiJ9LExVdD17dHM6InR5cGVzY3JpcHQiLHRzeDoidHlwZXNjcmlwdCIsanM6ImphdmFzY3JpcHQiLGpzeDoiamF2YXNjcmlwdCIsanNvbjoianNvbiIsaHRtbDoieG1sIix4bWw6InhtbCIsY3NzOiJjc3MiLHNjc3M6InNjc3MiLGxlc3M6Imxlc3MiLHB5OiJweXRob24iLGphdmE6ImphdmEiLGdvOiJnbyIscnM6InJ1c3QiLHlhbWw6InlhbWwiLHltbDoieWFtbCIsc3FsOiJzcWwiLHNoOiJiYXNoIixiYXNoOiJiYXNoIix6c2g6ImJhc2giLGM6ImMiLGNwcDoiY3BwIixoOiJjIixocHA6ImNwcCIscmI6InJ1YnkiLHBocDoicGhwIixzd2lmdDoic3dpZnQiLGt0OiJrb3RsaW4iLG1kOiJtYXJrZG93biJ9LCRVdD17aW1hZ2U6Imx1Y2lkZTpJbWFnZSIscGRmOiJsdWNpZGU6RmlsZVRleHQiLGF1ZGlvOiJsdWNpZGU6TXVzaWMiLHZpZGVvOiJsdWNpZGU6VmlkZW8iLGNvZGU6Imx1Y2lkZTpDb2RlIix0ZXh0OiJsdWNpZGU6RmlsZVRleHQiLHVua25vd246Imx1Y2lkZTpGaWxlIn0sc3Z0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1wcmV2aWV3IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W10sTixMPVtdLEE9W10scSxDPVtdLHo9W10sRSxUPVtdLCQ9W10sVixSPVtdLFU9W10scmUsaj1bXSxtZT1bXSx3ZSxIPVtdLGNlPVtdLGtlLFc9W10sRD1bXSxPLFo9W10sWT1bXSxvZSxnZT1bXSxiZT1bXSwkZSxCPVtdLFA9W107dmFyIEo9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmZT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLGQ9W0koe2F0dHJpYnV0ZTohMX0pXSxsPVtJKCldLHk9W0koKV0seD1bSSgpXSxGPVtJKCldLE49W0koKV0scT1bSSgpXSxFPVtJKHt0eXBlOkJvb2xlYW59KV0sVj1bSSh7dHlwZTpCb29sZWFufSldLHJlPVtLKCldLHdlPVtLKCldLGtlPVtLKCldLE89W0soKV0sb2U9W0soKV0sJGU9W0soKV0sRTIodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ1cmwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmRlPT4idXJsImluIGRlLGdldDpkZT0+ZGUudXJsLHNldDooZGUsX2UpPT57ZGUudXJsPV9lfX0sbWV0YWRhdGE6ZmV9LG4sbyksRTIodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWxlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+ImZpbGUiaW4gZGUsZ2V0OmRlPT5kZS5maWxlLHNldDooZGUsX2UpPT57ZGUuZmlsZT1fZX19LG1ldGFkYXRhOmZlfSxjLHApLEUyKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYmFzZTY0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+ImJhc2U2NCJpbiBkZSxnZXQ6ZGU9PmRlLmJhc2U2NCxzZXQ6KGRlLF9lKT0+e2RlLmJhc2U2ND1fZX19LG1ldGFkYXRhOmZlfSxmLGcpLEUyKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGV4dENvbnRlbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmRlPT4idGV4dENvbnRlbnQiaW4gZGUsZ2V0OmRlPT5kZS50ZXh0Q29udGVudCxzZXQ6KGRlLF9lKT0+e2RlLnRleHRDb250ZW50PV9lfX0sbWV0YWRhdGE6ZmV9LHYsbSksRTIodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50VHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ZGU9PiJjb250ZW50VHlwZSJpbiBkZSxnZXQ6ZGU9PmRlLmNvbnRlbnRUeXBlLHNldDooZGUsX2UpPT57ZGUuY29udGVudFR5cGU9X2V9fSxtZXRhZGF0YTpmZX0sTSxTKSxFMih0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imxhbmd1YWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+Imxhbmd1YWdlImluIGRlLGdldDpkZT0+ZGUubGFuZ3VhZ2Usc2V0OihkZSxfZSk9PntkZS5sYW5ndWFnZT1fZX19LG1ldGFkYXRhOmZlfSxfLGspLEUyKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWltZVR5cGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmRlPT4ibWltZVR5cGUiaW4gZGUsZ2V0OmRlPT5kZS5taW1lVHlwZSxzZXQ6KGRlLF9lKT0+e2RlLm1pbWVUeXBlPV9lfX0sbWV0YWRhdGE6ZmV9LEwsQSksRTIodGhpcyxudWxsLHEse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJmaWxlbmFtZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ZGU9PiJmaWxlbmFtZSJpbiBkZSxnZXQ6ZGU9PmRlLmZpbGVuYW1lLHNldDooZGUsX2UpPT57ZGUuZmlsZW5hbWU9X2V9fSxtZXRhZGF0YTpmZX0sQyx6KSxFMih0aGlzLG51bGwsRSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dUb29sYmFyIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+InNob3dUb29sYmFyImluIGRlLGdldDpkZT0+ZGUuc2hvd1Rvb2xiYXIsc2V0OihkZSxfZSk9PntkZS5zaG93VG9vbGJhcj1fZX19LG1ldGFkYXRhOmZlfSxULCQpLEUyKHRoaXMsbnVsbCxWLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd0ZpbGVuYW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+InNob3dGaWxlbmFtZSJpbiBkZSxnZXQ6ZGU9PmRlLnNob3dGaWxlbmFtZSxzZXQ6KGRlLF9lKT0+e2RlLnNob3dGaWxlbmFtZT1fZX19LG1ldGFkYXRhOmZlfSxSLFUpLEUyKHRoaXMsbnVsbCxyZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlc29sdmVkVHlwZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ZGU9PiJyZXNvbHZlZFR5cGUiaW4gZGUsZ2V0OmRlPT5kZS5yZXNvbHZlZFR5cGUsc2V0OihkZSxfZSk9PntkZS5yZXNvbHZlZFR5cGU9X2V9fSxtZXRhZGF0YTpmZX0saixtZSksRTIodGhpcyxudWxsLHdlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicmVzb2x2ZWRTcmMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmRlPT4icmVzb2x2ZWRTcmMiaW4gZGUsZ2V0OmRlPT5kZS5yZXNvbHZlZFNyYyxzZXQ6KGRlLF9lKT0+e2RlLnJlc29sdmVkU3JjPV9lfX0sbWV0YWRhdGE6ZmV9LEgsY2UpLEUyKHRoaXMsbnVsbCxrZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlc29sdmVkVGV4dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ZGU9PiJyZXNvbHZlZFRleHQiaW4gZGUsZ2V0OmRlPT5kZS5yZXNvbHZlZFRleHQsc2V0OihkZSxfZSk9PntkZS5yZXNvbHZlZFRleHQ9X2V9fSxtZXRhZGF0YTpmZX0sVyxEKSxFMih0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InJlc29sdmVkTGFuZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ZGU9PiJyZXNvbHZlZExhbmciaW4gZGUsZ2V0OmRlPT5kZS5yZXNvbHZlZExhbmcsc2V0OihkZSxfZSk9PntkZS5yZXNvbHZlZExhbmc9X2V9fSxtZXRhZGF0YTpmZX0sWixZKSxFMih0aGlzLG51bGwsb2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpkZT0+ImxvYWRpbmciaW4gZGUsZ2V0OmRlPT5kZS5sb2FkaW5nLHNldDooZGUsX2UpPT57ZGUubG9hZGluZz1fZX19LG1ldGFkYXRhOmZlfSxnZSxiZSksRTIodGhpcyxudWxsLCRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXJyb3IiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmRlPT4iZXJyb3IiaW4gZGUsZ2V0OmRlPT5kZS5lcnJvcixzZXQ6KGRlLF9lKT0+e2RlLmVycm9yPV9lfX0sbWV0YWRhdGE6ZmV9LEIsUCksRTIobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6ZmV9LG51bGwsYSksSj1pPWUudmFsdWUsZmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZmV9KX1zdGF0aWMgZGVtbz1hdnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJNZWRpYSIsIkRhdGEgVmlldyJdOyNlPUh0KHRoaXMsbiwiIik7Z2V0IHVybCgpe3JldHVybiB0aGlzLiNlfXNldCB1cmwoZmUpe3RoaXMuI2U9ZmV9I3Q9KEh0KHRoaXMsbyksSHQodGhpcyxjLHZvaWQgMCkpO2dldCBmaWxlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGZpbGUoZmUpe3RoaXMuI3Q9ZmV9I2E9KEh0KHRoaXMscCksSHQodGhpcyxmLCIiKSk7Z2V0IGJhc2U2NCgpe3JldHVybiB0aGlzLiNhfXNldCBiYXNlNjQoZmUpe3RoaXMuI2E9ZmV9I2k9KEh0KHRoaXMsZyksSHQodGhpcyx2LCIiKSk7Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuI2l9c2V0IHRleHRDb250ZW50KGZlKXt0aGlzLiNpPWZlfSNyPShIdCh0aGlzLG0pLEh0KHRoaXMsTSx2b2lkIDApKTtnZXQgY29udGVudFR5cGUoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY29udGVudFR5cGUoZmUpe3RoaXMuI3I9ZmV9I3M9KEh0KHRoaXMsUyksSHQodGhpcyxfLCIiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3N9c2V0IGxhbmd1YWdlKGZlKXt0aGlzLiNzPWZlfSNuPShIdCh0aGlzLGspLEh0KHRoaXMsTCwiIikpO2dldCBtaW1lVHlwZSgpe3JldHVybiB0aGlzLiNufXNldCBtaW1lVHlwZShmZSl7dGhpcy4jbj1mZX0jbz0oSHQodGhpcyxBKSxIdCh0aGlzLEMsIiIpKTtnZXQgZmlsZW5hbWUoKXtyZXR1cm4gdGhpcy4jb31zZXQgZmlsZW5hbWUoZmUpe3RoaXMuI289ZmV9I2w9KEh0KHRoaXMseiksSHQodGhpcyxULCEwKSk7Z2V0IHNob3dUb29sYmFyKCl7cmV0dXJuIHRoaXMuI2x9c2V0IHNob3dUb29sYmFyKGZlKXt0aGlzLiNsPWZlfSNjPShIdCh0aGlzLCQpLEh0KHRoaXMsUiwhMCkpO2dldCBzaG93RmlsZW5hbWUoKXtyZXR1cm4gdGhpcy4jY31zZXQgc2hvd0ZpbGVuYW1lKGZlKXt0aGlzLiNjPWZlfSNkPShIdCh0aGlzLFUpLEh0KHRoaXMsaiwidW5rbm93biIpKTtnZXQgcmVzb2x2ZWRUeXBlKCl7cmV0dXJuIHRoaXMuI2R9c2V0IHJlc29sdmVkVHlwZShmZSl7dGhpcy4jZD1mZX0jcD0oSHQodGhpcyxtZSksSHQodGhpcyxILCIiKSk7Z2V0IHJlc29sdmVkU3JjKCl7cmV0dXJuIHRoaXMuI3B9c2V0IHJlc29sdmVkU3JjKGZlKXt0aGlzLiNwPWZlfSNoPShIdCh0aGlzLGNlKSxIdCh0aGlzLFcsIiIpKTtnZXQgcmVzb2x2ZWRUZXh0KCl7cmV0dXJuIHRoaXMuI2h9c2V0IHJlc29sdmVkVGV4dChmZSl7dGhpcy4jaD1mZX0jdT0oSHQodGhpcyxEKSxIdCh0aGlzLFosInRleHQiKSk7Z2V0IHJlc29sdmVkTGFuZygpe3JldHVybiB0aGlzLiN1fXNldCByZXNvbHZlZExhbmcoZmUpe3RoaXMuI3U9ZmV9I2Y9KEh0KHRoaXMsWSksSHQodGhpcyxnZSwhMSkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI2Z9c2V0IGxvYWRpbmcoZmUpe3RoaXMuI2Y9ZmV9I209KEh0KHRoaXMsYmUpLEh0KHRoaXMsQiwiIikpO2dldCBlcnJvcigpe3JldHVybiB0aGlzLiNtfXNldCBlcnJvcihmZSl7dGhpcy4jbT1mZX1vYmplY3RVcmw9KEh0KHRoaXMsUCksIiIpO3JlbmRlcigpe2xldCBmZT10aGlzLmZpbGVuYW1lfHx0aGlzLmZpbGU/Lm5hbWV8fHRoaXMuZ2V0RmlsZW5hbWVGcm9tVXJsKCl8fCIiO3JldHVybiB3YAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgICAgfQoKICAgICAgICAucHJldmlldy1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDkwOTBiIil9OwogICAgICAgIH0KCiAgICAgICAgLmhlYWRlci1iYXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZjlmYWZiIiwiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXItaWNvbiB7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyLWZpbGVuYW1lIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyLWJhZGdlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpIil9OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5jb250ZW50LWFyZWEgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICB9CgogICAgICAgIC5jb250ZW50LWFyZWEgPiAqIHsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgZGVlcy1pbWFnZS12aWV3ZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgfQoKICAgICAgICBkZWVzLXBkZi12aWV3ZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgfQoKICAgICAgICBkZWVzLXZpZGVvLXZpZXdlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIGRlZXMtYXVkaW8tdmlld2VyIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgZGVlcy1kYXRhdmlldy1jb2RlYm94IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnRleHQtdmlld2VyIHsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTA5MGIiLCIjZmFmYWZhIil9OwogICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgLnBsYWNlaG9sZGVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNhMWExYWEiLCIjNzE3MTdhIil9OwogICAgICAgIH0KCiAgICAgICAgLnBsYWNlaG9sZGVyIGRlZXMtaWNvbiB7CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgfQoKICAgICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQoKICAgICAgICAubG9hZGluZy1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7aC5iZFRoZW1lKCIjZTVlN2ViIiwiIzNmM2Y0NiIpfTsKICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzYwYTVmYSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgICB9CgogICAgICAgIC5lcnJvci1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjZGMyNjI2IiwiI2Y4NzE3MSIpfTsKICAgICAgICB9CgogICAgICAgIC5lcnJvci1jb250YWluZXIgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5lcnJvci10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CgogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgJHt0aGlzLnNob3dGaWxlbmFtZSYmZmU/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1iYXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJoZWFkZXItaWNvbiIgaWNvbj0iJHskVXRbdGhpcy5yZXNvbHZlZFR5cGVdfSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkZXItZmlsZW5hbWUiPiR7ZmV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyLWJhZGdlIj4ke3RoaXMucmVzb2x2ZWRUeXBlfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgICAke3RoaXMuZXJyb3I/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBbGVydFRyaWFuZ2xlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3ItdGV4dCI+JHt0aGlzLmVycm9yfTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOnRoaXMubG9hZGluZz93YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOnRoaXMucmVuZGVyQ29udGVudCgpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9cmVuZGVyQ29udGVudCgpe3N3aXRjaCh0aGlzLnJlc29sdmVkVHlwZSl7Y2FzZSJpbWFnZSI6cmV0dXJuIHdgCiAgICAgICAgICA8ZGVlcy1pbWFnZS12aWV3ZXIKICAgICAgICAgICAgLnNyYz0ke3RoaXMucmVzb2x2ZWRTcmN9CiAgICAgICAgICAgIC5zaG93VG9vbGJhcj0ke3RoaXMuc2hvd1Rvb2xiYXJ9CiAgICAgICAgICAgIGFsdD0iJHt0aGlzLmZpbGVuYW1lfHwiIn0iCiAgICAgICAgICA+PC9kZWVzLWltYWdlLXZpZXdlcj4KICAgICAgICBgO2Nhc2UicGRmIjpyZXR1cm4gd2AKICAgICAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICAgICAgLnBkZlVybD0ke3RoaXMucmVzb2x2ZWRTcmN9CiAgICAgICAgICAgIC5zaG93VG9vbGJhcj0ke3RoaXMuc2hvd1Rvb2xiYXJ9CiAgICAgICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgICAgID48L2RlZXMtcGRmLXZpZXdlcj4KICAgICAgICBgO2Nhc2UiYXVkaW8iOnJldHVybiB3YAogICAgICAgICAgPGRlZXMtYXVkaW8tdmlld2VyCiAgICAgICAgICAgIC5zcmM9JHt0aGlzLnJlc29sdmVkU3JjfQogICAgICAgICAgICAudGl0bGU9JHt0aGlzLmZpbGVuYW1lfHx0aGlzLmZpbGU/Lm5hbWV8fCIifQogICAgICAgICAgPjwvZGVlcy1hdWRpby12aWV3ZXI+CiAgICAgICAgYDtjYXNlInZpZGVvIjpyZXR1cm4gd2AKICAgICAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgICAgICAuc3JjPSR7dGhpcy5yZXNvbHZlZFNyY30KICAgICAgICAgID48L2RlZXMtdmlkZW8tdmlld2VyPgogICAgICAgIGA7Y2FzZSJjb2RlIjpyZXR1cm4gd2AKICAgICAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3gKICAgICAgICAgICAgLnByb2dMYW5nPSR7dGhpcy5yZXNvbHZlZExhbmd9CiAgICAgICAgICAgIC5jb2RlVG9EaXNwbGF5PSR7dGhpcy5yZXNvbHZlZFRleHR9CiAgICAgICAgICA+PC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICAgICAgYDtjYXNlInRleHQiOnJldHVybiB3YDxwcmUgY2xhc3M9InRleHQtdmlld2VyIj4ke3RoaXMucmVzb2x2ZWRUZXh0fTwvcHJlPmA7ZGVmYXVsdDpyZXR1cm4gd2AKICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RmlsZVF1ZXN0aW9uIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPlByZXZpZXcgbm90IGF2YWlsYWJsZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGB9fWFzeW5jIHVwZGF0ZWQoZmUpe3N1cGVyLnVwZGF0ZWQoZmUpLFsidXJsIiwiZmlsZSIsImJhc2U2NCIsInRleHRDb250ZW50IiwiY29udGVudFR5cGUiLCJsYW5ndWFnZSIsIm1pbWVUeXBlIiwiZmlsZW5hbWUiXS5zb21lKGhlPT5mZS5oYXMoaGUpKSYmYXdhaXQgdGhpcy5yZXNvbHZlQ29udGVudCgpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnJldm9rZU9iamVjdFVybCgpfWFzeW5jIHJlc29sdmVDb250ZW50KCl7dGhpcy5lcnJvcj0iIix0aGlzLnJldm9rZU9iamVjdFVybCgpLHRoaXMucmVzb2x2ZWRUeXBlPXRoaXMuZGV0ZWN0VHlwZSgpO3RyeXtpZih0aGlzLnVybCl7aWYodGhpcy5yZXNvbHZlZFNyYz10aGlzLnVybCx0aGlzLnJlc29sdmVkVHlwZT09PSJjb2RlInx8dGhpcy5yZXNvbHZlZFR5cGU9PT0idGV4dCIpaWYodGhpcy50ZXh0Q29udGVudCl0aGlzLnJlc29sdmVkVGV4dD10aGlzLnRleHRDb250ZW50O2Vsc2V7dGhpcy5sb2FkaW5nPSEwO2xldCBmZT1hd2FpdCBmZXRjaCh0aGlzLnVybCk7dGhpcy5yZXNvbHZlZFRleHQ9YXdhaXQgZmUudGV4dCgpLHRoaXMubG9hZGluZz0hMX19ZWxzZSBpZih0aGlzLmZpbGUpdGhpcy5vYmplY3RVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmZpbGUpLHRoaXMucmVzb2x2ZWRTcmM9dGhpcy5vYmplY3RVcmwsKHRoaXMucmVzb2x2ZWRUeXBlPT09ImNvZGUifHx0aGlzLnJlc29sdmVkVHlwZT09PSJ0ZXh0IikmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5yZXNvbHZlZFRleHQ9YXdhaXQgdGhpcy5maWxlLnRleHQoKSx0aGlzLmxvYWRpbmc9ITEpO2Vsc2UgaWYodGhpcy5iYXNlNjQpe2xldCBmZT10aGlzLm1pbWVUeXBlfHwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjt0aGlzLnJlc29sdmVkU3JjPWBkYXRhOiR7ZmV9O2Jhc2U2NCwke3RoaXMuYmFzZTY0fWB9ZWxzZSB0aGlzLnRleHRDb250ZW50JiYodGhpcy5yZXNvbHZlZFRleHQ9dGhpcy50ZXh0Q29udGVudCl9Y2F0Y2h7dGhpcy5lcnJvcj0iRmFpbGVkIHRvIGxvYWQgY29udGVudCIsdGhpcy5sb2FkaW5nPSExfXRoaXMucmVzb2x2ZWRMYW5nPXRoaXMucmVzb2x2ZUxhbmd1YWdlKCl9ZGV0ZWN0VHlwZSgpe2lmKHRoaXMuY29udGVudFR5cGUpcmV0dXJuIHRoaXMuY29udGVudFR5cGU7bGV0IGZlPXRoaXMubWltZVR5cGV8fHRoaXMuZmlsZT8udHlwZXx8IiI7aWYoZmUpe2lmKGZlPT09ImFwcGxpY2F0aW9uL3BkZiIpcmV0dXJuInBkZiI7Zm9yKGxldFtfZSxoZV1vZiBPYmplY3QuZW50cmllcyhUVXQpKWlmKGZlLnN0YXJ0c1dpdGgoX2UpKXJldHVybiBoZTtpZihmZS5zdGFydHNXaXRoKCJ0ZXh0LyIpKXJldHVybiJ0ZXh0In1sZXQgZGU9dGhpcy5nZXRFeHRlbnNpb24oKTtyZXR1cm4gZGUmJnJ2dFtkZV0/cnZ0W2RlXTp0aGlzLnRleHRDb250ZW50P3RoaXMubGFuZ3VhZ2U/ImNvZGUiOiJ0ZXh0IjoidW5rbm93biJ9Z2V0RXh0ZW5zaW9uKCl7bGV0IGZlPXRoaXMuZmlsZW5hbWV8fHRoaXMuZmlsZT8ubmFtZXx8IiI7aWYoZmUpe2xldCBkZT1mZS5zcGxpdCgiLiIpO2lmKGRlLmxlbmd0aD4xKXJldHVybiBkZS5wb3AoKS50b0xvd2VyQ2FzZSgpfWlmKHRoaXMudXJsKXRyeXtsZXQgX2U9bmV3IFVSTCh0aGlzLnVybCwiaHR0cHM6Ly9wbGFjZWhvbGRlci5jb20iKS5wYXRobmFtZS5zcGxpdCgiLiIpO2lmKF9lLmxlbmd0aD4xKXJldHVybiBfZS5wb3AoKS50b0xvd2VyQ2FzZSgpfWNhdGNoe31yZXR1cm4iIn1nZXRGaWxlbmFtZUZyb21VcmwoKXtpZighdGhpcy51cmwpcmV0dXJuIiI7dHJ5e3JldHVybiBuZXcgVVJMKHRoaXMudXJsLCJodHRwczovL3BsYWNlaG9sZGVyLmNvbSIpLnBhdGhuYW1lLnNwbGl0KCIvIikucG9wKCl8fCIifWNhdGNoe3JldHVybiIifX1yZXNvbHZlTGFuZ3VhZ2UoKXtpZih0aGlzLmxhbmd1YWdlKXJldHVybiB0aGlzLmxhbmd1YWdlO2xldCBmZT10aGlzLmdldEV4dGVuc2lvbigpO3JldHVybiBMVXRbZmVdfHwidGV4dCJ9cmV2b2tlT2JqZWN0VXJsKCl7dGhpcy5vYmplY3RVcmwmJihVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKSx0aGlzLm9iamVjdFVybD0iIil9c3RhdGlje0h0KGksYSl9fTtyZXR1cm4gSj1pfSkoKX0pO3ZhciBvdnQ9YigoKT0+e252dCgpfSk7dmFyIGx2dCxXVixjdnQsZHZ0PWIoKCk9Pnt1ZSgpO2QyKCk7bjIoKTtFdCgpO2x2dD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFdWPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxjdnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXBkZiIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLGx2dCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InBkZlVybCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6cD0+InBkZlVybCJpbiBwLGdldDpwPT5wLnBkZlVybCxzZXQ6KHAsbCk9PntwLnBkZlVybD1sfX0sbWV0YWRhdGE6Y30sbixvKSxsdnQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Y30sbnVsbCxhKSxkPWk9ZS52YWx1ZSxjJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmN9KX1zdGF0aWMgZGVtbz0oKT0+d2AgPGRlZXMtcGRmPjwvZGVlcy1wZGY+IGA7c3RhdGljIGRlbW9Hcm91cHM9WyJNZWRpYSIsIlBERiJdOyNlPVdWKHRoaXMsbiwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIik7Z2V0IHBkZlVybCgpe3JldHVybiB0aGlzLiNlfXNldCBwZGZVcmwoYyl7dGhpcy4jZT1jfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxXVih0aGlzLG8pfXJlbmRlcigpe3JldHVybiB3YAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgfQogICAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgI3BkZmNhbnZhcyB7CiAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDVweCAjY2NjOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8Y2FudmFzCiAgICAgICAgaWQ9InBkZmNhbnZhcyIKICAgICAgICAuaGVpZ2h0PSR7MH0KICAgICAgICAud2lkdGg9JHswfQoKICAgICAgPjwvY2FudmFzPgogICAgYH1zdGF0aWMgcGRmSnNSZWFkeTtzdGF0aWMgcGRmanNMaWI7YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXtpZihzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLCFkLnBkZkpzUmVhZHkpe2xldCBjPXJ0LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7ZC5wZGZKc1JlYWR5PWMucHJvbWlzZSxkLnBkZmpzTGliPWF3YWl0IGltcG9ydCgiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvK2VzbSIpLGQucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5L2J1aWxkL3BkZi53b3JrZXIubWpzIixjLnJlc29sdmUoKX1hd2FpdCBkLnBkZkpzUmVhZHksdGhpcy5kaXNwbGF5Q29udGVudCgpfWFzeW5jIGRpc3BsYXlDb250ZW50KCl7YXdhaXQgZC5wZGZKc1JlYWR5LGQucGRmanNMaWIuZ2V0RG9jdW1lbnQodGhpcy5wZGZVcmwpLnByb21pc2UudGhlbihwPT57Y29uc29sZS5sb2coIlBERiBsb2FkZWQiKSxwLmdldFBhZ2UoMSkudGhlbihmPT57Y29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7bGV0IHk9Zi5nZXRWaWV3cG9ydCh7c2NhbGU6MTB9KSx2PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIjcGRmY2FudmFzIiksbT12LmdldENvbnRleHQoIjJkIik7di5oZWlnaHQ9eS5oZWlnaHQsdi53aWR0aD15LndpZHRoO2xldCB4PXtjYW52YXNDb250ZXh0Om0sdmlld3BvcnQ6eX07Zi5yZW5kZXIoeCkucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIlBhZ2UgcmVuZGVyZWQiKX0pfSl9LHA9Pntjb25zb2xlLmVycm9yKHApfSl9Z2V0Q29udGV4dE1lbnVJdGVtcygpe3JldHVyblt7bmFtZToiT3BlbiBQREYgaW4gTmV3IFRhYiIsaWNvbk5hbWU6Imx1Y2lkZTpFeHRlcm5hbExpbmsiLGFjdGlvbjphc3luYygpPT57d2luZG93Lm9wZW4odGhpcy5wZGZVcmwsIl9ibGFuayIpfX0se2RpdmlkZXI6ITB9LHtuYW1lOiJDb3B5IFBERiBVUkwiLGljb25OYW1lOiJsdWNpZGU6Q29weSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnBkZlVybCl9fSx7bmFtZToiRG93bmxvYWQgUERGIixpY29uTmFtZToibHVjaWRlOkRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+e2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtjLmhyZWY9dGhpcy5wZGZVcmwsYy5kb3dubG9hZD10aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpfHwiZG9jdW1lbnQucGRmIixjLmNsaWNrKCl9fV19c3RhdGlje1dWKGksYSl9fTtyZXR1cm4gZD1pfSkoKX0pO3ZhciBwdnQ9YigoKT0+e2R2dCgpfSk7dmFyIGVhLEdzPWIoKCk9Pnt1ZSgpO2VhPVtoLmRlZmF1bHRTdHlsZXMsUWAKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLnRpbGUtY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIGhlaWdodDogMjYwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTIpIiwicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAudGlsZS1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC50aWxlLWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtoLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCJyZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICB9CgogICAgLnRpbGUtY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAudGlsZS1vdmVybGF5IHsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAudGlsZS1jb250ZW50IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAudGlsZS1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgIHotaW5kZXg6IDIwOwogICAgfQoKICAgIC50aWxlLW92ZXJsYXkgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogICAgLnRpbGUtb3ZlcmxheSBzcGFuIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogICAgLnRpbGUtaW5mbyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC45MikiLCJoc2woMjE1IDIwJSAxMiUgLyAwLjkyKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDZweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIHotaW5kZXg6IDEwOwogICAgfQoKICAgIC50aWxlLWluZm8gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC50aWxlLWluZm8tdGV4dCB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAudGlsZS1iYWRnZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC43KSIsImhzbCgwIDAlIDEwMCUgLyAwLjkpIil9OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIndoaXRlIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgICB6LWluZGV4OiAxNTsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuMnMgZWFzZTsKICAgIH0KCiAgICAudGlsZS1iYWRnZS1jb3JuZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjYpIiwiaHNsKDAgMCUgMTAwJSAvIDAuODUpIil9OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIndoaXRlIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgICB6LWluZGV4OiAxMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CgogICAgLnRpbGUtYmFkZ2UtdG9wcmlnaHQgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjYpIiwiaHNsKDAgMCUgMTAwJSAvIDAuODUpIil9OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIndoaXRlIiwiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgICB6LWluZGV4OiAxNTsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CgogICAgLyogU2hpZnQgYm90dG9tIGJhZGdlcyB1cCB3aGVuIGxhYmVsIGlzIHByZXNlbnQgKi8KICAgIC50aWxlLWNvbnRhaW5lcjpoYXMoLnRpbGUtbGFiZWwpIC50aWxlLWJhZGdlLWNvcm5lciB7CiAgICAgIGJvdHRvbTogMzNweDsKICAgIH0KCiAgICAudGlsZS1jb250YWluZXI6aGFzKC50aWxlLWxhYmVsKSAudGlsZS1pbmZvIHsKICAgICAgYm90dG9tOiAzM3B4OwogICAgfQoKICAgIC50aWxlLWxvYWRpbmcsCiAgICAudGlsZS1lcnJvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC50aWxlLWxvYWRpbmcgewogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTklKSIsImhzbCgyMTUgMjAlIDE0JSkiKX07CiAgICB9CgogICAgLnRpbGUtZXJyb3IgewogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgNzIlIDk4JSkiLCJoc2woMCA2MiUgMjAlKSIpfTsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsImhzbCgwIDcwJSA2OCUpIil9OwogICAgfQoKICAgIC50aWxlLWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAudGlsZS1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC50aWxlLWxvYWRpbmctdGV4dCwKICAgIC50aWxlLWVycm9yLXRleHQgewogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnRpbGUtbGFiZWwgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTUpIiwiaHNsKDIxNSAyMCUgMTIlIC8gMC45NSkiKX07CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSAzNSUpIiwiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIHotaW5kZXg6IDEwOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgICB9CiAgICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgfQogICAgfQoKICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgIDpob3N0KFtzaXplPSJzbWFsbCJdKSAudGlsZS1jb250YWluZXIgewogICAgICB3aWR0aDogMTUwcHg7CiAgICAgIGhlaWdodDogMTk1cHg7CiAgICB9CgogICAgOmhvc3QoW3NpemU9ImxhcmdlIl0pIC50aWxlLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgaGVpZ2h0OiAzMjVweDsKICAgIH0KCiAgICAvKiBHcmlkIG9wdGltaXphdGlvbnMgKi8KICAgIDpob3N0KFtncmlkLW1vZGVdKSAudGlsZS1jb250YWluZXIgewogICAgICB3aWxsLWNoYW5nZTogYXV0bzsKICAgIH0KICBgXX0pO3ZhciBLOCxLcix5YSx3bz1iKCgpPT57dWUoKTtHcygpO0V0KCk7Szg9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxLcj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0seWE9KCgpPT57bGV0IHQ9eGUsZSxhPVtdLGk9W10scixzPVtdLG49W10sbyxkPVtdLGM9W10scCxsPVtdLGY9W10sZyx5PVtdLHY9W107cmV0dXJuIGNsYXNzIGV4dGVuZHMgdHtzdGF0aWN7bGV0IHg9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUodFtTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7ZT1bSSh7dHlwZTpCb29sZWFufSldLHI9W0koe3R5cGU6Qm9vbGVhbn0pXSxvPVtJKHt0eXBlOkJvb2xlYW59KV0scD1bSSh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxnPVtJKHt0eXBlOlN0cmluZ30pXSxLOCh0aGlzLG51bGwsZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImNsaWNrYWJsZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TT0+ImNsaWNrYWJsZSJpbiBNLGdldDpNPT5NLmNsaWNrYWJsZSxzZXQ6KE0sUyk9PntNLmNsaWNrYWJsZT1TfX0sbWV0YWRhdGE6eH0sYSxpKSxLOCh0aGlzLG51bGwscix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImxvYWRpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOk09PiJsb2FkaW5nImluIE0sZ2V0Ok09Pk0ubG9hZGluZyxzZXQ6KE0sUyk9PntNLmxvYWRpbmc9U319LG1ldGFkYXRhOnh9LHMsbiksSzgodGhpcyxudWxsLG8se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJlcnJvciIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TT0+ImVycm9yImluIE0sZ2V0Ok09Pk0uZXJyb3Isc2V0OihNLFMpPT57TS5lcnJvcj1TfX0sbWV0YWRhdGE6eH0sZCxjKSxLOCh0aGlzLG51bGwscCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNpemUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOk09PiJzaXplImluIE0sZ2V0Ok09Pk0uc2l6ZSxzZXQ6KE0sUyk9PntNLnNpemU9U319LG1ldGFkYXRhOnh9LGwsZiksSzgodGhpcyxudWxsLGcse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJsYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6TT0+ImxhYmVsImluIE0sZ2V0Ok09Pk0ubGFiZWwsc2V0OihNLFMpPT57TS5sYWJlbD1TfX0sbWV0YWRhdGE6eH0seSx2KSx4JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnh9KX1zdGF0aWMgc3R5bGVzPWVhOyNlPUtyKHRoaXMsYSwhMCk7Z2V0IGNsaWNrYWJsZSgpe3JldHVybiB0aGlzLiNlfXNldCBjbGlja2FibGUoeCl7dGhpcy4jZT14fSN0PShLcih0aGlzLGkpLEtyKHRoaXMscywhMSkpO2dldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxvYWRpbmcoeCl7dGhpcy4jdD14fSNhPShLcih0aGlzLG4pLEtyKHRoaXMsZCwhMSkpO2dldCBlcnJvcigpe3JldHVybiB0aGlzLiNhfXNldCBlcnJvcih4KXt0aGlzLiNhPXh9I2k9KEtyKHRoaXMsYyksS3IodGhpcyxsLCJkZWZhdWx0IikpO2dldCBzaXplKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNpemUoeCl7dGhpcy4jaT14fSNyPShLcih0aGlzLGYpLEtyKHRoaXMseSwiIikpO2dldCBsYWJlbCgpe3JldHVybiB0aGlzLiNyfXNldCBsYWJlbCh4KXt0aGlzLiNyPXh9b2JzZXJ2ZXI9S3IodGhpcyx2KTtfdmlzaWJsZT0hMTtnZXQgaXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3Zpc2libGV9cmVuZGVyKCl7cmV0dXJuIHdgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0idGlsZS1jb250YWluZXIgJHt0aGlzLmNsaWNrYWJsZT8iY2xpY2thYmxlIjoiIn0gJHt0aGlzLmxvYWRpbmc/ImxvYWRpbmciOiIifSAke3RoaXMuZXJyb3I/ImVycm9yIjoiIn0iCiAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaWxlQ2xpY2t9CiAgICAgICAgQG1vdXNlZW50ZXI9JHt0aGlzLm9uVGlsZU1vdXNlRW50ZXJ9CiAgICAgICAgQG1vdXNlbGVhdmU9JHt0aGlzLm9uVGlsZU1vdXNlTGVhdmV9CiAgICAgICAgQG1vdXNlbW92ZT0ke3RoaXMub25UaWxlTW91c2VNb3ZlfQogICAgICA+CiAgICAgICAgJHt0aGlzLmxvYWRpbmc/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtbG9hZGluZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtbG9hZGluZy10ZXh0Ij5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQoKICAgICAgICAke3RoaXMuZXJyb3I/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBbGVydFRyaWFuZ2xlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1lcnJvci10ZXh0Ij5GYWlsZWQgdG8gbG9hZDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDoiIn0KCiAgICAgICAgJHshdGhpcy5sb2FkaW5nJiYhdGhpcy5lcnJvcj90aGlzLnJlbmRlclRpbGVDb250ZW50KCk6IiJ9CgogICAgICAgICR7dGhpcy5sYWJlbD93YAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1sYWJlbCI+JHt0aGlzLmxhYmVsfTwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMub2JzZXJ2ZXImJih0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPXZvaWQgMCl9c2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpe3RoaXMub2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHg9Pntmb3IobGV0IE0gb2YgeCl7bGV0IFM9dGhpcy5fdmlzaWJsZTt0aGlzLl92aXNpYmxlPU0uaXNJbnRlcnNlY3RpbmcsdGhpcy5fdmlzaWJsZSYmIVMmJnRoaXMub25CZWNhbWVWaXNpYmxlKCl9fSx7cm9vdDpudWxsLHJvb3RNYXJnaW46IjIwMHB4Iix0aHJlc2hvbGQ6LjAxfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMpfW9uQmVjYW1lVmlzaWJsZSgpe31vblRpbGVNb3VzZUVudGVyKCl7fW9uVGlsZU1vdXNlTGVhdmUoKXt9b25UaWxlTW91c2VNb3ZlKHgpe31oYW5kbGVUaWxlQ2xpY2soKXt0aGlzLmNsaWNrYWJsZSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGlsZS1jbGljayIse2RldGFpbDp0aGlzLmdldFRpbGVDbGlja0RldGFpbCgpLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Z2V0VGlsZUNsaWNrRGV0YWlsKCl7cmV0dXJue319fX0pKCl9KTt2YXIgSGwsR1Y9YigoKT0+e0hsPWNsYXNze3N0YXRpYyBwb29sPVtdO3N0YXRpYyBtYXhQb29sU2l6ZT0yMDtzdGF0aWMgTUlOX0NBTlZBU19TSVpFPTI1NjtzdGF0aWMgTUFYX0NBTlZBU19TSVpFPTQwOTY7c3RhdGljIGFjcXVpcmUoZSxhKXtsZXQgaT10aGlzLnBvb2wuZmluZChvPT4hby5pblVzZSYmby5jYW52YXMud2lkdGg+PWUmJm8uY2FudmFzLmhlaWdodD49YSYmby5jYW52YXMud2lkdGg8PWUqMS41JiZvLmNhbnZhcy5oZWlnaHQ8PWEqMS41KTtpZihpKXJldHVybiBpLmluVXNlPSEwLGkubGFzdFVzZWQ9RGF0ZS5ub3coKSxpLmNhbnZhcy53aWR0aD1lLGkuY2FudmFzLmhlaWdodD1hLGkuY3R4LmNsZWFyUmVjdCgwLDAsZSxhKSxpO2lmKHRoaXMucG9vbC5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZD1vLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITAsZGVzeW5jaHJvbml6ZWQ6ITB9KTtvLndpZHRoPU1hdGgubWluKE1hdGgubWF4KGUsdGhpcy5NSU5fQ0FOVkFTX1NJWkUpLHRoaXMuTUFYX0NBTlZBU19TSVpFKSxvLmhlaWdodD1NYXRoLm1pbihNYXRoLm1heChhLHRoaXMuTUlOX0NBTlZBU19TSVpFKSx0aGlzLk1BWF9DQU5WQVNfU0laRSk7bGV0IGM9e2NhbnZhczpvLGN0eDpkLGluVXNlOiEwLGxhc3RVc2VkOkRhdGUubm93KCl9O3JldHVybiB0aGlzLnBvb2wucHVzaChjKSxjfWxldCByPXRoaXMucG9vbC5maWx0ZXIobz0+IW8uaW5Vc2UpLnNvcnQoKG8sZCk9Pm8ubGFzdFVzZWQtZC5sYXN0VXNlZClbMF07aWYocilyZXR1cm4gci5jYW52YXMud2lkdGg9ZSxyLmNhbnZhcy5oZWlnaHQ9YSxyLmN0eC5jbGVhclJlY3QoMCwwLGUsYSksci5pblVzZT0hMCxyLmxhc3RVc2VkPURhdGUubm93KCkscjtsZXQgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuPXMuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gcy53aWR0aD1lLHMuaGVpZ2h0PWEse2NhbnZhczpzLGN0eDpuLGluVXNlOiEwLGxhc3RVc2VkOkRhdGUubm93KCl9fXN0YXRpYyByZWxlYXNlKGUpe3RoaXMucG9vbC5pbmNsdWRlcyhlKSYmKGUuaW5Vc2U9ITEsZS5jdHguY2xlYXJSZWN0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpKX1zdGF0aWMgcmVsZWFzZUFsbCgpe2ZvcihsZXQgZSBvZiB0aGlzLnBvb2wpZS5pblVzZT0hMSxlLmN0eC5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCl9c3RhdGljIGRlc3Ryb3koKXtmb3IobGV0IGUgb2YgdGhpcy5wb29sKWUuY2FudmFzLndpZHRoPTAsZS5jYW52YXMuaGVpZ2h0PTA7dGhpcy5wb29sPVtdfXN0YXRpYyBnZXRTdGF0cygpe3JldHVybntwb29sU2l6ZTp0aGlzLnBvb2wubGVuZ3RoLG1heFBvb2xTaXplOnRoaXMubWF4UG9vbFNpemUsaW5Vc2U6dGhpcy5wb29sLmZpbHRlcihlPT5lLmluVXNlKS5sZW5ndGgsYXZhaWxhYmxlOnRoaXMucG9vbC5maWx0ZXIoZT0+IWUuaW5Vc2UpLmxlbmd0aH19c3RhdGljIGFkanVzdFBvb2xTaXplKGUpe2lmKGU8dGhpcy5wb29sLmxlbmd0aCl7bGV0IGE9dGhpcy5wb29sLmxlbmd0aC1lLGk9dGhpcy5wb29sLmZpbHRlcihyPT4hci5pblVzZSkuc2xpY2UoMCxhKTtmb3IobGV0IHIgb2YgaSl7bGV0IHM9dGhpcy5wb29sLmluZGV4T2Yocik7cz4tMSYmdGhpcy5wb29sLnNwbGljZShzLDEpfX10aGlzLm1heFBvb2xTaXplPWV9fX0pO2Z1bmN0aW9uIEFVdCh0LGUpe2xldCBhO3JldHVybiBmdW5jdGlvbiguLi5yKXtsZXQgcz0oKT0+e2NsZWFyVGltZW91dChhKSx0KC4uLnIpfTtjbGVhclRpbWVvdXQoYSksYT13aW5kb3cuc2V0VGltZW91dChzLGUpfX1mdW5jdGlvbiBEVXQodCxlKXtsZXQgYTtyZXR1cm4gZnVuY3Rpb24oLi4ucil7YXx8KHQuYXBwbHkodGhpcyxyKSxhPSEwLHNldFRpbWVvdXQoKCk9PmE9ITEsZSkpfX1mdW5jdGlvbiBFVXQodCl7aWYodD09PTApcmV0dXJuIjAgQnl0ZXMiO2xldCBlPTEwMjQsYT1bIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIl0saT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGgubG9nKGUpKTtyZXR1cm4gTWF0aC5yb3VuZCh0L01hdGgucG93KGUsaSkqMTAwKS8xMDArIiAiK2FbaV19ZnVuY3Rpb24gUFV0KHQsZT0wKXtsZXQgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhLnRvcD49LWUmJmEubGVmdD49LWUmJmEuYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KStlJiZhLnJpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkrZX12YXIgcWwsWVY9YigoKT0+e3FsPWNsYXNze3N0YXRpYyBtYXJrcz1uZXcgTWFwO3N0YXRpYyBtZWFzdXJlcz1bXTtzdGF0aWMgbWFyayhlKXt0aGlzLm1hcmtzLnNldChlLHBlcmZvcm1hbmNlLm5vdygpKX1zdGF0aWMgbWVhc3VyZShlLGEpe2xldCBpPXRoaXMubWFya3MuZ2V0KGEpO2lmKGkpe2xldCByPXBlcmZvcm1hbmNlLm5vdygpLWk7cmV0dXJuIHRoaXMubWVhc3VyZXMucHVzaCh7bmFtZTplLGR1cmF0aW9uOnJ9KSx0aGlzLm1hcmtzLmRlbGV0ZShhKSxyfXJldHVybiAwfXN0YXRpYyBnZXRSZXBvcnQoKXtsZXQgZT17bWVhc3VyZXM6Wy4uLnRoaXMubWVhc3VyZXNdLGF2ZXJhZ2VzOnt9fSxhPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHRoaXMubWVhc3VyZXMpYS5oYXMoaS5uYW1lKXx8YS5zZXQoaS5uYW1lLFtdKSxhLmdldChpLm5hbWUpLnB1c2goaS5kdXJhdGlvbik7Zm9yKGxldFtpLHJdb2YgYSllLmF2ZXJhZ2VzW2ldPXIucmVkdWNlKChzLG4pPT5zK24sMCkvci5sZW5ndGg7cmV0dXJuIGV9c3RhdGljIGNsZWFyKCl7dGhpcy5tYXJrcy5jbGVhcigpLHRoaXMubWVhc3VyZXM9W119fX0pO3ZhciBodnQsdXZ0PWIoKCk9Pnt1ZSgpO2h2dD1RYAogIC5wcmV2aWV3LXN0YWNrIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogIH0KCiAgLnByZXZpZXctc3RhY2subm9uLWE0IHsKICAgIHBhZGRpbmc6IDEycHg7CiAgfQoKICAucHJldmlldy1jYW52YXMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBpbWFnZS1yZW5kZXJpbmc6IGF1dG87CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAke2guYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogIH0KCiAgLm5vbi1hNCAucHJldmlldy1jYW52YXMgewogICAgYm9yZGVyOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCJoc2woMjE3IDI1JSAyNCUpIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLyogR3JpZCBvcHRpbWl6YXRpb25zICovCiAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNhbnZhcyB7CiAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogIH0KYH0pO3ZhciBmdnQsbXZ0PWIoKCk9Pnt1ZSgpO2Z2dD0oKT0+e2xldCB0PVsiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIiwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIl07cmV0dXJuIHdgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgICB9CgogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgLnByZXZpZXctZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAucHJldmlldy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5TaW5nbGUgUERGIFRpbGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtcGRmCiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICA+PC9kZWVzLXRpbGUtcGRmPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPkRpZmZlcmVudCBTaXplczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1sYWJlbCI+U21hbGw6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBzaXplPSJzbWFsbCIKICAgICAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtdGlsZS1wZGY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy10aWxlLXBkZj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1sYWJlbCI+TGFyZ2U6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtdGlsZS1wZGY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+V2l0aCBMYWJlbDwvaDM+CiAgICAgICAgPGRlZXMtdGlsZS1wZGYKICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgbGFiZWw9IlJlc2VhcmNoIFBhcGVyLnBkZiIKICAgICAgICA+PC9kZWVzLXRpbGUtcGRmPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPk5vbi1DbGlja2FibGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtcGRmCiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIGNsaWNrYWJsZT0iZmFsc2UiCiAgICAgICAgPjwvZGVlcy10aWxlLXBkZj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5HcmlkIC0gMjAgUERGcyB3aXRoIExhenkgTG9hZGluZzwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7KGE9PntsZXQgaT1bXTtmb3IobGV0IHI9MDtyPGE7cisrKXtsZXQgcz10W3IldC5sZW5ndGhdO2kucHVzaCh3YAogICAgICAgIDxkZWVzLXRpbGUtcGRmCiAgICAgICAgICBwZGZVcmw9IiR7c30iCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICBncmlkLW1vZGUKICAgICAgICAgIEB0aWxlLWNsaWNrPSR7bj0+e2NvbnNvbGUubG9nKCJQREYgVGlsZSBjbGlja2VkOiIsbi5kZXRhaWwpLGFsZXJ0KGBQREYgY2xpY2tlZDogJHtuLmRldGFpbC5wYWdlQ291bnR9IHBhZ2VzYCl9fQogICAgICAgID48L2RlZXMtdGlsZS1wZGY+CiAgICAgIGApfXJldHVybiBpfSkoMjApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGB9fSk7dmFyIGg0LFFhLGN3LFpWPWIoKCk9Pnt1ZSgpO3dvKCk7R3MoKTtsdygpO0dWKCk7WVYoKTt1dnQoKTttdnQoKTtoND1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFFhPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxjdz0oKCk9PntsZXQgdD1bcGUoImRlZXMtdGlsZS1wZGYiKV0sZSxhPVtdLGkscj15YSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXTt2YXIgTj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IEw9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpOdW1iZXJ9KV0sbD1bSSh7dHlwZTpOdW1iZXJ9KV0seT1bSSh7dHlwZTpCb29sZWFufSldLHg9W0koe3R5cGU6Qm9vbGVhbn0pXSxGPVtJKHt0eXBlOkJvb2xlYW59KV0saDQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwZGZVcmwiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJwZGZVcmwiaW4gQSxnZXQ6QT0+QS5wZGZVcmwsc2V0OihBLHEpPT57QS5wZGZVcmw9cX19LG1ldGFkYXRhOkx9LG4sbyksaDQodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXJyZW50UHJldmlld1BhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJjdXJyZW50UHJldmlld1BhZ2UiaW4gQSxnZXQ6QT0+QS5jdXJyZW50UHJldmlld1BhZ2Usc2V0OihBLHEpPT57QS5jdXJyZW50UHJldmlld1BhZ2U9cX19LG1ldGFkYXRhOkx9LGMscCksaDQodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwYWdlQ291bnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJwYWdlQ291bnQiaW4gQSxnZXQ6QT0+QS5wYWdlQ291bnQsc2V0OihBLHEpPT57QS5wYWdlQ291bnQ9cX19LG1ldGFkYXRhOkx9LGYsZyksaDQodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyZW5kZXJlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InJlbmRlcmVkImluIEEsZ2V0OkE9PkEucmVuZGVyZWQsc2V0OihBLHEpPT57QS5yZW5kZXJlZD1xfX0sbWV0YWRhdGE6TH0sdixtKSxoNCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzSG92ZXJpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJpc0hvdmVyaW5nImluIEEsZ2V0OkE9PkEuaXNIb3ZlcmluZyxzZXQ6KEEscSk9PntBLmlzSG92ZXJpbmc9cX19LG1ldGFkYXRhOkx9LE0sUyksaDQodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0E0Rm9ybWF0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4iaXNBNEZvcm1hdCJpbiBBLGdldDpBPT5BLmlzQTRGb3JtYXQsc2V0OihBLHEpPT57QS5pc0E0Rm9ybWF0PXF9fSxtZXRhZGF0YTpMfSxfLGspLGg0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkx9LG51bGwsYSksTj1pPWUudmFsdWUsTCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpMfSl9c3RhdGljIGRlbW89ZnZ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiLCJQREYiXTtzdGF0aWMgc3R5bGVzPVsuLi5lYSxodnRdOyNlPVFhKHRoaXMsbiwiIik7Z2V0IHBkZlVybCgpe3JldHVybiB0aGlzLiNlfXNldCBwZGZVcmwoTCl7dGhpcy4jZT1MfSN0PShRYSh0aGlzLG8pLFFhKHRoaXMsYywxKSk7Z2V0IGN1cnJlbnRQcmV2aWV3UGFnZSgpe3JldHVybiB0aGlzLiN0fXNldCBjdXJyZW50UHJldmlld1BhZ2UoTCl7dGhpcy4jdD1MfSNhPShRYSh0aGlzLHApLFFhKHRoaXMsZiwwKSk7Z2V0IHBhZ2VDb3VudCgpe3JldHVybiB0aGlzLiNhfXNldCBwYWdlQ291bnQoTCl7dGhpcy4jYT1MfSNpPShRYSh0aGlzLGcpLFFhKHRoaXMsdiwhMSkpO2dldCByZW5kZXJlZCgpe3JldHVybiB0aGlzLiNpfXNldCByZW5kZXJlZChMKXt0aGlzLiNpPUx9I3I9KFFhKHRoaXMsbSksUWEodGhpcyxNLCExKSk7Z2V0IGlzSG92ZXJpbmcoKXtyZXR1cm4gdGhpcy4jcn1zZXQgaXNIb3ZlcmluZyhMKXt0aGlzLiNyPUx9I3M9KFFhKHRoaXMsUyksUWEodGhpcyxfLCEwKSk7Z2V0IGlzQTRGb3JtYXQoKXtyZXR1cm4gdGhpcy4jc31zZXQgaXNBNEZvcm1hdChMKXt0aGlzLiNzPUx9cmVuZGVyUGFnZXNUYXNrPShRYSh0aGlzLGspLG51bGwpO3JlbmRlclBhZ2VzUXVldWVkPSExO3BkZkRvY3VtZW50O2NhbnZhc2VzPVtdO3Jlc2l6ZU9ic2VydmVyO3N0YWNrRWxlbWVudD1udWxsO2xvYWRlZFBkZlVybD1udWxsO3JlbmRlclRpbGVDb250ZW50KCl7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctc3RhY2sgJHt0aGlzLmlzQTRGb3JtYXQ/IiI6Im5vbi1hNCJ9Ij4KICAgICAgICA8Y2FudmFzCiAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICBkYXRhLXBhZ2U9IiR7dGhpcy5jdXJyZW50UHJldmlld1BhZ2V9IgogICAgICAgID48L2NhbnZhcz4KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMucGFnZUNvdW50PjEmJnRoaXMuaXNIb3ZlcmluZz93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UiPgogICAgICAgICAgUGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfSBvZiAke3RoaXMucGFnZUNvdW50fQogICAgICAgIDwvZGl2PgogICAgICBgOiIifQoKICAgICAgJHt0aGlzLnBhZ2VDb3VudD4wJiYhdGhpcy5pc0hvdmVyaW5nP3dgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS1jb3JuZXIiPgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQ+MT8icyI6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA6IiJ9CgogICAgICAke3RoaXMuY2xpY2thYmxlP3dgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkV5ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KICAgIGB9Z2V0VGlsZUNsaWNrRGV0YWlsKCl7cmV0dXJue3BkZlVybDp0aGlzLnBkZlVybCxwYWdlQ291bnQ6dGhpcy5wYWdlQ291bnR9fW9uQmVjYW1lVmlzaWJsZSgpeyF0aGlzLnJlbmRlcmVkJiZ0aGlzLnBkZlVybCYmdGhpcy5sb2FkQW5kUmVuZGVyUHJldmlldygpfW9uVGlsZU1vdXNlRW50ZXIoKXt0aGlzLmlzSG92ZXJpbmc9ITB9b25UaWxlTW91c2VMZWF2ZSgpe3RoaXMuaXNIb3ZlcmluZz0hMSx0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSE9PTEmJih0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZT0xLHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpKX1vblRpbGVNb3VzZU1vdmUoTCl7aWYoIXRoaXMuaXNIb3ZlcmluZ3x8dGhpcy5wYWdlQ291bnQ8PTEpcmV0dXJuO2xldCBBPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscT1MLmNsaWVudFgtQS5sZWZ0LEM9QS53aWR0aCx6PU1hdGgubWF4KDAsTWF0aC5taW4oMSxxL0MpKSxFPU1hdGguY2VpbCh6KnRoaXMucGFnZUNvdW50KXx8MTtFIT09dGhpcy5jdXJyZW50UHJldmlld1BhZ2UmJih0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZT1FLHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpKX1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmNhY2hlRWxlbWVudHMoKSx0aGlzLnNldHVwUmVzaXplT2JzZXJ2ZXIoKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5jbGVhbnVwKCksdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpLHRoaXMucmVzaXplT2JzZXJ2ZXI9dm9pZCAwfWFzeW5jIGxvYWRBbmRSZW5kZXJQcmV2aWV3KCl7aWYoISh0aGlzLnJlbmRlcmVkfHx0aGlzLmxvYWRpbmcpKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5lcnJvcj0hMSxxbC5tYXJrKGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTt0cnl7dGhpcy5wZGZEb2N1bWVudD1hd2FpdCBYci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpLHRoaXMucGFnZUNvdW50PXRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXMsdGhpcy5jdXJyZW50UHJldmlld1BhZ2U9MSx0aGlzLmxvYWRlZFBkZlVybD10aGlzLnBkZlVybCx0aGlzLmxvYWRpbmc9ITEsYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSx0aGlzLmNhY2hlRWxlbWVudHMoKSxhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKSx0aGlzLnJlbmRlcmVkPSEwO2xldCBMPXFsLm1lYXN1cmUoYHByZXZpZXctcmVuZGVyLSR7dGhpcy5wZGZVcmx9YCxgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7Y29uc29sZS5sb2coYFBERiB0aWxlIHJlbmRlcmVkIGluICR7TH1tc2ApfWNhdGNoKEwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiB0aWxlOiIsTCksdGhpcy5lcnJvcj0hMCx0aGlzLmxvYWRpbmc9ITF9fX1zY2hlZHVsZVJlbmRlclBhZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQ/dGhpcy5yZW5kZXJQYWdlc1Rhc2s/KHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQ9ITAsdGhpcy5yZW5kZXJQYWdlc1Rhc2spOih0aGlzLnJlbmRlclBhZ2VzVGFzaz0oYXN5bmMoKT0+e3RyeXthd2FpdCB0aGlzLnBlcmZvcm1SZW5kZXJQYWdlcygpfWNhdGNoKEwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHRpbGUgcGFnZXM6IixMKX19KSgpLmZpbmFsbHkoKCk9Pnt0aGlzLnJlbmRlclBhZ2VzVGFzaz1udWxsLHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQmJih0aGlzLnJlbmRlclBhZ2VzUXVldWVkPSExLHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpKX0pLHRoaXMucmVuZGVyUGFnZXNUYXNrKTpQcm9taXNlLnJlc29sdmUoKX1hc3luYyBwZXJmb3JtUmVuZGVyUGFnZXMoKXtpZighdGhpcy5wZGZEb2N1bWVudClyZXR1cm47YXdhaXQgbmV3IFByb21pc2UoQz0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEMpKTtsZXQgTD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpO2lmKCFMKXJldHVybjt0aGlzLmNsZWFyQ2FudmFzZXMoKSx0aGlzLmNhY2hlRWxlbWVudHMoKTtsZXR7YXZhaWxhYmxlV2lkdGg6QSxhdmFpbGFibGVIZWlnaHQ6cX09dGhpcy5nZXRBdmFpbGFibGVTaXplKCk7dHJ5e2xldCBDPXRoaXMuY3VycmVudFByZXZpZXdQYWdlLHo9YXdhaXQgdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKEMpLEU9ei5nZXRWaWV3cG9ydCh7c2NhbGU6MX0pLFQ9RS5oZWlnaHQvRS53aWR0aCwkPTEuNDE0LFY9LjcwNyxSPTEuMjk0LFU9Ljc3MyxyZT0uMDUsaj1NYXRoLmFicyhULSQpPCQqcmUsbWU9TWF0aC5hYnMoVC1WKTxWKnJlLHdlPU1hdGguYWJzKFQtUik8UipyZSxIPU1hdGguYWJzKFQtVSk8VSpyZTt0aGlzLmlzQTRGb3JtYXQ9anx8bWV8fHdlfHxIO2xldCBjZT10aGlzLmlzQTRGb3JtYXQ/QTpBLTI0LGtlPXRoaXMuaXNBNEZvcm1hdD9xOnEtMjQsVz1jZT4wP2NlL0Uud2lkdGg6MCxEPWtlPjA/a2UvRS5oZWlnaHQ6MCxPPU1hdGgubWluKFd8fC41LER8fFd8fC41KSxaPU1hdGgubWluKE8qMiwzKTtpZighTnVtYmVyLmlzRmluaXRlKFopfHxaPD0wKXt6LmNsZWFudXA/LigpO3JldHVybn1sZXQgWT16LmdldFZpZXdwb3J0KHtzY2FsZTpafSksb2U9SGwuYWNxdWlyZShZLndpZHRoLFkuaGVpZ2h0KTt0aGlzLmNhbnZhc2VzLnB1c2gob2UpO2xldCBnZT17Y2FudmFzQ29udGV4dDpvZS5jdHgsdmlld3BvcnQ6WX07YXdhaXQgei5yZW5kZXIoZ2UpLnByb21pc2UsTC53aWR0aD1ZLndpZHRoLEwuaGVpZ2h0PVkuaGVpZ2h0O2xldCBiZT1jZSwkZT1ZLmhlaWdodC9ZLndpZHRoKmNlO2lmKCRlPmtlKXtsZXQgUD1rZSxKPVkud2lkdGgvWS5oZWlnaHQqa2U7TC5zdHlsZS53aWR0aD1gJHtKfXB4YCxMLnN0eWxlLmhlaWdodD1gJHtQfXB4YH1lbHNlIEwuc3R5bGUud2lkdGg9YCR7YmV9cHhgLEwuc3R5bGUuaGVpZ2h0PWAkeyRlfXB4YDtsZXQgQj1MLmdldENvbnRleHQoIjJkIik7QiYmKEIuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwLEIuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5PSJoaWdoIixCLmRyYXdJbWFnZShvZS5jYW52YXMsMCwwKSksei5jbGVhbnVwKCl9Y2F0Y2goQyl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlbmRlciBwYWdlICR7dGhpcy5jdXJyZW50UHJldmlld1BhZ2V9OmAsQyl9fWNsZWFyQ2FudmFzZXMoKXtmb3IobGV0IEwgb2YgdGhpcy5jYW52YXNlcylIbC5yZWxlYXNlKEwpO3RoaXMuY2FudmFzZXM9W119Y2xlYW51cCgpe3RoaXMuY2xlYXJDYW52YXNlcygpLHRoaXMucGRmRG9jdW1lbnQmJihYci5yZWxlYXNlRG9jdW1lbnQodGhpcy5sb2FkZWRQZGZVcmw/P3RoaXMucGRmVXJsKSx0aGlzLnBkZkRvY3VtZW50PW51bGwpLHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQ9ITEsdGhpcy5wYWdlQ291bnQ9MCx0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZT0xLHRoaXMuaXNIb3ZlcmluZz0hMSx0aGlzLmlzQTRGb3JtYXQ9ITAsdGhpcy5zdGFja0VsZW1lbnQ9bnVsbCx0aGlzLmxvYWRlZFBkZlVybD1udWxsLHRoaXMucmVuZGVyZWQ9ITEsdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3I9ITF9YXN5bmMgdXBkYXRlZChMKXtpZihzdXBlci51cGRhdGVkKEwpLEwuaGFzKCJwZGZVcmwiKSYmdGhpcy5wZGZVcmwpe2xldCBBPUwuZ2V0KCJwZGZVcmwiKTtBJiZYci5yZWxlYXNlRG9jdW1lbnQoQSksdGhpcy5jbGVhbnVwKCksdGhpcy5yZW5kZXJlZD0hMSx0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZT0xO2xldCBxPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cS50b3A8d2luZG93LmlubmVySGVpZ2h0JiZxLmJvdHRvbT4wJiZ0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCl9TC5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpJiZ0aGlzLnJlbmRlcmVkJiZhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKX1nZXRDb250ZXh0TWVudUl0ZW1zKCl7bGV0IEw9W107cmV0dXJuIHRoaXMuY2xpY2thYmxlJiYoTC5wdXNoKHtuYW1lOiJWaWV3IFBERiIsaWNvbk5hbWU6Imx1Y2lkZTpFeWUiLGFjdGlvbjphc3luYygpPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGlsZS1jbGljayIse2RldGFpbDp0aGlzLmdldFRpbGVDbGlja0RldGFpbCgpLGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fSksTC5wdXNoKHtkaXZpZGVyOiEwfSkpLEwucHVzaCh7bmFtZToiT3BlbiBQREYgaW4gTmV3IFRhYiIsaWNvbk5hbWU6Imx1Y2lkZTpFeHRlcm5hbExpbmsiLGFjdGlvbjphc3luYygpPT57d2luZG93Lm9wZW4odGhpcy5wZGZVcmwsIl9ibGFuayIpfX0se2RpdmlkZXI6ITB9LHtuYW1lOiJDb3B5IFBERiBVUkwiLGljb25OYW1lOiJsdWNpZGU6Q29weSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnBkZlVybCl9fSx7bmFtZToiRG93bmxvYWQgUERGIixpY29uTmFtZToibHVjaWRlOkRvd25sb2FkIixhY3Rpb246YXN5bmMoKT0+e2xldCBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtBLmhyZWY9dGhpcy5wZGZVcmwsQS5kb3dubG9hZD10aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpfHwiZG9jdW1lbnQucGRmIixBLmNsaWNrKCl9fSksdGhpcy5wYWdlQ291bnQ+MCYmTC5wdXNoKHtkaXZpZGVyOiEwfSx7bmFtZTpgJHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQ+MT8icyI6IiJ9YCxpY29uTmFtZToibHVjaWRlOkZpbGVUZXh0IixkaXNhYmxlZDohMCxhY3Rpb246YXN5bmMoKT0+e319KSxMfWNhY2hlRWxlbWVudHMoKXt0aGlzLnN0YWNrRWxlbWVudHx8KHRoaXMuc3RhY2tFbGVtZW50PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnByZXZpZXctc3RhY2siKSl9c2V0dXBSZXNpemVPYnNlcnZlcigpe3RoaXMucmVzaXplT2JzZXJ2ZXJ8fCh0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMucmVuZGVyZWQmJnRoaXMucGRmRG9jdW1lbnQmJiF0aGlzLmxvYWRpbmcmJnRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpfSksdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpKX1nZXRBdmFpbGFibGVTaXplKCl7aWYodGhpcy5zdGFja0VsZW1lbnR8fCh0aGlzLnN0YWNrRWxlbWVudD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIikpLCF0aGlzLnN0YWNrRWxlbWVudClyZXR1cm57YXZhaWxhYmxlV2lkdGg6MjAwLGF2YWlsYWJsZUhlaWdodDoyNjB9O2xldCBMPXRoaXMuc3RhY2tFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEE9TWF0aC5tYXgoTC53aWR0aCwwKXx8MjAwLHE9TWF0aC5tYXgoTC5oZWlnaHQsMCl8fDI2MDtyZXR1cm57YXZhaWxhYmxlV2lkdGg6QSxhdmFpbGFibGVIZWlnaHQ6cX19c3RhdGlje1FhKGksYSl9fTtyZXR1cm4gTj1pfSkoKX0pO3ZhciBJVXQsTlV0LGd2dCxidnQ9YigoKT0+e3VlKCk7WlYoKTtJVXQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxOVXQ9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LGd2dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtcGRmLXByZXZpZXciKV0sZSxhPVtdLGkscj1jdzt2YXIgcz1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7SVV0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOm59LG51bGwsYSkscz1pPWUudmFsdWUsbiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9c3RhdGljIGRlbW9Hcm91cHM9W107Y29ubmVjdGVkQ2FsbGJhY2soKXtyZXR1cm4gY29uc29sZS53YXJuKCJbZGVlcy1wZGYtcHJldmlld10gaXMgZGVwcmVjYXRlZC4gVXNlIDxkZWVzLXRpbGUtcGRmPiBpbnN0ZWFkLiBUaGlzIGNvbXBvbmVudCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4iKSxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfXN0YXRpY3tOVXQoaSxhKX19O3JldHVybiBzPWl9KSgpfSk7dmFyIHZ2dD1iKCgpPT57YnZ0KCl9KTt2YXIgeXZ0PWIoKCk9PntHVigpO2x3KCk7WVYoKX0pO3ZhciB4dnQ9YigoKT0+e1VWKCl9KTt2YXIgd3Z0PWIoKCk9Pnt3bygpO0dzKCl9KTt2YXIgTXZ0PWIoKCk9PntaVigpfSk7dmFyIHp2dCxrdnQ9YigoKT0+e3VlKCk7enZ0PSgpPT53YAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgbWFyZ2luLWJvdHRvbTogNjBweDsKICAgIH0KICAgIGgzIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgfQogICAgLnRpbGUtcm93IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5JbWFnZSBUaWxlczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICA8ZGVlcy10aWxlLWltYWdlCiAgICAgICAgICBzcmM9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy84MDAvNjAwIgogICAgICAgICAgYWx0PSJMYW5kc2NhcGUgcGhvdG8iCiAgICAgICAgICBsYWJlbD0ibGFuZHNjYXBlLmpwZyIKICAgICAgICAgIEB0aWxlLWNsaWNrPSR7dD0+Y29uc29sZS5sb2coIkltYWdlIGNsaWNrZWQ6Iix0LmRldGFpbCl9CiAgICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgoKICAgICAgICA8ZGVlcy10aWxlLWltYWdlCiAgICAgICAgICBzcmM9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy80MDAvNDAwIgogICAgICAgICAgYWx0PSJTcXVhcmUgcGhvdG8iCiAgICAgICAgICBsYWJlbD0ic3F1YXJlLnBuZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNyYz0iaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC85MDAiCiAgICAgICAgICBhbHQ9IlBvcnRyYWl0IHBob3RvIgogICAgICAgICAgbGFiZWw9InBvcnRyYWl0LndlYnAiCiAgICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplIFZhcmlhbnRzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMCIKICAgICAgICAgIGFsdD0iU21hbGwiCiAgICAgICAgICBsYWJlbD0ic21hbGwuanBnIgogICAgICAgID48L2RlZXMtdGlsZS1pbWFnZT4KCiAgICAgICAgPGRlZXMtdGlsZS1pbWFnZQogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvNjAwLzQwMCIKICAgICAgICAgIGFsdD0iRGVmYXVsdCIKICAgICAgICAgIGxhYmVsPSJkZWZhdWx0LmpwZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvMTIwMC84MDAiCiAgICAgICAgICBhbHQ9IkxhcmdlIgogICAgICAgICAgbGFiZWw9ImxhcmdlLmpwZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkVycm9yIFN0YXRlIChicm9rZW4gVVJMKTwvaDM+CiAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICBzcmM9Imh0dHBzOi8vaW52YWxpZC11cmwtdGhhdC1kb2VzLW5vdC1leGlzdC5leGFtcGxlL2ltYWdlLnBuZyIKICAgICAgICBhbHQ9IkJyb2tlbiIKICAgICAgICBsYWJlbD0iYnJva2VuLnBuZyIKICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgogICAgPC9kaXY+CiAgPC9kaXY+CmB9KTt2YXIgVmwsaXIsU3Z0LEN2dD1iKCgpPT57dWUoKTt3bygpO0dzKCk7a3Z0KCk7Vmw9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxpcj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sU3Z0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy10aWxlLWltYWdlIildLGUsYT1bXSxpLHI9eWEscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W107dmFyIEY9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBfPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0soKV0seT1bSygpXSx4PVtLKCldLFZsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3JjIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic3JjImluIGssZ2V0Oms9Pmsuc3JjLHNldDooayxOKT0+e2suc3JjPU59fSxtZXRhZGF0YTpffSxuLG8pLFZsKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWx0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iYWx0ImluIGssZ2V0Oms9PmsuYWx0LHNldDooayxOKT0+e2suYWx0PU59fSxtZXRhZGF0YTpffSxjLHApLFZsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW1hZ2VMb2FkZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpbWFnZUxvYWRlZCJpbiBrLGdldDprPT5rLmltYWdlTG9hZGVkLHNldDooayxOKT0+e2suaW1hZ2VMb2FkZWQ9Tn19LG1ldGFkYXRhOl99LGYsZyksVmwodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpbWFnZVdpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iaW1hZ2VXaWR0aCJpbiBrLGdldDprPT5rLmltYWdlV2lkdGgsc2V0OihrLE4pPT57ay5pbWFnZVdpZHRoPU59fSxtZXRhZGF0YTpffSx2LG0pLFZsKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW1hZ2VIZWlnaHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpbWFnZUhlaWdodCJpbiBrLGdldDprPT5rLmltYWdlSGVpZ2h0LHNldDooayxOKT0+e2suaW1hZ2VIZWlnaHQ9Tn19LG1ldGFkYXRhOl99LE0sUyksVmwobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxGPWk9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX1zdGF0aWMgZGVtbz16dnQ7c3RhdGljIGRlbW9Hcm91cHM9WyJNZWRpYSJdO3N0YXRpYyBzdHlsZXM9Wy4uLmVhLFFgCiAgICAgIC5pbWFnZS13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJyZXBlYXRpbmctY29uaWMtZ3JhZGllbnQoI2U4ZThlOCAwJSAyNSUsIHdoaXRlIDAlIDUwJSkgNTAlIC8gMTZweCAxNnB4IiwicmVwZWF0aW5nLWNvbmljLWdyYWRpZW50KGhzbCgyMTUgMjAlIDE4JSkgMCUgMjUlLCBoc2woMjE1IDIwJSAxNCUpIDAlIDUwJSkgNTAlIC8gMTZweCAxNnB4Iil9OwogICAgICB9CgogICAgICAuaW1hZ2Utd3JhcHBlciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLmltYWdlLXdyYXBwZXIgaW1nLmxvYWRlZCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmltYWdlLXdyYXBwZXIgaW1nLmxvYWRpbmcgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLWJhZGdlLXRvcHJpZ2h0LmRpbWVuc2lvbi1iYWRnZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnRpbGUtY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAudGlsZS1iYWRnZS10b3ByaWdodC5kaW1lbnNpb24tYmFkZ2UgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIGBdOyNlPWlyKHRoaXMsbiwiIik7Z2V0IHNyYygpe3JldHVybiB0aGlzLiNlfXNldCBzcmMoXyl7dGhpcy4jZT1ffSN0PShpcih0aGlzLG8pLGlyKHRoaXMsYywiIikpO2dldCBhbHQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgYWx0KF8pe3RoaXMuI3Q9X30jYT0oaXIodGhpcyxwKSxpcih0aGlzLGYsITEpKTtnZXQgaW1hZ2VMb2FkZWQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgaW1hZ2VMb2FkZWQoXyl7dGhpcy4jYT1ffSNpPShpcih0aGlzLGcpLGlyKHRoaXMsdiwwKSk7Z2V0IGltYWdlV2lkdGgoKXtyZXR1cm4gdGhpcy4jaX1zZXQgaW1hZ2VXaWR0aChfKXt0aGlzLiNpPV99I3I9KGlyKHRoaXMsbSksaXIodGhpcyxNLDApKTtnZXQgaW1hZ2VIZWlnaHQoKXtyZXR1cm4gdGhpcy4jcn1zZXQgaW1hZ2VIZWlnaHQoXyl7dGhpcy4jcj1ffWhhc1N0YXJ0ZWRMb2FkaW5nPShpcih0aGlzLFMpLCExKTtyZW5kZXJUaWxlQ29udGVudCgpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS13cmFwcGVyIj4KICAgICAgICAke3RoaXMuaGFzU3RhcnRlZExvYWRpbmc/d2AKICAgICAgICAgIDxpbWcKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pbWFnZUxvYWRlZD8ibG9hZGVkIjoibG9hZGluZyJ9IgogICAgICAgICAgICBzcmM9IiR7dGhpcy5zcmN9IgogICAgICAgICAgICBhbHQ9IiR7dGhpcy5hbHR9IgogICAgICAgICAgICBAbG9hZD0ke3RoaXMuaGFuZGxlSW1hZ2VMb2FkfQogICAgICAgICAgICBAZXJyb3I9JHt0aGlzLmhhbmRsZUltYWdlRXJyb3J9CiAgICAgICAgICAvPgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmltYWdlV2lkdGg+MCYmdGhpcy5pbWFnZUhlaWdodD4wP3dgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS10b3ByaWdodCBkaW1lbnNpb24tYmFkZ2UiPgogICAgICAgICAgJHt0aGlzLmltYWdlV2lkdGh9IMOXICR7dGhpcy5pbWFnZUhlaWdodH0KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KCiAgICAgICR7dGhpcy5pbWFnZUxvYWRlZD93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtaW5mbyI+CiAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpJbWFnZSI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGlsZS1pbmZvLXRleHQiPiR7dGhpcy5pbWFnZVdpZHRofSDDlyAke3RoaXMuaW1hZ2VIZWlnaHR9PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQoKICAgICAgJHt0aGlzLmNsaWNrYWJsZT93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtb3ZlcmxheSI+CiAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpFeWUiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+VmlldyBJbWFnZTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KICAgIGB9Z2V0VGlsZUNsaWNrRGV0YWlsKCl7cmV0dXJue3NyYzp0aGlzLnNyYyxhbHQ6dGhpcy5hbHQsd2lkdGg6dGhpcy5pbWFnZVdpZHRoLGhlaWdodDp0aGlzLmltYWdlSGVpZ2h0fX1vbkJlY2FtZVZpc2libGUoKXshdGhpcy5oYXNTdGFydGVkTG9hZGluZyYmdGhpcy5zcmMmJih0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nPSEwLHRoaXMubG9hZGluZz0hMCx0aGlzLnJlcXVlc3RVcGRhdGUoKSl9aGFuZGxlSW1hZ2VMb2FkKF8pe2xldCBrPV8udGFyZ2V0O3RoaXMuaW1hZ2VXaWR0aD1rLm5hdHVyYWxXaWR0aCx0aGlzLmltYWdlSGVpZ2h0PWsubmF0dXJhbEhlaWdodCx0aGlzLmltYWdlTG9hZGVkPSEwLHRoaXMubG9hZGluZz0hMX1oYW5kbGVJbWFnZUVycm9yKCl7dGhpcy5lcnJvcj0hMCx0aGlzLmxvYWRpbmc9ITF9YXN5bmMgdXBkYXRlZChfKXtzdXBlci51cGRhdGVkKF8pLF8uaGFzKCJzcmMiKSYmdGhpcy5zcmMmJnRoaXMuaXNWaXNpYmxlJiYodGhpcy5oYXNTdGFydGVkTG9hZGluZz0hMCx0aGlzLmltYWdlTG9hZGVkPSExLHRoaXMubG9hZGluZz0hMCl9c3RhdGlje2lyKGksYSl9fTtyZXR1cm4gRj1pfSkoKX0pO3ZhciBfdnQ9YigoKT0+e0N2dCgpfSk7dmFyIFR2dCxMdnQ9YigoKT0+e3VlKCk7VHZ0PSgpPT53YAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgbWFyZ2luLWJvdHRvbTogNjBweDsKICAgIH0KICAgIGgzIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgfQogICAgLnRpbGUtcm93IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5BdWRpbyBUaWxlczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICA8ZGVlcy10aWxlLWF1ZGlvCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMS5tcDMiCiAgICAgICAgICB0aXRsZT0iU291bmRIZWxpeCBTb25nIDEiCiAgICAgICAgICBhcnRpc3Q9IlQuIFNjaHVlcmdlciIKICAgICAgICAgIGxhYmVsPSJzb3VuZGhlbGl4LTEubXAzIgogICAgICAgICAgQHRpbGUtY2xpY2s9JHt0PT5jb25zb2xlLmxvZygiQXVkaW8gY2xpY2tlZDoiLHQuZGV0YWlsKX0KICAgICAgICA+PC9kZWVzLXRpbGUtYXVkaW8+CgogICAgICAgIDxkZWVzLXRpbGUtYXVkaW8KICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0yLm1wMyIKICAgICAgICAgIHRpdGxlPSJTb3VuZEhlbGl4IFNvbmcgMiIKICAgICAgICAgIGFydGlzdD0iVC4gU2NodWVyZ2VyIgogICAgICAgICAgbGFiZWw9InNvdW5kaGVsaXgtMi5tcDMiCiAgICAgICAgPjwvZGVlcy10aWxlLWF1ZGlvPgoKICAgICAgICA8ZGVlcy10aWxlLWF1ZGlvCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMy5tcDMiCiAgICAgICAgICB0aXRsZT0iU291bmRIZWxpeCBTb25nIDMiCiAgICAgICAgICBsYWJlbD0ic291bmRoZWxpeC0zLm1wMyIKICAgICAgICA+PC9kZWVzLXRpbGUtYXVkaW8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlNpemUgVmFyaWFudHM8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXJvdyI+CiAgICAgICAgPGRlZXMtdGlsZS1hdWRpbwogICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMS5tcDMiCiAgICAgICAgICB0aXRsZT0iU21hbGwiCiAgICAgICAgICBsYWJlbD0ic21hbGwubXAzIgogICAgICAgID48L2RlZXMtdGlsZS1hdWRpbz4KCiAgICAgICAgPGRlZXMtdGlsZS1hdWRpbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTEubXAzIgogICAgICAgICAgdGl0bGU9IkRlZmF1bHQiCiAgICAgICAgICBsYWJlbD0iZGVmYXVsdC5tcDMiCiAgICAgICAgPjwvZGVlcy10aWxlLWF1ZGlvPgoKICAgICAgICA8ZGVlcy10aWxlLWF1ZGlvCiAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0xLm1wMyIKICAgICAgICAgIHRpdGxlPSJMYXJnZSIKICAgICAgICAgIGxhYmVsPSJsYXJnZS5tcDMiCiAgICAgICAgPjwvZGVlcy10aWxlLWF1ZGlvPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgfSk7dmFyIE1vLHhhLCR2dCxBdnQ9YigoKT0+e3VlKCk7d28oKTtHcygpO0x2dCgpO01vPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0seGE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LCR2dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtdGlsZS1hdWRpbyIpXSxlLGE9W10saSxyPXlhLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtLKCldLHg9W0soKV0sRj1bSygpXSxOPVtLKCldLE1vKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3JjIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic3JjImluIHosZ2V0Ono9Pnouc3JjLHNldDooeixFKT0+e3ouc3JjPUV9fSxtZXRhZGF0YTpDfSxuLG8pLE1vKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGl0bGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ0aXRsZSJpbiB6LGdldDp6PT56LnRpdGxlLHNldDooeixFKT0+e3oudGl0bGU9RX19LG1ldGFkYXRhOkN9LGMscCksTW8odGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJhcnRpc3QiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJhcnRpc3QiaW4geixnZXQ6ej0+ei5hcnRpc3Qsc2V0Oih6LEUpPT57ei5hcnRpc3Q9RX19LG1ldGFkYXRhOkN9LGYsZyksTW8odGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkdXJhdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+ImR1cmF0aW9uImluIHosZ2V0Ono9PnouZHVyYXRpb24sc2V0Oih6LEUpPT57ei5kdXJhdGlvbj1FfX0sbWV0YWRhdGE6Q30sdixtKSxNbyh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndhdmVmb3JtRGF0YSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+IndhdmVmb3JtRGF0YSJpbiB6LGdldDp6PT56LndhdmVmb3JtRGF0YSxzZXQ6KHosRSk9Pnt6LndhdmVmb3JtRGF0YT1FfX0sbWV0YWRhdGE6Q30sTSxTKSxNbyh0aGlzLG51bGwsRix7a2luZDoiYWNjZXNzb3IiLG5hbWU6IndhdmVmb3JtUmVhZHkiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJ3YXZlZm9ybVJlYWR5ImluIHosZ2V0Ono9Pnoud2F2ZWZvcm1SZWFkeSxzZXQ6KHosRSk9Pnt6LndhdmVmb3JtUmVhZHk9RX19LG1ldGFkYXRhOkN9LF8sayksTW8odGhpcyxudWxsLE4se2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc1ByZXZpZXdQbGF5aW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iaXNQcmV2aWV3UGxheWluZyJpbiB6LGdldDp6PT56LmlzUHJldmlld1BsYXlpbmcsc2V0Oih6LEUpPT57ei5pc1ByZXZpZXdQbGF5aW5nPUV9fSxtZXRhZGF0YTpDfSxMLEEpLE1vKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkN9LG51bGwsYSkscT1pPWUudmFsdWUsQyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpDfSl9c3RhdGljIGRlbW89VHZ0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiXTtzdGF0aWMgc3R5bGVzPVsuLi5lYSxRYAogICAgICAuYXVkaW8tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyNTAgNDAlIDk2JSksIGhzbCgyODAgMzAlIDk0JSkpIiwibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDI1MCAzMCUgMTYlKSwgaHNsKDI4MCAyNSUgMTQlKSkiKX07CiAgICAgIH0KCiAgICAgIC5tdXNpYy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjUwIDYwJSA2NSUpIiwiaHNsKDI1MCA2MCUgNzAlKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5hdWRpby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjUwIDIwJSAzNSUpIiwiaHNsKDI1MCAyMCUgODAlKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5hdWRpby1hcnRpc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDI1MCAxNSUgNTAlKSIsImhzbCgyNTAgMTUlIDY1JSkiKX07CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAud2F2ZWZvcm0tY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMzJweCk7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAud2F2ZWZvcm0tY29udGFpbmVyIGNhbnZhcyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgoKICAgICAgLnBsYXktb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxODsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnRpbGUtY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAucGxheS1vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAucGxheS1jaXJjbGUgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgICAgfQoKICAgICAgLnBsYXktY2lyY2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgYF07I2U9eGEodGhpcyxuLCIiKTtnZXQgc3JjKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNyYyhDKXt0aGlzLiNlPUN9I3Q9KHhhKHRoaXMsbykseGEodGhpcyxjLCIiKSk7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRpdGxlKEMpe3RoaXMuI3Q9Q30jYT0oeGEodGhpcyxwKSx4YSh0aGlzLGYsIiIpKTtnZXQgYXJ0aXN0KCl7cmV0dXJuIHRoaXMuI2F9c2V0IGFydGlzdChDKXt0aGlzLiNhPUN9I2k9KHhhKHRoaXMsZykseGEodGhpcyx2LDApKTtnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy4jaX1zZXQgZHVyYXRpb24oQyl7dGhpcy4jaT1DfSNyPSh4YSh0aGlzLG0pLHhhKHRoaXMsTSxbXSkpO2dldCB3YXZlZm9ybURhdGEoKXtyZXR1cm4gdGhpcy4jcn1zZXQgd2F2ZWZvcm1EYXRhKEMpe3RoaXMuI3I9Q30jcz0oeGEodGhpcyxTKSx4YSh0aGlzLF8sITEpKTtnZXQgd2F2ZWZvcm1SZWFkeSgpe3JldHVybiB0aGlzLiNzfXNldCB3YXZlZm9ybVJlYWR5KEMpe3RoaXMuI3M9Q30jbj0oeGEodGhpcyxrKSx4YSh0aGlzLEwsITEpKTtnZXQgaXNQcmV2aWV3UGxheWluZygpe3JldHVybiB0aGlzLiNufXNldCBpc1ByZXZpZXdQbGF5aW5nKEMpe3RoaXMuI249Q31hdWRpb0VsZW1lbnQ9KHhhKHRoaXMsQSksbnVsbCk7cHJldmlld1RpbWVvdXQ9bnVsbDtoYXNMb2FkZWRXYXZlZm9ybT0hMTtyZW5kZXJUaWxlQ29udGVudCgpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJhdWRpby1jb250ZW50Ij4KICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJtdXNpYy1pY29uIiBpY29uPSJsdWNpZGU6TXVzaWMiPjwvZGVlcy1pY29uPgoKICAgICAgICAke3RoaXMudGl0bGU/d2A8ZGl2IGNsYXNzPSJhdWRpby10aXRsZSI+JHt0aGlzLnRpdGxlfTwvZGl2PmA6IiJ9CiAgICAgICAgJHt0aGlzLmFydGlzdD93YDxkaXYgY2xhc3M9ImF1ZGlvLWFydGlzdCI+JHt0aGlzLmFydGlzdH08L2Rpdj5gOiIifQoKICAgICAgICAke3RoaXMud2F2ZWZvcm1SZWFkeT93YAogICAgICAgICAgPGRpdiBjbGFzcz0id2F2ZWZvcm0tY29udGFpbmVyIj4KICAgICAgICAgICAgPGNhbnZhcz48L2NhbnZhcz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmR1cmF0aW9uPjA/d2AKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWJhZGdlLWNvcm5lciI+JHt0aGlzLmZvcm1hdFRpbWUodGhpcy5kdXJhdGlvbil9PC9kaXY+CiAgICAgIGA6IiJ9CgogICAgICA8ZGl2IGNsYXNzPSJwbGF5LW92ZXJsYXkiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYXktY2lyY2xlIj4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlBsYXkiPjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgICR7dGhpcy5jbGlja2FibGU/d2AKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLW92ZXJsYXkiPgogICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVhZHBob25lcyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5QbGF5IEF1ZGlvPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQogICAgYH1nZXRUaWxlQ2xpY2tEZXRhaWwoKXtyZXR1cm57c3JjOnRoaXMuc3JjLHRpdGxlOnRoaXMudGl0bGUsYXJ0aXN0OnRoaXMuYXJ0aXN0LGR1cmF0aW9uOnRoaXMuZHVyYXRpb259fW9uQmVjYW1lVmlzaWJsZSgpeyF0aGlzLmhhc0xvYWRlZFdhdmVmb3JtJiZ0aGlzLnNyYyYmKHRoaXMuaGFzTG9hZGVkV2F2ZWZvcm09ITAsdGhpcy5sb2FkQXVkaW9NZXRhKCkpfWFzeW5jIGxvYWRBdWRpb01ldGEoKXt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBDPW5ldyBBdWRpbztDLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLEMucHJlbG9hZD0ibWV0YWRhdGEiLGF3YWl0IG5ldyBQcm9taXNlKCh6LEUpPT57Qy5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsKCk9Pnt0aGlzLmR1cmF0aW9uPUMuZHVyYXRpb24seigpfSx7b25jZTohMH0pLEMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT5FKG5ldyBFcnJvcigiRmFpbGVkIHRvIGxvYWQgYXVkaW8iKSkse29uY2U6ITB9KSxDLnNyYz10aGlzLnNyY30pLGF3YWl0IHRoaXMubG9hZFdhdmVmb3JtKCksdGhpcy5sb2FkaW5nPSExfWNhdGNoe3RoaXMubG9hZGluZz0hMX19YXN5bmMgbG9hZFdhdmVmb3JtKCl7dHJ5e2xldCB6PWF3YWl0KGF3YWl0IGZldGNoKHRoaXMuc3JjKSkuYXJyYXlCdWZmZXIoKSxFPW5ldyBBdWRpb0NvbnRleHQsJD0oYXdhaXQgRS5kZWNvZGVBdWRpb0RhdGEoeikpLmdldENoYW5uZWxEYXRhKDApLFY9ODAsUj1NYXRoLmZsb29yKCQubGVuZ3RoL1YpLFU9W107Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IG1lPTA7Zm9yKGxldCB3ZT0wO3dlPFI7d2UrKyltZSs9TWF0aC5hYnMoJFtqKlIrd2VdKTtVLnB1c2gobWUvUil9bGV0IHJlPU1hdGgubWF4KC4uLlUpO3RoaXMud2F2ZWZvcm1EYXRhPVUubWFwKGo9PnJlPjA/ai9yZTowKSx0aGlzLndhdmVmb3JtUmVhZHk9ITAsYXdhaXQgRS5jbG9zZSgpLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5kcmF3V2F2ZWZvcm0oKX1jYXRjaHt0aGlzLndhdmVmb3JtUmVhZHk9ITF9fWRyYXdXYXZlZm9ybSgpe2lmKCF0aGlzLndhdmVmb3JtUmVhZHkpcmV0dXJuO2xldCBDPXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLndhdmVmb3JtLWNvbnRhaW5lciBjYW52YXMiKTtpZighQylyZXR1cm47bGV0IHo9Qy5wYXJlbnRFbGVtZW50LEU9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDEsVD16LmNsaWVudFdpZHRoLCQ9ei5jbGllbnRIZWlnaHQ7Qy53aWR0aD1UKkUsQy5oZWlnaHQ9JCpFO2xldCBWPUMuZ2V0Q29udGV4dCgiMmQiKTtpZighVilyZXR1cm47Vi5zY2FsZShFLEUpLFYuY2xlYXJSZWN0KDAsMCxULCQpO2xldCBSPXRoaXMud2F2ZWZvcm1EYXRhLmxlbmd0aDtpZihSPT09MClyZXR1cm47bGV0IFU9VC9SLGo9ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoInRoZW1lLWRhcmsiKXx8d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJoc2woMjUwIDUwJSA2MCUpIjoiaHNsKDI1MCA1MCUgNzAlKSI7Vi5maWxsU3R5bGU9ajtmb3IobGV0IG1lPTA7bWU8UjttZSsrKXtsZXQgd2U9dGhpcy53YXZlZm9ybURhdGFbbWVdLEg9TWF0aC5tYXgoMix3ZSooJC00KSksY2U9bWUqVSxrZT0oJC1IKS8yO1YuZmlsbFJlY3QoY2UrLjUsa2UsVS0xLEgpfX1hc3luYyB1cGRhdGVkKEMpe3N1cGVyLnVwZGF0ZWQoQyksQy5oYXMoInNyYyIpJiZ0aGlzLnNyYyYmdGhpcy5pc1Zpc2libGUmJih0aGlzLmhhc0xvYWRlZFdhdmVmb3JtPSEwLHRoaXMud2F2ZWZvcm1SZWFkeT0hMSx0aGlzLmR1cmF0aW9uPTAsdGhpcy5sb2FkQXVkaW9NZXRhKCkpLEMuaGFzKCJ3YXZlZm9ybVJlYWR5IikmJnRoaXMud2F2ZWZvcm1SZWFkeSYmKGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5kcmF3V2F2ZWZvcm0oKSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucHJldmlld1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnByZXZpZXdUaW1lb3V0KSx0aGlzLmF1ZGlvRWxlbWVudCYmKHRoaXMuYXVkaW9FbGVtZW50LnBhdXNlKCksdGhpcy5hdWRpb0VsZW1lbnQuc3JjPSIiLHRoaXMuYXVkaW9FbGVtZW50PW51bGwpfWZvcm1hdFRpbWUoQyl7aWYoIWlzRmluaXRlKEMpfHxDPDApcmV0dXJuIjA6MDAiO2xldCB6PU1hdGguZmxvb3IoQy82MCksRT1NYXRoLmZsb29yKEMlNjApO3JldHVybmAke3p9OiR7RS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfXN0YXRpY3t4YShpLGEpfX07cmV0dXJuIHE9aX0pKCl9KTt2YXIgRHZ0PWIoKCk9PntBdnQoKX0pO3ZhciBFdnQsUHZ0PWIoKCk9Pnt1ZSgpO0V2dD0oKT0+d2AKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0MHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgfQogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICB9CiAgICBoMyB7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIH0KICAgIC50aWxlLXJvdyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMjRweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+VmlkZW8gVGlsZXM8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXJvdyI+CiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iYnVubnkubXA0IgogICAgICAgICAgQHRpbGUtY2xpY2s9JHt0PT5jb25zb2xlLmxvZygiVmlkZW8gY2xpY2tlZDoiLHQuZGV0YWlsKX0KICAgICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CgogICAgICAgIDxkZWVzLXRpbGUtdmlkZW8KICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdmllLm1wNCIKICAgICAgICAgIHBvc3Rlcj0iaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzQwMC8zMDAiCiAgICAgICAgICBsYWJlbD0ibW92aWUubXA0IgogICAgICAgID48L2RlZXMtdGlsZS12aWRlbz4KCiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iYW5vdGhlci12aWRlby5tcDQiCiAgICAgICAgPjwvZGVlcy10aWxlLXZpZGVvPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplIFZhcmlhbnRzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgIDxkZWVzLXRpbGUtdmlkZW8KICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0ic21hbGwubXA0IgogICAgICAgID48L2RlZXMtdGlsZS12aWRlbz4KCiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iZGVmYXVsdC5tcDQiCiAgICAgICAgPjwvZGVlcy10aWxlLXZpZGVvPgoKICAgICAgICA8ZGVlcy10aWxlLXZpZGVvCiAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdl9iYmIubXA0IgogICAgICAgICAgbGFiZWw9ImxhcmdlLm1wNCIKICAgICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPldpdGggUG9zdGVyIEltYWdlPC9oMz4KICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdmllLm1wNCIKICAgICAgICBwb3N0ZXI9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy82MDAvNDAwIgogICAgICAgIGxhYmVsPSJwb3N0ZXItdmlkZW8ubXA0IgogICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYH0pO3ZhciBqbCxycixJdnQsTnZ0PWIoKCk9Pnt1ZSgpO3dvKCk7R3MoKTtQdnQoKTtqbD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LHJyPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxJdnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXRpbGUtdmlkZW8iKV0sZSxhPVtdLGkscj15YSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSygpXSx5PVtLKCldLHg9W0soKV0samwodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzcmMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJzcmMiaW4gayxnZXQ6az0+ay5zcmMsc2V0OihrLE4pPT57ay5zcmM9Tn19LG1ldGFkYXRhOl99LG4sbyksamwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJwb3N0ZXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJwb3N0ZXIiaW4gayxnZXQ6az0+ay5wb3N0ZXIsc2V0OihrLE4pPT57ay5wb3N0ZXI9Tn19LG1ldGFkYXRhOl99LGMscCksamwodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkdXJhdGlvbiIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImR1cmF0aW9uImluIGssZ2V0Oms9PmsuZHVyYXRpb24sc2V0OihrLE4pPT57ay5kdXJhdGlvbj1OfX0sbWV0YWRhdGE6X30sZixnKSxqbCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRodW1ibmFpbENhcHR1cmVkIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4idGh1bWJuYWlsQ2FwdHVyZWQiaW4gayxnZXQ6az0+ay50aHVtYm5haWxDYXB0dXJlZCxzZXQ6KGssTik9PntrLnRodW1ibmFpbENhcHR1cmVkPU59fSxtZXRhZGF0YTpffSx2LG0pLGpsKHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNIb3ZlcmluZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImlzSG92ZXJpbmciaW4gayxnZXQ6az0+ay5pc0hvdmVyaW5nLHNldDooayxOKT0+e2suaXNIb3ZlcmluZz1OfX0sbWV0YWRhdGE6X30sTSxTKSxqbChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLEY9aT1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPUV2dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIk1lZGlhIl07c3RhdGljIHN0eWxlcz1bLi4uZWEsUWAKICAgICAgLnZpZGVvLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwOwogICAgICB9CgogICAgICAudmlkZW8td3JhcHBlciB2aWRlbyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAudmlkZW8td3JhcHBlciBjYW52YXMgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnBvc3Rlci1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgoKICAgICAgLnBsYXktb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgei1pbmRleDogMTU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wbGF5LW92ZXJsYXkgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAudGlsZS1jb250YWluZXIuY2xpY2thYmxlOmhvdmVyIC5wbGF5LW92ZXJsYXkgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52aWRlby1ob3Zlci1wcmV2aWV3IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLnZpZGVvLWhvdmVyLXByZXZpZXcuYWN0aXZlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgXTsjZT1ycih0aGlzLG4sIiIpO2dldCBzcmMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgc3JjKF8pe3RoaXMuI2U9X30jdD0ocnIodGhpcyxvKSxycih0aGlzLGMsIiIpKTtnZXQgcG9zdGVyKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHBvc3RlcihfKXt0aGlzLiN0PV99I2E9KHJyKHRoaXMscCkscnIodGhpcyxmLDApKTtnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy4jYX1zZXQgZHVyYXRpb24oXyl7dGhpcy4jYT1ffSNpPShycih0aGlzLGcpLHJyKHRoaXMsdiwhMSkpO2dldCB0aHVtYm5haWxDYXB0dXJlZCgpe3JldHVybiB0aGlzLiNpfXNldCB0aHVtYm5haWxDYXB0dXJlZChfKXt0aGlzLiNpPV99I3I9KHJyKHRoaXMsbSkscnIodGhpcyxNLCExKSk7Z2V0IGlzSG92ZXJpbmcoKXtyZXR1cm4gdGhpcy4jcn1zZXQgaXNIb3ZlcmluZyhfKXt0aGlzLiNyPV99dGh1bWJuYWlsQ2FudmFzPShycih0aGlzLFMpLG51bGwpO2hvdmVyVmlkZW89bnVsbDtoYXNTdGFydGVkTG9hZGluZz0hMTtyZW5kZXJUaWxlQ29udGVudCgpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ2aWRlby13cmFwcGVyIj4KICAgICAgICAke3RoaXMucG9zdGVyP3dgCiAgICAgICAgICA8aW1nIGNsYXNzPSJwb3N0ZXItaW1hZ2UiIHNyYz0iJHt0aGlzLnBvc3Rlcn0iIGFsdD0iIiAvPgogICAgICAgIGA6dGhpcy50aHVtYm5haWxDYXB0dXJlZD93YAogICAgICAgICAgPGNhbnZhcz48L2NhbnZhcz4KICAgICAgICBgOndgCiAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiAjMDAwOyI+PC9kaXY+CiAgICAgICAgYH0KCiAgICAgICAgJHt0aGlzLmlzSG92ZXJpbmcmJnRoaXMuc3JjP3dgCiAgICAgICAgICA8dmlkZW8KICAgICAgICAgICAgY2xhc3M9InZpZGVvLWhvdmVyLXByZXZpZXcgJHt0aGlzLmlzSG92ZXJpbmc/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAuc3JjPSR7dGhpcy5zcmN9CiAgICAgICAgICAgIG11dGVkCiAgICAgICAgICAgIHBsYXlzaW5saW5lCiAgICAgICAgICAgIEBsb2FkZWRkYXRhPSR7dGhpcy5oYW5kbGVIb3ZlclZpZGVvTG9hZGVkfQogICAgICAgICAgPjwvdmlkZW8+CiAgICAgICAgYDoiIn0KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuZHVyYXRpb24+MD93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtY29ybmVyIj4ke3RoaXMuZm9ybWF0VGltZSh0aGlzLmR1cmF0aW9uKX08L2Rpdj4KICAgICAgYDoiIn0KCiAgICAgICR7dGhpcy5pc0hvdmVyaW5nPyIiOndgCiAgICAgICAgPGRpdiBjbGFzcz0icGxheS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlBsYXkiPjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICBgfQoKICAgICAgJHt0aGlzLmNsaWNrYWJsZT93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtb3ZlcmxheSI+CiAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpQbGF5Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlBsYXkgVmlkZW88L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA6IiJ9CiAgICBgfWdldFRpbGVDbGlja0RldGFpbCgpe3JldHVybntzcmM6dGhpcy5zcmMscG9zdGVyOnRoaXMucG9zdGVyLGR1cmF0aW9uOnRoaXMuZHVyYXRpb259fW9uQmVjYW1lVmlzaWJsZSgpeyF0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nJiZ0aGlzLnNyYyYmKHRoaXMuaGFzU3RhcnRlZExvYWRpbmc9ITAsdGhpcy5jYXB0dXJlRmlyc3RGcmFtZSgpKX1hc3luYyBjYXB0dXJlRmlyc3RGcmFtZSgpe2lmKHRoaXMucG9zdGVyKXt0aGlzLmxvYWREdXJhdGlvbigpO3JldHVybn10aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7Xy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixfLm11dGVkPSEwLF8ucHJlbG9hZD0ibWV0YWRhdGEiLGF3YWl0IG5ldyBQcm9taXNlKChrLE4pPT57Xy5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRkYXRhIiwoKT0+e3RoaXMuZHVyYXRpb249Xy5kdXJhdGlvbixfLmN1cnJlbnRUaW1lPS4xLF8uYWRkRXZlbnRMaXN0ZW5lcigic2Vla2VkIiwoKT0+e2xldCBMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO0wud2lkdGg9Xy52aWRlb1dpZHRoLEwuaGVpZ2h0PV8udmlkZW9IZWlnaHQ7bGV0IEE9TC5nZXRDb250ZXh0KCIyZCIpO0EmJihBLmRyYXdJbWFnZShfLDAsMCksdGhpcy50aHVtYm5haWxDYW52YXM9TCx0aGlzLnRodW1ibmFpbENhcHR1cmVkPSEwKSxfLnNyYz0iIixfLmxvYWQoKSxrKCl9LHtvbmNlOiEwfSl9LHtvbmNlOiEwfSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9Pk4obmV3IEVycm9yKCJGYWlsZWQgdG8gbG9hZCB2aWRlbyIpKSx7b25jZTohMH0pLF8uc3JjPXRoaXMuc3JjfSksdGhpcy5sb2FkaW5nPSExLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsdGhpcy5jb3B5VGh1bWJuYWlsVG9DYW52YXMoKX1jYXRjaHt0aGlzLmxvYWRpbmc9ITEsdGhpcy5sb2FkRHVyYXRpb24oKX19bG9hZER1cmF0aW9uKCl7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtfLnByZWxvYWQ9Im1ldGFkYXRhIixfLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIiwoKT0+e3RoaXMuZHVyYXRpb249Xy5kdXJhdGlvbixfLnNyYz0iIixfLmxvYWQoKX0pLF8uc3JjPXRoaXMuc3JjfWNvcHlUaHVtYm5haWxUb0NhbnZhcygpe2lmKCF0aGlzLnRodW1ibmFpbENhbnZhcylyZXR1cm47bGV0IF89dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudmlkZW8td3JhcHBlciBjYW52YXMiKTtpZighXylyZXR1cm47Xy53aWR0aD10aGlzLnRodW1ibmFpbENhbnZhcy53aWR0aCxfLmhlaWdodD10aGlzLnRodW1ibmFpbENhbnZhcy5oZWlnaHQ7bGV0IGs9Xy5nZXRDb250ZXh0KCIyZCIpO2smJmsuZHJhd0ltYWdlKHRoaXMudGh1bWJuYWlsQ2FudmFzLDAsMCl9b25UaWxlTW91c2VFbnRlcigpe3RoaXMuaXNIb3ZlcmluZz0hMH1vblRpbGVNb3VzZUxlYXZlKCl7dGhpcy5pc0hvdmVyaW5nPSExLHRoaXMuaG92ZXJWaWRlbz1udWxsfWhhbmRsZUhvdmVyVmlkZW9Mb2FkZWQoXyl7dGhpcy5ob3ZlclZpZGVvPV8udGFyZ2V0LHRoaXMuaG92ZXJWaWRlby5wbGF5KCkuY2F0Y2goKCk9Pnt9KX1hc3luYyB1cGRhdGVkKF8pe3N1cGVyLnVwZGF0ZWQoXyksXy5oYXMoInNyYyIpJiZ0aGlzLnNyYyYmdGhpcy5pc1Zpc2libGUmJih0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nPSEwLHRoaXMudGh1bWJuYWlsQ2FwdHVyZWQ9ITEsdGhpcy5kdXJhdGlvbj0wLHRoaXMuY2FwdHVyZUZpcnN0RnJhbWUoKSksXy5oYXMoInRodW1ibmFpbENhcHR1cmVkIikmJnRoaXMudGh1bWJuYWlsQ2FwdHVyZWQmJihhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMuY29weVRodW1ibmFpbFRvQ2FudmFzKCkpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhvdmVyVmlkZW8mJih0aGlzLmhvdmVyVmlkZW8ucGF1c2UoKSx0aGlzLmhvdmVyVmlkZW8uc3JjPSIiLHRoaXMuaG92ZXJWaWRlbz1udWxsKSx0aGlzLnRodW1ibmFpbENhbnZhcz1udWxsfWZvcm1hdFRpbWUoXyl7aWYoIWlzRmluaXRlKF8pfHxfPDApcmV0dXJuIjA6MDAiO2xldCBrPU1hdGguZmxvb3IoXy82MCksTj1NYXRoLmZsb29yKF8lNjApO3JldHVybmAke2t9OiR7Ti50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfXN0YXRpY3tycihpLGEpfX07cmV0dXJuIEY9aX0pKCl9KTt2YXIgRnZ0PWIoKCk9PntOdnQoKX0pO3ZhciBPdnQsUnZ0PWIoKCk9Pnt1ZSgpO092dD0oKT0+e2xldCB0PWBpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JzsKCmV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7CiAgcHJpdmF0ZSBpdGVtczogc3RyaW5nW10gPSBbXTsKCiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWxcYAogICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIFwke3RoaXMuaXRlbXMubWFwKGl0ZW0gPT4gaHRtbFxgCiAgICAgICAgICA8c3Bhbj5cJHtpdGVtfTwvc3Bhbj4KICAgICAgICBcYCl9CiAgICAgIDwvZGl2PgogICAgXGA7CiAgfQp9YCxlPWBNZWV0aW5nIE5vdGVzIC0gUTQgUGxhbm5pbmcKRGF0ZTogSmFudWFyeSAxNSwgMjAyNgpBdHRlbmRlZXM6IEFsaWNlLCBCb2IsIENoYXJsaWUKCktleSBEZWNpc2lvbnM6CjEuIExhdW5jaCBuZXcgZmVhdHVyZSBieSBNYXJjaAoyLiBIaXJlIDIgbW9yZSBlbmdpbmVlcnMKMy4gTWlncmF0ZSB0byBuZXcgQ0kvQ0QgcGlwZWxpbmUKNC4gVXBkYXRlIGRlc2lnbiBzeXN0ZW0gdG8gdjMKCkFjdGlvbiBJdGVtczoKLSBBbGljZTogRHJhZnQgUFJEIGJ5IG5leHQgd2VlawotIEJvYjogU2V0IHVwIGludGVydmlldyBwaXBlbGluZQotIENoYXJsaWU6IEV2YWx1YXRlIEplbmtpbnMgdnMgR2l0SHViIEFjdGlvbnNgO3JldHVybiB3YAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKICAgICAgfQogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICB9CiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgIC50aWxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+Tm90ZSBUaWxlczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgICAgPGRlZXMtdGlsZS1ub3RlCiAgICAgICAgICAgIHRpdGxlPSJjb21wb25lbnQudHMiCiAgICAgICAgICAgIC5jb250ZW50PSR7dH0KICAgICAgICAgICAgbGFuZ3VhZ2U9InR5cGVzY3JpcHQiCiAgICAgICAgICAgIGxhYmVsPSJjb21wb25lbnQudHMiCiAgICAgICAgICAgIEB0aWxlLWNsaWNrPSR7aT0+Y29uc29sZS5sb2coIk5vdGUgY2xpY2tlZDoiLGkuZGV0YWlsKX0KICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgoKICAgICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgICB0aXRsZT0iTWVldGluZyBOb3RlcyIKICAgICAgICAgICAgLmNvbnRlbnQ9JHtlfQogICAgICAgICAgICBsYWJlbD0ibWVldGluZy1ub3Rlcy50eHQiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KCiAgICAgICAgICA8ZGVlcy10aWxlLW5vdGUKICAgICAgICAgICAgdGl0bGU9InBhY2thZ2UuanNvbiIKICAgICAgICAgICAgLmNvbnRlbnQ9JHtgewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMy4zOC4wIiwKICAiZGVzY3JpcHRpb24iOiAiRGVzaWduIGNvbXBvbmVudCBjYXRhbG9nIiwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjAiLAogICAgImxpdCI6ICJeMy4xLjAiCiAgfSwKICAic2NyaXB0cyI6IHsKICAgICJidWlsZCI6ICJ0c2J1aWxkIiwKICAgICJ0ZXN0IjogInRzdGVzdCIKICB9Cn1gfQogICAgICAgICAgICBsYW5ndWFnZT0ianNvbiIKICAgICAgICAgICAgbGFiZWw9InBhY2thZ2UuanNvbiIKICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpemUgVmFyaWFudHM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgICBzaXplPSJzbWFsbCIKICAgICAgICAgICAgdGl0bGU9InNtYWxsLnRzIgogICAgICAgICAgICAuY29udGVudD0ke3R9CiAgICAgICAgICAgIGxhbmd1YWdlPSJ0cyIKICAgICAgICAgICAgbGFiZWw9InNtYWxsLnRzIgogICAgICAgICAgPjwvZGVlcy10aWxlLW5vdGU+CgogICAgICAgICAgPGRlZXMtdGlsZS1ub3RlCiAgICAgICAgICAgIHRpdGxlPSJkZWZhdWx0LnRzIgogICAgICAgICAgICAuY29udGVudD0ke3R9CiAgICAgICAgICAgIGxhbmd1YWdlPSJ0cyIKICAgICAgICAgICAgbGFiZWw9ImRlZmF1bHQudHMiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KCiAgICAgICAgICA8ZGVlcy10aWxlLW5vdGUKICAgICAgICAgICAgc2l6ZT0ibGFyZ2UiCiAgICAgICAgICAgIHRpdGxlPSJsYXJnZS50cyIKICAgICAgICAgICAgLmNvbnRlbnQ9JHt0fQogICAgICAgICAgICBsYW5ndWFnZT0idHMiCiAgICAgICAgICAgIGxhYmVsPSJsYXJnZS50cyIKICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPldpdGhvdXQgVGl0bGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgLmNvbnRlbnQ9JHtlfQogICAgICAgICAgbGFiZWw9InVudGl0bGVkLnR4dCIKICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgfX0pO3ZhciBROCxZcyxCdnQsSHZ0PWIoKCk9Pnt1ZSgpO3dvKCk7R3MoKTtSdnQoKTtROD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LFlzPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxCdnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXRpbGUtbm90ZSIpXSxlLGE9W10saSxyPXlhLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdO3ZhciB4PWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgTT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxsPVtJKHt0eXBlOlN0cmluZ30pXSx5PVtLKCldLFE4KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidGl0bGUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJ0aXRsZSJpbiBTLGdldDpTPT5TLnRpdGxlLHNldDooUyxGKT0+e1MudGl0bGU9Rn19LG1ldGFkYXRhOk19LG4sbyksUTgodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb250ZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iY29udGVudCJpbiBTLGdldDpTPT5TLmNvbnRlbnQsc2V0OihTLEYpPT57Uy5jb250ZW50PUZ9fSxtZXRhZGF0YTpNfSxjLHApLFE4KHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGFuZ3VhZ2UiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJsYW5ndWFnZSJpbiBTLGdldDpTPT5TLmxhbmd1YWdlLHNldDooUyxGKT0+e1MubGFuZ3VhZ2U9Rn19LG1ldGFkYXRhOk19LGYsZyksUTgodGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0hvdmVyaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iaXNIb3ZlcmluZyJpbiBTLGdldDpTPT5TLmlzSG92ZXJpbmcsc2V0OihTLEYpPT57Uy5pc0hvdmVyaW5nPUZ9fSxtZXRhZGF0YTpNfSx2LG0pLFE4KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOk19LG51bGwsYSkseD1pPWUudmFsdWUsTSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpNfSl9c3RhdGljIGRlbW89T3Z0O3N0YXRpYyBkZW1vR3JvdXBzPVsiTWVkaWEiXTtzdGF0aWMgc3R5bGVzPVsuLi5lYSxRYAogICAgICAubm90ZS1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsImhzbCg2MCA1JSA5NiUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ub3RlLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNHB4IDhweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm5vdGUtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyMCUgMjAlKSIsImhzbCgyMTUgMjAlIDIwJSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICAgIH0KCiAgICAgIC5ub3RlLWJvZHkgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogMCAxNHB4IDE0cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ub3RlLXRleHQgewogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAxMCUgNDAlKSIsImhzbCgyMTUgMTAlIDM1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLm5vdGUtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogNjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICB0cmFuc3BhcmVudCwKICAgICAgICAgICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiaHNsKDYwIDUlIDk2JSkiKX0KICAgICAgICApOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAudGlsZS1iYWRnZS10b3ByaWdodC5ub3RlLWxhbmd1YWdlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyMCUgOTIlKSIsImhzbCgyMTUgMjAlIDg4JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE2JSA1MCUpIiwiaHNsKDIxNSAxNiUgNDAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC5ub3RlLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAzNHB4OwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCA3MCUgODUlKSIsImhzbCgwIDUwJSA4MCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgfQoKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgICBsaW5lLWhlaWdodDogMTVweDsgLyogbWF0Y2hlcyAxMHB4ICogMS41IGxpbmUtaGVpZ2h0ICovCiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDEwJSA3NSUpIiwiaHNsKDIxNSAxMCUgNzAlKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7CiAgICAgIH0KCiAgICBgXTsjZT1Zcyh0aGlzLG4sIiIpO2dldCB0aXRsZSgpe3JldHVybiB0aGlzLiNlfXNldCB0aXRsZShNKXt0aGlzLiNlPU19I3Q9KFlzKHRoaXMsbyksWXModGhpcyxjLCIiKSk7Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy4jdH1zZXQgY29udGVudChNKXt0aGlzLiN0PU19I2E9KFlzKHRoaXMscCksWXModGhpcyxmLCIiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI2F9c2V0IGxhbmd1YWdlKE0pe3RoaXMuI2E9TX0jaT0oWXModGhpcyxnKSxZcyh0aGlzLHYsITEpKTtnZXQgaXNIb3ZlcmluZygpe3JldHVybiB0aGlzLiNpfXNldCBpc0hvdmVyaW5nKE0pe3RoaXMuI2k9TX1ub3RlQm9keUVsZW1lbnQ9KFlzKHRoaXMsbSksbnVsbCk7cmVuZGVyVGlsZUNvbnRlbnQoKXtsZXQgTT10aGlzLmNvbnRlbnQuc3BsaXQoYApgKTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibm90ZS1jb250ZW50Ij4KICAgICAgICAke3RoaXMubGFuZ3VhZ2U/d2AKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtdG9wcmlnaHQgbm90ZS1sYW5ndWFnZSI+JHt0aGlzLmxhbmd1YWdlfTwvZGl2PgogICAgICAgIGA6IiJ9CgogICAgICAgICR7dGhpcy50aXRsZT93YAogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZS1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlLXRpdGxlIj4ke3RoaXMudGl0bGV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQoKICAgICAgICA8ZGl2IGNsYXNzPSJub3RlLWJvZHkiPgogICAgICAgICAgPHByZSBjbGFzcz0ibm90ZS10ZXh0Ij4ke00uam9pbihgCmApfTwvcHJlPgogICAgICAgICAgJHt0aGlzLmlzSG92ZXJpbmc/IiI6d2A8ZGl2IGNsYXNzPSJub3RlLWZhZGUiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy5pc0hvdmVyaW5nJiZNLmxlbmd0aD4xMj93YAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS1jb3JuZXIiPgogICAgICAgICAgICBMaW5lICR7dGhpcy5nZXRWaXNpYmxlTGluZVJhbmdlKE0ubGVuZ3RoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA6IiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNsaWNrYWJsZT93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtb3ZlcmxheSI+CiAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlVGV4dCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5PcGVuIE5vdGU8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA6IiJ9CiAgICBgfWdldFRpbGVDbGlja0RldGFpbCgpe3JldHVybnt0aXRsZTp0aGlzLnRpdGxlLGNvbnRlbnQ6dGhpcy5jb250ZW50LGxhbmd1YWdlOnRoaXMubGFuZ3VhZ2V9fW9uVGlsZU1vdXNlRW50ZXIoKXt0aGlzLmlzSG92ZXJpbmc9ITAsdGhpcy5ub3RlQm9keUVsZW1lbnR8fCh0aGlzLm5vdGVCb2R5RWxlbWVudD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ub3RlLWJvZHkiKSl9b25UaWxlTW91c2VMZWF2ZSgpe3RoaXMuaXNIb3ZlcmluZz0hMSx0aGlzLm5vdGVCb2R5RWxlbWVudCYmKHRoaXMubm90ZUJvZHlFbGVtZW50LnNjcm9sbFRvcD0wKX1vblRpbGVNb3VzZU1vdmUoTSl7aWYoIXRoaXMuaXNIb3ZlcmluZ3x8IXRoaXMubm90ZUJvZHlFbGVtZW50fHx0aGlzLmNvbnRlbnQuc3BsaXQoYApgKS5sZW5ndGg8PTEyKXJldHVybjtsZXQgRj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLF89TS5jbGllbnRYLUYubGVmdCxrPU1hdGgubWF4KDAsTWF0aC5taW4oMSxfL0Yud2lkdGgpKSxOPXRoaXMubm90ZUJvZHlFbGVtZW50LnNjcm9sbEhlaWdodC10aGlzLm5vdGVCb2R5RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy5ub3RlQm9keUVsZW1lbnQuc2Nyb2xsVG9wPWsqTn1nZXRWaXNpYmxlTGluZVJhbmdlKE0pe2lmKCF0aGlzLm5vdGVCb2R5RWxlbWVudClyZXR1cm5gMVx1MjAxMzEyIG9mICR7TX1gO2xldCBTPTE1LEY9TWF0aC5mbG9vcih0aGlzLm5vdGVCb2R5RWxlbWVudC5zY3JvbGxUb3AvUykrMSxfPU1hdGguZmxvb3IodGhpcy5ub3RlQm9keUVsZW1lbnQuY2xpZW50SGVpZ2h0L1MpLGs9TWF0aC5taW4oRitfLTEsTSk7cmV0dXJuYCR7Rn1cdTIwMTMke2t9IG9mICR7TX1gfXN0YXRpY3tZcyhpLGEpfX07cmV0dXJuIHg9aX0pKCl9KTt2YXIgcXZ0PWIoKCk9PntIdnQoKX0pO3ZhciBWdnQsanZ0PWIoKCk9Pnt1ZSgpO1Z2dD0oKT0+e2xldCB0PVt7dHlwZToiaW1hZ2UiLG5hbWU6InN1bnNldC5qcGciLHRodW1ibmFpbFNyYzoiaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzIwMC8yMDA/cmFuZG9tPTEifSx7dHlwZToiaW1hZ2UiLG5hbWU6Im1vdW50YWluLmpwZyIsdGh1bWJuYWlsU3JjOiJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209MiJ9LHt0eXBlOiJpbWFnZSIsbmFtZToib2NlYW4uanBnIix0aHVtYm5haWxTcmM6Imh0dHBzOi8vcGljc3VtLnBob3Rvcy8yMDAvMjAwP3JhbmRvbT0zIn0se3R5cGU6ImltYWdlIixuYW1lOiJmb3Jlc3QuanBnIix0aHVtYm5haWxTcmM6Imh0dHBzOi8vcGljc3VtLnBob3Rvcy8yMDAvMjAwP3JhbmRvbT00In0se3R5cGU6ImltYWdlIixuYW1lOiJjaXR5LmpwZyIsdGh1bWJuYWlsU3JjOiJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209NSJ9LHt0eXBlOiJpbWFnZSIsbmFtZToiZGVzZXJ0LmpwZyIsdGh1bWJuYWlsU3JjOiJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209NiJ9XTtyZXR1cm4gd2AKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNjBweDsKICAgICAgfQogICAgICBoMyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAudGlsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPkZvbGRlciBUaWxlczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgbmFtZT0iUGhvdG9zIgogICAgICAgICAgICAuaXRlbXM9JHt0fQogICAgICAgICAgICBsYWJlbD0iNiBwaG90b3MiCiAgICAgICAgICAgIEB0aWxlLWNsaWNrPSR7cz0+Y29uc29sZS5sb2coIkZvbGRlciBjbGlja2VkOiIscy5kZXRhaWwpfQogICAgICAgICAgPjwvZGVlcy10aWxlLWZvbGRlcj4KCiAgICAgICAgICA8ZGVlcy10aWxlLWZvbGRlcgogICAgICAgICAgICBuYW1lPSJteS1wcm9qZWN0IgogICAgICAgICAgICAuaXRlbXM9JHtbe3R5cGU6Im5vdGUiLG5hbWU6IlJFQURNRS5tZCJ9LHt0eXBlOiJub3RlIixuYW1lOiJwYWNrYWdlLmpzb24ifSx7dHlwZToiZm9sZGVyIixuYW1lOiJzcmMifSx7dHlwZToiZm9sZGVyIixuYW1lOiJ0ZXN0In0se3R5cGU6Im5vdGUiLG5hbWU6InRzY29uZmlnLmpzb24ifSx7dHlwZToicGRmIixuYW1lOiJkb2NzLnBkZiJ9LHt0eXBlOiJpbWFnZSIsbmFtZToibG9nby5wbmciLHRodW1ibmFpbFNyYzoiaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMC8xMDA/cmFuZG9tPTEwIn1dfQogICAgICAgICAgICBsYWJlbD0iUHJvamVjdCBmaWxlcyIKICAgICAgICAgID48L2RlZXMtdGlsZS1mb2xkZXI+CgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgbmFtZT0iTWVkaWEgQXNzZXRzIgogICAgICAgICAgICAuaXRlbXM9JHtbe3R5cGU6InZpZGVvIixuYW1lOiJpbnRyby5tcDQifSx7dHlwZToiYXVkaW8iLG5hbWU6ImJhY2tncm91bmQubXAzIn0se3R5cGU6ImltYWdlIixuYW1lOiJ0aHVtYm5haWwuanBnIix0aHVtYm5haWxTcmM6Imh0dHBzOi8vcGljc3VtLnBob3Rvcy8yMDAvMjAwP3JhbmRvbT0yMCJ9LHt0eXBlOiJwZGYiLG5hbWU6InN0b3J5Ym9hcmQucGRmIn1dfQogICAgICAgICAgICBsYWJlbD0iTWl4ZWQgbWVkaWEiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPkVkZ2UgQ2FzZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICAgIDxkZWVzLXRpbGUtZm9sZGVyCiAgICAgICAgICAgIG5hbWU9IkVtcHR5IEZvbGRlciIKICAgICAgICAgICAgLml0ZW1zPSR7W119CiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgoKICAgICAgICAgIDxkZWVzLXRpbGUtZm9sZGVyCiAgICAgICAgICAgIG5hbWU9IlNpbmdsZSBJdGVtIgogICAgICAgICAgICAuaXRlbXM9JHtbe3R5cGU6InBkZiIsbmFtZToicmVwb3J0LnBkZiJ9XX0KICAgICAgICAgID48L2RlZXMtdGlsZS1mb2xkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+U2l6ZSBWYXJpYW50czwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIG5hbWU9IlNtYWxsIgogICAgICAgICAgICAuaXRlbXM9JHt0fQogICAgICAgICAgPjwvZGVlcy10aWxlLWZvbGRlcj4KCiAgICAgICAgICA8ZGVlcy10aWxlLWZvbGRlcgogICAgICAgICAgICBuYW1lPSJEZWZhdWx0IgogICAgICAgICAgICAuaXRlbXM9JHt0fQogICAgICAgICAgPjwvZGVlcy10aWxlLWZvbGRlcj4KCiAgICAgICAgICA8ZGVlcy10aWxlLWZvbGRlcgogICAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgICAgbmFtZT0iTGFyZ2UiCiAgICAgICAgICAgIC5pdGVtcz0ke3R9CiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGB9fSk7dmFyIFhWLEo4LFV2dCxXdnQsR3Z0PWIoKCk9Pnt1ZSgpO3dvKCk7R3MoKTtqdnQoKTtYVj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LEo4PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxVdnQ9e3BkZjoibHVjaWRlOkZpbGVUZXh0IixpbWFnZToibHVjaWRlOkltYWdlIixhdWRpbzoibHVjaWRlOk11c2ljIix2aWRlbzoibHVjaWRlOlZpZGVvIixub3RlOiJsdWNpZGU6RmlsZUNvZGUiLGZvbGRlcjoibHVjaWRlOkZvbGRlciIsdW5rbm93bjoibHVjaWRlOkZpbGUifSxXdnQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXRpbGUtZm9sZGVyIildLGUsYT1bXSxpLHI9eWEscyxuPVtdLG89W10sZCxjPVtdLHA9W107dmFyIGw9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe2F0dHJpYnV0ZTohMX0pXSxYVih0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im5hbWUiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJuYW1lImluIGcsZ2V0Omc9PmcubmFtZSxzZXQ6KGcseSk9PntnLm5hbWU9eX19LG1ldGFkYXRhOmZ9LG4sbyksWFYodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpdGVtcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Zz0+Iml0ZW1zImluIGcsZ2V0Omc9PmcuaXRlbXMsc2V0OihnLHkpPT57Zy5pdGVtcz15fX0sbWV0YWRhdGE6Zn0sYyxwKSxYVihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpmfSxudWxsLGEpLGw9aT1lLnZhbHVlLGYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Zn0pfXN0YXRpYyBkZW1vPVZ2dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIk1lZGlhIl07c3RhdGljIHN0eWxlcz1bLi4uZWEsUWAKICAgICAgLmZvbGRlci1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDQwIDMwJSA5NyUpIiwiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZm9sZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTRweCA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDQwIDgwJSA1MCUpIiwiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZm9sZGVyLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyMCUgMjAlKSIsImhzbCgyMTUgMTYlIDgwJSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWdyaWQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMWZyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTRweCAxNHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNlbGwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyMCUgOTQlKSIsImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZ3JpZC1jZWxsIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuZ3JpZC1jZWxsIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAxNiUgNjAlKSIsImhzbCgyMTUgMTYlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLWNlbGwtZW1wdHkgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDE1JSA5NiUpIiwiaHNsKDIxNSAyMCUgMTYlKSIpfTsKICAgICAgfQoKICAgIGBdOyNlPUo4KHRoaXMsbiwiIik7Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgbmFtZShmKXt0aGlzLiNlPWZ9I3Q9KEo4KHRoaXMsbyksSjgodGhpcyxjLFtdKSk7Z2V0IGl0ZW1zKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGl0ZW1zKGYpe3RoaXMuI3Q9Zn1yZW5kZXJUaWxlQ29udGVudCgpe2xldCBmPXRoaXMuaXRlbXMuc2xpY2UoMCw0KSxnPTQtZi5sZW5ndGg7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmb2xkZXItaGVhZGVyIj4KICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImZvbGRlci1pY29uIiBpY29uPSJsdWNpZGU6Rm9sZGVyIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1uYW1lIj4ke3RoaXMubmFtZXx8IlVudGl0bGVkIEZvbGRlciJ9PC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctZ3JpZCI+CiAgICAgICAgICAke2YubWFwKHk9PndgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+CiAgICAgICAgICAgICAgJHt5LnRodW1ibmFpbFNyYz93YAogICAgICAgICAgICAgICAgPGltZyBzcmM9IiR7eS50aHVtYm5haWxTcmN9IiBhbHQ9IiR7eS5uYW1lfSIgLz4KICAgICAgICAgICAgICBgOndgCiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7VXZ0W3kudHlwZV18fFV2dC51bmtub3dufSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgICAgICR7QXJyYXkuZnJvbSh7bGVuZ3RoOmd9KS5tYXAoKCk9PndgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCBncmlkLWNlbGwtZW1wdHkiPjwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS1jb3JuZXIiPgogICAgICAgICR7dGhpcy5pdGVtcy5sZW5ndGh9IGl0ZW0ke3RoaXMuaXRlbXMubGVuZ3RoIT09MT8icyI6IiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNsaWNrYWJsZT93YAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtb3ZlcmxheSI+CiAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGb2xkZXJPcGVuIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPk9wZW4gRm9sZGVyPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgOiIifQogICAgYH1nZXRUaWxlQ2xpY2tEZXRhaWwoKXtyZXR1cm57bmFtZTp0aGlzLm5hbWUsaXRlbUNvdW50OnRoaXMuaXRlbXMubGVuZ3RoLGl0ZW1zOnRoaXMuaXRlbXN9fWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxKOCh0aGlzLHApfXN0YXRpY3tKOChpLGEpfX07cmV0dXJuIGw9aX0pKCl9KTt2YXIgWXZ0PWIoKCk9PntHdnQoKX0pO3ZhciBadnQ9YigoKT0+e3FidCgpO1didCgpO1hidCgpO292dCgpO3B2dCgpO3Z2dCgpO3l2dCgpO3h2dCgpO3d2dCgpO012dCgpO192dCgpO0R2dCgpO0Z2dCgpO3F2dCgpO1l2dCgpfSk7dmFyIFh2dD1iKCgpPT57bjIoKX0pO3ZhciBLdnQ9YigoKT0+e1owKCl9KTt2YXIgUXZ0LEp2dD1iKCgpPT57dWUoKTtRdnQ9KCk9PndgCiAgICA8c3R5bGU+CiAgICAgIC5yZWYxIHsKICAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InJlZjEiPjwvZGl2PgogICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7YAogICAgICAqKlRoaXMgaXMgYSBsb25nZXIgbWFya2Rvd24gdGV4dCB0aGF0ICBjYW4gYmUgdXNlZCB0aGUgd3JpdGUqKiAgCiAgICAgIGEgbG9uZ2VyIGRlc2NyaXB0aW9uIGFib3V0IHdoYXRzIGdvaW5nIG9uIHRoZSBhcHAgIAogIAogICAgICAqKlRoaXMgaXMgYSBzdWJoZWFkZXIqKgogICAgICBhbmQgYW5vdGhlciB0ZXh0CiAgICAKICAgIGB9PjwvZGVlcy1zcGVlY2hidWJibGU+CiAgYH0pO3ZhciBVbCxzcixleXQsdHl0PWIoKCk9Pnt2aSgpO3MyKCk7SnZ0KCk7dWUoKTtEcygpO1ZlKCk7VWw9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxzcj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sZXl0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1zcGVlY2hidWJibGUiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXTt2YXIgRj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IF89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpPYmplY3R9KV0sZD1bSSh7dHlwZTpTdHJpbmcscmVmbGVjdDohMH0pXSxsPVtJKHt0eXBlOkJvb2xlYW59KV0seT1bSSh7dHlwZTpCb29sZWFufSldLHg9W0koe3R5cGU6U3RyaW5nfSldLFVsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicmVmZmVkRWxlbWVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InJlZmZlZEVsZW1lbnQiaW4gayxnZXQ6az0+ay5yZWZmZWRFbGVtZW50LHNldDooayxOKT0+e2sucmVmZmVkRWxlbWVudD1OfX0sbWV0YWRhdGE6X30sbixvKSxVbCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRleHQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJ0ZXh0ImluIGssZ2V0Oms9PmsudGV4dCxzZXQ6KGssTik9PntrLnRleHQ9Tn19LG1ldGFkYXRhOl99LGMscCksVWwodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ3YXZlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4id2F2ZSJpbiBrLGdldDprPT5rLndhdmUsc2V0OihrLE4pPT57ay53YXZlPU59fSxtZXRhZGF0YTpffSxmLGcpLFVsKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibWFuaWZlc3RlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+Im1hbmlmZXN0ZWQiaW4gayxnZXQ6az0+ay5tYW5pZmVzdGVkLHNldDooayxOKT0+e2subWFuaWZlc3RlZD1OfX0sbWV0YWRhdGE6X30sdixtKSxVbCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InN0YXR1cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InN0YXR1cyJpbiBrLGdldDprPT5rLnN0YXR1cyxzZXQ6KGssTik9PntrLnN0YXR1cz1OfX0sbWV0YWRhdGE6X30sTSxTKSxVbChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLEY9aT1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPVF2dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIk92ZXJsYXkiXTtzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhfLGspe2xldCBOPWF3YWl0IGdpLmNyZWF0ZUFuZFNob3coe2JsdXI6ITF9KSxMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtc3BlZWNoYnViYmxlIik7cmV0dXJuIEwud2luZG93TGF5ZXI9TixMLnJlZmZlZEVsZW1lbnQ9XyxMLnRleHQ9ayxMLm1hbmlmZXN0ZWQ9ITAsTi5hcHBlbmRDaGlsZChMKSxOLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLE4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIud2luZG93T3ZlcmxheSIpLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLEx9I2U9c3IodGhpcyxuLHZvaWQgMCk7Z2V0IHJlZmZlZEVsZW1lbnQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgcmVmZmVkRWxlbWVudChfKXt0aGlzLiNlPV99I3Q9KHNyKHRoaXMsbyksc3IodGhpcyxjLHZvaWQgMCkpO2dldCB0ZXh0KCl7cmV0dXJuIHRoaXMuI3R9c2V0IHRleHQoXyl7dGhpcy4jdD1ffSNhPShzcih0aGlzLHApLHNyKHRoaXMsZiwhMSkpO2dldCB3YXZlKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHdhdmUoXyl7dGhpcy4jYT1ffSNpPShzcih0aGlzLGcpLHNyKHRoaXMsdiwhMSkpO2dldCBtYW5pZmVzdGVkKCl7cmV0dXJuIHRoaXMuI2l9c2V0IG1hbmlmZXN0ZWQoXyl7dGhpcy4jaT1ffSNyPShzcih0aGlzLG0pLHNyKHRoaXMsTSwibm9ybWFsIikpO2dldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc3RhdHVzKF8pe3RoaXMuI3I9X313aW5kb3dMYXllcj1zcih0aGlzLFMpO2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMzMzIiwiI2ZmZiIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwcHggMHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMikpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5hcnJvdyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZiIsIiMzMzMiKX07CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHdpZHRoOiAxNXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAuc3BlZWNoYnViYmxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZiIsIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgJHt0aGlzLm1hbmlmZXN0ZWQ/d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDbGlja30+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwZWVjaGJ1YmJsZSI+CiAgICAgICAgICAgICAgICAke3RoaXMud2F2ZT93YDxzcGFuIGNsYXNzPSJ3YXZlIj7wn5GLPC9zcGFuPmA6d2BgfQogICAgICAgICAgICAgICAgJHtqYS5yZXNvbHZlKHRoaXMuZ2V0SHRtbCgpKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOndgYH0KICAgIGB9YXN5bmMgaGFuZGxlQ2xpY2soKXtjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2lmKHRoaXMucmVmZmVkRWxlbWVudHx8KHRoaXMucmVmZmVkRWxlbWVudD10aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLHRoaXMubWFuaWZlc3RlZClhd2FpdCB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluY29udGFpbmVyIikuc3R5bGUub3BhY2l0eT0iMSI7ZWxzZXtsZXQgXzt0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsYXN5bmMoKT0+e189YXdhaXQgRi5jcmVhdGVBbmRTaG93KHRoaXMucmVmZmVkRWxlbWVudCx0aGlzLnRleHQpfSksdGhpcy5yZWZmZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCgpPT57Xy5kZXN0cm95KCl9KX19YXN5bmMgdXBkYXRlUG9zaXRpb24oKXtsZXQgXz10aGlzLnJlZmZlZEVsZW1lbnQsaz1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD1gJHtrLnRvcC0xM31weGAsdGhpcy5zdHlsZS5sZWZ0PWAke2subGVmdCtfLmNsaWVudFdpZHRoKzR9cHhgLGsucmlnaHQ+MjUwJiYodGhpcy5zdHlsZS53aWR0aD0iMjUwcHgiKX1hc3luYyBnZXRIdG1sKCl7aWYoIXRoaXMudGV4dClyZXR1cm4iIjtsZXQgXz1ydC5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpLGs9YXdhaXQgcnQucGx1Z2lucy5zbWFydG1hcmtkb3duLlNtYXJ0TWFya2Rvd24uZWFzeU1hcmtkb3duVG9IdG1sKF8pO3JldHVybiB2NShrKX1hc3luYyBzaG93KCl7fWFzeW5jIGRlc3Ryb3koKXt0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5jb250YWluZXIiKS5zdHlsZS5vcGFjaXR5PSIwIix0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKX1zdGF0aWN7c3IoaSxhKX19O3JldHVybiBGPWl9KSgpfSk7dmFyIGF5dD1iKCgpPT57dHl0KCl9KTt2YXIgaXl0PWIoKCk9PntEcygpfSk7dmFyIHJ5dD1iKCgpPT57WHZ0KCk7S3Z0KCk7YXl0KCk7aXl0KCl9KTt2YXIgc3l0PWIoKCk9Pnt9KTt2YXIgbnl0PWIoKCk9PntzeXQoKX0pO3ZhciBveXQsZHcscHcsS1YsbHl0LGh3LHV3LGZ3LG13PWIoKCk9PntveXQ9Imh0dHBzOi8vc3RhY2tibGl0ei5jb20iLGR3PSJjb2RlIixwdz0iZXJyb3IiLEtWPSJlcnJvcl9kZXNjcmlwdGlvbiIsbHl0PSJfX3djX2FwaV9iY19fIixodz0iX193Y19hcGlfdG9rZW5zX18iLHV3PSJfX3djX2FwaV92ZXJpZmllcl9fIixmdz0iX193Y19hcGlfcG9wdXBfXyJ9KTt2YXIgdTQsUVY9YigoKT0+e3U0PWNsYXNze19idXM9bmV3IEV2ZW50VGFyZ2V0O2xpc3RlbihlKXtmdW5jdGlvbiBhKGkpe2UoaS5kYXRhKX1yZXR1cm4gdGhpcy5fYnVzLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGEpLCgpPT50aGlzLl9idXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYSl9ZmlyZUV2ZW50KGUpe3RoaXMuX2J1cy5kaXNwYXRjaEV2ZW50KG5ldyBNZXNzYWdlRXZlbnQoIm1lc3NhZ2UiLHtkYXRhOmV9KSl9fX0pO2Z1bmN0aW9uIGd3KCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oaHcpfWZ1bmN0aW9uIHV5dCh0KXtyZXR1cm4gZHl0Lmxpc3Rlbih0KX1mdW5jdGlvbiBGVXQoKXtsZXQgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShodyk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPVXQodCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oaHcsSlNPTi5zdHJpbmdpZnkodCkpfWZ1bmN0aW9uIHB5dCh7Y3JlYXRlZF9hdDp0LGV4cGlyZXNfaW46ZX0pe3JldHVybih0K2UpKjFlM31mdW5jdGlvbiBoeXQodCl7aWYodHlwZW9mIHQhPSJvYmplY3QifHwhdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKTtpZih0eXBlb2YgdC5hY2Nlc3NfdG9rZW4hPSJzdHJpbmcifHx0eXBlb2YgdC5yZWZyZXNoX3Rva2VuIT0ic3RyaW5nInx8dHlwZW9mIHQuY3JlYXRlZF9hdCE9Im51bWJlciJ8fHR5cGVvZiB0LmV4cGlyZXNfaW4hPSJudW1iZXIiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUb2tlbiBSZXNwb25zZSIpfWZ1bmN0aW9uIFJVdCh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+c2V0VGltZW91dChlLHQpKX1mdW5jdGlvbiBCVXQodCl7ZHl0LmZpcmVFdmVudCh0KX12YXIgY3l0LGR5dCxXbCxKVj1iKCgpPT57bXcoKTtRVigpO2N5dD1uZXcgRXJyb3I7Y3l0LnN0YWNrPSIiO2R5dD1uZXcgdTQsV2w9Y2xhc3MgdHtvcmlnaW47cmVmcmVzaDthY2Nlc3M7ZXhwaXJlcztfcmV2b2tlZD1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0cnVjdG9yKGUsYSxpLHIpe3RoaXMub3JpZ2luPWUsdGhpcy5yZWZyZXNoPWEsdGhpcy5hY2Nlc3M9aSx0aGlzLmV4cGlyZXM9cn1hc3luYyBhY3RpdmF0ZShlKXtpZih0aGlzLl9yZXZva2VkLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBFcnJvcigiVG9rZW4gcmV2b2tlZCIpO3JldHVybiB0aGlzLmV4cGlyZXM8RGF0ZS5ub3coKSYmIWF3YWl0IHRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKT8hMToodGhpcy5fc3luYygpLHRoaXMuX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3AoZSksITApfWFzeW5jIHJldm9rZShlLGEpe3RoaXMuX3Jldm9rZWQuYWJvcnQoKTt0cnl7aWYoIShhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvcmV2b2tlYCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0sYm9keTpuZXcgVVJMU2VhcmNoUGFyYW1zKHt0b2tlbjp0aGlzLnJlZnJlc2gsdG9rZW5fdHlwZV9oaW50OiJyZWZyZXNoX3Rva2VuIixjbGllbnRfaWQ6ZX0pLG1vZGU6ImNvcnMifSkpLm9rKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGxvZ291dCIpfWNhdGNoKGkpe2lmKCFhKXRocm93IGl9Z3coKX1zdGF0aWMgZnJvbVN0b3JhZ2UoKXtsZXQgZT1GVXQoKTtyZXR1cm4gZT9uZXcgdChlLm9yaWdpbixlLnJlZnJlc2gsZS5hY2Nlc3MsZS5leHBpcmVzKTpudWxsfXN0YXRpYyBhc3luYyBmcm9tQXV0aENvZGUoe2VkaXRvck9yaWdpbjplLGNsaWVudElkOmEsY29kZVZlcmlmaWVyOmksYXV0aENvZGU6cixyZWRpcmVjdFVyaTpzfSl7bGV0IG49YXdhaXQgZmV0Y2goYCR7ZX0vb2F1dGgvdG9rZW5gLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxib2R5Om5ldyBVUkxTZWFyY2hQYXJhbXMoe2NsaWVudF9pZDphLGNvZGU6cixjb2RlX3ZlcmlmaWVyOmksZ3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixyZWRpcmVjdF91cmk6c30pLG1vZGU6ImNvcnMifSk7aWYoIW4ub2spdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdG9rZW46ICR7bi5zdGF0dXN9YCk7bGV0IG89YXdhaXQgbi5qc29uKCk7aHl0KG8pO2xldHthY2Nlc3NfdG9rZW46ZCxyZWZyZXNoX3Rva2VuOmN9PW8scD1weXQobyk7cmV0dXJuIG5ldyB0KGUsYyxkLHApfWFzeW5jIF9mZXRjaE5ld0FjY2Vzc1Rva2VuKCl7dHJ5e2xldCBlPWF3YWl0IGZldGNoKGAke3RoaXMub3JpZ2lufS9vYXV0aC90b2tlbmAse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGJvZHk6bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToicmVmcmVzaF90b2tlbiIscmVmcmVzaF90b2tlbjp0aGlzLnJlZnJlc2h9KSxtb2RlOiJjb3JzIixzaWduYWw6dGhpcy5fcmV2b2tlZC5zaWduYWx9KTtpZighZS5vayl0aHJvdyBjeXQ7bGV0IGE9YXdhaXQgZS5qc29uKCk7aHl0KGEpO2xldHthY2Nlc3NfdG9rZW46aSxyZWZyZXNoX3Rva2VuOnJ9PWEscz1weXQoYSk7cmV0dXJuIHRoaXMuYWNjZXNzPWksdGhpcy5leHBpcmVzPXMsdGhpcy5yZWZyZXNoPXIsITB9Y2F0Y2h7cmV0dXJuIGd3KCksITF9fV9zeW5jKCl7T1V0KHRoaXMpLEJVdCh0aGlzLmFjY2Vzcyl9YXN5bmMgX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3AoZSl7Zm9yKDs7KXtsZXQgYT10aGlzLmV4cGlyZXMtRGF0ZS5ub3coKS0xZTM7aWYoYXdhaXQgUlV0KE1hdGgubWF4KGEsMWUzKSksdGhpcy5fcmV2b2tlZC5zaWduYWwuYWJvcnRlZClyZXR1cm47aWYoIXRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSl7ZSgpO3JldHVybn10aGlzLl9zeW5jKCl9fX19KTt2YXIgZWosYncsWnMsdGo9YigoKT0+e213KCk7ZWo9e30sYnc9bnVsbCxacz17Z2V0IGVkaXRvck9yaWdpbigpe3JldHVybiBidz09bnVsbCYmKGJ3PW5ldyBVUkwoZ2xvYmFsVGhpcy5XRUJDT05UQUlORVJfQVBJX0lGUkFNRV9VUkw/P295dCkub3JpZ2luKSxid30sc2V0IGVkaXRvck9yaWdpbih0KXtidz1uZXcgVVJMKHQpLm9yaWdpbn0sc2V0UXVlcnlQYXJhbSh0LGUpe2VqW3RdPWV9LGdldCB1cmwoKXtsZXQgdD1uZXcgVVJMKHRoaXMuZWRpdG9yT3JpZ2luKTt0LnBhdGhuYW1lPSIvaGVhZGxlc3MiO2ZvcihsZXQgZSBpbiBlail0LnNlYXJjaFBhcmFtcy5zZXQoZSxlaltlXSk7cmV0dXJuIHQuc2VhcmNoUGFyYW1zLnNldCgidmVyc2lvbiIsIjEuNi4xIiksdH19fSk7YXN5bmMgZnVuY3Rpb24gZnl0KHQpe2xldCBlPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxhPW5ldyBVaW50OEFycmF5KGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IixlKSk7cmV0dXJuIGJ0b2EoYS5yZWR1Y2UoKGkscik9PmkrU3RyaW5nLmZyb21Db2RlUG9pbnQociksIiIpKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0rJC8sIiIpfWZ1bmN0aW9uIG15dCgpe2xldCB0PW5ldyBVaW50OEFycmF5KDk2KTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpO2xldCBlPSIiO2ZvcihsZXQgYT0wO2E8MzI7KythKWUrPUhVdCh0WzMqYSswXSx0WzMqYSsxXSx0WzMqYSsyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gSFV0KHQsZSxhKXtsZXQgaT10Pj4yLHI9KHQmMyk8PDR8ZT4+NCxzPWUmMTV8KGEmMTkyKT4+MixuPWEmNjM7cmV0dXJuW2kscixzLG5dLm1hcChxVXQpLmpvaW4oIiIpfWZ1bmN0aW9uIHFVdCh0KXtsZXQgZTtyZXR1cm4gdDwyNj9lPXQrNjU6dDw1Mj9lPXQtMjYrOTc6dDw2Mj9lPXQtNTIrNDg6ZT10PT09NjI/MzA6NDUsU3RyaW5nLmZyb21DaGFyQ29kZShlKX12YXIgZ3l0PWIoKCk9Pnt9KTtmdW5jdGlvbiBieXQoKXtsZXQgdCxlO2Z1bmN0aW9uIGEoKXtlPW5ldyBQcm9taXNlKGk9PnQ9aSl9cmV0dXJuIGEoKSx7Z2V0IHByb21pc2UoKXtyZXR1cm4gZX0scmVzb2x2ZShpKXtyZXR1cm4gdChpKX0scmVzZXQ6YX19dmFyIHZ5dD1iKCgpPT57fSk7ZnVuY3Rpb24gZWQodCl7dnQuYnJvYWRjYXN0Q2hhbm5lbCYmKHZ0LmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UodCksbG9jYWxTdG9yYWdlLmdldEl0ZW0oZncpPT09InRydWUiJiZ0LnR5cGUhPT0iYXV0aC1sb2dvdXQiJiYobG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZncpLHNldFRpbWVvdXQoKCk9Pnt3aW5kb3cuY2xvc2UoKX0pKSl9ZnVuY3Rpb24gYWooKXtmNC5maXJlRXZlbnQoKSxlZCh7dHlwZToiYXV0aC1sb2dvdXQifSl9ZnVuY3Rpb24geHl0KCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmfWFzeW5jIGZ1bmN0aW9uIHd5dCgpe2xldCB0PW15dCgpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKHV3LHQpO2xldCBlPWF3YWl0IGZ5dCh0KSxhPW5ldyBVUkwoIi9vYXV0aC9hdXRob3JpemUiLHZ0LmVkaXRvck9yaWdpbikse3NlYXJjaFBhcmFtczppfT1hO3JldHVybiBpLmFwcGVuZCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxpLmFwcGVuZCgiY2xpZW50X2lkIix2dC5jbGllbnRJZCksaS5hcHBlbmQoInJlZGlyZWN0X3VyaSIseHl0KCkpLGkuYXBwZW5kKCJzY29wZSIsdnQub2F1dGhTY29wZSksaS5hcHBlbmQoImNvZGVfY2hhbGxlbmdlIixlKSxpLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGEudG9TdHJpbmcoKX1mdW5jdGlvbiBpaih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk9vcHMhIFRva2VucyBpcyBub3QgZGVmaW5lZCB3aGVuIGl0IGFsd2F5cyBzaG91bGQgYmUuIil9dmFyIHZ0LHl5dCxmNCxNeXQscmo9YigoKT0+e0pWKCk7bXcoKTt0aigpO2d5dCgpO3Z5dCgpO1FWKCk7dnQ9e2luaXRpYWxpemVkOiExLGJvb3RDYWxsZWQ6ITEsYXV0aENvbXBsZXRlOmJ5dCgpLGNsaWVudElkOiIiLG9hdXRoU2NvcGU6IiIsYnJvYWRjYXN0Q2hhbm5lbDpudWxsLGdldCBlZGl0b3JPcmlnaW4oKXtyZXR1cm4gWnMuZWRpdG9yT3JpZ2lufSx0b2tlbnM6bnVsbH0seXl0PW5ldyB1NCxmND1uZXcgdTQ7TXl0PXtpbml0KHtlZGl0b3JPcmlnaW46dCxjbGllbnRJZDplLHNjb3BlOmF9KXtpZih2dC5pbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkluaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UiKTtpZighMCYmdnQuYm9vdENhbGxlZCl0aHJvdyBuZXcgRXJyb3IoImBhdXRoLmluaXRgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7dnQuaW5pdGlhbGl6ZWQ9ITAsdnQudG9rZW5zPVdsLmZyb21TdG9yYWdlKCksdnQuY2xpZW50SWQ9ZSx2dC5vYXV0aFNjb3BlPWEsdnQuYnJvYWRjYXN0Q2hhbm5lbD1uZXcgQnJvYWRjYXN0Q2hhbm5lbChseXQpLFpzLnNldFF1ZXJ5UGFyYW0oImNsaWVudF9pZCIsZSksdCYmKFpzLmVkaXRvck9yaWdpbj1uZXcgVVJMKHQpLm9yaWdpbiksZjQubGlzdGVuKCgpPT52dC5hdXRoQ29tcGxldGUucmVzZXQoKSksdnQuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKTthc3luYyBmdW5jdGlvbiByKGQpe2xldCBjPWQuZGF0YTtpZihjLnR5cGU9PT0iYXV0aC1jb21wbGV0ZSIpe3Z0LnRva2Vucz1XbC5mcm9tU3RvcmFnZSgpLGF3YWl0IHZ0LnRva2Vucy5hY3RpdmF0ZShhaiksdnQuYXV0aENvbXBsZXRlLnJlc29sdmUoKTtyZXR1cm59aWYoYy50eXBlPT09ImF1dGgtZmFpbGVkIil7eXl0LmZpcmVFdmVudChjKTtyZXR1cm59aWYoYy50eXBlPT09ImF1dGgtbG9nb3V0Iil7ZjQuZmlyZUV2ZW50KCk7cmV0dXJufX1pZih2dC50b2tlbnMpe2xldCBkPXZ0LnRva2VucztpZihkLm9yaWdpbj09PXZ0LmVkaXRvck9yaWdpbilyZXR1cm4oYXN5bmMoKT0+e2lmKCFhd2FpdCBkLmFjdGl2YXRlKGFqKSl7aWYodnQudG9rZW5zIT09ZClyZXR1cm47ZjQuZmlyZUV2ZW50KCk7cmV0dXJufXZ0LmF1dGhDb21wbGV0ZS5yZXNvbHZlKCl9KSgpLHtzdGF0dXM6ImF1dGhvcml6ZWQifTtndygpLHZ0LnRva2Vucz1udWxsfWxldCBzPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLHtzZWFyY2hQYXJhbXM6bn09cyxvPSgpPT53aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sZG9jdW1lbnQudGl0bGUscyk7aWYobi5oYXMocHcpKXtsZXQgZD1uLmdldChwdyksYz1uLmdldChLVik7cmV0dXJuIG4uZGVsZXRlKHB3KSxuLmRlbGV0ZShLViksbygpLGVkKHt0eXBlOiJhdXRoLWZhaWxlZCIsZXJyb3I6ZCxkZXNjcmlwdGlvbjpjfSkse3N0YXR1czoiYXV0aC1mYWlsZWQiLGVycm9yOmQsZGVzY3JpcHRpb246Y319aWYobi5oYXMoZHcpKXtsZXQgZD1uLmdldChkdyksYz12dC5lZGl0b3JPcmlnaW47bi5kZWxldGUoZHcpLG8oKTtsZXQgcD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh1dyk7cmV0dXJuIHA/KGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHV3KSxXbC5mcm9tQXV0aENvZGUoe2VkaXRvck9yaWdpbjpjLGNsaWVudElkOnZ0LmNsaWVudElkLGF1dGhDb2RlOmQsY29kZVZlcmlmaWVyOnAscmVkaXJlY3RVcmk6eHl0KCl9KS50aGVuKGFzeW5jIGw9PntpZih2dC50b2tlbnM9bCxpaih2dC50b2tlbnMpLCFhd2FpdCB2dC50b2tlbnMuYWN0aXZhdGUoYWopKXRocm93IG5ldyBFcnJvcjt2dC5hdXRoQ29tcGxldGUucmVzb2x2ZSgpLGVkKHt0eXBlOiJhdXRoLWNvbXBsZXRlIn0pfSkuY2F0Y2gobD0+e2NvbnNvbGUuZXJyb3IobCksZjQuZmlyZUV2ZW50KCksZWQoe3R5cGU6ImF1dGgtbG9nb3V0In0pfSkse3N0YXR1czoiYXV0aG9yaXplZCJ9KTp7c3RhdHVzOiJuZWVkLWF1dGgifX1yZXR1cm57c3RhdHVzOiJuZWVkLWF1dGgifX0sYXN5bmMgc3RhcnRBdXRoRmxvdyh7cG9wdXA6dH09e30pe2lmKCF2dC5pbml0aWFsaXplZCl0aHJvdyBuZXcgRXJyb3IoImF1dGguaW5pdCBtdXN0IGJlIGNhbGxlZCBmaXJzdCIpO2lmKHQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKGZ3LCJ0cnVlIik7bGV0IGU9NTAwLGE9NjIwLGk9d2luZG93LnNjcmVlbkxlZnQrKHdpbmRvdy5vdXRlcldpZHRoLWEpLzIscj13aW5kb3cuc2NyZWVuVG9wKyh3aW5kb3cub3V0ZXJIZWlnaHQtZSkvMjt3aW5kb3cub3Blbihhd2FpdCB3eXQoKSwiX2JsYW5rIixgcG9wdXAsd2lkdGg9JHthfSxoZWlnaHQ9JHtlfSxsZWZ0PSR7aX0sdG9wPSR7cn1gKX1lbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmPWF3YWl0IHd5dCgpfSxhc3luYyBsb2dvdXQoe2lnbm9yZVJldm9rZUVycm9yOnR9PXt9KXthd2FpdCB2dC50b2tlbnM/LnJldm9rZSh2dC5jbGllbnRJZCx0Pz8hMSksZjQuZmlyZUV2ZW50KCksZWQoe3R5cGU6ImF1dGgtbG9nb3V0In0pfSxsb2dnZWRJbigpe3JldHVybiB2dC5hdXRoQ29tcGxldGUucHJvbWlzZX0sb24odCxlKXtzd2l0Y2godCl7Y2FzZSJhdXRoLWZhaWxlZCI6cmV0dXJuIHl5dC5saXN0ZW4oZSk7Y2FzZSJsb2dnZWQtb3V0IjpyZXR1cm4gZjQubGlzdGVuKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0eXBlICcke3R9Jy5gKX19fX0pO3ZhciBYcyx2dz1iKCgpPT57KGZ1bmN0aW9uKHQpe3QuVW5jYXVnaHRFeGNlcHRpb249IlBSRVZJRVdfVU5DQVVHSFRfRVhDRVBUSU9OIix0LlVuaGFuZGxlZFJlamVjdGlvbj0iUFJFVklFV19VTkhBTkRMRURfUkVKRUNUSU9OIix0LkNvbnNvbGVFcnJvcj0iUFJFVklFV19DT05TT0xFX0VSUk9SIn0pKFhzfHwoWHM9e30pKX0pO2Z1bmN0aW9uIGxqKHQsZT1zZWxmKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGEoaSl7aWYoIWl8fCFpLmRhdGEpcmV0dXJuO2xldHtpZDpyLHR5cGU6cyxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGkuZGF0YSksbz0oaS5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtNCksZDt0cnl7bGV0IGM9bi5zbGljZSgwLC0xKS5yZWR1Y2UoKGwsZik9PmxbZl0sdCkscD1uLnJlZHVjZSgobCxmKT0+bFtmXSx0KTtzd2l0Y2gocyl7Y2FzZSAwOmQ9cDticmVhaztjYXNlIDE6Y1tuLnNsaWNlKC0xKVswXV09bTQoaS5kYXRhLnZhbHVlKSxkPSEwO2JyZWFrO2Nhc2UgMjpkPXAuYXBwbHkoYyxvKTticmVhaztjYXNlIDM6e2xldCBsPW5ldyBwKC4uLm8pO2Q9QXl0KGwpfWJyZWFrO2Nhc2UgNDp7bGV0e3BvcnQxOmwscG9ydDI6Zn09bmV3IE1lc3NhZ2VDaGFubmVsO2xqKHQsZiksZD0keXQobCxbbF0pfWJyZWFrO2Nhc2UgNTpkPXZvaWQgMDticmVha319Y2F0Y2goYyl7ZD17dmFsdWU6YyxbbmpdOjB9fVByb21pc2UucmVzb2x2ZShkKS5jYXRjaChjPT4oe3ZhbHVlOmMsW25qXTowfSkpLnRoZW4oYz0+e2xldFtwLGxdPWRqKGMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLHtpZDpyfSksbCkscz09PTUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGEpLEN5dChlKSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBHVXQodCl7cmV0dXJuIHQuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gQ3l0KHQpe0dVdCh0KSYmdC5jbG9zZSgpfWZ1bmN0aW9uIF95dCh0LGUpe3JldHVybiBjaih0LFtdLGUpfWZ1bmN0aW9uIHl3KHQpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBjaih0LGU9W10sYT1mdW5jdGlvbigpe30pe2xldCBpPSExLHI9bmV3IFByb3h5KGEse2dldChzLG4pe2lmKHl3KGkpLG49PT1reXQpcmV0dXJuKCk9PkdsKHQse3R5cGU6NSxwYXRoOmUubWFwKG89Pm8udG9TdHJpbmcoKSl9KS50aGVuKCgpPT57Q3l0KHQpLGk9ITB9KTtpZihuPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9PnJ9O2xldCBvPUdsKHQse3R5cGU6MCxwYXRoOmUubWFwKGQ9PmQudG9TdHJpbmcoKSl9KS50aGVuKG00KTtyZXR1cm4gby50aGVuLmJpbmQobyl9cmV0dXJuIGNqKHQsWy4uLmUsbl0pfSxzZXQocyxuLG8pe3l3KGkpO2xldFtkLGNdPWRqKG8pO3JldHVybiBHbCh0LHt0eXBlOjEscGF0aDpbLi4uZSxuXS5tYXAocD0+cC50b1N0cmluZygpKSx2YWx1ZTpkfSxjKS50aGVuKG00KX0sYXBwbHkocyxuLG8pe3l3KGkpO2xldCBkPWVbZS5sZW5ndGgtMV07aWYoZD09PXp5dClyZXR1cm4gR2wodCx7dHlwZTo0fSkudGhlbihtNCk7aWYoZD09PSJiaW5kIilyZXR1cm4gY2oodCxlLnNsaWNlKDAsLTEpKTtsZXRbYyxwXT1UeXQobyk7cmV0dXJuIEdsKHQse3R5cGU6MixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmN9LHApLnRoZW4obTQpfSxjb25zdHJ1Y3QocyxuKXt5dyhpKTtsZXRbbyxkXT1UeXQobik7cmV0dXJuIEdsKHQse3R5cGU6MyxwYXRoOmUubWFwKGM9PmMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om99LGQpLnRoZW4obTQpfX0pO3JldHVybiByfWZ1bmN0aW9uIFlVdCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiBUeXQodCl7bGV0IGU9dC5tYXAoZGopO3JldHVybltlLm1hcChhPT5hWzBdKSxZVXQoZS5tYXAoYT0+YVsxXSkpXX1mdW5jdGlvbiAkeXQodCxlKXtyZXR1cm4gTHl0LnNldCh0LGUpLHR9ZnVuY3Rpb24gQXl0KHQpe3JldHVybiBPYmplY3QuYXNzaWduKHQse1tzal06ITB9KX1mdW5jdGlvbiBaVXQodCxlPXNlbGYsYT0iKiIpe3JldHVybntwb3N0TWVzc2FnZTooaSxyKT0+dC5wb3N0TWVzc2FnZShpLGEsciksYWRkRXZlbnRMaXN0ZW5lcjplLmFkZEV2ZW50TGlzdGVuZXIuYmluZChlKSxyZW1vdmVFdmVudExpc3RlbmVyOmUucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGUpfX1mdW5jdGlvbiBkaih0KXtmb3IobGV0W2UsYV1vZiBvailpZihhLmNhbkhhbmRsZSh0KSl7bGV0W2kscl09YS5zZXJpYWxpemUodCk7cmV0dXJuW3t0eXBlOjMsbmFtZTplLHZhbHVlOml9LHJdfXJldHVyblt7dHlwZTowLHZhbHVlOnR9LEx5dC5nZXQodCl8fFtdXX1mdW5jdGlvbiBtNCh0KXtzd2l0Y2godC50eXBlKXtjYXNlIDM6cmV0dXJuIG9qLmdldCh0Lm5hbWUpLmRlc2VyaWFsaXplKHQudmFsdWUpO2Nhc2UgMDpyZXR1cm4gdC52YWx1ZX19ZnVuY3Rpb24gR2wodCxlLGEpe3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IHI9WFV0KCk7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBzKG4peyFuLmRhdGF8fCFuLmRhdGEuaWR8fG4uZGF0YS5pZCE9PXJ8fCh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHMpLGkobi5kYXRhKSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCksdC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpyfSxlKSxhKX0pfWZ1bmN0aW9uIFhVdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9dmFyIFZVdCxqVXQsemksc2osenl0LGt5dCxuaixTeXQsVVV0LFdVdCxvaixMeXQsRHl0PWIoKCk9PntWVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGpVdD0odCxlKT0+e2Zvcih2YXIgYSBpbiBlKVZVdCh0LGEse2dldDplW2FdLGVudW1lcmFibGU6ITB9KX0semk9e307alV0KHppLHtjcmVhdGVFbmRwb2ludDooKT0+enl0LGV4cG9zZTooKT0+bGoscHJveHk6KCk9PkF5dCxwcm94eU1hcmtlcjooKT0+c2oscmVsZWFzZVByb3h5OigpPT5reXQsdHJhbnNmZXI6KCk9PiR5dCx0cmFuc2ZlckhhbmRsZXJzOigpPT5vaix3aW5kb3dFbmRwb2ludDooKT0+WlV0LHdyYXA6KCk9Pl95dH0pO3NqPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHp5dD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxreXQ9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLG5qPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxTeXQ9dD0+dHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbHx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIsVVV0PXtjYW5IYW5kbGU6dD0+U3l0KHQpJiZ0W3NqXSxzZXJpYWxpemUodCl7bGV0e3BvcnQxOmUscG9ydDI6YX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBsaih0LGUpLFthLFthXV19LGRlc2VyaWFsaXplKHQpe3JldHVybiB0LnN0YXJ0KCksX3l0KHQpfX0sV1V0PXtjYW5IYW5kbGU6dD0+U3l0KHQpJiZuaiBpbiB0LHNlcmlhbGl6ZSh7dmFsdWU6dH0pe2xldCBlO3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTp0Lm1lc3NhZ2UsbmFtZTp0Lm5hbWUsc3RhY2s6dC5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6dH0sW2UsW11dfSxkZXNlcmlhbGl6ZSh0KXt0aHJvdyB0LmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IodC52YWx1ZS5tZXNzYWdlKSx0LnZhbHVlKTp0LnZhbHVlfX0sb2o9bmV3IE1hcChbWyJwcm94eSIsVVV0XSxbInRocm93IixXVXRdXSk7THl0PW5ldyBXZWFrTWFwfSk7dmFyIEV5dD1iKCgpPT57fSk7ZnVuY3Rpb24gcGoodCl7cmV0dXJuISh0PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCJ8fCEoInR5cGUiaW4gdCl8fCFLVXQuaW5jbHVkZXModC50eXBlKSl9dmFyIEtVdCxQeXQ9YigoKT0+e3Z3KCk7S1V0PVtYcy5Db25zb2xlRXJyb3IsWHMuVW5jYXVnaHRFeGNlcHRpb24sWHMuVW5oYW5kbGVkUmVqZWN0aW9uXX0pO3ZhciBoaj1iKCgpPT57RXl0KCk7dncoKTtQeXQoKX0pO2Z1bmN0aW9uIGc0KHQpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHQ/T2JqZWN0LmFzc2lnbihlLHQpOmV9dmFyIEl5dD1iKCgpPT57fSk7ZnVuY3Rpb24gdWoodCl7bGV0IGU9e2Q6e319O2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyh0KSl7bGV0IGk9dFthXTtpZigiZmlsZSJpbiBpKXtpZigic3ltbGluayJpbiBpLmZpbGUpe2UuZFthXT17Zjp7bDppLmZpbGUuc3ltbGlua319O2NvbnRpbnVlfWxldCBzPWkuZmlsZS5jb250ZW50cyxuPXR5cGVvZiBzPT0ic3RyaW5nIj9zOlFVdC5kZWNvZGUocyksbz10eXBlb2Ygcz09InN0cmluZyI/e306e2I6ITB9O2UuZFthXT17Zjp7YzpuLC4uLm99fTtjb250aW51ZX1sZXQgcj11aihpLmRpcmVjdG9yeSk7ZS5kW2FdPXJ9cmV0dXJuIGV9ZnVuY3Rpb24gZmoodCl7bGV0IGU9ZzQoKTtpZigiZiJpbiB0KXRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGV4cG9ydCBhIHNpbmdsZSBmaWxlIGluIHRoZSBKU09OIGZvcm1hdC4iKTtpZigiZCJpbiB0KWZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyh0LmQpKXtsZXQgaT10LmRbYV07ImQiaW4gaT9lW2FdPWc0KHtkaXJlY3Rvcnk6ZmooaSl9KToiZiJpbiBpJiYoImMiaW4gaS5mP2VbYV09ZzQoe2ZpbGU6ZzQoe2NvbnRlbnRzOmkuZi5iP0pVdChpLmYuYyk6aS5mLmN9KX0pOiJsImluIGkuZiYmKGVbYV09ZzQoe2ZpbGU6ZzQoe3N5bWxpbms6aS5mLmx9KX0pKSl9cmV0dXJuIGV9ZnVuY3Rpb24gSlV0KHQpe2xldCBlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyllW2FdPXRbYV0uY2hhckNvZGVBdCgwKTtyZXR1cm4gZX12YXIgUVV0LE55dD1iKCgpPT57SXl0KCk7UVV0PW5ldyBUZXh0RGVjb2RlcigibGF0aW4xIil9KTtmdW5jdGlvbiBmNzIodCl7aWYodnQuYm9vdENhbGxlZCl0aHJvdyBuZXcgRXJyb3IoImBjb25maWd1cmVBUElLZXlgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7WnMuc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIix0KX1hc3luYyBmdW5jdGlvbiBpV3QodCl7bGV0e3NlcnZlclByb21pc2U6ZX09cld0KHQpLGk9YXdhaXQoYXdhaXQgZSkuYnVpbGQoe2hvc3Q6d2luZG93LmxvY2F0aW9uLmhvc3QsdmVyc2lvbjoiMS42LjEiLHdvcmtkaXJOYW1lOnQud29ya2Rpck5hbWUsZm9yd2FyZFByZXZpZXdFcnJvcnM6dC5mb3J3YXJkUHJldmlld0Vycm9yc30pLFtyLHMsbl09YXdhaXQgUHJvbWlzZS5hbGwoW2kuZnMoKSxpLnByZXZpZXdTY3JpcHQoKSxpLnJ1bnRpbWVJbmZvKCldKTtyZXR1cm4gbmV3IHRkKGkscixzLG4pfWZ1bmN0aW9uIHhqKHQpe2lmKHQhPW51bGwpcmV0dXJuIGU9PntlIGluc3RhbmNlb2YgVWludDhBcnJheT90KEZ5dC5kZWNvZGUoZSkpOmU9PW51bGwmJnQobnVsbCl9fWZ1bmN0aW9uIE13KHQpe2lmKHQhPW51bGwpcmV0dXJuIHppLnByb3h5KHQpfWZ1bmN0aW9uIHJXdCh0KXtpZih3dyE9bnVsbClyZXR1cm4gdC5jb2VwIT09bWouY29lcCYmKGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBib290IFdlYkNvbnRhaW5lciB3aXRoICdjb2VwOiAke3QuY29lcH0nYCksY29uc29sZS53YXJuKGBGaXJzdCBib290IGhhZCAnY29lcDogJHttai5jb2VwfScsIG5ldyBzZXR0aW5ncyB3aWxsIG5vdCB0YWtlIGVmZmVjdCFgKSkse3NlcnZlclByb21pc2U6d3d9O3QuY29lcCYmWnMuc2V0UXVlcnlQYXJhbSgiY29lcCIsdC5jb2VwKSx0LmV4cGVyaW1lbnRhbE5vZGUmJlpzLnNldFF1ZXJ5UGFyYW0oImV4cGVyaW1lbnRhbF9ub2RlIiwiMSIpO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2Uuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5zZXRBdHRyaWJ1dGUoImFsbG93IiwiY3Jvc3Mtb3JpZ2luLWlzb2xhdGVkIik7bGV0IGE9WnMudXJsO2Uuc3JjPWEudG9TdHJpbmcoKTtsZXR7b3JpZ2luOml9PWE7cmV0dXJuIG1qPXsuLi50fSx3dz1uZXcgUHJvbWlzZShyPT57bGV0IHM9bj0+e2lmKG4ub3JpZ2luIT09aSlyZXR1cm47bGV0e2RhdGE6b309bjtpZihvLnR5cGU9PT0iaW5pdCIpe3Ioemkud3JhcChuLnBvcnRzWzBdKSk7cmV0dXJufWlmKG8udHlwZT09PSJ3YXJuaW5nIil7Y29uc29sZVtvLmxldmVsXS5jYWxsKGNvbnNvbGUsby5tZXNzYWdlKTtyZXR1cm59fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyl9KSxkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShlLG51bGwpLHtzZXJ2ZXJQcm9taXNlOnd3fX1mdW5jdGlvbiBzV3QodCl7cmV0dXJuIHR5cGVvZiB0WzBdPT0ic3RyaW5nIn1mdW5jdGlvbiBuV3QodCl7cmV0dXJuIHRbMF1pbnN0YW5jZW9mIFVpbnQ4QXJyYXl9ZnVuY3Rpb24gb1d0KCl7bGV0IHQ9bnVsbDtyZXR1cm57c3RyZWFtOm5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoaSl7dD1pfX0pLHB1c2g6aT0+e2khPW51bGw/dD8uZW5xdWV1ZShpKToodD8uY2xvc2UoKSx0PW51bGwpfX19ZnVuY3Rpb24gbFd0KHQpe2xldCBlPSExLGE9KCk9Pnt9O3JldHVybntzdWJzY3JpYmUocil7cmV0dXJuIHIudGhlbihzPT57YT1zLGUmJmEoKX0pLCgpPT57ZT0hMCxhKCl9fSxsaXN0ZW5lcjooKC4uLnIpPT57ZXx8dCguLi5yKX0pfX12YXIgdTcyLHh3LHd3LG1qLEZ5dCxlV3QsdGQsdFd0LGFXdCxnaixiaix2aix5aixPeXQ9YigoKT0+e3JqKCk7dncoKTtEeXQoKTtyaigpO0pWKCk7dGooKTtoaigpO055dCgpO2hqKCk7dTcyPU15dCx4dz1udWxsLHd3PW51bGwsbWo9e30sRnl0PW5ldyBUZXh0RGVjb2RlcixlV3Q9bmV3IFRleHRFbmNvZGVyLHRkPWNsYXNzIHR7X2luc3RhbmNlO19ydW50aW1lSW5mbztmcztzdGF0aWMgX2luc3RhbmNlPW51bGw7c3RhdGljIF90ZWFyZG93blByb21pc2U9bnVsbDtfdG9ybkRvd249ITE7X3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyPSgpPT57fTtjb25zdHJ1Y3RvcihlLGEsaSxyKXt0aGlzLl9pbnN0YW5jZT1lLHRoaXMuX3J1bnRpbWVJbmZvPXIsdGhpcy5mcz1uZXcgeWooYSksdnQuaW5pdGlhbGl6ZWQmJih0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lcj11eXQocz0+e3RoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHthY2Nlc3NUb2tlbjpzLGVkaXRvck9yaWdpbjp2dC5lZGl0b3JPcmlnaW59KX0pLChhc3luYygpPT57YXdhaXQgdnQuYXV0aENvbXBsZXRlLnByb21pc2UsIXRoaXMuX3Rvcm5Eb3duJiYoaWoodnQudG9rZW5zKSxhd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXRDcmVkZW50aWFscyh7YWNjZXNzVG9rZW46dnQudG9rZW5zLmFjY2VzcyxlZGl0b3JPcmlnaW46dnQuZWRpdG9yT3JpZ2lufSkpfSkoKS5jYXRjaChzPT57Y29uc29sZS5lcnJvcihzKX0pKX1hc3luYyBzcGF3bihlLGEsaSl7bGV0IHI9W107QXJyYXkuaXNBcnJheShhKT9yPWE6aT1hO2xldCBzLG49bmV3IFJlYWRhYmxlU3RyZWFtO2lmKGk/Lm91dHB1dCE9PSExKXtsZXQgdj1vV3QoKTtzPXYucHVzaCxuPXYuc3RyZWFtfWxldCBvLGQsYyxwLGw9TXcoeGoocykpLGY9TXcoeGoobykpLGc9TXcoeGooYykpLHk9YXdhaXQgdGhpcy5faW5zdGFuY2UucnVuKHtjb21tYW5kOmUsYXJnczpyLGN3ZDppPy5jd2QsZW52Omk/LmVudix0ZXJtaW5hbDppPy50ZXJtaW5hbH0sZixnLGwpO3JldHVybiBuZXcgdmooeSxuLGQscCl9YXN5bmMgZXhwb3J0KGUsYSl7bGV0IGk9e2Zvcm1hdDphPy5mb3JtYXQ/PyJqc29uIixpbmNsdWRlczphPy5pbmNsdWRlcyxleGNsdWRlczphPy5leGNsdWRlcyxleHRlcm5hbDohMH0scj1hd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXJpYWxpemUoZSxpKTtpZihpLmZvcm1hdD09PSJqc29uIil7bGV0IHM9SlNPTi5wYXJzZShGeXQuZGVjb2RlKHIpKTtyZXR1cm4gZmoocyl9cmV0dXJuIHJ9b24oZSxhKXtpZihlPT09InByZXZpZXctbWVzc2FnZSIpe2xldCBzPWE7YT0obj0+e3BqKG4pJiZzKG4pfSl9bGV0e2xpc3RlbmVyOmksc3Vic2NyaWJlOnJ9PWxXdChhKTtyZXR1cm4gcih0aGlzLl9pbnN0YW5jZS5vbihlLHppLnByb3h5KGkpKSl9bW91bnQoZSxhKXtsZXQgaT1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShlKTplV3QuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHVqKGUpKSk7cmV0dXJuIHRoaXMuX2luc3RhbmNlLmxvYWRGaWxlcyh6aS50cmFuc2ZlcihpLFtpLmJ1ZmZlcl0pLHttb3VudFBvaW50czphPy5tb3VudFBvaW50fSl9c2V0UHJldmlld1NjcmlwdChlLGEpe3JldHVybiB0aGlzLl9pbnN0YW5jZS5zZXRQcmV2aWV3U2NyaXB0KGUsYSl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fcnVudGltZUluZm8ucGF0aH1nZXQgd29ya2Rpcigpe3JldHVybiB0aGlzLl9ydW50aW1lSW5mby5jd2R9dGVhcmRvd24oKXtpZih0aGlzLl90b3JuRG93bil0aHJvdyBuZXcgRXJyb3IoIldlYkNvbnRhaW5lciBhbHJlYWR5IHRvcm4gZG93biIpO3RoaXMuX3Rvcm5Eb3duPSEwLHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyKCk7bGV0IGU9YXN5bmMoKT0+e3RyeXthd2FpdCB0aGlzLmZzLl90ZWFyZG93bigpLGF3YWl0IHRoaXMuX2luc3RhbmNlLnRlYXJkb3duKCl9ZmluYWxseXt0aGlzLl9pbnN0YW5jZVt6aS5yZWxlYXNlUHJveHldKCksdC5faW5zdGFuY2U9PT10aGlzJiYodC5faW5zdGFuY2U9bnVsbCl9fTt0Ll90ZWFyZG93blByb21pc2U9ZSgpfXN0YXRpYyBhc3luYyBib290KGU9e30pe2F3YWl0IHRoaXMuX3RlYXJkb3duUHJvbWlzZSx0Ll90ZWFyZG93blByb21pc2U9bnVsbDtsZXR7d29ya2Rpck5hbWU6YX09ZTtpZih3aW5kb3cuY3Jvc3NPcmlnaW5Jc29sYXRlZCYmZS5jb2VwPT09Im5vbmUiJiZjb25zb2xlLndhcm4oYEEgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSBoZWFkZXIgaXMgcmVxdWlyZWQgaW4gY3Jvc3Mgb3JpZ2luIGlzb2xhdGVkIGVudmlyb25tZW50cy4KU2V0IHRoZSAnY29lcCcgb3B0aW9uIHRvICdyZXF1aXJlLWNvcnAnLmApLGE/LmluY2x1ZGVzKCIvIil8fGE9PT0iLi4ifHxhPT09Ii4iKXRocm93IG5ldyBFcnJvcigid29ya2Rpck5hbWUgc2hvdWxkIGJlIGEgdmFsaWQgZm9sZGVyIG5hbWUiKTtmb3IodnQuYm9vdENhbGxlZD0hMDt4dzspYXdhaXQgeHc7aWYodC5faW5zdGFuY2UpdGhyb3cgbmV3IEVycm9yKCJPbmx5IGEgc2luZ2xlIFdlYkNvbnRhaW5lciBpbnN0YW5jZSBjYW4gYmUgYm9vdGVkIik7bGV0IGk9aVd0KGUpO3h3PWkuY2F0Y2goKCk9Pnt9KTt0cnl7bGV0IHI9YXdhaXQgaTtyZXR1cm4gdC5faW5zdGFuY2U9cixyfWZpbmFsbHl7eHc9bnVsbH19fTt0V3Q9MSxhV3Q9Mixnaj1jbGFzc3tuYW1lO190eXBlO2NvbnN0cnVjdG9yKGUsYSl7dGhpcy5uYW1lPWUsdGhpcy5fdHlwZT1hfWlzRmlsZSgpe3JldHVybiB0aGlzLl90eXBlPT09dFd0fWlzRGlyZWN0b3J5KCl7cmV0dXJuIHRoaXMuX3R5cGU9PT1hV3R9fSxiaj1jbGFzc3tfYXBpQ2xpZW50O19wYXRoO19vcHRpb25zO19saXN0ZW5lcjtfd3JhcHBlZExpc3RlbmVyO193YXRjaGVyO19jbG9zZWQ9ITE7Y29uc3RydWN0b3IoZSxhLGkscil7dGhpcy5fYXBpQ2xpZW50PWUsdGhpcy5fcGF0aD1hLHRoaXMuX29wdGlvbnM9aSx0aGlzLl9saXN0ZW5lcj1yLHRoaXMuX2FwaUNsaWVudC5fd2F0Y2hlcnMuYWRkKHRoaXMpLHRoaXMuX3dyYXBwZWRMaXN0ZW5lcj0ocyxuKT0+e3RoaXMuX2xpc3RlbmVyJiYhdGhpcy5fY2xvc2VkJiZ0aGlzLl9saXN0ZW5lcihzLG4pfSx0aGlzLl9hcGlDbGllbnQuX2ZzLndhdGNoKHRoaXMuX3BhdGgsdGhpcy5fb3B0aW9ucyxNdyh0aGlzLl93cmFwcGVkTGlzdGVuZXIpKS50aGVuKHM9PntpZih0aGlzLl93YXRjaGVyPXMsdGhpcy5fY2xvc2VkKXJldHVybiB0aGlzLl90ZWFyZG93bigpfSkuY2F0Y2goY29uc29sZS5lcnJvcil9YXN5bmMgY2xvc2UoKXt0aGlzLl9jbG9zZWR8fCh0aGlzLl9jbG9zZWQ9ITAsdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5kZWxldGUodGhpcyksYXdhaXQgdGhpcy5fdGVhcmRvd24oKSl9YXN5bmMgX3RlYXJkb3duKCl7YXdhaXQgdGhpcy5fd2F0Y2hlcj8uY2xvc2UoKS5maW5hbGx5KCgpPT57dGhpcy5fd2F0Y2hlcj8uW3ppLnJlbGVhc2VQcm94eV0oKX0pfX0sdmo9Y2xhc3N7b3V0cHV0O2lucHV0O2V4aXQ7X3Byb2Nlc3M7c3Rkb3V0O3N0ZGVycjtjb25zdHJ1Y3RvcihlLGEsaSxyKXt0aGlzLm91dHB1dD1hLHRoaXMuX3Byb2Nlc3M9ZSx0aGlzLmlucHV0PW5ldyBXcml0YWJsZVN0cmVhbSh7d3JpdGU6cz0+e3RoaXMuX2dldFByb2Nlc3MoKT8ud3JpdGUocykuY2F0Y2goKCk9Pnt9KX19KSx0aGlzLmV4aXQ9dGhpcy5fb25FeGl0KCksdGhpcy5zdGRvdXQ9aSx0aGlzLnN0ZGVycj1yfWtpbGwoKXt0aGlzLl9wcm9jZXNzPy5raWxsKCl9cmVzaXplKGUpe3RoaXMuX2dldFByb2Nlc3MoKT8ucmVzaXplKGUpfWFzeW5jIF9vbkV4aXQoKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3Byb2Nlc3Mub25FeGl0fWZpbmFsbHl7dGhpcy5fcHJvY2Vzcz8uW3ppLnJlbGVhc2VQcm94eV0oKSx0aGlzLl9wcm9jZXNzPW51bGx9fV9nZXRQcm9jZXNzKCl7cmV0dXJuIHRoaXMuX3Byb2Nlc3M9PW51bGwmJmNvbnNvbGUud2FybigiVGhpcyBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIiksdGhpcy5fcHJvY2Vzc319LHlqPWNsYXNze19mcztfd2F0Y2hlcnM9bmV3IFNldChbXSk7Y29uc3RydWN0b3IoZSl7dGhpcy5fZnM9ZX1ybSguLi5lKXtyZXR1cm4gdGhpcy5fZnMucm0oLi4uZSl9YXN5bmMgcmVhZEZpbGUoZSxhKXtyZXR1cm4gYXdhaXQgdGhpcy5fZnMucmVhZEZpbGUoZSxhKX1hc3luYyByZW5hbWUoZSxhKXtyZXR1cm4gYXdhaXQgdGhpcy5fZnMucmVuYW1lKGUsYSl9YXN5bmMgd3JpdGVGaWxlKGUsYSxpKXtpZihhIGluc3RhbmNlb2YgVWludDhBcnJheSl7bGV0IHI9YS5idWZmZXIuc2xpY2UoYS5ieXRlT2Zmc2V0LGEuYnl0ZU9mZnNldCthLmJ5dGVMZW5ndGgpO2E9emkudHJhbnNmZXIobmV3IFVpbnQ4QXJyYXkociksW3JdKX1hd2FpdCB0aGlzLl9mcy53cml0ZUZpbGUoZSxhLGkpfWFzeW5jIHJlYWRkaXIoZSxhKXtsZXQgaT1hd2FpdCB0aGlzLl9mcy5yZWFkZGlyKGUsYSk7cmV0dXJuIHNXdChpKXx8bld0KGkpP2k6aS5tYXAocz0+bmV3IGdqKHMubmFtZSxzWyJTeW1ib2wodHlwZSkiXSkpfWFzeW5jIG1rZGlyKGUsYSl7cmV0dXJuIGF3YWl0IHRoaXMuX2ZzLm1rZGlyKGUsYSl9d2F0Y2goZSxhLGkpe3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIiYmKGk9YSxhPW51bGwpLG5ldyBiaih0aGlzLGUsYSxpKX1hc3luYyBfdGVhcmRvd24oKXt0aGlzLl9mc1t6aS5yZWxlYXNlUHJveHldKCksYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnRoaXMuX3dhdGNoZXJzXS5tYXAoZT0+ZS5jbG9zZSgpKSl9fX0pO3ZhciBiNCxSeXQ9YigoKT0+e095dCgpO2I0PWNsYXNzIHR7c3RhdGljIHNoYXJlZENvbnRhaW5lcj1udWxsO3N0YXRpYyBib290UHJvbWlzZT1udWxsO19yZWFkeT0hMTt0eXBlPSJ3ZWJjb250YWluZXIiO2dldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZWFkeX1nZXQgY29udGFpbmVyKCl7cmV0dXJuIHQuc2hhcmVkQ29udGFpbmVyfWFzeW5jIGluaXQoKXtpZighKHRoaXMuX3JlYWR5JiZ0LnNoYXJlZENvbnRhaW5lcikpe2lmKHQuYm9vdFByb21pc2Upe2F3YWl0IHQuYm9vdFByb21pc2UsdGhpcy5fcmVhZHk9ITA7cmV0dXJufWlmKHQuc2hhcmVkQ29udGFpbmVyKXt0aGlzLl9yZWFkeT0hMDtyZXR1cm59aWYodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFdlYkNvbnRhaW5lciByZXF1aXJlcyBTaGFyZWRBcnJheUJ1ZmZlciB3aGljaCBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgeW91ciBzZXJ2ZXIgc2VuZHMgdGhlc2UgaGVhZGVyczoKICBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeTogc2FtZS1vcmlnaW4KICBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5OiByZXF1aXJlLWNvcnBgKTt0LmJvb3RQcm9taXNlPXRkLmJvb3QoKTt0cnl7dC5zaGFyZWRDb250YWluZXI9YXdhaXQgdC5ib290UHJvbWlzZSx0aGlzLl9yZWFkeT0hMH1jYXRjaChlKXt0aHJvdyB0LmJvb3RQcm9taXNlPW51bGwsZX19fWFzeW5jIGRlc3Ryb3koKXt0LnNoYXJlZENvbnRhaW5lciYmKHQuc2hhcmVkQ29udGFpbmVyLnRlYXJkb3duKCksdC5zaGFyZWRDb250YWluZXI9bnVsbCx0LmJvb3RQcm9taXNlPW51bGwsdGhpcy5fcmVhZHk9ITEpfWFzeW5jIHJlYWRGaWxlKGUpe3JldHVybiB0aGlzLmVuc3VyZVJlYWR5KCksYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUoZSwidXRmLTgiKX1hc3luYyB3cml0ZUZpbGUoZSxhKXt0aGlzLmVuc3VyZVJlYWR5KCksYXdhaXQgdGhpcy5jb250YWluZXIuZnMud3JpdGVGaWxlKGUsYSwidXRmLTgiKX1hc3luYyByZWFkRGlyKGUpe3JldHVybiB0aGlzLmVuc3VyZVJlYWR5KCksKGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRkaXIoZSx7d2l0aEZpbGVUeXBlczohMH0pKS5tYXAoaT0+KHt0eXBlOmkuaXNEaXJlY3RvcnkoKT8iZGlyZWN0b3J5IjoiZmlsZSIsbmFtZTppLm5hbWUscGF0aDplPT09Ii8iP2AvJHtpLm5hbWV9YDpgJHtlfS8ke2kubmFtZX1gfSkpfWFzeW5jIG1rZGlyKGUpe3RoaXMuZW5zdXJlUmVhZHkoKSxhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5ta2RpcihlLHtyZWN1cnNpdmU6ITB9KX1hc3luYyBybShlLGEpe3RoaXMuZW5zdXJlUmVhZHkoKSxhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5ybShlLHtyZWN1cnNpdmU6YT8ucmVjdXJzaXZlPz8hMX0pfWFzeW5jIGV4aXN0cyhlKXt0aGlzLmVuc3VyZVJlYWR5KCk7dHJ5e3JldHVybiBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5yZWFkRmlsZShlKSwhMH1jYXRjaHt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRkaXIoZSksITB9Y2F0Y2h7cmV0dXJuITF9fX13YXRjaChlLGEsaSl7dGhpcy5lbnN1cmVSZWFkeSgpO2xldCByPXRoaXMuY29udGFpbmVyLmZzLndhdGNoKGUse3JlY3Vyc2l2ZTppPy5yZWN1cnNpdmU/PyExfSxhKTtyZXR1cm57c3RvcDooKT0+ci5jbG9zZSgpfX1hc3luYyBzcGF3bihlLGE9W10pe3RoaXMuZW5zdXJlUmVhZHkoKTtsZXQgaT1hd2FpdCB0aGlzLmNvbnRhaW5lci5zcGF3bihlLGEpO3JldHVybntvdXRwdXQ6aS5vdXRwdXQsaW5wdXQ6aS5pbnB1dCxleGl0OmkuZXhpdCxraWxsOigpPT5pLmtpbGwoKX19YXN5bmMgbW91bnQoZSl7dGhpcy5lbnN1cmVSZWFkeSgpLGF3YWl0IHRoaXMuY29udGFpbmVyLm1vdW50KGUpfWdldENvbnRhaW5lcigpe3JldHVybiB0aGlzLmVuc3VyZVJlYWR5KCksdGhpcy5jb250YWluZXJ9ZW5zdXJlUmVhZHkoKXtpZighdGhpcy5fcmVhZHl8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIldlYkNvbnRhaW5lckVudmlyb25tZW50IG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuIil9fX0pO3ZhciBCeXQ9YigoKT0+e1J5dCgpfSk7dmFyIHp3PWIoKCk9PntueXQoKTtCeXQoKX0pO3ZhciBIeXQ9YigoKT0+e0JxKCl9KTt2YXIgYWQsd2o9YigoKT0+e2FkPWNsYXNze3RhYnM9bmV3IE1hcDt0YWJDb3VudGVyPTA7eHRlcm1CdW5kbGU9bnVsbDt4dGVybUZpdEFkZG9uQnVuZGxlPW51bGw7c2V0WHRlcm1Nb2R1bGVzKGUsYSl7dGhpcy54dGVybUJ1bmRsZT1lLHRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZT1hfWdlbmVyYXRlVGFiSWQoKXtyZXR1cm4gdGhpcy50YWJDb3VudGVyKyssYHRlcm1pbmFsLSR7dGhpcy50YWJDb3VudGVyfS0ke0RhdGUubm93KCl9YH1nZXREZWZhdWx0TGFiZWwoZSxhKXtzd2l0Y2goZSl7Y2FzZSJzaGVsbCI6cmV0dXJuImJhc2giO2Nhc2Uic2NyaXB0IjpyZXR1cm4gYT8uc2NyaXB0TmFtZXx8InNjcmlwdCI7Y2FzZSJwYWNrYWdlLXVwZGF0ZSI6cmV0dXJuIGE/LnBhY2thZ2VOYW1lP2B1cGRhdGUgJHthLnBhY2thZ2VOYW1lfWA6InVwZGF0ZSI7Y2FzZSJjdXN0b20iOnJldHVybiBhPy5jb21tYW5kfHwicHJvY2VzcyI7ZGVmYXVsdDpyZXR1cm4idGVybWluYWwifX1nZXREZWZhdWx0SWNvbihlKXtzd2l0Y2goZSl7Y2FzZSJzaGVsbCI6cmV0dXJuImx1Y2lkZTp0ZXJtaW5hbCI7Y2FzZSJzY3JpcHQiOnJldHVybiJsdWNpZGU6cGxheSI7Y2FzZSJwYWNrYWdlLXVwZGF0ZSI6cmV0dXJuImx1Y2lkZTpwYWNrYWdlQ2hlY2siO2Nhc2UiY3VzdG9tIjpyZXR1cm4ibHVjaWRlOmNvZGUiO2RlZmF1bHQ6cmV0dXJuImx1Y2lkZTp0ZXJtaW5hbCJ9fWdldFRlcm1pbmFsVGhlbWUoZSl7cmV0dXJuIGU/e2JhY2tncm91bmQ6IiNmZmZmZmYiLGZvcmVncm91bmQ6IiMzMzMzMzMiLGN1cnNvcjoiIzMzMzMzMyIsY3Vyc29yQWNjZW50OiIjZmZmZmZmIixzZWxlY3Rpb246InJnYmEoMCwgMCwgMCwgMC4yKSIsYmxhY2s6IiMwMDAwMDAiLHJlZDoiI2NkMzEzMSIsZ3JlZW46IiMwMGJjMDAiLHllbGxvdzoiIzk0OTgwMCIsYmx1ZToiIzA0NTFhNSIsbWFnZW50YToiI2JjMDViYyIsY3lhbjoiIzA1OThiYyIsd2hpdGU6IiM1NTU1NTUiLGJyaWdodEJsYWNrOiIjNjY2NjY2IixicmlnaHRSZWQ6IiNjZDMxMzEiLGJyaWdodEdyZWVuOiIjMTRjZTE0IixicmlnaHRZZWxsb3c6IiNiNWJhMDAiLGJyaWdodEJsdWU6IiMwNDUxYTUiLGJyaWdodE1hZ2VudGE6IiNiYzA1YmMiLGJyaWdodEN5YW46IiMwNTk4YmMiLGJyaWdodFdoaXRlOiIjYTVhNWE1In06e2JhY2tncm91bmQ6IiMwMDAwMDAiLGZvcmVncm91bmQ6IiNmZmZmZmYiLGN1cnNvcjoiI2ZmZmZmZiIsY3Vyc29yQWNjZW50OiIjMDAwMDAwIixzZWxlY3Rpb246InJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9fWNyZWF0ZVRhYihlLGEpe2lmKCF0aGlzLnh0ZXJtQnVuZGxlfHwhdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlKXRocm93IG5ldyBFcnJvcigiVGVybWluYWxUYWJNYW5hZ2VyOiB4dGVybSBtb2R1bGVzIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBzZXRYdGVybU1vZHVsZXMoKSBmaXJzdC4iKTtsZXQgaT10aGlzLmdlbmVyYXRlVGFiSWQoKSxyPWUudHlwZSxzPW5ldyB0aGlzLnh0ZXJtQnVuZGxlLlRlcm1pbmFsKHtjb252ZXJ0RW9sOiEwLGN1cnNvckJsaW5rOiEwLHRoZW1lOnRoaXMuZ2V0VGVybWluYWxUaGVtZShhKSxmb250RmFtaWx5OidNZW5sbywgTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEzLGxpbmVIZWlnaHQ6MS4yfSksbj1uZXcgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uO3MubG9hZEFkZG9uKG4pO2xldCBvPXtpZDppLGxhYmVsOmUubGFiZWx8fHRoaXMuZ2V0RGVmYXVsdExhYmVsKHIsZS5tZXRhZGF0YSksaWNvbk5hbWU6ZS5pY29uTmFtZXx8dGhpcy5nZXREZWZhdWx0SWNvbihyKSx0eXBlOnIsY2xvc2VhYmxlOmUuY2xvc2VhYmxlPz9yIT09InNoZWxsIix0ZXJtaW5hbDpzLGZpdEFkZG9uOm4scHJvY2VzczpudWxsLGlucHV0V3JpdGVyOm51bGwsZXhpdGVkOiExLGV4aXRDb2RlOm51bGwsY3JlYXRlZEF0OkRhdGUubm93KCksbWV0YWRhdGE6ZS5tZXRhZGF0YX07cmV0dXJuIHRoaXMudGFicy5zZXQoaSxvKSxvfWdldFRhYihlKXtyZXR1cm4gdGhpcy50YWJzLmdldChlKX1nZXRBbGxUYWJzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy50YWJzLnZhbHVlcygpKS5zb3J0KChlLGEpPT5lLmNyZWF0ZWRBdC1hLmNyZWF0ZWRBdCl9Z2V0VGFiQ291bnQoKXtyZXR1cm4gdGhpcy50YWJzLnNpemV9aGFzVGFiKGUpe3JldHVybiB0aGlzLnRhYnMuaGFzKGUpfWNsb3NlVGFiKGUpe2xldCBhPXRoaXMudGFicy5nZXQoZSk7aWYoIWEpcmV0dXJuITE7aWYoYS5wcm9jZXNzJiYhYS5leGl0ZWQpdHJ5e2EucHJvY2Vzcy5raWxsKCl9Y2F0Y2goaSl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8ga2lsbCBwcm9jZXNzOiIsaSl9dHJ5e2EudGVybWluYWwuZGlzcG9zZSgpfWNhdGNoKGkpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGRpc3Bvc2UgdGVybWluYWw6IixpKX1yZXR1cm4gdGhpcy50YWJzLmRlbGV0ZShlKSwhMH1yZW5hbWVUYWIoZSxhKXtsZXQgaT10aGlzLnRhYnMuZ2V0KGUpO3JldHVybiBpPyhpLmxhYmVsPWEsITApOiExfW1hcmtUYWJFeGl0ZWQoZSxhKXtsZXQgaT10aGlzLnRhYnMuZ2V0KGUpO2kmJihpLmV4aXRlZD0hMCxpLmV4aXRDb2RlPWEpfXNldFRhYlByb2Nlc3MoZSxhLGkpe2xldCByPXRoaXMudGFicy5nZXQoZSk7ciYmKHIucHJvY2Vzcz1hLHIuaW5wdXRXcml0ZXI9aSl9dXBkYXRlQWxsVGhlbWVzKGUpe2xldCBhPXRoaXMuZ2V0VGVybWluYWxUaGVtZShlKTtmb3IobGV0IGkgb2YgdGhpcy50YWJzLnZhbHVlcygpKWkudGVybWluYWwub3B0aW9ucy50aGVtZT1hfWRpc3Bvc2VBbGwoKXtmb3IobGV0W2Vdb2YgdGhpcy50YWJzKXRoaXMuY2xvc2VUYWIoZSk7dGhpcy50YWJzLmNsZWFyKCl9fX0pO3ZhciBxeXQ9e307V2UocXl0LHtEZWVzV29ya3NwYWNlVGVybWluYWw6KCk9Pk1qfSk7dmFyIHpvLHdhLE1qLGlkPWIoKCk9Pnt1ZSgpO0x0KCk7VmUoKTt6dygpO0V0KCk7ZXcoKTt3aigpO2JvKCk7em89ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSx3YT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sTWo9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdO3ZhciBxPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgQz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOk9iamVjdH0pXSxkPVtJKCldLGw9W0koKV0seT1bSSh7dHlwZTpOdW1iZXJ9KV0seD1bSSh7dHlwZTpCb29sZWFufSldLEY9W0soKV0sTj1bSygpXSx6byh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImV4ZWN1dGlvbkVudmlyb25tZW50IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4iZXhlY3V0aW9uRW52aXJvbm1lbnQiaW4geixnZXQ6ej0+ei5leGVjdXRpb25FbnZpcm9ubWVudCxzZXQ6KHosRSk9Pnt6LmV4ZWN1dGlvbkVudmlyb25tZW50PUV9fSxtZXRhZGF0YTpDfSxuLG8pLHpvKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2V0dXBDb21tYW5kIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4ic2V0dXBDb21tYW5kImluIHosZ2V0Ono9Pnouc2V0dXBDb21tYW5kLHNldDooeixFKT0+e3ouc2V0dXBDb21tYW5kPUV9fSxtZXRhZGF0YTpDfSxjLHApLHpvKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZW52aXJvbm1lbnRWYXJpYWJsZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJlbnZpcm9ubWVudFZhcmlhYmxlcyJpbiB6LGdldDp6PT56LmVudmlyb25tZW50VmFyaWFibGVzLHNldDooeixFKT0+e3ouZW52aXJvbm1lbnRWYXJpYWJsZXM9RX19LG1ldGFkYXRhOkN9LGYsZyksem8odGhpcyxudWxsLHkse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJCYXJXaWR0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6ej0+InRhYkJhcldpZHRoImluIHosZ2V0Ono9PnoudGFiQmFyV2lkdGgsc2V0Oih6LEUpPT57ei50YWJCYXJXaWR0aD1FfX0sbWV0YWRhdGE6Q30sdixtKSx6byh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dUYWJCYXIiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJzaG93VGFiQmFyImluIHosZ2V0Ono9Pnouc2hvd1RhYkJhcixzZXQ6KHosRSk9Pnt6LnNob3dUYWJCYXI9RX19LG1ldGFkYXRhOkN9LE0sUyksem8odGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0YWJzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczp6PT4idGFicyJpbiB6LGdldDp6PT56LnRhYnMsc2V0Oih6LEUpPT57ei50YWJzPUV9fSxtZXRhZGF0YTpDfSxfLGspLHpvKHRoaXMsbnVsbCxOLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiYWN0aXZlVGFiSWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOno9PiJhY3RpdmVUYWJJZCJpbiB6LGdldDp6PT56LmFjdGl2ZVRhYklkLHNldDooeixFKT0+e3ouYWN0aXZlVGFiSWQ9RX19LG1ldGFkYXRhOkN9LEwsQSksem8obnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Q30sbnVsbCxhKSxxPWk9ZS52YWx1ZSxDJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkN9KX1zdGF0aWMgZGVtbz0oKT0+e2xldCBDPW5ldyBiNDtyZXR1cm4gd2A8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7Q30+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD5gfTtzdGF0aWMgZGVtb0dyb3Vwcz1bIldvcmtzcGFjZSJdO3Jlc2l6ZU9ic2VydmVyO3RhYk1hbmFnZXI7I2U9d2EodGhpcyxuLG51bGwpO2dldCBleGVjdXRpb25FbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLiNlfXNldCBleGVjdXRpb25FbnZpcm9ubWVudChDKXt0aGlzLiNlPUN9I3Q9KHdhKHRoaXMsbyksd2EodGhpcyxjLCIiKSk7Z2V0IHNldHVwQ29tbWFuZCgpe3JldHVybiB0aGlzLiN0fXNldCBzZXR1cENvbW1hbmQoQyl7dGhpcy4jdD1DfSNhPSh3YSh0aGlzLHApLHdhKHRoaXMsZix7fSkpO2dldCBlbnZpcm9ubWVudFZhcmlhYmxlcygpe3JldHVybiB0aGlzLiNhfXNldCBlbnZpcm9ubWVudFZhcmlhYmxlcyhDKXt0aGlzLiNhPUN9I2k9KHdhKHRoaXMsZyksd2EodGhpcyx2LDE2MCkpO2dldCB0YWJCYXJXaWR0aCgpe3JldHVybiB0aGlzLiNpfXNldCB0YWJCYXJXaWR0aChDKXt0aGlzLiNpPUN9I3I9KHdhKHRoaXMsbSksd2EodGhpcyxNLCEwKSk7Z2V0IHNob3dUYWJCYXIoKXtyZXR1cm4gdGhpcy4jcn1zZXQgc2hvd1RhYkJhcihDKXt0aGlzLiNyPUN9I3M9KHdhKHRoaXMsUyksd2EodGhpcyxfLFtdKSk7Z2V0IHRhYnMoKXtyZXR1cm4gdGhpcy4jc31zZXQgdGFicyhDKXt0aGlzLiNzPUN9I249KHdhKHRoaXMsayksd2EodGhpcyxMLG51bGwpKTtnZXQgYWN0aXZlVGFiSWQoKXtyZXR1cm4gdGhpcy4jbn1zZXQgYWN0aXZlVGFiSWQoQyl7dGhpcy4jbj1DfXRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249KHdhKHRoaXMsQSksbnVsbCk7aXNCcmlnaHQ9ITE7dGVybWluYWxBY3Rpb25iYXI9bnVsbDtlbnZpcm9ubWVudERlZmVycmVkPW5ldyB6dC5zbWFydHByb21pc2UuRGVmZXJyZWQ7ZW52aXJvbm1lbnRQcm9taXNlPXRoaXMuZW52aXJvbm1lbnREZWZlcnJlZC5wcm9taXNlO2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnRhYk1hbmFnZXI9bmV3IGFkLHRoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5oYW5kbGVSZXNpemUoKX0pfXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgICNhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgZGVlcy1hY3Rpb25iYXIgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUYWIgYmFyIG9uIHRoZSByaWdodCBzaWRlICovCiAgICAgIC50YWItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnRhYi1iYXItaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1iYXItdGl0bGUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnRhYi1iYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyMnB4OwogICAgICAgIGhlaWdodDogMjJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGFiLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAyNSUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTUlKSIsImhzbCgyMTAgMzAlIDE1JSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiLmV4aXRlZCB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAudGFiLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLWljb24ucnVubmluZyB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMTQyIDcwJSA0MCUpIiwiaHNsKDE0MiA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1sYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMXB4IDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgxNDIgNzAlIDkwJSkiLCJoc2woMTQyIDMwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsImhzbCgxNDIgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDkzJSkiLCJoc2woMCAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzMzMzMzMyIsIiNmZmZmZmYiKX07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe2xldCBDPXRoaXMuYWN0aXZlVGFiSWQ/dGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTpudWxsO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgIDwhLS0gTWFpbiB0ZXJtaW5hbCBhcmVhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiPgogICAgICAgICAgJHtDP3dgCiAgICAgICAgICAgIDxkaXYgaWQ9ImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgYDp3YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuPk5vIHRlcm1pbmFsIG9wZW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgICAgICAgIDxkZWVzLWFjdGlvbmJhcj48L2RlZXMtYWN0aW9uYmFyPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZlcnRpY2FsIHRhYiBiYXIgb24gdGhlIHJpZ2h0IC0tPgogICAgICAgICR7dGhpcy5zaG93VGFiQmFyP3dgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyIiBzdHlsZT0id2lkdGg6ICR7dGhpcy50YWJCYXJXaWR0aH1weCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXItaGVhZGVyIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWJhci10aXRsZSI+VGVybWluYWxzPC9zcGFuPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYWN0aW9uIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUFkZFRhYn0gdGl0bGU9Ik5ldyBUZXJtaW5hbCI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBsdXMifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWxpc3QiPgogICAgICAgICAgICAgICR7dGhpcy50YWJzLm1hcCh6PT53YAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtdGFiICR7ei5pZD09PXRoaXMuYWN0aXZlVGFiSWQ/ImFjdGl2ZSI6IiJ9ICR7ei5leGl0ZWQ/ImV4aXRlZCI6IiJ9IgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5zd2l0Y2hUb1RhYih6LmlkKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7ei5pY29uTmFtZX0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTQiCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRhYi1pY29uICR7ei5wcm9jZXNzJiYhei5leGl0ZWQ/InJ1bm5pbmciOiIifSIKICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWxhYmVsIj4ke3oubGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgICAke3ouZXhpdGVkP3dgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV4aXQtYmFkZ2UgJHt6LmV4aXRDb2RlPT09MD8ic3VjY2VzcyI6ImVycm9yIn0iPgogICAgICAgICAgICAgICAgICAgICAgJHt6LmV4aXRDb2RlfQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgICAgICAgJHt6LmNsb3NlYWJsZT93YAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0ke0U9PnRoaXMuaGFuZGxlVGFiQ2xvc2UoRSx6LmlkKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOiIifQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7bGV0IEM9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7dGhpcy5pc0JyaWdodD1DLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4sdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uPUMudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoJD0+e3RoaXMuaXNCcmlnaHQ9JCx0aGlzLnRhYk1hbmFnZXIudXBkYXRlQWxsVGhlbWVzKCQpfSk7bGV0IHo9JDIuZ2V0SW5zdGFuY2UoKSxbRSxUXT1hd2FpdCBQcm9taXNlLmFsbChbei5sb2FkWHRlcm0oKSx6LmxvYWRYdGVybUZpdEFkZG9uKCldKTt0aGlzLnRhYk1hbmFnZXIuc2V0WHRlcm1Nb2R1bGVzKEUsVCksYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpfWFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2xldCBDPXRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTtDJiZ0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShDKSx0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24mJih0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249bnVsbCksdGhpcy50YWJNYW5hZ2VyLmRpc3Bvc2VBbGwoKSxhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfWFzeW5jIGhhbmRsZUFkZFRhYigpe2F3YWl0IHRoaXMuY3JlYXRlU2hlbGxUYWIoKX1oYW5kbGVUYWJDbG9zZShDLHope0Muc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jbG9zZVRhYih6KX1zd2l0Y2hUb1RhYihDKXtpZihDPT09dGhpcy5hY3RpdmVUYWJJZClyZXR1cm47bGV0IHo9dGhpcy50YWJNYW5hZ2VyLmdldFRhYihDKTtpZigheilyZXR1cm47bGV0IEU9dGhpcy5hY3RpdmVUYWJJZDt0aGlzLmFjdGl2ZVRhYklkJiZ0aGlzLmRldGFjaEFjdGl2ZVRlcm1pbmFsKCksdGhpcy5hY3RpdmVUYWJJZD1DLHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKT0+e3RoaXMuYXR0YWNoVGVybWluYWxUb0NvbnRhaW5lcih6KSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc3dpdGNoZWQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDp7dGFiSWQ6QyxwcmV2aW91c1RhYklkOkV9fSkpfSl9ZGV0YWNoQWN0aXZlVGVybWluYWwoKXtsZXQgQz10aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIik7QyYmKEMuaW5uZXJIVE1MPSIiKX1hdHRhY2hUZXJtaW5hbFRvQ29udGFpbmVyKEMpe2xldCB6PXRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTt6JiYodGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHopLHouaW5uZXJIVE1MPSIiLEMudGVybWluYWwub3Blbih6KSxDLmZpdEFkZG9uLmZpdCgpLEMudGVybWluYWwuZm9jdXMoKSl9aGFuZGxlUmVzaXplKCl7aWYodGhpcy5hY3RpdmVUYWJJZCl7bGV0IEM9dGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTtDJiZDLmZpdEFkZG9uLmZpdCgpfX1hc3luYyBzcGF3blByb2Nlc3NGb3JUYWIoQyx6LEU9W10pe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXtDLnRlcm1pbmFsLndyaXRlKCJceDFCWzMxbSIpLEMudGVybWluYWwud3JpdGUoYFx1Mjc0QyBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlLlxyCmApLEMudGVybWluYWwud3JpdGUoIlx4MUJbMG0iKTtyZXR1cm59dHJ5e3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHl8fChDLnRlcm1pbmFsLndyaXRlKGBJbml0aWFsaXppbmcgZW52aXJvbm1lbnQuLi5ccgpgKSxhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmluaXQoKSk7bGV0IFQ9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bih6LEUpO1Qub3V0cHV0LnBpcGVUbyhuZXcgV3JpdGFibGVTdHJlYW0oe3dyaXRlOlY9PntDLnRlcm1pbmFsLndyaXRlKFYpfX0pKTtsZXQgJD1ULmlucHV0LmdldFdyaXRlcigpO0MudGVybWluYWwub25EYXRhKFY9PnskLndyaXRlKFYpfSksdGhpcy50YWJNYW5hZ2VyLnNldFRhYlByb2Nlc3MoQy5pZCxULCQpLHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLFQuZXhpdC50aGVuKFY9Pnt0aGlzLmhhbmRsZVByb2Nlc3NFeGl0KEMuaWQsVil9KX1jYXRjaChUKXtDLnRlcm1pbmFsLndyaXRlKCJceDFCWzMxbSIpLEMudGVybWluYWwud3JpdGUoYFx1Mjc0QyBGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczogJHtUfVxyCmApLEMudGVybWluYWwud3JpdGUoIlx4MUJbMG0iKSxjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczoiLFQpfX1oYW5kbGVQcm9jZXNzRXhpdChDLHope2xldCBFPXRoaXMudGFiTWFuYWdlci5nZXRUYWIoQyk7aWYoIUUpcmV0dXJuO3RoaXMudGFiTWFuYWdlci5tYXJrVGFiRXhpdGVkKEMseik7bGV0IFQ9ej09PTA/YFxyClx4MUJbMzJtW1Byb2Nlc3MgY29tcGxldGVkIHN1Y2Nlc3NmdWxseV1ceDFCWzBtXHIKYDpgXHIKXHgxQlszMW1bUHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlICR7en1dXHgxQlswbVxyCmA7RS50ZXJtaW5hbC53cml0ZShUKSx0aGlzLnRhYnM9dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9jZXNzLWNvbXBsZXRlIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOkMsZXhpdENvZGU6en19KSksRS5jbG9zZWFibGUmJnRoaXMuc2hvd0V4aXRlZFRhYkFjdGlvbmJhcihDLEUubGFiZWwseil9YXN5bmMgc2hvd0V4aXRlZFRhYkFjdGlvbmJhcihDLHosRSl7bGV0IFQ9RT09PTA7KGF3YWl0IHRoaXMuc2hvd0FjdGlvbmJhcih7bWVzc2FnZTpUP2AiJHt6fSIgY29tcGxldGVkLiBDbG9zZSB0YWI/YDpgIiR7en0iIGV4aXRlZCAoY29kZSAke0V9KS4gQ2xvc2UgdGFiP2AsdHlwZTpUPyJpbmZvIjoid2FybmluZyIsaWNvbjpUPyJsdWNpZGU6Y2hlY2tDaXJjbGUiOiJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsYWN0aW9uczpbe2lkOiJjbG9zZSIsbGFiZWw6IkNsb3NlIFRhYiIscHJpbWFyeTohMH0se2lkOiJrZWVwIixsYWJlbDoiS2VlcCBPcGVuIn1dLHRpbWVvdXQ6e2R1cmF0aW9uOjFlNCxkZWZhdWx0QWN0aW9uSWQ6ImNsb3NlIn0sZGlzbWlzc2libGU6ITB9KSkuYWN0aW9uSWQ9PT0iY2xvc2UiJiZ0aGlzLmNsb3NlVGFiKEMpfWFzeW5jIGNyZWF0ZVNoZWxsVGFiKEMpe2xldCB6PXRoaXMudGFiTWFuYWdlci5jcmVhdGVUYWIoe3R5cGU6InNoZWxsIixsYWJlbDpDfHxgYmFzaCAke3RoaXMudGFiTWFuYWdlci5nZXRUYWJDb3VudCgpKzF9YCxjbG9zZWFibGU6dGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCk+MH0sdGhpcy5pc0JyaWdodCk7cmV0dXJuIHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLHRoaXMuc3dpdGNoVG9UYWIoei5pZCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSxhd2FpdCB0aGlzLnNwYXduUHJvY2Vzc0ZvclRhYih6LCJqc2giKSx0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKT09PTEmJnRoaXMuc2V0dXBDb21tYW5kJiYoYXdhaXQgdGhpcy53YWl0Rm9yUHJvbXB0KHoudGVybWluYWwsIn4vIiksei5pbnB1dFdyaXRlciYmei5pbnB1dFdyaXRlci53cml0ZSh0aGlzLnNldHVwQ29tbWFuZCkpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOnouaWR9fSkpLHouaWR9YXN5bmMgY3JlYXRlUHJvY2Vzc1RhYihDKXtsZXQgej10aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKEMsdGhpcy5pc0JyaWdodCk7cmV0dXJuIHRoaXMudGFicz10aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpLEMuc3dpdGNoVG9UYWIhPT0hMSYmdGhpcy5zd2l0Y2hUb1RhYih6LmlkKSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLEMuY29tbWFuZCYmYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIoeixDLmNvbW1hbmQsQy5hcmdzKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY3JlYXRlZCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOnt0YWJJZDp6LmlkfX0pKSx6LmlkfWdldEFjdGl2ZVRhYigpe3JldHVybiB0aGlzLmFjdGl2ZVRhYklkJiZ0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRoaXMuYWN0aXZlVGFiSWQpfHxudWxsfWdldFRhYnMoKXtyZXR1cm4gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKX1zZWxlY3RUYWIoQyl7cmV0dXJuIHRoaXMudGFiTWFuYWdlci5oYXNUYWIoQyk/KHRoaXMuc3dpdGNoVG9UYWIoQyksITApOiExfWNsb3NlVGFiKEMpe2xldCB6PXRoaXMudGFiTWFuYWdlci5nZXRUYWIoQyk7aWYoIXp8fCF6LmNsb3NlYWJsZSlyZXR1cm4hMTtpZihDPT09dGhpcy5hY3RpdmVUYWJJZCl7bGV0IEU9dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSxUPUUuZmluZEluZGV4KFY9PlYuaWQ9PT1DKSwkPUVbVCsxXXx8RVtULTFdOyQ/dGhpcy5zd2l0Y2hUb1RhYigkLmlkKToodGhpcy5hY3RpdmVUYWJJZD1udWxsLHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKSl9cmV0dXJuIHRoaXMudGFiTWFuYWdlci5jbG9zZVRhYihDKSx0aGlzLnRhYnM9dGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2VkIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6e3RhYklkOkN9fSkpLCEwfXdyaXRlVG9UYWIoQyx6KXtsZXQgRT10aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKEMpO3JldHVybiBFPyhFLnRlcm1pbmFsLndyaXRlKHopLCEwKTohMX1zZW5kSW5wdXRUb1RhYihDLHope2xldCBFPXRoaXMudGFiTWFuYWdlci5nZXRUYWIoQyk7cmV0dXJuIUV8fCFFLmlucHV0V3JpdGVyPyExOihFLmlucHV0V3JpdGVyLndyaXRlKHopLCEwKX1hc3luYyBzaG93QWN0aW9uYmFyKEMpe3JldHVybiB0aGlzLnRlcm1pbmFsQWN0aW9uYmFyfHwodGhpcy50ZXJtaW5hbEFjdGlvbmJhcj10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIikpLHRoaXMudGVybWluYWxBY3Rpb25iYXI/LnNob3coQyl9YXN5bmMgd2FpdEZvclByb21wdChDLHope3JldHVybiBuZXcgUHJvbWlzZShFPT57bGV0IFQ9KCk9PntsZXQgJD1DLmJ1ZmZlci5hY3RpdmU7Zm9yKGxldCBWPTA7VjwkLmxlbmd0aDtWKyspe2xldCBSPSQuZ2V0TGluZShWKTtpZihSJiZSLnRyYW5zbGF0ZVRvU3RyaW5nKCkuaW5jbHVkZXMoeikpe3NldFRpbWVvdXQoKCk9PntFKCl9LDEwMCk7cmV0dXJufX1zZXRUaW1lb3V0KFQsMTAwKX07VCgpfSl9YXN5bmMgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoQyl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlIik7bGV0IHo9IiI7Zm9yKGxldCBFIGluIEMpeis9YGV4cG9ydCAke0V9PSIke0NbRV19IgpgO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKCIvc291cmNlLmVudiIseil9Z2V0RXhlY3V0aW9uRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH1zdGF0aWN7d2EoaSxhKX19O3JldHVybiBxPWl9KSgpfSk7dmFyIHpqLGtqLGRXdCxwV3QsaFd0LFZ5dCxqeXQ9YigoKT0+e3VlKCk7UGwoKTt1bygpO0x4KCk7QngoKTtGeCgpO0owKCk7UXgoKTt6aj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGtqPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxkV3Q9KCgpPT57bGV0IHQ9W3BlKCJkZW1vLXZpZXctZGFzaGJvYXJkIildLGUsYT1bXSxpLHI9eGU7dmFyIHM9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3pqKG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOm59LG51bGwsYSkscz1pPWUudmFsdWUsbiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9c3RhdGljIHN0eWxlcz1baC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDAwIiwiI2ZmZiIpfTsKICAgICAgfQogICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQogICAgYF07c3RhdHNUaWxlcz1be2lkOiJ1c2VycyIsdGl0bGU6IkFjdGl2ZSBVc2VycyIsdmFsdWU6MTIzNCx0eXBlOiJudW1iZXIiLGljb246ImZhVXNlcnMiLGRlc2NyaXB0aW9uOiIrMTUlIGZyb20gbGFzdCB3ZWVrIixjb2xvcjoiIzIyYzU1ZSJ9LHtpZDoicGFnZXZpZXdzIix0aXRsZToiUGFnZSBWaWV3cyIsdmFsdWU6NTY3MDAsdHlwZToibnVtYmVyIixpY29uOiJmYUV5ZSIsZGVzY3JpcHRpb246IjU2LjdrIHRvdGFsIHZpZXdzIixjb2xvcjoiIzNiODJmNiJ9LHtpZDoidXB0aW1lIix0aXRsZToiU3lzdGVtIFVwdGltZSIsdmFsdWU6ODksdW5pdDoiJSIsdHlwZToiZ2F1Z2UiLGljb246ImZhU2VydmVyIixkZXNjcmlwdGlvbjoiTGFzdCAzMCBkYXlzIixjb2xvcjoiIzEwYjk4MSIsZ2F1Z2VPcHRpb25zOnttaW46MCxtYXg6MTAwLHRocmVzaG9sZHM6W3t2YWx1ZTo4MCxjb2xvcjoiI2VmNDQ0NCJ9LHt2YWx1ZTo5MCxjb2xvcjoiI2Y1OWUwYiJ9LHt2YWx1ZToxMDAsY29sb3I6IiMxMGI5ODEifV19fSx7aWQ6InJlc3BvbnNlIix0aXRsZToiQXZnIFJlc3BvbnNlIFRpbWUiLHZhbHVlOjMuMix1bml0OiJzIix0eXBlOiJudW1iZXIiLGljb246ImZhQ2xvY2siLGRlc2NyaXB0aW9uOiItMC41cyBpbXByb3ZlbWVudCIsY29sb3I6IiNmNTllMGIifSx7aWQ6InJldmVudWUiLHRpdGxlOiJNb250aGx5IFJldmVudWUiLHZhbHVlOjQ4NTIwLHVuaXQ6IiQiLHR5cGU6InRyZW5kIixpY29uOiJmYURvbGxhclNpZ24iLGRlc2NyaXB0aW9uOiIrOC4yJSBncm93dGgiLGNvbG9yOiIjMjJjNTVlIix0cmVuZERhdGE6WzM1ZTMsMzhlMywzNzUwMCw0MWUzLDM5ODAwLDQyZTMsNDQxMDAsNDMyMDAsNDU2MDAsNDcxMDAsNDY4MDAsNDg1MjBdfSx7aWQ6InRyYWZmaWMiLHRpdGxlOiJUcmFmZmljIFRyZW5kIix2YWx1ZToxNjgwLHR5cGU6InRyZW5kIixpY29uOiJmYUNoYXJ0TGluZSIsZGVzY3JpcHRpb246Ikxhc3QgNyBkYXlzIixjb2xvcjoiIzNiODJmNiIsdHJlbmREYXRhOlsxMjAwLDEzNTAsMTEwMCwxNDUwLDE2MDAsMTU1MCwxNjgwXX1dO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8aDE+RGFzaGJvYXJkPC9oMT4KICAgICAgPHA+V2VsY29tZSB0byB5b3VyIGFwcGxpY2F0aW9uIGRhc2hib2FyZC4gSGVyZSdzIGFuIG92ZXJ2aWV3IG9mIHlvdXIgbWV0cmljczo8L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHtuPT57Y29uc29sZS5sb2coIlRpbGUgYWN0aW9uOiIsbi5kZXRhaWwpfX0KICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CiAgICBgfXN0YXRpY3traihpLGEpfX07cmV0dXJuIHM9aX0pKCkscFd0PSgoKT0+e2xldCB0PVtwZSgiZGVtby12aWV3LWFuYWx5dGljcyIpXSxlLGE9W10saSxyPXhlO3ZhciBzPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgbj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDt6aihudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpufSxudWxsLGEpLHM9aT1lLnZhbHVlLG4mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfXN0YXRpYyBzdHlsZXM9W2guZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMCIsIiNmZmYiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8aDE+QW5hbHl0aWNzPC9oMT4KICAgICAgPHA+VGhpcyBpcyB0aGUgYW5hbHl0aWNzIHZpZXcuIFlvdSBjYW4gYWRkIGNoYXJ0cyBhbmQgbWV0cmljcyBoZXJlLjwvcD4KICAgIGB9c3RhdGlje2tqKGksYSl9fTtyZXR1cm4gcz1pfSkoKSxoV3Q9KCgpPT57bGV0IHQ9W3BlKCJkZW1vLXZpZXctc2V0dGluZ3MiKV0sZSxhPVtdLGkscj14ZTt2YXIgcz1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7emoobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6bn0sbnVsbCxhKSxzPWk9ZS52YWx1ZSxuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX1zdGF0aWMgc3R5bGVzPVtoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwMDAiLCIjZmZmIil9OwogICAgICB9CiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICB9CiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIGgyIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMTVweCAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzMzMyIsIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y1ZjVmNSIsIiMxYTFhMWEiKX07CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luOiAxNXB4IDA7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5Db25maWd1cmUgeW91ciBhcHBsaWNhdGlvbiBzZXR0aW5ncyBiZWxvdzo8L3A+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8aDI+R2VuZXJhbCBTZXR0aW5nczwvaDI+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcHBOYW1lIiBsYWJlbD0iQXBwbGljYXRpb24gTmFtZSIgdmFsdWU9Ik15IEFwcCI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iYXBpRW5kcG9pbnQiIGxhYmVsPSJBUEkgRW5kcG9pbnQiIHZhbHVlPSJodHRwczovL2FwaS5leGFtcGxlLmNvbSI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9ImVudmlyb25tZW50IgogICAgICAgICAgICBsYWJlbD0iRW52aXJvbm1lbnQiCiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkRldmVsb3BtZW50IixrZXk6ImRldiJ9LHtvcHRpb246IlN0YWdpbmciLGtleToic3RhZ2luZyJ9LHtvcHRpb246IlByb2R1Y3Rpb24iLGtleToicHJvZCJ9XX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiUHJvZHVjdGlvbiIsa2V5OiJwcm9kIn19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJlbmFibGVOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIE5vdGlmaWNhdGlvbnMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZUFuYWx5dGljcyIgbGFiZWw9IkVuYWJsZSBBbmFseXRpY3MiIHZhbHVlPSJmYWxzZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U2F2ZSBHZW5lcmFsIFNldHRpbmdzPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5EaXNwbGF5IFByZWZlcmVuY2VzPC9oMj4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWZvcm0tc2VjdGlvbiI+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPlF1aWNrIGRpc3BsYXkgc2V0dGluZ3MgdXNpbmcgaG9yaXpvbnRhbCBsYXlvdXQ6PC9wPgogICAgICAgICAgPGRlZXMtZm9ybSBob3Jpem9udGFsLWxheW91dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRoZW1lIgogICAgICAgICAgICAgIGxhYmVsPSJUaGVtZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ITF9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbe29wdGlvbjoiTGlnaHQiLGtleToibGlnaHQifSx7b3B0aW9uOiJEYXJrIixrZXk6ImRhcmsifSx7b3B0aW9uOiJBdXRvIixrZXk6ImF1dG8ifV19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiRGFyayIsa2V5OiJkYXJrIn19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgICAga2V5PSJsYW5ndWFnZSIKICAgICAgICAgICAgICBsYWJlbD0iTGFuZ3VhZ2UiCiAgICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0keyExfQogICAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246IkVuZ2xpc2giLGtleToiZW4ifSx7b3B0aW9uOiJHZXJtYW4iLGtleToiZGUifSx7b3B0aW9uOiJTcGFuaXNoIixrZXk6ImVzIn0se29wdGlvbjoiRnJlbmNoIixrZXk6ImZyIn1dfQogICAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3tvcHRpb246IkVuZ2xpc2giLGtleToiZW4ifX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJjb21wYWN0TW9kZSIgbGFiZWw9IkNvbXBhY3QgTW9kZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPk5vdGlmaWNhdGlvbiBTZXR0aW5nczwvaDI+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEZyZXF1ZW5jeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJSZWFsLXRpbWUiLCJEYWlseSBEaWdlc3QiLCJXZWVrbHkgU3VtbWFyeSIsIk5ldmVyIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJSZWFsLXRpbWUifQogICAgICAgICAgICAua2V5PSR7ImVtYWlsRnJlcXVlbmN5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0icHVzaE5vdGlmaWNhdGlvbnMiIGxhYmVsPSJFbmFibGUgUHVzaCBOb3RpZmljYXRpb25zIiB2YWx1ZT0idHJ1ZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJzb3VuZEFsZXJ0cyIgbGFiZWw9IlBsYXkgU291bmQgZm9yIEFsZXJ0cyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PlVwZGF0ZSBOb3RpZmljYXRpb25zPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIGB9c3RhdGlje2tqKGksYSl9fTtyZXR1cm4gcz1pfSkoKSxWeXQ9KCk9PndgCiAgPHN0eWxlPgogICAgYm9keSB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtc2ltcGxlLWFwcGRhc2gKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIHRlcm1pbmFsU2V0dXBDb21tYW5kPSJlY2hvICdXZWxjb21lIHRvIHRoZSB0ZXJtaW5hbCEnIgogICAgICAudmlld1RhYnM9JHtbe25hbWU6IkRhc2hib2FyZCIsaWNvbk5hbWU6Imx1Y2lkZTpob21lIixlbGVtZW50OmRXdH0se25hbWU6IkFuYWx5dGljcyIsaWNvbk5hbWU6Imx1Y2lkZTpsaW5lQ2hhcnQiLGVsZW1lbnQ6cFd0fSx7bmFtZToiU2V0dGluZ3MiLGljb25OYW1lOiJsdWNpZGU6c2V0dGluZ3MiLGVsZW1lbnQ6aFd0fV19CiAgICAgIEBsb2dvdXQ9JHsoKT0+e2NvbnNvbGUubG9nKCJMb2dvdXQgZXZlbnQgdHJpZ2dlcmVkIiksYWxlcnQoIkxvZ291dCBjbGlja2VkISIpfX0KICAgICAgQHZpZXctc2VsZWN0PSR7dD0+e2NvbnNvbGUubG9nKCJWaWV3IHNlbGVjdGVkOiIsdC5kZXRhaWwudmlldy5uYW1lKX19CiAgICA+PC9kZWVzLXNpbXBsZS1hcHBkYXNoPgogIDwvZGl2PgpgfSk7dmFyIHJkLEtzLFV5dCxXeXQ9YigoKT0+e2p5dCgpO3VlKCk7RXQoKTtWZSgpO3JkPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sS3M9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LFV5dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtc2ltcGxlLWFwcGRhc2giKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXTt2YXIgeD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IE09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSgpXSxkPVtJKHt0eXBlOkFycmF5fSldLGw9W0koe3R5cGU6U3RyaW5nfSldLHk9W0soKV0scmQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJuYW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4ibmFtZSJpbiBTLGdldDpTPT5TLm5hbWUsc2V0OihTLEYpPT57Uy5uYW1lPUZ9fSxtZXRhZGF0YTpNfSxuLG8pLHJkKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidmlld1RhYnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOlM9PiJ2aWV3VGFicyJpbiBTLGdldDpTPT5TLnZpZXdUYWJzLHNldDooUyxGKT0+e1Mudmlld1RhYnM9Rn19LG1ldGFkYXRhOk19LGMscCkscmQodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InRlcm1pbmFsU2V0dXBDb21tYW5kImluIFMsZ2V0OlM9PlMudGVybWluYWxTZXR1cENvbW1hbmQsc2V0OihTLEYpPT57Uy50ZXJtaW5hbFNldHVwQ29tbWFuZD1GfX0sbWV0YWRhdGE6TX0sZixnKSxyZCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkVmlldyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InNlbGVjdGVkVmlldyJpbiBTLGdldDpTPT5TLnNlbGVjdGVkVmlldyxzZXQ6KFMsRik9PntTLnNlbGVjdGVkVmlldz1GfX0sbWV0YWRhdGE6TX0sdixtKSxyZChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vPVZ5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIlNpbXBsZSJdOyNlPUtzKHRoaXMsbiwiQXBwbGljYXRpb24gRGFzaGJvYXJkIik7Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy4jZX1zZXQgbmFtZShNKXt0aGlzLiNlPU19I3Q9KEtzKHRoaXMsbyksS3ModGhpcyxjLFtdKSk7Z2V0IHZpZXdUYWJzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHZpZXdUYWJzKE0pe3RoaXMuI3Q9TX0jYT0oS3ModGhpcyxwKSxLcyh0aGlzLGYsJ2VjaG8gIlRlcm1pbmFsIHJlYWR5IicpKTtnZXQgdGVybWluYWxTZXR1cENvbW1hbmQoKXtyZXR1cm4gdGhpcy4jYX1zZXQgdGVybWluYWxTZXR1cENvbW1hbmQoTSl7dGhpcy4jYT1NfSNpPShLcyh0aGlzLGcpLEtzKHRoaXMsdix2b2lkIDApKTtnZXQgc2VsZWN0ZWRWaWV3KCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNlbGVjdGVkVmlldyhNKXt0aGlzLiNpPU19c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwiaHNsKDAgMCUgMTMlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB6LWluZGV4OiAyOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDFmciBtaW4tY29udGVudDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDIwcHggMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCJsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCBoc2woMjE1IDIwJSAxOCUpIDAlLCBoc2woMjE1IDIwJSAxNCUpIDEwMCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7aC5iZFRoZW1lKCIwIDFweCAycHggcmdiKDAgMCAwIC8gMC4wNSksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC41KSIsIjAgMXB4IDJweCByZ2IoMCAwIDAgLyAwLjIpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAuaGVhZGVyLWljb24td3JhcHBlciBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTUgMjAlIDQwJSkiLCJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCJoc2woMCAwJSAzMCUpIil9OwogICAgICB9CgogICAgICAuc2VjdGlvbi1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggOHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCJoc2woMCAwJSAxMDAlIC8gMC4wNSkiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnZpZXdUYWI6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA2KSIsImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzAlKSIsImhzbCgyMTUgMjUlIDg1JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQ6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDIxNSA3MCUgNTAlKSIsImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwiaHNsKDIxNSA3MCUgNjUlKSIpfTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgc3BhbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5hcHBBY3Rpb25zIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCJoc2woMCAwJSAxMyUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCJoc2woMCA4NCUgNjAlIC8gMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCA4NCUgNDUlKSIsImhzbCgwIDg0JSA2NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGlvbjpob3ZlciBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuOTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDg0JSA0NSUpIiwiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCJoc2woMCAwJSA1JSkiKX07CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgLmNvbnRyb2xiYXIgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjIwIDEzJSAxOCUpIiwiaHNsKDIyMCAxMyUgMTIlKSIpfTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA3MCUpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgaHNsKDAgMCUgMTAwJSAvIDAuMDgpOwogICAgICB9CgogICAgICAuY29udHJvbDpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCAwJSAxMDAlIC8gMC4wNik7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDk1JSk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuY29udHJvbC5zdGF0dXMtY29ubmVjdGVkIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCgxNDIgNzAlIDUwJSk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy10ZXJtaW5hbCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiBoc2woNDUgOTAlIDU1JSk7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKE09PndgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0idmlld1RhYiAke3RoaXMuc2VsZWN0ZWRWaWV3PT09TT8ic2VsZWN0ZWQiOiIifSIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5sb2FkVmlldyhNKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7TS5pY29uTmFtZT93YAogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHtNLmljb25OYW1lLmluY2x1ZGVzKCI6Iik/TS5pY29uTmFtZTpgbHVjaWRlOiR7TS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgYDp3YAogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmZpbGUifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ke00ubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhcHBBY3Rpb25zIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIiBAY2xpY2s9JHsoKT0+e3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvZ291dCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fT4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bG9nT3V0In0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuPlNpZ24gb3V0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFwcGNvbnRlbnQiPgogICAgICAgICAgPCEtLSBDb250ZW50IGdvZXMgaGVyZSAtLT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wgc3RhdHVzLWNvbm5lY3RlZCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp3aWZpIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj5Db25uZWN0ZWQ8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wgc3RhdHVzLXRlcm1pbmFsIiBAY2xpY2s9JHt0aGlzLmxhdW5jaFRlcm1pbmFsfT4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOnRlcm1pbmFsIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj5UZXJtaW5hbDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKE0pe2xldCBTPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO2lmKHN1cGVyLmZpcnN0VXBkYXRlZChNKSx0aGlzLnZpZXdUYWJzJiZ0aGlzLnZpZXdUYWJzLmxlbmd0aD4wKXtsZXQgRj10aGlzLnNlbGVjdGVkVmlld3x8dGhpcy52aWV3VGFic1swXTthd2FpdCB0aGlzLmxvYWRWaWV3KEYpfX1jdXJyZW50VGVybWluYWw9S3ModGhpcyxtKTthc3luYyBsYXVuY2hUZXJtaW5hbCgpe2xldCBNPWF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlO2lmKHRoaXMuY3VycmVudFRlcm1pbmFsKXthd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTtyZXR1cm59bGV0IFM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluY29udGFpbmVyIikse0RlZXNXb3Jrc3BhY2VUZXJtaW5hbDpGfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaWQoKSxxeXQpKSxfPW5ldyBGO3JldHVybiBfLnNldHVwQ29tbWFuZD10aGlzLnRlcm1pbmFsU2V0dXBDb21tYW5kLHRoaXMuY3VycmVudFRlcm1pbmFsPV8sUy5hcHBlbmRDaGlsZChfKSxfLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsXy5zdHlsZS56SW5kZXg9IjEwIixfLnN0eWxlLnRvcD0iMHB4IixfLnN0eWxlLmxlZnQ9IjI0MHB4IixfLnN0eWxlLnJpZ2h0PSIwcHgiLF8uc3R5bGUuYm90dG9tPSIyNHB4IixfLnN0eWxlLm9wYWNpdHk9IjAiLF8uc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiLF8uc3R5bGUudHJhbnNpdGlvbj0iYWxsIDAuMjVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLF8uc3R5bGUuYm94U2hhZG93PSIwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjUpLCAwIDAgMCAxcHggcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiLF8uc3R5bGUubWF4V2lkdGg9YGNhbGMoJHtTLmNsaWVudFdpZHRofXB4IC0yNDBweClgLF8uc3R5bGUubWF4SGVpZ2h0PWBjYWxjKCR7Uy5jbGllbnRIZWlnaHR9cHggLSAyNHB4KWAsXy5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PnRoaXMuY2xvc2VUZXJtaW5hbCgpKSxhd2FpdCBNLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCksXy5zdHlsZS5vcGFjaXR5PSIxIixfLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWSgwKSBzY2FsZSgxKSIsX31hc3luYyBjbG9zZVRlcm1pbmFsKCl7bGV0IE09YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7dGhpcy5jdXJyZW50VGVybWluYWwmJih0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS5vcGFjaXR5PSIwIix0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk5KSIsYXdhaXQgTS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDI1MCksdGhpcy5jdXJyZW50VGVybWluYWwucmVtb3ZlKCksdGhpcy5jdXJyZW50VGVybWluYWw9bnVsbCl9Y3VycmVudFZpZXc7YXN5bmMgbG9hZFZpZXcoTSl7bGV0IFM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50IiksRj1uZXcgTS5lbGVtZW50O3RoaXMuY3VycmVudFZpZXcmJnRoaXMuY3VycmVudFZpZXcucmVtb3ZlKCksUy5hcHBlbmRDaGlsZChGKSx0aGlzLmN1cnJlbnRWaWV3PUYsdGhpcy5zZWxlY3RlZFZpZXc9TSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LXNlbGVjdCIse2RldGFpbDp7dmlldzpNfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfXN0YXRpY3tLcyhpLGEpfX07cmV0dXJuIHg9aX0pKCl9KTt2YXIgR3l0PWIoKCk9PntXeXQoKX0pO3ZhciBZeXQsWnl0PWIoKCk9Pnt1ZSgpO1l5dD0oKT0+d2AKICA8c3R5bGU+CiAgICBib2R5IHsKICAgICAgbWFyZ2luOiAwOwogICAgICBwYWRkaW5nOiAwOwogICAgfQogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1zaW1wbGUtbG9naW4gCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICBAbG9naW49JHt0PT57Y29uc29sZS5sb2coIkxvZ2luIGV2ZW50IHJlY2VpdmVkOiIsdC5kZXRhaWwpO2xldCBlPXQuZGV0YWlsPy5kYXRhfHx0LmRldGFpbDtlPy51c2VybmFtZSYmZT8ucGFzc3dvcmQ/YWxlcnQoYExvZ2luIGF0dGVtcHRlZCB3aXRoOgpVc2VybmFtZTogJHtlLnVzZXJuYW1lfQpQYXNzd29yZDogJHtlLnBhc3N3b3JkfWApOmNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6Iix0LmRldGFpbCl9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmB9KTt2YXIgWHl0LFNqLEt5dCxReXQ9YigoKT0+e1p5dCgpO3VlKCk7VmUoKTtYeXQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxTaj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sS3l0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy1zaW1wbGUtbG9naW4iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXTt2YXIgZD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IGM9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSgpXSxYeXQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJuYW1lIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpwPT4ibmFtZSJpbiBwLGdldDpwPT5wLm5hbWUsc2V0OihwLGwpPT57cC5uYW1lPWx9fSxtZXRhZGF0YTpjfSxuLG8pLFh5dChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpjfSxudWxsLGEpLGQ9aT1lLnZhbHVlLGMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfXN0YXRpYyBkZW1vPVl5dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIlNpbXBsZSJdOyNlPVNqKHRoaXMsbiwiQXBwbGljYXRpb24iKTtnZXQgbmFtZSgpe3JldHVybiB0aGlzLiNlfXNldCBuYW1lKGMpe3RoaXMuI2U9Y31zdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubG9naW5Db250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAuc2xvdENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubG9naW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAubG9naW4tY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibG9naW5Db250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luLWhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+U2lnbiBpbjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJoZWFkZXIiPkVudGVyIHlvdXIgY3JlZGVudGlhbHMgdG8gYWNjZXNzICR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0idXNlcm5hbWUiIGxhYmVsPSJVc2VybmFtZSIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InBhc3N3b3JkIiBsYWJlbD0iUGFzc3dvcmQiIGlzUGFzc3dvcmRCb29sIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PlNpZ24gaW48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90Q29udGFpbmVyIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoYyl7c3VwZXIuZmlyc3RVcGRhdGVkKGMpO2xldCBwPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTtwJiZwLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIixsPT57dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9naW4iLHtkZXRhaWw6bC5kZXRhaWwsYnViYmxlczohMCxjb21wb3NlZDohMH0pKX0pfWFzeW5jIHN3aXRjaFRvU2xvdHRlZENvbnRlbnQoKXtsZXQgYz1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSxwPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKSxsPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW5Db250YWluZXIiKSxmPXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2xvdENvbnRhaW5lciIpO3Auc3R5bGUub3BhY2l0eT0iMCIscC5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMjBweCkiLGwuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZi5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMjBweCkiLGF3YWl0IGMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApLGYuc3R5bGUub3BhY2l0eT0iMSIsZi5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVkoMHB4KSIsYXdhaXQgYy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwMCksZi5zdHlsZS5wb2ludGVyRXZlbnRzPSJhbGwifWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxTaih0aGlzLG8pfXN0YXRpY3tTaihpLGEpfX07cmV0dXJuIGQ9aX0pKCl9KTt2YXIgSnl0PWIoKCk9PntReXQoKX0pO3ZhciBleHQ9YigoKT0+e0h5dCgpO0d5dCgpO0p5dCgpfSk7dmFyIHR4dD1iKCgpPT57RXQoKX0pO3ZhciBheHQsaXh0PWIoKCk9Pnt1ZSgpO2F4dD0oKT0+d2AKICAgIDxzdHlsZT4KICAgICAgLmRlbW9XcmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgCiAgICAgICAgYmFja2dyb3VuZDogIzg4ODg4ODsKICAgICAgfQogICAgICAubG9ncyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQogICAgICAubG9ncyBkaXYgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICAgIDxkZWVzLXNlYXJjaGJhcgogICAgICAgIEBzZWFyY2gtY2hhbmdlZD0ke2E9PntsZXQgcj1hLnRhcmdldC5jbG9zZXN0KCIuZGVtb1dyYXBwZXIiKT8ucXVlcnlTZWxlY3RvcigiI2NoYW5nZWQiKTtyJiYoci50ZXh0Q29udGVudD1gc2VhcmNoLWNoYW5nZWQ6ICR7YS5kZXRhaWwudmFsdWV9YCl9fQogICAgICAgIEBzZWFyY2gtc3VibWl0PSR7YT0+e2xldCByPWEudGFyZ2V0LmNsb3Nlc3QoIi5kZW1vV3JhcHBlciIpPy5xdWVyeVNlbGVjdG9yKCIjc3VibWl0dGVkIik7ciYmKHIudGV4dENvbnRlbnQ9YHNlYXJjaC1zdWJtaXQ6ICR7YS5kZXRhaWwudmFsdWV9YCl9fQogICAgICA+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgPGRpdiBjbGFzcz0ibG9ncyI+CiAgICAgICAgPGRpdiBpZD0iY2hhbmdlZCI+c2VhcmNoLWNoYW5nZWQ6PC9kaXY+CiAgICAgICAgPGRpdiBpZD0ic3VibWl0dGVkIj5zZWFyY2gtc3VibWl0OjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGB9KTt2YXIgcnh0LENqLHN4dCxueHQ9YigoKT0+e3VlKCk7dmkoKTtpeHQoKTtWZSgpO3J4dD1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LENqPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxzeHQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXNlYXJjaGJhciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdO3ZhciBkPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgYz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKCldLHJ4dCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZpbHRlcnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnA9PiJmaWx0ZXJzImluIHAsZ2V0OnA9PnAuZmlsdGVycyxzZXQ6KHAsbCk9PntwLmZpbHRlcnM9bH19LG1ldGFkYXRhOmN9LG4sbykscnh0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOmN9LG51bGwsYSksZD1pPWUudmFsdWUsYyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9c3RhdGljIGRlbW89YXh0O3N0YXRpYyBkZW1vR3JvdXBzPVsiVXRpbGl0eSJdO3N0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZWVlZWViIiwiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjMDAwMDAwMTUiLCIjZmZmZmZmMTUiKX07CiAgICAgICAgLS1ib3hIZWlnaHQ6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxNDBweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiIzAwMDAwMDE1IiwiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNlZWVlZWIiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbiB7CiAgICAgICAgLS1idXR0b25QYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlZWVlZWIiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAwMDAwMCIsIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoRzAuYmx1ZSxiaS5ibHVlKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b246YWN0aXZlIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZShHMC5ibHVlQWN0aXZlLGJpLmJsdWVBY3RpdmUpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CgogICAgICAuZmlsdGVycyB7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgIH0KICAgIGBdOyNlPUNqKHRoaXMsbixbXSk7Z2V0IGZpbHRlcnMoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZmlsdGVycyhjKXt0aGlzLiNlPWN9c2VhcmNoSW5wdXQ9Q2oodGhpcyxvKTtzZWFyY2hCdXR0b247Y29uc3RydWN0b3IoKXtzdXBlcigpfXJlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3hDb250YWluZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iWW91ciBTa2lsbHMgKGUuZy4gVHlwZVNjcmlwdCwgUnVzdCwgUHJvamVjdG1hbmFnZW1lbnQpIiAvPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEJ1dHRvbiI+U2VhcmNoIC0+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuZmlsdGVycy5sZW5ndGg+MD93YAogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlcnMiPgogICAgICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9ImhyLXNtYWxsIj5GaWx0ZXJzPC9kZWVzLWhlYWRpbmc+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24gLmxhYmVsPSR7ImxvY2F0aW9uIn0+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2Rpdj4gIAogICAgICBgOndgYH0KICAgIGB9Zmlyc3RVcGRhdGVkKCl7dGhpcy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsKCk9Pnt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtY2hhbmdlZCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOnt2YWx1ZTp0aGlzLnNlYXJjaElucHV0LnZhbHVlfX0pKX0pLHRoaXMuc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYz0+e2Mua2V5PT09IkVudGVyIiYmdGhpcy5fZGlzcGF0Y2hTdWJtaXQoKX0pLHRoaXMuc2VhcmNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+dGhpcy5fZGlzcGF0Y2hTdWJtaXQoKSl9X2Rpc3BhdGNoU3VibWl0KCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLXN1Ym1pdCIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITAsZGV0YWlsOnt2YWx1ZTp0aGlzLnNlYXJjaElucHV0LnZhbHVlfX0pKX1zdGF0aWN7Q2ooaSxhKX19O3JldHVybiBkPWl9KSgpfSk7dmFyIG94dD1iKCgpPT57bnh0KCl9KTt2YXIgbHh0LGN4dD1iKCgpPT57dWUoKTtseHQ9KCk9PndgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2Y4ZjlmYSIsIiMwYTBhMGEiKX07CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgfQoKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgcGFkZGluZzogMjRweDsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDkwOTBiIiwiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIH0KCiAgICAudG9rZW4tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1pdGVtIHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmNGY0ZjUiLCIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICB9CgogICAgLnRva2VuLW5hbWUgewogICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgbW9ub3NwYWNlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzcxNzE3YSIsIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIH0KCiAgICAudG9rZW4tdmFsdWUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzA5MDkwYiIsIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNwYWNpbmctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuc3BhY2luZy1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiIzNiODJmNiIsIiMzYjgyZjYiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAucmFkaXVzLWRlbW8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAucmFkaXVzLWJveCB7CiAgICAgIHdpZHRoOiA2MHB4OwogICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzNiODJmNiIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5zaGFkb3ctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMjRweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5zaGFkb3ctYm94IHsKICAgICAgd2lkdGg6IDEwMHB4OwogICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjNzE3MTdhIiwiI2ExYTFhYSIpfTsKICAgIH0KCiAgICAuaGVpZ2h0LWRlbW8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5oZWlnaHQtYm94IHsKICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiMzYjgyZjYiLCIjM2I4MmY2Iil9OwogICAgICB3aWR0aDogMTIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtdGhlbWU+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNwYWNpbmcgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zcGFjaW5nLXhzIHRocm91Z2ggLS1kZWVzLXNwYWNpbmctM3hsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1kZW1vIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy14cyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj54cyAoNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctc20pOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+c20gKDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLW1kKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1kICgxMnB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbGcpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bGcgKDE2cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy14bCk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj54bCAoMjRweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLTJ4bCk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLTJ4bCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnhsICgzMnB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctM3hsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctM3hsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zeGwgKDQ4cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Cb3JkZXIgUmFkaXVzIFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtcmFkaXVzLXhzIHRocm91Z2ggLS1kZWVzLXJhZGl1cy1mdWxsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjJweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtc20pOyI+c208L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj42cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLWxnKTsiPmxnPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjhweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteGwpOyI+eGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MTJweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtZnVsbCk7Ij5mdWxsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjk5OXB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaGFkb3cgRWxldmF0aW9uIFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtc2hhZG93LXhzIHRocm91Z2ggLS1kZWVzLXNoYWRvdy1sZwogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1kZW1vIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy14cyk7Ij54czwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5taW5pbWFsPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zdWJ0bGU8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1lZGl1bTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+cHJvbWluZW50PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Db250cm9sIEhlaWdodCBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtIHRocm91Z2ggLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MzZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LWxnKTsiPmxnPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQwcHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UcmFuc2l0aW9uIER1cmF0aW9uczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXRyYW5zaXRpb24tZmFzdCB0aHJvdWdoIC0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLWZhc3Q8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLWRlZmF1bHQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMTVzPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4tLWRlZXMtdHJhbnNpdGlvbi1zbG93PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLXZhbHVlIj4wLjJzPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4tLWRlZXMtdHJhbnNpdGlvbi1zbG93ZXI8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuM3M8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy10aGVtZT4KICA8L2Rpdj4KYH0pO3ZhciBZbCxucixkeHQscHh0PWIoKCk9Pnt1ZSgpO1ZlKCk7Y3h0KCk7WWw9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxucj1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sZHh0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy10aGVtZSIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdO3ZhciBGPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgXz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOk9iamVjdH0pXSxkPVtJKHt0eXBlOk9iamVjdH0pXSxsPVtJKHt0eXBlOk9iamVjdH0pXSx5PVtJKHt0eXBlOk9iamVjdH0pXSx4PVtJKHt0eXBlOk9iamVjdH0pXSxZbCh0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1c3RvbVNwYWNpbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJjdXN0b21TcGFjaW5nImluIGssZ2V0Oms9PmsuY3VzdG9tU3BhY2luZyxzZXQ6KGssTik9PntrLmN1c3RvbVNwYWNpbmc9Tn19LG1ldGFkYXRhOl99LG4sbyksWWwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21SYWRpdXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJjdXN0b21SYWRpdXMiaW4gayxnZXQ6az0+ay5jdXN0b21SYWRpdXMsc2V0OihrLE4pPT57ay5jdXN0b21SYWRpdXM9Tn19LG1ldGFkYXRhOl99LGMscCksWWwodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21TaGFkb3dzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4iY3VzdG9tU2hhZG93cyJpbiBrLGdldDprPT5rLmN1c3RvbVNoYWRvd3Msc2V0OihrLE4pPT57ay5jdXN0b21TaGFkb3dzPU59fSxtZXRhZGF0YTpffSxmLGcpLFlsKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VzdG9tVHJhbnNpdGlvbnMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJjdXN0b21UcmFuc2l0aW9ucyJpbiBrLGdldDprPT5rLmN1c3RvbVRyYW5zaXRpb25zLHNldDooayxOKT0+e2suY3VzdG9tVHJhbnNpdGlvbnM9Tn19LG1ldGFkYXRhOl99LHYsbSksWWwodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjdXN0b21Db250cm9sSGVpZ2h0cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+ImN1c3RvbUNvbnRyb2xIZWlnaHRzImluIGssZ2V0Oms9PmsuY3VzdG9tQ29udHJvbEhlaWdodHMsc2V0OihrLE4pPT57ay5jdXN0b21Db250cm9sSGVpZ2h0cz1OfX0sbWV0YWRhdGE6X30sTSxTKSxZbChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpffSxudWxsLGEpLEY9aT1lLnZhbHVlLF8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6X30pfXN0YXRpYyBkZW1vPWx4dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIlV0aWxpdHkiXTsjZT1ucih0aGlzLG4sbnVsbCk7Z2V0IGN1c3RvbVNwYWNpbmcoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY3VzdG9tU3BhY2luZyhfKXt0aGlzLiNlPV99I3Q9KG5yKHRoaXMsbyksbnIodGhpcyxjLG51bGwpKTtnZXQgY3VzdG9tUmFkaXVzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGN1c3RvbVJhZGl1cyhfKXt0aGlzLiN0PV99I2E9KG5yKHRoaXMscCksbnIodGhpcyxmLG51bGwpKTtnZXQgY3VzdG9tU2hhZG93cygpe3JldHVybiB0aGlzLiNhfXNldCBjdXN0b21TaGFkb3dzKF8pe3RoaXMuI2E9X30jaT0obnIodGhpcyxnKSxucih0aGlzLHYsbnVsbCkpO2dldCBjdXN0b21UcmFuc2l0aW9ucygpe3JldHVybiB0aGlzLiNpfXNldCBjdXN0b21UcmFuc2l0aW9ucyhfKXt0aGlzLiNpPV99I3I9KG5yKHRoaXMsbSksbnIodGhpcyxNLG51bGwpKTtnZXQgY3VzdG9tQ29udHJvbEhlaWdodHMoKXtyZXR1cm4gdGhpcy4jcn1zZXQgY3VzdG9tQ29udHJvbEhlaWdodHMoXyl7dGhpcy4jcj1ffXN0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8c3R5bGU+CiAgICAgICAgJHt0aGlzLmdlbmVyYXRlQ3VzdG9tU3R5bGVzKCl9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIGB9Z2VuZXJhdGVDdXN0b21TdHlsZXMoKXtsZXQgXz1bIjpob3N0IHsiXTtpZih0aGlzLmN1c3RvbVNwYWNpbmcpZm9yKGxldFtrLE5db2YgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21TcGFjaW5nKSlOJiZfLnB1c2goYCAgLS1kZWVzLXNwYWNpbmctJHtrfTogJHtOfTtgKTtpZih0aGlzLmN1c3RvbVJhZGl1cylmb3IobGV0W2ssTl1vZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVJhZGl1cykpTiYmXy5wdXNoKGAgIC0tZGVlcy1yYWRpdXMtJHtrfTogJHtOfTtgKTtpZih0aGlzLmN1c3RvbVNoYWRvd3MpZm9yKGxldFtrLE5db2YgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21TaGFkb3dzKSlOJiZfLnB1c2goYCAgLS1kZWVzLXNoYWRvdy0ke2t9OiAke059O2ApO2lmKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpe2ZvcihsZXRbayxOXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpKWlmKE4pe2xldCBMPWs9PT0iZGVmYXVsdCI/ImRlZmF1bHQiOms7Xy5wdXNoKGAgIC0tZGVlcy10cmFuc2l0aW9uLSR7TH06ICR7Tn07YCl9fWlmKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpZm9yKGxldFtrLE5db2YgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cykpTiYmXy5wdXNoKGAgIC0tZGVlcy1jb250cm9sLWhlaWdodC0ke2t9OiAke059O2ApO3JldHVybiBfLnB1c2goIn0iKSxfLmpvaW4oYApgKX1zZXRTcGFjaW5nKF8sayl7dGhpcy5jdXN0b21TcGFjaW5nPXsuLi50aGlzLmN1c3RvbVNwYWNpbmcsW19dOmt9fXNldFJhZGl1cyhfLGspe3RoaXMuY3VzdG9tUmFkaXVzPXsuLi50aGlzLmN1c3RvbVJhZGl1cyxbX106a319c2V0U2hhZG93KF8sayl7dGhpcy5jdXN0b21TaGFkb3dzPXsuLi50aGlzLmN1c3RvbVNoYWRvd3MsW19dOmt9fXNldFRyYW5zaXRpb24oXyxrKXt0aGlzLmN1c3RvbVRyYW5zaXRpb25zPXsuLi50aGlzLmN1c3RvbVRyYW5zaXRpb25zLFtfXTprfX1zZXRDb250cm9sSGVpZ2h0KF8sayl7dGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cz17Li4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyxbX106a319Z2V0VGhlbWUoKXtyZXR1cm57Y29sb3JzOmFvLmNvbG9ycyxzcGFjaW5nOnsuLi5hby5zcGFjaW5nLC4uLnRoaXMuY3VzdG9tU3BhY2luZ30scmFkaXVzOnsuLi5hby5yYWRpdXMsLi4udGhpcy5jdXN0b21SYWRpdXN9LHNoYWRvd3M6ey4uLmFvLnNoYWRvd3MsLi4udGhpcy5jdXN0b21TaGFkb3dzfSx0cmFuc2l0aW9uczp7Li4uYW8udHJhbnNpdGlvbnMsLi4udGhpcy5jdXN0b21UcmFuc2l0aW9uc30sY29udHJvbEhlaWdodHM6ey4uLmFvLmNvbnRyb2xIZWlnaHRzLC4uLnRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHN9fX1yZXNldFRvRGVmYXVsdHMoKXt0aGlzLmN1c3RvbVNwYWNpbmc9bnVsbCx0aGlzLmN1c3RvbVJhZGl1cz1udWxsLHRoaXMuY3VzdG9tU2hhZG93cz1udWxsLHRoaXMuY3VzdG9tVHJhbnNpdGlvbnM9bnVsbCx0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzPW51bGx9YXBwbHlUaGVtZShfKXtfLnNwYWNpbmcmJih0aGlzLmN1c3RvbVNwYWNpbmc9Xy5zcGFjaW5nKSxfLnJhZGl1cyYmKHRoaXMuY3VzdG9tUmFkaXVzPV8ucmFkaXVzKSxfLnNoYWRvd3MmJih0aGlzLmN1c3RvbVNoYWRvd3M9Xy5zaGFkb3dzKSxfLnRyYW5zaXRpb25zJiYodGhpcy5jdXN0b21UcmFuc2l0aW9ucz1fLnRyYW5zaXRpb25zKSxfLmNvbnRyb2xIZWlnaHRzJiYodGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cz1fLmNvbnRyb2xIZWlnaHRzKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksbnIodGhpcyxTKX1zdGF0aWN7bnIoaSxhKX19O3JldHVybiBGPWl9KSgpfSk7dmFyIGh4dD1iKCgpPT57cHh0KCl9KTt2YXIgdXh0LGZ4dD1iKCgpPT57dWUoKTtfaigpO3V4dD1hc3luYygpPT57bGV0IHQ9YXdhaXQga3cuY3JlYXRlQW5kU2hvdygpO3NldFRpbWVvdXQoYXN5bmMoKT0+e2F3YWl0IHQuZGVzdHJveSgpfSwxZTQpfX0pO3ZhciBUaixzZCxrdyxfaj1iKCgpPT57dWUoKTtmeHQoKTtEcygpO3VlKCk7VmUoKTtUaj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LHNkPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxrdz0oKCk9PntsZXQgdD1bcGUoImRlZXMtdXBkYXRlciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdO3ZhciBsPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgZj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOlN0cmluZ30pXSxkPVtJKHt0eXBlOlN0cmluZ30pXSxUaih0aGlzLG51bGwscyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRWZXJzaW9uIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iY3VycmVudFZlcnNpb24iaW4gZyxnZXQ6Zz0+Zy5jdXJyZW50VmVyc2lvbixzZXQ6KGcseSk9PntnLmN1cnJlbnRWZXJzaW9uPXl9fSxtZXRhZGF0YTpmfSxuLG8pLFRqKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToidXBkYXRlZFZlcnNpb24iLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJ1cGRhdGVkVmVyc2lvbiJpbiBnLGdldDpnPT5nLnVwZGF0ZWRWZXJzaW9uLHNldDooZyx5KT0+e2cudXBkYXRlZFZlcnNpb249eX19LG1ldGFkYXRhOmZ9LGMscCksVGoobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1zdGF0aWMgZGVtbz11eHQ7c3RhdGljIGRlbW9Hcm91cHM9WyJVdGlsaXR5Il07c3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3coKXtsZXQgZj1uZXcgbDtyZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKSxmfSNlPXNkKHRoaXMsbix2b2lkIDApO2dldCBjdXJyZW50VmVyc2lvbigpe3JldHVybiB0aGlzLiNlfXNldCBjdXJyZW50VmVyc2lvbihmKXt0aGlzLiNlPWZ9I3Q9KHNkKHRoaXMsbyksc2QodGhpcyxjLHZvaWQgMCkpO2dldCB1cGRhdGVkVmVyc2lvbigpe3JldHVybiB0aGlzLiN0fXNldCB1cGRhdGVkVmVyc2lvbihmKXt0aGlzLiN0PWZ9Y29uc3RydWN0b3IoKXtzdXBlcigpLHNkKHRoaXMscCkscnQuZWxlbWVudEJhc2ljLnNldHVwKCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC5tb2RhbENvbnRhaW5lciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNlZWVlZWIiLCIjMjIyIil9OwogICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2VlZWVlYiIsIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMzMzMiLCIjZmZmIil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC5idXR0b25Db250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA1MCUgNTAlOwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRlZXMtd2luZG93bGF5ZXIKICAgICAgICBAY2xpY2tlZD0iJHt0aGlzLndpbmRvd0xheWVyQ2xpY2tlZH0iCiAgICAgICAgLm9wdGlvbnM9JHt7Ymx1cjohMH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7LjV9PjwvZGVlcy1wcm9ncmVzc2Jhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk1vcmUgaW5mbzwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DaGFuZ2Vsb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+IDwvZGVlcy13aW5kb3dsYXllcgogICAgICA+PgogICAgYH1hc3luYyBkZXN0cm95KCl7dGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpfXdpbmRvd0xheWVyQ2xpY2tlZCgpe31zdGF0aWN7c2QoaSxhKX19O3JldHVybiBsPWl9KSgpfSk7dmFyIG14dD1iKCgpPT57X2ooKX0pO3ZhciBneHQ9YigoKT0+e1RxKCl9KTt2YXIgYnh0PWIoKCk9Pnt0eHQoKTtveHQoKTtoeHQoKTtteHQoKTtneHQoKX0pO3ZhciB2NCxKYSx2eHQsU3c9YigoKT0+e3VlKCk7THQoKTtWZSgpO0V0KCk7bjIoKTtuMigpO1owKCk7dW8oKTt1bygpO3Y0PWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sSmE9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LHZ4dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtd29ya3NwYWNlLWZpbGV0cmVlIildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W10sbCxmPVtdLGc9W10seSx2PVtdLG09W10seCxNPVtdLFM9W10sRixfPVtdLGs9W107dmFyIE49Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBMPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6T2JqZWN0fSldLGQ9W0koe3R5cGU6U3RyaW5nfSldLGw9W0koe3R5cGU6U3RyaW5nfSldLHk9W0soKV0seD1bSygpXSxGPVtLKCldLHY0KHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXhlY3V0aW9uRW52aXJvbm1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiBBLGdldDpBPT5BLmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooQSxxKT0+e0EuZXhlY3V0aW9uRW52aXJvbm1lbnQ9cX19LG1ldGFkYXRhOkx9LG4sbyksdjQodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJyb290UGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InJvb3RQYXRoImluIEEsZ2V0OkE9PkEucm9vdFBhdGgsc2V0OihBLHEpPT57QS5yb290UGF0aD1xfX0sbWV0YWRhdGE6TH0sYyxwKSx2NCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNlbGVjdGVkUGF0aCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+InNlbGVjdGVkUGF0aCJpbiBBLGdldDpBPT5BLnNlbGVjdGVkUGF0aCxzZXQ6KEEscSk9PntBLnNlbGVjdGVkUGF0aD1xfX0sbWV0YWRhdGE6TH0sZixnKSx2NCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InRyZWVEYXRhIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4idHJlZURhdGEiaW4gQSxnZXQ6QT0+QS50cmVlRGF0YSxzZXQ6KEEscSk9PntBLnRyZWVEYXRhPXF9fSxtZXRhZGF0YTpMfSx2LG0pLHY0KHRoaXMsbnVsbCx4LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNMb2FkaW5nIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4iaXNMb2FkaW5nImluIEEsZ2V0OkE9PkEuaXNMb2FkaW5nLHNldDooQSxxKT0+e0EuaXNMb2FkaW5nPXF9fSxtZXRhZGF0YTpMfSxNLFMpLHY0KHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXJyb3JNZXNzYWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4iZXJyb3JNZXNzYWdlImluIEEsZ2V0OkE9PkEuZXJyb3JNZXNzYWdlLHNldDooQSxxKT0+e0EuZXJyb3JNZXNzYWdlPXF9fSxtZXRhZGF0YTpMfSxfLGspLHY0KG51bGwsZT17dmFsdWU6aX0sdCx7a2luZDoiY2xhc3MiLG5hbWU6aS5uYW1lLG1ldGFkYXRhOkx9LG51bGwsYSksTj1pPWUudmFsdWUsTCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLm1ldGFkYXRhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpMfSl9c3RhdGljIGRlbW89KCk9PndgCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7c3RhdGljIGRlbW9Hcm91cHM9WyJXb3Jrc3BhY2UiXTsjZT1KYSh0aGlzLG4sbnVsbCk7Z2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KEwpe3RoaXMuI2U9TH0jdD0oSmEodGhpcyxvKSxKYSh0aGlzLGMsIi8iKSk7Z2V0IHJvb3RQYXRoKCl7cmV0dXJuIHRoaXMuI3R9c2V0IHJvb3RQYXRoKEwpe3RoaXMuI3Q9TH0jYT0oSmEodGhpcyxwKSxKYSh0aGlzLGYsIiIpKTtnZXQgc2VsZWN0ZWRQYXRoKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNlbGVjdGVkUGF0aChMKXt0aGlzLiNhPUx9I2k9KEphKHRoaXMsZyksSmEodGhpcyx2LFtdKSk7Z2V0IHRyZWVEYXRhKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHRyZWVEYXRhKEwpe3RoaXMuI2k9TH0jcj0oSmEodGhpcyxtKSxKYSh0aGlzLE0sITEpKTtnZXQgaXNMb2FkaW5nKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGlzTG9hZGluZyhMKXt0aGlzLiNyPUx9I3M9KEphKHRoaXMsUyksSmEodGhpcyxfLCIiKSk7Z2V0IGVycm9yTWVzc2FnZSgpe3JldHVybiB0aGlzLiNzfXNldCBlcnJvck1lc3NhZ2UoTCl7dGhpcy4jcz1MfWV4cGFuZGVkUGF0aHM9KEphKHRoaXMsayksbmV3IFNldCk7bG9hZFRyZWVTdGFydGVkPSExO2NsaXBib2FyZFBhdGg9bnVsbDtjbGlwYm9hcmRPcGVyYXRpb249bnVsbDtmaWxlV2F0Y2hlcj1udWxsO3JlZnJlc2hEZWJvdW5jZVRpbWVvdXQ9bnVsbDtsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQ9bnVsbDtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLnRyZWUtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDFweCA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50cmVlLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5MyUpIiwiaHNsKDAgMCUgMTQlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5NSUpIiwiaHNsKDIxMCA1MCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0MCUpIiwiaHNsKDIxMCAxMDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50cmVlLWl0ZW0uc2VsZWN0ZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTIlKSIsImhzbCgyMTAgNTAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtaWNvbi5leHBhbmRlZCB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uaGlkZGVuIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uZm9sZGVyIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCg0NSA4MCUgNDUlKSIsImhzbCg0NSA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5maWxlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLnR5cGVzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woMjExIDYwJSA0OCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmphdmFzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woNTMgOTMlIDU0JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uanNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA4MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5odG1sIHsKICAgICAgICBjb2xvcjogaHNsKDE0IDc3JSA1MiUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmNzcyB7CiAgICAgICAgY29sb3I6IGhzbCgyMjggNzclIDU5JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24ubWFya2Rvd24gewogICAgICAgIGNvbG9yOiBoc2woMCAwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA4NSUpIil9OwogICAgICB9CgogICAgICAubG9hZGluZyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmVycm9yIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogaHNsKDAgNzAlIDUwJSk7CiAgICAgIH0KCiAgICAgIC5lbXB0eSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5maWxldHJlZS10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsImhzbCgwIDAlIDglKSIpfTsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAudG9vbGJhci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDgpIiwiaHNsKDAgMCUgMTAwJSAvIDAuMSkiKX07CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50P3RoaXMuaXNMb2FkaW5nP3dgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA6dGhpcy5lcnJvck1lc3NhZ2U/d2AKICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvciI+CiAgICAgICAgICAke3RoaXMuZXJyb3JNZXNzYWdlfQogICAgICAgIDwvZGl2PgogICAgICBgOndgCiAgICAgIDxkaXYgY2xhc3M9ImZpbGV0cmVlLXRvb2xiYXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0b29sYmFyLXRpdGxlIj5FeHBsb3Jlcjwvc3Bhbj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWFjdGlvbnMiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0keygpPT50aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKX0gdGl0bGU9Ik5ldyBGaWxlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZVBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7KCk9PnRoaXMuY3JlYXRlTmV3Rm9sZGVyKCIvIil9IHRpdGxlPSJOZXcgRm9sZGVyIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Zm9sZGVyUGx1cyJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy50cmVlRGF0YS5sZW5ndGg9PT0wP3dgPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGZpbGVzIGZvdW5kLjwvZGl2PmA6d2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0idHJlZS1jb250YWluZXIiIEBjb250ZXh0bWVudT0ke3RoaXMuaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51fT4KICAgICAgICAgICAgICAke3RoaXMucmVuZGVyVHJlZSh0aGlzLnRyZWVEYXRhKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgYDp3YAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYH1yZW5kZXJUcmVlKEwpe3JldHVybiBMLm1hcChBPT50aGlzLnJlbmRlck5vZGUoQSkpfXJlbmRlck5vZGUoTCl7bGV0IEE9TC50eXBlPT09ImRpcmVjdG9yeSIscT10aGlzLmV4cGFuZGVkUGF0aHMuaGFzKEwucGF0aCksQz1MLnBhdGg9PT10aGlzLnNlbGVjdGVkUGF0aCx6PXRoaXMuZ2V0RmlsZUljb25DbGFzcyhMKTtyZXR1cm4gd2AKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ0cmVlLWl0ZW0gJHtDPyJzZWxlY3RlZCI6IiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCtMLmxldmVsKjE2fXB4IgogICAgICAgIEBjbGljaz0ke0U9PnRoaXMuaGFuZGxlSXRlbUNsaWNrKEUsTCl9CiAgICAgICAgQGNvbnRleHRtZW51PSR7RT0+dGhpcy5oYW5kbGVDb250ZXh0TWVudShFLEwpfQogICAgICA+CiAgICAgICAgPHNwYW4gY2xhc3M9ImV4cGFuZC1pY29uICR7cT8iZXhwYW5kZWQiOiIifSAke0E/IiI6ImhpZGRlbiJ9Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZXZyb25SaWdodCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLWljb24gJHt6fSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5nZXRGaWxlSWNvbihMKX0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtbmFtZSI+JHtMLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtBJiZxJiZMLmNoaWxkcmVuP3RoaXMucmVuZGVyVHJlZShMLmNoaWxkcmVuKToiIn0KICAgIGB9Z2V0RmlsZUljb24oTCl7aWYoTC50eXBlPT09ImRpcmVjdG9yeSIpcmV0dXJuIHRoaXMuZXhwYW5kZWRQYXRocy5oYXMoTC5wYXRoKT8ibHVjaWRlOmZvbGRlck9wZW4iOiJsdWNpZGU6Zm9sZGVyIjtzd2l0Y2goTC5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkpe2Nhc2UidHMiOmNhc2UidHN4IjpyZXR1cm4ibHVjaWRlOmZpbGVDb2RlIjtjYXNlImpzIjpjYXNlImpzeCI6cmV0dXJuImx1Y2lkZTpmaWxlQ29kZSI7Y2FzZSJqc29uIjpyZXR1cm4ibHVjaWRlOmZpbGVKc29uIjtjYXNlImh0bWwiOnJldHVybiJsdWNpZGU6ZmlsZUNvZGUiO2Nhc2UiY3NzIjpjYXNlInNjc3MiOmNhc2UibGVzcyI6cmV0dXJuImx1Y2lkZTpmaWxlQ29kZSI7Y2FzZSJtZCI6cmV0dXJuImx1Y2lkZTpmaWxlVGV4dCI7Y2FzZSJwbmciOmNhc2UianBnIjpjYXNlImpwZWciOmNhc2UiZ2lmIjpjYXNlInN2ZyI6cmV0dXJuImx1Y2lkZTppbWFnZSI7ZGVmYXVsdDpyZXR1cm4ibHVjaWRlOmZpbGUifX1nZXRGaWxlSWNvbkNsYXNzKEwpe2lmKEwudHlwZT09PSJkaXJlY3RvcnkiKXJldHVybiJmb2xkZXIiO3N3aXRjaChMLm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSl7Y2FzZSJ0cyI6Y2FzZSJ0c3giOnJldHVybiJ0eXBlc2NyaXB0IjtjYXNlImpzIjpjYXNlImpzeCI6cmV0dXJuImphdmFzY3JpcHQiO2Nhc2UianNvbiI6cmV0dXJuImpzb24iO2Nhc2UiaHRtbCI6cmV0dXJuImh0bWwiO2Nhc2UiY3NzIjpjYXNlInNjc3MiOmNhc2UibGVzcyI6cmV0dXJuImNzcyI7Y2FzZSJtZCI6cmV0dXJuIm1hcmtkb3duIjtkZWZhdWx0OnJldHVybiJmaWxlIn19YXN5bmMgaGFuZGxlSXRlbUNsaWNrKEwsQSl7TC5zdG9wUHJvcGFnYXRpb24oKSxBLnR5cGU9PT0iZGlyZWN0b3J5Ij9hd2FpdCB0aGlzLnRvZ2dsZURpcmVjdG9yeShBKToodGhpcy5zZWxlY3RlZFBhdGg9QS5wYXRoLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbGUtc2VsZWN0Iix7ZGV0YWlsOntwYXRoOkEucGF0aCxuYW1lOkEubmFtZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSl9YXN5bmMgdG9nZ2xlRGlyZWN0b3J5KEwpe3RoaXMuZXhwYW5kZWRQYXRocy5oYXMoTC5wYXRoKT90aGlzLmV4cGFuZGVkUGF0aHMuZGVsZXRlKEwucGF0aCk6KHRoaXMuZXhwYW5kZWRQYXRocy5hZGQoTC5wYXRoKSwoIUwuY2hpbGRyZW58fEwuY2hpbGRyZW4ubGVuZ3RoPT09MCkmJmF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKEwpKSx0aGlzLnJlcXVlc3RVcGRhdGUoKX1hc3luYyBsb2FkRGlyZWN0b3J5Q29udGVudHMoTCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl0cnl7bGV0IEE9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKEwucGF0aCk7TC5jaGlsZHJlbj10aGlzLnNvcnRFbnRyaWVzKEEpLm1hcChxPT4oey4uLnEsbGV2ZWw6TC5sZXZlbCsxLGV4cGFuZGVkOiExLGNoaWxkcmVuOnEudHlwZT09PSJkaXJlY3RvcnkiP1tdOnZvaWQgMH0pKX1jYXRjaChBKXtjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBkaXJlY3RvcnkgJHtMLnBhdGh9OmAsQSl9fWFzeW5jIGhhbmRsZUNvbnRleHRNZW51KEwsQSl7TC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IHE9W107QS50eXBlPT09ImRpcmVjdG9yeSImJnEucHVzaCh7bmFtZToiTmV3IEZpbGUiLGljb25OYW1lOiJmaWxlUGx1cyIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuY3JlYXRlTmV3RmlsZShBLnBhdGgpfSx7bmFtZToiTmV3IEZvbGRlciIsaWNvbk5hbWU6ImZvbGRlclBsdXMiLGFjdGlvbjphc3luYygpPT50aGlzLmNyZWF0ZU5ld0ZvbGRlcihBLnBhdGgpfSx7ZGl2aWRlcjohMH0pLHEucHVzaCh7bmFtZToiUmVuYW1lIixpY29uTmFtZToicGVuY2lsIixhY3Rpb246YXN5bmMoKT0+dGhpcy5yZW5hbWVJdGVtKEEpfSx7bmFtZToiRHVwbGljYXRlIixpY29uTmFtZToiZmlsZXMiLGFjdGlvbjphc3luYygpPT50aGlzLmR1cGxpY2F0ZUl0ZW0oQSl9LHtuYW1lOiJDb3B5IixpY29uTmFtZToiY29weSIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuY29weUl0ZW0oQSl9KSxBLnR5cGU9PT0iZGlyZWN0b3J5IiYmdGhpcy5jbGlwYm9hcmRQYXRoJiZxLnB1c2goe25hbWU6IlBhc3RlIixpY29uTmFtZToiY2xpcGJvYXJkIixhY3Rpb246YXN5bmMoKT0+dGhpcy5wYXN0ZUl0ZW0oQS5wYXRoKX0pLHEucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IkRlbGV0ZSIsaWNvbk5hbWU6InRyYXNoMiIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuZGVsZXRlSXRlbShBKX0pLGF3YWl0IFd0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKEwscSl9YXN5bmMgaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KEwpe2lmKEwudGFyZ2V0LmNsb3Nlc3QoIi50cmVlLWl0ZW0iKSlyZXR1cm47TC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IHE9W3tuYW1lOiJOZXcgRmlsZSIsaWNvbk5hbWU6ImZpbGVQbHVzIixhY3Rpb246YXN5bmMoKT0+dGhpcy5jcmVhdGVOZXdGaWxlKCIvIil9LHtuYW1lOiJOZXcgRm9sZGVyIixpY29uTmFtZToiZm9sZGVyUGx1cyIsYWN0aW9uOmFzeW5jKCk9PnRoaXMuY3JlYXRlTmV3Rm9sZGVyKCIvIil9XTt0aGlzLmNsaXBib2FyZFBhdGgmJnEucHVzaCh7ZGl2aWRlcjohMH0se25hbWU6IlBhc3RlIixpY29uTmFtZToiY2xpcGJvYXJkIixhY3Rpb246YXN5bmMoKT0+dGhpcy5wYXN0ZUl0ZW0oIi8iKX0pLGF3YWl0IFd0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKEwscSl9YXN5bmMgc2hvd0lucHV0TW9kYWwoTCl7cmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIEE9PntsZXQgcT1hd2FpdCBsMS5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOkwuaGVhZGluZyx3aWR0aDoic21hbGwiLGNvbnRlbnQ6d2AKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7TC5sYWJlbH0KICAgICAgICAgICAgLnZhbHVlPSR7TC52YWx1ZXx8IiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNhbmNlbCIsYWN0aW9uOmFzeW5jIHo9Pnthd2FpdCB6LmRlc3Ryb3koKSxBKG51bGwpfX0se25hbWU6TC5idXR0b25OYW1lfHwiQ3JlYXRlIixhY3Rpb246YXN5bmMgej0+e2xldCAkPXouc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpPy52YWx1ZT8udHJpbSgpfHwiIjthd2FpdCB6LmRlc3Ryb3koKSxBKCR8fG51bGwpfX1dfSk7YXdhaXQgcS51cGRhdGVDb21wbGV0ZTtsZXQgQz1xLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbCAuY29udGVudCIpO2lmKEMpe2xldCB6PUMucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7eiYmKGF3YWl0IHoudXBkYXRlQ29tcGxldGUsei5mb2N1cygpKX19KX1hc3luYyBjcmVhdGVOZXdGaWxlKEwpe2xldCBBPWF3YWl0IHRoaXMuc2hvd0lucHV0TW9kYWwoe2hlYWRpbmc6Ik5ldyBGaWxlIixsYWJlbDoiRmlsZSBuYW1lIn0pO2lmKCFBfHwhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudClyZXR1cm47bGV0IHE9TD09PSIvIj9gLyR7QX1gOmAke0x9LyR7QX1gO3RyeXthd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShxLCIiKSxhd2FpdCB0aGlzLnJlZnJlc2goKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWxlLWNyZWF0ZWQiLHtkZXRhaWw6e3BhdGg6cX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jYXRjaChDKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6IixDKX19YXN5bmMgY3JlYXRlTmV3Rm9sZGVyKEwpe2xldCBBPWF3YWl0IHRoaXMuc2hvd0lucHV0TW9kYWwoe2hlYWRpbmc6Ik5ldyBGb2xkZXIiLGxhYmVsOiJGb2xkZXIgbmFtZSJ9KTtpZighQXx8IXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuO2xldCBxPUw9PT0iLyI/YC8ke0F9YDpgJHtMfS8ke0F9YDt0cnl7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ta2RpcihxKSxhd2FpdCB0aGlzLnJlZnJlc2goKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmb2xkZXItY3JlYXRlZCIse2RldGFpbDp7cGF0aDpxfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNhdGNoKEMpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyOiIsQyl9fWFzeW5jIGRlbGV0ZUl0ZW0oTCl7aWYoISghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8IWNvbmZpcm0oYERlbGV0ZSAke0wubmFtZX0/YCkpKXRyeXthd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKEwucGF0aCx7cmVjdXJzaXZlOkwudHlwZT09PSJkaXJlY3RvcnkifSksYXdhaXQgdGhpcy5yZWZyZXNoKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kZWxldGVkIix7ZGV0YWlsOntwYXRoOkwucGF0aCx0eXBlOkwudHlwZX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKX1jYXRjaChxKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIGl0ZW06IixxKX19YXN5bmMgcmVuYW1lSXRlbShMKXtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudClyZXR1cm47bGV0IEE9YXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7aGVhZGluZzoiUmVuYW1lIixsYWJlbDoiTmV3IG5hbWUiLHZhbHVlOkwubmFtZSxidXR0b25OYW1lOiJSZW5hbWUifSk7aWYoIUF8fEE9PT1MLm5hbWUpcmV0dXJuO2xldCBxPUwucGF0aC5zdWJzdHJpbmcoMCxMLnBhdGgubGFzdEluZGV4T2YoIi8iKSl8fCIvIixDPXE9PT0iLyI/YC8ke0F9YDpgJHtxfS8ke0F9YDt0cnl7aWYoTC50eXBlPT09ImZpbGUiKXtsZXQgej1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKEwucGF0aCk7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoQyx6KSxhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKEwucGF0aCl9ZWxzZSBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhMLnBhdGgsQyksYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShMLnBhdGgse3JlY3Vyc2l2ZTohMH0pO2F3YWl0IHRoaXMucmVmcmVzaCgpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcmVuYW1lZCIse2RldGFpbDp7b2xkUGF0aDpMLnBhdGgsbmV3UGF0aDpDLHR5cGU6TC50eXBlfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNhdGNoKHope2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLHopfX1hc3luYyBkdXBsaWNhdGVJdGVtKEwpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjtsZXQgQT1MLnBhdGguc3Vic3RyaW5nKDAsTC5wYXRoLmxhc3RJbmRleE9mKCIvIikpfHwiLyIscTtpZihMLnR5cGU9PT0iZmlsZSIpe2xldCB6PUwubmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHo+MCl7bGV0IEU9TC5uYW1lLnN1YnN0cmluZygwLHopLFQ9TC5uYW1lLnN1YnN0cmluZyh6KTtxPWAke0V9X2NvcHkke1R9YH1lbHNlIHE9YCR7TC5uYW1lfV9jb3B5YH1lbHNlIHE9YCR7TC5uYW1lfV9jb3B5YDtsZXQgQz1BPT09Ii8iP2AvJHtxfWA6YCR7QX0vJHtxfWA7dHJ5e2lmKEwudHlwZT09PSJmaWxlIil7bGV0IHo9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShMLnBhdGgpO2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKEMseil9ZWxzZSBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhMLnBhdGgsQyk7YXdhaXQgdGhpcy5yZWZyZXNoKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kdXBsaWNhdGVkIix7ZGV0YWlsOntzb3VyY2VQYXRoOkwucGF0aCxuZXdQYXRoOkMsdHlwZTpMLnR5cGV9LGJ1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9Y2F0Y2goeil7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGR1cGxpY2F0ZSBpdGVtOiIseil9fWFzeW5jIGNvcHlJdGVtKEwpe3RoaXMuY2xpcGJvYXJkUGF0aD1MLnBhdGgsdGhpcy5jbGlwYm9hcmRPcGVyYXRpb249ImNvcHkifWFzeW5jIHBhc3RlSXRlbShMKXtpZighdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudHx8IXRoaXMuY2xpcGJvYXJkUGF0aClyZXR1cm47bGV0IEE9dGhpcy5jbGlwYm9hcmRQYXRoLnNwbGl0KCIvIikucG9wKCl8fCJwYXN0ZWQiLHE9TD09PSIvIj9gLyR7QX1gOmAke0x9LyR7QX1gO3RyeXtpZighYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHModGhpcy5jbGlwYm9hcmRQYXRoKSl7Y29uc29sZS5lcnJvcigiU291cmNlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cyIpLHRoaXMuY2xpcGJvYXJkUGF0aD1udWxsLHRoaXMuY2xpcGJvYXJkT3BlcmF0aW9uPW51bGw7cmV0dXJufXRyeXtsZXQgQz1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHRoaXMuY2xpcGJvYXJkUGF0aCk7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUocSxDKX1jYXRjaHthd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyh0aGlzLmNsaXBib2FyZFBhdGgscSl9YXdhaXQgdGhpcy5yZWZyZXNoKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1wYXN0ZWQiLHtkZXRhaWw6e3NvdXJjZVBhdGg6dGhpcy5jbGlwYm9hcmRQYXRoLHRhcmdldFBhdGg6cX0sYnViYmxlczohMCxjb21wb3NlZDohMH0pKSx0aGlzLmNsaXBib2FyZFBhdGg9bnVsbCx0aGlzLmNsaXBib2FyZE9wZXJhdGlvbj1udWxsfWNhdGNoKEMpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsQyl9fWFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhMLEEpe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjthd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKEEpO2xldCBxPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihMKTtmb3IobGV0IEMgb2YgcSl7bGV0IHo9TD09PSIvIj9gLyR7Qy5uYW1lfWA6YCR7TH0vJHtDLm5hbWV9YCxFPUE9PT0iLyI/YC8ke0MubmFtZX1gOmAke0F9LyR7Qy5uYW1lfWA7aWYoQy50eXBlPT09ImRpcmVjdG9yeSIpYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMoeixFKTtlbHNle2xldCBUPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoeik7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoRSxUKX19fWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHRoaXMubG9hZFRyZWUoKX1hc3luYyB1cGRhdGVkKEwpe0wuaGFzKCJleGVjdXRpb25FbnZpcm9ubWVudCIpJiYodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQhPT10aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiYodGhpcy5zdG9wRmlsZVdhdGNoZXIoKSx0aGlzLmxhc3RFeGVjdXRpb25FbnZpcm9ubWVudD10aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSx0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiYoYXdhaXQgdGhpcy5sb2FkVHJlZSgpLHRoaXMuc3RhcnRGaWxlV2F0Y2hlcigpKSl9YXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuc3RvcEZpbGVXYXRjaGVyKCksdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCksdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0PW51bGwpfXN0YXJ0RmlsZVdhdGNoZXIoKXtpZighKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHx0aGlzLmZpbGVXYXRjaGVyKSl0cnl7dGhpcy5maWxlV2F0Y2hlcj10aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvIiwoTCxBKT0+e3RoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCksdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnJlZnJlc2goKX0sMzAwKX0se3JlY3Vyc2l2ZTohMH0pfWNhdGNoKEwpe2NvbnNvbGUud2FybigiRmlsZSB3YXRjaGluZyBub3Qgc3VwcG9ydGVkOiIsTCl9fXN0b3BGaWxlV2F0Y2hlcigpe3RoaXMuZmlsZVdhdGNoZXImJih0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKSx0aGlzLmZpbGVXYXRjaGVyPW51bGwpfWFzeW5jIGxvYWRUcmVlKCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCYmIXRoaXMubG9hZFRyZWVTdGFydGVkKXt0aGlzLmxvYWRUcmVlU3RhcnRlZD0hMCx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmVycm9yTWVzc2FnZT0iIjt0cnl7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeXx8YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7bGV0IEw9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHRoaXMucm9vdFBhdGgpO3RoaXMudHJlZURhdGE9dGhpcy5zb3J0RW50cmllcyhMKS5tYXAoQT0+KHsuLi5BLGxldmVsOjAsZXhwYW5kZWQ6ITEsY2hpbGRyZW46QS50eXBlPT09ImRpcmVjdG9yeSI/W106dm9pZCAwfSkpfWNhdGNoKEwpe3RoaXMuZXJyb3JNZXNzYWdlPWBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtMfWAsY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgZmlsZSB0cmVlOiIsTCksdGhpcy5sb2FkVHJlZVN0YXJ0ZWQ9ITF9ZmluYWxseXt0aGlzLmlzTG9hZGluZz0hMX19fXNvcnRFbnRyaWVzKEwpe3JldHVybiBMLnNvcnQoKEEscSk9PkEudHlwZSE9PXEudHlwZT9BLnR5cGU9PT0iZGlyZWN0b3J5Ij8tMToxOkEubmFtZS5sb2NhbGVDb21wYXJlKHEubmFtZSkpfWFzeW5jIHJlZnJlc2goKXt0aGlzLmV4cGFuZGVkUGF0aHMuY2xlYXIoKSx0aGlzLmxvYWRUcmVlU3RhcnRlZD0hMSxhd2FpdCB0aGlzLmxvYWRUcmVlKCl9c2VsZWN0RmlsZShMKXt0aGlzLnNlbGVjdGVkUGF0aD1MfXN0YXRpY3tKYShpLGEpfX07cmV0dXJuIE49aX0pKCl9KTt2YXIgTGosbmQseXh0LCRqPWIoKCk9Pnt1ZSgpO1ZlKCk7Ym8oKTtMaj1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LG5kPWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSx5eHQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildLGUsYT1bXSxpLHI9eGUscyxuPVtdLG89W10sZCxjPVtdLHA9W107dmFyIGw9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBmPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3M9W0koe3R5cGU6U3RyaW5nfSldLGQ9W0koe3R5cGU6QXJyYXl9KV0sTGoodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJjb21tYW5kIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpnPT4iY29tbWFuZCJpbiBnLGdldDpnPT5nLmNvbW1hbmQsc2V0OihnLHkpPT57Zy5jb21tYW5kPXl9fSxtZXRhZGF0YTpmfSxuLG8pLExqKHRoaXMsbnVsbCxkLHtraW5kOiJhY2Nlc3NvciIsbmFtZToibGluZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOmc9PiJsaW5lcyJpbiBnLGdldDpnPT5nLmxpbmVzLHNldDooZyx5KT0+e2cubGluZXM9eX19LG1ldGFkYXRhOmZ9LGMscCksTGoobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6Zn0sbnVsbCxhKSxsPWk9ZS52YWx1ZSxmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1zdGF0aWMgZGVtbz0oKT0+d2AKICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgIC5jb21tYW5kPSR7InBucG0gaW5zdGFsbCJ9CiAgICAgIC5saW5lcz0ke1siUGFja2FnZXM6ICs0MiIsIlByb2dyZXNzOiByZXNvbHZlZCAxNDIsIHJldXNlZCAxNDAsIGRvd25sb2FkZWQgMiwgYWRkZWQgNDIsIGRvbmUiLCIiLCJkZXBlbmRlbmNpZXM6IiwiKyBAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UgNC4yLjMiLCIrIHR5cGVzY3JpcHQgNS4zLjMiLCIiLCJEb25lIGluIDIuM3MiXX0KICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXc+CiAgYDtzdGF0aWMgZGVtb0dyb3Vwcz1bIldvcmtzcGFjZSJdOyNlPW5kKHRoaXMsbiwiIik7Z2V0IGNvbW1hbmQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgY29tbWFuZChmKXt0aGlzLiNlPWZ9I3Q9KG5kKHRoaXMsbyksbmQodGhpcyxjLFtdKSk7Z2V0IGxpbmVzKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGxpbmVzKGYpe3RoaXMuI3Q9Zn10ZXJtaW5hbD0obmQodGhpcyxwKSxudWxsKTtmaXRBZGRvbj1udWxsO2xhc3RMaW5lQ291bnQ9MDtyZXNpemVPYnNlcnZlcj1udWxsO3Rlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb249bnVsbDtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wcmV2aWV3IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWhlYWRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA1MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyLWNvbW1hbmQgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAjeHRlcm0tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzMzMzMzMyIsIiNmZmZmZmYiKX07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIEN1c3RvbSBzY3JvbGxiYXIgZm9yIHh0ZXJtIHZpZXdwb3J0ICovCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA4JSkiKX07CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsImhzbCgwIDAlIDI1JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDcwJSkiLCJoc2woMCAwJSAzNSUpIil9OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtcHJldmlldyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXItaWNvbiI+JDwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXItY29tbWFuZCI+JHt0aGlzLmNvbW1hbmR8fCJXYWl0aW5nLi4uIn08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9Inh0ZXJtLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1nZXRUZXJtaW5hbFRoZW1lKGYpe3JldHVybiBmP3tiYWNrZ3JvdW5kOiIjZmZmZmZmIixmb3JlZ3JvdW5kOiIjMzMzMzMzIixjdXJzb3I6IiMzMzMzMzMiLGN1cnNvckFjY2VudDoiI2ZmZmZmZiIsc2VsZWN0aW9uQmFja2dyb3VuZDoicmdiYSgwLCAwLCAwLCAwLjIpIn06e2JhY2tncm91bmQ6IiMwMDAwMDAiLGZvcmVncm91bmQ6IiNjY2NjY2MiLGN1cnNvcjoiI2NjY2NjYyIsY3Vyc29yQWNjZW50OiIjMDAwMDAwIixzZWxlY3Rpb25CYWNrZ3JvdW5kOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX1hc3luYyBmaXJzdFVwZGF0ZWQoZil7c3VwZXIuZmlyc3RVcGRhdGVkKGYpO2xldCBnPXRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoInh0ZXJtLWNvbnRhaW5lciIpO2lmKCFnKXJldHVybjtsZXQgeT1hd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZSx2PXkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbixtPSQyLmdldEluc3RhbmNlKCksW3gsTV09YXdhaXQgUHJvbWlzZS5hbGwoW20ubG9hZFh0ZXJtKCksbS5sb2FkWHRlcm1GaXRBZGRvbigpXSk7dGhpcy50ZXJtaW5hbD1uZXcgeC5UZXJtaW5hbCh7Y29udmVydEVvbDohMCxjdXJzb3JCbGluazohMSxkaXNhYmxlU3RkaW46ITAsZm9udFNpemU6MTIsZm9udEZhbWlseToiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZSIsdGhlbWU6dGhpcy5nZXRUZXJtaW5hbFRoZW1lKHYpLHNjcm9sbGJhY2s6MWUzfSksdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uPXkudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoUz0+e3RoaXMudGVybWluYWwmJih0aGlzLnRlcm1pbmFsLm9wdGlvbnMudGhlbWU9dGhpcy5nZXRUZXJtaW5hbFRoZW1lKFMpKX0pLHRoaXMuZml0QWRkb249bmV3IE0uRml0QWRkb24sdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5maXRBZGRvbiksdGhpcy50ZXJtaW5hbC5vcGVuKGcpLHRoaXMuZml0QWRkb24uZml0KCksdGhpcy5yZXNpemVPYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLmZpdEFkZG9uJiZ0aGlzLmZpdEFkZG9uLmZpdCgpfSksdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGcpLHRoaXMud3JpdGVOZXdMaW5lcygpfWFzeW5jIHVwZGF0ZWQoZil7c3VwZXIudXBkYXRlZChmKSxmLmhhcygibGluZXMiKSYmdGhpcy53cml0ZU5ld0xpbmVzKCl9d3JpdGVOZXdMaW5lcygpe2lmKCF0aGlzLnRlcm1pbmFsKXJldHVybjtsZXQgZj10aGlzLmxpbmVzLnNsaWNlKHRoaXMubGFzdExpbmVDb3VudCk7Zm9yKGxldCBnIG9mIGYpdGhpcy50ZXJtaW5hbC53cml0ZWxuKGcpO3RoaXMubGFzdExpbmVDb3VudD10aGlzLmxpbmVzLmxlbmd0aH1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMucmVzaXplT2JzZXJ2ZXImJih0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLnJlc2l6ZU9ic2VydmVyPW51bGwpLHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiYmKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbj1udWxsKSx0aGlzLnRlcm1pbmFsJiYodGhpcy50ZXJtaW5hbC5kaXNwb3NlKCksdGhpcy50ZXJtaW5hbD1udWxsKSxhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfWFkZExpbmUoZil7dGhpcy5saW5lcz1bLi4udGhpcy5saW5lcyxmXX1jbGVhcigpe3RoaXMubGluZXM9W10sdGhpcy5sYXN0TGluZUNvdW50PTAsdGhpcy50ZXJtaW5hbCYmdGhpcy50ZXJtaW5hbC5jbGVhcigpfXN0YXRpY3tuZChpLGEpfX07cmV0dXJuIGw9aX0pKCl9KTt2YXIgWmwsb3IseHh0LEFqPWIoKCk9Pnt1ZSgpO1ZlKCk7RXQoKTtuMigpO1psPWZ1bmN0aW9uKHQsZSxhLGkscixzKXtmdW5jdGlvbiBuKHgpe2lmKHghPT12b2lkIDAmJnR5cGVvZiB4IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIHh9Zm9yKHZhciBvPWkua2luZCxkPW89PT0iZ2V0dGVyIj8iZ2V0IjpvPT09InNldHRlciI/InNldCI6InZhbHVlIixjPSFlJiZ0P2kuc3RhdGljP3Q6dC5wcm90b3R5cGU6bnVsbCxwPWV8fChjP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYyxpLm5hbWUpOnt9KSxsLGY9ITEsZz1hLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgeT17fTtmb3IodmFyIHYgaW4gaSl5W3ZdPXY9PT0iYWNjZXNzIj97fTppW3ZdO2Zvcih2YXIgdiBpbiBpLmFjY2Vzcyl5LmFjY2Vzc1t2XT1pLmFjY2Vzc1t2XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKHgpe2lmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7cy5wdXNoKG4oeHx8bnVsbCkpfTt2YXIgbT0oMCxhW2ddKShvPT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtkXSx5KTtpZihvPT09ImFjY2Vzc29yIil7aWYobT09PXZvaWQgMCljb250aW51ZTtpZihtPT09bnVsbHx8dHlwZW9mIG0hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhsPW4obS5nZXQpKSYmKHAuZ2V0PWwpLChsPW4obS5zZXQpKSYmKHAuc2V0PWwpLChsPW4obS5pbml0KSkmJnIudW5zaGlmdChsKX1lbHNlKGw9bihtKSkmJihvPT09ImZpZWxkIj9yLnVuc2hpZnQobCk6cFtkXT1sKX1jJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxpLm5hbWUscCksZj0hMH0sb3I9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LHh4dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtd29ya3NwYWNlLWJvdHRvbWJhciIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdO3ZhciBGPWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgXz10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wubWV0YWRhdGE/T2JqZWN0LmNyZWF0ZShyW1N5bWJvbC5tZXRhZGF0YV0/P251bGwpOnZvaWQgMDtzPVtJKHt0eXBlOk9iamVjdH0pXSxkPVtLKCldLGw9W0soKV0seT1bSygpXSx4PVtLKCldLFpsKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZXhlY3V0aW9uRW52aXJvbm1lbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiBrLGdldDprPT5rLmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooayxOKT0+e2suZXhlY3V0aW9uRW52aXJvbm1lbnQ9Tn19LG1ldGFkYXRhOl99LG4sbyksWmwodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJzY3JpcHRzIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczprPT4ic2NyaXB0cyJpbiBrLGdldDprPT5rLnNjcmlwdHMsc2V0OihrLE4pPT57ay5zY3JpcHRzPU59fSxtZXRhZGF0YTpffSxjLHApLFpsKHRoaXMsbnVsbCxsLHtraW5kOiJhY2Nlc3NvciIsbmFtZToicGFja2FnZVN0YXR1cyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6az0+InBhY2thZ2VTdGF0dXMiaW4gayxnZXQ6az0+ay5wYWNrYWdlU3RhdHVzLHNldDooayxOKT0+e2sucGFja2FnZVN0YXR1cz1OfX0sbWV0YWRhdGE6X30sZixnKSxabCh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im91dGRhdGVkUGFja2FnZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJvdXRkYXRlZFBhY2thZ2VzImluIGssZ2V0Oms9Pmsub3V0ZGF0ZWRQYWNrYWdlcyxzZXQ6KGssTik9PntrLm91dGRhdGVkUGFja2FnZXM9Tn19LG1ldGFkYXRhOl99LHYsbSksWmwodGhpcyxudWxsLHgse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJpc0NoZWNraW5nUGFja2FnZXMiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOms9PiJpc0NoZWNraW5nUGFja2FnZXMiaW4gayxnZXQ6az0+ay5pc0NoZWNraW5nUGFja2FnZXMsc2V0OihrLE4pPT57ay5pc0NoZWNraW5nUGFja2FnZXM9Tn19LG1ldGFkYXRhOl99LE0sUyksWmwobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6X30sbnVsbCxhKSxGPWk9ZS52YWx1ZSxfJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOl99KX0jZT1vcih0aGlzLG4sbnVsbCk7Z2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KF8pe3RoaXMuI2U9X30jdD0ob3IodGhpcyxvKSxvcih0aGlzLGMse30pKTtnZXQgc2NyaXB0cygpe3JldHVybiB0aGlzLiN0fXNldCBzY3JpcHRzKF8pe3RoaXMuI3Q9X30jYT0ob3IodGhpcyxwKSxvcih0aGlzLGYsImlkbGUiKSk7Z2V0IHBhY2thZ2VTdGF0dXMoKXtyZXR1cm4gdGhpcy4jYX1zZXQgcGFja2FnZVN0YXR1cyhfKXt0aGlzLiNhPV99I2k9KG9yKHRoaXMsZyksb3IodGhpcyx2LFtdKSk7Z2V0IG91dGRhdGVkUGFja2FnZXMoKXtyZXR1cm4gdGhpcy4jaX1zZXQgb3V0ZGF0ZWRQYWNrYWdlcyhfKXt0aGlzLiNpPV99I3I9KG9yKHRoaXMsbSksb3IodGhpcyxNLCExKSk7Z2V0IGlzQ2hlY2tpbmdQYWNrYWdlcygpe3JldHVybiB0aGlzLiNyfXNldCBpc0NoZWNraW5nUGFja2FnZXMoXyl7dGhpcy4jcj1ffXBlbmRpbmdQYWNrYWdlVXBkYXRlPShvcih0aGlzLFMpLCExKTtoYW5kbGVQcm9jZXNzQ29tcGxldGU9Xz0+e3RoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUmJih0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlPSExLHNldFRpbWVvdXQoKCk9PnRoaXMuY2hlY2tQYWNrYWdlcygpLDUwMCkpfTtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJvdHRvbS1iYXIgewogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCJoc2woMCAwJSA2JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLndpZGdldDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICAud2lkZ2V0LnJ1bm5pbmcgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC51cC10by1kYXRlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgxNDIgNzAlIDM1JSkiLCJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwZGF0ZXMtYXZhaWxhYmxlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5lcnJvciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuc3Bpbm5pbmcgewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgIGBdO3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIFNjcmlwdCBSdW5uZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNjcmlwdENsaWNrfQogICAgICAgICAgdGl0bGU9IlJ1biBzY3JpcHQiCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6cGxheSJ9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlNjcmlwdHM8L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PgoKICAgICAgICA8IS0tIFBhY2thZ2UgQ2hlY2tlciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCAke3RoaXMuZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCl9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVQYWNrYWdlQ2xpY2t9CiAgICAgICAgICB0aXRsZT0iJHt0aGlzLmdldFBhY2thZ2VUb29sdGlwKCl9IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt0aGlzLmdldFBhY2thZ2VJY29uKCl9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pc0NoZWNraW5nUGFja2FnZXM/InNwaW5uaW5nIjoiIn0iCiAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMuZ2V0UGFja2FnZVN0YXR1c1RleHQoKX08L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gRnV0dXJlIHdpZGdldHMgY2FuIGJlIGFkZGVkIGhlcmUgLS0+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLHRoaXMuaGFuZGxlUHJvY2Vzc0NvbXBsZXRlKX1hc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpe2F3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLHRoaXMuaGFuZGxlUHJvY2Vzc0NvbXBsZXRlKX1hc3luYyBmaXJzdFVwZGF0ZWQoKXthd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCksYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCl9YXN5bmMgdXBkYXRlZChfKXtfLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSYmdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCYmKGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKSxhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKSl9YXN5bmMgbG9hZFNjcmlwdHMoKXtpZih0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXRyeXtpZighYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKSl7dGhpcy5zY3JpcHRzPXt9O3JldHVybn1sZXQgaz1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvcGFja2FnZS5qc29uIiksTj1KU09OLnBhcnNlKGspO3RoaXMuc2NyaXB0cz1OLnNjcmlwdHN8fHt9fWNhdGNoKF8pe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLF8pLHRoaXMuc2NyaXB0cz17fX19YXN5bmMgaGFuZGxlU2NyaXB0Q2xpY2soXyl7Xy5zdG9wUHJvcGFnYXRpb24oKTtsZXQgaz1PYmplY3Qua2V5cyh0aGlzLnNjcmlwdHMpO2lmKGsubGVuZ3RoPT09MClyZXR1cm47bGV0IE49ay5tYXAoTD0+KHtuYW1lOkwsaWNvbk5hbWU6Imx1Y2lkZTp0ZXJtaW5hbCIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLnJ1blNjcmlwdChMKX19KSk7YXdhaXQgV3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoXyxOKX1hc3luYyBydW5TY3JpcHQoXyl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuO2xldCBrPXt0eXBlOiJzY3JpcHQiLGxhYmVsOl8sY29tbWFuZDoicG5wbSIsYXJnczpbInJ1biIsX10sbWV0YWRhdGE6e3NjcmlwdE5hbWU6X319O3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6a30pKX1hc3luYyBjaGVja1BhY2thZ2VzKCl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpe3RoaXMucGFja2FnZVN0YXR1cz0iaWRsZSI7cmV0dXJufXRyeXtpZighYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKSl7dGhpcy5wYWNrYWdlU3RhdHVzPSJpZGxlIjtyZXR1cm59dGhpcy5wYWNrYWdlU3RhdHVzPSJjaGVja2luZyIsdGhpcy5pc0NoZWNraW5nUGFja2FnZXM9ITA7bGV0IGs9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bigicG5wbSIsWyJvdXRkYXRlZCIsIi0tanNvbiJdKSxOPSIiLEw9ay5vdXRwdXQuZ2V0UmVhZGVyKCk7KGFzeW5jKCk9Pnt0cnl7Zm9yKDs7KXtsZXR7ZG9uZTpDLHZhbHVlOnp9PWF3YWl0IEwucmVhZCgpO2lmKEMpYnJlYWs7Tis9en19Y2F0Y2h7fX0pKCk7bGV0IHE9YXdhaXQgUHJvbWlzZS5yYWNlKFtrLmV4aXQsbmV3IFByb21pc2UoQz0+c2V0VGltZW91dCgoKT0+QygtMSksMWU0KSldKTt0cnl7YXdhaXQgTC5jYW5jZWwoKX1jYXRjaHt9aWYocT09PS0xKXtjb25zb2xlLndhcm4oIlBhY2thZ2UgY2hlY2sgdGltZWQgb3V0IiksdGhpcy5wYWNrYWdlU3RhdHVzPSJlcnJvciI7cmV0dXJufWlmKHE9PT0wKXRoaXMucGFja2FnZVN0YXR1cz0idXAtdG8tZGF0ZSIsdGhpcy5vdXRkYXRlZFBhY2thZ2VzPVtdO2Vsc2UgdHJ5e2xldCBDPUpTT04ucGFyc2UoTik7dGhpcy5vdXRkYXRlZFBhY2thZ2VzPXRoaXMucGFyc2VPdXRkYXRlZFBhY2thZ2VzKEMpLHRoaXMucGFja2FnZVN0YXR1cz10aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoPjA/InVwZGF0ZXMtYXZhaWxhYmxlIjoidXAtdG8tZGF0ZSJ9Y2F0Y2h7dGhpcy5wYWNrYWdlU3RhdHVzPSJ1cGRhdGVzLWF2YWlsYWJsZSIsdGhpcy5vdXRkYXRlZFBhY2thZ2VzPVtdfX1jYXRjaChfKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBjaGVjayBmb3IgcGFja2FnZSB1cGRhdGVzOiIsXyksdGhpcy5wYWNrYWdlU3RhdHVzPSJlcnJvciJ9ZmluYWxseXt0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcz0hMX19cGFyc2VPdXRkYXRlZFBhY2thZ2VzKF8pe2xldCBrPVtdO2lmKHR5cGVvZiBfPT0ib2JqZWN0IiYmXyE9PW51bGwpZm9yKGxldFtOLExdb2YgT2JqZWN0LmVudHJpZXMoXykpe2xldCBBPUw7ay5wdXNoKHtuYW1lOk4sY3VycmVudDpBLmN1cnJlbnR8fCJ1bmtub3duIix3YW50ZWQ6QS53YW50ZWR8fEEuY3VycmVudHx8InVua25vd24iLGxhdGVzdDpBLmxhdGVzdHx8QS53YW50ZWR8fCJ1bmtub3duIix0eXBlOkEuZGVwZW5kZW5jeVR5cGU9PT0iZGV2RGVwZW5kZW5jaWVzIj8iZGV2RGVwZW5kZW5jaWVzIjoiZGVwZW5kZW5jaWVzIn0pfXJldHVybiBrfWFzeW5jIGhhbmRsZVBhY2thZ2VDbGljayhfKXtfLnN0b3BQcm9wYWdhdGlvbigpO2xldCBrPVtdO2lmKGsucHVzaCh7bmFtZTp0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcz8iQ2hlY2tpbmcuLi4iOiJDaGVjayBmb3IgdXBkYXRlcyIsaWNvbk5hbWU6Imx1Y2lkZTpyZWZyZXNoQ3ciLGFjdGlvbjphc3luYygpPT57aWYodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpcmV0dXJuO2xldCBOPXt0eXBlOiJwYWNrYWdlLXVwZGF0ZSIsbGFiZWw6ImNoZWNrIHBhY2thZ2VzIixjb21tYW5kOiJwbnBtIixhcmdzOlsib3V0ZGF0ZWQiXX07dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDpOfSkpLHNldFRpbWVvdXQoKCk9PnRoaXMuY2hlY2tQYWNrYWdlcygpLDNlMyl9fSksdGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aD4wKXtrLnB1c2goe2RpdmlkZXI6ITB9KTtsZXQgTj10aGlzLm91dGRhdGVkUGFja2FnZXMuc2xpY2UoMCwxMCk7Zm9yKGxldCBMIG9mIE4pay5wdXNoKHtuYW1lOmAke0wubmFtZX06ICR7TC5jdXJyZW50fSBcdTIxOTIgJHtMLmxhdGVzdH1gLGljb25OYW1lOiJsdWNpZGU6cGFja2FnZSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2UoTC5uYW1lKX19KTt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoPjEwJiZrLnB1c2goe25hbWU6YC4uLiBhbmQgJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoLTEwfSBtb3JlYCxpY29uTmFtZToibHVjaWRlOm1vcmVIb3Jpem9udGFsIixhY3Rpb246YXN5bmMoKT0+e319KSxrLnB1c2goe2RpdmlkZXI6ITB9KSxrLnB1c2goe25hbWU6IlVwZGF0ZSBhbGwgcGFja2FnZXMiLGljb25OYW1lOiJsdWNpZGU6YXJyb3dVcENpcmNsZSIsYWN0aW9uOmFzeW5jKCk9Pnthd2FpdCB0aGlzLnVwZGF0ZUFsbFBhY2thZ2VzKCl9fSl9YXdhaXQgV3Qub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoXyxrKX1hc3luYyB1cGRhdGVQYWNrYWdlKF8pe2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXJldHVybjt0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlPSEwO2xldCBrPXt0eXBlOiJwYWNrYWdlLXVwZGF0ZSIsbGFiZWw6YHVwZGF0ZSAke199YCxjb21tYW5kOiJwbnBtIixhcmdzOlsidXBkYXRlIiwiLS1sYXRlc3QiLF9dLG1ldGFkYXRhOntwYWNrYWdlTmFtZTpffX07dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwLGRldGFpbDprfSkpfWFzeW5jIHVwZGF0ZUFsbFBhY2thZ2VzKCl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuO3RoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGU9ITA7bGV0IF89e3R5cGU6InBhY2thZ2UtdXBkYXRlIixsYWJlbDoidXBkYXRlIGFsbCIsY29tbWFuZDoicG5wbSIsYXJnczpbInVwZGF0ZSIsIi0tbGF0ZXN0Il19O3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIix7YnViYmxlczohMCxjb21wb3NlZDohMCxkZXRhaWw6X30pKX1nZXRQYWNrYWdlU3RhdHVzQ2xhc3MoKXtyZXR1cm4gdGhpcy5pc0NoZWNraW5nUGFja2FnZXM/IiI6dGhpcy5wYWNrYWdlU3RhdHVzfWdldFBhY2thZ2VJY29uKCl7aWYodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpcmV0dXJuImx1Y2lkZTpsb2FkZXIyIjtzd2l0Y2godGhpcy5wYWNrYWdlU3RhdHVzKXtjYXNlInVwLXRvLWRhdGUiOnJldHVybiJsdWNpZGU6Y2hlY2tDaXJjbGUiO2Nhc2UidXBkYXRlcy1hdmFpbGFibGUiOnJldHVybiJsdWNpZGU6YWxlcnRDaXJjbGUiO2Nhc2UiZXJyb3IiOnJldHVybiJsdWNpZGU6eENpcmNsZSI7ZGVmYXVsdDpyZXR1cm4ibHVjaWRlOnBhY2thZ2UifX1nZXRQYWNrYWdlU3RhdHVzVGV4dCgpe2lmKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKXJldHVybiJDaGVja2luZy4uLiI7c3dpdGNoKHRoaXMucGFja2FnZVN0YXR1cyl7Y2FzZSJ1cC10by1kYXRlIjpyZXR1cm4iVXAgdG8gZGF0ZSI7Y2FzZSJ1cGRhdGVzLWF2YWlsYWJsZSI6cmV0dXJuYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoIT09MT8icyI6IiJ9YDtjYXNlImVycm9yIjpyZXR1cm4iQ2hlY2sgZmFpbGVkIjtkZWZhdWx0OnJldHVybiJQYWNrYWdlcyJ9fWdldFBhY2thZ2VUb29sdGlwKCl7aWYodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpcmV0dXJuIkNoZWNraW5nIGZvciBwYWNrYWdlIHVwZGF0ZXMuLi4iO3N3aXRjaCh0aGlzLnBhY2thZ2VTdGF0dXMpe2Nhc2UidXAtdG8tZGF0ZSI6cmV0dXJuIkFsbCBwYWNrYWdlcyBhcmUgdXAgdG8gZGF0ZSI7Y2FzZSJ1cGRhdGVzLWF2YWlsYWJsZSI6cmV0dXJuYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gcGFja2FnZSB1cGRhdGUke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGghPT0xPyJzIjoiIn0gYXZhaWxhYmxlYDtjYXNlImVycm9yIjpyZXR1cm4iRmFpbGVkIHRvIGNoZWNrIGZvciB1cGRhdGVzLiBDbGljayB0byByZXRyeS4iO2RlZmF1bHQ6cmV0dXJuIkNsaWNrIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXMifX1hc3luYyByZWZyZXNoUGFja2FnZVN0YXR1cygpe2F3YWl0IHRoaXMuY2hlY2tQYWNrYWdlcygpfWFzeW5jIHJlZnJlc2hTY3JpcHRzKCl7YXdhaXQgdGhpcy5sb2FkU2NyaXB0cygpfXN0YXRpY3tvcihpLGEpfX07cmV0dXJuIEY9aX0pKCl9KTt2YXIgb2QsRGo9YigoKT0+e29kPWNsYXNze2xvYWRlZExpYnM9bmV3IFNldDtub3RGb3VuZFBhY2thZ2VzPW5ldyBTZXQ7bW9uYWNvSW5zdGFuY2U9bnVsbDtleGVjdXRpb25FbnZpcm9ubWVudD1udWxsO2ZpbGVDYWNoZT1uZXcgTWFwO2FkZGVkRXh0cmFMaWJzPW5ldyBNYXA7Z2V0IHRzQXBpKCl7cmV0dXJuIHRoaXMubW9uYWNvSW5zdGFuY2U/dGhpcy5tb25hY29JbnN0YW5jZS5sYW5ndWFnZXMudHlwZXNjcmlwdDpudWxsfWFzeW5jIGluaXQoZSxhKXt0aGlzLm1vbmFjb0luc3RhbmNlPWUsdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudD1hLHRoaXMuY29uZmlndXJlQ29tcGlsZXJPcHRpb25zKCksYXdhaXQgdGhpcy5sb2FkQWxsUHJvamVjdEZpbGVzKCl9YXN5bmMgbG9hZEFsbFByb2plY3RGaWxlcygpe3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQmJmF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeSgiLyIpfWFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZSl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl0cnl7bGV0IGE9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGUpO2ZvcihsZXQgaSBvZiBhKXtsZXQgcj1lPT09Ii8iP2AvJHtpLm5hbWV9YDpgJHtlfS8ke2kubmFtZX1gO2lmKGkubmFtZSE9PSJub2RlX21vZHVsZXMiKXtpZihpLnR5cGU9PT0iZGlyZWN0b3J5Iilhd2FpdCB0aGlzLmxvYWRGaWxlc0Zyb21EaXJlY3Rvcnkocik7ZWxzZSBpZihpLnR5cGU9PT0iZmlsZSIpe2xldCBzPWkubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO2lmKHM9PT0idHMifHxzPT09InRzeCJ8fHM9PT0ianMifHxzPT09ImpzeCIpdHJ5e2xldCBuPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUocik7dGhpcy5hZGRGaWxlTW9kZWwocixuKX1jYXRjaHt9fX19fWNhdGNoe319Y29uZmlndXJlQ29tcGlsZXJPcHRpb25zKCl7bGV0IGU9dGhpcy50c0FwaTtlJiYoZS50eXBlc2NyaXB0RGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHt0YXJnZXQ6ZS5TY3JpcHRUYXJnZXQuRVMyMDIwLG1vZHVsZTplLk1vZHVsZUtpbmQuRVNOZXh0LG1vZHVsZVJlc29sdXRpb246ZS5Nb2R1bGVSZXNvbHV0aW9uS2luZC5CdW5kbGVyPz9lLk1vZHVsZVJlc29sdXRpb25LaW5kLk5vZGVKcyxhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiEwLGVzTW9kdWxlSW50ZXJvcDohMCxzdHJpY3Q6ITAsbm9FbWl0OiEwLGFsbG93SnM6ITAsY2hlY2tKczohMSxhbGxvd05vblRzRXh0ZW5zaW9uczohMCxsaWI6WyJlczIwMjAiLCJkb20iLCJkb20uaXRlcmFibGUiXSxiYXNlVXJsOiIvIixhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczohMCxyZXNvbHZlSnNvbk1vZHVsZTohMH0pLGUudHlwZXNjcmlwdERlZmF1bHRzLnNldERpYWdub3N0aWNzT3B0aW9ucyh7bm9TZW1hbnRpY1ZhbGlkYXRpb246ITEsbm9TeW50YXhWYWxpZGF0aW9uOiExfSksZS50eXBlc2NyaXB0RGVmYXVsdHMuc2V0RWFnZXJNb2RlbFN5bmMoITApKX1wYXJzZUltcG9ydHMoZSl7bGV0IGE9W10saT0vaW1wb3J0XHMrKD86W1x3Knt9XHMsXStmcm9tXHMrKT9bJyJdKFteJyJdKylbJyJdL2cscjtmb3IoOyhyPWkuZXhlYyhlKSkhPT1udWxsOyl7bGV0IG49clsxXTtpZighbi5zdGFydHNXaXRoKCIuIikmJiFuLnN0YXJ0c1dpdGgoIi8iKSl7bGV0IG89bi5zdGFydHNXaXRoKCJAIik/bi5zcGxpdCgiLyIpLnNsaWNlKDAsMikuam9pbigiLyIpOm4uc3BsaXQoIi8iKVswXTthLnB1c2gobyl9fWxldCBzPS9yZXF1aXJlXHMqXChccypbJyJdKFteJyJdKylbJyJdXHMqXCkvZztmb3IoOyhyPXMuZXhlYyhlKSkhPT1udWxsOyl7bGV0IG49clsxXTtpZighbi5zdGFydHNXaXRoKCIuIikmJiFuLnN0YXJ0c1dpdGgoIi8iKSl7bGV0IG89bi5zdGFydHNXaXRoKCJAIik/bi5zcGxpdCgiLyIpLnNsaWNlKDAsMikuam9pbigiLyIpOm4uc3BsaXQoIi8iKVswXTthLnB1c2gobyl9fXJldHVyblsuLi5uZXcgU2V0KGEpXX1hc3luYyBsb2FkVHlwZXNGb3JQYWNrYWdlKGUpe2lmKCEoIXRoaXMubW9uYWNvSW5zdGFuY2V8fCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSYmIXRoaXMubG9hZGVkTGlicy5oYXMoZSkmJiF0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKGUpKXRyeXtsZXQgYT1hd2FpdCB0aGlzLnRyeUxvYWRQYWNrYWdlVHlwZXMoZSk7YXx8KGE9YXdhaXQgdGhpcy50cnlMb2FkQXRUeXBlc1BhY2thZ2UoZSkpLGE/dGhpcy5sb2FkZWRMaWJzLmFkZChlKTp0aGlzLm5vdEZvdW5kUGFja2FnZXMuYWRkKGUpfWNhdGNoKGEpe2NvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgdHlwZXMgZm9yICR7ZX06YCxhKX19YXN5bmMgdHJ5TG9hZFBhY2thZ2VUeXBlcyhlKXtsZXQgYT10aGlzLnRzQXBpO2lmKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHwhYSlyZXR1cm4hMTtsZXQgaT1gL25vZGVfbW9kdWxlcy8ke2V9YDt0cnl7bGV0IHI9YCR7aX0vcGFja2FnZS5qc29uYDtpZihhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmV4aXN0cyhyKSl7bGV0IG89YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShyKSxkPUpTT04ucGFyc2Uobyk7aWYoYS50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIobyxgZmlsZTovLyR7cn1gKSxkLnR5cGVzfHxkLnR5cGluZ3MpcmV0dXJuIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoaSksITB9bGV0IG49W2Ake2l9L2luZGV4LmQudHNgLGAke2l9L2Rpc3QvaW5kZXguZC50c2AsYCR7aX0vbGliL2luZGV4LmQudHNgXTtmb3IobGV0IG8gb2YgbilpZihhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmV4aXN0cyhvKSlyZXR1cm4gYXdhaXQgdGhpcy5sb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShpKSwhMDtyZXR1cm4hMX1jYXRjaChyKXtyZXR1cm4gY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgcGFja2FnZSB0eXBlcyBmb3IgJHtlfTpgLHIpLCExfX1hc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShlKXtsZXQgYT10aGlzLnRzQXBpOyF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHwhYXx8YXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGUpfWFzeW5jIGxvYWREdHNGaWxlc0Zyb21EaXJlY3RvcnkoZSl7bGV0IGE9dGhpcy50c0FwaTtpZighKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHwhYSkpdHJ5e2xldCBpPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihlKTtmb3IobGV0IHIgb2YgaSl7bGV0IHM9ZT09PSIvIj9gLyR7ci5uYW1lfWA6YCR7ZX0vJHtyLm5hbWV9YDtpZihyLm5hbWUhPT0ibm9kZV9tb2R1bGVzIil7aWYoci50eXBlPT09ImRpcmVjdG9yeSIpYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KHMpO2Vsc2UgaWYoci50eXBlPT09ImZpbGUiJiZyLm5hbWUuZW5kc1dpdGgoIi5kLnRzIikpdHJ5e2xldCBuPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUocyk7YS50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIobixgZmlsZTovLyR7c31gKX1jYXRjaHt9fX19Y2F0Y2h7fX1hc3luYyB0cnlMb2FkQXRUeXBlc1BhY2thZ2UoZSl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpcmV0dXJuITE7bGV0IGk9YC9ub2RlX21vZHVsZXMvJHtlLnN0YXJ0c1dpdGgoIkAiKT9gQHR5cGVzLyR7ZS5zbGljZSgxKS5yZXBsYWNlKCIvIiwiX18iKX1gOmBAdHlwZXMvJHtlfWB9YDt0cnl7bGV0IHI9YCR7aX0vaW5kZXguZC50c2A7cmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHIpPyhhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGkpLCEwKTohMX1jYXRjaHtyZXR1cm4hMX19YXN5bmMgcHJvY2Vzc0NvbnRlbnRDaGFuZ2UoZSl7bGV0IGE9dGhpcy5wYXJzZUltcG9ydHMoZSk7Zm9yKGxldCBpIG9mIGEpdGhpcy5sb2FkZWRMaWJzLmhhcyhpKXx8YXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKGkpfWFzeW5jIHNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl7dGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7dHJ5e2lmKCFhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmV4aXN0cygiL25vZGVfbW9kdWxlcyIpKXJldHVybjtsZXQgZT1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoIi9ub2RlX21vZHVsZXMiKTtmb3IobGV0IGEgb2YgZSlpZihhLnR5cGU9PT0iZGlyZWN0b3J5IilpZihhLm5hbWUuc3RhcnRzV2l0aCgiQCIpKXRyeXtsZXQgaT1gL25vZGVfbW9kdWxlcy8ke2EubmFtZX1gLHI9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGkpO2ZvcihsZXQgcyBvZiByKWlmKHMudHlwZT09PSJkaXJlY3RvcnkiKXtsZXQgbj1gJHthLm5hbWV9LyR7cy5uYW1lfWA7YXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKG4pfX1jYXRjaHt9ZWxzZSBhLm5hbWUuc3RhcnRzV2l0aCgiLiIpfHxhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UoYS5uYW1lKX1jYXRjaChlKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBzY2FuIG5vZGVfbW9kdWxlczoiLGUpfX19YWRkRmlsZU1vZGVsKGUsYSl7aWYoIXRoaXMubW9uYWNvSW5zdGFuY2UpcmV0dXJuO3RoaXMuZmlsZUNhY2hlLnNldChlLGEpO2xldCBpPXRoaXMubW9uYWNvSW5zdGFuY2UuVXJpLnBhcnNlKGBmaWxlOi8vJHtlfWApLHI9dGhpcy5tb25hY29JbnN0YW5jZS5lZGl0b3IuZ2V0TW9kZWwoaSk7aWYocilyLmdldFZhbHVlKCkhPT1hJiZyLnNldFZhbHVlKGEpO2Vsc2V7bGV0IHM9dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKGUpO3RoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKGEscyxpKX10aGlzLmFkZEZpbGVBc0V4dHJhTGliKGUsYSl9YWRkRmlsZUFzRXh0cmFMaWIoZSxhKXtsZXQgaT10aGlzLnRzQXBpO2lmKCFpKXJldHVybjtsZXQgcj10aGlzLmFkZGVkRXh0cmFMaWJzLmdldChlKTtyJiZyLmRpc3Bvc2UoKTtsZXQgcz1gZmlsZTovLyR7ZX1gLG49aS50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoYSxzKTtpZih0aGlzLmFkZGVkRXh0cmFMaWJzLnNldChlLG4pLGUuZW5kc1dpdGgoIi50cyIpJiYhZS5lbmRzV2l0aCgiLmQudHMiKSl7bGV0IG89ZS5yZXBsYWNlKC9cLnRzJC8sIi5qcyIpLGQ9YGZpbGU6Ly8ke299YCxjPWkudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGEsZCk7dGhpcy5hZGRlZEV4dHJhTGlicy5zZXQobyxjKSx0aGlzLmZpbGVDYWNoZS5zZXQobyxhKX1lbHNlIGlmKGUuZW5kc1dpdGgoIi50c3giKSl7bGV0IG89ZS5yZXBsYWNlKC9cLnRzeCQvLCIuanN4IiksZD1gZmlsZTovLyR7b31gLGM9aS50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoYSxkKTt0aGlzLmFkZGVkRXh0cmFMaWJzLnNldChvLGMpLHRoaXMuZmlsZUNhY2hlLnNldChvLGEpfX1nZXRGaWxlQ29udGVudChlKXtyZXR1cm4gdGhpcy5maWxlQ2FjaGUuZ2V0KGUpfWdldExhbmd1YWdlRnJvbVBhdGgoZSl7c3dpdGNoKGUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSl7Y2FzZSJ0cyI6Y2FzZSJ0c3giOnJldHVybiJ0eXBlc2NyaXB0IjtjYXNlImpzIjpjYXNlImpzeCI6cmV0dXJuImphdmFzY3JpcHQiO2Nhc2UianNvbiI6cmV0dXJuImpzb24iO2RlZmF1bHQ6cmV0dXJuInBsYWludGV4dCJ9fX19KTt2YXIgeTQsZWksd3h0LEVqPWIoKCk9Pnt1ZSgpO0x0KCk7TnEoKTtWZSgpO3BvKCk7eTQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxlaT1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sd3h0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IiKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXSx4LE09W10sUz1bXSxGLF89W10saz1bXTt2YXIgTj1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IEw9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpTdHJpbmd9KV0sZD1bSSh7dHlwZTpTdHJpbmd9KV0sbD1bSSh7dHlwZTpTdHJpbmd9KV0seT1bSSh7dHlwZTpTdHJpbmd9KV0seD1bSSh7dHlwZTpTdHJpbmd9KV0sRj1bSSh7dHlwZTpTdHJpbmd9KV0seTQodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcmlnaW5hbENvbnRlbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJvcmlnaW5hbENvbnRlbnQiaW4gQSxnZXQ6QT0+QS5vcmlnaW5hbENvbnRlbnQsc2V0OihBLHEpPT57QS5vcmlnaW5hbENvbnRlbnQ9cX19LG1ldGFkYXRhOkx9LG4sbykseTQodGhpcyxudWxsLGQse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJtb2RpZmllZENvbnRlbnQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJtb2RpZmllZENvbnRlbnQiaW4gQSxnZXQ6QT0+QS5tb2RpZmllZENvbnRlbnQsc2V0OihBLHEpPT57QS5tb2RpZmllZENvbnRlbnQ9cX19LG1ldGFkYXRhOkx9LGMscCkseTQodGhpcyxudWxsLGwse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJvcmlnaW5hbExhYmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4ib3JpZ2luYWxMYWJlbCJpbiBBLGdldDpBPT5BLm9yaWdpbmFsTGFiZWwsc2V0OihBLHEpPT57QS5vcmlnaW5hbExhYmVsPXF9fSxtZXRhZGF0YTpMfSxmLGcpLHk0KHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToibW9kaWZpZWRMYWJlbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6QT0+Im1vZGlmaWVkTGFiZWwiaW4gQSxnZXQ6QT0+QS5tb2RpZmllZExhYmVsLHNldDooQSxxKT0+e0EubW9kaWZpZWRMYWJlbD1xfX0sbWV0YWRhdGE6TH0sdixtKSx5NCh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Imxhbmd1YWdlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpBPT4ibGFuZ3VhZ2UiaW4gQSxnZXQ6QT0+QS5sYW5ndWFnZSxzZXQ6KEEscSk9PntBLmxhbmd1YWdlPXF9fSxtZXRhZGF0YTpMfSxNLFMpLHk0KHRoaXMsbnVsbCxGLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZmlsZVBhdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOkE9PiJmaWxlUGF0aCJpbiBBLGdldDpBPT5BLmZpbGVQYXRoLHNldDooQSxxKT0+e0EuZmlsZVBhdGg9cX19LG1ldGFkYXRhOkx9LF8saykseTQobnVsbCxlPXt2YWx1ZTppfSx0LHtraW5kOiJjbGFzcyIsbmFtZTppLm5hbWUsbWV0YWRhdGE6TH0sbnVsbCxhKSxOPWk9ZS52YWx1ZSxMJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wubWV0YWRhdGEse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkx9KX1zdGF0aWMgZGVtbz0oKT0+d2AKICAgIDxkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvcgogICAgICAub3JpZ2luYWxDb250ZW50PSR7YGZ1bmN0aW9uIGhlbGxvKCkgewogIGNvbnNvbGUubG9nKCJIZWxsbyIpOwp9YH0KICAgICAgLm1vZGlmaWVkQ29udGVudD0ke2BmdW5jdGlvbiBoZWxsbygpIHsKICBjb25zb2xlLmxvZygiSGVsbG8gV29ybGQhIik7CiAgcmV0dXJuIHRydWU7Cn1gfQogICAgICAubGFuZ3VhZ2U9JHsidHlwZXNjcmlwdCJ9CiAgICAgIC5maWxlUGF0aD0keyIvZGVtby9leGFtcGxlLnRzIn0KICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogIGA7c3RhdGljIGRlbW9Hcm91cHM9WyJXb3Jrc3BhY2UiXTtkaWZmRWRpdG9yRGVmZXJyZWQ9enQuc21hcnRwcm9taXNlLmRlZmVyKCk7I2U9ZWkodGhpcyxuLCIiKTtnZXQgb3JpZ2luYWxDb250ZW50KCl7cmV0dXJuIHRoaXMuI2V9c2V0IG9yaWdpbmFsQ29udGVudChMKXt0aGlzLiNlPUx9I3Q9KGVpKHRoaXMsbyksZWkodGhpcyxjLCIiKSk7Z2V0IG1vZGlmaWVkQ29udGVudCgpe3JldHVybiB0aGlzLiN0fXNldCBtb2RpZmllZENvbnRlbnQoTCl7dGhpcy4jdD1MfSNhPShlaSh0aGlzLHApLGVpKHRoaXMsZiwiRGlzayBWZXJzaW9uIikpO2dldCBvcmlnaW5hbExhYmVsKCl7cmV0dXJuIHRoaXMuI2F9c2V0IG9yaWdpbmFsTGFiZWwoTCl7dGhpcy4jYT1MfSNpPShlaSh0aGlzLGcpLGVpKHRoaXMsdiwiTG9jYWwgVmVyc2lvbiIpKTtnZXQgbW9kaWZpZWRMYWJlbCgpe3JldHVybiB0aGlzLiNpfXNldCBtb2RpZmllZExhYmVsKEwpe3RoaXMuI2k9TH0jcj0oZWkodGhpcyxtKSxlaSh0aGlzLE0sInR5cGVzY3JpcHQiKSk7Z2V0IGxhbmd1YWdlKCl7cmV0dXJuIHRoaXMuI3J9c2V0IGxhbmd1YWdlKEwpe3RoaXMuI3I9TH0jcz0oZWkodGhpcyxTKSxlaSh0aGlzLF8sIiIpKTtnZXQgZmlsZVBhdGgoKXtyZXR1cm4gdGhpcy4jc31zZXQgZmlsZVBhdGgoTCl7dGhpcy4jcz1MfWRpZmZFZGl0b3I9KGVpKHRoaXMsayksbnVsbCk7bW9uYWNvVGhlbWVTdWJzY3JpcHRpb249bnVsbDtvcmlnaW5hbE1vZGVsPW51bGw7bW9kaWZpZWRNb2RlbD1udWxsO2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxZMi5zZXR1cERvbVRvb2xzKCl9c3RhdGljIHN0eWxlcz1bQ2UsaC5kZWZhdWx0U3R5bGVzLFFgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5kaWZmLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWxhYmVscyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpZmYtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4OwogICAgICB9CiAgICBgXTtyZW5kZXIoKXtsZXQgTD10aGlzLmZpbGVQYXRoLnNwbGl0KCIvIikucG9wKCl8fCJmaWxlIjtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0iZGlmZi13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLXRvb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlmZi1pbmZvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpZmYtZmlsZW5hbWUiPiR7TH08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChuZXcgTWFwKSxhd2FpdCB0aGlzLmluaXREaWZmRWRpdG9yKCl9YXN5bmMgaW5pdERpZmZFZGl0b3IoKXtsZXQgTD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpO2lmKCFMKXJldHVybjtsZXQgQT1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7QXh9YCxxPXdpbmRvdy5tb25hY287cXx8KGF3YWl0IG5ldyBQcm9taXNlKFU9PntsZXQgcmU9c2V0SW50ZXJ2YWwoKCk9Pnt3aW5kb3cubW9uYWNvJiYoY2xlYXJJbnRlcnZhbChyZSksVSgpKX0sMTAwKX0pLHE9d2luZG93Lm1vbmFjbyk7bGV0IEM9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2UsRT1DLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4/InZzIjoidnMtZGFyayIsVD1EYXRlLm5vdygpLCQ9cS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke1R9JHt0aGlzLmZpbGVQYXRofWApLFY9cS5VcmkucGFyc2UoYGRpZmY6Ly9tb2RpZmllZC8ke1R9JHt0aGlzLmZpbGVQYXRofWApO3RoaXMub3JpZ2luYWxNb2RlbD1xLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCx0aGlzLmxhbmd1YWdlLCQpLHRoaXMubW9kaWZpZWRNb2RlbD1xLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm1vZGlmaWVkQ29udGVudCx0aGlzLmxhbmd1YWdlLFYpLHRoaXMuZGlmZkVkaXRvcj1xLmVkaXRvci5jcmVhdGVEaWZmRWRpdG9yKEwse2F1dG9tYXRpY0xheW91dDohMCxyZWFkT25seTohMSxvcmlnaW5hbEVkaXRhYmxlOiExLHJlbmRlclNpZGVCeVNpZGU6ITAsaWdub3JlVHJpbVdoaXRlc3BhY2U6ITEsZm9udFNpemU6MTQsbWluaW1hcDp7ZW5hYmxlZDohMX19KSxxLmVkaXRvci5zZXRUaGVtZShFKSx0aGlzLmRpZmZFZGl0b3Iuc2V0TW9kZWwoe29yaWdpbmFsOnRoaXMub3JpZ2luYWxNb2RlbCxtb2RpZmllZDp0aGlzLm1vZGlmaWVkTW9kZWx9KSx0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uPUMudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoVT0+e2xldCByZT1VPyJ2cyI6InZzLWRhcmsiO3EuZWRpdG9yLnNldFRoZW1lKHJlKX0pO2xldCBSPSJtb25hY28tZGlmZi1lZGl0b3ItY3NzIjtpZighdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChSKSl7bGV0IHJlPWF3YWl0KGF3YWl0IGZldGNoKGAke0F9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCkpLnRleHQoKSxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ai5pZD1SLGoudGV4dENvbnRlbnQ9cmUsdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoail9c2V0VGltZW91dCgoKT0+e3RyeXt0aGlzLmRpZmZFZGl0b3I/LnJldmVhbEZpcnN0RGlmZigpfWNhdGNoe319LDEwMCksdGhpcy5kaWZmRWRpdG9yRGVmZXJyZWQucmVzb2x2ZSh0aGlzLmRpZmZFZGl0b3IpfWdvVG9OZXh0RGlmZigpe3RyeXt0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iil9Y2F0Y2h7fX1nb1RvUHJldmlvdXNEaWZmKCl7dHJ5e3RoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIil9Y2F0Y2h7fX1hY2NlcHRMb2NhbCgpe2xldCBMPXRoaXMuZGlmZkVkaXRvcj8uZ2V0TW9kaWZpZWRFZGl0b3IoKS5nZXRWYWx1ZSgpfHx0aGlzLm1vZGlmaWVkQ29udGVudDt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkaWZmLXJlc29sdmVkIix7ZGV0YWlsOnthY3Rpb246InVzZS1sb2NhbCIsY29udGVudDpMfSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFjY2VwdERpc2soKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkaWZmLXJlc29sdmVkIix7ZGV0YWlsOnthY3Rpb246InVzZS1kaXNrIixjb250ZW50OnRoaXMub3JpZ2luYWxDb250ZW50fSxidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWNsb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1jbG9zZWQiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uJiYodGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb249bnVsbCksdGhpcy5vcmlnaW5hbE1vZGVsJiYodGhpcy5vcmlnaW5hbE1vZGVsLmRpc3Bvc2UoKSx0aGlzLm9yaWdpbmFsTW9kZWw9bnVsbCksdGhpcy5tb2RpZmllZE1vZGVsJiYodGhpcy5tb2RpZmllZE1vZGVsLmRpc3Bvc2UoKSx0aGlzLm1vZGlmaWVkTW9kZWw9bnVsbCksdGhpcy5kaWZmRWRpdG9yJiYodGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKSx0aGlzLmRpZmZFZGl0b3I9bnVsbCl9c3RhdGlje2VpKGksYSl9fTtyZXR1cm4gTj1pfSkoKX0pO3ZhciBMMSxmdCxNeHQsenh0PWIoKCk9Pnt1ZSgpO0x0KCk7VmUoKTt6dygpO0swKCk7U3coKTtTdygpO2lkKCk7aWQoKTskaigpO0FqKCk7RXQoKTtLMCgpO0RqKCk7bjIoKTt4MSgpO2V3KCk7RWooKTtMMT1mdW5jdGlvbih0LGUsYSxpLHIscyl7ZnVuY3Rpb24gbih4KXtpZih4IT09dm9pZCAwJiZ0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpO3JldHVybiB4fWZvcih2YXIgbz1pLmtpbmQsZD1vPT09ImdldHRlciI/ImdldCI6bz09PSJzZXR0ZXIiPyJzZXQiOiJ2YWx1ZSIsYz0hZSYmdD9pLnN0YXRpYz90OnQucHJvdG90eXBlOm51bGwscD1lfHwoYz9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsaS5uYW1lKTp7fSksbCxmPSExLGc9YS5sZW5ndGgtMTtnPj0wO2ctLSl7dmFyIHk9e307Zm9yKHZhciB2IGluIGkpeVt2XT12PT09ImFjY2VzcyI/e306aVt2XTtmb3IodmFyIHYgaW4gaS5hY2Nlc3MpeS5hY2Nlc3Nbdl09aS5hY2Nlc3Nbdl07eS5hZGRJbml0aWFsaXplcj1mdW5jdGlvbih4KXtpZihmKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpO3MucHVzaChuKHh8fG51bGwpKX07dmFyIG09KDAsYVtnXSkobz09PSJhY2Nlc3NvciI/e2dldDpwLmdldCxzZXQ6cC5zZXR9OnBbZF0seSk7aWYobz09PSJhY2Nlc3NvciIpe2lmKG09PT12b2lkIDApY29udGludWU7aWYobT09PW51bGx8fHR5cGVvZiBtIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsobD1uKG0uZ2V0KSkmJihwLmdldD1sKSwobD1uKG0uc2V0KSkmJihwLnNldD1sKSwobD1uKG0uaW5pdCkpJiZyLnVuc2hpZnQobCl9ZWxzZShsPW4obSkpJiYobz09PSJmaWVsZCI/ci51bnNoaWZ0KGwpOnBbZF09bCl9YyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsaS5uYW1lLHApLGY9ITB9LGZ0PWZ1bmN0aW9uKHQsZSxhKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yLHI9MDtyPGUubGVuZ3RoO3IrKylhPWk/ZVtyXS5jYWxsKHQsYSk6ZVtyXS5jYWxsKHQpO3JldHVybiBpP2E6dm9pZCAwfSxNeHQ9KCgpPT57bGV0IHQ9W3BlKCJkZWVzLXdvcmtzcGFjZSIpXSxlLGE9W10saSxyPXhlLHMsbj1bXSxvPVtdLGQsYz1bXSxwPVtdLGwsZj1bXSxnPVtdLHksdj1bXSxtPVtdLHgsTT1bXSxTPVtdLEYsXz1bXSxrPVtdLE4sTD1bXSxBPVtdLHEsQz1bXSx6PVtdLEUsVD1bXSwkPVtdLFYsUj1bXSxVPVtdLHJlLGo9W10sbWU9W10sd2UsSD1bXSxjZT1bXSxrZSxXPVtdLEQ9W10sTyxaPVtdLFk9W10sb2UsZ2U9W10sYmU9W10sJGUsQj1bXSxQPVtdLEosZmU9W10sZGU9W10sX2UsaGU9W10sdGU9W10semUsRmU9W10sR2U9W10seWUsZWU9W10sYWU9W10sdmUsUGU9W10samU9W10sd3Qsb3Q9W10sJHQ9W107dmFyIEt0PWNsYXNzIGV4dGVuZHMgcntzdGF0aWN7aT10aGlzfXN0YXRpY3tsZXQgaWU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpPYmplY3R9KV0sZD1bSSh7YXR0cmlidXRlOiExfSldLGw9W0koe3R5cGU6Qm9vbGVhbn0pXSx5PVtJKHt0eXBlOkJvb2xlYW59KV0seD1bSSh7dHlwZTpOdW1iZXJ9KV0sRj1bSSh7dHlwZTpOdW1iZXJ9KV0sTj1bSygpXSxxPVtLKCldLEU9W0soKV0sVj1bSygpXSxyZT1bSygpXSx3ZT1bSygpXSxrZT1bSygpXSxPPVtLKCldLG9lPVtLKCldLCRlPVtLKCldLEo9W0soKV0sX2U9W0soKV0semU9W0soKV0seWU9W0soKV0sdmU9W0soKV0sd3Q9W0soKV0sTDEodGhpcyxudWxsLHMse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJleGVjdXRpb25FbnZpcm9ubWVudCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJleGVjdXRpb25FbnZpcm9ubWVudCJpbiBzZSxnZXQ6c2U9PnNlLmV4ZWN1dGlvbkVudmlyb25tZW50LHNldDooc2UsVGUpPT57c2UuZXhlY3V0aW9uRW52aXJvbm1lbnQ9VGV9fSxtZXRhZGF0YTppZX0sbixvKSxMMSh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRpYWxpemF0aW9uUHJvbWlzZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJpbml0aWFsaXphdGlvblByb21pc2UiaW4gc2UsZ2V0OnNlPT5zZS5pbml0aWFsaXphdGlvblByb21pc2Usc2V0OihzZSxUZSk9PntzZS5pbml0aWFsaXphdGlvblByb21pc2U9VGV9fSxtZXRhZGF0YTppZX0sYyxwKSxMMSh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dGaWxlVHJlZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJzaG93RmlsZVRyZWUiaW4gc2UsZ2V0OnNlPT5zZS5zaG93RmlsZVRyZWUsc2V0OihzZSxUZSk9PntzZS5zaG93RmlsZVRyZWU9VGV9fSxtZXRhZGF0YTppZX0sZixnKSxMMSh0aGlzLG51bGwseSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6InNob3dUZXJtaW5hbCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJzaG93VGVybWluYWwiaW4gc2UsZ2V0OnNlPT5zZS5zaG93VGVybWluYWwsc2V0OihzZSxUZSk9PntzZS5zaG93VGVybWluYWw9VGV9fSxtZXRhZGF0YTppZX0sdixtKSxMMSh0aGlzLG51bGwseCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImZpbGVUcmVlV2lkdGgiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnNlPT4iZmlsZVRyZWVXaWR0aCJpbiBzZSxnZXQ6c2U9PnNlLmZpbGVUcmVlV2lkdGgsc2V0OihzZSxUZSk9PntzZS5maWxlVHJlZVdpZHRoPVRlfX0sbWV0YWRhdGE6aWV9LE0sUyksTDEodGhpcyxudWxsLEYse2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJ0ZXJtaW5hbEhlaWdodCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJ0ZXJtaW5hbEhlaWdodCJpbiBzZSxnZXQ6c2U9PnNlLnRlcm1pbmFsSGVpZ2h0LHNldDooc2UsVGUpPT57c2UudGVybWluYWxIZWlnaHQ9VGV9fSxtZXRhZGF0YTppZX0sXyxrKSxMMSh0aGlzLG51bGwsTix7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im9wZW5GaWxlcyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJvcGVuRmlsZXMiaW4gc2UsZ2V0OnNlPT5zZS5vcGVuRmlsZXMsc2V0OihzZSxUZSk9PntzZS5vcGVuRmlsZXM9VGV9fSxtZXRhZGF0YTppZX0sTCxBKSxMMSh0aGlzLG51bGwscSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2ZUZpbGVQYXRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImFjdGl2ZUZpbGVQYXRoImluIHNlLGdldDpzZT0+c2UuYWN0aXZlRmlsZVBhdGgsc2V0OihzZSxUZSk9PntzZS5hY3RpdmVGaWxlUGF0aD1UZX19LG1ldGFkYXRhOmllfSxDLHopLEwxKHRoaXMsbnVsbCxFLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNUZXJtaW5hbENvbGxhcHNlZCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJpc1Rlcm1pbmFsQ29sbGFwc2VkImluIHNlLGdldDpzZT0+c2UuaXNUZXJtaW5hbENvbGxhcHNlZCxzZXQ6KHNlLFRlKT0+e3NlLmlzVGVybWluYWxDb2xsYXBzZWQ9VGV9fSxtZXRhZGF0YTppZX0sVCwkKSxMMSh0aGlzLG51bGwsVix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImlzRmlsZVRyZWVDb2xsYXBzZWQiLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnNlPT4iaXNGaWxlVHJlZUNvbGxhcHNlZCJpbiBzZSxnZXQ6c2U9PnNlLmlzRmlsZVRyZWVDb2xsYXBzZWQsc2V0OihzZSxUZSk9PntzZS5pc0ZpbGVUcmVlQ29sbGFwc2VkPVRlfX0sbWV0YWRhdGE6aWV9LFIsVSksTDEodGhpcyxudWxsLHJlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNJbml0aWFsaXppbmciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnNlPT4iaXNJbml0aWFsaXppbmciaW4gc2UsZ2V0OnNlPT5zZS5pc0luaXRpYWxpemluZyxzZXQ6KHNlLFRlKT0+e3NlLmlzSW5pdGlhbGl6aW5nPVRlfX0sbWV0YWRhdGE6aWV9LGosbWUpLEwxKHRoaXMsbnVsbCx3ZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImFjdGl2ZUJvdHRvbVBhbmVsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImFjdGl2ZUJvdHRvbVBhbmVsImluIHNlLGdldDpzZT0+c2UuYWN0aXZlQm90dG9tUGFuZWwsc2V0OihzZSxUZSk9PntzZS5hY3RpdmVCb3R0b21QYW5lbD1UZX19LG1ldGFkYXRhOmllfSxILGNlKSxMMSh0aGlzLG51bGwsa2Use2tpbmQ6ImFjY2Vzc29yIixuYW1lOiJkaWFnbm9zdGljTWFya2VycyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJkaWFnbm9zdGljTWFya2VycyJpbiBzZSxnZXQ6c2U9PnNlLmRpYWdub3N0aWNNYXJrZXJzLHNldDooc2UsVGUpPT57c2UuZGlhZ25vc3RpY01hcmtlcnM9VGV9fSxtZXRhZGF0YTppZX0sVyxEKSxMMSh0aGlzLG51bGwsTyx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImF1dG9TYXZlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImF1dG9TYXZlImluIHNlLGdldDpzZT0+c2UuYXV0b1NhdmUsc2V0OihzZSxUZSk9PntzZS5hdXRvU2F2ZT1UZX19LG1ldGFkYXRhOmllfSxaLFkpLEwxKHRoaXMsbnVsbCxvZSx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImluaXRDb21tYW5kIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImluaXRDb21tYW5kImluIHNlLGdldDpzZT0+c2UuaW5pdENvbW1hbmQsc2V0OihzZSxUZSk9PntzZS5pbml0Q29tbWFuZD1UZX19LG1ldGFkYXRhOmllfSxnZSxiZSksTDEodGhpcyxudWxsLCRlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaW5pdE91dHB1dCIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6c2U9PiJpbml0T3V0cHV0ImluIHNlLGdldDpzZT0+c2UuaW5pdE91dHB1dCxzZXQ6KHNlLFRlKT0+e3NlLmluaXRPdXRwdXQ9VGV9fSxtZXRhZGF0YTppZX0sQixQKSxMMSh0aGlzLG51bGwsSix7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRGaWxlVHJlZVdpZHRoIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImN1cnJlbnRGaWxlVHJlZVdpZHRoImluIHNlLGdldDpzZT0+c2UuY3VycmVudEZpbGVUcmVlV2lkdGgsc2V0OihzZSxUZSk9PntzZS5jdXJyZW50RmlsZVRyZWVXaWR0aD1UZX19LG1ldGFkYXRhOmllfSxmZSxkZSksTDEodGhpcyxudWxsLF9lLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiY3VycmVudFRlcm1pbmFsSGVpZ2h0IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImN1cnJlbnRUZXJtaW5hbEhlaWdodCJpbiBzZSxnZXQ6c2U9PnNlLmN1cnJlbnRUZXJtaW5hbEhlaWdodCxzZXQ6KHNlLFRlKT0+e3NlLmN1cnJlbnRUZXJtaW5hbEhlaWdodD1UZX19LG1ldGFkYXRhOmllfSxoZSx0ZSksTDEodGhpcyxudWxsLHplLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZ0ZpbGVUcmVlIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImlzRHJhZ2dpbmdGaWxlVHJlZSJpbiBzZSxnZXQ6c2U9PnNlLmlzRHJhZ2dpbmdGaWxlVHJlZSxzZXQ6KHNlLFRlKT0+e3NlLmlzRHJhZ2dpbmdGaWxlVHJlZT1UZX19LG1ldGFkYXRhOmllfSxGZSxHZSksTDEodGhpcyxudWxsLHllLHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZ1Rlcm1pbmFsIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+ImlzRHJhZ2dpbmdUZXJtaW5hbCJpbiBzZSxnZXQ6c2U9PnNlLmlzRHJhZ2dpbmdUZXJtaW5hbCxzZXQ6KHNlLFRlKT0+e3NlLmlzRHJhZ2dpbmdUZXJtaW5hbD1UZX19LG1ldGFkYXRhOmllfSxlZSxhZSksTDEodGhpcyxudWxsLHZlLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic2hvd0RpZmZWaWV3IixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpzZT0+InNob3dEaWZmVmlldyJpbiBzZSxnZXQ6c2U9PnNlLnNob3dEaWZmVmlldyxzZXQ6KHNlLFRlKT0+e3NlLnNob3dEaWZmVmlldz1UZX19LG1ldGFkYXRhOmllfSxQZSxqZSksTDEodGhpcyxudWxsLHd0LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiZGlmZlZpZXdDb25maWciLHN0YXRpYzohMSxwcml2YXRlOiExLGFjY2Vzczp7aGFzOnNlPT4iZGlmZlZpZXdDb25maWciaW4gc2UsZ2V0OnNlPT5zZS5kaWZmVmlld0NvbmZpZyxzZXQ6KHNlLFRlKT0+e3NlLmRpZmZWaWV3Q29uZmlnPVRlfX0sbWV0YWRhdGE6aWV9LG90LCR0KSxMMShudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTppZX0sbnVsbCxhKSxLdD1pPWUudmFsdWUsaWUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6aWV9KX1zdGF0aWMgZGVtbz0oKT0+e2xldCBpZT1uZXcgYjQsc2U9KGFzeW5jKCk9Pnthd2FpdCBpZS5pbml0KCk7bGV0IGN0PXsicGFja2FnZS5qc29uIjp7ZmlsZTp7Y29udGVudHM6SlNPTi5zdHJpbmdpZnkoe25hbWU6ImRlbW8tcHJvamVjdCIsdmVyc2lvbjoiMS4wLjAiLHR5cGU6Im1vZHVsZSIsc2NyaXB0czp7YnVpbGQ6InRzYyIsZGV2OiJ0c2MgLS13YXRjaCJ9LGRlcGVuZGVuY2llczp7IkBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSI6Il40LjIuMyJ9LGRldkRlcGVuZGVuY2llczp7IkB0eXBlcy9ub2RlIjoiXjIyLjAuMCIsdHlwZXNjcmlwdDoiXjUuMC4wIn19LG51bGwsMil9fSwibnBtZXh0cmEuanNvbiI6e2ZpbGU6e2NvbnRlbnRzOkpTT04uc3RyaW5naWZ5KHtkZWVzRWRpdG9yV29ya3NwYWNlOntvbkluaXQ6InBucG0gaW5zdGFsbCJ9fSxudWxsLDIpfX0sInRzY29uZmlnLmpzb24iOntmaWxlOntjb250ZW50czpKU09OLnN0cmluZ2lmeSh7Y29tcGlsZXJPcHRpb25zOnt0YXJnZXQ6IkVTMjAyMiIsbW9kdWxlOiJOb2RlTmV4dCIsbW9kdWxlUmVzb2x1dGlvbjoiTm9kZU5leHQiLHN0cmljdDohMCxvdXREaXI6Ii4vZGlzdCIscm9vdERpcjoiLi9zcmMiLGRlY2xhcmF0aW9uOiEwfSxpbmNsdWRlOlsic3JjLyoqLyoiXX0sbnVsbCwyKX19LHNyYzp7ZGlyZWN0b3J5OnsiaW5kZXgudHMiOntmaWxlOntjb250ZW50czpgLy8gTWFpbiBlbnRyeSBwb2ludAppbXBvcnQgeyBncmVldCwgZm9ybWF0TmFtZSB9IGZyb20gJy4vdXRpbHMuanMnOwoKY29uc3QgbmFtZSA9IGZvcm1hdE5hbWUoJ1dvcmxkJyk7CmNvbnNvbGUubG9nKGdyZWV0KG5hbWUpKTsKCi8vIEV4YW1wbGUgYXN5bmMgZnVuY3Rpb24KYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsKICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoJ0hlbGxvIGZyb20gYXN5bmMhJyk7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKbWFpbigpOwpgfX0sInV0aWxzLnRzIjp7ZmlsZTp7Y29udGVudHM6YC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgfX0sImltcG9ydHRlc3QudHMiOntmaWxlOntjb250ZW50czpgLy8gVGVzdCBucG0gcGFja2FnZSBpbXBvcnRzCmltcG9ydCAqIGFzIHNtYXJ0cHJvbWlzZSBmcm9tICdAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UnOwoKLy8gVGhpcyBzaG91bGQgaGF2ZSBJbnRlbGxpU2Vuc2Ugc2hvd2luZyBkZWZlcigpIG1ldGhvZApjb25zdCBkZWZlcnJlZCA9IHNtYXJ0cHJvbWlzZS5kZWZlcjxzdHJpbmc+KCk7CgovLyBUZXN0IHVzaW5nIHRoZSBkZWZlcnJlZCBwcm9taXNlCmFzeW5jIGZ1bmN0aW9uIHRlc3RTbWFydFByb21pc2UoKSB7CiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBkZWZlcnJlZC5yZXNvbHZlKCdIZWxsbyBmcm9tIHNtYXJ0cHJvbWlzZSEnKTsKICB9LCAxMDApOwoKICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWZlcnJlZC5wcm9taXNlOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCnRlc3RTbWFydFByb21pc2UoKTsKYH19fX19O2F3YWl0IGllLm1vdW50KGN0KX0pKCksVGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7VGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjtsZXQgbHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy13b3Jrc3BhY2UiKTtyZXR1cm4gbHQuZXhlY3V0aW9uRW52aXJvbm1lbnQ9aWUsbHQuaW5pdGlhbGl6YXRpb25Qcm9taXNlPXNlLFRlLmFwcGVuZENoaWxkKGx0KSx3YAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke1RlfQogICAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICBgfTtzdGF0aWMgZGVtb0dyb3Vwcz1bIldvcmtzcGFjZSJdOyNlPWZ0KHRoaXMsbixudWxsKTtnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy4jZX1zZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoaWUpe3RoaXMuI2U9aWV9I3Q9KGZ0KHRoaXMsbyksZnQodGhpcyxjLG51bGwpKTtnZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKCl7cmV0dXJuIHRoaXMuI3R9c2V0IGluaXRpYWxpemF0aW9uUHJvbWlzZShpZSl7dGhpcy4jdD1pZX0jYT0oZnQodGhpcyxwKSxmdCh0aGlzLGYsITApKTtnZXQgc2hvd0ZpbGVUcmVlKCl7cmV0dXJuIHRoaXMuI2F9c2V0IHNob3dGaWxlVHJlZShpZSl7dGhpcy4jYT1pZX0jaT0oZnQodGhpcyxnKSxmdCh0aGlzLHYsITApKTtnZXQgc2hvd1Rlcm1pbmFsKCl7cmV0dXJuIHRoaXMuI2l9c2V0IHNob3dUZXJtaW5hbChpZSl7dGhpcy4jaT1pZX0jcj0oZnQodGhpcyxtKSxmdCh0aGlzLE0sMjUwKSk7Z2V0IGZpbGVUcmVlV2lkdGgoKXtyZXR1cm4gdGhpcy4jcn1zZXQgZmlsZVRyZWVXaWR0aChpZSl7dGhpcy4jcj1pZX0jcz0oZnQodGhpcyxTKSxmdCh0aGlzLF8sMjAwKSk7Z2V0IHRlcm1pbmFsSGVpZ2h0KCl7cmV0dXJuIHRoaXMuI3N9c2V0IHRlcm1pbmFsSGVpZ2h0KGllKXt0aGlzLiNzPWllfSNuPShmdCh0aGlzLGspLGZ0KHRoaXMsTCxbXSkpO2dldCBvcGVuRmlsZXMoKXtyZXR1cm4gdGhpcy4jbn1zZXQgb3BlbkZpbGVzKGllKXt0aGlzLiNuPWllfSNvPShmdCh0aGlzLEEpLGZ0KHRoaXMsQywiIikpO2dldCBhY3RpdmVGaWxlUGF0aCgpe3JldHVybiB0aGlzLiNvfXNldCBhY3RpdmVGaWxlUGF0aChpZSl7dGhpcy4jbz1pZX0jbD0oZnQodGhpcyx6KSxmdCh0aGlzLFQsITEpKTtnZXQgaXNUZXJtaW5hbENvbGxhcHNlZCgpe3JldHVybiB0aGlzLiNsfXNldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKGllKXt0aGlzLiNsPWllfSNjPShmdCh0aGlzLCQpLGZ0KHRoaXMsUiwhMSkpO2dldCBpc0ZpbGVUcmVlQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuI2N9c2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoaWUpe3RoaXMuI2M9aWV9I2Q9KGZ0KHRoaXMsVSksZnQodGhpcyxqLCEwKSk7Z2V0IGlzSW5pdGlhbGl6aW5nKCl7cmV0dXJuIHRoaXMuI2R9c2V0IGlzSW5pdGlhbGl6aW5nKGllKXt0aGlzLiNkPWllfSNwPShmdCh0aGlzLG1lKSxmdCh0aGlzLEgsInRlcm1pbmFsIikpO2dldCBhY3RpdmVCb3R0b21QYW5lbCgpe3JldHVybiB0aGlzLiNwfXNldCBhY3RpdmVCb3R0b21QYW5lbChpZSl7dGhpcy4jcD1pZX0jaD0oZnQodGhpcyxjZSksZnQodGhpcyxXLFtdKSk7Z2V0IGRpYWdub3N0aWNNYXJrZXJzKCl7cmV0dXJuIHRoaXMuI2h9c2V0IGRpYWdub3N0aWNNYXJrZXJzKGllKXt0aGlzLiNoPWllfWVkaXRvckVsZW1lbnQ9KGZ0KHRoaXMsRCksbnVsbCk7aW5pdGlhbGl6YXRpb25TdGFydGVkPSExO2ludGVsbGlTZW5zZU1hbmFnZXI9bnVsbDtpbnRlbGxpU2Vuc2VJbml0aWFsaXplZD0hMTtub2RlTW9kdWxlc1dhdGNoZXI9bnVsbDtub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dD1udWxsO2ludGVsbGlTZW5zZURlYm91bmNlVGltZW91dD1udWxsO29wZW5GaWxlV2F0Y2hlcnM9bmV3IE1hcDtmaWxlQ2hhbmdlRGVib3VuY2U9bmV3IE1hcDthY3Rpb25iYXJFbGVtZW50PW51bGw7I3U9ZnQodGhpcyxaLCExKTtnZXQgYXV0b1NhdmUoKXtyZXR1cm4gdGhpcy4jdX1zZXQgYXV0b1NhdmUoaWUpe3RoaXMuI3U9aWV9YXV0b1NhdmVJbnRlcnZhbD0oZnQodGhpcyxZKSxudWxsKTsjZj1mdCh0aGlzLGdlLCIiKTtnZXQgaW5pdENvbW1hbmQoKXtyZXR1cm4gdGhpcy4jZn1zZXQgaW5pdENvbW1hbmQoaWUpe3RoaXMuI2Y9aWV9I209KGZ0KHRoaXMsYmUpLGZ0KHRoaXMsQixbXSkpO2dldCBpbml0T3V0cHV0KCl7cmV0dXJuIHRoaXMuI219c2V0IGluaXRPdXRwdXQoaWUpe3RoaXMuI209aWV9I2c9KGZ0KHRoaXMsUCksZnQodGhpcyxmZSwyNTApKTtnZXQgY3VycmVudEZpbGVUcmVlV2lkdGgoKXtyZXR1cm4gdGhpcy4jZ31zZXQgY3VycmVudEZpbGVUcmVlV2lkdGgoaWUpe3RoaXMuI2c9aWV9I2I9KGZ0KHRoaXMsZGUpLGZ0KHRoaXMsaGUsMjAwKSk7Z2V0IGN1cnJlbnRUZXJtaW5hbEhlaWdodCgpe3JldHVybiB0aGlzLiNifXNldCBjdXJyZW50VGVybWluYWxIZWlnaHQoaWUpe3RoaXMuI2I9aWV9I3Y9KGZ0KHRoaXMsdGUpLGZ0KHRoaXMsRmUsITEpKTtnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCl7cmV0dXJuIHRoaXMuI3Z9c2V0IGlzRHJhZ2dpbmdGaWxlVHJlZShpZSl7dGhpcy4jdj1pZX0jeT0oZnQodGhpcyxHZSksZnQodGhpcyxlZSwhMSkpO2dldCBpc0RyYWdnaW5nVGVybWluYWwoKXtyZXR1cm4gdGhpcy4jeX1zZXQgaXNEcmFnZ2luZ1Rlcm1pbmFsKGllKXt0aGlzLiN5PWllfSN4PShmdCh0aGlzLGFlKSxmdCh0aGlzLFBlLCExKSk7Z2V0IHNob3dEaWZmVmlldygpe3JldHVybiB0aGlzLiN4fXNldCBzaG93RGlmZlZpZXcoaWUpe3RoaXMuI3g9aWV9I3c9KGZ0KHRoaXMsamUpLGZ0KHRoaXMsb3QsbnVsbCkpO2dldCBkaWZmVmlld0NvbmZpZygpe3JldHVybiB0aGlzLiN3fXNldCBkaWZmVmlld0NvbmZpZyhpZSl7dGhpcy4jdz1pZX1rZXlkb3duSGFuZGxlcj0oZnQodGhpcywkdCksaWU9PnsoaWUubWV0YUtleXx8aWUuY3RybEtleSkmJmllLmtleT09PSJzIiYmIWllLnNoaWZ0S2V5JiYoaWUucHJldmVudERlZmF1bHQoKSx0aGlzLnNhdmVBY3RpdmVGaWxlKCkpLChpZS5tZXRhS2V5fHxpZS5jdHJsS2V5KSYmaWUuc2hpZnRLZXkmJmllLmtleS50b0xvd2VyQ2FzZSgpPT09InMiJiYoaWUucHJldmVudERlZmF1bHQoKSx0aGlzLnNhdmVBbGxGaWxlcygpKX0pO2hhbmRsZUZpbGVUcmVlTW91c2VEb3duPWllPT57aWUucHJldmVudERlZmF1bHQoKSx0aGlzLmlzRHJhZ2dpbmdGaWxlVHJlZT0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZVVwKX07aGFuZGxlRmlsZVRyZWVNb3VzZU1vdmU9aWU9PntpZighdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpcmV0dXJuO2xldCBzZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFRlPWllLmNsaWVudFgtc2UubGVmdCxsdD0xNTAsY3Q9c2Uud2lkdGgqLjUsbTE9TWF0aC5tYXgobHQsTWF0aC5taW4oY3QsVGUpKTt0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoPW0xfTtoYW5kbGVGaWxlVHJlZU1vdXNlVXA9KCk9Pnt0aGlzLmlzRHJhZ2dpbmdGaWxlVHJlZT0hMSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZVVwKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKX07aGFuZGxlVGVybWluYWxNb3VzZURvd249aWU9PntpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsPSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApfTtoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZT1pZT0+e2lmKCF0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbClyZXR1cm47bGV0IHNlPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksVGU9aWUuY2xpZW50WS1zZS50b3AsbHQ9c2UuaGVpZ2h0LVRlLGN0PTEwMCxtMT1zZS5oZWlnaHQqLjcsYWk9TWF0aC5tYXgoY3QsTWF0aC5taW4obTEsbHQpKTt0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodD1haX07aGFuZGxlVGVybWluYWxNb3VzZVVwPSgpPT57dGhpcy5pc0RyYWdnaW5nVGVybWluYWw9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VVcCksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSl9O3N0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGVybWluYWwtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucGFuZWwtYWN0aW9uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCJoc2woMCAwJSAxOCUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWJzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAudGFiIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDkyJSkiLCJoc2woMCAwJSAxMiUpIil9OwogICAgICB9CgogICAgICAudGFiLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNTAlKSIsImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAudGFiLW5hbWUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAudGFiLWNsb3NlIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAuZWRpdG9yLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMsIGJhY2tncm91bmQgMC4xNXM7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZWRpdG9yLW1lbnUtYnV0dG9uOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDgpIiwiaHNsKDAgMCUgMTAwJSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAucHJvYmxlbXMtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMzJweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA1NSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwiaHNsKDAgMCUgNzUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNTAlKSIsImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucGFuZWwtdGFiLWJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIG1pbi13aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwiaHNsKDQwIDcwJSA0NSUpIil9OwogICAgICB9CgogICAgICAucGFuZWwtdGFiLWJhZGdlLm5vbmUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1saXN0IHsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0taXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKICAgICAgfQoKICAgICAgLnByb2JsZW0taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2JsZW0taWNvbi53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCg0MCA3MCUgNTAlKSIsImhzbCg0MCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2JsZW0tZGV0YWlscyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLW1lc3NhZ2UgewogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWxvY2F0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjOWNhM2FmIiwiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmc6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbDpob3Zlcjo6YWZ0ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmc6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGBdO3JlbmRlcigpe2xldCBpZT1bIndvcmtzcGFjZS1jb250YWluZXIiLHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlfHx0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbD8iZHJhZ2dpbmciOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3JldHVybiB0aGlzLmlzSW5pdGlhbGl6aW5nP3dgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZHx8IiJ9CiAgICAgICAgICAgIC5saW5lcz0ke3RoaXMuaW5pdE91dHB1dH0KICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgIGA6d2AKICAgICAgPGRpdiBjbGFzcz0id29ya3NwYWNlLW91dGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSIke2llfSI+CiAgICAgICAgICA8IS0tIEZpbGV0cmVlIHBhbmVsIChmdWxsIGhlaWdodCkgLS0+CiAgICAgICAgICAke3RoaXMuc2hvd0ZpbGVUcmVlP3dgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iZmlsZXRyZWUtcGFuZWwgJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQ/ImNvbGxhcHNlZCI6IiJ9IgogICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQ/MDp0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRofXB4IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWZpbGV0cmVlCiAgICAgICAgICAgICAgICAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHt0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fQogICAgICAgICAgICAgICAgLnNlbGVjdGVkUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICBAZmlsZS1zZWxlY3Q9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZD8iIjp3YAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLXZlcnRpY2FsICR7dGhpcy5pc0RyYWdnaW5nRmlsZVRyZWU/ImRyYWdnaW5nIjoiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICBgOiIifQoKICAgICAgICAgIDwhLS0gRWRpdG9yICsgVGVybWluYWwgYXJlYSAtLT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1hcmVhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXBhbmVsIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5vcGVuRmlsZXMubWFwKHNlPT53YAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHtzZS5wYXRoPT09dGhpcy5hY3RpdmVGaWxlUGF0aD8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5hY3RpdmF0ZUZpbGUoc2UucGF0aCl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtzZS5tb2RpZmllZD93YDxzcGFuIGNsYXNzPSJ0YWItbW9kaWZpZWQiPjwvc3Bhbj5gOiIifQogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1uYW1lIj4ke3NlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7VGU9PnRoaXMuY2xvc2VGaWxlKFRlLHNlLnBhdGgpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWVudS1idXR0b24iIEBjbGljaz0ke3RoaXMuc2hvd0VkaXRvck1lbnV9IHRpdGxlPSJFZGl0b3Igb3B0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOm1vcmVWZXJ0aWNhbCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+CiAgICAgICAgICAgICAgICAke3RoaXMuc2hvd0RpZmZWaWV3JiZ0aGlzLmRpZmZWaWV3Q29uZmlnP3dgCiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvcgogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuZGlmZlZpZXdDb25maWcuZmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLm9yaWdpbmFsQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcub3JpZ2luYWxDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5tb2RpZmllZENvbnRlbnQ9JHt0aGlzLmRpZmZWaWV3Q29uZmlnLm1vZGlmaWVkQ29udGVudH0KICAgICAgICAgICAgICAgICAgICAubGFuZ3VhZ2U9JHt0aGlzLmRpZmZWaWV3Q29uZmlnLmxhbmd1YWdlfQogICAgICAgICAgICAgICAgICAgIEBkaWZmLXJlc29sdmVkPSR7dGhpcy5oYW5kbGVEaWZmUmVzb2x2ZWR9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtY2xvc2VkPSR7KCk9Pnt0aGlzLnNob3dEaWZmVmlldz0hMSx0aGlzLmRpZmZWaWV3Q29uZmlnPW51bGx9fQogICAgICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvcj4KICAgICAgICAgICAgICAgIGA6dGhpcy5vcGVuRmlsZXMubGVuZ3RoPT09MD93YAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZUNvZGUifSBpY29uU2l6ZT0iNDgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlNlbGVjdCBhIGZpbGUgdG8gZWRpdDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgOndgCiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgICAgICAgICAuZmlsZVBhdGg9JHt0aGlzLmFjdGl2ZUZpbGVQYXRofQogICAgICAgICAgICAgICAgICAgIC5jb250ZW50PSR7dGhpcy5nZXRBY3RpdmVGaWxlQ29udGVudCgpfQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKX0KICAgICAgICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBIb3Jpem9udGFsIHJlc2l6ZSBoYW5kbGUgZm9yIHRlcm1pbmFsIC0tPgogICAgICAgICAgICAke3RoaXMuc2hvd1Rlcm1pbmFsJiYhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkP3dgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCAke3RoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsPyJkcmFnZ2luZyI6IiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlVGVybWluYWxNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgOiIifQoKICAgICAgICAgICAgPCEtLSBUZXJtaW5hbCBwYW5lbCAtLT4KICAgICAgICAgICAgJHt0aGlzLnNob3dUZXJtaW5hbD93YAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXJtaW5hbC1wYW5lbCAke3RoaXMuaXNUZXJtaW5hbENvbGxhcHNlZD8iY29sbGFwc2VkIjoiIn0iCiAgICAgICAgICAgICAgICBzdHlsZT0iaGVpZ2h0OiAke3RoaXMuaXNUZXJtaW5hbENvbGxhcHNlZD8zMjp0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodH1weCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbD09PSJ0ZXJtaW5hbCI/ImFjdGl2ZSI6IiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuYWN0aXZlQm90dG9tUGFuZWw9InRlcm1pbmFsIn0KICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp0ZXJtaW5hbCJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbAogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYW5lbC10YWIgJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsPT09InByb2JsZW1zIj8iYWN0aXZlIjoiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5hY3RpdmVCb3R0b21QYW5lbD0icHJvYmxlbXMifQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNpcmNsZUFsZXJ0In0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIFByb2JsZW1zCiAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubGVuZ3RoPjA/d2AKICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhbmVsLXRhYi1iYWRnZSAke3RoaXMuZ2V0RXJyb3JDb3VudCgpPT09MD8id2FybmluZyI6IiJ9Ij4ke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubGVuZ3RofTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgIGA6IiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYWN0aW9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVRlcm1pbmFsfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgICAgLmljb249JHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQ/Imx1Y2lkZTpjaGV2cm9uVXAiOiJsdWNpZGU6Y2hldnJvbkRvd24ifQogICAgICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTQiCiAgICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsPT09InRlcm1pbmFsIj8iYmxvY2siOiJub25lIn0iPgogICAgICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwKICAgICAgICAgICAgICAgICAgICAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHt0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fQogICAgICAgICAgICAgICAgICAgIC5zZXR1cENvbW1hbmQ9JHsiIn0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW1zLWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWw9PT0icHJvYmxlbXMiPyJibG9jayI6Im5vbmUifSI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5yZW5kZXJQcm9ibGVtc1BhbmVsKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBCYXIgKGZ1bGwgd2lkdGgpIC0tPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIKICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICBAcnVuLXByb2Nlc3M9JHt0aGlzLmhhbmRsZVJ1blByb2Nlc3N9CiAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyPgogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKXthd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMua2V5ZG93bkhhbmRsZXIpfWFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmtleWRvd25IYW5kbGVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZVVwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKSx0aGlzLmF1dG9TYXZlSW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuYXV0b1NhdmVJbnRlcnZhbCksdGhpcy5hdXRvU2F2ZUludGVydmFsPW51bGwpLHRoaXMuc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpLHRoaXMuc3RvcEFsbEZpbGVXYXRjaGVycygpfWFzeW5jIGZpcnN0VXBkYXRlZCgpe3RoaXMuY3VycmVudEZpbGVUcmVlV2lkdGg9dGhpcy5maWxlVHJlZVdpZHRoLHRoaXMuY3VycmVudFRlcm1pbmFsSGVpZ2h0PXRoaXMudGVybWluYWxIZWlnaHQsdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCYmYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCl9YXN5bmMgdXBkYXRlZChpZSl7aWUuaGFzKCJleGVjdXRpb25FbnZpcm9ubWVudCIpJiZ0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiZhd2FpdCB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKSx0aGlzLmFjdGlvbmJhckVsZW1lbnR8fCh0aGlzLmFjdGlvbmJhckVsZW1lbnQ9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXBhbmVsIGRlZXMtYWN0aW9uYmFyIikpfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoKXtpZih0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50JiYhdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQpe3RoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkPSEwLHRoaXMuaXNJbml0aWFsaXppbmc9ITA7dHJ5e3RoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlP2F3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOnRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHl8fGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpLGF3YWl0IHRoaXMuZXhlY3V0ZU9uSW5pdENvbW1hbmQoKX1jYXRjaChpZSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsaWUpLHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkPSExfWZpbmFsbHl7dGhpcy5pc0luaXRpYWxpemluZz0hMX19fWFzeW5jIGV4ZWN1dGVPbkluaXRDb21tYW5kKCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl0cnl7aWYoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9ucG1leHRyYS5qc29uIikpe2xldCBpZT1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvbnBtZXh0cmEuanNvbiIpLFRlPUpTT04ucGFyc2UoaWUpPy5kZWVzRWRpdG9yV29ya3NwYWNlPy5vbkluaXQ7aWYoVGUmJnR5cGVvZiBUZT09InN0cmluZyIpe2NvbnNvbGUubG9nKCJFeGVjdXRpbmcgb25Jbml0IGNvbW1hbmQ6IixUZSksdGhpcy5pbml0Q29tbWFuZD1UZSx0aGlzLmluaXRPdXRwdXQ9W107bGV0W2x0LC4uLmN0XT1UZS5zcGxpdCgiICIpLG0xPWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuc3Bhd24obHQsY3QpO20xLm91dHB1dC5waXBlVG8obmV3IFdyaXRhYmxlU3RyZWFtKHt3cml0ZTp0cz0+e2xldCBhcz10cy5zcGxpdChgCmApO2ZvcihsZXQgSWUgb2YgYXMpSWUmJih0aGlzLmluaXRPdXRwdXQ9Wy4uLnRoaXMuaW5pdE91dHB1dCxJZV0pfX0pKTtsZXQgYWk9YXdhaXQgbTEuZXhpdDtjb25zb2xlLmxvZygib25Jbml0IGNvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiIsYWkpLHRoaXMuaW5pdE91dHB1dD1bLi4udGhpcy5pbml0T3V0cHV0LCIiLGBDb21tYW5kIGNvbXBsZXRlZCB3aXRoIGV4aXQgY29kZTogJHthaX1gXX19fWNhdGNoKGllKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBleGVjdXRlIG9uSW5pdCBjb21tYW5kOiIsaWUpfX1hc3luYyBpbml0aWFsaXplSW50ZWxsaVNlbnNlKCl7aWYoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR8fHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpcmV0dXJuO2xldCBpZT13aW5kb3cubW9uYWNvO2lmKGllfHwoYXdhaXQgbmV3IFByb21pc2Uoc2U9PnNldFRpbWVvdXQoc2UsMTAwKSksaWU9d2luZG93Lm1vbmFjbyksIWllKXtjb25zb2xlLndhcm4oIk1vbmFjbyBub3QgeWV0IGxvYWRlZCwgSW50ZWxsaVNlbnNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgbGF0ZXIiKTtyZXR1cm59dGhpcy5pbnRlbGxpU2Vuc2VJbml0aWFsaXplZD0hMCx0aGlzLmludGVsbGlTZW5zZU1hbmFnZXI9bmV3IG9kLGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KGllLHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpLHRoaXMuc2V0dXBNYXJrZXJMaXN0ZW5lcigpLHRoaXMuc3RhcnROb2RlTW9kdWxlc1dhdGNoZXIoKSxhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuc2NhbkFuZExvYWROZXdQYWNrYWdlVHlwZXMoKX1zdGFydE5vZGVNb2R1bGVzV2F0Y2hlcigpe2lmKCEoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR8fHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKSl0cnl7dGhpcy5ub2RlTW9kdWxlc1dhdGNoZXI9dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiL25vZGVfbW9kdWxlcyIsKGllLHNlKT0+e3RoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KSx0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoYXN5bmMoKT0+e3RoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciYmYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCl9LDJlMyl9LHtyZWN1cnNpdmU6ITB9KX1jYXRjaChpZSl7Y29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsaWUpfX1zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCl7dGhpcy5ub2RlTW9kdWxlc1dhdGNoZXImJih0aGlzLm5vZGVNb2R1bGVzV2F0Y2hlci5zdG9wKCksdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXI9bnVsbCksdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KSx0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0PW51bGwpfXN0YXJ0V2F0Y2hpbmdGaWxlKGllKXtpZighKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fHx0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuaGFzKGllKSkpdHJ5e2xldCBzZT10aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKGllLChUZSxsdCk9PntsZXQgY3Q9dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KGllKTtjdCYmY2xlYXJUaW1lb3V0KGN0KTtsZXQgbTE9c2V0VGltZW91dCgoKT0+e3RoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKGllKSx0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUoaWUpfSwzMDApO3RoaXMuZmlsZUNoYW5nZURlYm91bmNlLnNldChpZSxtMSl9KTt0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuc2V0KGllLHNlKX1jYXRjaChzZSl7Y29uc29sZS53YXJuKGBDb3VsZCBub3Qgd2F0Y2ggZmlsZSAke2llfTpgLHNlKX19c3RvcFdhdGNoaW5nRmlsZShpZSl7bGV0IHNlPXRoaXMub3BlbkZpbGVXYXRjaGVycy5nZXQoaWUpO3NlJiYoc2Uuc3RvcCgpLHRoaXMub3BlbkZpbGVXYXRjaGVycy5kZWxldGUoaWUpKTtsZXQgVGU9dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KGllKTtUZSYmKGNsZWFyVGltZW91dChUZSksdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKGllKSl9c3RvcEFsbEZpbGVXYXRjaGVycygpe2ZvcihsZXQgaWUgb2YgdGhpcy5vcGVuRmlsZVdhdGNoZXJzLnZhbHVlcygpKWllLnN0b3AoKTt0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuY2xlYXIoKTtmb3IobGV0IGllIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKWNsZWFyVGltZW91dChpZSk7dGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuY2xlYXIoKX1hc3luYyBoYW5kbGVFeHRlcm5hbEZpbGVDaGFuZ2UoaWUpe2xldCBzZT10aGlzLm9wZW5GaWxlcy5maW5kKFRlPT5UZS5wYXRoPT09aWUpO2lmKCEoIXNlfHwhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkpdHJ5e2xldCBUZT1hd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGllKTtpZihUZT09PXNlLmNvbnRlbnQpcmV0dXJuO2lmKHNlLm1vZGlmaWVkKXtsZXQgbHQ9YXdhaXQgdGhpcy5hY3Rpb25iYXJFbGVtZW50Py5zaG93KHttZXNzYWdlOmAiJHtzZS5uYW1lfSIgY2hhbmdlZCBvbiBkaXNrLiBXaGF0IGRvIHlvdSB3YW50IHRvIGRvP2AsdHlwZToicXVlc3Rpb24iLGljb246Imx1Y2lkZTpnaXRNZXJnZSIsYWN0aW9uczpbe2lkOiJsb2FkLWRpc2siLGxhYmVsOiJMb2FkIGZyb20gRGlzayIscHJpbWFyeTohMH0se2lkOiJzYXZlLWxvY2FsIixsYWJlbDoiU2F2ZSBMb2NhbCB0byBEaXNrIn0se2lkOiJjb21wYXJlIixsYWJlbDoiQ29tcGFyZSJ9XSx0aW1lb3V0OntkdXJhdGlvbjoxNWUzLGRlZmF1bHRBY3Rpb25JZDoibG9hZC1kaXNrIn0sZGlzbWlzc2libGU6ITB9KTtsdD8uYWN0aW9uSWQ9PT0ibG9hZC1kaXNrIj9hd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KGllLFRlLCExKTpsdD8uYWN0aW9uSWQ9PT0ic2F2ZS1sb2NhbCI/KGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKGllLHNlLmNvbnRlbnQpLHRoaXMub3BlbkZpbGVzPXRoaXMub3BlbkZpbGVzLm1hcChjdD0+Y3QucGF0aD09PWllP3suLi5jdCxtb2RpZmllZDohMX06Y3QpKTpsdD8uYWN0aW9uSWQ9PT0iY29tcGFyZSImJnRoaXMub3BlbkRpZmZWaWV3KGllLHNlLmNvbnRlbnQsVGUpfWVsc2UgYXdhaXQgdGhpcy51cGRhdGVGaWxlQ29udGVudChpZSxUZSwhMCl9Y2F0Y2goVGUpe2NvbnNvbGUud2FybihgRmFpbGVkIHRvIGhhbmRsZSBleHRlcm5hbCBjaGFuZ2UgZm9yICR7aWV9OmAsVGUpfX1hc3luYyB1cGRhdGVGaWxlQ29udGVudChpZSxzZSxUZSl7aWYodGhpcy5vcGVuRmlsZXM9dGhpcy5vcGVuRmlsZXMubWFwKGx0PT5sdC5wYXRoPT09aWU/ey4uLmx0LGNvbnRlbnQ6c2UsbW9kaWZpZWQ6ITF9Omx0KSxpZT09PXRoaXMuYWN0aXZlRmlsZVBhdGgpe2xldCBsdD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpO2x0JiZhd2FpdCBsdC5zZXRDb250ZW50RXh0ZXJuYWwoc2UsVGUpfX1vcGVuRGlmZlZpZXcoaWUsc2UsVGUpe3RoaXMuZGlmZlZpZXdDb25maWc9e2ZpbGVQYXRoOmllLG9yaWdpbmFsQ29udGVudDpUZSxtb2RpZmllZENvbnRlbnQ6c2UsbGFuZ3VhZ2U6dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKGllKX0sdGhpcy5zaG93RGlmZlZpZXc9ITB9YXN5bmMgaGFuZGxlRGlmZlJlc29sdmVkKGllKXtsZXR7YWN0aW9uOnNlLGNvbnRlbnQ6VGV9PWllLmRldGFpbCxsdD10aGlzLmRpZmZWaWV3Q29uZmlnPy5maWxlUGF0aDtpZighbHR8fCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXt0aGlzLnNob3dEaWZmVmlldz0hMSx0aGlzLmRpZmZWaWV3Q29uZmlnPW51bGw7cmV0dXJufWlmKHNlPT09InVzZS1sb2NhbCIpe2lmKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKGx0LFRlKSx0aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5tYXAoY3Q9PmN0LnBhdGg9PT1sdD97Li4uY3QsY29udGVudDpUZSxtb2RpZmllZDohMX06Y3QpLGx0PT09dGhpcy5hY3RpdmVGaWxlUGF0aCl7bGV0IGN0PXRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7Y3QmJmF3YWl0IGN0LnNldENvbnRlbnRFeHRlcm5hbChUZSwhMSl9fWVsc2Ugc2U9PT0idXNlLWRpc2siJiZhd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KGx0LFRlLCExKTt0aGlzLnNob3dEaWZmVmlldz0hMSx0aGlzLmRpZmZWaWV3Q29uZmlnPW51bGx9YXN5bmMgaGFuZGxlRmlsZVNlbGVjdChpZSl7bGV0e3BhdGg6c2UsbmFtZTpUZX09aWUuZGV0YWlsO2F3YWl0IHRoaXMub3BlbkZpbGUoc2UsVGUpfWFzeW5jIG9wZW5GaWxlKGllLHNlKXtpZih0aGlzLm9wZW5GaWxlcy5maW5kKGx0PT5sdC5wYXRoPT09aWUpKXt0aGlzLmFjdGl2ZUZpbGVQYXRoPWllO3JldHVybn1pZih0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KXRyeXtsZXQgbHQ9YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShpZSk7aWYodGhpcy5vcGVuRmlsZXM9Wy4uLnRoaXMub3BlbkZpbGVzLHtwYXRoOmllLG5hbWU6c2UsY29udGVudDpsdCxtb2RpZmllZDohMX1dLHRoaXMuYWN0aXZlRmlsZVBhdGg9aWUsdGhpcy5zdGFydFdhdGNoaW5nRmlsZShpZSksIXRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpe2F3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsYXdhaXQgbmV3IFByb21pc2UobTE9PnNldFRpbWVvdXQobTEsNTAwKSksYXdhaXQgdGhpcy5pbml0aWFsaXplSW50ZWxsaVNlbnNlKCk7bGV0IGN0PXRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChpZSk7dGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyJiYoY3Q9PT0idHlwZXNjcmlwdCJ8fGN0PT09ImphdmFzY3JpcHQiKSYmYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnByb2Nlc3NDb250ZW50Q2hhbmdlKGx0KX19Y2F0Y2gobHQpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBvcGVuIGZpbGUgJHtpZX06YCxsdCl9fWFjdGl2YXRlRmlsZShpZSl7dGhpcy5hY3RpdmVGaWxlUGF0aD1pZX1jbG9zZUZpbGUoaWUsc2Upe2llLnN0b3BQcm9wYWdhdGlvbigpO2xldCBUZT10aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoY3Q9PmN0LnBhdGg9PT1zZSk7aWYoVGU9PT0tMSlyZXR1cm47bGV0IGx0PXRoaXMub3BlbkZpbGVzW1RlXTtpZighKGx0Lm1vZGlmaWVkJiYhY29uZmlybShgJHtsdC5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCkpJiYodGhpcy5zdG9wV2F0Y2hpbmdGaWxlKHNlKSx0aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5maWx0ZXIoY3Q9PmN0LnBhdGghPT1zZSksdGhpcy5hY3RpdmVGaWxlUGF0aD09PXNlKSlpZih0aGlzLm9wZW5GaWxlcy5sZW5ndGg+MCl7bGV0IGN0PU1hdGgubWluKFRlLHRoaXMub3BlbkZpbGVzLmxlbmd0aC0xKTt0aGlzLmFjdGl2ZUZpbGVQYXRoPXRoaXMub3BlbkZpbGVzW2N0XS5wYXRofWVsc2UgdGhpcy5hY3RpdmVGaWxlUGF0aD0iIn1nZXRBY3RpdmVGaWxlQ29udGVudCgpe3JldHVybiB0aGlzLm9wZW5GaWxlcy5maW5kKHNlPT5zZS5wYXRoPT09dGhpcy5hY3RpdmVGaWxlUGF0aCk/LmNvbnRlbnR8fCIifWhhbmRsZUNvbnRlbnRDaGFuZ2UoaWUpe2xldCBzZT1pZS5kZXRhaWwsVGU9dGhpcy5vcGVuRmlsZXMuZmluZEluZGV4KGN0PT5jdC5wYXRoPT09dGhpcy5hY3RpdmVGaWxlUGF0aCk7aWYoVGU9PT0tMSlyZXR1cm47bGV0IGx0PXRoaXMub3BlbkZpbGVzW1RlXTtpZihsdC5jb250ZW50IT09c2Upe3RoaXMub3BlbkZpbGVzPVsuLi50aGlzLm9wZW5GaWxlcy5zbGljZSgwLFRlKSx7Li4ubHQsY29udGVudDpzZSxtb2RpZmllZDohMH0sLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoVGUrMSldO2xldCBjdD10aGlzLmdldExhbmd1YWdlRnJvbVBhdGgodGhpcy5hY3RpdmVGaWxlUGF0aCk7dGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyJiYoY3Q9PT0idHlwZXNjcmlwdCJ8fGN0PT09ImphdmFzY3JpcHQiKSYmKHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpLHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmludGVsbGlTZW5zZU1hbmFnZXI/LnByb2Nlc3NDb250ZW50Q2hhbmdlKHNlKX0sNTAwKSl9fWdldExhbmd1YWdlRnJvbVBhdGgoaWUpe2xldCBzZT1pZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO3JldHVybnt0czoidHlwZXNjcmlwdCIsdHN4OiJ0eXBlc2NyaXB0IixqczoiamF2YXNjcmlwdCIsanN4OiJqYXZhc2NyaXB0Iixqc29uOiJqc29uIixodG1sOiJodG1sIixjc3M6ImNzcyIsc2Nzczoic2NzcyIsbGVzczoibGVzcyIsbWQ6Im1hcmtkb3duIix5YW1sOiJ5YW1sIix5bWw6InlhbWwiLHhtbDoieG1sIixzcWw6InNxbCIscHk6InB5dGhvbiIsc2g6InNoZWxsIixiYXNoOiJzaGVsbCJ9W3NlfHwiIl18fCJwbGFpbnRleHQifXRvZ2dsZVRlcm1pbmFsKCl7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkPSF0aGlzLmlzVGVybWluYWxDb2xsYXBzZWR9YXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKXtsZXQgaWU9dGhpcy5vcGVuRmlsZXMuZmluZChzZT0+c2UucGF0aD09PXRoaXMuYWN0aXZlRmlsZVBhdGgpO2lmKCEoIWllfHwhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkpdHJ5e2F3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKGllLnBhdGgsaWUuY29udGVudCksdGhpcy5vcGVuRmlsZXM9dGhpcy5vcGVuRmlsZXMubWFwKHNlPT5zZS5wYXRoPT09aWUucGF0aD97Li4uc2UsbW9kaWZpZWQ6ITF9OnNlKSx0aGlzLmludGVsbGlTZW5zZU1hbmFnZXImJnRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5hZGRGaWxlTW9kZWwoaWUucGF0aCxpZS5jb250ZW50KX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHNhdmUgZmlsZToiLHNlKX19YXN5bmMgc2F2ZUFsbEZpbGVzKCl7aWYodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCl7Zm9yKGxldCBpZSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoc2U9PnNlLm1vZGlmaWVkKSl0cnl7YXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoaWUucGF0aCxpZS5jb250ZW50KSx0aGlzLmludGVsbGlTZW5zZU1hbmFnZXImJnRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5hZGRGaWxlTW9kZWwoaWUucGF0aCxpZS5jb250ZW50KX1jYXRjaChzZSl7Y29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtpZS5wYXRofTpgLHNlKX10aGlzLm9wZW5GaWxlcz10aGlzLm9wZW5GaWxlcy5tYXAoaWU9Pih7Li4uaWUsbW9kaWZpZWQ6ITF9KSl9fWFzeW5jIHNob3dFZGl0b3JNZW51KGllKXtpZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgc2U9W3tuYW1lOnRoaXMuYXV0b1NhdmU/Ilx1MjcxMyBBdXRvIFNhdmUiOiJBdXRvIFNhdmUiLGljb25OYW1lOiJsdWNpZGU6c2F2ZSIsYWN0aW9uOmFzeW5jKCk9PnRoaXMudG9nZ2xlQXV0b1NhdmUoKX0se2RpdmlkZXI6ITB9LHtuYW1lOiJTYXZlIixpY29uTmFtZToibHVjaWRlOnNhdmUiLGFjdGlvbjphc3luYygpPT50aGlzLnNhdmVBY3RpdmVGaWxlKCl9LHtuYW1lOiJTYXZlIEFsbCIsaWNvbk5hbWU6Imx1Y2lkZTpzYXZlIixhY3Rpb246YXN5bmMoKT0+dGhpcy5zYXZlQWxsRmlsZXMoKX1dO2F3YWl0IFd0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGllLHNlKX10b2dnbGVBdXRvU2F2ZSgpe3RoaXMuYXV0b1NhdmU9IXRoaXMuYXV0b1NhdmUsdGhpcy5hdXRvU2F2ZT90aGlzLmF1dG9TYXZlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLm9wZW5GaWxlcy5zb21lKHNlPT5zZS5tb2RpZmllZCkmJnRoaXMuc2F2ZUFsbEZpbGVzKCl9LDJlMyk6dGhpcy5hdXRvU2F2ZUludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpLHRoaXMuYXV0b1NhdmVJbnRlcnZhbD1udWxsKX1nZXRFcnJvckNvdW50KCl7cmV0dXJuIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMuZmlsdGVyKGllPT5pZS5zZXZlcml0eT09PTgpLmxlbmd0aH1yZW5kZXJQcm9ibGVtc1BhbmVsKCl7cmV0dXJuIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMubGVuZ3RoPT09MD93YAogICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW1zLWVtcHR5Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrQ2lyY2xlIn0gaWNvblNpemU9IjI0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPk5vIHByb2JsZW1zIGRldGVjdGVkPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgOndgCiAgICAgIDxkaXYgY2xhc3M9InByb2JsZW1zLWxpc3QiPgogICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5tYXAoaWU9PndgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtLWl0ZW0iIEBjbGljaz0keygpPT50aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKGllKX0+CiAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICBjbGFzcz0icHJvYmxlbS1pY29uICR7aWUuc2V2ZXJpdHk9PT04PyJlcnJvciI6Indhcm5pbmcifSIKICAgICAgICAgICAgICAuaWNvbj0ke2llLnNldmVyaXR5PT09OD8ibHVjaWRlOmNpcmNsZVgiOiJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke2llLm1lc3NhZ2V9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1sb2NhdGlvbiI+CiAgICAgICAgICAgICAgICAke2llLnJlc291cmNlLnBhdGguc3BsaXQoIi8iKS5wb3AoKX0gKCR7aWUuc3RhcnRMaW5lTnVtYmVyfSwgJHtpZS5zdGFydENvbHVtbn0pCiAgICAgICAgICAgICAgICAke2llLnNvdXJjZT9gWyR7aWUuc291cmNlfV1gOiIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGApfQogICAgICA8L2Rpdj4KICAgIGB9YXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0oaWUpe2xldCBzZT1pZS5yZXNvdXJjZS5wYXRoLFRlPXNlLnNwbGl0KCIvIikucG9wKCl8fCIiO3RoaXMub3BlbkZpbGVzLmZpbmQobTE9Pm0xLnBhdGg9PT1zZSk/dGhpcy5hY3RpdmVGaWxlUGF0aD1zZTphd2FpdCB0aGlzLm9wZW5GaWxlKHNlLFRlKSxhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlO2xldCBjdD10aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpO2lmKGN0KXtsZXQgbTE9YXdhaXQgY3QuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTttMS5yZXZlYWxMaW5lSW5DZW50ZXIoaWUuc3RhcnRMaW5lTnVtYmVyKSxtMS5zZXRQb3NpdGlvbih7bGluZU51bWJlcjppZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmllLnN0YXJ0Q29sdW1ufSksbTEuZm9jdXMoKX19c2V0dXBNYXJrZXJMaXN0ZW5lcigpe2xldCBpZT13aW5kb3cubW9uYWNvO2llJiYoaWUuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycyhzZT0+e3RoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKX0pLHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKSl9dXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKXtsZXQgaWU9d2luZG93Lm1vbmFjbztpZighaWUpcmV0dXJuO2xldCBzZT1pZS5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHt9KTt0aGlzLmRpYWdub3N0aWNNYXJrZXJzPXNlLm1hcChUZT0+KHttZXNzYWdlOlRlLm1lc3NhZ2Usc2V2ZXJpdHk6VGUuc2V2ZXJpdHksc3RhcnRMaW5lTnVtYmVyOlRlLnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjpUZS5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOlRlLmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOlRlLmVuZENvbHVtbixzb3VyY2U6VGUuc291cmNlLHJlc291cmNlOntwYXRoOlRlLnJlc291cmNlLnBhdGh9fSkpfWFzeW5jIGhhbmRsZVJ1blByb2Nlc3MoaWUpe2xldCBzZT1pZS5kZXRhaWwsVGU9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpO2lmKCFUZSl7Y29uc29sZS53YXJuKCJUZXJtaW5hbCBjb21wb25lbnQgbm90IGZvdW5kIik7cmV0dXJufXRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCYmKHRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZD0hMSksdGhpcy5hY3RpdmVCb3R0b21QYW5lbD0idGVybWluYWwiLGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsYXdhaXQgVGUuY3JlYXRlUHJvY2Vzc1RhYih7dHlwZTpzZS50eXBlLGxhYmVsOnNlLmxhYmVsLGNvbW1hbmQ6c2UuY29tbWFuZCxhcmdzOnNlLmFyZ3MsbWV0YWRhdGE6c2UubWV0YWRhdGEsc3dpdGNoVG9UYWI6ITB9KX1zZXRGaWxlVHJlZVdpZHRoKGllKXtsZXQgVGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCouNTt0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoPU1hdGgubWF4KDE1MCxNYXRoLm1pbihUZSxpZSkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpfXNldFRlcm1pbmFsSGVpZ2h0KGllKXtsZXQgVGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQqLjc7dGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQ9TWF0aC5tYXgoMTAwLE1hdGgubWluKFRlLGllKSksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSl9cmVzZXRMYXlvdXQoKXt0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoPXRoaXMuZmlsZVRyZWVXaWR0aCx0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodD10aGlzLnRlcm1pbmFsSGVpZ2h0LHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpfXN0YXRpY3tmdChpLGEpfX07cmV0dXJuIEt0PWl9KSgpfSk7dmFyIGt4dD1iKCgpPT57enh0KCk7RGooKX0pO3ZhciBTeHQ9YigoKT0+e0swKCl9KTt2YXIgQ3h0PWIoKCk9PntTdygpfSk7dmFyIF94dD1iKCgpPT57fSk7dmFyIFR4dD1iKCgpPT57aWQoKTtfeHQoKTt3aigpfSk7dmFyIEx4dD1iKCgpPT57JGooKX0pO3ZhciBsZCxRcyx3OTIsJHh0LEF4dD1iKCgpPT57dWUoKTtWZSgpO0swKCk7bGQ9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxRcz1mdW5jdGlvbih0LGUsYSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MixyPTA7cjxlLmxlbmd0aDtyKyspYT1pP2Vbcl0uY2FsbCh0LGEpOmVbcl0uY2FsbCh0KTtyZXR1cm4gaT9hOnZvaWQgMH0sdzkyPXJ0LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCksJHh0PSgoKT0+e2xldCB0PVtwZSgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24iKV0sZSxhPVtdLGkscj14ZSxzLG49W10sbz1bXSxkLGM9W10scD1bXSxsLGY9W10sZz1bXSx5LHY9W10sbT1bXTt2YXIgeD1jbGFzcyBleHRlbmRzIHJ7c3RhdGlje2k9dGhpc31zdGF0aWN7bGV0IE09dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLm1ldGFkYXRhP09iamVjdC5jcmVhdGUocltTeW1ib2wubWV0YWRhdGFdPz9udWxsKTp2b2lkIDA7cz1bSSh7dHlwZTpOdW1iZXJ9KV0sZD1bSSh7dHlwZTpOdW1iZXJ9KV0sbD1bSygpXSx5PVtLKCldLGxkKHRoaXMsbnVsbCxzLHtraW5kOiJhY2Nlc3NvciIsbmFtZToic3BsaXRSYXRpbyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+InNwbGl0UmF0aW8iaW4gUyxnZXQ6Uz0+Uy5zcGxpdFJhdGlvLHNldDooUyxGKT0+e1Muc3BsaXRSYXRpbz1GfX0sbWV0YWRhdGE6TX0sbixvKSxsZCh0aGlzLG51bGwsZCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6Im1pblBhbmVsU2l6ZSIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+Im1pblBhbmVsU2l6ZSJpbiBTLGdldDpTPT5TLm1pblBhbmVsU2l6ZSxzZXQ6KFMsRik9PntTLm1pblBhbmVsU2l6ZT1GfX0sbWV0YWRhdGE6TX0sYyxwKSxsZCh0aGlzLG51bGwsbCx7a2luZDoiYWNjZXNzb3IiLG5hbWU6ImN1cnJlbnRTcGxpdFJhdGlvIixzdGF0aWM6ITEscHJpdmF0ZTohMSxhY2Nlc3M6e2hhczpTPT4iY3VycmVudFNwbGl0UmF0aW8iaW4gUyxnZXQ6Uz0+Uy5jdXJyZW50U3BsaXRSYXRpbyxzZXQ6KFMsRik9PntTLmN1cnJlbnRTcGxpdFJhdGlvPUZ9fSxtZXRhZGF0YTpNfSxmLGcpLGxkKHRoaXMsbnVsbCx5LHtraW5kOiJhY2Nlc3NvciIsbmFtZToiaXNEcmFnZ2luZyIsc3RhdGljOiExLHByaXZhdGU6ITEsYWNjZXNzOntoYXM6Uz0+ImlzRHJhZ2dpbmciaW4gUyxnZXQ6Uz0+Uy5pc0RyYWdnaW5nLHNldDooUyxGKT0+e1MuaXNEcmFnZ2luZz1GfX0sbWV0YWRhdGE6TX0sdixtKSxsZChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpNfSxudWxsLGEpLHg9aT1lLnZhbHVlLE0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6TX0pfXN0YXRpYyBkZW1vPSgpPT53YDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bj48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3duPmA7c3RhdGljIGRlbW9Hcm91cHM9WyJXb3Jrc3BhY2UiXTtzdGF0aWMgc3R5bGVzPVtDZSxoLmRlZmF1bHRTdHlsZXMsUWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zcGxpdENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIC5lZGl0b3JDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2U1ZTdlYiIsIiMzMDM2M2QiKX07CiAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5yZXNpemVIYW5kbGU6aG92ZXIsCiAgICAgIC5yZXNpemVIYW5kbGUuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7aC5iZFRoZW1lKCIjM2I4MmY2IiwiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiM5Y2EzYWYiLCIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIC5yZXNpemVIYW5kbGU6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplSGFuZGxlLmRyYWdnaW5nOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtoLmJkVGhlbWUoIiNmZmZmZmYiLCIjZmZmZmZmIil9OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5vdXRsZXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2guYmRUaGVtZSgiI2ZmZmZmZiIsIiMwZDExMTciKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMjQyOTJmIiwiI2U2ZWRmMyIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnTm90byBTYW5zJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAuc3BsaXRDb250YWluZXIuZHJhZ2dpbmcgewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvckNvbnRhaW5lciwKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5vdXRsZXRDb250YWluZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgXTsjZT1Rcyh0aGlzLG4sNTApO2dldCBzcGxpdFJhdGlvKCl7cmV0dXJuIHRoaXMuI2V9c2V0IHNwbGl0UmF0aW8oTSl7dGhpcy4jZT1NfSN0PShRcyh0aGlzLG8pLFFzKHRoaXMsYywxMCkpO2dldCBtaW5QYW5lbFNpemUoKXtyZXR1cm4gdGhpcy4jdH1zZXQgbWluUGFuZWxTaXplKE0pe3RoaXMuI3Q9TX0jYT0oUXModGhpcyxwKSxRcyh0aGlzLGYsNTApKTtnZXQgY3VycmVudFNwbGl0UmF0aW8oKXtyZXR1cm4gdGhpcy4jYX1zZXQgY3VycmVudFNwbGl0UmF0aW8oTSl7dGhpcy4jYT1NfSNpPShRcyh0aGlzLGcpLFFzKHRoaXMsdiwhMSkpO2dldCBpc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuI2l9c2V0IGlzRHJhZ2dpbmcoTSl7dGhpcy4jaT1NfXJlc2l6ZUhhbmRsZUVsZW1lbnQ9UXModGhpcyxtKTtjb250YWluZXJFbGVtZW50O3JlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJzcGxpdENvbnRhaW5lciAke3RoaXMuaXNEcmFnZ2luZz8iZHJhZ2dpbmciOiIifSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yQ29udGFpbmVyIiBzdHlsZT0id2lkdGg6ICR7dGhpcy5jdXJyZW50U3BsaXRSYXRpb30lIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmxhbmd1YWdlPSR7Im1hcmtkb3duIn0KICAgICAgICAgICAgLmNvbnRlbnQ9JHtgIyBhIHRlc3QgY29udGVudAoKVGhpcyBpcyB0ZXN0IGNvbnRlbnQgdGhhdCBpcyBvZiBsb25nZXIgZm9ybSBhbiBob3BlZnVsbHkgc3RhcnRzIHRvIHdyYXAgd2hlbiBJIG5lZWQgaXQuIEFuZCB5ZXMsIGl0IGRvZXMgcGVyZmVjdGx5LiBuaWNlLgoKVGVzdCB8IEhlbGxvCi0tLSB8IC0tLQpZZWFoIHwgU28gZ29vZAoKVGhpcyBpcyByZWFsIGFzc2V0IEkgdGhpbmsuIFdoeSB3b3VsZCB3ZSB3YW50IHRvIGxlYXZlIHRoYXQgb24gdGhlIHRhYmxlPyBDYW4geW91IHRlbGwgbXkgdGhhdD8KCldoeSBhcmUgd2UgaGVyZT8KCkRvIHlvdSBrbm93PwoKPiBub3RlOgpUaGVyZSBpcyBzb21ldGhpbmcgZ29pbmcgb24uCgpcYFxgXGB0eXBlc2NyaXB0CmNvbnN0IGhlbGxvID0gJ3llcycKXGBcYFxgCmB9CiAgICAgICAgICAgIHdvcmRXcmFwPSJib3VuZGVkIgogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJyZXNpemVIYW5kbGUgJHt0aGlzLmlzRHJhZ2dpbmc/ImRyYWdnaW5nIjoiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVNb3VzZURvd259CiAgICAgICAgPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im91dGxldENvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAkezEwMC10aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoTSl7YXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKE0pLHRoaXMuY3VycmVudFNwbGl0UmF0aW89dGhpcy5zcGxpdFJhdGlvLHRoaXMuY29udGFpbmVyRWxlbWVudD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNwbGl0Q29udGFpbmVyIiksdGhpcy5yZXNpemVIYW5kbGVFbGVtZW50PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIucmVzaXplSGFuZGxlIik7bGV0IFM9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpLEY9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iiksaz1hd2FpdCBuZXcgcnQucGx1Z2lucy5zbWFydG1hcmtkb3duLlNtYXJ0TWFya2Rvd24oKS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bigibG9hZGluZy4uLiIpO1MuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIE49Pnthd2FpdCBrLnVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhOKTtsZXQgTD1rLmh0bWw7Ri51cGRhdGVIdG1sVGV4dChMKX0pfWhhbmRsZU1vdXNlRG93bj1NPT57TS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNEcmFnZ2luZz0hMCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXApfTtoYW5kbGVNb3VzZU1vdmU9TT0+e2lmKCF0aGlzLmlzRHJhZ2dpbmd8fCF0aGlzLmNvbnRhaW5lckVsZW1lbnQpcmV0dXJuO2xldCBTPXRoaXMuY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxGPVMud2lkdGgsaz0oTS5jbGllbnRYLVMubGVmdCkvRioxMDA7az1NYXRoLm1heCh0aGlzLm1pblBhbmVsU2l6ZSxNYXRoLm1pbigxMDAtdGhpcy5taW5QYW5lbFNpemUsaykpLHRoaXMuY3VycmVudFNwbGl0UmF0aW89a307aGFuZGxlTW91c2VVcD0oKT0+e3RoaXMuaXNEcmFnZ2luZz0hMSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXApLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKSYmd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSl9O2FzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7YXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmhhbmRsZU1vdXNlVXApfXNldFNwbGl0UmF0aW8oTSl7dGhpcy5jdXJyZW50U3BsaXRSYXRpbz1NYXRoLm1heCh0aGlzLm1pblBhbmVsU2l6ZSxNYXRoLm1pbigxMDAtdGhpcy5taW5QYW5lbFNpemUsTSkpfXJlc2V0U3BsaXRSYXRpbygpe3RoaXMuY3VycmVudFNwbGl0UmF0aW89dGhpcy5zcGxpdFJhdGlvfXN0YXRpY3tRcyhpLGEpfX07cmV0dXJuIHg9aX0pKCl9KTt2YXIgRHh0PWIoKCk9PntBeHQoKX0pO3ZhciBFeHQsUHh0PWIoKCk9Pnt1ZSgpO3gxKCk7ZzIoKTtFeHQ9KCk9PndgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7UWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkhlYWRpbmcgTGV2ZWwgMTwvaDE+CiAgICAgICAgICAgIDxoMj5IZWFkaW5nIExldmVsIDI8L2gyPgogICAgICAgICAgICA8aDM+SGVhZGluZyBMZXZlbCAzPC9oMz4KICAgICAgICAgICAgPGg0PkhlYWRpbmcgTGV2ZWwgNDwvaDQ+CiAgICAgICAgICAgIDxoNT5IZWFkaW5nIExldmVsIDU8L2g1PgogICAgICAgICAgICA8aDY+SGVhZGluZyBMZXZlbCA2PC9oNj4KICAgICAgICAgIGApfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMjogVGV4dCBGb3JtYXR0aW5nIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJUZXh0IEZvcm1hdHRpbmcifQogICAgICAgIC5zdWJ0aXRsZT0keyJCb2xkLCBpdGFsaWMsIGxpbmtzLCBjb2RlLCBhbmQga2V5Ym9hcmQgaW5wdXQifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDM6IExpc3RzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJMaXN0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7Ik9yZGVyZWQsIHVub3JkZXJlZCwgYW5kIHRhc2sgbGlzdHMifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgzPlVub3JkZXJlZCBMaXN0PC9oMz4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5GaXJzdCBpdGVtPC9saT4KICAgICAgICAgICAgICA8bGk+U2Vjb25kIGl0ZW0KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDE8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+TmVzdGVkIGl0ZW0gMjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRoaXJkIGl0ZW08L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPGgzPk9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDxvbD4KICAgICAgICAgICAgICA8bGk+U3RlcCBvbmU8L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHR3bzwvbGk+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgdGhyZWU8L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPGgzPlRhc2sgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQgZGlzYWJsZWQ+IENvbXBsZXRlZCB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBQZW5kaW5nIHRhc2s8L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0idGFzay1saXN0LWl0ZW0iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ+IEFub3RoZXIgdGFzazwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57YXdhaXQgdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpPy51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxwPklubGluZSBjb2RlOiA8Y29kZT5jb25zdCBncmVldGluZyA9ICJIZWxsbywgV29ybGQhIjs8L2NvZGU+PC9wPgoKICAgICAgICAgICAgPGgzPlR5cGVTY3JpcHQgRXhhbXBsZTwvaDM+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW1wb3J0PC9zcGFuPiB7IGh0bWwsIGNzcyB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW50ZXJmYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+SVVzZXI8L3NwYW4+IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5uYW1lPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj47CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+ZW1haWw8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5hZ2U8L3NwYW4+PzogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPm51bWJlcjwvc3Bhbj47Cn0KCjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+Z2V0VXNlcjwvc3Bhbj4gPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hc3luYzwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmlkPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj4pOiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+UHJvbWlzZTwvc3Bhbj4mbHQ7SVVzZXImZ3Q7ID0mZ3Q7IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5jb25zdDwvc3Bhbj4gcmVzcG9uc2UgPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hd2FpdDwvc3Bhbj4gZmV0Y2goXGAvYXBpL3VzZXJzL1wke2lkfVxgKTsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5yZXR1cm48L3NwYW4+IHJlc3BvbnNlLmpzb24oKTsKfTs8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8aDM+SlNPTiBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT57CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+Im5hbWUiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iZGVlcy1jYXRhbG9nIjwvc3Bhbj4sCiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+InZlcnNpb24iPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iMy4wLjAiPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4iZGVwZW5kZW5jaWVzIjwvc3Bhbj46IHsKICAgIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iXjIuMC4wIjwvc3Bhbj4KICB9Cn08L2NvZGU+PC9wcmU+CiAgICAgICAgICBgKX19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDU6IFRhYmxlcyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGFibGVzIn0KICAgICAgICAuc3VidGl0bGU9JHsiU3R5bGVkIHRhYmxlcyB3aXRoIGFsdGVybmF0aW5nIHJvd3MifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA2OiBCbG9ja3F1b3RlcyAmIEFsZXJ0cyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiQmxvY2txdW90ZXMgJiBBbGVydHMifQogICAgICAgIC5zdWJ0aXRsZT0keyJRdW90ZXMgYW5kIEdpdEh1Yi1zdHlsZSBhbGVydHMifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIHQ9Pnthd2FpdCB0LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHN0YW5kYXJkIGJsb2NrcXVvdGUuIEl0J3MgZ3JlYXQgZm9yIGhpZ2hsaWdodGluZyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gb3IgcXVvdGVzIGZyb20gb3RoZXIgc291cmNlcy48L3A+CiAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LW5vdGUiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG5vdGUgdG8gZHJhdyBhdHRlbnRpb24gdG8gaW1wb3J0YW50IGRldGFpbHMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXRpcCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IEhlcmUncyBhIGhlbHBmdWwgdGlwIHRvIGltcHJvdmUgeW91ciB3b3JrZmxvdy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtaW1wb3J0YW50Ij4KICAgICAgICAgICAgICA8cD48c3Ryb25nPkltcG9ydGFudDo8L3N0cm9uZz4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0b3BpYy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtd2FybmluZyI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBCZSBjYXJlZnVsIHdoZW4gcGVyZm9ybWluZyB0aGlzIGFjdGlvbi48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtY2F1dGlvbiI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5DYXV0aW9uOjwvc3Ryb25nPiBUaGlzIGFjdGlvbiBtYXkgaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyB0PT57YXdhaXQgdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpPy51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMT5HZXR0aW5nIFN0YXJ0ZWQgR3VpZGU8L2gxPgogICAgICAgICAgICA8cD5XZWxjb21lIHRvIHRoZSA8c3Ryb25nPmRlZXMtY2F0YWxvZzwvc3Ryb25nPiBjb21wb25lbnQgbGlicmFyeS4gVGhpcyBndWlkZSB3aWxsIGhlbHAgeW91IGdldCB1cCBhbmQgcnVubmluZyBxdWlja2x5LjwvcD4KCiAgICAgICAgICAgIDxoMj5JbnN0YWxsYXRpb248L2gyPgogICAgICAgICAgICA8cD5JbnN0YWxsIHRoZSBwYWNrYWdlIHVzaW5nIHlvdXIgcHJlZmVycmVkIHBhY2thZ2UgbWFuYWdlcjo8L3A+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBwbnBtIChyZWNvbW1lbmRlZCk8L3NwYW4+CnBucG0gYWRkIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBucG08L3NwYW4+Cm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMj5CYXNpYyBVc2FnZTwvaDI+CiAgICAgICAgICAgIDxwPkltcG9ydCBhbmQgdXNlIGNvbXBvbmVudHMgaW4geW91ciBUeXBlU2NyaXB0IGZpbGVzOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgRGVlc0J1dHRvbiB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+Ly8gVXNlIGluIHlvdXIgdGVtcGxhdGVzPC9zcGFuPgpodG1sXGAmbHQ7ZGVlcy1idXR0b24mZ3Q7Q2xpY2sgbWUmbHQ7L2RlZXMtYnV0dG9uJmd0O1xgPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtdGlwIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpcDo8L3N0cm9uZz4gQ2hlY2sgdGhlIGRlbW8gc2hvd2Nhc2UgZm9yIGxpdmUgZXhhbXBsZXMgb2YgYWxsIGNvbXBvbmVudHMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxoMj5BdmFpbGFibGUgQ29tcG9uZW50czwvaDI+CiAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0aD5Db21wb25lbnQ8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtYnV0dG9uPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5QcmltYXJ5IGJ1dHRvbiBjb21wb25lbnQ8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtaW5wdXQtdGV4dDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+VGV4dCBpbnB1dCBmaWVsZDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy10YWJsZTwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+RGF0YSB0YWJsZSB3aXRoIHNvcnRpbmc8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtbW9kYWw8L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPk1vZGFsIGRpYWxvZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICA8aDI+TmV4dCBTdGVwczwvaDI+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+RXhwbG9yZSB0aGUgPGEgaHJlZj0iIyI+Y29tcG9uZW50IGRvY3VtZW50YXRpb248L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Q2hlY2sgb3V0IHRoZSA8YSBocmVmPSIjIj50aGVtaW5nIGd1aWRlPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpPkpvaW4gb3VyIDxhIGhyZWY9IiMiPmNvbW11bml0eSBEaXNjb3JkPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICA8cD4iVGhlIGJlc3QgY29tcG9uZW50IGxpYnJhcnkgaXMgb25lIHRoYXQgZ2V0cyBvdXQgb2YgeW91ciB3YXkuIiBcdTIwMTQgRGVzaWduIFN5c3RlbXMgVGVhbTwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgICAgYCl9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYH0pO3ZhciB1V3QsZld0LEl4dCxOeHQ9YigoKT0+e3VlKCk7VmUoKTtQeHQoKTt1V3Q9ZnVuY3Rpb24odCxlLGEsaSxyLHMpe2Z1bmN0aW9uIG4oeCl7aWYoeCE9PXZvaWQgMCYmdHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTtyZXR1cm4geH1mb3IodmFyIG89aS5raW5kLGQ9bz09PSJnZXR0ZXIiPyJnZXQiOm89PT0ic2V0dGVyIj8ic2V0IjoidmFsdWUiLGM9IWUmJnQ/aS5zdGF0aWM/dDp0LnByb3RvdHlwZTpudWxsLHA9ZXx8KGM/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGkubmFtZSk6e30pLGwsZj0hMSxnPWEubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PXt9O2Zvcih2YXIgdiBpbiBpKXlbdl09dj09PSJhY2Nlc3MiP3t9Omlbdl07Zm9yKHZhciB2IGluIGkuYWNjZXNzKXkuYWNjZXNzW3ZdPWkuYWNjZXNzW3ZdO3kuYWRkSW5pdGlhbGl6ZXI9ZnVuY3Rpb24oeCl7aWYoZil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTtzLnB1c2gobih4fHxudWxsKSl9O3ZhciBtPSgwLGFbZ10pKG89PT0iYWNjZXNzb3IiP3tnZXQ6cC5nZXQsc2V0OnAuc2V0fTpwW2RdLHkpO2lmKG89PT0iYWNjZXNzb3IiKXtpZihtPT09dm9pZCAwKWNvbnRpbnVlO2lmKG09PT1udWxsfHx0eXBlb2YgbSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7KGw9bihtLmdldCkpJiYocC5nZXQ9bCksKGw9bihtLnNldCkpJiYocC5zZXQ9bCksKGw9bihtLmluaXQpKSYmci51bnNoaWZ0KGwpfWVsc2UobD1uKG0pKSYmKG89PT0iZmllbGQiP3IudW5zaGlmdChsKTpwW2RdPWwpfWMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGkubmFtZSxwKSxmPSEwfSxmV3Q9ZnVuY3Rpb24odCxlLGEpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjIscj0wO3I8ZS5sZW5ndGg7cisrKWE9aT9lW3JdLmNhbGwodCxhKTplW3JdLmNhbGwodCk7cmV0dXJuIGk/YTp2b2lkIDB9LEl4dD0oKCk9PntsZXQgdD1bcGUoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0IildLGUsYT1bXSxpLHI9eGU7dmFyIHM9Y2xhc3MgZXh0ZW5kcyBye3N0YXRpY3tpPXRoaXN9c3RhdGlje2xldCBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5tZXRhZGF0YT9PYmplY3QuY3JlYXRlKHJbU3ltYm9sLm1ldGFkYXRhXT8/bnVsbCk6dm9pZCAwO3VXdChudWxsLGU9e3ZhbHVlOml9LHQse2tpbmQ6ImNsYXNzIixuYW1lOmkubmFtZSxtZXRhZGF0YTpufSxudWxsLGEpLHM9aT1lLnZhbHVlLG4mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC5tZXRhZGF0YSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfXN0YXRpYyBkZW1vPUV4dDtzdGF0aWMgZGVtb0dyb3Vwcz1bIldvcmtzcGFjZSJdO3N0YXRpYyBzdHlsZXM9W0NlLGguZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMjQyOTJmIiwiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgLm91dGxldCB7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAvKiBIZWFkaW5ncyAqLwogICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxZjIzMjgiLCIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNlbTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxLjI1ZW07CiAgICAgIH0KCiAgICAgIGg0IHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgfQoKICAgICAgaDUgewogICAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgICAgfQoKICAgICAgaDYgewogICAgICAgIGZvbnQtc2l6ZTogMC44NWVtOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzY1NmQ3NiIsIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMwOTY5ZGEiLCIjNThhNmZmIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0cm9uZyBhbmQgZW1waGFzaXMgKi8KICAgICAgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzFmMjMyOCIsIiNmMGY2ZmMiKX07CiAgICAgIH0KCiAgICAgIGVtIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC8qIExpc3RzICovCiAgICAgIHVsLCBvbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMmVtOwogICAgICB9CgogICAgICBsaSB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICBsaSArIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIHVsIHVsLCB1bCBvbCwgb2wgdWwsIG9sIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIEJsb2NrcXVvdGVzICovCiAgICAgIGJsb2NrcXVvdGUgewogICAgICAgIG1hcmdpbjogMCAwIDE2cHggMDsKICAgICAgICBwYWRkaW5nOiAwIDFlbTsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2NTZkNzYiLCIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtoLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBibG9ja3F1b3RlID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICBibG9ja3F1b3RlID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIElubGluZSBjb2RlICovCiAgICAgIGNvZGUgewogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoInJnYmEoMTc1LCAxODQsIDE5MywgMC4yKSIsInJnYmEoMTEwLCAxMTgsIDEyOSwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlczsKICAgICAgfQoKICAgICAgLyogQ29kZSBibG9ja3MgKi8KICAgICAgcHJlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICBsaW5lLWhlaWdodDogMS40NTsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzFmMjMyOCIsIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2guYmRUaGVtZSgiI2QxZDllMCIsIiMzMDM2M2QiKX07CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMWYyMzI4IiwiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aC5iZFRoZW1lKCIjZmZmZmZmIiwiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtoLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMjEyNjJkIil9OwogICAgICB9CgogICAgICB0YWJsZSB0cjpudGgtY2hpbGQoMm4pIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2guYmRUaGVtZSgiI2Y2ZjhmYSIsIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC8qIEhvcml6b250YWwgcnVsZXMgKi8KICAgICAgaHIgewogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAyNHB4IDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiMxZjIzMjgiLCIjZTZlZGYzIil9OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoIiNmNmY4ZmEiLCIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZDFkOWUwIiwiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtoLmJkVGhlbWUoIiNkMWQ5ZTAiLCIjMzAzNjNkIil9OwogICAgICB9CgogICAgICAvKiBGb290bm90ZXMgKi8KICAgICAgLmZvb3Rub3RlcyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzY1NmQ3NiIsIiM4Yjk0OWUiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7aC5iZFRoZW1lKCIjZDFkOWUwIiwiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzA5NjlkYSIsIiM1OGE2ZmYiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoInJnYmEoOSwgMTA1LCAyMTgsIDAuMSkiLCJyZ2JhKDU2LCAxMzksIDI1MywgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LXdhcm5pbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtoLmJkVGhlbWUoIiNiZjg3MDAiLCIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aC5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwicmdiYSgxODcsIDEyOCwgOSwgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiIzgyNTBkZiIsIiNhMzcxZjciKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoInJnYmEoMTMwLCA4MCwgMjIzLCAwLjEpIiwicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2guYmRUaGVtZSgiI2NmMjIyZSIsIiNmODUxNDkiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtoLmJkVGhlbWUoInJnYmEoMjA3LCAzNCwgNDYsIDAuMSkiLCJyZ2JhKDI0OCwgODEsIDczLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtdGlwIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7aC5iZFRoZW1lKCIjMWE3ZjM3IiwiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2guYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsInJnYmEoNDYsIDE2MCwgNjcsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGNvZGUgYmxvY2tzICovCiAgICAgIC5obGpzLWNvbW1lbnQsCiAgICAgIC5obGpzLXF1b3RlIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiM2YTczN2QiLCIjOGI5NDllIil9OwogICAgICB9CgogICAgICAuaGxqcy1rZXl3b3JkLAogICAgICAuaGxqcy1zZWxlY3Rvci10YWcsCiAgICAgIC5obGpzLWFkZGl0aW9uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNkNzNhNDkiLCIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzAzMmY2MiIsIiNhNWQ2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy1zZWN0aW9uLAogICAgICAuaGxqcy1uYW1lLAogICAgICAuaGxqcy1zZWxlY3Rvci1pZCwKICAgICAgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke2guYmRUaGVtZSgiIzZmNDJjMSIsIiNkMmE4ZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWF0dHJpYnV0ZSwKICAgICAgLmhsanMtYXR0ciwKICAgICAgLmhsanMtdmFyaWFibGUsCiAgICAgIC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLAogICAgICAuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtdHlwZSB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjMDA1Y2M1IiwiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7aC5iZFRoZW1lKCIjZTM2MjA5IiwiI2ZmYTY1NyIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYnVpbHRfaW4sCiAgICAgIC5obGpzLWRlbGV0aW9uIHsKICAgICAgICBjb2xvcjogJHtoLmJkVGhlbWUoIiNiMzFkMjgiLCIjZmZhMTk4Iil9OwogICAgICB9CgogICAgICAuaGxqcy1mb3JtdWxhIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2guYmRUaGVtZSgiI2Y2ZjhmYSIsIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGBdO291dGxldDtyZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ib3V0bGV0Ij4KICAgICAgICA8aDE+TWFya2Rvd24gUHJldmlldzwvaDE+CiAgICAgICAgPHA+Q29udGVudCB3aWxsIGFwcGVhciBoZXJlIHdoZW4gbWFya2Rvd24gaXMgcGFyc2VkLjwvcD4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZChuKXthd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQobiksdGhpcy5vdXRsZXQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKX1hc3luYyB1cGRhdGVIdG1sVGV4dChuKXthd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLHRoaXMub3V0bGV0fHwodGhpcy5vdXRsZXQ9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKSksdGhpcy5vdXRsZXQuaW5uZXJIVE1MPW59c3RhdGlje2ZXdChpLGEpfX07cmV0dXJuIHM9aX0pKCl9KTt2YXIgRnh0PWIoKCk9PntOeHQoKX0pO3ZhciBPeHQ9YigoKT0+e0FqKCl9KTt2YXIgUnh0PWIoKCk9PntFaigpfSk7dmFyIEJ4dD1iKCgpPT57a3h0KCk7U3h0KCk7Q3h0KCk7VHh0KCk7THh0KCk7RHh0KCk7Rnh0KCk7T3h0KCk7Unh0KCl9KTt2YXIgSHh0PWIoKCk9Pnt9KTt2YXIgcXh0PWIoKCk9PntIeHQoKX0pO3ZhciBWeHQ9YigoKT0+e3VlKCl9KTt2YXIganh0PWIoKCk9PntWeHQoKX0pO3ZhciBVeHQ9YigoKT0+e21pKCk7VmUoKTtfZnQoKTtPZnQoKTtKZnQoKTtwbXQoKTtGbXQoKTtCbXQoKTtaZ3QoKTtPYnQoKTtadnQoKTtyeXQoKTt6dygpO2V4dCgpO2J4dCgpO0J4dCgpO3F4dCgpO2p4dCgpfSk7dmFyIFd4dCxHeHQ9YigoKT0+e1d4dD17bmFtZToiQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nIix2ZXJzaW9uOiIzLjQzLjMiLGRlc2NyaXB0aW9uOiJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIn19KTt2YXIgbHI9e307V2UobHIse0NhbnZhc1Bvb2w6KCk9PkhsLERlZXNBY3Rpb25iYXI6KCk9PmhtdCxEZWVzQXBwdWk6KCk9PmdmdCxEZWVzQXBwdWlBY3Rpdml0eWxvZzooKT0+Zzl0LERlZXNBcHB1aUJhcjooKT0+QTl0LERlZXNBcHB1aUJvdHRvbWJhcjooKT0+STl0LERlZXNBcHB1aU1haW5jb250ZW50OigpPT5tZnQsRGVlc0FwcHVpTWFpbm1lbnU6KCk9PmxmdCxEZWVzQXBwdWlQcm9maWxlRHJvcGRvd246KCk9PiQ5dCxEZWVzQXBwdWlTZWNvbmRhcnltZW51OigpPT5wZnQsRGVlc0FwcHVpVGFiczooKT0+ZmZ0LERlZXNBdWRpb1ZpZXdlcjooKT0+VWJ0LERlZXNCYWRnZTooKT0+Ym10LERlZXNCdXR0b246KCk9PmFmdCxEZWVzQnV0dG9uRXhpdDooKT0+JGZ0LERlZXNCdXR0b25Hcm91cDooKT0+SWZ0LERlZXNDaGFydEFyZWE6KCk9PldmdCxEZWVzQ2hhcnRMb2c6KCk9PlhmdCxEZWVzQ2hpcHM6KCk9PlFndCxEZWVzQ29udGV4dG1lbnU6KCk9Pld0LERlZXNEYXNoYm9hcmRncmlkOigpPT5iYnQsRGVlc0RhdGF2aWV3Q29kZWJveDooKT0+YW10LERlZXNEYXRhdmlld1N0YXR1c29iamVjdDooKT0+b210LERlZXNGb3JtOigpPT5KdXQsRGVlc0Zvcm1TdWJtaXQ6KCk9Pk94LERlZXNGb3JtYXR0aW5nTWVudTooKT0+c3csRGVlc0hlYWRpbmc6KCk9PnpidCxEZWVzSGludDooKT0+em10LERlZXNJY29uOigpPT5kOXQsRGVlc0ltYWdlVmlld2VyOigpPT5IYnQsRGVlc0lucHV0QmFzZTooKT0+WGUsRGVlc0lucHV0Q2hlY2tib3g6KCk9PlR4LERlZXNJbnB1dENvZGU6KCk9PkR4LERlZXNJbnB1dERhdGVwaWNrZXI6KCk9PkV4LERlZXNJbnB1dERyb3Bkb3duOigpPT5SeCxEZWVzSW5wdXRGaWxldXBsb2FkOigpPT5IeCxEZWVzSW5wdXRJYmFuOigpPT5qeCxEZWVzSW5wdXRMaXN0OigpPT5ZbXQsRGVlc0lucHV0TXVsdGl0b2dnbGU6KCk9PlV4LERlZXNJbnB1dFBob25lOigpPT5HeCxEZWVzSW5wdXRQcm9maWxlUGljdHVyZTooKT0+WWd0LERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3I6KCk9Pkl4LERlZXNJbnB1dFJhZGlvZ3JvdXA6KCk9Pk54LERlZXNJbnB1dFJpY2h0ZXh0OigpPT5vZ3QsRGVlc0lucHV0VGFnczooKT0+Zmd0LERlZXNJbnB1dFRleHQ6KCk9PlB4LERlZXNJbnB1dFRvZ2dsZTooKT0+WXgsRGVlc0lucHV0VHlwZWxpc3Q6KCk9Plp4LERlZXNJbnB1dFd5c2l3eWc6KCk9PlBWLERlZXNMYWJlbDooKT0+WDl0LERlZXNNb2JpbGVuYXZpZ2F0aW9uOigpPT5rZnQsRGVlc01vZGFsOigpPT5sMSxEZWVzUGFnaW5hdGlvbjooKT0+TGJ0LERlZXNQYW5lbDooKT0+Qjl0LERlZXNQZGY6KCk9PmN2dCxEZWVzUGRmUHJldmlldzooKT0+Z3Z0LERlZXNQZGZWaWV3ZXI6KCk9PnR2dCxEZWVzUHJldmlldzooKT0+c3Z0LERlZXNQcm9ncmVzc2JhcjooKT0+TG10LERlZXNTZWFyY2hiYXI6KCk9PnN4dCxEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDooKT0+bHV0LERlZXNTaW1wbGVBcHBEYXNoOigpPT5VeXQsRGVlc1NpbXBsZUxvZ2luOigpPT5LeXQsRGVlc1NsYXNoTWVudTooKT0+aXcsRGVlc1NwZWVjaGJ1YmJsZTooKT0+ZXl0LERlZXNTcGlubmVyOigpPT5BbXQsRGVlc1N0YXRzR3JpZDooKT0+aWZ0LERlZXNTdGVwcGVyOigpPT5JYnQsRGVlc1RhYmxlOigpPT5LeCxEZWVzVGhlbWU6KCk9PmR4dCxEZWVzVGlsZUF1ZGlvOigpPT4kdnQsRGVlc1RpbGVCYXNlOigpPT55YSxEZWVzVGlsZUZvbGRlcjooKT0+V3Z0LERlZXNUaWxlSW1hZ2U6KCk9PlN2dCxEZWVzVGlsZU5vdGU6KCk9PkJ2dCxEZWVzVGlsZVBkZjooKT0+Y3csRGVlc1RpbGVWaWRlbzooKT0+SXZ0LERlZXNUb2FzdDooKT0+QnQsRGVlc1VwZGF0ZXI6KCk9Pmt3LERlZXNWaWRlb1ZpZXdlcjooKT0+WmJ0LERlZXNXaW5kb3dDb250cm9sczooKT0+TDl0LERlZXNXaW5kb3dMYXllcjooKT0+Z2ksRGVlc1dvcmtzcGFjZTooKT0+TXh0LERlZXNXb3Jrc3BhY2VCb3R0b21iYXI6KCk9Pnh4dCxEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjooKT0+d3h0LERlZXNXb3Jrc3BhY2VGaWxldHJlZTooKT0+dnh0LERlZXNXb3Jrc3BhY2VNYXJrZG93bjooKT0+JHh0LERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDooKT0+SXh0LERlZXNXb3Jrc3BhY2VNb25hY286KCk9Pks5dCxEZWVzV29ya3NwYWNlVGVybWluYWw6KCk9Pk1qLERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXc6KCk9Pnl4dCxEZWVzV3lzaXd5Z0Jsb2NrOigpPT5IZ3QsUFJPR1JBTU1JTkdfTEFOR1VBR0VTOigpPT4kOCxQZGZNYW5hZ2VyOigpPT5YcixQZXJmb3JtYW5jZU1vbml0b3I6KCk9PnFsLFRlcm1pbmFsVGFiTWFuYWdlcjooKT0+YWQsVHlwZVNjcmlwdEludGVsbGlTZW5zZU1hbmFnZXI6KCk9Pm9kLFZpZXdSZWdpc3RyeTooKT0+UzgsV2ViQ29udGFpbmVyRW52aXJvbm1lbnQ6KCk9PmI0LFd5c2l3eWdCbG9ja09wZXJhdGlvbnM6KCk9PkE4LFd5c2l3eWdCbG9ja3M6KCk9PkQyLFd5c2l3eWdDb252ZXJ0ZXJzOigpPT5NaSxXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyOigpPT5VOCxXeXNpd3lnRm9ybWF0dGluZzooKT0+anMsV3lzaXd5Z0hpc3Rvcnk6KCk9Plc4LFd5c2l3eWdJbnB1dEhhbmRsZXI6KCk9PlY4LFd5c2l3eWdLZXlib2FyZEhhbmRsZXI6KCk9Pmo4LFd5c2l3eWdNb2RhbE1hbmFnZXI6KCk9PnE4LFd5c2l3eWdTZWxlY3Rpb246KCk9PkJlLFd5c2l3eWdTaG9ydGN1dHM6KCk9PlYxLFpJbmRleFJlZ2lzdHJ5OigpPT52Zixjb2xvcnM6KCk9PlkwLGNvbW1pdGluZm86KCk9Pld4dCxjb21wb25lbnRaSW5kZXg6KCk9Pm9IdCxkZWJvdW5jZTooKT0+QVV0LGZvcm1hdEZpbGVTaXplOigpPT5FVXQsZ2V0WkluZGV4OigpPT5uSHQsaWNvbnM6KCk9PlN4LGlzSW5WaWV3cG9ydDooKT0+UFV0LHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVyczooKT0+Tmd0LHRoZW1lRGVmYXVsdFN0eWxlczooKT0+Q2UsdGhlbWVEZWZhdWx0czooKT0+YW8sdGhyb3R0bGU6KCk9PkRVdCx0aWxlQmFzZVN0eWxlczooKT0+ZWEsd3lzaXd5Z1N0eWxlczooKT0+Q1YsekluZGV4TGF5ZXJzOigpPT5yMix6SW5kZXhSZWdpc3RyeTooKT0+aDF9KTt2YXIgWXh0PWIoKCk9PntVeHQoKTt2aSgpO0d4dCgpfSk7dmFyIFh0LGtpPWIoKCk9Pnt1ZSgpO1l4dCgpO1h0PXJ0fSk7dmFyIGNyPWIoKCk9PntUYygpfSk7dmFyIFp4dD1iKCgpPT57fSk7dmFyIFh4dD1iKCgpPT57fSk7dmFyIEt4dD1iKCgpPT57fSk7dmFyIFF4dD1iKCgpPT57fSk7dmFyIEp4dD1iKCgpPT57fSk7dmFyIGV3dD1iKCgpPT57fSk7dmFyIHR3dD17fTt2YXIgZHI9YigoKT0+e1p4dCgpO1h4dCgpO0t4dCgpO1F4dCgpO0p4dCgpO2V3dCgpfSk7dmFyIGF3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIGl3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIHJ3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIHN3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIG53dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIG93dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIGx3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIGN3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIGR3dD1iKCgpPT57Y3IoKTtkcigpfSk7dmFyIHB3dD17fTt2YXIgaHd0PWIoKCk9Pnthd3QoKTtpd3QoKTtyd3QoKTtzd3QoKTtud3QoKTtvd3QoKTtsd3QoKTtjd3QoKTtkd3QoKX0pO3ZhciBDdz1iKCgpPT57Y3IoKTtkcigpO2h3dCgpfSk7dmFyIF93LHRpLEZ0LHh0LFNpLFAyLHV3dCxjZCx0YSxmd3QsbXd0LGd3dCxrbyxUdyxzZjIsYnd0LHZ3dCx5d3QseHd0LHd3dCxNd3Qsend0LGt3dCxTd3QsdzQsQ3d0LG5mMixRcj1iKGFzeW5jKCk9PntraSgpO0N3KCk7X3c9bmV3IFh0LnBsdWdpbnMuc21hcnRzdGF0ZS5TbWFydHN0YXRlLHRpPWF3YWl0IF93LmdldFN0YXRlUGFydCgibG9naW4iLHtpZGVudGl0eTpudWxsLGlzTG9nZ2VkSW46ITF9LCJwZXJzaXN0ZW50IiksRnQ9YXdhaXQgX3cuZ2V0U3RhdGVQYXJ0KCJjb25uZWN0aW9ucyIse2Nvbm5lY3Rpb25zOltdLGFjdGl2ZUNvbm5lY3Rpb25JZDpudWxsfSwic29mdCIpLHh0PWF3YWl0IF93LmdldFN0YXRlUGFydCgiZGF0YSIse3Byb2plY3RzOltdLGdyb3VwczpbXSxzZWNyZXRzOltdLHBpcGVsaW5lczpbXSxwaXBlbGluZUpvYnM6W10sY3VycmVudEpvYkxvZzoiIn0sInNvZnQiKSxTaT1hd2FpdCBfdy5nZXRTdGF0ZVBhcnQoInVpIix7YWN0aXZlVmlldzoib3ZlcnZpZXciLGF1dG9SZWZyZXNoOiEwLHJlZnJlc2hJbnRlcnZhbDozZTR9KSxQMj0oKT0+KHtpZGVudGl0eTp0aS5nZXRTdGF0ZSgpLmlkZW50aXR5fSksdXd0PXRpLmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57dHJ5e2xldCBpPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJhZG1pbkxvZ2luIikuZmlyZSh7dXNlcm5hbWU6ZS51c2VybmFtZSxwYXNzd29yZDplLnBhc3N3b3JkfSk7cmV0dXJue2lkZW50aXR5OmkuaWRlbnRpdHl8fG51bGwsaXNMb2dnZWRJbjohIWkuaWRlbnRpdHl9fWNhdGNoKGEpe3JldHVybiBjb25zb2xlLmVycm9yKCJMb2dpbiBmYWlsZWQ6IixhKSx7aWRlbnRpdHk6bnVsbCxpc0xvZ2dlZEluOiExfX19KSxjZD10aS5jcmVhdGVBY3Rpb24oYXN5bmMgdD0+e2xldCBlPVAyKCk7dHJ5e2UuaWRlbnRpdHkmJmF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJhZG1pbkxvZ291dCIpLmZpcmUoe2lkZW50aXR5OmUuaWRlbnRpdHl9KX1jYXRjaChhKXtjb25zb2xlLmVycm9yKCJMb2dvdXQgZXJyb3I6IixhKX1yZXR1cm57aWRlbnRpdHk6bnVsbCxpc0xvZ2dlZEluOiExfX0pLHRhPUZ0LmNyZWF0ZUFjdGlvbihhc3luYyB0PT57bGV0IGU9UDIoKTt0cnl7bGV0IGk9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImdldENvbm5lY3Rpb25zIikuZmlyZSh7aWRlbnRpdHk6ZS5pZGVudGl0eX0pO3JldHVybnsuLi50LmdldFN0YXRlKCksY29ubmVjdGlvbnM6aS5jb25uZWN0aW9uc319Y2F0Y2goYSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBjb25uZWN0aW9uczoiLGEpLHQuZ2V0U3RhdGUoKX19KSxmd3Q9RnQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXthd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiY3JlYXRlQ29ubmVjdGlvbiIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksLi4uZX0pO2xldCBzPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRDb25uZWN0aW9ucyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHl9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLGNvbm5lY3Rpb25zOnMuY29ubmVjdGlvbnN9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGNvbm5lY3Rpb246IixpKSx0LmdldFN0YXRlKCl9fSksbXd0PUZ0LmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57bGV0IGE9UDIoKTt0cnl7bGV0IHI9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsInRlc3RDb25uZWN0aW9uIikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSxjb25uZWN0aW9uSWQ6ZS5jb25uZWN0aW9uSWR9KSxuPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRDb25uZWN0aW9ucyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHl9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLGNvbm5lY3Rpb25zOm4uY29ubmVjdGlvbnN9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gdGVzdCBjb25uZWN0aW9uOiIsaSksdC5nZXRTdGF0ZSgpfX0pLGd3dD1GdC5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+e2xldCBhPVAyKCk7dHJ5e2F3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJkZWxldGVDb25uZWN0aW9uIikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSxjb25uZWN0aW9uSWQ6ZS5jb25uZWN0aW9uSWR9KTtsZXQgcj10LmdldFN0YXRlKCk7cmV0dXJuey4uLnIsY29ubmVjdGlvbnM6ci5jb25uZWN0aW9ucy5maWx0ZXIocz0+cy5pZCE9PWUuY29ubmVjdGlvbklkKSxhY3RpdmVDb25uZWN0aW9uSWQ6ci5hY3RpdmVDb25uZWN0aW9uSWQ9PT1lLmNvbm5lY3Rpb25JZD9udWxsOnIuYWN0aXZlQ29ubmVjdGlvbklkfX1jYXRjaChpKXtyZXR1cm4gY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBjb25uZWN0aW9uOiIsaSksdC5nZXRTdGF0ZSgpfX0pLGtvPXh0LmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57bGV0IGE9UDIoKTt0cnl7bGV0IHI9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImdldFByb2plY3RzIikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSxjb25uZWN0aW9uSWQ6ZS5jb25uZWN0aW9uSWQsc2VhcmNoOmUuc2VhcmNofSk7cmV0dXJuey4uLnQuZ2V0U3RhdGUoKSxwcm9qZWN0czpyLnByb2plY3RzfX1jYXRjaChpKXtyZXR1cm4gY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIHByb2plY3RzOiIsaSksdC5nZXRTdGF0ZSgpfX0pLFR3PXh0LmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57bGV0IGE9UDIoKTt0cnl7bGV0IHI9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImdldEdyb3VwcyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksY29ubmVjdGlvbklkOmUuY29ubmVjdGlvbklkLHNlYXJjaDplLnNlYXJjaH0pO3JldHVybnsuLi50LmdldFN0YXRlKCksZ3JvdXBzOnIuZ3JvdXBzfX1jYXRjaChpKXtyZXR1cm4gY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIGdyb3VwczoiLGkpLHQuZ2V0U3RhdGUoKX19KSxzZjI9eHQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXtsZXQgcj1hd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiZ2V0U2VjcmV0cyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksY29ubmVjdGlvbklkOmUuY29ubmVjdGlvbklkLHNjb3BlOmUuc2NvcGUsc2NvcGVJZDplLnNjb3BlSWR9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLHNlY3JldHM6ci5zZWNyZXRzfX1jYXRjaChpKXtyZXR1cm4gY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIHNlY3JldHM6IixpKSx0LmdldFN0YXRlKCl9fSksYnd0PXh0LmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57bGV0IGE9UDIoKTt0cnl7bGV0IGk9ZS5zY29wZT9bZS5zY29wZV06WyJwcm9qZWN0IiwiZ3JvdXAiXSxyPWF3YWl0IFByb21pc2UuYWxsKGkubWFwKGFzeW5jIHM9Pihhd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiZ2V0QWxsU2VjcmV0cyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksY29ubmVjdGlvbklkOmUuY29ubmVjdGlvbklkLHNjb3BlOnN9KSkuc2VjcmV0cykpO3JldHVybnsuLi50LmdldFN0YXRlKCksc2VjcmV0czpyLmZsYXQoKX19Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBhbGwgc2VjcmV0czoiLGkpLHQuZ2V0U3RhdGUoKX19KSx2d3Q9eHQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXthd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiY3JlYXRlU2VjcmV0IikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSwuLi5lfSk7bGV0IHM9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImdldFNlY3JldHMiKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LGNvbm5lY3Rpb25JZDplLmNvbm5lY3Rpb25JZCxzY29wZTplLnNjb3BlLHNjb3BlSWQ6ZS5zY29wZUlkfSksbj10LmdldFN0YXRlKCksbz1uLnNlY3JldHMuZmlsdGVyKGQ9PiEoZC5zY29wZUlkPT09ZS5zY29wZUlkJiZkLnNjb3BlPT09ZS5zY29wZSkpO3JldHVybnsuLi5uLHNlY3JldHM6Wy4uLm8sLi4ucy5zZWNyZXRzXX19Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgc2VjcmV0OiIsaSksdC5nZXRTdGF0ZSgpfX0pLHl3dD14dC5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+e2xldCBhPVAyKCk7dHJ5e2F3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJ1cGRhdGVTZWNyZXQiKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LC4uLmV9KTtsZXQgcz1hd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiZ2V0U2VjcmV0cyIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksY29ubmVjdGlvbklkOmUuY29ubmVjdGlvbklkLHNjb3BlOmUuc2NvcGUsc2NvcGVJZDplLnNjb3BlSWR9KSxuPXQuZ2V0U3RhdGUoKSxvPW4uc2VjcmV0cy5maWx0ZXIoZD0+IShkLnNjb3BlSWQ9PT1lLnNjb3BlSWQmJmQuc2NvcGU9PT1lLnNjb3BlKSk7cmV0dXJuey4uLm4sc2VjcmV0czpbLi4ubywuLi5zLnNlY3JldHNdfX1jYXRjaChpKXtyZXR1cm4gY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHVwZGF0ZSBzZWNyZXQ6IixpKSx0LmdldFN0YXRlKCl9fSkseHd0PXh0LmNyZWF0ZUFjdGlvbihhc3luYyh0LGUpPT57bGV0IGE9UDIoKTt0cnl7YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImRlbGV0ZVNlY3JldCIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksLi4uZX0pO2xldCByPXQuZ2V0U3RhdGUoKTtyZXR1cm57Li4ucixzZWNyZXRzOnIuc2VjcmV0cy5maWx0ZXIocz0+IShzLmtleT09PWUua2V5JiZzLnNjb3BlSWQ9PT1lLnNjb3BlSWQmJnMuc2NvcGU9PT1lLnNjb3BlKSl9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIHNlY3JldDoiLGkpLHQuZ2V0U3RhdGUoKX19KSx3d3Q9eHQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXtsZXQgcj1hd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiZ2V0UGlwZWxpbmVzIikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSxjb25uZWN0aW9uSWQ6ZS5jb25uZWN0aW9uSWQscHJvamVjdElkOmUucHJvamVjdElkfSk7cmV0dXJuey4uLnQuZ2V0U3RhdGUoKSxwaXBlbGluZXM6ci5waXBlbGluZXN9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZmV0Y2ggcGlwZWxpbmVzOiIsaSksdC5nZXRTdGF0ZSgpfX0pLE13dD14dC5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+e2xldCBhPVAyKCk7dHJ5e2xldCByPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRQaXBlbGluZUpvYnMiKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LGNvbm5lY3Rpb25JZDplLmNvbm5lY3Rpb25JZCxwcm9qZWN0SWQ6ZS5wcm9qZWN0SWQscGlwZWxpbmVJZDplLnBpcGVsaW5lSWR9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLHBpcGVsaW5lSm9iczpyLmpvYnN9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZmV0Y2ggcGlwZWxpbmUgam9iczoiLGkpLHQuZ2V0U3RhdGUoKX19KSx6d3Q9eHQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXthd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwicmV0cnlQaXBlbGluZSIpLmZpcmUoe2lkZW50aXR5OmEuaWRlbnRpdHksLi4uZX0pO2xldCBzPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRQaXBlbGluZXMiKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LGNvbm5lY3Rpb25JZDplLmNvbm5lY3Rpb25JZCxwcm9qZWN0SWQ6ZS5wcm9qZWN0SWR9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLHBpcGVsaW5lczpzLnBpcGVsaW5lc319Y2F0Y2goaSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZXRyeSBwaXBlbGluZToiLGkpLHQuZ2V0U3RhdGUoKX19KSxrd3Q9eHQuY3JlYXRlQWN0aW9uKGFzeW5jKHQsZSk9PntsZXQgYT1QMigpO3RyeXthd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiY2FuY2VsUGlwZWxpbmUiKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LC4uLmV9KTtsZXQgcz1hd2FpdCBuZXcgWHQucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwiZ2V0UGlwZWxpbmVzIikuZmlyZSh7aWRlbnRpdHk6YS5pZGVudGl0eSxjb25uZWN0aW9uSWQ6ZS5jb25uZWN0aW9uSWQscHJvamVjdElkOmUucHJvamVjdElkfSk7cmV0dXJuey4uLnQuZ2V0U3RhdGUoKSxwaXBlbGluZXM6cy5waXBlbGluZXN9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY2FuY2VsIHBpcGVsaW5lOiIsaSksdC5nZXRTdGF0ZSgpfX0pLFN3dD14dC5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+e2xldCBhPVAyKCk7dHJ5e2xldCByPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRKb2JMb2ciKS5maXJlKHtpZGVudGl0eTphLmlkZW50aXR5LC4uLmV9KTtyZXR1cm57Li4udC5nZXRTdGF0ZSgpLGN1cnJlbnRKb2JMb2c6ci5sb2d9fWNhdGNoKGkpe3JldHVybiBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZmV0Y2ggam9iIGxvZzoiLGkpLHQuZ2V0U3RhdGUoKX19KSx3ND1TaS5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+KHsuLi50LmdldFN0YXRlKCksYWN0aXZlVmlldzplLnZpZXd9KSksQ3d0PVNpLmNyZWF0ZUFjdGlvbihhc3luYyB0PT57bGV0IGU9dC5nZXRTdGF0ZSgpO3JldHVybnsuLi5lLGF1dG9SZWZyZXNoOiFlLmF1dG9SZWZyZXNofX0pLG5mMj1TaS5jcmVhdGVBY3Rpb24oYXN5bmModCxlKT0+KHsuLi50LmdldFN0YXRlKCkscmVmcmVzaEludGVydmFsOmUuaW50ZXJ2YWx9KSl9KTt2YXIgYWEsX3d0PWIoKCk9Pnt1ZSgpO2FhPVFgCiAgOmhvc3QgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IGF1dG87CiAgICBtYXgtd2lkdGg6IDEyODBweDsKICAgIHBhZGRpbmc6IDE2cHggMTZweDsKICAgIGNvbG9yOiAjZmZmOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CiAgLnZpZXctdGl0bGUgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgfQogIC52aWV3LWRlc2NyaXB0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiAjOTk5OwogICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICB9CiAgLnRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMTZweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogIH0KYH0pO3ZhciBlbj1iKCgpPT57X3d0KCl9KTt2YXIgRHd0PXt9O1dlKER3dCx7R2l0b3BzVmlld092ZXJ2aWV3OigpPT5hbn0pO3ZhciBUd3QsTHd0LCR3dCxBd3QsdG4sUGosSWosYW4sTmo9Yihhc3luYygpPT57a2koKTthd2FpdCBRcigpO2VuKCk7dWUoKTtBd3Q9W3BlKCJnaXRvcHMtdmlldy1vdmVydmlldyIpXTthbj1jbGFzcyBleHRlbmRzKCR3dD14ZSxMd3Q9W0soKV0sVHd0PVtLKCldLCR3dCl7Y29uc3RydWN0b3IoKXtzdXBlcigpO1N0KHRoaXMsUGosUmUodG4sOCx0aGlzLHtjb25uZWN0aW9uczpbXSxhY3RpdmVDb25uZWN0aW9uSWQ6bnVsbH0pKSxSZSh0biwxMSx0aGlzKTtTdCh0aGlzLElqLFJlKHRuLDEyLHRoaXMse3Byb2plY3RzOltdLGdyb3VwczpbXSxzZWNyZXRzOltdLHBpcGVsaW5lczpbXSxwaXBlbGluZUpvYnM6W10sY3VycmVudEpvYkxvZzoiIn0pKSxSZSh0biwxNSx0aGlzKTtVdCh0aGlzLCJfYXV0b1JlZnJlc2hIYW5kbGVyIik7bGV0IGE9RnQuc2VsZWN0KHI9PnIpLnN1YnNjcmliZShyPT57dGhpcy5jb25uZWN0aW9uc1N0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGEpO2xldCBpPXh0LnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMuZGF0YVN0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGkpLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcj0oKT0+dGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9aGFuZGxlQXV0b1JlZnJlc2goKXtGdC5kaXNwYXRjaEFjdGlvbih0YSxudWxsKX1yZW5kZXIoKXtsZXQgYT10aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubGVuZ3RoLGk9dGhpcy5kYXRhU3RhdGUucHJvamVjdHMubGVuZ3RoLHI9dGhpcy5kYXRhU3RhdGUuZ3JvdXBzLmxlbmd0aCxzPXRoaXMuZGF0YVN0YXRlLnBpcGVsaW5lcy5sZW5ndGgsbj10aGlzLmRhdGFTdGF0ZS5waXBlbGluZXMuZmlsdGVyKGQ9PmQuc3RhdHVzPT09ImZhaWxlZCIpLmxlbmd0aCxvPVt7aWQ6ImNvbm5lY3Rpb25zIix0aXRsZToiQ29ubmVjdGlvbnMiLHZhbHVlOmEsdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6cGx1ZyIsY29sb3I6IiMwMGFjZmYifSx7aWQ6InByb2plY3RzIix0aXRsZToiUHJvamVjdHMiLHZhbHVlOmksdHlwZToibnVtYmVyIixpY29uOiJsdWNpZGU6Zm9sZGVyR2l0MiIsY29sb3I6IiMwMGFjZmYifSx7aWQ6Imdyb3VwcyIsdGl0bGU6Ikdyb3VwcyIsdmFsdWU6cix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTp1c2VycyIsY29sb3I6IiMwMGFjZmYifSx7aWQ6InBpcGVsaW5lcyIsdGl0bGU6IlBpcGVsaW5lcyIsdmFsdWU6cyx0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTpwbGF5Iixjb2xvcjoiIzAwYWNmZiJ9LHtpZDoiZmFpbGVkIix0aXRsZToiRmFpbGVkIFBpcGVsaW5lcyIsdmFsdWU6bix0eXBlOiJudW1iZXIiLGljb246Imx1Y2lkZTp0cmlhbmdsZUFsZXJ0Iixjb2xvcjpuPjA/IiNmZjQ0NDQiOiIjMDBmZjg4In1dO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5PdmVydmlldzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5HaXRPcHMgZGFzaGJvYXJkIC0gbWFuYWdlIHlvdXIgR2l0ZWEgYW5kIEdpdExhYiBpbnN0YW5jZXM8L2Rpdj4KICAgICAgPGRlZXMtc3RhdHNncmlkIC50aWxlcz0ke299PjwvZGVlcy1zdGF0c2dyaWQ+CiAgICBgfX07dG49YzIoJHd0KSxQaj1uZXcgV2Vha01hcCxJaj1uZXcgV2Vha01hcCxkdCh0biw0LCJjb25uZWN0aW9uc1N0YXRlIixMd3QsYW4sUGopLGR0KHRuLDQsImRhdGFTdGF0ZSIsVHd0LGFuLElqKSxhbj1kdCh0biwwLCJHaXRvcHNWaWV3T3ZlcnZpZXciLEF3dCxhbiksVXQoYW4sInN0eWxlcyIsW2guZGVmYXVsdFN0eWxlcyxhYV0pLFJlKHRuLDEsYW4pfSk7dmFyIE53dD17fTtXZShOd3Qse0dpdG9wc1ZpZXdDb25uZWN0aW9uczooKT0+U299KTt2YXIgRXd0LFB3dCxJd3QsWGwsRmosU28sT2o9Yihhc3luYygpPT57a2koKTthd2FpdCBRcigpO2VuKCk7dWUoKTtJd3Q9W3BlKCJnaXRvcHMtdmlldy1jb25uZWN0aW9ucyIpXTtTbz1jbGFzcyBleHRlbmRzKFB3dD14ZSxFd3Q9W0soKV0sUHd0KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7U3QodGhpcyxGaixSZShYbCw4LHRoaXMse2Nvbm5lY3Rpb25zOltdLGFjdGl2ZUNvbm5lY3Rpb25JZDpudWxsfSkpLFJlKFhsLDExLHRoaXMpO1V0KHRoaXMsIl9hdXRvUmVmcmVzaEhhbmRsZXIiKTtsZXQgYT1GdC5zZWxlY3QoaT0+aSkuc3Vic2NyaWJlKGk9Pnt0aGlzLmNvbm5lY3Rpb25zU3RhdGU9aX0pO3RoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goYSksdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyPSgpPT50aGlzLmhhbmRsZUF1dG9SZWZyZXNoKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKX1oYW5kbGVBdXRvUmVmcmVzaCgpe3RoaXMucmVmcmVzaCgpfXJlbmRlcigpe3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5Db25uZWN0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5NYW5hZ2UgeW91ciBHaXRlYSBhbmQgR2l0TGFiIHByb3ZpZGVyIGNvbm5lY3Rpb25zPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5hZGRDb25uZWN0aW9uKCl9PkFkZCBDb25uZWN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PnRoaXMucmVmcmVzaCgpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7IlByb3ZpZGVyIENvbm5lY3Rpb25zIn0KICAgICAgICAuaGVhZGluZzI9JHsiQ29uZmlndXJlIGNvbm5lY3Rpb25zIHRvIEdpdGVhIGFuZCBHaXRMYWIgaW5zdGFuY2VzIn0KICAgICAgICAuZGF0YT0ke3RoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9uc30KICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7YT0+KHtOYW1lOmEubmFtZSxUeXBlOmEucHJvdmlkZXJUeXBlLFVSTDphLmJhc2VVcmwsU3RhdHVzOmEuc3RhdHVzLENyZWF0ZWQ6bmV3IERhdGUoYS5jcmVhdGVkQXQpLnRvTG9jYWxlRGF0ZVN0cmluZygpfSl9CiAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJUZXN0IixpY29uTmFtZToibHVjaWRlOnBsdWciLGFjdGlvbjphc3luYyBhPT57YXdhaXQgRnQuZGlzcGF0Y2hBY3Rpb24obXd0LHtjb25uZWN0aW9uSWQ6YS5pZH0pfX0se25hbWU6IkRlbGV0ZSIsaWNvbk5hbWU6Imx1Y2lkZTp0cmFzaDIiLGFjdGlvbjphc3luYyBhPT57bGV0IGk9YXdhaXQgbHIuRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coe2hlYWRpbmc6IkRlbGV0ZSBDb25uZWN0aW9uIixjb250ZW50OndgPHAgc3R5bGU9ImNvbG9yOiAjZmZmOyI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBjb25uZWN0aW9uICIke2EubmFtZX0iPzwvcD5gLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgcj0+e3IuZGVzdHJveSgpfX0se25hbWU6IkRlbGV0ZSIsYWN0aW9uOmFzeW5jIHI9Pnthd2FpdCBGdC5kaXNwYXRjaEFjdGlvbihnd3Qse2Nvbm5lY3Rpb25JZDphLmlkfSksci5kZXN0cm95KCl9fV19KX19XX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgdGhpcy5yZWZyZXNoKCl9YXN5bmMgcmVmcmVzaCgpe2F3YWl0IEZ0LmRpc3BhdGNoQWN0aW9uKHRhLG51bGwpfWFzeW5jIGFkZENvbm5lY3Rpb24oKXthd2FpdCBsci5EZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzoiQWRkIENvbm5lY3Rpb24iLGNvbnRlbnQ6d2AKICAgICAgICA8c3R5bGU+CiAgICAgICAgICAuZm9ybS1yb3cgeyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJOYW1lIn0gLmtleT0keyJuYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb3ZpZGVyIFR5cGUifQogICAgICAgICAgICAua2V5PSR7InByb3ZpZGVyVHlwZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7W3tvcHRpb246ImdpdGVhIixrZXk6ImdpdGVhIn0se29wdGlvbjoiZ2l0bGFiIixrZXk6ImdpdGxhYiJ9XX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7e29wdGlvbjoiZ2l0ZWEiLGtleToiZ2l0ZWEifX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQmFzZSBVUkwifSAua2V5PSR7ImJhc2VVcmwifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJBUEkgVG9rZW4ifSAua2V5PSR7InRva2VuIn0gdHlwZT0icGFzc3dvcmQiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgYT0+e2EuZGVzdHJveSgpfX0se25hbWU6IkFkZCIsYWN0aW9uOmFzeW5jIGE9PntsZXQgaT1hLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0LCBkZWVzLWlucHV0LWRyb3Bkb3duIikscj17fTtmb3IobGV0IHMgb2YgaSlzLmtleT09PSJwcm92aWRlclR5cGUiP3Jbcy5rZXldPXMuc2VsZWN0ZWRPcHRpb24/LmtleXx8ImdpdGVhIjpyW3Mua2V5XT1zLnZhbHVlfHwiIjthd2FpdCBGdC5kaXNwYXRjaEFjdGlvbihmd3Qse25hbWU6ci5uYW1lLHByb3ZpZGVyVHlwZTpyLnByb3ZpZGVyVHlwZSxiYXNlVXJsOnIuYmFzZVVybCx0b2tlbjpyLnRva2VufSksYS5kZXN0cm95KCl9fV19KX19O1hsPWMyKFB3dCksRmo9bmV3IFdlYWtNYXAsZHQoWGwsNCwiY29ubmVjdGlvbnNTdGF0ZSIsRXd0LFNvLEZqKSxTbz1kdChYbCwwLCJHaXRvcHNWaWV3Q29ubmVjdGlvbnMiLEl3dCxTbyksVXQoU28sInN0eWxlcyIsW2guZGVmYXVsdFN0eWxlcyxhYV0pLFJlKFhsLDEsU28pfSk7dmFyIHF3dD17fTtXZShxd3Qse0dpdG9wc1ZpZXdQcm9qZWN0czooKT0+SnJ9KTt2YXIgRnd0LE93dCxSd3QsQnd0LEh3dCxDaSxSaixCaixIaixKcixxaj1iKGFzeW5jKCk9PntraSgpO2F3YWl0IFFyKCk7ZW4oKTt1ZSgpO0h3dD1bcGUoImdpdG9wcy12aWV3LXByb2plY3RzIildO0pyPWNsYXNzIGV4dGVuZHMoQnd0PXhlLFJ3dD1bSygpXSxPd3Q9W0soKV0sRnd0PVtLKCldLEJ3dCl7Y29uc3RydWN0b3IoKXtzdXBlcigpO1N0KHRoaXMsUmosUmUoQ2ksOCx0aGlzLHtjb25uZWN0aW9uczpbXSxhY3RpdmVDb25uZWN0aW9uSWQ6bnVsbH0pKSxSZShDaSwxMSx0aGlzKTtTdCh0aGlzLEJqLFJlKENpLDEyLHRoaXMse3Byb2plY3RzOltdLGdyb3VwczpbXSxzZWNyZXRzOltdLHBpcGVsaW5lczpbXSxwaXBlbGluZUpvYnM6W10sY3VycmVudEpvYkxvZzoiIn0pKSxSZShDaSwxNSx0aGlzKTtTdCh0aGlzLEhqLFJlKENpLDE2LHRoaXMsIiIpKSxSZShDaSwxOSx0aGlzKTtVdCh0aGlzLCJfYXV0b1JlZnJlc2hIYW5kbGVyIik7bGV0IGE9RnQuc2VsZWN0KHI9PnIpLnN1YnNjcmliZShyPT57dGhpcy5jb25uZWN0aW9uc1N0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGEpO2xldCBpPXh0LnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMuZGF0YVN0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGkpLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcj0oKT0+dGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9aGFuZGxlQXV0b1JlZnJlc2goKXt0aGlzLmxvYWRQcm9qZWN0cygpfXJlbmRlcigpe2xldCBhPXRoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9ucy5tYXAoaT0+KHtvcHRpb246YCR7aS5uYW1lfSAoJHtpLnByb3ZpZGVyVHlwZX0pYCxrZXk6aS5pZH0pKTtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0idmlldy10aXRsZSI+UHJvamVjdHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idmlldy1kZXNjcmlwdGlvbiI+QnJvd3NlIHByb2plY3RzIGZyb20geW91ciBjb25uZWN0ZWQgcHJvdmlkZXJzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiQ29ubmVjdGlvbiJ9CiAgICAgICAgICAub3B0aW9ucz0ke2F9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHthLmZpbmQoaT0+aS5rZXk9PT10aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKXx8YVswXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0ke2k9Pnt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkPWkuZGV0YWlsLmtleSx0aGlzLmxvYWRQcm9qZWN0cygpfX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5sb2FkUHJvamVjdHMoKX0+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGVlcy10YWJsZQogICAgICAgIC5oZWFkaW5nMT0keyJQcm9qZWN0cyJ9CiAgICAgICAgLmhlYWRpbmcyPSR7IlJlcG9zaXRvcmllcyBmcm9tIHRoZSBzZWxlY3RlZCBjb25uZWN0aW9uIn0KICAgICAgICAuZGF0YT0ke3RoaXMuZGF0YVN0YXRlLnByb2plY3RzfQogICAgICAgIC5kaXNwbGF5RnVuY3Rpb249JHtpPT4oe05hbWU6aS5uYW1lLFBhdGg6aS5mdWxsUGF0aCxWaXNpYmlsaXR5OmkudmlzaWJpbGl0eSxCcmFuY2g6aS5kZWZhdWx0QnJhbmNoLCJMYXN0IEFjdGl2aXR5IjppLmxhc3RBY3Rpdml0eT9uZXcgRGF0ZShpLmxhc3RBY3Rpdml0eSkudG9Mb2NhbGVEYXRlU3RyaW5nKCk6Ii0ifSl9CiAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IFNlY3JldHMiLGljb25OYW1lOiJsdWNpZGU6a2V5IixhY3Rpb246YXN5bmMgaT0+e1NpLmRpc3BhdGNoQWN0aW9uKHc0LHt2aWV3OiJzZWNyZXRzIn0pfX0se25hbWU6IlZpZXcgUGlwZWxpbmVzIixpY29uTmFtZToibHVjaWRlOnBsYXkiLGFjdGlvbjphc3luYyBpPT57U2kuZGlzcGF0Y2hBY3Rpb24odzQse3ZpZXc6InBpcGVsaW5lcyJ9KX19XX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgRnQuZGlzcGF0Y2hBY3Rpb24odGEsbnVsbCk7bGV0IGE9RnQuZ2V0U3RhdGUoKS5jb25uZWN0aW9uczthLmxlbmd0aD4wJiYhdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCYmKHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQ9YVswXS5pZCxhd2FpdCB0aGlzLmxvYWRQcm9qZWN0cygpKX1hc3luYyBsb2FkUHJvamVjdHMoKXt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkJiZhd2FpdCB4dC5kaXNwYXRjaEFjdGlvbihrbyx7Y29ubmVjdGlvbklkOnRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR9KX19O0NpPWMyKEJ3dCksUmo9bmV3IFdlYWtNYXAsQmo9bmV3IFdlYWtNYXAsSGo9bmV3IFdlYWtNYXAsZHQoQ2ksNCwiY29ubmVjdGlvbnNTdGF0ZSIsUnd0LEpyLFJqKSxkdChDaSw0LCJkYXRhU3RhdGUiLE93dCxKcixCaiksZHQoQ2ksNCwic2VsZWN0ZWRDb25uZWN0aW9uSWQiLEZ3dCxKcixIaiksSnI9ZHQoQ2ksMCwiR2l0b3BzVmlld1Byb2plY3RzIixId3QsSnIpLFV0KEpyLCJzdHlsZXMiLFtoLmRlZmF1bHRTdHlsZXMsYWFdKSxSZShDaSwxLEpyKX0pO3ZhciBZd3Q9e307V2UoWXd0LHtHaXRvcHNWaWV3R3JvdXBzOigpPT5lc30pO3ZhciBWd3Qsand0LFV3dCxXd3QsR3d0LF9pLFZqLGpqLFVqLGVzLFdqPWIoYXN5bmMoKT0+e2tpKCk7YXdhaXQgUXIoKTtlbigpO3VlKCk7R3d0PVtwZSgiZ2l0b3BzLXZpZXctZ3JvdXBzIildO2VzPWNsYXNzIGV4dGVuZHMoV3d0PXhlLFV3dD1bSygpXSxqd3Q9W0soKV0sVnd0PVtLKCldLFd3dCl7Y29uc3RydWN0b3IoKXtzdXBlcigpO1N0KHRoaXMsVmosUmUoX2ksOCx0aGlzLHtjb25uZWN0aW9uczpbXSxhY3RpdmVDb25uZWN0aW9uSWQ6bnVsbH0pKSxSZShfaSwxMSx0aGlzKTtTdCh0aGlzLGpqLFJlKF9pLDEyLHRoaXMse3Byb2plY3RzOltdLGdyb3VwczpbXSxzZWNyZXRzOltdLHBpcGVsaW5lczpbXSxwaXBlbGluZUpvYnM6W10sY3VycmVudEpvYkxvZzoiIn0pKSxSZShfaSwxNSx0aGlzKTtTdCh0aGlzLFVqLFJlKF9pLDE2LHRoaXMsIiIpKSxSZShfaSwxOSx0aGlzKTtVdCh0aGlzLCJfYXV0b1JlZnJlc2hIYW5kbGVyIik7bGV0IGE9RnQuc2VsZWN0KHI9PnIpLnN1YnNjcmliZShyPT57dGhpcy5jb25uZWN0aW9uc1N0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGEpO2xldCBpPXh0LnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMuZGF0YVN0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGkpLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcj0oKT0+dGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9aGFuZGxlQXV0b1JlZnJlc2goKXt0aGlzLmxvYWRHcm91cHMoKX1yZW5kZXIoKXtsZXQgYT10aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubWFwKGk9Pih7b3B0aW9uOmAke2kubmFtZX0gKCR7aS5wcm92aWRlclR5cGV9KWAsa2V5OmkuaWR9KSk7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPkdyb3VwczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5Ccm93c2Ugb3JnYW5pemF0aW9ucyBhbmQgZ3JvdXBzIGZyb20geW91ciBjb25uZWN0ZWQgcHJvdmlkZXJzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiQ29ubmVjdGlvbiJ9CiAgICAgICAgICAub3B0aW9ucz0ke2F9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHthLmZpbmQoaT0+aS5rZXk9PT10aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKXx8YVswXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0ke2k9Pnt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkPWkuZGV0YWlsLmtleSx0aGlzLmxvYWRHcm91cHMoKX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCk9PnRoaXMubG9hZEdyb3VwcygpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7Ikdyb3VwcyAvIE9yZ2FuaXphdGlvbnMifQogICAgICAgIC5oZWFkaW5nMj0keyJHcm91cHMgZnJvbSB0aGUgc2VsZWN0ZWQgY29ubmVjdGlvbiJ9CiAgICAgICAgLmRhdGE9JHt0aGlzLmRhdGFTdGF0ZS5ncm91cHN9CiAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0ke2k9Pih7TmFtZTppLm5hbWUsUGF0aDppLmZ1bGxQYXRoLFZpc2liaWxpdHk6aS52aXNpYmlsaXR5LFByb2plY3RzOlN0cmluZyhpLnByb2plY3RDb3VudCl9KX0KICAgICAgICAuZGF0YUFjdGlvbnM9JHtbe25hbWU6IlZpZXcgU2VjcmV0cyIsaWNvbk5hbWU6Imx1Y2lkZTprZXkiLGFjdGlvbjphc3luYyBpPT57U2kuZGlzcGF0Y2hBY3Rpb24odzQse3ZpZXc6InNlY3JldHMifSl9fV19CiAgICAgID48L2RlZXMtdGFibGU+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IEZ0LmRpc3BhdGNoQWN0aW9uKHRhLG51bGwpO2xldCBhPUZ0LmdldFN0YXRlKCkuY29ubmVjdGlvbnM7YS5sZW5ndGg+MCYmIXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQmJih0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkPWFbMF0uaWQsYXdhaXQgdGhpcy5sb2FkR3JvdXBzKCkpfWFzeW5jIGxvYWRHcm91cHMoKXt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkJiZhd2FpdCB4dC5kaXNwYXRjaEFjdGlvbihUdyx7Y29ubmVjdGlvbklkOnRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR9KX19O19pPWMyKFd3dCksVmo9bmV3IFdlYWtNYXAsamo9bmV3IFdlYWtNYXAsVWo9bmV3IFdlYWtNYXAsZHQoX2ksNCwiY29ubmVjdGlvbnNTdGF0ZSIsVXd0LGVzLFZqKSxkdChfaSw0LCJkYXRhU3RhdGUiLGp3dCxlcyxqaiksZHQoX2ksNCwic2VsZWN0ZWRDb25uZWN0aW9uSWQiLFZ3dCxlcyxVaiksZXM9ZHQoX2ksMCwiR2l0b3BzVmlld0dyb3VwcyIsR3d0LGVzKSxVdChlcywic3R5bGVzIixbaC5kZWZhdWx0U3R5bGVzLGFhXSksUmUoX2ksMSxlcyl9KTt2YXIgYU10PXt9O1dlKGFNdCx7R2l0b3BzVmlld1NlY3JldHM6KCk9PlRpfSk7dmFyIFp3dCxYd3QsS3d0LFF3dCxKd3QsZU10LHRNdCx2MixHaixZaixaaixYaixLaixUaSxRaj1iKGFzeW5jKCk9PntraSgpO2F3YWl0IFFyKCk7ZW4oKTt1ZSgpO3RNdD1bcGUoImdpdG9wcy12aWV3LXNlY3JldHMiKV07VGk9Y2xhc3MgZXh0ZW5kcyhlTXQ9eGUsSnd0PVtLKCldLFF3dD1bSygpXSxLd3Q9W0soKV0sWHd0PVtLKCldLFp3dD1bSygpXSxlTXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtTdCh0aGlzLEdqLFJlKHYyLDgsdGhpcyx7Y29ubmVjdGlvbnM6W10sYWN0aXZlQ29ubmVjdGlvbklkOm51bGx9KSksUmUodjIsMTEsdGhpcyk7U3QodGhpcyxZaixSZSh2MiwxMix0aGlzLHtwcm9qZWN0czpbXSxncm91cHM6W10sc2VjcmV0czpbXSxwaXBlbGluZXM6W10scGlwZWxpbmVKb2JzOltdLGN1cnJlbnRKb2JMb2c6IiJ9KSksUmUodjIsMTUsdGhpcyk7U3QodGhpcyxaaixSZSh2MiwxNix0aGlzLCIiKSksUmUodjIsMTksdGhpcyk7U3QodGhpcyxYaixSZSh2MiwyMCx0aGlzLCJhbGwiKSksUmUodjIsMjMsdGhpcyk7U3QodGhpcyxLaixSZSh2MiwyNCx0aGlzLCJfX2FsbF9fIikpLFJlKHYyLDI3LHRoaXMpO1V0KHRoaXMsIl9hdXRvUmVmcmVzaEhhbmRsZXIiKTtsZXQgYT1GdC5zZWxlY3Qocj0+cikuc3Vic2NyaWJlKHI9Pnt0aGlzLmNvbm5lY3Rpb25zU3RhdGU9cn0pO3RoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goYSk7bGV0IGk9eHQuc2VsZWN0KHI9PnIpLnN1YnNjcmliZShyPT57dGhpcy5kYXRhU3RhdGU9cn0pO3RoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goaSksdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyPSgpPT50aGlzLmhhbmRsZUF1dG9SZWZyZXNoKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKX1oYW5kbGVBdXRvUmVmcmVzaCgpe3RoaXMubG9hZFNlY3JldHMoKX1nZXQgZmlsdGVyZWRTZWNyZXRzKCl7bGV0IGE9dGhpcy5kYXRhU3RhdGUuc2VjcmV0cztyZXR1cm4gdGhpcy5zZWxlY3RlZFNjb3BlIT09ImFsbCImJihhPWEuZmlsdGVyKGk9Pmkuc2NvcGU9PT10aGlzLnNlbGVjdGVkU2NvcGUpKSx0aGlzLnNlbGVjdGVkU2NvcGVJZCE9PSJfX2FsbF9fIiYmKGE9YS5maWx0ZXIoaT0+aS5zY29wZUlkPT09dGhpcy5zZWxlY3RlZFNjb3BlSWQpKSxhfXJlbmRlcigpe2xldCBhPXRoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9ucy5tYXAobz0+KHtvcHRpb246YCR7by5uYW1lfSAoJHtvLnByb3ZpZGVyVHlwZX0pYCxrZXk6by5pZH0pKSxpPVt7b3B0aW9uOiJBbGwgU2NvcGVzIixrZXk6ImFsbCJ9LHtvcHRpb246IlByb2plY3QiLGtleToicHJvamVjdCJ9LHtvcHRpb246Ikdyb3VwIixrZXk6Imdyb3VwIn1dLHI9dGhpcy5zZWxlY3RlZFNjb3BlPT09Imdyb3VwIj90aGlzLmRhdGFTdGF0ZS5ncm91cHMubWFwKG89Pih7b3B0aW9uOm8uZnVsbFBhdGh8fG8ubmFtZSxrZXk6by5pZH0pKTp0aGlzLnNlbGVjdGVkU2NvcGU9PT0icHJvamVjdCI/dGhpcy5kYXRhU3RhdGUucHJvamVjdHMubWFwKG89Pih7b3B0aW9uOm8uZnVsbFBhdGh8fG8ubmFtZSxrZXk6by5pZH0pKTpbXSxzPVt7b3B0aW9uOiJBbGwiLGtleToiX19hbGxfXyJ9LC4uLnJdLG49dGhpcy5zZWxlY3RlZFNjb3BlPT09ImFsbCJ8fHRoaXMuc2VsZWN0ZWRTY29wZUlkPT09Il9fYWxsX18iO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5TZWNyZXRzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZpZXctZGVzY3JpcHRpb24iPk1hbmFnZSBDSS9DRCBzZWNyZXRzIGFuZCB2YXJpYWJsZXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJDb25uZWN0aW9uIn0KICAgICAgICAgIC5vcHRpb25zPSR7YX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke2EuZmluZChvPT5vLmtleT09PXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQpfHxhWzBdfQogICAgICAgICAgQHNlbGVjdGVkT3B0aW9uPSR7bz0+e3RoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQ9by5kZXRhaWwua2V5LHRoaXMuc2VsZWN0ZWRTY29wZUlkPSJfX2FsbF9fIix0aGlzLmxvYWRFbnRpdGllcygpLHRoaXMubG9hZFNlY3JldHMoKX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlNjb3BlIn0KICAgICAgICAgIC5vcHRpb25zPSR7aX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke2kuZmluZChvPT5vLmtleT09PXRoaXMuc2VsZWN0ZWRTY29wZSl9CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHtvPT57dGhpcy5zZWxlY3RlZFNjb3BlPW8uZGV0YWlsLmtleSx0aGlzLnNlbGVjdGVkU2NvcGVJZD0iX19hbGxfXyIsdGhpcy5sb2FkRW50aXRpZXMoKSx0aGlzLmxvYWRTZWNyZXRzKCl9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgJHt0aGlzLnNlbGVjdGVkU2NvcGUhPT0iYWxsIj93YAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7dGhpcy5zZWxlY3RlZFNjb3BlPT09InByb2plY3QiPyJQcm9qZWN0IjoiR3JvdXAifQogICAgICAgICAgICAub3B0aW9ucz0ke3N9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3MuZmluZChvPT5vLmtleT09PXRoaXMuc2VsZWN0ZWRTY29wZUlkKXx8c1swXX0KICAgICAgICAgICAgQHNlbGVjdGVkT3B0aW9uPSR7bz0+e3RoaXMuc2VsZWN0ZWRTY29wZUlkPW8uZGV0YWlsLmtleX19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIGA6IiJ9CiAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAuZGlzYWJsZWQ9JHtufQogICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuYWRkU2VjcmV0KCl9CiAgICAgICAgPkFkZCBTZWNyZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKT0+dGhpcy5sb2FkU2VjcmV0cygpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7IlNlY3JldHMifQogICAgICAgIC5oZWFkaW5nMj0keyJDSS9DRCB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBlbnRpdHkifQogICAgICAgIC5kYXRhPSR7dGhpcy5maWx0ZXJlZFNlY3JldHN9CiAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0ke289Pih7S2V5Om8ua2V5LFNjb3BlOm8uc2NvcGVOYW1lfHxvLnNjb3BlSWQsVmFsdWU6by5tYXNrZWQ/IioqKioqKiI6by52YWx1ZSxQcm90ZWN0ZWQ6by5wcm90ZWN0ZWQ/IlllcyI6Ik5vIixFbnZpcm9ubWVudDpvLmVudmlyb25tZW50fHwiKiJ9KX0KICAgICAgICAuZGF0YUFjdGlvbnM9JHtbe25hbWU6IkVkaXQiLGljb25OYW1lOiJsdWNpZGU6ZWRpdCIsYWN0aW9uOmFzeW5jIG89Pnthd2FpdCB0aGlzLmVkaXRTZWNyZXQobyl9fSx7bmFtZToiRGVsZXRlIixpY29uTmFtZToibHVjaWRlOnRyYXNoMiIsYWN0aW9uOmFzeW5jIG89Pnthd2FpdCB4dC5kaXNwYXRjaEFjdGlvbih4d3Qse2Nvbm5lY3Rpb25JZDp0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLHNjb3BlOm8uc2NvcGUsc2NvcGVJZDpvLnNjb3BlSWQsa2V5Om8ua2V5fSl9fV19CiAgICAgID48L2RlZXMtdGFibGU+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IEZ0LmRpc3BhdGNoQWN0aW9uKHRhLG51bGwpO2xldCBhPUZ0LmdldFN0YXRlKCkuY29ubmVjdGlvbnM7YS5sZW5ndGg+MCYmIXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQmJih0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkPWFbMF0uaWQsYXdhaXQgdGhpcy5sb2FkRW50aXRpZXMoKSxhd2FpdCB0aGlzLmxvYWRTZWNyZXRzKCkpfWFzeW5jIGxvYWRFbnRpdGllcygpe3RoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQmJnRoaXMuc2VsZWN0ZWRTY29wZSE9PSJhbGwiJiYodGhpcy5zZWxlY3RlZFNjb3BlPT09InByb2plY3QiP2F3YWl0IHh0LmRpc3BhdGNoQWN0aW9uKGtvLHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZH0pOmF3YWl0IHh0LmRpc3BhdGNoQWN0aW9uKFR3LHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZH0pKX1hc3luYyBsb2FkU2VjcmV0cygpe3RoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQmJmF3YWl0IHh0LmRpc3BhdGNoQWN0aW9uKGJ3dCx7Y29ubmVjdGlvbklkOnRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR9KX1hc3luYyBhZGRTZWNyZXQoKXt0aGlzLnNlbGVjdGVkU2NvcGU9PT0iYWxsInx8dGhpcy5zZWxlY3RlZFNjb3BlSWQ9PT0iX19hbGxfXyJ8fGF3YWl0IGxyLkRlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOiJBZGQgU2VjcmV0Iixjb250ZW50OndgCiAgICAgICAgPHN0eWxlPi5mb3JtLXJvdyB7IG1hcmdpbi1ib3R0b206IDE2cHg7IH08L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IktleSJ9IC5rZXk9JHsia2V5In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVmFsdWUifSAua2V5PSR7InZhbHVlIn0gdHlwZT0icGFzc3dvcmQiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgYT0+e2EuZGVzdHJveSgpfX0se25hbWU6IkNyZWF0ZSIsYWN0aW9uOmFzeW5jIGE9PntsZXQgaT1hLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iikscj17fTtmb3IobGV0IHMgb2YgaSlyW3Mua2V5XT1zLnZhbHVlfHwiIjthd2FpdCB4dC5kaXNwYXRjaEFjdGlvbih2d3Qse2Nvbm5lY3Rpb25JZDp0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLHNjb3BlOnRoaXMuc2VsZWN0ZWRTY29wZSxzY29wZUlkOnRoaXMuc2VsZWN0ZWRTY29wZUlkLGtleTpyLmtleSx2YWx1ZTpyLnZhbHVlfSksYS5kZXN0cm95KCl9fV19KX1hc3luYyBlZGl0U2VjcmV0KGEpe2F3YWl0IGxyLkRlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHtoZWFkaW5nOmBFZGl0IFNlY3JldDogJHthLmtleX1gLGNvbnRlbnQ6d2AKICAgICAgICA8c3R5bGU+LmZvcm0tcm93IHsgbWFyZ2luLWJvdHRvbTogMTZweDsgfTwvc3R5bGU+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVmFsdWUifSAua2V5PSR7InZhbHVlIn0gdHlwZT0icGFzc3dvcmQiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICBgLG1lbnVPcHRpb25zOlt7bmFtZToiQ2FuY2VsIixhY3Rpb246YXN5bmMgaT0+e2kuZGVzdHJveSgpfX0se25hbWU6IlVwZGF0ZSIsYWN0aW9uOmFzeW5jIGk9PntsZXQgcj1pLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7YXdhaXQgeHQuZGlzcGF0Y2hBY3Rpb24oeXd0LHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCxzY29wZTphLnNjb3BlLHNjb3BlSWQ6YS5zY29wZUlkLGtleTphLmtleSx2YWx1ZTpyPy52YWx1ZXx8IiJ9KSxpLmRlc3Ryb3koKX19XX0pfX07djI9YzIoZU10KSxHaj1uZXcgV2Vha01hcCxZaj1uZXcgV2Vha01hcCxaaj1uZXcgV2Vha01hcCxYaj1uZXcgV2Vha01hcCxLaj1uZXcgV2Vha01hcCxkdCh2Miw0LCJjb25uZWN0aW9uc1N0YXRlIixKd3QsVGksR2opLGR0KHYyLDQsImRhdGFTdGF0ZSIsUXd0LFRpLFlqKSxkdCh2Miw0LCJzZWxlY3RlZENvbm5lY3Rpb25JZCIsS3d0LFRpLFpqKSxkdCh2Miw0LCJzZWxlY3RlZFNjb3BlIixYd3QsVGksWGopLGR0KHYyLDQsInNlbGVjdGVkU2NvcGVJZCIsWnd0LFRpLEtqKSxUaT1kdCh2MiwwLCJHaXRvcHNWaWV3U2VjcmV0cyIsdE10LFRpKSxVdChUaSwic3R5bGVzIixbaC5kZWZhdWx0U3R5bGVzLGFhXSksUmUodjIsMSxUaSl9KTt2YXIgY010PXt9O1dlKGNNdCx7R2l0b3BzVmlld1BpcGVsaW5lczooKT0+cHJ9KTt2YXIgaU10LHJNdCxzTXQsbk10LG9NdCxsTXQsTWEsSmosZVUsdFUsYVUscHIsaVU9Yihhc3luYygpPT57a2koKTthd2FpdCBRcigpO2VuKCk7dWUoKTtsTXQ9W3BlKCJnaXRvcHMtdmlldy1waXBlbGluZXMiKV07cHI9Y2xhc3MgZXh0ZW5kcyhvTXQ9eGUsbk10PVtLKCldLHNNdD1bSygpXSxyTXQ9W0soKV0saU10PVtLKCldLG9NdCl7Y29uc3RydWN0b3IoKXtzdXBlcigpO1N0KHRoaXMsSmosUmUoTWEsOCx0aGlzLHtjb25uZWN0aW9uczpbXSxhY3RpdmVDb25uZWN0aW9uSWQ6bnVsbH0pKSxSZShNYSwxMSx0aGlzKTtTdCh0aGlzLGVVLFJlKE1hLDEyLHRoaXMse3Byb2plY3RzOltdLGdyb3VwczpbXSxzZWNyZXRzOltdLHBpcGVsaW5lczpbXSxwaXBlbGluZUpvYnM6W10sY3VycmVudEpvYkxvZzoiIn0pKSxSZShNYSwxNSx0aGlzKTtTdCh0aGlzLHRVLFJlKE1hLDE2LHRoaXMsIiIpKSxSZShNYSwxOSx0aGlzKTtTdCh0aGlzLGFVLFJlKE1hLDIwLHRoaXMsIiIpKSxSZShNYSwyMyx0aGlzKTtVdCh0aGlzLCJfYXV0b1JlZnJlc2hIYW5kbGVyIik7bGV0IGE9RnQuc2VsZWN0KHI9PnIpLnN1YnNjcmliZShyPT57dGhpcy5jb25uZWN0aW9uc1N0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGEpO2xldCBpPXh0LnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMuZGF0YVN0YXRlPXJ9KTt0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGkpLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcj0oKT0+dGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcil9aGFuZGxlQXV0b1JlZnJlc2goKXt0aGlzLmxvYWRQaXBlbGluZXMoKX1yZW5kZXIoKXtsZXQgYT10aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubWFwKHI9Pih7b3B0aW9uOmAke3IubmFtZX0gKCR7ci5wcm92aWRlclR5cGV9KWAsa2V5OnIuaWR9KSksaT10aGlzLmRhdGFTdGF0ZS5wcm9qZWN0cy5tYXAocj0+KHtvcHRpb246ci5mdWxsUGF0aHx8ci5uYW1lLGtleTpyLmlkfSkpO3JldHVybiB3YAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5QaXBlbGluZXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idmlldy1kZXNjcmlwdGlvbiI+VmlldyBhbmQgbWFuYWdlIENJL0NEIHBpcGVsaW5lczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IkNvbm5lY3Rpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHthfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7YS5maW5kKHI9PnIua2V5PT09dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCl8fGFbMF19CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHtyPT57dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZD1yLmRldGFpbC5rZXksdGhpcy5sb2FkUHJvamVjdHMoKX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QifQogICAgICAgICAgLm9wdGlvbnM9JHtpfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7aS5maW5kKHI9PnIua2V5PT09dGhpcy5zZWxlY3RlZFByb2plY3RJZCl8fGlbMF19CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHtyPT57dGhpcy5zZWxlY3RlZFByb2plY3RJZD1yLmRldGFpbC5rZXksdGhpcy5sb2FkUGlwZWxpbmVzKCl9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT50aGlzLmxvYWRQaXBlbGluZXMoKX0+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGVlcy10YWJsZQogICAgICAgIC5oZWFkaW5nMT0keyJDSS9DRCBQaXBlbGluZXMifQogICAgICAgIC5oZWFkaW5nMj0keyJQaXBlbGluZSBydW5zIGZvciB0aGUgc2VsZWN0ZWQgcHJvamVjdCJ9CiAgICAgICAgLmRhdGE9JHt0aGlzLmRhdGFTdGF0ZS5waXBlbGluZXN9CiAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0ke3I9Pih7SUQ6ci5pZCxTdGF0dXM6ci5zdGF0dXMsUmVmOnIucmVmLER1cmF0aW9uOnIuZHVyYXRpb24/YCR7TWF0aC5yb3VuZChyLmR1cmF0aW9uKX1zYDoiLSIsU291cmNlOnIuc291cmNlLENyZWF0ZWQ6ci5jcmVhdGVkQXQ/bmV3IERhdGUoci5jcmVhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCk6Ii0ifSl9CiAgICAgICAgLmRhdGFBY3Rpb25zPSR7W3tuYW1lOiJWaWV3IEpvYnMiLGljb25OYW1lOiJsdWNpZGU6bGlzdCIsYWN0aW9uOmFzeW5jIHI9Pnthd2FpdCB0aGlzLnZpZXdKb2JzKHIpfX0se25hbWU6IlJldHJ5IixpY29uTmFtZToibHVjaWRlOnJlZnJlc2gtY3ciLGFjdGlvbjphc3luYyByPT57YXdhaXQgeHQuZGlzcGF0Y2hBY3Rpb24oend0LHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCxwcm9qZWN0SWQ6dGhpcy5zZWxlY3RlZFByb2plY3RJZCxwaXBlbGluZUlkOnIuaWR9KX19LHtuYW1lOiJDYW5jZWwiLGljb25OYW1lOiJsdWNpZGU6eC1jaXJjbGUiLGFjdGlvbjphc3luYyByPT57YXdhaXQgeHQuZGlzcGF0Y2hBY3Rpb24oa3d0LHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCxwcm9qZWN0SWQ6dGhpcy5zZWxlY3RlZFByb2plY3RJZCxwaXBlbGluZUlkOnIuaWR9KX19XX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7YXdhaXQgRnQuZGlzcGF0Y2hBY3Rpb24odGEsbnVsbCk7bGV0IGE9RnQuZ2V0U3RhdGUoKS5jb25uZWN0aW9uczthLmxlbmd0aD4wJiYhdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCYmKHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQ9YVswXS5pZCxhd2FpdCB0aGlzLmxvYWRQcm9qZWN0cygpKX1hc3luYyBsb2FkUHJvamVjdHMoKXt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkJiZhd2FpdCB4dC5kaXNwYXRjaEFjdGlvbihrbyx7Y29ubmVjdGlvbklkOnRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR9KX1hc3luYyBsb2FkUGlwZWxpbmVzKCl7IXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR8fCF0aGlzLnNlbGVjdGVkUHJvamVjdElkfHxhd2FpdCB4dC5kaXNwYXRjaEFjdGlvbih3d3Qse2Nvbm5lY3Rpb25JZDp0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLHByb2plY3RJZDp0aGlzLnNlbGVjdGVkUHJvamVjdElkfSl9YXN5bmMgdmlld0pvYnMoYSl7YXdhaXQgeHQuZGlzcGF0Y2hBY3Rpb24oTXd0LHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCxwcm9qZWN0SWQ6dGhpcy5zZWxlY3RlZFByb2plY3RJZCxwaXBlbGluZUlkOmEuaWR9KTtsZXQgaT14dC5nZXRTdGF0ZSgpLnBpcGVsaW5lSm9iczthd2FpdCBsci5EZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7aGVhZGluZzpgUGlwZWxpbmUgIyR7YS5pZH0gLSBKb2JzYCxjb250ZW50OndgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLmpvYnMtbGlzdCB7IGNvbG9yOiAjZmZmOyB9CiAgICAgICAgICAuam9iLWl0ZW0geyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IHBhZGRpbmc6IDhweCAwOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsgfQogICAgICAgICAgLmpvYi1uYW1lIHsgZm9udC13ZWlnaHQ6IDYwMDsgfQogICAgICAgICAgLmpvYi1zdGF0dXMgeyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDEycHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9ImpvYnMtbGlzdCI+CiAgICAgICAgICAke2kubWFwKHI9PndgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImpvYi1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iam9iLW5hbWUiPiR7ci5uYW1lfSAoJHtyLnN0YWdlfSk8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpvYi1zdGF0dXMiPiR7ci5zdGF0dXN9IC0gJHtyLmR1cmF0aW9uP2Ake01hdGgucm91bmQoci5kdXJhdGlvbil9c2A6Ii0ifTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgICAgICR7aS5sZW5ndGg9PT0wP3dgPHA+Tm8gam9icyBmb3VuZC48L3A+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYCxtZW51T3B0aW9uczpbe25hbWU6IkNsb3NlIixhY3Rpb246YXN5bmMgcj0+e3IuZGVzdHJveSgpfX1dfSl9fTtNYT1jMihvTXQpLEpqPW5ldyBXZWFrTWFwLGVVPW5ldyBXZWFrTWFwLHRVPW5ldyBXZWFrTWFwLGFVPW5ldyBXZWFrTWFwLGR0KE1hLDQsImNvbm5lY3Rpb25zU3RhdGUiLG5NdCxwcixKaiksZHQoTWEsNCwiZGF0YVN0YXRlIixzTXQscHIsZVUpLGR0KE1hLDQsInNlbGVjdGVkQ29ubmVjdGlvbklkIixyTXQscHIsdFUpLGR0KE1hLDQsInNlbGVjdGVkUHJvamVjdElkIixpTXQscHIsYVUpLHByPWR0KE1hLDAsIkdpdG9wc1ZpZXdQaXBlbGluZXMiLGxNdCxwciksVXQocHIsInN0eWxlcyIsW2guZGVmYXVsdFN0eWxlcyxhYSxRYAogICAgICAuc3RhdHVzLWJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQogICAgICAuc3RhdHVzLXN1Y2Nlc3MgeyBiYWNrZ3JvdW5kOiAjMWEzYTFhOyBjb2xvcjogIzAwZmY4ODsgfQogICAgICAuc3RhdHVzLWZhaWxlZCB7IGJhY2tncm91bmQ6ICMzYTFhMWE7IGNvbG9yOiAjZmY0NDQ0OyB9CiAgICAgIC5zdGF0dXMtcnVubmluZyB7IGJhY2tncm91bmQ6ICMxYTJhM2E7IGNvbG9yOiAjMDBhY2ZmOyB9CiAgICAgIC5zdGF0dXMtcGVuZGluZyB7IGJhY2tncm91bmQ6ICMzYTNhMWE7IGNvbG9yOiAjZmZhYTAwOyB9CiAgICAgIC5zdGF0dXMtY2FuY2VsZWQgeyBiYWNrZ3JvdW5kOiAjMmEyYTJhOyBjb2xvcjogIzk5OTsgfQogICAgYF0pLFJlKE1hLDEscHIpfSk7dmFyIGJNdD17fTtXZShiTXQse0dpdG9wc1ZpZXdCdWlsZGxvZzooKT0+TGl9KTt2YXIgZE10LHBNdCxoTXQsdU10LGZNdCxtTXQsZ010LHkyLHJVLHNVLG5VLG9VLGxVLExpLGNVPWIoYXN5bmMoKT0+e2tpKCk7YXdhaXQgUXIoKTtlbigpO3VlKCk7Z010PVtwZSgiZ2l0b3BzLXZpZXctYnVpbGRsb2ciKV07TGk9Y2xhc3MgZXh0ZW5kcyhtTXQ9eGUsZk10PVtLKCldLHVNdD1bSygpXSxoTXQ9W0soKV0scE10PVtLKCldLGRNdD1bSygpXSxtTXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtTdCh0aGlzLHJVLFJlKHkyLDgsdGhpcyx7Y29ubmVjdGlvbnM6W10sYWN0aXZlQ29ubmVjdGlvbklkOm51bGx9KSksUmUoeTIsMTEsdGhpcyk7U3QodGhpcyxzVSxSZSh5MiwxMix0aGlzLHtwcm9qZWN0czpbXSxncm91cHM6W10sc2VjcmV0czpbXSxwaXBlbGluZXM6W10scGlwZWxpbmVKb2JzOltdLGN1cnJlbnRKb2JMb2c6IiJ9KSksUmUoeTIsMTUsdGhpcyk7U3QodGhpcyxuVSxSZSh5MiwxNix0aGlzLCIiKSksUmUoeTIsMTksdGhpcyk7U3QodGhpcyxvVSxSZSh5MiwyMCx0aGlzLCIiKSksUmUoeTIsMjMsdGhpcyk7U3QodGhpcyxsVSxSZSh5MiwyNCx0aGlzLCIiKSksUmUoeTIsMjcsdGhpcyk7VXQodGhpcywiX2F1dG9SZWZyZXNoSGFuZGxlciIpO2xldCBhPUZ0LnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMuY29ubmVjdGlvbnNTdGF0ZT1yfSk7dGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChhKTtsZXQgaT14dC5zZWxlY3Qocj0+cikuc3Vic2NyaWJlKHI9Pnt0aGlzLmRhdGFTdGF0ZT1yfSk7dGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChpKSx0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXI9KCk9PnRoaXMuaGFuZGxlQXV0b1JlZnJlc2goKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIix0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIix0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpfWhhbmRsZUF1dG9SZWZyZXNoKCl7dGhpcy5mZXRjaExvZygpfXJlbmRlcigpe2xldCBhPXRoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9ucy5tYXAocz0+KHtvcHRpb246YCR7cy5uYW1lfSAoJHtzLnByb3ZpZGVyVHlwZX0pYCxrZXk6cy5pZH0pKSxpPXRoaXMuZGF0YVN0YXRlLnByb2plY3RzLm1hcChzPT4oe29wdGlvbjpzLmZ1bGxQYXRofHxzLm5hbWUsa2V5OnMuaWR9KSkscj10aGlzLmRhdGFTdGF0ZS5waXBlbGluZUpvYnMubWFwKHM9Pih7b3B0aW9uOmAke3MubmFtZX0gKCR7cy5zdGF0dXN9KWAsa2V5OnMuaWR9KSk7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPkJ1aWxkIExvZzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5WaWV3IHJhdyBidWlsZCBsb2dzIGZvciBDSS9DRCBqb2JzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiQ29ubmVjdGlvbiJ9CiAgICAgICAgICAub3B0aW9ucz0ke2F9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHthLmZpbmQocz0+cy5rZXk9PT10aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKXx8YVswXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0ke3M9Pnt0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkPXMuZGV0YWlsLmtleSx0aGlzLmxvYWRQcm9qZWN0cygpfX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke2l9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHtpLmZpbmQocz0+cy5rZXk9PT10aGlzLnNlbGVjdGVkUHJvamVjdElkKXx8aVswXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0ke3M9Pnt0aGlzLnNlbGVjdGVkUHJvamVjdElkPXMuZGV0YWlsLmtleX19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IkpvYiJ9CiAgICAgICAgICAub3B0aW9ucz0ke3J9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHtyLmZpbmQocz0+cy5rZXk9PT10aGlzLnNlbGVjdGVkSm9iSWQpfHxyWzBdfQogICAgICAgICAgQHNlbGVjdGVkT3B0aW9uPSR7cz0+e3RoaXMuc2VsZWN0ZWRKb2JJZD1zLmRldGFpbC5rZXl9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT50aGlzLmZldGNoTG9nKCl9PkZldGNoIExvZzwvZGVlcy1idXR0b24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpPT50aGlzLmZldGNoTG9nKCl9PlJlZnJlc2g8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnNlbGVjdGVkSm9iSWQ/d2AKICAgICAgICA8ZGl2IGNsYXNzPSJqb2ItbWV0YSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iam9iLW1ldGEtaXRlbSI+Sm9iOiA8c3Ryb25nPiR7dGhpcy5zZWxlY3RlZEpvYklkfTwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJqb2ItbWV0YS1pdGVtIj5Qcm9qZWN0OiA8c3Ryb25nPiR7dGhpcy5zZWxlY3RlZFByb2plY3RJZH08L3N0cm9uZz48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9ImxvZy1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5kYXRhU3RhdGUuY3VycmVudEpvYkxvZz90aGlzLmRhdGFTdGF0ZS5jdXJyZW50Sm9iTG9nOndgPGRpdiBjbGFzcz0ibG9nLWVtcHR5Ij5TZWxlY3QgYSBjb25uZWN0aW9uLCBwcm9qZWN0LCBhbmQgam9iLCB0aGVuIGNsaWNrICJGZXRjaCBMb2ciIHRvIHZpZXcgYnVpbGQgb3V0cHV0LjwvZGl2PmB9CiAgICAgIDwvZGl2PgogICAgYH1hc3luYyBmaXJzdFVwZGF0ZWQoKXthd2FpdCBGdC5kaXNwYXRjaEFjdGlvbih0YSxudWxsKTtsZXQgYT1GdC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25zO2EubGVuZ3RoPjAmJiF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkJiYodGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZD1hWzBdLmlkLGF3YWl0IHRoaXMubG9hZFByb2plY3RzKCkpfWFzeW5jIGxvYWRQcm9qZWN0cygpe3RoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQmJmF3YWl0IHh0LmRpc3BhdGNoQWN0aW9uKGtvLHtjb25uZWN0aW9uSWQ6dGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZH0pfWFzeW5jIGZldGNoTG9nKCl7IXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWR8fCF0aGlzLnNlbGVjdGVkUHJvamVjdElkfHwhdGhpcy5zZWxlY3RlZEpvYklkfHxhd2FpdCB4dC5kaXNwYXRjaEFjdGlvbihTd3Qse2Nvbm5lY3Rpb25JZDp0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLHByb2plY3RJZDp0aGlzLnNlbGVjdGVkUHJvamVjdElkLGpvYklkOnRoaXMuc2VsZWN0ZWRKb2JJZH0pfX07eTI9YzIobU10KSxyVT1uZXcgV2Vha01hcCxzVT1uZXcgV2Vha01hcCxuVT1uZXcgV2Vha01hcCxvVT1uZXcgV2Vha01hcCxsVT1uZXcgV2Vha01hcCxkdCh5Miw0LCJjb25uZWN0aW9uc1N0YXRlIixmTXQsTGksclUpLGR0KHkyLDQsImRhdGFTdGF0ZSIsdU10LExpLHNVKSxkdCh5Miw0LCJzZWxlY3RlZENvbm5lY3Rpb25JZCIsaE10LExpLG5VKSxkdCh5Miw0LCJzZWxlY3RlZFByb2plY3RJZCIscE10LExpLG9VKSxkdCh5Miw0LCJzZWxlY3RlZEpvYklkIixkTXQsTGksbFUpLExpPWR0KHkyLDAsIkdpdG9wc1ZpZXdCdWlsZGxvZyIsZ010LExpKSxVdChMaSwic3R5bGVzIixbaC5kZWZhdWx0U3R5bGVzLGFhLFFgCiAgICAgIC5sb2ctY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdGaXJhIENvZGUnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgICAgbWF4LWhlaWdodDogNjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICB9CiAgICAgIC5sb2ctZW1wdHkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIC5qb2ItbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAuam9iLW1ldGEtaXRlbSB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KICAgICAgLmpvYi1tZXRhLWl0ZW0gc3Ryb25nIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQogICAgYF0pLFJlKHkyLDEsTGkpfSk7dmFyIGtNdD17fTtXZShrTXQse0dpdG9wc1ZpZXdBY3Rpb25zOigpPT5ocn0pO3ZhciB2TXQseU10LHhNdCx3TXQsTU10LHpNdCx6YSxkVSxwVSxoVSx1VSxocixmVT1iKGFzeW5jKCk9PntraSgpO0N3KCk7YXdhaXQgUXIoKTtlbigpO3VlKCk7ek10PVtwZSgiZ2l0b3BzLXZpZXctYWN0aW9ucyIpXTtocj1jbGFzcyBleHRlbmRzKE1NdD14ZSx3TXQ9W0soKV0seE10PVtLKCldLHlNdD1bSygpXSx2TXQ9W0soKV0sTU10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7U3QodGhpcyxkVSxSZSh6YSw4LHRoaXMsMCkpLFJlKHphLDExLHRoaXMpO1N0KHRoaXMscFUsUmUoemEsMTIsdGhpcywhMSkpLFJlKHphLDE1LHRoaXMpO1N0KHRoaXMsaFUsUmUoemEsMTYsdGhpcyxudWxsKSksUmUoemEsMTksdGhpcyk7U3QodGhpcyx1VSxSZSh6YSwyMCx0aGlzLCIiKSksUmUoemEsMjMsdGhpcyl9cmVuZGVyKCl7bGV0IGE9dGhpcy5sYXN0U2NhblRpbWVzdGFtcD9uZXcgRGF0ZSh0aGlzLmxhc3RTY2FuVGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpOiJOZXZlciI7cmV0dXJuIHdgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPkFjdGlvbnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idmlldy1kZXNjcmlwdGlvbiI+U3lzdGVtIGFjdGlvbnMgYW5kIG1haW50ZW5hbmNlIHRhc2tzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbi1jYXJkcyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWNhcmQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWNhcmQtdGl0bGUiPlNlY3JldHMgQ2FjaGUgU2NhbjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWNhcmQtZGVzY3JpcHRpb24iPgogICAgICAgICAgICBTZWNyZXRzIGFyZSBhdXRvbWF0aWNhbGx5IHNjYW5uZWQgYW5kIGNhY2hlZCBldmVyeSAyNCBob3Vycy4KICAgICAgICAgICAgVXNlICJGb3JjZSBGdWxsIFNjYW4iIHRvIHRyaWdnZXIgYW4gaW1tZWRpYXRlIHJlZnJlc2ggb2YgYWxsIHNlY3JldHMKICAgICAgICAgICAgYWNyb3NzIGFsbCBjb25uZWN0aW9ucywgcHJvamVjdHMsIGFuZCBncm91cHMuCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tbGFiZWwiPlN0YXR1czwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLXZhbHVlICR7dGhpcy5pc1NjYW5uaW5nPyJzY2FubmluZyI6IiJ9Ij4KICAgICAgICAgICAgICAke3RoaXMuaXNTY2FubmluZz8iU2Nhbm5pbmcuLi4iOiJJZGxlIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tbGFiZWwiPkxhc3QgU2NhbjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLXZhbHVlIj4ke2F9PC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5sYXN0UmVzdWx0P3dgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1sYWJlbCI+Q29ubmVjdGlvbnM8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLXZhbHVlIj4ke3RoaXMubGFzdFJlc3VsdC5jb25uZWN0aW9uc1NjYW5uZWR9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1sYWJlbCI+U2VjcmV0cyBGb3VuZDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUiPiR7dGhpcy5sYXN0UmVzdWx0LnNlY3JldHNGb3VuZH08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5EdXJhdGlvbjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUiPiR7KHRoaXMubGFzdFJlc3VsdC5kdXJhdGlvbk1zLzFlMykudG9GaXhlZCgxKX1zPC9kaXY+CiAgICAgICAgICAgICAgJHt0aGlzLmxhc3RSZXN1bHQuZXJyb3JzLmxlbmd0aD4wP3dgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5FcnJvcnM8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUgZXJyb3IiPiR7dGhpcy5sYXN0UmVzdWx0LmVycm9ycy5sZW5ndGh9PC9kaXY+CiAgICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHt0aGlzLnN0YXR1c0Vycm9yP3dgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9ycy1saXN0Ij4ke3RoaXMuc3RhdHVzRXJyb3J9PC9kaXY+CiAgICAgICAgICBgOiIifQogICAgICAgICAgJHt0aGlzLmxhc3RSZXN1bHQ/LmVycm9ycz8ubGVuZ3RoP3dgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9ycy1saXN0Ij4KICAgICAgICAgICAgICAke3RoaXMubGFzdFJlc3VsdC5lcnJvcnMubWFwKGk9PndgPGRpdj4ke2l9PC9kaXY+YCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDoiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1yb3ciPgogICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmlzU2Nhbm5pbmd9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCk9PnRoaXMuZm9yY2VTY2FuKCl9CiAgICAgICAgICAgID5Gb3JjZSBGdWxsIFNjYW48L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICBAY2xpY2s9JHsoKT0+dGhpcy5yZWZyZXNoU3RhdHVzKCl9CiAgICAgICAgICAgID5SZWZyZXNoIFN0YXR1czwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgfWFzeW5jIGZpcnN0VXBkYXRlZCgpe2F3YWl0IHRoaXMucmVmcmVzaFN0YXR1cygpfWdldElkZW50aXR5KCl7cmV0dXJuIHRpLmdldFN0YXRlKCkuaWRlbnRpdHl9YXN5bmMgcmVmcmVzaFN0YXR1cygpe2xldCBhPXRoaXMuZ2V0SWRlbnRpdHkoKTtpZihhKXRyeXt0aGlzLnN0YXR1c0Vycm9yPSIiO2xldCByPWF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJnZXRTY2FuU3RhdHVzIikuZmlyZSh7aWRlbnRpdHk6YX0pO3RoaXMubGFzdFNjYW5UaW1lc3RhbXA9ci5sYXN0U2NhblRpbWVzdGFtcCx0aGlzLmlzU2Nhbm5pbmc9ci5pc1NjYW5uaW5nLHRoaXMubGFzdFJlc3VsdD1yLmxhc3RSZXN1bHR9Y2F0Y2goaSl7dGhpcy5zdGF0dXNFcnJvcj1gRmFpbGVkIHRvIGdldCBzdGF0dXM6ICR7aX1gfX1hc3luYyBmb3JjZVNjYW4oKXtsZXQgYT10aGlzLmdldElkZW50aXR5KCk7aWYoYSl0cnl7dGhpcy5zdGF0dXNFcnJvcj0iIix0aGlzLmlzU2Nhbm5pbmc9ITA7bGV0IHI9YXdhaXQgbmV3IFh0LnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsImZvcmNlU2NhblNlY3JldHMiKS5maXJlKHtpZGVudGl0eTphfSk7dGhpcy5sYXN0UmVzdWx0PXtjb25uZWN0aW9uc1NjYW5uZWQ6ci5jb25uZWN0aW9uc1NjYW5uZWQsc2VjcmV0c0ZvdW5kOnIuc2VjcmV0c0ZvdW5kLGVycm9yczpyLmVycm9ycyxkdXJhdGlvbk1zOnIuZHVyYXRpb25Nc30sdGhpcy5sYXN0U2NhblRpbWVzdGFtcD1EYXRlLm5vdygpLHRoaXMuaXNTY2FubmluZz0hMX1jYXRjaChpKXt0aGlzLnN0YXR1c0Vycm9yPWBTY2FuIGZhaWxlZDogJHtpfWAsdGhpcy5pc1NjYW5uaW5nPSExfX19O3phPWMyKE1NdCksZFU9bmV3IFdlYWtNYXAscFU9bmV3IFdlYWtNYXAsaFU9bmV3IFdlYWtNYXAsdVU9bmV3IFdlYWtNYXAsZHQoemEsNCwibGFzdFNjYW5UaW1lc3RhbXAiLHdNdCxocixkVSksZHQoemEsNCwiaXNTY2FubmluZyIseE10LGhyLHBVKSxkdCh6YSw0LCJsYXN0UmVzdWx0Iix5TXQsaHIsaFUpLGR0KHphLDQsInN0YXR1c0Vycm9yIix2TXQsaHIsdVUpLGhyPWR0KHphLDAsIkdpdG9wc1ZpZXdBY3Rpb25zIix6TXQsaHIpLFV0KGhyLCJzdHlsZXMiLFtoLmRlZmF1bHRTdHlsZXMsYWEsUWAKICAgICAgLmFjdGlvbi1jYXJkcyB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDsKICAgICAgfQogICAgICAuYWN0aW9uLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI4cHg7CiAgICAgIH0KICAgICAgLmFjdGlvbi1jYXJkLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgICAgLmFjdGlvbi1jYXJkLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CiAgICAgIC5pbmZvLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNDBweCAxZnI7CiAgICAgICAgZ2FwOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgICAuaW5mby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KICAgICAgLmluZm8tdmFsdWUgewogICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgLmluZm8tdmFsdWUuc2Nhbm5pbmcgewogICAgICAgIGNvbG9yOiAjZjBjMDQwOwogICAgICB9CiAgICAgIC5pbmZvLXZhbHVlLmVycm9yIHsKICAgICAgICBjb2xvcjogI2ZmNjA2MDsKICAgICAgfQogICAgICAuYnV0dG9uLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICAuZXJyb3JzLWxpc3QgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgbWF4LWhlaWdodDogMTYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICNmZjgwODA7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAwLCAwLCAwLjA1KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KICAgIGBdKSxSZSh6YSwxLGhyKX0pO2tpKCk7YXdhaXQgUXIoKTtDdygpO3VlKCk7dmFyIFNNdCxDTXQsX010LFRNdCxybixtVSxnVTtUTXQ9W3BlKCJnaXRvcHMtZGFzaGJvYXJkIildO3ZhciBDbz1jbGFzcyBleHRlbmRzKF9NdD14ZSxDTXQ9W0soKV0sU010PVtLKCldLF9NdCl7Y29uc3RydWN0b3IoKXtzdXBlcigpO1N0KHRoaXMsbVUsUmUocm4sOCx0aGlzLHtpZGVudGl0eTpudWxsLGlzTG9nZ2VkSW46ITF9KSksUmUocm4sMTEsdGhpcyk7U3QodGhpcyxnVSxSZShybiwxMix0aGlzLHthY3RpdmVWaWV3OiJvdmVydmlldyIsYXV0b1JlZnJlc2g6ITAscmVmcmVzaEludGVydmFsOjNlNH0pKSxSZShybiwxNSx0aGlzKTtVdCh0aGlzLCJ2aWV3VGFicyIsW3tuYW1lOiJPdmVydmlldyIsaWNvbk5hbWU6Imx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLGVsZW1lbnQ6KGFzeW5jKCk9Pihhd2FpdCBOaigpLnRoZW4oKCk9PkR3dCkpLkdpdG9wc1ZpZXdPdmVydmlldykoKX0se25hbWU6IkNvbm5lY3Rpb25zIixpY29uTmFtZToibHVjaWRlOnBsdWciLGVsZW1lbnQ6KGFzeW5jKCk9Pihhd2FpdCBPaigpLnRoZW4oKCk9Pk53dCkpLkdpdG9wc1ZpZXdDb25uZWN0aW9ucykoKX0se25hbWU6IlByb2plY3RzIixpY29uTmFtZToibHVjaWRlOmZvbGRlckdpdDIiLGVsZW1lbnQ6KGFzeW5jKCk9Pihhd2FpdCBxaigpLnRoZW4oKCk9PnF3dCkpLkdpdG9wc1ZpZXdQcm9qZWN0cykoKX0se25hbWU6Ikdyb3VwcyIsaWNvbk5hbWU6Imx1Y2lkZTp1c2VycyIsZWxlbWVudDooYXN5bmMoKT0+KGF3YWl0IFdqKCkudGhlbigoKT0+WXd0KSkuR2l0b3BzVmlld0dyb3VwcykoKX0se25hbWU6IlNlY3JldHMiLGljb25OYW1lOiJsdWNpZGU6a2V5IixlbGVtZW50Oihhc3luYygpPT4oYXdhaXQgUWooKS50aGVuKCgpPT5hTXQpKS5HaXRvcHNWaWV3U2VjcmV0cykoKX0se25hbWU6IlBpcGVsaW5lcyIsaWNvbk5hbWU6Imx1Y2lkZTpwbGF5IixlbGVtZW50Oihhc3luYygpPT4oYXdhaXQgaVUoKS50aGVuKCgpPT5jTXQpKS5HaXRvcHNWaWV3UGlwZWxpbmVzKSgpfSx7bmFtZToiQnVpbGQgTG9nIixpY29uTmFtZToibHVjaWRlOnNjcm9sbFRleHQiLGVsZW1lbnQ6KGFzeW5jKCk9Pihhd2FpdCBjVSgpLnRoZW4oKCk9PmJNdCkpLkdpdG9wc1ZpZXdCdWlsZGxvZykoKX0se25hbWU6IkFjdGlvbnMiLGljb25OYW1lOiJsdWNpZGU6emFwIixlbGVtZW50Oihhc3luYygpPT4oYXdhaXQgZlUoKS50aGVuKCgpPT5rTXQpKS5HaXRvcHNWaWV3QWN0aW9ucykoKX1dKTtVdCh0aGlzLCJyZXNvbHZlZFZpZXdUYWJzIixbXSk7VXQodGhpcywiYXV0b1JlZnJlc2hUaW1lciIsbnVsbCk7VXQodGhpcywid3MiLG51bGwpO1V0KHRoaXMsIndzUmVjb25uZWN0VGltZXIiLG51bGwpO1V0KHRoaXMsIndzSW50ZW50aW9uYWxDbG9zZSIsITEpO2RvY3VtZW50LnRpdGxlPSJHaXRPcHMiO2xldCBhPXRpLnNlbGVjdChyPT5yKS5zdWJzY3JpYmUocj0+e3RoaXMubG9naW5TdGF0ZT1yLHIuaXNMb2dnZWRJbj8oRnQuZGlzcGF0Y2hBY3Rpb24odGEsbnVsbCksdGhpcy5jb25uZWN0V2ViU29ja2V0KCkpOnRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpLHRoaXMubWFuYWdlQXV0b1JlZnJlc2hUaW1lcigpfSk7dGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChhKTtsZXQgaT1TaS5zZWxlY3Qocj0+cikuc3Vic2NyaWJlKHI9Pnt0aGlzLnVpU3RhdGU9cix0aGlzLnN5bmNBcHBkYXNoVmlldyhyLmFjdGl2ZVZpZXcpLHRoaXMubWFuYWdlQXV0b1JlZnJlc2hUaW1lcigpfSk7dGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChpKX1yZW5kZXIoKXtyZXR1cm4gd2AKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRlZXMtc2ltcGxlLWxvZ2luIG5hbWU9IkdpdE9wcyI+CiAgICAgICAgICA8ZGVlcy1zaW1wbGUtYXBwZGFzaAogICAgICAgICAgICBuYW1lPSJHaXRPcHMiCiAgICAgICAgICAgIC52aWV3VGFicz0ke3RoaXMucmVzb2x2ZWRWaWV3VGFic30KICAgICAgICAgID4KICAgICAgICAgIDwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICAgICAgICA8L2RlZXMtc2ltcGxlLWxvZ2luPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmxvZ2luU3RhdGUuaXNMb2dnZWRJbj93YAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhdXRvLXJlZnJlc2gtdG9nZ2xlIgogICAgICAgICAgQGNsaWNrPSR7KCk9PlNpLmRpc3BhdGNoQWN0aW9uKEN3dCxudWxsKX0KICAgICAgICA+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0by1yZWZyZXNoLWRvdCAke3RoaXMudWlTdGF0ZS5hdXRvUmVmcmVzaD8iYWN0aXZlIjoiIn0iPjwvc3Bhbj4KICAgICAgICAgIEF1dG8tUmVmcmVzaDogJHt0aGlzLnVpU3RhdGUuYXV0b1JlZnJlc2g/Ik9OIjoiT0ZGIn0KICAgICAgICA8L2Rpdj4KICAgICAgYDoiIn0KICAgIGB9YXN5bmMgZmlyc3RVcGRhdGVkKCl7dGhpcy5yZXNvbHZlZFZpZXdUYWJzPWF3YWl0IFByb21pc2UuYWxsKHRoaXMudmlld1RhYnMubWFwKGFzeW5jIHM9Pih7bmFtZTpzLm5hbWUsaWNvbk5hbWU6cy5pY29uTmFtZSxlbGVtZW50OmF3YWl0IHMuZWxlbWVudH0pKSksdGhpcy5yZXF1ZXN0VXBkYXRlKCksYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtsZXQgYT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1zaW1wbGUtbG9naW4iKTthJiZhLmFkZEV2ZW50TGlzdGVuZXIoImxvZ2luIixzPT57dGhpcy5sb2dpbihzLmRldGFpbC5kYXRhLnVzZXJuYW1lLHMuZGV0YWlsLmRhdGEucGFzc3dvcmQpfSk7bGV0IGk9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc2ltcGxlLWFwcGRhc2giKTtpZihpJiYoaS5hZGRFdmVudExpc3RlbmVyKCJ2aWV3LXNlbGVjdCIscz0+e2xldCBuPXMuZGV0YWlsLnZpZXcubmFtZS50b0xvd2VyQ2FzZSgpO1NpLmRpc3BhdGNoQWN0aW9uKHc0LHt2aWV3Om59KX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibG9nb3V0Iixhc3luYygpPT57YXdhaXQgdGkuZGlzcGF0Y2hBY3Rpb24oY2QsbnVsbCl9KSksaSYmdGhpcy5yZXNvbHZlZFZpZXdUYWJzLmxlbmd0aD4wKXtsZXQgcz10aGlzLnJlc29sdmVkVmlld1RhYnMuZmluZChuPT5uLm5hbWUudG9Mb3dlckNhc2UoKT09PXRoaXMudWlTdGF0ZS5hY3RpdmVWaWV3KXx8dGhpcy5yZXNvbHZlZFZpZXdUYWJzWzBdO2F3YWl0IGkubG9hZFZpZXcocyl9bGV0IHI9dGkuZ2V0U3RhdGUoKTtpZihyLmlkZW50aXR5Py5qd3QpaWYoci5pZGVudGl0eS5leHBpcmVzQXQ+RGF0ZS5ub3coKSl0cnl7KGF3YWl0IG5ldyBYdC5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCJ2ZXJpZnlJZGVudGl0eSIpLmZpcmUoe2lkZW50aXR5OnIuaWRlbnRpdHl9KSkudmFsaWQ/KHRoaXMubG9naW5TdGF0ZT1yLGEmJmF3YWl0IGEuc3dpdGNoVG9TbG90dGVkQ29udGVudCgpKTphd2FpdCB0aS5kaXNwYXRjaEFjdGlvbihjZCxudWxsKX1jYXRjaChzKXtjb25zb2xlLndhcm4oIlN0b3JlZCBzZXNzaW9uIGludmFsaWQsIHJldHVybmluZyB0byBsb2dpbjoiLHMpLGF3YWl0IHRpLmRpc3BhdGNoQWN0aW9uKGNkLG51bGwpfWVsc2UgYXdhaXQgdGkuZGlzcGF0Y2hBY3Rpb24oY2QsbnVsbCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY2xlYXJBdXRvUmVmcmVzaFRpbWVyKCksdGhpcy5kaXNjb25uZWN0V2ViU29ja2V0KCl9bWFuYWdlQXV0b1JlZnJlc2hUaW1lcigpe3RoaXMuY2xlYXJBdXRvUmVmcmVzaFRpbWVyKCk7bGV0e2F1dG9SZWZyZXNoOmEscmVmcmVzaEludGVydmFsOml9PXRoaXMudWlTdGF0ZTthJiZ0aGlzLmxvZ2luU3RhdGUuaXNMb2dnZWRJbiYmKHRoaXMuYXV0b1JlZnJlc2hUaW1lcj1zZXRJbnRlcnZhbCgoKT0+e2RvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJnaXRvcHMtYXV0by1yZWZyZXNoIikpfSxpKSl9Y2xlYXJBdXRvUmVmcmVzaFRpbWVyKCl7dGhpcy5hdXRvUmVmcmVzaFRpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9SZWZyZXNoVGltZXIpLHRoaXMuYXV0b1JlZnJlc2hUaW1lcj1udWxsKX1jb25uZWN0V2ViU29ja2V0KCl7aWYodGhpcy53cylyZXR1cm47bGV0IGk9YCR7bG9jYXRpb24ucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiJ9Ly8ke2xvY2F0aW9uLmhvc3R9YDt0cnl7dGhpcy53c0ludGVudGlvbmFsQ2xvc2U9ITEsdGhpcy53cz1uZXcgV2ViU29ja2V0KGkpLHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscj0+e3RyeXtsZXQgcz1KU09OLnBhcnNlKHIuZGF0YSk7KHM/Lm1ldGhvZD09PSJ3ZWJob29rTm90aWZpY2F0aW9uInx8cz8udHlwZT09PSJ3ZWJob29rRXZlbnQiKSYmKGNvbnNvbGUubG9nKCJXZWJob29rIGV2ZW50IHJlY2VpdmVkOiIscyksZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImdpdG9wcy1hdXRvLXJlZnJlc2giKSkpfWNhdGNoe319KSx0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwoKT0+e3RoaXMud3M9bnVsbCwhdGhpcy53c0ludGVudGlvbmFsQ2xvc2UmJnRoaXMubG9naW5TdGF0ZS5pc0xvZ2dlZEluJiYodGhpcy53c1JlY29ubmVjdFRpbWVyPXNldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKX0sNWUzKSl9KSx0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e30pfWNhdGNoKHIpe2NvbnNvbGUud2FybigiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkOiIscil9fWRpc2Nvbm5lY3RXZWJTb2NrZXQoKXt0aGlzLndzSW50ZW50aW9uYWxDbG9zZT0hMCx0aGlzLndzUmVjb25uZWN0VGltZXImJihjbGVhclRpbWVvdXQodGhpcy53c1JlY29ubmVjdFRpbWVyKSx0aGlzLndzUmVjb25uZWN0VGltZXI9bnVsbCksdGhpcy53cyYmKHRoaXMud3MuY2xvc2UoKSx0aGlzLndzPW51bGwpfWFzeW5jIGxvZ2luKGEsaSl7bGV0IHI9YXdhaXQgdGhpcy5kb210b29sc1Byb21pc2Uscz10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1zaW1wbGUtbG9naW4iKSxuPXM/LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpO24mJm4uc2V0U3RhdHVzKCJwZW5kaW5nIiwiTG9nZ2luZyBpbi4uLiIpLChhd2FpdCB0aS5kaXNwYXRjaEFjdGlvbih1d3Qse3VzZXJuYW1lOmEscGFzc3dvcmQ6aX0pKS5pZGVudGl0eT8obiYmbi5zZXRTdGF0dXMoInN1Y2Nlc3MiLCJMb2dnZWQgaW4hIikscyYmYXdhaXQgcy5zd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCkpOm4mJihuLnNldFN0YXR1cygiZXJyb3IiLCJMb2dpbiBmYWlsZWQhIiksYXdhaXQgci5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyksbi5yZXNldCgpKX1zeW5jQXBwZGFzaFZpZXcoYSl7bGV0IGk9dGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXNpbXBsZS1hcHBkYXNoIik7aWYoIWl8fHRoaXMucmVzb2x2ZWRWaWV3VGFicy5sZW5ndGg9PT0wKXJldHVybjtsZXQgcj10aGlzLnJlc29sdmVkVmlld1RhYnMuZmluZChzPT5zLm5hbWUudG9Mb3dlckNhc2UoKT09PWEpO3ImJmkubG9hZFZpZXcocil9fTtybj1jMihfTXQpLG1VPW5ldyBXZWFrTWFwLGdVPW5ldyBXZWFrTWFwLGR0KHJuLDQsImxvZ2luU3RhdGUiLENNdCxDbyxtVSksZHQocm4sNCwidWlTdGF0ZSIsU010LENvLGdVKSxDbz1kdChybiwwLCJHaXRvcHNEYXNoYm9hcmQiLFRNdCxDbyksVXQoQ28sInN0eWxlcyIsW2guZGVmYXVsdFN0eWxlcyxRYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYm90dG9tOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDUwLCAwLjkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDE0cHg7CiAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDQwLCA0MCwgNzAsIDAuOTUpOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjNjY2OwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtZG90LmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwZmY4ODsKICAgICAgfQogICAgYF0pLFJlKHJuLDEsQ28pO2F3YWl0IE5qKCk7YXdhaXQgT2ooKTthd2FpdCBxaigpO2F3YWl0IFdqKCk7YXdhaXQgUWooKTthd2FpdCBpVSgpO2F3YWl0IGNVKCk7YXdhaXQgZlUoKTtraSgpO3VlKCk7TTUucmVuZGVyKHdgCiAgPGdpdG9wcy1kYXNoYm9hcmQ+PC9naXRvcHMtZGFzaGJvYXJkPgpgLGRvY3VtZW50LmJvZHkpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3JlYWN0aXZlLWVsZW1lbnQuanM6CmxpdC1odG1sL2xpdC1odG1sLmpzOgpsaXQtZWxlbWVudC9saXQtZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcHJvcGVydHkuanM6CmxpdC1odG1sL2RpcmVjdGl2ZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3N0YXRlLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9iYXNlLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanM6CmxpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy91bnRpbC5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1yZXBsYWNlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9yZXBlYXQuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKbGl0LWh0bWwvaXMtc2VydmVyLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCnN3ZWV0LXNjcm9sbC9zd2VldC1zY3JvbGwuanM6CiAgKCohIEBwcmVzZXJ2ZSBzd2VldC1zY3JvbGwgdjQuMC4wIC0gdHN1eW9zaGl3YWRhIHwgTUlUIExpY2Vuc2UgKikKICAoKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgICAgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUKICAgICAgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAKICAgICAgVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogICAgICBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECiAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICAgIE1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCiAgCiAgICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICopCgpsaXQtaHRtbC9zdGF0aWMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3ByaXZhdGUtYXN5bmMtaGVscGVycy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9rZXllZC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1icmFuZHMtc3ZnLWljb25zL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvaW5kZXgubWpzOgogICgqIQogICAqIEZvbnQgQXdlc29tZSBGcmVlIDcuMi4wIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tCiAgICogTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSkKICAgKiBDb3B5cmlnaHQgMjAyNiBGb250aWNvbnMsIEluYy4KICAgKikKCmx1Y2lkZS9kaXN0L2Nqcy9sdWNpZGUuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgbHVjaWRlIHYwLjU2NC4wIC0gSVNDCiAgICoKICAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICAgKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCmliYW50b29scy9qc25leHQvaWJhbnRvb2xzLmpzOgogICgqIQogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IFNhxaFhIEpvdmFuacSHCiAgICogTGljZW5zZWQgdW5kZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wIG9yIHRoZSBNSVQgbGljZW5zZSwKICAgKiBhdCB5b3VyIG9wdGlvbi4gVGhpcyBmaWxlIG1heSBub3QgYmUgY29waWVkLCBtb2RpZmllZCwgb3IgZGlzdHJpYnV0ZWQKICAgKiBleGNlcHQgYWNjb3JkaW5nIHRvIHRob3NlIHRlcm1zLgogICAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFNhxaFhIEpvdmFuacSHCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCBvciBNUEwvMi4wCiAgICopCiAgKCoqCiAgICogVmFsaWRhdGlvbiwgZXh0cmFjdGlvbiBhbmQgY3JlYXRpb24gb2YgSUJBTiwgQkJBTiwgQklDL1NXSUZUIG51bWJlcnMgcGx1cyBzb21lIG90aGVyIGhlbHBmdWwgc3R1ZmYKICAgKiBAcGFja2FnZSBEb2N1bWVudGF0aW9uCiAgICogQGF1dGhvciBTYcWhYSBKb3ZhbmnEhwogICAqIEBtb2R1bGUgaWJhbnRvb2xzCiAgICogQHZlcnNpb24gNC41LjEKICAgKiBAbGljZW5zZSBNSVQgb3IgTVBMLTIuMAogICAqIEBwcmVmZXJyZWQKICAgKikKKi8KLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLTE3NzE5NzMwMTMxMTAuanMubWFwCg==" + "contentBase64": "dmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKdmFyIF9fZnJlZXplID0gT2JqZWN0LmZyZWV6ZTsKdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKdmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBfX2tub3duU3ltYm9sID0gKG5hbWUsIHN5bWJvbCkgPT4gKHN5bWJvbCA9IFN5bWJvbFtuYW1lXSkgPyBzeW1ib2wgOiAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiU3ltYm9sLiIgKyBuYW1lKTsKdmFyIF9fdHlwZUVycm9yID0gKG1zZykgPT4gewogIHRocm93IFR5cGVFcnJvcihtc2cpOwp9Owp2YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBrZXkyIGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleTIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlMiB9KSA6IG9ialtrZXkyXSA9IHZhbHVlMjsKdmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlMikgPT4gX19kZWZQcm9wKHRhcmdldCwgIm5hbWUiLCB7IHZhbHVlOiB2YWx1ZTIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKdmFyIF9fcmVxdWlyZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHg0KSA9PiB0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIgPyByZXF1aXJlIDogdHlwZW9mIFByb3h5ICE9PSAidW5kZWZpbmVkIiA/IG5ldyBQcm94eSh4NCwgewogIGdldDogKGE1LCBiNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNSlbYjVdCn0pIDogeDQpKGZ1bmN0aW9uKHg0KSB7CiAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgeDQgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7Cn0pOwp2YXIgX19lc20gPSAoZm4sIHJlcykgPT4gZnVuY3Rpb24gX19pbml0KCkgewogIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7Cn07CnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZTIoKSB7CiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7Cn07CnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKfTsKdmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tMiwgZXhjZXB0LCBkZXNjKSA9PiB7CiAgaWYgKGZyb20yICYmIHR5cGVvZiBmcm9tMiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGZyb20yID09PSAiZnVuY3Rpb24iKSB7CiAgICBmb3IgKGxldCBrZXkyIG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20yKSkKICAgICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5MikgJiYga2V5MiAhPT0gZXhjZXB0KQogICAgICAgIF9fZGVmUHJvcCh0bywga2V5MiwgeyBnZXQ6ICgpID0+IGZyb20yW2tleTJdLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20yLCBrZXkyKSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogIH0KICByZXR1cm4gdG87Cn07CnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoCiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTQogIC8vIGZpbGUgdGhhdCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gYSBDb21tb25KUyBmaWxlIHVzaW5nIGEgQmFiZWwtCiAgLy8gY29tcGF0aWJsZSB0cmFuc2Zvcm0gKGkuZS4gIl9fZXNNb2R1bGUiIGhhcyBub3QgYmVlbiBzZXQpLCB0aGVuIHNldAogIC8vICJkZWZhdWx0IiB0byB0aGUgQ29tbW9uSlMgIm1vZHVsZS5leHBvcnRzIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LgogIGlzTm9kZU1vZGUgfHwgIW1vZCB8fCAhbW9kLl9fZXNNb2R1bGUgPyBfX2RlZlByb3AodGFyZ2V0LCAiZGVmYXVsdCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCwKICBtb2QKKSk7CnZhciBfX2RlY29yYXRvclN0YXJ0ID0gKGJhc2UpID0+IFssICwgLCBfX2NyZWF0ZShiYXNlPy5bX19rbm93blN5bWJvbCgibWV0YWRhdGEiKV0gPz8gbnVsbCldOwp2YXIgX19kZWNvcmF0b3JTdHJpbmdzID0gWyJjbGFzcyIsICJtZXRob2QiLCAiZ2V0dGVyIiwgInNldHRlciIsICJhY2Nlc3NvciIsICJmaWVsZCIsICJ2YWx1ZSIsICJnZXQiLCAic2V0Il07CnZhciBfX2V4cGVjdEZuID0gKGZuKSA9PiBmbiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmbiAhPT0gImZ1bmN0aW9uIiA/IF9fdHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpIDogZm47CnZhciBfX2RlY29yYXRvckNvbnRleHQgPSAoa2luZCwgbmFtZSwgZG9uZSwgbWV0YWRhdGEsIGZucykgPT4gKHsga2luZDogX19kZWNvcmF0b3JTdHJpbmdzW2tpbmRdLCBuYW1lLCBtZXRhZGF0YSwgYWRkSW5pdGlhbGl6ZXI6IChmbikgPT4gZG9uZS5fID8gX190eXBlRXJyb3IoIkFscmVhZHkgaW5pdGlhbGl6ZWQiKSA6IGZucy5wdXNoKF9fZXhwZWN0Rm4oZm4gfHwgbnVsbCkpIH0pOwp2YXIgX19kZWNvcmF0b3JNZXRhZGF0YSA9IChhcnJheSwgdGFyZ2V0KSA9PiBfX2RlZk5vcm1hbFByb3AodGFyZ2V0LCBfX2tub3duU3ltYm9sKCJtZXRhZGF0YSIpLCBhcnJheVszXSk7CnZhciBfX3J1bkluaXRpYWxpemVycyA9IChhcnJheSwgZmxhZ3MsIHNlbGYyLCB2YWx1ZTIpID0+IHsKICBmb3IgKHZhciBpMTEgPSAwLCBmbnMgPSBhcnJheVtmbGFncyA+PiAxXSwgbjEyID0gZm5zICYmIGZucy5sZW5ndGg7IGkxMSA8IG4xMjsgaTExKyspIGZsYWdzICYgMSA/IGZuc1tpMTFdLmNhbGwoc2VsZjIpIDogdmFsdWUyID0gZm5zW2kxMV0uY2FsbChzZWxmMiwgdmFsdWUyKTsKICByZXR1cm4gdmFsdWUyOwp9Owp2YXIgX19kZWNvcmF0ZUVsZW1lbnQgPSAoYXJyYXksIGZsYWdzLCBuYW1lLCBkZWNvcmF0b3JzLCB0YXJnZXQsIGV4dHJhKSA9PiB7CiAgdmFyIGZuLCBpdCwgZG9uZSwgY3R4LCBhY2Nlc3MsIGs0ID0gZmxhZ3MgJiA3LCBzMTAgPSAhIShmbGFncyAmIDgpLCBwNyA9ICEhKGZsYWdzICYgMTYpOwogIHZhciBqNCA9IGs0ID4gMyA/IGFycmF5Lmxlbmd0aCArIDEgOiBrNCA/IHMxMCA/IDEgOiAyIDogMCwga2V5MiA9IF9fZGVjb3JhdG9yU3RyaW5nc1trNCArIDVdOwogIHZhciBpbml0aWFsaXplcnMgPSBrNCA+IDMgJiYgKGFycmF5W2o0IC0gMV0gPSBbXSksIGV4dHJhSW5pdGlhbGl6ZXJzID0gYXJyYXlbajRdIHx8IChhcnJheVtqNF0gPSBbXSk7CiAgdmFyIGRlc2MgPSBrNCAmJiAoIXA3ICYmICFzMTAgJiYgKHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGUpLCBrNCA8IDUgJiYgKGs0ID4gMyB8fCAhcDcpICYmIF9fZ2V0T3duUHJvcERlc2MoazQgPCA0ID8gdGFyZ2V0IDogeyBnZXQgW25hbWVdKCkgewogICAgcmV0dXJuIF9fcHJpdmF0ZUdldCh0aGlzLCBleHRyYSk7CiAgfSwgc2V0IFtuYW1lXSh4NCkgewogICAgcmV0dXJuIF9fcHJpdmF0ZVNldCh0aGlzLCBleHRyYSwgeDQpOwogIH0gfSwgbmFtZSkpOwogIGs0ID8gcDcgJiYgazQgPCA0ICYmIF9fbmFtZShleHRyYSwgKGs0ID4gMiA/ICJzZXQgIiA6IGs0ID4gMSA/ICJnZXQgIiA6ICIiKSArIG5hbWUpIDogX19uYW1lKHRhcmdldCwgbmFtZSk7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIGN0eCA9IF9fZGVjb3JhdG9yQ29udGV4dChrNCwgbmFtZSwgZG9uZSA9IHt9LCBhcnJheVszXSwgZXh0cmFJbml0aWFsaXplcnMpOwogICAgaWYgKGs0KSB7CiAgICAgIGN0eC5zdGF0aWMgPSBzMTAsIGN0eC5wcml2YXRlID0gcDcsIGFjY2VzcyA9IGN0eC5hY2Nlc3MgPSB7IGhhczogcDcgPyAoeDQpID0+IF9fcHJpdmF0ZUluKHRhcmdldCwgeDQpIDogKHg0KSA9PiBuYW1lIGluIHg0IH07CiAgICAgIGlmIChrNCBeIDMpIGFjY2Vzcy5nZXQgPSBwNyA/ICh4NCkgPT4gKGs0IF4gMSA/IF9fcHJpdmF0ZUdldCA6IF9fcHJpdmF0ZU1ldGhvZCkoeDQsIHRhcmdldCwgazQgXiA0ID8gZXh0cmEgOiBkZXNjLmdldCkgOiAoeDQpID0+IHg0W25hbWVdOwogICAgICBpZiAoazQgPiAyKSBhY2Nlc3Muc2V0ID0gcDcgPyAoeDQsIHk0KSA9PiBfX3ByaXZhdGVTZXQoeDQsIHRhcmdldCwgeTQsIGs0IF4gNCA/IGV4dHJhIDogZGVzYy5zZXQpIDogKHg0LCB5NCkgPT4geDRbbmFtZV0gPSB5NDsKICAgIH0KICAgIGl0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoazQgPyBrNCA8IDQgPyBwNyA/IGV4dHJhIDogZGVzY1trZXkyXSA6IGs0ID4gNCA/IHZvaWQgMCA6IHsgZ2V0OiBkZXNjLmdldCwgc2V0OiBkZXNjLnNldCB9IDogdGFyZ2V0LCBjdHgpLCBkb25lLl8gPSAxOwogICAgaWYgKGs0IF4gNCB8fCBpdCA9PT0gdm9pZCAwKSBfX2V4cGVjdEZuKGl0KSAmJiAoazQgPiA0ID8gaW5pdGlhbGl6ZXJzLnVuc2hpZnQoaXQpIDogazQgPyBwNyA/IGV4dHJhID0gaXQgOiBkZXNjW2tleTJdID0gaXQgOiB0YXJnZXQgPSBpdCk7CiAgICBlbHNlIGlmICh0eXBlb2YgaXQgIT09ICJvYmplY3QiIHx8IGl0ID09PSBudWxsKSBfX3R5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICBlbHNlIF9fZXhwZWN0Rm4oZm4gPSBpdC5nZXQpICYmIChkZXNjLmdldCA9IGZuKSwgX19leHBlY3RGbihmbiA9IGl0LnNldCkgJiYgKGRlc2Muc2V0ID0gZm4pLCBfX2V4cGVjdEZuKGZuID0gaXQuaW5pdCkgJiYgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoZm4pOwogIH0KICByZXR1cm4gazQgfHwgX19kZWNvcmF0b3JNZXRhZGF0YShhcnJheSwgdGFyZ2V0KSwgZGVzYyAmJiBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCBkZXNjKSwgcDcgPyBrNCBeIDQgPyBleHRyYSA6IGRlc2MgOiB0YXJnZXQ7Cn07CnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBfX2RlZk5vcm1hbFByb3Aob2JqLCB0eXBlb2Yga2V5MiAhPT0gInN5bWJvbCIgPyBrZXkyICsgIiIgOiBrZXkyLCB2YWx1ZTIpOwp2YXIgX19hY2Nlc3NDaGVjayA9IChvYmosIG1lbWJlciwgbXNnKSA9PiBtZW1iZXIuaGFzKG9iaikgfHwgX190eXBlRXJyb3IoIkNhbm5vdCAiICsgbXNnKTsKdmFyIF9fcHJpdmF0ZUluID0gKG1lbWJlciwgb2JqKSA9PiBPYmplY3Qob2JqKSAhPT0gb2JqID8gX190eXBlRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpIDogbWVtYmVyLmhhcyhvYmopOwp2YXIgX19wcml2YXRlR2V0ID0gKG9iaiwgbWVtYmVyLCBnZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSk7CnZhciBfX3ByaXZhdGVBZGQgPSAob2JqLCBtZW1iZXIsIHZhbHVlMikgPT4gbWVtYmVyLmhhcyhvYmopID8gX190eXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZVNldCA9IChvYmosIG1lbWJlciwgdmFsdWUyLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLCBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlMikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKSwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZU1ldGhvZCA9IChvYmosIG1lbWJlciwgbWV0aG9kKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLCBtZXRob2QpOwp2YXIgX190ZW1wbGF0ZSA9IChjb29rZWQsIHJhdzIpID0+IF9fZnJlZXplKF9fZGVmUHJvcChjb29rZWQsICJyYXciLCB7IHZhbHVlOiBfX2ZyZWV6ZShyYXcyIHx8IGNvb2tlZC5zbGljZSgpKSB9KSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qcwp2YXIgdCwgZSwgcywgbywgbiwgciwgaSwgUywgYzsKdmFyIGluaXRfY3NzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanMiKCkgewogICAgdCA9IGdsb2JhbFRoaXMsIGUgPSB0LlNoYWRvd1Jvb3QgJiYgKHZvaWQgMCA9PT0gdC5TaGFkeUNTUyB8fCB0LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykgJiYgImFkb3B0ZWRTdHlsZVNoZWV0cyIgaW4gRG9jdW1lbnQucHJvdG90eXBlICYmICJyZXBsYWNlIiBpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgbiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSwgbzEzKSB7CiAgICAgICAgaWYgKHRoaXMuXyRjc3NSZXN1bHQkID0gdHJ1ZSwgbzEzICE9PSBzKSB0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTsKICAgICAgICB0aGlzLmNzc1RleHQgPSB0OSwgdGhpcy50ID0gZTExOwogICAgICB9CiAgICAgIGdldCBzdHlsZVNoZWV0KCkgewogICAgICAgIGxldCB0OSA9IHRoaXMubzsKICAgICAgICBjb25zdCBzMTAgPSB0aGlzLnQ7CiAgICAgICAgaWYgKGUgJiYgdm9pZCAwID09PSB0OSkgewogICAgICAgICAgY29uc3QgZTExID0gdm9pZCAwICE9PSBzMTAgJiYgMSA9PT0gczEwLmxlbmd0aDsKICAgICAgICAgIGUxMSAmJiAodDkgPSBvLmdldChzMTApKSwgdm9pZCAwID09PSB0OSAmJiAoKHRoaXMubyA9IHQ5ID0gbmV3IENTU1N0eWxlU2hlZXQoKSkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSwgZTExICYmIG8uc2V0KHMxMCwgdDkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHQ5OwogICAgICB9CiAgICAgIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLmNzc1RleHQ7CiAgICAgIH0KICAgIH07CiAgICByID0gKHQ5KSA9PiBuZXcgbigic3RyaW5nIiA9PSB0eXBlb2YgdDkgPyB0OSA6IHQ5ICsgIiIsIHZvaWQgMCwgcyksIGkgPSAodDksIC4uLmUxMSkgPT4gewogICAgICBjb25zdCBvMTMgPSAxID09PSB0OS5sZW5ndGggPyB0OVswXSA6IGUxMS5yZWR1Y2UoKGUxMiwgczEwLCBvMTQpID0+IGUxMiArICgodDEwKSA9PiB7CiAgICAgICAgaWYgKHRydWUgPT09IHQxMC5fJGNzc1Jlc3VsdCQpIHJldHVybiB0MTAuY3NzVGV4dDsKICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIHQxMCkgcmV0dXJuIHQxMDsKICAgICAgICB0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIgKyB0MTAgKyAiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIik7CiAgICAgIH0pKHMxMCkgKyB0OVtvMTQgKyAxXSwgdDlbMF0pOwogICAgICByZXR1cm4gbmV3IG4obzEzLCB0OSwgcyk7CiAgICB9LCBTID0gKHMxMCwgbzEzKSA9PiB7CiAgICAgIGlmIChlKSBzMTAuYWRvcHRlZFN0eWxlU2hlZXRzID0gbzEzLm1hcCgodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/IHQ5IDogdDkuc3R5bGVTaGVldCk7CiAgICAgIGVsc2UgZm9yIChjb25zdCBlMTEgb2YgbzEzKSB7CiAgICAgICAgY29uc3QgbzE0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwgbjEyID0gdC5saXROb25jZTsKICAgICAgICB2b2lkIDAgIT09IG4xMiAmJiBvMTQuc2V0QXR0cmlidXRlKCJub25jZSIsIG4xMiksIG8xNC50ZXh0Q29udGVudCA9IGUxMS5jc3NUZXh0LCBzMTAuYXBwZW5kQ2hpbGQobzE0KTsKICAgICAgfQogICAgfSwgYyA9IGUgPyAodDkpID0+IHQ5IDogKHQ5KSA9PiB0OSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQgPyAoKHQxMCkgPT4gewogICAgICBsZXQgZTExID0gIiI7CiAgICAgIGZvciAoY29uc3QgczEwIG9mIHQxMC5jc3NSdWxlcykgZTExICs9IHMxMC5jc3NUZXh0OwogICAgICByZXR1cm4gcihlMTEpOwogICAgfSkodDkpIDogdDk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzCnZhciBpMiwgZTIsIGgsIHIyLCBvMiwgbjIsIGEsIGMyLCBsLCBwLCBkLCB1LCBmLCBiLCB5Owp2YXIgaW5pdF9yZWFjdGl2ZV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Nzc190YWcoKTsKICAgIGluaXRfY3NzX3RhZygpOwogICAgKHsgaXM6IGkyLCBkZWZpbmVQcm9wZXJ0eTogZTIsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogaCwgZ2V0T3duUHJvcGVydHlOYW1lczogcjIsIGdldE93blByb3BlcnR5U3ltYm9sczogbzIsIGdldFByb3RvdHlwZU9mOiBuMiB9ID0gT2JqZWN0KSwgYSA9IGdsb2JhbFRoaXMsIGMyID0gYS50cnVzdGVkVHlwZXMsIGwgPSBjMiA/IGMyLmVtcHR5U2NyaXB0IDogIiIsIHAgPSBhLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCwgZCA9ICh0OSwgczEwKSA9PiB0OSwgdSA9IHsgdG9BdHRyaWJ1dGUodDksIHMxMCkgewogICAgICBzd2l0Y2ggKHMxMCkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIHQ5ID0gdDkgPyBsIDogbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0OSA9IG51bGwgPT0gdDkgPyB0OSA6IEpTT04uc3RyaW5naWZ5KHQ5KTsKICAgICAgfQogICAgICByZXR1cm4gdDk7CiAgICB9LCBmcm9tQXR0cmlidXRlKHQ5LCBzMTApIHsKICAgICAgbGV0IGkxMSA9IHQ5OwogICAgICBzd2l0Y2ggKHMxMCkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIGkxMSA9IG51bGwgIT09IHQ5OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBOdW1iZXI6CiAgICAgICAgICBpMTEgPSBudWxsID09PSB0OSA/IG51bGwgOiBOdW1iZXIodDkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBPYmplY3Q6CiAgICAgICAgY2FzZSBBcnJheToKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGkxMSA9IEpTT04ucGFyc2UodDkpOwogICAgICAgICAgfSBjYXRjaCAodDEwKSB7CiAgICAgICAgICAgIGkxMSA9IG51bGw7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGkxMTsKICAgIH0gfSwgZiA9ICh0OSwgczEwKSA9PiAhaTIodDksIHMxMCksIGIgPSB7IGF0dHJpYnV0ZTogdHJ1ZSwgdHlwZTogU3RyaW5nLCBjb252ZXJ0ZXI6IHUsIHJlZmxlY3Q6IGZhbHNlLCB1c2VEZWZhdWx0OiBmYWxzZSwgaGFzQ2hhbmdlZDogZiB9OwogICAgU3ltYm9sLm1ldGFkYXRhID8/PSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJtZXRhZGF0YSIpLCBhLmxpdFByb3BlcnR5TWV0YWRhdGEgPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgeSA9IGNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnQgewogICAgICBzdGF0aWMgYWRkSW5pdGlhbGl6ZXIodDkpIHsKICAgICAgICB0aGlzLl8kRWkoKSwgKHRoaXMubCA/Pz0gW10pLnB1c2godDkpOwogICAgICB9CiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgewogICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKCksIHRoaXMuXyRFaCAmJiBbLi4udGhpcy5fJEVoLmtleXMoKV07CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZVByb3BlcnR5KHQ5LCBzMTAgPSBiKSB7CiAgICAgICAgaWYgKHMxMC5zdGF0ZSAmJiAoczEwLmF0dHJpYnV0ZSA9IGZhbHNlKSwgdGhpcy5fJEVpKCksIHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KHQ5KSAmJiAoKHMxMCA9IE9iamVjdC5jcmVhdGUoczEwKSkud3JhcHBlZCA9IHRydWUpLCB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0OSwgczEwKSwgIXMxMC5ub0FjY2Vzc29yKSB7CiAgICAgICAgICBjb25zdCBpMTEgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCksIGg4ID0gdGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIGkxMSwgczEwKTsKICAgICAgICAgIHZvaWQgMCAhPT0gaDggJiYgZTIodGhpcy5wcm90b3R5cGUsIHQ5LCBoOCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIHMxMCwgaTExKSB7CiAgICAgICAgY29uc3QgeyBnZXQ6IGUxMSwgc2V0OiByMTEgfSA9IGgodGhpcy5wcm90b3R5cGUsIHQ5KSA/PyB7IGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzW3MxMF07CiAgICAgICAgfSwgc2V0KHQxMCkgewogICAgICAgICAgdGhpc1tzMTBdID0gdDEwOwogICAgICAgIH0gfTsKICAgICAgICByZXR1cm4geyBnZXQ6IGUxMSwgc2V0KHMxMSkgewogICAgICAgICAgY29uc3QgaDggPSBlMTE/LmNhbGwodGhpcyk7CiAgICAgICAgICByMTE/LmNhbGwodGhpcywgczExKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKHQ5LCBoOCwgaTExKTsKICAgICAgICB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KHQ5KSA/PyBiOwogICAgICB9CiAgICAgIHN0YXRpYyBfJEVpKCkgewogICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGQoImVsZW1lbnRQcm9wZXJ0aWVzIikpKSByZXR1cm47CiAgICAgICAgY29uc3QgdDkgPSBuMih0aGlzKTsKICAgICAgICB0OS5maW5hbGl6ZSgpLCB2b2lkIDAgIT09IHQ5LmwgJiYgKHRoaXMubCA9IFsuLi50OS5sXSksIHRoaXMuZWxlbWVudFByb3BlcnRpZXMgPSBuZXcgTWFwKHQ5LmVsZW1lbnRQcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZCgiZmluYWxpemVkIikpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkID0gdHJ1ZSwgdGhpcy5fJEVpKCksIHRoaXMuaGFzT3duUHJvcGVydHkoZCgicHJvcGVydGllcyIpKSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5wcm9wZXJ0aWVzLCBzMTAgPSBbLi4ucjIodDEwKSwgLi4ubzIodDEwKV07CiAgICAgICAgICBmb3IgKGNvbnN0IGkxMSBvZiBzMTApIHRoaXMuY3JlYXRlUHJvcGVydHkoaTExLCB0MTBbaTExXSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHQ5ID0gdGhpc1tTeW1ib2wubWV0YWRhdGFdOwogICAgICAgIGlmIChudWxsICE9PSB0OSkgewogICAgICAgICAgY29uc3QgczEwID0gbGl0UHJvcGVydHlNZXRhZGF0YS5nZXQodDkpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gczEwKSBmb3IgKGNvbnN0IFt0MTAsIGkxMV0gb2YgczEwKSB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0MTAsIGkxMSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuXyRFaCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgZm9yIChjb25zdCBbdDEwLCBzMTBdIG9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRFdSh0MTAsIHMxMCk7CiAgICAgICAgICB2b2lkIDAgIT09IGkxMSAmJiB0aGlzLl8kRWguc2V0KGkxMSwgdDEwKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzID0gdGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyk7CiAgICAgIH0KICAgICAgc3RhdGljIGZpbmFsaXplU3R5bGVzKHMxMCkgewogICAgICAgIGNvbnN0IGkxMSA9IFtdOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHMxMCkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IG5ldyBTZXQoczEwLmZsYXQoMSAvIDApLnJldmVyc2UoKSk7CiAgICAgICAgICBmb3IgKGNvbnN0IHMxMSBvZiBlMTEpIGkxMS51bnNoaWZ0KGMoczExKSk7CiAgICAgICAgfSBlbHNlIHZvaWQgMCAhPT0gczEwICYmIGkxMS5wdXNoKGMoczEwKSk7CiAgICAgICAgcmV0dXJuIGkxMTsKICAgICAgfQogICAgICBzdGF0aWMgXyRFdSh0OSwgczEwKSB7CiAgICAgICAgY29uc3QgaTExID0gczEwLmF0dHJpYnV0ZTsKICAgICAgICByZXR1cm4gZmFsc2UgPT09IGkxMSA/IHZvaWQgMCA6ICJzdHJpbmciID09IHR5cGVvZiBpMTEgPyBpMTEgOiAic3RyaW5nIiA9PSB0eXBlb2YgdDkgPyB0OS50b0xvd2VyQ2FzZSgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCksIHRoaXMuXyRFcCA9IHZvaWQgMCwgdGhpcy5pc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZSwgdGhpcy5oYXNVcGRhdGVkID0gZmFsc2UsIHRoaXMuXyRFbSA9IG51bGwsIHRoaXMuXyRFdigpOwogICAgICB9CiAgICAgIF8kRXYoKSB7CiAgICAgICAgdGhpcy5fJEVTID0gbmV3IFByb21pc2UoKHQ5KSA9PiB0aGlzLmVuYWJsZVVwZGF0aW5nID0gdDkpLCB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLl8kRV8oKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKCksIHRoaXMuY29uc3RydWN0b3IubD8uZm9yRWFjaCgodDkpID0+IHQ5KHRoaXMpKTsKICAgICAgfQogICAgICBhZGRDb250cm9sbGVyKHQ5KSB7CiAgICAgICAgKHRoaXMuXyRFTyA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkuYWRkKHQ5KSwgdm9pZCAwICE9PSB0aGlzLnJlbmRlclJvb3QgJiYgdGhpcy5pc0Nvbm5lY3RlZCAmJiB0OS5ob3N0Q29ubmVjdGVkPy4oKTsKICAgICAgfQogICAgICByZW1vdmVDb250cm9sbGVyKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5kZWxldGUodDkpOwogICAgICB9CiAgICAgIF8kRV8oKSB7CiAgICAgICAgY29uc3QgdDkgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBzMTAgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzOwogICAgICAgIGZvciAoY29uc3QgaTExIG9mIHMxMC5rZXlzKCkpIHRoaXMuaGFzT3duUHJvcGVydHkoaTExKSAmJiAodDkuc2V0KGkxMSwgdGhpc1tpMTFdKSwgZGVsZXRlIHRoaXNbaTExXSk7CiAgICAgICAgdDkuc2l6ZSA+IDAgJiYgKHRoaXMuXyRFcCA9IHQ5KTsKICAgICAgfQogICAgICBjcmVhdGVSZW5kZXJSb290KCkgewogICAgICAgIGNvbnN0IHQ5ID0gdGhpcy5zaGFkb3dSb290ID8/IHRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpOwogICAgICAgIHJldHVybiBTKHQ5LCB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLCB0OTsKICAgICAgfQogICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICB0aGlzLnJlbmRlclJvb3QgPz89IHRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLCB0aGlzLmVuYWJsZVVwZGF0aW5nKHRydWUpLCB0aGlzLl8kRU8/LmZvckVhY2goKHQ5KSA9PiB0OS5ob3N0Q29ubmVjdGVkPy4oKSk7CiAgICAgIH0KICAgICAgZW5hYmxlVXBkYXRpbmcodDkpIHsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICB0aGlzLl8kRU8/LmZvckVhY2goKHQ5KSA9PiB0OS5ob3N0RGlzY29ubmVjdGVkPy4oKSk7CiAgICAgIH0KICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQ5LCBzMTAsIGkxMSkgewogICAgICAgIHRoaXMuXyRBSyh0OSwgaTExKTsKICAgICAgfQogICAgICBfJEVUKHQ5LCBzMTApIHsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0OSksIGUxMSA9IHRoaXMuY29uc3RydWN0b3IuXyRFdSh0OSwgaTExKTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdHJ1ZSA9PT0gaTExLnJlZmxlY3QpIHsKICAgICAgICAgIGNvbnN0IGg4ID0gKHZvaWQgMCAhPT0gaTExLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUgPyBpMTEuY29udmVydGVyIDogdSkudG9BdHRyaWJ1dGUoczEwLCBpMTEudHlwZSk7CiAgICAgICAgICB0aGlzLl8kRW0gPSB0OSwgbnVsbCA9PSBoOCA/IHRoaXMucmVtb3ZlQXR0cmlidXRlKGUxMSkgOiB0aGlzLnNldEF0dHJpYnV0ZShlMTEsIGg4KSwgdGhpcy5fJEVtID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgXyRBSyh0OSwgczEwKSB7CiAgICAgICAgY29uc3QgaTExID0gdGhpcy5jb25zdHJ1Y3RvciwgZTExID0gaTExLl8kRWguZ2V0KHQ5KTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdGhpcy5fJEVtICE9PSBlMTEpIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IGkxMS5nZXRQcm9wZXJ0eU9wdGlvbnMoZTExKSwgaDggPSAiZnVuY3Rpb24iID09IHR5cGVvZiB0MTAuY29udmVydGVyID8geyBmcm9tQXR0cmlidXRlOiB0MTAuY29udmVydGVyIH0gOiB2b2lkIDAgIT09IHQxMC5jb252ZXJ0ZXI/LmZyb21BdHRyaWJ1dGUgPyB0MTAuY29udmVydGVyIDogdTsKICAgICAgICAgIHRoaXMuXyRFbSA9IGUxMTsKICAgICAgICAgIGNvbnN0IHIxMSA9IGg4LmZyb21BdHRyaWJ1dGUoczEwLCB0MTAudHlwZSk7CiAgICAgICAgICB0aGlzW2UxMV0gPSByMTEgPz8gdGhpcy5fJEVqPy5nZXQoZTExKSA/PyByMTEsIHRoaXMuXyRFbSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlcXVlc3RVcGRhdGUodDksIHMxMCwgaTExLCBlMTEgPSBmYWxzZSwgaDgpIHsKICAgICAgICBpZiAodm9pZCAwICE9PSB0OSkgewogICAgICAgICAgY29uc3QgcjExID0gdGhpcy5jb25zdHJ1Y3RvcjsKICAgICAgICAgIGlmIChmYWxzZSA9PT0gZTExICYmIChoOCA9IHRoaXNbdDldKSwgaTExID8/PSByMTEuZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSwgISgoaTExLmhhc0NoYW5nZWQgPz8gZikoaDgsIHMxMCkgfHwgaTExLnVzZURlZmF1bHQgJiYgaTExLnJlZmxlY3QgJiYgaDggPT09IHRoaXMuXyRFaj8uZ2V0KHQ5KSAmJiAhdGhpcy5oYXNBdHRyaWJ1dGUocjExLl8kRXUodDksIGkxMSkpKSkgcmV0dXJuOwogICAgICAgICAgdGhpcy5DKHQ5LCBzMTAsIGkxMSk7CiAgICAgICAgfQogICAgICAgIGZhbHNlID09PSB0aGlzLmlzVXBkYXRlUGVuZGluZyAmJiAodGhpcy5fJEVTID0gdGhpcy5fJEVQKCkpOwogICAgICB9CiAgICAgIEModDksIHMxMCwgeyB1c2VEZWZhdWx0OiBpMTEsIHJlZmxlY3Q6IGUxMSwgd3JhcHBlZDogaDggfSwgcjExKSB7CiAgICAgICAgaTExICYmICEodGhpcy5fJEVqID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKS5oYXModDkpICYmICh0aGlzLl8kRWouc2V0KHQ5LCByMTEgPz8gczEwID8/IHRoaXNbdDldKSwgdHJ1ZSAhPT0gaDggfHwgdm9pZCAwICE9PSByMTEpIHx8ICh0aGlzLl8kQUwuaGFzKHQ5KSB8fCAodGhpcy5oYXNVcGRhdGVkIHx8IGkxMSB8fCAoczEwID0gdm9pZCAwKSwgdGhpcy5fJEFMLnNldCh0OSwgczEwKSksIHRydWUgPT09IGUxMSAmJiB0aGlzLl8kRW0gIT09IHQ5ICYmICh0aGlzLl8kRXEgPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZCh0OSkpOwogICAgICB9CiAgICAgIGFzeW5jIF8kRVAoKSB7CiAgICAgICAgdGhpcy5pc1VwZGF0ZVBlbmRpbmcgPSB0cnVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLl8kRVM7CiAgICAgICAgfSBjYXRjaCAodDEwKSB7CiAgICAgICAgICBQcm9taXNlLnJlamVjdCh0MTApOwogICAgICAgIH0KICAgICAgICBjb25zdCB0OSA9IHRoaXMuc2NoZWR1bGVVcGRhdGUoKTsKICAgICAgICByZXR1cm4gbnVsbCAhPSB0OSAmJiBhd2FpdCB0OSwgIXRoaXMuaXNVcGRhdGVQZW5kaW5nOwogICAgICB9CiAgICAgIHNjaGVkdWxlVXBkYXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKTsKICAgICAgfQogICAgICBwZXJmb3JtVXBkYXRlKCkgewogICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZVBlbmRpbmcpIHJldHVybjsKICAgICAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgICAgaWYgKHRoaXMucmVuZGVyUm9vdCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJSb290KCksIHRoaXMuXyRFcCkgewogICAgICAgICAgICBmb3IgKGNvbnN0IFt0MTEsIHMxMV0gb2YgdGhpcy5fJEVwKSB0aGlzW3QxMV0gPSBzMTE7CiAgICAgICAgICAgIHRoaXMuXyRFcCA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHQxMCA9IHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXM7CiAgICAgICAgICBpZiAodDEwLnNpemUgPiAwKSBmb3IgKGNvbnN0IFtzMTEsIGkxMV0gb2YgdDEwKSB7CiAgICAgICAgICAgIGNvbnN0IHsgd3JhcHBlZDogdDExIH0gPSBpMTEsIGUxMSA9IHRoaXNbczExXTsKICAgICAgICAgICAgdHJ1ZSAhPT0gdDExIHx8IHRoaXMuXyRBTC5oYXMoczExKSB8fCB2b2lkIDAgPT09IGUxMSB8fCB0aGlzLkMoczExLCB2b2lkIDAsIGkxMSwgZTExKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IHQ5ID0gZmFsc2U7CiAgICAgICAgY29uc3QgczEwID0gdGhpcy5fJEFMOwogICAgICAgIHRyeSB7CiAgICAgICAgICB0OSA9IHRoaXMuc2hvdWxkVXBkYXRlKHMxMCksIHQ5ID8gKHRoaXMud2lsbFVwZGF0ZShzMTApLCB0aGlzLl8kRU8/LmZvckVhY2goKHQxMCkgPT4gdDEwLmhvc3RVcGRhdGU/LigpKSwgdGhpcy51cGRhdGUoczEwKSkgOiB0aGlzLl8kRU0oKTsKICAgICAgICB9IGNhdGNoIChzMTEpIHsKICAgICAgICAgIHRocm93IHQ5ID0gZmFsc2UsIHRoaXMuXyRFTSgpLCBzMTE7CiAgICAgICAgfQogICAgICAgIHQ5ICYmIHRoaXMuXyRBRShzMTApOwogICAgICB9CiAgICAgIHdpbGxVcGRhdGUodDkpIHsKICAgICAgfQogICAgICBfJEFFKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5mb3JFYWNoKCh0MTApID0+IHQxMC5ob3N0VXBkYXRlZD8uKCkpLCB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMuaGFzVXBkYXRlZCA9IHRydWUsIHRoaXMuZmlyc3RVcGRhdGVkKHQ5KSksIHRoaXMudXBkYXRlZCh0OSk7CiAgICAgIH0KICAgICAgXyRFTSgpIHsKICAgICAgICB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIGdldCB1cGRhdGVDb21wbGV0ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGdldFVwZGF0ZUNvbXBsZXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kRVM7CiAgICAgIH0KICAgICAgc2hvdWxkVXBkYXRlKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVxICYmPSB0aGlzLl8kRXEuZm9yRWFjaCgodDEwKSA9PiB0aGlzLl8kRVQodDEwLCB0aGlzW3QxMF0pKSwgdGhpcy5fJEVNKCk7CiAgICAgIH0KICAgICAgdXBkYXRlZCh0OSkgewogICAgICB9CiAgICAgIGZpcnN0VXBkYXRlZCh0OSkgewogICAgICB9CiAgICB9OwogICAgeS5lbGVtZW50U3R5bGVzID0gW10sIHkuc2hhZG93Um9vdE9wdGlvbnMgPSB7IG1vZGU6ICJvcGVuIiB9LCB5W2QoImVsZW1lbnRQcm9wZXJ0aWVzIildID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgeVtkKCJmaW5hbGl6ZWQiKV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBwPy4oeyBSZWFjdGl2ZUVsZW1lbnQ6IHkgfSksIChhLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiMi4xLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcwpmdW5jdGlvbiBWKHQ5LCBpMTEpIHsKICBpZiAoIXUyKHQ5KSB8fCAhdDkuaGFzT3duUHJvcGVydHkoInJhdyIpKSB0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7CiAgcmV0dXJuIHZvaWQgMCAhPT0gZTMgPyBlMy5jcmVhdGVIVE1MKGkxMSkgOiBpMTE7Cn0KZnVuY3Rpb24gTSh0OSwgaTExLCBzMTAgPSB0OSwgZTExKSB7CiAgaWYgKGkxMSA9PT0gRSkgcmV0dXJuIGkxMTsKICBsZXQgaDggPSB2b2lkIDAgIT09IGUxMSA/IHMxMC5fJENvPy5bZTExXSA6IHMxMC5fJENsOwogIGNvbnN0IG8xMyA9IGEyKGkxMSkgPyB2b2lkIDAgOiBpMTEuXyRsaXREaXJlY3RpdmUkOwogIHJldHVybiBoOD8uY29uc3RydWN0b3IgIT09IG8xMyAmJiAoaDg/Ll8kQU8/LihmYWxzZSksIHZvaWQgMCA9PT0gbzEzID8gaDggPSB2b2lkIDAgOiAoaDggPSBuZXcgbzEzKHQ5KSwgaDguXyRBVCh0OSwgczEwLCBlMTEpKSwgdm9pZCAwICE9PSBlMTEgPyAoczEwLl8kQ28gPz89IFtdKVtlMTFdID0gaDggOiBzMTAuXyRDbCA9IGg4KSwgdm9pZCAwICE9PSBoOCAmJiAoaTExID0gTSh0OSwgaDguXyRBUyh0OSwgaTExLnZhbHVlcyksIGg4LCBlMTEpKSwgaTExOwp9CnZhciB0MiwgaTMsIHMyLCBlMywgaDIsIG8zLCBuMywgcjMsIGwyLCBjMywgYTIsIHUyLCBkMiwgZjIsIHYsIF8sIG0sIHAyLCBnLCAkLCB5MiwgeCwgYjIsIHcsIFQsIEUsIEEsIEMsIFAsIE4sIFMyLCBSLCBrLCBILCBJLCBMLCB6LCBaLCBqLCBCLCBEOwp2YXIgaW5pdF9saXRfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcyIoKSB7CiAgICB0MiA9IGdsb2JhbFRoaXMsIGkzID0gKHQ5KSA9PiB0OSwgczIgPSB0Mi50cnVzdGVkVHlwZXMsIGUzID0gczIgPyBzMi5jcmVhdGVQb2xpY3koImxpdC1odG1sIiwgeyBjcmVhdGVIVE1MOiAodDkpID0+IHQ5IH0pIDogdm9pZCAwLCBoMiA9ICIkbGl0JCIsIG8zID0gYGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCwgbjMgPSAiPyIgKyBvMywgcjMgPSBgPCR7bjN9PmAsIGwyID0gZG9jdW1lbnQsIGMzID0gKCkgPT4gbDIuY3JlYXRlQ29tbWVudCgiIiksIGEyID0gKHQ5KSA9PiBudWxsID09PSB0OSB8fCAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgdDksIHUyID0gQXJyYXkuaXNBcnJheSwgZDIgPSAodDkpID0+IHUyKHQ5KSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiB0OT8uW1N5bWJvbC5pdGVyYXRvcl0sIGYyID0gIlsgCVxuXGZccl0iLCB2ID0gLzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csIF8gPSAvLS0+L2csIG0gPSAvPi9nLCBwMiA9IFJlZ0V4cChgPnwke2YyfSg/OihbXlxccyInPj0vXSspKCR7ZjJ9Kj0ke2YyfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsICJnIiksIGcgPSAvJy9nLCAkID0gLyIvZywgeTIgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksIHggPSAodDkpID0+IChpMTEsIC4uLnMxMCkgPT4gKHsgXyRsaXRUeXBlJDogdDksIHN0cmluZ3M6IGkxMSwgdmFsdWVzOiBzMTAgfSksIGIyID0geCgxKSwgdyA9IHgoMiksIFQgPSB4KDMpLCBFID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImxpdC1ub0NoYW5nZSIpLCBBID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImxpdC1ub3RoaW5nIiksIEMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSwgUCA9IGwyLmNyZWF0ZVRyZWVXYWxrZXIobDIsIDEyOSk7CiAgICBOID0gKHQ5LCBpMTEpID0+IHsKICAgICAgY29uc3QgczEwID0gdDkubGVuZ3RoIC0gMSwgZTExID0gW107CiAgICAgIGxldCBuMTIsIGw2ID0gMiA9PT0gaTExID8gIjxzdmc+IiA6IDMgPT09IGkxMSA/ICI8bWF0aD4iIDogIiIsIGMxMSA9IHY7CiAgICAgIGZvciAobGV0IGkxMiA9IDA7IGkxMiA8IHMxMDsgaTEyKyspIHsKICAgICAgICBjb25zdCBzMTEgPSB0OVtpMTJdOwogICAgICAgIGxldCBhNSwgdTcsIGQ1ID0gLTEsIGY3ID0gMDsKICAgICAgICBmb3IgKDsgZjcgPCBzMTEubGVuZ3RoICYmIChjMTEubGFzdEluZGV4ID0gZjcsIHU3ID0gYzExLmV4ZWMoczExKSwgbnVsbCAhPT0gdTcpOyApIGY3ID0gYzExLmxhc3RJbmRleCwgYzExID09PSB2ID8gIiEtLSIgPT09IHU3WzFdID8gYzExID0gXyA6IHZvaWQgMCAhPT0gdTdbMV0gPyBjMTEgPSBtIDogdm9pZCAwICE9PSB1N1syXSA/ICh5Mi50ZXN0KHU3WzJdKSAmJiAobjEyID0gUmVnRXhwKCI8LyIgKyB1N1syXSwgImciKSksIGMxMSA9IHAyKSA6IHZvaWQgMCAhPT0gdTdbM10gJiYgKGMxMSA9IHAyKSA6IGMxMSA9PT0gcDIgPyAiPiIgPT09IHU3WzBdID8gKGMxMSA9IG4xMiA/PyB2LCBkNSA9IC0xKSA6IHZvaWQgMCA9PT0gdTdbMV0gPyBkNSA9IC0yIDogKGQ1ID0gYzExLmxhc3RJbmRleCAtIHU3WzJdLmxlbmd0aCwgYTUgPSB1N1sxXSwgYzExID0gdm9pZCAwID09PSB1N1szXSA/IHAyIDogJyInID09PSB1N1szXSA/ICQgOiBnKSA6IGMxMSA9PT0gJCB8fCBjMTEgPT09IGcgPyBjMTEgPSBwMiA6IGMxMSA9PT0gXyB8fCBjMTEgPT09IG0gPyBjMTEgPSB2IDogKGMxMSA9IHAyLCBuMTIgPSB2b2lkIDApOwogICAgICAgIGNvbnN0IHg0ID0gYzExID09PSBwMiAmJiB0OVtpMTIgKyAxXS5zdGFydHNXaXRoKCIvPiIpID8gIiAiIDogIiI7CiAgICAgICAgbDYgKz0gYzExID09PSB2ID8gczExICsgcjMgOiBkNSA+PSAwID8gKGUxMS5wdXNoKGE1KSwgczExLnNsaWNlKDAsIGQ1KSArIGgyICsgczExLnNsaWNlKGQ1KSArIG8zICsgeDQpIDogczExICsgbzMgKyAoLTIgPT09IGQ1ID8gaTEyIDogeDQpOwogICAgICB9CiAgICAgIHJldHVybiBbVih0OSwgbDYgKyAodDlbczEwXSB8fCAiPD8+IikgKyAoMiA9PT0gaTExID8gIjwvc3ZnPiIgOiAzID09PSBpMTEgPyAiPC9tYXRoPiIgOiAiIikpLCBlMTFdOwogICAgfTsKICAgIFMyID0gY2xhc3MgX1MgewogICAgICBjb25zdHJ1Y3Rvcih7IHN0cmluZ3M6IHQ5LCBfJGxpdFR5cGUkOiBpMTEgfSwgZTExKSB7CiAgICAgICAgbGV0IHIxMTsKICAgICAgICB0aGlzLnBhcnRzID0gW107CiAgICAgICAgbGV0IGw2ID0gMCwgYTUgPSAwOwogICAgICAgIGNvbnN0IHU3ID0gdDkubGVuZ3RoIC0gMSwgZDUgPSB0aGlzLnBhcnRzLCBbZjcsIHY1XSA9IE4odDksIGkxMSk7CiAgICAgICAgaWYgKHRoaXMuZWwgPSBfUy5jcmVhdGVFbGVtZW50KGY3LCBlMTEpLCBQLmN1cnJlbnROb2RlID0gdGhpcy5lbC5jb250ZW50LCAyID09PSBpMTEgfHwgMyA9PT0gaTExKSB7CiAgICAgICAgICBjb25zdCB0MTAgPSB0aGlzLmVsLmNvbnRlbnQuZmlyc3RDaGlsZDsKICAgICAgICAgIHQxMC5yZXBsYWNlV2l0aCguLi50MTAuY2hpbGROb2Rlcyk7CiAgICAgICAgfQogICAgICAgIGZvciAoOyBudWxsICE9PSAocjExID0gUC5uZXh0Tm9kZSgpKSAmJiBkNS5sZW5ndGggPCB1NzsgKSB7CiAgICAgICAgICBpZiAoMSA9PT0gcjExLm5vZGVUeXBlKSB7CiAgICAgICAgICAgIGlmIChyMTEuaGFzQXR0cmlidXRlcygpKSBmb3IgKGNvbnN0IHQxMCBvZiByMTEuZ2V0QXR0cmlidXRlTmFtZXMoKSkgaWYgKHQxMC5lbmRzV2l0aChoMikpIHsKICAgICAgICAgICAgICBjb25zdCBpMTIgPSB2NVthNSsrXSwgczEwID0gcjExLmdldEF0dHJpYnV0ZSh0MTApLnNwbGl0KG8zKSwgZTEyID0gLyhbLj9AXSk/KC4qKS8uZXhlYyhpMTIpOwogICAgICAgICAgICAgIGQ1LnB1c2goeyB0eXBlOiAxLCBpbmRleDogbDYsIG5hbWU6IGUxMlsyXSwgc3RyaW5nczogczEwLCBjdG9yOiAiLiIgPT09IGUxMlsxXSA/IEkgOiAiPyIgPT09IGUxMlsxXSA/IEwgOiAiQCIgPT09IGUxMlsxXSA/IHogOiBIIH0pLCByMTEucmVtb3ZlQXR0cmlidXRlKHQxMCk7CiAgICAgICAgICAgIH0gZWxzZSB0MTAuc3RhcnRzV2l0aChvMykgJiYgKGQ1LnB1c2goeyB0eXBlOiA2LCBpbmRleDogbDYgfSksIHIxMS5yZW1vdmVBdHRyaWJ1dGUodDEwKSk7CiAgICAgICAgICAgIGlmICh5Mi50ZXN0KHIxMS50YWdOYW1lKSkgewogICAgICAgICAgICAgIGNvbnN0IHQxMCA9IHIxMS50ZXh0Q29udGVudC5zcGxpdChvMyksIGkxMiA9IHQxMC5sZW5ndGggLSAxOwogICAgICAgICAgICAgIGlmIChpMTIgPiAwKSB7CiAgICAgICAgICAgICAgICByMTEudGV4dENvbnRlbnQgPSBzMiA/IHMyLmVtcHR5U2NyaXB0IDogIiI7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBzMTAgPSAwOyBzMTAgPCBpMTI7IHMxMCsrKSByMTEuYXBwZW5kKHQxMFtzMTBdLCBjMygpKSwgUC5uZXh0Tm9kZSgpLCBkNS5wdXNoKHsgdHlwZTogMiwgaW5kZXg6ICsrbDYgfSk7CiAgICAgICAgICAgICAgICByMTEuYXBwZW5kKHQxMFtpMTJdLCBjMygpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoOCA9PT0gcjExLm5vZGVUeXBlKSBpZiAocjExLmRhdGEgPT09IG4zKSBkNS5wdXNoKHsgdHlwZTogMiwgaW5kZXg6IGw2IH0pOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCB0MTAgPSAtMTsKICAgICAgICAgICAgZm9yICg7IC0xICE9PSAodDEwID0gcjExLmRhdGEuaW5kZXhPZihvMywgdDEwICsgMSkpOyApIGQ1LnB1c2goeyB0eXBlOiA3LCBpbmRleDogbDYgfSksIHQxMCArPSBvMy5sZW5ndGggLSAxOwogICAgICAgICAgfQogICAgICAgICAgbDYrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQodDksIGkxMSkgewogICAgICAgIGNvbnN0IHMxMCA9IGwyLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAgICAgcmV0dXJuIHMxMC5pbm5lckhUTUwgPSB0OSwgczEwOwogICAgICB9CiAgICB9OwogICAgUiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGkxMSkgewogICAgICAgIHRoaXMuXyRBViA9IFtdLCB0aGlzLl8kQU4gPSB2b2lkIDAsIHRoaXMuXyRBRCA9IHQ5LCB0aGlzLl8kQU0gPSBpMTE7CiAgICAgIH0KICAgICAgZ2V0IHBhcmVudE5vZGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlOwogICAgICB9CiAgICAgIGdldCBfJEFVKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQU0uXyRBVTsKICAgICAgfQogICAgICB1KHQ5KSB7CiAgICAgICAgY29uc3QgeyBlbDogeyBjb250ZW50OiBpMTEgfSwgcGFydHM6IHMxMCB9ID0gdGhpcy5fJEFELCBlMTEgPSAodDk/LmNyZWF0aW9uU2NvcGUgPz8gbDIpLmltcG9ydE5vZGUoaTExLCB0cnVlKTsKICAgICAgICBQLmN1cnJlbnROb2RlID0gZTExOwogICAgICAgIGxldCBoOCA9IFAubmV4dE5vZGUoKSwgbzEzID0gMCwgbjEyID0gMCwgcjExID0gczEwWzBdOwogICAgICAgIGZvciAoOyB2b2lkIDAgIT09IHIxMTsgKSB7CiAgICAgICAgICBpZiAobzEzID09PSByMTEuaW5kZXgpIHsKICAgICAgICAgICAgbGV0IGkxMjsKICAgICAgICAgICAgMiA9PT0gcjExLnR5cGUgPyBpMTIgPSBuZXcgayhoOCwgaDgubmV4dFNpYmxpbmcsIHRoaXMsIHQ5KSA6IDEgPT09IHIxMS50eXBlID8gaTEyID0gbmV3IHIxMS5jdG9yKGg4LCByMTEubmFtZSwgcjExLnN0cmluZ3MsIHRoaXMsIHQ5KSA6IDYgPT09IHIxMS50eXBlICYmIChpMTIgPSBuZXcgWihoOCwgdGhpcywgdDkpKSwgdGhpcy5fJEFWLnB1c2goaTEyKSwgcjExID0gczEwWysrbjEyXTsKICAgICAgICAgIH0KICAgICAgICAgIG8xMyAhPT0gcjExPy5pbmRleCAmJiAoaDggPSBQLm5leHROb2RlKCksIG8xMysrKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFAuY3VycmVudE5vZGUgPSBsMiwgZTExOwogICAgICB9CiAgICAgIHAodDkpIHsKICAgICAgICBsZXQgaTExID0gMDsKICAgICAgICBmb3IgKGNvbnN0IHMxMCBvZiB0aGlzLl8kQVYpIHZvaWQgMCAhPT0gczEwICYmICh2b2lkIDAgIT09IHMxMC5zdHJpbmdzID8gKHMxMC5fJEFJKHQ5LCBzMTAsIGkxMSksIGkxMSArPSBzMTAuc3RyaW5ncy5sZW5ndGggLSAyKSA6IHMxMC5fJEFJKHQ5W2kxMV0pKSwgaTExKys7CiAgICAgIH0KICAgIH07CiAgICBrID0gY2xhc3MgX2sgewogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNPy5fJEFVID8/IHRoaXMuXyRDdjsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzMTAsIGUxMSkgewogICAgICAgIHRoaXMudHlwZSA9IDIsIHRoaXMuXyRBSCA9IEEsIHRoaXMuXyRBTiA9IHZvaWQgMCwgdGhpcy5fJEFBID0gdDksIHRoaXMuXyRBQiA9IGkxMSwgdGhpcy5fJEFNID0gczEwLCB0aGlzLm9wdGlvbnMgPSBlMTEsIHRoaXMuXyRDdiA9IGUxMT8uaXNDb25uZWN0ZWQgPz8gdHJ1ZTsKICAgICAgfQogICAgICBnZXQgcGFyZW50Tm9kZSgpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLl8kQUEucGFyZW50Tm9kZTsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLl8kQU07CiAgICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gaTExICYmIDExID09PSB0OT8ubm9kZVR5cGUgJiYgKHQ5ID0gaTExLnBhcmVudE5vZGUpLCB0OTsKICAgICAgfQogICAgICBnZXQgc3RhcnROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUE7CiAgICAgIH0KICAgICAgZ2V0IGVuZE5vZGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBQjsKICAgICAgfQogICAgICBfJEFJKHQ5LCBpMTEgPSB0aGlzKSB7CiAgICAgICAgdDkgPSBNKHRoaXMsIHQ5LCBpMTEpLCBhMih0OSkgPyB0OSA9PT0gQSB8fCBudWxsID09IHQ5IHx8ICIiID09PSB0OSA/ICh0aGlzLl8kQUggIT09IEEgJiYgdGhpcy5fJEFSKCksIHRoaXMuXyRBSCA9IEEpIDogdDkgIT09IHRoaXMuXyRBSCAmJiB0OSAhPT0gRSAmJiB0aGlzLl8odDkpIDogdm9pZCAwICE9PSB0OS5fJGxpdFR5cGUkID8gdGhpcy4kKHQ5KSA6IHZvaWQgMCAhPT0gdDkubm9kZVR5cGUgPyB0aGlzLlQodDkpIDogZDIodDkpID8gdGhpcy5rKHQ5KSA6IHRoaXMuXyh0OSk7CiAgICAgIH0KICAgICAgTyh0OSkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodDksIHRoaXMuXyRBQik7CiAgICAgIH0KICAgICAgVCh0OSkgewogICAgICAgIHRoaXMuXyRBSCAhPT0gdDkgJiYgKHRoaXMuXyRBUigpLCB0aGlzLl8kQUggPSB0aGlzLk8odDkpKTsKICAgICAgfQogICAgICBfKHQ5KSB7CiAgICAgICAgdGhpcy5fJEFIICE9PSBBICYmIGEyKHRoaXMuXyRBSCkgPyB0aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YSA9IHQ5IDogdGhpcy5UKGwyLmNyZWF0ZVRleHROb2RlKHQ5KSksIHRoaXMuXyRBSCA9IHQ5OwogICAgICB9CiAgICAgICQodDkpIHsKICAgICAgICBjb25zdCB7IHZhbHVlczogaTExLCBfJGxpdFR5cGUkOiBzMTAgfSA9IHQ5LCBlMTEgPSAibnVtYmVyIiA9PSB0eXBlb2YgczEwID8gdGhpcy5fJEFDKHQ5KSA6ICh2b2lkIDAgPT09IHMxMC5lbCAmJiAoczEwLmVsID0gUzIuY3JlYXRlRWxlbWVudChWKHMxMC5oLCBzMTAuaFswXSksIHRoaXMub3B0aW9ucykpLCBzMTApOwogICAgICAgIGlmICh0aGlzLl8kQUg/Ll8kQUQgPT09IGUxMSkgdGhpcy5fJEFILnAoaTExKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IG5ldyBSKGUxMSwgdGhpcyksIHMxMSA9IHQxMC51KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICB0MTAucChpMTEpLCB0aGlzLlQoczExKSwgdGhpcy5fJEFIID0gdDEwOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFDKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IEMuZ2V0KHQ5LnN0cmluZ3MpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkxMSAmJiBDLnNldCh0OS5zdHJpbmdzLCBpMTEgPSBuZXcgUzIodDkpKSwgaTExOwogICAgICB9CiAgICAgIGsodDkpIHsKICAgICAgICB1Mih0aGlzLl8kQUgpIHx8ICh0aGlzLl8kQUggPSBbXSwgdGhpcy5fJEFSKCkpOwogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRBSDsKICAgICAgICBsZXQgczEwLCBlMTEgPSAwOwogICAgICAgIGZvciAoY29uc3QgaDggb2YgdDkpIGUxMSA9PT0gaTExLmxlbmd0aCA/IGkxMS5wdXNoKHMxMCA9IG5ldyBfayh0aGlzLk8oYzMoKSksIHRoaXMuTyhjMygpKSwgdGhpcywgdGhpcy5vcHRpb25zKSkgOiBzMTAgPSBpMTFbZTExXSwgczEwLl8kQUkoaDgpLCBlMTErKzsKICAgICAgICBlMTEgPCBpMTEubGVuZ3RoICYmICh0aGlzLl8kQVIoczEwICYmIHMxMC5fJEFCLm5leHRTaWJsaW5nLCBlMTEpLCBpMTEubGVuZ3RoID0gZTExKTsKICAgICAgfQogICAgICBfJEFSKHQ5ID0gdGhpcy5fJEFBLm5leHRTaWJsaW5nLCBzMTApIHsKICAgICAgICBmb3IgKHRoaXMuXyRBUD8uKGZhbHNlLCB0cnVlLCBzMTApOyB0OSAhPT0gdGhpcy5fJEFCOyApIHsKICAgICAgICAgIGNvbnN0IHMxMSA9IGkzKHQ5KS5uZXh0U2libGluZzsKICAgICAgICAgIGkzKHQ5KS5yZW1vdmUoKSwgdDkgPSBzMTE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldENvbm5lY3RlZCh0OSkgewogICAgICAgIHZvaWQgMCA9PT0gdGhpcy5fJEFNICYmICh0aGlzLl8kQ3YgPSB0OSwgdGhpcy5fJEFQPy4odDkpKTsKICAgICAgfQogICAgfTsKICAgIEggPSBjbGFzcyB7CiAgICAgIGdldCB0YWdOYW1lKCkgewogICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQudGFnTmFtZTsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodDksIGkxMSwgczEwLCBlMTEsIGg4KSB7CiAgICAgICAgdGhpcy50eXBlID0gMSwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLmVsZW1lbnQgPSB0OSwgdGhpcy5uYW1lID0gaTExLCB0aGlzLl8kQU0gPSBlMTEsIHRoaXMub3B0aW9ucyA9IGg4LCBzMTAubGVuZ3RoID4gMiB8fCAiIiAhPT0gczEwWzBdIHx8ICIiICE9PSBzMTBbMV0gPyAodGhpcy5fJEFIID0gQXJyYXkoczEwLmxlbmd0aCAtIDEpLmZpbGwobmV3IFN0cmluZygpKSwgdGhpcy5zdHJpbmdzID0gczEwKSA6IHRoaXMuXyRBSCA9IEE7CiAgICAgIH0KICAgICAgXyRBSSh0OSwgaTExID0gdGhpcywgczEwLCBlMTEpIHsKICAgICAgICBjb25zdCBoOCA9IHRoaXMuc3RyaW5nczsKICAgICAgICBsZXQgbzEzID0gZmFsc2U7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gaDgpIHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSwgbzEzID0gIWEyKHQ5KSB8fCB0OSAhPT0gdGhpcy5fJEFIICYmIHQ5ICE9PSBFLCBvMTMgJiYgKHRoaXMuXyRBSCA9IHQ5KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IGUxMiA9IHQ5OwogICAgICAgICAgbGV0IG4xMiwgcjExOwogICAgICAgICAgZm9yICh0OSA9IGg4WzBdLCBuMTIgPSAwOyBuMTIgPCBoOC5sZW5ndGggLSAxOyBuMTIrKykgcjExID0gTSh0aGlzLCBlMTJbczEwICsgbjEyXSwgaTExLCBuMTIpLCByMTEgPT09IEUgJiYgKHIxMSA9IHRoaXMuXyRBSFtuMTJdKSwgbzEzIHx8PSAhYTIocjExKSB8fCByMTEgIT09IHRoaXMuXyRBSFtuMTJdLCByMTEgPT09IEEgPyB0OSA9IEEgOiB0OSAhPT0gQSAmJiAodDkgKz0gKHIxMSA/PyAiIikgKyBoOFtuMTIgKyAxXSksIHRoaXMuXyRBSFtuMTJdID0gcjExOwogICAgICAgIH0KICAgICAgICBvMTMgJiYgIWUxMSAmJiB0aGlzLmoodDkpOwogICAgICB9CiAgICAgIGoodDkpIHsKICAgICAgICB0OSA9PT0gQSA/IHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKSA6IHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLCB0OSA/PyAiIik7CiAgICAgIH0KICAgIH07CiAgICBJID0gY2xhc3MgZXh0ZW5kcyBIIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy50eXBlID0gMzsKICAgICAgfQogICAgICBqKHQ5KSB7CiAgICAgICAgdGhpcy5lbGVtZW50W3RoaXMubmFtZV0gPSB0OSA9PT0gQSA/IHZvaWQgMCA6IHQ5OwogICAgICB9CiAgICB9OwogICAgTCA9IGNsYXNzIGV4dGVuZHMgSCB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMudHlwZSA9IDQ7CiAgICAgIH0KICAgICAgaih0OSkgewogICAgICAgIHRoaXMuZWxlbWVudC50b2dnbGVBdHRyaWJ1dGUodGhpcy5uYW1lLCAhIXQ5ICYmIHQ5ICE9PSBBKTsKICAgICAgfQogICAgfTsKICAgIHogPSBjbGFzcyBleHRlbmRzIEggewogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzMTAsIGUxMSwgaDgpIHsKICAgICAgICBzdXBlcih0OSwgaTExLCBzMTAsIGUxMSwgaDgpLCB0aGlzLnR5cGUgPSA1OwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMpIHsKICAgICAgICBpZiAoKHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSA/PyBBKSA9PT0gRSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHMxMCA9IHRoaXMuXyRBSCwgZTExID0gdDkgPT09IEEgJiYgczEwICE9PSBBIHx8IHQ5LmNhcHR1cmUgIT09IHMxMC5jYXB0dXJlIHx8IHQ5Lm9uY2UgIT09IHMxMC5vbmNlIHx8IHQ5LnBhc3NpdmUgIT09IHMxMC5wYXNzaXZlLCBoOCA9IHQ5ICE9PSBBICYmIChzMTAgPT09IEEgfHwgZTExKTsKICAgICAgICBlMTEgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLCB0aGlzLCBzMTApLCBoOCAmJiB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsIHRoaXMsIHQ5KSwgdGhpcy5fJEFIID0gdDk7CiAgICAgIH0KICAgICAgaGFuZGxlRXZlbnQodDkpIHsKICAgICAgICAiZnVuY3Rpb24iID09IHR5cGVvZiB0aGlzLl8kQUggPyB0aGlzLl8kQUguY2FsbCh0aGlzLm9wdGlvbnM/Lmhvc3QgPz8gdGhpcy5lbGVtZW50LCB0OSkgOiB0aGlzLl8kQUguaGFuZGxlRXZlbnQodDkpOwogICAgICB9CiAgICB9OwogICAgWiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGkxMSwgczEwKSB7CiAgICAgICAgdGhpcy5lbGVtZW50ID0gdDksIHRoaXMudHlwZSA9IDYsIHRoaXMuXyRBTiA9IHZvaWQgMCwgdGhpcy5fJEFNID0gaTExLCB0aGlzLm9wdGlvbnMgPSBzMTA7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQUkodDkpIHsKICAgICAgICBNKHRoaXMsIHQ5KTsKICAgICAgfQogICAgfTsKICAgIGogPSB7IE06IGgyLCBQOiBvMywgQTogbjMsIEM6IDEsIEw6IE4sIFIsIEQ6IGQyLCBWOiBNLCBJOiBrLCBILCBOOiBMLCBVOiB6LCBCOiBJLCBGOiBaIH0sIEIgPSB0Mi5saXRIdG1sUG9seWZpbGxTdXBwb3J0OwogICAgQj8uKFMyLCBrKSwgKHQyLmxpdEh0bWxWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjMuMy4yIik7CiAgICBEID0gKHQ5LCBpMTEsIHMxMCkgPT4gewogICAgICBjb25zdCBlMTEgPSBzMTA/LnJlbmRlckJlZm9yZSA/PyBpMTE7CiAgICAgIGxldCBoOCA9IGUxMS5fJGxpdFBhcnQkOwogICAgICBpZiAodm9pZCAwID09PSBoOCkgewogICAgICAgIGNvbnN0IHQxMCA9IHMxMD8ucmVuZGVyQmVmb3JlID8/IG51bGw7CiAgICAgICAgZTExLl8kbGl0UGFydCQgPSBoOCA9IG5ldyBrKGkxMS5pbnNlcnRCZWZvcmUoYzMoKSwgdDEwKSwgdDEwLCB2b2lkIDAsIHMxMCA/PyB7fSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGg4Ll8kQUkodDkpLCBoODsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtZWxlbWVudEA0LjIuMi9ub2RlX21vZHVsZXMvbGl0LWVsZW1lbnQvbGl0LWVsZW1lbnQuanMKdmFyIHMzLCBpNCwgbzQsIG40Owp2YXIgaW5pdF9saXRfZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1lbGVtZW50QDQuMi4yL25vZGVfbW9kdWxlcy9saXQtZWxlbWVudC9saXQtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9saXRfaHRtbCgpOwogICAgczMgPSBnbG9iYWxUaGlzOwogICAgaTQgPSBjbGFzcyBleHRlbmRzIHkgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLnJlbmRlck9wdGlvbnMgPSB7IGhvc3Q6IHRoaXMgfSwgdGhpcy5fJERvID0gdm9pZCAwOwogICAgICB9CiAgICAgIGNyZWF0ZVJlbmRlclJvb3QoKSB7CiAgICAgICAgY29uc3QgdDkgPSBzdXBlci5jcmVhdGVSZW5kZXJSb290KCk7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyT3B0aW9ucy5yZW5kZXJCZWZvcmUgPz89IHQ5LmZpcnN0Q2hpbGQsIHQ5OwogICAgICB9CiAgICAgIHVwZGF0ZSh0OSkgewogICAgICAgIGNvbnN0IHIxMSA9IHRoaXMucmVuZGVyKCk7CiAgICAgICAgdGhpcy5oYXNVcGRhdGVkIHx8ICh0aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0ZWQgPSB0aGlzLmlzQ29ubmVjdGVkKSwgc3VwZXIudXBkYXRlKHQ5KSwgdGhpcy5fJERvID0gRChyMTEsIHRoaXMucmVuZGVyUm9vdCwgdGhpcy5yZW5kZXJPcHRpb25zKTsKICAgICAgfQogICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLCB0aGlzLl8kRG8/LnNldENvbm5lY3RlZCh0cnVlKTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLCB0aGlzLl8kRG8/LnNldENvbm5lY3RlZChmYWxzZSk7CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIHJldHVybiBFOwogICAgICB9CiAgICB9OwogICAgaTQuXyRsaXRFbGVtZW50JCA9IHRydWUsIGk0WyJmaW5hbGl6ZWQiXSA9IHRydWUsIHMzLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydD8uKHsgTGl0RWxlbWVudDogaTQgfSk7CiAgICBvNCA9IHMzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7CiAgICBvND8uKHsgTGl0RWxlbWVudDogaTQgfSk7CiAgICBuNCA9IHsgXyRBSzogKHQ5LCBlMTEsIHIxMSkgPT4gewogICAgICB0OS5fJEFLKGUxMSwgcjExKTsKICAgIH0sIF8kQUw6ICh0OSkgPT4gdDkuXyRBTCB9OwogICAgKHMzLmxpdEVsZW1lbnRWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjQuMi4yIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvaXMtc2VydmVyLmpzCnZhciBvNTsKdmFyIGluaXRfaXNfc2VydmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2lzLXNlcnZlci5qcyIoKSB7CiAgICBvNSA9IGZhbHNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvaW5kZXguanMKdmFyIGluaXRfbGl0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvaW5kZXguanMiKCkgewogICAgaW5pdF9yZWFjdGl2ZV9lbGVtZW50KCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2xpdF9lbGVtZW50KCk7CiAgICBpbml0X2lzX3NlcnZlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MraXNvdW5pcXVlQDEuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9pc291bmlxdWUvZGlzdF90cy9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0X3RzID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS9kaXN0X3RzL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgZXhwb3J0cy51bmkgPSB2b2lkIDA7CiAgICB2YXIgdW5pMyA9IChwcmVmaXg0ID0gInVuaSIpID0+IHsKICAgICAgcmV0dXJuIGAke3ByZWZpeDR9XyR7YHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLCAoYzExKSA9PiB7CiAgICAgICAgY29uc3QgcjExID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKICAgICAgICBjb25zdCB2NSA9IGMxMSA9PT0gIngiID8gcjExIDogcjExICYgMyB8IDg7CiAgICAgICAgcmV0dXJuIHY1LnRvU3RyaW5nKDE2KTsKICAgICAgfSl9YDsKICAgIH07CiAgICBleHBvcnRzLnVuaSA9IHVuaTM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzCnZhciBEZWZlcnJlZCwgZGVmZXI7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcyIoKSB7CiAgICBEZWZlcnJlZCA9IGNsYXNzIHsKICAgICAgY2xhaW0oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xhaW1lZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEZWZlcnJlZCBhbHJlYWR5IGNsYWltZWQiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jbGFpbWVkID0gdHJ1ZTsKICAgICAgfQogICAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkQXQgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5jbGFpbWVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgICAgIHRoaXMucmVzb2x2ZSA9ICh2YWx1ZUFyZykgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJmdWxmaWxsZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlc29sdmUyKHZhbHVlQXJnKTsKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnJlamVjdCA9IChyZWFzb24pID0+IHsKICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAicmVqZWN0ZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWQoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcwp2YXIgQ3VtdWxhdGl2ZURlZmVycmVkLCBjdW11bGF0aXZlRGVmZXI7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQoKTsKICAgIEN1bXVsYXRpdmVEZWZlcnJlZCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzID0gW107CiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IGRlZmVyKCk7CiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFByb21pc2UgPSB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMuc2hpZnQoKTsKICAgICAgICAgICAgYXdhaXQgcG9wcGVkUHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICAgIHN1YkRlZmVyKCkgewogICAgICAgIGNvbnN0IGRvbmUgPSBkZWZlcigpOwogICAgICAgIHRoaXMuYWRkUHJvbWlzZShkb25lLnByb21pc2UpOwogICAgICAgIHJldHVybiBkb25lOwogICAgICB9CiAgICAgIGFkZFByb21pc2UocHJvbWlzZUFyZykgewogICAgICAgIHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKHByb21pc2VBcmcpOwogICAgICB9CiAgICB9OwogICAgY3VtdWxhdGl2ZURlZmVyID0gKCkgPT4gewogICAgICByZXR1cm4gbmV3IEN1bXVsYXRpdmVEZWZlcnJlZCgpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMsIHsKICBDdW11bGF0aXZlRGVmZXJyZWQ6ICgpID0+IEN1bXVsYXRpdmVEZWZlcnJlZCwKICBEZWZlcnJlZDogKCkgPT4gRGVmZXJyZWQsCiAgY3VtdWxhdGl2ZURlZmVyOiAoKSA9PiBjdW11bGF0aXZlRGVmZXIsCiAgZGVmZXI6ICgpID0+IGRlZmVyLAogIGZyb21DYWxsYmFjazogKCkgPT4gZnJvbUNhbGxiYWNrLAogIGdldEZpcnN0VHJ1ZU9yRmFsc2U6ICgpID0+IGdldEZpcnN0VHJ1ZU9yRmFsc2UsCiAgbWFwOiAoKSA9PiBtYXAsCiAgcmVqZWN0ZWRQcm9taXNlOiAoKSA9PiByZWplY3RlZFByb21pc2UsCiAgcmVzb2x2ZWRQcm9taXNlOiAoKSA9PiByZXNvbHZlZFByb21pc2UsCiAgdGltZW91dEFuZENvbnRpbnVlOiAoKSA9PiB0aW1lb3V0QW5kQ29udGludWUsCiAgdGltZW91dFdyYXA6ICgpID0+IHRpbWVvdXRXcmFwCn0pOwp2YXIgcmVzb2x2ZWRQcm9taXNlLCByZWplY3RlZFByb21pc2UsIG1hcCwgdGltZW91dFdyYXAsIHRpbWVvdXRBbmRDb250aW51ZSwgZ2V0Rmlyc3RUcnVlT3JGYWxzZSwgZnJvbUNhbGxiYWNrOwp2YXIgaW5pdF9kaXN0X3RzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZCgpOwogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZCgpOwogICAgcmVzb2x2ZWRQcm9taXNlID0gKHZhbHVlMikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlMik7CiAgICB9OwogICAgcmVqZWN0ZWRQcm9taXNlID0gKGVycikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICAgIH07CiAgICBtYXAgPSBhc3luYyAoaW5wdXRBcmcsIGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgIGNvbnN0IHByb21pc2VBcnJheSA9IFtdOwogICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXRBcmcpIHsKICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgcHJvbWlzZUFycmF5LnB1c2gocHJvbWlzZSk7CiAgICAgICAgcHJvbWlzZS50aGVuKCh4NCkgPT4gewogICAgICAgICAgcmVzdWx0QXJyYXkucHVzaCh4NCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogICAgfTsKICAgIHRpbWVvdXRXcmFwID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCByZWplY3RBcmcgPSB0cnVlKSA9PiB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKHJlamVjdEFyZykgewogICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJ0aW1lb3V0IikpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgdGltZW91dEluTXNBcmcpOwogICAgICAgIHByb21pc2VBcmcudGhlbihyZXNvbHZlMiwgcmVqZWN0KTsKICAgICAgfSk7CiAgICB9OwogICAgdGltZW91dEFuZENvbnRpbnVlID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnID0gNmU0KSA9PiB7CiAgICAgIHJldHVybiB0aW1lb3V0V3JhcChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZywgZmFsc2UpOwogICAgfTsKICAgIGdldEZpcnN0VHJ1ZU9yRmFsc2UgPSBhc3luYyAocHJvbWlzZXNBcmcpID0+IHsKICAgICAgY29uc3QgZG9uZSA9IGRlZmVyKCk7CiAgICAgIGZvciAoY29uc3QgcHJvbWlzZUFyZyBvZiBwcm9taXNlc0FyZykgewogICAgICAgIHByb21pc2VBcmcudGhlbigocmVzdWx0QXJnKSA9PiB7CiAgICAgICAgICBpZiAocmVzdWx0QXJnID09PSB0cnVlKSB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBQcm9taXNlLmFsbChwcm9taXNlc0FyZykudGhlbigoKSA9PiB7CiAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICB9OwogICAgZnJvbUNhbGxiYWNrID0gKGZuKSA9PiB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgIGZuKChlcnIsIHJlc3VsdCkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc29sdmUyKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLmpzCnZhciBpbml0X3NtYXJ0cnhfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHNsaWJAMi44LjEvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMKZnVuY3Rpb24gX19leHRlbmRzKGQ1LCBiNSkgewogIGlmICh0eXBlb2YgYjUgIT09ICJmdW5jdGlvbiIgJiYgYjUgIT09IG51bGwpCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIgKyBTdHJpbmcoYjUpICsgIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7CiAgZXh0ZW5kU3RhdGljcyhkNSwgYjUpOwogIGZ1bmN0aW9uIF9fKCkgewogICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ1OwogIH0KICBkNS5wcm90b3R5cGUgPSBiNSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYjUpIDogKF9fLnByb3RvdHlwZSA9IGI1LnByb3RvdHlwZSwgbmV3IF9fKCkpOwp9CmZ1bmN0aW9uIF9fcmVzdChzMTAsIGUxMSkgewogIHZhciB0OSA9IHt9OwogIGZvciAodmFyIHA3IGluIHMxMCkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzMTAsIHA3KSAmJiBlMTEuaW5kZXhPZihwNykgPCAwKQogICAgdDlbcDddID0gczEwW3A3XTsKICBpZiAoczEwICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpCiAgICBmb3IgKHZhciBpMTEgPSAwLCBwNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoczEwKTsgaTExIDwgcDcubGVuZ3RoOyBpMTErKykgewogICAgICBpZiAoZTExLmluZGV4T2YocDdbaTExXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzMTAsIHA3W2kxMV0pKQogICAgICAgIHQ5W3A3W2kxMV1dID0gczEwW3A3W2kxMV1dOwogICAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYykgewogIHZhciBjMTEgPSBhcmd1bWVudHMubGVuZ3RoLCByMTEgPSBjMTEgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5MikgOiBkZXNjLCBkNTsKICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByMTEgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYyk7CiAgZWxzZSBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgaWYgKGQ1ID0gZGVjb3JhdG9yc1tpMTFdKSByMTEgPSAoYzExIDwgMyA/IGQ1KHIxMSkgOiBjMTEgPiAzID8gZDUodGFyZ2V0LCBrZXkyLCByMTEpIDogZDUodGFyZ2V0LCBrZXkyKSkgfHwgcjExOwogIHJldHVybiBjMTEgPiAzICYmIHIxMSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXkyLCByMTEpLCByMTE7Cn0KZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHsKICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXkyKSB7CiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXkyLCBwYXJhbUluZGV4KTsKICB9Owp9CmZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn0KZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnMyKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9CmZ1bmN0aW9uIF9fcHJvcEtleSh4NCkgewogIHJldHVybiB0eXBlb2YgeDQgPT09ICJzeW1ib2wiID8geDQgOiAiIi5jb25jYXQoeDQpOwp9CmZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGY3LCBuYW1lLCBwcmVmaXg0KSB7CiAgaWYgKHR5cGVvZiBuYW1lID09PSAic3ltYm9sIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyAiWyIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sICJdIikgOiAiIjsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGY3LCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4NCA/ICIiLmNvbmNhdChwcmVmaXg0LCAiICIsIG5hbWUpIDogbmFtZSB9KTsKfQpmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7CiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpOwp9CmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQNCwgZ2VuZXJhdG9yKSB7CiAgZnVuY3Rpb24gYWRvcHQodmFsdWUyKSB7CiAgICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgUDQgPyB2YWx1ZTIgOiBuZXcgUDQoZnVuY3Rpb24ocmVzb2x2ZTIpIHsKICAgICAgcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0pOwogIH0KICByZXR1cm4gbmV3IChQNCB8fCAoUDQgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlMikgewogICAgICB0cnkgewogICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUyKSk7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIHJlamVjdChlMTEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZTIpIHsKICAgICAgdHJ5IHsKICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZTIpKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZTIocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgIH0KICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICB9KTsKfQpmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5MykgewogIHZhciBfNCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHQ5WzBdICYgMSkgdGhyb3cgdDlbMV07CiAgICByZXR1cm4gdDlbMV07CiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZjcsIHk0LCB0OSwgZzQgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTsKICByZXR1cm4gZzQubmV4dCA9IHZlcmIoMCksIGc0WyJ0aHJvdyJdID0gdmVyYigxKSwgZzRbInJldHVybiJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZzRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSksIGc0OwogIGZ1bmN0aW9uIHZlcmIobjEyKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIHN0ZXAoW24xMiwgdjVdKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgIGlmIChmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgd2hpbGUgKGc0ICYmIChnNCA9IDAsIG9wWzBdICYmIChfNCA9IDApKSwgXzQpIHRyeSB7CiAgICAgIGlmIChmNyA9IDEsIHk0ICYmICh0OSA9IG9wWzBdICYgMiA/IHk0WyJyZXR1cm4iXSA6IG9wWzBdID8geTRbInRocm93Il0gfHwgKCh0OSA9IHk0WyJyZXR1cm4iXSkgJiYgdDkuY2FsbCh5NCksIDApIDogeTQubmV4dCkgJiYgISh0OSA9IHQ5LmNhbGwoeTQsIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ5OwogICAgICBpZiAoeTQgPSAwLCB0OSkgb3AgPSBbb3BbMF0gJiAyLCB0OS52YWx1ZV07CiAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdDkgPSBvcDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIF80LmxhYmVsKys7CiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgXzQubGFiZWwrKzsKICAgICAgICAgIHk0ID0gb3BbMV07CiAgICAgICAgICBvcCA9IFswXTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIG9wID0gXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoISh0OSA9IF80LnRyeXMsIHQ5ID0gdDkubGVuZ3RoID4gMCAmJiB0OVt0OS5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgewogICAgICAgICAgICBfNCA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdDkgfHwgb3BbMV0gPiB0OVswXSAmJiBvcFsxXSA8IHQ5WzNdKSkgewogICAgICAgICAgICBfNC5sYWJlbCA9IG9wWzFdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfNC5sYWJlbCA8IHQ5WzFdKSB7CiAgICAgICAgICAgIF80LmxhYmVsID0gdDlbMV07CiAgICAgICAgICAgIHQ5ID0gb3A7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ICYmIF80LmxhYmVsIDwgdDlbMl0pIHsKICAgICAgICAgICAgXzQubGFiZWwgPSB0OVsyXTsKICAgICAgICAgICAgXzQub3BzLnB1c2gob3ApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OVsyXSkgXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG9wID0gYm9keTMuY2FsbCh0aGlzQXJnLCBfNCk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgb3AgPSBbNiwgZTExXTsKICAgICAgeTQgPSAwOwogICAgfSBmaW5hbGx5IHsKICAgICAgZjcgPSB0OSA9IDA7CiAgICB9CiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsKICAgIHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgfQp9CmZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtNiwgbzEzKSB7CiAgZm9yICh2YXIgcDcgaW4gbTYpIGlmIChwNyAhPT0gImRlZmF1bHQiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzEzLCBwNykpIF9fY3JlYXRlQmluZGluZyhvMTMsIG02LCBwNyk7Cn0KZnVuY3Rpb24gX192YWx1ZXMobzEzKSB7CiAgdmFyIHMxMCA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtNiA9IHMxMCAmJiBvMTNbczEwXSwgaTExID0gMDsKICBpZiAobTYpIHJldHVybiBtNi5jYWxsKG8xMyk7CiAgaWYgKG8xMyAmJiB0eXBlb2YgbzEzLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKG8xMyAmJiBpMTEgPj0gbzEzLmxlbmd0aCkgbzEzID0gdm9pZCAwOwogICAgICByZXR1cm4geyB2YWx1ZTogbzEzICYmIG8xM1tpMTErK10sIGRvbmU6ICFvMTMgfTsKICAgIH0KICB9OwogIHRocm93IG5ldyBUeXBlRXJyb3IoczEwID8gIk9iamVjdCBpcyBub3QgaXRlcmFibGUuIiA6ICJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7Cn0KZnVuY3Rpb24gX19yZWFkKG8xMywgbjEyKSB7CiAgdmFyIG02ID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvMTNbU3ltYm9sLml0ZXJhdG9yXTsKICBpZiAoIW02KSByZXR1cm4gbzEzOwogIHZhciBpMTEgPSBtNi5jYWxsKG8xMyksIHIxMSwgYXIgPSBbXSwgZTExOwogIHRyeSB7CiAgICB3aGlsZSAoKG4xMiA9PT0gdm9pZCAwIHx8IG4xMi0tID4gMCkgJiYgIShyMTEgPSBpMTEubmV4dCgpKS5kb25lKSBhci5wdXNoKHIxMS52YWx1ZSk7CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIGUxMSA9IHsgZXJyb3IgfTsKICB9IGZpbmFsbHkgewogICAgdHJ5IHsKICAgICAgaWYgKHIxMSAmJiAhcjExLmRvbmUgJiYgKG02ID0gaTExWyJyZXR1cm4iXSkpIG02LmNhbGwoaTExKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGlmIChlMTEpIHRocm93IGUxMS5lcnJvcjsKICAgIH0KICB9CiAgcmV0dXJuIGFyOwp9CmZ1bmN0aW9uIF9fc3ByZWFkKCkgewogIGZvciAodmFyIGFyID0gW10sIGkxMSA9IDA7IGkxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSsrKQogICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpMTFdKSk7CiAgcmV0dXJuIGFyOwp9CmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkgewogIGZvciAodmFyIHMxMCA9IDAsIGkxMSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaTExIDwgaWw7IGkxMSsrKSBzMTAgKz0gYXJndW1lbnRzW2kxMV0ubGVuZ3RoOwogIGZvciAodmFyIHIxMSA9IEFycmF5KHMxMCksIGs0ID0gMCwgaTExID0gMDsgaTExIDwgaWw7IGkxMSsrKQogICAgZm9yICh2YXIgYTUgPSBhcmd1bWVudHNbaTExXSwgajQgPSAwLCBqbCA9IGE1Lmxlbmd0aDsgajQgPCBqbDsgajQrKywgazQrKykKICAgICAgcjExW2s0XSA9IGE1W2o0XTsKICByZXR1cm4gcjExOwp9CmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20yLCBwYWNrKSB7CiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaTExID0gMCwgbDYgPSBmcm9tMi5sZW5ndGgsIGFyOyBpMTEgPCBsNjsgaTExKyspIHsKICAgIGlmIChhciB8fCAhKGkxMSBpbiBmcm9tMikpIHsKICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tMiwgMCwgaTExKTsKICAgICAgYXJbaTExXSA9IGZyb20yW2kxMV07CiAgICB9CiAgfQogIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbTIpKTsKfQpmdW5jdGlvbiBfX2F3YWl0KHY1KSB7CiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHY1LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHY1KTsKfQpmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBnNCA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaTExLCBxID0gW107CiAgcmV0dXJuIGkxMSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSAiZnVuY3Rpb24iID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYigibmV4dCIpLCB2ZXJiKCJ0aHJvdyIpLCB2ZXJiKCJyZXR1cm4iLCBhd2FpdFJldHVybiksIGkxMVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzOwogIH0sIGkxMTsKICBmdW5jdGlvbiBhd2FpdFJldHVybihmNykgewogICAgcmV0dXJuIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodjUpLnRoZW4oZjcsIHJlamVjdCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiB2ZXJiKG4xMiwgZjcpIHsKICAgIGlmIChnNFtuMTJdKSB7CiAgICAgIGkxMVtuMTJdID0gZnVuY3Rpb24odjUpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYTUsIGI1KSB7CiAgICAgICAgICBxLnB1c2goW24xMiwgdjUsIGE1LCBiNV0pID4gMSB8fCByZXN1bWUobjEyLCB2NSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGlmIChmNykgaTExW24xMl0gPSBmNyhpMTFbbjEyXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlc3VtZShuMTIsIHY1KSB7CiAgICB0cnkgewogICAgICBzdGVwKGc0W24xMl0odjUpKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBzZXR0bGUocVswXVszXSwgZTExKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc3RlcChyMTEpIHsKICAgIHIxMS52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUocjExLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByMTEpOwogIH0KICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlMikgewogICAgcmVzdW1lKCJuZXh0IiwgdmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlMikgewogICAgcmVzdW1lKCJ0aHJvdyIsIHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIHNldHRsZShmNywgdjUpIHsKICAgIGlmIChmNyh2NSksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsKICB9Cn0KZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvMTMpIHsKICB2YXIgaTExLCBwNzsKICByZXR1cm4gaTExID0ge30sIHZlcmIoIm5leHQiKSwgdmVyYigidGhyb3ciLCBmdW5jdGlvbihlMTEpIHsKICAgIHRocm93IGUxMTsKICB9KSwgdmVyYigicmV0dXJuIiksIGkxMVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTE7CiAgZnVuY3Rpb24gdmVyYihuMTIsIGY3KSB7CiAgICBpMTFbbjEyXSA9IG8xM1tuMTJdID8gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIChwNyA9ICFwNykgPyB7IHZhbHVlOiBfX2F3YWl0KG8xM1tuMTJdKHY1KSksIGRvbmU6IGZhbHNlIH0gOiBmNyA/IGY3KHY1KSA6IHY1OwogICAgfSA6IGY3OwogIH0KfQpmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8xMykgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBtNiA9IG8xM1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGkxMTsKICByZXR1cm4gbTYgPyBtNi5jYWxsKG8xMykgOiAobzEzID0gdHlwZW9mIF9fdmFsdWVzID09PSAiZnVuY3Rpb24iID8gX192YWx1ZXMobzEzKSA6IG8xM1tTeW1ib2wuaXRlcmF0b3JdKCksIGkxMSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIpLCBpMTFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTEpOwogIGZ1bmN0aW9uIHZlcmIobjEyKSB7CiAgICBpMTFbbjEyXSA9IG8xM1tuMTJdICYmIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgdjUgPSBvMTNbbjEyXSh2NSksIHNldHRsZShyZXNvbHZlMiwgcmVqZWN0LCB2NS5kb25lLCB2NS52YWx1ZSk7CiAgICAgIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUyLCByZWplY3QsIGQ1LCB2NSkgewogICAgUHJvbWlzZS5yZXNvbHZlKHY1KS50aGVuKGZ1bmN0aW9uKHY2KSB7CiAgICAgIHJlc29sdmUyKHsgdmFsdWU6IHY2LCBkb25lOiBkNSB9KTsKICAgIH0sIHJlamVjdCk7CiAgfQp9CmZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3MikgewogIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsICJyYXciLCB7IHZhbHVlOiByYXcyIH0pOwogIH0gZWxzZSB7CiAgICBjb29rZWQucmF3ID0gcmF3MjsKICB9CiAgcmV0dXJuIGNvb2tlZDsKfQpmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7CiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICB2YXIgcmVzdWx0ID0ge307CiAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICBmb3IgKHZhciBrNCA9IG93bktleXMobW9kKSwgaTExID0gMDsgaTExIDwgazQubGVuZ3RoOyBpMTErKykgaWYgKGs0W2kxMV0gIT09ICJkZWZhdWx0IikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrNFtpMTFdKTsKICB9CiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHsKICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZjcpIHsKICBpZiAoa2luZCA9PT0gImEiICYmICFmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyIik7CiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZjcgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7CiAgcmV0dXJuIGtpbmQgPT09ICJtIiA/IGY3IDoga2luZCA9PT0gImEiID8gZjcuY2FsbChyZWNlaXZlcikgOiBmNyA/IGY3LnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOwogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmNyA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOwogIHJldHVybiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyLCB2YWx1ZTIpIDogZjcgPyBmNy52YWx1ZSA9IHZhbHVlMiA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUyKSwgdmFsdWUyOwp9CmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHsKICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgdHlwZW9mIHJlY2VpdmVyICE9PSAib2JqZWN0IiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7CiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52MiwgdmFsdWUyLCBhc3luYzIpIHsKICBpZiAodmFsdWUyICE9PSBudWxsICYmIHZhbHVlMiAhPT0gdm9pZCAwKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkLiIpOwogICAgdmFyIGRpc3Bvc2UsIGlubmVyOwogICAgaWYgKGFzeW5jMikgewogICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuIik7CiAgICAgIGRpc3Bvc2UgPSB2YWx1ZTJbU3ltYm9sLmFzeW5jRGlzcG9zZV07CiAgICB9CiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7CiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICBkaXNwb3NlID0gdmFsdWUyW1N5bWJvbC5kaXNwb3NlXTsKICAgICAgaWYgKGFzeW5jMikgaW5uZXIgPSBkaXNwb3NlOwogICAgfQogICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuIik7CiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsKICAgICAgICBpbm5lci5jYWxsKHRoaXMpOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZTExKTsKICAgICAgfQogICAgfTsKICAgIGVudjIuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZTIsIGRpc3Bvc2UsIGFzeW5jOiBhc3luYzIgfSk7CiAgfSBlbHNlIGlmIChhc3luYzIpIHsKICAgIGVudjIuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pOwogIH0KICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYyKSB7CiAgZnVuY3Rpb24gZmFpbChlMTEpIHsKICAgIGVudjIuZXJyb3IgPSBlbnYyLmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZTExLCBlbnYyLmVycm9yLCAiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLiIpIDogZTExOwogICAgZW52Mi5oYXNFcnJvciA9IHRydWU7CiAgfQogIHZhciByMTEsIHMxMCA9IDA7CiAgZnVuY3Rpb24gbmV4dDIoKSB7CiAgICB3aGlsZSAocjExID0gZW52Mi5zdGFjay5wb3AoKSkgewogICAgICB0cnkgewogICAgICAgIGlmICghcjExLmFzeW5jICYmIHMxMCA9PT0gMSkgcmV0dXJuIHMxMCA9IDAsIGVudjIuc3RhY2sucHVzaChyMTEpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQyKTsKICAgICAgICBpZiAocjExLmRpc3Bvc2UpIHsKICAgICAgICAgIHZhciByZXN1bHQgPSByMTEuZGlzcG9zZS5jYWxsKHIxMS52YWx1ZSk7CiAgICAgICAgICBpZiAocjExLmFzeW5jKSByZXR1cm4gczEwIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dDIsIGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICBmYWlsKGUxMSk7CiAgICAgICAgICAgIHJldHVybiBuZXh0MigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHMxMCB8PSAxOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICBmYWlsKGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChzMTAgPT09IDEpIHJldHVybiBlbnYyLmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52Mi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTsKICAgIGlmIChlbnYyLmhhc0Vycm9yKSB0aHJvdyBlbnYyLmVycm9yOwogIH0KICByZXR1cm4gbmV4dDIoKTsKfQpmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoMiwgcHJlc2VydmVKc3gpIHsKICBpZiAodHlwZW9mIHBhdGgyID09PSAic3RyaW5nIiAmJiAvXlwuXC4/XC8vLnRlc3QocGF0aDIpKSB7CiAgICByZXR1cm4gcGF0aDIucmVwbGFjZSgvXC4odHN4KSR8KCg/OlwuZCk/KSgoPzpcLlteLi9dKz8pPylcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24obTYsIHRzeCwgZDUsIGV4dCwgY20pIHsKICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gIi5qc3giIDogIi5qcyIgOiBkNSAmJiAoIWV4dCB8fCAhY20pID8gbTYgOiBkNSArIGV4dCArICIuIiArIGNtLnRvTG93ZXJDYXNlKCkgKyAianMiOwogICAgfSk7CiAgfQogIHJldHVybiBwYXRoMjsKfQp2YXIgZXh0ZW5kU3RhdGljcywgX19hc3NpZ24sIF9fY3JlYXRlQmluZGluZywgX19zZXRNb2R1bGVEZWZhdWx0LCBvd25LZXlzLCBfU3VwcHJlc3NlZEVycm9yLCB0c2xpYl9lczZfZGVmYXVsdDsKdmFyIGluaXRfdHNsaWJfZXM2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHNsaWJAMi44LjEvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiKCkgewogICAgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQ1LCBiNSkgewogICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZDYsIGI2KSB7CiAgICAgICAgZDYuX19wcm90b19fID0gYjY7CiAgICAgIH0gfHwgZnVuY3Rpb24oZDYsIGI2KSB7CiAgICAgICAgZm9yICh2YXIgcDcgaW4gYjYpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYjYsIHA3KSkgZDZbcDddID0gYjZbcDddOwogICAgICB9OwogICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkNSwgYjUpOwogICAgfTsKICAgIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7CiAgICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbjIodDkpIHsKICAgICAgICBmb3IgKHZhciBzMTAsIGkxMSA9IDEsIG4xMiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMjsgaTExKyspIHsKICAgICAgICAgIHMxMCA9IGFyZ3VtZW50c1tpMTFdOwogICAgICAgICAgZm9yICh2YXIgcDcgaW4gczEwKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMxMCwgcDcpKSB0OVtwN10gPSBzMTBbcDddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdDk7CiAgICAgIH07CiAgICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfTsKICAgIDsKICAgIDsKICAgIDsKICAgIDsKICAgIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obzEzLCBtNiwgazQsIGsyMikgewogICAgICBpZiAoazIyID09PSB2b2lkIDApIGsyMiA9IGs0OwogICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobTYsIGs0KTsKICAgICAgaWYgKCFkZXNjIHx8ICgiZ2V0IiBpbiBkZXNjID8gIW02Ll9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkgewogICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbTZbazRdOwogICAgICAgIH0gfTsKICAgICAgfQogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobzEzLCBrMjIsIGRlc2MpOwogICAgfSkgOiAoZnVuY3Rpb24obzEzLCBtNiwgazQsIGsyMikgewogICAgICBpZiAoazIyID09PSB2b2lkIDApIGsyMiA9IGs0OwogICAgICBvMTNbazIyXSA9IG02W2s0XTsKICAgIH0pOwogICAgOwogICAgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIHY1KSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsICJkZWZhdWx0IiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdjUgfSk7CiAgICB9KSA6IGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgbzEzWyJkZWZhdWx0Il0gPSB2NTsKICAgIH07CiAgICBvd25LZXlzID0gZnVuY3Rpb24obzEzKSB7CiAgICAgIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbihvMTQpIHsKICAgICAgICB2YXIgYXIgPSBbXTsKICAgICAgICBmb3IgKHZhciBrNCBpbiBvMTQpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzE0LCBrNCkpIGFyW2FyLmxlbmd0aF0gPSBrNDsKICAgICAgICByZXR1cm4gYXI7CiAgICAgIH07CiAgICAgIHJldHVybiBvd25LZXlzKG8xMyk7CiAgICB9OwogICAgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09ICJmdW5jdGlvbiIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbihlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZTIpIHsKICAgICAgdmFyIGUxMSA9IG5ldyBFcnJvcihtZXNzYWdlMik7CiAgICAgIHJldHVybiBlMTEubmFtZSA9ICJTdXBwcmVzc2VkRXJyb3IiLCBlMTEuZXJyb3IgPSBlcnJvciwgZTExLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlMTE7CiAgICB9OwogICAgdHNsaWJfZXM2X2RlZmF1bHQgPSB7CiAgICAgIF9fZXh0ZW5kcywKICAgICAgX19hc3NpZ24sCiAgICAgIF9fcmVzdCwKICAgICAgX19kZWNvcmF0ZSwKICAgICAgX19wYXJhbSwKICAgICAgX19lc0RlY29yYXRlLAogICAgICBfX3J1bkluaXRpYWxpemVyczogX19ydW5Jbml0aWFsaXplcnMyLAogICAgICBfX3Byb3BLZXksCiAgICAgIF9fc2V0RnVuY3Rpb25OYW1lLAogICAgICBfX21ldGFkYXRhLAogICAgICBfX2F3YWl0ZXIsCiAgICAgIF9fZ2VuZXJhdG9yLAogICAgICBfX2NyZWF0ZUJpbmRpbmcsCiAgICAgIF9fZXhwb3J0U3RhciwKICAgICAgX192YWx1ZXMsCiAgICAgIF9fcmVhZCwKICAgICAgX19zcHJlYWQsCiAgICAgIF9fc3ByZWFkQXJyYXlzLAogICAgICBfX3NwcmVhZEFycmF5LAogICAgICBfX2F3YWl0LAogICAgICBfX2FzeW5jR2VuZXJhdG9yLAogICAgICBfX2FzeW5jRGVsZWdhdG9yLAogICAgICBfX2FzeW5jVmFsdWVzLAogICAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCwKICAgICAgX19pbXBvcnRTdGFyLAogICAgICBfX2ltcG9ydERlZmF1bHQsCiAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsCiAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsCiAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbiwKICAgICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsCiAgICAgIF9fZGlzcG9zZVJlc291cmNlcywKICAgICAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMKZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZTIpIHsKICByZXR1cm4gdHlwZW9mIHZhbHVlMiA9PT0gImZ1bmN0aW9uIjsKfQp2YXIgaW5pdF9pc0Z1bmN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0Z1bmN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvY3JlYXRlRXJyb3JDbGFzcy5qcwpmdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHsKICB2YXIgX3N1cGVyID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpOwogICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKICB9OwogIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTsKICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CiAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7CiAgcmV0dXJuIGN0b3JGdW5jOwp9CnZhciBpbml0X2NyZWF0ZUVycm9yQ2xhc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2NyZWF0ZUVycm9yQ2xhc3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzCnZhciBVbnN1YnNjcmlwdGlvbkVycm9yOwp2YXIgaW5pdF9VbnN1YnNjcmlwdGlvbkVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzID8gZXJyb3JzLmxlbmd0aCArICIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uKGVyciwgaTExKSB7CiAgICAgICAgICByZXR1cm4gaTExICsgMSArICIpICIgKyBlcnIudG9TdHJpbmcoKTsKICAgICAgICB9KS5qb2luKCJcbiAgIikgOiAiIjsKICAgICAgICB0aGlzLm5hbWUgPSAiVW5zdWJzY3JpcHRpb25FcnJvciI7CiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvYXJyUmVtb3ZlLmpzCmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHsKICBpZiAoYXJyKSB7CiAgICB2YXIgaW5kZXgyID0gYXJyLmluZGV4T2YoaXRlbSk7CiAgICAwIDw9IGluZGV4MiAmJiBhcnIuc3BsaWNlKGluZGV4MiwgMSk7CiAgfQp9CnZhciBpbml0X2FyclJlbW92ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvYXJyUmVtb3ZlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcwpmdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8IHZhbHVlMiAmJiAiY2xvc2VkIiBpbiB2YWx1ZTIgJiYgaXNGdW5jdGlvbih2YWx1ZTIucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUyLnVuc3Vic2NyaWJlKTsKfQpmdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikgewogIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHsKICAgIGZpbmFsaXplcigpOwogIH0gZWxzZSB7CiAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTsKICB9Cn0KdmFyIFN1YnNjcmlwdGlvbiwgRU1QVFlfU1VCU0NSSVBUSU9OOwp2YXIgaW5pdF9TdWJzY3JpcHRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpcHRpb24uanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9VbnN1YnNjcmlwdGlvbkVycm9yKCk7CiAgICBpbml0X2FyclJlbW92ZSgpOwogICAgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24yKGluaXRpYWxUZWFyZG93bikgewogICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duOwogICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDsKICAgICAgfQogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlXzEsIF9hMTQsIGVfMiwgX2I7CiAgICAgICAgdmFyIGVycm9yczsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7CiAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTsKICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7CiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7CiAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGNhdGNoIChlXzFfMSkgewogICAgICAgICAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYTE0ID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hMTQuY2FsbChfcGFyZW50YWdlXzEpOwogICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjsKICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpOwogICAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgICBlcnJvcnMgPSBlMTEgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZTExLmVycm9ycyA6IFtlMTFdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzOwogICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7CiAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdOwogICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikgewogICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVfMl8xKSB7CiAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpOwogICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXJyb3JzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0ZWFyZG93bikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykgewogICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uMikgewogICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hMTQgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYTE0ICE9PSB2b2lkIDAgPyBfYTE0IDogW10pLnB1c2godGVhcmRvd24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCk7CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihwYXJlbnQpIHsKICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTsKICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDsKICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHsKICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7CiAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHRlYXJkb3duKSB7CiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVyczsKICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTsKICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24yKSB7CiAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5FTVBUWSA9IChmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZW1wdHk0ID0gbmV3IFN1YnNjcmlwdGlvbjIoKTsKICAgICAgICBlbXB0eTQuY2xvc2VkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gZW1wdHk0OwogICAgICB9KSgpOwogICAgICByZXR1cm4gU3Vic2NyaXB0aW9uMjsKICAgIH0pKCk7CiAgICBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9jb25maWcuanMKdmFyIGNvbmZpZzsKdmFyIGluaXRfY29uZmlnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvY29uZmlnLmpzIigpIHsKICAgIGNvbmZpZyA9IHsKICAgICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCwKICAgICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLAogICAgICBQcm9taXNlOiB2b2lkIDAsCiAgICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLAogICAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlci5qcwp2YXIgdGltZW91dFByb3ZpZGVyOwp2YXIgaW5pdF90aW1lb3V0UHJvdmlkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICB0aW1lb3V0UHJvdmlkZXIgPSB7CiAgICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGhhbmRsZXIyLCB0aW1lb3V0MikgewogICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldFRpbWVvdXQpIHsKICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRUaW1lb3V0LmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyMiwgdGltZW91dDJdLCBfX3JlYWQoYXJncykpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyMiwgdGltZW91dDJdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlMyk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yLmpzCmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikgewogIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgdmFyIG9uVW5oYW5kbGVkRXJyb3IgPSBjb25maWcub25VbmhhbmRsZWRFcnJvcjsKICAgIGlmIChvblVuaGFuZGxlZEVycm9yKSB7CiAgICAgIG9uVW5oYW5kbGVkRXJyb3IoZXJyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IGVycjsKICAgIH0KICB9KTsKfQp2YXIgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IuanMiKCkgewogICAgaW5pdF9jb25maWcoKTsKICAgIGluaXRfdGltZW91dFByb3ZpZGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMKZnVuY3Rpb24gbm9vcCgpIHsKfQp2YXIgaW5pdF9ub29wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9ub29wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcwpmdW5jdGlvbiBlcnJvck5vdGlmaWNhdGlvbihlcnJvcikgewogIHJldHVybiBjcmVhdGVOb3RpZmljYXRpb24oIkUiLCB2b2lkIDAsIGVycm9yKTsKfQpmdW5jdGlvbiBuZXh0Tm90aWZpY2F0aW9uKHZhbHVlMikgewogIHJldHVybiBjcmVhdGVOb3RpZmljYXRpb24oIk4iLCB2YWx1ZTIsIHZvaWQgMCk7Cn0KZnVuY3Rpb24gY3JlYXRlTm90aWZpY2F0aW9uKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICByZXR1cm4gewogICAga2luZCwKICAgIHZhbHVlOiB2YWx1ZTIsCiAgICBlcnJvcgogIH07Cn0KdmFyIENPTVBMRVRFX05PVElGSUNBVElPTjsKdmFyIGluaXRfTm90aWZpY2F0aW9uRmFjdG9yaWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzIigpIHsKICAgIENPTVBMRVRFX05PVElGSUNBVElPTiA9IChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiQyIsIHZvaWQgMCwgdm9pZCAwKTsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcwpmdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHsKICAgIHZhciBpc1Jvb3QgPSAhY29udGV4dDsKICAgIGlmIChpc1Jvb3QpIHsKICAgICAgY29udGV4dCA9IHsgZXJyb3JUaHJvd246IGZhbHNlLCBlcnJvcjogbnVsbCB9OwogICAgfQogICAgY2IoKTsKICAgIGlmIChpc1Jvb3QpIHsKICAgICAgdmFyIF9hMTQgPSBjb250ZXh0LCBlcnJvclRocm93biA9IF9hMTQuZXJyb3JUaHJvd24sIGVycm9yID0gX2ExNC5lcnJvcjsKICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgIGlmIChlcnJvclRocm93bikgewogICAgICAgIHRocm93IGVycm9yOwogICAgICB9CiAgICB9CiAgfSBlbHNlIHsKICAgIGNiKCk7CiAgfQp9CmZ1bmN0aW9uIGNhcHR1cmVFcnJvcihlcnIpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgJiYgY29udGV4dCkgewogICAgY29udGV4dC5lcnJvclRocm93biA9IHRydWU7CiAgICBjb250ZXh0LmVycm9yID0gZXJyOwogIH0KfQp2YXIgY29udGV4dDsKdmFyIGluaXRfZXJyb3JDb250ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9lcnJvckNvbnRleHQuanMiKCkgewogICAgaW5pdF9jb25maWcoKTsKICAgIGNvbnRleHQgPSBudWxsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaWJlci5qcwpmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7CiAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpOwp9CmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7CiAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7CiAgICBjYXB0dXJlRXJyb3IoZXJyb3IpOwogIH0gZWxzZSB7CiAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7CiAgfQp9CmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7CiAgdGhyb3cgZXJyOwp9CmZ1bmN0aW9uIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKSB7CiAgdmFyIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiA9IGNvbmZpZy5vblN0b3BwZWROb3RpZmljYXRpb247CiAgb25TdG9wcGVkTm90aWZpY2F0aW9uICYmIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG9uU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpOwogIH0pOwp9CnZhciBTdWJzY3JpYmVyLCBfYmluZCwgQ29uc3VtZXJPYnNlcnZlciwgU2FmZVN1YnNjcmliZXIsIEVNUFRZX09CU0VSVkVSOwp2YXIgaW5pdF9TdWJzY3JpYmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaWJlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9jb25maWcoKTsKICAgIGluaXRfcmVwb3J0VW5oYW5kbGVkRXJyb3IoKTsKICAgIGluaXRfbm9vcCgpOwogICAgaW5pdF9Ob3RpZmljYXRpb25GYWN0b3JpZXMoKTsKICAgIGluaXRfdGltZW91dFByb3ZpZGVyKCk7CiAgICBpbml0X2Vycm9yQ29udGV4dCgpOwogICAgU3Vic2NyaWJlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTdWJzY3JpYmVyMihkZXN0aW5hdGlvbikgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7CiAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOwogICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgU3Vic2NyaWJlcjIuY3JlYXRlID0gZnVuY3Rpb24obmV4dDIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dDIsIGVycm9yLCBjb21wbGV0ZSk7CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5leHROb3RpZmljYXRpb24odmFsdWUyKSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX25leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihlcnJvck5vdGlmaWNhdGlvbihlcnIpLCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlOwogICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihDT01QTEVURV9OT1RJRklDQVRJT04sIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlOwogICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpOwogICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUyKTsKICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gU3Vic2NyaWJlcjI7CiAgICB9KShTdWJzY3JpcHRpb24pOwogICAgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDsKICAgIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIyKHBhcnRpYWxPYnNlcnZlcikgewogICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyOwogICAgICB9CiAgICAgIENvbnN1bWVyT2JzZXJ2ZXIyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnN1bWVyT2JzZXJ2ZXIyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIENvbnN1bWVyT2JzZXJ2ZXIyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyMjsKICAgIH0pKCk7CiAgICBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkgewogICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gewogICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB2b2lkIDAsCiAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB2b2lkIDAsCiAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB2b2lkIDAKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBjb250ZXh0XzE7CiAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTsKICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHsKICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSwKICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSwKICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKQogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyMjsKICAgIH0pKFN1YnNjcmliZXIpOwogICAgRU1QVFlfT0JTRVJWRVIgPSB7CiAgICAgIGNsb3NlZDogdHJ1ZSwKICAgICAgbmV4dDogbm9vcCwKICAgICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsCiAgICAgIGNvbXBsZXRlOiBub29wCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL29ic2VydmFibGUuanMKdmFyIG9ic2VydmFibGU7CnZhciBpbml0X29ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS5qcyIoKSB7CiAgICBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCAiQEBvYnNlcnZhYmxlIjsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzCmZ1bmN0aW9uIGlkZW50aXR5KHg0KSB7CiAgcmV0dXJuIHg0Owp9CnZhciBpbml0X2lkZW50aXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3BpcGUuanMKZnVuY3Rpb24gcGlwZSgpIHsKICB2YXIgZm5zID0gW107CiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgIGZuc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICByZXR1cm4gcGlwZUZyb21BcnJheShmbnMpOwp9CmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7CiAgaWYgKGZucy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiBpZGVudGl0eTsKICB9CiAgaWYgKGZucy5sZW5ndGggPT09IDEpIHsKICAgIHJldHVybiBmbnNbMF07CiAgfQogIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkgewogICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgZm4pIHsKICAgICAgcmV0dXJuIGZuKHByZXYpOwogICAgfSwgaW5wdXQpOwogIH07Cn0KdmFyIGluaXRfcGlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcGlwZS5qcyIoKSB7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9PYnNlcnZhYmxlLmpzCmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7CiAgdmFyIF9hMTQ7CiAgcmV0dXJuIChfYTE0ID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hMTQgIT09IHZvaWQgMCA/IF9hMTQgOiBQcm9taXNlOwp9CmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZTIuY29tcGxldGUpOwp9CmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICYmIHZhbHVlMiBpbnN0YW5jZW9mIFN1YnNjcmliZXIgfHwgaXNPYnNlcnZlcih2YWx1ZTIpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlMik7Cn0KdmFyIE9ic2VydmFibGU7CnZhciBpbml0X09ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9PYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9waXBlKCk7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2Vycm9yQ29udGV4dCgpOwogICAgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gT2JzZXJ2YWJsZTIoc3Vic2NyaWJlMikgewogICAgICAgIGlmIChzdWJzY3JpYmUyKSB7CiAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmUyOwogICAgICAgIH0KICAgICAgfQogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG9wZXJhdG9yKSB7CiAgICAgICAgdmFyIG9ic2VydmFibGUyID0gbmV3IE9ic2VydmFibGUyKCk7CiAgICAgICAgb2JzZXJ2YWJsZTIuc291cmNlID0gdGhpczsKICAgICAgICBvYnNlcnZhYmxlMi5vcGVyYXRvciA9IG9wZXJhdG9yOwogICAgICAgIHJldHVybiBvYnNlcnZhYmxlMjsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpOwogICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBfYTE0ID0gX3RoaXMsIG9wZXJhdG9yID0gX2ExNC5vcGVyYXRvciwgc291cmNlID0gX2ExNC5zb3VyY2U7CiAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvciA/IG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKSA6IHNvdXJjZSA/IF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcikgOiBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihzaW5rKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBzaW5rLmVycm9yKGVycik7CiAgICAgICAgfQogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG5leHQyLCBwcm9taXNlQ3RvcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7CiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7CiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBuZXh0Mih2YWx1ZTIpOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgcmVqZWN0KGVycik7CiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBlcnJvcjogcmVqZWN0LAogICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZTIKICAgICAgICAgIH0pOwogICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICByZXR1cm4gKF9hMTQgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBvcGVyYXRpb25zID0gW107CiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihwcm9taXNlQ3RvcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7CiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICB2YXIgdmFsdWUyOwogICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uKHg0KSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTIgPSB4NDsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7CiAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUyKHZhbHVlMik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIuY3JlYXRlID0gZnVuY3Rpb24oc3Vic2NyaWJlMikgewogICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTIoc3Vic2NyaWJlMik7CiAgICAgIH07CiAgICAgIHJldHVybiBPYnNlcnZhYmxlMjsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMKZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHsKICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7Cn0KZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7CiAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSkgewogICAgaWYgKGhhc0xpZnQoc291cmNlKSkgewogICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24obGlmdGVkU291cmNlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICB0aGlzLmVycm9yKGVycik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIik7CiAgfTsKfQp2YXIgaW5pdF9saWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9saWZ0LmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcwpmdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkgewogIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpOwp9CnZhciBPcGVyYXRvclN1YnNjcmliZXI7CnZhciBpbml0X09wZXJhdG9yU3Vic2NyaWJlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyMihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzOwogICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplOwogICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7CiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHQgPyBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG9uTmV4dCh2YWx1ZTIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7CiAgICAgICAgICB9CiAgICAgICAgfSA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7CiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvciA/IGZ1bmN0aW9uKGVycikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyMikgewogICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIyKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7CiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZSA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25Db21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBPcGVyYXRvclN1YnNjcmliZXIyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHsKICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkOwogICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpOwogICAgICAgICAgIWNsb3NlZF8xICYmICgoX2ExNCA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5jYWxsKHRoaXMpKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXIyOwogICAgfSkoU3Vic2NyaWJlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMKZnVuY3Rpb24gcmVmQ291bnQoKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY29ubmVjdGlvbiA9IG51bGw7CiAgICBzb3VyY2UuX3JlZkNvdW50Kys7CiAgICB2YXIgcmVmQ291bnRlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFzb3VyY2UgfHwgc291cmNlLl9yZWZDb3VudCA8PSAwIHx8IDAgPCAtLXNvdXJjZS5fcmVmQ291bnQpIHsKICAgICAgICBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIHNoYXJlZENvbm5lY3Rpb24gPSBzb3VyY2UuX2Nvbm5lY3Rpb247CiAgICAgIHZhciBjb25uID0gY29ubmVjdGlvbjsKICAgICAgY29ubmVjdGlvbiA9IG51bGw7CiAgICAgIGlmIChzaGFyZWRDb25uZWN0aW9uICYmICghY29ubiB8fCBzaGFyZWRDb25uZWN0aW9uID09PSBjb25uKSkgewogICAgICAgIHNoYXJlZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7CiAgICB9KTsKICAgIHNvdXJjZS5zdWJzY3JpYmUocmVmQ291bnRlcik7CiAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7CiAgICAgIGNvbm5lY3Rpb24gPSBzb3VyY2UuY29ubmVjdCgpOwogICAgfQogIH0pOwp9CnZhciBpbml0X3JlZkNvdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZkNvdW50LmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlLmpzCnZhciBDb25uZWN0YWJsZU9ic2VydmFibGU7CnZhciBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhDb25uZWN0YWJsZU9ic2VydmFibGUyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBDb25uZWN0YWJsZU9ic2VydmFibGUyKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTsKICAgICAgICBfdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5OwogICAgICAgIF90aGlzLl9zdWJqZWN0ID0gbnVsbDsKICAgICAgICBfdGhpcy5fcmVmQ291bnQgPSAwOwogICAgICAgIF90aGlzLl9jb25uZWN0aW9uID0gbnVsbDsKICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7CiAgICAgICAgICBfdGhpcy5saWZ0ID0gc291cmNlLmxpZnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLmdldFN1YmplY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXMuX3N1YmplY3Q7CiAgICAgICAgaWYgKCFzdWJqZWN0IHx8IHN1YmplY3QuaXNTdG9wcGVkKSB7CiAgICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdDsKICAgICAgfTsKICAgICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3RlYXJkb3duID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5fcmVmQ291bnQgPSAwOwogICAgICAgIHZhciBfY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247CiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIF9jb25uZWN0aW9uID09PSBudWxsIHx8IF9jb25uZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29ubmVjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247CiAgICAgICAgaWYgKCFjb25uZWN0aW9uKSB7CiAgICAgICAgICBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICAgIHZhciBzdWJqZWN0XzEgPSB0aGlzLmdldFN1YmplY3QoKTsKICAgICAgICAgIGNvbm5lY3Rpb24uYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3ViamVjdF8xLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgc3ViamVjdF8xLmNvbXBsZXRlKCk7CiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgX3RoaXMuX3RlYXJkb3duKCk7CiAgICAgICAgICAgIHN1YmplY3RfMS5lcnJvcihlcnIpOwogICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgIH0pKSk7CiAgICAgICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHsKICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb25uZWN0aW9uOwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiByZWZDb3VudCgpKHRoaXMpOwogICAgICB9OwogICAgICByZXR1cm4gQ29ubmVjdGFibGVPYnNlcnZhYmxlMjsKICAgIH0pKE9ic2VydmFibGUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3BlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuanMKdmFyIHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXI7CnZhciBpbml0X3BlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcyIoKSB7CiAgICBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyID0gewogICAgICBub3c6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAocGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5kZWxlZ2F0ZSB8fCBwZXJmb3JtYW5jZSkubm93KCk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlci5qcwp2YXIgYW5pbWF0aW9uRnJhbWVQcm92aWRlcjsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IHsKICAgICAgc2NoZWR1bGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIHJlcXVlc3QgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgICAgdmFyIGNhbmNlbCA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lOwogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgaWYgKGRlbGVnYXRlKSB7CiAgICAgICAgICByZXF1ZXN0ID0gZGVsZWdhdGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICAgICAgICAgY2FuY2VsID0gZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgfQogICAgICAgIHZhciBoYW5kbGUzID0gcmVxdWVzdChmdW5jdGlvbih0aW1lc3RhbXAyKSB7CiAgICAgICAgICBjYW5jZWwgPSB2b2lkIDA7CiAgICAgICAgICBjYWxsYmFjayh0aW1lc3RhbXAyKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBjYW5jZWwgPT09IG51bGwgfHwgY2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5jZWwoaGFuZGxlMyk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHx8IGNhbmNlbEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBkZWxlZ2F0ZTogdm9pZCAwCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzCmZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lcyh0aW1lc3RhbXBQcm92aWRlcikgewogIHJldHVybiB0aW1lc3RhbXBQcm92aWRlciA/IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIDogREVGQVVMVF9BTklNQVRJT05fRlJBTUVTOwp9CmZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkodGltZXN0YW1wUHJvdmlkZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIHByb3ZpZGVyID0gdGltZXN0YW1wUHJvdmlkZXIgfHwgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjsKICAgIHZhciBzdGFydCA9IHByb3ZpZGVyLm5vdygpOwogICAgdmFyIGlkID0gMDsKICAgIHZhciBydW4gPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIGlkID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24odGltZXN0YW1wMikgewogICAgICAgICAgaWQgPSAwOwogICAgICAgICAgdmFyIG5vdzIgPSBwcm92aWRlci5ub3coKTsKICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7CiAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIgPyBub3cyIDogdGltZXN0YW1wMiwKICAgICAgICAgICAgZWxhcHNlZDogbm93MiAtIHN0YXJ0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJ1bigpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgcnVuKCk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpZCkgewogICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpOwogICAgICB9CiAgICB9OwogIH0pOwp9CnZhciBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7CnZhciBpbml0X2FuaW1hdGlvbkZyYW1lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZG9tL2FuaW1hdGlvbkZyYW1lcy5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcigpOwogICAgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyKCk7CiAgICBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVMgPSBhbmltYXRpb25GcmFtZXNGYWN0b3J5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzCnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvcjsKdmFyIGluaXRfT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJvYmplY3QgdW5zdWJzY3JpYmVkIjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3ViamVjdC5qcwp2YXIgU3ViamVjdCwgQW5vbnltb3VzU3ViamVjdDsKdmFyIGluaXRfU3ViamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTsKICAgIGluaXRfYXJyUmVtb3ZlKCk7CiAgICBpbml0X2Vycm9yQ29udGV4dCgpOwogICAgU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFN1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTdWJqZWN0MigpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlOwogICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdOwogICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlOwogICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG9wZXJhdG9yKSB7CiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTsKICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgcmV0dXJuIHN1YmplY3Q7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGVfMSwgX2ExNDsKICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHsKICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkgewogICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7CiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlXzFfMSkgewogICAgICAgICAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2ExNCA9IF9iLnJldHVybikpIF9hMTQuY2FsbChfYik7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlOwogICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjsKICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVyczsKICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7CiAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgIH07CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0Mi5wcm90b3R5cGUsICJvYnNlcnZlZCIsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgICByZXR1cm4gKChfYTE0ID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQubGVuZ3RoKSA+IDA7CiAgICAgICAgfSwKICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpOwogICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBfYTE0ID0gdGhpcywgaGFzRXJyb3IgPSBfYTE0Lmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYTE0LmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2ExNC5vYnNlcnZlcnM7CiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkgewogICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjsKICAgICAgICB9CiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDsKICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTsKICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNC5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYTE0LnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYTE0LmlzU3RvcHBlZDsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpOwogICAgICAgIH0gZWxzZSBpZiAoaXNTdG9wcGVkKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9ic2VydmFibGUyID0gbmV3IE9ic2VydmFibGUoKTsKICAgICAgICBvYnNlcnZhYmxlMi5zb3VyY2UgPSB0aGlzOwogICAgICAgIHJldHVybiBvYnNlcnZhYmxlMjsKICAgICAgfTsKICAgICAgU3ViamVjdDIuY3JlYXRlID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJjZSkgewogICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTsKICAgICAgfTsKICAgICAgcmV0dXJuIFN1YmplY3QyOwogICAgfSkoT2JzZXJ2YWJsZSk7CiAgICBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QyKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHZhciBfYTE0LCBfYjsKICAgICAgICAoX2IgPSAoX2ExNCA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2ExNCwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIChfYiA9IChfYTE0ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2ExNCwgZXJyKTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIChfYiA9IChfYTE0ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2ExNCk7CiAgICAgIH07CiAgICAgIEFub255bW91c1N1YmplY3QyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE0LCBfYjsKICAgICAgICByZXR1cm4gKF9iID0gKF9hMTQgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjsKICAgICAgfTsKICAgICAgcmV0dXJuIEFub255bW91c1N1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMKdmFyIEJlaGF2aW9yU3ViamVjdDsKdmFyIGluaXRfQmVoYXZpb3JTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YmplY3QoKTsKICAgIEJlaGF2aW9yU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEJlaGF2aW9yU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEJlaGF2aW9yU3ViamVjdDIoX3ZhbHVlKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICBfdGhpcy5fdmFsdWUgPSBfdmFsdWU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCZWhhdmlvclN1YmplY3QyLnByb3RvdHlwZSwgInZhbHVlIiwgewogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpOwogICAgICAgIH0sCiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgICBCZWhhdmlvclN1YmplY3QyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTsKICAgICAgICAhc3Vic2NyaXB0aW9uLmNsb3NlZCAmJiBzdWJzY3JpYmVyLm5leHQodGhpcy5fdmFsdWUpOwogICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247CiAgICAgIH07CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTQuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2ExNC50aHJvd25FcnJvciwgX3ZhbHVlID0gX2ExNC5fdmFsdWU7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICB0aHJvdyB0aHJvd25FcnJvcjsKICAgICAgICB9CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHJldHVybiBfdmFsdWU7CiAgICAgIH07CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB0aGlzLl92YWx1ZSA9IHZhbHVlMik7CiAgICAgIH07CiAgICAgIHJldHVybiBCZWhhdmlvclN1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmpzCnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXI7CnZhciBpbml0X2RhdGVUaW1lc3RhbXBQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMiKCkgewogICAgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gewogICAgICBub3c6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAoZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IERhdGUpLm5vdygpOwogICAgICB9LAogICAgICBkZWxlZ2F0ZTogdm9pZCAwCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcwp2YXIgUmVwbGF5U3ViamVjdDsKdmFyIGluaXRfUmVwbGF5U3ViamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1JlcGxheVN1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3ViamVjdCgpOwogICAgaW5pdF9kYXRlVGltZXN0YW1wUHJvdmlkZXIoKTsKICAgIFJlcGxheVN1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhSZXBsYXlTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUmVwbGF5U3ViamVjdDIoX2J1ZmZlclNpemUsIF93aW5kb3dUaW1lLCBfdGltZXN0YW1wUHJvdmlkZXIpIHsKICAgICAgICBpZiAoX2J1ZmZlclNpemUgPT09IHZvaWQgMCkgewogICAgICAgICAgX2J1ZmZlclNpemUgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKF93aW5kb3dUaW1lID09PSB2b2lkIDApIHsKICAgICAgICAgIF93aW5kb3dUaW1lID0gSW5maW5pdHk7CiAgICAgICAgfQogICAgICAgIGlmIChfdGltZXN0YW1wUHJvdmlkZXIgPT09IHZvaWQgMCkgewogICAgICAgICAgX3RpbWVzdGFtcFByb3ZpZGVyID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyOwogICAgICAgIH0KICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl9idWZmZXJTaXplID0gX2J1ZmZlclNpemU7CiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBfd2luZG93VGltZTsKICAgICAgICBfdGhpcy5fdGltZXN0YW1wUHJvdmlkZXIgPSBfdGltZXN0YW1wUHJvdmlkZXI7CiAgICAgICAgX3RoaXMuX2J1ZmZlciA9IFtdOwogICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0cnVlOwogICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7CiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBNYXRoLm1heCgxLCBfYnVmZmVyU2l6ZSk7CiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBNYXRoLm1heCgxLCBfd2luZG93VGltZSk7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFJlcGxheVN1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBpc1N0b3BwZWQgPSBfYTE0LmlzU3RvcHBlZCwgX2J1ZmZlciA9IF9hMTQuX2J1ZmZlciwgX2luZmluaXRlVGltZVdpbmRvdyA9IF9hMTQuX2luZmluaXRlVGltZVdpbmRvdywgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2ExNC5fdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lID0gX2ExNC5fd2luZG93VGltZTsKICAgICAgICBpZiAoIWlzU3RvcHBlZCkgewogICAgICAgICAgX2J1ZmZlci5wdXNoKHZhbHVlMik7CiAgICAgICAgICAhX2luZmluaXRlVGltZVdpbmRvdyAmJiBfYnVmZmVyLnB1c2goX3RpbWVzdGFtcFByb3ZpZGVyLm5vdygpICsgX3dpbmRvd1RpbWUpOwogICAgICAgIH0KICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7CiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgdmFsdWUyKTsKICAgICAgfTsKICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTsKICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNC5faW5maW5pdGVUaW1lV2luZG93LCBfYnVmZmVyID0gX2ExNC5fYnVmZmVyOwogICAgICAgIHZhciBjb3B5ID0gX2J1ZmZlci5zbGljZSgpOwogICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaTExICs9IF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgewogICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGNvcHlbaTExXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICAgICAgfTsKICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLl90cmltQnVmZmVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBfYnVmZmVyU2l6ZSA9IF9hMTQuX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciA9IF9hMTQuX3RpbWVzdGFtcFByb3ZpZGVyLCBfYnVmZmVyID0gX2ExNC5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNC5faW5maW5pdGVUaW1lV2luZG93OwogICAgICAgIHZhciBhZGp1c3RlZEJ1ZmZlclNpemUgPSAoX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSAqIF9idWZmZXJTaXplOwogICAgICAgIF9idWZmZXJTaXplIDwgSW5maW5pdHkgJiYgYWRqdXN0ZWRCdWZmZXJTaXplIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlci5zcGxpY2UoMCwgX2J1ZmZlci5sZW5ndGggLSBhZGp1c3RlZEJ1ZmZlclNpemUpOwogICAgICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykgewogICAgICAgICAgdmFyIG5vdzIgPSBfdGltZXN0YW1wUHJvdmlkZXIubm93KCk7CiAgICAgICAgICB2YXIgbGFzdDMgPSAwOwogICAgICAgICAgZm9yICh2YXIgaTExID0gMTsgaTExIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlcltpMTFdIDw9IG5vdzI7IGkxMSArPSAyKSB7CiAgICAgICAgICAgIGxhc3QzID0gaTExOwogICAgICAgICAgfQogICAgICAgICAgbGFzdDMgJiYgX2J1ZmZlci5zcGxpY2UoMCwgbGFzdDMgKyAxKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBSZXBsYXlTdWJqZWN0MjsKICAgIH0pKFN1YmplY3QpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQXN5bmNTdWJqZWN0LmpzCnZhciBBc3luY1N1YmplY3Q7CnZhciBpbml0X0FzeW5jU3ViamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0FzeW5jU3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBBc3luY1N1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc3luY1N1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc3luY1N1YmplY3QyKCkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl92YWx1ZSA9IG51bGw7CiAgICAgICAgX3RoaXMuX2hhc1ZhbHVlID0gZmFsc2U7CiAgICAgICAgX3RoaXMuX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTQuaGFzRXJyb3IsIF9oYXNWYWx1ZSA9IF9hMTQuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYTE0Ll92YWx1ZSwgdGhyb3duRXJyb3IgPSBfYTE0LnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYTE0LmlzU3RvcHBlZCwgX2lzQ29tcGxldGUgPSBfYTE0Ll9pc0NvbXBsZXRlOwogICAgICAgIGlmIChoYXNFcnJvcikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0b3BwZWQgfHwgX2lzQ29tcGxldGUpIHsKICAgICAgICAgIF9oYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLm5leHQoX3ZhbHVlKTsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jU3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMuX2hhc1ZhbHVlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBfaGFzVmFsdWUgPSBfYTE0Ll9oYXNWYWx1ZSwgX3ZhbHVlID0gX2ExNC5fdmFsdWUsIF9pc0NvbXBsZXRlID0gX2ExNC5faXNDb21wbGV0ZTsKICAgICAgICBpZiAoIV9pc0NvbXBsZXRlKSB7CiAgICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgIF9oYXNWYWx1ZSAmJiBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCBfdmFsdWUpOwogICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzeW5jU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BY3Rpb24uanMKdmFyIEFjdGlvbjsKdmFyIGluaXRfQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIEFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgIH0KICAgICAgQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZSwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgcmV0dXJuIEFjdGlvbjI7CiAgICB9KShTdWJzY3JpcHRpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMKdmFyIGludGVydmFsUHJvdmlkZXI7CnZhciBpbml0X2ludGVydmFsUHJvdmlkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvaW50ZXJ2YWxQcm92aWRlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW50ZXJ2YWxQcm92aWRlciA9IHsKICAgICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGhhbmRsZXIyLCB0aW1lb3V0MikgewogICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkgewogICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsLmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyMiwgdGltZW91dDJdLCBfX3JlYWQoYXJncykpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlcjIsIHRpbWVvdXQyXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgIH0sCiAgICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckludGVydmFsKSB8fCBjbGVhckludGVydmFsKShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcwp2YXIgQXN5bmNBY3Rpb247CnZhciBpbml0X0FzeW5jQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FjdGlvbigpOwogICAgaW5pdF9pbnRlcnZhbFByb3ZpZGVyKCk7CiAgICBpbml0X2FyclJlbW92ZSgpOwogICAgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyOwogICAgICAgIF90aGlzLndvcmsgPSB3b3JrOwogICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHN0YXRlLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKICAgICAgICB2YXIgaWQgPSB0aGlzLmlkOwogICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXkyOwogICAgICAgIHRoaXMuaWQgPSAoX2ExNCA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hMTQgIT09IHZvaWQgMCA/IF9hMTQgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkyKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgX2lkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihfc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsYXkyICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkyICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHsKICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICB9CiAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlLCBkZWxheTIpIHsKICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkyKTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUsIF9kZWxheSkgewogICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7CiAgICAgICAgdmFyIGVycm9yVmFsdWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTsKICAgICAgICAgIGVycm9yVmFsdWUgPSBlMTEgPyBlMTEgOiBuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yZWQpIHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgaWQgPSBfYTE0LmlkLCBzY2hlZHVsZXIgPSBfYTE0LnNjaGVkdWxlcjsKICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsOwogICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7CiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsOwogICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzeW5jQWN0aW9uMjsKICAgIH0pKEFjdGlvbik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcwpmdW5jdGlvbiBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlMykgewogIGlmIChoYW5kbGUzIGluIGFjdGl2ZUhhbmRsZXMpIHsKICAgIGRlbGV0ZSBhY3RpdmVIYW5kbGVzW2hhbmRsZTNdOwogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQp2YXIgbmV4dEhhbmRsZSwgcmVzb2x2ZWQsIGFjdGl2ZUhhbmRsZXMsIEltbWVkaWF0ZSwgVGVzdFRvb2xzOwp2YXIgaW5pdF9JbW1lZGlhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcyIoKSB7CiAgICBuZXh0SGFuZGxlID0gMTsKICAgIGFjdGl2ZUhhbmRsZXMgPSB7fTsKICAgIEltbWVkaWF0ZSA9IHsKICAgICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbihjYikgewogICAgICAgIHZhciBoYW5kbGUzID0gbmV4dEhhbmRsZSsrOwogICAgICAgIGFjdGl2ZUhhbmRsZXNbaGFuZGxlM10gPSB0cnVlOwogICAgICAgIGlmICghcmVzb2x2ZWQpIHsKICAgICAgICAgIHJlc29sdmVkID0gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHJlc29sdmVkLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpICYmIGNiKCk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGhhbmRsZTM7CiAgICAgIH0sCiAgICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpOwogICAgICB9CiAgICB9OwogICAgVGVzdFRvb2xzID0gewogICAgICBwZW5kaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWN0aXZlSGFuZGxlcykubGVuZ3RoOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzCnZhciBzZXRJbW1lZGlhdGUsIGNsZWFySW1tZWRpYXRlLCBpbW1lZGlhdGVQcm92aWRlcjsKdmFyIGluaXRfaW1tZWRpYXRlUHJvdmlkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvaW1tZWRpYXRlUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfSW1tZWRpYXRlKCk7CiAgICBzZXRJbW1lZGlhdGUgPSBJbW1lZGlhdGUuc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSA9IEltbWVkaWF0ZS5jbGVhckltbWVkaWF0ZTsKICAgIGltbWVkaWF0ZVByb3ZpZGVyID0gewogICAgICBzZXRJbW1lZGlhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldEltbWVkaWF0ZSkgfHwgc2V0SW1tZWRpYXRlKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24oaGFuZGxlMykgewogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckltbWVkaWF0ZSkgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZTMpOwogICAgICB9LAogICAgICBkZWxlZ2F0ZTogdm9pZCAwCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMKdmFyIEFzYXBBY3Rpb247CnZhciBpbml0X0FzYXBBY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcEFjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9pbW1lZGlhdGVQcm92aWRlcigpOwogICAgQXNhcEFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzYXBBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc2FwQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyOwogICAgICAgIF90aGlzLndvcmsgPSB3b3JrOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBc2FwQWN0aW9uMi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT09IG51bGwgJiYgZGVsYXkyID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpOwogICAgICAgIHJldHVybiBzY2hlZHVsZXIuX3NjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSBpbW1lZGlhdGVQcm92aWRlci5zZXRJbW1lZGlhdGUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB2b2lkIDApKSk7CiAgICAgIH07CiAgICAgIEFzYXBBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsID8gZGVsYXkyID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgKChfYTE0ID0gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmlkKSAhPT0gaWQpIHsKICAgICAgICAgIGltbWVkaWF0ZVByb3ZpZGVyLmNsZWFySW1tZWRpYXRlKGlkKTsKICAgICAgICAgIGlmIChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9PT0gaWQpIHsKICAgICAgICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIHJldHVybiBBc2FwQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1NjaGVkdWxlci5qcwp2YXIgU2NoZWR1bGVyOwp2YXIgaW5pdF9TY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF9kYXRlVGltZXN0YW1wUHJvdmlkZXIoKTsKICAgIFNjaGVkdWxlciA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gU2NoZWR1bGVyMihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cyKSB7CiAgICAgICAgaWYgKG5vdzIgPT09IHZvaWQgMCkgewogICAgICAgICAgbm93MiA9IFNjaGVkdWxlcjIubm93OwogICAgICAgIH0KICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yOwogICAgICAgIHRoaXMubm93ID0gbm93MjsKICAgICAgfQogICAgICBTY2hlZHVsZXIyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHdvcmssIGRlbGF5Miwgc3RhdGUpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheTIpOwogICAgICB9OwogICAgICBTY2hlZHVsZXIyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7CiAgICAgIHJldHVybiBTY2hlZHVsZXIyOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY1NjaGVkdWxlci5qcwp2YXIgQXN5bmNTY2hlZHVsZXI7CnZhciBpbml0X0FzeW5jU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyMihTY2hlZHVsZXJBY3Rpb24sIG5vdzIpIHsKICAgICAgICBpZiAobm93MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBub3cyID0gU2NoZWR1bGVyLm5vdzsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cyKSB8fCB0aGlzOwogICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTsKICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFzeW5jU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihhY3Rpb24pIHsKICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9uczsKICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7CiAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGVycm9yOwogICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXIyOwogICAgfSkoU2NoZWR1bGVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwU2NoZWR1bGVyLmpzCnZhciBBc2FwU2NoZWR1bGVyOwp2YXIgaW5pdF9Bc2FwU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIEFzYXBTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc2FwU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXNhcFNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIEFzYXBTY2hlZHVsZXIyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7CiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7CiAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc2FwU2NoZWR1bGVyMjsKICAgIH0pKEFzeW5jU2NoZWR1bGVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzCnZhciBhc2FwU2NoZWR1bGVyLCBhc2FwOwp2YXIgaW5pdF9hc2FwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAuanMiKCkgewogICAgaW5pdF9Bc2FwQWN0aW9uKCk7CiAgICBpbml0X0FzYXBTY2hlZHVsZXIoKTsKICAgIGFzYXBTY2hlZHVsZXIgPSBuZXcgQXNhcFNjaGVkdWxlcihBc2FwQWN0aW9uKTsKICAgIGFzYXAgPSBhc2FwU2NoZWR1bGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzeW5jLmpzCnZhciBhc3luY1NjaGVkdWxlciwgYXN5bmM7CnZhciBpbml0X2FzeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzeW5jLmpzIigpIHsKICAgIGluaXRfQXN5bmNBY3Rpb24oKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTsKICAgIGFzeW5jID0gYXN5bmNTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVBY3Rpb24uanMKdmFyIFF1ZXVlQWN0aW9uOwp2YXIgaW5pdF9RdWV1ZUFjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZUFjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgUXVldWVBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhRdWV1ZUFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFF1ZXVlQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyOwogICAgICAgIF90aGlzLndvcmsgPSB3b3JrOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBRdWV1ZUFjdGlvbjIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oc3RhdGUsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwogICAgICAgIHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBRdWV1ZUFjdGlvbjIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihzdGF0ZSwgZGVsYXkyKSB7CiAgICAgICAgcmV0dXJuIGRlbGF5MiA+IDAgfHwgdGhpcy5jbG9zZWQgPyBfc3VwZXIucHJvdG90eXBlLmV4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkyKSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCAmJiBkZWxheTIgPiAwIHx8IGRlbGF5MiA9PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlci5mbHVzaCh0aGlzKTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfTsKICAgICAgcmV0dXJuIFF1ZXVlQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZVNjaGVkdWxlci5qcwp2YXIgUXVldWVTY2hlZHVsZXI7CnZhciBpbml0X1F1ZXVlU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jU2NoZWR1bGVyKCk7CiAgICBRdWV1ZVNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFF1ZXVlU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUXVldWVTY2hlZHVsZXIyKCkgewogICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKICAgICAgfQogICAgICByZXR1cm4gUXVldWVTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3F1ZXVlLmpzCnZhciBxdWV1ZVNjaGVkdWxlciwgcXVldWU7CnZhciBpbml0X3F1ZXVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3F1ZXVlLmpzIigpIHsKICAgIGluaXRfUXVldWVBY3Rpb24oKTsKICAgIGluaXRfUXVldWVTY2hlZHVsZXIoKTsKICAgIHF1ZXVlU2NoZWR1bGVyID0gbmV3IFF1ZXVlU2NoZWR1bGVyKFF1ZXVlQWN0aW9uKTsKICAgIHF1ZXVlID0gcXVldWVTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVBY3Rpb24uanMKdmFyIEFuaW1hdGlvbkZyYW1lQWN0aW9uOwp2YXIgaW5pdF9BbmltYXRpb25GcmFtZUFjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyKCk7CiAgICBBbmltYXRpb25GcmFtZUFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5pbWF0aW9uRnJhbWVBY3Rpb24yKHNjaGVkdWxlciwgd29yaykgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uMi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT09IG51bGwgJiYgZGVsYXkyID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpOwogICAgICAgIHJldHVybiBzY2hlZHVsZXIuX3NjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuZmx1c2godm9pZCAwKTsKICAgICAgICB9KSk7CiAgICAgIH07CiAgICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCA/IGRlbGF5MiA+IDAgOiB0aGlzLmRlbGF5ID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGlmIChpZCAhPSBudWxsICYmIGlkID09PSBzY2hlZHVsZXIuX3NjaGVkdWxlZCAmJiAoKF9hMTQgPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQuaWQpICE9PSBpZCkgewogICAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICAgICAgICBzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfTsKICAgICAgcmV0dXJuIEFuaW1hdGlvbkZyYW1lQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZVNjaGVkdWxlci5qcwp2YXIgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7CnZhciBpbml0X0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jU2NoZWR1bGVyKCk7CiAgICBBbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyKCkgewogICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKICAgICAgfQogICAgICBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICB2YXIgZmx1c2hJZDsKICAgICAgICBpZiAoYWN0aW9uKSB7CiAgICAgICAgICBmbHVzaElkID0gYWN0aW9uLmlkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmbHVzaElkID0gdGhpcy5fc2NoZWR1bGVkOwogICAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9uczsKICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpOwogICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlOwogICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzCnZhciBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgYW5pbWF0aW9uRnJhbWU7CnZhciBpbml0X2FuaW1hdGlvbkZyYW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIigpIHsKICAgIGluaXRfQW5pbWF0aW9uRnJhbWVBY3Rpb24oKTsKICAgIGluaXRfQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoKTsKICAgIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gbmV3IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKEFuaW1hdGlvbkZyYW1lQWN0aW9uKTsKICAgIGFuaW1hdGlvbkZyYW1lID0gYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvVmlydHVhbFRpbWVTY2hlZHVsZXIuanMKdmFyIFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBWaXJ0dWFsQWN0aW9uOwp2YXIgaW5pdF9WaXJ0dWFsVGltZVNjaGVkdWxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoVmlydHVhbFRpbWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBWaXJ0dWFsVGltZVNjaGVkdWxlcjIoc2NoZWR1bGVyQWN0aW9uQ3RvciwgbWF4RnJhbWVzKSB7CiAgICAgICAgaWYgKHNjaGVkdWxlckFjdGlvbkN0b3IgPT09IHZvaWQgMCkgewogICAgICAgICAgc2NoZWR1bGVyQWN0aW9uQ3RvciA9IFZpcnR1YWxBY3Rpb247CiAgICAgICAgfQogICAgICAgIGlmIChtYXhGcmFtZXMgPT09IHZvaWQgMCkgewogICAgICAgICAgbWF4RnJhbWVzID0gSW5maW5pdHk7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlckFjdGlvbkN0b3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmZyYW1lOwogICAgICAgIH0pIHx8IHRoaXM7CiAgICAgICAgX3RoaXMubWF4RnJhbWVzID0gbWF4RnJhbWVzOwogICAgICAgIF90aGlzLmZyYW1lID0gMDsKICAgICAgICBfdGhpcy5pbmRleCA9IC0xOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBWaXJ0dWFsVGltZVNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBhY3Rpb25zID0gX2ExNC5hY3Rpb25zLCBtYXhGcmFtZXMgPSBfYTE0Lm1heEZyYW1lczsKICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdmFyIGFjdGlvbjsKICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5kZWxheSA8PSBtYXhGcmFtZXMpIHsKICAgICAgICAgIGFjdGlvbnMuc2hpZnQoKTsKICAgICAgICAgIHRoaXMuZnJhbWUgPSBhY3Rpb24uZGVsYXk7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgd2hpbGUgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkgewogICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbFRpbWVTY2hlZHVsZXIyLmZyYW1lVGltZUZhY3RvciA9IDEwOwogICAgICByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogICAgVmlydHVhbEFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFZpcnR1YWxBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBWaXJ0dWFsQWN0aW9uMihzY2hlZHVsZXIsIHdvcmssIGluZGV4MikgewogICAgICAgIGlmIChpbmRleDIgPT09IHZvaWQgMCkgewogICAgICAgICAgaW5kZXgyID0gc2NoZWR1bGVyLmluZGV4ICs9IDE7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgX3RoaXMuaW5kZXggPSBpbmRleDI7CiAgICAgICAgX3RoaXMuYWN0aXZlID0gdHJ1ZTsKICAgICAgICBfdGhpcy5pbmRleCA9IHNjaGVkdWxlci5pbmRleCA9IGluZGV4MjsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgVmlydHVhbEFjdGlvbjIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oc3RhdGUsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZWxheTIpKSB7CiAgICAgICAgICBpZiAoIXRoaXMuaWQpIHsKICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24yKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspOwogICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTsKICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIGRlbGF5Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBTdWJzY3JpcHRpb24uRU1QVFk7CiAgICAgICAgfQogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBzY2hlZHVsZXIuZnJhbWUgKyBkZWxheTI7CiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9uczsKICAgICAgICBhY3Rpb25zLnB1c2godGhpcyk7CiAgICAgICAgYWN0aW9ucy5zb3J0KFZpcnR1YWxBY3Rpb24yLnNvcnRBY3Rpb25zKTsKICAgICAgICByZXR1cm4gMTsKICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihzdGF0ZSwgZGVsYXkyKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fZXhlY3V0ZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMgPSBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICBpZiAoYTUuZGVsYXkgPT09IGI1LmRlbGF5KSB7CiAgICAgICAgICBpZiAoYTUuaW5kZXggPT09IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfSBlbHNlIGlmIChhNS5pbmRleCA+IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYTUuZGVsYXkgPiBiNS5kZWxheSkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMKZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTsKfQpmdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pOwogIH0pOwp9CnZhciBFTVBUWTsKdmFyIGluaXRfZW1wdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMKZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5zY2hlZHVsZSk7Cn0KdmFyIGluaXRfaXNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzLmpzCmZ1bmN0aW9uIGxhc3QoYXJyKSB7CiAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07Cn0KZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykgewogIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHZvaWQgMDsKfQpmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykgewogIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkgewogIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gIm51bWJlciIgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlOwp9CnZhciBpbml0X2FyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2lzU2NoZWR1bGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzCnZhciBpc0FycmF5TGlrZTsKdmFyIGluaXRfaXNBcnJheUxpa2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIigpIHsKICAgIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uKHg0KSB7CiAgICAgIHJldHVybiB4NCAmJiB0eXBlb2YgeDQubGVuZ3RoID09PSAibnVtYmVyIiAmJiB0eXBlb2YgeDQgIT09ICJmdW5jdGlvbiI7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTIpIHsKICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZTIudGhlbik7Cn0KdmFyIGluaXRfaXNQcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMKZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkgewogIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTsKfQp2YXIgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7CiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNBc3luY0l0ZXJhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMKZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHsKICByZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/ICJhbiBpbnZhbGlkIG9iamVjdCIgOiAiJyIgKyBpbnB1dCArICInIikgKyAiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIik7Cn0KdmFyIGluaXRfdGhyb3dVbm9ic2VydmFibGVFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMKZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7CiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJmdW5jdGlvbiIgfHwgIVN5bWJvbC5pdGVyYXRvcikgewogICAgcmV0dXJuICJAQGl0ZXJhdG9yIjsKICB9CiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjsKfQp2YXIgaXRlcmF0b3I7CnZhciBpbml0X2l0ZXJhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIigpIHsKICAgIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIoKSB7CiAgICBpbml0X2l0ZXJhdG9yKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMKZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkgewogIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkgewogICAgdmFyIHJlYWRlciwgX2ExNCwgdmFsdWUyLCBkb25lOwogICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uKF9iKSB7CiAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgICAgICAgIF9iLmxhYmVsID0gMTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTsKICAgICAgICAgIF9iLmxhYmVsID0gMjsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoZmFsc2UpIHJldHVybiBbMywgOF07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIF9hMTQgPSBfYi5zZW50KCksIHZhbHVlMiA9IF9hMTQudmFsdWUsIGRvbmUgPSBfYTE0LmRvbmU7CiAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFsyLCBfYi5zZW50KCldOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZTIpXTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gWzQsIF9iLnNlbnQoKV07CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgX2Iuc2VudCgpOwogICAgICAgICAgcmV0dXJuIFszLCAyXTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgIHJldHVybiBbN107CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBbMl07CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikgewogIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpOwp9CnZhciBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcwpmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHsKICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTsKICAgIH0KICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7CiAgICB9CiAgfQogIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTsKfQpmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTsKICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7CiAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkxMSsrKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpMTFdKTsKICAgIH0KICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICB9KS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGVfMSwgX2ExNDsKICAgIHRyeSB7CiAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7CiAgICAgICAgdmFyIHZhbHVlMiA9IGl0ZXJhYmxlXzFfMS52YWx1ZTsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYTE0ID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYTE0LmNhbGwoaXRlcmFibGVfMSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICB9CiAgICB9CiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICBwcm9jZXNzMihhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHsKICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpOwp9CmZ1bmN0aW9uIHByb2Nlc3MyKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHsKICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTsKICB2YXIgZV8yLCBfYTE0OwogIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlMiwgZV8yXzE7CiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oX2IpIHsKICAgICAgc3dpdGNoIChfYi5sYWJlbCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTsKICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7CiAgICAgICAgICBfYi5sYWJlbCA9IDE7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdOwogICAgICAgICAgdmFsdWUyID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gWzJdOwogICAgICAgICAgfQogICAgICAgICAgX2IubGFiZWwgPSAzOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBbMywgMV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7CiAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2ExNCA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTsKICAgICAgICAgIHJldHVybiBbNCwgX2ExNC5jYWxsKGFzeW5jSXRlcmFibGVfMSldOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIF9iLnNlbnQoKTsKICAgICAgICAgIF9iLmxhYmVsID0gODsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTE6CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm4gWzJdOwogICAgICB9CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9pbm5lckZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc1Byb21pc2UoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzSXRlcmFibGUoKTsKICAgIGluaXRfaXNSZWFkYWJsZVN0cmVhbUxpa2UoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcwpmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5MiwgcmVwZWF0MykgewogIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgZGVsYXkyID0gMDsKICB9CiAgaWYgKHJlcGVhdDMgPT09IHZvaWQgMCkgewogICAgcmVwZWF0MyA9IGZhbHNlOwogIH0KICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7CiAgICB3b3JrKCk7CiAgICBpZiAocmVwZWF0MykgewogICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkyKSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICB9CiAgfSwgZGVsYXkyKTsKICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTsKICBpZiAoIXJlcGVhdDMpIHsKICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjsKICB9Cn0KdmFyIGluaXRfZXhlY3V0ZVNjaGVkdWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcwpmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheTIpIHsKICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgIGRlbGF5MiA9IDA7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfb2JzZXJ2ZU9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIoKSB7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzCmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkyKSB7CiAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICBkZWxheTIgPSAwOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICB9LCBkZWxheTIpKTsKICB9KTsKfQp2YXIgaW5pdF9zdWJzY3JpYmVPbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTsKfQp2YXIgaW5pdF9zY2hlZHVsZU9ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X29ic2VydmVPbigpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikgewogIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpOwp9CnZhciBpbml0X3NjaGVkdWxlUHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiKCkgewogICAgaW5pdF9pbm5lckZyb20oKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGkxMSA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoaTExID09PSBpbnB1dC5sZW5ndGgpIHsKICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2kxMSsrXSk7CiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5zY2hlZHVsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVBcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFycmF5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBpdGVyYXRvcjI7CiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgaXRlcmF0b3IyID0gaW5wdXRbaXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgdmFyIGRvbmU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9hMTQgPSBpdGVyYXRvcjIubmV4dCgpLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBkb25lID0gX2ExNC5kb25lOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0sIDAsIHRydWUpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yMiA9PT0gbnVsbCB8fCBpdGVyYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yMi5yZXR1cm4pICYmIGl0ZXJhdG9yMi5yZXR1cm4oKTsKICAgIH07CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pdGVyYXRvcigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmICghaW5wdXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTsKICB9CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIGl0ZXJhdG9yMi5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkgewogICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgMCwgdHJ1ZSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9zY2hlZHVsZUFzeW5jSXRlcmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTsKfQp2YXIgaW5pdF9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc1JlYWRhYmxlU3RyZWFtTGlrZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcwpmdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7CiAgICB9CiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogIH0KICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7Cn0KdmFyIGluaXRfc2NoZWR1bGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9zY2hlZHVsZVByb21pc2UoKTsKICAgIGluaXRfc2NoZWR1bGVBcnJheSgpOwogICAgaW5pdF9zY2hlZHVsZUl0ZXJhYmxlKCk7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzUHJvbWlzZSgpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc0l0ZXJhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgICBpbml0X3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMKZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7Cn0KdmFyIGluaXRfZnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlZCgpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMKZnVuY3Rpb24gb2YoKSB7CiAgdmFyIGFyZ3MgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpOwogIHJldHVybiBmcm9tKGFyZ3MsIHNjaGVkdWxlcik7Cn0KdmFyIGluaXRfb2YgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29mLmpzIigpIHsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9mcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMKZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHsKICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OwogIH07CiAgdmFyIGluaXQgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7CiAgfTsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoc2NoZWR1bGVyID8gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShpbml0LCAwLCBzdWJzY3JpYmVyKTsKICB9IDogaW5pdCk7Cn0KdmFyIGluaXRfdGhyb3dFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzCmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikgewogIHZhciBfYTE0LCBfYiwgX2M7CiAgdmFyIF9kID0gbm90aWZpY2F0aW9uLCBraW5kID0gX2Qua2luZCwgdmFsdWUyID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7CiAgaWYgKHR5cGVvZiBraW5kICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7CiAgfQogIGtpbmQgPT09ICJOIiA/IChfYTE0ID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5jYWxsKG9ic2VydmVyLCB2YWx1ZTIpIDoga2luZCA9PT0gIkUiID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpOwp9CnZhciBOb3RpZmljYXRpb25LaW5kLCBOb3RpZmljYXRpb247CnZhciBpbml0X05vdGlmaWNhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIoKSB7CiAgICBpbml0X2VtcHR5KCk7CiAgICBpbml0X29mKCk7CiAgICBpbml0X3Rocm93RXJyb3IoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgKGZ1bmN0aW9uKE5vdGlmaWNhdGlvbktpbmQyKSB7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJORVhUIl0gPSAiTiI7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJFUlJPUiJdID0gIkUiOwogICAgICBOb3RpZmljYXRpb25LaW5kMlsiQ09NUExFVEUiXSA9ICJDIjsKICAgIH0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpOwogICAgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24yKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgIHRoaXMuaGFzVmFsdWUgPSBraW5kID09PSAiTiI7CiAgICAgIH0KICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKG9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKG5leHRIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGNvbXBsZXRlSGFuZGxlcikgewogICAgICAgIHZhciBfYTE0ID0gdGhpcywga2luZCA9IF9hMTQua2luZCwgdmFsdWUyID0gX2ExNC52YWx1ZSwgZXJyb3IgPSBfYTE0LmVycm9yOwogICAgICAgIHJldHVybiBraW5kID09PSAiTiIgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUyKSA6IGtpbmQgPT09ICJFIiA/IGVycm9ySGFuZGxlciA9PT0gbnVsbCB8fCBlcnJvckhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ySGFuZGxlcihlcnJvcikgOiBjb21wbGV0ZUhhbmRsZXIgPT09IG51bGwgfHwgY29tcGxldGVIYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wbGV0ZUhhbmRsZXIoKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYTE0ID0gbmV4dE9yT2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQubmV4dCkgPyB0aGlzLm9ic2VydmUobmV4dE9yT2JzZXJ2ZXIpIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBraW5kID0gX2ExNC5raW5kLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBlcnJvciA9IF9hMTQuZXJyb3I7CiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICJOIiA/IG9mKHZhbHVlMikgOiBraW5kID09PSAiRSIgPyB0aHJvd0Vycm9yKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgIH0pIDoga2luZCA9PT0gIkMiID8gRU1QVFkgOiAwOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIgKyBraW5kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVOZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24yKCJOIiwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uMigiRSIsIHZvaWQgMCwgZXJyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbjIoIkMiKTsKICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMKdmFyIGluaXRfaXNPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzCnZhciBFbXB0eUVycm9yOwp2YXIgaW5pdF9FbXB0eUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5uYW1lID0gIkVtcHR5RXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfbGFzdFZhbHVlRnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfZmlyc3RWYWx1ZUZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzCnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjsKdmFyIGluaXRfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMKdmFyIE5vdEZvdW5kRXJyb3I7CnZhciBpbml0X05vdEZvdW5kRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UyKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJOb3RGb3VuZEVycm9yIjsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlMjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzCnZhciBTZXF1ZW5jZUVycm9yOwp2YXIgaW5pdF9TZXF1ZW5jZUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgU2VxdWVuY2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlMikgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiU2VxdWVuY2VFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZTIpOwp9CnZhciBpbml0X2lzRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LmpzCmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnMywgc2NoZWR1bGVyQXJnKSB7CiAgdmFyIF9hMTQgPSBpc1ZhbGlkRGF0ZShjb25maWczKSA/IHsgZmlyc3Q6IGNvbmZpZzMgfSA6IHR5cGVvZiBjb25maWczID09PSAibnVtYmVyIiA/IHsgZWFjaDogY29uZmlnMyB9IDogY29uZmlnMywgZmlyc3QyID0gX2ExNC5maXJzdCwgZWFjaCA9IF9hMTQuZWFjaCwgX2IgPSBfYTE0LndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYTE0LnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyAhPT0gbnVsbCAmJiBzY2hlZHVsZXJBcmcgIT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyA6IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2ExNC5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDsKICBpZiAoZmlyc3QyID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjsKICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjsKICAgIHZhciBsYXN0VmFsdWUgPSBudWxsOwogICAgdmFyIHNlZW4gPSAwOwogICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbihkZWxheTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7CiAgICAgICAgICAgIG1ldGEsCiAgICAgICAgICAgIGxhc3RWYWx1ZSwKICAgICAgICAgICAgc2VlbgogICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9OwogICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIHNlZW4rKzsKICAgICAgc3Vic2NyaWJlci5uZXh0KGxhc3RWYWx1ZSA9IHZhbHVlMik7CiAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7CiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7CiAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH0KICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgIH0pKTsKICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QyICE9IG51bGwgPyB0eXBlb2YgZmlyc3QyID09PSAibnVtYmVyIiA/IGZpcnN0MiA6ICtmaXJzdDIgLSBzY2hlZHVsZXIubm93KCkgOiBlYWNoKTsKICB9KTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHsKICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pOwp9CnZhciBUaW1lb3V0RXJyb3I7CnZhciBpbml0X3RpbWVvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIoKSB7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X2lzRGF0ZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICAgIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHsKICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmZvID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJUaW1lb3V0IGhhcyBvY2N1cnJlZCI7CiAgICAgICAgdGhpcy5uYW1lID0gIlRpbWVvdXRFcnJvciI7CiAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcwpmdW5jdGlvbiBtYXAyKHByb2plY3QsIHRoaXNBcmcpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBpbmRleDIgPSAwOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChwcm9qZWN0LmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykpOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzCmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7CiAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7Cn0KZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikgewogIHJldHVybiBtYXAyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgIHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7CiAgfSk7Cn0KdmFyIGlzQXJyYXk7CnZhciBpbml0X21hcE9uZU9yTWFueUFyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzCnZhciBpbml0X2JpbmRDYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcwp2YXIgaW5pdF9iaW5kTm9kZUNhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcwpmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kMiwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHsKICB2YXIgYnVmZmVyMiA9IFtdOwogIHZhciBhY3RpdmUgPSAwOwogIHZhciBpbmRleDIgPSAwOwogIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7CiAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIyLmxlbmd0aCAmJiAhYWN0aXZlKSB7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0KICB9OwogIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgIHJldHVybiBhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZTIpIDogYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgfTsKICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgZXhwYW5kMiAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgIGFjdGl2ZSsrOwogICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTsKICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlMiwgaW5kZXgyKyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKGlubmVyVmFsdWUpIHsKICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpOwogICAgICBpZiAoZXhwYW5kMikgewogICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGFjdGl2ZS0tOwogICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIyLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikgewogICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2hpbGUgKGJ1ZmZlcjIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHsKICAgICAgICAgICAgX2xvb3BfMSgpOwogICAgICAgICAgfQogICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgfSkpOwogIH07CiAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbigpIHsKICAgIGlzQ29tcGxldGUgPSB0cnVlOwogICAgY2hlY2tDb21wbGV0ZSgpOwogIH0pKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTsKICB9Owp9CnZhciBpbml0X21lcmdlSW50ZXJuYWxzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcwpmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkgewogIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsKICAgIGNvbmN1cnJlbnQgPSBJbmZpbml0eTsKICB9CiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7CiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24oYTUsIGkxMSkgewogICAgICByZXR1cm4gbWFwMihmdW5jdGlvbihiNSwgaWkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYTUsIGI1LCBpMTEsIGlpKTsKICAgICAgfSkoaW5uZXJGcm9tKHByb2plY3QoYTUsIGkxMSkpKTsKICAgIH0sIGNvbmN1cnJlbnQpOwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAibnVtYmVyIikgewogICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOwogIH0pOwp9CnZhciBpbml0X21lcmdlTWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIigpIHsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X21lcmdlSW50ZXJuYWxzKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcwpmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7CiAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgewogICAgY29uY3VycmVudCA9IEluZmluaXR5OwogIH0KICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpOwp9CnZhciBpbml0X21lcmdlQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMKZnVuY3Rpb24gY29uY2F0QWxsKCkgewogIHJldHVybiBtZXJnZUFsbCgxKTsKfQp2YXIgaW5pdF9jb25jYXRBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzCmZ1bmN0aW9uIGNvbmNhdCgpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpOwp9CnZhciBpbml0X2NvbmNhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIigpIHsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfZnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcwp2YXIgaW5pdF9kZWZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25uZWN0YWJsZS5qcwp2YXIgaW5pdF9jb25uZWN0YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcwp2YXIgaW5pdF9mb3JrSm9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMKZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3RvcikgewogIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7CiAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7CiAgICBvcHRpb25zID0gdm9pZCAwOwogIH0KICBpZiAocmVzdWx0U2VsZWN0b3IpIHsKICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpOwogIH0KICB2YXIgX2ExNCA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgIHJldHVybiBmdW5jdGlvbihoYW5kbGVyMikgewogICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlcjIsIG9wdGlvbnMpOwogICAgfTsKICB9KSA6IGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKSA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBbXSwgMiksIGFkZDMgPSBfYTE0WzBdLCByZW1vdmUyID0gX2ExNFsxXTsKICBpZiAoIWFkZDMpIHsKICAgIGlmIChpc0FycmF5TGlrZSh0YXJnZXQpKSB7CiAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbihzdWJUYXJnZXQpIHsKICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsKICAgICAgfSkoaW5uZXJGcm9tKHRhcmdldCkpOwogICAgfQogIH0KICBpZiAoIWFkZDMpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgaGFuZGxlcjIgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7CiAgICB9OwogICAgYWRkMyhoYW5kbGVyMik7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZW1vdmUyKGhhbmRsZXIyKTsKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGhhbmRsZXIyKSB7CiAgICAgIHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyMik7CiAgICB9OwogIH07Cn0KZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7Cn0KZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7Cn0KZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcik7Cn0KdmFyIG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLCBldmVudFRhcmdldE1ldGhvZHMsIGpxdWVyeU1ldGhvZHM7CnZhciBpbml0X2Zyb21FdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X21lcmdlTWFwKCk7CiAgICBpbml0X2lzQXJyYXlMaWtlKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfbWFwT25lT3JNYW55QXJncygpOwogICAgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbImFkZExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIl07CiAgICBldmVudFRhcmdldE1ldGhvZHMgPSBbImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciJdOwogICAganF1ZXJ5TWV0aG9kcyA9IFsib24iLCAib2ZmIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMKdmFyIGluaXRfZnJvbUV2ZW50UGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzCnZhciBpbml0X2dlbmVyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcwp2YXIgaW5pdF9paWYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzCmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikgewogIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsKICAgIGR1ZVRpbWUgPSAwOwogIH0KICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jOwogIH0KICB2YXIgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xOwogIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHsKICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkgewogICAgICBzY2hlZHVsZXIgPSBpbnRlcnZhbE9yU2NoZWR1bGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7CiAgICB9CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgZHVlID0gaXNWYWxpZERhdGUoZHVlVGltZSkgPyArZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSA6IGR1ZVRpbWU7CiAgICBpZiAoZHVlIDwgMCkgewogICAgICBkdWUgPSAwOwogICAgfQogICAgdmFyIG4xMiA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4xMisrKTsKICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgaW50ZXJ2YWxEdXJhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIGR1ZSk7CiAgfSk7Cn0KdmFyIGluaXRfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9hc3luYygpOwogICAgaW5pdF9pc1NjaGVkdWxlcigpOwogICAgaW5pdF9pc0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMKdmFyIGluaXRfaW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbmV2ZXIuanMKZnVuY3Rpb24gbmV2ZXIoKSB7CiAgcmV0dXJuIE5FVkVSOwp9CnZhciBORVZFUjsKdmFyIGluaXRfbmV2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBORVZFUiA9IG5ldyBPYnNlcnZhYmxlKG5vb3ApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcwp2YXIgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcwp2YXIgaW5pdF9wYWlycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcwpmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgaW5kZXgyID0gMDsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcwp2YXIgaW5pdF9wYXJ0aXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UuanMKdmFyIGluaXRfcmFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLmpzCnZhciBpbml0X3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzCnZhciBpbml0X3VzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcwp2YXIgaW5pdF96aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcwp2YXIgaW5pdF90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3R5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcwp2YXIgaW5pdF9hdWRpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzCnZhciBpbml0X2F1ZGl0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcwpmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUyKTsKICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pKTsKICAgIGlubmVyRnJvbShjbG9zaW5nTm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiNSA9IGN1cnJlbnRCdWZmZXI7CiAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGI1KTsKICAgIH0sIG5vb3ApKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X25vb3AoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50LmpzCmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHsKICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7CiAgICBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsKICB9CiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVycyA9IFtdOwogICAgdmFyIGNvdW50MiA9IDA7CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNCwgZV8yLCBfYjsKICAgICAgdmFyIHRvRW1pdCA9IG51bGw7CiAgICAgIGlmIChjb3VudDIrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHsKICAgICAgICBidWZmZXJzLnB1c2goW10pOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkgewogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBidWZmZXJzXzFfMS52YWx1ZTsKICAgICAgICAgIGJ1ZmZlcjIucHVzaCh2YWx1ZTIpOwogICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ICE9PSBudWxsICYmIHRvRW1pdCAhPT0gdm9pZCAwID8gdG9FbWl0IDogW107CiAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZV8xXzEpIHsKICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hMTQgPSBidWZmZXJzXzEucmV0dXJuKSkgX2ExNC5jYWxsKGJ1ZmZlcnNfMSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRvRW1pdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSB0b0VtaXRfMV8xLnZhbHVlOwogICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyMik7CiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIyKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlXzJfMSkgewogICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZV8zLCBfYTE0OwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMiA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCk7ICFidWZmZXJzXzJfMS5kb25lOyBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCkpIHsKICAgICAgICAgIHZhciBidWZmZXIyID0gYnVmZmVyc18yXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlXzNfMSkgewogICAgICAgIGVfMyA9IHsgZXJyb3I6IGVfM18xIH07CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2ExNCA9IGJ1ZmZlcnNfMi5yZXR1cm4pKSBfYTE0LmNhbGwoYnVmZmVyc18yKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBidWZmZXJzID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9idWZmZXJDb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzCmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHsKICB2YXIgX2ExNCwgX2I7CiAgdmFyIG90aGVyQXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHZhciBzY2hlZHVsZXIgPSAoX2ExNCA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYTE0ICE9PSB2b2lkIDAgPyBfYTE0IDogYXN5bmNTY2hlZHVsZXI7CiAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7CiAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVyUmVjb3JkcyA9IFtdOwogICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBidWZmZXIyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzOwogICAgICBzdWJzLnVuc3Vic2NyaWJlKCk7CiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpOwogICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTsKICAgIH07CiAgICB2YXIgc3RhcnRCdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHsKICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTsKICAgICAgICB2YXIgYnVmZmVyMiA9IFtdOwogICAgICAgIHZhciByZWNvcmRfMSA9IHsKICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgICAgIHN1YnMKICAgICAgICB9OwogICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7CiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZW1pdChyZWNvcmRfMSk7CiAgICAgICAgfSwgYnVmZmVyVGltZVNwYW4pOwogICAgICB9CiAgICB9OwogICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0QnVmZmVyLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3RhcnRPbkVtaXQgPSB0cnVlOwogICAgfQogICAgc3RhcnRCdWZmZXIoKTsKICAgIHZhciBidWZmZXJUaW1lU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNTsKICAgICAgdmFyIHJlY29yZHNDb3B5ID0gYnVmZmVyUmVjb3Jkcy5zbGljZSgpOwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7CiAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0NvcHlfMV8xLnZhbHVlOwogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSByZWNvcmQuYnVmZmVyOwogICAgICAgICAgYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlcjIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hMTUgPSByZWNvcmRzQ29weV8xLnJldHVybikpIF9hMTUuY2FsbChyZWNvcmRzQ29weV8xKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBidWZmZXJSZWNvcmRzID0gbnVsbDsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShidWZmZXJUaW1lU3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIGluaXRfYnVmZmVyVGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMKdmFyIGluaXRfYnVmZmVyVG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcwp2YXIgaW5pdF9idWZmZXJXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMKdmFyIGluaXRfY2F0Y2hFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMKdmFyIGluaXRfcmVkdWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcwp2YXIgaW5pdF90b0FycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMKdmFyIGluaXRfY29tYmluZUxhdGVzdEFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsLmpzCnZhciBpbml0X2NvbWJpbmVBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzCnZhciBpbml0X2NvbmNhdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzCnZhciBpbml0X2NvbmNhdE1hcFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMKdmFyIGluaXRfY29uY2F0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMKdmFyIGluaXRfY29uY2F0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzCnZhciBpbml0X2Nvbm5lY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMKdmFyIGluaXRfY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzCmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBsYXN0VmFsdWU7CiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgfQogICAgfTsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBsYXN0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTsKICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUyKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X2RlYm91bmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMKZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikgewogIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgewogICAgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgdmFyIGFjdGl2ZVRhc2sgPSBudWxsOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgbGFzdFRpbWUgPSBudWxsOwogICAgdmFyIGVtaXQgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGFjdGl2ZVRhc2spIHsKICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7CiAgICAgICAgdmFyIHZhbHVlMiA9IGxhc3RWYWx1ZTsKICAgICAgICBsYXN0VmFsdWUgPSBudWxsOwogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkgewogICAgICB2YXIgdGFyZ2V0VGltZSA9IGxhc3RUaW1lICsgZHVlVGltZTsKICAgICAgdmFyIG5vdzIgPSBzY2hlZHVsZXIubm93KCk7CiAgICAgIGlmIChub3cyIDwgdGFyZ2V0VGltZSkgewogICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgdGFyZ2V0VGltZSAtIG5vdzIpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbWl0KCk7CiAgICB9CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgbGFzdFZhbHVlID0gdmFsdWUyOwogICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTsKICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7CiAgICAgICAgYWN0aXZlVGFzayA9IHNjaGVkdWxlci5zY2hlZHVsZShlbWl0V2hlbklkbGUsIGR1ZVRpbWUpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICB9CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9kZWJvdW5jZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcwp2YXIgaW5pdF9kZWZhdWx0SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcwp2YXIgaW5pdF90YWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzCnZhciBpbml0X2lnbm9yZUVsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcwp2YXIgaW5pdF9tYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzCnZhciBpbml0X2RlbGF5V2hlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzCnZhciBpbml0X2RlbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzCnZhciBpbml0X2RlbWF0ZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMKdmFyIGluaXRfZGlzdGluY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzCnZhciBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcwp2YXIgaW5pdF9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzCnZhciBpbml0X3Rocm93SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcwp2YXIgaW5pdF9lbGVtZW50QXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzCnZhciBpbml0X2VuZFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMKdmFyIGluaXRfZXZlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXAuanMKdmFyIGluaXRfZXhoYXVzdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzCnZhciBpbml0X2V4aGF1c3RBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdC5qcwp2YXIgaW5pdF9leGhhdXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZC5qcwp2YXIgaW5pdF9leHBhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcwp2YXIgaW5pdF9maW5hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZC5qcwp2YXIgaW5pdF9maW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcwp2YXIgaW5pdF9maW5kSW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcwp2YXIgaW5pdF9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcwp2YXIgaW5pdF9ncm91cEJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMKdmFyIGluaXRfaXNFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcwp2YXIgaW5pdF90YWtlTGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcwp2YXIgaW5pdF9sYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzCnZhciBpbml0X21hdGVyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMKdmFyIGluaXRfbWF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcwp2YXIgaW5pdF9mbGF0TWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMKdmFyIGluaXRfbWVyZ2VNYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4uanMKdmFyIGluaXRfbWVyZ2VTY2FuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMKdmFyIGluaXRfbWVyZ2VXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzCnZhciBpbml0X21pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcwp2YXIgaW5pdF9tdWx0aWNhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGguanMKdmFyIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMKdmFyIGluaXRfcGFpcndpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzCnZhciBpbml0X3BsdWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzCnZhciBpbml0X3B1Ymxpc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yLmpzCnZhciBpbml0X3B1Ymxpc2hCZWhhdmlvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzCnZhciBpbml0X3B1Ymxpc2hMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzCnZhciBpbml0X3B1Ymxpc2hSZXBsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMKdmFyIGluaXRfcmFjZVdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcwp2YXIgaW5pdF9yZXBlYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzCnZhciBpbml0X3JlcGVhdFdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMKdmFyIGluaXRfcmV0cnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcwp2YXIgaW5pdF9yZXRyeVdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMKdmFyIGluaXRfc2FtcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcwp2YXIgaW5pdF9zYW1wbGVUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMKdmFyIGluaXRfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzCnZhciBpbml0X3NlcXVlbmNlRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMKdmFyIGluaXRfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzCnZhciBpbml0X3NoYXJlUmVwbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMKdmFyIGluaXRfc2luZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcwp2YXIgaW5pdF9za2lwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzCnZhciBpbml0X3NraXBMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMKdmFyIGluaXRfc2tpcFVudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzCnZhciBpbml0X3NraXBXaGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcwpmdW5jdGlvbiBzdGFydFdpdGgoKSB7CiAgdmFyIHZhbHVlcyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTsKICB9CiAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcih2YWx1ZXMpOwogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgKHNjaGVkdWxlciA/IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF9zdGFydFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIigpIHsKICAgIGluaXRfY29uY2F0KCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfbGlmdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcwp2YXIgaW5pdF9zd2l0Y2hNYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMKdmFyIGluaXRfc3dpdGNoQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMKdmFyIGluaXRfc3dpdGNoTWFwVG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMKdmFyIGluaXRfc3dpdGNoU2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMKZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCBub29wKSk7CiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF90YWtlVW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X25vb3AoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMKdmFyIGluaXRfdGFrZVdoaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzCnZhciBpbml0X3RhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzCmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZzMpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBfYTE0ID0gY29uZmlnMyAhPT0gbnVsbCAmJiBjb25maWczICE9PSB2b2lkIDAgPyBjb25maWczIDoge30sIF9iID0gX2ExNC5sZWFkaW5nLCBsZWFkaW5nID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBfYTE0LnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jOwogICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7CiAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDsKICAgIHZhciB0aHJvdHRsZWQgPSBudWxsOwogICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTsKICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpOwogICAgICB0aHJvdHRsZWQgPSBudWxsOwogICAgICBpZiAodHJhaWxpbmcpIHsKICAgICAgICBzZW5kKCk7CiAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3R0bGVkID0gbnVsbDsKICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9OwogICAgdmFyIHN0YXJ0VGhyb3R0bGUgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHRocm90dGxlZCA9IGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlMikpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKTsKICAgIH07CiAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBzZW5kVmFsdWU7CiAgICAgICAgc2VuZFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAhaXNDb21wbGV0ZSAmJiBzdGFydFRocm90dGxlKHZhbHVlMik7CiAgICAgIH0KICAgIH07CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBzZW5kVmFsdWUgPSB2YWx1ZTI7CiAgICAgICEodGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiAobGVhZGluZyA/IHNlbmQoKSA6IHN0YXJ0VGhyb3R0bGUodmFsdWUyKSk7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgaXNDb21wbGV0ZSA9IHRydWU7CiAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfdGhyb3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGUuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMKZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZzMpIHsKICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOwogIH0KICB2YXIgZHVyYXRpb24kID0gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7CiAgcmV0dXJuIHRocm90dGxlKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGR1cmF0aW9uJDsKICB9LCBjb25maWczKTsKfQp2YXIgaW5pdF90aHJvdHRsZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfdGhyb3R0bGUoKTsKICAgIGluaXRfdGltZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMKdmFyIGluaXRfdGltZUludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMKdmFyIGluaXRfdGltZW91dFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcwp2YXIgaW5pdF90aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMKdmFyIGluaXRfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMKdmFyIGluaXRfd2luZG93Q291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMKdmFyIGluaXRfd2luZG93VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMKdmFyIGluaXRfd2luZG93VG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcwp2YXIgaW5pdF93aW5kb3dXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzCnZhciBpbml0X3dpdGhMYXRlc3RGcm9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMKdmFyIGluaXRfemlwQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzCnZhciBpbml0X3ppcDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBXaXRoLmpzCnZhciBpbml0X3ppcFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbmRleC5qcwp2YXIgaW5pdF9lc201ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW5kZXguanMiKCkgewogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lcygpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X0JlaGF2aW9yU3ViamVjdCgpOwogICAgaW5pdF9SZXBsYXlTdWJqZWN0KCk7CiAgICBpbml0X0FzeW5jU3ViamVjdCgpOwogICAgaW5pdF9hc2FwKCk7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X3F1ZXVlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lKCk7CiAgICBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyKCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9Ob3RpZmljYXRpb24oKTsKICAgIGluaXRfcGlwZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgICBpbml0X2lzT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9sYXN0VmFsdWVGcm9tKCk7CiAgICBpbml0X2ZpcnN0VmFsdWVGcm9tKCk7CiAgICBpbml0X0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7CiAgICBpbml0X0VtcHR5RXJyb3IoKTsKICAgIGluaXRfTm90Rm91bmRFcnJvcigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9TZXF1ZW5jZUVycm9yKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfVW5zdWJzY3JpcHRpb25FcnJvcigpOwogICAgaW5pdF9iaW5kQ2FsbGJhY2soKTsKICAgIGluaXRfYmluZE5vZGVDYWxsYmFjaygpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0KCk7CiAgICBpbml0X2NvbmNhdCgpOwogICAgaW5pdF9jb25uZWN0YWJsZSgpOwogICAgaW5pdF9kZWZlcigpOwogICAgaW5pdF9lbXB0eSgpOwogICAgaW5pdF9mb3JrSm9pbigpOwogICAgaW5pdF9mcm9tKCk7CiAgICBpbml0X2Zyb21FdmVudCgpOwogICAgaW5pdF9mcm9tRXZlbnRQYXR0ZXJuKCk7CiAgICBpbml0X2dlbmVyYXRlKCk7CiAgICBpbml0X2lpZigpOwogICAgaW5pdF9pbnRlcnZhbCgpOwogICAgaW5pdF9tZXJnZSgpOwogICAgaW5pdF9uZXZlcigpOwogICAgaW5pdF9vZigpOwogICAgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCgpOwogICAgaW5pdF9wYWlycygpOwogICAgaW5pdF9wYXJ0aXRpb24oKTsKICAgIGluaXRfcmFjZSgpOwogICAgaW5pdF9yYW5nZSgpOwogICAgaW5pdF90aHJvd0Vycm9yKCk7CiAgICBpbml0X3RpbWVyKCk7CiAgICBpbml0X3VzaW5nKCk7CiAgICBpbml0X3ppcCgpOwogICAgaW5pdF9zY2hlZHVsZWQoKTsKICAgIGluaXRfZW1wdHkoKTsKICAgIGluaXRfbmV2ZXIoKTsKICAgIGluaXRfdHlwZXMoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2F1ZGl0KCk7CiAgICBpbml0X2F1ZGl0VGltZSgpOwogICAgaW5pdF9idWZmZXIoKTsKICAgIGluaXRfYnVmZmVyQ291bnQoKTsKICAgIGluaXRfYnVmZmVyVGltZSgpOwogICAgaW5pdF9idWZmZXJUb2dnbGUoKTsKICAgIGluaXRfYnVmZmVyV2hlbigpOwogICAgaW5pdF9jYXRjaEVycm9yKCk7CiAgICBpbml0X2NvbWJpbmVBbGwoKTsKICAgIGluaXRfY29tYmluZUxhdGVzdEFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCgpOwogICAgaW5pdF9jb25jYXRBbGwoKTsKICAgIGluaXRfY29uY2F0TWFwKCk7CiAgICBpbml0X2NvbmNhdE1hcFRvKCk7CiAgICBpbml0X2NvbmNhdFdpdGgoKTsKICAgIGluaXRfY29ubmVjdCgpOwogICAgaW5pdF9jb3VudCgpOwogICAgaW5pdF9kZWJvdW5jZSgpOwogICAgaW5pdF9kZWJvdW5jZVRpbWUoKTsKICAgIGluaXRfZGVmYXVsdElmRW1wdHkoKTsKICAgIGluaXRfZGVsYXkoKTsKICAgIGluaXRfZGVsYXlXaGVuKCk7CiAgICBpbml0X2RlbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfZGlzdGluY3QoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbENoYW5nZWQoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoKTsKICAgIGluaXRfZWxlbWVudEF0KCk7CiAgICBpbml0X2VuZFdpdGgoKTsKICAgIGluaXRfZXZlcnkoKTsKICAgIGluaXRfZXhoYXVzdCgpOwogICAgaW5pdF9leGhhdXN0QWxsKCk7CiAgICBpbml0X2V4aGF1c3RNYXAoKTsKICAgIGluaXRfZXhwYW5kKCk7CiAgICBpbml0X2ZpbHRlcigpOwogICAgaW5pdF9maW5hbGl6ZSgpOwogICAgaW5pdF9maW5kKCk7CiAgICBpbml0X2ZpbmRJbmRleCgpOwogICAgaW5pdF9maXJzdCgpOwogICAgaW5pdF9ncm91cEJ5KCk7CiAgICBpbml0X2lnbm9yZUVsZW1lbnRzKCk7CiAgICBpbml0X2lzRW1wdHkoKTsKICAgIGluaXRfbGFzdCgpOwogICAgaW5pdF9tYXAoKTsKICAgIGluaXRfbWFwVG8oKTsKICAgIGluaXRfbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfbWF4KCk7CiAgICBpbml0X21lcmdlQWxsKCk7CiAgICBpbml0X2ZsYXRNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXBUbygpOwogICAgaW5pdF9tZXJnZVNjYW4oKTsKICAgIGluaXRfbWVyZ2VXaXRoKCk7CiAgICBpbml0X21pbigpOwogICAgaW5pdF9tdWx0aWNhc3QoKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X29uRXJyb3JSZXN1bWVOZXh0V2l0aCgpOwogICAgaW5pdF9wYWlyd2lzZSgpOwogICAgaW5pdF9wbHVjaygpOwogICAgaW5pdF9wdWJsaXNoKCk7CiAgICBpbml0X3B1Ymxpc2hCZWhhdmlvcigpOwogICAgaW5pdF9wdWJsaXNoTGFzdCgpOwogICAgaW5pdF9wdWJsaXNoUmVwbGF5KCk7CiAgICBpbml0X3JhY2VXaXRoKCk7CiAgICBpbml0X3JlZHVjZSgpOwogICAgaW5pdF9yZXBlYXQoKTsKICAgIGluaXRfcmVwZWF0V2hlbigpOwogICAgaW5pdF9yZXRyeSgpOwogICAgaW5pdF9yZXRyeVdoZW4oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfc2FtcGxlKCk7CiAgICBpbml0X3NhbXBsZVRpbWUoKTsKICAgIGluaXRfc2NhbigpOwogICAgaW5pdF9zZXF1ZW5jZUVxdWFsKCk7CiAgICBpbml0X3NoYXJlKCk7CiAgICBpbml0X3NoYXJlUmVwbGF5KCk7CiAgICBpbml0X3NpbmdsZSgpOwogICAgaW5pdF9za2lwKCk7CiAgICBpbml0X3NraXBMYXN0KCk7CiAgICBpbml0X3NraXBVbnRpbCgpOwogICAgaW5pdF9za2lwV2hpbGUoKTsKICAgIGluaXRfc3RhcnRXaXRoKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgICBpbml0X3N3aXRjaEFsbCgpOwogICAgaW5pdF9zd2l0Y2hNYXAoKTsKICAgIGluaXRfc3dpdGNoTWFwVG8oKTsKICAgIGluaXRfc3dpdGNoU2NhbigpOwogICAgaW5pdF90YWtlKCk7CiAgICBpbml0X3Rha2VMYXN0KCk7CiAgICBpbml0X3Rha2VVbnRpbCgpOwogICAgaW5pdF90YWtlV2hpbGUoKTsKICAgIGluaXRfdGFwKCk7CiAgICBpbml0X3Rocm90dGxlKCk7CiAgICBpbml0X3Rocm90dGxlVGltZSgpOwogICAgaW5pdF90aHJvd0lmRW1wdHkoKTsKICAgIGluaXRfdGltZUludGVydmFsKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfdGltZW91dFdpdGgoKTsKICAgIGluaXRfdGltZXN0YW1wKCk7CiAgICBpbml0X3RvQXJyYXkoKTsKICAgIGluaXRfd2luZG93KCk7CiAgICBpbml0X3dpbmRvd0NvdW50KCk7CiAgICBpbml0X3dpbmRvd1RpbWUoKTsKICAgIGluaXRfd2luZG93VG9nZ2xlKCk7CiAgICBpbml0X3dpbmRvd1doZW4oKTsKICAgIGluaXRfd2l0aExhdGVzdEZyb20oKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMKdmFyIGluaXRfcGFydGl0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UuanMKdmFyIGluaXRfcmFjZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9vcGVyYXRvcnMvaW5kZXguanMKdmFyIGluaXRfb3BlcmF0b3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvb3BlcmF0b3JzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYXVkaXQoKTsKICAgIGluaXRfYXVkaXRUaW1lKCk7CiAgICBpbml0X2J1ZmZlcigpOwogICAgaW5pdF9idWZmZXJDb3VudCgpOwogICAgaW5pdF9idWZmZXJUaW1lKCk7CiAgICBpbml0X2J1ZmZlclRvZ2dsZSgpOwogICAgaW5pdF9idWZmZXJXaGVuKCk7CiAgICBpbml0X2NhdGNoRXJyb3IoKTsKICAgIGluaXRfY29tYmluZUFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0QWxsKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3QyKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3RXaXRoKCk7CiAgICBpbml0X2NvbmNhdDIoKTsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2NvbmNhdE1hcCgpOwogICAgaW5pdF9jb25jYXRNYXBUbygpOwogICAgaW5pdF9jb25jYXRXaXRoKCk7CiAgICBpbml0X2Nvbm5lY3QoKTsKICAgIGluaXRfY291bnQoKTsKICAgIGluaXRfZGVib3VuY2UoKTsKICAgIGluaXRfZGVib3VuY2VUaW1lKCk7CiAgICBpbml0X2RlZmF1bHRJZkVtcHR5KCk7CiAgICBpbml0X2RlbGF5KCk7CiAgICBpbml0X2RlbGF5V2hlbigpOwogICAgaW5pdF9kZW1hdGVyaWFsaXplKCk7CiAgICBpbml0X2Rpc3RpbmN0KCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkKCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCk7CiAgICBpbml0X2VsZW1lbnRBdCgpOwogICAgaW5pdF9lbmRXaXRoKCk7CiAgICBpbml0X2V2ZXJ5KCk7CiAgICBpbml0X2V4aGF1c3QoKTsKICAgIGluaXRfZXhoYXVzdEFsbCgpOwogICAgaW5pdF9leGhhdXN0TWFwKCk7CiAgICBpbml0X2V4cGFuZCgpOwogICAgaW5pdF9maWx0ZXIoKTsKICAgIGluaXRfZmluYWxpemUoKTsKICAgIGluaXRfZmluZCgpOwogICAgaW5pdF9maW5kSW5kZXgoKTsKICAgIGluaXRfZmlyc3QoKTsKICAgIGluaXRfZ3JvdXBCeSgpOwogICAgaW5pdF9pZ25vcmVFbGVtZW50cygpOwogICAgaW5pdF9pc0VtcHR5KCk7CiAgICBpbml0X2xhc3QoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X21hcFRvKCk7CiAgICBpbml0X21hdGVyaWFsaXplKCk7CiAgICBpbml0X21heCgpOwogICAgaW5pdF9tZXJnZTIoKTsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICAgIGluaXRfZmxhdE1hcCgpOwogICAgaW5pdF9tZXJnZU1hcCgpOwogICAgaW5pdF9tZXJnZU1hcFRvKCk7CiAgICBpbml0X21lcmdlU2NhbigpOwogICAgaW5pdF9tZXJnZVdpdGgoKTsKICAgIGluaXRfbWluKCk7CiAgICBpbml0X211bHRpY2FzdCgpOwogICAgaW5pdF9vYnNlcnZlT24oKTsKICAgIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoKCk7CiAgICBpbml0X3BhaXJ3aXNlKCk7CiAgICBpbml0X3BhcnRpdGlvbjIoKTsKICAgIGluaXRfcGx1Y2soKTsKICAgIGluaXRfcHVibGlzaCgpOwogICAgaW5pdF9wdWJsaXNoQmVoYXZpb3IoKTsKICAgIGluaXRfcHVibGlzaExhc3QoKTsKICAgIGluaXRfcHVibGlzaFJlcGxheSgpOwogICAgaW5pdF9yYWNlMigpOwogICAgaW5pdF9yYWNlV2l0aCgpOwogICAgaW5pdF9yZWR1Y2UoKTsKICAgIGluaXRfcmVwZWF0KCk7CiAgICBpbml0X3JlcGVhdFdoZW4oKTsKICAgIGluaXRfcmV0cnkoKTsKICAgIGluaXRfcmV0cnlXaGVuKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X3NhbXBsZSgpOwogICAgaW5pdF9zYW1wbGVUaW1lKCk7CiAgICBpbml0X3NjYW4oKTsKICAgIGluaXRfc2VxdWVuY2VFcXVhbCgpOwogICAgaW5pdF9zaGFyZSgpOwogICAgaW5pdF9zaGFyZVJlcGxheSgpOwogICAgaW5pdF9zaW5nbGUoKTsKICAgIGluaXRfc2tpcCgpOwogICAgaW5pdF9za2lwTGFzdCgpOwogICAgaW5pdF9za2lwVW50aWwoKTsKICAgIGluaXRfc2tpcFdoaWxlKCk7CiAgICBpbml0X3N0YXJ0V2l0aCgpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogICAgaW5pdF9zd2l0Y2hBbGwoKTsKICAgIGluaXRfc3dpdGNoTWFwKCk7CiAgICBpbml0X3N3aXRjaE1hcFRvKCk7CiAgICBpbml0X3N3aXRjaFNjYW4oKTsKICAgIGluaXRfdGFrZSgpOwogICAgaW5pdF90YWtlTGFzdCgpOwogICAgaW5pdF90YWtlVW50aWwoKTsKICAgIGluaXRfdGFrZVdoaWxlKCk7CiAgICBpbml0X3RhcCgpOwogICAgaW5pdF90aHJvdHRsZSgpOwogICAgaW5pdF90aHJvdHRsZVRpbWUoKTsKICAgIGluaXRfdGhyb3dJZkVtcHR5KCk7CiAgICBpbml0X3RpbWVJbnRlcnZhbCgpOwogICAgaW5pdF90aW1lb3V0KCk7CiAgICBpbml0X3RpbWVvdXRXaXRoKCk7CiAgICBpbml0X3RpbWVzdGFtcCgpOwogICAgaW5pdF90b0FycmF5KCk7CiAgICBpbml0X3dpbmRvdygpOwogICAgaW5pdF93aW5kb3dDb3VudCgpOwogICAgaW5pdF93aW5kb3dUaW1lKCk7CiAgICBpbml0X3dpbmRvd1RvZ2dsZSgpOwogICAgaW5pdF93aW5kb3dXaGVuKCk7CiAgICBpbml0X3dpdGhMYXRlc3RGcm9tKCk7CiAgICBpbml0X3ppcDIoKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMKdmFyIHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cywgewogIE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGUsCiAgUmVwbGF5U3ViamVjdDogKCkgPT4gUmVwbGF5U3ViamVjdCwKICBTdWJqZWN0OiAoKSA9PiBTdWJqZWN0LAogIFN1YnNjcmlwdGlvbjogKCkgPT4gU3Vic2NyaXB0aW9uLAogIGZyb206ICgpID0+IGZyb20sCiAgZnJvbUV2ZW50OiAoKSA9PiBmcm9tRXZlbnQsCiAgb2Y6ICgpID0+IG9mLAogIG9wczogKCkgPT4gb3BzCn0pOwp2YXIgb3BzOwp2YXIgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgICBpbml0X29wZXJhdG9ycygpOwogICAgb3BzID0gewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckNvdW50LAogICAgICBidWZmZXJUaW1lLAogICAgICBkZWJvdW5jZSwKICAgICAgZGVib3VuY2VUaW1lLAogICAgICBmaWx0ZXIsCiAgICAgIG1hcDogbWFwMiwKICAgICAgc3RhcnRXaXRoLAogICAgICB0YWtlVW50aWwsCiAgICAgIHRocm90dGxlVGltZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMKdmFyIE9ic2VydmFibGVtYXA7CnZhciBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogICAgT2JzZXJ2YWJsZW1hcCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkgPSBuZXcgQXJyYXkoKTsKICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5ID0gbmV3IEFycmF5KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KICAgICAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLgogICAgICAgKi8KICAgICAgZ2V0U3ViamVjdEZvckVtaXR0ZXJFdmVudChlbWl0dGVyQXJnLCBldmVudEFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQoZW1pdHRlckFyZywgZXZlbnRBcmcpOwogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgZW1pdHRlck9ic2VydmFibGUuc3Vic2NyaWJlKGVtaXR0ZXJTdWJqZWN0KTsKICAgICAgICAgIGNvbnN0IG5ld0J1bmRsZSA9IHsKICAgICAgICAgICAgc3ViamVjdDogZW1pdHRlclN1YmplY3QsCiAgICAgICAgICAgIGV2ZW50UmVmOiBlbWl0dGVyQXJnLAogICAgICAgICAgICBldmVudDogZXZlbnRBcmcKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFN1YmplY3RGb3JFdmVudFRhcmdldChldmVudFRhcmdldEFyZywgZXZlbnROYW1lQXJnKSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgY29uc3QgbmV3QnVuZGxlID0gewogICAgICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCwKICAgICAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLAogICAgICAgICAgICBldmVudDogZXZlbnROYW1lQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRUYXJnZXRCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS5qcwp2YXIgT2JzZXJ2YWJsZUludGFrZTsKdmFyIGluaXRfc21hcnRyeF9jbGFzc2VzX29ic2VydmFibGVpbnRha2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgICBPYnNlcnZhYmxlSW50YWtlID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICBuZXh0OiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBudWxsOwogICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnBheWxvYWRCdWZmZXIgPSBbXTsKICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXJBcmcpID0+IHsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBzZXRPYnNlcnZhYmxlKG9ic2VydmFibGVGdW5jKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7CiAgICAgIH0KICAgICAgcHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuYnVmZmVyZWQpIHsKICAgICAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1c2hlcyBtYW55IHBheWxvYWRzIGFzIGFycmF5CiAgICAgICAqIEBwYXJhbSBwYXlsb2FkQXJnQXJyYXkKICAgICAgICovCiAgICAgIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXlsb2FkQXJnQXJyYXkpIHsKICAgICAgICAgIHRoaXMucHVzaChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBnZW5lcmF0b3IgdG8gcXVlcnkgdGhlIG5leHQgcHVzaGVkIHZhbHVlCiAgICAgICAqIEBwYXJhbSBnZW5lcmF0b3JBcmcKICAgICAgICovCiAgICAgIHNldEdlbmVyYXRvcihnZW5lcmF0b3JBcmcpIHsKICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvckFyZzsKICAgICAgfQogICAgICBtYWtlQnVmZmVyZWQoKSB7CiAgICAgICAgdGhpcy5idWZmZXJlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc3Vic2NyaWJlKC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVxdWVzdCB0aGUgbmV4dCB2YWx1ZXMgaW4gdGhlIHF1YW50aXR5IHNwZWNpZmllZAogICAgICAgKiBAcGFyYW0gaG93TWFueUFyZyBpZiBhIGdlbmVyYXRvciBpcyBzZXQsIG9mIGEgYnVmZmVyIGV4aXN0cywgdGhpcyBhbGxvd3MgcmV0cmlldmluZyB2YWx1ZXMKICAgICAgICovCiAgICAgIHJlcXVlc3QoaG93TWFueUFyZykgewogICAgICAgIGlmIChob3dNYW55QXJnID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSAhPT0gaG93TWFueUFyZzsgaTExKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gdGhpcy5nZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQdXNoKG5leHRQYXlsb2FkLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogc2lnbmFscyB0aGUgY29tcGxldGlvbiBvZiB0aGlzIG9ic2VydmFibGUKICAgICAgICovCiAgICAgIHNpZ25hbENvbXBsZXRlKCkgewogICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5jb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGludGVybmFsUHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguZnVuY3Rpb25zLmpzCmZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlKHN0cmVhbSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gewogICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTsKICAgIGNvbnN0IHJlc3VtZVN0cmVhbSA9ICgpID0+IHByb2Nlc3MubmV4dFRpY2soKCkgPT4gc3RyZWFtLnJlc3VtZSgpKTsKICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhMTEpID0+IHsKICAgICAgcGF1c2VTdHJlYW0oKTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGRhdGExMSk7CiAgICAgIHJlc3VtZVN0cmVhbSgpOwogICAgfTsKICAgIHN0cmVhbS5vbigiZGF0YSIsIG9uRGF0YSk7CiAgICBzdHJlYW0ub24oImVycm9yIiwgKGVycm9yKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSk7CiAgICBzdHJlYW0ub24oImVuZCIsICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSk7CiAgICBzdHJlYW0ub24oImNsb3NlIiwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTsKICAgIHJldHVybiAoKSA9PiB7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsIG9uRGF0YSk7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLCBzdWJzY3JpYmVyLmVycm9yKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlbmQiLCBzdWJzY3JpYmVyLmNvbXBsZXRlKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsIHN1YnNjcmliZXIuY29tcGxldGUpOwogICAgfTsKICB9KTsKfQp2YXIgaW5pdF9zbWFydHJ4X2Z1bmN0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5mdW5jdGlvbnMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIsIHsKICBPYnNlcnZhYmxlSW50YWtlOiAoKSA9PiBPYnNlcnZhYmxlSW50YWtlLAogIE9ic2VydmFibGVtYXA6ICgpID0+IE9ic2VydmFibGVtYXAsCiAgZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmU6ICgpID0+IGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlLAogIHJ4anM6ICgpID0+IHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMKfSk7CnZhciBpbml0X2Rpc3RfdHMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X2NsYXNzZXNfb2JzZXJ2YWJsZW1hcCgpOwogICAgaW5pdF9zbWFydHJ4X2NsYXNzZXNfb2JzZXJ2YWJsZWludGFrZSgpOwogICAgaW5pdF9zbWFydHJ4X2Z1bmN0aW9ucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcwpmdW5jdGlvbiBuNSh0OSkgewogIHJldHVybiAoZTExLCBvMTMpID0+ICJvYmplY3QiID09IHR5cGVvZiBvMTMgPyByNCh0OSwgZTExLCBvMTMpIDogKCh0MTAsIGUxMiwgbzE0KSA9PiB7CiAgICBjb25zdCByMTEgPSBlMTIuaGFzT3duUHJvcGVydHkobzE0KTsKICAgIHJldHVybiBlMTIuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkobzE0LCB0MTApLCByMTEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUxMiwgbzE0KSA6IHZvaWQgMDsKICB9KSh0OSwgZTExLCBvMTMpOwp9CnZhciBvNiwgcjQ7CnZhciBpbml0X3Byb3BlcnR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIG82ID0geyBhdHRyaWJ1dGU6IHRydWUsIHR5cGU6IFN0cmluZywgY29udmVydGVyOiB1LCByZWZsZWN0OiBmYWxzZSwgaGFzQ2hhbmdlZDogZiB9LCByNCA9ICh0OSA9IG82LCBlMTEsIHIxMSkgPT4gewogICAgICBjb25zdCB7IGtpbmQ6IG4xMiwgbWV0YWRhdGE6IGkxMSB9ID0gcjExOwogICAgICBsZXQgczEwID0gZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLmdldChpMTEpOwogICAgICBpZiAodm9pZCAwID09PSBzMTAgJiYgZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChpMTEsIHMxMCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLCAic2V0dGVyIiA9PT0gbjEyICYmICgodDkgPSBPYmplY3QuY3JlYXRlKHQ5KSkud3JhcHBlZCA9IHRydWUpLCBzMTAuc2V0KHIxMS5uYW1lLCB0OSksICJhY2Nlc3NvciIgPT09IG4xMikgewogICAgICAgIGNvbnN0IHsgbmFtZTogbzEzIH0gPSByMTE7CiAgICAgICAgcmV0dXJuIHsgc2V0KHIxMikgewogICAgICAgICAgY29uc3QgbjEzID0gZTExLmdldC5jYWxsKHRoaXMpOwogICAgICAgICAgZTExLnNldC5jYWxsKHRoaXMsIHIxMiksIHRoaXMucmVxdWVzdFVwZGF0ZShvMTMsIG4xMywgdDksIHRydWUsIHIxMik7CiAgICAgICAgfSwgaW5pdChlMTIpIHsKICAgICAgICAgIHJldHVybiB2b2lkIDAgIT09IGUxMiAmJiB0aGlzLkMobzEzLCB2b2lkIDAsIHQ5LCBlMTIpLCBlMTI7CiAgICAgICAgfSB9OwogICAgICB9CiAgICAgIGlmICgic2V0dGVyIiA9PT0gbjEyKSB7CiAgICAgICAgY29uc3QgeyBuYW1lOiBvMTMgfSA9IHIxMTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24ocjEyKSB7CiAgICAgICAgICBjb25zdCBuMTMgPSB0aGlzW28xM107CiAgICAgICAgICBlMTEuY2FsbCh0aGlzLCByMTIpLCB0aGlzLnJlcXVlc3RVcGRhdGUobzEzLCBuMTMsIHQ5LCB0cnVlLCByMTIpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgdGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGRlY29yYXRvciBsb2NhdGlvbjogIiArIG4xMik7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcwp2YXIgaW5pdF9wcm9wZXJ0eTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzIigpIHsKICAgIGluaXRfcHJvcGVydHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jb2xvcnMuanMKdmFyIGluaXRfZG9tdG9vbHNfY29sb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNvbG9ycy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGRlbGF5QDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czMgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMywgewogIFRpbWVvdXQ6ICgpID0+IFRpbWVvdXQsCiAgZGVsYXlGb3I6ICgpID0+IGRlbGF5Rm9yLAogIGRlbGF5Rm9yUmFuZG9tOiAoKSA9PiBkZWxheUZvclJhbmRvbQp9KTsKdmFyIGRlbGF5Rm9yLCBkZWxheUZvclJhbmRvbSwgVGltZW91dDsKdmFyIGluaXRfZGlzdF90czMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGRlbGF5QDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBkZWxheUZvciA9IGFzeW5jICh0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgY29uc3QgdGltZW91dDIgPSBuZXcgVGltZW91dCh0aW1lSW5NaWxsaXNlY29uZEFyZywgbnVsbCwgdW5yZWZlZEFyZyk7CiAgICAgIGF3YWl0IHRpbWVvdXQyLnByb21pc2U7CiAgICAgIHJldHVybiBwYXNzT25Bcmc7CiAgICB9OwogICAgZGVsYXlGb3JSYW5kb20gPSBhc3luYyAodGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT25BcmcsIHVucmVmZWRBcmcgPSBmYWxzZSkgPT4gewogICAgICBhd2FpdCBkZWxheUZvcihNYXRoLnJhbmRvbSgpICogKHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnIC0gdGltZU1pbkluTWlsbGlzZWNvbmRBcmcpICsgdGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIFRpbWVvdXQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT24sIHVucmVmZWRBcmcgPSBmYWxzZSkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMudGltZW91dEluTWlsbGlzID0gdGltZUluTWlsbGlzZWNvbmRBcmc7CiAgICAgICAgdGhpcy5fZGVmZXJyZWQgPSBkZWZlcigpOwogICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHsKICAgICAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZShwYXNzT24pOwogICAgICAgICAgfQogICAgICAgIH0sIHRpbWVJbk1pbGxpc2Vjb25kQXJnKTsKICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBEYXRlLm5vdygpOwogICAgICAgIGlmICh1bnJlZmVkQXJnKSB7CiAgICAgICAgICB0aGlzLm1ha2VVbnJlZmVkKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB1bnJlZmZpbmcgYSB0aW1lb3V0IGNhdXNlcyB0aGUgbm9kZSBwcm9jZXNzIHRvIG5vdCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSBleGl0CiAgICAgICAqLwogICAgICBtYWtlVW5yZWZlZCgpIHsKICAgICAgICB0aGlzLl90aW1lb3V0LnVucmVmKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNhbmNlbHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBjYW5jZWwoKSB7CiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7CiAgICAgIH0KICAgICAgZ2V0VGltZUxlZnQoKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdGFydGVkICsgdGhpcy50aW1lb3V0SW5NaWxsaXMgLSBEYXRlLm5vdygpOwogICAgICAgIHJldHVybiByZXN1bHQgPiAwID8gcmVzdWx0IDogMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzQDMuMC4xOS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0LWludGVyZmFjZXMvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNCA9IHt9Owp2YXIgaW5pdF9kaXN0X3RzNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzQDMuMC4xOS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0LWludGVyZmFjZXMvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9lc2NhcGUtc3RyaW5nLXJlZ2V4cEA1LjAuMC9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAvaW5kZXguanMKZnVuY3Rpb24gZXNjYXBlU3RyaW5nUmVnZXhwKHN0cmluZzMpIHsKICBpZiAodHlwZW9mIHN0cmluZzMgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpOwogIH0KICByZXR1cm4gc3RyaW5nMy5yZXBsYWNlKC9bfFxce30oKVtcXV4kKyo/Ll0vZywgIlxcJCYiKS5yZXBsYWNlKC8tL2csICJcXHgyZCIpOwp9CnZhciBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21hdGNoZXJANS4wLjAvbm9kZV9tb2R1bGVzL21hdGNoZXIvaW5kZXguanMKdmFyIG1hdGNoZXJfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChtYXRjaGVyX2V4cG9ydHMsIHsKICBpc01hdGNoOiAoKSA9PiBpc01hdGNoLAogIG1hdGNoZXI6ICgpID0+IG1hdGNoZXIKfSk7CmZ1bmN0aW9uIG1hdGNoZXIoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMpIHsKICByZXR1cm4gYmFzZU1hdGNoZXIoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMsIGZhbHNlKTsKfQpmdW5jdGlvbiBpc01hdGNoKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGJhc2VNYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zLCB0cnVlKS5sZW5ndGggPiAwOwp9CnZhciByZWdleHBDYWNoZSwgc2FuaXRpemVBcnJheSwgbWFrZVJlZ2V4cCwgYmFzZU1hdGNoZXI7CnZhciBpbml0X21hdGNoZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tYXRjaGVyQDUuMC4wL25vZGVfbW9kdWxlcy9tYXRjaGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICAgIHJlZ2V4cENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHNhbml0aXplQXJyYXkgPSAoaW5wdXQsIGlucHV0TmFtZSkgPT4gewogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7CiAgICAgICAgc3dpdGNoICh0eXBlb2YgaW5wdXQpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIGlucHV0ID0gW2lucHV0XTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgogICAgICAgICAgICBpbnB1dCA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICcke2lucHV0TmFtZX0nIHRvIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5LCBidXQgZ290IGEgdHlwZSBvZiAnJHt0eXBlb2YgaW5wdXR9J2ApOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaW5wdXQuZmlsdGVyKChzdHJpbmczKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmczICE9PSAic3RyaW5nIikgewogICAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmczID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtpbnB1dE5hbWV9JyB0byBiZSBhbiBhcnJheSBvZiBzdHJpbmdzLCBidXQgZm91bmQgYSB0eXBlIG9mICcke3R5cGVvZiBzdHJpbmczfScgaW4gdGhlIGFycmF5YCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KTsKICAgIH07CiAgICBtYWtlUmVnZXhwID0gKHBhdHRlcm4sIG9wdGlvbnMpID0+IHsKICAgICAgb3B0aW9ucyA9IHsKICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAuLi5vcHRpb25zCiAgICAgIH07CiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gcGF0dGVybiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpOwogICAgICBpZiAocmVnZXhwQ2FjaGUuaGFzKGNhY2hlS2V5KSkgewogICAgICAgIHJldHVybiByZWdleHBDYWNoZS5nZXQoY2FjaGVLZXkpOwogICAgICB9CiAgICAgIGNvbnN0IG5lZ2F0ZWQgPSBwYXR0ZXJuWzBdID09PSAiISI7CiAgICAgIGlmIChuZWdhdGVkKSB7CiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4uc2xpY2UoMSk7CiAgICAgIH0KICAgICAgcGF0dGVybiA9IGVzY2FwZVN0cmluZ1JlZ2V4cChwYXR0ZXJuKS5yZXBsYWNlKC9cXFwqL2csICJbXFxzXFxTXSoiKTsKICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybn0kYCwgb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gIiIgOiAiaSIpOwogICAgICByZWdleHAubmVnYXRlZCA9IG5lZ2F0ZWQ7CiAgICAgIHJlZ2V4cENhY2hlLnNldChjYWNoZUtleSwgcmVnZXhwKTsKICAgICAgcmV0dXJuIHJlZ2V4cDsKICAgIH07CiAgICBiYXNlTWF0Y2hlciA9IChpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucywgZmlyc3RNYXRjaE9ubHkpID0+IHsKICAgICAgaW5wdXRzID0gc2FuaXRpemVBcnJheShpbnB1dHMsICJpbnB1dHMiKTsKICAgICAgcGF0dGVybnMyID0gc2FuaXRpemVBcnJheShwYXR0ZXJuczIsICJwYXR0ZXJucyIpOwogICAgICBpZiAocGF0dGVybnMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBwYXR0ZXJuczIgPSBwYXR0ZXJuczIubWFwKChwYXR0ZXJuKSA9PiBtYWtlUmVnZXhwKHBhdHRlcm4sIG9wdGlvbnMpKTsKICAgICAgY29uc3QgeyBhbGxQYXR0ZXJucyB9ID0gb3B0aW9ucyB8fCB7fTsKICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7CiAgICAgICAgbGV0IG1hdGNoZXM7CiAgICAgICAgY29uc3QgZGlkRml0ID0gWy4uLnBhdHRlcm5zMl0uZmlsbChmYWxzZSk7CiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgyLCBwYXR0ZXJuXSBvZiBwYXR0ZXJuczIuZW50cmllcygpKSB7CiAgICAgICAgICBpZiAocGF0dGVybi50ZXN0KGlucHV0KSkgewogICAgICAgICAgICBkaWRGaXRbaW5kZXgyXSA9IHRydWU7CiAgICAgICAgICAgIG1hdGNoZXMgPSAhcGF0dGVybi5uZWdhdGVkOwogICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIShtYXRjaGVzID09PSBmYWxzZSB8fCBtYXRjaGVzID09PSB2b2lkIDAgJiYgcGF0dGVybnMyLnNvbWUoKHBhdHRlcm4pID0+ICFwYXR0ZXJuLm5lZ2F0ZWQpIHx8IGFsbFBhdHRlcm5zICYmIGRpZEZpdC5zb21lKCh5ZXMsIGluZGV4MikgPT4gIXllcyAmJiAhcGF0dGVybnMyW2luZGV4Ml0ubmVnYXRlZCkpKSB7CiAgICAgICAgICByZXN1bHQucHVzaChpbnB1dCk7CiAgICAgICAgICBpZiAoZmlyc3RNYXRjaE9ubHkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydG1hdGNoX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hdGNoQDIuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hdGNoL2Rpc3RfdHMvc21hcnRtYXRjaC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfbWF0Y2hlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM1ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czUsIHsKICBTbWFydE1hdGNoOiAoKSA9PiBTbWFydE1hdGNoCn0pOwp2YXIgU21hcnRNYXRjaDsKdmFyIGluaXRfZGlzdF90czUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hdGNoQDIuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hdGNoL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydG1hdGNoX3BsdWdpbnMoKTsKICAgIFNtYXJ0TWF0Y2ggPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHdpbGRjYXJkQXJnKSB7CiAgICAgICAgdGhpcy53aWxkY2FyZCA9IHdpbGRjYXJkQXJnOwogICAgICB9CiAgICAgIG1hdGNoKG1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoZXJfZXhwb3J0cy5pc01hdGNoKG1hdGNoU3RyaW5nQXJnLCB0aGlzLndpbGRjYXJkKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Nyb25lckAxMC4wLjEvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcwp2YXIgY3JvbmVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY3JvbmVyX2V4cG9ydHMsIHsKICBDcm9uOiAoKSA9PiBFMiwKICBDcm9uRGF0ZTogKCkgPT4gbTIsCiAgQ3JvblBhdHRlcm46ICgpID0+IEMyLAogIHNjaGVkdWxlZEpvYnM6ICgpID0+IHcyCn0pOwpmdW5jdGlvbiBUMihzMTApIHsKICByZXR1cm4gRGF0ZS5VVEMoczEwLnksIHMxMC5tIC0gMSwgczEwLmQsIHMxMC5oLCBzMTAuaSwgczEwLnMpOwp9CmZ1bmN0aW9uIEQyKHMxMCwgZTExKSB7CiAgcmV0dXJuIHMxMC55ID09PSBlMTEueSAmJiBzMTAubSA9PT0gZTExLm0gJiYgczEwLmQgPT09IGUxMS5kICYmIHMxMC5oID09PSBlMTEuaCAmJiBzMTAuaSA9PT0gZTExLmkgJiYgczEwLnMgPT09IGUxMS5zOwp9CmZ1bmN0aW9uIEEyKHMxMCwgZTExKSB7CiAgbGV0IHQ5ID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzMTApKTsKICBpZiAoaXNOYU4odDkpKSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSVNPODYwMSBwYXNzZWQgdG8gdGltZXpvbmUgcGFyc2VyLiIpOwogIGxldCByMTEgPSBzMTAuc3Vic3RyaW5nKDkpOwogIHJldHVybiByMTEuaW5jbHVkZXMoIloiKSB8fCByMTEuaW5jbHVkZXMoIisiKSB8fCByMTEuaW5jbHVkZXMoIi0iKSA/IGIzKHQ5LmdldFVUQ0Z1bGxZZWFyKCksIHQ5LmdldFVUQ01vbnRoKCkgKyAxLCB0OS5nZXRVVENEYXRlKCksIHQ5LmdldFVUQ0hvdXJzKCksIHQ5LmdldFVUQ01pbnV0ZXMoKSwgdDkuZ2V0VVRDU2Vjb25kcygpLCAiRXRjL1VUQyIpIDogYjModDkuZ2V0RnVsbFllYXIoKSwgdDkuZ2V0TW9udGgoKSArIDEsIHQ5LmdldERhdGUoKSwgdDkuZ2V0SG91cnMoKSwgdDkuZ2V0TWludXRlcygpLCB0OS5nZXRTZWNvbmRzKCksIGUxMSk7Cn0KZnVuY3Rpb24gdjIoczEwLCBlMTEsIHQ5KSB7CiAgcmV0dXJuIGsyKEEyKHMxMCwgZTExKSwgdDkpOwp9CmZ1bmN0aW9uIGsyKHMxMCwgZTExKSB7CiAgbGV0IHQ5ID0gbmV3IERhdGUoVDIoczEwKSksIHIxMSA9IGcyKHQ5LCBzMTAudHopLCBuMTIgPSBUMihzMTApLCBpMTEgPSBUMihyMTEpLCBhNSA9IG4xMiAtIGkxMSwgbzEzID0gbmV3IERhdGUodDkuZ2V0VGltZSgpICsgYTUpLCBoOCA9IGcyKG8xMywgczEwLnR6KTsKICBpZiAoRDIoaDgsIHMxMCkpIHsKICAgIGxldCB1NyA9IG5ldyBEYXRlKG8xMy5nZXRUaW1lKCkgLSAzNmU1KSwgZDUgPSBnMih1NywgczEwLnR6KTsKICAgIHJldHVybiBEMihkNSwgczEwKSA/IHU3IDogbzEzOwogIH0KICBsZXQgbDYgPSBuZXcgRGF0ZShvMTMuZ2V0VGltZSgpICsgVDIoczEwKSAtIFQyKGg4KSksIHk0ID0gZzIobDYsIHMxMC50eik7CiAgaWYgKEQyKHk0LCBzMTApKSByZXR1cm4gbDY7CiAgaWYgKGUxMSkgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIGZyb21UWigpIik7CiAgcmV0dXJuIG8xMy5nZXRUaW1lKCkgPiBsNi5nZXRUaW1lKCkgPyBvMTMgOiBsNjsKfQpmdW5jdGlvbiBnMihzMTAsIGUxMSkgewogIGxldCB0OSwgcjExOwogIHRyeSB7CiAgICB0OSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIsIHsgdGltZVpvbmU6IGUxMSwgeWVhcjogIm51bWVyaWMiLCBtb250aDogIm51bWVyaWMiLCBkYXk6ICJudW1lcmljIiwgaG91cjogIm51bWVyaWMiLCBtaW51dGU6ICJudW1lcmljIiwgc2Vjb25kOiAibnVtZXJpYyIsIGhvdXIxMjogZmFsc2UgfSksIHIxMSA9IHQ5LmZvcm1hdFRvUGFydHMoczEwKTsKICB9IGNhdGNoIChpMTEpIHsKICAgIGxldCBhNSA9IGkxMSBpbnN0YW5jZW9mIEVycm9yID8gaTExLm1lc3NhZ2UgOiBTdHJpbmcoaTExKTsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB0b1RaOiBJbnZhbGlkIHRpbWV6b25lICcke2UxMX0nIG9yIGRhdGUuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgSUFOQSB0aW1lem9uZSAoZS5nLiwgJ0FtZXJpY2EvTmV3X1lvcmsnLCAnRXVyb3BlL1N0b2NraG9sbScpLiBPcmlnaW5hbCBlcnJvcjogJHthNX1gKTsKICB9CiAgbGV0IG4xMiA9IHsgeWVhcjogMCwgbW9udGg6IDAsIGRheTogMCwgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAgfTsKICBmb3IgKGxldCBpMTEgb2YgcjExKSAoaTExLnR5cGUgPT09ICJ5ZWFyIiB8fCBpMTEudHlwZSA9PT0gIm1vbnRoIiB8fCBpMTEudHlwZSA9PT0gImRheSIgfHwgaTExLnR5cGUgPT09ICJob3VyIiB8fCBpMTEudHlwZSA9PT0gIm1pbnV0ZSIgfHwgaTExLnR5cGUgPT09ICJzZWNvbmQiKSAmJiAobjEyW2kxMS50eXBlXSA9IHBhcnNlSW50KGkxMS52YWx1ZSwgMTApKTsKICBpZiAoaXNOYU4objEyLnllYXIpIHx8IGlzTmFOKG4xMi5tb250aCkgfHwgaXNOYU4objEyLmRheSkgfHwgaXNOYU4objEyLmhvdXIpIHx8IGlzTmFOKG4xMi5taW51dGUpIHx8IGlzTmFOKG4xMi5zZWNvbmQpKSB0aHJvdyBuZXcgRXJyb3IoYHRvVFo6IEZhaWxlZCB0byBwYXJzZSBhbGwgZGF0ZSBjb21wb25lbnRzIGZyb20gdGltZXpvbmUgJyR7ZTExfScuIFRoaXMgbWF5IGluZGljYXRlIGFuIGludmFsaWQgZGF0ZSBvciB0aW1lem9uZSBjb25maWd1cmF0aW9uLiBQYXJzZWQgY29tcG9uZW50czogJHtKU09OLnN0cmluZ2lmeShuMTIpfWApOwogIHJldHVybiBuMTIuaG91ciA9PT0gMjQgJiYgKG4xMi5ob3VyID0gMCksIHsgeTogbjEyLnllYXIsIG06IG4xMi5tb250aCwgZDogbjEyLmRheSwgaDogbjEyLmhvdXIsIGk6IG4xMi5taW51dGUsIHM6IG4xMi5zZWNvbmQsIHR6OiBlMTEgfTsKfQpmdW5jdGlvbiBiMyhzMTAsIGUxMSwgdDksIHIxMSwgbjEyLCBpMTEsIGE1KSB7CiAgcmV0dXJuIHsgeTogczEwLCBtOiBlMTEsIGQ6IHQ5LCBoOiByMTEsIGk6IG4xMiwgczogaTExLCB0ejogYTUgfTsKfQpmdW5jdGlvbiBSMihzMTApIHsKICBpZiAoczEwID09PSB2b2lkIDAgJiYgKHMxMCA9IHt9KSwgZGVsZXRlIHMxMC5uYW1lLCBzMTAubGVnYWN5TW9kZSAhPT0gdm9pZCAwICYmIHMxMC5kb21BbmREb3cgPT09IHZvaWQgMCA/IHMxMC5kb21BbmREb3cgPSAhczEwLmxlZ2FjeU1vZGUgOiBzMTAuZG9tQW5kRG93ID09PSB2b2lkIDAgJiYgKHMxMC5kb21BbmREb3cgPSBmYWxzZSksIHMxMC5sZWdhY3lNb2RlID0gIXMxMC5kb21BbmREb3csIHMxMC5wYXVzZWQgPSBzMTAucGF1c2VkID09PSB2b2lkIDAgPyBmYWxzZSA6IHMxMC5wYXVzZWQsIHMxMC5tYXhSdW5zID0gczEwLm1heFJ1bnMgPT09IHZvaWQgMCA/IDEgLyAwIDogczEwLm1heFJ1bnMsIHMxMC5jYXRjaCA9IHMxMC5jYXRjaCA9PT0gdm9pZCAwID8gZmFsc2UgOiBzMTAuY2F0Y2gsIHMxMC5pbnRlcnZhbCA9IHMxMC5pbnRlcnZhbCA9PT0gdm9pZCAwID8gMCA6IHBhcnNlSW50KHMxMC5pbnRlcnZhbC50b1N0cmluZygpLCAxMCksIHMxMC51dGNPZmZzZXQgPSBzMTAudXRjT2Zmc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJzZUludChzMTAudXRjT2Zmc2V0LnRvU3RyaW5nKCksIDEwKSwgczEwLmRheU9mZnNldCA9IHMxMC5kYXlPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBwYXJzZUludChzMTAuZGF5T2Zmc2V0LnRvU3RyaW5nKCksIDEwKSwgczEwLnVucmVmID0gczEwLnVucmVmID09PSB2b2lkIDAgPyBmYWxzZSA6IHMxMC51bnJlZiwgczEwLm1vZGUgPSBzMTAubW9kZSA9PT0gdm9pZCAwID8gImF1dG8iIDogczEwLm1vZGUsIHMxMC5hbHRlcm5hdGl2ZVdlZWtkYXlzID0gczEwLmFsdGVybmF0aXZlV2Vla2RheXMgPT09IHZvaWQgMCA/IGZhbHNlIDogczEwLmFsdGVybmF0aXZlV2Vla2RheXMsIHMxMC5zbG9wcHlSYW5nZXMgPSBzMTAuc2xvcHB5UmFuZ2VzID09PSB2b2lkIDAgPyBmYWxzZSA6IHMxMC5zbG9wcHlSYW5nZXMsICFbImF1dG8iLCAiNS1wYXJ0IiwgIjYtcGFydCIsICI3LXBhcnQiLCAiNS1vci02LXBhcnRzIiwgIjYtb3ItNy1wYXJ0cyJdLmluY2x1ZGVzKHMxMC5tb2RlKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogbW9kZSBtdXN0IGJlIG9uZSBvZiAnYXV0bycsICc1LXBhcnQnLCAnNi1wYXJ0JywgJzctcGFydCcsICc1LW9yLTYtcGFydHMnLCBvciAnNi1vci03LXBhcnRzJy4iKTsKICBpZiAoczEwLnN0YXJ0QXQgJiYgKHMxMC5zdGFydEF0ID0gbmV3IG0yKHMxMC5zdGFydEF0LCBzMTAudGltZXpvbmUpKSwgczEwLnN0b3BBdCAmJiAoczEwLnN0b3BBdCA9IG5ldyBtMihzMTAuc3RvcEF0LCBzMTAudGltZXpvbmUpKSwgczEwLmludGVydmFsICE9PSBudWxsKSB7CiAgICBpZiAoaXNOYU4oczEwLmludGVydmFsKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogU3VwcGxpZWQgdmFsdWUgZm9yIGludGVydmFsIGlzIG5vdCBhIG51bWJlciIpOwogICAgaWYgKHMxMC5pbnRlcnZhbCA8IDApIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBjYW4gbm90IGJlIG5lZ2F0aXZlIik7CiAgfQogIGlmIChzMTAudXRjT2Zmc2V0ICE9PSB2b2lkIDApIHsKICAgIGlmIChpc05hTihzMTAudXRjT2Zmc2V0KSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogSW52YWxpZCB2YWx1ZSBwYXNzZWQgZm9yIHV0Y09mZnNldCwgc2hvdWxkIGJlIG51bWJlciByZXByZXNlbnRpbmcgbWludXRlcyBvZmZzZXQgZnJvbSBVVEMuIik7CiAgICBpZiAoczEwLnV0Y09mZnNldCA8IC04NzAgfHwgczEwLnV0Y09mZnNldCA+IDg3MCkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogdXRjT2Zmc2V0IG91dCBvZiBib3VuZHMuIik7CiAgICBpZiAoczEwLnV0Y09mZnNldCAhPT0gdm9pZCAwICYmIHMxMC50aW1lem9uZSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogQ29tYmluaW5nICd1dGNPZmZzZXQnIHdpdGggJ3RpbWV6b25lJyBpcyBub3QgYWxsb3dlZC4iKTsKICB9CiAgaWYgKHMxMC51bnJlZiAhPT0gdHJ1ZSAmJiBzMTAudW5yZWYgIT09IGZhbHNlKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBVbnJlZiBzaG91bGQgYmUgZWl0aGVyIHRydWUsIGZhbHNlIG9yIHVuZGVmaW5lZChmYWxzZSkuIik7CiAgaWYgKHMxMC5kYXlPZmZzZXQgIT09IHZvaWQgMCAmJiBzMTAuZGF5T2Zmc2V0ICE9PSAwICYmIGlzTmFOKHMxMC5kYXlPZmZzZXQpKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgZGF5T2Zmc2V0LCBzaG91bGQgYmUgYSBudW1iZXIgcmVwcmVzZW50aW5nIGRheXMgdG8gb2Zmc2V0LiIpOwogIHJldHVybiBzMTA7Cn0KZnVuY3Rpb24gcDMoczEwKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzMTApID09PSAiW29iamVjdCBGdW5jdGlvbl0iIHx8IHR5cGVvZiBzMTAgPT0gImZ1bmN0aW9uIiB8fCBzMTAgaW5zdGFuY2VvZiBGdW5jdGlvbjsKfQpmdW5jdGlvbiBfMihzMTApIHsKICByZXR1cm4gcDMoczEwKTsKfQpmdW5jdGlvbiB4MihzMTApIHsKICB0eXBlb2YgRGVubyA8ICJ1IiAmJiB0eXBlb2YgRGVuby51bnJlZlRpbWVyIDwgInUiID8gRGVuby51bnJlZlRpbWVyKHMxMCkgOiBzMTAgJiYgdHlwZW9mIHMxMC51bnJlZiA8ICJ1IiAmJiBzMTAudW5yZWYoKTsKfQp2YXIgTywgQzIsIFAyLCBmMywgbTIsIFcsIHcyLCBFMjsKdmFyIGluaXRfY3JvbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDEwLjAuMS9ub2RlX21vZHVsZXMvY3JvbmVyL2Rpc3QvY3JvbmVyLmpzIigpIHsKICAgIE8gPSBbMSwgMiwgNCwgOCwgMTZdLCBDMiA9IGNsYXNzIHsKICAgICAgcGF0dGVybjsKICAgICAgdGltZXpvbmU7CiAgICAgIG1vZGU7CiAgICAgIGFsdGVybmF0aXZlV2Vla2RheXM7CiAgICAgIHNsb3BweVJhbmdlczsKICAgICAgc2Vjb25kOwogICAgICBtaW51dGU7CiAgICAgIGhvdXI7CiAgICAgIGRheTsKICAgICAgbW9udGg7CiAgICAgIGRheU9mV2VlazsKICAgICAgeWVhcjsKICAgICAgbGFzdERheU9mTW9udGg7CiAgICAgIGxhc3RXZWVrZGF5OwogICAgICBuZWFyZXN0V2Vla2RheXM7CiAgICAgIHN0YXJET007CiAgICAgIHN0YXJET1c7CiAgICAgIHN0YXJZZWFyOwogICAgICB1c2VBbmRMb2dpYzsKICAgICAgY29uc3RydWN0b3IoZTExLCB0OSwgcjExKSB7CiAgICAgICAgdGhpcy5wYXR0ZXJuID0gZTExLCB0aGlzLnRpbWV6b25lID0gdDksIHRoaXMubW9kZSA9IHIxMT8ubW9kZSA/PyAiYXV0byIsIHRoaXMuYWx0ZXJuYXRpdmVXZWVrZGF5cyA9IHIxMT8uYWx0ZXJuYXRpdmVXZWVrZGF5cyA/PyBmYWxzZSwgdGhpcy5zbG9wcHlSYW5nZXMgPSByMTE/LnNsb3BweVJhbmdlcyA/PyBmYWxzZSwgdGhpcy5zZWNvbmQgPSBBcnJheSg2MCkuZmlsbCgwKSwgdGhpcy5taW51dGUgPSBBcnJheSg2MCkuZmlsbCgwKSwgdGhpcy5ob3VyID0gQXJyYXkoMjQpLmZpbGwoMCksIHRoaXMuZGF5ID0gQXJyYXkoMzEpLmZpbGwoMCksIHRoaXMubW9udGggPSBBcnJheSgxMikuZmlsbCgwKSwgdGhpcy5kYXlPZldlZWsgPSBBcnJheSg3KS5maWxsKDApLCB0aGlzLnllYXIgPSBBcnJheSgxZTQpLmZpbGwoMCksIHRoaXMubGFzdERheU9mTW9udGggPSBmYWxzZSwgdGhpcy5sYXN0V2Vla2RheSA9IGZhbHNlLCB0aGlzLm5lYXJlc3RXZWVrZGF5cyA9IEFycmF5KDMxKS5maWxsKDApLCB0aGlzLnN0YXJET00gPSBmYWxzZSwgdGhpcy5zdGFyRE9XID0gZmFsc2UsIHRoaXMuc3RhclllYXIgPSBmYWxzZSwgdGhpcy51c2VBbmRMb2dpYyA9IGZhbHNlLCB0aGlzLnBhcnNlKCk7CiAgICAgIH0KICAgICAgcGFyc2UoKSB7CiAgICAgICAgaWYgKCEodHlwZW9mIHRoaXMucGF0dGVybiA9PSAic3RyaW5nIiB8fCB0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7CiAgICAgICAgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKSA+PSAwICYmICh0aGlzLnBhdHRlcm4gPSB0aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7CiAgICAgICAgbGV0IGUxMSA9IHRoaXMucGF0dGVybi5tYXRjaCgvXFMrL2cpIHx8IFsiIl0sIHQ5ID0gZTExLmxlbmd0aDsKICAgICAgICBpZiAoZTExLmxlbmd0aCA8IDUgfHwgZTExLmxlbmd0aCA+IDcpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9ybWF0ICgnIiArIHRoaXMucGF0dGVybiArICInKSwgZXhhY3RseSBmaXZlLCBzaXgsIG9yIHNldmVuIHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gImF1dG8iKSB7CiAgICAgICAgICBsZXQgbjEyOwogICAgICAgICAgc3dpdGNoICh0aGlzLm1vZGUpIHsKICAgICAgICAgICAgY2FzZSAiNS1wYXJ0IjoKICAgICAgICAgICAgICBuMTIgPSA1OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICI2LXBhcnQiOgogICAgICAgICAgICAgIG4xMiA9IDY7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIjctcGFydCI6CiAgICAgICAgICAgICAgbjEyID0gNzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiNS1vci02LXBhcnRzIjoKICAgICAgICAgICAgICBuMTIgPSBbNSwgNl07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIjYtb3ItNy1wYXJ0cyI6CiAgICAgICAgICAgICAgbjEyID0gWzYsIDddOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIG4xMiA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIShBcnJheS5pc0FycmF5KG4xMikgPyBuMTIuaW5jbHVkZXModDkpIDogdDkgPT09IG4xMikpIHsKICAgICAgICAgICAgbGV0IGE1ID0gQXJyYXkuaXNBcnJheShuMTIpID8gbjEyLmpvaW4oIiBvciAiKSA6IG4xMi50b1N0cmluZygpOwogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbW9kZSAnJHt0aGlzLm1vZGV9JyByZXF1aXJlcyBleGFjdGx5ICR7YTV9IHBhcnRzLCBidXQgcGF0dGVybiAnJHt0aGlzLnBhdHRlcm59JyBoYXMgJHt0OX0gcGFydHMuYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChlMTEubGVuZ3RoID09PSA1ICYmIGUxMS51bnNoaWZ0KCIwIiksIGUxMS5sZW5ndGggPT09IDYgJiYgZTExLnB1c2goIioiKSwgZTExWzNdLnRvVXBwZXJDYXNlKCkgPT09ICJMVyIgPyAodGhpcy5sYXN0V2Vla2RheSA9IHRydWUsIGUxMVszXSA9ICIiKSA6IGUxMVszXS50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkwiKSA+PSAwICYmIChlMTFbM10gPSBlMTFbM10ucmVwbGFjZSgvTC9naSwgIiIpLCB0aGlzLmxhc3REYXlPZk1vbnRoID0gdHJ1ZSksIGUxMVszXSA9PSAiKiIgJiYgKHRoaXMuc3RhckRPTSA9IHRydWUpLCBlMTFbNl0gPT0gIioiICYmICh0aGlzLnN0YXJZZWFyID0gdHJ1ZSksIGUxMVs0XS5sZW5ndGggPj0gMyAmJiAoZTExWzRdID0gdGhpcy5yZXBsYWNlQWxwaGFNb250aHMoZTExWzRdKSksIGUxMVs1XS5sZW5ndGggPj0gMyAmJiAoZTExWzVdID0gdGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzID8gdGhpcy5yZXBsYWNlQWxwaGFEYXlzUXVhcnR6KGUxMVs1XSkgOiB0aGlzLnJlcGxhY2VBbHBoYURheXMoZTExWzVdKSksIGUxMVs1XS5zdGFydHNXaXRoKCIrIikgJiYgKHRoaXMudXNlQW5kTG9naWMgPSB0cnVlLCBlMTFbNV0gPSBlMTFbNV0uc3Vic3RyaW5nKDEpLCBlMTFbNV0gPT09ICIiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IERheS1vZi13ZWVrIGZpZWxkIGNhbm5vdCBiZSBlbXB0eSBhZnRlciAnKycgbW9kaWZpZXIuIik7CiAgICAgICAgc3dpdGNoIChlMTFbNV0gPT0gIioiICYmICh0aGlzLnN0YXJET1cgPSB0cnVlKSwgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIj8iKSA+PSAwICYmIChlMTFbMF0gPSBlMTFbMF0ucmVwbGFjZSgvXD8vZywgIioiKSwgZTExWzFdID0gZTExWzFdLnJlcGxhY2UoL1w/L2csICIqIiksIGUxMVsyXSA9IGUxMVsyXS5yZXBsYWNlKC9cPy9nLCAiKiIpLCBlMTFbM10gPSBlMTFbM10ucmVwbGFjZSgvXD8vZywgIioiKSwgZTExWzRdID0gZTExWzRdLnJlcGxhY2UoL1w/L2csICIqIiksIGUxMVs1XSA9IGUxMVs1XS5yZXBsYWNlKC9cPy9nLCAiKiIpLCBlMTFbNl0gJiYgKGUxMVs2XSA9IGUxMVs2XS5yZXBsYWNlKC9cPy9nLCAiKiIpKSksIHRoaXMubW9kZSkgewogICAgICAgICAgY2FzZSAiNS1wYXJ0IjoKICAgICAgICAgICAgZTExWzBdID0gIjAiLCBlMTFbNl0gPSAiKiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiNi1wYXJ0IjoKICAgICAgICAgICAgZTExWzZdID0gIioiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIjUtb3ItNi1wYXJ0cyI6CiAgICAgICAgICAgIGUxMVs2XSA9ICIqIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICI2LW9yLTctcGFydHMiOgogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIjctcGFydCI6CiAgICAgICAgICBjYXNlICJhdXRvIjoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHRoaXMudGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKGUxMSksIHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsIGUxMVswXSwgMCwgMSksIHRoaXMucGFydFRvQXJyYXkoIm1pbnV0ZSIsIGUxMVsxXSwgMCwgMSksIHRoaXMucGFydFRvQXJyYXkoImhvdXIiLCBlMTFbMl0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJkYXkiLCBlMTFbM10sIC0xLCAxKSwgdGhpcy5wYXJ0VG9BcnJheSgibW9udGgiLCBlMTFbNF0sIC0xLCAxKTsKICAgICAgICBsZXQgcjExID0gdGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzID8gLTEgOiAwOwogICAgICAgIHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsIGUxMVs1XSwgcjExLCA2MyksIHRoaXMucGFydFRvQXJyYXkoInllYXIiLCBlMTFbNl0sIDAsIDEpLCAhdGhpcy5hbHRlcm5hdGl2ZVdlZWtkYXlzICYmIHRoaXMuZGF5T2ZXZWVrWzddICYmICh0aGlzLmRheU9mV2Vla1swXSA9IHRoaXMuZGF5T2ZXZWVrWzddKTsKICAgICAgfQogICAgICBwYXJ0VG9BcnJheShlMTEsIHQ5LCByMTEsIG4xMikgewogICAgICAgIGxldCBpMTEgPSB0aGlzW2UxMV0sIGE1ID0gZTExID09PSAiZGF5IiAmJiB0aGlzLmxhc3REYXlPZk1vbnRoLCBvMTMgPSBlMTEgPT09ICJkYXkiICYmIHRoaXMubGFzdFdlZWtkYXk7CiAgICAgICAgaWYgKHQ5ID09PSAiIiAmJiAhYTUgJiYgIW8xMykgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIiArIGUxMSArICIgKCIgKyB0OSArICIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLiIpOwogICAgICAgIGlmICh0OSA9PT0gIioiKSByZXR1cm4gaTExLmZpbGwobjEyKTsKICAgICAgICBsZXQgaDggPSB0OS5zcGxpdCgiLCIpOwogICAgICAgIGlmIChoOC5sZW5ndGggPiAxKSBmb3IgKGxldCBsNiA9IDA7IGw2IDwgaDgubGVuZ3RoOyBsNisrKSB0aGlzLnBhcnRUb0FycmF5KGUxMSwgaDhbbDZdLCByMTEsIG4xMik7CiAgICAgICAgZWxzZSB0OS5pbmRleE9mKCItIikgIT09IC0xICYmIHQ5LmluZGV4T2YoIi8iKSAhPT0gLTEgPyB0aGlzLmhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgbjEyKSA6IHQ5LmluZGV4T2YoIi0iKSAhPT0gLTEgPyB0aGlzLmhhbmRsZVJhbmdlKHQ5LCBlMTEsIHIxMSwgbjEyKSA6IHQ5LmluZGV4T2YoIi8iKSAhPT0gLTEgPyB0aGlzLmhhbmRsZVN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgbjEyKSA6IHQ5ICE9PSAiIiAmJiB0aGlzLmhhbmRsZU51bWJlcih0OSwgZTExLCByMTEsIG4xMik7CiAgICAgIH0KICAgICAgdGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKGUxMSkgewogICAgICAgIGZvciAobGV0IHQ5ID0gMDsgdDkgPCBlMTEubGVuZ3RoOyB0OSsrKSBpZiAoKHQ5ID09PSAzID8gL1teLyowLTksXC1Xd0xsXSsvIDogdDkgPT09IDUgPyAvW14vKjAtOSxcLSNMbF0rLyA6IC9bXi8qMC05LFwtXSsvKS50ZXN0KGUxMVt0OV0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogY29uZmlndXJhdGlvbiBlbnRyeSAiICsgdDkgKyAiICgiICsgZTExW3Q5XSArICIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICBoYW5kbGVOdW1iZXIoZTExLCB0OSwgcjExLCBuMTIpIHsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKGUxMSwgdDkpLCBhNSA9IGUxMS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIik7CiAgICAgICAgaWYgKHQ5ICE9PSAiZGF5IiAmJiBhNSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IE5lYXJlc3Qgd2Vla2RheSBtb2RpZmllciAoVykgb25seSBhbGxvd2VkIGluIGRheS1vZi1tb250aC4iKTsKICAgICAgICBhNSAmJiAodDkgPSAibmVhcmVzdFdlZWtkYXlzIik7CiAgICAgICAgbGV0IG8xMyA9IHBhcnNlSW50KGkxMVswXSwgMTApICsgcjExOwogICAgICAgIGlmIChpc05hTihvMTMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogIiArIHQ5ICsgIiBpcyBub3QgYSBudW1iZXI6ICciICsgZTExICsgIiciKTsKICAgICAgICB0aGlzLnNldFBhcnQodDksIG8xMywgaTExWzFdIHx8IG4xMik7CiAgICAgIH0KICAgICAgc2V0UGFydChlMTEsIHQ5LCByMTEpIHsKICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBlMTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCBwYXJ0IHNwZWNpZmllZDogIiArIGUxMSk7CiAgICAgICAgaWYgKGUxMSA9PT0gImRheU9mV2VlayIpIHsKICAgICAgICAgIGlmICh0OSA9PT0gNyAmJiAodDkgPSAwKSwgdDkgPCAwIHx8IHQ5ID4gNikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWs6ICIgKyB0OSk7CiAgICAgICAgICB0aGlzLnNldE50aFdlZWtkYXlPZk1vbnRoKHQ5LCByMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZTExID09PSAic2Vjb25kIiB8fCBlMTEgPT09ICJtaW51dGUiKSB7CiAgICAgICAgICBpZiAodDkgPCAwIHx8IHQ5ID49IDYwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyBlMTEgKyAiOiAiICsgdDkpOwogICAgICAgIH0gZWxzZSBpZiAoZTExID09PSAiaG91ciIpIHsKICAgICAgICAgIGlmICh0OSA8IDAgfHwgdDkgPj0gMjQpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIGUxMSArICI6ICIgKyB0OSk7CiAgICAgICAgfSBlbHNlIGlmIChlMTEgPT09ICJkYXkiIHx8IGUxMSA9PT0gIm5lYXJlc3RXZWVrZGF5cyIpIHsKICAgICAgICAgIGlmICh0OSA8IDAgfHwgdDkgPj0gMzEpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIGUxMSArICI6ICIgKyB0OSk7CiAgICAgICAgfSBlbHNlIGlmIChlMTEgPT09ICJtb250aCIpIHsKICAgICAgICAgIGlmICh0OSA8IDAgfHwgdDkgPj0gMTIpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIGUxMSArICI6ICIgKyB0OSk7CiAgICAgICAgfSBlbHNlIGlmIChlMTEgPT09ICJ5ZWFyIiAmJiAodDkgPCAxIHx8IHQ5ID49IDFlNCkpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIGUxMSArICI6ICIgKyB0OSArICIgKHN1cHBvcnRlZCByYW5nZTogMS05OTk5KSIpOwogICAgICAgIHRoaXNbZTExXVt0OV0gPSByMTE7CiAgICAgIH0KICAgICAgdmFsaWRhdGVOb3ROYU4oZTExLCB0OSkgewogICAgICAgIGlmIChpc05hTihlMTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKHQ5KTsKICAgICAgfQogICAgICB2YWxpZGF0ZVJhbmdlKGUxMSwgdDksIHIxMSwgbjEyLCBpMTEpIHsKICAgICAgICBpZiAoZTExID4gdDkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIiArIGkxMSArICInIik7CiAgICAgICAgaWYgKHIxMSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBpZiAocjExID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwIik7CiAgICAgICAgICBpZiAocjExID4gdGhpc1tuMTJdLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKCIgKyB0aGlzW24xMl0ubGVuZ3RoICsgIikiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZTExLCB0OSwgcjExLCBuMTIpIHsKICAgICAgICBpZiAoZTExLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIlciKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgVyBpcyBub3QgYWxsb3dlZCBpbiByYW5nZXMgd2l0aCBzdGVwcGluZy4iKTsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKGUxMSwgdDkpLCBhNSA9IGkxMVswXS5tYXRjaCgvXihcZCspLShcZCspXC8oXGQrKSQvKTsKICAgICAgICBpZiAoYTUgPT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2Ugd2l0aCBzdGVwcGluZzogJyIgKyBlMTEgKyAiJyIpOwogICAgICAgIGxldCBbLCBvMTMsIGg4LCBsNl0gPSBhNSwgeTQgPSBwYXJzZUludChvMTMsIDEwKSArIHIxMSwgdTcgPSBwYXJzZUludChoOCwgMTApICsgcjExLCBkNSA9IHBhcnNlSW50KGw2LCAxMCk7CiAgICAgICAgdGhpcy52YWxpZGF0ZU5vdE5hTih5NCwgIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTikiKSwgdGhpcy52YWxpZGF0ZU5vdE5hTih1NywgIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKSwgdGhpcy52YWxpZGF0ZU5vdE5hTihkNSwgIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pIiksIHRoaXMudmFsaWRhdGVSYW5nZSh5NCwgdTcsIGQ1LCB0OSwgZTExKTsKICAgICAgICBmb3IgKGxldCBjMTEgPSB5NDsgYzExIDw9IHU3OyBjMTEgKz0gZDUpIHRoaXMuc2V0UGFydCh0OSwgYzExLCBpMTFbMV0gfHwgbjEyKTsKICAgICAgfQogICAgICBleHRyYWN0TnRoKGUxMSwgdDkpIHsKICAgICAgICBsZXQgcjExID0gZTExLCBuMTI7CiAgICAgICAgaWYgKHIxMS5pbmNsdWRlcygiIyIpKSB7CiAgICAgICAgICBpZiAodDkgIT09ICJkYXlPZldlZWsiKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZCIpOwogICAgICAgICAgbjEyID0gcjExLnNwbGl0KCIjIilbMV0sIHIxMSA9IHIxMS5zcGxpdCgiIyIpWzBdOwogICAgICAgIH0gZWxzZSBpZiAocjExLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoIkwiKSkgewogICAgICAgICAgaWYgKHQ5ICE9PSAiZGF5T2ZXZWVrIikgdGhyb3cgbmV3IEVycm9yKCJDcm9uUGF0dGVybjogTCBtb2RpZmllciBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLXdlZWsgZmllbGQgKHVzZSBMIGFsb25lIGZvciBkYXktb2YtbW9udGgpIik7CiAgICAgICAgICBuMTIgPSAiTCIsIHIxMSA9IHIxMS5zbGljZSgwLCAtMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcjExLCBuMTJdOwogICAgICB9CiAgICAgIGhhbmRsZVJhbmdlKGUxMSwgdDksIHIxMSwgbjEyKSB7CiAgICAgICAgaWYgKGUxMS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIFcgaXMgbm90IGFsbG93ZWQgaW4gYSByYW5nZS4iKTsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKGUxMSwgdDkpLCBhNSA9IGkxMVswXS5zcGxpdCgiLSIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2U6ICciICsgZTExICsgIiciKTsKICAgICAgICBsZXQgbzEzID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSwgaDggPSBwYXJzZUludChhNVsxXSwgMTApICsgcjExOwogICAgICAgIHRoaXMudmFsaWRhdGVOb3ROYU4obzEzLCAiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpLCB0aGlzLnZhbGlkYXRlTm90TmFOKGg4LCAiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKSIpLCB0aGlzLnZhbGlkYXRlUmFuZ2UobzEzLCBoOCwgdm9pZCAwLCB0OSwgZTExKTsKICAgICAgICBmb3IgKGxldCBsNiA9IG8xMzsgbDYgPD0gaDg7IGw2KyspIHRoaXMuc2V0UGFydCh0OSwgbDYsIGkxMVsxXSB8fCBuMTIpOwogICAgICB9CiAgICAgIGhhbmRsZVN0ZXBwaW5nKGUxMSwgdDksIHIxMSwgbjEyKSB7CiAgICAgICAgaWYgKGUxMS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCJXIikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIFcgaXMgbm90IGFsbG93ZWQgaW4gcGFydHMgd2l0aCBzdGVwcGluZy4iKTsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKGUxMSwgdDkpLCBhNSA9IGkxMVswXS5zcGxpdCgiLyIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciICsgZTExICsgIiciKTsKICAgICAgICBpZiAodGhpcy5zbG9wcHlSYW5nZXMpIGE1WzBdID09PSAiIiAmJiAoYTVbMF0gPSAiKiIpOwogICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKGE1WzBdID09PSAiIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHBpbmcgd2l0aCBtaXNzaW5nIHByZWZpeCAoJyIgKyBlMTEgKyAiJykgaXMgbm90IGFsbG93ZWQuIFVzZSB3aWxkY2FyZCAoKi9zdGVwKSBvciByYW5nZSAobWluLW1heC9zdGVwKSBpbnN0ZWFkLiIpOwogICAgICAgICAgaWYgKGE1WzBdICE9PSAiKiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBwaW5nIHdpdGggbnVtZXJpYyBwcmVmaXggKCciICsgZTExICsgIicpIGlzIG5vdCBhbGxvd2VkLiBVc2Ugd2lsZGNhcmQgKCovc3RlcCkgb3IgcmFuZ2UgKG1pbi1tYXgvc3RlcCkgaW5zdGVhZC4iKTsKICAgICAgICB9CiAgICAgICAgbGV0IG8xMyA9IDA7CiAgICAgICAgYTVbMF0gIT09ICIqIiAmJiAobzEzID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSk7CiAgICAgICAgbGV0IGg4ID0gcGFyc2VJbnQoYTVbMV0sIDEwKTsKICAgICAgICB0aGlzLnZhbGlkYXRlTm90TmFOKGg4LCAiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKSwgdGhpcy52YWxpZGF0ZVJhbmdlKDAsIHRoaXNbdDldLmxlbmd0aCAtIDEsIGg4LCB0OSwgZTExKTsKICAgICAgICBmb3IgKGxldCBsNiA9IG8xMzsgbDYgPCB0aGlzW3Q5XS5sZW5ndGg7IGw2ICs9IGg4KSB0aGlzLnNldFBhcnQodDksIGw2LCBpMTFbMV0gfHwgbjEyKTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFEYXlzKGUxMSkgewogICAgICAgIHJldHVybiBlMTEucmVwbGFjZSgvLXN1bi9naSwgIi03IikucmVwbGFjZSgvc3VuL2dpLCAiMCIpLnJlcGxhY2UoL21vbi9naSwgIjEiKS5yZXBsYWNlKC90dWUvZ2ksICIyIikucmVwbGFjZSgvd2VkL2dpLCAiMyIpLnJlcGxhY2UoL3RodS9naSwgIjQiKS5yZXBsYWNlKC9mcmkvZ2ksICI1IikucmVwbGFjZSgvc2F0L2dpLCAiNiIpOwogICAgICB9CiAgICAgIHJlcGxhY2VBbHBoYURheXNRdWFydHooZTExKSB7CiAgICAgICAgcmV0dXJuIGUxMS5yZXBsYWNlKC9zdW4vZ2ksICIxIikucmVwbGFjZSgvbW9uL2dpLCAiMiIpLnJlcGxhY2UoL3R1ZS9naSwgIjMiKS5yZXBsYWNlKC93ZWQvZ2ksICI0IikucmVwbGFjZSgvdGh1L2dpLCAiNSIpLnJlcGxhY2UoL2ZyaS9naSwgIjYiKS5yZXBsYWNlKC9zYXQvZ2ksICI3Iik7CiAgICAgIH0KICAgICAgcmVwbGFjZUFscGhhTW9udGhzKGUxMSkgewogICAgICAgIHJldHVybiBlMTEucmVwbGFjZSgvamFuL2dpLCAiMSIpLnJlcGxhY2UoL2ZlYi9naSwgIjIiKS5yZXBsYWNlKC9tYXIvZ2ksICIzIikucmVwbGFjZSgvYXByL2dpLCAiNCIpLnJlcGxhY2UoL21heS9naSwgIjUiKS5yZXBsYWNlKC9qdW4vZ2ksICI2IikucmVwbGFjZSgvanVsL2dpLCAiNyIpLnJlcGxhY2UoL2F1Zy9naSwgIjgiKS5yZXBsYWNlKC9zZXAvZ2ksICI5IikucmVwbGFjZSgvb2N0L2dpLCAiMTAiKS5yZXBsYWNlKC9ub3YvZ2ksICIxMSIpLnJlcGxhY2UoL2RlYy9naSwgIjEyIik7CiAgICAgIH0KICAgICAgaGFuZGxlTmlja25hbWVzKGUxMSkgewogICAgICAgIGxldCB0OSA9IGUxMS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAodDkgPT09ICJAeWVhcmx5IiB8fCB0OSA9PT0gIkBhbm51YWxseSIpIHJldHVybiAiMCAwIDEgMSAqIjsKICAgICAgICBpZiAodDkgPT09ICJAbW9udGhseSIpIHJldHVybiAiMCAwIDEgKiAqIjsKICAgICAgICBpZiAodDkgPT09ICJAd2Vla2x5IikgcmV0dXJuICIwIDAgKiAqIDAiOwogICAgICAgIGlmICh0OSA9PT0gIkBkYWlseSIgfHwgdDkgPT09ICJAbWlkbmlnaHQiKSByZXR1cm4gIjAgMCAqICogKiI7CiAgICAgICAgaWYgKHQ5ID09PSAiQGhvdXJseSIpIHJldHVybiAiMCAqICogKiAqIjsKICAgICAgICBpZiAodDkgPT09ICJAcmVib290IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IEByZWJvb3QgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiBUaGlzIGlzIGFuIGV2ZW50LWJhc2VkIHRyaWdnZXIgdGhhdCByZXF1aXJlcyBzeXN0ZW0gc3RhcnR1cCBkZXRlY3Rpb24uIik7CiAgICAgICAgcmV0dXJuIGUxMTsKICAgICAgfQogICAgICBzZXROdGhXZWVrZGF5T2ZNb250aChlMTEsIHQ5KSB7CiAgICAgICAgaWYgKHR5cGVvZiB0OSAhPSAibnVtYmVyIiAmJiB0OS50b1VwcGVyQ2FzZSgpID09PSAiTCIpIHRoaXMuZGF5T2ZXZWVrW2UxMV0gPSB0aGlzLmRheU9mV2Vla1tlMTFdIHwgMzI7CiAgICAgICAgZWxzZSBpZiAodDkgPT09IDYzKSB0aGlzLmRheU9mV2Vla1tlMTFdID0gNjM7CiAgICAgICAgZWxzZSBpZiAodDkgPCA2ICYmIHQ5ID4gMCkgdGhpcy5kYXlPZldlZWtbZTExXSA9IHRoaXMuZGF5T2ZXZWVrW2UxMV0gfCBPW3Q5IC0gMV07CiAgICAgICAgZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbnRoIHdlZWtkYXkgb3V0IG9mIHJhbmdlLCBzaG91bGQgYmUgMS01IG9yIEwuIFZhbHVlOiAke3Q5fSwgVHlwZTogJHt0eXBlb2YgdDl9YCk7CiAgICAgIH0KICAgIH07CiAgICBQMiA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgZjMgPSBbWyJtb250aCIsICJ5ZWFyIiwgMF0sIFsiZGF5IiwgIm1vbnRoIiwgLTFdLCBbImhvdXIiLCAiZGF5IiwgMF0sIFsibWludXRlIiwgImhvdXIiLCAwXSwgWyJzZWNvbmQiLCAibWludXRlIiwgMF1dLCBtMiA9IGNsYXNzIHM0IHsKICAgICAgdHo7CiAgICAgIG1zOwogICAgICBzZWNvbmQ7CiAgICAgIG1pbnV0ZTsKICAgICAgaG91cjsKICAgICAgZGF5OwogICAgICBtb250aDsKICAgICAgeWVhcjsKICAgICAgY29uc3RydWN0b3IoZTExLCB0OSkgewogICAgICAgIGlmICh0aGlzLnR6ID0gdDksIGUxMSAmJiBlMTEgaW5zdGFuY2VvZiBEYXRlKSBpZiAoIWlzTmFOKGUxMSkpIHRoaXMuZnJvbURhdGUoZTExKTsKICAgICAgICBlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25EYXRlOiBJbnZhbGlkIGRhdGUgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yIik7CiAgICAgICAgZWxzZSBpZiAoZTExID09IG51bGwpIHRoaXMuZnJvbURhdGUoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpOwogICAgICAgIGVsc2UgaWYgKGUxMSAmJiB0eXBlb2YgZTExID09ICJzdHJpbmciKSB0aGlzLmZyb21TdHJpbmcoZTExKTsKICAgICAgICBlbHNlIGlmIChlMTEgaW5zdGFuY2VvZiBzNCkgdGhpcy5mcm9tQ3JvbkRhdGUoZTExKTsKICAgICAgICBlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25EYXRlOiBJbnZhbGlkIHR5cGUgKCIgKyB0eXBlb2YgZTExICsgIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yIik7CiAgICAgIH0KICAgICAgZ2V0TGFzdERheU9mTW9udGgoZTExLCB0OSkgewogICAgICAgIHJldHVybiB0OSAhPT0gMSA/IFAyW3Q5XSA6IG5ldyBEYXRlKERhdGUuVVRDKGUxMSwgdDkgKyAxLCAwKSkuZ2V0VVRDRGF0ZSgpOwogICAgICB9CiAgICAgIGdldExhc3RXZWVrZGF5KGUxMSwgdDkpIHsKICAgICAgICBsZXQgcjExID0gdGhpcy5nZXRMYXN0RGF5T2ZNb250aChlMTEsIHQ5KSwgaTExID0gbmV3IERhdGUoRGF0ZS5VVEMoZTExLCB0OSwgcjExKSkuZ2V0VVRDRGF5KCk7CiAgICAgICAgcmV0dXJuIGkxMSA9PT0gMCA/IHIxMSAtIDIgOiBpMTEgPT09IDYgPyByMTEgLSAxIDogcjExOwogICAgICB9CiAgICAgIGdldE5lYXJlc3RXZWVrZGF5KGUxMSwgdDksIHIxMSkgewogICAgICAgIGxldCBuMTIgPSB0aGlzLmdldExhc3REYXlPZk1vbnRoKGUxMSwgdDkpOwogICAgICAgIGlmIChyMTEgPiBuMTIpIHJldHVybiAtMTsKICAgICAgICBsZXQgYTUgPSBuZXcgRGF0ZShEYXRlLlVUQyhlMTEsIHQ5LCByMTEpKS5nZXRVVENEYXkoKTsKICAgICAgICByZXR1cm4gYTUgPT09IDAgPyByMTEgPT09IG4xMiA/IHIxMSAtIDIgOiByMTEgKyAxIDogYTUgPT09IDYgPyByMTEgPT09IDEgPyByMTEgKyAyIDogcjExIC0gMSA6IHIxMTsKICAgICAgfQogICAgICBpc050aFdlZWtkYXlPZk1vbnRoKGUxMSwgdDksIHIxMSwgbjEyKSB7CiAgICAgICAgbGV0IGE1ID0gbmV3IERhdGUoRGF0ZS5VVEMoZTExLCB0OSwgcjExKSkuZ2V0VVRDRGF5KCksIG8xMyA9IDA7CiAgICAgICAgZm9yIChsZXQgaDggPSAxOyBoOCA8PSByMTE7IGg4KyspIG5ldyBEYXRlKERhdGUuVVRDKGUxMSwgdDksIGg4KSkuZ2V0VVRDRGF5KCkgPT09IGE1ICYmIG8xMysrOwogICAgICAgIGlmIChuMTIgJiA2MyAmJiBPW28xMyAtIDFdICYgbjEyKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAobjEyICYgMzIpIHsKICAgICAgICAgIGxldCBoOCA9IHRoaXMuZ2V0TGFzdERheU9mTW9udGgoZTExLCB0OSk7CiAgICAgICAgICBmb3IgKGxldCBsNiA9IHIxMSArIDE7IGw2IDw9IGg4OyBsNisrKSBpZiAobmV3IERhdGUoRGF0ZS5VVEMoZTExLCB0OSwgbDYpKS5nZXRVVENEYXkoKSA9PT0gYTUpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbURhdGUoZTExKSB7CiAgICAgICAgaWYgKHRoaXMudHogIT09IHZvaWQgMCkgaWYgKHR5cGVvZiB0aGlzLnR6ID09ICJudW1iZXIiKSB0aGlzLm1zID0gZTExLmdldFVUQ01pbGxpc2Vjb25kcygpLCB0aGlzLnNlY29uZCA9IGUxMS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gZTExLmdldFVUQ01pbnV0ZXMoKSArIHRoaXMudHosIHRoaXMuaG91ciA9IGUxMS5nZXRVVENIb3VycygpLCB0aGlzLmRheSA9IGUxMS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSBlMTEuZ2V0VVRDTW9udGgoKSwgdGhpcy55ZWFyID0gZTExLmdldFVUQ0Z1bGxZZWFyKCksIHRoaXMuYXBwbHkoKTsKICAgICAgICBlbHNlIHRyeSB7CiAgICAgICAgICBsZXQgdDkgPSBnMihlMTEsIHRoaXMudHopOwogICAgICAgICAgdGhpcy5tcyA9IGUxMS5nZXRNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSB0OS5zLCB0aGlzLm1pbnV0ZSA9IHQ5LmksIHRoaXMuaG91ciA9IHQ5LmgsIHRoaXMuZGF5ID0gdDkuZCwgdGhpcy5tb250aCA9IHQ5Lm0gLSAxLCB0aGlzLnllYXIgPSB0OS55OwogICAgICAgIH0gY2F0Y2ggKHQ5KSB7CiAgICAgICAgICBsZXQgcjExID0gdDkgaW5zdGFuY2VvZiBFcnJvciA/IHQ5Lm1lc3NhZ2UgOiBTdHJpbmcodDkpOwogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvbkRhdGU6IEZhaWxlZCB0byBjb252ZXJ0IGRhdGUgdG8gdGltZXpvbmUgJyR7dGhpcy50en0nLiBUaGlzIG1heSBoYXBwZW4gd2l0aCBpbnZhbGlkIHRpbWV6b25lIG5hbWVzIG9yIGRhdGVzLiBPcmlnaW5hbCBlcnJvcjogJHtyMTF9YCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhpcy5tcyA9IGUxMS5nZXRNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSBlMTEuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IGUxMS5nZXRNaW51dGVzKCksIHRoaXMuaG91ciA9IGUxMS5nZXRIb3VycygpLCB0aGlzLmRheSA9IGUxMS5nZXREYXRlKCksIHRoaXMubW9udGggPSBlMTEuZ2V0TW9udGgoKSwgdGhpcy55ZWFyID0gZTExLmdldEZ1bGxZZWFyKCk7CiAgICAgIH0KICAgICAgZnJvbUNyb25EYXRlKGUxMSkgewogICAgICAgIHRoaXMudHogPSBlMTEudHosIHRoaXMueWVhciA9IGUxMS55ZWFyLCB0aGlzLm1vbnRoID0gZTExLm1vbnRoLCB0aGlzLmRheSA9IGUxMS5kYXksIHRoaXMuaG91ciA9IGUxMS5ob3VyLCB0aGlzLm1pbnV0ZSA9IGUxMS5taW51dGUsIHRoaXMuc2Vjb25kID0gZTExLnNlY29uZCwgdGhpcy5tcyA9IGUxMS5tczsKICAgICAgfQogICAgICBhcHBseSgpIHsKICAgICAgICBpZiAodGhpcy5tb250aCA+IDExIHx8IHRoaXMubW9udGggPCAwIHx8IHRoaXMuZGF5ID4gUDJbdGhpcy5tb250aF0gfHwgdGhpcy5kYXkgPCAxIHx8IHRoaXMuaG91ciA+IDU5IHx8IHRoaXMubWludXRlID4gNTkgfHwgdGhpcy5zZWNvbmQgPiA1OSB8fCB0aGlzLmhvdXIgPCAwIHx8IHRoaXMubWludXRlIDwgMCB8fCB0aGlzLnNlY29uZCA8IDApIHsKICAgICAgICAgIGxldCBlMTEgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5tcykpOwogICAgICAgICAgcmV0dXJuIHRoaXMubXMgPSBlMTEuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gZTExLmdldFVUQ1NlY29uZHMoKSwgdGhpcy5taW51dGUgPSBlMTEuZ2V0VVRDTWludXRlcygpLCB0aGlzLmhvdXIgPSBlMTEuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSBlMTEuZ2V0VVRDRGF0ZSgpLCB0aGlzLm1vbnRoID0gZTExLmdldFVUQ01vbnRoKCksIHRoaXMueWVhciA9IGUxMS5nZXRVVENGdWxsWWVhcigpLCB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbVN0cmluZyhlMTEpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIpIHsKICAgICAgICAgIGxldCB0OSA9IHYyKGUxMSk7CiAgICAgICAgICB0aGlzLm1zID0gdDkuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0VVRDU2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0aGlzLmFwcGx5KCk7CiAgICAgICAgfSBlbHNlIHJldHVybiB0aGlzLmZyb21EYXRlKHYyKGUxMSwgdGhpcy50eikpOwogICAgICB9CiAgICAgIGZpbmROZXh0KGUxMSwgdDksIHIxMSwgbjEyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRNYXRjaChlMTEsIHQ5LCByMTEsIG4xMiwgMSk7CiAgICAgIH0KICAgICAgX2ZpbmRNYXRjaChlMTEsIHQ5LCByMTEsIG4xMiwgaTExKSB7CiAgICAgICAgbGV0IGE1ID0gdGhpc1t0OV0sIG8xMzsKICAgICAgICByMTEubGFzdERheU9mTW9udGggJiYgKG8xMyA9IHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKSk7CiAgICAgICAgbGV0IGg4ID0gIXIxMS5zdGFyRE9XICYmIHQ5ID09ICJkYXkiID8gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF5KCkgOiB2b2lkIDAsIGw2ID0gdGhpc1t0OV0gKyBuMTIsIHk0ID0gaTExID09PSAxID8gKHU3KSA9PiB1NyA8IHIxMVt0OV0ubGVuZ3RoIDogKHU3KSA9PiB1NyA+PSAwOwogICAgICAgIGZvciAobGV0IHU3ID0gbDY7IHk0KHU3KTsgdTcgKz0gaTExKSB7CiAgICAgICAgICBsZXQgZDUgPSByMTFbdDldW3U3XTsKICAgICAgICAgIGlmICh0OSA9PT0gImRheSIgJiYgIWQ1KSB7CiAgICAgICAgICAgIGZvciAobGV0IGMxMSA9IDA7IGMxMSA8IHIxMS5uZWFyZXN0V2Vla2RheXMubGVuZ3RoOyBjMTErKykgaWYgKHIxMS5uZWFyZXN0V2Vla2RheXNbYzExXSkgewogICAgICAgICAgICAgIGxldCBNNCA9IHRoaXMuZ2V0TmVhcmVzdFdlZWtkYXkodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCBjMTEgLSBuMTIpOwogICAgICAgICAgICAgIGlmIChNNCA9PT0gLTEpIGNvbnRpbnVlOwogICAgICAgICAgICAgIGlmIChNNCA9PT0gdTcgLSBuMTIpIHsKICAgICAgICAgICAgICAgIGQ1ID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ID09PSAiZGF5IiAmJiByMTEubGFzdFdlZWtkYXkpIHsKICAgICAgICAgICAgbGV0IGMxMSA9IHRoaXMuZ2V0TGFzdFdlZWtkYXkodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgICAgICAgICAgdTcgLSBuMTIgPT09IGMxMSAmJiAoZDUgPSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OSA9PT0gImRheSIgJiYgcjExLmxhc3REYXlPZk1vbnRoICYmIHU3IC0gbjEyID09IG8xMyAmJiAoZDUgPSAxKSwgdDkgPT09ICJkYXkiICYmICFyMTEuc3RhckRPVykgewogICAgICAgICAgICBsZXQgYzExID0gcjExLmRheU9mV2Vla1soaDggKyAodTcgLSBuMTIgLSAxKSkgJSA3XTsKICAgICAgICAgICAgaWYgKGMxMSAmJiBjMTEgJiA2MykgYzExID0gdGhpcy5pc050aFdlZWtkYXlPZk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCwgdTcgLSBuMTIsIGMxMSkgPyAxIDogMDsKICAgICAgICAgICAgZWxzZSBpZiAoYzExKSB0aHJvdyBuZXcgRXJyb3IoYENyb25EYXRlOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWsgZW5jb3VudGVyZWQuICR7YzExfWApOwogICAgICAgICAgICByMTEudXNlQW5kTG9naWMgPyBkNSA9IGQ1ICYmIGMxMSA6ICFlMTEuZG9tQW5kRG93ICYmICFyMTEuc3RhckRPTSA/IGQ1ID0gZDUgfHwgYzExIDogZDUgPSBkNSAmJiBjMTE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZDUpIHJldHVybiB0aGlzW3Q5XSA9IHU3IC0gbjEyLCBhNSAhPT0gdGhpc1t0OV0gPyAyIDogMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDM7CiAgICAgIH0KICAgICAgcmVjdXJzZShlMTEsIHQ5LCByMTEpIHsKICAgICAgICBpZiAocjExID09PSAwICYmICFlMTEuc3RhclllYXIpIHsKICAgICAgICAgIGlmICh0aGlzLnllYXIgPj0gMCAmJiB0aGlzLnllYXIgPCBlMTEueWVhci5sZW5ndGggJiYgZTExLnllYXJbdGhpcy55ZWFyXSA9PT0gMCkgewogICAgICAgICAgICBsZXQgaTExID0gLTE7CiAgICAgICAgICAgIGZvciAobGV0IGE1ID0gdGhpcy55ZWFyICsgMTsgYTUgPCBlMTEueWVhci5sZW5ndGggJiYgYTUgPCAxZTQ7IGE1KyspIGlmIChlMTEueWVhclthNV0gPT09IDEpIHsKICAgICAgICAgICAgICBpMTEgPSBhNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaTExID09PSAtMSkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIHRoaXMueWVhciA9IGkxMSwgdGhpcy5tb250aCA9IDAsIHRoaXMuZGF5ID0gMSwgdGhpcy5ob3VyID0gMCwgdGhpcy5taW51dGUgPSAwLCB0aGlzLnNlY29uZCA9IDAsIHRoaXMubXMgPSAwOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMueWVhciA+PSAxZTQpIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBsZXQgbjEyID0gdGhpcy5maW5kTmV4dCh0OSwgZjNbcjExXVswXSwgZTExLCBmM1tyMTFdWzJdKTsKICAgICAgICBpZiAobjEyID4gMSkgewogICAgICAgICAgbGV0IGkxMSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgaTExIDwgZjMubGVuZ3RoOyApIHRoaXNbZjNbaTExXVswXV0gPSAtZjNbaTExXVsyXSwgaTExKys7CiAgICAgICAgICBpZiAobjEyID09PSAzKSB7CiAgICAgICAgICAgIGlmICh0aGlzW2YzW3IxMV1bMV1dKyssIHRoaXNbZjNbcjExXVswXV0gPSAtZjNbcjExXVsyXSwgdGhpcy5hcHBseSgpLCByMTEgPT09IDAgJiYgIWUxMS5zdGFyWWVhcikgewogICAgICAgICAgICAgIGZvciAoOyB0aGlzLnllYXIgPj0gMCAmJiB0aGlzLnllYXIgPCBlMTEueWVhci5sZW5ndGggJiYgZTExLnllYXJbdGhpcy55ZWFyXSA9PT0gMCAmJiB0aGlzLnllYXIgPCAxZTQ7ICkgdGhpcy55ZWFyKys7CiAgICAgICAgICAgICAgaWYgKHRoaXMueWVhciA+PSAxZTQgfHwgdGhpcy55ZWFyID49IGUxMS55ZWFyLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdXJzZShlMTEsIHQ5LCAwKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBseSgpKSByZXR1cm4gdGhpcy5yZWN1cnNlKGUxMSwgdDksIHIxMSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBmMy5sZW5ndGggPyB0aGlzIDogKGUxMS5zdGFyWWVhciA/IHRoaXMueWVhciA+PSAzZTMgOiB0aGlzLnllYXIgPj0gMWU0KSA/IG51bGwgOiB0aGlzLnJlY3Vyc2UoZTExLCB0OSwgcjExKTsKICAgICAgfQogICAgICBpbmNyZW1lbnQoZTExLCB0OSwgcjExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kICs9IHQ5LmludGVydmFsICE9PSB2b2lkIDAgJiYgdDkuaW50ZXJ2YWwgPiAxICYmIHIxMSA/IHQ5LmludGVydmFsIDogMSwgdGhpcy5tcyA9IDAsIHRoaXMuYXBwbHkoKSwgdGhpcy5yZWN1cnNlKGUxMSwgdDksIDApOwogICAgICB9CiAgICAgIGRlY3JlbWVudChlMTEsIHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kIC09IHQ5LmludGVydmFsICE9PSB2b2lkIDAgJiYgdDkuaW50ZXJ2YWwgPiAxID8gdDkuaW50ZXJ2YWwgOiAxLCB0aGlzLm1zID0gMCwgdGhpcy5hcHBseSgpLCB0aGlzLnJlY3Vyc2VCYWNrd2FyZChlMTEsIHQ5LCAwLCAwKTsKICAgICAgfQogICAgICByZWN1cnNlQmFja3dhcmQoZTExLCB0OSwgcjExLCBuMTIgPSAwKSB7CiAgICAgICAgaWYgKG4xMiA+IDFlNCkgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKHIxMSA9PT0gMCAmJiAhZTExLnN0YXJZZWFyKSB7CiAgICAgICAgICBpZiAodGhpcy55ZWFyID49IDAgJiYgdGhpcy55ZWFyIDwgZTExLnllYXIubGVuZ3RoICYmIGUxMS55ZWFyW3RoaXMueWVhcl0gPT09IDApIHsKICAgICAgICAgICAgbGV0IGE1ID0gLTE7CiAgICAgICAgICAgIGZvciAobGV0IG8xMyA9IHRoaXMueWVhciAtIDE7IG8xMyA+PSAwOyBvMTMtLSkgaWYgKGUxMS55ZWFyW28xM10gPT09IDEpIHsKICAgICAgICAgICAgICBhNSA9IG8xMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYTUgPT09IC0xKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgdGhpcy55ZWFyID0gYTUsIHRoaXMubW9udGggPSAxMSwgdGhpcy5kYXkgPSAzMSwgdGhpcy5ob3VyID0gMjMsIHRoaXMubWludXRlID0gNTksIHRoaXMuc2Vjb25kID0gNTksIHRoaXMubXMgPSAwOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMueWVhciA8IDApIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBsZXQgaTExID0gdGhpcy5maW5kUHJldmlvdXModDksIGYzW3IxMV1bMF0sIGUxMSwgZjNbcjExXVsyXSk7CiAgICAgICAgaWYgKGkxMSA+IDEpIHsKICAgICAgICAgIGxldCBhNSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgYTUgPCBmMy5sZW5ndGg7ICkgewogICAgICAgICAgICBsZXQgbzEzID0gZjNbYTVdWzBdLCBoOCA9IGYzW2E1XVsyXSwgbDYgPSB0aGlzLmdldE1heFBhdHRlcm5WYWx1ZShvMTMsIGUxMSwgaDgpOwogICAgICAgICAgICB0aGlzW28xM10gPSBsNiwgYTUrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpMTEgPT09IDMpIHsKICAgICAgICAgICAgaWYgKHRoaXNbZjNbcjExXVsxXV0tLSwgcjExID09PSAwKSB7CiAgICAgICAgICAgICAgbGV0IHk0ID0gdGhpcy5nZXRMYXN0RGF5T2ZNb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpOwogICAgICAgICAgICAgIHRoaXMuZGF5ID4geTQgJiYgKHRoaXMuZGF5ID0geTQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyMTEgPT09IDEpIGlmICh0aGlzLmRheSA8PSAwKSB0aGlzLmRheSA9IDE7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGxldCB5NCA9IHRoaXMueWVhciwgdTcgPSB0aGlzLm1vbnRoOwogICAgICAgICAgICAgIGZvciAoOyB1NyA8IDA7ICkgdTcgKz0gMTIsIHk0LS07CiAgICAgICAgICAgICAgZm9yICg7IHU3ID4gMTE7ICkgdTcgLT0gMTIsIHk0Kys7CiAgICAgICAgICAgICAgbGV0IGQ1ID0gdTcgIT09IDEgPyBQMlt1N10gOiBuZXcgRGF0ZShEYXRlLlVUQyh5NCwgdTcgKyAxLCAwKSkuZ2V0VVRDRGF0ZSgpOwogICAgICAgICAgICAgIHRoaXMuZGF5ID4gZDUgJiYgKHRoaXMuZGF5ID0gZDUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYXBwbHkoKTsKICAgICAgICAgICAgbGV0IG8xMyA9IGYzW3IxMV1bMF0sIGg4ID0gZjNbcjExXVsyXSwgbDYgPSB0aGlzLmdldE1heFBhdHRlcm5WYWx1ZShvMTMsIGUxMSwgaDgpOwogICAgICAgICAgICBpZiAobzEzID09PSAiZGF5IikgewogICAgICAgICAgICAgIGxldCB5NCA9IHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgICAgICAgICAgICB0aGlzW28xM10gPSBNYXRoLm1pbihsNiwgeTQpOwogICAgICAgICAgICB9IGVsc2UgdGhpc1tvMTNdID0gbDY7CiAgICAgICAgICAgIGlmICh0aGlzLmFwcGx5KCksIHIxMSA9PT0gMCkgewogICAgICAgICAgICAgIGxldCB5NCA9IGYzWzFdWzJdLCB1NyA9IHRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKCJkYXkiLCBlMTEsIHk0KSwgZDUgPSB0aGlzLmdldExhc3REYXlPZk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCksIGMxMSA9IE1hdGgubWluKHU3LCBkNSk7CiAgICAgICAgICAgICAgYzExICE9PSB0aGlzLmRheSAmJiAodGhpcy5kYXkgPSBjMTEsIHRoaXMuaG91ciA9IHRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKCJob3VyIiwgZTExLCBmM1syXVsyXSksIHRoaXMubWludXRlID0gdGhpcy5nZXRNYXhQYXR0ZXJuVmFsdWUoIm1pbnV0ZSIsIGUxMSwgZjNbM11bMl0pLCB0aGlzLnNlY29uZCA9IHRoaXMuZ2V0TWF4UGF0dGVyblZhbHVlKCJzZWNvbmQiLCBlMTEsIGYzWzRdWzJdKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHIxMSA9PT0gMCAmJiAhZTExLnN0YXJZZWFyKSB7CiAgICAgICAgICAgICAgZm9yICg7IHRoaXMueWVhciA+PSAwICYmIHRoaXMueWVhciA8IGUxMS55ZWFyLmxlbmd0aCAmJiBlMTEueWVhclt0aGlzLnllYXJdID09PSAwOyApIHRoaXMueWVhci0tOwogICAgICAgICAgICAgIGlmICh0aGlzLnllYXIgPCAwKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNlQmFja3dhcmQoZTExLCB0OSwgMCwgbjEyICsgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwbHkoKSkgcmV0dXJuIHRoaXMucmVjdXJzZUJhY2t3YXJkKGUxMSwgdDksIHIxMSAtIDEsIG4xMiArIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBmMy5sZW5ndGggPyB0aGlzIDogdGhpcy55ZWFyIDwgMCA/IG51bGwgOiB0aGlzLnJlY3Vyc2VCYWNrd2FyZChlMTEsIHQ5LCByMTEsIG4xMiArIDEpOwogICAgICB9CiAgICAgIGdldE1heFBhdHRlcm5WYWx1ZShlMTEsIHQ5LCByMTEpIHsKICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiB0OS5sYXN0RGF5T2ZNb250aCkgcmV0dXJuIHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiAhdDkuc3RhckRPVykgcmV0dXJuIHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgICAgICBmb3IgKGxldCBuMTIgPSB0OVtlMTFdLmxlbmd0aCAtIDE7IG4xMiA+PSAwOyBuMTItLSkgaWYgKHQ5W2UxMV1bbjEyXSkgcmV0dXJuIG4xMiAtIHIxMTsKICAgICAgICByZXR1cm4gdDlbZTExXS5sZW5ndGggLSAxIC0gcjExOwogICAgICB9CiAgICAgIGZpbmRQcmV2aW91cyhlMTEsIHQ5LCByMTEsIG4xMikgewogICAgICAgIHJldHVybiB0aGlzLl9maW5kTWF0Y2goZTExLCB0OSwgcjExLCBuMTIsIC0xKTsKICAgICAgfQogICAgICBnZXREYXRlKGUxMSkgewogICAgICAgIHJldHVybiBlMTEgfHwgdGhpcy50eiA9PT0gdm9pZCAwID8gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpIDogdHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIgPyBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlIC0gdGhpcy50eiwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKSA6IGsyKGIzKHRoaXMueWVhciwgdGhpcy5tb250aCArIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy50eiksIGZhbHNlKTsKICAgICAgfQogICAgICBnZXRUaW1lKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldERhdGUoZmFsc2UpLmdldFRpbWUoKTsKICAgICAgfQogICAgICBtYXRjaChlMTEsIHQ5KSB7CiAgICAgICAgaWYgKCFlMTEuc3RhclllYXIgJiYgKHRoaXMueWVhciA8IDAgfHwgdGhpcy55ZWFyID49IGUxMS55ZWFyLmxlbmd0aCB8fCBlMTEueWVhclt0aGlzLnllYXJdID09PSAwKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGZvciAobGV0IHIxMSA9IDA7IHIxMSA8IGYzLmxlbmd0aDsgcjExKyspIHsKICAgICAgICAgIGxldCBuMTIgPSBmM1tyMTFdWzBdLCBpMTEgPSBmM1tyMTFdWzJdLCBhNSA9IHRoaXNbbjEyXTsKICAgICAgICAgIGlmIChhNSArIGkxMSA8IDAgfHwgYTUgKyBpMTEgPj0gZTExW24xMl0ubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBsZXQgbzEzID0gZTExW24xMl1bYTUgKyBpMTFdOwogICAgICAgICAgaWYgKG4xMiA9PT0gImRheSIpIHsKICAgICAgICAgICAgaWYgKCFvMTMpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBoOCA9IDA7IGg4IDwgZTExLm5lYXJlc3RXZWVrZGF5cy5sZW5ndGg7IGg4KyspIGlmIChlMTEubmVhcmVzdFdlZWtkYXlzW2g4XSkgewogICAgICAgICAgICAgICAgbGV0IGw2ID0gdGhpcy5nZXROZWFyZXN0V2Vla2RheSh0aGlzLnllYXIsIHRoaXMubW9udGgsIGg4IC0gaTExKTsKICAgICAgICAgICAgICAgIGlmIChsNiAhPT0gLTEgJiYgbDYgPT09IGE1KSB7CiAgICAgICAgICAgICAgICAgIG8xMyA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZTExLmxhc3RXZWVrZGF5KSB7CiAgICAgICAgICAgICAgbGV0IGg4ID0gdGhpcy5nZXRMYXN0V2Vla2RheSh0aGlzLnllYXIsIHRoaXMubW9udGgpOwogICAgICAgICAgICAgIGE1ID09PSBoOCAmJiAobzEzID0gMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGUxMS5sYXN0RGF5T2ZNb250aCkgewogICAgICAgICAgICAgIGxldCBoOCA9IHRoaXMuZ2V0TGFzdERheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgICAgICAgICAgICBhNSA9PT0gaDggJiYgKG8xMyA9IDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZTExLnN0YXJET1cpIHsKICAgICAgICAgICAgICBsZXQgaDggPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIDEsIDAsIDAsIDAsIDApKS5nZXRVVENEYXkoKSwgbDYgPSBlMTEuZGF5T2ZXZWVrWyhoOCArIChhNSAtIDEpKSAlIDddOwogICAgICAgICAgICAgIGw2ICYmIGw2ICYgNjMgJiYgKGw2ID0gdGhpcy5pc050aFdlZWtkYXlPZk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCwgYTUsIGw2KSA/IDEgOiAwKSwgZTExLnVzZUFuZExvZ2ljID8gbzEzID0gbzEzICYmIGw2IDogIXQ5LmRvbUFuZERvdyAmJiAhZTExLnN0YXJET00gPyBvMTMgPSBvMTMgfHwgbDYgOiBvMTMgPSBvMTMgJiYgbDY7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghbzEzKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogICAgVyA9IDMwICogMWUzLCB3MiA9IFtdLCBFMiA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgb3B0aW9uczsKICAgICAgX3N0YXRlczsKICAgICAgZm47CiAgICAgIGdldFR6KCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldDsKICAgICAgfQogICAgICBhcHBseURheU9mZnNldChlMTEpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRheU9mZnNldCAhPT0gdm9pZCAwICYmIHRoaXMub3B0aW9ucy5kYXlPZmZzZXQgIT09IDApIHsKICAgICAgICAgIGxldCB0OSA9IHRoaXMub3B0aW9ucy5kYXlPZmZzZXQgKiAyNCAqIDYwICogNjAgKiAxZTM7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZTExLmdldFRpbWUoKSArIHQ5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGUxMTsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcihlMTEsIHQ5LCByMTEpIHsKICAgICAgICBsZXQgbjEyLCBpMTE7CiAgICAgICAgaWYgKHAzKHQ5KSkgaTExID0gdDk7CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHQ5ID09ICJvYmplY3QiKSBuMTIgPSB0OTsKICAgICAgICBlbHNlIGlmICh0OSAhPT0gdm9pZCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7CiAgICAgICAgaWYgKHAzKHIxMSkpIGkxMSA9IHIxMTsKICAgICAgICBlbHNlIGlmICh0eXBlb2YgcjExID09ICJvYmplY3QiKSBuMTIgPSByMTE7CiAgICAgICAgZWxzZSBpZiAocjExICE9PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIGZ1bmNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTsKICAgICAgICBpZiAodGhpcy5uYW1lID0gbjEyPy5uYW1lLCB0aGlzLm9wdGlvbnMgPSBSMihuMTIpLCB0aGlzLl9zdGF0ZXMgPSB7IGtpbGw6IGZhbHNlLCBibG9ja2luZzogZmFsc2UsIHByZXZpb3VzUnVuOiB2b2lkIDAsIGN1cnJlbnRSdW46IHZvaWQgMCwgb25jZTogdm9pZCAwLCBjdXJyZW50VGltZW91dDogdm9pZCAwLCBtYXhSdW5zOiBuMTIgPyBuMTIubWF4UnVucyA6IHZvaWQgMCwgcGF1c2VkOiBuMTIgPyBuMTIucGF1c2VkIDogZmFsc2UsIHBhdHRlcm46IG5ldyBDMigiKiAqICogKiAqIiwgdm9pZCAwLCB7IG1vZGU6ICJhdXRvIiB9KSB9LCBlMTEgJiYgKGUxMSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGUxMSA9PSAic3RyaW5nIiAmJiBlMTEuaW5kZXhPZigiOiIpID4gMCkgPyB0aGlzLl9zdGF0ZXMub25jZSA9IG5ldyBtMihlMTEsIHRoaXMuZ2V0VHooKSkgOiB0aGlzLl9zdGF0ZXMucGF0dGVybiA9IG5ldyBDMihlMTEsIHRoaXMub3B0aW9ucy50aW1lem9uZSwgeyBtb2RlOiB0aGlzLm9wdGlvbnMubW9kZSwgYWx0ZXJuYXRpdmVXZWVrZGF5czogdGhpcy5vcHRpb25zLmFsdGVybmF0aXZlV2Vla2RheXMsIHNsb3BweVJhbmdlczogdGhpcy5vcHRpb25zLnNsb3BweVJhbmdlcyB9KSwgdGhpcy5uYW1lKSB7CiAgICAgICAgICBpZiAodzIuZmluZCgobzEzKSA9PiBvMTMubmFtZSA9PT0gdGhpcy5uYW1lKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJyIgKyB0aGlzLm5hbWUgKyAiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTsKICAgICAgICAgIHcyLnB1c2godGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgIT09IHZvaWQgMCAmJiBfMihpMTEpICYmICh0aGlzLmZuID0gaTExLCB0aGlzLnNjaGVkdWxlKCkpLCB0aGlzOwogICAgICB9CiAgICAgIG5leHRSdW4oZTExKSB7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5fbmV4dChlMTEpOwogICAgICAgIHJldHVybiB0OSA/IHRoaXMuYXBwbHlEYXlPZmZzZXQodDkuZ2V0RGF0ZShmYWxzZSkpIDogbnVsbDsKICAgICAgfQogICAgICBuZXh0UnVucyhlMTEsIHQ5KSB7CiAgICAgICAgdGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiBlMTEgPiB0aGlzLl9zdGF0ZXMubWF4UnVucyAmJiAoZTExID0gdGhpcy5fc3RhdGVzLm1heFJ1bnMpOwogICAgICAgIGxldCByMTEgPSB0OSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biB8fCB2b2lkIDA7CiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1lcmF0ZVJ1bnMoZTExLCByMTEsICJuZXh0Iik7CiAgICAgIH0KICAgICAgcHJldmlvdXNSdW5zKGUxMSwgdDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZW51bWVyYXRlUnVucyhlMTEsIHQ5IHx8IHZvaWQgMCwgInByZXZpb3VzIik7CiAgICAgIH0KICAgICAgX2VudW1lcmF0ZVJ1bnMoZTExLCB0OSwgcjExKSB7CiAgICAgICAgbGV0IG4xMiA9IFtdLCBpMTEgPSB0OSA/IG5ldyBtMih0OSwgdGhpcy5nZXRUeigpKSA6IG51bGwsIGE1ID0gcjExID09PSAibmV4dCIgPyB0aGlzLl9uZXh0IDogdGhpcy5fcHJldmlvdXM7CiAgICAgICAgZm9yICg7IGUxMS0tOyApIHsKICAgICAgICAgIGxldCBvMTMgPSBhNS5jYWxsKHRoaXMsIGkxMSk7CiAgICAgICAgICBpZiAoIW8xMykgYnJlYWs7CiAgICAgICAgICBsZXQgaDggPSBvMTMuZ2V0RGF0ZShmYWxzZSk7CiAgICAgICAgICBuMTIucHVzaCh0aGlzLmFwcGx5RGF5T2Zmc2V0KGg4KSksIGkxMSA9IG8xMzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG4xMjsKICAgICAgfQogICAgICBtYXRjaChlMTEpIHsKICAgICAgICBpZiAodGhpcy5fc3RhdGVzLm9uY2UpIHsKICAgICAgICAgIGxldCByMTEgPSBuZXcgbTIoZTExLCB0aGlzLmdldFR6KCkpOwogICAgICAgICAgcjExLm1zID0gMDsKICAgICAgICAgIGxldCBuMTIgPSBuZXcgbTIodGhpcy5fc3RhdGVzLm9uY2UsIHRoaXMuZ2V0VHooKSk7CiAgICAgICAgICByZXR1cm4gbjEyLm1zID0gMCwgcjExLmdldFRpbWUoKSA9PT0gbjEyLmdldFRpbWUoKTsKICAgICAgICB9CiAgICAgICAgbGV0IHQ5ID0gbmV3IG0yKGUxMSwgdGhpcy5nZXRUeigpKTsKICAgICAgICByZXR1cm4gdDkubXMgPSAwLCB0OS5tYXRjaCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTsKICAgICAgfQogICAgICBnZXRQYXR0ZXJuKCkgewogICAgICAgIGlmICghdGhpcy5fc3RhdGVzLm9uY2UpIHJldHVybiB0aGlzLl9zdGF0ZXMucGF0dGVybiA/IHRoaXMuX3N0YXRlcy5wYXR0ZXJuLnBhdHRlcm4gOiB2b2lkIDA7CiAgICAgIH0KICAgICAgZ2V0T25jZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm9uY2UgPyB0aGlzLl9zdGF0ZXMub25jZS5nZXREYXRlKCkgOiBudWxsOwogICAgICB9CiAgICAgIGlzUnVubmluZygpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSwgdDkgPSAhdGhpcy5fc3RhdGVzLnBhdXNlZCwgcjExID0gdGhpcy5mbiAhPT0gdm9pZCAwLCBuMTIgPSAhdGhpcy5fc3RhdGVzLmtpbGw7CiAgICAgICAgcmV0dXJuIHQ5ICYmIHIxMSAmJiBuMTIgJiYgZTExICE9PSBudWxsOwogICAgICB9CiAgICAgIGlzU3RvcHBlZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmtpbGw7CiAgICAgIH0KICAgICAgaXNCdXN5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuYmxvY2tpbmc7CiAgICAgIH0KICAgICAgY3VycmVudFJ1bigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPyB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bi5nZXREYXRlKCkgOiBudWxsOwogICAgICB9CiAgICAgIHByZXZpb3VzUnVuKCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4gPyB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4uZ2V0RGF0ZSgpIDogbnVsbDsKICAgICAgfQogICAgICBtc1RvTmV4dChlMTEpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLl9uZXh0KGUxMSk7CiAgICAgICAgcmV0dXJuIHQ5ID8gZTExIGluc3RhbmNlb2YgbTIgfHwgZTExIGluc3RhbmNlb2YgRGF0ZSA/IHQ5LmdldFRpbWUoKSAtIGUxMS5nZXRUaW1lKCkgOiB0OS5nZXRUaW1lKCkgLSBuZXcgbTIoZTExKS5nZXRUaW1lKCkgOiBudWxsOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5fc3RhdGVzLmtpbGwgPSB0cnVlLCB0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCk7CiAgICAgICAgbGV0IGUxMSA9IHcyLmluZGV4T2YodGhpcyk7CiAgICAgICAgZTExID49IDAgJiYgdzIuc3BsaWNlKGUxMSwgMSk7CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQgPSB0cnVlLCAhdGhpcy5fc3RhdGVzLmtpbGw7CiAgICAgIH0KICAgICAgcmVzdW1lKCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMucGF1c2VkID0gZmFsc2UsICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgfQogICAgICBzY2hlZHVsZShlMTEpIHsKICAgICAgICBpZiAoZTExICYmIHRoaXMuZm4pIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7CiAgICAgICAgZTExICYmICh0aGlzLmZuID0gZTExKTsKICAgICAgICBsZXQgdDkgPSB0aGlzLm1zVG9OZXh0KCksIHIxMSA9IHRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7CiAgICAgICAgcmV0dXJuIHQ5ID09IG51bGwgfHwgaXNOYU4odDkpIHx8IHIxMSA9PT0gbnVsbCA/IHRoaXMgOiAodDkgPiBXICYmICh0OSA9IFcpLCB0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2NoZWNrVHJpZ2dlcihyMTEpLCB0OSksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiB0aGlzLm9wdGlvbnMudW5yZWYgJiYgeDIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSwgdGhpcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3RyaWdnZXIoZTExKSB7CiAgICAgICAgdGhpcy5fc3RhdGVzLmJsb2NraW5nID0gdHJ1ZSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPSBuZXcgbTIodm9pZCAwLCB0aGlzLmdldFR6KCkpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNhdGNoKSB0cnkgewogICAgICAgICAgICB0aGlzLmZuICE9PSB2b2lkIDAgJiYgYXdhaXQgdGhpcy5mbih0aGlzLCB0aGlzLm9wdGlvbnMuY29udGV4dCk7CiAgICAgICAgICB9IGNhdGNoICh0OSkgewogICAgICAgICAgICBpZiAocDModGhpcy5vcHRpb25zLmNhdGNoKSkgdHJ5IHsKICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2F0Y2godDksIHRoaXMpOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB0aGlzLmZuICE9PSB2b2lkIDAgJiYgYXdhaXQgdGhpcy5mbih0aGlzLCB0aGlzLm9wdGlvbnMuY29udGV4dCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1biA9IG5ldyBtMihlMTEsIHRoaXMuZ2V0VHooKSksIHRoaXMuX3N0YXRlcy5ibG9ja2luZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXIoKTsKICAgICAgfQogICAgICBydW5zTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnM7CiAgICAgIH0KICAgICAgX2NoZWNrVHJpZ2dlcihlMTEpIHsKICAgICAgICBsZXQgdDkgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgcjExID0gIXRoaXMuX3N0YXRlcy5wYXVzZWQgJiYgdDkuZ2V0VGltZSgpID49IGUxMS5nZXRUaW1lKCksIG4xMiA9IHRoaXMuX3N0YXRlcy5ibG9ja2luZyAmJiB0aGlzLm9wdGlvbnMucHJvdGVjdDsKICAgICAgICByMTEgJiYgIW4xMiA/ICh0aGlzLl9zdGF0ZXMubWF4UnVucyAhPT0gdm9pZCAwICYmIHRoaXMuX3N0YXRlcy5tYXhSdW5zLS0sIHRoaXMuX3RyaWdnZXIoKSkgOiByMTEgJiYgbjEyICYmIHAzKHRoaXMub3B0aW9ucy5wcm90ZWN0KSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLCAwKSwgdGhpcy5zY2hlZHVsZSgpOwogICAgICB9CiAgICAgIF9uZXh0KGUxMSkgewogICAgICAgIGxldCB0OSA9ICEhKGUxMSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biksIHIxMSA9IGZhbHNlOwogICAgICAgICFlMTEgJiYgdGhpcy5vcHRpb25zLnN0YXJ0QXQgJiYgdGhpcy5vcHRpb25zLmludGVydmFsICYmIChbZTExLCB0OV0gPSB0aGlzLl9jYWxjdWxhdGVQcmV2aW91c1J1bihlMTEsIHQ5KSwgcjExID0gIWUxMSksIGUxMSA9IG5ldyBtMihlMTEsIHRoaXMuZ2V0VHooKSksIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIGUxMSAmJiBlMTEuZ2V0VGltZSgpIDwgdGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpICYmIChlMTEgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdCk7CiAgICAgICAgbGV0IG4xMiA9IHRoaXMuX3N0YXRlcy5vbmNlIHx8IG5ldyBtMihlMTEsIHRoaXMuZ2V0VHooKSk7CiAgICAgICAgcmV0dXJuICFyMTEgJiYgbjEyICE9PSB0aGlzLl9zdGF0ZXMub25jZSAmJiAobjEyID0gbjEyLmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zLCB0OSkpLCB0aGlzLl9zdGF0ZXMub25jZSAmJiB0aGlzLl9zdGF0ZXMub25jZS5nZXRUaW1lKCkgPD0gZTExLmdldFRpbWUoKSB8fCBuMTIgPT09IG51bGwgfHwgdGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiB0aGlzLl9zdGF0ZXMubWF4UnVucyA8PSAwIHx8IHRoaXMuX3N0YXRlcy5raWxsIHx8IHRoaXMub3B0aW9ucy5zdG9wQXQgJiYgbjEyLmdldFRpbWUoKSA+PSB0aGlzLm9wdGlvbnMuc3RvcEF0LmdldFRpbWUoKSA/IG51bGwgOiBuMTI7CiAgICAgIH0KICAgICAgX3ByZXZpb3VzKGUxMSkgewogICAgICAgIGxldCB0OSA9IG5ldyBtMihlMTEsIHRoaXMuZ2V0VHooKSk7CiAgICAgICAgdGhpcy5vcHRpb25zLnN0b3BBdCAmJiB0OS5nZXRUaW1lKCkgPiB0aGlzLm9wdGlvbnMuc3RvcEF0LmdldFRpbWUoKSAmJiAodDkgPSB0aGlzLm9wdGlvbnMuc3RvcEF0KTsKICAgICAgICBsZXQgcjExID0gbmV3IG0yKHQ5LCB0aGlzLmdldFR6KCkpOwogICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMub25jZSA/IHRoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKSA8IHQ5LmdldFRpbWUoKSA/IHRoaXMuX3N0YXRlcy5vbmNlIDogbnVsbCA6IChyMTEgPSByMTEuZGVjcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpLCByMTEgPT09IG51bGwgfHwgdGhpcy5vcHRpb25zLnN0YXJ0QXQgJiYgcjExLmdldFRpbWUoKSA8IHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSA/IG51bGwgOiByMTEpOwogICAgICB9CiAgICAgIF9jYWxjdWxhdGVQcmV2aW91c1J1bihlMTEsIHQ5KSB7CiAgICAgICAgbGV0IHIxMSA9IG5ldyBtMih2b2lkIDAsIHRoaXMuZ2V0VHooKSksIG4xMiA9IGUxMTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpIDw9IHIxMS5nZXRUaW1lKCkpIHsKICAgICAgICAgIG4xMiA9IHRoaXMub3B0aW9ucy5zdGFydEF0OwogICAgICAgICAgbGV0IGkxMSA9IG4xMi5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICBmb3IgKDsgaTExIDw9IHIxMS5nZXRUaW1lKCk7ICkgbjEyID0gbmV3IG0yKG4xMiwgdGhpcy5nZXRUeigpKS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sIHRoaXMub3B0aW9ucywgdHJ1ZSksIGkxMSA9IG4xMi5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICB0OSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuMTIgPT09IG51bGwgJiYgKG4xMiA9IHZvaWQgMCksIFtuMTIsIHQ5XTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMKdmFyIGRheXNJbldlZWssIGRheXNJblllYXIsIG1heFRpbWUsIG1pblRpbWUsIG1pbGxpc2Vjb25kc0luV2VlaywgbWlsbGlzZWNvbmRzSW5EYXksIG1pbGxpc2Vjb25kc0luTWludXRlLCBtaWxsaXNlY29uZHNJbkhvdXIsIG1pbGxpc2Vjb25kc0luU2Vjb25kLCBtaW51dGVzSW5ZZWFyLCBtaW51dGVzSW5Nb250aCwgbWludXRlc0luRGF5LCBtaW51dGVzSW5Ib3VyLCBtb250aHNJblF1YXJ0ZXIsIG1vbnRoc0luWWVhciwgcXVhcnRlcnNJblllYXIsIHNlY29uZHNJbkhvdXIsIHNlY29uZHNJbk1pbnV0ZSwgc2Vjb25kc0luRGF5LCBzZWNvbmRzSW5XZWVrLCBzZWNvbmRzSW5ZZWFyLCBzZWNvbmRzSW5Nb250aCwgc2Vjb25kc0luUXVhcnRlciwgY29uc3RydWN0RnJvbVN5bWJvbDsKdmFyIGluaXRfY29uc3RhbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0YW50cy5qcyIoKSB7CiAgICBkYXlzSW5XZWVrID0gNzsKICAgIGRheXNJblllYXIgPSAzNjUuMjQyNTsKICAgIG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxZTM7CiAgICBtaW5UaW1lID0gLW1heFRpbWU7CiAgICBtaWxsaXNlY29uZHNJbldlZWsgPSA2MDQ4ZTU7CiAgICBtaWxsaXNlY29uZHNJbkRheSA9IDg2NGU1OwogICAgbWlsbGlzZWNvbmRzSW5NaW51dGUgPSA2ZTQ7CiAgICBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNmU1OwogICAgbWlsbGlzZWNvbmRzSW5TZWNvbmQgPSAxZTM7CiAgICBtaW51dGVzSW5ZZWFyID0gNTI1NjAwOwogICAgbWludXRlc0luTW9udGggPSA0MzIwMDsKICAgIG1pbnV0ZXNJbkRheSA9IDE0NDA7CiAgICBtaW51dGVzSW5Ib3VyID0gNjA7CiAgICBtb250aHNJblF1YXJ0ZXIgPSAzOwogICAgbW9udGhzSW5ZZWFyID0gMTI7CiAgICBxdWFydGVyc0luWWVhciA9IDQ7CiAgICBzZWNvbmRzSW5Ib3VyID0gMzYwMDsKICAgIHNlY29uZHNJbk1pbnV0ZSA9IDYwOwogICAgc2Vjb25kc0luRGF5ID0gc2Vjb25kc0luSG91ciAqIDI0OwogICAgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7CiAgICBzZWNvbmRzSW5ZZWFyID0gc2Vjb25kc0luRGF5ICogZGF5c0luWWVhcjsKICAgIHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyOwogICAgc2Vjb25kc0luUXVhcnRlciA9IHNlY29uZHNJbk1vbnRoICogMzsKICAgIGNvbnN0cnVjdEZyb21TeW1ib2wgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiY29uc3RydWN0RGF0ZUZyb20iKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3RGcm9tLmpzCmZ1bmN0aW9uIGNvbnN0cnVjdEZyb20oZGF0ZSwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiBkYXRlID09PSAiZnVuY3Rpb24iKSByZXR1cm4gZGF0ZSh2YWx1ZTIpOwogIGlmIChkYXRlICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IiAmJiBjb25zdHJ1Y3RGcm9tU3ltYm9sIGluIGRhdGUpCiAgICByZXR1cm4gZGF0ZVtjb25zdHJ1Y3RGcm9tU3ltYm9sXSh2YWx1ZTIpOwogIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBkYXRlLmNvbnN0cnVjdG9yKHZhbHVlMik7CiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlMik7Cn0KdmFyIGNvbnN0cnVjdEZyb21fZGVmYXVsdDsKdmFyIGluaXRfY29uc3RydWN0RnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3RGcm9tLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBjb25zdHJ1Y3RGcm9tX2RlZmF1bHQgPSBjb25zdHJ1Y3RGcm9tOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3RvRGF0ZS5qcwpmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQyKSB7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dDIgfHwgYXJndW1lbnQsIGFyZ3VtZW50KTsKfQp2YXIgdG9EYXRlX2RlZmF1bHQ7CnZhciBpbml0X3RvRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICB0b0RhdGVfZGVmYXVsdCA9IHRvRGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzCmZ1bmN0aW9uIGFkZERheXMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTihhbW91bnQpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pOwogIGlmICghYW1vdW50KSByZXR1cm4gX2RhdGU7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBhbW91bnQpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgYWRkRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9hZGREYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZERheXMuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkRGF5c19kZWZhdWx0ID0gYWRkRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNb250aHMuanMKZnVuY3Rpb24gYWRkTW9udGhzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBpZiAoIWFtb3VudCkgewogICAgcmV0dXJuIF9kYXRlOwogIH0KICBjb25zdCBkYXlPZk1vbnRoID0gX2RhdGUuZ2V0RGF0ZSgpOwogIGNvbnN0IGVuZE9mRGVzaXJlZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBfZGF0ZS5nZXRUaW1lKCkpOwogIGVuZE9mRGVzaXJlZE1vbnRoLnNldE1vbnRoKF9kYXRlLmdldE1vbnRoKCkgKyBhbW91bnQgKyAxLCAwKTsKICBjb25zdCBkYXlzSW5Nb250aCA9IGVuZE9mRGVzaXJlZE1vbnRoLmdldERhdGUoKTsKICBpZiAoZGF5T2ZNb250aCA+PSBkYXlzSW5Nb250aCkgewogICAgcmV0dXJuIGVuZE9mRGVzaXJlZE1vbnRoOwogIH0gZWxzZSB7CiAgICBfZGF0ZS5zZXRGdWxsWWVhcigKICAgICAgZW5kT2ZEZXNpcmVkTW9udGguZ2V0RnVsbFllYXIoKSwKICAgICAgZW5kT2ZEZXNpcmVkTW9udGguZ2V0TW9udGgoKSwKICAgICAgZGF5T2ZNb250aAogICAgKTsKICAgIHJldHVybiBfZGF0ZTsKICB9Cn0KdmFyIGFkZE1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZE1vbnRoc19kZWZhdWx0ID0gYWRkTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZC5qcwpmdW5jdGlvbiBhZGQoZGF0ZSwgZHVyYXRpb24sIG9wdGlvbnMpIHsKICBjb25zdCB7CiAgICB5ZWFycyA9IDAsCiAgICBtb250aHM6IG1vbnRoczIgPSAwLAogICAgd2Vla3MgPSAwLAogICAgZGF5czogZGF5czIgPSAwLAogICAgaG91cnMgPSAwLAogICAgbWludXRlcyA9IDAsCiAgICBzZWNvbmRzID0gMAogIH0gPSBkdXJhdGlvbjsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF0ZVdpdGhNb250aHMgPSBtb250aHMyIHx8IHllYXJzID8gYWRkTW9udGhzKF9kYXRlLCBtb250aHMyICsgeWVhcnMgKiAxMikgOiBfZGF0ZTsKICBjb25zdCBkYXRlV2l0aERheXMgPSBkYXlzMiB8fCB3ZWVrcyA/IGFkZERheXMoZGF0ZVdpdGhNb250aHMsIGRheXMyICsgd2Vla3MgKiA3KSA6IGRhdGVXaXRoTW9udGhzOwogIGNvbnN0IG1pbnV0ZXNUb0FkZCA9IG1pbnV0ZXMgKyBob3VycyAqIDYwOwogIGNvbnN0IHNlY29uZHNUb0FkZCA9IHNlY29uZHMgKyBtaW51dGVzVG9BZGQgKiA2MDsKICBjb25zdCBtc1RvQWRkID0gc2Vjb25kc1RvQWRkICogMWUzOwogIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsICtkYXRlV2l0aERheXMgKyBtc1RvQWRkKTsKfQp2YXIgYWRkX2RlZmF1bHQ7CnZhciBpbml0X2FkZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGQuanMiKCkgewogICAgaW5pdF9hZGREYXlzKCk7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkX2RlZmF1bHQgPSBhZGQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYXR1cmRheS5qcwpmdW5jdGlvbiBpc1NhdHVyZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gNjsKfQp2YXIgaXNTYXR1cmRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhdHVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2F0dXJkYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzU2F0dXJkYXlfZGVmYXVsdCA9IGlzU2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTdW5kYXkuanMKZnVuY3Rpb24gaXNTdW5kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAwOwp9CnZhciBpc1N1bmRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1N1bmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1N1bmRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNTdW5kYXlfZGVmYXVsdCA9IGlzU3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2Vla2VuZC5qcwpmdW5jdGlvbiBpc1dlZWtlbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRheSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCk7CiAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7Cn0KdmFyIGlzV2Vla2VuZF9kZWZhdWx0Owp2YXIgaW5pdF9pc1dlZWtlbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWVrZW5kLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1dlZWtlbmRfZGVmYXVsdCA9IGlzV2Vla2VuZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRCdXNpbmVzc0RheXMuanMKZnVuY3Rpb24gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBzdGFydGVkT25XZWVrZW5kID0gaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIE5hTik7CiAgY29uc3QgaG91cnMgPSBfZGF0ZS5nZXRIb3VycygpOwogIGNvbnN0IHNpZ24gPSBhbW91bnQgPCAwID8gLTEgOiAxOwogIGNvbnN0IGZ1bGxXZWVrcyA9IE1hdGgudHJ1bmMoYW1vdW50IC8gNSk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBmdWxsV2Vla3MgKiA3KTsKICBsZXQgcmVzdERheXMgPSBNYXRoLmFicyhhbW91bnQgJSA1KTsKICB3aGlsZSAocmVzdERheXMgPiAwKSB7CiAgICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIHNpZ24pOwogICAgaWYgKCFpc1dlZWtlbmQoX2RhdGUsIG9wdGlvbnMpKSByZXN0RGF5cyAtPSAxOwogIH0KICBpZiAoc3RhcnRlZE9uV2Vla2VuZCAmJiBpc1dlZWtlbmQoX2RhdGUsIG9wdGlvbnMpICYmIGFtb3VudCAhPT0gMCkgewogICAgaWYgKGlzU2F0dXJkYXkoX2RhdGUsIG9wdGlvbnMpKQogICAgICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIChzaWduIDwgMCA/IDIgOiAtMSkpOwogICAgaWYgKGlzU3VuZGF5KF9kYXRlLCBvcHRpb25zKSkKICAgICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyAoc2lnbiA8IDAgPyAxIDogLTIpKTsKICB9CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgYWRkQnVzaW5lc3NEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2FkZEJ1c2luZXNzRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRCdXNpbmVzc0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBhZGRCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArdG9EYXRlKGRhdGUpICsgYW1vdW50KTsKfQp2YXIgYWRkTWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2FkZE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBhZGRNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMKZnVuY3Rpb24gYWRkSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQgKiBtaWxsaXNlY29uZHNJbkhvdXIsIG9wdGlvbnMpOwp9CnZhciBhZGRIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGFkZEhvdXJzX2RlZmF1bHQgPSBhZGRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRPcHRpb25zLmpzCmZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkgewogIHJldHVybiBkZWZhdWx0T3B0aW9uczsKfQpmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7CiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zOwp9CnZhciBkZWZhdWx0T3B0aW9uczsKdmFyIGluaXRfZGVmYXVsdE9wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0T3B0aW9ucy5qcyIoKSB7CiAgICBkZWZhdWx0T3B0aW9ucyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTsKICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYpOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZldlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWsuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZXZWVrX2RlZmF1bHQgPSBzdGFydE9mV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vlay5qcwpmdW5jdGlvbiBzdGFydE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pOwp9CnZhciBzdGFydE9mSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBzdGFydE9mSVNPV2Vla19kZWZhdWx0ID0gc3RhcnRPZklTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIuanMKZnVuY3Rpb24gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpOwogIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkgewogICAgcmV0dXJuIHllYXIgKyAxOwogIH0gZWxzZSBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHsKICAgIHJldHVybiB5ZWFyOwogIH0gZWxzZSB7CiAgICByZXR1cm4geWVhciAtIDE7CiAgfQp9CnZhciBnZXRJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9nZXRJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09XZWVrWWVhcl9kZWZhdWx0ID0gZ2V0SVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUpOwogIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZSgKICAgIERhdGUuVVRDKAogICAgICBfZGF0ZS5nZXRGdWxsWWVhcigpLAogICAgICBfZGF0ZS5nZXRNb250aCgpLAogICAgICBfZGF0ZS5nZXREYXRlKCksCiAgICAgIF9kYXRlLmdldEhvdXJzKCksCiAgICAgIF9kYXRlLmdldE1pbnV0ZXMoKSwKICAgICAgX2RhdGUuZ2V0U2Vjb25kcygpLAogICAgICBfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKQogICAgKQogICk7CiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpKTsKICByZXR1cm4gK2RhdGUgLSArdXRjRGF0ZTsKfQp2YXIgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplRGF0ZXMuanMKZnVuY3Rpb24gbm9ybWFsaXplRGF0ZXMoY29udGV4dDIsIC4uLmRhdGVzKSB7CiAgY29uc3Qgbm9ybWFsaXplNCA9IGNvbnN0cnVjdEZyb20uYmluZCgKICAgIG51bGwsCiAgICBjb250ZXh0MiB8fCBkYXRlcy5maW5kKChkYXRlKSA9PiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIpCiAgKTsKICByZXR1cm4gZGF0ZXMubWFwKG5vcm1hbGl6ZTQpOwp9CnZhciBpbml0X25vcm1hbGl6ZURhdGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplRGF0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRheS5qcwpmdW5jdGlvbiBzdGFydE9mRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRheV9kZWZhdWx0ID0gc3RhcnRPZkRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3QgbGF0ZXJTdGFydE9mRGF5ID0gc3RhcnRPZkRheShsYXRlckRhdGVfKTsKICBjb25zdCBlYXJsaWVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZWFybGllckRhdGVfKTsKICBjb25zdCBsYXRlclRpbWVzdGFtcCA9ICtsYXRlclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyU3RhcnRPZkRheSk7CiAgY29uc3QgZWFybGllclRpbWVzdGFtcCA9ICtlYXJsaWVyU3RhcnRPZkRheSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZEYXkpOwogIHJldHVybiBNYXRoLnJvdW5kKChsYXRlclRpbWVzdGFtcCAtIGVhcmxpZXJUaW1lc3RhbXApIC8gbWlsbGlzZWNvbmRzSW5EYXkpOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qcyIoKSB7CiAgICBpbml0X2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZEYXkoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBzdGFydE9mSVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHllYXIgPSBnZXRJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7Cn0KdmFyIHN0YXJ0T2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgc3RhcnRPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBzdGFydE9mSVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vla1llYXIuanMKZnVuY3Rpb24gc2V0SVNPV2Vla1llYXIoZGF0ZSwgd2Vla1llYXIsIG9wdGlvbnMpIHsKICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoCiAgICBfZGF0ZSwKICAgIHN0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSwgb3B0aW9ucykKICApOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHdlZWtZZWFyLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgX2RhdGUgPSBzdGFydE9mSVNPV2Vla1llYXIoZm91cnRoT2ZKYW51YXJ5KTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRJU09XZWVrWWVhcl9kZWZhdWx0ID0gc2V0SVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSVNPV2Vla1llYXJzLmpzCmZ1bmN0aW9uIGFkZElTT1dlZWtZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gc2V0SVNPV2Vla1llYXIoZGF0ZSwgZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykgKyBhbW91bnQsIG9wdGlvbnMpOwp9CnZhciBhZGRJU09XZWVrWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkSVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcyIoKSB7CiAgICBpbml0X2dldElTT1dlZWtZZWFyKCk7CiAgICBpbml0X3NldElTT1dlZWtZZWFyKCk7CiAgICBhZGRJU09XZWVrWWVhcnNfZGVmYXVsdCA9IGFkZElTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLmpzCmZ1bmN0aW9uIGFkZE1pbnV0ZXMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFRpbWUoX2RhdGUuZ2V0VGltZSgpICsgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5NaW51dGUpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgYWRkTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBhZGRNaW51dGVzX2RlZmF1bHQgPSBhZGRNaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFF1YXJ0ZXJzLmpzCmZ1bmN0aW9uIGFkZFF1YXJ0ZXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNb250aHMoZGF0ZSwgYW1vdW50ICogMywgb3B0aW9ucyk7Cn0KdmFyIGFkZFF1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X2FkZFF1YXJ0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFF1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBhZGRRdWFydGVyc19kZWZhdWx0ID0gYWRkUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkU2Vjb25kcy5qcwpmdW5jdGlvbiBhZGRTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogMWUzLCBvcHRpb25zKTsKfQp2YXIgYWRkU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRTZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMiKCkgewogICAgaW5pdF9hZGRNaWxsaXNlY29uZHMoKTsKICAgIGFkZFNlY29uZHNfZGVmYXVsdCA9IGFkZFNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkV2Vla3MuanMKZnVuY3Rpb24gYWRkV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgYW1vdW50ICogNywgb3B0aW9ucyk7Cn0KdmFyIGFkZFdlZWtzX2RlZmF1bHQ7CnZhciBpbml0X2FkZFdlZWtzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFdlZWtzLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgYWRkV2Vla3NfZGVmYXVsdCA9IGFkZFdlZWtzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFllYXJzLmpzCmZ1bmN0aW9uIGFkZFllYXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNb250aHMoZGF0ZSwgYW1vdW50ICogMTIsIG9wdGlvbnMpOwp9CnZhciBhZGRZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgYWRkWWVhcnNfZGVmYXVsdCA9IGFkZFllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FyZUludGVydmFsc092ZXJsYXBwaW5nLmpzCmZ1bmN0aW9uIGFyZUludGVydmFsc092ZXJsYXBwaW5nKGludGVydmFsTGVmdCwgaW50ZXJ2YWxSaWdodCwgb3B0aW9ucykgewogIGNvbnN0IFtsZWZ0U3RhcnRUaW1lLCBsZWZ0RW5kVGltZV0gPSBbCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgW3JpZ2h0U3RhcnRUaW1lLCByaWdodEVuZFRpbWVdID0gWwogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LnN0YXJ0LCBvcHRpb25zPy5pbiksCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgaWYgKG9wdGlvbnM/LmluY2x1c2l2ZSkKICAgIHJldHVybiBsZWZ0U3RhcnRUaW1lIDw9IHJpZ2h0RW5kVGltZSAmJiByaWdodFN0YXJ0VGltZSA8PSBsZWZ0RW5kVGltZTsKICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8IHJpZ2h0RW5kVGltZSAmJiByaWdodFN0YXJ0VGltZSA8IGxlZnRFbmRUaW1lOwp9CnZhciBhcmVJbnRlcnZhbHNPdmVybGFwcGluZ19kZWZhdWx0Owp2YXIgaW5pdF9hcmVJbnRlcnZhbHNPdmVybGFwcGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmdfZGVmYXVsdCA9IGFyZUludGVydmFsc092ZXJsYXBwaW5nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21heC5qcwpmdW5jdGlvbiBtYXgyKGRhdGVzLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdDsKICBsZXQgY29udGV4dDIgPSBvcHRpb25zPy5pbjsKICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7CiAgICBpZiAoIWNvbnRleHQyICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IikKICAgICAgY29udGV4dDIgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0Mik7CiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPCBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXzsKICB9KTsKICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0MiwgcmVzdWx0IHx8IE5hTik7Cn0KdmFyIG1heF9kZWZhdWx0Owp2YXIgaW5pdF9tYXgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21heC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBtYXhfZGVmYXVsdCA9IG1heDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWluLmpzCmZ1bmN0aW9uIG1pbjIoZGF0ZXMsIG9wdGlvbnMpIHsKICBsZXQgcmVzdWx0OwogIGxldCBjb250ZXh0MiA9IG9wdGlvbnM/LmluOwogIGRhdGVzLmZvckVhY2goKGRhdGUpID0+IHsKICAgIGlmICghY29udGV4dDIgJiYgdHlwZW9mIGRhdGUgPT09ICJvYmplY3QiKQogICAgICBjb250ZXh0MiA9IGNvbnN0cnVjdEZyb20uYmluZChudWxsLCBkYXRlKTsKICAgIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIGNvbnRleHQyKTsKICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdCA+IGRhdGVfIHx8IGlzTmFOKCtkYXRlXykpIHJlc3VsdCA9IGRhdGVfOwogIH0pOwogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQyLCByZXN1bHQgfHwgTmFOKTsKfQp2YXIgbWluX2RlZmF1bHQ7CnZhciBpbml0X21pbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWluLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIG1pbl9kZWZhdWx0ID0gbWluMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcwpmdW5jdGlvbiBjbGFtcChkYXRlLCBpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZV8sIHN0YXJ0LCBlbmQzXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlLAogICAgaW50ZXJ2YWwzLnN0YXJ0LAogICAgaW50ZXJ2YWwzLmVuZAogICk7CiAgcmV0dXJuIG1pbjIoW21heDIoW2RhdGVfLCBzdGFydF0sIG9wdGlvbnMpLCBlbmQzXSwgb3B0aW9ucyk7Cn0KdmFyIGNsYW1wX2RlZmF1bHQ7CnZhciBpbml0X2NsYW1wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NsYW1wLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taW4yKCk7CiAgICBjbGFtcF9kZWZhdWx0ID0gY2xhbXA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdEluZGV4VG8uanMKZnVuY3Rpb24gY2xvc2VzdEluZGV4VG8oZGF0ZVRvQ29tcGFyZSwgZGF0ZXMpIHsKICBjb25zdCB0aW1lVG9Db21wYXJlID0gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTsKICBpZiAoaXNOYU4odGltZVRvQ29tcGFyZSkpIHJldHVybiBOYU47CiAgbGV0IHJlc3VsdDsKICBsZXQgbWluRGlzdGFuY2U7CiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgyKSA9PiB7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlKTsKICAgIGlmIChpc05hTigrZGF0ZV8pKSB7CiAgICAgIHJlc3VsdCA9IE5hTjsKICAgICAgbWluRGlzdGFuY2UgPSBOYU47CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGltZVRvQ29tcGFyZSAtICtkYXRlXyk7CiAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkgewogICAgICByZXN1bHQgPSBpbmRleDI7CiAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgY2xvc2VzdEluZGV4VG9fZGVmYXVsdDsKdmFyIGluaXRfY2xvc2VzdEluZGV4VG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdEluZGV4VG8uanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGNsb3Nlc3RJbmRleFRvX2RlZmF1bHQgPSBjbG9zZXN0SW5kZXhUbzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbG9zZXN0VG8uanMKZnVuY3Rpb24gY2xvc2VzdFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVUb0NvbXBhcmVfLCAuLi5kYXRlc19dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGRhdGVUb0NvbXBhcmUsCiAgICAuLi5kYXRlcwogICk7CiAgY29uc3QgaW5kZXgyID0gY2xvc2VzdEluZGV4VG8oZGF0ZVRvQ29tcGFyZV8sIGRhdGVzXyk7CiAgaWYgKHR5cGVvZiBpbmRleDIgPT09ICJudW1iZXIiICYmIGlzTmFOKGluZGV4MikpCiAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlVG9Db21wYXJlXywgTmFOKTsKICBpZiAoaW5kZXgyICE9PSB2b2lkIDApIHJldHVybiBkYXRlc19baW5kZXgyXTsKfQp2YXIgY2xvc2VzdFRvX2RlZmF1bHQ7CnZhciBpbml0X2Nsb3Nlc3RUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbG9zZXN0VG8uanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jbG9zZXN0SW5kZXhUbygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBjbG9zZXN0VG9fZGVmYXVsdCA9IGNsb3Nlc3RUbzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlQXNjLmpzCmZ1bmN0aW9uIGNvbXBhcmVBc2MoZGF0ZUxlZnQsIGRhdGVSaWdodCkgewogIGNvbnN0IGRpZmYgPSArdG9EYXRlKGRhdGVMZWZ0KSAtICt0b0RhdGUoZGF0ZVJpZ2h0KTsKICBpZiAoZGlmZiA8IDApIHJldHVybiAtMTsKICBlbHNlIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7CiAgcmV0dXJuIGRpZmY7Cn0KdmFyIGNvbXBhcmVBc2NfZGVmYXVsdDsKdmFyIGluaXRfY29tcGFyZUFzYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlQXNjLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBjb21wYXJlQXNjX2RlZmF1bHQgPSBjb21wYXJlQXNjOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbXBhcmVEZXNjLmpzCmZ1bmN0aW9uIGNvbXBhcmVEZXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHsKICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7CiAgaWYgKGRpZmYgPiAwKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZGlmZiA8IDApIHJldHVybiAxOwogIHJldHVybiBkaWZmOwp9CnZhciBjb21wYXJlRGVzY19kZWZhdWx0Owp2YXIgaW5pdF9jb21wYXJlRGVzYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlRGVzYy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgY29tcGFyZURlc2NfZGVmYXVsdCA9IGNvbXBhcmVEZXNjOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0cnVjdE5vdy5qcwpmdW5jdGlvbiBjb25zdHJ1Y3ROb3coZGF0ZSkgewogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGRhdGUsIERhdGUubm93KCkpOwp9CnZhciBjb25zdHJ1Y3ROb3dfZGVmYXVsdDsKdmFyIGluaXRfY29uc3RydWN0Tm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0cnVjdE5vdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGNvbnN0cnVjdE5vd19kZWZhdWx0ID0gY29uc3RydWN0Tm93OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RheXNUb1dlZWtzLmpzCmZ1bmN0aW9uIGRheXNUb1dlZWtzKGRheXMyKSB7CiAgY29uc3QgcmVzdWx0ID0gTWF0aC50cnVuYyhkYXlzMiAvIGRheXNJbldlZWspOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkYXlzVG9XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kYXlzVG9XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kYXlzVG9XZWVrcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZGF5c1RvV2Vla3NfZGVmYXVsdCA9IGRheXNUb1dlZWtzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZURheS5qcwpmdW5jdGlvbiBpc1NhbWVEYXkobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlTGVmdF8sIGRhdGVSaWdodF9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gK3N0YXJ0T2ZEYXkoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZEYXkoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZURheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVEYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lRGF5LmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZkRheSgpOwogICAgaXNTYW1lRGF5X2RlZmF1bHQgPSBpc1NhbWVEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUyKSA9PT0gIltvYmplY3QgRGF0ZV0iOwp9CnZhciBpc0RhdGVfZGVmYXVsdDsKdmFyIGluaXRfaXNEYXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0RhdGUuanMiKCkgewogICAgaXNEYXRlX2RlZmF1bHQgPSBpc0RhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcwpmdW5jdGlvbiBpc1ZhbGlkKGRhdGUpIHsKICByZXR1cm4gISghaXNEYXRlKGRhdGUpICYmIHR5cGVvZiBkYXRlICE9PSAibnVtYmVyIiB8fCBpc05hTigrdG9EYXRlKGRhdGUpKSk7Cn0KdmFyIGlzVmFsaWRfZGVmYXVsdDsKdmFyIGluaXRfaXNWYWxpZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1ZhbGlkLmpzIigpIHsKICAgIGluaXRfaXNEYXRlMigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzVmFsaWRfZGVmYXVsdCA9IGlzVmFsaWQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGlmICghaXNWYWxpZChsYXRlckRhdGVfKSB8fCAhaXNWYWxpZChlYXJsaWVyRGF0ZV8pKSByZXR1cm4gTmFOOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBzaWduID0gZGlmZiA8IDAgPyAtMSA6IDE7CiAgY29uc3Qgd2Vla3MgPSBNYXRoLnRydW5jKGRpZmYgLyA3KTsKICBsZXQgcmVzdWx0ID0gd2Vla3MgKiA1OwogIGxldCBtb3ZpbmdEYXRlID0gYWRkRGF5cyhlYXJsaWVyRGF0ZV8sIHdlZWtzICogNyk7CiAgd2hpbGUgKCFpc1NhbWVEYXkobGF0ZXJEYXRlXywgbW92aW5nRGF0ZSkpIHsKICAgIHJlc3VsdCArPSBpc1dlZWtlbmQobW92aW5nRGF0ZSwgb3B0aW9ucykgPyAwIDogc2lnbjsKICAgIG1vdmluZ0RhdGUgPSBhZGREYXlzKG1vdmluZ0RhdGUsIHNpZ24pOwogIH0KICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9hZGREYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF9pc1dlZWtlbmQoKTsKICAgIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuIGdldElTT1dlZWtZZWFyKGxhdGVyRGF0ZV8sIG9wdGlvbnMpIC0gZ2V0SVNPV2Vla1llYXIoZWFybGllckRhdGVfLCBvcHRpb25zKTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHN0YXJ0T2ZJU09XZWVrTGVmdCA9IHN0YXJ0T2ZJU09XZWVrKGxhdGVyRGF0ZV8pOwogIGNvbnN0IHN0YXJ0T2ZJU09XZWVrUmlnaHQgPSBzdGFydE9mSVNPV2VlayhlYXJsaWVyRGF0ZV8pOwogIGNvbnN0IHRpbWVzdGFtcExlZnQgPSArc3RhcnRPZklTT1dlZWtMZWZ0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla0xlZnQpOwogIGNvbnN0IHRpbWVzdGFtcFJpZ2h0ID0gK3N0YXJ0T2ZJU09XZWVrUmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZJU09XZWVrUmlnaHQpOwogIHJldHVybiBNYXRoLnJvdW5kKCh0aW1lc3RhbXBMZWZ0IC0gdGltZXN0YW1wUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5XZWVrKTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoc0RpZmYgPSBsYXRlckRhdGVfLmdldE1vbnRoKCkgLSBlYXJsaWVyRGF0ZV8uZ2V0TW9udGgoKTsKICByZXR1cm4geWVhcnNEaWZmICogMTIgKyBtb250aHNEaWZmOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0UXVhcnRlci5qcwpmdW5jdGlvbiBnZXRRdWFydGVyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgcXVhcnRlciA9IE1hdGgudHJ1bmMoX2RhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTsKICByZXR1cm4gcXVhcnRlcjsKfQp2YXIgZ2V0UXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9nZXRRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFF1YXJ0ZXJfZGVmYXVsdCA9IGdldFF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3QgeWVhcnNEaWZmID0gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgcXVhcnRlcnNEaWZmID0gZ2V0UXVhcnRlcihsYXRlckRhdGVfKSAtIGdldFF1YXJ0ZXIoZWFybGllckRhdGVfKTsKICByZXR1cm4geWVhcnNEaWZmICogNCArIHF1YXJ0ZXJzRGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGxhdGVyU3RhcnRPZldlZWsgPSBzdGFydE9mV2VlayhsYXRlckRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBlYXJsaWVyU3RhcnRPZldlZWsgPSBzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpOwogIGNvbnN0IGxhdGVyVGltZXN0YW1wID0gK2xhdGVyU3RhcnRPZldlZWsgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyU3RhcnRPZldlZWspOwogIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPSArZWFybGllclN0YXJ0T2ZXZWVrIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhlYXJsaWVyU3RhcnRPZldlZWspOwogIHJldHVybiBNYXRoLnJvdW5kKChsYXRlclRpbWVzdGFtcCAtIGVhcmxpZXJUaW1lc3RhbXApIC8gbWlsbGlzZWNvbmRzSW5XZWVrKTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGVfLmdldEZ1bGxZZWFyKCk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluRGF5cy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicygKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pCiAgKTsKICBsYXRlckRhdGVfLnNldERhdGUobGF0ZXJEYXRlXy5nZXREYXRlKCkgLSBzaWduICogZGlmZmVyZW5jZSk7CiAgY29uc3QgaXNMYXN0RGF5Tm90RnVsbCA9IE51bWJlcigKICAgIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbgogICk7CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gaXNMYXN0RGF5Tm90RnVsbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KZnVuY3Rpb24gY29tcGFyZUxvY2FsQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHsKICBjb25zdCBkaWZmID0gbGF0ZXJEYXRlLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZS5nZXRGdWxsWWVhcigpIHx8IGxhdGVyRGF0ZS5nZXRNb250aCgpIC0gZWFybGllckRhdGUuZ2V0TW9udGgoKSB8fCBsYXRlckRhdGUuZ2V0RGF0ZSgpIC0gZWFybGllckRhdGUuZ2V0RGF0ZSgpIHx8IGxhdGVyRGF0ZS5nZXRIb3VycygpIC0gZWFybGllckRhdGUuZ2V0SG91cnMoKSB8fCBsYXRlckRhdGUuZ2V0TWludXRlcygpIC0gZWFybGllckRhdGUuZ2V0TWludXRlcygpIHx8IGxhdGVyRGF0ZS5nZXRTZWNvbmRzKCkgLSBlYXJsaWVyRGF0ZS5nZXRTZWNvbmRzKCkgfHwgbGF0ZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7CiAgaWYgKGRpZmYgPiAwKSByZXR1cm4gMTsKICByZXR1cm4gZGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5EYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGRpZmZlcmVuY2VJbkRheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkRheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcwpmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHsKICByZXR1cm4gKG51bWJlcjIpID0+IHsKICAgIGNvbnN0IHJvdW5kID0gbWV0aG9kID8gTWF0aFttZXRob2RdIDogTWF0aC50cnVuYzsKICAgIGNvbnN0IHJlc3VsdCA9IHJvdW5kKG51bWJlcjIpOwogICAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7CiAgfTsKfQp2YXIgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFJvdW5kaW5nTWV0aG9kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Ib3Vycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGRpZmYgPSAoK2xhdGVyRGF0ZV8gLSArZWFybGllckRhdGVfKSAvIG1pbGxpc2Vjb25kc0luSG91cjsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5Ib3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5Ib3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZGlmZmVyZW5jZUluSG91cnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBzdWJJU09XZWVrWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZElTT1dlZWtZZWFycyhkYXRlLCAtYW1vdW50LCBvcHRpb25zKTsKfQp2YXIgc3ViSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X3N1YklTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIHN1YklTT1dlZWtZZWFyc19kZWZhdWx0ID0gc3ViSVNPV2Vla1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBzaWduID0gY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogIGNvbnN0IGRpZmYgPSBNYXRoLmFicygKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXywgb3B0aW9ucykKICApOwogIGNvbnN0IGFkanVzdGVkRGF0ZSA9IHN1YklTT1dlZWtZZWFycyhsYXRlckRhdGVfLCBzaWduICogZGlmZiwgb3B0aW9ucyk7CiAgY29uc3QgaXNMYXN0SVNPV2Vla1llYXJOb3RGdWxsID0gTnVtYmVyKAogICAgY29tcGFyZUFzYyhhZGp1c3RlZERhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduCiAgKTsKICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmYgLSBpc0xhc3RJU09XZWVrWWVhck5vdEZ1bGwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShsYXRlckRhdGUpIC0gK3RvRGF0ZShlYXJsaWVyRGF0ZSk7Cn0KdmFyIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5NaW51dGVzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbnV0ZXMoZGF0ZUxlZnQsIGRhdGVSaWdodCwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5NaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoKTsKICAgIGRpZmZlcmVuY2VJbk1pbnV0ZXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZEYXkuanMKZnVuY3Rpb24gZW5kT2ZEYXkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZEYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZEYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZEYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mRGF5X2RlZmF1bHQgPSBlbmRPZkRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1vbnRoLmpzCmZ1bmN0aW9uIGVuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBtb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgX2RhdGUuc2V0RnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSwgbW9udGggKyAxLCAwKTsKICBfZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mTW9udGhfZGVmYXVsdCA9IGVuZE9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNMYXN0RGF5T2ZNb250aC5qcwpmdW5jdGlvbiBpc0xhc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgcmV0dXJuICtlbmRPZkRheShfZGF0ZSwgb3B0aW9ucykgPT09ICtlbmRPZk1vbnRoKF9kYXRlLCBvcHRpb25zKTsKfQp2YXIgaXNMYXN0RGF5T2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9pc0xhc3REYXlPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF9lbmRPZkRheSgpOwogICAgaW5pdF9lbmRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNMYXN0RGF5T2ZNb250aF9kZWZhdWx0ID0gaXNMYXN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Nb250aHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluTW9udGhzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgd29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2Mod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyh3b3JraW5nTGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV8pCiAgKTsKICBpZiAoZGlmZmVyZW5jZSA8IDEpIHJldHVybiAwOwogIGlmICh3b3JraW5nTGF0ZXJEYXRlLmdldE1vbnRoKCkgPT09IDEgJiYgd29ya2luZ0xhdGVyRGF0ZS5nZXREYXRlKCkgPiAyNykKICAgIHdvcmtpbmdMYXRlckRhdGUuc2V0RGF0ZSgzMCk7CiAgd29ya2luZ0xhdGVyRGF0ZS5zZXRNb250aCh3b3JraW5nTGF0ZXJEYXRlLmdldE1vbnRoKCkgLSBzaWduICogZGlmZmVyZW5jZSk7CiAgbGV0IGlzTGFzdE1vbnRoTm90RnVsbCA9IGNvbXBhcmVBc2Mod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKSA9PT0gLXNpZ247CiAgaWYgKGlzTGFzdERheU9mTW9udGgobGF0ZXJEYXRlXykgJiYgZGlmZmVyZW5jZSA9PT0gMSAmJiBjb21wYXJlQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykgPT09IDEpIHsKICAgIGlzTGFzdE1vbnRoTm90RnVsbCA9IGZhbHNlOwogIH0KICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmZlcmVuY2UgLSAraXNMYXN0TW9udGhOb3RGdWxsKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluTW9udGhzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbk1vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Nb250aHMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2lzTGFzdERheU9mTW9udGgoKTsKICAgIGRpZmZlcmVuY2VJbk1vbnRoc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblF1YXJ0ZXJzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblF1YXJ0ZXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluTW9udGhzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gMzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5RdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5RdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgZGlmZmVyZW5jZUluUXVhcnRlcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblNlY29uZHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSAvIDFlMzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJblNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgZGlmZmVyZW5jZUluU2Vjb25kc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluU2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5XZWVrcy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5XZWVrcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkRheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgLyA3OwogIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7Cn0KdmFyIGRpZmZlcmVuY2VJbldlZWtzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbldlZWtzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbldlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluRGF5cygpOwogICAgZGlmZmVyZW5jZUluV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbldlZWtzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblllYXJzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblllYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmID0gTWF0aC5hYnMoZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pKTsKICBsYXRlckRhdGVfLnNldEZ1bGxZZWFyKDE1ODQpOwogIGVhcmxpZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTsKICBjb25zdCBwYXJ0aWFsID0gY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbjsKICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmYgLSArcGFydGlhbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJblllYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJblllYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblllYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29tcGFyZUFzYygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBkaWZmZXJlbmNlSW5ZZWFyc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qcwpmdW5jdGlvbiBub3JtYWxpemVJbnRlcnZhbChjb250ZXh0MiwgaW50ZXJ2YWwzKSB7CiAgY29uc3QgW3N0YXJ0LCBlbmQzXSA9IG5vcm1hbGl6ZURhdGVzKGNvbnRleHQyLCBpbnRlcnZhbDMuc3RhcnQsIGludGVydmFsMy5lbmQpOwogIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKfQp2YXIgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZUludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoRGF5T2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoRGF5T2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7CiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaERheU9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaERheU9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaERheU9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoRGF5T2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaERheU9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaEhvdXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hIb3VyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldE1pbnV0ZXMoMCwgMCwgMCk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaEhvdXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoSG91ck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoSG91ck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hIb3VyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTWludXRlT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoTWludXRlT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIHN0YXJ0LnNldFNlY29uZHMoMCwgMCk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUgPSBhZGRNaW51dGVzKGRhdGUsIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaE1pbnV0ZU9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaE1pbnV0ZU9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRNaW51dGVzKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGVhY2hNaW51dGVPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoTWludXRlT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTW9udGhPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hNb250aE9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBkYXRlLnNldERhdGUoMSk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaE1vbnRoT2ZJbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoTW9udGhPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNb250aE9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoTW9udGhPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoTW9udGhPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZRdWFydGVyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudE1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTsKICBjb25zdCBtb250aCA9IGN1cnJlbnRNb250aCAtIGN1cnJlbnRNb250aCAlIDM7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIDEpOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZlF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlF1YXJ0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZRdWFydGVyX2RlZmF1bHQgPSBzdGFydE9mUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoUXVhcnRlck9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFF1YXJ0ZXJPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0T2ZRdWFydGVyKHN0YXJ0KSA6ICtzdGFydE9mUXVhcnRlcihlbmQzKTsKICBsZXQgZGF0ZSA9IHJldmVyc2VkID8gc3RhcnRPZlF1YXJ0ZXIoZW5kMykgOiBzdGFydE9mUXVhcnRlcihzdGFydCk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlID0gYWRkUXVhcnRlcnMoZGF0ZSwgc3RlcCk7CiAgfQogIHJldHVybiByZXZlcnNlZCA/IGRhdGVzLnJldmVyc2UoKSA6IGRhdGVzOwp9CnZhciBlYWNoUXVhcnRlck9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFF1YXJ0ZXJPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hRdWFydGVyT2ZJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc3RhcnRPZlF1YXJ0ZXIoKTsKICAgIGVhY2hRdWFydGVyT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaFF1YXJ0ZXJPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hXZWVrT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoV2Vla09mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBzdGFydERhdGVXZWVrID0gcmV2ZXJzZWQgPyBzdGFydE9mV2VlayhlbmQzLCBvcHRpb25zKSA6IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKTsKICBjb25zdCBlbmREYXRlV2VlayA9IHJldmVyc2VkID8gc3RhcnRPZldlZWsoc3RhcnQsIG9wdGlvbnMpIDogc3RhcnRPZldlZWsoZW5kMywgb3B0aW9ucyk7CiAgc3RhcnREYXRlV2Vlay5zZXRIb3VycygxNSk7CiAgZW5kRGF0ZVdlZWsuc2V0SG91cnMoMTUpOwogIGNvbnN0IGVuZFRpbWUgPSArZW5kRGF0ZVdlZWsuZ2V0VGltZSgpOwogIGxldCBjdXJyZW50RGF0ZSA9IHN0YXJ0RGF0ZVdlZWs7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2N1cnJlbnREYXRlIDw9IGVuZFRpbWUpIHsKICAgIGN1cnJlbnREYXRlLnNldEhvdXJzKDApOwogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBjdXJyZW50RGF0ZSkpOwogICAgY3VycmVudERhdGUgPSBhZGRXZWVrcyhjdXJyZW50RGF0ZSwgc3RlcCk7CiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygxNSk7CiAgfQogIHJldHVybiByZXZlcnNlZCA/IGRhdGVzLnJldmVyc2UoKSA6IGRhdGVzOwp9CnZhciBlYWNoV2Vla09mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hXZWVrT2ZJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGVhY2hXZWVrT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaFdlZWtPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hXZWVrZW5kT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBjb25zdCBkYXRlSW50ZXJ2YWwgPSBlYWNoRGF5T2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQ6IGVuZDMgfSwgb3B0aW9ucyk7CiAgY29uc3Qgd2Vla2VuZHMgPSBbXTsKICBsZXQgaW5kZXgyID0gMDsKICB3aGlsZSAoaW5kZXgyIDwgZGF0ZUludGVydmFsLmxlbmd0aCkgewogICAgY29uc3QgZGF0ZSA9IGRhdGVJbnRlcnZhbFtpbmRleDIrK107CiAgICBpZiAoaXNXZWVrZW5kKGRhdGUpKSB3ZWVrZW5kcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICB9CiAgcmV0dXJuIHdlZWtlbmRzOwp9CnZhciBlYWNoV2Vla2VuZE9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hXZWVrZW5kT2ZJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZWFjaERheU9mSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBlYWNoV2Vla2VuZE9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hXZWVrZW5kT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTW9udGguanMKZnVuY3Rpb24gc3RhcnRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0RGF0ZSgxKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mTW9udGhfZGVmYXVsdCA9IHN0YXJ0T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mTW9udGguanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBzdGFydCA9IHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKTsKICBjb25zdCBlbmQzID0gZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKTsKICByZXR1cm4gZWFjaFdlZWtlbmRPZkludGVydmFsKHsgc3RhcnQsIGVuZDogZW5kMyB9LCBvcHRpb25zKTsKfQp2YXIgZWFjaFdlZWtlbmRPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mTW9udGguanMiKCkgewogICAgaW5pdF9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZNb250aCgpOwogICAgaW5pdF9zdGFydE9mTW9udGgoKTsKICAgIGVhY2hXZWVrZW5kT2ZNb250aF9kZWZhdWx0ID0gZWFjaFdlZWtlbmRPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVhci5qcwpmdW5jdGlvbiBlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBfZGF0ZS5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlllYXJfZGVmYXVsdCA9IGVuZE9mWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVhci5qcwpmdW5jdGlvbiBzdGFydE9mWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGVfLmdldEZ1bGxZZWFyKCksIDAsIDEpOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZZZWFyX2RlZmF1bHQgPSBzdGFydE9mWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mWWVhci5qcwpmdW5jdGlvbiBlYWNoV2Vla2VuZE9mWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBlbmQzID0gZW5kT2ZZZWFyKGRhdGUsIG9wdGlvbnMpOwogIHJldHVybiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kOiBlbmQzIH0sIG9wdGlvbnMpOwp9CnZhciBlYWNoV2Vla2VuZE9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoV2Vla2VuZE9mWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mWWVhci5qcyIoKSB7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lbmRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGVhY2hXZWVrZW5kT2ZZZWFyX2RlZmF1bHQgPSBlYWNoV2Vla2VuZE9mWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoWWVhck9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFllYXJPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kMyA6IHN0YXJ0OwogIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgZGF0ZS5zZXRNb250aCgwLCAxKTsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7CiAgfQogIHJldHVybiByZXZlcnNlZCA/IGRhdGVzLnJldmVyc2UoKSA6IGRhdGVzOwp9CnZhciBlYWNoWWVhck9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFllYXJPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hZZWFyT2ZJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGVhY2hZZWFyT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaFllYXJPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzCmZ1bmN0aW9uIGVuZE9mRGVjYWRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGVjYWRlID0gOSArIE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMTEsIDMxKTsKICBfZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZEZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZEZWNhZGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mRGVjYWRlX2RlZmF1bHQgPSBlbmRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkhvdXIuanMKZnVuY3Rpb24gZW5kT2ZIb3VyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWludXRlcyg1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZkhvdXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZIb3VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSG91ci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZIb3VyX2RlZmF1bHQgPSBlbmRPZkhvdXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZXZWVrLmpzCmZ1bmN0aW9uIGVuZE9mV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7CiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyAtNyA6IDApICsgNiAtIChkYXkgLSB3ZWVrU3RhcnRzT24pOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZGlmZik7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZldlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZldlZWtfZGVmYXVsdCA9IGVuZE9mV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWsuanMKZnVuY3Rpb24gZW5kT2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZW5kT2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pOwp9CnZhciBlbmRPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2VuZE9mV2VlaygpOwogICAgZW5kT2ZJU09XZWVrX2RlZmF1bHQgPSBlbmRPZklTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBlbmRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIsIG9wdGlvbnMpOwogIF9kYXRlLnNldE1pbGxpc2Vjb25kcyhfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIDEpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2dldElTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBlbmRPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBlbmRPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mTWludXRlLmpzCmZ1bmN0aW9uIGVuZE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0U2Vjb25kcyg1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mTWludXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mTWludXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZk1pbnV0ZV9kZWZhdWx0ID0gZW5kT2ZNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZRdWFydGVyLmpzCmZ1bmN0aW9uIGVuZE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzICsgMzsKICBfZGF0ZS5zZXRNb250aChtb250aCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlF1YXJ0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlF1YXJ0ZXJfZGVmYXVsdCA9IGVuZE9mUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlNlY29uZC5qcwpmdW5jdGlvbiBlbmRPZlNlY29uZChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbGxpc2Vjb25kcyg5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZTZWNvbmRfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mU2Vjb25kX2RlZmF1bHQgPSBlbmRPZlNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzCmZ1bmN0aW9uIGVuZE9mVG9kYXkob3B0aW9ucykgewogIHJldHVybiBlbmRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgZW5kT2ZUb2RheV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlRvZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9lbmRPZkRheSgpOwogICAgZW5kT2ZUb2RheV9kZWZhdWx0ID0gZW5kT2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvbW9ycm93LmpzCmZ1bmN0aW9uIGVuZE9mVG9tb3Jyb3cob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5ICsgMSk7CiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOwogIHJldHVybiBvcHRpb25zPy5pbiA/IG9wdGlvbnMuaW4oZGF0ZSkgOiBkYXRlOwp9CnZhciBlbmRPZlRvbW9ycm93X2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mVG9tb3Jyb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgZW5kT2ZUb21vcnJvd19kZWZhdWx0ID0gZW5kT2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllc3RlcmRheS5qcwpmdW5jdGlvbiBlbmRPZlllc3RlcmRheShvcHRpb25zKSB7CiAgY29uc3Qgbm93MiA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIDApOwogIGRhdGUuc2V0RnVsbFllYXIobm93Mi5nZXRGdWxsWWVhcigpLCBub3cyLmdldE1vbnRoKCksIG5vdzIuZ2V0RGF0ZSgpIC0gMSk7CiAgZGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOwogIHJldHVybiBkYXRlOwp9CnZhciBlbmRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlllc3RlcmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllc3RlcmRheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBlbmRPZlllc3RlcmRheV9kZWZhdWx0ID0gZW5kT2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanMKdmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlLCBmb3JtYXREaXN0YW5jZTsKdmFyIGluaXRfZm9ybWF0RGlzdGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanMiKCkgewogICAgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7CiAgICAgIGxlc3NUaGFuWFNlY29uZHM6IHsKICAgICAgICBvbmU6ICJsZXNzIHRoYW4gYSBzZWNvbmQiLAogICAgICAgIG90aGVyOiAibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzIgogICAgICB9LAogICAgICB4U2Vjb25kczogewogICAgICAgIG9uZTogIjEgc2Vjb25kIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBzZWNvbmRzIgogICAgICB9LAogICAgICBoYWxmQU1pbnV0ZTogImhhbGYgYSBtaW51dGUiLAogICAgICBsZXNzVGhhblhNaW51dGVzOiB7CiAgICAgICAgb25lOiAibGVzcyB0aGFuIGEgbWludXRlIiwKICAgICAgICBvdGhlcjogImxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlcyIKICAgICAgfSwKICAgICAgeE1pbnV0ZXM6IHsKICAgICAgICBvbmU6ICIxIG1pbnV0ZSIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gbWludXRlcyIKICAgICAgfSwKICAgICAgYWJvdXRYSG91cnM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIGhvdXIiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IGhvdXJzIgogICAgICB9LAogICAgICB4SG91cnM6IHsKICAgICAgICBvbmU6ICIxIGhvdXIiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IGhvdXJzIgogICAgICB9LAogICAgICB4RGF5czogewogICAgICAgIG9uZTogIjEgZGF5IiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBkYXlzIgogICAgICB9LAogICAgICBhYm91dFhXZWVrczogewogICAgICAgIG9uZTogImFib3V0IDEgd2VlayIsCiAgICAgICAgb3RoZXI6ICJhYm91dCB7e2NvdW50fX0gd2Vla3MiCiAgICAgIH0sCiAgICAgIHhXZWVrczogewogICAgICAgIG9uZTogIjEgd2VlayIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gd2Vla3MiCiAgICAgIH0sCiAgICAgIGFib3V0WE1vbnRoczogewogICAgICAgIG9uZTogImFib3V0IDEgbW9udGgiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IG1vbnRocyIKICAgICAgfSwKICAgICAgeE1vbnRoczogewogICAgICAgIG9uZTogIjEgbW9udGgiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IG1vbnRocyIKICAgICAgfSwKICAgICAgYWJvdXRYWWVhcnM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIHllYXIiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICB4WWVhcnM6IHsKICAgICAgICBvbmU6ICIxIHllYXIiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICBvdmVyWFllYXJzOiB7CiAgICAgICAgb25lOiAib3ZlciAxIHllYXIiLAogICAgICAgIG90aGVyOiAib3ZlciB7e2NvdW50fX0geWVhcnMiCiAgICAgIH0sCiAgICAgIGFsbW9zdFhZZWFyczogewogICAgICAgIG9uZTogImFsbW9zdCAxIHllYXIiLAogICAgICAgIG90aGVyOiAiYWxtb3N0IHt7Y291bnR9fSB5ZWFycyIKICAgICAgfQogICAgfTsKICAgIGZvcm1hdERpc3RhbmNlID0gKHRva2VuLCBjb3VudDIsIG9wdGlvbnMpID0+IHsKICAgICAgbGV0IHJlc3VsdDsKICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTsKICAgICAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoY291bnQyID09PSAxKSB7CiAgICAgICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCJ7e2NvdW50fX0iLCBjb3VudDIudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnM/LmFkZFN1ZmZpeCkgewogICAgICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkgewogICAgICAgICAgcmV0dXJuICJpbiAiICsgcmVzdWx0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgIiBhZ28iOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qcwpmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7CiAgcmV0dXJuIChvcHRpb25zID0ge30pID0+IHsKICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoOwogICAgY29uc3QgZm9ybWF0MiA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTsKICAgIHJldHVybiBmb3JtYXQyOwogIH07Cn0KdmFyIGluaXRfYnVpbGRGb3JtYXRMb25nRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanMKdmFyIGRhdGVGb3JtYXRzLCB0aW1lRm9ybWF0cywgZGF0ZVRpbWVGb3JtYXRzLCBmb3JtYXRMb25nOwp2YXIgaW5pdF9mb3JtYXRMb25nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanMiKCkgewogICAgaW5pdF9idWlsZEZvcm1hdExvbmdGbigpOwogICAgZGF0ZUZvcm1hdHMgPSB7CiAgICAgIGZ1bGw6ICJFRUVFLCBNTU1NIGRvLCB5IiwKICAgICAgbG9uZzogIk1NTU0gZG8sIHkiLAogICAgICBtZWRpdW06ICJNTU0gZCwgeSIsCiAgICAgIHNob3J0OiAiTU0vZGQveXl5eSIKICAgIH07CiAgICB0aW1lRm9ybWF0cyA9IHsKICAgICAgZnVsbDogImg6bW06c3MgYSB6enp6IiwKICAgICAgbG9uZzogImg6bW06c3MgYSB6IiwKICAgICAgbWVkaXVtOiAiaDptbTpzcyBhIiwKICAgICAgc2hvcnQ6ICJoOm1tIGEiCiAgICB9OwogICAgZGF0ZVRpbWVGb3JtYXRzID0gewogICAgICBmdWxsOiAie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsCiAgICAgIGxvbmc6ICJ7e2RhdGV9fSAnYXQnIHt7dGltZX19IiwKICAgICAgbWVkaXVtOiAie3tkYXRlfX0sIHt7dGltZX19IiwKICAgICAgc2hvcnQ6ICJ7e2RhdGV9fSwge3t0aW1lfX0iCiAgICB9OwogICAgZm9ybWF0TG9uZyA9IHsKICAgICAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pLAogICAgICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7CiAgICAgICAgZm9ybWF0czogdGltZUZvcm1hdHMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAiZnVsbCIKICAgICAgfSksCiAgICAgIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7CiAgICAgICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzCnZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSwgZm9ybWF0UmVsYXRpdmU7CnZhciBpbml0X2Zvcm1hdFJlbGF0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzIigpIHsKICAgIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0gewogICAgICBsYXN0V2VlazogIidsYXN0JyBlZWVlICdhdCcgcCIsCiAgICAgIHllc3RlcmRheTogIid5ZXN0ZXJkYXkgYXQnIHAiLAogICAgICB0b2RheTogIid0b2RheSBhdCcgcCIsCiAgICAgIHRvbW9ycm93OiAiJ3RvbW9ycm93IGF0JyBwIiwKICAgICAgbmV4dFdlZWs6ICJlZWVlICdhdCcgcCIsCiAgICAgIG90aGVyOiAiUCIKICAgIH07CiAgICBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpID0+IGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4uanMKZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHsKICByZXR1cm4gKHZhbHVlMiwgb3B0aW9ucykgPT4gewogICAgY29uc3QgY29udGV4dDIgPSBvcHRpb25zPy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAic3RhbmRhbG9uZSI7CiAgICBsZXQgdmFsdWVzQXJyYXk7CiAgICBpZiAoY29udGV4dDIgPT09ICJmb3JtYXR0aW5nIiAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHsKICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoOwogICAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnM/LndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoOwogICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07CiAgICB9IGVsc2UgewogICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoOwogICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tkZWZhdWx0V2lkdGhdOwogICAgfQogICAgY29uc3QgaW5kZXgyID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKHZhbHVlMikgOiB2YWx1ZTI7CiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXgyXTsKICB9Owp9CnZhciBpbml0X2J1aWxkTG9jYWxpemVGbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplLmpzCnZhciBlcmFWYWx1ZXMsIHF1YXJ0ZXJWYWx1ZXMsIG1vbnRoVmFsdWVzLCBkYXlWYWx1ZXMsIGRheVBlcmlvZFZhbHVlcywgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcywgb3JkaW5hbE51bWJlciwgbG9jYWxpemU7CnZhciBpbml0X2xvY2FsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplLmpzIigpIHsKICAgIGluaXRfYnVpbGRMb2NhbGl6ZUZuKCk7CiAgICBlcmFWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJCIiwgIkEiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiQkMiLCAiQUQiXSwKICAgICAgd2lkZTogWyJCZWZvcmUgQ2hyaXN0IiwgIkFubm8gRG9taW5pIl0KICAgIH07CiAgICBxdWFydGVyVmFsdWVzID0gewogICAgICBuYXJyb3c6IFsiMSIsICIyIiwgIjMiLCAiNCJdLAogICAgICBhYmJyZXZpYXRlZDogWyJRMSIsICJRMiIsICJRMyIsICJRNCJdLAogICAgICB3aWRlOiBbIjFzdCBxdWFydGVyIiwgIjJuZCBxdWFydGVyIiwgIjNyZCBxdWFydGVyIiwgIjR0aCBxdWFydGVyIl0KICAgIH07CiAgICBtb250aFZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIkoiLCAiRiIsICJNIiwgIkEiLCAiTSIsICJKIiwgIkoiLCAiQSIsICJTIiwgIk8iLCAiTiIsICJEIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbCiAgICAgICAgIkphbiIsCiAgICAgICAgIkZlYiIsCiAgICAgICAgIk1hciIsCiAgICAgICAgIkFwciIsCiAgICAgICAgIk1heSIsCiAgICAgICAgIkp1biIsCiAgICAgICAgIkp1bCIsCiAgICAgICAgIkF1ZyIsCiAgICAgICAgIlNlcCIsCiAgICAgICAgIk9jdCIsCiAgICAgICAgIk5vdiIsCiAgICAgICAgIkRlYyIKICAgICAgXSwKICAgICAgd2lkZTogWwogICAgICAgICJKYW51YXJ5IiwKICAgICAgICAiRmVicnVhcnkiLAogICAgICAgICJNYXJjaCIsCiAgICAgICAgIkFwcmlsIiwKICAgICAgICAiTWF5IiwKICAgICAgICAiSnVuZSIsCiAgICAgICAgIkp1bHkiLAogICAgICAgICJBdWd1c3QiLAogICAgICAgICJTZXB0ZW1iZXIiLAogICAgICAgICJPY3RvYmVyIiwKICAgICAgICAiTm92ZW1iZXIiLAogICAgICAgICJEZWNlbWJlciIKICAgICAgXQogICAgfTsKICAgIGRheVZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIlMiLCAiTSIsICJUIiwgIlciLCAiVCIsICJGIiwgIlMiXSwKICAgICAgc2hvcnQ6IFsiU3UiLCAiTW8iLCAiVHUiLCAiV2UiLCAiVGgiLCAiRnIiLCAiU2EiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il0sCiAgICAgIHdpZGU6IFsKICAgICAgICAiU3VuZGF5IiwKICAgICAgICAiTW9uZGF5IiwKICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgIlRodXJzZGF5IiwKICAgICAgICAiRnJpZGF5IiwKICAgICAgICAiU2F0dXJkYXkiCiAgICAgIF0KICAgIH07CiAgICBkYXlQZXJpb2RWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogewogICAgICAgIGFtOiAiYSIsCiAgICAgICAgcG06ICJwIiwKICAgICAgICBtaWRuaWdodDogIm1pIiwKICAgICAgICBub29uOiAibiIsCiAgICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICAgIH0sCiAgICAgIGFiYnJldmlhdGVkOiB7CiAgICAgICAgYW06ICJBTSIsCiAgICAgICAgcG06ICJQTSIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaWRuaWdodCIsCiAgICAgICAgbm9vbjogIm5vb24iLAogICAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJldmVuaW5nIiwKICAgICAgICBuaWdodDogIm5pZ2h0IgogICAgICB9LAogICAgICB3aWRlOiB7CiAgICAgICAgYW06ICJhLm0uIiwKICAgICAgICBwbTogInAubS4iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAibW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJuaWdodCIKICAgICAgfQogICAgfTsKICAgIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogewogICAgICAgIGFtOiAiYSIsCiAgICAgICAgcG06ICJwIiwKICAgICAgICBtaWRuaWdodDogIm1pIiwKICAgICAgICBub29uOiAibiIsCiAgICAgICAgbW9ybmluZzogImluIHRoZSBtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJpbiB0aGUgYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiaW4gdGhlIGV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAiYXQgbmlnaHQiCiAgICAgIH0sCiAgICAgIGFiYnJldmlhdGVkOiB7CiAgICAgICAgYW06ICJBTSIsCiAgICAgICAgcG06ICJQTSIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaWRuaWdodCIsCiAgICAgICAgbm9vbjogIm5vb24iLAogICAgICAgIG1vcm5pbmc6ICJpbiB0aGUgbW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiaW4gdGhlIGFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImluIHRoZSBldmVuaW5nIiwKICAgICAgICBuaWdodDogImF0IG5pZ2h0IgogICAgICB9LAogICAgICB3aWRlOiB7CiAgICAgICAgYW06ICJhLm0uIiwKICAgICAgICBwbTogInAubS4iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAiaW4gdGhlIG1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImluIHRoZSBhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJpbiB0aGUgZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJhdCBuaWdodCIKICAgICAgfQogICAgfTsKICAgIG9yZGluYWxOdW1iZXIgPSAoZGlydHlOdW1iZXIsIF9vcHRpb25zKSA9PiB7CiAgICAgIGNvbnN0IG51bWJlcjIgPSBOdW1iZXIoZGlydHlOdW1iZXIpOwogICAgICBjb25zdCByZW0xMDAgPSBudW1iZXIyICUgMTAwOwogICAgICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHsKICAgICAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIyICsgInN0IjsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuIG51bWJlcjIgKyAibmQiOwogICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyMiArICJyZCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudW1iZXIyICsgInRoIjsKICAgIH07CiAgICBsb2NhbGl6ZSA9IHsKICAgICAgb3JkaW5hbE51bWJlciwKICAgICAgZXJhOiBidWlsZExvY2FsaXplRm4oewogICAgICAgIHZhbHVlczogZXJhVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiCiAgICAgIH0pLAogICAgICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oewogICAgICAgIHZhbHVlczogcXVhcnRlclZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIiwKICAgICAgICBhcmd1bWVudENhbGxiYWNrOiAocXVhcnRlcikgPT4gcXVhcnRlciAtIDEKICAgICAgfSksCiAgICAgIG1vbnRoOiBidWlsZExvY2FsaXplRm4oewogICAgICAgIHZhbHVlczogbW9udGhWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIKICAgICAgfSksCiAgICAgIGRheTogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGRheVZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIgogICAgICB9KSwKICAgICAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oewogICAgICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiLAogICAgICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsCiAgICAgICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogIndpZGUiCiAgICAgIH0pCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi5qcwpmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykgewogIHJldHVybiAoc3RyaW5nMywgb3B0aW9ucyA9IHt9KSA9PiB7CiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGg7CiAgICBjb25zdCBtYXRjaFBhdHRlcm4gPSB3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTsKICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChtYXRjaFBhdHRlcm4pOwogICAgaWYgKCFtYXRjaFJlc3VsdCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTsKICAgIGNvbnN0IHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTsKICAgIGNvbnN0IGtleTIgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpID8gZmluZEluZGV4MihwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKSA6ICgKICAgICAgLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGUKICAgICAgZmluZEtleShwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKQogICAgKTsKICAgIGxldCB2YWx1ZTI7CiAgICB2YWx1ZTIgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5MikgOiBrZXkyOwogICAgdmFsdWUyID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gKAogICAgICAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZQogICAgICBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUyKQogICAgKSA6IHZhbHVlMjsKICAgIGNvbnN0IHJlc3QgPSBzdHJpbmczLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTsKICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIHJlc3QgfTsKICB9Owp9CmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHsKICBmb3IgKGNvbnN0IGtleTIgaW4gb2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5MikgJiYgcHJlZGljYXRlKG9iamVjdFtrZXkyXSkpIHsKICAgICAgcmV0dXJuIGtleTI7CiAgICB9CiAgfQogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gZmluZEluZGV4MihhcnJheSwgcHJlZGljYXRlKSB7CiAgZm9yIChsZXQga2V5MiA9IDA7IGtleTIgPCBhcnJheS5sZW5ndGg7IGtleTIrKykgewogICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXkyXSkpIHsKICAgICAgcmV0dXJuIGtleTI7CiAgICB9CiAgfQogIHJldHVybiB2b2lkIDA7Cn0KdmFyIGluaXRfYnVpbGRNYXRjaEZuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hGbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcwpmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHsKICByZXR1cm4gKHN0cmluZzMsIG9wdGlvbnMgPSB7fSkgPT4gewogICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdHJpbmczLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsOwogICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdOwogICAgY29uc3QgcGFyc2VSZXN1bHQgPSBzdHJpbmczLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTsKICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsOwogICAgbGV0IHZhbHVlMiA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSkgOiBwYXJzZVJlc3VsdFswXTsKICAgIHZhbHVlMiA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZTIpIDogdmFsdWUyOwogICAgY29uc3QgcmVzdCA9IHN0cmluZzMuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpOwogICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlMiwgcmVzdCB9OwogIH07Cn0KdmFyIGluaXRfYnVpbGRNYXRjaFBhdHRlcm5GbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5qcwp2YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiwgbWF0Y2hFcmFQYXR0ZXJucywgcGFyc2VFcmFQYXR0ZXJucywgbWF0Y2hRdWFydGVyUGF0dGVybnMsIHBhcnNlUXVhcnRlclBhdHRlcm5zLCBtYXRjaE1vbnRoUGF0dGVybnMsIHBhcnNlTW9udGhQYXR0ZXJucywgbWF0Y2hEYXlQYXR0ZXJucywgcGFyc2VEYXlQYXR0ZXJucywgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucywgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucywgbWF0Y2g7CnZhciBpbml0X21hdGNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL21hdGNoLmpzIigpIHsKICAgIGluaXRfYnVpbGRNYXRjaEZuKCk7CiAgICBpbml0X2J1aWxkTWF0Y2hQYXR0ZXJuRm4oKTsKICAgIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcZCspKHRofHN0fG5kfHJkKT8vaTsKICAgIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXGQrL2k7CiAgICBtYXRjaEVyYVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eKGJ8YSkvaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKGJcLj9ccz9jXC4/fGJcLj9ccz9jXC4/XHM/ZVwuP3xhXC4/XHM/ZFwuP3xjXC4/XHM/ZVwuPykvaSwKICAgICAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pCiAgICB9OwogICAgcGFyc2VFcmFQYXR0ZXJucyA9IHsKICAgICAgYW55OiBbL15iL2ksIC9eKGF8YykvaV0KICAgIH07CiAgICBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXlsxMjM0XS9pLAogICAgICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksCiAgICAgIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pCiAgICB9OwogICAgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7CiAgICAgIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldCiAgICB9OwogICAgbWF0Y2hNb250aFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLAogICAgICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksCiAgICAgIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2kKICAgIH07CiAgICBwYXJzZU1vbnRoUGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogWwogICAgICAgIC9eai9pLAogICAgICAgIC9eZi9pLAogICAgICAgIC9ebS9pLAogICAgICAgIC9eYS9pLAogICAgICAgIC9ebS9pLAogICAgICAgIC9eai9pLAogICAgICAgIC9eai9pLAogICAgICAgIC9eYS9pLAogICAgICAgIC9ecy9pLAogICAgICAgIC9eby9pLAogICAgICAgIC9ebi9pLAogICAgICAgIC9eZC9pCiAgICAgIF0sCiAgICAgIGFueTogWwogICAgICAgIC9eamEvaSwKICAgICAgICAvXmYvaSwKICAgICAgICAvXm1hci9pLAogICAgICAgIC9eYXAvaSwKICAgICAgICAvXm1heS9pLAogICAgICAgIC9eanVuL2ksCiAgICAgICAgL15qdWwvaSwKICAgICAgICAvXmF1L2ksCiAgICAgICAgL15zL2ksCiAgICAgICAgL15vL2ksCiAgICAgICAgL15uL2ksCiAgICAgICAgL15kL2kKICAgICAgXQogICAgfTsKICAgIG1hdGNoRGF5UGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogL15bc210d2ZdL2ksCiAgICAgIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSwKICAgICAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2kKICAgIH07CiAgICBwYXJzZURheVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sCiAgICAgIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV0KICAgIH07CiAgICBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSwKICAgICAgYW55OiAvXihbYXBdXC4/XHM/bVwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaQogICAgfTsKICAgIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7CiAgICAgIGFueTogewogICAgICAgIGFtOiAvXmEvaSwKICAgICAgICBwbTogL15wL2ksCiAgICAgICAgbWlkbmlnaHQ6IC9ebWkvaSwKICAgICAgICBub29uOiAvXm5vL2ksCiAgICAgICAgbW9ybmluZzogL21vcm5pbmcvaSwKICAgICAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSwKICAgICAgICBldmVuaW5nOiAvZXZlbmluZy9pLAogICAgICAgIG5pZ2h0OiAvbmlnaHQvaQogICAgICB9CiAgICB9OwogICAgbWF0Y2ggPSB7CiAgICAgIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oewogICAgICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiwKICAgICAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sCiAgICAgICAgdmFsdWVDYWxsYmFjazogKHZhbHVlMikgPT4gcGFyc2VJbnQodmFsdWUyLCAxMCkKICAgICAgfSksCiAgICAgIGVyYTogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdE1hdGNoV2lkdGg6ICJ3aWRlIiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIsCiAgICAgICAgdmFsdWVDYWxsYmFjazogKGluZGV4MikgPT4gaW5kZXgyICsgMQogICAgICB9KSwKICAgICAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KSwKICAgICAgZGF5OiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsCiAgICAgICAgZGVmYXVsdE1hdGNoV2lkdGg6ICJ3aWRlIiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KSwKICAgICAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdE1hdGNoV2lkdGg6ICJhbnkiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiCiAgICAgIH0pCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy5qcwp2YXIgZW5VUywgZW5fVVNfZGVmYXVsdDsKdmFyIGluaXRfZW5fVVMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTLmpzIigpIHsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2UoKTsKICAgIGluaXRfZm9ybWF0TG9uZygpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZSgpOwogICAgaW5pdF9sb2NhbGl6ZSgpOwogICAgaW5pdF9tYXRjaCgpOwogICAgZW5VUyA9IHsKICAgICAgY29kZTogImVuLVVTIiwKICAgICAgZm9ybWF0RGlzdGFuY2UsCiAgICAgIGZvcm1hdExvbmcsCiAgICAgIGZvcm1hdFJlbGF0aXZlLAogICAgICBsb2NhbGl6ZSwKICAgICAgbWF0Y2gsCiAgICAgIG9wdGlvbnM6IHsKICAgICAgICB3ZWVrU3RhcnRzT246IDAsCiAgICAgICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxCiAgICAgIH0KICAgIH07CiAgICBlbl9VU19kZWZhdWx0ID0gZW5VUzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRMb2NhbGUuanMKdmFyIGluaXRfZGVmYXVsdExvY2FsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRMb2NhbGUuanMiKCkgewogICAgaW5pdF9lbl9VUygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheU9mWWVhci5qcwpmdW5jdGlvbiBnZXREYXlPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKF9kYXRlLCBzdGFydE9mWWVhcihfZGF0ZSkpOwogIGNvbnN0IGRheU9mWWVhciA9IGRpZmYgKyAxOwogIHJldHVybiBkYXlPZlllYXI7Cn0KdmFyIGdldERheU9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9nZXREYXlPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5T2ZZZWFyLmpzIigpIHsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X3N0YXJ0T2ZZZWFyKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF5T2ZZZWFyX2RlZmF1bHQgPSBnZXREYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcwpmdW5jdGlvbiBnZXRJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9ICtzdGFydE9mSVNPV2VlayhfZGF0ZSkgLSArc3RhcnRPZklTT1dlZWtZZWFyKF9kYXRlKTsKICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7Cn0KdmFyIGdldElTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09XZWVrLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldElTT1dlZWtfZGVmYXVsdCA9IGdldElTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla1llYXIuanMKZnVuY3Rpb24gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IGZpcnN0V2Vla09mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7CiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTsKICBjb25zdCBmaXJzdFdlZWtPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldEZ1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7CiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTsKICBpZiAoK19kYXRlID49ICtzdGFydE9mTmV4dFllYXIpIHsKICAgIHJldHVybiB5ZWFyICsgMTsKICB9IGVsc2UgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZlRoaXNZZWFyKSB7CiAgICByZXR1cm4geWVhcjsKICB9IGVsc2UgewogICAgcmV0dXJuIHllYXIgLSAxOwogIH0KfQp2YXIgZ2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla1llYXJfZGVmYXVsdCA9IGdldFdlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5qcwpmdW5jdGlvbiBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgeWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZpcnN0V2VlayA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZmlyc3RXZWVrLnNldEZ1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7CiAgZmlyc3RXZWVrLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IF9kYXRlID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZXZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgc3RhcnRPZldlZWtZZWFyX2RlZmF1bHQgPSBzdGFydE9mV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcwpmdW5jdGlvbiBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9ICtzdGFydE9mV2VlayhfZGF0ZSwgb3B0aW9ucykgLSArc3RhcnRPZldlZWtZZWFyKF9kYXRlLCBvcHRpb25zKTsKICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7Cn0KdmFyIGdldFdlZWtfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtfZGVmYXVsdCA9IGdldFdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MuanMKZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlcjIsIHRhcmdldExlbmd0aCkgewogIGNvbnN0IHNpZ24gPSBudW1iZXIyIDwgMCA/ICItIiA6ICIiOwogIGNvbnN0IG91dHB1dCA9IE1hdGguYWJzKG51bWJlcjIpLnRvU3RyaW5nKCkucGFkU3RhcnQodGFyZ2V0TGVuZ3RoLCAiMCIpOwogIHJldHVybiBzaWduICsgb3V0cHV0Owp9CnZhciBpbml0X2FkZExlYWRpbmdaZXJvcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2FkZExlYWRpbmdaZXJvcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzCnZhciBsaWdodEZvcm1hdHRlcnM7CnZhciBpbml0X2xpZ2h0Rm9ybWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9saWdodEZvcm1hdHRlcnMuanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGxpZ2h0Rm9ybWF0dGVycyA9IHsKICAgICAgLy8gWWVhcgogICAgICB5KGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gInl5IiA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNb250aAogICAgICBNKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgcmV0dXJuIHRva2VuID09PSAiTSIgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgdGhlIG1vbnRoCiAgICAgIGQoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0RGF0ZSgpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBBTSBvciBQTQogICAgICBhKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRIb3VycygpIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgY2FzZSAiYWEiOgogICAgICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlOwogICAgICAgICAgY2FzZSAiYWFhYWEiOgogICAgICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAiYW0iID8gImEubS4iIDogInAubS4iOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0xMl0KICAgICAgaChkYXRlLCB0b2tlbikgewogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzAtMjNdCiAgICAgIEgoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gTWludXRlCiAgICAgIG0oZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0TWludXRlcygpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBTZWNvbmQKICAgICAgcyhkYXRlLCB0b2tlbikgewogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEZyYWN0aW9uIG9mIHNlY29uZAogICAgICBTKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzMiA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgICAgICAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLnRydW5jKAogICAgICAgICAgbWlsbGlzZWNvbmRzMiAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMuanMKZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRlbGltaXRlciA9ICIiKSB7CiAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAiLSIgOiAiKyI7CiAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTsKICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApOwogIGNvbnN0IG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDsKICBpZiAobWludXRlcyA9PT0gMCkgewogICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpOwogIH0KICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7Cn0KZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGVsaW1pdGVyKSB7CiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7CiAgICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICItIiA6ICIrIjsKICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7CiAgfQogIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlcik7Cn0KZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIgPSAiIikgewogIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gIi0iIDogIisiOwogIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgY29uc3QgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCksIDIpOwogIGNvbnN0IG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpOwogIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzOwp9CnZhciBkYXlQZXJpb2RFbnVtLCBmb3JtYXR0ZXJzOwp2YXIgaW5pdF9mb3JtYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMuanMiKCkgewogICAgaW5pdF9nZXREYXlPZlllYXIoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF9saWdodEZvcm1hdHRlcnMoKTsKICAgIGRheVBlcmlvZEVudW0gPSB7CiAgICAgIGFtOiAiYW0iLAogICAgICBwbTogInBtIiwKICAgICAgbWlkbmlnaHQ6ICJtaWRuaWdodCIsCiAgICAgIG5vb246ICJub29uIiwKICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICB9OwogICAgZm9ybWF0dGVycyA9IHsKICAgICAgLy8gRXJhCiAgICAgIEc6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBlcmEgPSBkYXRlLmdldEZ1bGxZZWFyKCkgPiAwID8gMSA6IDA7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gQUQsIEJDCiAgICAgICAgICBjYXNlICJHIjoKICAgICAgICAgIGNhc2UgIkdHIjoKICAgICAgICAgIGNhc2UgIkdHRyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KTsKICAgICAgICAgIC8vIEEsIEIKICAgICAgICAgIGNhc2UgIkdHR0dHIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5lcmEoZXJhLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0CiAgICAgICAgICBjYXNlICJHR0dHIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogIndpZGUiIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gWWVhcgogICAgICB5OiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAieW8iKSB7CiAgICAgICAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyOwogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHllYXIsIHsgdW5pdDogInllYXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyCiAgICAgIFk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBzaWduZWRXZWVrWWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIGNvbnN0IHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7CiAgICAgICAgaWYgKHRva2VuID09PSAiWVkiKSB7CiAgICAgICAgICBjb25zdCB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDsKICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuID09PSAiWW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHsgdW5pdDogInllYXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICBSOiBmdW5jdGlvbihkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IGlzb1dlZWtZZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uCiAgICAgIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOgogICAgICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfAogICAgICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfAogICAgICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfAogICAgICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfAogICAgICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfAogICAgICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsCiAgICAgIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC4KICAgICAgdTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gUXVhcnRlcgogICAgICBROiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJRIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTsKICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0CiAgICAgICAgICBjYXNlICJRUSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgIlFvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgIlFRUSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJRUVFRUSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJRUVFRIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyCiAgICAgIHE6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQKICAgICAgICAgIGNhc2UgInEiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpOwogICAgICAgICAgLy8gMDEsIDAyLCAwMywgMDQKICAgICAgICAgIGNhc2UgInFxIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAicW8iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIocXVhcnRlciwgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAicXFxIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5xdWFydGVyKHF1YXJ0ZXIsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgInFxcXFxIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5xdWFydGVyKHF1YXJ0ZXIsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgInFxcXEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5xdWFydGVyKHF1YXJ0ZXIsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIE1vbnRoCiAgICAgIE06IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgIGNhc2UgIk1NIjoKICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGgKICAgICAgICAgIGNhc2UgIk1vIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwgeyB1bml0OiAibW9udGgiIH0pOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gSiwgRiwgLi4uLCBECiAgICAgICAgICBjYXNlICJNTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIKICAgICAgICAgIGNhc2UgIk1NTU0iOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBTdGFuZC1hbG9uZSBtb250aAogICAgICBMOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTCI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTsKICAgICAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTEwiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJMbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogIm1vbnRoIiB9KTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTExMIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTExMTEwiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyCiAgICAgIHc6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB3ZWVrID0gZ2V0V2VlayhkYXRlLCBvcHRpb25zKTsKICAgICAgICBpZiAodG9rZW4gPT09ICJ3byIpIHsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcih3ZWVrLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBJU08gd2VlayBvZiB5ZWFyCiAgICAgIEk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBpc29XZWVrID0gZ2V0SVNPV2VlayhkYXRlKTsKICAgICAgICBpZiAodG9rZW4gPT09ICJJbyIpIHsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihpc29XZWVrLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgdGhlIG1vbnRoCiAgICAgIGQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJkbyIpIHsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihkYXRlLmdldERhdGUoKSwgeyB1bml0OiAiZGF0ZSIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIERheSBvZiB5ZWFyCiAgICAgIEQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZlllYXIgPSBnZXREYXlPZlllYXIoZGF0ZSk7CiAgICAgICAgaWYgKHRva2VuID09PSAiRG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7IHVuaXQ6ICJkYXlPZlllYXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHdlZWsKICAgICAgRTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgIGNhc2UgIkVFIjoKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgIkVFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJFRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJFRUVFIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gTG9jYWwgZGF5IG9mIHdlZWsKICAgICAgZTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNzsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbikKICAgICAgICAgIGNhc2UgImUiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTsKICAgICAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWUKICAgICAgICAgIGNhc2UgImVlIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGgKICAgICAgICAgIGNhc2UgImVvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6ICJkYXkiIH0pOwogICAgICAgICAgY2FzZSAiZWVlIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHUKICAgICAgICAgIGNhc2UgImVlZWVlZSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImVlZWUiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlawogICAgICBjOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTsKICAgICAgICBjb25zdCBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApCiAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7CiAgICAgICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlCiAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGgKICAgICAgICAgIGNhc2UgImNvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6ICJkYXkiIH0pOwogICAgICAgICAgY2FzZSAiY2NjIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHUKICAgICAgICAgIGNhc2UgImNjY2NjYyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBJU08gZGF5IG9mIHdlZWsKICAgICAgaTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlazsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAyCiAgICAgICAgICBjYXNlICJpIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspOwogICAgICAgICAgLy8gMDIKICAgICAgICAgIGNhc2UgImlpIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7CiAgICAgICAgICAvLyAybmQKICAgICAgICAgIGNhc2UgImlvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiaWlpIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHUKICAgICAgICAgIGNhc2UgImlpaWlpaSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImlpaWkiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBBTSBvciBQTQogICAgICBhOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gInBtIiA6ICJhbSI7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjYXNlICJhYSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYWFhYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb24KICAgICAgYjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7CiAgICAgICAgaWYgKGhvdXJzID09PSAxMikgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uOwogICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgIGNhc2UgImJiIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjYXNlICJiYmJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJiYmJiIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodAogICAgICBCOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTsKICAgICAgICBpZiAoaG91cnMgPj0gMTcpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZzsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiQiI6CiAgICAgICAgICBjYXNlICJCQiI6CiAgICAgICAgICBjYXNlICJCQkIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJCQkJCQiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJCQkJCIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0xMl0KICAgICAgaDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gImhvIikgewogICAgICAgICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7CiAgICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBIb3VyIFswLTIzXQogICAgICBIOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAiSG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRIb3VycygpLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMC0xMV0KICAgICAgSzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7CiAgICAgICAgaWYgKHRva2VuID09PSAiS28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBIb3VyIFsxLTI0XQogICAgICBrOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDsKICAgICAgICBpZiAodG9rZW4gPT09ICJrbyIpIHsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbnV0ZQogICAgICBtOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAibW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRNaW51dGVzKCksIHsgdW5pdDogIm1pbnV0ZSIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIFNlY29uZAogICAgICBzOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAic28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRTZWNvbmRzKCksIHsgdW5pdDogInNlY29uZCIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIEZyYWN0aW9uIG9mIHNlY29uZAogICAgICBTOiBmdW5jdGlvbihkYXRlLCB0b2tlbikgewogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApCiAgICAgIFg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHsKICAgICAgICAgIHJldHVybiAiWiI7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzCiAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7CiAgICAgICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzCiAgICAgICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGAKICAgICAgICAgIGNhc2UgIlhYWFgiOgogICAgICAgICAgY2FzZSAiWFgiOgogICAgICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYAogICAgICAgICAgY2FzZSAiWFhYWFgiOgogICAgICAgICAgY2FzZSAiWFhYIjoKICAgICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudCkKICAgICAgeDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkgewogICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzCiAgICAgICAgICBjYXNlICJ4IjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7CiAgICAgICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzCiAgICAgICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGAKICAgICAgICAgIGNhc2UgInh4eHgiOgogICAgICAgICAgY2FzZSAieHgiOgogICAgICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YAogICAgICAgICAgY2FzZSAieHh4eHgiOgogICAgICAgICAgY2FzZSAieHh4IjoKICAgICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gVGltZXpvbmUgKEdNVCkKICAgICAgTzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkgewogICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFNob3J0CiAgICAgICAgICBjYXNlICJPIjoKICAgICAgICAgIGNhc2UgIk9PIjoKICAgICAgICAgIGNhc2UgIk9PTyI6CiAgICAgICAgICAgIHJldHVybiAiR01UIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICI6Iik7CiAgICAgICAgICAvLyBMb25nCiAgICAgICAgICBjYXNlICJPT09PIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAiR01UIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbikKICAgICAgejogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkgewogICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFNob3J0CiAgICAgICAgICBjYXNlICJ6IjoKICAgICAgICAgIGNhc2UgInp6IjoKICAgICAgICAgIGNhc2UgInp6eiI6CiAgICAgICAgICAgIHJldHVybiAiR01UIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICI6Iik7CiAgICAgICAgICAvLyBMb25nCiAgICAgICAgICBjYXNlICJ6enp6IjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAiR01UIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU2Vjb25kcyB0aW1lc3RhbXAKICAgICAgdDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkgewogICAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBNYXRoLnRydW5jKCtkYXRlIC8gMWUzKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcDIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAKICAgICAgVDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkgewogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoK2RhdGUsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMuanMKdmFyIGRhdGVMb25nRm9ybWF0dGVyLCB0aW1lTG9uZ0Zvcm1hdHRlciwgZGF0ZVRpbWVMb25nRm9ybWF0dGVyLCBsb25nRm9ybWF0dGVyczsKdmFyIGluaXRfbG9uZ0Zvcm1hdHRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMuanMiKCkgewogICAgZGF0ZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZzIpID0+IHsKICAgICAgc3dpdGNoIChwYXR0ZXJuKSB7CiAgICAgICAgY2FzZSAiUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAic2hvcnQiIH0pOwogICAgICAgIGNhc2UgIlBQIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi5kYXRlKHsgd2lkdGg6ICJtZWRpdW0iIH0pOwogICAgICAgIGNhc2UgIlBQUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAibG9uZyIgfSk7CiAgICAgICAgY2FzZSAiUFBQUCI6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi5kYXRlKHsgd2lkdGg6ICJmdWxsIiB9KTsKICAgICAgfQogICAgfTsKICAgIHRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIHN3aXRjaCAocGF0dGVybikgewogICAgICAgIGNhc2UgInAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogInNob3J0IiB9KTsKICAgICAgICBjYXNlICJwcCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIudGltZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICBjYXNlICJwcHAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgIGNhc2UgInBwcHAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIudGltZSh7IHdpZHRoOiAiZnVsbCIgfSk7CiAgICAgIH0KICAgIH07CiAgICBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZzIpID0+IHsKICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTsKICAgICAgY29uc3QgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTsKICAgICAgY29uc3QgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTsKICAgICAgaWYgKCF0aW1lUGF0dGVybikgewogICAgICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nMik7CiAgICAgIH0KICAgICAgbGV0IGRhdGVUaW1lRm9ybWF0OwogICAgICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7CiAgICAgICAgY2FzZSAiUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJzaG9ydCIgfSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJQUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJtZWRpdW0iIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFBQIjoKICAgICAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZzIuZGF0ZVRpbWUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFBQUCI6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZzIuZGF0ZVRpbWUoeyB3aWR0aDogImZ1bGwiIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoInt7ZGF0ZX19IiwgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcyKSkucmVwbGFjZSgie3t0aW1lfX0iLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZzIpKTsKICAgIH07CiAgICBsb25nRm9ybWF0dGVycyA9IHsKICAgICAgcDogdGltZUxvbmdGb3JtYXR0ZXIsCiAgICAgIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL3Byb3RlY3RlZFRva2Vucy5qcwpmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7CiAgcmV0dXJuIGRheU9mWWVhclRva2VuUkUudGVzdCh0b2tlbik7Cn0KZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7CiAgcmV0dXJuIHdlZWtZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTsKfQpmdW5jdGlvbiB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQyLCBpbnB1dCkgewogIGNvbnN0IF9tZXNzYWdlID0gbWVzc2FnZSh0b2tlbiwgZm9ybWF0MiwgaW5wdXQpOwogIGNvbnNvbGUud2FybihfbWVzc2FnZSk7CiAgaWYgKHRocm93VG9rZW5zLmluY2x1ZGVzKHRva2VuKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoX21lc3NhZ2UpOwp9CmZ1bmN0aW9uIG1lc3NhZ2UodG9rZW4sIGZvcm1hdDIsIGlucHV0KSB7CiAgY29uc3Qgc3ViamVjdCA9IHRva2VuWzBdID09PSAiWSIgPyAieWVhcnMiIDogImRheXMgb2YgdGhlIG1vbnRoIjsKICByZXR1cm4gYFVzZSBcYCR7dG9rZW4udG9Mb3dlckNhc2UoKX1cYCBpbnN0ZWFkIG9mIFxgJHt0b2tlbn1cYCAoaW4gXGAke2Zvcm1hdDJ9XGApIGZvciBmb3JtYXR0aW5nICR7c3ViamVjdH0gdG8gdGhlIGlucHV0IFxgJHtpbnB1dH1cYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYDsKfQp2YXIgZGF5T2ZZZWFyVG9rZW5SRSwgd2Vla1llYXJUb2tlblJFLCB0aHJvd1Rva2VuczsKdmFyIGluaXRfcHJvdGVjdGVkVG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvcHJvdGVjdGVkVG9rZW5zLmpzIigpIHsKICAgIGRheU9mWWVhclRva2VuUkUgPSAvXkQrJC87CiAgICB3ZWVrWWVhclRva2VuUkUgPSAvXlkrJC87CiAgICB0aHJvd1Rva2VucyA9IFsiRCIsICJERCIsICJZWSIsICJZWVlZIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0LmpzCmZ1bmN0aW9uIGZvcm1hdChkYXRlLCBmb3JtYXRTdHIsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBsZXQgcGFydHMgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gInAiIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAiUCIpIHsKICAgICAgY29uc3QgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTsKICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7CiAgICB9CiAgICByZXR1cm4gc3Vic3RyaW5nOwogIH0pLmpvaW4oIiIpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBpZiAoc3Vic3RyaW5nID09PSAiJyciKSB7CiAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogIiciIH07CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZykgfTsKICAgIH0KICAgIGlmIChmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXSkgewogICAgICByZXR1cm4geyBpc1Rva2VuOiB0cnVlLCB2YWx1ZTogc3Vic3RyaW5nIH07CiAgICB9CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCIgKyBmaXJzdENoYXJhY3RlciArICJgIgogICAgICApOwogICAgfQogICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBzdWJzdHJpbmcgfTsKICB9KTsKICBpZiAobG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcikgewogICAgcGFydHMgPSBsb2NhbGUubG9jYWxpemUucHJlcHJvY2Vzc29yKG9yaWdpbmFsRGF0ZSwgcGFydHMpOwogIH0KICBjb25zdCBmb3JtYXR0ZXJPcHRpb25zID0gewogICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlLAogICAgd2Vla1N0YXJ0c09uLAogICAgbG9jYWxlCiAgfTsKICByZXR1cm4gcGFydHMubWFwKChwYXJ0KSA9PiB7CiAgICBpZiAoIXBhcnQuaXNUb2tlbikgcmV0dXJuIHBhcnQudmFsdWU7CiAgICBjb25zdCB0b2tlbiA9IHBhcnQudmFsdWU7CiAgICBpZiAoIW9wdGlvbnM/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHx8ICFvcHRpb25zPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pKSB7CiAgICAgIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0ciwgU3RyaW5nKGRhdGUpKTsKICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlcjIgPSBmb3JtYXR0ZXJzW3Rva2VuWzBdXTsKICAgIHJldHVybiBmb3JtYXR0ZXIyKG9yaWdpbmFsRGF0ZSwgdG9rZW4sIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7CiAgfSkuam9pbigiIik7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7CiAgY29uc3QgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApOwogIGlmICghbWF0Y2hlZCkgewogICAgcmV0dXJuIGlucHV0OwogIH0KICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCAiJyIpOwp9CnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwLCBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCwgZXNjYXBlZFN0cmluZ1JlZ0V4cCwgZG91YmxlUXVvdGVSZWdFeHAsIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwLCBmb3JtYXRfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZm9ybWF0dGVycygpOwogICAgaW5pdF9sb25nRm9ybWF0dGVycygpOwogICAgaW5pdF9wcm90ZWN0ZWRUb2tlbnMoKTsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87CiAgICBmb3JtYXRfZGVmYXVsdCA9IGZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZTIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGUgPz8gZW5VUzsKICBjb25zdCBtaW51dGVzSW5BbG1vc3RUd29EYXlzID0gMjUyMDsKICBjb25zdCBjb21wYXJpc29uID0gY29tcGFyZUFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKTsKICBpZiAoaXNOYU4oY29tcGFyaXNvbikpIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7CiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCwKICAgIGNvbXBhcmlzb24KICB9KTsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICAuLi5jb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXQogICk7CiAgY29uc3Qgc2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMoZWFybGllckRhdGVfLCBsYXRlckRhdGVfKTsKICBjb25zdCBvZmZzZXRJblNlY29uZHMgPSAoZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhlYXJsaWVyRGF0ZV8pIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGVfKSkgLyAxZTM7CiAgY29uc3QgbWludXRlcyA9IE1hdGgucm91bmQoKHNlY29uZHMgLSBvZmZzZXRJblNlY29uZHMpIC8gNjApOwogIGxldCBtb250aHMyOwogIGlmIChtaW51dGVzIDwgMikgewogICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVTZWNvbmRzKSB7CiAgICAgIGlmIChzZWNvbmRzIDwgNSkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLCA1LCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAxMCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWFNlY29uZHMiLCAxMCwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMjApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgMjAsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDQwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiaGFsZkFNaW51dGUiLCAwLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA2MCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImxlc3NUaGFuWE1pbnV0ZXMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKG1pbnV0ZXMgPT09IDApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIG1pbnV0ZXMsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA0NSkgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IDkwKSB7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhIb3VycyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luRGF5KSB7CiAgICBjb25zdCBob3VycyA9IE1hdGgucm91bmQobWludXRlcyAvIDYwKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WEhvdXJzIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luQWxtb3N0VHdvRGF5cykgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieERheXMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7CiAgICBjb25zdCBkYXlzMiA9IE1hdGgucm91bmQobWludXRlcyAvIG1pbnV0ZXNJbkRheSk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsIGRheXMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoICogMikgewogICAgbW9udGhzMiA9IE1hdGgucm91bmQobWludXRlcyAvIG1pbnV0ZXNJbk1vbnRoKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WE1vbnRocyIsIG1vbnRoczIsIGxvY2FsaXplT3B0aW9ucyk7CiAgfQogIG1vbnRoczIgPSBkaWZmZXJlbmNlSW5Nb250aHMoZWFybGllckRhdGVfLCBsYXRlckRhdGVfKTsKICBpZiAobW9udGhzMiA8IDEyKSB7CiAgICBjb25zdCBuZWFyZXN0TW9udGggPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIiwgbmVhcmVzdE1vbnRoLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSB7CiAgICBjb25zdCBtb250aHNTaW5jZVN0YXJ0T2ZZZWFyID0gbW9udGhzMiAlIDEyOwogICAgY29uc3QgeWVhcnMgPSBNYXRoLnRydW5jKG1vbnRoczIgLyAxMik7CiAgICBpZiAobW9udGhzU2luY2VTdGFydE9mWWVhciA8IDMpIHsKICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYWWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICAgIH0gZWxzZSBpZiAobW9udGhzU2luY2VTdGFydE9mWWVhciA8IDkpIHsKICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgib3ZlclhZZWFycyIsIHllYXJzLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWxtb3N0WFllYXJzIiwgeWVhcnMgKyAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgfQogIH0KfQp2YXIgZm9ybWF0RGlzdGFuY2VfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RGlzdGFuY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBmb3JtYXREaXN0YW5jZV9kZWZhdWx0ID0gZm9ybWF0RGlzdGFuY2UyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlU3RyaWN0LmpzCmZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlU3RyaWN0KGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7CiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGxvY2FsaXplT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHsKICAgIGFkZFN1ZmZpeDogb3B0aW9ucz8uYWRkU3VmZml4LAogICAgY29tcGFyaXNvbgogIH0pOwogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIC4uLmNvbXBhcmlzb24gPiAwID8gW2VhcmxpZXJEYXRlLCBsYXRlckRhdGVdIDogW2xhdGVyRGF0ZSwgZWFybGllckRhdGVdCiAgKTsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kID8/ICJyb3VuZCIpOwogIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBlYXJsaWVyRGF0ZV8uZ2V0VGltZSgpIC0gbGF0ZXJEYXRlXy5nZXRUaW1lKCk7CiAgY29uc3QgbWludXRlcyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXyk7CiAgY29uc3QgZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPSAobWlsbGlzZWNvbmRzMiAtIHRpbWV6b25lT2Zmc2V0KSAvIG1pbGxpc2Vjb25kc0luTWludXRlOwogIGNvbnN0IGRlZmF1bHRVbml0ID0gb3B0aW9ucz8udW5pdDsKICBsZXQgdW5pdDsKICBpZiAoIWRlZmF1bHRVbml0KSB7CiAgICBpZiAobWludXRlcyA8IDEpIHsKICAgICAgdW5pdCA9ICJzZWNvbmQiOwogICAgfSBlbHNlIGlmIChtaW51dGVzIDwgNjApIHsKICAgICAgdW5pdCA9ICJtaW51dGUiOwogICAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luRGF5KSB7CiAgICAgIHVuaXQgPSAiaG91ciI7CiAgICB9IGVsc2UgaWYgKGRzdE5vcm1hbGl6ZWRNaW51dGVzIDwgbWludXRlc0luTW9udGgpIHsKICAgICAgdW5pdCA9ICJkYXkiOwogICAgfSBlbHNlIGlmIChkc3ROb3JtYWxpemVkTWludXRlcyA8IG1pbnV0ZXNJblllYXIpIHsKICAgICAgdW5pdCA9ICJtb250aCI7CiAgICB9IGVsc2UgewogICAgICB1bml0ID0gInllYXIiOwogICAgfQogIH0gZWxzZSB7CiAgICB1bml0ID0gZGVmYXVsdFVuaXQ7CiAgfQogIGlmICh1bml0ID09PSAic2Vjb25kIikgewogICAgY29uc3Qgc2Vjb25kcyA9IHJvdW5kaW5nTWV0aG9kKG1pbGxpc2Vjb25kczIgLyAxZTMpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieFNlY29uZHMiLCBzZWNvbmRzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1pbnV0ZSIpIHsKICAgIGNvbnN0IHJvdW5kZWRNaW51dGVzID0gcm91bmRpbmdNZXRob2QobWludXRlcyk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIHJvdW5kZWRNaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gImhvdXIiKSB7CiAgICBjb25zdCBob3VycyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMgLyA2MCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4SG91cnMiLCBob3VycywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJkYXkiKSB7CiAgICBjb25zdCBkYXlzMiA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luRGF5KTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwgZGF5czIsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmICh1bml0ID09PSAibW9udGgiKSB7CiAgICBjb25zdCBtb250aHMyID0gcm91bmRpbmdNZXRob2QoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbW9udGhzMiA9PT0gMTIgJiYgZGVmYXVsdFVuaXQgIT09ICJtb250aCIgPyBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhZZWFycyIsIDEsIGxvY2FsaXplT3B0aW9ucykgOiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNb250aHMiLCBtb250aHMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSB7CiAgICBjb25zdCB5ZWFycyA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luWWVhcik7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICB9Cn0KdmFyIGZvcm1hdERpc3RhbmNlU3RyaWN0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlU3RyaWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlU3RyaWN0LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBmb3JtYXREaXN0YW5jZVN0cmljdF9kZWZhdWx0ID0gZm9ybWF0RGlzdGFuY2VTdHJpY3Q7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZm9ybWF0RGlzdGFuY2UyKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSwgb3B0aW9ucyk7Cn0KdmFyIGZvcm1hdERpc3RhbmNlVG9Ob3dfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVRvTm93LmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2Zvcm1hdERpc3RhbmNlMigpOwogICAgZm9ybWF0RGlzdGFuY2VUb05vd19kZWZhdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LmpzCmZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBmb3JtYXREaXN0YW5jZVN0cmljdChkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpOwp9CnZhciBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVN0cmljdCgpOwogICAgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdF9kZWZhdWx0ID0gZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREdXJhdGlvbi5qcwpmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGUgPz8gZW5VUzsKICBjb25zdCBmb3JtYXQyID0gb3B0aW9ucz8uZm9ybWF0ID8/IGRlZmF1bHRGb3JtYXQ7CiAgY29uc3QgemVybyA9IG9wdGlvbnM/Lnplcm8gPz8gZmFsc2U7CiAgY29uc3QgZGVsaW1pdGVyID0gb3B0aW9ucz8uZGVsaW1pdGVyID8/ICIgIjsKICBpZiAoIWxvY2FsZS5mb3JtYXREaXN0YW5jZSkgewogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCByZXN1bHQgPSBmb3JtYXQyLnJlZHVjZSgoYWNjLCB1bml0KSA9PiB7CiAgICBjb25zdCB0b2tlbiA9IGB4JHt1bml0LnJlcGxhY2UoLyheLikvLCAobTYpID0+IG02LnRvVXBwZXJDYXNlKCkpfWA7CiAgICBjb25zdCB2YWx1ZTIgPSBkdXJhdGlvblt1bml0XTsKICAgIGlmICh2YWx1ZTIgIT09IHZvaWQgMCAmJiAoemVybyB8fCBkdXJhdGlvblt1bml0XSkpIHsKICAgICAgcmV0dXJuIGFjYy5jb25jYXQobG9jYWxlLmZvcm1hdERpc3RhbmNlKHRva2VuLCB2YWx1ZTIpKTsKICAgIH0KICAgIHJldHVybiBhY2M7CiAgfSwgW10pLmpvaW4oZGVsaW1pdGVyKTsKICByZXR1cm4gcmVzdWx0Owp9CnZhciBkZWZhdWx0Rm9ybWF0LCBmb3JtYXREdXJhdGlvbl9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREdXJhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREdXJhdGlvbi5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGRlZmF1bHRGb3JtYXQgPSBbCiAgICAgICJ5ZWFycyIsCiAgICAgICJtb250aHMiLAogICAgICAid2Vla3MiLAogICAgICAiZGF5cyIsCiAgICAgICJob3VycyIsCiAgICAgICJtaW51dGVzIiwKICAgICAgInNlY29uZHMiCiAgICBdOwogICAgZm9ybWF0RHVyYXRpb25fZGVmYXVsdCA9IGZvcm1hdER1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTy5qcwpmdW5jdGlvbiBmb3JtYXRJU08oZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oK2RhdGVfKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBmb3JtYXQyID0gb3B0aW9ucz8uZm9ybWF0ID8/ICJleHRlbmRlZCI7CiAgY29uc3QgcmVwcmVzZW50YXRpb24gPSBvcHRpb25zPy5yZXByZXNlbnRhdGlvbiA/PyAiY29tcGxldGUiOwogIGxldCByZXN1bHQgPSAiIjsKICBsZXQgdHpPZmZzZXQgPSAiIjsKICBjb25zdCBkYXRlRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICItIiA6ICIiOwogIGNvbnN0IHRpbWVEZWxpbWl0ZXIgPSBmb3JtYXQyID09PSAiZXh0ZW5kZWQiID8gIjoiIDogIiI7CiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSAidGltZSIpIHsKICAgIGNvbnN0IGRheSA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXREYXRlKCksIDIpOwogICAgY29uc3QgbW9udGggPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TW9udGgoKSArIDEsIDIpOwogICAgY29uc3QgeWVhciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRGdWxsWWVhcigpLCA0KTsKICAgIHJlc3VsdCA9IGAke3llYXJ9JHtkYXRlRGVsaW1pdGVyfSR7bW9udGh9JHtkYXRlRGVsaW1pdGVyfSR7ZGF5fWA7CiAgfQogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gImRhdGUiKSB7CiAgICBjb25zdCBvZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgaWYgKG9mZnNldCAhPT0gMCkgewogICAgICBjb25zdCBhYnNvbHV0ZU9mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgICAgIGNvbnN0IGhvdXJPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNvbHV0ZU9mZnNldCAvIDYwKSwgMik7CiAgICAgIGNvbnN0IG1pbnV0ZU9mZnNldCA9IGFkZExlYWRpbmdaZXJvcyhhYnNvbHV0ZU9mZnNldCAlIDYwLCAyKTsKICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldCA8IDAgPyAiKyIgOiAiLSI7CiAgICAgIHR6T2Zmc2V0ID0gYCR7c2lnbn0ke2hvdXJPZmZzZXR9OiR7bWludXRlT2Zmc2V0fWA7CiAgICB9IGVsc2UgewogICAgICB0ek9mZnNldCA9ICJaIjsKICAgIH0KICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7CiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICAgIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSAiIiA/ICIiIDogIlQiOwogICAgY29uc3QgdGltZSA9IFtob3VyLCBtaW51dGUsIHNlY29uZF0uam9pbih0aW1lRGVsaW1pdGVyKTsKICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0ke3NlcGFyYXRvcn0ke3RpbWV9JHt0ek9mZnNldH1gOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CnZhciBmb3JtYXRJU09fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTy5qcyIoKSB7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGZvcm1hdElTT19kZWZhdWx0ID0gZm9ybWF0SVNPOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTzkwNzUuanMKZnVuY3Rpb24gZm9ybWF0SVNPOTA3NShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmICghaXNWYWxpZChkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyAiZXh0ZW5kZWQiOwogIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gImNvbXBsZXRlIjsKICBsZXQgcmVzdWx0ID0gIiI7CiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiLSIgOiAiIjsKICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICI6IiA6ICIiOwogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gInRpbWUiKSB7CiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICAgIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7CiAgICByZXN1bHQgPSBgJHt5ZWFyfSR7ZGF0ZURlbGltaXRlcn0ke21vbnRofSR7ZGF0ZURlbGltaXRlcn0ke2RheX1gOwogIH0KICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJkYXRlIikgewogICAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTsKICAgIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNaW51dGVzKCksIDIpOwogICAgY29uc3Qgc2Vjb25kID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldFNlY29uZHMoKSwgMik7CiAgICBjb25zdCBzZXBhcmF0b3IgPSByZXN1bHQgPT09ICIiID8gIiIgOiAiICI7CiAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtzZXBhcmF0b3J9JHtob3VyfSR7dGltZURlbGltaXRlcn0ke21pbnV0ZX0ke3RpbWVEZWxpbWl0ZXJ9JHtzZWNvbmR9YDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZm9ybWF0SVNPOTA3NV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRJU085MDc1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTTzkwNzUuanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGZvcm1hdElTTzkwNzVfZGVmYXVsdCA9IGZvcm1hdElTTzkwNzU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0SVNPRHVyYXRpb24uanMKZnVuY3Rpb24gZm9ybWF0SVNPRHVyYXRpb24oZHVyYXRpb24pIHsKICBjb25zdCB7CiAgICB5ZWFycyA9IDAsCiAgICBtb250aHM6IG1vbnRoczIgPSAwLAogICAgZGF5czogZGF5czIgPSAwLAogICAgaG91cnMgPSAwLAogICAgbWludXRlcyA9IDAsCiAgICBzZWNvbmRzID0gMAogIH0gPSBkdXJhdGlvbjsKICByZXR1cm4gYFAke3llYXJzfVkke21vbnRoczJ9TSR7ZGF5czJ9RFQke2hvdXJzfUgke21pbnV0ZXN9TSR7c2Vjb25kc31TYDsKfQp2YXIgZm9ybWF0SVNPRHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPRHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0SVNPRHVyYXRpb24uanMiKCkgewogICAgZm9ybWF0SVNPRHVyYXRpb25fZGVmYXVsdCA9IGZvcm1hdElTT0R1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzMzMzkuanMKZnVuY3Rpb24gZm9ybWF0UkZDMzMzOShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmICghaXNWYWxpZChkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZnJhY3Rpb25EaWdpdHMgPSBvcHRpb25zPy5mcmFjdGlvbkRpZ2l0cyA/PyAwOwogIGNvbnN0IGRheSA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXREYXRlKCksIDIpOwogIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICBjb25zdCB5ZWFyID0gZGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEhvdXJzKCksIDIpOwogIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNaW51dGVzKCksIDIpOwogIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogIGxldCBmcmFjdGlvbmFsU2Vjb25kID0gIiI7CiAgaWYgKGZyYWN0aW9uRGlnaXRzID4gMCkgewogICAgY29uc3QgbWlsbGlzZWNvbmRzMiA9IGRhdGVfLmdldE1pbGxpc2Vjb25kcygpOwogICAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLnRydW5jKAogICAgICBtaWxsaXNlY29uZHMyICogTWF0aC5wb3coMTAsIGZyYWN0aW9uRGlnaXRzIC0gMykKICAgICk7CiAgICBmcmFjdGlvbmFsU2Vjb25kID0gIi4iICsgYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCBmcmFjdGlvbkRpZ2l0cyk7CiAgfQogIGxldCBvZmZzZXQgPSAiIjsKICBjb25zdCB0ek9mZnNldCA9IGRhdGVfLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgaWYgKHR6T2Zmc2V0ICE9PSAwKSB7CiAgICBjb25zdCBhYnNvbHV0ZU9mZnNldCA9IE1hdGguYWJzKHR6T2Zmc2V0KTsKICAgIGNvbnN0IGhvdXJPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNvbHV0ZU9mZnNldCAvIDYwKSwgMik7CiAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7CiAgICBjb25zdCBzaWduID0gdHpPZmZzZXQgPCAwID8gIisiIDogIi0iOwogICAgb2Zmc2V0ID0gYCR7c2lnbn0ke2hvdXJPZmZzZXR9OiR7bWludXRlT2Zmc2V0fWA7CiAgfSBlbHNlIHsKICAgIG9mZnNldCA9ICJaIjsKICB9CiAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fVQke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0ke2ZyYWN0aW9uYWxTZWNvbmR9JHtvZmZzZXR9YDsKfQp2YXIgZm9ybWF0UkZDMzMzOV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRSRkMzMzM5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzMzMzkuanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGZvcm1hdFJGQzMzMzlfZGVmYXVsdCA9IGZvcm1hdFJGQzMzMzk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UkZDNzIzMS5qcwpmdW5jdGlvbiBmb3JtYXRSRkM3MjMxKGRhdGUpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTsKICBpZiAoIWlzVmFsaWQoX2RhdGUpKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGRheU5hbWUgPSBkYXlzW19kYXRlLmdldFVUQ0RheSgpXTsKICBjb25zdCBkYXlPZk1vbnRoID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ0RhdGUoKSwgMik7CiAgY29uc3QgbW9udGhOYW1lID0gbW9udGhzW19kYXRlLmdldFVUQ01vbnRoKCldOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRVVENGdWxsWWVhcigpOwogIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoX2RhdGUuZ2V0VVRDSG91cnMoKSwgMik7CiAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ01pbnV0ZXMoKSwgMik7CiAgY29uc3Qgc2Vjb25kID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ1NlY29uZHMoKSwgMik7CiAgcmV0dXJuIGAke2RheU5hbWV9LCAke2RheU9mTW9udGh9ICR7bW9udGhOYW1lfSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgOwp9CnZhciBkYXlzLCBtb250aHMsIGZvcm1hdFJGQzcyMzFfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0UkZDNzIzMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkM3MjMxLmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBkYXlzID0gWyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiXTsKICAgIG1vbnRocyA9IFsKICAgICAgIkphbiIsCiAgICAgICJGZWIiLAogICAgICAiTWFyIiwKICAgICAgIkFwciIsCiAgICAgICJNYXkiLAogICAgICAiSnVuIiwKICAgICAgIkp1bCIsCiAgICAgICJBdWciLAogICAgICAiU2VwIiwKICAgICAgIk9jdCIsCiAgICAgICJOb3YiLAogICAgICAiRGVjIgogICAgXTsKICAgIGZvcm1hdFJGQzcyMzFfZGVmYXVsdCA9IGZvcm1hdFJGQzcyMzE7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMKZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUyKGRhdGUsIGJhc2VEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVfLCBiYXNlRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMob3B0aW9ucz8uaW4sIGRhdGUsIGJhc2VEYXRlKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlXywgYmFzZURhdGVfKTsKICBpZiAoaXNOYU4oZGlmZikpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgbGV0IHRva2VuOwogIGlmIChkaWZmIDwgLTYpIHsKICAgIHRva2VuID0gIm90aGVyIjsKICB9IGVsc2UgaWYgKGRpZmYgPCAtMSkgewogICAgdG9rZW4gPSAibGFzdFdlZWsiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDApIHsKICAgIHRva2VuID0gInllc3RlcmRheSI7CiAgfSBlbHNlIGlmIChkaWZmIDwgMSkgewogICAgdG9rZW4gPSAidG9kYXkiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDIpIHsKICAgIHRva2VuID0gInRvbW9ycm93IjsKICB9IGVsc2UgaWYgKGRpZmYgPCA3KSB7CiAgICB0b2tlbiA9ICJuZXh0V2VlayI7CiAgfSBlbHNlIHsKICAgIHRva2VuID0gIm90aGVyIjsKICB9CiAgY29uc3QgZm9ybWF0U3RyID0gbG9jYWxlLmZvcm1hdFJlbGF0aXZlKHRva2VuLCBkYXRlXywgYmFzZURhdGVfLCB7CiAgICBsb2NhbGUsCiAgICB3ZWVrU3RhcnRzT24KICB9KTsKICByZXR1cm4gZm9ybWF0KGRhdGVfLCBmb3JtYXRTdHIsIHsgbG9jYWxlLCB3ZWVrU3RhcnRzT24gfSk7Cn0KdmFyIGZvcm1hdFJlbGF0aXZlX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdFJlbGF0aXZlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSZWxhdGl2ZS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgZm9ybWF0UmVsYXRpdmVfZGVmYXVsdCA9IGZvcm1hdFJlbGF0aXZlMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMKZnVuY3Rpb24gZnJvbVVuaXhUaW1lKHVuaXhUaW1lLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZSh1bml4VGltZSAqIDFlMywgb3B0aW9ucz8uaW4pOwp9CnZhciBmcm9tVW5peFRpbWVfZGVmYXVsdDsKdmFyIGluaXRfZnJvbVVuaXhUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zyb21Vbml4VGltZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZnJvbVVuaXhUaW1lX2RlZmF1bHQgPSBmcm9tVW5peFRpbWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF0ZS5qcwpmdW5jdGlvbiBnZXREYXRlKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXRlKCk7Cn0KdmFyIGdldERhdGVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREYXRlX2RlZmF1bHQgPSBnZXREYXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheS5qcwpmdW5jdGlvbiBnZXREYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwp9CnZhciBnZXREYXlfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF5X2RlZmF1bHQgPSBnZXREYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luTW9udGguanMKZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBtb250aEluZGV4ID0gX2RhdGUuZ2V0TW9udGgoKTsKICBjb25zdCBsYXN0RGF5T2ZNb250aDIgPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTsKICBsYXN0RGF5T2ZNb250aDIuc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCArIDEsIDApOwogIGxhc3REYXlPZk1vbnRoMi5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gbGFzdERheU9mTW9udGgyLmdldERhdGUoKTsKfQp2YXIgZ2V0RGF5c0luTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5c0luTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luTW9udGguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF5c0luTW9udGhfZGVmYXVsdCA9IGdldERheXNJbk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGVhcFllYXIuanMKZnVuY3Rpb24gaXNMZWFwWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KdmFyIGlzTGVhcFllYXJfZGVmYXVsdDsKdmFyIGluaXRfaXNMZWFwWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0xlYXBZZWFyX2RlZmF1bHQgPSBpc0xlYXBZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJblllYXIuanMKZnVuY3Rpb24gZ2V0RGF5c0luWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChOdW1iZXIuaXNOYU4oK19kYXRlKSkgcmV0dXJuIE5hTjsKICByZXR1cm4gaXNMZWFwWWVhcihfZGF0ZSkgPyAzNjYgOiAzNjU7Cn0KdmFyIGdldERheXNJblllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5c0luWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlzSW5ZZWFyLmpzIigpIHsKICAgIGluaXRfaXNMZWFwWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheXNJblllYXJfZGVmYXVsdCA9IGdldERheXNJblllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVjYWRlLmpzCmZ1bmN0aW9uIGdldERlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIHJldHVybiBkZWNhZGU7Cn0KdmFyIGdldERlY2FkZV9kZWZhdWx0Owp2YXIgaW5pdF9nZXREZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREZWNhZGVfZGVmYXVsdCA9IGdldERlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREZWZhdWx0T3B0aW9ucy5qcwpmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9uczIoKSB7CiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldERlZmF1bHRPcHRpb25zKCkpOwp9CnZhciBnZXREZWZhdWx0T3B0aW9uc19kZWZhdWx0Owp2YXIgaW5pdF9nZXREZWZhdWx0T3B0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREZWZhdWx0T3B0aW9ucy5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBnZXREZWZhdWx0T3B0aW9uc19kZWZhdWx0ID0gZ2V0RGVmYXVsdE9wdGlvbnMyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldEhvdXJzLmpzCmZ1bmN0aW9uIGdldEhvdXJzKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRIb3VycygpOwp9CnZhciBnZXRIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRIb3Vycy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SG91cnNfZGVmYXVsdCA9IGdldEhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT0RheS5qcwpmdW5jdGlvbiBnZXRJU09EYXkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRheSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCk7CiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7Cn0KdmFyIGdldElTT0RheV9kZWZhdWx0Owp2YXIgaW5pdF9nZXRJU09EYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPRGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09EYXlfZGVmYXVsdCA9IGdldElTT0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09XZWVrc0luWWVhci5qcwpmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgdGhpc1llYXIgPSBzdGFydE9mSVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgbmV4dFllYXIgPSBzdGFydE9mSVNPV2Vla1llYXIoYWRkV2Vla3ModGhpc1llYXIsIDYwKSk7CiAgY29uc3QgZGlmZiA9ICtuZXh0WWVhciAtICt0aGlzWWVhcjsKICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKTsKfQp2YXIgZ2V0SVNPV2Vla3NJblllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2Vla3NJblllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla3NJblllYXIuanMiKCkgewogICAgaW5pdF9hZGRXZWVrcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBnZXRJU09XZWVrc0luWWVhcl9kZWZhdWx0ID0gZ2V0SVNPV2Vla3NJblllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kcyhkYXRlKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlKS5nZXRNaWxsaXNlY29uZHMoKTsKfQp2YXIgZ2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2dldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gZ2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMKZnVuY3Rpb24gZ2V0TWludXRlcyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0TWludXRlcygpOwp9CnZhciBnZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X2dldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0TWludXRlc19kZWZhdWx0ID0gZ2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNb250aC5qcwpmdW5jdGlvbiBnZXRNb250aChkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0TW9udGgoKTsKfQp2YXIgZ2V0TW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0TW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1vbnRoX2RlZmF1bHQgPSBnZXRNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscy5qcwpmdW5jdGlvbiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscyhpbnRlcnZhbExlZnQsIGludGVydmFsUmlnaHQpIHsKICBjb25zdCBbbGVmdFN0YXJ0LCBsZWZ0RW5kXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LnN0YXJ0KSwKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LmVuZCkKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgW3JpZ2h0U3RhcnQsIHJpZ2h0RW5kXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxSaWdodC5zdGFydCksCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuZW5kKQogIF0uc29ydCgoYTUsIGI1KSA9PiBhNSAtIGI1KTsKICBjb25zdCBpc092ZXJsYXBwaW5nID0gbGVmdFN0YXJ0IDwgcmlnaHRFbmQgJiYgcmlnaHRTdGFydCA8IGxlZnRFbmQ7CiAgaWYgKCFpc092ZXJsYXBwaW5nKSByZXR1cm4gMDsKICBjb25zdCBvdmVybGFwTGVmdCA9IHJpZ2h0U3RhcnQgPCBsZWZ0U3RhcnQgPyBsZWZ0U3RhcnQgOiByaWdodFN0YXJ0OwogIGNvbnN0IGxlZnQgPSBvdmVybGFwTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3ZlcmxhcExlZnQpOwogIGNvbnN0IG92ZXJsYXBSaWdodCA9IHJpZ2h0RW5kID4gbGVmdEVuZCA/IGxlZnRFbmQgOiByaWdodEVuZDsKICBjb25zdCByaWdodCA9IG92ZXJsYXBSaWdodCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3ZlcmxhcFJpZ2h0KTsKICByZXR1cm4gTWF0aC5jZWlsKChyaWdodCAtIGxlZnQpIC8gbWlsbGlzZWNvbmRzSW5EYXkpOwp9CnZhciBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFsc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscy5qcyIoKSB7CiAgICBpbml0X2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNfZGVmYXVsdCA9IGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFNlY29uZHMuanMKZnVuY3Rpb24gZ2V0U2Vjb25kcyhkYXRlKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlKS5nZXRTZWNvbmRzKCk7Cn0KdmFyIGdldFNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0U2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRTZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRTZWNvbmRzX2RlZmF1bHQgPSBnZXRTZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFRpbWUuanMKZnVuY3Rpb24gZ2V0VGltZShkYXRlKSB7CiAgcmV0dXJuICt0b0RhdGUoZGF0ZSk7Cn0KdmFyIGdldFRpbWVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRUaW1lLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRUaW1lX2RlZmF1bHQgPSBnZXRUaW1lOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFVuaXhUaW1lLmpzCmZ1bmN0aW9uIGdldFVuaXhUaW1lKGRhdGUpIHsKICByZXR1cm4gTWF0aC50cnVuYygrdG9EYXRlKGRhdGUpIC8gMWUzKTsKfQp2YXIgZ2V0VW5peFRpbWVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0VW5peFRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0VW5peFRpbWUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFVuaXhUaW1lX2RlZmF1bHQgPSBnZXRVbml4VGltZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrT2ZNb250aC5qcwpmdW5jdGlvbiBnZXRXZWVrT2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBjdXJyZW50RGF5T2ZNb250aCA9IGdldERhdGUodG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSk7CiAgaWYgKGlzTmFOKGN1cnJlbnREYXlPZk1vbnRoKSkgcmV0dXJuIE5hTjsKICBjb25zdCBzdGFydFdlZWtEYXkgPSBnZXREYXkoc3RhcnRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpKTsKICBsZXQgbGFzdERheU9mRmlyc3RXZWVrID0gd2Vla1N0YXJ0c09uIC0gc3RhcnRXZWVrRGF5OwogIGlmIChsYXN0RGF5T2ZGaXJzdFdlZWsgPD0gMCkgbGFzdERheU9mRmlyc3RXZWVrICs9IDc7CiAgY29uc3QgcmVtYWluaW5nRGF5c0FmdGVyRmlyc3RXZWVrID0gY3VycmVudERheU9mTW9udGggLSBsYXN0RGF5T2ZGaXJzdFdlZWs7CiAgcmV0dXJuIE1hdGguY2VpbChyZW1haW5pbmdEYXlzQWZ0ZXJGaXJzdFdlZWsgLyA3KSArIDE7Cn0KdmFyIGdldFdlZWtPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWtPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0RGF0ZSgpOwogICAgaW5pdF9nZXREYXkoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla09mTW9udGhfZGVmYXVsdCA9IGdldFdlZWtPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZk1vbnRoLmpzCmZ1bmN0aW9uIGxhc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pOwp9CnZhciBsYXN0RGF5T2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZNb250aC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mTW9udGhfZGVmYXVsdCA9IGxhc3REYXlPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtzSW5Nb250aC5qcwpmdW5jdGlvbiBnZXRXZWVrc0luTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGNvbnRleHREYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygKICAgIGxhc3REYXlPZk1vbnRoKGNvbnRleHREYXRlLCBvcHRpb25zKSwKICAgIHN0YXJ0T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKSArIDE7Cn0KdmFyIGdldFdlZWtzSW5Nb250aF9kZWZhdWx0Owp2YXIgaW5pdF9nZXRXZWVrc0luTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla3NJbk1vbnRoLmpzIigpIHsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9sYXN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9zdGFydE9mTW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRXZWVrc0luTW9udGhfZGVmYXVsdCA9IGdldFdlZWtzSW5Nb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRZZWFyLmpzCmZ1bmN0aW9uIGdldFllYXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldEZ1bGxZZWFyKCk7Cn0KdmFyIGdldFllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0WWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRZZWFyX2RlZmF1bHQgPSBnZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gaG91cnNUb01pbGxpc2Vjb25kcyhob3VycykgewogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb01pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9ob3Vyc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9NaWxsaXNlY29uZHNfZGVmYXVsdCA9IGhvdXJzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbnV0ZXMuanMKZnVuY3Rpb24gaG91cnNUb01pbnV0ZXMoaG91cnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbnV0ZXNJbkhvdXIpOwp9CnZhciBob3Vyc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9ob3Vyc1RvTWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaG91cnNUb01pbnV0ZXNfZGVmYXVsdCA9IGhvdXJzVG9NaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIGhvdXJzVG9TZWNvbmRzKGhvdXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBzZWNvbmRzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb1NlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb1NlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9TZWNvbmRzX2RlZmF1bHQgPSBob3Vyc1RvU2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRlcnZhbC5qcwpmdW5jdGlvbiBpbnRlcnZhbDIoc3RhcnQsIGVuZDMsIG9wdGlvbnMpIHsKICBjb25zdCBbX3N0YXJ0LCBfZW5kXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBzdGFydCwgZW5kMyk7CiAgaWYgKGlzTmFOKCtfc3RhcnQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdGFydCBkYXRlIGlzIGludmFsaWQiKTsKICBpZiAoaXNOYU4oK19lbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmQgZGF0ZSBpcyBpbnZhbGlkIik7CiAgaWYgKG9wdGlvbnM/LmFzc2VydFBvc2l0aXZlICYmICtfc3RhcnQgPiArX2VuZCkKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkVuZCBkYXRlIG11c3QgYmUgYWZ0ZXIgc3RhcnQgZGF0ZSIpOwogIHJldHVybiB7IHN0YXJ0OiBfc3RhcnQsIGVuZDogX2VuZCB9Owp9CnZhciBpbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9pbnRlcnZhbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW50ZXJ2YWxfZGVmYXVsdCA9IGludGVydmFsMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRlcnZhbFRvRHVyYXRpb24uanMKZnVuY3Rpb24gaW50ZXJ2YWxUb0R1cmF0aW9uKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgY29uc3QgZHVyYXRpb24gPSB7fTsKICBjb25zdCB5ZWFycyA9IGRpZmZlcmVuY2VJblllYXJzKGVuZDMsIHN0YXJ0KTsKICBpZiAoeWVhcnMpIGR1cmF0aW9uLnllYXJzID0geWVhcnM7CiAgY29uc3QgcmVtYWluaW5nTW9udGhzID0gYWRkKHN0YXJ0LCB7IHllYXJzOiBkdXJhdGlvbi55ZWFycyB9KTsKICBjb25zdCBtb250aHMyID0gZGlmZmVyZW5jZUluTW9udGhzKGVuZDMsIHJlbWFpbmluZ01vbnRocyk7CiAgaWYgKG1vbnRoczIpIGR1cmF0aW9uLm1vbnRocyA9IG1vbnRoczI7CiAgY29uc3QgcmVtYWluaW5nRGF5cyA9IGFkZChyZW1haW5pbmdNb250aHMsIHsgbW9udGhzOiBkdXJhdGlvbi5tb250aHMgfSk7CiAgY29uc3QgZGF5czIgPSBkaWZmZXJlbmNlSW5EYXlzKGVuZDMsIHJlbWFpbmluZ0RheXMpOwogIGlmIChkYXlzMikgZHVyYXRpb24uZGF5cyA9IGRheXMyOwogIGNvbnN0IHJlbWFpbmluZ0hvdXJzID0gYWRkKHJlbWFpbmluZ0RheXMsIHsgZGF5czogZHVyYXRpb24uZGF5cyB9KTsKICBjb25zdCBob3VycyA9IGRpZmZlcmVuY2VJbkhvdXJzKGVuZDMsIHJlbWFpbmluZ0hvdXJzKTsKICBpZiAoaG91cnMpIGR1cmF0aW9uLmhvdXJzID0gaG91cnM7CiAgY29uc3QgcmVtYWluaW5nTWludXRlcyA9IGFkZChyZW1haW5pbmdIb3VycywgeyBob3VyczogZHVyYXRpb24uaG91cnMgfSk7CiAgY29uc3QgbWludXRlcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZW5kMywgcmVtYWluaW5nTWludXRlcyk7CiAgaWYgKG1pbnV0ZXMpIGR1cmF0aW9uLm1pbnV0ZXMgPSBtaW51dGVzOwogIGNvbnN0IHJlbWFpbmluZ1NlY29uZHMgPSBhZGQocmVtYWluaW5nTWludXRlcywgeyBtaW51dGVzOiBkdXJhdGlvbi5taW51dGVzIH0pOwogIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVuZDMsIHJlbWFpbmluZ1NlY29uZHMpOwogIGlmIChzZWNvbmRzKSBkdXJhdGlvbi5zZWNvbmRzID0gc2Vjb25kczsKICByZXR1cm4gZHVyYXRpb247Cn0KdmFyIGludGVydmFsVG9EdXJhdGlvbl9kZWZhdWx0Owp2YXIgaW5pdF9pbnRlcnZhbFRvRHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWxUb0R1cmF0aW9uLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfYWRkKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWludXRlcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5ZZWFycygpOwogICAgaW50ZXJ2YWxUb0R1cmF0aW9uX2RlZmF1bHQgPSBpbnRlcnZhbFRvRHVyYXRpb247CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdC5qcwpmdW5jdGlvbiBpbnRsRm9ybWF0KGRhdGUsIGZvcm1hdE9yTG9jYWxlLCBsb2NhbGVPcHRpb25zKSB7CiAgbGV0IGZvcm1hdE9wdGlvbnM7CiAgaWYgKGlzRm9ybWF0T3B0aW9ucyhmb3JtYXRPckxvY2FsZSkpIHsKICAgIGZvcm1hdE9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTsKICB9IGVsc2UgewogICAgbG9jYWxlT3B0aW9ucyA9IGZvcm1hdE9yTG9jYWxlOwogIH0KICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlT3B0aW9ucz8ubG9jYWxlLCBmb3JtYXRPcHRpb25zKS5mb3JtYXQoCiAgICB0b0RhdGUoZGF0ZSkKICApOwp9CmZ1bmN0aW9uIGlzRm9ybWF0T3B0aW9ucyhvcHRzKSB7CiAgcmV0dXJuIG9wdHMgIT09IHZvaWQgMCAmJiAhKCJsb2NhbGUiIGluIG9wdHMpOwp9CnZhciBpbnRsRm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2ludGxGb3JtYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW50bEZvcm1hdF9kZWZhdWx0ID0gaW50bEZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMKZnVuY3Rpb24gaW50bEZvcm1hdERpc3RhbmNlKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBsZXQgdmFsdWUyID0gMDsKICBsZXQgdW5pdDsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgaWYgKCFvcHRpb25zPy51bml0KSB7CiAgICBjb25zdCBkaWZmSW5TZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luTWludXRlKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJzZWNvbmQiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkhvdXIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluTWludXRlcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gIm1pbnV0ZSI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luRGF5ICYmIE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pKSA8IDEpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJob3VyIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5XZWVrICYmICh2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgJiYgTWF0aC5hYnModmFsdWUyKSA8IDcpIHsKICAgICAgdW5pdCA9ICJkYXkiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbk1vbnRoKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJ3ZWVrIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5RdWFydGVyKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAibW9udGgiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJblllYXIpIHsKICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA8IDQpIHsKICAgICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgICAgdW5pdCA9ICJxdWFydGVyIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gInllYXIiOwogICAgfQogIH0gZWxzZSB7CiAgICB1bml0ID0gb3B0aW9ucz8udW5pdDsKICAgIGlmICh1bml0ID09PSAic2Vjb25kIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJtaW51dGUiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gImhvdXIiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJkYXkiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAid2VlayIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAibW9udGgiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJxdWFydGVyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJ5ZWFyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9CiAgfQogIGNvbnN0IHJ0ZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChvcHRpb25zPy5sb2NhbGUsIHsKICAgIG51bWVyaWM6ICJhdXRvIiwKICAgIC4uLm9wdGlvbnMKICB9KTsKICByZXR1cm4gcnRmLmZvcm1hdCh2YWx1ZTIsIHVuaXQpOwp9CnZhciBpbnRsRm9ybWF0RGlzdGFuY2VfZGVmYXVsdDsKdmFyIGluaXRfaW50bEZvcm1hdERpc3RhbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXREaXN0YW5jZS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWludXRlcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbnRsRm9ybWF0RGlzdGFuY2VfZGVmYXVsdCA9IGludGxGb3JtYXREaXN0YW5jZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzCmZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZSwgZGF0ZVRvQ29tcGFyZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpID4gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTsKfQp2YXIgaXNBZnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9pc0FmdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQWZ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzQWZ0ZXJfZGVmYXVsdCA9IGlzQWZ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNCZWZvcmUuanMKZnVuY3Rpb24gaXNCZWZvcmUoZGF0ZSwgZGF0ZVRvQ29tcGFyZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpIDwgK3RvRGF0ZShkYXRlVG9Db21wYXJlKTsKfQp2YXIgaXNCZWZvcmVfZGVmYXVsdDsKdmFyIGluaXRfaXNCZWZvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNCZWZvcmUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzQmVmb3JlX2RlZmF1bHQgPSBpc0JlZm9yZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0VxdWFsLmpzCmZ1bmN0aW9uIGlzRXF1YWwobGVmdERhdGUsIHJpZ2h0RGF0ZSkgewogIHJldHVybiArdG9EYXRlKGxlZnREYXRlKSA9PT0gK3RvRGF0ZShyaWdodERhdGUpOwp9CnZhciBpc0VxdWFsX2RlZmF1bHQ7CnZhciBpbml0X2lzRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFcXVhbC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNFcXVhbF9kZWZhdWx0ID0gaXNFcXVhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0V4aXN0cy5qcwpmdW5jdGlvbiBpc0V4aXN0cyh5ZWFyLCBtb250aCwgZGF5KSB7CiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpOwogIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiYgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAmJiBkYXRlLmdldERhdGUoKSA9PT0gZGF5Owp9CnZhciBpc0V4aXN0c19kZWZhdWx0Owp2YXIgaW5pdF9pc0V4aXN0cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0V4aXN0cy5qcyIoKSB7CiAgICBpc0V4aXN0c19kZWZhdWx0ID0gaXNFeGlzdHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGaXJzdERheU9mTW9udGguanMKZnVuY3Rpb24gaXNGaXJzdERheU9mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERhdGUoKSA9PT0gMTsKfQp2YXIgaXNGaXJzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNGaXJzdERheU9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGaXJzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRmlyc3REYXlPZk1vbnRoX2RlZmF1bHQgPSBpc0ZpcnN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZyaWRheS5qcwpmdW5jdGlvbiBpc0ZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDU7Cn0KdmFyIGlzRnJpZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzRnJpZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnJpZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0ZyaWRheV9kZWZhdWx0ID0gaXNGcmlkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGdXR1cmUuanMKZnVuY3Rpb24gaXNGdXR1cmUoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpID4gRGF0ZS5ub3coKTsKfQp2YXIgaXNGdXR1cmVfZGVmYXVsdDsKdmFyIGluaXRfaXNGdXR1cmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGdXR1cmUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRnV0dXJlX2RlZmF1bHQgPSBpc0Z1dHVyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMKZnVuY3Rpb24gdHJhbnNwb3NlKGRhdGUsIGNvbnN0cnVjdG9yKSB7CiAgY29uc3QgZGF0ZV8gPSBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSA/IG5ldyBjb25zdHJ1Y3RvcigwKSA6IGNvbnN0cnVjdEZyb20oY29uc3RydWN0b3IsIDApOwogIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7CiAgZGF0ZV8uc2V0SG91cnMoCiAgICBkYXRlLmdldEhvdXJzKCksCiAgICBkYXRlLmdldE1pbnV0ZXMoKSwKICAgIGRhdGUuZ2V0U2Vjb25kcygpLAogICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKQogICk7CiAgcmV0dXJuIGRhdGVfOwp9CmZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHsKICByZXR1cm4gdHlwZW9mIGNvbnN0cnVjdG9yID09PSAiZnVuY3Rpb24iICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZT8uY29uc3RydWN0b3IgPT09IGNvbnN0cnVjdG9yOwp9CnZhciB0cmFuc3Bvc2VfZGVmYXVsdDsKdmFyIGluaXRfdHJhbnNwb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3RyYW5zcG9zZS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIHRyYW5zcG9zZV9kZWZhdWx0ID0gdHJhbnNwb3NlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvU2V0dGVyLmpzCnZhciBUSU1FWk9ORV9VTklUX1BSSU9SSVRZLCBTZXR0ZXIsIFZhbHVlU2V0dGVyLCBEYXRlVGltZXpvbmVTZXR0ZXI7CnZhciBpbml0X1NldHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdHJhbnNwb3NlKCk7CiAgICBUSU1FWk9ORV9VTklUX1BSSU9SSVRZID0gMTA7CiAgICBTZXR0ZXIgPSBjbGFzcyB7CiAgICAgIHN1YlByaW9yaXR5ID0gMDsKICAgICAgdmFsaWRhdGUoX3V0Y0RhdGUsIF9vcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH07CiAgICBWYWx1ZVNldHRlciA9IGNsYXNzIGV4dGVuZHMgU2V0dGVyIHsKICAgICAgY29uc3RydWN0b3IodmFsdWUyLCB2YWxpZGF0ZVZhbHVlLCBzZXRWYWx1ZSwgcHJpb3JpdHksIHN1YlByaW9yaXR5KSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZSA9IHZhbGlkYXRlVmFsdWU7CiAgICAgICAgdGhpcy5zZXRWYWx1ZSA9IHNldFZhbHVlOwogICAgICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTsKICAgICAgICBpZiAoc3ViUHJpb3JpdHkpIHsKICAgICAgICAgIHRoaXMuc3ViUHJpb3JpdHkgPSBzdWJQcmlvcml0eTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVmFsdWUoZGF0ZSwgdGhpcy52YWx1ZSwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmFsdWUoZGF0ZSwgZmxhZ3MsIHRoaXMudmFsdWUsIG9wdGlvbnMpOwogICAgICB9CiAgICB9OwogICAgRGF0ZVRpbWV6b25lU2V0dGVyID0gY2xhc3MgZXh0ZW5kcyBTZXR0ZXIgewogICAgICBwcmlvcml0eSA9IFRJTUVaT05FX1VOSVRfUFJJT1JJVFk7CiAgICAgIHN1YlByaW9yaXR5ID0gLTE7CiAgICAgIGNvbnN0cnVjdG9yKGNvbnRleHQyLCByZWZlcmVuY2UpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQyIHx8ICgoZGF0ZSkgPT4gY29uc3RydWN0RnJvbShyZWZlcmVuY2UsIGRhdGUpKTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MpIHsKICAgICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHJldHVybiBkYXRlOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHRyYW5zcG9zZShkYXRlLCB0aGlzLmNvbnRleHQpKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1BhcnNlci5qcwp2YXIgUGFyc2VyOwp2YXIgaW5pdF9QYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9QYXJzZXIuanMiKCkgewogICAgaW5pdF9TZXR0ZXIoKTsKICAgIFBhcnNlciA9IGNsYXNzIHsKICAgICAgcnVuKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHNldHRlcjogbmV3IFZhbHVlU2V0dGVyKAogICAgICAgICAgICByZXN1bHQudmFsdWUsCiAgICAgICAgICAgIHRoaXMudmFsaWRhdGUsCiAgICAgICAgICAgIHRoaXMuc2V0LAogICAgICAgICAgICB0aGlzLnByaW9yaXR5LAogICAgICAgICAgICB0aGlzLnN1YlByaW9yaXR5CiAgICAgICAgICApLAogICAgICAgICAgcmVzdDogcmVzdWx0LnJlc3QKICAgICAgICB9OwogICAgICB9CiAgICAgIHZhbGlkYXRlKF91dGNEYXRlLCBfdmFsdWUsIF9vcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0VyYVBhcnNlci5qcwp2YXIgRXJhUGFyc2VyOwp2YXIgaW5pdF9FcmFQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0VyYVBhcnNlci5qcyIoKSB7CiAgICBpbml0X1BhcnNlcigpOwogICAgRXJhUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDE0MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEFELCBCQwogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICBjYXNlICJHR0ciOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAiYWJicmV2aWF0ZWQiIH0pIHx8IG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIgfSk7CiAgICAgICAgICAvLyBBLCBCCiAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QKICAgICAgICAgIGNhc2UgIkdHR0ciOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiIH0pIHx8IG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGZsYWdzLmVyYSA9IHZhbHVlMjsKICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIlIiLCAidSIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9jb25zdGFudHMuanMKdmFyIG51bWVyaWNQYXR0ZXJucywgdGltZXpvbmVQYXR0ZXJuczsKdmFyIGluaXRfY29uc3RhbnRzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL2NvbnN0YW50cy5qcyIoKSB7CiAgICBudW1lcmljUGF0dGVybnMgPSB7CiAgICAgIG1vbnRoOiAvXigxWzAtMl18MD9cZCkvLAogICAgICAvLyAwIHRvIDEyCiAgICAgIGRhdGU6IC9eKDNbMC0xXXxbMC0yXT9cZCkvLAogICAgICAvLyAwIHRvIDMxCiAgICAgIGRheU9mWWVhcjogL14oMzZbMC02XXwzWzAtNV1cZHxbMC0yXT9cZD9cZCkvLAogICAgICAvLyAwIHRvIDM2NgogICAgICB3ZWVrOiAvXig1WzAtM118WzAtNF0/XGQpLywKICAgICAgLy8gMCB0byA1MwogICAgICBob3VyMjNoOiAvXigyWzAtM118WzAtMV0/XGQpLywKICAgICAgLy8gMCB0byAyMwogICAgICBob3VyMjRoOiAvXigyWzAtNF18WzAtMV0/XGQpLywKICAgICAgLy8gMCB0byAyNAogICAgICBob3VyMTFoOiAvXigxWzAtMV18MD9cZCkvLAogICAgICAvLyAwIHRvIDExCiAgICAgIGhvdXIxMmg6IC9eKDFbMC0yXXwwP1xkKS8sCiAgICAgIC8vIDAgdG8gMTIKICAgICAgbWludXRlOiAvXlswLTVdP1xkLywKICAgICAgLy8gMCB0byA1OQogICAgICBzZWNvbmQ6IC9eWzAtNV0/XGQvLAogICAgICAvLyAwIHRvIDU5CiAgICAgIHNpbmdsZURpZ2l0OiAvXlxkLywKICAgICAgLy8gMCB0byA5CiAgICAgIHR3b0RpZ2l0czogL15cZHsxLDJ9LywKICAgICAgLy8gMCB0byA5OQogICAgICB0aHJlZURpZ2l0czogL15cZHsxLDN9LywKICAgICAgLy8gMCB0byA5OTkKICAgICAgZm91ckRpZ2l0czogL15cZHsxLDR9LywKICAgICAgLy8gMCB0byA5OTk5CiAgICAgIGFueURpZ2l0c1NpZ25lZDogL14tP1xkKy8sCiAgICAgIHNpbmdsZURpZ2l0U2lnbmVkOiAvXi0/XGQvLAogICAgICAvLyAwIHRvIDksIC0wIHRvIC05CiAgICAgIHR3b0RpZ2l0c1NpZ25lZDogL14tP1xkezEsMn0vLAogICAgICAvLyAwIHRvIDk5LCAtMCB0byAtOTkKICAgICAgdGhyZWVEaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDN9LywKICAgICAgLy8gMCB0byA5OTksIC0wIHRvIC05OTkKICAgICAgZm91ckRpZ2l0c1NpZ25lZDogL14tP1xkezEsNH0vCiAgICAgIC8vIDAgdG8gOTk5OSwgLTAgdG8gLTk5OTkKICAgIH07CiAgICB0aW1lem9uZVBhdHRlcm5zID0gewogICAgICBiYXNpY09wdGlvbmFsTWludXRlczogL14oWystXSkoXGR7Mn0pKFxkezJ9KT98Wi8sCiAgICAgIGJhc2ljOiAvXihbKy1dKShcZHsyfSkoXGR7Mn0pfFovLAogICAgICBiYXNpY09wdGlvbmFsU2Vjb25kczogL14oWystXSkoXGR7Mn0pKFxkezJ9KSgoXGR7Mn0pKT98Wi8sCiAgICAgIGV4dGVuZGVkOiAvXihbKy1dKShcZHsyfSk6KFxkezJ9KXxaLywKICAgICAgZXh0ZW5kZWRPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxkezJ9KTooXGR7Mn0pKDooXGR7Mn0pKT98Wi8KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcwpmdW5jdGlvbiBtYXBWYWx1ZShwYXJzZUZuUmVzdWx0LCBtYXBGbikgewogIGlmICghcGFyc2VGblJlc3VsdCkgewogICAgcmV0dXJuIHBhcnNlRm5SZXN1bHQ7CiAgfQogIHJldHVybiB7CiAgICB2YWx1ZTogbWFwRm4ocGFyc2VGblJlc3VsdC52YWx1ZSksCiAgICByZXN0OiBwYXJzZUZuUmVzdWx0LnJlc3QKICB9Owp9CmZ1bmN0aW9uIHBhcnNlTnVtZXJpY1BhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykgewogIGNvbnN0IG1hdGNoUmVzdWx0ID0gZGF0ZVN0cmluZy5tYXRjaChwYXR0ZXJuKTsKICBpZiAoIW1hdGNoUmVzdWx0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHsKICAgIHZhbHVlOiBwYXJzZUludChtYXRjaFJlc3VsdFswXSwgMTApLAogICAgcmVzdDogZGF0ZVN0cmluZy5zbGljZShtYXRjaFJlc3VsdFswXS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZVRpbWV6b25lUGF0dGVybihwYXR0ZXJuLCBkYXRlU3RyaW5nKSB7CiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBkYXRlU3RyaW5nLm1hdGNoKHBhdHRlcm4pOwogIGlmICghbWF0Y2hSZXN1bHQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAobWF0Y2hSZXN1bHRbMF0gPT09ICJaIikgewogICAgcmV0dXJuIHsKICAgICAgdmFsdWU6IDAsCiAgICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UoMSkKICAgIH07CiAgfQogIGNvbnN0IHNpZ24gPSBtYXRjaFJlc3VsdFsxXSA9PT0gIisiID8gMSA6IC0xOwogIGNvbnN0IGhvdXJzID0gbWF0Y2hSZXN1bHRbMl0gPyBwYXJzZUludChtYXRjaFJlc3VsdFsyXSwgMTApIDogMDsKICBjb25zdCBtaW51dGVzID0gbWF0Y2hSZXN1bHRbM10gPyBwYXJzZUludChtYXRjaFJlc3VsdFszXSwgMTApIDogMDsKICBjb25zdCBzZWNvbmRzID0gbWF0Y2hSZXN1bHRbNV0gPyBwYXJzZUludChtYXRjaFJlc3VsdFs1XSwgMTApIDogMDsKICByZXR1cm4gewogICAgdmFsdWU6IHNpZ24gKiAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUgKyBzZWNvbmRzICogbWlsbGlzZWNvbmRzSW5TZWNvbmQpLAogICAgcmVzdDogZGF0ZVN0cmluZy5zbGljZShtYXRjaFJlc3VsdFswXS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKSB7CiAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmFueURpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7Cn0KZnVuY3Rpb24gcGFyc2VORGlnaXRzKG4xMiwgZGF0ZVN0cmluZykgewogIHN3aXRjaCAobjEyKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgY2FzZSA0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0cywgZGF0ZVN0cmluZyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCJeXFxkezEsIiArIG4xMiArICJ9IiksIGRhdGVTdHJpbmcpOwogIH0KfQpmdW5jdGlvbiBwYXJzZU5EaWdpdHNTaWduZWQobjEyLCBkYXRlU3RyaW5nKSB7CiAgc3dpdGNoIChuMTIpIHsKICAgIGNhc2UgMToKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnNpbmdsZURpZ2l0U2lnbmVkLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgMjoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnR3b0RpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDM6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50aHJlZURpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDQ6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5mb3VyRGlnaXRzU2lnbmVkLCBkYXRlU3RyaW5nKTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG5ldyBSZWdFeHAoIl4tP1xcZHsxLCIgKyBuMTIgKyAifSIpLCBkYXRlU3RyaW5nKTsKICB9Cn0KZnVuY3Rpb24gZGF5UGVyaW9kRW51bVRvSG91cnMoZGF5UGVyaW9kKSB7CiAgc3dpdGNoIChkYXlQZXJpb2QpIHsKICAgIGNhc2UgIm1vcm5pbmciOgogICAgICByZXR1cm4gNDsKICAgIGNhc2UgImV2ZW5pbmciOgogICAgICByZXR1cm4gMTc7CiAgICBjYXNlICJwbSI6CiAgICBjYXNlICJub29uIjoKICAgIGNhc2UgImFmdGVybm9vbiI6CiAgICAgIHJldHVybiAxMjsKICAgIGNhc2UgImFtIjoKICAgIGNhc2UgIm1pZG5pZ2h0IjoKICAgIGNhc2UgIm5pZ2h0IjoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiAwOwogIH0KfQpmdW5jdGlvbiBub3JtYWxpemVUd29EaWdpdFllYXIodHdvRGlnaXRZZWFyLCBjdXJyZW50WWVhcikgewogIGNvbnN0IGlzQ29tbW9uRXJhID0gY3VycmVudFllYXIgPiAwOwogIGNvbnN0IGFic0N1cnJlbnRZZWFyID0gaXNDb21tb25FcmEgPyBjdXJyZW50WWVhciA6IDEgLSBjdXJyZW50WWVhcjsKICBsZXQgcmVzdWx0OwogIGlmIChhYnNDdXJyZW50WWVhciA8PSA1MCkgewogICAgcmVzdWx0ID0gdHdvRGlnaXRZZWFyIHx8IDEwMDsKICB9IGVsc2UgewogICAgY29uc3QgcmFuZ2VFbmQgPSBhYnNDdXJyZW50WWVhciArIDUwOwogICAgY29uc3QgcmFuZ2VFbmRDZW50dXJ5ID0gTWF0aC50cnVuYyhyYW5nZUVuZCAvIDEwMCkgKiAxMDA7CiAgICBjb25zdCBpc1ByZXZpb3VzQ2VudHVyeSA9IHR3b0RpZ2l0WWVhciA+PSByYW5nZUVuZCAlIDEwMDsKICAgIHJlc3VsdCA9IHR3b0RpZ2l0WWVhciArIHJhbmdlRW5kQ2VudHVyeSAtIChpc1ByZXZpb3VzQ2VudHVyeSA/IDEwMCA6IDApOwogIH0KICByZXR1cm4gaXNDb21tb25FcmEgPyByZXN1bHQgOiAxIC0gcmVzdWx0Owp9CmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7CiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMDsKfQp2YXIgaW5pdF91dGlscyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3V0aWxzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvWWVhclBhcnNlci5qcwp2YXIgWWVhclBhcnNlcjsKdmFyIGluaXRfWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvWWVhclBhcnNlci5qcyIoKSB7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMzA7CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiWSIsICJSIiwgInUiLCAidyIsICJJIiwgImkiLCAiZSIsICJjIiwgInQiLCAiVCJdOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh5ZWFyKSA9PiAoewogICAgICAgICAgeWVhciwKICAgICAgICAgIGlzVHdvRGlnaXRZZWFyOiB0b2tlbiA9PT0gInl5IgogICAgICAgIH0pOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKDQsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIGNhc2UgInlvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJ5ZWFyIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyLmlzVHdvRGlnaXRZZWFyIHx8IHZhbHVlMi55ZWFyID4gMDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGlmICh2YWx1ZTIuaXNUd29EaWdpdFllYXIpIHsKICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoCiAgICAgICAgICAgIHZhbHVlMi55ZWFyLAogICAgICAgICAgICBjdXJyZW50WWVhcgogICAgICAgICAgKTsKICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIobm9ybWFsaXplZFR3b0RpZ2l0WWVhciwgMCwgMSk7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHllYXIgPSAhKCJlcmEiIGluIGZsYWdzKSB8fCBmbGFncy5lcmEgPT09IDEgPyB2YWx1ZTIueWVhciA6IDEgLSB2YWx1ZTIueWVhcjsKICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1llYXJQYXJzZXIuanMKdmFyIExvY2FsV2Vla1llYXJQYXJzZXI7CnZhciBpbml0X0xvY2FsV2Vla1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIExvY2FsV2Vla1llYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh5ZWFyKSA9PiAoewogICAgICAgICAgeWVhciwKICAgICAgICAgIGlzVHdvRGlnaXRZZWFyOiB0b2tlbiA9PT0gIllZIgogICAgICAgIH0pOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIlkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKDQsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIGNhc2UgIllvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJ5ZWFyIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyLmlzVHdvRGlnaXRZZWFyIHx8IHZhbHVlMi55ZWFyID4gMDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHZhbHVlMi5pc1R3b0RpZ2l0WWVhcikgewogICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFR3b0RpZ2l0WWVhciA9IG5vcm1hbGl6ZVR3b0RpZ2l0WWVhcigKICAgICAgICAgICAgdmFsdWUyLnllYXIsCiAgICAgICAgICAgIGN1cnJlbnRZZWFyCiAgICAgICAgICApOwogICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcigKICAgICAgICAgICAgbm9ybWFsaXplZFR3b0RpZ2l0WWVhciwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUKICAgICAgICAgICk7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICBjb25zdCB5ZWFyID0gISgiZXJhIiBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUyLnllYXIgOiAxIC0gdmFsdWUyLnllYXI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gc3RhcnRPZldlZWsoZGF0ZSwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiUiIsCiAgICAgICAgInUiLAogICAgICAgICJRIiwKICAgICAgICAicSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAiSSIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1llYXJQYXJzZXIuanMKdmFyIElTT1dlZWtZZWFyUGFyc2VyOwp2YXIgaW5pdF9JU09XZWVrWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPV2Vla1llYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIlIiKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgZmlyc3RXZWVrT2ZZZWFyID0gY29uc3RydWN0RnJvbShkYXRlLCAwKTsKICAgICAgICBmaXJzdFdlZWtPZlllYXIuc2V0RnVsbFllYXIodmFsdWUyLCAwLCA0KTsKICAgICAgICBmaXJzdFdlZWtPZlllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZpcnN0V2Vla09mWWVhcik7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJHIiwKICAgICAgICAieSIsCiAgICAgICAgIlkiLAogICAgICAgICJ1IiwKICAgICAgICAiUSIsCiAgICAgICAgInEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgInciLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FeHRlbmRlZFllYXJQYXJzZXIuanMKdmFyIEV4dGVuZGVkWWVhclBhcnNlcjsKdmFyIGluaXRfRXh0ZW5kZWRZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FeHRlbmRlZFllYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEV4dGVuZGVkWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMzA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAidSIpIHsKICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHNTaWduZWQoNCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHNTaWduZWQodG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIkciLCAieSIsICJZIiwgIlIiLCAidyIsICJJIiwgImkiLCAiZSIsICJjIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvUXVhcnRlclBhcnNlci5qcwp2YXIgUXVhcnRlclBhcnNlcjsKdmFyIGluaXRfUXVhcnRlclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvUXVhcnRlclBhcnNlci5qcyIoKSB7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgUXVhcnRlclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJRIjoKICAgICAgICAgIGNhc2UgIlFRIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoCiAgICAgICAgICBjYXNlICJRbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJxdWFydGVyIiB9KTsKICAgICAgICAgIC8vIFExLCBRMiwgUTMsIFE0CiAgICAgICAgICBjYXNlICJRUVEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKQogICAgICAgICAgY2FzZSAiUVFRUVEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLgogICAgICAgICAgY2FzZSAiUVFRUSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDQ7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNb250aCgodmFsdWUyIC0gMSkgKiAzLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lUXVhcnRlclBhcnNlci5qcwp2YXIgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVRdWFydGVyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lUXVhcnRlclBhcnNlci5qcyIoKSB7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTIwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAicSI6CiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAicW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAicXFxIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgInFxcXFxIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgInFxcXEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA0OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlMiAtIDEpICogMywgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTW9udGhQYXJzZXIuanMKdmFyIE1vbnRoUGFyc2VyOwp2YXIgaW5pdF9Nb250aFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTW9udGhQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTW9udGhQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgICAgcHJpb3JpdHkgPSAxMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gdmFsdWUyIC0gMTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIk1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJNbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAibW9udGgiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIk1NTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgodmFsdWUyLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTW9udGhQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVNb250aFBhcnNlcjsKdmFyIGluaXRfU3RhbmRBbG9uZU1vbnRoUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTW9udGhQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZU1vbnRoUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDExMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB2YWx1ZTIgLSAxOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkwiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMubW9udGgsIGRhdGVTdHJpbmcpLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTEwiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKDIsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGgKICAgICAgICAgIGNhc2UgIkxvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJtb250aCIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWMKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTExMTEwiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIKICAgICAgICAgIGNhc2UgIkxMTEwiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KSB8fCBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gMTE7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNb250aCh2YWx1ZTIsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrLmpzCmZ1bmN0aW9uIHNldFdlZWsoZGF0ZSwgd2Vlaywgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZ2V0V2VlayhkYXRlXywgb3B0aW9ucykgLSB3ZWVrOwogIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gZGlmZiAqIDcpOwogIHJldHVybiB0b0RhdGUoZGF0ZV8sIG9wdGlvbnM/LmluKTsKfQp2YXIgc2V0V2Vla19kZWZhdWx0Owp2YXIgaW5pdF9zZXRXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFdlZWsuanMiKCkgewogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0V2Vla19kZWZhdWx0ID0gc2V0V2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxXZWVrUGFyc2VyLmpzCnZhciBMb2NhbFdlZWtQYXJzZXI7CnZhciBpbml0X0xvY2FsV2Vla1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxXZWVrUGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0V2VlaygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTG9jYWxXZWVrUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInciOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJ3byI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNTM7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKHNldFdlZWsoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKSwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiUiIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAiSSIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzCmZ1bmN0aW9uIHNldElTT1dlZWsoZGF0ZSwgd2Vlaywgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZ2V0SVNPV2VlayhfZGF0ZSwgb3B0aW9ucykgLSB3ZWVrOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpIC0gZGlmZiAqIDcpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9zZXRJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWsuanMiKCkgewogICAgaW5pdF9nZXRJU09XZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPV2Vla19kZWZhdWx0ID0gc2V0SVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1BhcnNlci5qcwp2YXIgSVNPV2Vla1BhcnNlcjsKdmFyIGluaXRfSVNPV2Vla1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPV2Vla1BhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT1dlZWtQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTAwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy53ZWVrLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIklvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogIndlZWsiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA1MzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gc3RhcnRPZklTT1dlZWsoc2V0SVNPV2VlayhkYXRlLCB2YWx1ZTIpKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF0ZVBhcnNlci5qcwp2YXIgREFZU19JTl9NT05USCwgREFZU19JTl9NT05USF9MRUFQX1lFQVIsIERhdGVQYXJzZXI7CnZhciBpbml0X0RhdGVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgREFZU19JTl9NT05USCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsKICAgIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSID0gWwogICAgICAzMSwKICAgICAgMjksCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMSwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMSwKICAgICAgMzAsCiAgICAgIDMxCiAgICBdOwogICAgRGF0ZVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgc3ViUHJpb3JpdHkgPSAxOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiZCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXRlLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgImRvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImRhdGUiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShkYXRlLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IGlzTGVhcFllYXIyID0gaXNMZWFwWWVhckluZGV4KHllYXIpOwogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIGlmIChpc0xlYXBZZWFyMikgewogICAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUlttb250aF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gREFZU19JTl9NT05USFttb250aF07CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0RGF0ZSh2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlPZlllYXJQYXJzZXIuanMKdmFyIERheU9mWWVhclBhcnNlcjsKdmFyIGluaXRfRGF5T2ZZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlPZlllYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgRGF5T2ZZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBzdWJwcmlvcml0eSA9IDE7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJEIjoKICAgICAgICAgIGNhc2UgIkREIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmRheU9mWWVhciwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJEbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJkYXRlIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCBpc0xlYXBZZWFyMiA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTsKICAgICAgICBpZiAoaXNMZWFwWWVhcjIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMzY2OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDM2NTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNb250aCgwLCB2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgImQiLAogICAgICAgICJFIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheS5qcwpmdW5jdGlvbiBzZXREYXkoZGF0ZSwgZGF5LCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudERheSA9IGRhdGVfLmdldERheSgpOwogIGNvbnN0IHJlbWFpbmRlciA9IGRheSAlIDc7CiAgY29uc3QgZGF5SW5kZXggPSAocmVtYWluZGVyICsgNykgJSA3OwogIGNvbnN0IGRlbHRhID0gNyAtIHdlZWtTdGFydHNPbjsKICBjb25zdCBkaWZmID0gZGF5IDwgMCB8fCBkYXkgPiA2ID8gZGF5IC0gKGN1cnJlbnREYXkgKyBkZWx0YSkgJSA3IDogKGRheUluZGV4ICsgZGVsdGEpICUgNyAtIChjdXJyZW50RGF5ICsgZGVsdGEpICUgNzsKICByZXR1cm4gYWRkRGF5cyhkYXRlXywgZGlmZiwgb3B0aW9ucyk7Cn0KdmFyIHNldERheV9kZWZhdWx0Owp2YXIgaW5pdF9zZXREYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERheV9kZWZhdWx0ID0gc2V0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQYXJzZXIuanMKdmFyIERheVBhcnNlcjsKdmFyIGluaXRfRGF5UGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXREYXkoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgIkUiOgogICAgICAgICAgY2FzZSAiRUUiOgogICAgICAgICAgY2FzZSAiRUVFIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHUKICAgICAgICAgIGNhc2UgIkVFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJFRUVFIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDY7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyLCBvcHRpb25zKSB7CiAgICAgICAgZGF0ZSA9IHNldERheShkYXRlLCB2YWx1ZTIsIG9wdGlvbnMpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJEIiwgImkiLCAiZSIsICJjIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxEYXlQYXJzZXIuanMKdmFyIExvY2FsRGF5UGFyc2VyOwp2YXIgaW5pdF9Mb2NhbERheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTG9jYWxEYXlQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXREYXkoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBMb2NhbERheVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICBjb25zdCB3aG9sZVdlZWtEYXlzID0gTWF0aC5mbG9vcigodmFsdWUyIC0gMSkgLyA3KSAqIDc7CiAgICAgICAgICByZXR1cm4gKHZhbHVlMiArIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgNikgJSA3ICsgd2hvbGVXZWVrRGF5czsKICAgICAgICB9OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDMKICAgICAgICAgIGNhc2UgImUiOgogICAgICAgICAgY2FzZSAiZWUiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgICAgLy8gM3JkCiAgICAgICAgICBjYXNlICJlbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAiZGF5IgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiZWVlIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJlZWVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHUKICAgICAgICAgIGNhc2UgImVlZWVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJlZWVlIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJzaG9ydCIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDY7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyLCBvcHRpb25zKSB7CiAgICAgICAgZGF0ZSA9IHNldERheShkYXRlLCB2YWx1ZTIsIG9wdGlvbnMpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiUiIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAiSSIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiRSIsCiAgICAgICAgImkiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVMb2NhbERheVBhcnNlcjsKdmFyIGluaXRfU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXREYXkoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gewogICAgICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlMiAtIDEpIC8gNykgKiA3OwogICAgICAgICAgcmV0dXJuICh2YWx1ZTIgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7CiAgICAgICAgfTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAzCiAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgIGNhc2UgImNjIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDNyZAogICAgICAgICAgY2FzZSAiY28iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogImRheSIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJjY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiY2NjYyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgIkUiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09EYXkuanMKZnVuY3Rpb24gc2V0SVNPRGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50RGF5ID0gZ2V0SVNPRGF5KGRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBkaWZmID0gZGF5IC0gY3VycmVudERheTsKICByZXR1cm4gYWRkRGF5cyhkYXRlXywgZGlmZiwgb3B0aW9ucyk7Cn0KdmFyIHNldElTT0RheV9kZWZhdWx0Owp2YXIgaW5pdF9zZXRJU09EYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPRGF5LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRJU09EYXlfZGVmYXVsdCA9IHNldElTT0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPRGF5UGFyc2VyLmpzCnZhciBJU09EYXlQYXJzZXI7CnZhciBpbml0X0lTT0RheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGlmICh2YWx1ZTIgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIDc7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICAgIH07CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMgogICAgICAgICAgY2FzZSAiaSI6CiAgICAgICAgICBjYXNlICJpaSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDJuZAogICAgICAgICAgY2FzZSAiaW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiaWlpIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJpaWlpaSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJpaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiaWlpaSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlID0gc2V0SVNPRGF5KGRhdGUsIHZhbHVlMik7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJFIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0FNUE1QYXJzZXIuanMKdmFyIEFNUE1QYXJzZXI7CnZhciBpbml0X0FNUE1QYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0FNUE1QYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEFNUE1QYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gODA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgIGNhc2UgImFhIjoKICAgICAgICAgIGNhc2UgImFhYSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWFhIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZTIpLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImIiLCAiQiIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNTWlkbmlnaHRQYXJzZXIuanMKdmFyIEFNUE1NaWRuaWdodFBhcnNlcjsKdmFyIGluaXRfQU1QTU1pZG5pZ2h0UGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNTWlkbmlnaHRQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEFNUE1NaWRuaWdodFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA4MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImIiOgogICAgICAgICAgY2FzZSAiYmIiOgogICAgICAgICAgY2FzZSAiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiYmIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYmIiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlMiksIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJCIiwgIkgiLCAiayIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RheVBlcmlvZFBhcnNlci5qcwp2YXIgRGF5UGVyaW9kUGFyc2VyOwp2YXIgaW5pdF9EYXlQZXJpb2RQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RheVBlcmlvZFBhcnNlci5qcyIoKSB7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgRGF5UGVyaW9kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDgwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiQiI6CiAgICAgICAgICBjYXNlICJCQiI6CiAgICAgICAgICBjYXNlICJCQkIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJCQkJCQiI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUyKSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJhIiwgImIiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMXRvMTJQYXJzZXIuanMKdmFyIEhvdXIxdG8xMlBhcnNlcjsKdmFyIGluaXRfSG91cjF0bzEyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMXRvMTJQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjF0bzEyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiaCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTJoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgImhvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAxMjsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBpc1BNID0gZGF0ZS5nZXRIb3VycygpID49IDEyOwogICAgICAgIGlmIChpc1BNICYmIHZhbHVlMiA8IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiArIDEyLCAwLCAwLCAwKTsKICAgICAgICB9IGVsc2UgaWYgKCFpc1BNICYmIHZhbHVlMiA9PT0gMTIpIHsKICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRhdGUuc2V0SG91cnModmFsdWUyLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJIIiwgIksiLCAiayIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwdG8yM1BhcnNlci5qcwp2YXIgSG91cjB0bzIzUGFyc2VyOwp2YXIgaW5pdF9Ib3VyMHRvMjNQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwdG8yM1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBIb3VyMHRvMjNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNzA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJIIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmhvdXIyM2gsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiSG8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDIzOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnModmFsdWUyLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiYiIsICJoIiwgIksiLCAiayIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwVG8xMVBhcnNlci5qcwp2YXIgSG91cjBUbzExUGFyc2VyOwp2YXIgaW5pdF9Ib3VyMFRvMTFQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0hvdXIwVG8xMVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBIb3VyMFRvMTFQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNzA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJLIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmhvdXIxMWgsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiS28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGlzUE0gPSBkYXRlLmdldEhvdXJzKCkgPj0gMTI7CiAgICAgICAgaWYgKGlzUE0gJiYgdmFsdWUyIDwgMTIpIHsKICAgICAgICAgIGRhdGUuc2V0SG91cnModmFsdWUyICsgMTIsIDAsIDAsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiaCIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMVRvMjRQYXJzZXIuanMKdmFyIEhvdXIxVG8yNFBhcnNlcjsKdmFyIGluaXRfSG91cjFUbzI0UGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMVRvMjRQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjFUbzI0UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiayI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjRoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgImtvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAyNDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IHZhbHVlMiA8PSAyNCA/IHZhbHVlMiAlIDI0IDogdmFsdWUyOwogICAgICAgIGRhdGUuc2V0SG91cnMoaG91cnMsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJiIiwgImgiLCAiSCIsICJLIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTWludXRlUGFyc2VyLmpzCnZhciBNaW51dGVQYXJzZXI7CnZhciBpbml0X01pbnV0ZVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvTWludXRlUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIE1pbnV0ZVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA2MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMubWludXRlLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIm1vIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogIm1pbnV0ZSIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDU5OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TWludXRlcyh2YWx1ZTIsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TZWNvbmRQYXJzZXIuanMKdmFyIFNlY29uZFBhcnNlcjsKdmFyIGluaXRfU2Vjb25kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9TZWNvbmRQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU2Vjb25kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDUwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAicyI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zZWNvbmQsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAic28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAic2Vjb25kIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gNTk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKHZhbHVlMiwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIuanMKdmFyIEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXI7CnZhciBpbml0X0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMzA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IE1hdGgudHJ1bmModmFsdWUyICogTWF0aC5wb3coMTAsIC10b2tlbi5sZW5ndGggKyAzKSk7CiAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyh2YWx1ZTIpOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVdpdGhaUGFyc2VyLmpzCnZhciBJU09UaW1lem9uZVdpdGhaUGFyc2VyOwp2YXIgaW5pdF9JU09UaW1lem9uZVdpdGhaUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVdpdGhaUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09UaW1lem9uZVdpdGhaUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIlgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsTWludXRlcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmJhc2ljLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIlhYWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5iYXNpY09wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWFhYWCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgIlhYWCI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBmbGFncywgdmFsdWUyKSB7CiAgICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0RnJvbSgKICAgICAgICAgIGRhdGUsCiAgICAgICAgICBkYXRlLmdldFRpbWUoKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkgLSB2YWx1ZTIKICAgICAgICApOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIiwgIngiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1RpbWV6b25lUGFyc2VyLmpzCnZhciBJU09UaW1lem9uZVBhcnNlcjsKdmFyIGluaXRfSVNPVGltZXpvbmVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1RpbWV6b25lUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09UaW1lem9uZVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJ4eHh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHh4eHgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJ4eHgiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oCiAgICAgICAgICBkYXRlLAogICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIC0gdmFsdWUyCiAgICAgICAgKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCIsICJYIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyLmpzCnZhciBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyOwp2YXIgaW5pdF9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFRpbWVzdGFtcFNlY29uZHNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcpIHsKICAgICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMiAqIDFlMyksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gIioiOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyLmpzCnZhciBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXI7CnZhciBpbml0X1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFRpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAyMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZykgewogICAgICAgIHJldHVybiBwYXJzZUFueURpZ2l0c1NpZ25lZChkYXRlU3RyaW5nKTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gW2NvbnN0cnVjdEZyb20oZGF0ZSwgdmFsdWUyKSwgeyB0aW1lc3RhbXBJc1NldDogdHJ1ZSB9XTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSAiKiI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy5qcwp2YXIgcGFyc2VyczsKdmFyIGluaXRfcGFyc2VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMuanMiKCkgewogICAgaW5pdF9FcmFQYXJzZXIoKTsKICAgIGluaXRfWWVhclBhcnNlcigpOwogICAgaW5pdF9Mb2NhbFdlZWtZZWFyUGFyc2VyKCk7CiAgICBpbml0X0lTT1dlZWtZZWFyUGFyc2VyKCk7CiAgICBpbml0X0V4dGVuZGVkWWVhclBhcnNlcigpOwogICAgaW5pdF9RdWFydGVyUGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVRdWFydGVyUGFyc2VyKCk7CiAgICBpbml0X01vbnRoUGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVNb250aFBhcnNlcigpOwogICAgaW5pdF9Mb2NhbFdlZWtQYXJzZXIoKTsKICAgIGluaXRfSVNPV2Vla1BhcnNlcigpOwogICAgaW5pdF9EYXRlUGFyc2VyKCk7CiAgICBpbml0X0RheU9mWWVhclBhcnNlcigpOwogICAgaW5pdF9EYXlQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxEYXlQYXJzZXIoKTsKICAgIGluaXRfU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyKCk7CiAgICBpbml0X0lTT0RheVBhcnNlcigpOwogICAgaW5pdF9BTVBNUGFyc2VyKCk7CiAgICBpbml0X0FNUE1NaWRuaWdodFBhcnNlcigpOwogICAgaW5pdF9EYXlQZXJpb2RQYXJzZXIoKTsKICAgIGluaXRfSG91cjF0bzEyUGFyc2VyKCk7CiAgICBpbml0X0hvdXIwdG8yM1BhcnNlcigpOwogICAgaW5pdF9Ib3VyMFRvMTFQYXJzZXIoKTsKICAgIGluaXRfSG91cjFUbzI0UGFyc2VyKCk7CiAgICBpbml0X01pbnV0ZVBhcnNlcigpOwogICAgaW5pdF9TZWNvbmRQYXJzZXIoKTsKICAgIGluaXRfRnJhY3Rpb25PZlNlY29uZFBhcnNlcigpOwogICAgaW5pdF9JU09UaW1lem9uZVdpdGhaUGFyc2VyKCk7CiAgICBpbml0X0lTT1RpbWV6b25lUGFyc2VyKCk7CiAgICBpbml0X1RpbWVzdGFtcFNlY29uZHNQYXJzZXIoKTsKICAgIGluaXRfVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyKCk7CiAgICBwYXJzZXJzID0gewogICAgICBHOiBuZXcgRXJhUGFyc2VyKCksCiAgICAgIHk6IG5ldyBZZWFyUGFyc2VyKCksCiAgICAgIFk6IG5ldyBMb2NhbFdlZWtZZWFyUGFyc2VyKCksCiAgICAgIFI6IG5ldyBJU09XZWVrWWVhclBhcnNlcigpLAogICAgICB1OiBuZXcgRXh0ZW5kZWRZZWFyUGFyc2VyKCksCiAgICAgIFE6IG5ldyBRdWFydGVyUGFyc2VyKCksCiAgICAgIHE6IG5ldyBTdGFuZEFsb25lUXVhcnRlclBhcnNlcigpLAogICAgICBNOiBuZXcgTW9udGhQYXJzZXIoKSwKICAgICAgTDogbmV3IFN0YW5kQWxvbmVNb250aFBhcnNlcigpLAogICAgICB3OiBuZXcgTG9jYWxXZWVrUGFyc2VyKCksCiAgICAgIEk6IG5ldyBJU09XZWVrUGFyc2VyKCksCiAgICAgIGQ6IG5ldyBEYXRlUGFyc2VyKCksCiAgICAgIEQ6IG5ldyBEYXlPZlllYXJQYXJzZXIoKSwKICAgICAgRTogbmV3IERheVBhcnNlcigpLAogICAgICBlOiBuZXcgTG9jYWxEYXlQYXJzZXIoKSwKICAgICAgYzogbmV3IFN0YW5kQWxvbmVMb2NhbERheVBhcnNlcigpLAogICAgICBpOiBuZXcgSVNPRGF5UGFyc2VyKCksCiAgICAgIGE6IG5ldyBBTVBNUGFyc2VyKCksCiAgICAgIGI6IG5ldyBBTVBNTWlkbmlnaHRQYXJzZXIoKSwKICAgICAgQjogbmV3IERheVBlcmlvZFBhcnNlcigpLAogICAgICBoOiBuZXcgSG91cjF0bzEyUGFyc2VyKCksCiAgICAgIEg6IG5ldyBIb3VyMHRvMjNQYXJzZXIoKSwKICAgICAgSzogbmV3IEhvdXIwVG8xMVBhcnNlcigpLAogICAgICBrOiBuZXcgSG91cjFUbzI0UGFyc2VyKCksCiAgICAgIG06IG5ldyBNaW51dGVQYXJzZXIoKSwKICAgICAgczogbmV3IFNlY29uZFBhcnNlcigpLAogICAgICBTOiBuZXcgRnJhY3Rpb25PZlNlY29uZFBhcnNlcigpLAogICAgICBYOiBuZXcgSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpLAogICAgICB4OiBuZXcgSVNPVGltZXpvbmVQYXJzZXIoKSwKICAgICAgdDogbmV3IFRpbWVzdGFtcFNlY29uZHNQYXJzZXIoKSwKICAgICAgVDogbmV3IFRpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcigpCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzCmZ1bmN0aW9uIHBhcnNlKGRhdGVTdHIsIGZvcm1hdFN0ciwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGludmFsaWREYXRlID0gKCkgPT4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCByZWZlcmVuY2VEYXRlLCBOYU4pOwogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zMigpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgaWYgKCFmb3JtYXRTdHIpCiAgICByZXR1cm4gZGF0ZVN0ciA/IGludmFsaWREYXRlKCkgOiB0b0RhdGUocmVmZXJlbmNlRGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHN1YkZuT3B0aW9ucyA9IHsKICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSwKICAgIHdlZWtTdGFydHNPbiwKICAgIGxvY2FsZQogIH07CiAgY29uc3Qgc2V0dGVycyA9IFtuZXcgRGF0ZVRpbWV6b25lU2V0dGVyKG9wdGlvbnM/LmluLCByZWZlcmVuY2VEYXRlKV07CiAgY29uc3QgdG9rZW5zID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwMikubWFwKChzdWJzdHJpbmcpID0+IHsKICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdOwogICAgaWYgKGZpcnN0Q2hhcmFjdGVyIGluIGxvbmdGb3JtYXR0ZXJzKSB7CiAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07CiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpOwogICAgfQogICAgcmV0dXJuIHN1YnN0cmluZzsKICB9KS5qb2luKCIiKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMik7CiAgY29uc3QgdXNlZFRva2VucyA9IFtdOwogIGZvciAobGV0IHRva2VuIG9mIHRva2VucykgewogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpOwogICAgfQogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pKSB7CiAgICAgIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0ciwgZGF0ZVN0cik7CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHRva2VuWzBdOwogICAgY29uc3QgcGFyc2VyID0gcGFyc2Vyc1tmaXJzdENoYXJhY3Rlcl07CiAgICBpZiAocGFyc2VyKSB7CiAgICAgIGNvbnN0IHsgaW5jb21wYXRpYmxlVG9rZW5zIH0gPSBwYXJzZXI7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGluY29tcGF0aWJsZVRva2VucykpIHsKICAgICAgICBjb25zdCBpbmNvbXBhdGlibGVUb2tlbiA9IHVzZWRUb2tlbnMuZmluZCgKICAgICAgICAgICh1c2VkVG9rZW4pID0+IGluY29tcGF0aWJsZVRva2Vucy5pbmNsdWRlcyh1c2VkVG9rZW4udG9rZW4pIHx8IHVzZWRUb2tlbi50b2tlbiA9PT0gZmlyc3RDaGFyYWN0ZXIKICAgICAgICApOwogICAgICAgIGlmIChpbmNvbXBhdGlibGVUb2tlbikgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgICAgIGBUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gXGAke2luY29tcGF0aWJsZVRva2VuLmZ1bGxUb2tlbn1cYCBhbmQgXGAke3Rva2VufVxgIGF0IHRoZSBzYW1lIHRpbWVgCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChwYXJzZXIuaW5jb21wYXRpYmxlVG9rZW5zID09PSAiKiIgJiYgdXNlZFRva2Vucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgICBgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHt0b2tlbn1cYCBhbmQgYW55IG90aGVyIHRva2VuIGF0IHRoZSBzYW1lIHRpbWVgCiAgICAgICAgKTsKICAgICAgfQogICAgICB1c2VkVG9rZW5zLnB1c2goeyB0b2tlbjogZmlyc3RDaGFyYWN0ZXIsIGZ1bGxUb2tlbjogdG9rZW4gfSk7CiAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gcGFyc2VyLnJ1bigKICAgICAgICBkYXRlU3RyLAogICAgICAgIHRva2VuLAogICAgICAgIGxvY2FsZS5tYXRjaCwKICAgICAgICBzdWJGbk9wdGlvbnMKICAgICAgKTsKICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogICAgICB9CiAgICAgIHNldHRlcnMucHVzaChwYXJzZVJlc3VsdC5zZXR0ZXIpOwogICAgICBkYXRlU3RyID0gcGFyc2VSZXN1bHQucmVzdDsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIpKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgICApOwogICAgICB9CiAgICAgIGlmICh0b2tlbiA9PT0gIicnIikgewogICAgICAgIHRva2VuID0gIiciOwogICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAiJyIpIHsKICAgICAgICB0b2tlbiA9IGNsZWFuRXNjYXBlZFN0cmluZzIodG9rZW4pOwogICAgICB9CiAgICAgIGlmIChkYXRlU3RyLmluZGV4T2YodG9rZW4pID09PSAwKSB7CiAgICAgICAgZGF0ZVN0ciA9IGRhdGVTdHIuc2xpY2UodG9rZW4ubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gaW52YWxpZERhdGUoKTsKICAgICAgfQogICAgfQogIH0KICBpZiAoZGF0ZVN0ci5sZW5ndGggPiAwICYmIG5vdFdoaXRlc3BhY2VSZWdFeHAudGVzdChkYXRlU3RyKSkgewogICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgfQogIGNvbnN0IHVuaXF1ZVByaW9yaXR5U2V0dGVycyA9IHNldHRlcnMubWFwKChzZXR0ZXIpID0+IHNldHRlci5wcmlvcml0eSkuc29ydCgoYTUsIGI1KSA9PiBiNSAtIGE1KS5maWx0ZXIoKHByaW9yaXR5LCBpbmRleDIsIGFycmF5KSA9PiBhcnJheS5pbmRleE9mKHByaW9yaXR5KSA9PT0gaW5kZXgyKS5tYXAoCiAgICAocHJpb3JpdHkpID0+IHNldHRlcnMuZmlsdGVyKChzZXR0ZXIpID0+IHNldHRlci5wcmlvcml0eSA9PT0gcHJpb3JpdHkpLnNvcnQoKGE1LCBiNSkgPT4gYjUuc3ViUHJpb3JpdHkgLSBhNS5zdWJQcmlvcml0eSkKICApLm1hcCgoc2V0dGVyQXJyYXkpID0+IHNldHRlckFycmF5WzBdKTsKICBsZXQgZGF0ZSA9IHRvRGF0ZShyZWZlcmVuY2VEYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlKSkgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgY29uc3QgZmxhZ3MgPSB7fTsKICBmb3IgKGNvbnN0IHNldHRlciBvZiB1bmlxdWVQcmlvcml0eVNldHRlcnMpIHsKICAgIGlmICghc2V0dGVyLnZhbGlkYXRlKGRhdGUsIHN1YkZuT3B0aW9ucykpIHsKICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgICB9CiAgICBjb25zdCByZXN1bHQgPSBzZXR0ZXIuc2V0KGRhdGUsIGZsYWdzLCBzdWJGbk9wdGlvbnMpOwogICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkgewogICAgICBkYXRlID0gcmVzdWx0WzBdOwogICAgICBPYmplY3QuYXNzaWduKGZsYWdzLCByZXN1bHRbMV0pOwogICAgfSBlbHNlIHsKICAgICAgZGF0ZSA9IHJlc3VsdDsKICAgIH0KICB9CiAgcmV0dXJuIGRhdGU7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nMihpbnB1dCkgewogIHJldHVybiBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwMilbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cDIsICInIik7Cn0KdmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAyLCBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIsIGVzY2FwZWRTdHJpbmdSZWdFeHAyLCBkb3VibGVRdW90ZVJlZ0V4cDIsIG5vdFdoaXRlc3BhY2VSZWdFeHAsIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMiwgcGFyc2VfZGVmYXVsdDsKdmFyIGluaXRfcGFyc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2xvbmdGb3JtYXR0ZXJzKCk7CiAgICBpbml0X3Byb3RlY3RlZFRva2VucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2dldERlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF9TZXR0ZXIoKTsKICAgIGluaXRfcGFyc2VycygpOwogICAgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAyID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwMiA9IC9eJyhbXl0qPyknPyQvOwogICAgZG91YmxlUXVvdGVSZWdFeHAyID0gLycnL2c7CiAgICBub3RXaGl0ZXNwYWNlUmVnRXhwID0gL1xTLzsKICAgIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMiA9IC9bYS16QS1aXS87CiAgICBwYXJzZV9kZWZhdWx0ID0gcGFyc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcwpmdW5jdGlvbiBpc01hdGNoMihkYXRlU3RyLCBmb3JtYXRTdHIsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNWYWxpZChwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCBvcHRpb25zKSk7Cn0KdmFyIGlzTWF0Y2hfZGVmYXVsdDsKdmFyIGluaXRfaXNNYXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc01hdGNoLmpzIigpIHsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF9wYXJzZSgpOwogICAgaXNNYXRjaF9kZWZhdWx0ID0gaXNNYXRjaDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNb25kYXkuanMKZnVuY3Rpb24gaXNNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAxOwp9CnZhciBpc01vbmRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc01vbmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc01vbmRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNNb25kYXlfZGVmYXVsdCA9IGlzTW9uZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzUGFzdC5qcwpmdW5jdGlvbiBpc1Bhc3QoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpIDwgRGF0ZS5ub3coKTsKfQp2YXIgaXNQYXN0X2RlZmF1bHQ7CnZhciBpbml0X2lzUGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1Bhc3QuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzUGFzdF9kZWZhdWx0ID0gaXNQYXN0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZIb3VyLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZIb3VyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWludXRlcygwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZIb3VyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZIb3VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZIb3VyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mSG91cl9kZWZhdWx0ID0gc3RhcnRPZkhvdXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSG91ci5qcwpmdW5jdGlvbiBpc1NhbWVIb3VyKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlTGVmdCwKICAgIGRhdGVSaWdodAogICk7CiAgcmV0dXJuICtzdGFydE9mSG91cihkYXRlTGVmdF8pID09PSArc3RhcnRPZkhvdXIoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZUhvdXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVIb3VyLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGlzU2FtZUhvdXJfZGVmYXVsdCA9IGlzU2FtZUhvdXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcwpmdW5jdGlvbiBpc1NhbWVXZWVrKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mV2VlayhsYXRlckRhdGVfLCBvcHRpb25zKSA9PT0gK3N0YXJ0T2ZXZWVrKGVhcmxpZXJEYXRlXywgb3B0aW9ucyk7Cn0KdmFyIGlzU2FtZVdlZWtfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVXZWVrLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGlzU2FtZVdlZWtfZGVmYXVsdCA9IGlzU2FtZVdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSVNPV2Vlay5qcwpmdW5jdGlvbiBpc1NhbWVJU09XZWVrKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgaXNTYW1lSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMiKCkgewogICAgaW5pdF9pc1NhbWVXZWVrKCk7CiAgICBpc1NhbWVJU09XZWVrX2RlZmF1bHQgPSBpc1NhbWVJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGlzU2FtZUlTT1dlZWtZZWFyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mSVNPV2Vla1llYXIobGF0ZXJEYXRlXykgPT09ICtzdGFydE9mSVNPV2Vla1llYXIoZWFybGllckRhdGVfKTsKfQp2YXIgaXNTYW1lSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGlzU2FtZUlTT1dlZWtZZWFyX2RlZmF1bHQgPSBpc1NhbWVJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTWludXRlLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZNaW51dGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRTZWNvbmRzKDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZk1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mTWludXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNaW51dGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZNaW51dGVfZGVmYXVsdCA9IHN0YXJ0T2ZNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTWludXRlLmpzCmZ1bmN0aW9uIGlzU2FtZU1pbnV0ZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICtzdGFydE9mTWludXRlKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mTWludXRlKGVhcmxpZXJEYXRlKTsKfQp2YXIgaXNTYW1lTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZU1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNaW51dGUuanMiKCkgewogICAgaW5pdF9zdGFydE9mTWludXRlKCk7CiAgICBpc1NhbWVNaW51dGVfZGVmYXVsdCA9IGlzU2FtZU1pbnV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcwpmdW5jdGlvbiBpc1NhbWVNb250aChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpICYmIGxhdGVyRGF0ZV8uZ2V0TW9udGgoKSA9PT0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7Cn0KdmFyIGlzU2FtZU1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZU1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZU1vbnRoLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGlzU2FtZU1vbnRoX2RlZmF1bHQgPSBpc1NhbWVNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVRdWFydGVyLmpzCmZ1bmN0aW9uIGlzU2FtZVF1YXJ0ZXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlTGVmdF8sIGRhdGVSaWdodF9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gK3N0YXJ0T2ZRdWFydGVyKGRhdGVMZWZ0XykgPT09ICtzdGFydE9mUXVhcnRlcihkYXRlUmlnaHRfKTsKfQp2YXIgaXNTYW1lUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9zdGFydE9mUXVhcnRlcigpOwogICAgaXNTYW1lUXVhcnRlcl9kZWZhdWx0ID0gaXNTYW1lUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mU2Vjb25kLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRNaWxsaXNlY29uZHMoMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzdGFydE9mU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlNlY29uZC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZlNlY29uZF9kZWZhdWx0ID0gc3RhcnRPZlNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVTZWNvbmQuanMKZnVuY3Rpb24gaXNTYW1lU2Vjb25kKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpIHsKICByZXR1cm4gK3N0YXJ0T2ZTZWNvbmQobGF0ZXJEYXRlKSA9PT0gK3N0YXJ0T2ZTZWNvbmQoZWFybGllckRhdGUpOwp9CnZhciBpc1NhbWVTZWNvbmRfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVNlY29uZC5qcyIoKSB7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGlzU2FtZVNlY29uZF9kZWZhdWx0ID0gaXNTYW1lU2Vjb25kOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVllYXIuanMKZnVuY3Rpb24gaXNTYW1lWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwp9CnZhciBpc1NhbWVZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lWWVhci5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVZZWFyX2RlZmF1bHQgPSBpc1NhbWVZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0hvdXIuanMKZnVuY3Rpb24gaXNUaGlzSG91cihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZUhvdXIoCiAgICB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzSG91cl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNIb3VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0hvdXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lSG91cigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzVGhpc0hvdXJfZGVmYXVsdCA9IGlzVGhpc0hvdXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzSVNPV2Vlay5qcwpmdW5jdGlvbiBpc1RoaXNJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lSVNPV2VlaygKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RoaXNJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc0lTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzSVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZUlTT1dlZWsoKTsKICAgIGlzVGhpc0lTT1dlZWtfZGVmYXVsdCA9IGlzVGhpc0lTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzTWludXRlLmpzCmZ1bmN0aW9uIGlzVGhpc01pbnV0ZShkYXRlKSB7CiAgcmV0dXJuIGlzU2FtZU1pbnV0ZShkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSkpOwp9CnZhciBpc1RoaXNNaW51dGVfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzTWludXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01pbnV0ZS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGlzVGhpc01pbnV0ZV9kZWZhdWx0ID0gaXNUaGlzTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01vbnRoLmpzCmZ1bmN0aW9uIGlzVGhpc01vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lTW9udGgoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzTW9udGguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVNb250aCgpOwogICAgaXNUaGlzTW9udGhfZGVmYXVsdCA9IGlzVGhpc01vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1F1YXJ0ZXIuanMKZnVuY3Rpb24gaXNUaGlzUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVF1YXJ0ZXIoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1F1YXJ0ZXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVRdWFydGVyKCk7CiAgICBpc1RoaXNRdWFydGVyX2RlZmF1bHQgPSBpc1RoaXNRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1NlY29uZC5qcwpmdW5jdGlvbiBpc1RoaXNTZWNvbmQoZGF0ZSkgewogIHJldHVybiBpc1NhbWVTZWNvbmQoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpKTsKfQp2YXIgaXNUaGlzU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc1NlY29uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNTZWNvbmQuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lU2Vjb25kKCk7CiAgICBpc1RoaXNTZWNvbmRfZGVmYXVsdCA9IGlzVGhpc1NlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNXZWVrLmpzCmZ1bmN0aW9uIGlzVGhpc1dlZWsoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVXZWVrKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKSwKICAgIG9wdGlvbnMKICApOwp9CnZhciBpc1RoaXNXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVdlZWsoKTsKICAgIGlzVGhpc1dlZWtfZGVmYXVsdCA9IGlzVGhpc1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzWWVhci5qcwpmdW5jdGlvbiBpc1RoaXNZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lWWVhcigKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RoaXNZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVllYXIoKTsKICAgIGlzVGhpc1llYXJfZGVmYXVsdCA9IGlzVGhpc1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaHVyc2RheS5qcwpmdW5jdGlvbiBpc1RodXJzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gNDsKfQp2YXIgaXNUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1RodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGh1cnNkYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzVGh1cnNkYXlfZGVmYXVsdCA9IGlzVGh1cnNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcwpmdW5jdGlvbiBpc1RvZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lRGF5KAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVG9kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvZGF5LmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpc1RvZGF5X2RlZmF1bHQgPSBpc1RvZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9tb3Jyb3cuanMKZnVuY3Rpb24gaXNUb21vcnJvdyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGRhdGUsCiAgICBhZGREYXlzKGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKSwgMSksCiAgICBvcHRpb25zCiAgKTsKfQp2YXIgaXNUb21vcnJvd19kZWZhdWx0Owp2YXIgaW5pdF9pc1RvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9tb3Jyb3cuanMiKCkgewogICAgaW5pdF9hZGREYXlzKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGlzVG9tb3Jyb3dfZGVmYXVsdCA9IGlzVG9tb3Jyb3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUdWVzZGF5LmpzCmZ1bmN0aW9uIGlzVHVlc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDI7Cn0KdmFyIGlzVHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1R1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUdWVzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1R1ZXNkYXlfZGVmYXVsdCA9IGlzVHVlc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcwpmdW5jdGlvbiBpc1dlZG5lc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDM7Cn0KdmFyIGlzV2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzV2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2VkbmVzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1dlZG5lc2RheV9kZWZhdWx0ID0gaXNXZWRuZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXaXRoaW5JbnRlcnZhbC5qcwpmdW5jdGlvbiBpc1dpdGhpbkludGVydmFsKGRhdGUsIGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHRpbWUgPSArdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBbc3RhcnRUaW1lLCBlbmRUaW1lXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWwzLnN0YXJ0LCBvcHRpb25zPy5pbiksCiAgICArdG9EYXRlKGludGVydmFsMy5lbmQsIG9wdGlvbnM/LmluKQogIF0uc29ydCgoYTUsIGI1KSA9PiBhNSAtIGI1KTsKICByZXR1cm4gdGltZSA+PSBzdGFydFRpbWUgJiYgdGltZSA8PSBlbmRUaW1lOwp9CnZhciBpc1dpdGhpbkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2lzV2l0aGluSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXaXRoaW5JbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXaXRoaW5JbnRlcnZhbF9kZWZhdWx0ID0gaXNXaXRoaW5JbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJEYXlzLmpzCmZ1bmN0aW9uIHN1YkRheXMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7Cn0KdmFyIHN1YkRheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJEYXlzLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgc3ViRGF5c19kZWZhdWx0ID0gc3ViRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1llc3RlcmRheS5qcwpmdW5jdGlvbiBpc1llc3RlcmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBzdWJEYXlzKGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKSwgMSkKICApOwp9CnZhciBpc1llc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1llc3RlcmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1llc3RlcmRheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZURheSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpc1llc3RlcmRheV9kZWZhdWx0ID0gaXNZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mRGVjYWRlLmpzCmZ1bmN0aW9uIGxhc3REYXlPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUgKyAxLCAwLCAwKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gdG9EYXRlKF9kYXRlLCBvcHRpb25zPy5pbik7Cn0KdmFyIGxhc3REYXlPZkRlY2FkZV9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mRGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBsYXN0RGF5T2ZEZWNhZGVfZGVmYXVsdCA9IGxhc3REYXlPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzCmZ1bmN0aW9uIGxhc3REYXlPZldlZWsoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpOwogIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gLTcgOiAwKSArIDYgLSAoZGF5IC0gd2Vla1N0YXJ0c09uKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgbGFzdERheU9mV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZldlZWsuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZldlZWtfZGVmYXVsdCA9IGxhc3REYXlPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mSVNPV2Vlay5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbGFzdERheU9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgbGFzdERheU9mSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBsYXN0RGF5T2ZJU09XZWVrX2RlZmF1bHQgPSBsYXN0RGF5T2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBkYXRlXyA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSwgb3B0aW9ucyk7CiAgZGF0ZV8uc2V0RGF0ZShkYXRlXy5nZXREYXRlKCkgLSAxKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIGxhc3REYXlPZklTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2xhc3REYXlPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgbGFzdERheU9mSVNPV2Vla1llYXJfZGVmYXVsdCA9IGxhc3REYXlPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlF1YXJ0ZXIuanMKZnVuY3Rpb24gbGFzdERheU9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IGRhdGVfLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzICsgMzsKICBkYXRlXy5zZXRNb250aChtb250aCwgMCk7CiAgZGF0ZV8uc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZRdWFydGVyX2RlZmF1bHQ7CnZhciBpbml0X2xhc3REYXlPZlF1YXJ0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mUXVhcnRlci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mUXVhcnRlcl9kZWZhdWx0ID0gbGFzdERheU9mUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZZZWFyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gZGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBkYXRlXy5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgMCk7CiAgZGF0ZV8uc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2xhc3REYXlPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mWWVhcl9kZWZhdWx0ID0gbGFzdERheU9mWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9saWdodEZvcm1hdC5qcwpmdW5jdGlvbiBsaWdodEZvcm1hdChkYXRlLCBmb3JtYXRTdHIpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMyk7CiAgaWYgKCF0b2tlbnMpIHJldHVybiAiIjsKICBjb25zdCByZXN1bHQgPSB0b2tlbnMubWFwKChzdWJzdHJpbmcpID0+IHsKICAgIGlmIChzdWJzdHJpbmcgPT09ICInJyIpIHsKICAgICAgcmV0dXJuICInIjsKICAgIH0KICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdOwogICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSAiJyIpIHsKICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZzMoc3Vic3RyaW5nKTsKICAgIH0KICAgIGNvbnN0IGZvcm1hdHRlcjIgPSBsaWdodEZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgaWYgKGZvcm1hdHRlcjIpIHsKICAgICAgcmV0dXJuIGZvcm1hdHRlcjIoZGF0ZV8sIHN1YnN0cmluZyk7CiAgICB9CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAzKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBzdWJzdHJpbmc7CiAgfSkuam9pbigiIik7CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmczKGlucHV0KSB7CiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHAzKTsKICBpZiAoIW1hdGNoZXMpIHJldHVybiBpbnB1dDsKICByZXR1cm4gbWF0Y2hlc1sxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwMywgIiciKTsKfQp2YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDMsIGVzY2FwZWRTdHJpbmdSZWdFeHAzLCBkb3VibGVRdW90ZVJlZ0V4cDMsIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMywgbGlnaHRGb3JtYXRfZGVmYXVsdDsKdmFyIGluaXRfbGlnaHRGb3JtYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGlnaHRGb3JtYXQuanMiKCkgewogICAgaW5pdF9saWdodEZvcm1hdHRlcnMoKTsKICAgIGluaXRfaXNWYWxpZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAzID0gLyhcdylcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwMyA9IC9eJyhbXl0qPyknPyQvOwogICAgZG91YmxlUXVvdGVSZWdFeHAzID0gLycnL2c7CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDMgPSAvW2EtekEtWl0vOwogICAgbGlnaHRGb3JtYXRfZGVmYXVsdCA9IGxpZ2h0Rm9ybWF0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHMoewogIHllYXJzLAogIG1vbnRoczogbW9udGhzMiwKICB3ZWVrcywKICBkYXlzOiBkYXlzMiwKICBob3VycywKICBtaW51dGVzLAogIHNlY29uZHMKfSkgewogIGxldCB0b3RhbERheXMgPSAwOwogIGlmICh5ZWFycykgdG90YWxEYXlzICs9IHllYXJzICogZGF5c0luWWVhcjsKICBpZiAobW9udGhzMikgdG90YWxEYXlzICs9IG1vbnRoczIgKiAoZGF5c0luWWVhciAvIDEyKTsKICBpZiAod2Vla3MpIHRvdGFsRGF5cyArPSB3ZWVrcyAqIDc7CiAgaWYgKGRheXMyKSB0b3RhbERheXMgKz0gZGF5czI7CiAgbGV0IHRvdGFsU2Vjb25kcyA9IHRvdGFsRGF5cyAqIDI0ICogNjAgKiA2MDsKICBpZiAoaG91cnMpIHRvdGFsU2Vjb25kcyArPSBob3VycyAqIDYwICogNjA7CiAgaWYgKG1pbnV0ZXMpIHRvdGFsU2Vjb25kcyArPSBtaW51dGVzICogNjA7CiAgaWYgKHNlY29uZHMpIHRvdGFsU2Vjb25kcyArPSBzZWNvbmRzOwogIHJldHVybiBNYXRoLnRydW5jKHRvdGFsU2Vjb25kcyAqIDFlMyk7Cn0KdmFyIG1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtaWxsaXNlY29uZHNfZGVmYXVsdCA9IG1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb0hvdXJzLmpzCmZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvSG91cnMobWlsbGlzZWNvbmRzMikgewogIGNvbnN0IGhvdXJzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luSG91cjsKICByZXR1cm4gTWF0aC50cnVuYyhob3Vycyk7Cn0KdmFyIG1pbGxpc2Vjb25kc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb0hvdXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtaWxsaXNlY29uZHNUb0hvdXJzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb0hvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvTWludXRlcy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHNUb01pbnV0ZXMobWlsbGlzZWNvbmRzMikgewogIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMyIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgcmV0dXJuIE1hdGgudHJ1bmMobWludXRlcyk7Cn0KdmFyIG1pbGxpc2Vjb25kc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9NaW51dGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtaWxsaXNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdCA9IG1pbGxpc2Vjb25kc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9TZWNvbmRzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBzZWNvbmRzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luU2Vjb25kOwogIHJldHVybiBNYXRoLnRydW5jKHNlY29uZHMpOwp9CnZhciBtaWxsaXNlY29uZHNUb1NlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvSG91cnMuanMKZnVuY3Rpb24gbWludXRlc1RvSG91cnMobWludXRlcykgewogIGNvbnN0IGhvdXJzID0gbWludXRlcyAvIG1pbnV0ZXNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBtaW51dGVzVG9Ib3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9Ib3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvSG91cnNfZGVmYXVsdCA9IG1pbnV0ZXNUb0hvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBtaW51dGVzVG9NaWxsaXNlY29uZHMobWludXRlcykgewogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7Cn0KdmFyIG1pbnV0ZXNUb01pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9NaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtaW51dGVzVG9NaWxsaXNlY29uZHNfZGVmYXVsdCA9IG1pbnV0ZXNUb01pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIG1pbnV0ZXNUb1NlY29uZHMobWludXRlcykgewogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMgKiBzZWNvbmRzSW5NaW51dGUpOwp9CnZhciBtaW51dGVzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X21pbnV0ZXNUb1NlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvU2Vjb25kc19kZWZhdWx0ID0gbWludXRlc1RvU2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1F1YXJ0ZXJzLmpzCmZ1bmN0aW9uIG1vbnRoc1RvUXVhcnRlcnMobW9udGhzMikgewogIGNvbnN0IHF1YXJ0ZXJzID0gbW9udGhzMiAvIG1vbnRoc0luUXVhcnRlcjsKICByZXR1cm4gTWF0aC50cnVuYyhxdWFydGVycyk7Cn0KdmFyIG1vbnRoc1RvUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfbW9udGhzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1F1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtb250aHNUb1F1YXJ0ZXJzX2RlZmF1bHQgPSBtb250aHNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21vbnRoc1RvWWVhcnMuanMKZnVuY3Rpb24gbW9udGhzVG9ZZWFycyhtb250aHMyKSB7CiAgY29uc3QgeWVhcnMgPSBtb250aHMyIC8gbW9udGhzSW5ZZWFyOwogIHJldHVybiBNYXRoLnRydW5jKHllYXJzKTsKfQp2YXIgbW9udGhzVG9ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9tb250aHNUb1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21vbnRoc1RvWWVhcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1vbnRoc1RvWWVhcnNfZGVmYXVsdCA9IG1vbnRoc1RvWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dERheS5qcwpmdW5jdGlvbiBuZXh0RGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGxldCBkZWx0YSA9IGRheSAtIGdldERheShkYXRlLCBvcHRpb25zKTsKICBpZiAoZGVsdGEgPD0gMCkgZGVsdGEgKz0gNzsKICByZXR1cm4gYWRkRGF5cyhkYXRlLCBkZWx0YSwgb3B0aW9ucyk7Cn0KdmFyIG5leHREYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dERheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RGF5LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9nZXREYXkoKTsKICAgIG5leHREYXlfZGVmYXVsdCA9IG5leHREYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dEZyaWRheS5qcwpmdW5jdGlvbiBuZXh0RnJpZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCA1LCBvcHRpb25zKTsKfQp2YXIgbmV4dEZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0RnJpZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRGcmlkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0RnJpZGF5X2RlZmF1bHQgPSBuZXh0RnJpZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRNb25kYXkuanMKZnVuY3Rpb24gbmV4dE1vbmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgMSwgb3B0aW9ucyk7Cn0KdmFyIG5leHRNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dE1vbmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0TW9uZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dE1vbmRheV9kZWZhdWx0ID0gbmV4dE1vbmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0U2F0dXJkYXkuanMKZnVuY3Rpb24gbmV4dFNhdHVyZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCA2LCBvcHRpb25zKTsKfQp2YXIgbmV4dFNhdHVyZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0U2F0dXJkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0U2F0dXJkYXlfZGVmYXVsdCA9IG5leHRTYXR1cmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0U3VuZGF5LmpzCmZ1bmN0aW9uIG5leHRTdW5kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDAsIG9wdGlvbnMpOwp9CnZhciBuZXh0U3VuZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFN1bmRheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRTdW5kYXlfZGVmYXVsdCA9IG5leHRTdW5kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFRodXJzZGF5LmpzCmZ1bmN0aW9uIG5leHRUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNCwgb3B0aW9ucyk7Cn0KdmFyIG5leHRUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0VGh1cnNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFRodXJzZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dFRodXJzZGF5X2RlZmF1bHQgPSBuZXh0VGh1cnNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFR1ZXNkYXkuanMKZnVuY3Rpb24gbmV4dFR1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDIsIG9wdGlvbnMpOwp9CnZhciBuZXh0VHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0VHVlc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0VHVlc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRUdWVzZGF5X2RlZmF1bHQgPSBuZXh0VHVlc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0V2VkbmVzZGF5LmpzCmZ1bmN0aW9uIG5leHRXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDMsIG9wdGlvbnMpOwp9CnZhciBuZXh0V2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRXZWRuZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFdlZG5lc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRXZWRuZXNkYXlfZGVmYXVsdCA9IG5leHRXZWRuZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2VJU08uanMKZnVuY3Rpb24gcGFyc2VJU08oYXJndW1lbnQsIG9wdGlvbnMpIHsKICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4sIE5hTik7CiAgY29uc3QgYWRkaXRpb25hbERpZ2l0cyA9IG9wdGlvbnM/LmFkZGl0aW9uYWxEaWdpdHMgPz8gMjsKICBjb25zdCBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudCk7CiAgbGV0IGRhdGU7CiAgaWYgKGRhdGVTdHJpbmdzLmRhdGUpIHsKICAgIGNvbnN0IHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTsKICAgIGRhdGUgPSBwYXJzZURhdGUocGFyc2VZZWFyUmVzdWx0LnJlc3REYXRlU3RyaW5nLCBwYXJzZVllYXJSZXN1bHQueWVhcik7CiAgfQogIGlmICghZGF0ZSB8fCBpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIGNvbnN0IHRpbWVzdGFtcDIgPSArZGF0ZTsKICBsZXQgdGltZSA9IDA7CiAgbGV0IG9mZnNldDsKICBpZiAoZGF0ZVN0cmluZ3MudGltZSkgewogICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKTsKICAgIGlmIChpc05hTih0aW1lKSkgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgfQogIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSkgewogICAgb2Zmc2V0ID0gcGFyc2VUaW1lem9uZShkYXRlU3RyaW5ncy50aW1lem9uZSk7CiAgICBpZiAoaXNOYU4ob2Zmc2V0KSkgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHRtcERhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAyICsgdGltZSk7CiAgICBjb25zdCByZXN1bHQgPSB0b0RhdGUoMCwgb3B0aW9ucz8uaW4pOwogICAgcmVzdWx0LnNldEZ1bGxZZWFyKAogICAgICB0bXBEYXRlLmdldFVUQ0Z1bGxZZWFyKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDTW9udGgoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENEYXRlKCkKICAgICk7CiAgICByZXN1bHQuc2V0SG91cnMoCiAgICAgIHRtcERhdGUuZ2V0VVRDSG91cnMoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENNaW51dGVzKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDU2Vjb25kcygpLAogICAgICB0bXBEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpCiAgICApOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgcmV0dXJuIHRvRGF0ZSh0aW1lc3RhbXAyICsgdGltZSArIG9mZnNldCwgb3B0aW9ucz8uaW4pOwp9CmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7CiAgY29uc3QgZGF0ZVN0cmluZ3MgPSB7fTsKICBjb25zdCBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWl0ZXIpOwogIGxldCB0aW1lU3RyaW5nOwogIGlmIChhcnJheS5sZW5ndGggPiAyKSB7CiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7CiAgfQogIGlmICgvOi8udGVzdChhcnJheVswXSkpIHsKICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXTsKICB9IGVsc2UgewogICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdOwogICAgdGltZVN0cmluZyA9IGFycmF5WzFdOwogICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHsKICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdOwogICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoCiAgICAgICAgZGF0ZVN0cmluZ3MuZGF0ZS5sZW5ndGgsCiAgICAgICAgZGF0ZVN0cmluZy5sZW5ndGgKICAgICAgKTsKICAgIH0KICB9CiAgaWYgKHRpbWVTdHJpbmcpIHsKICAgIGNvbnN0IHRva2VuID0gcGF0dGVybnMudGltZXpvbmUuZXhlYyh0aW1lU3RyaW5nKTsKICAgIGlmICh0b2tlbikgewogICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAiIik7CiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV07CiAgICB9IGVsc2UgewogICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZzsKICAgIH0KICB9CiAgcmV0dXJuIGRhdGVTdHJpbmdzOwp9CmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7CiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKAogICAgIl4oPzooXFxkezR9fFsrLV1cXGR7IiArICg0ICsgYWRkaXRpb25hbERpZ2l0cykgKyAifSl8KFxcZHsyfXxbKy1dXFxkeyIgKyAoMiArIGFkZGl0aW9uYWxEaWdpdHMpICsgIn0pJCkiCiAgKTsKICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2gocmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiB7IHllYXI6IE5hTiwgcmVzdERhdGVTdHJpbmc6ICIiIH07CiAgY29uc3QgeWVhciA9IGNhcHR1cmVzWzFdID8gcGFyc2VJbnQoY2FwdHVyZXNbMV0pIDogbnVsbDsKICBjb25zdCBjZW50dXJ5ID0gY2FwdHVyZXNbMl0gPyBwYXJzZUludChjYXB0dXJlc1syXSkgOiBudWxsOwogIHJldHVybiB7CiAgICB5ZWFyOiBjZW50dXJ5ID09PSBudWxsID8geWVhciA6IGNlbnR1cnkgKiAxMDAsCiAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSgoY2FwdHVyZXNbMV0gfHwgY2FwdHVyZXNbMl0pLmxlbmd0aCkKICB9Owp9CmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7CiAgaWYgKHllYXIgPT09IG51bGwpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTsKICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgY29uc3QgaXNXZWVrRGF0ZSA9ICEhY2FwdHVyZXNbNF07CiAgY29uc3QgZGF5T2ZZZWFyID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1sxXSk7CiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7CiAgY29uc3QgZGF5ID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1szXSk7CiAgY29uc3Qgd2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNF0pOwogIGNvbnN0IGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTsKICBpZiAoaXNXZWVrRGF0ZSkgewogICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheU9mV2VlaykpIHsKICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogICAgfQogICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTsKICB9IGVsc2UgewogICAgY29uc3QgZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTsKICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXkpIHx8ICF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSkgewogICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgICB9CiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBNYXRoLm1heChkYXlPZlllYXIsIGRheSkpOwogICAgcmV0dXJuIGRhdGU7CiAgfQp9CmZ1bmN0aW9uIHBhcnNlRGF0ZVVuaXQodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiA/IHBhcnNlSW50KHZhbHVlMikgOiAxOwp9CmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7CiAgY29uc3QgY2FwdHVyZXMgPSB0aW1lU3RyaW5nLm1hdGNoKHRpbWVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIE5hTjsKICBjb25zdCBob3VycyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMV0pOwogIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzJdKTsKICBjb25zdCBzZWNvbmRzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1szXSk7CiAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7CiAgICByZXR1cm4gTmFOOwogIH0KICByZXR1cm4gaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUgKyBzZWNvbmRzICogMWUzOwp9CmZ1bmN0aW9uIHBhcnNlVGltZVVuaXQodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBwYXJzZUZsb2F0KHZhbHVlMi5yZXBsYWNlKCIsIiwgIi4iKSkgfHwgMDsKfQpmdW5jdGlvbiBwYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nKSB7CiAgaWYgKHRpbWV6b25lU3RyaW5nID09PSAiWiIpIHJldHVybiAwOwogIGNvbnN0IGNhcHR1cmVzID0gdGltZXpvbmVTdHJpbmcubWF0Y2godGltZXpvbmVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIDA7CiAgY29uc3Qgc2lnbiA9IGNhcHR1cmVzWzFdID09PSAiKyIgPyAtMSA6IDE7CiAgY29uc3QgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7CiAgY29uc3QgbWludXRlcyA9IGNhcHR1cmVzWzNdICYmIHBhcnNlSW50KGNhcHR1cmVzWzNdKSB8fCAwOwogIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHsKICAgIHJldHVybiBOYU47CiAgfQogIHJldHVybiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlKTsKfQpmdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHsKICBjb25zdCBkYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApOwogIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgNzsKICBjb25zdCBkaWZmID0gKHdlZWsgLSAxKSAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5OwogIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlOwp9CmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleDIoeWVhcikgewogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7CiAgcmV0dXJuIG1vbnRoID49IDAgJiYgbW9udGggPD0gMTEgJiYgZGF0ZSA+PSAxICYmIGRhdGUgPD0gKGRheXNJbk1vbnRoc1ttb250aF0gfHwgKGlzTGVhcFllYXJJbmRleDIoeWVhcikgPyAyOSA6IDI4KSk7Cn0KZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikgewogIHJldHVybiBkYXlPZlllYXIgPj0gMSAmJiBkYXlPZlllYXIgPD0gKGlzTGVhcFllYXJJbmRleDIoeWVhcikgPyAzNjYgOiAzNjUpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlV2Vla0RhdGUoX3llYXIsIHdlZWssIGRheSkgewogIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjsKfQpmdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHsKICBpZiAoaG91cnMgPT09IDI0KSB7CiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwOwogIH0KICByZXR1cm4gc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCAmJiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8IDYwICYmIGhvdXJzID49IDAgJiYgaG91cnMgPCAyNTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVRpbWV6b25lKF9ob3VycywgbWludXRlcykgewogIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTsKfQp2YXIgcGF0dGVybnMsIGRhdGVSZWdleCwgdGltZVJlZ2V4LCB0aW1lem9uZVJlZ2V4LCBkYXlzSW5Nb250aHMsIHBhcnNlSVNPX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlSVNPID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBwYXR0ZXJucyA9IHsKICAgICAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLywKICAgICAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksCiAgICAgIHRpbWV6b25lOiAvKFtaKy1dLiopJC8KICAgIH07CiAgICBkYXRlUmVnZXggPSAvXi0/KD86KFxkezN9KXwoXGR7Mn0pKD86LT8oXGR7Mn0pKT98VyhcZHsyfSkoPzotPyhcZHsxfSkpP3wpJC87CiAgICB0aW1lUmVnZXggPSAvXihcZHsyfSg/OlsuLF1cZCopPykoPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyg/Ojo/KFxkezJ9KD86Wy4sXVxkKik/KSk/JC87CiAgICB0aW1lem9uZVJlZ2V4ID0gL14oWystXSkoXGR7Mn0pKD86Oj8oXGR7Mn0pKT8kLzsKICAgIGRheXNJbk1vbnRocyA9IFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdOwogICAgcGFyc2VJU09fZGVmYXVsdCA9IHBhcnNlSVNPOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSlNPTi5qcwpmdW5jdGlvbiBwYXJzZUpTT04oZGF0ZVN0ciwgb3B0aW9ucykgewogIGNvbnN0IHBhcnRzID0gZGF0ZVN0ci5tYXRjaCgKICAgIC8oXGR7NH0pLShcZHsyfSktKFxkezJ9KVtUIF0oXGR7Mn0pOihcZHsyfSk6KFxkezJ9KSg/OlwuKFxkezAsN30pKT8oPzpafCguKShcZHsyfSk6PyhcZHsyfSk/KT8vCiAgKTsKICBpZiAoIXBhcnRzKSByZXR1cm4gdG9EYXRlKE5hTiwgb3B0aW9ucz8uaW4pOwogIHJldHVybiB0b0RhdGUoCiAgICBEYXRlLlVUQygKICAgICAgK3BhcnRzWzFdLAogICAgICArcGFydHNbMl0gLSAxLAogICAgICArcGFydHNbM10sCiAgICAgICtwYXJ0c1s0XSAtICgrcGFydHNbOV0gfHwgMCkgKiAocGFydHNbOF0gPT0gIi0iID8gLTEgOiAxKSwKICAgICAgK3BhcnRzWzVdIC0gKCtwYXJ0c1sxMF0gfHwgMCkgKiAocGFydHNbOF0gPT0gIi0iID8gLTEgOiAxKSwKICAgICAgK3BhcnRzWzZdLAogICAgICArKChwYXJ0c1s3XSB8fCAiMCIpICsgIjAwIikuc3Vic3RyaW5nKDAsIDMpCiAgICApLAogICAgb3B0aW9ucz8uaW4KICApOwp9CnZhciBwYXJzZUpTT05fZGVmYXVsdDsKdmFyIGluaXRfcGFyc2VKU09OID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSlNPTi5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcGFyc2VKU09OX2RlZmF1bHQgPSBwYXJzZUpTT047CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNEYXkuanMKZnVuY3Rpb24gcHJldmlvdXNEYXkoZGF0ZSwgZGF5LCBvcHRpb25zKSB7CiAgbGV0IGRlbHRhID0gZ2V0RGF5KGRhdGUsIG9wdGlvbnMpIC0gZGF5OwogIGlmIChkZWx0YSA8PSAwKSBkZWx0YSArPSA3OwogIHJldHVybiBzdWJEYXlzKGRhdGUsIGRlbHRhLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNEYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNEYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNEYXkuanMiKCkgewogICAgaW5pdF9nZXREYXkoKTsKICAgIGluaXRfc3ViRGF5cygpOwogICAgcHJldmlvdXNEYXlfZGVmYXVsdCA9IHByZXZpb3VzRGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRnJpZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzRnJpZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgNSwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzRnJpZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzRnJpZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRnJpZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzRnJpZGF5X2RlZmF1bHQgPSBwcmV2aW91c0ZyaWRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c01vbmRheS5qcwpmdW5jdGlvbiBwcmV2aW91c01vbmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDEsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c01vbmRheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c01vbmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c01vbmRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c01vbmRheV9kZWZhdWx0ID0gcHJldmlvdXNNb25kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTYXR1cmRheS5qcwpmdW5jdGlvbiBwcmV2aW91c1NhdHVyZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgNiwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzU2F0dXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1NhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzU2F0dXJkYXlfZGVmYXVsdCA9IHByZXZpb3VzU2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTdW5kYXkuanMKZnVuY3Rpb24gcHJldmlvdXNTdW5kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAwLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNTdW5kYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTdW5kYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNTdW5kYXlfZGVmYXVsdCA9IHByZXZpb3VzU3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDQsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c1RodXJzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzVGh1cnNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNUaHVyc2RheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c1RodXJzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1RodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVHVlc2RheS5qcwpmdW5jdGlvbiBwcmV2aW91c1R1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAyLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNUdWVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzVHVlc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNUdWVzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1R1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNXZWRuZXNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAzLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNXZWRuZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNXZWRuZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNXZWRuZXNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNXZWRuZXNkYXlfZGVmYXVsdCA9IHByZXZpb3VzV2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9Nb250aHMuanMKZnVuY3Rpb24gcXVhcnRlcnNUb01vbnRocyhxdWFydGVycykgewogIHJldHVybiBNYXRoLnRydW5jKHF1YXJ0ZXJzICogbW9udGhzSW5RdWFydGVyKTsKfQp2YXIgcXVhcnRlcnNUb01vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9xdWFydGVyc1RvTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9Nb250aHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHF1YXJ0ZXJzVG9Nb250aHNfZGVmYXVsdCA9IHF1YXJ0ZXJzVG9Nb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcXVhcnRlcnNUb1llYXJzLmpzCmZ1bmN0aW9uIHF1YXJ0ZXJzVG9ZZWFycyhxdWFydGVycykgewogIGNvbnN0IHllYXJzID0gcXVhcnRlcnMgLyBxdWFydGVyc0luWWVhcjsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyk7Cn0KdmFyIHF1YXJ0ZXJzVG9ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9xdWFydGVyc1RvWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcXVhcnRlcnNUb1llYXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBxdWFydGVyc1RvWWVhcnNfZGVmYXVsdCA9IHF1YXJ0ZXJzVG9ZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9yb3VuZFRvTmVhcmVzdEhvdXJzLmpzCmZ1bmN0aW9uIHJvdW5kVG9OZWFyZXN0SG91cnMoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxOwogIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDEyKQogICAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZnJhY3Rpb25hbE1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgLyA2MDsKICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IGRhdGVfLmdldFNlY29uZHMoKSAvIDYwIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IGRhdGVfLmdldE1pbGxpc2Vjb25kcygpIC8gMWUzIC8gNjAgLyA2MDsKICBjb25zdCBob3VycyA9IGRhdGVfLmdldEhvdXJzKCkgKyBmcmFjdGlvbmFsTWludXRlcyArIGZyYWN0aW9uYWxTZWNvbmRzICsgZnJhY3Rpb25hbE1pbGxpc2Vjb25kczsKICBjb25zdCBtZXRob2QgPSBvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiOwogIGNvbnN0IHJvdW5kaW5nTWV0aG9kID0gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKTsKICBjb25zdCByb3VuZGVkSG91cnMgPSByb3VuZGluZ01ldGhvZChob3VycyAvIG5lYXJlc3RUbykgKiBuZWFyZXN0VG87CiAgZGF0ZV8uc2V0SG91cnMocm91bmRlZEhvdXJzLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHJvdW5kVG9OZWFyZXN0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfcm91bmRUb05lYXJlc3RIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9yb3VuZFRvTmVhcmVzdEhvdXJzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHJvdW5kVG9OZWFyZXN0SG91cnNfZGVmYXVsdCA9IHJvdW5kVG9OZWFyZXN0SG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzCmZ1bmN0aW9uIHJvdW5kVG9OZWFyZXN0TWludXRlcyhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgbmVhcmVzdFRvID0gb3B0aW9ucz8ubmVhcmVzdFRvID8/IDE7CiAgaWYgKG5lYXJlc3RUbyA8IDEgfHwgbmVhcmVzdFRvID4gMzApIHJldHVybiBjb25zdHJ1Y3RGcm9tKGRhdGUsIE5hTik7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gZGF0ZV8uZ2V0U2Vjb25kcygpIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbE1pbGxpc2Vjb25kcyA9IGRhdGVfLmdldE1pbGxpc2Vjb25kcygpIC8gMWUzIC8gNjA7CiAgY29uc3QgbWludXRlcyA9IGRhdGVfLmdldE1pbnV0ZXMoKSArIGZyYWN0aW9uYWxTZWNvbmRzICsgZnJhY3Rpb25hbE1pbGxpc2Vjb25kczsKICBjb25zdCBtZXRob2QgPSBvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiOwogIGNvbnN0IHJvdW5kaW5nTWV0aG9kID0gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKTsKICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMgLyBuZWFyZXN0VG8pICogbmVhcmVzdFRvOwogIGRhdGVfLnNldE1pbnV0ZXMocm91bmRlZE1pbnV0ZXMsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgcm91bmRUb05lYXJlc3RNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3JvdW5kVG9OZWFyZXN0TWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9yb3VuZFRvTmVhcmVzdE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcm91bmRUb05lYXJlc3RNaW51dGVzX2RlZmF1bHQgPSByb3VuZFRvTmVhcmVzdE1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMKZnVuY3Rpb24gc2Vjb25kc1RvSG91cnMoc2Vjb25kcykgewogIGNvbnN0IGhvdXJzID0gc2Vjb25kcyAvIHNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBzZWNvbmRzVG9Ib3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9Ib3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvSG91cnNfZGVmYXVsdCA9IHNlY29uZHNUb0hvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBzZWNvbmRzVG9NaWxsaXNlY29uZHMoc2Vjb25kcykgewogIHJldHVybiBzZWNvbmRzICogbWlsbGlzZWNvbmRzSW5TZWNvbmQ7Cn0KdmFyIHNlY29uZHNUb01pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9NaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBzZWNvbmRzVG9NaWxsaXNlY29uZHNfZGVmYXVsdCA9IHNlY29uZHNUb01pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaW51dGVzLmpzCmZ1bmN0aW9uIHNlY29uZHNUb01pbnV0ZXMoc2Vjb25kcykgewogIGNvbnN0IG1pbnV0ZXMgPSBzZWNvbmRzIC8gc2Vjb25kc0luTWludXRlOwogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMpOwp9CnZhciBzZWNvbmRzVG9NaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NlY29uZHNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvTWludXRlc19kZWZhdWx0ID0gc2Vjb25kc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNb250aC5qcwpmdW5jdGlvbiBzZXRNb250aChkYXRlLCBtb250aCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXRlKCk7CiAgY29uc3QgbWlkTW9udGggPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIG1pZE1vbnRoLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxNSk7CiAgbWlkTW9udGguc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aChtaWRNb250aCk7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIE1hdGgubWluKGRheSwgZGF5c0luTW9udGgpKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldE1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X3NldE1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1vbnRoX2RlZmF1bHQgPSBzZXRNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXQuanMKZnVuY3Rpb24gc2V0KGRhdGUsIHZhbHVlcywgb3B0aW9ucykgewogIGxldCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtfZGF0ZSkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgaWYgKHZhbHVlcy55ZWFyICE9IG51bGwpIF9kYXRlLnNldEZ1bGxZZWFyKHZhbHVlcy55ZWFyKTsKICBpZiAodmFsdWVzLm1vbnRoICE9IG51bGwpIF9kYXRlID0gc2V0TW9udGgoX2RhdGUsIHZhbHVlcy5tb250aCk7CiAgaWYgKHZhbHVlcy5kYXRlICE9IG51bGwpIF9kYXRlLnNldERhdGUodmFsdWVzLmRhdGUpOwogIGlmICh2YWx1ZXMuaG91cnMgIT0gbnVsbCkgX2RhdGUuc2V0SG91cnModmFsdWVzLmhvdXJzKTsKICBpZiAodmFsdWVzLm1pbnV0ZXMgIT0gbnVsbCkgX2RhdGUuc2V0TWludXRlcyh2YWx1ZXMubWludXRlcyk7CiAgaWYgKHZhbHVlcy5zZWNvbmRzICE9IG51bGwpIF9kYXRlLnNldFNlY29uZHModmFsdWVzLnNlY29uZHMpOwogIGlmICh2YWx1ZXMubWlsbGlzZWNvbmRzICE9IG51bGwpIF9kYXRlLnNldE1pbGxpc2Vjb25kcyh2YWx1ZXMubWlsbGlzZWNvbmRzKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldF9kZWZhdWx0Owp2YXIgaW5pdF9zZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0LmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zZXRNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldF9kZWZhdWx0ID0gc2V0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERhdGUuanMKZnVuY3Rpb24gc2V0RGF0ZShkYXRlLCBkYXlPZk1vbnRoLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldERhdGUoZGF5T2ZNb250aCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXREYXRlX2RlZmF1bHQ7CnZhciBpbml0X3NldERhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0RGF0ZV9kZWZhdWx0ID0gc2V0RGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXlPZlllYXIuanMKZnVuY3Rpb24gc2V0RGF5T2ZZZWFyKGRhdGUsIGRheU9mWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRNb250aCgwKTsKICBkYXRlXy5zZXREYXRlKGRheU9mWWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXREYXlPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0RGF5T2ZZZWFyX2RlZmF1bHQgPSBzZXREYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGVmYXVsdE9wdGlvbnMuanMKZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMyKG9wdGlvbnMpIHsKICBjb25zdCByZXN1bHQgPSB7fTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZGVmYXVsdE9wdGlvbnMyKSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zMiwgcHJvcGVydHkpKSB7CiAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSBkZWZhdWx0T3B0aW9uczJbcHJvcGVydHldOwogICAgfQogIH0KICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIG9wdGlvbnMpIHsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgcHJvcGVydHkpKSB7CiAgICAgIGlmIChvcHRpb25zW3Byb3BlcnR5XSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wZXJ0eV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9wdGlvbnNbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgfQogIHNldERlZmF1bHRPcHRpb25zKHJlc3VsdCk7Cn0KdmFyIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQ7CnZhciBpbml0X3NldERlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQgPSBzZXREZWZhdWx0T3B0aW9uczI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMKZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldEhvdXJzX2RlZmF1bHQgPSBzZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKGRhdGUsIG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gc2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMKZnVuY3Rpb24gc2V0TWludXRlcyhkYXRlLCBtaW51dGVzLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0TWludXRlc19kZWZhdWx0ID0gc2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzCmZ1bmN0aW9uIHNldFF1YXJ0ZXIoZGF0ZSwgcXVhcnRlciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBvbGRRdWFydGVyID0gTWF0aC50cnVuYyhkYXRlXy5nZXRNb250aCgpIC8gMykgKyAxOwogIGNvbnN0IGRpZmYgPSBxdWFydGVyIC0gb2xkUXVhcnRlcjsKICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7Cn0KdmFyIHNldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRRdWFydGVyX2RlZmF1bHQgPSBzZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFNlY29uZHMuanMKZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0U2Vjb25kc19kZWZhdWx0ID0gc2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrWWVhci5qcwpmdW5jdGlvbiBzZXRXZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygKICAgIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbiksCiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsKICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mV2Vla1llYXIoZmlyc3RXZWVrLCBvcHRpb25zKTsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRXZWVrWWVhcl9kZWZhdWx0ID0gc2V0V2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcwpmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRZZWFyX2RlZmF1bHQgPSBzZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMKZnVuY3Rpb24gc3RhcnRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRlY2FkZV9kZWZhdWx0ID0gc3RhcnRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMKZnVuY3Rpb24gc3RhcnRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgc3RhcnRPZlRvZGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBzdGFydE9mVG9kYXlfZGVmYXVsdCA9IHN0YXJ0T2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMKZnVuY3Rpb24gc3RhcnRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlOwp9CnZhciBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdCA9IHN0YXJ0T2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzCmZ1bmN0aW9uIHN0YXJ0T2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5IC0gMSk7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgc3RhcnRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mWWVzdGVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIHN0YXJ0T2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IHN0YXJ0T2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzCmZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1vbnRocy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgc3ViTW9udGhzX2RlZmF1bHQgPSBzdWJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzCmZ1bmN0aW9uIHN1YihkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IHsKICAgIHllYXJzID0gMCwKICAgIG1vbnRoczogbW9udGhzMiA9IDAsCiAgICB3ZWVrcyA9IDAsCiAgICBkYXlzOiBkYXlzMiA9IDAsCiAgICBob3VycyA9IDAsCiAgICBtaW51dGVzID0gMCwKICAgIHNlY29uZHMgPSAwCiAgfSA9IGR1cmF0aW9uOwogIGNvbnN0IHdpdGhvdXRNb250aHMgPSBzdWJNb250aHMoZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIsIG9wdGlvbnMpOwogIGNvbnN0IHdpdGhvdXREYXlzID0gc3ViRGF5cyh3aXRob3V0TW9udGhzLCBkYXlzMiArIHdlZWtzICogNywgb3B0aW9ucyk7CiAgY29uc3QgbWludXRlc1RvU3ViID0gbWludXRlcyArIGhvdXJzICogNjA7CiAgY29uc3Qgc2Vjb25kc1RvU3ViID0gc2Vjb25kcyArIG1pbnV0ZXNUb1N1YiAqIDYwOwogIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxZTM7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3dpdGhvdXREYXlzIC0gbXNUb1N1Yik7Cn0KdmFyIHN1Yl9kZWZhdWx0Owp2YXIgaW5pdF9zdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgc3ViX2RlZmF1bHQgPSBzdWI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIHN1YkJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJCdXNpbmVzc0RheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViQnVzaW5lc3NEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkJ1c2luZXNzRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZEJ1c2luZXNzRGF5cygpOwogICAgc3ViQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBzdWJCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMKZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZEhvdXJzKCk7CiAgICBzdWJIb3Vyc19kZWZhdWx0ID0gc3ViSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgc3ViTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzdWJNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcwpmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaW51dGVzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3N1Yk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIHN1Yk1pbnV0ZXNfZGVmYXVsdCA9IHN1Yk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMKZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBzdWJRdWFydGVyc19kZWZhdWx0ID0gc3ViUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcwpmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRTZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3N1YlNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIHN1YlNlY29uZHNfZGVmYXVsdCA9IHN1YlNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMKZnVuY3Rpb24gc3ViV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBzdWJXZWVrc19kZWZhdWx0ID0gc3ViV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViWWVhcnMuanMKZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZFllYXJzKCk7CiAgICBzdWJZZWFyc19kZWZhdWx0ID0gc3ViWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvd2Vla3NUb0RheXMuanMKZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHsKICByZXR1cm4gTWF0aC50cnVuYyh3ZWVrcyAqIGRheXNJbldlZWspOwp9CnZhciB3ZWVrc1RvRGF5c19kZWZhdWx0Owp2YXIgaW5pdF93ZWVrc1RvRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy93ZWVrc1RvRGF5cy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgd2Vla3NUb0RheXNfZGVmYXVsdCA9IHdlZWtzVG9EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9EYXlzLmpzCmZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMgKiBkYXlzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb0RheXNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9EYXlzX2RlZmF1bHQgPSB5ZWFyc1RvRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHllYXJzVG9Nb250aHMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7Cn0KdmFyIHllYXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICB5ZWFyc1RvTW9udGhzX2RlZmF1bHQgPSB5ZWFyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9RdWFydGVycy5qcwpmdW5jdGlvbiB5ZWFyc1RvUXVhcnRlcnMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X3llYXJzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9RdWFydGVyc19kZWZhdWx0ID0geWVhcnNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2luZGV4LmpzCnZhciBkYXRlX2Zuc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRhdGVfZm5zX2V4cG9ydHMsIHsKICBhZGQ6ICgpID0+IGFkZCwKICBhZGRCdXNpbmVzc0RheXM6ICgpID0+IGFkZEJ1c2luZXNzRGF5cywKICBhZGREYXlzOiAoKSA9PiBhZGREYXlzLAogIGFkZEhvdXJzOiAoKSA9PiBhZGRIb3VycywKICBhZGRJU09XZWVrWWVhcnM6ICgpID0+IGFkZElTT1dlZWtZZWFycywKICBhZGRNaWxsaXNlY29uZHM6ICgpID0+IGFkZE1pbGxpc2Vjb25kcywKICBhZGRNaW51dGVzOiAoKSA9PiBhZGRNaW51dGVzLAogIGFkZE1vbnRoczogKCkgPT4gYWRkTW9udGhzLAogIGFkZFF1YXJ0ZXJzOiAoKSA9PiBhZGRRdWFydGVycywKICBhZGRTZWNvbmRzOiAoKSA9PiBhZGRTZWNvbmRzLAogIGFkZFdlZWtzOiAoKSA9PiBhZGRXZWVrcywKICBhZGRZZWFyczogKCkgPT4gYWRkWWVhcnMsCiAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6ICgpID0+IGFyZUludGVydmFsc092ZXJsYXBwaW5nLAogIGNsYW1wOiAoKSA9PiBjbGFtcCwKICBjbG9zZXN0SW5kZXhUbzogKCkgPT4gY2xvc2VzdEluZGV4VG8sCiAgY2xvc2VzdFRvOiAoKSA9PiBjbG9zZXN0VG8sCiAgY29tcGFyZUFzYzogKCkgPT4gY29tcGFyZUFzYywKICBjb21wYXJlRGVzYzogKCkgPT4gY29tcGFyZURlc2MsCiAgY29uc3RydWN0RnJvbTogKCkgPT4gY29uc3RydWN0RnJvbSwKICBjb25zdHJ1Y3ROb3c6ICgpID0+IGNvbnN0cnVjdE5vdywKICBkYXlzVG9XZWVrczogKCkgPT4gZGF5c1RvV2Vla3MsCiAgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczogKCkgPT4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcywKICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLAogIGRpZmZlcmVuY2VJbkRheXM6ICgpID0+IGRpZmZlcmVuY2VJbkRheXMsCiAgZGlmZmVyZW5jZUluSG91cnM6ICgpID0+IGRpZmZlcmVuY2VJbkhvdXJzLAogIGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczogKCkgPT4gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczogKCkgPT4gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLAogIGRpZmZlcmVuY2VJbk1pbnV0ZXM6ICgpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMsCiAgZGlmZmVyZW5jZUluTW9udGhzOiAoKSA9PiBkaWZmZXJlbmNlSW5Nb250aHMsCiAgZGlmZmVyZW5jZUluUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJblF1YXJ0ZXJzLAogIGRpZmZlcmVuY2VJblNlY29uZHM6ICgpID0+IGRpZmZlcmVuY2VJblNlY29uZHMsCiAgZGlmZmVyZW5jZUluV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbldlZWtzLAogIGRpZmZlcmVuY2VJblllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5ZZWFycywKICBlYWNoRGF5T2ZJbnRlcnZhbDogKCkgPT4gZWFjaERheU9mSW50ZXJ2YWwsCiAgZWFjaEhvdXJPZkludGVydmFsOiAoKSA9PiBlYWNoSG91ck9mSW50ZXJ2YWwsCiAgZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNaW51dGVPZkludGVydmFsLAogIGVhY2hNb250aE9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNb250aE9mSW50ZXJ2YWwsCiAgZWFjaFF1YXJ0ZXJPZkludGVydmFsOiAoKSA9PiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla09mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZk1vbnRoOiAoKSA9PiBlYWNoV2Vla2VuZE9mTW9udGgsCiAgZWFjaFdlZWtlbmRPZlllYXI6ICgpID0+IGVhY2hXZWVrZW5kT2ZZZWFyLAogIGVhY2hZZWFyT2ZJbnRlcnZhbDogKCkgPT4gZWFjaFllYXJPZkludGVydmFsLAogIGVuZE9mRGF5OiAoKSA9PiBlbmRPZkRheSwKICBlbmRPZkRlY2FkZTogKCkgPT4gZW5kT2ZEZWNhZGUsCiAgZW5kT2ZIb3VyOiAoKSA9PiBlbmRPZkhvdXIsCiAgZW5kT2ZJU09XZWVrOiAoKSA9PiBlbmRPZklTT1dlZWssCiAgZW5kT2ZJU09XZWVrWWVhcjogKCkgPT4gZW5kT2ZJU09XZWVrWWVhciwKICBlbmRPZk1pbnV0ZTogKCkgPT4gZW5kT2ZNaW51dGUsCiAgZW5kT2ZNb250aDogKCkgPT4gZW5kT2ZNb250aCwKICBlbmRPZlF1YXJ0ZXI6ICgpID0+IGVuZE9mUXVhcnRlciwKICBlbmRPZlNlY29uZDogKCkgPT4gZW5kT2ZTZWNvbmQsCiAgZW5kT2ZUb2RheTogKCkgPT4gZW5kT2ZUb2RheSwKICBlbmRPZlRvbW9ycm93OiAoKSA9PiBlbmRPZlRvbW9ycm93LAogIGVuZE9mV2VlazogKCkgPT4gZW5kT2ZXZWVrLAogIGVuZE9mWWVhcjogKCkgPT4gZW5kT2ZZZWFyLAogIGVuZE9mWWVzdGVyZGF5OiAoKSA9PiBlbmRPZlllc3RlcmRheSwKICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICBmb3JtYXREYXRlOiAoKSA9PiBmb3JtYXQsCiAgZm9ybWF0RGlzdGFuY2U6ICgpID0+IGZvcm1hdERpc3RhbmNlMiwKICBmb3JtYXREaXN0YW5jZVN0cmljdDogKCkgPT4gZm9ybWF0RGlzdGFuY2VTdHJpY3QsCiAgZm9ybWF0RGlzdGFuY2VUb05vdzogKCkgPT4gZm9ybWF0RGlzdGFuY2VUb05vdywKICBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OiAoKSA9PiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LAogIGZvcm1hdER1cmF0aW9uOiAoKSA9PiBmb3JtYXREdXJhdGlvbiwKICBmb3JtYXRJU086ICgpID0+IGZvcm1hdElTTywKICBmb3JtYXRJU085MDc1OiAoKSA9PiBmb3JtYXRJU085MDc1LAogIGZvcm1hdElTT0R1cmF0aW9uOiAoKSA9PiBmb3JtYXRJU09EdXJhdGlvbiwKICBmb3JtYXRSRkMzMzM5OiAoKSA9PiBmb3JtYXRSRkMzMzM5LAogIGZvcm1hdFJGQzcyMzE6ICgpID0+IGZvcm1hdFJGQzcyMzEsCiAgZm9ybWF0UmVsYXRpdmU6ICgpID0+IGZvcm1hdFJlbGF0aXZlMiwKICBmb3JtYXR0ZXJzOiAoKSA9PiBmb3JtYXR0ZXJzLAogIGZyb21Vbml4VGltZTogKCkgPT4gZnJvbVVuaXhUaW1lLAogIGdldERhdGU6ICgpID0+IGdldERhdGUsCiAgZ2V0RGF5OiAoKSA9PiBnZXREYXksCiAgZ2V0RGF5T2ZZZWFyOiAoKSA9PiBnZXREYXlPZlllYXIsCiAgZ2V0RGF5c0luTW9udGg6ICgpID0+IGdldERheXNJbk1vbnRoLAogIGdldERheXNJblllYXI6ICgpID0+IGdldERheXNJblllYXIsCiAgZ2V0RGVjYWRlOiAoKSA9PiBnZXREZWNhZGUsCiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zMiwKICBnZXRIb3VyczogKCkgPT4gZ2V0SG91cnMsCiAgZ2V0SVNPRGF5OiAoKSA9PiBnZXRJU09EYXksCiAgZ2V0SVNPV2VlazogKCkgPT4gZ2V0SVNPV2VlaywKICBnZXRJU09XZWVrWWVhcjogKCkgPT4gZ2V0SVNPV2Vla1llYXIsCiAgZ2V0SVNPV2Vla3NJblllYXI6ICgpID0+IGdldElTT1dlZWtzSW5ZZWFyLAogIGdldE1pbGxpc2Vjb25kczogKCkgPT4gZ2V0TWlsbGlzZWNvbmRzLAogIGdldE1pbnV0ZXM6ICgpID0+IGdldE1pbnV0ZXMsCiAgZ2V0TW9udGg6ICgpID0+IGdldE1vbnRoLAogIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOiAoKSA9PiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscywKICBnZXRRdWFydGVyOiAoKSA9PiBnZXRRdWFydGVyLAogIGdldFNlY29uZHM6ICgpID0+IGdldFNlY29uZHMsCiAgZ2V0VGltZTogKCkgPT4gZ2V0VGltZSwKICBnZXRVbml4VGltZTogKCkgPT4gZ2V0VW5peFRpbWUsCiAgZ2V0V2VlazogKCkgPT4gZ2V0V2VlaywKICBnZXRXZWVrT2ZNb250aDogKCkgPT4gZ2V0V2Vla09mTW9udGgsCiAgZ2V0V2Vla1llYXI6ICgpID0+IGdldFdlZWtZZWFyLAogIGdldFdlZWtzSW5Nb250aDogKCkgPT4gZ2V0V2Vla3NJbk1vbnRoLAogIGdldFllYXI6ICgpID0+IGdldFllYXIsCiAgaG91cnNUb01pbGxpc2Vjb25kczogKCkgPT4gaG91cnNUb01pbGxpc2Vjb25kcywKICBob3Vyc1RvTWludXRlczogKCkgPT4gaG91cnNUb01pbnV0ZXMsCiAgaG91cnNUb1NlY29uZHM6ICgpID0+IGhvdXJzVG9TZWNvbmRzLAogIGludGVydmFsOiAoKSA9PiBpbnRlcnZhbDIsCiAgaW50ZXJ2YWxUb0R1cmF0aW9uOiAoKSA9PiBpbnRlcnZhbFRvRHVyYXRpb24sCiAgaW50bEZvcm1hdDogKCkgPT4gaW50bEZvcm1hdCwKICBpbnRsRm9ybWF0RGlzdGFuY2U6ICgpID0+IGludGxGb3JtYXREaXN0YW5jZSwKICBpc0FmdGVyOiAoKSA9PiBpc0FmdGVyLAogIGlzQmVmb3JlOiAoKSA9PiBpc0JlZm9yZSwKICBpc0RhdGU6ICgpID0+IGlzRGF0ZSwKICBpc0VxdWFsOiAoKSA9PiBpc0VxdWFsLAogIGlzRXhpc3RzOiAoKSA9PiBpc0V4aXN0cywKICBpc0ZpcnN0RGF5T2ZNb250aDogKCkgPT4gaXNGaXJzdERheU9mTW9udGgsCiAgaXNGcmlkYXk6ICgpID0+IGlzRnJpZGF5LAogIGlzRnV0dXJlOiAoKSA9PiBpc0Z1dHVyZSwKICBpc0xhc3REYXlPZk1vbnRoOiAoKSA9PiBpc0xhc3REYXlPZk1vbnRoLAogIGlzTGVhcFllYXI6ICgpID0+IGlzTGVhcFllYXIsCiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaDIsCiAgaXNNb25kYXk6ICgpID0+IGlzTW9uZGF5LAogIGlzUGFzdDogKCkgPT4gaXNQYXN0LAogIGlzU2FtZURheTogKCkgPT4gaXNTYW1lRGF5LAogIGlzU2FtZUhvdXI6ICgpID0+IGlzU2FtZUhvdXIsCiAgaXNTYW1lSVNPV2VlazogKCkgPT4gaXNTYW1lSVNPV2VlaywKICBpc1NhbWVJU09XZWVrWWVhcjogKCkgPT4gaXNTYW1lSVNPV2Vla1llYXIsCiAgaXNTYW1lTWludXRlOiAoKSA9PiBpc1NhbWVNaW51dGUsCiAgaXNTYW1lTW9udGg6ICgpID0+IGlzU2FtZU1vbnRoLAogIGlzU2FtZVF1YXJ0ZXI6ICgpID0+IGlzU2FtZVF1YXJ0ZXIsCiAgaXNTYW1lU2Vjb25kOiAoKSA9PiBpc1NhbWVTZWNvbmQsCiAgaXNTYW1lV2VlazogKCkgPT4gaXNTYW1lV2VlaywKICBpc1NhbWVZZWFyOiAoKSA9PiBpc1NhbWVZZWFyLAogIGlzU2F0dXJkYXk6ICgpID0+IGlzU2F0dXJkYXksCiAgaXNTdW5kYXk6ICgpID0+IGlzU3VuZGF5LAogIGlzVGhpc0hvdXI6ICgpID0+IGlzVGhpc0hvdXIsCiAgaXNUaGlzSVNPV2VlazogKCkgPT4gaXNUaGlzSVNPV2VlaywKICBpc1RoaXNNaW51dGU6ICgpID0+IGlzVGhpc01pbnV0ZSwKICBpc1RoaXNNb250aDogKCkgPT4gaXNUaGlzTW9udGgsCiAgaXNUaGlzUXVhcnRlcjogKCkgPT4gaXNUaGlzUXVhcnRlciwKICBpc1RoaXNTZWNvbmQ6ICgpID0+IGlzVGhpc1NlY29uZCwKICBpc1RoaXNXZWVrOiAoKSA9PiBpc1RoaXNXZWVrLAogIGlzVGhpc1llYXI6ICgpID0+IGlzVGhpc1llYXIsCiAgaXNUaHVyc2RheTogKCkgPT4gaXNUaHVyc2RheSwKICBpc1RvZGF5OiAoKSA9PiBpc1RvZGF5LAogIGlzVG9tb3Jyb3c6ICgpID0+IGlzVG9tb3Jyb3csCiAgaXNUdWVzZGF5OiAoKSA9PiBpc1R1ZXNkYXksCiAgaXNWYWxpZDogKCkgPT4gaXNWYWxpZCwKICBpc1dlZG5lc2RheTogKCkgPT4gaXNXZWRuZXNkYXksCiAgaXNXZWVrZW5kOiAoKSA9PiBpc1dlZWtlbmQsCiAgaXNXaXRoaW5JbnRlcnZhbDogKCkgPT4gaXNXaXRoaW5JbnRlcnZhbCwKICBpc1llc3RlcmRheTogKCkgPT4gaXNZZXN0ZXJkYXksCiAgbGFzdERheU9mRGVjYWRlOiAoKSA9PiBsYXN0RGF5T2ZEZWNhZGUsCiAgbGFzdERheU9mSVNPV2VlazogKCkgPT4gbGFzdERheU9mSVNPV2VlaywKICBsYXN0RGF5T2ZJU09XZWVrWWVhcjogKCkgPT4gbGFzdERheU9mSVNPV2Vla1llYXIsCiAgbGFzdERheU9mTW9udGg6ICgpID0+IGxhc3REYXlPZk1vbnRoLAogIGxhc3REYXlPZlF1YXJ0ZXI6ICgpID0+IGxhc3REYXlPZlF1YXJ0ZXIsCiAgbGFzdERheU9mV2VlazogKCkgPT4gbGFzdERheU9mV2VlaywKICBsYXN0RGF5T2ZZZWFyOiAoKSA9PiBsYXN0RGF5T2ZZZWFyLAogIGxpZ2h0Rm9ybWF0OiAoKSA9PiBsaWdodEZvcm1hdCwKICBsaWdodEZvcm1hdHRlcnM6ICgpID0+IGxpZ2h0Rm9ybWF0dGVycywKICBsb25nRm9ybWF0dGVyczogKCkgPT4gbG9uZ0Zvcm1hdHRlcnMsCiAgbWF4OiAoKSA9PiBtYXgyLAogIG1pbGxpc2Vjb25kczogKCkgPT4gbWlsbGlzZWNvbmRzLAogIG1pbGxpc2Vjb25kc1RvSG91cnM6ICgpID0+IG1pbGxpc2Vjb25kc1RvSG91cnMsCiAgbWlsbGlzZWNvbmRzVG9NaW51dGVzOiAoKSA9PiBtaWxsaXNlY29uZHNUb01pbnV0ZXMsCiAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzOiAoKSA9PiBtaWxsaXNlY29uZHNUb1NlY29uZHMsCiAgbWluOiAoKSA9PiBtaW4yLAogIG1pbnV0ZXNUb0hvdXJzOiAoKSA9PiBtaW51dGVzVG9Ib3VycywKICBtaW51dGVzVG9NaWxsaXNlY29uZHM6ICgpID0+IG1pbnV0ZXNUb01pbGxpc2Vjb25kcywKICBtaW51dGVzVG9TZWNvbmRzOiAoKSA9PiBtaW51dGVzVG9TZWNvbmRzLAogIG1vbnRoc1RvUXVhcnRlcnM6ICgpID0+IG1vbnRoc1RvUXVhcnRlcnMsCiAgbW9udGhzVG9ZZWFyczogKCkgPT4gbW9udGhzVG9ZZWFycywKICBuZXh0RGF5OiAoKSA9PiBuZXh0RGF5LAogIG5leHRGcmlkYXk6ICgpID0+IG5leHRGcmlkYXksCiAgbmV4dE1vbmRheTogKCkgPT4gbmV4dE1vbmRheSwKICBuZXh0U2F0dXJkYXk6ICgpID0+IG5leHRTYXR1cmRheSwKICBuZXh0U3VuZGF5OiAoKSA9PiBuZXh0U3VuZGF5LAogIG5leHRUaHVyc2RheTogKCkgPT4gbmV4dFRodXJzZGF5LAogIG5leHRUdWVzZGF5OiAoKSA9PiBuZXh0VHVlc2RheSwKICBuZXh0V2VkbmVzZGF5OiAoKSA9PiBuZXh0V2VkbmVzZGF5LAogIHBhcnNlOiAoKSA9PiBwYXJzZSwKICBwYXJzZUlTTzogKCkgPT4gcGFyc2VJU08sCiAgcGFyc2VKU09OOiAoKSA9PiBwYXJzZUpTT04sCiAgcGFyc2VyczogKCkgPT4gcGFyc2VycywKICBwcmV2aW91c0RheTogKCkgPT4gcHJldmlvdXNEYXksCiAgcHJldmlvdXNGcmlkYXk6ICgpID0+IHByZXZpb3VzRnJpZGF5LAogIHByZXZpb3VzTW9uZGF5OiAoKSA9PiBwcmV2aW91c01vbmRheSwKICBwcmV2aW91c1NhdHVyZGF5OiAoKSA9PiBwcmV2aW91c1NhdHVyZGF5LAogIHByZXZpb3VzU3VuZGF5OiAoKSA9PiBwcmV2aW91c1N1bmRheSwKICBwcmV2aW91c1RodXJzZGF5OiAoKSA9PiBwcmV2aW91c1RodXJzZGF5LAogIHByZXZpb3VzVHVlc2RheTogKCkgPT4gcHJldmlvdXNUdWVzZGF5LAogIHByZXZpb3VzV2VkbmVzZGF5OiAoKSA9PiBwcmV2aW91c1dlZG5lc2RheSwKICBxdWFydGVyc1RvTW9udGhzOiAoKSA9PiBxdWFydGVyc1RvTW9udGhzLAogIHF1YXJ0ZXJzVG9ZZWFyczogKCkgPT4gcXVhcnRlcnNUb1llYXJzLAogIHJvdW5kVG9OZWFyZXN0SG91cnM6ICgpID0+IHJvdW5kVG9OZWFyZXN0SG91cnMsCiAgcm91bmRUb05lYXJlc3RNaW51dGVzOiAoKSA9PiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMsCiAgc2Vjb25kc1RvSG91cnM6ICgpID0+IHNlY29uZHNUb0hvdXJzLAogIHNlY29uZHNUb01pbGxpc2Vjb25kczogKCkgPT4gc2Vjb25kc1RvTWlsbGlzZWNvbmRzLAogIHNlY29uZHNUb01pbnV0ZXM6ICgpID0+IHNlY29uZHNUb01pbnV0ZXMsCiAgc2V0OiAoKSA9PiBzZXQsCiAgc2V0RGF0ZTogKCkgPT4gc2V0RGF0ZSwKICBzZXREYXk6ICgpID0+IHNldERheSwKICBzZXREYXlPZlllYXI6ICgpID0+IHNldERheU9mWWVhciwKICBzZXREZWZhdWx0T3B0aW9uczogKCkgPT4gc2V0RGVmYXVsdE9wdGlvbnMyLAogIHNldEhvdXJzOiAoKSA9PiBzZXRIb3VycywKICBzZXRJU09EYXk6ICgpID0+IHNldElTT0RheSwKICBzZXRJU09XZWVrOiAoKSA9PiBzZXRJU09XZWVrLAogIHNldElTT1dlZWtZZWFyOiAoKSA9PiBzZXRJU09XZWVrWWVhciwKICBzZXRNaWxsaXNlY29uZHM6ICgpID0+IHNldE1pbGxpc2Vjb25kcywKICBzZXRNaW51dGVzOiAoKSA9PiBzZXRNaW51dGVzLAogIHNldE1vbnRoOiAoKSA9PiBzZXRNb250aCwKICBzZXRRdWFydGVyOiAoKSA9PiBzZXRRdWFydGVyLAogIHNldFNlY29uZHM6ICgpID0+IHNldFNlY29uZHMsCiAgc2V0V2VlazogKCkgPT4gc2V0V2VlaywKICBzZXRXZWVrWWVhcjogKCkgPT4gc2V0V2Vla1llYXIsCiAgc2V0WWVhcjogKCkgPT4gc2V0WWVhciwKICBzdGFydE9mRGF5OiAoKSA9PiBzdGFydE9mRGF5LAogIHN0YXJ0T2ZEZWNhZGU6ICgpID0+IHN0YXJ0T2ZEZWNhZGUsCiAgc3RhcnRPZkhvdXI6ICgpID0+IHN0YXJ0T2ZIb3VyLAogIHN0YXJ0T2ZJU09XZWVrOiAoKSA9PiBzdGFydE9mSVNPV2VlaywKICBzdGFydE9mSVNPV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZJU09XZWVrWWVhciwKICBzdGFydE9mTWludXRlOiAoKSA9PiBzdGFydE9mTWludXRlLAogIHN0YXJ0T2ZNb250aDogKCkgPT4gc3RhcnRPZk1vbnRoLAogIHN0YXJ0T2ZRdWFydGVyOiAoKSA9PiBzdGFydE9mUXVhcnRlciwKICBzdGFydE9mU2Vjb25kOiAoKSA9PiBzdGFydE9mU2Vjb25kLAogIHN0YXJ0T2ZUb2RheTogKCkgPT4gc3RhcnRPZlRvZGF5LAogIHN0YXJ0T2ZUb21vcnJvdzogKCkgPT4gc3RhcnRPZlRvbW9ycm93LAogIHN0YXJ0T2ZXZWVrOiAoKSA9PiBzdGFydE9mV2VlaywKICBzdGFydE9mV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZXZWVrWWVhciwKICBzdGFydE9mWWVhcjogKCkgPT4gc3RhcnRPZlllYXIsCiAgc3RhcnRPZlllc3RlcmRheTogKCkgPT4gc3RhcnRPZlllc3RlcmRheSwKICBzdWI6ICgpID0+IHN1YiwKICBzdWJCdXNpbmVzc0RheXM6ICgpID0+IHN1YkJ1c2luZXNzRGF5cywKICBzdWJEYXlzOiAoKSA9PiBzdWJEYXlzLAogIHN1YkhvdXJzOiAoKSA9PiBzdWJIb3VycywKICBzdWJJU09XZWVrWWVhcnM6ICgpID0+IHN1YklTT1dlZWtZZWFycywKICBzdWJNaWxsaXNlY29uZHM6ICgpID0+IHN1Yk1pbGxpc2Vjb25kcywKICBzdWJNaW51dGVzOiAoKSA9PiBzdWJNaW51dGVzLAogIHN1Yk1vbnRoczogKCkgPT4gc3ViTW9udGhzLAogIHN1YlF1YXJ0ZXJzOiAoKSA9PiBzdWJRdWFydGVycywKICBzdWJTZWNvbmRzOiAoKSA9PiBzdWJTZWNvbmRzLAogIHN1YldlZWtzOiAoKSA9PiBzdWJXZWVrcywKICBzdWJZZWFyczogKCkgPT4gc3ViWWVhcnMsCiAgdG9EYXRlOiAoKSA9PiB0b0RhdGUsCiAgdHJhbnNwb3NlOiAoKSA9PiB0cmFuc3Bvc2UsCiAgd2Vla3NUb0RheXM6ICgpID0+IHdlZWtzVG9EYXlzLAogIHllYXJzVG9EYXlzOiAoKSA9PiB5ZWFyc1RvRGF5cywKICB5ZWFyc1RvTW9udGhzOiAoKSA9PiB5ZWFyc1RvTW9udGhzLAogIHllYXJzVG9RdWFydGVyczogKCkgPT4geWVhcnNUb1F1YXJ0ZXJzCn0pOwp2YXIgaW5pdF9kYXRlX2ZucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9hZGRCdXNpbmVzc0RheXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRIb3VycygpOwogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfYWRkWWVhcnMoKTsKICAgIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoKTsKICAgIGluaXRfY2xhbXAoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY2xvc2VzdFRvKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29tcGFyZURlc2MoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZGF5c1RvV2Vla3MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblllYXJzKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTWludXRlT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTW9udGhPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoV2Vla09mSW50ZXJ2YWwoKTsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCgpOwogICAgaW5pdF9lYWNoV2Vla2VuZE9mWWVhcigpOwogICAgaW5pdF9lYWNoWWVhck9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZEZWNhZGUoKTsKICAgIGluaXRfZW5kT2ZIb3VyKCk7CiAgICBpbml0X2VuZE9mSVNPV2VlaygpOwogICAgaW5pdF9lbmRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X2VuZE9mTWludXRlKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfZW5kT2ZRdWFydGVyKCk7CiAgICBpbml0X2VuZE9mU2Vjb25kKCk7CiAgICBpbml0X2VuZE9mVG9kYXkoKTsKICAgIGluaXRfZW5kT2ZUb21vcnJvdygpOwogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X2VuZE9mWWVzdGVyZGF5KCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KCk7CiAgICBpbml0X2Zvcm1hdER1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdElTTygpOwogICAgaW5pdF9mb3JtYXRJU085MDc1KCk7CiAgICBpbml0X2Zvcm1hdElTT0R1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdFJGQzMzMzkoKTsKICAgIGluaXRfZm9ybWF0UkZDNzIzMSgpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZTIoKTsKICAgIGluaXRfZnJvbVVuaXhUaW1lKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X2dldERheU9mWWVhcigpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF9nZXREYXlzSW5ZZWFyKCk7CiAgICBpbml0X2dldERlY2FkZSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRIb3VycygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRJU09XZWVrc0luWWVhcigpOwogICAgaW5pdF9nZXRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfZ2V0TWludXRlcygpOwogICAgaW5pdF9nZXRNb250aCgpOwogICAgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBpbml0X2dldFNlY29uZHMoKTsKICAgIGluaXRfZ2V0VGltZSgpOwogICAgaW5pdF9nZXRVbml4VGltZSgpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtPZk1vbnRoKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2dldFdlZWtzSW5Nb250aCgpOwogICAgaW5pdF9nZXRZZWFyKCk7CiAgICBpbml0X2hvdXJzVG9NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfaG91cnNUb01pbnV0ZXMoKTsKICAgIGluaXRfaG91cnNUb1NlY29uZHMoKTsKICAgIGluaXRfaW50ZXJ2YWwyKCk7CiAgICBpbml0X2ludGVydmFsVG9EdXJhdGlvbigpOwogICAgaW5pdF9pbnRsRm9ybWF0KCk7CiAgICBpbml0X2ludGxGb3JtYXREaXN0YW5jZSgpOwogICAgaW5pdF9pc0FmdGVyKCk7CiAgICBpbml0X2lzQmVmb3JlKCk7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfaXNFcXVhbCgpOwogICAgaW5pdF9pc0V4aXN0cygpOwogICAgaW5pdF9pc0ZpcnN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9pc0ZyaWRheSgpOwogICAgaW5pdF9pc0Z1dHVyZSgpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfaXNNYXRjaCgpOwogICAgaW5pdF9pc01vbmRheSgpOwogICAgaW5pdF9pc1Bhc3QoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfaXNTYW1lSVNPV2VlaygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrWWVhcigpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaW5pdF9pc1NhbWVTZWNvbmQoKTsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNUaGlzSG91cigpOwogICAgaW5pdF9pc1RoaXNJU09XZWVrKCk7CiAgICBpbml0X2lzVGhpc01pbnV0ZSgpOwogICAgaW5pdF9pc1RoaXNNb250aCgpOwogICAgaW5pdF9pc1RoaXNRdWFydGVyKCk7CiAgICBpbml0X2lzVGhpc1NlY29uZCgpOwogICAgaW5pdF9pc1RoaXNXZWVrKCk7CiAgICBpbml0X2lzVGhpc1llYXIoKTsKICAgIGluaXRfaXNUaHVyc2RheSgpOwogICAgaW5pdF9pc1RvZGF5KCk7CiAgICBpbml0X2lzVG9tb3Jyb3coKTsKICAgIGluaXRfaXNUdWVzZGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWRuZXNkYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X2lzV2l0aGluSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNZZXN0ZXJkYXkoKTsKICAgIGluaXRfbGFzdERheU9mRGVjYWRlKCk7CiAgICBpbml0X2xhc3REYXlPZklTT1dlZWsoKTsKICAgIGluaXRfbGFzdERheU9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfbGFzdERheU9mUXVhcnRlcigpOwogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBpbml0X2xhc3REYXlPZlllYXIoKTsKICAgIGluaXRfbGlnaHRGb3JtYXQoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taWxsaXNlY29uZHMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycygpOwogICAgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzKCk7CiAgICBpbml0X21pbjIoKTsKICAgIGluaXRfbWludXRlc1RvSG91cnMoKTsKICAgIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X21pbnV0ZXNUb1NlY29uZHMoKTsKICAgIGluaXRfbW9udGhzVG9RdWFydGVycygpOwogICAgaW5pdF9tb250aHNUb1llYXJzKCk7CiAgICBpbml0X25leHREYXkoKTsKICAgIGluaXRfbmV4dEZyaWRheSgpOwogICAgaW5pdF9uZXh0TW9uZGF5KCk7CiAgICBpbml0X25leHRTYXR1cmRheSgpOwogICAgaW5pdF9uZXh0U3VuZGF5KCk7CiAgICBpbml0X25leHRUaHVyc2RheSgpOwogICAgaW5pdF9uZXh0VHVlc2RheSgpOwogICAgaW5pdF9uZXh0V2VkbmVzZGF5KCk7CiAgICBpbml0X3BhcnNlKCk7CiAgICBpbml0X3BhcnNlSVNPKCk7CiAgICBpbml0X3BhcnNlSlNPTigpOwogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgaW5pdF9wcmV2aW91c0ZyaWRheSgpOwogICAgaW5pdF9wcmV2aW91c01vbmRheSgpOwogICAgaW5pdF9wcmV2aW91c1NhdHVyZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzU3VuZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzVGh1cnNkYXkoKTsKICAgIGluaXRfcHJldmlvdXNUdWVzZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzV2VkbmVzZGF5KCk7CiAgICBpbml0X3F1YXJ0ZXJzVG9Nb250aHMoKTsKICAgIGluaXRfcXVhcnRlcnNUb1llYXJzKCk7CiAgICBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMoKTsKICAgIGluaXRfcm91bmRUb05lYXJlc3RNaW51dGVzKCk7CiAgICBpbml0X3NlY29uZHNUb0hvdXJzKCk7CiAgICBpbml0X3NlY29uZHNUb01pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zZWNvbmRzVG9NaW51dGVzKCk7CiAgICBpbml0X3NldCgpOwogICAgaW5pdF9zZXREYXRlKCk7CiAgICBpbml0X3NldERheSgpOwogICAgaW5pdF9zZXREYXlPZlllYXIoKTsKICAgIGluaXRfc2V0RGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfc2V0SG91cnMoKTsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc2V0TWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X3NldE1pbnV0ZXMoKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfc2V0UXVhcnRlcigpOwogICAgaW5pdF9zZXRTZWNvbmRzKCk7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc2V0V2Vla1llYXIoKTsKICAgIGluaXRfc2V0WWVhcigpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZEZWNhZGUoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZNaW51dGUoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGluaXRfc3RhcnRPZlRvZGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZUb21vcnJvdygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllc3RlcmRheSgpOwogICAgaW5pdF9zdWIoKTsKICAgIGluaXRfc3ViQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIGluaXRfc3ViSG91cnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1Yk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zdWJNaW51dGVzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgaW5pdF9zdWJRdWFydGVycygpOwogICAgaW5pdF9zdWJTZWNvbmRzKCk7CiAgICBpbml0X3N1YldlZWtzKCk7CiAgICBpbml0X3N1YlllYXJzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF90cmFuc3Bvc2UoKTsKICAgIGluaXRfd2Vla3NUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb01vbnRocygpOwogICAgaW5pdF95ZWFyc1RvUXVhcnRlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcwp2YXIgcmVxdWlyZV9kYXlqc19taW4gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKHQ5LCBlMTEpIHsKICAgICAgIm9iamVjdCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIG1vZHVsZSA/IG1vZHVsZS5leHBvcnRzID0gZTExKCkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShlMTEpIDogKHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogdDkgfHwgc2VsZikuZGF5anMgPSBlMTEoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdDkgPSAxZTMsIGUxMSA9IDZlNCwgbjEyID0gMzZlNSwgcjExID0gIm1pbGxpc2Vjb25kIiwgaTExID0gInNlY29uZCIsIHMxMCA9ICJtaW51dGUiLCB1NyA9ICJob3VyIiwgYTUgPSAiZGF5IiwgbzEzID0gIndlZWsiLCBjMTEgPSAibW9udGgiLCBmNyA9ICJxdWFydGVyIiwgaDggPSAieWVhciIsIGQ1ID0gImRhdGUiLCBsNiA9ICJJbnZhbGlkIERhdGUiLCAkNCA9IC9eKFxkezR9KVstL10/KFxkezEsMn0pP1stL10/KFxkezAsMn0pW1R0XHNdKihcZHsxLDJ9KT86PyhcZHsxLDJ9KT86PyhcZHsxLDJ9KT9bLjpdPyhcZCspPyQvLCB5NCA9IC9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csIE00ID0geyBuYW1lOiAiZW4iLCB3ZWVrZGF5czogIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLCBtb250aHM6ICJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLCBvcmRpbmFsOiBmdW5jdGlvbih0MTApIHsKICAgICAgICB2YXIgZTEyID0gWyJ0aCIsICJzdCIsICJuZCIsICJyZCJdLCBuMTMgPSB0MTAgJSAxMDA7CiAgICAgICAgcmV0dXJuICJbIiArIHQxMCArIChlMTJbKG4xMyAtIDIwKSAlIDEwXSB8fCBlMTJbbjEzXSB8fCBlMTJbMF0pICsgIl0iOwogICAgICB9IH0sIG02ID0gZnVuY3Rpb24odDEwLCBlMTIsIG4xMykgewogICAgICAgIHZhciByMTIgPSBTdHJpbmcodDEwKTsKICAgICAgICByZXR1cm4gIXIxMiB8fCByMTIubGVuZ3RoID49IGUxMiA/IHQxMCA6ICIiICsgQXJyYXkoZTEyICsgMSAtIHIxMi5sZW5ndGgpLmpvaW4objEzKSArIHQxMDsKICAgICAgfSwgdjUgPSB7IHM6IG02LCB6OiBmdW5jdGlvbih0MTApIHsKICAgICAgICB2YXIgZTEyID0gLXQxMC51dGNPZmZzZXQoKSwgbjEzID0gTWF0aC5hYnMoZTEyKSwgcjEyID0gTWF0aC5mbG9vcihuMTMgLyA2MCksIGkxMiA9IG4xMyAlIDYwOwogICAgICAgIHJldHVybiAoZTEyIDw9IDAgPyAiKyIgOiAiLSIpICsgbTYocjEyLCAyLCAiMCIpICsgIjoiICsgbTYoaTEyLCAyLCAiMCIpOwogICAgICB9LCBtOiBmdW5jdGlvbiB0MTAoZTEyLCBuMTMpIHsKICAgICAgICBpZiAoZTEyLmRhdGUoKSA8IG4xMy5kYXRlKCkpIHJldHVybiAtdDEwKG4xMywgZTEyKTsKICAgICAgICB2YXIgcjEyID0gMTIgKiAobjEzLnllYXIoKSAtIGUxMi55ZWFyKCkpICsgKG4xMy5tb250aCgpIC0gZTEyLm1vbnRoKCkpLCBpMTIgPSBlMTIuY2xvbmUoKS5hZGQocjEyLCBjMTEpLCBzMTEgPSBuMTMgLSBpMTIgPCAwLCB1OCA9IGUxMi5jbG9uZSgpLmFkZChyMTIgKyAoczExID8gLTEgOiAxKSwgYzExKTsKICAgICAgICByZXR1cm4gKygtKHIxMiArIChuMTMgLSBpMTIpIC8gKHMxMSA/IGkxMiAtIHU4IDogdTggLSBpMTIpKSB8fCAwKTsKICAgICAgfSwgYTogZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIHQxMCA8IDAgPyBNYXRoLmNlaWwodDEwKSB8fCAwIDogTWF0aC5mbG9vcih0MTApOwogICAgICB9LCBwOiBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4geyBNOiBjMTEsIHk6IGg4LCB3OiBvMTMsIGQ6IGE1LCBEOiBkNSwgaDogdTcsIG06IHMxMCwgczogaTExLCBtczogcjExLCBROiBmNyB9W3QxMF0gfHwgU3RyaW5nKHQxMCB8fCAiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sICIiKTsKICAgICAgfSwgdTogZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdDEwOwogICAgICB9IH0sIGc0ID0gImVuIiwgRDQgPSB7fTsKICAgICAgRDRbZzRdID0gTTQ7CiAgICAgIHZhciBwNyA9ICIkaXNEYXlqc09iamVjdCIsIFM0ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIHQxMCBpbnN0YW5jZW9mIF80IHx8ICEoIXQxMCB8fCAhdDEwW3A3XSk7CiAgICAgIH0sIHc0ID0gZnVuY3Rpb24gdDEwKGUxMiwgbjEzLCByMTIpIHsKICAgICAgICB2YXIgaTEyOwogICAgICAgIGlmICghZTEyKSByZXR1cm4gZzQ7CiAgICAgICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBlMTIpIHsKICAgICAgICAgIHZhciBzMTEgPSBlMTIudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIEQ0W3MxMV0gJiYgKGkxMiA9IHMxMSksIG4xMyAmJiAoRDRbczExXSA9IG4xMywgaTEyID0gczExKTsKICAgICAgICAgIHZhciB1OCA9IGUxMi5zcGxpdCgiLSIpOwogICAgICAgICAgaWYgKCFpMTIgJiYgdTgubGVuZ3RoID4gMSkgcmV0dXJuIHQxMCh1OFswXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBhNiA9IGUxMi5uYW1lOwogICAgICAgICAgRDRbYTZdID0gZTEyLCBpMTIgPSBhNjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICFyMTIgJiYgaTEyICYmIChnNCA9IGkxMiksIGkxMiB8fCAhcjEyICYmIGc0OwogICAgICB9LCBPMyA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgaWYgKFM0KHQxMCkpIHJldHVybiB0MTAuY2xvbmUoKTsKICAgICAgICB2YXIgbjEzID0gIm9iamVjdCIgPT0gdHlwZW9mIGUxMiA/IGUxMiA6IHt9OwogICAgICAgIHJldHVybiBuMTMuZGF0ZSA9IHQxMCwgbjEzLmFyZ3MgPSBhcmd1bWVudHMsIG5ldyBfNChuMTMpOwogICAgICB9LCBiNSA9IHY1OwogICAgICBiNS5sID0gdzQsIGI1LmkgPSBTNCwgYjUudyA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgcmV0dXJuIE8zKHQxMCwgeyBsb2NhbGU6IGUxMi4kTCwgdXRjOiBlMTIuJHUsIHg6IGUxMi4keCwgJG9mZnNldDogZTEyLiRvZmZzZXQgfSk7CiAgICAgIH07CiAgICAgIHZhciBfNCA9IChmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBNNSh0MTApIHsKICAgICAgICAgIHRoaXMuJEwgPSB3NCh0MTAubG9jYWxlLCBudWxsLCB0cnVlKSwgdGhpcy5wYXJzZSh0MTApLCB0aGlzLiR4ID0gdGhpcy4keCB8fCB0MTAueCB8fCB7fSwgdGhpc1twN10gPSB0cnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbTcgPSBNNS5wcm90b3R5cGU7CiAgICAgICAgcmV0dXJuIG03LnBhcnNlID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICB0aGlzLiRkID0gKGZ1bmN0aW9uKHQxMSkgewogICAgICAgICAgICB2YXIgZTEyID0gdDExLmRhdGUsIG4xMyA9IHQxMS51dGM7CiAgICAgICAgICAgIGlmIChudWxsID09PSBlMTIpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICAgICAgICAgICAgaWYgKGI1LnUoZTEyKSkgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgICAgICBpZiAoZTEyIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKGUxMik7CiAgICAgICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZTEyICYmICEvWiQvaS50ZXN0KGUxMikpIHsKICAgICAgICAgICAgICB2YXIgcjEyID0gZTEyLm1hdGNoKCQ0KTsKICAgICAgICAgICAgICBpZiAocjEyKSB7CiAgICAgICAgICAgICAgICB2YXIgaTEyID0gcjEyWzJdIC0gMSB8fCAwLCBzMTEgPSAocjEyWzddIHx8ICIwIikuc3Vic3RyaW5nKDAsIDMpOwogICAgICAgICAgICAgICAgcmV0dXJuIG4xMyA/IG5ldyBEYXRlKERhdGUuVVRDKHIxMlsxXSwgaTEyLCByMTJbM10gfHwgMSwgcjEyWzRdIHx8IDAsIHIxMls1XSB8fCAwLCByMTJbNl0gfHwgMCwgczExKSkgOiBuZXcgRGF0ZShyMTJbMV0sIGkxMiwgcjEyWzNdIHx8IDEsIHIxMls0XSB8fCAwLCByMTJbNV0gfHwgMCwgcjEyWzZdIHx8IDAsIHMxMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlMTIpOwogICAgICAgICAgfSkodDEwKSwgdGhpcy5pbml0KCk7CiAgICAgICAgfSwgbTcuaW5pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIHQxMCA9IHRoaXMuJGQ7CiAgICAgICAgICB0aGlzLiR5ID0gdDEwLmdldEZ1bGxZZWFyKCksIHRoaXMuJE0gPSB0MTAuZ2V0TW9udGgoKSwgdGhpcy4kRCA9IHQxMC5nZXREYXRlKCksIHRoaXMuJFcgPSB0MTAuZ2V0RGF5KCksIHRoaXMuJEggPSB0MTAuZ2V0SG91cnMoKSwgdGhpcy4kbSA9IHQxMC5nZXRNaW51dGVzKCksIHRoaXMuJHMgPSB0MTAuZ2V0U2Vjb25kcygpLCB0aGlzLiRtcyA9IHQxMC5nZXRNaWxsaXNlY29uZHMoKTsKICAgICAgICB9LCBtNy4kdXRpbHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBiNTsKICAgICAgICB9LCBtNy5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gISh0aGlzLiRkLnRvU3RyaW5nKCkgPT09IGw2KTsKICAgICAgICB9LCBtNy5pc1NhbWUgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xMyA9IE8zKHQxMCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGUxMikgPD0gbjEzICYmIG4xMyA8PSB0aGlzLmVuZE9mKGUxMik7CiAgICAgICAgfSwgbTcuaXNBZnRlciA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gTzModDEwKSA8IHRoaXMuc3RhcnRPZihlMTIpOwogICAgICAgIH0sIG03LmlzQmVmb3JlID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmVuZE9mKGUxMikgPCBPMyh0MTApOwogICAgICAgIH0sIG03LiRnID0gZnVuY3Rpb24odDEwLCBlMTIsIG4xMykgewogICAgICAgICAgcmV0dXJuIGI1LnUodDEwKSA/IHRoaXNbZTEyXSA6IHRoaXMuc2V0KG4xMywgdDEwKTsKICAgICAgICB9LCBtNy51bml4ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDFlMyk7CiAgICAgICAgfSwgbTcudmFsdWVPZiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpOwogICAgICAgIH0sIG03LnN0YXJ0T2YgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xMyA9IHRoaXMsIHIxMiA9ICEhYjUudShlMTIpIHx8IGUxMiwgZjggPSBiNS5wKHQxMCksIGw3ID0gZnVuY3Rpb24odDExLCBlMTMpIHsKICAgICAgICAgICAgdmFyIGkxMiA9IGI1LncobjEzLiR1ID8gRGF0ZS5VVEMobjEzLiR5LCBlMTMsIHQxMSkgOiBuZXcgRGF0ZShuMTMuJHksIGUxMywgdDExKSwgbjEzKTsKICAgICAgICAgICAgcmV0dXJuIHIxMiA/IGkxMiA6IGkxMi5lbmRPZihhNSk7CiAgICAgICAgICB9LCAkNSA9IGZ1bmN0aW9uKHQxMSwgZTEzKSB7CiAgICAgICAgICAgIHJldHVybiBiNS53KG4xMy50b0RhdGUoKVt0MTFdLmFwcGx5KG4xMy50b0RhdGUoInMiKSwgKHIxMiA/IFswLCAwLCAwLCAwXSA6IFsyMywgNTksIDU5LCA5OTldKS5zbGljZShlMTMpKSwgbjEzKTsKICAgICAgICAgIH0sIHk1ID0gdGhpcy4kVywgTTYgPSB0aGlzLiRNLCBtOCA9IHRoaXMuJEQsIHY2ID0gInNldCIgKyAodGhpcy4kdSA/ICJVVEMiIDogIiIpOwogICAgICAgICAgc3dpdGNoIChmOCkgewogICAgICAgICAgICBjYXNlIGg4OgogICAgICAgICAgICAgIHJldHVybiByMTIgPyBsNygxLCAwKSA6IGw3KDMxLCAxMSk7CiAgICAgICAgICAgIGNhc2UgYzExOgogICAgICAgICAgICAgIHJldHVybiByMTIgPyBsNygxLCBNNikgOiBsNygwLCBNNiArIDEpOwogICAgICAgICAgICBjYXNlIG8xMzoKICAgICAgICAgICAgICB2YXIgZzUgPSB0aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnQgfHwgMCwgRDUgPSAoeTUgPCBnNSA/IHk1ICsgNyA6IHk1KSAtIGc1OwogICAgICAgICAgICAgIHJldHVybiBsNyhyMTIgPyBtOCAtIEQ1IDogbTggKyAoNiAtIEQ1KSwgTTYpOwogICAgICAgICAgICBjYXNlIGE1OgogICAgICAgICAgICBjYXNlIGQ1OgogICAgICAgICAgICAgIHJldHVybiAkNSh2NiArICJIb3VycyIsIDApOwogICAgICAgICAgICBjYXNlIHU3OgogICAgICAgICAgICAgIHJldHVybiAkNSh2NiArICJNaW51dGVzIiwgMSk7CiAgICAgICAgICAgIGNhc2UgczEwOgogICAgICAgICAgICAgIHJldHVybiAkNSh2NiArICJTZWNvbmRzIiwgMik7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgIHJldHVybiAkNSh2NiArICJNaWxsaXNlY29uZHMiLCAzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0sIG03LmVuZE9mID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHQxMCwgZmFsc2UpOwogICAgICAgIH0sIG03LiRzZXQgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xMywgbzE0ID0gYjUucCh0MTApLCBmOCA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKSwgbDcgPSAobjEzID0ge30sIG4xM1thNV0gPSBmOCArICJEYXRlIiwgbjEzW2Q1XSA9IGY4ICsgIkRhdGUiLCBuMTNbYzExXSA9IGY4ICsgIk1vbnRoIiwgbjEzW2g4XSA9IGY4ICsgIkZ1bGxZZWFyIiwgbjEzW3U3XSA9IGY4ICsgIkhvdXJzIiwgbjEzW3MxMF0gPSBmOCArICJNaW51dGVzIiwgbjEzW2kxMV0gPSBmOCArICJTZWNvbmRzIiwgbjEzW3IxMV0gPSBmOCArICJNaWxsaXNlY29uZHMiLCBuMTMpW28xNF0sICQ1ID0gbzE0ID09PSBhNSA/IHRoaXMuJEQgKyAoZTEyIC0gdGhpcy4kVykgOiBlMTI7CiAgICAgICAgICBpZiAobzE0ID09PSBjMTEgfHwgbzE0ID09PSBoOCkgewogICAgICAgICAgICB2YXIgeTUgPSB0aGlzLmNsb25lKCkuc2V0KGQ1LCAxKTsKICAgICAgICAgICAgeTUuJGRbbDddKCQ1KSwgeTUuaW5pdCgpLCB0aGlzLiRkID0geTUuc2V0KGQ1LCBNYXRoLm1pbih0aGlzLiRELCB5NS5kYXlzSW5Nb250aCgpKSkuJGQ7CiAgICAgICAgICB9IGVsc2UgbDcgJiYgdGhpcy4kZFtsN10oJDUpOwogICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdCgpLCB0aGlzOwogICAgICAgIH0sIG03LnNldCA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodDEwLCBlMTIpOwogICAgICAgIH0sIG03LmdldCA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbYjUucCh0MTApXSgpOwogICAgICAgIH0sIG03LmFkZCA9IGZ1bmN0aW9uKHIxMiwgZjgpIHsKICAgICAgICAgIHZhciBkNiwgbDcgPSB0aGlzOwogICAgICAgICAgcjEyID0gTnVtYmVyKHIxMik7CiAgICAgICAgICB2YXIgJDUgPSBiNS5wKGY4KSwgeTUgPSBmdW5jdGlvbih0MTApIHsKICAgICAgICAgICAgdmFyIGUxMiA9IE8zKGw3KTsKICAgICAgICAgICAgcmV0dXJuIGI1LncoZTEyLmRhdGUoZTEyLmRhdGUoKSArIE1hdGgucm91bmQodDEwICogcjEyKSksIGw3KTsKICAgICAgICAgIH07CiAgICAgICAgICBpZiAoJDUgPT09IGMxMSkgcmV0dXJuIHRoaXMuc2V0KGMxMSwgdGhpcy4kTSArIHIxMik7CiAgICAgICAgICBpZiAoJDUgPT09IGg4KSByZXR1cm4gdGhpcy5zZXQoaDgsIHRoaXMuJHkgKyByMTIpOwogICAgICAgICAgaWYgKCQ1ID09PSBhNSkgcmV0dXJuIHk1KDEpOwogICAgICAgICAgaWYgKCQ1ID09PSBvMTMpIHJldHVybiB5NSg3KTsKICAgICAgICAgIHZhciBNNiA9IChkNiA9IHt9LCBkNltzMTBdID0gZTExLCBkNlt1N10gPSBuMTIsIGQ2W2kxMV0gPSB0OSwgZDYpWyQ1XSB8fCAxLCBtOCA9IHRoaXMuJGQuZ2V0VGltZSgpICsgcjEyICogTTY7CiAgICAgICAgICByZXR1cm4gYjUudyhtOCwgdGhpcyk7CiAgICAgICAgfSwgbTcuc3VidHJhY3QgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKC0xICogdDEwLCBlMTIpOwogICAgICAgIH0sIG03LmZvcm1hdCA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgdmFyIGUxMiA9IHRoaXMsIG4xMyA9IHRoaXMuJGxvY2FsZSgpOwogICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkgcmV0dXJuIG4xMy5pbnZhbGlkRGF0ZSB8fCBsNjsKICAgICAgICAgIHZhciByMTIgPSB0MTAgfHwgIllZWVktTU0tRERUSEg6bW06c3NaIiwgaTEyID0gYjUueih0aGlzKSwgczExID0gdGhpcy4kSCwgdTggPSB0aGlzLiRtLCBhNiA9IHRoaXMuJE0sIG8xNCA9IG4xMy53ZWVrZGF5cywgYzEyID0gbjEzLm1vbnRocywgZjggPSBuMTMubWVyaWRpZW0sIGg5ID0gZnVuY3Rpb24odDExLCBuMTQsIGkxMywgczEyKSB7CiAgICAgICAgICAgIHJldHVybiB0MTEgJiYgKHQxMVtuMTRdIHx8IHQxMShlMTIsIHIxMikpIHx8IGkxM1tuMTRdLnNsaWNlKDAsIHMxMik7CiAgICAgICAgICB9LCBkNiA9IGZ1bmN0aW9uKHQxMSkgewogICAgICAgICAgICByZXR1cm4gYjUucyhzMTEgJSAxMiB8fCAxMiwgdDExLCAiMCIpOwogICAgICAgICAgfSwgJDUgPSBmOCB8fCBmdW5jdGlvbih0MTEsIGUxMywgbjE0KSB7CiAgICAgICAgICAgIHZhciByMTMgPSB0MTEgPCAxMiA/ICJBTSIgOiAiUE0iOwogICAgICAgICAgICByZXR1cm4gbjE0ID8gcjEzLnRvTG93ZXJDYXNlKCkgOiByMTM7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHIxMi5yZXBsYWNlKHk0LCAoZnVuY3Rpb24odDExLCByMTMpIHsKICAgICAgICAgICAgcmV0dXJuIHIxMyB8fCAoZnVuY3Rpb24odDEyKSB7CiAgICAgICAgICAgICAgc3dpdGNoICh0MTIpIHsKICAgICAgICAgICAgICAgIGNhc2UgIllZIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHkpLnNsaWNlKC0yKTsKICAgICAgICAgICAgICAgIGNhc2UgIllZWVkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHksIDQsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGE2ICsgMTsKICAgICAgICAgICAgICAgIGNhc2UgIk1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnMoYTYgKyAxLCAyLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGg5KG4xMy5tb250aHNTaG9ydCwgYTYsIGMxMiwgMyk7CiAgICAgICAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGg5KGMxMiwgYTYpOwogICAgICAgICAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBlMTIuJEQ7CiAgICAgICAgICAgICAgICBjYXNlICJERCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKGUxMi4kRCwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUxMi4kVyk7CiAgICAgICAgICAgICAgICBjYXNlICJkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBoOShuMTMud2Vla2RheXNNaW4sIGUxMi4kVywgbzE0LCAyKTsKICAgICAgICAgICAgICAgIGNhc2UgImRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBoOShuMTMud2Vla2RheXNTaG9ydCwgZTEyLiRXLCBvMTQsIDMpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBvMTRbZTEyLiRXXTsKICAgICAgICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMxMSk7CiAgICAgICAgICAgICAgICBjYXNlICJISCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMSwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZDYoMSk7CiAgICAgICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBkNigyKTsKICAgICAgICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgICAgICAgICByZXR1cm4gJDUoczExLCB1OCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICQ1KHMxMSwgdTgsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHU4KTsKICAgICAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnModTgsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHMpOwogICAgICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHMsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJG1zLCAzLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBpMTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KSh0MTEpIHx8IGkxMi5yZXBsYWNlKCI6IiwgIiIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0sIG03LnV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDE1ICogLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpOwogICAgICAgIH0sIG03LmRpZmYgPSBmdW5jdGlvbihyMTIsIGQ2LCBsNykgewogICAgICAgICAgdmFyICQ1LCB5NSA9IHRoaXMsIE02ID0gYjUucChkNiksIG04ID0gTzMocjEyKSwgdjYgPSAobTgudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIGUxMSwgZzUgPSB0aGlzIC0gbTgsIEQ1ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5tKHk1LCBtOCk7CiAgICAgICAgICB9OwogICAgICAgICAgc3dpdGNoIChNNikgewogICAgICAgICAgICBjYXNlIGg4OgogICAgICAgICAgICAgICQ1ID0gRDUoKSAvIDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICAkNSA9IEQ1KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZjc6CiAgICAgICAgICAgICAgJDUgPSBENSgpIC8gMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgJDUgPSAoZzUgLSB2NikgLyA2MDQ4ZTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgYTU6CiAgICAgICAgICAgICAgJDUgPSAoZzUgLSB2NikgLyA4NjRlNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICAkNSA9IGc1IC8gbjEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHMxMDoKICAgICAgICAgICAgICAkNSA9IGc1IC8gZTExOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGkxMToKICAgICAgICAgICAgICAkNSA9IGc1IC8gdDk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgJDUgPSBnNTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBsNyA/ICQ1IDogYjUuYSgkNSk7CiAgICAgICAgfSwgbTcuZGF5c0luTW9udGggPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmVuZE9mKGMxMSkuJEQ7CiAgICAgICAgfSwgbTcuJGxvY2FsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIEQ0W3RoaXMuJExdOwogICAgICAgIH0sIG03LmxvY2FsZSA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICBpZiAoIXQxMCkgcmV0dXJuIHRoaXMuJEw7CiAgICAgICAgICB2YXIgbjEzID0gdGhpcy5jbG9uZSgpLCByMTIgPSB3NCh0MTAsIGUxMiwgdHJ1ZSk7CiAgICAgICAgICByZXR1cm4gcjEyICYmIChuMTMuJEwgPSByMTIpLCBuMTM7CiAgICAgICAgfSwgbTcuY2xvbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBiNS53KHRoaXMuJGQsIHRoaXMpOwogICAgICAgIH0sIG03LnRvRGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTsKICAgICAgICB9LCBtNy50b0pTT04gPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7CiAgICAgICAgfSwgbTcudG9JU09TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgfSwgbTcudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCk7CiAgICAgICAgfSwgTTU7CiAgICAgIH0pKCksIGs0ID0gXzQucHJvdG90eXBlOwogICAgICByZXR1cm4gTzMucHJvdG90eXBlID0gazQsIFtbIiRtcyIsIHIxMV0sIFsiJHMiLCBpMTFdLCBbIiRtIiwgczEwXSwgWyIkSCIsIHU3XSwgWyIkVyIsIGE1XSwgWyIkTSIsIGMxMV0sIFsiJHkiLCBoOF0sIFsiJEQiLCBkNV1dLmZvckVhY2goKGZ1bmN0aW9uKHQxMCkgewogICAgICAgIGs0W3QxMFsxXV0gPSBmdW5jdGlvbihlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRnKGUxMiwgdDEwWzBdLCB0MTBbMV0pOwogICAgICAgIH07CiAgICAgIH0pKSwgTzMuZXh0ZW5kID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICByZXR1cm4gdDEwLiRpIHx8ICh0MTAoZTEyLCBfNCwgTzMpLCB0MTAuJGkgPSB0cnVlKSwgTzM7CiAgICAgIH0sIE8zLmxvY2FsZSA9IHc0LCBPMy5pc0RheWpzID0gUzQsIE8zLnVuaXggPSBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4gTzMoMWUzICogdDEwKTsKICAgICAgfSwgTzMuZW4gPSBENFtnNF0sIE8zLkxzID0gRDQsIE8zLnAgPSB7fSwgTzM7CiAgICB9KSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXlqc0AxLjExLjE5L25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vaXNUb2RheS5qcwp2YXIgcmVxdWlyZV9pc1RvZGF5ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXlqc0AxLjExLjE5L25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vaXNUb2RheS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKGUxMSwgbzEzKSB7CiAgICAgICJvYmplY3QiID09IHR5cGVvZiBleHBvcnRzICYmICJ1bmRlZmluZWQiICE9IHR5cGVvZiBtb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA9IG8xMygpIDogImZ1bmN0aW9uIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQgPyBkZWZpbmUobzEzKSA6IChlMTEgPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgZ2xvYmFsVGhpcyA/IGdsb2JhbFRoaXMgOiBlMTEgfHwgc2VsZikuZGF5anNfcGx1Z2luX2lzVG9kYXkgPSBvMTMoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICByZXR1cm4gZnVuY3Rpb24oZTExLCBvMTMsIHQ5KSB7CiAgICAgICAgbzEzLnByb3RvdHlwZS5pc1RvZGF5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZTEyID0gIllZWVktTU0tREQiLCBvMTQgPSB0OSgpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KGUxMikgPT09IG8xNC5mb3JtYXQoZTEyKTsKICAgICAgICB9OwogICAgICB9OwogICAgfSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcGFyc2UtbXNANC4wLjAvbm9kZV9tb2R1bGVzL3BhcnNlLW1zL2luZGV4LmpzCmZ1bmN0aW9uIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kczIpIHsKICByZXR1cm4gewogICAgZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gODY0ZTUpLAogICAgaG91cnM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAvIDM2ZTUgJSAyNCksCiAgICBtaW51dGVzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyA2ZTQgJSA2MCksCiAgICBzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyAxZTMgJSA2MCksCiAgICBtaWxsaXNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAlIDFlMyksCiAgICBtaWNyb3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMyICogMWUzKSAlIDFlMyksCiAgICBuYW5vc2Vjb25kczogTWF0aC50cnVuYyh0b1plcm9JZkluZmluaXR5KG1pbGxpc2Vjb25kczIgKiAxZTYpICUgMWUzKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VCaWdpbnQobWlsbGlzZWNvbmRzMikgewogIHJldHVybiB7CiAgICBkYXlzOiBtaWxsaXNlY29uZHMyIC8gODY0MDAwMDBuLAogICAgaG91cnM6IG1pbGxpc2Vjb25kczIgLyAzNjAwMDAwbiAlIDI0biwKICAgIG1pbnV0ZXM6IG1pbGxpc2Vjb25kczIgLyA2MDAwMG4gJSA2MG4sCiAgICBzZWNvbmRzOiBtaWxsaXNlY29uZHMyIC8gMTAwMG4gJSA2MG4sCiAgICBtaWxsaXNlY29uZHM6IG1pbGxpc2Vjb25kczIgJSAxMDAwbiwKICAgIG1pY3Jvc2Vjb25kczogMG4sCiAgICBuYW5vc2Vjb25kczogMG4KICB9Owp9CmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpIHsKICBzd2l0Y2ggKHR5cGVvZiBtaWxsaXNlY29uZHMyKSB7CiAgICBjYXNlICJudW1iZXIiOiB7CiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobWlsbGlzZWNvbmRzMikpIHsKICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobWlsbGlzZWNvbmRzMik7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJiaWdpbnQiOiB7CiAgICAgIHJldHVybiBwYXJzZUJpZ2ludChtaWxsaXNlY29uZHMyKTsKICAgIH0KICB9CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyIG9yIGJpZ2ludCIpOwp9CnZhciB0b1plcm9JZkluZmluaXR5Owp2YXIgaW5pdF9wYXJzZV9tcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcyIoKSB7CiAgICB0b1plcm9JZkluZmluaXR5ID0gKHZhbHVlMikgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlMikgPyB2YWx1ZTIgOiAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMKZnVuY3Rpb24gcHJldHR5TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBpc0JpZ0ludCA9IHR5cGVvZiBtaWxsaXNlY29uZHMyID09PSAiYmlnaW50IjsKICBpZiAoIWlzQmlnSW50ICYmICFOdW1iZXIuaXNGaW5pdGUobWlsbGlzZWNvbmRzMikpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTsKICB9CiAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9OwogIGNvbnN0IHNpZ24gPSBtaWxsaXNlY29uZHMyIDwgMCA/ICItIiA6ICIiOwogIG1pbGxpc2Vjb25kczIgPSBtaWxsaXNlY29uZHMyIDwgMCA/IC1taWxsaXNlY29uZHMyIDogbWlsbGlzZWNvbmRzMjsKICBpZiAob3B0aW9ucy5jb2xvbk5vdGF0aW9uKSB7CiAgICBvcHRpb25zLmNvbXBhY3QgPSBmYWxzZTsKICAgIG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzID0gZmFsc2U7CiAgICBvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzID0gZmFsc2U7CiAgICBvcHRpb25zLnZlcmJvc2UgPSBmYWxzZTsKICB9CiAgaWYgKG9wdGlvbnMuY29tcGFjdCkgewogICAgb3B0aW9ucy51bml0Q291bnQgPSAxOwogICAgb3B0aW9ucy5zZWNvbmRzRGVjaW1hbERpZ2l0cyA9IDA7CiAgICBvcHRpb25zLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwOwogIH0KICBsZXQgcmVzdWx0ID0gW107CiAgY29uc3QgZmxvb3JEZWNpbWFscyA9ICh2YWx1ZTIsIGRlY2ltYWxEaWdpdHMpID0+IHsKICAgIGNvbnN0IGZsb29yZWRJbnRlcmltVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlMiAqIDEwICoqIGRlY2ltYWxEaWdpdHMgKyBTRUNPTkRfUk9VTkRJTkdfRVBTSUxPTik7CiAgICBjb25zdCBmbG9vcmVkVmFsdWUgPSBNYXRoLnJvdW5kKGZsb29yZWRJbnRlcmltVmFsdWUpIC8gMTAgKiogZGVjaW1hbERpZ2l0czsKICAgIHJldHVybiBmbG9vcmVkVmFsdWUudG9GaXhlZChkZWNpbWFsRGlnaXRzKTsKICB9OwogIGNvbnN0IGFkZDMgPSAodmFsdWUyLCBsb25nLCBzaG9ydCwgdmFsdWVTdHJpbmcpID0+IHsKICAgIGlmICgocmVzdWx0Lmxlbmd0aCA9PT0gMCB8fCAhb3B0aW9ucy5jb2xvbk5vdGF0aW9uKSAmJiBpc1plcm8odmFsdWUyKSAmJiAhKG9wdGlvbnMuY29sb25Ob3RhdGlvbiAmJiBzaG9ydCA9PT0gIm0iKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YWx1ZVN0cmluZyA/Pz0gU3RyaW5nKHZhbHVlMik7CiAgICBpZiAob3B0aW9ucy5jb2xvbk5vdGF0aW9uKSB7CiAgICAgIGNvbnN0IHdob2xlRGlnaXRzID0gdmFsdWVTdHJpbmcuaW5jbHVkZXMoIi4iKSA/IHZhbHVlU3RyaW5nLnNwbGl0KCIuIilbMF0ubGVuZ3RoIDogdmFsdWVTdHJpbmcubGVuZ3RoOwogICAgICBjb25zdCBtaW5MZW5ndGggPSByZXN1bHQubGVuZ3RoID4gMCA/IDIgOiAxOwogICAgICB2YWx1ZVN0cmluZyA9ICIwIi5yZXBlYXQoTWF0aC5tYXgoMCwgbWluTGVuZ3RoIC0gd2hvbGVEaWdpdHMpKSArIHZhbHVlU3RyaW5nOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWVTdHJpbmcgKz0gb3B0aW9ucy52ZXJib3NlID8gIiAiICsgcGx1cmFsaXplKGxvbmcsIHZhbHVlMikgOiBzaG9ydDsKICAgIH0KICAgIHJlc3VsdC5wdXNoKHZhbHVlU3RyaW5nKTsKICB9OwogIGNvbnN0IHBhcnNlZCA9IHBhcnNlTWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIGNvbnN0IGRheXMyID0gQmlnSW50KHBhcnNlZC5kYXlzKTsKICBpZiAob3B0aW9ucy5oaWRlWWVhckFuZERheXMpIHsKICAgIGFkZDMoQmlnSW50KGRheXMyKSAqIDI0biArIEJpZ0ludChwYXJzZWQuaG91cnMpLCAiaG91ciIsICJoIik7CiAgfSBlbHNlIHsKICAgIGlmIChvcHRpb25zLmhpZGVZZWFyKSB7CiAgICAgIGFkZDMoZGF5czIsICJkYXkiLCAiZCIpOwogICAgfSBlbHNlIHsKICAgICAgYWRkMyhkYXlzMiAvIDM2NW4sICJ5ZWFyIiwgInkiKTsKICAgICAgYWRkMyhkYXlzMiAlIDM2NW4sICJkYXkiLCAiZCIpOwogICAgfQogICAgYWRkMyhOdW1iZXIocGFyc2VkLmhvdXJzKSwgImhvdXIiLCAiaCIpOwogIH0KICBhZGQzKE51bWJlcihwYXJzZWQubWludXRlcyksICJtaW51dGUiLCAibSIpOwogIGlmICghb3B0aW9ucy5oaWRlU2Vjb25kcykgewogICAgaWYgKG9wdGlvbnMuc2VwYXJhdGVNaWxsaXNlY29uZHMgfHwgb3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMgfHwgIW9wdGlvbnMuY29sb25Ob3RhdGlvbiAmJiBtaWxsaXNlY29uZHMyIDwgMWUzICYmICFvcHRpb25zLnN1YlNlY29uZHNBc0RlY2ltYWxzKSB7CiAgICAgIGNvbnN0IHNlY29uZHMgPSBOdW1iZXIocGFyc2VkLnNlY29uZHMpOwogICAgICBjb25zdCBtaWxsaXNlY29uZHMzID0gTnVtYmVyKHBhcnNlZC5taWxsaXNlY29uZHMpOwogICAgICBjb25zdCBtaWNyb3NlY29uZHMgPSBOdW1iZXIocGFyc2VkLm1pY3Jvc2Vjb25kcyk7CiAgICAgIGNvbnN0IG5hbm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5uYW5vc2Vjb25kcyk7CiAgICAgIGFkZDMoc2Vjb25kcywgInNlY29uZCIsICJzIik7CiAgICAgIGlmIChvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcykgewogICAgICAgIGFkZDMobWlsbGlzZWNvbmRzMywgIm1pbGxpc2Vjb25kIiwgIm1zIik7CiAgICAgICAgYWRkMyhtaWNyb3NlY29uZHMsICJtaWNyb3NlY29uZCIsICJceEI1cyIpOwogICAgICAgIGFkZDMobmFub3NlY29uZHMsICJuYW5vc2Vjb25kIiwgIm5zIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzQW5kQmVsb3cgPSBtaWxsaXNlY29uZHMzICsgbWljcm9zZWNvbmRzIC8gMWUzICsgbmFub3NlY29uZHMgLyAxZTY7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPT09ICJudW1iZXIiID8gb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzIDogMDsKICAgICAgICBjb25zdCByb3VuZGVkTWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzQW5kQmVsb3cgPj0gMSA/IE1hdGgucm91bmQobWlsbGlzZWNvbmRzQW5kQmVsb3cpIDogTWF0aC5jZWlsKG1pbGxpc2Vjb25kc0FuZEJlbG93KTsKICAgICAgICBjb25zdCBtaWxsaXNlY29uZHNTdHJpbmcgPSBtaWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID8gbWlsbGlzZWNvbmRzQW5kQmVsb3cudG9GaXhlZChtaWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzKSA6IHJvdW5kZWRNaWxsaXNlY29uZHM7CiAgICAgICAgYWRkMygKICAgICAgICAgIE51bWJlci5wYXJzZUZsb2F0KG1pbGxpc2Vjb25kc1N0cmluZyksCiAgICAgICAgICAibWlsbGlzZWNvbmQiLAogICAgICAgICAgIm1zIiwKICAgICAgICAgIG1pbGxpc2Vjb25kc1N0cmluZwogICAgICAgICk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHNlY29uZHMgPSAoaXNCaWdJbnQgPyBOdW1iZXIobWlsbGlzZWNvbmRzMiAlIE9ORV9EQVlfSU5fTUlMTElTRUNPTkRTKSA6IG1pbGxpc2Vjb25kczIpIC8gMWUzICUgNjA7CiAgICAgIGNvbnN0IHNlY29uZHNEZWNpbWFsRGlnaXRzID0gdHlwZW9mIG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPT09ICJudW1iZXIiID8gb3B0aW9ucy5zZWNvbmRzRGVjaW1hbERpZ2l0cyA6IDE7CiAgICAgIGNvbnN0IHNlY29uZHNGaXhlZCA9IGZsb29yRGVjaW1hbHMoc2Vjb25kcywgc2Vjb25kc0RlY2ltYWxEaWdpdHMpOwogICAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gb3B0aW9ucy5rZWVwRGVjaW1hbHNPbldob2xlU2Vjb25kcyA/IHNlY29uZHNGaXhlZCA6IHNlY29uZHNGaXhlZC5yZXBsYWNlKC9cLjArJC8sICIiKTsKICAgICAgYWRkMyhOdW1iZXIucGFyc2VGbG9hdChzZWNvbmRzU3RyaW5nKSwgInNlY29uZCIsICJzIiwgc2Vjb25kc1N0cmluZyk7CiAgICB9CiAgfQogIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gc2lnbiArICIwIiArIChvcHRpb25zLnZlcmJvc2UgPyAiIG1pbGxpc2Vjb25kcyIgOiAibXMiKTsKICB9CiAgY29uc3Qgc2VwYXJhdG9yID0gb3B0aW9ucy5jb2xvbk5vdGF0aW9uID8gIjoiIDogIiAiOwogIGlmICh0eXBlb2Ygb3B0aW9ucy51bml0Q291bnQgPT09ICJudW1iZXIiKSB7CiAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgTWF0aC5tYXgob3B0aW9ucy51bml0Q291bnQsIDEpKTsKICB9CiAgcmV0dXJuIHNpZ24gKyByZXN1bHQuam9pbihzZXBhcmF0b3IpOwp9CnZhciBpc1plcm8sIHBsdXJhbGl6ZSwgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04sIE9ORV9EQVlfSU5fTUlMTElTRUNPTkRTOwp2YXIgaW5pdF9wcmV0dHlfbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktbXNAOS4zLjAvbm9kZV9tb2R1bGVzL3ByZXR0eS1tcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3BhcnNlX21zKCk7CiAgICBpc1plcm8gPSAodmFsdWUyKSA9PiB2YWx1ZTIgPT09IDAgfHwgdmFsdWUyID09PSAwbjsKICAgIHBsdXJhbGl6ZSA9ICh3b3JkLCBjb3VudDIpID0+IGNvdW50MiA9PT0gMSB8fCBjb3VudDIgPT09IDFuID8gd29yZCA6IGAke3dvcmR9c2A7CiAgICBTRUNPTkRfUk9VTkRJTkdfRVBTSUxPTiA9IDFlLTc7CiAgICBPTkVfREFZX0lOX01JTExJU0VDT05EUyA9IDI0biAqIDYwbiAqIDYwbiAqIDEwMDBuOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUucGx1Z2lucy5qcwp2YXIgaW1wb3J0X2RheWpzLCBpbXBvcnRfaXNUb2RheTsKdmFyIGluaXRfc21hcnR0aW1lX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czcoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9jcm9uZXIoKTsKICAgIGluaXRfZGF0ZV9mbnMoKTsKICAgIGltcG9ydF9kYXlqcyA9IF9fdG9FU00ocmVxdWlyZV9kYXlqc19taW4oKSwgMSk7CiAgICBpbXBvcnRfaXNUb2RheSA9IF9fdG9FU00ocmVxdWlyZV9pc1RvZGF5KCksIDEpOwogICAgaW5pdF9wcmV0dHlfbXMoKTsKICAgIGltcG9ydF9kYXlqcy5kZWZhdWx0LmV4dGVuZChpbXBvcnRfaXNUb2RheS5kZWZhdWx0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcwp2YXIgQ3JvbkpvYjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBDcm9uSm9iID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihjcm9uTWFuYWdlciwgY3JvbkV4cHJlc3Npb25BcmcsIGpvYkZ1bmN0aW9uKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAiaW5pdGlhbCI7CiAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IDA7CiAgICAgICAgdGhpcy5jcm9uRXhwcmVzc2lvbiA9IGNyb25FeHByZXNzaW9uQXJnOwogICAgICAgIHRoaXMuam9iRnVuY3Rpb24gPSBqb2JGdW5jdGlvbjsKICAgICAgICB0aGlzLmNyb25QYXJzZXIgPSBuZXcgY3JvbmVyX2V4cG9ydHMuQ3Jvbihjcm9uRXhwcmVzc2lvbkFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyB3ZXRoZXIgdGhlIGNyb25qb2IgbmVlZHMgdG8gYmUgZXhlY3V0ZWQKICAgICAgICovCiAgICAgIGNoZWNrRXhlY3V0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gInN0b3BwZWQiKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0RXhlY3V0aW9uVW5peDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPT09IDApIHsKICAgICAgICAgIHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgPiB0aGlzLm5leHRFeGVjdXRpb25Vbml4KSB7CiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpOwogICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKChlMTEpID0+IGNvbnNvbGUubG9nKGUxMSkpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7CiAgICAgIH0KICAgICAgZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSBEYXRlLm5vdygpICsgdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgdGhlIHRpbWUgdG8gbmV4dCBleGVjdXRpb24KICAgICAgICovCiAgICAgIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25tYW5hZ2VyLmpzCnZhciBDcm9uTWFuYWdlcjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3Jvbm1hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25tYW5hZ2VyLmpzIigpIHsKICAgIGluaXRfc21hcnR0aW1lX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYigpOwogICAgQ3Jvbk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuY3JvbmpvYnMgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmN5Y2xlV2FrZURlZmVycmVkID0gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVzb2x2ZXMgdGhlIGN1cnJlbnQgd2FrZSBkZWZlcnJlZCwgY2F1c2luZyB0aGUgc2xlZXBpbmcgY3ljbGUKICAgICAgICogdG8gaW1tZWRpYXRlbHkgcmVjYWxjdWxhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBpdHMgdGltZW91dC4KICAgICAgICovCiAgICAgIHdha2VDeWNsZSgpIHsKICAgICAgICBpZiAodGhpcy5jeWNsZVdha2VEZWZlcnJlZCAmJiB0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnN0YXR1cyA9PT0gInBlbmRpbmciKSB7CiAgICAgICAgICB0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkQ3JvbmpvYihjcm9uSWRlbnRpZmllckFyZywgY3JvbkZ1bmN0aW9uQXJnKSB7CiAgICAgICAgY29uc3QgbmV3Q3JvbkpvYiA9IG5ldyBDcm9uSm9iKHRoaXMsIGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpOwogICAgICAgIHRoaXMuY3JvbmpvYnMuYWRkKG5ld0Nyb25Kb2IpOwogICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gInN0YXJ0ZWQiKSB7CiAgICAgICAgICBuZXdDcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB0aGlzLndha2VDeWNsZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3Q3JvbkpvYjsKICAgICAgfQogICAgICByZW1vdmVDcm9uam9iKGNyb25qb2JBcmcpIHsKICAgICAgICBjcm9uam9iQXJnLnN0b3AoKTsKICAgICAgICB0aGlzLmNyb25qb2JzLnJlbW92ZShjcm9uam9iQXJnKTsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIikgewogICAgICAgICAgdGhpcy53YWtlQ3ljbGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgY3JvbmpvYgogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBydW5Dcm9uQ3ljbGUoKSB7CiAgICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuY3ljbGVXYWtlRGVmZXJyZWQgPSBuZXcgZGlzdF90c19leHBvcnRzLkRlZmVycmVkKCk7CiAgICAgICAgICBsZXQgc29vbmVzdE1zID0gSW5maW5pdHk7CiAgICAgICAgICBmb3IgKGNvbnN0IGNyb25Kb2Igb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICAgIGNyb25Kb2IuY2hlY2tFeGVjdXRpb24oKTsKICAgICAgICAgICAgY29uc3QgbXNUb05leHQgPSBjcm9uSm9iLmdldFRpbWVUb05leHRFeGVjdXRpb24oKTsKICAgICAgICAgICAgaWYgKG1zVG9OZXh0IDwgc29vbmVzdE1zKSB7CiAgICAgICAgICAgICAgc29vbmVzdE1zID0gbXNUb05leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzb29uZXN0TXMgPCBJbmZpbml0eSAmJiBzb29uZXN0TXMgPiAwKSB7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uVGltZW91dCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMzLlRpbWVvdXQoc29vbmVzdE1zKTsKICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFsKICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQucHJvbWlzZSwKICAgICAgICAgICAgICB0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnByb21pc2UKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uVGltZW91dC5jYW5jZWwoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc29vbmVzdE1zIDw9IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCB0aGlzLmN5Y2xlV2FrZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY3ljbGVXYWtlRGVmZXJyZWQgPSBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdG9wcyBhbGwgY3JvbmpvYnMKICAgICAgICovCiAgICAgIHN0b3AoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgICAgaWYgKHRoaXMuZXhlY3V0aW9uVGltZW91dCkgewogICAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLndha2VDeWNsZSgpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICBjcm9uLnN0b3AoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcwp2YXIgdW5pdHMsIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLCBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOwp2YXIgaW5pdF9zbWFydHRpbWVfdW5pdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICB1bml0cyA9IHsKICAgICAgeWVhcnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzMTU0ZTc7CiAgICAgIH0sCiAgICAgIG1vbnRoczogKHRpbWVzQXJnID0gMSkgPT4gewogICAgICAgIHJldHVybiB0aW1lc0FyZyAqIDI2MjhlNjsKICAgICAgfSwKICAgICAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA2MDQ4ZTU7CiAgICAgIH0sCiAgICAgIGRheXM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA4NjRlNTsKICAgICAgfSwKICAgICAgaG91cnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzNmU1OwogICAgICB9LAogICAgICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogNmU0OwogICAgICB9LAogICAgICBzZWNvbmRzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogMWUzOwogICAgICB9CiAgICB9OwogICAgZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzID0gKGNvbWJpbmF0aW9uQXJnKSA9PiB7CiAgICAgIGxldCB0aW1lSW5NaWxsaXNlY29uZHMgPSAwOwogICAgICBsZXQgYWRkTWlsbGlTZWNvbmRzID0gKG1pbGxpU2Vjb25kc0FyZykgPT4gewogICAgICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZzsKICAgICAgfTsKICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykgewogICAgICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRpbWVJbk1pbGxpc2Vjb25kczsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcgPSAobWlsbGlTZWNvbmRzQXJnKSA9PiB7CiAgICAgIHJldHVybiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlTZWNvbmRzQXJnKTsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lID0gKHRpbWVTdGFtcEFyZykgPT4gewogICAgICByZXR1cm4gZGF0ZV9mbnNfZXhwb3J0cy5mb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHRpbWVTdGFtcEFyZykpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuZXh0ZW5kZWRkYXRlLmpzCnZhciBFeHRlbmRlZERhdGU7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2V4dGVuZGVkZGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuZXh0ZW5kZWRkYXRlLmpzIigpIHsKICAgIGluaXRfc21hcnR0aW1lX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnR0aW1lX3VuaXRzKCk7CiAgICBFeHRlbmRlZERhdGUgPSBjbGFzcyBfRXh0ZW5kZWREYXRlIGV4dGVuZHMgRGF0ZSB7CiAgICAgIC8vIFNUQVRJQyBmYWN0b3JpZXMKICAgICAgc3RhdGljIGZyb21NaWxsaXMobWlsbGlTZWNvbmRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKG1pbGxpU2Vjb25kcyk7CiAgICAgIH0KICAgICAgc3RhdGljIGZyb21EYXRlKGRhdGVBcmcpIHsKICAgICAgICByZXR1cm4gbmV3IF9FeHRlbmRlZERhdGUoZGF0ZUFyZy5nZXRUaW1lKCkpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlKGV1cm9wZWFuRGF0ZSkgewogICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IC8oLiopXC4oLiopXC4oLiopLy5leGVjKGV1cm9wZWFuRGF0ZSk7CiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKAogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbM10pLAogICAgICAgICAgLy8geWVhcgogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMl0pIC0gMSwKICAgICAgICAgIC8vIG1vbnRoCiAgICAgICAgICBwYXJzZUZsb2F0KGRhdGVBcnJheVsxXSkKICAgICAgICAgIC8vIGRheQogICAgICAgICk7CiAgICAgICAgY29uc3QgdW5peE1pbGxpID0gZGF0ZS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYW4gRXh0ZW5kZWQgZGF0ZSBmcm9tIGEgaHlwZWREYXRlIGxpa2UgIjIwMTgtMDMtMjgiCiAgICAgICAqIEBwYXJhbSBkYXRlU3RyaW5nCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbUh5cGhlZERhdGUoZGF0ZVN0cmluZykgewogICAgICAgIGNvbnN0IGRhdGVNaWxsaXMgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKGRhdGVNaWxsaXMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTYW1lIGFzIC5mcm9tRXVyb3BlYW5EYXRlKCksIGJ1dCBhY2NlcHRzIGFkZGl0aW9uYWwgdGltZUFyZyBhbmQgem9uZUFyZwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21FdXJvcGVhbkRhdGVBbmRUaW1lKGV1cm9wZWFuRGF0ZUFyZywgdGltZUFyZyA9ICIxMjowMDowMCIsIHpvbmVBcmcgPSAiRXVyb3BlL0JlcmxpbiIpIHsKICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAvKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGVBcmcpOwogICAgICAgIGNvbnN0IHNsaWNlRGF0ZSA9IChkYXRlU3RyaW5nKSA9PiB7CiAgICAgICAgICByZXR1cm4gYDAke2RhdGVTdHJpbmd9YC5zbGljZSgtMik7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBkYXRlVGltZVN0cmluZyA9IGAke2RhdGVBcnJheVszXX0tJHtzbGljZURhdGUoZGF0ZUFycmF5WzJdKX0tJHtzbGljZURhdGUoZGF0ZUFycmF5WzFdKX1UJHt0aW1lQXJnfWA7CiAgICAgICAgY29uc3QgZGF0ZSA9IGltcG9ydF9kYXlqcy5kZWZhdWx0KGRhdGVUaW1lU3RyaW5nKTsKICAgICAgICBjb25zdCB1bml4TWlsbGkgPSBkYXRlLnRvRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgICByZXR1cm4gbmV3IF9FeHRlbmRlZERhdGUodW5peE1pbGxpKTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih1bml4TWlsbGkgPSBEYXRlLm5vdygpKSB7CiAgICAgICAgc3VwZXIodW5peE1pbGxpKTsKICAgICAgfQogICAgICAvLwogICAgICBleHBvcnRUb0V1cm9wZWFuRGF0ZSgpIHsKICAgICAgICBjb25zdCB1bml0czIgPSB0aGlzLmV4cG9ydFRvVW5pdHMoKTsKICAgICAgICByZXR1cm4gYCR7dW5pdHMyLmRheVN0cmluZ30uJHt1bml0czIubW9udGhTdHJpbmd9LiR7dW5pdHMyLnllYXJTdHJpbmd9YDsKICAgICAgfQogICAgICBleHBvcnRUb0h5cGhlZFNvcnRhYmxlRGF0ZSgpIHsKICAgICAgICBjb25zdCB1bml0czIgPSB0aGlzLmV4cG9ydFRvVW5pdHMoKTsKICAgICAgICByZXR1cm4gYCR7dW5pdHMyLnllYXJTdHJpbmd9LSR7dW5pdHMyLm1vbnRoU3RyaW5nfS0ke3VuaXRzMi5kYXlTdHJpbmd9YDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZXhwb3J0cyB1bml0cwogICAgICAgKi8KICAgICAgZXhwb3J0VG9Vbml0cygpIHsKICAgICAgICBjb25zdCBtb250aHNBcnJheSA9IFsKICAgICAgICAgICJKYW51YXJ5IiwKICAgICAgICAgICJGZWJydWFyeSIsCiAgICAgICAgICAiTWFyY2giLAogICAgICAgICAgIkFwcmlsIiwKICAgICAgICAgICJNYXkiLAogICAgICAgICAgIkp1bmUiLAogICAgICAgICAgIkp1bHkiLAogICAgICAgICAgIkF1Z3VzdCIsCiAgICAgICAgICAiU2VwdGVtYmVyIiwKICAgICAgICAgICJPY3RvYmVyIiwKICAgICAgICAgICJOb3ZlbWJlciIsCiAgICAgICAgICAiRGVjZW1iZXIiCiAgICAgICAgXTsKICAgICAgICBjb25zdCBkYXlzQXJyYXkgPSBbCiAgICAgICAgICAiTW9uZGF5IiwKICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgIlRodXJzZGF5IiwKICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICJTdW5kYXkiCiAgICAgICAgXTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgeWVhcjogdGhpcy5nZXRGdWxsWWVhcigpLAogICAgICAgICAgeWVhclN0cmluZzogYCR7dGhpcy5nZXRGdWxsWWVhcigpfWAsCiAgICAgICAgICBtb250aDogdGhpcy5nZXRNb250aCgpICsgMSwKICAgICAgICAgIG1vbnRoU3RyaW5nOiAoIjAiICsgKHRoaXMuZ2V0TW9udGgoKSArIDEpKS5zbGljZSgtMiksCiAgICAgICAgICBtb250aE5hbWU6IG1vbnRoc0FycmF5W3RoaXMuZ2V0TW9udGgoKV0sCiAgICAgICAgICBkYXk6IHRoaXMuZ2V0RGF0ZSgpLAogICAgICAgICAgZGF5U3RyaW5nOiAoIjAiICsgdGhpcy5nZXREYXRlKCkpLnNsaWNlKC0yKSwKICAgICAgICAgIGRheU9mVGhlV2VlazogdGhpcy5nZXREYXkoKSwKICAgICAgICAgIGRheU9mVGhlV2Vla05hbWU6IGRheXNBcnJheVt0aGlzLmdldERheSgpXQogICAgICAgIH07CiAgICAgIH0KICAgICAgZm9ybWF0KGZvcm1hdEFyZykgewogICAgICAgIHJldHVybiBpbXBvcnRfZGF5anMuZGVmYXVsdCh0aGlzLmdldFRpbWUoKSkuZm9ybWF0KGZvcm1hdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGJvb2xlYW4gY2hlY2tzCiAgICAgICAqLwogICAgICBpc1RvZGF5KCkgewogICAgICAgIHJldHVybiBpbXBvcnRfZGF5anMuZGVmYXVsdCh0aGlzLmdldFRpbWUoKSkuaXNUb2RheSgpOwogICAgICB9CiAgICAgIGxlc3NUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3MpIHsKICAgICAgICBjb25zdCBtYXhQYXNzZWRVbml4VGltZSA9IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cyh1bml0QXJncyk7CiAgICAgICAgY29uc3QgYWN0dWFsUGFzc2VkVW5peFRpbWUgPSBEYXRlLm5vdygpIC0gdGhpcy5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIGFjdHVhbFBhc3NlZFVuaXhUaW1lIDwgbWF4UGFzc2VkVW5peFRpbWU7CiAgICAgIH0KICAgICAgbW9yZVRpbWVQYXNzZWRUb05vdyh1bml0QXJncykgewogICAgICAgIHJldHVybiAhdGhpcy5sZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaHJ0bWVhc3VyZW1lbnQuanMKdmFyIEhydE1lYXN1cmVtZW50Owp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19ocnRtZWFzdXJlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaHJ0bWVhc3VyZW1lbnQuanMiKCkgewogICAgSHJ0TWVhc3VyZW1lbnQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBudWxsOwogICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3RhcnQgdGhlIG1lYXN1cmVtZW50CiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3RvcCB0aGUgbWVhc3VyZW1lbnQKICAgICAgICovCiAgICAgIHN0b3AoKSB7CiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiSGFzbid0IHN0YXJ0ZWQgeWV0Iik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuX21pbGxpRGlmZiA9IERhdGUubm93KCkgLSB0aGlzLl9taWxsaVN0YXJ0OwogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSB0aGlzLl9taWxsaURpZmYgKiAxZTM7CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLl9taWxsaURpZmY7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlc2V0IHRoZSBtZWFzdXJlbWVudAogICAgICAgKi8KICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5uYW5vU2Vjb25kcyA9IG51bGw7CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMuX21pbGxpU3RhcnQgPSBudWxsOwogICAgICAgIHRoaXMuX21pbGxpRGlmZiA9IG51bGw7CiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy5pbnRlcnZhbC5qcwp2YXIgSW50ZXJ2YWw7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2ludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy5pbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBJbnRlcnZhbCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoaW50ZXJ2YWxNaWxsaXNlbmNvbmRzQXJnKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAiaW5pdGlhbCI7CiAgICAgICAgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLmludGVydmFsSm9icyA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSBpbnRlcnZhbE1pbGxpc2VuY29uZHNBcmc7CiAgICAgIH0KICAgICAgc3RhcnQoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RhcnRlZCI7CiAgICAgICAgY29uc3Qgc3RhdHVzQXV0aCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IHN0YXR1c0F1dGg7CiAgICAgICAgY29uc3QgcnVuSW50ZXJ2YWwgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIiAmJiB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPT09IHN0YXR1c0F1dGgpIHsKICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcih0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzKTsKICAgICAgICAgICAgdGhpcy5leGVjdXRlSW50ZXJ2YWxKb2JzKCk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBydW5JbnRlcnZhbCgpOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgICAgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID0gbnVsbDsKICAgICAgfQogICAgICBhZGRJbnRlcnZhbEpvYihmdW5jQXJnKSB7CiAgICAgICAgdGhpcy5pbnRlcnZhbEpvYnMucHVzaChmdW5jQXJnKTsKICAgICAgfQogICAgICBleGVjdXRlSW50ZXJ2YWxKb2JzKCkgewogICAgICAgIGZvciAoY29uc3QgZnVuY0FyZyBvZiB0aGlzLmludGVydmFsSm9icykgewogICAgICAgICAgZnVuY0FyZygpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMudGltZXN0YW1wLmpzCnZhciBUaW1lU3RhbXA7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMudGltZXN0YW1wLmpzIigpIHsKICAgIGluaXRfc21hcnR0aW1lX3BsdWdpbnMoKTsKICAgIFRpbWVTdGFtcCA9IGNsYXNzIF9UaW1lU3RhbXAgewogICAgICAvKioKICAgICAgICogcmV0dXJucyBuZXcgVGltZVN0YW1wIGZyb20gbWlsbGlzZWNvbmRzCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbU1pbGxpU2Vjb25kcyhtaWxsaVNlY29uZHNBcmcpIHsKICAgICAgICByZXR1cm4gbmV3IF9UaW1lU3RhbXAobWlsbGlTZWNvbmRzQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBuZXcgVGltZVN0YW1wIGZvciBub3cgd2l0aCBjaGFuZ2Ugc2V0CiAgICAgICAqIEBwYXJhbSB0aW1lU3RhbXBBcmcKICAgICAgICovCiAgICAgIHN0YXRpYyBmcm9tVGltZVN0YW1wKHRpbWVTdGFtcEFyZykgewogICAgICAgIGNvbnN0IGxvY2FsVGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoKTsKICAgICAgICBsb2NhbFRpbWVTdGFtcC5jaGFuZ2UgPSBsb2NhbFRpbWVTdGFtcC5taWxsaVNlY29uZHMgLSB0aW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzOwogICAgICAgIHJldHVybiBsb2NhbFRpbWVTdGFtcDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcihjcmVhdG9yQXJnKSB7CiAgICAgICAgdGhpcy5jaGFuZ2UgPSBudWxsOwogICAgICAgIGlmICghY3JlYXRvckFyZykgewogICAgICAgICAgdGhpcy5kYXRlID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY3JlYXRvckFyZyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKGNyZWF0b3JBcmcpOwogICAgICAgIH0KICAgICAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IHRoaXMuZGF0ZS5nZXRUaW1lKCk7CiAgICAgICAgdGhpcy5lcG9jaHRpbWUgPSBNYXRoLmZsb29yKHRoaXMubWlsbGlTZWNvbmRzIC8gMWUzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIGJvb2xlYW4gZm9yIHdldGhlciB0aGUgdGltZXN0YW1wIGlzIG9sZGVyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXAKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnCiAgICAgICAqLwogICAgICBpc09sZGVyVGhhbk90aGVyVGltZVN0YW1wKFRpbWVTdGFtcEFyZywgdHJlc2hvbGRUaW1lQXJnID0gMCkgewogICAgICAgIGlmICh0aGlzLm1pbGxpU2Vjb25kcyA8IFRpbWVTdGFtcEFyZy5taWxsaVNlY29uZHMgLSB0cmVzaG9sZFRpbWVBcmcpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJcyB0aGUgY3VycmVudCBpbnN0YW5jZSBvbGRlciB0aGFuIHRoZSBhcmd1bWVudAogICAgICAgKiBAcGFyYW0gVGltZVN0YW1wQXJnCiAgICAgICAqLwogICAgICBpc09sZGVyVGhhbihUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgKyB0cmVzaG9sZFRpbWVBcmcgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIGJvb2xlYW4gZm9yIHdldGhlciB0aGUgdGltZXN0YW1wIGlzIHlvdW5nZXIgdGhhbiBhbm90aGVyIHRpbWVzdGFtcAogICAgICAgKiBAcGFyYW0gVGltZVN0YW1wQXJnCiAgICAgICAqIEBwYXJhbSB0cmVzaG9sZFRpbWVBcmcKICAgICAgICovCiAgICAgIGlzWW91bmdlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgPiBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzICsgdHJlc2hvbGRUaW1lQXJnKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpc1lvdW5nZXJUaGFuTWlsbGlTZWNvbmRzKG1pbGxpc2Vjb25kQXJnKSB7CiAgICAgICAgY29uc3Qgbm93VGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoKTsKICAgICAgICBjb25zdCBjb21wYXJlRXBvY2hUaW1lID0gbm93VGltZVN0YW1wLmVwb2NodGltZSAtIG1pbGxpc2Vjb25kQXJnOwogICAgICAgIGNvbnN0IGNvbXBhcmVUaW1lU3RhbXAgPSBuZXcgX1RpbWVTdGFtcChjb21wYXJlRXBvY2hUaW1lKTsKICAgICAgICByZXR1cm4gdGhpcy5pc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoY29tcGFyZVRpbWVTdGFtcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVyLmpzCnZhciBUaW1lcjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVyLmpzIigpIHsKICAgIGluaXRfc21hcnR0aW1lX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfdGltZXN0YW1wKCk7CiAgICBUaW1lciA9IGNsYXNzIHsKICAgICAgZ2V0IHRpbWVMZWZ0KCkgewogICAgICAgIHJldHVybiB0aGlzLnRpbWVJbk1pbGxpc2Vjb25kcyAtIHRoaXMucGF1c2VkQXQuY2hhbmdlOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHRpbWVJbk1pbGxpc2Vjb25kc0FyZykgewogICAgICAgIHRoaXMuc3RhdGUgPSAiaW5pdGlhdGVkIjsKICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgdGhpcy50aW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lSW5NaWxsaXNlY29uZHNBcmc7CiAgICAgICAgdGhpcy5jb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlZERlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgdGltZXIKICAgICAgICovCiAgICAgIHN0YXJ0KCkgewogICAgICAgIGlmICghdGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9LCB0aGlzLnRpbWVJbk1pbGxpc2Vjb25kcyk7CiAgICAgICAgICB0aGlzLnN0YXJ0ZWRBdCA9IG5ldyBUaW1lU3RhbXAoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgYmVlbiBzdGFydGVkIGJlZm9yZS4gUGxlYXNlIHVzZSByZXN1bWUgaW5zdGVhZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICBwYXVzZSgpIHsKICAgICAgICBpZiAodGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRUaW1lb3V0KTsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBudWxsOwogICAgICAgICAgdGhpcy5wYXVzZWRBdCA9IFRpbWVTdGFtcC5mcm9tVGltZVN0YW1wKHRoaXMuc3RhcnRlZEF0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdW1lKCkgewogICAgICAgIGlmICh0aGlzLnN0YXJ0ZWRBdCkgewogICAgICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgIH0sIHRoaXMudGltZUxlZnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInRpbWVyIGhhcyBOT1QgYmVlbiBzdGFydGVkIGJlZm9yZS4gUGxlYXNlIHVzZSAuc3RhcnQoKSBpbnN0ZWFkIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMucGF1c2UoKTsKICAgICAgICB0aGlzLnN0YXJ0ZWRBdCA9IG51bGw7CiAgICAgICAgdGhpcy5wYXVzZWRBdCA9IG51bGw7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czcsIHsKICBDcm9uSm9iOiAoKSA9PiBDcm9uSm9iLAogIENyb25NYW5hZ2VyOiAoKSA9PiBDcm9uTWFuYWdlciwKICBFeHRlbmRlZERhdGU6ICgpID0+IEV4dGVuZGVkRGF0ZSwKICBIcnRNZWFzdXJlbWVudDogKCkgPT4gSHJ0TWVhc3VyZW1lbnQsCiAgSW50ZXJ2YWw6ICgpID0+IEludGVydmFsLAogIFRpbWVTdGFtcDogKCkgPT4gVGltZVN0YW1wLAogIFRpbWVyOiAoKSA9PiBUaW1lciwKICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOiAoKSA9PiBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lLAogIGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZzogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLAogIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0czogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzLAogIHVuaXRzOiAoKSA9PiB1bml0cwp9KTsKdmFyIGluaXRfZGlzdF90czYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3Jvbm1hbmFnZXIoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYigpOwogICAgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19leHRlbmRlZGRhdGUoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaHJ0bWVhc3VyZW1lbnQoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaW50ZXJ2YWwoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfdGltZXIoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfdGltZXN0YW1wKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9TeW1ib2xUcmVlTm9kZS5qcwp2YXIgcmVxdWlyZV9TeW1ib2xUcmVlTm9kZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9TeW1ib2xUcmVlTm9kZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFN5bWJvbFRyZWVOb2RlIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwogICAgICAgIHRoaXMucHJldmlvdXNTaWJsaW5nID0gbnVsbDsKICAgICAgICB0aGlzLm5leHRTaWJsaW5nID0gbnVsbDsKICAgICAgICB0aGlzLmZpcnN0Q2hpbGQgPSBudWxsOwogICAgICAgIHRoaXMubGFzdENoaWxkID0gbnVsbDsKICAgICAgICB0aGlzLmNoaWxkcmVuVmVyc2lvbiA9IDA7CiAgICAgICAgdGhpcy5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IG51bGw7CiAgICAgICAgdGhpcy5jYWNoZWRJbmRleCA9IC0xOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICB9CiAgICAgIGdldCBpc0F0dGFjaGVkKCkgewogICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMucGFyZW50IHx8IHRoaXMucHJldmlvdXNTaWJsaW5nIHx8IHRoaXMubmV4dFNpYmxpbmcpOwogICAgICB9CiAgICAgIGdldCBoYXNDaGlsZHJlbigpIHsKICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpcnN0Q2hpbGQpOwogICAgICB9CiAgICAgIGNoaWxkcmVuQ2hhbmdlZCgpIHsKICAgICAgICB0aGlzLmNoaWxkcmVuVmVyc2lvbiA9IHRoaXMuY2hpbGRyZW5WZXJzaW9uICsgMSAmIDQyOTQ5NjcyOTU7CiAgICAgICAgdGhpcy5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IG51bGw7CiAgICAgIH0KICAgICAgZ2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSkgewogICAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiAhPT0gcGFyZW50Tm9kZS5jaGlsZHJlblZlcnNpb24pIHsKICAgICAgICAgIHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleDsKICAgICAgfQogICAgICBzZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBpbmRleDIpIHsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSBpbmRleDI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcwp2YXIgcmVxdWlyZV9UcmVlUG9zaXRpb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvVHJlZVBvc2l0aW9uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIC8vIHNhbWUgYXMgRE9NIERPQ1VNRU5UX1BPU0lUSU9OXwogICAgICBESVNDT05ORUNURUQ6IDEsCiAgICAgIFBSRUNFRElORzogMiwKICAgICAgRk9MTE9XSU5HOiA0LAogICAgICBDT05UQUlOUzogOCwKICAgICAgQ09OVEFJTkVEX0JZOiAxNgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcwp2YXIgcmVxdWlyZV9UcmVlSXRlcmF0b3IgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvVHJlZUl0ZXJhdG9yLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUUkVFID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIFJPT1QgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgTkVYVCA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTsKICAgIHZhciBJVEVSQVRFX0ZVTkMgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgVHJlZUl0ZXJhdG9yID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0cmVlLCByb290NiwgZmlyc3RSZXN1bHQsIGl0ZXJhdGVGdW5jdGlvbikgewogICAgICAgIHRoaXNbVFJFRV0gPSB0cmVlOwogICAgICAgIHRoaXNbUk9PVF0gPSByb290NjsKICAgICAgICB0aGlzW05FWFRdID0gZmlyc3RSZXN1bHQ7CiAgICAgICAgdGhpc1tJVEVSQVRFX0ZVTkNdID0gaXRlcmF0ZUZ1bmN0aW9uOwogICAgICB9CiAgICAgIG5leHQoKSB7CiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXNbVFJFRV07CiAgICAgICAgY29uc3QgaXRlcmF0ZUZ1bmMgPSB0aGlzW0lURVJBVEVfRlVOQ107CiAgICAgICAgY29uc3Qgcm9vdDYgPSB0aGlzW1JPT1RdOwogICAgICAgIGlmICghdGhpc1tORVhUXSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZG9uZTogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHJvb3Q2CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWx1ZTIgPSB0aGlzW05FWFRdOwogICAgICAgIGlmIChpdGVyYXRlRnVuYyA9PT0gMSkgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gMikgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5uZXh0U2libGluZzsKICAgICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSAzKSB7CiAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5fbm9kZSh2YWx1ZTIpLnBhcmVudDsKICAgICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSA0KSB7CiAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5wcmVjZWRpbmcodmFsdWUyLCB7IHJvb3Q6IHJvb3Q2IH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5mb2xsb3dpbmcodmFsdWUyLCB7IHJvb3Q6IHJvb3Q2IH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgZG9uZTogZmFsc2UsCiAgICAgICAgICB2YWx1ZTogdmFsdWUyCiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmVlSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIHsKICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICB3cml0YWJsZTogZmFsc2UKICAgIH0pOwogICAgVHJlZUl0ZXJhdG9yLlBSRVYgPSAxOwogICAgVHJlZUl0ZXJhdG9yLk5FWFQgPSAyOwogICAgVHJlZUl0ZXJhdG9yLlBBUkVOVCA9IDM7CiAgICBUcmVlSXRlcmF0b3IuUFJFQ0VESU5HID0gNDsKICAgIFRyZWVJdGVyYXRvci5GT0xMT1dJTkcgPSA1OwogICAgT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IpOwogICAgT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IucHJvdG90eXBlKTsKICAgIG1vZHVsZS5leHBvcnRzID0gVHJlZUl0ZXJhdG9yOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9TeW1ib2xUcmVlLmpzCnZhciByZXF1aXJlX1N5bWJvbFRyZWUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU3ltYm9sVHJlZU5vZGUgPSByZXF1aXJlX1N5bWJvbFRyZWVOb2RlKCk7CiAgICB2YXIgVHJlZVBvc2l0aW9uID0gcmVxdWlyZV9UcmVlUG9zaXRpb24oKTsKICAgIHZhciBUcmVlSXRlcmF0b3IgPSByZXF1aXJlX1RyZWVJdGVyYXRvcigpOwogICAgZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZXZlcnNlQXJyYXlJbmRleChhcnJheSwgcmV2ZXJzZUluZGV4KSB7CiAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxIC0gcmV2ZXJzZUluZGV4XTsKICAgIH0KICAgIHZhciBTeW1ib2xUcmVlID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQGNvbnN0cnVjdG9yCiAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbj0nU3ltYm9sVHJlZSBkYXRhJ10gRGVzY3JpcHRpb24gdXNlZCBmb3IgdGhlIFN5bWJvbAogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoZGVzY3JpcHRpb24pIHsKICAgICAgICB0aGlzLnN5bWJvbCA9IFN5bWJvbChkZXNjcmlwdGlvbiB8fCAiU3ltYm9sVHJlZSBkYXRhIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gKG9wdGlvbmFsbHkpIGluaXRpYWxpemUgYW4gb2JqZWN0IHJpZ2h0IGFmdGVyIGl0cyBjcmVhdGlvbiwKICAgICAgICogdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgVjgncyBmYXN0IHByb3BlcnRpZXMuIEFsc28gdXNlZnVsIGlmIHlvdSB3b3VsZCBsaWtlIHRvCiAgICAgICAqIGZyZWV6ZSB5b3VyIG9iamVjdC4KICAgICAgICoKICAgICAgICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QKICAgICAgICogQGFsaWFzIG1vZHVsZTpzeW1ib2wtdHJlZSNpbml0aWFsaXplCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBvYmplY3QKICAgICAgICovCiAgICAgIGluaXRpYWxpemUob2JqZWN0KSB7CiAgICAgICAgdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgIH0KICAgICAgX25vZGUob2JqZWN0KSB7CiAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBub2RlMiA9IG9iamVjdFt0aGlzLnN5bWJvbF07CiAgICAgICAgaWYgKG5vZGUyKSB7CiAgICAgICAgICByZXR1cm4gbm9kZTI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3RbdGhpcy5zeW1ib2xdID0gbmV3IFN5bWJvbFRyZWVOb2RlKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFueSBjaGlsZHJlbi4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYGZhbHNlYC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBoYXNDaGlsZHJlbgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59CiAgICAgICAqLwogICAgICBoYXNDaGlsZHJlbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmhhc0NoaWxkcmVuOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGZpcnN0Q2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBmaXJzdENoaWxkKG9iamVjdCkgewogICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkuZmlyc3RDaGlsZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGxhc3RDaGlsZAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIGxhc3RDaGlsZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmxhc3RDaGlsZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHByZXZpb3VzU2libGluZwogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgbmV4dFNpYmxpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBuZXh0U2libGluZyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLm5leHRTaWJsaW5nOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHBhcmVudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIHBhcmVudChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnBhcmVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogRmluZCB0aGUgaW5jbHVzaXZlIGRlc2NlbmRhbnQgdGhhdCBpcyBsYXN0IGluIHRyZWUgb3JkZXIgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpIHdoZXJlIGBuYCBpcyB0aGUgZGVwdGggb2YgdGhlIHN1YnRyZWUgb2YgYG9iamVjdGAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIGxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdCkgewogICAgICAgIGxldCBsYXN0Q2hpbGQ7CiAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmplY3Q7CiAgICAgICAgd2hpbGUgKGxhc3RDaGlsZCA9IHRoaXMuX25vZGUoY3VycmVudCkubGFzdENoaWxkKSB7CiAgICAgICAgICBjdXJyZW50ID0gbGFzdENoaWxkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogRmluZCB0aGUgcHJlY2VkaW5nIG9iamVjdCAoQSkgb2YgdGhlIGdpdmVuIG9iamVjdCAoQikuCiAgICAgICAqIEFuIG9iamVjdCBBIGlzIHByZWNlZGluZyBhbiBvYmplY3QgQiBpZiBBIGFuZCBCIGFyZSBpbiB0aGUgc2FtZSB0cmVlCiAgICAgICAqIGFuZCBBIGNvbWVzIGJlZm9yZSBCIGluIHRyZWUgb3JkZXIuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKQogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJlY2VkaW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucm9vdF0gSWYgc2V0LCBgcm9vdGAgbXVzdCBiZSBhbiBpbmNsdXNpdmUgYW5jZXN0b3IKICAgICAgICogICAgICAgIG9mIHRoZSByZXR1cm4gdmFsdWUgKG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZCkuIFRoaXMgY2hlY2sgX2Fzc3VtZXNfCiAgICAgICAqICAgICAgICB0aGF0IGByb290YCBpcyBhbHNvIGFuIGluY2x1c2l2ZSBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICogQHJldHVybiB7P09iamVjdH0KICAgICAgICovCiAgICAgIHByZWNlZGluZyhvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290OwogICAgICAgIGlmIChvYmplY3QgPT09IHRyZWVSb290KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZzsKICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChwcmV2aW91c1NpYmxpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnBhcmVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogRmluZCB0aGUgZm9sbG93aW5nIG9iamVjdCAoQSkgb2YgdGhlIGdpdmVuIG9iamVjdCAoQikuCiAgICAgICAqIEFuIG9iamVjdCBBIGlzIGZvbGxvd2luZyBhbiBvYmplY3QgQiBpZiBBIGFuZCBCIGFyZSBpbiB0aGUgc2FtZSB0cmVlCiAgICAgICAqIGFuZCBBIGNvbWVzIGFmdGVyIEIgaW4gdHJlZSBvcmRlci4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIGVudGlyZSB0cmVlCiAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQgd2hlbiB3YWxraW5nIHRoZSBlbnRpcmUgdHJlZSkKICAgICAgICoKICAgICAgICogQG1ldGhvZCBmb2xsb3dpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucm9vdF0gSWYgc2V0LCBgcm9vdGAgbXVzdCBiZSBhbiBpbmNsdXNpdmUgYW5jZXN0b3IKICAgICAgICogICAgICAgIG9mIHRoZSByZXR1cm4gdmFsdWUgKG9yIGVsc2UgbnVsbCBpcyByZXR1cm5lZCkuIFRoaXMgY2hlY2sgX2Fzc3VtZXNfCiAgICAgICAqICAgICAgICB0aGF0IGByb290YCBpcyBhbHNvIGFuIGluY2x1c2l2ZSBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5za2lwQ2hpbGRyZW49ZmFsc2VdIElmIHNldCwgaWdub3JlIHRoZSBjaGlsZHJlbiBvZiBgb2JqZWN0YAogICAgICAgKiBAcmV0dXJuIHs/T2JqZWN0fQogICAgICAgKi8KICAgICAgZm9sbG93aW5nKG9iamVjdCwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IHRyZWVSb290ID0gb3B0aW9ucyAmJiBvcHRpb25zLnJvb3Q7CiAgICAgICAgY29uc3Qgc2tpcENoaWxkcmVuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNraXBDaGlsZHJlbjsKICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gIXNraXBDaGlsZHJlbiAmJiB0aGlzLl9ub2RlKG9iamVjdCkuZmlyc3RDaGlsZDsKICAgICAgICBpZiAoZmlyc3RDaGlsZCkgewogICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICAgICAgfQogICAgICAgIGxldCBjdXJyZW50ID0gb2JqZWN0OwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChjdXJyZW50ID09PSB0cmVlUm9vdCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gdGhpcy5fbm9kZShjdXJyZW50KS5uZXh0U2libGluZzsKICAgICAgICAgIGlmIChuZXh0U2libGluZykgewogICAgICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmc7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50ID0gdGhpcy5fbm9kZShjdXJyZW50KS5wYXJlbnQ7CiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFwcGVuZCBhbGwgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGBwYXJlbnRgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY2hpbGRyZW5Ub0FycmF5CiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge09iamVjdFtdfSBbb3B0aW9ucy5hcnJheT1bXV0KICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSBGdW5jdGlvbiB0byB0ZXN0IGVhY2ggb2JqZWN0IGJlZm9yZSBpdCBpcyBhZGRlZCB0byB0aGUgYXJyYXkuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZWQgd2l0aCBhcmd1bWVudHMgKG9iamVjdCkuIFNob3VsZCByZXR1cm4gYHRydWVgIGlmIGFuIG9iamVjdAogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBpbmNsdWRlZC4KICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9ucy50aGlzQXJnXSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGBmaWx0ZXJgLgogICAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX0KICAgICAgICovCiAgICAgIGNoaWxkcmVuVG9BcnJheShwYXJlbnQsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICBsZXQgb2JqZWN0ID0gcGFyZW50Tm9kZS5maXJzdENoaWxkOwogICAgICAgIGxldCBpbmRleDIgPSAwOwogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgICAgbm9kZTIuc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgyKTsKICAgICAgICAgIGlmIChmaWx0ZXIyLmNhbGwodGhpc0FyZywgb2JqZWN0KSkgewogICAgICAgICAgICBhcnJheS5wdXNoKG9iamVjdCk7CiAgICAgICAgICB9CiAgICAgICAgICBvYmplY3QgPSBub2RlMi5uZXh0U2libGluZzsKICAgICAgICAgICsraW5kZXgyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFwcGVuZCBhbGwgaW5jbHVzaXZlIGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5LgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICBhbmNlc3RvcnNUb0FycmF5KG9iamVjdCwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGFycmF5ID0gb3B0aW9ucyAmJiBvcHRpb25zLmFycmF5IHx8IFtdOwogICAgICAgIGNvbnN0IGZpbHRlcjIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyIHx8IHJldHVyblRydWU7CiAgICAgICAgY29uc3QgdGhpc0FyZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnIHx8IHZvaWQgMDsKICAgICAgICBsZXQgYW5jZXN0b3IgPSBvYmplY3Q7CiAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7CiAgICAgICAgICBpZiAoZmlsdGVyMi5jYWxsKHRoaXNBcmcsIGFuY2VzdG9yKSkgewogICAgICAgICAgICBhcnJheS5wdXNoKGFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGFuY2VzdG9yID0gdGhpcy5fbm9kZShhbmNlc3RvcikucGFyZW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFwcGVuZCBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheSAoaW4gdHJlZSBvcmRlcikuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgb2JqZWN0YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHRyZWVUb0FycmF5CiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICB0cmVlVG9BcnJheShyb290Niwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGFycmF5ID0gb3B0aW9ucyAmJiBvcHRpb25zLmFycmF5IHx8IFtdOwogICAgICAgIGNvbnN0IGZpbHRlcjIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyIHx8IHJldHVyblRydWU7CiAgICAgICAgY29uc3QgdGhpc0FyZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnIHx8IHZvaWQgMDsKICAgICAgICBsZXQgb2JqZWN0ID0gcm9vdDY7CiAgICAgICAgd2hpbGUgKG9iamVjdCkgewogICAgICAgICAgaWYgKGZpbHRlcjIuY2FsbCh0aGlzQXJnLCBvYmplY3QpKSB7CiAgICAgICAgICAgIGFycmF5LnB1c2gob2JqZWN0KTsKICAgICAgICAgIH0KICAgICAgICAgIG9iamVjdCA9IHRoaXMuZm9sbG93aW5nKG9iamVjdCwgeyByb290OiByb290NiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuSXRlcmF0b3IKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV0KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgY2hpbGRyZW5JdGVyYXRvcihwYXJlbnQsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCByZXZlcnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnJldmVyc2U7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBwYXJlbnQsCiAgICAgICAgICByZXZlcnNlID8gcGFyZW50Tm9kZS5sYXN0Q2hpbGQgOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQsCiAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRVYgOiBUcmVlSXRlcmF0b3IuTkVYVAogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHByZXZpb3VzIHNpYmxpbmdzIG9mIHRoZSBnaXZlbiBvYmplY3QuIChpbiByZXZlcnNlIHRyZWUgb3JkZXIpCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmV2aW91c1NpYmxpbmdzSXRlcmF0b3IKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhYmxlIGl0ZXJhdG9yIChFUzYpCiAgICAgICAqLwogICAgICBwcmV2aW91c1NpYmxpbmdzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZywKICAgICAgICAgIFRyZWVJdGVyYXRvci5QUkVWCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgbmV4dCBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gdHJlZSBvcmRlcikKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgbmV4dFNpYmxpbmdzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgdGhpcy5fbm9kZShvYmplY3QpLm5leHRTaWJsaW5nLAogICAgICAgICAgVHJlZUl0ZXJhdG9yLk5FWFQKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdAogICAgICAgKgogICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzSXRlcmF0b3IKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhYmxlIGl0ZXJhdG9yIChFUzYpCiAgICAgICAqLwogICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3QpIHsKICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBvYmplY3QsCiAgICAgICAgICBvYmplY3QsCiAgICAgICAgICBUcmVlSXRlcmF0b3IuUEFSRU5UCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBkZXNjZW5kYW50cyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChpbiB0cmVlIG9yZGVyKS4KICAgICAgICoKICAgICAgICogV2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyBpbiB0aGUgc3ViLXRyZWUgb2YgdGhlIGdpdmVuIGByb290YDoKICAgICAgICoKICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbikKICAgICAgICogKiBgTyhuKWAgKGFtb3J0aXplZCwgd2hlbiBjb21wbGV0aW5nIHRoZSBpdGVyYXRvcikKICAgICAgICoKICAgICAgICogQG1ldGhvZCB0cmVlSXRlcmF0b3IKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJvb3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5yZXZlcnNlPWZhbHNlXQogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhYmxlIGl0ZXJhdG9yIChFUzYpCiAgICAgICAqLwogICAgICB0cmVlSXRlcmF0b3Iocm9vdDYsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCByZXZlcnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnJldmVyc2U7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgcm9vdDYsCiAgICAgICAgICByZXZlcnNlID8gdGhpcy5sYXN0SW5jbHVzaXZlRGVzY2VuZGFudChyb290NikgOiByb290NiwKICAgICAgICAgIHJldmVyc2UgPyBUcmVlSXRlcmF0b3IuUFJFQ0VESU5HIDogVHJlZUl0ZXJhdG9yLkZPTExPV0lORwogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBvYmplY3QgKHRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIHNpYmxpbmdzKS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgcHJlY2VkaW5nIHNpYmxpbmdzCiAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQsIGlmIHRoZSB0cmVlIGlzIG5vdCBtb2RpZmllZCkKICAgICAgICoKICAgICAgICogQG1ldGhvZCBpbmRleAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2hpbGQKICAgICAgICogQHJldHVybiB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncywgb3IgLTEgaWYgdGhlIG9iamVjdCBoYXMgbm8gcGFyZW50CiAgICAgICAqLwogICAgICBpbmRleChjaGlsZCkgewogICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMuX25vZGUoY2hpbGQpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkTm9kZS5wYXJlbnQpOwogICAgICAgIGlmICghcGFyZW50Tm9kZSkgewogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gY2hpbGROb2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpOwogICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gMCkgewogICAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDsKICAgICAgICB9CiAgICAgICAgY3VycmVudEluZGV4ID0gMDsKICAgICAgICBsZXQgb2JqZWN0ID0gcGFyZW50Tm9kZS5maXJzdENoaWxkOwogICAgICAgIGlmIChwYXJlbnROb2RlLmNoaWxkSW5kZXhDYWNoZWRVcFRvKSB7CiAgICAgICAgICBjb25zdCBjYWNoZWRVcFRvTm9kZSA9IHRoaXMuX25vZGUocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyk7CiAgICAgICAgICBvYmplY3QgPSBjYWNoZWRVcFRvTm9kZS5uZXh0U2libGluZzsKICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGNhY2hlZFVwVG9Ob2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpICsgMTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKG9iamVjdCkgewogICAgICAgICAgY29uc3Qgbm9kZTIgPSB0aGlzLl9ub2RlKG9iamVjdCk7CiAgICAgICAgICBub2RlMi5zZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBjdXJyZW50SW5kZXgpOwogICAgICAgICAgaWYgKG9iamVjdCA9PT0gY2hpbGQpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICArK2N1cnJlbnRJbmRleDsKICAgICAgICAgIG9iamVjdCA9IG5vZGUyLm5leHRTaWJsaW5nOwogICAgICAgIH0KICAgICAgICBwYXJlbnROb2RlLmNoaWxkSW5kZXhDYWNoZWRVcFRvID0gY2hpbGQ7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4uCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuCiAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQsIGlmIHRoZSB0cmVlIGlzIG5vdCBtb2RpZmllZCkKICAgICAgICoKICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkNvdW50CiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHJldHVybiB7TnVtYmVyfQogICAgICAgKi8KICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnQpIHsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShwYXJlbnQpOwogICAgICAgIGlmICghcGFyZW50Tm9kZS5sYXN0Q2hpbGQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5pbmRleChwYXJlbnROb2RlLmxhc3RDaGlsZCkgKyAxOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21wYXJlIHRoZSBwb3NpdGlvbiBvZiBhbiBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBvYmplY3QuIEEgYml0IHNldCBpcyByZXR1cm5lZDoKICAgICAgICoKICAgICAgICogPHVsPgogICAgICAgKiAgICAgPGxpPkRJU0NPTk5FQ1RFRCA6IDE8L2xpPgogICAgICAgKiAgICAgPGxpPlBSRUNFRElORyA6IDI8L2xpPgogICAgICAgKiAgICAgPGxpPkZPTExPV0lORyA6IDQ8L2xpPgogICAgICAgKiAgICAgPGxpPkNPTlRBSU5TIDogODwvbGk+CiAgICAgICAqICAgICA8bGk+Q09OVEFJTkVEX0JZIDogMTY8L2xpPgogICAgICAgKiA8L3VsPgogICAgICAgKgogICAgICAgKiBUaGUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBpbiBET00sIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CiAgICAgICAqIERJU0NPTk5FQ1RFRCBuZXZlciBvY2N1cnMgd2l0aCBhbnkgb3RoZXIgYml0LgogICAgICAgKgogICAgICAgKiB3aGVyZSBgbmAgYW5kIGBtYCBhcmUgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgYGxlZnRgIGFuZCBgcmlnaHRgOwogICAgICAgKiB3aGVyZSBgb2AgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBvZiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBgbGVmdGAgYW5kIGByaWdodGA6CiAgICAgICAqCiAgICAgICAqICogYE8obiArIG0gKyBvKWAgKHdvcnN0IGNhc2UpCiAgICAgICAqICogYE8obiArIG0pYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY29tcGFyZVRyZWVQb3NpdGlvbgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHQKICAgICAgICogQHJldHVybiB7TnVtYmVyfQogICAgICAgKi8KICAgICAgY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0LCByaWdodCkgewogICAgICAgIGlmIChsZWZ0ID09PSByaWdodCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlZnRBbmNlc3RvcnMgPSBbXTsKICAgICAgICB7CiAgICAgICAgICBsZXQgbGVmdEFuY2VzdG9yID0gbGVmdDsKICAgICAgICAgIHdoaWxlIChsZWZ0QW5jZXN0b3IpIHsKICAgICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciA9PT0gcmlnaHQpIHsKICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5TIHwgVHJlZVBvc2l0aW9uLlBSRUNFRElORzsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZWZ0QW5jZXN0b3JzLnB1c2gobGVmdEFuY2VzdG9yKTsKICAgICAgICAgICAgbGVmdEFuY2VzdG9yID0gdGhpcy5wYXJlbnQobGVmdEFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvcnMgPSBbXTsKICAgICAgICB7CiAgICAgICAgICBsZXQgcmlnaHRBbmNlc3RvciA9IHJpZ2h0OwogICAgICAgICAgd2hpbGUgKHJpZ2h0QW5jZXN0b3IpIHsKICAgICAgICAgICAgaWYgKHJpZ2h0QW5jZXN0b3IgPT09IGxlZnQpIHsKICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5FRF9CWSB8IFRyZWVQb3NpdGlvbi5GT0xMT1dJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmlnaHRBbmNlc3RvcnMucHVzaChyaWdodEFuY2VzdG9yKTsKICAgICAgICAgICAgcmlnaHRBbmNlc3RvciA9IHRoaXMucGFyZW50KHJpZ2h0QW5jZXN0b3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCByb290NiA9IHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIDApOwogICAgICAgIGlmICghcm9vdDYgfHwgcm9vdDYgIT09IHJldmVyc2VBcnJheUluZGV4KHJpZ2h0QW5jZXN0b3JzLCAwKSkgewogICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5ESVNDT05ORUNURUQ7CiAgICAgICAgfQogICAgICAgIGxldCBjb21tb25BbmNlc3RvckluZGV4ID0gMDsKICAgICAgICBjb25zdCBhbmNlc3RvcnNNaW5MZW5ndGggPSBNYXRoLm1pbihsZWZ0QW5jZXN0b3JzLmxlbmd0aCwgcmlnaHRBbmNlc3RvcnMubGVuZ3RoKTsKICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBhbmNlc3RvcnNNaW5MZW5ndGg7ICsraTExKSB7CiAgICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3IgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCBpMTEpOwogICAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvciA9IHJldmVyc2VBcnJheUluZGV4KHJpZ2h0QW5jZXN0b3JzLCBpMTEpOwogICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciAhPT0gcmlnaHRBbmNlc3RvcikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbW1vbkFuY2VzdG9ySW5kZXggPSBpMTE7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxlZnRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgY29tbW9uQW5jZXN0b3JJbmRleCArIDEpKTsKICAgICAgICBjb25zdCByaWdodEluZGV4ID0gdGhpcy5pbmRleChyZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgY29tbW9uQW5jZXN0b3JJbmRleCArIDEpKTsKICAgICAgICByZXR1cm4gcmlnaHRJbmRleCA8IGxlZnRJbmRleCA/IFRyZWVQb3NpdGlvbi5QUkVDRURJTkcgOiBUcmVlUG9zaXRpb24uRk9MTE9XSU5HOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoaXMgdHJlZS4KICAgICAgICogSGFzIG5vIGVmZmVjdCBpZiBhbHJlYWR5IHJlbW92ZWQuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcmVtb3ZlCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZW1vdmVPYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSByZW1vdmVPYmplY3QKICAgICAgICovCiAgICAgIHJlbW92ZShyZW1vdmVPYmplY3QpIHsKICAgICAgICBjb25zdCByZW1vdmVOb2RlID0gdGhpcy5fbm9kZShyZW1vdmVPYmplY3QpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucGFyZW50KTsKICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmcpOwogICAgICAgIGNvbnN0IG5leHROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLm5leHRTaWJsaW5nKTsKICAgICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgICAgaWYgKHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcmVtb3ZlT2JqZWN0KSB7CiAgICAgICAgICAgIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlbW92ZU9iamVjdCkgewogICAgICAgICAgICBwYXJlbnROb2RlLmxhc3RDaGlsZCA9IHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocHJldk5vZGUpIHsKICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gcmVtb3ZlTm9kZS5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgaWYgKG5leHROb2RlKSB7CiAgICAgICAgICBuZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICB9CiAgICAgICAgcmVtb3ZlTm9kZS5wYXJlbnQgPSBudWxsOwogICAgICAgIHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLm5leHRTaWJsaW5nID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLmNhY2hlZEluZGV4ID0gLTE7CiAgICAgICAgcmVtb3ZlTm9kZS5jYWNoZWRJbmRleFZlcnNpb24gPSBOYU47CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZW1vdmVPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGJlZm9yZSB0aGUgcmVmZXJlbmNlIG9iamVjdC4KICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGluc2VydEJlZm9yZQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZQogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKi8KICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmcpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7CiAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICBuZXdOb2RlLm5leHRTaWJsaW5nID0gcmVmZXJlbmNlT2JqZWN0OwogICAgICAgIHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIGlmIChwcmV2Tm9kZSkgewogICAgICAgICAgcHJldk5vZGUubmV4dFNpYmxpbmcgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcmVmZXJlbmNlT2JqZWN0KSB7CiAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhZnRlciB0aGUgcmVmZXJlbmNlIG9iamVjdC4KICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBuZXh0IHNpYmxpbmcgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaW5zZXJ0QWZ0ZXIKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyk7CiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VOb2RlLnBhcmVudCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VOb2RlLnBhcmVudDsKICAgICAgICBuZXdOb2RlLnByZXZpb3VzU2libGluZyA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICBuZXdOb2RlLm5leHRTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZzsKICAgICAgICByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmxhc3RDaGlsZCA9PT0gcmVmZXJlbmNlT2JqZWN0KSB7CiAgICAgICAgICBwYXJlbnROb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gcmVmZXJlbmNlIG9iamVjdC4KICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBmaXJzdCBjaGlsZCBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmVwZW5kQ2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIHByZXBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTsKICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBpZiAocmVmZXJlbmNlTm9kZS5oYXNDaGlsZHJlbikgewogICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUocmVmZXJlbmNlTm9kZS5maXJzdENoaWxkLCBuZXdPYmplY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbGFzdCBjaGlsZCBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBhcHBlbmRDaGlsZAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZQogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKi8KICAgICAgYXBwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHsKICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlTm9kZS5sYXN0Q2hpbGQsIG5ld09iamVjdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlT2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBTeW1ib2xUcmVlOwogICAgU3ltYm9sVHJlZS5UcmVlUG9zaXRpb24gPSBUcmVlUG9zaXRpb247CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMucGx1Z2lucy5qcwp2YXIgaW1wb3J0X3N5bWJvbF90cmVlOwp2YXIgaW5pdF9jbGFzc2VzX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHM1KCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czYoKTsKICAgIGltcG9ydF9zeW1ib2xfdHJlZSA9IF9fdG9FU00ocmVxdWlyZV9TeW1ib2xUcmVlKCksIDEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmFzeW5jZXhlY3V0aW9uc3RhY2suanMKdmFyIEFzeW5jRXhlY3V0aW9uU3RhY2s7CnZhciBpbml0X2NsYXNzZXNfYXN5bmNleGVjdXRpb25zdGFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5hc3luY2V4ZWN1dGlvbnN0YWNrLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBBc3luY0V4ZWN1dGlvblN0YWNrID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzID0gW107CiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5ID0gSW5maW5pdHk7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQgPSAwOwogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlID0gW107CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RXhjbHVzaXZlRXhlY3V0aW9uU2xvdChmdW5jQXJnLCB0aW1lb3V0QXJnKSB7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBleGVjdXRpb25TbG90ID0gewogICAgICAgICAgZnVuY1RvRXhlY3V0ZTogZnVuY0FyZywKICAgICAgICAgIGV4ZWN1dGlvbkRlZmVycmVkLAogICAgICAgICAgdGltZW91dDogdGltZW91dEFyZywKICAgICAgICAgIG1vZGU6ICJleGNsdXNpdmUiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goZXhlY3V0aW9uU2xvdCk7CiAgICAgICAgdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKTsKICAgICAgICByZXR1cm4gZXhlY3V0aW9uRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBhc3luYyBnZXROb25FeGNsdXNpdmVFeGVjdXRpb25TbG90KGZ1bmNBcmcsIHRpbWVvdXRBcmcpIHsKICAgICAgICBjb25zdCBleGVjdXRpb25EZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IGV4ZWN1dGlvblNsb3QgPSB7CiAgICAgICAgICBmdW5jVG9FeGVjdXRlOiBmdW5jQXJnLAogICAgICAgICAgZXhlY3V0aW9uRGVmZXJyZWQsCiAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0QXJnLAogICAgICAgICAgbW9kZTogIm5vbmV4Y2x1c2l2ZSIKICAgICAgICB9OwogICAgICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMucHVzaChleGVjdXRpb25TbG90KTsKICAgICAgICB0aGlzLnByb2Nlc3NFeGVjdXRpb25TbG90cygpOwogICAgICAgIHJldHVybiBleGVjdXRpb25EZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgbm9uLWV4Y2x1c2l2ZSB0YXNrcy4KICAgICAgICogQHBhcmFtIGNvbmN1cnJlbmN5IG1pbmltdW0gMSAoSW5maW5pdHkgbWVhbnMgdW5saW1pdGVkKQogICAgICAgKi8KICAgICAgc2V0Tm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3koY29uY3VycmVuY3kpIHsKICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShjb25jdXJyZW5jeSkgfHwgY29uY3VycmVuY3kgPCAxKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyID49IDEiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5OwogICAgICB9CiAgICAgIC8qKiBHZXQgdGhlIGNvbmZpZ3VyZWQgbWF4IGNvbmN1cnJlbmN5IGZvciBub24tZXhjbHVzaXZlIHRhc2tzICovCiAgICAgIGdldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KCkgewogICAgICAgIHJldHVybiB0aGlzLm5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5OwogICAgICB9CiAgICAgIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyBjdXJyZW50bHkgcnVubmluZyAqLwogICAgICBnZXRBY3RpdmVOb25FeGNsdXNpdmVDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQ7CiAgICAgIH0KICAgICAgLyoqIE51bWJlciBvZiBub24tZXhjbHVzaXZlIHRhc2tzIHdhaXRpbmcgZm9yIGEgZnJlZSBzbG90ICovCiAgICAgIGdldFBlbmRpbmdOb25FeGNsdXNpdmVDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUubGVuZ3RoOwogICAgICB9CiAgICAgIGFzeW5jIHByb2Nlc3NFeGVjdXRpb25TbG90cygpIHsKICAgICAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmcpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlOwogICAgICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbG90ID0gdGhpcy5leGVjdXRpb25TbG90c1swXTsKICAgICAgICAgIGlmIChjdXJyZW50U2xvdC5tb2RlID09PSAiZXhjbHVzaXZlIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVFeGNsdXNpdmVTbG90KGN1cnJlbnRTbG90KTsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgbm9uRXhjbHVzaXZlU2xvdHMgPSBbXTsKICAgICAgICAgICAgd2hpbGUgKHRoaXMuZXhlY3V0aW9uU2xvdHMubGVuZ3RoID4gMCAmJiB0aGlzLmV4ZWN1dGlvblNsb3RzWzBdLm1vZGUgPT09ICJub25leGNsdXNpdmUiKSB7CiAgICAgICAgICAgICAgbm9uRXhjbHVzaXZlU2xvdHMucHVzaCh0aGlzLmV4ZWN1dGlvblNsb3RzLnNoaWZ0KCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKG5vbkV4Y2x1c2l2ZVNsb3RzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTsKICAgICAgfQogICAgICBhc3luYyBleGVjdXRlRXhjbHVzaXZlU2xvdChzbG90KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFsKICAgICAgICAgICAgICBzbG90LmZ1bmNUb0V4ZWN1dGUoKSwKICAgICAgICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRpbWVvdXQgcmVhY2hlZCIpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlc29sdmUocmVzdWx0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNsb3QuZnVuY1RvRXhlY3V0ZSgpOwogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlc29sdmUocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZWplY3QoZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBleGVjdXRlTm9uRXhjbHVzaXZlU2xvdHMoc2xvdHMpIHsKICAgICAgICBjb25zdCBwcm9taXNlcyA9IHNsb3RzLm1hcChhc3luYyAoc2xvdCkgPT4gewogICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yTm9uRXhjbHVzaXZlU2xvdCgpOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHNsb3QudGltZW91dCkgewogICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbCiAgICAgICAgICAgICAgICBzbG90LmZ1bmNUb0V4ZWN1dGUoKSwKICAgICAgICAgICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Ioc2xvdC50aW1lb3V0KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2xvdC5mdW5jVG9FeGVjdXRlKCk7CiAgICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMucmVsZWFzZU5vbkV4Y2x1c2l2ZVNsb3QoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFdhaXQgdW50aWwgYSBub24tZXhjbHVzaXZlIHNsb3QgaXMgYXZhaWxhYmxlIChyZXNwZWN0cyBtYXggY29uY3VycmVuY3kpLgogICAgICAgKi8KICAgICAgd2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKSB7CiAgICAgICAgaWYgKHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50IDwgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSkgewogICAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQrKzsKICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVQZW5kaW5nUXVldWUucHVzaCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50Kys7CiAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKiogUmVsZWFzZSBhIG5vbi1leGNsdXNpdmUgc2xvdCBhbmQgd2FrZSB0aGUgbmV4dCB3YWl0ZXIsIGlmIGFueS4gKi8KICAgICAgcmVsZWFzZU5vbkV4Y2x1c2l2ZVNsb3QoKSB7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVDdXJyZW50Q291bnQtLTsKICAgICAgICBjb25zdCBuZXh0MiA9IHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnNoaWZ0KCk7CiAgICAgICAgaWYgKG5leHQyKSB7CiAgICAgICAgICBuZXh0MigpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5iYWNrcHJlc3N1cmVkYXJyYXkuanMKdmFyIEJhY2twcmVzc3VyZWRBcnJheTsKdmFyIGluaXRfY2xhc3Nlc19iYWNrcHJlc3N1cmVkYXJyYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYmFja3ByZXNzdXJlZGFycmF5LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBCYWNrcHJlc3N1cmVkQXJyYXkgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGhpZ2hXYXRlck1hcmsgPSAxNikgewogICAgICAgIHRoaXMuaGFzU3BhY2UgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgICB0aGlzLml0ZW1zQXZhaWxhYmxlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5kYXRhID0gW107CiAgICAgICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFyazsKICAgICAgfQogICAgICBwdXNoKGl0ZW0pIHsKICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTsKICAgICAgICB0aGlzLml0ZW1zQXZhaWxhYmxlLm5leHQoIml0ZW1zQXZhaWxhYmxlIik7CiAgICAgICAgY29uc3Qgc3BhY2VBdmFpbGFibGUgPSB0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKTsKICAgICAgICBpZiAoc3BhY2VBdmFpbGFibGUpIHsKICAgICAgICAgIHRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNwYWNlQXZhaWxhYmxlOwogICAgICB9CiAgICAgIHNoaWZ0KCkgewogICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGEuc2hpZnQoKTsKICAgICAgICBpZiAodGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCkpIHsKICAgICAgICAgIHRoaXMuaGFzU3BhY2UubmV4dCgiaGFzU3BhY2UiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgIH0KICAgICAgY2hlY2tTcGFjZUF2YWlsYWJsZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA8IHRoaXMuaGlnaFdhdGVyTWFyazsKICAgICAgfQogICAgICBjaGVja0hhc0l0ZW1zKCkgewogICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID4gMDsKICAgICAgfQogICAgICB3YWl0Rm9yU3BhY2UoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmhhc1NwYWNlLnN1YnNjcmliZSgoKSA9PiB7CiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgd2FpdEZvckl0ZW1zKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5pdGVtc0F2YWlsYWJsZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmZhc3RtYXAuanMKdmFyIEZhc3RNYXA7CnZhciBpbml0X2NsYXNzZXNfZmFzdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5mYXN0bWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBGYXN0TWFwID0gY2xhc3MgX0Zhc3RNYXAgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIGlzVW5pcXVlS2V5KGtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLm1hcE9iamVjdFtrZXlBcmddID8gZmFsc2UgOiB0cnVlOwogICAgICB9CiAgICAgIGFkZFRvTWFwKGtleUFyZywgb2JqZWN0QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNVbmlxdWVLZXkoa2V5QXJnKSB8fCBvcHRpb25zQXJnICYmIG9wdGlvbnNBcmcuZm9yY2UpIHsKICAgICAgICAgIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPSBvYmplY3RBcmc7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRCeUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgfQogICAgICByZW1vdmVGcm9tTWFwKGtleUFyZykgewogICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtID0gdGhpcy5nZXRCeUtleShrZXlBcmcpOwogICAgICAgIGRlbGV0ZSB0aGlzLm1hcE9iamVjdFtrZXlBcmddOwogICAgICAgIHJldHVybiByZW1vdmVkSXRlbTsKICAgICAgfQogICAgICBnZXRLZXlzKCkgewogICAgICAgIGNvbnN0IGtleXMyID0gW107CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgaW4gdGhpcy5tYXBPYmplY3QpIHsKICAgICAgICAgIGlmICh0aGlzLm1hcE9iamVjdFtrZXlBcmddKSB7CiAgICAgICAgICAgIGtleXMyLnB1c2goa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGtleXMyOwogICAgICB9CiAgICAgIGNsZWFuKCkgewogICAgICAgIHRoaXMubWFwT2JqZWN0ID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgRmFzdG1hcCB0aGF0IGluY2x1ZGVzIGFsbCB2YWx1ZXMgZnJvbSB0aGlzIGFuZCBhbGwgZnJvbSB0aGUgZmFzdG1hcCBpbiB0aGUgYXJndW1lbnQKICAgICAgICovCiAgICAgIGNvbmNhdChmYXN0TWFwQXJnKSB7CiAgICAgICAgY29uc3QgY29uY2F0ZWRGYXN0bWFwID0gbmV3IF9GYXN0TWFwKCk7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIHRoaXMuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5MiwgdGhpcy5nZXRCeUtleShrZXkyKSk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBmYXN0TWFwQXJnLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29uY2F0ZWRGYXN0bWFwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIEZhc3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gZmFzdE1hcEFyZwogICAgICAgKi8KICAgICAgYWRkQWxsRnJvbU90aGVyKGZhc3RNYXBBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIHRoaXMuYWRkVG9NYXAoa2V5MiwgZmFzdE1hcEFyZy5nZXRCeUtleShrZXkyKSwgewogICAgICAgICAgICBmb3JjZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGZpbmQoZmluZEZ1bmN0aW9uQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIHRoaXMuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRCeUtleShrZXkyKTsKICAgICAgICAgIGNvbnN0IGZpbmRGdW5jdGlvblJlc3VsdCA9IGF3YWl0IGZpbmRGdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICAgIGlmIChmaW5kRnVuY3Rpb25SZXN1bHQpIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLm9iamVjdG1hcC5qcwp2YXIgdW5pLCBPYmplY3RNYXA7CnZhciBpbml0X2NsYXNzZXNfb2JqZWN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLm9iamVjdG1hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX2Zhc3RtYXAoKTsKICAgIHVuaSA9IChwcmVmaXg0ID0gInVuaSIpID0+IHsKICAgICAgcmV0dXJuIGAke3ByZWZpeDR9eHh4eHh4eHh4eHhgLnJlcGxhY2UoL1t4eV0vZywgKGMxMSkgPT4gewogICAgICAgIGNvbnN0IHIxMSA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7CiAgICAgICAgY29uc3QgdjUgPSBjMTEgPT09ICJ4IiA/IHIxMSA6IHIxMSAmIDMgfCA4OwogICAgICAgIHJldHVybiB2NS50b1N0cmluZygxNik7CiAgICAgIH0pOwogICAgfTsKICAgIE9iamVjdE1hcCA9IGNsYXNzIF9PYmplY3RNYXAgewogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwID0gbmV3IEZhc3RNYXAoKTsKICAgICAgICB0aGlzLmV2ZW50U3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFuIG9iamVjdCBtYXBwZWQgdG8gYSBzdHJpbmcKICAgICAgICogdGhlIHN0cmluZyBtdXN0IGJlIHVuaXF1ZQogICAgICAgKi8KICAgICAgYWRkTWFwcGVkVW5pcXVlKHVuaXF1ZUtleUFyZywgb2JqZWN0QXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZFRvTWFwKHVuaXF1ZUtleUFyZywgb2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmFzdGVzdCB3YXkgdG8gZ2V0IGFuIG9iamVjdCBmcm9tIHRoZSBtYXAKICAgICAgICogQHBhcmFtIHVuaXF1ZUtleQogICAgICAgKi8KICAgICAgZ2V0TWFwcGVkVW5pcXVlKHVuaXF1ZUtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkodW5pcXVlS2V5QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIGtleQogICAgICAgKiBAcGFyYW0gZnVuY3Rpb25BcmcKICAgICAgICovCiAgICAgIHJlbW92ZU1hcHBlZFVuaXF1ZSh1bmlxdWVLZXkpIHsKICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGQgb2JqZWN0IHRvIE9iamVjdG1hcAogICAgICAgKiByZXR1cm5zIGZhbHNlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWFwCiAgICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkKICAgICAgICovCiAgICAgIGFkZChvYmplY3RBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG9iamVjdEFyZykgewogICAgICAgICAgICByZXR1cm4ga2V5QXJnOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSB1bmkoImtleSIpOwogICAgICAgIHRoaXMuYWRkTWFwcGVkVW5pcXVlKHVuaXF1ZUtleSwgb2JqZWN0QXJnKTsKICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgIG9wZXJhdGlvbjogImFkZCIsCiAgICAgICAgICBwYXlsb2FkOiBvYmplY3RBcmcKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdW5pcXVlS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIC5hZGQgYnV0IGFkZHMgYW4gd2hvbGUgYXJyYXkgb2Ygb2JqZWN0cwogICAgICAgKi8KICAgICAgYWRkQXJyYXkob2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkKGl0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgb2JqZWN0IGlzIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0IGtleSBmb3Igb2JqZWN0CiAgICAgICAqIEBwYXJhbSBmaW5kRnVuY3Rpb24KICAgICAgICovCiAgICAgIGdldEtleUZvck9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBsZXQgZm91bmRLZXkgPSBudWxsOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmICghZm91bmRLZXkgJiYgdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykgPT09IG9iamVjdEFyZykgewogICAgICAgICAgICBmb3VuZEtleSA9IGtleUFyZzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRLZXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmQgb2JqZWN0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbikgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICB9CiAgICAgIGZpbmRTeW5jKGZpbmRGdW5jdGlvbikgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmIChmaW5kRnVuY3Rpb24odGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1hcHBlZFVuaXF1ZShrZXlBcmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZHMgYSBzcGVjaWZpYyBlbGVtZW50IGFuZCB0aGVuIHJlbW92ZXMgaXQKICAgICAgICovCiAgICAgIGFzeW5jIGZpbmRPbmVBbmRSZW1vdmUoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gYXdhaXQgdGhpcy5maW5kKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICBmaW5kT25lQW5kUmVtb3ZlU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSB0aGlzLmZpbmRTeW5jKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcnVuIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBhc3luYyBmb3JFYWNoKGZ1bmN0aW9uQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgYXdhaXQgZnVuY3Rpb25BcmcodGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhbiBvYmplY3QgaW4gdGhlIE9ic2VydmFibGVtYXAgYW5kIHJlbW92ZXMgaXQsIHNvIGl0IGNhbid0IGJlIHJldHJpZXZlZCBhZ2FpbgogICAgICAgKi8KICAgICAgZ2V0T25lQW5kUmVtb3ZlKCkgewogICAgICAgIGNvbnN0IGtleXMyID0gdGhpcy5mYXN0TWFwLmdldEtleXMoKTsKICAgICAgICBpZiAoa2V5czIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qga2V5VG9Vc2UgPSBrZXlzMlswXTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5VG9Vc2UpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRJdGVtCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkSXRlbTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBjbG9uZWQgYXJyYXkgb2YgYWxsIHRoZSBvYmplY3RzIGN1cnJlbnRseSBpbiB0aGUgT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBnZXRBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIHJldHVybkFycmF5LnB1c2godGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIE9iamVjdG1hcCBpc3QgZW1wdHkKICAgICAgICovCiAgICAgIGlzRW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmUgb2JqZWN0IGZyb20gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICByZW1vdmUob2JqZWN0QXJnKSB7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSkgewogICAgICAgICAgY29uc3Qga2V5QXJnID0gdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRPYmplY3QgPSB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRPYmplY3QKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlbW92ZWRPYmplY3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3aXBlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBPYmplY3RtYXAgdGhhdCBpbmNsdWRlcwogICAgICAgKi8KICAgICAgY29uY2F0KG9iamVjdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdHRlZE9iamVjdE1hcCA9IG5ldyBfT2JqZWN0TWFwKCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKHRoaXMuZmFzdE1hcCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgICByZXR1cm4gY29uY2F0dGVkT2JqZWN0TWFwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIE9iamVjdG1hcAogICAgICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlCiAgICAgICAqIEBwYXJhbSBvYmplY3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcpIHsKICAgICAgICB0aGlzLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5pbnRlcmVzdG1hcC5pbnRlcmVzdC5qcwp2YXIgSW50ZXJlc3Q7CnZhciBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcCgpOwogICAgSW50ZXJlc3QgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBxdWljayBhY2Nlc3MgdG8gYSBzdHJpbmcgdGhhdCBtYWtlcyB0aGUgaW50ZXJlc3QgY29tcGFyYWJsZSBmb3IgY2hlY2tpbmcgZm9yIHNpbWlsYXIgaW50ZXJlc3RzCiAgICAgICAqLwogICAgICBnZXQgY29tcGFyaXNvblN0cmluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJpc29uRnVuYyh0aGlzLm9yaWdpbmFsSW50ZXJlc3QpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmdWxsZmlsbCB0aGUgaW50ZXJlc3QKICAgICAgICovCiAgICAgIGZ1bGxmaWxsSW50ZXJlc3Qob2JqZWN0QXJnKSB7CiAgICAgICAgdGhpcy5pc0Z1bGxmaWxsZWQgPSB0cnVlOwogICAgICAgIHRoaXMuZnVsbGZpbGxtZW50U3RvcmUgPSBbXTsKICAgICAgICB0aGlzLmludGVyZXN0RGVmZXJyZWQucmVzb2x2ZShvYmplY3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoaW50ZXJlc3RNYXBBcmcsIGludGVyZXN0QXJnLCBjb21wYXJpc29uRnVuY0FyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuZGVzdHJ1Y3Rpb25UaW1lciA9IG5ldyBkaXN0X3RzX2V4cG9ydHM3LlRpbWVyKDFlNCk7CiAgICAgICAgdGhpcy5pc0Z1bGxmaWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmZ1bGxmaWxsbWVudFN0b3JlID0gW107CiAgICAgICAgdGhpcy5pbnRlcmVzdERlZmVycmVkID0gbmV3IGRpc3RfdHNfZXhwb3J0cy5EZWZlcnJlZCgpOwogICAgICAgIHRoaXMuaW50ZXJlc3RGdWxsZmlsbGVkID0gdGhpcy5pbnRlcmVzdERlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5pbnRlcmVzdE1hcFJlZiA9IGludGVyZXN0TWFwQXJnOwogICAgICAgIHRoaXMub3JpZ2luYWxJbnRlcmVzdCA9IGludGVyZXN0QXJnOwogICAgICAgIHRoaXMuY29tcGFyaXNvbkZ1bmMgPSBjb21wYXJpc29uRnVuY0FyZzsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICAgIHRoaXMuZGVzdHJ1Y3Rpb25UaW1lci5jb21wbGV0ZWQudGhlbigoKSA9PiB7CiAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5tYXJrTG9zdEFmdGVyRGVmYXVsdCkgewogICAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcih0aGlzLm9wdGlvbnMubWFya0xvc3RBZnRlckRlZmF1bHQpLnRoZW4odGhpcy5tYXJrTG9zdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLy8gTElGRUNZQ0xFIE1BTkFHRU1FTlQKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvKioKICAgICAgICogc2VsZiBkZXN0cnVjdHMgdGhlIGludGVyZXN0CiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYucmVtb3ZlSW50ZXJlc3QodGhpcyk7CiAgICAgICAgaWYgKCF0aGlzLmlzRnVsbGZpbGxlZCAmJiB0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCkgewogICAgICAgICAgdGhpcy5mdWxsZmlsbEludGVyZXN0KHRoaXMub3B0aW9ucy5kZWZhdWx0RnVsbGZpbGxtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiBsb3N0CiAgICAgICAqLwogICAgICBtYXJrTG9zdCgpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuc3RhcnQoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgdGhlIGludGVyZXN0IHRoYXQgdGhlIGludGVyZXN0IGluIGl0IGhhcyBiZWVuIHJlc3RvcmVkCiAgICAgICAqLwogICAgICByZW5ldygpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIucmVzZXQoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5pbnRlcmVzdG1hcC5qcwp2YXIgSW50ZXJlc3RNYXA7CnZhciBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19vYmplY3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcF9pbnRlcmVzdCgpOwogICAgSW50ZXJlc3RNYXAgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGNvbXBhcmlzb25GdW5jQXJnLCBvcHRpb25zQXJnID0ge30pIHsKICAgICAgICB0aGlzLmludGVyZXN0T2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIuT2JzZXJ2YWJsZUludGFrZSgpOwogICAgICAgIHRoaXMuY29tcGFyaXNvbkZ1bmMgPSBjb21wYXJpc29uRnVuY0FyZzsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFuIGludGVyZXN0IHRvIHRoZSBJbnRlcmVzdE1hcAogICAgICAgKiBAcGFyYW0gaW50ZXJlc3RJZAogICAgICAgKi8KICAgICAgYXN5bmMgYWRkSW50ZXJlc3QoaW50ZXJlc3RJZCwgZGVmYXVsdEZ1bGxmaWxsbWVudEFyZykgewogICAgICAgIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpOwogICAgICAgIGxldCByZXR1cm5JbnRlcmVzdDsKICAgICAgICBjb25zdCBuZXdJbnRlcmVzdCA9IG5ldyBJbnRlcmVzdCh0aGlzLCBpbnRlcmVzdElkLCB0aGlzLmNvbXBhcmlzb25GdW5jLCB7CiAgICAgICAgICBtYXJrTG9zdEFmdGVyRGVmYXVsdDogdGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0LAogICAgICAgICAgZGVmYXVsdEZ1bGxmaWxsbWVudDogZGVmYXVsdEZ1bGxmaWxsbWVudEFyZwogICAgICAgIH0pOwogICAgICAgIGxldCBpbnRlcmVzdEV4aXN0cyA9IGZhbHNlOwogICAgICAgIGF3YWl0IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZm9yRWFjaCgoaW50ZXJlc3RBcmcpID0+IHsKICAgICAgICAgIGlmICghaW50ZXJlc3RFeGlzdHMgJiYgaW50ZXJlc3RBcmcuY29tcGFyaXNvblN0cmluZyA9PT0gbmV3SW50ZXJlc3QuY29tcGFyaXNvblN0cmluZykgewogICAgICAgICAgICBjb25zb2xlLmxvZygiaW5mbyIsIGBpbnRlcmVzdCBhbHJlYWR5IGV4aXN0cyBmb3IgJHtuZXdJbnRlcmVzdC5jb21wYXJpc29uU3RyaW5nfWApOwogICAgICAgICAgICBpbnRlcmVzdEV4aXN0cyA9IHRydWU7CiAgICAgICAgICAgIHJldHVybkludGVyZXN0ID0gaW50ZXJlc3RBcmc7CiAgICAgICAgICAgIHJldHVybkludGVyZXN0LnJlbmV3KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZXR1cm5JbnRlcmVzdCkgewogICAgICAgICAgcmV0dXJuSW50ZXJlc3QgPSBuZXdJbnRlcmVzdDsKICAgICAgICAgIHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuYWRkKHJldHVybkludGVyZXN0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbnRlcmVzdE9ic2VydmFibGUucHVzaChyZXR1cm5JbnRlcmVzdCk7CiAgICAgICAgcmV0dXJuIHJldHVybkludGVyZXN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmVzIGFuIGludGVyZXN0IGZyb20gdGhlIGludGVyZXN0IG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlSW50ZXJlc3QoaW50ZXJlc3RBcmcpIHsKICAgICAgICBjb25zdCBpbnRlcmVzdFRvUmVtb3ZlID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kT25lQW5kUmVtb3ZlU3luYygoaW50ZXJlc3RBcmcyKSA9PiB7CiAgICAgICAgICByZXR1cm4gaW50ZXJlc3RBcmcuY29tcGFyaXNvblN0cmluZyA9PT0gaW50ZXJlc3RBcmcyLmNvbXBhcmlzb25TdHJpbmc7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGludGVyZXN0CiAgICAgICAqLwogICAgICBjaGVja0ludGVyZXN0KG9iamVjdEFyZykgewogICAgICAgIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKG9iamVjdEFyZyk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJbnRlcmVzdEJ5U3RyaW5nKGNvbXBhcmlzb25TdHJpbmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgYW4gaW50ZXJlc3QKICAgICAgICogQHBhcmFtIGNvbXBhcmlzb25TdHJpbmdBcmcKICAgICAgICovCiAgICAgIGNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgZm91bmRJbnRlcmVzdCA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZFN5bmMoKGludGVyZXN0KSA9PiB7CiAgICAgICAgICByZXR1cm4gaW50ZXJlc3QuY29tcGFyaXNvblN0cmluZyA9PT0gY29tcGFyaXNvblN0cmluZ0FyZzsKICAgICAgICB9KTsKICAgICAgICBpZiAoZm91bmRJbnRlcmVzdCkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGluZm9ybSBsb3N0IGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBpbnRlcmVzdElkCiAgICAgICAqLwogICAgICBpbmZvcm1Mb3N0SW50ZXJlc3QoaW50ZXJlc3RJZCkgewogICAgICAgIGNvbnN0IHdhbnRlZEludGVyZXN0ID0gdGhpcy5maW5kSW50ZXJlc3QoaW50ZXJlc3RJZCk7CiAgICAgICAgaWYgKHdhbnRlZEludGVyZXN0KSB7CiAgICAgICAgICB3YW50ZWRJbnRlcmVzdC5tYXJrTG9zdCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZHMgYW4gaW50ZXJlc3QKICAgICAgICogQHBhcmFtIGludGVyZXN0SWQKICAgICAgICovCiAgICAgIGZpbmRJbnRlcmVzdChpbnRlcmVzdElkKSB7CiAgICAgICAgY29uc3QgY29tcGFyYWJsZVN0cmluZyA9IHRoaXMuY29tcGFyaXNvbkZ1bmMoaW50ZXJlc3RJZCk7CiAgICAgICAgY29uc3QgaW50ZXJlc3QgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKChpbnRlcmVzdEFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IGNvbXBhcmFibGVTdHJpbmc7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGludGVyZXN0OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxpbWl0ZWRhcnJheS5qcwp2YXIgTGltaXRlZEFycmF5Owp2YXIgaW5pdF9jbGFzc2VzX2xpbWl0ZWRhcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIExpbWl0ZWRBcnJheSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IobGltaXRBcmcpIHsKICAgICAgICB0aGlzLmFycmF5ID0gW107CiAgICAgICAgdGhpcy5hcnJheUxpbWl0ID0gbGltaXRBcmc7CiAgICAgIH0KICAgICAgYWRkT25lKG9iamVjdEFyZykgewogICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChvYmplY3RBcmcpOwogICAgICAgIGlmICh0aGlzLmFycmF5Lmxlbmd0aCA+IHRoaXMuYXJyYXlMaW1pdCkgewogICAgICAgICAgdGhpcy5hcnJheS5sZW5ndGggPSB0aGlzLmFycmF5TGltaXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFkZE1hbnkob2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGxldCBvYmplY3RBcmcgb2Ygb2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkT25lKG9iamVjdEFyZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldExpbWl0KGxpbWl0QXJnKSB7CiAgICAgICAgdGhpcy5hcnJheUxpbWl0ID0gbGltaXRBcmc7CiAgICAgICAgaWYgKHRoaXMuYXJyYXkubGVuZ3RoID4gdGhpcy5hcnJheUxpbWl0KSB7CiAgICAgICAgICB0aGlzLmFycmF5Lmxlbmd0aCA9IHRoaXMuYXJyYXlMaW1pdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QXZlcmFnZSgpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXJyYXlbMF0gPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBsZXQgc3VtID0gMDsKICAgICAgICAgIGZvciAobGV0IGxvY2FsTnVtYmVyIG9mIHRoaXMuYXJyYXkpIHsKICAgICAgICAgICAgbGV0IGxvY2FsTnVtYmVyQW55ID0gbG9jYWxOdW1iZXI7CiAgICAgICAgICAgIHN1bSA9IHN1bSArIGxvY2FsTnVtYmVyQW55OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHN1bSAvIHRoaXMuYXJyYXkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMubG9vcHRyYWNrZXIuanMKdmFyIExvb3BUcmFja2VyOwp2YXIgaW5pdF9jbGFzc2VzX2xvb3B0cmFja2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxvb3B0cmFja2VyLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfb2JqZWN0bWFwKCk7CiAgICBMb29wVHJhY2tlciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5yZWZlcmVuY2VPYmplY3RNYXAgPSBuZXcgT2JqZWN0TWFwKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBhbmQgdHJhY2tzIGFuIG9iamVjdAogICAgICAgKiBAcGFyYW0gb2JqZWN0QXJnCiAgICAgICAqLwogICAgICBjaGVja0FuZFRyYWNrKG9iamVjdEFyZykgewogICAgICAgIGlmICghdGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSkgewogICAgICAgICAgdGhpcy5yZWZlcmVuY2VPYmplY3RNYXAuYWRkKG9iamVjdEFyZyk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5zdHJpbmdtYXAuanMKdmFyIFN0cmluZ21hcDsKdmFyIGluaXRfY2xhc3Nlc19zdHJpbmdtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuc3RyaW5nbWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBTdHJpbmdtYXAgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuX3N0cmluZ0FycmF5ID0gW107CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIGEgc3RyaW5nIHRvIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIGFkZFN0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheS5wdXNoKHN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGxpa2UgYWRkU3RyaW5nLCBidXQgYWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzCiAgICAgICAqLwogICAgICBhZGRTdHJpbmdBcnJheShzdHJpbmdBcnJheUFyZykgewogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheUFyZykgewogICAgICAgICAgdGhpcy5hZGRTdHJpbmcoc3RyaW5nSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmVzIGEgc3RyaW5nIGZyb20gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICByZW1vdmVTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgaW4gdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmICh0aGlzLl9zdHJpbmdBcnJheVtrZXlBcmddID09PSBzdHJpbmdBcmcpIHsKICAgICAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkuc3BsaWNlKHBhcnNlSW50KGtleUFyZyksIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZXMgdGhlIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBzdHJpbmcgaXMgaW4gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBjaGVja1N0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkuaW5kZXhPZihzdHJpbmdBcmcpICE9PSAtMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHN0cmluZ1ByZXNlbmNlIHdpdGggbWluaW1hdGNoCiAgICAgICAqLwogICAgICBjaGVja01pbmltYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCBzbWFydE1hdGNoSW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzNS5TbWFydE1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZyk7CiAgICAgICAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2YgdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmIChzbWFydE1hdGNoSW5zdGFuY2UubWF0Y2goc3RyaW5nSXRlbSkpIHsKICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZE1hdGNoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgaWYgdGhlIFN0cmluZ21hcCBpcyBlbXB0eQogICAgICAgKi8KICAgICAgY2hlY2tJc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGggPT09IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYSBjbG9uZWQgY29weSBvZiB0aGUgY3VycmVudCBzdHJpbmcgQXJyYXkKICAgICAgICovCiAgICAgIGdldFN0cmluZ0FycmF5KCkgewogICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLy8gdHJpZ2dlciByZWdpc3RlcmluZwogICAgICAvKioKICAgICAgICogcmVnaXN0ZXIgYSBuZXcgdHJpZ2dlcgogICAgICAgKi8KICAgICAgcmVnaXN0ZXJVbnRpbFRydWUoZnVuY3Rpb25BcmcsIGNhbGxiYWNrQXJnKSB7CiAgICAgICAgY29uc3QgdHJ1ZURlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkucHVzaCgoKSA9PiB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jdGlvbkFyZyh0aGlzLmdldFN0cmluZ0FycmF5KCkpOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY2FsbGJhY2tBcmcpIHsKICAgICAgICAgICAgICBjYWxsYmFja0FyZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRydWVEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0pOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICAgIHJldHVybiB0cnVlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgdHJpZ2dlcnMKICAgICAgICovCiAgICAgIG5vdGlmeVRyaWdnZXIoKSB7CiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnJheSA9IHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcigoZnVuY3Rpb25BcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhZnVuY3Rpb25BcmcoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheSA9IGZpbHRlcmVkQXJyYXk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudGltZWRhZ2dyZWdhdG9yLmpzCnZhciBUaW1lZEFnZ3JlZ3RvcjsKdmFyIGluaXRfY2xhc3Nlc190aW1lZGFnZ3JlZ2F0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudGltZWRhZ2dyZWdhdG9yLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBUaW1lZEFnZ3JlZ3RvciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICBjaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCkgewogICAgICAgIGNvbnN0IGFkZEFnZ3JlZ2F0aW9uVGltZXIgPSAoKSA9PiB7CiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIgPSBuZXcgZGlzdF90c19leHBvcnRzNy5UaW1lcih0aGlzLm9wdGlvbnMuYWdncmVnYXRpb25JbnRlcnZhbEluTWlsbGlzKTsKICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5jb21wbGV0ZWQudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZUZvclByb2Nlc3NpbmcgPSB0aGlzLnN0b3JhZ2VBcnJheTsKICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZvclByb2Nlc3NpbmcubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyID0gbnVsbDsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zdG9yYWdlQXJyYXkgPSBbXTsKICAgICAgICAgICAgYWRkQWdncmVnYXRpb25UaW1lcigpOwogICAgICAgICAgICB0aGlzLm9wdGlvbnMuZnVuY3Rpb25Gb3JBZ2dyZWdhdGlvbihhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nKTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyLnN0YXJ0KCk7CiAgICAgICAgfTsKICAgICAgICBpZiAoIXRoaXMuYWdncmVnYXRpb25UaW1lcikgewogICAgICAgICAgYWRkQWdncmVnYXRpb25UaW1lcigpOwogICAgICAgIH0KICAgICAgfQogICAgICBhZGQoYWdncmVnYXRpb25BcmcpIHsKICAgICAgICB0aGlzLnN0b3JhZ2VBcnJheS5wdXNoKGFnZ3JlZ2F0aW9uQXJnKTsKICAgICAgICB0aGlzLmNoZWNrQWdncmVnYXRpb25TdGF0dXMoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy50cmVlLmpzCnZhciBUcmVlOwp2YXIgaW5pdF9jbGFzc2VzX3RyZWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudHJlZS5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgVHJlZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zeW1ib2xUcmVlID0gbmV3IGltcG9ydF9zeW1ib2xfdHJlZS5kZWZhdWx0KCk7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIEZ1bmN0aW9ucyB0aGF0IG1hcCB0byB0aGUgZnVuY3Rpb25hbGl0eSBvZiBzeW1ib2wtdHJlZQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBvYmplY3RBcmcKICAgICAgICovCiAgICAgIGluaXRpYWxpemUob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbml0aWFsaXplKG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaGFzQ2hpbGRyZW4ob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5oYXNDaGlsZHJlbihvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGZpcnN0Q2hpbGQob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5maXJzdENoaWxkKG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgbGFzdENoaWxkKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdENoaWxkKG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJldmlvdXNTaWJsaW5nKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nKG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgbmV4dFNpYmxpbmcob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5uZXh0U2libGluZyhvYmplY3RBcmcpOwogICAgICB9CiAgICAgIHBhcmVudChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnBhcmVudChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwcmVjZWRpbmcob2JqZWN0QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVjZWRpbmcob2JqZWN0QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBmb2xsb3dpbmcob2JqZWN0LCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5mb2xsb3dpbmcob2JqZWN0LCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlblRvQXJyYXkocGFyZW50QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBhbmNlc3RvcnNUb0FycmF5KG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIHRyZWVUb0FycmF5KHJvb3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3RBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgbmV4dFNpYmxpbmdzSXRlcmF0b3Iob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5uZXh0U2libGluZ3NJdGVyYXRvcigpOwogICAgICB9CiAgICAgIGFuY2VzdG9yc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHRoaXMuc3ltYm9sVHJlZS5hbmNlc3RvcnNJdGVyYXRvcigpOwogICAgICB9CiAgICAgIHRyZWVJdGVyYXRvcihyb290QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlSXRlcmF0b3Iocm9vdEFyZyk7CiAgICAgIH0KICAgICAgaW5kZXgoY2hpbGRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluZGV4KGNoaWxkQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlbkNvdW50KHBhcmVudEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Db3VudChwYXJlbnRBcmcpOwogICAgICB9CiAgICAgIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdEFyZywgcmlnaHRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVHJlZVBvc2l0aW9uKGxlZnRBcmcsIHJpZ2h0QXJnKTsKICAgICAgfQogICAgICByZW1vdmUocmVtb3ZlT2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5yZW1vdmUocmVtb3ZlT2JqZWN0QXJnKTsKICAgICAgfQogICAgICBpbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgYXBwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIEZ1bmN0aW9uaW9uYWxpdHkgdGhhdCBleHRlbmRzIHN5bWJvbC10cmVlCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBicmFuY2ggb2YgdGhlIHRyZWUgYXMgSlNPTgogICAgICAgKiBjYW4gYmUgdXNlcgogICAgICAgKi8KICAgICAgdG9Kc29uV2l0aEhpZXJhY2h5KHJvb3RFbGVtZW50KSB7CiAgICAgICAgY29uc3QgdHJlZUl0ZXJhYmxlID0gdGhpcy50cmVlSXRlcmF0b3Iocm9vdEVsZW1lbnQsIHt9KTsKICAgICAgICBmb3IgKGNvbnN0IHRyZWVJdGVtIG9mIHRyZWVJdGVyYWJsZSkgewogICAgICAgICAgY29uc29sZS5sb2codHJlZUl0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYnVpbGRzIGEgdHJlZSBmcm9tIGEgSlNPTiB3aXRoIGhpZXJhY2h5CiAgICAgICAqIEBwYXJhbSByb290RWxlbWVudAogICAgICAgKi8KICAgICAgZnJvbUpzb25XaXRoSGllcmFjaHkocm9vdEVsZW1lbnQpIHsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czYgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzNiwgewogIEFzeW5jRXhlY3V0aW9uU3RhY2s6ICgpID0+IEFzeW5jRXhlY3V0aW9uU3RhY2ssCiAgQmFja3ByZXNzdXJlZEFycmF5OiAoKSA9PiBCYWNrcHJlc3N1cmVkQXJyYXksCiAgRmFzdE1hcDogKCkgPT4gRmFzdE1hcCwKICBJbnRlcmVzdDogKCkgPT4gSW50ZXJlc3QsCiAgSW50ZXJlc3RNYXA6ICgpID0+IEludGVyZXN0TWFwLAogIExpbWl0ZWRBcnJheTogKCkgPT4gTGltaXRlZEFycmF5LAogIExvb3BUcmFja2VyOiAoKSA9PiBMb29wVHJhY2tlciwKICBPYmplY3RNYXA6ICgpID0+IE9iamVjdE1hcCwKICBTdHJpbmdtYXA6ICgpID0+IFN0cmluZ21hcCwKICBUaW1lZEFnZ3JlZ3RvcjogKCkgPT4gVGltZWRBZ2dyZWd0b3IsCiAgVHJlZTogKCkgPT4gVHJlZSwKICB1bmk6ICgpID0+IHVuaQp9KTsKdmFyIGluaXRfZGlzdF90czcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19hc3luY2V4ZWN1dGlvbnN0YWNrKCk7CiAgICBpbml0X2NsYXNzZXNfYmFja3ByZXNzdXJlZGFycmF5KCk7CiAgICBpbml0X2NsYXNzZXNfZmFzdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QoKTsKICAgIGluaXRfY2xhc3Nlc19saW1pdGVkYXJyYXkoKTsKICAgIGluaXRfY2xhc3Nlc19sb29wdHJhY2tlcigpOwogICAgaW5pdF9jbGFzc2VzX29iamVjdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX3N0cmluZ21hcCgpOwogICAgaW5pdF9jbGFzc2VzX3RpbWVkYWdncmVnYXRvcigpOwogICAgaW5pdF9jbGFzc2VzX3RyZWUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcwp2YXIgdWludDhhcnJheV9leHRyYXNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydCh1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLCB7CiAgYXJlVWludDhBcnJheXNFcXVhbDogKCkgPT4gYXJlVWludDhBcnJheXNFcXVhbCwKICBhc3NlcnRVaW50OEFycmF5OiAoKSA9PiBhc3NlcnRVaW50OEFycmF5LAogIGFzc2VydFVpbnQ4QXJyYXlPckFycmF5QnVmZmVyOiAoKSA9PiBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlciwKICBiYXNlNjRUb1N0cmluZzogKCkgPT4gYmFzZTY0VG9TdHJpbmcsCiAgYmFzZTY0VG9VaW50OEFycmF5OiAoKSA9PiBiYXNlNjRUb1VpbnQ4QXJyYXksCiAgY29tcGFyZVVpbnQ4QXJyYXlzOiAoKSA9PiBjb21wYXJlVWludDhBcnJheXMsCiAgY29uY2F0VWludDhBcnJheXM6ICgpID0+IGNvbmNhdFVpbnQ4QXJyYXlzLAogIGdldFVpbnRCRTogKCkgPT4gZ2V0VWludEJFLAogIGhleFRvVWludDhBcnJheTogKCkgPT4gaGV4VG9VaW50OEFycmF5LAogIGluY2x1ZGVzOiAoKSA9PiBpbmNsdWRlcywKICBpbmRleE9mOiAoKSA9PiBpbmRleE9mLAogIGlzVWludDhBcnJheTogKCkgPT4gaXNVaW50OEFycmF5LAogIHN0cmluZ1RvQmFzZTY0OiAoKSA9PiBzdHJpbmdUb0Jhc2U2NCwKICBzdHJpbmdUb1VpbnQ4QXJyYXk6ICgpID0+IHN0cmluZ1RvVWludDhBcnJheSwKICB0b1VpbnQ4QXJyYXk6ICgpID0+IHRvVWludDhBcnJheSwKICB1aW50OEFycmF5VG9CYXNlNjQ6ICgpID0+IHVpbnQ4QXJyYXlUb0Jhc2U2NCwKICB1aW50OEFycmF5VG9IZXg6ICgpID0+IHVpbnQ4QXJyYXlUb0hleCwKICB1aW50OEFycmF5VG9TdHJpbmc6ICgpID0+IHVpbnQ4QXJyYXlUb1N0cmluZwp9KTsKZnVuY3Rpb24gaXNUeXBlKHZhbHVlMiwgdHlwZUNvbnN0cnVjdG9yLCB0eXBlU3RyaW5naWZpZWQpIHsKICBpZiAoIXZhbHVlMikgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAodmFsdWUyLmNvbnN0cnVjdG9yID09PSB0eXBlQ29uc3RydWN0b3IpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZTIpID09PSB0eXBlU3RyaW5naWZpZWQ7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5KHZhbHVlMikgewogIHJldHVybiBpc1R5cGUodmFsdWUyLCBVaW50OEFycmF5LCB1aW50OEFycmF5U3RyaW5naWZpZWQpOwp9CmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsdWUyKSB7CiAgcmV0dXJuIGlzVHlwZSh2YWx1ZTIsIEFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkKTsKfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXlPckFycmF5QnVmZmVyKHZhbHVlMikgewogIHJldHVybiBpc1VpbnQ4QXJyYXkodmFsdWUyKSB8fCBpc0FycmF5QnVmZmVyKHZhbHVlMik7Cn0KZnVuY3Rpb24gYXNzZXJ0VWludDhBcnJheSh2YWx1ZTIpIHsKICBpZiAoIWlzVWludDhBcnJheSh2YWx1ZTIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYFVpbnQ4QXJyYXlcYCwgZ290IFxgJHt0eXBlb2YgdmFsdWUyfVxgYCk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXlPckFycmF5QnVmZmVyKHZhbHVlMikgewogIGlmICghaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYFVpbnQ4QXJyYXlcYCBvciBcYEFycmF5QnVmZmVyXGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiB0b1VpbnQ4QXJyYXkodmFsdWUyKSB7CiAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodmFsdWUyKTsKICB9CiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZTIpKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodmFsdWUyLmJ1ZmZlciwgdmFsdWUyLmJ5dGVPZmZzZXQsIHZhbHVlMi5ieXRlTGVuZ3RoKTsKICB9CiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgdmFsdWUsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYC5gKTsKfQpmdW5jdGlvbiBjb25jYXRVaW50OEFycmF5cyhhcnJheXMsIHRvdGFsTGVuZ3RoKSB7CiAgaWYgKGFycmF5cy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTsKICB9CiAgdG90YWxMZW5ndGggPz89IGFycmF5cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IGFjY3VtdWxhdG9yICsgY3VycmVudFZhbHVlLmxlbmd0aCwgMCk7CiAgY29uc3QgcmV0dXJuVmFsdWUgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7CiAgbGV0IG9mZnNldCA9IDA7CiAgZm9yIChjb25zdCBhcnJheSBvZiBhcnJheXMpIHsKICAgIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogICAgcmV0dXJuVmFsdWUuc2V0KGFycmF5LCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDsKICB9CiAgcmV0dXJuIHJldHVyblZhbHVlOwp9CmZ1bmN0aW9uIGFyZVVpbnQ4QXJyYXlzRXF1YWwoYTUsIGI1KSB7CiAgYXNzZXJ0VWludDhBcnJheShhNSk7CiAgYXNzZXJ0VWludDhBcnJheShiNSk7CiAgaWYgKGE1ID09PSBiNSkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGlmIChhNS5sZW5ndGggIT09IGI1Lmxlbmd0aCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCBhNS5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBpZiAoYTVbaW5kZXgyXSAhPT0gYjVbaW5kZXgyXSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGNvbXBhcmVVaW50OEFycmF5cyhhNSwgYjUpIHsKICBhc3NlcnRVaW50OEFycmF5KGE1KTsKICBhc3NlcnRVaW50OEFycmF5KGI1KTsKICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihhNS5sZW5ndGgsIGI1Lmxlbmd0aCk7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIrKykgewogICAgY29uc3QgZGlmZiA9IGE1W2luZGV4Ml0gLSBiNVtpbmRleDJdOwogICAgaWYgKGRpZmYgIT09IDApIHsKICAgICAgcmV0dXJuIE1hdGguc2lnbihkaWZmKTsKICAgIH0KICB9CiAgcmV0dXJuIE1hdGguc2lnbihhNS5sZW5ndGggLSBiNS5sZW5ndGgpOwp9CmZ1bmN0aW9uIHVpbnQ4QXJyYXlUb1N0cmluZyhhcnJheSwgZW5jb2RpbmcgPSAidXRmOCIpIHsKICBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcihhcnJheSk7CiAgY2FjaGVkRGVjb2RlcnNbZW5jb2RpbmddID8/PSBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcihlbmNvZGluZyk7CiAgcmV0dXJuIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXS5kZWNvZGUoYXJyYXkpOwp9CmZ1bmN0aW9uIGFzc2VydFN0cmluZyh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxgc3RyaW5nXGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiBzdHJpbmdUb1VpbnQ4QXJyYXkoc3RyaW5nMykgewogIGFzc2VydFN0cmluZyhzdHJpbmczKTsKICByZXR1cm4gY2FjaGVkRW5jb2Rlci5lbmNvZGUoc3RyaW5nMyk7Cn0KZnVuY3Rpb24gYmFzZTY0VG9CYXNlNjRVcmwoYmFzZTY0MikgewogIHJldHVybiBiYXNlNjQyLnJlcGxhY2VBbGwoIisiLCAiLSIpLnJlcGxhY2VBbGwoIi8iLCAiXyIpLnJlcGxhY2UoLz0rJC8sICIiKTsKfQpmdW5jdGlvbiBiYXNlNjRVcmxUb0Jhc2U2NChiYXNlNjR1cmwpIHsKICBjb25zdCBiYXNlNjQyID0gYmFzZTY0dXJsLnJlcGxhY2VBbGwoIi0iLCAiKyIpLnJlcGxhY2VBbGwoIl8iLCAiLyIpOwogIGNvbnN0IHBhZGRpbmcgPSAoNCAtIGJhc2U2NDIubGVuZ3RoICUgNCkgJSA0OwogIHJldHVybiBiYXNlNjQyICsgIj0iLnJlcGVhdChwYWRkaW5nKTsKfQpmdW5jdGlvbiB1aW50OEFycmF5VG9CYXNlNjQoYXJyYXksIHsgdXJsU2FmZSA9IGZhbHNlIH0gPSB7fSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogIGxldCBiYXNlNjQyID0gIiI7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgYXJyYXkubGVuZ3RoOyBpbmRleDIgKz0gTUFYX0JMT0NLX1NJWkUpIHsKICAgIGNvbnN0IGNodW5rID0gYXJyYXkuc3ViYXJyYXkoaW5kZXgyLCBpbmRleDIgKyBNQVhfQkxPQ0tfU0laRSk7CiAgICBiYXNlNjQyICs9IGdsb2JhbFRoaXMuYnRvYShTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseSh2b2lkIDAsIGNodW5rKSk7CiAgfQogIHJldHVybiB1cmxTYWZlID8gYmFzZTY0VG9CYXNlNjRVcmwoYmFzZTY0MikgOiBiYXNlNjQyOwp9CmZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheShiYXNlNjRTdHJpbmcpIHsKICBhc3NlcnRTdHJpbmcoYmFzZTY0U3RyaW5nKTsKICByZXR1cm4gVWludDhBcnJheS5mcm9tKGdsb2JhbFRoaXMuYXRvYihiYXNlNjRVcmxUb0Jhc2U2NChiYXNlNjRTdHJpbmcpKSwgKHg0KSA9PiB4NC5jb2RlUG9pbnRBdCgwKSk7Cn0KZnVuY3Rpb24gc3RyaW5nVG9CYXNlNjQoc3RyaW5nMywgeyB1cmxTYWZlID0gZmFsc2UgfSA9IHt9KSB7CiAgYXNzZXJ0U3RyaW5nKHN0cmluZzMpOwogIHJldHVybiB1aW50OEFycmF5VG9CYXNlNjQoc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZzMpLCB7IHVybFNhZmUgfSk7Cn0KZnVuY3Rpb24gYmFzZTY0VG9TdHJpbmcoYmFzZTY0U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7CiAgcmV0dXJuIHVpbnQ4QXJyYXlUb1N0cmluZyhiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSk7Cn0KZnVuY3Rpb24gdWludDhBcnJheVRvSGV4KGFycmF5KSB7CiAgYXNzZXJ0VWludDhBcnJheShhcnJheSk7CiAgbGV0IGhleFN0cmluZyA9ICIiOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGFycmF5Lmxlbmd0aDsgaW5kZXgyKyspIHsKICAgIGhleFN0cmluZyArPSBieXRlVG9IZXhMb29rdXBUYWJsZVthcnJheVtpbmRleDJdXTsKICB9CiAgcmV0dXJuIGhleFN0cmluZzsKfQpmdW5jdGlvbiBoZXhUb1VpbnQ4QXJyYXkoaGV4U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGhleFN0cmluZyk7CiAgaWYgKGhleFN0cmluZy5sZW5ndGggJSAyICE9PSAwKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSGV4IHN0cmluZyBsZW5ndGguIik7CiAgfQogIGNvbnN0IHJlc3VsdExlbmd0aCA9IGhleFN0cmluZy5sZW5ndGggLyAyOwogIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTsKICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCByZXN1bHRMZW5ndGg7IGluZGV4MisrKSB7CiAgICBjb25zdCBoaWdoTmliYmxlID0gaGV4VG9EZWNpbWFsTG9va3VwVGFibGVbaGV4U3RyaW5nW2luZGV4MiAqIDJdXTsKICAgIGNvbnN0IGxvd05pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleDIgKiAyICsgMV1dOwogICAgaWYgKGhpZ2hOaWJibGUgPT09IHZvaWQgMCB8fCBsb3dOaWJibGUgPT09IHZvaWQgMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSGV4IGNoYXJhY3RlciBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiAke2luZGV4MiAqIDJ9YCk7CiAgICB9CiAgICBieXRlc1tpbmRleDJdID0gaGlnaE5pYmJsZSA8PCA0IHwgbG93TmliYmxlOwogIH0KICByZXR1cm4gYnl0ZXM7Cn0KZnVuY3Rpb24gZ2V0VWludEJFKHZpZXcpIHsKICBjb25zdCB7IGJ5dGVMZW5ndGggfSA9IHZpZXc7CiAgaWYgKGJ5dGVMZW5ndGggPT09IDYpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQxNigwKSAqIDIgKiogMzIgKyB2aWV3LmdldFVpbnQzMigyKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDUpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KDApICogMiAqKiAzMiArIHZpZXcuZ2V0VWludDMyKDEpOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gNCkgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKDApOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMykgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDgoMCkgKiAyICoqIDE2ICsgdmlldy5nZXRVaW50MTYoMSk7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSAyKSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50MTYoMCk7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSAxKSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50OCgwKTsKICB9Cn0KZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUyKSB7CiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7CiAgY29uc3QgdmFsdWVMZW5ndGggPSB2YWx1ZTIubGVuZ3RoOwogIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIC0xOwogIH0KICBpZiAodmFsdWVMZW5ndGggPiBhcnJheUxlbmd0aCkgewogICAgcmV0dXJuIC0xOwogIH0KICBjb25zdCB2YWxpZE9mZnNldExlbmd0aCA9IGFycmF5TGVuZ3RoIC0gdmFsdWVMZW5ndGg7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDw9IHZhbGlkT2Zmc2V0TGVuZ3RoOyBpbmRleDIrKykgewogICAgbGV0IGlzTWF0Y2gzID0gdHJ1ZTsKICAgIGZvciAobGV0IGluZGV4MjIgPSAwOyBpbmRleDIyIDwgdmFsdWVMZW5ndGg7IGluZGV4MjIrKykgewogICAgICBpZiAoYXJyYXlbaW5kZXgyICsgaW5kZXgyMl0gIT09IHZhbHVlMltpbmRleDIyXSkgewogICAgICAgIGlzTWF0Y2gzID0gZmFsc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc01hdGNoMykgewogICAgICByZXR1cm4gaW5kZXgyOwogICAgfQogIH0KICByZXR1cm4gLTE7Cn0KZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlMikgewogIHJldHVybiBpbmRleE9mKGFycmF5LCB2YWx1ZTIpICE9PSAtMTsKfQp2YXIgb2JqZWN0VG9TdHJpbmcsIHVpbnQ4QXJyYXlTdHJpbmdpZmllZCwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCwgY2FjaGVkRGVjb2RlcnMsIGNhY2hlZEVuY29kZXIsIE1BWF9CTE9DS19TSVpFLCBieXRlVG9IZXhMb29rdXBUYWJsZSwgaGV4VG9EZWNpbWFsTG9va3VwVGFibGU7CnZhciBpbml0X3VpbnQ4YXJyYXlfZXh0cmFzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdWludDhhcnJheS1leHRyYXNAMS41LjAvbm9kZV9tb2R1bGVzL3VpbnQ4YXJyYXktZXh0cmFzL2luZGV4LmpzIigpIHsKICAgIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIHVpbnQ4QXJyYXlTdHJpbmdpZmllZCA9ICJbb2JqZWN0IFVpbnQ4QXJyYXldIjsKICAgIGFycmF5QnVmZmVyU3RyaW5naWZpZWQgPSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iOwogICAgY2FjaGVkRGVjb2RlcnMgPSB7CiAgICAgIHV0Zjg6IG5ldyBnbG9iYWxUaGlzLlRleHREZWNvZGVyKCJ1dGY4IikKICAgIH07CiAgICBjYWNoZWRFbmNvZGVyID0gbmV3IGdsb2JhbFRoaXMuVGV4dEVuY29kZXIoKTsKICAgIE1BWF9CTE9DS19TSVpFID0gNjU1MzU7CiAgICBieXRlVG9IZXhMb29rdXBUYWJsZSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXzQsIGluZGV4MikgPT4gaW5kZXgyLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAiMCIpKTsKICAgIGhleFRvRGVjaW1hbExvb2t1cFRhYmxlID0gewogICAgICAwOiAwLAogICAgICAxOiAxLAogICAgICAyOiAyLAogICAgICAzOiAzLAogICAgICA0OiA0LAogICAgICA1OiA1LAogICAgICA2OiA2LAogICAgICA3OiA3LAogICAgICA4OiA4LAogICAgICA5OiA5LAogICAgICBhOiAxMCwKICAgICAgYjogMTEsCiAgICAgIGM6IDEyLAogICAgICBkOiAxMywKICAgICAgZTogMTQsCiAgICAgIGY6IDE1LAogICAgICBBOiAxMCwKICAgICAgQjogMTEsCiAgICAgIEM6IDEyLAogICAgICBEOiAxMywKICAgICAgRTogMTQsCiAgICAgIEY6IDE1CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvc21hcnRidWZmZXIucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGJ1ZmZlcl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvc21hcnRidWZmZXIucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X3VpbnQ4YXJyYXlfZXh0cmFzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGJ1ZmZlckAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRidWZmZXIvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzOCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM4LCB7CiAgYmFzZTY0VG9VaW50OEFycmF5OiAoKSA9PiBiYXNlNjRUb1VpbnQ4QXJyYXkyLAogIGVuc3VyZVB1cmVVaW50OEFycmF5OiAoKSA9PiBlbnN1cmVQdXJlVWludDhBcnJheSwKICBpc0J1ZmZlckxpa2U6ICgpID0+IGlzQnVmZmVyTGlrZSwKICBpc1VpbnQ4QXJyYXk6ICgpID0+IGlzVWludDhBcnJheTIsCiAgdUludDhBcnJheUV4dHJhczogKCkgPT4gdUludDhBcnJheUV4dHJhcywKICB1SW50OEFycmF5VG9CYXNlNjQ6ICgpID0+IHVJbnQ4QXJyYXlUb0Jhc2U2NAp9KTsKZnVuY3Rpb24gdUludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXkpIHsKICByZXR1cm4gdWludDhhcnJheV9leHRyYXNfZXhwb3J0cy51aW50OEFycmF5VG9CYXNlNjQodUludDhBcnJheSk7Cn0KZnVuY3Rpb24gYmFzZTY0VG9VaW50OEFycmF5MihiYXNlNjQyKSB7CiAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMuYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NDIpOwp9CmZ1bmN0aW9uIGlzQnVmZmVyTGlrZShvYmopIHsKICBpZiAob2JqICYmIHR5cGVvZiBvYmouYnl0ZUxlbmd0aCA9PT0gIm51bWJlciIpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIgJiYgQnVmZmVyLmlzQnVmZmVyKSB7CiAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaik7CiAgfQogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBlbnN1cmVQdXJlVWludDhBcnJheShidWZmZXJBcmcpIHsKICBjb25zdCB1aW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyQXJnLmxlbmd0aCk7CiAgdWludDhBcnJheS5zZXQoYnVmZmVyQXJnKTsKICByZXR1cm4gdWludDhBcnJheTsKfQp2YXIgdUludDhBcnJheUV4dHJhcywgaXNVaW50OEFycmF5MjsKdmFyIGluaXRfZGlzdF90czggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGJ1ZmZlckAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRidWZmZXIvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0YnVmZmVyX3BsdWdpbnMoKTsKICAgIHVJbnQ4QXJyYXlFeHRyYXMgPSB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzOwogICAgaXNVaW50OEFycmF5MiA9IChvYmopID0+IHsKICAgICAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMuaXNVaW50OEFycmF5KG9iaik7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvc21hcnRndWFyZC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmQuanMKdmFyIEd1YXJkOwp2YXIgaW5pdF9jbGFzc2VzX2d1YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmQuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIEd1YXJkID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihndWFyZEZ1bmN0aW9uQXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgdGhpcy5ndWFyZEZ1bmN0aW9uID0gZ3VhcmRGdW5jdGlvbkFyZzsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBleGVjdXRlcyB0aGUgZ3VhcmQgYWdhaW5zdCBhIGRhdGEgYXJndW1lbnQ7CiAgICAgICAqIEBwYXJhbSBkYXRhQXJnCiAgICAgICAqLwogICAgICBhc3luYyBleGVjKGRhdGFBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmd1YXJkRnVuY3Rpb24oZGF0YUFyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBhc3luYyBnZXRGYWlsZWRIaW50KGRhdGFBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoZGF0YUFyZyk7CiAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmFpbGVkSGludDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRlcnJvci5qcwp2YXIgR3VhcmRFcnJvcjsKdmFyIGluaXRfY2xhc3Nlc19ndWFyZGVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRlcnJvci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0Z3VhcmRfcGx1Z2lucygpOwogICAgR3VhcmRFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICBjb25zdHJ1Y3RvcihtZXNzYWdlMikgewogICAgICAgIHN1cGVyKG1lc3NhZ2UyKTsKICAgICAgICB0aGlzLm5hbWUgPSAiR3VhcmRFcnJvciI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvY2xhc3Nlcy5ndWFyZHNldC5qcwp2YXIgR3VhcmRTZXQ7CnZhciBpbml0X2NsYXNzZXNfZ3VhcmRzZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvY2xhc3Nlcy5ndWFyZHNldC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0Z3VhcmRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkKCk7CiAgICBHdWFyZFNldCA9IGNsYXNzIGV4dGVuZHMgR3VhcmQgewogICAgICBjb25zdHJ1Y3RvcihndWFyZEFycmF5ID0gW10pIHsKICAgICAgICBzdXBlcihhc3luYyAoZGF0YUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIHRoaXMuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmd1YXJkcyA9IGd1YXJkQXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGV4ZWN1dGVzIGFsbCBndWFyZHMgaW4gYWxsIGd1YXJkU2V0cyBhZ2FpbnN0IGEgZGF0YSBhcmd1bWVudAogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlY0FsbFdpdGhEYXRhKGRhdGFBcmcsIG9wdGlvbnNBcmcgPSB7CiAgICAgICAgbW9kZTogInBhcmFsbGVsIiwKICAgICAgICBzdG9wT25GYWlsOiBmYWxzZQogICAgICB9KSB7CiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZXMgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIHRoaXMuZ3VhcmRzKSB7CiAgICAgICAgICBjb25zdCBndWFyZFJlc3VsdFByb21pc2UgPSBndWFyZC5leGVjKGRhdGFBcmcpOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcubW9kZSA9PT0gInNlcmlhbCIpIHsKICAgICAgICAgICAgYXdhaXQgZ3VhcmRSZXN1bHRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0UHJvbWlzZXMucHVzaChndWFyZFJlc3VsdFByb21pc2UpOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcuc3RvcE9uRmFpbCkgewogICAgICAgICAgICBpZiAoIWF3YWl0IGd1YXJkUmVzdWx0UHJvbWlzZSkgewogICAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKTsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIGFsbCBndWFyZHMgcGFzcwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgYWxsR3VhcmRzUGFzcyhkYXRhQXJnLCBvcHRpb25zQXJnID0gewogICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgfSkgewogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeSgocmVzdWx0KSA9PiByZXN1bHQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgaWYgYW55IGd1YXJkIHBhc3NlcwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgYW55R3VhcmRzUGFzcyhkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZXhlY0FsbFdpdGhEYXRhKGRhdGFBcmcsIHsKICAgICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgICBzdG9wT25GYWlsOiBmYWxzZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHRzLnNvbWUoKHJlc3VsdCkgPT4gcmVzdWx0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyB0aGUgZmlyc3QgcmVhc29uIGZvciB3aHkgc29tZXRoaW5nIGZhaWxzCiAgICAgICAqIEBwYXJhbSBkYXRhQXJnCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqLwogICAgICBnZXRGYWlsZWRIaW50KGRhdGFBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIHRoaXMuZ3VhcmRzKSB7CiAgICAgICAgICBjb25zdCBmYWlsZWRIaW50ID0gZ3VhcmQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTsKICAgICAgICAgIGlmIChmYWlsZWRIaW50KSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsZWRIaW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzOSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM5LCB7CiAgR3VhcmQ6ICgpID0+IEd1YXJkLAogIEd1YXJkRXJyb3I6ICgpID0+IEd1YXJkRXJyb3IsCiAgR3VhcmRTZXQ6ICgpID0+IEd1YXJkU2V0LAogIHBhc3NHdWFyZHNPclJlamVjdDogKCkgPT4gcGFzc0d1YXJkc09yUmVqZWN0Cn0pOwp2YXIgcGFzc0d1YXJkc09yUmVqZWN0Owp2YXIgaW5pdF9kaXN0X3RzOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0Z3VhcmRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkKCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkKCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRzZXQoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZHNldCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkZXJyb3IoKTsKICAgIHBhc3NHdWFyZHNPclJlamVjdCA9IGFzeW5jIChkYXRhQXJnLCBndWFyZHMpID0+IHsKICAgICAgY29uc3QgZ3VhcmRTZXQgPSBuZXcgR3VhcmRTZXQoZ3VhcmRzKTsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ3VhcmRTZXQuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTsKICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICBjb25zdCBmYWlsZWRIaW50ID0gYXdhaXQgZ3VhcmRTZXQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTsKICAgICAgICB0aHJvdyBuZXcgR3VhcmRFcnJvcihgR3VhcmRzIGZhaWxlZDoKJHtmYWlsZWRIaW50fQogICAgYCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3IubWFuYWdlci5qcwp2YXIgSW50ZXJjZXB0b3JNYW5hZ2VyOwp2YXIgaW5pdF9pbnRlcmNlcHRvcl9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvci5tYW5hZ2VyLmpzIigpIHsKICAgIEludGVyY2VwdG9yTWFuYWdlciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzID0gW107CiAgICAgICAgdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycyA9IFtdOwogICAgICAgIHRoaXMuZXJyb3JJbnRlcmNlcHRvcnMgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQWRkIGEgcmVxdWVzdCBpbnRlcmNlcHRvcgogICAgICAgKi8KICAgICAgYWRkUmVxdWVzdEludGVyY2VwdG9yKGludGVyY2VwdG9yKSB7CiAgICAgICAgdGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JzLnB1c2goaW50ZXJjZXB0b3IpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBZGQgYSByZXNwb25zZSBpbnRlcmNlcHRvcgogICAgICAgKi8KICAgICAgYWRkUmVzcG9uc2VJbnRlcmNlcHRvcihpbnRlcmNlcHRvcikgewogICAgICAgIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMucHVzaChpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhbiBlcnJvciBpbnRlcmNlcHRvcgogICAgICAgKi8KICAgICAgYWRkRXJyb3JJbnRlcmNlcHRvcihpbnRlcmNlcHRvcikgewogICAgICAgIHRoaXMuZXJyb3JJbnRlcmNlcHRvcnMucHVzaChpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhIHJlcXVlc3QgaW50ZXJjZXB0b3IKICAgICAgICovCiAgICAgIHJlbW92ZVJlcXVlc3RJbnRlcmNlcHRvcihpbnRlcmNlcHRvcikgewogICAgICAgIGNvbnN0IGluZGV4MiA9IHRoaXMucmVxdWVzdEludGVyY2VwdG9ycy5pbmRleE9mKGludGVyY2VwdG9yKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucmVxdWVzdEludGVyY2VwdG9ycy5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhIHJlc3BvbnNlIGludGVyY2VwdG9yCiAgICAgICAqLwogICAgICByZW1vdmVSZXNwb25zZUludGVyY2VwdG9yKGludGVyY2VwdG9yKSB7CiAgICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5pbmRleE9mKGludGVyY2VwdG9yKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW4gZXJyb3IgaW50ZXJjZXB0b3IKICAgICAgICovCiAgICAgIHJlbW92ZUVycm9ySW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLmVycm9ySW50ZXJjZXB0b3JzLmluZGV4T2YoaW50ZXJjZXB0b3IpOwogICAgICAgIGlmIChpbmRleDIgPiAtMSkgewogICAgICAgICAgdGhpcy5lcnJvckludGVyY2VwdG9ycy5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMKICAgICAgICovCiAgICAgIGNsZWFyQWxsKCkgewogICAgICAgIHRoaXMucmVxdWVzdEludGVyY2VwdG9ycyA9IFtdOwogICAgICAgIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMgPSBbXTsKICAgICAgICB0aGlzLmVycm9ySW50ZXJjZXB0b3JzID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgcmVxdWVzdCB0aHJvdWdoIGFsbCByZXF1ZXN0IGludGVyY2VwdG9ycwogICAgICAgKi8KICAgICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCkgewogICAgICAgIGxldCBwcm9jZXNzZWRSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIHRoaXMucmVxdWVzdEludGVyY2VwdG9ycykgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcHJvY2Vzc2VkUmVxdWVzdCA9IGF3YWl0IGludGVyY2VwdG9yKHByb2Nlc3NlZFJlcXVlc3QpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFJlcXVlc3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgcmVzcG9uc2UgdGhyb3VnaCBhbGwgcmVzcG9uc2UgaW50ZXJjZXB0b3JzCiAgICAgICAqLwogICAgICBhc3luYyBwcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgICAgICBsZXQgcHJvY2Vzc2VkUmVzcG9uc2UgPSByZXNwb25zZTsKICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvcnMpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHByb2Nlc3NlZFJlc3BvbnNlID0gYXdhaXQgaW50ZXJjZXB0b3IocHJvY2Vzc2VkUmVzcG9uc2UpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5wcm9jZXNzRXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZFJlc3BvbnNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcm9jZXNzIGVycm9yIHRocm91Z2ggYWxsIGVycm9yIGludGVyY2VwdG9ycwogICAgICAgKi8KICAgICAgYXN5bmMgcHJvY2Vzc0Vycm9yKGVycm9yKSB7CiAgICAgICAgbGV0IHByb2Nlc3NlZEVycm9yID0gZXJyb3I7CiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiB0aGlzLmVycm9ySW50ZXJjZXB0b3JzKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwcm9jZXNzZWRFcnJvciA9IGF3YWl0IGludGVyY2VwdG9yKHByb2Nlc3NlZEVycm9yKTsKICAgICAgICAgIH0gY2F0Y2ggKG5ld0Vycm9yKSB7CiAgICAgICAgICAgIHByb2Nlc3NlZEVycm9yID0gbmV3RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IG5ld0Vycm9yIDogbmV3IEVycm9yKFN0cmluZyhuZXdFcnJvcikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXJyb3I7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBjb3VudCBvZiByZWdpc3RlcmVkIGludGVyY2VwdG9ycwogICAgICAgKi8KICAgICAgZ2V0SW50ZXJjZXB0b3JDb3VudHMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdEludGVyY2VwdG9ycy5sZW5ndGgsCiAgICAgICAgICByZXNwb25zZTogdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycy5sZW5ndGgsCiAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvckludGVyY2VwdG9ycy5sZW5ndGgKICAgICAgICB9OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRlbnZfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMKdmFyIGluaXRfaW50ZXJmYWNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9pbnRlcmZhY2VzL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5jbGFzc2VzLnNtYXJ0ZW52LmpzCnZhciBTbWFydGVudjsKdmFyIGluaXRfc21hcnRlbnZfY2xhc3Nlc19zbWFydGVudiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5jbGFzc2VzLnNtYXJ0ZW52LmpzIigpIHsKICAgIGluaXRfc21hcnRlbnZfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzKCk7CiAgICBTbWFydGVudiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzID0gW107CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUob3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc3QgbW9kdWxlUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZShvcHRpb25zQXJnLm5vZGVNb2R1bGVOYW1lKTsKICAgICAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgY29uc3QgbW9kdWxlUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRTYWZlV2ViTW9kdWxlKG9wdGlvbnNBcmcud2ViVXJsQXJnLCBvcHRpb25zQXJnLmdldEZ1bmN0aW9uKTsKICAgICAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoInBsYXRmb3JtIGZvciBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQgYnkgc21hcnRlbnYiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0U2FmZU5vZGVNb2R1bGUobW9kdWxlTmFtZUFyZywgcnVuQWZ0ZXJGdW5jKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBub2RlIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQ6ICR7bW9kdWxlTmFtZUFyZ30uIFRoaXMgZG9lcyBub3QgdGhyb3cuYCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gYXdhaXQgbmV3IEZ1bmN0aW9uKGByZXR1cm4gaW1wb3J0KCcke21vZHVsZU5hbWVBcmd9JylgKSgpOwogICAgICAgIGlmIChydW5BZnRlckZ1bmMpIHsKICAgICAgICAgIGF3YWl0IHJ1bkFmdGVyRnVuYyhyZXR1cm5WYWx1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlV2ViTW9kdWxlKHVybEFyZywgZ2V0RnVuY3Rpb25BcmcpIHsKICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJZb3UgdHJpZWQgdG8gbG9hZCBhIHdlYiBtb2R1bGUgaW4gYSB3cm9uZyBjb250ZXh0Iik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmxvYWRlZFNjcmlwdHMuaW5jbHVkZXModXJsQXJnKSkgewogICAgICAgICAgcmV0dXJuIGdldEZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMubG9hZGVkU2NyaXB0cy5wdXNoKHVybEFyZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBpZiAoZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKSB7CiAgICAgICAgICBnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHModXJsQXJnKTsKICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgICAgfTsKICAgICAgICAgIHNjcmlwdC5zcmMgPSB1cmxBcmc7CiAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgfQogICAgICBnZXQgcnVudGltZUVudigpIHsKICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gIm5vZGUiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gImJyb3dzZXIiOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXQgaXNCcm93c2VyKCkgewogICAgICAgIHJldHVybiAhdGhpcy5pc05vZGU7CiAgICAgIH0KICAgICAgZ2V0IHVzZXJBZ2VudCgpIHsKICAgICAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gInVuZGVmaW5lZCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCBpc05vZGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucnVudGltZUVudiA9PT0gIm5vZGUiOwogICAgICB9CiAgICAgIGdldCBub2RlVmVyc2lvbigpIHsKICAgICAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9uOwogICAgICB9CiAgICAgIGdldCBpc0NJKCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTWFjQXN5bmMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIik7CiAgICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gImRhcndpbiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNXaW5kb3dzQXN5bmMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIik7CiAgICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gIndpbjMyIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc0xpbnV4QXN5bmMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIik7CiAgICAgICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gImxpbnV4IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcHJpbnRzIHRoZSBlbnZpcm9ubWVudCB0byBjb25zb2xlCiAgICAgICAqLwogICAgICBhc3luYyBwcmludEVudigpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJub2RlIHZlcnNpb24gaXMgIiArIHRoaXMubm9kZVZlcnNpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZygicnVubmluZyBvbiBCUk9XU0VSIik7CiAgICAgICAgICBjb25zb2xlLmxvZygiYnJvd3NlciBpcyAiICsgdGhpcy51c2VyQWdlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTAgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTAsIHsKICBTbWFydGVudjogKCkgPT4gU21hcnRlbnYKfSk7CnZhciBpbml0X2Rpc3RfdHMxMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDUuMC4xMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0ZW52X2NsYXNzZXNfc21hcnRlbnYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnBsdWdpbnMuanMKdmFyIGlzb3VuaXF1ZTsKdmFyIGluaXRfc21hcnRzdHJpbmdfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnBsdWdpbnMuanMiKCkgewogICAgaXNvdW5pcXVlID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMoKSwgMSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5jcmVhdGUuanMKdmFyIHNtYXJ0c3RyaW5nX2NyZWF0ZV9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2NyZWF0ZV9leHBvcnRzLCB7CiAgY3JlYXRlQ3J5cHRvUmFuZG9tU3RyaW5nOiAoKSA9PiBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmcsCiAgY3JlYXRlUmFuZG9tU3RyaW5nOiAoKSA9PiBjcmVhdGVSYW5kb21TdHJpbmcKfSk7CnZhciBnZXRSYW5kb21JbnQsIGN1c3RvbVJhbmRvbWF0aWMsIGNyZWF0ZVJhbmRvbVN0cmluZywgY3JlYXRlQ3J5cHRvUmFuZG9tU3RyaW5nOwp2YXIgaW5pdF9zbWFydHN0cmluZ19jcmVhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5jcmVhdGUuanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zKCk7CiAgICBnZXRSYW5kb21JbnQgPSAobWluMywgbWF4MykgPT4gewogICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICJ1bmRlZmluZWQiICYmIGdsb2JhbFRoaXMuY3J5cHRvICYmIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IG1heDMgLSBtaW4zOwogICAgICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpOwogICAgICAgIGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7CiAgICAgICAgcmV0dXJuIG1pbjMgKyBhcnJheVswXSAlIHJhbmdlMjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heDMgLSBtaW4zKSkgKyBtaW4zOwogICAgICB9CiAgICB9OwogICAgY3VzdG9tUmFuZG9tYXRpYyA9IChwYXR0ZXJuLCBsZW5ndGgsIG9wdGlvbnMpID0+IHsKICAgICAgY29uc3QgY2hhclNldHMgPSB7CiAgICAgICAgIkEiOiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLAogICAgICAgICJhIjogImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKICAgICAgICAiMCI6ICIwMTIzNDU2Nzg5IiwKICAgICAgICAiISI6ICIhQCMkJV4mKigpXystPVtde318OzosLjw+PyIsCiAgICAgICAgIioiOiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhQCMkJV4mKigpXystPVtde318OzosLjw+PyIKICAgICAgfTsKICAgICAgbGV0IGFjdHVhbFBhdHRlcm4gPSBwYXR0ZXJuOwogICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aCA+IHBhdHRlcm4ubGVuZ3RoKSB7CiAgICAgICAgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm4ucmVwZWF0KE1hdGguY2VpbChsZW5ndGggLyBwYXR0ZXJuLmxlbmd0aCkpLnNsaWNlKDAsIGxlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoKSB7CiAgICAgICAgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm4uc2xpY2UoMCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICAgIGZvciAoY29uc3QgY2hhciBvZiBhY3R1YWxQYXR0ZXJuKSB7CiAgICAgICAgaWYgKGNoYXJTZXRzW2NoYXJdKSB7CiAgICAgICAgICBjb25zdCBjaGFyU2V0ID0gY2hhclNldHNbY2hhcl07CiAgICAgICAgICBjb25zdCByYW5kb21JbmRleCA9IGdldFJhbmRvbUludCgwLCBjaGFyU2V0Lmxlbmd0aCk7CiAgICAgICAgICByZXN1bHQgKz0gY2hhclNldFtyYW5kb21JbmRleF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCArPSBjaGFyOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIGNyZWF0ZVJhbmRvbVN0cmluZyA9IChwYXR0ZXJuQXJnLCBsZW5ndGhBcmcsIG9wdGlvbnNBcmcpID0+IHsKICAgICAgcmV0dXJuIGN1c3RvbVJhbmRvbWF0aWMocGF0dGVybkFyZywgbGVuZ3RoQXJnLCBvcHRpb25zQXJnKTsKICAgIH07CiAgICBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmcgPSAoKSA9PiB7CiAgICAgIHJldHVybiBpc291bmlxdWUudW5pKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuZG9ja2VyLmpzCnZhciBzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cywgewogIG1ha2VFbnZPYmplY3Q6ICgpID0+IG1ha2VFbnZPYmplY3QKfSk7CnZhciBtYWtlRW52T2JqZWN0Owp2YXIgaW5pdF9zbWFydHN0cmluZ19kb2NrZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb2NrZXIuanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zKCk7CiAgICBtYWtlRW52T2JqZWN0ID0gZnVuY3Rpb24oZW52QXJyYXlBcmcpIHsKICAgICAgbGV0IHJldHVybk9iamVjdCA9IHt9OwogICAgICBsZXQgcmVnZXhTdHJpbmcgPSAvKC4qKT0oLiopLzsKICAgICAgaWYgKHR5cGVvZiBlbnZBcnJheUFyZyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBmb3IgKGxldCBlbnZLZXkgaW4gZW52QXJyYXlBcmcpIHsKICAgICAgICAgIGxldCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKGVudkFycmF5QXJnW2VudktleV0pOwogICAgICAgICAgcmV0dXJuT2JqZWN0W3JlZ2V4TWF0Y2hlc1sxXV0gPSByZWdleE1hdGNoZXNbMl07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuaW5kZW50LmpzCnZhciBzbWFydHN0cmluZ19pbmRlbnRfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ19pbmRlbnRfZXhwb3J0cywgewogIGluZGVudDogKCkgPT4gaW5kZW50LAogIGluZGVudFdpdGhQcmVmaXg6ICgpID0+IGluZGVudFdpdGhQcmVmaXgsCiAgbm9ybWFsaXplOiAoKSA9PiBub3JtYWxpemUKfSk7CnZhciBzcGxpdFN0cmluZ0F0TGluZUJyZWFrLCBqb2luU3RyaW5nV2l0aExpbmVCcmVha3MsIGNsZWFuU3RyaW5nQXJyYXksIGluZGVudCwgaW5kZW50V2l0aFByZWZpeCwgbm9ybWFsaXplOwp2YXIgaW5pdF9zbWFydHN0cmluZ19pbmRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5pbmRlbnQuanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zKCk7CiAgICBzcGxpdFN0cmluZ0F0TGluZUJyZWFrID0gKHN0cmluZ0FyZykgPT4gewogICAgICBsZXQgcmVzdWx0QXJyYXkgPSBzdHJpbmdBcmcuc3BsaXQoIlxuIik7CiAgICAgIHJldHVybiBjbGVhblN0cmluZ0FycmF5KHJlc3VsdEFycmF5KTsKICAgIH07CiAgICBqb2luU3RyaW5nV2l0aExpbmVCcmVha3MgPSAoc3RyaW5nQXJyYXlBcmcpID0+IHsKICAgICAgbGV0IHJlc3VsdFN0cmluZyA9ICIiOwogICAgICBmb3IgKGxldCBsaW5lIG9mIHN0cmluZ0FycmF5QXJnKSB7CiAgICAgICAgcmVzdWx0U3RyaW5nID0gcmVzdWx0U3RyaW5nICsgbGluZSArICJcbiI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBjbGVhblN0cmluZ0FycmF5ID0gKHN0cmluZ0FycmF5QXJnKSA9PiB7CiAgICAgIGxldCB0ZXN0UmVnZXggPSAvXltcc10qJC87CiAgICAgIGlmICh0ZXN0UmVnZXgudGVzdChzdHJpbmdBcnJheUFyZ1swXSkpIHsKICAgICAgICBzdHJpbmdBcnJheUFyZy5zaGlmdCgpOwogICAgICB9CiAgICAgIGlmICh0ZXN0UmVnZXgudGVzdChzdHJpbmdBcnJheUFyZ1tzdHJpbmdBcnJheUFyZy5sZW5ndGggLSAxXSkpIHsKICAgICAgICBzdHJpbmdBcnJheUFyZy5wb3AoKTsKICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nQXJyYXlBcmc7CiAgICB9OwogICAgaW5kZW50ID0gKHN0cmluZ0FyZywgc3BhY2VBbW91bnQpID0+IHsKICAgICAgbGV0IGxvY2FsU3RyaW5nQXJyYXkgPSBzcGxpdFN0cmluZ0F0TGluZUJyZWFrKHN0cmluZ0FyZyk7CiAgICAgIGZvciAobGV0IHN0cmluZ0FyZzIgb2YgbG9jYWxTdHJpbmdBcnJheSkgewogICAgICAgIHN0cmluZ0FyZzIgPSAiICIucmVwZWF0KHNwYWNlQW1vdW50KSArIHN0cmluZ0FyZzI7CiAgICAgIH0KICAgICAgbGV0IHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhsb2NhbFN0cmluZ0FycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBpbmRlbnRXaXRoUHJlZml4ID0gKHN0cmluZ0FyZywgcHJlZml4QXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRTdHJpbmc7CiAgICAgIGxldCBzdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgbGV0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAobGV0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXkpIHsKICAgICAgICByZXN1bHRBcnJheS5wdXNoKHByZWZpeEFyZyArIHN0cmluZ0l0ZW0pOwogICAgICB9CiAgICAgIHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhyZXN1bHRBcnJheSk7CiAgICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiAgICB9OwogICAgbm9ybWFsaXplID0gKHN0cmluZ0FyZykgPT4gewogICAgICBsZXQgcmVzdWx0U3RyaW5nOwogICAgICBsZXQgc3BsaXRTdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgbGV0IG1pbkNvbW1vbkxlZnRPZmZzZXQ7CiAgICAgIGNvbnN0IGRlSW5kZW50UmVnZXggPSAvXihccyopLzsKICAgICAgY29uc3QgZW1wdHlMaW5lUmVnZXggPSAvXihccyopJC87CiAgICAgIGZvciAobGV0IHN0cmluZ0l0ZW0gb2Ygc3BsaXRTdHJpbmdBcnJheSkgewogICAgICAgIGxldCBvZmZzZXRTdHJpbmcgPSBkZUluZGVudFJlZ2V4LmV4ZWMoc3RyaW5nSXRlbSlbMV07CiAgICAgICAgaWYgKCh0eXBlb2YgbWluQ29tbW9uTGVmdE9mZnNldCA9PT0gInVuZGVmaW5lZCIgfHwgb2Zmc2V0U3RyaW5nLmxlbmd0aCA8IG1pbkNvbW1vbkxlZnRPZmZzZXQpICYmICFlbXB0eUxpbmVSZWdleC50ZXN0KHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICBtaW5Db21tb25MZWZ0T2Zmc2V0ID0gb2Zmc2V0U3RyaW5nLmxlbmd0aDsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IHJlc3VsdFNwbGl0U3RyaW5nQXJyYXkgPSBbXTsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzcGxpdFN0cmluZ0FycmF5KSB7CiAgICAgICAgcmVzdWx0U3BsaXRTdHJpbmdBcnJheS5wdXNoKHN0cmluZ0l0ZW0uc3Vic3RyKG1pbkNvbW1vbkxlZnRPZmZzZXQpKTsKICAgICAgfQogICAgICByZXN1bHRTdHJpbmcgPSBqb2luU3RyaW5nV2l0aExpbmVCcmVha3MocmVzdWx0U3BsaXRTdHJpbmdBcnJheSk7CiAgICAgIHJldHVybiByZXN1bHRTdHJpbmc7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcubm9ybWFsaXplLmpzCnZhciBzbWFydHN0cmluZ19ub3JtYWxpemVfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ19ub3JtYWxpemVfZXhwb3J0cywgewogIHJlcGxhY2VBbGw6ICgpID0+IHJlcGxhY2VBbGwsCiAgc3RhbmRhcmQ6ICgpID0+IHN0YW5kYXJkCn0pOwp2YXIgcmVwbGFjZUFsbCwgc3RyaXBJbmRlbnQsIHN0YW5kYXJkOwp2YXIgaW5pdF9zbWFydHN0cmluZ19ub3JtYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5ub3JtYWxpemUuanMiKCkgewogICAgcmVwbGFjZUFsbCA9IChzdHJpbmdBcmcsIHNlYXJjaFBhdHRlcm4sIHJlcGxhY2VtZW50U3RyaW5nKSA9PiB7CiAgICAgIHJldHVybiBzdHJpbmdBcmcucmVwbGFjZShuZXcgUmVnRXhwKHNlYXJjaFBhdHRlcm4sICJnIiksIHJlcGxhY2VtZW50U3RyaW5nKTsKICAgIH07CiAgICBzdHJpcEluZGVudCA9IChzdHIpID0+IHsKICAgICAgY29uc3QgbGluZXMgPSBzdHIuc3BsaXQoIlxuIik7CiAgICAgIGxldCBtaW5JbmRlbnQgPSBJbmZpbml0eTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgICAgaWYgKGxpbmUudHJpbSgpLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IG1hdGNoMiA9IGxpbmUubWF0Y2goL14oXHMqKS8pOwogICAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgICBtaW5JbmRlbnQgPSBNYXRoLm1pbihtaW5JbmRlbnQsIG1hdGNoMlsxXS5sZW5ndGgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobWluSW5kZW50ID09PSBJbmZpbml0eSB8fCBtaW5JbmRlbnQgPT09IDApIHsKICAgICAgICByZXR1cm4gc3RyOwogICAgICB9CiAgICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+IHsKICAgICAgICBpZiAobGluZS5sZW5ndGggPj0gbWluSW5kZW50KSB7CiAgICAgICAgICByZXR1cm4gbGluZS5zbGljZShtaW5JbmRlbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGluZTsKICAgICAgfSkuam9pbigiXG4iKTsKICAgIH07CiAgICBzdGFuZGFyZCA9IChzdHJpbmdBcmcsIG9wdGlvbnMpID0+IHsKICAgICAgbGV0IHJlc3VsdCA9IHN0cmluZ0FyZzsKICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBJbmRlbnQpIHsKICAgICAgICByZXN1bHQgPSBzdHJpcEluZGVudChyZXN1bHQpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLm5vcm1hbGl6ZU5ld2xpbmUpIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXHJcbi9nLCAiXG4iKTsKICAgICAgfQogICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5yZXBsYWNlVGFicykgewogICAgICAgIHJlc3VsdCA9IHJlcGxhY2VBbGwocmVzdWx0LCAiCS8iLCAiICIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnN0cmlwTGVhZGluZ1RyYWlsaW5nRW1wdHlMaW5lcykgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eXHMqW1xyXG5dL2dtLCAiIikucmVwbGFjZSgvXHMqW1xyXG5dJC9nbSwgIiIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnN0cmlwQWxsRW1wdHlMaW5lcykgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eXHMqW1xyXG5dL2dtLCAiIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5iYXNlNjQuanMKdmFyIHVuaXZlcnNhbEJhc2U2NCwgQmFzZTY0LCBiYXNlNjQ7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcyIoKSB7CiAgICB1bml2ZXJzYWxCYXNlNjQgPSB7CiAgICAgIGVuY29kZTogKHN0cikgPT4gewogICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgInV0ZjgiKS50b1N0cmluZygiYmFzZTY0Iik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnRvYSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IHV0ZjhCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpOwogICAgICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gQXJyYXkuZnJvbSh1dGY4Qnl0ZXMsIChieXRlKSA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpKS5qb2luKCIiKTsKICAgICAgICAgIHJldHVybiBidG9hKGJpbmFyeVN0cmluZyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGNoYXJzID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwogICAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyKTsKICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgICAgIGxldCBpMTEgPSAwOwogICAgICAgICAgd2hpbGUgKGkxMSA8IGJ5dGVzLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBhNSA9IGJ5dGVzW2kxMSsrXTsKICAgICAgICAgICAgY29uc3QgYjUgPSBpMTEgPCBieXRlcy5sZW5ndGggPyBieXRlc1tpMTErK10gOiAwOwogICAgICAgICAgICBjb25zdCBjMTEgPSBpMTEgPCBieXRlcy5sZW5ndGggPyBieXRlc1tpMTErK10gOiAwOwogICAgICAgICAgICBjb25zdCBiaXRtYXAgPSBhNSA8PCAxNiB8IGI1IDw8IDggfCBjMTE7CiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoYml0bWFwID4+IDE4ICYgNjMpOwogICAgICAgICAgICByZXN1bHQgKz0gY2hhcnMuY2hhckF0KGJpdG1hcCA+PiAxMiAmIDYzKTsKICAgICAgICAgICAgcmVzdWx0ICs9IGkxMSAtIDIgPCBieXRlcy5sZW5ndGggPyBjaGFycy5jaGFyQXQoYml0bWFwID4+IDYgJiA2MykgOiAiPSI7CiAgICAgICAgICAgIHJlc3VsdCArPSBpMTEgLSAxIDwgYnl0ZXMubGVuZ3RoID8gY2hhcnMuY2hhckF0KGJpdG1hcCAmIDYzKSA6ICI9IjsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWNvZGU6IChzdHIpID0+IHsKICAgICAgICBjb25zdCBiYXNlNjRTdHJpbmcgPSBzdHIucmVwbGFjZSgvLS9nLCAiKyIpLnJlcGxhY2UoL18vZywgIi8iKS5wYWRFbmQoc3RyLmxlbmd0aCArICg0IC0gc3RyLmxlbmd0aCAlIDQpICUgNCwgIj0iKTsKICAgICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjRTdHJpbmcsICJiYXNlNjQiKS50b1N0cmluZygidXRmOCIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF0b2IgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NFN0cmluZyk7CiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpOwogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgYnl0ZXNbaTExXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGJ5dGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgICAgICBsZXQgYnl0ZXMgPSBbXTsKICAgICAgICAgIGxldCBpMTEgPSAwOwogICAgICAgICAgd2hpbGUgKGkxMSA8IGJhc2U2NFN0cmluZy5sZW5ndGgpIHsKICAgICAgICAgICAgY29uc3QgZW5jb2RlZDEgPSBjaGFycy5pbmRleE9mKGJhc2U2NFN0cmluZy5jaGFyQXQoaTExKyspKTsKICAgICAgICAgICAgY29uc3QgZW5jb2RlZDIgPSBjaGFycy5pbmRleE9mKGJhc2U2NFN0cmluZy5jaGFyQXQoaTExKyspKTsKICAgICAgICAgICAgY29uc3QgZW5jb2RlZDMgPSBjaGFycy5pbmRleE9mKGJhc2U2NFN0cmluZy5jaGFyQXQoaTExKyspKTsKICAgICAgICAgICAgY29uc3QgZW5jb2RlZDQgPSBjaGFycy5pbmRleE9mKGJhc2U2NFN0cmluZy5jaGFyQXQoaTExKyspKTsKICAgICAgICAgICAgY29uc3QgYml0bWFwID0gZW5jb2RlZDEgPDwgMTggfCBlbmNvZGVkMiA8PCAxMiB8IGVuY29kZWQzIDw8IDYgfCBlbmNvZGVkNDsKICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgPj4gMTYgJiAyNTUpOwogICAgICAgICAgICBpZiAoZW5jb2RlZDMgIT09IDY0KQogICAgICAgICAgICAgIGJ5dGVzLnB1c2goYml0bWFwID4+IDggJiAyNTUpOwogICAgICAgICAgICBpZiAoZW5jb2RlZDQgIT09IDY0KQogICAgICAgICAgICAgIGJ5dGVzLnB1c2goYml0bWFwICYgMjU1KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBCYXNlNjQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGlucHV0U3RyaW5nQXJnLCB0eXBlQXJnKSB7CiAgICAgICAgc3dpdGNoICh0eXBlQXJnKSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGlucHV0U3RyaW5nQXJnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJhc2U2NCI6CiAgICAgICAgICAgIHRoaXMucmVmU3RyaW5nID0gYmFzZTY0LmRlY29kZShpbnB1dFN0cmluZ0FyZyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmFzZTY0dXJpIjoKICAgICAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRoZSBzaW1wbGUgc3RyaW5nICh1bmVuY29kZWQpCiAgICAgICAqLwogICAgICBnZXQgc2ltcGxlU3RyaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlZlN0cmluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIGJhc2U2NCBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZwogICAgICAgKi8KICAgICAgZ2V0IGJhc2U2NFN0cmluZygpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LmVuY29kZSh0aGlzLnJlZlN0cmluZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRoZSBiYXNlNjR1cmkgZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcKICAgICAgICovCiAgICAgIGdldCBiYXNlNjRVcmlTdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NC5lbmNvZGVVcmkodGhpcy5yZWZTdHJpbmcpOwogICAgICB9CiAgICB9OwogICAgYmFzZTY0ID0gewogICAgICAvKioKICAgICAgICogZW5jb2RlcyB0aGUgc3RyaW5nCiAgICAgICAqLwogICAgICBlbmNvZGU6IChzdHJpbmdBcmcpID0+IHsKICAgICAgICByZXR1cm4gdW5pdmVyc2FsQmFzZTY0LmVuY29kZShzdHJpbmdBcmcpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogZW5jb2RlcyBhIHN0cmluZ0FyZyB0byBiYXNlNjQgdXJpIHN0eWxlCiAgICAgICAqLwogICAgICBlbmNvZGVVcmk6IChzdHJpbmdBcmcpID0+IHsKICAgICAgICByZXR1cm4gdW5pdmVyc2FsQmFzZTY0LmVuY29kZShzdHJpbmdBcmcpLnJlcGxhY2UoL1wrL2csICItIikucmVwbGFjZSgvXC8vZywgIl8iKS5yZXBsYWNlKC89L2csICIiKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIGRlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcKICAgICAgICovCiAgICAgIGRlY29kZTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZGVjb2RlKHN0cmluZ0FyZyk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gc3RyaW5nQXJnCiAgICAgICAqIGNoZWNrcyB3ZXRoZXIgdGhlIHN0cmluZyBpcyBiYXNlNjQgZW5jb2RlZAogICAgICAgKi8KICAgICAgaXNCYXNlNjQ6IChzdHJpbmdBcmcpID0+IHsKICAgICAgICBjb25zdCByZWdleCA9IC9eKFtBLVphLXowLTkrL117NH0pKihbQS1aYS16MC05Ky9dezN9PXxbQS1aYS16MC05Ky9dezJ9PT0pPyQvOwogICAgICAgIHJldHVybiByZWdleC50ZXN0KHN0cmluZ0FyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy50eXBlLmpzCnZhciBzbWFydHN0cmluZ190eXBlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRzdHJpbmdfdHlwZV9leHBvcnRzLCB7CiAgaXNCYXNlNjQ6ICgpID0+IGlzQmFzZTY0LAogIGlzVXRmODogKCkgPT4gaXNVdGY4Cn0pOwp2YXIgaXNVdGY4LCBpc0Jhc2U2NDsKdmFyIGluaXRfc21hcnRzdHJpbmdfdHlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnR5cGUuanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCgpOwogICAgaXNVdGY4ID0gKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBlbmNvZGVyMiA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjb25zdCBieXRlcyA9IGVuY29kZXIyLmVuY29kZShzdHJpbmdBcmcpOwogICAgICBsZXQgaTExID0gMDsKICAgICAgd2hpbGUgKGkxMSA8IGJ5dGVzLmxlbmd0aCkgewogICAgICAgIGlmICgKICAgICAgICAgIC8vIEFTQ0lJCiAgICAgICAgICBieXRlc1tpMTFdID09PSA5IHx8IGJ5dGVzW2kxMV0gPT09IDEwIHx8IGJ5dGVzW2kxMV0gPT09IDEzIHx8IDMyIDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAxMjYKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIG5vbi1vdmVybG9uZyAyLWJ5dGUKICAgICAgICAgIDE5NCA8PSBieXRlc1tpMTFdICYmIGJ5dGVzW2kxMV0gPD0gMjIzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAyOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIGV4Y2x1ZGluZyBvdmVybG9uZ3MKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDIyNCAmJiAxNjAgPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgfHwgLy8gc3RyYWlnaHQgMy1ieXRlCiAgICAgICAgICAoMjI1IDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyMzYgfHwgYnl0ZXNbaTExXSA9PT0gMjM4IHx8IGJ5dGVzW2kxMV0gPT09IDIzOSkgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxIHx8IC8vIGV4Y2x1ZGluZyBzdXJyb2dhdGVzCiAgICAgICAgICBieXRlc1tpMTFdID09PSAyMzcgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE1OSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxCiAgICAgICAgKSB7CiAgICAgICAgICBpMTEgKz0gMzsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoCiAgICAgICAgICAvLyBwbGFuZXMgMS0zCiAgICAgICAgICBieXRlc1tpMTFdID09PSAyNDAgJiYgMTQ0IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEgfHwgLy8gcGxhbmVzIDQtMTUKICAgICAgICAgIDI0MSA8PSBieXRlc1tpMTFdICYmIGJ5dGVzW2kxMV0gPD0gMjQzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDJdICYmIGJ5dGVzW2kxMSArIDJdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgM10gJiYgYnl0ZXNbaTExICsgM10gPD0gMTkxIHx8IC8vIHBsYW5lIDE2CiAgICAgICAgICBieXRlc1tpMTFdID09PSAyNDQgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE0MyAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSA0OwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICBpc0Jhc2U2NCA9IChzdHJpbmdBcmcpID0+IHsKICAgICAgY29uc3Qgbm90QmFzZTY0ID0gL1teQS1aMC05K1wvPV0vaTsKICAgICAgY29uc3QgbGVuID0gc3RyaW5nQXJnLmxlbmd0aDsKICAgICAgaWYgKCFsZW4gfHwgbGVuICUgNCAhPT0gMCB8fCBub3RCYXNlNjQudGVzdChzdHJpbmdBcmcpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0UGFkZGluZ0NoYXIgPSBzdHJpbmdBcmcuaW5kZXhPZigiPSIpOwogICAgICByZXR1cm4gZmlyc3RQYWRkaW5nQ2hhciA9PT0gLTEgfHwgZmlyc3RQYWRkaW5nQ2hhciA9PT0gbGVuIC0gMSB8fCBmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAyICYmIHN0cmluZ0FyZ1tsZW4gLSAxXSA9PT0gIj0iOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcwp2YXIgRG9tYWluOwp2YXIgaW5pdF9zbWFydHN0cmluZ19kb21haW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb21haW4uanMiKCkgewogICAgRG9tYWluID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihkb21haW5TdHJpbmdBcmcpIHsKICAgICAgICB0aGlzLnByb3RvY29sID0gdGhpcy5fcHJvdG9jb2xSZWdleChkb21haW5TdHJpbmdBcmcpOwogICAgICAgIGlmICghdGhpcy5wcm90b2NvbCkgewogICAgICAgICAgZG9tYWluU3RyaW5nQXJnID0gYGh0dHBzOi8vJHtkb21haW5TdHJpbmdBcmd9YDsKICAgICAgICB9CiAgICAgICAgdGhpcy5ub2RlUGFyc2VkVXJsID0gbmV3IFVSTChkb21haW5TdHJpbmdBcmcpOwogICAgICAgIHRoaXMucG9ydCA9IHRoaXMubm9kZVBhcnNlZFVybC5wb3J0OwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHRoaXMuX2RvbWFpblJlZ2V4KGRvbWFpblN0cmluZ0FyZy5yZXBsYWNlKHRoaXMubm9kZVBhcnNlZFVybC5wYXRobmFtZSwgIiIpKTsKICAgICAgICB0aGlzLmZ1bGxOYW1lID0gIiI7CiAgICAgICAgZm9yIChsZXQgaTExID0gMTsgaTExIDw9IDU7IGkxMSsrKSB7CiAgICAgICAgICBpZiAocmVnZXhNYXRjaGVzW2kxMSAtIDFdKSB7CiAgICAgICAgICAgIGNvbnN0IGxvY2FsTWF0Y2ggPSByZWdleE1hdGNoZXNbaTExIC0gMV07CiAgICAgICAgICAgIHRoaXNbImxldmVsIiArIGkxMS50b1N0cmluZygpXSA9IGxvY2FsTWF0Y2g7CiAgICAgICAgICAgIGlmICh0aGlzLmZ1bGxOYW1lID09PSAiIikgewogICAgICAgICAgICAgIHRoaXMuZnVsbE5hbWUgPSBsb2NhbE1hdGNoOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuZnVsbE5hbWUgPSBsb2NhbE1hdGNoICsgIi4iICsgdGhpcy5mdWxsTmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpc1sibGV2ZWwiICsgaTExLnRvU3RyaW5nKCldID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnpvbmVOYW1lID0gdGhpcy5sZXZlbDIgKyAiLiIgKyB0aGlzLmxldmVsMTsKICAgICAgICB0aGlzLnRvcExldmVsID0gdGhpcy5sZXZlbDE7CiAgICAgICAgdGhpcy5kb21haW5OYW1lID0gdGhpcy5sZXZlbDI7CiAgICAgICAgdGhpcy5zdWJEb21haW4gPSB0aGlzLmxldmVsMzsKICAgICAgfQogICAgICAvLyBoZWxwZXIgZnVuY3Rpb25zCiAgICAgIC8qKiAqLwogICAgICBfZG9tYWluUmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvKFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0kLzsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgICAgcmVnZXhNYXRjaGVzLnJldmVyc2UoKTsKICAgICAgICByZWdleE1hdGNoZXMucG9wKCk7CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzRmlsdGVyZWQgPSByZWdleE1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uKHN0cmluZ0FyZzIpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmdBcmcyICE9PSAiIjsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzRmlsdGVyZWQ7CiAgICAgIH0KICAgICAgX3Byb3RvY29sUmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvXihbYS16QS1aMC05XSopOlwvXC8vOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICBpZiAocmVnZXhNYXRjaGVzKSB7CiAgICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgICBfcG9ydFJlZ2V4KHN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gL14oW2EtekEtWjAtOV0qKTpcL1wvLzsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgICAgaWYgKHJlZ2V4TWF0Y2hlcykgewogICAgICAgICAgcmV0dXJuIHJlZ2V4TWF0Y2hlc1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5naXQuanMKdmFyIEdpdFJlcG8sIGdpdFJlZ2V4LCBnaXRMaW5rOwp2YXIgaW5pdF9zbWFydHN0cmluZ19naXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5naXQuanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zKCk7CiAgICBHaXRSZXBvID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihzdHJpbmdBcmcsIHRva2VuQXJnKSB7CiAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IGdpdFJlZ2V4KHN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5ob3N0ID0gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIHRoaXMudXNlciA9IHJlZ2V4TWF0Y2hlc1syXTsKICAgICAgICB0aGlzLnJlcG8gPSByZWdleE1hdGNoZXNbM107CiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IHRva2VuQXJnOwogICAgICAgIHRoaXMuc3NoVXJsID0gZ2l0TGluayh0aGlzLmhvc3QsIHRoaXMudXNlciwgdGhpcy5yZXBvLCB0aGlzLmFjY2Vzc1Rva2VuLCAic3NoIik7CiAgICAgICAgdGhpcy5odHRwc1VybCA9IGdpdExpbmsodGhpcy5ob3N0LCB0aGlzLnVzZXIsIHRoaXMucmVwbywgdGhpcy5hY2Nlc3NUb2tlbiwgImh0dHBzIik7CiAgICAgIH0KICAgIH07CiAgICBnaXRSZWdleCA9IGZ1bmN0aW9uKHN0cmluZ0FyZykgewogICAgICBjb25zdCByZWdleFN0cmluZyA9IC8oW2EtekEtWjAtOVwtX1wuXSopKD86XC98XDopKFthLXpBLVowLTlcLV9cLl0qKSg/OlwvKShbYS16QS1aMC05XC1fXC5dKikoPzpcLmdpdCkvOwogICAgICBsZXQgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpOwogICAgICByZXR1cm4gcmVnZXhNYXRjaGVzOwogICAgfTsKICAgIGdpdExpbmsgPSBmdW5jdGlvbihob3N0QXJnLCB1c2VyQXJnLCByZXBvQXJnLCB0b2tlbkFyZyA9ICIiLCBsaW5rVHlwZUFyZykgewogICAgICBsZXQgcmV0dXJuU3RyaW5nOwogICAgICBpZiAodG9rZW5BcmcgIT09ICIiKSB7CiAgICAgICAgdG9rZW5BcmcgPSB0b2tlbkFyZyArICJAIjsKICAgICAgfQogICAgICBzd2l0Y2ggKGxpbmtUeXBlQXJnKSB7CiAgICAgICAgY2FzZSAiaHR0cHMiOgogICAgICAgICAgcmV0dXJuU3RyaW5nID0gImh0dHBzOi8vIiArIHRva2VuQXJnICsgaG9zdEFyZyArICIvIiArIHVzZXJBcmcgKyAiLyIgKyByZXBvQXJnICsgIi5naXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3NoIjoKICAgICAgICAgIHJldHVyblN0cmluZyA9ICJnaXRAIiArIGhvc3RBcmcgKyAiOiIgKyB1c2VyQXJnICsgIi8iICsgcmVwb0FyZyArICIuZ2l0IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJMaW5rIFR5cGUgIiArIGxpbmtUeXBlQXJnICsgIiBub3Qga25vd24iKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czExID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czExLCB7CiAgQmFzZTY0OiAoKSA9PiBCYXNlNjQsCiAgRG9tYWluOiAoKSA9PiBEb21haW4sCiAgR2l0UmVwbzogKCkgPT4gR2l0UmVwbywKICBiYXNlNjQ6ICgpID0+IGJhc2U2NCwKICBjcmVhdGU6ICgpID0+IHNtYXJ0c3RyaW5nX2NyZWF0ZV9leHBvcnRzLAogIGRvY2tlcjogKCkgPT4gc21hcnRzdHJpbmdfZG9ja2VyX2V4cG9ydHMsCiAgaW5kZW50OiAoKSA9PiBzbWFydHN0cmluZ19pbmRlbnRfZXhwb3J0cywKICBub3JtYWxpemU6ICgpID0+IHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzLAogIHR5cGU6ICgpID0+IHNtYXJ0c3RyaW5nX3R5cGVfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czExID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHN0cmluZ19jcmVhdGUoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZG9ja2VyKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2luZGVudCgpOwogICAgaW5pdF9zbWFydHN0cmluZ19ub3JtYWxpemUoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfdHlwZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ19iYXNlNjQoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZG9tYWluKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2dpdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLmNsb25lZGVlcEA0LjUuMC9ub2RlX21vZHVsZXMvbG9kYXNoLmNsb25lZGVlcC9pbmRleC5qcwp2YXIgcmVxdWlyZV9sb2Rhc2ggPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaC5jbG9uZWRlZXBANC41LjAvbm9kZV9tb2R1bGVzL2xvZGFzaC5jbG9uZWRlZXAvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgdmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7CiAgICB2YXIgSEFTSF9VTkRFRklORUQgPSAiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7CiAgICB2YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7CiAgICB2YXIgYXJnc1RhZyA9ICJbb2JqZWN0IEFyZ3VtZW50c10iLCBhcnJheVRhZyA9ICJbb2JqZWN0IEFycmF5XSIsIGJvb2xUYWcgPSAiW29iamVjdCBCb29sZWFuXSIsIGRhdGVUYWcgPSAiW29iamVjdCBEYXRlXSIsIGVycm9yVGFnID0gIltvYmplY3QgRXJyb3JdIiwgZnVuY1RhZyA9ICJbb2JqZWN0IEZ1bmN0aW9uXSIsIGdlblRhZyA9ICJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsIG1hcFRhZyA9ICJbb2JqZWN0IE1hcF0iLCBudW1iZXJUYWcgPSAiW29iamVjdCBOdW1iZXJdIiwgb2JqZWN0VGFnID0gIltvYmplY3QgT2JqZWN0XSIsIHByb21pc2VUYWcgPSAiW29iamVjdCBQcm9taXNlXSIsIHJlZ2V4cFRhZyA9ICJbb2JqZWN0IFJlZ0V4cF0iLCBzZXRUYWcgPSAiW29iamVjdCBTZXRdIiwgc3RyaW5nVGFnID0gIltvYmplY3QgU3RyaW5nXSIsIHN5bWJvbFRhZyA9ICJbb2JqZWN0IFN5bWJvbF0iLCB3ZWFrTWFwVGFnID0gIltvYmplY3QgV2Vha01hcF0iOwogICAgdmFyIGFycmF5QnVmZmVyVGFnID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIiwgZGF0YVZpZXdUYWcgPSAiW29iamVjdCBEYXRhVmlld10iLCBmbG9hdDMyVGFnID0gIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIGZsb2F0NjRUYWcgPSAiW29iamVjdCBGbG9hdDY0QXJyYXldIiwgaW50OFRhZyA9ICJbb2JqZWN0IEludDhBcnJheV0iLCBpbnQxNlRhZyA9ICJbb2JqZWN0IEludDE2QXJyYXldIiwgaW50MzJUYWcgPSAiW29iamVjdCBJbnQzMkFycmF5XSIsIHVpbnQ4VGFnID0gIltvYmplY3QgVWludDhBcnJheV0iLCB1aW50OENsYW1wZWRUYWcgPSAiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCB1aW50MTZUYWcgPSAiW29iamVjdCBVaW50MTZBcnJheV0iLCB1aW50MzJUYWcgPSAiW29iamVjdCBVaW50MzJBcnJheV0iOwogICAgdmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxeJC4qKz8oKVtcXXt9fF0vZzsKICAgIHZhciByZUZsYWdzID0gL1x3KiQvOwogICAgdmFyIHJlSXNIb3N0Q3RvciA9IC9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvOwogICAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXGQqKSQvOwogICAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTsKICAgIGNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPSBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPSBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPSBjbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPSBjbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7CiAgICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPSBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7CiAgICB2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gIm9iamVjdCIgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7CiAgICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAib2JqZWN0IiAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjsKICAgIHZhciByb290NiA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKICAgIHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0czsKICAgIHZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CiAgICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0czsKICAgIGZ1bmN0aW9uIGFkZE1hcEVudHJ5KG1hcDcsIHBhaXIpIHsKICAgICAgbWFwNy5zZXQocGFpclswXSwgcGFpclsxXSk7CiAgICAgIHJldHVybiBtYXA3OwogICAgfQogICAgZnVuY3Rpb24gYWRkU2V0RW50cnkoc2V0MywgdmFsdWUyKSB7CiAgICAgIHNldDMuYWRkKHZhbHVlMik7CiAgICAgIHJldHVybiBzZXQzOwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4Ml0sIGluZGV4MiwgYXJyYXkpID09PSBmYWxzZSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCwgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBhcnJheVtvZmZzZXQgKyBpbmRleDJdID0gdmFsdWVzW2luZGV4Ml07CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkgewogICAgICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbKytpbmRleDJdOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4Ml0sIGluZGV4MiwgYXJyYXkpOwogICAgICB9CiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VUaW1lcyhuMTIsIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgcmVzdWx0ID0gQXJyYXkobjEyKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbjEyKSB7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBpdGVyYXRlZShpbmRleDIpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleTIpIHsKICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdm9pZCAwIDogb2JqZWN0W2tleTJdOwogICAgfQogICAgZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlMikgewogICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CiAgICAgIGlmICh2YWx1ZTIgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUyLnRvU3RyaW5nICE9ICJmdW5jdGlvbiIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmVzdWx0ID0gISEodmFsdWUyICsgIiIpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gbWFwVG9BcnJheShtYXA3KSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgcmVzdWx0ID0gQXJyYXkobWFwNy5zaXplKTsKICAgICAgbWFwNy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMiwga2V5MikgewogICAgICAgIHJlc3VsdFsrK2luZGV4Ml0gPSBba2V5MiwgdmFsdWUyXTsKICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybTIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykgewogICAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybTIoYXJnKSk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBzZXRUb0FycmF5KHNldDMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShzZXQzLnNpemUpOwogICAgICBzZXQzLmZvckVhY2goZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmVzdWx0WysraW5kZXgyXSA9IHZhbHVlMjsKICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLCBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CiAgICB2YXIgY29yZUpzRGF0YSA9IHJvb3Q2WyJfX2NvcmUtanNfc2hhcmVkX18iXTsKICAgIHZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkgewogICAgICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgIiIpOwogICAgICByZXR1cm4gdWlkID8gIlN5bWJvbChzcmMpXzEuIiArIHVpZCA6ICIiOwogICAgfSkoKTsKICAgIHZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7CiAgICB2YXIgaGFzT3duUHJvcGVydHkzID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7CiAgICB2YXIgb2JqZWN0VG9TdHJpbmcyID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7CiAgICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgKICAgICAgIl4iICsgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkzKS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCAiJDEuKj8iKSArICIkIgogICAgKTsKICAgIHZhciBCdWZmZXIyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3Q2LkJ1ZmZlciA6IHZvaWQgMCwgU3ltYm9sMiA9IHJvb3Q2LlN5bWJvbCwgVWludDhBcnJheTIgPSByb290Ni5VaW50OEFycmF5LCBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSwgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSwgc3BsaWNlMiA9IGFycmF5UHJvdG8uc3BsaWNlOwogICAgdmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLCBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlcjIgPyBCdWZmZXIyLmlzQnVmZmVyIDogdm9pZCAwLCBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTsKICAgIHZhciBEYXRhVmlldzIgPSBnZXROYXRpdmUocm9vdDYsICJEYXRhVmlldyIpLCBNYXAyID0gZ2V0TmF0aXZlKHJvb3Q2LCAiTWFwIiksIFByb21pc2UyID0gZ2V0TmF0aXZlKHJvb3Q2LCAiUHJvbWlzZSIpLCBTZXQyID0gZ2V0TmF0aXZlKHJvb3Q2LCAiU2V0IiksIFdlYWtNYXAyID0gZ2V0TmF0aXZlKHJvb3Q2LCAiV2Vha01hcCIpLCBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAiY3JlYXRlIik7CiAgICB2YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcyKSwgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcDIpLCBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UyKSwgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldDIpLCB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXAyKTsKICAgIHZhciBzeW1ib2xQcm90byA9IFN5bWJvbDIgPyBTeW1ib2wyLnByb3RvdHlwZSA6IHZvaWQgMCwgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHZvaWQgMDsKICAgIGZ1bmN0aW9uIEhhc2goZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLmhhcyhrZXkyKSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXkyXTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5MikgewogICAgICB2YXIgZGF0YTExID0gdGhpcy5fX2RhdGFfXzsKICAgICAgaWYgKG5hdGl2ZUNyZWF0ZSkgewogICAgICAgIHZhciByZXN1bHQgPSBkYXRhMTFba2V5Ml07CiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB2b2lkIDAgOiByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5My5jYWxsKGRhdGExMSwga2V5MikgPyBkYXRhMTFba2V5Ml0gOiB2b2lkIDA7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoSGFzKGtleTIpIHsKICAgICAgdmFyIGRhdGExMSA9IHRoaXMuX19kYXRhX187CiAgICAgIHJldHVybiBuYXRpdmVDcmVhdGUgPyBkYXRhMTFba2V5Ml0gIT09IHZvaWQgMCA6IGhhc093blByb3BlcnR5My5jYWxsKGRhdGExMSwga2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YTExID0gdGhpcy5fX2RhdGFfXzsKICAgICAgZGF0YTExW2tleTJdID0gbmF0aXZlQ3JlYXRlICYmIHZhbHVlMiA9PT0gdm9pZCAwID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTI7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7CiAgICBIYXNoLnByb3RvdHlwZVsiZGVsZXRlIl0gPSBoYXNoRGVsZXRlOwogICAgSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDsKICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7CiAgICBIYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0OwogICAgZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwOwogICAgICB0aGlzLmNsZWFyKCk7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXgyXTsKICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleTIpIHsKICAgICAgdmFyIGRhdGExMSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhMTEsIGtleTIpOwogICAgICBpZiAoaW5kZXgyIDwgMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YTExLmxlbmd0aCAtIDE7CiAgICAgIGlmIChpbmRleDIgPT0gbGFzdEluZGV4KSB7CiAgICAgICAgZGF0YTExLnBvcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwbGljZTIuY2FsbChkYXRhMTEsIGluZGV4MiwgMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5MikgewogICAgICB2YXIgZGF0YTExID0gdGhpcy5fX2RhdGFfXywgaW5kZXgyID0gYXNzb2NJbmRleE9mKGRhdGExMSwga2V5Mik7CiAgICAgIHJldHVybiBpbmRleDIgPCAwID8gdm9pZCAwIDogZGF0YTExW2luZGV4Ml1bMV07CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5MikgewogICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleTIpID4gLTE7CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHZhciBkYXRhMTEgPSB0aGlzLl9fZGF0YV9fLCBpbmRleDIgPSBhc3NvY0luZGV4T2YoZGF0YTExLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICBkYXRhMTEucHVzaChba2V5MiwgdmFsdWUyXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YTExW2luZGV4Ml1bMV0gPSB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWyJkZWxldGUiXSA9IGxpc3RDYWNoZURlbGV0ZTsKICAgIExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0OwogICAgTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDsKICAgIGZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwOwogICAgICB0aGlzLmNsZWFyKCk7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXgyXTsKICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gewogICAgICAgICJoYXNoIjogbmV3IEhhc2goKSwKICAgICAgICAibWFwIjogbmV3IChNYXAyIHx8IExpc3RDYWNoZSkoKSwKICAgICAgICAic3RyaW5nIjogbmV3IEhhc2goKQogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5MikgewogICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKVsiZGVsZXRlIl0oa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkyKSB7CiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleTIpLmdldChrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5MikuaGFzKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5MiwgdmFsdWUyKSB7CiAgICAgIGdldE1hcERhdGEodGhpcywga2V5Mikuc2V0KGtleTIsIHZhbHVlMik7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjsKICAgIE1hcENhY2hlLnByb3RvdHlwZVsiZGVsZXRlIl0gPSBtYXBDYWNoZURlbGV0ZTsKICAgIE1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDsKICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhczsKICAgIE1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDsKICAgIGZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZSgpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5fX2RhdGFfX1siZGVsZXRlIl0oa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0dldChrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHZhciBjYWNoZSA9IHRoaXMuX19kYXRhX187CiAgICAgIGlmIChjYWNoZSBpbnN0YW5jZW9mIExpc3RDYWNoZSkgewogICAgICAgIHZhciBwYWlyczIgPSBjYWNoZS5fX2RhdGFfXzsKICAgICAgICBpZiAoIU1hcDIgfHwgcGFpcnMyLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSB7CiAgICAgICAgICBwYWlyczIucHVzaChba2V5MiwgdmFsdWUyXSk7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgY2FjaGUgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzMik7CiAgICAgIH0KICAgICAgY2FjaGUuc2V0KGtleTIsIHZhbHVlMik7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjsKICAgIFN0YWNrLnByb3RvdHlwZVsiZGVsZXRlIl0gPSBzdGFja0RlbGV0ZTsKICAgIFN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDsKICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhczsKICAgIFN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDsKICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUyLCBpbmhlcml0ZWQpIHsKICAgICAgdmFyIHJlc3VsdCA9IGlzQXJyYXk0KHZhbHVlMikgfHwgaXNBcmd1bWVudHModmFsdWUyKSA/IGJhc2VUaW1lcyh2YWx1ZTIubGVuZ3RoLCBTdHJpbmcpIDogW107CiAgICAgIHZhciBsZW5ndGggPSByZXN1bHQubGVuZ3RoLCBza2lwSW5kZXhlcyA9ICEhbGVuZ3RoOwogICAgICBmb3IgKHZhciBrZXkyIGluIHZhbHVlMikgewogICAgICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5My5jYWxsKHZhbHVlMiwga2V5MikpICYmICEoc2tpcEluZGV4ZXMgJiYgKGtleTIgPT0gImxlbmd0aCIgfHwgaXNJbmRleChrZXkyLCBsZW5ndGgpKSkpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGtleTIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXkyLCB2YWx1ZTIpIHsKICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleTJdOwogICAgICBpZiAoIShoYXNPd25Qcm9wZXJ0eTMuY2FsbChvYmplY3QsIGtleTIpICYmIGVxKG9ialZhbHVlLCB2YWx1ZTIpKSB8fCB2YWx1ZTIgPT09IHZvaWQgMCAmJiAhKGtleTIgaW4gb2JqZWN0KSkgewogICAgICAgIG9iamVjdFtrZXkyXSA9IHZhbHVlMjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkyKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CiAgICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkyKSkgewogICAgICAgICAgcmV0dXJuIGxlbmd0aDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkgewogICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzMihzb3VyY2UpLCBvYmplY3QpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlMiwgaXNEZWVwLCBpc0Z1bGwsIGN1c3RvbWl6ZXIsIGtleTIsIG9iamVjdCwgc3RhY2spIHsKICAgICAgdmFyIHJlc3VsdDsKICAgICAgaWYgKGN1c3RvbWl6ZXIpIHsKICAgICAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlMiwga2V5Miwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlMik7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBpZiAoIWlzT2JqZWN0NCh2YWx1ZTIpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgfQogICAgICB2YXIgaXNBcnIgPSBpc0FycmF5NCh2YWx1ZTIpOwogICAgICBpZiAoaXNBcnIpIHsKICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZTIpOwogICAgICAgIGlmICghaXNEZWVwKSB7CiAgICAgICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlMiwgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZTIpLCBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnOwogICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZTIpKSB7CiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUyLCBpc0RlZXApOwogICAgICAgIH0KICAgICAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCBpc0Z1bmMgJiYgIW9iamVjdCkgewogICAgICAgICAgaWYgKGlzSG9zdE9iamVjdCh2YWx1ZTIpKSB7CiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZTIgOiB7fTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlMik7CiAgICAgICAgICBpZiAoIWlzRGVlcCkgewogICAgICAgICAgICByZXR1cm4gY29weVN5bWJvbHModmFsdWUyLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUyKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7CiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZTIgOiB7fTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlMiwgdGFnLCBiYXNlQ2xvbmUsIGlzRGVlcCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjaygpKTsKICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUyKTsKICAgICAgaWYgKHN0YWNrZWQpIHsKICAgICAgICByZXR1cm4gc3RhY2tlZDsKICAgICAgfQogICAgICBzdGFjay5zZXQodmFsdWUyLCByZXN1bHQpOwogICAgICBpZiAoIWlzQXJyKSB7CiAgICAgICAgdmFyIHByb3BzID0gaXNGdWxsID8gZ2V0QWxsS2V5cyh2YWx1ZTIpIDoga2V5czIodmFsdWUyKTsKICAgICAgfQogICAgICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUyLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5MykgewogICAgICAgIGlmIChwcm9wcykgewogICAgICAgICAga2V5MyA9IHN1YlZhbHVlOwogICAgICAgICAgc3ViVmFsdWUgPSB2YWx1ZTJba2V5M107CiAgICAgICAgfQogICAgICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5MywgYmFzZUNsb25lKHN1YlZhbHVlLCBpc0RlZXAsIGlzRnVsbCwgY3VzdG9taXplciwga2V5MywgdmFsdWUyLCBzdGFjaykpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG8pIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0NChwcm90bykgPyBvYmplY3RDcmVhdGUocHJvdG8pIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykgewogICAgICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTsKICAgICAgcmV0dXJuIGlzQXJyYXk0KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUyKSB7CiAgICAgIHJldHVybiBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlMikgewogICAgICBpZiAoIWlzT2JqZWN0NCh2YWx1ZTIpIHx8IGlzTWFza2VkKHZhbHVlMikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uMih2YWx1ZTIpIHx8IGlzSG9zdE9iamVjdCh2YWx1ZTIpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjsKICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZTIpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkgewogICAgICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgZm9yICh2YXIga2V5MiBpbiBPYmplY3Qob2JqZWN0KSkgewogICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eTMuY2FsbChvYmplY3QsIGtleTIpICYmIGtleTIgIT0gImNvbnN0cnVjdG9yIikgewogICAgICAgICAgcmVzdWx0LnB1c2goa2V5Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIyLCBpc0RlZXApIHsKICAgICAgaWYgKGlzRGVlcCkgewogICAgICAgIHJldHVybiBidWZmZXIyLnNsaWNlKCk7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9IG5ldyBidWZmZXIyLmNvbnN0cnVjdG9yKGJ1ZmZlcjIubGVuZ3RoKTsKICAgICAgYnVmZmVyMi5jb3B5KHJlc3VsdCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7CiAgICAgIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7CiAgICAgIG5ldyBVaW50OEFycmF5MihyZXN1bHQpLnNldChuZXcgVWludDhBcnJheTIoYXJyYXlCdWZmZXIpKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkgewogICAgICB2YXIgYnVmZmVyMiA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjsKICAgICAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lTWFwKG1hcDcsIGlzRGVlcCwgY2xvbmVGdW5jKSB7CiAgICAgIHZhciBhcnJheSA9IGlzRGVlcCA/IGNsb25lRnVuYyhtYXBUb0FycmF5KG1hcDcpLCB0cnVlKSA6IG1hcFRvQXJyYXkobWFwNyk7CiAgICAgIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgYWRkTWFwRW50cnksIG5ldyBtYXA3LmNvbnN0cnVjdG9yKCkpOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7CiAgICAgIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTsKICAgICAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVNldChzZXQzLCBpc0RlZXAsIGNsb25lRnVuYykgewogICAgICB2YXIgYXJyYXkgPSBpc0RlZXAgPyBjbG9uZUZ1bmMoc2V0VG9BcnJheShzZXQzKSwgdHJ1ZSkgOiBzZXRUb0FycmF5KHNldDMpOwogICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZFNldEVudHJ5LCBuZXcgc2V0My5jb25zdHJ1Y3RvcigpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkgewogICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHsKICAgICAgdmFyIGJ1ZmZlcjIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyOwogICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyMiwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CiAgICAgIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBhcnJheVtpbmRleDJdID0gc291cmNlW2luZGV4Ml07CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHsKICAgICAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICB2YXIga2V5MiA9IHByb3BzW2luZGV4Ml07CiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleTJdLCBzb3VyY2Vba2V5Ml0sIGtleTIsIG9iamVjdCwgc291cmNlKSA6IHZvaWQgMDsKICAgICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleTIsIG5ld1ZhbHVlID09PSB2b2lkIDAgPyBzb3VyY2Vba2V5Ml0gOiBuZXdWYWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7CiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHsKICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5czIsIGdldFN5bWJvbHMpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXA3LCBrZXkyKSB7CiAgICAgIHZhciBkYXRhMTEgPSBtYXA3Ll9fZGF0YV9fOwogICAgICByZXR1cm4gaXNLZXlhYmxlKGtleTIpID8gZGF0YTExW3R5cGVvZiBrZXkyID09ICJzdHJpbmciID8gInN0cmluZyIgOiAiaGFzaCJdIDogZGF0YTExLm1hcDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleTIpIHsKICAgICAgdmFyIHZhbHVlMiA9IGdldFZhbHVlKG9iamVjdCwga2V5Mik7CiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUyKSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH0KICAgIHZhciBnZXRTeW1ib2xzID0gbmF0aXZlR2V0U3ltYm9scyA/IG92ZXJBcmcobmF0aXZlR2V0U3ltYm9scywgT2JqZWN0KSA6IHN0dWJBcnJheTsKICAgIHZhciBnZXRUYWcgPSBiYXNlR2V0VGFnOwogICAgaWYgKERhdGFWaWV3MiAmJiBnZXRUYWcobmV3IERhdGFWaWV3MihuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZyB8fCBNYXAyICYmIGdldFRhZyhuZXcgTWFwMigpKSAhPSBtYXBUYWcgfHwgUHJvbWlzZTIgJiYgZ2V0VGFnKFByb21pc2UyLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZyB8fCBTZXQyICYmIGdldFRhZyhuZXcgU2V0MigpKSAhPSBzZXRUYWcgfHwgV2Vha01hcDIgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwMigpKSAhPSB3ZWFrTWFwVGFnKSB7CiAgICAgIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHZhciByZXN1bHQgPSBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpLCBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlMi5jb25zdHJ1Y3RvciA6IHZvaWQgMCwgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6IHZvaWQgMDsKICAgICAgICBpZiAoY3RvclN0cmluZykgewogICAgICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7CiAgICAgICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBkYXRhVmlld1RhZzsKICAgICAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBtYXBUYWc7CiAgICAgICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VUYWc7CiAgICAgICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gc2V0VGFnOwogICAgICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiB3ZWFrTWFwVGFnOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwgcmVzdWx0ID0gYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTsKICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gInN0cmluZyIgJiYgaGFzT3duUHJvcGVydHkzLmNhbGwoYXJyYXksICJpbmRleCIpKSB7CiAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7CiAgICAgICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIiAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgY2xvbmVGdW5jLCBpc0RlZXApIHsKICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7CiAgICAgIHN3aXRjaCAodGFnKSB7CiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7CiAgICAgICAgY2FzZSBib29sVGFnOgogICAgICAgIGNhc2UgZGF0ZVRhZzoKICAgICAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTsKICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApOwogICAgICAgIGNhc2UgZmxvYXQzMlRhZzoKICAgICAgICBjYXNlIGZsb2F0NjRUYWc6CiAgICAgICAgY2FzZSBpbnQ4VGFnOgogICAgICAgIGNhc2UgaW50MTZUYWc6CiAgICAgICAgY2FzZSBpbnQzMlRhZzoKICAgICAgICBjYXNlIHVpbnQ4VGFnOgogICAgICAgIGNhc2UgdWludDhDbGFtcGVkVGFnOgogICAgICAgIGNhc2UgdWludDE2VGFnOgogICAgICAgIGNhc2UgdWludDMyVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7CiAgICAgICAgY2FzZSBtYXBUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVNYXAob2JqZWN0LCBpc0RlZXAsIGNsb25lRnVuYyk7CiAgICAgICAgY2FzZSBudW1iZXJUYWc6CiAgICAgICAgY2FzZSBzdHJpbmdUYWc6CiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTsKICAgICAgICBjYXNlIHJlZ2V4cFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpOwogICAgICAgIGNhc2Ugc2V0VGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lU2V0KG9iamVjdCwgaXNEZWVwLCBjbG9uZUZ1bmMpOwogICAgICAgIGNhc2Ugc3ltYm9sVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUyLCBsZW5ndGgpIHsKICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoOwogICAgICByZXR1cm4gISFsZW5ndGggJiYgKHR5cGVvZiB2YWx1ZTIgPT0gIm51bWJlciIgfHwgcmVJc1VpbnQudGVzdCh2YWx1ZTIpKSAmJiAodmFsdWUyID4gLTEgJiYgdmFsdWUyICUgMSA9PSAwICYmIHZhbHVlMiA8IGxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0tleWFibGUodmFsdWUyKSB7CiAgICAgIHZhciB0eXBlNSA9IHR5cGVvZiB2YWx1ZTI7CiAgICAgIHJldHVybiB0eXBlNSA9PSAic3RyaW5nIiB8fCB0eXBlNSA9PSAibnVtYmVyIiB8fCB0eXBlNSA9PSAic3ltYm9sIiB8fCB0eXBlNSA9PSAiYm9vbGVhbiIgPyB2YWx1ZTIgIT09ICJfX3Byb3RvX18iIDogdmFsdWUyID09PSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykgewogICAgICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIG1hc2tTcmNLZXkgaW4gZnVuYzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlMikgewogICAgICB2YXIgQ3RvciA9IHZhbHVlMiAmJiB2YWx1ZTIuY29uc3RydWN0b3IsIHByb3RvID0gdHlwZW9mIEN0b3IgPT0gImZ1bmN0aW9uIiAmJiBDdG9yLnByb3RvdHlwZSB8fCBvYmplY3RQcm90bzsKICAgICAgcmV0dXJuIHZhbHVlMiA9PT0gcHJvdG87CiAgICB9CiAgICBmdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7CiAgICAgIGlmIChmdW5jICE9IG51bGwpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGZ1bmMgKyAiIjsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlMikgewogICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlMiwgdHJ1ZSwgdHJ1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBlcSh2YWx1ZTIsIG90aGVyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIgPT09IG90aGVyIHx8IHZhbHVlMiAhPT0gdmFsdWUyICYmIG90aGVyICE9PSBvdGhlcjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlMikgewogICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUyKSAmJiBoYXNPd25Qcm9wZXJ0eTMuY2FsbCh2YWx1ZTIsICJjYWxsZWUiKSAmJiAoIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUyLCAiY2FsbGVlIikgfHwgb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKSA9PSBhcmdzVGFnKTsKICAgIH0KICAgIHZhciBpc0FycmF5NCA9IEFycmF5LmlzQXJyYXk7CiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZTIodmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZTIubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbjIodmFsdWUyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlMikgewogICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlMikgJiYgaXNBcnJheUxpa2UyKHZhbHVlMik7CiAgICB9CiAgICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7CiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uMih2YWx1ZTIpIHsKICAgICAgdmFyIHRhZyA9IGlzT2JqZWN0NCh2YWx1ZTIpID8gb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKSA6ICIiOwogICAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlMikgewogICAgICByZXR1cm4gdHlwZW9mIHZhbHVlMiA9PSAibnVtYmVyIiAmJiB2YWx1ZTIgPiAtMSAmJiB2YWx1ZTIgJSAxID09IDAgJiYgdmFsdWUyIDw9IE1BWF9TQUZFX0lOVEVHRVI7CiAgICB9CiAgICBmdW5jdGlvbiBpc09iamVjdDQodmFsdWUyKSB7CiAgICAgIHZhciB0eXBlNSA9IHR5cGVvZiB2YWx1ZTI7CiAgICAgIHJldHVybiAhIXZhbHVlMiAmJiAodHlwZTUgPT0gIm9iamVjdCIgfHwgdHlwZTUgPT0gImZ1bmN0aW9uIik7CiAgICB9CiAgICBmdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUyKSB7CiAgICAgIHJldHVybiAhIXZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09ICJvYmplY3QiOwogICAgfQogICAgZnVuY3Rpb24ga2V5czIob2JqZWN0KSB7CiAgICAgIHJldHVybiBpc0FycmF5TGlrZTIob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBzdHViQXJyYXkoKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0dWJGYWxzZSgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeUAyLjEuMC9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMKdmFyIHJlcXVpcmVfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnkgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5QDIuMS4wL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRhdGExMSwgb3B0cykgewogICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTsKICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiZnVuY3Rpb24iKSBvcHRzID0geyBjbXA6IG9wdHMgfTsKICAgICAgdmFyIGN5Y2xlcyA9IHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gImJvb2xlYW4iID8gb3B0cy5jeWNsZXMgOiBmYWxzZTsKICAgICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIC8qIEBfX1BVUkVfXyAqLyAoZnVuY3Rpb24oZjcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYTUsIHZhbHVlOiBub2RlMlthNV0gfTsKICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYjUsIHZhbHVlOiBub2RlMltiNV0gfTsKICAgICAgICAgICAgcmV0dXJuIGY3KGFvYmosIGJvYmopOwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9KShvcHRzLmNtcCk7CiAgICAgIHZhciBzZWVuID0gW107CiAgICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5Nyhub2RlMikgewogICAgICAgIGlmIChub2RlMiAmJiBub2RlMi50b0pTT04gJiYgdHlwZW9mIG5vZGUyLnRvSlNPTiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbm9kZTIgPSBub2RlMi50b0pTT04oKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSB2b2lkIDApIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyID09ICJudW1iZXIiKSByZXR1cm4gaXNGaW5pdGUobm9kZTIpID8gIiIgKyBub2RlMiA6ICJudWxsIjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyICE9PSAib2JqZWN0IikgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vZGUyKTsKICAgICAgICB2YXIgaTExLCBvdXQ7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZTIpKSB7CiAgICAgICAgICBvdXQgPSAiWyI7CiAgICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IG5vZGUyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgaWYgKGkxMSkgb3V0ICs9ICIsIjsKICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeTcobm9kZTJbaTExXSkgfHwgIm51bGwiOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG91dCArICJdIjsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSBudWxsKSByZXR1cm4gIm51bGwiOwogICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZTIpICE9PSAtMSkgewogICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCJfX2N5Y2xlX18iKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04iKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ucHVzaChub2RlMikgLSAxOwogICAgICAgIHZhciBrZXlzMiA9IE9iamVjdC5rZXlzKG5vZGUyKS5zb3J0KGNtcCAmJiBjbXAobm9kZTIpKTsKICAgICAgICBvdXQgPSAiIjsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IGtleXMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIHZhciBrZXkyID0ga2V5czJbaTExXTsKICAgICAgICAgIHZhciB2YWx1ZTIgPSBzdHJpbmdpZnk3KG5vZGUyW2tleTJdKTsKICAgICAgICAgIGlmICghdmFsdWUyKSBjb250aW51ZTsKICAgICAgICAgIGlmIChvdXQpIG91dCArPSAiLCI7CiAgICAgICAgICBvdXQgKz0gSlNPTi5zdHJpbmdpZnkoa2V5MikgKyAiOiIgKyB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHNlZW4uc3BsaWNlKHNlZW5JbmRleCwgMSk7CiAgICAgICAgcmV0dXJuICJ7IiArIG91dCArICJ9IjsKICAgICAgfSkoZGF0YTExKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL3NtYXJ0anNvbi5wbHVnaW5zLmpzCnZhciBpbXBvcnRfbG9kYXNoLCBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnksIHN0YWJsZUpzb247CnZhciBpbml0X3NtYXJ0anNvbl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9zbWFydGpzb24ucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTEoKTsKICAgIGltcG9ydF9sb2Rhc2ggPSBfX3RvRVNNKHJlcXVpcmVfbG9kYXNoKCksIDEpOwogICAgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5ID0gX190b0VTTShyZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5KCksIDEpOwogICAgc3RhYmxlSnNvbiA9IGltcG9ydF9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeS5kZWZhdWx0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcwpmdW5jdGlvbiBiYXNlNjRFbmNvZGUoZGF0YTExKSB7CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YTExKS50b1N0cmluZygiYmFzZTY0Iik7CiAgfQogIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZGF0YTExKSk7Cn0KZnVuY3Rpb24gYmFzZTY0RGVjb2RlKHN0cikgewogIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAiYmFzZTY0Iik7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTsKICB9CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oYXRvYihzdHIpKS5tYXAoKGNoYXIpID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpOwp9CmZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZTIsIHNwYWNlMikgewogIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZTIsIHJlcGxhY2VyLCBzcGFjZTIpOwp9CmZ1bmN0aW9uIHBhcnNlMih0ZXh0OSkgewogIHJldHVybiBKU09OLnBhcnNlKHRleHQ5LCByZXZpdmVyKTsKfQpmdW5jdGlvbiBpc0VuY29kZWRCdWZmZXIoeDQpIHsKICByZXR1cm4gaXNPYmplY3QoeDQpICYmIHg0LnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiBpc1N0cmluZyh4NC5kYXRhKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2UyKHg0KSB7CiAgcmV0dXJuIGlzT2JqZWN0KHg0KSAmJiAoeDQudHlwZSA9PT0gIkJ1ZmZlciIgJiYgKGlzQXJyYXkyKHg0LmRhdGEpIHx8IGlzU3RyaW5nKHg0LmRhdGEpKSkgfHwgeDQgaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIGlzQXJyYXkyKHg0KSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeDQpOwp9CmZ1bmN0aW9uIGlzU3RyaW5nKHg0KSB7CiAgcmV0dXJuIHR5cGVvZiB4NCA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaXNPYmplY3QoeDQpIHsKICByZXR1cm4gdHlwZW9mIHg0ID09PSAib2JqZWN0IiAmJiB4NCAhPT0gbnVsbDsKfQp2YXIgcmVwbGFjZXIsIHJldml2ZXI7CnZhciBpbml0X2J1ZmZlcmhhbmRsaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0anNvbl9wbHVnaW5zKCk7CiAgICByZXBsYWNlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzQnVmZmVyTGlrZTIodmFsdWUyKSkgewogICAgICAgIGxldCBidWZmZXJEYXRhOwogICAgICAgIGlmICgiZGF0YSIgaW4gdmFsdWUyICYmIGlzQXJyYXkyKHZhbHVlMi5kYXRhKSkgewogICAgICAgICAgYnVmZmVyRGF0YSA9IG5ldyBVaW50OEFycmF5KHZhbHVlMi5kYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSB2YWx1ZTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSAiYmFzZTY0OiIgKyBiYXNlNjRFbmNvZGUoYnVmZmVyRGF0YSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICJFbmNvZGVkQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IGJhc2U2NERhdGEKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9OwogICAgcmV2aXZlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzRW5jb2RlZEJ1ZmZlcih2YWx1ZTIpKSB7CiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlMi5kYXRhKSAmJiB2YWx1ZTIuZGF0YS5zdGFydHNXaXRoKCJiYXNlNjQ6IikpIHsKICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB2YWx1ZTIuZGF0YS5zbGljZSg3KTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBiYXNlNjREZWNvZGUoYmFzZTY0RGF0YSk7CiAgICAgICAgICByZXR1cm4gYnVmZmVyMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMiwgewogIFNtYXJ0anNvbjogKCkgPT4gU21hcnRqc29uLAogIGRlZXBFcXVhbEpzb25MU3RyaW5nczogKCkgPT4gZGVlcEVxdWFsSnNvbkxTdHJpbmdzLAogIGRlZXBFcXVhbE9iamVjdHM6ICgpID0+IGRlZXBFcXVhbE9iamVjdHMsCiAgZm9sZERlYzogKCkgPT4gZm9sZERlYywKICBwYXJzZTogKCkgPT4gcGFyc2UzLAogIHBhcnNlQmFzZTY0OiAoKSA9PiBwYXJzZUJhc2U2NCwKICBwYXJzZUpzb25MOiAoKSA9PiBwYXJzZUpzb25MLAogIHN0YWJsZU9uZVdheVN0cmluZ2lmeTogKCkgPT4gc3RhYmxlT25lV2F5U3RyaW5naWZ5LAogIHN0cmluZ2lmeTogKCkgPT4gc3RyaW5naWZ5MiwKICBzdHJpbmdpZnlCYXNlNjQ6ICgpID0+IHN0cmluZ2lmeUJhc2U2NCwKICBzdHJpbmdpZnlKc29uTDogKCkgPT4gc3RyaW5naWZ5SnNvbkwsCiAgc3RyaW5naWZ5UHJldHR5OiAoKSA9PiBzdHJpbmdpZnlQcmV0dHkKfSk7CnZhciBwYXJzZTMsIHBhcnNlSnNvbkwsIHN0cmluZ2lmeUpzb25MLCBzdGFibGVPbmVXYXlTdHJpbmdpZnksIHN0cmluZ2lmeTIsIHN0cmluZ2lmeVByZXR0eSwgc3RyaW5naWZ5QmFzZTY0LCBwYXJzZUJhc2U2NCwgU21hcnRqc29uLCBmb2xkRGVjLCBkZWVwRXF1YWxPYmplY3RzLCBkZWVwRXF1YWxKc29uTFN0cmluZ3M7CnZhciBpbml0X2Rpc3RfdHMxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGpzb25fcGx1Z2lucygpOwogICAgaW5pdF9idWZmZXJoYW5kbGluZygpOwogICAgcGFyc2UzID0gcGFyc2UyOwogICAgcGFyc2VKc29uTCA9IChqc29ubERhdGEpID0+IHsKICAgICAgY29uc3QgbGluZXMgPSBqc29ubERhdGEuc3BsaXQoIlxuIik7CiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBsaW5lcy5yZWR1Y2UoKGFjYywgbGluZSkgPT4gewogICAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTsKICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBhY2MucHVzaChwYXJzZTModHJpbW1lZCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCBbXSk7CiAgICAgIHJldHVybiBwYXJzZWREYXRhOwogICAgfTsKICAgIHN0cmluZ2lmeUpzb25MID0gKGl0ZW1zKSA9PiB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHN0cmluZ2lmeTIoaXRlbSkpLmpvaW4oIlxuIik7CiAgICB9OwogICAgc3RhYmxlT25lV2F5U3RyaW5naWZ5ID0gKG9iakFyZywgc2ltcGxlT3JkZXJBcnJheSwgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTsKICAgICAgY29uc3Qgc2FuaXRpemUyID0gKHZhbCkgPT4gewogICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlcGxhY2VkID0gcmVwbGFjZXIoIiIsIHZhbCk7CiAgICAgICAgaWYgKHJlcGxhY2VkICYmIHJlcGxhY2VkLnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiB0eXBlb2YgcmVwbGFjZWQuZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKICAgICAgICB9CiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKHZhbCkpIHsKICAgICAgICAgIHJldHVybiAiX19jeWNsZV9fIjsKICAgICAgICB9CiAgICAgICAgdmlzaXRlZC5hZGQodmFsKTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbSkgPT4gc2FuaXRpemUyKGl0ZW0pKTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3V0ID0ge307CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKHZhbCkpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9IHNhbml0aXplMih2YWxba2V5Ml0pOwogICAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9ICJfX3Vuc2VyaWFsaXphYmxlX18iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCBvYmogPSBzYW5pdGl6ZTIob2JqQXJnKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKICAgICAgICAuLi5vcHRpb25zQXJnLAogICAgICAgIGN5Y2xlczogdHJ1ZQogICAgICB9OwogICAgICBpZiAoc2ltcGxlT3JkZXJBcnJheSAmJiAhb3B0aW9ucy5jbXApIHsKICAgICAgICBjb25zdCBvcmRlcjIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIHNpbXBsZU9yZGVyQXJyYXkuZm9yRWFjaCgoa2V5MiwgaWR4KSA9PiBvcmRlcjIuc2V0KGtleTIsIGlkeCkpOwogICAgICAgIG9wdGlvbnMuY21wID0gKGE1LCBiNSkgPT4gewogICAgICAgICAgY29uc3QgYUlkeCA9IG9yZGVyMi5oYXMoYTUua2V5KSA/IG9yZGVyMi5nZXQoYTUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGNvbnN0IGJJZHggPSBvcmRlcjIuaGFzKGI1LmtleSkgPyBvcmRlcjIuZ2V0KGI1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBpZiAoYUlkeCAhPT0gYklkeCkKICAgICAgICAgICAgcmV0dXJuIGFJZHggLSBiSWR4OwogICAgICAgICAgcmV0dXJuIGE1LmtleSA8IGI1LmtleSA/IC0xIDogYTUua2V5ID4gYjUua2V5ID8gMSA6IDA7CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gc3RhYmxlSnNvbihvYmosIG9wdGlvbnMpOwogICAgfTsKICAgIHN0cmluZ2lmeTIgPSAob2JqQXJnLCBzaW1wbGVPcmRlckFycmF5LCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgY29uc3QgYnVmZmVyZWRKc29uID0gc3RyaW5naWZ5KG9iakFyZyk7CiAgICAgIG9iakFyZyA9IEpTT04ucGFyc2UoYnVmZmVyZWRKc29uKTsKICAgICAgbGV0IG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNBcmcgfTsKICAgICAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7CiAgICAgICAgY29uc3Qgb3JkZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzaW1wbGVPcmRlckFycmF5LmZvckVhY2goKGtleTIsIGlkeCkgPT4gb3JkZXIyLnNldChrZXkyLCBpZHgpKTsKICAgICAgICBvcHRpb25zLmNtcCA9IChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFJZHggPSBvcmRlcjIuaGFzKGE1LmtleSkgPyBvcmRlcjIuZ2V0KGE1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBiSWR4ID0gb3JkZXIyLmhhcyhiNS5rZXkpID8gb3JkZXIyLmdldChiNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgaWYgKGFJZHggIT09IGJJZHgpCiAgICAgICAgICAgIHJldHVybiBhSWR4IC0gYklkeDsKICAgICAgICAgIHJldHVybiBhNS5rZXkgPCBiNS5rZXkgPyAtMSA6IGE1LmtleSA+IGI1LmtleSA/IDEgOiAwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgbGV0IHJldHVybkpzb24gPSBzdGFibGVKc29uKG9iakFyZywgb3B0aW9ucyk7CiAgICAgIHJldHVybiByZXR1cm5Kc29uOwogICAgfTsKICAgIHN0cmluZ2lmeVByZXR0eSA9IChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkyKG9iamVjdEFyZyk7CiAgICAgIGNvbnN0IG9iamVjdCA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWQpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCBudWxsLCAyKTsKICAgIH07CiAgICBzdHJpbmdpZnlCYXNlNjQgPSAoLi4uYXJncykgPT4gewogICAgICBjb25zdCBzdHJpbmdpZmllZFJlc3VsdCA9IHN0cmluZ2lmeTIoLi4uYXJncyk7CiAgICAgIHJldHVybiBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQuZW5jb2RlVXJpKHN0cmluZ2lmaWVkUmVzdWx0KTsKICAgIH07CiAgICBwYXJzZUJhc2U2NCA9IChiYXNlNjRKc29uU3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGJhc2U2NDIgPSBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQ7CiAgICAgIGNvbnN0IGRlY29kZUZuID0gYmFzZTY0Mi5kZWNvZGVVcmkgfHwgYmFzZTY0Mi5kZWNvZGU7CiAgICAgIGNvbnN0IHNpbXBsZVN0cmluZ2lmaWVkID0gZGVjb2RlRm4oYmFzZTY0SnNvblN0cmluZ0FyZyk7CiAgICAgIHJldHVybiBwYXJzZTMoc2ltcGxlU3RyaW5naWZpZWQpOwogICAgfTsKICAgIFNtYXJ0anNvbiA9IGNsYXNzIF9TbWFydGpzb24gewogICAgICAvKioKICAgICAgICogZW5mb2xkcyBkYXRhIGZyb20gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBzdGF0aWMgZW5mb2xkRnJvbU9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyB0aGlzKCk7CiAgICAgICAgY29uc3Qgc2F2ZWFibGVzID0gbmV3SW5zdGFuY2Uuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBvYmplY3RBcmcpIHsKICAgICAgICAgIGlmIChzYXZlYWJsZXMuaW5kZXhPZihrZXlOYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgbmV3SW5zdGFuY2Vba2V5TmFtZV0gPSBvYmplY3RBcmdba2V5TmFtZV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZW5mb2xkIGZyb20ganNvbgogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21Kc29uKGpzb25BcmcpIHsKICAgICAgICBjb25zdCBvYmplY3RGcm9tSnNvbiA9IHBhcnNlMyhqc29uQXJnKTsKICAgICAgICByZXR1cm4gdGhpcy5lbmZvbGRGcm9tT2JqZWN0KG9iamVjdEZyb21Kc29uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZm9sZHMgYSBjbGFzcyBpbnRvIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgZm9sZFRvT2JqZWN0KCkgewogICAgICAgIGNvbnN0IHRyYWNrU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgICB0cmFja1NldC5hZGQodGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQpOwogICAgICB9CiAgICAgIGZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307CiAgICAgICAgY29uc3QgZm9sZFZhbHVlID0gKHZhbCkgPT4gewogICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIF9TbWFydGpzb24pIHsKICAgICAgICAgICAgaWYgKHRyYWNrU2V0Lmhhcyh2YWwpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBkZXRlY3RlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyYWNrU2V0LmFkZCh2YWwpOwogICAgICAgICAgICByZXR1cm4gdmFsLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IGZvbGRWYWx1ZShpdGVtKSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaW1wb3J0X2xvZGFzaC5kZWZhdWx0KHZhbCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBvZiBwcm9wcykgewogICAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1trZXlOYW1lXTsKICAgICAgICAgIHJlc3VsdFtrZXlOYW1lXSA9IGZvbGRWYWx1ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBmb2xkVG9Kc29uKCkgewogICAgICAgIGNvbnN0IGZvbGRlZE9iamVjdCA9IHRoaXMuZm9sZFRvT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeTIoZm9sZGVkT2JqZWN0KTsKICAgICAgfQogICAgfTsKICAgIGZvbGREZWMgPSAoKSA9PiB7CiAgICAgIHJldHVybiAodGFyZ2V0LCBrZXkyKSA9PiB7CiAgICAgICAgaWYgKCF0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzKSB7CiAgICAgICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzID0gW107CiAgICAgICAgfQogICAgICAgIHRhcmdldC5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChrZXkyKTsKICAgICAgfTsKICAgIH07CiAgICBkZWVwRXF1YWxPYmplY3RzID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHsKICAgICAgY29uc3Qgb2JqZWN0MVN0cmluZyA9IHN0cmluZ2lmeTIob2JqZWN0MSk7CiAgICAgIGNvbnN0IG9iamVjdDJTdHJpbmcgPSBzdHJpbmdpZnkyKG9iamVjdDIpOwogICAgICByZXR1cm4gb2JqZWN0MVN0cmluZyA9PT0gb2JqZWN0MlN0cmluZzsKICAgIH07CiAgICBkZWVwRXF1YWxKc29uTFN0cmluZ3MgPSAoanNvbkxTdHJpbmcxLCBqc29uTFN0cmluZzIpID0+IHsKICAgICAgY29uc3QgZmlyc3RBcnJheSA9IHBhcnNlSnNvbkwoanNvbkxTdHJpbmcxKTsKICAgICAgY29uc3Qgc2Vjb25kQXJyYXkgPSBwYXJzZUpzb25MKGpzb25MU3RyaW5nMik7CiAgICAgIHJldHVybiBkZWVwRXF1YWxPYmplY3RzKGZpcnN0QXJyYXksIHNlY29uZEFycmF5KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtpZGJAOC4wLjMvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2lkYi9idWlsZC9pbmRleC5qcwp2YXIgYnVpbGRfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidWlsZF9leHBvcnRzLCB7CiAgZGVsZXRlREI6ICgpID0+IGRlbGV0ZURCLAogIG9wZW5EQjogKCkgPT4gb3BlbkRCLAogIHVud3JhcDogKCkgPT4gdW53cmFwLAogIHdyYXA6ICgpID0+IHdyYXAKfSk7CmZ1bmN0aW9uIGdldElkYlByb3h5YWJsZVR5cGVzKCkgewogIHJldHVybiBpZGJQcm94eWFibGVUeXBlcyB8fCAoaWRiUHJveHlhYmxlVHlwZXMgPSBbCiAgICBJREJEYXRhYmFzZSwKICAgIElEQk9iamVjdFN0b3JlLAogICAgSURCSW5kZXgsCiAgICBJREJDdXJzb3IsCiAgICBJREJUcmFuc2FjdGlvbgogIF0pOwp9CmZ1bmN0aW9uIGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkgewogIHJldHVybiBjdXJzb3JBZHZhbmNlTWV0aG9kcyB8fCAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgPSBbCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlLAogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXkKICBdKTsKfQpmdW5jdGlvbiBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpIHsKICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHVubGlzdGVuID0gKCkgPT4gewogICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBzdWNjZXNzID0gKCkgPT4gewogICAgICByZXNvbHZlMih3cmFwKHJlcXVlc3QucmVzdWx0KSk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7CiAgICAgIHJlamVjdChyZXF1ZXN0LmVycm9yKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBlcnJvcik7CiAgfSk7CiAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm9taXNlLCByZXF1ZXN0KTsKICByZXR1cm4gcHJvbWlzZTsKfQpmdW5jdGlvbiBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHJhbnNhY3Rpb25Eb25lTWFwLmhhcyh0eCkpCiAgICByZXR1cm47CiAgY29uc3QgZG9uZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHsKICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLCBjb21wbGV0ZSk7CiAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHsKICAgICAgcmVzb2x2ZTIoKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICBjb25zdCBlcnJvciA9ICgpID0+IHsKICAgICAgcmVqZWN0KHR4LmVycm9yIHx8IG5ldyBET01FeGNlcHRpb24oIkFib3J0RXJyb3IiLCAiQWJvcnRFcnJvciIpKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICB0eC5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIGNvbXBsZXRlKTsKICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgdHguYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBlcnJvcik7CiAgfSk7CiAgdHJhbnNhY3Rpb25Eb25lTWFwLnNldCh0eCwgZG9uZSk7Cn0KZnVuY3Rpb24gcmVwbGFjZVRyYXBzKGNhbGxiYWNrKSB7CiAgaWRiUHJveHlUcmFwcyA9IGNhbGxiYWNrKGlkYlByb3h5VHJhcHMpOwp9CmZ1bmN0aW9uIHdyYXBGdW5jdGlvbihmdW5jKSB7CiAgaWYgKGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkuaW5jbHVkZXMoZnVuYykpIHsKICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICAgIGZ1bmMuYXBwbHkodW53cmFwKHRoaXMpLCBhcmdzKTsKICAgICAgcmV0dXJuIHdyYXAodGhpcy5yZXF1ZXN0KTsKICAgIH07CiAgfQogIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICByZXR1cm4gd3JhcChmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncykpOwogIH07Cn0KZnVuY3Rpb24gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gImZ1bmN0aW9uIikKICAgIHJldHVybiB3cmFwRnVuY3Rpb24odmFsdWUyKTsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pCiAgICBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odmFsdWUyKTsKICBpZiAoaW5zdGFuY2VPZkFueSh2YWx1ZTIsIGdldElkYlByb3h5YWJsZVR5cGVzKCkpKQogICAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZTIsIGlkYlByb3h5VHJhcHMpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gd3JhcCh2YWx1ZTIpIHsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCUmVxdWVzdCkKICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHZhbHVlMik7CiAgaWYgKHRyYW5zZm9ybUNhY2hlLmhhcyh2YWx1ZTIpKQogICAgcmV0dXJuIHRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZTIpOwogIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpOwogIGlmIChuZXdWYWx1ZSAhPT0gdmFsdWUyKSB7CiAgICB0cmFuc2Zvcm1DYWNoZS5zZXQodmFsdWUyLCBuZXdWYWx1ZSk7CiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KG5ld1ZhbHVlLCB2YWx1ZTIpOwogIH0KICByZXR1cm4gbmV3VmFsdWU7Cn0KZnVuY3Rpb24gb3BlbkRCKG5hbWUsIHZlcnNpb24yLCB7IGJsb2NrZWQsIHVwZ3JhZGUsIGJsb2NraW5nLCB0ZXJtaW5hdGVkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihuYW1lLCB2ZXJzaW9uMik7CiAgY29uc3Qgb3BlblByb21pc2UgPSB3cmFwKHJlcXVlc3QpOwogIGlmICh1cGdyYWRlKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInVwZ3JhZGVuZWVkZWQiLCAoZXZlbnQpID0+IHsKICAgICAgdXBncmFkZSh3cmFwKHJlcXVlc3QucmVzdWx0KSwgZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgd3JhcChyZXF1ZXN0LnRyYW5zYWN0aW9uKSwgZXZlbnQpOwogICAgfSk7CiAgfQogIGlmIChibG9ja2VkKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLCAoZXZlbnQpID0+IGJsb2NrZWQoCiAgICAgIC8vIENhc3RpbmcgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9wdWxsLzE0MDUKICAgICAgZXZlbnQub2xkVmVyc2lvbiwKICAgICAgZXZlbnQubmV3VmVyc2lvbiwKICAgICAgZXZlbnQKICAgICkpOwogIH0KICBvcGVuUHJvbWlzZS50aGVuKChkYikgPT4gewogICAgaWYgKHRlcm1pbmF0ZWQpCiAgICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgKCkgPT4gdGVybWluYXRlZCgpKTsKICAgIGlmIChibG9ja2luZykgewogICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCJ2ZXJzaW9uY2hhbmdlIiwgKGV2ZW50KSA9PiBibG9ja2luZyhldmVudC5vbGRWZXJzaW9uLCBldmVudC5uZXdWZXJzaW9uLCBldmVudCkpOwogICAgfQogIH0pLmNhdGNoKCgpID0+IHsKICB9KTsKICByZXR1cm4gb3BlblByb21pc2U7Cn0KZnVuY3Rpb24gZGVsZXRlREIobmFtZSwgeyBibG9ja2VkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UobmFtZSk7CiAgaWYgKGJsb2NrZWQpIHsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2tlZCIsIChldmVudCkgPT4gYmxvY2tlZCgKICAgICAgLy8gQ2FzdGluZyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0LURPTS1saWItZ2VuZXJhdG9yL3B1bGwvMTQwNQogICAgICBldmVudC5vbGRWZXJzaW9uLAogICAgICBldmVudAogICAgKSk7CiAgfQogIHJldHVybiB3cmFwKHJlcXVlc3QpLnRoZW4oKCkgPT4gdm9pZCAwKTsKfQpmdW5jdGlvbiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB7CiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSURCRGF0YWJhc2UgJiYgIShwcm9wIGluIHRhcmdldCkgJiYgdHlwZW9mIHByb3AgPT09ICJzdHJpbmciKSkgewogICAgcmV0dXJuOwogIH0KICBpZiAoY2FjaGVkTWV0aG9kcy5nZXQocHJvcCkpCiAgICByZXR1cm4gY2FjaGVkTWV0aG9kcy5nZXQocHJvcCk7CiAgY29uc3QgdGFyZ2V0RnVuY05hbWUgPSBwcm9wLnJlcGxhY2UoL0Zyb21JbmRleCQvLCAiIik7CiAgY29uc3QgdXNlSW5kZXggPSBwcm9wICE9PSB0YXJnZXRGdW5jTmFtZTsKICBjb25zdCBpc1dyaXRlID0gd3JpdGVNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKTsKICBpZiAoCiAgICAvLyBCYWlsIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdCBvbiB0aGUgdGFyZ2V0LiBFZywgZ2V0QWxsIGlzbid0IGluIEVkZ2UuCiAgICAhKHRhcmdldEZ1bmNOYW1lIGluICh1c2VJbmRleCA/IElEQkluZGV4IDogSURCT2JqZWN0U3RvcmUpLnByb3RvdHlwZSkgfHwgIShpc1dyaXRlIHx8IHJlYWRNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKSkKICApIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgbWV0aG9kID0gYXN5bmMgZnVuY3Rpb24oc3RvcmVOYW1lLCAuLi5hcmdzKSB7CiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBpc1dyaXRlID8gInJlYWR3cml0ZSIgOiAicmVhZG9ubHkiKTsKICAgIGxldCB0YXJnZXQyID0gdHguc3RvcmU7CiAgICBpZiAodXNlSW5kZXgpCiAgICAgIHRhcmdldDIgPSB0YXJnZXQyLmluZGV4KGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgdGFyZ2V0Mlt0YXJnZXRGdW5jTmFtZV0oLi4uYXJncyksCiAgICAgIGlzV3JpdGUgJiYgdHguZG9uZQogICAgXSkpWzBdOwogIH07CiAgY2FjaGVkTWV0aG9kcy5zZXQocHJvcCwgbWV0aG9kKTsKICByZXR1cm4gbWV0aG9kOwp9CmFzeW5jIGZ1bmN0aW9uKiBpdGVyYXRlKC4uLmFyZ3MpIHsKICBsZXQgY3Vyc29yID0gdGhpczsKICBpZiAoIShjdXJzb3IgaW5zdGFuY2VvZiBJREJDdXJzb3IpKSB7CiAgICBjdXJzb3IgPSBhd2FpdCBjdXJzb3Iub3BlbkN1cnNvciguLi5hcmdzKTsKICB9CiAgaWYgKCFjdXJzb3IpCiAgICByZXR1cm47CiAgY3Vyc29yID0gY3Vyc29yOwogIGNvbnN0IHByb3hpZWRDdXJzb3IgPSBuZXcgUHJveHkoY3Vyc29yLCBjdXJzb3JJdGVyYXRvclRyYXBzKTsKICBpdHRyUHJveGllZEN1cnNvclRvT3JpZ2luYWxQcm94eS5zZXQocHJveGllZEN1cnNvciwgY3Vyc29yKTsKICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KHByb3hpZWRDdXJzb3IsIHVud3JhcChjdXJzb3IpKTsKICB3aGlsZSAoY3Vyc29yKSB7CiAgICB5aWVsZCBwcm94aWVkQ3Vyc29yOwogICAgY3Vyc29yID0gYXdhaXQgKGFkdmFuY2VSZXN1bHRzLmdldChwcm94aWVkQ3Vyc29yKSB8fCBjdXJzb3IuY29udGludWUoKSk7CiAgICBhZHZhbmNlUmVzdWx0cy5kZWxldGUocHJveGllZEN1cnNvcik7CiAgfQp9CmZ1bmN0aW9uIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgewogIHJldHVybiBwcm9wID09PSBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZSwgSURCQ3Vyc29yXSkgfHwgcHJvcCA9PT0gIml0ZXJhdGUiICYmIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlXSk7Cn0KdmFyIGluc3RhbmNlT2ZBbnksIGlkYlByb3h5YWJsZVR5cGVzLCBjdXJzb3JBZHZhbmNlTWV0aG9kcywgdHJhbnNhY3Rpb25Eb25lTWFwLCB0cmFuc2Zvcm1DYWNoZSwgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLCBpZGJQcm94eVRyYXBzLCB1bndyYXAsIHJlYWRNZXRob2RzLCB3cml0ZU1ldGhvZHMsIGNhY2hlZE1ldGhvZHMsIGFkdmFuY2VNZXRob2RQcm9wcywgbWV0aG9kTWFwLCBhZHZhbmNlUmVzdWx0cywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHksIGN1cnNvckl0ZXJhdG9yVHJhcHM7CnZhciBpbml0X2J1aWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMiKCkgewogICAgaW5zdGFuY2VPZkFueSA9IChvYmplY3QsIGNvbnN0cnVjdG9ycykgPT4gY29uc3RydWN0b3JzLnNvbWUoKGMxMSkgPT4gb2JqZWN0IGluc3RhbmNlb2YgYzExKTsKICAgIHRyYW5zYWN0aW9uRG9uZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgdHJhbnNmb3JtQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaWRiUHJveHlUcmFwcyA9IHsKICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pIHsKICAgICAgICAgIGlmIChwcm9wID09PSAiZG9uZSIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkRvbmVNYXAuZ2V0KHRhcmdldCk7CiAgICAgICAgICBpZiAocHJvcCA9PT0gInN0b3JlIikgewogICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXIub2JqZWN0U3RvcmVOYW1lc1sxXSA/IHZvaWQgMCA6IHJlY2VpdmVyLm9iamVjdFN0b3JlKHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gd3JhcCh0YXJnZXRbcHJvcF0pOwogICAgICB9LAogICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZTIpIHsKICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0sCiAgICAgIGhhcyh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24gJiYgKHByb3AgPT09ICJkb25lIiB8fCBwcm9wID09PSAic3RvcmUiKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldDsKICAgICAgfQogICAgfTsKICAgIHVud3JhcCA9ICh2YWx1ZTIpID0+IHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUyKTsKICAgIHJlYWRNZXRob2RzID0gWyJnZXQiLCAiZ2V0S2V5IiwgImdldEFsbCIsICJnZXRBbGxLZXlzIiwgImNvdW50Il07CiAgICB3cml0ZU1ldGhvZHMgPSBbInB1dCIsICJhZGQiLCAiZGVsZXRlIiwgImNsZWFyIl07CiAgICBjYWNoZWRNZXRob2RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7CiAgICAgIC4uLm9sZFRyYXBzLAogICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlciksCiAgICAgIGhhczogKHRhcmdldCwgcHJvcCkgPT4gISFnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5oYXModGFyZ2V0LCBwcm9wKQogICAgfSkpOwogICAgYWR2YW5jZU1ldGhvZFByb3BzID0gWyJjb250aW51ZSIsICJjb250aW51ZVByaW1hcnlLZXkiLCAiYWR2YW5jZSJdOwogICAgbWV0aG9kTWFwID0ge307CiAgICBhZHZhbmNlUmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGN1cnNvckl0ZXJhdG9yVHJhcHMgPSB7CiAgICAgIGdldCh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAoIWFkdmFuY2VNZXRob2RQcm9wcy5pbmNsdWRlcyhwcm9wKSkKICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07CiAgICAgICAgbGV0IGNhY2hlZEZ1bmMgPSBtZXRob2RNYXBbcHJvcF07CiAgICAgICAgaWYgKCFjYWNoZWRGdW5jKSB7CiAgICAgICAgICBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdID0gZnVuY3Rpb24oLi4uYXJncykgewogICAgICAgICAgICBhZHZhbmNlUmVzdWx0cy5zZXQodGhpcywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuZ2V0KHRoaXMpW3Byb3BdKC4uLmFyZ3MpKTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYWNoZWRGdW5jOwogICAgICB9CiAgICB9OwogICAgcmVwbGFjZVRyYXBzKChvbGRUcmFwcykgPT4gKHsKICAgICAgLi4ub2xkVHJhcHMsCiAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CiAgICAgICAgaWYgKGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkpCiAgICAgICAgICByZXR1cm4gaXRlcmF0ZTsKICAgICAgICByZXR1cm4gb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpOwogICAgICB9LAogICAgICBoYXModGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCk7CiAgICAgIH0KICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnN0b3JlX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaW5pdF9idWlsZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMKdmFyIFdlYlN0b3JlOwp2YXIgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3dlYnN0b3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBXZWJTdG9yZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuaW5pdENhbGxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgICBpZiAodGhpcy5pbml0Q2FsbGVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBzbWFydGVudiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMC5TbWFydGVudigpOwogICAgICAgIGlmICghc21hcnRlbnYuaXNCcm93c2VyICYmICFnbG9iYWxUaGlzLmluZGV4ZWREQikgewogICAgICAgICAgY29uc29sZS5sb2coImhleSIpOwogICAgICAgICAgY29uc29sZS5sb2coZ2xvYmFsVGhpcy5pbmRleGVkREIpOwogICAgICAgICAgYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiL2F1dG8iKTsKICAgICAgICAgIGlmICghZ2xvYmFsVGhpcy5pbmRleGVkREIpIHsKICAgICAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiIik7CiAgICAgICAgICAgIGdsb2JhbFRoaXMuaW5kZXhlZERCID0gbmV3IG1vZC5JREJGYWN0b3J5KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZGIgPSBhd2FpdCBidWlsZF9leHBvcnRzLm9wZW5EQih0aGlzLm9wdGlvbnMuZGJOYW1lLCAxLCB7CiAgICAgICAgICB1cGdyYWRlOiAoZGIpID0+IHsKICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0KGtleTIpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5nZXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSwga2V5Mik7CiAgICAgIH0KICAgICAgYXN5bmMgY2hlY2soa2V5QXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQoa2V5QXJnKTsKICAgICAgICByZXR1cm4gISFyZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0KGtleTIsIHZhbCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLnB1dCh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB2YWwsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGRlbGV0ZShrZXkyKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZGVsZXRlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGNsZWFyKCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmNsZWFyKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpOwogICAgICB9CiAgICAgIGFzeW5jIGtleXMoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZ2V0QWxsS2V5cyh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzCnZhciBUeXBlZHJlcXVlc3RDYWNoZTsKdmFyIGluaXRfd2Vic3RvcmVfY2xhc3Nlc190eXBlZHJlcXVlc3RjYWNoZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfY2xhc3Nlc193ZWJzdG9yZSgpOwogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBUeXBlZHJlcXVlc3RDYWNoZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZG9tYWluQXJnID0gImRlZmF1bHQiKSB7CiAgICAgICAgdGhpcy53ZWJzdG9yZSA9IG5ldyBXZWJTdG9yZSh7CiAgICAgICAgICBkYk5hbWU6ICJ0clN0b3JlIiwKICAgICAgICAgIHN0b3JlTmFtZTogYHRyU3RvcmUtJHtkb21haW5Bcmd9YAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGJ1aWxkS2V5KHJlcXVlc3RBcmcpIHsKICAgICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHsKICAgICAgICAgIG1ldGhvZDogcmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0QXJnLnJlcXVlc3QKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3RvcmVzIGJ5IHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGlmICghdHlwZWRyZXF1ZXN0QXJnLnJlc3BvbnNlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc3RvcmUgcmVxdWVzdHMgd2l0aG91dCBhIHJlc3BvbnNlIHByZXNlbnQiKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzdG9yZS5zZXQodGhpcy5idWlsZEtleSh0eXBlZHJlcXVlc3RBcmcpLCB0eXBlZHJlcXVlc3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXQgYnkgZnVsbCB0eW9lZHJlcXVlc3QgYnkgcGFydGlhbCB0eXBlZHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZ2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMud2Vic3RvcmUuZ2V0KHRoaXMuYnVpbGRLZXkodHlwZWRyZXF1ZXN0QXJnKSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTMgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTMsIHsKICBUeXBlZHJlcXVlc3RDYWNoZTogKCkgPT4gVHlwZWRyZXF1ZXN0Q2FjaGUsCiAgV2ViU3RvcmU6ICgpID0+IFdlYlN0b3JlCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3R5cGVkcmVxdWVzdGNhY2hlKCk7CiAgICBpbml0X3dlYnN0b3JlX2NsYXNzZXNfd2Vic3RvcmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy93ZWJyZXF1ZXN0LnBsdWdpbnMuanMKdmFyIGluaXRfd2VicmVxdWVzdF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9jYWNoZS9jYWNoZS5zdG9yZS5qcwp2YXIgQ2FjaGVTdG9yZTsKdmFyIGluaXRfY2FjaGVfc3RvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvY2FjaGUvY2FjaGUuc3RvcmUuanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMoKTsKICAgIENhY2hlU3RvcmUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRiTmFtZSA9ICJ3ZWJyZXF1ZXN0LXY0Iiwgc3RvcmVOYW1lID0gImNhY2hlIikgewogICAgICAgIHRoaXMud2Vic3RvcmUgPSBuZXcgZGlzdF90c19leHBvcnRzMTMuV2ViU3RvcmUoewogICAgICAgICAgZGJOYW1lLAogICAgICAgICAgc3RvcmVOYW1lCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuaW5pdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbml0aWFsaXplIHRoZSBzdG9yZQogICAgICAgKi8KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2VuZXJhdGUgYSBjYWNoZSBrZXkgZnJvbSBhIHJlcXVlc3QKICAgICAgICovCiAgICAgIGdlbmVyYXRlQ2FjaGVLZXkocmVxdWVzdCkgewogICAgICAgIGNvbnN0IHVybCA9IHJlcXVlc3QudXJsOwogICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3QubWV0aG9kOwogICAgICAgIGlmIChtZXRob2QgPT09ICJHRVQiKSB7CiAgICAgICAgICByZXR1cm4gdXJsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7bWV0aG9kfToke3VybH1gOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdG9yZSBhIHJlc3BvbnNlIGluIHRoZSBjYWNoZQogICAgICAgKi8KICAgICAgYXN5bmMgc2V0KGNhY2hlS2V5LCBlbnRyeSkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzdG9yZS5zZXQoY2FjaGVLZXksIGVudHJ5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0cmlldmUgYSBjYWNoZWQgcmVzcG9uc2UKICAgICAgICovCiAgICAgIGFzeW5jIGdldChjYWNoZUtleSkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgdGhpcy53ZWJzdG9yZS5nZXQoY2FjaGVLZXkpOwogICAgICAgICAgcmV0dXJuIGVudHJ5IHx8IG51bGw7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgYSBjYWNoZSBlbnRyeSBleGlzdHMKICAgICAgICovCiAgICAgIGFzeW5jIGhhcyhjYWNoZUtleSkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMud2Vic3RvcmUuY2hlY2soY2FjaGVLZXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZWxldGUgYSBjYWNoZSBlbnRyeQogICAgICAgKi8KICAgICAgYXN5bmMgZGVsZXRlKGNhY2hlS2V5KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTsKICAgICAgICBhd2FpdCB0aGlzLndlYnN0b3JlLmRlbGV0ZShjYWNoZUtleSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGFsbCBjYWNoZSBlbnRyaWVzCiAgICAgICAqLwogICAgICBhc3luYyBjbGVhcigpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXRQcm9taXNlOwogICAgICAgIGF3YWl0IHRoaXMud2Vic3RvcmUuY2xlYXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgUmVzcG9uc2Ugb2JqZWN0IGZyb20gYSBjYWNoZSBlbnRyeQogICAgICAgKi8KICAgICAgcmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShlbnRyeSkgewogICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhlbnRyeS5oZWFkZXJzKTsKICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGVudHJ5LnJlc3BvbnNlLCB7CiAgICAgICAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cywKICAgICAgICAgIHN0YXR1c1RleHQ6IGVudHJ5LnN0YXR1c1RleHQsCiAgICAgICAgICBoZWFkZXJzCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIGNhY2hlIGVudHJ5IGZyb20gYSBSZXNwb25zZSBvYmplY3QKICAgICAgICovCiAgICAgIGFzeW5jIGNhY2hlRW50cnlGcm9tUmVzcG9uc2UodXJsLCByZXNwb25zZSwgbWV0YWRhdGEpIHsKICAgICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IHJlc3BvbnNlLmNsb25lKCk7CiAgICAgICAgY29uc3QgYnVmZmVyMiA9IGF3YWl0IGNsb25lZFJlc3BvbnNlLmFycmF5QnVmZmVyKCk7CiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9OwogICAgICAgIGNsb25lZFJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodmFsdWUyLCBrZXkyKSA9PiB7CiAgICAgICAgICBoZWFkZXJzW2tleTJdID0gdmFsdWUyOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICByZXNwb25zZTogYnVmZmVyMiwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICBldGFnOiBtZXRhZGF0YT8uZXRhZyB8fCBjbG9uZWRSZXNwb25zZS5oZWFkZXJzLmdldCgiZXRhZyIpIHx8IHZvaWQgMCwKICAgICAgICAgIGxhc3RNb2RpZmllZDogbWV0YWRhdGE/Lmxhc3RNb2RpZmllZCB8fCBjbG9uZWRSZXNwb25zZS5oZWFkZXJzLmdldCgibGFzdC1tb2RpZmllZCIpIHx8IHZvaWQgMCwKICAgICAgICAgIG1heEFnZTogbWV0YWRhdGE/Lm1heEFnZSwKICAgICAgICAgIHVybCwKICAgICAgICAgIHN0YXR1czogY2xvbmVkUmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgc3RhdHVzVGV4dDogY2xvbmVkUmVzcG9uc2Uuc3RhdHVzVGV4dAogICAgICAgIH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFBydW5lIGV4cGlyZWQgZW50cmllcyAoZ2FyYmFnZSBjb2xsZWN0aW9uKQogICAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBkZWxldGVkCiAgICAgICAqLwogICAgICBhc3luYyBwcnVuZUV4cGlyZWQoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9jYWNoZS9jYWNoZS5oZWFkZXJzLmpzCmZ1bmN0aW9uIHBhcnNlQ2FjaGVDb250cm9sKGNhY2hlQ29udHJvbEhlYWRlcikgewogIGNvbnN0IG1ldGFkYXRhID0gewogICAgbWF4QWdlOiAwLAogICAgaW1tdXRhYmxlOiBmYWxzZSwKICAgIG5vQ2FjaGU6IGZhbHNlLAogICAgbm9TdG9yZTogZmFsc2UsCiAgICBtdXN0UmV2YWxpZGF0ZTogZmFsc2UKICB9OwogIGlmICghY2FjaGVDb250cm9sSGVhZGVyKSB7CiAgICByZXR1cm4gbWV0YWRhdGE7CiAgfQogIGNvbnN0IGRpcmVjdGl2ZXMgPSBjYWNoZUNvbnRyb2xIZWFkZXIudG9Mb3dlckNhc2UoKS5zcGxpdCgiLCIpLm1hcCgoZDUpID0+IGQ1LnRyaW0oKSk7CiAgZm9yIChjb25zdCBkaXJlY3RpdmUgb2YgZGlyZWN0aXZlcykgewogICAgaWYgKGRpcmVjdGl2ZSA9PT0gIm5vLWNhY2hlIikgewogICAgICBtZXRhZGF0YS5ub0NhY2hlID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoZGlyZWN0aXZlID09PSAibm8tc3RvcmUiKSB7CiAgICAgIG1ldGFkYXRhLm5vU3RvcmUgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkaXJlY3RpdmUgPT09ICJpbW11dGFibGUiKSB7CiAgICAgIG1ldGFkYXRhLmltbXV0YWJsZSA9IHRydWU7CiAgICB9IGVsc2UgaWYgKGRpcmVjdGl2ZSA9PT0gIm11c3QtcmV2YWxpZGF0ZSIpIHsKICAgICAgbWV0YWRhdGEubXVzdFJldmFsaWRhdGUgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkaXJlY3RpdmUuc3RhcnRzV2l0aCgibWF4LWFnZT0iKSkgewogICAgICBjb25zdCBtYXhBZ2UgPSBwYXJzZUludChkaXJlY3RpdmUuc3BsaXQoIj0iKVsxXSwgMTApOwogICAgICBpZiAoIWlzTmFOKG1heEFnZSkpIHsKICAgICAgICBtZXRhZGF0YS5tYXhBZ2UgPSBtYXhBZ2UgKiAxZTM7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG1ldGFkYXRhOwp9CmZ1bmN0aW9uIHBhcnNlRXhwaXJlcyhleHBpcmVzSGVhZGVyKSB7CiAgaWYgKCFleHBpcmVzSGVhZGVyKSB7CiAgICByZXR1cm4gdm9pZCAwOwogIH0KICB0cnkgewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXNIZWFkZXIpOwogICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOwogIH0gY2F0Y2ggewogICAgcmV0dXJuIHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gZXh0cmFjdENhY2hlTWV0YWRhdGEoaGVhZGVycykgewogIGNvbnN0IGNhY2hlQ29udHJvbCA9IGhlYWRlcnMuZ2V0KCJjYWNoZS1jb250cm9sIik7CiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnMuZ2V0KCJleHBpcmVzIik7CiAgY29uc3QgZXRhZyA9IGhlYWRlcnMuZ2V0KCJldGFnIik7CiAgY29uc3QgbGFzdE1vZGlmaWVkID0gaGVhZGVycy5nZXQoImxhc3QtbW9kaWZpZWQiKTsKICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlQ2FjaGVDb250cm9sKGNhY2hlQ29udHJvbCk7CiAgaWYgKG1ldGFkYXRhLm1heEFnZSA9PT0gMCAmJiBleHBpcmVzKSB7CiAgICBjb25zdCBleHBpcmVzVGltZSA9IHBhcnNlRXhwaXJlcyhleHBpcmVzKTsKICAgIGlmIChleHBpcmVzVGltZSkgewogICAgICBtZXRhZGF0YS5tYXhBZ2UgPSBNYXRoLm1heCgwLCBleHBpcmVzVGltZSAtIERhdGUubm93KCkpOwogICAgfQogIH0KICByZXR1cm4gewogICAgbWF4QWdlOiBtZXRhZGF0YS5tYXhBZ2UgfHwgMCwKICAgIGV0YWc6IGV0YWcgfHwgdm9pZCAwLAogICAgbGFzdE1vZGlmaWVkOiBsYXN0TW9kaWZpZWQgfHwgdm9pZCAwLAogICAgaW1tdXRhYmxlOiBtZXRhZGF0YS5pbW11dGFibGUgfHwgZmFsc2UsCiAgICBub0NhY2hlOiBtZXRhZGF0YS5ub0NhY2hlIHx8IGZhbHNlLAogICAgbm9TdG9yZTogbWV0YWRhdGEubm9TdG9yZSB8fCBmYWxzZSwKICAgIG11c3RSZXZhbGlkYXRlOiBtZXRhZGF0YS5tdXN0UmV2YWxpZGF0ZSB8fCBmYWxzZQogIH07Cn0KZnVuY3Rpb24gaXNGcmVzaChjYWNoZUVudHJ5LCBtZXRhZGF0YSkgewogIGlmIChtZXRhZGF0YS5ub1N0b3JlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmIChtZXRhZGF0YS5pbW11dGFibGUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gY2FjaGVFbnRyeS50aW1lc3RhbXA7CiAgY29uc3QgbWF4QWdlID0gY2FjaGVFbnRyeS5tYXhBZ2UgfHwgbWV0YWRhdGEubWF4QWdlIHx8IDA7CiAgaWYgKG1heEFnZSA9PT0gMCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gYWdlIDwgbWF4QWdlOwp9CmZ1bmN0aW9uIHJlcXVpcmVzUmV2YWxpZGF0aW9uKG1ldGFkYXRhKSB7CiAgcmV0dXJuIG1ldGFkYXRhLm5vQ2FjaGUgfHwgbWV0YWRhdGEubXVzdFJldmFsaWRhdGU7Cn0KZnVuY3Rpb24gY3JlYXRlQ29uZGl0aW9uYWxIZWFkZXJzKGNhY2hlRW50cnkpIHsKICBjb25zdCBoZWFkZXJzID0ge307CiAgaWYgKGNhY2hlRW50cnkuZXRhZykgewogICAgaGVhZGVyc1siaWYtbm9uZS1tYXRjaCJdID0gY2FjaGVFbnRyeS5ldGFnOwogIH0KICBpZiAoY2FjaGVFbnRyeS5sYXN0TW9kaWZpZWQpIHsKICAgIGhlYWRlcnNbImlmLW1vZGlmaWVkLXNpbmNlIl0gPSBjYWNoZUVudHJ5Lmxhc3RNb2RpZmllZDsKICB9CiAgcmV0dXJuIGhlYWRlcnM7Cn0KZnVuY3Rpb24gaGVhZGVyc1RvT2JqZWN0KGhlYWRlcnMpIHsKICBjb25zdCBvYmogPSB7fTsKICBoZWFkZXJzLmZvckVhY2goKHZhbHVlMiwga2V5MikgPT4gewogICAgb2JqW2tleTJdID0gdmFsdWUyOwogIH0pOwogIHJldHVybiBvYmo7Cn0KZnVuY3Rpb24gb2JqZWN0VG9IZWFkZXJzKG9iaikgewogIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpOwogIE9iamVjdC5lbnRyaWVzKG9iaikuZm9yRWFjaCgoW2tleTIsIHZhbHVlMl0pID0+IHsKICAgIGhlYWRlcnMuc2V0KGtleTIsIHZhbHVlMik7CiAgfSk7CiAgcmV0dXJuIGhlYWRlcnM7Cn0KdmFyIGluaXRfY2FjaGVfaGVhZGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9jYWNoZS9jYWNoZS5oZWFkZXJzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9jYWNoZS9jYWNoZS5zdHJhdGVnaWVzLmpzCmZ1bmN0aW9uIGdldFN0cmF0ZWd5SGFuZGxlcihzdHJhdGVneSkgewogIHN3aXRjaCAoc3RyYXRlZ3kpIHsKICAgIGNhc2UgIm5ldHdvcmstZmlyc3QiOgogICAgICByZXR1cm4gbmV3IE5ldHdvcmtGaXJzdFN0cmF0ZWd5KCk7CiAgICBjYXNlICJjYWNoZS1maXJzdCI6CiAgICAgIHJldHVybiBuZXcgQ2FjaGVGaXJzdFN0cmF0ZWd5KCk7CiAgICBjYXNlICJzdGFsZS13aGlsZS1yZXZhbGlkYXRlIjoKICAgICAgcmV0dXJuIG5ldyBTdGFsZVdoaWxlUmV2YWxpZGF0ZVN0cmF0ZWd5KCk7CiAgICBjYXNlICJuZXR3b3JrLW9ubHkiOgogICAgICByZXR1cm4gbmV3IE5ldHdvcmtPbmx5U3RyYXRlZ3koKTsKICAgIGNhc2UgImNhY2hlLW9ubHkiOgogICAgICByZXR1cm4gbmV3IENhY2hlT25seVN0cmF0ZWd5KCk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbmV3IE5ldHdvcmtGaXJzdFN0cmF0ZWd5KCk7CiAgfQp9CnZhciBOZXR3b3JrRmlyc3RTdHJhdGVneSwgQ2FjaGVGaXJzdFN0cmF0ZWd5LCBTdGFsZVdoaWxlUmV2YWxpZGF0ZVN0cmF0ZWd5LCBOZXR3b3JrT25seVN0cmF0ZWd5LCBDYWNoZU9ubHlTdHJhdGVneTsKdmFyIGluaXRfY2FjaGVfc3RyYXRlZ2llcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9jYWNoZS9jYWNoZS5zdHJhdGVnaWVzLmpzIigpIHsKICAgIGluaXRfY2FjaGVfc3RvcmUoKTsKICAgIGluaXRfY2FjaGVfaGVhZGVycygpOwogICAgTmV0d29ya0ZpcnN0U3RyYXRlZ3kgPSBjbGFzcyB7CiAgICAgIGFzeW5jIGV4ZWN1dGUoY29udGV4dDIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250ZXh0Mi5mZXRjaEZuKGNvbnRleHQyLnJlcXVlc3QpOwogICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGVSZXNwb25zZShjb250ZXh0MiwgcmVzcG9uc2UpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmVzcG9uc2UsCiAgICAgICAgICAgIGZyb21DYWNoZTogZmFsc2UsCiAgICAgICAgICAgIHJldmFsaWRhdGVkOiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgaWYgKGNvbnRleHQyLmxvZ2dpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBOZXR3b3JrIGZhaWxlZCwgdHJ5aW5nIGNhY2hlOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGNhY2hlZEVudHJ5ID0gYXdhaXQgY29udGV4dDIuY2FjaGVTdG9yZS5nZXQoY29udGV4dDIuY2FjaGVLZXkpOwogICAgICAgICAgaWYgKGNhY2hlZEVudHJ5KSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgcmVzcG9uc2U6IGNvbnRleHQyLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShjYWNoZWRFbnRyeSksCiAgICAgICAgICAgICAgZnJvbUNhY2hlOiB0cnVlLAogICAgICAgICAgICAgIHJldmFsaWRhdGVkOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGNhY2hlUmVzcG9uc2UoY29udGV4dDIsIHJlc3BvbnNlKSB7CiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBleHRyYWN0Q2FjaGVNZXRhZGF0YShyZXNwb25zZS5oZWFkZXJzKTsKICAgICAgICBpZiAobWV0YWRhdGEubm9TdG9yZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBlbnRyeSA9IGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShjb250ZXh0Mi5yZXF1ZXN0LnVybCwgcmVzcG9uc2UsIG1ldGFkYXRhKTsKICAgICAgICBhd2FpdCBjb250ZXh0Mi5jYWNoZVN0b3JlLnNldChjb250ZXh0Mi5jYWNoZUtleSwgZW50cnkpOwogICAgICB9CiAgICB9OwogICAgQ2FjaGVGaXJzdFN0cmF0ZWd5ID0gY2xhc3MgewogICAgICBhc3luYyBleGVjdXRlKGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgY2FjaGVkRW50cnkgPSBhd2FpdCBjb250ZXh0Mi5jYWNoZVN0b3JlLmdldChjb250ZXh0Mi5jYWNoZUtleSk7CiAgICAgICAgaWYgKGNhY2hlZEVudHJ5KSB7CiAgICAgICAgICBjb25zdCBtZXRhZGF0YTIgPSBleHRyYWN0Q2FjaGVNZXRhZGF0YShuZXcgSGVhZGVycyhjYWNoZWRFbnRyeS5oZWFkZXJzKSk7CiAgICAgICAgICBpZiAoaXNGcmVzaChjYWNoZWRFbnRyeSwgbWV0YWRhdGEyKSkgewogICAgICAgICAgICBpZiAoY29udGV4dDIubG9nZ2luZykgewogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJbd2VicmVxdWVzdF0gQ2FjaGUgaGl0IChmcmVzaCk6IiwgY29udGV4dDIucmVxdWVzdC51cmwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgcmVzcG9uc2U6IGNvbnRleHQyLmNhY2hlU3RvcmUucmVzcG9uc2VGcm9tQ2FjaGVFbnRyeShjYWNoZWRFbnRyeSksCiAgICAgICAgICAgICAgZnJvbUNhY2hlOiB0cnVlLAogICAgICAgICAgICAgIHJldmFsaWRhdGVkOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlcXVpcmVzUmV2YWxpZGF0aW9uKG1ldGFkYXRhMikgJiYgKGNhY2hlZEVudHJ5LmV0YWcgfHwgY2FjaGVkRW50cnkubGFzdE1vZGlmaWVkKSkgewogICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXZhbGlkYXRlKGNvbnRleHQyLCBjYWNoZWRFbnRyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjb250ZXh0Mi5sb2dnaW5nKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiW3dlYnJlcXVlc3RdIENhY2hlIG1pc3MsIGZldGNoaW5nOiIsIGNvbnRleHQyLnJlcXVlc3QudXJsKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250ZXh0Mi5mZXRjaEZuKGNvbnRleHQyLnJlcXVlc3QpOwogICAgICAgIGNvbnN0IG1ldGFkYXRhID0gZXh0cmFjdENhY2hlTWV0YWRhdGEocmVzcG9uc2UuaGVhZGVycyk7CiAgICAgICAgaWYgKCFtZXRhZGF0YS5ub1N0b3JlKSB7CiAgICAgICAgICBjb25zdCBlbnRyeSA9IGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShjb250ZXh0Mi5yZXF1ZXN0LnVybCwgcmVzcG9uc2UsIG1ldGFkYXRhKTsKICAgICAgICAgIGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuc2V0KGNvbnRleHQyLmNhY2hlS2V5LCBlbnRyeSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgIGZyb21DYWNoZTogZmFsc2UsCiAgICAgICAgICByZXZhbGlkYXRlZDogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIGFzeW5jIHJldmFsaWRhdGUoY29udGV4dDIsIGNhY2hlZEVudHJ5KSB7CiAgICAgICAgY29uc3QgY29uZGl0aW9uYWxIZWFkZXJzID0gY3JlYXRlQ29uZGl0aW9uYWxIZWFkZXJzKGNhY2hlZEVudHJ5KTsKICAgICAgICBjb25zdCByZXZhbGlkYXRlUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbnRleHQyLnJlcXVlc3QudXJsLCB7CiAgICAgICAgICBtZXRob2Q6IGNvbnRleHQyLnJlcXVlc3QubWV0aG9kLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAuLi5oZWFkZXJzVG9PYmplY3QoY29udGV4dDIucmVxdWVzdC5oZWFkZXJzKSwKICAgICAgICAgICAgLi4uY29uZGl0aW9uYWxIZWFkZXJzCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udGV4dDIuZmV0Y2hGbihyZXZhbGlkYXRlUmVxdWVzdCk7CiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHsKICAgICAgICAgICAgaWYgKGNvbnRleHQyLmxvZ2dpbmcpIHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW3dlYnJlcXVlc3RdIENhY2hlIHJldmFsaWRhdGVkICgzMDQpOiIsIGNvbnRleHQyLnJlcXVlc3QudXJsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWNoZWRFbnRyeS50aW1lc3RhbXAgPSBEYXRlLm5vdygpOwogICAgICAgICAgICBhd2FpdCBjb250ZXh0Mi5jYWNoZVN0b3JlLnNldChjb250ZXh0Mi5jYWNoZUtleSwgY2FjaGVkRW50cnkpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHJlc3BvbnNlOiBjb250ZXh0Mi5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkoY2FjaGVkRW50cnkpLAogICAgICAgICAgICAgIGZyb21DYWNoZTogdHJ1ZSwKICAgICAgICAgICAgICByZXZhbGlkYXRlZDogdHJ1ZQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gZXh0cmFjdENhY2hlTWV0YWRhdGEocmVzcG9uc2UuaGVhZGVycyk7CiAgICAgICAgICAgIGlmICghbWV0YWRhdGEubm9TdG9yZSkgewogICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgY29udGV4dDIuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGNvbnRleHQyLnJlcXVlc3QudXJsLCByZXNwb25zZSwgbWV0YWRhdGEpOwogICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuc2V0KGNvbnRleHQyLmNhY2hlS2V5LCBlbnRyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICBmcm9tQ2FjaGU6IGZhbHNlLAogICAgICAgICAgICByZXZhbGlkYXRlZDogdHJ1ZQogICAgICAgICAgfTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgaWYgKGNvbnRleHQyLmxvZ2dpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlt3ZWJyZXF1ZXN0XSBSZXZhbGlkYXRpb24gZmFpbGVkLCB1c2luZyBjYWNoZToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZXNwb25zZTogY29udGV4dDIuY2FjaGVTdG9yZS5yZXNwb25zZUZyb21DYWNoZUVudHJ5KGNhY2hlZEVudHJ5KSwKICAgICAgICAgICAgZnJvbUNhY2hlOiB0cnVlLAogICAgICAgICAgICByZXZhbGlkYXRlZDogZmFsc2UKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgU3RhbGVXaGlsZVJldmFsaWRhdGVTdHJhdGVneSA9IGNsYXNzIHsKICAgICAgYXN5bmMgZXhlY3V0ZShjb250ZXh0MikgewogICAgICAgIGNvbnN0IGNhY2hlZEVudHJ5ID0gYXdhaXQgY29udGV4dDIuY2FjaGVTdG9yZS5nZXQoY29udGV4dDIuY2FjaGVLZXkpOwogICAgICAgIGlmIChjYWNoZWRFbnRyeSkgewogICAgICAgICAgY29uc3QgY2FjaGVkUmVzcG9uc2UgPSBjb250ZXh0Mi5jYWNoZVN0b3JlLnJlc3BvbnNlRnJvbUNhY2hlRW50cnkoY2FjaGVkRW50cnkpOwogICAgICAgICAgdGhpcy5yZXZhbGlkYXRlSW5CYWNrZ3JvdW5kKGNvbnRleHQyLCBjYWNoZWRFbnRyeSkuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgICAgIGlmIChjb250ZXh0Mi5sb2dnaW5nKSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJbd2VicmVxdWVzdF0gQmFja2dyb3VuZCByZXZhbGlkYXRpb24gZmFpbGVkOiIsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZXNwb25zZTogY2FjaGVkUmVzcG9uc2UsCiAgICAgICAgICAgIGZyb21DYWNoZTogdHJ1ZSwKICAgICAgICAgICAgcmV2YWxpZGF0ZWQ6IGZhbHNlCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnRleHQyLmZldGNoRm4oY29udGV4dDIucmVxdWVzdCk7CiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBleHRyYWN0Q2FjaGVNZXRhZGF0YShyZXNwb25zZS5oZWFkZXJzKTsKICAgICAgICBpZiAoIW1ldGFkYXRhLm5vU3RvcmUgJiYgcmVzcG9uc2Uub2spIHsKICAgICAgICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgY29udGV4dDIuY2FjaGVTdG9yZS5jYWNoZUVudHJ5RnJvbVJlc3BvbnNlKGNvbnRleHQyLnJlcXVlc3QudXJsLCByZXNwb25zZSwgbWV0YWRhdGEpOwogICAgICAgICAgYXdhaXQgY29udGV4dDIuY2FjaGVTdG9yZS5zZXQoY29udGV4dDIuY2FjaGVLZXksIGVudHJ5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgZnJvbUNhY2hlOiBmYWxzZSwKICAgICAgICAgIHJldmFsaWRhdGVkOiBmYWxzZQogICAgICAgIH07CiAgICAgIH0KICAgICAgYXN5bmMgcmV2YWxpZGF0ZUluQmFja2dyb3VuZChjb250ZXh0MiwgY2FjaGVkRW50cnkpIHsKICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGV4dHJhY3RDYWNoZU1ldGFkYXRhKG5ldyBIZWFkZXJzKGNhY2hlZEVudHJ5LmhlYWRlcnMpKTsKICAgICAgICBpZiAoaXNGcmVzaChjYWNoZWRFbnRyeSwgbWV0YWRhdGEpICYmICFyZXF1aXJlc1JldmFsaWRhdGlvbihtZXRhZGF0YSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udGV4dDIuZmV0Y2hGbihjb250ZXh0Mi5yZXF1ZXN0KTsKICAgICAgICAgIGlmIChyZXNwb25zZS5vaykgewogICAgICAgICAgICBjb25zdCBuZXdNZXRhZGF0YSA9IGV4dHJhY3RDYWNoZU1ldGFkYXRhKHJlc3BvbnNlLmhlYWRlcnMpOwogICAgICAgICAgICBpZiAoIW5ld01ldGFkYXRhLm5vU3RvcmUpIHsKICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuY2FjaGVFbnRyeUZyb21SZXNwb25zZShjb250ZXh0Mi5yZXF1ZXN0LnVybCwgcmVzcG9uc2UsIG5ld01ldGFkYXRhKTsKICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0Mi5jYWNoZVN0b3JlLnNldChjb250ZXh0Mi5jYWNoZUtleSwgZW50cnkpOwogICAgICAgICAgICAgIGlmIChjb250ZXh0Mi5sb2dnaW5nKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiW3dlYnJlcXVlc3RdIEJhY2tncm91bmQgcmV2YWxpZGF0aW9uIGNvbXBsZXRlOiIsIGNvbnRleHQyLnJlcXVlc3QudXJsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgaWYgKGNvbnRleHQyLmxvZ2dpbmcpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJbd2VicmVxdWVzdF0gQmFja2dyb3VuZCByZXZhbGlkYXRpb24gZmFpbGVkOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBOZXR3b3JrT25seVN0cmF0ZWd5ID0gY2xhc3MgewogICAgICBhc3luYyBleGVjdXRlKGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250ZXh0Mi5mZXRjaEZuKGNvbnRleHQyLnJlcXVlc3QpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgIGZyb21DYWNoZTogZmFsc2UsCiAgICAgICAgICByZXZhbGlkYXRlZDogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgQ2FjaGVPbmx5U3RyYXRlZ3kgPSBjbGFzcyB7CiAgICAgIGFzeW5jIGV4ZWN1dGUoY29udGV4dDIpIHsKICAgICAgICBjb25zdCBjYWNoZWRFbnRyeSA9IGF3YWl0IGNvbnRleHQyLmNhY2hlU3RvcmUuZ2V0KGNvbnRleHQyLmNhY2hlS2V5KTsKICAgICAgICBpZiAoIWNhY2hlZEVudHJ5KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhY2hlIG1pc3MgZm9yICR7Y29udGV4dDIucmVxdWVzdC51cmx9IChjYWNoZS1vbmx5IG1vZGUpYCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICByZXNwb25zZTogY29udGV4dDIuY2FjaGVTdG9yZS5yZXNwb25zZUZyb21DYWNoZUVudHJ5KGNhY2hlZEVudHJ5KSwKICAgICAgICAgIGZyb21DYWNoZTogdHJ1ZSwKICAgICAgICAgIHJldmFsaWRhdGVkOiBmYWxzZQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvY2FjaGUvY2FjaGUubWFuYWdlci5qcwp2YXIgQ2FjaGVNYW5hZ2VyOwp2YXIgaW5pdF9jYWNoZV9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL2NhY2hlL2NhY2hlLm1hbmFnZXIuanMiKCkgewogICAgaW5pdF9jYWNoZV9zdG9yZSgpOwogICAgaW5pdF9jYWNoZV9zdHJhdGVnaWVzKCk7CiAgICBpbml0X2NhY2hlX2hlYWRlcnMoKTsKICAgIENhY2hlTWFuYWdlciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZGJOYW1lLCBzdG9yZU5hbWUpIHsKICAgICAgICB0aGlzLmNhY2hlU3RvcmUgPSBuZXcgQ2FjaGVTdG9yZShkYk5hbWUsIHN0b3JlTmFtZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEV4ZWN1dGUgYSByZXF1ZXN0IHdpdGggY2FjaGluZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlY3V0ZShyZXF1ZXN0LCBvcHRpb25zLCBmZXRjaEZuKSB7CiAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLmRldGVybWluZVN0cmF0ZWd5KHJlcXVlc3QsIG9wdGlvbnMpOwogICAgICAgIGlmIChzdHJhdGVneSA9PT0gIm5ldHdvcmstb25seSIpIHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hGbihyZXF1ZXN0KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJlc3BvbnNlLAogICAgICAgICAgICBmcm9tQ2FjaGU6IGZhbHNlLAogICAgICAgICAgICByZXZhbGlkYXRlZDogZmFsc2UKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUNhY2hlS2V5KHJlcXVlc3QsIG9wdGlvbnMpOwogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gZ2V0U3RyYXRlZ3lIYW5kbGVyKHN0cmF0ZWd5KTsKICAgICAgICBjb25zdCBjb250ZXh0MiA9IHsKICAgICAgICAgIHJlcXVlc3QsCiAgICAgICAgICBjYWNoZUtleSwKICAgICAgICAgIGNhY2hlU3RvcmU6IHRoaXMuY2FjaGVTdG9yZSwKICAgICAgICAgIGZldGNoRm4sCiAgICAgICAgICBsb2dnaW5nOiBvcHRpb25zLmxvZ2dpbmcKICAgICAgICB9OwogICAgICAgIHJldHVybiBhd2FpdCBoYW5kbGVyMi5leGVjdXRlKGNvbnRleHQyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRGV0ZXJtaW5lIHRoZSBjYWNoaW5nIHN0cmF0ZWd5IGJhc2VkIG9uIG9wdGlvbnMgYW5kIHJlcXVlc3QKICAgICAgICovCiAgICAgIGRldGVybWluZVN0cmF0ZWd5KHJlcXVlc3QsIG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucy5jYWNoZVN0cmF0ZWd5KSB7CiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jYWNoZVN0cmF0ZWd5OwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9ucy5jYWNoZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMubWFwQ2FjaGVNb2RlVG9TdHJhdGVneShvcHRpb25zLmNhY2hlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlcXVlc3QuY2FjaGUpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm1hcENhY2hlTW9kZVRvU3RyYXRlZ3kocmVxdWVzdC5jYWNoZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAibmV0d29yay1maXJzdCI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1hcCBzdGFuZGFyZCBmZXRjaCBjYWNoZSBtb2RlcyB0byBvdXIgc3RyYXRlZ2llcwogICAgICAgKi8KICAgICAgbWFwQ2FjaGVNb2RlVG9TdHJhdGVneShjYWNoZU1vZGUpIHsKICAgICAgICBzd2l0Y2ggKGNhY2hlTW9kZSkgewogICAgICAgICAgY2FzZSAiZGVmYXVsdCI6CiAgICAgICAgICAgIHJldHVybiAibmV0d29yay1maXJzdCI7CiAgICAgICAgICBjYXNlICJuby1zdG9yZSI6CiAgICAgICAgICBjYXNlICJyZWxvYWQiOgogICAgICAgICAgICByZXR1cm4gIm5ldHdvcmstb25seSI7CiAgICAgICAgICBjYXNlICJuby1jYWNoZSI6CiAgICAgICAgICAgIHJldHVybiAibmV0d29yay1maXJzdCI7CiAgICAgICAgICAvLyBXaWxsIHVzZSByZXZhbGlkYXRpb24KICAgICAgICAgIGNhc2UgImZvcmNlLWNhY2hlIjoKICAgICAgICAgICAgcmV0dXJuICJjYWNoZS1maXJzdCI7CiAgICAgICAgICBjYXNlICJvbmx5LWlmLWNhY2hlZCI6CiAgICAgICAgICAgIHJldHVybiAiY2FjaGUtb25seSI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIm5ldHdvcmstZmlyc3QiOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2VuZXJhdGUgY2FjaGUga2V5CiAgICAgICAqLwogICAgICBnZW5lcmF0ZUNhY2hlS2V5KHJlcXVlc3QsIG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucy5jYWNoZUtleSkgewogICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhY2hlS2V5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmNhY2hlS2V5KHJlcXVlc3QpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2FjaGVLZXk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmNhY2hlU3RvcmUuZ2VuZXJhdGVDYWNoZUtleShyZXF1ZXN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgdGhlIGNhY2hlCiAgICAgICAqLwogICAgICBhc3luYyBjbGVhcigpIHsKICAgICAgICBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2xlYXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRGVsZXRlIGEgc3BlY2lmaWMgY2FjaGUgZW50cnkKICAgICAgICovCiAgICAgIGFzeW5jIGRlbGV0ZShjYWNoZUtleSkgewogICAgICAgIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5kZWxldGUoY2FjaGVLZXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIGNhY2hlIGVudHJ5IGV4aXN0cwogICAgICAgKi8KICAgICAgYXN5bmMgaGFzKGNhY2hlS2V5KSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5oYXMoY2FjaGVLZXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgY2FjaGUgc3RvcmUKICAgICAgICovCiAgICAgIGdldFN0b3JlKCkgewogICAgICAgIHJldHVybiB0aGlzLmNhY2hlU3RvcmU7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvcmV0cnkvcmV0cnkuc3RyYXRlZ2llcy5qcwpmdW5jdGlvbiBnZXRCYWNrb2ZmQ2FsY3VsYXRvcihzdHJhdGVneSkgewogIHN3aXRjaCAoc3RyYXRlZ3kpIHsKICAgIGNhc2UgImV4cG9uZW50aWFsIjoKICAgICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTsKICAgIGNhc2UgImxpbmVhciI6CiAgICAgIHJldHVybiBuZXcgTGluZWFyQmFja29mZigpOwogICAgY2FzZSAiY29uc3RhbnQiOgogICAgICByZXR1cm4gbmV3IENvbnN0YW50QmFja29mZigpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTsKICB9Cn0KZnVuY3Rpb24gYWRkSml0dGVyKGRlbGF5Miwgaml0dGVyRmFjdG9yID0gMC4xKSB7CiAgY29uc3Qgaml0dGVyID0gZGVsYXkyICogaml0dGVyRmFjdG9yICogTWF0aC5yYW5kb20oKTsKICByZXR1cm4gZGVsYXkyICsgaml0dGVyOwp9CnZhciBFeHBvbmVudGlhbEJhY2tvZmYsIExpbmVhckJhY2tvZmYsIENvbnN0YW50QmFja29mZjsKdmFyIGluaXRfcmV0cnlfc3RyYXRlZ2llcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9yZXRyeS9yZXRyeS5zdHJhdGVnaWVzLmpzIigpIHsKICAgIEV4cG9uZW50aWFsQmFja29mZiA9IGNsYXNzIHsKICAgICAgY2FsY3VsYXRlKGF0dGVtcHQsIGluaXRpYWxEZWxheSwgbWF4RGVsYXkpIHsKICAgICAgICBjb25zdCBkZWxheTIgPSBpbml0aWFsRGVsYXkgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7CiAgICAgICAgcmV0dXJuIE1hdGgubWluKGRlbGF5MiwgbWF4RGVsYXkpOwogICAgICB9CiAgICB9OwogICAgTGluZWFyQmFja29mZiA9IGNsYXNzIHsKICAgICAgY2FsY3VsYXRlKGF0dGVtcHQsIGluaXRpYWxEZWxheSwgbWF4RGVsYXkpIHsKICAgICAgICBjb25zdCBkZWxheTIgPSBpbml0aWFsRGVsYXkgKiBhdHRlbXB0OwogICAgICAgIHJldHVybiBNYXRoLm1pbihkZWxheTIsIG1heERlbGF5KTsKICAgICAgfQogICAgfTsKICAgIENvbnN0YW50QmFja29mZiA9IGNsYXNzIHsKICAgICAgY2FsY3VsYXRlKGF0dGVtcHQsIGluaXRpYWxEZWxheSwgbWF4RGVsYXkpIHsKICAgICAgICByZXR1cm4gTWF0aC5taW4oaW5pdGlhbERlbGF5LCBtYXhEZWxheSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvcmV0cnkvcmV0cnkubWFuYWdlci5qcwp2YXIgUmV0cnlNYW5hZ2VyOwp2YXIgaW5pdF9yZXRyeV9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3JldHJ5L3JldHJ5Lm1hbmFnZXIuanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMoKTsKICAgIGluaXRfcmV0cnlfc3RyYXRlZ2llcygpOwogICAgUmV0cnlNYW5hZ2VyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICBtYXhBdHRlbXB0czogb3B0aW9ucy5tYXhBdHRlbXB0cyA/PyAzLAogICAgICAgICAgYmFja29mZjogb3B0aW9ucy5iYWNrb2ZmID8/ICJleHBvbmVudGlhbCIsCiAgICAgICAgICBpbml0aWFsRGVsYXk6IG9wdGlvbnMuaW5pdGlhbERlbGF5ID8/IDFlMywKICAgICAgICAgIG1heERlbGF5OiBvcHRpb25zLm1heERlbGF5ID8/IDNlNCwKICAgICAgICAgIHJldHJ5T246IG9wdGlvbnMucmV0cnlPbiA/PyBbNDA4LCA0MjksIDUwMCwgNTAyLCA1MDMsIDUwNF0sCiAgICAgICAgICBvblJldHJ5OiBvcHRpb25zLm9uUmV0cnkgPz8gKCgpID0+IHsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZSBhIHJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpYwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlY3V0ZShleGVjdXRlRm4sIHNob3VsZFJldHJ5Rm4pIHsKICAgICAgICBsZXQgbGFzdEVycm9yOwogICAgICAgIGxldCBsYXN0UmVzcG9uc2U7CiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gdGhpcy5vcHRpb25zLm1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVGbigpOwogICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5zaG91bGRSZXRyeVJlc3BvbnNlKHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgIGxhc3RSZXNwb25zZSA9IHJlc3VsdDsKICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ID09PSB0aGlzLm9wdGlvbnMubWF4QXR0ZW1wdHMpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5MiA9IHRoaXMuY2FsY3VsYXRlRGVsYXkoYXR0ZW1wdCk7CiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub25SZXRyeShhdHRlbXB0LCBuZXcgRXJyb3IoYEhUVFAgJHtyZXN1bHQuc3RhdHVzfWApLCBkZWxheTIpOwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxheShkZWxheTIpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7CiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJldHJ5ID0gc2hvdWxkUmV0cnlGbiA/IHNob3VsZFJldHJ5Rm4oZXJyb3IsIGF0dGVtcHQpIDogdGhpcy5zaG91bGRSZXRyeUVycm9yKGVycm9yKTsKICAgICAgICAgICAgaWYgKGF0dGVtcHQgPT09IHRoaXMub3B0aW9ucy5tYXhBdHRlbXB0cyB8fCAhc2hvdWxkUmV0cnkpIHsKICAgICAgICAgICAgICB0aHJvdyBsYXN0RXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgZGVsYXkyID0gdGhpcy5jYWxjdWxhdGVEZWxheShhdHRlbXB0KTsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uUmV0cnkoYXR0ZW1wdCwgbGFzdEVycm9yLCBkZWxheTIpOwogICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KGRlbGF5Mik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoIk1heCByZXRyeSBhdHRlbXB0cyByZWFjaGVkIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEV4ZWN1dGUgd2l0aCBtdWx0aXBsZSBmYWxsYmFjayBVUkxzCiAgICAgICAqLwogICAgICBhc3luYyBleGVjdXRlV2l0aEZhbGxiYWNrcyh1cmxzLCByZXF1ZXN0SW5pdCwgZmV0Y2hGbikgewogICAgICAgIGlmICh1cmxzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBVUkxzIHByb3ZpZGVkIGZvciBmYWxsYmFjayBleGVjdXRpb24iKTsKICAgICAgICB9CiAgICAgICAgbGV0IGxhc3RFcnJvcjsKICAgICAgICBjb25zdCBmYWlsZWRVcmxzID0gW107CiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmZXRjaEZuKHVybCwgcmVxdWVzdEluaXQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IDQwMCkgewogICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDQwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA1MDAgJiYgcmVzcG9uc2Uuc3RhdHVzICE9PSA0MDgpIHsKICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmFpbGVkVXJscy5wdXNoKHVybCk7CiAgICAgICAgICAgIGxhc3RFcnJvciA9IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBmYWlsZWRVcmxzLnB1c2godXJsKTsKICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsbCBVUkxzIGZhaWxlZDogJHtmYWlsZWRVcmxzLmpvaW4oIiwgIil9LiBMYXN0IGVycm9yOiAke2xhc3RFcnJvcj8ubWVzc2FnZSB8fCAiVW5rbm93biBlcnJvciJ9YCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIHdlIHNob3VsZCByZXRyeSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMKICAgICAgICovCiAgICAgIHNob3VsZFJldHJ5UmVzcG9uc2UocmVzcG9uc2UpIHsKICAgICAgICBjb25zdCByZXRyeU9uID0gdGhpcy5vcHRpb25zLnJldHJ5T247CiAgICAgICAgaWYgKHR5cGVvZiByZXRyeU9uID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gcmV0cnlPbihyZXNwb25zZSk7CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJldHJ5T24pKSB7CiAgICAgICAgICByZXR1cm4gcmV0cnlPbi5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIHdlIHNob3VsZCByZXRyeSBiYXNlZCBvbiBlcnJvcgogICAgICAgKi8KICAgICAgc2hvdWxkUmV0cnlFcnJvcihlcnJvcikgewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCJmZXRjaCIpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICJBYm9ydEVycm9yIiB8fCBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCJ0aW1lb3V0IikpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXRyeU9uID0gdGhpcy5vcHRpb25zLnJldHJ5T247CiAgICAgICAgaWYgKHR5cGVvZiByZXRyeU9uID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICByZXR1cm4gcmV0cnlPbih2b2lkIDAsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDYWxjdWxhdGUgZGVsYXkgZm9yIG5leHQgcmV0cnkKICAgICAgICovCiAgICAgIGNhbGN1bGF0ZURlbGF5KGF0dGVtcHQpIHsKICAgICAgICBjb25zdCBjYWxjdWxhdG9yID0gZ2V0QmFja29mZkNhbGN1bGF0b3IodGhpcy5vcHRpb25zLmJhY2tvZmYpOwogICAgICAgIGNvbnN0IGJhc2VEZWxheSA9IGNhbGN1bGF0b3IuY2FsY3VsYXRlKGF0dGVtcHQsIHRoaXMub3B0aW9ucy5pbml0aWFsRGVsYXksIHRoaXMub3B0aW9ucy5tYXhEZWxheSk7CiAgICAgICAgcmV0dXJuIGFkZEppdHRlcihiYXNlRGVsYXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZWxheSBleGVjdXRpb24KICAgICAgICovCiAgICAgIGFzeW5jIGRlbGF5KG1zKSB7CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihtcyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvdXRpbHMvZGVkdXBsaWNhdG9yLmpzCnZhciBSZXF1ZXN0RGVkdXBsaWNhdG9yOwp2YXIgaW5pdF9kZWR1cGxpY2F0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvdXRpbHMvZGVkdXBsaWNhdG9yLmpzIigpIHsKICAgIGluaXRfd2VicmVxdWVzdF9wbHVnaW5zKCk7CiAgICBSZXF1ZXN0RGVkdXBsaWNhdG9yID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmluRmxpZ2h0UmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZSBhIGRlZHVwbGljYXRpb24ga2V5IGZyb20gYSByZXF1ZXN0CiAgICAgICAqLwogICAgICBnZW5lcmF0ZUtleShyZXF1ZXN0KSB7CiAgICAgICAgY29uc3QgdXJsID0gcmVxdWVzdC51cmw7CiAgICAgICAgY29uc3QgbWV0aG9kID0gcmVxdWVzdC5tZXRob2Q7CiAgICAgICAgaWYgKG1ldGhvZCA9PT0gIkdFVCIgfHwgbWV0aG9kID09PSAiSEVBRCIpIHsKICAgICAgICAgIHJldHVybiBgJHttZXRob2R9OiR7dXJsfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBgJHttZXRob2R9OiR7dXJsfToke0RhdGUubm93KCl9YDsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZSBhIHJlcXVlc3Qgd2l0aCBkZWR1cGxpY2F0aW9uCiAgICAgICAqLwogICAgICBhc3luYyBleGVjdXRlKGtleTIsIGV4ZWN1dGVGbikgewogICAgICAgIGNvbnN0IGV4aXN0aW5nRGVmZXJyZWQgPSB0aGlzLmluRmxpZ2h0UmVxdWVzdHMuZ2V0KGtleTIpOwogICAgICAgIGlmIChleGlzdGluZ0RlZmVycmVkKSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGV4aXN0aW5nRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZS5jbG9uZSgpLAogICAgICAgICAgICB3YXNEZWR1cGxpY2F0ZWQ6IHRydWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRlZmVycmVkMiA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5zZXQoa2V5MiwgZGVmZXJyZWQyKTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlRm4oKTsKICAgICAgICAgIGRlZmVycmVkMi5yZXNvbHZlKHJlc3BvbnNlKTsKICAgICAgICAgIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5kZWxldGUoa2V5Mik7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZXNwb25zZSwKICAgICAgICAgICAgd2FzRGVkdXBsaWNhdGVkOiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgZGVmZXJyZWQyLnJlamVjdChlcnJvcik7CiAgICAgICAgICB0aGlzLmluRmxpZ2h0UmVxdWVzdHMuZGVsZXRlKGtleTIpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIHJlcXVlc3QgaXMgY3VycmVudGx5IGluIGZsaWdodAogICAgICAgKi8KICAgICAgaXNJbkZsaWdodChrZXkyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5oYXMoa2V5Mik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGluLWZsaWdodCByZXF1ZXN0cwogICAgICAgKi8KICAgICAgZ2V0SW5GbGlnaHRDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbkZsaWdodFJlcXVlc3RzLnNpemU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGFsbCBpbi1mbGlnaHQgcmVxdWVzdHMKICAgICAgICovCiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5jbGVhcigpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3V0aWxzL3RpbWVvdXQuanMKZnVuY3Rpb24gY3JlYXRlVGltZW91dENvbnRyb2xsZXIodGltZW91dE1zKSB7CiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICBjb25zdCB0aW1lb3V0MiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMzLlRpbWVvdXQodGltZW91dE1zLCBudWxsKTsKICB0aW1lb3V0Mi5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgY29udHJvbGxlci5hYm9ydCgpOwogIH0pOwogIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7CiAgICB0aW1lb3V0Mi5jYW5jZWwoKTsKICB9OwogIHJldHVybiB7IGNvbnRyb2xsZXIsIGNsZWFudXAgfTsKfQphc3luYyBmdW5jdGlvbiBmZXRjaFdpdGhUaW1lb3V0KHVybCwgaW5pdCwgdGltZW91dE1zKSB7CiAgY29uc3QgeyBjb250cm9sbGVyLCBjbGVhbnVwIH0gPSBjcmVhdGVUaW1lb3V0Q29udHJvbGxlcih0aW1lb3V0TXMpOwogIHRyeSB7CiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgewogICAgICAuLi5pbml0LAogICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsCiAgICB9KTsKICAgIGNsZWFudXAoKTsKICAgIHJldHVybiByZXNwb25zZTsKICB9IGNhdGNoIChlcnJvcikgewogICAgY2xlYW51cCgpOwogICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gIkFib3J0RXJyb3IiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCB0aW1lb3V0IGFmdGVyICR7dGltZW91dE1zfW1zOiAke3VybH1gKTsKICAgIH0KICAgIHRocm93IGVycm9yOwogIH0KfQp2YXIgaW5pdF90aW1lb3V0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy91dGlscy90aW1lb3V0LmpzIigpIHsKICAgIGluaXRfd2VicmVxdWVzdF9wbHVnaW5zKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5jbGllbnQuanMKdmFyIFdlYnJlcXVlc3RDbGllbnQ7CnZhciBpbml0X3dlYnJlcXVlc3RfY2xpZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QuY2xpZW50LmpzIigpIHsKICAgIGluaXRfaW50ZXJjZXB0b3JfbWFuYWdlcigpOwogICAgaW5pdF9jYWNoZV9tYW5hZ2VyKCk7CiAgICBpbml0X3JldHJ5X21hbmFnZXIoKTsKICAgIGluaXRfZGVkdXBsaWNhdG9yKCk7CiAgICBpbml0X3RpbWVvdXQyKCk7CiAgICBXZWJyZXF1ZXN0Q2xpZW50ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHsKICAgICAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9uczsKICAgICAgICB0aGlzLmludGVyY2VwdG9yTWFuYWdlciA9IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKTsKICAgICAgICB0aGlzLmNhY2hlTWFuYWdlciA9IG5ldyBDYWNoZU1hbmFnZXIoKTsKICAgICAgICB0aGlzLmRlZHVwbGljYXRvciA9IG5ldyBSZXF1ZXN0RGVkdXBsaWNhdG9yKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIGdsb2JhbCByZXF1ZXN0IGludGVyY2VwdG9yCiAgICAgICAqLwogICAgICBhZGRSZXF1ZXN0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpIHsKICAgICAgICB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5hZGRSZXF1ZXN0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBZGQgYSBnbG9iYWwgcmVzcG9uc2UgaW50ZXJjZXB0b3IKICAgICAgICovCiAgICAgIGFkZFJlc3BvbnNlSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpIHsKICAgICAgICB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5hZGRSZXNwb25zZUludGVyY2VwdG9yKGludGVyY2VwdG9yKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQWRkIGEgZ2xvYmFsIGVycm9yIGludGVyY2VwdG9yCiAgICAgICAqLwogICAgICBhZGRFcnJvckludGVyY2VwdG9yKGludGVyY2VwdG9yKSB7CiAgICAgICAgdGhpcy5pbnRlcmNlcHRvck1hbmFnZXIuYWRkRXJyb3JJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhIHJlcXVlc3QgaW50ZXJjZXB0b3IKICAgICAgICovCiAgICAgIHJlbW92ZVJlcXVlc3RJbnRlcmNlcHRvcihpbnRlcmNlcHRvcikgewogICAgICAgIHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnJlbW92ZVJlcXVlc3RJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhIHJlc3BvbnNlIGludGVyY2VwdG9yCiAgICAgICAqLwogICAgICByZW1vdmVSZXNwb25zZUludGVyY2VwdG9yKGludGVyY2VwdG9yKSB7CiAgICAgICAgdGhpcy5pbnRlcmNlcHRvck1hbmFnZXIucmVtb3ZlUmVzcG9uc2VJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhbiBlcnJvciBpbnRlcmNlcHRvcgogICAgICAgKi8KICAgICAgcmVtb3ZlRXJyb3JJbnRlcmNlcHRvcihpbnRlcmNlcHRvcikgewogICAgICAgIHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnJlbW92ZUVycm9ySW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzCiAgICAgICAqLwogICAgICBjbGVhckludGVyY2VwdG9ycygpIHsKICAgICAgICB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5jbGVhckFsbCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDbGVhciB0aGUgY2FjaGUKICAgICAgICovCiAgICAgIGFzeW5jIGNsZWFyQ2FjaGUoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5jYWNoZU1hbmFnZXIuY2xlYXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZSBhIHJlcXVlc3Qgd2l0aCBhbGwgY29uZmlndXJlZCBmZWF0dXJlcwogICAgICAgKi8KICAgICAgYXN5bmMgcmVxdWVzdCh1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7CiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRPcHRpb25zLAogICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgIH07CiAgICAgICAgbGV0IHJlcXVlc3Q7CiAgICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBtZXJnZWRPcHRpb25zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVxdWVzdCA9IHVybDsKICAgICAgICB9CiAgICAgICAgcmVxdWVzdCA9IGF3YWl0IHRoaXMuaW50ZXJjZXB0b3JNYW5hZ2VyLnByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QpOwogICAgICAgIGlmIChtZXJnZWRPcHRpb25zLmludGVyY2VwdG9ycz8ucmVxdWVzdCkgewogICAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBtZXJnZWRPcHRpb25zLmludGVyY2VwdG9ycy5yZXF1ZXN0KSB7CiAgICAgICAgICAgIHJlcXVlc3QgPSBhd2FpdCBpbnRlcmNlcHRvcihyZXF1ZXN0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgZGVkdXBsaWNhdGUgPSBtZXJnZWRPcHRpb25zLmRlZHVwbGljYXRlID8/IGZhbHNlOwogICAgICAgIGlmIChkZWR1cGxpY2F0ZSkgewogICAgICAgICAgY29uc3QgZGVkdXBlS2V5ID0gdGhpcy5kZWR1cGxpY2F0b3IuZ2VuZXJhdGVLZXkocmVxdWVzdCk7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRlZHVwbGljYXRvci5leGVjdXRlKGRlZHVwZUtleSwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyZXF1ZXN0LCBtZXJnZWRPcHRpb25zKTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXNwb25zZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3QocmVxdWVzdCwgbWVyZ2VkT3B0aW9ucyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEludGVybmFsIHJlcXVlc3QgZXhlY3V0aW9uIHdpdGggY2FjaGluZyBhbmQgcmV0cnkKICAgICAgICovCiAgICAgIGFzeW5jIGV4ZWN1dGVSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmV0cnlPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMucmV0cnkgPT09ICJvYmplY3QiID8gb3B0aW9ucy5yZXRyeSA6IG9wdGlvbnMucmV0cnkgPyB7fSA6IHZvaWQgMDsKICAgICAgICAgIGNvbnN0IGZldGNoRm5Gb3JSZXF1ZXN0ID0gYXN5bmMgKHJlcSkgPT4gewogICAgICAgICAgICBjb25zdCB0aW1lb3V0MiA9IG9wdGlvbnMudGltZW91dCA/PyA2ZTQ7CiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFdpdGhUaW1lb3V0KHJlcS51cmwsIHsKICAgICAgICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsCiAgICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsCiAgICAgICAgICAgICAgYm9keTogcmVxLmJvZHksCiAgICAgICAgICAgICAgLi4ub3B0aW9ucwogICAgICAgICAgICB9LCB0aW1lb3V0Mik7CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgZmV0Y2hGbkZvckZhbGxiYWNrcyA9IGFzeW5jICh1cmwsIGluaXQpID0+IHsKICAgICAgICAgICAgY29uc3QgdGltZW91dDIgPSBvcHRpb25zLnRpbWVvdXQgPz8gNmU0OwogICAgICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hXaXRoVGltZW91dCh1cmwsIGluaXQsIHRpbWVvdXQyKTsKICAgICAgICAgIH07CiAgICAgICAgICBsZXQgcmVzcG9uc2U7CiAgICAgICAgICBpZiAocmV0cnlPcHRpb25zKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHJ5TWFuYWdlciA9IG5ldyBSZXRyeU1hbmFnZXIocmV0cnlPcHRpb25zKTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmFsbGJhY2tVcmxzICYmIG9wdGlvbnMuZmFsbGJhY2tVcmxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBjb25zdCBhbGxVcmxzID0gW3JlcXVlc3QudXJsLCAuLi5vcHRpb25zLmZhbGxiYWNrVXJsc107CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXRyeU1hbmFnZXIuZXhlY3V0ZVdpdGhGYWxsYmFja3MoYWxsVXJscywgewogICAgICAgICAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycywKICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3QuYm9keSwKICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMKICAgICAgICAgICAgICB9LCBmZXRjaEZuRm9yRmFsbGJhY2tzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHJldHJ5TWFuYWdlci5leGVjdXRlKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FjaGVNYW5hZ2VyLmV4ZWN1dGUocmVxdWVzdCwgb3B0aW9ucywgZmV0Y2hGbkZvclJlcXVlc3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXNwb25zZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWNoZU1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0LCBvcHRpb25zLCBmZXRjaEZuRm9yUmVxdWVzdCk7CiAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzdWx0LnJlc3BvbnNlOwogICAgICAgICAgfQogICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJjZXB0b3JzPy5yZXNwb25zZSkgewogICAgICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIG9wdGlvbnMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBpbnRlcmNlcHRvcihyZXNwb25zZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc3QgcHJvY2Vzc2VkRXJyb3IgPSBhd2FpdCB0aGlzLmludGVyY2VwdG9yTWFuYWdlci5wcm9jZXNzRXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTsKICAgICAgICAgIHRocm93IHByb2Nlc3NlZEVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kOiBHRVQgcmVxdWVzdCByZXR1cm5pbmcgSlNPTgogICAgICAgKi8KICAgICAgYXN5bmMgZ2V0SnNvbih1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwgewogICAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgIEFjY2VwdDogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMgfHwge30KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZDogUE9TVCByZXF1ZXN0IHdpdGggSlNPTiBib2R5CiAgICAgICAqLwogICAgICBhc3luYyBwb3N0SnNvbih1cmwsIGRhdGExMSwgb3B0aW9ucyA9IHt9KSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsLCB7CiAgICAgICAgICAuLi5vcHRpb25zLAogICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgIEFjY2VwdDogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMgfHwge30KICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhMTEpCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2Q6IFBVVCByZXF1ZXN0IHdpdGggSlNPTiBib2R5CiAgICAgICAqLwogICAgICBhc3luYyBwdXRKc29uKHVybCwgZGF0YTExLCBvcHRpb25zID0ge30pIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmwsIHsKICAgICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgICBtZXRob2Q6ICJQVVQiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICBBY2NlcHQ6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzIHx8IHt9CiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YTExKQogICAgICAgIH0pOwogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kOiBERUxFVEUgcmVxdWVzdAogICAgICAgKi8KICAgICAgYXN5bmMgZGVsZXRlSnNvbih1cmwsIG9wdGlvbnMgPSB7fSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwgewogICAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICAgIG1ldGhvZDogIkRFTEVURSIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgIEFjY2VwdDogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMgfHwge30KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5mdW5jdGlvbi5qcwphc3luYyBmdW5jdGlvbiB3ZWJyZXF1ZXN0KGlucHV0LCBpbml0KSB7CiAgY29uc3QgdXJsID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXQudXJsIDogU3RyaW5nKGlucHV0KTsKICBjb25zdCByZXF1ZXN0ID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXQgOiBuZXcgUmVxdWVzdCh1cmwsIGluaXQpOwogIHJldHVybiBhd2FpdCBkZWZhdWx0Q2xpZW50LnJlcXVlc3QocmVxdWVzdCwgaW5pdCk7Cn0KdmFyIGRlZmF1bHRDbGllbnQ7CnZhciBpbml0X3dlYnJlcXVlc3RfZnVuY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5mdW5jdGlvbi5qcyIoKSB7CiAgICBpbml0X3dlYnJlcXVlc3RfY2xpZW50KCk7CiAgICBkZWZhdWx0Q2xpZW50ID0gbmV3IFdlYnJlcXVlc3RDbGllbnQoKTsKICAgIHdlYnJlcXVlc3QuZ2V0SnNvbiA9IGFzeW5jIGZ1bmN0aW9uKHVybCwgb3B0aW9ucykgewogICAgICByZXR1cm4gYXdhaXQgZGVmYXVsdENsaWVudC5nZXRKc29uKHVybCwgb3B0aW9ucyk7CiAgICB9OwogICAgd2VicmVxdWVzdC5wb3N0SnNvbiA9IGFzeW5jIGZ1bmN0aW9uKHVybCwgZGF0YTExLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBhd2FpdCBkZWZhdWx0Q2xpZW50LnBvc3RKc29uKHVybCwgZGF0YTExLCBvcHRpb25zKTsKICAgIH07CiAgICB3ZWJyZXF1ZXN0LnB1dEpzb24gPSBhc3luYyBmdW5jdGlvbih1cmwsIGRhdGExMSwgb3B0aW9ucykgewogICAgICByZXR1cm4gYXdhaXQgZGVmYXVsdENsaWVudC5wdXRKc29uKHVybCwgZGF0YTExLCBvcHRpb25zKTsKICAgIH07CiAgICB3ZWJyZXF1ZXN0LmRlbGV0ZUpzb24gPSBhc3luYyBmdW5jdGlvbih1cmwsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGF3YWl0IGRlZmF1bHRDbGllbnQuZGVsZXRlSnNvbih1cmwsIG9wdGlvbnMpOwogICAgfTsKICAgIHdlYnJlcXVlc3QuYWRkUmVxdWVzdEludGVyY2VwdG9yID0gZnVuY3Rpb24oaW50ZXJjZXB0b3IpIHsKICAgICAgZGVmYXVsdENsaWVudC5hZGRSZXF1ZXN0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpOwogICAgfTsKICAgIHdlYnJlcXVlc3QuYWRkUmVzcG9uc2VJbnRlcmNlcHRvciA9IGZ1bmN0aW9uKGludGVyY2VwdG9yKSB7CiAgICAgIGRlZmF1bHRDbGllbnQuYWRkUmVzcG9uc2VJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7CiAgICB9OwogICAgd2VicmVxdWVzdC5hZGRFcnJvckludGVyY2VwdG9yID0gZnVuY3Rpb24oaW50ZXJjZXB0b3IpIHsKICAgICAgZGVmYXVsdENsaWVudC5hZGRFcnJvckludGVyY2VwdG9yKGludGVyY2VwdG9yKTsKICAgIH07CiAgICB3ZWJyZXF1ZXN0LmNsZWFySW50ZXJjZXB0b3JzID0gZnVuY3Rpb24oKSB7CiAgICAgIGRlZmF1bHRDbGllbnQuY2xlYXJJbnRlcmNlcHRvcnMoKTsKICAgIH07CiAgICB3ZWJyZXF1ZXN0LmNsZWFyQ2FjaGUgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgYXdhaXQgZGVmYXVsdENsaWVudC5jbGVhckNhY2hlKCk7CiAgICB9OwogICAgd2VicmVxdWVzdC5jcmVhdGVDbGllbnQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgIHJldHVybiBuZXcgV2VicmVxdWVzdENsaWVudChvcHRpb25zKTsKICAgIH07CiAgICB3ZWJyZXF1ZXN0LmdldERlZmF1bHRDbGllbnQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRDbGllbnQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNCwgewogIENhY2hlTWFuYWdlcjogKCkgPT4gQ2FjaGVNYW5hZ2VyLAogIENhY2hlU3RvcmU6ICgpID0+IENhY2hlU3RvcmUsCiAgSW50ZXJjZXB0b3JNYW5hZ2VyOiAoKSA9PiBJbnRlcmNlcHRvck1hbmFnZXIsCiAgUmVxdWVzdERlZHVwbGljYXRvcjogKCkgPT4gUmVxdWVzdERlZHVwbGljYXRvciwKICBSZXRyeU1hbmFnZXI6ICgpID0+IFJldHJ5TWFuYWdlciwKICBXZWJyZXF1ZXN0Q2xpZW50OiAoKSA9PiBXZWJyZXF1ZXN0Q2xpZW50LAogIGNyZWF0ZUNvbmRpdGlvbmFsSGVhZGVyczogKCkgPT4gY3JlYXRlQ29uZGl0aW9uYWxIZWFkZXJzLAogIGV4dHJhY3RDYWNoZU1ldGFkYXRhOiAoKSA9PiBleHRyYWN0Q2FjaGVNZXRhZGF0YSwKICBoZWFkZXJzVG9PYmplY3Q6ICgpID0+IGhlYWRlcnNUb09iamVjdCwKICBpc0ZyZXNoOiAoKSA9PiBpc0ZyZXNoLAogIG9iamVjdFRvSGVhZGVyczogKCkgPT4gb2JqZWN0VG9IZWFkZXJzLAogIHJlcXVpcmVzUmV2YWxpZGF0aW9uOiAoKSA9PiByZXF1aXJlc1JldmFsaWRhdGlvbiwKICB3ZWJyZXF1ZXN0OiAoKSA9PiB3ZWJyZXF1ZXN0Cn0pOwp2YXIgaW5pdF9kaXN0X3RzMTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X2Z1bmN0aW9uKCk7CiAgICBpbml0X3dlYnJlcXVlc3RfY2xpZW50KCk7CiAgICBpbml0X2NhY2hlX21hbmFnZXIoKTsKICAgIGluaXRfY2FjaGVfc3RvcmUoKTsKICAgIGluaXRfcmV0cnlfbWFuYWdlcigpOwogICAgaW5pdF9pbnRlcmNlcHRvcl9tYW5hZ2VyKCk7CiAgICBpbml0X2RlZHVwbGljYXRvcigpOwogICAgaW5pdF9jYWNoZV9oZWFkZXJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMKdmFyIGlzb3VuaXF1ZTI7CnZhciBpbml0X3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaXNvdW5pcXVlMiA9IF9fdG9FU00ocmVxdWlyZV9kaXN0X3RzKCksIDEpOwogICAgaW5pdF9kaXN0X3RzNygpOwogICAgaW5pdF9kaXN0X3RzOCgpOwogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzOSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcmVzcG9uc2VlcnJvci5qcwp2YXIgVHlwZWRSZXNwb25zZUVycm9yOwp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNi9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFJlc3BvbnNlRXJyb3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGVycm9yVGV4dEFyZywgZXJyb3JEYXRhQXJnKSB7CiAgICAgICAgdGhpcy5lcnJvclRleHQgPSBlcnJvclRleHRBcmc7CiAgICAgICAgdGhpcy5lcnJvckRhdGEgPSBlcnJvckRhdGFBcmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0b29scy5qcwp2YXIgVHlwZWRUb29sczsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdG9vbHMuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRvb2xzID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvY2FsRGF0YSA9IHt9OwogICAgICB9CiAgICAgIGFzeW5jIHBhc3NHdWFyZHMoZ3VhcmRzQXJnLCBkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgZ3VhcmRTZXQgPSBuZXcgZGlzdF90c19leHBvcnRzOS5HdWFyZFNldChndWFyZHNBcmcpOwogICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gYXdhaXQgZ3VhcmRTZXQuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTsKICAgICAgICBpZiAoIWd1YXJkUmVzdWx0KSB7CiAgICAgICAgICBjb25zdCBmYWlsZWRIaW50ID0gYXdhaXQgZ3VhcmRTZXQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IoYGd1YXJkIGZhaWxlZDogJHtmYWlsZWRIaW50fWAsIHsgZmFpbGVkSGludCB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRoYW5kbGVyLmpzCnZhciBUeXBlZEhhbmRsZXI7CnZhciBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzKCk7CiAgICBUeXBlZEhhbmRsZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7CiAgICAgICAgdGhpcy5oYW5kbGVyRnVuY3Rpb24gPSBoYW5kbGVyRnVuY3Rpb25Bcmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgYSByZXNwb25zZSB0byB0aGUgdHlwZWRSZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3RBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFkZFJlc3BvbnNlKHR5cGVkUmVxdWVzdEFyZykgewogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmcubWV0aG9kICE9PSB0aGlzLm1ldGhvZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aGlzIGhhbmRsZXIgaGFzIGJlZW4gZ2l2ZW4gYSB3cm9uZyBtZXRob2QgdG8gYW5zd2VyIHRvLiBQbGVhc2UgdXNlIGEgVHlwZWRSb3V0ZXIgdG8gZmlsdGVyIHJlcXVlc3RzIik7CiAgICAgICAgfQogICAgICAgIGxldCB0eXBlZFJlc3BvbnNlRXJyb3I7CiAgICAgICAgY29uc3QgdHlwZWR0b29sc0luc3RhbmNlID0gbmV3IFR5cGVkVG9vbHMoKTsKICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSkgewogICAgICAgICAgdHlwZWR0b29sc0luc3RhbmNlLmxvY2FsRGF0YSA9IHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGE7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVyRnVuY3Rpb24odHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QsIHR5cGVkdG9vbHNJbnN0YW5jZSkuY2F0Y2goKGUxMSkgPT4gewogICAgICAgICAgaWYgKGUxMSBpbnN0YW5jZW9mIFR5cGVkUmVzcG9uc2VFcnJvcikgewogICAgICAgICAgICB0eXBlZFJlc3BvbnNlRXJyb3IgPSBlMTE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZyhlMTEpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh0eXBlZFJlc3BvbnNlRXJyb3IpIHsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5lcnJvciA9IHsKICAgICAgICAgICAgdGV4dDogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yVGV4dCwKICAgICAgICAgICAgZGF0YTogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yRGF0YQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3BvbnNlKSB7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UgPSByZXNwb25zZTsKICAgICAgICB9CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPyB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAicmVzcG9uc2UiIDogbnVsbDsKICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcm91dGVyLmpzCnZhciBUeXBlZFJvdXRlcjsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNi9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJvdXRlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc192aXJ0dWFsc3RyZWFtKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBUeXBlZFJvdXRlciA9IGNsYXNzIF9UeXBlZFJvdXRlciB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuaG9va3MgPSB7fTsKICAgICAgICB0aGlzLnJvdXRlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuaGFuZGxlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuT2JqZWN0TWFwKCk7CiAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2LkludGVyZXN0TWFwKChjb3JyZWxhdGlvbklkKSA9PiBjb3JyZWxhdGlvbklkKTsKICAgICAgfQogICAgICAvLyBVc2UgZ2xvYmFsVGhpcyBmb3IgY3Jvc3MtYnVuZGxlIGhvb2sgc2hhcmluZwogICAgICBzdGF0aWMgZ2V0IGdsb2JhbEhvb2tzKCkgewogICAgICAgIGlmICghZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rczsKICAgICAgfQogICAgICBzdGF0aWMgc2V0IGdsb2JhbEhvb2tzKHZhbHVlMikgewogICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0gdmFsdWUyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgZ2xvYmFsIGhvb2tzIGZvciBtb25pdG9yaW5nIGFsbCBUeXBlZFJlcXVlc3QgdHJhZmZpYwogICAgICAgKiBIb29rcyBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgYnVuZGxlcyB2aWEgZ2xvYmFsVGhpcwogICAgICAgKi8KICAgICAgc3RhdGljIHNldEdsb2JhbEhvb2tzKGhvb2tzOCkgewogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBfVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3M7CiAgICAgICAgX1R5cGVkUm91dGVyLmdsb2JhbEhvb2tzID0geyAuLi5jdXJyZW50LCAuLi5ob29rczggfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgYWxsIGdsb2JhbCBob29rcwogICAgICAgKi8KICAgICAgc3RhdGljIGNsZWFyR2xvYmFsSG9va3MoKSB7CiAgICAgICAgZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGluc3RhbmNlLWxldmVsIGhvb2tzIGZvciBtb25pdG9yaW5nIHRyYWZmaWMgdGhyb3VnaCB0aGlzIHJvdXRlcgogICAgICAgKi8KICAgICAgc2V0SG9va3MoaG9va3M4KSB7CiAgICAgICAgdGhpcy5ob29rcyA9IHsgLi4udGhpcy5ob29rcywgLi4uaG9va3M4IH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhlbHBlciB0byBjYWxsIGJvdGggZ2xvYmFsIGFuZCBpbnN0YW5jZSBob29rcwogICAgICAgKi8KICAgICAgY2FsbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9UeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgICAgICAgICB0aGlzLmhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUm91dGVyIGhvb2sgZXJyb3IgKCR7aG9va05hbWV9KTpgLCBlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyB0aGUgaGFuZGxlciB0byB0aGUgcm91dGluZyBtYXAKICAgICAgICogQHBhcmFtIHR5cGVkSGFuZGxlckFyZwogICAgICAgKi8KICAgICAgYWRkVHlwZWRIYW5kbGVyKHR5cGVkSGFuZGxlckFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nVHlwZWRIYW5kbGVyID0gdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QodHlwZWRIYW5kbGVyQXJnLm1ldGhvZCk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGEgVHlwZWRIYW5kbGVyIGZvciAke3R5cGVkSGFuZGxlckFyZy5tZXRob2R9IGFscmVkeSBleGlzdHMhIENhbid0IGFkZCBhbm90aGVyIG9uZS5gKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oYW5kbGVyTWFwLmFkZCh0eXBlZEhhbmRsZXJBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFub3RoZXIgc3ViIHR5cGVkUm91dGVyCiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3QKICAgICAgICovCiAgICAgIGFkZFR5cGVkUm91dGVyKHR5cGVkUm91dGVyQXJnKSB7CiAgICAgICAgY29uc3Qgcm91dGVyRXhpc3RzID0gdGhpcy5yb3V0ZXJNYXAuZmluZFN5bmMoKHJvdXRlckFyZykgPT4gcm91dGVyQXJnID09PSB0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgaWYgKCFyb3V0ZXJFeGlzdHMpIHsKICAgICAgICAgIHRoaXMucm91dGVyTWFwLmFkZCh0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgICB0eXBlZFJvdXRlckFyZy5hZGRUeXBlZFJvdXRlcih0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2hlY2tGb3JUeXBlZEhhbmRsZXIobWV0aG9kQXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhIHR5cGVkIFJvdXRlciBmcm9tIHRoZSByb3V0ZXIgY2hhaW4sIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICogQHBhcmFtIGNoZWNrVXBzdHJlYW1Sb3V0ZXIKICAgICAgICovCiAgICAgIGdldFR5cGVkSGFuZGxlckZvck1ldGhvZChtZXRob2RBcmcsIGNoZWNrZWRSb3V0ZXJzID0gW10pIHsKICAgICAgICBjaGVja2VkUm91dGVycy5wdXNoKHRoaXMpOwogICAgICAgIGxldCB0eXBlZEhhbmRsZXI7CiAgICAgICAgdHlwZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKChoYW5kbGVyMikgPT4gewogICAgICAgICAgcmV0dXJuIGhhbmRsZXIyLm1ldGhvZCA9PT0gbWV0aG9kQXJnOwogICAgICAgIH0pOwogICAgICAgIGlmICghdHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpLmZvckVhY2goKHR5cGVkUm91dGVyQXJnKSA9PiB7CiAgICAgICAgICAgIGlmICghdHlwZWRIYW5kbGVyICYmICFjaGVja2VkUm91dGVycy5pbmNsdWRlcyh0eXBlZFJvdXRlckFyZykpIHsKICAgICAgICAgICAgICB0eXBlZEhhbmRsZXIgPSB0eXBlZFJvdXRlckFyZy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnLCBjaGVja2VkUm91dGVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZWRIYW5kbGVyOwogICAgICB9CiAgICAgIHN0YXRpYyB7CiAgICAgICAgdGhpcy5kZWZhdWx0Um91dGVPcHRpb25zID0gewogICAgICAgICAgbG9jYWxSZXF1ZXN0OiBmYWxzZSwKICAgICAgICAgIHNraXBIb29rczogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3JlcXVlc3QnIC0+IHJvdXRlcyBhIHR5cGVkIHJlcXVlc3Qgb2JqZWN0IHRvIGEgaGFuZGxlcgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3Jlc3BvbnNlJyAtPiByb3V0ZXMgYSB0eXBlZCByZXF1ZXN0IG9iamVjdCB0byByZXF1ZXN0IGZpcmUgZXZlbnQKICAgICAgICogQHBhcmFtIHR5cGVkUmVxdWVzdEFyZwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyAtIE9wdGlvbnMgb2JqZWN0IHdpdGg6CiAgICAgICAqICAgLSBsb2NhbFJlcXVlc3Q6IHRyZWF0IGFzIGxvY2FsIHJlcXVlc3QgKGRlZmF1bHQ6IGZhbHNlKQogICAgICAgKiAgIC0gc2tpcEhvb2tzOiBza2lwIGNhbGxpbmcgaG9va3MgZm9yIHRoaXMgcm91dGluZyAoZGVmYXVsdDogZmFsc2UsIHVzZSBmb3IgYnJvYWRjYXN0LXJlY2VpdmVkIG1lc3NhZ2VzKQogICAgICAgKi8KICAgICAgYXN5bmMgcm91dGVBbmRBZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLl9UeXBlZFJvdXRlci5kZWZhdWx0Um91dGVPcHRpb25zLCAuLi5vcHRpb25zQXJnIH07CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsodHlwZWRSZXF1ZXN0QXJnLCB7CiAgICAgICAgICB0eXBlZHJvdXRlcjogdGhpcwogICAgICAgIH0pOwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhIHx8IHt9OwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEuZmlyc3RUeXBlZHJvdXRlciA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QgPT09ICIjI1ZpcnR1YWxTdHJlYW0jIyIpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHR5cGVkUmVxdWVzdEFyZyk7CiAgICAgICAgICByZXN1bHQubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmc/LmNvcnJlbGF0aW9uPy5waGFzZSA9PT0gInJlcXVlc3QiIHx8IG9wdGlvbnMubG9jYWxSZXF1ZXN0KSB7CiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1JlcXVlc3QiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogImluY29taW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVxdWVzdAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHR5cGVkSGFuZGxlciA9IHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QpOwogICAgICAgICAgaWYgKCF0eXBlZEhhbmRsZXIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYENhbm5vdCBmaW5kIGhhbmRsZXIgZm9yIG1ldGhvZG5hbWUgJHt0eXBlZFJlcXVlc3RBcmcubWV0aG9kfWApOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7CiAgICAgICAgICAgICAgdGV4dDogIlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLAogICAgICAgICAgICAgIGRhdGE6IHt9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5waGFzZSA9ICJyZXNwb25zZSI7CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywgewogICAgICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICJvdXRnb2luZyIsCiAgICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0eXBlZFJlcXVlc3RBcmc7CiAgICAgICAgICB9CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBhd2FpdCB0eXBlZEhhbmRsZXIuYWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHsKICAgICAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBIb29rcykgewogICAgICAgICAgICB0aGlzLmNhbGxIb29rKCJvbk91dGdvaW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogIm91dGdvaW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgIGVycm9yOiB0eXBlZFJlcXVlc3RBcmcuZXJyb3I/LnRleHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICAgIH0gZWxzZSBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICJyZXNwb25zZSIpIHsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QodHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uLmlkKT8uZnVsbGZpbGxJbnRlcmVzdCh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJyZWNlaXZlZCB3ZWlyZGx5IHNoYXBlZCByZXF1ZXN0Iik7CiAgICAgICAgICBjb25zb2xlLmxvZyh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBoYW5kbGUgc3RyZWFtaW5nCiAgICAgICAqIEBwYXJhbSBzdHJlYW1UckFyZwogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHN0cmVhbVRyQXJnKSB7CiAgICAgICAgY29uc3QgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtID0gYXdhaXQgdGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZmluZChhc3luYyAodmlydHVhbFN0cmVhbUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIHZpcnR1YWxTdHJlYW1Bcmcuc3RyZWFtSWQgPT09IHN0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWQ7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZWxldmFudFZpcnR1YWxTdHJlYW0pIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBubyByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSBmb3VuZCBmb3Igc3RyZWFtIHdpdGggaWQgJHtzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkfWApOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZ2V0QXJyYXkoKSk7CiAgICAgICAgICByZXR1cm4gc3RyZWFtVHJBcmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBzdWNjZXNzOiBmb3VuZCByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtLmhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnZpcnR1YWxzdHJlYW0uanMKdmFyIGNsb3NpbmdCaXQsIFZpcnR1YWxTdHJlYW07CnZhciBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNi9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBjbG9zaW5nQml0ID0gIiMjIyMjIyMjIyMjIyNDTE9TSU5HIEJJVCMjIyMjIyMjIyMjIyMiOwogICAgVmlydHVhbFN0cmVhbSA9IGNsYXNzIF9WaXJ0dWFsU3RyZWFtIHsKICAgICAgLy8gU1RBVElDCiAgICAgIHN0YXRpYyBlbmNvZGVQYXlsb2FkRm9yTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zLCBvcmlnaW5hbFBheWxvYWQsIHBhdGgyID0gW10pIHsKICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAoZGlzdF90c19leHBvcnRzOC5pc0J1ZmZlckxpa2Uob2JqZWN0UGF5bG9hZCkpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAob2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIF9WaXJ0dWFsU3RyZWFtKSB7CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC5zaWRlID0gInJlcXVlc3RpbmciOwogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnNlbmRNZXRob2QgPSBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2Q7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICJyZXNwb25kaW5nIjsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZChvYmplY3RQYXlsb2FkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghb3JpZ2luYWxQYXlsb2FkLnJlc3BvbnNlIHx8IHBhdGgyLmluY2x1ZGVzKCJyZXNwb25zZSIpKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgX2lzVmlydHVhbFN0cmVhbTogdHJ1ZSwKICAgICAgICAgICAgICBzdHJlYW1JZDogb2JqZWN0UGF5bG9hZC5zdHJlYW1JZAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBfT0JNSVRURURfVklSVFVBTF9TVFJFQU06IHRydWUsCiAgICAgICAgICAgICAgcmVhc29uOiAicGF0aCBpcyB1bmRlciAucmVxdWVzdDogb2JtaXR0ZWQgZm9yIGRlZHVwbGljYXRpb24gcmVhc29ucyBpbiByZXNwb25zZSBjeWNsZS4iCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZC5tYXAoKGl0ZW0sIGluZGV4MikgPT4gX1ZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoCiAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMsCiAgICAgICAgICAgIG9yaWdpbmFsUGF5bG9hZCB8fCBvYmplY3RQYXlsb2FkLAogICAgICAgICAgICBwYXRoMi5jb25jYXQoU3RyaW5nKGluZGV4MikpCiAgICAgICAgICAgIC8vIENvbnZlcnQgaW5kZXggdG8gc3RyaW5nIGFuZCBjb25jYXRlbmF0ZSB0byBwYXRoCiAgICAgICAgICApKTsKICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFBheWxvYWQgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdFBheWxvYWQgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIFtrZXkyLCB2YWx1ZTJdKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoMi5jb25jYXQoa2V5Mik7CiAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHZhbHVlMiwgY29tbUZ1bmN0aW9ucywgb3JpZ2luYWxQYXlsb2FkIHx8IG9iamVjdFBheWxvYWQsIG5ld1BhdGgpOwogICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgfSwge30pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zKSB7CiAgICAgICAgaWYgKGRpc3RfdHNfZXhwb3J0czguaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBUeXBlZFJvdXRlcikgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7CiAgICAgICAgfQogICAgICAgIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAib2JqZWN0IikgewogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBTZXQgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIE1hcCB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUmVnRXhwIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBFcnJvciB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUHJvbWlzZSB8fCB0eXBlb2Ygb2JqZWN0UGF5bG9hZC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQuX2lzVmlydHVhbFN0cmVhbSkgewogICAgICAgICAgICBjb25zdCB2aXJ0dWFsU3RyZWFtID0gbmV3IF9WaXJ0dWFsU3RyZWFtKCk7CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RyZWFtSWQgPSBvYmplY3RQYXlsb2FkLnN0cmVhbUlkOwogICAgICAgICAgICBpZiAoIXZpcnR1YWxTdHJlYW0uc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVxdWVzdGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zZW5kTWV0aG9kID0gY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdmlydHVhbFN0cmVhbS5zaWRlICYmIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVzcG9uZGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgICAgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuYWRkKHZpcnR1YWxTdHJlYW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsU3RyZWFtOwogICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RQYXlsb2FkKSB7CiAgICAgICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChfVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsoaXRlbSwgY29tbUZ1bmN0aW9ucykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3RQYXlsb2FkKS5yZWR1Y2UoKGFjYywga2V5MikgPT4gewogICAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkW2tleTJdLCBjb21tRnVuY3Rpb25zKTsKICAgICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgICB9LCB7fSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnN0cmVhbUlkID0gaXNvdW5pcXVlMi51bmkoKTsKICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IHRydWU7CiAgICAgICAgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5ID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuQmFja3ByZXNzdXJlZEFycmF5KDE2KTsKICAgICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkgPSBuZXcgZGlzdF90c19leHBvcnRzNi5CYWNrcHJlc3N1cmVkQXJyYXkoMTYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0YWtlcyBjYXJlIG9mIHNlbmRpbmcKICAgICAgICovCiAgICAgIGFzeW5jIHdvcmtPblF1ZXVlKCkgewogICAgICAgIGlmICh0aGlzLndvcmtpbmdEZWZlcnJlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMud29ya2luZ0RlZmVycmVkLnByb21pc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXF1ZXN0aW5nIikgewogICAgICAgICAgbGV0IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkID0gIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgICBsZXQgb3RoZXJTaWRlSGFzTmV4dCA9IGZhbHNlOwogICAgICAgICAgbGV0IG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IGZhbHNlOwogICAgICAgICAgY29uc3QgZ2V0RmVlZGJhY2sgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHN0cmVhbVRyID0gYXdhaXQgdGhpcy5zZW5kTWV0aG9kKHsKICAgICAgICAgICAgICBtZXRob2Q6ICIjI1ZpcnR1YWxTdHJlYW0jIyIsCiAgICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgICAgICBjeWNsZUlkOiBpc291bmlxdWUyLnVuaSgpLAogICAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICAgIG90aGVyU2lkZUhhc05leHQgPSBzdHJlYW1Uci5yZXNwb25zZS5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTsKICAgICAgICAgIHdoaWxlICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwIHx8IG90aGVyU2lkZUhhc05leHQpIHsKICAgICAgICAgICAgaWYgKG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCkgewogICAgICAgICAgICAgIHdoaWxlIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ3YWl0aW5nIGZvciBmZWVkYmFjayBiZWNhdXNlIG9mIGJhY2twcmVzc3VyZS4uLiIpOwogICAgICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcig1MCk7CiAgICAgICAgICAgICAgICBhd2FpdCBnZXRGZWVkYmFjaygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgZGF0YUFyZzsKICAgICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IHN0cmVhbVRyOwogICAgICAgICAgICBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiIyNWaXJ0dWFsU3RyZWFtIyMiLAogICAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgICAgY3ljbGVJZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICBtYWluUHVycG9zZTogZGF0YUFyZyA/ICJjaHVuayIgOiAicmVhZCIsCiAgICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIC4uLmRhdGFBcmcgPyB7IGNodW5rRGF0YTogZGF0YUFyZyB9IDoge30KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSkgewogICAgICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpOwogICAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy53b3JraW5nRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc3RyZWFtIG9ubHkgb24gdGhlIHJlc3BvbmRpbmcgc2lkZQogICAgICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcKICAgICAgICogQHJldHVybnMKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKSB7CiAgICAgICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3Qua2VlcEFsaXZlID09PSB0cnVlICYmIHRoaXMua2VlcEFsaXZlID09PSB0cnVlKSB7CiAgICAgICAgICB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA9IERhdGUubm93KCk7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAia2VlcEFsaXZlIikgewogICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5rZWVwQWxpdmUsCiAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAiZmVlZGJhY2siKSB7CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLAogICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImNodW5rIikgewogICAgICAgICAgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnB1c2goc3RyZWFtVHJBcmcucmVxdWVzdC5jaHVua0RhdGEpOwogICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAgJiYgc3RyZWFtVHJBcmcucmVzcG9uc2UuYmFja3ByZXNzdXJlID09PSBmYWxzZSkgewogICAgICAgICAgICBjb25zdCBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0gewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgICBjeWNsZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImNodW5rIiwKICAgICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAxLAogICAgICAgICAgICAgIC8vIDEgYW5kIG5vdCAwIGJlY2F1c2Ugd2UgY2FsbCBzaGlmdCBhIGZldyBsaW5lcyBkb3duCiAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSwKICAgICAgICAgICAgICBjaHVua0RhdGE6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJmZWVkYmFjayIsCiAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmVhbVRyQXJnOwogICAgICB9CiAgICAgIC8vIGxpZmVjeWNsZSBtZXRob2RzCiAgICAgIC8qKgogICAgICAgKiBjbG9zZXMgdGhlIHZpcnR1YWwgc3RyZWFtCiAgICAgICAqLwogICAgICBhc3luYyBjbGVhbnVwKCkgewogICAgICAgIGlmICh0aGlzLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICB0aGlzLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5yZW1vdmUodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhIGtlZXBBbGl2ZSBsb29wIHRoYXQgd29ya3MgYWNyb3NzIHRlY2hub2xvZ2llcwogICAgICAgKi8KICAgICAgYXN5bmMgc3RhcnRLZWVwQWxpdmVMb29wKCkgewogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXNwb25kaW5nIikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKDApOwogICAgICAgIGNvbnNvbGUubG9nKGBzdGFydGluZyBrZWVwYWxpdmUgbG9vcCBvbiBzaWRlICR7dGhpcy5zaWRlfWApOwogICAgICAgIGxldCBjb3VudGVyMiA9IDA7CiAgICAgICAga2VlcEFsaXZlTG9vcDogd2hpbGUgKHRoaXMua2VlcEFsaXZlKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKTsKICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoMWUzKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcigxZTMpOwogICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpOwogICAgICAgIGNvbnNvbGUubG9nKGBjbGVhbmVkIHVwIGZvciBzdHJlYW0gJHt0aGlzLnN0cmVhbUlkfWApOwogICAgICB9CiAgICAgIGFzeW5jIHRyaWdnZXJLZWVwQWxpdmUoKSB7CiAgICAgICAgaWYgKHRoaXMuc2lkZSA9PT0gInJlcXVlc3RpbmciKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhga2VlcGFsaXZlIHNlbnQuYCk7CiAgICAgICAgICBjb25zdCBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgIG1ldGhvZDogIiMjVmlydHVhbFN0cmVhbSMjIiwKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgICAga2VlcEFsaXZlOiB0aGlzLmtlZXBBbGl2ZQogICAgICAgICAgICB9LAogICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2Uua2VlcEFsaXZlID09PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPSBEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLm5leHQpIHsKICAgICAgICAgICAgdGhpcy53b3JrT25RdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEtlZXBBbGl2ZUV2ZW50ID4gMWU0KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgY2xvc2luZyBzdHJlYW0gZm9yICR7dGhpcy5zdHJlYW1JZH1gKTsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIERhdGEgc2VuZGluZyBhbmQgcmVjZWl2aW5nCiAgICAgIGFzeW5jIHNlbmREYXRhKGRhdGFBcmcpIHsKICAgICAgICB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChkYXRhQXJnKTsKICAgICAgICB0aGlzLndvcmtPblF1ZXVlKCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LndhaXRGb3JTcGFjZSgpOwogICAgICB9CiAgICAgIGFzeW5jIGZldGNoRGF0YSgpIHsKICAgICAgICBpZiAodGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5Lmhhc1NwYWNlKSB7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9ySXRlbXMoKTsKICAgICAgICBjb25zdCBkYXRhUGFja2FnZSA9IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgIHJldHVybiBkYXRhUGFja2FnZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVhZHMgZnJvbSBhIFJlYWRhYmxlIGFuZCBzZW5kcyBpdCB0byB0aGUgb3RoZXIgc2lkZQogICAgICAgKiBAcGFyYW0gcmVhZGFibGVTdHJlYW1BcmcKICAgICAgICovCiAgICAgIGFzeW5jIHJlYWRGcm9tV2Vic3RyZWFtKHJlYWRhYmxlU3RyZWFtQXJnLCBjbG9zZUFmdGVyUmVhZGluZyA9IHRydWUpIHsKICAgICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbUFyZy5nZXRSZWFkZXIoKTsKICAgICAgICBsZXQgc3RyZWFtSXNEb25lID0gZmFsc2U7CiAgICAgICAgd2hpbGUgKCFzdHJlYW1Jc0RvbmUpIHsKICAgICAgICAgIGNvbnN0IHsgdmFsdWU6IHZhbHVlMiwgZG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kRGF0YSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgc3RyZWFtSXNEb25lID0gZG9uZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlQWZ0ZXJSZWFkaW5nKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB3cml0ZVRvV2Vic3RyZWFtKHdyaXRhYmxlU3RyZWFtQXJnKSB7CiAgICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGVTdHJlYW1BcmcuZ2V0V3JpdGVyKCk7CiAgICAgICAgd2hpbGUgKHRoaXMua2VlcEFsaXZlIHx8IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCkpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7CiAgICAgICAgICBpZiAodmFsdWUyID09PSBjbG9zaW5nQml0KSB7CiAgICAgICAgICAgIHdyaXRlci5yZWxlYXNlTG9jaygpOwogICAgICAgICAgICBhd2FpdCB3cml0YWJsZVN0cmVhbUFyZy5jbG9zZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHdyaXRlci53cml0ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2xvc2VzIHRoZSBzdHJlYW0KICAgICAgICogaWYgc2VuZENsb3NpbmdCaXRBcmcgaXMgdHJ1ZSwgdGhlIHN0cmVhbSB3aWxsIHNlbmQgYSBjbG9zaW5nIGJpdAogICAgICAgKiBAcGFyYW0gc2VuZENsb3NpbmdCaXRBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGNsb3NlKHNlbmRDbG9zaW5nQml0QXJnID0gZmFsc2UpIHsKICAgICAgICBpZiAoc2VuZENsb3NpbmdCaXRBcmcpIHsKICAgICAgICAgIHRoaXMuc2VuZERhdGEoY2xvc2luZ0JpdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0YXJnZXQuanMKdmFyIFR5cGVkVGFyZ2V0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRhcmdldCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIGlmIChvcHRpb25zQXJnLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXIgJiYgIW9wdGlvbnNBcmcudHlwZWRSb3V0ZXJSZWYpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7CiAgICAgICAgfQogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdChwYXlsb2FkQXJnKSB7CiAgICAgICAgbGV0IHJlc3BvbnNlSW50ZXJlc3Q7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZikgewogICAgICAgICAgcmVzcG9uc2VJbnRlcmVzdCA9IGF3YWl0IHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZi5maXJlRXZlbnRJbnRlcmVzdE1hcC5hZGRJbnRlcmVzdChwYXlsb2FkQXJnLmNvcnJlbGF0aW9uLmlkLCBwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcG9zdE1ldGhvZCA9IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kIHx8IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOwogICAgICAgIGNvbnN0IHBvc3RNZXRob2RSZXR1cm5WYWx1ZSA9IGF3YWl0IHBvc3RNZXRob2QocGF5bG9hZEFyZyk7CiAgICAgICAgbGV0IHJlc3BvbnNlQm9keTsKICAgICAgICBpZiAocmVzcG9uc2VJbnRlcmVzdCkgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzcG9uc2VJbnRlcmVzdC5pbnRlcmVzdEZ1bGxmaWxsZWQ7CiAgICAgICAgfSBlbHNlIGlmIChwb3N0TWV0aG9kUmV0dXJuVmFsdWUpIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IHBvc3RNZXRob2RSZXR1cm5WYWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcGF5bG9hZEFyZzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNi9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMKZnVuY3Rpb24gY2FsbEdsb2JhbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgdHJ5IHsKICAgIFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTsKICB9Cn0KdmFyIHdlYnJlcXVlc3RJbnN0YW5jZSwgVHlwZWRSZXF1ZXN0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNi9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWR0YXJnZXQoKTsKICAgIHdlYnJlcXVlc3RJbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNC5XZWJyZXF1ZXN0Q2xpZW50KCk7CiAgICBUeXBlZFJlcXVlc3QgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0gcG9zdEVuZFBvaW50QXJnCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHBvc3RUYXJnZXQsIG1ldGhvZEFyZykgewogICAgICAgIHRoaXMuc2tpcEhvb2tzID0gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBwb3N0VGFyZ2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgdGhpcy51cmxFbmRQb2ludCA9IHBvc3RUYXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudHlwZWRUYXJnZXQgPSBwb3N0VGFyZ2V0OwogICAgICAgIH0KICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZEFyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmlyZXMgdGhlIHJlcXVlc3QKICAgICAgICovCiAgICAgIGFzeW5jIGZpcmUoZmlyZUFyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgIGxldCBwYXlsb2FkU2VuZGluZyA9IHsKICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiBmaXJlQXJnLAogICAgICAgICAgcmVzcG9uc2U6IG51bGwsCiAgICAgICAgICBjb3JyZWxhdGlvbjogewogICAgICAgICAgICBpZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IgogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcGF5bG9hZFNlbmRpbmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHBheWxvYWRTZW5kaW5nLCB7CiAgICAgICAgICBzZW5kTWV0aG9kOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZEFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCF0aGlzLnNraXBIb29rcykgewogICAgICAgICAgY2FsbEdsb2JhbEhvb2soIm9uT3V0Z29pbmdSZXF1ZXN0IiwgewogICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwYXlsb2FkU2VuZGluZy5jb3JyZWxhdGlvbi5pZCwKICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCwKICAgICAgICAgICAgZGlyZWN0aW9uOiAib3V0Z29pbmciLAogICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgIHBheWxvYWQ6IGZpcmVBcmcKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBsZXQgcGF5bG9hZFJlY2VpdmluZzsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsocGF5bG9hZFJlY2VpdmluZywgewogICAgICAgICAgc2VuZE1ldGhvZDogKHBheWxvYWRBcmcpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghdGhpcy5za2lwSG9va3MpIHsKICAgICAgICAgIGNhbGxHbG9iYWxIb29rKCJvbkluY29taW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHBheWxvYWRTZW5kaW5nLmNvcnJlbGF0aW9uLmlkLAogICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgIHBoYXNlOiAicmVzcG9uc2UiLAogICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkUmVjZWl2aW5nPy5yZXNwb25zZSwKICAgICAgICAgICAgZXJyb3I6IHBheWxvYWRSZWNlaXZpbmc/LmVycm9yPy50ZXh0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmcucmVzcG9uc2U7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyA9IGZhbHNlKSB7CiAgICAgICAgbGV0IHBheWxvYWRSZWNlaXZpbmc7CiAgICAgICAgaWYgKHRoaXMudXJsRW5kUG9pbnQpIHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgd2VicmVxdWVzdEluc3RhbmNlLnBvc3RKc29uKHRoaXMudXJsRW5kUG9pbnQsIHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyA/IHsgY2FjaGVTdHJhdGVneTogImNhY2hlLWZpcnN0IiB9IDoge30pOwogICAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IHJlc3BvbnNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy50eXBlZFRhcmdldC5wb3N0KHBheWxvYWRTZW5kaW5nQXJnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYG1ldGhvZDogPj4ke3RoaXMubWV0aG9kfTw8IGdvdCBhbiBFUlJPUjogIiR7cGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0fSIgd2l0aCBkYXRhICR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhLCBudWxsLCAyKX1gKTsKICAgICAgICAgIGlmICghcGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZWRSZXNwb25zZUVycm9yKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IudGV4dCwgcGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAocGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgY29uc29sZS5sb2coYHNlcnZlciByZXF1ZXN0ZWQgcmV0cnkgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAke3BheWxvYWRSZWNlaXZpbmcucmV0cnkucmVhc29ufWApOwogICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihwYXlsb2FkUmVjZWl2aW5nLnJldHJ5LndhaXRGb3JNcyk7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmdBcmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjYvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNSwgewogIFR5cGVkSGFuZGxlcjogKCkgPT4gVHlwZWRIYW5kbGVyLAogIFR5cGVkUmVxdWVzdDogKCkgPT4gVHlwZWRSZXF1ZXN0LAogIFR5cGVkUmVzcG9uc2VFcnJvcjogKCkgPT4gVHlwZWRSZXNwb25zZUVycm9yLAogIFR5cGVkUm91dGVyOiAoKSA9PiBUeXBlZFJvdXRlciwKICBUeXBlZFRhcmdldDogKCkgPT4gVHlwZWRUYXJnZXQsCiAgVmlydHVhbFN0cmVhbTogKCkgPT4gVmlydHVhbFN0cmVhbQp9KTsKdmFyIGluaXRfZGlzdF90czE1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi42L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRhcmdldCgpOwogICAgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZTIob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICJmdW5jdGlvbiI7Cn0KZnVuY3Rpb24gc2xlZXAodGltZSwgcmVzb2x2ZVdpdGgpIHsKICBpZiAoIXRpbWUpIHRpbWUgPSAwOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmVzKHJlc29sdmVXaXRoKTsKICAgIH0sIHRpbWUpOwogIH0pOwp9CmZ1bmN0aW9uIHJhbmRvbUludChtaW4zLCBtYXgzKSB7CiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXgzIC0gbWluMyArIDEpICsgbWluMyk7Cn0KZnVuY3Rpb24gcmFuZG9tVG9rZW4oKSB7CiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTsKfQpmdW5jdGlvbiBtaWNyb1NlY29uZHMoKSB7CiAgdmFyIHJldCA9IERhdGUubm93KCkgKiAxZTM7CiAgaWYgKHJldCA8PSBsYXN0TXMpIHsKICAgIHJldCA9IGxhc3RNcyArIDE7CiAgfQogIGxhc3RNcyA9IHJldDsKICByZXR1cm4gcmV0Owp9CmZ1bmN0aW9uIHN1cHBvcnRzV2ViTG9ja0FQSSgpIHsKICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2NrcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQp2YXIgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSwgUFJPTUlTRV9SRVNPTFZFRF9UUlVFLCBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsIGxhc3RNczsKdmFyIGluaXRfdXRpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzIigpIHsKICAgIFBST01JU0VfUkVTT0xWRURfRkFMU0UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9UUlVFID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9WT0lEID0gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBsYXN0TXMgPSAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvbmF0aXZlLmpzCmZ1bmN0aW9uIGNyZWF0ZShjaGFubmVsTmFtZSkgewogIHZhciBzdGF0ZSA9IHsKICAgIHRpbWU6IG1pY3JvU2Vjb25kcygpLAogICAgbWVzc2FnZXNDYWxsYmFjazogbnVsbCwKICAgIGJjOiBuZXcgQnJvYWRjYXN0Q2hhbm5lbChjaGFubmVsTmFtZSksCiAgICBzdWJGbnM6IFtdCiAgICAvLyBzdWJzY3JpYmVyRnVuY3Rpb25zCiAgfTsKICBzdGF0ZS5iYy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtc2dFdmVudCkgewogICAgaWYgKHN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2spIHsKICAgICAgc3RhdGUubWVzc2FnZXNDYWxsYmFjayhtc2dFdmVudC5kYXRhKTsKICAgIH0KICB9OwogIHJldHVybiBzdGF0ZTsKfQpmdW5jdGlvbiBjbG9zZShjaGFubmVsU3RhdGUpIHsKICBjaGFubmVsU3RhdGUuYmMuY2xvc2UoKTsKICBjaGFubmVsU3RhdGUuc3ViRm5zID0gW107Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHRyeSB7CiAgICBjaGFubmVsU3RhdGUuYmMucG9zdE1lc3NhZ2UobWVzc2FnZUpzb24sIGZhbHNlKTsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICB9Cn0KZnVuY3Rpb24gb25NZXNzYWdlKGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZCgpIHsKICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICJ1bmRlZmluZWQiICYmIGdsb2JhbFRoaXMuRGVubyAmJiBnbG9iYWxUaGlzLkRlbm8uYXJncykgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGlmICgodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiKSAmJiB0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gImZ1bmN0aW9uIikgewogICAgaWYgKEJyb2FkY2FzdENoYW5uZWwuX3B1YmtleSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IERvIG5vdCBvdmVyd3JpdGUgd2luZG93LkJyb2FkY2FzdENoYW5uZWwgd2l0aCB0aGlzIG1vZHVsZSwgdGhpcyBpcyBub3QgYSBwb2x5ZmlsbCIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZSgpIHsKICByZXR1cm4gMTUwOwp9CnZhciBtaWNyb1NlY29uZHMyLCB0eXBlLCBOYXRpdmVNZXRob2Q7CnZhciBpbml0X25hdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL25hdGl2ZS5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczIgPSBtaWNyb1NlY29uZHM7CiAgICB0eXBlID0gIm5hdGl2ZSI7CiAgICBOYXRpdmVNZXRob2QgPSB7CiAgICAgIGNyZWF0ZSwKICAgICAgY2xvc2UsCiAgICAgIG9uTWVzc2FnZSwKICAgICAgcG9zdE1lc3NhZ2UsCiAgICAgIGNhbkJlVXNlZCwKICAgICAgdHlwZSwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZSwKICAgICAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHMyCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMKZnVuY3Rpb24gcmVtb3ZlVG9vT2xkVmFsdWVzKG9ibGl2aW91c1NldCkgewogIGNvbnN0IG9sZGVyVGhlbiA9IG5vdygpIC0gb2JsaXZpb3VzU2V0LnR0bDsKICBjb25zdCBpdGVyYXRvcjIgPSBvYmxpdmlvdXNTZXQubWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKICB3aGlsZSAodHJ1ZSkgewogICAgY29uc3QgbmV4dDIgPSBpdGVyYXRvcjIubmV4dCgpLnZhbHVlOwogICAgaWYgKCFuZXh0MikgewogICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IHZhbHVlMiA9IG5leHQyWzBdOwogICAgY29uc3QgdGltZSA9IG5leHQyWzFdOwogICAgaWYgKHRpbWUgPCBvbGRlclRoZW4pIHsKICAgICAgb2JsaXZpb3VzU2V0Lm1hcC5kZWxldGUodmFsdWUyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KfQpmdW5jdGlvbiBub3coKSB7CiAgcmV0dXJuIERhdGUubm93KCk7Cn0KdmFyIE9ibGl2aW91c1NldDsKdmFyIGluaXRfc3JjID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMiKCkgewogICAgT2JsaXZpb3VzU2V0ID0gY2xhc3MgewogICAgICB0dGw7CiAgICAgIG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGluZyBjYWxscyB0byBzZXRUaW1lb3V0KCkgaXMgZXhwZW5zaXZlLAogICAgICAgKiBzbyB3ZSBvbmx5IGRvIHRoYXQgaWYgdGhlcmUgaXMgbm90IHRpbWVvdXQgYWxyZWFkeSBvcGVuLgogICAgICAgKi8KICAgICAgX3RvID0gZmFsc2U7CiAgICAgIGNvbnN0cnVjdG9yKHR0bCkgewogICAgICAgIHRoaXMudHRsID0gdHRsOwogICAgICB9CiAgICAgIGhhcyh2YWx1ZTIpIHsKICAgICAgICBjb25zdCB2YWx1ZVRpbWUgPSB0aGlzLm1hcC5nZXQodmFsdWUyKTsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlVGltZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlVGltZSA8IG5vdygpIC0gdGhpcy50dGwpIHsKICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZTIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBhZGQodmFsdWUyKSB7CiAgICAgICAgdGhpcy5tYXAuZGVsZXRlKHZhbHVlMik7CiAgICAgICAgdGhpcy5tYXAuc2V0KHZhbHVlMiwgbm93KCkpOwogICAgICAgIGlmICghdGhpcy5fdG8pIHsKICAgICAgICAgIHRoaXMuX3RvID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0aGlzLl90byA9IGZhbHNlOwogICAgICAgICAgICByZW1vdmVUb29PbGRWYWx1ZXModGhpcyk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9vcHRpb25zLmpzCmZ1bmN0aW9uIGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKCkgewogIHZhciBvcmlnaW5hbE9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9OwogIHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5hbE9wdGlvbnMpKTsKICBpZiAodHlwZW9mIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9PT0gInVuZGVmaW5lZCIpIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9IHRydWU7CiAgaWYgKCFvcHRpb25zLmlkYikgb3B0aW9ucy5pZGIgPSB7fTsKICBpZiAoIW9wdGlvbnMuaWRiLnR0bCkgb3B0aW9ucy5pZGIudHRsID0gMWUzICogNDU7CiAgaWYgKCFvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKSBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsID0gMTUwOwogIGlmIChvcmlnaW5hbE9wdGlvbnMuaWRiICYmIHR5cGVvZiBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2UgPT09ICJmdW5jdGlvbiIpIG9wdGlvbnMuaWRiLm9uY2xvc2UgPSBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2U7CiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZSkgb3B0aW9ucy5sb2NhbHN0b3JhZ2UgPSB7fTsKICBpZiAoIW9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQpIG9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQgPSAxZTMgKiA2MDsKICBpZiAob3JpZ2luYWxPcHRpb25zLm1ldGhvZHMpIG9wdGlvbnMubWV0aG9kcyA9IG9yaWdpbmFsT3B0aW9ucy5tZXRob2RzOwogIGlmICghb3B0aW9ucy5ub2RlKSBvcHRpb25zLm5vZGUgPSB7fTsKICBpZiAoIW9wdGlvbnMubm9kZS50dGwpIG9wdGlvbnMubm9kZS50dGwgPSAxZTMgKiA2MCAqIDI7CiAgaWYgKCFvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMpIG9wdGlvbnMubm9kZS5tYXhQYXJhbGxlbFdyaXRlcyA9IDIwNDg7CiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPT09ICJ1bmRlZmluZWQiKSBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPSB0cnVlOwogIHJldHVybiBvcHRpb25zOwp9CnZhciBpbml0X29wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzCmZ1bmN0aW9uIGdldElkYigpIHsKICBpZiAodHlwZW9mIGluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiBpbmRleGVkREI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5tb3pJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjsKICAgIGlmICh0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiB3aW5kb3cud2Via2l0SW5kZXhlZERCOwogICAgaWYgKHR5cGVvZiB3aW5kb3cubXNJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1zSW5kZXhlZERCOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHguY29tbWl0KSB7CiAgICB0eC5jb21taXQoKTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpIHsKICB2YXIgSW5kZXhlZERCID0gZ2V0SWRiKCk7CiAgdmFyIGRiTmFtZSA9IERCX1BSRUZJWCArIGNoYW5uZWxOYW1lOwogIHZhciBvcGVuUmVxdWVzdCA9IEluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CiAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXYpIHsKICAgIHZhciBkYiA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQsIHsKICAgICAga2V5UGF0aDogImlkIiwKICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZQogICAgfSk7CiAgfTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldikgewogICAgICByZXR1cm4gcmVqKGV2KTsKICAgIH07CiAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgcmVzKG9wZW5SZXF1ZXN0LnJlc3VsdCk7CiAgICB9OwogIH0pOwp9CmZ1bmN0aW9uIHdyaXRlTWVzc2FnZShkYiwgcmVhZGVyVXVpZCwgbWVzc2FnZUpzb24pIHsKICB2YXIgdGltZSA9IERhdGUubm93KCk7CiAgdmFyIHdyaXRlT2JqZWN0ID0gewogICAgdXVpZDogcmVhZGVyVXVpZCwKICAgIHRpbWUsCiAgICBkYXRhOiBtZXNzYWdlSnNvbgogIH07CiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oW09CSkVDVF9TVE9SRV9JRF0sICJyZWFkd3JpdGUiLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZXMoKTsKICAgIH07CiAgICB0eC5vbmVycm9yID0gZnVuY3Rpb24oZXYpIHsKICAgICAgcmV0dXJuIHJlaihldik7CiAgICB9OwogICAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTsKICAgIG9iamVjdFN0b3JlLmFkZCh3cml0ZU9iamVjdCk7CiAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0QWxsTWVzc2FnZXMoZGIpIHsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXYpIHsKICAgICAgdmFyIGN1cnNvciA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgIGlmIChjdXJzb3IpIHsKICAgICAgICByZXQucHVzaChjdXJzb3IudmFsdWUpOwogICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oZGIsIGxhc3RDdXJzb3JJZCkgewogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHZhciBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogIGlmIChvYmplY3RTdG9yZS5nZXRBbGwpIHsKICAgIHZhciBnZXRBbGxSZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0QWxsKGtleVJhbmdlVmFsdWUpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICAgIGdldEFsbFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiByZWooZXJyKTsKICAgICAgfTsKICAgICAgZ2V0QWxsUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICByZXMoZTExLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5DdXJzb3IoKSB7CiAgICB0cnkgewogICAgICBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpOwogICAgfQogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIHZhciBvcGVuQ3Vyc29yUmVxdWVzdCA9IG9wZW5DdXJzb3IoKTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHJlaihlcnIpOwogICAgfTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgaWYgKGN1cnNvci52YWx1ZS5pZCA8IGxhc3RDdXJzb3JJZCArIDEpIHsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXShsYXN0Q3Vyc29ySWQgKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgaWRzKSB7CiAgaWYgKGNoYW5uZWxTdGF0ZS5jbG9zZWQpIHsKICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pOwogIH0KICB2YXIgdHggPSBjaGFubmVsU3RhdGUuZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAicmVhZHdyaXRlIiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgcmV0dXJuIFByb21pc2UuYWxsKGlkcy5tYXAoZnVuY3Rpb24oaWQpIHsKICAgIHZhciBkZWxldGVSZXF1ZXN0ID0gb2JqZWN0U3RvcmVbImRlbGV0ZSJdKGlkKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgICAgZGVsZXRlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gcmVzKCk7CiAgICAgIH07CiAgICB9KTsKICB9KSk7Cn0KZnVuY3Rpb24gZ2V0T2xkTWVzc2FnZXMoZGIsIHR0bCkgewogIHZhciBvbGRlclRoZW4gPSBEYXRlLm5vdygpIC0gdHRsOwogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldikgewogICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgaWYgKGN1cnNvcikgewogICAgICAgIHZhciBtc2dPYmsgPSBjdXJzb3IudmFsdWU7CiAgICAgICAgaWYgKG1zZ09iay50aW1lIDwgb2xkZXJUaGVuKSB7CiAgICAgICAgICByZXQucHVzaChtc2dPYmspOwogICAgICAgICAgY3Vyc29yWyJjb250aW51ZSJdKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICAgIHJlcyhyZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSkgewogIHJldHVybiBnZXRPbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUuZGIsIGNoYW5uZWxTdGF0ZS5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24odG9vT2xkKSB7CiAgICByZXR1cm4gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgdG9vT2xkLm1hcChmdW5jdGlvbihtc2cpIHsKICAgICAgcmV0dXJuIG1zZy5pZDsKICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBjcmVhdGUyKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIHJldHVybiBjcmVhdGVEYXRhYmFzZShjaGFubmVsTmFtZSkudGhlbihmdW5jdGlvbihkYikgewogICAgdmFyIHN0YXRlID0gewogICAgICBjbG9zZWQ6IGZhbHNlLAogICAgICBsYXN0Q3Vyc29ySWQ6IDAsCiAgICAgIGNoYW5uZWxOYW1lLAogICAgICBvcHRpb25zLAogICAgICB1dWlkOiByYW5kb21Ub2tlbigpLAogICAgICAvKioKICAgICAgICogZW1pdHRlZE1lc3NhZ2VzSWRzCiAgICAgICAqIGNvbnRhaW5zIGFsbCBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkIGJlZm9yZQogICAgICAgKiBAdHlwZSB7T2JsaXZpb3VzU2V0fQogICAgICAgKi8KICAgICAgZU1JczogbmV3IE9ibGl2aW91c1NldChvcHRpb25zLmlkYi50dGwgKiAyKSwKICAgICAgLy8gZW5zdXJlcyB3ZSBkbyBub3QgcmVhZCBtZXNzYWdlcyBpbiBwYXJhbGxlbAogICAgICB3cml0ZUJsb2NrUHJvbWlzZTogUFJPTUlTRV9SRVNPTFZFRF9WT0lELAogICAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLAogICAgICByZWFkUXVldWVQcm9taXNlczogW10sCiAgICAgIGRiCiAgICB9OwogICAgZGIub25jbG9zZSA9IGZ1bmN0aW9uKCkgewogICAgICBzdGF0ZS5jbG9zZWQgPSB0cnVlOwogICAgICBpZiAob3B0aW9ucy5pZGIub25jbG9zZSkgb3B0aW9ucy5pZGIub25jbG9zZSgpOwogICAgfTsKICAgIF9yZWFkTG9vcChzdGF0ZSk7CiAgICByZXR1cm4gc3RhdGU7CiAgfSk7Cn0KZnVuY3Rpb24gX3JlYWRMb29wKHN0YXRlKSB7CiAgaWYgKHN0YXRlLmNsb3NlZCkgcmV0dXJuOwogIHJlYWROZXdNZXNzYWdlcyhzdGF0ZSkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiBzbGVlcChzdGF0ZS5vcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKTsKICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIF9yZWFkTG9vcChzdGF0ZSk7CiAgfSk7Cn0KZnVuY3Rpb24gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZSkgewogIGlmIChtc2dPYmoudXVpZCA9PT0gc3RhdGUudXVpZCkgcmV0dXJuIGZhbHNlOwogIGlmIChzdGF0ZS5lTUlzLmhhcyhtc2dPYmouaWQpKSByZXR1cm4gZmFsc2U7CiAgaWYgKG1zZ09iai5kYXRhLnRpbWUgPCBzdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHJlYWROZXdNZXNzYWdlcyhzdGF0ZSkgewogIGlmIChzdGF0ZS5jbG9zZWQpIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgaWYgKCFzdGF0ZS5tZXNzYWdlc0NhbGxiYWNrKSByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oc3RhdGUuZGIsIHN0YXRlLmxhc3RDdXJzb3JJZCkudGhlbihmdW5jdGlvbihuZXdlck1lc3NhZ2VzKSB7CiAgICB2YXIgdXNlTWVzc2FnZXMgPSBuZXdlck1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbihtc2dPYmopIHsKICAgICAgcmV0dXJuICEhbXNnT2JqOwogICAgfSkubWFwKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAobXNnT2JqLmlkID4gc3RhdGUubGFzdEN1cnNvcklkKSB7CiAgICAgICAgc3RhdGUubGFzdEN1cnNvcklkID0gbXNnT2JqLmlkOwogICAgICB9CiAgICAgIHJldHVybiBtc2dPYmo7CiAgICB9KS5maWx0ZXIoZnVuY3Rpb24obXNnT2JqKSB7CiAgICAgIHJldHVybiBfZmlsdGVyTWVzc2FnZShtc2dPYmosIHN0YXRlKTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obXNnT2JqQSwgbXNnT2JqQikgewogICAgICByZXR1cm4gbXNnT2JqQS50aW1lIC0gbXNnT2JqQi50aW1lOwogICAgfSk7CiAgICB1c2VNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAoc3RhdGUubWVzc2FnZXNDYWxsYmFjaykgewogICAgICAgIHN0YXRlLmVNSXMuYWRkKG1zZ09iai5pZCk7CiAgICAgICAgc3RhdGUubWVzc2FnZXNDYWxsYmFjayhtc2dPYmouZGF0YSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDsKICB9KTsKfQpmdW5jdGlvbiBjbG9zZTIoY2hhbm5lbFN0YXRlKSB7CiAgY2hhbm5lbFN0YXRlLmNsb3NlZCA9IHRydWU7CiAgY2hhbm5lbFN0YXRlLmRiLmNsb3NlKCk7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UgPSBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiB3cml0ZU1lc3NhZ2UoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUudXVpZCwgbWVzc2FnZUpzb24pOwogIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICBpZiAocmFuZG9tSW50KDAsIDEwKSA9PT0gMCkgewogICAgICBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNoYW5uZWxTdGF0ZS53cml0ZUJsb2NrUHJvbWlzZTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgZm4sIHRpbWUpIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFja1RpbWUgPSB0aW1lOwogIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrID0gZm47CiAgcmVhZE5ld01lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7Cn0KZnVuY3Rpb24gY2FuQmVVc2VkMigpIHsKICByZXR1cm4gISFnZXRJZGIoKTsKfQpmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lMihvcHRpb25zKSB7CiAgcmV0dXJuIG9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwgKiAyOwp9CnZhciBtaWNyb1NlY29uZHMzLCBEQl9QUkVGSVgsIE9CSkVDVF9TVE9SRV9JRCwgVFJBTlNBQ1RJT05fU0VUVElOR1MsIHR5cGUyLCBJbmRleGVkREJNZXRob2Q7CnZhciBpbml0X2luZGV4ZWRfZGIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9zcmMoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgbWljcm9TZWNvbmRzMyA9IG1pY3JvU2Vjb25kczsKICAgIERCX1BSRUZJWCA9ICJwdWJrZXkuYnJvYWRjYXN0LWNoYW5uZWwtMC0iOwogICAgT0JKRUNUX1NUT1JFX0lEID0gIm1lc3NhZ2VzIjsKICAgIFRSQU5TQUNUSU9OX1NFVFRJTkdTID0gewogICAgICBkdXJhYmlsaXR5OiAicmVsYXhlZCIKICAgIH07CiAgICB0eXBlMiA9ICJpZGIiOwogICAgSW5kZXhlZERCTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTIsCiAgICAgIGNsb3NlOiBjbG9zZTIsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMiwKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMiwKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQyLAogICAgICB0eXBlOiB0eXBlMiwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTIsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzMwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcwpmdW5jdGlvbiBnZXRMb2NhbFN0b3JhZ2UoKSB7CiAgdmFyIGxvY2FsU3RvcmFnZTI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICB0cnkgewogICAgbG9jYWxTdG9yYWdlMiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgICBsb2NhbFN0b3JhZ2UyID0gd2luZG93WyJpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlIl0gfHwgd2luZG93LmxvY2FsU3RvcmFnZTsKICB9IGNhdGNoIChlMTEpIHsKICB9CiAgcmV0dXJuIGxvY2FsU3RvcmFnZTI7Cn0KZnVuY3Rpb24gc3RvcmFnZUtleShjaGFubmVsTmFtZSkgewogIHJldHVybiBLRVlfUFJFRklYICsgY2hhbm5lbE5hbWU7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UzKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBzbGVlcCgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBrZXkyID0gc3RvcmFnZUtleShjaGFubmVsU3RhdGUuY2hhbm5lbE5hbWUpOwogICAgICB2YXIgd3JpdGVPYmogPSB7CiAgICAgICAgdG9rZW46IHJhbmRvbVRva2VuKCksCiAgICAgICAgdGltZTogRGF0ZS5ub3coKSwKICAgICAgICBkYXRhOiBtZXNzYWdlSnNvbiwKICAgICAgICB1dWlkOiBjaGFubmVsU3RhdGUudXVpZAogICAgICB9OwogICAgICB2YXIgdmFsdWUyID0gSlNPTi5zdHJpbmdpZnkod3JpdGVPYmopOwogICAgICBnZXRMb2NhbFN0b3JhZ2UoKS5zZXRJdGVtKGtleTIsIHZhbHVlMik7CiAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICBldi5pbml0RXZlbnQoInN0b3JhZ2UiLCB0cnVlLCB0cnVlKTsKICAgICAgZXYua2V5ID0ga2V5MjsKICAgICAgZXYubmV3VmFsdWUgPSB2YWx1ZTI7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2KTsKICAgICAgcmVzKCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsTmFtZSwgZm4pIHsKICB2YXIga2V5MiA9IHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpOwogIHZhciBsaXN0ZW5lcjIgPSBmdW5jdGlvbiBsaXN0ZW5lcjMoZXYpIHsKICAgIGlmIChldi5rZXkgPT09IGtleTIpIHsKICAgICAgZm4oSlNPTi5wYXJzZShldi5uZXdWYWx1ZSkpOwogICAgfQogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwogIHJldHVybiBsaXN0ZW5lcjI7Cn0KZnVuY3Rpb24gcmVtb3ZlU3RvcmFnZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwp9CmZ1bmN0aW9uIGNyZWF0ZTMoY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgaWYgKCFjYW5CZVVzZWQzKCkpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbDogbG9jYWxzdG9yYWdlIGNhbm5vdCBiZSB1c2VkIik7CiAgfQogIHZhciB1dWlkID0gcmFuZG9tVG9rZW4oKTsKICB2YXIgZU1JcyA9IG5ldyBPYmxpdmlvdXNTZXQob3B0aW9ucy5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dCk7CiAgdmFyIHN0YXRlID0gewogICAgY2hhbm5lbE5hbWUsCiAgICB1dWlkLAogICAgZU1JcwogICAgLy8gZW1pdHRlZE1lc3NhZ2VzSWRzCiAgfTsKICBzdGF0ZS5saXN0ZW5lciA9IGFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKGNoYW5uZWxOYW1lLCBmdW5jdGlvbihtc2dPYmopIHsKICAgIGlmICghc3RhdGUubWVzc2FnZXNDYWxsYmFjaykgcmV0dXJuOwogICAgaWYgKG1zZ09iai51dWlkID09PSB1dWlkKSByZXR1cm47CiAgICBpZiAoIW1zZ09iai50b2tlbiB8fCBlTUlzLmhhcyhtc2dPYmoudG9rZW4pKSByZXR1cm47CiAgICBpZiAobXNnT2JqLmRhdGEudGltZSAmJiBtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUubWVzc2FnZXNDYWxsYmFja1RpbWUpIHJldHVybjsKICAgIGVNSXMuYWRkKG1zZ09iai50b2tlbik7CiAgICBzdGF0ZS5tZXNzYWdlc0NhbGxiYWNrKG1zZ09iai5kYXRhKTsKICB9KTsKICByZXR1cm4gc3RhdGU7Cn0KZnVuY3Rpb24gY2xvc2UzKGNoYW5uZWxTdGF0ZSkgewogIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGNoYW5uZWxTdGF0ZS5saXN0ZW5lcik7Cn0KZnVuY3Rpb24gb25NZXNzYWdlMyhjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lID0gdGltZTsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDMoKSB7CiAgdmFyIGxzID0gZ2V0TG9jYWxTdG9yYWdlKCk7CiAgaWYgKCFscykgcmV0dXJuIGZhbHNlOwogIHRyeSB7CiAgICB2YXIga2V5MiA9ICJfX2Jyb2FkY2FzdGNoYW5uZWxfY2hlY2siOwogICAgbHMuc2V0SXRlbShrZXkyLCAid29ya3MiKTsKICAgIGxzLnJlbW92ZUl0ZW0oa2V5Mik7CiAgfSBjYXRjaCAoZTExKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUzKCkgewogIHZhciBkZWZhdWx0VGltZSA9IDEyMDsKICB2YXIgdXNlckFnZW50MiA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKICBpZiAodXNlckFnZW50Mi5pbmNsdWRlcygic2FmYXJpIikgJiYgIXVzZXJBZ2VudDIuaW5jbHVkZXMoImNocm9tZSIpKSB7CiAgICByZXR1cm4gZGVmYXVsdFRpbWUgKiAyOwogIH0KICByZXR1cm4gZGVmYXVsdFRpbWU7Cn0KdmFyIG1pY3JvU2Vjb25kczQsIEtFWV9QUkVGSVgsIHR5cGUzLCBMb2NhbHN0b3JhZ2VNZXRob2Q7CnZhciBpbml0X2xvY2Fsc3RvcmFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcyIoKSB7CiAgICBpbml0X3NyYygpOwogICAgaW5pdF9vcHRpb25zKCk7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczQgPSBtaWNyb1NlY29uZHM7CiAgICBLRVlfUFJFRklYID0gInB1YmtleS5icm9hZGNhc3RDaGFubmVsLSI7CiAgICB0eXBlMyA9ICJsb2NhbHN0b3JhZ2UiOwogICAgTG9jYWxzdG9yYWdlTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTMsCiAgICAgIGNsb3NlOiBjbG9zZTMsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMywKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMywKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQzLAogICAgICB0eXBlOiB0eXBlMywKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTMsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzNAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzCmZ1bmN0aW9uIGNyZWF0ZTQoY2hhbm5lbE5hbWUpIHsKICB2YXIgc3RhdGUgPSB7CiAgICB0aW1lOiBtaWNyb1NlY29uZHM1KCksCiAgICBuYW1lOiBjaGFubmVsTmFtZSwKICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwKICB9OwogIFNJTVVMQVRFX0NIQU5ORUxTLmFkZChzdGF0ZSk7CiAgcmV0dXJuIHN0YXRlOwp9CmZ1bmN0aW9uIGNsb3NlNChjaGFubmVsU3RhdGUpIHsKICBTSU1VTEFURV9DSEFOTkVMU1siZGVsZXRlIl0oY2hhbm5lbFN0YXRlKTsKfQpmdW5jdGlvbiBwb3N0TWVzc2FnZTQoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2hhbm5lbEFycmF5ID0gQXJyYXkuZnJvbShTSU1VTEFURV9DSEFOTkVMUyk7CiAgICAgIGNoYW5uZWxBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoYW5uZWwpIHsKICAgICAgICBpZiAoY2hhbm5lbC5uYW1lID09PSBjaGFubmVsU3RhdGUubmFtZSAmJiAvLyBoYXMgc2FtZSBuYW1lCiAgICAgICAgY2hhbm5lbCAhPT0gY2hhbm5lbFN0YXRlICYmIC8vIG5vdCBvd24gY2hhbm5lbAogICAgICAgICEhY2hhbm5lbC5tZXNzYWdlc0NhbGxiYWNrICYmIC8vIGhhcyBzdWJzY3JpYmVycwogICAgICAgIGNoYW5uZWwudGltZSA8IG1lc3NhZ2VKc29uLnRpbWUpIHsKICAgICAgICAgIGNoYW5uZWwubWVzc2FnZXNDYWxsYmFjayhtZXNzYWdlSnNvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmVzKCk7CiAgICB9LCBTSU1VTEFURV9ERUxBWV9USU1FKTsKICB9KTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2U0KGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDQoKSB7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZTQoKSB7CiAgcmV0dXJuIFNJTVVMQVRFX0RFTEFZX1RJTUU7Cn0KdmFyIG1pY3JvU2Vjb25kczUsIHR5cGU0LCBTSU1VTEFURV9DSEFOTkVMUywgU0lNVUxBVEVfREVMQVlfVElNRSwgU2ltdWxhdGVNZXRob2Q7CnZhciBpbml0X3NpbXVsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvc2ltdWxhdGUuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHM1ID0gbWljcm9TZWNvbmRzOwogICAgdHlwZTQgPSAic2ltdWxhdGUiOwogICAgU0lNVUxBVEVfQ0hBTk5FTFMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgU0lNVUxBVEVfREVMQVlfVElNRSA9IDU7CiAgICBTaW11bGF0ZU1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGU0LAogICAgICBjbG9zZTogY2xvc2U0LAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTQsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTQsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkNCwKICAgICAgdHlwZTogdHlwZTQsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWU0LAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kLWNob29zZXIuanMKZnVuY3Rpb24gY2hvb3NlTWV0aG9kKG9wdGlvbnMpIHsKICB2YXIgY2hvb3NlTWV0aG9kcyA9IFtdLmNvbmNhdChvcHRpb25zLm1ldGhvZHMsIE1FVEhPRFMpLmZpbHRlcihCb29sZWFuKTsKICBpZiAob3B0aW9ucy50eXBlKSB7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAic2ltdWxhdGUiKSB7CiAgICAgIHJldHVybiBTaW11bGF0ZU1ldGhvZDsKICAgIH0KICAgIHZhciByZXQgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgPT09IG9wdGlvbnMudHlwZTsKICAgIH0pOwogICAgaWYgKCFyZXQpIHRocm93IG5ldyBFcnJvcigibWV0aG9kLXR5cGUgIiArIG9wdGlvbnMudHlwZSArICIgbm90IGZvdW5kIik7CiAgICBlbHNlIHJldHVybiByZXQ7CiAgfQogIGlmICghb3B0aW9ucy53ZWJXb3JrZXJTdXBwb3J0KSB7CiAgICBjaG9vc2VNZXRob2RzID0gY2hvb3NlTWV0aG9kcy5maWx0ZXIoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgIT09ICJpZGIiOwogICAgfSk7CiAgfQogIHZhciB1c2VNZXRob2QgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obWV0aG9kKSB7CiAgICByZXR1cm4gbWV0aG9kLmNhbkJlVXNlZCgpOwogIH0pOwogIGlmICghdXNlTWV0aG9kKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHVzYWJsZSBtZXRob2QgZm91bmQgaW4gIiArIEpTT04uc3RyaW5naWZ5KE1FVEhPRFMubWFwKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlOwogICAgfSkpKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVzZU1ldGhvZDsKICB9Cn0KdmFyIE1FVEhPRFM7CnZhciBpbml0X21ldGhvZF9jaG9vc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZC1jaG9vc2VyLmpzIigpIHsKICAgIGluaXRfbmF0aXZlKCk7CiAgICBpbml0X2luZGV4ZWRfZGIoKTsKICAgIGluaXRfbG9jYWxzdG9yYWdlKCk7CiAgICBpbml0X3NpbXVsYXRlKCk7CiAgICBNRVRIT0RTID0gWwogICAgICBOYXRpdmVNZXRob2QsCiAgICAgIC8vIGZhc3Rlc3QKICAgICAgSW5kZXhlZERCTWV0aG9kLAogICAgICBMb2NhbHN0b3JhZ2VNZXRob2QKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvYnJvYWRjYXN0LWNoYW5uZWwuanMKZnVuY3Rpb24gY2xlYXJOb2RlRm9sZGVyKG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgdmFyIG1ldGhvZCA9IGNob29zZU1ldGhvZChvcHRpb25zKTsKICBpZiAobWV0aG9kLnR5cGUgPT09ICJub2RlIikgewogICAgcmV0dXJuIG1ldGhvZC5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9GQUxTRTsKICB9Cn0KZnVuY3Rpb24gZW5mb3JjZU9wdGlvbnMob3B0aW9ucykgewogIEVORk9SQ0VEX09QVElPTlMgPSBvcHRpb25zOwp9CmZ1bmN0aW9uIF9wb3N0KGJyb2FkY2FzdENoYW5uZWwsIHR5cGU1LCBtc2cpIHsKICB2YXIgdGltZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogIHZhciBtc2dPYmogPSB7CiAgICB0aW1lLAogICAgdHlwZTogdHlwZTUsCiAgICBkYXRhOiBtc2cKICB9OwogIHZhciBhd2FpdFByZXBhcmUgPSBicm9hZGNhc3RDaGFubmVsLl9wcmVwUCA/IGJyb2FkY2FzdENoYW5uZWwuX3ByZXBQIDogUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbigpIHsKICAgIHZhciBzZW5kUHJvbWlzZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnBvc3RNZXNzYWdlKGJyb2FkY2FzdENoYW5uZWwuX3N0YXRlLCBtc2dPYmopOwogICAgYnJvYWRjYXN0Q2hhbm5lbC5fdU1QLmFkZChzZW5kUHJvbWlzZSk7CiAgICBzZW5kUHJvbWlzZVsiY2F0Y2giXSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBicm9hZGNhc3RDaGFubmVsLl91TVBbImRlbGV0ZSJdKHNlbmRQcm9taXNlKTsKICAgIH0pOwogICAgcmV0dXJuIHNlbmRQcm9taXNlOwogIH0pOwp9CmZ1bmN0aW9uIF9wcmVwYXJlQ2hhbm5lbChjaGFubmVsKSB7CiAgdmFyIG1heWJlUHJvbWlzZSA9IGNoYW5uZWwubWV0aG9kLmNyZWF0ZShjaGFubmVsLm5hbWUsIGNoYW5uZWwub3B0aW9ucyk7CiAgaWYgKGlzUHJvbWlzZTIobWF5YmVQcm9taXNlKSkgewogICAgY2hhbm5lbC5fcHJlcFAgPSBtYXliZVByb21pc2U7CiAgICBtYXliZVByb21pc2UudGhlbihmdW5jdGlvbihzMTApIHsKICAgICAgY2hhbm5lbC5fc3RhdGUgPSBzMTA7CiAgICB9KTsKICB9IGVsc2UgewogICAgY2hhbm5lbC5fc3RhdGUgPSBtYXliZVByb21pc2U7CiAgfQp9CmZ1bmN0aW9uIF9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpIHsKICBpZiAoY2hhbm5lbC5fYWRkRUwubWVzc2FnZS5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTsKICBpZiAoY2hhbm5lbC5fYWRkRUwuaW50ZXJuYWwubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIF9hZGRMaXN0ZW5lck9iamVjdChjaGFubmVsLCB0eXBlNSwgb2JqKSB7CiAgY2hhbm5lbC5fYWRkRUxbdHlwZTVdLnB1c2gob2JqKTsKICBfc3RhcnRMaXN0ZW5pbmcoY2hhbm5lbCk7Cn0KZnVuY3Rpb24gX3JlbW92ZUxpc3RlbmVyT2JqZWN0KGNoYW5uZWwsIHR5cGU1LCBvYmopIHsKICBjaGFubmVsLl9hZGRFTFt0eXBlNV0gPSBjaGFubmVsLl9hZGRFTFt0eXBlNV0uZmlsdGVyKGZ1bmN0aW9uKG8xMykgewogICAgcmV0dXJuIG8xMyAhPT0gb2JqOwogIH0pOwogIF9zdG9wTGlzdGVuaW5nKGNoYW5uZWwpOwp9CmZ1bmN0aW9uIF9zdGFydExpc3RlbmluZyhjaGFubmVsKSB7CiAgaWYgKCFjaGFubmVsLl9pTCAmJiBfaGFzTWVzc2FnZUxpc3RlbmVycyhjaGFubmVsKSkgewogICAgdmFyIGxpc3RlbmVyRm4gPSBmdW5jdGlvbiBsaXN0ZW5lckZuMihtc2dPYmopIHsKICAgICAgY2hhbm5lbC5fYWRkRUxbbXNnT2JqLnR5cGVdLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXJPYmplY3QpIHsKICAgICAgICBpZiAobXNnT2JqLnRpbWUgPj0gbGlzdGVuZXJPYmplY3QudGltZSkgewogICAgICAgICAgbGlzdGVuZXJPYmplY3QuZm4obXNnT2JqLmRhdGEpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgdmFyIHRpbWUgPSBjaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgIGlmIChjaGFubmVsLl9wcmVwUCkgewogICAgICBjaGFubmVsLl9wcmVwUC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgIGNoYW5uZWwuX2lMID0gdHJ1ZTsKICAgICAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIGxpc3RlbmVyRm4sIHRpbWUpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGNoYW5uZWwuX2lMID0gdHJ1ZTsKICAgICAgY2hhbm5lbC5tZXRob2Qub25NZXNzYWdlKGNoYW5uZWwuX3N0YXRlLCBsaXN0ZW5lckZuLCB0aW1lKTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gX3N0b3BMaXN0ZW5pbmcoY2hhbm5lbCkgewogIGlmIChjaGFubmVsLl9pTCAmJiAhX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkpIHsKICAgIGNoYW5uZWwuX2lMID0gZmFsc2U7CiAgICB2YXIgdGltZSA9IGNoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgY2hhbm5lbC5tZXRob2Qub25NZXNzYWdlKGNoYW5uZWwuX3N0YXRlLCBudWxsLCB0aW1lKTsKICB9Cn0KdmFyIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTLCBsYXN0SWQsIEJyb2FkY2FzdENoYW5uZWwyLCBFTkZPUkNFRF9PUFRJT05TOwp2YXIgaW5pdF9icm9hZGNhc3RfY2hhbm5lbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9icm9hZGNhc3QtY2hhbm5lbC5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfbWV0aG9kX2Nob29zZXIoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgbGFzdElkID0gMDsKICAgIEJyb2FkY2FzdENoYW5uZWwyID0gZnVuY3Rpb24gQnJvYWRjYXN0Q2hhbm5lbDMobmFtZSwgb3B0aW9ucykgewogICAgICB0aGlzLmlkID0gbGFzdElkKys7CiAgICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTLmFkZCh0aGlzKTsKICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgaWYgKEVORk9SQ0VEX09QVElPTlMpIHsKICAgICAgICBvcHRpb25zID0gRU5GT1JDRURfT1BUSU9OUzsKICAgICAgfQogICAgICB0aGlzLm9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zKTsKICAgICAgdGhpcy5tZXRob2QgPSBjaG9vc2VNZXRob2QodGhpcy5vcHRpb25zKTsKICAgICAgdGhpcy5faUwgPSBmYWxzZTsKICAgICAgdGhpcy5fb25NTCA9IG51bGw7CiAgICAgIHRoaXMuX2FkZEVMID0gewogICAgICAgIG1lc3NhZ2U6IFtdLAogICAgICAgIGludGVybmFsOiBbXQogICAgICB9OwogICAgICB0aGlzLl91TVAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB0aGlzLl9iZWZDID0gW107CiAgICAgIHRoaXMuX3ByZXBQID0gbnVsbDsKICAgICAgX3ByZXBhcmVDaGFubmVsKHRoaXMpOwogICAgfTsKICAgIEJyb2FkY2FzdENoYW5uZWwyLl9wdWJrZXkgPSB0cnVlOwogICAgQnJvYWRjYXN0Q2hhbm5lbDIucHJvdG90eXBlID0gewogICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2U1KG1zZykgewogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKCk6IENhbm5vdCBwb3N0IG1lc3NhZ2UgYWZ0ZXIgY2hhbm5lbCBoYXMgY2xvc2VkICIgKyAvKioKICAgICAgICAgICAqIEluIHRoZSBwYXN0IHdoZW4gdGhpcyBlcnJvciBhcHBlYXJlZCwgaXQgd2FzIHJlYWxseSBoYXJkIHRvIGRlYnVnLgogICAgICAgICAgICogU28gbm93IHdlIGxvZyB0aGUgbXNnIHRvZ2V0aGVyIHdpdGggdGhlIGVycm9yIHNvIGl0IGF0IGxlYXN0CiAgICAgICAgICAgKiBnaXZlcyBzb21lIGNsdWUgYWJvdXQgd2hlcmUgaW4geW91ciBhcHBsaWNhdGlvbiB0aGlzIGhhcHBlbnMuCiAgICAgICAgICAgKi8KICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1zZykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Bvc3QodGhpcywgIm1lc3NhZ2UiLCBtc2cpOwogICAgICB9LAogICAgICBwb3N0SW50ZXJuYWw6IGZ1bmN0aW9uIHBvc3RJbnRlcm5hbChtc2cpIHsKICAgICAgICByZXR1cm4gX3Bvc3QodGhpcywgImludGVybmFsIiwgbXNnKTsKICAgICAgfSwKICAgICAgc2V0IG9ubWVzc2FnZShmbikgewogICAgICAgIHZhciB0aW1lID0gdGhpcy5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICAgICAgdmFyIGxpc3Rlbk9iaiA9IHsKICAgICAgICAgIHRpbWUsCiAgICAgICAgICBmbgogICAgICAgIH07CiAgICAgICAgX3JlbW92ZUxpc3RlbmVyT2JqZWN0KHRoaXMsICJtZXNzYWdlIiwgdGhpcy5fb25NTCk7CiAgICAgICAgaWYgKGZuICYmIHR5cGVvZiBmbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5fb25NTCA9IGxpc3Rlbk9iajsKICAgICAgICAgIF9hZGRMaXN0ZW5lck9iamVjdCh0aGlzLCAibWVzc2FnZSIsIGxpc3Rlbk9iaik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX29uTUwgPSBudWxsOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0eXBlNSwgZm4pIHsKICAgICAgICB2YXIgdGltZSA9IHRoaXMubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgICAgIHZhciBsaXN0ZW5PYmogPSB7CiAgICAgICAgICB0aW1lLAogICAgICAgICAgZm4KICAgICAgICB9OwogICAgICAgIF9hZGRMaXN0ZW5lck9iamVjdCh0aGlzLCB0eXBlNSwgbGlzdGVuT2JqKTsKICAgICAgfSwKICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlNSwgZm4pIHsKICAgICAgICB2YXIgb2JqID0gdGhpcy5fYWRkRUxbdHlwZTVdLmZpbmQoZnVuY3Rpb24ob2JqMikgewogICAgICAgICAgcmV0dXJuIG9iajIuZm4gPT09IGZuOwogICAgICAgIH0pOwogICAgICAgIF9yZW1vdmVMaXN0ZW5lck9iamVjdCh0aGlzLCB0eXBlNSwgb2JqKTsKICAgICAgfSwKICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlNSgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMU1siZGVsZXRlIl0odGhpcyk7CiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlOwogICAgICAgIHZhciBhd2FpdFByZXBhcmUgPSB0aGlzLl9wcmVwUCA/IHRoaXMuX3ByZXBQIDogUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogICAgICAgIHRoaXMuX29uTUwgPSBudWxsOwogICAgICAgIHRoaXMuX2FkZEVMLm1lc3NhZ2UgPSBbXTsKICAgICAgICByZXR1cm4gYXdhaXRQcmVwYXJlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShfdGhpcy5fdU1QKSk7CiAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChfdGhpcy5fYmVmQy5tYXAoZnVuY3Rpb24oZm4pIHsKICAgICAgICAgICAgcmV0dXJuIGZuKCk7CiAgICAgICAgICB9KSk7CiAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5tZXRob2QuY2xvc2UoX3RoaXMuX3N0YXRlKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZ2V0IHR5cGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kLnR5cGU7CiAgICAgIH0sCiAgICAgIGdldCBpc0Nsb3NlZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5jbG9zZWQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2Jyb3dzZXIuanMKZnVuY3Rpb24gYWRkQnJvd3NlcihmbikgewogIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgPT09ICJmdW5jdGlvbiIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKSB7CiAgICB2YXIgb2xkQ2xvc2UgPSBzZWxmLmNsb3NlLmJpbmQoc2VsZik7CiAgICBzZWxmLmNsb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIGZuKCk7CiAgICAgIHJldHVybiBvbGRDbG9zZSgpOwogICAgfTsKICB9IGVsc2UgewogICAgaWYgKHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAhPT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm47CiAgICB9CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGZuKCk7CiAgICB9LCB0cnVlKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgZm4oKTsKICAgIH0sIHRydWUpOwogIH0KfQp2YXIgaW5pdF9icm93c2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9icm93c2VyLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvbm9kZS5qcwpmdW5jdGlvbiBhZGROb2RlKGZuKSB7CiAgcHJvY2Vzcy5vbigiZXhpdCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGZuKCk7CiAgfSk7CiAgcHJvY2Vzcy5vbigiYmVmb3JlRXhpdCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgpOwogICAgfSk7CiAgfSk7CiAgcHJvY2Vzcy5vbigiU0lHSU5UIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZm4oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcHJvY2Vzcy5leGl0KCk7CiAgICB9KTsKICB9KTsKICBwcm9jZXNzLm9uKCJ1bmNhdWdodEV4Y2VwdGlvbiIsIGZ1bmN0aW9uKGVycikgewogICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgY29uc29sZS50cmFjZShlcnIpOwogICAgICBwcm9jZXNzLmV4aXQoMTAxKTsKICAgIH0pOwogIH0pOwp9CnZhciBpbml0X25vZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL25vZGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9pbmRleC5qcwpmdW5jdGlvbiBzdGFydExpc3RlbmluZygpIHsKICBpZiAoc3RhcnRlZExpc3RlbmluZykgewogICAgcmV0dXJuOwogIH0KICBzdGFydGVkTGlzdGVuaW5nID0gdHJ1ZTsKICBVU0VfTUVUSE9EKHJ1bkFsbCk7Cn0KZnVuY3Rpb24gYWRkMihmbikgewogIHN0YXJ0TGlzdGVuaW5nKCk7CiAgaWYgKHR5cGVvZiBmbiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IEVycm9yKCJMaXN0ZW5lciBpcyBubyBmdW5jdGlvbiIpOwogIH0KICBMSVNURU5FUlMuYWRkKGZuKTsKICB2YXIgYWRkUmV0dXJuID0gewogICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUyKCkgewogICAgICByZXR1cm4gTElTVEVORVJTWyJkZWxldGUiXShmbik7CiAgICB9LAogICAgcnVuOiBmdW5jdGlvbiBydW4oKSB7CiAgICAgIExJU1RFTkVSU1siZGVsZXRlIl0oZm4pOwogICAgICByZXR1cm4gZm4oKTsKICAgIH0KICB9OwogIHJldHVybiBhZGRSZXR1cm47Cn0KZnVuY3Rpb24gcnVuQWxsKCkgewogIHZhciBwcm9taXNlcyA9IFtdOwogIExJU1RFTkVSUy5mb3JFYWNoKGZ1bmN0aW9uKGZuKSB7CiAgICBwcm9taXNlcy5wdXNoKGZuKCkpOwogICAgTElTVEVORVJTWyJkZWxldGUiXShmbik7CiAgfSk7CiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTsKfQpmdW5jdGlvbiByZW1vdmVBbGwoKSB7CiAgTElTVEVORVJTLmNsZWFyKCk7Cn0KZnVuY3Rpb24gZ2V0U2l6ZSgpIHsKICByZXR1cm4gTElTVEVORVJTLnNpemU7Cn0KdmFyIGlzTm9kZSwgVVNFX01FVEhPRCwgTElTVEVORVJTLCBzdGFydGVkTGlzdGVuaW5nOwp2YXIgaW5pdF9lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9icm93c2VyKCk7CiAgICBpbml0X25vZGUoKTsKICAgIGlzTm9kZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgPyBwcm9jZXNzIDogMCkgPT09ICJbb2JqZWN0IHByb2Nlc3NdIjsKICAgIFVTRV9NRVRIT0QgPSBpc05vZGUgPyBhZGROb2RlIDogYWRkQnJvd3NlcjsKICAgIExJU1RFTkVSUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBzdGFydGVkTGlzdGVuaW5nID0gZmFsc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLXV0aWwuanMKZnVuY3Rpb24gc2VuZExlYWRlck1lc3NhZ2UobGVhZGVyRWxlY3RvciwgYWN0aW9uKSB7CiAgdmFyIG1zZ0pzb24gPSB7CiAgICBjb250ZXh0OiAibGVhZGVyIiwKICAgIGFjdGlvbiwKICAgIHRva2VuOiBsZWFkZXJFbGVjdG9yLnRva2VuCiAgfTsKICByZXR1cm4gbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLnBvc3RJbnRlcm5hbChtc2dKc29uKTsKfQpmdW5jdGlvbiBiZUxlYWRlcihsZWFkZXJFbGVjdG9yKSB7CiAgbGVhZGVyRWxlY3Rvci5pc0xlYWRlciA9IHRydWU7CiAgbGVhZGVyRWxlY3Rvci5faGFzTGVhZGVyID0gdHJ1ZTsKICB2YXIgdW5sb2FkRm4gPSBhZGQyKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGxlYWRlckVsZWN0b3IuZGllKCk7CiAgfSk7CiAgbGVhZGVyRWxlY3Rvci5fdW5sLnB1c2godW5sb2FkRm4pOwogIHZhciBpc0xlYWRlckxpc3RlbmVyID0gZnVuY3Rpb24gaXNMZWFkZXJMaXN0ZW5lcjIobXNnKSB7CiAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy5hY3Rpb24gPT09ICJhcHBseSIpIHsKICAgICAgc2VuZExlYWRlck1lc3NhZ2UobGVhZGVyRWxlY3RvciwgInRlbGwiKTsKICAgIH0KICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLmFjdGlvbiA9PT0gInRlbGwiICYmICFsZWFkZXJFbGVjdG9yLl9kcExDKSB7CiAgICAgIGxlYWRlckVsZWN0b3IuX2RwTEMgPSB0cnVlOwogICAgICBsZWFkZXJFbGVjdG9yLl9kcEwoKTsKICAgICAgc2VuZExlYWRlck1lc3NhZ2UobGVhZGVyRWxlY3RvciwgInRlbGwiKTsKICAgIH0KICB9OwogIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGlzTGVhZGVyTGlzdGVuZXIpOwogIGxlYWRlckVsZWN0b3IuX2xzdG5zLnB1c2goaXNMZWFkZXJMaXN0ZW5lcik7CiAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICJ0ZWxsIik7Cn0KdmFyIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLXV0aWwuanMiKCkgewogICAgaW5pdF9lcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi13ZWItbG9jay5qcwp2YXIgTGVhZGVyRWxlY3Rpb25XZWJMb2NrLCBMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFOwp2YXIgaW5pdF9sZWFkZXJfZWxlY3Rpb25fd2ViX2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLXdlYi1sb2NrLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCgpOwogICAgTGVhZGVyRWxlY3Rpb25XZWJMb2NrID0gZnVuY3Rpb24gTGVhZGVyRWxlY3Rpb25XZWJMb2NrMihicm9hZGNhc3RDaGFubmVsLCBvcHRpb25zKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGJyb2FkY2FzdENoYW5uZWw7CiAgICAgIGJyb2FkY2FzdENoYW5uZWwuX2JlZkMucHVzaChmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gX3RoaXMuZGllKCk7CiAgICAgIH0pOwogICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlOwogICAgICB0aGlzLmlzRGVhZCA9IGZhbHNlOwogICAgICB0aGlzLnRva2VuID0gcmFuZG9tVG9rZW4oKTsKICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgIHRoaXMuX2RwTCA9IGZ1bmN0aW9uKCkgewogICAgICB9OwogICAgICB0aGlzLl9kcExDID0gZmFsc2U7CiAgICAgIHRoaXMuX3dLTUMgPSB7fTsKICAgICAgdGhpcy5sTiA9ICJwdWJrZXktYmN8fCIgKyBicm9hZGNhc3RDaGFubmVsLm1ldGhvZC50eXBlICsgInx8IiArIGJyb2FkY2FzdENoYW5uZWwubmFtZTsKICAgIH07CiAgICBMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFID0gIkxlYWRlckVsZWN0aW9uV2ViTG9jay5kaWUoKSBjYWxsZWQiOwogICAgTGVhZGVyRWxlY3Rpb25XZWJMb2NrLnByb3RvdHlwZSA9IHsKICAgICAgaGFzTGVhZGVyOiBmdW5jdGlvbiBoYXNMZWFkZXIoKSB7CiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5sb2Nrcy5xdWVyeSgpLnRoZW4oZnVuY3Rpb24obG9ja3MpIHsKICAgICAgICAgIHZhciByZWxldmFudExvY2tzID0gbG9ja3MuaGVsZCA/IGxvY2tzLmhlbGQuZmlsdGVyKGZ1bmN0aW9uKGxvY2spIHsKICAgICAgICAgICAgcmV0dXJuIGxvY2submFtZSA9PT0gX3RoaXMyLmxOOwogICAgICAgICAgfSkgOiBbXTsKICAgICAgICAgIGlmIChyZWxldmFudExvY2tzICYmIHJlbGV2YW50TG9ja3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwKICAgICAgYXdhaXRMZWFkZXJzaGlwOiBmdW5jdGlvbiBhd2FpdExlYWRlcnNoaXAoKSB7CiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgICAgaWYgKCF0aGlzLl93TE1QKSB7CiAgICAgICAgICB0aGlzLl93S01DLmMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgICB2YXIgcmV0dXJuUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICAgICAgICAgIF90aGlzMy5fd0tNQy5yZXMgPSByZXM7CiAgICAgICAgICAgIF90aGlzMy5fd0tNQy5yZWogPSByZWo7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuX3dMTVAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlamVjdCkgewogICAgICAgICAgICBuYXZpZ2F0b3IubG9ja3MucmVxdWVzdChfdGhpczMubE4sIHsKICAgICAgICAgICAgICBzaWduYWw6IF90aGlzMy5fd0tNQy5jLnNpZ25hbAogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBfdGhpczMuX3dLTUMuYyA9IHZvaWQgMDsKICAgICAgICAgICAgICBiZUxlYWRlcihfdGhpczMpOwogICAgICAgICAgICAgIHJlcygpOwogICAgICAgICAgICAgIHJldHVybiByZXR1cm5Qcm9taXNlOwogICAgICAgICAgICB9KVsiY2F0Y2giXShmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UgPT09IExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0UpIHsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKF90aGlzMy5fd0tNQy5yZWopIHsKICAgICAgICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlaihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVqZWN0KGVycik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fd0xNUDsKICAgICAgfSwKICAgICAgc2V0IG9uZHVwbGljYXRlKF9mbikgewogICAgICB9LAogICAgICBkaWU6IGZ1bmN0aW9uIGRpZSgpIHsKICAgICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgICB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyMikgewogICAgICAgICAgcmV0dXJuIF90aGlzNC5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgbGlzdGVuZXIyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICAgIHRoaXMuX3VubC5mb3JFYWNoKGZ1bmN0aW9uKHVGbikgewogICAgICAgICAgcmV0dXJuIHVGbi5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgICBpZiAodGhpcy5pc0xlYWRlcikgewogICAgICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzRGVhZCA9IHRydWU7CiAgICAgICAgaWYgKHRoaXMuX3dLTUMucmVzKSB7CiAgICAgICAgICB0aGlzLl93S01DLnJlcygpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fd0tNQy5jKSB7CiAgICAgICAgICB0aGlzLl93S01DLmMuYWJvcnQobmV3IEVycm9yKExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0UpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKHRoaXMsICJkZWF0aCIpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi5qcwpmdW5jdGlvbiBfYXdhaXRMZWFkZXJzaGlwT25jZShsZWFkZXJFbGVjdG9yKSB7CiAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfQogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHZhciByZXNvbHZlZDIgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKICAgICAgaWYgKHJlc29sdmVkMikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICByZXNvbHZlZDIgPSB0cnVlOwogICAgICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCB3aGVuRGVhdGhMaXN0ZW5lcik7CiAgICAgIHJlcyh0cnVlKTsKICAgIH0KICAgIGxlYWRlckVsZWN0b3IuYXBwbHlPbmNlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgICAgICBmaW5pc2goKTsKICAgICAgfQogICAgfSk7CiAgICB2YXIgX3RyeU9uRmFsbEJhY2sgPSBmdW5jdGlvbiB0cnlPbkZhbGxCYWNrKCkgewogICAgICByZXR1cm4gc2xlZXAobGVhZGVyRWxlY3Rvci5fb3B0aW9ucy5mYWxsYmFja0ludGVydmFsKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzRGVhZCB8fCByZXNvbHZlZDIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UodHJ1ZSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgICAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfdHJ5T25GYWxsQmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKICAgIF90cnlPbkZhbGxCYWNrKCk7CiAgICB2YXIgd2hlbkRlYXRoTGlzdGVuZXIgPSBmdW5jdGlvbiB3aGVuRGVhdGhMaXN0ZW5lcjIobXNnKSB7CiAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLmFjdGlvbiA9PT0gImRlYXRoIikgewogICAgICAgIGxlYWRlckVsZWN0b3IuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICAgIGxlYWRlckVsZWN0b3IuYXBwbHlPbmNlKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgd2hlbkRlYXRoTGlzdGVuZXIpOwogICAgbGVhZGVyRWxlY3Rvci5fbHN0bnMucHVzaCh3aGVuRGVhdGhMaXN0ZW5lcik7CiAgfSk7Cn0KZnVuY3Rpb24gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMyKG9wdGlvbnMsIGNoYW5uZWwpIHsKICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKICBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSk7CiAgaWYgKCFvcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwpIHsKICAgIG9wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCA9IDNlMzsKICB9CiAgaWYgKCFvcHRpb25zLnJlc3BvbnNlVGltZSkgewogICAgb3B0aW9ucy5yZXNwb25zZVRpbWUgPSBjaGFubmVsLm1ldGhvZC5hdmVyYWdlUmVzcG9uc2VUaW1lKGNoYW5uZWwub3B0aW9ucyk7CiAgfQogIHJldHVybiBvcHRpb25zOwp9CmZ1bmN0aW9uIGNyZWF0ZUxlYWRlckVsZWN0aW9uKGNoYW5uZWwsIG9wdGlvbnMpIHsKICBpZiAoY2hhbm5lbC5fbGVhZGVyRWxlY3RvcikgewogICAgdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsIGFscmVhZHkgaGFzIGEgbGVhZGVyLWVsZWN0b3IiKTsKICB9CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzMihvcHRpb25zLCBjaGFubmVsKTsKICB2YXIgZWxlY3RvciA9IHN1cHBvcnRzV2ViTG9ja0FQSSgpID8gbmV3IExlYWRlckVsZWN0aW9uV2ViTG9jayhjaGFubmVsLCBvcHRpb25zKSA6IG5ldyBMZWFkZXJFbGVjdGlvbihjaGFubmVsLCBvcHRpb25zKTsKICBjaGFubmVsLl9iZWZDLnB1c2goZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZWxlY3Rvci5kaWUoKTsKICB9KTsKICBjaGFubmVsLl9sZWFkZXJFbGVjdG9yID0gZWxlY3RvcjsKICByZXR1cm4gZWxlY3RvcjsKfQp2YXIgTGVhZGVyRWxlY3Rpb247CnZhciBpbml0X2xlYWRlcl9lbGVjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24uanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl93ZWJfbG9jaygpOwogICAgTGVhZGVyRWxlY3Rpb24gPSBmdW5jdGlvbiBMZWFkZXJFbGVjdGlvbjIoYnJvYWRjYXN0Q2hhbm5lbCwgb3B0aW9ucykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBicm9hZGNhc3RDaGFubmVsOwogICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlOwogICAgICB0aGlzLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgdGhpcy5pc0RlYWQgPSBmYWxzZTsKICAgICAgdGhpcy50b2tlbiA9IHJhbmRvbVRva2VuKCk7CiAgICAgIHRoaXMuX2FwbFEgPSBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgICAgIHRoaXMuX2FwbFFDID0gMDsKICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgIHRoaXMuX2RwTCA9IGZ1bmN0aW9uKCkgewogICAgICB9OwogICAgICB0aGlzLl9kcExDID0gZmFsc2U7CiAgICAgIHZhciBoYXNMZWFkZXJMaXN0ZW5lciA9IGZ1bmN0aW9uIGhhc0xlYWRlckxpc3RlbmVyMihtc2cpIHsKICAgICAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiKSB7CiAgICAgICAgICBpZiAobXNnLmFjdGlvbiA9PT0gImRlYXRoIikgewogICAgICAgICAgICBfdGhpcy5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobXNnLmFjdGlvbiA9PT0gInRlbGwiKSB7CiAgICAgICAgICAgIF90aGlzLl9oYXNMZWFkZXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaGFzTGVhZGVyTGlzdGVuZXIpOwogICAgICB0aGlzLl9sc3Rucy5wdXNoKGhhc0xlYWRlckxpc3RlbmVyKTsKICAgIH07CiAgICBMZWFkZXJFbGVjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgIGhhc0xlYWRlcjogZnVuY3Rpb24gaGFzTGVhZGVyMigpIHsKICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2hhc0xlYWRlcik7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlzIGxlYWRlciwKICAgICAgICogZmFsc2UgaWYgbm90LgogICAgICAgKiBAYXN5bmMKICAgICAgICovCiAgICAgIGFwcGx5T25jZTogZnVuY3Rpb24gYXBwbHlPbmNlKGlzRnJvbUZhbGxiYWNrSW50ZXJ2YWwpIHsKICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgICBpZiAodGhpcy5pc0xlYWRlcikgewogICAgICAgICAgcmV0dXJuIHNsZWVwKDAsIHRydWUpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc0RlYWQpIHsKICAgICAgICAgIHJldHVybiBzbGVlcCgwLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9hcGxRQyA+IDEpIHsKICAgICAgICAgIHJldHVybiB0aGlzLl9hcGxROwogICAgICAgIH0KICAgICAgICB2YXIgYXBwbHlSdW4gPSBmdW5jdGlvbiBhcHBseVJ1bjIoKSB7CiAgICAgICAgICBpZiAoX3RoaXMyLmlzTGVhZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1RSVUU7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgc3RvcENyaXRlcmlhID0gZmFsc2U7CiAgICAgICAgICB2YXIgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmU7CiAgICAgICAgICB2YXIgc3RvcENyaXRlcmlhUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgICAgICAgICBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZSA9IGZ1bmN0aW9uIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlMigpIHsKICAgICAgICAgICAgICBzdG9wQ3JpdGVyaWEgPSB0cnVlOwogICAgICAgICAgICAgIHJlcygpOwogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgaGFuZGxlTWVzc2FnZSA9IGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UyKG1zZykgewogICAgICAgICAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy50b2tlbiAhPSBfdGhpczIudG9rZW4pIHsKICAgICAgICAgICAgICBpZiAobXNnLmFjdGlvbiA9PT0gImFwcGx5IikgewogICAgICAgICAgICAgICAgaWYgKG1zZy50b2tlbiA+IF90aGlzMi50b2tlbikgewogICAgICAgICAgICAgICAgICBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobXNnLmFjdGlvbiA9PT0gInRlbGwiKSB7CiAgICAgICAgICAgICAgICBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgX3RoaXMyLl9oYXNMZWFkZXIgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIF90aGlzMi5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaGFuZGxlTWVzc2FnZSk7CiAgICAgICAgICB2YXIgd2FpdEZvckFuc3dlclRpbWUgPSBpc0Zyb21GYWxsYmFja0ludGVydmFsID8gX3RoaXMyLl9vcHRpb25zLnJlc3BvbnNlVGltZSAqIDQgOiBfdGhpczIuX29wdGlvbnMucmVzcG9uc2VUaW1lOwogICAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKF90aGlzMiwgImFwcGx5IikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbc2xlZXAod2FpdEZvckFuc3dlclRpbWUpLCBzdG9wQ3JpdGVyaWFQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigpKTsKICAgICAgICAgICAgfSldKTsKICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShfdGhpczIsICJhcHBseSIpOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbc2xlZXAod2FpdEZvckFuc3dlclRpbWUpLCBzdG9wQ3JpdGVyaWFQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigpKTsKICAgICAgICAgICAgfSldKTsKICAgICAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKCkgewogICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgX3RoaXMyLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBoYW5kbGVNZXNzYWdlKTsKICAgICAgICAgICAgaWYgKCFzdG9wQ3JpdGVyaWEpIHsKICAgICAgICAgICAgICByZXR1cm4gYmVMZWFkZXIoX3RoaXMyKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIHRoaXMuX2FwbFFDID0gdGhpcy5fYXBsUUMgKyAxOwogICAgICAgIHRoaXMuX2FwbFEgPSB0aGlzLl9hcGxRLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYXBwbHlSdW4oKTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMyLl9hcGxRQyA9IF90aGlzMi5fYXBsUUMgLSAxOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLl9hcGxRLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMyLmlzTGVhZGVyOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBhd2FpdExlYWRlcnNoaXA6IGZ1bmN0aW9uIGF3YWl0TGVhZGVyc2hpcDIoKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLyogX2F3YWl0TGVhZGVyc2hpcFByb21pc2UgKi8KICAgICAgICAgICF0aGlzLl9hTFAKICAgICAgICApIHsKICAgICAgICAgIHRoaXMuX2FMUCA9IF9hd2FpdExlYWRlcnNoaXBPbmNlKHRoaXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fYUxQOwogICAgICB9LAogICAgICBzZXQgb25kdXBsaWNhdGUoZm4pIHsKICAgICAgICB0aGlzLl9kcEwgPSBmbjsKICAgICAgfSwKICAgICAgZGllOiBmdW5jdGlvbiBkaWUyKCkgewogICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICAgIHRoaXMuX2xzdG5zLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIyKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMzLmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBsaXN0ZW5lcjIpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgICAgdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24odUZuKSB7CiAgICAgICAgICByZXR1cm4gdUZuLnJlbW92ZSgpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICAgIGlmICh0aGlzLmlzTGVhZGVyKSB7CiAgICAgICAgICB0aGlzLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0RlYWQgPSB0cnVlOwogICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZSh0aGlzLCAiZGVhdGgiKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9pbmRleC5qcwp2YXIgaW5pdF9lc2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9icm9hZGNhc3RfY2hhbm5lbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb24oKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5wbHVnaW5zLmpzCnZhciBpbml0X2RlZXNfY29tbXNfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czQoKTsKICAgIGluaXRfZGlzdF90czE1KCk7CiAgICBpbml0X2VzYnJvd3NlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLmNsYXNzZXMuZGVlc2NvbW1zLmpzCnZhciBCcm9hZGNhc3RDaGFubmVsNCwgRGVlc0NvbW1zOwp2YXIgaW5pdF9kZWVzX2NvbW1zX2NsYXNzZXNfZGVlc2NvbW1zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLmNsYXNzZXMuZGVlc2NvbW1zLmpzIigpIHsKICAgIGluaXRfZGVlc19jb21tc19wbHVnaW5zKCk7CiAgICBCcm9hZGNhc3RDaGFubmVsNCA9IGdsb2JhbFRoaXMuQnJvYWRjYXN0Q2hhbm5lbDsKICAgIGlmICghQnJvYWRjYXN0Q2hhbm5lbDQpIHsKICAgICAgQnJvYWRjYXN0Q2hhbm5lbDQgPSBCcm9hZGNhc3RDaGFubmVsMjsKICAgIH0KICAgIERlZXNDb21tcyA9IGNsYXNzIHsKICAgICAgLy8gcmVjZWl2aW5nIG1lc3NhZ2VzCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsNCgiZGVlcy1jb21tcyIpOwogICAgICAgIHRoaXMudHlwZWRyb3V0ZXIgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSb3V0ZXIoKTsKICAgICAgICB0aGlzLnR5cGVkdGFyZ2V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkVGFyZ2V0KHsKICAgICAgICAgIHBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXI6IGFzeW5jIChtZXNzYWdlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZUFyZyk7CiAgICAgICAgICB9LAogICAgICAgICAgdHlwZWRSb3V0ZXJSZWY6IHRoaXMudHlwZWRyb3V0ZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBjb25zdCBtZXNzYWdlMiA9IGV2ZW50QXJnLm1ldGhvZCA/IGV2ZW50QXJnIDogZXZlbnRBcmcuZGF0YTsKICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UyKSk7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHlwZWRyb3V0ZXIucm91dGVBbmRBZGRSZXNwb25zZShtZXNzYWdlMiwgeyBza2lwSG9va3M6IHRydWUgfSk7CiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgIXJlc3BvbnNlLmVycm9yKSB7CiAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UocmVzcG9uc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGEgdHlwZWRyZXF1ZXN0IHdpdGggdGhpcyBjbGFzc2VzIHBvc3RNZXNzYWdlIGFzIHBvc3RNZXRob2QKICAgICAgICovCiAgICAgIGNyZWF0ZVR5cGVkUmVxdWVzdChtZXRob2ROYW1lKSB7CiAgICAgICAgY29uc3QgdHlwZWRyZXF1ZXN0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkUmVxdWVzdCh0aGlzLnR5cGVkdGFyZ2V0LCBtZXRob2ROYW1lKTsKICAgICAgICByZXR1cm4gdHlwZWRyZXF1ZXN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwb3N0cyBhIHR5cGVkcmVxdWVzdG1lc3NhZ2UKICAgICAgICovCiAgICAgIGFzeW5jIHBvc3RNZXNzYWdlKG1lc3NhZ2VBcmcpIHsKICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN1YnNjcmliZSB0byBtZXNzYWdlcwogICAgICAgKi8KICAgICAgYXN5bmMgY3JlYXRlVHlwZWRIYW5kbGVyKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uKSB7CiAgICAgICAgdGhpcy50eXBlZHJvdXRlci5hZGRUeXBlZEhhbmRsZXIobmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkSGFuZGxlcihtZXRob2RBcmcsIGhhbmRsZXJGdW5jdGlvbikpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTYgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTYsIHsKICBEZWVzQ29tbXM6ICgpID0+IERlZXNDb21tcwp9KTsKdmFyIGluaXRfZGlzdF90czE2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfY29tbXNfY2xhc3Nlc19kZWVzY29tbXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcwp2YXIgcmVxdWlyZV9jb21tb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2NvbW1vbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBmdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09ICJ1bmRlZmluZWQiIHx8IHN1YmplY3QgPT09IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc09iamVjdDQoc3ViamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09ICJvYmplY3QiICYmIHN1YmplY3QgIT09IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB0b0FycmF5MyhzZXF1ZW5jZSkgewogICAgICBpZiAoQXJyYXkuaXNBcnJheShzZXF1ZW5jZSkpIHJldHVybiBzZXF1ZW5jZTsKICAgICAgZWxzZSBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdOwogICAgICByZXR1cm4gW3NlcXVlbmNlXTsKICAgIH0KICAgIGZ1bmN0aW9uIGV4dGVuZDModGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCBrZXkyLCBzb3VyY2VLZXlzOwogICAgICBpZiAoc291cmNlKSB7CiAgICAgICAgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7CiAgICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBzb3VyY2VLZXlzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgICAga2V5MiA9IHNvdXJjZUtleXNbaW5kZXgyXTsKICAgICAgICAgIHRhcmdldFtrZXkyXSA9IHNvdXJjZVtrZXkyXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGVhdDMoc3RyaW5nMywgY291bnQyKSB7CiAgICAgIHZhciByZXN1bHQgPSAiIiwgY3ljbGU7CiAgICAgIGZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50MjsgY3ljbGUgKz0gMSkgewogICAgICAgIHJlc3VsdCArPSBzdHJpbmczOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc05lZ2F0aXZlWmVybyhudW1iZXIyKSB7CiAgICAgIHJldHVybiBudW1iZXIyID09PSAwICYmIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gMSAvIG51bWJlcjI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cy5pc05vdGhpbmcgPSBpc05vdGhpbmc7CiAgICBtb2R1bGUuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0NDsKICAgIG1vZHVsZS5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5MzsKICAgIG1vZHVsZS5leHBvcnRzLnJlcGVhdCA9IHJlcGVhdDM7CiAgICBtb2R1bGUuZXhwb3J0cy5pc05lZ2F0aXZlWmVybyA9IGlzTmVnYXRpdmVaZXJvOwogICAgbW9kdWxlLmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kMzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcwp2YXIgcmVxdWlyZV9leGNlcHRpb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2V4Y2VwdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBmdW5jdGlvbiBZQU1MRXhjZXB0aW9uKHJlYXNvbiwgbWFyazIpIHsKICAgICAgRXJyb3IuY2FsbCh0aGlzKTsKICAgICAgdGhpcy5uYW1lID0gIllBTUxFeGNlcHRpb24iOwogICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgdGhpcy5tYXJrID0gbWFyazI7CiAgICAgIHRoaXMubWVzc2FnZSA9ICh0aGlzLnJlYXNvbiB8fCAiKHVua25vd24gcmVhc29uKSIpICsgKHRoaXMubWFyayA/ICIgIiArIHRoaXMubWFyay50b1N0cmluZygpIDogIiIpOwogICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgfHwgIiI7CiAgICAgIH0KICAgIH0KICAgIFlBTUxFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpOwogICAgWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBZQU1MRXhjZXB0aW9uOwogICAgWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZzMoY29tcGFjdCkgewogICAgICB2YXIgcmVzdWx0ID0gdGhpcy5uYW1lICsgIjogIjsKICAgICAgcmVzdWx0ICs9IHRoaXMucmVhc29uIHx8ICIodW5rbm93biByZWFzb24pIjsKICAgICAgaWYgKCFjb21wYWN0ICYmIHRoaXMubWFyaykgewogICAgICAgIHJlc3VsdCArPSAiICIgKyB0aGlzLm1hcmsudG9TdHJpbmcoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gWUFNTEV4Y2VwdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL21hcmsuanMKdmFyIHJlcXVpcmVfbWFyayA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIGZ1bmN0aW9uIE1hcmsobmFtZSwgYnVmZmVyMiwgcG9zaXRpb24zLCBsaW5lLCBjb2x1bW4pIHsKICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXIyOwogICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb24zOwogICAgICB0aGlzLmxpbmUgPSBsaW5lOwogICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIH0KICAgIE1hcmsucHJvdG90eXBlLmdldFNuaXBwZXQgPSBmdW5jdGlvbiBnZXRTbmlwcGV0KGluZGVudDMsIG1heExlbmd0aCkgewogICAgICB2YXIgaGVhZDIsIHN0YXJ0LCB0YWlsLCBlbmQzLCBzbmlwcGV0OwogICAgICBpZiAoIXRoaXMuYnVmZmVyKSByZXR1cm4gbnVsbDsKICAgICAgaW5kZW50MyA9IGluZGVudDMgfHwgNDsKICAgICAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDc1OwogICAgICBoZWFkMiA9ICIiOwogICAgICBzdGFydCA9IHRoaXMucG9zaXRpb247CiAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgIlwwXHJcblx4ODVcdTIwMjhcdTIwMjkiLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KHN0YXJ0IC0gMSkpID09PSAtMSkgewogICAgICAgIHN0YXJ0IC09IDE7CiAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gLSBzdGFydCA+IG1heExlbmd0aCAvIDIgLSAxKSB7CiAgICAgICAgICBoZWFkMiA9ICIgLi4uICI7CiAgICAgICAgICBzdGFydCArPSA1OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRhaWwgPSAiIjsKICAgICAgZW5kMyA9IHRoaXMucG9zaXRpb247CiAgICAgIHdoaWxlIChlbmQzIDwgdGhpcy5idWZmZXIubGVuZ3RoICYmICJcMFxyXG5ceDg1XHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChlbmQzKSkgPT09IC0xKSB7CiAgICAgICAgZW5kMyArPSAxOwogICAgICAgIGlmIChlbmQzIC0gdGhpcy5wb3NpdGlvbiA+IG1heExlbmd0aCAvIDIgLSAxKSB7CiAgICAgICAgICB0YWlsID0gIiAuLi4gIjsKICAgICAgICAgIGVuZDMgLT0gNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBzbmlwcGV0ID0gdGhpcy5idWZmZXIuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICByZXR1cm4gY29tbW9uLnJlcGVhdCgiICIsIGluZGVudDMpICsgaGVhZDIgKyBzbmlwcGV0ICsgdGFpbCArICJcbiIgKyBjb21tb24ucmVwZWF0KCIgIiwgaW5kZW50MyArIHRoaXMucG9zaXRpb24gLSBzdGFydCArIGhlYWQyLmxlbmd0aCkgKyAiXiI7CiAgICB9OwogICAgTWFyay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZzMoY29tcGFjdCkgewogICAgICB2YXIgc25pcHBldCwgd2hlcmUgPSAiIjsKICAgICAgaWYgKHRoaXMubmFtZSkgewogICAgICAgIHdoZXJlICs9ICdpbiAiJyArIHRoaXMubmFtZSArICciICc7CiAgICAgIH0KICAgICAgd2hlcmUgKz0gImF0IGxpbmUgIiArICh0aGlzLmxpbmUgKyAxKSArICIsIGNvbHVtbiAiICsgKHRoaXMuY29sdW1uICsgMSk7CiAgICAgIGlmICghY29tcGFjdCkgewogICAgICAgIHNuaXBwZXQgPSB0aGlzLmdldFNuaXBwZXQoKTsKICAgICAgICBpZiAoc25pcHBldCkgewogICAgICAgICAgd2hlcmUgKz0gIjpcbiIgKyBzbmlwcGV0OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gd2hlcmU7CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBNYXJrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcwp2YXIgcmVxdWlyZV90eXBlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIHZhciBUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMgPSBbCiAgICAgICJraW5kIiwKICAgICAgInJlc29sdmUiLAogICAgICAiY29uc3RydWN0IiwKICAgICAgImluc3RhbmNlT2YiLAogICAgICAicHJlZGljYXRlIiwKICAgICAgInJlcHJlc2VudCIsCiAgICAgICJkZWZhdWx0U3R5bGUiLAogICAgICAic3R5bGVBbGlhc2VzIgogICAgXTsKICAgIHZhciBZQU1MX05PREVfS0lORFMgPSBbCiAgICAgICJzY2FsYXIiLAogICAgICAic2VxdWVuY2UiLAogICAgICAibWFwcGluZyIKICAgIF07CiAgICBmdW5jdGlvbiBjb21waWxlU3R5bGVBbGlhc2VzKG1hcDcpIHsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICBpZiAobWFwNyAhPT0gbnVsbCkgewogICAgICAgIE9iamVjdC5rZXlzKG1hcDcpLmZvckVhY2goZnVuY3Rpb24oc3R5bGUpIHsKICAgICAgICAgIG1hcDdbc3R5bGVdLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgcmVzdWx0W1N0cmluZyhhbGlhcyldID0gc3R5bGU7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gVHlwZSh0YWcsIG9wdGlvbnMpIHsKICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewogICAgICAgIGlmIChUWVBFX0NPTlNUUlVDVE9SX09QVElPTlMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCdVbmtub3duIG9wdGlvbiAiJyArIG5hbWUgKyAnIiBpcyBtZXQgaW4gZGVmaW5pdGlvbiBvZiAiJyArIHRhZyArICciIFlBTUwgdHlwZS4nKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnRhZyA9IHRhZzsKICAgICAgdGhpcy5raW5kID0gb3B0aW9uc1sia2luZCJdIHx8IG51bGw7CiAgICAgIHRoaXMucmVzb2x2ZSA9IG9wdGlvbnNbInJlc29sdmUiXSB8fCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfTsKICAgICAgdGhpcy5jb25zdHJ1Y3QgPSBvcHRpb25zWyJjb25zdHJ1Y3QiXSB8fCBmdW5jdGlvbihkYXRhMTEpIHsKICAgICAgICByZXR1cm4gZGF0YTExOwogICAgICB9OwogICAgICB0aGlzLmluc3RhbmNlT2YgPSBvcHRpb25zWyJpbnN0YW5jZU9mIl0gfHwgbnVsbDsKICAgICAgdGhpcy5wcmVkaWNhdGUgPSBvcHRpb25zWyJwcmVkaWNhdGUiXSB8fCBudWxsOwogICAgICB0aGlzLnJlcHJlc2VudCA9IG9wdGlvbnNbInJlcHJlc2VudCJdIHx8IG51bGw7CiAgICAgIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9uc1siZGVmYXVsdFN0eWxlIl0gfHwgbnVsbDsKICAgICAgdGhpcy5zdHlsZUFsaWFzZXMgPSBjb21waWxlU3R5bGVBbGlhc2VzKG9wdGlvbnNbInN0eWxlQWxpYXNlcyJdIHx8IG51bGwpOwogICAgICBpZiAoWUFNTF9OT0RFX0tJTkRTLmluZGV4T2YodGhpcy5raW5kKSA9PT0gLTEpIHsKICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbignVW5rbm93biBraW5kICInICsgdGhpcy5raW5kICsgJyIgaXMgc3BlY2lmaWVkIGZvciAiJyArIHRhZyArICciIFlBTUwgdHlwZS4nKTsKICAgICAgfQogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBUeXBlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzCnZhciByZXF1aXJlX3NjaGVtYSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSwgcmVzdWx0KSB7CiAgICAgIHZhciBleGNsdWRlID0gW107CiAgICAgIHNjaGVtYS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oaW5jbHVkZWRTY2hlbWEpIHsKICAgICAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTsKICAgICAgfSk7CiAgICAgIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRUeXBlKSB7CiAgICAgICAgcmVzdWx0LmZvckVhY2goZnVuY3Rpb24ocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7CiAgICAgICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmIHByZXZpb3VzVHlwZS5raW5kID09PSBjdXJyZW50VHlwZS5raW5kKSB7CiAgICAgICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbih0eXBlNSwgaW5kZXgyKSB7CiAgICAgICAgcmV0dXJuIGV4Y2x1ZGUuaW5kZXhPZihpbmRleDIpID09PSAtMTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBjb21waWxlTWFwKCkgewogICAgICB2YXIgcmVzdWx0ID0gewogICAgICAgIHNjYWxhcjoge30sCiAgICAgICAgc2VxdWVuY2U6IHt9LAogICAgICAgIG1hcHBpbmc6IHt9LAogICAgICAgIGZhbGxiYWNrOiB7fQogICAgICB9LCBpbmRleDIsIGxlbmd0aDsKICAgICAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZTUpIHsKICAgICAgICByZXN1bHRbdHlwZTUua2luZF1bdHlwZTUudGFnXSA9IHJlc3VsdFsiZmFsbGJhY2siXVt0eXBlNS50YWddID0gdHlwZTU7CiAgICAgIH0KICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgYXJndW1lbnRzW2luZGV4Ml0uZm9yRWFjaChjb2xsZWN0VHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIFNjaGVtYTIoZGVmaW5pdGlvbjMpIHsKICAgICAgdGhpcy5pbmNsdWRlID0gZGVmaW5pdGlvbjMuaW5jbHVkZSB8fCBbXTsKICAgICAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24zLmltcGxpY2l0IHx8IFtdOwogICAgICB0aGlzLmV4cGxpY2l0ID0gZGVmaW5pdGlvbjMuZXhwbGljaXQgfHwgW107CiAgICAgIHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlNSkgewogICAgICAgIGlmICh0eXBlNS5sb2FkS2luZCAmJiB0eXBlNS5sb2FkS2luZCAhPT0gInNjYWxhciIpIHsKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmNvbXBpbGVkSW1wbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAiaW1wbGljaXQiLCBbXSk7CiAgICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICJleHBsaWNpdCIsIFtdKTsKICAgICAgdGhpcy5jb21waWxlZFR5cGVNYXAgPSBjb21waWxlTWFwKHRoaXMuY29tcGlsZWRJbXBsaWNpdCwgdGhpcy5jb21waWxlZEV4cGxpY2l0KTsKICAgIH0KICAgIFNjaGVtYTIuREVGQVVMVCA9IG51bGw7CiAgICBTY2hlbWEyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYSgpIHsKICAgICAgdmFyIHNjaGVtYXMsIHR5cGVzOwogICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBzY2hlbWFzID0gU2NoZW1hMi5ERUZBVUxUOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBzY2hlbWFzID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMV07CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBzY2hlbWFzID0gY29tbW9uLnRvQXJyYXkoc2NoZW1hcyk7CiAgICAgIHR5cGVzID0gY29tbW9uLnRvQXJyYXkodHlwZXMpOwogICAgICBpZiAoIXNjaGVtYXMuZXZlcnkoZnVuY3Rpb24oc2NoZW1hKSB7CiAgICAgICAgcmV0dXJuIHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYTI7CiAgICAgIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlcy5ldmVyeShmdW5jdGlvbih0eXBlNSkgewogICAgICAgIHJldHVybiB0eXBlNSBpbnN0YW5jZW9mIFR5cGU7CiAgICAgIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFNjaGVtYTIoewogICAgICAgIGluY2x1ZGU6IHNjaGVtYXMsCiAgICAgICAgZXhwbGljaXQ6IHR5cGVzCiAgICAgIH0pOwogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gU2NoZW1hMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzCnZhciByZXF1aXJlX3N0ciA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zdHIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YTExKSB7CiAgICAgICAgcmV0dXJuIGRhdGExMSAhPT0gbnVsbCA/IGRhdGExMSA6ICIiOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzCnZhciByZXF1aXJlX3NlcSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIsIHsKICAgICAga2luZDogInNlcXVlbmNlIiwKICAgICAgY29uc3RydWN0OiBmdW5jdGlvbihkYXRhMTEpIHsKICAgICAgICByZXR1cm4gZGF0YTExICE9PSBudWxsID8gZGF0YTExIDogW107CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMKdmFyIHJlcXVpcmVfbWFwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6bWFwIiwgewogICAgICBraW5kOiAibWFwcGluZyIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YTExKSB7CiAgICAgICAgcmV0dXJuIGRhdGExMSAhPT0gbnVsbCA/IGRhdGExMSA6IHt9OwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcwp2YXIgcmVxdWlyZV9mYWlsc2FmZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2ZhaWxzYWZlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfc3RyKCksCiAgICAgICAgcmVxdWlyZV9zZXEoKSwKICAgICAgICByZXF1aXJlX21hcCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9udWxsLmpzCnZhciByZXF1aXJlX251bGwgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxOdWxsKGRhdGExMSkgewogICAgICBpZiAoZGF0YTExID09PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIG1heDMgPSBkYXRhMTEubGVuZ3RoOwogICAgICByZXR1cm4gbWF4MyA9PT0gMSAmJiBkYXRhMTEgPT09ICJ+IiB8fCBtYXgzID09PSA0ICYmIChkYXRhMTEgPT09ICJudWxsIiB8fCBkYXRhMTEgPT09ICJOdWxsIiB8fCBkYXRhMTEgPT09ICJOVUxMIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc051bGwob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxOdWxsLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLAogICAgICBwcmVkaWNhdGU6IGlzTnVsbCwKICAgICAgcmVwcmVzZW50OiB7CiAgICAgICAgY2Fub25pY2FsOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAifiI7CiAgICAgICAgfSwKICAgICAgICBsb3dlcmNhc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJudWxsIjsKICAgICAgICB9LAogICAgICAgIHVwcGVyY2FzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIk5VTEwiOwogICAgICAgIH0sCiAgICAgICAgY2FtZWxjYXNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAiTnVsbCI7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWZhdWx0U3R5bGU6ICJsb3dlcmNhc2UiCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcwp2YXIgcmVxdWlyZV9ib29sID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Jvb2wuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sQm9vbGVhbihkYXRhMTEpIHsKICAgICAgaWYgKGRhdGExMSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgbWF4MyA9IGRhdGExMS5sZW5ndGg7CiAgICAgIHJldHVybiBtYXgzID09PSA0ICYmIChkYXRhMTEgPT09ICJ0cnVlIiB8fCBkYXRhMTEgPT09ICJUcnVlIiB8fCBkYXRhMTEgPT09ICJUUlVFIikgfHwgbWF4MyA9PT0gNSAmJiAoZGF0YTExID09PSAiZmFsc2UiIHx8IGRhdGExMSA9PT0gIkZhbHNlIiB8fCBkYXRhMTEgPT09ICJGQUxTRSIpOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEJvb2xlYW4oZGF0YTExKSB7CiAgICAgIHJldHVybiBkYXRhMTEgPT09ICJ0cnVlIiB8fCBkYXRhMTEgPT09ICJUcnVlIiB8fCBkYXRhMTEgPT09ICJUUlVFIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBCb29sZWFuXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLAogICAgICBwcmVkaWNhdGU6IGlzQm9vbGVhbiwKICAgICAgcmVwcmVzZW50OiB7CiAgICAgICAgbG93ZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAidHJ1ZSIgOiAiZmFsc2UiOwogICAgICAgIH0sCiAgICAgICAgdXBwZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVFJVRSIgOiAiRkFMU0UiOwogICAgICAgIH0sCiAgICAgICAgY2FtZWxjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVHJ1ZSIgOiAiRmFsc2UiOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcwp2YXIgcmVxdWlyZV9pbnQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGlzSGV4Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcgfHwgNjUgPD0gYzExICYmIGMxMSA8PSA3MCB8fCA5NyA8PSBjMTEgJiYgYzExIDw9IDEwMjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2N0Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTU7CiAgICB9CiAgICBmdW5jdGlvbiBpc0RlY0NvZGUoYzExKSB7CiAgICAgIHJldHVybiA0OCA8PSBjMTEgJiYgYzExIDw9IDU3OwogICAgfQogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxJbnRlZ2VyKGRhdGExMSkgewogICAgICBpZiAoZGF0YTExID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBtYXgzID0gZGF0YTExLmxlbmd0aCwgaW5kZXgyID0gMCwgaGFzRGlnaXRzID0gZmFsc2UsIGNoOwogICAgICBpZiAoIW1heDMpIHJldHVybiBmYWxzZTsKICAgICAgY2ggPSBkYXRhMTFbaW5kZXgyXTsKICAgICAgaWYgKGNoID09PSAiLSIgfHwgY2ggPT09ICIrIikgewogICAgICAgIGNoID0gZGF0YTExWysraW5kZXgyXTsKICAgICAgfQogICAgICBpZiAoY2ggPT09ICIwIikgewogICAgICAgIGlmIChpbmRleDIgKyAxID09PSBtYXgzKSByZXR1cm4gdHJ1ZTsKICAgICAgICBjaCA9IGRhdGExMVsrK2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiYiIpIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgICAgIGNoID0gZGF0YTExW2luZGV4Ml07CiAgICAgICAgICAgIGlmIChjaCA9PT0gIl8iKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGNoICE9PSAiMCIgJiYgY2ggIT09ICIxIikgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT09ICJ4IikgewogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgICAgY2ggPSBkYXRhMTFbaW5kZXgyXTsKICAgICAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhMTEuY2hhckNvZGVBdChpbmRleDIpKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgIGNoID0gZGF0YTExW2luZGV4Ml07CiAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhMTEuY2hhckNvZGVBdChpbmRleDIpKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gIl8iKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoOyBpbmRleDIgPCBtYXgzOyBpbmRleDIrKykgewogICAgICAgIGNoID0gZGF0YTExW2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgIGlmIChjaCA9PT0gIjoiKSBicmVhazsKICAgICAgICBpZiAoIWlzRGVjQ29kZShkYXRhMTEuY2hhckNvZGVBdChpbmRleDIpKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSAiXyIpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGNoICE9PSAiOiIpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gL14oOlswLTVdP1swLTldKSskLy50ZXN0KGRhdGExMS5zbGljZShpbmRleDIpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGExMSkgewogICAgICB2YXIgdmFsdWUyID0gZGF0YTExLCBzaWduID0gMSwgY2gsIGJhc2UsIGRpZ2l0cyA9IFtdOwogICAgICBpZiAodmFsdWUyLmluZGV4T2YoIl8iKSAhPT0gLTEpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXy9nLCAiIik7CiAgICAgIH0KICAgICAgY2ggPSB2YWx1ZTJbMF07CiAgICAgIGlmIChjaCA9PT0gIi0iIHx8IGNoID09PSAiKyIpIHsKICAgICAgICBpZiAoY2ggPT09ICItIikgc2lnbiA9IC0xOwogICAgICAgIHZhbHVlMiA9IHZhbHVlMi5zbGljZSgxKTsKICAgICAgICBjaCA9IHZhbHVlMlswXTsKICAgICAgfQogICAgICBpZiAodmFsdWUyID09PSAiMCIpIHJldHVybiAwOwogICAgICBpZiAoY2ggPT09ICIwIikgewogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJiIikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIuc2xpY2UoMiksIDIpOwogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJ4IikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDE2KTsKICAgICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlMiwgOCk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMi5pbmRleE9mKCI6IikgIT09IC0xKSB7CiAgICAgICAgdmFsdWUyLnNwbGl0KCI6IikuZm9yRWFjaChmdW5jdGlvbih2NSkgewogICAgICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VJbnQodjUsIDEwKSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsdWUyID0gMDsKICAgICAgICBiYXNlID0gMTsKICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbihkNSkgewogICAgICAgICAgdmFsdWUyICs9IGQ1ICogYmFzZTsKICAgICAgICAgIGJhc2UgKj0gNjA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBOdW1iZXJdIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6aW50IiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxJbnRlZ2VyLAogICAgICBwcmVkaWNhdGU6IGlzSW50ZWdlciwKICAgICAgcmVwcmVzZW50OiB7CiAgICAgICAgYmluYXJ5OiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgIHJldHVybiBvYmogPj0gMCA/ICIwYiIgKyBvYmoudG9TdHJpbmcoMikgOiAiLTBiIiArIG9iai50b1N0cmluZygyKS5zbGljZSgxKTsKICAgICAgICB9LAogICAgICAgIG9jdGFsOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgIHJldHVybiBvYmogPj0gMCA/ICIwIiArIG9iai50b1N0cmluZyg4KSA6ICItMCIgKyBvYmoudG9TdHJpbmcoOCkuc2xpY2UoMSk7CiAgICAgICAgfSwKICAgICAgICBkZWNpbWFsOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoMTApOwogICAgICAgIH0sCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqLwogICAgICAgIGhleGFkZWNpbWFsOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgIHJldHVybiBvYmogPj0gMCA/ICIweCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgOiAiLTB4IiArIG9iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlZmF1bHRTdHlsZTogImRlY2ltYWwiLAogICAgICBzdHlsZUFsaWFzZXM6IHsKICAgICAgICBiaW5hcnk6IFsyLCAiYmluIl0sCiAgICAgICAgb2N0YWw6IFs4LCAib2N0Il0sCiAgICAgICAgZGVjaW1hbDogWzEwLCAiZGVjIl0sCiAgICAgICAgaGV4YWRlY2ltYWw6IFsxNiwgImhleCJdCiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9mbG9hdC5qcwp2YXIgcmVxdWlyZV9mbG9hdCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9mbG9hdC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgWUFNTF9GTE9BVF9QQVRURVJOID0gbmV3IFJlZ0V4cCgKICAgICAgLy8gMi41ZTQsIDIuNSBhbmQgaW50ZWdlcnMKICAgICAgIl4oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1swLTldWzAtOV9dKig/OjpbMC01XT9bMC05XSkrXFwuWzAtOV9dKnxbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIKICAgICk7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGExMSkgewogICAgICBpZiAoZGF0YTExID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YTExKSB8fCAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2AKICAgICAgLy8gUHJvYmFibHkgc2hvdWxkIHVwZGF0ZSByZWdleHAgJiBjaGVjayBzcGVlZAogICAgICBkYXRhMTFbZGF0YTExLmxlbmd0aCAtIDFdID09PSAiXyIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YTExKSB7CiAgICAgIHZhciB2YWx1ZTIsIHNpZ24sIGJhc2UsIGRpZ2l0czsKICAgICAgdmFsdWUyID0gZGF0YTExLnJlcGxhY2UoL18vZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHNpZ24gPSB2YWx1ZTJbMF0gPT09ICItIiA/IC0xIDogMTsKICAgICAgZGlnaXRzID0gW107CiAgICAgIGlmICgiKy0iLmluZGV4T2YodmFsdWUyWzBdKSA+PSAwKSB7CiAgICAgICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDEpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZTIgPT09ICIuaW5mIikgewogICAgICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOwogICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIi5uYW4iKSB7CiAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgfSBlbHNlIGlmICh2YWx1ZTIuaW5kZXhPZigiOiIpID49IDApIHsKICAgICAgICB2YWx1ZTIuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKHY1KSB7CiAgICAgICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHY1LCAxMCkpOwogICAgICAgIH0pOwogICAgICAgIHZhbHVlMiA9IDA7CiAgICAgICAgYmFzZSA9IDE7CiAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24oZDUpIHsKICAgICAgICAgIHZhbHVlMiArPSBkNSAqIGJhc2U7CiAgICAgICAgICBiYXNlICo9IDYwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzaWduICogdmFsdWUyOwogICAgICB9CiAgICAgIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIHZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvOwogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHsKICAgICAgdmFyIHJlczsKICAgICAgaWYgKGlzTmFOKG9iamVjdCkpIHsKICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5uYW4iOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuTkFOIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLk5hTiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuaW5mIjsKICAgICAgICAgIGNhc2UgInVwcGVyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5JbmYiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkgewogICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLS5pbmYiOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICItLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi0uSW5mIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gIi0wLjAiOwogICAgICB9CiAgICAgIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7CiAgICAgIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCJlIiwgIi5lIikgOiByZXM7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IE51bWJlcl0iICYmIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmZsb2F0IiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sRmxvYXQsCiAgICAgIHByZWRpY2F0ZTogaXNGbG9hdCwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsCiAgICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2pzb24uanMKdmFyIHJlcXVpcmVfanNvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2pzb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFNjaGVtYTIgPSByZXF1aXJlX3NjaGVtYSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hMih7CiAgICAgIGluY2x1ZGU6IFsKICAgICAgICByZXF1aXJlX2ZhaWxzYWZlKCkKICAgICAgXSwKICAgICAgaW1wbGljaXQ6IFsKICAgICAgICByZXF1aXJlX251bGwoKSwKICAgICAgICByZXF1aXJlX2Jvb2woKSwKICAgICAgICByZXF1aXJlX2ludCgpLAogICAgICAgIHJlcXVpcmVfZmxvYXQoKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzCnZhciByZXF1aXJlX2NvcmUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9jb3JlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9qc29uKCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3RpbWVzdGFtcC5qcwp2YXIgcmVxdWlyZV90aW1lc3RhbXAgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgWUFNTF9EQVRFX1JFR0VYUCA9IG5ldyBSZWdFeHAoCiAgICAgICJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XSktKFswLTldWzAtOV0pJCIKICAgICk7CiAgICB2YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICAgIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldPyktKFswLTldWzAtOV0/KSg/OltUdF18WyBcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXC4oWzAtOV0qKSk/KD86WyBcXHRdKihafChbLStdKShbMC05XVswLTldPykoPzo6KFswLTldWzAtOV0pKT8pKT8kIgogICAgKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sVGltZXN0YW1wKGRhdGExMSkgewogICAgICBpZiAoZGF0YTExID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YTExKSAhPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhMTEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhMTEpIHsKICAgICAgdmFyIG1hdGNoMiwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uID0gMCwgZGVsdGEgPSBudWxsLCB0el9ob3VyLCB0el9taW51dGUsIGRhdGU7CiAgICAgIG1hdGNoMiA9IFlBTUxfREFURV9SRUdFWFAuZXhlYyhkYXRhMTEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSBtYXRjaDIgPSBZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhMTEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgICB5ZWFyID0gK21hdGNoMlsxXTsKICAgICAgbW9udGggPSArbWF0Y2gyWzJdIC0gMTsKICAgICAgZGF5ID0gK21hdGNoMlszXTsKICAgICAgaWYgKCFtYXRjaDJbNF0pIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpOwogICAgICB9CiAgICAgIGhvdXIgPSArbWF0Y2gyWzRdOwogICAgICBtaW51dGUgPSArbWF0Y2gyWzVdOwogICAgICBzZWNvbmQgPSArbWF0Y2gyWzZdOwogICAgICBpZiAobWF0Y2gyWzddKSB7CiAgICAgICAgZnJhY3Rpb24gPSBtYXRjaDJbN10uc2xpY2UoMCwgMyk7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsKICAgICAgICAgIGZyYWN0aW9uICs9ICIwIjsKICAgICAgICB9CiAgICAgICAgZnJhY3Rpb24gPSArZnJhY3Rpb247CiAgICAgIH0KICAgICAgaWYgKG1hdGNoMls5XSkgewogICAgICAgIHR6X2hvdXIgPSArbWF0Y2gyWzEwXTsKICAgICAgICB0el9taW51dGUgPSArKG1hdGNoMlsxMV0gfHwgMCk7CiAgICAgICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDZlNDsKICAgICAgICBpZiAobWF0Y2gyWzldID09PSAiLSIpIGRlbHRhID0gLWRlbHRhOwogICAgICB9CiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTsKICAgICAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7CiAgICAgIHJldHVybiBkYXRlOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b0lTT1N0cmluZygpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCwKICAgICAgaW5zdGFuY2VPZjogRGF0ZSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMKdmFyIHJlcXVpcmVfbWVyZ2UgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sTWVyZ2UoZGF0YTExKSB7CiAgICAgIHJldHVybiBkYXRhMTEgPT09ICI8PCIgfHwgZGF0YTExID09PSBudWxsOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzCnZhciByZXF1aXJlX2JpbmFyeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIE5vZGVCdWZmZXI7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgTm9kZUJ1ZmZlciA9IF9yZXF1aXJlKCJidWZmZXIiKS5CdWZmZXI7CiAgICB9IGNhdGNoIChfXykgewogICAgfQogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBCQVNFNjRfTUFQID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEJpbmFyeShkYXRhMTEpIHsKICAgICAgaWYgKGRhdGExMSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgY29kZTQsIGlkeCwgYml0bGVuID0gMCwgbWF4MyA9IGRhdGExMS5sZW5ndGgsIG1hcDcgPSBCQVNFNjRfTUFQOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgY29kZTQgPSBtYXA3LmluZGV4T2YoZGF0YTExLmNoYXJBdChpZHgpKTsKICAgICAgICBpZiAoY29kZTQgPiA2NCkgY29udGludWU7CiAgICAgICAgaWYgKGNvZGU0IDwgMCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGJpdGxlbiArPSA2OwogICAgICB9CiAgICAgIHJldHVybiBiaXRsZW4gJSA4ID09PSAwOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhMTEpIHsKICAgICAgdmFyIGlkeCwgdGFpbGJpdHMsIGlucHV0ID0gZGF0YTExLnJlcGxhY2UoL1tcclxuPV0vZywgIiIpLCBtYXgzID0gaW5wdXQubGVuZ3RoLCBtYXA3ID0gQkFTRTY0X01BUCwgYml0cyA9IDAsIHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgaWYgKGlkeCAlIDQgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDE2ICYgMjU1KTsKICAgICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IGJpdHMgPDwgNiB8IG1hcDcuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7CiAgICAgIH0KICAgICAgdGFpbGJpdHMgPSBtYXgzICUgNCAqIDY7CiAgICAgIGlmICh0YWlsYml0cyA9PT0gMCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTsKICAgICAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpOwogICAgICB9CiAgICAgIGlmIChOb2RlQnVmZmVyKSB7CiAgICAgICAgcmV0dXJuIE5vZGVCdWZmZXIuZnJvbSA/IE5vZGVCdWZmZXIuZnJvbShyZXN1bHQpIDogbmV3IE5vZGVCdWZmZXIocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiLCBiaXRzID0gMCwgaWR4LCB0YWlsLCBtYXgzID0gb2JqZWN0Lmxlbmd0aCwgbWFwNyA9IEJBU0U2NF9NQVA7CiAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4MzsgaWR4KyspIHsKICAgICAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDEyICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA2ICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07CiAgICAgIH0KICAgICAgdGFpbCA9IG1heDMgJSAzOwogICAgICBpZiAodGFpbCA9PT0gMCkgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDYgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDQgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA8PCAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3WzY0XTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPDwgNCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1s2NF07CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbNjRdOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc0JpbmFyeShvYmplY3QpIHsKICAgICAgcmV0dXJuIE5vZGVCdWZmZXIgJiYgTm9kZUJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5IiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSwKICAgICAgcHJlZGljYXRlOiBpc0JpbmFyeSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5CiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcwp2YXIgcmVxdWlyZV9vbWFwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YTExKSB7CiAgICAgIGlmIChkYXRhMTEgPT09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIgb2JqZWN0S2V5cyA9IFtdLCBpbmRleDIsIGxlbmd0aCwgcGFpciwgcGFpcktleSwgcGFpckhhc0tleSwgb2JqZWN0ID0gZGF0YTExOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgcGFpckhhc0tleSA9IGZhbHNlOwogICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBmYWxzZTsKICAgICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7CiAgICAgICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YTExKSB7CiAgICAgIHJldHVybiBkYXRhMTEgIT09IG51bGwgPyBkYXRhMTEgOiBbXTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sT21hcCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzCnZhciByZXF1aXJlX3BhaXJzID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YTExKSB7CiAgICAgIGlmIChkYXRhMTEgPT09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIgaW5kZXgyLCBsZW5ndGgsIHBhaXIsIGtleXMyLCByZXN1bHQsIG9iamVjdCA9IGRhdGExMTsKICAgICAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAiW29iamVjdCBPYmplY3RdIikgcmV0dXJuIGZhbHNlOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJlc3VsdFtpbmRleDJdID0gW2tleXMyWzBdLCBwYWlyW2tleXMyWzBdXV07CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YTExKSB7CiAgICAgIGlmIChkYXRhMTEgPT09IG51bGwpIHJldHVybiBbXTsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBrZXlzMiwgcmVzdWx0LCBvYmplY3QgPSBkYXRhMTE7CiAgICAgIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgcGFpciA9IG9iamVjdFtpbmRleDJdOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBba2V5czJbMF0sIHBhaXJba2V5czJbMF1dXTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzCnZhciByZXF1aXJlX3NldCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YTExKSB7CiAgICAgIGlmIChkYXRhMTEgPT09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIga2V5Miwgb2JqZWN0ID0gZGF0YTExOwogICAgICBmb3IgKGtleTIgaW4gb2JqZWN0KSB7CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5MikpIHsKICAgICAgICAgIGlmIChvYmplY3Rba2V5Ml0gIT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGExMSkgewogICAgICByZXR1cm4gZGF0YTExICE9PSBudWxsID8gZGF0YTExIDoge307CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLCB7CiAgICAgIGtpbmQ6ICJtYXBwaW5nIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxTZXQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzCnZhciByZXF1aXJlX2RlZmF1bHRfc2FmZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfY29yZSgpCiAgICAgIF0sCiAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgcmVxdWlyZV90aW1lc3RhbXAoKSwKICAgICAgICByZXF1aXJlX21lcmdlKCkKICAgICAgXSwKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX2JpbmFyeSgpLAogICAgICAgIHJlcXVpcmVfb21hcCgpLAogICAgICAgIHJlcXVpcmVfcGFpcnMoKSwKICAgICAgICByZXF1aXJlX3NldCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMKdmFyIHJlcXVpcmVfdW5kZWZpbmVkID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkLAogICAgICBwcmVkaWNhdGU6IGlzVW5kZWZpbmVkLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMKdmFyIHJlcXVpcmVfcmVnZXhwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAoZGF0YTExKSB7CiAgICAgIGlmIChkYXRhMTEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGRhdGExMS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHJlZ2V4cCA9IGRhdGExMSwgdGFpbCA9IC9cLyhbZ2ltXSopJC8uZXhlYyhkYXRhMTEpLCBtb2RpZmllcnMgPSAiIjsKICAgICAgaWYgKHJlZ2V4cFswXSA9PT0gIi8iKSB7CiAgICAgICAgaWYgKHRhaWwpIG1vZGlmaWVycyA9IHRhaWxbMV07CiAgICAgICAgaWYgKG1vZGlmaWVycy5sZW5ndGggPiAzKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHJlZ2V4cFtyZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDFdICE9PSAiLyIpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRSZWdFeHAoZGF0YTExKSB7CiAgICAgIHZhciByZWdleHAgPSBkYXRhMTEsIHRhaWwgPSAvXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YTExKSwgbW9kaWZpZXJzID0gIiI7CiAgICAgIGlmIChyZWdleHBbMF0gPT09ICIvIikgewogICAgICAgIGlmICh0YWlsKSBtb2RpZmllcnMgPSB0YWlsWzFdOwogICAgICAgIHJlZ2V4cCA9IHJlZ2V4cC5zbGljZSgxLCByZWdleHAubGVuZ3RoIC0gbW9kaWZpZXJzLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4cCwgbW9kaWZpZXJzKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHAob2JqZWN0KSB7CiAgICAgIHZhciByZXN1bHQgPSAiLyIgKyBvYmplY3Quc291cmNlICsgIi8iOwogICAgICBpZiAob2JqZWN0Lmdsb2JhbCkgcmVzdWx0ICs9ICJnIjsKICAgICAgaWYgKG9iamVjdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAibSI7CiAgICAgIGlmIChvYmplY3QuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICJpIjsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzUmVnRXhwKG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IFJlZ0V4cF0iOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdFJlZ0V4cCwKICAgICAgcHJlZGljYXRlOiBpc1JlZ0V4cCwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvZnVuY3Rpb24uanMKdmFyIHJlcXVpcmVfZnVuY3Rpb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvZnVuY3Rpb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGVzcHJpbWE7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgZXNwcmltYSA9IF9yZXF1aXJlKCJlc3ByaW1hIik7CiAgICB9IGNhdGNoIChfNCkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIGVzcHJpbWEgPSB3aW5kb3cuZXNwcmltYTsKICAgIH0KICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGExMSkgewogICAgICBpZiAoZGF0YTExID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIHNvdXJjZSA9ICIoIiArIGRhdGExMSArICIpIiwgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSk7CiAgICAgICAgaWYgKGFzdC50eXBlICE9PSAiUHJvZ3JhbSIgfHwgYXN0LmJvZHkubGVuZ3RoICE9PSAxIHx8IGFzdC5ib2R5WzBdLnR5cGUgIT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiB8fCBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIgJiYgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YTExKSB7CiAgICAgIHZhciBzb3VyY2UgPSAiKCIgKyBkYXRhMTEgKyAiKSIsIGFzdCA9IGVzcHJpbWEucGFyc2Uoc291cmNlLCB7IHJhbmdlOiB0cnVlIH0pLCBwYXJhbXMyID0gW10sIGJvZHkzOwogICAgICBpZiAoYXN0LnR5cGUgIT09ICJQcm9ncmFtIiB8fCBhc3QuYm9keS5sZW5ndGggIT09IDEgfHwgYXN0LmJvZHlbMF0udHlwZSAhPT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiIHx8IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiAmJiBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gcmVzb2x2ZSBmdW5jdGlvbiIpOwogICAgICB9CiAgICAgIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24ucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocGFyYW0pIHsKICAgICAgICBwYXJhbXMyLnB1c2gocGFyYW0ubmFtZSk7CiAgICAgIH0pOwogICAgICBib2R5MyA9IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS5yYW5nZTsKICAgICAgaWYgKGFzdC5ib2R5WzBdLmV4cHJlc3Npb24uYm9keS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihwYXJhbXMyLCBzb3VyY2Uuc2xpY2UoYm9keTNbMF0gKyAxLCBib2R5M1sxXSAtIDEpKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKHBhcmFtczIsICJyZXR1cm4gIiArIHNvdXJjZS5zbGljZShib2R5M1swXSwgYm9keTNbMV0pKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvbihvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpOwogICAgfQogICAgZnVuY3Rpb24gaXNGdW5jdGlvbjIob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgRnVuY3Rpb25dIjsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbiwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24sCiAgICAgIHByZWRpY2F0ZTogaXNGdW5jdGlvbjIsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uCiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanMKdmFyIHJlcXVpcmVfZGVmYXVsdF9mdWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gU2NoZW1hMi5ERUZBVUxUID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9kZWZhdWx0X3NhZmUoKQogICAgICBdLAogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfdW5kZWZpbmVkKCksCiAgICAgICAgcmVxdWlyZV9yZWdleHAoKSwKICAgICAgICByZXF1aXJlX2Z1bmN0aW9uKCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMKdmFyIHJlcXVpcmVfbG9hZGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgTWFyayA9IHJlcXVpcmVfbWFyaygpOwogICAgdmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgdmFyIERFRkFVTFRfRlVMTF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgQ09OVEVYVF9GTE9XX0lOID0gMTsKICAgIHZhciBDT05URVhUX0ZMT1dfT1VUID0gMjsKICAgIHZhciBDT05URVhUX0JMT0NLX0lOID0gMzsKICAgIHZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7CiAgICB2YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7CiAgICB2YXIgQ0hPTVBJTkdfU1RSSVAgPSAyOwogICAgdmFyIENIT01QSU5HX0tFRVAgPSAzOwogICAgdmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS87CiAgICB2YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1x4ODVcdTIwMjhcdTIwMjldLzsKICAgIHZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyA9IC9bLFxbXF1ce1x9XS87CiAgICB2YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XC1dKyEpJC9pOwogICAgdmFyIFBBVFRFUk5fVEFHX1VSSSA9IC9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7CiAgICBmdW5jdGlvbiBfY2xhc3Mob2JqKSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX0VPTChjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gMTAgfHwgYzExID09PSAxMzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA5IHx8IGMxMSA9PT0gMzI7CiAgICB9CiAgICBmdW5jdGlvbiBpc19XU19PUl9FT0woYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDkgfHwgYzExID09PSAzMiB8fCBjMTEgPT09IDEwIHx8IGMxMSA9PT0gMTM7CiAgICB9CiAgICBmdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gNDQgfHwgYzExID09PSA5MSB8fCBjMTEgPT09IDkzIHx8IGMxMSA9PT0gMTIzIHx8IGMxMSA9PT0gMTI1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbUhleENvZGUoYzExKSB7CiAgICAgIHZhciBsYzsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgbGMgPSBjMTEgfCAzMjsKICAgICAgaWYgKDk3IDw9IGxjICYmIGxjIDw9IDEwMikgewogICAgICAgIHJldHVybiBsYyAtIDk3ICsgMTA7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlZEhleExlbihjMTEpIHsKICAgICAgaWYgKGMxMSA9PT0gMTIwKSB7CiAgICAgICAgcmV0dXJuIDI7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gMTE3KSB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gODUpIHsKICAgICAgICByZXR1cm4gODsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjMTEpIHsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDQ4ID8gIlwwIiA6IGMxMSA9PT0gOTcgPyAiXHgwNyIgOiBjMTEgPT09IDk4ID8gIlxiIiA6IGMxMSA9PT0gMTE2ID8gIgkiIDogYzExID09PSA5ID8gIgkiIDogYzExID09PSAxMTAgPyAiXG4iIDogYzExID09PSAxMTggPyAiXHYiIDogYzExID09PSAxMDIgPyAiXGYiIDogYzExID09PSAxMTQgPyAiXHIiIDogYzExID09PSAxMDEgPyAiXHgxQiIgOiBjMTEgPT09IDMyID8gIiAiIDogYzExID09PSAzNCA/ICciJyA6IGMxMSA9PT0gNDcgPyAiLyIgOiBjMTEgPT09IDkyID8gIlxcIiA6IGMxMSA9PT0gNzggPyAiXHg4NSIgOiBjMTEgPT09IDk1ID8gIlx4QTAiIDogYzExID09PSA3NiA/ICJcdTIwMjgiIDogYzExID09PSA4MCA/ICJcdTIwMjkiIDogIiI7CiAgICB9CiAgICBmdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjMTEpIHsKICAgICAgaWYgKGMxMSA8PSA2NTUzNSkgewogICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoCiAgICAgICAgKGMxMSAtIDY1NTM2ID4+IDEwKSArIDU1Mjk2LAogICAgICAgIChjMTEgLSA2NTUzNiAmIDEwMjMpICsgNTYzMjAKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFByb3BlcnR5KG9iamVjdCwga2V5MiwgdmFsdWUyKSB7CiAgICAgIGlmIChrZXkyID09PSAiX19wcm90b19fIikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleTIsIHsKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZTIKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvYmplY3Rba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0KICAgIH0KICAgIHZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOwogICAgdmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpOwogICAgZm9yIChpMTEgPSAwOyBpMTEgPCAyNTY7IGkxMSsrKSB7CiAgICAgIHNpbXBsZUVzY2FwZUNoZWNrW2kxMV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpMTEpID8gMSA6IDA7CiAgICAgIHNpbXBsZUVzY2FwZU1hcFtpMTFdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTExKTsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKICAgICAgdGhpcy5maWxlbmFtZSA9IG9wdGlvbnNbImZpbGVuYW1lIl0gfHwgbnVsbDsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLm9uV2FybmluZyA9IG9wdGlvbnNbIm9uV2FybmluZyJdIHx8IG51bGw7CiAgICAgIHRoaXMubGVnYWN5ID0gb3B0aW9uc1sibGVnYWN5Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuanNvbiA9IG9wdGlvbnNbImpzb24iXSB8fCBmYWxzZTsKICAgICAgdGhpcy5saXN0ZW5lciA9IG9wdGlvbnNbImxpc3RlbmVyIl0gfHwgbnVsbDsKICAgICAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDsKICAgICAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwOwogICAgICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7CiAgICAgIHRoaXMubGluZSA9IDA7CiAgICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKICAgICAgdGhpcy5saW5lSW5kZW50ID0gMDsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UyKSB7CiAgICAgIHJldHVybiBuZXcgWUFNTEV4Y2VwdGlvbigKICAgICAgICBtZXNzYWdlMiwKICAgICAgICBuZXcgTWFyayhzdGF0ZS5maWxlbmFtZSwgc3RhdGUuaW5wdXQsIHN0YXRlLnBvc2l0aW9uLCBzdGF0ZS5saW5lLCBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydCkKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRocm93RXJyb3IyKHN0YXRlLCBtZXNzYWdlMikgewogICAgICB0aHJvdyBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlMik7CiAgICB9CiAgICBmdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUsIG1lc3NhZ2UyKSB7CiAgICAgIGlmIChzdGF0ZS5vbldhcm5pbmcpIHsKICAgICAgICBzdGF0ZS5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlMikpOwogICAgICB9CiAgICB9CiAgICB2YXIgZGlyZWN0aXZlSGFuZGxlcnMgPSB7CiAgICAgIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHsKICAgICAgICB2YXIgbWF0Y2gyLCBtYWpvciwgbWlub3I7CiAgICAgICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iik7CiAgICAgICAgfQogICAgICAgIG1hdGNoMiA9IC9eKFswLTldKylcLihbMC05XSspJC8uZXhlYyhhcmdzWzBdKTsKICAgICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2gyWzFdLCAxMCk7CiAgICAgICAgbWlub3IgPSBwYXJzZUludChtYXRjaDJbMl0sIDEwKTsKICAgICAgICBpZiAobWFqb3IgIT09IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUudmVyc2lvbiA9IGFyZ3NbMF07CiAgICAgICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyOwogICAgICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUsIG5hbWUsIGFyZ3MpIHsKICAgICAgICB2YXIgaGFuZGxlMywgcHJlZml4NDsKICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpOwogICAgICAgIH0KICAgICAgICBoYW5kbGUzID0gYXJnc1swXTsKICAgICAgICBwcmVmaXg0ID0gYXJnc1sxXTsKICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZTMpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIGhhbmRsZTMpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInICsgaGFuZGxlMyArICciIHRhZyBoYW5kbGUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFQQVRURVJOX1RBR19VUkkudGVzdChwcmVmaXg0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUudGFnTWFwW2hhbmRsZTNdID0gcHJlZml4NDsKICAgICAgfQogICAgfTsKICAgIGZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBzdGFydCwgZW5kMywgY2hlY2tKc29uKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIF9sZW5ndGgsIF9jaGFyYWN0ZXIsIF9yZXN1bHQ7CiAgICAgIGlmIChzdGFydCA8IGVuZDMpIHsKICAgICAgICBfcmVzdWx0ID0gc3RhdGUuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgIGlmIChjaGVja0pzb24pIHsKICAgICAgICAgIGZvciAoX3Bvc2l0aW9uID0gMCwgX2xlbmd0aCA9IF9yZXN1bHQubGVuZ3RoOyBfcG9zaXRpb24gPCBfbGVuZ3RoOyBfcG9zaXRpb24gKz0gMSkgewogICAgICAgICAgICBfY2hhcmFjdGVyID0gX3Jlc3VsdC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgICAgICAgIGlmICghKF9jaGFyYWN0ZXIgPT09IDkgfHwgMzIgPD0gX2NoYXJhY3RlciAmJiBfY2hhcmFjdGVyIDw9IDExMTQxMTEpKSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChfcmVzdWx0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gX3Jlc3VsdDsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3ZlcnJpZGFibGVLZXlzKSB7CiAgICAgIHZhciBzb3VyY2VLZXlzLCBrZXkyLCBpbmRleDIsIHF1YW50aXR5OwogICAgICBpZiAoIWNvbW1vbi5pc09iamVjdChzb3VyY2UpKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpOwogICAgICB9CiAgICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4MiA8IHF1YW50aXR5OyBpbmRleDIgKz0gMSkgewogICAgICAgIGtleTIgPSBzb3VyY2VLZXlzW2luZGV4Ml07CiAgICAgICAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChkZXN0aW5hdGlvbiwga2V5MikpIHsKICAgICAgICAgIHNldFByb3BlcnR5KGRlc3RpbmF0aW9uLCBrZXkyLCBzb3VyY2Vba2V5Ml0pOwogICAgICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleTJdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRQb3MpIHsKICAgICAgdmFyIGluZGV4MiwgcXVhbnRpdHk7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7CiAgICAgICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpOwogICAgICAgIGZvciAoaW5kZXgyID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXgyIDwgcXVhbnRpdHk7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlW2luZGV4Ml0pKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSAib2JqZWN0IiAmJiBfY2xhc3Moa2V5Tm9kZVtpbmRleDJdKSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICAgICAga2V5Tm9kZVtpbmRleDJdID0gIltvYmplY3QgT2JqZWN0XSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gIm9iamVjdCIgJiYgX2NsYXNzKGtleU5vZGUpID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgIGtleU5vZGUgPSAiW29iamVjdCBPYmplY3RdIjsKICAgICAgfQogICAgICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpOwogICAgICBpZiAoX3Jlc3VsdCA9PT0gbnVsbCkgewogICAgICAgIF9yZXN1bHQgPSB7fTsKICAgICAgfQogICAgICBpZiAoa2V5VGFnID09PSAidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVOb2RlKSkgewogICAgICAgICAgZm9yIChpbmRleDIgPSAwLCBxdWFudGl0eSA9IHZhbHVlTm9kZS5sZW5ndGg7IGluZGV4MiA8IHF1YW50aXR5OyBpbmRleDIgKz0gMSkgewogICAgICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXgyXSwgb3ZlcnJpZGFibGVLZXlzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIXN0YXRlLmpzb24gJiYgIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiYgX2hhc093blByb3BlcnR5LmNhbGwoX3Jlc3VsdCwga2V5Tm9kZSkpIHsKICAgICAgICAgIHN0YXRlLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUubGluZTsKICAgICAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKTsKICAgICAgICB9CiAgICAgICAgc2V0UHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICBkZWxldGUgb3ZlcnJpZGFibGVLZXlzW2tleU5vZGVdOwogICAgICB9CiAgICAgIHJldHVybiBfcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkgewogICAgICB2YXIgY2g7CiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gMTApIHsKICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICB9IGVsc2UgaWYgKGNoID09PSAxMykgewogICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAxMCkgewogICAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKTsKICAgICAgfQogICAgICBzdGF0ZS5saW5lICs9IDE7CiAgICAgIHN0YXRlLmxpbmVTdGFydCA9IHN0YXRlLnBvc2l0aW9uOwogICAgfQogICAgZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgYWxsb3dDb21tZW50cywgY2hlY2tJbmRlbnQpIHsKICAgICAgdmFyIGxpbmVCcmVha3MgPSAwLCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAzNSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICB9IHdoaWxlIChjaCAhPT0gMTAgJiYgY2ggIT09IDEzICYmIGNoICE9PSAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX0VPTChjaCkpIHsKICAgICAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpOwogICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIGxpbmVCcmVha3MrKzsKICAgICAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwOwogICAgICAgICAgd2hpbGUgKGNoID09PSAzMikgewogICAgICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7CiAgICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGVja0luZGVudCAhPT0gLTEgJiYgbGluZUJyZWFrcyAhPT0gMCAmJiBzdGF0ZS5saW5lSW5kZW50IDwgY2hlY2tJbmRlbnQpIHsKICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICJkZWZpY2llbnQgaW5kZW50YXRpb24iKTsKICAgICAgfQogICAgICByZXR1cm4gbGluZUJyZWFrczsKICAgIH0KICAgIGZ1bmN0aW9uIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkgewogICAgICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb24sIGNoOwogICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTsKICAgICAgaWYgKChjaCA9PT0gNDUgfHwgY2ggPT09IDQ2KSAmJiBjaCA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSAmJiBjaCA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKSkgewogICAgICAgIF9wb3NpdGlvbiArPSAzOwogICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gMCB8fCBpc19XU19PUl9FT0woY2gpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQyKSB7CiAgICAgIGlmIChjb3VudDIgPT09IDEpIHsKICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gIiAiOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA+IDEpIHsKICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBjb3VudDIgLSAxKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcmVhZFBsYWluU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikgewogICAgICB2YXIgcHJlY2VkaW5nLCBmb2xsb3dpbmcsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgaGFzUGVuZGluZ0NvbnRlbnQsIF9saW5lLCBfbGluZVN0YXJ0LCBfbGluZUluZGVudCwgX2tpbmQgPSBzdGF0ZS5raW5kLCBfcmVzdWx0ID0gc3RhdGUucmVzdWx0LCBjaDsKICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgaWYgKGlzX1dTX09SX0VPTChjaCkgfHwgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8IGNoID09PSAzNSB8fCBjaCA9PT0gMzggfHwgY2ggPT09IDQyIHx8IGNoID09PSAzMyB8fCBjaCA9PT0gMTI0IHx8IGNoID09PSA2MiB8fCBjaCA9PT0gMzkgfHwgY2ggPT09IDM0IHx8IGNoID09PSAzNyB8fCBjaCA9PT0gNjQgfHwgY2ggPT09IDk2KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gNjMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRlLmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUucmVzdWx0ID0gIiI7CiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSA1OCkgewogICAgICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGZvbGxvd2luZykpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMzUpIHsKICAgICAgICAgIHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTsKICAgICAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lOwogICAgICAgICAgX2xpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDsKICAgICAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUubGluZUluZGVudDsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7CiAgICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7CiAgICAgICAgICAgIHN0YXRlLmxpbmUgPSBfbGluZTsKICAgICAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gX2xpbmVTdGFydDsKICAgICAgICAgICAgc3RhdGUubGluZUluZGVudCA9IF9saW5lSW5kZW50OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICAgICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBzdGF0ZS5saW5lIC0gX2xpbmUpOwogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbiArIDE7CiAgICAgICAgfQogICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgfQogICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICAgIGlmIChzdGF0ZS5yZXN1bHQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZS5raW5kID0gX2tpbmQ7CiAgICAgIHN0YXRlLnJlc3VsdCA9IF9yZXN1bHQ7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIGNoLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7CiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgc3RhdGUua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZS5yZXN1bHQgPSAiIjsKICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSAzOSkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpOwogICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgICAgaWYgKGNoID09PSAzOSkgewogICAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOwogICAgfQogICAgZnVuY3Rpb24gcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgbm9kZUluZGVudCkgewogICAgICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDsKICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzNCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBzdGF0ZS5raW5kID0gInNjYWxhciI7CiAgICAgIHN0YXRlLnJlc3VsdCA9ICIiOwogICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBpZiAoY2ggPT09IDM0KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gOTIpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2hdOwogICAgICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkgewogICAgICAgICAgICBoZXhMZW5ndGggPSB0bXA7CiAgICAgICAgICAgIGhleFJlc3VsdCA9IDA7CiAgICAgICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkgewogICAgICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoKSkgPj0gMCkgewogICAgICAgICAgICAgICAgaGV4UmVzdWx0ID0gKGhleFJlc3VsdCA8PCA0KSArIHRtcDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7CiAgICAgICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfdGFnID0gc3RhdGUudGFnLCBfcmVzdWx0LCBfYW5jaG9yID0gc3RhdGUuYW5jaG9yLCBmb2xsb3dpbmcsIHRlcm1pbmF0b3IsIGlzUGFpciwgaXNFeHBsaWNpdFBhaXIsIGlzTWFwcGluZywgb3ZlcnJpZGFibGVLZXlzID0ge30sIGtleU5vZGUsIGtleVRhZywgdmFsdWVOb2RlLCBjaDsKICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSA5MSkgewogICAgICAgIHRlcm1pbmF0b3IgPSA5MzsKICAgICAgICBpc01hcHBpbmcgPSBmYWxzZTsKICAgICAgICBfcmVzdWx0ID0gW107CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDEyMykgewogICAgICAgIHRlcm1pbmF0b3IgPSAxMjU7CiAgICAgICAgaXNNYXBwaW5nID0gdHJ1ZTsKICAgICAgICBfcmVzdWx0ID0ge307CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikgewogICAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7CiAgICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/ICJtYXBwaW5nIiA6ICJzZXF1ZW5jZSI7CiAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0OwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKTsKICAgICAgICB9CiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTsKICAgICAgICBpZiAoY2ggPT09IDYzKSB7CiAgICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlOwogICAgICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX2xpbmUgPSBzdGF0ZS5saW5lOwogICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7CiAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSA1OCkgewogICAgICAgICAgaXNQYWlyID0gdHJ1ZTsKICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpOwogICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUucmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNNYXBwaW5nKSB7CiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICB9IGVsc2UgaWYgKGlzUGFpcikgewogICAgICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIG51bGwsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3Jlc3VsdC5wdXNoKGtleU5vZGUpOwogICAgICAgIH0KICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gNDQpIHsKICAgICAgICAgIHJlYWROZXh0ID0gdHJ1ZTsKICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVhZE5leHQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoOwogICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoY2ggPT09IDEyNCkgewogICAgICAgIGZvbGRpbmcgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gNjIpIHsKICAgICAgICBmb2xkaW5nID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgc3RhdGUua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZS5yZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gNDMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHsKICAgICAgICAgICAgY2hvbXBpbmcgPSBjaCA9PT0gNDMgPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHsKICAgICAgICAgIGlmICh0bXAgPT09IDApIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lIik7CiAgICAgICAgICB9IGVsc2UgaWYgKCFkZXRlY3RlZEluZGVudCkgewogICAgICAgICAgICB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCArIHRtcCAtIDE7CiAgICAgICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgfSB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKTsKICAgICAgICBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7CiAgICAgICAgc3RhdGUubGluZUluZGVudCA9IDA7CiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICB3aGlsZSAoKCFkZXRlY3RlZEluZGVudCB8fCBzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiYgY2ggPT09IDMyKSB7CiAgICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7CiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmICghZGV0ZWN0ZWRJbmRlbnQgJiYgc3RhdGUubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHsKICAgICAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50OwogICAgICAgIH0KICAgICAgICBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgZW1wdHlMaW5lcysrOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgewogICAgICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHsKICAgICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgICAgc3RhdGUucmVzdWx0ICs9ICJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoZm9sZGluZykgewogICAgICAgICAgaWYgKGlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgICBhdE1vcmVJbmRlbnRlZCA9IHRydWU7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHsKICAgICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgZW1wdHlMaW5lcyArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7CiAgICAgICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgewogICAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAiICI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGVtcHR5TGluZXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7CiAgICAgICAgfQogICAgICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTsKICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7CiAgICAgICAgZW1wdHlMaW5lcyA9IDA7CiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKSB7CiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbm9kZUluZGVudCkgewogICAgICB2YXIgX2xpbmUsIF90YWcgPSBzdGF0ZS50YWcsIF9hbmNob3IgPSBzdGF0ZS5hbmNob3IsIF9yZXN1bHQgPSBbXSwgZm9sbG93aW5nLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDsKICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBpZiAoY2ggIT09IDQ1KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIF9yZXN1bHQucHVzaChudWxsKTsKICAgICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9saW5lID0gc3RhdGUubGluZTsKICAgICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpOwogICAgICAgIF9yZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpOwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmICgoc3RhdGUubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoICE9PSAwKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZXRlY3RlZCkgewogICAgICAgIHN0YXRlLnRhZyA9IF90YWc7CiAgICAgICAgc3RhdGUuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICBzdGF0ZS5raW5kID0gInNlcXVlbmNlIjsKICAgICAgICBzdGF0ZS5yZXN1bHQgPSBfcmVzdWx0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHsKICAgICAgdmFyIGZvbGxvd2luZywgYWxsb3dDb21wYWN0LCBfbGluZSwgX3BvcywgX3RhZyA9IHN0YXRlLnRhZywgX2FuY2hvciA9IHN0YXRlLmFuY2hvciwgX3Jlc3VsdCA9IHt9LCBvdmVycmlkYWJsZUtleXMgPSB7fSwga2V5VGFnID0gbnVsbCwga2V5Tm9kZSA9IG51bGwsIHZhbHVlTm9kZSA9IG51bGwsIGF0RXhwbGljaXRLZXkgPSBmYWxzZSwgZGV0ZWN0ZWQgPSBmYWxzZSwgY2g7CiAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IF9yZXN1bHQ7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgIF9saW5lID0gc3RhdGUubGluZTsKICAgICAgICBfcG9zID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgaWYgKChjaCA9PT0gNjMgfHwgY2ggPT09IDU4KSAmJiBpc19XU19PUl9FT0woZm9sbG93aW5nKSkgewogICAgICAgICAgaWYgKGNoID09PSA2MykgewogICAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsKTsKICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSB0cnVlOwogICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGUucG9zaXRpb24gKz0gMTsKICAgICAgICAgIGNoID0gZm9sbG93aW5nOwogICAgICAgIH0gZWxzZSBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lKSB7CiAgICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoID09PSA1OCkgewogICAgICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgICAgICBpZiAoIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTsKICAgICAgICAgICAgICBrZXlUYWcgPSBzdGF0ZS50YWc7CiAgICAgICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkgewogICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzdGF0ZS50YWcgPSBfdGFnOwogICAgICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnRhZyA9IF90YWc7CiAgICAgICAgICAgIHN0YXRlLmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7CiAgICAgICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfT1VULCB0cnVlLCBhbGxvd0NvbXBhY3QpKSB7CiAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlLCBfbGluZSwgX3Bvcyk7CiAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmIGNoICE9PSAwKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgc3RhdGUudGFnID0gX3RhZzsKICAgICAgICBzdGF0ZS5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgIHN0YXRlLmtpbmQgPSAibWFwcGluZyI7CiAgICAgICAgc3RhdGUucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUpIHsKICAgICAgdmFyIF9wb3NpdGlvbiwgaXNWZXJiYXRpbSA9IGZhbHNlLCBpc05hbWVkID0gZmFsc2UsIHRhZ0hhbmRsZSwgdGFnTmFtZSwgY2g7CiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzMpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKTsKICAgICAgfQogICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gNjApIHsKICAgICAgICBpc1ZlcmJhdGltID0gdHJ1ZTsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDMzKSB7CiAgICAgICAgaXNOYW1lZCA9IHRydWU7CiAgICAgICAgdGFnSGFuZGxlID0gIiEhIjsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFnSGFuZGxlID0gIiEiOwogICAgICB9CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICAgIGRvIHsKICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gNjIpOwogICAgICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCkgewogICAgICAgICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pOwogICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgaWYgKGNoID09PSAzMykgewogICAgICAgICAgICBpZiAoIWlzTmFtZWQpIHsKICAgICAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpc05hbWVkID0gdHJ1ZTsKICAgICAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pOwogICAgICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFnTmFtZSAmJiAhUEFUVEVSTl9UQUdfVVJJLnRlc3QodGFnTmFtZSkpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIiArIHRhZ05hbWUpOwogICAgICB9CiAgICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgICAgc3RhdGUudGFnID0gdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS50YWdNYXAsIHRhZ0hhbmRsZSkpIHsKICAgICAgICBzdGF0ZS50YWcgPSBzdGF0ZS50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAiISIpIHsKICAgICAgICBzdGF0ZS50YWcgPSAiISIgKyB0YWdOYW1lOwogICAgICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gIiEhIikgewogICAgICAgIHN0YXRlLnRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJyArIHRhZ0hhbmRsZSArICciJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpIHsKICAgICAgdmFyIF9wb3NpdGlvbiwgY2g7CiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzgpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iik7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKTsKICAgICAgfQogICAgICBzdGF0ZS5hbmNob3IgPSBzdGF0ZS5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHsKICAgICAgdmFyIF9wb3NpdGlvbiwgYWxpYXMsIGNoOwogICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDQyKSByZXR1cm4gZmFsc2U7CiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247CiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7CiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKTsKICAgICAgfQogICAgICBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmFuY2hvck1hcCwgYWxpYXMpKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUsICd1bmlkZW50aWZpZWQgYWxpYXMgIicgKyBhbGlhcyArICciJyk7CiAgICAgIH0KICAgICAgc3RhdGUucmVzdWx0ID0gc3RhdGUuYW5jaG9yTWFwW2FsaWFzXTsKICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7CiAgICAgIHZhciBhbGxvd0Jsb2NrU3R5bGVzLCBhbGxvd0Jsb2NrU2NhbGFycywgYWxsb3dCbG9ja0NvbGxlY3Rpb25zLCBpbmRlbnRTdGF0dXMgPSAxLCBhdE5ld0xpbmUgPSBmYWxzZSwgaGFzQ29udGVudCA9IGZhbHNlLCB0eXBlSW5kZXgsIHR5cGVRdWFudGl0eSwgdHlwZTUsIGZsb3dJbmRlbnQsIGJsb2NrSW5kZW50OwogICAgICBpZiAoc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZS5saXN0ZW5lcigib3BlbiIsIHN0YXRlKTsKICAgICAgfQogICAgICBzdGF0ZS50YWcgPSBudWxsOwogICAgICBzdGF0ZS5hbmNob3IgPSBudWxsOwogICAgICBzdGF0ZS5raW5kID0gbnVsbDsKICAgICAgc3RhdGUucmVzdWx0ID0gbnVsbDsKICAgICAgYWxsb3dCbG9ja1N0eWxlcyA9IGFsbG93QmxvY2tTY2FsYXJzID0gYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfQkxPQ0tfSU4gPT09IG5vZGVDb250ZXh0OwogICAgICBpZiAoYWxsb3dUb1NlZWspIHsKICAgICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBhdE5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IDA7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHsKICAgICAgICB3aGlsZSAocmVhZFRhZ1Byb3BlcnR5KHN0YXRlKSB8fCByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpKSB7CiAgICAgICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICAgIGF0TmV3TGluZSA9IHRydWU7CiAgICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGFsbG93QmxvY2tTdHlsZXM7CiAgICAgICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHsKICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0OwogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEgfHwgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0KSB7CiAgICAgICAgaWYgKENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9GTE9XX09VVCA9PT0gbm9kZUNvbnRleHQpIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQgKyAxOwogICAgICAgIH0KICAgICAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0OwogICAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHsKICAgICAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgKHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCkgfHwgcmVhZEJsb2NrTWFwcGluZyhzdGF0ZSwgYmxvY2tJbmRlbnQsIGZsb3dJbmRlbnQpKSB8fCByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIGZsb3dJbmRlbnQpKSB7CiAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGFsbG93QmxvY2tTY2FsYXJzICYmIHJlYWRCbG9ja1NjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHwgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkgfHwgcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCkpIHsKICAgICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZWFkQWxpYXMoc3RhdGUpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZS50YWcgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRhZyA9ICI/IjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmRlbnRTdGF0dXMgPT09IDApIHsKICAgICAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICIhIikgewogICAgICAgIGlmIChzdGF0ZS50YWcgPT09ICI/IikgewogICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZS5raW5kICE9PSAic2NhbGFyIikgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJyArIHN0YXRlLmtpbmQgKyAnIicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkgewogICAgICAgICAgICB0eXBlNSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbdHlwZUluZGV4XTsKICAgICAgICAgICAgaWYgKHR5cGU1LnJlc29sdmUoc3RhdGUucmVzdWx0KSkgewogICAgICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGU1LmNvbnN0cnVjdChzdGF0ZS5yZXN1bHQpOwogICAgICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGU1LnRhZzsKICAgICAgICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCAiZmFsbGJhY2siXSwgc3RhdGUudGFnKSkgewogICAgICAgICAgdHlwZTUgPSBzdGF0ZS50eXBlTWFwW3N0YXRlLmtpbmQgfHwgImZhbGxiYWNrIl1bc3RhdGUudGFnXTsKICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgdHlwZTUua2luZCAhPT0gc3RhdGUua2luZCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IiArIHN0YXRlLnRhZyArICc+IHRhZzsgaXQgc2hvdWxkIGJlICInICsgdHlwZTUua2luZCArICciLCBub3QgIicgKyBzdGF0ZS5raW5kICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdHlwZTUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiICsgc3RhdGUudGFnICsgIj4gZXhwbGljaXQgdGFnIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS5yZXN1bHQgPSB0eXBlNS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTsKICAgICAgICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAidW5rbm93biB0YWcgITwiICsgc3RhdGUudGFnICsgIj4iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmxpc3RlbmVyICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUubGlzdGVuZXIoImNsb3NlIiwgc3RhdGUpOwogICAgICB9CiAgICAgIHJldHVybiBzdGF0ZS50YWcgIT09IG51bGwgfHwgc3RhdGUuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUpIHsKICAgICAgdmFyIGRvY3VtZW50U3RhcnQgPSBzdGF0ZS5wb3NpdGlvbiwgX3Bvc2l0aW9uLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzLCBoYXNEaXJlY3RpdmVzID0gZmFsc2UsIGNoOwogICAgICBzdGF0ZS52ZXJzaW9uID0gbnVsbDsKICAgICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gc3RhdGUubGVnYWN5OwogICAgICBzdGF0ZS50YWdNYXAgPSB7fTsKICAgICAgc3RhdGUuYW5jaG9yTWFwID0ge307CiAgICAgIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7CiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDM3KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaGFzRGlyZWN0aXZlcyA9IHRydWU7CiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgZGlyZWN0aXZlQXJncyA9IFtdOwogICAgICAgIGlmIChkaXJlY3RpdmVOYW1lLmxlbmd0aCA8IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSAwICYmICFpc19FT0woY2gpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXNfRU9MKGNoKSkgYnJlYWs7CiAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbikpOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUpOwogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RpdmVIYW5kbGVycywgZGlyZWN0aXZlTmFtZSkpIHsKICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXJzW2RpcmVjdGl2ZU5hbWVdKHN0YXRlLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlLCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicgKyBkaXJlY3RpdmVOYW1lICsgJyInKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gMCAmJiBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gNDUgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpID09PSA0NSAmJiBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDQ1KSB7CiAgICAgICAgc3RhdGUucG9zaXRpb24gKz0gMzsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7CiAgICAgIH0gZWxzZSBpZiAoaGFzRGlyZWN0aXZlcykgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpOwogICAgICB9CiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTsKICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICBpZiAoc3RhdGUuY2hlY2tMaW5lQnJlYWtzICYmIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pKSkgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpOwogICAgICB9CiAgICAgIHN0YXRlLmRvY3VtZW50cy5wdXNoKHN0YXRlLnJlc3VsdCk7CiAgICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHsKICAgICAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDQ2KSB7CiAgICAgICAgICBzdGF0ZS5wb3NpdGlvbiArPSAzOwogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoIC0gMSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlLCAiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpOwogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkgewogICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMCAmJiBpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMykgewogICAgICAgICAgaW5wdXQgKz0gIlxuIjsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSB7CiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUoaW5wdXQsIG9wdGlvbnMpOwogICAgICB2YXIgbnVsbHBvcyA9IGlucHV0LmluZGV4T2YoIlwwIik7CiAgICAgIGlmIChudWxscG9zICE9PSAtMSkgewogICAgICAgIHN0YXRlLnBvc2l0aW9uID0gbnVsbHBvczsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZSwgIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpOwogICAgICB9CiAgICAgIHN0YXRlLmlucHV0ICs9ICJcMCI7CiAgICAgIHdoaWxlIChzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gMzIpIHsKICAgICAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7CiAgICAgICAgc3RhdGUucG9zaXRpb24gKz0gMTsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGggLSAxKSB7CiAgICAgICAgcmVhZERvY3VtZW50KHN0YXRlKTsKICAgICAgfQogICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnRzOwogICAgfQogICAgZnVuY3Rpb24gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7CiAgICAgIGlmIChpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgb3B0aW9ucyA9IGl0ZXJhdG9yMjsKICAgICAgICBpdGVyYXRvcjIgPSBudWxsOwogICAgICB9CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvcjIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzOwogICAgICB9CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBpdGVyYXRvcjIoZG9jdW1lbnRzW2luZGV4Ml0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzWzBdOwogICAgICB9CiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpOwogICAgfQogICAgZnVuY3Rpb24gc2FmZUxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yMiwgb3B0aW9ucykgewogICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgaXRlcmF0b3IyICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zID09PSAidW5kZWZpbmVkIikgewogICAgICAgIG9wdGlvbnMgPSBpdGVyYXRvcjI7CiAgICAgICAgaXRlcmF0b3IyID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNhZmVMb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBsb2FkKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCA9IHNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgPSBzYWZlTG9hZDsKICAgIHZhciBpMTE7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMKdmFyIHJlcXVpcmVfZHVtcGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICB2YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIENIQVJfVEFCID0gOTsKICAgIHZhciBDSEFSX0xJTkVfRkVFRCA9IDEwOwogICAgdmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOID0gMTM7CiAgICB2YXIgQ0hBUl9TUEFDRSA9IDMyOwogICAgdmFyIENIQVJfRVhDTEFNQVRJT04gPSAzMzsKICAgIHZhciBDSEFSX0RPVUJMRV9RVU9URSA9IDM0OwogICAgdmFyIENIQVJfU0hBUlAgPSAzNTsKICAgIHZhciBDSEFSX1BFUkNFTlQgPSAzNzsKICAgIHZhciBDSEFSX0FNUEVSU0FORCA9IDM4OwogICAgdmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7CiAgICB2YXIgQ0hBUl9BU1RFUklTSyA9IDQyOwogICAgdmFyIENIQVJfQ09NTUEgPSA0NDsKICAgIHZhciBDSEFSX01JTlVTID0gNDU7CiAgICB2YXIgQ0hBUl9DT0xPTiA9IDU4OwogICAgdmFyIENIQVJfRVFVQUxTID0gNjE7CiAgICB2YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjsKICAgIHZhciBDSEFSX1FVRVNUSU9OID0gNjM7CiAgICB2YXIgQ0hBUl9DT01NRVJDSUFMX0FUID0gNjQ7CiAgICB2YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7CiAgICB2YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzOwogICAgdmFyIENIQVJfR1JBVkVfQUNDRU5UID0gOTY7CiAgICB2YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7CiAgICB2YXIgQ0hBUl9WRVJUSUNBTF9MSU5FID0gMTI0OwogICAgdmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKICAgIHZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzBdID0gIlxcMCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzddID0gIlxcYSI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzhdID0gIlxcYiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzldID0gIlxcdCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEwXSA9ICJcXG4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMV0gPSAiXFx2IjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTJdID0gIlxcZiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEzXSA9ICJcXHIiOwogICAgRVNDQVBFX1NFUVVFTkNFU1syN10gPSAiXFxlIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMzRdID0gJ1xcIic7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzkyXSA9ICJcXFxcIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9ICJcXE4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxNjBdID0gIlxcXyI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzJdID0gIlxcTCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gIlxcUCI7CiAgICB2YXIgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbCiAgICAgICJ5IiwKICAgICAgIlkiLAogICAgICAieWVzIiwKICAgICAgIlllcyIsCiAgICAgICJZRVMiLAogICAgICAib24iLAogICAgICAiT24iLAogICAgICAiT04iLAogICAgICAibiIsCiAgICAgICJOIiwKICAgICAgIm5vIiwKICAgICAgIk5vIiwKICAgICAgIk5PIiwKICAgICAgIm9mZiIsCiAgICAgICJPZmYiLAogICAgICAiT0ZGIgogICAgXTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcDcpIHsKICAgICAgdmFyIHJlc3VsdCwga2V5czIsIGluZGV4MiwgbGVuZ3RoLCB0YWcsIHN0eWxlLCB0eXBlNTsKICAgICAgaWYgKG1hcDcgPT09IG51bGwpIHJldHVybiB7fTsKICAgICAgcmVzdWx0ID0ge307CiAgICAgIGtleXMyID0gT2JqZWN0LmtleXMobWFwNyk7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0ga2V5czIubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdGFnID0ga2V5czJbaW5kZXgyXTsKICAgICAgICBzdHlsZSA9IFN0cmluZyhtYXA3W3RhZ10pOwogICAgICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09ICIhISIpIHsKICAgICAgICAgIHRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnLnNsaWNlKDIpOwogICAgICAgIH0KICAgICAgICB0eXBlNSA9IHNjaGVtYS5jb21waWxlZFR5cGVNYXBbImZhbGxiYWNrIl1bdGFnXTsKICAgICAgICBpZiAodHlwZTUgJiYgX2hhc093blByb3BlcnR5LmNhbGwodHlwZTUuc3R5bGVBbGlhc2VzLCBzdHlsZSkpIHsKICAgICAgICAgIHN0eWxlID0gdHlwZTUuc3R5bGVBbGlhc2VzW3N0eWxlXTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0W3RhZ10gPSBzdHlsZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3RlcikgewogICAgICB2YXIgc3RyaW5nMywgaGFuZGxlMywgbGVuZ3RoOwogICAgICBzdHJpbmczID0gY2hhcmFjdGVyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogICAgICBpZiAoY2hhcmFjdGVyIDw9IDI1NSkgewogICAgICAgIGhhbmRsZTMgPSAieCI7CiAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gNjU1MzUpIHsKICAgICAgICBoYW5kbGUzID0gInUiOwogICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHsKICAgICAgICBoYW5kbGUzID0gIlUiOwogICAgICAgIGxlbmd0aCA9IDg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTsKICAgICAgfQogICAgICByZXR1cm4gIlxcIiArIGhhbmRsZTMgKyBjb21tb24ucmVwZWF0KCIwIiwgbGVuZ3RoIC0gc3RyaW5nMy5sZW5ndGgpICsgc3RyaW5nMzsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLmluZGVudCA9IE1hdGgubWF4KDEsIG9wdGlvbnNbImluZGVudCJdIHx8IDIpOwogICAgICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zWyJub0FycmF5SW5kZW50Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuc2tpcEludmFsaWQgPSBvcHRpb25zWyJza2lwSW52YWxpZCJdIHx8IGZhbHNlOwogICAgICB0aGlzLmZsb3dMZXZlbCA9IGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1siZmxvd0xldmVsIl0pID8gLTEgOiBvcHRpb25zWyJmbG93TGV2ZWwiXTsKICAgICAgdGhpcy5zdHlsZU1hcCA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1sic3R5bGVzIl0gfHwgbnVsbCk7CiAgICAgIHRoaXMuc29ydEtleXMgPSBvcHRpb25zWyJzb3J0S2V5cyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnNbImxpbmVXaWR0aCJdIHx8IDgwOwogICAgICB0aGlzLm5vUmVmcyA9IG9wdGlvbnNbIm5vUmVmcyJdIHx8IGZhbHNlOwogICAgICB0aGlzLm5vQ29tcGF0TW9kZSA9IG9wdGlvbnNbIm5vQ29tcGF0TW9kZSJdIHx8IGZhbHNlOwogICAgICB0aGlzLmNvbmRlbnNlRmxvdyA9IG9wdGlvbnNbImNvbmRlbnNlRmxvdyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0OwogICAgICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0OwogICAgICB0aGlzLnRhZyA9IG51bGw7CiAgICAgIHRoaXMucmVzdWx0ID0gIiI7CiAgICAgIHRoaXMuZHVwbGljYXRlcyA9IFtdOwogICAgICB0aGlzLnVzZWREdXBsaWNhdGVzID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmczLCBzcGFjZXMpIHsKICAgICAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoIiAiLCBzcGFjZXMpLCBwb3NpdGlvbjMgPSAwLCBuZXh0MiA9IC0xLCByZXN1bHQgPSAiIiwgbGluZSwgbGVuZ3RoID0gc3RyaW5nMy5sZW5ndGg7CiAgICAgIHdoaWxlIChwb3NpdGlvbjMgPCBsZW5ndGgpIHsKICAgICAgICBuZXh0MiA9IHN0cmluZzMuaW5kZXhPZigiXG4iLCBwb3NpdGlvbjMpOwogICAgICAgIGlmIChuZXh0MiA9PT0gLTEpIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMyk7CiAgICAgICAgICBwb3NpdGlvbjMgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMywgbmV4dDIgKyAxKTsKICAgICAgICAgIHBvc2l0aW9uMyA9IG5leHQyICsgMTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09ICJcbiIpIHJlc3VsdCArPSBpbmQ7CiAgICAgICAgcmVzdWx0ICs9IGxpbmU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKSB7CiAgICAgIHJldHVybiAiXG4iICsgY29tbW9uLnJlcGVhdCgiICIsIHN0YXRlLmluZGVudCAqIGxldmVsKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyKSB7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgdHlwZTU7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICB0eXBlNSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbaW5kZXgyXTsKICAgICAgICBpZiAodHlwZTUucmVzb2x2ZShzdHIpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSBDSEFSX1NQQUNFIHx8IGMxMSA9PT0gQ0hBUl9UQUI7CiAgICB9CiAgICBmdW5jdGlvbiBpc1ByaW50YWJsZShjMTEpIHsKICAgICAgcmV0dXJuIDMyIDw9IGMxMSAmJiBjMTEgPD0gMTI2IHx8IDE2MSA8PSBjMTEgJiYgYzExIDw9IDU1Mjk1ICYmIGMxMSAhPT0gODIzMiAmJiBjMTEgIT09IDgyMzMgfHwgNTczNDQgPD0gYzExICYmIGMxMSA8PSA2NTUzMyAmJiBjMTEgIT09IDY1Mjc5IHx8IDY1NTM2IDw9IGMxMSAmJiBjMTEgPD0gMTExNDExMTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnNDaGFyKGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiAhaXNXaGl0ZXNwYWNlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOICYmIGMxMSAhPT0gQ0hBUl9MSU5FX0ZFRUQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZShjMTEsIHByZXYpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX0NPTE9OICYmIChjMTEgIT09IENIQVJfU0hBUlAgfHwgcHJldiAmJiBpc05zQ2hhcihwcmV2KSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiBjMTEgIT09IDY1Mjc5ICYmICFpc1doaXRlc3BhY2UoYzExKSAmJiBjMTEgIT09IENIQVJfTUlOVVMgJiYgYzExICE9PSBDSEFSX1FVRVNUSU9OICYmIGMxMSAhPT0gQ0hBUl9DT0xPTiAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1NIQVJQICYmIGMxMSAhPT0gQ0hBUl9BTVBFUlNBTkQgJiYgYzExICE9PSBDSEFSX0FTVEVSSVNLICYmIGMxMSAhPT0gQ0hBUl9FWENMQU1BVElPTiAmJiBjMTEgIT09IENIQVJfVkVSVElDQUxfTElORSAmJiBjMTEgIT09IENIQVJfRVFVQUxTICYmIGMxMSAhPT0gQ0hBUl9HUkVBVEVSX1RIQU4gJiYgYzExICE9PSBDSEFSX1NJTkdMRV9RVU9URSAmJiBjMTEgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmIGMxMSAhPT0gQ0hBUl9QRVJDRU5UICYmIGMxMSAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUICYmIGMxMSAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpIHsKICAgICAgdmFyIGxlYWRpbmdTcGFjZVJlID0gL15cbiogLzsKICAgICAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nMyk7CiAgICB9CiAgICB2YXIgU1RZTEVfUExBSU4gPSAxLCBTVFlMRV9TSU5HTEUgPSAyLCBTVFlMRV9MSVRFUkFMID0gMywgU1RZTEVfRk9MREVEID0gNCwgU1RZTEVfRE9VQkxFID0gNTsKICAgIGZ1bmN0aW9uIGNob29zZVNjYWxhclN0eWxlKHN0cmluZzMsIHNpbmdsZUxpbmVPbmx5LCBpbmRlbnRQZXJMZXZlbCwgbGluZVdpZHRoLCB0ZXN0QW1iaWd1b3VzVHlwZSkgewogICAgICB2YXIgaTExOwogICAgICB2YXIgY2hhciwgcHJldl9jaGFyOwogICAgICB2YXIgaGFzTGluZUJyZWFrID0gZmFsc2U7CiAgICAgIHZhciBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTsKICAgICAgdmFyIHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xOwogICAgICB2YXIgcHJldmlvdXNMaW5lQnJlYWsgPSAtMTsKICAgICAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChzdHJpbmczLmNoYXJDb2RlQXQoMCkpICYmICFpc1doaXRlc3BhY2Uoc3RyaW5nMy5jaGFyQ29kZUF0KHN0cmluZzMubGVuZ3RoIC0gMSkpOwogICAgICBpZiAoc2luZ2xlTGluZU9ubHkpIHsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEpOwogICAgICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaTExID0gMDsgaTExIDwgc3RyaW5nMy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgICBpZiAoY2hhciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHsKICAgICAgICAgICAgaGFzTGluZUJyZWFrID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHsKICAgICAgICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgLy8gRm9sZGFibGUgbGluZSA9IHRvbyBsb25nLCBhbmQgbm90IG1vcmUtaW5kZW50ZWQuCiAgICAgICAgICAgICAgaTExIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZzNbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gIiAiOwogICAgICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTExOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fCBzaG91bGRUcmFja1dpZHRoICYmIChpMTEgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nM1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAiICIpOwogICAgICB9CiAgICAgIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHsKICAgICAgICByZXR1cm4gcGxhaW4gJiYgIXRlc3RBbWJpZ3VvdXNUeXBlKHN0cmluZzMpID8gU1RZTEVfUExBSU4gOiBTVFlMRV9TSU5HTEU7CiAgICAgIH0KICAgICAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpKSB7CiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgfQogICAgICByZXR1cm4gaGFzRm9sZGFibGVMaW5lID8gU1RZTEVfRk9MREVEIDogU1RZTEVfTElURVJBTDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlLCBzdHJpbmczLCBsZXZlbCwgaXNrZXkpIHsKICAgICAgc3RhdGUuZHVtcCA9IChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoc3RyaW5nMy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiAiJyciOwogICAgICAgIH0KICAgICAgICBpZiAoIXN0YXRlLm5vQ29tcGF0TW9kZSAmJiBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZzMpICE9PSAtMSkgewogICAgICAgICAgcmV0dXJuICInIiArIHN0cmluZzMgKyAiJyI7CiAgICAgICAgfQogICAgICAgIHZhciBpbmRlbnQzID0gc3RhdGUuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpOwogICAgICAgIHZhciBsaW5lV2lkdGggPSBzdGF0ZS5saW5lV2lkdGggPT09IC0xID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50Myk7CiAgICAgICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXkgfHwgc3RhdGUuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gc3RhdGUuZmxvd0xldmVsOwogICAgICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyaW5nNCkgewogICAgICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZSwgc3RyaW5nNCk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nMywgc2luZ2xlTGluZU9ubHksIHN0YXRlLmluZGVudCwgbGluZVdpZHRoLCB0ZXN0QW1iaWd1aXR5KSkgewogICAgICAgICAgY2FzZSBTVFlMRV9QTEFJTjoKICAgICAgICAgICAgcmV0dXJuIHN0cmluZzM7CiAgICAgICAgICBjYXNlIFNUWUxFX1NJTkdMRToKICAgICAgICAgICAgcmV0dXJuICInIiArIHN0cmluZzMucmVwbGFjZSgvJy9nLCAiJyciKSArICInIjsKICAgICAgICAgIGNhc2UgU1RZTEVfTElURVJBTDoKICAgICAgICAgICAgcmV0dXJuICJ8IiArIGJsb2NrSGVhZGVyKHN0cmluZzMsIHN0YXRlLmluZGVudCkgKyBkcm9wRW5kaW5nTmV3bGluZShpbmRlbnRTdHJpbmcoc3RyaW5nMywgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6CiAgICAgICAgICAgIHJldHVybiAiPiIgKyBibG9ja0hlYWRlcihzdHJpbmczLCBzdGF0ZS5pbmRlbnQpICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSwgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9ET1VCTEU6CiAgICAgICAgICAgIHJldHVybiAnIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSArICciJzsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZzMsIGluZGVudFBlckxldmVsKSB7CiAgICAgIHZhciBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpID8gU3RyaW5nKGluZGVudFBlckxldmVsKSA6ICIiOwogICAgICB2YXIgY2xpcCA9IHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAxXSA9PT0gIlxuIjsKICAgICAgdmFyIGtlZXAgPSBjbGlwICYmIChzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMl0gPT09ICJcbiIgfHwgc3RyaW5nMyA9PT0gIlxuIik7CiAgICAgIHZhciBjaG9tcCA9IGtlZXAgPyAiKyIgOiBjbGlwID8gIiIgOiAiLSI7CiAgICAgIHJldHVybiBpbmRlbnRJbmRpY2F0b3IgKyBjaG9tcCArICJcbiI7CiAgICB9CiAgICBmdW5jdGlvbiBkcm9wRW5kaW5nTmV3bGluZShzdHJpbmczKSB7CiAgICAgIHJldHVybiBzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMV0gPT09ICJcbiIgPyBzdHJpbmczLnNsaWNlKDAsIC0xKSA6IHN0cmluZzM7CiAgICB9CiAgICBmdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZzMsIHdpZHRoKSB7CiAgICAgIHZhciBsaW5lUmUgPSAvKFxuKykoW15cbl0qKS9nOwogICAgICB2YXIgcmVzdWx0ID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBuZXh0TEYgPSBzdHJpbmczLmluZGV4T2YoIlxuIik7CiAgICAgICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZzMubGVuZ3RoOwogICAgICAgIGxpbmVSZS5sYXN0SW5kZXggPSBuZXh0TEY7CiAgICAgICAgcmV0dXJuIGZvbGRMaW5lKHN0cmluZzMuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpOwogICAgICB9KSgpOwogICAgICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZzNbMF0gPT09ICJcbiIgfHwgc3RyaW5nM1swXSA9PT0gIiAiOwogICAgICB2YXIgbW9yZUluZGVudGVkOwogICAgICB2YXIgbWF0Y2gyOwogICAgICB3aGlsZSAobWF0Y2gyID0gbGluZVJlLmV4ZWMoc3RyaW5nMykpIHsKICAgICAgICB2YXIgcHJlZml4NCA9IG1hdGNoMlsxXSwgbGluZSA9IG1hdGNoMlsyXTsKICAgICAgICBtb3JlSW5kZW50ZWQgPSBsaW5lWzBdID09PSAiICI7CiAgICAgICAgcmVzdWx0ICs9IHByZWZpeDQgKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSAiIiA/ICJcbiIgOiAiIikgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7CiAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHsKICAgICAgaWYgKGxpbmUgPT09ICIiIHx8IGxpbmVbMF0gPT09ICIgIikgcmV0dXJuIGxpbmU7CiAgICAgIHZhciBicmVha1JlID0gLyBbXiBdL2c7CiAgICAgIHZhciBtYXRjaDI7CiAgICAgIHZhciBzdGFydCA9IDAsIGVuZDMsIGN1cnIgPSAwLCBuZXh0MiA9IDA7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKG1hdGNoMiA9IGJyZWFrUmUuZXhlYyhsaW5lKSkgewogICAgICAgIG5leHQyID0gbWF0Y2gyLmluZGV4OwogICAgICAgIGlmIChuZXh0MiAtIHN0YXJ0ID4gd2lkdGgpIHsKICAgICAgICAgIGVuZDMgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDI7CiAgICAgICAgICByZXN1bHQgKz0gIlxuIiArIGxpbmUuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgICAgc3RhcnQgPSBlbmQzICsgMTsKICAgICAgICB9CiAgICAgICAgY3VyciA9IG5leHQyOwogICAgICB9CiAgICAgIHJlc3VsdCArPSAiXG4iOwogICAgICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkgewogICAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKSArICJcbiIgKyBsaW5lLnNsaWNlKGN1cnIgKyAxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmczKSB7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgdmFyIGNoYXIsIG5leHRDaGFyOwogICAgICB2YXIgZXNjYXBlU2VxOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBzdHJpbmczLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgaWYgKGNoYXIgPj0gNTUyOTYgJiYgY2hhciA8PSA1NjMxOSkgewogICAgICAgICAgbmV4dENoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExICsgMSk7CiAgICAgICAgICBpZiAobmV4dENoYXIgPj0gNTYzMjAgJiYgbmV4dENoYXIgPD0gNTczNDMpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGVuY29kZUhleCgoY2hhciAtIDU1Mjk2KSAqIDEwMjQgKyBuZXh0Q2hhciAtIDU2MzIwICsgNjU1MzYpOwogICAgICAgICAgICBpMTErKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVzY2FwZVNlcSA9IEVTQ0FQRV9TRVFVRU5DRVNbY2hhcl07CiAgICAgICAgcmVzdWx0ICs9ICFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcikgPyBzdHJpbmczW2kxMV0gOiBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdFtpbmRleDJdLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBpZiAoaW5kZXgyICE9PSAwKSBfcmVzdWx0ICs9ICIsIiArICghc3RhdGUuY29uZGVuc2VGbG93ID8gIiAiIDogIiIpOwogICAgICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZS50YWcgPSBfdGFnOwogICAgICBzdGF0ZS5kdW1wID0gIlsiICsgX3Jlc3VsdCArICJdIjsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RbaW5kZXgyXSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIGlmICghY29tcGFjdCB8fCBpbmRleDIgIT09IDApIHsKICAgICAgICAgICAgX3Jlc3VsdCArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICAgIF9yZXN1bHQgKz0gIi0iOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3Jlc3VsdCArPSAiLSAiOwogICAgICAgICAgfQogICAgICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZS50YWcgPSBfdGFnOwogICAgICBzdGF0ZS5kdW1wID0gX3Jlc3VsdCB8fCAiW10iOwogICAgfQogICAgZnVuY3Rpb24gd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSwgaW5kZXgyLCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIHBhaXJCdWZmZXI7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyQnVmZmVyID0gIiI7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gMCkgcGFpckJ1ZmZlciArPSAiLCAiOwogICAgICAgIGlmIChzdGF0ZS5jb25kZW5zZUZsb3cpIHBhaXJCdWZmZXIgKz0gJyInOwogICAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXgyXTsKICAgICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcCArIChzdGF0ZS5jb25kZW5zZUZsb3cgPyAnIicgOiAiIikgKyAiOiIgKyAoc3RhdGUuY29uZGVuc2VGbG93ID8gIiIgOiAiICIpOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0VmFsdWUsIGZhbHNlLCBmYWxzZSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7CiAgICAgICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyOwogICAgICB9CiAgICAgIHN0YXRlLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlLmR1bXAgPSAieyIgKyBfcmVzdWx0ICsgIn0iOwogICAgfQogICAgZnVuY3Rpb24gd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlLnRhZywgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksIGluZGV4MiwgbGVuZ3RoLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBleHBsaWNpdFBhaXIsIHBhaXJCdWZmZXI7CiAgICAgIGlmIChzdGF0ZS5zb3J0S2V5cyA9PT0gdHJ1ZSkgewogICAgICAgIG9iamVjdEtleUxpc3Quc29ydCgpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5zb3J0S2V5cyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZS5zb3J0S2V5cyk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc29ydEtleXMpIHsKICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyQnVmZmVyID0gIiI7CiAgICAgICAgaWYgKCFjb21wYWN0IHx8IGluZGV4MiAhPT0gMCkgewogICAgICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7CiAgICAgICAgfQogICAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXgyXTsKICAgICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdEtleSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBleHBsaWNpdFBhaXIgPSBzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSAiPyIgfHwgc3RhdGUuZHVtcCAmJiBzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQ7CiAgICAgICAgaWYgKGV4cGxpY2l0UGFpcikgewogICAgICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgICBwYWlyQnVmZmVyICs9ICI/IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8gIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wOwogICAgICAgIGlmIChleHBsaWNpdFBhaXIpIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpOwogICAgICAgIH0KICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIjoiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9ICI6ICI7CiAgICAgICAgfQogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDsKICAgICAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7CiAgICAgIH0KICAgICAgc3RhdGUudGFnID0gX3RhZzsKICAgICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgInt9IjsKICAgIH0KICAgIGZ1bmN0aW9uIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgZXhwbGljaXQpIHsKICAgICAgdmFyIF9yZXN1bHQsIHR5cGVMaXN0LCBpbmRleDIsIGxlbmd0aCwgdHlwZTUsIHN0eWxlOwogICAgICB0eXBlTGlzdCA9IGV4cGxpY2l0ID8gc3RhdGUuZXhwbGljaXRUeXBlcyA6IHN0YXRlLmltcGxpY2l0VHlwZXM7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdHlwZTUgPSB0eXBlTGlzdFtpbmRleDJdOwogICAgICAgIGlmICgodHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlNS5wcmVkaWNhdGUpICYmICghdHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IiAmJiBvYmplY3QgaW5zdGFuY2VvZiB0eXBlNS5pbnN0YW5jZU9mKSAmJiAoIXR5cGU1LnByZWRpY2F0ZSB8fCB0eXBlNS5wcmVkaWNhdGUob2JqZWN0KSkpIHsKICAgICAgICAgIHN0YXRlLnRhZyA9IGV4cGxpY2l0ID8gdHlwZTUudGFnIDogIj8iOwogICAgICAgICAgaWYgKHR5cGU1LnJlcHJlc2VudCkgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnN0eWxlTWFwW3R5cGU1LnRhZ10gfHwgdHlwZTUuZGVmYXVsdFN0eWxlOwogICAgICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwodHlwZTUucmVwcmVzZW50KSA9PT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICAgIF9yZXN1bHQgPSB0eXBlNS5yZXByZXNlbnQob2JqZWN0LCBzdHlsZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwodHlwZTUucmVwcmVzZW50LCBzdHlsZSkpIHsKICAgICAgICAgICAgICBfcmVzdWx0ID0gdHlwZTUucmVwcmVzZW50W3N0eWxlXShvYmplY3QsIHN0eWxlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigiITwiICsgdHlwZTUudGFnICsgJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90ICInICsgc3R5bGUgKyAnIiBzdHlsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0YXRlLmR1bXAgPSBfcmVzdWx0OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5KSB7CiAgICAgIHN0YXRlLnRhZyA9IG51bGw7CiAgICAgIHN0YXRlLmR1bXAgPSBvYmplY3Q7CiAgICAgIGlmICghZGV0ZWN0VHlwZShzdGF0ZSwgb2JqZWN0LCBmYWxzZSkpIHsKICAgICAgICBkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIHRydWUpOwogICAgICB9CiAgICAgIHZhciB0eXBlNSA9IF90b1N0cmluZy5jYWxsKHN0YXRlLmR1bXApOwogICAgICBpZiAoYmxvY2spIHsKICAgICAgICBibG9jayA9IHN0YXRlLmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWw7CiAgICAgIH0KICAgICAgdmFyIG9iamVjdE9yQXJyYXkgPSB0eXBlNSA9PT0gIltvYmplY3QgT2JqZWN0XSIgfHwgdHlwZTUgPT09ICJbb2JqZWN0IEFycmF5XSIsIGR1cGxpY2F0ZUluZGV4LCBkdXBsaWNhdGU7CiAgICAgIGlmIChvYmplY3RPckFycmF5KSB7CiAgICAgICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTsKICAgICAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICI/IiB8fCBkdXBsaWNhdGUgfHwgc3RhdGUuaW5kZW50ICE9PSAyICYmIGxldmVsID4gMCkgewogICAgICAgIGNvbXBhY3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoZHVwbGljYXRlICYmIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkgewogICAgICAgIHN0YXRlLmR1bXAgPSAiKnJlZl8iICsgZHVwbGljYXRlSW5kZXg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG9iamVjdE9yQXJyYXkgJiYgZHVwbGljYXRlICYmICFzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHsKICAgICAgICAgIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlNSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZS5kdW1wKS5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgd3JpdGVCbG9ja01hcHBpbmcoc3RhdGUsIGxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlLmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZS5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCk7CiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICBzdGF0ZS5kdW1wID0gIiZyZWZfIiArIGR1cGxpY2F0ZUluZGV4ICsgIiAiICsgc3RhdGUuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsKICAgICAgICAgIHZhciBhcnJheUxldmVsID0gc3RhdGUubm9BcnJheUluZGVudCAmJiBsZXZlbCA+IDAgPyBsZXZlbCAtIDEgOiBsZXZlbDsKICAgICAgICAgIGlmIChibG9jayAmJiBzdGF0ZS5kdW1wLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUsIGFycmF5TGV2ZWwsIHN0YXRlLmR1bXAsIGNvbXBhY3QpOwogICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgc3RhdGUuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlLmR1bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBhcnJheUxldmVsLCBzdGF0ZS5kdW1wKTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlLmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyAiICIgKyBzdGF0ZS5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gIltvYmplY3QgU3RyaW5nXSIpIHsKICAgICAgICAgIGlmIChzdGF0ZS50YWcgIT09ICI/IikgewogICAgICAgICAgICB3cml0ZVNjYWxhcihzdGF0ZSwgc3RhdGUuZHVtcCwgbGV2ZWwsIGlza2V5KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHN0YXRlLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIiArIHR5cGU1KTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICI/IikgewogICAgICAgICAgc3RhdGUuZHVtcCA9ICIhPCIgKyBzdGF0ZS50YWcgKyAiPiAiICsgc3RhdGUuZHVtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKG9iamVjdCwgc3RhdGUpIHsKICAgICAgdmFyIG9iamVjdHMgPSBbXSwgZHVwbGljYXRlc0luZGV4ZXMgPSBbXSwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4Ml1dKTsKICAgICAgfQogICAgICBzdGF0ZS51c2VkRHVwbGljYXRlcyA9IG5ldyBBcnJheShsZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcykgewogICAgICB2YXIgb2JqZWN0S2V5TGlzdCwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGlmIChvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIpIHsKICAgICAgICBpbmRleDIgPSBvYmplY3RzLmluZGV4T2Yob2JqZWN0KTsKICAgICAgICBpZiAoaW5kZXgyICE9PSAtMSkgewogICAgICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgyKSA9PT0gLTEpIHsKICAgICAgICAgICAgZHVwbGljYXRlc0luZGV4ZXMucHVzaChpbmRleDIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvYmplY3RzLnB1c2gob2JqZWN0KTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2luZGV4Ml0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICAgICAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3Rbb2JqZWN0S2V5TGlzdFtpbmRleDJdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBkdW1wKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUob3B0aW9ucyk7CiAgICAgIGlmICghc3RhdGUubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7CiAgICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIDAsIGlucHV0LCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlLmR1bXAgKyAiXG4iOwogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmdW5jdGlvbiBzYWZlRHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgICByZXR1cm4gZHVtcChpbnB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cy5kdW1wID0gZHVtcDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVEdW1wID0gc2FmZUR1bXA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcwp2YXIgcmVxdWlyZV9qc195YW1sID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgbG9hZGVyID0gcmVxdWlyZV9sb2FkZXIoKTsKICAgIHZhciBkdW1wZXIgPSByZXF1aXJlX2R1bXBlcigpOwogICAgZnVuY3Rpb24gZGVwcmVjYXRlZChuYW1lKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uICIgKyBuYW1lICsgIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKTsKICAgICAgfTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLlR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzLlNjaGVtYSA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2ZhaWxzYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5KU09OX1NDSEVNQSA9IHJlcXVpcmVfanNvbigpOwogICAgbW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgPSByZXF1aXJlX2NvcmUoKTsKICAgIG1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZGVyLmxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkQWxsID0gbG9hZGVyLmxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCA9IGxvYWRlci5zYWZlTG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gbG9hZGVyLnNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuZHVtcCA9IGR1bXBlci5kdW1wOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBkdW1wZXIuc2FmZUR1bXA7CiAgICBtb2R1bGUuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIG1vZHVsZS5leHBvcnRzLk1JTklNQUxfU0NIRU1BID0gcmVxdWlyZV9mYWlsc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgbW9kdWxlLmV4cG9ydHMuc2NhbiA9IGRlcHJlY2F0ZWQoInNjYW4iKTsKICAgIG1vZHVsZS5leHBvcnRzLnBhcnNlID0gZGVwcmVjYXRlZCgicGFyc2UiKTsKICAgIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBkZXByZWNhdGVkKCJjb21wb3NlIik7CiAgICBtb2R1bGUuZXhwb3J0cy5hZGRDb25zdHJ1Y3RvciA9IGRlcHJlY2F0ZWQoImFkZENvbnN0cnVjdG9yIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcwp2YXIgcmVxdWlyZV9qc195YW1sMiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHlhbWwgPSByZXF1aXJlX2pzX3lhbWwoKTsKICAgIG1vZHVsZS5leHBvcnRzID0geWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMKdmFyIHJlcXVpcmVfc21hcnR5YW1sX3BsdWdpbnMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IHZvaWQgMDsKICAgIHZhciBqc1lhbWwgPSBfX2ltcG9ydFN0YXIyKHJlcXVpcmVfanNfeWFtbDIoKSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IGpzWWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMKdmFyIHJlcXVpcmVfZGlzdF90czIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGV4cG9ydHMueWFtbFN0cmluZ1RvT2JqZWN0ID0gdm9pZCAwOwogICAgdmFyIHBsdWdpbnMxNyA9IF9faW1wb3J0U3RhcjIocmVxdWlyZV9zbWFydHlhbWxfcGx1Z2lucygpKTsKICAgIGV4cG9ydHMueWFtbFN0cmluZ1RvT2JqZWN0ID0gYXN5bmMgKHlhbWxTdHJpbmdBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICByZXR1cm4gcGx1Z2luczE3LmpzWWFtbC5zYWZlTG9hZCh5YW1sU3RyaW5nQXJnKTsKICAgIH07CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGFzeW5jIChvYmplY3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICByZXR1cm4gcGx1Z2luczE3LmpzWWFtbC5zYWZlRHVtcChvYmplY3RBcmcpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2JhaWxAMi4wLjIvbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMKZnVuY3Rpb24gYmFpbChlcnJvcikgewogIGlmIChlcnJvcikgewogICAgdGhyb3cgZXJyb3I7CiAgfQp9CnZhciBpbml0X2JhaWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9iYWlsQDIuMC4yL25vZGVfbW9kdWxlcy9iYWlsL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2V4dGVuZEAzLjAuMi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzCnZhciByZXF1aXJlX2V4dGVuZCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogICAgdmFyIGlzQXJyYXk0ID0gZnVuY3Rpb24gaXNBcnJheTUoYXJyKSB7CiAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07CiAgICB2YXIgaXNQbGFpbk9iamVjdDIgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0MyhvYmopIHsKICAgICAgaWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpOwogICAgICB2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIik7CiAgICAgIGlmIChvYmouY29uc3RydWN0b3IgJiYgIWhhc093bkNvbnN0cnVjdG9yICYmICFoYXNJc1Byb3RvdHlwZU9mKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBrZXkyOwogICAgICBmb3IgKGtleTIgaW4gb2JqKSB7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVvZiBrZXkyID09PSAidW5kZWZpbmVkIiB8fCBoYXNPd24uY2FsbChvYmosIGtleTIpOwogICAgfTsKICAgIHZhciBzZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIHNldFByb3BlcnR5Mih0YXJnZXQsIG9wdGlvbnMpIHsKICAgICAgaWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwgewogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7CiAgICAgIH0KICAgIH07CiAgICB2YXIgZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eTIob2JqLCBuYW1lKSB7CiAgICAgIGlmIChuYW1lID09PSAiX19wcm90b19fIikgewogICAgICAgIGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkgewogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9IGVsc2UgaWYgKGdPUEQpIHsKICAgICAgICAgIHJldHVybiBnT1BEKG9iaiwgbmFtZSkudmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvYmpbbmFtZV07CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQzKCkgewogICAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmU7CiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07CiAgICAgIHZhciBpMTEgPSAxOwogICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGRlZXAgPSBmYWxzZTsKICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIikgewogICAgICAgIGRlZXAgPSB0YXJnZXQ7CiAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwogICAgICAgIGkxMSA9IDI7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmIHR5cGVvZiB0YXJnZXQgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0YXJnZXQgPSB7fTsKICAgICAgfQogICAgICBmb3IgKDsgaTExIDwgbGVuZ3RoOyArK2kxMSkgewogICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKG5hbWUgaW4gb3B0aW9ucykgewogICAgICAgICAgICBzcmMgPSBnZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpOwogICAgICAgICAgICBjb3B5ID0gZ2V0UHJvcGVydHkob3B0aW9ucywgbmFtZSk7CiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IGNvcHkpIHsKICAgICAgICAgICAgICBpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0Mihjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBpc0FycmF5NChjb3B5KSkpKSB7CiAgICAgICAgICAgICAgICBpZiAoY29weUlzQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNBcnJheTQoc3JjKSA/IHNyYyA6IFtdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdDIoc3JjKSA/IHNyYyA6IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQzKGRlZXAsIGNsb25lLCBjb3B5KSB9KTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb3B5ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBjb3B5IH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RldmxvcEAxLjEuMC9ub2RlX21vZHVsZXMvZGV2bG9wL2xpYi9kZWZhdWx0LmpzCmZ1bmN0aW9uIGRlcHJlY2F0ZShmbikgewogIHJldHVybiBmbjsKfQpmdW5jdGlvbiBlcXVhbCgpIHsKfQpmdW5jdGlvbiBvaygpIHsKfQpmdW5jdGlvbiB1bnJlYWNoYWJsZSgpIHsKfQp2YXIgaW5pdF9kZWZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaXMtcGxhaW4tb2JqQDQuMS4wL25vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmovaW5kZXguanMKZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gIm9iamVjdCIgfHwgdmFsdWUyID09PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZTIpOwogIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUyKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZTIpOwp9CnZhciBpbml0X2lzX3BsYWluX29iaiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2lzLXBsYWluLW9iakA0LjEuMC9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0cm91Z2goKSB7CiAgY29uc3QgZm5zID0gW107CiAgY29uc3QgcGlwZWxpbmUgPSB7IHJ1biwgdXNlIH07CiAgcmV0dXJuIHBpcGVsaW5lOwogIGZ1bmN0aW9uIHJ1biguLi52YWx1ZXMpIHsKICAgIGxldCBtaWRkbGV3YXJlSW5kZXggPSAtMTsKICAgIGNvbnN0IGNhbGxiYWNrID0gdmFsdWVzLnBvcCgpOwogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiBhcyBsYXN0IGFyZ3VtZW50LCBub3QgIiArIGNhbGxiYWNrKTsKICAgIH0KICAgIG5leHQyKG51bGwsIC4uLnZhbHVlcyk7CiAgICBmdW5jdGlvbiBuZXh0MihlcnJvciwgLi4ub3V0cHV0KSB7CiAgICAgIGNvbnN0IGZuID0gZm5zWysrbWlkZGxld2FyZUluZGV4XTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBpZiAoZXJyb3IpIHsKICAgICAgICBjYWxsYmFjayhlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgICAgICBpZiAob3V0cHV0W2luZGV4Ml0gPT09IG51bGwgfHwgb3V0cHV0W2luZGV4Ml0gPT09IHZvaWQgMCkgewogICAgICAgICAgb3V0cHV0W2luZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsdWVzID0gb3V0cHV0OwogICAgICBpZiAoZm4pIHsKICAgICAgICB3cmFwMihmbiwgbmV4dDIpKC4uLm91dHB1dCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2sobnVsbCwgLi4ub3V0cHV0KTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiB1c2UobWlkZGVsd2FyZSkgewogICAgaWYgKHR5cGVvZiBtaWRkZWx3YXJlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgIiArIG1pZGRlbHdhcmUKICAgICAgKTsKICAgIH0KICAgIGZucy5wdXNoKG1pZGRlbHdhcmUpOwogICAgcmV0dXJuIHBpcGVsaW5lOwogIH0KfQpmdW5jdGlvbiB3cmFwMihtaWRkbGV3YXJlLCBjYWxsYmFjaykgewogIGxldCBjYWxsZWQ7CiAgcmV0dXJuIHdyYXBwZWQ7CiAgZnVuY3Rpb24gd3JhcHBlZCguLi5wYXJhbWV0ZXJzKSB7CiAgICBjb25zdCBmbkV4cGVjdHNDYWxsYmFjayA9IG1pZGRsZXdhcmUubGVuZ3RoID4gcGFyYW1ldGVycy5sZW5ndGg7CiAgICBsZXQgcmVzdWx0OwogICAgaWYgKGZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIHBhcmFtZXRlcnMucHVzaChkb25lKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJlc3VsdCA9IG1pZGRsZXdhcmUuYXBwbHkodGhpcywgcGFyYW1ldGVycyk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zdCBleGNlcHRpb24gPSAoCiAgICAgICAgLyoqIEB0eXBlIHtFcnJvcn0gKi8KICAgICAgICBlcnJvcgogICAgICApOwogICAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2sgJiYgY2FsbGVkKSB7CiAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBkb25lKGV4Y2VwdGlvbik7CiAgICB9CiAgICBpZiAoIWZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnRoZW4gJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSk7CiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICBkb25lKHJlc3VsdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhlbihyZXN1bHQpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGRvbmUoZXJyb3IsIC4uLm91dHB1dCkgewogICAgaWYgKCFjYWxsZWQpIHsKICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgY2FsbGJhY2soZXJyb3IsIC4uLm91dHB1dCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRoZW4odmFsdWUyKSB7CiAgICBkb25lKG51bGwsIHZhbHVlMik7CiAgfQp9CnZhciBpbml0X2xpYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcwp2YXIgaW5pdF90cm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlQb3NpdGlvbih2YWx1ZTIpIHsKICBpZiAoIXZhbHVlMiB8fCB0eXBlb2YgdmFsdWUyICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuICIiOwogIH0KICBpZiAoInBvc2l0aW9uIiBpbiB2YWx1ZTIgfHwgInR5cGUiIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlMi5wb3NpdGlvbik7CiAgfQogIGlmICgic3RhcnQiIGluIHZhbHVlMiB8fCAiZW5kIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZTIpOwogIH0KICBpZiAoImxpbmUiIGluIHZhbHVlMiB8fCAiY29sdW1uIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb2ludCh2YWx1ZTIpOwogIH0KICByZXR1cm4gIiI7Cn0KZnVuY3Rpb24gcG9pbnQocG9pbnQ0KSB7CiAgcmV0dXJuIGluZGV4KHBvaW50NCAmJiBwb2ludDQubGluZSkgKyAiOiIgKyBpbmRleChwb2ludDQgJiYgcG9pbnQ0LmNvbHVtbik7Cn0KZnVuY3Rpb24gcG9zaXRpb24ocG9zKSB7CiAgcmV0dXJuIHBvaW50KHBvcyAmJiBwb3Muc3RhcnQpICsgIi0iICsgcG9pbnQocG9zICYmIHBvcy5lbmQpOwp9CmZ1bmN0aW9uIGluZGV4KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgPyB2YWx1ZTIgOiAxOwp9CnZhciBpbml0X2xpYjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3N0cmluZ2lmeV9wb3NpdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzCnZhciBWRmlsZU1lc3NhZ2U7CnZhciBpbml0X2xpYjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZS1tZXNzYWdlQDQuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS1tZXNzYWdlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfc3RyaW5naWZ5X3Bvc2l0aW9uKCk7CiAgICBWRmlsZU1lc3NhZ2UgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG1lc3NhZ2UgZm9yIGByZWFzb25gLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIEluc3RhbmNlIG9mIGBWRmlsZU1lc3NhZ2VgLgogICAgICAgKi8KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKICAgICAgY29uc3RydWN0b3IoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBvcmlnaW4gPSBvcHRpb25zT3JQYXJlbnRPclBsYWNlOwogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgbGV0IHJlYXNvbiA9ICIiOwogICAgICAgIGxldCBvcHRpb25zID0ge307CiAgICAgICAgbGV0IGxlZ2FjeUNhdXNlID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgIGlmICgibGluZSIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiY29sdW1uIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJzdGFydCIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiZW5kIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJ0eXBlIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgYW5jZXN0b3JzOiBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0sCiAgICAgICAgICAgICAgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UucG9zaXRpb24KICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBjYXVzZU9yUmVhc29uID09PSAic3RyaW5nIikgewogICAgICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbjsKICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmNhdXNlICYmIGNhdXNlT3JSZWFzb24pIHsKICAgICAgICAgIGxlZ2FjeUNhdXNlID0gdHJ1ZTsKICAgICAgICAgIHJlYXNvbiA9IGNhdXNlT3JSZWFzb24ubWVzc2FnZTsKICAgICAgICAgIG9wdGlvbnMuY2F1c2UgPSBjYXVzZU9yUmVhc29uOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbnMucnVsZUlkICYmICFvcHRpb25zLnNvdXJjZSAmJiB0eXBlb2Ygb3JpZ2luID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgaW5kZXgyID0gb3JpZ2luLmluZGV4T2YoIjoiKTsKICAgICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICAgIG9wdGlvbnMucnVsZUlkID0gb3JpZ2luOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSBvcmlnaW4uc2xpY2UoMCwgaW5kZXgyKTsKICAgICAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW4uc2xpY2UoaW5kZXgyICsgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucy5wbGFjZSAmJiBvcHRpb25zLmFuY2VzdG9ycyAmJiBvcHRpb25zLmFuY2VzdG9ycykgewogICAgICAgICAgY29uc3QgcGFyZW50ID0gb3B0aW9ucy5hbmNlc3RvcnNbb3B0aW9ucy5hbmNlc3RvcnMubGVuZ3RoIC0gMV07CiAgICAgICAgICBpZiAocGFyZW50KSB7CiAgICAgICAgICAgIG9wdGlvbnMucGxhY2UgPSBwYXJlbnQucG9zaXRpb247CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN0YXJ0ID0gb3B0aW9ucy5wbGFjZSAmJiAic3RhcnQiIGluIG9wdGlvbnMucGxhY2UgPyBvcHRpb25zLnBsYWNlLnN0YXJ0IDogb3B0aW9ucy5wbGFjZTsKICAgICAgICB0aGlzLmFuY2VzdG9ycyA9IG9wdGlvbnMuYW5jZXN0b3JzIHx8IHZvaWQgMDsKICAgICAgICB0aGlzLmNhdXNlID0gb3B0aW9ucy5jYXVzZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydCA/IHN0YXJ0LmNvbHVtbiA6IHZvaWQgMDsKICAgICAgICB0aGlzLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHRoaXMuZmlsZSA9ICIiOwogICAgICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvbjsKICAgICAgICB0aGlzLmxpbmUgPSBzdGFydCA/IHN0YXJ0LmxpbmUgOiB2b2lkIDA7CiAgICAgICAgdGhpcy5uYW1lID0gc3RyaW5naWZ5UG9zaXRpb24ob3B0aW9ucy5wbGFjZSkgfHwgIjE6MSI7CiAgICAgICAgdGhpcy5wbGFjZSA9IG9wdGlvbnMucGxhY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMucmVhc29uID0gdGhpcy5tZXNzYWdlOwogICAgICAgIHRoaXMucnVsZUlkID0gb3B0aW9ucy5ydWxlSWQgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc291cmNlID0gb3B0aW9ucy5zb3VyY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc3RhY2sgPSBsZWdhY3lDYXVzZSAmJiBvcHRpb25zLmNhdXNlICYmIHR5cGVvZiBvcHRpb25zLmNhdXNlLnN0YWNrID09PSAic3RyaW5nIiA/IG9wdGlvbnMuY2F1c2Uuc3RhY2sgOiAiIjsKICAgICAgICB0aGlzLmFjdHVhbCA9IHZvaWQgMDsKICAgICAgICB0aGlzLmV4cGVjdGVkID0gdm9pZCAwOwogICAgICAgIHRoaXMubm90ZSA9IHZvaWQgMDsKICAgICAgICB0aGlzLnVybCA9IHZvaWQgMDsKICAgICAgfQogICAgfTsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmlsZSA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5uYW1lID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJlYXNvbiA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5tZXNzYWdlID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnN0YWNrID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNvbHVtbiA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUubGluZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5jYXVzZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmF0YWwgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnBsYWNlID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5ydWxlSWQgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnNvdXJjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMKdmFyIGluaXRfdmZpbGVfbWVzc2FnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcwpmdW5jdGlvbiBiYXNlbmFtZShwYXRoMiwgZXh0bmFtZTIpIHsKICBpZiAoZXh0bmFtZTIgIT09IHZvaWQgMCAmJiB0eXBlb2YgZXh0bmFtZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgfQogIGFzc2VydFBhdGgocGF0aDIpOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IGVuZDMgPSAtMTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCBzZWVuTm9uU2xhc2g7CiAgaWYgKGV4dG5hbWUyID09PSB2b2lkIDAgfHwgZXh0bmFtZTIubGVuZ3RoID09PSAwIHx8IGV4dG5hbWUyLmxlbmd0aCA+IHBhdGgyLmxlbmd0aCkgewogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICAgIGlmIChzZWVuTm9uU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbmQzIDwgMCkgewogICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWU7CiAgICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmQzIDwgMCA/ICIiIDogcGF0aDIuc2xpY2Uoc3RhcnQsIGVuZDMpOwogIH0KICBpZiAoZXh0bmFtZTIgPT09IHBhdGgyKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgbGV0IGV4dG5hbWVJbmRleCA9IGV4dG5hbWUyLmxlbmd0aCAtIDE7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHNlZW5Ob25TbGFzaCkgewogICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPCAwKSB7CiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZTsKICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaW5kZXgyICsgMTsKICAgICAgfQogICAgICBpZiAoZXh0bmFtZUluZGV4ID4gLTEpIHsKICAgICAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gZXh0bmFtZTIuY29kZVBvaW50QXQoZXh0bmFtZUluZGV4LS0pKSB7CiAgICAgICAgICBpZiAoZXh0bmFtZUluZGV4IDwgMCkgewogICAgICAgICAgICBlbmQzID0gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHRuYW1lSW5kZXggPSAtMTsKICAgICAgICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpZiAoc3RhcnQgPT09IGVuZDMpIHsKICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogIH0gZWxzZSBpZiAoZW5kMyA8IDApIHsKICAgIGVuZDMgPSBwYXRoMi5sZW5ndGg7CiAgfQogIHJldHVybiBwYXRoMi5zbGljZShzdGFydCwgZW5kMyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoMikgewogIGFzc2VydFBhdGgocGF0aDIpOwogIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiAiLiI7CiAgfQogIGxldCBlbmQzID0gLTE7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgdW5tYXRjaGVkU2xhc2g7CiAgd2hpbGUgKC0taW5kZXgyKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHVubWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgZW5kMyA9IGluZGV4MjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIGlmICghdW5tYXRjaGVkU2xhc2gpIHsKICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZW5kMyA8IDAgPyBwYXRoMi5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgPyAiLyIgOiAiLiIgOiBlbmQzID09PSAxICYmIHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NyA/ICIvLyIgOiBwYXRoMi5zbGljZSgwLCBlbmQzKTsKfQpmdW5jdGlvbiBleHRuYW1lKHBhdGgyKSB7CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgZW5kMyA9IC0xOwogIGxldCBzdGFydFBhcnQgPSAwOwogIGxldCBzdGFydERvdCA9IC0xOwogIGxldCBwcmVEb3RTdGF0ZSA9IDA7CiAgbGV0IHVubWF0Y2hlZFNsYXNoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgY29kZTQgPSBwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpOwogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHsKICAgICAgICBzdGFydFBhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGVuZDMgPCAwKSB7CiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIGlmIChzdGFydERvdCA8IDApIHsKICAgICAgICBzdGFydERvdCA9IGluZGV4MjsKICAgICAgfSBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgewogICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdGFydERvdCA+IC0xKSB7CiAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICB9CiAgfQogIGlmIChzdGFydERvdCA8IDAgfHwgZW5kMyA8IDAgfHwgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QuCiAgcHJlRG90U3RhdGUgPT09IDAgfHwgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgYC4uYC4KICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kMyAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgIHJldHVybiAiIjsKICB9CiAgcmV0dXJuIHBhdGgyLnNsaWNlKHN0YXJ0RG90LCBlbmQzKTsKfQpmdW5jdGlvbiBqb2luKC4uLnNlZ21lbnRzKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBqb2luZWQ7CiAgd2hpbGUgKCsraW5kZXgyIDwgc2VnbWVudHMubGVuZ3RoKSB7CiAgICBhc3NlcnRQYXRoKHNlZ21lbnRzW2luZGV4Ml0pOwogICAgaWYgKHNlZ21lbnRzW2luZGV4Ml0pIHsKICAgICAgam9pbmVkID0gam9pbmVkID09PSB2b2lkIDAgPyBzZWdtZW50c1tpbmRleDJdIDogam9pbmVkICsgIi8iICsgc2VnbWVudHNbaW5kZXgyXTsKICAgIH0KICB9CiAgcmV0dXJuIGpvaW5lZCA9PT0gdm9pZCAwID8gIi4iIDogbm9ybWFsaXplMihqb2luZWQpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZTIocGF0aDIpIHsKICBhc3NlcnRQYXRoKHBhdGgyKTsKICBjb25zdCBhYnNvbHV0ZSA9IHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NzsKICBsZXQgdmFsdWUyID0gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCAhYWJzb2x1dGUpOwogIGlmICh2YWx1ZTIubGVuZ3RoID09PSAwICYmICFhYnNvbHV0ZSkgewogICAgdmFsdWUyID0gIi4iOwogIH0KICBpZiAodmFsdWUyLmxlbmd0aCA+IDAgJiYgcGF0aDIuY29kZVBvaW50QXQocGF0aDIubGVuZ3RoIC0gMSkgPT09IDQ3KSB7CiAgICB2YWx1ZTIgKz0gIi8iOwogIH0KICByZXR1cm4gYWJzb2x1dGUgPyAiLyIgKyB2YWx1ZTIgOiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCBhbGxvd0Fib3ZlUm9vdCkgewogIGxldCByZXN1bHQgPSAiIjsKICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogIGxldCBsYXN0U2xhc2ggPSAtMTsKICBsZXQgZG90cyA9IDA7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjb2RlNDsKICBsZXQgbGFzdFNsYXNoSW5kZXg7CiAgd2hpbGUgKCsraW5kZXgyIDw9IHBhdGgyLmxlbmd0aCkgewogICAgaWYgKGluZGV4MiA8IHBhdGgyLmxlbmd0aCkgewogICAgICBjb2RlNCA9IHBhdGgyLmNvZGVQb2ludEF0KGluZGV4Mik7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBicmVhazsKICAgIH0gZWxzZSB7CiAgICAgIGNvZGU0ID0gNDc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGluZGV4MiAtIDEgfHwgZG90cyA9PT0gMSkgewogICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaW5kZXgyIC0gMSAmJiBkb3RzID09PSAyKSB7CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDQ2IHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMikgIT09IDQ2KSB7CiAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgbGFzdFNsYXNoSW5kZXggPSByZXN1bHQubGFzdEluZGV4T2YoIi8iKTsKICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSByZXN1bHQubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA8IDApIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXN1bHQubGVuZ3RoIC0gMSAtIHJlc3VsdC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDsKICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXgyOwogICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyByZXN1bHQgKyAiLy4uIiA6ICIuLiI7CiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmVzdWx0ICs9ICIvIiArIHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfQogICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXgyIC0gbGFzdFNsYXNoIC0gMTsKICAgICAgfQogICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgIGRvdHMgPSAwOwogICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gNDYgJiYgZG90cyA+IC0xKSB7CiAgICAgIGRvdHMrKzsKICAgIH0gZWxzZSB7CiAgICAgIGRvdHMgPSAtMTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIgKyBKU09OLnN0cmluZ2lmeShwYXRoMikKICAgICk7CiAgfQp9CnZhciBtaW5wYXRoOwp2YXIgaW5pdF9taW5wYXRoX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wYXRoID0geyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgc2VwOiAiLyIgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucHJvYy5icm93c2VyLmpzCmZ1bmN0aW9uIGN3ZCgpIHsKICByZXR1cm4gIi8iOwp9CnZhciBtaW5wcm9jOwp2YXIgaW5pdF9taW5wcm9jX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnByb2MuYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wcm9jID0geyBjd2QgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLnNoYXJlZC5qcwpmdW5jdGlvbiBpc1VybChmaWxlVXJsT3JQYXRoKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICBmaWxlVXJsT3JQYXRoICE9PSBudWxsICYmIHR5cGVvZiBmaWxlVXJsT3JQYXRoID09PSAib2JqZWN0IiAmJiAiaHJlZiIgaW4gZmlsZVVybE9yUGF0aCAmJiBmaWxlVXJsT3JQYXRoLmhyZWYgJiYgInByb3RvY29sIiBpbiBmaWxlVXJsT3JQYXRoICYmIGZpbGVVcmxPclBhdGgucHJvdG9jb2wgJiYgLy8gQHRzLWV4cGVjdC1lcnJvcjogaW5kZXhpbmcgaXMgZmluZS4KICAgIGZpbGVVcmxPclBhdGguYXV0aCA9PT0gdm9pZCAwCiAgKTsKfQp2YXIgaW5pdF9taW51cmxfc2hhcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMKZnVuY3Rpb24gdXJsVG9QYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIpIHsKICAgIHBhdGgyID0gbmV3IFVSTChwYXRoMik7CiAgfSBlbHNlIGlmICghaXNVcmwocGF0aDIpKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICdUaGUgInBhdGgiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyArIHBhdGgyICsgImAiCiAgICApOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9BUkdfVFlQRSI7CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgaWYgKHBhdGgyLnByb3RvY29sICE9PSAiZmlsZToiKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZSIpOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIjsKICAgIHRocm93IGVycm9yOwogIH0KICByZXR1cm4gZ2V0UGF0aEZyb21VUkxQb3NpeChwYXRoMik7Cn0KZnVuY3Rpb24gZ2V0UGF0aEZyb21VUkxQb3NpeCh1cmwpIHsKICBpZiAodXJsLmhvc3RuYW1lICE9PSAiIikgewogICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAnRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uIGRhcndpbicKICAgICk7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QiOwogICAgdGhyb3cgZXJyb3I7CiAgfQogIGNvbnN0IHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwYXRobmFtZS5sZW5ndGgpIHsKICAgIGlmIChwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIpID09PSAzNyAmJiBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAxKSA9PT0gNTApIHsKICAgICAgY29uc3QgdGhpcmQgPSBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAyKTsKICAgICAgaWYgKHRoaXJkID09PSA3MCB8fCB0aGlyZCA9PT0gMTAyKSB7CiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAgICAgIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIKICAgICAgICApOwogICAgICAgIGVycm9yLmNvZGUgPSAiRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCI7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSk7Cn0KdmFyIGluaXRfbWludXJsX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5icm93c2VyLmpzIigpIHsKICAgIGluaXRfbWludXJsX3NoYXJlZCgpOwogICAgaW5pdF9taW51cmxfc2hhcmVkKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkgewogIGlmIChwYXJ0ICYmIHBhcnQuaW5jbHVkZXMobWlucGF0aC5zZXApKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgIiArIG1pbnBhdGguc2VwICsgImAiCiAgICApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7CiAgaWYgKCFwYXJ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoImAiICsgbmFtZSArICJgIGNhbm5vdCBiZSBlbXB0eSIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRQYXRoMihwYXRoMiwgbmFtZSkgewogIGlmICghcGF0aDIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiU2V0dGluZyBgIiArIG5hbWUgKyAiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbyIpOwogIH0KfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXkzKHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIG9yZGVyLCBWRmlsZTsKdmFyIGluaXRfbGliNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF92ZmlsZV9tZXNzYWdlKCk7CiAgICBpbml0X21pbnBhdGhfYnJvd3NlcigpOwogICAgaW5pdF9taW5wcm9jX2Jyb3dzZXIoKTsKICAgIGluaXRfbWludXJsX2Jyb3dzZXIoKTsKICAgIG9yZGVyID0gLyoqIEB0eXBlIHtjb25zdH0gKi8KICAgIFsKICAgICAgImhpc3RvcnkiLAogICAgICAicGF0aCIsCiAgICAgICJiYXNlbmFtZSIsCiAgICAgICJzdGVtIiwKICAgICAgImV4dG5hbWUiLAogICAgICAiZGlybmFtZSIKICAgIF07CiAgICBWRmlsZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGZpbGUuCiAgICAgICAqCiAgICAgICAqIGBvcHRpb25zYCBpcyB0cmVhdGVkIGFzOgogICAgICAgKgogICAgICAgKiAqICAgYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgIOKAlCBge3ZhbHVlOiBvcHRpb25zfWAKICAgICAgICogKiAgIGBVUkxgIOKAlCBge3BhdGg6IG9wdGlvbnN9YAogICAgICAgKiAqICAgYFZGaWxlYCDigJQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGUKICAgICAgICogKiAgIGBvYmplY3RgIOKAlCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZQogICAgICAgKgogICAgICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG8KICAgICAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCwKICAgICAgICogYGRpcm5hbWVgLgogICAgICAgKgogICAgICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLAogICAgICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV0KICAgICAgICogICBGaWxlIHZhbHVlLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIE5ldyBpbnN0YW5jZS4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMikgewogICAgICAgIGxldCBvcHRpb25zOwogICAgICAgIGlmICghdmFsdWUyKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfSBlbHNlIGlmIChpc1VybCh2YWx1ZTIpKSB7CiAgICAgICAgICBvcHRpb25zID0geyBwYXRoOiB2YWx1ZTIgfTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTModmFsdWUyKSkgewogICAgICAgICAgb3B0aW9ucyA9IHsgdmFsdWU6IHZhbHVlMiB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICB0aGlzLmN3ZCA9ICJjd2QiIGluIG9wdGlvbnMgPyAiIiA6IG1pbnByb2MuY3dkKCk7CiAgICAgICAgdGhpcy5kYXRhID0ge307CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdOwogICAgICAgIHRoaXMudmFsdWU7CiAgICAgICAgdGhpcy5tYXA7CiAgICAgICAgdGhpcy5yZXN1bHQ7CiAgICAgICAgdGhpcy5zdG9yZWQ7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IG9yZGVyLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgZmllbGQyID0gb3JkZXJbaW5kZXgyXTsKICAgICAgICAgIGlmIChmaWVsZDIgaW4gb3B0aW9ucyAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IHZvaWQgMCAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZDJdID0gZmllbGQyID09PSAiaGlzdG9yeSIgPyBbLi4ub3B0aW9uc1tmaWVsZDJdXSA6IG9wdGlvbnNbZmllbGQyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGZpZWxkOwogICAgICAgIGZvciAoZmllbGQgaW4gb3B0aW9ucykgewogICAgICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhmaWVsZCkpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZF0gPSBvcHRpb25zW2ZpZWxkXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoZXhhbXBsZTogYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqLwogICAgICBnZXQgYmFzZW5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VuYW1lCiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBiYXNlbmFtZShiYXNlbmFtZTIpIHsKICAgICAgICBhc3NlcnROb25FbXB0eShiYXNlbmFtZTIsICJiYXNlbmFtZSIpOwogICAgICAgIGFzc2VydFBhcnQoYmFzZW5hbWUyLCAiYmFzZW5hbWUiKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBiYXNlbmFtZTIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICovCiAgICAgIGdldCBkaXJuYW1lKCkgewogICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAic3RyaW5nIiA/IG1pbnBhdGguZGlybmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBkaXJuYW1lCiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGRpcm5hbWUoZGlybmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXRoMih0aGlzLmJhc2VuYW1lLCAiZGlybmFtZSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbihkaXJuYW1lMiB8fCAiIiwgdGhpcy5iYXNlbmFtZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgZXh0bmFtZSAoaW5jbHVkaW5nIGRvdCkgKGV4YW1wbGU6IGAnLmpzJ2ApLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIEV4dG5hbWUuCiAgICAgICAqLwogICAgICBnZXQgZXh0bmFtZSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmV4dG5hbWUodGhpcy5wYXRoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBleHRuYW1lCiAgICAgICAqICAgRXh0bmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGV4dG5hbWUoZXh0bmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXJ0KGV4dG5hbWUyLCAiZXh0bmFtZSIpOwogICAgICAgIGFzc2VydFBhdGgyKHRoaXMuZGlybmFtZSwgImV4dG5hbWUiKTsKICAgICAgICBpZiAoZXh0bmFtZTIpIHsKICAgICAgICAgIGlmIChleHRuYW1lMi5jb2RlUG9pbnRBdCgwKSAhPT0gNDYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgbXVzdCBzdGFydCB3aXRoIGAuYCIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4dG5hbWUyLmluY2x1ZGVzKCIuIiwgMSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgY2Fubm90IGNvbnRhaW4gbXVsdGlwbGUgZG90cyIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZTIgfHwgIiIpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICAgICAqICAgUGF0aC4KICAgICAgICovCiAgICAgIGdldCBwYXRoKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZC4KICAgICAgICogWW91IGNhbiBzZXQgYSBmaWxlIFVSTCAoYSBgVVJMYCBvYmplY3Qgd2l0aCBhIGBmaWxlOmAgcHJvdG9jb2wpIHdoaWNoIHdpbGwKICAgICAgICogYmUgdHVybmVkIGludG8gYSBwYXRoIHdpdGggYHVybC5maWxlVVJMVG9QYXRoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtVUkwgfCBzdHJpbmd9IHBhdGgKICAgICAgICogICBQYXRoLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgcGF0aChwYXRoMikgewogICAgICAgIGlmIChpc1VybChwYXRoMikpIHsKICAgICAgICAgIHBhdGgyID0gdXJsVG9QYXRoKHBhdGgyKTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0Tm9uRW1wdHkocGF0aDIsICJwYXRoIik7CiAgICAgICAgaWYgKHRoaXMucGF0aCAhPT0gcGF0aDIpIHsKICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBTdGVtLgogICAgICAgKi8KICAgICAgZ2V0IHN0ZW0oKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgsIHRoaXMuZXh0bmFtZSkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RlbQogICAgICAgKiAgIFN0ZW0uCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBzdGVtKHN0ZW0pIHsKICAgICAgICBhc3NlcnROb25FbXB0eShzdGVtLCAic3RlbSIpOwogICAgICAgIGFzc2VydFBhcnQoc3RlbSwgInN0ZW0iKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBzdGVtICsgKHRoaXMuZXh0bmFtZSB8fCAiIikpOwogICAgICB9CiAgICAgIC8vIE5vcm1hbCBwcm90b3R5cGFsIG1ldGhvZHMuCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBmYXRhbCBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdHJ1ZWAgKGVycm9yOyBmaWxlIG5vdCB1c2FibGUpCiAgICAgICAqIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvbgogICAgICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi4KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBNZXNzYWdlT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICogICBOZXZlci4KICAgICAgICogQHRocm93cyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBmYWlsKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbik7CiAgICAgICAgbWVzc2FnZTIuZmF0YWwgPSB0cnVlOwogICAgICAgIHRocm93IG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYW4gaW5mbyBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdW5kZWZpbmVkYCAoaW5mbzsgY2hhbmdlCiAgICAgICAqIGxpa2VseSBub3QgbmVlZGVkKSBhbmQgdGhlIGBmaWxlYCBmaWVsZCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLgogICAgICAgKiBUaGUgbWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgYG1lc3NhZ2VzYCBmaWVsZCBvbiBgZmlsZWAuCiAgICAgICAqCiAgICAgICAqID4g8J+qpiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXQogICAgICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZToKICAgICAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS4KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICogICBNZXNzYWdlLgogICAgICAgKi8KICAgICAgaW5mbyhjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHsKICAgICAgICBjb25zdCBtZXNzYWdlMiA9IHRoaXMubWVzc2FnZShjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pOwogICAgICAgIG1lc3NhZ2UyLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHJldHVybiBtZXNzYWdlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLgogICAgICAgKgogICAgICAgKiBUaGUgYGZhdGFsYCBmaWVsZCBvZiB0aGUgbWVzc2FnZSBpcyBzZXQgdG8gYGZhbHNlYCAod2FybmluZzsgY2hhbmdlIG1heSBiZQogICAgICAgKiBuZWVkZWQpIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgTWVzc2FnZU9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBtZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gbmV3IFZGaWxlTWVzc2FnZSgKICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBvdmVybG9hZHMgYXJlIGZpbmUuCiAgICAgICAgICBjYXVzZU9yUmVhc29uLAogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwKICAgICAgICAgIG9yaWdpbgogICAgICAgICk7CiAgICAgICAgaWYgKHRoaXMucGF0aCkgewogICAgICAgICAgbWVzc2FnZTIubmFtZSA9IHRoaXMucGF0aCArICI6IiArIG1lc3NhZ2UyLm5hbWU7CiAgICAgICAgICBtZXNzYWdlMi5maWxlID0gdGhpcy5wYXRoOwogICAgICAgIH0KICAgICAgICBtZXNzYWdlMi5mYXRhbCA9IGZhbHNlOwogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlMik7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXJpYWxpemUgdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IHdoaWNoIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkIGRlcGVuZHMgb24gdGhlIGVuZ2luZS4KICAgICAgICogPiBGb3IgaW5mbyBvbiBOb2RlLmpzLCBzZWU6CiAgICAgICAqID4gPGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3doYXR3Zy1zdXBwb3J0ZWQtZW5jb2RpbmdzPi4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5jb2Rpbmc9J3V0ZjgnXQogICAgICAgKiAgIENoYXJhY3RlciBlbmNvZGluZyB0byB1bmRlcnN0YW5kIGB2YWx1ZWAgYXMgd2hlbiBpdOKAmXMgYSBgVWludDhBcnJheWAKICAgICAgICogICAoZGVmYXVsdDogYCd1dGYtOCdgKS4KICAgICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAgICogICBTZXJpYWxpemVkIGZpbGUuCiAgICAgICAqLwogICAgICB0b1N0cmluZyhlbmNvZGluZykgewogICAgICAgIGlmICh0aGlzLnZhbHVlID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRlY29kZXIyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nIHx8IHZvaWQgMCk7CiAgICAgICAgcmV0dXJuIGRlY29kZXIyLmRlY29kZSh0aGlzLnZhbHVlKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcwp2YXIgaW5pdF92ZmlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9jYWxsYWJsZS1pbnN0YW5jZS5qcwp2YXIgQ2FsbGFibGVJbnN0YW5jZTsKdmFyIGluaXRfY2FsbGFibGVfaW5zdGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvY2FsbGFibGUtaW5zdGFuY2UuanMiKCkgewogICAgQ2FsbGFibGVJbnN0YW5jZSA9IC8qKgogICAgICogQHR5cGUge25ldyA8UGFyYW1ldGVycyBleHRlbmRzIEFycmF5PHVua25vd24+LCBSZXN1bHQ+KHByb3BlcnR5OiBzdHJpbmcgfCBzeW1ib2wpID0+ICguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzKSA9PiBSZXN1bHR9CiAgICAgKi8KICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgIC8qKgogICAgICogQHRoaXMge0Z1bmN0aW9ufQogICAgICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHByb3BlcnR5CiAgICAgKiBAcmV0dXJucyB7KC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3dufQogICAgICovCiAgICAoZnVuY3Rpb24ocHJvcGVydHkpIHsKICAgICAgY29uc3Qgc2VsZjIgPSB0aGlzOwogICAgICBjb25zdCBjb25zdHIgPSBzZWxmMi5jb25zdHJ1Y3RvcjsKICAgICAgY29uc3QgcHJvdG8gPSAoCiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBGdW5jdGlvbj59ICovCiAgICAgICAgLy8gUHJvdG90eXBlcyBkbyBleGlzdC4KICAgICAgICAvLyB0eXBlLWNvdmVyYWdlOmlnbm9yZS1uZXh0LWxpbmUKICAgICAgICBjb25zdHIucHJvdG90eXBlCiAgICAgICk7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHByb3RvW3Byb3BlcnR5XTsKICAgICAgY29uc3QgYXBwbHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmFsdWUyLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXBwbHksIHByb3RvKTsKICAgICAgcmV0dXJuIGFwcGx5OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvaW5kZXguanMKZnVuY3Rpb24gYXNzZXJ0UGFyc2VyKG5hbWUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgdmFsdWUyICE9PSAiZnVuY3Rpb24iKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYCIgKyBuYW1lICsgImAgd2l0aG91dCBgcGFyc2VyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRDb21waWxlcihuYW1lLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGAiICsgbmFtZSArICJgIHdpdGhvdXQgYGNvbXBpbGVyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVbmZyb3plbihuYW1lLCBmcm96ZW4pIHsKICBpZiAoZnJvemVuKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3QgY2FsbCBgIiArIG5hbWUgKyAiYCBvbiBhIGZyb3plbiBwcm9jZXNzb3IuXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLiIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydE5vZGUobm9kZTIpIHsKICBpZiAoIWlzUGxhaW5PYmplY3Qobm9kZTIpIHx8IHR5cGVvZiBub2RlMi50eXBlICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgbm9kZSwgZ290IGAiICsgbm9kZTIgKyAiYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnREb25lKG5hbWUsIGFzeW5jTmFtZSwgY29tcGxldGUpIHsKICBpZiAoIWNvbXBsZXRlKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGAiICsgYXN5bmNOYW1lICsgImAgaW5zdGVhZCIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIHZmaWxlKHZhbHVlMikgewogIHJldHVybiBsb29rc0xpa2VBVkZpbGUodmFsdWUyKSA/IHZhbHVlMiA6IG5ldyBWRmlsZSh2YWx1ZTIpOwp9CmZ1bmN0aW9uIGxvb2tzTGlrZUFWRmlsZSh2YWx1ZTIpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiAibWVzc2FnZSIgaW4gdmFsdWUyICYmICJtZXNzYWdlcyIgaW4gdmFsdWUyCiAgKTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBVmFsdWUodmFsdWUyKSB7CiAgcmV0dXJuIHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTQodmFsdWUyKTsKfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXk0KHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIGltcG9ydF9leHRlbmQsIG93biwgUHJvY2Vzc29yLCB1bmlmaWVkOwp2YXIgaW5pdF9saWI1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfYmFpbCgpOwogICAgaW1wb3J0X2V4dGVuZCA9IF9fdG9FU00ocmVxdWlyZV9leHRlbmQoKSwgMSk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfaXNfcGxhaW5fb2JqKCk7CiAgICBpbml0X3Ryb3VnaCgpOwogICAgaW5pdF92ZmlsZSgpOwogICAgaW5pdF9jYWxsYWJsZV9pbnN0YW5jZSgpOwogICAgb3duID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBQcm9jZXNzb3IgPSBjbGFzcyBfUHJvY2Vzc29yIGV4dGVuZHMgQ2FsbGFibGVJbnN0YW5jZSB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigiY29weSIpOwogICAgICAgIHRoaXMuQ29tcGlsZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5QYXJzZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5hdHRhY2hlcnMgPSBbXTsKICAgICAgICB0aGlzLmNvbXBpbGVyID0gdm9pZCAwOwogICAgICAgIHRoaXMuZnJlZXplSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmZyb3plbiA9IHZvaWQgMDsKICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IHt9OwogICAgICAgIHRoaXMucGFyc2VyID0gdm9pZCAwOwogICAgICAgIHRoaXMudHJhbnNmb3JtZXJzID0gdHJvdWdoKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvcHkgYSBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgbWV0aG9kIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBOZXcgKnVuZnJvemVuKiBwcm9jZXNzb3IgKHtAbGlua2NvZGUgUHJvY2Vzc29yfSkgdGhhdCBpcwogICAgICAgKiAgIGNvbmZpZ3VyZWQgdG8gd29yayB0aGUgc2FtZSBhcyBpdHMgYW5jZXN0b3IuCiAgICAgICAqICAgV2hlbiB0aGUgZGVzY2VuZGFudCBwcm9jZXNzb3IgaXMgY29uZmlndXJlZCBpbiB0aGUgZnV0dXJlIGl0IGRvZXMgbm90CiAgICAgICAqICAgYWZmZWN0IHRoZSBhbmNlc3RyYWwgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgY29weSgpIHsKICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICgKICAgICAgICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59ICovCiAgICAgICAgICBuZXcgX1Byb2Nlc3NvcigpCiAgICAgICAgKTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBhdHRhY2hlciA9IHRoaXMuYXR0YWNoZXJzW2luZGV4Ml07CiAgICAgICAgICBkZXN0aW5hdGlvbi51c2UoLi4uYXR0YWNoZXIpOwogICAgICAgIH0KICAgICAgICBkZXN0aW5hdGlvbi5kYXRhKCgwLCBpbXBvcnRfZXh0ZW5kLmRlZmF1bHQpKHRydWUsIHt9LCB0aGlzLm5hbWVzcGFjZSkpOwogICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3Igd2l0aCBpbmZvIGF2YWlsYWJsZSB0byBhbGwgcGx1Z2lucy4KICAgICAgICogSW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGFuIG9iamVjdC4KICAgICAgICoKICAgICAgICogVHlwaWNhbGx5LCBvcHRpb25zIGNhbiBiZSBnaXZlbiB0byBhIHNwZWNpZmljIHBsdWdpbiwgYnV0IHNvbWV0aW1lcyBpdAogICAgICAgKiBtYWtlcyBzZW5zZSB0byBoYXZlIGluZm9ybWF0aW9uIHNoYXJlZCB3aXRoIHNldmVyYWwgcGx1Z2lucy4KICAgICAgICogRm9yIGV4YW1wbGUsIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzIHRoYXQgYXJlIHNlbGYtY2xvc2luZywgd2hpY2ggaXMKICAgICAgICogbmVlZGVkIGR1cmluZyBhbGwgcGhhc2VzLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBzZXR0aW5nIGluZm9ybWF0aW9uIGNhbm5vdCBvY2N1ciBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiB0byByZWdpc3RlciBjdXN0b20gZGF0YSBpbiBUeXBlU2NyaXB0LCBhdWdtZW50IHRoZQogICAgICAgKiA+IHtAbGlua2NvZGUgRGF0YX0gaW50ZXJmYWNlLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBzaG93IGhvdyB0byBnZXQgYW5kIHNldCBpbmZvOgogICAgICAgKgogICAgICAgKiAgIGBgYGpzCiAgICAgICAqICAgaW1wb3J0IHt1bmlmaWVkfSBmcm9tICd1bmlmaWVkJwogICAgICAgKgogICAgICAgKiAgIGNvbnN0IHByb2Nlc3NvciA9IHVuaWZpZWQoKS5kYXRhKCdhbHBoYScsICdicmF2bycpCiAgICAgICAqCiAgICAgICAqICAgcHJvY2Vzc29yLmRhdGEoJ2FscGhhJykgLy8gPT4gJ2JyYXZvJwogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKCkgLy8gPT4ge2FscGhhOiAnYnJhdm8nfQogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKHtjaGFybGllOiAnZGVsdGEnfSkKICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSgpIC8vID0+IHtjaGFybGllOiAnZGVsdGEnfQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge2tleW9mIERhdGF9IEtleQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHJldHVybnMge0RhdGF9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0RhdGF9IGRhdGFzZXQKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcmV0dXJucyB7RGF0YVtLZXldfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcGFyYW0ge0RhdGFbS2V5XX0gdmFsdWUKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0RhdGEgfCBLZXl9IFtrZXldCiAgICAgICAqICAgS2V5IHRvIGdldCBvciBzZXQsIG9yIGVudGlyZSBkYXRhc2V0IHRvIHNldCwgb3Igbm90aGluZyB0byBnZXQgdGhlCiAgICAgICAqICAgZW50aXJlIGRhdGFzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtEYXRhW0tleV19IFt2YWx1ZV0KICAgICAgICogICBWYWx1ZSB0byBzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge3Vua25vd259CiAgICAgICAqICAgVGhlIGN1cnJlbnQgcHJvY2Vzc29yIHdoZW4gc2V0dGluZywgdGhlIHZhbHVlIGF0IGBrZXlgIHdoZW4gZ2V0dGluZywgb3IKICAgICAgICogICB0aGUgZW50aXJlIGRhdGFzZXQgd2hlbiBnZXR0aW5nIHdpdGhvdXQga2V5LgogICAgICAgKi8KICAgICAgZGF0YShrZXkyLCB2YWx1ZTIpIHsKICAgICAgICBpZiAodHlwZW9mIGtleTIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2Vba2V5Ml0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG93bi5jYWxsKHRoaXMubmFtZXNwYWNlLCBrZXkyKSAmJiB0aGlzLm5hbWVzcGFjZVtrZXkyXSB8fCB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIGlmIChrZXkyKSB7CiAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgIHRoaXMubmFtZXNwYWNlID0ga2V5MjsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZyZWV6ZSBhIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogRnJvemVuIHByb2Nlc3NvcnMgYXJlIG1lYW50IHRvIGJlIGV4dGVuZGVkIGFuZCBub3QgdG8gYmUgY29uZmlndXJlZAogICAgICAgKiBkaXJlY3RseS4KICAgICAgICoKICAgICAgICogV2hlbiBhIHByb2Nlc3NvciBpcyBmcm96ZW4gaXQgY2Fubm90IGJlIHVuZnJvemVuLgogICAgICAgKiBOZXcgcHJvY2Vzc29ycyB3b3JraW5nIHRoZSBzYW1lIHdheSBjYW4gYmUgY3JlYXRlZCBieSBjYWxsaW5nIHRoZQogICAgICAgKiBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEl04oCZcyBwb3NzaWJsZSB0byBmcmVlemUgcHJvY2Vzc29ycyBleHBsaWNpdGx5IGJ5IGNhbGxpbmcgYC5mcmVlemUoKWAuCiAgICAgICAqIFByb2Nlc3NvcnMgZnJlZXplIGF1dG9tYXRpY2FsbHkgd2hlbiBgLnBhcnNlKClgLCBgLnJ1bigpYCwgYC5ydW5TeW5jKClgLAogICAgICAgKiBgLnN0cmluZ2lmeSgpYCwgYC5wcm9jZXNzKClgLCBvciBgLnByb2Nlc3NTeW5jKClgIGFyZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBUaGUgY3VycmVudCBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBmcmVlemUoKSB7CiAgICAgICAgaWYgKHRoaXMuZnJvemVuKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc2VsZjIgPSAoCiAgICAgICAgICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8KICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgIHRoaXMKICAgICAgICApOwogICAgICAgIHdoaWxlICgrK3RoaXMuZnJlZXplSW5kZXggPCB0aGlzLmF0dGFjaGVycy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IFthdHRhY2hlciwgLi4ub3B0aW9uc10gPSB0aGlzLmF0dGFjaGVyc1t0aGlzLmZyZWV6ZUluZGV4XTsKICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSBmYWxzZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSB0cnVlKSB7CiAgICAgICAgICAgIG9wdGlvbnNbMF0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGF0dGFjaGVyLmNhbGwoc2VsZjIsIC4uLm9wdGlvbnMpOwogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVycy51c2UodHJhbnNmb3JtZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmZyb3plbiA9IHRydWU7CiAgICAgICAgdGhpcy5mcmVlemVJbmRleCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICAvKioKICAgICAgICogUGFyc2UgdGV4dCB0byBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcGFyc2VgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBwZXJmb3JtcyB0aGUgcGFyc2UgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlIG9yIG90aGVyCiAgICAgICAqID4gcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIGZpbGUgdG8gcGFyc2UgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWA7IGFueSB2YWx1ZQogICAgICAgKiAgIGFjY2VwdGVkIGFzIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1BhcnNlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBQYXJzZVRyZWV9CiAgICAgICAqICAgU3ludGF4IHRyZWUgcmVwcmVzZW50aW5nIGBmaWxlYC4KICAgICAgICovCiAgICAgIHBhcnNlKGZpbGUpIHsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgY29uc3QgcGFyc2VyID0gdGhpcy5wYXJzZXIgfHwgdGhpcy5QYXJzZXI7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwYXJzZSIsIHBhcnNlcik7CiAgICAgICAgcmV0dXJuIHBhcnNlcihTdHJpbmcocmVhbEZpbGUpLCByZWFsRmlsZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgcGVyZm9ybXMgdGhlIHBhcnNlLCBydW4sIGFuZCBzdHJpbmdpZnkgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlCiAgICAgICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYF07IGFueSB2YWx1ZSBhY2NlcHRlZCBhcwogICAgICAgKiAgIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHBhcmFtIHtQcm9jZXNzQ2FsbGJhY2s8VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+PiB8IHVuZGVmaW5lZH0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VkZpbGU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSBhIHByb21pc2UsIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3MoZmlsZSwgZG9uZSkgewogICAgICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGFzc2VydFBhcnNlcigicHJvY2VzcyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2VzcyIsIHRoaXMuY29tcGlsZXIgfHwgdGhpcy5Db21waWxlcik7CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgICBjb25zdCBwYXJzZVRyZWUgPSAoCiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9ICovCiAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgc2VsZjIucGFyc2UocmVhbEZpbGUpCiAgICAgICAgICApOwogICAgICAgICAgc2VsZjIucnVuKHBhcnNlVHJlZSwgcmVhbEZpbGUsIGZ1bmN0aW9uKGVycm9yLCB0cmVlLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIXRyZWUgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEb25lKGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBjb21waWxlVHJlZSA9ICgKICAgICAgICAgICAgICAvKiogQHR5cGUge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSAqLwogICAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgICB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVSZXN1bHQgPSBzZWxmMi5zdHJpbmdpZnkoY29tcGlsZVRyZWUsIGZpbGUyKTsKICAgICAgICAgICAgaWYgKGxvb2tzTGlrZUFWYWx1ZShjb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgIGZpbGUyLnZhbHVlID0gY29tcGlsZVJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmaWxlMi5yZXN1bHQgPSBjb21waWxlUmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYWxEb25lKAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fSAqLwogICAgICAgICAgICAgIGZpbGUyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlMikgewogICAgICAgICAgICAgIHJlc29sdmUyKGZpbGUyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBwcm9jZXNzU3luY2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIHBlcmZvcm1zIHRoZSBwYXJzZSwgcnVuLCBhbmQgc3RyaW5naWZ5IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogICBGaWxlIChvcHRpb25hbCk7IHR5cGljYWxseSBgc3RyaW5nYCBvciBgVkZpbGVgOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMKICAgICAgICogICBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgVGhlIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3NTeW5jKGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwcm9jZXNzU3luYyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2Vzc1N5bmMiLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpOwogICAgICAgIHRoaXMucHJvY2VzcyhmaWxlLCByZWFsRG9uZSk7CiAgICAgICAgYXNzZXJ0RG9uZSgicHJvY2Vzc1N5bmMiLCAicHJvY2VzcyIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZTIpIHsKICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gZmlsZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHJ1bmAgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gZG9uZQogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IGZpbGUKICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7KAogICAgICAgKiAgIFJ1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8CiAgICAgICAqICAgQ29tcGF0aWJsZQogICAgICAgKiApfSBbZmlsZV0KICAgICAgICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgbm9kZWAgKG9wdGlvbmFsKTsgYW55IHZhbHVlIGFjY2VwdGVkIGFzIGB4YCBpbgogICAgICAgKiAgIGBuZXcgVkZpbGUoeClgLgogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSwgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW4odHJlZSwgZmlsZSwgZG9uZSkgewogICAgICAgIGFzc2VydE5vZGUodHJlZSk7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSB0aGlzLnRyYW5zZm9ybWVyczsKICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZW9mIGZpbGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGRvbmUgPSBmaWxlOwogICAgICAgICAgZmlsZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIG9rKAogICAgICAgICAgICB0eXBlb2YgZmlsZSAhPT0gImZ1bmN0aW9uIiwKICAgICAgICAgICAgImBmaWxlYCBjYW5cdTIwMTl0IGJlIGEgYGRvbmVgIGFueW1vcmUsIHdlIGNoZWNrZWQiCiAgICAgICAgICApOwogICAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICAgIHRyYW5zZm9ybWVycy5ydW4odHJlZSwgcmVhbEZpbGUsIHJlYWxEb25lKTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBvdXRwdXRUcmVlLCBmaWxlMikgewogICAgICAgICAgICBjb25zdCByZXN1bHRpbmdUcmVlID0gKAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWV9ICovCiAgICAgICAgICAgICAgb3V0cHV0VHJlZSB8fCB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZTIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihyZXN1bHRpbmdUcmVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCByZXN1bHRpbmdUcmVlLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJ1biAqdHJhbnNmb3JtZXJzKiBvbiBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1RhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlfQogICAgICAgKiAgIFRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW5TeW5jKHRyZWUsIGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMucnVuKHRyZWUsIGZpbGUsIHJlYWxEb25lKTsKICAgICAgICBhc3NlcnREb25lKCJydW5TeW5jIiwgInJ1biIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgdHJlZTIpIHsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gdHJlZTI7CiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21waWxlIGEgc3ludGF4IHRyZWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHN0cmluZ2lmeWAgcGVyZm9ybXMgdGhlIHN0cmluZ2lmeSBwaGFzZSwgbm90IHRoZSBydW4gcGhhc2UKICAgICAgICogPiBvciBvdGhlciBwaGFzZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGlsZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogQ29tcGlsZVRyZWV9IHRyZWUKICAgICAgICogICBUcmVlIHRvIGNvbXBpbGUuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge0NvbXBpbGVSZXN1bHQgZXh0ZW5kcyB1bmRlZmluZWQgPyBWYWx1ZSA6IENvbXBpbGVSZXN1bHR9CiAgICAgICAqICAgVGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZSAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0IGNvbXBpbGVycwogICAgICAgKiAgID4gcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBzdHJpbmdpZnkodHJlZSwgZmlsZSkgewogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICBjb25zdCBjb21waWxlcjIgPSB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXI7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInN0cmluZ2lmeSIsIGNvbXBpbGVyMik7CiAgICAgICAgYXNzZXJ0Tm9kZSh0cmVlKTsKICAgICAgICByZXR1cm4gY29tcGlsZXIyKHRyZWUsIHJlYWxGaWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3IgdG8gdXNlIGEgcGx1Z2luLCBhIGxpc3Qgb2YgdXNhYmxlIHZhbHVlcywgb3IgYQogICAgICAgKiBwcmVzZXQuCiAgICAgICAqCiAgICAgICAqIElmIHRoZSBwcm9jZXNzb3IgaXMgYWxyZWFkeSB1c2luZyBhIHBsdWdpbiwgdGhlIHByZXZpb3VzIHBsdWdpbgogICAgICAgKiBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIGluLgogICAgICAgKiBJbiBvdGhlciB3b3JkcywgdGhlIHBsdWdpbiBpcyBub3QgYWRkZWQgYSBzZWNvbmQgdGltZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHVzZWAgY2Fubm90IGJlIGNhbGxlZCBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoZXJlIGFyZSBtYW55IHdheXMgdG8gcGFzcyBwbHVnaW5zIHRvIGAudXNlKClgLgogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBnaXZlcyBhbiBvdmVydmlldzoKICAgICAgICoKICAgICAgICogICBgYGBqcwogICAgICAgKiAgIGltcG9ydCB7dW5pZmllZH0gZnJvbSAndW5pZmllZCcKICAgICAgICoKICAgICAgICogICB1bmlmaWVkKCkKICAgICAgICogICAgIC8vIFBsdWdpbiB3aXRoIG9wdGlvbnM6CiAgICAgICAqICAgICAudXNlKHBsdWdpbkEsIHt4OiB0cnVlLCB5OiB0cnVlfSkKICAgICAgICogICAgIC8vIFBhc3NpbmcgdGhlIHNhbWUgcGx1Z2luIGFnYWluIG1lcmdlcyBjb25maWd1cmF0aW9uICh0byBge3g6IHRydWUsIHk6IGZhbHNlLCB6OiB0cnVlfWApOgogICAgICAgKiAgICAgLnVzZShwbHVnaW5BLCB7eTogZmFsc2UsIHo6IHRydWV9KQogICAgICAgKiAgICAgLy8gUGx1Z2luczoKICAgICAgICogICAgIC51c2UoW3BsdWdpbkIsIHBsdWdpbkNdKQogICAgICAgKiAgICAgLy8gVHdvIHBsdWdpbnMsIHRoZSBzZWNvbmQgd2l0aCBvcHRpb25zOgogICAgICAgKiAgICAgLnVzZShbcGx1Z2luRCwgW3BsdWdpbkUsIHt9XV0pCiAgICAgICAqICAgICAvLyBQcmVzZXQgd2l0aCBwbHVnaW5zIGFuZCBzZXR0aW5nczoKICAgICAgICogICAgIC51c2Uoe3BsdWdpbnM6IFtwbHVnaW5GLCBbcGx1Z2luRywge31dXSwgc2V0dGluZ3M6IHtwb3NpdGlvbjogZmFsc2V9fSkKICAgICAgICogICAgIC8vIFNldHRpbmdzIG9ubHk6CiAgICAgICAqICAgICAudXNlKHtzZXR0aW5nczoge3Bvc2l0aW9uOiBmYWxzZX19KQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge0FycmF5PHVua25vd24+fSBbUGFyYW1ldGVycz1bXV0KICAgICAgICogQHRlbXBsYXRlIHtOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBbSW5wdXQ9dW5kZWZpbmVkXQogICAgICAgKiBAdGVtcGxhdGUgW091dHB1dD1JbnB1dF0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ByZXNldF0KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtQbHVnZ2FibGVMaXN0fSBsaXN0CiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UGx1Z2luPFBhcmFtZXRlcnMsIElucHV0LCBPdXRwdXQ+fSBwbHVnaW4KICAgICAgICogQHBhcmFtIHsuLi4oUGFyYW1ldGVycyB8IFtib29sZWFuXSl9IHBhcmFtZXRlcnMKICAgICAgICogQHJldHVybnMge1VzZVBsdWdpbjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQsIElucHV0LCBPdXRwdXQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1BsdWdnYWJsZUxpc3QgfCBQbHVnaW4gfCBQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZQogICAgICAgKiAgIFVzYWJsZSB2YWx1ZS4KICAgICAgICogQHBhcmFtIHsuLi51bmtub3dufSBwYXJhbWV0ZXJzCiAgICAgICAqICAgUGFyYW1ldGVycywgd2hlbiBhIHBsdWdpbiBpcyBnaXZlbiBhcyBhIHVzYWJsZSB2YWx1ZS4KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKiAgIEN1cnJlbnQgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgdXNlKHZhbHVlMiwgLi4ucGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IGF0dGFjaGVycyA9IHRoaXMuYXR0YWNoZXJzOwogICAgICAgIGNvbnN0IG5hbWVzcGFjZTIgPSB0aGlzLm5hbWVzcGFjZTsKICAgICAgICBhc3NlcnRVbmZyb3plbigidXNlIiwgdGhpcy5mcm96ZW4pOwogICAgICAgIGlmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDApIHsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTIsIHBhcmFtZXRlcnMpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgICAgICAgICAgYWRkTGlzdCh2YWx1ZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUyICsgImAiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZnVuY3Rpb24gYWRkMyh2YWx1ZTMpIHsKICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTMsIFtdKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMyA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUzKSkgewogICAgICAgICAgICAgIGNvbnN0IFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSA9ICgKICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7UGx1Z2luVHVwbGU8QXJyYXk8dW5rbm93bj4+fSAqLwogICAgICAgICAgICAgICAgdmFsdWUzCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICBhZGRQbHVnaW4ocGx1Z2luLCBwYXJhbWV0ZXJzMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUzICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUHJlc2V0KHJlc3VsdCkgewogICAgICAgICAgaWYgKCEoInBsdWdpbnMiIGluIHJlc3VsdCkgJiYgISgic2V0dGluZ3MiIGluIHJlc3VsdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICJFeHBlY3RlZCB1c2FibGUgdmFsdWUgYnV0IHJlY2VpdmVkIGFuIGVtcHR5IHByZXNldCwgd2hpY2ggaXMgcHJvYmFibHkgYSBtaXN0YWtlOiBwcmVzZXRzIHR5cGljYWxseSBjb21lIHdpdGggYHBsdWdpbnNgIGFuZCBzb21ldGltZXMgd2l0aCBgc2V0dGluZ3NgLCBidXQgdGhpcyBoYXMgbmVpdGhlciIKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkZExpc3QocmVzdWx0LnBsdWdpbnMpOwogICAgICAgICAgaWYgKHJlc3VsdC5zZXR0aW5ncykgewogICAgICAgICAgICBuYW1lc3BhY2UyLnNldHRpbmdzID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgbmFtZXNwYWNlMi5zZXR0aW5ncywgcmVzdWx0LnNldHRpbmdzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdChwbHVnaW5zMTcpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGlmIChwbHVnaW5zMTcgPT09IG51bGwgfHwgcGx1Z2luczE3ID09PSB2b2lkIDApIHsKICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwbHVnaW5zMTcpKSB7CiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IHBsdWdpbnMxNy5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb25zdCB0aGluZyA9IHBsdWdpbnMxN1tpbmRleDJdOwogICAgICAgICAgICAgIGFkZDModGhpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGAiICsgcGx1Z2luczE3ICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVyczIpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGxldCBlbnRyeUluZGV4ID0gLTE7CiAgICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBhdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChhdHRhY2hlcnNbaW5kZXgyXVswXSA9PT0gcGx1Z2luKSB7CiAgICAgICAgICAgICAgZW50cnlJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgIGF0dGFjaGVycy5wdXNoKFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbGV0IFtwcmltYXJ5LCAuLi5yZXN0XSA9IHBhcmFtZXRlcnMyOwogICAgICAgICAgICBjb25zdCBjdXJyZW50UHJpbWFyeSA9IGF0dGFjaGVyc1tlbnRyeUluZGV4XVsxXTsKICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY3VycmVudFByaW1hcnkpICYmIGlzUGxhaW5PYmplY3QocHJpbWFyeSkpIHsKICAgICAgICAgICAgICBwcmltYXJ5ID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgY3VycmVudFByaW1hcnksIHByaW1hcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0dGFjaGVyc1tlbnRyeUluZGV4XSA9IFtwbHVnaW4sIHByaW1hcnksIC4uLnJlc3RdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIHVuaWZpZWQgPSBuZXcgUHJvY2Vzc29yKCkuZnJlZXplKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9pbmRleC5qcwp2YXIgaW5pdF91bmlmaWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jY291bnRAMi4wLjEvbm9kZV9tb2R1bGVzL2Njb3VudC9pbmRleC5qcwpmdW5jdGlvbiBjY291bnQodmFsdWUyLCBjaGFyYWN0ZXIpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBpZiAodHlwZW9mIGNoYXJhY3RlciAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGNoYXJhY3RlciIpOwogIH0KICBsZXQgY291bnQyID0gMDsKICBsZXQgaW5kZXgyID0gc291cmNlLmluZGV4T2YoY2hhcmFjdGVyKTsKICB3aGlsZSAoaW5kZXgyICE9PSAtMSkgewogICAgY291bnQyKys7CiAgICBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIsIGluZGV4MiArIGNoYXJhY3Rlci5sZW5ndGgpOwogIH0KICByZXR1cm4gY291bnQyOwp9CnZhciBpbml0X2Njb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzCmZ1bmN0aW9uIGFzY2lpQ29udHJvbChjb2RlNCkgewogIHJldHVybiAoCiAgICAvLyBTcGVjaWFsIHdoaXRlc3BhY2UgY29kZXMgKHdoaWNoIGhhdmUgbmVnYXRpdmUgdmFsdWVzKSwgQzAgYW5kIENvbnRyb2wKICAgIC8vIGNoYXJhY3RlciBERUwKICAgIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDMyIHx8IGNvZGU0ID09PSAxMjcpCiAgKTsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IG51bGwgJiYgY29kZTQgPCAtMjsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDAgfHwgY29kZTQgPT09IDMyKTsKfQpmdW5jdGlvbiBtYXJrZG93blNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSAtMiB8fCBjb2RlNCA9PT0gLTEgfHwgY29kZTQgPT09IDMyOwp9CmZ1bmN0aW9uIHJlZ2V4Q2hlY2socmVnZXgpIHsKICByZXR1cm4gY2hlY2s7CiAgZnVuY3Rpb24gY2hlY2soY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCAhPT0gbnVsbCAmJiBjb2RlNCA+IC0xICYmIHJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCkpOwogIH0KfQp2YXIgYXNjaWlBbHBoYSwgYXNjaWlBbHBoYW51bWVyaWMsIGFzY2lpQXRleHQsIGFzY2lpRGlnaXQsIGFzY2lpSGV4RGlnaXQsIGFzY2lpUHVuY3R1YXRpb24sIHVuaWNvZGVQdW5jdHVhdGlvbiwgdW5pY29kZVdoaXRlc3BhY2U7CnZhciBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzIigpIHsKICAgIGFzY2lpQWxwaGEgPSByZWdleENoZWNrKC9bQS1aYS16XS8pOwogICAgYXNjaWlBbHBoYW51bWVyaWMgPSByZWdleENoZWNrKC9bXGRBLVphLXpdLyk7CiAgICBhc2NpaUF0ZXh0ID0gcmVnZXhDaGVjaygvWyMtJyorXC0tOT0/QS1aXi1+XS8pOwogICAgYXNjaWlEaWdpdCA9IHJlZ2V4Q2hlY2soL1xkLyk7CiAgICBhc2NpaUhleERpZ2l0ID0gcmVnZXhDaGVjaygvW1xkQS1GYS1mXS8pOwogICAgYXNjaWlQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1shLS86LUBbLWB7LX5dLyk7CiAgICB1bmljb2RlUHVuY3R1YXRpb24gPSByZWdleENoZWNrKC9ccHtQfXxccHtTfS91KTsKICAgIHVuaWNvZGVXaGl0ZXNwYWNlID0gcmVnZXhDaGVjaygvXHMvKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHsKICBjb25zdCBjaGVja3MyID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHRlc3RzLmxlbmd0aCkgewogICAgY2hlY2tzMltpbmRleDJdID0gY29udmVydCh0ZXN0c1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGNhc3RGYWN0b3J5KGFueSk7CiAgZnVuY3Rpb24gYW55KC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBpbmRleDMgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MyA8IGNoZWNrczIubGVuZ3RoKSB7CiAgICAgIGlmIChjaGVja3MyW2luZGV4M10uYXBwbHkodGhpcywgcGFyYW1ldGVycykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQpmdW5jdGlvbiBwcm9wZXJ0aWVzRmFjdG9yeShjaGVjaykgewogIGNvbnN0IGNoZWNrQXNSZWNvcmQgPSAoCiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLwogICAgY2hlY2sKICApOwogIHJldHVybiBjYXN0RmFjdG9yeShhbGwzKTsKICBmdW5jdGlvbiBhbGwzKG5vZGUyKSB7CiAgICBjb25zdCBub2RlQXNSZWNvcmQgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgbm9kZTIKICAgICk7CiAgICBsZXQga2V5MjsKICAgIGZvciAoa2V5MiBpbiBjaGVjaykgewogICAgICBpZiAobm9kZUFzUmVjb3JkW2tleTJdICE9PSBjaGVja0FzUmVjb3JkW2tleTJdKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KZnVuY3Rpb24gdHlwZUZhY3RvcnkoY2hlY2spIHsKICByZXR1cm4gY2FzdEZhY3RvcnkodHlwZTUpOwogIGZ1bmN0aW9uIHR5cGU1KG5vZGUyKSB7CiAgICByZXR1cm4gbm9kZTIgJiYgbm9kZTIudHlwZSA9PT0gY2hlY2s7CiAgfQp9CmZ1bmN0aW9uIGNhc3RGYWN0b3J5KHRlc3RGdW5jdGlvbikgewogIHJldHVybiBjaGVjazsKICBmdW5jdGlvbiBjaGVjayh2YWx1ZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gQm9vbGVhbigKICAgICAgbG9va3NMaWtlQU5vZGUodmFsdWUyKSAmJiB0ZXN0RnVuY3Rpb24uY2FsbCgKICAgICAgICB0aGlzLAogICAgICAgIHZhbHVlMiwKICAgICAgICB0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiA/IGluZGV4MiA6IHZvaWQgMCwKICAgICAgICBwYXJlbnQgfHwgdm9pZCAwCiAgICAgICkKICAgICk7CiAgfQp9CmZ1bmN0aW9uIG9rMigpIHsKICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBTm9kZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJ0eXBlIiBpbiB2YWx1ZTI7Cn0KdmFyIGlzLCBjb252ZXJ0Owp2YXIgaW5pdF9saWI2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMiKCkgewogICAgaXMgPSAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2Fu4oCZdCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuCiAgICAvKioKICAgICAqIEB0eXBlIHsoCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBzdHJpbmc+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBUZXN0RnVuY3Rpb24+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgUHJlZGljYXRlPENvbmRpdGlvbiwgTm9kZT4pICYKICAgICAqICAgKChub2RlPzogbnVsbCB8IHVuZGVmaW5lZCkgPT4gZmFsc2UpICYKICAgICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogbnVsbCB8IHVuZGVmaW5lZCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmCiAgICAgKiAgICgobm9kZTogdW5rbm93biwgdGVzdD86IFRlc3QsIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IGJvb2xlYW4pCiAgICAgKiApfQogICAgICovCiAgICAvKioKICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW25vZGVdCiAgICAgKiBAcGFyYW0ge1Rlc3R9IFt0ZXN0XQogICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdCiAgICAgKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXJlbnRdCiAgICAgKiBAcGFyYW0ge3Vua25vd259IFtjb250ZXh0XQogICAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICAgKi8KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zCiAgICAoZnVuY3Rpb24obm9kZTIsIHRlc3QsIGluZGV4MiwgcGFyZW50LCBjb250ZXh0MikgewogICAgICBjb25zdCBjaGVjayA9IGNvbnZlcnQodGVzdCk7CiAgICAgIGlmIChpbmRleDIgIT09IHZvaWQgMCAmJiBpbmRleDIgIT09IG51bGwgJiYgKHR5cGVvZiBpbmRleDIgIT09ICJudW1iZXIiIHx8IGluZGV4MiA8IDAgfHwgaW5kZXgyID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXgiKTsKICAgICAgfQogICAgICBpZiAocGFyZW50ICE9PSB2b2lkIDAgJiYgcGFyZW50ICE9PSBudWxsICYmICghaXMocGFyZW50KSB8fCAhcGFyZW50LmNoaWxkcmVuKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcGFyZW50IG5vZGUiKTsKICAgICAgfQogICAgICBpZiAoKHBhcmVudCA9PT0gdm9pZCAwIHx8IHBhcmVudCA9PT0gbnVsbCkgIT09IChpbmRleDIgPT09IHZvaWQgMCB8fCBpbmRleDIgPT09IG51bGwpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgiKTsKICAgICAgfQogICAgICByZXR1cm4gbG9va3NMaWtlQU5vZGUobm9kZTIpID8gY2hlY2suY2FsbChjb250ZXh0Miwgbm9kZTIsIGluZGV4MiwgcGFyZW50KSA6IGZhbHNlOwogICAgfSk7CiAgICBjb252ZXJ0ID0gLy8gTm90ZTogb3ZlcmxvYWRzIGluIEpTRG9jIGNhbuKAmXQgeWV0IHVzZSBkaWZmZXJlbnQgYEB0ZW1wbGF0ZWBzLgogICAgLyoqCiAgICAgKiBAdHlwZSB7KAogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgQ29uZGl0aW9uKSAmCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgVGVzdEZ1bmN0aW9uPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJgogICAgICogICAoKHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiAobm9kZT86IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSkgJgogICAgICogICAoKHRlc3Q/OiBUZXN0KSA9PiBDaGVjaykKICAgICAqICl9CiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtUZXN0fSBbdGVzdF0KICAgICAqIEByZXR1cm5zIHtDaGVja30KICAgICAqLwogICAgKGZ1bmN0aW9uKHRlc3QpIHsKICAgICAgaWYgKHRlc3QgPT09IG51bGwgfHwgdGVzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9rMjsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gY2FzdEZhY3RvcnkodGVzdCk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAib2JqZWN0IikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRlc3QpID8gYW55RmFjdG9yeSh0ZXN0KSA6ICgKICAgICAgICAgIC8vIENhc3QgYmVjYXVzZSBgUmVhZG9ubHlBcnJheWAgZ29lcyBpbnRvIHRoZSBhYm92ZSBidXQgYGlzQXJyYXlgCiAgICAgICAgICAvLyBuYXJyb3dzIHRvIGBBcnJheWAuCiAgICAgICAgICBwcm9wZXJ0aWVzRmFjdG9yeSgKICAgICAgICAgICAgLyoqIEB0eXBlIHtQcm9wc30gKi8KICAgICAgICAgICAgdGVzdAogICAgICAgICAgKQogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAic3RyaW5nIikgewogICAgICAgIHJldHVybiB0eXBlRmFjdG9yeSh0ZXN0KTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0Iik7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF9pcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMKZnVuY3Rpb24gY29sb3IoZDUpIHsKICByZXR1cm4gZDU7Cn0KdmFyIGluaXRfY29sb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0UGFyZW50cyh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7CiAgbGV0IGNoZWNrOwogIGlmICh0eXBlb2YgdGVzdCA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvciAhPT0gImZ1bmN0aW9uIikgewogICAgcmV2ZXJzZSA9IHZpc2l0b3I7CiAgICB2aXNpdG9yID0gdGVzdDsKICB9IGVsc2UgewogICAgY2hlY2sgPSB0ZXN0OwogIH0KICBjb25zdCBpczMgPSBjb252ZXJ0KGNoZWNrKTsKICBjb25zdCBzdGVwID0gcmV2ZXJzZSA/IC0xIDogMTsKICBmYWN0b3J5KHRyZWUsIHZvaWQgMCwgW10pKCk7CiAgZnVuY3Rpb24gZmFjdG9yeShub2RlMiwgaW5kZXgyLCBwYXJlbnRzKSB7CiAgICBjb25zdCB2YWx1ZTIgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIG5vZGUyICYmIHR5cGVvZiBub2RlMiA9PT0gIm9iamVjdCIgPyBub2RlMiA6IHt9CiAgICApOwogICAgaWYgKHR5cGVvZiB2YWx1ZTIudHlwZSA9PT0gInN0cmluZyIpIHsKICAgICAgY29uc3QgbmFtZSA9ICgKICAgICAgICAvLyBgaGFzdGAKICAgICAgICB0eXBlb2YgdmFsdWUyLnRhZ05hbWUgPT09ICJzdHJpbmciID8gdmFsdWUyLnRhZ05hbWUgOiAoCiAgICAgICAgICAvLyBgeGFzdGAKICAgICAgICAgIHR5cGVvZiB2YWx1ZTIubmFtZSA9PT0gInN0cmluZyIgPyB2YWx1ZTIubmFtZSA6IHZvaWQgMAogICAgICAgICkKICAgICAgKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpc2l0MiwgIm5hbWUiLCB7CiAgICAgICAgdmFsdWU6ICJub2RlICgiICsgY29sb3Iobm9kZTIudHlwZSArIChuYW1lID8gIjwiICsgbmFtZSArICI+IiA6ICIiKSkgKyAiKSIKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmlzaXQyOwogICAgZnVuY3Rpb24gdmlzaXQyKCkgewogICAgICBsZXQgcmVzdWx0ID0gZW1wdHkyOwogICAgICBsZXQgc3VicmVzdWx0OwogICAgICBsZXQgb2Zmc2V0OwogICAgICBsZXQgZ3JhbmRwYXJlbnRzOwogICAgICBpZiAoIXRlc3QgfHwgaXMzKG5vZGUyLCBpbmRleDIsIHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXSB8fCB2b2lkIDApKSB7CiAgICAgICAgcmVzdWx0ID0gdG9SZXN1bHQodmlzaXRvcihub2RlMiwgcGFyZW50cykpOwogICAgICAgIGlmIChyZXN1bHRbMF0gPT09IEVYSVQpIHsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgiY2hpbGRyZW4iIGluIG5vZGUyICYmIG5vZGUyLmNoaWxkcmVuKSB7CiAgICAgICAgY29uc3Qgbm9kZUFzUGFyZW50ID0gKAogICAgICAgICAgLyoqIEB0eXBlIHtVbmlzdFBhcmVudH0gKi8KICAgICAgICAgIG5vZGUyCiAgICAgICAgKTsKICAgICAgICBpZiAobm9kZUFzUGFyZW50LmNoaWxkcmVuICYmIHJlc3VsdFswXSAhPT0gU0tJUCkgewogICAgICAgICAgb2Zmc2V0ID0gKHJldmVyc2UgPyBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIDogLTEpICsgc3RlcDsKICAgICAgICAgIGdyYW5kcGFyZW50cyA9IHBhcmVudHMuY29uY2F0KG5vZGVBc1BhcmVudCk7CiAgICAgICAgICB3aGlsZSAob2Zmc2V0ID4gLTEgJiYgb2Zmc2V0IDwgbm9kZUFzUGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVBc1BhcmVudC5jaGlsZHJlbltvZmZzZXRdOwogICAgICAgICAgICBzdWJyZXN1bHQgPSBmYWN0b3J5KGNoaWxkLCBvZmZzZXQsIGdyYW5kcGFyZW50cykoKTsKICAgICAgICAgICAgaWYgKHN1YnJlc3VsdFswXSA9PT0gRVhJVCkgewogICAgICAgICAgICAgIHJldHVybiBzdWJyZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHN1YnJlc3VsdFsxXSA9PT0gIm51bWJlciIgPyBzdWJyZXN1bHRbMV0gOiBvZmZzZXQgKyBzdGVwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0KfQpmdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZTIpIHsKICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIpIHsKICAgIHJldHVybiBbQ09OVElOVUUsIHZhbHVlMl07CiAgfQogIHJldHVybiB2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyBlbXB0eTIgOiBbdmFsdWUyXTsKfQp2YXIgZW1wdHkyLCBDT05USU5VRSwgRVhJVCwgU0tJUDsKdmFyIGluaXRfbGliNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICAgIGluaXRfY29sb3IoKTsKICAgIGVtcHR5MiA9IFtdOwogICAgQ09OVElOVUUgPSB0cnVlOwogICAgRVhJVCA9IGZhbHNlOwogICAgU0tJUCA9ICJza2lwIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliNygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGZpbmRBbmRSZXBsYWNlKHRyZWUsIGxpc3Q1LCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IGlnbm9yZWQgPSBjb252ZXJ0KHNldHRpbmdzLmlnbm9yZSB8fCBbXSk7CiAgY29uc3QgcGFpcnMyID0gdG9QYWlycyhsaXN0NSk7CiAgbGV0IHBhaXJJbmRleCA9IC0xOwogIHdoaWxlICgrK3BhaXJJbmRleCA8IHBhaXJzMi5sZW5ndGgpIHsKICAgIHZpc2l0UGFyZW50cyh0cmVlLCAidGV4dCIsIHZpc2l0b3IpOwogIH0KICBmdW5jdGlvbiB2aXNpdG9yKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgZ3JhbmRwYXJlbnQ7CiAgICB3aGlsZSAoKytpbmRleDIgPCBwYXJlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW2luZGV4Ml07CiAgICAgIGNvbnN0IHNpYmxpbmdzMiA9IGdyYW5kcGFyZW50ID8gZ3JhbmRwYXJlbnQuY2hpbGRyZW4gOiB2b2lkIDA7CiAgICAgIGlmIChpZ25vcmVkKAogICAgICAgIHBhcmVudCwKICAgICAgICBzaWJsaW5nczIgPyBzaWJsaW5nczIuaW5kZXhPZihwYXJlbnQpIDogdm9pZCAwLAogICAgICAgIGdyYW5kcGFyZW50CiAgICAgICkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZ3JhbmRwYXJlbnQgPSBwYXJlbnQ7CiAgICB9CiAgICBpZiAoZ3JhbmRwYXJlbnQpIHsKICAgICAgcmV0dXJuIGhhbmRsZXIyKG5vZGUyLCBwYXJlbnRzKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gaGFuZGxlcjIobm9kZTIsIHBhcmVudHMpIHsKICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IGZpbmQzID0gcGFpcnMyW3BhaXJJbmRleF1bMF07CiAgICBjb25zdCByZXBsYWNlNSA9IHBhaXJzMltwYWlySW5kZXhdWzFdOwogICAgbGV0IHN0YXJ0ID0gMDsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudC5jaGlsZHJlbjsKICAgIGNvbnN0IGluZGV4MiA9IHNpYmxpbmdzMi5pbmRleE9mKG5vZGUyKTsKICAgIGxldCBjaGFuZ2UgPSBmYWxzZTsKICAgIGxldCBub2RlcyA9IFtdOwogICAgZmluZDMubGFzdEluZGV4ID0gMDsKICAgIGxldCBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIHdoaWxlIChtYXRjaDIpIHsKICAgICAgY29uc3QgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4OwogICAgICBjb25zdCBtYXRjaE9iamVjdCA9IHsKICAgICAgICBpbmRleDogbWF0Y2gyLmluZGV4LAogICAgICAgIGlucHV0OiBtYXRjaDIuaW5wdXQsCiAgICAgICAgc3RhY2s6IFsuLi5wYXJlbnRzLCBub2RlMl0KICAgICAgfTsKICAgICAgbGV0IHZhbHVlMiA9IHJlcGxhY2U1KC4uLm1hdGNoMiwgbWF0Y2hPYmplY3QpOwogICAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIubGVuZ3RoID4gMCA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH0gOiB2b2lkIDA7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gZmFsc2UpIHsKICAgICAgICBmaW5kMy5sYXN0SW5kZXggPSBwb3NpdGlvbjMgKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24zKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKHsKICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICB2YWx1ZTogbm9kZTIudmFsdWUuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uMykKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnZhbHVlMik7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIpIHsKICAgICAgICAgIG5vZGVzLnB1c2godmFsdWUyKTsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPSBwb3NpdGlvbjMgKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgICAgIGNoYW5nZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKCFmaW5kMy5nbG9iYWwpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIH0KICAgIGlmIChjaGFuZ2UpIHsKICAgICAgaWYgKHN0YXJ0IDwgbm9kZTIudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgbm9kZXMucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlLnNsaWNlKHN0YXJ0KSB9KTsKICAgICAgfQogICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4MiwgMSwgLi4ubm9kZXMpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZXMgPSBbbm9kZTJdOwogICAgfQogICAgcmV0dXJuIGluZGV4MiArIG5vZGVzLmxlbmd0aDsKICB9Cn0KZnVuY3Rpb24gdG9QYWlycyh0dXBsZU9yTGlzdCkgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGlmICghQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdCkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZpbmQgYW5kIHJlcGxhY2UgdHVwbGUgb3IgbGlzdCBvZiB0dXBsZXMiKTsKICB9CiAgY29uc3QgbGlzdDUgPSAhdHVwbGVPckxpc3RbMF0gfHwgQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdFswXSkgPyB0dXBsZU9yTGlzdCA6IFt0dXBsZU9yTGlzdF07CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgY29uc3QgdHVwbGUgPSBsaXN0NVtpbmRleDJdOwogICAgcmVzdWx0LnB1c2goW3RvRXhwcmVzc2lvbih0dXBsZVswXSksIHRvRnVuY3Rpb24odHVwbGVbMV0pXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdG9FeHByZXNzaW9uKGZpbmQzKSB7CiAgcmV0dXJuIHR5cGVvZiBmaW5kMyA9PT0gInN0cmluZyIgPyBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChmaW5kMyksICJnIikgOiBmaW5kMzsKfQpmdW5jdGlvbiB0b0Z1bmN0aW9uKHJlcGxhY2U1KSB7CiAgcmV0dXJuIHR5cGVvZiByZXBsYWNlNSA9PT0gImZ1bmN0aW9uIiA/IHJlcGxhY2U1IDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gcmVwbGFjZTU7CiAgfTsKfQp2YXIgaW5pdF9saWI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB0cmFuc2Zvcm1zOiBbdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFsc10sCiAgICBlbnRlcjogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGVudGVyTGl0ZXJhbEF1dG9saW5rLAogICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3OiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlCiAgICB9LAogICAgZXhpdDogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGV4aXRMaXRlcmFsQXV0b2xpbmssCiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsOiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwsCiAgICAgIGxpdGVyYWxBdXRvbGlua0h0dHA6IGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGV4aXRMaXRlcmFsQXV0b2xpbmtXd3cKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiQCIsCiAgICAgICAgYmVmb3JlOiAiWytcXC0uXFx3XSIsCiAgICAgICAgYWZ0ZXI6ICJbXFwtLlxcd10iLAogICAgICAgIGluQ29uc3RydWN0LAogICAgICAgIG5vdEluQ29uc3RydWN0CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICIuIiwKICAgICAgICBiZWZvcmU6ICJbV3ddIiwKICAgICAgICBhZnRlcjogIltcXC0uXFx3XSIsCiAgICAgICAgaW5Db25zdHJ1Y3QsCiAgICAgICAgbm90SW5Db25zdHJ1Y3QKICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIjoiLAogICAgICAgIGJlZm9yZTogIltwc10iLAogICAgICAgIGFmdGVyOiAiXFwvIiwKICAgICAgICBpbkNvbnN0cnVjdCwKICAgICAgICBub3RJbkNvbnN0cnVjdAogICAgICB9CiAgICBdCiAgfTsKfQpmdW5jdGlvbiBlbnRlckxpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAibGluayIsIHRpdGxlOiBudWxsLCB1cmw6ICIiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5lbnRlci5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwKHRva2VuKSB7CiAgdGhpcy5jb25maWcuZXhpdC5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImxpbmsiKTsKICBub2RlMi51cmwgPSAiaHR0cDovLyIgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKfQpmdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rRW1haWwuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFscyh0cmVlKSB7CiAgZmluZEFuZFJlcGxhY2UoCiAgICB0cmVlLAogICAgWwogICAgICBbLyhodHRwcz86XC9cL3x3d3coPz1cLikpKFstLlx3XSspKFteIFx0XHJcbl0qKS9naSwgZmluZFVybF0sCiAgICAgIFsvKD88PV58XHN8XHB7UH18XHB7U30pKFstLlx3K10rKUAoWy1cd10rKD86XC5bLVx3XSspKykvZ3UsIGZpbmRFbWFpbF0KICAgIF0sCiAgICB7IGlnbm9yZTogWyJsaW5rIiwgImxpbmtSZWZlcmVuY2UiXSB9CiAgKTsKfQpmdW5jdGlvbiBmaW5kVXJsKF80LCBwcm90b2NvbCwgZG9tYWluMiwgcGF0aDIsIG1hdGNoMikgewogIGxldCBwcmVmaXg0ID0gIiI7CiAgaWYgKCFwcmV2aW91cyhtYXRjaDIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICgvXncvaS50ZXN0KHByb3RvY29sKSkgewogICAgZG9tYWluMiA9IHByb3RvY29sICsgZG9tYWluMjsKICAgIHByb3RvY29sID0gIiI7CiAgICBwcmVmaXg0ID0gImh0dHA6Ly8iOwogIH0KICBpZiAoIWlzQ29ycmVjdERvbWFpbihkb21haW4yKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBwYXJ0cyA9IHNwbGl0VXJsKGRvbWFpbjIgKyBwYXRoMik7CiAgaWYgKCFwYXJ0c1swXSkgcmV0dXJuIGZhbHNlOwogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiBwcmVmaXg0ICsgcHJvdG9jb2wgKyBwYXJ0c1swXSwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBwcm90b2NvbCArIHBhcnRzWzBdIH1dCiAgfTsKICBpZiAocGFydHNbMV0pIHsKICAgIHJldHVybiBbcmVzdWx0LCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHBhcnRzWzFdIH1dOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGZpbmRFbWFpbChfNCwgYXRleHQsIGxhYmVsLCBtYXRjaDIpIHsKICBpZiAoCiAgICAvLyBOb3QgYW4gZXhwZWN0ZWQgcHJldmlvdXMgY2hhcmFjdGVyLgogICAgIXByZXZpb3VzKG1hdGNoMiwgdHJ1ZSkgfHwgLy8gTGFiZWwgZW5kcyBpbiBub3QgYWxsb3dlZCBjaGFyYWN0ZXIuCiAgICAvWy1cZF9dJC8udGVzdChsYWJlbCkKICApIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiAibWFpbHRvOiIgKyBhdGV4dCArICJAIiArIGxhYmVsLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGF0ZXh0ICsgIkAiICsgbGFiZWwgfV0KICB9Owp9CmZ1bmN0aW9uIGlzQ29ycmVjdERvbWFpbihkb21haW4yKSB7CiAgY29uc3QgcGFydHMgPSBkb21haW4yLnNwbGl0KCIuIik7CiAgaWYgKHBhcnRzLmxlbmd0aCA8IDIgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gJiYgKC9fLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSB8fCAhL1thLXpBLVpcZF0vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pKSB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSAmJiAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pIHx8ICEvW2EtekEtWlxkXS8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSkpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHNwbGl0VXJsKHVybCkgewogIGNvbnN0IHRyYWlsRXhlYyA9IC9bISImJyksLjo7PD4/XF19XSskLy5leGVjKHVybCk7CiAgaWYgKCF0cmFpbEV4ZWMpIHsKICAgIHJldHVybiBbdXJsLCB2b2lkIDBdOwogIH0KICB1cmwgPSB1cmwuc2xpY2UoMCwgdHJhaWxFeGVjLmluZGV4KTsKICBsZXQgdHJhaWwyID0gdHJhaWxFeGVjWzBdOwogIGxldCBjbG9zaW5nUGFyZW5JbmRleCA9IHRyYWlsMi5pbmRleE9mKCIpIik7CiAgY29uc3Qgb3BlbmluZ1BhcmVucyA9IGNjb3VudCh1cmwsICIoIik7CiAgbGV0IGNsb3NpbmdQYXJlbnMgPSBjY291bnQodXJsLCAiKSIpOwogIHdoaWxlIChjbG9zaW5nUGFyZW5JbmRleCAhPT0gLTEgJiYgb3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHsKICAgIHVybCArPSB0cmFpbDIuc2xpY2UoMCwgY2xvc2luZ1BhcmVuSW5kZXggKyAxKTsKICAgIHRyYWlsMiA9IHRyYWlsMi5zbGljZShjbG9zaW5nUGFyZW5JbmRleCArIDEpOwogICAgY2xvc2luZ1BhcmVuSW5kZXggPSB0cmFpbDIuaW5kZXhPZigiKSIpOwogICAgY2xvc2luZ1BhcmVucysrOwogIH0KICByZXR1cm4gW3VybCwgdHJhaWwyXTsKfQpmdW5jdGlvbiBwcmV2aW91cyhtYXRjaDIsIGVtYWlsKSB7CiAgY29uc3QgY29kZTQgPSBtYXRjaDIuaW5wdXQuY2hhckNvZGVBdChtYXRjaDIuaW5kZXggLSAxKTsKICByZXR1cm4gKG1hdGNoMi5pbmRleCA9PT0gMCB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkgfHwgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgJiYgLy8gSWYgaXTigJlzIGFuIGVtYWlsLCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNob3VsZCBub3QgYmUgYSBzbGFzaC4KICAoIWVtYWlsIHx8IGNvZGU0ICE9PSA0Nyk7Cn0KdmFyIGluQ29uc3RydWN0LCBub3RJbkNvbnN0cnVjdDsKdmFyIGluaXRfbGliOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSgpOwogICAgaW5Db25zdHJ1Y3QgPSAicGhyYXNpbmciOwogICAgbm90SW5Db25zdHJ1Y3QgPSBbImF1dG9saW5rIiwgImxpbmsiLCAiaW1hZ2UiLCAibGFiZWwiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fYXV0b2xpbmtfbGl0ZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMKZnVuY3Rpb24gbm9ybWFsaXplSWRlbnRpZmllcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywgIiAiKS5yZXBsYWNlKC9eIHwgJC9nLCAiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1mb290bm90ZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZW50ZXJGb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgdGhpcy5idWZmZXIoKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAiZm9vdG5vdGVSZWZlcmVuY2UiLCBpZGVudGlmaWVyOiAiIiwgbGFiZWw6ICIiIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCkgewogIHRoaXMuYnVmZmVyKCk7Cn0KZnVuY3Rpb24gZW50ZXJGb290bm90ZURlZmluaXRpb24odG9rZW4pIHsKICB0aGlzLmVudGVyKAogICAgeyB0eXBlOiAiZm9vdG5vdGVEZWZpbml0aW9uIiwgaWRlbnRpZmllcjogIiIsIGxhYmVsOiAiIiwgY2hpbGRyZW46IFtdIH0sCiAgICB0b2tlbgogICk7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikgewogIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7CiAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJmb290bm90ZURlZmluaXRpb24iKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiWyI7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2Uobm9kZTIsIF80LCBzdGF0ZSwgaW5mbykgewogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlteIik7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZS5lbnRlcigiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoInJlZmVyZW5jZSIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZS5zYWZlKHN0YXRlLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7IGFmdGVyOiAiXSIsIGJlZm9yZTogdmFsdWUyIH0pCiAgKTsKICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBlbnRlckZvb3Rub3RlQ2FsbCwKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmc6IGVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZW50ZXJGb290bm90ZURlZmluaXRpb24KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZzogZXhpdEZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBleGl0Rm9vdG5vdGVDYWxsLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb246IGV4aXRGb290bm90ZURlZmluaXRpb24KICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlVG9NYXJrZG93bihvcHRpb25zKSB7CiAgbGV0IGZpcnN0TGluZUJsYW5rID0gZmFsc2U7CiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maXJzdExpbmVCbGFuaykgewogICAgZmlyc3RMaW5lQmxhbmsgPSB0cnVlOwogIH0KICByZXR1cm4gewogICAgaGFuZGxlcnM6IHsgZm9vdG5vdGVEZWZpbml0aW9uLCBmb290bm90ZVJlZmVyZW5jZSB9LAogICAgLy8gVGhpcyBpcyBvbiBieSBkZWZhdWx0IGFscmVhZHkuCiAgICB1bnNhZmU6IFt7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJwaHJhc2luZyIsICJyZWZlcmVuY2UiXSB9XQogIH07CiAgZnVuY3Rpb24gZm9vdG5vdGVEZWZpbml0aW9uKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICAgIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogICAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiW14iKTsKICAgIGNvbnN0IGV4aXQzID0gc3RhdGUuZW50ZXIoImZvb3Rub3RlRGVmaW5pdGlvbiIpOwogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJsYWJlbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShzdGF0ZS5hc3NvY2lhdGlvbklkKG5vZGUyKSwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICJdIiB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl06Iik7CiAgICBpZiAobm9kZTIuY2hpbGRyZW4gJiYgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICB0cmFja2VyLnNoaWZ0KDQpOwogICAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICAgIChmaXJzdExpbmVCbGFuayA/ICJcbiIgOiAiICIpICsgc3RhdGUuaW5kZW50TGluZXMoCiAgICAgICAgICBzdGF0ZS5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICAgICAgICBmaXJzdExpbmVCbGFuayA/IG1hcEFsbCA6IG1hcEV4Y2VwdEZpcnN0CiAgICAgICAgKQogICAgICApOwogICAgfQogICAgZXhpdDMoKTsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CmZ1bmN0aW9uIG1hcEV4Y2VwdEZpcnN0KGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICByZXR1cm4gaW5kZXgyID09PSAwID8gbGluZSA6IG1hcEFsbChsaW5lLCBpbmRleDIsIGJsYW5rKTsKfQpmdW5jdGlvbiBtYXBBbGwobGluZSwgaW5kZXgyLCBibGFuaykgewogIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgICAgIikgKyBsaW5lOwp9CnZhciBpbml0X2xpYjEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGZvb3Rub3RlUmVmZXJlbmNlLnBlZWsgPSBmb290bm90ZVJlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaEZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgY2FuQ29udGFpbkVvbHM6IFsiZGVsZXRlIl0sCiAgICBlbnRlcjogeyBzdHJpa2V0aHJvdWdoOiBlbnRlclN0cmlrZXRocm91Z2ggfSwKICAgIGV4aXQ6IHsgc3RyaWtldGhyb3VnaDogZXhpdFN0cmlrZXRocm91Z2ggfQogIH07Cn0KZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAifiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaAogICAgICB9CiAgICBdLAogICAgaGFuZGxlcnM6IHsgZGVsZXRlOiBoYW5kbGVEZWxldGUgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJkZWxldGUiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBoYW5kbGVEZWxldGUobm9kZTIsIF80LCBzdGF0ZSwgaW5mbykgewogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogIGNvbnN0IGV4aXQzID0gc3RhdGUuZW50ZXIoInN0cmlrZXRocm91Z2giKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIHZhbHVlMiArPSBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAifiIKICB9KTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBwZWVrRGVsZXRlKCkgewogIHJldHVybiAifiI7Cn0KdmFyIGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaDsKdmFyIGluaXRfbGliMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgICBjb25zdHJ1Y3RzV2l0aG91dFN0cmlrZXRocm91Z2ggPSBbCiAgICAgICJhdXRvbGluayIsCiAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVzdGluYXRpb25SYXciLAogICAgICAicmVmZXJlbmNlIiwKICAgICAgInRpdGxlUXVvdGUiLAogICAgICAidGl0bGVBcG9zdHJvcGhlIgogICAgXTsKICAgIGhhbmRsZURlbGV0ZS5wZWVrID0gcGVla0RlbGV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fc3RyaWtldGhyb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWFya2Rvd24tdGFibGVAMy4wLjQvbm9kZV9tb2R1bGVzL21hcmtkb3duLXRhYmxlL2luZGV4LmpzCmZ1bmN0aW9uIGRlZmF1bHRTdHJpbmdMZW5ndGgodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5sZW5ndGg7Cn0KZnVuY3Rpb24gbWFya2Rvd25UYWJsZSh0YWJsZTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgYWxpZ24gPSAoc2V0dGluZ3MuYWxpZ24gfHwgW10pLmNvbmNhdCgpOwogIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aCB8fCBkZWZhdWx0U3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFsaWdubWVudHMgPSBbXTsKICBjb25zdCBjZWxsTWF0cml4ID0gW107CiAgY29uc3Qgc2l6ZU1hdHJpeCA9IFtdOwogIGNvbnN0IGxvbmdlc3RDZWxsQnlDb2x1bW4gPSBbXTsKICBsZXQgbW9zdENlbGxzUGVyUm93ID0gMDsKICBsZXQgcm93SW5kZXggPSAtMTsKICB3aGlsZSAoKytyb3dJbmRleCA8IHRhYmxlMi5sZW5ndGgpIHsKICAgIGNvbnN0IHJvdzIgPSBbXTsKICAgIGNvbnN0IHNpemVzMiA9IFtdOwogICAgbGV0IGNvbHVtbkluZGV4MiA9IC0xOwogICAgaWYgKHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoID4gbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIG1vc3RDZWxsc1BlclJvdyA9IHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoOwogICAgfQogICAgd2hpbGUgKCsrY29sdW1uSW5kZXgyIDwgdGFibGUyW3Jvd0luZGV4XS5sZW5ndGgpIHsKICAgICAgY29uc3QgY2VsbDIgPSBzZXJpYWxpemUodGFibGUyW3Jvd0luZGV4XVtjb2x1bW5JbmRleDJdKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBjb25zdCBzaXplID0gc3RyaW5nTGVuZ3RoKGNlbGwyKTsKICAgICAgICBzaXplczJbY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgaWYgKGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9PT0gdm9pZCAwIHx8IHNpemUgPiBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4Ml0pIHsKICAgICAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJvdzIucHVzaChjZWxsMik7CiAgICB9CiAgICBjZWxsTWF0cml4W3Jvd0luZGV4XSA9IHJvdzI7CiAgICBzaXplTWF0cml4W3Jvd0luZGV4XSA9IHNpemVzMjsKICB9CiAgbGV0IGNvbHVtbkluZGV4ID0gLTE7CiAgaWYgKHR5cGVvZiBhbGlnbiA9PT0gIm9iamVjdCIgJiYgImxlbmd0aCIgaW4gYWxpZ24pIHsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGFsaWdubWVudHNbY29sdW1uSW5kZXhdID0gdG9BbGlnbm1lbnQoYWxpZ25bY29sdW1uSW5kZXhdKTsKICAgIH0KICB9IGVsc2UgewogICAgY29uc3QgY29kZTQgPSB0b0FsaWdubWVudChhbGlnbik7CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XSA9IGNvZGU0OwogICAgfQogIH0KICBjb2x1bW5JbmRleCA9IC0xOwogIGNvbnN0IHJvdyA9IFtdOwogIGNvbnN0IHNpemVzID0gW107CiAgd2hpbGUgKCsrY29sdW1uSW5kZXggPCBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICBsZXQgYmVmb3JlID0gIiI7CiAgICBsZXQgYWZ0ZXIgPSAiIjsKICAgIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgYmVmb3JlID0gIjoiOwogICAgICBhZnRlciA9ICI6IjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDEwOCkgewogICAgICBiZWZvcmUgPSAiOiI7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgYWZ0ZXIgPSAiOiI7CiAgICB9CiAgICBsZXQgc2l6ZSA9IHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgPyAxIDogTWF0aC5tYXgoCiAgICAgIDEsCiAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gYmVmb3JlLmxlbmd0aCAtIGFmdGVyLmxlbmd0aAogICAgKTsKICAgIGNvbnN0IGNlbGwyID0gYmVmb3JlICsgIi0iLnJlcGVhdChzaXplKSArIGFmdGVyOwogICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgc2l6ZSA9IGJlZm9yZS5sZW5ndGggKyBzaXplICsgYWZ0ZXIubGVuZ3RoOwogICAgICBpZiAoc2l6ZSA+IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdKSB7CiAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gPSBzaXplOwogICAgICB9CiAgICAgIHNpemVzW2NvbHVtbkluZGV4XSA9IHNpemU7CiAgICB9CiAgICByb3dbY29sdW1uSW5kZXhdID0gY2VsbDI7CiAgfQogIGNlbGxNYXRyaXguc3BsaWNlKDEsIDAsIHJvdyk7CiAgc2l6ZU1hdHJpeC5zcGxpY2UoMSwgMCwgc2l6ZXMpOwogIHJvd0luZGV4ID0gLTE7CiAgY29uc3QgbGluZXMgPSBbXTsKICB3aGlsZSAoKytyb3dJbmRleCA8IGNlbGxNYXRyaXgubGVuZ3RoKSB7CiAgICBjb25zdCByb3cyID0gY2VsbE1hdHJpeFtyb3dJbmRleF07CiAgICBjb25zdCBzaXplczIgPSBzaXplTWF0cml4W3Jvd0luZGV4XTsKICAgIGNvbHVtbkluZGV4ID0gLTE7CiAgICBjb25zdCBsaW5lID0gW107CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBjb25zdCBjZWxsMiA9IHJvdzJbY29sdW1uSW5kZXhdIHx8ICIiOwogICAgICBsZXQgYmVmb3JlID0gIiI7CiAgICAgIGxldCBhZnRlciA9ICIiOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IHNpemUgPSBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSAtIChzaXplczJbY29sdW1uSW5kZXhdIHx8IDApOwogICAgICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICAgICAgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSk7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgICAgIGlmIChzaXplICUgMikgewogICAgICAgICAgICBiZWZvcmUgPSAiICIucmVwZWF0KHNpemUgLyAyICsgMC41KTsKICAgICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUgLyAyIC0gMC41KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIpOwogICAgICAgICAgICBhZnRlciA9IGJlZm9yZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlICYmICFjb2x1bW5JbmRleCkgewogICAgICAgIGxpbmUucHVzaCgifCIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSAmJiAvLyBEb27igJl0IGFkZCB0aGUgb3BlbmluZyBzcGFjZSBpZiB3ZeKAmXJlIG5vdCBhbGlnbmluZyBhbmQgdGhlIGNlbGwgaXMKICAgICAgLy8gZW1wdHk6IHRoZXJlIHdpbGwgYmUgYSBjbG9zaW5nIHNwYWNlLgogICAgICAhKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgJiYgY2VsbDIgPT09ICIiKSAmJiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4KSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7CiAgICAgICAgbGluZS5wdXNoKGJlZm9yZSk7CiAgICAgIH0KICAgICAgbGluZS5wdXNoKGNlbGwyKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBsaW5lLnB1c2goYWZ0ZXIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5kZWxpbWl0ZXJFbmQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4ICE9PSBtb3N0Q2VsbHNQZXJSb3cgLSAxKSB7CiAgICAgICAgbGluZS5wdXNoKCJ8Iik7CiAgICAgIH0KICAgIH0KICAgIGxpbmVzLnB1c2goCiAgICAgIHNldHRpbmdzLmRlbGltaXRlckVuZCA9PT0gZmFsc2UgPyBsaW5lLmpvaW4oIiIpLnJlcGxhY2UoLyArJC8sICIiKSA6IGxpbmUuam9pbigiIikKICAgICk7CiAgfQogIHJldHVybiBsaW5lcy5qb2luKCJcbiIpOwp9CmZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdm9pZCAwID8gIiIgOiBTdHJpbmcodmFsdWUyKTsKfQpmdW5jdGlvbiB0b0FsaWdubWVudCh2YWx1ZTIpIHsKICBjb25zdCBjb2RlNCA9IHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciID8gdmFsdWUyLmNvZGVQb2ludEF0KDApIDogMDsKICByZXR1cm4gY29kZTQgPT09IDY3IHx8IGNvZGU0ID09PSA5OSA/IDk5IDogY29kZTQgPT09IDc2IHx8IGNvZGU0ID09PSAxMDggPyAxMDggOiBjb2RlNCA9PT0gODIgfHwgY29kZTQgPT09IDExNCA/IDExNCA6IDA7Cn0KdmFyIGluaXRfbWFya2Rvd25fdGFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tYXJrZG93bi10YWJsZUAzLjAuNC9ub2RlX21vZHVsZXMvbWFya2Rvd24tdGFibGUvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vendpdGNoQDIuMC40L25vZGVfbW9kdWxlcy96d2l0Y2gvaW5kZXguanMKZnVuY3Rpb24gendpdGNoKGtleTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgZnVuY3Rpb24gb25lMyh2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBmbiA9IG9uZTMuaW52YWxpZDsKICAgIGNvbnN0IGhhbmRsZXJzMiA9IG9uZTMuaGFuZGxlcnM7CiAgICBpZiAodmFsdWUyICYmIG93bjIuY2FsbCh2YWx1ZTIsIGtleTIpKSB7CiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHZhbHVlMltrZXkyXSk7CiAgICAgIGZuID0gb3duMi5jYWxsKGhhbmRsZXJzMiwgaWQpID8gaGFuZGxlcnMyW2lkXSA6IG9uZTMudW5rbm93bjsKICAgIH0KICAgIGlmIChmbikgewogICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpOwogICAgfQogIH0KICBvbmUzLmhhbmRsZXJzID0gc2V0dGluZ3MuaGFuZGxlcnMgfHwge307CiAgb25lMy5pbnZhbGlkID0gc2V0dGluZ3MuaW52YWxpZDsKICBvbmUzLnVua25vd24gPSBzZXR0aW5ncy51bmtub3duOwogIHJldHVybiBvbmUzOwp9CnZhciBvd24yOwp2YXIgaW5pdF96d2l0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcyIoKSB7CiAgICBvd24yID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9jb25maWd1cmUuanMKZnVuY3Rpb24gY29uZmlndXJlKGJhc2UsIGV4dGVuc2lvbjIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKGV4dGVuc2lvbjIuZXh0ZW5zaW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZXh0ZW5zaW9uMi5leHRlbnNpb25zLmxlbmd0aCkgewogICAgICBjb25maWd1cmUoYmFzZSwgZXh0ZW5zaW9uMi5leHRlbnNpb25zW2luZGV4Ml0pOwogICAgfQogIH0KICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjMuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJleHRlbnNpb25zIjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDQgKi8KICAgICAgICBjYXNlICJ1bnNhZmUiOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImpvaW4iOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImhhbmRsZXJzIjogewogICAgICAgICAgbWFwMyhiYXNlW2tleTJdLCBleHRlbnNpb24yW2tleTJdKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBiYXNlLm9wdGlvbnNba2V5Ml0gPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gYmFzZTsKfQpmdW5jdGlvbiBsaXN0KGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBsZWZ0LnB1c2goLi4ucmlnaHQpOwogIH0KfQpmdW5jdGlvbiBtYXAzKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBPYmplY3QuYXNzaWduKGxlZnQsIHJpZ2h0KTsKICB9Cn0KdmFyIG93bjM7CnZhciBpbml0X2NvbmZpZ3VyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2NvbmZpZ3VyZS5qcyIoKSB7CiAgICBvd24zID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYmxvY2txdW90ZS5qcwpmdW5jdGlvbiBibG9ja3F1b3RlKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJibG9ja3F1b3RlIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgdHJhY2tlci5tb3ZlKCI+ICIpOwogIHRyYWNrZXIuc2hpZnQoMik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUuaW5kZW50TGluZXMoCiAgICBzdGF0ZS5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICBtYXA0CiAgKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbWFwNChsaW5lLCBfNCwgYmxhbmspIHsKICByZXR1cm4gIj4iICsgKGJsYW5rID8gIiIgOiAiICIpICsgbGluZTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2Jsb2NrcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzCmZ1bmN0aW9uIHBhdHRlcm5JblNjb3BlKHN0YWNrLCBwYXR0ZXJuKSB7CiAgcmV0dXJuIGxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLmluQ29uc3RydWN0LCB0cnVlKSAmJiAhbGlzdEluU2NvcGUoc3RhY2ssIHBhdHRlcm4ubm90SW5Db25zdHJ1Y3QsIGZhbHNlKTsKfQpmdW5jdGlvbiBsaXN0SW5TY29wZShzdGFjaywgbGlzdDUsIG5vbmUpIHsKICBpZiAodHlwZW9mIGxpc3Q1ID09PSAic3RyaW5nIikgewogICAgbGlzdDUgPSBbbGlzdDVdOwogIH0KICBpZiAoIWxpc3Q1IHx8IGxpc3Q1Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIG5vbmU7CiAgfQogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgIGlmIChzdGFjay5pbmNsdWRlcyhsaXN0NVtpbmRleDJdKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CnZhciBpbml0X3BhdHRlcm5faW5fc2NvcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3BhdHRlcm4taW4tc2NvcGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhayhfNCwgXzEsIHN0YXRlLCBpbmZvKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlLnVuc2FmZS5sZW5ndGgpIHsKICAgIGlmIChzdGF0ZS51bnNhZmVbaW5kZXgyXS5jaGFyYWN0ZXIgPT09ICJcbiIgJiYgcGF0dGVybkluU2NvcGUoc3RhdGUuc3RhY2ssIHN0YXRlLnVuc2FmZVtpbmRleDJdKSkgewogICAgICByZXR1cm4gL1sgXHRdLy50ZXN0KGluZm8uYmVmb3JlKSA/ICIiIDogIiAiOwogICAgfQogIH0KICByZXR1cm4gIlxcXG4iOwp9CnZhciBpbml0X2JyZWFrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2JyZWFrLmpzIigpIHsKICAgIGluaXRfcGF0dGVybl9pbl9zY29wZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbG9uZ2VzdC1zdHJlYWtAMy4xLjAvbm9kZV9tb2R1bGVzL2xvbmdlc3Qtc3RyZWFrL2luZGV4LmpzCmZ1bmN0aW9uIGxvbmdlc3RTdHJlYWsodmFsdWUyLCBzdWJzdHJpbmcpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBsZXQgaW5kZXgyID0gc291cmNlLmluZGV4T2Yoc3Vic3RyaW5nKTsKICBsZXQgZXhwZWN0ZWQgPSBpbmRleDI7CiAgbGV0IGNvdW50MiA9IDA7CiAgbGV0IG1heDMgPSAwOwogIGlmICh0eXBlb2Ygc3Vic3RyaW5nICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgc3Vic3RyaW5nIik7CiAgfQogIHdoaWxlIChpbmRleDIgIT09IC0xKSB7CiAgICBpZiAoaW5kZXgyID09PSBleHBlY3RlZCkgewogICAgICBpZiAoKytjb3VudDIgPiBtYXgzKSB7CiAgICAgICAgbWF4MyA9IGNvdW50MjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY291bnQyID0gMTsKICAgIH0KICAgIGV4cGVjdGVkID0gaW5kZXgyICsgc3Vic3RyaW5nLmxlbmd0aDsKICAgIGluZGV4MiA9IHNvdXJjZS5pbmRleE9mKHN1YnN0cmluZywgZXhwZWN0ZWQpOwogIH0KICByZXR1cm4gbWF4MzsKfQp2YXIgaW5pdF9sb25nZXN0X3N0cmVhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xvbmdlc3Qtc3RyZWFrQDMuMS4wL25vZGVfbW9kdWxlcy9sb25nZXN0LXN0cmVhay9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1jb2RlLWFzLWluZGVudGVkLmpzCmZ1bmN0aW9uIGZvcm1hdENvZGVBc0luZGVudGVkKG5vZGUyLCBzdGF0ZSkgewogIHJldHVybiBCb29sZWFuKAogICAgc3RhdGUub3B0aW9ucy5mZW5jZXMgPT09IGZhbHNlICYmIG5vZGUyLnZhbHVlICYmIC8vIElmIHRoZXJl4oCZcyBubyBpbmZv4oCmCiAgICAhbm9kZTIubGFuZyAmJiAvLyBBbmQgdGhlcmXigJlzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVy4oCmCiAgICAvW14gXHJcbl0vLnRlc3Qobm9kZTIudmFsdWUpICYmIC8vIEFuZCB0aGUgdmFsdWUgZG9lc27igJl0IHN0YXJ0IG9yIGVuZCBpbiBhIGJsYW5r4oCmCiAgICAhL15bXHQgXSooPzpbXHJcbl18JCl8KD86XnxbXHJcbl0pW1x0IF0qJC8udGVzdChub2RlMi52YWx1ZSkKICApOwp9CnZhciBpbml0X2Zvcm1hdF9jb2RlX2FzX2luZGVudGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWZlbmNlLmpzCmZ1bmN0aW9uIGNoZWNrRmVuY2Uoc3RhdGUpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLmZlbmNlIHx8ICJgIjsKICBpZiAobWFya2VyICE9PSAiYCIgJiYgbWFya2VyICE9PSAifiIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgY29kZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmZlbmNlYCwgZXhwZWN0ZWQgYGAgYCBgYCBvciBgfmAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2ZlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1mZW5jZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvY29kZS5qcwpmdW5jdGlvbiBjb2RlKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja0ZlbmNlKHN0YXRlKTsKICBjb25zdCByYXcyID0gbm9kZTIudmFsdWUgfHwgIiI7CiAgY29uc3Qgc3VmZml4ID0gbWFya2VyID09PSAiYCIgPyAiR3JhdmVBY2NlbnQiIDogIlRpbGRlIjsKICBpZiAoZm9ybWF0Q29kZUFzSW5kZW50ZWQobm9kZTIsIHN0YXRlKSkgewogICAgY29uc3QgZXhpdDQgPSBzdGF0ZS5lbnRlcigiY29kZUluZGVudGVkIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZS5pbmRlbnRMaW5lcyhyYXcyLCBtYXA1KTsKICAgIGV4aXQ0KCk7CiAgICByZXR1cm4gdmFsdWUzOwogIH0KICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBzZXF1ZW5jZSA9IG1hcmtlci5yZXBlYXQoTWF0aC5tYXgobG9uZ2VzdFN0cmVhayhyYXcyLCBtYXJrZXIpICsgMSwgMykpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUuZW50ZXIoImNvZGVGZW5jZWQiKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKHNlcXVlbmNlKTsKICBpZiAobm9kZTIubGFuZykgewogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlLmVudGVyKGBjb2RlRmVuY2VkTGFuZyR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShub2RlMi5sYW5nLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6ICIgIiwKICAgICAgICBlbmNvZGU6IFsiYCJdLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogIH0KICBpZiAobm9kZTIubGFuZyAmJiBub2RlMi5tZXRhKSB7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoYGNvZGVGZW5jZWRNZXRhJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZS5zYWZlKG5vZGUyLm1ldGEsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogIlxuIiwKICAgICAgICBlbmNvZGU6IFsiYCJdLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJcbiIpOwogIGlmIChyYXcyKSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHJhdzIgKyAiXG4iKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShzZXF1ZW5jZSk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIG1hcDUobGluZSwgXzQsIGJsYW5rKSB7CiAgcmV0dXJuIChibGFuayA/ICIiIDogIiAgICAiKSArIGxpbmU7Cn0KdmFyIGluaXRfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9jb2RlLmpzIigpIHsKICAgIGluaXRfbG9uZ2VzdF9zdHJlYWsoKTsKICAgIGluaXRfZm9ybWF0X2NvZGVfYXNfaW5kZW50ZWQoKTsKICAgIGluaXRfY2hlY2tfZmVuY2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcXVvdGUuanMKZnVuY3Rpb24gY2hlY2tRdW90ZShzdGF0ZSkgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMucXVvdGUgfHwgJyInOwogIGlmIChtYXJrZXIgIT09ICciJyAmJiBtYXJrZXIgIT09ICInIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSB0aXRsZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnF1b3RlYCwgZXhwZWN0ZWQgYFwiYCwgb3IgYCdgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2RlZmluaXRpb24uanMKZnVuY3Rpb24gZGVmaW5pdGlvbihub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlKTsKICBjb25zdCBzdWZmaXggPSBxdW90ZSA9PT0gJyInID8gIlF1b3RlIiA6ICJBcG9zdHJvcGhlIjsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJkZWZpbml0aW9uIik7CiAgbGV0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlLnNhZmUoc3RhdGUuYXNzb2NpYXRpb25JZChub2RlMiksIHsKICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgIGFmdGVyOiAiXSIsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXTogIik7CiAgc3ViZXhpdCgpOwogIGlmICgKICAgIC8vIElmIHRoZXJl4oCZcyBubyB1cmwsIG9y4oCmCiAgICAhbm9kZTIudXJsIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlLnNhZmUobm9kZTIudXJsLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIj4iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIj4iKTsKICB9IGVsc2UgewogICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiXG4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogIH0KICBzdWJleGl0KCk7CiAgaWYgKG5vZGUyLnRpdGxlKSB7CiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlLnNhZmUobm9kZTIudGl0bGUsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogcXVvdGUsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X2RlZmluaXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZGVmaW5pdGlvbi5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWVtcGhhc2lzLmpzCmZ1bmN0aW9uIGNoZWNrRW1waGFzaXMoc3RhdGUpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLmVtcGhhc2lzIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgZW1waGFzaXMgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5lbXBoYXNpc2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19lbXBoYXNpcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZW1waGFzaXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoY29kZTQpIHsKICByZXR1cm4gIiYjeCIgKyBjb2RlNC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICI7IjsKfQp2YXIgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWNoYXJhY3Rlci1yZWZlcmVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXIvaW5kZXguanMKZnVuY3Rpb24gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpIHsKICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpKSB7CiAgICByZXR1cm4gMTsKICB9CiAgaWYgKHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgIHJldHVybiAyOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcwpmdW5jdGlvbiBlbmNvZGVJbmZvKG91dHNpZGUsIGluc2lkZSwgbWFya2VyKSB7CiAgY29uc3Qgb3V0c2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihvdXRzaWRlKTsKICBjb25zdCBpbnNpZGVLaW5kID0gY2xhc3NpZnlDaGFyYWN0ZXIoaW5zaWRlKTsKICBpZiAob3V0c2lkZUtpbmQgPT09IHZvaWQgMCkgewogICAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgICAgLy8gTGV0dGVyIGluc2lkZToKICAgICAgLy8gd2UgaGF2ZSB0byBlbmNvZGUgKmJvdGgqIGxldHRlcnMgZm9yIGBfYCBhcyBpdCBpcyBsb29zZXIuCiAgICAgIC8vIGl0IGFscmVhZHkgZm9ybXMgZm9yIGAqYCAoYW5kIEdGTXMgYH5gKS4KICAgICAgbWFya2VyID09PSAiXyIgPyB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9IDogeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgICAgLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBib3RoIChsZXR0ZXIsIHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGVuY29kZSBvdXRlciAobGV0dGVyKQogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IHRydWUgfQogICAgKTsKICB9CiAgaWYgKG91dHNpZGVLaW5kID09PSAxKSB7CiAgICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgICAvLyBMZXR0ZXIgaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICAgICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgICAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGJvdGggKHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICAgKTsKICB9CiAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgIC8vIExldHRlciBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgIC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgaW5uZXIgKHdoaXRlc3BhY2UpLgogICAgeyBpbnNpZGU6IHRydWUsIG91dHNpZGU6IGZhbHNlIH0KICApIDogKAogICAgLy8gUHVuY3R1YXRpb24gaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgKTsKfQp2YXIgaW5pdF9lbmNvZGVfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWluZm8uanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9lbXBoYXNpcy5qcwpmdW5jdGlvbiBlbXBoYXNpcyhub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgY29uc3QgbWFya2VyID0gY2hlY2tFbXBoYXNpcyhzdGF0ZSk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZS5lbnRlcigiZW1waGFzaXMiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBiZWZvcmUgPSB0cmFja2VyLm1vdmUobWFya2VyKTsKICBsZXQgYmV0d2VlbjIgPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBhZnRlcjogbWFya2VyLAogICAgICBiZWZvcmUsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KDApOwogIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKAogICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSwKICAgIGJldHdlZW5IZWFkLAogICAgbWFya2VyCiAgKTsKICBpZiAob3Blbi5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4yLnNsaWNlKDEpOwogIH0KICBjb25zdCBiZXR3ZWVuVGFpbCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoYmV0d2VlbjIubGVuZ3RoIC0gMSk7CiAgY29uc3QgY2xvc2U3ID0gZW5jb2RlSW5mbyhpbmZvLmFmdGVyLmNoYXJDb2RlQXQoMCksIGJldHdlZW5UYWlsLCBtYXJrZXIpOwogIGlmIChjbG9zZTcuaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGJldHdlZW4yLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuVGFpbCk7CiAgfQogIGNvbnN0IGFmdGVyID0gdHJhY2tlci5tb3ZlKG1hcmtlcik7CiAgZXhpdDMoKTsKICBzdGF0ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB7CiAgICBhZnRlcjogY2xvc2U3Lm91dHNpZGUsCiAgICBiZWZvcmU6IG9wZW4ub3V0c2lkZQogIH07CiAgcmV0dXJuIGJlZm9yZSArIGJldHdlZW4yICsgYWZ0ZXI7Cn0KZnVuY3Rpb24gZW1waGFzaXNQZWVrKF80LCBfMSwgc3RhdGUpIHsKICByZXR1cm4gc3RhdGUub3B0aW9ucy5lbXBoYXNpcyB8fCAiKiI7Cn0KdmFyIGluaXRfZW1waGFzaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZW1waGFzaXMuanMiKCkgewogICAgaW5pdF9jaGVja19lbXBoYXNpcygpOwogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9lbmNvZGVfaW5mbygpOwogICAgZW1waGFzaXMucGVlayA9IGVtcGhhc2lzUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0KHRyZWUsIHRlc3RPclZpc2l0b3IsIHZpc2l0b3JPclJldmVyc2UsIG1heWJlUmV2ZXJzZSkgewogIGxldCByZXZlcnNlOwogIGxldCB0ZXN0OwogIGxldCB2aXNpdG9yOwogIGlmICh0eXBlb2YgdGVzdE9yVmlzaXRvciA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvck9yUmV2ZXJzZSAhPT0gImZ1bmN0aW9uIikgewogICAgdGVzdCA9IHZvaWQgMDsKICAgIHZpc2l0b3IgPSB0ZXN0T3JWaXNpdG9yOwogICAgcmV2ZXJzZSA9IHZpc2l0b3JPclJldmVyc2U7CiAgfSBlbHNlIHsKICAgIHRlc3QgPSB0ZXN0T3JWaXNpdG9yOwogICAgdmlzaXRvciA9IHZpc2l0b3JPclJldmVyc2U7CiAgICByZXZlcnNlID0gbWF5YmVSZXZlcnNlOwogIH0KICB2aXNpdFBhcmVudHModHJlZSwgdGVzdCwgb3ZlcmxvYWQsIHJldmVyc2UpOwogIGZ1bmN0aW9uIG92ZXJsb2FkKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBpbmRleDIgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlMikgOiB2b2lkIDA7CiAgICByZXR1cm4gdmlzaXRvcihub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgaW5pdF9saWIxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Zpc2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlMiwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM7CiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID0gdHlwZW9mIHNldHRpbmdzLmluY2x1ZGVJbWFnZUFsdCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0IDogdHJ1ZTsKICBjb25zdCBpbmNsdWRlSHRtbCA9IHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlOwogIHJldHVybiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKfQpmdW5jdGlvbiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7CiAgaWYgKG5vZGUodmFsdWUyKSkgewogICAgaWYgKCJ2YWx1ZSIgaW4gdmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIudHlwZSA9PT0gImh0bWwiICYmICFpbmNsdWRlSHRtbCA/ICIiIDogdmFsdWUyLnZhbHVlOwogICAgfQogICAgaWYgKGluY2x1ZGVJbWFnZUFsdCAmJiAiYWx0IiBpbiB2YWx1ZTIgJiYgdmFsdWUyLmFsdCkgewogICAgICByZXR1cm4gdmFsdWUyLmFsdDsKICAgIH0KICAgIGlmICgiY2hpbGRyZW4iIGluIHZhbHVlMikgewogICAgICByZXR1cm4gYWxsKHZhbHVlMi5jaGlsZHJlbiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7CiAgICB9CiAgfQogIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgIHJldHVybiBhbGwodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIGFsbCh2YWx1ZXMsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgcmVzdWx0W2luZGV4Ml0gPSBvbmUodmFsdWVzW2luZGV4Ml0sIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpOwogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG5vZGUodmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4odmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiKTsKfQp2YXIgZW1wdHlPcHRpb25zOwp2YXIgaW5pdF9saWIxMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tc3RyaW5nQDQuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLXN0cmluZy9saWIvaW5kZXguanMiKCkgewogICAgZW1wdHlPcHRpb25zID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtaGVhZGluZy1hcy1zZXRleHQuanMKZnVuY3Rpb24gZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZSkgewogIGxldCBsaXRlcmFsV2l0aEJyZWFrID0gZmFsc2U7CiAgdmlzaXQobm9kZTIsIGZ1bmN0aW9uKG5vZGUzKSB7CiAgICBpZiAoInZhbHVlIiBpbiBub2RlMyAmJiAvXHI/XG58XHIvLnRlc3Qobm9kZTMudmFsdWUpIHx8IG5vZGUzLnR5cGUgPT09ICJicmVhayIpIHsKICAgICAgbGl0ZXJhbFdpdGhCcmVhayA9IHRydWU7CiAgICAgIHJldHVybiBFWElUOwogICAgfQogIH0pOwogIHJldHVybiBCb29sZWFuKAogICAgKCFub2RlMi5kZXB0aCB8fCBub2RlMi5kZXB0aCA8IDMpICYmIHRvU3RyaW5nKG5vZGUyKSAmJiAoc3RhdGUub3B0aW9ucy5zZXRleHQgfHwgbGl0ZXJhbFdpdGhCcmVhaykKICApOwp9CnZhciBpbml0X2Zvcm1hdF9oZWFkaW5nX2FzX3NldGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWhlYWRpbmctYXMtc2V0ZXh0LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdCgpOwogICAgaW5pdF9tZGFzdF91dGlsX3RvX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2hlYWRpbmcuanMKZnVuY3Rpb24gaGVhZGluZyhub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgY29uc3QgcmFuayA9IE1hdGgubWF4KE1hdGgubWluKDYsIG5vZGUyLmRlcHRoIHx8IDEpLCAxKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBpZiAoZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZSkpIHsKICAgIGNvbnN0IGV4aXQ0ID0gc3RhdGUuZW50ZXIoImhlYWRpbmdTZXRleHQiKTsKICAgIGNvbnN0IHN1YmV4aXQyID0gc3RhdGUuZW50ZXIoInBocmFzaW5nIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZS5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKSwKICAgICAgYmVmb3JlOiAiXG4iLAogICAgICBhZnRlcjogIlxuIgogICAgfSk7CiAgICBzdWJleGl0MigpOwogICAgZXhpdDQoKTsKICAgIHJldHVybiB2YWx1ZTMgKyAiXG4iICsgKHJhbmsgPT09IDEgPyAiPSIgOiAiLSIpLnJlcGVhdCgKICAgICAgLy8gVGhlIHdob2xlIHNpemXigKYKICAgICAgdmFsdWUzLmxlbmd0aCAtIC8vIE1pbnVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0IEVPTCAob3IKICAgICAgLy8gMCBpZiB0aGVyZSBpcyBub25lKeKApgogICAgICAoTWF0aC5tYXgodmFsdWUzLmxhc3RJbmRleE9mKCJcciIpLCB2YWx1ZTMubGFzdEluZGV4T2YoIlxuIikpICsgMSkKICAgICk7CiAgfQogIGNvbnN0IHNlcXVlbmNlID0gIiMiLnJlcGVhdChyYW5rKTsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJoZWFkaW5nQXR4Iik7CiAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJwaHJhc2luZyIpOwogIHRyYWNrZXIubW92ZShzZXF1ZW5jZSArICIgIik7CiAgbGV0IHZhbHVlMiA9IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICBiZWZvcmU6ICIjICIsCiAgICBhZnRlcjogIlxuIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgaWYgKC9eW1x0IF0vLnRlc3QodmFsdWUyKSkgewogICAgdmFsdWUyID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMi5jaGFyQ29kZUF0KDApKSArIHZhbHVlMi5zbGljZSgxKTsKICB9CiAgdmFsdWUyID0gdmFsdWUyID8gc2VxdWVuY2UgKyAiICIgKyB2YWx1ZTIgOiBzZXF1ZW5jZTsKICBpZiAoc3RhdGUub3B0aW9ucy5jbG9zZUF0eCkgewogICAgdmFsdWUyICs9ICIgIiArIHNlcXVlbmNlOwogIH0KICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X2hlYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaGVhZGluZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X2Zvcm1hdF9oZWFkaW5nX2FzX3NldGV4dCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2h0bWwuanMKZnVuY3Rpb24gaHRtbChub2RlMikgewogIHJldHVybiBub2RlMi52YWx1ZSB8fCAiIjsKfQpmdW5jdGlvbiBodG1sUGVlaygpIHsKICByZXR1cm4gIjwiOwp9CnZhciBpbml0X2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaHRtbC5qcyIoKSB7CiAgICBodG1sLnBlZWsgPSBodG1sUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS5qcwpmdW5jdGlvbiBpbWFnZShub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlKTsKICBjb25zdCBzdWZmaXggPSBxdW90ZSA9PT0gJyInID8gIlF1b3RlIiA6ICJBcG9zdHJvcGhlIjsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJpbWFnZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiIVsiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUuc2FmZShub2RlMi5hbHQsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiXSIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdKCIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxl4oCmCiAgICAhbm9kZTIudXJsICYmIG5vZGUyLnRpdGxlIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlLnNhZmUobm9kZTIudXJsLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIj4iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIj4iKTsKICB9IGVsc2UgewogICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiKSIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgfQogIHN1YmV4aXQoKTsKICBpZiAobm9kZTIudGl0bGUpIHsKICAgIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcihgdGl0bGUke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIiAiICsgcXVvdGUpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIpIik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGltYWdlUGVlaygpIHsKICByZXR1cm4gIiEiOwp9CnZhciBpbml0X2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICAgIGltYWdlLnBlZWsgPSBpbWFnZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCB0eXBlNSA9IG5vZGUyLnJlZmVyZW5jZVR5cGU7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZS5lbnRlcigiaW1hZ2VSZWZlcmVuY2UiKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJsYWJlbCIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIiFbIik7CiAgY29uc3QgYWx0ID0gc3RhdGUuc2FmZShub2RlMi5hbHQsIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShhbHQgKyAiXVsiKTsKICBzdWJleGl0KCk7CiAgY29uc3Qgc3RhY2sgPSBzdGF0ZS5zdGFjazsKICBzdGF0ZS5zdGFjayA9IFtdOwogIHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigicmVmZXJlbmNlIik7CiAgY29uc3QgcmVmZXJlbmNlID0gc3RhdGUuc2FmZShzdGF0ZS5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBzdWJleGl0KCk7CiAgc3RhdGUuc3RhY2sgPSBzdGFjazsKICBleGl0MygpOwogIGlmICh0eXBlNSA9PT0gImZ1bGwiIHx8ICFhbHQgfHwgYWx0ICE9PSByZWZlcmVuY2UpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmVmZXJlbmNlICsgIl0iKTsKICB9IGVsc2UgaWYgKHR5cGU1ID09PSAic2hvcnRjdXQiKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgLTEpOwogIH0gZWxzZSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgfQogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gaW1hZ2VSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiISI7Cn0KdmFyIGluaXRfaW1hZ2VfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbWFnZVJlZmVyZW5jZS5wZWVrID0gaW1hZ2VSZWZlcmVuY2VQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2lubGluZS1jb2RlLmpzCmZ1bmN0aW9uIGlubGluZUNvZGUobm9kZTIsIF80LCBzdGF0ZSkgewogIGxldCB2YWx1ZTIgPSBub2RlMi52YWx1ZSB8fCAiIjsKICBsZXQgc2VxdWVuY2UgPSAiYCI7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlIChuZXcgUmVnRXhwKCIoXnxbXmBdKSIgKyBzZXF1ZW5jZSArICIoW15gXXwkKSIpLnRlc3QodmFsdWUyKSkgewogICAgc2VxdWVuY2UgKz0gImAiOwogIH0KICBpZiAoL1teIFxyXG5dLy50ZXN0KHZhbHVlMikgJiYgKC9eWyBcclxuXS8udGVzdCh2YWx1ZTIpICYmIC9bIFxyXG5dJC8udGVzdCh2YWx1ZTIpIHx8IC9eYHxgJC8udGVzdCh2YWx1ZTIpKSkgewogICAgdmFsdWUyID0gIiAiICsgdmFsdWUyICsgIiAiOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBzdGF0ZS51bnNhZmUubGVuZ3RoKSB7CiAgICBjb25zdCBwYXR0ZXJuID0gc3RhdGUudW5zYWZlW2luZGV4Ml07CiAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGUuY29tcGlsZVBhdHRlcm4ocGF0dGVybik7CiAgICBsZXQgbWF0Y2gyOwogICAgaWYgKCFwYXR0ZXJuLmF0QnJlYWspIGNvbnRpbnVlOwogICAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZTIpKSB7CiAgICAgIGxldCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXg7CiAgICAgIGlmICh2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMpID09PSAxMCAmJiB2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMgLSAxKSA9PT0gMTMpIHsKICAgICAgICBwb3NpdGlvbjMtLTsKICAgICAgfQogICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgcG9zaXRpb24zKSArICIgIiArIHZhbHVlMi5zbGljZShtYXRjaDIuaW5kZXggKyAxKTsKICAgIH0KICB9CiAgcmV0dXJuIHNlcXVlbmNlICsgdmFsdWUyICsgc2VxdWVuY2U7Cn0KZnVuY3Rpb24gaW5saW5lQ29kZVBlZWsoKSB7CiAgcmV0dXJuICJgIjsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcyIoKSB7CiAgICBpbmxpbmVDb2RlLnBlZWsgPSBpbmxpbmVDb2RlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWxpbmstYXMtYXV0b2xpbmsuanMKZnVuY3Rpb24gZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlKSB7CiAgY29uc3QgcmF3MiA9IHRvU3RyaW5nKG5vZGUyKTsKICByZXR1cm4gQm9vbGVhbigKICAgICFzdGF0ZS5vcHRpb25zLnJlc291cmNlTGluayAmJiAvLyBJZiB0aGVyZeKAmXMgYSB1cmzigKYKICAgIG5vZGUyLnVybCAmJiAvLyBBbmQgdGhlcmXigJlzIGEgbm8gdGl0bGXigKYKICAgICFub2RlMi50aXRsZSAmJiAvLyBBbmQgdGhlIGNvbnRlbnQgb2YgYG5vZGVgIGlzIGEgc2luZ2xlIHRleHQgbm9kZeKApgogICAgbm9kZTIuY2hpbGRyZW4gJiYgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIG5vZGUyLmNoaWxkcmVuWzBdLnR5cGUgPT09ICJ0ZXh0IiAmJiAvLyBBbmQgaWYgdGhlIHVybCBpcyB0aGUgc2FtZSBhcyB0aGUgY29udGVudOKApgogICAgKHJhdzIgPT09IG5vZGUyLnVybCB8fCAibWFpbHRvOiIgKyByYXcyID09PSBub2RlMi51cmwpICYmIC8vIEFuZCB0aGF0IHN0YXJ0cyB3LyBhIHByb3RvY29s4oCmCiAgICAvXlthLXpdW2EteisuLV0rOi9pLnRlc3Qobm9kZTIudXJsKSAmJiAvLyBBbmQgdGhhdCBkb2VzbuKAmXQgY29udGFpbiBBU0NJSSBjb250cm9sIGNvZGVzIChjaGFyYWN0ZXIgZXNjYXBlcyBhbmQKICAgIC8vIHJlZmVyZW5jZXMgZG9u4oCZdCB3b3JrKSwgc3BhY2UsIG9yIGFuZ2xlIGJyYWNrZXRz4oCmCiAgICAhL1tcMC0gPD5cdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApOwp9CnZhciBpbml0X2Zvcm1hdF9saW5rX2FzX2F1dG9saW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtbGluay1hcy1hdXRvbGluay5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fc3RyaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay5qcwpmdW5jdGlvbiBsaW5rKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUpOwogIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnIicgPyAiUXVvdGUiIDogIkFwb3N0cm9waGUiOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCBleGl0MzsKICBsZXQgc3ViZXhpdDsKICBpZiAoZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlKSkgewogICAgY29uc3Qgc3RhY2sgPSBzdGF0ZS5zdGFjazsKICAgIHN0YXRlLnN0YWNrID0gW107CiAgICBleGl0MyA9IHN0YXRlLmVudGVyKCJhdXRvbGluayIpOwogICAgbGV0IHZhbHVlMyA9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMywKICAgICAgICBhZnRlcjogIj4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgiPiIpOwogICAgZXhpdDMoKTsKICAgIHN0YXRlLnN0YWNrID0gc3RhY2s7CiAgICByZXR1cm4gdmFsdWUzOwogIH0KICBleGl0MyA9IHN0YXRlLmVudGVyKCJsaW5rIik7CiAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJsYWJlbCIpOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlsiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgIGFmdGVyOiAiXSgiLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl0oIik7CiAgc3ViZXhpdCgpOwogIGlmICgKICAgIC8vIElmIHRoZXJl4oCZcyBubyB1cmwgYnV0IHRoZXJlIGlzIGEgdGl0bGXigKYKICAgICFub2RlMi51cmwgJiYgbm9kZTIudGl0bGUgfHwgLy8gSWYgdGhlcmUgYXJlIGNvbnRyb2wgY2hhcmFjdGVycyBvciB3aGl0ZXNwYWNlLgogICAgL1tcMC0gXHUwMDdGXS8udGVzdChub2RlMi51cmwpCiAgKSB7CiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUuZW50ZXIoImRlc3RpbmF0aW9uUmF3Iik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZS5zYWZlKG5vZGUyLnVybCwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBub2RlMi50aXRsZSA/ICIgIiA6ICIpIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKGB0aXRsZSR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiICIgKyBxdW90ZSk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZS5zYWZlKG5vZGUyLnRpdGxlLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6IHF1b3RlLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShxdW90ZSk7CiAgICBzdWJleGl0KCk7CiAgfQogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIikiKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbGlua1BlZWsobm9kZTIsIF80LCBzdGF0ZSkgewogIHJldHVybiBmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlMiwgc3RhdGUpID8gIjwiIDogIlsiOwp9CnZhciBpbml0X2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgICBpbml0X2Zvcm1hdF9saW5rX2FzX2F1dG9saW5rKCk7CiAgICBsaW5rLnBlZWsgPSBsaW5rUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBsaW5rUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCB0eXBlNSA9IG5vZGUyLnJlZmVyZW5jZVR5cGU7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZS5lbnRlcigibGlua1JlZmVyZW5jZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiWyIpOwogIGNvbnN0IHRleHQ5ID0gc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSh0ZXh0OSArICJdWyIpOwogIHN1YmV4aXQoKTsKICBjb25zdCBzdGFjayA9IHN0YXRlLnN0YWNrOwogIHN0YXRlLnN0YWNrID0gW107CiAgc3ViZXhpdCA9IHN0YXRlLmVudGVyKCJyZWZlcmVuY2UiKTsKICBjb25zdCByZWZlcmVuY2UgPSBzdGF0ZS5zYWZlKHN0YXRlLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHN1YmV4aXQoKTsKICBzdGF0ZS5zdGFjayA9IHN0YWNrOwogIGV4aXQzKCk7CiAgaWYgKHR5cGU1ID09PSAiZnVsbCIgfHwgIXRleHQ5IHx8IHRleHQ5ICE9PSByZWZlcmVuY2UpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmVmZXJlbmNlICsgIl0iKTsKICB9IGVsc2UgaWYgKHR5cGU1ID09PSAic2hvcnRjdXQiKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgLTEpOwogIH0gZWxzZSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgfQogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbGlua1JlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICJbIjsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBsaW5rUmVmZXJlbmNlLnBlZWsgPSBsaW5rUmVmZXJlbmNlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0KHN0YXRlKSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUub3B0aW9ucy5idWxsZXQgfHwgIioiOwogIGlmIChtYXJrZXIgIT09ICIqIiAmJiBtYXJrZXIgIT09ICIrIiAmJiBtYXJrZXIgIT09ICItIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldGAsIGV4cGVjdGVkIGAqYCwgYCtgLCBvciBgLWAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2J1bGxldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW90aGVyLmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0T3RoZXIoc3RhdGUpIHsKICBjb25zdCBidWxsZXQgPSBjaGVja0J1bGxldChzdGF0ZSk7CiAgY29uc3QgYnVsbGV0T3RoZXIgPSBzdGF0ZS5vcHRpb25zLmJ1bGxldE90aGVyOwogIGlmICghYnVsbGV0T3RoZXIpIHsKICAgIHJldHVybiBidWxsZXQgPT09ICIqIiA/ICItIiA6ICIqIjsKICB9CiAgaWYgKGJ1bGxldE90aGVyICE9PSAiKiIgJiYgYnVsbGV0T3RoZXIgIT09ICIrIiAmJiBidWxsZXRPdGhlciAhPT0gIi0iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBidWxsZXRPdGhlciArICJgIGZvciBgb3B0aW9ucy5idWxsZXRPdGhlcmAsIGV4cGVjdGVkIGAqYCwgYCtgLCBvciBgLWAiCiAgICApOwogIH0KICBpZiAoYnVsbGV0T3RoZXIgPT09IGJ1bGxldCkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiRXhwZWN0ZWQgYGJ1bGxldGAgKGAiICsgYnVsbGV0ICsgImApIGFuZCBgYnVsbGV0T3RoZXJgIChgIiArIGJ1bGxldE90aGVyICsgImApIHRvIGJlIGRpZmZlcmVudCIKICAgICk7CiAgfQogIHJldHVybiBidWxsZXRPdGhlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXRfb3RoZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vdGhlci5qcyIoKSB7CiAgICBpbml0X2NoZWNrX2J1bGxldCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3JkZXJlZC5qcwpmdW5jdGlvbiBjaGVja0J1bGxldE9yZGVyZWQoc3RhdGUpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZS5vcHRpb25zLmJ1bGxldE9yZGVyZWQgfHwgIi4iOwogIGlmIChtYXJrZXIgIT09ICIuIiAmJiBtYXJrZXIgIT09ICIpIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldE9yZGVyZWRgLCBleHBlY3RlZCBgLmAgb3IgYClgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXRfb3JkZXJlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLmpzCmZ1bmN0aW9uIGNoZWNrUnVsZShzdGF0ZSkgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMucnVsZSB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIi0iICYmIG1hcmtlciAhPT0gIl8iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMucnVsZWAsIGV4cGVjdGVkIGAqYCwgYC1gLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3J1bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMKZnVuY3Rpb24gbGlzdDIobm9kZTIsIHBhcmVudCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJsaXN0Iik7CiAgY29uc3QgYnVsbGV0Q3VycmVudCA9IHN0YXRlLmJ1bGxldEN1cnJlbnQ7CiAgbGV0IGJ1bGxldCA9IG5vZGUyLm9yZGVyZWQgPyBjaGVja0J1bGxldE9yZGVyZWQoc3RhdGUpIDogY2hlY2tCdWxsZXQoc3RhdGUpOwogIGNvbnN0IGJ1bGxldE90aGVyID0gbm9kZTIub3JkZXJlZCA/IGJ1bGxldCA9PT0gIi4iID8gIikiIDogIi4iIDogY2hlY2tCdWxsZXRPdGhlcihzdGF0ZSk7CiAgbGV0IHVzZURpZmZlcmVudE1hcmtlciA9IHBhcmVudCAmJiBzdGF0ZS5idWxsZXRMYXN0VXNlZCA/IGJ1bGxldCA9PT0gc3RhdGUuYnVsbGV0TGFzdFVzZWQgOiBmYWxzZTsKICBpZiAoIW5vZGUyLm9yZGVyZWQpIHsKICAgIGNvbnN0IGZpcnN0TGlzdEl0ZW0gPSBub2RlMi5jaGlsZHJlbiA/IG5vZGUyLmNoaWxkcmVuWzBdIDogdm9pZCAwOwogICAgaWYgKAogICAgICAvLyBCdWxsZXQgY291bGQgYmUgdXNlZCBhcyBhIHRoZW1hdGljIGJyZWFrIG1hcmtlcjoKICAgICAgKGJ1bGxldCA9PT0gIioiIHx8IGJ1bGxldCA9PT0gIi0iKSAmJiAvLyBFbXB0eSBmaXJzdCBsaXN0IGl0ZW06CiAgICAgIGZpcnN0TGlzdEl0ZW0gJiYgKCFmaXJzdExpc3RJdGVtLmNoaWxkcmVuIHx8ICFmaXJzdExpc3RJdGVtLmNoaWxkcmVuWzBdKSAmJiAvLyBEaXJlY3RseSBpbiB0d28gb3RoZXIgbGlzdCBpdGVtczoKICAgICAgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoIC0gMV0gPT09ICJsaXN0IiAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAyXSA9PT0gImxpc3RJdGVtIiAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAzXSA9PT0gImxpc3QiICYmIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDRdID09PSAibGlzdEl0ZW0iICYmIC8vIFRoYXQgYXJlIGVhY2ggdGhlIGZpcnN0IGNoaWxkLgogICAgICBzdGF0ZS5pbmRleFN0YWNrW3N0YXRlLmluZGV4U3RhY2subGVuZ3RoIC0gMV0gPT09IDAgJiYgc3RhdGUuaW5kZXhTdGFja1tzdGF0ZS5pbmRleFN0YWNrLmxlbmd0aCAtIDJdID09PSAwICYmIHN0YXRlLmluZGV4U3RhY2tbc3RhdGUuaW5kZXhTdGFjay5sZW5ndGggLSAzXSA9PT0gMAogICAgKSB7CiAgICAgIHVzZURpZmZlcmVudE1hcmtlciA9IHRydWU7CiAgICB9CiAgICBpZiAoY2hlY2tSdWxlKHN0YXRlKSA9PT0gYnVsbGV0ICYmIGZpcnN0TGlzdEl0ZW0pIHsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBub2RlMi5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICBjb25zdCBpdGVtID0gbm9kZTIuY2hpbGRyZW5baW5kZXgyXTsKICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnR5cGUgPT09ICJsaXN0SXRlbSIgJiYgaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuWzBdICYmIGl0ZW0uY2hpbGRyZW5bMF0udHlwZSA9PT0gInRoZW1hdGljQnJlYWsiKSB7CiAgICAgICAgICB1c2VEaWZmZXJlbnRNYXJrZXIgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmICh1c2VEaWZmZXJlbnRNYXJrZXIpIHsKICAgIGJ1bGxldCA9IGJ1bGxldE90aGVyOwogIH0KICBzdGF0ZS5idWxsZXRDdXJyZW50ID0gYnVsbGV0OwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlLmNvbnRhaW5lckZsb3cobm9kZTIsIGluZm8pOwogIHN0YXRlLmJ1bGxldExhc3RVc2VkID0gYnVsbGV0OwogIHN0YXRlLmJ1bGxldEN1cnJlbnQgPSBidWxsZXRDdXJyZW50OwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9saXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICAgIGluaXRfY2hlY2tfYnVsbGV0X290aGVyKCk7CiAgICBpbml0X2NoZWNrX2J1bGxldF9vcmRlcmVkKCk7CiAgICBpbml0X2NoZWNrX3J1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stbGlzdC1pdGVtLWluZGVudC5qcwpmdW5jdGlvbiBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlKSB7CiAgY29uc3Qgc3R5bGUgPSBzdGF0ZS5vcHRpb25zLmxpc3RJdGVtSW5kZW50IHx8ICJvbmUiOwogIGlmIChzdHlsZSAhPT0gInRhYiIgJiYgc3R5bGUgIT09ICJvbmUiICYmIHN0eWxlICE9PSAibWl4ZWQiKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBzdHlsZSArICJgIGZvciBgb3B0aW9ucy5saXN0SXRlbUluZGVudGAsIGV4cGVjdGVkIGB0YWJgLCBgb25lYCwgb3IgYG1peGVkYCIKICAgICk7CiAgfQogIHJldHVybiBzdHlsZTsKfQp2YXIgaW5pdF9jaGVja19saXN0X2l0ZW1faW5kZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1saXN0LWl0ZW0taW5kZW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LWl0ZW0uanMKZnVuY3Rpb24gbGlzdEl0ZW0obm9kZTIsIHBhcmVudCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBsaXN0SXRlbUluZGVudCA9IGNoZWNrTGlzdEl0ZW1JbmRlbnQoc3RhdGUpOwogIGxldCBidWxsZXQgPSBzdGF0ZS5idWxsZXRDdXJyZW50IHx8IGNoZWNrQnVsbGV0KHN0YXRlKTsKICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAibGlzdCIgJiYgcGFyZW50Lm9yZGVyZWQpIHsKICAgIGJ1bGxldCA9ICh0eXBlb2YgcGFyZW50LnN0YXJ0ID09PSAibnVtYmVyIiAmJiBwYXJlbnQuc3RhcnQgPiAtMSA/IHBhcmVudC5zdGFydCA6IDEpICsgKHN0YXRlLm9wdGlvbnMuaW5jcmVtZW50TGlzdE1hcmtlciA9PT0gZmFsc2UgPyAwIDogcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZTIpKSArIGJ1bGxldDsKICB9CiAgbGV0IHNpemUgPSBidWxsZXQubGVuZ3RoICsgMTsKICBpZiAobGlzdEl0ZW1JbmRlbnQgPT09ICJ0YWIiIHx8IGxpc3RJdGVtSW5kZW50ID09PSAibWl4ZWQiICYmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJsaXN0IiAmJiBwYXJlbnQuc3ByZWFkIHx8IG5vZGUyLnNwcmVhZCkpIHsKICAgIHNpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIDQpICogNDsKICB9CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgdHJhY2tlci5tb3ZlKGJ1bGxldCArICIgIi5yZXBlYXQoc2l6ZSAtIGJ1bGxldC5sZW5ndGgpKTsKICB0cmFja2VyLnNoaWZ0KHNpemUpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUuZW50ZXIoImxpc3RJdGVtIik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUuaW5kZW50TGluZXMoCiAgICBzdGF0ZS5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICBtYXA3CiAgKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7CiAgZnVuY3Rpb24gbWFwNyhsaW5lLCBpbmRleDIsIGJsYW5rKSB7CiAgICBpZiAoaW5kZXgyKSB7CiAgICAgIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgIi5yZXBlYXQoc2l6ZSkpICsgbGluZTsKICAgIH0KICAgIHJldHVybiAoYmxhbmsgPyBidWxsZXQgOiBidWxsZXQgKyAiICIucmVwZWF0KHNpemUgLSBidWxsZXQubGVuZ3RoKSkgKyBsaW5lOwogIH0KfQp2YXIgaW5pdF9saXN0X2l0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGlzdC1pdGVtLmpzIigpIHsKICAgIGluaXRfY2hlY2tfYnVsbGV0KCk7CiAgICBpbml0X2NoZWNrX2xpc3RfaXRlbV9pbmRlbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9wYXJhZ3JhcGguanMKZnVuY3Rpb24gcGFyYWdyYXBoKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJwYXJhZ3JhcGgiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoInBocmFzaW5nIik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIGluZm8pOwogIHN1YmV4aXQoKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfcGFyYWdyYXBoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3BhcmFncmFwaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2xpYi9pbmRleC5qcwp2YXIgcGhyYXNpbmc7CnZhciBpbml0X2xpYjE0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX2lzKCk7CiAgICBwaHJhc2luZyA9IC8qKiBAdHlwZSB7KG5vZGU/OiB1bmtub3duKSA9PiBub2RlIGlzIEV4Y2x1ZGU8UGhyYXNpbmdDb250ZW50LCBIdG1sPn0gKi8KICAgIGNvbnZlcnQoWwogICAgICAiYnJlYWsiLAogICAgICAiZGVsZXRlIiwKICAgICAgImVtcGhhc2lzIiwKICAgICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZWQgc2luY2UgZm9vdG5vdGVzIHdlcmUgYWRkZWQgdG8gR0ZNLgogICAgICAiZm9vdG5vdGUiLAogICAgICAiZm9vdG5vdGVSZWZlcmVuY2UiLAogICAgICAiaW1hZ2UiLAogICAgICAiaW1hZ2VSZWZlcmVuY2UiLAogICAgICAiaW5saW5lQ29kZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWF0aGA6CiAgICAgICJpbmxpbmVNYXRoIiwKICAgICAgImxpbmsiLAogICAgICAibGlua1JlZmVyZW5jZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWR4YDoKICAgICAgIm1keEpzeFRleHRFbGVtZW50IiwKICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1tZHhgOgogICAgICAibWR4VGV4dEV4cHJlc3Npb24iLAogICAgICAic3Ryb25nIiwKICAgICAgInRleHQiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLWRpcmVjdGl2ZWA6CiAgICAgICJ0ZXh0RGlyZWN0aXZlIgogICAgXSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9yb290LmpzCmZ1bmN0aW9uIHJvb3Qobm9kZTIsIF80LCBzdGF0ZSwgaW5mbykgewogIGNvbnN0IGhhc1BocmFzaW5nID0gbm9kZTIuY2hpbGRyZW4uc29tZShmdW5jdGlvbihkNSkgewogICAgcmV0dXJuIHBocmFzaW5nKGQ1KTsKICB9KTsKICBjb25zdCBjb250YWluZXIgPSBoYXNQaHJhc2luZyA/IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nIDogc3RhdGUuY29udGFpbmVyRmxvdzsKICByZXR1cm4gY29udGFpbmVyLmNhbGwoc3RhdGUsIG5vZGUyLCBpbmZvKTsKfQp2YXIgaW5pdF9yb290ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3Jvb3QuanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3BocmFzaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXN0cm9uZy5qcwpmdW5jdGlvbiBjaGVja1N0cm9uZyhzdGF0ZSkgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlLm9wdGlvbnMuc3Ryb25nIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgc3Ryb25nIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuc3Ryb25nYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3N0cm9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stc3Ryb25nLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMKZnVuY3Rpb24gc3Ryb25nKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja1N0cm9uZyhzdGF0ZSk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZS5lbnRlcigic3Ryb25nIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlciArIG1hcmtlcik7CiAgbGV0IGJldHdlZW4yID0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgYWZ0ZXI6IG1hcmtlciwKICAgICAgYmVmb3JlLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIGNvbnN0IGJldHdlZW5IZWFkID0gYmV0d2VlbjIuY2hhckNvZGVBdCgwKTsKICBjb25zdCBvcGVuID0gZW5jb2RlSW5mbygKICAgIGluZm8uYmVmb3JlLmNoYXJDb2RlQXQoaW5mby5iZWZvcmUubGVuZ3RoIC0gMSksCiAgICBiZXR3ZWVuSGVhZCwKICAgIG1hcmtlcgogICk7CiAgaWYgKG9wZW4uaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuSGVhZCkgKyBiZXR3ZWVuMi5zbGljZSgxKTsKICB9CiAgY29uc3QgYmV0d2VlblRhaWwgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KGJldHdlZW4yLmxlbmd0aCAtIDEpOwogIGNvbnN0IGNsb3NlNyA9IGVuY29kZUluZm8oaW5mby5hZnRlci5jaGFyQ29kZUF0KDApLCBiZXR3ZWVuVGFpbCwgbWFya2VyKTsKICBpZiAoY2xvc2U3Lmluc2lkZSkgewogICAgYmV0d2VlbjIgPSBiZXR3ZWVuMi5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlblRhaWwpOwogIH0KICBjb25zdCBhZnRlciA9IHRyYWNrZXIubW92ZShtYXJrZXIgKyBtYXJrZXIpOwogIGV4aXQzKCk7CiAgc3RhdGUuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvID0gewogICAgYWZ0ZXI6IGNsb3NlNy5vdXRzaWRlLAogICAgYmVmb3JlOiBvcGVuLm91dHNpZGUKICB9OwogIHJldHVybiBiZWZvcmUgKyBiZXR3ZWVuMiArIGFmdGVyOwp9CmZ1bmN0aW9uIHN0cm9uZ1BlZWsoXzQsIF8xLCBzdGF0ZSkgewogIHJldHVybiBzdGF0ZS5vcHRpb25zLnN0cm9uZyB8fCAiKiI7Cn0KdmFyIGluaXRfc3Ryb25nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3N0cm9uZy5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3N0cm9uZygpOwogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9lbmNvZGVfaW5mbygpOwogICAgc3Ryb25nLnBlZWsgPSBzdHJvbmdQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RleHQuanMKZnVuY3Rpb24gdGV4dChub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgcmV0dXJuIHN0YXRlLnNhZmUobm9kZTIudmFsdWUsIGluZm8pOwp9CnZhciBpbml0X3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGV4dC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUtcmVwZXRpdGlvbi5qcwpmdW5jdGlvbiBjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlKSB7CiAgY29uc3QgcmVwZXRpdGlvbiA9IHN0YXRlLm9wdGlvbnMucnVsZVJlcGV0aXRpb24gfHwgMzsKICBpZiAocmVwZXRpdGlvbiA8IDMpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgcnVsZXMgd2l0aCByZXBldGl0aW9uIGAiICsgcmVwZXRpdGlvbiArICJgIGZvciBgb3B0aW9ucy5ydWxlUmVwZXRpdGlvbmAsIGV4cGVjdGVkIGAzYCBvciBtb3JlIgogICAgKTsKICB9CiAgcmV0dXJuIHJlcGV0aXRpb247Cn0KdmFyIGluaXRfY2hlY2tfcnVsZV9yZXBldGl0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLXJlcGV0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzCmZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoXzQsIF8xLCBzdGF0ZSkgewogIGNvbnN0IHZhbHVlMiA9IChjaGVja1J1bGUoc3RhdGUpICsgKHN0YXRlLm9wdGlvbnMucnVsZVNwYWNlcyA/ICIgIiA6ICIiKSkucmVwZWF0KGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUpKTsKICByZXR1cm4gc3RhdGUub3B0aW9ucy5ydWxlU3BhY2VzID8gdmFsdWUyLnNsaWNlKDAsIC0xKSA6IHZhbHVlMjsKfQp2YXIgaW5pdF90aGVtYXRpY19icmVhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90aGVtYXRpYy1icmVhay5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3J1bGVfcmVwZXRpdGlvbigpOwogICAgaW5pdF9jaGVja19ydWxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5kZXguanMKdmFyIGhhbmRsZTsKdmFyIGluaXRfaGFuZGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfYmxvY2txdW90ZSgpOwogICAgaW5pdF9icmVhaygpOwogICAgaW5pdF9jb2RlKCk7CiAgICBpbml0X2RlZmluaXRpb24oKTsKICAgIGluaXRfZW1waGFzaXMoKTsKICAgIGluaXRfaGVhZGluZygpOwogICAgaW5pdF9odG1sKCk7CiAgICBpbml0X2ltYWdlKCk7CiAgICBpbml0X2ltYWdlX3JlZmVyZW5jZSgpOwogICAgaW5pdF9pbmxpbmVfY29kZSgpOwogICAgaW5pdF9saW5rKCk7CiAgICBpbml0X2xpbmtfcmVmZXJlbmNlKCk7CiAgICBpbml0X2xpc3QoKTsKICAgIGluaXRfbGlzdF9pdGVtKCk7CiAgICBpbml0X3BhcmFncmFwaCgpOwogICAgaW5pdF9yb290KCk7CiAgICBpbml0X3N0cm9uZygpOwogICAgaW5pdF90ZXh0KCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrKCk7CiAgICBoYW5kbGUgPSB7CiAgICAgIGJsb2NrcXVvdGUsCiAgICAgIGJyZWFrOiBoYXJkQnJlYWssCiAgICAgIGNvZGUsCiAgICAgIGRlZmluaXRpb24sCiAgICAgIGVtcGhhc2lzLAogICAgICBoYXJkQnJlYWssCiAgICAgIGhlYWRpbmcsCiAgICAgIGh0bWwsCiAgICAgIGltYWdlLAogICAgICBpbWFnZVJlZmVyZW5jZSwKICAgICAgaW5saW5lQ29kZSwKICAgICAgbGluaywKICAgICAgbGlua1JlZmVyZW5jZSwKICAgICAgbGlzdDogbGlzdDIsCiAgICAgIGxpc3RJdGVtLAogICAgICBwYXJhZ3JhcGgsCiAgICAgIHJvb3QsCiAgICAgIHN0cm9uZywKICAgICAgdGV4dCwKICAgICAgdGhlbWF0aWNCcmVhawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2pvaW4uanMKZnVuY3Rpb24gam9pbkRlZmF1bHRzKGxlZnQsIHJpZ2h0LCBwYXJlbnQsIHN0YXRlKSB7CiAgaWYgKHJpZ2h0LnR5cGUgPT09ICJjb2RlIiAmJiBmb3JtYXRDb2RlQXNJbmRlbnRlZChyaWdodCwgc3RhdGUpICYmIChsZWZ0LnR5cGUgPT09ICJsaXN0IiB8fCBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUgJiYgZm9ybWF0Q29kZUFzSW5kZW50ZWQobGVmdCwgc3RhdGUpKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoInNwcmVhZCIgaW4gcGFyZW50ICYmIHR5cGVvZiBwYXJlbnQuc3ByZWFkID09PSAiYm9vbGVhbiIpIHsKICAgIGlmIChsZWZ0LnR5cGUgPT09ICJwYXJhZ3JhcGgiICYmIC8vIFR3byBwYXJhZ3JhcGhzLgogICAgKGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSB8fCByaWdodC50eXBlID09PSAiZGVmaW5pdGlvbiIgfHwgLy8gUGFyYWdyYXBoIGZvbGxvd2VkIGJ5IGEgc2V0ZXh0IGhlYWRpbmcuCiAgICByaWdodC50eXBlID09PSAiaGVhZGluZyIgJiYgZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KHJpZ2h0LCBzdGF0ZSkpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiBwYXJlbnQuc3ByZWFkID8gMSA6IDA7CiAgfQp9CnZhciBqb2luMjsKdmFyIGluaXRfam9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2pvaW4uanMiKCkgewogICAgaW5pdF9mb3JtYXRfY29kZV9hc19pbmRlbnRlZCgpOwogICAgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQoKTsKICAgIGpvaW4yID0gW2pvaW5EZWZhdWx0c107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91bnNhZmUuanMKdmFyIGZ1bGxQaHJhc2luZ1NwYW5zLCB1bnNhZmU7CnZhciBpbml0X3Vuc2FmZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3Vuc2FmZS5qcyIoKSB7CiAgICBmdWxsUGhyYXNpbmdTcGFucyA9IFsKICAgICAgImF1dG9saW5rIiwKICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICJkZXN0aW5hdGlvblJhdyIsCiAgICAgICJyZWZlcmVuY2UiLAogICAgICAidGl0bGVRdW90ZSIsCiAgICAgICJ0aXRsZUFwb3N0cm9waGUiCiAgICBdOwogICAgdW5zYWZlID0gWwogICAgICB7IGNoYXJhY3RlcjogIgkiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIJIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiCSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIlxyIiwKICAgICAgICBpbkNvbnN0cnVjdDogWwogICAgICAgICAgImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRMYW5nVGlsZGUiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhVGlsZGUiLAogICAgICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICAgICAiaGVhZGluZ0F0eCIKICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJcbiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YVRpbGRlIiwKICAgICAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAgICAgImhlYWRpbmdBdHgiCiAgICAgICAgXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogIiAiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIgIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiICIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgLy8gQW4gZXhjbGFtYXRpb24gbWFyayBjYW4gc3RhcnQgYW4gaW1hZ2UsIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IGEgbGluayBvcgogICAgICAvLyBhIGxpbmsgcmVmZXJlbmNlLgogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiISIsCiAgICAgICAgYWZ0ZXI6ICJcXFsiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHF1b3RlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICciJywgaW5Db25zdHJ1Y3Q6ICJ0aXRsZVF1b3RlIiB9LAogICAgICAvLyBBIG51bWJlciBzaWduIGNvdWxkIHN0YXJ0IGFuIEFUWCBoZWFkaW5nIGlmIGl0IHN0YXJ0cyBhIGxpbmUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiIyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIjIiwgaW5Db25zdHJ1Y3Q6ICJoZWFkaW5nQXR4IiwgYWZ0ZXI6ICIoPzpbXHJcbl18JCkiIH0sCiAgICAgIC8vIERvbGxhciBzaWduIGFuZCBwZXJjZW50YWdlIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93bi4KICAgICAgLy8gQW4gYW1wZXJzYW5kIGNvdWxkIHN0YXJ0IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4KICAgICAgeyBjaGFyYWN0ZXI6ICImIiwgYWZ0ZXI6ICJbI0EtWmEtel0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICAvLyBBbiBhcG9zdHJvcGhlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICInIiwgaW5Db25zdHJ1Y3Q6ICJ0aXRsZUFwb3N0cm9waGUiIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiByYXcuCiAgICAgIHsgY2hhcmFjdGVyOiAiKCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25SYXciIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBmb2xsb3dlZCBieSBgXWAgY291bGQgbWFrZSBzb21ldGhpbmcgaW50byBhIGxpbmsgb3IgaW1hZ2UuCiAgICAgIHsKICAgICAgICBiZWZvcmU6ICJcXF0iLAogICAgICAgIGNoYXJhY3RlcjogIigiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHJpZ2h0IHBhcmVuIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtIG9yIGJyZWFrIG91dCBvZiBhIGRlc3RpbmF0aW9uCiAgICAgIC8vIHJhdy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICJcXGQrIiwgY2hhcmFjdGVyOiAiKSIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIpIiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvblJhdyIgfSwKICAgICAgLy8gQW4gYXN0ZXJpc2sgY2FuIHN0YXJ0IHRoZW1hdGljIGJyZWFrcywgbGlzdCBpdGVtcywgZW1waGFzaXMsIHN0cm9uZy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICIqIiwgYWZ0ZXI6ICIoPzpbIAlcclxuKl0pIiB9LAogICAgICB7IGNoYXJhY3RlcjogIioiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIEEgcGx1cyBzaWduIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIisiLCBhZnRlcjogIig/OlsgCVxyXG5dKSIgfSwKICAgICAgLy8gQSBkYXNoIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGFuZCBzZXRleHQgaGVhZGluZwogICAgICAvLyB1bmRlcmxpbmVzLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIig/OlsgCVxyXG4tXSkiIH0sCiAgICAgIC8vIEEgZG90IGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGJlZm9yZTogIlxcZCsiLCBjaGFyYWN0ZXI6ICIuIiwgYWZ0ZXI6ICIoPzpbIAlcclxuXXwkKSIgfSwKICAgICAgLy8gU2xhc2gsIGNvbG9uLCBhbmQgc2VtaWNvbG9uIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQSBsZXNzIHRoYW4gY2FuIHN0YXJ0IGh0bWwgKGZsb3cgb3IgdGV4dCkgb3IgYW4gYXV0b2xpbmsuCiAgICAgIC8vIEhUTUwgY291bGQgc3RhcnQgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChkZWNsYXJhdGlvbiwgY2RhdGEsIGNvbW1lbnQpLAogICAgICAvLyBzbGFzaCAoY2xvc2luZyB0YWcpLCBxdWVzdGlvbiBtYXJrIChpbnN0cnVjdGlvbiksIG9yIGEgbGV0dGVyICh0YWcpLgogICAgICAvLyBBbiBhdXRvbGluayBhbHNvIHN0YXJ0cyB3aXRoIGEgbGV0dGVyLgogICAgICAvLyBGaW5hbGx5LCBpdCBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiBsaXRlcmFsLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjwiLCBhZnRlcjogIlshLz9BLVphLXpdIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiPCIsCiAgICAgICAgYWZ0ZXI6ICJbIS8/QS1aYS16XSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zCiAgICAgIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiPCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25MaXRlcmFsIiB9LAogICAgICAvLyBBbiBlcXVhbHMgdG8gY2FuIHN0YXJ0IHNldGV4dCBoZWFkaW5nIHVuZGVybGluZXMuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPSIgfSwKICAgICAgLy8gQSBncmVhdGVyIHRoYW4gY2FuIHN0YXJ0IGJsb2NrIHF1b3RlcyBhbmQgaXQgY2FuIGJyZWFrIG91dCBvZiBhCiAgICAgIC8vIGRlc3RpbmF0aW9uIGxpdGVyYWwuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPiIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICI+IiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvbkxpdGVyYWwiIH0sCiAgICAgIC8vIFF1ZXN0aW9uIG1hcmsgYW5kIGF0IHNpZ24gYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBIGxlZnQgYnJhY2tldCBjYW4gc3RhcnQgZGVmaW5pdGlvbnMsIHJlZmVyZW5jZXMsIGxhYmVscywKICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJbIiB9LAogICAgICB7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiWyIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIEEgYmFja3NsYXNoIGNhbiBzdGFydCBhbiBlc2NhcGUgKHdoZW4gZm9sbG93ZWQgYnkgcHVuY3R1YXRpb24pIG9yIGEKICAgICAgLy8gaGFyZCBicmVhayAod2hlbiBmb2xsb3dlZCBieSBhbiBlb2wpLgogICAgICAvLyBOb3RlOiB0eXBpY2FsIGVzY2FwZXMgYXJlIGhhbmRsZWQgaW4gYHNhZmVgIQogICAgICB7IGNoYXJhY3RlcjogIlxcIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIC8vIEEgcmlnaHQgYnJhY2tldCBjYW4gZXhpdCBsYWJlbHMuCiAgICAgIHsgY2hhcmFjdGVyOiAiXSIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIENhcmV0IGlzIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBbiB1bmRlcnNjb3JlIGNhbiBzdGFydCBlbXBoYXNpcywgc3Ryb25nLCBvciBhIHRoZW1hdGljIGJyZWFrLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIl8iIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXyIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciLCBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMgfSwKICAgICAgLy8gQSBncmF2ZSBhY2NlbnQgY2FuIHN0YXJ0IGNvZGUgKGZlbmNlZCBvciB0ZXh0KSwgb3IgaXQgY2FuIGJyZWFrIG91dCBvZgogICAgICAvLyBhIGdyYXZlIGFjY2VudCBjb2RlIGZlbmNlLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogImAiIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJgIiwKICAgICAgICBpbkNvbnN0cnVjdDogWyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogImAiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIExlZnQgYnJhY2UsIHZlcnRpY2FsIGJhciwgcmlnaHQgYnJhY2UgYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvcgogICAgICAvLyBjb25zdHJ1Y3RzLgogICAgICAvLyBBIHRpbGRlIGNhbiBzdGFydCBjb2RlIChmZW5jZWQpLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIn4iIH0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzCmZ1bmN0aW9uIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMikgewogIGNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZTIgPSAiJiIgKyB2YWx1ZTIgKyAiOyI7CiAgZWxlbWVudC5pbm5lckhUTUwgPSBjaGFyYWN0ZXJSZWZlcmVuY2UyOwogIGNvbnN0IGNoYXJhY3RlciA9IGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgaWYgKGNoYXJhY3Rlci5jaGFyQ29kZUF0KGNoYXJhY3Rlci5sZW5ndGggLSAxKSA9PT0gNTkgJiYgdmFsdWUyICE9PSAic2VtaSIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIGNoYXJhY3RlciA9PT0gY2hhcmFjdGVyUmVmZXJlbmNlMiA/IGZhbHNlIDogY2hhcmFjdGVyOwp9CnZhciBlbGVtZW50Owp2YXIgaW5pdF9pbmRleF9kb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzIigpIHsKICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzCmZ1bmN0aW9uIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLCBiYXNlKSB7CiAgY29uc3QgY29kZTQgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUyLCBiYXNlKTsKICBpZiAoCiAgICAvLyBDMCBleGNlcHQgZm9yIEhULCBMRiwgRkYsIENSLCBzcGFjZS4KICAgIGNvZGU0IDwgOSB8fCBjb2RlNCA9PT0gMTEgfHwgY29kZTQgPiAxMyAmJiBjb2RlNCA8IDMyIHx8IC8vIENvbnRyb2wgY2hhcmFjdGVyIChERUwpIG9mIEMwLCBhbmQgQzEgY29udHJvbHMuCiAgICBjb2RlNCA+IDEyNiAmJiBjb2RlNCA8IDE2MCB8fCAvLyBMb25lIGhpZ2ggc3Vycm9nYXRlcyBhbmQgbG93IHN1cnJvZ2F0ZXMuCiAgICBjb2RlNCA+IDU1Mjk1ICYmIGNvZGU0IDwgNTczNDQgfHwgLy8gTm9uY2hhcmFjdGVycy4KICAgIGNvZGU0ID4gNjQ5NzUgJiYgY29kZTQgPCA2NTAwOCB8fCAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovCiAgICAoY29kZTQgJiA2NTUzNSkgPT09IDY1NTM1IHx8IChjb2RlNCAmIDY1NTM1KSA9PT0gNjU1MzQgfHwgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovCiAgICAvLyBPdXQgb2YgcmFuZ2UKICAgIGNvZGU0ID4gMTExNDExMQogICkgewogICAgcmV0dXJuICJcdUZGRkQiOwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmdAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvaW5kZXguanMKZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSwgZGVjb2RlKTsKfQpmdW5jdGlvbiBkZWNvZGUoJDAsICQxLCAkMjIpIHsKICBpZiAoJDEpIHsKICAgIHJldHVybiAkMTsKICB9CiAgY29uc3QgaGVhZDIgPSAkMjIuY2hhckNvZGVBdCgwKTsKICBpZiAoaGVhZDIgPT09IDM1KSB7CiAgICBjb25zdCBoZWFkMyA9ICQyMi5jaGFyQ29kZUF0KDEpOwogICAgY29uc3QgaGV4MiA9IGhlYWQzID09PSAxMjAgfHwgaGVhZDMgPT09IDg4OwogICAgcmV0dXJuIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoJDIyLnNsaWNlKGhleDIgPyAyIDogMSksIGhleDIgPyAxNiA6IDEwKTsKICB9CiAgcmV0dXJuIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKCQyMikgfHwgJDA7Cn0KdmFyIGNoYXJhY3RlckVzY2FwZU9yUmVmZXJlbmNlOwp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfc3RyaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZ0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9IC9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzCmZ1bmN0aW9uIGFzc29jaWF0aW9uKG5vZGUyKSB7CiAgaWYgKG5vZGUyLmxhYmVsIHx8ICFub2RlMi5pZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbm9kZTIubGFiZWwgfHwgIiI7CiAgfQogIHJldHVybiBkZWNvZGVTdHJpbmcobm9kZTIuaWRlbnRpZmllcik7Cn0KdmFyIGluaXRfYXNzb2NpYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jb21waWxlLXBhdHRlcm4uanMKZnVuY3Rpb24gY29tcGlsZVBhdHRlcm4ocGF0dGVybikgewogIGlmICghcGF0dGVybi5fY29tcGlsZWQpIHsKICAgIGNvbnN0IGJlZm9yZSA9IChwYXR0ZXJuLmF0QnJlYWsgPyAiW1xcclxcbl1bXFx0IF0qIiA6ICIiKSArIChwYXR0ZXJuLmJlZm9yZSA/ICIoPzoiICsgcGF0dGVybi5iZWZvcmUgKyAiKSIgOiAiIik7CiAgICBwYXR0ZXJuLl9jb21waWxlZCA9IG5ldyBSZWdFeHAoCiAgICAgIChiZWZvcmUgPyAiKCIgKyBiZWZvcmUgKyAiKSIgOiAiIikgKyAoL1t8XFx7fSgpW1xdXiQrKj8uLV0vLnRlc3QocGF0dGVybi5jaGFyYWN0ZXIpID8gIlxcIiA6ICIiKSArIHBhdHRlcm4uY2hhcmFjdGVyICsgKHBhdHRlcm4uYWZ0ZXIgPyAiKD86IiArIHBhdHRlcm4uYWZ0ZXIgKyAiKSIgOiAiIiksCiAgICAgICJnIgogICAgKTsKICB9CiAgcmV0dXJuIHBhdHRlcm4uX2NvbXBpbGVkOwp9CnZhciBpbml0X2NvbXBpbGVfcGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29tcGlsZS1wYXR0ZXJuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzCmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgc3RhdGUsIGluZm8pIHsKICBjb25zdCBpbmRleFN0YWNrID0gc3RhdGUuaW5kZXhTdGFjazsKICBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQuY2hpbGRyZW4gfHwgW107CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgYmVmb3JlID0gaW5mby5iZWZvcmU7CiAgbGV0IGVuY29kZUFmdGVyOwogIGluZGV4U3RhY2sucHVzaCgtMSk7CiAgbGV0IHRyYWNrZXIgPSBzdGF0ZS5jcmVhdGVUcmFja2VyKGluZm8pOwogIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW4yW2luZGV4Ml07CiAgICBsZXQgYWZ0ZXI7CiAgICBpbmRleFN0YWNrW2luZGV4U3RhY2subGVuZ3RoIC0gMV0gPSBpbmRleDI7CiAgICBpZiAoaW5kZXgyICsgMSA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgbGV0IGhhbmRsZTMgPSBzdGF0ZS5oYW5kbGUuaGFuZGxlcnNbY2hpbGRyZW4yW2luZGV4MiArIDFdLnR5cGVdOwogICAgICBpZiAoaGFuZGxlMyAmJiBoYW5kbGUzLnBlZWspIGhhbmRsZTMgPSBoYW5kbGUzLnBlZWs7CiAgICAgIGFmdGVyID0gaGFuZGxlMyA/IGhhbmRsZTMoY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlLCB7CiAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICBhZnRlcjogIiIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkuY2hhckF0KDApIDogIiI7CiAgICB9IGVsc2UgewogICAgICBhZnRlciA9IGluZm8uYWZ0ZXI7CiAgICB9CiAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwICYmIChiZWZvcmUgPT09ICJcciIgfHwgYmVmb3JlID09PSAiXG4iKSAmJiBjaGlsZC50eXBlID09PSAiaHRtbCIpIHsKICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnJlcGxhY2UoCiAgICAgICAgLyhccj9cbnxccikkLywKICAgICAgICAiICIKICAgICAgKTsKICAgICAgYmVmb3JlID0gIiAiOwogICAgICB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICAgICAgdHJhY2tlci5tb3ZlKHJlc3VsdHMuam9pbigiIikpOwogICAgfQogICAgbGV0IHZhbHVlMiA9IHN0YXRlLmhhbmRsZShjaGlsZCwgcGFyZW50LCBzdGF0ZSwgewogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKSwKICAgICAgYWZ0ZXIsCiAgICAgIGJlZm9yZQogICAgfSk7CiAgICBpZiAoZW5jb2RlQWZ0ZXIgJiYgZW5jb2RlQWZ0ZXIgPT09IHZhbHVlMi5zbGljZSgwLCAxKSkgewogICAgICB2YWx1ZTIgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoZW5jb2RlQWZ0ZXIuY2hhckNvZGVBdCgwKSkgKyB2YWx1ZTIuc2xpY2UoMSk7CiAgICB9CiAgICBjb25zdCBlbmNvZGluZ0luZm8gPSBzdGF0ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm87CiAgICBzdGF0ZS5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB2b2lkIDA7CiAgICBlbmNvZGVBZnRlciA9IHZvaWQgMDsKICAgIGlmIChlbmNvZGluZ0luZm8pIHsKICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiBlbmNvZGluZ0luZm8uYmVmb3JlICYmIGJlZm9yZSA9PT0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKC0xKSkgewogICAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmVmb3JlLmNoYXJDb2RlQXQoMCkpOwogICAgICB9CiAgICAgIGlmIChlbmNvZGluZ0luZm8uYWZ0ZXIpIGVuY29kZUFmdGVyID0gYWZ0ZXI7CiAgICB9CiAgICB0cmFja2VyLm1vdmUodmFsdWUyKTsKICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIpOwogICAgYmVmb3JlID0gdmFsdWUyLnNsaWNlKC0xKTsKICB9CiAgaW5kZXhTdGFjay5wb3AoKTsKICByZXR1cm4gcmVzdWx0cy5qb2luKCIiKTsKfQp2YXIgaW5pdF9jb250YWluZXJfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1waHJhc2luZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzCmZ1bmN0aW9uIGNvbnRhaW5lckZsb3cocGFyZW50LCBzdGF0ZSwgaW5mbykgewogIGNvbnN0IGluZGV4U3RhY2sgPSBzdGF0ZS5pbmRleFN0YWNrOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudC5jaGlsZHJlbiB8fCBbXTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCByZXN1bHRzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGluZGV4U3RhY2sucHVzaCgtMSk7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbjJbaW5kZXgyXTsKICAgIGluZGV4U3RhY2tbaW5kZXhTdGFjay5sZW5ndGggLSAxXSA9IGluZGV4MjsKICAgIHJlc3VsdHMucHVzaCgKICAgICAgdHJhY2tlci5tb3ZlKAogICAgICAgIHN0YXRlLmhhbmRsZShjaGlsZCwgcGFyZW50LCBzdGF0ZSwgewogICAgICAgICAgYmVmb3JlOiAiXG4iLAogICAgICAgICAgYWZ0ZXI6ICJcbiIsCiAgICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICAgIH0pCiAgICAgICkKICAgICk7CiAgICBpZiAoY2hpbGQudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgIHN0YXRlLmJ1bGxldExhc3RVc2VkID0gdm9pZCAwOwogICAgfQogICAgaWYgKGluZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGggLSAxKSB7CiAgICAgIHJlc3VsdHMucHVzaCgKICAgICAgICB0cmFja2VyLm1vdmUoYmV0d2VlbihjaGlsZCwgY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlKSkKICAgICAgKTsKICAgIH0KICB9CiAgaW5kZXhTdGFjay5wb3AoKTsKICByZXR1cm4gcmVzdWx0cy5qb2luKCIiKTsKfQpmdW5jdGlvbiBiZXR3ZWVuKGxlZnQsIHJpZ2h0LCBwYXJlbnQsIHN0YXRlKSB7CiAgbGV0IGluZGV4MiA9IHN0YXRlLmpvaW4ubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgcmVzdWx0ID0gc3RhdGUuam9pbltpbmRleDJdKGxlZnQsIHJpZ2h0LCBwYXJlbnQsIHN0YXRlKTsKICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSAxKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJudW1iZXIiKSB7CiAgICAgIHJldHVybiAiXG4iLnJlcGVhdCgxICsgcmVzdWx0KTsKICAgIH0KICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgIHJldHVybiAiXG5cbjwhLS0tLT5cblxuIjsKICAgIH0KICB9CiAgcmV0dXJuICJcblxuIjsKfQp2YXIgaW5pdF9jb250YWluZXJfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLWZsb3cuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9pbmRlbnQtbGluZXMuanMKZnVuY3Rpb24gaW5kZW50TGluZXModmFsdWUyLCBtYXA3KSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgbGluZSA9IDA7CiAgbGV0IG1hdGNoMjsKICB3aGlsZSAobWF0Y2gyID0gZW9sLmV4ZWModmFsdWUyKSkgewogICAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIG1hdGNoMi5pbmRleCkpOwogICAgcmVzdWx0LnB1c2gobWF0Y2gyWzBdKTsKICAgIHN0YXJ0ID0gbWF0Y2gyLmluZGV4ICsgbWF0Y2gyWzBdLmxlbmd0aDsKICAgIGxpbmUrKzsKICB9CiAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQpKTsKICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwogIGZ1bmN0aW9uIG9uZTModmFsdWUzKSB7CiAgICByZXN1bHQucHVzaChtYXA3KHZhbHVlMywgbGluZSwgIXZhbHVlMykpOwogIH0KfQp2YXIgZW9sOwp2YXIgaW5pdF9pbmRlbnRfbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2luZGVudC1saW5lcy5qcyIoKSB7CiAgICBlb2wgPSAvXHI/XG58XHIvZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvc2FmZS5qcwpmdW5jdGlvbiBzYWZlKHN0YXRlLCBpbnB1dCwgY29uZmlnMykgewogIGNvbnN0IHZhbHVlMiA9IChjb25maWczLmJlZm9yZSB8fCAiIikgKyAoaW5wdXQgfHwgIiIpICsgKGNvbmZpZzMuYWZ0ZXIgfHwgIiIpOwogIGNvbnN0IHBvc2l0aW9ucyA9IFtdOwogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGluZm9zID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlLnVuc2FmZS5sZW5ndGgpIHsKICAgIGNvbnN0IHBhdHRlcm4gPSBzdGF0ZS51bnNhZmVbaW5kZXgyXTsKICAgIGlmICghcGF0dGVybkluU2NvcGUoc3RhdGUuc3RhY2ssIHBhdHRlcm4pKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlLmNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pOwogICAgbGV0IG1hdGNoMjsKICAgIHdoaWxlIChtYXRjaDIgPSBleHByZXNzaW9uLmV4ZWModmFsdWUyKSkgewogICAgICBjb25zdCBiZWZvcmUgPSAiYmVmb3JlIiBpbiBwYXR0ZXJuIHx8IEJvb2xlYW4ocGF0dGVybi5hdEJyZWFrKTsKICAgICAgY29uc3QgYWZ0ZXIgPSAiYWZ0ZXIiIGluIHBhdHRlcm47CiAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IG1hdGNoMi5pbmRleCArIChiZWZvcmUgPyBtYXRjaDJbMV0ubGVuZ3RoIDogMCk7CiAgICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXMocG9zaXRpb24zKSkgewogICAgICAgIGlmIChpbmZvc1twb3NpdGlvbjNdLmJlZm9yZSAmJiAhYmVmb3JlKSB7CiAgICAgICAgICBpbmZvc1twb3NpdGlvbjNdLmJlZm9yZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoaW5mb3NbcG9zaXRpb24zXS5hZnRlciAmJiAhYWZ0ZXIpIHsKICAgICAgICAgIGluZm9zW3Bvc2l0aW9uM10uYWZ0ZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG9zaXRpb25zLnB1c2gocG9zaXRpb24zKTsKICAgICAgICBpbmZvc1twb3NpdGlvbjNdID0geyBiZWZvcmUsIGFmdGVyIH07CiAgICAgIH0KICAgIH0KICB9CiAgcG9zaXRpb25zLnNvcnQobnVtZXJpY2FsKTsKICBsZXQgc3RhcnQgPSBjb25maWczLmJlZm9yZSA/IGNvbmZpZzMuYmVmb3JlLmxlbmd0aCA6IDA7CiAgY29uc3QgZW5kMyA9IHZhbHVlMi5sZW5ndGggLSAoY29uZmlnMy5hZnRlciA/IGNvbmZpZzMuYWZ0ZXIubGVuZ3RoIDogMCk7CiAgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcG9zaXRpb25zLmxlbmd0aCkgewogICAgY29uc3QgcG9zaXRpb24zID0gcG9zaXRpb25zW2luZGV4Ml07CiAgICBpZiAocG9zaXRpb24zIDwgc3RhcnQgfHwgcG9zaXRpb24zID49IGVuZDMpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAocG9zaXRpb24zICsgMSA8IGVuZDMgJiYgcG9zaXRpb25zW2luZGV4MiArIDFdID09PSBwb3NpdGlvbjMgKyAxICYmIGluZm9zW3Bvc2l0aW9uM10uYWZ0ZXIgJiYgIWluZm9zW3Bvc2l0aW9uMyArIDFdLmJlZm9yZSAmJiAhaW5mb3NbcG9zaXRpb24zICsgMV0uYWZ0ZXIgfHwgcG9zaXRpb25zW2luZGV4MiAtIDFdID09PSBwb3NpdGlvbjMgLSAxICYmIGluZm9zW3Bvc2l0aW9uM10uYmVmb3JlICYmICFpbmZvc1twb3NpdGlvbjMgLSAxXS5iZWZvcmUgJiYgIWluZm9zW3Bvc2l0aW9uMyAtIDFdLmFmdGVyKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbjMpIHsKICAgICAgcmVzdWx0LnB1c2goZXNjYXBlQmFja3NsYXNoZXModmFsdWUyLnNsaWNlKHN0YXJ0LCBwb3NpdGlvbjMpLCAiXFwiKSk7CiAgICB9CiAgICBzdGFydCA9IHBvc2l0aW9uMzsKICAgIGlmICgvWyEtLzotQFstYHstfl0vLnRlc3QodmFsdWUyLmNoYXJBdChwb3NpdGlvbjMpKSAmJiAoIWNvbmZpZzMuZW5jb2RlIHx8ICFjb25maWczLmVuY29kZS5pbmNsdWRlcyh2YWx1ZTIuY2hhckF0KHBvc2l0aW9uMykpKSkgewogICAgICByZXN1bHQucHVzaCgiXFwiKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdC5wdXNoKGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMpKSk7CiAgICAgIHN0YXJ0Kys7CiAgICB9CiAgfQogIHJlc3VsdC5wdXNoKGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlMi5zbGljZShzdGFydCwgZW5kMyksIGNvbmZpZzMuYWZ0ZXIpKTsKICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG51bWVyaWNhbChhNSwgYjUpIHsKICByZXR1cm4gYTUgLSBiNTsKfQpmdW5jdGlvbiBlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZTIsIGFmdGVyKSB7CiAgY29uc3QgZXhwcmVzc2lvbiA9IC9cXCg/PVshLS86LUBbLWB7LX5dKS9nOwogIGNvbnN0IHBvc2l0aW9ucyA9IFtdOwogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBjb25zdCB3aG9sZSA9IHZhbHVlMiArIGFmdGVyOwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgc3RhcnQgPSAwOwogIGxldCBtYXRjaDI7CiAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh3aG9sZSkpIHsKICAgIHBvc2l0aW9ucy5wdXNoKG1hdGNoMi5pbmRleCk7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IHBvc2l0aW9ucy5sZW5ndGgpIHsKICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb25zW2luZGV4Ml0pIHsKICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlMi5zbGljZShzdGFydCwgcG9zaXRpb25zW2luZGV4Ml0pKTsKICAgIH0KICAgIHJlc3VsdHMucHVzaCgiXFwiKTsKICAgIHN0YXJ0ID0gcG9zaXRpb25zW2luZGV4Ml07CiAgfQogIHJlc3VsdHMucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnQpKTsKICByZXR1cm4gcmVzdWx0cy5qb2luKCIiKTsKfQp2YXIgaW5pdF9zYWZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9zYWZlLmpzIigpIHsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfcGF0dGVybl9pbl9zY29wZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC90cmFjay5qcwpmdW5jdGlvbiB0cmFjayhjb25maWczKSB7CiAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZzMgfHwge307CiAgY29uc3Qgbm93MiA9IG9wdGlvbnMubm93IHx8IHt9OwogIGxldCBsaW5lU2hpZnQgPSBvcHRpb25zLmxpbmVTaGlmdCB8fCAwOwogIGxldCBsaW5lID0gbm93Mi5saW5lIHx8IDE7CiAgbGV0IGNvbHVtbiA9IG5vdzIuY29sdW1uIHx8IDE7CiAgcmV0dXJuIHsgbW92ZSwgY3VycmVudCwgc2hpZnQgfTsKICBmdW5jdGlvbiBjdXJyZW50KCkgewogICAgcmV0dXJuIHsgbm93OiB7IGxpbmUsIGNvbHVtbiB9LCBsaW5lU2hpZnQgfTsKICB9CiAgZnVuY3Rpb24gc2hpZnQodmFsdWUyKSB7CiAgICBsaW5lU2hpZnQgKz0gdmFsdWUyOwogIH0KICBmdW5jdGlvbiBtb3ZlKGlucHV0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSBpbnB1dCB8fCAiIjsKICAgIGNvbnN0IGNodW5rcyA9IHZhbHVlMi5zcGxpdCgvXHI/XG58XHIvZyk7CiAgICBjb25zdCB0YWlsID0gY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXTsKICAgIGxpbmUgKz0gY2h1bmtzLmxlbmd0aCAtIDE7CiAgICBjb2x1bW4gPSBjaHVua3MubGVuZ3RoID09PSAxID8gY29sdW1uICsgdGFpbC5sZW5ndGggOiAxICsgdGFpbC5sZW5ndGggKyBsaW5lU2hpZnQ7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KfQp2YXIgaW5pdF90cmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvdHJhY2suanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9NYXJrZG93bih0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IHN0YXRlID0gewogICAgYXNzb2NpYXRpb25JZDogYXNzb2NpYXRpb24sCiAgICBjb250YWluZXJQaHJhc2luZzogY29udGFpbmVyUGhyYXNpbmdCb3VuZCwKICAgIGNvbnRhaW5lckZsb3c6IGNvbnRhaW5lckZsb3dCb3VuZCwKICAgIGNyZWF0ZVRyYWNrZXI6IHRyYWNrLAogICAgY29tcGlsZVBhdHRlcm4sCiAgICBlbnRlciwKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEdGTSAvIGZyb250bWF0dGVyIGFyZSB0eXBlZCBpbiBgbWRhc3RgIGJ1dCBub3QgZGVmaW5lZAogICAgLy8gaGVyZS4KICAgIGhhbmRsZXJzOiB7IC4uLmhhbmRsZSB9LAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYWRkIGBoYW5kbGVgIGluIGEgc2Vjb25kLgogICAgaGFuZGxlOiB2b2lkIDAsCiAgICBpbmRlbnRMaW5lcywKICAgIGluZGV4U3RhY2s6IFtdLAogICAgam9pbjogWy4uLmpvaW4yXSwKICAgIG9wdGlvbnM6IHt9LAogICAgc2FmZTogc2FmZUJvdW5kLAogICAgc3RhY2s6IFtdLAogICAgdW5zYWZlOiBbLi4udW5zYWZlXQogIH07CiAgY29uZmlndXJlKHN0YXRlLCBzZXR0aW5ncyk7CiAgaWYgKHN0YXRlLm9wdGlvbnMudGlnaHREZWZpbml0aW9ucykgewogICAgc3RhdGUuam9pbi5wdXNoKGpvaW5EZWZpbml0aW9uKTsKICB9CiAgc3RhdGUuaGFuZGxlID0gendpdGNoKCJ0eXBlIiwgewogICAgaW52YWxpZCwKICAgIHVua25vd24sCiAgICBoYW5kbGVyczogc3RhdGUuaGFuZGxlcnMKICB9KTsKICBsZXQgcmVzdWx0ID0gc3RhdGUuaGFuZGxlKHRyZWUsIHZvaWQgMCwgc3RhdGUsIHsKICAgIGJlZm9yZTogIlxuIiwKICAgIGFmdGVyOiAiXG4iLAogICAgbm93OiB7IGxpbmU6IDEsIGNvbHVtbjogMSB9LAogICAgbGluZVNoaWZ0OiAwCiAgfSk7CiAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY2hhckNvZGVBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDEwICYmIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTMpIHsKICAgIHJlc3VsdCArPSAiXG4iOwogIH0KICByZXR1cm4gcmVzdWx0OwogIGZ1bmN0aW9uIGVudGVyKG5hbWUpIHsKICAgIHN0YXRlLnN0YWNrLnB1c2gobmFtZSk7CiAgICByZXR1cm4gZXhpdDM7CiAgICBmdW5jdGlvbiBleGl0MygpIHsKICAgICAgc3RhdGUuc3RhY2sucG9wKCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGludmFsaWQodmFsdWUyKSB7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHZhbHVlIGAiICsgdmFsdWUyICsgImAsIGV4cGVjdGVkIG5vZGUiKTsKfQpmdW5jdGlvbiB1bmtub3duKHZhbHVlMikgewogIGNvbnN0IG5vZGUyID0gKAogICAgLyoqIEB0eXBlIHtOb2Rlc30gKi8KICAgIHZhbHVlMgogICk7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHVua25vd24gbm9kZSBgIiArIG5vZGUyLnR5cGUgKyAiYCIpOwp9CmZ1bmN0aW9uIGpvaW5EZWZpbml0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKGxlZnQudHlwZSA9PT0gImRlZmluaXRpb24iICYmIGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSkgewogICAgcmV0dXJuIDA7CiAgfQp9CmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nQm91bmQocGFyZW50LCBpbmZvKSB7CiAgcmV0dXJuIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gY29udGFpbmVyRmxvd0JvdW5kKHBhcmVudCwgaW5mbykgewogIHJldHVybiBjb250YWluZXJGbG93KHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gc2FmZUJvdW5kKHZhbHVlMiwgY29uZmlnMykgewogIHJldHVybiBzYWZlKHRoaXMsIHZhbHVlMiwgY29uZmlnMyk7Cn0KdmFyIGluaXRfbGliMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb25maWd1cmUoKTsKICAgIGluaXRfaGFuZGxlKCk7CiAgICBpbml0X2pvaW4oKTsKICAgIGluaXRfdW5zYWZlKCk7CiAgICBpbml0X2Fzc29jaWF0aW9uKCk7CiAgICBpbml0X2NvbXBpbGVfcGF0dGVybigpOwogICAgaW5pdF9jb250YWluZXJfcGhyYXNpbmcoKTsKICAgIGluaXRfY29udGFpbmVyX2Zsb3coKTsKICAgIGluaXRfaW5kZW50X2xpbmVzKCk7CiAgICBpbml0X3NhZmUoKTsKICAgIGluaXRfdHJhY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNSgpOwogICAgaW5pdF9oYW5kbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtVGFibGVGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhYmxlOiBlbnRlclRhYmxlLAogICAgICB0YWJsZURhdGE6IGVudGVyQ2VsbCwKICAgICAgdGFibGVIZWFkZXI6IGVudGVyQ2VsbCwKICAgICAgdGFibGVSb3c6IGVudGVyUm93CiAgICB9LAogICAgZXhpdDogewogICAgICBjb2RlVGV4dDogZXhpdENvZGVUZXh0LAogICAgICB0YWJsZTogZXhpdFRhYmxlLAogICAgICB0YWJsZURhdGE6IGV4aXQsCiAgICAgIHRhYmxlSGVhZGVyOiBleGl0LAogICAgICB0YWJsZVJvdzogZXhpdAogICAgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJUYWJsZSh0b2tlbikgewogIGNvbnN0IGFsaWduID0gdG9rZW4uX2FsaWduOwogIG9rKGFsaWduLCAiZXhwZWN0ZWQgYF9hbGlnbmAgb24gdGFibGUiKTsKICB0aGlzLmVudGVyKAogICAgewogICAgICB0eXBlOiAidGFibGUiLAogICAgICBhbGlnbjogYWxpZ24ubWFwKGZ1bmN0aW9uKGQ1KSB7CiAgICAgICAgcmV0dXJuIGQ1ID09PSAibm9uZSIgPyBudWxsIDogZDU7CiAgICAgIH0pLAogICAgICBjaGlsZHJlbjogW10KICAgIH0sCiAgICB0b2tlbgogICk7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB0cnVlOwp9CmZ1bmN0aW9uIGV4aXRUYWJsZSh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB2b2lkIDA7Cn0KZnVuY3Rpb24gZW50ZXJSb3codG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlUm93IiwgY2hpbGRyZW46IFtdIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0KHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckNlbGwodG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlQ2VsbCIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdENvZGVUZXh0KHRva2VuKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgaWYgKHRoaXMuZGF0YS5pblRhYmxlKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXFwoW1xcfF0pL2csIHJlcGxhY2UpOwogIH0KICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiaW5saW5lQ29kZSIpOwogIG5vZGUyLnZhbHVlID0gdmFsdWUyOwogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gcmVwbGFjZSgkMCwgJDEpIHsKICByZXR1cm4gJDEgPT09ICJ8IiA/ICQxIDogJDA7Cn0KZnVuY3Rpb24gZ2ZtVGFibGVUb01hcmtkb3duKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgcGFkZGluZyA9IHNldHRpbmdzLnRhYmxlQ2VsbFBhZGRpbmc7CiAgY29uc3QgYWxpZ25EZWxpbWl0ZXJzID0gc2V0dGluZ3MudGFibGVQaXBlQWxpZ247CiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFyb3VuZCA9IHBhZGRpbmcgPyAiICIgOiAifCI7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7IGNoYXJhY3RlcjogIlxyIiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXG4iLCBpbkNvbnN0cnVjdDogInRhYmxlQ2VsbCIgfSwKICAgICAgLy8gQSBwaXBlLCB3aGVuIGZvbGxvd2VkIGJ5IGEgdGFiIG9yIHNwYWNlIChwYWRkaW5nKSwgb3IgYSBkYXNoIG9yIGNvbG9uCiAgICAgIC8vICh1bnBhZGRlZCBkZWxpbWl0ZXIgcm93KSwgY291bGQgcmVzdWx0IGluIGEgdGFibGUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAifCIsIGFmdGVyOiAiWwkgOi1dIiB9LAogICAgICAvLyBBIHBpcGUgaW4gYSBjZWxsIG11c3QgYmUgZW5jb2RlZC4KICAgICAgeyBjaGFyYWN0ZXI6ICJ8IiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIC8vIEEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRhc2gsIGluIHdoaWNoIGNhc2UgaXQgY291bGQgc3RhcnQgYQogICAgICAvLyBkZWxpbWl0ZXIgcm93LgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjoiLCBhZnRlcjogIi0iIH0sCiAgICAgIC8vIEEgZGVsaW1pdGVyIHJvdyBjYW4gYWxzbyBzdGFydCB3aXRoIGEgZGFzaCwgd2hlbiBmb2xsb3dlZCBieSBtb3JlCiAgICAgIC8vIGRhc2hlcywgYSBjb2xvbiwgb3IgYSBwaXBlLgogICAgICAvLyBUaGlzIGlzIGEgc3RyaWN0ZXIgdmVyc2lvbiB0aGFuIHRoZSBidWlsdCBpbiBjaGVjayBmb3IgbGlzdHMsIHRoZW1hdGljCiAgICAgIC8vIGJyZWFrcywgYW5kIHNldGV4IGhlYWRpbmcgdW5kZXJsaW5lcyB0aG91Z2g6CiAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGF4LXRyZWUvbWRhc3QtdXRpbC10by1tYXJrZG93bi9ibG9iLzUxYTIwMzgvbGliL3Vuc2FmZS5qcyNMNTc+CiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiLSIsIGFmdGVyOiAiWzp8LV0iIH0KICAgIF0sCiAgICBoYW5kbGVyczogewogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlV2l0aFRhYmxlLAogICAgICB0YWJsZTogaGFuZGxlVGFibGUsCiAgICAgIHRhYmxlQ2VsbDogaGFuZGxlVGFibGVDZWxsLAogICAgICB0YWJsZVJvdzogaGFuZGxlVGFibGVSb3cKICAgIH0KICB9OwogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlKG5vZGUyLCBfNCwgc3RhdGUsIGluZm8pIHsKICAgIHJldHVybiBzZXJpYWxpemVEYXRhKGhhbmRsZVRhYmxlQXNEYXRhKG5vZGUyLCBzdGF0ZSwgaW5mbyksIG5vZGUyLmFsaWduKTsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVSb3cobm9kZTIsIF80LCBzdGF0ZSwgaW5mbykgewogICAgY29uc3Qgcm93ID0gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZTIsIHN0YXRlLCBpbmZvKTsKICAgIGNvbnN0IHZhbHVlMiA9IHNlcmlhbGl6ZURhdGEoW3Jvd10pOwogICAgcmV0dXJuIHZhbHVlMi5zbGljZSgwLCB2YWx1ZTIuaW5kZXhPZigiXG4iKSk7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlQ2VsbChub2RlMiwgXzQsIHN0YXRlLCBpbmZvKSB7CiAgICBjb25zdCBleGl0MyA9IHN0YXRlLmVudGVyKCJ0YWJsZUNlbGwiKTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigicGhyYXNpbmciKTsKICAgIGNvbnN0IHZhbHVlMiA9IHN0YXRlLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIC4uLmluZm8sCiAgICAgIGJlZm9yZTogYXJvdW5kLAogICAgICBhZnRlcjogYXJvdW5kCiAgICB9KTsKICAgIHN1YmV4aXQoKTsKICAgIGV4aXQzKCk7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBmdW5jdGlvbiBzZXJpYWxpemVEYXRhKG1hdHJpeCwgYWxpZ24pIHsKICAgIHJldHVybiBtYXJrZG93blRhYmxlKG1hdHJpeCwgewogICAgICBhbGlnbiwKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG1hcmtkb3duLXRhYmxlYCB0eXBlcyBzaG91bGQgc3VwcG9ydCBgbnVsbGAuCiAgICAgIGFsaWduRGVsaW1pdGVycywKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG1hcmtkb3duLXRhYmxlYCB0eXBlcyBzaG91bGQgc3VwcG9ydCBgbnVsbGAuCiAgICAgIHBhZGRpbmcsCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLgogICAgICBzdHJpbmdMZW5ndGgKICAgIH0pOwogIH0KICBmdW5jdGlvbiBoYW5kbGVUYWJsZUFzRGF0YShub2RlMiwgc3RhdGUsIGluZm8pIHsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUuZW50ZXIoInRhYmxlIik7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleDJdID0gaGFuZGxlVGFibGVSb3dBc0RhdGEoY2hpbGRyZW4yW2luZGV4Ml0sIHN0YXRlLCBpbmZvKTsKICAgIH0KICAgIHN1YmV4aXQoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlUm93QXNEYXRhKG5vZGUyLCBzdGF0ZSwgaW5mbykgewogICAgY29uc3QgY2hpbGRyZW4yID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZS5lbnRlcigidGFibGVSb3ciKTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4Ml0gPSBoYW5kbGVUYWJsZUNlbGwoY2hpbGRyZW4yW2luZGV4Ml0sIG5vZGUyLCBzdGF0ZSwgaW5mbyk7CiAgICB9CiAgICBzdWJleGl0KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBpbmxpbmVDb2RlV2l0aFRhYmxlKG5vZGUyLCBwYXJlbnQsIHN0YXRlKSB7CiAgICBsZXQgdmFsdWUyID0gaGFuZGxlLmlubGluZUNvZGUobm9kZTIsIHBhcmVudCwgc3RhdGUpOwogICAgaWYgKHN0YXRlLnN0YWNrLmluY2x1ZGVzKCJ0YWJsZUNlbGwiKSkgewogICAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXHwvZywgIlxcJCYiKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CnZhciBpbml0X2xpYjE2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhYmxlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWFya2Rvd25fdGFibGUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhYmxlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtX3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFibGVAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhYmxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQ6IGV4aXRDaGVjaywKICAgICAgdGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkOiBleGl0Q2hlY2ssCiAgICAgIHBhcmFncmFwaDogZXhpdFBhcmFncmFwaFdpdGhUYXNrTGlzdEl0ZW0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbVRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogW3sgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiLSIsIGFmdGVyOiAiWzp8LV0iIH1dLAogICAgaGFuZGxlcnM6IHsgbGlzdEl0ZW06IGxpc3RJdGVtV2l0aFRhc2tMaXN0SXRlbSB9CiAgfTsKfQpmdW5jdGlvbiBleGl0Q2hlY2sodG9rZW4pIHsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICBvayhub2RlMi50eXBlID09PSAibGlzdEl0ZW0iKTsKICBub2RlMi5jaGVja2VkID0gdG9rZW4udHlwZSA9PT0gInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiOwp9CmZ1bmN0aW9uIGV4aXRQYXJhZ3JhcGhXaXRoVGFza0xpc3RJdGVtKHRva2VuKSB7CiAgY29uc3QgcGFyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdOwogIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJsaXN0SXRlbSIgJiYgdHlwZW9mIHBhcmVudC5jaGVja2VkID09PSAiYm9vbGVhbiIpIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgb2sobm9kZTIudHlwZSA9PT0gInBhcmFncmFwaCIpOwogICAgY29uc3QgaGVhZDIgPSBub2RlMi5jaGlsZHJlblswXTsKICAgIGlmIChoZWFkMiAmJiBoZWFkMi50eXBlID09PSAidGV4dCIpIHsKICAgICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIGxldCBmaXJzdFBhcmFnaHJhcGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IHNpYmxpbmdzMi5sZW5ndGgpIHsKICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3MyW2luZGV4Ml07CiAgICAgICAgaWYgKHNpYmxpbmcudHlwZSA9PT0gInBhcmFncmFwaCIpIHsKICAgICAgICAgIGZpcnN0UGFyYWdocmFwaCA9IHNpYmxpbmc7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGZpcnN0UGFyYWdocmFwaCA9PT0gbm9kZTIpIHsKICAgICAgICBoZWFkMi52YWx1ZSA9IGhlYWQyLnZhbHVlLnNsaWNlKDEpOwogICAgICAgIGlmIChoZWFkMi52YWx1ZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgIG5vZGUyLmNoaWxkcmVuLnNoaWZ0KCk7CiAgICAgICAgfSBlbHNlIGlmIChub2RlMi5wb3NpdGlvbiAmJiBoZWFkMi5wb3NpdGlvbiAmJiB0eXBlb2YgaGVhZDIucG9zaXRpb24uc3RhcnQub2Zmc2V0ID09PSAibnVtYmVyIikgewogICAgICAgICAgaGVhZDIucG9zaXRpb24uc3RhcnQuY29sdW1uKys7CiAgICAgICAgICBoZWFkMi5wb3NpdGlvbi5zdGFydC5vZmZzZXQrKzsKICAgICAgICAgIG5vZGUyLnBvc2l0aW9uLnN0YXJ0ID0gT2JqZWN0LmFzc2lnbih7fSwgaGVhZDIucG9zaXRpb24uc3RhcnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICB0aGlzLmV4aXQodG9rZW4pOwp9CmZ1bmN0aW9uIGxpc3RJdGVtV2l0aFRhc2tMaXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZSwgaW5mbykgewogIGNvbnN0IGhlYWQyID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgY29uc3QgY2hlY2thYmxlID0gdHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIiAmJiBoZWFkMiAmJiBoZWFkMi50eXBlID09PSAicGFyYWdyYXBoIjsKICBjb25zdCBjaGVja2JveCA9ICJbIiArIChub2RlMi5jaGVja2VkID8gIngiIDogIiAiKSArICJdICI7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgaWYgKGNoZWNrYWJsZSkgewogICAgdHJhY2tlci5tb3ZlKGNoZWNrYm94KTsKICB9CiAgbGV0IHZhbHVlMiA9IGhhbmRsZS5saXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZSwgewogICAgLi4uaW5mbywKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgaWYgKGNoZWNrYWJsZSkgewogICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL14oPzpbKistXXxcZCtcLikoW1xyXG5dfCB7MSwzfSkvLCBjaGVjayk7CiAgfQogIHJldHVybiB2YWx1ZTI7CiAgZnVuY3Rpb24gY2hlY2soJDApIHsKICAgIHJldHVybiAkMCArIGNoZWNrYm94OwogIH0KfQp2YXIgaW5pdF9saWIxNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV90YXNrX2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE3KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gWwogICAgZ2ZtQXV0b2xpbmtMaXRlcmFsRnJvbU1hcmtkb3duKCksCiAgICBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpLAogICAgZ2ZtU3RyaWtldGhyb3VnaEZyb21NYXJrZG93bigpLAogICAgZ2ZtVGFibGVGcm9tTWFya2Rvd24oKSwKICAgIGdmbVRhc2tMaXN0SXRlbUZyb21NYXJrZG93bigpCiAgXTsKfQpmdW5jdGlvbiBnZm1Ub01hcmtkb3duKG9wdGlvbnMpIHsKICByZXR1cm4gewogICAgZXh0ZW5zaW9uczogWwogICAgICBnZm1BdXRvbGlua0xpdGVyYWxUb01hcmtkb3duKCksCiAgICAgIGdmbUZvb3Rub3RlVG9NYXJrZG93bihvcHRpb25zKSwKICAgICAgZ2ZtU3RyaWtldGhyb3VnaFRvTWFya2Rvd24oKSwKICAgICAgZ2ZtVGFibGVUb01hcmtkb3duKG9wdGlvbnMpLAogICAgICBnZm1UYXNrTGlzdEl0ZW1Ub01hcmtkb3duKCkKICAgIF0KICB9Owp9CnZhciBpbml0X2xpYjE4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm1AMy4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX2F1dG9saW5rX2xpdGVyYWwoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fZm9vdG5vdGUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV90YWJsZSgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV90YXNrX2xpc3RfaXRlbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm1AMy4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm1AMy4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNodW5rZWRAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNodW5rZWQvaW5kZXguanMKZnVuY3Rpb24gc3BsaWNlKGxpc3Q1LCBzdGFydCwgcmVtb3ZlMiwgaXRlbXMpIHsKICBjb25zdCBlbmQzID0gbGlzdDUubGVuZ3RoOwogIGxldCBjaHVua1N0YXJ0ID0gMDsKICBsZXQgcGFyYW1ldGVyczsKICBpZiAoc3RhcnQgPCAwKSB7CiAgICBzdGFydCA9IC1zdGFydCA+IGVuZDMgPyAwIDogZW5kMyArIHN0YXJ0OwogIH0gZWxzZSB7CiAgICBzdGFydCA9IHN0YXJ0ID4gZW5kMyA/IGVuZDMgOiBzdGFydDsKICB9CiAgcmVtb3ZlMiA9IHJlbW92ZTIgPiAwID8gcmVtb3ZlMiA6IDA7CiAgaWYgKGl0ZW1zLmxlbmd0aCA8IDFlNCkgewogICAgcGFyYW1ldGVycyA9IEFycmF5LmZyb20oaXRlbXMpOwogICAgcGFyYW1ldGVycy51bnNoaWZ0KHN0YXJ0LCByZW1vdmUyKTsKICAgIGxpc3Q1LnNwbGljZSguLi5wYXJhbWV0ZXJzKTsKICB9IGVsc2UgewogICAgaWYgKHJlbW92ZTIpIGxpc3Q1LnNwbGljZShzdGFydCwgcmVtb3ZlMik7CiAgICB3aGlsZSAoY2h1bmtTdGFydCA8IGl0ZW1zLmxlbmd0aCkgewogICAgICBwYXJhbWV0ZXJzID0gaXRlbXMuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDFlNCk7CiAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChzdGFydCwgMCk7CiAgICAgIGxpc3Q1LnNwbGljZSguLi5wYXJhbWV0ZXJzKTsKICAgICAgY2h1bmtTdGFydCArPSAxZTQ7CiAgICAgIHN0YXJ0ICs9IDFlNDsKICAgIH0KICB9Cn0KZnVuY3Rpb24gcHVzaChsaXN0NSwgaXRlbXMpIHsKICBpZiAobGlzdDUubGVuZ3RoID4gMCkgewogICAgc3BsaWNlKGxpc3Q1LCBsaXN0NS5sZW5ndGgsIDAsIGl0ZW1zKTsKICAgIHJldHVybiBsaXN0NTsKICB9CiAgcmV0dXJuIGl0ZW1zOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jaHVua2VkQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaHVua2VkL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9uc0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zL2luZGV4LmpzCmZ1bmN0aW9uIGNvbWJpbmVFeHRlbnNpb25zKGV4dGVuc2lvbnMpIHsKICBjb25zdCBhbGwzID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICBzeW50YXhFeHRlbnNpb24oYWxsMywgZXh0ZW5zaW9uc1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGFsbDM7Cn0KZnVuY3Rpb24gc3ludGF4RXh0ZW5zaW9uKGFsbDMsIGV4dGVuc2lvbjIpIHsKICBsZXQgaG9vazsKICBmb3IgKGhvb2sgaW4gZXh0ZW5zaW9uMikgewogICAgY29uc3QgbWF5YmUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbDMsIGhvb2spID8gYWxsM1tob29rXSA6IHZvaWQgMDsKICAgIGNvbnN0IGxlZnQgPSBtYXliZSB8fCAoYWxsM1tob29rXSA9IHt9KTsKICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltob29rXTsKICAgIGxldCBjb2RlNDsKICAgIGlmIChyaWdodCkgewogICAgICBmb3IgKGNvZGU0IGluIHJpZ2h0KSB7CiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxlZnQsIGNvZGU0KSkgbGVmdFtjb2RlNF0gPSBbXTsKICAgICAgICBjb25zdCB2YWx1ZTIgPSByaWdodFtjb2RlNF07CiAgICAgICAgY29uc3RydWN0cygKICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTG9va3MgbGlrZSBhIGxpc3QuCiAgICAgICAgICBsZWZ0W2NvZGU0XSwKICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUyKSA/IHZhbHVlMiA6IHZhbHVlMiA/IFt2YWx1ZTJdIDogW10KICAgICAgICApOwogICAgICB9CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGNvbnN0cnVjdHMoZXhpc3RpbmcsIGxpc3Q1KSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGNvbnN0IGJlZm9yZSA9IFtdOwogIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgOwogICAgKGxpc3Q1W2luZGV4Ml0uYWRkID09PSAiYWZ0ZXIiID8gZXhpc3RpbmcgOiBiZWZvcmUpLnB1c2gobGlzdDVbaW5kZXgyXSk7CiAgfQogIHNwbGljZShleGlzdGluZywgMCwgMCwgYmVmb3JlKTsKfQpmdW5jdGlvbiBjb21iaW5lSHRtbEV4dGVuc2lvbnMoaHRtbEV4dGVuc2lvbnMpIHsKICBjb25zdCBoYW5kbGVyczIgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgaHRtbEV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICBodG1sRXh0ZW5zaW9uKGhhbmRsZXJzMiwgaHRtbEV4dGVuc2lvbnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiBoYW5kbGVyczI7Cn0KZnVuY3Rpb24gaHRtbEV4dGVuc2lvbihhbGwzLCBleHRlbnNpb24yKSB7CiAgbGV0IGhvb2s7CiAgZm9yIChob29rIGluIGV4dGVuc2lvbjIpIHsKICAgIGNvbnN0IG1heWJlID0gaGFzT3duUHJvcGVydHkuY2FsbChhbGwzLCBob29rKSA/IGFsbDNbaG9va10gOiB2b2lkIDA7CiAgICBjb25zdCBsZWZ0ID0gbWF5YmUgfHwgKGFsbDNbaG9va10gPSB7fSk7CiAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJbaG9va107CiAgICBsZXQgdHlwZTU7CiAgICBpZiAocmlnaHQpIHsKICAgICAgZm9yICh0eXBlNSBpbiByaWdodCkgewogICAgICAgIGxlZnRbdHlwZTVdID0gcmlnaHRbdHlwZTVdOwogICAgICB9CiAgICB9CiAgfQp9CnZhciBoYXNPd25Qcm9wZXJ0eTsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbCgpIHsKICByZXR1cm4gewogICAgdGV4dDogdGV4dDIKICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplRW1haWxBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgZG90OwogIGxldCBkYXRhMTE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoIWdmbUF0ZXh0KGNvZGU0KSB8fCAhcHJldmlvdXNFbWFpbC5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgfHwgcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua0VtYWlsIik7CiAgICByZXR1cm4gYXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdGV4dChjb2RlNCkgewogICAgaWYgKGdmbUF0ZXh0KGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gYXRleHQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NikgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhlbWFpbERvbWFpbkRvdFRyYWlsLCBlbWFpbERvbWFpbkFmdGVyLCBlbWFpbERvbWFpbkRvdCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGRhdGExMSA9IHRydWU7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxEb21haW5Eb3QoY29kZTQpIHsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBkb3QgPSB0cnVlOwogICAgcmV0dXJuIGVtYWlsRG9tYWluOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KSB7CiAgICBpZiAoZGF0YTExICYmIGRvdCAmJiBhc2NpaUFscGhhKHNlbGYyLnByZXZpb3VzKSkgewogICAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGlua0VtYWlsIik7CiAgICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplV3d3QXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHd3d1N0YXJ0OwogIGZ1bmN0aW9uIHd3d1N0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgIT09IDg3ICYmIGNvZGU0ICE9PSAxMTkgfHwgIXByZXZpb3VzV3d3LmNhbGwoc2VsZjIsIHNlbGYyLnByZXZpb3VzKSB8fCBwcmV2aW91c1VuYmFsYW5jZWQoc2VsZjIuZXZlbnRzKSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpOwogICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rV3d3Iik7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh3d3dQcmVmaXgsIGVmZmVjdHMuYXR0ZW1wdChkb21haW4sIGVmZmVjdHMuYXR0ZW1wdChwYXRoLCB3d3dBZnRlciksIG5vayksIG5vaykoY29kZTQpOwogIH0KICBmdW5jdGlvbiB3d3dBZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmtXd3ciKTsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVQcm90b2NvbEF1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBidWZmZXIyID0gIiI7CiAgbGV0IHNlZW4gPSBmYWxzZTsKICByZXR1cm4gcHJvdG9jb2xTdGFydDsKICBmdW5jdGlvbiBwcm90b2NvbFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoKGNvZGU0ID09PSA3MiB8fCBjb2RlNCA9PT0gMTA0KSAmJiBwcmV2aW91c1Byb3RvY29sLmNhbGwoc2VsZjIsIHNlbGYyLnByZXZpb3VzKSAmJiAhcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua0h0dHAiKTsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlNCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwcm90b2NvbFByZWZpeEluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBwcm90b2NvbFByZWZpeEluc2lkZShjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpICYmIGJ1ZmZlcjIubGVuZ3RoIDwgNSkgewogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGU0KTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHByb3RvY29sUHJlZml4SW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBjb25zdCBwcm90b2NvbCA9IGJ1ZmZlcjIudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKHByb3RvY29sID09PSAiaHR0cCIgfHwgcHJvdG9jb2wgPT09ICJodHRwcyIpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBwcm90b2NvbFNsYXNoZXNJbnNpZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBwcm90b2NvbFNsYXNoZXNJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgaWYgKHNlZW4pIHsKICAgICAgICByZXR1cm4gYWZ0ZXJQcm90b2NvbDsKICAgICAgfQogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgcmV0dXJuIHByb3RvY29sU2xhc2hlc0luc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlclByb3RvY29sKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgfHwgYXNjaWlDb250cm9sKGNvZGU0KSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkgfHwgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSA/IG5vayhjb2RlNCkgOiBlZmZlY3RzLmF0dGVtcHQoZG9tYWluLCBlZmZlY3RzLmF0dGVtcHQocGF0aCwgcHJvdG9jb2xBZnRlciksIG5vaykoY29kZTQpOwogIH0KICBmdW5jdGlvbiBwcm90b2NvbEFmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGlua0h0dHAiKTsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVXd3dQcmVmaXgoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHd3d1ByZWZpeEluc2lkZTsKICBmdW5jdGlvbiB3d3dQcmVmaXhJbnNpZGUoY29kZTQpIHsKICAgIGlmICgoY29kZTQgPT09IDg3IHx8IGNvZGU0ID09PSAxMTkpICYmIHNpemUgPCAzKSB7CiAgICAgIHNpemUrKzsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHd3d1ByZWZpeEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDYgJiYgc2l6ZSA9PT0gMykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gd3d3UHJlZml4QWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd3d3UHJlZml4QWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZURvbWFpbihlZmZlY3RzLCBvazMsIG5vaykgewogIGxldCB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudDsKICBsZXQgdW5kZXJzY29yZUluTGFzdExhc3RTZWdtZW50OwogIGxldCBzZWVuOwogIHJldHVybiBkb21haW5JbnNpZGU7CiAgZnVuY3Rpb24gZG9tYWluSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA5NSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh0cmFpbCwgZG9tYWluQWZ0ZXIsIGRvbWFpbkF0UHVuY3R1YXRpb24pKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkgfHwgY29kZTQgIT09IDQ1ICYmIHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgICAgcmV0dXJuIGRvbWFpbkFmdGVyKGNvZGU0KTsKICAgIH0KICAgIHNlZW4gPSB0cnVlOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkb21haW5JbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGRvbWFpbkF0UHVuY3R1YXRpb24oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTUpIHsKICAgICAgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgdW5kZXJzY29yZUluTGFzdExhc3RTZWdtZW50ID0gdW5kZXJzY29yZUluTGFzdFNlZ21lbnQ7CiAgICAgIHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50ID0gdm9pZCAwOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkb21haW5JbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGRvbWFpbkFmdGVyKGNvZGU0KSB7CiAgICBpZiAodW5kZXJzY29yZUluTGFzdExhc3RTZWdtZW50IHx8IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50IHx8ICFzZWVuKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUGF0aChlZmZlY3RzLCBvazMpIHsKICBsZXQgc2l6ZU9wZW4gPSAwOwogIGxldCBzaXplQ2xvc2UgPSAwOwogIHJldHVybiBwYXRoSW5zaWRlOwogIGZ1bmN0aW9uIHBhdGhJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDApIHsKICAgICAgc2l6ZU9wZW4rKzsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQxICYmIHNpemVDbG9zZSA8IHNpemVPcGVuKSB7CiAgICAgIHJldHVybiBwYXRoQXRQdW5jdHVhdGlvbihjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDMzIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzggfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0MSB8fCBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ0IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDU5IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjMgfHwgY29kZTQgPT09IDkzIHx8IGNvZGU0ID09PSA5NSB8fCBjb2RlNCA9PT0gMTI2KSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHRyYWlsLCBvazMsIHBhdGhBdFB1bmN0dWF0aW9uKShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBwYXRoSW5zaWRlOwogIH0KICBmdW5jdGlvbiBwYXRoQXRQdW5jdHVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MSkgewogICAgICBzaXplQ2xvc2UrKzsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gcGF0aEluc2lkZTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVUcmFpbChlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiB0cmFpbDI7CiAgZnVuY3Rpb24gdHJhaWwyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDMzIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDQgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gNTkgfHwgY29kZTQgPT09IDYzIHx8IGNvZGU0ID09PSA5NSB8fCBjb2RlNCA9PT0gMTI2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbDI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDM4KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWxCcmFja2V0QWZ0ZXI7CiAgICB9CiAgICBpZiAoCiAgICAgIC8vIGA8YCBpcyBhbiBlbmQuCiAgICAgIGNvZGU0ID09PSA2MCB8fCAvLyBTbyBpcyB3aGl0ZXNwYWNlLgogICAgICBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkKICAgICkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0cmFpbEJyYWNrZXRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0MCB8fCBjb2RlNCA9PT0gOTEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIHRyYWlsMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBhc2NpaUFscGhhKGNvZGU0KSA/IHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlSW5zaWRlKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbDI7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRW1haWxEb21haW5Eb3RUcmFpbChlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcHJldmlvdXNXd3coY29kZTQpIHsKICByZXR1cm4gY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQwIHx8IGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gOTUgfHwgY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MyB8fCBjb2RlNCA9PT0gMTI2IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpOwp9CmZ1bmN0aW9uIHByZXZpb3VzUHJvdG9jb2woY29kZTQpIHsKICByZXR1cm4gIWFzY2lpQWxwaGEoY29kZTQpOwp9CmZ1bmN0aW9uIHByZXZpb3VzRW1haWwoY29kZTQpIHsKICByZXR1cm4gIShjb2RlNCA9PT0gNDcgfHwgZ2ZtQXRleHQoY29kZTQpKTsKfQpmdW5jdGlvbiBnZm1BdGV4dChjb2RlNCkgewogIHJldHVybiBjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpOwp9CmZ1bmN0aW9uIHByZXZpb3VzVW5iYWxhbmNlZChldmVudHMpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgcmVzdWx0ID0gZmFsc2U7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgaWYgKCh0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIpICYmICF0b2tlbi5fYmFsYW5jZWQpIHsKICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAodG9rZW4uX2dmbUF1dG9saW5rTGl0ZXJhbFdhbGtlZEludG8pIHsKICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoZXZlbnRzLmxlbmd0aCA+IDAgJiYgIXJlc3VsdCkgewogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50byA9IHRydWU7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIHd3d1ByZWZpeCwgZG9tYWluLCBwYXRoLCB0cmFpbCwgZW1haWxEb21haW5Eb3RUcmFpbCwgd3d3QXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmssIGVtYWlsQXV0b2xpbmssIHRleHQyLCBjb2RlMjsKdmFyIGluaXRfc3ludGF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvc3ludGF4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICB3d3dQcmVmaXggPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVd3d1ByZWZpeCwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIGRvbWFpbiA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplRG9tYWluLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgcGF0aCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplUGF0aCwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIHRyYWlsID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVUcmFpbCwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIGVtYWlsRG9tYWluRG90VHJhaWwgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUVtYWlsRG9tYWluRG90VHJhaWwsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICB3d3dBdXRvbGluayA9IHsKICAgICAgbmFtZTogInd3d0F1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplV3d3QXV0b2xpbmssCiAgICAgIHByZXZpb3VzOiBwcmV2aW91c1d3dwogICAgfTsKICAgIHByb3RvY29sQXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJwcm90b2NvbEF1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplUHJvdG9jb2xBdXRvbGluaywKICAgICAgcHJldmlvdXM6IHByZXZpb3VzUHJvdG9jb2wKICAgIH07CiAgICBlbWFpbEF1dG9saW5rID0gewogICAgICBuYW1lOiAiZW1haWxBdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUVtYWlsQXV0b2xpbmssCiAgICAgIHByZXZpb3VzOiBwcmV2aW91c0VtYWlsCiAgICB9OwogICAgdGV4dDIgPSB7fTsKICAgIGNvZGUyID0gNDg7CiAgICB3aGlsZSAoY29kZTIgPCAxMjMpIHsKICAgICAgdGV4dDJbY29kZTJdID0gZW1haWxBdXRvbGluazsKICAgICAgY29kZTIrKzsKICAgICAgaWYgKGNvZGUyID09PSA1OCkgY29kZTIgPSA2NTsKICAgICAgZWxzZSBpZiAoY29kZTIgPT09IDkxKSBjb2RlMiA9IDk3OwogICAgfQogICAgdGV4dDJbNDNdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzQ1XSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls0Nl0gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbOTVdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzcyXSA9IFtlbWFpbEF1dG9saW5rLCBwcm90b2NvbEF1dG9saW5rXTsKICAgIHRleHQyWzEwNF0gPSBbZW1haWxBdXRvbGluaywgcHJvdG9jb2xBdXRvbGlua107CiAgICB0ZXh0Mls4N10gPSBbZW1haWxBdXRvbGluaywgd3d3QXV0b2xpbmtdOwogICAgdGV4dDJbMTE5XSA9IFtlbWFpbEF1dG9saW5rLCB3d3dBdXRvbGlua107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1lbmNvZGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWVuY29kZS9pbmRleC5qcwpmdW5jdGlvbiBlbmNvZGUodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5yZXBsYWNlKC9bIiY8Pl0vZywgcmVwbGFjZTUpOwogIGZ1bmN0aW9uIHJlcGxhY2U1KHZhbHVlMykgewogICAgcmV0dXJuICImIiArIGNoYXJhY3RlclJlZmVyZW5jZXNbCiAgICAgIC8qKiBAdHlwZSB7a2V5b2YgdHlwZW9mIGNoYXJhY3RlclJlZmVyZW5jZXN9ICovCiAgICAgIHZhbHVlMwogICAgXSArICI7IjsKICB9Cn0KdmFyIGNoYXJhY3RlclJlZmVyZW5jZXM7CnZhciBpbml0X21pY3JvbWFya191dGlsX2VuY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWVuY29kZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZW5jb2RlL2luZGV4LmpzIigpIHsKICAgIGNoYXJhY3RlclJlZmVyZW5jZXMgPSB7ICciJzogInF1b3QiLCAiJiI6ICJhbXAiLCAiPCI6ICJsdCIsICI+IjogImd0IiB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmkvaW5kZXguanMKZnVuY3Rpb24gc2FuaXRpemVVcmkodXJsLCBwcm90b2NvbCkgewogIGNvbnN0IHZhbHVlMiA9IGVuY29kZShub3JtYWxpemVVcmkodXJsIHx8ICIiKSk7CiAgaWYgKCFwcm90b2NvbCkgewogICAgcmV0dXJuIHZhbHVlMjsKICB9CiAgY29uc3QgY29sb24gPSB2YWx1ZTIuaW5kZXhPZigiOiIpOwogIGNvbnN0IHF1ZXN0aW9uTWFyayA9IHZhbHVlMi5pbmRleE9mKCI/Iik7CiAgY29uc3QgbnVtYmVyU2lnbiA9IHZhbHVlMi5pbmRleE9mKCIjIik7CiAgY29uc3Qgc2xhc2ggPSB2YWx1ZTIuaW5kZXhPZigiLyIpOwogIGlmICgKICAgIC8vIElmIHRoZXJlIGlzIG5vIHByb3RvY29sLCBpdOKAmXMgcmVsYXRpdmUuCiAgICBjb2xvbiA8IDAgfHwgLy8gSWYgdGhlIGZpcnN0IGNvbG9uIGlzIGFmdGVyIGEgYD9gLCBgI2AsIG9yIGAvYCwgaXTigJlzIG5vdCBhIHByb3RvY29sLgogICAgc2xhc2ggPiAtMSAmJiBjb2xvbiA+IHNsYXNoIHx8IHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrIHx8IG51bWJlclNpZ24gPiAtMSAmJiBjb2xvbiA+IG51bWJlclNpZ24gfHwgLy8gSXQgaXMgYSBwcm90b2NvbCwgaXQgc2hvdWxkIGJlIGFsbG93ZWQuCiAgICBwcm90b2NvbC50ZXN0KHZhbHVlMi5zbGljZSgwLCBjb2xvbikpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICByZXR1cm4gIiI7Cn0KZnVuY3Rpb24gbm9ybWFsaXplVXJpKHZhbHVlMikgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgc3RhcnQgPSAwOwogIGxldCBza2lwMiA9IDA7CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWUyLmxlbmd0aCkgewogICAgY29uc3QgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogICAgbGV0IHJlcGxhY2U1ID0gIiI7CiAgICBpZiAoY29kZTQgPT09IDM3ICYmIGFzY2lpQWxwaGFudW1lcmljKHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4MiArIDEpKSAmJiBhc2NpaUFscGhhbnVtZXJpYyh2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIgKyAyKSkpIHsKICAgICAgc2tpcDIgPSAyOwogICAgfSBlbHNlIGlmIChjb2RlNCA8IDEyOCkgewogICAgICBpZiAoIS9bISMkJi07PT8tWl9hLXp+XS8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KSkpIHsKICAgICAgICByZXBsYWNlNSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvZGU0ID4gNTUyOTUgJiYgY29kZTQgPCA1NzM0NCkgewogICAgICBjb25zdCBuZXh0MiA9IHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4MiArIDEpOwogICAgICBpZiAoY29kZTQgPCA1NjMyMCAmJiBuZXh0MiA+IDU2MzE5ICYmIG5leHQyIDwgNTczNDQpIHsKICAgICAgICByZXBsYWNlNSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQsIG5leHQyKTsKICAgICAgICBza2lwMiA9IDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwbGFjZTUgPSAiXHVGRkZEIjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwbGFjZTUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgIH0KICAgIGlmIChyZXBsYWNlNSkgewogICAgICByZXN1bHQucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnQsIGluZGV4MiksIGVuY29kZVVSSUNvbXBvbmVudChyZXBsYWNlNSkpOwogICAgICBzdGFydCA9IGluZGV4MiArIHNraXAyICsgMTsKICAgICAgcmVwbGFjZTUgPSAiIjsKICAgIH0KICAgIGlmIChza2lwMikgewogICAgICBpbmRleDIgKz0gc2tpcDI7CiAgICAgIHNraXAyID0gMDsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKSArIHZhbHVlMi5zbGljZShzdGFydCk7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmkvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZW5jb2RlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbEh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGV4aXQ6IHsKICAgICAgbGl0ZXJhbEF1dG9saW5rRW1haWwsCiAgICAgIGxpdGVyYWxBdXRvbGlua0h0dHAsCiAgICAgIGxpdGVyYWxBdXRvbGlua1d3dwogICAgfQogIH07Cn0KZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rV3d3KHRva2VuKSB7CiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4sICJodHRwOi8vIik7Cn0KZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rRW1haWwodG9rZW4pIHsKICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbiwgIm1haWx0bzoiKTsKfQpmdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtIdHRwKHRva2VuKSB7CiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGFuY2hvckZyb21Ub2tlbih0b2tlbiwgcHJvdG9jb2wpIHsKICBjb25zdCB1cmwgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB0aGlzLnRhZygnPGEgaHJlZj0iJyArIHNhbml0aXplVXJpKChwcm90b2NvbCB8fCAiIikgKyB1cmwpICsgJyI+Jyk7CiAgdGhpcy5yYXcodGhpcy5lbmNvZGUodXJsKSk7CiAgdGhpcy50YWcoIjwvYT4iKTsKfQp2YXIgaW5pdF9odG1sMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2h0bWwuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fYXV0b2xpbmtfbGl0ZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMiKCkgewogICAgaW5pdF9zeW50YXgoKTsKICAgIGluaXRfaHRtbDIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbC9pbmRleC5qcwpmdW5jdGlvbiByZXNvbHZlQWxsKGNvbnN0cnVjdHMyLCBldmVudHMsIGNvbnRleHQyKSB7CiAgY29uc3QgY2FsbGVkID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGNvbnN0cnVjdHMyLmxlbmd0aCkgewogICAgY29uc3QgcmVzb2x2ZTIgPSBjb25zdHJ1Y3RzMltpbmRleDJdLnJlc29sdmVBbGw7CiAgICBpZiAocmVzb2x2ZTIgJiYgIWNhbGxlZC5pbmNsdWRlcyhyZXNvbHZlMikpIHsKICAgICAgZXZlbnRzID0gcmVzb2x2ZTIoZXZlbnRzLCBjb250ZXh0Mik7CiAgICAgIGNhbGxlZC5wdXNoKHJlc29sdmUyKTsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9yZXNvbHZlX2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdHRlbnRpb24uanMKZnVuY3Rpb24gcmVzb2x2ZUFsbEF0dGVudGlvbihldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBvcGVuOwogIGxldCBncm91cDsKICBsZXQgdGV4dDk7CiAgbGV0IG9wZW5pbmdTZXF1ZW5jZTsKICBsZXQgY2xvc2luZ1NlcXVlbmNlOwogIGxldCB1c2U7CiAgbGV0IG5leHRFdmVudHM7CiAgbGV0IG9mZnNldDsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImF0dGVudGlvblNlcXVlbmNlIiAmJiBldmVudHNbaW5kZXgyXVsxXS5fY2xvc2UpIHsKICAgICAgb3BlbiA9IGluZGV4MjsKICAgICAgd2hpbGUgKG9wZW4tLSkgewogICAgICAgIGlmIChldmVudHNbb3Blbl1bMF0gPT09ICJleGl0IiAmJiBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gImF0dGVudGlvblNlcXVlbmNlIiAmJiBldmVudHNbb3Blbl1bMV0uX29wZW4gJiYgLy8gSWYgdGhlIG1hcmtlcnMgYXJlIHRoZSBzYW1lOgogICAgICAgIGNvbnRleHQyLnNsaWNlU2VyaWFsaXplKGV2ZW50c1tvcGVuXVsxXSkuY2hhckNvZGVBdCgwKSA9PT0gY29udGV4dDIuc2xpY2VTZXJpYWxpemUoZXZlbnRzW2luZGV4Ml1bMV0pLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgIGlmICgoZXZlbnRzW29wZW5dWzFdLl9jbG9zZSB8fCBldmVudHNbaW5kZXgyXVsxXS5fb3BlbikgJiYgKGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQpICUgMyAmJiAhKChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQgKyBldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0KSAlIDMpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdXNlID0gZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ID4gMSAmJiBldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0ID4gMSA/IDIgOiAxOwogICAgICAgICAgY29uc3Qgc3RhcnQgPSB7CiAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmQKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBlbmQzID0gewogICAgICAgICAgICAuLi5ldmVudHNbaW5kZXgyXVsxXS5zdGFydAogICAgICAgICAgfTsKICAgICAgICAgIG1vdmVQb2ludChzdGFydCwgLXVzZSk7CiAgICAgICAgICBtb3ZlUG9pbnQoZW5kMywgdXNlKTsKICAgICAgICAgIG9wZW5pbmdTZXF1ZW5jZSA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmdTZXF1ZW5jZSIgOiAiZW1waGFzaXNTZXF1ZW5jZSIsCiAgICAgICAgICAgIHN0YXJ0LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbb3Blbl1bMV0uZW5kCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBjbG9zaW5nU2VxdWVuY2UgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nU2VxdWVuY2UiIDogImVtcGhhc2lzU2VxdWVuY2UiLAogICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVuZDogZW5kMwogICAgICAgICAgfTsKICAgICAgICAgIHRleHQ5ID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZ1RleHQiIDogImVtcGhhc2lzVGV4dCIsCiAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbaW5kZXgyXVsxXS5zdGFydAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgZ3JvdXAgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nIiA6ICJlbXBoYXNpcyIsCiAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgLi4ub3BlbmluZ1NlcXVlbmNlLnN0YXJ0CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVuZDogewogICAgICAgICAgICAgIC4uLmNsb3NpbmdTZXF1ZW5jZS5lbmQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS5lbmQgPSB7CiAgICAgICAgICAgIC4uLm9wZW5pbmdTZXF1ZW5jZS5zdGFydAogICAgICAgICAgfTsKICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0ID0gewogICAgICAgICAgICAuLi5jbG9zaW5nU2VxdWVuY2UuZW5kCiAgICAgICAgICB9OwogICAgICAgICAgbmV4dEV2ZW50cyA9IFtdOwogICAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJlbnRlciIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXV0pOwogICAgICAgICAgfQogICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZW50ZXIiLCBncm91cCwgY29udGV4dDJdLCBbImVudGVyIiwgb3BlbmluZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZXhpdCIsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV0pOwogICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgcmVzb2x2ZUFsbChjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgaW5kZXgyKSwgY29udGV4dDIpKTsKICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImVudGVyIiwgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGNsb3NpbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImV4aXQiLCBncm91cCwgY29udGV4dDJdXSk7CiAgICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICBvZmZzZXQgPSAyOwogICAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJlbnRlciIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml1dKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBzcGxpY2UoZXZlbnRzLCBvcGVuIC0gMSwgaW5kZXgyIC0gb3BlbiArIDMsIG5leHRFdmVudHMpOwogICAgICAgICAgaW5kZXgyID0gb3BlbiArIG5leHRFdmVudHMubGVuZ3RoIC0gb2Zmc2V0IC0gMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImF0dGVudGlvblNlcXVlbmNlIikgewogICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gImRhdGEiOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplQXR0ZW50aW9uKGVmZmVjdHMsIG9rMykgewogIGNvbnN0IGF0dGVudGlvbk1hcmtlcnMyID0gdGhpcy5wYXJzZXIuY29uc3RydWN0cy5hdHRlbnRpb25NYXJrZXJzLm51bGw7CiAgY29uc3QgcHJldmlvdXMzID0gdGhpcy5wcmV2aW91czsKICBjb25zdCBiZWZvcmUgPSBjbGFzc2lmeUNoYXJhY3RlcihwcmV2aW91czMpOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIGVmZmVjdHMuZW50ZXIoImF0dGVudGlvblNlcXVlbmNlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImF0dGVudGlvblNlcXVlbmNlIik7CiAgICBjb25zdCBhZnRlciA9IGNsYXNzaWZ5Q2hhcmFjdGVyKGNvZGU0KTsKICAgIGNvbnN0IG9wZW4gPSAhYWZ0ZXIgfHwgYWZ0ZXIgPT09IDIgJiYgYmVmb3JlIHx8IGF0dGVudGlvbk1hcmtlcnMyLmluY2x1ZGVzKGNvZGU0KTsKICAgIGNvbnN0IGNsb3NlNyA9ICFiZWZvcmUgfHwgYmVmb3JlID09PSAyICYmIGFmdGVyIHx8IGF0dGVudGlvbk1hcmtlcnMyLmluY2x1ZGVzKHByZXZpb3VzMyk7CiAgICB0b2tlbi5fb3BlbiA9IEJvb2xlYW4obWFya2VyID09PSA0MiA/IG9wZW4gOiBvcGVuICYmIChiZWZvcmUgfHwgIWNsb3NlNykpOwogICAgdG9rZW4uX2Nsb3NlID0gQm9vbGVhbihtYXJrZXIgPT09IDQyID8gY2xvc2U3IDogY2xvc2U3ICYmIChhZnRlciB8fCAhb3BlbikpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIG1vdmVQb2ludChwb2ludDQsIG9mZnNldCkgewogIHBvaW50NC5jb2x1bW4gKz0gb2Zmc2V0OwogIHBvaW50NC5vZmZzZXQgKz0gb2Zmc2V0OwogIHBvaW50NC5fYnVmZmVySW5kZXggKz0gb2Zmc2V0Owp9CnZhciBhdHRlbnRpb247CnZhciBpbml0X2F0dGVudGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F0dGVudGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2xhc3NpZnlfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgICBhdHRlbnRpb24gPSB7CiAgICAgIG5hbWU6ICJhdHRlbnRpb24iLAogICAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsQXR0ZW50aW9uLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVBdHRlbnRpb24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdXRvbGluay5qcwpmdW5jdGlvbiB0b2tlbml6ZUF1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua01hcmtlciIpOwogICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtQcm90b2NvbCIpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2NoZW1lT3JFbWFpbEF0ZXh0OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2NCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2NoZW1lT3JFbWFpbEF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIHNpemUgPSAxOwogICAgICByZXR1cm4gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0KGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUgPSAwOwogICAgICByZXR1cm4gdXJsSW5zaWRlOwogICAgfQogICAgaWYgKChjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpICYmIHNpemUrKyA8IDMyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQ7CiAgICB9CiAgICBzaXplID0gMDsKICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdXJsSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpOwogICAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmsiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzIgfHwgY29kZTQgPT09IDYwIHx8IGFzY2lpQ29udHJvbChjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHVybEluc2lkZTsKICB9CiAgZnVuY3Rpb24gZW1haWxBdGV4dChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2NCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW1haWxBdFNpZ25PckRvdDsKICAgIH0KICAgIGlmIChhc2NpaUF0ZXh0KGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW1haWxBdGV4dDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbEF0U2lnbk9yRG90KGNvZGU0KSB7CiAgICByZXR1cm4gYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpID8gZW1haWxMYWJlbChjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbExhYmVsKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUgPSAwOwogICAgICByZXR1cm4gZW1haWxBdFNpZ25PckRvdDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua1Byb3RvY29sIikudHlwZSA9ICJhdXRvbGlua0VtYWlsIjsKICAgICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gZW1haWxWYWx1ZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsVmFsdWUoY29kZTQpIHsKICAgIGlmICgoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgJiYgc2l6ZSsrIDwgNjMpIHsKICAgICAgY29uc3QgbmV4dDIgPSBjb2RlNCA9PT0gNDUgPyBlbWFpbFZhbHVlIDogZW1haWxMYWJlbDsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIG5leHQyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBhdXRvbGluazsKdmFyIGluaXRfYXV0b2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdXRvbGluay5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgYXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJhdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUF1dG9saW5rCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3Rvcnktc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvazMsIHR5cGU1LCBtYXgzKSB7CiAgY29uc3QgbGltaXQgPSBtYXgzID8gbWF4MyAtIDEgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICByZXR1cm4gcHJlZml4NChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJlZml4NChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpICYmIHNpemUrKyA8IGxpbWl0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwcmVmaXg0OwogICAgfQogICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1zcGFjZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxhbmstbGluZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUJsYW5rTGluZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCAibGluZVByZWZpeCIpKGNvZGU0KSA6IGFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBibGFua0xpbmU7CnZhciBpbml0X2JsYW5rX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibGFuay1saW5lLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBibGFua0xpbmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsYW5rTGluZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2Jsb2NrLXF1b3RlLmpzCmZ1bmN0aW9uIHRva2VuaXplQmxvY2tRdW90ZVN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBjb25zdCBzdGF0ZSA9IHNlbGYyLmNvbnRhaW5lclN0YXRlOwogICAgICBpZiAoIXN0YXRlLm9wZW4pIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlIiwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHN0YXRlLm9wZW4gPSB0cnVlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXgiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiYmxvY2tRdW90ZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVNYXJrZXIiKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplQmxvY2tRdW90ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gY29udFN0YXJ0OwogIGZ1bmN0aW9uIGNvbnRTdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udEJlZm9yZSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGNvbnRCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250QmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsb2NrUXVvdGUsIG9rMywgbm9rKShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIGV4aXQyKGVmZmVjdHMpIHsKICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGUiKTsKfQp2YXIgYmxvY2tRdW90ZTsKdmFyIGluaXRfYmxvY2tfcXVvdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibG9jay1xdW90ZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgYmxvY2tRdW90ZSA9IHsKICAgICAgY29udGludWF0aW9uOiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZUNvbnRpbnVhdGlvbgogICAgICB9LAogICAgICBleGl0OiBleGl0MiwKICAgICAgbmFtZTogImJsb2NrUXVvdGUiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbG9ja1F1b3RlU3RhcnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzCmZ1bmN0aW9uIHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGUiKTsKICAgIGVmZmVjdHMuZW50ZXIoImVzY2FwZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZXNjYXBlTWFya2VyIik7CiAgICByZXR1cm4gaW5zaWRlOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChhc2NpaVB1bmN0dWF0aW9uKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlckVzY2FwZVZhbHVlIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGNoYXJhY3RlckVzY2FwZTsKdmFyIGluaXRfY2hhcmFjdGVyX2VzY2FwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1lc2NhcGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNoYXJhY3RlckVzY2FwZSA9IHsKICAgICAgbmFtZTogImNoYXJhY3RlckVzY2FwZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1yZWZlcmVuY2UuanMKZnVuY3Rpb24gdG9rZW5pemVDaGFyYWN0ZXJSZWZlcmVuY2UoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBtYXgzOwogIGxldCB0ZXN0OwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzUpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKTsKICAgICAgcmV0dXJuIG51bWVyaWM7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgbWF4MyA9IDMxOwogICAgdGVzdCA9IGFzY2lpQWxwaGFudW1lcmljOwogICAgcmV0dXJuIHZhbHVlMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG51bWVyaWMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gODggfHwgY29kZTQgPT09IDEyMCkgewogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICAgIG1heDMgPSA2OwogICAgICB0ZXN0ID0gYXNjaWlIZXhEaWdpdDsKICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICBtYXgzID0gNzsKICAgIHRlc3QgPSBhc2NpaURpZ2l0OwogICAgcmV0dXJuIHZhbHVlMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHZhbHVlMihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OSAmJiBzaXplKSB7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgICBpZiAodGVzdCA9PT0gYXNjaWlBbHBoYW51bWVyaWMgJiYgIWRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHNlbGYyLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpIHsKICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmICh0ZXN0KGNvZGU0KSAmJiBzaXplKysgPCBtYXgzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGNoYXJhY3RlclJlZmVyZW5jZTsKdmFyIGluaXRfY2hhcmFjdGVyX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1yZWZlcmVuY2UuanMiKCkgewogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjaGFyYWN0ZXJSZWZlcmVuY2UgPSB7CiAgICAgIG5hbWU6ICJjaGFyYWN0ZXJSZWZlcmVuY2UiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDaGFyYWN0ZXJSZWZlcmVuY2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWZlbmNlZC5qcwpmdW5jdGlvbiB0b2tlbml6ZUNvZGVGZW5jZWQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgY2xvc2VTdGFydCA9IHsKICAgIHBhcnRpYWw6IHRydWUsCiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zZVN0YXJ0CiAgfTsKICBsZXQgaW5pdGlhbFByZWZpeCA9IDA7CiAgbGV0IHNpemVPcGVuID0gMDsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgcmV0dXJuIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICBpbml0aWFsUHJlZml4ID0gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiA/IHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoIDogMDsKICAgIG1hcmtlciA9IGNvZGU0OwogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZCIpOwogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgcmV0dXJuIHNlcXVlbmNlT3Blbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgc2l6ZU9wZW4rKzsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlbjsKICAgIH0KICAgIGlmIChzaXplT3BlbiA8IDMpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaW5mb0JlZm9yZSwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiBpbmZvQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5mb0JlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2UiKTsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCA/IG9rMyhjb2RlNCkgOiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gaW5mbyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluZm8oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIik7CiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpOwogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIG1ldGFCZWZvcmUsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5NiAmJiBjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBpbmZvOwogIH0KICBmdW5jdGlvbiBtZXRhQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VNZXRhIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBtZXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbWV0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZU1ldGEiKTsKICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5NiAmJiBjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBtZXRhOwogIH0KICBmdW5jdGlvbiBhdE5vbkxhenlCcmVhayhjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zZVN0YXJ0LCBhZnRlciwgY29udGVudEJlZm9yZSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250ZW50QmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gY29udGVudFN0YXJ0OwogIH0KICBmdW5jdGlvbiBjb250ZW50U3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBpbml0aWFsUHJlZml4ID4gMCAmJiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBiZWZvcmVDb250ZW50Q2h1bmssICJsaW5lUHJlZml4IiwgaW5pdGlhbFByZWZpeCArIDEpKGNvZGU0KSA6IGJlZm9yZUNvbnRlbnRDaHVuayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZUNvbnRlbnRDaHVuayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmxvd1ZhbHVlIik7CiAgICByZXR1cm4gY29udGVudENodW5rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGVudENodW5rKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGbG93VmFsdWUiKTsKICAgICAgcmV0dXJuIGJlZm9yZUNvbnRlbnRDaHVuayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbnRlbnRDaHVuazsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRva2VuaXplQ2xvc2VTdGFydChlZmZlY3RzMiwgb2s0LCBub2syKSB7CiAgICBsZXQgc2l6ZSA9IDA7CiAgICByZXR1cm4gc3RhcnRCZWZvcmU7CiAgICBmdW5jdGlvbiBzdGFydEJlZm9yZShjb2RlNCkgewogICAgICBlZmZlY3RzMi5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzMi5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0czIuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gc3RhcnQyOwogICAgfQogICAgZnVuY3Rpb24gc3RhcnQyKGNvZGU0KSB7CiAgICAgIGVmZmVjdHMyLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKTsKICAgICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMyLCBiZWZvcmVTZXF1ZW5jZUNsb3NlLCAibGluZVByZWZpeCIsIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0KShjb2RlNCkgOiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGJlZm9yZVNlcXVlbmNlQ2xvc2UoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgICBlZmZlY3RzMi5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vazIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICAgIHNpemUrKzsKICAgICAgICBlZmZlY3RzMi5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZTsKICAgICAgfQogICAgICBpZiAoc2l6ZSA+PSBzaXplT3BlbikgewogICAgICAgIGVmZmVjdHMyLmV4aXQoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICAgICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMyLCBzZXF1ZW5jZUNsb3NlQWZ0ZXIsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogc2VxdWVuY2VDbG9zZUFmdGVyKGNvZGU0KTsKICAgICAgfQogICAgICByZXR1cm4gbm9rMihjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlQWZ0ZXIoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzMi5leGl0KCJjb2RlRmVuY2VkRmVuY2UiKTsKICAgICAgICByZXR1cm4gb2s0KGNvZGU0KTsKICAgICAgfQogICAgICByZXR1cm4gbm9rMihjb2RlNCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBsaW5lU3RhcnQ7CiAgfQogIGZ1bmN0aW9uIGxpbmVTdGFydChjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBub25MYXp5Q29udGludWF0aW9uLCBjb2RlRmVuY2VkOwp2YXIgaW5pdF9jb2RlX2ZlbmNlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtZmVuY2VkLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBub25MYXp5Q29udGludWF0aW9uID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uCiAgICB9OwogICAgY29kZUZlbmNlZCA9IHsKICAgICAgY29uY3JldGU6IHRydWUsCiAgICAgIG5hbWU6ICJjb2RlRmVuY2VkIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29kZUZlbmNlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtaW5kZW50ZWQuanMKZnVuY3Rpb24gdG9rZW5pemVDb2RlSW5kZW50ZWQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlSW5kZW50ZWQiKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4IiwgNCArIDEpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gNCA/IGF0QnJlYWsoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBhZnRlcihjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGZ1cnRoZXJTdGFydCwgYXRCcmVhaywgYWZ0ZXIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGbG93VmFsdWUiKTsKICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZsb3dWYWx1ZSIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiY29kZUluZGVudGVkIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVGdXJ0aGVyU3RhcnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZ1cnRoZXJTdGFydDI7CiAgZnVuY3Rpb24gZnVydGhlclN0YXJ0Mihjb2RlNCkgewogICAgaWYgKHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGZ1cnRoZXJTdGFydDI7CiAgICB9CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAibGluZVByZWZpeCIsIDQgKyAxKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQgPyBvazMoY29kZTQpIDogbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSA/IGZ1cnRoZXJTdGFydDIoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGNvZGVJbmRlbnRlZCwgZnVydGhlclN0YXJ0Owp2YXIgaW5pdF9jb2RlX2luZGVudGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1pbmRlbnRlZC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY29kZUluZGVudGVkID0gewogICAgICBuYW1lOiAiY29kZUluZGVudGVkIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29kZUluZGVudGVkCiAgICB9OwogICAgZnVydGhlclN0YXJ0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVGdXJ0aGVyU3RhcnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLXRleHQuanMKZnVuY3Rpb24gcmVzb2x2ZUNvZGVUZXh0KGV2ZW50cykgewogIGxldCB0YWlsRXhpdEluZGV4ID0gZXZlbnRzLmxlbmd0aCAtIDQ7CiAgbGV0IGhlYWRFbnRlckluZGV4ID0gMzsKICBsZXQgaW5kZXgyOwogIGxldCBlbnRlcjsKICBpZiAoKGV2ZW50c1toZWFkRW50ZXJJbmRleF1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IGV2ZW50c1toZWFkRW50ZXJJbmRleF1bMV0udHlwZSA9PT0gInNwYWNlIikgJiYgKGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPT09ICJzcGFjZSIpKSB7CiAgICBpbmRleDIgPSBoZWFkRW50ZXJJbmRleDsKICAgIHdoaWxlICgrK2luZGV4MiA8IHRhaWxFeGl0SW5kZXgpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJjb2RlVGV4dERhdGEiKSB7CiAgICAgICAgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID0gImNvZGVUZXh0UGFkZGluZyI7CiAgICAgICAgZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPSAiY29kZVRleHRQYWRkaW5nIjsKICAgICAgICBoZWFkRW50ZXJJbmRleCArPSAyOwogICAgICAgIHRhaWxFeGl0SW5kZXggLT0gMjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICBpbmRleDIgPSBoZWFkRW50ZXJJbmRleCAtIDE7CiAgdGFpbEV4aXRJbmRleCsrOwogIHdoaWxlICgrK2luZGV4MiA8PSB0YWlsRXhpdEluZGV4KSB7CiAgICBpZiAoZW50ZXIgPT09IHZvaWQgMCkgewogICAgICBpZiAoaW5kZXgyICE9PSB0YWlsRXhpdEluZGV4ICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJsaW5lRW5kaW5nIikgewogICAgICAgIGVudGVyID0gaW5kZXgyOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGluZGV4MiA9PT0gdGFpbEV4aXRJbmRleCB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGluZUVuZGluZyIpIHsKICAgICAgZXZlbnRzW2VudGVyXVsxXS50eXBlID0gImNvZGVUZXh0RGF0YSI7CiAgICAgIGlmIChpbmRleDIgIT09IGVudGVyICsgMikgewogICAgICAgIGV2ZW50c1tlbnRlcl1bMV0uZW5kID0gZXZlbnRzW2luZGV4MiAtIDFdWzFdLmVuZDsKICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXgyIC0gZW50ZXIgLSAyKTsKICAgICAgICB0YWlsRXhpdEluZGV4IC09IGluZGV4MiAtIGVudGVyIC0gMjsKICAgICAgICBpbmRleDIgPSBlbnRlciArIDI7CiAgICAgIH0KICAgICAgZW50ZXIgPSB2b2lkIDA7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gcHJldmlvdXMyKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ICE9PSA5NiB8fCB0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlID09PSAiY2hhcmFjdGVyRXNjYXBlIjsKfQpmdW5jdGlvbiB0b2tlbml6ZUNvZGVUZXh0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplT3BlbiA9IDA7CiAgbGV0IHNpemU7CiAgbGV0IHRva2VuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY29kZVRleHQiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZU9wZW4rKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlbjsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpOwogICAgcmV0dXJuIGJldHdlZW4yKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmV0d2VlbjIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzIpIHsKICAgICAgZWZmZWN0cy5lbnRlcigic3BhY2UiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJzcGFjZSIpOwogICAgICByZXR1cm4gYmV0d2VlbjI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDk2KSB7CiAgICAgIHRva2VuID0gZWZmZWN0cy5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpOwogICAgICBzaXplID0gMDsKICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2UoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGJldHdlZW4yOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZVRleHREYXRhIik7CiAgICByZXR1cm4gZGF0YTExKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGF0YTExKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHREYXRhIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMihjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRhdGExMTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlOwogICAgfQogICAgaWYgKHNpemUgPT09IHNpemVPcGVuKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0Iik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgdG9rZW4udHlwZSA9ICJjb2RlVGV4dERhdGEiOwogICAgcmV0dXJuIGRhdGExMShjb2RlNCk7CiAgfQp9CnZhciBjb2RlVGV4dDsKdmFyIGluaXRfY29kZV90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb2RlVGV4dCA9IHsKICAgICAgbmFtZTogImNvZGVUZXh0IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUNvZGVUZXh0LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlVGV4dAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcwpmdW5jdGlvbiBjaHVua2VkUHVzaChsaXN0NSwgcmlnaHQpIHsKICBsZXQgY2h1bmtTdGFydCA9IDA7CiAgaWYgKHJpZ2h0Lmxlbmd0aCA8IDFlNCkgewogICAgbGlzdDUucHVzaCguLi5yaWdodCk7CiAgfSBlbHNlIHsKICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgcmlnaHQubGVuZ3RoKSB7CiAgICAgIGxpc3Q1LnB1c2goLi4ucmlnaHQuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDFlNCkpOwogICAgICBjaHVua1N0YXJ0ICs9IDFlNDsKICAgIH0KICB9Cn0KdmFyIFNwbGljZUJ1ZmZlcjsKdmFyIGluaXRfc3BsaWNlX2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcyIoKSB7CiAgICBTcGxpY2VCdWZmZXIgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8VD4gfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5pdGlhbF0KICAgICAgICogICBJbml0aWFsIGl0ZW1zIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgU3BsaWNlIGJ1ZmZlci4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWwyKSB7CiAgICAgICAgdGhpcy5sZWZ0ID0gaW5pdGlhbDIgPyBbLi4uaW5pdGlhbDJdIDogW107CiAgICAgICAgdGhpcy5yaWdodCA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcnJheSBhY2Nlc3M7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4CiAgICAgICAqICAgSW5kZXguCiAgICAgICAqIEByZXR1cm4ge1R9CiAgICAgICAqICAgSXRlbS4KICAgICAgICovCiAgICAgIGdldChpbmRleDIpIHsKICAgICAgICBpZiAoaW5kZXgyIDwgMCB8fCBpbmRleDIgPj0gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2Fubm90IGFjY2VzcyBpbmRleCBgIiArIGluZGV4MiArICJgIGluIGEgc3BsaWNlIGJ1ZmZlciBvZiBzaXplIGAiICsgKHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aCkgKyAiYCIpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5kZXgyIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgcmV0dXJuIHRoaXMubGVmdFtpbmRleDJdOwogICAgICAgIHJldHVybiB0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoIC0gaW5kZXgyICsgdGhpcy5sZWZ0Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBzcGxpY2UgYnVmZmVyLCBvbmUgZ3JlYXRlciB0aGFuIHRoZSBsYXJnZXN0IGluZGV4IGluIHRoZQogICAgICAgKiBhcnJheS4KICAgICAgICovCiAgICAgIGdldCBsZW5ndGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gYGxpc3RbMF1gOwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHJldHVybnMge1QgfCB1bmRlZmluZWR9CiAgICAgICAqICAgSXRlbSwgb3B0aW9uYWwuCiAgICAgICAqLwogICAgICBzaGlmdCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICByZXR1cm4gdGhpcy5yaWdodC5wb3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2xpY2UgdGhlIGJ1ZmZlciB0byBnZXQgYW4gYXJyYXk7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgICAqICAgU3RhcnQuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZF0KICAgICAgICogICBFbmQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge0FycmF5PFQ+fQogICAgICAgKiAgIEFycmF5IG9mIGl0ZW1zLgogICAgICAgKi8KICAgICAgc2xpY2Uoc3RhcnQsIGVuZDMpIHsKICAgICAgICBjb25zdCBzdG9wID0gZW5kMyA9PT0gbnVsbCB8fCBlbmQzID09PSB2b2lkIDAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBlbmQzOwogICAgICAgIGlmIChzdG9wIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5zbGljZShzdGFydCwgc3RvcCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA+IHRoaXMubGVmdC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgsIHRoaXMucmlnaHQubGVuZ3RoIC0gc3RhcnQgKyB0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmxlZnQuc2xpY2Uoc3RhcnQpLmNvbmNhdCh0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1pbWljcyB0aGUgYmVoYXZpb3Igb2YgQXJyYXkucHJvdG90eXBlLnNwbGljZSgpIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZSBvZgogICAgICAgKiBpbnRlcmZhY2UgbmVjZXNzYXJ5IHRvIGF2b2lkIHNlZ2ZhdWx0cyB3aGVuIHBhdGNoaW5nIGluIHZlcnkgbGFyZ2UgYXJyYXlzLgogICAgICAgKgogICAgICAgKiBUaGlzIG9wZXJhdGlvbiBtb3ZlcyBjdXJzb3IgaXMgbW92ZWQgdG8gYHN0YXJ0YCBhbmQgcmVzdWx0cyBpbiB0aGUgY3Vyc29yCiAgICAgICAqIHBsYWNlZCBhZnRlciBhbnkgaW5zZXJ0ZWQgaXRlbXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydAogICAgICAgKiAgIFN0YXJ0OwogICAgICAgKiAgIHplcm8tYmFzZWQgaW5kZXggYXQgd2hpY2ggdG8gc3RhcnQgY2hhbmdpbmcgdGhlIGFycmF5OwogICAgICAgKiAgIG5lZ2F0aXZlIG51bWJlcnMgY291bnQgYmFja3dhcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHZhbHVlcwogICAgICAgKiAgIHRoYXQgYXJlIG91dC1vZiBib3VuZHMgYXJlIGNsYW1wZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGVuZCBvZiB0aGUgYXJyYXkuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RlbGV0ZUNvdW50PTBdCiAgICAgICAqICAgRGVsZXRlIGNvdW50IChkZWZhdWx0OiBgMGApOwogICAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRlbGV0ZSwgc3RhcnRpbmcgZnJvbSBzdGFydC4KICAgICAgICogQHBhcmFtIHtBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpdGVtcz1bXV0KICAgICAgICogICBJdGVtcyB0byBpbmNsdWRlIGluIHBsYWNlIG9mIHRoZSBkZWxldGVkIGl0ZW1zIChkZWZhdWx0OiBgW11gKS4KICAgICAgICogQHJldHVybiB7QXJyYXk8VD59CiAgICAgICAqICAgQW55IHJlbW92ZWQgaXRlbXMuCiAgICAgICAqLwogICAgICBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBpdGVtcykgewogICAgICAgIGNvbnN0IGNvdW50MiA9IGRlbGV0ZUNvdW50IHx8IDA7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTWF0aC50cnVuYyhzdGFydCkpOwogICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aCAtIGNvdW50MiwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICBpZiAoaXRlbXMpIGNodW5rZWRQdXNoKHRoaXMubGVmdCwgaXRlbXMpOwogICAgICAgIHJldHVybiByZW1vdmVkLnJldmVyc2UoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QtbnVtYmVyZWQgaXRlbSBpbiB0aGUgYXJyYXksIHNvCiAgICAgICAqIGBsaXN0W2xpc3QubGVuZ3RoIC0gMV1gOwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH0KICAgICAgICogICBJdGVtLCBvcHRpb25hbC4KICAgICAgICovCiAgICAgIHBvcCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIHJldHVybiB0aGlzLmxlZnQucG9wKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgaGlnaC1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgbGVuZ3RoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICB0aGlzLmxlZnQucHVzaChpdGVtKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBtYW55IGl0ZW1zIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5LgogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtcwogICAgICAgKiAgIEl0ZW1zLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBwdXNoTWFueShpdGVtcykgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCBpdGVtcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgdW5zaGlmdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgdGhpcy5yaWdodC5wdXNoKGl0ZW0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnRzIG1hbnkgaXRlbXMgdG8gdGhlIGxvdy1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgMGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zCiAgICAgICAqICAgSXRlbXMuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHVuc2hpZnRNYW55KGl0ZW1zKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgaXRlbXMucmV2ZXJzZSgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTW92ZSB0aGUgY3Vyc29yIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24gaW4gdGhlIGFycmF5LiBSZXF1aXJlcwogICAgICAgKiB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGlzdGFuY2UgbW92ZWQuCiAgICAgICAqCiAgICAgICAqIElmIGBuIDwgMGAsIHRoZSBjdXJzb3Igd2lsbCBlbmQgdXAgYXQgdGhlIGJlZ2lubmluZy4KICAgICAgICogSWYgYG4gPiBsZW5ndGhgLCB0aGUgY3Vyc29yIHdpbGwgZW5kIHVwIGF0IHRoZSBlbmQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuCiAgICAgICAqICAgUG9zaXRpb24uCiAgICAgICAqIEByZXR1cm4ge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0Q3Vyc29yKG4xMikgewogICAgICAgIGlmIChuMTIgPT09IHRoaXMubGVmdC5sZW5ndGggfHwgbjEyID4gdGhpcy5sZWZ0Lmxlbmd0aCAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA9PT0gMCB8fCBuMTIgPCAwICYmIHRoaXMubGVmdC5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICBpZiAobjEyIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMubGVmdC5zcGxpY2UobjEyLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgcmVtb3ZlZC5yZXZlcnNlKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5yaWdodC5zcGxpY2UodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoIC0gbjEyLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCByZW1vdmVkLnJldmVyc2UoKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzCmZ1bmN0aW9uIHN1YnRva2VuaXplKGV2ZW50c0FycmF5KSB7CiAgY29uc3QganVtcHMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGV2ZW50OwogIGxldCBsaW5lSW5kZXg7CiAgbGV0IG90aGVySW5kZXg7CiAgbGV0IG90aGVyRXZlbnQ7CiAgbGV0IHBhcmFtZXRlcnM7CiAgbGV0IHN1YmV2ZW50czsKICBsZXQgbW9yZTsKICBjb25zdCBldmVudHMgPSBuZXcgU3BsaWNlQnVmZmVyKGV2ZW50c0FycmF5KTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICB3aGlsZSAoaW5kZXgyIGluIGp1bXBzKSB7CiAgICAgIGluZGV4MiA9IGp1bXBzW2luZGV4Ml07CiAgICB9CiAgICBldmVudCA9IGV2ZW50cy5nZXQoaW5kZXgyKTsKICAgIGlmIChpbmRleDIgJiYgZXZlbnRbMV0udHlwZSA9PT0gImNodW5rRmxvdyIgJiYgZXZlbnRzLmdldChpbmRleDIgLSAxKVsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgIHN1YmV2ZW50cyA9IGV2ZW50WzFdLl90b2tlbml6ZXIuZXZlbnRzOwogICAgICBvdGhlckluZGV4ID0gMDsKICAgICAgaWYgKG90aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoICYmIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZ0JsYW5rIikgewogICAgICAgIG90aGVySW5kZXggKz0gMjsKICAgICAgfQogICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIHdoaWxlICgrK290aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNodW5rVGV4dCIpIHsKICAgICAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHRydWU7CiAgICAgICAgICAgIG90aGVySW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICBpZiAoZXZlbnRbMV0uY29udGVudFR5cGUpIHsKICAgICAgICBPYmplY3QuYXNzaWduKGp1bXBzLCBzdWJjb250ZW50KGV2ZW50cywgaW5kZXgyKSk7CiAgICAgICAgaW5kZXgyID0ganVtcHNbaW5kZXgyXTsKICAgICAgICBtb3JlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7CiAgICAgIG90aGVySW5kZXggPSBpbmRleDI7CiAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgd2hpbGUgKG90aGVySW5kZXgtLSkgewogICAgICAgIG90aGVyRXZlbnQgPSBldmVudHMuZ2V0KG90aGVySW5kZXgpOwogICAgICAgIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICBpZiAob3RoZXJFdmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZXZlbnRzLmdldChsaW5lSW5kZXgpWzFdLnR5cGUgPSAibGluZUVuZGluZ0JsYW5rIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgIGxpbmVJbmRleCA9IG90aGVySW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbUluZGVudCIpIHsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICBldmVudFsxXS5lbmQgPSB7CiAgICAgICAgICAuLi5ldmVudHMuZ2V0KGxpbmVJbmRleClbMV0uc3RhcnQKICAgICAgICB9OwogICAgICAgIHBhcmFtZXRlcnMgPSBldmVudHMuc2xpY2UobGluZUluZGV4LCBpbmRleDIpOwogICAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChldmVudCk7CiAgICAgICAgZXZlbnRzLnNwbGljZShsaW5lSW5kZXgsIGluZGV4MiAtIGxpbmVJbmRleCArIDEsIHBhcmFtZXRlcnMpOwogICAgICB9CiAgICB9CiAgfQogIHNwbGljZShldmVudHNBcnJheSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBldmVudHMuc2xpY2UoMCkpOwogIHJldHVybiAhbW9yZTsKfQpmdW5jdGlvbiBzdWJjb250ZW50KGV2ZW50cywgZXZlbnRJbmRleCkgewogIGNvbnN0IHRva2VuID0gZXZlbnRzLmdldChldmVudEluZGV4KVsxXTsKICBjb25zdCBjb250ZXh0MiA9IGV2ZW50cy5nZXQoZXZlbnRJbmRleClbMl07CiAgbGV0IHN0YXJ0UG9zaXRpb24gPSBldmVudEluZGV4IC0gMTsKICBjb25zdCBzdGFydFBvc2l0aW9ucyA9IFtdOwogIGxldCB0b2tlbml6ZXIgPSB0b2tlbi5fdG9rZW5pemVyOwogIGlmICghdG9rZW5pemVyKSB7CiAgICB0b2tlbml6ZXIgPSBjb250ZXh0Mi5wYXJzZXJbdG9rZW4uY29udGVudFR5cGVdKHRva2VuLnN0YXJ0KTsKICAgIGlmICh0b2tlbi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcpIHsKICAgICAgdG9rZW5pemVyLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyA9IHRydWU7CiAgICB9CiAgfQogIGNvbnN0IGNoaWxkRXZlbnRzID0gdG9rZW5pemVyLmV2ZW50czsKICBjb25zdCBqdW1wcyA9IFtdOwogIGNvbnN0IGdhcHMgPSB7fTsKICBsZXQgc3RyZWFtOwogIGxldCBwcmV2aW91czM7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjdXJyZW50ID0gdG9rZW47CiAgbGV0IGFkanVzdCA9IDA7CiAgbGV0IHN0YXJ0ID0gMDsKICBjb25zdCBicmVha3MgPSBbc3RhcnRdOwogIHdoaWxlIChjdXJyZW50KSB7CiAgICB3aGlsZSAoZXZlbnRzLmdldCgrK3N0YXJ0UG9zaXRpb24pWzFdICE9PSBjdXJyZW50KSB7CiAgICB9CiAgICBzdGFydFBvc2l0aW9ucy5wdXNoKHN0YXJ0UG9zaXRpb24pOwogICAgaWYgKCFjdXJyZW50Ll90b2tlbml6ZXIpIHsKICAgICAgc3RyZWFtID0gY29udGV4dDIuc2xpY2VTdHJlYW0oY3VycmVudCk7CiAgICAgIGlmICghY3VycmVudC5uZXh0KSB7CiAgICAgICAgc3RyZWFtLnB1c2gobnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHByZXZpb3VzMykgewogICAgICAgIHRva2VuaXplci5kZWZpbmVTa2lwKGN1cnJlbnQuc3RhcnQpOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Ll9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSkgewogICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTsKICAgICAgfQogICAgICB0b2tlbml6ZXIud3JpdGUoc3RyZWFtKTsKICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7CiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHByZXZpb3VzMyA9IGN1cnJlbnQ7CiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogIH0KICBjdXJyZW50ID0gdG9rZW47CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRFdmVudHMubGVuZ3RoKSB7CiAgICBpZiAoCiAgICAgIC8vIEZpbmQgYSB2b2lkIHRva2VuIHRoYXQgaW5jbHVkZXMgYSBicmVhay4KICAgICAgY2hpbGRFdmVudHNbaW5kZXgyXVswXSA9PT0gImV4aXQiICYmIGNoaWxkRXZlbnRzW2luZGV4MiAtIDFdWzBdID09PSAiZW50ZXIiICYmIGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gY2hpbGRFdmVudHNbaW5kZXgyIC0gMV1bMV0udHlwZSAmJiBjaGlsZEV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0LmxpbmUgIT09IGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0uZW5kLmxpbmUKICAgICkgewogICAgICBzdGFydCA9IGluZGV4MiArIDE7CiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KTsKICAgICAgY3VycmVudC5fdG9rZW5pemVyID0gdm9pZCAwOwogICAgICBjdXJyZW50LnByZXZpb3VzID0gdm9pZCAwOwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogIH0KICB0b2tlbml6ZXIuZXZlbnRzID0gW107CiAgaWYgKGN1cnJlbnQpIHsKICAgIGN1cnJlbnQuX3Rva2VuaXplciA9IHZvaWQgMDsKICAgIGN1cnJlbnQucHJldmlvdXMgPSB2b2lkIDA7CiAgfSBlbHNlIHsKICAgIGJyZWFrcy5wb3AoKTsKICB9CiAgaW5kZXgyID0gYnJlYWtzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGNvbnN0IHNsaWNlID0gY2hpbGRFdmVudHMuc2xpY2UoYnJlYWtzW2luZGV4Ml0sIGJyZWFrc1tpbmRleDIgKyAxXSk7CiAgICBjb25zdCBzdGFydDIgPSBzdGFydFBvc2l0aW9ucy5wb3AoKTsKICAgIGp1bXBzLnB1c2goW3N0YXJ0Miwgc3RhcnQyICsgc2xpY2UubGVuZ3RoIC0gMV0pOwogICAgZXZlbnRzLnNwbGljZShzdGFydDIsIDIsIHNsaWNlKTsKICB9CiAganVtcHMucmV2ZXJzZSgpOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGp1bXBzLmxlbmd0aCkgewogICAgZ2Fwc1thZGp1c3QgKyBqdW1wc1tpbmRleDJdWzBdXSA9IGFkanVzdCArIGp1bXBzW2luZGV4Ml1bMV07CiAgICBhZGp1c3QgKz0ganVtcHNbaW5kZXgyXVsxXSAtIGp1bXBzW2luZGV4Ml1bMF0gLSAxOwogIH0KICByZXR1cm4gZ2FwczsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9zdWJ0b2tlbml6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfc3BsaWNlX2J1ZmZlcigpOwogICAgaW5pdF9zcGxpY2VfYnVmZmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzCmZ1bmN0aW9uIHJlc29sdmVDb250ZW50KGV2ZW50cykgewogIHN1YnRva2VuaXplKGV2ZW50cyk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRlbnQoZWZmZWN0cywgb2szKSB7CiAgbGV0IHByZXZpb3VzMzsKICByZXR1cm4gY2h1bmtTdGFydDsKICBmdW5jdGlvbiBjaHVua1N0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb250ZW50Iik7CiAgICBwcmV2aW91czMgPSBlZmZlY3RzLmVudGVyKCJjaHVua0NvbnRlbnQiLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAiY29udGVudCIKICAgIH0pOwogICAgcmV0dXJuIGNodW5rSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2h1bmtJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gY29udGVudEVuZChjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhjb250aW51YXRpb25Db25zdHJ1Y3QsIGNvbnRlbnRDb250aW51ZSwgY29udGVudEVuZCkoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9CiAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjaHVua0NvbnRlbnQiKTsKICAgIGVmZmVjdHMuZXhpdCgiY29udGVudCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRDb250aW51ZShjb2RlNCkgewogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtDb250ZW50Iik7CiAgICBwcmV2aW91czMubmV4dCA9IGVmZmVjdHMuZW50ZXIoImNodW5rQ29udGVudCIsIHsKICAgICAgY29udGVudFR5cGU6ICJjb250ZW50IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMwogICAgfSk7CiAgICBwcmV2aW91czMgPSBwcmV2aW91czMubmV4dDsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0TG9va2FoZWFkOwogIGZ1bmN0aW9uIHN0YXJ0TG9va2FoZWFkKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNodW5rQ29udGVudCIpOwogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBwcmVmaXhlZCwgImxpbmVQcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcHJlZml4ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICBpZiAoIXNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0KSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVmZmVjdHMuaW50ZXJydXB0KHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIG5vaywgb2szKShjb2RlNCk7CiAgfQp9CnZhciBjb250ZW50LCBjb250aW51YXRpb25Db25zdHJ1Y3Q7CnZhciBpbml0X2NvbnRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplKCk7CiAgICBjb250ZW50ID0gewogICAgICByZXNvbHZlOiByZXNvbHZlQ29udGVudCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGVudAogICAgfTsKICAgIGNvbnRpbnVhdGlvbkNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGludWF0aW9uCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb25AMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlEZXN0aW5hdGlvbihlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIGxpdGVyYWxUeXBlLCBsaXRlcmFsTWFya2VyVHlwZSwgcmF3VHlwZSwgc3RyaW5nVHlwZSwgbWF4MykgewogIGNvbnN0IGxpbWl0ID0gbWF4MyB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgbGV0IGJhbGFuY2UgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCkgewogICAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MSB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICBlZmZlY3RzLmVudGVyKHJhd1R5cGUpOwogICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIHJhdzIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBlbmNsb3NlZEVzY2FwZSA6IGVuY2xvc2VkOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjIgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbmNsb3NlZDsKICAgIH0KICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJhdzIoY29kZTQpIHsKICAgIGlmICghYmFsYW5jZSAmJiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHJhd1R5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChiYWxhbmNlIDwgbGltaXQgJiYgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UrKzsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UtLTsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MCB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyByYXdFc2NhcGUgOiByYXcyOwogIH0KICBmdW5jdGlvbiByYXdFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIHJldHVybiByYXcyKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfZGVzdGluYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcwpmdW5jdGlvbiBmYWN0b3J5TGFiZWwoZWZmZWN0cywgb2szLCBub2ssIHR5cGU1LCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplID0gMDsKICBsZXQgc2VlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWs7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChzaXplID4gOTk5IHx8IGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgJiYgIXNlZW4gfHwgLy8gVG8gZG86IHJlbW92ZSBpbiB0aGUgZnV0dXJlIG9uY2Ugd2XigJl2ZSBzd2l0Y2hlZCBmcm9tCiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1mb290bm90ZWAgdG8gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCwKICAgIC8vIHdoaWNoIGRvZXNu4oCZdCBuZWVkIHRoaXMuCiAgICAvLyBIaWRkZW4gZm9vdG5vdGVzIGhvb2suCiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovCiAgICBjb2RlNCA9PT0gOTQgJiYgIXNpemUgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSB8fCBzaXplKysgPiA5OTkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgaWYgKCFzZWVuKSBzZWVuID0gIW1hcmtkb3duU3BhY2UoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlUaXRsZShlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIG1hcmtlciA9IGNvZGU0ID09PSA0MCA/IDQxIDogY29kZTQ7CiAgICAgIHJldHVybiBiZWdpbjM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVnaW4zKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIHJldHVybiBiZWdpbjMobWFya2VyKTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgImxpbmVQcmVmaXgiKTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIgfHwgY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gZXNjYXBlIDogaW5zaWRlOwogIH0KICBmdW5jdGlvbiBlc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMykgewogIGxldCBzZWVuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBzdGFydDsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHN0YXJ0LCBzZWVuID8gImxpbmVQcmVmaXgiIDogImxpbmVTdWZmaXgiKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfd2hpdGVzcGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2RlZmluaXRpb24uanMKZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpZGVudGlmaWVyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZGVmaW5pdGlvbiIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKAogICAgICBzZWxmMiwKICAgICAgZWZmZWN0cywKICAgICAgbGFiZWxBZnRlciwKICAgICAgLy8gTm90ZTogd2UgZG9u4oCZdCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLgogICAgICBub2ssCiAgICAgICJkZWZpbml0aW9uTGFiZWwiLAogICAgICAiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwKICAgICAgImRlZmluaXRpb25MYWJlbFN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGU0KSB7CiAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZShzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSkpOwogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICByZXR1cm4gbWFya2VyQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbWFya2VyQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGRlc3RpbmF0aW9uQmVmb3JlKShjb2RlNCkgOiBkZXN0aW5hdGlvbkJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlc3RpbmF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKAogICAgICBlZmZlY3RzLAogICAgICBkZXN0aW5hdGlvbkFmdGVyLAogICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuCiAgICAgIG5vaywKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbiIsCiAgICAgICJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZXN0aW5hdGlvbkFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHRpdGxlQmVmb3JlLCBhZnRlciwgYWZ0ZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlcldoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRlZmluaXRpb24iKTsKICAgICAgc2VsZjIucGFyc2VyLmRlZmluZWQucHVzaChpZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVUaXRsZUJlZm9yZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiB0aXRsZUJlZm9yZTI7CiAgZnVuY3Rpb24gdGl0bGVCZWZvcmUyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBiZWZvcmVNYXJrZXIpKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZU1hcmtlcihjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCB0aXRsZUFmdGVyLCBub2ssICJkZWZpbml0aW9uVGl0bGUiLCAiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwgImRlZmluaXRpb25UaXRsZVN0cmluZyIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGl0bGVBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBkZWZpbml0aW9uMiwgdGl0bGVCZWZvcmU7CnZhciBpbml0X2RlZmluaXRpb24yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvZGVmaW5pdGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2Rlc3RpbmF0aW9uKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3doaXRlc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBkZWZpbml0aW9uMiA9IHsKICAgICAgbmFtZTogImRlZmluaXRpb24iLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVEZWZpbml0aW9uCiAgICB9OwogICAgdGl0bGVCZWZvcmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRpdGxlQmVmb3JlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMKZnVuY3Rpb24gdG9rZW5pemVIYXJkQnJlYWtFc2NhcGUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBoYXJkQnJlYWtFc2NhcGU7CnZhciBpbml0X2hhcmRfYnJlYWtfZXNjYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGhhcmRCcmVha0VzY2FwZSA9IHsKICAgICAgbmFtZTogImhhcmRCcmVha0VzY2FwZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2hlYWRpbmctYXR4LmpzCmZ1bmN0aW9uIHJlc29sdmVIZWFkaW5nQXR4KGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgY29udGVudEVuZCA9IGV2ZW50cy5sZW5ndGggLSAyOwogIGxldCBjb250ZW50U3RhcnQgPSAzOwogIGxldCBjb250ZW50MzsKICBsZXQgdGV4dDk7CiAgaWYgKGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnR5cGUgPT09ICJ3aGl0ZXNwYWNlIikgewogICAgY29udGVudFN0YXJ0ICs9IDI7CiAgfQogIGlmIChjb250ZW50RW5kIC0gMiA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gIndoaXRlc3BhY2UiKSB7CiAgICBjb250ZW50RW5kIC09IDI7CiAgfQogIGlmIChldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gImF0eEhlYWRpbmdTZXF1ZW5jZSIgJiYgKGNvbnRlbnRTdGFydCA9PT0gY29udGVudEVuZCAtIDEgfHwgY29udGVudEVuZCAtIDQgPiBjb250ZW50U3RhcnQgJiYgZXZlbnRzW2NvbnRlbnRFbmQgLSAyXVsxXS50eXBlID09PSAid2hpdGVzcGFjZSIpKSB7CiAgICBjb250ZW50RW5kIC09IGNvbnRlbnRTdGFydCArIDEgPT09IGNvbnRlbnRFbmQgPyAyIDogNDsKICB9CiAgaWYgKGNvbnRlbnRFbmQgPiBjb250ZW50U3RhcnQpIHsKICAgIGNvbnRlbnQzID0gewogICAgICB0eXBlOiAiYXR4SGVhZGluZ1RleHQiLAogICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsCiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZAogICAgfTsKICAgIHRleHQ5ID0gewogICAgICB0eXBlOiAiY2h1bmtUZXh0IiwKICAgICAgc3RhcnQ6IGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnN0YXJ0LAogICAgICBlbmQ6IGV2ZW50c1tjb250ZW50RW5kXVsxXS5lbmQsCiAgICAgIGNvbnRlbnRUeXBlOiAidGV4dCIKICAgIH07CiAgICBzcGxpY2UoZXZlbnRzLCBjb250ZW50U3RhcnQsIGNvbnRlbnRFbmQgLSBjb250ZW50U3RhcnQgKyAxLCBbWyJlbnRlciIsIGNvbnRlbnQzLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCBjb250ZW50MywgY29udGV4dDJdXSk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZyIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1ICYmIHNpemUrKyA8IDYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlcihjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmciKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImF0eEhlYWRpbmdUZXh0Iik7CiAgICByZXR1cm4gZGF0YTExKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VGdXJ0aGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZXF1ZW5jZUZ1cnRoZXI7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhMTEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzUgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJhdHhIZWFkaW5nVGV4dCIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRhdGExMTsKICB9Cn0KdmFyIGhlYWRpbmdBdHg7CnZhciBpbml0X2hlYWRpbmdfYXR4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaGVhZGluZ0F0eCA9IHsKICAgICAgbmFtZTogImhlYWRpbmdBdHgiLAogICAgICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSGVhZGluZ0F0eAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMKdmFyIGh0bWxCbG9ja05hbWVzLCBodG1sUmF3TmFtZXM7CnZhciBpbml0X21pY3JvbWFya191dGlsX2h0bWxfdGFnX25hbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lL2luZGV4LmpzIigpIHsKICAgIGh0bWxCbG9ja05hbWVzID0gWwogICAgICAiYWRkcmVzcyIsCiAgICAgICJhcnRpY2xlIiwKICAgICAgImFzaWRlIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmxvY2txdW90ZSIsCiAgICAgICJib2R5IiwKICAgICAgImNhcHRpb24iLAogICAgICAiY2VudGVyIiwKICAgICAgImNvbCIsCiAgICAgICJjb2xncm91cCIsCiAgICAgICJkZCIsCiAgICAgICJkZXRhaWxzIiwKICAgICAgImRpYWxvZyIsCiAgICAgICJkaXIiLAogICAgICAiZGl2IiwKICAgICAgImRsIiwKICAgICAgImR0IiwKICAgICAgImZpZWxkc2V0IiwKICAgICAgImZpZ2NhcHRpb24iLAogICAgICAiZmlndXJlIiwKICAgICAgImZvb3RlciIsCiAgICAgICJmb3JtIiwKICAgICAgImZyYW1lIiwKICAgICAgImZyYW1lc2V0IiwKICAgICAgImgxIiwKICAgICAgImgyIiwKICAgICAgImgzIiwKICAgICAgImg0IiwKICAgICAgImg1IiwKICAgICAgImg2IiwKICAgICAgImhlYWQiLAogICAgICAiaGVhZGVyIiwKICAgICAgImhyIiwKICAgICAgImh0bWwiLAogICAgICAiaWZyYW1lIiwKICAgICAgImxlZ2VuZCIsCiAgICAgICJsaSIsCiAgICAgICJsaW5rIiwKICAgICAgIm1haW4iLAogICAgICAibWVudSIsCiAgICAgICJtZW51aXRlbSIsCiAgICAgICJuYXYiLAogICAgICAibm9mcmFtZXMiLAogICAgICAib2wiLAogICAgICAib3B0Z3JvdXAiLAogICAgICAib3B0aW9uIiwKICAgICAgInAiLAogICAgICAicGFyYW0iLAogICAgICAic2VhcmNoIiwKICAgICAgInNlY3Rpb24iLAogICAgICAic3VtbWFyeSIsCiAgICAgICJ0YWJsZSIsCiAgICAgICJ0Ym9keSIsCiAgICAgICJ0ZCIsCiAgICAgICJ0Zm9vdCIsCiAgICAgICJ0aCIsCiAgICAgICJ0aGVhZCIsCiAgICAgICJ0aXRsZSIsCiAgICAgICJ0ciIsCiAgICAgICJ0cmFjayIsCiAgICAgICJ1bCIKICAgIF07CiAgICBodG1sUmF3TmFtZXMgPSBbInByZSIsICJzY3JpcHQiLCAic3R5bGUiLCAidGV4dGFyZWEiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcwpmdW5jdGlvbiByZXNvbHZlVG9IdG1sRmxvdyhldmVudHMpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiaHRtbEZsb3ciKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoaW5kZXgyID4gMSAmJiBldmVudHNbaW5kZXgyIC0gMl1bMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiKSB7CiAgICBldmVudHNbaW5kZXgyXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50c1tpbmRleDIgKyAxXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyIC0gMiwgMik7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIdG1sRmxvdyhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIGxldCBjbG9zaW5nVGFnOwogIGxldCBidWZmZXIyOwogIGxldCBpbmRleDI7CiAgbGV0IG1hcmtlckI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvdyIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgY2xvc2luZ1RhZyA9IHRydWU7CiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSAzOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gMjsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSA1OwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDQ7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGlmIChpbmRleDIgPT09IHZhbHVlMi5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ05hbWU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgY29uc3Qgc2xhc2ggPSBjb2RlNCA9PT0gNDc7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICghc2xhc2ggJiYgIWNsb3NpbmdUYWcgJiYgaHRtbFJhd05hbWVzLmluY2x1ZGVzKG5hbWUpKSB7CiAgICAgICAgbWFya2VyID0gMTsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGh0bWxCbG9ja05hbWVzLmluY2x1ZGVzKGJ1ZmZlcjIudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICBtYXJrZXIgPSA2OwogICAgICAgIGlmIChzbGFzaCkgewogICAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICAgIHJldHVybiBiYXNpY1NlbGZDbG9zaW5nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgbWFya2VyID0gNzsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCAmJiAhc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogY2xvc2luZ1RhZyA/IGNvbXBsZXRlQ2xvc2luZ1RhZ0FmdGVyKGNvZGU0KSA6IGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiYXNpY1NlbGZDbG9zaW5nKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb247CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gY29kZTQ7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyQikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gbnVsbDsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlRW5kKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNvbW1lbnRJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYwICYmIG1hcmtlciA9PT0gMSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uUmF3VGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjIgJiYgbWFya2VyID09PSA0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjMgJiYgbWFya2VyID09PSAzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMgJiYgbWFya2VyID09PSA1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DZGF0YUluc2lkZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpICYmIChtYXJrZXIgPT09IDYgfHwgbWFya2VyID09PSA3KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmVCZWZvcmUsIGNvbnRpbnVhdGlvbkFmdGVyLCBjb250aW51YXRpb25TdGFydCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sRmxvd0RhdGEiKTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29udGludWF0aW9uOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25TdGFydChjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0LCBjb250aW51YXRpb25TdGFydE5vbkxhenksIGNvbnRpbnVhdGlvbkFmdGVyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGNvbnRpbnVhdGlvbkJlZm9yZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQ29tbWVudEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3VGFnT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyID0gIiI7CiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdFbmRUYWc7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3RW5kVGFnKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmIChodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgICAgfQogICAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSAmJiBidWZmZXIyLmxlbmd0aCA8IDgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZzsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25DZGF0YUluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3ciKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplQmxhbmtMaW5lQmVmb3JlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsYW5rTGluZSwgb2szLCBub2spOwogIH0KfQp2YXIgaHRtbEZsb3csIGJsYW5rTGluZUJlZm9yZSwgbm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0Owp2YXIgaW5pdF9odG1sX2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9odG1sLWZsb3cuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfaHRtbF90YWdfbmFtZSgpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBodG1sRmxvdyA9IHsKICAgICAgY29uY3JldGU6IHRydWUsCiAgICAgIG5hbWU6ICJodG1sRmxvdyIsCiAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvSHRtbEZsb3csCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxGbG93CiAgICB9OwogICAgYmxhbmtMaW5lQmVmb3JlID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmVCZWZvcmUKICAgIH07CiAgICBub25MYXp5Q29udGludWF0aW9uU3RhcnQgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcwpmdW5jdGlvbiB0b2tlbml6ZUh0bWxUZXh0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgbGV0IGluZGV4MjsKICBsZXQgcmV0dXJuU3RhdGU7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dCIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudEVuZDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50Myhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudENsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBjb21tZW50MzsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21tZW50MzsKICB9CiAgZnVuY3Rpb24gY29tbWVudENsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50RW5kOwogICAgfQogICAgcmV0dXJuIGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tbWVudEVuZChjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA2MiA/IGVuZDMoY29kZTQpIDogY29kZTQgPT09IDQ1ID8gY29tbWVudENsb3NlKGNvZGU0KSA6IGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbmRleDIgPT09IHZhbHVlMi5sZW5ndGggPyBjZGF0YSA6IGNkYXRhT3Blbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFDbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gY2RhdGE7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY2RhdGE7CiAgfQogIGZ1bmN0aW9uIGNkYXRhQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNkYXRhRW5kOwogICAgfQogICAgcmV0dXJuIGNkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFFbmQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgcmV0dXJuIGVuZDMoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFFbmQ7CiAgICB9CiAgICByZXR1cm4gY2RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MikgewogICAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IGRlY2xhcmF0aW9uOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KICBmdW5jdGlvbiBpbnN0cnVjdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25DbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gaW5zdHJ1Y3Rpb247CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgfQogIGZ1bmN0aW9uIGluc3RydWN0aW9uQ2xvc2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gNjIgPyBlbmQzKGNvZGU0KSA6IGluc3RydWN0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdDbG9zZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlOwogICAgfQogICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW47CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkJldHdlZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVuZDM7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5CZXR3ZWVuOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXI7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjsKICAgIH0KICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IGNvZGU0OwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSB2b2lkIDA7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDk2KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuZDMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dERhdGEiKTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gbGluZUVuZGluZ0FmdGVyOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KSA6IGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICByZXR1cm4gcmV0dXJuU3RhdGUoY29kZTQpOwogIH0KfQp2YXIgaHRtbFRleHQ7CnZhciBpbml0X2h0bWxfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaHRtbFRleHQgPSB7CiAgICAgIG5hbWU6ICJodG1sVGV4dCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxUZXh0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtZW5kLmpzCmZ1bmN0aW9uIHJlc29sdmVBbGxMYWJlbEVuZChldmVudHMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgbmV3RXZlbnRzID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIG5ld0V2ZW50cy5wdXNoKGV2ZW50c1tpbmRleDJdKTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjb25zdCBvZmZzZXQgPSB0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgPyA0IDogMjsKICAgICAgdG9rZW4udHlwZSA9ICJkYXRhIjsKICAgICAgaW5kZXgyICs9IG9mZnNldDsKICAgIH0KICB9CiAgaWYgKGV2ZW50cy5sZW5ndGggIT09IG5ld0V2ZW50cy5sZW5ndGgpIHsKICAgIHNwbGljZShldmVudHMsIDAsIGV2ZW50cy5sZW5ndGgsIG5ld0V2ZW50cyk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvTGFiZWxFbmQoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCBvZmZzZXQgPSAwOwogIGxldCB0b2tlbjsKICBsZXQgb3BlbjsKICBsZXQgY2xvc2U3OwogIGxldCBtZWRpYTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIHRva2VuID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICBpZiAob3BlbikgewogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImxpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiICYmIHRva2VuLl9pbmFjdGl2ZSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIikgewogICAgICAgIHRva2VuLl9pbmFjdGl2ZSA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2xvc2U3KSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiAodG9rZW4udHlwZSA9PT0gImxhYmVsSW1hZ2UiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiKSAmJiAhdG9rZW4uX2JhbGFuY2VkKSB7CiAgICAgICAgb3BlbiA9IGluZGV4MjsKICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImxhYmVsTGluayIpIHsKICAgICAgICAgIG9mZnNldCA9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjbG9zZTcgPSBpbmRleDI7CiAgICB9CiAgfQogIGNvbnN0IGdyb3VwID0gewogICAgdHlwZTogZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJsYWJlbExpbmsiID8gImxpbmsiIDogImltYWdlIiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5zdGFydAogICAgfSwKICAgIGVuZDogewogICAgICAuLi5ldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgbGFiZWwgPSB7CiAgICB0eXBlOiAibGFiZWwiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTddWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgdGV4dDkgPSB7CiAgICB0eXBlOiAibGFiZWxUZXh0IiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuICsgb2Zmc2V0ICsgMl1bMV0uZW5kCiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTcgLSAyXVsxXS5zdGFydAogICAgfQogIH07CiAgbWVkaWEgPSBbWyJlbnRlciIsIGdyb3VwLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBsYWJlbCwgY29udGV4dDJdXTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgb3BlbiArIG9mZnNldCArIDMpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV0pOwogIG1lZGlhID0gcHVzaChtZWRpYSwgcmVzb2x2ZUFsbChjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsIGV2ZW50cy5zbGljZShvcGVuICsgb2Zmc2V0ICsgNCwgY2xvc2U3IC0gMyksIGNvbnRleHQyKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgZXZlbnRzW2Nsb3NlNyAtIDJdLCBldmVudHNbY2xvc2U3IC0gMV0sIFsiZXhpdCIsIGxhYmVsLCBjb250ZXh0Ml1dKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShjbG9zZTcgKyAxKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgZ3JvdXAsIGNvbnRleHQyXV0pOwogIHNwbGljZShldmVudHMsIG9wZW4sIGV2ZW50cy5sZW5ndGgsIG1lZGlhKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplTGFiZWxFbmQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgbGV0IGxhYmVsU3RhcnQ7CiAgbGV0IGRlZmluZWQ7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoKHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbEltYWdlIiB8fCBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxMaW5rIikgJiYgIXNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLl9iYWxhbmNlZCkgewogICAgICBsYWJlbFN0YXJ0ID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChsYWJlbFN0YXJ0Ll9pbmFjdGl2ZSkgewogICAgICByZXR1cm4gbGFiZWxFbmROb2soY29kZTQpOwogICAgfQogICAgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKSk7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEVuZCIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsRW5kIik7CiAgICByZXR1cm4gYWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQwKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQocmVzb3VyY2VDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyBsYWJlbEVuZE9rIDogbGFiZWxFbmROb2spKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZWZlcmVuY2VGdWxsQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBkZWZpbmVkID8gcmVmZXJlbmNlTm90RnVsbCA6IGxhYmVsRW5kTm9rKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZGVmaW5lZCA/IGxhYmVsRW5kT2soY29kZTQpIDogbGFiZWxFbmROb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZWZlcmVuY2VOb3RGdWxsKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCwgbGFiZWxFbmRPaywgbGFiZWxFbmROb2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFbmRPayhjb2RlNCkgewogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRW5kTm9rKGNvZGU0KSB7CiAgICBsYWJlbFN0YXJ0Ll9iYWxhbmNlZCA9IHRydWU7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVSZXNvdXJjZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZXNvdXJjZVN0YXJ0OwogIGZ1bmN0aW9uIHJlc291cmNlU3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2VNYXJrZXIiKTsKICAgIHJldHVybiByZXNvdXJjZUJlZm9yZTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlT3BlbikoY29kZTQpIDogcmVzb3VyY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIHJldHVybiByZXNvdXJjZUVuZChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKGVmZmVjdHMsIHJlc291cmNlRGVzdGluYXRpb25BZnRlciwgcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcsICJyZXNvdXJjZURlc3RpbmF0aW9uIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwgInJlc291cmNlRGVzdGluYXRpb25SYXciLCAicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsIDMyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25BZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VCZXR3ZWVuKShjb2RlNCkgOiByZXNvdXJjZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25NaXNzaW5nKGNvZGU0KSB7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZXR3ZWVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDApIHsKICAgICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCByZXNvdXJjZVRpdGxlQWZ0ZXIsIG5vaywgInJlc291cmNlVGl0bGUiLCAicmVzb3VyY2VUaXRsZU1hcmtlciIsICJyZXNvdXJjZVRpdGxlU3RyaW5nIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VUaXRsZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUVuZCkoY29kZTQpIDogcmVzb3VyY2VFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUVuZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MSkgewogICAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInJlc291cmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHJlZmVyZW5jZUZ1bGw7CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbChjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKHNlbGYyLCBlZmZlY3RzLCByZWZlcmVuY2VGdWxsQWZ0ZXIsIHJlZmVyZW5jZUZ1bGxNaXNzaW5nLCAicmVmZXJlbmNlIiwgInJlZmVyZW5jZU1hcmtlciIsICJyZWZlcmVuY2VTdHJpbmciKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXVsxXSkuc2xpY2UoMSwgLTEpKSkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbE1pc3NpbmcoY29kZTQpIHsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZChlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydDsKICBmdW5jdGlvbiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpOwogICAgcmV0dXJuIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW47CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGxhYmVsRW5kLCByZXNvdXJjZUNvbnN0cnVjdCwgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCwgcmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0Owp2YXIgaW5pdF9sYWJlbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9kZXN0aW5hdGlvbigpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV90aXRsZSgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV93aGl0ZXNwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgICBsYWJlbEVuZCA9IHsKICAgICAgbmFtZTogImxhYmVsRW5kIiwKICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbExhYmVsRW5kLAogICAgICByZXNvbHZlVG86IHJlc29sdmVUb0xhYmVsRW5kLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbEVuZAogICAgfTsKICAgIHJlc291cmNlQ29uc3RydWN0ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVSZXNvdXJjZQogICAgfTsKICAgIHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwKICAgIH07CiAgICByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydEltYWdlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZSIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImxhYmVsSW1hZ2UiKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IDk0ICYmICJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0IiBpbiBzZWxmMi5wYXJzZXIuY29uc3RydWN0cyA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQp2YXIgbGFiZWxTdGFydEltYWdlOwp2YXIgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzIigpIHsKICAgIGluaXRfbGFiZWxfZW5kKCk7CiAgICBsYWJlbFN0YXJ0SW1hZ2UgPSB7CiAgICAgIG5hbWU6ICJsYWJlbFN0YXJ0SW1hZ2UiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1zdGFydC1saW5rLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydExpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbExpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbExpbmsiKTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gOTQgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBsYWJlbFN0YXJ0TGluazsKdmFyIGluaXRfbGFiZWxfc3RhcnRfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMiKCkgewogICAgaW5pdF9sYWJlbF9lbmQoKTsKICAgIGxhYmVsU3RhcnRMaW5rID0gewogICAgICBuYW1lOiAibGFiZWxTdGFydExpbmsiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0TGluawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzCmZ1bmN0aW9uIHRva2VuaXplTGluZUVuZGluZyhlZmZlY3RzLCBvazMpIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGluZVByZWZpeCIpOwogIH0KfQp2YXIgbGluZUVuZGluZzsKdmFyIGluaXRfbGluZV9lbmRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saW5lLWVuZGluZy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgbGluZUVuZGluZyA9IHsKICAgICAgbmFtZTogImxpbmVFbmRpbmciLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMaW5lRW5kaW5nCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdG9rZW5pemVUaGVtYXRpY0JyZWFrKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0aGVtYXRpY0JyZWFrIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIik7CiAgICAgIHJldHVybiBzZXF1ZW5jZShjb2RlNCk7CiAgICB9CiAgICBpZiAoc2l6ZSA+PSAzICYmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoInRoZW1hdGljQnJlYWsiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IGF0QnJlYWsoY29kZTQpOwogIH0KfQp2YXIgdGhlbWF0aWNCcmVhazI7CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICB0aGVtYXRpY0JyZWFrMiA9IHsKICAgICAgbmFtZTogInRoZW1hdGljQnJlYWsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVUaGVtYXRpY0JyZWFrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcwpmdW5jdGlvbiB0b2tlbml6ZUxpc3RTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICBsZXQgaW5pdGlhbFNpemUgPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggOiAwOwogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGNvbnN0IGtpbmQgPSBzZWxmMi5jb250YWluZXJTdGF0ZS50eXBlIHx8IChjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSA/ICJsaXN0VW5vcmRlcmVkIiA6ICJsaXN0T3JkZXJlZCIpOwogICAgaWYgKGtpbmQgPT09ICJsaXN0VW5vcmRlcmVkIiA/ICFzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQgPT09IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGFzY2lpRGlnaXQoY29kZTQpKSB7CiAgICAgIGlmICghc2VsZjIuY29udGFpbmVyU3RhdGUudHlwZSkgewogICAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnR5cGUgPSBraW5kOwogICAgICAgIGVmZmVjdHMuZW50ZXIoa2luZCwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChraW5kID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpOwogICAgICAgIHJldHVybiBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ1ID8gZWZmZWN0cy5jaGVjayh0aGVtYXRpY0JyZWFrMiwgbm9rLCBhdE1hcmtlcikoY29kZTQpIDogYXRNYXJrZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmICghc2VsZjIuaW50ZXJydXB0IHx8IGNvZGU0ID09PSA0OSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4Iik7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpOwogICAgICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlEaWdpdChjb2RlNCkgJiYgKytzaXplIDwgMTApIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc2lkZTsKICAgIH0KICAgIGlmICgoIXNlbGYyLmludGVycnVwdCB8fCBzaXplIDwgMikgJiYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA/IGNvZGU0ID09PSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgOiBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQ2KSkgewogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtVmFsdWUiKTsKICAgICAgcmV0dXJuIGF0TWFya2VyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdE1hcmtlcihjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1NYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtTWFya2VyIik7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgPSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQ7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjaygKICAgICAgYmxhbmtMaW5lLAogICAgICAvLyBDYW7igJl0IGJlIGVtcHR5IHdoZW4gaW50ZXJydXB0aW5nLgogICAgICBzZWxmMi5pbnRlcnJ1cHQgPyBub2sgOiBvbkJsYW5rLAogICAgICBlZmZlY3RzLmF0dGVtcHQobGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBlbmRPZlByZWZpeCwgb3RoZXJQcmVmaXgpCiAgICApOwogIH0KICBmdW5jdGlvbiBvbkJsYW5rKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZTsKICAgIGluaXRpYWxTaXplKys7CiAgICByZXR1cm4gZW5kT2ZQcmVmaXgoY29kZTQpOwogIH0KICBmdW5jdGlvbiBvdGhlclByZWZpeChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gZW5kT2ZQcmVmaXg7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5kT2ZQcmVmaXgoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnNpemUgPSBpbml0aWFsU2l6ZSArIHNlbGYyLnNsaWNlU2VyaWFsaXplKGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1QcmVmaXgiKSwgdHJ1ZSkubGVuZ3RoOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdENvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZSwgb25CbGFuaywgbm90QmxhbmspOwogIGZ1bmN0aW9uIG9uQmxhbmsoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGlzdEl0ZW1JbmRlbnQiLCBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RCbGFuayhjb2RlNCkgewogICAgaWYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzIHx8ICFtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHZvaWQgMDsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHZvaWQgMDsKICAgICAgcmV0dXJuIG5vdEluQ3VycmVudEl0ZW0oY29kZTQpOwogICAgfQogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSB2b2lkIDA7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdm9pZCAwOwogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnRDb25zdHJ1Y3QsIG9rMywgbm90SW5DdXJyZW50SXRlbSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RJbkN1cnJlbnRJdGVtKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdHJ1ZTsKICAgIHNlbGYyLmludGVycnVwdCA9IHZvaWQgMDsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KGxpc3QzLCBvazMsIG5vayksICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVJbmRlbnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpc3RJdGVtSW5kZW50Iiwgc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpc3RJdGVtSW5kZW50IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUxpc3RFbmQoZWZmZWN0cykgewogIGVmZmVjdHMuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpOwp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiAhbWFya2Rvd25TcGFjZShjb2RlNCkgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBsaXN0MywgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBpbmRlbnRDb25zdHJ1Y3Q7CnZhciBpbml0X2xpc3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMigpOwogICAgbGlzdDMgPSB7CiAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RDb250aW51YXRpb24KICAgICAgfSwKICAgICAgZXhpdDogdG9rZW5pemVMaXN0RW5kLAogICAgICBuYW1lOiAibGlzdCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RTdGFydAogICAgfTsKICAgIGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlCiAgICB9OwogICAgaW5kZW50Q29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzCmZ1bmN0aW9uIHJlc29sdmVUb1NldGV4dFVuZGVybGluZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IGNvbnRlbnQzOwogIGxldCB0ZXh0OTsKICBsZXQgZGVmaW5pdGlvbjM7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIGNvbnRlbnQzID0gaW5kZXgyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAicGFyYWdyYXBoIikgewogICAgICAgIHRleHQ5ID0gaW5kZXgyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleDIsIDEpOwogICAgICB9CiAgICAgIGlmICghZGVmaW5pdGlvbjMgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRlZmluaXRpb24iKSB7CiAgICAgICAgZGVmaW5pdGlvbjMgPSBpbmRleDI7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgaGVhZGluZzMgPSB7CiAgICB0eXBlOiAic2V0ZXh0SGVhZGluZyIsCiAgICBzdGFydDogewogICAgICAuLi5ldmVudHNbY29udGVudDNdWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kCiAgICB9CiAgfTsKICBldmVudHNbdGV4dDldWzFdLnR5cGUgPSAic2V0ZXh0SGVhZGluZ1RleHQiOwogIGlmIChkZWZpbml0aW9uMykgewogICAgZXZlbnRzLnNwbGljZSh0ZXh0OSwgMCwgWyJlbnRlciIsIGhlYWRpbmczLCBjb250ZXh0Ml0pOwogICAgZXZlbnRzLnNwbGljZShkZWZpbml0aW9uMyArIDEsIDAsIFsiZXhpdCIsIGV2ZW50c1tjb250ZW50M11bMV0sIGNvbnRleHQyXSk7CiAgICBldmVudHNbY29udGVudDNdWzFdLmVuZCA9IHsKICAgICAgLi4uZXZlbnRzW2RlZmluaXRpb24zXVsxXS5lbmQKICAgIH07CiAgfSBlbHNlIHsKICAgIGV2ZW50c1tjb250ZW50M11bMV0gPSBoZWFkaW5nMzsKICB9CiAgZXZlbnRzLnB1c2goWyJleGl0IiwgaGVhZGluZzMsIGNvbnRleHQyXSk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZVNldGV4dFVuZGVybGluZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICBsZXQgcGFyYWdyYXBoMzsKICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVFbmRpbmciICYmIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJsaW5lUHJlZml4IiAmJiBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAiY29udGVudCIpIHsKICAgICAgICBwYXJhZ3JhcGgzID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInBhcmFncmFwaCI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gJiYgKHNlbGYyLmludGVycnVwdCB8fCBwYXJhZ3JhcGgzKSkgewogICAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICBtYXJrZXIgPSBjb2RlNDsKICAgICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICJsaW5lU3VmZml4IikoY29kZTQpIDogYWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgc2V0ZXh0VW5kZXJsaW5lOwp2YXIgaW5pdF9zZXRleHRfdW5kZXJsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvc2V0ZXh0LXVuZGVybGluZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgc2V0ZXh0VW5kZXJsaW5lID0gewogICAgICBuYW1lOiAic2V0ZXh0VW5kZXJsaW5lIiwKICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVNldGV4dFVuZGVybGluZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9hdHRlbnRpb24oKTsKICAgIGluaXRfYXV0b2xpbmsoKTsKICAgIGluaXRfYmxhbmtfbGluZSgpOwogICAgaW5pdF9ibG9ja19xdW90ZSgpOwogICAgaW5pdF9jaGFyYWN0ZXJfZXNjYXBlKCk7CiAgICBpbml0X2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfY29kZV9mZW5jZWQoKTsKICAgIGluaXRfY29kZV9pbmRlbnRlZCgpOwogICAgaW5pdF9jb2RlX3RleHQoKTsKICAgIGluaXRfY29udGVudCgpOwogICAgaW5pdF9kZWZpbml0aW9uMigpOwogICAgaW5pdF9oYXJkX2JyZWFrX2VzY2FwZSgpOwogICAgaW5pdF9oZWFkaW5nX2F0eCgpOwogICAgaW5pdF9odG1sX2Zsb3coKTsKICAgIGluaXRfaHRtbF90ZXh0KCk7CiAgICBpbml0X2xhYmVsX2VuZCgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9saW5rKCk7CiAgICBpbml0X2xpbmVfZW5kaW5nKCk7CiAgICBpbml0X2xpc3QyKCk7CiAgICBpbml0X3NldGV4dF91bmRlcmxpbmUoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1Gb290bm90ZSgpIHsKICByZXR1cm4gewogICAgZG9jdW1lbnQ6IHsKICAgICAgWzkxXTogewogICAgICAgIG5hbWU6ICJnZm1Gb290bm90ZURlZmluaXRpb24iLAogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25TdGFydCwKICAgICAgICBjb250aW51YXRpb246IHsKICAgICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25Db250aW51YXRpb24KICAgICAgICB9LAogICAgICAgIGV4aXQ6IGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZAogICAgICB9CiAgICB9LAogICAgdGV4dDogewogICAgICBbOTFdOiB7CiAgICAgICAgbmFtZTogImdmbUZvb3Rub3RlQ2FsbCIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0sCiAgICAgIFs5M106IHsKICAgICAgICBuYW1lOiAiZ2ZtUG90ZW50aWFsRm9vdG5vdGVDYWxsIiwKICAgICAgICBhZGQ6ICJhZnRlciIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsLAogICAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpbmRleDIgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBsYWJlbFN0YXJ0OwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgdG9rZW4gPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIpIHsKICAgICAgbGFiZWxTdGFydCA9IHRva2VuOwogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0b2tlbi50eXBlID09PSAiZ2ZtRm9vdG5vdGVDYWxsIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWwiIHx8IHRva2VuLnR5cGUgPT09ICJpbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCB8fCAhbGFiZWxTdGFydC5fYmFsYW5jZWQpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKTsKICAgIGlmIChpZC5jb2RlUG9pbnRBdCgwKSAhPT0gOTQgfHwgIWRlZmluZWQuaW5jbHVkZXMoaWQuc2xpY2UoMSkpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgbGFiZWxTdGFydDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxJbWFnZSIgJiYgZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgbGFiZWxTdGFydCA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgZXZlbnRzW2luZGV4MiArIDFdWzFdLnR5cGUgPSAiZGF0YSI7CiAgZXZlbnRzW2luZGV4MiArIDNdWzFdLnR5cGUgPSAiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiOwogIGNvbnN0IGNhbGwgPSB7CiAgICB0eXBlOiAiZ2ZtRm9vdG5vdGVDYWxsIiwKICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZCkKICB9OwogIGNvbnN0IG1hcmtlciA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxNYXJrZXIiLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uZW5kKQogIH07CiAgbWFya2VyLmVuZC5jb2x1bW4rKzsKICBtYXJrZXIuZW5kLm9mZnNldCsrOwogIG1hcmtlci5lbmQuX2J1ZmZlckluZGV4Kys7CiAgY29uc3Qgc3RyaW5nMyA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxTdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIG1hcmtlci5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnN0YXJ0KQogIH07CiAgY29uc3QgY2h1bmsgPSB7CiAgICB0eXBlOiAiY2h1bmtTdHJpbmciLAogICAgY29udGVudFR5cGU6ICJzdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHN0cmluZzMuc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBzdHJpbmczLmVuZCkKICB9OwogIGNvbnN0IHJlcGxhY2VtZW50ID0gWwogICAgLy8gVGFrZSB0aGUgYGxhYmVsSW1hZ2VNYXJrZXJgIChub3cgYGRhdGFgLCB0aGUgYCFgKQogICAgZXZlbnRzW2luZGV4MiArIDFdLAogICAgZXZlbnRzW2luZGV4MiArIDJdLAogICAgWyJlbnRlciIsIGNhbGwsIGNvbnRleHQyXSwKICAgIC8vIFRoZSBgW2AKICAgIGV2ZW50c1tpbmRleDIgKyAzXSwKICAgIGV2ZW50c1tpbmRleDIgKyA0XSwKICAgIC8vIFRoZSBgXmAuCiAgICBbImVudGVyIiwgbWFya2VyLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBtYXJrZXIsIGNvbnRleHQyXSwKICAgIC8vIEV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KICAgIFsiZW50ZXIiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICBbImVudGVyIiwgY2h1bmssIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIGNodW5rLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICAvLyBUaGUgZW5kaW5nIChgXWAsIHByb3Blcmx5IHBhcnNlZCBhbmQgbGFiZWxsZWQpLgogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXSwKICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV0sCiAgICBbImV4aXQiLCBjYWxsLCBjb250ZXh0Ml0KICBdOwogIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCBldmVudHMubGVuZ3RoIC0gaW5kZXgyICsgMSwgLi4ucmVwbGFjZW1lbnQpOwogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IHNpemUgPSAwOwogIGxldCBkYXRhMTE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGwiKTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgcmV0dXJuIGNhbGxTdGFydDsKICB9CiAgZnVuY3Rpb24gY2FsbFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgIT09IDk0KSByZXR1cm4gbm9rKGNvZGU0KTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIik7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGUgPSAic3RyaW5nIjsKICAgIHJldHVybiBjYWxsRGF0YTsKICB9CiAgZnVuY3Rpb24gY2FsbERhdGEoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YTExIHx8IC8vIFNwYWNlIG9yIHRhYiBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdGTSBmb3Igc29tZSByZWFzb24uCiAgICAgIC8vIGBcbmAgYW5kIGBbYCBub3QgYmVpbmcgc3VwcG9ydGVkIG1ha2VzIHNlbnNlLgogICAgICBjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gOTEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkKICAgICkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIik7CiAgICAgIGlmICghZGVmaW5lZC5pbmNsdWRlcyhub3JtYWxpemVJZGVudGlmaWVyKHNlbGYyLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKCFtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBkYXRhMTEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBjYWxsRXNjYXBlIDogY2FsbERhdGE7CiAgfQogIGZ1bmN0aW9uIGNhbGxFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBjYWxsRGF0YTsKICAgIH0KICAgIHJldHVybiBjYWxsRGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRGVmaW5pdGlvblN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBpZGVudGlmaWVyOwogIGxldCBzaXplID0gMDsKICBsZXQgZGF0YTExOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIikuX2NvbnRhaW5lciA9IHRydWU7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICByZXR1cm4gbGFiZWxBdE1hcmtlcjsKICB9CiAgZnVuY3Rpb24gbGFiZWxBdE1hcmtlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NCkgewogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKTsKICAgICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciKS5jb250ZW50VHlwZSA9ICJzdHJpbmciOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxJbnNpZGUoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YTExIHx8IC8vIFNwYWNlIG9yIHRhYiBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdGTSBmb3Igc29tZSByZWFzb24uCiAgICAgIC8vIGBcbmAgYW5kIGBbYCBub3QgYmVpbmcgc3VwcG9ydGVkIG1ha2VzIHNlbnNlLgogICAgICBjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gOTEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkKICAgICkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKTsKICAgICAgaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUodG9rZW4pKTsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsIik7CiAgICAgIHJldHVybiBsYWJlbEFmdGVyOwogICAgfQogICAgaWYgKCFtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBkYXRhMTEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBsYWJlbEVzY2FwZSA6IGxhYmVsSW5zaWRlOwogIH0KICBmdW5jdGlvbiBsYWJlbEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGxhYmVsSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMoaWRlbnRpZmllcikpIHsKICAgICAgICBkZWZpbmVkLnB1c2goaWRlbnRpZmllcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCB3aGl0ZXNwYWNlQWZ0ZXIsICJnZm1Gb290bm90ZURlZmluaXRpb25XaGl0ZXNwYWNlIik7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd2hpdGVzcGFjZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uQ29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvazMsIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnQyLCBvazMsIG5vaykpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZChlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb24iKTsKfQpmdW5jdGlvbiB0b2tlbml6ZUluZGVudDIoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIsIDQgKyAxKTsKICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSA0ID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBpbmRlbnQyOwp2YXIgaW5pdF9zeW50YXgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5kZW50MiA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplSW5kZW50MiwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvaHRtbC5qcwpmdW5jdGlvbiBkZWZhdWx0QmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSB7CiAgY29uc3QgY29uZmlnMyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMjsKICBjb25zdCBsYWJlbCA9IGNvbmZpZzMubGFiZWwgfHwgIkZvb3Rub3RlcyI7CiAgY29uc3QgbGFiZWxUYWdOYW1lID0gY29uZmlnMy5sYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBsYWJlbEF0dHJpYnV0ZXMgPSBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gbnVsbCB8fCBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gdm9pZCAwID8gJ2NsYXNzPSJzci1vbmx5IicgOiBjb25maWczLmxhYmVsQXR0cmlidXRlczsKICBjb25zdCBiYWNrTGFiZWwgPSBjb25maWczLmJhY2tMYWJlbCB8fCBkZWZhdWx0QmFja0xhYmVsOwogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSBjb25maWczLmNsb2JiZXJQcmVmaXggPT09IG51bGwgfHwgY29uZmlnMy5jbG9iYmVyUHJlZml4ID09PSB2b2lkIDAgPyAidXNlci1jb250ZW50LSIgOiBjb25maWczLmNsb2JiZXJQcmVmaXg7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbigpIHsKICAgICAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIHN0YWNrLnB1c2goZmFsc2UpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZygpIHsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgICAgICAgdGhpcy5idWZmZXIoKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkgewogICAgICAgIGxldCBkZWZpbml0aW9ucyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpOwogICAgICAgIGNvbnN0IGZvb3Rub3RlU3RhY2sgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7CiAgICAgICAgY29uc3QgdGlnaHRTdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmb290bm90ZVN0YWNrLnBvcCgpOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICAgICAgaWYgKCFkZWZpbml0aW9ucykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIiwgZGVmaW5pdGlvbnMgPSB7fSk7CiAgICAgICAgfQogICAgICAgIGlmICghb3duNC5jYWxsKGRlZmluaXRpb25zLCBjdXJyZW50KSkgZGVmaW5pdGlvbnNbY3VycmVudF0gPSB2YWx1ZTI7CiAgICAgICAgdGlnaHRTdGFjay5wb3AoKTsKICAgICAgICB0aGlzLnNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgICAgIHRoaXMuc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyh0b2tlbikgewogICAgICAgIGxldCBmb290bm90ZVN0YWNrID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpOwogICAgICAgIGlmICghZm9vdG5vdGVTdGFjaykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIsIGZvb3Rub3RlU3RhY2sgPSBbXSk7CiAgICAgICAgfQogICAgICAgIGZvb3Rub3RlU3RhY2sucHVzaChub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcodG9rZW4pIHsKICAgICAgICBsZXQgY2FsbHMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIik7CiAgICAgICAgbGV0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIik7CiAgICAgICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKTsKICAgICAgICBsZXQgY291bnRlcjI7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICBpZiAoIWNhbGxzKSB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIiwgY2FsbHMgPSBbXSk7CiAgICAgICAgaWYgKCFjb3VudHMpIHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIiwgY291bnRzID0ge30pOwogICAgICAgIGNvbnN0IGluZGV4MiA9IGNhbGxzLmluZGV4T2YoaWQpOwogICAgICAgIGNvbnN0IHNhZmVJZCA9IHNhbml0aXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICBjYWxscy5wdXNoKGlkKTsKICAgICAgICAgIGNvdW50c1tpZF0gPSAxOwogICAgICAgICAgY291bnRlcjIgPSBjYWxscy5sZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50c1tpZF0rKzsKICAgICAgICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV1c2VDb3VudGVyID0gY291bnRzW2lkXTsKICAgICAgICB0aGlzLnRhZygnPHN1cD48YSBocmVmPSIjJyArIGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCArICciIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJldXNlQ291bnRlciA+IDEgPyAiLSIgKyByZXVzZUNvdW50ZXIgOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLXJlZj0iIiBhcmlhLWRlc2NyaWJlZGJ5PSJmb290bm90ZS1sYWJlbCI+JyArIFN0cmluZyhjb3VudGVyMikgKyAiPC9hPjwvc3VwPiIpOwogICAgICB9LAogICAgICBudWxsKCkgewogICAgICAgIGNvbnN0IGNhbGxzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxPcmRlciIpIHx8IFtdOwogICAgICAgIGNvbnN0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIikgfHwge307CiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiKSB8fCB7fTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPHNlY3Rpb24gZGF0YS1mb290bm90ZXM9IiIgY2xhc3M9ImZvb3Rub3RlcyI+PCcgKyBsYWJlbFRhZ05hbWUgKyAnIGlkPSJmb290bm90ZS1sYWJlbCInICsgKGxhYmVsQXR0cmlidXRlcyA/ICIgIiArIGxhYmVsQXR0cmlidXRlcyA6ICIiKSArICI+Iik7CiAgICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZShsYWJlbCkpOwogICAgICAgICAgdGhpcy50YWcoIjwvIiArIGxhYmVsVGFnTmFtZSArICI+Iik7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjxvbD4iKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2FsbHMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBpZCA9IGNhbGxzW2luZGV4Ml07CiAgICAgICAgICBjb25zdCBzYWZlSWQgPSBzYW5pdGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTsKICAgICAgICAgIGxldCByZWZlcmVuY2VJbmRleCA9IDA7CiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gW107CiAgICAgICAgICB3aGlsZSAoKytyZWZlcmVuY2VJbmRleCA8PSBjb3VudHNbaWRdKSB7CiAgICAgICAgICAgIHJlZmVyZW5jZXMucHVzaCgnPGEgaHJlZj0iIycgKyBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVmZXJlbmNlSW5kZXggOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLWJhY2tyZWY9IiIgYXJpYS1sYWJlbD0iJyArIHRoaXMuZW5jb2RlKHR5cGVvZiBiYWNrTGFiZWwgPT09ICJzdHJpbmciID8gYmFja0xhYmVsIDogYmFja0xhYmVsKGluZGV4MiwgcmVmZXJlbmNlSW5kZXgpKSArICciIGNsYXNzPSJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiPlx1MjFBOScgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIjxzdXA+IiArIHJlZmVyZW5jZUluZGV4ICsgIjwvc3VwPiIgOiAiIikgKyAiPC9hPiIpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5qb2luKCIgIik7CiAgICAgICAgICBsZXQgaW5qZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPGxpIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkICsgJyI+Jyk7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoZGVmaW5pdGlvbnNbaWRdLnJlcGxhY2UoLzxcL3A+KD86XHI/XG58XHIpPyQvLCBmdW5jdGlvbigkMCkgewogICAgICAgICAgICBpbmplY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAiICIgKyByZWZlcmVuY2UgKyAkMDsKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICghaW5qZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgICAgdGhpcy50YWcocmVmZXJlbmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9saT4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9vbD4iKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9zZWN0aW9uPiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07Cn0KdmFyIG93bjQsIGVtcHR5T3B0aW9uczI7CnZhciBpbml0X2h0bWwzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBvd240ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBlbXB0eU9wdGlvbnMyID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9zeW50YXgyKCk7CiAgICBpbml0X2h0bWwzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hIdG1sKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8ZGVsPiIpOwogICAgICB9CiAgICB9LAogICAgZXhpdDogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8L2RlbD4iKTsKICAgICAgfQogICAgfQogIH07Cn0KdmFyIGluaXRfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpIHsKICBjb25zdCBvcHRpb25zXyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHNpbmdsZTIgPSBvcHRpb25zXy5zaW5nbGVUaWxkZTsKICBjb25zdCB0b2tlbml6ZXIgPSB7CiAgICBuYW1lOiAic3RyaWtldGhyb3VnaCIsCiAgICB0b2tlbml6ZTogdG9rZW5pemVTdHJpa2V0aHJvdWdoLAogICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2gKICB9OwogIGlmIChzaW5nbGUyID09PSBudWxsIHx8IHNpbmdsZTIgPT09IHZvaWQgMCkgewogICAgc2luZ2xlMiA9IHRydWU7CiAgfQogIHJldHVybiB7CiAgICB0ZXh0OiB7CiAgICAgIFsxMjZdOiB0b2tlbml6ZXIKICAgIH0sCiAgICBpbnNpZGVTcGFuOiB7CiAgICAgIG51bGw6IFt0b2tlbml6ZXJdCiAgICB9LAogICAgYXR0ZW50aW9uTWFya2VyczogewogICAgICBudWxsOiBbMTI2XQogICAgfQogIH07CiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2goZXZlbnRzLCBjb250ZXh0MikgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIgJiYgZXZlbnRzW2luZGV4Ml1bMV0uX2Nsb3NlKSB7CiAgICAgICAgbGV0IG9wZW4gPSBpbmRleDI7CiAgICAgICAgd2hpbGUgKG9wZW4tLSkgewogICAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gImV4aXQiICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiAmJiBldmVudHNbb3Blbl1bMV0uX29wZW4gJiYgLy8gSWYgdGhlIHNpemVzIGFyZSB0aGUgc2FtZToKICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPT09IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGNvbnN0IHN0cmlrZXRocm91Z2gzID0gewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpa2V0aHJvdWdoIiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLnN0YXJ0KSwKICAgICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDJdWzFdLmVuZCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgdGV4dDkgPSB7CiAgICAgICAgICAgICAgdHlwZTogInN0cmlrZXRocm91Z2hUZXh0IiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZCksCiAgICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyXVsxXS5zdGFydCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IFtbImVudGVyIiwgc3RyaWtldGhyb3VnaDMsIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml1dOwogICAgICAgICAgICBjb25zdCBpbnNpZGVTcGFuMiA9IGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbDsKICAgICAgICAgICAgaWYgKGluc2lkZVNwYW4yKSB7CiAgICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCByZXNvbHZlQWxsKGluc2lkZVNwYW4yLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4MiksIGNvbnRleHQyKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIHN0cmlrZXRocm91Z2gzLCBjb250ZXh0Ml1dKTsKICAgICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4MiAtIG9wZW4gKyAzLCBuZXh0RXZlbnRzKTsKICAgICAgICAgICAgaW5kZXgyID0gb3BlbiArIG5leHRFdmVudHMubGVuZ3RoIC0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiKSB7CiAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9ICJkYXRhIjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV2ZW50czsKICB9CiAgZnVuY3Rpb24gdG9rZW5pemVTdHJpa2V0aHJvdWdoKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBwcmV2aW91czMgPSB0aGlzLnByZXZpb3VzOwogICAgY29uc3QgZXZlbnRzID0gdGhpcy5ldmVudHM7CiAgICBsZXQgc2l6ZSA9IDA7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBpZiAocHJldmlvdXMzID09PSAxMjYgJiYgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlICE9PSAiY2hhcmFjdGVyRXNjYXBlIikgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpOwogICAgICByZXR1cm4gbW9yZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBtb3JlKGNvZGU0KSB7CiAgICAgIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzMyk7CiAgICAgIGlmIChjb2RlNCA9PT0gMTI2KSB7CiAgICAgICAgaWYgKHNpemUgPiAxKSByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHNpemUrKzsKICAgICAgICByZXR1cm4gbW9yZTsKICAgICAgfQogICAgICBpZiAoc2l6ZSA8IDIgJiYgIXNpbmdsZTIpIHJldHVybiBub2soY29kZTQpOwogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5Iik7CiAgICAgIGNvbnN0IGFmdGVyID0gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpOwogICAgICB0b2tlbi5fb3BlbiA9ICFhZnRlciB8fCBhZnRlciA9PT0gMiAmJiBCb29sZWFuKGJlZm9yZSk7CiAgICAgIHRva2VuLl9jbG9zZSA9ICFiZWZvcmUgfHwgYmVmb3JlID09PSAyICYmIEJvb2xlYW4oYWZ0ZXIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICB9Cn0KdmFyIGluaXRfc3ludGF4MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2xhc3NpZnlfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDQoKTsKICAgIGluaXRfc3ludGF4MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhYmxlSHRtbCgpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgdGFibGUodG9rZW4pIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdG9rZW4uX2FsaWduOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0YWJsZT4iKTsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iLCB0YWJsZUFsaWduKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMudGFnKCI8dGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjx0ZCIgKyBhbGlnbiArICI+Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRoZWFkPiIpOwogICAgICB9LAogICAgICB0YWJsZUhlYWRlcigpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0aCIgKyBhbGlnbiArICI+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLCAwKTsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8dHI+Iik7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBjb2RlIHRleHQgZGF0YSBoYW5kbGVyIHRvIHVuZXNjYXBlIGVzY2FwZWQgcGlwZXMgd2hlbgogICAgICAvLyB0aGV5IGFyZSBpbiB0YWJsZXMuCiAgICAgIGNvZGVUZXh0RGF0YSh0b2tlbikgewogICAgICAgIGxldCB2YWx1ZTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgICAgICBpZiAodGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIikpIHsKICAgICAgICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9cXChbXFx8XSkvZywgcmVwbGFjZTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZTIpKTsKICAgICAgfSwKICAgICAgdGFibGUoKSB7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90YWJsZT4iKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgaWYgKHRhYmxlQ29sdW1uIGluIHRhYmxlQWxpZ24pIHsKICAgICAgICAgIHRoaXMudGFnKCI8L3RkPiIpOwogICAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucmVzdW1lKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90aGVhZD4iKTsKICAgICAgfSwKICAgICAgdGFibGVIZWFkZXIoKSB7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgdGhpcy50YWcoIjwvdGg+Iik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBsZXQgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgd2hpbGUgKHRhYmxlQ29sdW1uIDwgdGFibGVBbGlnbi5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPHRkIiArIGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV0gKyAiPjwvdGQ+Iik7CiAgICAgICAgICB0YWJsZUNvbHVtbisrOwogICAgICAgIH0KICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4pOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdHI+Iik7CiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHJlcGxhY2UyKCQwLCAkMSkgewogIHJldHVybiAkMSA9PT0gInwiID8gJDEgOiAkMDsKfQp2YXIgYWxpZ25tZW50Owp2YXIgaW5pdF9odG1sNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaHRtbC5qcyIoKSB7CiAgICBhbGlnbm1lbnQgPSB7CiAgICAgIG5vbmU6ICIiLAogICAgICBsZWZ0OiAnIGFsaWduPSJsZWZ0IicsCiAgICAgIHJpZ2h0OiAnIGFsaWduPSJyaWdodCInLAogICAgICBjZW50ZXI6ICcgYWxpZ249ImNlbnRlciInCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcwpmdW5jdGlvbiBhZGRJbXBsZW1lbnRhdGlvbihlZGl0TWFwLCBhdCwgcmVtb3ZlMiwgYWRkMykgewogIGxldCBpbmRleDIgPSAwOwogIGlmIChyZW1vdmUyID09PSAwICYmIGFkZDMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHdoaWxlIChpbmRleDIgPCBlZGl0TWFwLm1hcC5sZW5ndGgpIHsKICAgIGlmIChlZGl0TWFwLm1hcFtpbmRleDJdWzBdID09PSBhdCkgewogICAgICBlZGl0TWFwLm1hcFtpbmRleDJdWzFdICs9IHJlbW92ZTI7CiAgICAgIGVkaXRNYXAubWFwW2luZGV4Ml1bMl0ucHVzaCguLi5hZGQzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIGVkaXRNYXAubWFwLnB1c2goW2F0LCByZW1vdmUyLCBhZGQzXSk7Cn0KdmFyIEVkaXRNYXA7CnZhciBpbml0X2VkaXRfbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcyIoKSB7CiAgICBFZGl0TWFwID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbmV3IGVkaXQgbWFwLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXAgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIGVkaXQ6IGEgcmVtb3ZlIGFuZC9vciBhZGQgYXQgYSBjZXJ0YWluIHBsYWNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqLwogICAgICBhZGQoaW5kZXgyLCByZW1vdmUyLCBhZGQzKSB7CiAgICAgICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgyLCByZW1vdmUyLCBhZGQzKTsKICAgICAgfQogICAgICAvLyBUbyBkbzogYWRkIHRoaXMgd2hlbiBtb3ZpbmcgdG8gYG1pY3JvbWFya2AuCiAgICAgIC8vIC8qKgogICAgICAvLyAgKiBDcmVhdGUgYW4gZWRpdDogYnV0IGluc2VydCBgYWRkYCBiZWZvcmUgZXhpc3RpbmcgYWRkaXRpb25zLgogICAgICAvLyAgKgogICAgICAvLyAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgLy8gICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAvLyAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgIC8vICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgIC8vICAqLwogICAgICAvLyBhZGRCZWZvcmUoaW5kZXgsIHJlbW92ZSwgYWRkKSB7CiAgICAgIC8vICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgsIHJlbW92ZSwgYWRkLCB0cnVlKQogICAgICAvLyB9CiAgICAgIC8qKgogICAgICAgKiBEb25lLCBjaGFuZ2UgdGhlIGV2ZW50cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50cwogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKi8KICAgICAgY29uc3VtZShldmVudHMpIHsKICAgICAgICB0aGlzLm1hcC5zb3J0KGZ1bmN0aW9uKGE1LCBiNSkgewogICAgICAgICAgcmV0dXJuIGE1WzBdIC0gYjVbMF07CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMubWFwLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgaW5kZXgyID0gdGhpcy5tYXAubGVuZ3RoOwogICAgICAgIGNvbnN0IHZlY3MgPSBbXTsKICAgICAgICB3aGlsZSAoaW5kZXgyID4gMCkgewogICAgICAgICAgaW5kZXgyIC09IDE7CiAgICAgICAgICB2ZWNzLnB1c2goZXZlbnRzLnNsaWNlKHRoaXMubWFwW2luZGV4Ml1bMF0gKyB0aGlzLm1hcFtpbmRleDJdWzFdKSwgdGhpcy5tYXBbaW5kZXgyXVsyXSk7CiAgICAgICAgICBldmVudHMubGVuZ3RoID0gdGhpcy5tYXBbaW5kZXgyXVswXTsKICAgICAgICB9CiAgICAgICAgdmVjcy5wdXNoKGV2ZW50cy5zbGljZSgpKTsKICAgICAgICBldmVudHMubGVuZ3RoID0gMDsKICAgICAgICBsZXQgc2xpY2UgPSB2ZWNzLnBvcCgpOwogICAgICAgIHdoaWxlIChzbGljZSkgewogICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50NCBvZiBzbGljZSkgewogICAgICAgICAgICBldmVudHMucHVzaChlbGVtZW50NCk7CiAgICAgICAgICB9CiAgICAgICAgICBzbGljZSA9IHZlY3MucG9wKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubWFwLmxlbmd0aCA9IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2luZmVyLmpzCmZ1bmN0aW9uIGdmbVRhYmxlQWxpZ24oZXZlbnRzLCBpbmRleDIpIHsKICBsZXQgaW5EZWxpbWl0ZXJSb3cgPSBmYWxzZTsKICBjb25zdCBhbGlnbiA9IFtdOwogIHdoaWxlIChpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpbmRleDJdOwogICAgaWYgKGluRGVsaW1pdGVyUm93KSB7CiAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAidGFibGVDb250ZW50IikgewogICAgICAgICAgYWxpZ24ucHVzaChldmVudHNbaW5kZXgyICsgMV1bMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiA/ICJsZWZ0IiA6ICJub25lIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZUNvbnRlbnQiKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDIgLSAxXVsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSB7CiAgICAgICAgICBjb25zdCBhbGlnbkluZGV4ID0gYWxpZ24ubGVuZ3RoIC0gMTsKICAgICAgICAgIGFsaWduW2FsaWduSW5kZXhdID0gYWxpZ25bYWxpZ25JbmRleF0gPT09ICJsZWZ0IiA/ICJjZW50ZXIiIDogInJpZ2h0IjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIpIHsKICAgICAgaW5EZWxpbWl0ZXJSb3cgPSB0cnVlOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIHJldHVybiBhbGlnbjsKfQp2YXIgaW5pdF9pbmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtVGFibGUoKSB7CiAgcmV0dXJuIHsKICAgIGZsb3c6IHsKICAgICAgbnVsbDogewogICAgICAgIG5hbWU6ICJ0YWJsZSIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFibGUsCiAgICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZVRhYmxlCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplVGFibGUoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBzaXplQiA9IDA7CiAgbGV0IHNlZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAoaW5kZXgyID4gLTEpIHsKICAgICAgY29uc3QgdHlwZTUgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlOwogICAgICBpZiAodHlwZTUgPT09ICJsaW5lRW5kaW5nIiB8fCAvLyBOb3RlOiBtYXJrZG93bi1ycyB1c2VzIGB3aGl0ZXNwYWNlYCBpbnN0ZWFkIG9mIGBsaW5lUHJlZml4YAogICAgICB0eXBlNSA9PT0gImxpbmVQcmVmaXgiKSBpbmRleDItLTsKICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSBpbmRleDIgPiAtMSA/IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgOiBudWxsOwogICAgY29uc3QgbmV4dDIgPSB0YWlsID09PSAidGFibGVIZWFkIiB8fCB0YWlsID09PSAidGFibGVSb3ciID8gYm9keVJvd1N0YXJ0IDogaGVhZFJvd0JlZm9yZTsKICAgIGlmIChuZXh0MiA9PT0gYm9keVJvd1N0YXJ0ICYmIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5leHQyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVIZWFkIik7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgcmV0dXJuIGhlYWRSb3dTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBzZWVuID0gdHJ1ZTsKICAgIHNpemVCICs9IDE7CiAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoc2l6ZUIgPiAxKSB7CiAgICAgICAgc2l6ZUIgPSAwOwogICAgICAgIHNlbGYyLmludGVycnVwdCA9IHRydWU7CiAgICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZVJvdyIpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyU3RhcnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBoZWFkUm93QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgc2l6ZUIgKz0gMTsKICAgIGlmIChzZWVuKSB7CiAgICAgIHNlZW4gPSBmYWxzZTsKICAgICAgc2l6ZSArPSAxOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWs7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJkYXRhIik7CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93RGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAxMjQgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJkYXRhIik7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBoZWFkUm93RXNjYXBlIDogaGVhZFJvd0RhdGE7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDEyNCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaGVhZFJvd0RhdGE7CiAgICB9CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyU3RhcnQoY29kZTQpIHsKICAgIHNlbGYyLmludGVycnVwdCA9IGZhbHNlOwogICAgaWYgKHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJSb3ciKTsKICAgIHNlZW4gPSBmYWxzZTsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJCZWZvcmUsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNTgpIHsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEJlZm9yZShjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlclZhbHVlQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgc2l6ZUIgKz0gMTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJMZWZ0QWxpZ25tZW50QWZ0ZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIHNpemVCICs9IDE7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckZpbGxlcihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJGaWxsZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJGaWxsZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICByZXR1cm4gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoIXNlZW4gfHwgc2l6ZSAhPT0gc2l6ZUIpIHsKICAgICAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlclJvdyIpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlSGVhZCIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlck5vayhjb2RlNCkgewogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVSb3ciKTsKICAgIHJldHVybiBib2R5Um93QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBib2R5Um93QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIHJldHVybiBib2R5Um93QnJlYWs7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlUm93Iik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYm9keVJvd0JyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dEYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDEyNCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGJvZHlSb3dFc2NhcGUgOiBib2R5Um93RGF0YTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBib2R5Um93RGF0YTsKICAgIH0KICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHJlc29sdmVUYWJsZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IHRydWU7CiAgbGV0IHJvd0tpbmQgPSAwOwogIGxldCBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICBsZXQgY2VsbDIgPSBbMCwgMCwgMCwgMF07CiAgbGV0IGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgbGV0IGxhc3RUYWJsZUVuZCA9IDA7CiAgbGV0IGN1cnJlbnRUYWJsZTsKICBsZXQgY3VycmVudEJvZHk7CiAgbGV0IGN1cnJlbnRDZWxsOwogIGNvbnN0IG1hcDcgPSBuZXcgRWRpdE1hcCgpOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50WzFdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAidGFibGVIZWFkIikgewogICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgaWYgKGxhc3RUYWJsZUVuZCAhPT0gMCkgewogICAgICAgICAgZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgbGFzdFRhYmxlRW5kLCBjdXJyZW50VGFibGUsIGN1cnJlbnRCb2R5KTsKICAgICAgICAgIGN1cnJlbnRCb2R5ID0gdm9pZCAwOwogICAgICAgICAgbGFzdFRhYmxlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgY3VycmVudFRhYmxlID0gewogICAgICAgICAgdHlwZTogInRhYmxlIiwKICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZCkKICAgICAgICB9OwogICAgICAgIG1hcDcuYWRkKGluZGV4MiwgMCwgW1siZW50ZXIiLCBjdXJyZW50VGFibGUsIGNvbnRleHQyXV0pOwogICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTsKICAgICAgICBjdXJyZW50Q2VsbCA9IHZvaWQgMDsKICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICAgICAgICBjZWxsMiA9IFswLCBpbmRleDIgKyAxLCAwLCAwXTsKICAgICAgICBpZiAoYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cpIHsKICAgICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgICBjdXJyZW50Qm9keSA9IHsKICAgICAgICAgICAgdHlwZTogInRhYmxlQm9keSIsCiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5lbmQpCiAgICAgICAgICB9OwogICAgICAgICAgbWFwNy5hZGQoaW5kZXgyLCAwLCBbWyJlbnRlciIsIGN1cnJlbnRCb2R5LCBjb250ZXh0Ml1dKTsKICAgICAgICB9CiAgICAgICAgcm93S2luZCA9IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIgPyAyIDogY3VycmVudEJvZHkgPyAzIDogMTsKICAgICAgfSBlbHNlIGlmIChyb3dLaW5kICYmICh0b2tlbi50eXBlID09PSAiZGF0YSIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSkgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7CiAgICAgICAgaWYgKGNlbGwyWzJdID09PSAwKSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgICAgbGFzdENlbGwgPSBbMCwgMCwgMCwgMF07CiAgICAgICAgICB9CiAgICAgICAgICBjZWxsMlsyXSA9IGluZGV4MjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlQ2VsbERpdmlkZXIiKSB7CiAgICAgICAgaWYgKGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlKSB7CiAgICAgICAgICBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGxhc3RDZWxsID0gY2VsbDI7CiAgICAgICAgICBjZWxsMiA9IFtsYXN0Q2VsbFsxXSwgaW5kZXgyLCAwLCAwXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlSGVhZCIpIHsKICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSB0cnVlOwogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgIGNlbGwyWzBdID0gY2VsbDJbMV07CiAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCBpbmRleDIsIGN1cnJlbnRDZWxsKTsKICAgICAgfSBlbHNlIGlmIChjZWxsMlsxXSAhPT0gMCkgewogICAgICAgIGN1cnJlbnRDZWxsID0gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCBjZWxsMiwgcm93S2luZCwgaW5kZXgyLCBjdXJyZW50Q2VsbCk7CiAgICAgIH0KICAgICAgcm93S2luZCA9IDA7CiAgICB9IGVsc2UgaWYgKHJvd0tpbmQgJiYgKHRva2VuLnR5cGUgPT09ICJkYXRhIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlckZpbGxlciIpKSB7CiAgICAgIGNlbGwyWzNdID0gaW5kZXgyOwogICAgfQogIH0KICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7CiAgICBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBsYXN0VGFibGVFbmQsIGN1cnJlbnRUYWJsZSwgY3VycmVudEJvZHkpOwogIH0KICBtYXA3LmNvbnN1bWUoY29udGV4dDIuZXZlbnRzKTsKICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBjb250ZXh0Mi5ldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGNvbnRleHQyLmV2ZW50c1tpbmRleDJdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZSIpIHsKICAgICAgZXZlbnRbMV0uX2FsaWduID0gZ2ZtVGFibGVBbGlnbihjb250ZXh0Mi5ldmVudHMsIGluZGV4Mik7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCByYW5nZTIsIHJvd0tpbmQsIHJvd0VuZCwgcHJldmlvdXNDZWxsKSB7CiAgY29uc3QgZ3JvdXBOYW1lID0gcm93S2luZCA9PT0gMSA/ICJ0YWJsZUhlYWRlciIgOiByb3dLaW5kID09PSAyID8gInRhYmxlRGVsaW1pdGVyIiA6ICJ0YWJsZURhdGEiOwogIGNvbnN0IHZhbHVlTmFtZSA9ICJ0YWJsZUNvbnRlbnQiOwogIGlmIChyYW5nZTJbMF0gIT09IDApIHsKICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlswXSkpOwogICAgbWFwNy5hZGQocmFuZ2UyWzBdLCAwLCBbWyJleGl0IiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICB9CiAgY29uc3Qgbm93MiA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzFdKTsKICBwcmV2aW91c0NlbGwgPSB7CiAgICB0eXBlOiBncm91cE5hbWUsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbm93MiksCiAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIG5vdzIpCiAgfTsKICBtYXA3LmFkZChyYW5nZTJbMV0sIDAsIFtbImVudGVyIiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICBpZiAocmFuZ2UyWzJdICE9PSAwKSB7CiAgICBjb25zdCByZWxhdGVkU3RhcnQgPSBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlsyXSk7CiAgICBjb25zdCByZWxhdGVkRW5kID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByYW5nZTJbM10pOwogICAgY29uc3QgdmFsdWVUb2tlbiA9IHsKICAgICAgdHlwZTogdmFsdWVOYW1lLAogICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZFN0YXJ0KSwKICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkRW5kKQogICAgfTsKICAgIG1hcDcuYWRkKHJhbmdlMlsyXSwgMCwgW1siZW50ZXIiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICAgIGlmIChyb3dLaW5kICE9PSAyKSB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gY29udGV4dDIuZXZlbnRzW3JhbmdlMlsyXV07CiAgICAgIGNvbnN0IGVuZDMgPSBjb250ZXh0Mi5ldmVudHNbcmFuZ2UyWzNdXTsKICAgICAgc3RhcnRbMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZW5kM1sxXS5lbmQpOwogICAgICBzdGFydFsxXS50eXBlID0gImNodW5rVGV4dCI7CiAgICAgIHN0YXJ0WzFdLmNvbnRlbnRUeXBlID0gInRleHQiOwogICAgICBpZiAocmFuZ2UyWzNdID4gcmFuZ2UyWzJdICsgMSkgewogICAgICAgIGNvbnN0IGE1ID0gcmFuZ2UyWzJdICsgMTsKICAgICAgICBjb25zdCBiNSA9IHJhbmdlMlszXSAtIHJhbmdlMlsyXSAtIDE7CiAgICAgICAgbWFwNy5hZGQoYTUsIGI1LCBbXSk7CiAgICAgIH0KICAgIH0KICAgIG1hcDcuYWRkKHJhbmdlMlszXSArIDEsIDAsIFtbImV4aXQiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICB9CiAgaWYgKHJvd0VuZCAhPT0gdm9pZCAwKSB7CiAgICBwcmV2aW91c0NlbGwuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByb3dFbmQpKTsKICAgIG1hcDcuYWRkKHJvd0VuZCwgMCwgW1siZXhpdCIsIHByZXZpb3VzQ2VsbCwgY29udGV4dDJdXSk7CiAgICBwcmV2aW91c0NlbGwgPSB2b2lkIDA7CiAgfQogIHJldHVybiBwcmV2aW91c0NlbGw7Cn0KZnVuY3Rpb24gZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgaW5kZXgyLCB0YWJsZTIsIHRhYmxlQm9keSkgewogIGNvbnN0IGV4aXRzID0gW107CiAgY29uc3QgcmVsYXRlZCA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgaW5kZXgyKTsKICBpZiAodGFibGVCb2R5KSB7CiAgICB0YWJsZUJvZHkuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7CiAgICBleGl0cy5wdXNoKFsiZXhpdCIsIHRhYmxlQm9keSwgY29udGV4dDJdKTsKICB9CiAgdGFibGUyLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlbGF0ZWQpOwogIGV4aXRzLnB1c2goWyJleGl0IiwgdGFibGUyLCBjb250ZXh0Ml0pOwogIG1hcDcuYWRkKGluZGV4MiArIDEsIDAsIGV4aXRzKTsKfQpmdW5jdGlvbiBnZXRQb2ludChldmVudHMsIGluZGV4MikgewogIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgY29uc3Qgc2lkZSA9IGV2ZW50WzBdID09PSAiZW50ZXIiID8gInN0YXJ0IiA6ICJlbmQiOwogIHJldHVybiBldmVudFsxXVtzaWRlXTsKfQp2YXIgaW5pdF9zeW50YXg0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfZWRpdF9tYXAoKTsKICAgIGluaXRfaW5mZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw1KCk7CiAgICBpbml0X3N5bnRheDQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1UYWdmaWx0ZXJIdG1sKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIGh0bWxGbG93RGF0YSh0b2tlbikgewogICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZUZsb3cpOwogICAgICB9LAogICAgICBodG1sVGV4dERhdGEodG9rZW4pIHsKICAgICAgICBleGl0SHRtbERhdGEuY2FsbCh0aGlzLCB0b2tlbiwgcmVUZXh0KTsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gZXhpdEh0bWxEYXRhKHRva2VuLCBmaWx0ZXIyKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZShmaWx0ZXIyLCAiJmx0OyQxJDIiKTsKICB9CiAgdGhpcy5yYXcodGhpcy5lbmNvZGUodmFsdWUyKSk7Cn0KdmFyIHJlRmxvdywgcmVUZXh0Owp2YXIgaW5pdF9saWIxOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZUZsb3cgPSAvPChcLz8pKGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzfHBsYWludGV4dHxzY3JpcHR8c3R5bGV8dGl0bGV8dGV4dGFyZWF8eG1wKSg/PVtcdFxuXGZcciAvPl0pL2dpOwogICAgcmVUZXh0ID0gbmV3IFJlZ0V4cCgiXiIgKyByZUZsb3cuc291cmNlLCAiaSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoIi8+Iik7CiAgICAgIH0sCiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQoKSB7CiAgICAgICAgdGhpcy50YWcoJ2NoZWNrZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0KICB9Owp9CnZhciBpbml0X2h0bWw2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbSgpIHsKICByZXR1cm4gewogICAgdGV4dDogewogICAgICBbOTFdOiB0YXNrbGlzdENoZWNrCiAgICB9CiAgfTsKfQpmdW5jdGlvbiB0b2tlbml6ZVRhc2tsaXN0Q2hlY2soZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIG9wZW47CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKAogICAgICAvLyBFeGl0IGlmIHRoZXJl4oCZcyBzdHVmZiBiZWZvcmUuCiAgICAgIHNlbGYyLnByZXZpb3VzICE9PSBudWxsIHx8IC8vIEV4aXQgaWYgbm90IGluIHRoZSBmaXJzdCBjb250ZW50IHRoYXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGEgbGlzdAogICAgICAvLyBpdGVtLgogICAgICAhc2VsZjIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVjayIpOwogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIHJldHVybiBjbG9zZTc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDg4IHx8IGNvZGU0ID09PSAxMjApIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiKTsKICAgICAgcmV0dXJuIGNsb3NlNzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjbG9zZTcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soewogICAgICAgIHRva2VuaXplOiBzcGFjZVRoZW5Ob25TcGFjZQogICAgICB9LCBvazMsIG5vaykoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHNwYWNlVGhlbk5vblNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgIndoaXRlc3BhY2UiKTsKICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciB0YXNrbGlzdENoZWNrOwp2YXIgaW5pdF9zeW50YXg1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHRhc2tsaXN0Q2hlY2sgPSB7CiAgICAgIG5hbWU6ICJ0YXNrbGlzdENoZWNrIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFza2xpc3RDaGVjawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YXNrX2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw2KCk7CiAgICBpbml0X3N5bnRheDUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcwpmdW5jdGlvbiBnZm0ob3B0aW9ucykgewogIHJldHVybiBjb21iaW5lRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWwoKSwKICAgIGdmbUZvb3Rub3RlKCksCiAgICBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpLAogICAgZ2ZtVGFibGUoKSwKICAgIGdmbVRhc2tMaXN0SXRlbSgpCiAgXSk7Cn0KZnVuY3Rpb24gZ2ZtSHRtbChvcHRpb25zKSB7CiAgcmV0dXJuIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCksCiAgICBnZm1Gb290bm90ZUh0bWwob3B0aW9ucyksCiAgICBnZm1TdHJpa2V0aHJvdWdoSHRtbCgpLAogICAgZ2ZtVGFibGVIdG1sKCksCiAgICBnZm1UYWdmaWx0ZXJIdG1sKCksCiAgICBnZm1UYXNrTGlzdEl0ZW1IdG1sKCkKICBdKTsKfQp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9hdXRvbGlua19saXRlcmFsKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2Zvb3Rub3RlKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2goKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFibGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3Rhc2tfbGlzdF9pdGVtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZ2ZtQDQuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstZ2ZtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtHZm0ob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gKAogICAgLyoqIEB0eXBlIHtQcm9jZXNzb3I8Um9vdD59ICovCiAgICB0aGlzCiAgKTsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMzsKICBjb25zdCBkYXRhMTEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGExMS5taWNyb21hcmtFeHRlbnNpb25zIHx8IChkYXRhMTEubWljcm9tYXJrRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCBmcm9tTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YTExLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGExMS5mcm9tTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIGNvbnN0IHRvTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YTExLnRvTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhMTEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGdmbShzZXR0aW5ncykpOwogIGZyb21NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Gcm9tTWFya2Rvd24oKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Ub01hcmtkb3duKHNldHRpbmdzKSk7Cn0KdmFyIGVtcHR5T3B0aW9uczM7CnZhciBpbml0X2xpYjIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2dmbSgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSgpOwogICAgZW1wdHlPcHRpb25zMyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29tcGlsZS5qcwpmdW5jdGlvbiBjb21waWxlKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHRhZ3MgPSB0cnVlOwogIGNvbnN0IGRlZmluaXRpb25zID0ge307CiAgY29uc3QgYnVmZmVycyA9IFtbXV07CiAgY29uc3QgbWVkaWFTdGFjayA9IFtdOwogIGNvbnN0IHRpZ2h0U3RhY2sgPSBbXTsKICBjb25zdCBkZWZhdWx0SGFuZGxlcnMgPSB7CiAgICBlbnRlcjogewogICAgICBibG9ja1F1b3RlOiBvbmVudGVyYmxvY2txdW90ZSwKICAgICAgY29kZUZlbmNlZDogb25lbnRlcmNvZGVmZW5jZWQsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IGJ1ZmZlcjIsCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IGJ1ZmZlcjIsCiAgICAgIGNvZGVJbmRlbnRlZDogb25lbnRlcmNvZGVpbmRlbnRlZCwKICAgICAgY29kZVRleHQ6IG9uZW50ZXJjb2RldGV4dCwKICAgICAgY29udGVudDogb25lbnRlcmNvbnRlbnQsCiAgICAgIGRlZmluaXRpb246IG9uZW50ZXJkZWZpbml0aW9uLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBlbXBoYXNpczogb25lbnRlcmVtcGhhc2lzLAogICAgICBodG1sRmxvdzogb25lbnRlcmh0bWxmbG93LAogICAgICBodG1sVGV4dDogb25lbnRlcmh0bWwsCiAgICAgIGltYWdlOiBvbmVudGVyaW1hZ2UsCiAgICAgIGxhYmVsOiBidWZmZXIyLAogICAgICBsaW5rOiBvbmVudGVybGluaywKICAgICAgbGlzdEl0ZW1NYXJrZXI6IG9uZW50ZXJsaXN0aXRlbW1hcmtlciwKICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsCiAgICAgIGxpc3RPcmRlcmVkOiBvbmVudGVybGlzdG9yZGVyZWQsCiAgICAgIGxpc3RVbm9yZGVyZWQ6IG9uZW50ZXJsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZW50ZXJwYXJhZ3JhcGgsCiAgICAgIHJlZmVyZW5jZTogYnVmZmVyMiwKICAgICAgcmVzb3VyY2U6IG9uZW50ZXJyZXNvdXJjZSwKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25lbnRlcnJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9uZW50ZXJzZXRleHRoZWFkaW5nLAogICAgICBzdHJvbmc6IG9uZW50ZXJzdHJvbmcKICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGF0eEhlYWRpbmc6IG9uZXhpdGF0eGhlYWRpbmcsCiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLAogICAgICBhdXRvbGlua0VtYWlsOiBvbmV4aXRhdXRvbGlua2VtYWlsLAogICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmV4aXRhdXRvbGlua3Byb3RvY29sLAogICAgICBibG9ja1F1b3RlOiBvbmV4aXRibG9ja3F1b3RlLAogICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsCiAgICAgIGNvZGVGZW5jZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlRmVuY2VkRmVuY2U6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZSwKICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbywKICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogb25yZXN1bWVkcm9wLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRjb2RlZmxvd3ZhbHVlLAogICAgICBjb2RlSW5kZW50ZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlVGV4dDogb25leGl0Y29kZXRleHQsCiAgICAgIGNvZGVUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgZGF0YTogb25leGl0ZGF0YSwKICAgICAgZGVmaW5pdGlvbjogb25leGl0ZGVmaW5pdGlvbiwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZywKICAgICAgZW1waGFzaXM6IG9uZXhpdGVtcGhhc2lzLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaGFyZEJyZWFrVHJhaWxpbmc6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaHRtbEZsb3c6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IG9uZXhpdG1lZGlhLAogICAgICBsYWJlbDogb25leGl0bGFiZWwsCiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LAogICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLAogICAgICBsaW5rOiBvbmV4aXRtZWRpYSwKICAgICAgbGlzdE9yZGVyZWQ6IG9uZXhpdGxpc3RvcmRlcmVkLAogICAgICBsaXN0VW5vcmRlcmVkOiBvbmV4aXRsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZXhpdHBhcmFncmFwaCwKICAgICAgcmVmZXJlbmNlOiBvbnJlc3VtZWRyb3AsCiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLAogICAgICByZXNvdXJjZTogb25yZXN1bWVkcm9wLAogICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nLAogICAgICBzZXRleHRIZWFkaW5nOiBvbmV4aXRzZXRleHRoZWFkaW5nLAogICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLAogICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsCiAgICAgIHN0cm9uZzogb25leGl0c3Ryb25nLAogICAgICB0aGVtYXRpY0JyZWFrOiBvbmV4aXR0aGVtYXRpY2JyZWFrCiAgICB9CiAgfTsKICBjb25zdCBoYW5kbGVyczIgPSAoCiAgICAvKiogQHR5cGUge05vcm1hbGl6ZWRIdG1sRXh0ZW5zaW9ufSAqLwogICAgY29tYmluZUh0bWxFeHRlbnNpb25zKFtkZWZhdWx0SGFuZGxlcnMsIC4uLnNldHRpbmdzLmh0bWxFeHRlbnNpb25zIHx8IFtdXSkKICApOwogIGNvbnN0IGRhdGExMSA9IHsKICAgIGRlZmluaXRpb25zLAogICAgdGlnaHRTdGFjawogIH07CiAgY29uc3QgY29udGV4dDIgPSB7CiAgICBidWZmZXI6IGJ1ZmZlcjIsCiAgICBlbmNvZGU6IGVuY29kZTIsCiAgICBnZXREYXRhLAogICAgbGluZUVuZGluZ0lmTmVlZGVkLAogICAgb3B0aW9uczogc2V0dGluZ3MsCiAgICByYXc6IHJhdzIsCiAgICByZXN1bWUsCiAgICBzZXREYXRhLAogICAgdGFnCiAgfTsKICBsZXQgbGluZUVuZGluZ1N0eWxlID0gc2V0dGluZ3MuZGVmYXVsdExpbmVFbmRpbmc7CiAgcmV0dXJuIGNvbXBpbGUyOwogIGZ1bmN0aW9uIGNvbXBpbGUyKGV2ZW50cykgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgbGV0IHN0YXJ0ID0gMDsKICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdOwogICAgbGV0IGhlYWQyID0gW107CiAgICBsZXQgYm9keTMgPSBbXTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKCFsaW5lRW5kaW5nU3R5bGUgJiYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGluZUVuZGluZ0JsYW5rIikpIHsKICAgICAgICBsaW5lRW5kaW5nU3R5bGUgPSAvKiogQHR5cGUge0xpbmVFbmRpbmd9ICovCiAgICAgICAgZXZlbnRzW2luZGV4Ml1bMl0uc2xpY2VTZXJpYWxpemUoZXZlbnRzW2luZGV4Ml1bMV0pOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdE9yZGVyZWQiIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaXN0VW5vcmRlcmVkIikgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICAgICAgbGlzdFN0YWNrLnB1c2goaW5kZXgyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJlcGFyZUxpc3QoZXZlbnRzLnNsaWNlKGxpc3RTdGFjay5wb3AoKSwgaW5kZXgyKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiZGVmaW5pdGlvbiIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGJvZHkzID0gcHVzaChib2R5MywgZXZlbnRzLnNsaWNlKHN0YXJ0LCBpbmRleDIpKTsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkMiA9IHB1c2goaGVhZDIsIGV2ZW50cy5zbGljZShzdGFydCwgaW5kZXgyICsgMSkpOwogICAgICAgICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaGVhZDIgPSBwdXNoKGhlYWQyLCBib2R5Myk7CiAgICBoZWFkMiA9IHB1c2goaGVhZDIsIGV2ZW50cy5zbGljZShzdGFydCkpOwogICAgaW5kZXgyID0gLTE7CiAgICBjb25zdCByZXN1bHQgPSBoZWFkMjsKICAgIGlmIChoYW5kbGVyczIuZW50ZXIubnVsbCkgewogICAgICBoYW5kbGVyczIuZW50ZXIubnVsbC5jYWxsKGNvbnRleHQyKTsKICAgIH0KICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgY29uc3QgaGFuZGxlcyA9IGhhbmRsZXJzMltyZXN1bHRbaW5kZXgyXVswXV07CiAgICAgIGNvbnN0IGtpbmQgPSByZXN1bHRbaW5kZXgyXVsxXS50eXBlOwogICAgICBjb25zdCBoYW5kbGUzID0gaGFuZGxlc1traW5kXTsKICAgICAgaWYgKGhhc093blByb3BlcnR5Mi5jYWxsKGhhbmRsZXMsIGtpbmQpICYmIGhhbmRsZTMpIHsKICAgICAgICBoYW5kbGUzLmNhbGwoewogICAgICAgICAgc2xpY2VTZXJpYWxpemU6IHJlc3VsdFtpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplLAogICAgICAgICAgLi4uY29udGV4dDIKICAgICAgICB9LCByZXN1bHRbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChoYW5kbGVyczIuZXhpdC5udWxsKSB7CiAgICAgIGhhbmRsZXJzMi5leGl0Lm51bGwuY2FsbChjb250ZXh0Mik7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyc1swXS5qb2luKCIiKTsKICB9CiAgZnVuY3Rpb24gcHJlcGFyZUxpc3Qoc2xpY2UpIHsKICAgIGNvbnN0IGxlbmd0aCA9IHNsaWNlLmxlbmd0aDsKICAgIGxldCBpbmRleDIgPSAwOwogICAgbGV0IGNvbnRhaW5lckJhbGFuY2UgPSAwOwogICAgbGV0IGxvb3NlID0gZmFsc2U7CiAgICBsZXQgYXRNYXJrZXI7CiAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgY29uc3QgZXZlbnQgPSBzbGljZVtpbmRleDJdOwogICAgICBpZiAoZXZlbnRbMV0uX2NvbnRhaW5lcikgewogICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgY29udGFpbmVyQmFsYW5jZSsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb250YWluZXJCYWxhbmNlLS07CiAgICAgICAgfQogICAgICB9IGVsc2Ugc3dpdGNoIChldmVudFsxXS50eXBlKSB7CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXgiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJleGl0IikgewogICAgICAgICAgICBhdE1hcmtlciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZVByZWZpeCI6IHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lRW5kaW5nQmxhbmsiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgIWNvbnRhaW5lckJhbGFuY2UpIHsKICAgICAgICAgICAgaWYgKGF0TWFya2VyKSB7CiAgICAgICAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbG9vc2UgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzbGljZVswXVsxXS5fbG9vc2UgPSBsb29zZTsKICB9CiAgZnVuY3Rpb24gc2V0RGF0YShrZXkyLCB2YWx1ZTIpIHsKICAgIGRhdGExMVtrZXkyXSA9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gZ2V0RGF0YShrZXkyKSB7CiAgICByZXR1cm4gZGF0YTExW2tleTJdOwogIH0KICBmdW5jdGlvbiBidWZmZXIyKCkgewogICAgYnVmZmVycy5wdXNoKFtdKTsKICB9CiAgZnVuY3Rpb24gcmVzdW1lKCkgewogICAgY29uc3QgYnVmID0gYnVmZmVycy5wb3AoKTsKICAgIHJldHVybiBidWYuam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHRhZyh2YWx1ZTIpIHsKICAgIGlmICghdGFncykgcmV0dXJuOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIsIHRydWUpOwogICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnB1c2godmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gcmF3Mih2YWx1ZTIpIHsKICAgIHNldERhdGEoImxhc3RXYXNUYWciKTsKICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmcyKCkgewogICAgcmF3MihsaW5lRW5kaW5nU3R5bGUgfHwgIlxuIik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdJZk5lZWRlZCgpIHsKICAgIGNvbnN0IGJ1ZmZlcjMgPSBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBzbGljZSA9IGJ1ZmZlcjNbYnVmZmVyMy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHByZXZpb3VzMyA9IHNsaWNlID8gc2xpY2UuY2hhckNvZGVBdChzbGljZS5sZW5ndGggLSAxKSA6IG51bGw7CiAgICBpZiAocHJldmlvdXMzID09PSAxMCB8fCBwcmV2aW91czMgPT09IDEzIHx8IHByZXZpb3VzMyA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsaW5lRW5kaW5nMigpOwogIH0KICBmdW5jdGlvbiBlbmNvZGUyKHZhbHVlMikgewogICAgcmV0dXJuIGdldERhdGEoImlnbm9yZUVuY29kZSIpID8gdmFsdWUyIDogZW5jb2RlKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIG9ucmVzdW1lZHJvcCgpIHsKICAgIHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdG9yZGVyZWQodG9rZW4pIHsKICAgIHRpZ2h0U3RhY2sucHVzaCghdG9rZW4uX2xvb3NlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8b2wiKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdHVub3JkZXJlZCh0b2tlbikgewogICAgdGlnaHRTdGFjay5wdXNoKCF0b2tlbi5fbG9vc2UpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjx1bCIpOwogICAgc2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbXZhbHVlKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgY29uc3QgdmFsdWUyID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIGlmICh2YWx1ZTIgIT09IDEpIHsKICAgICAgICB0YWcoJyBzdGFydD0iJyArIGVuY29kZTIoU3RyaW5nKHZhbHVlMikpICsgJyInKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW1tYXJrZXIoKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgdGFnKCI+Iik7CiAgICB9IGVsc2UgewogICAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgfQogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxsaT4iKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaXN0b3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC9vbD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdHVub3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC91bD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdGl0ZW0oKSB7CiAgICBpZiAoZ2V0RGF0YSgibGFzdFdhc1RhZyIpICYmICFnZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIikpIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB9CiAgICB0YWcoIjwvbGk+Iik7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJibG9ja3F1b3RlKCkgewogICAgdGlnaHRTdGFjay5wdXNoKGZhbHNlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8YmxvY2txdW90ZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YmxvY2txdW90ZSgpIHsKICAgIHRpZ2h0U3RhY2sucG9wKCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPC9ibG9ja3F1b3RlPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVycGFyYWdyYXBoKCkgewogICAgaWYgKCF0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgIHRhZygiPHA+Iik7CiAgICB9CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHBhcmFncmFwaCgpIHsKICAgIGlmICh0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCI8L3A+Iik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RlZmVuY2VkKCkgewogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxwcmU+PGNvZGUiKTsKICAgIHNldERhdGEoImZlbmNlc0NvdW50IiwgMCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCB2YWx1ZTIgPSByZXN1bWUoKTsKICAgIHRhZygnIGNsYXNzPSJsYW5ndWFnZS0nICsgdmFsdWUyICsgJyInKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlKCkgewogICAgY29uc3QgY291bnQyID0gZ2V0RGF0YSgiZmVuY2VzQ291bnQiKSB8fCAwOwogICAgaWYgKCFjb3VudDIpIHsKICAgICAgdGFnKCI+Iik7CiAgICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgfQogICAgc2V0RGF0YSgiZmVuY2VzQ291bnQiLCBjb3VudDIgKyAxKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvZGVpbmRlbnRlZCgpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8cHJlPjxjb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRmbG93Y29kZSgpIHsKICAgIGNvbnN0IGNvdW50MiA9IGdldERhdGEoImZlbmNlc0NvdW50Iik7CiAgICBpZiAoY291bnQyICE9PSB2b2lkIDAgJiYgY291bnQyIDwgMiAmJiBkYXRhMTEudGlnaHRTdGFjay5sZW5ndGggPiAwICYmICFnZXREYXRhKCJsYXN0V2FzVGFnIikpIHsKICAgICAgbGluZUVuZGluZzIoKTsKICAgIH0KICAgIGlmIChnZXREYXRhKCJmbG93Q29kZVNlZW5EYXRhIikpIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB9CiAgICB0YWcoIjwvY29kZT48L3ByZT4iKTsKICAgIGlmIChjb3VudDIgIT09IHZvaWQgMCAmJiBjb3VudDIgPCAyKSBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHNldERhdGEoImZsb3dDb2RlU2VlbkRhdGEiKTsKICAgIHNldERhdGEoImZlbmNlc0NvdW50Iik7CiAgICBzZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmltYWdlKCkgewogICAgbWVkaWFTdGFjay5wdXNoKHsKICAgICAgaW1hZ2U6IHRydWUKICAgIH0pOwogICAgdGFncyA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpbmsoKSB7CiAgICBtZWRpYVN0YWNrLnB1c2goe30pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbHRleHQodG9rZW4pIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbElkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxhYmVsKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmxhYmVsID0gcmVzdW1lKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlZmVyZW5jZXN0cmluZyh0b2tlbikgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnJlZmVyZW5jZUlkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJyZXNvdXJjZSgpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9ICIiOwogIH0KICBmdW5jdGlvbiBvbmVudGVycmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uID0gcmVzdW1lKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS50aXRsZSA9IHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRtZWRpYSgpIHsKICAgIGxldCBpbmRleDIgPSBtZWRpYVN0YWNrLmxlbmd0aCAtIDE7CiAgICBjb25zdCBtZWRpYSA9IG1lZGlhU3RhY2tbaW5kZXgyXTsKICAgIGNvbnN0IGlkID0gbWVkaWEucmVmZXJlbmNlSWQgfHwgbWVkaWEubGFiZWxJZDsKICAgIGNvbnN0IGNvbnRleHQzID0gbWVkaWEuZGVzdGluYXRpb24gPT09IHZvaWQgMCA/IGRlZmluaXRpb25zW25vcm1hbGl6ZUlkZW50aWZpZXIoaWQpXSA6IG1lZGlhOwogICAgdGFncyA9IHRydWU7CiAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgaWYgKG1lZGlhU3RhY2tbaW5kZXgyXS5pbWFnZSkgewogICAgICAgIHRhZ3MgPSB2b2lkIDA7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChtZWRpYS5pbWFnZSkgewogICAgICB0YWcoJzxpbWcgc3JjPSInICsgc2FuaXRpemVVcmkoY29udGV4dDMuZGVzdGluYXRpb24sIHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2wgPyB2b2lkIDAgOiBwcm90b2NvbFNvdXJjZSkgKyAnIiBhbHQ9IicpOwogICAgICByYXcyKG1lZGlhLmxhYmVsKTsKICAgICAgdGFnKCciJyk7CiAgICB9IGVsc2UgewogICAgICB0YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaShjb250ZXh0My5kZXN0aW5hdGlvbiwgc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNQcm90b2NvbCA/IHZvaWQgMCA6IHByb3RvY29sSHJlZikgKyAnIicpOwogICAgfQogICAgdGFnKGNvbnRleHQzLnRpdGxlID8gJyB0aXRsZT0iJyArIGNvbnRleHQzLnRpdGxlICsgJyInIDogIiIpOwogICAgaWYgKG1lZGlhLmltYWdlKSB7CiAgICAgIHRhZygiIC8+Iik7CiAgICB9IGVsc2UgewogICAgICB0YWcoIj4iKTsKICAgICAgcmF3MihtZWRpYS5sYWJlbCk7CiAgICAgIHRhZygiPC9hPiIpOwogICAgfQogICAgbWVkaWFTdGFjay5wb3AoKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmRlZmluaXRpb24oKSB7CiAgICBidWZmZXIyKCk7CiAgICBtZWRpYVN0YWNrLnB1c2goe30pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9ubGFiZWxzdHJpbmcodG9rZW4pIHsKICAgIHJlc3VtZSgpOwogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmxhYmVsSWQgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSByZXN1bWUoKTsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0udGl0bGUgPSByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbigpIHsKICAgIGNvbnN0IG1lZGlhID0gbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKG1lZGlhLmxhYmVsSWQpOwogICAgcmVzdW1lKCk7CiAgICBpZiAoIWhhc093blByb3BlcnR5Mi5jYWxsKGRlZmluaXRpb25zLCBpZCkpIHsKICAgICAgZGVmaW5pdGlvbnNbaWRdID0gbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdOwogICAgfQogICAgbWVkaWFTdGFjay5wb3AoKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvbnRlbnQoKSB7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF0eGhlYWRpbmdzZXF1ZW5jZSh0b2tlbikgewogICAgaWYgKGdldERhdGEoImhlYWRpbmdSYW5rIikpIHJldHVybjsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIiwgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikubGVuZ3RoKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8aCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnNldGV4dGhlYWRpbmcoKSB7CiAgICBidWZmZXIyKCk7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0KCkgewogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nKCkgewogICAgdGFnKCI8L2giICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIsIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmNoYXJDb2RlQXQoMCkgPT09IDYxID8gMSA6IDIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nKCkgewogICAgY29uc3QgdmFsdWUyID0gcmVzdW1lKCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGgiICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgICByYXcyKHZhbHVlMik7CiAgICB0YWcoIjwvaCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRhdGEodG9rZW4pIHsKICAgIHJhdzIoZW5jb2RlMih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaW5lZW5kaW5nKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChnZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciKSkgewogICAgICBzZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGdldERhdGEoImluQ29kZVRleHQiKSkgewogICAgICByYXcyKCIgIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJhdzIoZW5jb2RlMih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmxvd3ZhbHVlKHRva2VuKSB7CiAgICByYXcyKGVuY29kZTIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICAgIHNldERhdGEoImZsb3dDb2RlU2VlbkRhdGEiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0aGFyZGJyZWFrKCkgewogICAgdGFnKCI8YnIgLz4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmh0bWxmbG93KCkgewogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICBvbmVudGVyaHRtbCgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sKCkgewogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJodG1sKCkgewogICAgaWYgKHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzSHRtbCkgewogICAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiLCB0cnVlKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25lbnRlcmVtcGhhc2lzKCkgewogICAgdGFnKCI8ZW0+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJzdHJvbmcoKSB7CiAgICB0YWcoIjxzdHJvbmc+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RldGV4dCgpIHsKICAgIHNldERhdGEoImluQ29kZVRleHQiLCB0cnVlKTsKICAgIHRhZygiPGNvZGU+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGV0ZXh0KCkgewogICAgc2V0RGF0YSgiaW5Db2RlVGV4dCIpOwogICAgdGFnKCI8L2NvZGU+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGVtcGhhc2lzKCkgewogICAgdGFnKCI8L2VtPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzdHJvbmcoKSB7CiAgICB0YWcoIjwvc3Ryb25nPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXR0aGVtYXRpY2JyZWFrKCkgewogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxociAvPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIodG9rZW4pIHsKICAgIHNldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiLCB0b2tlbi50eXBlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUodG9rZW4pIHsKICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgY29uc3QgZGVjb2RlZCA9IGdldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKSA/IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLCBnZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIikgPT09ICJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIiA/IDEwIDogMTYpIDogZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyKTsKICAgIHJhdzIoZW5jb2RlMigKICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgIGRlY29kZWQKICAgICkpOwogICAgc2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua3Byb3RvY29sKHRva2VuKSB7CiAgICBjb25zdCB1cmkgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIHRhZygnPGEgaHJlZj0iJyArIHNhbml0aXplVXJpKHVyaSwgc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNQcm90b2NvbCA/IHZvaWQgMCA6IHByb3RvY29sSHJlZikgKyAnIj4nKTsKICAgIHJhdzIoZW5jb2RlMih1cmkpKTsKICAgIHRhZygiPC9hPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua2VtYWlsKHRva2VuKSB7CiAgICBjb25zdCB1cmkgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIHRhZygnPGEgaHJlZj0iJyArIHNhbml0aXplVXJpKCJtYWlsdG86IiArIHVyaSkgKyAnIj4nKTsKICAgIHJhdzIoZW5jb2RlMih1cmkpKTsKICAgIHRhZygiPC9hPiIpOwogIH0KfQp2YXIgaGFzT3duUHJvcGVydHkyLCBwcm90b2NvbEhyZWYsIHByb3RvY29sU291cmNlOwp2YXIgaW5pdF9jb21waWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbXBpbGUuanMiKCkgewogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jb21iaW5lX2V4dGVuc2lvbnMoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX251bWVyaWNfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9lbmNvZGUoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBoYXNPd25Qcm9wZXJ0eTIgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIHByb3RvY29sSHJlZiA9IC9eKGh0dHBzP3xpcmNzP3xtYWlsdG98eG1wcCkkL2k7CiAgICBwcm90b2NvbFNvdXJjZSA9IC9eaHR0cHM/JC9pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvY29udGVudC5qcwpmdW5jdGlvbiBpbml0aWFsaXplQ29udGVudChlZmZlY3RzKSB7CiAgY29uc3QgY29udGVudFN0YXJ0ID0gZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwsIGFmdGVyQ29udGVudFN0YXJ0Q29uc3RydWN0LCBwYXJhZ3JhcGhJbml0aWFsKTsKICBsZXQgcHJldmlvdXMzOwogIHJldHVybiBjb250ZW50U3RhcnQ7CiAgZnVuY3Rpb24gYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGNvbnRlbnRTdGFydCwgImxpbmVQcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcGFyYWdyYXBoSW5pdGlhbChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicGFyYWdyYXBoIik7CiAgICByZXR1cm4gbGluZVN0YXJ0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNvZGU0KSB7CiAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZW50ZXIoImNodW5rVGV4dCIsIHsKICAgICAgY29udGVudFR5cGU6ICJ0ZXh0IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMwogICAgfSk7CiAgICBpZiAocHJldmlvdXMzKSB7CiAgICAgIHByZXZpb3VzMy5uZXh0ID0gdG9rZW47CiAgICB9CiAgICBwcmV2aW91czMgPSB0b2tlbjsKICAgIHJldHVybiBkYXRhMTEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhMTEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICBlZmZlY3RzLmV4aXQoInBhcmFncmFwaCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICByZXR1cm4gbGluZVN0YXJ0OwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhMTE7CiAgfQp9CnZhciBjb250ZW50MjsKdmFyIGluaXRfY29udGVudDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9jb250ZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb250ZW50MiA9IHsKICAgICAgdG9rZW5pemU6IGluaXRpYWxpemVDb250ZW50CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZG9jdW1lbnQuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZURvY3VtZW50KGVmZmVjdHMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3Qgc3RhY2sgPSBbXTsKICBsZXQgY29udGludWVkID0gMDsKICBsZXQgY2hpbGRGbG93OwogIGxldCBjaGlsZFRva2VuOwogIGxldCBsaW5lU3RhcnRPZmZzZXQ7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29udGludWVkIDwgc3RhY2subGVuZ3RoKSB7CiAgICAgIGNvbnN0IGl0ZW0gPSBzdGFja1tjb250aW51ZWRdOwogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IGl0ZW1bMV07CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoaXRlbVswXS5jb250aW51YXRpb24sIGRvY3VtZW50Q29udGludWUsIGNoZWNrTmV3Q29udGFpbmVycykoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWUoY29kZTQpIHsKICAgIGNvbnRpbnVlZCsrOwogICAgaWYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpIHsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHZvaWQgMDsKICAgICAgaWYgKGNoaWxkRmxvdykgewogICAgICAgIGNsb3NlRmxvdygpOwogICAgICB9CiAgICAgIGNvbnN0IGluZGV4QmVmb3JlRXhpdHMgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogICAgICBsZXQgaW5kZXhCZWZvcmVGbG93ID0gaW5kZXhCZWZvcmVFeGl0czsKICAgICAgbGV0IHBvaW50NDsKICAgICAgd2hpbGUgKGluZGV4QmVmb3JlRmxvdy0tKSB7CiAgICAgICAgaWYgKHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzBdID09PSAiZXhpdCIgJiYgc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0udHlwZSA9PT0gImNodW5rRmxvdyIpIHsKICAgICAgICAgIHBvaW50NCA9IHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLmVuZDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpOwogICAgICBsZXQgaW5kZXgyID0gaW5kZXhCZWZvcmVFeGl0czsKICAgICAgd2hpbGUgKGluZGV4MiA8IHNlbGYyLmV2ZW50cy5sZW5ndGgpIHsKICAgICAgICBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS5lbmQgPSB7CiAgICAgICAgICAuLi5wb2ludDQKICAgICAgICB9OwogICAgICAgIGluZGV4MisrOwogICAgICB9CiAgICAgIHNwbGljZShzZWxmMi5ldmVudHMsIGluZGV4QmVmb3JlRmxvdyArIDEsIDAsIHNlbGYyLmV2ZW50cy5zbGljZShpbmRleEJlZm9yZUV4aXRzKSk7CiAgICAgIHNlbGYyLmV2ZW50cy5sZW5ndGggPSBpbmRleDI7CiAgICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIHN0YXJ0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2hlY2tOZXdDb250YWluZXJzKGNvZGU0KSB7CiAgICBpZiAoY29udGludWVkID09PSBzdGFjay5sZW5ndGgpIHsKICAgICAgaWYgKCFjaGlsZEZsb3cpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjaGlsZEZsb3cuY3VycmVudENvbnN0cnVjdCAmJiBjaGlsZEZsb3cuY3VycmVudENvbnN0cnVjdC5jb25jcmV0ZSkgewogICAgICAgIHJldHVybiBmbG93U3RhcnQoY29kZTQpOwogICAgICB9CiAgICAgIHNlbGYyLmludGVycnVwdCA9IEJvb2xlYW4oY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QgJiYgIWNoaWxkRmxvdy5fZ2ZtVGFibGVEeW5hbWljSW50ZXJydXB0SGFjayk7CiAgICB9CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IHt9OwogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soY29udGFpbmVyQ29uc3RydWN0LCB0aGVyZUlzQU5ld0NvbnRhaW5lciwgdGhlcmVJc05vTmV3Q29udGFpbmVyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRoZXJlSXNBTmV3Q29udGFpbmVyKGNvZGU0KSB7CiAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKTsKICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7CiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0aGVyZUlzTm9OZXdDb250YWluZXIoY29kZTQpIHsKICAgIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdID0gY29udGludWVkICE9PSBzdGFjay5sZW5ndGg7CiAgICBsaW5lU3RhcnRPZmZzZXQgPSBzZWxmMi5ub3coKS5vZmZzZXQ7CiAgICByZXR1cm4gZmxvd1N0YXJ0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZG9jdW1lbnRDb250aW51ZWQoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0ge307CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNvbnRhaW5lckNvbnN0cnVjdCwgY29udGFpbmVyQ29udGludWUsIGZsb3dTdGFydCkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250YWluZXJDb250aW51ZShjb2RlNCkgewogICAgY29udGludWVkKys7CiAgICBzdGFjay5wdXNoKFtzZWxmMi5jdXJyZW50Q29uc3RydWN0LCBzZWxmMi5jb250YWluZXJTdGF0ZV0pOwogICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZmxvd1N0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgaWYgKGNoaWxkRmxvdykgY2xvc2VGbG93KCk7CiAgICAgIGV4aXRDb250YWluZXJzKDApOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjaGlsZEZsb3cgPSBjaGlsZEZsb3cgfHwgc2VsZjIucGFyc2VyLmZsb3coc2VsZjIubm93KCkpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtGbG93IiwgewogICAgICBfdG9rZW5pemVyOiBjaGlsZEZsb3csCiAgICAgIGNvbnRlbnRUeXBlOiAiZmxvdyIsCiAgICAgIHByZXZpb3VzOiBjaGlsZFRva2VuCiAgICB9KTsKICAgIHJldHVybiBmbG93Q29udGludWUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBmbG93Q29udGludWUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICB3cml0ZVRvQ2hpbGQoZWZmZWN0cy5leGl0KCJjaHVua0Zsb3ciKSwgdHJ1ZSk7CiAgICAgIGV4aXRDb250YWluZXJzKDApOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICB3cml0ZVRvQ2hpbGQoZWZmZWN0cy5leGl0KCJjaHVua0Zsb3ciKSk7CiAgICAgIGNvbnRpbnVlZCA9IDA7CiAgICAgIHNlbGYyLmludGVycnVwdCA9IHZvaWQgMDsKICAgICAgcmV0dXJuIHN0YXJ0OwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBmbG93Q29udGludWU7CiAgfQogIGZ1bmN0aW9uIHdyaXRlVG9DaGlsZCh0b2tlbiwgZW5kT2ZGaWxlKSB7CiAgICBjb25zdCBzdHJlYW0gPSBzZWxmMi5zbGljZVN0cmVhbSh0b2tlbik7CiAgICBpZiAoZW5kT2ZGaWxlKSBzdHJlYW0ucHVzaChudWxsKTsKICAgIHRva2VuLnByZXZpb3VzID0gY2hpbGRUb2tlbjsKICAgIGlmIChjaGlsZFRva2VuKSBjaGlsZFRva2VuLm5leHQgPSB0b2tlbjsKICAgIGNoaWxkVG9rZW4gPSB0b2tlbjsKICAgIGNoaWxkRmxvdy5kZWZpbmVTa2lwKHRva2VuLnN0YXJ0KTsKICAgIGNoaWxkRmxvdy53cml0ZShzdHJlYW0pOwogICAgaWYgKHNlbGYyLnBhcnNlci5sYXp5W3Rva2VuLnN0YXJ0LmxpbmVdKSB7CiAgICAgIGxldCBpbmRleDIgPSBjaGlsZEZsb3cuZXZlbnRzLmxlbmd0aDsKICAgICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gVGhlIHRva2VuIHN0YXJ0cyBiZWZvcmUgdGhlIGxpbmUgZW5kaW5n4oCmCiAgICAgICAgICBjaGlsZEZsb3cuZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0IDwgbGluZVN0YXJ0T2Zmc2V0ICYmIC8vIOKApmFuZCBlaXRoZXIgaXMgbm90IGVuZGVkIHlldOKApgogICAgICAgICAgKCFjaGlsZEZsb3cuZXZlbnRzW2luZGV4Ml1bMV0uZW5kIHx8IC8vIOKApm9yIGVuZHMgYWZ0ZXIgaXQuCiAgICAgICAgICBjaGlsZEZsb3cuZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCA+IGxpbmVTdGFydE9mZnNldCkKICAgICAgICApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICBsZXQgc2VlbjsKICAgICAgbGV0IHBvaW50NDsKICAgICAgd2hpbGUgKGluZGV4QmVmb3JlRmxvdy0tKSB7CiAgICAgICAgaWYgKHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzBdID09PSAiZXhpdCIgJiYgc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0udHlwZSA9PT0gImNodW5rRmxvdyIpIHsKICAgICAgICAgIGlmIChzZWVuKSB7CiAgICAgICAgICAgIHBvaW50NCA9IHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLmVuZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTsKICAgICAgaW5kZXgyID0gaW5kZXhCZWZvcmVFeGl0czsKICAgICAgd2hpbGUgKGluZGV4MiA8IHNlbGYyLmV2ZW50cy5sZW5ndGgpIHsKICAgICAgICBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS5lbmQgPSB7CiAgICAgICAgICAuLi5wb2ludDQKICAgICAgICB9OwogICAgICAgIGluZGV4MisrOwogICAgICB9CiAgICAgIHNwbGljZShzZWxmMi5ldmVudHMsIGluZGV4QmVmb3JlRmxvdyArIDEsIDAsIHNlbGYyLmV2ZW50cy5zbGljZShpbmRleEJlZm9yZUV4aXRzKSk7CiAgICAgIHNlbGYyLmV2ZW50cy5sZW5ndGggPSBpbmRleDI7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV4aXRDb250YWluZXJzKHNpemUpIHsKICAgIGxldCBpbmRleDIgPSBzdGFjay5sZW5ndGg7CiAgICB3aGlsZSAoaW5kZXgyLS0gPiBzaXplKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2tbaW5kZXgyXTsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSBlbnRyeVsxXTsKICAgICAgZW50cnlbMF0uZXhpdC5jYWxsKHNlbGYyLCBlZmZlY3RzKTsKICAgIH0KICAgIHN0YWNrLmxlbmd0aCA9IHNpemU7CiAgfQogIGZ1bmN0aW9uIGNsb3NlRmxvdygpIHsKICAgIGNoaWxkRmxvdy53cml0ZShbbnVsbF0pOwogICAgY2hpbGRUb2tlbiA9IHZvaWQgMDsKICAgIGNoaWxkRmxvdyA9IHZvaWQgMDsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplQ29udGFpbmVyKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5kb2N1bWVudCwgb2szLCBub2spLCAibGluZVByZWZpeCIsIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpOwp9CnZhciBkb2N1bWVudDIsIGNvbnRhaW5lckNvbnN0cnVjdDsKdmFyIGluaXRfZG9jdW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9kb2N1bWVudC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBkb2N1bWVudDIgPSB7CiAgICAgIHRva2VuaXplOiBpbml0aWFsaXplRG9jdW1lbnQKICAgIH07CiAgICBjb250YWluZXJDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvbnRhaW5lcgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2Zsb3cuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZUZsb3coZWZmZWN0cykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBpbml0aWFsMiA9IGVmZmVjdHMuYXR0ZW1wdCgKICAgIC8vIFRyeSB0byBwYXJzZSBhIGJsYW5rIGxpbmUuCiAgICBibGFua0xpbmUsCiAgICBhdEJsYW5rRW5kaW5nLAogICAgLy8gVHJ5IHRvIHBhcnNlIGluaXRpYWwgZmxvdyAoZXNzZW50aWFsbHksIG9ubHkgY29kZSkuCiAgICBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCwgYWZ0ZXJDb25zdHJ1Y3QsIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93LCBhZnRlckNvbnN0cnVjdCwgZWZmZWN0cy5hdHRlbXB0KGNvbnRlbnQsIGFmdGVyQ29uc3RydWN0KSksICJsaW5lUHJlZml4IikpCiAgKTsKICByZXR1cm4gaW5pdGlhbDI7CiAgZnVuY3Rpb24gYXRCbGFua0VuZGluZyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmdCbGFuayIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZ0JsYW5rIik7CiAgICBzZWxmMi5jdXJyZW50Q29uc3RydWN0ID0gdm9pZCAwOwogICAgcmV0dXJuIGluaXRpYWwyOwogIH0KICBmdW5jdGlvbiBhZnRlckNvbnN0cnVjdChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHNlbGYyLmN1cnJlbnRDb25zdHJ1Y3QgPSB2b2lkIDA7CiAgICByZXR1cm4gaW5pdGlhbDI7CiAgfQp9CnZhciBmbG93Owp2YXIgaW5pdF9mbG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZmxvdy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19jb3JlX2NvbW1vbm1hcmsoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBmbG93ID0gewogICAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZUZsb3cKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS90ZXh0LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVGYWN0b3J5KGZpZWxkKSB7CiAgcmV0dXJuIHsKICAgIHJlc29sdmVBbGw6IGNyZWF0ZVJlc29sdmVyKGZpZWxkID09PSAidGV4dCIgPyByZXNvbHZlQWxsTGluZVN1ZmZpeGVzIDogdm9pZCAwKSwKICAgIHRva2VuaXplOiBpbml0aWFsaXplVGV4dAogIH07CiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVRleHQoZWZmZWN0cykgewogICAgY29uc3Qgc2VsZjIgPSB0aGlzOwogICAgY29uc3QgY29uc3RydWN0czIgPSB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzW2ZpZWxkXTsKICAgIGNvbnN0IHRleHQ5ID0gZWZmZWN0cy5hdHRlbXB0KGNvbnN0cnVjdHMyLCBzdGFydCwgbm90VGV4dCk7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCkgPyB0ZXh0OShjb2RlNCkgOiBub3RUZXh0KGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG5vdFRleHQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiZGF0YSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZGF0YTExOwogICAgfQogICAgZnVuY3Rpb24gZGF0YTExKGNvZGU0KSB7CiAgICAgIGlmIChhdEJyZWFrKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCgiZGF0YSIpOwogICAgICAgIHJldHVybiB0ZXh0OShjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRhdGExMTsKICAgIH0KICAgIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgY29uc3QgbGlzdDUgPSBjb25zdHJ1Y3RzMltjb2RlNF07CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgaWYgKGxpc3Q1KSB7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gbGlzdDVbaW5kZXgyXTsKICAgICAgICAgIGlmICghaXRlbS5wcmV2aW91cyB8fCBpdGVtLnByZXZpb3VzLmNhbGwoc2VsZjIsIHNlbGYyLnByZXZpb3VzKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQpmdW5jdGlvbiBjcmVhdGVSZXNvbHZlcihleHRyYVJlc29sdmVyKSB7CiAgcmV0dXJuIHJlc29sdmVBbGxUZXh0OwogIGZ1bmN0aW9uIHJlc29sdmVBbGxUZXh0KGV2ZW50cywgY29udGV4dDIpIHsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGxldCBlbnRlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8PSBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChlbnRlciA9PT0gdm9pZCAwKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJkYXRhIikgewogICAgICAgICAgZW50ZXIgPSBpbmRleDI7CiAgICAgICAgICBpbmRleDIrKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIWV2ZW50c1tpbmRleDJdIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJkYXRhIikgewogICAgICAgIGlmIChpbmRleDIgIT09IGVudGVyICsgMikgewogICAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXgyIC0gMV1bMV0uZW5kOwogICAgICAgICAgZXZlbnRzLnNwbGljZShlbnRlciArIDIsIGluZGV4MiAtIGVudGVyIC0gMik7CiAgICAgICAgICBpbmRleDIgPSBlbnRlciArIDI7CiAgICAgICAgfQogICAgICAgIGVudGVyID0gdm9pZCAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFSZXNvbHZlciA/IGV4dHJhUmVzb2x2ZXIoZXZlbnRzLCBjb250ZXh0MikgOiBldmVudHM7CiAgfQp9CmZ1bmN0aW9uIHJlc29sdmVBbGxMaW5lU3VmZml4ZXMoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBldmVudEluZGV4ID0gMDsKICB3aGlsZSAoKytldmVudEluZGV4IDw9IGV2ZW50cy5sZW5ndGgpIHsKICAgIGlmICgoZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCB8fCBldmVudHNbZXZlbnRJbmRleF1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciKSAmJiBldmVudHNbZXZlbnRJbmRleCAtIDFdWzFdLnR5cGUgPT09ICJkYXRhIikgewogICAgICBjb25zdCBkYXRhMTEgPSBldmVudHNbZXZlbnRJbmRleCAtIDFdWzFdOwogICAgICBjb25zdCBjaHVua3MgPSBjb250ZXh0Mi5zbGljZVN0cmVhbShkYXRhMTEpOwogICAgICBsZXQgaW5kZXgyID0gY2h1bmtzLmxlbmd0aDsKICAgICAgbGV0IGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgIGxldCBzaXplID0gMDsKICAgICAgbGV0IHRhYnM7CiAgICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4Ml07CiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gY2h1bmsubGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGNodW5rLmNoYXJDb2RlQXQoYnVmZmVySW5kZXggLSAxKSA9PT0gMzIpIHsKICAgICAgICAgICAgc2l6ZSsrOwogICAgICAgICAgICBidWZmZXJJbmRleC0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJ1ZmZlckluZGV4KSBicmVhazsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgICAgfSBlbHNlIGlmIChjaHVuayA9PT0gLTIpIHsKICAgICAgICAgIHRhYnMgPSB0cnVlOwogICAgICAgICAgc2l6ZSsrOwogICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0xKSB7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjb250ZXh0Mi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcgJiYgZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNpemUgPSAwOwogICAgICB9CiAgICAgIGlmIChzaXplKSB7CiAgICAgICAgY29uc3QgdG9rZW4gPSB7CiAgICAgICAgICB0eXBlOiBldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IHRhYnMgfHwgc2l6ZSA8IDIgPyAibGluZVN1ZmZpeCIgOiAiaGFyZEJyZWFrVHJhaWxpbmciLAogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgX2J1ZmZlckluZGV4OiBpbmRleDIgPyBidWZmZXJJbmRleCA6IGRhdGExMS5zdGFydC5fYnVmZmVySW5kZXggKyBidWZmZXJJbmRleCwKICAgICAgICAgICAgX2luZGV4OiBkYXRhMTEuc3RhcnQuX2luZGV4ICsgaW5kZXgyLAogICAgICAgICAgICBsaW5lOiBkYXRhMTEuZW5kLmxpbmUsCiAgICAgICAgICAgIGNvbHVtbjogZGF0YTExLmVuZC5jb2x1bW4gLSBzaXplLAogICAgICAgICAgICBvZmZzZXQ6IGRhdGExMS5lbmQub2Zmc2V0IC0gc2l6ZQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICAuLi5kYXRhMTEuZW5kCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkYXRhMTEuZW5kID0gewogICAgICAgICAgLi4udG9rZW4uc3RhcnQKICAgICAgICB9OwogICAgICAgIGlmIChkYXRhMTEuc3RhcnQub2Zmc2V0ID09PSBkYXRhMTEuZW5kLm9mZnNldCkgewogICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhMTEsIHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXZlbnRzLnNwbGljZShldmVudEluZGV4LCAwLCBbImVudGVyIiwgdG9rZW4sIGNvbnRleHQyXSwgWyJleGl0IiwgdG9rZW4sIGNvbnRleHQyXSk7CiAgICAgICAgICBldmVudEluZGV4ICs9IDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGV2ZW50SW5kZXgrKzsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQp2YXIgcmVzb2x2ZXIsIHN0cmluZywgdGV4dDM7CnZhciBpbml0X3RleHQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvdGV4dC5qcyIoKSB7CiAgICByZXNvbHZlciA9IHsKICAgICAgcmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoKQogICAgfTsKICAgIHN0cmluZyA9IGluaXRpYWxpemVGYWN0b3J5KCJzdHJpbmciKTsKICAgIHRleHQzID0gaW5pdGlhbGl6ZUZhY3RvcnkoInRleHQiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jb25zdHJ1Y3RzLmpzCnZhciBjb25zdHJ1Y3RzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY29uc3RydWN0c19leHBvcnRzLCB7CiAgYXR0ZW50aW9uTWFya2VyczogKCkgPT4gYXR0ZW50aW9uTWFya2VycywKICBjb250ZW50SW5pdGlhbDogKCkgPT4gY29udGVudEluaXRpYWwsCiAgZGlzYWJsZTogKCkgPT4gZGlzYWJsZSwKICBkb2N1bWVudDogKCkgPT4gZG9jdW1lbnQzLAogIGZsb3c6ICgpID0+IGZsb3cyLAogIGZsb3dJbml0aWFsOiAoKSA9PiBmbG93SW5pdGlhbCwKICBpbnNpZGVTcGFuOiAoKSA9PiBpbnNpZGVTcGFuLAogIHN0cmluZzogKCkgPT4gc3RyaW5nMiwKICB0ZXh0OiAoKSA9PiB0ZXh0NAp9KTsKdmFyIGRvY3VtZW50MywgY29udGVudEluaXRpYWwsIGZsb3dJbml0aWFsLCBmbG93Miwgc3RyaW5nMiwgdGV4dDQsIGluc2lkZVNwYW4sIGF0dGVudGlvbk1hcmtlcnMsIGRpc2FibGU7CnZhciBpbml0X2NvbnN0cnVjdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29uc3RydWN0cy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19jb3JlX2NvbW1vbm1hcmsoKTsKICAgIGluaXRfdGV4dDIoKTsKICAgIGRvY3VtZW50MyA9IHsKICAgICAgWzQyXTogbGlzdDMsCiAgICAgIFs0M106IGxpc3QzLAogICAgICBbNDVdOiBsaXN0MywKICAgICAgWzQ4XTogbGlzdDMsCiAgICAgIFs0OV06IGxpc3QzLAogICAgICBbNTBdOiBsaXN0MywKICAgICAgWzUxXTogbGlzdDMsCiAgICAgIFs1Ml06IGxpc3QzLAogICAgICBbNTNdOiBsaXN0MywKICAgICAgWzU0XTogbGlzdDMsCiAgICAgIFs1NV06IGxpc3QzLAogICAgICBbNTZdOiBsaXN0MywKICAgICAgWzU3XTogbGlzdDMsCiAgICAgIFs2Ml06IGJsb2NrUXVvdGUKICAgIH07CiAgICBjb250ZW50SW5pdGlhbCA9IHsKICAgICAgWzkxXTogZGVmaW5pdGlvbjIKICAgIH07CiAgICBmbG93SW5pdGlhbCA9IHsKICAgICAgWy0yXTogY29kZUluZGVudGVkLAogICAgICBbLTFdOiBjb2RlSW5kZW50ZWQsCiAgICAgIFszMl06IGNvZGVJbmRlbnRlZAogICAgfTsKICAgIGZsb3cyID0gewogICAgICBbMzVdOiBoZWFkaW5nQXR4LAogICAgICBbNDJdOiB0aGVtYXRpY0JyZWFrMiwKICAgICAgWzQ1XTogW3NldGV4dFVuZGVybGluZSwgdGhlbWF0aWNCcmVhazJdLAogICAgICBbNjBdOiBodG1sRmxvdywKICAgICAgWzYxXTogc2V0ZXh0VW5kZXJsaW5lLAogICAgICBbOTVdOiB0aGVtYXRpY0JyZWFrMiwKICAgICAgWzk2XTogY29kZUZlbmNlZCwKICAgICAgWzEyNl06IGNvZGVGZW5jZWQKICAgIH07CiAgICBzdHJpbmcyID0gewogICAgICBbMzhdOiBjaGFyYWN0ZXJSZWZlcmVuY2UsCiAgICAgIFs5Ml06IGNoYXJhY3RlckVzY2FwZQogICAgfTsKICAgIHRleHQ0ID0gewogICAgICBbLTVdOiBsaW5lRW5kaW5nLAogICAgICBbLTRdOiBsaW5lRW5kaW5nLAogICAgICBbLTNdOiBsaW5lRW5kaW5nLAogICAgICBbMzNdOiBsYWJlbFN0YXJ0SW1hZ2UsCiAgICAgIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSwKICAgICAgWzQyXTogYXR0ZW50aW9uLAogICAgICBbNjBdOiBbYXV0b2xpbmssIGh0bWxUZXh0XSwKICAgICAgWzkxXTogbGFiZWxTdGFydExpbmssCiAgICAgIFs5Ml06IFtoYXJkQnJlYWtFc2NhcGUsIGNoYXJhY3RlckVzY2FwZV0sCiAgICAgIFs5M106IGxhYmVsRW5kLAogICAgICBbOTVdOiBhdHRlbnRpb24sCiAgICAgIFs5Nl06IGNvZGVUZXh0CiAgICB9OwogICAgaW5zaWRlU3BhbiA9IHsKICAgICAgbnVsbDogW2F0dGVudGlvbiwgcmVzb2x2ZXJdCiAgICB9OwogICAgYXR0ZW50aW9uTWFya2VycyA9IHsKICAgICAgbnVsbDogWzQyLCA5NV0KICAgIH07CiAgICBkaXNhYmxlID0gewogICAgICBudWxsOiBbXQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jcmVhdGUtdG9rZW5pemVyLmpzCmZ1bmN0aW9uIGNyZWF0ZVRva2VuaXplcihwYXJzZXIsIGluaXRpYWxpemUsIGZyb20yKSB7CiAgbGV0IHBvaW50NCA9IHsKICAgIF9idWZmZXJJbmRleDogLTEsCiAgICBfaW5kZXg6IDAsCiAgICBsaW5lOiBmcm9tMiAmJiBmcm9tMi5saW5lIHx8IDEsCiAgICBjb2x1bW46IGZyb20yICYmIGZyb20yLmNvbHVtbiB8fCAxLAogICAgb2Zmc2V0OiBmcm9tMiAmJiBmcm9tMi5vZmZzZXQgfHwgMAogIH07CiAgY29uc3QgY29sdW1uU3RhcnQgPSB7fTsKICBjb25zdCByZXNvbHZlQWxsQ29uc3RydWN0cyA9IFtdOwogIGxldCBjaHVua3MgPSBbXTsKICBsZXQgc3RhY2sgPSBbXTsKICBsZXQgY29uc3VtZWQgPSB0cnVlOwogIGNvbnN0IGVmZmVjdHMgPSB7CiAgICBhdHRlbXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNvbnN0cnVjdCksCiAgICBjaGVjazogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjaGVjayksCiAgICBjb25zdW1lLAogICAgZW50ZXIsCiAgICBleGl0OiBleGl0MywKICAgIGludGVycnVwdDogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjaGVjaywgewogICAgICBpbnRlcnJ1cHQ6IHRydWUKICAgIH0pCiAgfTsKICBjb25zdCBjb250ZXh0MiA9IHsKICAgIGNvZGU6IG51bGwsCiAgICBjb250YWluZXJTdGF0ZToge30sCiAgICBkZWZpbmVTa2lwLAogICAgZXZlbnRzOiBbXSwKICAgIG5vdzogbm93MiwKICAgIHBhcnNlciwKICAgIHByZXZpb3VzOiBudWxsLAogICAgc2xpY2VTZXJpYWxpemUsCiAgICBzbGljZVN0cmVhbSwKICAgIHdyaXRlCiAgfTsKICBsZXQgc3RhdGUgPSBpbml0aWFsaXplLnRva2VuaXplLmNhbGwoY29udGV4dDIsIGVmZmVjdHMpOwogIGxldCBleHBlY3RlZENvZGU7CiAgaWYgKGluaXRpYWxpemUucmVzb2x2ZUFsbCkgewogICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChpbml0aWFsaXplKTsKICB9CiAgcmV0dXJuIGNvbnRleHQyOwogIGZ1bmN0aW9uIHdyaXRlKHNsaWNlKSB7CiAgICBjaHVua3MgPSBwdXNoKGNodW5rcywgc2xpY2UpOwogICAgbWFpbigpOwogICAgaWYgKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0gIT09IG51bGwpIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgYWRkUmVzdWx0KGluaXRpYWxpemUsIDApOwogICAgY29udGV4dDIuZXZlbnRzID0gcmVzb2x2ZUFsbChyZXNvbHZlQWxsQ29uc3RydWN0cywgY29udGV4dDIuZXZlbnRzLCBjb250ZXh0Mik7CiAgICByZXR1cm4gY29udGV4dDIuZXZlbnRzOwogIH0KICBmdW5jdGlvbiBzbGljZVNlcmlhbGl6ZSh0b2tlbiwgZXhwYW5kVGFicykgewogICAgcmV0dXJuIHNlcmlhbGl6ZUNodW5rcyhzbGljZVN0cmVhbSh0b2tlbiksIGV4cGFuZFRhYnMpOwogIH0KICBmdW5jdGlvbiBzbGljZVN0cmVhbSh0b2tlbikgewogICAgcmV0dXJuIHNsaWNlQ2h1bmtzKGNodW5rcywgdG9rZW4pOwogIH0KICBmdW5jdGlvbiBub3cyKCkgewogICAgY29uc3QgewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH0gPSBwb2ludDQ7CiAgICByZXR1cm4gewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRlZmluZVNraXAodmFsdWUyKSB7CiAgICBjb2x1bW5TdGFydFt2YWx1ZTIubGluZV0gPSB2YWx1ZTIuY29sdW1uOwogICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICB9CiAgZnVuY3Rpb24gbWFpbigpIHsKICAgIGxldCBjaHVua0luZGV4OwogICAgd2hpbGUgKHBvaW50NC5faW5kZXggPCBjaHVua3MubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW3BvaW50NC5faW5kZXhdOwogICAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICAgIGNodW5rSW5kZXggPSBwb2ludDQuX2luZGV4OwogICAgICAgIGlmIChwb2ludDQuX2J1ZmZlckluZGV4IDwgMCkgewogICAgICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChwb2ludDQuX2luZGV4ID09PSBjaHVua0luZGV4ICYmIHBvaW50NC5fYnVmZmVySW5kZXggPCBjaHVuay5sZW5ndGgpIHsKICAgICAgICAgIGdvKGNodW5rLmNoYXJDb2RlQXQocG9pbnQ0Ll9idWZmZXJJbmRleCkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBnbyhjaHVuayk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZ28oY29kZTQpIHsKICAgIGNvbnN1bWVkID0gdm9pZCAwOwogICAgZXhwZWN0ZWRDb2RlID0gY29kZTQ7CiAgICBzdGF0ZSA9IHN0YXRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29uc3VtZShjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcG9pbnQ0LmxpbmUrKzsKICAgICAgcG9pbnQ0LmNvbHVtbiA9IDE7CiAgICAgIHBvaW50NC5vZmZzZXQgKz0gY29kZTQgPT09IC0zID8gMiA6IDE7CiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7CiAgICB9IGVsc2UgaWYgKGNvZGU0ICE9PSAtMSkgewogICAgICBwb2ludDQuY29sdW1uKys7CiAgICAgIHBvaW50NC5vZmZzZXQrKzsKICAgIH0KICAgIGlmIChwb2ludDQuX2J1ZmZlckluZGV4IDwgMCkgewogICAgICBwb2ludDQuX2luZGV4Kys7CiAgICB9IGVsc2UgewogICAgICBwb2ludDQuX2J1ZmZlckluZGV4Kys7CiAgICAgIGlmIChwb2ludDQuX2J1ZmZlckluZGV4ID09PSAvLyBQb2ludHMgdy8gbm9uLW5lZ2F0aXZlIGBfYnVmZmVySW5kZXhgIHJlZmVyZW5jZQogICAgICAvLyBzdHJpbmdzLgogICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgY2h1bmtzW3BvaW50NC5faW5kZXhdLmxlbmd0aCkgewogICAgICAgIHBvaW50NC5fYnVmZmVySW5kZXggPSAtMTsKICAgICAgICBwb2ludDQuX2luZGV4Kys7CiAgICAgIH0KICAgIH0KICAgIGNvbnRleHQyLnByZXZpb3VzID0gY29kZTQ7CiAgICBjb25zdW1lZCA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIGVudGVyKHR5cGU1LCBmaWVsZHMpIHsKICAgIGNvbnN0IHRva2VuID0gZmllbGRzIHx8IHt9OwogICAgdG9rZW4udHlwZSA9IHR5cGU1OwogICAgdG9rZW4uc3RhcnQgPSBub3cyKCk7CiAgICBjb250ZXh0Mi5ldmVudHMucHVzaChbImVudGVyIiwgdG9rZW4sIGNvbnRleHQyXSk7CiAgICBzdGFjay5wdXNoKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CiAgZnVuY3Rpb24gZXhpdDModHlwZTUpIHsKICAgIGNvbnN0IHRva2VuID0gc3RhY2sucG9wKCk7CiAgICB0b2tlbi5lbmQgPSBub3cyKCk7CiAgICBjb250ZXh0Mi5ldmVudHMucHVzaChbImV4aXQiLCB0b2tlbiwgY29udGV4dDJdKTsKICAgIHJldHVybiB0b2tlbjsKICB9CiAgZnVuY3Rpb24gb25zdWNjZXNzZnVsY29uc3RydWN0KGNvbnN0cnVjdCwgaW5mbykgewogICAgYWRkUmVzdWx0KGNvbnN0cnVjdCwgaW5mby5mcm9tKTsKICB9CiAgZnVuY3Rpb24gb25zdWNjZXNzZnVsY2hlY2soXzQsIGluZm8pIHsKICAgIGluZm8ucmVzdG9yZSgpOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RGYWN0b3J5KG9ucmV0dXJuLCBmaWVsZHMpIHsKICAgIHJldHVybiBob29rOwogICAgZnVuY3Rpb24gaG9vayhjb25zdHJ1Y3RzMiwgcmV0dXJuU3RhdGUsIGJvZ3VzU3RhdGUpIHsKICAgICAgbGV0IGxpc3RPZkNvbnN0cnVjdHM7CiAgICAgIGxldCBjb25zdHJ1Y3RJbmRleDsKICAgICAgbGV0IGN1cnJlbnRDb25zdHJ1Y3Q7CiAgICAgIGxldCBpbmZvOwogICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb25zdHJ1Y3RzMikgPyAoCiAgICAgICAgLyogYzggaWdub3JlIG5leHQgMSAqLwogICAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoY29uc3RydWN0czIpCiAgICAgICkgOiAidG9rZW5pemUiIGluIGNvbnN0cnVjdHMyID8gKAogICAgICAgIC8vIExvb2tzIGxpa2UgYSBjb25zdHJ1Y3QuCiAgICAgICAgaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhbCiAgICAgICAgICAvKiogQHR5cGUge0NvbnN0cnVjdH0gKi8KICAgICAgICAgIGNvbnN0cnVjdHMyCiAgICAgICAgXSkKICAgICAgKSA6IGhhbmRsZU1hcE9mQ29uc3RydWN0cyhjb25zdHJ1Y3RzMik7CiAgICAgIGZ1bmN0aW9uIGhhbmRsZU1hcE9mQ29uc3RydWN0cyhtYXA3KSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0OwogICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgICAgICBjb25zdCBsZWZ0ID0gY29kZTQgIT09IG51bGwgJiYgbWFwN1tjb2RlNF07CiAgICAgICAgICBjb25zdCBhbGwzID0gY29kZTQgIT09IG51bGwgJiYgbWFwNy5udWxsOwogICAgICAgICAgY29uc3QgbGlzdDUgPSBbCiAgICAgICAgICAgIC8vIFRvIGRvOiBhZGQgbW9yZSBleHRlbnNpb24gdGVzdHMuCiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDIgKi8KICAgICAgICAgICAgLi4uQXJyYXkuaXNBcnJheShsZWZ0KSA/IGxlZnQgOiBsZWZ0ID8gW2xlZnRdIDogW10sCiAgICAgICAgICAgIC4uLkFycmF5LmlzQXJyYXkoYWxsMykgPyBhbGwzIDogYWxsMyA/IFthbGwzXSA6IFtdCiAgICAgICAgICBdOwogICAgICAgICAgcmV0dXJuIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMobGlzdDUpKGNvZGU0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0NSkgewogICAgICAgIGxpc3RPZkNvbnN0cnVjdHMgPSBsaXN0NTsKICAgICAgICBjb25zdHJ1Y3RJbmRleCA9IDA7CiAgICAgICAgaWYgKGxpc3Q1Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGJvZ3VzU3RhdGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdDVbY29uc3RydWN0SW5kZXhdKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBoYW5kbGVDb25zdHJ1Y3QoY29uc3RydWN0KSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0OwogICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgICAgICBpbmZvID0gc3RvcmUoKTsKICAgICAgICAgIGN1cnJlbnRDb25zdHJ1Y3QgPSBjb25zdHJ1Y3Q7CiAgICAgICAgICBpZiAoIWNvbnN0cnVjdC5wYXJ0aWFsKSB7CiAgICAgICAgICAgIGNvbnRleHQyLmN1cnJlbnRDb25zdHJ1Y3QgPSBjb25zdHJ1Y3Q7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29uc3RydWN0Lm5hbWUgJiYgY29udGV4dDIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKGNvbnN0cnVjdC5uYW1lKSkgewogICAgICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3QudG9rZW5pemUuY2FsbCgKICAgICAgICAgICAgLy8gSWYgd2UgZG8gaGF2ZSBmaWVsZHMsIGNyZWF0ZSBhbiBvYmplY3Qgdy8gYGNvbnRleHRgIGFzIGl0cwogICAgICAgICAgICAvLyBwcm90b3R5cGUuCiAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGEg4oCcbGl2ZSBiaW5kaW5n4oCdLCB3aGljaCBpcyBuZWVkZWQgZm9yIGBpbnRlcnJ1cHRgLgogICAgICAgICAgICBmaWVsZHMgPyBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoY29udGV4dDIpLCBmaWVsZHMpIDogY29udGV4dDIsCiAgICAgICAgICAgIGVmZmVjdHMsCiAgICAgICAgICAgIG9rMywKICAgICAgICAgICAgbm9rCiAgICAgICAgICApKGNvZGU0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gb2szKGNvZGU0KSB7CiAgICAgICAgY29uc3VtZWQgPSB0cnVlOwogICAgICAgIG9ucmV0dXJuKGN1cnJlbnRDb25zdHJ1Y3QsIGluZm8pOwogICAgICAgIHJldHVybiByZXR1cm5TdGF0ZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBub2soY29kZTQpIHsKICAgICAgICBjb25zdW1lZCA9IHRydWU7CiAgICAgICAgaW5mby5yZXN0b3JlKCk7CiAgICAgICAgaWYgKCsrY29uc3RydWN0SW5kZXggPCBsaXN0T2ZDb25zdHJ1Y3RzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdChsaXN0T2ZDb25zdHJ1Y3RzW2NvbnN0cnVjdEluZGV4XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBib2d1c1N0YXRlOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGZyb20zKSB7CiAgICBpZiAoY29uc3RydWN0LnJlc29sdmVBbGwgJiYgIXJlc29sdmVBbGxDb25zdHJ1Y3RzLmluY2x1ZGVzKGNvbnN0cnVjdCkpIHsKICAgICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChjb25zdHJ1Y3QpOwogICAgfQogICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlKSB7CiAgICAgIHNwbGljZShjb250ZXh0Mi5ldmVudHMsIGZyb20zLCBjb250ZXh0Mi5ldmVudHMubGVuZ3RoIC0gZnJvbTMsIGNvbnN0cnVjdC5yZXNvbHZlKGNvbnRleHQyLmV2ZW50cy5zbGljZShmcm9tMyksIGNvbnRleHQyKSk7CiAgICB9CiAgICBpZiAoY29uc3RydWN0LnJlc29sdmVUbykgewogICAgICBjb250ZXh0Mi5ldmVudHMgPSBjb25zdHJ1Y3QucmVzb2x2ZVRvKGNvbnRleHQyLmV2ZW50cywgY29udGV4dDIpOwogICAgfQogIH0KICBmdW5jdGlvbiBzdG9yZSgpIHsKICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBub3cyKCk7CiAgICBjb25zdCBzdGFydFByZXZpb3VzID0gY29udGV4dDIucHJldmlvdXM7CiAgICBjb25zdCBzdGFydEN1cnJlbnRDb25zdHJ1Y3QgPSBjb250ZXh0Mi5jdXJyZW50Q29uc3RydWN0OwogICAgY29uc3Qgc3RhcnRFdmVudHNJbmRleCA9IGNvbnRleHQyLmV2ZW50cy5sZW5ndGg7CiAgICBjb25zdCBzdGFydFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CiAgICByZXR1cm4gewogICAgICBmcm9tOiBzdGFydEV2ZW50c0luZGV4LAogICAgICByZXN0b3JlCiAgICB9OwogICAgZnVuY3Rpb24gcmVzdG9yZSgpIHsKICAgICAgcG9pbnQ0ID0gc3RhcnRQb2ludDsKICAgICAgY29udGV4dDIucHJldmlvdXMgPSBzdGFydFByZXZpb3VzOwogICAgICBjb250ZXh0Mi5jdXJyZW50Q29uc3RydWN0ID0gc3RhcnRDdXJyZW50Q29uc3RydWN0OwogICAgICBjb250ZXh0Mi5ldmVudHMubGVuZ3RoID0gc3RhcnRFdmVudHNJbmRleDsKICAgICAgc3RhY2sgPSBzdGFydFN0YWNrOwogICAgICBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpOwogICAgfQogIH0KICBmdW5jdGlvbiBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpIHsKICAgIGlmIChwb2ludDQubGluZSBpbiBjb2x1bW5TdGFydCAmJiBwb2ludDQuY29sdW1uIDwgMikgewogICAgICBwb2ludDQuY29sdW1uID0gY29sdW1uU3RhcnRbcG9pbnQ0LmxpbmVdOwogICAgICBwb2ludDQub2Zmc2V0ICs9IGNvbHVtblN0YXJ0W3BvaW50NC5saW5lXSAtIDE7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHNsaWNlQ2h1bmtzKGNodW5rcywgdG9rZW4pIHsKICBjb25zdCBzdGFydEluZGV4ID0gdG9rZW4uc3RhcnQuX2luZGV4OwogIGNvbnN0IHN0YXJ0QnVmZmVySW5kZXggPSB0b2tlbi5zdGFydC5fYnVmZmVySW5kZXg7CiAgY29uc3QgZW5kSW5kZXggPSB0b2tlbi5lbmQuX2luZGV4OwogIGNvbnN0IGVuZEJ1ZmZlckluZGV4ID0gdG9rZW4uZW5kLl9idWZmZXJJbmRleDsKICBsZXQgdmlldzsKICBpZiAoc3RhcnRJbmRleCA9PT0gZW5kSW5kZXgpIHsKICAgIHZpZXcgPSBbY2h1bmtzW3N0YXJ0SW5kZXhdLnNsaWNlKHN0YXJ0QnVmZmVySW5kZXgsIGVuZEJ1ZmZlckluZGV4KV07CiAgfSBlbHNlIHsKICAgIHZpZXcgPSBjaHVua3Muc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogICAgaWYgKHN0YXJ0QnVmZmVySW5kZXggPiAtMSkgewogICAgICBjb25zdCBoZWFkMiA9IHZpZXdbMF07CiAgICAgIGlmICh0eXBlb2YgaGVhZDIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdmlld1swXSA9IGhlYWQyLnNsaWNlKHN0YXJ0QnVmZmVySW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIHZpZXcuc2hpZnQoKTsKICAgICAgfQogICAgfQogICAgaWYgKGVuZEJ1ZmZlckluZGV4ID4gMCkgewogICAgICB2aWV3LnB1c2goY2h1bmtzW2VuZEluZGV4XS5zbGljZSgwLCBlbmRCdWZmZXJJbmRleCkpOwogICAgfQogIH0KICByZXR1cm4gdmlldzsKfQpmdW5jdGlvbiBzZXJpYWxpemVDaHVua3MoY2h1bmtzLCBleHBhbmRUYWJzKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBhdFRhYjsKICB3aGlsZSAoKytpbmRleDIgPCBjaHVua3MubGVuZ3RoKSB7CiAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpbmRleDJdOwogICAgbGV0IHZhbHVlMjsKICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICJzdHJpbmciKSB7CiAgICAgIHZhbHVlMiA9IGNodW5rOwogICAgfSBlbHNlIHN3aXRjaCAoY2h1bmspIHsKICAgICAgY2FzZSAtNTogewogICAgICAgIHZhbHVlMiA9ICJcciI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtNDogewogICAgICAgIHZhbHVlMiA9ICJcbiI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtMzogewogICAgICAgIHZhbHVlMiA9ICJcclxuIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC0yOiB7CiAgICAgICAgdmFsdWUyID0gZXhwYW5kVGFicyA/ICIgIiA6ICIJIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC0xOiB7CiAgICAgICAgaWYgKCFleHBhbmRUYWJzICYmIGF0VGFiKSBjb250aW51ZTsKICAgICAgICB2YWx1ZTIgPSAiICI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGVmYXVsdDogewogICAgICAgIHZhbHVlMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2h1bmspOwogICAgICB9CiAgICB9CiAgICBhdFRhYiA9IGNodW5rID09PSAtMjsKICAgIHJlc3VsdC5wdXNoKHZhbHVlMik7CiAgfQogIHJldHVybiByZXN1bHQuam9pbigiIik7Cn0KdmFyIGluaXRfY3JlYXRlX3Rva2VuaXplciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jcmVhdGUtdG9rZW5pemVyLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wYXJzZS5qcwpmdW5jdGlvbiBwYXJzZTQob3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBjb25zdHJ1Y3RzMiA9ICgKICAgIC8qKiBAdHlwZSB7RnVsbE5vcm1hbGl6ZWRFeHRlbnNpb259ICovCiAgICBjb21iaW5lRXh0ZW5zaW9ucyhbY29uc3RydWN0c19leHBvcnRzLCAuLi5zZXR0aW5ncy5leHRlbnNpb25zIHx8IFtdXSkKICApOwogIGNvbnN0IHBhcnNlciA9IHsKICAgIGNvbnN0cnVjdHM6IGNvbnN0cnVjdHMyLAogICAgY29udGVudDogY3JlYXRlNyhjb250ZW50MiksCiAgICBkZWZpbmVkOiBbXSwKICAgIGRvY3VtZW50OiBjcmVhdGU3KGRvY3VtZW50MiksCiAgICBmbG93OiBjcmVhdGU3KGZsb3cpLAogICAgbGF6eToge30sCiAgICBzdHJpbmc6IGNyZWF0ZTcoc3RyaW5nKSwKICAgIHRleHQ6IGNyZWF0ZTcodGV4dDMpCiAgfTsKICByZXR1cm4gcGFyc2VyOwogIGZ1bmN0aW9uIGNyZWF0ZTcoaW5pdGlhbDIpIHsKICAgIHJldHVybiBjcmVhdG9yOwogICAgZnVuY3Rpb24gY3JlYXRvcihmcm9tMikgewogICAgICByZXR1cm4gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbDIsIGZyb20yKTsKICAgIH0KICB9Cn0KdmFyIGluaXRfcGFyc2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3BhcnNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zKCk7CiAgICBpbml0X2NvbnRlbnQyKCk7CiAgICBpbml0X2RvY3VtZW50KCk7CiAgICBpbml0X2Zsb3coKTsKICAgIGluaXRfdGV4dDIoKTsKICAgIGluaXRfY29uc3RydWN0cygpOwogICAgaW5pdF9jcmVhdGVfdG9rZW5pemVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcG9zdHByb2Nlc3MuanMKZnVuY3Rpb24gcG9zdHByb2Nlc3MoZXZlbnRzKSB7CiAgd2hpbGUgKCFzdWJ0b2tlbml6ZShldmVudHMpKSB7CiAgfQogIHJldHVybiBldmVudHM7Cn0KdmFyIGluaXRfcG9zdHByb2Nlc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcG9zdHByb2Nlc3MuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zdWJ0b2tlbml6ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3ByZXByb2Nlc3MuanMKZnVuY3Rpb24gcHJlcHJvY2VzcygpIHsKICBsZXQgY29sdW1uID0gMTsKICBsZXQgYnVmZmVyMiA9ICIiOwogIGxldCBzdGFydCA9IHRydWU7CiAgbGV0IGF0Q2FycmlhZ2VSZXR1cm47CiAgcmV0dXJuIHByZXByb2Nlc3NvcjsKICBmdW5jdGlvbiBwcmVwcm9jZXNzb3IodmFsdWUyLCBlbmNvZGluZywgZW5kMykgewogICAgY29uc3QgY2h1bmtzID0gW107CiAgICBsZXQgbWF0Y2gyOwogICAgbGV0IG5leHQyOwogICAgbGV0IHN0YXJ0UG9zaXRpb247CiAgICBsZXQgZW5kUG9zaXRpb247CiAgICBsZXQgY29kZTQ7CiAgICB2YWx1ZTIgPSBidWZmZXIyICsgKHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciID8gdmFsdWUyLnRvU3RyaW5nKCkgOiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdm9pZCAwKS5kZWNvZGUodmFsdWUyKSk7CiAgICBzdGFydFBvc2l0aW9uID0gMDsKICAgIGJ1ZmZlcjIgPSAiIjsKICAgIGlmIChzdGFydCkgewogICAgICBpZiAodmFsdWUyLmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSB7CiAgICAgICAgc3RhcnRQb3NpdGlvbisrOwogICAgICB9CiAgICAgIHN0YXJ0ID0gdm9pZCAwOwogICAgfQogICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24gPCB2YWx1ZTIubGVuZ3RoKSB7CiAgICAgIHNlYXJjaC5sYXN0SW5kZXggPSBzdGFydFBvc2l0aW9uOwogICAgICBtYXRjaDIgPSBzZWFyY2guZXhlYyh2YWx1ZTIpOwogICAgICBlbmRQb3NpdGlvbiA9IG1hdGNoMiAmJiBtYXRjaDIuaW5kZXggIT09IHZvaWQgMCA/IG1hdGNoMi5pbmRleCA6IHZhbHVlMi5sZW5ndGg7CiAgICAgIGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoZW5kUG9zaXRpb24pOwogICAgICBpZiAoIW1hdGNoMikgewogICAgICAgIGJ1ZmZlcjIgPSB2YWx1ZTIuc2xpY2Uoc3RhcnRQb3NpdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGNvZGU0ID09PSAxMCAmJiBzdGFydFBvc2l0aW9uID09PSBlbmRQb3NpdGlvbiAmJiBhdENhcnJpYWdlUmV0dXJuKSB7CiAgICAgICAgY2h1bmtzLnB1c2goLTMpOwogICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB2b2lkIDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGF0Q2FycmlhZ2VSZXR1cm4pIHsKICAgICAgICAgIGNodW5rcy5wdXNoKC01KTsKICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHsKICAgICAgICAgIGNodW5rcy5wdXNoKHZhbHVlMi5zbGljZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpOwogICAgICAgICAgY29sdW1uICs9IGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChjb2RlNCkgewogICAgICAgICAgY2FzZSAwOiB7CiAgICAgICAgICAgIGNodW5rcy5wdXNoKDY1NTMzKTsKICAgICAgICAgICAgY29sdW1uKys7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSA5OiB7CiAgICAgICAgICAgIG5leHQyID0gTWF0aC5jZWlsKGNvbHVtbiAvIDQpICogNDsKICAgICAgICAgICAgY2h1bmtzLnB1c2goLTIpOwogICAgICAgICAgICB3aGlsZSAoY29sdW1uKysgPCBuZXh0MikgY2h1bmtzLnB1c2goLTEpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgMTA6IHsKICAgICAgICAgICAgY2h1bmtzLnB1c2goLTQpOwogICAgICAgICAgICBjb2x1bW4gPSAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgYXRDYXJyaWFnZVJldHVybiA9IHRydWU7CiAgICAgICAgICAgIGNvbHVtbiA9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlvbiArIDE7CiAgICB9CiAgICBpZiAoZW5kMykgewogICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikgY2h1bmtzLnB1c2goLTUpOwogICAgICBpZiAoYnVmZmVyMikgY2h1bmtzLnB1c2goYnVmZmVyMik7CiAgICAgIGNodW5rcy5wdXNoKG51bGwpOwogICAgfQogICAgcmV0dXJuIGNodW5rczsKICB9Cn0KdmFyIHNlYXJjaDsKdmFyIGluaXRfcHJlcHJvY2VzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wcmVwcm9jZXNzLmpzIigpIHsKICAgIHNlYXJjaCA9IC9bXDBcdFxuXHJdL2c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9pbmRleC5qcwpmdW5jdGlvbiBtaWNyb21hcmsodmFsdWUyLCBlbmNvZGluZywgb3B0aW9ucykgewogIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICJzdHJpbmciKSB7CiAgICBvcHRpb25zID0gZW5jb2Rpbmc7CiAgICBlbmNvZGluZyA9IHZvaWQgMDsKICB9CiAgcmV0dXJuIGNvbXBpbGUob3B0aW9ucykocG9zdHByb2Nlc3MocGFyc2U0KG9wdGlvbnMpLmRvY3VtZW50KCkud3JpdGUocHJlcHJvY2VzcygpKHZhbHVlMiwgZW5jb2RpbmcsIHRydWUpKSkpOwp9CnZhciBpbml0X21pY3JvbWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcGlsZSgpOwogICAgaW5pdF9wYXJzZTIoKTsKICAgIGluaXRfcG9zdHByb2Nlc3MoKTsKICAgIGluaXRfcHJlcHJvY2VzcygpOwogICAgaW5pdF9jb21waWxlKCk7CiAgICBpbml0X3BhcnNlMigpOwogICAgaW5pdF9wb3N0cHJvY2VzcygpOwogICAgaW5pdF9wcmVwcm9jZXNzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb20tbWFya2Rvd25AMi4wLjMvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bi9saWIvaW5kZXguanMKZnVuY3Rpb24gZnJvbU1hcmtkb3duKHZhbHVlMiwgZW5jb2RpbmcsIG9wdGlvbnMpIHsKICBpZiAoZW5jb2RpbmcgJiYgdHlwZW9mIGVuY29kaW5nID09PSAib2JqZWN0IikgewogICAgb3B0aW9ucyA9IGVuY29kaW5nOwogICAgZW5jb2RpbmcgPSB2b2lkIDA7CiAgfQogIHJldHVybiBjb21waWxlcihvcHRpb25zKShwb3N0cHJvY2VzcyhwYXJzZTQob3B0aW9ucykuZG9jdW1lbnQoKS53cml0ZShwcmVwcm9jZXNzKCkodmFsdWUyLCBlbmNvZGluZywgdHJ1ZSkpKSk7Cn0KZnVuY3Rpb24gY29tcGlsZXIob3B0aW9ucykgewogIGNvbnN0IGNvbmZpZzMgPSB7CiAgICB0cmFuc2Zvcm1zOiBbXSwKICAgIGNhbkNvbnRhaW5Fb2xzOiBbImVtcGhhc2lzIiwgImZyYWdtZW50IiwgImhlYWRpbmciLCAicGFyYWdyYXBoIiwgInN0cm9uZyJdLAogICAgZW50ZXI6IHsKICAgICAgYXV0b2xpbms6IG9wZW5lcjIobGluazMpLAogICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmVudGVyZGF0YSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25lbnRlcmRhdGEsCiAgICAgIGF0eEhlYWRpbmc6IG9wZW5lcjIoaGVhZGluZzMpLAogICAgICBibG9ja1F1b3RlOiBvcGVuZXIyKGJsb2NrUXVvdGUyKSwKICAgICAgY2hhcmFjdGVyRXNjYXBlOiBvbmVudGVyZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlOiBvbmVudGVyZGF0YSwKICAgICAgY29kZUZlbmNlZDogb3BlbmVyMihjb2RlRmxvdyksCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IGJ1ZmZlcjIsCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IGJ1ZmZlcjIsCiAgICAgIGNvZGVJbmRlbnRlZDogb3BlbmVyMihjb2RlRmxvdywgYnVmZmVyMiksCiAgICAgIGNvZGVUZXh0OiBvcGVuZXIyKGNvZGVUZXh0MiwgYnVmZmVyMiksCiAgICAgIGNvZGVUZXh0RGF0YTogb25lbnRlcmRhdGEsCiAgICAgIGRhdGE6IG9uZW50ZXJkYXRhLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmVudGVyZGF0YSwKICAgICAgZGVmaW5pdGlvbjogb3BlbmVyMihkZWZpbml0aW9uMyksCiAgICAgIGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBidWZmZXIyLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGVtcGhhc2lzOiBvcGVuZXIyKGVtcGhhc2lzMyksCiAgICAgIGhhcmRCcmVha0VzY2FwZTogb3BlbmVyMihoYXJkQnJlYWszKSwKICAgICAgaGFyZEJyZWFrVHJhaWxpbmc6IG9wZW5lcjIoaGFyZEJyZWFrMyksCiAgICAgIGh0bWxGbG93OiBvcGVuZXIyKGh0bWw3LCBidWZmZXIyKSwKICAgICAgaHRtbEZsb3dEYXRhOiBvbmVudGVyZGF0YSwKICAgICAgaHRtbFRleHQ6IG9wZW5lcjIoaHRtbDcsIGJ1ZmZlcjIpLAogICAgICBodG1sVGV4dERhdGE6IG9uZW50ZXJkYXRhLAogICAgICBpbWFnZTogb3BlbmVyMihpbWFnZTMpLAogICAgICBsYWJlbDogYnVmZmVyMiwKICAgICAgbGluazogb3BlbmVyMihsaW5rMyksCiAgICAgIGxpc3RJdGVtOiBvcGVuZXIyKGxpc3RJdGVtMyksCiAgICAgIGxpc3RJdGVtVmFsdWU6IG9uZW50ZXJsaXN0aXRlbXZhbHVlLAogICAgICBsaXN0T3JkZXJlZDogb3BlbmVyMihsaXN0NSwgb25lbnRlcmxpc3RvcmRlcmVkKSwKICAgICAgbGlzdFVub3JkZXJlZDogb3BlbmVyMihsaXN0NSksCiAgICAgIHBhcmFncmFwaDogb3BlbmVyMihwYXJhZ3JhcGgzKSwKICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLAogICAgICByZWZlcmVuY2VTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9wZW5lcjIoaGVhZGluZzMpLAogICAgICBzdHJvbmc6IG9wZW5lcjIoc3Ryb25nMyksCiAgICAgIHRoZW1hdGljQnJlYWs6IG9wZW5lcjIodGhlbWF0aWNCcmVhazQpCiAgICB9LAogICAgZXhpdDogewogICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSwKICAgICAgYXR4SGVhZGluZ1NlcXVlbmNlOiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UsCiAgICAgIGF1dG9saW5rOiBjbG9zZXIoKSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCwKICAgICAgYmxvY2tRdW90ZTogY2xvc2VyKCksCiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2UsCiAgICAgIGNvZGVGZW5jZWQ6IGNsb3NlcihvbmV4aXRjb2RlZmVuY2VkKSwKICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8sCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEsCiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZXhpdGRhdGEsCiAgICAgIGNvZGVJbmRlbnRlZDogY2xvc2VyKG9uZXhpdGNvZGVpbmRlbnRlZCksCiAgICAgIGNvZGVUZXh0OiBjbG9zZXIob25leGl0Y29kZXRleHQpLAogICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRlZmluaXRpb246IGNsb3NlcigpLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZywKICAgICAgZGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9ubGFiZWxzdHJpbmcsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nLAogICAgICBlbXBoYXNpczogY2xvc2VyKCksCiAgICAgIGhhcmRCcmVha0VzY2FwZTogY2xvc2VyKG9uZXhpdGhhcmRicmVhayksCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSwKICAgICAgaHRtbEZsb3c6IGNsb3NlcihvbmV4aXRodG1sZmxvdyksCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IGNsb3NlcihvbmV4aXRodG1sdGV4dCksCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IGNsb3NlcihvbmV4aXRpbWFnZSksCiAgICAgIGxhYmVsOiBvbmV4aXRsYWJlbCwKICAgICAgbGFiZWxUZXh0OiBvbmV4aXRsYWJlbHRleHQsCiAgICAgIGxpbmVFbmRpbmc6IG9uZXhpdGxpbmVlbmRpbmcsCiAgICAgIGxpbms6IGNsb3NlcihvbmV4aXRsaW5rKSwKICAgICAgbGlzdEl0ZW06IGNsb3NlcigpLAogICAgICBsaXN0T3JkZXJlZDogY2xvc2VyKCksCiAgICAgIGxpc3RVbm9yZGVyZWQ6IGNsb3NlcigpLAogICAgICBwYXJhZ3JhcGg6IGNsb3NlcigpLAogICAgICByZWZlcmVuY2VTdHJpbmc6IG9uZXhpdHJlZmVyZW5jZXN0cmluZywKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZywKICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZywKICAgICAgcmVzb3VyY2U6IG9uZXhpdHJlc291cmNlLAogICAgICBzZXRleHRIZWFkaW5nOiBjbG9zZXIob25leGl0c2V0ZXh0aGVhZGluZyksCiAgICAgIHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6IG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UsCiAgICAgIHNldGV4dEhlYWRpbmdUZXh0OiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCwKICAgICAgc3Ryb25nOiBjbG9zZXIoKSwKICAgICAgdGhlbWF0aWNCcmVhazogY2xvc2VyKCkKICAgIH0KICB9OwogIGNvbmZpZ3VyZTIoY29uZmlnMywgKG9wdGlvbnMgfHwge30pLm1kYXN0RXh0ZW5zaW9ucyB8fCBbXSk7CiAgY29uc3QgZGF0YTExID0ge307CiAgcmV0dXJuIGNvbXBpbGUyOwogIGZ1bmN0aW9uIGNvbXBpbGUyKGV2ZW50cykgewogICAgbGV0IHRyZWUgPSB7CiAgICAgIHR5cGU6ICJyb290IiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogICAgY29uc3QgY29udGV4dDIgPSB7CiAgICAgIHN0YWNrOiBbdHJlZV0sCiAgICAgIHRva2VuU3RhY2s6IFtdLAogICAgICBjb25maWc6IGNvbmZpZzMsCiAgICAgIGVudGVyLAogICAgICBleGl0OiBleGl0MywKICAgICAgYnVmZmVyOiBidWZmZXIyLAogICAgICByZXN1bWUsCiAgICAgIGRhdGE6IGRhdGExMQogICAgfTsKICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHRhaWwgPSBsaXN0U3RhY2sucG9wKCk7CiAgICAgICAgICBpbmRleDIgPSBwcmVwYXJlTGlzdChldmVudHMsIHRhaWwsIGluZGV4Mik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBjb25maWczW2V2ZW50c1tpbmRleDJdWzBdXTsKICAgICAgaWYgKG93bjUuY2FsbChoYW5kbGVyMiwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSkpIHsKICAgICAgICBoYW5kbGVyMltldmVudHNbaW5kZXgyXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oewogICAgICAgICAgc2xpY2VTZXJpYWxpemU6IGV2ZW50c1tpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplCiAgICAgICAgfSwgY29udGV4dDIpLCBldmVudHNbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250ZXh0Mi50b2tlblN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQyLnRva2VuU3RhY2tbY29udGV4dDIudG9rZW5TdGFjay5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSB0YWlsWzFdIHx8IGRlZmF1bHRPbkVycm9yOwogICAgICBoYW5kbGVyMi5jYWxsKGNvbnRleHQyLCB2b2lkIDAsIHRhaWxbMF0pOwogICAgfQogICAgdHJlZS5wb3NpdGlvbiA9IHsKICAgICAgc3RhcnQ6IHBvaW50MihldmVudHMubGVuZ3RoID4gMCA/IGV2ZW50c1swXVsxXS5zdGFydCA6IHsKICAgICAgICBsaW5lOiAxLAogICAgICAgIGNvbHVtbjogMSwKICAgICAgICBvZmZzZXQ6IDAKICAgICAgfSksCiAgICAgIGVuZDogcG9pbnQyKGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXVsxXS5lbmQgOiB7CiAgICAgICAgbGluZTogMSwKICAgICAgICBjb2x1bW46IDEsCiAgICAgICAgb2Zmc2V0OiAwCiAgICAgIH0pCiAgICB9OwogICAgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjb25maWczLnRyYW5zZm9ybXMubGVuZ3RoKSB7CiAgICAgIHRyZWUgPSBjb25maWczLnRyYW5zZm9ybXNbaW5kZXgyXSh0cmVlKSB8fCB0cmVlOwogICAgfQogICAgcmV0dXJuIHRyZWU7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVMaXN0KGV2ZW50cywgc3RhcnQsIGxlbmd0aCkgewogICAgbGV0IGluZGV4MiA9IHN0YXJ0IC0gMTsKICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gLTE7CiAgICBsZXQgbGlzdFNwcmVhZCA9IGZhbHNlOwogICAgbGV0IGxpc3RJdGVtNDsKICAgIGxldCBsaW5lSW5kZXg7CiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleDsKICAgIGxldCBhdE1hcmtlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8PSBsZW5ndGgpIHsKICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICAgICAgc3dpdGNoIChldmVudFsxXS50eXBlKSB7CiAgICAgICAgY2FzZSAibGlzdFVub3JkZXJlZCI6CiAgICAgICAgY2FzZSAibGlzdE9yZGVyZWQiOgogICAgICAgIGNhc2UgImJsb2NrUXVvdGUiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tOwogICAgICAgICAgfQogICAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZUVuZGluZ0JsYW5rIjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICAgIGlmIChsaXN0SXRlbTQgJiYgIWF0TWFya2VyICYmICFjb250YWluZXJCYWxhbmNlICYmICFmaXJzdEJsYW5rTGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZmlyc3RCbGFua0xpbmVJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgfQogICAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lUHJlZml4IjoKICAgICAgICBjYXNlICJsaXN0SXRlbVZhbHVlIjoKICAgICAgICBjYXNlICJsaXN0SXRlbU1hcmtlciI6CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXgiOgogICAgICAgIGNhc2UgImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI6IHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFjb250YWluZXJCYWxhbmNlICYmIGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIgfHwgY29udGFpbmVyQmFsYW5jZSA9PT0gLTEgJiYgZXZlbnRbMF0gPT09ICJleGl0IiAmJiAoZXZlbnRbMV0udHlwZSA9PT0gImxpc3RVbm9yZGVyZWQiIHx8IGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIpKSB7CiAgICAgICAgaWYgKGxpc3RJdGVtNCkgewogICAgICAgICAgbGV0IHRhaWxJbmRleCA9IGluZGV4MjsKICAgICAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgICAgIHdoaWxlICh0YWlsSW5kZXgtLSkgewogICAgICAgICAgICBjb25zdCB0YWlsRXZlbnQgPSBldmVudHNbdGFpbEluZGV4XTsKICAgICAgICAgICAgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICAgICAgaWYgKHRhaWxFdmVudFswXSA9PT0gImV4aXQiKSBjb250aW51ZTsKICAgICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgICBldmVudHNbbGluZUluZGV4XVsxXS50eXBlID0gImxpbmVFbmRpbmdCbGFuayI7CiAgICAgICAgICAgICAgICBsaXN0U3ByZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgICAgbGluZUluZGV4ID0gdGFpbEluZGV4OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZVByZWZpeCIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJibG9ja1F1b3RlUHJlZml4IiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVNYXJrZXIiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1JbmRlbnQiKSB7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEJsYW5rTGluZUluZGV4ICYmICghbGluZUluZGV4IHx8IGZpcnN0QmxhbmtMaW5lSW5kZXggPCBsaW5lSW5kZXgpKSB7CiAgICAgICAgICAgIGxpc3RJdGVtNC5fc3ByZWFkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxpc3RJdGVtNC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBsaW5lSW5kZXggPyBldmVudHNbbGluZUluZGV4XVsxXS5zdGFydCA6IGV2ZW50WzFdLmVuZCk7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGxpbmVJbmRleCB8fCBpbmRleDIsIDAsIFsiZXhpdCIsIGxpc3RJdGVtNCwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgfQogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gewogICAgICAgICAgICB0eXBlOiAibGlzdEl0ZW0iLAogICAgICAgICAgICBfc3ByZWFkOiBmYWxzZSwKICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50WzFdLnN0YXJ0KSwKICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgaW4gYSBzZWNvbmQuCiAgICAgICAgICAgIGVuZDogdm9pZCAwCiAgICAgICAgICB9OwogICAgICAgICAgbGlzdEl0ZW00ID0gaXRlbTsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCAwLCBbImVudGVyIiwgaXRlbSwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gdm9pZCAwOwogICAgICAgICAgYXRNYXJrZXIgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZXZlbnRzW3N0YXJ0XVsxXS5fc3ByZWFkID0gbGlzdFNwcmVhZDsKICAgIHJldHVybiBsZW5ndGg7CiAgfQogIGZ1bmN0aW9uIG9wZW5lcjIoY3JlYXRlNywgYW5kKSB7CiAgICByZXR1cm4gb3BlbjsKICAgIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHsKICAgICAgZW50ZXIuY2FsbCh0aGlzLCBjcmVhdGU3KHRva2VuKSwgdG9rZW4pOwogICAgICBpZiAoYW5kKSBhbmQuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGJ1ZmZlcjIoKSB7CiAgICB0aGlzLnN0YWNrLnB1c2goewogICAgICB0eXBlOiAiZnJhZ21lbnQiLAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogIH0KICBmdW5jdGlvbiBlbnRlcihub2RlMiwgdG9rZW4sIGVycm9ySGFuZGxlcikgewogICAgY29uc3QgcGFyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgc2libGluZ3MyLnB1c2gobm9kZTIpOwogICAgdGhpcy5zdGFjay5wdXNoKG5vZGUyKTsKICAgIHRoaXMudG9rZW5TdGFjay5wdXNoKFt0b2tlbiwgZXJyb3JIYW5kbGVyIHx8IHZvaWQgMF0pOwogICAgbm9kZTIucG9zaXRpb24gPSB7CiAgICAgIHN0YXJ0OiBwb2ludDIodG9rZW4uc3RhcnQpLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgZW5kYCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuCiAgICAgIGVuZDogdm9pZCAwCiAgICB9OwogIH0KICBmdW5jdGlvbiBjbG9zZXIoYW5kKSB7CiAgICByZXR1cm4gY2xvc2U3OwogICAgZnVuY3Rpb24gY2xvc2U3KHRva2VuKSB7CiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTsKICAgICAgZXhpdDMuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV4aXQzKHRva2VuLCBvbkV4aXRFcnJvcikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgY29uc3Qgb3BlbiA9IHRoaXMudG9rZW5TdGFjay5wb3AoKTsKICAgIGlmICghb3BlbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIHRva2VuLnR5cGUgKyAiYCAoIiArIHN0cmluZ2lmeVBvc2l0aW9uKHsKICAgICAgICBzdGFydDogdG9rZW4uc3RhcnQsCiAgICAgICAgZW5kOiB0b2tlbi5lbmQKICAgICAgfSkgKyAiKTogaXRcdTIwMTlzIG5vdCBvcGVuIik7CiAgICB9IGVsc2UgaWYgKG9wZW5bMF0udHlwZSAhPT0gdG9rZW4udHlwZSkgewogICAgICBpZiAob25FeGl0RXJyb3IpIHsKICAgICAgICBvbkV4aXRFcnJvci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBoYW5kbGVyMiA9IG9wZW5bMV0gfHwgZGVmYXVsdE9uRXJyb3I7CiAgICAgICAgaGFuZGxlcjIuY2FsbCh0aGlzLCB0b2tlbiwgb3BlblswXSk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUyLnBvc2l0aW9uLmVuZCA9IHBvaW50Mih0b2tlbi5lbmQpOwogIH0KICBmdW5jdGlvbiByZXN1bWUoKSB7CiAgICByZXR1cm4gdG9TdHJpbmcodGhpcy5zdGFjay5wb3AoKSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0b3JkZXJlZCgpIHsKICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikgewogICAgaWYgKHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUpIHsKICAgICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB2b2lkIDA7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCBkYXRhMTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5sYW5nID0gZGF0YTEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhKCkgewogICAgY29uc3QgZGF0YTEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubWV0YSA9IGRhdGExMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlKCkgewogICAgaWYgKHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZSkgcmV0dXJuOwogICAgdGhpcy5idWZmZXIoKTsKICAgIHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZSA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWQoKSB7CiAgICBjb25zdCBkYXRhMTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGExMi5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCAiIik7CiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVpbmRlbnRlZCgpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTEyLnJlcGxhY2UoLyhccj9cbnxccikkL2csICIiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7CiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhYmVsID0gbGFiZWw7CiAgICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudGl0bGUgPSBkYXRhMTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IGRhdGExMjsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGlmICghbm9kZTIuZGVwdGgpIHsKICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGg7CiAgICAgIG5vZGUyLmRlcHRoID0gZGVwdGg7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0KCkgewogICAgdGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmRlcHRoID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY29kZVBvaW50QXQoMCkgPT09IDYxID8gMSA6IDI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7CiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmRhdGEodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgdGFpbCA9IHNpYmxpbmdzMltzaWJsaW5nczIubGVuZ3RoIC0gMV07CiAgICBpZiAoIXRhaWwgfHwgdGFpbC50eXBlICE9PSAidGV4dCIpIHsKICAgICAgdGFpbCA9IHRleHQ5KCk7CiAgICAgIHRhaWwucG9zaXRpb24gPSB7CiAgICAgICAgc3RhcnQ6IHBvaW50Mih0b2tlbi5zdGFydCksCiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgbGF0ZXIuCiAgICAgICAgZW5kOiB2b2lkIDAKICAgICAgfTsKICAgICAgc2libGluZ3MyLnB1c2godGFpbCk7CiAgICB9CiAgICB0aGlzLnN0YWNrLnB1c2godGFpbCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRhdGEodG9rZW4pIHsKICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgdGFpbC52YWx1ZSArPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmVlbmRpbmcodG9rZW4pIHsKICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5hdEhhcmRCcmVhaykgewogICAgICBjb25zdCB0YWlsID0gY29udGV4dDIuY2hpbGRyZW5bY29udGV4dDIuY2hpbGRyZW4ubGVuZ3RoIC0gMV07CiAgICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgICAgIHRoaXMuZGF0YS5hdEhhcmRCcmVhayA9IHZvaWQgMDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyAmJiBjb25maWczLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQyLnR5cGUpKSB7CiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7CiAgICB0aGlzLmRhdGEuYXRIYXJkQnJlYWsgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sZmxvdygpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sdGV4dCgpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RldGV4dCgpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaW5rKCkgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmluUmVmZXJlbmNlKSB7CiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAic2hvcnRjdXQiOwogICAgICBub2RlMi50eXBlICs9ICJSZWZlcmVuY2UiOwogICAgICBub2RlMi5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTsKICAgICAgZGVsZXRlIG5vZGUyLnVybDsKICAgICAgZGVsZXRlIG5vZGUyLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgZGVsZXRlIG5vZGUyLmlkZW50aWZpZXI7CiAgICAgIGRlbGV0ZSBub2RlMi5sYWJlbDsKICAgIH0KICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmV4aXRpbWFnZSgpIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5pblJlZmVyZW5jZSkgewogICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgfHwgInNob3J0Y3V0IjsKICAgICAgbm9kZTIudHlwZSArPSAiUmVmZXJlbmNlIjsKICAgICAgbm9kZTIucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7CiAgICAgIGRlbGV0ZSBub2RlMi51cmw7CiAgICAgIGRlbGV0ZSBub2RlMi50aXRsZTsKICAgIH0gZWxzZSB7CiAgICAgIGRlbGV0ZSBub2RlMi5pZGVudGlmaWVyOwogICAgICBkZWxldGUgbm9kZTIubGFiZWw7CiAgICB9CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7CiAgICBjb25zdCBzdHJpbmczID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICAgIGFuY2VzdG9yLmxhYmVsID0gZGVjb2RlU3RyaW5nKHN0cmluZzMpOwogICAgYW5jZXN0b3IuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc3RyaW5nMykudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7CiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIHRoaXMuZGF0YS5pblJlZmVyZW5jZSA9IHRydWU7CiAgICBpZiAobm9kZTIudHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGNvbnN0IGNoaWxkcmVuMiA9IGZyYWdtZW50LmNoaWxkcmVuOwogICAgICBub2RlMi5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyLmFsdCA9IHZhbHVlMjsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IGRhdGExMjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHsKICAgIGNvbnN0IGRhdGExMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnRpdGxlID0gZGF0YTEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZSgpIHsKICAgIHRoaXMuZGF0YS5pblJlZmVyZW5jZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnJlZmVyZW5jZSgpIHsKICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gImNvbGxhcHNlZCI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlZmVyZW5jZXN0cmluZyh0b2tlbikgewogICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5sYWJlbCA9IGxhYmVsOwogICAgbm9kZTIuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpLnRvTG93ZXJDYXNlKCk7CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9ICJmdWxsIjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyKHRva2VuKSB7CiAgICB0aGlzLmRhdGEuY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSA9IHRva2VuLnR5cGU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZXZhbHVlKHRva2VuKSB7CiAgICBjb25zdCBkYXRhMTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IHR5cGU1ID0gdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU7CiAgICBsZXQgdmFsdWUyOwogICAgaWYgKHR5cGU1KSB7CiAgICAgIHZhbHVlMiA9IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTEyLCB0eXBlNSA9PT0gImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiID8gMTAgOiAxNik7CiAgICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTEyKTsKICAgICAgdmFsdWUyID0gcmVzdWx0OwogICAgfQogICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIHRhaWwudmFsdWUgKz0gdmFsdWUyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2UodG9rZW4pIHsKICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludDIodG9rZW4uZW5kKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtwcm90b2NvbCh0b2tlbikgewogICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudXJsID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rZW1haWwodG9rZW4pIHsKICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9ICJtYWlsdG86IiArIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBibG9ja1F1b3RlMigpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJibG9ja3F1b3RlIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBjb2RlRmxvdygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgbGFuZzogbnVsbCwKICAgICAgbWV0YTogbnVsbCwKICAgICAgdmFsdWU6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiBjb2RlVGV4dDIoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiaW5saW5lQ29kZSIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gZGVmaW5pdGlvbjMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiZGVmaW5pdGlvbiIsCiAgICAgIGlkZW50aWZpZXI6ICIiLAogICAgICBsYWJlbDogbnVsbCwKICAgICAgdGl0bGU6IG51bGwsCiAgICAgIHVybDogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGVtcGhhc2lzMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJlbXBoYXNpcyIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gaGVhZGluZzMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiaGVhZGluZyIsCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGRlcHRoYCB3aWxsIGJlIHNldCBsYXRlci4KICAgICAgZGVwdGg6IDAsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gaGFyZEJyZWFrMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJicmVhayIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGh0bWw3KCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImh0bWwiLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGltYWdlMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJpbWFnZSIsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiLAogICAgICBhbHQ6IG51bGwKICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpbmszKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpbmsiLAogICAgICB0aXRsZTogbnVsbCwKICAgICAgdXJsOiAiIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBsaXN0NSh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3QiLAogICAgICBvcmRlcmVkOiB0b2tlbi50eXBlID09PSAibGlzdE9yZGVyZWQiLAogICAgICBzdGFydDogbnVsbCwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpc3RJdGVtMyh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3RJdGVtIiwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGVja2VkOiBudWxsLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIHBhcmFncmFwaDMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBzdHJvbmczKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogInN0cm9uZyIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gdGV4dDkoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gdGhlbWF0aWNCcmVhazQoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGhlbWF0aWNCcmVhayIKICAgIH07CiAgfQp9CmZ1bmN0aW9uIHBvaW50MihkNSkgewogIHJldHVybiB7CiAgICBsaW5lOiBkNS5saW5lLAogICAgY29sdW1uOiBkNS5jb2x1bW4sCiAgICBvZmZzZXQ6IGQ1Lm9mZnNldAogIH07Cn0KZnVuY3Rpb24gY29uZmlndXJlMihjb21iaW5lZCwgZXh0ZW5zaW9ucykgewogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb25zLmxlbmd0aCkgewogICAgY29uc3QgdmFsdWUyID0gZXh0ZW5zaW9uc1tpbmRleDJdOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUyKSkgewogICAgICBjb25maWd1cmUyKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfSBlbHNlIHsKICAgICAgZXh0ZW5zaW9uKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfQogIH0KfQpmdW5jdGlvbiBleHRlbnNpb24oY29tYmluZWQsIGV4dGVuc2lvbjIpIHsKICBsZXQga2V5MjsKICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjUuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJjYW5Db250YWluRW9scyI6IHsKICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltrZXkyXTsKICAgICAgICAgIGlmIChyaWdodCkgewogICAgICAgICAgICBjb21iaW5lZFtrZXkyXS5wdXNoKC4uLnJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJ0cmFuc2Zvcm1zIjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIGNvbWJpbmVkW2tleTJdLnB1c2goLi4ucmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImVudGVyIjoKICAgICAgICBjYXNlICJleGl0IjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tYmluZWRba2V5Ml0sIHJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihsZWZ0LCByaWdodCkgewogIGlmIChsZWZ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIGxlZnQudHlwZSArICJgICgiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogbGVmdC5zdGFydCwKICAgICAgZW5kOiBsZWZ0LmVuZAogICAgfSkgKyAiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIG9wZW4iKTsKICB9IGVsc2UgewogICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIHN0aWxsIG9wZW4iKTsKICB9Cn0KdmFyIG93bjU7CnZhciBpbml0X2xpYjIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4zL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICAgIGluaXRfbWljcm9tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9zdHJpbmdpZnlfcG9zaXRpb24oKTsKICAgIG93bjUgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMy9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMy9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrUGFyc2Uob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5wYXJzZXIgPSBwYXJzZXI7CiAgZnVuY3Rpb24gcGFyc2VyKGRvYykgewogICAgcmV0dXJuIGZyb21NYXJrZG93bihkb2MsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhlc2Ugb3B0aW9ucyBhcmUgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciB0aGVtIHRvIGJlIHNldCBieSBwbHVnaW5zIG9uIGBkYXRhYCBpbnN0ZWFkIG9mIGJlaW5nCiAgICAgIC8vIHBhc3NlZCBieSB1c2Vycy4KICAgICAgZXh0ZW5zaW9uczogc2VsZjIuZGF0YSgibWljcm9tYXJrRXh0ZW5zaW9ucyIpIHx8IFtdLAogICAgICBtZGFzdEV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoImZyb21NYXJrZG93bkV4dGVuc2lvbnMiKSB8fCBbXQogICAgfSk7CiAgfQp9CnZhciBpbml0X2xpYjIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19wYXJzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMKdmFyIHJlcXVpcmVfZm9ybWF0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgOwogICAgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbmFtZXNwYWNlMjsKICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgbmFtZXNwYWNlMiA9IG1vZHVsZS5leHBvcnRzID0gZm9ybWF0MjsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lc3BhY2UyID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKDEsIGV2YWwpKCJ0aGlzIik7CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgICBuYW1lc3BhY2UyLmZvcm1hdCA9IGZvcm1hdDI7CiAgICAgIG5hbWVzcGFjZTIudnNwcmludGYgPSB2c3ByaW50ZjsKICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBuYW1lc3BhY2UyLnByaW50ZiA9IHByaW50ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBwcmludGYoKSB7CiAgICAgICAgY29uc29sZS5sb2coZm9ybWF0Mi5hcHBseShudWxsLCBhcmd1bWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIHJlcGxhY2VtZW50cykgewogICAgICAgIHJldHVybiBmb3JtYXQyLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChyZXBsYWNlbWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmb3JtYXQyKGZtdCkgewogICAgICAgIHZhciBhcmdJbmRleCA9IDEsIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksIGkxMSA9IDAsIG4xMiA9IGZtdC5sZW5ndGgsIHJlc3VsdCA9ICIiLCBjMTEsIGVzY2FwZWQgPSBmYWxzZSwgYXJnLCB0bXAsIGxlYWRpbmdaZXJvID0gZmFsc2UsIHByZWNpc2lvbiwgbmV4dEFyZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107CiAgICAgICAgfSwgc2x1cnBOdW1iZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBkaWdpdHMgPSAiIjsKICAgICAgICAgIHdoaWxlICgvXGQvLnRlc3QoZm10W2kxMV0pKSB7CiAgICAgICAgICAgIGRpZ2l0cyArPSBmbXRbaTExKytdOwogICAgICAgICAgICBjMTEgPSBmbXRbaTExXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkaWdpdHMubGVuZ3RoID4gMCA/IHBhcnNlSW50KGRpZ2l0cykgOiBudWxsOwogICAgICAgIH07CiAgICAgICAgZm9yICg7IGkxMSA8IG4xMjsgKytpMTEpIHsKICAgICAgICAgIGMxMSA9IGZtdFtpMTFdOwogICAgICAgICAgaWYgKGVzY2FwZWQpIHsKICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAoYzExID09ICIuIikgewogICAgICAgICAgICAgIGxlYWRpbmdaZXJvID0gZmFsc2U7CiAgICAgICAgICAgICAgYzExID0gZm10WysraTExXTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjMTEgPT0gIjAiICYmIGZtdFtpMTEgKyAxXSA9PSAiLiIpIHsKICAgICAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7CiAgICAgICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICAgICAgYzExID0gZm10W2kxMV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGVhZGluZ1plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZWNpc2lvbiA9IHNsdXJwTnVtYmVyKCk7CiAgICAgICAgICAgIHN3aXRjaCAoYzExKSB7CiAgICAgICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgICAgIGFyZyA9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAic3RyaW5nIiB8fCBhcmcgaW5zdGFuY2VvZiBTdHJpbmcpCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcmc7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnNlSW50KG5leHRBcmcoKSwgMTApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZiI6CiAgICAgICAgICAgICAgICB0bXAgPSBTdHJpbmcocGFyc2VGbG9hdChuZXh0QXJnKCkpLnRvRml4ZWQocHJlY2lzaW9uIHx8IDYpKTsKICAgICAgICAgICAgICAgIHJlc3VsdCArPSBsZWFkaW5nWmVybyA/IHRtcCA6IHRtcC5yZXBsYWNlKC9eMC8sICIiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImoiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IEpTT04uc3RyaW5naWZ5KG5leHRBcmcoKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJvIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZyg4KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIngiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIweCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygxNik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMHgiICsgcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGMxMSA9PT0gIiUiKSB7CiAgICAgICAgICAgIGVzY2FwZWQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2ZhdWx0QDIuMC4xL25vZGVfbW9kdWxlcy9mYXVsdC9pbmRleC5qcwpmdW5jdGlvbiBjcmVhdGU1KENvbnN0cnVjdG9yKSB7CiAgRm9ybWF0dGVkRXJyb3IuZGlzcGxheU5hbWUgPSBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBDb25zdHJ1Y3Rvci5uYW1lOwogIHJldHVybiBGb3JtYXR0ZWRFcnJvcjsKICBmdW5jdGlvbiBGb3JtYXR0ZWRFcnJvcihmb3JtYXQyLCAuLi52YWx1ZXMpIHsKICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdDIgPyAoMCwgaW1wb3J0X2Zvcm1hdDIuZGVmYXVsdCkoZm9ybWF0MiwgLi4udmFsdWVzKSA6IGZvcm1hdDI7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHJlYXNvbik7CiAgfQp9CnZhciBpbXBvcnRfZm9ybWF0MiwgZmF1bHQ7CnZhciBpbml0X2ZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZmF1bHRAMi4wLjEvbm9kZV9tb2R1bGVzL2ZhdWx0L2luZGV4LmpzIigpIHsKICAgIGltcG9ydF9mb3JtYXQyID0gX190b0VTTShyZXF1aXJlX2Zvcm1hdCgpLCAxKTsKICAgIGZhdWx0ID0gT2JqZWN0LmFzc2lnbihjcmVhdGU1KEVycm9yKSwgewogICAgICBldmFsOiBjcmVhdGU1KEV2YWxFcnJvciksCiAgICAgIHJhbmdlOiBjcmVhdGU1KFJhbmdlRXJyb3IpLAogICAgICByZWZlcmVuY2U6IGNyZWF0ZTUoUmVmZXJlbmNlRXJyb3IpLAogICAgICBzeW50YXg6IGNyZWF0ZTUoU3ludGF4RXJyb3IpLAogICAgICB0eXBlOiBjcmVhdGU1KFR5cGVFcnJvciksCiAgICAgIHVyaTogY3JlYXRlNShVUklFcnJvcikKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvdG8tbWF0dGVycy5qcwpmdW5jdGlvbiB0b01hdHRlcnMob3B0aW9ucykgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBwcmVzZXRzT3JNYXR0ZXJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zID8gW29wdGlvbnNdIDogWyJ5YW1sIl07CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJlc2V0c09yTWF0dGVycy5sZW5ndGgpIHsKICAgIHJlc3VsdFtpbmRleDJdID0gbWF0dGVyKHByZXNldHNPck1hdHRlcnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gbWF0dGVyKG9wdGlvbjIpIHsKICBsZXQgcmVzdWx0ID0gb3B0aW9uMjsKICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgIGlmICghb3duNi5jYWxsKG1hcmtlcnMsIHJlc3VsdCkpIHsKICAgICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AiLCByZXN1bHQpOwogICAgfQogICAgcmVzdWx0ID0gewogICAgICB0eXBlOiByZXN1bHQsCiAgICAgIG1hcmtlcjogbWFya2Vyc1tyZXN1bHRdCiAgICB9OwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHsKICAgIHRocm93IGZhdWx0KCJFeHBlY3RlZCBtYXR0ZXIgdG8gYmUgYW4gb2JqZWN0LCBub3QgYCVqYCIsIHJlc3VsdCk7CiAgfQogIGlmICghb3duNi5jYWxsKHJlc3VsdCwgInR5cGUiKSkgewogICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgYHR5cGVgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgaWYgKCFvd242LmNhbGwocmVzdWx0LCAiZmVuY2UiKSAmJiAhb3duNi5jYWxsKHJlc3VsdCwgIm1hcmtlciIpKSB7CiAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBgbWFya2VyYCBvciBgZmVuY2VgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgb3duNiwgbWFya2VyczsKdmFyIGluaXRfdG9fbWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3RvLW1hdHRlcnMuanMiKCkgewogICAgaW5pdF9mYXVsdCgpOwogICAgb3duNiA9IHt9Lmhhc093blByb3BlcnR5OwogICAgbWFya2VycyA9IHsKICAgICAgeWFtbDogIi0iLAogICAgICB0b21sOiAiKyIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXIob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZmxvdzMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbWF0dGVycy5sZW5ndGgpIHsKICAgIGNvbnN0IG1hdHRlcjIgPSBtYXR0ZXJzW2luZGV4Ml07CiAgICBjb25zdCBjb2RlNCA9IGZlbmNlKG1hdHRlcjIsICJvcGVuIikuY2hhckNvZGVBdCgwKTsKICAgIGNvbnN0IGNvbnN0cnVjdCA9IGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKTsKICAgIGNvbnN0IGV4aXN0aW5nID0gZmxvdzNbY29kZTRdOwogICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7CiAgICAgIGV4aXN0aW5nLnB1c2goY29uc3RydWN0KTsKICAgIH0gZWxzZSB7CiAgICAgIGZsb3czW2NvZGU0XSA9IFtjb25zdHJ1Y3RdOwogICAgfQogIH0KICByZXR1cm4gewogICAgZmxvdzogZmxvdzMKICB9Owp9CmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKSB7CiAgY29uc3QgYW55d2hlcmUgPSBtYXR0ZXIyLmFueXdoZXJlOwogIGNvbnN0IGZyb250bWF0dGVyVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgbWF0dGVyMi50eXBlCiAgKTsKICBjb25zdCBmZW5jZVR5cGUgPSAoCiAgICAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8KICAgIGZyb250bWF0dGVyVHlwZSArICJGZW5jZSIKICApOwogIGNvbnN0IHNlcXVlbmNlVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgZmVuY2VUeXBlICsgIlNlcXVlbmNlIgogICk7CiAgY29uc3QgdmFsdWVUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBmcm9udG1hdHRlclR5cGUgKyAiVmFsdWUiCiAgKTsKICBjb25zdCBjbG9zaW5nRmVuY2VDb25zdHJ1Y3QgPSB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zaW5nRmVuY2UsCiAgICBwYXJ0aWFsOiB0cnVlCiAgfTsKICBsZXQgYnVmZmVyMjsKICBsZXQgYnVmZmVySW5kZXggPSAwOwogIHJldHVybiB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVGcm9udG1hdHRlciwKICAgIGNvbmNyZXRlOiB0cnVlCiAgfTsKICBmdW5jdGlvbiB0b2tlbml6ZUZyb250bWF0dGVyKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBjb25zdCBwb3NpdGlvbjMgPSBzZWxmMi5ub3coKTsKICAgICAgaWYgKAogICAgICAgIC8vIEluZGVudCBub3QgYWxsb3dlZC4KICAgICAgICBwb3NpdGlvbjMuY29sdW1uID09PSAxICYmIC8vIE5vcm1hbGx5LCBvbmx5IGFsbG93ZWQgaW4gZmlyc3QgbGluZS4KICAgICAgICAocG9zaXRpb24zLmxpbmUgPT09IDEgfHwgYW55d2hlcmUpCiAgICAgICkgewogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAib3BlbiIpOwogICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKICAgICAgICBpZiAoY29kZTQgPT09IGJ1ZmZlcjIuY2hhckNvZGVBdChidWZmZXJJbmRleCkpIHsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZnJvbnRtYXR0ZXJUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKTsKICAgICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2UoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5TZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXggPT09IGJ1ZmZlcjIubGVuZ3RoKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHNlcXVlbmNlVHlwZSk7CiAgICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgICAgICBlZmZlY3RzLmVudGVyKCJ3aGl0ZXNwYWNlIik7CiAgICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcGVuQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4KyspKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZXhpdCgid2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gb3BlbkFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5BZnRlcihjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAiY2xvc2UiKTsKICAgICAgICBidWZmZXJJbmRleCA9IDA7CiAgICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudFN0YXJ0KGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIodmFsdWVUeXBlKTsKICAgICAgcmV0dXJuIGNvbnRlbnRJbnNpZGUoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudEluc2lkZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCh2YWx1ZVR5cGUpOwogICAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGVudEluc2lkZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnRlbnRFbmQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgfQogICAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgICAgZWZmZWN0cy5leGl0KGZyb250bWF0dGVyVHlwZSk7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogIH0KICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NpbmdGZW5jZShlZmZlY3RzLCBvazMsIG5vaykgewogICAgbGV0IGJ1ZmZlckluZGV4MiA9IDA7CiAgICByZXR1cm4gY2xvc2VTdGFydDsKICAgIGZ1bmN0aW9uIGNsb3NlU3RhcnQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgyKSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICBlZmZlY3RzLmVudGVyKHNlcXVlbmNlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2UoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VTZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXgyID09PSBidWZmZXIyLmxlbmd0aCkgewogICAgICAgIGVmZmVjdHMuZXhpdChzZXF1ZW5jZVR5cGUpOwogICAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgICAgZWZmZWN0cy5lbnRlcigid2hpdGVzcGFjZSIpOwogICAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4MisrKSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2U7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZTsKICAgICAgfQogICAgICBlZmZlY3RzLmV4aXQoIndoaXRlc3BhY2UiKTsKICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VBZnRlcihjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogIH0KfQpmdW5jdGlvbiBmZW5jZShtYXR0ZXIyLCBwcm9wKSB7CiAgcmV0dXJuIG1hdHRlcjIubWFya2VyID8gcGljayhtYXR0ZXIyLm1hcmtlciwgcHJvcCkucmVwZWF0KDMpIDogKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleeKAmXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAgIHBpY2sobWF0dGVyMi5mZW5jZSwgcHJvcCkKICApOwp9CmZ1bmN0aW9uIHBpY2soc2NoZW1hLCBwcm9wKSB7CiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICJzdHJpbmciID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdOwp9CnZhciBpbml0X3N5bnRheDYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcwp2YXIgaW5pdF9odG1sNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2Zyb250bWF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheDYoKTsKICAgIGluaXRfaHRtbDcoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24ob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZW50ZXIgPSB7fTsKICBjb25zdCBleGl0MyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGVudGVyW21hdHRlcjIudHlwZV0gPSBvcGVuZXIobWF0dGVyMik7CiAgICBleGl0M1ttYXR0ZXIyLnR5cGVdID0gY2xvc2U2OwogICAgZXhpdDNbbWF0dGVyMi50eXBlICsgIlZhbHVlIl0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIHsgZW50ZXIsIGV4aXQ6IGV4aXQzIH07Cn0KZnVuY3Rpb24gb3BlbmVyKG1hdHRlcjIpIHsKICByZXR1cm4gb3BlbjsKICBmdW5jdGlvbiBvcGVuKHRva2VuKSB7CiAgICB0aGlzLmVudGVyKHsgdHlwZTogbWF0dGVyMi50eXBlLCB2YWx1ZTogIiIgfSwgdG9rZW4pOwogICAgdGhpcy5idWZmZXIoKTsKICB9Cn0KZnVuY3Rpb24gY2xvc2U2KHRva2VuKSB7CiAgY29uc3QgZGF0YTExID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvaygidmFsdWUiIGluIG5vZGUyKTsKICB0aGlzLmV4aXQodG9rZW4pOwogIG5vZGUyLnZhbHVlID0gZGF0YTExLnJlcGxhY2UoL14oXHI/XG58XHIpfChccj9cbnxccikkL2csICIiKTsKfQpmdW5jdGlvbiB2YWx1ZSh0b2tlbikgewogIHRoaXMuY29uZmlnLmVudGVyLmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgdGhpcy5jb25maWcuZXhpdC5kYXRhLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGZyb250bWF0dGVyVG9NYXJrZG93bihvcHRpb25zKSB7CiAgY29uc3QgdW5zYWZlMiA9IFtdOwogIGNvbnN0IGhhbmRsZXJzMiA9IHt9OwogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IG1hdHRlcnMubGVuZ3RoKSB7CiAgICBjb25zdCBtYXR0ZXIyID0gbWF0dGVyc1tpbmRleDJdOwogICAgaGFuZGxlcnMyW21hdHRlcjIudHlwZV0gPSBoYW5kbGVyKG1hdHRlcjIpOwogICAgY29uc3Qgb3BlbiA9IGZlbmNlMihtYXR0ZXIyLCAib3BlbiIpOwogICAgdW5zYWZlMi5wdXNoKHsKICAgICAgYXRCcmVhazogdHJ1ZSwKICAgICAgY2hhcmFjdGVyOiBvcGVuLmNoYXJBdCgwKSwKICAgICAgYWZ0ZXI6IGVzY2FwZVN0cmluZ1JlZ2V4cChvcGVuLmNoYXJBdCgxKSkKICAgIH0pOwogIH0KICByZXR1cm4geyB1bnNhZmU6IHVuc2FmZTIsIGhhbmRsZXJzOiBoYW5kbGVyczIgfTsKfQpmdW5jdGlvbiBoYW5kbGVyKG1hdHRlcjIpIHsKICBjb25zdCBvcGVuID0gZmVuY2UyKG1hdHRlcjIsICJvcGVuIik7CiAgY29uc3QgY2xvc2U3ID0gZmVuY2UyKG1hdHRlcjIsICJjbG9zZSIpOwogIHJldHVybiBoYW5kbGUzOwogIGZ1bmN0aW9uIGhhbmRsZTMobm9kZTIpIHsKICAgIHJldHVybiBvcGVuICsgKG5vZGUyLnZhbHVlID8gIlxuIiArIG5vZGUyLnZhbHVlIDogIiIpICsgIlxuIiArIGNsb3NlNzsKICB9Cn0KZnVuY3Rpb24gZmVuY2UyKG1hdHRlcjIsIHByb3ApIHsKICByZXR1cm4gbWF0dGVyMi5tYXJrZXIgPyBwaWNrMihtYXR0ZXIyLm1hcmtlciwgcHJvcCkucmVwZWF0KDMpIDogKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleeKAmXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAgIHBpY2syKG1hdHRlcjIuZmVuY2UsIHByb3ApCiAgKTsKfQpmdW5jdGlvbiBwaWNrMihzY2hlbWEsIHByb3ApIHsKICByZXR1cm4gdHlwZW9mIHNjaGVtYSA9PT0gInN0cmluZyIgPyBzY2hlbWEgOiBzY2hlbWFbcHJvcF07Cn0KdmFyIGluaXRfbGliMjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9mcm9udG1hdHRlcigpOwogICAgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2Zyb250bWF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrRnJvbnRtYXR0ZXIob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gKAogICAgLyoqIEB0eXBlIHtQcm9jZXNzb3J9ICovCiAgICB0aGlzCiAgKTsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zNDsKICBjb25zdCBkYXRhMTEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGExMS5taWNyb21hcmtFeHRlbnNpb25zIHx8IChkYXRhMTEubWljcm9tYXJrRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCBmcm9tTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YTExLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGExMS5mcm9tTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIGNvbnN0IHRvTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YTExLnRvTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhMTEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyKHNldHRpbmdzKSk7CiAgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyRnJvbU1hcmtkb3duKHNldHRpbmdzKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChmcm9udG1hdHRlclRvTWFya2Rvd24oc2V0dGluZ3MpKTsKfQp2YXIgZW1wdHlPcHRpb25zNDsKdmFyIGluaXRfbGliMjQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIoKTsKICAgIGVtcHR5T3B0aW9uczQgPSAieWFtbCI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL3R5cGVzLmpzCnZhciBWT0lELCBQUklNSVRJVkUsIEFSUkFZLCBPQkpFQ1QsIERBVEUsIFJFR0VYUCwgTUFQLCBTRVQsIEVSUk9SLCBCSUdJTlQ7CnZhciBpbml0X3R5cGVzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMiKCkgewogICAgVk9JRCA9IC0xOwogICAgUFJJTUlUSVZFID0gMDsKICAgIEFSUkFZID0gMTsKICAgIE9CSkVDVCA9IDI7CiAgICBEQVRFID0gMzsKICAgIFJFR0VYUCA9IDQ7CiAgICBNQVAgPSA1OwogICAgU0VUID0gNjsKICAgIEVSUk9SID0gNzsKICAgIEJJR0lOVCA9IDg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2Rlc2VyaWFsaXplLmpzCnZhciBlbnYsIGRlc2VyaWFsaXplciwgZGVzZXJpYWxpemU7CnZhciBpbml0X2Rlc2VyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9kZXNlcmlhbGl6ZS5qcyIoKSB7CiAgICBpbml0X3R5cGVzMigpOwogICAgZW52ID0gdHlwZW9mIHNlbGYgPT09ICJvYmplY3QiID8gc2VsZiA6IGdsb2JhbFRoaXM7CiAgICBkZXNlcmlhbGl6ZXIgPSAoJDQsIF80KSA9PiB7CiAgICAgIGNvbnN0IGFzID0gKG91dCwgaW5kZXgyKSA9PiB7CiAgICAgICAgJDQuc2V0KGluZGV4Miwgb3V0KTsKICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCB1bnBhaXIgPSAoaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCQ0LmhhcyhpbmRleDIpKQogICAgICAgICAgcmV0dXJuICQ0LmdldChpbmRleDIpOwogICAgICAgIGNvbnN0IFt0eXBlNSwgdmFsdWUyXSA9IF80W2luZGV4Ml07CiAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgY2FzZSBQUklNSVRJVkU6CiAgICAgICAgICBjYXNlIFZPSUQ6CiAgICAgICAgICAgIHJldHVybiBhcyh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGNvbnN0IGFyciA9IGFzKFtdLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgYXJyLnB1c2godW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBPQkpFQ1Q6IHsKICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gYXMoe30sIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG9iamVjdFt1bnBhaXIoa2V5MildID0gdW5wYWlyKGluZGV4Myk7CiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgRGF0ZSh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MpLCBpbmRleDIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgbWFwNyA9IGFzKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG1hcDcuc2V0KHVucGFpcihrZXkyKSwgdW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gbWFwNzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgU0VUOiB7CiAgICAgICAgICAgIGNvbnN0IHNldDMgPSBhcygvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgc2V0My5hZGQodW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gc2V0MzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgRVJST1I6IHsKICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBtZXNzYWdlOiBtZXNzYWdlMiB9ID0gdmFsdWUyOwogICAgICAgICAgICByZXR1cm4gYXMobmV3IGVudltuYW1lXShtZXNzYWdlMiksIGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEJJR0lOVDoKICAgICAgICAgICAgcmV0dXJuIGFzKEJpZ0ludCh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSAiQmlnSW50IjoKICAgICAgICAgICAgcmV0dXJuIGFzKE9iamVjdChCaWdJbnQodmFsdWUyKSksIGluZGV4Mik7CiAgICAgICAgICBjYXNlICJBcnJheUJ1ZmZlciI6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgVWludDhBcnJheSh2YWx1ZTIpLmJ1ZmZlciwgdmFsdWUyKTsKICAgICAgICAgIGNhc2UgIkRhdGFWaWV3IjogewogICAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiB9ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUyKTsKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRhVmlldyhidWZmZXIyKSwgdmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFzKG5ldyBlbnZbdHlwZTVdKHZhbHVlMiksIGluZGV4Mik7CiAgICAgIH07CiAgICAgIHJldHVybiB1bnBhaXI7CiAgICB9OwogICAgZGVzZXJpYWxpemUgPSAoc2VyaWFsaXplZCkgPT4gZGVzZXJpYWxpemVyKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHNlcmlhbGl6ZWQpKDApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9zZXJpYWxpemUuanMKdmFyIEVNUFRZMiwgdG9TdHJpbmcyLCBrZXlzLCB0eXBlT2YsIHNob3VsZFNraXAsIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZTI7CnZhciBpbml0X3NlcmlhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vc2VyaWFsaXplLmpzIigpIHsKICAgIGluaXRfdHlwZXMyKCk7CiAgICBFTVBUWTIgPSAiIjsKICAgICh7IHRvU3RyaW5nOiB0b1N0cmluZzIgfSA9IHt9KTsKICAgICh7IGtleXMgfSA9IE9iamVjdCk7CiAgICB0eXBlT2YgPSAodmFsdWUyKSA9PiB7CiAgICAgIGNvbnN0IHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgaWYgKHR5cGU1ICE9PSAib2JqZWN0IiB8fCAhdmFsdWUyKQogICAgICAgIHJldHVybiBbUFJJTUlUSVZFLCB0eXBlNV07CiAgICAgIGNvbnN0IGFzU3RyaW5nID0gdG9TdHJpbmcyLmNhbGwodmFsdWUyKS5zbGljZSg4LCAtMSk7CiAgICAgIHN3aXRjaCAoYXNTdHJpbmcpIHsKICAgICAgICBjYXNlICJBcnJheSI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIk9iamVjdCI6CiAgICAgICAgICByZXR1cm4gW09CSkVDVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRlIjoKICAgICAgICAgIHJldHVybiBbREFURSwgRU1QVFkyXTsKICAgICAgICBjYXNlICJSZWdFeHAiOgogICAgICAgICAgcmV0dXJuIFtSRUdFWFAsIEVNUFRZMl07CiAgICAgICAgY2FzZSAiTWFwIjoKICAgICAgICAgIHJldHVybiBbTUFQLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIlNldCI6CiAgICAgICAgICByZXR1cm4gW1NFVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRhVmlldyI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBhc1N0cmluZ107CiAgICAgIH0KICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJBcnJheSIpKQogICAgICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTsKICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJFcnJvciIpKQogICAgICAgIHJldHVybiBbRVJST1IsIGFzU3RyaW5nXTsKICAgICAgcmV0dXJuIFtPQkpFQ1QsIGFzU3RyaW5nXTsKICAgIH07CiAgICBzaG91bGRTa2lwID0gKFtUWVBFLCB0eXBlNV0pID0+IFRZUEUgPT09IFBSSU1JVElWRSAmJiAodHlwZTUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZTUgPT09ICJzeW1ib2wiKTsKICAgIHNlcmlhbGl6ZXIgPSAoc3RyaWN0LCBqc29uLCAkNCwgXzQpID0+IHsKICAgICAgY29uc3QgYXMgPSAob3V0LCB2YWx1ZTIpID0+IHsKICAgICAgICBjb25zdCBpbmRleDIgPSBfNC5wdXNoKG91dCkgLSAxOwogICAgICAgICQ0LnNldCh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgfTsKICAgICAgY29uc3QgcGFpciA9ICh2YWx1ZTIpID0+IHsKICAgICAgICBpZiAoJDQuaGFzKHZhbHVlMikpCiAgICAgICAgICByZXR1cm4gJDQuZ2V0KHZhbHVlMik7CiAgICAgICAgbGV0IFtUWVBFLCB0eXBlNV0gPSB0eXBlT2YodmFsdWUyKTsKICAgICAgICBzd2l0Y2ggKFRZUEUpIHsKICAgICAgICAgIGNhc2UgUFJJTUlUSVZFOiB7CiAgICAgICAgICAgIGxldCBlbnRyeSA9IHZhbHVlMjsKICAgICAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgICAgIGNhc2UgImJpZ2ludCI6CiAgICAgICAgICAgICAgICBUWVBFID0gQklHSU5UOwogICAgICAgICAgICAgICAgZW50cnkgPSB2YWx1ZTIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICAgICAgICBjYXNlICJzeW1ib2wiOgogICAgICAgICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIHNlcmlhbGl6ZSAiICsgdHlwZTUpOwogICAgICAgICAgICAgICAgZW50cnkgPSBudWxsOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgICAgIHJldHVybiBhcyhbVk9JRF0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCBlbnRyeV0sIHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgICAgIGxldCBzcHJlYWQgPSB2YWx1ZTI7CiAgICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAiRGF0YVZpZXciKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuYnVmZmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiQXJyYXlCdWZmZXIiKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCBbLi4uc3ByZWFkXV0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgYXJyID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBhcnJdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlMikKICAgICAgICAgICAgICBhcnIucHVzaChwYWlyKGVudHJ5KSk7CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9CSkVDVDogewogICAgICAgICAgICBpZiAodHlwZTUpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICAgICAgICBjYXNlICJCaWdJbnQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudG9TdHJpbmcoKV0sIHZhbHVlMik7CiAgICAgICAgICAgICAgICBjYXNlICJCb29sZWFuIjoKICAgICAgICAgICAgICAgIGNhc2UgIk51bWJlciI6CiAgICAgICAgICAgICAgICBjYXNlICJTdHJpbmciOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudmFsdWVPZigpXSwgdmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGpzb24gJiYgInRvSlNPTiIgaW4gdmFsdWUyKQogICAgICAgICAgICAgIHJldHVybiBwYWlyKHZhbHVlMi50b0pTT04oKSk7CiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2Yga2V5cyh2YWx1ZTIpKSB7CiAgICAgICAgICAgICAgaWYgKHN0cmljdCB8fCAhc2hvdWxkU2tpcCh0eXBlT2YodmFsdWUyW2tleTJdKSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5MiksIHBhaXIodmFsdWUyW2tleTJdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgdmFsdWUyLnRvSVNPU3RyaW5nKCldLCB2YWx1ZTIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgeyBzb3VyY2UsIGZsYWdzIH1dLCB2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdOwogICAgICAgICAgICBjb25zdCBpbmRleDIgPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGVudHJ5XSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICEoc2hvdWxkU2tpcCh0eXBlT2Yoa2V5MikpIHx8IHNob3VsZFNraXAodHlwZU9mKGVudHJ5KSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtwYWlyKGtleTIpLCBwYWlyKGVudHJ5KV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIFNFVDogewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBlbnRyaWVzXSwgdmFsdWUyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZihlbnRyeSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKHBhaXIoZW50cnkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCB7IG1lc3NhZ2U6IG1lc3NhZ2UyIH0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB7IG5hbWU6IHR5cGU1LCBtZXNzYWdlOiBtZXNzYWdlMiB9XSwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHBhaXI7CiAgICB9OwogICAgc2VyaWFsaXplMiA9ICh2YWx1ZTIsIHsganNvbiwgbG9zc3kgfSA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IF80ID0gW107CiAgICAgIHJldHVybiBzZXJpYWxpemVyKCEoanNvbiB8fCBsb3NzeSksICEhanNvbiwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgXzQpKHZhbHVlMiksIF80OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vaW5kZXguanMKdmFyIGVzbV9kZWZhdWx0Owp2YXIgaW5pdF9lc20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVzZXJpYWxpemUoKTsKICAgIGluaXRfc2VyaWFsaXplKCk7CiAgICBlc21fZGVmYXVsdCA9IHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmUgPT09ICJmdW5jdGlvbiIgPyAoCiAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqLwogICAgICAoYW55LCBvcHRpb25zKSA9PiBvcHRpb25zICYmICgianNvbiIgaW4gb3B0aW9ucyB8fCAibG9zc3kiIGluIG9wdGlvbnMpID8gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKSA6IHN0cnVjdHVyZWRDbG9uZShhbnkpCiAgICApIDogKGFueSwgb3B0aW9ucykgPT4gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtcG9zaXRpb25ANS4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHBvaW50Myh0eXBlNSkgewogIHJldHVybiBwb2ludDQ7CiAgZnVuY3Rpb24gcG9pbnQ0KG5vZGUyKSB7CiAgICBjb25zdCBwb2ludDUgPSBub2RlMiAmJiBub2RlMi5wb3NpdGlvbiAmJiBub2RlMi5wb3NpdGlvblt0eXBlNV0gfHwge307CiAgICBpZiAodHlwZW9mIHBvaW50NS5saW5lID09PSAibnVtYmVyIiAmJiBwb2ludDUubGluZSA+IDAgJiYgdHlwZW9mIHBvaW50NS5jb2x1bW4gPT09ICJudW1iZXIiICYmIHBvaW50NS5jb2x1bW4gPiAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbGluZTogcG9pbnQ1LmxpbmUsCiAgICAgICAgY29sdW1uOiBwb2ludDUuY29sdW1uLAogICAgICAgIG9mZnNldDogdHlwZW9mIHBvaW50NS5vZmZzZXQgPT09ICJudW1iZXIiICYmIHBvaW50NS5vZmZzZXQgPiAtMSA/IHBvaW50NS5vZmZzZXQgOiB2b2lkIDAKICAgICAgfTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gcG9zaXRpb24yKG5vZGUyKSB7CiAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyKTsKICBjb25zdCBlbmQzID0gcG9pbnRFbmQobm9kZTIpOwogIGlmIChzdGFydCAmJiBlbmQzKSB7CiAgICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07CiAgfQp9CnZhciBwb2ludEVuZCwgcG9pbnRTdGFydDsKdmFyIGluaXRfbGliMjUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2xpYi9pbmRleC5qcyIoKSB7CiAgICBwb2ludEVuZCA9IHBvaW50MygiZW5kIik7CiAgICBwb2ludFN0YXJ0ID0gcG9pbnQzKCJzdGFydCIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzCnZhciBhcmlhLCBkZWZhdWx0U2NoZW1hOwp2YXIgaW5pdF9zY2hlbWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzIigpIHsKICAgIGFyaWEgPSBbImFyaWFEZXNjcmliZWRCeSIsICJhcmlhTGFiZWwiLCAiYXJpYUxhYmVsbGVkQnkiXTsKICAgIGRlZmF1bHRTY2hlbWEgPSB7CiAgICAgIGFuY2VzdG9yczogewogICAgICAgIHRib2R5OiBbInRhYmxlIl0sCiAgICAgICAgdGQ6IFsidGFibGUiXSwKICAgICAgICB0aDogWyJ0YWJsZSJdLAogICAgICAgIHRoZWFkOiBbInRhYmxlIl0sCiAgICAgICAgdGZvb3Q6IFsidGFibGUiXSwKICAgICAgICB0cjogWyJ0YWJsZSJdCiAgICAgIH0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhOiBbCiAgICAgICAgICAuLi5hcmlhLAogICAgICAgICAgLy8gTm90ZTogdGhlc2UgMyBhcmUgdXNlZCBieSBHRk0gZm9vdG5vdGVzLCB0aGV5IGRvIHdvcmsgb24gYWxsIGxpbmtzLgogICAgICAgICAgImRhdGFGb290bm90ZUJhY2tyZWYiLAogICAgICAgICAgImRhdGFGb290bm90ZVJlZiIsCiAgICAgICAgICBbImNsYXNzTmFtZSIsICJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwKICAgICAgICAgICJocmVmIgogICAgICAgIF0sCiAgICAgICAgYmxvY2txdW90ZTogWyJjaXRlIl0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nCiAgICAgICAgLy8gYGNvZGVgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgY29kZTogW1siY2xhc3NOYW1lIiwgL15sYW5ndWFnZS0uL11dLAogICAgICAgIGRlbDogWyJjaXRlIl0sCiAgICAgICAgZGl2OiBbIml0ZW1TY29wZSIsICJpdGVtVHlwZSJdLAogICAgICAgIGRsOiBbLi4uYXJpYV0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBpcyB1c2VkIGJ5IEdGTSBmb290bm90ZXMuCiAgICAgICAgaDI6IFtbImNsYXNzTmFtZSIsICJzci1vbmx5Il1dLAogICAgICAgIGltZzogWy4uLmFyaWEsICJsb25nRGVzYyIsICJzcmMiXSwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgIGlucHV0OiBbCiAgICAgICAgICBbImRpc2FibGVkIiwgdHJ1ZV0sCiAgICAgICAgICBbInR5cGUiLCAiY2hlY2tib3giXQogICAgICAgIF0sCiAgICAgICAgaW5zOiBbImNpdGUiXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgbGlgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgbGk6IFtbImNsYXNzTmFtZSIsICJ0YXNrLWxpc3QtaXRlbSJdXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgb2w6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgcTogWyJjaXRlIl0sCiAgICAgICAgc2VjdGlvbjogWyJkYXRhRm9vdG5vdGVzIiwgWyJjbGFzc05hbWUiLCAiZm9vdG5vdGVzIl1dLAogICAgICAgIHNvdXJjZTogWyJzcmNTZXQiXSwKICAgICAgICBzdW1tYXJ5OiBbLi4uYXJpYV0sCiAgICAgICAgdGFibGU6IFsuLi5hcmlhXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgdWw6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgIioiOiBbCiAgICAgICAgICAiYWJiciIsCiAgICAgICAgICAiYWNjZXB0IiwKICAgICAgICAgICJhY2NlcHRDaGFyc2V0IiwKICAgICAgICAgICJhY2Nlc3NLZXkiLAogICAgICAgICAgImFjdGlvbiIsCiAgICAgICAgICAiYWxpZ24iLAogICAgICAgICAgImFsdCIsCiAgICAgICAgICAiYXhpcyIsCiAgICAgICAgICAiYm9yZGVyIiwKICAgICAgICAgICJjZWxsUGFkZGluZyIsCiAgICAgICAgICAiY2VsbFNwYWNpbmciLAogICAgICAgICAgImNoYXIiLAogICAgICAgICAgImNoYXJPZmYiLAogICAgICAgICAgImNoYXJTZXQiLAogICAgICAgICAgImNoZWNrZWQiLAogICAgICAgICAgImNsZWFyIiwKICAgICAgICAgICJjb2xTcGFuIiwKICAgICAgICAgICJjb2xvciIsCiAgICAgICAgICAiY29scyIsCiAgICAgICAgICAiY29tcGFjdCIsCiAgICAgICAgICAiY29vcmRzIiwKICAgICAgICAgICJkYXRlVGltZSIsCiAgICAgICAgICAiZGlyIiwKICAgICAgICAgIC8vIE5vdGU6IGBkaXNhYmxlZGAgaXMgdGVjaG5pY2FsbHkgYWxsb3dlZCBvbiBhbGwgZWxlbWVudHMgYnkgR0guCiAgICAgICAgICAvLyBCdXQgaXQgaXMgdXNlbGVzcyBvbiBldmVyeXRoaW5nIGV4Y2VwdCBgaW5wdXRgLgogICAgICAgICAgLy8gQmVjYXVzZSBgaW5wdXRgcyBhcmUgbm9ybWFsbHkgbm90IGFsbG93ZWQsIGJ1dCB3ZSBhbGxvdyB0aGVtIGZvcgogICAgICAgICAgLy8gY2hlY2tib3hlcyBkdWUgdG8gdGFza2xpc3RzLCB3ZSBhbGxvdyBgZGlzYWJsZWRgIG9ubHkgdGhlcmUuCiAgICAgICAgICAiZW5jVHlwZSIsCiAgICAgICAgICAiZnJhbWUiLAogICAgICAgICAgImhTcGFjZSIsCiAgICAgICAgICAiaGVhZGVycyIsCiAgICAgICAgICAiaGVpZ2h0IiwKICAgICAgICAgICJocmVmTGFuZyIsCiAgICAgICAgICAiaHRtbEZvciIsCiAgICAgICAgICAiaWQiLAogICAgICAgICAgImlzTWFwIiwKICAgICAgICAgICJpdGVtUHJvcCIsCiAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgImxhbmciLAogICAgICAgICAgIm1heExlbmd0aCIsCiAgICAgICAgICAibWVkaWEiLAogICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAibXVsdGlwbGUiLAogICAgICAgICAgIm5hbWUiLAogICAgICAgICAgIm5vSHJlZiIsCiAgICAgICAgICAibm9TaGFkZSIsCiAgICAgICAgICAibm9XcmFwIiwKICAgICAgICAgICJvcGVuIiwKICAgICAgICAgICJwcm9tcHQiLAogICAgICAgICAgInJlYWRPbmx5IiwKICAgICAgICAgICJyZXYiLAogICAgICAgICAgInJvd1NwYW4iLAogICAgICAgICAgInJvd3MiLAogICAgICAgICAgInJ1bGVzIiwKICAgICAgICAgICJzY29wZSIsCiAgICAgICAgICAic2VsZWN0ZWQiLAogICAgICAgICAgInNoYXBlIiwKICAgICAgICAgICJzaXplIiwKICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICJzdGFydCIsCiAgICAgICAgICAic3VtbWFyeSIsCiAgICAgICAgICAidGFiSW5kZXgiLAogICAgICAgICAgInRpdGxlIiwKICAgICAgICAgICJ1c2VNYXAiLAogICAgICAgICAgInZBbGlnbiIsCiAgICAgICAgICAidmFsdWUiLAogICAgICAgICAgIndpZHRoIgogICAgICAgIF0KICAgICAgfSwKICAgICAgY2xvYmJlcjogWyJhcmlhRGVzY3JpYmVkQnkiLCAiYXJpYUxhYmVsbGVkQnkiLCAiaWQiLCAibmFtZSJdLAogICAgICBjbG9iYmVyUHJlZml4OiAidXNlci1jb250ZW50LSIsCiAgICAgIHByb3RvY29sczogewogICAgICAgIGNpdGU6IFsiaHR0cCIsICJodHRwcyJdLAogICAgICAgIGhyZWY6IFsiaHR0cCIsICJodHRwcyIsICJpcmMiLCAiaXJjcyIsICJtYWlsdG8iLCAieG1wcCJdLAogICAgICAgIGxvbmdEZXNjOiBbImh0dHAiLCAiaHR0cHMiXSwKICAgICAgICBzcmM6IFsiaHR0cCIsICJodHRwcyJdCiAgICAgIH0sCiAgICAgIHJlcXVpcmVkOiB7CiAgICAgICAgaW5wdXQ6IHsgZGlzYWJsZWQ6IHRydWUsIHR5cGU6ICJjaGVja2JveCIgfQogICAgICB9LAogICAgICBzdHJpcDogWyJzY3JpcHQiXSwKICAgICAgdGFnTmFtZXM6IFsKICAgICAgICAiYSIsCiAgICAgICAgImIiLAogICAgICAgICJibG9ja3F1b3RlIiwKICAgICAgICAiYnIiLAogICAgICAgICJjb2RlIiwKICAgICAgICAiZGQiLAogICAgICAgICJkZWwiLAogICAgICAgICJkZXRhaWxzIiwKICAgICAgICAiZGl2IiwKICAgICAgICAiZGwiLAogICAgICAgICJkdCIsCiAgICAgICAgImVtIiwKICAgICAgICAiaDEiLAogICAgICAgICJoMiIsCiAgICAgICAgImgzIiwKICAgICAgICAiaDQiLAogICAgICAgICJoNSIsCiAgICAgICAgImg2IiwKICAgICAgICAiaHIiLAogICAgICAgICJpIiwKICAgICAgICAiaW1nIiwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgICJpbnB1dCIsCiAgICAgICAgImlucyIsCiAgICAgICAgImtiZCIsCiAgICAgICAgImxpIiwKICAgICAgICAib2wiLAogICAgICAgICJwIiwKICAgICAgICAicGljdHVyZSIsCiAgICAgICAgInByZSIsCiAgICAgICAgInEiLAogICAgICAgICJycCIsCiAgICAgICAgInJ0IiwKICAgICAgICAicnVieSIsCiAgICAgICAgInMiLAogICAgICAgICJzYW1wIiwKICAgICAgICAic2VjdGlvbiIsCiAgICAgICAgInNvdXJjZSIsCiAgICAgICAgInNwYW4iLAogICAgICAgICJzdHJpa2UiLAogICAgICAgICJzdHJvbmciLAogICAgICAgICJzdWIiLAogICAgICAgICJzdW1tYXJ5IiwKICAgICAgICAic3VwIiwKICAgICAgICAidGFibGUiLAogICAgICAgICJ0Ym9keSIsCiAgICAgICAgInRkIiwKICAgICAgICAidGZvb3QiLAogICAgICAgICJ0aCIsCiAgICAgICAgInRoZWFkIiwKICAgICAgICAidHIiLAogICAgICAgICJ0dCIsCiAgICAgICAgInVsIiwKICAgICAgICAidmFyIgogICAgICBdCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHNhbml0aXplKG5vZGUyLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdCA9IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogW10gfTsKICBjb25zdCBzdGF0ZSA9IHsKICAgIHNjaGVtYTogb3B0aW9ucyA/IHsgLi4uZGVmYXVsdFNjaGVtYSwgLi4ub3B0aW9ucyB9IDogZGVmYXVsdFNjaGVtYSwKICAgIHN0YWNrOiBbXQogIH07CiAgY29uc3QgcmVwbGFjZTUgPSB0cmFuc2Zvcm0oc3RhdGUsIG5vZGUyKTsKICBpZiAocmVwbGFjZTUpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2U1KSkgewogICAgICBpZiAocmVwbGFjZTUubGVuZ3RoID09PSAxKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZTVbMF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gcmVwbGFjZTU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IHJlcGxhY2U1OwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybShzdGF0ZSwgbm9kZTIpIHsKICBpZiAobm9kZTIgJiYgdHlwZW9mIG5vZGUyID09PSAib2JqZWN0IikgewogICAgY29uc3QgdW5zYWZlMiA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj59ICovCiAgICAgIG5vZGUyCiAgICApOwogICAgY29uc3QgdHlwZTUgPSB0eXBlb2YgdW5zYWZlMi50eXBlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudHlwZSA6ICIiOwogICAgc3dpdGNoICh0eXBlNSkgewogICAgICBjYXNlICJjb21tZW50IjogewogICAgICAgIHJldHVybiBjb21tZW50KHN0YXRlLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJkb2N0eXBlIjogewogICAgICAgIHJldHVybiBkb2N0eXBlKHN0YXRlLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJlbGVtZW50IjogewogICAgICAgIHJldHVybiBlbGVtZW50MihzdGF0ZSwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAicm9vdCI6IHsKICAgICAgICByZXR1cm4gcm9vdDIoc3RhdGUsIHVuc2FmZTIpOwogICAgICB9CiAgICAgIGNhc2UgInRleHQiOiB7CiAgICAgICAgcmV0dXJuIHRleHQ1KHN0YXRlLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBkZWZhdWx0OgogICAgfQogIH0KfQpmdW5jdGlvbiBjb21tZW50KHN0YXRlLCB1bnNhZmUyKSB7CiAgaWYgKHN0YXRlLnNjaGVtYS5hbGxvd0NvbW1lbnRzKSB7CiAgICBjb25zdCByZXN1bHQgPSB0eXBlb2YgdW5zYWZlMi52YWx1ZSA9PT0gInN0cmluZyIgPyB1bnNhZmUyLnZhbHVlIDogIiI7CiAgICBjb25zdCBpbmRleDIgPSByZXN1bHQuaW5kZXhPZigiLS0+Iik7CiAgICBjb25zdCB2YWx1ZTIgPSBpbmRleDIgPCAwID8gcmVzdWx0IDogcmVzdWx0LnNsaWNlKDAsIGluZGV4Mik7CiAgICBjb25zdCBub2RlMiA9IHsgdHlwZTogImNvbW1lbnQiLCB2YWx1ZTogdmFsdWUyIH07CiAgICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgICByZXR1cm4gbm9kZTI7CiAgfQp9CmZ1bmN0aW9uIGRvY3R5cGUoc3RhdGUsIHVuc2FmZTIpIHsKICBpZiAoc3RhdGUuc2NoZW1hLmFsbG93RG9jdHlwZXMpIHsKICAgIGNvbnN0IG5vZGUyID0geyB0eXBlOiAiZG9jdHlwZSIgfTsKICAgIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICAgIHJldHVybiBub2RlMjsKICB9Cn0KZnVuY3Rpb24gZWxlbWVudDIoc3RhdGUsIHVuc2FmZTIpIHsKICBjb25zdCBuYW1lID0gdHlwZW9mIHVuc2FmZTIudGFnTmFtZSA9PT0gInN0cmluZyIgPyB1bnNhZmUyLnRhZ05hbWUgOiAiIjsKICBzdGF0ZS5zdGFjay5wdXNoKG5hbWUpOwogIGNvbnN0IGNvbnRlbnQzID0gKAogICAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Q29udGVudD59ICovCiAgICBjaGlsZHJlbihzdGF0ZSwgdW5zYWZlMi5jaGlsZHJlbikKICApOwogIGNvbnN0IHByb3BlcnRpZXNfID0gcHJvcGVydGllcyhzdGF0ZSwgdW5zYWZlMi5wcm9wZXJ0aWVzKTsKICBzdGF0ZS5zdGFjay5wb3AoKTsKICBsZXQgc2FmZUVsZW1lbnQgPSBmYWxzZTsKICBpZiAobmFtZSAmJiBuYW1lICE9PSAiKiIgJiYgKCFzdGF0ZS5zY2hlbWEudGFnTmFtZXMgfHwgc3RhdGUuc2NoZW1hLnRhZ05hbWVzLmluY2x1ZGVzKG5hbWUpKSkgewogICAgc2FmZUVsZW1lbnQgPSB0cnVlOwogICAgaWYgKHN0YXRlLnNjaGVtYS5hbmNlc3RvcnMgJiYgb3duNy5jYWxsKHN0YXRlLnNjaGVtYS5hbmNlc3RvcnMsIG5hbWUpKSB7CiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IHN0YXRlLnNjaGVtYS5hbmNlc3RvcnNbbmFtZV07CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgc2FmZUVsZW1lbnQgPSBmYWxzZTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgYW5jZXN0b3JzLmxlbmd0aCkgewogICAgICAgIGlmIChzdGF0ZS5zdGFjay5pbmNsdWRlcyhhbmNlc3RvcnNbaW5kZXgyXSkpIHsKICAgICAgICAgIHNhZmVFbGVtZW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKCFzYWZlRWxlbWVudCkgewogICAgcmV0dXJuIHN0YXRlLnNjaGVtYS5zdHJpcCAmJiAhc3RhdGUuc2NoZW1hLnN0cmlwLmluY2x1ZGVzKG5hbWUpID8gY29udGVudDMgOiB2b2lkIDA7CiAgfQogIGNvbnN0IG5vZGUyID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogbmFtZSwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNfLAogICAgY2hpbGRyZW46IGNvbnRlbnQzCiAgfTsKICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIHJvb3QyKHN0YXRlLCB1bnNhZmUyKSB7CiAgY29uc3QgY29udGVudDMgPSAoCiAgICAvKiogQHR5cGUge0FycmF5PFJvb3RDb250ZW50Pn0gKi8KICAgIGNoaWxkcmVuKHN0YXRlLCB1bnNhZmUyLmNoaWxkcmVuKQogICk7CiAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IGNvbnRlbnQzIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiB0ZXh0NShfNCwgdW5zYWZlMikgewogIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB1bnNhZmUyLnZhbHVlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudmFsdWUgOiAiIjsKICBjb25zdCBub2RlMiA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiBjaGlsZHJlbihzdGF0ZSwgY2hpbGRyZW4yKSB7CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuMikpIHsKICAgIGNvbnN0IGNoaWxkcmVuVW5rbm93biA9ICgKICAgICAgLyoqIEB0eXBlIHtBcnJheTxSZWFkb25seTx1bmtub3duPj59ICovCiAgICAgIGNoaWxkcmVuMgogICAgKTsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuVW5rbm93bi5sZW5ndGgpIHsKICAgICAgY29uc3QgdmFsdWUyID0gdHJhbnNmb3JtKHN0YXRlLCBjaGlsZHJlblVua25vd25baW5kZXgyXSk7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2goLi4udmFsdWUyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHRzOwp9CmZ1bmN0aW9uIHByb3BlcnRpZXMoc3RhdGUsIHByb3BlcnRpZXMyKSB7CiAgY29uc3QgdGFnTmFtZSA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aCAtIDFdOwogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzdGF0ZS5zY2hlbWEuYXR0cmlidXRlczsKICBjb25zdCByZXF1aXJlZCA9IHN0YXRlLnNjaGVtYS5yZXF1aXJlZDsKICBjb25zdCBzcGVjaWZpYyA9IGF0dHJpYnV0ZXMgJiYgb3duNy5jYWxsKGF0dHJpYnV0ZXMsIHRhZ05hbWUpID8gYXR0cmlidXRlc1t0YWdOYW1lXSA6IHZvaWQgMDsKICBjb25zdCBkZWZhdWx0cyA9IGF0dHJpYnV0ZXMgJiYgb3duNy5jYWxsKGF0dHJpYnV0ZXMsICIqIikgPyBhdHRyaWJ1dGVzWyIqIl0gOiB2b2lkIDA7CiAgY29uc3QgcHJvcGVydGllc18gPSAoCiAgICAvKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pj59ICovCiAgICBwcm9wZXJ0aWVzMiAmJiB0eXBlb2YgcHJvcGVydGllczIgPT09ICJvYmplY3QiID8gcHJvcGVydGllczIgOiB7fQogICk7CiAgY29uc3QgcmVzdWx0ID0ge307CiAgbGV0IGtleTI7CiAgZm9yIChrZXkyIGluIHByb3BlcnRpZXNfKSB7CiAgICBpZiAob3duNy5jYWxsKHByb3BlcnRpZXNfLCBrZXkyKSkgewogICAgICBjb25zdCB1bnNhZmUyID0gcHJvcGVydGllc19ba2V5Ml07CiAgICAgIGxldCBzYWZlMiA9IHByb3BlcnR5VmFsdWUoCiAgICAgICAgc3RhdGUsCiAgICAgICAgZmluZERlZmluaXRpb24oc3BlY2lmaWMsIGtleTIpLAogICAgICAgIGtleTIsCiAgICAgICAgdW5zYWZlMgogICAgICApOwogICAgICBpZiAoc2FmZTIgPT09IG51bGwgfHwgc2FmZTIgPT09IHZvaWQgMCkgewogICAgICAgIHNhZmUyID0gcHJvcGVydHlWYWx1ZShzdGF0ZSwgZmluZERlZmluaXRpb24oZGVmYXVsdHMsIGtleTIpLCBrZXkyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBpZiAoc2FmZTIgIT09IG51bGwgJiYgc2FmZTIgIT09IHZvaWQgMCkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHNhZmUyOwogICAgICB9CiAgICB9CiAgfQogIGlmIChyZXF1aXJlZCAmJiBvd243LmNhbGwocmVxdWlyZWQsIHRhZ05hbWUpKSB7CiAgICBjb25zdCBwcm9wZXJ0aWVzMyA9IHJlcXVpcmVkW3RhZ05hbWVdOwogICAgZm9yIChrZXkyIGluIHByb3BlcnRpZXMzKSB7CiAgICAgIGlmIChvd243LmNhbGwocHJvcGVydGllczMsIGtleTIpICYmICFvd243LmNhbGwocmVzdWx0LCBrZXkyKSkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHByb3BlcnRpZXMzW2tleTJdOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZShzdGF0ZSwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlMikgewogIHJldHVybiBkZWZpbml0aW9uMyA/IEFycmF5LmlzQXJyYXkodmFsdWUyKSA/IHByb3BlcnR5VmFsdWVNYW55KHN0YXRlLCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSA6IHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIHByb3BlcnR5VmFsdWVNYW55KHN0YXRlLCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWVzKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGNvbnN0IHJlc3VsdCA9IFtdOwogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgIGNvbnN0IHZhbHVlMiA9IHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZXNbaW5kZXgyXSk7CiAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgcmVzdWx0LnB1c2godmFsdWUyKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlLCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAibnVtYmVyIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIikgewogICAgcmV0dXJuOwogIH0KICBpZiAoIXNhZmVQcm90b2NvbChzdGF0ZSwga2V5MiwgdmFsdWUyKSkgewogICAgcmV0dXJuOwogIH0KICBpZiAodHlwZW9mIGRlZmluaXRpb24zID09PSAib2JqZWN0IiAmJiBkZWZpbml0aW9uMy5sZW5ndGggPiAxKSB7CiAgICBsZXQgb2szID0gZmFsc2U7CiAgICBsZXQgaW5kZXgyID0gMDsKICAgIHdoaWxlICgrK2luZGV4MiA8IGRlZmluaXRpb24zLmxlbmd0aCkgewogICAgICBjb25zdCBhbGxvd2VkID0gZGVmaW5pdGlvbjNbaW5kZXgyXTsKICAgICAgaWYgKGFsbG93ZWQgJiYgdHlwZW9mIGFsbG93ZWQgPT09ICJvYmplY3QiICYmICJmbGFncyIgaW4gYWxsb3dlZCkgewogICAgICAgIGlmIChhbGxvd2VkLnRlc3QoU3RyaW5nKHZhbHVlMikpKSB7CiAgICAgICAgICBvazMgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFsbG93ZWQgPT09IHZhbHVlMikgewogICAgICAgIG9rMyA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghb2szKSByZXR1cm47CiAgfQogIHJldHVybiBzdGF0ZS5zY2hlbWEuY2xvYmJlciAmJiBzdGF0ZS5zY2hlbWEuY2xvYmJlclByZWZpeCAmJiBzdGF0ZS5zY2hlbWEuY2xvYmJlci5pbmNsdWRlcyhrZXkyKSA/IHN0YXRlLnNjaGVtYS5jbG9iYmVyUHJlZml4ICsgdmFsdWUyIDogdmFsdWUyOwp9CmZ1bmN0aW9uIHNhZmVQcm90b2NvbChzdGF0ZSwga2V5MiwgdmFsdWUyKSB7CiAgY29uc3QgcHJvdG9jb2xzID0gc3RhdGUuc2NoZW1hLnByb3RvY29scyAmJiBvd243LmNhbGwoc3RhdGUuc2NoZW1hLnByb3RvY29scywga2V5MikgPyBzdGF0ZS5zY2hlbWEucHJvdG9jb2xzW2tleTJdIDogdm9pZCAwOwogIGlmICghcHJvdG9jb2xzIHx8IHByb3RvY29scy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBjb25zdCB1cmwgPSBTdHJpbmcodmFsdWUyKTsKICBjb25zdCBjb2xvbiA9IHVybC5pbmRleE9mKCI6Iik7CiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdXJsLmluZGV4T2YoIj8iKTsKICBjb25zdCBudW1iZXJTaWduID0gdXJsLmluZGV4T2YoIiMiKTsKICBjb25zdCBzbGFzaCA9IHVybC5pbmRleE9mKCIvIik7CiAgaWYgKGNvbG9uIDwgMCB8fCAvLyBJZiB0aGUgZmlyc3QgY29sb24gaXMgYWZ0ZXIgYSBgP2AsIGAjYCwgb3IgYC9gLCBpdOKAmXMgbm90IGEgcHJvdG9jb2wuCiAgc2xhc2ggPiAtMSAmJiBjb2xvbiA+IHNsYXNoIHx8IHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrIHx8IG51bWJlclNpZ24gPiAtMSAmJiBjb2xvbiA+IG51bWJlclNpZ24pIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJvdG9jb2xzLmxlbmd0aCkgewogICAgY29uc3QgcHJvdG9jb2wgPSBwcm90b2NvbHNbaW5kZXgyXTsKICAgIGlmIChjb2xvbiA9PT0gcHJvdG9jb2wubGVuZ3RoICYmIHVybC5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpID09PSBwcm90b2NvbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHBhdGNoKG5vZGUyLCB1bnNhZmUyKSB7CiAgY29uc3QgY2xlYW5Qb3NpdGlvbiA9IHBvc2l0aW9uMigKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGxvb2tzIGxpa2UgYSBub2RlLgogICAgdW5zYWZlMgogICk7CiAgaWYgKHVuc2FmZTIuZGF0YSkgewogICAgbm9kZTIuZGF0YSA9IGVzbV9kZWZhdWx0KHVuc2FmZTIuZGF0YSk7CiAgfQogIGlmIChjbGVhblBvc2l0aW9uKSBub2RlMi5wb3NpdGlvbiA9IGNsZWFuUG9zaXRpb247Cn0KZnVuY3Rpb24gZmluZERlZmluaXRpb24oZGVmaW5pdGlvbnMsIGtleTIpIHsKICBsZXQgZGF0YURlZmF1bHQ7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmIChkZWZpbml0aW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZGVmaW5pdGlvbnMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gZGVmaW5pdGlvbnNbaW5kZXgyXTsKICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBlbnRyeSA9PT0gInN0cmluZyIgPyBlbnRyeSA6IGVudHJ5WzBdOwogICAgICBpZiAobmFtZSA9PT0ga2V5MikgewogICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgfQogICAgICBpZiAobmFtZSA9PT0gImRhdGEqIikgZGF0YURlZmF1bHQgPSBlbnRyeTsKICAgIH0KICB9CiAgaWYgKGtleTIubGVuZ3RoID4gNCAmJiBrZXkyLnNsaWNlKDAsIDQpLnRvTG93ZXJDYXNlKCkgPT09ICJkYXRhIikgewogICAgcmV0dXJuIGRhdGFEZWZhdWx0OwogIH0KfQp2YXIgb3duNzsKdmFyIGluaXRfbGliMjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lc20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9wb3NpdGlvbigpOwogICAgaW5pdF9zY2hlbWEoKTsKICAgIG93bjcgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF9zYW5pdGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjYoKTsKICAgIGluaXRfc2NoZW1hKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Jsb2NrcXVvdGUuanMKZnVuY3Rpb24gYmxvY2txdW90ZTIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImJsb2NrcXVvdGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUud3JhcChzdGF0ZS5hbGwobm9kZTIpLCB0cnVlKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhazIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJiciIsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW10gfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gW3N0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KSwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH1dOwp9CnZhciBpbml0X2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzCmZ1bmN0aW9uIGNvZGUzKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHZhbHVlMiA9IG5vZGUyLnZhbHVlID8gbm9kZTIudmFsdWUgKyAiXG4iIDogIiI7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBsYW5ndWFnZSA9IG5vZGUyLmxhbmcgPyBub2RlMi5sYW5nLnNwbGl0KC9ccysvKSA6IFtdOwogIGlmIChsYW5ndWFnZS5sZW5ndGggPiAwKSB7CiAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImxhbmd1YWdlLSIgKyBsYW5ndWFnZVswXV07CiAgfQogIGxldCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiY29kZSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfV0KICB9OwogIGlmIChub2RlMi5tZXRhKSB7CiAgICByZXN1bHQuZGF0YSA9IHsgbWV0YTogbm9kZTIubWV0YSB9OwogIH0KICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXN1bHQgPSBzdGF0ZS5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7CiAgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwcmUiLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW46IFtyZXN1bHRdIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9jb2RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2RlbGV0ZS5qcwpmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJkZWwiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9kZWxldGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2RlbGV0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2VtcGhhc2lzLmpzCmZ1bmN0aW9uIGVtcGhhc2lzMihzdGF0ZSwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZW0iLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9lbXBoYXNpczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2VtcGhhc2lzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGZvb3Rub3RlUmVmZXJlbmNlMihzdGF0ZSwgbm9kZTIpIHsKICBjb25zdCBjbG9iYmVyUHJlZml4ID0gdHlwZW9mIHN0YXRlLm9wdGlvbnMuY2xvYmJlclByZWZpeCA9PT0gInN0cmluZyIgPyBzdGF0ZS5vcHRpb25zLmNsb2JiZXJQcmVmaXggOiAidXNlci1jb250ZW50LSI7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBzYWZlSWQgPSBub3JtYWxpemVVcmkoaWQudG9Mb3dlckNhc2UoKSk7CiAgY29uc3QgaW5kZXgyID0gc3RhdGUuZm9vdG5vdGVPcmRlci5pbmRleE9mKGlkKTsKICBsZXQgY291bnRlcjI7CiAgbGV0IHJldXNlQ291bnRlciA9IHN0YXRlLmZvb3Rub3RlQ291bnRzLmdldChpZCk7CiAgaWYgKHJldXNlQ291bnRlciA9PT0gdm9pZCAwKSB7CiAgICByZXVzZUNvdW50ZXIgPSAwOwogICAgc3RhdGUuZm9vdG5vdGVPcmRlci5wdXNoKGlkKTsKICAgIGNvdW50ZXIyID0gc3RhdGUuZm9vdG5vdGVPcmRlci5sZW5ndGg7CiAgfSBlbHNlIHsKICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICB9CiAgcmV1c2VDb3VudGVyICs9IDE7CiAgc3RhdGUuZm9vdG5vdGVDb3VudHMuc2V0KGlkLCByZXVzZUNvdW50ZXIpOwogIGNvbnN0IGxpbmszID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImEiLAogICAgcHJvcGVydGllczogewogICAgICBocmVmOiAiIyIgKyBjbG9iYmVyUHJlZml4ICsgImZuLSIgKyBzYWZlSWQsCiAgICAgIGlkOiBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmV1c2VDb3VudGVyID4gMSA/ICItIiArIHJldXNlQ291bnRlciA6ICIiKSwKICAgICAgZGF0YUZvb3Rub3RlUmVmOiB0cnVlLAogICAgICBhcmlhRGVzY3JpYmVkQnk6IFsiZm9vdG5vdGUtbGFiZWwiXQogICAgfSwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBTdHJpbmcoY291bnRlcjIpIH1dCiAgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgbGluazMpOwogIGNvbnN0IHN1cCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJzdXAiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW2xpbmszXQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHN1cCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgc3VwKTsKfQp2YXIgaW5pdF9mb290bm90ZV9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9oZWFkaW5nLmpzCmZ1bmN0aW9uIGhlYWRpbmcyKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJoIiArIG5vZGUyLmRlcHRoLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9oZWFkaW5nMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2h0bWwuanMKZnVuY3Rpb24gaHRtbDIoc3RhdGUsIG5vZGUyKSB7CiAgaWYgKHN0YXRlLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJyYXciLCB2YWx1ZTogbm9kZTIudmFsdWUgfTsKICAgIHN0YXRlLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogICAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaW5pdF9odG1sOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaHRtbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcwpmdW5jdGlvbiByZXZlcnQoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3Qgc3VidHlwZSA9IG5vZGUyLnJlZmVyZW5jZVR5cGU7CiAgbGV0IHN1ZmZpeCA9ICJdIjsKICBpZiAoc3VidHlwZSA9PT0gImNvbGxhcHNlZCIpIHsKICAgIHN1ZmZpeCArPSAiW10iOwogIH0gZWxzZSBpZiAoc3VidHlwZSA9PT0gImZ1bGwiKSB7CiAgICBzdWZmaXggKz0gIlsiICsgKG5vZGUyLmxhYmVsIHx8IG5vZGUyLmlkZW50aWZpZXIpICsgIl0iOwogIH0KICBpZiAobm9kZTIudHlwZSA9PT0gImltYWdlUmVmZXJlbmNlIikgewogICAgcmV0dXJuIFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIhWyIgKyBub2RlMi5hbHQgKyBzdWZmaXggfV07CiAgfQogIGNvbnN0IGNvbnRlbnRzID0gc3RhdGUuYWxsKG5vZGUyKTsKICBjb25zdCBoZWFkMiA9IGNvbnRlbnRzWzBdOwogIGlmIChoZWFkMiAmJiBoZWFkMi50eXBlID09PSAidGV4dCIpIHsKICAgIGhlYWQyLnZhbHVlID0gIlsiICsgaGVhZDIudmFsdWU7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnVuc2hpZnQoeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiWyIgfSk7CiAgfQogIGNvbnN0IHRhaWwgPSBjb250ZW50c1tjb250ZW50cy5sZW5ndGggLSAxXTsKICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgdGFpbC52YWx1ZSArPSBzdWZmaXg7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBzdWZmaXggfSk7CiAgfQogIHJldHVybiBjb250ZW50czsKfQp2YXIgaW5pdF9yZXZlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZTIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlLmRlZmluaXRpb25CeUlkLmdldChpZCk7CiAgaWYgKCFkZWZpbml0aW9uMykgewogICAgcmV0dXJuIHJldmVydChzdGF0ZSwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkoZGVmaW5pdGlvbjMudXJsIHx8ICIiKSwgYWx0OiBub2RlMi5hbHQgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJpbWciLCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwgY2hpbGRyZW46IFtdIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbWFnZV9yZWZlcmVuY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS1yZWZlcmVuY2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICAgIGluaXRfcmV2ZXJ0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLmpzCmZ1bmN0aW9uIGltYWdlMihzdGF0ZSwgbm9kZTIpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi5hbHQgIT09IG51bGwgJiYgbm9kZTIuYWx0ICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLmFsdCA9IG5vZGUyLmFsdDsKICB9CiAgaWYgKG5vZGUyLnRpdGxlICE9PSBudWxsICYmIG5vZGUyLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gbm9kZTIudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAiaW1nIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaW1hZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmxpbmUtY29kZS5qcwpmdW5jdGlvbiBpbmxpbmVDb2RlMihzdGF0ZSwgbm9kZTIpIHsKICBjb25zdCB0ZXh0OSA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKSB9OwogIHN0YXRlLnBhdGNoKG5vZGUyLCB0ZXh0OSk7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImNvZGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW3RleHQ5XQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2lubGluZS1jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay1yZWZlcmVuY2UuanMKZnVuY3Rpb24gbGlua1JlZmVyZW5jZTIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlLmRlZmluaXRpb25CeUlkLmdldChpZCk7CiAgaWYgKCFkZWZpbml0aW9uMykgewogICAgcmV0dXJuIHJldmVydChzdGF0ZSwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgaHJlZjogbm9ybWFsaXplVXJpKGRlZmluaXRpb24zLnVybCB8fCAiIikgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImEiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmstcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBpbml0X3JldmVydCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzCmZ1bmN0aW9uIGxpbmsyKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0geyBocmVmOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi50aXRsZSAhPT0gbnVsbCAmJiBub2RlMi50aXRsZSAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi50aXRsZSA9IG5vZGUyLnRpdGxlOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBzdGF0ZS5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2xpbmsyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcwpmdW5jdGlvbiBsaXN0SXRlbTIoc3RhdGUsIG5vZGUyLCBwYXJlbnQpIHsKICBjb25zdCByZXN1bHRzID0gc3RhdGUuYWxsKG5vZGUyKTsKICBjb25zdCBsb29zZSA9IHBhcmVudCA/IGxpc3RMb29zZShwYXJlbnQpIDogbGlzdEl0ZW1Mb29zZShub2RlMik7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBjaGlsZHJlbjIgPSBbXTsKICBpZiAodHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIikgewogICAgY29uc3QgaGVhZDIgPSByZXN1bHRzWzBdOwogICAgbGV0IHBhcmFncmFwaDM7CiAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIGhlYWQyLnRhZ05hbWUgPT09ICJwIikgewogICAgICBwYXJhZ3JhcGgzID0gaGVhZDI7CiAgICB9IGVsc2UgewogICAgICBwYXJhZ3JhcGgzID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXSB9OwogICAgICByZXN1bHRzLnVuc2hpZnQocGFyYWdyYXBoMyk7CiAgICB9CiAgICBpZiAocGFyYWdyYXBoMy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgIH0KICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogImlucHV0IiwKICAgICAgcHJvcGVydGllczogeyB0eXBlOiAiY2hlY2tib3giLCBjaGVja2VkOiBub2RlMi5jaGVja2VkLCBkaXNhYmxlZDogdHJ1ZSB9LAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogICAgcHJvcGVydGllczIuY2xhc3NOYW1lID0gWyJ0YXNrLWxpc3QtaXRlbSJdOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcmVzdWx0cy5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gcmVzdWx0c1tpbmRleDJdOwogICAgaWYgKGxvb3NlIHx8IGluZGV4MiAhPT0gMCB8fCBjaGlsZC50eXBlICE9PSAiZWxlbWVudCIgfHwgY2hpbGQudGFnTmFtZSAhPT0gInAiKSB7CiAgICAgIGNoaWxkcmVuMi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICAgIH0KICAgIGlmIChjaGlsZC50eXBlID09PSAiZWxlbWVudCIgJiYgY2hpbGQudGFnTmFtZSA9PT0gInAiICYmICFsb29zZSkgewogICAgICBjaGlsZHJlbjIucHVzaCguLi5jaGlsZC5jaGlsZHJlbik7CiAgICB9IGVsc2UgewogICAgICBjaGlsZHJlbjIucHVzaChjaGlsZCk7CiAgICB9CiAgfQogIGNvbnN0IHRhaWwgPSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV07CiAgaWYgKHRhaWwgJiYgKGxvb3NlIHx8IHRhaWwudHlwZSAhPT0gImVsZW1lbnQiIHx8IHRhaWwudGFnTmFtZSAhPT0gInAiKSkgewogICAgY2hpbGRyZW4yLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImxpIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBjaGlsZHJlbjIgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CmZ1bmN0aW9uIGxpc3RMb29zZShub2RlMikgewogIGxldCBsb29zZSA9IGZhbHNlOwogIGlmIChub2RlMi50eXBlID09PSAibGlzdCIpIHsKICAgIGxvb3NlID0gbm9kZTIuc3ByZWFkIHx8IGZhbHNlOwogICAgY29uc3QgY2hpbGRyZW4yID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoIWxvb3NlICYmICsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgICBsb29zZSA9IGxpc3RJdGVtTG9vc2UoY2hpbGRyZW4yW2luZGV4Ml0pOwogICAgfQogIH0KICByZXR1cm4gbG9vc2U7Cn0KZnVuY3Rpb24gbGlzdEl0ZW1Mb29zZShub2RlMikgewogIGNvbnN0IHNwcmVhZCA9IG5vZGUyLnNwcmVhZDsKICByZXR1cm4gc3ByZWFkID09PSBudWxsIHx8IHNwcmVhZCA9PT0gdm9pZCAwID8gbm9kZTIuY2hpbGRyZW4ubGVuZ3RoID4gMSA6IHNwcmVhZDsKfQp2YXIgaW5pdF9saXN0X2l0ZW0yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LWl0ZW0uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LmpzCmZ1bmN0aW9uIGxpc3Q0KHN0YXRlLCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlLmFsbChub2RlMik7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmICh0eXBlb2Ygbm9kZTIuc3RhcnQgPT09ICJudW1iZXIiICYmIG5vZGUyLnN0YXJ0ICE9PSAxKSB7CiAgICBwcm9wZXJ0aWVzMi5zdGFydCA9IG5vZGUyLnN0YXJ0OwogIH0KICB3aGlsZSAoKytpbmRleDIgPCByZXN1bHRzLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSByZXN1bHRzW2luZGV4Ml07CiAgICBpZiAoY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiICYmIGNoaWxkLnRhZ05hbWUgPT09ICJsaSIgJiYgY2hpbGQucHJvcGVydGllcyAmJiBBcnJheS5pc0FycmF5KGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lKSAmJiBjaGlsZC5wcm9wZXJ0aWVzLmNsYXNzTmFtZS5pbmNsdWRlcygidGFzay1saXN0LWl0ZW0iKSkgewogICAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImNvbnRhaW5zLXRhc2stbGlzdCJdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogbm9kZTIub3JkZXJlZCA/ICJvbCIgOiAidWwiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUud3JhcChyZXN1bHRzLCB0cnVlKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saXN0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcwpmdW5jdGlvbiBwYXJhZ3JhcGgyKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJwIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlLmFsbChub2RlMikKICB9OwogIHN0YXRlLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZS5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfcGFyYWdyYXBoMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcGFyYWdyYXBoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcm9vdC5qcwpmdW5jdGlvbiByb290MyhzdGF0ZSwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IHN0YXRlLndyYXAoc3RhdGUuYWxsKG5vZGUyKSkgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3Jvb3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzCmZ1bmN0aW9uIHN0cm9uZzIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInN0cm9uZyIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZS5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3N0cm9uZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3N0cm9uZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLmpzCmZ1bmN0aW9uIHRhYmxlKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJvd3MgPSBzdGF0ZS5hbGwobm9kZTIpOwogIGNvbnN0IGZpcnN0Um93ID0gcm93cy5zaGlmdCgpOwogIGNvbnN0IHRhYmxlQ29udGVudCA9IFtdOwogIGlmIChmaXJzdFJvdykgewogICAgY29uc3QgaGVhZDIgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRoZWFkIiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZS53cmFwKFtmaXJzdFJvd10sIHRydWUpCiAgICB9OwogICAgc3RhdGUucGF0Y2gobm9kZTIuY2hpbGRyZW5bMF0sIGhlYWQyKTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGhlYWQyKTsKICB9CiAgaWYgKHJvd3MubGVuZ3RoID4gMCkgewogICAgY29uc3QgYm9keTMgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRib2R5IiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZS53cmFwKHJvd3MsIHRydWUpCiAgICB9OwogICAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyLmNoaWxkcmVuWzFdKTsKICAgIGNvbnN0IGVuZDMgPSBwb2ludEVuZChub2RlMi5jaGlsZHJlbltub2RlMi5jaGlsZHJlbi5sZW5ndGggLSAxXSk7CiAgICBpZiAoc3RhcnQgJiYgZW5kMykgYm9keTMucG9zaXRpb24gPSB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGJvZHkzKTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInRhYmxlIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlLndyYXAodGFibGVDb250ZW50LCB0cnVlKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLXJvdy5qcwpmdW5jdGlvbiB0YWJsZVJvdyhzdGF0ZSwgbm9kZTIsIHBhcmVudCkgewogIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IHZvaWQgMDsKICBjb25zdCByb3dJbmRleCA9IHNpYmxpbmdzMiA/IHNpYmxpbmdzMi5pbmRleE9mKG5vZGUyKSA6IDE7CiAgY29uc3QgdGFnTmFtZSA9IHJvd0luZGV4ID09PSAwID8gInRoIiA6ICJ0ZCI7CiAgY29uc3QgYWxpZ24gPSBwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJ0YWJsZSIgPyBwYXJlbnQuYWxpZ24gOiB2b2lkIDA7CiAgY29uc3QgbGVuZ3RoID0gYWxpZ24gPyBhbGlnbi5sZW5ndGggOiBub2RlMi5jaGlsZHJlbi5sZW5ndGg7CiAgbGV0IGNlbGxJbmRleCA9IC0xOwogIGNvbnN0IGNlbGxzMiA9IFtdOwogIHdoaWxlICgrK2NlbGxJbmRleCA8IGxlbmd0aCkgewogICAgY29uc3QgY2VsbDIgPSBub2RlMi5jaGlsZHJlbltjZWxsSW5kZXhdOwogICAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICAgIGNvbnN0IGFsaWduVmFsdWUgPSBhbGlnbiA/IGFsaWduW2NlbGxJbmRleF0gOiB2b2lkIDA7CiAgICBpZiAoYWxpZ25WYWx1ZSkgewogICAgICBwcm9wZXJ0aWVzMi5hbGlnbiA9IGFsaWduVmFsdWU7CiAgICB9CiAgICBsZXQgcmVzdWx0MiA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lLCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwgY2hpbGRyZW46IFtdIH07CiAgICBpZiAoY2VsbDIpIHsKICAgICAgcmVzdWx0Mi5jaGlsZHJlbiA9IHN0YXRlLmFsbChjZWxsMik7CiAgICAgIHN0YXRlLnBhdGNoKGNlbGwyLCByZXN1bHQyKTsKICAgICAgcmVzdWx0MiA9IHN0YXRlLmFwcGx5RGF0YShjZWxsMiwgcmVzdWx0Mik7CiAgICB9CiAgICBjZWxsczIucHVzaChyZXN1bHQyKTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInRyIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlLndyYXAoY2VsbHMyLCB0cnVlKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZV9yb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLXJvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLWNlbGwuanMKZnVuY3Rpb24gdGFibGVDZWxsKHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJ0ZCIsCiAgICAvLyBBc3N1bWUgYm9keSBjZWxsLgogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZV9jZWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1jZWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RyaW0tbGluZXNAMy4wLjEvbm9kZV9tb2R1bGVzL3RyaW0tbGluZXMvaW5kZXguanMKZnVuY3Rpb24gdHJpbUxpbmVzKHZhbHVlMikgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGNvbnN0IHNlYXJjaDIgPSAvXHI/XG58XHIvZzsKICBsZXQgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgbGV0IGxhc3QzID0gMDsKICBjb25zdCBsaW5lcyA9IFtdOwogIHdoaWxlIChtYXRjaDIpIHsKICAgIGxpbmVzLnB1c2goCiAgICAgIHRyaW1MaW5lKHNvdXJjZS5zbGljZShsYXN0MywgbWF0Y2gyLmluZGV4KSwgbGFzdDMgPiAwLCB0cnVlKSwKICAgICAgbWF0Y2gyWzBdCiAgICApOwogICAgbGFzdDMgPSBtYXRjaDIuaW5kZXggKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgfQogIGxpbmVzLnB1c2godHJpbUxpbmUoc291cmNlLnNsaWNlKGxhc3QzKSwgbGFzdDMgPiAwLCBmYWxzZSkpOwogIHJldHVybiBsaW5lcy5qb2luKCIiKTsKfQpmdW5jdGlvbiB0cmltTGluZSh2YWx1ZTIsIHN0YXJ0LCBlbmQzKSB7CiAgbGV0IHN0YXJ0SW5kZXggPSAwOwogIGxldCBlbmRJbmRleCA9IHZhbHVlMi5sZW5ndGg7CiAgaWYgKHN0YXJ0KSB7CiAgICBsZXQgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoc3RhcnRJbmRleCk7CiAgICB3aGlsZSAoY29kZTQgPT09IHRhYiB8fCBjb2RlNCA9PT0gc3BhY2UpIHsKICAgICAgc3RhcnRJbmRleCsrOwogICAgICBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChzdGFydEluZGV4KTsKICAgIH0KICB9CiAgaWYgKGVuZDMpIHsKICAgIGxldCBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpOwogICAgd2hpbGUgKGNvZGU0ID09PSB0YWIgfHwgY29kZTQgPT09IHNwYWNlKSB7CiAgICAgIGVuZEluZGV4LS07CiAgICAgIGNvZGU0ID0gdmFsdWUyLmNvZGVQb2ludEF0KGVuZEluZGV4IC0gMSk7CiAgICB9CiAgfQogIHJldHVybiBlbmRJbmRleCA+IHN0YXJ0SW5kZXggPyB2YWx1ZTIuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogIiI7Cn0KdmFyIHRhYiwgc3BhY2U7CnZhciBpbml0X3RyaW1fbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cmltLWxpbmVzQDMuMC4xL25vZGVfbW9kdWxlcy90cmltLWxpbmVzL2luZGV4LmpzIigpIHsKICAgIHRhYiA9IDk7CiAgICBzcGFjZSA9IDMyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90ZXh0LmpzCmZ1bmN0aW9uIHRleHQ2KHN0YXRlLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdHJpbUxpbmVzKFN0cmluZyhub2RlMi52YWx1ZSkpIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90ZXh0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcyIoKSB7CiAgICBpbml0X3RyaW1fbGluZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdGhlbWF0aWNCcmVhazMoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImhyIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IFtdCiAgfTsKICBzdGF0ZS5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcwpmdW5jdGlvbiBpZ25vcmUoKSB7CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaGFuZGxlcnM7CnZhciBpbml0X2hhbmRsZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jsb2NrcXVvdGUyKCk7CiAgICBpbml0X2JyZWFrMigpOwogICAgaW5pdF9jb2RlMigpOwogICAgaW5pdF9kZWxldGUoKTsKICAgIGluaXRfZW1waGFzaXMyKCk7CiAgICBpbml0X2Zvb3Rub3RlX3JlZmVyZW5jZSgpOwogICAgaW5pdF9oZWFkaW5nMigpOwogICAgaW5pdF9odG1sOCgpOwogICAgaW5pdF9pbWFnZV9yZWZlcmVuY2UyKCk7CiAgICBpbml0X2ltYWdlMigpOwogICAgaW5pdF9pbmxpbmVfY29kZTIoKTsKICAgIGluaXRfbGlua19yZWZlcmVuY2UyKCk7CiAgICBpbml0X2xpbmsyKCk7CiAgICBpbml0X2xpc3RfaXRlbTIoKTsKICAgIGluaXRfbGlzdDMoKTsKICAgIGluaXRfcGFyYWdyYXBoMigpOwogICAgaW5pdF9yb290MigpOwogICAgaW5pdF9zdHJvbmcyKCk7CiAgICBpbml0X3RhYmxlKCk7CiAgICBpbml0X3RhYmxlX3JvdygpOwogICAgaW5pdF90YWJsZV9jZWxsKCk7CiAgICBpbml0X3RleHQzKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMygpOwogICAgaGFuZGxlcnMgPSB7CiAgICAgIGJsb2NrcXVvdGU6IGJsb2NrcXVvdGUyLAogICAgICBicmVhazogaGFyZEJyZWFrMiwKICAgICAgY29kZTogY29kZTMsCiAgICAgIGRlbGV0ZTogc3RyaWtldGhyb3VnaCwKICAgICAgZW1waGFzaXM6IGVtcGhhc2lzMiwKICAgICAgZm9vdG5vdGVSZWZlcmVuY2U6IGZvb3Rub3RlUmVmZXJlbmNlMiwKICAgICAgaGVhZGluZzogaGVhZGluZzIsCiAgICAgIGh0bWw6IGh0bWwyLAogICAgICBpbWFnZVJlZmVyZW5jZTogaW1hZ2VSZWZlcmVuY2UyLAogICAgICBpbWFnZTogaW1hZ2UyLAogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlMiwKICAgICAgbGlua1JlZmVyZW5jZTogbGlua1JlZmVyZW5jZTIsCiAgICAgIGxpbms6IGxpbmsyLAogICAgICBsaXN0SXRlbTogbGlzdEl0ZW0yLAogICAgICBsaXN0OiBsaXN0NCwKICAgICAgcGFyYWdyYXBoOiBwYXJhZ3JhcGgyLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiByb290IGlzIGRpZmZlcmVudCwgYnV0IGhhcmQgdG8gdHlwZS4KICAgICAgcm9vdDogcm9vdDMsCiAgICAgIHN0cm9uZzogc3Ryb25nMiwKICAgICAgdGFibGUsCiAgICAgIHRhYmxlQ2VsbCwKICAgICAgdGFibGVSb3csCiAgICAgIHRleHQ6IHRleHQ2LAogICAgICB0aGVtYXRpY0JyZWFrOiB0aGVtYXRpY0JyZWFrMywKICAgICAgdG9tbDogaWdub3JlLAogICAgICB5YW1sOiBpZ25vcmUsCiAgICAgIGRlZmluaXRpb246IGlnbm9yZSwKICAgICAgZm9vdG5vdGVEZWZpbml0aW9uOiBpZ25vcmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcwpmdW5jdGlvbiBkZWZhdWx0Rm9vdG5vdGVCYWNrQ29udGVudChfNCwgcmVyZWZlcmVuY2VJbmRleCkgewogIGNvbnN0IHJlc3VsdCA9IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcdTIxQTkiIH1dOwogIGlmIChyZXJlZmVyZW5jZUluZGV4ID4gMSkgewogICAgcmVzdWx0LnB1c2goewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJzdXAiLAogICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IFN0cmluZyhyZXJlZmVyZW5jZUluZGV4KSB9XQogICAgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGZvb3RlcihzdGF0ZSkgewogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSB0eXBlb2Ygc3RhdGUub3B0aW9ucy5jbG9iYmVyUHJlZml4ID09PSAic3RyaW5nIiA/IHN0YXRlLm9wdGlvbnMuY2xvYmJlclByZWZpeCA6ICJ1c2VyLWNvbnRlbnQtIjsKICBjb25zdCBmb290bm90ZUJhY2tDb250ZW50ID0gc3RhdGUub3B0aW9ucy5mb290bm90ZUJhY2tDb250ZW50IHx8IGRlZmF1bHRGb290bm90ZUJhY2tDb250ZW50OwogIGNvbnN0IGZvb3Rub3RlQmFja0xhYmVsID0gc3RhdGUub3B0aW9ucy5mb290bm90ZUJhY2tMYWJlbCB8fCBkZWZhdWx0Rm9vdG5vdGVCYWNrTGFiZWw7CiAgY29uc3QgZm9vdG5vdGVMYWJlbCA9IHN0YXRlLm9wdGlvbnMuZm9vdG5vdGVMYWJlbCB8fCAiRm9vdG5vdGVzIjsKICBjb25zdCBmb290bm90ZUxhYmVsVGFnTmFtZSA9IHN0YXRlLm9wdGlvbnMuZm9vdG5vdGVMYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBmb290bm90ZUxhYmVsUHJvcGVydGllcyA9IHN0YXRlLm9wdGlvbnMuZm9vdG5vdGVMYWJlbFByb3BlcnRpZXMgfHwgewogICAgY2xhc3NOYW1lOiBbInNyLW9ubHkiXQogIH07CiAgY29uc3QgbGlzdEl0ZW1zID0gW107CiAgbGV0IHJlZmVyZW5jZUluZGV4ID0gLTE7CiAgd2hpbGUgKCsrcmVmZXJlbmNlSW5kZXggPCBzdGF0ZS5mb290bm90ZU9yZGVyLmxlbmd0aCkgewogICAgY29uc3QgZGVmaW5pdGlvbjMgPSBzdGF0ZS5mb290bm90ZUJ5SWQuZ2V0KAogICAgICBzdGF0ZS5mb290bm90ZU9yZGVyW3JlZmVyZW5jZUluZGV4XQogICAgKTsKICAgIGlmICghZGVmaW5pdGlvbjMpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBjb250ZW50MyA9IHN0YXRlLmFsbChkZWZpbml0aW9uMyk7CiAgICBjb25zdCBpZCA9IFN0cmluZyhkZWZpbml0aW9uMy5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogICAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgbGV0IHJlcmVmZXJlbmNlSW5kZXggPSAwOwogICAgY29uc3QgYmFja1JlZmVyZW5jZXMgPSBbXTsKICAgIGNvbnN0IGNvdW50cyA9IHN0YXRlLmZvb3Rub3RlQ291bnRzLmdldChpZCk7CiAgICB3aGlsZSAoY291bnRzICE9PSB2b2lkIDAgJiYgKytyZXJlZmVyZW5jZUluZGV4IDw9IGNvdW50cykgewogICAgICBpZiAoYmFja1JlZmVyZW5jZXMubGVuZ3RoID4gMCkgewogICAgICAgIGJhY2tSZWZlcmVuY2VzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgbGV0IGNoaWxkcmVuMiA9IHR5cGVvZiBmb290bm90ZUJhY2tDb250ZW50ID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0NvbnRlbnQgOiBmb290bm90ZUJhY2tDb250ZW50KHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KTsKICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY2hpbGRyZW4yID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiBjaGlsZHJlbjIgfTsKICAgICAgfQogICAgICBiYWNrUmVmZXJlbmNlcy5wdXNoKHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogImEiLAogICAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAgIGhyZWY6ICIjIiArIGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICItIiArIHJlcmVmZXJlbmNlSW5kZXggOiAiIiksCiAgICAgICAgICBkYXRhRm9vdG5vdGVCYWNrcmVmOiAiIiwKICAgICAgICAgIGFyaWFMYWJlbDogdHlwZW9mIGZvb3Rub3RlQmFja0xhYmVsID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0xhYmVsIDogZm9vdG5vdGVCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpLAogICAgICAgICAgY2xhc3NOYW1lOiBbImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdCiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjaGlsZHJlbjIpID8gY2hpbGRyZW4yIDogW2NoaWxkcmVuMl0KICAgICAgfSk7CiAgICB9CiAgICBjb25zdCB0YWlsID0gY29udGVudDNbY29udGVudDMubGVuZ3RoIC0gMV07CiAgICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJlbGVtZW50IiAmJiB0YWlsLnRhZ05hbWUgPT09ICJwIikgewogICAgICBjb25zdCB0YWlsVGFpbCA9IHRhaWwuY2hpbGRyZW5bdGFpbC5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgaWYgKHRhaWxUYWlsICYmIHRhaWxUYWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgIHRhaWxUYWlsLnZhbHVlICs9ICIgIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YWlsLmNoaWxkcmVuLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgdGFpbC5jaGlsZHJlbi5wdXNoKC4uLmJhY2tSZWZlcmVuY2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRlbnQzLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpOwogICAgfQogICAgY29uc3QgbGlzdEl0ZW0zID0gewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJsaSIsCiAgICAgIHByb3BlcnRpZXM6IHsgaWQ6IGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCB9LAogICAgICBjaGlsZHJlbjogc3RhdGUud3JhcChjb250ZW50MywgdHJ1ZSkKICAgIH07CiAgICBzdGF0ZS5wYXRjaChkZWZpbml0aW9uMywgbGlzdEl0ZW0zKTsKICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtMyk7CiAgfQogIGlmIChsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHJldHVybiB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic2VjdGlvbiIsCiAgICBwcm9wZXJ0aWVzOiB7IGRhdGFGb290bm90ZXM6IHRydWUsIGNsYXNzTmFtZTogWyJmb290bm90ZXMiXSB9LAogICAgY2hpbGRyZW46IFsKICAgICAgewogICAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgICB0YWdOYW1lOiBmb290bm90ZUxhYmVsVGFnTmFtZSwKICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAuLi5lc21fZGVmYXVsdChmb290bm90ZUxhYmVsUHJvcGVydGllcyksCiAgICAgICAgICBpZDogImZvb3Rub3RlLWxhYmVsIgogICAgICAgIH0sCiAgICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGZvb3Rub3RlTGFiZWwgfV0KICAgICAgfSwKICAgICAgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0sCiAgICAgIHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogIm9sIiwKICAgICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgICBjaGlsZHJlbjogc3RhdGUud3JhcChsaXN0SXRlbXMsIHRydWUpCiAgICAgIH0sCiAgICAgIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9CiAgICBdCiAgfTsKfQp2YXIgaW5pdF9mb290ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvc3RhdGUuanMKZnVuY3Rpb24gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM1OwogIGNvbnN0IGRlZmluaXRpb25CeUlkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBmb290bm90ZUJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGZvb3Rub3RlQ291bnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBoYW5kbGVyczIgPSB7IC4uLmhhbmRsZXJzLCAuLi5zZXR0aW5ncy5oYW5kbGVycyB9OwogIGNvbnN0IHN0YXRlID0gewogICAgYWxsOiBhbGwzLAogICAgYXBwbHlEYXRhLAogICAgZGVmaW5pdGlvbkJ5SWQsCiAgICBmb290bm90ZUJ5SWQsCiAgICBmb290bm90ZUNvdW50cywKICAgIGZvb3Rub3RlT3JkZXI6IFtdLAogICAgaGFuZGxlcnM6IGhhbmRsZXJzMiwKICAgIG9uZTogb25lMywKICAgIG9wdGlvbnM6IHNldHRpbmdzLAogICAgcGF0Y2g6IHBhdGNoMiwKICAgIHdyYXA6IHdyYXAzCiAgfTsKICB2aXNpdCh0cmVlLCBmdW5jdGlvbihub2RlMikgewogICAgaWYgKG5vZGUyLnR5cGUgPT09ICJkZWZpbml0aW9uIiB8fCBub2RlMi50eXBlID09PSAiZm9vdG5vdGVEZWZpbml0aW9uIikgewogICAgICBjb25zdCBtYXA3ID0gbm9kZTIudHlwZSA9PT0gImRlZmluaXRpb24iID8gZGVmaW5pdGlvbkJ5SWQgOiBmb290bm90ZUJ5SWQ7CiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKG5vZGUyLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCk7CiAgICAgIGlmICghbWFwNy5oYXMoaWQpKSB7CiAgICAgICAgbWFwNy5zZXQoaWQsIG5vZGUyKTsKICAgICAgfQogICAgfQogIH0pOwogIHJldHVybiBzdGF0ZTsKICBmdW5jdGlvbiBvbmUzKG5vZGUyLCBwYXJlbnQpIHsKICAgIGNvbnN0IHR5cGU1ID0gbm9kZTIudHlwZTsKICAgIGNvbnN0IGhhbmRsZTMgPSBzdGF0ZS5oYW5kbGVyc1t0eXBlNV07CiAgICBpZiAob3duOC5jYWxsKHN0YXRlLmhhbmRsZXJzLCB0eXBlNSkgJiYgaGFuZGxlMykgewogICAgICByZXR1cm4gaGFuZGxlMyhzdGF0ZSwgbm9kZTIsIHBhcmVudCk7CiAgICB9CiAgICBpZiAoc3RhdGUub3B0aW9ucy5wYXNzVGhyb3VnaCAmJiBzdGF0ZS5vcHRpb25zLnBhc3NUaHJvdWdoLmluY2x1ZGVzKHR5cGU1KSkgewogICAgICBpZiAoImNoaWxkcmVuIiBpbiBub2RlMikgewogICAgICAgIGNvbnN0IHsgY2hpbGRyZW46IGNoaWxkcmVuMiwgLi4uc2hhbGxvdyB9ID0gbm9kZTI7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXNtX2RlZmF1bHQoc2hhbGxvdyk7CiAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gc3RhdGUuYWxsKG5vZGUyKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBlc21fZGVmYXVsdChub2RlMik7CiAgICB9CiAgICBjb25zdCB1bmtub3duMyA9IHN0YXRlLm9wdGlvbnMudW5rbm93bkhhbmRsZXIgfHwgZGVmYXVsdFVua25vd25IYW5kbGVyOwogICAgcmV0dXJuIHVua25vd24zKHN0YXRlLCBub2RlMiwgcGFyZW50KTsKICB9CiAgZnVuY3Rpb24gYWxsMyhwYXJlbnQpIHsKICAgIGNvbnN0IHZhbHVlcyA9IFtdOwogICAgaWYgKCJjaGlsZHJlbiIgaW4gcGFyZW50KSB7CiAgICAgIGNvbnN0IG5vZGVzID0gcGFyZW50LmNoaWxkcmVuOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IG5vZGVzLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0YXRlLm9uZShub2Rlc1tpbmRleDJdLCBwYXJlbnQpOwogICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgIGlmIChpbmRleDIgJiYgbm9kZXNbaW5kZXgyIC0gMV0udHlwZSA9PT0gImJyZWFrIikgewogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdHJpbU1hcmtkb3duU3BhY2VTdGFydChyZXN1bHQudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIpIHsKICAgICAgICAgICAgICBjb25zdCBoZWFkMiA9IHJlc3VsdC5jaGlsZHJlblswXTsKICAgICAgICAgICAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICBoZWFkMi52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQoaGVhZDIudmFsdWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgICB2YWx1ZXMucHVzaCguLi5yZXN1bHQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQp9CmZ1bmN0aW9uIHBhdGNoMihmcm9tMiwgdG8pIHsKICBpZiAoZnJvbTIucG9zaXRpb24pIHRvLnBvc2l0aW9uID0gcG9zaXRpb24yKGZyb20yKTsKfQpmdW5jdGlvbiBhcHBseURhdGEoZnJvbTIsIHRvKSB7CiAgbGV0IHJlc3VsdCA9IHRvOwogIGlmIChmcm9tMiAmJiBmcm9tMi5kYXRhKSB7CiAgICBjb25zdCBoTmFtZSA9IGZyb20yLmRhdGEuaE5hbWU7CiAgICBjb25zdCBoQ2hpbGRyZW4gPSBmcm9tMi5kYXRhLmhDaGlsZHJlbjsKICAgIGNvbnN0IGhQcm9wZXJ0aWVzID0gZnJvbTIuZGF0YS5oUHJvcGVydGllczsKICAgIGlmICh0eXBlb2YgaE5hbWUgPT09ICJzdHJpbmciKSB7CiAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gImVsZW1lbnQiKSB7CiAgICAgICAgcmVzdWx0LnRhZ05hbWUgPSBoTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBjaGlsZHJlbjIgPSAiY2hpbGRyZW4iIGluIHJlc3VsdCA/IHJlc3VsdC5jaGlsZHJlbiA6IFtyZXN1bHRdOwogICAgICAgIHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiBoTmFtZSwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBjaGlsZHJlbjIgfTsKICAgICAgfQogICAgfQogICAgaWYgKHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIgJiYgaFByb3BlcnRpZXMpIHsKICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQucHJvcGVydGllcywgZXNtX2RlZmF1bHQoaFByb3BlcnRpZXMpKTsKICAgIH0KICAgIGlmICgiY2hpbGRyZW4iIGluIHJlc3VsdCAmJiByZXN1bHQuY2hpbGRyZW4gJiYgaENoaWxkcmVuICE9PSBudWxsICYmIGhDaGlsZHJlbiAhPT0gdm9pZCAwKSB7CiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGhDaGlsZHJlbjsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBkZWZhdWx0VW5rbm93bkhhbmRsZXIoc3RhdGUsIG5vZGUyKSB7CiAgY29uc3QgZGF0YTExID0gbm9kZTIuZGF0YSB8fCB7fTsKICBjb25zdCByZXN1bHQgPSAidmFsdWUiIGluIG5vZGUyICYmICEob3duOC5jYWxsKGRhdGExMSwgImhQcm9wZXJ0aWVzIikgfHwgb3duOC5jYWxsKGRhdGExMSwgImhDaGlsZHJlbiIpKSA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUgfSA6IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJkaXYiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQpmdW5jdGlvbiB3cmFwMyhub2RlcywgbG9vc2UpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKGxvb3NlKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IG5vZGVzLmxlbmd0aCkgewogICAgaWYgKGluZGV4MikgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogICAgcmVzdWx0LnB1c2gobm9kZXNbaW5kZXgyXSk7CiAgfQogIGlmIChsb29zZSAmJiBub2Rlcy5sZW5ndGggPiAwKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdHJpbU1hcmtkb3duU3BhY2VTdGFydCh2YWx1ZTIpIHsKICBsZXQgaW5kZXgyID0gMDsKICBsZXQgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIHdoaWxlIChjb2RlNCA9PT0gOSB8fCBjb2RlNCA9PT0gMzIpIHsKICAgIGluZGV4MisrOwogICAgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIH0KICByZXR1cm4gdmFsdWUyLnNsaWNlKGluZGV4Mik7Cn0KdmFyIG93bjgsIGVtcHR5T3B0aW9uczU7CnZhciBpbml0X3N0YXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0KCk7CiAgICBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24oKTsKICAgIGluaXRfaGFuZGxlcnMoKTsKICAgIG93bjggPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGVtcHR5T3B0aW9uczUgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9IYXN0KHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBzdGF0ZSA9IGNyZWF0ZVN0YXRlKHRyZWUsIG9wdGlvbnMpOwogIGNvbnN0IG5vZGUyID0gc3RhdGUub25lKHRyZWUsIHZvaWQgMCk7CiAgY29uc3QgZm9vdCA9IGZvb3RlcihzdGF0ZSk7CiAgY29uc3QgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShub2RlMikgPyB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IG5vZGUyIH0gOiBub2RlMiB8fCB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IFtdIH07CiAgaWYgKGZvb3QpIHsKICAgIG9rKCJjaGlsZHJlbiIgaW4gcmVzdWx0KTsKICAgIHJlc3VsdC5jaGlsZHJlbi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9LCBmb290KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9saWIyNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X2Zvb3RlcigpOwogICAgaW5pdF9zdGF0ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9faGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2hhbmRsZXJzKCk7CiAgICBpbml0X2xpYjI3KCk7CiAgICBpbml0X2Zvb3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaHRtbC12b2lkLWVsZW1lbnRzQDMuMC4wL25vZGVfbW9kdWxlcy9odG1sLXZvaWQtZWxlbWVudHMvaW5kZXguanMKdmFyIGh0bWxWb2lkRWxlbWVudHM7CnZhciBpbml0X2h0bWxfdm9pZF9lbGVtZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2h0bWwtdm9pZC1lbGVtZW50c0AzLjAuMC9ub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzIigpIHsKICAgIGh0bWxWb2lkRWxlbWVudHMgPSBbCiAgICAgICJhcmVhIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmdzb3VuZCIsCiAgICAgICJiciIsCiAgICAgICJjb2wiLAogICAgICAiY29tbWFuZCIsCiAgICAgICJlbWJlZCIsCiAgICAgICJmcmFtZSIsCiAgICAgICJociIsCiAgICAgICJpbWFnZSIsCiAgICAgICJpbWciLAogICAgICAiaW5wdXQiLAogICAgICAia2V5Z2VuIiwKICAgICAgImxpbmsiLAogICAgICAibWV0YSIsCiAgICAgICJwYXJhbSIsCiAgICAgICJzb3VyY2UiLAogICAgICAidHJhY2siLAogICAgICAid2JyIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMKdmFyIFNjaGVtYTsKdmFyIGluaXRfc2NoZW1hMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMiKCkgewogICAgU2NoZW1hID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydwcm9wZXJ0eSddfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge1NjaGVtYVR5cGVbJ25vcm1hbCddfSBub3JtYWwKICAgICAgICogICBOb3JtYWwuCiAgICAgICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV0KICAgICAgICogICBTcGFjZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBTY2hlbWEuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgbm9ybWFsLCBzcGFjZTIpIHsKICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CiAgICAgICAgaWYgKHNwYWNlMikgewogICAgICAgICAgdGhpcy5zcGFjZSA9IHNwYWNlMjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBTY2hlbWEucHJvdG90eXBlLm5vcm1hbCA9IHt9OwogICAgU2NoZW1hLnByb3RvdHlwZS5wcm9wZXJ0eSA9IHt9OwogICAgU2NoZW1hLnByb3RvdHlwZS5zcGFjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9tZXJnZS5qcwpmdW5jdGlvbiBtZXJnZTMoZGVmaW5pdGlvbnMsIHNwYWNlMikgewogIGNvbnN0IHByb3BlcnR5ID0ge307CiAgY29uc3Qgbm9ybWFsID0ge307CiAgZm9yIChjb25zdCBkZWZpbml0aW9uMyBvZiBkZWZpbml0aW9ucykgewogICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0eSwgZGVmaW5pdGlvbjMucHJvcGVydHkpOwogICAgT2JqZWN0LmFzc2lnbihub3JtYWwsIGRlZmluaXRpb24zLm5vcm1hbCk7CiAgfQogIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnR5LCBub3JtYWwsIHNwYWNlMik7Cn0KdmFyIGluaXRfbWVyZ2UzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL21lcmdlLmpzIigpIHsKICAgIGluaXRfc2NoZW1hMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9ub3JtYWxpemUuanMKZnVuY3Rpb24gbm9ybWFsaXplMyh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnRvTG93ZXJDYXNlKCk7Cn0KdmFyIGluaXRfbm9ybWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9ub3JtYWxpemUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2luZm8uanMKdmFyIEluZm87CnZhciBpbml0X2luZm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvaW5mby5qcyIoKSB7CiAgICBJbmZvID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5CiAgICAgICAqICAgUHJvcGVydHkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUKICAgICAgICogICBBdHRyaWJ1dGUuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5mby4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBhdHRyaWJ1dGUpIHsKICAgICAgICB0aGlzLmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CiAgICAgIH0KICAgIH07CiAgICBJbmZvLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW5pc2ggPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW4gPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuY29tbWFTZXBhcmF0ZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmRlZmluZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLm11c3RVc2VQcm9wZXJ0eSA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUubnVtYmVyID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5vdmVybG9hZGVkQm9vbGVhbiA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUucHJvcGVydHkgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLnNwYWNlU2VwYXJhdGVkID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5zcGFjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcwp2YXIgdHlwZXNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydCh0eXBlc19leHBvcnRzLCB7CiAgYm9vbGVhbjogKCkgPT4gYm9vbGVhbiwKICBib29sZWFuaXNoOiAoKSA9PiBib29sZWFuaXNoLAogIGNvbW1hT3JTcGFjZVNlcGFyYXRlZDogKCkgPT4gY29tbWFPclNwYWNlU2VwYXJhdGVkLAogIGNvbW1hU2VwYXJhdGVkOiAoKSA9PiBjb21tYVNlcGFyYXRlZCwKICBudW1iZXI6ICgpID0+IG51bWJlciwKICBvdmVybG9hZGVkQm9vbGVhbjogKCkgPT4gb3ZlcmxvYWRlZEJvb2xlYW4sCiAgc3BhY2VTZXBhcmF0ZWQ6ICgpID0+IHNwYWNlU2VwYXJhdGVkCn0pOwpmdW5jdGlvbiBpbmNyZW1lbnQoKSB7CiAgcmV0dXJuIDIgKiogKytwb3dlcnM7Cn0KdmFyIHBvd2VycywgYm9vbGVhbiwgYm9vbGVhbmlzaCwgb3ZlcmxvYWRlZEJvb2xlYW4sIG51bWJlciwgc3BhY2VTZXBhcmF0ZWQsIGNvbW1hU2VwYXJhdGVkLCBjb21tYU9yU3BhY2VTZXBhcmF0ZWQ7CnZhciBpbml0X3R5cGVzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcyIoKSB7CiAgICBwb3dlcnMgPSAwOwogICAgYm9vbGVhbiA9IGluY3JlbWVudCgpOwogICAgYm9vbGVhbmlzaCA9IGluY3JlbWVudCgpOwogICAgb3ZlcmxvYWRlZEJvb2xlYW4gPSBpbmNyZW1lbnQoKTsKICAgIG51bWJlciA9IGluY3JlbWVudCgpOwogICAgc3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICAgIGNvbW1hU2VwYXJhdGVkID0gaW5jcmVtZW50KCk7CiAgICBjb21tYU9yU3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMKZnVuY3Rpb24gbWFyayh2YWx1ZXMsIGtleTIsIHZhbHVlMikgewogIGlmICh2YWx1ZTIpIHsKICAgIHZhbHVlc1trZXkyXSA9IHZhbHVlMjsKICB9Cn0KdmFyIGNoZWNrcywgRGVmaW5lZEluZm87CnZhciBpbml0X2RlZmluZWRfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMiKCkgewogICAgaW5pdF9pbmZvKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgY2hlY2tzID0gLyoqIEB0eXBlIHtSZWFkb25seUFycmF5PGtleW9mIHR5cGVvZiB0eXBlcz59ICovCiAgICBPYmplY3Qua2V5cyh0eXBlc19leHBvcnRzKTsKICAgIERlZmluZWRJbmZvID0gY2xhc3MgZXh0ZW5kcyBJbmZvIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZQogICAgICAgKiAgIEF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbbWFza10KICAgICAgICogICBNYXNrLgogICAgICAgKiBAcGFyYW0ge1NwYWNlIHwgdW5kZWZpbmVkfSBbc3BhY2VdCiAgICAgICAqICAgU3BhY2UuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5mby4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBhdHRyaWJ1dGUsIG1hc2ssIHNwYWNlMikgewogICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICBzdXBlcihwcm9wZXJ0eSwgYXR0cmlidXRlKTsKICAgICAgICBtYXJrKHRoaXMsICJzcGFjZSIsIHNwYWNlMik7CiAgICAgICAgaWYgKHR5cGVvZiBtYXNrID09PSAibnVtYmVyIikgewogICAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2hlY2tzLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGVjayA9IGNoZWNrc1tpbmRleDJdOwogICAgICAgICAgICBtYXJrKHRoaXMsIGNoZWNrc1tpbmRleDJdLCAobWFzayAmIHR5cGVzX2V4cG9ydHNbY2hlY2tdKSA9PT0gdHlwZXNfZXhwb3J0c1tjaGVja10pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIERlZmluZWRJbmZvLnByb3RvdHlwZS5kZWZpbmVkID0gdHJ1ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jcmVhdGUuanMKZnVuY3Rpb24gY3JlYXRlNihkZWZpbml0aW9uMykgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3Qgbm9ybWFscyA9IHt9OwogIGZvciAoY29uc3QgW3Byb3BlcnR5LCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmluaXRpb24zLnByb3BlcnRpZXMpKSB7CiAgICBjb25zdCBpbmZvID0gbmV3IERlZmluZWRJbmZvKAogICAgICBwcm9wZXJ0eSwKICAgICAgZGVmaW5pdGlvbjMudHJhbnNmb3JtKGRlZmluaXRpb24zLmF0dHJpYnV0ZXMgfHwge30sIHByb3BlcnR5KSwKICAgICAgdmFsdWUyLAogICAgICBkZWZpbml0aW9uMy5zcGFjZQogICAgKTsKICAgIGlmIChkZWZpbml0aW9uMy5tdXN0VXNlUHJvcGVydHkgJiYgZGVmaW5pdGlvbjMubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKHByb3BlcnR5KSkgewogICAgICBpbmZvLm11c3RVc2VQcm9wZXJ0eSA9IHRydWU7CiAgICB9CiAgICBwcm9wZXJ0aWVzMltwcm9wZXJ0eV0gPSBpbmZvOwogICAgbm9ybWFsc1tub3JtYWxpemUzKHByb3BlcnR5KV0gPSBwcm9wZXJ0eTsKICAgIG5vcm1hbHNbbm9ybWFsaXplMyhpbmZvLmF0dHJpYnV0ZSldID0gcHJvcGVydHk7CiAgfQogIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnRpZXMyLCBub3JtYWxzLCBkZWZpbml0aW9uMy5zcGFjZSk7Cn0KdmFyIGluaXRfY3JlYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2NyZWF0ZS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZSgpOwogICAgaW5pdF9kZWZpbmVkX2luZm8oKTsKICAgIGluaXRfc2NoZW1hMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9hcmlhLmpzCnZhciBhcmlhMjsKdmFyIGluaXRfYXJpYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvYXJpYS5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF90eXBlczMoKTsKICAgIGFyaWEyID0gY3JlYXRlNih7CiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICBhcmlhQWN0aXZlRGVzY2VuZGFudDogbnVsbCwKICAgICAgICBhcmlhQXRvbWljOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFBdXRvQ29tcGxldGU6IG51bGwsCiAgICAgICAgYXJpYUJ1c3k6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUNoZWNrZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUNvbENvdW50OiBudW1iZXIsCiAgICAgICAgYXJpYUNvbEluZGV4OiBudW1iZXIsCiAgICAgICAgYXJpYUNvbFNwYW46IG51bWJlciwKICAgICAgICBhcmlhQ29udHJvbHM6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFDdXJyZW50OiBudWxsLAogICAgICAgIGFyaWFEZXNjcmliZWRCeTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYURldGFpbHM6IG51bGwsCiAgICAgICAgYXJpYURpc2FibGVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFEcm9wRWZmZWN0OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhRXJyb3JNZXNzYWdlOiBudWxsLAogICAgICAgIGFyaWFFeHBhbmRlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhRmxvd1RvOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhR3JhYmJlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhSGFzUG9wdXA6IG51bGwsCiAgICAgICAgYXJpYUhpZGRlbjogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhSW52YWxpZDogbnVsbCwKICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiBudWxsLAogICAgICAgIGFyaWFMYWJlbDogbnVsbCwKICAgICAgICBhcmlhTGFiZWxsZWRCeTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUxldmVsOiBudW1iZXIsCiAgICAgICAgYXJpYUxpdmU6IG51bGwsCiAgICAgICAgYXJpYU1vZGFsOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFNdWx0aUxpbmU6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYU11bHRpU2VsZWN0YWJsZTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhT3JpZW50YXRpb246IG51bGwsCiAgICAgICAgYXJpYU93bnM6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFQbGFjZWhvbGRlcjogbnVsbCwKICAgICAgICBhcmlhUG9zSW5TZXQ6IG51bWJlciwKICAgICAgICBhcmlhUHJlc3NlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhUmVhZE9ubHk6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVJlbGV2YW50OiBudWxsLAogICAgICAgIGFyaWFSZXF1aXJlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhUm93Q291bnQ6IG51bWJlciwKICAgICAgICBhcmlhUm93SW5kZXg6IG51bWJlciwKICAgICAgICBhcmlhUm93U3BhbjogbnVtYmVyLAogICAgICAgIGFyaWFTZWxlY3RlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhU2V0U2l6ZTogbnVtYmVyLAogICAgICAgIGFyaWFTb3J0OiBudWxsLAogICAgICAgIGFyaWFWYWx1ZU1heDogbnVtYmVyLAogICAgICAgIGFyaWFWYWx1ZU1pbjogbnVtYmVyLAogICAgICAgIGFyaWFWYWx1ZU5vdzogbnVtYmVyLAogICAgICAgIGFyaWFWYWx1ZVRleHQ6IG51bGwsCiAgICAgICAgcm9sZTogbnVsbAogICAgICB9LAogICAgICB0cmFuc2Zvcm0oXzQsIHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHByb3BlcnR5ID09PSAicm9sZSIgPyBwcm9wZXJ0eSA6ICJhcmlhLSIgKyBwcm9wZXJ0eS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBhdHRyaWJ1dGUpIHsKICByZXR1cm4gYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGU7Cn0KdmFyIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2Utc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIHByb3BlcnR5KSB7CiAgcmV0dXJuIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgcHJvcGVydHkudG9Mb3dlckNhc2UoKSk7Cn0KdmFyIGluaXRfY2FzZV9pbnNlbnNpdGl2ZV90cmFuc2Zvcm0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMiKCkgewogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZV90cmFuc2Zvcm0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaHRtbC5qcwp2YXIgaHRtbDM7CnZhciBpbml0X2h0bWw5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfY2FzZV9pbnNlbnNpdGl2ZV90cmFuc2Zvcm0oKTsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgaHRtbDMgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGFjY2VwdGNoYXJzZXQ6ICJhY2NlcHQtY2hhcnNldCIsCiAgICAgICAgY2xhc3NuYW1lOiAiY2xhc3MiLAogICAgICAgIGh0bWxmb3I6ICJmb3IiLAogICAgICAgIGh0dHBlcXVpdjogImh0dHAtZXF1aXYiCiAgICAgIH0sCiAgICAgIG11c3RVc2VQcm9wZXJ0eTogWyJjaGVja2VkIiwgIm11bHRpcGxlIiwgIm11dGVkIiwgInNlbGVjdGVkIl0sCiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAvLyBTdGFuZGFyZCBQcm9wZXJ0aWVzLgogICAgICAgIGFiYnI6IG51bGwsCiAgICAgICAgYWNjZXB0OiBjb21tYVNlcGFyYXRlZCwKICAgICAgICBhY2NlcHRDaGFyc2V0OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhY2Nlc3NLZXk6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFjdGlvbjogbnVsbCwKICAgICAgICBhbGxvdzogbnVsbCwKICAgICAgICBhbGxvd0Z1bGxTY3JlZW46IGJvb2xlYW4sCiAgICAgICAgYWxsb3dQYXltZW50UmVxdWVzdDogYm9vbGVhbiwKICAgICAgICBhbGxvd1VzZXJNZWRpYTogYm9vbGVhbiwKICAgICAgICBhbHQ6IG51bGwsCiAgICAgICAgYXM6IG51bGwsCiAgICAgICAgYXN5bmM6IGJvb2xlYW4sCiAgICAgICAgYXV0b0NhcGl0YWxpemU6IG51bGwsCiAgICAgICAgYXV0b0NvbXBsZXRlOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhdXRvRm9jdXM6IGJvb2xlYW4sCiAgICAgICAgYXV0b1BsYXk6IGJvb2xlYW4sCiAgICAgICAgYmxvY2tpbmc6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNhcHR1cmU6IG51bGwsCiAgICAgICAgY2hhclNldDogbnVsbCwKICAgICAgICBjaGVja2VkOiBib29sZWFuLAogICAgICAgIGNpdGU6IG51bGwsCiAgICAgICAgY2xhc3NOYW1lOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjb2xzOiBudW1iZXIsCiAgICAgICAgY29sU3BhbjogbnVsbCwKICAgICAgICBjb250ZW50OiBudWxsLAogICAgICAgIGNvbnRlbnRFZGl0YWJsZTogYm9vbGVhbmlzaCwKICAgICAgICBjb250cm9sczogYm9vbGVhbiwKICAgICAgICBjb250cm9sc0xpc3Q6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNvb3JkczogbnVtYmVyIHwgY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgY3Jvc3NPcmlnaW46IG51bGwsCiAgICAgICAgZGF0YTogbnVsbCwKICAgICAgICBkYXRlVGltZTogbnVsbCwKICAgICAgICBkZWNvZGluZzogbnVsbCwKICAgICAgICBkZWZhdWx0OiBib29sZWFuLAogICAgICAgIGRlZmVyOiBib29sZWFuLAogICAgICAgIGRpcjogbnVsbCwKICAgICAgICBkaXJOYW1lOiBudWxsLAogICAgICAgIGRpc2FibGVkOiBib29sZWFuLAogICAgICAgIGRvd25sb2FkOiBvdmVybG9hZGVkQm9vbGVhbiwKICAgICAgICBkcmFnZ2FibGU6IGJvb2xlYW5pc2gsCiAgICAgICAgZW5jVHlwZTogbnVsbCwKICAgICAgICBlbnRlcktleUhpbnQ6IG51bGwsCiAgICAgICAgZmV0Y2hQcmlvcml0eTogbnVsbCwKICAgICAgICBmb3JtOiBudWxsLAogICAgICAgIGZvcm1BY3Rpb246IG51bGwsCiAgICAgICAgZm9ybUVuY1R5cGU6IG51bGwsCiAgICAgICAgZm9ybU1ldGhvZDogbnVsbCwKICAgICAgICBmb3JtTm9WYWxpZGF0ZTogYm9vbGVhbiwKICAgICAgICBmb3JtVGFyZ2V0OiBudWxsLAogICAgICAgIGhlYWRlcnM6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGhlaWdodDogbnVtYmVyLAogICAgICAgIGhpZGRlbjogb3ZlcmxvYWRlZEJvb2xlYW4sCiAgICAgICAgaGlnaDogbnVtYmVyLAogICAgICAgIGhyZWY6IG51bGwsCiAgICAgICAgaHJlZkxhbmc6IG51bGwsCiAgICAgICAgaHRtbEZvcjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaHR0cEVxdWl2OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBpZDogbnVsbCwKICAgICAgICBpbWFnZVNpemVzOiBudWxsLAogICAgICAgIGltYWdlU3JjU2V0OiBudWxsLAogICAgICAgIGluZXJ0OiBib29sZWFuLAogICAgICAgIGlucHV0TW9kZTogbnVsbCwKICAgICAgICBpbnRlZ3JpdHk6IG51bGwsCiAgICAgICAgaXM6IG51bGwsCiAgICAgICAgaXNNYXA6IGJvb2xlYW4sCiAgICAgICAgaXRlbUlkOiBudWxsLAogICAgICAgIGl0ZW1Qcm9wOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBpdGVtUmVmOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBpdGVtU2NvcGU6IGJvb2xlYW4sCiAgICAgICAgaXRlbVR5cGU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGtpbmQ6IG51bGwsCiAgICAgICAgbGFiZWw6IG51bGwsCiAgICAgICAgbGFuZzogbnVsbCwKICAgICAgICBsYW5ndWFnZTogbnVsbCwKICAgICAgICBsaXN0OiBudWxsLAogICAgICAgIGxvYWRpbmc6IG51bGwsCiAgICAgICAgbG9vcDogYm9vbGVhbiwKICAgICAgICBsb3c6IG51bWJlciwKICAgICAgICBtYW5pZmVzdDogbnVsbCwKICAgICAgICBtYXg6IG51bGwsCiAgICAgICAgbWF4TGVuZ3RoOiBudW1iZXIsCiAgICAgICAgbWVkaWE6IG51bGwsCiAgICAgICAgbWV0aG9kOiBudWxsLAogICAgICAgIG1pbjogbnVsbCwKICAgICAgICBtaW5MZW5ndGg6IG51bWJlciwKICAgICAgICBtdWx0aXBsZTogYm9vbGVhbiwKICAgICAgICBtdXRlZDogYm9vbGVhbiwKICAgICAgICBuYW1lOiBudWxsLAogICAgICAgIG5vbmNlOiBudWxsLAogICAgICAgIG5vTW9kdWxlOiBib29sZWFuLAogICAgICAgIG5vVmFsaWRhdGU6IGJvb2xlYW4sCiAgICAgICAgb25BYm9ydDogbnVsbCwKICAgICAgICBvbkFmdGVyUHJpbnQ6IG51bGwsCiAgICAgICAgb25BdXhDbGljazogbnVsbCwKICAgICAgICBvbkJlZm9yZU1hdGNoOiBudWxsLAogICAgICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsCiAgICAgICAgb25CZWZvcmVUb2dnbGU6IG51bGwsCiAgICAgICAgb25CZWZvcmVVbmxvYWQ6IG51bGwsCiAgICAgICAgb25CbHVyOiBudWxsLAogICAgICAgIG9uQ2FuY2VsOiBudWxsLAogICAgICAgIG9uQ2FuUGxheTogbnVsbCwKICAgICAgICBvbkNhblBsYXlUaHJvdWdoOiBudWxsLAogICAgICAgIG9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uQ2xpY2s6IG51bGwsCiAgICAgICAgb25DbG9zZTogbnVsbCwKICAgICAgICBvbkNvbnRleHRMb3N0OiBudWxsLAogICAgICAgIG9uQ29udGV4dE1lbnU6IG51bGwsCiAgICAgICAgb25Db250ZXh0UmVzdG9yZWQ6IG51bGwsCiAgICAgICAgb25Db3B5OiBudWxsLAogICAgICAgIG9uQ3VlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uQ3V0OiBudWxsLAogICAgICAgIG9uRGJsQ2xpY2s6IG51bGwsCiAgICAgICAgb25EcmFnOiBudWxsLAogICAgICAgIG9uRHJhZ0VuZDogbnVsbCwKICAgICAgICBvbkRyYWdFbnRlcjogbnVsbCwKICAgICAgICBvbkRyYWdFeGl0OiBudWxsLAogICAgICAgIG9uRHJhZ0xlYXZlOiBudWxsLAogICAgICAgIG9uRHJhZ092ZXI6IG51bGwsCiAgICAgICAgb25EcmFnU3RhcnQ6IG51bGwsCiAgICAgICAgb25Ecm9wOiBudWxsLAogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25FbXB0aWVkOiBudWxsLAogICAgICAgIG9uRW5kZWQ6IG51bGwsCiAgICAgICAgb25FcnJvcjogbnVsbCwKICAgICAgICBvbkZvY3VzOiBudWxsLAogICAgICAgIG9uRm9ybURhdGE6IG51bGwsCiAgICAgICAgb25IYXNoQ2hhbmdlOiBudWxsLAogICAgICAgIG9uSW5wdXQ6IG51bGwsCiAgICAgICAgb25JbnZhbGlkOiBudWxsLAogICAgICAgIG9uS2V5RG93bjogbnVsbCwKICAgICAgICBvbktleVByZXNzOiBudWxsLAogICAgICAgIG9uS2V5VXA6IG51bGwsCiAgICAgICAgb25MYW5ndWFnZUNoYW5nZTogbnVsbCwKICAgICAgICBvbkxvYWQ6IG51bGwsCiAgICAgICAgb25Mb2FkZWREYXRhOiBudWxsLAogICAgICAgIG9uTG9hZGVkTWV0YWRhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkRW5kOiBudWxsLAogICAgICAgIG9uTG9hZFN0YXJ0OiBudWxsLAogICAgICAgIG9uTWVzc2FnZTogbnVsbCwKICAgICAgICBvbk1lc3NhZ2VFcnJvcjogbnVsbCwKICAgICAgICBvbk1vdXNlRG93bjogbnVsbCwKICAgICAgICBvbk1vdXNlRW50ZXI6IG51bGwsCiAgICAgICAgb25Nb3VzZUxlYXZlOiBudWxsLAogICAgICAgIG9uTW91c2VNb3ZlOiBudWxsLAogICAgICAgIG9uTW91c2VPdXQ6IG51bGwsCiAgICAgICAgb25Nb3VzZU92ZXI6IG51bGwsCiAgICAgICAgb25Nb3VzZVVwOiBudWxsLAogICAgICAgIG9uT2ZmbGluZTogbnVsbCwKICAgICAgICBvbk9ubGluZTogbnVsbCwKICAgICAgICBvblBhZ2VIaWRlOiBudWxsLAogICAgICAgIG9uUGFnZVNob3c6IG51bGwsCiAgICAgICAgb25QYXN0ZTogbnVsbCwKICAgICAgICBvblBhdXNlOiBudWxsLAogICAgICAgIG9uUGxheTogbnVsbCwKICAgICAgICBvblBsYXlpbmc6IG51bGwsCiAgICAgICAgb25Qb3BTdGF0ZTogbnVsbCwKICAgICAgICBvblByb2dyZXNzOiBudWxsLAogICAgICAgIG9uUmF0ZUNoYW5nZTogbnVsbCwKICAgICAgICBvblJlamVjdGlvbkhhbmRsZWQ6IG51bGwsCiAgICAgICAgb25SZXNldDogbnVsbCwKICAgICAgICBvblJlc2l6ZTogbnVsbCwKICAgICAgICBvblNjcm9sbDogbnVsbCwKICAgICAgICBvblNjcm9sbEVuZDogbnVsbCwKICAgICAgICBvblNlY3VyaXR5UG9saWN5VmlvbGF0aW9uOiBudWxsLAogICAgICAgIG9uU2Vla2VkOiBudWxsLAogICAgICAgIG9uU2Vla2luZzogbnVsbCwKICAgICAgICBvblNlbGVjdDogbnVsbCwKICAgICAgICBvblNsb3RDaGFuZ2U6IG51bGwsCiAgICAgICAgb25TdGFsbGVkOiBudWxsLAogICAgICAgIG9uU3RvcmFnZTogbnVsbCwKICAgICAgICBvblN1Ym1pdDogbnVsbCwKICAgICAgICBvblN1c3BlbmQ6IG51bGwsCiAgICAgICAgb25UaW1lVXBkYXRlOiBudWxsLAogICAgICAgIG9uVG9nZ2xlOiBudWxsLAogICAgICAgIG9uVW5oYW5kbGVkUmVqZWN0aW9uOiBudWxsLAogICAgICAgIG9uVW5sb2FkOiBudWxsLAogICAgICAgIG9uVm9sdW1lQ2hhbmdlOiBudWxsLAogICAgICAgIG9uV2FpdGluZzogbnVsbCwKICAgICAgICBvbldoZWVsOiBudWxsLAogICAgICAgIG9wZW46IGJvb2xlYW4sCiAgICAgICAgb3B0aW11bTogbnVtYmVyLAogICAgICAgIHBhdHRlcm46IG51bGwsCiAgICAgICAgcGluZzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcGxhY2Vob2xkZXI6IG51bGwsCiAgICAgICAgcGxheXNJbmxpbmU6IGJvb2xlYW4sCiAgICAgICAgcG9wb3ZlcjogbnVsbCwKICAgICAgICBwb3BvdmVyVGFyZ2V0OiBudWxsLAogICAgICAgIHBvcG92ZXJUYXJnZXRBY3Rpb246IG51bGwsCiAgICAgICAgcG9zdGVyOiBudWxsLAogICAgICAgIHByZWxvYWQ6IG51bGwsCiAgICAgICAgcmVhZE9ubHk6IGJvb2xlYW4sCiAgICAgICAgcmVmZXJyZXJQb2xpY3k6IG51bGwsCiAgICAgICAgcmVsOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZDogYm9vbGVhbiwKICAgICAgICByZXZlcnNlZDogYm9vbGVhbiwKICAgICAgICByb3dzOiBudW1iZXIsCiAgICAgICAgcm93U3BhbjogbnVtYmVyLAogICAgICAgIHNhbmRib3g6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHNjb3BlOiBudWxsLAogICAgICAgIHNjb3BlZDogYm9vbGVhbiwKICAgICAgICBzZWFtbGVzczogYm9vbGVhbiwKICAgICAgICBzZWxlY3RlZDogYm9vbGVhbiwKICAgICAgICBzaGFkb3dSb290Q2xvbmFibGU6IGJvb2xlYW4sCiAgICAgICAgc2hhZG93Um9vdERlbGVnYXRlc0ZvY3VzOiBib29sZWFuLAogICAgICAgIHNoYWRvd1Jvb3RNb2RlOiBudWxsLAogICAgICAgIHNoYXBlOiBudWxsLAogICAgICAgIHNpemU6IG51bWJlciwKICAgICAgICBzaXplczogbnVsbCwKICAgICAgICBzbG90OiBudWxsLAogICAgICAgIHNwYW46IG51bWJlciwKICAgICAgICBzcGVsbENoZWNrOiBib29sZWFuaXNoLAogICAgICAgIHNyYzogbnVsbCwKICAgICAgICBzcmNEb2M6IG51bGwsCiAgICAgICAgc3JjTGFuZzogbnVsbCwKICAgICAgICBzcmNTZXQ6IG51bGwsCiAgICAgICAgc3RhcnQ6IG51bWJlciwKICAgICAgICBzdGVwOiBudWxsLAogICAgICAgIHN0eWxlOiBudWxsLAogICAgICAgIHRhYkluZGV4OiBudW1iZXIsCiAgICAgICAgdGFyZ2V0OiBudWxsLAogICAgICAgIHRpdGxlOiBudWxsLAogICAgICAgIHRyYW5zbGF0ZTogbnVsbCwKICAgICAgICB0eXBlOiBudWxsLAogICAgICAgIHR5cGVNdXN0TWF0Y2g6IGJvb2xlYW4sCiAgICAgICAgdXNlTWFwOiBudWxsLAogICAgICAgIHZhbHVlOiBib29sZWFuaXNoLAogICAgICAgIHdpZHRoOiBudW1iZXIsCiAgICAgICAgd3JhcDogbnVsbCwKICAgICAgICB3cml0aW5nU3VnZ2VzdGlvbnM6IG51bGwsCiAgICAgICAgLy8gTGVnYWN5LgogICAgICAgIC8vIFNlZTogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jb3RoZXItZWxlbWVudHMsLWF0dHJpYnV0ZXMtYW5kLWFwaXMKICAgICAgICBhbGlnbjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsLiBVc2UgQ1NTIGB0ZXh0LWFsaWduYCBpbnN0ZWFkLAogICAgICAgIGFMaW5rOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOmFjdGl2ZSB7Y29sb3J9YCBpbnN0ZWFkCiAgICAgICAgYXJjaGl2ZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgLy8gYDxvYmplY3Q+YC4gTGlzdCBvZiBVUklzIHRvIGFyY2hpdmVzCiAgICAgICAgYXhpczogbnVsbCwKICAgICAgICAvLyBgPHRkPmAgYW5kIGA8dGg+YC4gVXNlIGBzY29wZWAgb24gYDx0aD5gCiAgICAgICAgYmFja2dyb3VuZDogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYmFja2dyb3VuZC1pbWFnZWAgaW5zdGVhZAogICAgICAgIGJnQ29sb3I6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAgYW5kIHRhYmxlIGVsZW1lbnRzLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWNvbG9yYCBpbnN0ZWFkCiAgICAgICAgYm9yZGVyOiBudW1iZXIsCiAgICAgICAgLy8gYDx0YWJsZT5gLiBVc2UgQ1NTIGBib3JkZXItd2lkdGhgIGluc3RlYWQsCiAgICAgICAgYm9yZGVyQ29sb3I6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gLiBVc2UgQ1NTIGBib3JkZXItY29sb3JgIGluc3RlYWQsCiAgICAgICAgYm90dG9tTWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBjZWxsUGFkZGluZzogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBjZWxsU3BhY2luZzogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBjaGFyOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwgdGFibGUgZWxlbWVudHMuIFdoZW4gYGFsaWduPWNoYXJgLCBzZXRzIHRoZSBjaGFyYWN0ZXIgdG8gYWxpZ24gb24KICAgICAgICBjaGFyT2ZmOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwgdGFibGUgZWxlbWVudHMuIFdoZW4gYGNoYXJgLCBvZmZzZXRzIHRoZSBhbGlnbm1lbnQKICAgICAgICBjbGFzc0lkOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjbGVhcjogbnVsbCwKICAgICAgICAvLyBgPGJyPmAuIFVzZSBDU1MgYGNsZWFyYCBpbnN0ZWFkCiAgICAgICAgY29kZTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY29kZUJhc2U6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNvZGVUeXBlOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjb2xvcjogbnVsbCwKICAgICAgICAvLyBgPGZvbnQ+YCBhbmQgYDxocj5gLiBVc2UgQ1NTIGluc3RlYWQKICAgICAgICBjb21wYWN0OiBib29sZWFuLAogICAgICAgIC8vIExpc3RzLiBVc2UgQ1NTIHRvIHJlZHVjZSBzcGFjZSBiZXR3ZWVuIGl0ZW1zIGluc3RlYWQKICAgICAgICBkZWNsYXJlOiBib29sZWFuLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBldmVudDogbnVsbCwKICAgICAgICAvLyBgPHNjcmlwdD5gCiAgICAgICAgZmFjZTogbnVsbCwKICAgICAgICAvLyBgPGZvbnQ+YC4gVXNlIENTUyBpbnN0ZWFkCiAgICAgICAgZnJhbWU6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgZnJhbWVCb3JkZXI6IG51bGwsCiAgICAgICAgLy8gYDxpZnJhbWU+YC4gVXNlIENTUyBgYm9yZGVyYCBpbnN0ZWFkCiAgICAgICAgaFNwYWNlOiBudW1iZXIsCiAgICAgICAgLy8gYDxpbWc+YCBhbmQgYDxvYmplY3Q+YAogICAgICAgIGxlZnRNYXJnaW46IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIGxpbms6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6bGluayB7Y29sb3I6ICp9YCBpbnN0ZWFkCiAgICAgICAgbG9uZ0Rlc2M6IG51bGwsCiAgICAgICAgLy8gYDxmcmFtZT5gLCBgPGlmcmFtZT5gLCBhbmQgYDxpbWc+YC4gVXNlIGFuIGA8YT5gCiAgICAgICAgbG93U3JjOiBudWxsLAogICAgICAgIC8vIGA8aW1nPmAuIFVzZSBhIGA8cGljdHVyZT5gCiAgICAgICAgbWFyZ2luSGVpZ2h0OiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBtYXJnaW5XaWR0aDogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgbm9SZXNpemU6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxmcmFtZT5gCiAgICAgICAgbm9IcmVmOiBib29sZWFuLAogICAgICAgIC8vIGA8YXJlYT5gLiBVc2Ugbm8gaHJlZiBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IGBub2hyZWZgCiAgICAgICAgbm9TaGFkZTogYm9vbGVhbiwKICAgICAgICAvLyBgPGhyPmAuIFVzZSBiYWNrZ3JvdW5kLWNvbG9yIGFuZCBoZWlnaHQgaW5zdGVhZCBvZiBib3JkZXJzCiAgICAgICAgbm9XcmFwOiBib29sZWFuLAogICAgICAgIC8vIGA8dGQ+YCBhbmQgYDx0aD5gCiAgICAgICAgb2JqZWN0OiBudWxsLAogICAgICAgIC8vIGA8YXBwbGV0PmAKICAgICAgICBwcm9maWxlOiBudWxsLAogICAgICAgIC8vIGA8aGVhZD5gCiAgICAgICAgcHJvbXB0OiBudWxsLAogICAgICAgIC8vIGA8aXNpbmRleD5gCiAgICAgICAgcmV2OiBudWxsLAogICAgICAgIC8vIGA8bGluaz5gCiAgICAgICAgcmlnaHRNYXJnaW46IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIHJ1bGVzOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIHNjaGVtZTogbnVsbCwKICAgICAgICAvLyBgPG1ldGE+YAogICAgICAgIHNjcm9sbGluZzogYm9vbGVhbmlzaCwKICAgICAgICAvLyBgPGZyYW1lPmAuIFVzZSBvdmVyZmxvdyBpbiB0aGUgY2hpbGQgY29udGV4dAogICAgICAgIHN0YW5kYnk6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIHN1bW1hcnk6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgdGV4dDogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgY29sb3JgIGluc3RlYWQKICAgICAgICB0b3BNYXJnaW46IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIHZhbHVlVHlwZTogbnVsbCwKICAgICAgICAvLyBgPHBhcmFtPmAKICAgICAgICB2ZXJzaW9uOiBudWxsLAogICAgICAgIC8vIGA8aHRtbD5gLiBVc2UgYSBkb2N0eXBlLgogICAgICAgIHZBbGlnbjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsLiBVc2UgQ1NTIGB2ZXJ0aWNhbC1hbGlnbmAgaW5zdGVhZAogICAgICAgIHZMaW5rOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOnZpc2l0ZWQge2NvbG9yfWAgaW5zdGVhZAogICAgICAgIHZTcGFjZTogbnVtYmVyLAogICAgICAgIC8vIGA8aW1nPmAgYW5kIGA8b2JqZWN0PmAKICAgICAgICAvLyBOb24tc3RhbmRhcmQgUHJvcGVydGllcy4KICAgICAgICBhbGxvd1RyYW5zcGFyZW5jeTogbnVsbCwKICAgICAgICBhdXRvQ29ycmVjdDogbnVsbCwKICAgICAgICBhdXRvU2F2ZTogbnVsbCwKICAgICAgICBkaXNhYmxlUGljdHVyZUluUGljdHVyZTogYm9vbGVhbiwKICAgICAgICBkaXNhYmxlUmVtb3RlUGxheWJhY2s6IGJvb2xlYW4sCiAgICAgICAgcHJlZml4OiBudWxsLAogICAgICAgIHByb3BlcnR5OiBudWxsLAogICAgICAgIHJlc3VsdHM6IG51bWJlciwKICAgICAgICBzZWN1cml0eTogbnVsbCwKICAgICAgICB1bnNlbGVjdGFibGU6IG51bGwKICAgICAgfSwKICAgICAgc3BhY2U6ICJodG1sIiwKICAgICAgdHJhbnNmb3JtOiBjYXNlSW5zZW5zaXRpdmVUcmFuc2Zvcm0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9zdmcuanMKdmFyIHN2ZzsKdmFyIGluaXRfc3ZnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9zdmcuanMiKCkgewogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZV90cmFuc2Zvcm0oKTsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgc3ZnID0gY3JlYXRlNih7CiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhY2NlbnRIZWlnaHQ6ICJhY2NlbnQtaGVpZ2h0IiwKICAgICAgICBhbGlnbm1lbnRCYXNlbGluZTogImFsaWdubWVudC1iYXNlbGluZSIsCiAgICAgICAgYXJhYmljRm9ybTogImFyYWJpYy1mb3JtIiwKICAgICAgICBiYXNlbGluZVNoaWZ0OiAiYmFzZWxpbmUtc2hpZnQiLAogICAgICAgIGNhcEhlaWdodDogImNhcC1oZWlnaHQiLAogICAgICAgIGNsYXNzTmFtZTogImNsYXNzIiwKICAgICAgICBjbGlwUGF0aDogImNsaXAtcGF0aCIsCiAgICAgICAgY2xpcFJ1bGU6ICJjbGlwLXJ1bGUiLAogICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbjogImNvbG9yLWludGVycG9sYXRpb24iLAogICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6ICJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLAogICAgICAgIGNvbG9yUHJvZmlsZTogImNvbG9yLXByb2ZpbGUiLAogICAgICAgIGNvbG9yUmVuZGVyaW5nOiAiY29sb3ItcmVuZGVyaW5nIiwKICAgICAgICBjcm9zc09yaWdpbjogImNyb3Nzb3JpZ2luIiwKICAgICAgICBkYXRhVHlwZTogImRhdGF0eXBlIiwKICAgICAgICBkb21pbmFudEJhc2VsaW5lOiAiZG9taW5hbnQtYmFzZWxpbmUiLAogICAgICAgIGVuYWJsZUJhY2tncm91bmQ6ICJlbmFibGUtYmFja2dyb3VuZCIsCiAgICAgICAgZmlsbE9wYWNpdHk6ICJmaWxsLW9wYWNpdHkiLAogICAgICAgIGZpbGxSdWxlOiAiZmlsbC1ydWxlIiwKICAgICAgICBmbG9vZENvbG9yOiAiZmxvb2QtY29sb3IiLAogICAgICAgIGZsb29kT3BhY2l0eTogImZsb29kLW9wYWNpdHkiLAogICAgICAgIGZvbnRGYW1pbHk6ICJmb250LWZhbWlseSIsCiAgICAgICAgZm9udFNpemU6ICJmb250LXNpemUiLAogICAgICAgIGZvbnRTaXplQWRqdXN0OiAiZm9udC1zaXplLWFkanVzdCIsCiAgICAgICAgZm9udFN0cmV0Y2g6ICJmb250LXN0cmV0Y2giLAogICAgICAgIGZvbnRTdHlsZTogImZvbnQtc3R5bGUiLAogICAgICAgIGZvbnRWYXJpYW50OiAiZm9udC12YXJpYW50IiwKICAgICAgICBmb250V2VpZ2h0OiAiZm9udC13ZWlnaHQiLAogICAgICAgIGdseXBoTmFtZTogImdseXBoLW5hbWUiLAogICAgICAgIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiAiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiAiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiLAogICAgICAgIGhyZWZMYW5nOiAiaHJlZmxhbmciLAogICAgICAgIGhvcml6QWR2WDogImhvcml6LWFkdi14IiwKICAgICAgICBob3Jpek9yaWdpblg6ICJob3Jpei1vcmlnaW4teCIsCiAgICAgICAgaG9yaXpPcmlnaW5ZOiAiaG9yaXotb3JpZ2luLXkiLAogICAgICAgIGltYWdlUmVuZGVyaW5nOiAiaW1hZ2UtcmVuZGVyaW5nIiwKICAgICAgICBsZXR0ZXJTcGFjaW5nOiAibGV0dGVyLXNwYWNpbmciLAogICAgICAgIGxpZ2h0aW5nQ29sb3I6ICJsaWdodGluZy1jb2xvciIsCiAgICAgICAgbWFya2VyRW5kOiAibWFya2VyLWVuZCIsCiAgICAgICAgbWFya2VyTWlkOiAibWFya2VyLW1pZCIsCiAgICAgICAgbWFya2VyU3RhcnQ6ICJtYXJrZXItc3RhcnQiLAogICAgICAgIG5hdkRvd246ICJuYXYtZG93biIsCiAgICAgICAgbmF2RG93bkxlZnQ6ICJuYXYtZG93bi1sZWZ0IiwKICAgICAgICBuYXZEb3duUmlnaHQ6ICJuYXYtZG93bi1yaWdodCIsCiAgICAgICAgbmF2TGVmdDogIm5hdi1sZWZ0IiwKICAgICAgICBuYXZOZXh0OiAibmF2LW5leHQiLAogICAgICAgIG5hdlByZXY6ICJuYXYtcHJldiIsCiAgICAgICAgbmF2UmlnaHQ6ICJuYXYtcmlnaHQiLAogICAgICAgIG5hdlVwOiAibmF2LXVwIiwKICAgICAgICBuYXZVcExlZnQ6ICJuYXYtdXAtbGVmdCIsCiAgICAgICAgbmF2VXBSaWdodDogIm5hdi11cC1yaWdodCIsCiAgICAgICAgb25BYm9ydDogIm9uYWJvcnQiLAogICAgICAgIG9uQWN0aXZhdGU6ICJvbmFjdGl2YXRlIiwKICAgICAgICBvbkFmdGVyUHJpbnQ6ICJvbmFmdGVycHJpbnQiLAogICAgICAgIG9uQmVmb3JlUHJpbnQ6ICJvbmJlZm9yZXByaW50IiwKICAgICAgICBvbkJlZ2luOiAib25iZWdpbiIsCiAgICAgICAgb25DYW5jZWw6ICJvbmNhbmNlbCIsCiAgICAgICAgb25DYW5QbGF5OiAib25jYW5wbGF5IiwKICAgICAgICBvbkNhblBsYXlUaHJvdWdoOiAib25jYW5wbGF5dGhyb3VnaCIsCiAgICAgICAgb25DaGFuZ2U6ICJvbmNoYW5nZSIsCiAgICAgICAgb25DbGljazogIm9uY2xpY2siLAogICAgICAgIG9uQ2xvc2U6ICJvbmNsb3NlIiwKICAgICAgICBvbkNvcHk6ICJvbmNvcHkiLAogICAgICAgIG9uQ3VlQ2hhbmdlOiAib25jdWVjaGFuZ2UiLAogICAgICAgIG9uQ3V0OiAib25jdXQiLAogICAgICAgIG9uRGJsQ2xpY2s6ICJvbmRibGNsaWNrIiwKICAgICAgICBvbkRyYWc6ICJvbmRyYWciLAogICAgICAgIG9uRHJhZ0VuZDogIm9uZHJhZ2VuZCIsCiAgICAgICAgb25EcmFnRW50ZXI6ICJvbmRyYWdlbnRlciIsCiAgICAgICAgb25EcmFnRXhpdDogIm9uZHJhZ2V4aXQiLAogICAgICAgIG9uRHJhZ0xlYXZlOiAib25kcmFnbGVhdmUiLAogICAgICAgIG9uRHJhZ092ZXI6ICJvbmRyYWdvdmVyIiwKICAgICAgICBvbkRyYWdTdGFydDogIm9uZHJhZ3N0YXJ0IiwKICAgICAgICBvbkRyb3A6ICJvbmRyb3AiLAogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U6ICJvbmR1cmF0aW9uY2hhbmdlIiwKICAgICAgICBvbkVtcHRpZWQ6ICJvbmVtcHRpZWQiLAogICAgICAgIG9uRW5kOiAib25lbmQiLAogICAgICAgIG9uRW5kZWQ6ICJvbmVuZGVkIiwKICAgICAgICBvbkVycm9yOiAib25lcnJvciIsCiAgICAgICAgb25Gb2N1czogIm9uZm9jdXMiLAogICAgICAgIG9uRm9jdXNJbjogIm9uZm9jdXNpbiIsCiAgICAgICAgb25Gb2N1c091dDogIm9uZm9jdXNvdXQiLAogICAgICAgIG9uSGFzaENoYW5nZTogIm9uaGFzaGNoYW5nZSIsCiAgICAgICAgb25JbnB1dDogIm9uaW5wdXQiLAogICAgICAgIG9uSW52YWxpZDogIm9uaW52YWxpZCIsCiAgICAgICAgb25LZXlEb3duOiAib25rZXlkb3duIiwKICAgICAgICBvbktleVByZXNzOiAib25rZXlwcmVzcyIsCiAgICAgICAgb25LZXlVcDogIm9ua2V5dXAiLAogICAgICAgIG9uTG9hZDogIm9ubG9hZCIsCiAgICAgICAgb25Mb2FkZWREYXRhOiAib25sb2FkZWRkYXRhIiwKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhOiAib25sb2FkZWRtZXRhZGF0YSIsCiAgICAgICAgb25Mb2FkU3RhcnQ6ICJvbmxvYWRzdGFydCIsCiAgICAgICAgb25NZXNzYWdlOiAib25tZXNzYWdlIiwKICAgICAgICBvbk1vdXNlRG93bjogIm9ubW91c2Vkb3duIiwKICAgICAgICBvbk1vdXNlRW50ZXI6ICJvbm1vdXNlZW50ZXIiLAogICAgICAgIG9uTW91c2VMZWF2ZTogIm9ubW91c2VsZWF2ZSIsCiAgICAgICAgb25Nb3VzZU1vdmU6ICJvbm1vdXNlbW92ZSIsCiAgICAgICAgb25Nb3VzZU91dDogIm9ubW91c2VvdXQiLAogICAgICAgIG9uTW91c2VPdmVyOiAib25tb3VzZW92ZXIiLAogICAgICAgIG9uTW91c2VVcDogIm9ubW91c2V1cCIsCiAgICAgICAgb25Nb3VzZVdoZWVsOiAib25tb3VzZXdoZWVsIiwKICAgICAgICBvbk9mZmxpbmU6ICJvbm9mZmxpbmUiLAogICAgICAgIG9uT25saW5lOiAib25vbmxpbmUiLAogICAgICAgIG9uUGFnZUhpZGU6ICJvbnBhZ2VoaWRlIiwKICAgICAgICBvblBhZ2VTaG93OiAib25wYWdlc2hvdyIsCiAgICAgICAgb25QYXN0ZTogIm9ucGFzdGUiLAogICAgICAgIG9uUGF1c2U6ICJvbnBhdXNlIiwKICAgICAgICBvblBsYXk6ICJvbnBsYXkiLAogICAgICAgIG9uUGxheWluZzogIm9ucGxheWluZyIsCiAgICAgICAgb25Qb3BTdGF0ZTogIm9ucG9wc3RhdGUiLAogICAgICAgIG9uUHJvZ3Jlc3M6ICJvbnByb2dyZXNzIiwKICAgICAgICBvblJhdGVDaGFuZ2U6ICJvbnJhdGVjaGFuZ2UiLAogICAgICAgIG9uUmVwZWF0OiAib25yZXBlYXQiLAogICAgICAgIG9uUmVzZXQ6ICJvbnJlc2V0IiwKICAgICAgICBvblJlc2l6ZTogIm9ucmVzaXplIiwKICAgICAgICBvblNjcm9sbDogIm9uc2Nyb2xsIiwKICAgICAgICBvblNlZWtlZDogIm9uc2Vla2VkIiwKICAgICAgICBvblNlZWtpbmc6ICJvbnNlZWtpbmciLAogICAgICAgIG9uU2VsZWN0OiAib25zZWxlY3QiLAogICAgICAgIG9uU2hvdzogIm9uc2hvdyIsCiAgICAgICAgb25TdGFsbGVkOiAib25zdGFsbGVkIiwKICAgICAgICBvblN0b3JhZ2U6ICJvbnN0b3JhZ2UiLAogICAgICAgIG9uU3VibWl0OiAib25zdWJtaXQiLAogICAgICAgIG9uU3VzcGVuZDogIm9uc3VzcGVuZCIsCiAgICAgICAgb25UaW1lVXBkYXRlOiAib250aW1ldXBkYXRlIiwKICAgICAgICBvblRvZ2dsZTogIm9udG9nZ2xlIiwKICAgICAgICBvblVubG9hZDogIm9udW5sb2FkIiwKICAgICAgICBvblZvbHVtZUNoYW5nZTogIm9udm9sdW1lY2hhbmdlIiwKICAgICAgICBvbldhaXRpbmc6ICJvbndhaXRpbmciLAogICAgICAgIG9uWm9vbTogIm9uem9vbSIsCiAgICAgICAgb3ZlcmxpbmVQb3NpdGlvbjogIm92ZXJsaW5lLXBvc2l0aW9uIiwKICAgICAgICBvdmVybGluZVRoaWNrbmVzczogIm92ZXJsaW5lLXRoaWNrbmVzcyIsCiAgICAgICAgcGFpbnRPcmRlcjogInBhaW50LW9yZGVyIiwKICAgICAgICBwYW5vc2UxOiAicGFub3NlLTEiLAogICAgICAgIHBvaW50ZXJFdmVudHM6ICJwb2ludGVyLWV2ZW50cyIsCiAgICAgICAgcmVmZXJyZXJQb2xpY3k6ICJyZWZlcnJlcnBvbGljeSIsCiAgICAgICAgcmVuZGVyaW5nSW50ZW50OiAicmVuZGVyaW5nLWludGVudCIsCiAgICAgICAgc2hhcGVSZW5kZXJpbmc6ICJzaGFwZS1yZW5kZXJpbmciLAogICAgICAgIHN0b3BDb2xvcjogInN0b3AtY29sb3IiLAogICAgICAgIHN0b3BPcGFjaXR5OiAic3RvcC1vcGFjaXR5IiwKICAgICAgICBzdHJpa2V0aHJvdWdoUG9zaXRpb246ICJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIiwKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiAic3RyaWtldGhyb3VnaC10aGlja25lc3MiLAogICAgICAgIHN0cm9rZURhc2hBcnJheTogInN0cm9rZS1kYXNoYXJyYXkiLAogICAgICAgIHN0cm9rZURhc2hPZmZzZXQ6ICJzdHJva2UtZGFzaG9mZnNldCIsCiAgICAgICAgc3Ryb2tlTGluZUNhcDogInN0cm9rZS1saW5lY2FwIiwKICAgICAgICBzdHJva2VMaW5lSm9pbjogInN0cm9rZS1saW5lam9pbiIsCiAgICAgICAgc3Ryb2tlTWl0ZXJMaW1pdDogInN0cm9rZS1taXRlcmxpbWl0IiwKICAgICAgICBzdHJva2VPcGFjaXR5OiAic3Ryb2tlLW9wYWNpdHkiLAogICAgICAgIHN0cm9rZVdpZHRoOiAic3Ryb2tlLXdpZHRoIiwKICAgICAgICB0YWJJbmRleDogInRhYmluZGV4IiwKICAgICAgICB0ZXh0QW5jaG9yOiAidGV4dC1hbmNob3IiLAogICAgICAgIHRleHREZWNvcmF0aW9uOiAidGV4dC1kZWNvcmF0aW9uIiwKICAgICAgICB0ZXh0UmVuZGVyaW5nOiAidGV4dC1yZW5kZXJpbmciLAogICAgICAgIHRyYW5zZm9ybU9yaWdpbjogInRyYW5zZm9ybS1vcmlnaW4iLAogICAgICAgIHR5cGVPZjogInR5cGVvZiIsCiAgICAgICAgdW5kZXJsaW5lUG9zaXRpb246ICJ1bmRlcmxpbmUtcG9zaXRpb24iLAogICAgICAgIHVuZGVybGluZVRoaWNrbmVzczogInVuZGVybGluZS10aGlja25lc3MiLAogICAgICAgIHVuaWNvZGVCaWRpOiAidW5pY29kZS1iaWRpIiwKICAgICAgICB1bmljb2RlUmFuZ2U6ICJ1bmljb2RlLXJhbmdlIiwKICAgICAgICB1bml0c1BlckVtOiAidW5pdHMtcGVyLWVtIiwKICAgICAgICB2QWxwaGFiZXRpYzogInYtYWxwaGFiZXRpYyIsCiAgICAgICAgdkhhbmdpbmc6ICJ2LWhhbmdpbmciLAogICAgICAgIHZJZGVvZ3JhcGhpYzogInYtaWRlb2dyYXBoaWMiLAogICAgICAgIHZNYXRoZW1hdGljYWw6ICJ2LW1hdGhlbWF0aWNhbCIsCiAgICAgICAgdmVjdG9yRWZmZWN0OiAidmVjdG9yLWVmZmVjdCIsCiAgICAgICAgdmVydEFkdlk6ICJ2ZXJ0LWFkdi15IiwKICAgICAgICB2ZXJ0T3JpZ2luWDogInZlcnQtb3JpZ2luLXgiLAogICAgICAgIHZlcnRPcmlnaW5ZOiAidmVydC1vcmlnaW4teSIsCiAgICAgICAgd29yZFNwYWNpbmc6ICJ3b3JkLXNwYWNpbmciLAogICAgICAgIHdyaXRpbmdNb2RlOiAid3JpdGluZy1tb2RlIiwKICAgICAgICB4SGVpZ2h0OiAieC1oZWlnaHQiLAogICAgICAgIC8vIFRoZXNlIHdlcmUgY2FtZWxjYXNlZCBpbiBUaW55LiBOb3cgbG93ZXJjYXNlZCBpbiBTVkcgMgogICAgICAgIHBsYXliYWNrT3JkZXI6ICJwbGF5YmFja29yZGVyIiwKICAgICAgICB0aW1lbGluZUJlZ2luOiAidGltZWxpbmViZWdpbiIKICAgICAgfSwKICAgICAgcHJvcGVydGllczogewogICAgICAgIGFib3V0OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYWNjZW50SGVpZ2h0OiBudW1iZXIsCiAgICAgICAgYWNjdW11bGF0ZTogbnVsbCwKICAgICAgICBhZGRpdGl2ZTogbnVsbCwKICAgICAgICBhbGlnbm1lbnRCYXNlbGluZTogbnVsbCwKICAgICAgICBhbHBoYWJldGljOiBudW1iZXIsCiAgICAgICAgYW1wbGl0dWRlOiBudW1iZXIsCiAgICAgICAgYXJhYmljRm9ybTogbnVsbCwKICAgICAgICBhc2NlbnQ6IG51bWJlciwKICAgICAgICBhdHRyaWJ1dGVOYW1lOiBudWxsLAogICAgICAgIGF0dHJpYnV0ZVR5cGU6IG51bGwsCiAgICAgICAgYXppbXV0aDogbnVtYmVyLAogICAgICAgIGJhbmR3aWR0aDogbnVsbCwKICAgICAgICBiYXNlbGluZVNoaWZ0OiBudWxsLAogICAgICAgIGJhc2VGcmVxdWVuY3k6IG51bGwsCiAgICAgICAgYmFzZVByb2ZpbGU6IG51bGwsCiAgICAgICAgYmJveDogbnVsbCwKICAgICAgICBiZWdpbjogbnVsbCwKICAgICAgICBiaWFzOiBudW1iZXIsCiAgICAgICAgYnk6IG51bGwsCiAgICAgICAgY2FsY01vZGU6IG51bGwsCiAgICAgICAgY2FwSGVpZ2h0OiBudW1iZXIsCiAgICAgICAgY2xhc3NOYW1lOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjbGlwOiBudWxsLAogICAgICAgIGNsaXBQYXRoOiBudWxsLAogICAgICAgIGNsaXBQYXRoVW5pdHM6IG51bGwsCiAgICAgICAgY2xpcFJ1bGU6IG51bGwsCiAgICAgICAgY29sb3I6IG51bGwsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uOiBudWxsLAogICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6IG51bGwsCiAgICAgICAgY29sb3JQcm9maWxlOiBudWxsLAogICAgICAgIGNvbG9yUmVuZGVyaW5nOiBudWxsLAogICAgICAgIGNvbnRlbnQ6IG51bGwsCiAgICAgICAgY29udGVudFNjcmlwdFR5cGU6IG51bGwsCiAgICAgICAgY29udGVudFN0eWxlVHlwZTogbnVsbCwKICAgICAgICBjcm9zc09yaWdpbjogbnVsbCwKICAgICAgICBjdXJzb3I6IG51bGwsCiAgICAgICAgY3g6IG51bGwsCiAgICAgICAgY3k6IG51bGwsCiAgICAgICAgZDogbnVsbCwKICAgICAgICBkYXRhVHlwZTogbnVsbCwKICAgICAgICBkZWZhdWx0QWN0aW9uOiBudWxsLAogICAgICAgIGRlc2NlbnQ6IG51bWJlciwKICAgICAgICBkaWZmdXNlQ29uc3RhbnQ6IG51bWJlciwKICAgICAgICBkaXJlY3Rpb246IG51bGwsCiAgICAgICAgZGlzcGxheTogbnVsbCwKICAgICAgICBkdXI6IG51bGwsCiAgICAgICAgZGl2aXNvcjogbnVtYmVyLAogICAgICAgIGRvbWluYW50QmFzZWxpbmU6IG51bGwsCiAgICAgICAgZG93bmxvYWQ6IGJvb2xlYW4sCiAgICAgICAgZHg6IG51bGwsCiAgICAgICAgZHk6IG51bGwsCiAgICAgICAgZWRnZU1vZGU6IG51bGwsCiAgICAgICAgZWRpdGFibGU6IG51bGwsCiAgICAgICAgZWxldmF0aW9uOiBudW1iZXIsCiAgICAgICAgZW5hYmxlQmFja2dyb3VuZDogbnVsbCwKICAgICAgICBlbmQ6IG51bGwsCiAgICAgICAgZXZlbnQ6IG51bGwsCiAgICAgICAgZXhwb25lbnQ6IG51bWJlciwKICAgICAgICBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiBudWxsLAogICAgICAgIGZpbGw6IG51bGwsCiAgICAgICAgZmlsbE9wYWNpdHk6IG51bWJlciwKICAgICAgICBmaWxsUnVsZTogbnVsbCwKICAgICAgICBmaWx0ZXI6IG51bGwsCiAgICAgICAgZmlsdGVyUmVzOiBudWxsLAogICAgICAgIGZpbHRlclVuaXRzOiBudWxsLAogICAgICAgIGZsb29kQ29sb3I6IG51bGwsCiAgICAgICAgZmxvb2RPcGFjaXR5OiBudWxsLAogICAgICAgIGZvY3VzYWJsZTogbnVsbCwKICAgICAgICBmb2N1c0hpZ2hsaWdodDogbnVsbCwKICAgICAgICBmb250RmFtaWx5OiBudWxsLAogICAgICAgIGZvbnRTaXplOiBudWxsLAogICAgICAgIGZvbnRTaXplQWRqdXN0OiBudWxsLAogICAgICAgIGZvbnRTdHJldGNoOiBudWxsLAogICAgICAgIGZvbnRTdHlsZTogbnVsbCwKICAgICAgICBmb250VmFyaWFudDogbnVsbCwKICAgICAgICBmb250V2VpZ2h0OiBudWxsLAogICAgICAgIGZvcm1hdDogbnVsbCwKICAgICAgICBmcjogbnVsbCwKICAgICAgICBmcm9tOiBudWxsLAogICAgICAgIGZ4OiBudWxsLAogICAgICAgIGZ5OiBudWxsLAogICAgICAgIGcxOiBjb21tYVNlcGFyYXRlZCwKICAgICAgICBnMjogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgZ2x5cGhOYW1lOiBjb21tYVNlcGFyYXRlZCwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDogbnVsbCwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6IG51bGwsCiAgICAgICAgZ2x5cGhSZWY6IG51bGwsCiAgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm06IG51bGwsCiAgICAgICAgZ3JhZGllbnRVbml0czogbnVsbCwKICAgICAgICBoYW5kbGVyOiBudWxsLAogICAgICAgIGhhbmdpbmc6IG51bWJlciwKICAgICAgICBoYXRjaENvbnRlbnRVbml0czogbnVsbCwKICAgICAgICBoYXRjaFVuaXRzOiBudWxsLAogICAgICAgIGhlaWdodDogbnVsbCwKICAgICAgICBocmVmOiBudWxsLAogICAgICAgIGhyZWZMYW5nOiBudWxsLAogICAgICAgIGhvcml6QWR2WDogbnVtYmVyLAogICAgICAgIGhvcml6T3JpZ2luWDogbnVtYmVyLAogICAgICAgIGhvcml6T3JpZ2luWTogbnVtYmVyLAogICAgICAgIGlkOiBudWxsLAogICAgICAgIGlkZW9ncmFwaGljOiBudW1iZXIsCiAgICAgICAgaW1hZ2VSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgaW5pdGlhbFZpc2liaWxpdHk6IG51bGwsCiAgICAgICAgaW46IG51bGwsCiAgICAgICAgaW4yOiBudWxsLAogICAgICAgIGludGVyY2VwdDogbnVtYmVyLAogICAgICAgIGs6IG51bWJlciwKICAgICAgICBrMTogbnVtYmVyLAogICAgICAgIGsyOiBudW1iZXIsCiAgICAgICAgazM6IG51bWJlciwKICAgICAgICBrNDogbnVtYmVyLAogICAgICAgIGtlcm5lbE1hdHJpeDogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIGtlcm5lbFVuaXRMZW5ndGg6IG51bGwsCiAgICAgICAga2V5UG9pbnRzOiBudWxsLAogICAgICAgIC8vIFNFTUlfQ09MT05fU0VQQVJBVEVECiAgICAgICAga2V5U3BsaW5lczogbnVsbCwKICAgICAgICAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRAogICAgICAgIGtleVRpbWVzOiBudWxsLAogICAgICAgIC8vIFNFTUlfQ09MT05fU0VQQVJBVEVECiAgICAgICAga2VybmluZzogbnVsbCwKICAgICAgICBsYW5nOiBudWxsLAogICAgICAgIGxlbmd0aEFkanVzdDogbnVsbCwKICAgICAgICBsZXR0ZXJTcGFjaW5nOiBudWxsLAogICAgICAgIGxpZ2h0aW5nQ29sb3I6IG51bGwsCiAgICAgICAgbGltaXRpbmdDb25lQW5nbGU6IG51bWJlciwKICAgICAgICBsb2NhbDogbnVsbCwKICAgICAgICBtYXJrZXJFbmQ6IG51bGwsCiAgICAgICAgbWFya2VyTWlkOiBudWxsLAogICAgICAgIG1hcmtlclN0YXJ0OiBudWxsLAogICAgICAgIG1hcmtlckhlaWdodDogbnVsbCwKICAgICAgICBtYXJrZXJVbml0czogbnVsbCwKICAgICAgICBtYXJrZXJXaWR0aDogbnVsbCwKICAgICAgICBtYXNrOiBudWxsLAogICAgICAgIG1hc2tDb250ZW50VW5pdHM6IG51bGwsCiAgICAgICAgbWFza1VuaXRzOiBudWxsLAogICAgICAgIG1hdGhlbWF0aWNhbDogbnVsbCwKICAgICAgICBtYXg6IG51bGwsCiAgICAgICAgbWVkaWE6IG51bGwsCiAgICAgICAgbWVkaWFDaGFyYWN0ZXJFbmNvZGluZzogbnVsbCwKICAgICAgICBtZWRpYUNvbnRlbnRFbmNvZGluZ3M6IG51bGwsCiAgICAgICAgbWVkaWFTaXplOiBudW1iZXIsCiAgICAgICAgbWVkaWFUaW1lOiBudWxsLAogICAgICAgIG1ldGhvZDogbnVsbCwKICAgICAgICBtaW46IG51bGwsCiAgICAgICAgbW9kZTogbnVsbCwKICAgICAgICBuYW1lOiBudWxsLAogICAgICAgIG5hdkRvd246IG51bGwsCiAgICAgICAgbmF2RG93bkxlZnQ6IG51bGwsCiAgICAgICAgbmF2RG93blJpZ2h0OiBudWxsLAogICAgICAgIG5hdkxlZnQ6IG51bGwsCiAgICAgICAgbmF2TmV4dDogbnVsbCwKICAgICAgICBuYXZQcmV2OiBudWxsLAogICAgICAgIG5hdlJpZ2h0OiBudWxsLAogICAgICAgIG5hdlVwOiBudWxsLAogICAgICAgIG5hdlVwTGVmdDogbnVsbCwKICAgICAgICBuYXZVcFJpZ2h0OiBudWxsLAogICAgICAgIG51bU9jdGF2ZXM6IG51bGwsCiAgICAgICAgb2JzZXJ2ZXI6IG51bGwsCiAgICAgICAgb2Zmc2V0OiBudWxsLAogICAgICAgIG9uQWJvcnQ6IG51bGwsCiAgICAgICAgb25BY3RpdmF0ZTogbnVsbCwKICAgICAgICBvbkFmdGVyUHJpbnQ6IG51bGwsCiAgICAgICAgb25CZWZvcmVQcmludDogbnVsbCwKICAgICAgICBvbkJlZ2luOiBudWxsLAogICAgICAgIG9uQ2FuY2VsOiBudWxsLAogICAgICAgIG9uQ2FuUGxheTogbnVsbCwKICAgICAgICBvbkNhblBsYXlUaHJvdWdoOiBudWxsLAogICAgICAgIG9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uQ2xpY2s6IG51bGwsCiAgICAgICAgb25DbG9zZTogbnVsbCwKICAgICAgICBvbkNvcHk6IG51bGwsCiAgICAgICAgb25DdWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25DdXQ6IG51bGwsCiAgICAgICAgb25EYmxDbGljazogbnVsbCwKICAgICAgICBvbkRyYWc6IG51bGwsCiAgICAgICAgb25EcmFnRW5kOiBudWxsLAogICAgICAgIG9uRHJhZ0VudGVyOiBudWxsLAogICAgICAgIG9uRHJhZ0V4aXQ6IG51bGwsCiAgICAgICAgb25EcmFnTGVhdmU6IG51bGwsCiAgICAgICAgb25EcmFnT3ZlcjogbnVsbCwKICAgICAgICBvbkRyYWdTdGFydDogbnVsbCwKICAgICAgICBvbkRyb3A6IG51bGwsCiAgICAgICAgb25EdXJhdGlvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkVtcHRpZWQ6IG51bGwsCiAgICAgICAgb25FbmQ6IG51bGwsCiAgICAgICAgb25FbmRlZDogbnVsbCwKICAgICAgICBvbkVycm9yOiBudWxsLAogICAgICAgIG9uRm9jdXM6IG51bGwsCiAgICAgICAgb25Gb2N1c0luOiBudWxsLAogICAgICAgIG9uRm9jdXNPdXQ6IG51bGwsCiAgICAgICAgb25IYXNoQ2hhbmdlOiBudWxsLAogICAgICAgIG9uSW5wdXQ6IG51bGwsCiAgICAgICAgb25JbnZhbGlkOiBudWxsLAogICAgICAgIG9uS2V5RG93bjogbnVsbCwKICAgICAgICBvbktleVByZXNzOiBudWxsLAogICAgICAgIG9uS2V5VXA6IG51bGwsCiAgICAgICAgb25Mb2FkOiBudWxsLAogICAgICAgIG9uTG9hZGVkRGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhOiBudWxsLAogICAgICAgIG9uTG9hZFN0YXJ0OiBudWxsLAogICAgICAgIG9uTWVzc2FnZTogbnVsbCwKICAgICAgICBvbk1vdXNlRG93bjogbnVsbCwKICAgICAgICBvbk1vdXNlRW50ZXI6IG51bGwsCiAgICAgICAgb25Nb3VzZUxlYXZlOiBudWxsLAogICAgICAgIG9uTW91c2VNb3ZlOiBudWxsLAogICAgICAgIG9uTW91c2VPdXQ6IG51bGwsCiAgICAgICAgb25Nb3VzZU92ZXI6IG51bGwsCiAgICAgICAgb25Nb3VzZVVwOiBudWxsLAogICAgICAgIG9uTW91c2VXaGVlbDogbnVsbCwKICAgICAgICBvbk9mZmxpbmU6IG51bGwsCiAgICAgICAgb25PbmxpbmU6IG51bGwsCiAgICAgICAgb25QYWdlSGlkZTogbnVsbCwKICAgICAgICBvblBhZ2VTaG93OiBudWxsLAogICAgICAgIG9uUGFzdGU6IG51bGwsCiAgICAgICAgb25QYXVzZTogbnVsbCwKICAgICAgICBvblBsYXk6IG51bGwsCiAgICAgICAgb25QbGF5aW5nOiBudWxsLAogICAgICAgIG9uUG9wU3RhdGU6IG51bGwsCiAgICAgICAgb25Qcm9ncmVzczogbnVsbCwKICAgICAgICBvblJhdGVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25SZXBlYXQ6IG51bGwsCiAgICAgICAgb25SZXNldDogbnVsbCwKICAgICAgICBvblJlc2l6ZTogbnVsbCwKICAgICAgICBvblNjcm9sbDogbnVsbCwKICAgICAgICBvblNlZWtlZDogbnVsbCwKICAgICAgICBvblNlZWtpbmc6IG51bGwsCiAgICAgICAgb25TZWxlY3Q6IG51bGwsCiAgICAgICAgb25TaG93OiBudWxsLAogICAgICAgIG9uU3RhbGxlZDogbnVsbCwKICAgICAgICBvblN0b3JhZ2U6IG51bGwsCiAgICAgICAgb25TdWJtaXQ6IG51bGwsCiAgICAgICAgb25TdXNwZW5kOiBudWxsLAogICAgICAgIG9uVGltZVVwZGF0ZTogbnVsbCwKICAgICAgICBvblRvZ2dsZTogbnVsbCwKICAgICAgICBvblVubG9hZDogbnVsbCwKICAgICAgICBvblZvbHVtZUNoYW5nZTogbnVsbCwKICAgICAgICBvbldhaXRpbmc6IG51bGwsCiAgICAgICAgb25ab29tOiBudWxsLAogICAgICAgIG9wYWNpdHk6IG51bGwsCiAgICAgICAgb3BlcmF0b3I6IG51bGwsCiAgICAgICAgb3JkZXI6IG51bGwsCiAgICAgICAgb3JpZW50OiBudWxsLAogICAgICAgIG9yaWVudGF0aW9uOiBudWxsLAogICAgICAgIG9yaWdpbjogbnVsbCwKICAgICAgICBvdmVyZmxvdzogbnVsbCwKICAgICAgICBvdmVybGF5OiBudWxsLAogICAgICAgIG92ZXJsaW5lUG9zaXRpb246IG51bWJlciwKICAgICAgICBvdmVybGluZVRoaWNrbmVzczogbnVtYmVyLAogICAgICAgIHBhaW50T3JkZXI6IG51bGwsCiAgICAgICAgcGFub3NlMTogbnVsbCwKICAgICAgICBwYXRoOiBudWxsLAogICAgICAgIHBhdGhMZW5ndGg6IG51bWJlciwKICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzOiBudWxsLAogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm06IG51bGwsCiAgICAgICAgcGF0dGVyblVuaXRzOiBudWxsLAogICAgICAgIHBoYXNlOiBudWxsLAogICAgICAgIHBpbmc6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHBpdGNoOiBudWxsLAogICAgICAgIHBsYXliYWNrT3JkZXI6IG51bGwsCiAgICAgICAgcG9pbnRlckV2ZW50czogbnVsbCwKICAgICAgICBwb2ludHM6IG51bGwsCiAgICAgICAgcG9pbnRzQXRYOiBudW1iZXIsCiAgICAgICAgcG9pbnRzQXRZOiBudW1iZXIsCiAgICAgICAgcG9pbnRzQXRaOiBudW1iZXIsCiAgICAgICAgcHJlc2VydmVBbHBoYTogbnVsbCwKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiBudWxsLAogICAgICAgIHByaW1pdGl2ZVVuaXRzOiBudWxsLAogICAgICAgIHByb3BhZ2F0ZTogbnVsbCwKICAgICAgICBwcm9wZXJ0eTogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHI6IG51bGwsCiAgICAgICAgcmFkaXVzOiBudWxsLAogICAgICAgIHJlZmVycmVyUG9saWN5OiBudWxsLAogICAgICAgIHJlZlg6IG51bGwsCiAgICAgICAgcmVmWTogbnVsbCwKICAgICAgICByZWw6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXY6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZW5kZXJpbmdJbnRlbnQ6IG51bGwsCiAgICAgICAgcmVwZWF0Q291bnQ6IG51bGwsCiAgICAgICAgcmVwZWF0RHVyOiBudWxsLAogICAgICAgIHJlcXVpcmVkRXh0ZW5zaW9uczogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkRmVhdHVyZXM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZEZvbnRzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWRGb3JtYXRzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVzb3VyY2U6IG51bGwsCiAgICAgICAgcmVzdGFydDogbnVsbCwKICAgICAgICByZXN1bHQ6IG51bGwsCiAgICAgICAgcm90YXRlOiBudWxsLAogICAgICAgIHJ4OiBudWxsLAogICAgICAgIHJ5OiBudWxsLAogICAgICAgIHNjYWxlOiBudWxsLAogICAgICAgIHNlZWQ6IG51bGwsCiAgICAgICAgc2hhcGVSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgc2lkZTogbnVsbCwKICAgICAgICBzbG9wZTogbnVsbCwKICAgICAgICBzbmFwc2hvdFRpbWU6IG51bGwsCiAgICAgICAgc3BlY3VsYXJDb25zdGFudDogbnVtYmVyLAogICAgICAgIHNwZWN1bGFyRXhwb25lbnQ6IG51bWJlciwKICAgICAgICBzcHJlYWRNZXRob2Q6IG51bGwsCiAgICAgICAgc3BhY2luZzogbnVsbCwKICAgICAgICBzdGFydE9mZnNldDogbnVsbCwKICAgICAgICBzdGREZXZpYXRpb246IG51bGwsCiAgICAgICAgc3RlbWg6IG51bGwsCiAgICAgICAgc3RlbXY6IG51bGwsCiAgICAgICAgc3RpdGNoVGlsZXM6IG51bGwsCiAgICAgICAgc3RvcENvbG9yOiBudWxsLAogICAgICAgIHN0b3BPcGFjaXR5OiBudWxsLAogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogbnVtYmVyLAogICAgICAgIHN0cmlrZXRocm91Z2hUaGlja25lc3M6IG51bWJlciwKICAgICAgICBzdHJpbmc6IG51bGwsCiAgICAgICAgc3Ryb2tlOiBudWxsLAogICAgICAgIHN0cm9rZURhc2hBcnJheTogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHN0cm9rZURhc2hPZmZzZXQ6IG51bGwsCiAgICAgICAgc3Ryb2tlTGluZUNhcDogbnVsbCwKICAgICAgICBzdHJva2VMaW5lSm9pbjogbnVsbCwKICAgICAgICBzdHJva2VNaXRlckxpbWl0OiBudW1iZXIsCiAgICAgICAgc3Ryb2tlT3BhY2l0eTogbnVtYmVyLAogICAgICAgIHN0cm9rZVdpZHRoOiBudWxsLAogICAgICAgIHN0eWxlOiBudWxsLAogICAgICAgIHN1cmZhY2VTY2FsZTogbnVtYmVyLAogICAgICAgIHN5bmNCZWhhdmlvcjogbnVsbCwKICAgICAgICBzeW5jQmVoYXZpb3JEZWZhdWx0OiBudWxsLAogICAgICAgIHN5bmNNYXN0ZXI6IG51bGwsCiAgICAgICAgc3luY1RvbGVyYW5jZTogbnVsbCwKICAgICAgICBzeW5jVG9sZXJhbmNlRGVmYXVsdDogbnVsbCwKICAgICAgICBzeXN0ZW1MYW5ndWFnZTogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHRhYkluZGV4OiBudW1iZXIsCiAgICAgICAgdGFibGVWYWx1ZXM6IG51bGwsCiAgICAgICAgdGFyZ2V0OiBudWxsLAogICAgICAgIHRhcmdldFg6IG51bWJlciwKICAgICAgICB0YXJnZXRZOiBudW1iZXIsCiAgICAgICAgdGV4dEFuY2hvcjogbnVsbCwKICAgICAgICB0ZXh0RGVjb3JhdGlvbjogbnVsbCwKICAgICAgICB0ZXh0UmVuZGVyaW5nOiBudWxsLAogICAgICAgIHRleHRMZW5ndGg6IG51bGwsCiAgICAgICAgdGltZWxpbmVCZWdpbjogbnVsbCwKICAgICAgICB0aXRsZTogbnVsbCwKICAgICAgICB0cmFuc2Zvcm1CZWhhdmlvcjogbnVsbCwKICAgICAgICB0eXBlOiBudWxsLAogICAgICAgIHR5cGVPZjogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHRvOiBudWxsLAogICAgICAgIHRyYW5zZm9ybTogbnVsbCwKICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IG51bGwsCiAgICAgICAgdTE6IG51bGwsCiAgICAgICAgdTI6IG51bGwsCiAgICAgICAgdW5kZXJsaW5lUG9zaXRpb246IG51bWJlciwKICAgICAgICB1bmRlcmxpbmVUaGlja25lc3M6IG51bWJlciwKICAgICAgICB1bmljb2RlOiBudWxsLAogICAgICAgIHVuaWNvZGVCaWRpOiBudWxsLAogICAgICAgIHVuaWNvZGVSYW5nZTogbnVsbCwKICAgICAgICB1bml0c1BlckVtOiBudW1iZXIsCiAgICAgICAgdmFsdWVzOiBudWxsLAogICAgICAgIHZBbHBoYWJldGljOiBudW1iZXIsCiAgICAgICAgdk1hdGhlbWF0aWNhbDogbnVtYmVyLAogICAgICAgIHZlY3RvckVmZmVjdDogbnVsbCwKICAgICAgICB2SGFuZ2luZzogbnVtYmVyLAogICAgICAgIHZJZGVvZ3JhcGhpYzogbnVtYmVyLAogICAgICAgIHZlcnNpb246IG51bGwsCiAgICAgICAgdmVydEFkdlk6IG51bWJlciwKICAgICAgICB2ZXJ0T3JpZ2luWDogbnVtYmVyLAogICAgICAgIHZlcnRPcmlnaW5ZOiBudW1iZXIsCiAgICAgICAgdmlld0JveDogbnVsbCwKICAgICAgICB2aWV3VGFyZ2V0OiBudWxsLAogICAgICAgIHZpc2liaWxpdHk6IG51bGwsCiAgICAgICAgd2lkdGg6IG51bGwsCiAgICAgICAgd2lkdGhzOiBudWxsLAogICAgICAgIHdvcmRTcGFjaW5nOiBudWxsLAogICAgICAgIHdyaXRpbmdNb2RlOiBudWxsLAogICAgICAgIHg6IG51bGwsCiAgICAgICAgeDE6IG51bGwsCiAgICAgICAgeDI6IG51bGwsCiAgICAgICAgeENoYW5uZWxTZWxlY3RvcjogbnVsbCwKICAgICAgICB4SGVpZ2h0OiBudW1iZXIsCiAgICAgICAgeTogbnVsbCwKICAgICAgICB5MTogbnVsbCwKICAgICAgICB5MjogbnVsbCwKICAgICAgICB5Q2hhbm5lbFNlbGVjdG9yOiBudWxsLAogICAgICAgIHo6IG51bGwsCiAgICAgICAgem9vbUFuZFBhbjogbnVsbAogICAgICB9LAogICAgICBzcGFjZTogInN2ZyIsCiAgICAgIHRyYW5zZm9ybTogY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3hsaW5rLmpzCnZhciB4bGluazsKdmFyIGluaXRfeGxpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3hsaW5rLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICB4bGluayA9IGNyZWF0ZTYoewogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgeExpbmtBY3R1YXRlOiBudWxsLAogICAgICAgIHhMaW5rQXJjUm9sZTogbnVsbCwKICAgICAgICB4TGlua0hyZWY6IG51bGwsCiAgICAgICAgeExpbmtSb2xlOiBudWxsLAogICAgICAgIHhMaW5rU2hvdzogbnVsbCwKICAgICAgICB4TGlua1RpdGxlOiBudWxsLAogICAgICAgIHhMaW5rVHlwZTogbnVsbAogICAgICB9LAogICAgICBzcGFjZTogInhsaW5rIiwKICAgICAgdHJhbnNmb3JtKF80LCBwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiAieGxpbms6IiArIHByb3BlcnR5LnNsaWNlKDUpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcwp2YXIgeG1sbnM7CnZhciBpbml0X3htbG5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgeG1sbnMgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogeyB4bWxuc3hsaW5rOiAieG1sbnM6eGxpbmsiIH0sCiAgICAgIHByb3BlcnRpZXM6IHsgeG1sbnNYTGluazogbnVsbCwgeG1sbnM6IG51bGwgfSwKICAgICAgc3BhY2U6ICJ4bWxucyIsCiAgICAgIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzCnZhciB4bWw7CnZhciBpbml0X3htbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICB4bWwgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogeyB4bWxCYXNlOiBudWxsLCB4bWxMYW5nOiBudWxsLCB4bWxTcGFjZTogbnVsbCB9LAogICAgICBzcGFjZTogInhtbCIsCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gInhtbDoiICsgcHJvcGVydHkuc2xpY2UoMykudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMKdmFyIGluaXRfaGFzdF90b19yZWFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaGFzdC10by1yZWFjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2ZpbmQuanMKZnVuY3Rpb24gZmluZDIoc2NoZW1hLCB2YWx1ZTIpIHsKICBjb25zdCBub3JtYWwgPSBub3JtYWxpemUzKHZhbHVlMik7CiAgbGV0IHByb3BlcnR5ID0gdmFsdWUyOwogIGxldCBUeXBlID0gSW5mbzsKICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHsKICAgIHJldHVybiBzY2hlbWEucHJvcGVydHlbc2NoZW1hLm5vcm1hbFtub3JtYWxdXTsKICB9CiAgaWYgKG5vcm1hbC5sZW5ndGggPiA0ICYmIG5vcm1hbC5zbGljZSgwLCA0KSA9PT0gImRhdGEiICYmIHZhbGlkLnRlc3QodmFsdWUyKSkgewogICAgaWYgKHZhbHVlMi5jaGFyQXQoNCkgPT09ICItIikgewogICAgICBjb25zdCByZXN0ID0gdmFsdWUyLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKTsKICAgICAgcHJvcGVydHkgPSAiZGF0YSIgKyByZXN0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdC5zbGljZSgxKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHJlc3QgPSB2YWx1ZTIuc2xpY2UoNCk7CiAgICAgIGlmICghZGFzaC50ZXN0KHJlc3QpKSB7CiAgICAgICAgbGV0IGRhc2hlcyA9IHJlc3QucmVwbGFjZShjYXAsIGtlYmFiKTsKICAgICAgICBpZiAoZGFzaGVzLmNoYXJBdCgwKSAhPT0gIi0iKSB7CiAgICAgICAgICBkYXNoZXMgPSAiLSIgKyBkYXNoZXM7CiAgICAgICAgfQogICAgICAgIHZhbHVlMiA9ICJkYXRhIiArIGRhc2hlczsKICAgICAgfQogICAgfQogICAgVHlwZSA9IERlZmluZWRJbmZvOwogIH0KICByZXR1cm4gbmV3IFR5cGUocHJvcGVydHksIHZhbHVlMik7Cn0KZnVuY3Rpb24ga2ViYWIoJDApIHsKICByZXR1cm4gIi0iICsgJDAudG9Mb3dlckNhc2UoKTsKfQpmdW5jdGlvbiBjYW1lbGNhc2UoJDApIHsKICByZXR1cm4gJDAuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7Cn0KdmFyIGNhcCwgZGFzaCwgdmFsaWQ7CnZhciBpbml0X2ZpbmQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9maW5kLmpzIigpIHsKICAgIGluaXRfZGVmaW5lZF9pbmZvKCk7CiAgICBpbml0X2luZm8oKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBjYXAgPSAvW0EtWl0vZzsKICAgIGRhc2ggPSAvLVthLXpdL2c7CiAgICB2YWxpZCA9IC9eZGF0YVstXHcuOl0rJC9pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzCnZhciBodG1sNCwgc3ZnMjsKdmFyIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9tZXJnZTMoKTsKICAgIGluaXRfYXJpYSgpOwogICAgaW5pdF9odG1sOSgpOwogICAgaW5pdF9zdmcoKTsKICAgIGluaXRfeGxpbmsoKTsKICAgIGluaXRfeG1sbnMoKTsKICAgIGluaXRfeG1sKCk7CiAgICBpbml0X2hhc3RfdG9fcmVhY3QoKTsKICAgIGluaXRfZmluZDIoKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBodG1sNCA9IG1lcmdlMyhbYXJpYTIsIGh0bWwzLCB4bGluaywgeG1sbnMsIHhtbF0sICJodG1sIik7CiAgICBzdmcyID0gbWVyZ2UzKFthcmlhMiwgc3ZnLCB4bGluaywgeG1sbnMsIHhtbF0sICJzdmciKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzCmZ1bmN0aW9uIGNvcmUodmFsdWUyLCBvcHRpb25zKSB7CiAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoCiAgICBvcHRpb25zLnN1YnNldCA/IGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQob3B0aW9ucy5zdWJzZXQpIDogZGVmYXVsdFN1YnNldFJlZ2V4LAogICAgYmFzaWMKICApOwogIGlmIChvcHRpb25zLnN1YnNldCB8fCBvcHRpb25zLmVzY2FwZU9ubHkpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIHJldHVybiB2YWx1ZTIucmVwbGFjZShzdXJyb2dhdGVQYWlyc1JlZ2V4LCBzdXJyb2dhdGUpLnJlcGxhY2UoY29udHJvbENoYXJhY3RlcnNSZWdleCwgYmFzaWMpOwogIGZ1bmN0aW9uIHN1cnJvZ2F0ZShwYWlyLCBpbmRleDIsIGFsbDMpIHsKICAgIHJldHVybiBvcHRpb25zLmZvcm1hdCgKICAgICAgKHBhaXIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyBwYWlyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCArIDY1NTM2LAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMiksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQogIGZ1bmN0aW9uIGJhc2ljKGNoYXJhY3RlciwgaW5kZXgyLCBhbGwzKSB7CiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoCiAgICAgIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApLAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMSksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQoc3Vic2V0KSB7CiAgbGV0IGNhY2hlZCA9IHN1YnNldFRvUmVnZXhDYWNoZS5nZXQoc3Vic2V0KTsKICBpZiAoIWNhY2hlZCkgewogICAgY2FjaGVkID0gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpOwogICAgc3Vic2V0VG9SZWdleENhY2hlLnNldChzdWJzZXQsIGNhY2hlZCk7CiAgfQogIHJldHVybiBjYWNoZWQ7Cn0KZnVuY3Rpb24gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpIHsKICBjb25zdCBncm91cHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3Vic2V0Lmxlbmd0aCkgewogICAgZ3JvdXBzLnB1c2goc3Vic2V0W2luZGV4Ml0ucmVwbGFjZShyZWdleEVzY2FwZVJlZ2V4LCAiXFwkJiIpKTsKICB9CiAgcmV0dXJuIG5ldyBSZWdFeHAoIig/OiIgKyBncm91cHMuam9pbigifCIpICsgIikiLCAiZyIpOwp9CnZhciBkZWZhdWx0U3Vic2V0UmVnZXgsIHN1cnJvZ2F0ZVBhaXJzUmVnZXgsIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXgsIHJlZ2V4RXNjYXBlUmVnZXgsIHN1YnNldFRvUmVnZXhDYWNoZTsKdmFyIGluaXRfY29yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzIigpIHsKICAgIGRlZmF1bHRTdWJzZXRSZWdleCA9IC9bIiYnPD5gXS9nOwogICAgc3Vycm9nYXRlUGFpcnNSZWdleCA9IC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZzsKICAgIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXggPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCwgdW5pY29ybi9uby1oZXgtZXNjYXBlCiAgICAvW1x4MDEtXHRcdlxmXHgwRS1ceDFGXHg3Rlx4ODFceDhEXHg4Rlx4OTBceDlEXHhBMC1cdUZGRkZdL2c7CiAgICByZWdleEVzY2FwZVJlZ2V4ID0gL1t8XFx7fSgpW1xdXiQrKj8uXS9nOwogICAgc3Vic2V0VG9SZWdleENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1oZXhhZGVjaW1hbC5qcwpmdW5jdGlvbiB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgcmV0dXJuIG9taXQgJiYgbmV4dDIgJiYgIWhleGFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGhleGFkZWNpbWFsUmVnZXg7CnZhciBpbml0X3RvX2hleGFkZWNpbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMiKCkgewogICAgaGV4YWRlY2ltYWxSZWdleCA9IC9bXGRBLUZhLWZdLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMKZnVuY3Rpb24gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImIyIgKyBTdHJpbmcoY29kZTQpOwogIHJldHVybiBvbWl0ICYmIG5leHQyICYmICFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGRlY2ltYWxSZWdleDsKdmFyIGluaXRfdG9fZGVjaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMiKCkgewogICAgZGVjaW1hbFJlZ2V4ID0gL1xkLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMKdmFyIGNoYXJhY3RlckVudGl0aWVzTGVnYWN5Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeUAzLjAuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeS9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeSA9IFsKICAgICAgIkFFbGlnIiwKICAgICAgIkFNUCIsCiAgICAgICJBYWN1dGUiLAogICAgICAiQWNpcmMiLAogICAgICAiQWdyYXZlIiwKICAgICAgIkFyaW5nIiwKICAgICAgIkF0aWxkZSIsCiAgICAgICJBdW1sIiwKICAgICAgIkNPUFkiLAogICAgICAiQ2NlZGlsIiwKICAgICAgIkVUSCIsCiAgICAgICJFYWN1dGUiLAogICAgICAiRWNpcmMiLAogICAgICAiRWdyYXZlIiwKICAgICAgIkV1bWwiLAogICAgICAiR1QiLAogICAgICAiSWFjdXRlIiwKICAgICAgIkljaXJjIiwKICAgICAgIklncmF2ZSIsCiAgICAgICJJdW1sIiwKICAgICAgIkxUIiwKICAgICAgIk50aWxkZSIsCiAgICAgICJPYWN1dGUiLAogICAgICAiT2NpcmMiLAogICAgICAiT2dyYXZlIiwKICAgICAgIk9zbGFzaCIsCiAgICAgICJPdGlsZGUiLAogICAgICAiT3VtbCIsCiAgICAgICJRVU9UIiwKICAgICAgIlJFRyIsCiAgICAgICJUSE9STiIsCiAgICAgICJVYWN1dGUiLAogICAgICAiVWNpcmMiLAogICAgICAiVWdyYXZlIiwKICAgICAgIlV1bWwiLAogICAgICAiWWFjdXRlIiwKICAgICAgImFhY3V0ZSIsCiAgICAgICJhY2lyYyIsCiAgICAgICJhY3V0ZSIsCiAgICAgICJhZWxpZyIsCiAgICAgICJhZ3JhdmUiLAogICAgICAiYW1wIiwKICAgICAgImFyaW5nIiwKICAgICAgImF0aWxkZSIsCiAgICAgICJhdW1sIiwKICAgICAgImJydmJhciIsCiAgICAgICJjY2VkaWwiLAogICAgICAiY2VkaWwiLAogICAgICAiY2VudCIsCiAgICAgICJjb3B5IiwKICAgICAgImN1cnJlbiIsCiAgICAgICJkZWciLAogICAgICAiZGl2aWRlIiwKICAgICAgImVhY3V0ZSIsCiAgICAgICJlY2lyYyIsCiAgICAgICJlZ3JhdmUiLAogICAgICAiZXRoIiwKICAgICAgImV1bWwiLAogICAgICAiZnJhYzEyIiwKICAgICAgImZyYWMxNCIsCiAgICAgICJmcmFjMzQiLAogICAgICAiZ3QiLAogICAgICAiaWFjdXRlIiwKICAgICAgImljaXJjIiwKICAgICAgImlleGNsIiwKICAgICAgImlncmF2ZSIsCiAgICAgICJpcXVlc3QiLAogICAgICAiaXVtbCIsCiAgICAgICJsYXF1byIsCiAgICAgICJsdCIsCiAgICAgICJtYWNyIiwKICAgICAgIm1pY3JvIiwKICAgICAgIm1pZGRvdCIsCiAgICAgICJuYnNwIiwKICAgICAgIm5vdCIsCiAgICAgICJudGlsZGUiLAogICAgICAib2FjdXRlIiwKICAgICAgIm9jaXJjIiwKICAgICAgIm9ncmF2ZSIsCiAgICAgICJvcmRmIiwKICAgICAgIm9yZG0iLAogICAgICAib3NsYXNoIiwKICAgICAgIm90aWxkZSIsCiAgICAgICJvdW1sIiwKICAgICAgInBhcmEiLAogICAgICAicGx1c21uIiwKICAgICAgInBvdW5kIiwKICAgICAgInF1b3QiLAogICAgICAicmFxdW8iLAogICAgICAicmVnIiwKICAgICAgInNlY3QiLAogICAgICAic2h5IiwKICAgICAgInN1cDEiLAogICAgICAic3VwMiIsCiAgICAgICJzdXAzIiwKICAgICAgInN6bGlnIiwKICAgICAgInRob3JuIiwKICAgICAgInRpbWVzIiwKICAgICAgInVhY3V0ZSIsCiAgICAgICJ1Y2lyYyIsCiAgICAgICJ1Z3JhdmUiLAogICAgICAidW1sIiwKICAgICAgInV1bWwiLAogICAgICAieWFjdXRlIiwKICAgICAgInllbiIsCiAgICAgICJ5dW1sIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNEAyLjEuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0L2luZGV4LmpzCnZhciBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDRAMi4xLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0ID0gewogICAgICBuYnNwOiAiXHhBMCIsCiAgICAgIGlleGNsOiAiXHhBMSIsCiAgICAgIGNlbnQ6ICJceEEyIiwKICAgICAgcG91bmQ6ICJceEEzIiwKICAgICAgY3VycmVuOiAiXHhBNCIsCiAgICAgIHllbjogIlx4QTUiLAogICAgICBicnZiYXI6ICJceEE2IiwKICAgICAgc2VjdDogIlx4QTciLAogICAgICB1bWw6ICJceEE4IiwKICAgICAgY29weTogIlx4QTkiLAogICAgICBvcmRmOiAiXHhBQSIsCiAgICAgIGxhcXVvOiAiXHhBQiIsCiAgICAgIG5vdDogIlx4QUMiLAogICAgICBzaHk6ICJceEFEIiwKICAgICAgcmVnOiAiXHhBRSIsCiAgICAgIG1hY3I6ICJceEFGIiwKICAgICAgZGVnOiAiXHhCMCIsCiAgICAgIHBsdXNtbjogIlx4QjEiLAogICAgICBzdXAyOiAiXHhCMiIsCiAgICAgIHN1cDM6ICJceEIzIiwKICAgICAgYWN1dGU6ICJceEI0IiwKICAgICAgbWljcm86ICJceEI1IiwKICAgICAgcGFyYTogIlx4QjYiLAogICAgICBtaWRkb3Q6ICJceEI3IiwKICAgICAgY2VkaWw6ICJceEI4IiwKICAgICAgc3VwMTogIlx4QjkiLAogICAgICBvcmRtOiAiXHhCQSIsCiAgICAgIHJhcXVvOiAiXHhCQiIsCiAgICAgIGZyYWMxNDogIlx4QkMiLAogICAgICBmcmFjMTI6ICJceEJEIiwKICAgICAgZnJhYzM0OiAiXHhCRSIsCiAgICAgIGlxdWVzdDogIlx4QkYiLAogICAgICBBZ3JhdmU6ICJceEMwIiwKICAgICAgQWFjdXRlOiAiXHhDMSIsCiAgICAgIEFjaXJjOiAiXHhDMiIsCiAgICAgIEF0aWxkZTogIlx4QzMiLAogICAgICBBdW1sOiAiXHhDNCIsCiAgICAgIEFyaW5nOiAiXHhDNSIsCiAgICAgIEFFbGlnOiAiXHhDNiIsCiAgICAgIENjZWRpbDogIlx4QzciLAogICAgICBFZ3JhdmU6ICJceEM4IiwKICAgICAgRWFjdXRlOiAiXHhDOSIsCiAgICAgIEVjaXJjOiAiXHhDQSIsCiAgICAgIEV1bWw6ICJceENCIiwKICAgICAgSWdyYXZlOiAiXHhDQyIsCiAgICAgIElhY3V0ZTogIlx4Q0QiLAogICAgICBJY2lyYzogIlx4Q0UiLAogICAgICBJdW1sOiAiXHhDRiIsCiAgICAgIEVUSDogIlx4RDAiLAogICAgICBOdGlsZGU6ICJceEQxIiwKICAgICAgT2dyYXZlOiAiXHhEMiIsCiAgICAgIE9hY3V0ZTogIlx4RDMiLAogICAgICBPY2lyYzogIlx4RDQiLAogICAgICBPdGlsZGU6ICJceEQ1IiwKICAgICAgT3VtbDogIlx4RDYiLAogICAgICB0aW1lczogIlx4RDciLAogICAgICBPc2xhc2g6ICJceEQ4IiwKICAgICAgVWdyYXZlOiAiXHhEOSIsCiAgICAgIFVhY3V0ZTogIlx4REEiLAogICAgICBVY2lyYzogIlx4REIiLAogICAgICBVdW1sOiAiXHhEQyIsCiAgICAgIFlhY3V0ZTogIlx4REQiLAogICAgICBUSE9STjogIlx4REUiLAogICAgICBzemxpZzogIlx4REYiLAogICAgICBhZ3JhdmU6ICJceEUwIiwKICAgICAgYWFjdXRlOiAiXHhFMSIsCiAgICAgIGFjaXJjOiAiXHhFMiIsCiAgICAgIGF0aWxkZTogIlx4RTMiLAogICAgICBhdW1sOiAiXHhFNCIsCiAgICAgIGFyaW5nOiAiXHhFNSIsCiAgICAgIGFlbGlnOiAiXHhFNiIsCiAgICAgIGNjZWRpbDogIlx4RTciLAogICAgICBlZ3JhdmU6ICJceEU4IiwKICAgICAgZWFjdXRlOiAiXHhFOSIsCiAgICAgIGVjaXJjOiAiXHhFQSIsCiAgICAgIGV1bWw6ICJceEVCIiwKICAgICAgaWdyYXZlOiAiXHhFQyIsCiAgICAgIGlhY3V0ZTogIlx4RUQiLAogICAgICBpY2lyYzogIlx4RUUiLAogICAgICBpdW1sOiAiXHhFRiIsCiAgICAgIGV0aDogIlx4RjAiLAogICAgICBudGlsZGU6ICJceEYxIiwKICAgICAgb2dyYXZlOiAiXHhGMiIsCiAgICAgIG9hY3V0ZTogIlx4RjMiLAogICAgICBvY2lyYzogIlx4RjQiLAogICAgICBvdGlsZGU6ICJceEY1IiwKICAgICAgb3VtbDogIlx4RjYiLAogICAgICBkaXZpZGU6ICJceEY3IiwKICAgICAgb3NsYXNoOiAiXHhGOCIsCiAgICAgIHVncmF2ZTogIlx4RjkiLAogICAgICB1YWN1dGU6ICJceEZBIiwKICAgICAgdWNpcmM6ICJceEZCIiwKICAgICAgdXVtbDogIlx4RkMiLAogICAgICB5YWN1dGU6ICJceEZEIiwKICAgICAgdGhvcm46ICJceEZFIiwKICAgICAgeXVtbDogIlx4RkYiLAogICAgICBmbm9mOiAiXHUwMTkyIiwKICAgICAgQWxwaGE6ICJcdTAzOTEiLAogICAgICBCZXRhOiAiXHUwMzkyIiwKICAgICAgR2FtbWE6ICJcdTAzOTMiLAogICAgICBEZWx0YTogIlx1MDM5NCIsCiAgICAgIEVwc2lsb246ICJcdTAzOTUiLAogICAgICBaZXRhOiAiXHUwMzk2IiwKICAgICAgRXRhOiAiXHUwMzk3IiwKICAgICAgVGhldGE6ICJcdTAzOTgiLAogICAgICBJb3RhOiAiXHUwMzk5IiwKICAgICAgS2FwcGE6ICJcdTAzOUEiLAogICAgICBMYW1iZGE6ICJcdTAzOUIiLAogICAgICBNdTogIlx1MDM5QyIsCiAgICAgIE51OiAiXHUwMzlEIiwKICAgICAgWGk6ICJcdTAzOUUiLAogICAgICBPbWljcm9uOiAiXHUwMzlGIiwKICAgICAgUGk6ICJcdTAzQTAiLAogICAgICBSaG86ICJcdTAzQTEiLAogICAgICBTaWdtYTogIlx1MDNBMyIsCiAgICAgIFRhdTogIlx1MDNBNCIsCiAgICAgIFVwc2lsb246ICJcdTAzQTUiLAogICAgICBQaGk6ICJcdTAzQTYiLAogICAgICBDaGk6ICJcdTAzQTciLAogICAgICBQc2k6ICJcdTAzQTgiLAogICAgICBPbWVnYTogIlx1MDNBOSIsCiAgICAgIGFscGhhOiAiXHUwM0IxIiwKICAgICAgYmV0YTogIlx1MDNCMiIsCiAgICAgIGdhbW1hOiAiXHUwM0IzIiwKICAgICAgZGVsdGE6ICJcdTAzQjQiLAogICAgICBlcHNpbG9uOiAiXHUwM0I1IiwKICAgICAgemV0YTogIlx1MDNCNiIsCiAgICAgIGV0YTogIlx1MDNCNyIsCiAgICAgIHRoZXRhOiAiXHUwM0I4IiwKICAgICAgaW90YTogIlx1MDNCOSIsCiAgICAgIGthcHBhOiAiXHUwM0JBIiwKICAgICAgbGFtYmRhOiAiXHUwM0JCIiwKICAgICAgbXU6ICJcdTAzQkMiLAogICAgICBudTogIlx1MDNCRCIsCiAgICAgIHhpOiAiXHUwM0JFIiwKICAgICAgb21pY3JvbjogIlx1MDNCRiIsCiAgICAgIHBpOiAiXHUwM0MwIiwKICAgICAgcmhvOiAiXHUwM0MxIiwKICAgICAgc2lnbWFmOiAiXHUwM0MyIiwKICAgICAgc2lnbWE6ICJcdTAzQzMiLAogICAgICB0YXU6ICJcdTAzQzQiLAogICAgICB1cHNpbG9uOiAiXHUwM0M1IiwKICAgICAgcGhpOiAiXHUwM0M2IiwKICAgICAgY2hpOiAiXHUwM0M3IiwKICAgICAgcHNpOiAiXHUwM0M4IiwKICAgICAgb21lZ2E6ICJcdTAzQzkiLAogICAgICB0aGV0YXN5bTogIlx1MDNEMSIsCiAgICAgIHVwc2loOiAiXHUwM0QyIiwKICAgICAgcGl2OiAiXHUwM0Q2IiwKICAgICAgYnVsbDogIlx1MjAyMiIsCiAgICAgIGhlbGxpcDogIlx1MjAyNiIsCiAgICAgIHByaW1lOiAiXHUyMDMyIiwKICAgICAgUHJpbWU6ICJcdTIwMzMiLAogICAgICBvbGluZTogIlx1MjAzRSIsCiAgICAgIGZyYXNsOiAiXHUyMDQ0IiwKICAgICAgd2VpZXJwOiAiXHUyMTE4IiwKICAgICAgaW1hZ2U6ICJcdTIxMTEiLAogICAgICByZWFsOiAiXHUyMTFDIiwKICAgICAgdHJhZGU6ICJcdTIxMjIiLAogICAgICBhbGVmc3ltOiAiXHUyMTM1IiwKICAgICAgbGFycjogIlx1MjE5MCIsCiAgICAgIHVhcnI6ICJcdTIxOTEiLAogICAgICByYXJyOiAiXHUyMTkyIiwKICAgICAgZGFycjogIlx1MjE5MyIsCiAgICAgIGhhcnI6ICJcdTIxOTQiLAogICAgICBjcmFycjogIlx1MjFCNSIsCiAgICAgIGxBcnI6ICJcdTIxRDAiLAogICAgICB1QXJyOiAiXHUyMUQxIiwKICAgICAgckFycjogIlx1MjFEMiIsCiAgICAgIGRBcnI6ICJcdTIxRDMiLAogICAgICBoQXJyOiAiXHUyMUQ0IiwKICAgICAgZm9yYWxsOiAiXHUyMjAwIiwKICAgICAgcGFydDogIlx1MjIwMiIsCiAgICAgIGV4aXN0OiAiXHUyMjAzIiwKICAgICAgZW1wdHk6ICJcdTIyMDUiLAogICAgICBuYWJsYTogIlx1MjIwNyIsCiAgICAgIGlzaW46ICJcdTIyMDgiLAogICAgICBub3RpbjogIlx1MjIwOSIsCiAgICAgIG5pOiAiXHUyMjBCIiwKICAgICAgcHJvZDogIlx1MjIwRiIsCiAgICAgIHN1bTogIlx1MjIxMSIsCiAgICAgIG1pbnVzOiAiXHUyMjEyIiwKICAgICAgbG93YXN0OiAiXHUyMjE3IiwKICAgICAgcmFkaWM6ICJcdTIyMUEiLAogICAgICBwcm9wOiAiXHUyMjFEIiwKICAgICAgaW5maW46ICJcdTIyMUUiLAogICAgICBhbmc6ICJcdTIyMjAiLAogICAgICBhbmQ6ICJcdTIyMjciLAogICAgICBvcjogIlx1MjIyOCIsCiAgICAgIGNhcDogIlx1MjIyOSIsCiAgICAgIGN1cDogIlx1MjIyQSIsCiAgICAgIGludDogIlx1MjIyQiIsCiAgICAgIHRoZXJlNDogIlx1MjIzNCIsCiAgICAgIHNpbTogIlx1MjIzQyIsCiAgICAgIGNvbmc6ICJcdTIyNDUiLAogICAgICBhc3ltcDogIlx1MjI0OCIsCiAgICAgIG5lOiAiXHUyMjYwIiwKICAgICAgZXF1aXY6ICJcdTIyNjEiLAogICAgICBsZTogIlx1MjI2NCIsCiAgICAgIGdlOiAiXHUyMjY1IiwKICAgICAgc3ViOiAiXHUyMjgyIiwKICAgICAgc3VwOiAiXHUyMjgzIiwKICAgICAgbnN1YjogIlx1MjI4NCIsCiAgICAgIHN1YmU6ICJcdTIyODYiLAogICAgICBzdXBlOiAiXHUyMjg3IiwKICAgICAgb3BsdXM6ICJcdTIyOTUiLAogICAgICBvdGltZXM6ICJcdTIyOTciLAogICAgICBwZXJwOiAiXHUyMkE1IiwKICAgICAgc2RvdDogIlx1MjJDNSIsCiAgICAgIGxjZWlsOiAiXHUyMzA4IiwKICAgICAgcmNlaWw6ICJcdTIzMDkiLAogICAgICBsZmxvb3I6ICJcdTIzMEEiLAogICAgICByZmxvb3I6ICJcdTIzMEIiLAogICAgICBsYW5nOiAiXHUyMzI5IiwKICAgICAgcmFuZzogIlx1MjMyQSIsCiAgICAgIGxvejogIlx1MjVDQSIsCiAgICAgIHNwYWRlczogIlx1MjY2MCIsCiAgICAgIGNsdWJzOiAiXHUyNjYzIiwKICAgICAgaGVhcnRzOiAiXHUyNjY1IiwKICAgICAgZGlhbXM6ICJcdTI2NjYiLAogICAgICBxdW90OiAnIicsCiAgICAgIGFtcDogIiYiLAogICAgICBsdDogIjwiLAogICAgICBndDogIj4iLAogICAgICBPRWxpZzogIlx1MDE1MiIsCiAgICAgIG9lbGlnOiAiXHUwMTUzIiwKICAgICAgU2Nhcm9uOiAiXHUwMTYwIiwKICAgICAgc2Nhcm9uOiAiXHUwMTYxIiwKICAgICAgWXVtbDogIlx1MDE3OCIsCiAgICAgIGNpcmM6ICJcdTAyQzYiLAogICAgICB0aWxkZTogIlx1MDJEQyIsCiAgICAgIGVuc3A6ICJcdTIwMDIiLAogICAgICBlbXNwOiAiXHUyMDAzIiwKICAgICAgdGhpbnNwOiAiXHUyMDA5IiwKICAgICAgenduajogIlx1MjAwQyIsCiAgICAgIHp3ajogIlx1MjAwRCIsCiAgICAgIGxybTogIlx1MjAwRSIsCiAgICAgIHJsbTogIlx1MjAwRiIsCiAgICAgIG5kYXNoOiAiXHUyMDEzIiwKICAgICAgbWRhc2g6ICJcdTIwMTQiLAogICAgICBsc3F1bzogIlx1MjAxOCIsCiAgICAgIHJzcXVvOiAiXHUyMDE5IiwKICAgICAgc2JxdW86ICJcdTIwMUEiLAogICAgICBsZHF1bzogIlx1MjAxQyIsCiAgICAgIHJkcXVvOiAiXHUyMDFEIiwKICAgICAgYmRxdW86ICJcdTIwMUUiLAogICAgICBkYWdnZXI6ICJcdTIwMjAiLAogICAgICBEYWdnZXI6ICJcdTIwMjEiLAogICAgICBwZXJtaWw6ICJcdTIwMzAiLAogICAgICBsc2FxdW86ICJcdTIwMzkiLAogICAgICByc2FxdW86ICJcdTIwM0EiLAogICAgICBldXJvOiAiXHUyMEFDIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb25zdGFudC9kYW5nZXJvdXMuanMKdmFyIGRhbmdlcm91czsKdmFyIGluaXRfZGFuZ2Vyb3VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2NvbnN0YW50L2Rhbmdlcm91cy5qcyIoKSB7CiAgICBkYW5nZXJvdXMgPSBbCiAgICAgICJjZW50IiwKICAgICAgImNvcHkiLAogICAgICAiZGl2aWRlIiwKICAgICAgImd0IiwKICAgICAgImx0IiwKICAgICAgIm5vdCIsCiAgICAgICJwYXJhIiwKICAgICAgInRpbWVzIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzCmZ1bmN0aW9uIHRvTmFtZWQoY29kZTQsIG5leHQyLCBvbWl0LCBhdHRyaWJ1dGUpIHsKICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICBpZiAob3duOS5jYWxsKGNoYXJhY3RlcnMsIGNoYXJhY3RlcikpIHsKICAgIGNvbnN0IG5hbWUgPSBjaGFyYWN0ZXJzW2NoYXJhY3Rlcl07CiAgICBjb25zdCB2YWx1ZTIgPSAiJiIgKyBuYW1lOwogICAgaWYgKG9taXQgJiYgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kuaW5jbHVkZXMobmFtZSkgJiYgIWRhbmdlcm91cy5pbmNsdWRlcyhuYW1lKSAmJiAoIWF0dHJpYnV0ZSB8fCBuZXh0MiAmJiBuZXh0MiAhPT0gNjEgJiYgbm90QWxwaGFudW1lcmljUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkpKSB7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICByZXR1cm4gdmFsdWUyICsgIjsiOwogIH0KICByZXR1cm4gIiI7Cn0KdmFyIG93bjksIGNoYXJhY3RlcnMsIGtleSwgbm90QWxwaGFudW1lcmljUmVnZXg7CnZhciBpbml0X3RvX25hbWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8tbmFtZWQuanMiKCkgewogICAgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5KCk7CiAgICBpbml0X2NoYXJhY3Rlcl9lbnRpdGllc19odG1sNCgpOwogICAgaW5pdF9kYW5nZXJvdXMoKTsKICAgIG93bjkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGNoYXJhY3RlcnMgPSB7fTsKICAgIGZvciAoa2V5IGluIGNoYXJhY3RlckVudGl0aWVzSHRtbDQpIHsKICAgICAgaWYgKG93bjkuY2FsbChjaGFyYWN0ZXJFbnRpdGllc0h0bWw0LCBrZXkpKSB7CiAgICAgICAgY2hhcmFjdGVyc1tjaGFyYWN0ZXJFbnRpdGllc0h0bWw0W2tleV1dID0ga2V5OwogICAgICB9CiAgICB9CiAgICBub3RBbHBoYW51bWVyaWNSZWdleCA9IC9bXlxkQS1aYS16XS87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC9mb3JtYXQtc21hcnQuanMKZnVuY3Rpb24gZm9ybWF0U21hcnQoY29kZTQsIG5leHQyLCBvcHRpb25zKSB7CiAgbGV0IG51bWVyaWMgPSB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICBsZXQgbmFtZWQ7CiAgaWYgKG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzIHx8IG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBuYW1lZCA9IHRvTmFtZWQoCiAgICAgIGNvZGU0LAogICAgICBuZXh0MiwKICAgICAgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zLAogICAgICBvcHRpb25zLmF0dHJpYnV0ZQogICAgKTsKICB9CiAgaWYgKChvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCAhbmFtZWQpICYmIG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBjb25zdCBkZWNpbWFsID0gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IG51bWVyaWMubGVuZ3RoKSB7CiAgICAgIG51bWVyaWMgPSBkZWNpbWFsOwogICAgfQogIH0KICByZXR1cm4gbmFtZWQgJiYgKCFvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCBuYW1lZC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkgPyBuYW1lZCA6IG51bWVyaWM7Cn0KdmFyIGluaXRfZm9ybWF0X3NtYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzIigpIHsKICAgIGluaXRfdG9faGV4YWRlY2ltYWwoKTsKICAgIGluaXRfdG9fZGVjaW1hbCgpOwogICAgaW5pdF90b19uYW1lZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzCmZ1bmN0aW9uIGZvcm1hdEJhc2ljKGNvZGU0KSB7CiAgcmV0dXJuICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyAiOyI7Cn0KdmFyIGluaXRfZm9ybWF0X2Jhc2ljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllcyh2YWx1ZTIsIG9wdGlvbnMpIHsKICByZXR1cm4gY29yZSh2YWx1ZTIsIE9iamVjdC5hc3NpZ24oeyBmb3JtYXQ6IGZvcm1hdFNtYXJ0IH0sIG9wdGlvbnMpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllc0xpZ2h0KHZhbHVlMiwgb3B0aW9ucykgewogIHJldHVybiBjb3JlKHZhbHVlMiwgT2JqZWN0LmFzc2lnbih7IGZvcm1hdDogZm9ybWF0QmFzaWMgfSwgb3B0aW9ucykpOwp9CnZhciBpbml0X2xpYjI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29yZSgpOwogICAgaW5pdF9mb3JtYXRfc21hcnQoKTsKICAgIGluaXRfZm9ybWF0X2Jhc2ljKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcwp2YXIgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9jb21tZW50LmpzCmZ1bmN0aW9uIGNvbW1lbnQyKG5vZGUyLCBfMSwgXzIyLCBzdGF0ZSkgewogIHJldHVybiBzdGF0ZS5zZXR0aW5ncy5ib2d1c0NvbW1lbnRzID8gIjw/IiArIHN0cmluZ2lmeUVudGl0aWVzKAogICAgbm9kZTIudmFsdWUsCiAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIHN1YnNldDogYm9ndXNDb21tZW50RW50aXR5U3Vic2V0CiAgICB9KQogICkgKyAiPiIgOiAiPCEtLSIgKyBub2RlMi52YWx1ZS5yZXBsYWNlKGh0bWxDb21tZW50UmVnZXgsIGVuY29kZTIpICsgIi0tPiI7CiAgZnVuY3Rpb24gZW5jb2RlMigkMCkgewogICAgcmV0dXJuIHN0cmluZ2lmeUVudGl0aWVzKAogICAgICAkMCwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIHN1YnNldDogY29tbWVudEVudGl0eVN1YnNldAogICAgICB9KQogICAgKTsKICB9Cn0KdmFyIGh0bWxDb21tZW50UmVnZXgsIGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldCwgY29tbWVudEVudGl0eVN1YnNldDsKdmFyIGluaXRfY29tbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2NvbW1lbnQuanMiKCkgewogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGh0bWxDb21tZW50UmVnZXggPSAvXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nOwogICAgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0ID0gWyI+Il07CiAgICBjb21tZW50RW50aXR5U3Vic2V0ID0gWyI8IiwgIj4iXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2RvY3R5cGUuanMKZnVuY3Rpb24gZG9jdHlwZTIoXzEsIF8yMiwgXzMyLCBzdGF0ZSkgewogIHJldHVybiAiPCEiICsgKHN0YXRlLnNldHRpbmdzLnVwcGVyRG9jdHlwZSA/ICJET0NUWVBFIiA6ICJkb2N0eXBlIikgKyAoc3RhdGUuc2V0dGluZ3MudGlnaHREb2N0eXBlID8gIiIgOiAiICIpICsgImh0bWw+IjsKfQp2YXIgaW5pdF9kb2N0eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzCmZ1bmN0aW9uIHBhcnNlNSh2YWx1ZTIpIHsKICBjb25zdCB0b2tlbnMgPSBbXTsKICBjb25zdCBpbnB1dCA9IFN0cmluZyh2YWx1ZTIgfHwgIiIpOwogIGxldCBpbmRleDIgPSBpbnB1dC5pbmRleE9mKCIsIik7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgZW5kMyA9IGZhbHNlOwogIHdoaWxlICghZW5kMykgewogICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgaW5kZXgyID0gaW5wdXQubGVuZ3RoOwogICAgICBlbmQzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IHRva2VuID0gaW5wdXQuc2xpY2Uoc3RhcnQsIGluZGV4MikudHJpbSgpOwogICAgaWYgKHRva2VuIHx8ICFlbmQzKSB7CiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKICAgIH0KICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgIGluZGV4MiA9IGlucHV0LmluZGV4T2YoIiwiLCBzdGFydCk7CiAgfQogIHJldHVybiB0b2tlbnM7Cn0KZnVuY3Rpb24gc3RyaW5naWZ5Myh2YWx1ZXMsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgaW5wdXQgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSAiIiA/IFsuLi52YWx1ZXMsICIiXSA6IHZhbHVlczsKICByZXR1cm4gaW5wdXQuam9pbigKICAgIChzZXR0aW5ncy5wYWRSaWdodCA/ICIgIiA6ICIiKSArICIsIiArIChzZXR0aW5ncy5wYWRMZWZ0ID09PSBmYWxzZSA/ICIiIDogIiAiKQogICkudHJpbSgpOwp9CnZhciBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3NwYWNlLXNlcGFyYXRlZC10b2tlbnNAMi4wLjIvbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMKZnVuY3Rpb24gcGFyc2U2KHZhbHVlMikgewogIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlMiB8fCAiIikudHJpbSgpOwogIHJldHVybiBpbnB1dCA/IGlucHV0LnNwbGl0KC9bIFx0XG5cclxmXSsvZykgOiBbXTsKfQpmdW5jdGlvbiBzdHJpbmdpZnk0KHZhbHVlcykgewogIHJldHVybiB2YWx1ZXMuam9pbigiICIpLnRyaW0oKTsKfQp2YXIgaW5pdF9zcGFjZV9zZXBhcmF0ZWRfdG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMi9ub2RlX21vZHVsZXMvc3BhY2Utc2VwYXJhdGVkLXRva2Vucy9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHdoaXRlc3BhY2UodGhpbmcpIHsKICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiA/IHRoaW5nLnR5cGUgPT09ICJ0ZXh0IiA/IGVtcHR5Myh0aGluZy52YWx1ZSkgOiBmYWxzZSA6IGVtcHR5Myh0aGluZyk7Cn0KZnVuY3Rpb24gZW1wdHkzKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShyZSwgIiIpID09PSAiIjsKfQp2YXIgcmU7CnZhciBpbml0X2xpYjI5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZSA9IC9bIFx0XG5cZlxyXS9nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcwpmdW5jdGlvbiBzaWJsaW5ncyhpbmNyZW1lbnQyKSB7CiAgcmV0dXJuIHNpYmxpbmc7CiAgZnVuY3Rpb24gc2libGluZyhwYXJlbnQsIGluZGV4MiwgaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IGVtcHR5Q2hpbGRyZW47CiAgICBsZXQgb2Zmc2V0ID0gKGluZGV4MiB8fCAwKSArIGluY3JlbWVudDI7CiAgICBsZXQgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgIGlmICghaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgICAgd2hpbGUgKG5leHQyICYmIHdoaXRlc3BhY2UobmV4dDIpKSB7CiAgICAgICAgb2Zmc2V0ICs9IGluY3JlbWVudDI7CiAgICAgICAgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQyOwogIH0KfQp2YXIgc2libGluZ0FmdGVyLCBzaWJsaW5nQmVmb3JlLCBlbXB0eUNoaWxkcmVuOwp2YXIgaW5pdF9zaWJsaW5ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBzaWJsaW5nQWZ0ZXIgPSBzaWJsaW5ncygxKTsKICAgIHNpYmxpbmdCZWZvcmUgPSBzaWJsaW5ncygtMSk7CiAgICBlbXB0eUNoaWxkcmVuID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzCmZ1bmN0aW9uIG9taXNzaW9uKGhhbmRsZXJzMikgewogIHJldHVybiBvbWl0OwogIGZ1bmN0aW9uIG9taXQobm9kZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gb3duMTAuY2FsbChoYW5kbGVyczIsIG5vZGUyLnRhZ05hbWUpICYmIGhhbmRsZXJzMltub2RlMi50YWdOYW1lXShub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgb3duMTA7CnZhciBpbml0X29taXNzaW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9vbWlzc2lvbi5qcyIoKSB7CiAgICBvd24xMCA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9jbG9zaW5nLmpzCmZ1bmN0aW9uIGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyLCB0cnVlKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKG5leHQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKG5leHQyLnZhbHVlLmNoYXJBdCgwKSkpOwp9CmZ1bmN0aW9uIGh0bWw1KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBib2R5KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBwNChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuIG5leHQyID8gbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiYWRkcmVzcyIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImFydGljbGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJhc2lkZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImJsb2NrcXVvdGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZXRhaWxzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGl2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGwiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWVsZHNldCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZ2NhcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWd1cmUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb290ZXIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb3JtIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDEiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoMiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImgzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoNSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImg2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGVhZGVyIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGdyb3VwIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaHIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJtYWluIiB8fCBuZXh0Mi50YWdOYW1lID09PSAibWVudSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm5hdiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm9sIiB8fCBuZXh0Mi50YWdOYW1lID09PSAicCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInByZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInNlY3Rpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0YWJsZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInVsIikgOiAhcGFyZW50IHx8IC8vIENvbmZ1c2luZyBwYXJlbnQuCiAgIShwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gImEiIHx8IHBhcmVudC50YWdOYW1lID09PSAiYXVkaW8iIHx8IHBhcmVudC50YWdOYW1lID09PSAiZGVsIiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gImlucyIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJtYXAiIHx8IHBhcmVudC50YWdOYW1lID09PSAibm9zY3JpcHQiIHx8IHBhcmVudC50YWdOYW1lID09PSAidmlkZW8iKSk7Cn0KZnVuY3Rpb24gbGkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIG5leHQyLnRhZ05hbWUgPT09ICJsaSI7Cn0KZnVuY3Rpb24gZHQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiBCb29sZWFuKAogICAgbmV4dDIgJiYgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiZHQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZCIpCiAgKTsKfQpmdW5jdGlvbiBkZChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJkdCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRkIik7Cn0KZnVuY3Rpb24gcnVieUVsZW1lbnQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAicnAiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJydCIpOwp9CmZ1bmN0aW9uIG9wdGdyb3VwKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBuZXh0Mi50YWdOYW1lID09PSAib3B0Z3JvdXAiOwp9CmZ1bmN0aW9uIG9wdGlvbihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJvcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJvcHRncm91cCIpOwp9CmZ1bmN0aW9uIHRoZWFkKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gQm9vbGVhbigKICAgIG5leHQyICYmIG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gInRib2R5IiB8fCBuZXh0Mi50YWdOYW1lID09PSAidGZvb3QiKQogICk7Cn0KZnVuY3Rpb24gdGJvZHkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAidGJvZHkiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0Zm9vdCIpOwp9CmZ1bmN0aW9uIHRmb290KF80LCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiAhc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKfQpmdW5jdGlvbiB0cihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgbmV4dDIudGFnTmFtZSA9PT0gInRyIjsKfQpmdW5jdGlvbiBjZWxscyhfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJ0ZCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRoIik7Cn0KdmFyIGNsb3Npbmc7CnZhciBpbml0X2Nsb3NpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9vbWlzc2lvbigpOwogICAgY2xvc2luZyA9IG9taXNzaW9uKHsKICAgICAgYm9keSwKICAgICAgY2FwdGlvbjogaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24sCiAgICAgIGNvbGdyb3VwOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgZGQsCiAgICAgIGR0LAogICAgICBoZWFkOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgaHRtbDogaHRtbDUsCiAgICAgIGxpLAogICAgICBvcHRncm91cCwKICAgICAgb3B0aW9uLAogICAgICBwOiBwNCwKICAgICAgcnA6IHJ1YnlFbGVtZW50LAogICAgICBydDogcnVieUVsZW1lbnQsCiAgICAgIHRib2R5LAogICAgICB0ZDogY2VsbHMsCiAgICAgIHRmb290LAogICAgICB0aDogY2VsbHMsCiAgICAgIHRoZWFkLAogICAgICB0cgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMKZnVuY3Rpb24gaHRtbDYobm9kZTIpIHsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIHJldHVybiAhaGVhZDIgfHwgaGVhZDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIGhlYWQobm9kZTIpIHsKICBjb25zdCBzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBmb3IgKGNvbnN0IGNoaWxkMiBvZiBub2RlMi5jaGlsZHJlbikgewogICAgaWYgKGNoaWxkMi50eXBlID09PSAiZWxlbWVudCIgJiYgKGNoaWxkMi50YWdOYW1lID09PSAiYmFzZSIgfHwgY2hpbGQyLnRhZ05hbWUgPT09ICJ0aXRsZSIpKSB7CiAgICAgIGlmIChzZWVuLmhhcyhjaGlsZDIudGFnTmFtZSkpIHJldHVybiBmYWxzZTsKICAgICAgc2Vlbi5hZGQoY2hpbGQyLnRhZ05hbWUpOwogICAgfQogIH0KICBjb25zdCBjaGlsZCA9IG5vZGUyLmNoaWxkcmVuWzBdOwogIHJldHVybiAhY2hpbGQgfHwgY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiOwp9CmZ1bmN0aW9uIGJvZHkyKG5vZGUyKSB7CiAgY29uc3QgaGVhZDIgPSBzaWJsaW5nQWZ0ZXIobm9kZTIsIC0xLCB0cnVlKTsKICByZXR1cm4gIWhlYWQyIHx8IGhlYWQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKGhlYWQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKGhlYWQyLnZhbHVlLmNoYXJBdCgwKSkpICYmICEoaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChoZWFkMi50YWdOYW1lID09PSAibWV0YSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gImxpbmsiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzY3JpcHQiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzdHlsZSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInRlbXBsYXRlIikpOwp9CmZ1bmN0aW9uIGNvbGdyb3VwKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IHByZXZpb3VzMyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleDIpOwogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSwgdHJ1ZSk7CiAgaWYgKHBhcmVudCAmJiBwcmV2aW91czMgJiYgcHJldmlvdXMzLnR5cGUgPT09ICJlbGVtZW50IiAmJiBwcmV2aW91czMudGFnTmFtZSA9PT0gImNvbGdyb3VwIiAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gImNvbCIpOwp9CmZ1bmN0aW9uIHRib2R5Mihub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBwcmV2aW91czMgPSBzaWJsaW5nQmVmb3JlKHBhcmVudCwgaW5kZXgyKTsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIGlmIChwYXJlbnQgJiYgcHJldmlvdXMzICYmIHByZXZpb3VzMy50eXBlID09PSAiZWxlbWVudCIgJiYgKHByZXZpb3VzMy50YWdOYW1lID09PSAidGhlYWQiIHx8IHByZXZpb3VzMy50YWdOYW1lID09PSAidGJvZHkiKSAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gInRyIik7Cn0KdmFyIG9wZW5pbmc7CnZhciBpbml0X29wZW5pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9jbG9zaW5nKCk7CiAgICBpbml0X29taXNzaW9uKCk7CiAgICBvcGVuaW5nID0gb21pc3Npb24oewogICAgICBib2R5OiBib2R5MiwKICAgICAgY29sZ3JvdXAsCiAgICAgIGhlYWQsCiAgICAgIGh0bWw6IGh0bWw2LAogICAgICB0Ym9keTogdGJvZHkyCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2VsZW1lbnQuanMKZnVuY3Rpb24gZWxlbWVudDMobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZSkgewogIGNvbnN0IHNjaGVtYSA9IHN0YXRlLnNjaGVtYTsKICBjb25zdCBvbWl0ID0gc2NoZW1hLnNwYWNlID09PSAic3ZnIiA/IGZhbHNlIDogc3RhdGUuc2V0dGluZ3Mub21pdE9wdGlvbmFsVGFnczsKICBsZXQgc2VsZkNsb3NpbmcgPSBzY2hlbWEuc3BhY2UgPT09ICJzdmciID8gc3RhdGUuc2V0dGluZ3MuY2xvc2VFbXB0eUVsZW1lbnRzIDogc3RhdGUuc2V0dGluZ3Mudm9pZHMuaW5jbHVkZXMobm9kZTIudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICBjb25zdCBwYXJ0cyA9IFtdOwogIGxldCBsYXN0MzsKICBpZiAoc2NoZW1hLnNwYWNlID09PSAiaHRtbCIgJiYgbm9kZTIudGFnTmFtZSA9PT0gInN2ZyIpIHsKICAgIHN0YXRlLnNjaGVtYSA9IHN2ZzI7CiAgfQogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZXJpYWxpemVBdHRyaWJ1dGVzKHN0YXRlLCBub2RlMi5wcm9wZXJ0aWVzKTsKICBjb25zdCBjb250ZW50MyA9IHN0YXRlLmFsbCgKICAgIHNjaGVtYS5zcGFjZSA9PT0gImh0bWwiICYmIG5vZGUyLnRhZ05hbWUgPT09ICJ0ZW1wbGF0ZSIgPyBub2RlMi5jb250ZW50IDogbm9kZTIKICApOwogIHN0YXRlLnNjaGVtYSA9IHNjaGVtYTsKICBpZiAoY29udGVudDMpIHNlbGZDbG9zaW5nID0gZmFsc2U7CiAgaWYgKGF0dHJpYnV0ZXMgfHwgIW9taXQgfHwgIW9wZW5pbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkgewogICAgcGFydHMucHVzaCgiPCIsIG5vZGUyLnRhZ05hbWUsIGF0dHJpYnV0ZXMgPyAiICIgKyBhdHRyaWJ1dGVzIDogIiIpOwogICAgaWYgKHNlbGZDbG9zaW5nICYmIChzY2hlbWEuc3BhY2UgPT09ICJzdmciIHx8IHN0YXRlLnNldHRpbmdzLmNsb3NlU2VsZkNsb3NpbmcpKSB7CiAgICAgIGxhc3QzID0gYXR0cmlidXRlcy5jaGFyQXQoYXR0cmlidXRlcy5sZW5ndGggLSAxKTsKICAgICAgaWYgKCFzdGF0ZS5zZXR0aW5ncy50aWdodFNlbGZDbG9zaW5nIHx8IGxhc3QzID09PSAiLyIgfHwgbGFzdDMgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgICAgcGFydHMucHVzaCgiICIpOwogICAgICB9CiAgICAgIHBhcnRzLnB1c2goIi8iKTsKICAgIH0KICAgIHBhcnRzLnB1c2goIj4iKTsKICB9CiAgcGFydHMucHVzaChjb250ZW50Myk7CiAgaWYgKCFzZWxmQ2xvc2luZyAmJiAoIW9taXQgfHwgIWNsb3Npbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkpIHsKICAgIHBhcnRzLnB1c2goIjwvIiArIG5vZGUyLnRhZ05hbWUgKyAiPiIpOwogIH0KICByZXR1cm4gcGFydHMuam9pbigiIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlcyhzdGF0ZSwgcHJvcGVydGllczIpIHsKICBjb25zdCB2YWx1ZXMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKHByb3BlcnRpZXMyKSB7CiAgICBmb3IgKGtleTIgaW4gcHJvcGVydGllczIpIHsKICAgICAgaWYgKHByb3BlcnRpZXMyW2tleTJdICE9PSBudWxsICYmIHByb3BlcnRpZXMyW2tleTJdICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUsIGtleTIsIHByb3BlcnRpZXMyW2tleTJdKTsKICAgICAgICBpZiAodmFsdWUyKSB2YWx1ZXMucHVzaCh2YWx1ZTIpOwogICAgICB9CiAgICB9CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgIGNvbnN0IGxhc3QzID0gc3RhdGUuc2V0dGluZ3MudGlnaHRBdHRyaWJ1dGVzID8gdmFsdWVzW2luZGV4Ml0uY2hhckF0KHZhbHVlc1tpbmRleDJdLmxlbmd0aCAtIDEpIDogdm9pZCAwOwogICAgaWYgKGluZGV4MiAhPT0gdmFsdWVzLmxlbmd0aCAtIDEgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgIHZhbHVlc1tpbmRleDJdICs9ICIgIjsKICAgIH0KICB9CiAgcmV0dXJuIHZhbHVlcy5qb2luKCIiKTsKfQpmdW5jdGlvbiBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUsIGtleTIsIHZhbHVlMikgewogIGNvbnN0IGluZm8gPSBmaW5kMihzdGF0ZS5zY2hlbWEsIGtleTIpOwogIGNvbnN0IHg0ID0gc3RhdGUuc2V0dGluZ3MuYWxsb3dQYXJzZUVycm9ycyAmJiBzdGF0ZS5zY2hlbWEuc3BhY2UgPT09ICJodG1sIiA/IDAgOiAxOwogIGNvbnN0IHk0ID0gc3RhdGUuc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzID8gMCA6IDE7CiAgbGV0IHF1b3RlID0gc3RhdGUucXVvdGU7CiAgbGV0IHJlc3VsdDsKICBpZiAoaW5mby5vdmVybG9hZGVkQm9vbGVhbiAmJiAodmFsdWUyID09PSBpbmZvLmF0dHJpYnV0ZSB8fCB2YWx1ZTIgPT09ICIiKSkgewogICAgdmFsdWUyID0gdHJ1ZTsKICB9IGVsc2UgaWYgKChpbmZvLmJvb2xlYW4gfHwgaW5mby5vdmVybG9hZGVkQm9vbGVhbikgJiYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciIHx8IHZhbHVlMiA9PT0gaW5mby5hdHRyaWJ1dGUgfHwgdmFsdWUyID09PSAiIikpIHsKICAgIHZhbHVlMiA9IEJvb2xlYW4odmFsdWUyKTsKICB9CiAgaWYgKHZhbHVlMiA9PT0gbnVsbCB8fCB2YWx1ZTIgPT09IHZvaWQgMCB8fCB2YWx1ZTIgPT09IGZhbHNlIHx8IHR5cGVvZiB2YWx1ZTIgPT09ICJudW1iZXIiICYmIE51bWJlci5pc05hTih2YWx1ZTIpKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IG5hbWUgPSBzdHJpbmdpZnlFbnRpdGllcygKICAgIGluZm8uYXR0cmlidXRlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLgogICAgICBzdWJzZXQ6IGNvbnN0YW50cy5uYW1lW3g0XVt5NF0KICAgIH0pCiAgKTsKICBpZiAodmFsdWUyID09PSB0cnVlKSByZXR1cm4gbmFtZTsKICB2YWx1ZTIgPSBBcnJheS5pc0FycmF5KHZhbHVlMikgPyAoaW5mby5jb21tYVNlcGFyYXRlZCA/IHN0cmluZ2lmeTMgOiBzdHJpbmdpZnk0KSh2YWx1ZTIsIHsKICAgIHBhZExlZnQ6ICFzdGF0ZS5zZXR0aW5ncy50aWdodENvbW1hU2VwYXJhdGVkTGlzdHMKICB9KSA6IFN0cmluZyh2YWx1ZTIpOwogIGlmIChzdGF0ZS5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyAmJiAhdmFsdWUyKSByZXR1cm4gbmFtZTsKICBpZiAoc3RhdGUuc2V0dGluZ3MucHJlZmVyVW5xdW90ZWQpIHsKICAgIHJlc3VsdCA9IHN0cmluZ2lmeUVudGl0aWVzKAogICAgICB2YWx1ZTIsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHsKICAgICAgICBhdHRyaWJ1dGU6IHRydWUsCiAgICAgICAgc3Vic2V0OiBjb25zdGFudHMudW5xdW90ZWRbeDRdW3k0XQogICAgICB9KQogICAgKTsKICB9CiAgaWYgKHJlc3VsdCAhPT0gdmFsdWUyKSB7CiAgICBpZiAoc3RhdGUuc2V0dGluZ3MucXVvdGVTbWFydCAmJiBjY291bnQodmFsdWUyLCBxdW90ZSkgPiBjY291bnQodmFsdWUyLCBzdGF0ZS5hbHRlcm5hdGl2ZSkpIHsKICAgICAgcXVvdGUgPSBzdGF0ZS5hbHRlcm5hdGl2ZTsKICAgIH0KICAgIHJlc3VsdCA9IHF1b3RlICsgc3RyaW5naWZ5RW50aXRpZXMoCiAgICAgIHZhbHVlMiwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuCiAgICAgICAgc3Vic2V0OiAocXVvdGUgPT09ICInIiA/IGNvbnN0YW50cy5zaW5nbGUgOiBjb25zdGFudHMuZG91YmxlKVt4NF1beTRdLAogICAgICAgIGF0dHJpYnV0ZTogdHJ1ZQogICAgICB9KQogICAgKSArIHF1b3RlOwogIH0KICByZXR1cm4gbmFtZSArIChyZXN1bHQgPyAiPSIgKyByZXN1bHQgOiByZXN1bHQpOwp9CnZhciBjb25zdGFudHM7CnZhciBpbml0X2VsZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9lbGVtZW50LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMoKTsKICAgIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24oKTsKICAgIGluaXRfc3BhY2Vfc2VwYXJhdGVkX3Rva2VucygpOwogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGluaXRfY2xvc2luZygpOwogICAgaW5pdF9vcGVuaW5nKCk7CiAgICBjb25zdGFudHMgPSB7CiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS1uYW1lLXN0YXRlPi4KICAgICAgbmFtZTogWwogICAgICAgIFsiCVxuXGZcciAmLz0+Ii5zcGxpdCgiIiksICIJXG5cZlxyIFwiJicvPT5gIi5zcGxpdCgiIildLAogICAgICAgIFtgXDAJClxmXHIgIiYnLzw9PmAuc3BsaXQoIiIpLCAiXDAJXG5cZlxyIFwiJicvPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHVucXVvdGVkKS1zdGF0ZT4uCiAgICAgIHVucXVvdGVkOiBbCiAgICAgICAgWyIJXG5cZlxyICY+Ii5zcGxpdCgiIiksICJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKSwgIlwwCVxuXGZcciBcIiYnPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHNpbmdsZS1xdW90ZWQpLXN0YXRlPi4KICAgICAgc2luZ2xlOiBbCiAgICAgICAgWyImJyIuc3BsaXQoIiIpLCAiXCImJ2AiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMCYnIi5zcGxpdCgiIiksICJcMFwiJidgIi5zcGxpdCgiIildCiAgICAgIF0sCiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oZG91YmxlLXF1b3RlZCktc3RhdGU+LgogICAgICBkb3VibGU6IFsKICAgICAgICBbJyImJy5zcGxpdCgiIiksICJcIiYnYCIuc3BsaXQoIiIpXSwKICAgICAgICBbJ1wwIiYnLnNwbGl0KCIiKSwgIlwwXCImJ2AiLnNwbGl0KCIiKV0KICAgICAgXQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMKZnVuY3Rpb24gdGV4dDcobm9kZTIsIF80LCBwYXJlbnQsIHN0YXRlKSB7CiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gInNjcmlwdCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJzdHlsZSIpID8gbm9kZTIudmFsdWUgOiBzdHJpbmdpZnlFbnRpdGllcygKICAgIG5vZGUyLnZhbHVlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICBzdWJzZXQ6IHRleHRFbnRpdHlTdWJzZXQKICAgIH0pCiAgKTsKfQp2YXIgdGV4dEVudGl0eVN1YnNldDsKdmFyIGluaXRfdGV4dDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS90ZXh0LmpzIigpIHsKICAgIGluaXRfc3RyaW5naWZ5X2VudGl0aWVzKCk7CiAgICB0ZXh0RW50aXR5U3Vic2V0ID0gWyI8IiwgIiYiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3Jhdy5qcwpmdW5jdGlvbiByYXcobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZSkgewogIHJldHVybiBzdGF0ZS5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWwgPyBub2RlMi52YWx1ZSA6IHRleHQ3KG5vZGUyLCBpbmRleDIsIHBhcmVudCwgc3RhdGUpOwp9CnZhciBpbml0X3JhdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3Jhdy5qcyIoKSB7CiAgICBpbml0X3RleHQ0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yb290LmpzCmZ1bmN0aW9uIHJvb3Q0KG5vZGUyLCBfMSwgXzIyLCBzdGF0ZSkgewogIHJldHVybiBzdGF0ZS5hbGwobm9kZTIpOwp9CnZhciBpbml0X3Jvb3QzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcm9vdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcwpmdW5jdGlvbiBpbnZhbGlkMihub2RlMikgewogIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSwgbm90IGAiICsgbm9kZTIgKyAiYCIpOwp9CmZ1bmN0aW9uIHVua25vd24yKG5vZGVfKSB7CiAgY29uc3Qgbm9kZTIgPSAoCiAgICAvKiogQHR5cGUge05vZGVzfSAqLwogICAgbm9kZV8KICApOwogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBpbGUgdW5rbm93biBub2RlIGAiICsgbm9kZTIudHlwZSArICJgIik7Cn0KdmFyIGhhbmRsZTI7CnZhciBpbml0X2hhbmRsZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb21tZW50KCk7CiAgICBpbml0X2RvY3R5cGUoKTsKICAgIGluaXRfZWxlbWVudCgpOwogICAgaW5pdF9yYXcoKTsKICAgIGluaXRfcm9vdDMoKTsKICAgIGluaXRfdGV4dDQoKTsKICAgIGhhbmRsZTIgPSB6d2l0Y2goInR5cGUiLCB7CiAgICAgIGludmFsaWQ6IGludmFsaWQyLAogICAgICB1bmtub3duOiB1bmtub3duMiwKICAgICAgaGFuZGxlcnM6IHsgY29tbWVudDogY29tbWVudDIsIGRvY3R5cGU6IGRvY3R5cGUyLCBlbGVtZW50OiBlbGVtZW50MywgcmF3LCByb290OiByb290NCwgdGV4dDogdGV4dDcgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvSHRtbCh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgb3B0aW9uc18gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczY7CiAgY29uc3QgcXVvdGUgPSBvcHRpb25zXy5xdW90ZSB8fCAnIic7CiAgY29uc3QgYWx0ZXJuYXRpdmUgPSBxdW90ZSA9PT0gJyInID8gIiciIDogJyInOwogIGlmIChxdW90ZSAhPT0gJyInICYmIHF1b3RlICE9PSAiJyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBxdW90ZSBgIiArIHF1b3RlICsgImAsIGV4cGVjdGVkIGAnYCBvciBgXCJgIik7CiAgfQogIGNvbnN0IHN0YXRlID0gewogICAgb25lOiBvbmUyLAogICAgYWxsOiBhbGwyLAogICAgc2V0dGluZ3M6IHsKICAgICAgb21pdE9wdGlvbmFsVGFnczogb3B0aW9uc18ub21pdE9wdGlvbmFsVGFncyB8fCBmYWxzZSwKICAgICAgYWxsb3dQYXJzZUVycm9yczogb3B0aW9uc18uYWxsb3dQYXJzZUVycm9ycyB8fCBmYWxzZSwKICAgICAgYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzOiBvcHRpb25zXy5hbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnMgfHwgZmFsc2UsCiAgICAgIHF1b3RlU21hcnQ6IG9wdGlvbnNfLnF1b3RlU21hcnQgfHwgZmFsc2UsCiAgICAgIHByZWZlclVucXVvdGVkOiBvcHRpb25zXy5wcmVmZXJVbnF1b3RlZCB8fCBmYWxzZSwKICAgICAgdGlnaHRBdHRyaWJ1dGVzOiBvcHRpb25zXy50aWdodEF0dHJpYnV0ZXMgfHwgZmFsc2UsCiAgICAgIHVwcGVyRG9jdHlwZTogb3B0aW9uc18udXBwZXJEb2N0eXBlIHx8IGZhbHNlLAogICAgICB0aWdodERvY3R5cGU6IG9wdGlvbnNfLnRpZ2h0RG9jdHlwZSB8fCBmYWxzZSwKICAgICAgYm9ndXNDb21tZW50czogb3B0aW9uc18uYm9ndXNDb21tZW50cyB8fCBmYWxzZSwKICAgICAgdGlnaHRDb21tYVNlcGFyYXRlZExpc3RzOiBvcHRpb25zXy50aWdodENvbW1hU2VwYXJhdGVkTGlzdHMgfHwgZmFsc2UsCiAgICAgIHRpZ2h0U2VsZkNsb3Npbmc6IG9wdGlvbnNfLnRpZ2h0U2VsZkNsb3NpbmcgfHwgZmFsc2UsCiAgICAgIGNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzOiBvcHRpb25zXy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyB8fCBmYWxzZSwKICAgICAgYWxsb3dEYW5nZXJvdXNIdG1sOiBvcHRpb25zXy5hbGxvd0Rhbmdlcm91c0h0bWwgfHwgZmFsc2UsCiAgICAgIHZvaWRzOiBvcHRpb25zXy52b2lkcyB8fCBodG1sVm9pZEVsZW1lbnRzLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VzOiBvcHRpb25zXy5jaGFyYWN0ZXJSZWZlcmVuY2VzIHx8IGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcywKICAgICAgY2xvc2VTZWxmQ2xvc2luZzogb3B0aW9uc18uY2xvc2VTZWxmQ2xvc2luZyB8fCBmYWxzZSwKICAgICAgY2xvc2VFbXB0eUVsZW1lbnRzOiBvcHRpb25zXy5jbG9zZUVtcHR5RWxlbWVudHMgfHwgZmFsc2UKICAgIH0sCiAgICBzY2hlbWE6IG9wdGlvbnNfLnNwYWNlID09PSAic3ZnIiA/IHN2ZzIgOiBodG1sNCwKICAgIHF1b3RlLAogICAgYWx0ZXJuYXRpdmUKICB9OwogIHJldHVybiBzdGF0ZS5vbmUoCiAgICBBcnJheS5pc0FycmF5KHRyZWUpID8geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiB0cmVlIH0gOiB0cmVlLAogICAgdm9pZCAwLAogICAgdm9pZCAwCiAgKTsKfQpmdW5jdGlvbiBvbmUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiBoYW5kbGUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCwgdGhpcyk7Cn0KZnVuY3Rpb24gYWxsMihwYXJlbnQpIHsKICBjb25zdCByZXN1bHRzID0gW107CiAgY29uc3QgY2hpbGRyZW4yID0gcGFyZW50ICYmIHBhcmVudC5jaGlsZHJlbiB8fCBlbXB0eUNoaWxkcmVuMjsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgcmVzdWx0c1tpbmRleDJdID0gdGhpcy5vbmUoY2hpbGRyZW4yW2luZGV4Ml0sIGluZGV4MiwgcGFyZW50KTsKICB9CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KdmFyIGVtcHR5T3B0aW9uczYsIGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcywgZW1wdHlDaGlsZHJlbjI7CnZhciBpbml0X2xpYjMwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWxfdm9pZF9lbGVtZW50cygpOwogICAgaW5pdF9wcm9wZXJ0eV9pbmZvcm1hdGlvbigpOwogICAgaW5pdF9oYW5kbGUyKCk7CiAgICBlbXB0eU9wdGlvbnM2ID0ge307CiAgICBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMgPSB7fTsKICAgIGVtcHR5Q2hpbGRyZW4yID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3RvX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrSHRtbChvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgc2FuaXRpemU6IGNsZWFuLCAuLi50b0h0bWxPcHRpb25zIH0gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczc7CiAgbGV0IGFsbG93RGFuZ2Vyb3VzSHRtbCA9IGZhbHNlOwogIGxldCBzY2hlbWE7CiAgaWYgKHR5cGVvZiBjbGVhbiA9PT0gImJvb2xlYW4iKSB7CiAgICBhbGxvd0Rhbmdlcm91c0h0bWwgPSAhY2xlYW47CiAgfSBlbHNlIGlmIChjbGVhbikgewogICAgc2NoZW1hID0gY2xlYW47CiAgfQogIHNlbGYyLmNvbXBpbGVyID0gY29tcGlsZXIyOwogIGZ1bmN0aW9uIGNvbXBpbGVyMih0cmVlLCBmaWxlKSB7CiAgICBjb25zdCBoYXN0ID0gdG9IYXN0KHRyZWUsIHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgYWxsb3dEYW5nZXJvdXNIdG1sIH0pOwogICAgY29uc3Qgc2FmZUhhc3QgPSBhbGxvd0Rhbmdlcm91c0h0bWwgPyBoYXN0IDogc2FuaXRpemUoaGFzdCwgc2NoZW1hKTsKICAgIGNvbnN0IHJlc3VsdCA9IHRvSHRtbChzYWZlSGFzdCwgeyAuLi50b0h0bWxPcHRpb25zLCBhbGxvd0Rhbmdlcm91c0h0bWwgfSk7CiAgICBpZiAoZmlsZS5leHRuYW1lKSB7CiAgICAgIGZpbGUuZXh0bmFtZSA9ICIuaHRtbCI7CiAgICB9CiAgICByZXR1cm4gdHJlZSAmJiB0cmVlLnR5cGUgPT09ICJyb290IiAmJiByZXN1bHQgJiYgL1teXHJcbl0vLnRlc3QocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkpID8gcmVzdWx0ICsgIlxuIiA6IHJlc3VsdDsKICB9Cn0KdmFyIGVtcHR5T3B0aW9uczc7CnZhciBpbml0X2xpYjMxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfc2FuaXRpemUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19oYXN0KCk7CiAgICBpbml0X2hhc3RfdXRpbF90b19odG1sKCk7CiAgICBlbXB0eU9wdGlvbnM3ID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstaHRtbEAxNi4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1odG1sL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMxKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrU3RyaW5naWZ5KG9wdGlvbnMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgc2VsZjIuY29tcGlsZXIgPSBjb21waWxlcjI7CiAgZnVuY3Rpb24gY29tcGlsZXIyKHRyZWUpIHsKICAgIHJldHVybiB0b01hcmtkb3duKHRyZWUsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhpcyBvcHRpb24gaXMgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciBpdCB0byBiZSBzZXQgYnkgcGx1Z2lucyBvbiBgZGF0YWAgaW5zdGVhZCBvZiBiZWluZwogICAgICAvLyBwYXNzZWQgYnkgdXNlcnMuCiAgICAgIGV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoInRvTWFya2Rvd25FeHRlbnNpb25zIikgfHwgW10KICAgIH0pOwogIH0KfQp2YXIgaW5pdF9saWIzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2luZGV4LmpzCnZhciBpbml0X3JlbWFya19zdHJpbmdpZnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bkA3LjIuMi9ub2RlX21vZHVsZXMvdHVybmRvd24vbGliL3R1cm5kb3duLmJyb3dzZXIuZXMuanMKZnVuY3Rpb24gZXh0ZW5kMihkZXN0aW5hdGlvbikgewogIGZvciAodmFyIGkxMSA9IDE7IGkxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2kxMV07CiAgICBmb3IgKHZhciBrZXkyIGluIHNvdXJjZSkgewogICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleTIpKSBkZXN0aW5hdGlvbltrZXkyXSA9IHNvdXJjZVtrZXkyXTsKICAgIH0KICB9CiAgcmV0dXJuIGRlc3RpbmF0aW9uOwp9CmZ1bmN0aW9uIHJlcGVhdDIoY2hhcmFjdGVyLCBjb3VudDIpIHsKICByZXR1cm4gQXJyYXkoY291bnQyICsgMSkuam9pbihjaGFyYWN0ZXIpOwp9CmZ1bmN0aW9uIHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHJldHVybiBzdHJpbmczLnJlcGxhY2UoL15cbiovLCAiIik7Cn0KZnVuY3Rpb24gdHJpbVRyYWlsaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHZhciBpbmRleEVuZCA9IHN0cmluZzMubGVuZ3RoOwogIHdoaWxlIChpbmRleEVuZCA+IDAgJiYgc3RyaW5nM1tpbmRleEVuZCAtIDFdID09PSAiXG4iKSBpbmRleEVuZC0tOwogIHJldHVybiBzdHJpbmczLnN1YnN0cmluZygwLCBpbmRleEVuZCk7Cn0KZnVuY3Rpb24gdHJpbU5ld2xpbmVzKHN0cmluZzMpIHsKICByZXR1cm4gdHJpbVRyYWlsaW5nTmV3bGluZXModHJpbUxlYWRpbmdOZXdsaW5lcyhzdHJpbmczKSk7Cn0KZnVuY3Rpb24gaXNCbG9jayhub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIGJsb2NrRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGlzVm9pZChub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaGFzVm9pZChub2RlMikgewogIHJldHVybiBoYXMobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGlzMihub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBoYXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGhhcyhub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBpczIobm9kZTIsIHRhZ05hbWVzKSB7CiAgcmV0dXJuIHRhZ05hbWVzLmluZGV4T2Yobm9kZTIubm9kZU5hbWUpID49IDA7Cn0KZnVuY3Rpb24gaGFzKG5vZGUyLCB0YWdOYW1lcykgewogIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSAmJiB0YWdOYW1lcy5zb21lKGZ1bmN0aW9uKHRhZ05hbWUpIHsKICAgIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKS5sZW5ndGg7CiAgfSk7Cn0KZnVuY3Rpb24gY2xlYW5BdHRyaWJ1dGUoYXR0cmlidXRlKSB7CiAgcmV0dXJuIGF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS5yZXBsYWNlKC8oXG4rXHMqKSsvZywgIlxuIikgOiAiIjsKfQpmdW5jdGlvbiBSdWxlcyhvcHRpb25zKSB7CiAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKICB0aGlzLl9rZWVwID0gW107CiAgdGhpcy5fcmVtb3ZlID0gW107CiAgdGhpcy5ibGFua1J1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5ibGFua1JlcGxhY2VtZW50CiAgfTsKICB0aGlzLmtlZXBSZXBsYWNlbWVudCA9IG9wdGlvbnMua2VlcFJlcGxhY2VtZW50OwogIHRoaXMuZGVmYXVsdFJ1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5kZWZhdWx0UmVwbGFjZW1lbnQKICB9OwogIHRoaXMuYXJyYXkgPSBbXTsKICBmb3IgKHZhciBrZXkyIGluIG9wdGlvbnMucnVsZXMpIHRoaXMuYXJyYXkucHVzaChvcHRpb25zLnJ1bGVzW2tleTJdKTsKfQpmdW5jdGlvbiBmaW5kUnVsZShydWxlczMsIG5vZGUyLCBvcHRpb25zKSB7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcnVsZXMzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhciBydWxlID0gcnVsZXMzW2kxMV07CiAgICBpZiAoZmlsdGVyVmFsdWUocnVsZSwgbm9kZTIsIG9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQpmdW5jdGlvbiBmaWx0ZXJWYWx1ZShydWxlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBmaWx0ZXIyID0gcnVsZS5maWx0ZXI7CiAgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAic3RyaW5nIikgewogICAgaWYgKGZpbHRlcjIgPT09IG5vZGUyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiB0cnVlOwogIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIyKSkgewogICAgaWYgKGZpbHRlcjIuaW5kZXhPZihub2RlMi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAiZnVuY3Rpb24iKSB7CiAgICBpZiAoZmlsdGVyMi5jYWxsKHJ1bGUsIG5vZGUyLCBvcHRpb25zKSkgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBmaWx0ZXJgIG5lZWRzIHRvIGJlIGEgc3RyaW5nLCBhcnJheSwgb3IgZnVuY3Rpb24iKTsKICB9Cn0KZnVuY3Rpb24gY29sbGFwc2VXaGl0ZXNwYWNlKG9wdGlvbnMpIHsKICB2YXIgZWxlbWVudDQgPSBvcHRpb25zLmVsZW1lbnQ7CiAgdmFyIGlzQmxvY2syID0gb3B0aW9ucy5pc0Jsb2NrOwogIHZhciBpc1ZvaWQyID0gb3B0aW9ucy5pc1ZvaWQ7CiAgdmFyIGlzUHJlID0gb3B0aW9ucy5pc1ByZSB8fCBmdW5jdGlvbihub2RlMykgewogICAgcmV0dXJuIG5vZGUzLm5vZGVOYW1lID09PSAiUFJFIjsKICB9OwogIGlmICghZWxlbWVudDQuZmlyc3RDaGlsZCB8fCBpc1ByZShlbGVtZW50NCkpIHJldHVybjsKICB2YXIgcHJldlRleHQgPSBudWxsOwogIHZhciBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgdmFyIHByZXYgPSBudWxsOwogIHZhciBub2RlMiA9IG5leHQocHJldiwgZWxlbWVudDQsIGlzUHJlKTsKICB3aGlsZSAobm9kZTIgIT09IGVsZW1lbnQ0KSB7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMgfHwgbm9kZTIubm9kZVR5cGUgPT09IDQpIHsKICAgICAgdmFyIHRleHQ5ID0gbm9kZTIuZGF0YS5yZXBsYWNlKC9bIFxyXG5cdF0rL2csICIgIik7CiAgICAgIGlmICgoIXByZXZUZXh0IHx8IC8gJC8udGVzdChwcmV2VGV4dC5kYXRhKSkgJiYgIWtlZXBMZWFkaW5nV3MgJiYgdGV4dDlbMF0gPT09ICIgIikgewogICAgICAgIHRleHQ5ID0gdGV4dDkuc3Vic3RyKDEpOwogICAgICB9CiAgICAgIGlmICghdGV4dDkpIHsKICAgICAgICBub2RlMiA9IHJlbW92ZShub2RlMik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgbm9kZTIuZGF0YSA9IHRleHQ5OwogICAgICBwcmV2VGV4dCA9IG5vZGUyOwogICAgfSBlbHNlIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gMSkgewogICAgICBpZiAoaXNCbG9jazIobm9kZTIpIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQlIiKSB7CiAgICAgICAgaWYgKHByZXZUZXh0KSB7CiAgICAgICAgICBwcmV2VGV4dC5kYXRhID0gcHJldlRleHQuZGF0YS5yZXBsYWNlKC8gJC8sICIiKTsKICAgICAgICB9CiAgICAgICAgcHJldlRleHQgPSBudWxsOwogICAgICAgIGtlZXBMZWFkaW5nV3MgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChpc1ZvaWQyKG5vZGUyKSB8fCBpc1ByZShub2RlMikpIHsKICAgICAgICBwcmV2VGV4dCA9IG51bGw7CiAgICAgICAga2VlcExlYWRpbmdXcyA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAocHJldlRleHQpIHsKICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyID0gcmVtb3ZlKG5vZGUyKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICB2YXIgbmV4dE5vZGUgPSBuZXh0KHByZXYsIG5vZGUyLCBpc1ByZSk7CiAgICBwcmV2ID0gbm9kZTI7CiAgICBub2RlMiA9IG5leHROb2RlOwogIH0KICBpZiAocHJldlRleHQpIHsKICAgIHByZXZUZXh0LmRhdGEgPSBwcmV2VGV4dC5kYXRhLnJlcGxhY2UoLyAkLywgIiIpOwogICAgaWYgKCFwcmV2VGV4dC5kYXRhKSB7CiAgICAgIHJlbW92ZShwcmV2VGV4dCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHJlbW92ZShub2RlMikgewogIHZhciBuZXh0MiA9IG5vZGUyLm5leHRTaWJsaW5nIHx8IG5vZGUyLnBhcmVudE5vZGU7CiAgbm9kZTIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlMik7CiAgcmV0dXJuIG5leHQyOwp9CmZ1bmN0aW9uIG5leHQocHJldiwgY3VycmVudCwgaXNQcmUpIHsKICBpZiAocHJldiAmJiBwcmV2LnBhcmVudE5vZGUgPT09IGN1cnJlbnQgfHwgaXNQcmUoY3VycmVudCkpIHsKICAgIHJldHVybiBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKICB9CiAgcmV0dXJuIGN1cnJlbnQuZmlyc3RDaGlsZCB8fCBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKfQpmdW5jdGlvbiBjYW5QYXJzZUhUTUxOYXRpdmVseSgpIHsKICB2YXIgUGFyc2VyMiA9IHJvb3Q1LkRPTVBhcnNlcjsKICB2YXIgY2FuUGFyc2UgPSBmYWxzZTsKICB0cnkgewogICAgaWYgKG5ldyBQYXJzZXIyKCkucGFyc2VGcm9tU3RyaW5nKCIiLCAidGV4dC9odG1sIikpIHsKICAgICAgY2FuUGFyc2UgPSB0cnVlOwogICAgfQogIH0gY2F0Y2ggKGUxMSkgewogIH0KICByZXR1cm4gY2FuUGFyc2U7Cn0KZnVuY3Rpb24gY3JlYXRlSFRNTFBhcnNlcigpIHsKICB2YXIgUGFyc2VyMiA9IGZ1bmN0aW9uKCkgewogIH07CiAgewogICAgaWYgKHNob3VsZFVzZUFjdGl2ZVgoKSkgewogICAgICBQYXJzZXIyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmczKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTsKICAgICAgICBkb2MuZGVzaWduTW9kZSA9ICJvbiI7CiAgICAgICAgZG9jLm9wZW4oKTsKICAgICAgICBkb2Mud3JpdGUoc3RyaW5nMyk7CiAgICAgICAgZG9jLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGRvYzsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIFBhcnNlcjIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZzMpIHsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKTsKICAgICAgICBkb2Mub3BlbigpOwogICAgICAgIGRvYy53cml0ZShzdHJpbmczKTsKICAgICAgICBkb2MuY2xvc2UoKTsKICAgICAgICByZXR1cm4gZG9jOwogICAgICB9OwogICAgfQogIH0KICByZXR1cm4gUGFyc2VyMjsKfQpmdW5jdGlvbiBzaG91bGRVc2VBY3RpdmVYKCkgewogIHZhciB1c2VBY3RpdmVYID0gZmFsc2U7CiAgdHJ5IHsKICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpOwogIH0gY2F0Y2ggKGUxMSkgewogICAgaWYgKHJvb3Q1LkFjdGl2ZVhPYmplY3QpIHVzZUFjdGl2ZVggPSB0cnVlOwogIH0KICByZXR1cm4gdXNlQWN0aXZlWDsKfQpmdW5jdGlvbiBSb290Tm9kZShpbnB1dCwgb3B0aW9ucykgewogIHZhciByb290NjsKICBpZiAodHlwZW9mIGlucHV0ID09PSAic3RyaW5nIikgewogICAgdmFyIGRvYyA9IGh0bWxQYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoCiAgICAgIC8vIERPTSBwYXJzZXJzIGFycmFuZ2UgZWxlbWVudHMgaW4gdGhlIDxoZWFkPiBhbmQgPGJvZHk+LgogICAgICAvLyBXcmFwcGluZyBpbiBhIGN1c3RvbSBlbGVtZW50IGVuc3VyZXMgZWxlbWVudHMgYXJlIHJlbGlhYmx5IGFycmFuZ2VkIGluCiAgICAgIC8vIGEgc2luZ2xlIGVsZW1lbnQuCiAgICAgICc8eC10dXJuZG93biBpZD0idHVybmRvd24tcm9vdCI+JyArIGlucHV0ICsgIjwveC10dXJuZG93bj4iLAogICAgICAidGV4dC9odG1sIgogICAgKTsKICAgIHJvb3Q2ID0gZG9jLmdldEVsZW1lbnRCeUlkKCJ0dXJuZG93bi1yb290Iik7CiAgfSBlbHNlIHsKICAgIHJvb3Q2ID0gaW5wdXQuY2xvbmVOb2RlKHRydWUpOwogIH0KICBjb2xsYXBzZVdoaXRlc3BhY2UoewogICAgZWxlbWVudDogcm9vdDYsCiAgICBpc0Jsb2NrLAogICAgaXNWb2lkLAogICAgaXNQcmU6IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSA/IGlzUHJlT3JDb2RlIDogbnVsbAogIH0pOwogIHJldHVybiByb290NjsKfQpmdW5jdGlvbiBodG1sUGFyc2VyKCkgewogIF9odG1sUGFyc2VyID0gX2h0bWxQYXJzZXIgfHwgbmV3IEhUTUxQYXJzZXIoKTsKICByZXR1cm4gX2h0bWxQYXJzZXI7Cn0KZnVuY3Rpb24gaXNQcmVPckNvZGUobm9kZTIpIHsKICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQ09ERSI7Cn0KZnVuY3Rpb24gTm9kZTIobm9kZTIsIG9wdGlvbnMpIHsKICBub2RlMi5pc0Jsb2NrID0gaXNCbG9jayhub2RlMik7CiAgbm9kZTIuaXNDb2RlID0gbm9kZTIubm9kZU5hbWUgPT09ICJDT0RFIiB8fCBub2RlMi5wYXJlbnROb2RlLmlzQ29kZTsKICBub2RlMi5pc0JsYW5rID0gaXNCbGFuayhub2RlMik7CiAgbm9kZTIuZmxhbmtpbmdXaGl0ZXNwYWNlID0gZmxhbmtpbmdXaGl0ZXNwYWNlKG5vZGUyLCBvcHRpb25zKTsKICByZXR1cm4gbm9kZTI7Cn0KZnVuY3Rpb24gaXNCbGFuayhub2RlMikgewogIHJldHVybiAhaXNWb2lkKG5vZGUyKSAmJiAhaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSAmJiAvXlxzKiQvaS50ZXN0KG5vZGUyLnRleHRDb250ZW50KSAmJiAhaGFzVm9pZChub2RlMikgJiYgIWhhc01lYW5pbmdmdWxXaGVuQmxhbmsobm9kZTIpOwp9CmZ1bmN0aW9uIGZsYW5raW5nV2hpdGVzcGFjZShub2RlMiwgb3B0aW9ucykgewogIGlmIChub2RlMi5pc0Jsb2NrIHx8IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSAmJiBub2RlMi5pc0NvZGUpIHsKICAgIHJldHVybiB7IGxlYWRpbmc6ICIiLCB0cmFpbGluZzogIiIgfTsKICB9CiAgdmFyIGVkZ2VzID0gZWRnZVdoaXRlc3BhY2Uobm9kZTIudGV4dENvbnRlbnQpOwogIGlmIChlZGdlcy5sZWFkaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCJsZWZ0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy5sZWFkaW5nID0gZWRnZXMubGVhZGluZ05vbkFzY2lpOwogIH0KICBpZiAoZWRnZXMudHJhaWxpbmdBc2NpaSAmJiBpc0ZsYW5rZWRCeVdoaXRlc3BhY2UoInJpZ2h0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy50cmFpbGluZyA9IGVkZ2VzLnRyYWlsaW5nTm9uQXNjaWk7CiAgfQogIHJldHVybiB7IGxlYWRpbmc6IGVkZ2VzLmxlYWRpbmcsIHRyYWlsaW5nOiBlZGdlcy50cmFpbGluZyB9Owp9CmZ1bmN0aW9uIGVkZ2VXaGl0ZXNwYWNlKHN0cmluZzMpIHsKICB2YXIgbTYgPSBzdHJpbmczLm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7CiAgcmV0dXJuIHsKICAgIGxlYWRpbmc6IG02WzFdLAogICAgLy8gd2hvbGUgc3RyaW5nIGZvciB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5ncwogICAgbGVhZGluZ0FzY2lpOiBtNlsyXSwKICAgIGxlYWRpbmdOb25Bc2NpaTogbTZbM10sCiAgICB0cmFpbGluZzogbTZbNF0sCiAgICAvLyBlbXB0eSBmb3Igd2hpdGVzcGFjZS1vbmx5IHN0cmluZ3MKICAgIHRyYWlsaW5nTm9uQXNjaWk6IG02WzVdLAogICAgdHJhaWxpbmdBc2NpaTogbTZbNl0KICB9Owp9CmZ1bmN0aW9uIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZShzaWRlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBzaWJsaW5nOwogIHZhciByZWdFeHA7CiAgdmFyIGlzRmxhbmtlZDsKICBpZiAoc2lkZSA9PT0gImxlZnQiKSB7CiAgICBzaWJsaW5nID0gbm9kZTIucHJldmlvdXNTaWJsaW5nOwogICAgcmVnRXhwID0gLyAkLzsKICB9IGVsc2UgewogICAgc2libGluZyA9IG5vZGUyLm5leHRTaWJsaW5nOwogICAgcmVnRXhwID0gL14gLzsKICB9CiAgaWYgKHNpYmxpbmcpIHsKICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7CiAgICAgIGlzRmxhbmtlZCA9IHJlZ0V4cC50ZXN0KHNpYmxpbmcubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVmb3JtYXR0ZWRDb2RlICYmIHNpYmxpbmcubm9kZU5hbWUgPT09ICJDT0RFIikgewogICAgICBpc0ZsYW5rZWQgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMSAmJiAhaXNCbG9jayhzaWJsaW5nKSkgewogICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLnRleHRDb250ZW50KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzRmxhbmtlZDsKfQpmdW5jdGlvbiBUdXJuZG93blNlcnZpY2Uob3B0aW9ucykgewogIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUdXJuZG93blNlcnZpY2UpKSByZXR1cm4gbmV3IFR1cm5kb3duU2VydmljZShvcHRpb25zKTsKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBydWxlcywKICAgIGhlYWRpbmdTdHlsZTogInNldGV4dCIsCiAgICBocjogIiogKiAqIiwKICAgIGJ1bGxldExpc3RNYXJrZXI6ICIqIiwKICAgIGNvZGVCbG9ja1N0eWxlOiAiaW5kZW50ZWQiLAogICAgZmVuY2U6ICJgYGAiLAogICAgZW1EZWxpbWl0ZXI6ICJfIiwKICAgIHN0cm9uZ0RlbGltaXRlcjogIioqIiwKICAgIGxpbmtTdHlsZTogImlubGluZWQiLAogICAgbGlua1JlZmVyZW5jZVN0eWxlOiAiZnVsbCIsCiAgICBicjogIiAgIiwKICAgIHByZWZvcm1hdHRlZENvZGU6IGZhbHNlLAogICAgYmxhbmtSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iIDogIiI7CiAgICB9LAogICAga2VlcFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBub2RlMi5vdXRlckhUTUwgKyAiXG5cbiIgOiBub2RlMi5vdXRlckhUTUw7CiAgICB9LAogICAgZGVmYXVsdFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIiA6IGNvbnRlbnQzOwogICAgfQogIH07CiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kMih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpOwogIHRoaXMucnVsZXMgPSBuZXcgUnVsZXModGhpcy5vcHRpb25zKTsKfQpmdW5jdGlvbiBwcm9jZXNzMyhwYXJlbnROb2RlKSB7CiAgdmFyIHNlbGYyID0gdGhpczsKICByZXR1cm4gcmVkdWNlMi5jYWxsKHBhcmVudE5vZGUuY2hpbGROb2RlcywgZnVuY3Rpb24ob3V0cHV0LCBub2RlMikgewogICAgbm9kZTIgPSBuZXcgTm9kZTIobm9kZTIsIHNlbGYyLm9wdGlvbnMpOwogICAgdmFyIHJlcGxhY2VtZW50ID0gIiI7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMpIHsKICAgICAgcmVwbGFjZW1lbnQgPSBub2RlMi5pc0NvZGUgPyBub2RlMi5ub2RlVmFsdWUgOiBzZWxmMi5lc2NhcGUobm9kZTIubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAobm9kZTIubm9kZVR5cGUgPT09IDEpIHsKICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudEZvck5vZGUuY2FsbChzZWxmMiwgbm9kZTIpOwogICAgfQogICAgcmV0dXJuIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpOwogIH0sICIiKTsKfQpmdW5jdGlvbiBwb3N0UHJvY2VzcyhvdXRwdXQpIHsKICB2YXIgc2VsZjIgPSB0aGlzOwogIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7CiAgICBpZiAodHlwZW9mIHJ1bGUuYXBwZW5kID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIG91dHB1dCA9IGpvaW4zKG91dHB1dCwgcnVsZS5hcHBlbmQoc2VsZjIub3B0aW9ucykpOwogICAgfQogIH0pOwogIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXltcdFxyXG5dKy8sICIiKS5yZXBsYWNlKC9bXHRcclxuXHNdKyQvLCAiIik7Cn0KZnVuY3Rpb24gcmVwbGFjZW1lbnRGb3JOb2RlKG5vZGUyKSB7CiAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzLmZvck5vZGUobm9kZTIpOwogIHZhciBjb250ZW50MyA9IHByb2Nlc3MzLmNhbGwodGhpcywgbm9kZTIpOwogIHZhciB3aGl0ZXNwYWNlMiA9IG5vZGUyLmZsYW5raW5nV2hpdGVzcGFjZTsKICBpZiAod2hpdGVzcGFjZTIubGVhZGluZyB8fCB3aGl0ZXNwYWNlMi50cmFpbGluZykgY29udGVudDMgPSBjb250ZW50My50cmltKCk7CiAgcmV0dXJuIHdoaXRlc3BhY2UyLmxlYWRpbmcgKyBydWxlLnJlcGxhY2VtZW50KGNvbnRlbnQzLCBub2RlMiwgdGhpcy5vcHRpb25zKSArIHdoaXRlc3BhY2UyLnRyYWlsaW5nOwp9CmZ1bmN0aW9uIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpIHsKICB2YXIgczEgPSB0cmltVHJhaWxpbmdOZXdsaW5lcyhvdXRwdXQpOwogIHZhciBzMjIgPSB0cmltTGVhZGluZ05ld2xpbmVzKHJlcGxhY2VtZW50KTsKICB2YXIgbmxzID0gTWF0aC5tYXgob3V0cHV0Lmxlbmd0aCAtIHMxLmxlbmd0aCwgcmVwbGFjZW1lbnQubGVuZ3RoIC0gczIyLmxlbmd0aCk7CiAgdmFyIHNlcGFyYXRvciA9ICJcblxuIi5zdWJzdHJpbmcoMCwgbmxzKTsKICByZXR1cm4gczEgKyBzZXBhcmF0b3IgKyBzMjI7Cn0KZnVuY3Rpb24gY2FuQ29udmVydChpbnB1dCkgewogIHJldHVybiBpbnB1dCAhPSBudWxsICYmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciIHx8IGlucHV0Lm5vZGVUeXBlICYmIChpbnB1dC5ub2RlVHlwZSA9PT0gMSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gOSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gMTEpKTsKfQp2YXIgYmxvY2tFbGVtZW50cywgdm9pZEVsZW1lbnRzLCBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMsIHJ1bGVzLCByb290NSwgSFRNTFBhcnNlciwgX2h0bWxQYXJzZXIsIHJlZHVjZTIsIGVzY2FwZXMsIHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdDsKdmFyIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3R1cm5kb3duQDcuMi4yL25vZGVfbW9kdWxlcy90dXJuZG93bi9saWIvdHVybmRvd24uYnJvd3Nlci5lcy5qcyIoKSB7CiAgICBibG9ja0VsZW1lbnRzID0gWwogICAgICAiQUREUkVTUyIsCiAgICAgICJBUlRJQ0xFIiwKICAgICAgIkFTSURFIiwKICAgICAgIkFVRElPIiwKICAgICAgIkJMT0NLUVVPVEUiLAogICAgICAiQk9EWSIsCiAgICAgICJDQU5WQVMiLAogICAgICAiQ0VOVEVSIiwKICAgICAgIkREIiwKICAgICAgIkRJUiIsCiAgICAgICJESVYiLAogICAgICAiREwiLAogICAgICAiRFQiLAogICAgICAiRklFTERTRVQiLAogICAgICAiRklHQ0FQVElPTiIsCiAgICAgICJGSUdVUkUiLAogICAgICAiRk9PVEVSIiwKICAgICAgIkZPUk0iLAogICAgICAiRlJBTUVTRVQiLAogICAgICAiSDEiLAogICAgICAiSDIiLAogICAgICAiSDMiLAogICAgICAiSDQiLAogICAgICAiSDUiLAogICAgICAiSDYiLAogICAgICAiSEVBREVSIiwKICAgICAgIkhHUk9VUCIsCiAgICAgICJIUiIsCiAgICAgICJIVE1MIiwKICAgICAgIklTSU5ERVgiLAogICAgICAiTEkiLAogICAgICAiTUFJTiIsCiAgICAgICJNRU5VIiwKICAgICAgIk5BViIsCiAgICAgICJOT0ZSQU1FUyIsCiAgICAgICJOT1NDUklQVCIsCiAgICAgICJPTCIsCiAgICAgICJPVVRQVVQiLAogICAgICAiUCIsCiAgICAgICJQUkUiLAogICAgICAiU0VDVElPTiIsCiAgICAgICJUQUJMRSIsCiAgICAgICJUQk9EWSIsCiAgICAgICJURCIsCiAgICAgICJURk9PVCIsCiAgICAgICJUSCIsCiAgICAgICJUSEVBRCIsCiAgICAgICJUUiIsCiAgICAgICJVTCIKICAgIF07CiAgICB2b2lkRWxlbWVudHMgPSBbCiAgICAgICJBUkVBIiwKICAgICAgIkJBU0UiLAogICAgICAiQlIiLAogICAgICAiQ09MIiwKICAgICAgIkNPTU1BTkQiLAogICAgICAiRU1CRUQiLAogICAgICAiSFIiLAogICAgICAiSU1HIiwKICAgICAgIklOUFVUIiwKICAgICAgIktFWUdFTiIsCiAgICAgICJMSU5LIiwKICAgICAgIk1FVEEiLAogICAgICAiUEFSQU0iLAogICAgICAiU09VUkNFIiwKICAgICAgIlRSQUNLIiwKICAgICAgIldCUiIKICAgIF07CiAgICBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMgPSBbCiAgICAgICJBIiwKICAgICAgIlRBQkxFIiwKICAgICAgIlRIRUFEIiwKICAgICAgIlRCT0RZIiwKICAgICAgIlRGT09UIiwKICAgICAgIlRIIiwKICAgICAgIlREIiwKICAgICAgIklGUkFNRSIsCiAgICAgICJTQ1JJUFQiLAogICAgICAiQVVESU8iLAogICAgICAiVklERU8iCiAgICBdOwogICAgcnVsZXMgPSB7fTsKICAgIHJ1bGVzLnBhcmFncmFwaCA9IHsKICAgICAgZmlsdGVyOiAicCIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpbmVCcmVhayA9IHsKICAgICAgZmlsdGVyOiAiYnIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYnIgKyAiXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuaGVhZGluZyA9IHsKICAgICAgZmlsdGVyOiBbImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaExldmVsID0gTnVtYmVyKG5vZGUyLm5vZGVOYW1lLmNoYXJBdCgxKSk7CiAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGluZ1N0eWxlID09PSAic2V0ZXh0IiAmJiBoTGV2ZWwgPCAzKSB7CiAgICAgICAgICB2YXIgdW5kZXJsaW5lID0gcmVwZWF0MihoTGV2ZWwgPT09IDEgPyAiPSIgOiAiLSIsIGNvbnRlbnQzLmxlbmd0aCk7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG4iICsgdW5kZXJsaW5lICsgIlxuXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgcmVwZWF0MigiIyIsIGhMZXZlbCkgKyAiICIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5ibG9ja3F1b3RlID0gewogICAgICBmaWx0ZXI6ICJibG9ja3F1b3RlIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSB0cmltTmV3bGluZXMoY29udGVudDMpLnJlcGxhY2UoL14vZ20sICI+ICIpOwogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpc3QgPSB7CiAgICAgIGZpbHRlcjogWyJ1bCIsICJvbCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gIkxJIiAmJiBwYXJlbnQubGFzdEVsZW1lbnRDaGlsZCA9PT0gbm9kZTIpIHsKICAgICAgICAgIHJldHVybiAiXG4iICsgY29udGVudDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saXN0SXRlbSA9IHsKICAgICAgZmlsdGVyOiAibGkiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHByZWZpeDQgPSBvcHRpb25zLmJ1bGxldExpc3RNYXJrZXIgKyAiICAgIjsKICAgICAgICB2YXIgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTsKICAgICAgICBpZiAocGFyZW50Lm5vZGVOYW1lID09PSAiT0wiKSB7CiAgICAgICAgICB2YXIgc3RhcnQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJzdGFydCIpOwogICAgICAgICAgdmFyIGluZGV4MiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocGFyZW50LmNoaWxkcmVuLCBub2RlMik7CiAgICAgICAgICBwcmVmaXg0ID0gKHN0YXJ0ID8gTnVtYmVyKHN0YXJ0KSArIGluZGV4MiA6IGluZGV4MiArIDEpICsgIi4gICI7CiAgICAgICAgfQogICAgICAgIHZhciBpc1BhcmFncmFwaCA9IC9cbiQvLnRlc3QoY29udGVudDMpOwogICAgICAgIGNvbnRlbnQzID0gdHJpbU5ld2xpbmVzKGNvbnRlbnQzKSArIChpc1BhcmFncmFwaCA/ICJcbiIgOiAiIik7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKC9cbi9nbSwgIlxuIiArICIgIi5yZXBlYXQocHJlZml4NC5sZW5ndGgpKTsKICAgICAgICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgKG5vZGUyLm5leHRTaWJsaW5nID8gIlxuIiA6ICIiKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmluZGVudGVkQ29kZUJsb2NrID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29kZUJsb2NrU3R5bGUgPT09ICJpbmRlbnRlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkNPREUiOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuICJcblxuICAgICIgKyBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50LnJlcGxhY2UoL1xuL2csICJcbiAgICAiKSArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmZlbmNlZENvZGVCbG9jayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAiZmVuY2VkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgbm9kZTIuZmlyc3RDaGlsZCAmJiBub2RlMi5maXJzdENoaWxkLm5vZGVOYW1lID09PSAiQ09ERSI7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiI7CiAgICAgICAgdmFyIGxhbmd1YWdlID0gKGNsYXNzTmFtZS5tYXRjaCgvbGFuZ3VhZ2UtKFxTKykvKSB8fCBbbnVsbCwgIiJdKVsxXTsKICAgICAgICB2YXIgY29kZTQgPSBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50OwogICAgICAgIHZhciBmZW5jZUNoYXIgPSBvcHRpb25zLmZlbmNlLmNoYXJBdCgwKTsKICAgICAgICB2YXIgZmVuY2VTaXplID0gMzsKICAgICAgICB2YXIgZmVuY2VJbkNvZGVSZWdleCA9IG5ldyBSZWdFeHAoIl4iICsgZmVuY2VDaGFyICsgInszLH0iLCAiZ20iKTsKICAgICAgICB2YXIgbWF0Y2gyOwogICAgICAgIHdoaWxlIChtYXRjaDIgPSBmZW5jZUluQ29kZVJlZ2V4LmV4ZWMoY29kZTQpKSB7CiAgICAgICAgICBpZiAobWF0Y2gyWzBdLmxlbmd0aCA+PSBmZW5jZVNpemUpIHsKICAgICAgICAgICAgZmVuY2VTaXplID0gbWF0Y2gyWzBdLmxlbmd0aCArIDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBmZW5jZTMgPSByZXBlYXQyKGZlbmNlQ2hhciwgZmVuY2VTaXplKTsKICAgICAgICByZXR1cm4gIlxuXG4iICsgZmVuY2UzICsgbGFuZ3VhZ2UgKyAiXG4iICsgY29kZTQucmVwbGFjZSgvXG4kLywgIiIpICsgIlxuIiArIGZlbmNlMyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmhvcml6b250YWxSdWxlID0gewogICAgICBmaWx0ZXI6ICJociIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gIlxuXG4iICsgb3B0aW9ucy5ociArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmlubGluZUxpbmsgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5saW5rU3R5bGUgPT09ICJpbmxpbmVkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIkEiICYmIG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGhyZWYgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICBpZiAoaHJlZikgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFsoKV0pL2csICJcXCQxIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwogICAgICAgIHJldHVybiAiWyIgKyBjb250ZW50MyArICJdKCIgKyBocmVmICsgdGl0bGUgKyAiKSI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5yZWZlcmVuY2VMaW5rID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGlua1N0eWxlID09PSAicmVmZXJlbmNlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJBIiAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHZhciBocmVmID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlICsgJyInOwogICAgICAgIHZhciByZXBsYWNlbWVudDsKICAgICAgICB2YXIgcmVmZXJlbmNlOwogICAgICAgIHN3aXRjaCAob3B0aW9ucy5saW5rUmVmZXJlbmNlU3R5bGUpIHsKICAgICAgICAgIGNhc2UgImNvbGxhcHNlZCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVtdIjsKICAgICAgICAgICAgcmVmZXJlbmNlID0gIlsiICsgY29udGVudDMgKyAiXTogIiArIGhyZWYgKyB0aXRsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJzaG9ydGN1dCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGNvbnRlbnQzICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCArIDE7CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVsiICsgaWQgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGlkICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICB9LAogICAgICByZWZlcmVuY2VzOiBbXSwKICAgICAgYXBwZW5kOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIHJlZmVyZW5jZXMgPSAiIjsKICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzLmxlbmd0aCkgewogICAgICAgICAgcmVmZXJlbmNlcyA9ICJcblxuIiArIHRoaXMucmVmZXJlbmNlcy5qb2luKCJcbiIpICsgIlxuXG4iOwogICAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWZlcmVuY2VzOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuZW1waGFzaXMgPSB7CiAgICAgIGZpbHRlcjogWyJlbSIsICJpIl0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWNvbnRlbnQzLnRyaW0oKSkgcmV0dXJuICIiOwogICAgICAgIHJldHVybiBvcHRpb25zLmVtRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLmVtRGVsaW1pdGVyOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuc3Ryb25nID0gewogICAgICBmaWx0ZXI6IFsic3Ryb25nIiwgImIiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIGlmICghY29udGVudDMudHJpbSgpKSByZXR1cm4gIiI7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3Ryb25nRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLnN0cm9uZ0RlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmNvZGUgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICB2YXIgaGFzU2libGluZ3MgPSBub2RlMi5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgdmFyIGlzQ29kZUJsb2NrID0gbm9kZTIucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgIWhhc1NpYmxpbmdzOwogICAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIkNPREUiICYmICFpc0NvZGVCbG9jazsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgaWYgKCFjb250ZW50MykgcmV0dXJuICIiOwogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKTsKICAgICAgICB2YXIgZXh0cmFTcGFjZSA9IC9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KGNvbnRlbnQzKSA/ICIgIiA6ICIiOwogICAgICAgIHZhciBkZWxpbWl0ZXIgPSAiYCI7CiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb250ZW50My5tYXRjaCgvYCsvZ20pIHx8IFtdOwogICAgICAgIHdoaWxlIChtYXRjaGVzLmluZGV4T2YoZGVsaW1pdGVyKSAhPT0gLTEpIGRlbGltaXRlciA9IGRlbGltaXRlciArICJgIjsKICAgICAgICByZXR1cm4gZGVsaW1pdGVyICsgZXh0cmFTcGFjZSArIGNvbnRlbnQzICsgZXh0cmFTcGFjZSArIGRlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmltYWdlID0gewogICAgICBmaWx0ZXI6ICJpbWciLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGFsdCA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgiYWx0IikpOwogICAgICAgIHZhciBzcmMgPSBub2RlMi5nZXRBdHRyaWJ1dGUoInNyYyIpIHx8ICIiOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgdmFyIHRpdGxlUGFydCA9IHRpdGxlID8gJyAiJyArIHRpdGxlICsgJyInIDogIiI7CiAgICAgICAgcmV0dXJuIHNyYyA/ICIhWyIgKyBhbHQgKyAiXSgiICsgc3JjICsgdGl0bGVQYXJ0ICsgIikiIDogIiI7CiAgICAgIH0KICAgIH07CiAgICBSdWxlcy5wcm90b3R5cGUgPSB7CiAgICAgIGFkZDogZnVuY3Rpb24oa2V5MiwgcnVsZSkgewogICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlKTsKICAgICAgfSwKICAgICAga2VlcDogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMuX2tlZXAudW5zaGlmdCh7CiAgICAgICAgICBmaWx0ZXI6IGZpbHRlcjIsCiAgICAgICAgICByZXBsYWNlbWVudDogdGhpcy5rZWVwUmVwbGFjZW1lbnQKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5fcmVtb3ZlLnVuc2hpZnQoewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGZvck5vZGU6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgaWYgKG5vZGUyLmlzQmxhbmspIHJldHVybiB0aGlzLmJsYW5rUnVsZTsKICAgICAgICB2YXIgcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuYXJyYXksIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX2tlZXAsIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX3JlbW92ZSwgbm9kZTIsIHRoaXMub3B0aW9ucykpIHJldHVybiBydWxlOwogICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRSdWxlOwogICAgICB9LAogICAgICBmb3JFYWNoOiBmdW5jdGlvbihmbikgewogICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpMTErKykgZm4odGhpcy5hcnJheVtpMTFdLCBpMTEpOwogICAgICB9CiAgICB9OwogICAgcm9vdDUgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9OwogICAgSFRNTFBhcnNlciA9IGNhblBhcnNlSFRNTE5hdGl2ZWx5KCkgPyByb290NS5ET01QYXJzZXIgOiBjcmVhdGVIVE1MUGFyc2VyKCk7CiAgICByZWR1Y2UyID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKICAgIGVzY2FwZXMgPSBbCiAgICAgIFsvXFwvZywgIlxcXFwiXSwKICAgICAgWy9cKi9nLCAiXFwqIl0sCiAgICAgIFsvXi0vZywgIlxcLSJdLAogICAgICBbL15cKyAvZywgIlxcKyAiXSwKICAgICAgWy9eKD0rKS9nLCAiXFwkMSJdLAogICAgICBbL14oI3sxLDZ9KSAvZywgIlxcJDEgIl0sCiAgICAgIFsvYC9nLCAiXFxgIl0sCiAgICAgIFsvXn5+fi9nLCAiXFx+fn4iXSwKICAgICAgWy9cWy9nLCAiXFxbIl0sCiAgICAgIFsvXF0vZywgIlxcXSJdLAogICAgICBbL14+L2csICJcXD4iXSwKICAgICAgWy9fL2csICJcXF8iXSwKICAgICAgWy9eKFxkKylcLiAvZywgIiQxXFwuICJdCiAgICBdOwogICAgVHVybmRvd25TZXJ2aWNlLnByb3RvdHlwZSA9IHsKICAgICAgLyoqCiAgICAgICAqIFRoZSBlbnRyeSBwb2ludCBmb3IgY29udmVydGluZyBhIHN0cmluZyBvciBET00gbm9kZSB0byBNYXJrZG93bgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEhUTUxFbGVtZW50fSBpbnB1dCBUaGUgc3RyaW5nIG9yIERPTSBub2RlIHRvIGNvbnZlcnQKICAgICAgICogQHJldHVybnMgQSBNYXJrZG93biByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQKICAgICAgICogQHR5cGUgU3RyaW5nCiAgICAgICAqLwogICAgICB0dXJuZG93bjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICBpZiAoIWNhbkNvbnZlcnQoaW5wdXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICBpbnB1dCArICIgaXMgbm90IGEgc3RyaW5nLCBvciBhbiBlbGVtZW50L2RvY3VtZW50L2ZyYWdtZW50IG5vZGUuIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0ID09PSAiIikgcmV0dXJuICIiOwogICAgICAgIHZhciBvdXRwdXQgPSBwcm9jZXNzMy5jYWxsKHRoaXMsIG5ldyBSb290Tm9kZShpbnB1dCwgdGhpcy5vcHRpb25zKSk7CiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzLmNhbGwodGhpcywgb3V0cHV0KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEFkZCBvbmUgb3IgbW9yZSBwbHVnaW5zCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gcGx1Z2luIFRoZSBwbHVnaW4gb3IgYXJyYXkgb2YgcGx1Z2lucyB0byBhZGQKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIHVzZTogZnVuY3Rpb24ocGx1Z2luKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luKSkgewogICAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcGx1Z2luLmxlbmd0aDsgaTExKyspIHRoaXMudXNlKHBsdWdpbltpMTFdKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBsdWdpbih0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicGx1Z2luIG11c3QgYmUgYSBGdW5jdGlvbiBvciBhbiBBcnJheSBvZiBGdW5jdGlvbnMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGEgcnVsZQogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKGtleTIsIHJ1bGUpIHsKICAgICAgICB0aGlzLnJ1bGVzLmFkZChrZXkyLCBydWxlKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEtlZXAgYSBub2RlIChhcyBIVE1MKSB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlcgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEZ1bmN0aW9ufSBmaWx0ZXIgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGtlZXA6IGZ1bmN0aW9uKGZpbHRlcjIpIHsKICAgICAgICB0aGlzLnJ1bGVzLmtlZXAoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZmlsdGVyCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8RnVuY3Rpb259IGZpbHRlciBUaGUgdW5pcXVlIGtleSBvZiB0aGUgcnVsZQogICAgICAgKiBAcmV0dXJucyBUaGUgVHVybmRvd24gaW5zdGFuY2UgZm9yIGNoYWluaW5nCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKi8KICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5ydWxlcy5yZW1vdmUoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFc2NhcGVzIE1hcmtkb3duIHN5bnRheAogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUKICAgICAgICogQHJldHVybnMgQSBzdHJpbmcgd2l0aCBNYXJrZG93biBzeW50YXggZXNjYXBlZAogICAgICAgKiBAdHlwZSBTdHJpbmcKICAgICAgICovCiAgICAgIGVzY2FwZTogZnVuY3Rpb24oc3RyaW5nMykgewogICAgICAgIHJldHVybiBlc2NhcGVzLnJlZHVjZShmdW5jdGlvbihhY2N1bXVsYXRvciwgZXNjYXBlKSB7CiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IucmVwbGFjZShlc2NhcGVbMF0sIGVzY2FwZVsxXSk7CiAgICAgICAgfSwgc3RyaW5nMyk7CiAgICAgIH0KICAgIH07CiAgICB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQgPSBUdXJuZG93blNlcnZpY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzCnZhciB0dXJuZG93bl9wbHVnaW5fZ2ZtX2VzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLCB7CiAgZ2ZtOiAoKSA9PiBnZm0yLAogIGhpZ2hsaWdodGVkQ29kZUJsb2NrOiAoKSA9PiBoaWdobGlnaHRlZENvZGVCbG9jaywKICBzdHJpa2V0aHJvdWdoOiAoKSA9PiBzdHJpa2V0aHJvdWdoMiwKICB0YWJsZXM6ICgpID0+IHRhYmxlcywKICB0YXNrTGlzdEl0ZW1zOiAoKSA9PiB0YXNrTGlzdEl0ZW1zCn0pOwpmdW5jdGlvbiBoaWdobGlnaHRlZENvZGVCbG9jayh0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UuYWRkUnVsZSgiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHZhciBmaXJzdENoaWxkID0gbm9kZTIuZmlyc3RDaGlsZDsKICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiRElWIiAmJiBoaWdobGlnaHRSZWdFeHAudGVzdChub2RlMi5jbGFzc05hbWUpICYmIGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIlBSRSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuY2xhc3NOYW1lIHx8ICIiOwogICAgICB2YXIgbGFuZ3VhZ2UgPSAoY2xhc3NOYW1lLm1hdGNoKGhpZ2hsaWdodFJlZ0V4cCkgfHwgW251bGwsICIiXSlbMV07CiAgICAgIHJldHVybiAiXG5cbiIgKyBvcHRpb25zLmZlbmNlICsgbGFuZ3VhZ2UgKyAiXG4iICsgbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudCArICJcbiIgKyBvcHRpb25zLmZlbmNlICsgIlxuXG4iOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHN0cmlrZXRocm91Z2gyKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCJzdHJpa2V0aHJvdWdoIiwgewogICAgZmlsdGVyOiBbImRlbCIsICJzIiwgInN0cmlrZSJdLAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgIHJldHVybiAifiIgKyBjb250ZW50MyArICJ+IjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBpc0hlYWRpbmdSb3codHIyKSB7CiAgdmFyIHBhcmVudE5vZGUgPSB0cjIucGFyZW50Tm9kZTsKICByZXR1cm4gcGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRIRUFEIiB8fCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHRyMiAmJiAocGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRBQkxFIiB8fCBpc0ZpcnN0VGJvZHkocGFyZW50Tm9kZSkpICYmIGV2ZXJ5Mi5jYWxsKHRyMi5jaGlsZE5vZGVzLCBmdW5jdGlvbihuMTIpIHsKICAgIHJldHVybiBuMTIubm9kZU5hbWUgPT09ICJUSCI7CiAgfSk7Cn0KZnVuY3Rpb24gaXNGaXJzdFRib2R5KGVsZW1lbnQ0KSB7CiAgdmFyIHByZXZpb3VzU2libGluZyA9IGVsZW1lbnQ0LnByZXZpb3VzU2libGluZzsKICByZXR1cm4gZWxlbWVudDQubm9kZU5hbWUgPT09ICJUQk9EWSIgJiYgKCFwcmV2aW91c1NpYmxpbmcgfHwgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSAiVEhFQUQiICYmIC9eXHMqJC9pLnRlc3QocHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50KSk7Cn0KZnVuY3Rpb24gY2VsbChjb250ZW50Mywgbm9kZTIpIHsKICB2YXIgaW5kZXgyID0gaW5kZXhPZjIuY2FsbChub2RlMi5wYXJlbnROb2RlLmNoaWxkTm9kZXMsIG5vZGUyKTsKICB2YXIgcHJlZml4NCA9ICIgIjsKICBpZiAoaW5kZXgyID09PSAwKSBwcmVmaXg0ID0gInwgIjsKICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgIiB8IjsKfQpmdW5jdGlvbiB0YWJsZXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmtlZXAoZnVuY3Rpb24obm9kZTIpIHsKICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIlRBQkxFIiAmJiAhaXNIZWFkaW5nUm93KG5vZGUyLnJvd3NbMF0pOwogIH0pOwogIGZvciAodmFyIGtleTIgaW4gcnVsZXMyKSB0dXJuZG93blNlcnZpY2UuYWRkUnVsZShrZXkyLCBydWxlczJba2V5Ml0pOwp9CmZ1bmN0aW9uIHRhc2tMaXN0SXRlbXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoInRhc2tMaXN0SXRlbXMiLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi50eXBlID09PSAiY2hlY2tib3giICYmIG5vZGUyLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJMSSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICByZXR1cm4gKG5vZGUyLmNoZWNrZWQgPyAiW3hdIiA6ICJbIF0iKSArICIgIjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBnZm0yKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS51c2UoWwogICAgaGlnaGxpZ2h0ZWRDb2RlQmxvY2ssCiAgICBzdHJpa2V0aHJvdWdoMiwKICAgIHRhYmxlcywKICAgIHRhc2tMaXN0SXRlbXMKICBdKTsKfQp2YXIgaGlnaGxpZ2h0UmVnRXhwLCBpbmRleE9mMiwgZXZlcnkyLCBydWxlczI7CnZhciBpbml0X3R1cm5kb3duX3BsdWdpbl9nZm1fZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzIigpIHsKICAgIGhpZ2hsaWdodFJlZ0V4cCA9IC9oaWdobGlnaHQtKD86dGV4dHxzb3VyY2UpLShbYS16MC05XSspLzsKICAgIGluZGV4T2YyID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7CiAgICBldmVyeTIgPSBBcnJheS5wcm90b3R5cGUuZXZlcnk7CiAgICBydWxlczIgPSB7fTsKICAgIHJ1bGVzMi50YWJsZUNlbGwgPSB7CiAgICAgIGZpbHRlcjogWyJ0aCIsICJ0ZCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIGNlbGwoY29udGVudDMsIG5vZGUyKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZVJvdyA9IHsKICAgICAgZmlsdGVyOiAidHIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGJvcmRlckNlbGxzID0gIiI7CiAgICAgICAgdmFyIGFsaWduTWFwID0geyBsZWZ0OiAiOi0tIiwgcmlnaHQ6ICItLToiLCBjZW50ZXI6ICI6LToiIH07CiAgICAgICAgaWYgKGlzSGVhZGluZ1Jvdyhub2RlMikpIHsKICAgICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IG5vZGUyLmNoaWxkTm9kZXMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICB2YXIgYm9yZGVyID0gIi0tLSI7CiAgICAgICAgICAgIHZhciBhbGlnbiA9IChub2RlMi5jaGlsZE5vZGVzW2kxMV0uZ2V0QXR0cmlidXRlKCJhbGlnbiIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoYWxpZ24pIGJvcmRlciA9IGFsaWduTWFwW2FsaWduXSB8fCBib3JkZXI7CiAgICAgICAgICAgIGJvcmRlckNlbGxzICs9IGNlbGwoYm9yZGVyLCBub2RlMi5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gIlxuIiArIGNvbnRlbnQzICsgKGJvcmRlckNlbGxzID8gIlxuIiArIGJvcmRlckNlbGxzIDogIiIpOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlID0gewogICAgICAvLyBPbmx5IGNvbnZlcnQgdGFibGVzIHdpdGggYSBoZWFkaW5nIHJvdy4KICAgICAgLy8gVGFibGVzIHdpdGggbm8gaGVhZGluZyByb3cgYXJlIGtlcHQgdXNpbmcgYGtlZXBgIChzZWUgYmVsb3cpLgogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiVEFCTEUiICYmIGlzSGVhZGluZ1Jvdyhub2RlMi5yb3dzWzBdKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKCJcblxuIiwgIlxuIik7CiAgICAgICAgcmV0dXJuICJcblxuIiArIGNvbnRlbnQzICsgIlxuXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlU2VjdGlvbiA9IHsKICAgICAgZmlsdGVyOiBbInRoZWFkIiwgInRib2R5IiwgInRmb290Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiBjb250ZW50MzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLnBsdWdpbnMuanMKdmFyIHNtYXJ0eWFtbDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24ucGx1Z2lucy5qcyIoKSB7CiAgICBzbWFydHlhbWwgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90czIoKSwgMSk7CiAgICBpbml0X3VuaWZpZWQoKTsKICAgIGluaXRfcmVtYXJrX2dmbSgpOwogICAgaW5pdF9yZW1hcmtfcGFyc2UoKTsKICAgIGluaXRfcmVtYXJrX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X3JlbWFya19odG1sKCk7CiAgICBpbml0X3JlbWFya19zdHJpbmdpZnkoKTsKICAgIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcygpOwogICAgaW5pdF90dXJuZG93bl9wbHVnaW5fZ2ZtX2VzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvc21hcnRtYXJrZG93bi5jbGFzc2VzLm1kcGFyc2VkcmVzdWx0LmpzCnZhciBNZFBhcnNlZFJlc3VsdDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9jbGFzc2VzX21kcGFyc2VkcmVzdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24uY2xhc3Nlcy5tZHBhcnNlZHJlc3VsdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucygpOwogICAgTWRQYXJzZWRSZXN1bHQgPSBjbGFzcyBfTWRQYXJzZWRSZXN1bHQgewogICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgbWRQYXJzZWRSZXN1bHQgPSBuZXcgX01kUGFyc2VkUmVzdWx0KCk7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgbGV0IHlhbWxTdHJpbmc7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdW5pZmllZCgpLnVzZShyZW1hcmtQYXJzZSkudXNlKHJlbWFya0dmbSkudXNlKHJlbWFya0Zyb250bWF0dGVyLCBbInlhbWwiLCAidG9tbCJdKS51c2UocmVtYXJrU3RyaW5naWZ5KS51c2UocmVtYXJrSHRtbCkudXNlKCgpID0+ICh0cmVlKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmRpcih0cmVlKTsKICAgICAgICAgIGNvbnN0IHlhbWxDaGlsZCA9IHRyZWUuY2hpbGRyZW4uZmluZCgob2JqZWN0QXJnKSA9PiBvYmplY3RBcmcudHlwZSA9PT0gInlhbWwiKTsKICAgICAgICAgIGlmICh5YW1sQ2hpbGQpIHsKICAgICAgICAgICAgeWFtbFN0cmluZyA9IHlhbWxDaGlsZC52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5wcm9jZXNzKG1kU3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmh0bWwgPSByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICBpZiAoeWFtbFN0cmluZykgewogICAgICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSBhd2FpdCBzbWFydHlhbWwueWFtbFN0cmluZ1RvT2JqZWN0KHlhbWxTdHJpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmZyb250bWF0dGVyRGF0YSA9IHt9OwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTcgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTcsIHsKICBTbWFydE1hcmtkb3duOiAoKSA9PiBTbWFydE1hcmtkb3duCn0pOwp2YXIgU21hcnRNYXJrZG93bjsKdmFyIGluaXRfZGlzdF90czE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fY2xhc3Nlc19tZHBhcnNlZHJlc3VsdCgpOwogICAgU21hcnRNYXJrZG93biA9IGNsYXNzIF9TbWFydE1hcmtkb3duIHsKICAgICAgc3RhdGljIGFzeW5jIGVhc3lNYXJrZG93blRvSHRtbChtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBfU21hcnRNYXJrZG93bigpOwogICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gYXdhaXQgc21hcnRtYXJrZG93bkluc3RhbmNlLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQuaHRtbDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlIGEgTWRQYXJzZWRSZXN1bHQgZnJvbSBtYXJrZG93bgogICAgICAgKiBAcGFyYW0gbWRTdHJpbmdBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTWRQYXJzZWRSZXN1bHQuY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGh0bWxUb01hcmtkb3duKGh0bWxTdHJpbmcpIHsKICAgICAgICBjb25zdCB0dXJuZG93bkluc3RhbmNlID0gbmV3IHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdCh7CiAgICAgICAgICBoZWFkaW5nU3R5bGU6ICJhdHgiLAogICAgICAgICAgY29kZUJsb2NrU3R5bGU6ICJmZW5jZWQiCiAgICAgICAgfSk7CiAgICAgICAgdHVybmRvd25JbnN0YW5jZS51c2UodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLmdmbSk7CiAgICAgICAgcmV0dXJuIHR1cm5kb3duSW5zdGFuY2UudHVybmRvd24oaHRtbFN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gZXhwb3J0cy5Ub2tlbkRhdGEgPSB2b2lkIDA7CiAgICBleHBvcnRzLnBhcnNlID0gcGFyc2UxMDsKICAgIGV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGUyOwogICAgZXhwb3J0cy5tYXRjaCA9IG1hdGNoMjsKICAgIGV4cG9ydHMucGF0aFRvUmVnZXhwID0gcGF0aFRvUmVnZXhwOwogICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk3OwogICAgdmFyIERFRkFVTFRfREVMSU1JVEVSID0gIi8iOwogICAgdmFyIE5PT1BfVkFMVUUgPSAodmFsdWUyKSA9PiB2YWx1ZTI7CiAgICB2YXIgSURfU1RBUlQgPSAvXlskX1xwe0lEX1N0YXJ0fV0kL3U7CiAgICB2YXIgSURfQ09OVElOVUUgPSAvXlskXHUyMDBjXHUyMDBkXHB7SURfQ29udGludWV9XSQvdTsKICAgIHZhciBTSU1QTEVfVE9LRU5TID0gewogICAgICAvLyBHcm91cHMuCiAgICAgICJ7IjogInsiLAogICAgICAifSI6ICJ9IiwKICAgICAgLy8gUmVzZXJ2ZWQuCiAgICAgICIoIjogIigiLAogICAgICAiKSI6ICIpIiwKICAgICAgIlsiOiAiWyIsCiAgICAgICJdIjogIl0iLAogICAgICAiKyI6ICIrIiwKICAgICAgIj8iOiAiPyIsCiAgICAgICIhIjogIiEiCiAgICB9OwogICAgZnVuY3Rpb24gZXNjYXBlVGV4dChzdHIpIHsKICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9be30oKVxbXF0rPyE6KlxcXS9nLCAiXFwkJiIpOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlKHN0cikgewogICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKyo/XiR7fSgpW1xdfC9cXF0vZywgIlxcJCYiKTsKICAgIH0KICAgIHZhciBUb2tlbkRhdGEgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHRva2Vucywgb3JpZ2luYWxQYXRoKSB7CiAgICAgICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7CiAgICAgICAgdGhpcy5vcmlnaW5hbFBhdGggPSBvcmlnaW5hbFBhdGg7CiAgICAgIH0KICAgIH07CiAgICBleHBvcnRzLlRva2VuRGF0YSA9IFRva2VuRGF0YTsKICAgIHZhciBQYXRoRXJyb3IgPSBjbGFzcyBleHRlbmRzIFR5cGVFcnJvciB7CiAgICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UyLCBvcmlnaW5hbFBhdGgpIHsKICAgICAgICBsZXQgdGV4dDkgPSBtZXNzYWdlMjsKICAgICAgICBpZiAob3JpZ2luYWxQYXRoKQogICAgICAgICAgdGV4dDkgKz0gYDogJHtvcmlnaW5hbFBhdGh9YDsKICAgICAgICB0ZXh0OSArPSBgOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm9gOwogICAgICAgIHN1cGVyKHRleHQ5KTsKICAgICAgICB0aGlzLm9yaWdpbmFsUGF0aCA9IG9yaWdpbmFsUGF0aDsKICAgICAgfQogICAgfTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gUGF0aEVycm9yOwogICAgZnVuY3Rpb24gcGFyc2UxMChzdHIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGVuY29kZVBhdGggPSBOT09QX1ZBTFVFIH0gPSBvcHRpb25zOwogICAgICBjb25zdCBjaGFycyA9IFsuLi5zdHJdOwogICAgICBjb25zdCB0b2tlbnMgPSBbXTsKICAgICAgbGV0IGluZGV4MiA9IDA7CiAgICAgIGxldCBwb3MgPSAwOwogICAgICBmdW5jdGlvbiBuYW1lKCkgewogICAgICAgIGxldCB2YWx1ZTIgPSAiIjsKICAgICAgICBpZiAoSURfU1RBUlQudGVzdChjaGFyc1tpbmRleDJdKSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICB2YWx1ZTIgKz0gY2hhcnNbaW5kZXgyKytdOwogICAgICAgICAgfSB3aGlsZSAoSURfQ09OVElOVUUudGVzdChjaGFyc1tpbmRleDJdKSk7CiAgICAgICAgfSBlbHNlIGlmIChjaGFyc1tpbmRleDJdID09PSAnIicpIHsKICAgICAgICAgIGxldCBxdW90ZVN0YXJ0ID0gaW5kZXgyOwogICAgICAgICAgd2hpbGUgKGluZGV4MisrIDwgY2hhcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChjaGFyc1tpbmRleDJdID09PSAnIicpIHsKICAgICAgICAgICAgICBpbmRleDIrKzsKICAgICAgICAgICAgICBxdW90ZVN0YXJ0ID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2hhcnNbaW5kZXgyXSA9PT0gIlxcIikKICAgICAgICAgICAgICBpbmRleDIrKzsKICAgICAgICAgICAgdmFsdWUyICs9IGNoYXJzW2luZGV4Ml07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocXVvdGVTdGFydCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBVbnRlcm1pbmF0ZWQgcXVvdGUgYXQgaW5kZXggJHtxdW90ZVN0YXJ0fWAsIHN0cik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghdmFsdWUyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IGluZGV4ICR7aW5kZXgyfWAsIHN0cik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgIH0KICAgICAgd2hpbGUgKGluZGV4MiA8IGNoYXJzLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHZhbHVlMiA9IGNoYXJzW2luZGV4Ml07CiAgICAgICAgY29uc3QgdHlwZTUgPSBTSU1QTEVfVE9LRU5TW3ZhbHVlMl07CiAgICAgICAgaWYgKHR5cGU1KSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IHR5cGU1LCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiB2YWx1ZTIgfSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgPT09ICJcXCIpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogImVzY2FwZSIsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IGNoYXJzW2luZGV4MisrXSB9KTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIjoiKSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJwYXJhbSIsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IG5hbWUoKSB9KTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIioiKSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJ3aWxkY2FyZCIsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IG5hbWUoKSB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAiY2hhciIsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IHZhbHVlMiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAiZW5kIiwgaW5kZXg6IGluZGV4MiwgdmFsdWU6ICIiIH0pOwogICAgICBmdW5jdGlvbiBjb25zdW1lVW50aWwoZW5kVHlwZSkgewogICAgICAgIGNvbnN0IG91dHB1dCA9IFtdOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1twb3MrK107CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gZW5kVHlwZSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gImNoYXIiIHx8IHRva2VuLnR5cGUgPT09ICJlc2NhcGUiKSB7CiAgICAgICAgICAgIGxldCBwYXRoMiA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBsZXQgY3VyID0gdG9rZW5zW3Bvc107CiAgICAgICAgICAgIHdoaWxlIChjdXIudHlwZSA9PT0gImNoYXIiIHx8IGN1ci50eXBlID09PSAiZXNjYXBlIikgewogICAgICAgICAgICAgIHBhdGgyICs9IGN1ci52YWx1ZTsKICAgICAgICAgICAgICBjdXIgPSB0b2tlbnNbKytwb3NdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgdmFsdWU6IGVuY29kZVBhdGgocGF0aDIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iIHx8IHRva2VuLnR5cGUgPT09ICJ3aWxkY2FyZCIpIHsKICAgICAgICAgICAgb3V0cHV0LnB1c2goewogICAgICAgICAgICAgIHR5cGU6IHRva2VuLnR5cGUsCiAgICAgICAgICAgICAgbmFtZTogdG9rZW4udmFsdWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ7IikgewogICAgICAgICAgICBvdXRwdXQucHVzaCh7CiAgICAgICAgICAgICAgdHlwZTogImdyb3VwIiwKICAgICAgICAgICAgICB0b2tlbnM6IGNvbnN1bWVVbnRpbCgifSIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYFVuZXhwZWN0ZWQgJHt0b2tlbi50eXBlfSBhdCBpbmRleCAke3Rva2VuLmluZGV4fSwgZXhwZWN0ZWQgJHtlbmRUeXBlfWAsIHN0cik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUb2tlbkRhdGEoY29uc3VtZVVudGlsKCJlbmQiKSwgc3RyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXBpbGUyKHBhdGgyLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBlbmNvZGU6IGVuY29kZTIgPSBlbmNvZGVVUklDb21wb25lbnQsIGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSIH0gPSBvcHRpb25zOwogICAgICBjb25zdCBkYXRhMTEgPSB0eXBlb2YgcGF0aDIgPT09ICJvYmplY3QiID8gcGF0aDIgOiBwYXJzZTEwKHBhdGgyLCBvcHRpb25zKTsKICAgICAgY29uc3QgZm4gPSB0b2tlbnNUb0Z1bmN0aW9uKGRhdGExMS50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlMik7CiAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRoMyhwYXJhbXMyID0ge30pIHsKICAgICAgICBjb25zdCBbcGF0aDQsIC4uLm1pc3NpbmddID0gZm4ocGFyYW1zMik7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBhcmFtZXRlcnM6ICR7bWlzc2luZy5qb2luKCIsICIpfWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGF0aDQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKSB7CiAgICAgIGNvbnN0IGVuY29kZXJzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUyKSk7CiAgICAgIHJldHVybiAoZGF0YTExKSA9PiB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gWyIiXTsKICAgICAgICBmb3IgKGNvbnN0IGVuY29kZXIyIG9mIGVuY29kZXJzKSB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5leHRyYXNdID0gZW5jb2RlcjIoZGF0YTExKTsKICAgICAgICAgIHJlc3VsdFswXSArPSB2YWx1ZTI7CiAgICAgICAgICByZXN1bHQucHVzaCguLi5leHRyYXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gdG9rZW5Ub0Z1bmN0aW9uKHRva2VuLCBkZWxpbWl0ZXIsIGVuY29kZTIpIHsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0ZXh0IikKICAgICAgICByZXR1cm4gKCkgPT4gW3Rva2VuLnZhbHVlXTsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICBjb25zdCBmbiA9IHRva2Vuc1RvRnVuY3Rpb24odG9rZW4udG9rZW5zLCBkZWxpbWl0ZXIsIGVuY29kZTIpOwogICAgICAgIHJldHVybiAoZGF0YTExKSA9PiB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5taXNzaW5nXSA9IGZuKGRhdGExMSk7CiAgICAgICAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gW3ZhbHVlMl07CiAgICAgICAgICByZXR1cm4gWyIiXTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGNvbnN0IGVuY29kZVZhbHVlID0gZW5jb2RlMiB8fCBOT09QX1ZBTFVFOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIiAmJiBlbmNvZGUyICE9PSBmYWxzZSkgewogICAgICAgIHJldHVybiAoZGF0YTExKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBkYXRhMTFbdG9rZW4ubmFtZV07CiAgICAgICAgICBpZiAodmFsdWUyID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBbIiIsIHRva2VuLm5hbWVdOwogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlMikgfHwgdmFsdWUyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfSIgdG8gYmUgYSBub24tZW1wdHkgYXJyYXlgKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHZhbHVlMi5tYXAoKHZhbHVlMywgaW5kZXgyKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTMgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfS8ke2luZGV4Mn0iIHRvIGJlIGEgc3RyaW5nYCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlbmNvZGVWYWx1ZSh2YWx1ZTMpOwogICAgICAgICAgICB9KS5qb2luKGRlbGltaXRlcikKICAgICAgICAgIF07CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gKGRhdGExMSkgPT4gewogICAgICAgIGNvbnN0IHZhbHVlMiA9IGRhdGExMVt0b2tlbi5uYW1lXTsKICAgICAgICBpZiAodmFsdWUyID09IG51bGwpCiAgICAgICAgICByZXR1cm4gWyIiLCB0b2tlbi5uYW1lXTsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3Rva2VuLm5hbWV9IiB0byBiZSBhIHN0cmluZ2ApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gW2VuY29kZVZhbHVlKHZhbHVlMildOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gbWF0Y2gyKHBhdGgyLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBkZWNvZGU6IGRlY29kZTIgPSBkZWNvZGVVUklDb21wb25lbnQsIGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSIH0gPSBvcHRpb25zOwogICAgICBjb25zdCB7IHJlZ2V4cCwga2V5czoga2V5czIgfSA9IHBhdGhUb1JlZ2V4cChwYXRoMiwgb3B0aW9ucyk7CiAgICAgIGNvbnN0IGRlY29kZXJzID0ga2V5czIubWFwKChrZXkyKSA9PiB7CiAgICAgICAgaWYgKGRlY29kZTIgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIE5PT1BfVkFMVUU7CiAgICAgICAgaWYgKGtleTIudHlwZSA9PT0gInBhcmFtIikKICAgICAgICAgIHJldHVybiBkZWNvZGUyOwogICAgICAgIHJldHVybiAodmFsdWUyKSA9PiB2YWx1ZTIuc3BsaXQoZGVsaW1pdGVyKS5tYXAoZGVjb2RlMik7CiAgICAgIH0pOwogICAgICByZXR1cm4gZnVuY3Rpb24gbWF0Y2gzKGlucHV0KSB7CiAgICAgICAgY29uc3QgbTYgPSByZWdleHAuZXhlYyhpbnB1dCk7CiAgICAgICAgaWYgKCFtNikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCBwYXRoMyA9IG02WzBdOwogICAgICAgIGNvbnN0IHBhcmFtczIgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPCBtNi5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBpZiAobTZbaTExXSA9PT0gdm9pZCAwKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGNvbnN0IGtleTIgPSBrZXlzMltpMTEgLSAxXTsKICAgICAgICAgIGNvbnN0IGRlY29kZXIyID0gZGVjb2RlcnNbaTExIC0gMV07CiAgICAgICAgICBwYXJhbXMyW2tleTIubmFtZV0gPSBkZWNvZGVyMihtNltpMTFdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcGF0aDogcGF0aDMsIHBhcmFtczogcGFyYW1zMiB9OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gcGF0aFRvUmVnZXhwKHBhdGgyLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiwgZW5kOiBlbmQzID0gdHJ1ZSwgc2Vuc2l0aXZlID0gZmFsc2UsIHRyYWlsaW5nID0gdHJ1ZSB9ID0gb3B0aW9uczsKICAgICAgY29uc3Qga2V5czIgPSBbXTsKICAgICAgY29uc3QgZmxhZ3MgPSBzZW5zaXRpdmUgPyAiIiA6ICJpIjsKICAgICAgY29uc3Qgc291cmNlcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHBhdGhzVG9BcnJheShwYXRoMiwgW10pKSB7CiAgICAgICAgY29uc3QgZGF0YTExID0gdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/IGlucHV0IDogcGFyc2UxMChpbnB1dCwgb3B0aW9ucyk7CiAgICAgICAgZm9yIChjb25zdCB0b2tlbnMgb2YgZmxhdHRlbihkYXRhMTEudG9rZW5zLCAwLCBbXSkpIHsKICAgICAgICAgIHNvdXJjZXMucHVzaCh0b1JlZ0V4cFNvdXJjZSh0b2tlbnMsIGRlbGltaXRlciwga2V5czIsIGRhdGExMS5vcmlnaW5hbFBhdGgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IHBhdHRlcm4gPSBgXig/OiR7c291cmNlcy5qb2luKCJ8Iil9KWA7CiAgICAgIGlmICh0cmFpbGluZykKICAgICAgICBwYXR0ZXJuICs9IGAoPzoke2VzY2FwZShkZWxpbWl0ZXIpfSQpP2A7CiAgICAgIHBhdHRlcm4gKz0gZW5kMyA/ICIkIiA6IGAoPz0ke2VzY2FwZShkZWxpbWl0ZXIpfXwkKWA7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOwogICAgICByZXR1cm4geyByZWdleHAsIGtleXM6IGtleXMyIH07CiAgICB9CiAgICBmdW5jdGlvbiBwYXRoc1RvQXJyYXkocGF0aHMsIGluaXQpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aHMpKSB7CiAgICAgICAgZm9yIChjb25zdCBwNyBvZiBwYXRocykKICAgICAgICAgIHBhdGhzVG9BcnJheShwNywgaW5pdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdC5wdXNoKHBhdGhzKTsKICAgICAgfQogICAgICByZXR1cm4gaW5pdDsKICAgIH0KICAgIGZ1bmN0aW9uKiBmbGF0dGVuKHRva2VucywgaW5kZXgyLCBpbml0KSB7CiAgICAgIGlmIChpbmRleDIgPT09IHRva2Vucy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4geWllbGQgaW5pdDsKICAgICAgfQogICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleDJdOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImdyb3VwIikgewogICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIGZsYXR0ZW4odG9rZW4udG9rZW5zLCAwLCBpbml0LnNsaWNlKCkpKSB7CiAgICAgICAgICB5aWVsZCogZmxhdHRlbih0b2tlbnMsIGluZGV4MiArIDEsIHNlcSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGluaXQucHVzaCh0b2tlbik7CiAgICAgIH0KICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleDIgKyAxLCBpbml0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHRvUmVnRXhwU291cmNlKHRva2VucywgZGVsaW1pdGVyLCBrZXlzMiwgb3JpZ2luYWxQYXRoKSB7CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgbGV0IGJhY2t0cmFjayA9ICIiOwogICAgICBsZXQgaXNTYWZlU2VnbWVudFBhcmFtID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICByZXN1bHQgKz0gZXNjYXBlKHRva2VuLnZhbHVlKTsKICAgICAgICAgIGJhY2t0cmFjayArPSB0b2tlbi52YWx1ZTsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSB8fCAoaXNTYWZlU2VnbWVudFBhcmFtID0gdG9rZW4udmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIgfHwgdG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgaWYgKCFpc1NhZmVTZWdtZW50UGFyYW0gJiYgIWJhY2t0cmFjaykgewogICAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke3Rva2VuLm5hbWV9IiAke3Rva2VuLnR5cGV9YCwgb3JpZ2luYWxQYXRoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iKSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKCR7bmVnYXRlKGRlbGltaXRlciwgaXNTYWZlU2VnbWVudFBhcmFtID8gIiIgOiBiYWNrdHJhY2spfSspYDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKFtcXHNcXFNdKylgOwogICAgICAgICAgfQogICAgICAgICAga2V5czIucHVzaCh0b2tlbik7CiAgICAgICAgICBiYWNrdHJhY2sgPSAiIjsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSA9IGZhbHNlOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWdhdGUoZGVsaW1pdGVyLCBiYWNrdHJhY2spIHsKICAgICAgaWYgKGJhY2t0cmFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgaWYgKGRlbGltaXRlci5sZW5ndGggPCAyKQogICAgICAgICAgcmV0dXJuIGBbXiR7ZXNjYXBlKGRlbGltaXRlciArIGJhY2t0cmFjayl9XWA7CiAgICAgICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShkZWxpbWl0ZXIpfSlbXiR7ZXNjYXBlKGJhY2t0cmFjayl9XSlgOwogICAgICB9CiAgICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikgewogICAgICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoYmFja3RyYWNrKX0pW14ke2VzY2FwZShkZWxpbWl0ZXIpfV0pYDsKICAgICAgfQogICAgICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9fCR7ZXNjYXBlKGRlbGltaXRlcil9KVtcXHNcXFNdKWA7CiAgICB9CiAgICBmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnModG9rZW5zKSB7CiAgICAgIGxldCB2YWx1ZTIgPSAiIjsKICAgICAgbGV0IGkxMSA9IDA7CiAgICAgIGZ1bmN0aW9uIG5hbWUodmFsdWUzKSB7CiAgICAgICAgY29uc3QgaXNTYWZlID0gaXNOYW1lU2FmZSh2YWx1ZTMpICYmIGlzTmV4dE5hbWVTYWZlKHRva2Vuc1tpMTFdKTsKICAgICAgICByZXR1cm4gaXNTYWZlID8gdmFsdWUzIDogSlNPTi5zdHJpbmdpZnkodmFsdWUzKTsKICAgICAgfQogICAgICB3aGlsZSAoaTExIDwgdG9rZW5zLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2kxMSsrXTsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gZXNjYXBlVGV4dCh0b2tlbi52YWx1ZSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgeyR7c3RyaW5naWZ5VG9rZW5zKHRva2VuLnRva2Vucyl9fWA7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgOiR7bmFtZSh0b2tlbi5uYW1lKX1gOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAid2lsZGNhcmQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYCoke25hbWUodG9rZW4ubmFtZSl9YDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7dG9rZW4udHlwZX1gKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgZnVuY3Rpb24gc3RyaW5naWZ5NyhkYXRhMTEpIHsKICAgICAgcmV0dXJuIHN0cmluZ2lmeVRva2VucyhkYXRhMTEudG9rZW5zKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmFtZVNhZmUobmFtZSkgewogICAgICBjb25zdCBbZmlyc3QyLCAuLi5yZXN0XSA9IG5hbWU7CiAgICAgIHJldHVybiBJRF9TVEFSVC50ZXN0KGZpcnN0MikgJiYgcmVzdC5ldmVyeSgoY2hhcikgPT4gSURfQ09OVElOVUUudGVzdChjaGFyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc05leHROYW1lU2FmZSh0b2tlbikgewogICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInRleHQiKQogICAgICAgIHJldHVybiAhSURfQ09OVElOVUUudGVzdCh0b2tlbi52YWx1ZVswXSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcwp2YXIgcGF0aFRvUmVnRXhwOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBwYXRoVG9SZWdFeHAgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdCgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMucXVlcnlwYXJhbXMuanMKdmFyIFF1ZXJ5UGFyYW1zOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cm91dGVyX3BsdWdpbnMoKTsKICAgIFF1ZXJ5UGFyYW1zID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICBnZXRBbGxBc09iamVjdCgpIHsKICAgICAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModXJsU2VhcmNoUGFyYW1zLmVudHJpZXMoKSk7CiAgICAgIH0KICAgICAgc2V0UXVlcnlQYXJhbShxdWVyeUtleUFyZywgcXVlcnlDb250ZW50QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5zZXQocXVlcnlLZXlBcmcsIHF1ZXJ5Q29udGVudEFyZyk7CiAgICAgICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gInB1c2giID8gaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSkgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTsKICAgICAgfQogICAgICBkZWxldGVRdWVyeVBhcmFtKHF1ZXJ5S2V5QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5kZWxldGUocXVlcnlLZXlBcmcpOwogICAgICAgIHB1c2hPclJlcGxhY2VBcmcgPT09ICJwdXNoIiA/IGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICI/IiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpIDogaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgZ2V0UXVlcnlQYXJhbShxdWVyeVBhcmFtTmFtZSkgewogICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5nZXRBbGxBc09iamVjdCgpOwogICAgICAgIHJldHVybiBxdWVyeVBhcmFtc1txdWVyeVBhcmFtTmFtZV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzCnZhciByb3V0ZUxvZywgU21hcnRSb3V0ZXI7CnZhciBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfc21hcnRyb3V0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zKCk7CiAgICByb3V0ZUxvZyA9IChtZXNzYWdlMikgPT4gewogICAgICBjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7bWVzc2FnZTJ9YCwgImNvbG9yOiByZ2IoMjU1LCAxMDUsIDEwMCk7IiwgImNvbG9yOiBpbmhlcml0Iik7CiAgICB9OwogICAgU21hcnRSb3V0ZXIgPSBjbGFzcyBfU21hcnRSb3V0ZXIgewogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSb3V0ZXIuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnLCBiYXNlUGF0aCA9ICIiKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gbmV3IFF1ZXJ5UGFyYW1zKCk7CiAgICAgICAgdGhpcy5yb3V0ZXMgPSBbXTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7CiAgICAgICAgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyID0gKHBvcFN0YXRlRXZlbnRBcmcpID0+IHsKICAgICAgICAgIHBvcFN0YXRlRXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIHN1Yi1yb3V0ZXIgd2l0aCBhIHNwZWNpZmljIHByZWZpeAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViUGF0aAogICAgICAgKiBAcGFyYW0ge0lSb3V0ZXJPcHRpb25zfSBbb3B0aW9uc10KICAgICAgICovCiAgICAgIGNyZWF0ZVN1YlJvdXRlcihzdWJQYXRoLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgbmV3QmFzZVBhdGggPSBgJHt0aGlzLmJhc2VQYXRofSR7c3ViUGF0aH1gOwogICAgICAgIHJldHVybiBuZXcgX1NtYXJ0Um91dGVyKHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH0sIG5ld0Jhc2VQYXRoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHVzaCByb3V0ZSBzdGF0ZSB0byBoaXN0b3J5IHN0YWNrCiAgICAgICAqLwogICAgICBhc3luYyBwdXNoVXJsKHVybCA9ICIvIiwgc3RhdGUgPSB7fSkgewogICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBgJHt0aGlzLmJhc2VQYXRofSR7dXJsfWA7CiAgICAgICAgaWYgKGZ1bGxVcmwgIT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCB3aW5kb3cuZG9jdW1lbnQudGl0bGUsIGZ1bGxVcmwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIHdpbmRvdy5kb2N1bWVudC50aXRsZSwgZnVsbFVybCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoIHJvdXRlIHdpdGggaGFuZGxlcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHJvdXRlQXJnCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXJBcmcKICAgICAgICovCiAgICAgIG9uKHJvdXRlQXJnLCBoYW5kbGVyQXJnKSB7CiAgICAgICAgY29uc3QgZnVsbFJvdXRlID0gYCR7dGhpcy5iYXNlUGF0aH0ke3JvdXRlQXJnfWA7CiAgICAgICAgY29uc3Qgcm91dGVPYmplY3QgPSB7CiAgICAgICAgICBtYXRjaEZ1bmN0aW9uOiBwYXRoVG9SZWdFeHAubWF0Y2goZnVsbFJvdXRlKSwKICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXJBcmcKICAgICAgICB9OwogICAgICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVPYmplY3QpOwogICAgICAgIGNvbnN0IHJlbW92ZUZ1bmN0aW9uID0gKCkgPT4gewogICAgICAgICAgdGhpcy5yb3V0ZXMuc3BsaWNlKHRoaXMucm91dGVzLmluZGV4T2Yocm91dGVPYmplY3QpLCAxKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiByZW1vdmVGdW5jdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXBwbHkgcm91dGVzIGhhbmRsZXIgdG8gY3VycmVudCByb3V0ZQogICAgICAgKi8KICAgICAgYXN5bmMgX2hhbmRsZVJvdXRlU3RhdGUoKSB7CiAgICAgICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwogICAgICAgIGNvbnN0IHdhbnRlZFJvdXRlcyA9IHRoaXMucm91dGVzLmZpbHRlcigocm91dGVBcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhIXJvdXRlQXJnLm1hdGNoRnVuY3Rpb24oY3VycmVudExvY2F0aW9uKTsKICAgICAgICB9KTsKICAgICAgICBmb3IgKGNvbnN0IHdhbnRlZFJvdXRlIG9mIHdhbnRlZFJvdXRlcykgewogICAgICAgICAgY29uc3Qgcm91dGVSZXN1bHQgPSB3YW50ZWRSb3V0ZS5tYXRjaEZ1bmN0aW9uKGN1cnJlbnRMb2NhdGlvbik7CiAgICAgICAgICB3YW50ZWRSb3V0ZS5oYW5kbGVyKHsKICAgICAgICAgICAgLi4ucm91dGVSZXN1bHQudmFsdWVPZigpLAogICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcy5nZXRBbGxBc09iamVjdCgpCiAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgd2V0aGVyIGVudHJpZXMgaXMgc3VwcG9ydGVkIGluIHR5cGluZ3MKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgcm91dGVyIGluc3RhbmNlLCByZW1vdmluZyBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcwogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLCB0aGlzLnBvcHN0YXRlTGlzdGVuZXIpOwogICAgICAgIHRoaXMucm91dGVzID0gW107CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTgsIHsKICBTbWFydFJvdXRlcjogKCkgPT4gU21hcnRSb3V0ZXIKfSk7CnZhciBpbml0X2Rpc3RfdHMxOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfY2xhc3Nlc19zbWFydHJvdXRlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvcGx1Z2lucy5qcwp2YXIgaW5pdF9wbHVnaW5zMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9zaGEyNTYuZmFsbGJhY2suanMKZnVuY3Rpb24gcm90cihuMTIsIGI1KSB7CiAgcmV0dXJuIG4xMiA+Pj4gYjUgfCBuMTIgPDwgMzIgLSBiNTsKfQpmdW5jdGlvbiBzaGEyNTZUcmFuc2Zvcm0oVzMsIEgzKSB7CiAgbGV0IGE1ID0gSDNbMF07CiAgbGV0IGI1ID0gSDNbMV07CiAgbGV0IGMxMSA9IEgzWzJdOwogIGxldCBkNSA9IEgzWzNdOwogIGxldCBlMTEgPSBIM1s0XTsKICBsZXQgZjcgPSBIM1s1XTsKICBsZXQgZzQgPSBIM1s2XTsKICBsZXQgaDggPSBIM1s3XTsKICBmb3IgKGxldCBqNCA9IDA7IGo0IDwgNjQ7IGo0KyspIHsKICAgIGlmIChqNCA+PSAxNikgewogICAgICBjb25zdCBzMCA9IHJvdHIoVzNbajQgLSAxNV0sIDcpIF4gcm90cihXM1tqNCAtIDE1XSwgMTgpIF4gVzNbajQgLSAxNV0gPj4+IDM7CiAgICAgIGNvbnN0IHMxID0gcm90cihXM1tqNCAtIDJdLCAxNykgXiByb3RyKFczW2o0IC0gMl0sIDE5KSBeIFczW2o0IC0gMl0gPj4+IDEwOwogICAgICBXM1tqNF0gPSBXM1tqNCAtIDE2XSArIHMwICsgVzNbajQgLSA3XSArIHMxID4+PiAwOwogICAgfQogICAgY29uc3QgUzEgPSByb3RyKGUxMSwgNikgXiByb3RyKGUxMSwgMTEpIF4gcm90cihlMTEsIDI1KTsKICAgIGNvbnN0IGNoID0gZTExICYgZjcgXiB+ZTExICYgZzQ7CiAgICBjb25zdCB0ZW1wMSA9IGg4ICsgUzEgKyBjaCArIEtbajRdICsgVzNbajRdID4+PiAwOwogICAgY29uc3QgUzAgPSByb3RyKGE1LCAyKSBeIHJvdHIoYTUsIDEzKSBeIHJvdHIoYTUsIDIyKTsKICAgIGNvbnN0IG1haiA9IGE1ICYgYjUgXiBhNSAmIGMxMSBeIGI1ICYgYzExOwogICAgY29uc3QgdGVtcDIgPSBTMCArIG1haiA+Pj4gMDsKICAgIGg4ID0gZzQ7CiAgICBnNCA9IGY3OwogICAgZjcgPSBlMTE7CiAgICBlMTEgPSBkNSArIHRlbXAxID4+PiAwOwogICAgZDUgPSBjMTE7CiAgICBjMTEgPSBiNTsKICAgIGI1ID0gYTU7CiAgICBhNSA9IHRlbXAxICsgdGVtcDIgPj4+IDA7CiAgfQogIEgzWzBdID0gSDNbMF0gKyBhNSA+Pj4gMDsKICBIM1sxXSA9IEgzWzFdICsgYjUgPj4+IDA7CiAgSDNbMl0gPSBIM1syXSArIGMxMSA+Pj4gMDsKICBIM1szXSA9IEgzWzNdICsgZDUgPj4+IDA7CiAgSDNbNF0gPSBIM1s0XSArIGUxMSA+Pj4gMDsKICBIM1s1XSA9IEgzWzVdICsgZjcgPj4+IDA7CiAgSDNbNl0gPSBIM1s2XSArIGc0ID4+PiAwOwogIEgzWzddID0gSDNbN10gKyBoOCA+Pj4gMDsKfQpmdW5jdGlvbiBzaGEyNTZGYWxsYmFjayhieXRlcykgewogIGNvbnN0IEhfY29weSA9IFsuLi5IMl07CiAgY29uc3QgbXNnTGVuID0gYnl0ZXMubGVuZ3RoOwogIGNvbnN0IG1zZ0JpdExlbiA9IG1zZ0xlbiAqIDg7CiAgY29uc3QgcGFkTGVuID0gbXNnTGVuICUgNjQgPCA1NiA/IDU2IC0gbXNnTGVuICUgNjQgOiAxMjAgLSBtc2dMZW4gJSA2NDsKICBjb25zdCBwYWRkZWQgPSBuZXcgVWludDhBcnJheShtc2dMZW4gKyBwYWRMZW4gKyA4KTsKICBwYWRkZWQuc2V0KGJ5dGVzKTsKICBwYWRkZWRbbXNnTGVuXSA9IDEyODsKICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhwYWRkZWQuYnVmZmVyKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDgsIDAsIGZhbHNlKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDQsIG1zZ0JpdExlbiA+Pj4gMCwgZmFsc2UpOwogIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IHBhZGRlZC5sZW5ndGg7IG9mZnNldCArPSA2NCkgewogICAgY29uc3QgVzMgPSBuZXcgQXJyYXkoNjQpOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgMTY7IGkxMSsrKSB7CiAgICAgIFczW2kxMV0gPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgaTExICogNCwgZmFsc2UpOwogICAgfQogICAgc2hhMjU2VHJhbnNmb3JtKFczLCBIX2NvcHkpOwogIH0KICBsZXQgaGV4MiA9ICIiOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IDg7IGkxMSsrKSB7CiAgICBoZXgyICs9IEhfY29weVtpMTFdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCAiMCIpOwogIH0KICByZXR1cm4gaGV4MjsKfQp2YXIgSywgSDI7CnZhciBpbml0X3NoYTI1Nl9mYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3NoYTI1Ni5mYWxsYmFjay5qcyIoKSB7CiAgICBLID0gWwogICAgICAxMTE2MzUyNDA4LAogICAgICAxODk5NDQ3NDQxLAogICAgICAzMDQ5MzIzNDcxLAogICAgICAzOTIxMDA5NTczLAogICAgICA5NjE5ODcxNjMsCiAgICAgIDE1MDg5NzA5OTMsCiAgICAgIDI0NTM2MzU3NDgsCiAgICAgIDI4NzA3NjMyMjEsCiAgICAgIDM2MjQzODEwODAsCiAgICAgIDMxMDU5ODQwMSwKICAgICAgNjA3MjI1Mjc4LAogICAgICAxNDI2ODgxOTg3LAogICAgICAxOTI1MDc4Mzg4LAogICAgICAyMTYyMDc4MjA2LAogICAgICAyNjE0ODg4MTAzLAogICAgICAzMjQ4MjIyNTgwLAogICAgICAzODM1MzkwNDAxLAogICAgICA0MDIyMjI0Nzc0LAogICAgICAyNjQzNDcwNzgsCiAgICAgIDYwNDgwNzYyOCwKICAgICAgNzcwMjU1OTgzLAogICAgICAxMjQ5MTUwMTIyLAogICAgICAxNTU1MDgxNjkyLAogICAgICAxOTk2MDY0OTg2LAogICAgICAyNTU0MjIwODgyLAogICAgICAyODIxODM0MzQ5LAogICAgICAyOTUyOTk2ODA4LAogICAgICAzMjEwMzEzNjcxLAogICAgICAzMzM2NTcxODkxLAogICAgICAzNTg0NTI4NzExLAogICAgICAxMTM5MjY5OTMsCiAgICAgIDMzODI0MTg5NSwKICAgICAgNjY2MzA3MjA1LAogICAgICA3NzM1Mjk5MTIsCiAgICAgIDEyOTQ3NTczNzIsCiAgICAgIDEzOTYxODIyOTEsCiAgICAgIDE2OTUxODM3MDAsCiAgICAgIDE5ODY2NjEwNTEsCiAgICAgIDIxNzcwMjYzNTAsCiAgICAgIDI0NTY5NTYwMzcsCiAgICAgIDI3MzA0ODU5MjEsCiAgICAgIDI4MjAzMDI0MTEsCiAgICAgIDMyNTk3MzA4MDAsCiAgICAgIDMzNDU3NjQ3NzEsCiAgICAgIDM1MTYwNjU4MTcsCiAgICAgIDM2MDAzNTI4MDQsCiAgICAgIDQwOTQ1NzE5MDksCiAgICAgIDI3NTQyMzM0NCwKICAgICAgNDMwMjI3NzM0LAogICAgICA1MDY5NDg2MTYsCiAgICAgIDY1OTA2MDU1NiwKICAgICAgODgzOTk3ODc3LAogICAgICA5NTgxMzk1NzEsCiAgICAgIDEzMjI4MjIyMTgsCiAgICAgIDE1MzcwMDIwNjMsCiAgICAgIDE3NDc4NzM3NzksCiAgICAgIDE5NTU1NjIyMjIsCiAgICAgIDIwMjQxMDQ4MTUsCiAgICAgIDIyMjc3MzA0NTIsCiAgICAgIDIzNjE4NTI0MjQsCiAgICAgIDI0Mjg0MzY0NzQsCiAgICAgIDI3NTY3MzQxODcsCiAgICAgIDMyMDQwMzE0NzksCiAgICAgIDMzMjkzMjUyOTgKICAgIF07CiAgICBIMiA9IFsKICAgICAgMTc3OTAzMzcwMywKICAgICAgMzE0NDEzNDI3NywKICAgICAgMTAxMzkwNDI0MiwKICAgICAgMjc3MzQ4MDc2MiwKICAgICAgMTM1OTg5MzExOSwKICAgICAgMjYwMDgyMjkyNCwKICAgICAgNTI4NzM0NjM1LAogICAgICAxNTQxNDU5MjI1CiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvaW5kZXguanMKdmFyIGRpc3RfdHNfd2ViX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0cywgewogIG1kNUZyb21TdHJpbmc6ICgpID0+IG1kNUZyb21TdHJpbmcsCiAgc2hhMjU2RnJvbUJ1ZmZlcjogKCkgPT4gc2hhMjU2RnJvbUJ1ZmZlciwKICBzaGEyNTZGcm9tRmlsZTogKCkgPT4gc2hhMjU2RnJvbUZpbGUsCiAgc2hhMjU2RnJvbVN0cmVhbTogKCkgPT4gc2hhMjU2RnJvbVN0cmVhbSwKICBzaGEyNTZGcm9tU3RyaW5nOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nLAogIHNoYTI1NkZyb21TdHJpbmdTeW5jOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nU3luYywKICBzaGEyNjVGcm9tT2JqZWN0OiAoKSA9PiBzaGEyNjVGcm9tT2JqZWN0Cn0pOwp2YXIgaGV4LCBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSwgc2hhMjU2RnJvbVN0cmluZywgc2hhMjU2RnJvbVN0cmluZ1N5bmMsIHNoYTI1NkZyb21CdWZmZXIsIHNoYTI2NUZyb21PYmplY3QsIHNoYTI1NkZyb21TdHJlYW0sIHNoYTI1NkZyb21GaWxlLCBtZDVGcm9tU3RyaW5nOwp2YXIgaW5pdF9kaXN0X3RzX3dlYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL2luZGV4LmpzIigpIHsKICAgIGluaXRfcGx1Z2luczIoKTsKICAgIGluaXRfc2hhMjU2X2ZhbGxiYWNrKCk7CiAgICBoZXggPSAoYnVmZmVyMikgPT4gewogICAgICBjb25zdCBoZXhDb2RlcyA9IFtdOwogICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcjIpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB2aWV3LmJ5dGVMZW5ndGg7IGkxMSArPSA0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdmlldy5nZXRVaW50MzIoaTExKTsKICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlMi50b1N0cmluZygxNik7CiAgICAgICAgY29uc3QgcGFkZGluZyA9ICIwMDAwMDAwMCI7CiAgICAgICAgY29uc3QgcGFkZGVkVmFsdWUgPSAocGFkZGluZyArIHN0cmluZ1ZhbHVlKS5zbGljZSgtcGFkZGluZy5sZW5ndGgpOwogICAgICAgIGhleENvZGVzLnB1c2gocGFkZGVkVmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBoZXhDb2Rlcy5qb2luKCIiKTsKICAgIH07CiAgICBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSA9ICgpID0+IHsKICAgICAgcmV0dXJuIHR5cGVvZiBjcnlwdG8gIT09ICJ1bmRlZmluZWQiICYmIGNyeXB0by5zdWJ0bGUgIT09IHZvaWQgMDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyaW5nID0gYXN5bmMgKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBidWZmZXIyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGlmIChpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgYnVmZmVyMik7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGV4KGhhc2gpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKGJ1ZmZlcjIpOwogICAgICB9CiAgICB9OwogICAgc2hhMjU2RnJvbVN0cmluZ1N5bmMgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUud2Fybigic2hhMjU2RnJvbVN0cmluZ1N5bmMgaXMgbm90IHRydWx5IHN5bmNocm9ub3VzIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFVzZSBzaGEyNTZGcm9tU3RyaW5nIGluc3RlYWQuIik7CiAgICB9OwogICAgc2hhMjU2RnJvbUJ1ZmZlciA9IGFzeW5jIChidWZmZXJBcmcpID0+IHsKICAgICAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHsKICAgICAgICBsZXQgaW5wdXRCdWZmZXI7CiAgICAgICAgaWYgKGJ1ZmZlckFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGNvbnN0IHZpZXcgPSBidWZmZXJBcmc7CiAgICAgICAgICBpbnB1dEJ1ZmZlciA9IHZpZXcuYnVmZmVyLnNsaWNlKHZpZXcuYnl0ZU9mZnNldCwgdmlldy5ieXRlT2Zmc2V0ICsgdmlldy5ieXRlTGVuZ3RoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5wdXRCdWZmZXIgPSBidWZmZXJBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGlucHV0QnVmZmVyKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBoZXgoaGFzaCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB1aW50OEFycmF5ID0gYnVmZmVyQXJnIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZmZlckFyZyA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZyk7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKHVpbnQ4QXJyYXkpOwogICAgICB9CiAgICB9OwogICAgc2hhMjY1RnJvbU9iamVjdCA9IGFzeW5jIChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRPYmplY3QgPSBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkob2JqZWN0QXJnKTsKICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGF3YWl0IHNoYTI1NkZyb21TdHJpbmcoc3RyaW5naWZpZWRPYmplY3QpOwogICAgICByZXR1cm4gaGFzaFJlc3VsdDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyZWFtID0gKGlucHV0KSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbVN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgIH07CiAgICBzaGEyNTZGcm9tRmlsZSA9IGFzeW5jIChmaWxlUGF0aCkgPT4gewogICAgICB0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21GaWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgfTsKICAgIG1kNUZyb21TdHJpbmcgPSBhc3luYyAoc3RyaW5nVG9IYXNoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigibWQ1RnJvbVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFdlYiBDcnlwdG8gQVBJIGRvZXMgbm90IHN1cHBvcnQgTUQ1LiIpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDYuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRlbnZfcGx1Z2luczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA2LjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDYuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYuY2xhc3Nlcy5zbWFydGVudi5qcwp2YXIgU21hcnRlbnYyOwp2YXIgaW5pdF9zbWFydGVudl9jbGFzc2VzX3NtYXJ0ZW52MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0ZW52QDYuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMiKCkgewogICAgaW5pdF9zbWFydGVudl9wbHVnaW5zMigpOwogICAgaW5pdF9pbnRlcmZhY2VzMigpOwogICAgU21hcnRlbnYyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICAgICAgfQogICAgICBhc3luYyBnZXRFbnZBd2FyZU1vZHVsZShvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKG9wdGlvbnNBcmcubm9kZU1vZHVsZU5hbWUpOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVXZWJNb2R1bGUob3B0aW9uc0FyZy53ZWJVcmxBcmcsIG9wdGlvbnNBcmcuZ2V0RnVuY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcigicGxhdGZvcm0gZm9yIGxvYWRpbmcgbm90IHN1cHBvcnRlZCBieSBzbWFydGVudiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlTm9kZU1vZHVsZShtb2R1bGVOYW1lQXJnLCBydW5BZnRlckZ1bmMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNOb2RlICYmICF0aGlzLmlzRGVubyAmJiAhdGhpcy5pc0J1bikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBzZXJ2ZXIgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7bW9kdWxlTmFtZUFyZ30nKWApKCk7CiAgICAgICAgaWYgKHJ1bkFmdGVyRnVuYykgewogICAgICAgICAgYXdhaXQgcnVuQWZ0ZXJGdW5jKHJldHVyblZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgICB9CiAgICAgIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnLCBnZXRGdW5jdGlvbkFyZykgewogICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyh1cmxBcmcpOwogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgc2NyaXB0LnNyYyA9IHVybEFyZzsKICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgICB9CiAgICAgIGdldCBydW50aW1lRW52KCkgewogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5EZW5vICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5EZW5vPy52ZXJzaW9uICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuICJkZW5vIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLkJ1biAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGdsb2JhbFRoaXMuQnVuPy52ZXJzaW9uICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuICJidW4iOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gIm5vZGUiOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMud2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5kb2N1bWVudCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgIH0KICAgICAgZ2V0IGlzQnJvd3NlcigpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAiYnJvd3NlciI7CiAgICAgIH0KICAgICAgZ2V0IGlzTm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAibm9kZSI7CiAgICAgIH0KICAgICAgZ2V0IGlzRGVubygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAiZGVubyI7CiAgICAgIH0KICAgICAgZ2V0IGlzQnVuKCkgewogICAgICAgIHJldHVybiB0aGlzLnJ1bnRpbWVFbnYgPT09ICJidW4iOwogICAgICB9CiAgICAgIGdldCB1c2VyQWdlbnQoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXQgbm9kZVZlcnNpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gInVuZGVmaW5lZCI7CiAgICAgIH0KICAgICAgZ2V0IGRlbm9WZXJzaW9uKCkgewogICAgICAgIGlmICh0aGlzLmlzRGVubykgewogICAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuRGVuby52ZXJzaW9uLmRlbm87CiAgICAgICAgfQogICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgfQogICAgICBnZXQgYnVuVmVyc2lvbigpIHsKICAgICAgICBpZiAodGhpcy5pc0J1bikgewogICAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuQnVuLnZlcnNpb247CiAgICAgICAgfQogICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBhIG1vZHVsZSBvbmx5IGlmIHRoZSBjdXJyZW50IHJ1bnRpbWUgbWF0Y2hlcyB0aGUgdGFyZ2V0IHJ1bnRpbWUocykKICAgICAgICogQHBhcmFtIHRhcmdldCAtIFNpbmdsZSBydW50aW1lLCBhcnJheSBvZiBydW50aW1lcywgb3IgJ3NlcnZlcicgZm9yIGFsbCBzZXJ2ZXItc2lkZSBydW50aW1lcwogICAgICAgKiBAcGFyYW0gbW9kdWxlTmFtZU9yVXJsIC0gTW9kdWxlIG5hbWUgKGZvciBOb2RlL0Rlbm8vQnVuKSBvciBVUkwgKGZvciBicm93c2VyKQogICAgICAgKiBAcGFyYW0gZ2V0RnVuY3Rpb24gLSBPcHRpb25hbCBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgbW9kdWxlIGluIGJyb3dzZXIgY29udGV4dAogICAgICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIG1vZHVsZSBvciB1bmRlZmluZWQgaWYgcnVudGltZSBkb2Vzbid0IG1hdGNoCiAgICAgICAqLwogICAgICBhc3luYyBnZXRTYWZlTW9kdWxlRm9yKHRhcmdldCwgbW9kdWxlTmFtZU9yVXJsLCBnZXRGdW5jdGlvbikgewogICAgICAgIGxldCB0YXJnZXRSdW50aW1lczsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7CiAgICAgICAgICB0YXJnZXRSdW50aW1lcyA9IHRhcmdldC5mbGF0TWFwKCh0OSkgPT4gdDkgPT09ICJzZXJ2ZXIiID8gWyJub2RlIiwgImRlbm8iLCAiYnVuIl0gOiBbdDldKTsKICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gInNlcnZlciIpIHsKICAgICAgICAgIHRhcmdldFJ1bnRpbWVzID0gWyJub2RlIiwgImRlbm8iLCAiYnVuIl07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhcmdldFJ1bnRpbWVzID0gW3RhcmdldF07CiAgICAgICAgfQogICAgICAgIGlmICghdGFyZ2V0UnVudGltZXMuaW5jbHVkZXModGhpcy5ydW50aW1lRW52KSkgewogICAgICAgICAgY29uc29sZS53YXJuKGBNb2R1bGUgIiR7bW9kdWxlTmFtZU9yVXJsfSIgcmVxdWVzdGVkIGZvciBydW50aW1lKHMpIFske3RhcmdldFJ1bnRpbWVzLmpvaW4oIiwgIil9XSBidXQgY3VycmVudCBydW50aW1lIGlzICIke3RoaXMucnVudGltZUVudn0iLiBTa2lwcGluZyBsb2FkLmApOwogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlIHx8IHRoaXMuaXNEZW5vIHx8IHRoaXMuaXNCdW4pIHsKICAgICAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUobW9kdWxlTmFtZU9yVXJsKTsKICAgICAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgaWYgKCFnZXRGdW5jdGlvbikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBCcm93c2VyIG1vZHVsZSBsb2FkIHJlcXVpcmVzIGdldEZ1bmN0aW9uIHBhcmFtZXRlciBmb3IgIiR7bW9kdWxlTmFtZU9yVXJsfSJgKTsKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShtb2R1bGVOYW1lT3JVcmwsIGdldEZ1bmN0aW9uKTsKICAgICAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0KICAgICAgZ2V0IGlzQ0koKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc1dpbmRvd3NBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAid2luMzIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTGludXhBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAibGludXgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGUKICAgICAgICovCiAgICAgIGFzeW5jIHByaW50RW52KCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gTk9ERSIpOwogICAgICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRGVubykgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gREVOTyIpOwogICAgICAgICAgY29uc29sZS5sb2coImRlbm8gdmVyc2lvbiBpcyAiICsgdGhpcy5kZW5vVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQnVuKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygicnVubmluZyBvbiBCVU4iKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJidW4gdmVyc2lvbiBpcyAiICsgdGhpcy5idW5WZXJzaW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gQlJPV1NFUiIpOwogICAgICAgICAgY29uc29sZS5sb2coImJyb3dzZXIgaXMgIiArIHRoaXMudXNlckFnZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA2LjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTksIHsKICBTbWFydGVudjogKCkgPT4gU21hcnRlbnYyCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA2LjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRlbnYvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0ZW52X2NsYXNzZXNfc21hcnRlbnYyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL3NtYXJ0anNvbi5wbHVnaW5zLmpzCnZhciBpbXBvcnRfbG9kYXNoMiwgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5Miwgc3RhYmxlSnNvbjM7CnZhciBpbml0X3NtYXJ0anNvbl9wbHVnaW5zMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA2LjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvc21hcnRqc29uLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTkoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbXBvcnRfbG9kYXNoMiA9IF9fdG9FU00ocmVxdWlyZV9sb2Rhc2goKSwgMSk7CiAgICBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnkyID0gX190b0VTTShyZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5KCksIDEpOwogICAgc3RhYmxlSnNvbjMgPSBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnkyLmRlZmF1bHQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2J1ZmZlcmhhbmRsaW5nLmpzCmZ1bmN0aW9uIGJhc2U2NEVuY29kZTIoZGF0YTExKSB7CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YTExKS50b1N0cmluZygiYmFzZTY0Iik7CiAgfQogIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZGF0YTExKSk7Cn0KZnVuY3Rpb24gYmFzZTY0RGVjb2RlMihzdHIpIHsKICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgImJhc2U2NCIpOwogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7CiAgfQogIHJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5mcm9tKGF0b2Ioc3RyKSkubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnk1KHZhbHVlMiwgc3BhY2UyKSB7CiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlMiwgcmVwbGFjZXIyLCBzcGFjZTIpOwp9CmZ1bmN0aW9uIHBhcnNlNyh0ZXh0OSkgewogIHJldHVybiBKU09OLnBhcnNlKHRleHQ5LCByZXZpdmVyMik7Cn0KZnVuY3Rpb24gaXNFbmNvZGVkQnVmZmVyMih4NCkgewogIHJldHVybiBpc09iamVjdDIoeDQpICYmIHg0LnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiBpc1N0cmluZzIoeDQuZGF0YSk7Cn0KZnVuY3Rpb24gaXNCdWZmZXJMaWtlMyh4NCkgewogIHJldHVybiBpc09iamVjdDIoeDQpICYmICh4NC50eXBlID09PSAiQnVmZmVyIiAmJiAoaXNBcnJheTMoeDQuZGF0YSkgfHwgaXNTdHJpbmcyKHg0LmRhdGEpKSkgfHwgeDQgaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIGlzQXJyYXkzKHg0KSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeDQpOwp9CmZ1bmN0aW9uIGlzU3RyaW5nMih4NCkgewogIHJldHVybiB0eXBlb2YgeDQgPT09ICJzdHJpbmciOwp9CmZ1bmN0aW9uIGlzT2JqZWN0Mih4NCkgewogIHJldHVybiB0eXBlb2YgeDQgPT09ICJvYmplY3QiICYmIHg0ICE9PSBudWxsOwp9CnZhciByZXBsYWNlcjIsIHJldml2ZXIyOwp2YXIgaW5pdF9idWZmZXJoYW5kbGluZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2J1ZmZlcmhhbmRsaW5nLmpzIigpIHsKICAgIGluaXRfc21hcnRqc29uX3BsdWdpbnMyKCk7CiAgICByZXBsYWNlcjIgPSAoa2V5MiwgdmFsdWUyKSA9PiB7CiAgICAgIGlmIChpc0J1ZmZlckxpa2UzKHZhbHVlMikpIHsKICAgICAgICBsZXQgYnVmZmVyRGF0YTsKICAgICAgICBpZiAoImRhdGEiIGluIHZhbHVlMiAmJiBpc0FycmF5Myh2YWx1ZTIuZGF0YSkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBidWZmZXJEYXRhID0gdmFsdWUyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gImJhc2U2NDoiICsgYmFzZTY0RW5jb2RlMihidWZmZXJEYXRhKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogIkVuY29kZWRCdWZmZXIiLAogICAgICAgICAgZGF0YTogYmFzZTY0RGF0YQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH07CiAgICByZXZpdmVyMiA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzRW5jb2RlZEJ1ZmZlcjIodmFsdWUyKSkgewogICAgICAgIGlmIChpc1N0cmluZzIodmFsdWUyLmRhdGEpICYmIHZhbHVlMi5kYXRhLnN0YXJ0c1dpdGgoImJhc2U2NDoiKSkgewogICAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHZhbHVlMi5kYXRhLnNsaWNlKDcpOwogICAgICAgICAgY29uc3QgYnVmZmVyMiA9IGJhc2U2NERlY29kZTIoYmFzZTY0RGF0YSk7CiAgICAgICAgICByZXR1cm4gYnVmZmVyMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMCwgewogIFNtYXJ0anNvbjogKCkgPT4gU21hcnRqc29uMiwKICBkZWVwRXF1YWxKc29uTFN0cmluZ3M6ICgpID0+IGRlZXBFcXVhbEpzb25MU3RyaW5nczIsCiAgZGVlcEVxdWFsT2JqZWN0czogKCkgPT4gZGVlcEVxdWFsT2JqZWN0czIsCiAgZm9sZERlYzogKCkgPT4gZm9sZERlYzIsCiAgcGFyc2U6ICgpID0+IHBhcnNlOCwKICBwYXJzZUJhc2U2NDogKCkgPT4gcGFyc2VCYXNlNjQyLAogIHBhcnNlSnNvbkw6ICgpID0+IHBhcnNlSnNvbkwyLAogIHN0YWJsZU9uZVdheVN0cmluZ2lmeTogKCkgPT4gc3RhYmxlT25lV2F5U3RyaW5naWZ5MiwKICBzdHJpbmdpZnk6ICgpID0+IHN0cmluZ2lmeTYsCiAgc3RyaW5naWZ5QmFzZTY0OiAoKSA9PiBzdHJpbmdpZnlCYXNlNjQyLAogIHN0cmluZ2lmeUpzb25MOiAoKSA9PiBzdHJpbmdpZnlKc29uTDIsCiAgc3RyaW5naWZ5UHJldHR5OiAoKSA9PiBzdHJpbmdpZnlQcmV0dHkyCn0pOwp2YXIgcGFyc2U4LCBwYXJzZUpzb25MMiwgc3RyaW5naWZ5SnNvbkwyLCBzdGFibGVPbmVXYXlTdHJpbmdpZnkyLCBzdHJpbmdpZnk2LCBzdHJpbmdpZnlQcmV0dHkyLCBzdHJpbmdpZnlCYXNlNjQyLCBwYXJzZUJhc2U2NDIsIFNtYXJ0anNvbjIsIGZvbGREZWMyLCBkZWVwRXF1YWxPYmplY3RzMiwgZGVlcEVxdWFsSnNvbkxTdHJpbmdzMjsKdmFyIGluaXRfZGlzdF90czIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDYuMC4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0anNvbl9wbHVnaW5zMigpOwogICAgaW5pdF9idWZmZXJoYW5kbGluZzIoKTsKICAgIHBhcnNlOCA9IHBhcnNlNzsKICAgIHBhcnNlSnNvbkwyID0gKGpzb25sRGF0YSkgPT4gewogICAgICBjb25zdCBsaW5lcyA9IGpzb25sRGF0YS5zcGxpdCgiXG4iKTsKICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IGxpbmVzLnJlZHVjZSgoYWNjLCBsaW5lKSA9PiB7CiAgICAgICAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpOwogICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGFjYy5wdXNoKHBhcnNlOCh0cmltbWVkKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIFtdKTsKICAgICAgcmV0dXJuIHBhcnNlZERhdGE7CiAgICB9OwogICAgc3RyaW5naWZ5SnNvbkwyID0gKGl0ZW1zKSA9PiB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHN0cmluZ2lmeTYoaXRlbSkpLmpvaW4oIlxuIik7CiAgICB9OwogICAgc3RhYmxlT25lV2F5U3RyaW5naWZ5MiA9IChvYmpBcmcsIHNpbXBsZU9yZGVyQXJyYXksIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICBjb25zdCB2aXNpdGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7CiAgICAgIGNvbnN0IHNhbml0aXplMiA9ICh2YWwpID0+IHsKICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXBsYWNlZCA9IHJlcGxhY2VyMigiIiwgdmFsKTsKICAgICAgICBpZiAocmVwbGFjZWQgJiYgcmVwbGFjZWQudHlwZSA9PT0gIkVuY29kZWRCdWZmZXIiICYmIHR5cGVvZiByZXBsYWNlZC5kYXRhID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwogICAgICAgIH0KICAgICAgICBpZiAodmlzaXRlZC5oYXModmFsKSkgewogICAgICAgICAgcmV0dXJuICJfX2N5Y2xlX18iOwogICAgICAgIH0KICAgICAgICB2aXNpdGVkLmFkZCh2YWwpOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgICAgIHJldHVybiB2YWwubWFwKChpdGVtKSA9PiBzYW5pdGl6ZTIoaXRlbSkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBvdXQgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgT2JqZWN0LmtleXModmFsKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb3V0W2tleTJdID0gc2FuaXRpemUyKHZhbFtrZXkyXSk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgb3V0W2tleTJdID0gIl9fdW5zZXJpYWxpemFibGVfXyI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH07CiAgICAgIGNvbnN0IG9iaiA9IHNhbml0aXplMihvYmpBcmcpOwogICAgICBjb25zdCBvcHRpb25zID0gewogICAgICAgIC4uLm9wdGlvbnNBcmcsCiAgICAgICAgY3ljbGVzOiB0cnVlCiAgICAgIH07CiAgICAgIGlmIChzaW1wbGVPcmRlckFycmF5ICYmICFvcHRpb25zLmNtcCkgewogICAgICAgIGNvbnN0IG9yZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgc2ltcGxlT3JkZXJBcnJheS5mb3JFYWNoKChrZXkyLCBpZHgpID0+IG9yZGVyMi5zZXQoa2V5MiwgaWR4KSk7CiAgICAgICAgb3B0aW9ucy5jbXAgPSAoYTUsIGI1KSA9PiB7CiAgICAgICAgICBjb25zdCBhSWR4ID0gb3JkZXIyLmhhcyhhNS5rZXkpID8gb3JkZXIyLmdldChhNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgY29uc3QgYklkeCA9IG9yZGVyMi5oYXMoYjUua2V5KSA/IG9yZGVyMi5nZXQoYjUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGlmIChhSWR4ICE9PSBiSWR4KQogICAgICAgICAgICByZXR1cm4gYUlkeCAtIGJJZHg7CiAgICAgICAgICByZXR1cm4gYTUua2V5IDwgYjUua2V5ID8gLTEgOiBhNS5rZXkgPiBiNS5rZXkgPyAxIDogMDsKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBzdGFibGVKc29uMyhvYmosIG9wdGlvbnMpOwogICAgfTsKICAgIHN0cmluZ2lmeTYgPSAob2JqQXJnLCBzaW1wbGVPcmRlckFycmF5LCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgY29uc3QgYnVmZmVyZWRKc29uID0gc3RyaW5naWZ5NShvYmpBcmcpOwogICAgICBvYmpBcmcgPSBKU09OLnBhcnNlKGJ1ZmZlcmVkSnNvbik7CiAgICAgIGxldCBvcHRpb25zID0geyAuLi5vcHRpb25zQXJnIH07CiAgICAgIGlmIChzaW1wbGVPcmRlckFycmF5ICYmICFvcHRpb25zLmNtcCkgewogICAgICAgIGNvbnN0IG9yZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgc2ltcGxlT3JkZXJBcnJheS5mb3JFYWNoKChrZXkyLCBpZHgpID0+IG9yZGVyMi5zZXQoa2V5MiwgaWR4KSk7CiAgICAgICAgb3B0aW9ucy5jbXAgPSAoYTUsIGI1KSA9PiB7CiAgICAgICAgICBjb25zdCBhSWR4ID0gb3JkZXIyLmhhcyhhNS5rZXkpID8gb3JkZXIyLmdldChhNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgY29uc3QgYklkeCA9IG9yZGVyMi5oYXMoYjUua2V5KSA/IG9yZGVyMi5nZXQoYjUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGlmIChhSWR4ICE9PSBiSWR4KQogICAgICAgICAgICByZXR1cm4gYUlkeCAtIGJJZHg7CiAgICAgICAgICByZXR1cm4gYTUua2V5IDwgYjUua2V5ID8gLTEgOiBhNS5rZXkgPiBiNS5rZXkgPyAxIDogMDsKICAgICAgICB9OwogICAgICB9CiAgICAgIGxldCByZXR1cm5Kc29uID0gc3RhYmxlSnNvbjMob2JqQXJnLCBvcHRpb25zKTsKICAgICAgcmV0dXJuIHJldHVybkpzb247CiAgICB9OwogICAgc3RyaW5naWZ5UHJldHR5MiA9IChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnk2KG9iamVjdEFyZyk7CiAgICAgIGNvbnN0IG9iamVjdCA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWQpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCBudWxsLCAyKTsKICAgIH07CiAgICBzdHJpbmdpZnlCYXNlNjQyID0gKC4uLmFyZ3MpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRSZXN1bHQgPSBzdHJpbmdpZnk2KC4uLmFyZ3MpOwogICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTEuYmFzZTY0LmVuY29kZVVyaShzdHJpbmdpZmllZFJlc3VsdCk7CiAgICB9OwogICAgcGFyc2VCYXNlNjQyID0gKGJhc2U2NEpzb25TdHJpbmdBcmcpID0+IHsKICAgICAgY29uc3QgYmFzZTY0MiA9IGRpc3RfdHNfZXhwb3J0czExLmJhc2U2NDsKICAgICAgY29uc3QgZGVjb2RlRm4gPSBiYXNlNjQyLmRlY29kZVVyaSB8fCBiYXNlNjQyLmRlY29kZTsKICAgICAgY29uc3Qgc2ltcGxlU3RyaW5naWZpZWQgPSBkZWNvZGVGbihiYXNlNjRKc29uU3RyaW5nQXJnKTsKICAgICAgcmV0dXJuIHBhcnNlOChzaW1wbGVTdHJpbmdpZmllZCk7CiAgICB9OwogICAgU21hcnRqc29uMiA9IGNsYXNzIF9TbWFydGpzb24gewogICAgICAvKioKICAgICAgICogZW5mb2xkcyBkYXRhIGZyb20gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBzdGF0aWMgZW5mb2xkRnJvbU9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyB0aGlzKCk7CiAgICAgICAgY29uc3Qgc2F2ZWFibGVzID0gbmV3SW5zdGFuY2Uuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBvYmplY3RBcmcpIHsKICAgICAgICAgIGlmIChzYXZlYWJsZXMuaW5kZXhPZihrZXlOYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgbmV3SW5zdGFuY2Vba2V5TmFtZV0gPSBvYmplY3RBcmdba2V5TmFtZV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZW5mb2xkIGZyb20ganNvbgogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21Kc29uKGpzb25BcmcpIHsKICAgICAgICBjb25zdCBvYmplY3RGcm9tSnNvbiA9IHBhcnNlOChqc29uQXJnKTsKICAgICAgICByZXR1cm4gdGhpcy5lbmZvbGRGcm9tT2JqZWN0KG9iamVjdEZyb21Kc29uKTsKICAgICAgfQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBJTlNUQU5DRQogICAgICAvLyA9PT09PT09PQogICAgICBzYXZlYWJsZVByb3BlcnRpZXM7CiAgICAgIC8qKgogICAgICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBmb2xkVG9PYmplY3QoKSB7CiAgICAgICAgY29uc3QgdHJhY2tTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIHRyYWNrU2V0LmFkZCh0aGlzKTsKICAgICAgICByZXR1cm4gdGhpcy5mb2xkVG9PYmplY3RJbnRlcm5hbCh0cmFja1NldCk7CiAgICAgIH0KICAgICAgZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSB7fTsKICAgICAgICBjb25zdCBmb2xkVmFsdWUgPSAodmFsKSA9PiB7CiAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgX1NtYXJ0anNvbikgewogICAgICAgICAgICBpZiAodHJhY2tTZXQuaGFzKHZhbCkpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJhY2tTZXQuYWRkKHZhbCk7CiAgICAgICAgICAgIHJldHVybiB2YWwuZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbSkgPT4gZm9sZFZhbHVlKGl0ZW0pKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBpbXBvcnRfbG9kYXNoMi5kZWZhdWx0KHZhbCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBvZiBwcm9wcykgewogICAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1trZXlOYW1lXTsKICAgICAgICAgIHJlc3VsdFtrZXlOYW1lXSA9IGZvbGRWYWx1ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBmb2xkVG9Kc29uKCkgewogICAgICAgIGNvbnN0IGZvbGRlZE9iamVjdCA9IHRoaXMuZm9sZFRvT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeTYoZm9sZGVkT2JqZWN0KTsKICAgICAgfQogICAgfTsKICAgIGZvbGREZWMyID0gKCkgPT4gewogICAgICByZXR1cm4gKF92YWx1ZSwgY29udGV4dDIpID0+IHsKICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBTdHJpbmcoY29udGV4dDIubmFtZSk7CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIXRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgdGhpcy5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgfTsKICAgIGRlZXBFcXVhbE9iamVjdHMyID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHsKICAgICAgY29uc3Qgb2JqZWN0MVN0cmluZyA9IHN0cmluZ2lmeTYob2JqZWN0MSk7CiAgICAgIGNvbnN0IG9iamVjdDJTdHJpbmcgPSBzdHJpbmdpZnk2KG9iamVjdDIpOwogICAgICByZXR1cm4gb2JqZWN0MVN0cmluZyA9PT0gb2JqZWN0MlN0cmluZzsKICAgIH07CiAgICBkZWVwRXF1YWxKc29uTFN0cmluZ3MyID0gKGpzb25MU3RyaW5nMSwganNvbkxTdHJpbmcyKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0QXJyYXkgPSBwYXJzZUpzb25MMihqc29uTFN0cmluZzEpOwogICAgICBjb25zdCBzZWNvbmRBcnJheSA9IHBhcnNlSnNvbkwyKGpzb25MU3RyaW5nMik7CiAgICAgIHJldHVybiBkZWVwRXF1YWxPYmplY3RzMihmaXJzdEFycmF5LCBzZWNvbmRBcnJheSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzX3dlYigpOwogICAgaW5pdF9kaXN0X3RzMjAoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjMwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlYWN0aW9uLmpzCnZhciBTdGF0ZUFjdGlvbjsKdmFyIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVhY3Rpb24uanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU3RhdGVBY3Rpb24gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0YXRlUGFydFJlZiwgYWN0aW9uRGVmKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRSZWYgPSBzdGF0ZVBhcnRSZWY7CiAgICAgICAgdGhpcy5hY3Rpb25EZWYgPSBhY3Rpb25EZWY7CiAgICAgIH0KICAgICAgdHJpZ2dlcihwYXlsb2FkKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQYXJ0UmVmLmRpc3BhdGNoQWN0aW9uKHRoaXMsIHBheWxvYWQpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzCnZhciBTdGF0ZVBhcnQ7CnZhciBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4zMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uKCk7CiAgICBTdGF0ZVBhcnQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG5hbWVBcmcsIHdlYlN0b3JlT3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5jdW11bGF0aXZlRGVmZXIoKTsKICAgICAgICB0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLndlYlN0b3JlID0gbnVsbDsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lQXJnOwogICAgICAgIGlmICh3ZWJTdG9yZU9wdGlvbnNBcmcpIHsKICAgICAgICAgIHRoaXMud2ViU3RvcmVPcHRpb25zID0gd2ViU3RvcmVPcHRpb25zQXJnOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaW5pdGlhbGl6ZXMgdGhlIHdlYnN0b3JlCiAgICAgICAqLwogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLndlYlN0b3JlT3B0aW9ucykgewogICAgICAgICAgdGhpcy53ZWJTdG9yZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMy5XZWJTdG9yZSh0aGlzLndlYlN0b3JlT3B0aW9ucyk7CiAgICAgICAgICBhd2FpdCB0aGlzLndlYlN0b3JlLmluaXQoKTsKICAgICAgICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gYXdhaXQgdGhpcy53ZWJTdG9yZS5nZXQoU3RyaW5nKHRoaXMubmFtZSkpOwogICAgICAgICAgaWYgKHN0b3JlZFN0YXRlICYmIHRoaXMudmFsaWRhdGVTdGF0ZShzdG9yZWRTdGF0ZSkpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZVN0b3JlID0gc3RvcmVkU3RhdGU7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIHRoZSBzdGF0ZSBmcm9tIHRoZSBzdGF0ZSBzdG9yZQogICAgICAgKi8KICAgICAgZ2V0U3RhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0cyB0aGUgc3RhdGVTdG9yZSB0byB0aGUgbmV3IHN0YXRlCiAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0U3RhdGUobmV3U3RhdGVBcmcpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVTdGF0ZShuZXdTdGF0ZUFyZykpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSdgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMud2ViU3RvcmUpIHsKICAgICAgICAgIGF3YWl0IHRoaXMud2ViU3RvcmUuc2V0KFN0cmluZyh0aGlzLm5hbWUpLCBuZXdTdGF0ZUFyZyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGVTdG9yZSA9IG5ld1N0YXRlQXJnOwogICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVmFsaWRhdGVzIHN0YXRlIHN0cnVjdHVyZSAtIGNhbiBiZSBvdmVycmlkZGVuIGZvciBjdXN0b20gdmFsaWRhdGlvbgogICAgICAgKiBAcGFyYW0gc3RhdGVBcmcKICAgICAgICovCiAgICAgIHZhbGlkYXRlU3RhdGUoc3RhdGVBcmcpIHsKICAgICAgICByZXR1cm4gc3RhdGVBcmcgIT09IG51bGwgJiYgc3RhdGVBcmcgIT09IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgb2YgYSBjaGFuZ2Ugb24gdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBhc3luYyBub3RpZnlDaGFuZ2UoKSB7CiAgICAgICAgaWYgKCF0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3JlYXRlU3RhdGVIYXNoID0gYXN5bmMgKHN0YXRlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0cy5zaGEyNTZGcm9tU3RyaW5nKGRpc3RfdHNfZXhwb3J0czIwLnN0YWJsZU9uZVdheVN0cmluZ2lmeShzdGF0ZUFyZykpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgY3VycmVudEhhc2ggPSBhd2FpdCBjcmVhdGVTdGF0ZUhhc2godGhpcy5zdGF0ZVN0b3JlKTsKICAgICAgICBpZiAodGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCAmJiBjdXJyZW50SGFzaCA9PT0gdGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoID0gY3VycmVudEhhc2g7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUubmV4dCh0aGlzLnN0YXRlU3RvcmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGEgY3VtdWxhdGl2ZSBub3RpZmljYXRpb24gYnkgYWRkaW5nIGEgY2hhbmdlIG5vdGlmaWNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBjYWxsIHN0YWNrOwogICAgICAgKi8KICAgICAgbm90aWZ5Q2hhbmdlQ3VtdWxhdGl2ZSgpIHsKICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ3VtdWxhdGl2ZU5vdGlmaWNhdGlvbikgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ0N1bXVsYXRpdmVOb3RpZmljYXRpb24pOwogICAgICAgIH0KICAgICAgICB0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnBlbmRpbmdDdW11bGF0aXZlTm90aWZpY2F0aW9uID0gbnVsbDsKICAgICAgICAgIGlmICh0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTsKICAgICAgICAgIH0KICAgICAgICB9LCAwKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2VsZWN0cyBhIHN0YXRlIG9yIGEgc3Vic3RhdGUKICAgICAgICovCiAgICAgIHNlbGVjdChzZWxlY3RvckZuKSB7CiAgICAgICAgaWYgKCFzZWxlY3RvckZuKSB7CiAgICAgICAgICBzZWxlY3RvckZuID0gKHN0YXRlKSA9PiBzdGF0ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5zdGF0ZS5waXBlKGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuc3RhcnRXaXRoKHRoaXMuZ2V0U3RhdGUoKSksIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuZmlsdGVyKChzdGF0ZUFyZykgPT4gc3RhdGVBcmcgIT09IHZvaWQgMCksIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMubWFwKChzdGF0ZUFyZykgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yRm4oc3RhdGVBcmcpOwogICAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFNlbGVjdG9yIGVycm9yIGluIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSc6YCwgZTExKTsKICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIG1hcHBlZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhbiBhY3Rpb24gY2FwYWJsZSBvZiBtb2RpZnlpbmcgdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBjcmVhdGVBY3Rpb24oYWN0aW9uRGVmKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZUFjdGlvbih0aGlzLCBhY3Rpb25EZWYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBkaXNwYXRjaGVzIGFuIGFjdGlvbiBvbiB0aGUgc3RhdGVwYXJ0IGxldmVsCiAgICAgICAqLwogICAgICBhc3luYyBkaXNwYXRjaEFjdGlvbihzdGF0ZUFjdGlvbiwgYWN0aW9uUGF5bG9hZCkgewogICAgICAgIGF3YWl0IHRoaXMuY3VtdWxhdGl2ZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBhd2FpdCBzdGF0ZUFjdGlvbi5hY3Rpb25EZWYodGhpcywgYWN0aW9uUGF5bG9hZCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2FpdHMgdW50aWwgYSBjZXJ0YWluIHBhcnQgb2YgdGhlIHN0YXRlIGJlY29tZXMgYXZhaWxhYmxlCiAgICAgICAqIEBwYXJhbSBzZWxlY3RvckZuCiAgICAgICAqIEBwYXJhbSB0aW1lb3V0TXMgLSBvcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBwcmV2ZW50IGluZGVmaW5pdGUgd2FpdGluZwogICAgICAgKi8KICAgICAgYXN5bmMgd2FpdFVudGlsUHJlc2VudChzZWxlY3RvckZuLCB0aW1lb3V0TXMpIHsKICAgICAgICBjb25zdCBkb25lID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYnNlcnZhYmxlID0gdGhpcy5zZWxlY3Qoc2VsZWN0b3JGbik7CiAgICAgICAgbGV0IHJlc29sdmVkMiA9IGZhbHNlOwogICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHNlbGVjdGVkT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHZhbHVlMikgPT4gewogICAgICAgICAgaWYgKHZhbHVlMiAmJiAhcmVzb2x2ZWQyKSB7CiAgICAgICAgICAgIHJlc29sdmVkMiA9IHRydWU7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGxldCB0aW1lb3V0SWQ7CiAgICAgICAgaWYgKHRpbWVvdXRNcykgewogICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGlmICghcmVzb2x2ZWQyKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZWQyID0gdHJ1ZTsKICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICBkb25lLnJlamVjdChuZXcgRXJyb3IoYHdhaXRVbnRpbFByZXNlbnQgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCB0aW1lb3V0TXMpOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICBpZiAodGltZW91dElkKQogICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGlzIGV4ZWN1dGVkCiAgICAgICAqLwogICAgICBhc3luYyBzdGF0ZVNldHVwKGZ1bmNBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlID0gZnVuY0FyZyh0aGlzKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5hZGRQcm9taXNlKHJlc3VsdFByb21pc2UpOwogICAgICAgIGF3YWl0IHRoaXMuc2V0U3RhdGUoYXdhaXQgcmVzdWx0UHJvbWlzZSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4zMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzCnZhciBTbWFydHN0YXRlOwp2YXIgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc21hcnRzdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjMwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnNtYXJ0c3RhdGUuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU21hcnRzdGF0ZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRNYXAgPSB7fTsKICAgICAgICB0aGlzLnBlbmRpbmdTdGF0ZVBhcnRDcmVhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFsbG93cyBnZXR0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgc3RhdGVwYXJ0CiAgICAgICAqIGluaXRNb2RlID09PSAnc29mdCcgKGRlZmF1bHQpIC0gcmV0dXJucyBleGlzdGluZyBzdGF0ZXBhcnQgaWYgZXhpc3RzLCBjcmVhdGVzIG5ldyBpZiBub3QKICAgICAgICogaW5pdE1vZGUgPT09ICdtYW5kYXRvcnknIC0gcmVxdWlyZXMgc3RhdGVwYXJ0IHRvIG5vdCBleGlzdCwgZmFpbHMgaWYgaXQgZG9lcwogICAgICAgKiBpbml0TW9kZSA9PT0gJ2ZvcmNlJyAtIGFsd2F5cyBjcmVhdGVzIG5ldyBzdGF0ZXBhcnQsIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZwogICAgICAgKiBpbml0TW9kZSA9PT0gJ3BlcnNpc3RlbnQnIC0gbGlrZSAnc29mdCcgYnV0IHdpdGggd2Vic3RvcmUgcGVyc2lzdGVuY2UKICAgICAgICogQHBhcmFtIHN0YXRlUGFydE5hbWVBcmcKICAgICAgICogQHBhcmFtIGluaXRpYWxBcmcKICAgICAgICogQHBhcmFtIGluaXRNb2RlCiAgICAgICAqLwogICAgICBhc3luYyBnZXRTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nU3RhdGVQYXJ0Q3JlYXRpb24uZ2V0KHN0YXRlUGFydE5hbWVBcmcpOwogICAgICAgIGlmIChwZW5kaW5nKSB7CiAgICAgICAgICByZXR1cm4gcGVuZGluZzsKICAgICAgICB9CiAgICAgICAgY29uc3QgZXhpc3RpbmdTdGF0ZVBhcnQgPSB0aGlzLnN0YXRlUGFydE1hcFtzdGF0ZVBhcnROYW1lQXJnXTsKICAgICAgICBpZiAoZXhpc3RpbmdTdGF0ZVBhcnQpIHsKICAgICAgICAgIHN3aXRjaCAoaW5pdE1vZGUpIHsKICAgICAgICAgICAgY2FzZSAibWFuZGF0b3J5IjoKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YXRlIHBhcnQgJyR7c3RhdGVQYXJ0TmFtZUFyZ30nIGFscmVhZHkgZXhpc3RzLCBidXQgaW5pdE1vZGUgaXMgJ21hbmRhdG9yeSdgKTsKICAgICAgICAgICAgY2FzZSAiZm9yY2UiOgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gY3JlYXRpb24KICAgICAgICAgICAgY2FzZSAic29mdCI6CiAgICAgICAgICAgIGNhc2UgInBlcnNpc3RlbnQiOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1N0YXRlUGFydDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFpbml0aWFsQXJnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgZG9lcyBub3QgZXhpc3QgYW5kIG5vIGluaXRpYWwgc3RhdGUgcHJvdmlkZWRgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgY3JlYXRpb25Qcm9taXNlID0gdGhpcy5jcmVhdGVTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUpOwogICAgICAgIHRoaXMucGVuZGluZ1N0YXRlUGFydENyZWF0aW9uLnNldChzdGF0ZVBhcnROYW1lQXJnLCBjcmVhdGlvblByb21pc2UpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGlvblByb21pc2U7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0aGlzLnBlbmRpbmdTdGF0ZVBhcnRDcmVhdGlvbi5kZWxldGUoc3RhdGVQYXJ0TmFtZUFyZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGEgc3RhdGVwYXJ0CiAgICAgICAqIEBwYXJhbSBzdGF0ZVBhcnROYW1lCiAgICAgICAqIEBwYXJhbSBpbml0aWFsUGF5bG9hZEFyZwogICAgICAgKiBAcGFyYW0gaW5pdE1vZGUKICAgICAgICovCiAgICAgIGFzeW5jIGNyZWF0ZVN0YXRlUGFydChzdGF0ZVBhcnROYW1lLCBpbml0aWFsUGF5bG9hZEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG5ldyBTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZSwgaW5pdE1vZGUgPT09ICJwZXJzaXN0ZW50IiA/IHsKICAgICAgICAgIGRiTmFtZTogInNtYXJ0c3RhdGUiLAogICAgICAgICAgc3RvcmVOYW1lOiBzdGF0ZVBhcnROYW1lCiAgICAgICAgfSA6IG51bGwpOwogICAgICAgIGF3YWl0IG5ld1N0YXRlLmluaXQoKTsKICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBuZXdTdGF0ZS5nZXRTdGF0ZSgpOwogICAgICAgIGlmIChpbml0TW9kZSA9PT0gInBlcnNpc3RlbnQiICYmIGN1cnJlbnRTdGF0ZSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBhd2FpdCBuZXdTdGF0ZS5zZXRTdGF0ZSh7CiAgICAgICAgICAgIC4uLmluaXRpYWxQYXlsb2FkQXJnLAogICAgICAgICAgICAuLi5jdXJyZW50U3RhdGUKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCBuZXdTdGF0ZS5zZXRTdGF0ZShpbml0aWFsUGF5bG9hZEFyZyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGVQYXJ0TWFwW3N0YXRlUGFydE5hbWVdID0gbmV3U3RhdGU7CiAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjEsIHsKICBTbWFydHN0YXRlOiAoKSA9PiBTbWFydHN0YXRlLAogIFN0YXRlQWN0aW9uOiAoKSA9PiBTdGF0ZUFjdGlvbiwKICBTdGF0ZVBhcnQ6ICgpID0+IFN0YXRlUGFydAp9KTsKdmFyIGluaXRfZGlzdF90czIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMzAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zbWFydHN0YXRlKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5wbHVnaW5zLmpzCnZhciBpbml0X3NtYXJ0dXJsX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5wbHVnaW5zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLmNsYXNzZXMuc21hcnR1cmwuanMKdmFyIFNtYXJ0dXJsOwp2YXIgaW5pdF9zbWFydHVybF9jbGFzc2VzX3NtYXJ0dXJsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwuY2xhc3Nlcy5zbWFydHVybC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dXJsX3BsdWdpbnMoKTsKICAgIFNtYXJ0dXJsID0gY2xhc3MgX1NtYXJ0dXJsIHsKICAgICAgLy8gU3RhdGljIG1ldGhvZCB0byBjcmVhdGUgYSBTbWFydHVybCBpbnN0YW5jZSBmcm9tIGEgVVJMIHN0cmluZwogICAgICBzdGF0aWMgY3JlYXRlRnJvbVVybCh1cmxBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBjb25zdCBwYXJzZWRVcmxJbnN0YW5jZSA9IG5ldyBVUkwodXJsQXJnKTsKICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB7fTsKICAgICAgICBjb25zdCBzZWFyY2hQYXJhbVBhaXJzID0gW107CiAgICAgICAgaWYgKHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaCkgewogICAgICAgICAgcGFyc2VkVXJsSW5zdGFuY2Uuc2VhcmNoLnJlcGxhY2UoIj8iLCAiIikuc3BsaXQoIiYiKS5tYXAoKHNlYXJjaFBhcmFtUGFpcikgPT4gewogICAgICAgICAgICBzZWFyY2hQYXJhbVBhaXJzLnB1c2goewogICAgICAgICAgICAgIGtleTogc2VhcmNoUGFyYW1QYWlyLnNwbGl0KCI9IilbMF0sCiAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFBhcmFtUGFpci5zcGxpdCgiPSIpWzFdCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3Qgc2VhcmNoUGFyYW1QYWlyIG9mIHNlYXJjaFBhcmFtUGFpcnMpIHsKICAgICAgICAgIHNlYXJjaFBhcmFtc1tzZWFyY2hQYXJhbVBhaXIua2V5XSA9IHNlYXJjaFBhcmFtUGFpci52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnNBcmc/LnNlYXJjaFBhcmFtcykgewogICAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKG9wdGlvbnNBcmcuc2VhcmNoUGFyYW1zKSkgewogICAgICAgICAgICBzZWFyY2hQYXJhbXNba2V5Ml0gPSBvcHRpb25zQXJnLnNlYXJjaFBhcmFtc1trZXkyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IHBhdGgyID0gcGFyc2VkVXJsSW5zdGFuY2UucGF0aG5hbWUgfHwgIiI7CiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykubGVuZ3RoID4gMCkgewogICAgICAgICAgcGF0aDIgKz0gIj8iOwogICAgICAgICAgbGV0IGZpcnN0MiA9IHRydWU7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkgewogICAgICAgICAgICBpZiAoZmlyc3QyKSB7CiAgICAgICAgICAgICAgZmlyc3QyID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcGF0aDIgKz0gIiYiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBhdGgyICs9IGAke2tleTJ9PSR7c2VhcmNoUGFyYW1zW2tleTJdfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IHsKICAgICAgICAgIC4uLnBhcnNlZFVybEluc3RhbmNlLAogICAgICAgICAgaHJlZjogcGFyc2VkVXJsSW5zdGFuY2UuaHJlZiwKICAgICAgICAgIG9yaWdpbjogcGFyc2VkVXJsSW5zdGFuY2Uub3JpZ2luLAogICAgICAgICAgcHJvdG9jb2w6IHBhcnNlZFVybEluc3RhbmNlLnByb3RvY29sLAogICAgICAgICAgdXNlcm5hbWU6IHBhcnNlZFVybEluc3RhbmNlLnVzZXJuYW1lLAogICAgICAgICAgcGFzc3dvcmQ6IHBhcnNlZFVybEluc3RhbmNlLnBhc3N3b3JkLAogICAgICAgICAgaG9zdDogcGFyc2VkVXJsSW5zdGFuY2UuaG9zdCwKICAgICAgICAgIGhvc3RuYW1lOiBwYXJzZWRVcmxJbnN0YW5jZS5ob3N0bmFtZSwKICAgICAgICAgIHBvcnQ6IHBhcnNlZFVybEluc3RhbmNlLnBvcnQsCiAgICAgICAgICBwYXRoOiBwYXRoMiwKICAgICAgICAgIHBhdGhuYW1lOiBwYXJzZWRVcmxJbnN0YW5jZS5wYXRobmFtZSwKICAgICAgICAgIHNlYXJjaDogcGFyc2VkVXJsSW5zdGFuY2Uuc2VhcmNoLAogICAgICAgICAgc2VhcmNoUGFyYW1zLAogICAgICAgICAgaGFzaDogcGFyc2VkVXJsSW5zdGFuY2UuaGFzaAogICAgICAgIH07CiAgICAgICAgaWYgKCFwYXJzZWRVcmwucG9ydCAmJiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICJodHRwczoiKSB7CiAgICAgICAgICBwYXJzZWRVcmwucG9ydCA9ICI0NDMiOwogICAgICAgIH0KICAgICAgICBpZiAoIXBhcnNlZFVybC5wb3J0ICYmIHBhcnNlZFVybC5wcm90b2NvbCA9PT0gImh0dHA6IikgewogICAgICAgICAgcGFyc2VkVXJsLnBvcnQgPSAiODAiOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXR1cm5TbWFydHVybCA9IG5ldyBfU21hcnR1cmwoKTsKICAgICAgICBPYmplY3QuYXNzaWduKHJldHVyblNtYXJ0dXJsLCBwYXJzZWRVcmwpOwogICAgICAgIHJldHVybiByZXR1cm5TbWFydHVybDsKICAgICAgfQogICAgICAvLyBTdGF0aWMgbWV0aG9kIHRvIGNyZWF0ZSBhIFNtYXJ0dXJsIGluc3RhbmNlIGZyb20gYW4gZXhpc3RpbmcgSVVybE9iamVjdAogICAgICBzdGF0aWMgY3JlYXRlRnJvbVBhcnNlZFVybChwYXJzZWRVcmxBcmcpIHsKICAgICAgICBjb25zdCByZXR1cm5TbWFydHVybCA9IG5ldyBfU21hcnR1cmwoKTsKICAgICAgICBPYmplY3QuYXNzaWduKHJldHVyblNtYXJ0dXJsLCBwYXJzZWRVcmxBcmcpOwogICAgICAgIHJldHVybiByZXR1cm5TbWFydHVybDsKICAgICAgfQogICAgICAvLyBDb25zdHJ1Y3RvciBpbml0aWFsaXplcyBzZWFyY2hQYXJhbXMgYXMgYW4gZW1wdHkgb2JqZWN0CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc2VhcmNoUGFyYW1zID0ge307CiAgICAgIH0KICAgICAgLy8gTWV0aG9kIHRvIGNyZWF0ZSBhbiBpbmRlcGVuZGVudCBjbG9uZSBvZiB0aGUgY3VycmVudCBTbWFydHVybCBpbnN0YW5jZQogICAgICBjbG9uZSgpIHsKICAgICAgICBjb25zdCBjbG9uZWRJbnN0YW5jZSA9IG5ldyBfU21hcnR1cmwoKTsKICAgICAgICBPYmplY3QuYXNzaWduKGNsb25lZEluc3RhbmNlLCB0aGlzKTsKICAgICAgICBjbG9uZWRJbnN0YW5jZS5zZWFyY2hQYXJhbXMgPSB7IC4uLnRoaXMuc2VhcmNoUGFyYW1zIH07CiAgICAgICAgcmV0dXJuIGNsb25lZEluc3RhbmNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUeXBlZCBtZXRob2QgdG8gc2V0IGEgcHJvcGVydHkgYW5kIHJldHVybiB0aGUgaW5zdGFuY2UgZm9yIGNoYWluaW5nLgogICAgICAgKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIHNldCAobXVzdCBiZSBhIGtleSBvZiBTbWFydHVybCkKICAgICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgcHJvcGVydHkKICAgICAgICogQHJldHVybnMgVGhlIFNtYXJ0dXJsIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcKICAgICAgICovCiAgICAgIHNldChwcm9wLCB2YWx1ZTIpIHsKICAgICAgICB0aGlzW3Byb3BdID0gdmFsdWUyOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIC8vIE1ldGhvZCB0byBjb252ZXJ0IHRoZSBTbWFydHVybCBpbnN0YW5jZSBiYWNrIGludG8gYSBVUkwgc3RyaW5nCiAgICAgIHRvU3RyaW5nKCkgewogICAgICAgIGxldCB1c2VycGFydCA9IGBgOwogICAgICAgIGlmICh0aGlzLnVzZXJuYW1lICYmICF0aGlzLnBhc3N3b3JkKSB7CiAgICAgICAgICB1c2VycGFydCA9IGAke3RoaXMudXNlcm5hbWV9QGA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnVzZXJuYW1lICYmIHRoaXMucGFzc3dvcmQpIHsKICAgICAgICAgIHVzZXJwYXJ0ID0gYCR7dGhpcy51c2VybmFtZX06JHt0aGlzLnBhc3N3b3JkfUBgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm90b2NvbH0vLyR7dXNlcnBhcnR9JHt0aGlzLmhvc3RuYW1lfToke3RoaXMucG9ydH0ke3RoaXMucGF0aH1gOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIyID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIyLCB7CiAgU21hcnR1cmw6ICgpID0+IFNtYXJ0dXJsCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dXJsX2NsYXNzZXNfc21hcnR1cmwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnJlcXVlc3RfcGx1Z2luczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDMuMC4zNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIzLCB7CiAgV2ViUmVxdWVzdDogKCkgPT4gV2ViUmVxdWVzdAp9KTsKdmFyIFdlYlJlcXVlc3Q7CnZhciBpbml0X2Rpc3RfdHMyMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMyKCk7CiAgICBXZWJSZXF1ZXN0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnID0ge30pIHsKICAgICAgICB0aGlzLm9wdGlvbnNBcmcgPSBvcHRpb25zQXJnOwogICAgICAgIHRoaXMuY2FjaGVTdG9yZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMy5XZWJTdG9yZSh7CiAgICAgICAgICBkYk5hbWU6ICJ3ZWJyZXF1ZXN0IiwKICAgICAgICAgIHN0b3JlTmFtZTogIndlYnJlcXVlc3QiCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgbG9nZ2luZzogdHJ1ZSwKICAgICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgICB9OwogICAgICB9CiAgICAgIGFzeW5jIGdldEpzb24odXJsQXJnLCB1c2VDYWNoZUFyZyA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsQXJnLCB7CiAgICAgICAgICBtZXRob2Q6ICJHRVQiLAogICAgICAgICAgdXNlQ2FjaGU6IHVzZUNhY2hlQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHBvc3RKc29uCiAgICAgICAqLwogICAgICBhc3luYyBwb3N0SnNvbih1cmxBcmcsIHJlcXVlc3RCb2R5LCB1c2VDYWNoZUFyZyA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsQXJnLCB7CiAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSksCiAgICAgICAgICB1c2VDYWNoZTogdXNlQ2FjaGVBcmcKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcHV0IGpzCiAgICAgICAqLwogICAgICBhc3luYyBwdXRKc29uKHVybEFyZywgcmVxdWVzdEJvZHksIHVzZVN0b3JlQXNGYWxsYmFjayA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsQXJnLCB7CiAgICAgICAgICBtZXRob2Q6ICJQVVQiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHJlcXVlc3RCb2R5KQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwdXQganMKICAgICAgICovCiAgICAgIGFzeW5jIGRlbGV0ZUpzb24odXJsQXJnLCB1c2VTdG9yZUFzRmFsbGJhY2sgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICB9LAogICAgICAgICAgbWV0aG9kOiAiR0VUIgogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIGFzeW5jIHJlcXVlc3QodXJsQXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgb3B0aW9uc0FyZyA9IHsKICAgICAgICAgIHRpbWVvdXRNczogNmU0LAogICAgICAgICAgdXNlQ2FjaGU6IGZhbHNlLAogICAgICAgICAgLi4ub3B0aW9uc0FyZwogICAgICAgIH07CiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihvcHRpb25zQXJnLnRpbWVvdXRNcykudGhlbigoKSA9PiB7CiAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7CiAgICAgICAgfSk7CiAgICAgICAgbGV0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBsZXQgY2FjaGVVc2VkID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgYXdhaXQgdGhpcy5jYWNoZVN0b3JlLmNoZWNrKHVybEFyZykpIHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gYXdhaXQgdGhpcy5jYWNoZVN0b3JlLmdldCh1cmxBcmcpOwogICAgICAgICAgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5yZXNvbHZlKG5ldyBSZXNwb25zZShyZXNwb25zZUJ1ZmZlciwge30pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5yZXNvbHZlKG51bGwpOwogICAgICAgIH0KICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxBcmcsIHsKICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsCiAgICAgICAgICBtZXRob2Q6IG9wdGlvbnNBcmcubWV0aG9kLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAuLi5vcHRpb25zQXJnLmhlYWRlcnMgfHwge30KICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBvcHRpb25zQXJnLmJvZHkKICAgICAgICB9KS5jYXRjaChhc3luYyAoZXJyKSA9PiB7CiAgICAgICAgICBpZiAob3B0aW9uc0FyZy51c2VDYWNoZSAmJiBhd2FpdCBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2UpIHsKICAgICAgICAgICAgY2FjaGVVc2VkID0gdHJ1ZTsKICAgICAgICAgICAgY29uc3QgY2FjaGVkUmVzcG9uc2UgPSBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIHJldHVybiBjYWNoZWRSZXNwb25zZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgYXdhaXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gNTAwKSB7CiAgICAgICAgICBjYWNoZVVzZWQgPSB0cnVlOwogICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgfQogICAgICAgIGlmICghY2FjaGVVc2VkICYmIG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gYXdhaXQgcmVzcG9uc2UuY2xvbmUoKS5hcnJheUJ1ZmZlcigpOwogICAgICAgICAgYXdhaXQgdGhpcy5jYWNoZVN0b3JlLnNldCh1cmxBcmcsIGJ1ZmZlcjIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmxvZyhgJHt1cmxBcmd9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYSBtdWx0aSBlbmRwb2ludCwgZmF1bHQgdG9sZXJhbnQgcmVxdWVzdCBmdW5jdGlvbgogICAgICAgKi8KICAgICAgYXN5bmMgcmVxdWVzdE11bHRpRW5kcG9pbnQodXJsQXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgbGV0IGFsbFVybHM7CiAgICAgICAgbGV0IHVzZWRVcmxJbmRleCA9IDA7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXJsQXJnKSkgewogICAgICAgICAgYWxsVXJscyA9IHVybEFyZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxsVXJscyA9IFt1cmxBcmddOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXF1ZXN0SGlzdG9yeSA9IFtdOwogICAgICAgIGNvbnN0IGRvSGlzdG9yeUNoZWNrID0gYXN5bmMgKGhpc3RvcnlFbnRyeVR5cGVBcmcpID0+IHsKICAgICAgICAgIHJlcXVlc3RIaXN0b3J5LnB1c2goaGlzdG9yeUVudHJ5VHlwZUFyZyk7CiAgICAgICAgICBpZiAoaGlzdG9yeUVudHJ5VHlwZUFyZyA9PT0gIjQyOSIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImdvdCA0MjksIHNvIHdhaXRpbmcgYSBsaXR0bGUgYml0LiIpOwogICAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgyZTMgLSAxZTMgKyAxKSkgKyAxZTMpOwogICAgICAgICAgfQogICAgICAgICAgbGV0IG51bU9mSGlzdG9yeVR5cGUgPSAwOwogICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZXF1ZXN0SGlzdG9yeSkgewogICAgICAgICAgICBpZiAoZW50cnkgPT09IGhpc3RvcnlFbnRyeVR5cGVBcmcpCiAgICAgICAgICAgICAgbnVtT2ZIaXN0b3J5VHlwZSsrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG51bU9mSGlzdG9yeVR5cGUgPiAyICogYWxsVXJscy5sZW5ndGggKiB1c2VkVXJsSW5kZXgpIHsKICAgICAgICAgICAgdXNlZFVybEluZGV4Kys7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBjb25zdCBkb1JlcXVlc3QgPSBhc3luYyAodXJsVG9Vc2UpID0+IHsKICAgICAgICAgIGlmICghdXJsVG9Vc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJyZXF1ZXN0IGZhaWxlZCBwZXJtYW5lbnRseSIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5sb2coYEdldHRpbmcgJHt1cmxUb1VzZX0gd2l0aCBtZXRob2QgJHtvcHRpb25zQXJnLm1ldGhvZH1gKTsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsVG9Vc2UsIHsKICAgICAgICAgICAgbWV0aG9kOiBvcHRpb25zQXJnLm1ldGhvZCwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgLi4ub3B0aW9uc0FyZy5oZWFkZXJzIHx8IHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6IG9wdGlvbnNBcmcuYm9keQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmxvZyhgJHt1cmxUb1VzZX0gYW5zd2VycyB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHsKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXdhaXQgZG9IaXN0b3J5Q2hlY2socmVzcG9uc2Uuc3RhdHVzLnRvU3RyaW5nKCkpOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkb1JlcXVlc3QoYWxsVXJsc1t1c2VkVXJsSW5kZXhdKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IGZpbmFsUmVzcG9uc2UgPSBhd2FpdCBkb1JlcXVlc3QoYWxsVXJsc1t1c2VkVXJsSW5kZXhdKTsKICAgICAgICByZXR1cm4gZmluYWxSZXNwb25zZTsKICAgICAgfQogICAgICBsb2cobG9nQXJnKSB7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhsb2dBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzCnZhciBEZWZlcnJlZDIsIGRlZmVyMzsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMiKCkgewogICAgRGVmZXJyZWQyID0gY2xhc3MgewogICAgICBjbGFpbSgpIHsKICAgICAgICBpZiAodGhpcy5jbGFpbWVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsYWltZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zdG9wcGVkQXQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmNsYWltZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkZWZlcjMgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWQyKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzCnZhciBDdW11bGF0aXZlRGVmZXJyZWQyLCBjdW11bGF0aXZlRGVmZXIyOwp2YXIgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19jdW11bGF0aXZlZGVmZXJyZWQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyKCk7CiAgICBDdW11bGF0aXZlRGVmZXJyZWQyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMgPSBbXTsKICAgICAgICB0aGlzLmRlZmVycmVkID0gZGVmZXIzKCk7CiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFByb21pc2UgPSB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMuc2hpZnQoKTsKICAgICAgICAgICAgYXdhaXQgcG9wcGVkUHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICAgIGFkZFByb21pc2UocHJvbWlzZUFyZykgewogICAgICAgIHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5wdXNoKHByb21pc2VBcmcpOwogICAgICB9CiAgICB9OwogICAgY3VtdWxhdGl2ZURlZmVyMiA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBDdW11bGF0aXZlRGVmZXJyZWQyKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI0ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI0LCB7CiAgQ3VtdWxhdGl2ZURlZmVycmVkOiAoKSA9PiBDdW11bGF0aXZlRGVmZXJyZWQyLAogIERlZmVycmVkOiAoKSA9PiBEZWZlcnJlZDIsCiAgY3VtdWxhdGl2ZURlZmVyOiAoKSA9PiBjdW11bGF0aXZlRGVmZXIyLAogIGRlZmVyOiAoKSA9PiBkZWZlcjMsCiAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTogKCkgPT4gZ2V0Rmlyc3RUcnVlT3JGYWxzZTIsCiAgbWFwOiAoKSA9PiBtYXA2LAogIHJlamVjdGVkUHJvbWlzZTogKCkgPT4gcmVqZWN0ZWRQcm9taXNlMiwKICByZXNvbHZlZFByb21pc2U6ICgpID0+IHJlc29sdmVkUHJvbWlzZTIsCiAgdGltZW91dEFuZENvbnRpbnVlOiAoKSA9PiB0aW1lb3V0QW5kQ29udGludWUyLAogIHRpbWVvdXRXcmFwOiAoKSA9PiB0aW1lb3V0V3JhcDIKfSk7CnZhciByZXNvbHZlZFByb21pc2UyLCByZWplY3RlZFByb21pc2UyLCBtYXA2LCB0aW1lb3V0V3JhcDIsIHRpbWVvdXRBbmRDb250aW51ZTIsIGdldEZpcnN0VHJ1ZU9yRmFsc2UyOwp2YXIgaW5pdF9kaXN0X3RzMjQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMigpOwogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19jdW11bGF0aXZlZGVmZXJyZWQyKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMigpOwogICAgcmVzb2x2ZWRQcm9taXNlMiA9ICh2YWx1ZTIpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZTIpOwogICAgfTsKICAgIHJlamVjdGVkUHJvbWlzZTIgPSAoZXJyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpOwogICAgfTsKICAgIG1hcDYgPSBhc3luYyAoaW5wdXRBcmcsIGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgIGNvbnN0IHByb21pc2VBcnJheSA9IFtdOwogICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXRBcmcpIHsKICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgcHJvbWlzZUFycmF5LnB1c2gocHJvbWlzZSk7CiAgICAgICAgcHJvbWlzZS50aGVuKCh4NCkgPT4gewogICAgICAgICAgcmVzdWx0QXJyYXkucHVzaCh4NCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogICAgfTsKICAgIHRpbWVvdXRXcmFwMiA9IGFzeW5jIChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZywgcmVqZWN0QXJnID0gdHJ1ZSkgPT4gewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmIChyZWplY3RBcmcpIHsKICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigidGltZW91dCIpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc29sdmUyKG51bGwpOwogICAgICAgICAgfQogICAgICAgIH0sIHRpbWVvdXRJbk1zQXJnKTsKICAgICAgICBwcm9taXNlQXJnLnRoZW4ocmVzb2x2ZTIsIHJlamVjdCk7CiAgICAgIH0pOwogICAgfTsKICAgIHRpbWVvdXRBbmRDb250aW51ZTIgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcgPSA2ZTQpID0+IHsKICAgICAgcmV0dXJuIHRpbWVvdXRXcmFwMihwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZywgZmFsc2UpOwogICAgfTsKICAgIGdldEZpcnN0VHJ1ZU9yRmFsc2UyID0gYXN5bmMgKHByb21pc2VzQXJnKSA9PiB7CiAgICAgIGNvbnN0IGRvbmUgPSBkZWZlcjMoKTsKICAgICAgZm9yIChjb25zdCBwcm9taXNlQXJnIG9mIHByb21pc2VzQXJnKSB7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKChyZXN1bHRBcmcpID0+IHsKICAgICAgICAgIGlmIChyZXN1bHRBcmcgPT09IHRydWUpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQXJnKS50aGVuKCgpID0+IHsKICAgICAgICBkb25lLnJlc29sdmUoZmFsc2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZGVsYXlAMy4wLjEvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyNSwgewogIFRpbWVvdXQ6ICgpID0+IFRpbWVvdXQyLAogIGRlbGF5Rm9yOiAoKSA9PiBkZWxheUZvcjIsCiAgZGVsYXlGb3JSYW5kb206ICgpID0+IGRlbGF5Rm9yUmFuZG9tMgp9KTsKdmFyIGRlbGF5Rm9yMiwgZGVsYXlGb3JSYW5kb20yLCBUaW1lb3V0MjsKdmFyIGluaXRfZGlzdF90czI1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydGRlbGF5QDMuMC4xL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZGVsYXkvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNCgpOwogICAgZGVsYXlGb3IyID0gYXN5bmMgKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT25BcmcsIHVucmVmZWRBcmcgPSBmYWxzZSkgPT4gewogICAgICBjb25zdCB0aW1lb3V0MiA9IG5ldyBUaW1lb3V0Mih0aW1lSW5NaWxsaXNlY29uZEFyZywgbnVsbCwgdW5yZWZlZEFyZyk7CiAgICAgIGF3YWl0IHRpbWVvdXQyLnByb21pc2U7CiAgICAgIHJldHVybiBwYXNzT25Bcmc7CiAgICB9OwogICAgZGVsYXlGb3JSYW5kb20yID0gYXN5bmMgKHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgYXdhaXQgZGVsYXlGb3IyKE1hdGgucmFuZG9tKCkgKiAodGltZU1heEluTWlsbGlzZWNvbmRBcmcgLSB0aW1lTWluSW5NaWxsaXNlY29uZEFyZykgKyB0aW1lTWluSW5NaWxsaXNlY29uZEFyZywgbnVsbCwgdW5yZWZlZEFyZyk7CiAgICAgIHJldHVybiBwYXNzT25Bcmc7CiAgICB9OwogICAgVGltZW91dDIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT24sIHVucmVmZWRBcmcgPSBmYWxzZSkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMudGltZW91dEluTWlsbGlzID0gdGltZUluTWlsbGlzZWNvbmRBcmc7CiAgICAgICAgdGhpcy5fZGVmZXJyZWQgPSBkZWZlcjMoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7CiAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUocGFzc09uKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lSW5NaWxsaXNlY29uZEFyZyk7CiAgICAgICAgdGhpcy5zdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodW5yZWZlZEFyZykgewogICAgICAgICAgdGhpcy5tYWtlVW5yZWZlZCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdAogICAgICAgKi8KICAgICAgbWFrZVVucmVmZWQoKSB7CiAgICAgICAgdGhpcy5fdGltZW91dC51bnJlZigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjYW5jZWxzIHRoZSB0aW1lcgogICAgICAgKi8KICAgICAgY2FuY2VsKCkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOwogICAgICB9CiAgICAgIGdldFRpbWVMZWZ0KCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhcnRlZCArIHRoaXMudGltZW91dEluTWlsbGlzIC0gRGF0ZS5ub3coKTsKICAgICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvYWRkcmVzcy5qcwp2YXIgaW5pdF9hZGRyZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2FkZHJlc3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbXBhbnkuanMKdmFyIGluaXRfY29tcGFueSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb21wYW55LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29udGFjdC5qcwp2YXIgaW5pdF9jb250YWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbnRhY3QuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jaGVja2luZ2FjY291bnQuanMKdmFyIGluaXRfY2hlY2tpbmdhY2NvdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY2hlY2tpbmdhY2NvdW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jdXJyZW5jeS5qcwp2YXIgaW5pdF9jdXJyZW5jeSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2N1cnJlbmN5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2V4cGVuc2UuanMKdmFyIGluaXRfZXhwZW5zZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2V4cGVuc2UuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2ludm9pY2UuanMKdmFyIGluaXRfaW52b2ljZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2ludm9pY2UuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3BheW1lbnQuanMKdmFyIGluaXRfcGF5bWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3BheW1lbnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvdHJhbnNhY3Rpb24uanMKdmFyIGluaXRfdHJhbnNhY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS90cmFuc2FjdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbmRleC5qcwp2YXIgZmluYW5jZV9leHBvcnRzID0ge307CnZhciBpbml0X2ZpbmFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NoZWNraW5nYWNjb3VudCgpOwogICAgaW5pdF9jdXJyZW5jeSgpOwogICAgaW5pdF9leHBlbnNlKCk7CiAgICBpbml0X2ludm9pY2UoKTsKICAgIGluaXRfcGF5bWVudCgpOwogICAgaW5pdF90cmFuc2FjdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2pvYi5qcwp2YXIgSUpvYjsKdmFyIGluaXRfam9iID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2pvYi5qcyIoKSB7CiAgICBpbml0X2ZpbmFuY2UoKTsKICAgIGluaXRfY29tcGFueSgpOwogICAgaW5pdF9jb250YWN0KCk7CiAgICBJSm9iID0gY2xhc3MgewogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9tb25nb2Rlc2NyaXB0b3IuanMKdmFyIGluaXRfbW9uZ29kZXNjcmlwdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL21vbmdvZGVzY3JpcHRvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzCnZhciBpbml0X29iamVjdGFjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RhY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdHN0YXR1cy5qcwp2YXIgaW5pdF9vYmplY3RzdGF0dXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0c3RhdHVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS93cmFwcGVkZGF0YS5qcwp2YXIgaW5pdF93cmFwcGVkZGF0YSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS93cmFwcGVkZGF0YS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvaW5kZXguanMKdmFyIGRhdGFiYXNlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZGF0YWJhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvaW5kZXguanMiKCkgewogICAgaW5pdF9tb25nb2Rlc2NyaXB0b3IoKTsKICAgIGluaXRfb2JqZWN0YWN0aW9uKCk7CiAgICBpbml0X29iamVjdHN0YXR1cygpOwogICAgaW5pdF93cmFwcGVkZGF0YSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2xldHRlci5qcwp2YXIgaW5pdF9sZXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvbGV0dGVyLmpzIigpIHsKICAgIGluaXRfYnVzaW5lc3MoKTsKICAgIGluaXRfZmluYW5jZSgpOwogICAgaW5pdF9kYXRhYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BkZi5qcwp2YXIgaW5pdF9wZGYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZXJzb24uanMKdmFyIGluaXRfcGVyc29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BlcnNvbi5qcyIoKSB7CiAgICBpbml0X2NvbnRhY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wcm9qZWN0LmpzCnZhciBpbml0X3Byb2plY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcHJvamVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvaW5kZXguanMKdmFyIGJ1c2luZXNzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoYnVzaW5lc3NfZXhwb3J0cywgewogIElKb2I6ICgpID0+IElKb2IKfSk7CnZhciBpbml0X2J1c2luZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYWRkcmVzcygpOwogICAgaW5pdF9jb21wYW55KCk7CiAgICBpbml0X2NvbnRhY3QoKTsKICAgIGluaXRfam9iKCk7CiAgICBpbml0X2xldHRlcigpOwogICAgaW5pdF9wZGYoKTsKICAgIGluaXRfcGVyc29uKCk7CiAgICBpbml0X3Byb2plY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2NvbW1pdGluZm8uanMKdmFyIGluaXRfY29tbWl0aW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2NvbW1pdGluZm8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvc3RhdHVzb2JqZWN0LmpzCnZhciBpbml0X3N0YXR1c29iamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL3N0YXR1c29iamVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9pbmRleC5qcwp2YXIgY29kZV9leHBvcnRzID0ge307CnZhciBpbml0X2NvZGUzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21taXRpbmZvKCk7CiAgICBpbml0X3N0YXR1c29iamVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9jb250YWluZXIuanMKdmFyIGluaXRfY29udGFpbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9jb250YWluZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci92b2x1bWVtb3VudC5qcwp2YXIgaW5pdF92b2x1bWVtb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvdm9sdW1lbW91bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcwp2YXIgY29udGFpbmVyX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfY29udGFpbmVyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9jb250YWluZXIoKTsKICAgIGluaXRfdm9sdW1lbW91bnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2FydGljbGUuanMKdmFyIGluaXRfYXJ0aWNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2FydGljbGUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2F1dGhvci5qcwp2YXIgaW5pdF9hdXRob3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hdXRob3IuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2RvY3VtZW50YXRpb25zZXQuanMKdmFyIGluaXRfZG9jdW1lbnRhdGlvbnNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2RvY3VtZW50YXRpb25zZXQuanMiKCkgewogICAgaW5pdF9hcnRpY2xlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9pbmRleC5qcwp2YXIgY29udGVudF9leHBvcnRzID0ge307CnZhciBpbml0X2NvbnRlbnQzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvaW5kZXguanMiKCkgewogICAgaW5pdF9hcnRpY2xlKCk7CiAgICBpbml0X2F1dGhvcigpOwogICAgaW5pdF9kb2N1bWVudGF0aW9uc2V0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9kYXRlLmpzCnZhciBpbml0X2RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9kYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL3RpbWUuanMKdmFyIGluaXRfdGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL3RpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvaW5kZXguanMKdmFyIGdlbmVyYWxfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9nZW5lcmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvaW5kZXguanMiKCkgewogICAgaW5pdF9kYXRlKCk7CiAgICBpbml0X3RpbWUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NlcnQuanMKdmFyIGluaXRfY2VydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NlcnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY25hbWUuanMKdmFyIElDbmFtZURlc2NyaXB0b3I7CnZhciBpbml0X2NuYW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY25hbWUuanMiKCkgewogICAgaW5pdF9jZXJ0KCk7CiAgICBJQ25hbWVEZXNjcmlwdG9yID0gY2xhc3MgewogICAgfTsKICAgIDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RldmljZS5qcwp2YXIgaW5pdF9kZXZpY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kZXZpY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zLmpzCnZhciBpbml0X2RucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Rucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnNjaGFsbGVuZ2UuanMKdmFyIGluaXRfZG5zY2hhbGxlbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zY2hhbGxlbmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RvbWFpbmRlbGVnYXRpb24uanMKdmFyIGluaXRfZG9tYWluZGVsZWdhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RvbWFpbmRlbGVnYXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvand0LmpzCnZhciBpbml0X2p3dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2p3dC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9uZXR3b3Jrbm9kZS5qcwp2YXIgaW5pdF9uZXR3b3Jrbm9kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL25ldHdvcmtub2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JlcXVlc3QuanMKdmFyIGluaXRfcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JlcXVlc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmV2ZXJzZXByb3h5LmpzCnZhciBpbml0X3JldmVyc2Vwcm94eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JldmVyc2Vwcm94eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9zc2guanMKdmFyIGluaXRfc3NoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvc3NoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2luZGV4LmpzCnZhciBuZXR3b3JrX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobmV0d29ya19leHBvcnRzLCB7CiAgSUNuYW1lRGVzY3JpcHRvcjogKCkgPT4gSUNuYW1lRGVzY3JpcHRvcgp9KTsKdmFyIGluaXRfbmV0d29yayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2VydCgpOwogICAgaW5pdF9jbmFtZSgpOwogICAgaW5pdF9kZXZpY2UoKTsKICAgIGluaXRfZG5zKCk7CiAgICBpbml0X2Ruc2NoYWxsZW5nZSgpOwogICAgaW5pdF9kb21haW5kZWxlZ2F0aW9uKCk7CiAgICBpbml0X2p3dCgpOwogICAgaW5pdF9uZXR3b3Jrbm9kZSgpOwogICAgaW5pdF9yZXF1ZXN0KCk7CiAgICBpbml0X3JldmVyc2Vwcm94eSgpOwogICAgaW5pdF9zc2goKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3Byb2R1Y3QuanMKdmFyIGluaXRfcHJvZHVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3Byb2R1Y3QuanMiKCkgewogICAgaW5pdF9jb21wYW55KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9zdWJzY3JpcHRpb25wbGFuLmpzCnZhciBpbml0X3N1YnNjcmlwdGlvbnBsYW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9zdWJzY3JpcHRpb25wbGFuLmpzIigpIHsKICAgIGluaXRfcHJvZHVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvaW5kZXguanMKdmFyIHNhYXNfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9zYWFzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvaW5kZXguanMiKCkgewogICAgaW5pdF9zdWJzY3JpcHRpb25wbGFuKCk7CiAgICBpbml0X3Byb2R1Y3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zdG9yYWdlL2luZGV4LmpzCnZhciBzdG9yYWdlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfc3RvcmFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zdG9yYWdlL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmsuanMKdmFyIGluaXRfbGluazMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL21lbnVpdGVtLmpzCnZhciBpbml0X21lbnVpdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbWVudWl0ZW0uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGlua2Jsb2NrLmpzCnZhciBpbml0X2xpbmtibG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmtibG9jay5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9pbmRleC5qcwp2YXIgd2Vic2l0ZV9leHBvcnRzID0ge307CnZhciBpbml0X3dlYnNpdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpbmszKCk7CiAgICBpbml0X21lbnVpdGVtKCk7CiAgICBpbml0X2xpbmtibG9jaygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3R5cGVmZXN0Lm93bi5qcwp2YXIgaW5pdF90eXBlZmVzdF9vd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvdHlwZWZlc3Qub3duLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjYgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjYsIHsKICBidXNpbmVzczogKCkgPT4gYnVzaW5lc3NfZXhwb3J0cywKICBjb2RlOiAoKSA9PiBjb2RlX2V4cG9ydHMsCiAgY29udGFpbmVyOiAoKSA9PiBjb250YWluZXJfZXhwb3J0cywKICBjb250ZW50OiAoKSA9PiBjb250ZW50X2V4cG9ydHMsCiAgZGF0YWJhc2U6ICgpID0+IGRhdGFiYXNlX2V4cG9ydHMsCiAgZmluYW5jZTogKCkgPT4gZmluYW5jZV9leHBvcnRzLAogIGdlbmVyYWw6ICgpID0+IGdlbmVyYWxfZXhwb3J0cywKICBuZXR3b3JrOiAoKSA9PiBuZXR3b3JrX2V4cG9ydHMsCiAgc2FhczogKCkgPT4gc2Fhc19leHBvcnRzLAogIHN0b3JhZ2U6ICgpID0+IHN0b3JhZ2VfZXhwb3J0cywKICB3ZWJzaXRlOiAoKSA9PiB3ZWJzaXRlX2V4cG9ydHMKfSk7CnZhciBpbml0X2Rpc3RfdHMyNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2J1c2luZXNzKCk7CiAgICBpbml0X2NvZGUzKCk7CiAgICBpbml0X2NvbnRhaW5lcjIoKTsKICAgIGluaXRfZGF0YWJhc2UoKTsKICAgIGluaXRfZmluYW5jZSgpOwogICAgaW5pdF9jb250ZW50MygpOwogICAgaW5pdF9nZW5lcmFsKCk7CiAgICBpbml0X25ldHdvcmsoKTsKICAgIGluaXRfc2FhcygpOwogICAgaW5pdF9zdG9yYWdlKCk7CiAgICBpbml0X3dlYnNpdGUoKTsKICAgIGluaXRfdHlwZWZlc3Rfb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAucGx1Z2lucy5qcwp2YXIgaW5pdF93ZWJzZXR1cF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMKdmFyIGluaXRfaW50ZXJmYWNlczMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qcwp2YXIgVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIFRhZyA9IGNsYXNzIHsKICAgICAgYXBwZW5kVG9Eb20oKSB7CiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudCAmJiAhdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbURvbSgpIHsKICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZik7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZSkgewogICAgICAgICAgdGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanNvbmxkdGFnLmpzCnZhciBKc29uTGRUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX2pzb25sZHRhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qc29ubGR0YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMzKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBKc29uTGRUYWcgPSBjbGFzcyBfSnNvbkxkVGFnIGV4dGVuZHMgVGFnIHsKICAgICAgc3RhdGljIGNyZWF0ZUNvbXBhbnlKc29uTGQoY29tcGFueURhdGFBcmcpIHsKICAgICAgICBjb25zdCBjb21wYW55TGQgPSB7CiAgICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAgICJAdHlwZSI6ICJDb3Jwb3JhdGlvbiIsCiAgICAgICAgICBuYW1lOiBjb21wYW55RGF0YUFyZy5uYW1lLAogICAgICAgICAgYWx0ZXJuYXRlTmFtZTogY29tcGFueURhdGFBcmcubmFtZS5yZXBsYWNlKCIgR21iSCIsICIiKSwKICAgICAgICAgIHVybDogY29tcGFueURhdGFBcmcuY29udGFjdC53ZWJzaXRlLAogICAgICAgICAgbG9nbzogY29tcGFueURhdGFBcmcuY29udGFjdC5sb2dvVXJsLAogICAgICAgICAgY29udGFjdFBvaW50OiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgICB0ZWxlcGhvbmU6IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QucGhvbmUsCiAgICAgICAgICAgIGNvbnRhY3RUeXBlOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAgIGFyZWFTZXJ2ZWQ6ICJERSIsCiAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlOiBbImVuIiwgIkdlcm1hbiJdCiAgICAgICAgICB9LAogICAgICAgICAgc2FtZUFzOiBbXQogICAgICAgIH07CiAgICAgICAgaWYgKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuZmFjZWJvb2tVcmwpIHsKICAgICAgICAgIGNvbXBhbnlMZC5zYW1lQXMucHVzaChjb21wYW55RGF0YUFyZy5jb250YWN0LmZhY2Vib29rVXJsKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QudHdpdHRlclVybCkgewogICAgICAgICAgY29tcGFueUxkLnNhbWVBcy5wdXNoKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QudHdpdHRlclVybCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxkVGFnID0gbmV3IF9Kc29uTGRUYWcoY29tcGFueUxkKTsKICAgICAgICByZXR1cm4gbGRUYWc7CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKG5ld3NBcnRpY2xlQXJnKSB7CiAgICAgICAgY29uc3QgbmV3c0FydGljbGVMZCA9IHsKICAgICAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICAgICAgICAgIkB0eXBlIjogIk5ld3NBcnRpY2xlIiwKICAgICAgICAgIG1haW5FbnRpdHlPZlBhZ2U6IHsKICAgICAgICAgICAgIkB0eXBlIjogIldlYlBhZ2UiLAogICAgICAgICAgICAiQGlkIjogd2luZG93LmxvY2F0aW9uLmhyZWYKICAgICAgICAgIH0sCiAgICAgICAgICBoZWFkbGluZTogIkFydGljbGUgaGVhZGxpbmUiLAogICAgICAgICAgaW1hZ2U6IFtuZXdzQXJ0aWNsZUFyZy5mZWF0dXJlZEltYWdlVXJsXSwKICAgICAgICAgIGRhdGVQdWJsaXNoZWQ6IG5ldyBEYXRlKG5ld3NBcnRpY2xlQXJnLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSwKICAgICAgICAgIGRhdGVNb2RpZmllZDogbmV3IERhdGUobmV3c0FydGljbGVBcmcudGltZXN0YW1wKS50b0lTT1N0cmluZygpLAogICAgICAgICAgYXV0aG9yOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAgICAgICBuYW1lOiBgJHtuZXdzQXJ0aWNsZUFyZy5hdXRob3IuZmlyc3ROYW1lfSAke25ld3NBcnRpY2xlQXJnLmF1dGhvci5zdXJOYW1lfWAKICAgICAgICAgIH0sCiAgICAgICAgICBwdWJsaXNoZXI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIk9yZ2FuaXphdGlvbiIsCiAgICAgICAgICAgIG5hbWU6IG5ld3NBcnRpY2xlQXJnLmF1dGhvci5zdXJOYW1lLAogICAgICAgICAgICBsb2dvOiB7CiAgICAgICAgICAgICAgIkB0eXBlIjogIkltYWdlT2JqZWN0IiwKICAgICAgICAgICAgICB1cmw6IG5ld3NBcnRpY2xlQXJnLmF1dGhvci5zdXJOYW1lCiAgICAgICAgICAgICAgLy8gVE9ETwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZGVzY3JpcHRpb246IG5ld3NBcnRpY2xlQXJnLmF1dGhvci5maXJzdE5hbWUKICAgICAgICB9OwogICAgICAgIGNvbnN0IGxkVGFnID0gbmV3IF9Kc29uTGRUYWcobmV3c0FydGljbGVMZCk7CiAgICAgICAgcmV0dXJuIGxkVGFnOwogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVQcm9kdWN0SnNvbkxkKHByb2R1Y3RBcmcsIHB1Ymxpc2hlckFyZykgewogICAgICAgIGNvbnN0IHByb2R1Y3RMZCA9IHsKICAgICAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICAgICAgICAgIkB0eXBlIjogIlNvZnR3YXJlQXBwbGljYXRpb24iLAogICAgICAgICAgbmFtZTogcHJvZHVjdEFyZy5uYW1lLAogICAgICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3RBcmcuZGVzY3JpcHRpb24sCiAgICAgICAgICBvcGVyYXRpbmdTeXN0ZW06IHByb2R1Y3RBcmcub3MsCiAgICAgICAgICBhcHBsaWNhdGlvbkNhdGVnb3J5OiBwcm9kdWN0QXJnLmNhdGVnb3J5LAogICAgICAgICAgb2ZmZXJzOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAgIG5hbWU6ICJVc2VyLWJhc2VkIFBsYW4iLAogICAgICAgICAgICBwcmljZVNwZWNpZmljYXRpb246IHsKICAgICAgICAgICAgICAiQHR5cGUiOiAiUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb24iLAogICAgICAgICAgICAgIHZhbHVlTmFtZTogIk51bWJlciBvZiBVc2VycyIsCiAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgICAgICBwcmljZTogIjQuOTkiLAogICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6ICJFVVIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBwdWJsaXNoZXI6IHRoaXMuY3JlYXRlQ29tcGFueUpzb25MZChwdWJsaXNoZXJBcmcpLmVsZW1lbnRSZWYudGV4dENvbnRlbnQsCiAgICAgICAgICBzY3JlZW5zaG90OiAiaHR0cHM6Ly93d3cuc29jaWFsLmlvL3NjcmVlbnNob3QucG5nIiwKICAgICAgICAgIHVybDogImh0dHBzOi8vd3d3LnNvY2lhbC5pby8iCiAgICAgICAgfTsKICAgICAgICBjb25zdCBsZFRhZyA9IG5ldyBfSnNvbkxkVGFnKHByb2R1Y3RMZCk7CiAgICAgICAgcmV0dXJuIGxkVGFnOwogICAgICB9CiAgICAgIC8vIElOU1RBTkNFCiAgICAgIGNvbnN0cnVjdG9yKGxkT2JqZWN0QXJnKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBjb25zdCBqc29uTGRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAganNvbkxkRWxlbWVudC50eXBlID0gImFwcGxpY2F0aW9uL2xkK2pzb24iOwogICAgICAgIGpzb25MZEVsZW1lbnQudGV4dCA9IEpTT04uc3RyaW5naWZ5KGxkT2JqZWN0QXJnKTsKICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBqc29uTGRFbGVtZW50OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm9wZW5ncmFwaHRhZy5qcwp2YXIgT3BlbmdyYXBoVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcub3BlbmdyYXBodGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgT3BlbmdyYXBoVGFnID0gY2xhc3MgX09wZW5ncmFwaFRhZyBleHRlbmRzIFRhZyB7CiAgICAgIHN0YXRpYyBjcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhuZXdzQXJ0aWNsZUFyZykgewogICAgICAgIGNvbnN0IHRhZ0FycmF5ID0gW107CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dXJsIiwgbmV3c0FydGljbGVBcmcudXJsKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dGl0bGUiLCBuZXdzQXJ0aWNsZUFyZy50aXRsZSkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmRlc2NyaXB0aW9uIiwgbmV3c0FydGljbGVBcmcuY29udGVudCkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmltYWdlIiwgbmV3c0FydGljbGVBcmcuZmVhdHVyZWRJbWFnZVVybCkpOwogICAgICAgIHJldHVybiB0YWdBcnJheTsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvZHVjdE9nVGFncyhwcm9kdWN0QXJnKSB7CiAgICAgICAgY29uc3QgdGFnQXJyYXkgPSBbXTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp1cmwiLCBnbG9iYWxUaGlzLmxvY2F0aW9uLmhyZWYpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp0aXRsZSIsIGAke3Byb2R1Y3RBcmcubmFtZX0gLSAke3Byb2R1Y3RBcmcuc2xvZ2FufWApKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzpzaXRlX25hbWUiLCBwcm9kdWN0QXJnLm5hbWUpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzpkZXNjcmlwdGlvbiIsIHByb2R1Y3RBcmcuZGVzY3JpcHRpb24pKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzppbWFnZSIsIHByb2R1Y3RBcmcubG9nb0xpbmspKTsKICAgICAgICByZXR1cm4gdGFnQXJyYXk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IocHJvcGVydHlOYW1lQXJnLCBjb250ZW50QXJnKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBjb25zdCBvcGVuR3JhcGhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibWV0YSIpOwogICAgICAgIG9wZW5HcmFwaEVsZW1lbnQuc2V0QXR0cmlidXRlKCJwcm9wZXJ0eSIsIHByb3BlcnR5TmFtZUFyZyk7CiAgICAgICAgb3BlbkdyYXBoRWxlbWVudC5jb250ZW50ID0gY29udGVudEFyZzsKICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBvcGVuR3JhcGhFbGVtZW50OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnbGV2ZWwuanMKdmFyIFRhZ0xldmVsOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ2xldmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnbGV2ZWwuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbWFuYWdlcigpOwogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBUYWdMZXZlbCA9IGNsYXNzIHsKICAgICAgc2V0IHRpdGxlKHRpdGxlQXJnKSB7CiAgICAgICAgdGhpcy50aXRsZVN0b3JlID0gdGl0bGVBcmc7CiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICJlbmFibGVkIikgewogICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aGlzLnRpdGxlU3RvcmU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCB0aXRsZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy50aXRsZVN0b3JlOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHRhZ01hbmFnZXJSZWZBcmcsIGxldmVsVHlwZSkgewogICAgICAgIHRoaXMudGFncyA9IFtdOwogICAgICAgIHRoaXMuc3RhdGUgPSAiZGlzYWJsZWQiOwogICAgICAgIHRoaXMudGFnTWFuYWdlclJlZiA9IHRhZ01hbmFnZXJSZWZBcmc7CiAgICAgIH0KICAgICAgYWRkVGFnKHRhZ0FyZykgewogICAgICAgIGlmICh0YWdBcmcgaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgICAgZm9yIChjb25zdCB0YWdBcmcyIG9mIHRhZ0FyZykgewogICAgICAgICAgICB0aGlzLmFkZFRhZyh0YWdBcmcyKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy50YWdzLnB1c2godGFnQXJnKTsKICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAiZW5hYmxlZCIpIHsKICAgICAgICAgICAgdGFnQXJnLmFwcGVuZFRvRG9tKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGFkZENvbXBhbnlJbmZvKGNvbXBhbnlEYXRhQXJnKSB7CiAgICAgICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZUNvbXBhbnlKc29uTGQoY29tcGFueURhdGFBcmcpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzp0eXBlIiwgImJ1c2luZXNzLmJ1c2luZXNzIikpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoIm9nOnRpdGxlIiwgY29tcGFueURhdGFBcmcubmFtZSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoIm9nOnVybCIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3Qud2Vic2l0ZSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoIm9nOmltYWdlIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5sb2dvVXJsKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnN0cmVldF9hZGRyZXNzIiwgYCR7Y29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLnN0cmVldE5hbWV9ICR7Y29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmhvdXNlTnVtYmVyfWApKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6bG9jYWxpdHkiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MucG9zdGFsQ29kZSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpyZWdpb24iLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MuY2l0eSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpwb3N0YWxfY29kZSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmNvdW50cnlfbmFtZSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5jb3VudHJ5KSk7CiAgICAgIH0KICAgICAgYWRkTmV3c0FydGljbGVJbmZvKGFydGljbGVBcmcpIHsKICAgICAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlTmV3c0FydGljbGVKc29uTGQoYXJ0aWNsZUFyZykpOwogICAgICAgIHRoaXMuYWRkVGFnKE9wZW5ncmFwaFRhZy5jcmVhdGVOZXdzQXJ0aWNsZU9nVGFncyhhcnRpY2xlQXJnKSk7CiAgICAgIH0KICAgICAgYWRkUHJvZHVjdEluZm8ocHJvZHVjdEFyZywgY29tcGFueUFyZykgewogICAgICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVQcm9kdWN0SnNvbkxkKHByb2R1Y3RBcmcsIGNvbXBhbnlBcmcpKTsKICAgICAgICB0aGlzLmFkZFRhZyhPcGVuZ3JhcGhUYWcuY3JlYXRlUHJvZHVjdE9nVGFncyhwcm9kdWN0QXJnKSk7CiAgICAgIH0KICAgICAgYXN5bmMgZW5hYmxlKCkgewogICAgICAgIGlmICh0aGlzLnRpdGxlKSB7CiAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMudGl0bGU7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgdGFnQXJnIG9mIHRoaXMudGFncykgewogICAgICAgICAgdGFnQXJnLmFwcGVuZFRvRG9tKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSAiZW5hYmxlZCI7CiAgICAgIH0KICAgICAgYXN5bmMgZGlzYWJsZSgpIHsKICAgICAgICBmb3IgKGNvbnN0IHRhZ0FyZyBvZiB0aGlzLnRhZ3MpIHsKICAgICAgICAgIHRhZ0FyZy5yZW1vdmVGcm9tRG9tKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSAiZGlzYWJsZWQiOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm1ldGF0YWcuanMKdmFyIE1ldGFUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX21ldGF0YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcubWV0YXRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBNZXRhVGFnID0gY2xhc3MgZXh0ZW5kcyBUYWcgewogICAgICBjb25zdHJ1Y3RvcihtZXRhTmFtZUFyZywgY29udGVudEFyZykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgY29uc3QgbWV0YUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7CiAgICAgICAgbWV0YUVsZW1lbnQubmFtZSA9IG1ldGFOYW1lQXJnOwogICAgICAgIG1ldGFFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50QXJnOwogICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IG1ldGFFbGVtZW50OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnbWFuYWdlci5qcwp2YXIgVGFnTWFuYWdlcjsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdtYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnbWFuYWdlci5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbGV2ZWwoKTsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzMygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19tZXRhdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX2pzb25sZHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcoKTsKICAgIFRhZ01hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwgPSBuZXcgVGFnTGV2ZWwodGhpcywgImdsb2JhbCIpOwogICAgICAgIHRoaXMuYmFzZUxldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICJiYXNlIik7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0dXAobWV0YU9iamVjdEFyZykgewogICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJnb29nbGUiLCAibm90cmFuc2xhdGUiKSk7CiAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInJldmlzaXQtYWZ0ZXIiLCAiMSBkYXlzIikpOwogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLnR3aXR0ZXJIYW5kbGUpIHsKICAgICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJ0d2l0dGVyOmNhcmQiLCAic3VtbWFyeV9sYXJnZV9pbWFnZSIpKTsKICAgICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJ0d2l0dGVyOnNpdGUiLCBtZXRhT2JqZWN0QXJnLnR3aXR0ZXJIYW5kbGUpKTsKICAgICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJ0d2l0dGVyOmNyZWF0b3IiLCBtZXRhT2JqZWN0QXJnLnR3aXR0ZXJIYW5kbGUpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5iYXNlTGV2ZWwudGl0bGUgPSBtZXRhT2JqZWN0QXJnLnRpdGxlOwogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICB0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImRlc2NyaXB0aW9uIiwgbWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikpOwogICAgICAgIH0KICAgICAgICBpZiAobWV0YU9iamVjdEFyZy5jYW5vbmljYWxEb21haW4pIHsKICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiY2Fub25pY2FsIiwgbWV0YU9iamVjdEFyZy5jYW5vbmljYWxEb21haW4pKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICBjYXNlIChtZXRhT2JqZWN0QXJnLmxkQ29tcGFueSAmJiAhbWV0YU9iamVjdEFyZy5sZFByb2R1Y3QpOgogICAgICAgICAgICB0aGlzLmJhc2VMZXZlbC5hZGRDb21wYW55SW5mbyhtZXRhT2JqZWN0QXJnLmxkQ29tcGFueSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAhIW1ldGFPYmplY3RBcmcubGRQcm9kdWN0OgogICAgICAgICAgICB0aGlzLmJhc2VMZXZlbC5hZGRQcm9kdWN0SW5mbyhtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdCwgbWV0YU9iamVjdEFyZy5sZENvbXBhbnkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5nbG9iYWxMZXZlbC5lbmFibGUoKTsKICAgICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5iYXNlTGV2ZWw7CiAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTsKICAgICAgfQogICAgICBhc3luYyBzZXRTdWJQYWdlTGV2ZWwobWV0YU9iamVjdEFyZykgewogICAgICAgIGNvbnN0IHN1YlBhZ2VMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAic3VicGFnZSIpOwogICAgICAgIHN1YlBhZ2VMZXZlbC50aXRsZSA9IG1ldGFPYmplY3RBcmcudGl0bGU7CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pIHsKICAgICAgICAgIHN1YlBhZ2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImRlc2NyaXB0aW9uIiwgbWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikpOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKTsKICAgICAgICB0aGlzLmFjdGl2ZUxldmVsID0gc3ViUGFnZUxldmVsOwogICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7CiAgICAgICAgcmV0dXJuIHN1YlBhZ2VMZXZlbDsKICAgICAgfQogICAgICBhc3luYyByZXZlcnRUb0Jhc2VMZXZlbCgpIHsKICAgICAgICBpZiAodGhpcy5hY3RpdmVMZXZlbCAhPT0gdGhpcy5iYXNlTGV2ZWwpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZGlzYWJsZSgpOwogICAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHRoaXMuYmFzZUxldmVsOwogICAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy53ZWJzZXR1cC5qcwp2YXIgV2ViU2V0dXA7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfd2Vic2V0dXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy53ZWJzZXR1cC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfaW50ZXJmYWNlczMoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdtYW5hZ2VyKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbGV2ZWwoKTsKICAgIFdlYlNldHVwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnKSB7CiAgICAgICAgdGhpcy50YWdNYW5hZ2VyID0gbmV3IFRhZ01hbmFnZXIoKTsKICAgICAgICB0aGlzLnJlYWR5RGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNC5kZWZlcigpOwogICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjQuZGVmZXIoKTsKICAgICAgICB0aGlzLnJlYWR5UHJvbWlzZSA9IHRoaXMucmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzclByb21pc2UgPSB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgICAgdGhpcy5zZXR1cCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNtYXJ0c3NyV2FpdEZvclJlYWR5U2lnbmFsKSB7CiAgICAgICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYW4gYXN5bmMgc2V0dXAgY2FsbGVkIGJ5IHRoZSBjb25zdHJ1Y3RvcgogICAgICAgKi8KICAgICAgYXN5bmMgc2V0dXAob3B0aW9uc0FyZykgewogICAgICAgIGlmIChvcHRpb25zQXJnKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0dXAodGhpcy5vcHRpb25zLm1ldGFPYmplY3QpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXZlcnRzIHRoZSBhY3RpdmUgbGV2ZWwgYW5kIHJldHVybnMgdG8gdGhlIGJhc2UgbGV2ZWwKICAgICAgICovCiAgICAgIHJldmVydFRvQmFzZUxldmVsKCkgewogICAgICAgIHRoaXMudGFnTWFuYWdlci5yZXZlcnRUb0Jhc2VMZXZlbCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzZXRzIGEgc3VicGFnZQogICAgICAgKiBAcGFyYW0gbWV0YU9iamVjdEFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0U3ViTGV2ZWwobWV0YU9iamVjdEFyZykgewogICAgICAgIGNvbnN0IHN1YkxldmVsID0gYXdhaXQgdGhpcy50YWdNYW5hZ2VyLnNldFN1YlBhZ2VMZXZlbChtZXRhT2JqZWN0QXJnKTsKICAgICAgICByZXR1cm4gc3ViTGV2ZWw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZsYXNoZXMgdGhlIHRpdGxlIHdpdGggdGhlIGdpdmVuIHRleHQKICAgICAgICogQHBhcmFtIGZsYXNoVGV4dEFyZwogICAgICAgKi8KICAgICAgZmxhc2hUaXRsZShmbGFzaFRleHRBcmcpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogaW5mb3JtcyBzbWFydHNzciB0aGF0IHRoZSBwYWdlIGlzIHJlYWR5IHRvIGJlIHJlbmRlcmVkCiAgICAgICAqLwogICAgICBpbmZvcm1SZWFkeUZvclNtYXJ0c3NyKCkgewogICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNtYXJ0c3NyV2FpdEZvclJlYWR5U2lnbmFsKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBZb3UgaGF2ZSBub3QgaW5kaWNhdGVkIHRoYXQgeW91IGluZm9ybSBzbWFydHNzciBieSBhIGRlZGljYXRlZCBzaWduYWwhIFBsZWFzZSBjb25zaWRlciBkb2luZyBzbyFgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGl0bGUuanMKdmFyIFRpdGxlOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RpdGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGl0bGUuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBUaXRsZSA9IGNsYXNzIHsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI3LCB7CiAgSnNvbkxkVGFnOiAoKSA9PiBKc29uTGRUYWcsCiAgTWV0YVRhZzogKCkgPT4gTWV0YVRhZywKICBPcGVuZ3JhcGhUYWc6ICgpID0+IE9wZW5ncmFwaFRhZywKICBUaXRsZTogKCkgPT4gVGl0bGUsCiAgV2ViU2V0dXA6ICgpID0+IFdlYlNldHVwCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3dlYnNldHVwKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX21ldGF0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX2pzb25sZHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RpdGxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5wbHVnaW5zLmpzCnZhciBpbXBvcnRfc3ltYm9sX3RyZWUyOwp2YXIgaW5pdF9saWtfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHM2KCk7CiAgICBpbXBvcnRfc3ltYm9sX3RyZWUyID0gX190b0VTTShyZXF1aXJlX1N5bWJvbFRyZWUoKSwgMSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5mYXN0bWFwLmpzCnZhciBGYXN0TWFwMjsKdmFyIGluaXRfbGlrX2Zhc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5mYXN0bWFwLmpzIigpIHsKICAgIGluaXRfbGlrX3BsdWdpbnMoKTsKICAgIEZhc3RNYXAyID0gY2xhc3MgX0Zhc3RNYXAgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIGlzVW5pcXVlS2V5KGtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLm1hcE9iamVjdFtrZXlBcmddID8gZmFsc2UgOiB0cnVlOwogICAgICB9CiAgICAgIGFkZFRvTWFwKGtleUFyZywgb2JqZWN0QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNVbmlxdWVLZXkoa2V5QXJnKSB8fCBvcHRpb25zQXJnICYmIG9wdGlvbnNBcmcuZm9yY2UpIHsKICAgICAgICAgIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPSBvYmplY3RBcmc7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRCeUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgfQogICAgICByZW1vdmVGcm9tTWFwKGtleUFyZykgewogICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtID0gdGhpcy5nZXRCeUtleShrZXlBcmcpOwogICAgICAgIGRlbGV0ZSB0aGlzLm1hcE9iamVjdFtrZXlBcmddOwogICAgICAgIHJldHVybiByZW1vdmVkSXRlbTsKICAgICAgfQogICAgICBnZXRLZXlzKCkgewogICAgICAgIGNvbnN0IGtleXMyID0gW107CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgaW4gdGhpcy5tYXBPYmplY3QpIHsKICAgICAgICAgIGlmICh0aGlzLm1hcE9iamVjdFtrZXlBcmddKSB7CiAgICAgICAgICAgIGtleXMyLnB1c2goa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGtleXMyOwogICAgICB9CiAgICAgIGNsZWFuKCkgewogICAgICAgIHRoaXMubWFwT2JqZWN0ID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgRmFzdG1hcCB0aGF0IGluY2x1ZGVzIGFsbCB2YWx1ZXMgZnJvbSB0aGlzIGFuZCBhbGwgZnJvbSB0aGUgZmFzdG1hcCBpbiB0aGUgYXJndW1lbnQKICAgICAgICovCiAgICAgIGNvbmNhdChmYXN0TWFwQXJnKSB7CiAgICAgICAgY29uc3QgY29uY2F0ZWRGYXN0bWFwID0gbmV3IF9GYXN0TWFwKCk7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIHRoaXMuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5MiwgdGhpcy5nZXRCeUtleShrZXkyKSk7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBmYXN0TWFwQXJnLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29uY2F0ZWRGYXN0bWFwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIEZhc3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gZmFzdE1hcEFyZwogICAgICAgKi8KICAgICAgYWRkQWxsRnJvbU90aGVyKGZhc3RNYXBBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIHRoaXMuYWRkVG9NYXAoa2V5MiwgZmFzdE1hcEFyZy5nZXRCeUtleShrZXkyKSwgewogICAgICAgICAgICBmb3JjZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGZpbmQoZmluZEZ1bmN0aW9uQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIHRoaXMuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRCeUtleShrZXkyKTsKICAgICAgICAgIGNvbnN0IGZpbmRGdW5jdGlvblJlc3VsdCA9IGF3YWl0IGZpbmRGdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICAgIGlmIChmaW5kRnVuY3Rpb25SZXN1bHQpIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsub2JqZWN0bWFwLmpzCnZhciB1bmkyLCBPYmplY3RNYXAyOwp2YXIgaW5pdF9saWtfb2JqZWN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsub2JqZWN0bWFwLmpzIigpIHsKICAgIGluaXRfbGlrX3BsdWdpbnMoKTsKICAgIGluaXRfbGlrX2Zhc3RtYXAoKTsKICAgIHVuaTIgPSAocHJlZml4NCA9ICJ1bmkiKSA9PiB7CiAgICAgIHJldHVybiBgJHtwcmVmaXg0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KTsKICAgIH07CiAgICBPYmplY3RNYXAyID0gY2xhc3MgX09iamVjdE1hcCB7CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IGluc3RhbmNlCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmZhc3RNYXAgPSBuZXcgRmFzdE1hcDIoKTsKICAgICAgICB0aGlzLmV2ZW50U3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFuIG9iamVjdCBtYXBwZWQgdG8gYSBzdHJpbmcKICAgICAgICogdGhlIHN0cmluZyBtdXN0IGJlIHVuaXF1ZQogICAgICAgKi8KICAgICAgYWRkTWFwcGVkVW5pcXVlKHVuaXF1ZUtleUFyZywgb2JqZWN0QXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZFRvTWFwKHVuaXF1ZUtleUFyZywgb2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmFzdGVzdCB3YXkgdG8gZ2V0IGFuIG9iamVjdCBmcm9tIHRoZSBtYXAKICAgICAgICogQHBhcmFtIHVuaXF1ZUtleQogICAgICAgKi8KICAgICAgZ2V0TWFwcGVkVW5pcXVlKHVuaXF1ZUtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkodW5pcXVlS2V5QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIGtleQogICAgICAgKiBAcGFyYW0gZnVuY3Rpb25BcmcKICAgICAgICovCiAgICAgIHJlbW92ZU1hcHBlZFVuaXF1ZSh1bmlxdWVLZXkpIHsKICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGQgb2JqZWN0IHRvIE9iamVjdG1hcAogICAgICAgKiByZXR1cm5zIGZhbHNlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWFwCiAgICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkKICAgICAgICovCiAgICAgIGFkZChvYmplY3RBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IG9iamVjdEFyZykgewogICAgICAgICAgICByZXR1cm4ga2V5QXJnOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSB1bmkyKCJrZXkiKTsKICAgICAgICB0aGlzLmFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXksIG9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICBvcGVyYXRpb246ICJhZGQiLAogICAgICAgICAgcGF5bG9hZDogb2JqZWN0QXJnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSAuYWRkIGJ1dCBhZGRzIGFuIHdob2xlIGFycmF5IG9mIG9iamVjdHMKICAgICAgICovCiAgICAgIGFkZEFycmF5KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldCBrZXkgZm9yIG9iamVjdAogICAgICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uCiAgICAgICAqLwogICAgICBnZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgbGV0IGZvdW5kS2V5ID0gbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kIG9iamVjdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmaW5kU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kT25lQW5kUmVtb3ZlKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgZmluZE9uZUFuZFJlbW92ZVN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJ1biBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYW4gb2JqZWN0IGluIHRoZSBPYnNlcnZhYmxlbWFwIGFuZCByZW1vdmVzIGl0LCBzbyBpdCBjYW4ndCBiZSByZXRyaWV2ZWQgYWdhaW4KICAgICAgICovCiAgICAgIGdldE9uZUFuZFJlbW92ZSgpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IHRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGtleVRvVXNlID0ga2V5czJbMF07CiAgICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgZ2V0QXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5CiAgICAgICAqLwogICAgICBpc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlKG9iamVjdEFyZykgewogICAgICAgIGlmICh0aGlzLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIGNvbnN0IGtleUFyZyA9IHRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgICAgICBjb25zdCByZW1vdmVkT2JqZWN0ID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkT2JqZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkT2JqZWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgT2JqZWN0bWFwIHRoYXQgaW5jbHVkZXMKICAgICAgICovCiAgICAgIGNvbmNhdChvYmplY3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXR0ZWRPYmplY3RNYXAgPSBuZXcgX09iamVjdE1hcCgpOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBPYmplY3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gb2JqZWN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5zdHJpbmdtYXAuanMKdmFyIFN0cmluZ21hcDI7CnZhciBpbml0X2xpa19zdHJpbmdtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5zdHJpbmdtYXAuanMiKCkgewogICAgaW5pdF9saWtfcGx1Z2lucygpOwogICAgU3RyaW5nbWFwMiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheSA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGQgYSBzdHJpbmcgdG8gdGhlIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgYWRkU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnB1c2goc3RyaW5nQXJnKTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSBhZGRTdHJpbmcsIGJ1dCBhY2NlcHRzIGFuIGFycmF5IG9mIHN0cmluZ3MKICAgICAgICovCiAgICAgIGFkZFN0cmluZ0FycmF5KHN0cmluZ0FycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHN0cmluZ0FycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZFN0cmluZyhzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZXMgYSBzdHJpbmcgZnJvbSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHJlbW92ZVN0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBpbiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgaWYgKHRoaXMuX3N0cmluZ0FycmF5W2tleUFyZ10gPT09IHN0cmluZ0FyZykgewogICAgICAgICAgICB0aGlzLl9zdHJpbmdBcnJheS5zcGxpY2UocGFyc2VJbnQoa2V5QXJnKSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3aXBlcyB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICB3aXBlKCkgewogICAgICAgIHRoaXMuX3N0cmluZ0FycmF5ID0gW107CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIHN0cmluZyBpcyBpbiBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIGNoZWNrU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5pbmRleE9mKHN0cmluZ0FyZykgIT09IC0xOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3Mgc3RyaW5nUHJlc2VuY2Ugd2l0aCBtaW5pbWF0Y2gKICAgICAgICovCiAgICAgIGNoZWNrTWluaW1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHNtYXJ0TWF0Y2hJbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHM1LlNtYXJ0TWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKTsKICAgICAgICBsZXQgZm91bmRNYXRjaCA9IGZhbHNlOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgaWYgKHNtYXJ0TWF0Y2hJbnN0YW5jZS5tYXRjaChzdHJpbmdJdGVtKSkgewogICAgICAgICAgICBmb3VuZE1hdGNoID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kTWF0Y2g7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBpZiB0aGUgU3RyaW5nbWFwIGlzIGVtcHR5CiAgICAgICAqLwogICAgICBjaGVja0lzRW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5Lmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhIGNsb25lZCBjb3B5IG9mIHRoZSBjdXJyZW50IHN0cmluZyBBcnJheQogICAgICAgKi8KICAgICAgZ2V0U3RyaW5nQXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2YgdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIHJldHVybkFycmF5LnB1c2goc3RyaW5nSXRlbSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgfQogICAgICAvLyB0cmlnZ2VyIHJlZ2lzdGVyaW5nCiAgICAgIC8qKgogICAgICAgKiByZWdpc3RlciBhIG5ldyB0cmlnZ2VyCiAgICAgICAqLwogICAgICByZWdpc3RlclVudGlsVHJ1ZShmdW5jdGlvbkFyZywgY2FsbGJhY2tBcmcpIHsKICAgICAgICBjb25zdCB0cnVlRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5wdXNoKCgpID0+IHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uQXJnKHRoaXMuZ2V0U3RyaW5nQXJyYXkoKSk7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7CiAgICAgICAgICAgIGlmIChjYWxsYmFja0FyZykgewogICAgICAgICAgICAgIGNhbGxiYWNrQXJnKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ1ZURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgICAgcmV0dXJuIHRydWVEZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBub3RpZmllcyB0cmlnZ2VycwogICAgICAgKi8KICAgICAgbm90aWZ5VHJpZ2dlcigpIHsKICAgICAgICBjb25zdCBmaWx0ZXJlZEFycmF5ID0gdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkuZmlsdGVyKChmdW5jdGlvbkFyZykgPT4gewogICAgICAgICAgcmV0dXJuICFmdW5jdGlvbkFyZygpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gZmlsdGVyZWRBcnJheTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4yMC9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvZGlzdC9sZW5pcy5tanMKZnVuY3Rpb24gY2xhbXAyKG1pbjMsIGlucHV0LCBtYXgzKSB7CiAgcmV0dXJuIE1hdGgubWF4KG1pbjMsIE1hdGgubWluKGlucHV0LCBtYXgzKSk7Cn0KZnVuY3Rpb24gbGVycCh4NCwgeTQsIHQ5KSB7CiAgcmV0dXJuICgxIC0gdDkpICogeDQgKyB0OSAqIHk0Owp9CmZ1bmN0aW9uIGRhbXAoeDQsIHk0LCBsYW1iZGEsIGRlbHRhVGltZSkgewogIHJldHVybiBsZXJwKHg0LCB5NCwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkZWx0YVRpbWUpKTsKfQpmdW5jdGlvbiBtb2R1bG8objEyLCBkNSkgewogIHJldHVybiAobjEyICUgZDUgKyBkNSkgJSBkNTsKfQpmdW5jdGlvbiBkZWJvdW5jZTIoY2FsbGJhY2ssIGRlbGF5MikgewogIGxldCB0aW1lcjI7CiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHsKICAgIGxldCBjb250ZXh0MiA9IHRoaXM7CiAgICBjbGVhclRpbWVvdXQodGltZXIyKTsKICAgIHRpbWVyMiA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICB0aW1lcjIgPSB2b2lkIDA7CiAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQyLCBhcmdzKTsKICAgIH0sIGRlbGF5Mik7CiAgfTsKfQp2YXIgdmVyc2lvbiwgQW5pbWF0ZSwgRGltZW5zaW9ucywgRW1pdHRlciwgTElORV9IRUlHSFQsIGxpc3RlbmVyT3B0aW9ucywgVmlydHVhbFNjcm9sbCwgZGVmYXVsdEVhc2luZywgTGVuaXM7CnZhciBpbml0X2xlbmlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjIwL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9kaXN0L2xlbmlzLm1qcyIoKSB7CiAgICB2ZXJzaW9uID0gIjEuMy4xNyI7CiAgICBBbmltYXRlID0gY2xhc3MgewogICAgICBpc1J1bm5pbmcgPSBmYWxzZTsKICAgICAgdmFsdWUgPSAwOwogICAgICBmcm9tID0gMDsKICAgICAgdG8gPSAwOwogICAgICBjdXJyZW50VGltZSA9IDA7CiAgICAgIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGZyb21UbyBtZXRob2QKICAgICAgbGVycDsKICAgICAgZHVyYXRpb247CiAgICAgIGVhc2luZzsKICAgICAgb25VcGRhdGU7CiAgICAgIC8qKgogICAgICAgKiBBZHZhbmNlIHRoZSBhbmltYXRpb24gYnkgdGhlIGdpdmVuIGRlbHRhIHRpbWUKICAgICAgICoKICAgICAgICogQHBhcmFtIGRlbHRhVGltZSAtIFRoZSB0aW1lIGluIHNlY29uZHMgdG8gYWR2YW5jZSB0aGUgYW5pbWF0aW9uCiAgICAgICAqLwogICAgICBhZHZhbmNlKGRlbHRhVGltZSkgewogICAgICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHJldHVybjsKICAgICAgICBsZXQgY29tcGxldGVkID0gZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuZHVyYXRpb24gJiYgdGhpcy5lYXNpbmcpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWUgKz0gZGVsdGFUaW1lOwogICAgICAgICAgY29uc3QgbGluZWFyUHJvZ3Jlc3MgPSBjbGFtcDIoMCwgdGhpcy5jdXJyZW50VGltZSAvIHRoaXMuZHVyYXRpb24sIDEpOwogICAgICAgICAgY29tcGxldGVkID0gbGluZWFyUHJvZ3Jlc3MgPj0gMTsKICAgICAgICAgIGNvbnN0IGVhc2VkUHJvZ3Jlc3MgPSBjb21wbGV0ZWQgPyAxIDogdGhpcy5lYXNpbmcobGluZWFyUHJvZ3Jlc3MpOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZnJvbSArICh0aGlzLnRvIC0gdGhpcy5mcm9tKSAqIGVhc2VkUHJvZ3Jlc3M7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlcnApIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSBkYW1wKHRoaXMudmFsdWUsIHRoaXMudG8sIHRoaXMubGVycCAqIDYwLCBkZWx0YVRpbWUpOwogICAgICAgICAgaWYgKE1hdGgucm91bmQodGhpcy52YWx1ZSkgPT09IHRoaXMudG8pIHsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudG87CiAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnRvOwogICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBsZXRlZCkgewogICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMub25VcGRhdGU/Lih0aGlzLnZhbHVlLCBjb21wbGV0ZWQpOwogICAgICB9CiAgICAgIC8qKiBTdG9wIHRoZSBhbmltYXRpb24gKi8KICAgICAgc3RvcCgpIHsKICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdXAgdGhlIGFuaW1hdGlvbiBmcm9tIGEgc3RhcnRpbmcgdmFsdWUgdG8gYW4gZW5kaW5nIHZhbHVlCiAgICAgICAqIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbGVycGluZywgZHVyYXRpb24sIGVhc2luZywgYW5kIG9uVXBkYXRlIGNhbGxiYWNrCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBmcm9tIC0gVGhlIHN0YXJ0aW5nIHZhbHVlCiAgICAgICAqIEBwYXJhbSB0byAtIFRoZSBlbmRpbmcgdmFsdWUKICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uCiAgICAgICAqLwogICAgICBmcm9tVG8oZnJvbTIsIHRvLCB7IGxlcnA6IGxlcnAyLCBkdXJhdGlvbiwgZWFzaW5nLCBvblN0YXJ0LCBvblVwZGF0ZSB9KSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy52YWx1ZSA9IGZyb20yOwogICAgICAgIHRoaXMudG8gPSB0bzsKICAgICAgICB0aGlzLmxlcnAgPSBsZXJwMjsKICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7CiAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlOwogICAgICAgIG9uU3RhcnQ/LigpOwogICAgICAgIHRoaXMub25VcGRhdGUgPSBvblVwZGF0ZTsKICAgICAgfQogICAgfTsKICAgIERpbWVuc2lvbnMgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHdyYXBwZXIsIGNvbnRlbnQzLCB7IGF1dG9SZXNpemUgPSB0cnVlLCBkZWJvdW5jZTogZGVib3VuY2VWYWx1ZSA9IDI1MCB9ID0ge30pIHsKICAgICAgICB0aGlzLndyYXBwZXIgPSB3cmFwcGVyOwogICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQzOwogICAgICAgIGlmIChhdXRvUmVzaXplKSB7CiAgICAgICAgICB0aGlzLmRlYm91bmNlZFJlc2l6ZSA9IGRlYm91bmNlMih0aGlzLnJlc2l6ZSwgZGVib3VuY2VWYWx1ZSk7CiAgICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpOwogICAgICAgICAgICB0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSk7CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgIH0KICAgICAgd2lkdGggPSAwOwogICAgICBoZWlnaHQgPSAwOwogICAgICBzY3JvbGxIZWlnaHQgPSAwOwogICAgICBzY3JvbGxXaWR0aCA9IDA7CiAgICAgIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFzIHRoZXkgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zCiAgICAgIGRlYm91bmNlZFJlc2l6ZTsKICAgICAgd3JhcHBlclJlc2l6ZU9ic2VydmVyOwogICAgICBjb250ZW50UmVzaXplT2JzZXJ2ZXI7CiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICAgIGlmICh0aGlzLndyYXBwZXIgPT09IHdpbmRvdyAmJiB0aGlzLmRlYm91bmNlZFJlc2l6ZSkgewogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuZGVib3VuY2VkUmVzaXplLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc2l6ZSA9ICgpID0+IHsKICAgICAgICB0aGlzLm9uV3JhcHBlclJlc2l6ZSgpOwogICAgICAgIHRoaXMub25Db250ZW50UmVzaXplKCk7CiAgICAgIH07CiAgICAgIG9uV3JhcHBlclJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud3JhcHBlci5jbGllbnRXaWR0aDsKICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uQ29udGVudFJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuY29udGVudC5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy5jb250ZW50LnNjcm9sbFdpZHRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMud3JhcHBlci5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy53cmFwcGVyLnNjcm9sbFdpZHRoOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZ2V0IGxpbWl0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB4OiB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy53aWR0aCwKICAgICAgICAgIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5oZWlnaHQKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgRW1pdHRlciA9IGNsYXNzIHsKICAgICAgZXZlbnRzID0ge307CiAgICAgIC8qKgogICAgICAgKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIGRhdGEKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGFyZ3MgRGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBoYW5kbGVycwogICAgICAgKi8KICAgICAgZW1pdChldmVudCwgLi4uYXJncykgewogICAgICAgIGxldCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tldmVudF0gfHwgW107CiAgICAgICAgZm9yIChsZXQgaTExID0gMCwgbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDsgaTExIDwgbGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2FsbGJhY2tzW2kxMV0/LiguLi5hcmdzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIGNhbGxiYWNrIHRvIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICogQHJldHVybnMgVW5zdWJzY3JpYmUgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9uKGV2ZW50LCBjYikgewogICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50XT8ucHVzaChjYikgfHwgKHRoaXMuZXZlbnRzW2V2ZW50XSA9IFtjYl0pOwogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYiAhPT0gaTExKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9mZihldmVudCwgY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYWxsYmFjayAhPT0gaTExKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFuIHVwCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMuZXZlbnRzID0ge307CiAgICAgIH0KICAgIH07CiAgICBMSU5FX0hFSUdIVCA9IDEwMCAvIDY7CiAgICBsaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlIH07CiAgICBWaXJ0dWFsU2Nyb2xsID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihlbGVtZW50NCwgb3B0aW9ucyA9IHsgd2hlZWxNdWx0aXBsaWVyOiAxLCB0b3VjaE11bHRpcGxpZXI6IDEgfSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMub25XaW5kb3dSZXNpemUsIGZhbHNlKTsKICAgICAgICB0aGlzLm9uV2luZG93UmVzaXplKCk7CiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0aGlzLm9uVG91Y2hFbmQsIGxpc3RlbmVyT3B0aW9ucyk7CiAgICAgIH0KICAgICAgdG91Y2hTdGFydCA9IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfTsKICAgICAgbGFzdERlbHRhID0gewogICAgICAgIHg6IDAsCiAgICAgICAgeTogMAogICAgICB9OwogICAgICB3aW5kb3cgPSB7CiAgICAgICAgd2lkdGg6IDAsCiAgICAgICAgaGVpZ2h0OiAwCiAgICAgIH07CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvKioKICAgICAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYW5kIGNhbGxiYWNrCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lCiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbgogICAgICAgKi8KICAgICAgb24oZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vbihldmVudCwgY2FsbGJhY2spOwogICAgICB9CiAgICAgIC8qKiBSZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaGVuZCIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hFbmQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFdmVudCBoYW5kbGVyIGZvciAndG91Y2hzdGFydCcgZXZlbnQKICAgICAgICoKICAgICAgICogQHBhcmFtIGV2ZW50IFRvdWNoIGV2ZW50CiAgICAgICAqLwogICAgICBvblRvdWNoU3RhcnQgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50LnRhcmdldFRvdWNoZXMgPyBldmVudC50YXJnZXRUb3VjaGVzWzBdIDogZXZlbnQ7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnggPSBjbGllbnRYOwogICAgICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WTsKICAgICAgICB0aGlzLmxhc3REZWx0YSA9IHsKICAgICAgICAgIHg6IDAsCiAgICAgICAgICB5OiAwCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYOiAwLAogICAgICAgICAgZGVsdGFZOiAwLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqIEV2ZW50IGhhbmRsZXIgZm9yICd0b3VjaG1vdmUnIGV2ZW50ICovCiAgICAgIG9uVG91Y2hNb3ZlID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudC50YXJnZXRUb3VjaGVzID8gZXZlbnQudGFyZ2V0VG91Y2hlc1swXSA6IGV2ZW50OwogICAgICAgIGNvbnN0IGRlbHRhWCA9IC0oY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydC54KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7CiAgICAgICAgY29uc3QgZGVsdGFZID0gLShjbGllbnRZIC0gdGhpcy50b3VjaFN0YXJ0LnkpICogdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcjsKICAgICAgICB0aGlzLnRvdWNoU3RhcnQueCA9IGNsaWVudFg7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnkgPSBjbGllbnRZOwogICAgICAgIHRoaXMubGFzdERlbHRhID0gewogICAgICAgICAgeDogZGVsdGFYLAogICAgICAgICAgeTogZGVsdGFZCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYLAogICAgICAgICAgZGVsdGFZLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgb25Ub3VjaEVuZCA9IChldmVudCkgPT4gewogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7CiAgICAgICAgICBkZWx0YVg6IHRoaXMubGFzdERlbHRhLngsCiAgICAgICAgICBkZWx0YVk6IHRoaXMubGFzdERlbHRhLnksCiAgICAgICAgICBldmVudAogICAgICAgIH0pOwogICAgICB9OwogICAgICAvKiogRXZlbnQgaGFuZGxlciBmb3IgJ3doZWVsJyBldmVudCAqLwogICAgICBvbldoZWVsID0gKGV2ZW50KSA9PiB7CiAgICAgICAgbGV0IHsgZGVsdGFYLCBkZWx0YVksIGRlbHRhTW9kZSB9ID0gZXZlbnQ7CiAgICAgICAgY29uc3QgbXVsdGlwbGllclggPSBkZWx0YU1vZGUgPT09IDEgPyBMSU5FX0hFSUdIVCA6IGRlbHRhTW9kZSA9PT0gMiA/IHRoaXMud2luZG93LndpZHRoIDogMTsKICAgICAgICBjb25zdCBtdWx0aXBsaWVyWSA9IGRlbHRhTW9kZSA9PT0gMSA/IExJTkVfSEVJR0hUIDogZGVsdGFNb2RlID09PSAyID8gdGhpcy53aW5kb3cuaGVpZ2h0IDogMTsKICAgICAgICBkZWx0YVggKj0gbXVsdGlwbGllclg7CiAgICAgICAgZGVsdGFZICo9IG11bHRpcGxpZXJZOwogICAgICAgIGRlbHRhWCAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIGRlbHRhWSAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7IGRlbHRhWCwgZGVsdGFZLCBldmVudCB9KTsKICAgICAgfTsKICAgICAgb25XaW5kb3dSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy53aW5kb3cgPSB7CiAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodAogICAgICAgIH07CiAgICAgIH07CiAgICB9OwogICAgZGVmYXVsdEVhc2luZyA9ICh0OSkgPT4gTWF0aC5taW4oMSwgMS4wMDEgLSBNYXRoLnBvdygyLCAtMTAgKiB0OSkpOwogICAgTGVuaXMgPSBjbGFzcyB7CiAgICAgIF9pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAvLyB0cnVlIHdoZW4gc2Nyb2xsIGlzIGFuaW1hdGluZwogICAgICBfaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgIC8vIHRydWUgaWYgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2Nyb2xsIC0gZW5hYmxlL2Rpc2FibGUgcHJvZ3JhbW1hdGljYWxseQogICAgICBfaXNMb2NrZWQgPSBmYWxzZTsKICAgICAgLy8gc2FtZSBhcyBpc1N0b3BwZWQgYnV0IGVuYWJsZWQvZGlzYWJsZWQgd2hlbiBzY3JvbGwgcmVhY2hlcyB0YXJnZXQKICAgICAgX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gbnVsbDsKICAgICAgX3JhZklkID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGlzIHRvdWNoaW5nIHRoZSBzY3JlZW4KICAgICAgICovCiAgICAgIGlzVG91Y2hpbmc7CiAgICAgIC8qKgogICAgICAgKiBUaGUgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGVuaXMgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQKICAgICAgICovCiAgICAgIHRpbWUgPSAwOwogICAgICAvKioKICAgICAgICogVXNlciBkYXRhIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdGhyb3VnaCB0aGUgc2Nyb2xsIGV2ZW50CiAgICAgICAqCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqIGxlbmlzLnNjcm9sbFRvKDEwMCwgewogICAgICAgKiAgIHVzZXJEYXRhOiB7CiAgICAgICAqICAgICBmb286ICdiYXInCiAgICAgICAqICAgfQogICAgICAgKiB9KQogICAgICAgKi8KICAgICAgdXNlckRhdGEgPSB7fTsKICAgICAgLyoqCiAgICAgICAqIFRoZSBsYXN0IHZlbG9jaXR5IG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGxhc3RWZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgY3VycmVudCB2ZWxvY2l0eSBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICB2ZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGRpcmVjdGlvbiA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGxlbmlzIGluc3RhbmNlCiAgICAgICAqLwogICAgICBvcHRpb25zOwogICAgICAvKioKICAgICAgICogVGhlIHRhcmdldCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIHRhcmdldFNjcm9sbDsKICAgICAgLyoqCiAgICAgICAqIFRoZSBhbmltYXRlZCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGFuaW1hdGVkU2Nyb2xsOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGhlcmUgYXMgdGhleSBkb24ndCBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnMKICAgICAgYW5pbWF0ZSA9IG5ldyBBbmltYXRlKCk7CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcyB0aGV5IG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW9ucwogICAgICBkaW1lbnNpb25zOwogICAgICAvLyBUaGlzIGlzIG5vdCBwcml2YXRlIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBTbmFwIGNsYXNzCiAgICAgIHZpcnR1YWxTY3JvbGw7CiAgICAgIGNvbnN0cnVjdG9yKHsKICAgICAgICB3cmFwcGVyID0gd2luZG93LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgIGV2ZW50c1RhcmdldCA9IHdyYXBwZXIsCiAgICAgICAgc21vb3RoV2hlZWwgPSB0cnVlLAogICAgICAgIHN5bmNUb3VjaCA9IGZhbHNlLAogICAgICAgIHN5bmNUb3VjaExlcnAgPSAwLjA3NSwKICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCA9IDEuNywKICAgICAgICBkdXJhdGlvbiwKICAgICAgICAvLyBpbiBzZWNvbmRzCiAgICAgICAgZWFzaW5nLAogICAgICAgIGxlcnA6IGxlcnAyID0gMC4xLAogICAgICAgIGluZmluaXRlID0gZmFsc2UsCiAgICAgICAgb3JpZW50YXRpb24gPSAidmVydGljYWwiLAogICAgICAgIC8vIHZlcnRpY2FsLCBob3Jpem9udGFsCiAgICAgICAgZ2VzdHVyZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiA/ICJib3RoIiA6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgLy8gdmVydGljYWwsIGhvcml6b250YWwsIGJvdGgKICAgICAgICB0b3VjaE11bHRpcGxpZXIgPSAxLAogICAgICAgIHdoZWVsTXVsdGlwbGllciA9IDEsCiAgICAgICAgYXV0b1Jlc2l6ZSA9IHRydWUsCiAgICAgICAgcHJldmVudCwKICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgIG92ZXJzY3JvbGwgPSB0cnVlLAogICAgICAgIGF1dG9SYWYgPSBmYWxzZSwKICAgICAgICBhbmNob3JzID0gZmFsc2UsCiAgICAgICAgYXV0b1RvZ2dsZSA9IGZhbHNlLAogICAgICAgIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD10cmFuc2l0aW9uLWJlaGF2aW9yCiAgICAgICAgYWxsb3dOZXN0ZWRTY3JvbGwgPSBmYWxzZSwKICAgICAgICAvLyBAdHMtaWdub3JlOiB0aGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlCiAgICAgICAgX19leHBlcmltZW50YWxfX25haXZlRGltZW5zaW9ucyA9IGZhbHNlLAogICAgICAgIG5haXZlRGltZW5zaW9ucyA9IF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMsCiAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlID0gZmFsc2UKICAgICAgfSA9IHt9KSB7CiAgICAgICAgd2luZG93LmxlbmlzVmVyc2lvbiA9IHZlcnNpb247CiAgICAgICAgaWYgKCF3cmFwcGVyIHx8IHdyYXBwZXIgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewogICAgICAgICAgd3JhcHBlciA9IHdpbmRvdzsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVhc2luZyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAibnVtYmVyIikgewogICAgICAgICAgZHVyYXRpb24gPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICB3cmFwcGVyLAogICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICBldmVudHNUYXJnZXQsCiAgICAgICAgICBzbW9vdGhXaGVlbCwKICAgICAgICAgIHN5bmNUb3VjaCwKICAgICAgICAgIHN5bmNUb3VjaExlcnAsCiAgICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCwKICAgICAgICAgIGR1cmF0aW9uLAogICAgICAgICAgZWFzaW5nLAogICAgICAgICAgbGVycDogbGVycDIsCiAgICAgICAgICBpbmZpbml0ZSwKICAgICAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiwKICAgICAgICAgIG9yaWVudGF0aW9uLAogICAgICAgICAgdG91Y2hNdWx0aXBsaWVyLAogICAgICAgICAgd2hlZWxNdWx0aXBsaWVyLAogICAgICAgICAgYXV0b1Jlc2l6ZSwKICAgICAgICAgIHByZXZlbnQsCiAgICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgICAgb3ZlcnNjcm9sbCwKICAgICAgICAgIGF1dG9SYWYsCiAgICAgICAgICBhbmNob3JzLAogICAgICAgICAgYXV0b1RvZ2dsZSwKICAgICAgICAgIGFsbG93TmVzdGVkU2Nyb2xsLAogICAgICAgICAgbmFpdmVEaW1lbnNpb25zLAogICAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlCiAgICAgICAgfTsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyh3cmFwcGVyLCBjb250ZW50MywgeyBhdXRvUmVzaXplIH0pOwogICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vbk5hdGl2ZVNjcm9sbCwgZmFsc2UpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsIHRoaXMub25TY3JvbGxFbmQsIHsKICAgICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMgfHwgdGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgImNsaWNrIiwKICAgICAgICAgICAgdGhpcy5vbkNsaWNrLAogICAgICAgICAgICBmYWxzZQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJwb2ludGVyZG93biIsCiAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd24sCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gbmV3IFZpcnR1YWxTY3JvbGwoZXZlbnRzVGFyZ2V0LCB7CiAgICAgICAgICB0b3VjaE11bHRpcGxpZXIsCiAgICAgICAgICB3aGVlbE11bHRpcGxpZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwub24oInNjcm9sbCIsIHRoaXMub25WaXJ0dWFsU2Nyb2xsKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpOwogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgdGhpcy5vblRyYW5zaXRpb25FbmQsIHsKICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1JhZikgewogICAgICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgbGVuaXMgaW5zdGFuY2UsIHJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cCB0aGUgY2xhc3MgbmFtZQogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAic2Nyb2xsIiwKICAgICAgICAgIHRoaXMub25OYXRpdmVTY3JvbGwsCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsZW5kIiwgdGhpcy5vblNjcm9sbEVuZCwgewogICAgICAgICAgY2FwdHVyZTogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAicG9pbnRlcmRvd24iLAogICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycyB8fCB0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgICAiY2xpY2siLAogICAgICAgICAgICB0aGlzLm9uQ2xpY2ssCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwuZGVzdHJveSgpOwogICAgICAgIHRoaXMuZGltZW5zaW9ucy5kZXN0cm95KCk7CiAgICAgICAgdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCk7CiAgICAgICAgaWYgKHRoaXMuX3JhZklkKSB7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWZJZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9uKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vZmYoZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvblNjcm9sbEVuZCA9IChlMTEpID0+IHsKICAgICAgICBpZiAoIShlMTEgaW5zdGFuY2VvZiBDdXN0b21FdmVudCkpIHsKICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIiB8fCB0aGlzLmlzU2Nyb2xsaW5nID09PSBmYWxzZSkgewogICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBkaXNwYXRjaFNjcm9sbGVuZEV2ZW50ID0gKCkgPT4gewogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbGVuZCIsIHsKICAgICAgICAgICAgYnViYmxlczogdGhpcy5vcHRpb25zLndyYXBwZXIgPT09IHdpbmRvdywKICAgICAgICAgICAgLy8gY2FuY2VsYWJsZTogZmFsc2UsCiAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgIGxlbmlzU2Nyb2xsRW5kOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgfTsKICAgICAgZ2V0IG92ZXJmbG93KCkgewogICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5pc0hvcml6b250YWwgPyAib3ZlcmZsb3cteCIgOiAib3ZlcmZsb3cteSI7CiAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudClbcHJvcGVydHldOwogICAgICB9CiAgICAgIGNoZWNrT3ZlcmZsb3coKSB7CiAgICAgICAgaWYgKFsiaGlkZGVuIiwgImNsaXAiXS5pbmNsdWRlcyh0aGlzLm92ZXJmbG93KSkgewogICAgICAgICAgdGhpcy5pbnRlcm5hbFN0b3AoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXJ0KCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9uVHJhbnNpdGlvbkVuZCA9IChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXMoIm92ZXJmbG93IikpIHsKICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgc2V0U2Nyb2xsKHNjcm9sbCkgewogICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oeyBsZWZ0OiBzY3JvbGwsIGJlaGF2aW9yOiAiaW5zdGFudCIgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnNjcm9sbFRvKHsgdG9wOiBzY3JvbGwsIGJlaGF2aW9yOiAiaW5zdGFudCIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9uQ2xpY2sgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBwYXRoMiA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICAgIGNvbnN0IGFuY2hvckVsZW1lbnRzID0gcGF0aDIuZmlsdGVyKAogICAgICAgICAgKG5vZGUyKSA9PiBub2RlMiBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ICYmIG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpCiAgICAgICAgKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMpIHsKICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGFuY2hvckVsZW1lbnRzLmZpbmQoCiAgICAgICAgICAgIChub2RlMikgPT4gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik/LmluY2x1ZGVzKCIjIikKICAgICAgICAgICk7CiAgICAgICAgICBpZiAoYW5jaG9yKSB7CiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBhbmNob3IuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgICAgIGlmIChocmVmKSB7CiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiB0aGlzLm9wdGlvbnMuYW5jaG9ycyA9PT0gIm9iamVjdCIgJiYgdGhpcy5vcHRpb25zLmFuY2hvcnMgPyB0aGlzLm9wdGlvbnMuYW5jaG9ycyA6IHZvaWQgMDsKICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgIyR7aHJlZi5zcGxpdCgiIyIpWzFdfWA7CiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyh0YXJnZXQsIG9wdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7CiAgICAgICAgICBjb25zdCBpbnRlcm5hbExpbmsgPSBhbmNob3JFbGVtZW50cy5maW5kKAogICAgICAgICAgICAobm9kZTIpID0+IG5vZGUyLmhvc3QgPT09IHdpbmRvdy5sb2NhdGlvbi5ob3N0CiAgICAgICAgICApOwogICAgICAgICAgaWYgKGludGVybmFsTGluaykgewogICAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBvblBvaW50ZXJEb3duID0gKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMSkgewogICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgb25WaXJ0dWFsU2Nyb2xsID0gKGRhdGExMSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwgPT09ICJmdW5jdGlvbiIgJiYgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwoZGF0YTExKSA9PT0gZmFsc2UpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSA9IGRhdGExMTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgidmlydHVhbC1zY3JvbGwiLCB7IGRlbHRhWCwgZGVsdGFZLCBldmVudCB9KTsKICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkgcmV0dXJuOwogICAgICAgIGlmIChldmVudC5sZW5pc1N0b3BQcm9wYWdhdGlvbikgcmV0dXJuOwogICAgICAgIGNvbnN0IGlzVG91Y2ggPSBldmVudC50eXBlLmluY2x1ZGVzKCJ0b3VjaCIpOwogICAgICAgIGNvbnN0IGlzV2hlZWwgPSBldmVudC50eXBlLmluY2x1ZGVzKCJ3aGVlbCIpOwogICAgICAgIHRoaXMuaXNUb3VjaGluZyA9IGV2ZW50LnR5cGUgPT09ICJ0b3VjaHN0YXJ0IiB8fCBldmVudC50eXBlID09PSAidG91Y2htb3ZlIjsKICAgICAgICBjb25zdCBpc0NsaWNrT3JUYXAgPSBkZWx0YVggPT09IDAgJiYgZGVsdGFZID09PSAwOwogICAgICAgIGNvbnN0IGlzVGFwVG9TdG9wID0gdGhpcy5vcHRpb25zLnN5bmNUb3VjaCAmJiBpc1RvdWNoICYmIGV2ZW50LnR5cGUgPT09ICJ0b3VjaHN0YXJ0IiAmJiBpc0NsaWNrT3JUYXAgJiYgIXRoaXMuaXNTdG9wcGVkICYmICF0aGlzLmlzTG9ja2VkOwogICAgICAgIGlmIChpc1RhcFRvU3RvcCkgewogICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBpc1Vua25vd25HZXN0dXJlID0gdGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiAmJiBkZWx0YVkgPT09IDAgfHwgdGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiICYmIGRlbHRhWCA9PT0gMDsKICAgICAgICBpZiAoaXNDbGlja09yVGFwIHx8IGlzVW5rbm93bkdlc3R1cmUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbGV0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICAgIGNvbXBvc2VkUGF0aCA9IGNvbXBvc2VkUGF0aC5zbGljZSgwLCBjb21wb3NlZFBhdGguaW5kZXhPZih0aGlzLnJvb3RFbGVtZW50KSk7CiAgICAgICAgY29uc3QgcHJldmVudCA9IHRoaXMub3B0aW9ucy5wcmV2ZW50OwogICAgICAgIGlmICghIWNvbXBvc2VkUGF0aC5maW5kKAogICAgICAgICAgKG5vZGUyKSA9PiBub2RlMiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmICh0eXBlb2YgcHJldmVudCA9PT0gImZ1bmN0aW9uIiAmJiBwcmV2ZW50Py4obm9kZTIpIHx8IG5vZGUyLmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQiKSB8fCBpc1RvdWNoICYmIG5vZGUyLmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQtdG91Y2giKSB8fCBpc1doZWVsICYmIG5vZGUyLmhhc0F0dHJpYnV0ZT8uKCJkYXRhLWxlbmlzLXByZXZlbnQtd2hlZWwiKSB8fCB0aGlzLm9wdGlvbnMuYWxsb3dOZXN0ZWRTY3JvbGwgJiYgdGhpcy5jaGVja05lc3RlZFNjcm9sbChub2RlMiwgeyBkZWx0YVgsIGRlbHRhWSB9KSkKICAgICAgICApKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLmlzTG9ja2VkKSB7CiAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBpc1Ntb290aCA9IHRoaXMub3B0aW9ucy5zeW5jVG91Y2ggJiYgaXNUb3VjaCB8fCB0aGlzLm9wdGlvbnMuc21vb3RoV2hlZWwgJiYgaXNXaGVlbDsKICAgICAgICBpZiAoIWlzU21vb3RoKSB7CiAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gIm5hdGl2ZSI7CiAgICAgICAgICB0aGlzLmFuaW1hdGUuc3RvcCgpOwogICAgICAgICAgZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24gPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgZGVsdGEgPSBkZWx0YVk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJib3RoIikgewogICAgICAgICAgZGVsdGEgPSBNYXRoLmFicyhkZWx0YVkpID4gTWF0aC5hYnMoZGVsdGFYKSA/IGRlbHRhWSA6IGRlbHRhWDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgewogICAgICAgICAgZGVsdGEgPSBkZWx0YVg7CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5vcHRpb25zLm92ZXJzY3JvbGwgfHwgdGhpcy5vcHRpb25zLmluZmluaXRlIHx8IHRoaXMub3B0aW9ucy53cmFwcGVyICE9PSB3aW5kb3cgJiYgdGhpcy5saW1pdCA+IDAgJiYgKHRoaXMuYW5pbWF0ZWRTY3JvbGwgPiAwICYmIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPCB0aGlzLmxpbWl0IHx8IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPT09IDAgJiYgZGVsdGFZID4gMCB8fCB0aGlzLmFuaW1hdGVkU2Nyb2xsID09PSB0aGlzLmxpbWl0ICYmIGRlbHRhWSA8IDApKSB7CiAgICAgICAgICBldmVudC5sZW5pc1N0b3BQcm9wYWdhdGlvbiA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpc1N5bmNUb3VjaCA9IGlzVG91Y2ggJiYgdGhpcy5vcHRpb25zLnN5bmNUb3VjaDsKICAgICAgICBjb25zdCBpc1RvdWNoRW5kID0gaXNUb3VjaCAmJiBldmVudC50eXBlID09PSAidG91Y2hlbmQiOwogICAgICAgIGNvbnN0IGhhc1RvdWNoSW5lcnRpYSA9IGlzVG91Y2hFbmQ7CiAgICAgICAgaWYgKGhhc1RvdWNoSW5lcnRpYSkgewogICAgICAgICAgZGVsdGEgPSBNYXRoLnNpZ24odGhpcy52ZWxvY2l0eSkgKiBNYXRoLnBvdyhNYXRoLmFicyh0aGlzLnZlbG9jaXR5KSwgdGhpcy5vcHRpb25zLnRvdWNoSW5lcnRpYUV4cG9uZW50KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zY3JvbGxUbyh0aGlzLnRhcmdldFNjcm9sbCArIGRlbHRhLCB7CiAgICAgICAgICBwcm9ncmFtbWF0aWM6IGZhbHNlLAogICAgICAgICAgLi4uaXNTeW5jVG91Y2ggPyB7CiAgICAgICAgICAgIGxlcnA6IGhhc1RvdWNoSW5lcnRpYSA/IHRoaXMub3B0aW9ucy5zeW5jVG91Y2hMZXJwIDogMQogICAgICAgICAgfSA6IHsKICAgICAgICAgICAgbGVycDogdGhpcy5vcHRpb25zLmxlcnAsCiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLm9wdGlvbnMuZHVyYXRpb24sCiAgICAgICAgICAgIGVhc2luZzogdGhpcy5vcHRpb25zLmVhc2luZwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICAvKioKICAgICAgICogRm9yY2UgbGVuaXMgdG8gcmVjYWxjdWxhdGUgdGhlIGRpbWVuc2lvbnMKICAgICAgICovCiAgICAgIHJlc2l6ZSgpIHsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMucmVzaXplKCk7CiAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgIH0KICAgICAgZW1pdCgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgdGhpcyk7CiAgICAgIH0KICAgICAgb25OYXRpdmVTY3JvbGwgPSAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ICE9PSBudWxsKSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQpOwogICAgICAgICAgdGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCkgewogICAgICAgICAgdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGluZyA9PT0gZmFsc2UgfHwgdGhpcy5pc1Njcm9sbGluZyA9PT0gIm5hdGl2ZSIpIHsKICAgICAgICAgIGNvbnN0IGxhc3RTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHk7CiAgICAgICAgICB0aGlzLnZlbG9jaXR5ID0gdGhpcy5hbmltYXRlZFNjcm9sbCAtIGxhc3RTY3JvbGw7CiAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IE1hdGguc2lnbigKICAgICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCAtIGxhc3RTY3JvbGwKICAgICAgICAgICk7CiAgICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAibmF0aXZlIjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkgIT09IDApIHsKICAgICAgICAgICAgdGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHk7CiAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IDA7CiAgICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgICB9LCA0MDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgcmVzZXQoKSB7CiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbDsKICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHkgPSAwOwogICAgICAgIHRoaXMuYW5pbWF0ZS5zdG9wKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFN0YXJ0IGxlbmlzIHNjcm9sbCBhZnRlciBpdCBoYXMgYmVlbiBzdG9wcGVkCiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJvdmVyZmxvdyIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmludGVybmFsU3RhcnQoKTsKICAgICAgfQogICAgICBpbnRlcm5hbFN0YXJ0KCkgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU3RvcCBsZW5pcyBzY3JvbGwKICAgICAgICovCiAgICAgIHN0b3AoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJvdmVyZmxvdyIsICJjbGlwIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJuYWxTdG9wKCk7CiAgICAgIH0KICAgICAgaW50ZXJuYWxTdG9wKCkgewogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3IgbGVuaXMKICAgICAgICoKICAgICAgICogQHBhcmFtIHRpbWUgVGhlIHRpbWUgaW4gbXMgZnJvbSBhbiBleHRlcm5hbCBjbG9jayBsaWtlIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIG9yIFRlbXB1cwogICAgICAgKi8KICAgICAgcmFmID0gKHRpbWUpID0+IHsKICAgICAgICBjb25zdCBkZWx0YVRpbWUgPSB0aW1lIC0gKHRoaXMudGltZSB8fCB0aW1lKTsKICAgICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgICAgIHRoaXMuYW5pbWF0ZS5hZHZhbmNlKGRlbHRhVGltZSAqIDFlLTMpOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1JhZikgewogICAgICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIFNjcm9sbCB0byBhIHRhcmdldCB2YWx1ZQogICAgICAgKgogICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdmFsdWUgdG8gc2Nyb2xsIHRvCiAgICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgc2Nyb2xsCiAgICAgICAqCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqIGxlbmlzLnNjcm9sbFRvKDEwMCwgewogICAgICAgKiAgIG9mZnNldDogMTAwLAogICAgICAgKiAgIGR1cmF0aW9uOiAxLAogICAgICAgKiAgIGVhc2luZzogKHQpID0+IDEgLSBNYXRoLmNvcygodCAqIE1hdGguUEkpIC8gMiksCiAgICAgICAqICAgbGVycDogMC4xLAogICAgICAgKiAgIG9uU3RhcnQ6ICgpID0+IHsKICAgICAgICogICAgIGNvbnNvbGUubG9nKCdvblN0YXJ0JykKICAgICAgICogICB9LAogICAgICAgKiAgIG9uQ29tcGxldGU6ICgpID0+IHsKICAgICAgICogICAgIGNvbnNvbGUubG9nKCdvbkNvbXBsZXRlJykKICAgICAgICogICB9LAogICAgICAgKiB9KQogICAgICAgKi8KICAgICAgc2Nyb2xsVG8odGFyZ2V0LCB7CiAgICAgICAgb2Zmc2V0ID0gMCwKICAgICAgICBpbW1lZGlhdGUgPSBmYWxzZSwKICAgICAgICBsb2NrID0gZmFsc2UsCiAgICAgICAgcHJvZ3JhbW1hdGljID0gdHJ1ZSwKICAgICAgICAvLyBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBjbGFzcwogICAgICAgIGxlcnA6IGxlcnAyID0gcHJvZ3JhbW1hdGljID8gdGhpcy5vcHRpb25zLmxlcnAgOiB2b2lkIDAsCiAgICAgICAgZHVyYXRpb24gPSBwcm9ncmFtbWF0aWMgPyB0aGlzLm9wdGlvbnMuZHVyYXRpb24gOiB2b2lkIDAsCiAgICAgICAgZWFzaW5nID0gcHJvZ3JhbW1hdGljID8gdGhpcy5vcHRpb25zLmVhc2luZyA6IHZvaWQgMCwKICAgICAgICBvblN0YXJ0LAogICAgICAgIG9uQ29tcGxldGUsCiAgICAgICAgZm9yY2UgPSBmYWxzZSwKICAgICAgICAvLyBzY3JvbGwgZXZlbiBpZiBzdG9wcGVkCiAgICAgICAgdXNlckRhdGEKICAgICAgfSA9IHt9KSB7CiAgICAgICAgaWYgKCh0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLmlzTG9ja2VkKSAmJiAhZm9yY2UpIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gInN0cmluZyIgJiYgWyJ0b3AiLCAibGVmdCIsICJzdGFydCIsICIjIl0uaW5jbHVkZXModGFyZ2V0KSkgewogICAgICAgICAgdGFyZ2V0ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJzdHJpbmciICYmIFsiYm90dG9tIiwgInJpZ2h0IiwgImVuZCJdLmluY2x1ZGVzKHRhcmdldCkpIHsKICAgICAgICAgIHRhcmdldCA9IHRoaXMubGltaXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBub2RlMjsKICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICBub2RlMiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsKICAgICAgICAgICAgaWYgKCFub2RlMikgewogICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09ICIjdG9wIikgewogICAgICAgICAgICAgICAgdGFyZ2V0ID0gMDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJMZW5pczogVGFyZ2V0IG5vdCBmb3VuZCIsIHRhcmdldCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldD8ubm9kZVR5cGUpIHsKICAgICAgICAgICAgbm9kZTIgPSB0YXJnZXQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobm9kZTIpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy53cmFwcGVyICE9PSB3aW5kb3cpIHsKICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgb2Zmc2V0IC09IHRoaXMuaXNIb3Jpem9udGFsID8gd3JhcHBlclJlY3QubGVmdCA6IHdyYXBwZXJSZWN0LnRvcDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZWN0ID0gbm9kZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHRhcmdldCA9ICh0aGlzLmlzSG9yaXpvbnRhbCA/IHJlY3QubGVmdCA6IHJlY3QudG9wKSArIHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAibnVtYmVyIikgcmV0dXJuOwogICAgICAgIHRhcmdldCArPSBvZmZzZXQ7CiAgICAgICAgdGFyZ2V0ID0gTWF0aC5yb3VuZCh0YXJnZXQpOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5maW5pdGUpIHsKICAgICAgICAgIGlmIChwcm9ncmFtbWF0aWMpIHsKICAgICAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy5zY3JvbGw7CiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGFyZ2V0IC0gdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gdGhpcy5saW1pdCAvIDIpIHsKICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQgLSB0aGlzLmxpbWl0OwogICAgICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlIDwgLXRoaXMubGltaXQgLyAyKSB7CiAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0ICsgdGhpcy5saW1pdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0YXJnZXQgPSBjbGFtcDIoMCwgdGFyZ2V0LCB0aGlzLmxpbWl0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy50YXJnZXRTY3JvbGwpIHsKICAgICAgICAgIG9uU3RhcnQ/Lih0aGlzKTsKICAgICAgICAgIG9uQ29tcGxldGU/Lih0aGlzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy51c2VyRGF0YSA9IHVzZXJEYXRhID8/IHt9OwogICAgICAgIGlmIChpbW1lZGlhdGUpIHsKICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRhcmdldDsKICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKHRoaXMuc2Nyb2xsKTsKICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgIHRoaXMucHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpOwogICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcyk7CiAgICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIXByb2dyYW1tYXRpYykgewogICAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0YXJnZXQ7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICJudW1iZXIiICYmIHR5cGVvZiBlYXNpbmcgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGVhc2luZyA9IGRlZmF1bHRFYXNpbmc7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWFzaW5nID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBkdXJhdGlvbiAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIGR1cmF0aW9uID0gMTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hbmltYXRlLmZyb21Ubyh0aGlzLmFuaW1hdGVkU2Nyb2xsLCB0YXJnZXQsIHsKICAgICAgICAgIGR1cmF0aW9uLAogICAgICAgICAgZWFzaW5nLAogICAgICAgICAgbGVycDogbGVycDIsCiAgICAgICAgICBvblN0YXJ0OiAoKSA9PiB7CiAgICAgICAgICAgIGlmIChsb2NrKSB0aGlzLmlzTG9ja2VkID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJzbW9vdGgiOwogICAgICAgICAgICBvblN0YXJ0Py4odGhpcyk7CiAgICAgICAgICB9LAogICAgICAgICAgb25VcGRhdGU6ICh2YWx1ZTIsIGNvbXBsZXRlZCkgPT4gewogICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gInNtb290aCI7CiAgICAgICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eTsKICAgICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IHZhbHVlMiAtIHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gTWF0aC5zaWduKHRoaXMudmVsb2NpdHkpOwogICAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdmFsdWUyOwogICAgICAgICAgICB0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbCk7CiAgICAgICAgICAgIGlmIChwcm9ncmFtbWF0aWMpIHsKICAgICAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHZhbHVlMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWNvbXBsZXRlZCkgdGhpcy5lbWl0KCk7CiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQpIHsKICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICAgICAgb25Db21wbGV0ZT8uKHRoaXMpOwogICAgICAgICAgICAgIHRoaXMudXNlckRhdGEgPSB7fTsKICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBwcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCkgewogICAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSB0cnVlOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2U7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY2hlY2tOZXN0ZWRTY3JvbGwobm9kZTIsIHsgZGVsdGFYLCBkZWx0YVkgfSkgewogICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgIGNvbnN0IGNhY2hlID0gbm9kZTIuX2xlbmlzID8/PSB7fTsKICAgICAgICBsZXQgaGFzT3ZlcmZsb3dYLCBoYXNPdmVyZmxvd1ksIGlzU2Nyb2xsYWJsZVgsIGlzU2Nyb2xsYWJsZVksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQ7CiAgICAgICAgY29uc3QgZ2VzdHVyZU9yaWVudGF0aW9uID0gdGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbjsKICAgICAgICBpZiAodGltZSAtIChjYWNoZS50aW1lID8/IDApID4gMmUzKSB7CiAgICAgICAgICBjYWNoZS50aW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlMik7CiAgICAgICAgICBjYWNoZS5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKICAgICAgICAgIGNvbnN0IG92ZXJmbG93WFN0cmluZyA9IGNvbXB1dGVkU3R5bGUub3ZlcmZsb3dYOwogICAgICAgICAgY29uc3Qgb3ZlcmZsb3dZU3RyaW5nID0gY29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7CiAgICAgICAgICBoYXNPdmVyZmxvd1ggPSBbImF1dG8iLCAib3ZlcmxheSIsICJzY3JvbGwiXS5pbmNsdWRlcyhvdmVyZmxvd1hTdHJpbmcpOwogICAgICAgICAgaGFzT3ZlcmZsb3dZID0gWyJhdXRvIiwgIm92ZXJsYXkiLCAic2Nyb2xsIl0uaW5jbHVkZXMob3ZlcmZsb3dZU3RyaW5nKTsKICAgICAgICAgIGNhY2hlLmhhc092ZXJmbG93WCA9IGhhc092ZXJmbG93WDsKICAgICAgICAgIGNhY2hlLmhhc092ZXJmbG93WSA9IGhhc092ZXJmbG93WTsKICAgICAgICAgIGlmICghaGFzT3ZlcmZsb3dYICYmICFoYXNPdmVyZmxvd1kpIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIgJiYgIWhhc092ZXJmbG93WSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiICYmICFoYXNPdmVyZmxvd1gpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHNjcm9sbFdpZHRoID0gbm9kZTIuc2Nyb2xsV2lkdGg7CiAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBub2RlMi5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICBjbGllbnRXaWR0aCA9IG5vZGUyLmNsaWVudFdpZHRoOwogICAgICAgICAgY2xpZW50SGVpZ2h0ID0gbm9kZTIuY2xpZW50SGVpZ2h0OwogICAgICAgICAgaXNTY3JvbGxhYmxlWCA9IHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7CiAgICAgICAgICBpc1Njcm9sbGFibGVZID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0OwogICAgICAgICAgY2FjaGUuaXNTY3JvbGxhYmxlWCA9IGlzU2Nyb2xsYWJsZVg7CiAgICAgICAgICBjYWNoZS5pc1Njcm9sbGFibGVZID0gaXNTY3JvbGxhYmxlWTsKICAgICAgICAgIGNhY2hlLnNjcm9sbFdpZHRoID0gc2Nyb2xsV2lkdGg7CiAgICAgICAgICBjYWNoZS5zY3JvbGxIZWlnaHQgPSBzY3JvbGxIZWlnaHQ7CiAgICAgICAgICBjYWNoZS5jbGllbnRXaWR0aCA9IGNsaWVudFdpZHRoOwogICAgICAgICAgY2FjaGUuY2xpZW50SGVpZ2h0ID0gY2xpZW50SGVpZ2h0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc1Njcm9sbGFibGVYID0gY2FjaGUuaXNTY3JvbGxhYmxlWDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVkgPSBjYWNoZS5pc1Njcm9sbGFibGVZOwogICAgICAgICAgaGFzT3ZlcmZsb3dYID0gY2FjaGUuaGFzT3ZlcmZsb3dYOwogICAgICAgICAgaGFzT3ZlcmZsb3dZID0gY2FjaGUuaGFzT3ZlcmZsb3dZOwogICAgICAgICAgc2Nyb2xsV2lkdGggPSBjYWNoZS5zY3JvbGxXaWR0aDsKICAgICAgICAgIHNjcm9sbEhlaWdodCA9IGNhY2hlLnNjcm9sbEhlaWdodDsKICAgICAgICAgIGNsaWVudFdpZHRoID0gY2FjaGUuY2xpZW50V2lkdGg7CiAgICAgICAgICBjbGllbnRIZWlnaHQgPSBjYWNoZS5jbGllbnRIZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICghaGFzT3ZlcmZsb3dYICYmICFoYXNPdmVyZmxvd1kgfHwgIWlzU2Nyb2xsYWJsZVggJiYgIWlzU2Nyb2xsYWJsZVkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiAmJiAoIWhhc092ZXJmbG93WSB8fCAhaXNTY3JvbGxhYmxlWSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiICYmICghaGFzT3ZlcmZsb3dYIHx8ICFpc1Njcm9sbGFibGVYKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQgb3JpZW50YXRpb247CiAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiKSB7CiAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ4IjsKICAgICAgICB9IGVsc2UgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIikgewogICAgICAgICAgb3JpZW50YXRpb24gPSAieSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nWCA9IGRlbHRhWCAhPT0gMDsKICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nWSA9IGRlbHRhWSAhPT0gMDsKICAgICAgICAgIGlmIChpc1Njcm9sbGluZ1ggJiYgaGFzT3ZlcmZsb3dYICYmIGlzU2Nyb2xsYWJsZVgpIHsKICAgICAgICAgICAgb3JpZW50YXRpb24gPSAieCI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXNTY3JvbGxpbmdZICYmIGhhc092ZXJmbG93WSAmJiBpc1Njcm9sbGFibGVZKSB7CiAgICAgICAgICAgIG9yaWVudGF0aW9uID0gInkiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW9yaWVudGF0aW9uKSByZXR1cm4gZmFsc2U7CiAgICAgICAgbGV0IHNjcm9sbCwgbWF4U2Nyb2xsLCBkZWx0YSwgaGFzT3ZlcmZsb3csIGlzU2Nyb2xsYWJsZTsKICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICJ4IikgewogICAgICAgICAgc2Nyb2xsID0gbm9kZTIuc2Nyb2xsTGVmdDsKICAgICAgICAgIG1heFNjcm9sbCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGg7CiAgICAgICAgICBkZWx0YSA9IGRlbHRhWDsKICAgICAgICAgIGhhc092ZXJmbG93ID0gaGFzT3ZlcmZsb3dYOwogICAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNTY3JvbGxhYmxlWDsKICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAieSIpIHsKICAgICAgICAgIHNjcm9sbCA9IG5vZGUyLnNjcm9sbFRvcDsKICAgICAgICAgIG1heFNjcm9sbCA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodDsKICAgICAgICAgIGRlbHRhID0gZGVsdGFZOwogICAgICAgICAgaGFzT3ZlcmZsb3cgPSBoYXNPdmVyZmxvd1k7CiAgICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1Njcm9sbGFibGVZOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHdpbGxTY3JvbGwgPSBkZWx0YSA+IDAgPyBzY3JvbGwgPCBtYXhTY3JvbGwgOiBzY3JvbGwgPiAwOwogICAgICAgIHJldHVybiB3aWxsU2Nyb2xsICYmIGhhc092ZXJmbG93ICYmIGlzU2Nyb2xsYWJsZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIHJvb3QgZWxlbWVudCBvbiB3aGljaCBsZW5pcyBpcyBpbnN0YW5jZWQKICAgICAgICovCiAgICAgIGdldCByb290RWxlbWVudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyYXBwZXIgPT09IHdpbmRvdyA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IHRoaXMub3B0aW9ucy53cmFwcGVyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGltaXQgd2hpY2ggaXMgdGhlIG1heGltdW0gc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBnZXQgbGltaXQoKSB7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYWl2ZURpbWVuc2lvbnMpIHsKICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5yb290RWxlbWVudC5zY3JvbGxXaWR0aCAtIHRoaXMucm9vdEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5yb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLnJvb3RFbGVtZW50LmNsaWVudEhlaWdodDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGltZW5zaW9ucy5saW1pdFt0aGlzLmlzSG9yaXpvbnRhbCA/ICJ4IiA6ICJ5Il07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgc2Nyb2xsIGlzIGhvcml6b250YWwKICAgICAgICovCiAgICAgIGdldCBpc0hvcml6b250YWwoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgYWN0dWFsIHNjcm9sbCB2YWx1ZQogICAgICAgKi8KICAgICAgZ2V0IGFjdHVhbFNjcm9sbCgpIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5vcHRpb25zLndyYXBwZXI7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsID8gd3JhcHBlci5zY3JvbGxYID8/IHdyYXBwZXIuc2Nyb2xsTGVmdCA6IHdyYXBwZXIuc2Nyb2xsWSA/PyB3cmFwcGVyLnNjcm9sbFRvcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGN1cnJlbnQgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBnZXQgc2Nyb2xsKCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5maW5pdGUgPyBtb2R1bG8odGhpcy5hbmltYXRlZFNjcm9sbCwgdGhpcy5saW1pdCkgOiB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjcm9sbCByZWxhdGl2ZSB0byB0aGUgbGltaXQKICAgICAgICovCiAgICAgIGdldCBwcm9ncmVzcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5saW1pdCA9PT0gMCA/IDEgOiB0aGlzLnNjcm9sbCAvIHRoaXMubGltaXQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEN1cnJlbnQgc2Nyb2xsIHN0YXRlCiAgICAgICAqLwogICAgICBnZXQgaXNTY3JvbGxpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsaW5nOwogICAgICB9CiAgICAgIHNldCBpc1Njcm9sbGluZyh2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5faXNTY3JvbGxpbmcgIT09IHZhbHVlMikgewogICAgICAgICAgdGhpcy5faXNTY3JvbGxpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgbGVuaXMgaXMgc3RvcHBlZAogICAgICAgKi8KICAgICAgZ2V0IGlzU3RvcHBlZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5faXNTdG9wcGVkOwogICAgICB9CiAgICAgIHNldCBpc1N0b3BwZWQodmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzU3RvcHBlZCAhPT0gdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLl9pc1N0b3BwZWQgPSB2YWx1ZTI7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgbGVuaXMgaXMgbG9ja2VkCiAgICAgICAqLwogICAgICBnZXQgaXNMb2NrZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9ja2VkOwogICAgICB9CiAgICAgIHNldCBpc0xvY2tlZCh2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5faXNMb2NrZWQgIT09IHZhbHVlMikgewogICAgICAgICAgdGhpcy5faXNMb2NrZWQgPSB2YWx1ZTI7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgbGVuaXMgaXMgc21vb3RoIHNjcm9sbGluZwogICAgICAgKi8KICAgICAgZ2V0IGlzU21vb3RoKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGNsYXNzIG5hbWUgYXBwbGllZCB0byB0aGUgd3JhcHBlciBlbGVtZW50CiAgICAgICAqLwogICAgICBnZXQgY2xhc3NOYW1lKCkgewogICAgICAgIGxldCBjbGFzc05hbWUgPSAibGVuaXMiOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgY2xhc3NOYW1lICs9ICIgbGVuaXMtYXV0b1RvZ2dsZSI7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1zdG9wcGVkIjsKICAgICAgICBpZiAodGhpcy5pc0xvY2tlZCkgY2xhc3NOYW1lICs9ICIgbGVuaXMtbG9ja2VkIjsKICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGluZykgY2xhc3NOYW1lICs9ICIgbGVuaXMtc2Nyb2xsaW5nIjsKICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGluZyA9PT0gInNtb290aCIpIGNsYXNzTmFtZSArPSAiIGxlbmlzLXNtb290aCI7CiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKICAgICAgfQogICAgICB1cGRhdGVDbGFzc05hbWUoKSB7CiAgICAgICAgdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCk7CiAgICAgICAgdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUgPSBgJHt0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZX0gJHt0aGlzLmNsYXNzTmFtZX1gLnRyaW0oKTsKICAgICAgfQogICAgICBjbGVhblVwQ2xhc3NOYW1lKCkgewogICAgICAgIHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgvbGVuaXMoLVx3Kyk/L2csICIiKS50cmltKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zd2VldC1zY3JvbGxANC4wLjAvbm9kZV9tb2R1bGVzL3N3ZWV0LXNjcm9sbC9zd2VldC1zY3JvbGwuanMKdmFyIHJlcXVpcmVfc3dlZXRfc2Nyb2xsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zd2VldC1zY3JvbGxANC4wLjAvbm9kZV9tb2R1bGVzL3N3ZWV0LXNjcm9sbC9zd2VldC1zY3JvbGwuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgKGZ1bmN0aW9uKGdsb2JhbDIsIGZhY3RvcnkpIHsKICAgICAgdHlwZW9mIGV4cG9ydHMgPT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOiB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOiAoZ2xvYmFsMiA9IGdsb2JhbDIgfHwgc2VsZiwgZ2xvYmFsMi5Td2VldFNjcm9sbCA9IGZhY3RvcnkoKSk7CiAgICB9KShleHBvcnRzLCBmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgX19hc3NpZ24yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgX19hc3NpZ24yID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbjModDkpIHsKICAgICAgICAgIGZvciAodmFyIHMxMCwgaTExID0gMSwgbjEyID0gYXJndW1lbnRzLmxlbmd0aDsgaTExIDwgbjEyOyBpMTErKykgewogICAgICAgICAgICBzMTAgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICAgICAgZm9yICh2YXIgcDcgaW4gczEwKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMxMCwgcDcpKSB0OVtwN10gPSBzMTBbcDddOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHQ5OwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9fYXNzaWduMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICB2YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTsKICAgICAgdmFyIGNhblVzZUhpc3RvcnkgPSAhY2FuVXNlRE9NID8gZmFsc2UgOiB3aW5kb3cuaGlzdG9yeSAmJiAicHVzaFN0YXRlIiBpbiB3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgIT09ICJmaWxlOiI7CiAgICAgIHZhciBjYW5Vc2VQYXNzaXZlT3B0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdXBwb3J0ID0gZmFsc2U7CiAgICAgICAgaWYgKCFjYW5Vc2VET00pIHsKICAgICAgICAgIHJldHVybiBzdXBwb3J0OwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdzsKICAgICAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAicGFzc2l2ZSIsIHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBzdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsIG51bGwsIG9wdHMpOwogICAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLCBudWxsLCBvcHRzKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1cHBvcnQ7CiAgICAgIH0pKCk7CiAgICAgIHZhciBpc1N0cmluZzMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gInN0cmluZyI7CiAgICAgIH07CiAgICAgIHZhciBpc0Z1bmN0aW9uMiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iOwogICAgICB9OwogICAgICB2YXIgaXNBcnJheTQgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopOwogICAgICB9OwogICAgICB2YXIgaXNOdW1lcmljID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuICFpc0FycmF5NChvYmopICYmIG9iaiAtIHBhcnNlRmxvYXQob2JqKSArIDEgPj0gMDsKICAgICAgfTsKICAgICAgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbihvYmosIGtleTIpIHsKICAgICAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShrZXkyKTsKICAgICAgfTsKICAgICAgdmFyIHJhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogbnVsbDsKICAgICAgdmFyIGNhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBudWxsOwogICAgICB2YXIgY29zID0gTWF0aC5jb3MsIHNpbiA9IE1hdGguc2luLCBwb3cgPSBNYXRoLnBvdywgc3FydCA9IE1hdGguc3FydCwgUEkgPSBNYXRoLlBJOwogICAgICB2YXIgZWFzaW5ncyA9IHsKICAgICAgICBsaW5lYXI6IGZ1bmN0aW9uKHA3KSB7CiAgICAgICAgICByZXR1cm4gcDc7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ1KSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVhZDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNSkgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiAodDkgLz0gZDUpICogKHQ5IC0gMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDUgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSArIGI1IDogLWMxMSAvIDIgKiAoLS10OSAqICh0OSAtIDIpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ1KSAqIHQ5ICogdDkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNSkgewogICAgICAgICAgcmV0dXJuIGMxMSAqICgodDkgPSB0OSAvIGQ1IC0gMSkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ1IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSArIGI1IDogYzExIC8gMiAqICgodDkgLT0gMikgKiB0OSAqIHQ5ICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ1KSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqICgodDkgPSB0OSAvIGQ1IC0gMSkgKiB0OSAqIHQ5ICogdDkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDUgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IC1jMTEgLyAyICogKCh0OSAtPSAyKSAqIHQ5ICogdDkgKiB0OSAtIDIpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWludDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNSkgewogICAgICAgICAgcmV0dXJuIGMxMSAqICh0OSAvPSBkNSkgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKCh0OSA9IHQ5IC8gZDUgLSAxKSAqIHQ5ICogdDkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ1IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IGMxMSAvIDIgKiAoKHQ5IC09IDIpICogdDkgKiB0OSAqIHQ5ICogdDkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluU2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNSkgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiBjb3ModDkgLyBkNSAqIChQSSAvIDIpKSArIGMxMSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFNpbmU6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzaW4odDkgLyBkNSAqIChQSSAvIDIpKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0U2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNSkgewogICAgICAgICAgcmV0dXJuIC1jMTEgLyAyICogKGNvcyhQSSAqIHQ5IC8gZDUpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiB0OSA9PT0gMCA/IGI1IDogYzExICogcG93KDIsIDEwICogKHQ5IC8gZDUgLSAxKSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICByZXR1cm4gdDkgPT09IGQ1ID8gYjUgKyBjMTEgOiBjMTEgKiAoLXBvdygyLCAtMTAgKiB0OSAvIGQ1KSArIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ1KSB7CiAgICAgICAgICBpZiAodDkgPT09IDApCiAgICAgICAgICAgIHJldHVybiBiNTsKICAgICAgICAgIGlmICh0OSA9PT0gZDUpCiAgICAgICAgICAgIHJldHVybiBiNSArIGMxMTsKICAgICAgICAgIGlmICgodDkgLz0gZDUgLyAyKSA8IDEpCiAgICAgICAgICAgIHJldHVybiBjMTEgLyAyICogcG93KDIsIDEwICogKHQ5IC0gMSkpICsgYjU7CiAgICAgICAgICByZXR1cm4gYzExIC8gMiAqICgtcG93KDIsIC0xMCAqIC0tdDkpICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkNpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiAtYzExICogKHNxcnQoMSAtICh0OSAvPSBkNSkgKiB0OSkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzcXJ0KDEgLSAodDkgPSB0OSAvIGQ1IC0gMSkgKiB0OSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDUpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDUgLyAyKSA8IDEgPyAtYzExIC8gMiAqIChzcXJ0KDEgLSB0OSAqIHQ5KSAtIDEpICsgYjUgOiBjMTEgLyAyICogKHNxcnQoMSAtICh0OSAtPSAyKSAqIHQ5KSArIDEpICsgYjU7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgJCQgPSBmdW5jdGlvbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCghc2VsZWN0b3IgPyBbXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKICAgICAgfTsKICAgICAgdmFyICQ0ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gJCQoc2VsZWN0b3IpLnNoaWZ0KCkgfHwgbnVsbDsKICAgICAgfTsKICAgICAgdmFyIGlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBFbGVtZW50OwogICAgICB9OwogICAgICB2YXIgaXNXaW5kb3cgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSB3aW5kb3c7CiAgICAgIH07CiAgICAgIHZhciBpc1Jvb3RDb250YWluZXIgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgJGVsID09PSBkb2N1bWVudC5ib2R5OwogICAgICB9OwogICAgICB2YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uKCRlbCwgc2VsZWN0b3IpIHsKICAgICAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkgewogICAgICAgICAgcmV0dXJuICRlbCA9PT0gc2VsZWN0b3I7CiAgICAgICAgfQogICAgICAgIHZhciByZXN1bHRzID0gJCQoc2VsZWN0b3IpOwogICAgICAgIHZhciBpMTEgPSByZXN1bHRzLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1pMTEgPj0gMCAmJiByZXN1bHRzW2kxMV0gIT09ICRlbCkgewogICAgICAgIH0KICAgICAgICByZXR1cm4gaTExID4gLTE7CiAgICAgIH07CiAgICAgIHZhciBnZXRIZWlnaHQgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gTWF0aC5tYXgoJGVsLnNjcm9sbEhlaWdodCwgJGVsLmNsaWVudEhlaWdodCwgJGVsLm9mZnNldEhlaWdodCk7CiAgICAgIH07CiAgICAgIHZhciBnZXRXaWR0aCA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsV2lkdGgsICRlbC5jbGllbnRXaWR0aCwgJGVsLm9mZnNldFdpZHRoKTsKICAgICAgfTsKICAgICAgdmFyIGdldFNpemUyID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHdpZHRoOiBnZXRXaWR0aCgkZWwpLAogICAgICAgICAgaGVpZ2h0OiBnZXRIZWlnaHQoJGVsKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIHZhciBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcyA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHZhciBpc1Jvb3QgPSBpc1dpbmRvdygkZWwpIHx8IGlzUm9vdENvbnRhaW5lcigkZWwpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB2aWV3cG9ydDogewogICAgICAgICAgICB3aWR0aDogaXNSb290ID8gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgOiAkZWwuY2xpZW50V2lkdGgsCiAgICAgICAgICAgIGhlaWdodDogaXNSb290ID8gd2luZG93LmlubmVySGVpZ2h0IDogJGVsLmNsaWVudEhlaWdodAogICAgICAgICAgfSwKICAgICAgICAgIHNpemU6IGlzUm9vdCA/IHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KGdldFdpZHRoKGRvY3VtZW50LmJvZHkpLCBnZXRXaWR0aChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKSwKICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heChnZXRIZWlnaHQoZG9jdW1lbnQuYm9keSksIGdldEhlaWdodChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKQogICAgICAgICAgfSA6IGdldFNpemUyKCRlbCkKICAgICAgICB9OwogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uTWV0aG9kTWFwID0gewogICAgICAgIHk6ICJzY3JvbGxUb3AiLAogICAgICAgIHg6ICJzY3JvbGxMZWZ0IgogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uUHJvcE1hcCA9IHsKICAgICAgICB5OiAicGFnZVlPZmZzZXQiLAogICAgICAgIHg6ICJwYWdlWE9mZnNldCIKICAgICAgfTsKICAgICAgdmFyIGdldFNjcm9sbCA9IGZ1bmN0aW9uKCRlbCwgZGlyZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGlzV2luZG93KCRlbCkgPyAkZWxbZGlyZWN0aW9uUHJvcE1hcFtkaXJlY3Rpb25dXSA6ICRlbFtkaXJlY3Rpb25NZXRob2RNYXBbZGlyZWN0aW9uXV07CiAgICAgIH07CiAgICAgIHZhciBzZXRTY3JvbGwgPSBmdW5jdGlvbigkZWwsIG9mZnNldCwgZGlyZWN0aW9uKSB7CiAgICAgICAgaWYgKGlzV2luZG93KCRlbCkpIHsKICAgICAgICAgIHZhciB0b3BfMSA9IGRpcmVjdGlvbiA9PT0gInkiOwogICAgICAgICAgJGVsLnNjcm9sbFRvKCF0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWE9mZnNldCwgdG9wXzEgPyBvZmZzZXQgOiAkZWwucGFnZVlPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkZWxbZGlyZWN0aW9uTWV0aG9kTWFwW2RpcmVjdGlvbl1dID0gb2Zmc2V0OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uKCRlbCwgJGNvbnRleHQpIHsKICAgICAgICB2YXIgcmVjdCA9ICRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBpZiAocmVjdC53aWR0aCB8fCByZWN0LmhlaWdodCkgewogICAgICAgICAgdmFyIHNjcm9sbF8xID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgIHZhciAkY3R4ID0gdm9pZCAwOwogICAgICAgICAgaWYgKGlzV2luZG93KCRjb250ZXh0KSB8fCBpc1Jvb3RDb250YWluZXIoJGNvbnRleHQpKSB7CiAgICAgICAgICAgICRjdHggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IHdpbmRvd1tkaXJlY3Rpb25Qcm9wTWFwLnldOwogICAgICAgICAgICBzY3JvbGxfMS5sZWZ0ID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R4ID0gJGNvbnRleHQ7CiAgICAgICAgICAgIHZhciBjUmVjdCA9ICRjdHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IGNSZWN0LnRvcCAqIC0xICsgJGN0eFtkaXJlY3Rpb25NZXRob2RNYXAueV07CiAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSBjUmVjdC5sZWZ0ICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC54XTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyBzY3JvbGxfMS50b3AgLSAkY3R4LmNsaWVudFRvcCwKICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsXzEubGVmdCAtICRjdHguY2xpZW50TGVmdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgIH07CiAgICAgIHZhciB3aGVlbEV2ZW50TmFtZSA9IChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgcmV0dXJuICJ3aGVlbCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAib253aGVlbCIgaW4gZG9jdW1lbnQgPyAid2hlZWwiIDogIm1vdXNld2hlZWwiOwogICAgICB9KSgpOwogICAgICB2YXIgZXZlbnROYW1lID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgIHJldHVybiBuYW1lID09PSAid2hlZWwiID8gd2hlZWxFdmVudE5hbWUgOiBuYW1lOwogICAgICB9OwogICAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbigkZWwsIG1ldGhvZCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIGV2ZW50LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAkZWxbbWV0aG9kXShldmVudE5hbWUobmFtZSksIGxpc3RlbmVyMiwgY2FuVXNlUGFzc2l2ZU9wdGlvbiA/IHsgcGFzc2l2ZSB9IDogZmFsc2UpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAiYWRkRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVSZWxhdGl2ZVRva2VuID0gL14oXCt8LSk9KFxkKyg/OlwuXGQrKT8pJC87CiAgICAgIHZhciBwYXJzZUNvb3JkaW5hdGUgPSBmdW5jdGlvbihjb29yZGluYXRlLCBlbmFibGVWZXJ0aWNhbCkgewogICAgICAgIHZhciByZXMgPSB7IHRvcDogMCwgbGVmdDogMCwgcmVsYXRpdmU6IGZhbHNlIH07CiAgICAgICAgaWYgKGhhc1Byb3AoY29vcmRpbmF0ZSwgInRvcCIpIHx8IGhhc1Byb3AoY29vcmRpbmF0ZSwgImxlZnQiKSkgewogICAgICAgICAgcmVzID0gX19hc3NpZ24yKHt9LCByZXMsIGNvb3JkaW5hdGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheTQoY29vcmRpbmF0ZSkpIHsKICAgICAgICAgIGlmIChjb29yZGluYXRlLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGVbMF07CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gY29vcmRpbmF0ZVsxXTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29vcmRpbmF0ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzTnVtZXJpYyhjb29yZGluYXRlKSkgewogICAgICAgICAgaWYgKGVuYWJsZVZlcnRpY2FsKSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBjb29yZGluYXRlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzLmxlZnQgPSBjb29yZGluYXRlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmczKGNvb3JkaW5hdGUpKSB7CiAgICAgICAgICB2YXIgbTYgPSBjb29yZGluYXRlLnRyaW0oKS5tYXRjaChyZVJlbGF0aXZlVG9rZW4pOwogICAgICAgICAgaWYgKCFtNikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBvcCA9IG02WzFdOwogICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KG02WzJdLCAxMCk7CiAgICAgICAgICBpZiAob3AgPT09ICIrIikgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyB2YWwgOiAwOwogICAgICAgICAgICByZXMubGVmdCA9ICFlbmFibGVWZXJ0aWNhbCA/IHZhbCA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5yZWxhdGl2ZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9OwogICAgICB2YXIgZGVmYXVsdE9wdGlvbnMyID0gewogICAgICAgIHRyaWdnZXI6ICJbZGF0YS1zY3JvbGxdIiwKICAgICAgICBoZWFkZXI6ICJbZGF0YS1zY3JvbGwtaGVhZGVyXSIsCiAgICAgICAgZHVyYXRpb246IDFlMywKICAgICAgICBlYXNpbmc6ICJlYXNlT3V0UXVpbnQiLAogICAgICAgIG9mZnNldDogMCwKICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSwKICAgICAgICBob3Jpem9udGFsOiBmYWxzZSwKICAgICAgICBjYW5jZWxsYWJsZTogdHJ1ZSwKICAgICAgICB1cGRhdGVVUkw6IGZhbHNlLAogICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLAogICAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwKICAgICAgICAvLyBDYWxsYmFja3MKICAgICAgICBiZWZvcmU6IG51bGwsCiAgICAgICAgYWZ0ZXI6IG51bGwsCiAgICAgICAgY2FuY2VsOiBudWxsLAogICAgICAgIGNvbXBsZXRlOiBudWxsLAogICAgICAgIHN0ZXA6IG51bGwKICAgICAgfTsKICAgICAgdmFyIENPTlRBSU5FUl9DTElDS19FVkVOVCA9ICJjbGljayI7CiAgICAgIHZhciBDT05UQUlORVJfU1RPUF9FVkVOVCA9ICJ3aGVlbCB0b3VjaHN0YXJ0IHRvdWNobW92ZSI7CiAgICAgIHZhciBTd2VldFNjcm9sbDMgPSAoCiAgICAgICAgLyoqIEBjbGFzcyAqLwogICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgIGZ1bmN0aW9uIFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpIHsKICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB0aGlzLmN0eCA9IHsKICAgICAgICAgICAgICAkdHJpZ2dlcjogbnVsbCwKICAgICAgICAgICAgICBvcHRzOiBudWxsLAogICAgICAgICAgICAgIHByb2dyZXNzOiBmYWxzZSwKICAgICAgICAgICAgICBwb3M6IG51bGwsCiAgICAgICAgICAgICAgc3RhcnRQb3M6IG51bGwsCiAgICAgICAgICAgICAgZWFzaW5nOiBudWxsLAogICAgICAgICAgICAgIHN0YXJ0OiAwLAogICAgICAgICAgICAgIGlkOiAwLAogICAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsCiAgICAgICAgICAgICAgaGFzaDogbnVsbAogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmxvb3AgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgICAgICAgdmFyIF9hMTQgPSBfdGhpcywgJGVsID0gX2ExNC4kZWwsIGN0eCA9IF9hMTQuY3R4OwogICAgICAgICAgICAgIGlmICghY3R4LnN0YXJ0KSB7CiAgICAgICAgICAgICAgICBjdHguc3RhcnQgPSB0aW1lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIWN0eC5wcm9ncmVzcyB8fCAhJGVsKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBvcHRpb25zMiA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjdHgucG9zOwogICAgICAgICAgICAgIHZhciBzdGFydCA9IGN0eC5zdGFydDsKICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBjdHguc3RhcnRQb3M7CiAgICAgICAgICAgICAgdmFyIGVhc2luZyA9IGN0eC5lYXNpbmc7CiAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gb3B0aW9uczIuZHVyYXRpb247CiAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9IHsgdG9wOiAieSIsIGxlZnQ6ICJ4IiB9OwogICAgICAgICAgICAgIHZhciB0aW1lRWxhcHNlZCA9IHRpbWUgLSBzdGFydDsKICAgICAgICAgICAgICB2YXIgdDkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCh0aW1lRWxhcHNlZCAvIGR1cmF0aW9uLCAwKSk7CiAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2Zmc2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZTIgPSBvZmZzZXRba2V5Ml07CiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbDIgPSBzdGFydE9mZnNldFtrZXkyXTsKICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHZhbHVlMiAtIGluaXRpYWwyOwogICAgICAgICAgICAgICAgaWYgKGRlbHRhICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlYXNpbmcodDksIGR1cmF0aW9uICogdDksIDAsIDEsIGR1cmF0aW9uKTsKICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKCRlbCwgTWF0aC5yb3VuZChpbml0aWFsMiArIGRlbHRhICogdmFsKSwgZGlyZWN0aW9uTWFwW2tleTJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAodGltZUVsYXBzZWQgPD0gZHVyYXRpb24pIHsKICAgICAgICAgICAgICAgIF90aGlzLmhvb2sob3B0aW9uczIsICJzdGVwIiwgdDkpOwogICAgICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGw0LnJhZihfdGhpcy5sb29wKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCh0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IF90aGlzLm9wdHM7CiAgICAgICAgICAgICAgdmFyICRlbCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICAgICAgZm9yICg7ICRlbCAmJiAkZWwgIT09IGRvY3VtZW50OyAkZWwgPSAkZWwucGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCRlbCwgb3B0cy50cmlnZ2VyKSkgewogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYXRhT3B0aW9ucyA9IEpTT04ucGFyc2UoJGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpIHx8ICJ7fSIpOwogICAgICAgICAgICAgICAgdmFyIGRhdGExMSA9ICRlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc2Nyb2xsIik7CiAgICAgICAgICAgICAgICB2YXIgdG8gPSBkYXRhMTEgfHwgJGVsLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMyID0gX19hc3NpZ24yKHt9LCBvcHRzLCBkYXRhT3B0aW9ucyk7CiAgICAgICAgICAgICAgICB2YXIgcHJldmVudERlZmF1bHQgPSBvcHRpb25zMi5wcmV2ZW50RGVmYXVsdCwgc3RvcFByb3BhZ2F0aW9uID0gb3B0aW9uczIuc3RvcFByb3BhZ2F0aW9uLCB2ZXJ0aWNhbCA9IG9wdGlvbnMyLnZlcnRpY2FsLCBob3Jpem9udGFsID0gb3B0aW9uczIuaG9yaXpvbnRhbDsKICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgewogICAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHsKICAgICAgICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMuY3R4LiR0cmlnZ2VyID0gJGVsOwogICAgICAgICAgICAgICAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG8odG8sIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9Ub3AodG8sIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCkgewogICAgICAgICAgICAgICAgICBfdGhpcy50b0xlZnQodG8sIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVTdG9wID0gZnVuY3Rpb24oZTExKSB7CiAgICAgICAgICAgICAgdmFyIGN0eCA9IF90aGlzLmN0eDsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2FuY2VsbGFibGUpIHsKICAgICAgICAgICAgICAgIGN0eC5jYW5jZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMub3B0cyA9IF9fYXNzaWduMih7fSwgZGVmYXVsdE9wdGlvbnMyLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSBudWxsOwogICAgICAgICAgICBpZiAoY2FuVXNlRE9NKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gJDQoY29udGFpbmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gY29udGFpbmVyOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gd2luZG93OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRlbCA9ICRjb250YWluZXI7CiAgICAgICAgICAgIGlmICgkY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgdGhpcy5iaW5kKHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgU3dlZXRTY3JvbGw0LmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNvbnRhaW5lcikgewogICAgICAgICAgICByZXR1cm4gbmV3IFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2ExNCA9IHRoaXMsICRlbCA9IF9hMTQuJGVsLCBjdHggPSBfYTE0LmN0eCwgY3VycmVudE9wdGlvbnMgPSBfYTE0Lm9wdHM7CiAgICAgICAgICAgIHZhciAkdHJpZ2dlciA9IGN0eC4kdHJpZ2dlcjsKICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIGN1cnJlbnRPcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyIG9wdE9mZnNldCA9IG9wdHMub2Zmc2V0LCB2ZXJ0aWNhbCA9IG9wdHMudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRzLmhvcml6b250YWw7CiAgICAgICAgICAgIHZhciAkaGVhZGVyID0gaXNFbGVtZW50KG9wdHMuaGVhZGVyKSA/IG9wdHMuaGVhZGVyIDogJDQob3B0cy5oZWFkZXIpOwogICAgICAgICAgICB2YXIgcmVnID0gL14jLzsKICAgICAgICAgICAgdmFyIGhhc2ggPSBpc1N0cmluZzMoZGlzdGFuY2UpICYmIHJlZy50ZXN0KGRpc3RhbmNlKSA/IGRpc3RhbmNlIDogbnVsbDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHguY2FuY2VsID0gZmFsc2U7CiAgICAgICAgICAgIGN0eC5oYXNoID0gaGFzaDsKICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgIGlmICghJGVsKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJzZUNvb3JkaW5hdGUob3B0T2Zmc2V0LCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBjb29yZGluYXRlID0gcGFyc2VDb29yZGluYXRlKGRpc3RhbmNlLCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBzY3JvbGwgPSB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSkgewogICAgICAgICAgICAgIGlmIChjb29yZGluYXRlLnJlbGF0aXZlKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldFNjcm9sbCgkZWwsIHZlcnRpY2FsID8gInkiIDogIngiKTsKICAgICAgICAgICAgICAgIHNjcm9sbC50b3AgPSB2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLnRvcCA6IGNvb3JkaW5hdGUudG9wOwogICAgICAgICAgICAgICAgc2Nyb2xsLmxlZnQgPSAhdmVydGljYWwgPyBjdXJyZW50ICsgY29vcmRpbmF0ZS5sZWZ0IDogY29vcmRpbmF0ZS5sZWZ0OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzY3JvbGwgPSBjb29yZGluYXRlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZzMoZGlzdGFuY2UpICYmIGRpc3RhbmNlICE9PSAiIyIpIHsKICAgICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQ0KGRpc3RhbmNlKTsKICAgICAgICAgICAgICBpZiAoISR0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2Nyb2xsID0gZ2V0T2Zmc2V0KCR0YXJnZXQsICRlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9mZnNldCkgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgKz0gb2Zmc2V0LnRvcDsKICAgICAgICAgICAgICBzY3JvbGwubGVmdCArPSBvZmZzZXQubGVmdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGhlYWRlcikgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgPSBNYXRoLm1heCgwLCBzY3JvbGwudG9wIC0gZ2V0U2l6ZTIoJGhlYWRlcikuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2IgPSBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcygkZWwpLCB2aWV3cG9ydCA9IF9iLnZpZXdwb3J0LCBzaXplID0gX2Iuc2l6ZTsKICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IHZlcnRpY2FsID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2l6ZS5oZWlnaHQgLSB2aWV3cG9ydC5oZWlnaHQsIHNjcm9sbC50b3ApKSA6IGdldFNjcm9sbCgkZWwsICJ5Iik7CiAgICAgICAgICAgIHNjcm9sbC5sZWZ0ID0gaG9yaXpvbnRhbCA/IE1hdGgubWF4KDAsIE1hdGgubWluKHNpemUud2lkdGggLSB2aWV3cG9ydC53aWR0aCwgc2Nyb2xsLmxlZnQpKSA6IGdldFNjcm9sbCgkZWwsICJ4Iik7CiAgICAgICAgICAgIGlmICh0aGlzLmhvb2sob3B0cywgImJlZm9yZSIsIHNjcm9sbCwgJHRyaWdnZXIpID09PSBmYWxzZSkgewogICAgICAgICAgICAgIGN0eC5vcHRzID0gbnVsbDsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnBvcyA9IHNjcm9sbDsKICAgICAgICAgICAgdGhpcy5zdGFydChvcHRzKTsKICAgICAgICAgICAgdGhpcy5iaW5kKGZhbHNlLCB0cnVlKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvVG9wID0gZnVuY3Rpb24oZGlzdGFuY2UsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdGhpcy50byhkaXN0YW5jZSwgX19hc3NpZ24yKHt9LCBvcHRpb25zIHx8IHt9LCB7IHZlcnRpY2FsOiB0cnVlLCBob3Jpem9udGFsOiBmYWxzZSB9KSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS50b0xlZnQgPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICB0aGlzLnRvKGRpc3RhbmNlLCBfX2Fzc2lnbjIoe30sIG9wdGlvbnMgfHwge30sIHsgdmVydGljYWw6IGZhbHNlLCBob3Jpem9udGFsOiB0cnVlIH0pKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvRWxlbWVudCA9IGZ1bmN0aW9uKCRlbGVtZW50LCBvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciAkZWwgPSB0aGlzLiRlbDsKICAgICAgICAgICAgaWYgKCFjYW5Vc2VET00gfHwgISRlbCkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRvKGdldE9mZnNldCgkZWxlbWVudCwgJGVsKSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oZ290b0VuZCkgewogICAgICAgICAgICBpZiAoZ290b0VuZCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgZ290b0VuZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIGN0eCA9IF9hMTQuY3R4OwogICAgICAgICAgICB2YXIgcG9zID0gY3R4LnBvczsKICAgICAgICAgICAgaWYgKCEkZWwgfHwgIWN0eC5wcm9ncmVzcykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmKGN0eC5pZCk7CiAgICAgICAgICAgIGN0eC5wcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAgICBjdHguc3RhcnQgPSAwOwogICAgICAgICAgICBjdHguaWQgPSAwOwogICAgICAgICAgICBpZiAoZ290b0VuZCAmJiBwb3MpIHsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MubGVmdCwgIngiKTsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MudG9wLCAieSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIHRoaXMub3B0cywgb3B0aW9ucyk7CiAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdGhpcy5vcHRzID0gb3B0czsKICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRlbCkgewogICAgICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRydWUsIHRydWUpOwogICAgICAgICAgICAgIHRoaXMuJGVsID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25CZWZvcmUgPSBmdW5jdGlvbihfNCwgX18pIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vblN0ZXAgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25BZnRlciA9IGZ1bmN0aW9uKF80LCBfXykgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25DYW5jZWwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLm9uQ29tcGxldGUgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHgucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICAgICBjdHguZWFzaW5nID0gaXNGdW5jdGlvbjIob3B0cy5lYXNpbmcpID8gb3B0cy5lYXNpbmcgOiBlYXNpbmdzW29wdHMuZWFzaW5nXTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSB0aGlzLiRlbDsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0gewogICAgICAgICAgICAgIHRvcDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ5IiksCiAgICAgICAgICAgICAgbGVmdDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ4IikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY3R4LnN0YXJ0UG9zID0gc3RhcnQ7CiAgICAgICAgICAgIGN0eC5pZCA9IFN3ZWV0U2Nyb2xsNC5yYWYodGhpcy5sb29wKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIGN0eCA9IF9hMTQuY3R4OwogICAgICAgICAgICB2YXIgaGFzaCA9IGN0eC5oYXNoLCBjYW5jZWwgPSBjdHguY2FuY2VsLCBvcHRzID0gY3R4Lm9wdHMsIHBvcyA9IGN0eC5wb3MsICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyOwogICAgICAgICAgICBpZiAoISRlbCB8fCAhb3B0cykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaGFzaCAhPSBudWxsICYmIGhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7CiAgICAgICAgICAgICAgdmFyIHVwZGF0ZVVSTCA9IG9wdHMudXBkYXRlVVJMOwogICAgICAgICAgICAgIGlmIChjYW5Vc2VET00gJiYgY2FuVXNlSGlzdG9yeSAmJiB1cGRhdGVVUkwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeVt1cGRhdGVVUkwgPT09ICJyZXBsYWNlIiA/ICJyZXBsYWNlU3RhdGUiIDogInB1c2hTdGF0ZSJdKG51bGwsICIiLCBoYXNoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy51bmJpbmQoZmFsc2UsIHRydWUpOwogICAgICAgICAgICBjdHgub3B0cyA9IG51bGw7CiAgICAgICAgICAgIGN0eC4kdHJpZ2dlciA9IG51bGw7CiAgICAgICAgICAgIGlmIChjYW5jZWwpIHsKICAgICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNhbmNlbCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiYWZ0ZXIiLCBwb3MsICR0cmlnZ2VyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNvbXBsZXRlIiwgY2FuY2VsKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmhvb2sgPSBmdW5jdGlvbihvcHRpb25zLCB0eXBlNSkgewogICAgICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnNbdHlwZTVdOwogICAgICAgICAgICB2YXIgY2FsbGJhY2tSZXN1bHQ7CiAgICAgICAgICAgIHZhciBtZXRob2RSZXN1bHQ7CiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uMihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICBjYWxsYmFja1Jlc3VsdCA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KFt0aGlzXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1ldGhvZFJlc3VsdCA9IChfYTE0ID0gdGhpcylbIm9uIiArICh0eXBlNVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZTUuc2xpY2UoMSkpXS5hcHBseShfYTE0LCBhcmdzKTsKICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrUmVzdWx0ICE9PSB2b2lkIDAgPyBjYWxsYmFja1Jlc3VsdCA6IG1ldGhvZFJlc3VsdDsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihjbGljaywgc3RvcCkgewogICAgICAgICAgICB2YXIgX2ExNCA9IHRoaXMsICRlbCA9IF9hMTQuJGVsLCBvcHRzID0gX2ExNC5jdHgub3B0czsKICAgICAgICAgICAgaWYgKCRlbCkgewogICAgICAgICAgICAgIGlmIChjbGljaykgewogICAgICAgICAgICAgICAgYWRkRXZlbnQoJGVsLCBDT05UQUlORVJfQ0xJQ0tfRVZFTlQsIHRoaXMuaGFuZGxlQ2xpY2ssIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgIGFkZEV2ZW50KCRlbCwgQ09OVEFJTkVSX1NUT1BfRVZFTlQsIHRoaXMuaGFuZGxlU3RvcCwgb3B0cyA/IG9wdHMuY2FuY2VsbGFibGUgOiB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKGNsaWNrLCBzdG9wKSB7CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIG9wdHMgPSBfYTE0LmN0eC5vcHRzOwogICAgICAgICAgICBpZiAoJGVsKSB7CiAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7CiAgICAgICAgICAgICAgICByZW1vdmVFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5yYWYgPSByYWY7CiAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmID0gY2FmOwogICAgICAgICAgcmV0dXJuIFN3ZWV0U2Nyb2xsNDsKICAgICAgICB9KSgpCiAgICAgICk7CiAgICAgIHJldHVybiBTd2VldFNjcm9sbDM7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5wbHVnaW5zLmpzCnZhciBpbXBvcnRfc3dlZXRfc2Nyb2xsLCBsaWs7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxNigpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxOCgpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMjEoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMigpOwogICAgaW5pdF9kaXN0X3RzMjMoKTsKICAgIGluaXRfZGlzdF90czI3KCk7CiAgICBpbml0X2Rpc3RfdHMxMygpOwogICAgaW5pdF9saWtfb2JqZWN0bWFwKCk7CiAgICBpbml0X2xpa19zdHJpbmdtYXAoKTsKICAgIGluaXRfbGlrX2Zhc3RtYXAoKTsKICAgIGluaXRfbGVuaXMoKTsKICAgIGltcG9ydF9zd2VldF9zY3JvbGwgPSBfX3RvRVNNKHJlcXVpcmVfc3dlZXRfc2Nyb2xsKCksIDEpOwogICAgbGlrID0gewogICAgICBPYmplY3RNYXA6IE9iamVjdE1hcDIsCiAgICAgIFN0cmluZ21hcDogU3RyaW5nbWFwMiwKICAgICAgRmFzdE1hcDogRmFzdE1hcDIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzCnZhciBkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cywgewogIGNzc0ZvckRlc2t0b3A6ICgpID0+IGNzc0ZvckRlc2t0b3AsCiAgY3NzRm9yTm90ZWJvb2s6ICgpID0+IGNzc0Zvck5vdGVib29rLAogIGNzc0ZvclBoYWJsZXQ6ICgpID0+IGNzc0ZvclBoYWJsZXQsCiAgY3NzRm9yUGhvbmU6ICgpID0+IGNzc0ZvclBob25lLAogIGNzc0ZvclRhYmxldDogKCkgPT4gY3NzRm9yVGFibGV0LAogIGRlc2t0b3A6ICgpID0+IGRlc2t0b3AsCiAgbm90ZWJvb2s6ICgpID0+IG5vdGVib29rLAogIHBoYWJsZXQ6ICgpID0+IHBoYWJsZXQsCiAgcGhvbmU6ICgpID0+IHBob25lLAogIHRhYmxldDogKCkgPT4gdGFibGV0Cn0pOwp2YXIgZGVza3RvcCwgbm90ZWJvb2ssIHRhYmxldCwgcGhhYmxldCwgcGhvbmUsIGNzc0ZvckRlc2t0b3AsIGNzc0Zvck5vdGVib29rLCBjc3NGb3JUYWJsZXQsIGNzc0ZvclBoYWJsZXQsIGNzc0ZvclBob25lOwp2YXIgaW5pdF9kb210b29sc19jc3NfYnJlYWtwb2ludHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scygpOwogICAgaW5pdF9saXQoKTsKICAgIGRlc2t0b3AgPSAxNjAwOwogICAgbm90ZWJvb2sgPSAxMjQwOwogICAgdGFibGV0ID0gMTAyNDsKICAgIHBoYWJsZXQgPSA2MDA7CiAgICBwaG9uZSA9IDQwMDsKICAgIGNzc0ZvckRlc2t0b3AgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JOb3RlYm9vayA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke25vdGVib29rfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogICAgY3NzRm9yVGFibGV0ID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHt0YWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3RhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0ZvclBoYWJsZXQgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JQaG9uZSA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3Bob25lfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMKdmFyIFNjcm9sbGVyOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX3Njcm9sbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBTY3JvbGxlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNJbnN0YW5jZTsKICAgICAgLy8gQXJyYXkgdG8gc3RvcmUgc2Nyb2xsIGNhbGxiYWNrIGZ1bmN0aW9ucy4KICAgICAgc2Nyb2xsQ2FsbGJhY2tzID0gW107CiAgICAgIC8vIExlbmlzIGluc3RhbmNlIChpZiBhY3RpdmF0ZWQpIG9yIG51bGwuCiAgICAgIGxlbmlzSW5zdGFuY2UgPSBudWxsOwogICAgICAvLyBCb3VuZCBoYW5kbGVycyB0byBhbGxvdyByZW1vdmFsIGZyb20gZXZlbnQgbGlzdGVuZXJzLgogICAgICBoYW5kbGVOYXRpdmVTY3JvbGwgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKTsKICAgICAgfTsKICAgICAgaGFuZGxlTGVuaXNTY3JvbGwgPSAoaW5mbykgPT4gewogICAgICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpOwogICAgICB9OwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc0luc3RhbmNlQXJnKSB7CiAgICAgICAgdGhpcy5kb210b29sc0luc3RhbmNlID0gZG9tdG9vbHNJbnN0YW5jZUFyZzsKICAgICAgICB0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgIH0KICAgICAgc3dlZXRTY3JvbGxlciA9IG5ldyBpbXBvcnRfc3dlZXRfc2Nyb2xsLmRlZmF1bHQoe30pOwogICAgICAvKioKICAgICAgICogU2Nyb2xscyB0byBhIGdpdmVuIGVsZW1lbnQgd2l0aCBvcHRpb25zLgogICAgICAgKi8KICAgICAgYXN5bmMgdG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN3ZWV0U2Nyb2xsZXIudG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Iob3B0aW9uc0FyZy5kdXJhdGlvbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGVjdHMgd2hldGhlciBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBlbmFibGVkLgogICAgICAgKi8KICAgICAgYXN5bmMgZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkgewogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gMTAwOwogICAgICAgIGNvbnN0IGFjY2VwdGFibGVEZWx0YURpZmZlcmVuY2UgPSAzOwogICAgICAgIGNvbnN0IG1pbmltdW1TbW9vdGhSYXRpbyA9IDAuNzU7CiAgICAgICAgY29uc3QgZXZlbnREZWx0YXMgPSBbXTsKICAgICAgICBmdW5jdGlvbiBvbldoZWVsKGV2ZW50KSB7CiAgICAgICAgICBldmVudERlbHRhcy5wdXNoKGV2ZW50LmRlbHRhWSk7CiAgICAgICAgICBpZiAoZXZlbnREZWx0YXMubGVuZ3RoID49IHNhbXBsZVNpemUpIHsKICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgb25XaGVlbCk7CiAgICAgICAgICAgIGFuYWx5emVFdmVudHMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYW5hbHl6ZUV2ZW50cygpIHsKICAgICAgICAgIGNvbnN0IHRvdGFsRGlmZnMgPSBldmVudERlbHRhcy5sZW5ndGggLSAxOwogICAgICAgICAgbGV0IHNtYWxsRGlmZkNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHRvdGFsRGlmZnM7IGkxMSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhldmVudERlbHRhc1tpMTEgKyAxXSAtIGV2ZW50RGVsdGFzW2kxMV0pOwogICAgICAgICAgICBpZiAoZGlmZiA8PSBhY2NlcHRhYmxlRGVsdGFEaWZmZXJlbmNlKSB7CiAgICAgICAgICAgICAgc21hbGxEaWZmQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgc21vb3RoUmF0aW8gPSBzbWFsbERpZmZDb3VudCAvIHRvdGFsRGlmZnM7CiAgICAgICAgICBpZiAoc21vb3RoUmF0aW8gPj0gbWluaW11bVNtb290aFJhdGlvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIGRldGVjdGVkLiIpOwogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZygiU21vb3RoIHNjcm9sbGluZyBOT1QgZGV0ZWN0ZWQuIik7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIG9uV2hlZWwpOwogICAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEVuYWJsZXMgTGVuaXMgc2Nyb2xsaW5nLgogICAgICAgKiBJZiBvcHRpb25zQXJnLmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCBpcyB0cnVlIGFuZCBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBkZXRlY3RlZCwKICAgICAgICogTGVuaXMgd2lsbCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkuCiAgICAgICAqLwogICAgICBhc3luYyBlbmFibGVMZW5pc1Njcm9sbChvcHRpb25zQXJnKSB7CiAgICAgICAgY29uc3QgbGVuaXMgPSBuZXcgTGVuaXMoewogICAgICAgICAgYXV0b1JhZjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGlmIChvcHRpb25zQXJnPy5kaXNhYmxlT25OYXRpdmVTbW9vdGhTY3JvbGwpIHsKICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKSB7CiAgICAgICAgICAgIGxlbmlzLmRlc3Ryb3koKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2UgPSBsZW5pczsKICAgICAgICB0aGlzLmRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgICAgdGhpcy5hdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCk7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gbGVuaXMuZGVzdHJveS5iaW5kKGxlbmlzKTsKICAgICAgICBsZW5pcy5kZXN0cm95ID0gKCkgPT4gewogICAgICAgICAgb3JpZ2luYWxEZXN0cm95KCk7CiAgICAgICAgICB0aGlzLmRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMuYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgb24gc2Nyb2xsLgogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggc2Nyb2xsIGV2ZW50LgogICAgICAgKi8KICAgICAgb25TY3JvbGwoY2FsbGJhY2spIHsKICAgICAgICB0aGlzLnNjcm9sbENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZXMgYWxsIHJlZ2lzdGVyZWQgc2Nyb2xsIGNhbGxiYWNrcyBjb25jdXJyZW50bHkuCiAgICAgICAqLwogICAgICBleGVjdXRlU2Nyb2xsQ2FsbGJhY2tzKCkgewogICAgICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgdGhlIG5hdGl2ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5oYW5kbGVOYXRpdmVTY3JvbGwpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCkgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEF0dGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCkgewogICAgICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vbigic2Nyb2xsIiwgdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgTGVuaXMgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLgogICAgICAgKi8KICAgICAgZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICBpZiAodGhpcy5sZW5pc0luc3RhbmNlKSB7CiAgICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2Uub2ZmKCJzY3JvbGwiLCB0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMKdmFyIFRoZW1lTWFuYWdlcjsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc190aGVtZW1hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIFRoZW1lTWFuYWdlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNSZWY7CiAgICAgIGdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICBwcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2ggPSB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiKTsKICAgICAgdGhlbWVPYnNlcnZhYmxlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5SZXBsYXlTdWJqZWN0KDEpOwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc1JlZkFyZykgewogICAgICAgIHRoaXMuZG9tdG9vbHNSZWYgPSBkb210b29sc1JlZkFyZzsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLm1hdGNoZXM7CiAgICAgICAgdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2guYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGV2ZW50QXJnLm1hdGNoZXM7CiAgICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIGFzeW5jIGVuYWJsZUF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlKCkgewogICAgICAgIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuc3R5bGUpIHsKICAgICAgICAgIHRoaXMudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSh7CiAgICAgICAgICAgIG5leHQ6IChnb0JyaWdodCkgPT4gewogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGdvQnJpZ2h0ID8gIiNmZmYiIDogIiMwMDAiOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKSB7CiAgICAgICAgdGhpcy50aGVtZU9ic2VydmFibGUubmV4dCh0aGlzLmdvQnJpZ2h0Qm9vbGVhbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gYnJpZ2h0CiAgICAgICAqLwogICAgICBnb0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRydWU7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzZXQgdGhlIHRoZW1lIG9mIHRoZSB3ZWJzaXRlIHRvIGRhcmsKICAgICAgICovCiAgICAgIGdvRGFyaygpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2ltcGx5IHRvZ2dsZSBiZXR3ZWVuIGJyaWdodCBhbmQgZGFyawogICAgICAgKi8KICAgICAgdG9nZ2xlRGFya0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9ICF0aGlzLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5rZXlib2FyZC5qcwp2YXIgS2V5LCBLZXlib2FyZDsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19rZXlib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgKGZ1bmN0aW9uKEtleTIpIHsKICAgICAgS2V5MltLZXkyWyJCYWNrc3BhY2UiXSA9IDhdID0gIkJhY2tzcGFjZSI7CiAgICAgIEtleTJbS2V5MlsiVGFiIl0gPSA5XSA9ICJUYWIiOwogICAgICBLZXkyW0tleTJbIkVudGVyIl0gPSAxM10gPSAiRW50ZXIiOwogICAgICBLZXkyW0tleTJbIlNoaWZ0Il0gPSAxNl0gPSAiU2hpZnQiOwogICAgICBLZXkyW0tleTJbIkN0cmwiXSA9IDE3XSA9ICJDdHJsIjsKICAgICAgS2V5MltLZXkyWyJBbHQiXSA9IDE4XSA9ICJBbHQiOwogICAgICBLZXkyW0tleTJbIlBhdXNlQnJlYWsiXSA9IDE5XSA9ICJQYXVzZUJyZWFrIjsKICAgICAgS2V5MltLZXkyWyJDYXBzTG9jayJdID0gMjBdID0gIkNhcHNMb2NrIjsKICAgICAgS2V5MltLZXkyWyJFc2NhcGUiXSA9IDI3XSA9ICJFc2NhcGUiOwogICAgICBLZXkyW0tleTJbIlNwYWNlIl0gPSAzMl0gPSAiU3BhY2UiOwogICAgICBLZXkyW0tleTJbIlBhZ2VVcCJdID0gMzNdID0gIlBhZ2VVcCI7CiAgICAgIEtleTJbS2V5MlsiUGFnZURvd24iXSA9IDM0XSA9ICJQYWdlRG93biI7CiAgICAgIEtleTJbS2V5MlsiRW5kIl0gPSAzNV0gPSAiRW5kIjsKICAgICAgS2V5MltLZXkyWyJIb21lIl0gPSAzNl0gPSAiSG9tZSI7CiAgICAgIEtleTJbS2V5MlsiTGVmdEFycm93Il0gPSAzN10gPSAiTGVmdEFycm93IjsKICAgICAgS2V5MltLZXkyWyJVcEFycm93Il0gPSAzOF0gPSAiVXBBcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRBcnJvdyJdID0gMzldID0gIlJpZ2h0QXJyb3ciOwogICAgICBLZXkyW0tleTJbIkRvd25BcnJvdyJdID0gNDBdID0gIkRvd25BcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiSW5zZXJ0Il0gPSA0NV0gPSAiSW5zZXJ0IjsKICAgICAgS2V5MltLZXkyWyJEZWxldGUiXSA9IDQ2XSA9ICJEZWxldGUiOwogICAgICBLZXkyW0tleTJbIlplcm8iXSA9IDQ4XSA9ICJaZXJvIjsKICAgICAgS2V5MltLZXkyWyJDbG9zZWRQYXJlbiJdID0gNDhdID0gIkNsb3NlZFBhcmVuIjsKICAgICAgS2V5MltLZXkyWyJPbmUiXSA9IDQ5XSA9ICJPbmUiOwogICAgICBLZXkyW0tleTJbIkV4Y2xhbWF0aW9uTWFyayJdID0gNDldID0gIkV4Y2xhbWF0aW9uTWFyayI7CiAgICAgIEtleTJbS2V5MlsiVHdvIl0gPSA1MF0gPSAiVHdvIjsKICAgICAgS2V5MltLZXkyWyJBdFNpZ24iXSA9IDUwXSA9ICJBdFNpZ24iOwogICAgICBLZXkyW0tleTJbIlRocmVlIl0gPSA1MV0gPSAiVGhyZWUiOwogICAgICBLZXkyW0tleTJbIlBvdW5kU2lnbiJdID0gNTFdID0gIlBvdW5kU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiSGFzaCJdID0gNTFdID0gIkhhc2giOwogICAgICBLZXkyW0tleTJbIkZvdXIiXSA9IDUyXSA9ICJGb3VyIjsKICAgICAgS2V5MltLZXkyWyJEb2xsYXJTaWduIl0gPSA1Ml0gPSAiRG9sbGFyU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRml2ZSJdID0gNTNdID0gIkZpdmUiOwogICAgICBLZXkyW0tleTJbIlBlcmNlbnRTaWduIl0gPSA1M10gPSAiUGVyY2VudFNpZ24iOwogICAgICBLZXkyW0tleTJbIlNpeCJdID0gNTRdID0gIlNpeCI7CiAgICAgIEtleTJbS2V5MlsiQ2FyZXQiXSA9IDU0XSA9ICJDYXJldCI7CiAgICAgIEtleTJbS2V5MlsiSGF0Il0gPSA1NF0gPSAiSGF0IjsKICAgICAgS2V5MltLZXkyWyJTZXZlbiJdID0gNTVdID0gIlNldmVuIjsKICAgICAgS2V5MltLZXkyWyJBbXBlcnNhbmQiXSA9IDU1XSA9ICJBbXBlcnNhbmQiOwogICAgICBLZXkyW0tleTJbIkVpZ2h0Il0gPSA1Nl0gPSAiRWlnaHQiOwogICAgICBLZXkyW0tleTJbIlN0YXIiXSA9IDU2XSA9ICJTdGFyIjsKICAgICAgS2V5MltLZXkyWyJBc3RlcmlrIl0gPSA1Nl0gPSAiQXN0ZXJpayI7CiAgICAgIEtleTJbS2V5MlsiTmluZSJdID0gNTddID0gIk5pbmUiOwogICAgICBLZXkyW0tleTJbIk9wZW5QYXJlbiJdID0gNTddID0gIk9wZW5QYXJlbiI7CiAgICAgIEtleTJbS2V5MlsiQSJdID0gNjVdID0gIkEiOwogICAgICBLZXkyW0tleTJbIkIiXSA9IDY2XSA9ICJCIjsKICAgICAgS2V5MltLZXkyWyJDIl0gPSA2N10gPSAiQyI7CiAgICAgIEtleTJbS2V5MlsiRCJdID0gNjhdID0gIkQiOwogICAgICBLZXkyW0tleTJbIkUiXSA9IDY5XSA9ICJFIjsKICAgICAgS2V5MltLZXkyWyJGIl0gPSA3MF0gPSAiRiI7CiAgICAgIEtleTJbS2V5MlsiRyJdID0gNzFdID0gIkciOwogICAgICBLZXkyW0tleTJbIkgiXSA9IDcyXSA9ICJIIjsKICAgICAgS2V5MltLZXkyWyJJIl0gPSA3M10gPSAiSSI7CiAgICAgIEtleTJbS2V5MlsiSiJdID0gNzRdID0gIkoiOwogICAgICBLZXkyW0tleTJbIksiXSA9IDc1XSA9ICJLIjsKICAgICAgS2V5MltLZXkyWyJMIl0gPSA3Nl0gPSAiTCI7CiAgICAgIEtleTJbS2V5MlsiTSJdID0gNzddID0gIk0iOwogICAgICBLZXkyW0tleTJbIk4iXSA9IDc4XSA9ICJOIjsKICAgICAgS2V5MltLZXkyWyJPIl0gPSA3OV0gPSAiTyI7CiAgICAgIEtleTJbS2V5MlsiUCJdID0gODBdID0gIlAiOwogICAgICBLZXkyW0tleTJbIlEiXSA9IDgxXSA9ICJRIjsKICAgICAgS2V5MltLZXkyWyJSIl0gPSA4Ml0gPSAiUiI7CiAgICAgIEtleTJbS2V5MlsiUyJdID0gODNdID0gIlMiOwogICAgICBLZXkyW0tleTJbIlQiXSA9IDg0XSA9ICJUIjsKICAgICAgS2V5MltLZXkyWyJVIl0gPSA4NV0gPSAiVSI7CiAgICAgIEtleTJbS2V5MlsiViJdID0gODZdID0gIlYiOwogICAgICBLZXkyW0tleTJbIlciXSA9IDg3XSA9ICJXIjsKICAgICAgS2V5MltLZXkyWyJYIl0gPSA4OF0gPSAiWCI7CiAgICAgIEtleTJbS2V5MlsiWSJdID0gODldID0gIlkiOwogICAgICBLZXkyW0tleTJbIloiXSA9IDkwXSA9ICJaIjsKICAgICAgS2V5MltLZXkyWyJMZWZ0V2luZG93S2V5Il0gPSA5MV0gPSAiTGVmdFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRXaW5kb3dLZXkiXSA9IDkyXSA9ICJSaWdodFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiU2VsZWN0S2V5Il0gPSA5M10gPSAiU2VsZWN0S2V5IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQwIl0gPSA5Nl0gPSAiTnVtcGFkMCI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkMSJdID0gOTddID0gIk51bXBhZDEiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDIiXSA9IDk4XSA9ICJOdW1wYWQyIjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQzIl0gPSA5OV0gPSAiTnVtcGFkMyI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNCJdID0gMTAwXSA9ICJOdW1wYWQ0IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ1Il0gPSAxMDFdID0gIk51bXBhZDUiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDYiXSA9IDEwMl0gPSAiTnVtcGFkNiI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNyJdID0gMTAzXSA9ICJOdW1wYWQ3IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ4Il0gPSAxMDRdID0gIk51bXBhZDgiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDkiXSA9IDEwNV0gPSAiTnVtcGFkOSI7CiAgICAgIEtleTJbS2V5MlsiTXVsdGlwbHkiXSA9IDEwNl0gPSAiTXVsdGlwbHkiOwogICAgICBLZXkyW0tleTJbIkFkZCJdID0gMTA3XSA9ICJBZGQiOwogICAgICBLZXkyW0tleTJbIlN1YnRyYWN0Il0gPSAxMDldID0gIlN1YnRyYWN0IjsKICAgICAgS2V5MltLZXkyWyJEZWNpbWFsUG9pbnQiXSA9IDExMF0gPSAiRGVjaW1hbFBvaW50IjsKICAgICAgS2V5MltLZXkyWyJEaXZpZGUiXSA9IDExMV0gPSAiRGl2aWRlIjsKICAgICAgS2V5MltLZXkyWyJGMSJdID0gMTEyXSA9ICJGMSI7CiAgICAgIEtleTJbS2V5MlsiRjIiXSA9IDExM10gPSAiRjIiOwogICAgICBLZXkyW0tleTJbIkYzIl0gPSAxMTRdID0gIkYzIjsKICAgICAgS2V5MltLZXkyWyJGNCJdID0gMTE1XSA9ICJGNCI7CiAgICAgIEtleTJbS2V5MlsiRjUiXSA9IDExNl0gPSAiRjUiOwogICAgICBLZXkyW0tleTJbIkY2Il0gPSAxMTddID0gIkY2IjsKICAgICAgS2V5MltLZXkyWyJGNyJdID0gMTE4XSA9ICJGNyI7CiAgICAgIEtleTJbS2V5MlsiRjgiXSA9IDExOV0gPSAiRjgiOwogICAgICBLZXkyW0tleTJbIkY5Il0gPSAxMjBdID0gIkY5IjsKICAgICAgS2V5MltLZXkyWyJGMTAiXSA9IDEyMV0gPSAiRjEwIjsKICAgICAgS2V5MltLZXkyWyJGMTEiXSA9IDEyMl0gPSAiRjExIjsKICAgICAgS2V5MltLZXkyWyJGMTIiXSA9IDEyM10gPSAiRjEyIjsKICAgICAgS2V5MltLZXkyWyJOdW1Mb2NrIl0gPSAxNDRdID0gIk51bUxvY2siOwogICAgICBLZXkyW0tleTJbIlNjcm9sbExvY2siXSA9IDE0NV0gPSAiU2Nyb2xsTG9jayI7CiAgICAgIEtleTJbS2V5MlsiU2VtaUNvbG9uIl0gPSAxODZdID0gIlNlbWlDb2xvbiI7CiAgICAgIEtleTJbS2V5MlsiRXF1YWxzIl0gPSAxODddID0gIkVxdWFscyI7CiAgICAgIEtleTJbS2V5MlsiQ29tbWEiXSA9IDE4OF0gPSAiQ29tbWEiOwogICAgICBLZXkyW0tleTJbIkRhc2giXSA9IDE4OV0gPSAiRGFzaCI7CiAgICAgIEtleTJbS2V5MlsiUGVyaW9kIl0gPSAxOTBdID0gIlBlcmlvZCI7CiAgICAgIEtleTJbS2V5MlsiVW5kZXJTY29yZSJdID0gMTg5XSA9ICJVbmRlclNjb3JlIjsKICAgICAgS2V5MltLZXkyWyJQbHVzU2lnbiJdID0gMTg3XSA9ICJQbHVzU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRm9yd2FyZFNsYXNoIl0gPSAxOTFdID0gIkZvcndhcmRTbGFzaCI7CiAgICAgIEtleTJbS2V5MlsiVGlsZGUiXSA9IDE5Ml0gPSAiVGlsZGUiOwogICAgICBLZXkyW0tleTJbIkdyYXZlQWNjZW50Il0gPSAxOTJdID0gIkdyYXZlQWNjZW50IjsKICAgICAgS2V5MltLZXkyWyJPcGVuQnJhY2tldCJdID0gMjE5XSA9ICJPcGVuQnJhY2tldCI7CiAgICAgIEtleTJbS2V5MlsiQ2xvc2VkQnJhY2tldCJdID0gMjIxXSA9ICJDbG9zZWRCcmFja2V0IjsKICAgICAgS2V5MltLZXkyWyJRdW90ZSJdID0gMjIyXSA9ICJRdW90ZSI7CiAgICB9KShLZXkgfHwgKEtleSA9IHt9KSk7CiAgICBLZXlib2FyZCA9IGNsYXNzIHsKICAgICAgZG9tTm9kZTsKICAgICAgbWFwQ29tYm9zVG9IYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHByZXNzZWRLZXlzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgY29uc3RydWN0b3IoZG9tTm9kZSkgewogICAgICAgIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7CiAgICAgICAgdGhpcy5zdGFydExpc3RlbmluZygpOwogICAgICB9CiAgICAgIGtleUVudW0gPSBLZXk7CiAgICAgIG9uKGtleXMyKSB7CiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJLZXlzKGtleXMyLCBzdWJqZWN0KTsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfQogICAgICB0cmlnZ2VyS2V5UHJlc3Moa2V5c0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmFkZChrZXkyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cygpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIHN0b3BMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpOwogICAgICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5jbGVhcigpOwogICAgICAgIHRoaXMucHJlc3NlZEtleXMuY2xlYXIoKTsKICAgICAgfQogICAgICBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5hZGQoZXZlbnQua2V5Q29kZSk7CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhldmVudCk7CiAgICAgIH07CiAgICAgIGNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKHBheWxvYWRBcmcpIHsKICAgICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuZm9yRWFjaCgoc3ViamVjdEFyZywga2V5c0FyZykgPT4gewogICAgICAgICAgaWYgKHRoaXMuYXJlQWxsS2V5c1ByZXNzZWQoa2V5c0FyZykpIHsKICAgICAgICAgICAgc3ViamVjdEFyZy5uZXh0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGhhbmRsZUtleVVwID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5kZWxldGUoZXZlbnQua2V5Q29kZSk7CiAgICAgIH07CiAgICAgIGFyZUFsbEtleXNQcmVzc2VkKGtleXNBcmcpIHsKICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICBrZXlzQXJnLmZvckVhY2goKGtleTIpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5wcmVzc2VkS2V5cy5oYXMoa2V5MikpIHsKICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZWdpc3RlcktleXMoa2V5c0FyZywgc3ViamVjdEFyZykgewogICAgICAgIGlmICghdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmhhcyhrZXlzQXJnKSkgewogICAgICAgICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLnNldChrZXlzQXJnLCBzdWJqZWN0QXJnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5nZXQoa2V5c0FyZyk7CiAgICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcwp2YXIgRG9tVG9vbHM7CnZhciBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfc2Nyb2xsZXIoKTsKICAgIGluaXRfZGlzdF90czI3KCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfdGhlbWVtYW5hZ2VyKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfa2V5Ym9hcmQoKTsKICAgIERvbVRvb2xzID0gY2xhc3MgX0RvbVRvb2xzIHsKICAgICAgLy8gPT09PT09CiAgICAgIC8vIFNUQVRJQwogICAgICAvLyA9PT09PT0KICAgICAgc3RhdGljIGluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBzZXR1cHMgZG9tdG9vbHMKICAgICAgICovCiAgICAgIHN0YXRpYyBhc3luYyBzZXR1cERvbVRvb2xzKG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwgJiYgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2U7CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwpIHsKICAgICAgICAgIF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBsZXQgZG9tVG9vbHNJbnN0YW5jZTsKICAgICAgICAgICAgaWYgKCFnbG9iYWxUaGlzLmRlZXNEb21Ub29scykgewogICAgICAgICAgICAgIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgICAgY29uc3QgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jID0gKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJpbnRlcmFjdGl2ZSIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmhlYWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmJvZHlFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmtleWJvYXJkID0gbmV3IEtleWJvYXJkKGRvY3VtZW50LmJvZHkpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVJlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiaW50ZXJhY3RpdmUiIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2VkRnVuYygpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIiwgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnByb21pc2U7CiAgICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgICAgfSkoKTsKICAgICAgICAgIHJldHVybiBhd2FpdCBfRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBkb21Ub29sc0luc3RhbmNlID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaWYgeW91IGNhbiwgdXNlIHRoZSBzdGF0aWMgYXN5c25jIC5zZXR1cERvbVRvb2xzKCkgZnVuY3Rpb24gaW5zdGVhZCBzaW5jZSBpdCBpcyBzYWZlciB0byB1c2UuCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkgewogICAgICAgIGNvbnN0IGdsb2JhbERvbVRvb2xzID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgaWYgKCFnbG9iYWxEb21Ub29scykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgdHJpZWQgdG8gYWNjZXNzIGRvbXRvb2xzIHN5bmNocm9ub3VzbHkgdG9vIGVhcmx5Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgfQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBJTlNUQU5DRQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBlbGVtZW50cwogICAgICBlbGVtZW50cyA9IHsKICAgICAgICBoZWFkRWxlbWVudDogbnVsbCwKICAgICAgICBib2R5RWxlbWVudDogbnVsbAogICAgICB9OwogICAgICB3ZWJzZXR1cCA9IG5ldyBXZWJTZXR1cCh7CiAgICAgICAgbWV0YU9iamVjdDogewogICAgICAgICAgdGl0bGU6ICIiCiAgICAgICAgfQogICAgICB9KTsKICAgICAgc21hcnRzdGF0ZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyMS5TbWFydHN0YXRlKCk7CiAgICAgIGRvbVRvb2xzU3RhdGVQYXJ0ID0gdGhpcy5zbWFydHN0YXRlLmdldFN0YXRlUGFydCgiZG9tdG9vbHMiLCB7CiAgICAgICAgdmlydHVhbFZpZXdwb3J0OiAibmF0aXZlIiwKICAgICAgICBqd3Q6IG51bGwKICAgICAgfSk7CiAgICAgIHJvdXRlciA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxOC5TbWFydFJvdXRlcih7CiAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb252ZW5pZW5jZSA9IHsKICAgICAgICB0eXBlZHJlcXVlc3Q6IGRpc3RfdHNfZXhwb3J0czE1LAogICAgICAgIHNtYXJ0ZGVsYXk6IGRpc3RfdHNfZXhwb3J0czMsCiAgICAgICAgc21hcnRqc29uOiBkaXN0X3RzX2V4cG9ydHMxMiwKICAgICAgICBzbWFydHVybDogZGlzdF90c19leHBvcnRzMjIKICAgICAgfTsKICAgICAgZGVlc0NvbW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czE2LkRlZXNDb21tcygpOwogICAgICBzY3JvbGxlciA9IG5ldyBTY3JvbGxlcih0aGlzKTsKICAgICAgdGhlbWVNYW5hZ2VyID0gbmV3IFRoZW1lTWFuYWdlcih0aGlzKTsKICAgICAga2V5Ym9hcmQgPSBudWxsOwogICAgICAvLyBJbml0aWFsaXplZCBhZnRlciBET00gcmVhZHkgdG8gYXZvaWQgYWNjZXNzaW5nIGRvY3VtZW50LmJvZHkgYmVmb3JlIGl0IGV4aXN0cwogICAgICBkb21Ub29sc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGRvbVJlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGdsb2JhbFN0eWxlc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgfQogICAgICBydW5PbmNlVHJhY2tlclN0cmluZ01hcCA9IG5ldyBsaWsuU3RyaW5nbWFwKCk7CiAgICAgIHJ1bk9uY2VSZXN1bHRNYXAgPSBuZXcgbGlrLkZhc3RNYXAoKTsKICAgICAgcnVuT25jZUVycm9yTWFwID0gbmV3IGxpay5GYXN0TWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBydW4gYSBmdW5jdGlvbiBvbmNlIGFuZCBhbHdheXMgZ2V0IHRoZSBQcm9taXNlIG9mIHRoZSBmaXJzdCBleGVjdXRpb24KICAgICAgICogQHBhcmFtIGlkZW50aWZpZXJBcmcgdGhlIGluZGVudGlmaWVyIGFyZyBpZGVudGlmaWVzIGZ1bmN0aW9ucy4gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllciBhcmUgY29uc2lkZXJlZCBlcXVhbAogICAgICAgKiBAcGFyYW0gZnVuY0FyZyB0aGUgYWN0dWFsIGZ1bmMgYXJnIHRvIHJ1bgogICAgICAgKi8KICAgICAgYXN5bmMgcnVuT25jZShpZGVudGlmaWVyQXJnLCBmdW5jQXJnKSB7CiAgICAgICAgY29uc3QgcnVubmluZ0lkID0gYCR7aWRlbnRpZmllckFyZ30rcnVubmluZ0NoZWNrYDsKICAgICAgICBpZiAoIXRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuY2hlY2tTdHJpbmcoaWRlbnRpZmllckFyZykpIHsKICAgICAgICAgIHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGlkZW50aWZpZXJBcmcpOwogICAgICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5hZGRTdHJpbmcocnVubmluZ0lkKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZ1bmNBcmcoKTsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmFkZFRvTWFwKGlkZW50aWZpZXJBcmcsIHJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VFcnJvck1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCBlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLnJlbW92ZVN0cmluZyhydW5uaW5nSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZSgoc3RyaW5nTWFwKSA9PiB7CiAgICAgICAgICByZXR1cm4gIXN0cmluZ01hcC5pbmNsdWRlcyhydW5uaW5nSWQpOwogICAgICAgIH0sICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5ydW5PbmNlRXJyb3JNYXAuZ2V0QnlLZXkoaWRlbnRpZmllckFyZyk7CiAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmdldEJ5S2V5KGlkZW50aWZpZXJBcmcpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIHNldFN0dWZmCiAgICAgIC8qKgogICAgICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXMKICAgICAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldAogICAgICAgKi8KICAgICAgYXN5bmMgc2V0R2xvYmFsU3R5bGVzKHN0eWxlc1RleHQpIHsKICAgICAgICBhd2FpdCB0aGlzLmRvbVJlYWR5LnByb21pc2U7CiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0eWxlc1RleHQpKTsKICAgICAgICB0aGlzLmVsZW1lbnRzLmhlYWRFbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyB0byBzZXQgZ2xvYmFsIHN0eWxlcwogICAgICAgKiBAcGFyYW0gc3R5bGVzVGV4dCB0aGUgY3NzIHRleHQgeW91IHdhbnQgdG8gc2V0CiAgICAgICAqLwogICAgICBhc3luYyBzZXRFeHRlcm5hbFNjcmlwdChzY3JpcHRMaW5rQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0TGlua0FyZzsKICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keTsKICAgICAgICBwYXJlbnROb2RlLmFwcGVuZChzY3JpcHQpOwogICAgICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgZXh0ZXJuYWwgY3NzIGZpbGVzCiAgICAgICAqIEBwYXJhbSBjc3NMaW5rQXJnIGEgdXJsIHRvIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQKICAgICAgICovCiAgICAgIGFzeW5jIHNldEV4dGVybmFsQ3NzKGNzc0xpbmtBcmcpIHsKICAgICAgICBjb25zdCBjc3NUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7CiAgICAgICAgY3NzVGFnLnJlbCA9ICJzdHlsZXNoZWV0IjsKICAgICAgICBjc3NUYWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKICAgICAgICBjc3NUYWcuaHJlZiA9IGNzc0xpbmtBcmc7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoY3NzVGFnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgb2Ygd2Vic2l0ZSBpbmZvcwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyB0aGUgd2Vic2l0ZSBpbmZvCiAgICAgICAqLwogICAgICBhc3luYyBzZXRXZWJzaXRlSW5mbyhvcHRpb25zQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5zZXR1cChvcHRpb25zQXJnKTsKICAgICAgICBhd2FpdCB0aGlzLndlYnNldHVwLnJlYWR5UHJvbWlzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcwp2YXIgc2Nyb2xsQmFyU3R5bGVzLCBnbG9iYWxCYXNlU3R5bGVzOwp2YXIgaW5pdF9kb210b29sc19jc3NfYmFzZXN0eWxlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzY3JvbGxCYXJTdHlsZXMgPSAoKCkgPT4gewogICAgICBjb25zdCByZXR1cm5TdHlsZXNPbGQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1hYyBPUyBYIikgPT09IC0xID8gaWBgLmNzc1RleHQgOiBgYDsKICAgICAgY29uc3QgcmV0dXJuU3R5bGVzID0gaWAKICAgIC8qIHdpZHRoICovCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgd2lkdGg6IDBweDsKICAgIH0KICAgIGJvZHkgewogICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICB9CiAgYC5jc3NUZXh0OwogICAgICByZXR1cm4gcmV0dXJuU3R5bGVzOwogICAgfSkoKTsKICAgIGdsb2JhbEJhc2VTdHlsZXMgPSBpYAogIC8qCiAgQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbWF0ZXJpYWxpY29ucy92NDIvZmxVaFJxNnR6WmNsUUVKLVZkZy1JdWlhRHNOY0loUTh0US53b2ZmMikKICAgICAgZm9ybWF0KCd3b2ZmMicpOwogIH0gKi8KCiAgLyogZ2xvYmFsIGJvZHkgc3R5bGVzICovCiAgYm9keSB7CiAgICBtYXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi8KICAke3Ioc2Nyb2xsQmFyU3R5bGVzKX0KYC5jc3NUZXh0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmVsZW1lbnRiYXNpYy5qcwp2YXIgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMsIHsKICBzZXR1cDogKCkgPT4gc2V0dXAsCiAgc3RhdGljU3R5bGVzOiAoKSA9PiBzdGF0aWNTdHlsZXMsCiAgc3R5bGVzOiAoKSA9PiBzdHlsZXMKfSk7CnZhciBzdGF0aWNTdHlsZXMsIHN0eWxlcywgc2V0dXA7CnZhciBpbml0X2RvbXRvb2xzX2VsZW1lbnRiYXNpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5lbGVtZW50YmFzaWMuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2Jhc2VzdHlsZXMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzdGF0aWNTdHlsZXMgPSBpYAogICogewogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIDpob3N0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogIH0KCiAgJHtyKHNjcm9sbEJhclN0eWxlcyl9CmA7CiAgICBzdHlsZXMgPSBiMmAKICA8c3R5bGU+CiAgICAqIHsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAke3Njcm9sbEJhclN0eWxlc30KICA8L3N0eWxlPgpgOwogICAgc2V0dXAgPSBhc3luYyAoZWxlbWVudEFyZywgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IGRvbVRvb2xzID0gYXdhaXQgRG9tVG9vbHMuc2V0dXBEb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgaWYgKGVsZW1lbnRBcmcpIHsKICAgICAgfQogICAgICBkb21Ub29scy5ydW5PbmNlKCJlbGVtZW50QmFzaWNTZXR1cCIsIGFzeW5jICgpID0+IHsKICAgICAgICBkb21Ub29scy5zZXRHbG9iYWxTdHlsZXMoZ2xvYmFsQmFzZVN0eWxlcyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9tVG9vbHM7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcwp2YXIgZG9tdG9vbHNfY3NzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfY3NzX2V4cG9ydHMsIHsKICBjc3NHcmlkQ29sdW1uczogKCkgPT4gY3NzR3JpZENvbHVtbnMKfSk7CnZhciBjc3NHcmlkQ29sdW1uczsKdmFyIGluaXRfZG9tdG9vbHNfY3NzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuOC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcyIoKSB7CiAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgbGV0IHJldHVyblN0cmluZyA9IGBgOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBhbW91bnRPZkNvbHVtbnNBcmc7IGkxMSsrKSB7CiAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcwp2YXIgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cywgewogIFN3ZWV0U2Nyb2xsOiAoKSA9PiBpbXBvcnRfc3dlZXRfc2Nyb2xsMi5kZWZhdWx0LAogIHNtYXJ0ZGVsYXk6ICgpID0+IGRpc3RfdHNfZXhwb3J0czMsCiAgc21hcnRtYXJrZG93bjogKCkgPT4gZGlzdF90c19leHBvcnRzMTcsCiAgc21hcnRwcm9taXNlOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMsCiAgc21hcnRyb3V0ZXI6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE4LAogIHNtYXJ0cng6ICgpID0+IGRpc3RfdHNfZXhwb3J0czIsCiAgc21hcnRzdGF0ZTogKCkgPT4gZGlzdF90c19leHBvcnRzMjEsCiAgc21hcnRzdHJpbmc6ICgpID0+IGRpc3RfdHNfZXhwb3J0czExLAogIHNtYXJ0dXJsOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyMiwKICB0eXBlZHJlcXVlc3Q6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE1Cn0pOwp2YXIgaW1wb3J0X3N3ZWV0X3Njcm9sbDI7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbmV4cG9ydHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy44L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbXBvcnRfc3dlZXRfc2Nyb2xsMiA9IF9fdG9FU00ocmVxdWlyZV9zd2VldF9zY3JvbGwoKSwgMSk7CiAgICBpbml0X2Rpc3RfdHMyMSgpOwogICAgaW5pdF9kaXN0X3RzMTgoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMigpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjgsIHsKICBEb21Ub29sczogKCkgPT4gRG9tVG9vbHMsCiAgVHlwZWRSZXF1ZXN0OiAoKSA9PiBUeXBlZFJlcXVlc3QsCiAgYnJlYWtwb2ludHM6ICgpID0+IGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLAogIGNzczogKCkgPT4gZG9tdG9vbHNfY3NzX2V4cG9ydHMsCiAgZWxlbWVudEJhc2ljOiAoKSA9PiBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cywKICBwbHVnaW5zOiAoKSA9PiBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMKfSk7CnZhciBpbml0X2Rpc3RfdHMyOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjgvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NvbG9ycygpOwogICAgaW5pdF9kb210b29sc19lbGVtZW50YmFzaWMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NzcygpOwogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9kaXN0X3RzMjcoKTsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2luZXhwb3J0cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzCnZhciBpc291bmlxdWUzLCBsaXQ7CnZhciBpbml0X3BsdWdpbnMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzIigpIHsKICAgIGlzb3VuaXF1ZTMgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X3Byb3BlcnR5MigpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGxpdCA9IHsKICAgICAgY3NzOiBpLAogICAgICB1bnNhZmVDU1M6IHIsCiAgICAgIExpdEVsZW1lbnQ6IGk0LAogICAgICBwcm9wZXJ0eTogbjUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjYvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuY3NzbWFuYWdlci5qcwp2YXIgQ3NzTWFuYWdlcjsKdmFyIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmNzc21hbmFnZXIuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfcGx1Z2luczMoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBDc3NNYW5hZ2VyID0gY2xhc3MgX0Nzc01hbmFnZXIgewogICAgICAvLyBTVEFUSUMKICAgICAgc3RhdGljIGluc3RhbmNlID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBDc3NNYW5hZ2VyCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0U2luZ2xldG9uKCkgewogICAgICAgIGlmICghX0Nzc01hbmFnZXIuaW5zdGFuY2UpIHsKICAgICAgICAgIF9Dc3NNYW5hZ2VyLmluc3RhbmNlID0gbmV3IF9Dc3NNYW5hZ2VyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfQ3NzTWFuYWdlci5pbnN0YW5jZTsKICAgICAgfQogICAgICAvLyBJTlNUQU5DRQogICAgICBkb210b29sc1Byb21pc2UgPSBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGdvQnJpZ2h0ID0gZmFsc2U7CiAgICAgIGJkVmFyVHJpcGxldFN0b3JlID0gW107CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICBkb210b29sc0FyZy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAoZ29CcmlnaHRBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5nb0JyaWdodCA9IGdvQnJpZ2h0QXJnOwogICAgICAgICAgICBhd2FpdCBkb210b29sc0FyZy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgICAgICBmb3IgKGNvbnN0IGJkVHJpcGxldEFyZyBvZiB0aGlzLmJkVmFyVHJpcGxldFN0b3JlKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShiZFRyaXBsZXRBcmcuY3NzVmFyTmFtZSwgdGhpcy5nb0JyaWdodCA/IGJkVHJpcGxldEFyZy5icmlnaHRWYWx1ZSA6IGJkVHJpcGxldEFyZy5kYXJrVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBnZXQgZGVmYXVsdFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc3RhdGljU3R5bGVzOwogICAgICB9CiAgICAgIGNzc0ZvckRlc2t0b3AoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvckRlc2t0b3AoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0Zvck5vdGVib29rKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JOb3RlYm9vayhjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgY3NzRm9yVGFibGV0KGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JUYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBoYWJsZXQoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvclBoYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBob25lKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JQaG9uZShjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgYmRUaGVtZShicmlnaHRWYWx1ZUFyZywgZGFya1ZhbHVlQXJnKSB7CiAgICAgICAgbGV0IHJldHVybkNzc1ZhcjsKICAgICAgICBsZXQgZGVmYXVsdFZhbHVlOwogICAgICAgIGlmIChEb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKSkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbiA/IGJyaWdodFZhbHVlQXJnIDogZGFya1ZhbHVlQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkYXJrVmFsdWVBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGV4aXN0aW5nVHJpcGxldCA9IHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUuZmluZCgodHJpcGxldEFyZykgPT4gdHJpcGxldEFyZy5kYXJrVmFsdWUgPT09IGRhcmtWYWx1ZUFyZyAmJiB0cmlwbGV0QXJnLmJyaWdodFZhbHVlID09PSBicmlnaHRWYWx1ZUFyZyk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHJpcGxldCkgewogICAgICAgICAgcmV0dXJuQ3NzVmFyID0gZXhpc3RpbmdUcmlwbGV0LmNzc1Zhck5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld1RyaXBsZXQgPSB7CiAgICAgICAgICAgIGNzc1Zhck5hbWU6IGAtLSR7aXNvdW5pcXVlMy51bmkoKX1gLAogICAgICAgICAgICBicmlnaHRWYWx1ZTogYnJpZ2h0VmFsdWVBcmcsCiAgICAgICAgICAgIGRhcmtWYWx1ZTogZGFya1ZhbHVlQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5iZFZhclRyaXBsZXRTdG9yZS5wdXNoKG5ld1RyaXBsZXQpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UudGhlbihhc3luYyAoZG9tdG9vbHNBcmcpID0+IHsKICAgICAgICAgICAgYXdhaXQgZG9tdG9vbHNBcmcuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShuZXdUcmlwbGV0LmNzc1Zhck5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybkNzc1ZhciA9IG5ld1RyaXBsZXQuY3NzVmFyTmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpdC51bnNhZmVDU1MoYHZhcigke3JldHVybkNzc1Zhcn0sICR7ZGVmYXVsdFZhbHVlfSlgKTsKICAgICAgfQogICAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgICBsZXQgcmV0dXJuU3RyaW5nID0gYGA7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpMTErKykgewogICAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXQudW5zYWZlQ1NTKHJldHVyblN0cmluZyk7CiAgICAgIH07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcwp2YXIgYTMsIG83LCBzNSwgaTUsIGwzLCBuNiwgdTMsIGM0LCAkMjsKdmFyIGluaXRfc3RhdGljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBhMyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCIiKSwgbzcgPSAodDkpID0+IHsKICAgICAgaWYgKHQ5Py5yID09PSBhMykgcmV0dXJuIHQ5Py5fJGxpdFN0YXRpYyQ7CiAgICB9LCBzNSA9ICh0OSkgPT4gKHsgXyRsaXRTdGF0aWMkOiB0OSwgcjogYTMgfSksIGk1ID0gKHQ5LCAuLi5yMTEpID0+ICh7IF8kbGl0U3RhdGljJDogcjExLnJlZHVjZSgocjEyLCBlMTEsIGE1KSA9PiByMTIgKyAoKHQxMCkgPT4gewogICAgICBpZiAodm9pZCAwICE9PSB0MTAuXyRsaXRTdGF0aWMkKSByZXR1cm4gdDEwLl8kbGl0U3RhdGljJDsKICAgICAgdGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7dDEwfS4gVXNlICd1bnNhZmVTdGF0aWMnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApOwogICAgfSkoZTExKSArIHQ5W2E1ICsgMV0sIHQ5WzBdKSwgcjogYTMgfSksIGwzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgbjYgPSAodDkpID0+IChyMTEsIC4uLmUxMSkgPT4gewogICAgICBjb25zdCBhNSA9IGUxMS5sZW5ndGg7CiAgICAgIGxldCBzMTAsIGkxMTsKICAgICAgY29uc3QgbjEyID0gW10sIHU3ID0gW107CiAgICAgIGxldCBjMTEsICQ0ID0gMCwgZjcgPSBmYWxzZTsKICAgICAgZm9yICg7ICQ0IDwgYTU7ICkgewogICAgICAgIGZvciAoYzExID0gcjExWyQ0XTsgJDQgPCBhNSAmJiB2b2lkIDAgIT09IChpMTEgPSBlMTFbJDRdLCBzMTAgPSBvNyhpMTEpKTsgKSBjMTEgKz0gczEwICsgcjExWysrJDRdLCBmNyA9IHRydWU7CiAgICAgICAgJDQgIT09IGE1ICYmIHU3LnB1c2goaTExKSwgbjEyLnB1c2goYzExKSwgJDQrKzsKICAgICAgfQogICAgICBpZiAoJDQgPT09IGE1ICYmIG4xMi5wdXNoKHIxMVthNV0pLCBmNykgewogICAgICAgIGNvbnN0IHQxMCA9IG4xMi5qb2luKCIkJGxpdCQkIik7CiAgICAgICAgdm9pZCAwID09PSAocjExID0gbDMuZ2V0KHQxMCkpICYmIChuMTIucmF3ID0gbjEyLCBsMy5zZXQodDEwLCByMTEgPSBuMTIpKSwgZTExID0gdTc7CiAgICAgIH0KICAgICAgcmV0dXJuIHQ5KHIxMSwgLi4uZTExKTsKICAgIH0sIHUzID0gbjYoYjIpLCBjNCA9IG42KHcpLCAkMiA9IG42KFQpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvc3RhdGljLWh0bWwuanMKdmFyIGluaXRfc3RhdGljX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9zdGF0aWMtaHRtbC5qcyIoKSB7CiAgICBpbml0X3N0YXRpYygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcwp2YXIgdDMsIGU0LCBpNjsKdmFyIGluaXRfZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcyIoKSB7CiAgICB0MyA9IHsgQVRUUklCVVRFOiAxLCBDSElMRDogMiwgUFJPUEVSVFk6IDMsIEJPT0xFQU5fQVRUUklCVVRFOiA0LCBFVkVOVDogNSwgRUxFTUVOVDogNiB9LCBlNCA9ICh0OSkgPT4gKC4uLmUxMSkgPT4gKHsgXyRsaXREaXJlY3RpdmUkOiB0OSwgdmFsdWVzOiBlMTEgfSk7CiAgICBpNiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDkpIHsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgXyRBVCh0OSwgZTExLCBpMTEpIHsKICAgICAgICB0aGlzLl8kQ3QgPSB0OSwgdGhpcy5fJEFNID0gZTExLCB0aGlzLl8kQ2kgPSBpMTE7CiAgICAgIH0KICAgICAgXyRBUyh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHQ5LCBlMTEpOwogICAgICB9CiAgICAgIHVwZGF0ZSh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKC4uLmUxMSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgZTUsIG84Owp2YXIgaW5pdF91bnNhZmVfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBlNSA9IGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihpMTEpIHsKICAgICAgICBpZiAoc3VwZXIoaTExKSwgdGhpcy5pdCA9IEEsIGkxMS50eXBlICE9PSB0My5DSElMRCkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgYmluZGluZ3MiKTsKICAgICAgfQogICAgICByZW5kZXIocjExKSB7CiAgICAgICAgaWYgKHIxMSA9PT0gQSB8fCBudWxsID09IHIxMSkgcmV0dXJuIHRoaXMuX3QgPSB2b2lkIDAsIHRoaXMuaXQgPSByMTE7CiAgICAgICAgaWYgKHIxMSA9PT0gRSkgcmV0dXJuIHIxMTsKICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIHIxMSkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbGxlZCB3aXRoIGEgbm9uLXN0cmluZyB2YWx1ZSIpOwogICAgICAgIGlmIChyMTEgPT09IHRoaXMuaXQpIHJldHVybiB0aGlzLl90OwogICAgICAgIHRoaXMuaXQgPSByMTE7CiAgICAgICAgY29uc3QgczEwID0gW3IxMV07CiAgICAgICAgcmV0dXJuIHMxMC5yYXcgPSBzMTAsIHRoaXMuX3QgPSB7IF8kbGl0VHlwZSQ6IHRoaXMuY29uc3RydWN0b3IucmVzdWx0VHlwZSwgc3RyaW5nczogczEwLCB2YWx1ZXM6IFtdIH07CiAgICAgIH0KICAgIH07CiAgICBlNS5kaXJlY3RpdmVOYW1lID0gInVuc2FmZUhUTUwiLCBlNS5yZXN1bHRUeXBlID0gMTsKICAgIG84ID0gZTQoZTUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgaW5pdF91bnNhZmVfaHRtbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfdW5zYWZlX2h0bWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMKdmFyIHQ0Owp2YXIgaW5pdF9jdXN0b21fZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgdDQgPSAodDkpID0+IChlMTEsIG8xMykgPT4gewogICAgICB2b2lkIDAgIT09IG8xMyA/IG8xMy5hZGRJbml0aWFsaXplcigoKSA9PiB7CiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQ5LCBlMTEpOwogICAgICB9KSA6IGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0OSwgZTExKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzL2N1c3RvbS1lbGVtZW50LmpzCnZhciBpbml0X2N1c3RvbV9lbGVtZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9jdXN0b21fZWxlbWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qcwpmdW5jdGlvbiByNShyMTEpIHsKICByZXR1cm4gbjUoeyAuLi5yMTEsIHN0YXRlOiB0cnVlLCBhdHRyaWJ1dGU6IGZhbHNlIH0pOwp9CnZhciBpbml0X3N0YXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanMiKCkgewogICAgaW5pdF9wcm9wZXJ0eSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzCmZ1bmN0aW9uIHQ1KHQ5KSB7CiAgcmV0dXJuIChuMTIsIG8xMykgPT4gewogICAgY29uc3QgYzExID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgbjEyID8gbjEyIDogbjEyW28xM107CiAgICBPYmplY3QuYXNzaWduKGMxMSwgdDkpOwogIH07Cn0KdmFyIGluaXRfZXZlbnRfb3B0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvZXZlbnQtb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanMKdmFyIGU2Owp2YXIgaW5pdF9iYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9iYXNlLmpzIigpIHsKICAgIGU2ID0gKGUxMSwgdDksIGMxMSkgPT4gKGMxMS5jb25maWd1cmFibGUgPSB0cnVlLCBjMTEuZW51bWVyYWJsZSA9IHRydWUsIFJlZmxlY3QuZGVjb3JhdGUgJiYgIm9iamVjdCIgIT0gdHlwZW9mIHQ5ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHQ5LCBjMTEpLCBjMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qcwpmdW5jdGlvbiBlNyhlMTEsIHIxMSkgewogIHJldHVybiAobjEyLCBzMTAsIGkxMSkgPT4gewogICAgY29uc3QgbzEzID0gKHQ5KSA9PiB0OS5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKGUxMSkgPz8gbnVsbDsKICAgIGlmIChyMTEpIHsKICAgICAgY29uc3QgeyBnZXQ6IGUxMiwgc2V0OiByMTIgfSA9ICJvYmplY3QiID09IHR5cGVvZiBzMTAgPyBuMTIgOiBpMTEgPz8gLyogQF9fUFVSRV9fICovICgoKSA9PiB7CiAgICAgICAgY29uc3QgdDkgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICAgICAgcmV0dXJuIHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbdDldOwogICAgICAgIH0sIHNldChlMTMpIHsKICAgICAgICAgIHRoaXNbdDldID0gZTEzOwogICAgICAgIH0gfTsKICAgICAgfSkoKTsKICAgICAgcmV0dXJuIGU2KG4xMiwgczEwLCB7IGdldCgpIHsKICAgICAgICBsZXQgdDkgPSBlMTIuY2FsbCh0aGlzKTsKICAgICAgICByZXR1cm4gdm9pZCAwID09PSB0OSAmJiAodDkgPSBvMTModGhpcyksIChudWxsICE9PSB0OSB8fCB0aGlzLmhhc1VwZGF0ZWQpICYmIHIxMi5jYWxsKHRoaXMsIHQ5KSksIHQ5OwogICAgICB9IH0pOwogICAgfQogICAgcmV0dXJuIGU2KG4xMiwgczEwLCB7IGdldCgpIHsKICAgICAgcmV0dXJuIG8xMyh0aGlzKTsKICAgIH0gfSk7CiAgfTsKfQp2YXIgaW5pdF9xdWVyeSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnkuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFsbC5qcwpmdW5jdGlvbiByNihyMTEpIHsKICByZXR1cm4gKG4xMiwgbzEzKSA9PiBlNihuMTIsIG8xMywgeyBnZXQoKSB7CiAgICByZXR1cm4gKHRoaXMucmVuZGVyUm9vdCA/PyAoZTggPz89IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkpLnF1ZXJ5U2VsZWN0b3JBbGwocjExKTsKICB9IH0pOwp9CnZhciBlODsKdmFyIGluaXRfcXVlcnlfYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzCmZ1bmN0aW9uIHI3KHIxMSkgewogIHJldHVybiAobjEyLCBlMTEpID0+IGU2KG4xMiwgZTExLCB7IGFzeW5jIGdldCgpIHsKICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlLCB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IocjExKSA/PyBudWxsOwogIH0gfSk7Cn0KdmFyIGluaXRfcXVlcnlfYXN5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qcwpmdW5jdGlvbiBvOShvMTMpIHsKICByZXR1cm4gKGUxMSwgbjEyKSA9PiB7CiAgICBjb25zdCB7IHNsb3Q6IHIxMSwgc2VsZWN0b3I6IHMxMCB9ID0gbzEzID8/IHt9LCBjMTEgPSAic2xvdCIgKyAocjExID8gYFtuYW1lPSR7cjExfV1gIDogIjpub3QoW25hbWVdKSIpOwogICAgcmV0dXJuIGU2KGUxMSwgbjEyLCB7IGdldCgpIHsKICAgICAgY29uc3QgdDkgPSB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoYzExKSwgZTEyID0gdDk/LmFzc2lnbmVkRWxlbWVudHMobzEzKSA/PyBbXTsKICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gczEwID8gZTEyIDogZTEyLmZpbHRlcigodDEwKSA9PiB0MTAubWF0Y2hlcyhzMTApKTsKICAgIH0gfSk7CiAgfTsKfQp2YXIgaW5pdF9xdWVyeV9hc3NpZ25lZF9lbGVtZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLW5vZGVzLmpzCmZ1bmN0aW9uIG43KG4xMikgewogIHJldHVybiAobzEzLCByMTEpID0+IHsKICAgIGNvbnN0IHsgc2xvdDogZTExIH0gPSBuMTIgPz8ge30sIHMxMCA9ICJzbG90IiArIChlMTEgPyBgW25hbWU9JHtlMTF9XWAgOiAiOm5vdChbbmFtZV0pIik7CiAgICByZXR1cm4gZTYobzEzLCByMTEsIHsgZ2V0KCkgewogICAgICBjb25zdCB0OSA9IHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihzMTApOwogICAgICByZXR1cm4gdDk/LmFzc2lnbmVkTm9kZXMobjEyKSA/PyBbXTsKICAgIH0gfSk7CiAgfTsKfQp2YXIgaW5pdF9xdWVyeV9hc3NpZ25lZF9ub2RlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzCnZhciBpbml0X2RlY29yYXRvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzIigpIHsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQoKTsKICAgIGluaXRfcHJvcGVydHkoKTsKICAgIGluaXRfc3RhdGUyKCk7CiAgICBpbml0X2V2ZW50X29wdGlvbnMoKTsKICAgIGluaXRfcXVlcnkoKTsKICAgIGluaXRfcXVlcnlfYWxsKCk7CiAgICBpbml0X3F1ZXJ5X2FzeW5jKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX2VsZW1lbnRzKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX25vZGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjYvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuZGVlcy1lbGVtZW50LmpzCnZhciBfX2VzRGVjb3JhdGUyLCBfX3J1bkluaXRpYWxpemVyczMsIERlZXNFbGVtZW50Owp2YXIgaW5pdF9jbGFzc2VzX2RlZXNfZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5kZWVzLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9wbHVnaW5zMygpOwogICAgX19lc0RlY29yYXRlMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNFbGVtZW50ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gbGl0LkxpdEVsZW1lbnQ7CiAgICAgIGxldCBfZ29CcmlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9nb0JyaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9nb0JyaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RvbXRvb2xzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZG9tdG9vbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZG9tdG9vbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgcmV0dXJuIGNsYXNzIERlZXNFbGVtZW50IGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9nb0JyaWdodF9kZWNvcmF0b3JzID0gW2xpdC5wcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2RvbXRvb2xzX2RlY29yYXRvcnMgPSBbbGl0LnByb3BlcnR5KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMih0aGlzLCBudWxsLCBfZ29CcmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ29CcmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdvQnJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmdvQnJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZ29CcmlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2dvQnJpZ2h0X2luaXRpYWxpemVycywgX2dvQnJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIodGhpcywgbnVsbCwgX2RvbXRvb2xzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvbXRvb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkb210b29scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kb210b29scywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRvbXRvb2xzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb210b29sc19pbml0aWFsaXplcnMsIF9kb210b29sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9nb0JyaWdodF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBnb0JyaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZ29CcmlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBkb210b29scwogICAgICAgIGRvbXRvb2xzUHJvbWlzZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMyh0aGlzLCBfZ29CcmlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICNkb210b29sc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9kb210b29sc19pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IGRvbXRvb2xzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkb210b29scyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHJ4U3Vic2NyaXB0aW9ucyA9IChfX3J1bkluaXRpYWxpemVyczModGhpcywgX2RvbXRvb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgICAgIHRoZW1lU3Vic2NyaXB0aW9uOwogICAgICAgIGVsZW1lbnREb21SZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICBlbGVtZW50RG9tUmVhZHkgPSB0aGlzLmVsZW1lbnREb21SZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UgPSBkaXN0X3RzX2V4cG9ydHMyOC5lbGVtZW50QmFzaWMuc2V0dXAodGhpcywgb3B0aW9uc0FyZyk7CiAgICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKChkb210b29sc0FyZykgPT4gewogICAgICAgICAgICB0aGlzLmRvbXRvb2xzID0gZG9tdG9vbHNBcmc7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgY29uc3QgZG9tdG9vbHMyID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICB0aGlzLnRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHMyLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKChnb0JyaWdodEFyZykgPT4gewogICAgICAgICAgICB0aGlzLmdvQnJpZ2h0ID0gZ29CcmlnaHRBcmc7CiAgICAgICAgICAgIGlmICh0aGlzLnRoZW1lQ2hhbmdlZCkgewogICAgICAgICAgICAgIHRoaXMudGhlbWVDaGFuZ2VkKGdvQnJpZ2h0QXJnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pOwogICAgICAgICAgZm9yIChjb25zdCBzdGFydHVwRnVuY3Rpb24gb2YgdGhpcy5zdGFydHVwRnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGF3YWl0IHN0YXJ0dXBGdW5jdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGVlc0VsZW1lbnRDb25uZWN0ZWQiKSk7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXJ0dXBGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihzdGFydHVwRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuc3RhcnR1cEZ1bmN0aW9ucy5wdXNoKHN0YXJ0dXBGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGdhcmJhZ2VGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlckdhcmJhZ2VGdW5jdGlvbihnYXJiYWdlRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGdhcmJhZ2VGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGdhcmJhZ2VGdW5jdGlvbiBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpIHsKICAgICAgICAgICAgYXdhaXQgZ2FyYmFnZUZ1bmN0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkZWVzRWxlbWVudERpc2Nvbm5lY3RlZCIpKTsKICAgICAgICB9CiAgICAgIH07CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzCnZhciB0NiwgaTcsIG44LCBlOSwgbDQsIGQzLCBjNSwgZjQsIHI4LCBzNiwgdjMsIHU0LCBtMywgcDUsIE0yLCBoMywgajI7CnZhciBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgICh7IEk6IHQ2IH0gPSBqKSwgaTcgPSAobzEzKSA9PiBvMTMsIG44ID0gKG8xMykgPT4gbnVsbCA9PT0gbzEzIHx8ICJvYmplY3QiICE9IHR5cGVvZiBvMTMgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgbzEzLCBlOSA9IHsgSFRNTDogMSwgU1ZHOiAyLCBNQVRITUw6IDMgfSwgbDQgPSAobzEzLCB0OSkgPT4gdm9pZCAwID09PSB0OSA/IHZvaWQgMCAhPT0gbzEzPy5fJGxpdFR5cGUkIDogbzEzPy5fJGxpdFR5cGUkID09PSB0OSwgZDMgPSAobzEzKSA9PiBudWxsICE9IG8xMz8uXyRsaXRUeXBlJD8uaCwgYzUgPSAobzEzKSA9PiB2b2lkIDAgIT09IG8xMz8uXyRsaXREaXJlY3RpdmUkLCBmNCA9IChvMTMpID0+IG8xMz8uXyRsaXREaXJlY3RpdmUkLCByOCA9IChvMTMpID0+IHZvaWQgMCA9PT0gbzEzLnN0cmluZ3MsIHM2ID0gKCkgPT4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksIHYzID0gKG8xMywgbjEyLCBlMTEpID0+IHsKICAgICAgY29uc3QgbDYgPSBvMTMuXyRBQS5wYXJlbnROb2RlLCBkNSA9IHZvaWQgMCA9PT0gbjEyID8gbzEzLl8kQUIgOiBuMTIuXyRBQTsKICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSB7CiAgICAgICAgY29uc3QgaTExID0gbDYuaW5zZXJ0QmVmb3JlKHM2KCksIGQ1KSwgbjEzID0gbDYuaW5zZXJ0QmVmb3JlKHM2KCksIGQ1KTsKICAgICAgICBlMTEgPSBuZXcgdDYoaTExLCBuMTMsIG8xMywgbzEzLm9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHQ5ID0gZTExLl8kQUIubmV4dFNpYmxpbmcsIG4xMyA9IGUxMS5fJEFNLCBjMTEgPSBuMTMgIT09IG8xMzsKICAgICAgICBpZiAoYzExKSB7CiAgICAgICAgICBsZXQgdDEwOwogICAgICAgICAgZTExLl8kQVE/LihvMTMpLCBlMTEuXyRBTSA9IG8xMywgdm9pZCAwICE9PSBlMTEuXyRBUCAmJiAodDEwID0gbzEzLl8kQVUpICE9PSBuMTMuXyRBVSAmJiBlMTEuXyRBUCh0MTApOwogICAgICAgIH0KICAgICAgICBpZiAodDkgIT09IGQ1IHx8IGMxMSkgewogICAgICAgICAgbGV0IG8xNCA9IGUxMS5fJEFBOwogICAgICAgICAgZm9yICg7IG8xNCAhPT0gdDk7ICkgewogICAgICAgICAgICBjb25zdCB0MTAgPSBpNyhvMTQpLm5leHRTaWJsaW5nOwogICAgICAgICAgICBpNyhsNikuaW5zZXJ0QmVmb3JlKG8xNCwgZDUpLCBvMTQgPSB0MTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBlMTE7CiAgICB9LCB1NCA9IChvMTMsIHQ5LCBpMTEgPSBvMTMpID0+IChvMTMuXyRBSSh0OSwgaTExKSwgbzEzKSwgbTMgPSB7fSwgcDUgPSAobzEzLCB0OSA9IG0zKSA9PiBvMTMuXyRBSCA9IHQ5LCBNMiA9IChvMTMpID0+IG8xMy5fJEFILCBoMyA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKSwgbzEzLl8kQUEucmVtb3ZlKCk7CiAgICB9LCBqMiA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzCmZ1bmN0aW9uIGg0KGkxMSkgewogIHZvaWQgMCAhPT0gdGhpcy5fJEFOID8gKG8xMCh0aGlzKSwgdGhpcy5fJEFNID0gaTExLCByOSh0aGlzKSkgOiB0aGlzLl8kQU0gPSBpMTE7Cn0KZnVuY3Rpb24gbjkoaTExLCB0OSA9IGZhbHNlLCBlMTEgPSAwKSB7CiAgY29uc3QgcjExID0gdGhpcy5fJEFILCBoOCA9IHRoaXMuXyRBTjsKICBpZiAodm9pZCAwICE9PSBoOCAmJiAwICE9PSBoOC5zaXplKSBpZiAodDkpIGlmIChBcnJheS5pc0FycmF5KHIxMSkpIGZvciAobGV0IGkxMiA9IGUxMTsgaTEyIDwgcjExLmxlbmd0aDsgaTEyKyspIHM3KHIxMVtpMTJdLCBmYWxzZSksIG8xMChyMTFbaTEyXSk7CiAgZWxzZSBudWxsICE9IHIxMSAmJiAoczcocjExLCBmYWxzZSksIG8xMChyMTEpKTsKICBlbHNlIHM3KHRoaXMsIGkxMSk7Cn0KdmFyIHM3LCBvMTAsIHI5LCBjNiwgZjU7CnZhciBpbml0X2FzeW5jX2RpcmVjdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9hc3luYy1kaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9kaXJlY3RpdmVfaGVscGVycygpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBzNyA9IChpMTEsIHQ5KSA9PiB7CiAgICAgIGNvbnN0IGUxMSA9IGkxMS5fJEFOOwogICAgICBpZiAodm9pZCAwID09PSBlMTEpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChjb25zdCBpMTIgb2YgZTExKSBpMTIuXyRBTz8uKHQ5LCBmYWxzZSksIHM3KGkxMiwgdDkpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sIG8xMCA9IChpMTEpID0+IHsKICAgICAgbGV0IHQ5LCBlMTE7CiAgICAgIGRvIHsKICAgICAgICBpZiAodm9pZCAwID09PSAodDkgPSBpMTEuXyRBTSkpIGJyZWFrOwogICAgICAgIGUxMSA9IHQ5Ll8kQU4sIGUxMS5kZWxldGUoaTExKSwgaTExID0gdDk7CiAgICAgIH0gd2hpbGUgKDAgPT09IGUxMT8uc2l6ZSk7CiAgICB9LCByOSA9IChpMTEpID0+IHsKICAgICAgZm9yIChsZXQgdDk7IHQ5ID0gaTExLl8kQU07IGkxMSA9IHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9IHQ5Ll8kQU47CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSB0OS5fJEFOID0gZTExID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgICBlbHNlIGlmIChlMTEuaGFzKGkxMSkpIGJyZWFrOwogICAgICAgIGUxMS5hZGQoaTExKSwgYzYodDkpOwogICAgICB9CiAgICB9OwogICAgYzYgPSAoaTExKSA9PiB7CiAgICAgIGkxMS50eXBlID09IHQzLkNISUxEICYmIChpMTEuXyRBUCA/Pz0gbjksIGkxMS5fJEFRID8/PSBoNCk7CiAgICB9OwogICAgZjUgPSBjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEFOID0gdm9pZCAwOwogICAgICB9CiAgICAgIF8kQVQoaTExLCB0OSwgZTExKSB7CiAgICAgICAgc3VwZXIuXyRBVChpMTEsIHQ5LCBlMTEpLCByOSh0aGlzKSwgdGhpcy5pc0Nvbm5lY3RlZCA9IGkxMS5fJEFVOwogICAgICB9CiAgICAgIF8kQU8oaTExLCB0OSA9IHRydWUpIHsKICAgICAgICBpMTEgIT09IHRoaXMuaXNDb25uZWN0ZWQgJiYgKHRoaXMuaXNDb25uZWN0ZWQgPSBpMTEsIGkxMSA/IHRoaXMucmVjb25uZWN0ZWQ/LigpIDogdGhpcy5kaXNjb25uZWN0ZWQ/LigpKSwgdDkgJiYgKHM3KHRoaXMsIGkxMSksIG8xMCh0aGlzKSk7CiAgICAgIH0KICAgICAgc2V0VmFsdWUodDkpIHsKICAgICAgICBpZiAocjgodGhpcy5fJEN0KSkgdGhpcy5fJEN0Ll8kQUkodDksIHRoaXMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgY29uc3QgaTExID0gWy4uLnRoaXMuXyRDdC5fJEFIXTsKICAgICAgICAgIGkxMVt0aGlzLl8kQ2ldID0gdDksIHRoaXMuXyRDdC5fJEFJKGkxMSwgdGhpcywgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2FzeW5jLWRpcmVjdGl2ZS5qcwp2YXIgaW5pdF9hc3luY19kaXJlY3RpdmUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjYvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5yZXNvbHZlZGlyZWN0aXZlLmpzCnZhciBSZXNvbHZlRGlyZWN0aXZlLCByZXNvbHZlLCByZXNvbHZlRXhlYzsKdmFyIGluaXRfY2xhc3Nlc19yZXNvbHZlZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMucmVzb2x2ZWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUyKCk7CiAgICBSZXNvbHZlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIHByb21pc2U7CiAgICAgIGhhc1Byb21pc2VTZXR0bGVkID0gZmFsc2U7CiAgICAgIHJlbmRlcihwcm9taXNlKSB7CiAgICAgICAgaWYgKHRoaXMucHJvbWlzZSAhPT0gcHJvbWlzZSkgewogICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTsKICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgaGFuZGxlUHJvbWlzZShwcm9taXNlKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IGZhbHNlOwogICAgICAgIHByb21pc2UudGhlbigodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZXJyb3IpOwogICAgICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UodGhpcy5wcm9taXNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICByZXNvbHZlID0gZTQoUmVzb2x2ZURpcmVjdGl2ZSk7CiAgICByZXNvbHZlRXhlYyA9IChmdW5jQXJnKSA9PiB7CiAgICAgIHJldHVybiByZXNvbHZlKGZ1bmNBcmcoKSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJlZGlyZWN0aXZlLmpzCnZhciBTdWJzY3JpYmVEaXJlY3RpdmUsIHN1YnNjcmliZTsKdmFyIGluaXRfY2xhc3Nlc19zdWJzY3JpYmVkaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjYvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmVkaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlMigpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgU3Vic2NyaWJlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIG9ic2VydmFibGU7CiAgICAgIHN1YiA9IG51bGw7CiAgICAgIHJlbmRlcihvYnNlcnZhYmxlMikgewogICAgICAgIGlmICh0aGlzLm9ic2VydmFibGUgIT09IG9ic2VydmFibGUyKSB7CiAgICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZSA9IG9ic2VydmFibGUyOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUob2JzZXJ2YWJsZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdWJzY3JpYmUob2JzZXJ2YWJsZTIpIHsKICAgICAgICB0aGlzLnN1YiA9IG9ic2VydmFibGUyLnN1YnNjcmliZSgodjUpID0+IHsKICAgICAgICAgIHRoaXMuc2V0VmFsdWUodjUpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1YnNjcmliZSh0aGlzLm9ic2VydmFibGUpOwogICAgICB9CiAgICB9OwogICAgc3Vic2NyaWJlID0gZTQoU3Vic2NyaWJlRGlyZWN0aXZlKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZXdpdGh0ZW1wbGF0ZS5qcwp2YXIgU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlLCBzdWJzY3JpYmVXaXRoVGVtcGxhdGU7CnZhciBpbml0X2NsYXNzZXNfc3Vic2NyaWJld2l0aHRlbXBsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZTIoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIFN1YnNjcmliZVdpdGhUZW1wbGF0ZURpcmVjdGl2ZSA9IGNsYXNzIGV4dGVuZHMgZjUgewogICAgICBvYnNlcnZhYmxlOwogICAgICB0ZW1wbGF0ZUZuOwogICAgICBzdWIgPSBudWxsOwogICAgICByZW5kZXIob2JzZXJ2YWJsZTIsIHRlbXBsYXRlRm4pIHsKICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5vYnNlcnZhYmxlICE9PSBvYnNlcnZhYmxlMiB8fCB0aGlzLnRlbXBsYXRlRm4gIT09IHRlbXBsYXRlRm47CiAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTI7CiAgICAgICAgICB0aGlzLnRlbXBsYXRlRm4gPSB0ZW1wbGF0ZUZuOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdGFydFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdGFydFN1YnNjcmlwdGlvbigpIHsKICAgICAgICB0aGlzLnN1YiA9IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHY1KSA9PiB7CiAgICAgICAgICBjb25zdCBvdXQgPSB0aGlzLnRlbXBsYXRlRm4odjUpOwogICAgICAgICAgdGhpcy5zZXRWYWx1ZShvdXQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCk7CiAgICAgIH0KICAgIH07CiAgICBzdWJzY3JpYmVXaXRoVGVtcGxhdGUgPSBlNChTdWJzY3JpYmVXaXRoVGVtcGxhdGVEaXJlY3RpdmUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzCnZhciB0NywgczgsIGk4Owp2YXIgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanMiKCkgewogICAgdDcgPSBhc3luYyAodDksIHMxMCkgPT4gewogICAgICBmb3IgYXdhaXQgKGNvbnN0IGkxMSBvZiB0OSkgaWYgKGZhbHNlID09PSBhd2FpdCBzMTAoaTExKSkgcmV0dXJuOwogICAgfTsKICAgIHM4ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3QoKSB7CiAgICAgICAgdGhpcy5HID0gdm9pZCAwOwogICAgICB9CiAgICAgIHJlY29ubmVjdCh0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRlcmVmKCkgewogICAgICAgIHJldHVybiB0aGlzLkc7CiAgICAgIH0KICAgIH07CiAgICBpOCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5ZID0gdm9pZCAwLCB0aGlzLlogPSB2b2lkIDA7CiAgICAgIH0KICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLlk7CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgdGhpcy5ZID8/PSBuZXcgUHJvbWlzZSgodDkpID0+IHRoaXMuWiA9IHQ5KTsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgdGhpcy5aPy4oKSwgdGhpcy5ZID0gdGhpcy5aID0gdm9pZCAwOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanMKdmFyIG4xMCwgaDUsIGM3LCBtNDsKdmFyIGluaXRfdW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnRpbC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZSgpOwogICAgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBuMTAgPSAodDkpID0+ICFuOCh0OSkgJiYgImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDkudGhlbiwgaDUgPSAxMDczNzQxODIzOwogICAgYzcgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEN3dCA9IGg1LCB0aGlzLl8kQ2J0ID0gW10sIHRoaXMuXyRDSyA9IG5ldyBzOCh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKC4uLnMxMCkgewogICAgICAgIHJldHVybiBzMTAuZmluZCgodDkpID0+ICFuMTAodDkpKSA/PyBFOwogICAgICB9CiAgICAgIHVwZGF0ZShzMTAsIGkxMSkgewogICAgICAgIGNvbnN0IGUxMSA9IHRoaXMuXyRDYnQ7CiAgICAgICAgbGV0IHIxMSA9IGUxMS5sZW5ndGg7CiAgICAgICAgdGhpcy5fJENidCA9IGkxMTsKICAgICAgICBjb25zdCBvMTMgPSB0aGlzLl8kQ0ssIGMxMSA9IHRoaXMuXyRDWDsKICAgICAgICB0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuZGlzY29ubmVjdGVkKCk7CiAgICAgICAgZm9yIChsZXQgdDkgPSAwOyB0OSA8IGkxMS5sZW5ndGggJiYgISh0OSA+IHRoaXMuXyRDd3QpOyB0OSsrKSB7CiAgICAgICAgICBjb25zdCBzMTEgPSBpMTFbdDldOwogICAgICAgICAgaWYgKCFuMTAoczExKSkgcmV0dXJuIHRoaXMuXyRDd3QgPSB0OSwgczExOwogICAgICAgICAgdDkgPCByMTEgJiYgczExID09PSBlMTFbdDldIHx8ICh0aGlzLl8kQ3d0ID0gaDUsIHIxMSA9IDAsIFByb21pc2UucmVzb2x2ZShzMTEpLnRoZW4oYXN5bmMgKHQxMCkgPT4gewogICAgICAgICAgICBmb3IgKDsgYzExLmdldCgpOyApIGF3YWl0IGMxMS5nZXQoKTsKICAgICAgICAgICAgY29uc3QgaTEyID0gbzEzLmRlcmVmKCk7CiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGkxMikgewogICAgICAgICAgICAgIGNvbnN0IGUxMiA9IGkxMi5fJENidC5pbmRleE9mKHMxMSk7CiAgICAgICAgICAgICAgZTEyID4gLTEgJiYgZTEyIDwgaTEyLl8kQ3d0ICYmIChpMTIuXyRDd3QgPSBlMTIsIGkxMi5zZXRWYWx1ZSh0MTApKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgbTQgPSBlNChjNyk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzCnZhciBpbml0X3VudGlsMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMiKCkgewogICAgaW5pdF91bnRpbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS5qcwp2YXIgbzExLCBoNjsKdmFyIGluaXRfYXN5bmNfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICAgIGluaXRfcHJpdmF0ZV9hc3luY19oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgbzExID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuXyRDSyA9IG5ldyBzOCh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKGkxMSwgczEwKSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgdXBkYXRlKGkxMSwgW3MxMCwgcjExXSkgewogICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuZGlzY29ubmVjdGVkKCksIHMxMCA9PT0gdGhpcy5fJENKKSByZXR1cm4gRTsKICAgICAgICB0aGlzLl8kQ0ogPSBzMTA7CiAgICAgICAgbGV0IG4xMiA9IDA7CiAgICAgICAgY29uc3QgeyBfJENLOiBvMTMsIF8kQ1g6IGg4IH0gPSB0aGlzOwogICAgICAgIHJldHVybiB0NyhzMTAsIGFzeW5jICh0OSkgPT4gewogICAgICAgICAgZm9yICg7IGg4LmdldCgpOyApIGF3YWl0IGg4LmdldCgpOwogICAgICAgICAgY29uc3QgaTEyID0gbzEzLmRlcmVmKCk7CiAgICAgICAgICBpZiAodm9pZCAwICE9PSBpMTIpIHsKICAgICAgICAgICAgaWYgKGkxMi5fJENKICE9PSBzMTApIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgdm9pZCAwICE9PSByMTEgJiYgKHQ5ID0gcjExKHQ5LCBuMTIpKSwgaTEyLmNvbW1pdFZhbHVlKHQ5LCBuMTIpLCBuMTIrKzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pLCBFOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLnNldFZhbHVlKHQ5KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgaDYgPSBlNChvMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzCnZhciBjODsKdmFyIGluaXRfYXN5bmNfYXBwZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzIigpIHsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2FzeW5jX3JlcGxhY2UoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGM4ID0gZTQoY2xhc3MgZXh0ZW5kcyBvMTEgewogICAgICBjb25zdHJ1Y3RvcihyMTEpIHsKICAgICAgICBpZiAoc3VwZXIocjExKSwgcjExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigiYXN5bmNBcHBlbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjaGlsZCBleHByZXNzaW9ucyIpOwogICAgICB9CiAgICAgIHVwZGF0ZShyMTEsIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLl8kQ3R0ID0gcjExLCBzdXBlci51cGRhdGUocjExLCBlMTEpOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHIxMSwgZTExKSB7CiAgICAgICAgMCA9PT0gZTExICYmIGoyKHRoaXMuXyRDdHQpOwogICAgICAgIGNvbnN0IHMxMCA9IHYzKHRoaXMuXyRDdHQpOwogICAgICAgIHU0KHMxMCwgcjExKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcwp2YXIgaW5pdF9hc3luY19hcHBlbmQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanMiKCkgewogICAgaW5pdF9hc3luY19hcHBlbmQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzCnZhciBpOTsKdmFyIGluaXRfa2V5ZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9rZXllZC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9kaXJlY3RpdmVfaGVscGVycygpOwogICAgaTkgPSBlNChjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5rZXkgPSBBOwogICAgICB9CiAgICAgIHJlbmRlcihyMTEsIHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMua2V5ID0gcjExLCB0OTsKICAgICAgfQogICAgICB1cGRhdGUocjExLCBbdDksIGUxMV0pIHsKICAgICAgICByZXR1cm4gdDkgIT09IHRoaXMua2V5ICYmIChwNShyMTEpLCB0aGlzLmtleSA9IHQ5KSwgZTExOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMva2V5ZWQuanMKdmFyIGluaXRfa2V5ZWQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9rZXllZC5qcyIoKSB7CiAgICBpbml0X2tleWVkKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9yZXBlYXQuanMKdmFyIHU1LCBjOTsKdmFyIGluaXRfcmVwZWF0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9kaXJlY3RpdmVfaGVscGVycygpOwogICAgdTUgPSAoZTExLCBzMTAsIHQ5KSA9PiB7CiAgICAgIGNvbnN0IHIxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGZvciAobGV0IGw2ID0gczEwOyBsNiA8PSB0OTsgbDYrKykgcjExLnNldChlMTFbbDZdLCBsNik7CiAgICAgIHJldHVybiByMTE7CiAgICB9LCBjOSA9IGU0KGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihlMTEpIHsKICAgICAgICBpZiAoc3VwZXIoZTExKSwgZTExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigicmVwZWF0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IGV4cHJlc3Npb25zIik7CiAgICAgIH0KICAgICAgZHQoZTExLCBzMTAsIHQ5KSB7CiAgICAgICAgbGV0IHIxMTsKICAgICAgICB2b2lkIDAgPT09IHQ5ID8gdDkgPSBzMTAgOiB2b2lkIDAgIT09IHMxMCAmJiAocjExID0gczEwKTsKICAgICAgICBjb25zdCBsNiA9IFtdLCBvMTMgPSBbXTsKICAgICAgICBsZXQgaTExID0gMDsKICAgICAgICBmb3IgKGNvbnN0IHMxMSBvZiBlMTEpIGw2W2kxMV0gPSByMTEgPyByMTEoczExLCBpMTEpIDogaTExLCBvMTNbaTExXSA9IHQ5KHMxMSwgaTExKSwgaTExKys7CiAgICAgICAgcmV0dXJuIHsgdmFsdWVzOiBvMTMsIGtleXM6IGw2IH07CiAgICAgIH0KICAgICAgcmVuZGVyKGUxMSwgczEwLCB0OSkgewogICAgICAgIHJldHVybiB0aGlzLmR0KGUxMSwgczEwLCB0OSkudmFsdWVzOwogICAgICB9CiAgICAgIHVwZGF0ZShzMTAsIFt0OSwgcjExLCBjMTFdKSB7CiAgICAgICAgY29uc3QgZDUgPSBNMihzMTApLCB7IHZhbHVlczogcDcsIGtleXM6IGE1IH0gPSB0aGlzLmR0KHQ5LCByMTEsIGMxMSk7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGQ1KSkgcmV0dXJuIHRoaXMudXQgPSBhNSwgcDc7CiAgICAgICAgY29uc3QgaDggPSB0aGlzLnV0ID8/PSBbXSwgdjUgPSBbXTsKICAgICAgICBsZXQgbTYsIHk0LCB4NCA9IDAsIGo0ID0gZDUubGVuZ3RoIC0gMSwgazQgPSAwLCB3NCA9IHA3Lmxlbmd0aCAtIDE7CiAgICAgICAgZm9yICg7IHg0IDw9IGo0ICYmIGs0IDw9IHc0OyApIGlmIChudWxsID09PSBkNVt4NF0pIHg0Kys7CiAgICAgICAgZWxzZSBpZiAobnVsbCA9PT0gZDVbajRdKSBqNC0tOwogICAgICAgIGVsc2UgaWYgKGg4W3g0XSA9PT0gYTVbazRdKSB2NVtrNF0gPSB1NChkNVt4NF0sIHA3W2s0XSksIHg0KyssIGs0Kys7CiAgICAgICAgZWxzZSBpZiAoaDhbajRdID09PSBhNVt3NF0pIHY1W3c0XSA9IHU0KGQ1W2o0XSwgcDdbdzRdKSwgajQtLSwgdzQtLTsKICAgICAgICBlbHNlIGlmIChoOFt4NF0gPT09IGE1W3c0XSkgdjVbdzRdID0gdTQoZDVbeDRdLCBwN1t3NF0pLCB2MyhzMTAsIHY1W3c0ICsgMV0sIGQ1W3g0XSksIHg0KyssIHc0LS07CiAgICAgICAgZWxzZSBpZiAoaDhbajRdID09PSBhNVtrNF0pIHY1W2s0XSA9IHU0KGQ1W2o0XSwgcDdbazRdKSwgdjMoczEwLCBkNVt4NF0sIGQ1W2o0XSksIGo0LS0sIGs0Kys7CiAgICAgICAgZWxzZSBpZiAodm9pZCAwID09PSBtNiAmJiAobTYgPSB1NShhNSwgazQsIHc0KSwgeTQgPSB1NShoOCwgeDQsIGo0KSksIG02LmhhcyhoOFt4NF0pKSBpZiAobTYuaGFzKGg4W2o0XSkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IHk0LmdldChhNVtrNF0pLCB0MTAgPSB2b2lkIDAgIT09IGUxMSA/IGQ1W2UxMV0gOiBudWxsOwogICAgICAgICAgaWYgKG51bGwgPT09IHQxMCkgewogICAgICAgICAgICBjb25zdCBlMTIgPSB2MyhzMTAsIGQ1W3g0XSk7CiAgICAgICAgICAgIHU0KGUxMiwgcDdbazRdKSwgdjVbazRdID0gZTEyOwogICAgICAgICAgfSBlbHNlIHY1W2s0XSA9IHU0KHQxMCwgcDdbazRdKSwgdjMoczEwLCBkNVt4NF0sIHQxMCksIGQ1W2UxMV0gPSBudWxsOwogICAgICAgICAgazQrKzsKICAgICAgICB9IGVsc2UgaDMoZDVbajRdKSwgajQtLTsKICAgICAgICBlbHNlIGgzKGQ1W3g0XSksIHg0Kys7CiAgICAgICAgZm9yICg7IGs0IDw9IHc0OyApIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IHYzKHMxMCwgdjVbdzQgKyAxXSk7CiAgICAgICAgICB1NChlMTEsIHA3W2s0XSksIHY1W2s0KytdID0gZTExOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgeDQgPD0gajQ7ICkgewogICAgICAgICAgY29uc3QgZTExID0gZDVbeDQrK107CiAgICAgICAgICBudWxsICE9PSBlMTEgJiYgaDMoZTExKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMudXQgPSBhNSwgcDUoczEwLCB2NSksIEU7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9yZXBlYXQuanMKdmFyIGluaXRfcmVwZWF0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzIigpIHsKICAgIGluaXRfcmVwZWF0MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2luZGV4LmpzCnZhciBkaXJlY3RpdmVzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlyZWN0aXZlc19leHBvcnRzLCB7CiAgYXN5bmNBcHBlbmQ6ICgpID0+IGM4LAogIGtleWVkOiAoKSA9PiBpOSwKICByZXBlYXQ6ICgpID0+IGM5LAogIHJlc29sdmU6ICgpID0+IHJlc29sdmUsCiAgcmVzb2x2ZUV4ZWM6ICgpID0+IHJlc29sdmVFeGVjLAogIHN1YnNjcmliZTogKCkgPT4gc3Vic2NyaWJlLAogIHN1YnNjcmliZVdpdGhUZW1wbGF0ZTogKCkgPT4gc3Vic2NyaWJlV2l0aFRlbXBsYXRlLAogIHVudGlsOiAoKSA9PiBtNAp9KTsKdmFyIGluaXRfZGlyZWN0aXZlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcmVzb2x2ZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZXdpdGh0ZW1wbGF0ZSgpOwogICAgaW5pdF91bnRpbDIoKTsKICAgIGluaXRfYXN5bmNfYXBwZW5kMigpOwogICAgaW5pdF9rZXllZDIoKTsKICAgIGluaXRfcmVwZWF0MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS42L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjksIHsKICBEZWVzRWxlbWVudDogKCkgPT4gRGVlc0VsZW1lbnQsCiAgY3NzOiAoKSA9PiBpLAogIGNzc01hbmFnZXI6ICgpID0+IGNzc01hbmFnZXIsCiAgY3VzdG9tRWxlbWVudDogKCkgPT4gdDQsCiAgZGlyZWN0aXZlczogKCkgPT4gZGlyZWN0aXZlc19leHBvcnRzLAogIGRvbXRvb2xzOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyOCwKICBodG1sOiAoKSA9PiBiMiwKICBwcm9wZXJ0eTogKCkgPT4gbjUsCiAgcXVlcnk6ICgpID0+IGU3LAogIHF1ZXJ5QWxsOiAoKSA9PiByNiwKICBxdWVyeUFzeW5jOiAoKSA9PiByNywKICByZW5kZXI6ICgpID0+IEQsCiAgc3RhdGU6ICgpID0+IHI1LAogIHN0YXRpYzogKCkgPT4gdTMsCiAgdW5zYWZlQ1NTOiAoKSA9PiByLAogIHVuc2FmZUhUTUw6ICgpID0+IG84LAogIHVuc2FmZVN0YXRpYzogKCkgPT4gczUKfSk7CnZhciBjc3NNYW5hZ2VyOwp2YXIgaW5pdF9kaXN0X3RzMjkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjYvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyKCk7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9zdGF0aWNfaHRtbCgpOwogICAgaW5pdF91bnNhZmVfaHRtbDIoKTsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQyKCk7CiAgICBpbml0X2RlY29yYXRvcnMoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2NsYXNzZXNfZGVlc19lbGVtZW50KCk7CiAgICBpbml0X2RpcmVjdGl2ZXMoKTsKICAgIGNzc01hbmFnZXIgPSBDc3NNYW5hZ2VyLmdldFNpbmdsZXRvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwemluZGV4LmpzCmZ1bmN0aW9uIGdldFpJbmRleChjYXRlZ29yeSwgc3ViY2F0ZWdvcnkpIHsKICBjb25zdCBjYXRlZ29yeU9iaiA9IHpJbmRleExheWVyc1tjYXRlZ29yeV07CiAgaWYgKHR5cGVvZiBjYXRlZ29yeU9iaiA9PT0gIm9iamVjdCIgJiYgc3ViY2F0ZWdvcnkpIHsKICAgIHJldHVybiBjYXRlZ29yeU9ialtzdWJjYXRlZ29yeV0gfHwgImF1dG8iOwogIH0KICByZXR1cm4gdHlwZW9mIGNhdGVnb3J5T2JqID09PSAibnVtYmVyIiA/IGNhdGVnb3J5T2JqIDogImF1dG8iOwp9CnZhciB6SW5kZXhMYXllcnMsIGNvbXBvbmVudFpJbmRleCwgWkluZGV4UmVnaXN0cnksIHpJbmRleFJlZ2lzdHJ5Owp2YXIgaW5pdF96aW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB6aW5kZXguanMiKCkgewogICAgekluZGV4TGF5ZXJzID0gewogICAgICAvLyBCYXNlIGxheWVyOiBSZWd1bGFyIGNvbnRlbnQKICAgICAgYmFzZTogewogICAgICAgIGNvbnRlbnQ6ICJhdXRvIiwKICAgICAgICBpbnB1dEVsZW1lbnRzOiAxCiAgICAgIH0sCiAgICAgIC8vIEZpeGVkIFVJIGVsZW1lbnRzCiAgICAgIGZpeGVkOiB7CiAgICAgICAgYXBwQmFyOiAxMCwKICAgICAgICBzaWRlTWVudTogMTAsCiAgICAgICAgbW9iaWxlTmF2OiAyNTAKICAgICAgfSwKICAgICAgLy8gT3ZlcmxheSBiYWNrZHJvcHMgKHNlbWktdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMpCiAgICAgIGJhY2tkcm9wOiB7CiAgICAgICAgZHJvcGRvd246IDE5OTksCiAgICAgICAgLy8gQmVsb3cgbW9kYWxzIGJ1dCBhYm92ZSBmaXhlZCBlbGVtZW50cwogICAgICAgIG1vZGFsOiAyOTk5LAogICAgICAgIC8vIEJlbG93IGRyb3Bkb3ducyBvbiBtb2RhbHMKICAgICAgICBjb250ZXh0TWVudTogMzk5OQogICAgICAgIC8vIEJlbG93IGNyaXRpY2FsIG92ZXJsYXlzCiAgICAgIH0sCiAgICAgIC8vIEludGVyYWN0aXZlIG92ZXJsYXlzCiAgICAgIG92ZXJsYXk6IHsKICAgICAgICBkcm9wZG93bjogMmUzLAogICAgICAgIC8vIERyb3Bkb3ducyBhbmQgc2VsZWN0IG1lbnVzCiAgICAgICAgbW9kYWw6IDNlMywKICAgICAgICAvLyBNb2RhbCBkaWFsb2dzCiAgICAgICAgY29udGV4dE1lbnU6IDRlMywKICAgICAgICAvLyBDb250ZXh0IG1lbnVzIGFuZCB0b29sdGlwcwogICAgICAgIHRvYXN0OiA1ZTMKICAgICAgICAvLyBUb2FzdCBub3RpZmljYXRpb25zIChoaWdoZXN0IHByaW9yaXR5KQogICAgICB9LAogICAgICAvLyBTcGVjaWFsIGNhc2VzIGZvciBuZXN0ZWQgZWxlbWVudHMKICAgICAgbW9kYWxEcm9wZG93bjogMzUwMCwKICAgICAgLy8gRHJvcGRvd25zIGluc2lkZSBtb2RhbHMKICAgICAgd3lzaXd5Z01lbnVzOiA0NTAwCiAgICAgIC8vIEVkaXRvciBmb3JtYXR0aW5nIG1lbnVzCiAgICB9OwogICAgY29tcG9uZW50WkluZGV4ID0gewogICAgICAiZGVlcy1tb2RhbCI6IHpJbmRleExheWVycy5vdmVybGF5Lm1vZGFsLAogICAgICAiZGVlcy13aW5kb3dsYXllciI6IHpJbmRleExheWVycy5vdmVybGF5LmRyb3Bkb3duLAogICAgICAiZGVlcy1jb250ZXh0bWVudSI6IHpJbmRleExheWVycy5vdmVybGF5LmNvbnRleHRNZW51LAogICAgICAiZGVlcy10b2FzdCI6IHpJbmRleExheWVycy5vdmVybGF5LnRvYXN0LAogICAgICAiZGVlcy1hcHB1aS1tYWlubWVudSI6IHpJbmRleExheWVycy5maXhlZC5hcHBCYXIsCiAgICAgICJkZWVzLW1vYmlsZW5hdmlnYXRpb24iOiB6SW5kZXhMYXllcnMuZml4ZWQubW9iaWxlTmF2LAogICAgICAiZGVlcy1zbGFzaC1tZW51IjogekluZGV4TGF5ZXJzLnd5c2l3eWdNZW51cywKICAgICAgImRlZXMtZm9ybWF0dGluZy1tZW51IjogekluZGV4TGF5ZXJzLnd5c2l3eWdNZW51cwogICAgfTsKICAgIFpJbmRleFJlZ2lzdHJ5ID0gY2xhc3MgX1pJbmRleFJlZ2lzdHJ5IHsKICAgICAgc3RhdGljIGluc3RhbmNlOwogICAgICBhY3RpdmVFbGVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgIGVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgY3VycmVudFpJbmRleCA9IDFlMzsKICAgICAgLy8gU3RhcnRpbmcgei1pbmRleAogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgaWYgKCFfWkluZGV4UmVnaXN0cnkuaW5zdGFuY2UpIHsKICAgICAgICAgIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZSA9IG5ldyBfWkluZGV4UmVnaXN0cnkoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICAgICAqIEByZXR1cm5zIFRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICAgICAqLwogICAgICBnZXROZXh0WkluZGV4KCkgewogICAgICAgIHRoaXMuY3VycmVudFpJbmRleCArPSAxMDsKICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50WkluZGV4OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWdpc3RlciBhbiBlbGVtZW50IHdpdGggdGhlIHotaW5kZXggcmVnaXN0cnkKICAgICAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHJlZ2lzdGVyCiAgICAgICAqIEBwYXJhbSB6SW5kZXggLSBUaGUgei1pbmRleCBhc3NpZ25lZCB0byB0aGlzIGVsZW1lbnQKICAgICAgICovCiAgICAgIHJlZ2lzdGVyKGVsZW1lbnQ0LCB6SW5kZXgpIHsKICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmFkZChlbGVtZW50NCk7CiAgICAgICAgdGhpcy5lbGVtZW50WkluZGV4TWFwLnNldChlbGVtZW50NCwgekluZGV4KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVW5yZWdpc3RlciBhbiBlbGVtZW50IGZyb20gdGhlIHotaW5kZXggcmVnaXN0cnkKICAgICAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHVucmVnaXN0ZXIKICAgICAgICovCiAgICAgIHVucmVnaXN0ZXIoZWxlbWVudDQpIHsKICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmRlbGV0ZShlbGVtZW50NCk7CiAgICAgICAgdGhpcy5lbGVtZW50WkluZGV4TWFwLmRlbGV0ZShlbGVtZW50NCk7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRWxlbWVudHMuc2l6ZSA9PT0gMCkgewogICAgICAgICAgdGhpcy5jdXJyZW50WkluZGV4ID0gMWUzOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSB6LWluZGV4IGZvciBhIHNwZWNpZmljIGVsZW1lbnQKICAgICAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50CiAgICAgICAqIEByZXR1cm5zIFRoZSB6LWluZGV4IG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZAogICAgICAgKi8KICAgICAgZ2V0RWxlbWVudFpJbmRleChlbGVtZW50NCkgewogICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGVsZW1lbnQ0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGNvdW50IG9mIGFjdGl2ZSBlbGVtZW50cwogICAgICAgKiBAcmV0dXJucyBOdW1iZXIgb2YgYWN0aXZlIGVsZW1lbnRzCiAgICAgICAqLwogICAgICBnZXRBY3RpdmVDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50cy5zaXplOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIGN1cnJlbnQgaGlnaGVzdCB6LWluZGV4CiAgICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHotaW5kZXggdmFsdWUKICAgICAgICovCiAgICAgIGdldEN1cnJlbnRaSW5kZXgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFpJbmRleDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgYWxsIHJlZ2lzdHJhdGlvbnMgKHVzZWZ1bCBmb3IgdGVzdGluZykKICAgICAgICovCiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudHMuY2xlYXIoKTsKICAgICAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgICB0aGlzLmN1cnJlbnRaSW5kZXggPSAxZTM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBhbGwgYWN0aXZlIGVsZW1lbnRzIGluIHotaW5kZXggb3JkZXIKICAgICAgICogQHJldHVybnMgQXJyYXkgb2YgZWxlbWVudHMgc29ydGVkIGJ5IHotaW5kZXgKICAgICAgICovCiAgICAgIGdldEFjdGl2ZUVsZW1lbnRzSW5PcmRlcigpIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFjdGl2ZUVsZW1lbnRzKS5zb3J0KChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChhNSkgfHwgMDsKICAgICAgICAgIGNvbnN0IGJaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChiNSkgfHwgMDsKICAgICAgICAgIHJldHVybiBhWiAtIGJaOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgekluZGV4UmVnaXN0cnkgPSBaSW5kZXhSZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUuanMKdmFyIHRoZW1lRGVmYXVsdHMsIHRoZW1lRGVmYXVsdFN0eWxlczsKdmFyIGluaXRfdGhlbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB0aGVtZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgdGhlbWVEZWZhdWx0cyA9IHsKICAgICAgY29sb3JzOiB7CiAgICAgICAgbGlnaHQ6IHsKICAgICAgICAgIGJnUHJpbWFyeTogIiNmZmZmZmYiLAogICAgICAgICAgYmdTZWNvbmRhcnk6ICIjZmFmYWZhIiwKICAgICAgICAgIGJnVGVydGlhcnk6ICIjZjRmNGY1IiwKICAgICAgICAgIHRleHRQcmltYXJ5OiAiIzA5MDkwYiIsCiAgICAgICAgICB0ZXh0U2Vjb25kYXJ5OiAiIzM3NDE1MSIsCiAgICAgICAgICB0ZXh0TXV0ZWQ6ICIjNzE3MTdhIiwKICAgICAgICAgIGJvcmRlckRlZmF1bHQ6ICIjZTVlN2ViIiwKICAgICAgICAgIGJvcmRlclN1YnRsZTogIiNmNGY0ZjUiLAogICAgICAgICAgYm9yZGVyU3Ryb25nOiAiI2QxZDVkYiIsCiAgICAgICAgICBhY2NlbnRQcmltYXJ5OiAiIzNiODJmNiIsCiAgICAgICAgICBhY2NlbnRTdWNjZXNzOiAiIzIyYzU1ZSIsCiAgICAgICAgICBhY2NlbnRXYXJuaW5nOiAiI2Y1OWUwYiIsCiAgICAgICAgICBhY2NlbnRFcnJvcjogIiNlZjQ0NDQiCiAgICAgICAgfSwKICAgICAgICBkYXJrOiB7CiAgICAgICAgICBiZ1ByaW1hcnk6ICIjMDkwOTBiIiwKICAgICAgICAgIGJnU2Vjb25kYXJ5OiAiIzBhMGEwYSIsCiAgICAgICAgICBiZ1RlcnRpYXJ5OiAiIzE4MTgxYiIsCiAgICAgICAgICB0ZXh0UHJpbWFyeTogIiNmYWZhZmEiLAogICAgICAgICAgdGV4dFNlY29uZGFyeTogIiNkNGQ0ZDgiLAogICAgICAgICAgdGV4dE11dGVkOiAiI2ExYTFhYSIsCiAgICAgICAgICBib3JkZXJEZWZhdWx0OiAiIzI3MjcyYSIsCiAgICAgICAgICBib3JkZXJTdWJ0bGU6ICIjMWExYTFhIiwKICAgICAgICAgIGJvcmRlclN0cm9uZzogIiMzZjNmNDYiLAogICAgICAgICAgYWNjZW50UHJpbWFyeTogIiMzYjgyZjYiLAogICAgICAgICAgYWNjZW50U3VjY2VzczogIiMyMmM1NWUiLAogICAgICAgICAgYWNjZW50V2FybmluZzogIiNmNTllMGIiLAogICAgICAgICAgYWNjZW50RXJyb3I6ICIjZWY0NDQ0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgc3BhY2luZzogewogICAgICAgIHhzOiAiNHB4IiwKICAgICAgICBzbTogIjhweCIsCiAgICAgICAgbWQ6ICIxMnB4IiwKICAgICAgICBsZzogIjE2cHgiLAogICAgICAgIHhsOiAiMjRweCIsCiAgICAgICAgIjJ4bCI6ICIzMnB4IiwKICAgICAgICAiM3hsIjogIjQ4cHgiCiAgICAgIH0sCiAgICAgIHJhZGl1czogewogICAgICAgIHhzOiAiMnB4IiwKICAgICAgICBzbTogIjRweCIsCiAgICAgICAgbWQ6ICI2cHgiLAogICAgICAgIGxnOiAiOHB4IiwKICAgICAgICB4bDogIjEycHgiLAogICAgICAgIGZ1bGw6ICI5OTlweCIKICAgICAgfSwKICAgICAgc2hhZG93czogewogICAgICAgIHhzOiAiMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSkiLAogICAgICAgIHNtOiAiMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSIsCiAgICAgICAgbWQ6ICIwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsCiAgICAgICAgbGc6ICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiCiAgICAgIH0sCiAgICAgIHRyYW5zaXRpb25zOiB7CiAgICAgICAgZmFzdDogIjAuMXMiLAogICAgICAgIGRlZmF1bHQ6ICIwLjE1cyIsCiAgICAgICAgc2xvdzogIjAuMnMiLAogICAgICAgIHNsb3dlcjogIjAuM3MiCiAgICAgIH0sCiAgICAgIGNvbnRyb2xIZWlnaHRzOiB7CiAgICAgICAgc206ICIzMnB4IiwKICAgICAgICBtZDogIjM2cHgiLAogICAgICAgIGxnOiAiNDBweCIsCiAgICAgICAgeGw6ICI0OHB4IgogICAgICB9CiAgICB9OwogICAgdGhlbWVEZWZhdWx0U3R5bGVzID0gaWAKICA6aG9zdCB7CiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTcGFjaW5nIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc3BhY2luZy14czogNHB4OwogICAgLS1kZWVzLXNwYWNpbmctc206IDhweDsKICAgIC0tZGVlcy1zcGFjaW5nLW1kOiAxMnB4OwogICAgLS1kZWVzLXNwYWNpbmctbGc6IDE2cHg7CiAgICAtLWRlZXMtc3BhY2luZy14bDogMjRweDsKICAgIC0tZGVlcy1zcGFjaW5nLTJ4bDogMzJweDsKICAgIC0tZGVlcy1zcGFjaW5nLTN4bDogNDhweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBCb3JkZXIgUmFkaXVzIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtcmFkaXVzLXhzOiAycHg7CiAgICAtLWRlZXMtcmFkaXVzLXNtOiA0cHg7CiAgICAtLWRlZXMtcmFkaXVzLW1kOiA2cHg7CiAgICAtLWRlZXMtcmFkaXVzLWxnOiA4cHg7CiAgICAtLWRlZXMtcmFkaXVzLXhsOiAxMnB4OwogICAgLS1kZWVzLXJhZGl1cy1mdWxsOiA5OTlweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTaGFkb3cgRWxldmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc2hhZG93LXhzOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgIC0tZGVlcy1zaGFkb3ctc206IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAtLWRlZXMtc2hhZG93LW1kOiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgIC0tZGVlcy1zaGFkb3ctbGc6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBUcmFuc2l0aW9uIER1cmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0OiAwLjFzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDogMC4xNXM7CiAgICAtLWRlZXMtdHJhbnNpdGlvbi1zbG93OiAwLjJzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyOiAwLjNzOwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIENvbnRyb2wgSGVpZ2h0IFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtc206IDMycHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbWQ6IDM2cHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbGc6IDQwcHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQteGw6IDQ4cHg7CiAgfQpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2FkZHJlc3MuanMKdmFyIGluaXRfYWRkcmVzczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvYWRkcmVzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29udGFjdC5qcwp2YXIgaW5pdF9jb250YWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb250YWN0LmpzIigpIHsKICAgIGluaXRfZGlzdF90czMwKCk7CiAgICBpbml0X2Rpc3RfdHMzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL21vbmdvZGVzY3JpcHRvci5qcwp2YXIgaW5pdF9tb25nb2Rlc2NyaXB0b3IyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL21vbmdvZGVzY3JpcHRvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzCnZhciBpbml0X29iamVjdGFjdGlvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMKdmFyIGluaXRfb2JqZWN0c3RhdHVzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL3dyYXBwZWRkYXRhLmpzCnZhciBpbml0X3dyYXBwZWRkYXRhMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS93cmFwcGVkZGF0YS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvaW5kZXguanMKdmFyIGRhdGFiYXNlX2V4cG9ydHMyID0ge307CnZhciBpbml0X2RhdGFiYXNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21vbmdvZGVzY3JpcHRvcjIoKTsKICAgIGluaXRfb2JqZWN0YWN0aW9uMigpOwogICAgaW5pdF9vYmplY3RzdGF0dXMyKCk7CiAgICBpbml0X3dyYXBwZWRkYXRhMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2RvY3VtZW50LmpzCnZhciBpbml0X2RvY3VtZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9kb2N1bWVudC5qcyIoKSB7CiAgICBpbml0X2RhdGFiYXNlMigpOwogICAgaW5pdF9idXNpbmVzczIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2NoZWNraW5nYWNjb3VudC5qcwp2YXIgaW5pdF9jaGVja2luZ2FjY291bnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY2hlY2tpbmdhY2NvdW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czMwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jdXJyZW5jeS5qcwp2YXIgaW5pdF9jdXJyZW5jeTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jdXJyZW5jeS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9leHBlbnNlLmpzCnZhciBpbml0X2V4cGVuc2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvZXhwZW5zZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvYWNjb3VudGluZ2RvYy5qcwp2YXIgaW5pdF9hY2NvdW50aW5nZG9jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvYWNjb3VudGluZ2RvYy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvcGF5bWVudC5qcwp2YXIgaW5pdF9wYXltZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3BheW1lbnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2Uvc3RvY2twcmljZS5qcwp2YXIgaW5pdF9zdG9ja3ByaWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2Uvc3RvY2twcmljZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS90cmFuc2FjdGlvbi5qcwp2YXIgaW5pdF90cmFuc2FjdGlvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS90cmFuc2FjdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbmRleC5qcwp2YXIgZmluYW5jZV9leHBvcnRzMiA9IHt9Owp2YXIgaW5pdF9maW5hbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2hlY2tpbmdhY2NvdW50MigpOwogICAgaW5pdF9jdXJyZW5jeTIoKTsKICAgIGluaXRfZXhwZW5zZTIoKTsKICAgIGluaXRfYWNjb3VudGluZ2RvYygpOwogICAgaW5pdF9wYXltZW50MigpOwogICAgaW5pdF9zdG9ja3ByaWNlKCk7CiAgICBpbml0X3RyYW5zYWN0aW9uMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2pvYi5qcwp2YXIgaW5pdF9qb2IyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2pvYi5qcyIoKSB7CiAgICBpbml0X2ZpbmFuY2UyKCk7CiAgICBpbml0X2NvbnRhY3QyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvbGV0dGVyLmpzCnZhciBpbml0X2xldHRlcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvbGV0dGVyLmpzIigpIHsKICAgIGluaXRfYnVzaW5lc3MyKCk7CiAgICBpbml0X2ZpbmFuY2UyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzCnZhciBpbml0X3BkZjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wcm9qZWN0LmpzCnZhciBpbml0X3Byb2plY3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzCnZhciBidXNpbmVzc19leHBvcnRzMiA9IHt9Owp2YXIgaW5pdF9idXNpbmVzczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvaW5kZXguanMiKCkgewogICAgaW5pdF9hZGRyZXNzMigpOwogICAgaW5pdF9jb250YWN0MigpOwogICAgaW5pdF9kb2N1bWVudDIoKTsKICAgIGluaXRfam9iMigpOwogICAgaW5pdF9sZXR0ZXIyKCk7CiAgICBpbml0X3BkZjIoKTsKICAgIGluaXRfcHJvamVjdDIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2NvbW1pdGluZm8uanMKdmFyIGluaXRfY29tbWl0aW5mbzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9jb21taXRpbmZvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL3N0YXR1c29iamVjdC5qcwp2YXIgaW5pdF9zdGF0dXNvYmplY3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvc3RhdHVzb2JqZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzCnZhciBjb2RlX2V4cG9ydHMyID0ge307CnZhciBpbml0X2NvZGU0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21taXRpbmZvMigpOwogICAgaW5pdF9zdGF0dXNvYmplY3QyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcwp2YXIgaW5pdF9jb250YWluZXIzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9jb250YWluZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci92b2x1bWVtb3VudC5qcwp2YXIgaW5pdF92b2x1bWVtb3VudDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL3ZvbHVtZW1vdW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMKdmFyIGNvbnRhaW5lcl9leHBvcnRzMiA9IHt9Owp2YXIgaW5pdF9jb250YWluZXI0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbnRhaW5lcjMoKTsKICAgIGluaXRfdm9sdW1lbW91bnQyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGVzY3JpcHRvcnMvaW5kZXguanMKdmFyIGRlc2NyaXB0b3JzX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZGVzY3JpcHRvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGVzY3JpcHRvcnMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXJ0aWNsZS5qcwp2YXIgaW5pdF9hcnRpY2xlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2FydGljbGUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMzAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2F1dGhvci5qcwp2YXIgaW5pdF9hdXRob3IyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXV0aG9yLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9kb2N1bWVudGF0aW9uc2V0LmpzCnZhciBpbml0X2RvY3VtZW50YXRpb25zZXQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC5qcyIoKSB7CiAgICBpbml0X2FydGljbGUyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9pbmRleC5qcwp2YXIgY29udGVudF9leHBvcnRzMiA9IHt9Owp2YXIgaW5pdF9jb250ZW50NCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzIigpIHsKICAgIGluaXRfYXJ0aWNsZTIoKTsKICAgIGluaXRfYXV0aG9yMigpOwogICAgaW5pdF9kb2N1bWVudGF0aW9uc2V0MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvZGF0ZS5qcwp2YXIgaW5pdF9kYXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2RhdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvdGltZS5qcwp2YXIgaW5pdF90aW1lMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL3RpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvaW5kZXguanMKdmFyIGdlbmVyYWxfZXhwb3J0czIgPSB7fTsKdmFyIGluaXRfZ2VuZXJhbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RhdGUyKCk7CiAgICBpbml0X3RpbWUyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jZXJ0LmpzCnZhciBpbml0X2NlcnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY2VydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcwp2YXIgSUNuYW1lRGVzY3JpcHRvcjI7CnZhciBpbml0X2NuYW1lMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NuYW1lLmpzIigpIHsKICAgIGluaXRfY2VydDIoKTsKICAgIElDbmFtZURlc2NyaXB0b3IyID0gY2xhc3MgewogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RldmljZS5qcwp2YXIgaW5pdF9kZXZpY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Rucy5qcwp2YXIgaW5pdF9kbnMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcwp2YXIgaW5pdF9kbnNjaGFsbGVuZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zY2hhbGxlbmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NvbnZlbmllbmNlLmpzCnZhciBpbml0X2Ruc2NvbnZlbmllbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zY29udmVuaWVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcwp2YXIgaW5pdF9kb21haW5kZWxlZ2F0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RvbWFpbmRlbGVnYXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvand0LmpzCnZhciBpbml0X2p3dDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9qd3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMKdmFyIGluaXRfbmV0d29ya25vZGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcwp2YXIgaW5pdF9yZXF1ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JlcXVlc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmV2ZXJzZXByb3h5LmpzCnZhciBpbml0X3JldmVyc2Vwcm94eTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXZlcnNlcHJveHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvc3NoLmpzCnZhciBpbml0X3NzaDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9zc2guanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvaW5kZXguanMKdmFyIG5ldHdvcmtfZXhwb3J0czIgPSB7fTsKX19leHBvcnQobmV0d29ya19leHBvcnRzMiwgewogIElDbmFtZURlc2NyaXB0b3I6ICgpID0+IElDbmFtZURlc2NyaXB0b3IyCn0pOwp2YXIgaW5pdF9uZXR3b3JrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2VydDIoKTsKICAgIGluaXRfY25hbWUyKCk7CiAgICBpbml0X2RldmljZTIoKTsKICAgIGluaXRfZG5zMigpOwogICAgaW5pdF9kbnNjaGFsbGVuZ2UyKCk7CiAgICBpbml0X2Ruc2NvbnZlbmllbmNlKCk7CiAgICBpbml0X2RvbWFpbmRlbGVnYXRpb24yKCk7CiAgICBpbml0X2p3dDIoKTsKICAgIGluaXRfbmV0d29ya25vZGUyKCk7CiAgICBpbml0X3JlcXVlc3QyKCk7CiAgICBpbml0X3JldmVyc2Vwcm94eTIoKTsKICAgIGluaXRfc3NoMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvcHJvZHVjdC5qcwp2YXIgaW5pdF9wcm9kdWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3Byb2R1Y3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvc3Vic2NyaXB0aW9ucGxhbi5qcwp2YXIgaW5pdF9zdWJzY3JpcHRpb25wbGFuMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3N1YnNjcmlwdGlvbnBsYW4uanMiKCkgewogICAgaW5pdF9wcm9kdWN0MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvaW5kZXguanMKdmFyIHNhYXNfZXhwb3J0czIgPSB7fTsKdmFyIGluaXRfc2FhczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N1YnNjcmlwdGlvbnBsYW4yKCk7CiAgICBpbml0X3Byb2R1Y3QyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcwp2YXIgc3RvcmFnZV9leHBvcnRzMiA9IHt9Owp2YXIgaW5pdF9zdG9yYWdlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zdG9yYWdlL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmsuanMKdmFyIGluaXRfbGluazQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL21lbnVpdGVtLmpzCnZhciBpbml0X21lbnVpdGVtMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL21lbnVpdGVtLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmtibG9jay5qcwp2YXIgaW5pdF9saW5rYmxvY2syID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGlua2Jsb2NrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzCnZhciB3ZWJzaXRlX2V4cG9ydHMyID0ge307CnZhciBpbml0X3dlYnNpdGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saW5rNCgpOwogICAgaW5pdF9tZW51aXRlbTIoKTsKICAgIGluaXRfbGlua2Jsb2NrMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3R5cGVmZXN0Lm93bi5qcwp2YXIgaW5pdF90eXBlZmVzdF9vd24yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3R5cGVmZXN0Lm93bi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czMwID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMwLCB7CiAgYnVzaW5lc3M6ICgpID0+IGJ1c2luZXNzX2V4cG9ydHMyLAogIGNvZGU6ICgpID0+IGNvZGVfZXhwb3J0czIsCiAgY29udGFpbmVyOiAoKSA9PiBjb250YWluZXJfZXhwb3J0czIsCiAgY29udGVudDogKCkgPT4gY29udGVudF9leHBvcnRzMiwKICBkYXRhYmFzZTogKCkgPT4gZGF0YWJhc2VfZXhwb3J0czIsCiAgZGVzY3JpcHRvcnM6ICgpID0+IGRlc2NyaXB0b3JzX2V4cG9ydHMsCiAgZmluYW5jZTogKCkgPT4gZmluYW5jZV9leHBvcnRzMiwKICBnZW5lcmFsOiAoKSA9PiBnZW5lcmFsX2V4cG9ydHMyLAogIG5ldHdvcms6ICgpID0+IG5ldHdvcmtfZXhwb3J0czIsCiAgc2FhczogKCkgPT4gc2Fhc19leHBvcnRzMiwKICBzdG9yYWdlOiAoKSA9PiBzdG9yYWdlX2V4cG9ydHMyLAogIHdlYnNpdGU6ICgpID0+IHdlYnNpdGVfZXhwb3J0czIKfSk7CnZhciBpbml0X2Rpc3RfdHMzMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2J1c2luZXNzMigpOwogICAgaW5pdF9jb2RlNCgpOwogICAgaW5pdF9jb250YWluZXI0KCk7CiAgICBpbml0X2RhdGFiYXNlMigpOwogICAgaW5pdF9kZXNjcmlwdG9ycygpOwogICAgaW5pdF9maW5hbmNlMigpOwogICAgaW5pdF9jb250ZW50NCgpOwogICAgaW5pdF9nZW5lcmFsMigpOwogICAgaW5pdF9uZXR3b3JrMigpOwogICAgaW5pdF9zYWFzMigpOwogICAgaW5pdF9zdG9yYWdlMigpOwogICAgaW5pdF93ZWJzaXRlMigpOwogICAgaW5pdF90eXBlZmVzdF9vd24yKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBwbHVnaW5zLmpzCnZhciBpbml0X3BsdWdpbnM0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwcGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czMwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5kZW1vLmpzCnZhciBkZW1vRnVuYzsKdmFyIGluaXRfZGVlc19jb250ZXh0bWVudV9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLWNvbnRleHRtZW51L2RlZXMtY29udGV4dG1lbnUuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51KCk7CiAgICBkZW1vRnVuYyA9ICgpID0+IGIyYAo8c3R5bGU+CiAgLndpdGhNYXJnaW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDIwcHg7CiAgfQogIC5kZW1vLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMjBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICB9CiAgLmRlbW8tYXJlYSB7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgfQogIC5kZW1vLWFyZWE6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKICB9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJCYXNpYyBDb250ZXh0IE1lbnUgd2l0aCBOZXN0ZWQgU3VibWVudXMiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICAgICAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50QXJnLCBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJmaWxlVGV4dCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJOZXciLCBpY29uTmFtZTogImZpbGVQbHVzIiwgc2hvcnRjdXQ6ICJDbWQrTiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBmaWxlIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiT3BlbiIsIGljb25OYW1lOiAiZm9sZGVyT3BlbiIsIHNob3J0Y3V0OiAiQ21kK08iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIGZpbGUiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJTYXZlIiwgaWNvbk5hbWU6ICJzYXZlIiwgc2hvcnRjdXQ6ICJDbWQrUyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNhdmUiKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiRXhwb3J0IGFzIFBERiIsIGljb25OYW1lOiAiZG93bmxvYWQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHBvcnQgUERGIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiRXhwb3J0IGFzIEhUTUwiLCBpY29uTmFtZTogImNvZGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHBvcnQgSFRNTCIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgIGljb25OYW1lOiAiZWRpdDMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiQ3V0IiwgaWNvbk5hbWU6ICJzY2lzc29ycyIsIHNob3J0Y3V0OiAiQ21kK1giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJDb3B5IiwgaWNvbk5hbWU6ICJjb3B5Iiwgc2hvcnRjdXQ6ICJDbWQrQyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNvcHkiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJQYXN0ZSIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlBhc3RlIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkZpbmQiLCBpY29uTmFtZTogInNlYXJjaCIsIHNob3J0Y3V0OiAiQ21kK0YiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGaW5kIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVwbGFjZSIsIGljb25OYW1lOiAicmVwZWF0Iiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyIsCiAgICAgICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJab29tIEluIiwgaWNvbk5hbWU6ICJ6b29tSW4iLCBzaG9ydGN1dDogIkNtZCsrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBpbiIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlpvb20gT3V0IiwgaWNvbk5hbWU6ICJ6b29tT3V0Iiwgc2hvcnRjdXQ6ICJDbWQrLSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlpvb20gb3V0IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVzZXQgWm9vbSIsIGljb25OYW1lOiAibWF4aW1pemUyIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiRnVsbCBTY3JlZW4iLCBpY29uTmFtZTogIm1heGltaXplIiwgc2hvcnRjdXQ6ICJGMTEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGdWxsIHNjcmVlbiIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgICAgICBpY29uTmFtZTogInNldHRpbmdzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGljb25OYW1lOiAiaGVscENpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJEb2N1bWVudGF0aW9uIiwgaWNvbk5hbWU6ICJib29rIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG9jdW1lbnRhdGlvbiIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIktleWJvYXJkIFNob3J0Y3V0cyIsIGljb25OYW1lOiAia2V5Ym9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQWJvdXQiLCBpY29uTmFtZTogImluZm8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBYm91dCIpIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+CiAgICAgIDxoMz5SaWdodC1jbGljayBhbnl3aGVyZSBpbiB0aGlzIGFyZWE8L2gzPgogICAgICA8cD5BIGNvbnRleHQgbWVudSB3aXRoIG5lc3RlZCBzdWJtZW51cyB3aWxsIGFwcGVhcjwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJDb21wb25lbnQtU3BlY2lmaWMgQ29udGV4dCBNZW51Ij4KICAgIDxkZWVzLWJ1dHRvbiBzdHlsZT0ibWFyZ2luOiAyMHB4OyIgQGNvbnRleHRtZW51PSR7KGV2ZW50QXJnKSA9PiB7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJCdXR0b24gQWN0aW9ucyIsCiAgICAgICAgICBpY29uTmFtZTogIm1vdXNlUG9pbnRlciIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJDbGljayIsIGljb25OYW1lOiAibW91c2UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDbGljayBhY3Rpb24iKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJEb3VibGUgQ2xpY2siLCBpY29uTmFtZTogInphcCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvdWJsZSBjbGljayIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkxvbmcgUHJlc3MiLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTG9uZyBwcmVzcyIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJCdXR0b24gU3RhdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJ0b2dnbGVMZWZ0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICAgIHsgbmFtZTogIkVuYWJsZSIsIGljb25OYW1lOiAiY2hlY2tDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFbmFibGUiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJEaXNhYmxlIiwgaWNvbk5hbWU6ICJ4Q2lyY2xlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRGlzYWJsZSIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJTaG93IiwgaWNvbk5hbWU6ICJleWUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG93IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiSGlkZSIsIGljb25OYW1lOiAiZXllT2ZmIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiSGlkZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEaXNhYmxlZCBBY3Rpb24iLAogICAgICAgICAgaWNvbk5hbWU6ICJiYW4iLAogICAgICAgICAgZGlzYWJsZWQ6IHRydWUsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUaGlzIHNob3VsZCBub3QgcnVuIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJQcm9wZXJ0aWVzIiwKICAgICAgICAgIGljb25OYW1lOiAic2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQnV0dG9uIHByb3BlcnRpZXMiKQogICAgICAgIH0KICAgICAgXSk7CiAgICB9fT5SaWdodC1jbGljayBvbiB0aGlzIGJ1dHRvbjwvZGVlcy1idXR0b24+CiAgPC9kZWVzLXBhbmVsPgoKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJBZHZhbmNlZCBDb250ZXh0IE1lbnUgRXhhbXBsZSI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWFyZWEiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRm9ybWF0IiwKICAgICAgICAgIGljb25OYW1lOiAidHlwZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJCb2xkIiwgaWNvbk5hbWU6ICJib2xkIiwgc2hvcnRjdXQ6ICJDbWQrQiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkJvbGQiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJJdGFsaWMiLCBpY29uTmFtZTogIml0YWxpYyIsIHNob3J0Y3V0OiAiQ21kK0kiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJJdGFsaWMiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJVbmRlcmxpbmUiLCBpY29uTmFtZTogInVuZGVybGluZSIsIHNob3J0Y3V0OiAiQ21kK1UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRlcmxpbmUiKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiRm9udCBTaXplIiwgaWNvbk5hbWU6ICJ0eXBlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRm9udCBzaXplIG1lbnUiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJGb250IENvbG9yIiwgaWNvbk5hbWU6ICJwYWxldHRlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRm9udCBjb2xvciBtZW51IikgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlRyYW5zZm9ybSIsCiAgICAgICAgICBpY29uTmFtZTogInNodWZmbGUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVG8gVXBwZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd1VwIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVXBwZXJjYXNlIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiVG8gTG93ZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd0Rvd24iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJMb3dlcmNhc2UiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJDYXBpdGFsaXplIiwgaWNvbk5hbWU6ICJ0eXBlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ2FwaXRhbGl6ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRGVsZXRlIikKICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+CiAgICAgIDxoMz5BZHZhbmNlZCBOZXN0ZWQgTWVudSBFeGFtcGxlPC9oMz4KICAgICAgPHA+VGhpcyBzaG93cyBkZWVwbHkgbmVzdGVkIHN1Ym1lbnVzIGFuZCB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9uczwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICAKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJTdGF0aWMgQ29udGV4dCBNZW51IChBbHdheXMgVmlzaWJsZSkiPgogICAgPGRlZXMtY29udGV4dG1lbnUKICAgICAgY2xhc3M9IndpdGhNYXJnaW4iCiAgICAgIC5tZW51SXRlbXM9JHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAiUHJvamVjdCIsCiAgICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIH0sCiAgICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICB7IG5hbWU6ICJOZXcgUHJvamVjdCIsIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K04iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJOZXcgcHJvamVjdCIpIH0sCiAgICAgICAgICB7IG5hbWU6ICJPcGVuIFByb2plY3QiLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtPIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBwcm9qZWN0IikgfSwKICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgaWNvbk5hbWU6ICJjbG9jayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEFscGhhIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBBbHBoYSIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlByb2plY3QgQmV0YSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gQmV0YSIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlByb2plY3QgR2FtbWEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEdhbW1hIikgfQogICAgICAgICAgXSB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIlRvb2xzIiwKICAgICAgICBpY29uTmFtZTogInRvb2wiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIH0sCiAgICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICB7IG5hbWU6ICJUZXJtaW5hbCIsIGljb25OYW1lOiAidGVybWluYWwiLCBzaG9ydGN1dDogIkNtZCtUIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVGVybWluYWwiKSB9LAogICAgICAgICAgeyBuYW1lOiAiQ29uc29sZSIsIGljb25OYW1lOiAibW9uaXRvciIsIHNob3J0Y3V0OiAiQ21kK0siLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb25zb2xlIikgfSwKICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgeyBuYW1lOiAiRXh0ZW5zaW9ucyIsIGljb25OYW1lOiAicGFja2FnZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkV4dGVuc2lvbnMiKSB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJQcmVmZXJlbmNlcyIsCiAgICAgICAgaWNvbk5hbWU6ICJzbGlkZXJzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQcmVmZXJlbmNlcyIpCiAgICAgIH0KICAgIF19CiAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogIDwvZGVlcy1wYW5lbD4KPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtd2luZG93bGF5ZXIvZGVlcy13aW5kb3dsYXllci5qcwp2YXIgX19lc0RlY29yYXRlMywgX19ydW5Jbml0aWFsaXplcnM0LCBEZWVzV2luZG93TGF5ZXI7CnZhciBpbml0X2RlZXNfd2luZG93bGF5ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtd2luZG93bGF5ZXIvZGVlcy13aW5kb3dsYXllci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIF9fZXNEZWNvcmF0ZTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzV2luZG93TGF5ZXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13aW5kb3dsYXllciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfb3B0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYmFja2Ryb3BaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50WkluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dpbmRvd0xheWVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9iYWNrZHJvcFpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2NvbnRlbnRaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9iYWNrZHJvcFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJiYWNrZHJvcFpJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYmFja2Ryb3BaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYmFja2Ryb3BaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5iYWNrZHJvcFpJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYmFja2Ryb3BaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfY29udGVudFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb250ZW50WkluZGV4ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycywgX2NvbnRlbnRaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52aXNpYmxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV2luZG93TGF5ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd2luZG93bGF5ZXI+PC9kZWVzLXdpbmRvd2xheWVyPmA7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk92ZXJsYXkiXTsKICAgICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhvcHRpb25zQXJnKSB7CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gZGlzdF90c19leHBvcnRzMjguRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCk7CiAgICAgICAgICBjb25zdCB3aW5kb3dMYXllciA9IG5ldyBEZWVzV2luZG93TGF5ZXIyKCk7CiAgICAgICAgICB3aW5kb3dMYXllci5vcHRpb25zID0gewogICAgICAgICAgICAuLi53aW5kb3dMYXllci5vcHRpb25zLAogICAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgICB9OwogICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQod2luZG93TGF5ZXIpOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHNJbnN0YW5jZS5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgd2luZG93TGF5ZXIuc2hvdygpOwogICAgICAgICAgcmV0dXJuIHdpbmRvd0xheWVyOwogICAgICAgIH0KICAgICAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9vcHRpb25zX2luaXRpYWxpemVycywgewogICAgICAgICAgYmx1cjogZmFsc2UKICAgICAgICB9KTsKICAgICAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICAgICAgZ2V0IGJhY2tkcm9wWkluZGV4KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2JhY2tkcm9wWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBiYWNrZHJvcFpJbmRleCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2JhY2tkcm9wWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9iYWNrZHJvcFpJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMsIDEwMDEpKTsKICAgICAgICBnZXQgY29udGVudFpJbmRleCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZW50WkluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29udGVudFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfY29udGVudFpJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgdmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2aXNpYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgZGlzdF90c19leHBvcnRzMjguZWxlbWVudEJhc2ljLnNldHVwKCk7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgJHtkaXN0X3RzX2V4cG9ydHMyOC5lbGVtZW50QmFzaWMuc3R5bGVzfQogICAgICA8c3R5bGU+CiAgICAgICAgLndpbmRvd092ZXJsYXkgewogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wKTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYnJpZ2h0bmVzcygxKSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMHB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5iYWNrZHJvcFpJbmRleH07CiAgICAgICAgfQogICAgICAgIC5zbG90Q29udGVudCB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5jb250ZW50WkluZGV4fTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2xvdENvbnRlbnQgPiAqIHsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudmlzaWJsZSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJyaWdodG5lc3MoMC45KSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMnB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLmRpc3BhdGNoQ2xpY2tlZH0gY2xhc3M9IndpbmRvd092ZXJsYXkgJHt0aGlzLnZpc2libGUgPyAidmlzaWJsZSIgOiBudWxsfSI+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90Q29udGVudCI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlOwogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9CiAgICAgICAgZGlzcGF0Y2hDbGlja2VkKCkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2xpY2tlZCIpKTsKICAgICAgICB9CiAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eSgpIHsKICAgICAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7CiAgICAgICAgfQogICAgICAgIGdldENvbnRlbnRaSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50WkluZGV4OwogICAgICAgIH0KICAgICAgICBhc3luYyBzaG93KCkgewogICAgICAgICAgY29uc3QgZG9tdG9vbHMyID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICB0aGlzLmJhY2tkcm9wWkluZGV4ID0gekluZGV4UmVnaXN0cnkuZ2V0TmV4dFpJbmRleCgpOwogICAgICAgICAgdGhpcy5jb250ZW50WkluZGV4ID0gekluZGV4UmVnaXN0cnkuZ2V0TmV4dFpJbmRleCgpOwogICAgICAgICAgekluZGV4UmVnaXN0cnkucmVnaXN0ZXIodGhpcywgdGhpcy5iYWNrZHJvcFpJbmRleCk7CiAgICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhpZGUoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzMi5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGF3YWl0IHRoaXMuaGlkZSgpOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHMyLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgICAgICB0aGlzLnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzV2luZG93TGF5ZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZm9udGF3ZXNvbWUtc3ZnLWNvcmVANy4yLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMKZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkocjExLCBhNSkgewogIChudWxsID09IGE1IHx8IGE1ID4gcjExLmxlbmd0aCkgJiYgKGE1ID0gcjExLmxlbmd0aCk7CiAgZm9yICh2YXIgZTExID0gMCwgbjEyID0gQXJyYXkoYTUpOyBlMTEgPCBhNTsgZTExKyspIG4xMltlMTFdID0gcjExW2UxMV07CiAgcmV0dXJuIG4xMjsKfQpmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocjExKSB7CiAgaWYgKEFycmF5LmlzQXJyYXkocjExKSkgcmV0dXJuIHIxMTsKfQpmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocjExKSB7CiAgaWYgKEFycmF5LmlzQXJyYXkocjExKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIxMSk7Cn0KZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGE1LCBuMTIpIHsKICBpZiAoIShhNSBpbnN0YW5jZW9mIG4xMikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwp9CmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUxMSwgcjExKSB7CiAgZm9yICh2YXIgdDkgPSAwOyB0OSA8IHIxMS5sZW5ndGg7IHQ5KyspIHsKICAgIHZhciBvMTMgPSByMTFbdDldOwogICAgbzEzLmVudW1lcmFibGUgPSBvMTMuZW51bWVyYWJsZSB8fCBmYWxzZSwgbzEzLmNvbmZpZ3VyYWJsZSA9IHRydWUsICJ2YWx1ZSIgaW4gbzEzICYmIChvMTMud3JpdGFibGUgPSB0cnVlKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgX3RvUHJvcGVydHlLZXkobzEzLmtleSksIG8xMyk7CiAgfQp9CmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlMTEsIHIxMSwgdDkpIHsKICByZXR1cm4gcjExICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUxMS5wcm90b3R5cGUsIHIxMSksIHQ5ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUxMSwgdDkpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCAicHJvdG90eXBlIiwgewogICAgd3JpdGFibGU6IGZhbHNlCiAgfSksIGUxMTsKfQpmdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihyMTEsIGUxMSkgewogIHZhciB0OSA9ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgcjExW1N5bWJvbC5pdGVyYXRvcl0gfHwgcjExWyJAQGl0ZXJhdG9yIl07CiAgaWYgKCF0OSkgewogICAgaWYgKEFycmF5LmlzQXJyYXkocjExKSB8fCAodDkgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExKSkgfHwgZTExICYmIHIxMSAmJiAibnVtYmVyIiA9PSB0eXBlb2YgcjExLmxlbmd0aCkgewogICAgICB0OSAmJiAocjExID0gdDkpOwogICAgICB2YXIgbjEyID0gMCwgRjIgPSBmdW5jdGlvbigpIHsKICAgICAgfTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzOiBGMiwKICAgICAgICBuOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBuMTIgPj0gcjExLmxlbmd0aCA/IHsKICAgICAgICAgICAgZG9uZTogdHJ1ZQogICAgICAgICAgfSA6IHsKICAgICAgICAgICAgZG9uZTogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlOiByMTFbbjEyKytdCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgZTogZnVuY3Rpb24ocjEyKSB7CiAgICAgICAgICB0aHJvdyByMTI7CiAgICAgICAgfSwKICAgICAgICBmOiBGMgogICAgICB9OwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpOwogIH0KICB2YXIgbzEzLCBhNSA9IHRydWUsIHU3ID0gZmFsc2U7CiAgcmV0dXJuIHsKICAgIHM6IGZ1bmN0aW9uKCkgewogICAgICB0OSA9IHQ5LmNhbGwocjExKTsKICAgIH0sCiAgICBuOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHIxMiA9IHQ5Lm5leHQoKTsKICAgICAgcmV0dXJuIGE1ID0gcjEyLmRvbmUsIHIxMjsKICAgIH0sCiAgICBlOiBmdW5jdGlvbihyMTIpIHsKICAgICAgdTcgPSB0cnVlLCBvMTMgPSByMTI7CiAgICB9LAogICAgZjogZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgYTUgfHwgbnVsbCA9PSB0OS5yZXR1cm4gfHwgdDkucmV0dXJuKCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKHU3KSB0aHJvdyBvMTM7CiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMSwgdDkpIHsKICByZXR1cm4gKHIxMSA9IF90b1Byb3BlcnR5S2V5KHIxMSkpIGluIGUxMSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMSwgewogICAgdmFsdWU6IHQ5LAogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgIHdyaXRhYmxlOiB0cnVlCiAgfSkgOiBlMTFbcjExXSA9IHQ5LCBlMTE7Cn0KZnVuY3Rpb24gX2luaGVyaXRzKHQ5LCBlMTEpIHsKICBpZiAoImZ1bmN0aW9uIiAhPSB0eXBlb2YgZTExICYmIG51bGwgIT09IGUxMSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICB0OS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUxMSAmJiBlMTEucHJvdG90eXBlLCB7CiAgICBjb25zdHJ1Y3RvcjogewogICAgICB2YWx1ZTogdDksCiAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICBjb25maWd1cmFibGU6IHRydWUKICAgIH0KICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQ5LCAicHJvdG90eXBlIiwgewogICAgd3JpdGFibGU6IGZhbHNlCiAgfSksIGUxMSAmJiBfc2V0UHJvdG90eXBlT2YodDksIGUxMSk7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyMTEpIHsKICBpZiAoInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHIxMVtTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcjExWyJAQGl0ZXJhdG9yIl0pIHJldHVybiBBcnJheS5mcm9tKHIxMSk7Cn0KZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIxMSwgbDYpIHsKICB2YXIgdDkgPSBudWxsID09IHIxMSA/IG51bGwgOiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIHIxMVtTeW1ib2wuaXRlcmF0b3JdIHx8IHIxMVsiQEBpdGVyYXRvciJdOwogIGlmIChudWxsICE9IHQ5KSB7CiAgICB2YXIgZTExLCBuMTIsIGkxMSwgdTcsIGE1ID0gW10sIGY3ID0gdHJ1ZSwgbzEzID0gZmFsc2U7CiAgICB0cnkgewogICAgICBpZiAoaTExID0gKHQ5ID0gdDkuY2FsbChyMTEpKS5uZXh0LCAwID09PSBsNikgewogICAgICAgIGlmIChPYmplY3QodDkpICE9PSB0OSkgcmV0dXJuOwogICAgICAgIGY3ID0gZmFsc2U7CiAgICAgIH0gZWxzZSBmb3IgKDsgIShmNyA9IChlMTEgPSBpMTEuY2FsbCh0OSkpLmRvbmUpICYmIChhNS5wdXNoKGUxMS52YWx1ZSksIGE1Lmxlbmd0aCAhPT0gbDYpOyBmNyA9IHRydWUpIDsKICAgIH0gY2F0Y2ggKHIxMikgewogICAgICBvMTMgPSB0cnVlLCBuMTIgPSByMTI7CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmICghZjcgJiYgbnVsbCAhPSB0OS5yZXR1cm4gJiYgKHU3ID0gdDkucmV0dXJuKCksIE9iamVjdCh1NykgIT09IHU3KSkgcmV0dXJuOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGlmIChvMTMpIHRocm93IG4xMjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGE1OwogIH0KfQpmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgewogIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7Cn0KZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgewogIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpOwp9CmZ1bmN0aW9uIG93bktleXMyKGUxMSwgcjExKSB7CiAgdmFyIHQ5ID0gT2JqZWN0LmtleXMoZTExKTsKICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgewogICAgdmFyIG8xMyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZTExKTsKICAgIHIxMSAmJiAobzEzID0gbzEzLmZpbHRlcihmdW5jdGlvbihyMTIpIHsKICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZTExLCByMTIpLmVudW1lcmFibGU7CiAgICB9KSksIHQ5LnB1c2guYXBwbHkodDksIG8xMyk7CiAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMihlMTEpIHsKICBmb3IgKHZhciByMTEgPSAxOyByMTEgPCBhcmd1bWVudHMubGVuZ3RoOyByMTErKykgewogICAgdmFyIHQ5ID0gbnVsbCAhPSBhcmd1bWVudHNbcjExXSA/IGFyZ3VtZW50c1tyMTFdIDoge307CiAgICByMTEgJSAyID8gb3duS2V5czIoT2JqZWN0KHQ5KSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbihyMTIpIHsKICAgICAgX2RlZmluZVByb3BlcnR5KGUxMSwgcjEyLCB0OVtyMTJdKTsKICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlMTEsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQ5KSkgOiBvd25LZXlzMihPYmplY3QodDkpKS5mb3JFYWNoKGZ1bmN0aW9uKHIxMikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCByMTIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodDksIHIxMikpOwogICAgfSk7CiAgfQogIHJldHVybiBlMTE7Cn0KZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQ5LCBlMTEpIHsKICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICByZXR1cm4gdDEwLl9fcHJvdG9fXyA9IGUxMiwgdDEwOwogIH0sIF9zZXRQcm90b3R5cGVPZih0OSwgZTExKTsKfQpmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyMTEsIGUxMSkgewogIHJldHVybiBfYXJyYXlXaXRoSG9sZXMocjExKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQocjExLCBlMTEpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEsIGUxMSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOwp9CmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyMTEpIHsKICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKHIxMSkgfHwgX2l0ZXJhYmxlVG9BcnJheShyMTEpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOwp9CmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0OSwgcjExKSB7CiAgaWYgKCJvYmplY3QiICE9IHR5cGVvZiB0OSB8fCAhdDkpIHJldHVybiB0OTsKICB2YXIgZTExID0gdDlbU3ltYm9sLnRvUHJpbWl0aXZlXTsKICBpZiAodm9pZCAwICE9PSBlMTEpIHsKICAgIHZhciBpMTEgPSBlMTEuY2FsbCh0OSwgcjExIHx8ICJkZWZhdWx0Iik7CiAgICBpZiAoIm9iamVjdCIgIT0gdHlwZW9mIGkxMSkgcmV0dXJuIGkxMTsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIik7CiAgfQogIHJldHVybiAoInN0cmluZyIgPT09IHIxMSA/IFN0cmluZyA6IE51bWJlcikodDkpOwp9CmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQ5KSB7CiAgdmFyIGkxMSA9IF90b1ByaW1pdGl2ZSh0OSwgInN0cmluZyIpOwogIHJldHVybiAic3ltYm9sIiA9PSB0eXBlb2YgaTExID8gaTExIDogaTExICsgIiI7Cn0KZnVuY3Rpb24gX3R5cGVvZihvMTMpIHsKICAiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiOwogIHJldHVybiBfdHlwZW9mID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgU3ltYm9sICYmICJzeW1ib2wiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbihvMTQpIHsKICAgIHJldHVybiB0eXBlb2YgbzE0OwogIH0gOiBmdW5jdGlvbihvMTQpIHsKICAgIHJldHVybiBvMTQgJiYgImZ1bmN0aW9uIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8xNC5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8xNCAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG8xNDsKICB9LCBfdHlwZW9mKG8xMyk7Cn0KZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSwgYTUpIHsKICBpZiAocjExKSB7CiAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIHIxMSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIxMSwgYTUpOwogICAgdmFyIHQ5ID0ge30udG9TdHJpbmcuY2FsbChyMTEpLnNsaWNlKDgsIC0xKTsKICAgIHJldHVybiAiT2JqZWN0IiA9PT0gdDkgJiYgcjExLmNvbnN0cnVjdG9yICYmICh0OSA9IHIxMS5jb25zdHJ1Y3Rvci5uYW1lKSwgIk1hcCIgPT09IHQ5IHx8ICJTZXQiID09PSB0OSA/IEFycmF5LmZyb20ocjExKSA6ICJBcmd1bWVudHMiID09PSB0OSB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0OSkgPyBfYXJyYXlMaWtlVG9BcnJheShyMTEsIGE1KSA6IHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gX3dyYXBSZWdFeHAoKSB7CiAgX3dyYXBSZWdFeHAgPSBmdW5jdGlvbihlMTIsIHIxMikgewogICAgcmV0dXJuIG5ldyBCYWJlbFJlZ0V4cChlMTIsIHZvaWQgMCwgcjEyKTsKICB9OwogIHZhciBlMTEgPSBSZWdFeHAucHJvdG90eXBlLCByMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBCYWJlbFJlZ0V4cChlMTIsIHQ5LCBwNykgewogICAgdmFyIG8xMyA9IFJlZ0V4cChlMTIsIHQ5KTsKICAgIHJldHVybiByMTEuc2V0KG8xMywgcDcgfHwgcjExLmdldChlMTIpKSwgX3NldFByb3RvdHlwZU9mKG8xMywgQmFiZWxSZWdFeHAucHJvdG90eXBlKTsKICB9CiAgZnVuY3Rpb24gYnVpbGRHcm91cHMoZTEyLCB0OSkgewogICAgdmFyIHA3ID0gcjExLmdldCh0OSk7CiAgICByZXR1cm4gT2JqZWN0LmtleXMocDcpLnJlZHVjZShmdW5jdGlvbihyMTIsIHQxMCkgewogICAgICB2YXIgbzEzID0gcDdbdDEwXTsKICAgICAgaWYgKCJudW1iZXIiID09IHR5cGVvZiBvMTMpIHIxMlt0MTBdID0gZTEyW28xM107CiAgICAgIGVsc2UgewogICAgICAgIGZvciAodmFyIGkxMSA9IDA7IHZvaWQgMCA9PT0gZTEyW28xM1tpMTFdXSAmJiBpMTEgKyAxIDwgbzEzLmxlbmd0aDsgKSBpMTErKzsKICAgICAgICByMTJbdDEwXSA9IGUxMltvMTNbaTExXV07CiAgICAgIH0KICAgICAgcmV0dXJuIHIxMjsKICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTsKICB9CiAgcmV0dXJuIF9pbmhlcml0cyhCYWJlbFJlZ0V4cCwgUmVnRXhwKSwgQmFiZWxSZWdFeHAucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihyMTIpIHsKICAgIHZhciB0OSA9IGUxMS5leGVjLmNhbGwodGhpcywgcjEyKTsKICAgIGlmICh0OSkgewogICAgICB0OS5ncm91cHMgPSBidWlsZEdyb3Vwcyh0OSwgdGhpcyk7CiAgICAgIHZhciBwNyA9IHQ5LmluZGljZXM7CiAgICAgIHA3ICYmIChwNy5ncm91cHMgPSBidWlsZEdyb3VwcyhwNywgdGhpcykpOwogICAgfQogICAgcmV0dXJuIHQ5OwogIH0sIEJhYmVsUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wucmVwbGFjZV0gPSBmdW5jdGlvbih0OSwgcDcpIHsKICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgcDcpIHsKICAgICAgdmFyIG8xMyA9IHIxMS5nZXQodGhpcyk7CiAgICAgIHJldHVybiBlMTFbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdDksIHA3LnJlcGxhY2UoL1wkPChbXj5dKykoPnwkKS9nLCBmdW5jdGlvbihlMTIsIHIxMiwgdDEwKSB7CiAgICAgICAgaWYgKCIiID09PSB0MTApIHJldHVybiBlMTI7CiAgICAgICAgdmFyIHA4ID0gbzEzW3IxMl07CiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocDgpID8gIiQiICsgcDguam9pbigiJCIpIDogIm51bWJlciIgPT0gdHlwZW9mIHA4ID8gIiQiICsgcDggOiAiIjsKICAgICAgfSkpOwogICAgfQogICAgaWYgKCJmdW5jdGlvbiIgPT0gdHlwZW9mIHA3KSB7CiAgICAgIHZhciBpMTEgPSB0aGlzOwogICAgICByZXR1cm4gZTExW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQ5LCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZTEyID0gYXJndW1lbnRzOwogICAgICAgIHJldHVybiAib2JqZWN0IiAhPSB0eXBlb2YgZTEyW2UxMi5sZW5ndGggLSAxXSAmJiAoZTEyID0gW10uc2xpY2UuY2FsbChlMTIpKS5wdXNoKGJ1aWxkR3JvdXBzKGUxMiwgaTExKSksIHA3LmFwcGx5KHRoaXMsIGUxMik7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGUxMVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0OSwgcDcpOwogIH0sIF93cmFwUmVnRXhwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn0KZnVuY3Rpb24gZmFtaWx5UHJveHkob2JqKSB7CiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHsKICAgIGdldDogZnVuY3Rpb24gZ2V0Mih0YXJnZXQsIHByb3ApIHsKICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0ID8gdGFyZ2V0W3Byb3BdIDogdGFyZ2V0W2kxMF07CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0QXR0ckNvbmZpZyhhdHRyKSB7CiAgdmFyIGVsZW1lbnQ0ID0gRE9DVU1FTlQucXVlcnlTZWxlY3Rvcigic2NyaXB0WyIgKyBhdHRyICsgIl0iKTsKICBpZiAoZWxlbWVudDQpIHsKICAgIHJldHVybiBlbGVtZW50NC5nZXRBdHRyaWJ1dGUoYXR0cik7CiAgfQp9CmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHsKICBpZiAodmFsID09PSAiIikgcmV0dXJuIHRydWU7CiAgaWYgKHZhbCA9PT0gImZhbHNlIikgcmV0dXJuIGZhbHNlOwogIGlmICh2YWwgPT09ICJ0cnVlIikgcmV0dXJuIHRydWU7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBvbkNoYW5nZShjYikgewogIF9vbkNoYW5nZUNiLnB1c2goY2IpOwogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIF9vbkNoYW5nZUNiLnNwbGljZShfb25DaGFuZ2VDYi5pbmRleE9mKGNiKSwgMSk7CiAgfTsKfQpmdW5jdGlvbiBpbnNlcnRDc3MoY3NzOCkgewogIGlmICghY3NzOCB8fCAhSVNfRE9NKSB7CiAgICByZXR1cm47CiAgfQogIHZhciBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGUuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzODsKICB2YXIgaGVhZENoaWxkcmVuID0gRE9DVU1FTlQuaGVhZC5jaGlsZE5vZGVzOwogIHZhciBiZWZvcmVDaGlsZCA9IG51bGw7CiAgZm9yICh2YXIgaTExID0gaGVhZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkxMSA+IC0xOyBpMTEtLSkgewogICAgdmFyIGNoaWxkID0gaGVhZENoaWxkcmVuW2kxMV07CiAgICB2YXIgdGFnTmFtZSA9IChjaGlsZC50YWdOYW1lIHx8ICIiKS50b1VwcGVyQ2FzZSgpOwogICAgaWYgKFsiU1RZTEUiLCAiTElOSyJdLmluZGV4T2YodGFnTmFtZSkgPiAtMSkgewogICAgICBiZWZvcmVDaGlsZCA9IGNoaWxkOwogICAgfQogIH0KICBET0NVTUVOVC5oZWFkLmluc2VydEJlZm9yZShzdHlsZSwgYmVmb3JlQ2hpbGQpOwogIHJldHVybiBjc3M4Owp9CmZ1bmN0aW9uIG5leHRVbmlxdWVJZCgpIHsKICB2YXIgc2l6ZSA9IDEyOwogIHZhciBpZCA9ICIiOwogIHdoaWxlIChzaXplLS0gPiAwKSB7CiAgICBpZCArPSBpZFBvb2xbTWF0aC5yYW5kb20oKSAqIDYyIHwgMF07CiAgfQogIHJldHVybiBpZDsKfQpmdW5jdGlvbiB0b0FycmF5MihvYmopIHsKICB2YXIgYXJyYXkgPSBbXTsKICBmb3IgKHZhciBpMTEgPSAob2JqIHx8IFtdKS5sZW5ndGggPj4+IDA7IGkxMS0tOyApIHsKICAgIGFycmF5W2kxMV0gPSBvYmpbaTExXTsKICB9CiAgcmV0dXJuIGFycmF5Owp9CmZ1bmN0aW9uIGNsYXNzQXJyYXkobm9kZTIpIHsKICBpZiAobm9kZTIuY2xhc3NMaXN0KSB7CiAgICByZXR1cm4gdG9BcnJheTIobm9kZTIuY2xhc3NMaXN0KTsKICB9IGVsc2UgewogICAgcmV0dXJuIChub2RlMi5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIpLnNwbGl0KCIgIikuZmlsdGVyKGZ1bmN0aW9uKGkxMSkgewogICAgICByZXR1cm4gaTExOwogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7CiAgcmV0dXJuICIiLmNvbmNhdChzdHIpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCAiJiMzOTsiKS5yZXBsYWNlKC88L2csICImbHQ7IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpOwp9CmZ1bmN0aW9uIGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgYXR0cmlidXRlTmFtZSkgewogICAgcmV0dXJuIGFjYyArICIiLmNvbmNhdChhdHRyaWJ1dGVOYW1lLCAnPSInKS5jb25jYXQoaHRtbEVzY2FwZShhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSwgJyIgJyk7CiAgfSwgIiIpLnRyaW0oKTsKfQpmdW5jdGlvbiBqb2luU3R5bGVzKHN0eWxlczMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzMyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGVOYW1lKSB7CiAgICByZXR1cm4gYWNjICsgIiIuY29uY2F0KHN0eWxlTmFtZSwgIjogIikuY29uY2F0KHN0eWxlczNbc3R5bGVOYW1lXS50cmltKCksICI7Iik7CiAgfSwgIiIpOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSB7CiAgcmV0dXJuIHRyYW5zZm9ybTIuc2l6ZSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0uc2l6ZSB8fCB0cmFuc2Zvcm0yLnggIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnggfHwgdHJhbnNmb3JtMi55ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS55IHx8IHRyYW5zZm9ybTIucm90YXRlICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5yb3RhdGUgfHwgdHJhbnNmb3JtMi5mbGlwWCB8fCB0cmFuc2Zvcm0yLmZsaXBZOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUZvclN2ZyhfcmVmMikgewogIHZhciB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgdmFyIG91dGVyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGNvbnRhaW5lcldpZHRoIC8gMiwgIiAyNTYpIikKICB9OwogIHZhciBpbm5lclRyYW5zbGF0ZSA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodHJhbnNmb3JtMi54ICogMzIsICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgKiAzMiwgIikgIik7CiAgdmFyIGlubmVyU2NhbGUgPSAic2NhbGUoIi5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBZID8gLTEgOiAxKSwgIikgIik7CiAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgdmFyIGlubmVyID0gewogICAgdHJhbnNmb3JtOiAiIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsICIgIikuY29uY2F0KGlubmVyU2NhbGUsICIgIikuY29uY2F0KGlubmVyUm90YXRlKQogIH07CiAgdmFyIHBhdGgyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGljb25XaWR0aCAvIDIgKiAtMSwgIiAtMjU2KSIpCiAgfTsKICByZXR1cm4gewogICAgb3V0ZXIsCiAgICBpbm5lciwKICAgIHBhdGg6IHBhdGgyCiAgfTsKfQpmdW5jdGlvbiB0cmFuc2Zvcm1Gb3JDc3MoX3JlZjIpIHsKICB2YXIgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybSwgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCwgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJHdpZHRoLCBfcmVmMiRoZWlnaHQgPSBfcmVmMi5oZWlnaHQsIGhlaWdodCA9IF9yZWYyJGhlaWdodCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJGhlaWdodCwgX3JlZjIkc3RhcnRDZW50ZXJlZCA9IF9yZWYyLnN0YXJ0Q2VudGVyZWQsIHN0YXJ0Q2VudGVyZWQgPSBfcmVmMiRzdGFydENlbnRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJHN0YXJ0Q2VudGVyZWQ7CiAgdmFyIHZhbCA9ICIiOwogIGlmIChzdGFydENlbnRlcmVkICYmIElTX0lFKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIgLSB3aWR0aCAvIDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiAtIGhlaWdodCAvIDIsICJlbSkgIik7CiAgfSBlbHNlIGlmIChzdGFydENlbnRlcmVkKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZShjYWxjKC01MCUgKyAiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSksIGNhbGMoLTUwJSArICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgLyBkJDIsICJlbSkpICIpOwogIH0gZWxzZSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiwgImVtKSAiKTsKICB9CiAgdmFsICs9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogIHZhbCArPSAicm90YXRlKCIuY29uY2F0KHRyYW5zZm9ybTIucm90YXRlLCAiZGVnKSAiKTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGNzcygpIHsKICB2YXIgZGNwID0gREVGQVVMVF9DU1NfUFJFRklYOwogIHZhciBkcmMgPSBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTOwogIHZhciBmcCA9IGNvbmZpZzIuY3NzUHJlZml4OwogIHZhciByYyA9IGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzczsKICB2YXIgczEwID0gYmFzZVN0eWxlczsKICBpZiAoZnAgIT09IGRjcCB8fCByYyAhPT0gZHJjKSB7CiAgICB2YXIgZFBhdHQgPSBuZXcgUmVnRXhwKCJcXC4iLmNvbmNhdChkY3AsICJcXC0iKSwgImciKTsKICAgIHZhciBjdXN0b21Qcm9wUGF0dCA9IG5ldyBSZWdFeHAoIlxcLS0iLmNvbmNhdChkY3AsICJcXC0iKSwgImciKTsKICAgIHZhciByUGF0dCA9IG5ldyBSZWdFeHAoIlxcLiIuY29uY2F0KGRyYyksICJnIik7CiAgICBzMTAgPSBzMTAucmVwbGFjZShkUGF0dCwgIi4iLmNvbmNhdChmcCwgIi0iKSkucmVwbGFjZShjdXN0b21Qcm9wUGF0dCwgIi0tIi5jb25jYXQoZnAsICItIikpLnJlcGxhY2UoclBhdHQsICIuIi5jb25jYXQocmMpKTsKICB9CiAgcmV0dXJuIHMxMDsKfQpmdW5jdGlvbiBlbnN1cmVDc3MoKSB7CiAgaWYgKGNvbmZpZzIuYXV0b0FkZENzcyAmJiAhX2Nzc0luc2VydGVkKSB7CiAgICBpbnNlcnRDc3MoY3NzKCkpOwogICAgX2Nzc0luc2VydGVkID0gdHJ1ZTsKICB9Cn0KZnVuY3Rpb24gZG9tcmVhZHkoZm4pIHsKICBpZiAoIUlTX0RPTSkgcmV0dXJuOwogIGxvYWRlZCA/IHNldFRpbWVvdXQoZm4sIDApIDogZnVuY3Rpb25zLnB1c2goZm4pOwp9CmZ1bmN0aW9uIHRvSHRtbDIoYWJzdHJhY3ROb2RlcykgewogIHZhciB0YWcgPSBhYnN0cmFjdE5vZGVzLnRhZywgX2Fic3RyYWN0Tm9kZXMkYXR0cmliID0gYWJzdHJhY3ROb2Rlcy5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX2Fic3RyYWN0Tm9kZXMkYXR0cmliID09PSB2b2lkIDAgPyB7fSA6IF9hYnN0cmFjdE5vZGVzJGF0dHJpYiwgX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID0gYWJzdHJhY3ROb2Rlcy5jaGlsZHJlbiwgY2hpbGRyZW4yID0gX2Fic3RyYWN0Tm9kZXMkY2hpbGRyID09PSB2b2lkIDAgPyBbXSA6IF9hYnN0cmFjdE5vZGVzJGNoaWxkcjsKICBpZiAodHlwZW9mIGFic3RyYWN0Tm9kZXMgPT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gaHRtbEVzY2FwZShhYnN0cmFjdE5vZGVzKTsKICB9IGVsc2UgewogICAgcmV0dXJuICI8Ii5jb25jYXQodGFnLCAiICIpLmNvbmNhdChqb2luQXR0cmlidXRlcyhhdHRyaWJ1dGVzKSwgIj4iKS5jb25jYXQoY2hpbGRyZW4yLm1hcCh0b0h0bWwyKS5qb2luKCIiKSwgIjwvIikuY29uY2F0KHRhZywgIj4iKTsKICB9Cn0KZnVuY3Rpb24gaWNvbkZyb21NYXBwaW5nKG1hcHBpbmcsIHByZWZpeDQsIGljb25OYW1lKSB7CiAgaWYgKG1hcHBpbmcgJiYgbWFwcGluZ1twcmVmaXg0XSAmJiBtYXBwaW5nW3ByZWZpeDRdW2ljb25OYW1lXSkgewogICAgcmV0dXJuIHsKICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICBpY29uTmFtZSwKICAgICAgaWNvbjogbWFwcGluZ1twcmVmaXg0XVtpY29uTmFtZV0KICAgIH07CiAgfQp9CmZ1bmN0aW9uIHRvSGV4KHVuaWNvZGUpIHsKICBpZiAoX3RvQ29uc3VtYWJsZUFycmF5KHVuaWNvZGUpLmxlbmd0aCAhPT0gMSkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHVuaWNvZGUuY29kZVBvaW50QXQoMCkudG9TdHJpbmcoMTYpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZUljb25zKGljb25zNikgewogIHJldHVybiBPYmplY3Qua2V5cyhpY29uczYpLnJlZHVjZShmdW5jdGlvbihhY2MsIGljb25OYW1lKSB7CiAgICB2YXIgaWNvbjMgPSBpY29uczZbaWNvbk5hbWVdOwogICAgdmFyIGV4cGFuZGVkID0gISFpY29uMy5pY29uOwogICAgaWYgKGV4cGFuZGVkKSB7CiAgICAgIGFjY1tpY29uMy5pY29uTmFtZV0gPSBpY29uMy5pY29uOwogICAgfSBlbHNlIHsKICAgICAgYWNjW2ljb25OYW1lXSA9IGljb24zOwogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCB7fSk7Cn0KZnVuY3Rpb24gZGVmaW5lSWNvbnMocHJlZml4NCwgaWNvbnM2KSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9OwogIHZhciBfcGFyYW1zJHNraXBIb29rcyA9IHBhcmFtczIuc2tpcEhvb2tzLCBza2lwSG9va3MgPSBfcGFyYW1zJHNraXBIb29rcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHNraXBIb29rczsKICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUljb25zKGljb25zNik7CiAgaWYgKHR5cGVvZiBuYW1lc3BhY2UuaG9va3MuYWRkUGFjayA9PT0gImZ1bmN0aW9uIiAmJiAhc2tpcEhvb2tzKSB7CiAgICBuYW1lc3BhY2UuaG9va3MuYWRkUGFjayhwcmVmaXg0LCBub3JtYWxpemVJY29ucyhpY29uczYpKTsKICB9IGVsc2UgewogICAgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXg0XSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBuYW1lc3BhY2Uuc3R5bGVzW3ByZWZpeDRdIHx8IHt9KSwgbm9ybWFsaXplZCk7CiAgfQogIGlmIChwcmVmaXg0ID09PSAiZmFzIikgewogICAgZGVmaW5lSWNvbnMoImZhIiwgaWNvbnM2KTsKICB9Cn0KZnVuY3Rpb24gaXNSZXNlcnZlZChuYW1lKSB7CiAgcmV0dXJuIH5SRVNFUlZFRF9DTEFTU0VTLmluZGV4T2YobmFtZSk7Cn0KZnVuY3Rpb24gZ2V0SWNvbk5hbWUoY3NzUHJlZml4LCBjbHMpIHsKICB2YXIgcGFydHMgPSBjbHMuc3BsaXQoIi0iKTsKICB2YXIgcHJlZml4NCA9IHBhcnRzWzBdOwogIHZhciBpY29uTmFtZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi0iKTsKICBpZiAocHJlZml4NCA9PT0gY3NzUHJlZml4ICYmIGljb25OYW1lICE9PSAiIiAmJiAhaXNSZXNlcnZlZChpY29uTmFtZSkpIHsKICAgIHJldHVybiBpY29uTmFtZTsKICB9IGVsc2UgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CmZ1bmN0aW9uIGJ5VW5pY29kZShwcmVmaXg0LCB1bmljb2RlKSB7CiAgcmV0dXJuIChfYnlVbmljb2RlW3ByZWZpeDRdIHx8IHt9KVt1bmljb2RlXTsKfQpmdW5jdGlvbiBieUxpZ2F0dXJlKHByZWZpeDQsIGxpZ2F0dXJlKSB7CiAgcmV0dXJuIChfYnlMaWdhdHVyZVtwcmVmaXg0XSB8fCB7fSlbbGlnYXR1cmVdOwp9CmZ1bmN0aW9uIGJ5QWxpYXMocHJlZml4NCwgYWxpYXMpIHsKICByZXR1cm4gKF9ieUFsaWFzW3ByZWZpeDRdIHx8IHt9KVthbGlhc107Cn0KZnVuY3Rpb24gYnlPbGROYW1lKG5hbWUpIHsKICByZXR1cm4gX2J5T2xkTmFtZVtuYW1lXSB8fCB7CiAgICBwcmVmaXg6IG51bGwsCiAgICBpY29uTmFtZTogbnVsbAogIH07Cn0KZnVuY3Rpb24gYnlPbGRVbmljb2RlKHVuaWNvZGUpIHsKICB2YXIgb2xkVW5pY29kZSA9IF9ieU9sZFVuaWNvZGVbdW5pY29kZV07CiAgdmFyIG5ld1VuaWNvZGUgPSBieVVuaWNvZGUoImZhcyIsIHVuaWNvZGUpOwogIHJldHVybiBvbGRVbmljb2RlIHx8IChuZXdVbmljb2RlID8gewogICAgcHJlZml4OiAiZmFzIiwKICAgIGljb25OYW1lOiBuZXdVbmljb2RlCiAgfSA6IG51bGwpIHx8IHsKICAgIHByZWZpeDogbnVsbCwKICAgIGljb25OYW1lOiBudWxsCiAgfTsKfQpmdW5jdGlvbiBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgewogIHJldHVybiBfZGVmYXVsdFVzYWJsZVByZWZpeDsKfQpmdW5jdGlvbiBnZXRGYW1pbHlJZCh2YWx1ZXMpIHsKICB2YXIgZmFtaWx5ID0gaTEwOwogIHZhciBmYW1Qcm9wcyA9IEZBTUlMWV9OQU1FUy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBmYW1pbHlJZCkgewogICAgYWNjW2ZhbWlseUlkXSA9ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoZmFtaWx5SWQpOwogICAgcmV0dXJuIGFjYzsKICB9LCB7fSk7CiAgZHQyLmZvckVhY2goZnVuY3Rpb24oZmFtaWx5SWQpIHsKICAgIGlmICh2YWx1ZXMuaW5jbHVkZXMoZmFtUHJvcHNbZmFtaWx5SWRdKSB8fCB2YWx1ZXMuc29tZShmdW5jdGlvbih2JCQxKSB7CiAgICAgIHJldHVybiBQUkVGSVhFU19GT1JfRkFNSUxZW2ZhbWlseUlkXS5pbmNsdWRlcyh2JCQxKTsKICAgIH0pKSB7CiAgICAgIGZhbWlseSA9IGZhbWlseUlkOwogICAgfQogIH0pOwogIHJldHVybiBmYW1pbHk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlT3JQcmVmaXgpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkZmFtaWx5ID0gcGFyYW1zMi5mYW1pbHksIGZhbWlseSA9IF9wYXJhbXMkZmFtaWx5ID09PSB2b2lkIDAgPyBpMTAgOiBfcGFyYW1zJGZhbWlseTsKICB2YXIgc3R5bGUgPSBQUkVGSVhfVE9fU1RZTEVbZmFtaWx5XVtzdHlsZU9yUHJlZml4XTsKICBpZiAoZmFtaWx5ID09PSB0OCAmJiAhc3R5bGVPclByZWZpeCkgewogICAgcmV0dXJuICJmYWQiOwogIH0KICB2YXIgcHJlZml4NCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTsKICB2YXIgZGVmaW5lZCA9IHN0eWxlT3JQcmVmaXggaW4gbmFtZXNwYWNlLnN0eWxlcyA/IHN0eWxlT3JQcmVmaXggOiBudWxsOwogIHZhciByZXN1bHQgPSBwcmVmaXg0IHx8IGRlZmluZWQgfHwgbnVsbDsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIG1vdmVOb25GYUNsYXNzZXNUb1Jlc3QoY2xhc3NOYW1lcykgewogIHZhciByZXN0ID0gW107CiAgdmFyIGljb25OYW1lID0gbnVsbDsKICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24oY2xzKSB7CiAgICB2YXIgcmVzdWx0ID0gZ2V0SWNvbk5hbWUoY29uZmlnMi5jc3NQcmVmaXgsIGNscyk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgIGljb25OYW1lID0gcmVzdWx0OwogICAgfSBlbHNlIGlmIChjbHMpIHsKICAgICAgcmVzdC5wdXNoKGNscyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lLAogICAgcmVzdAogIH07Cn0KZnVuY3Rpb24gc29ydGVkVW5pcXVlVmFsdWVzKGFycikgewogIHJldHVybiBhcnIuc29ydCgpLmZpbHRlcihmdW5jdGlvbih2YWx1ZTIsIGluZGV4MiwgYXJyMikgewogICAgcmV0dXJuIGFycjIuaW5kZXhPZih2YWx1ZTIpID09PSBpbmRleDI7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsSWNvbih2YWx1ZXMpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkc2tpcExvb2t1cHMgPSBwYXJhbXMyLnNraXBMb29rdXBzLCBza2lwTG9va3VwcyA9IF9wYXJhbXMkc2tpcExvb2t1cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwTG9va3VwczsKICB2YXIgZ2l2ZW5QcmVmaXggPSBudWxsOwogIHZhciBmYVN0eWxlT3JGYW1pbHlDbGFzc2VzID0gc29ydGVkVW5pcXVlVmFsdWVzKHZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICByZXR1cm4gX2ZhQ29tYmluZWRDbGFzc2VzLmluY2x1ZGVzKGNscyk7CiAgfSkpOwogIHZhciBub25TdHlsZU9yRmFtaWx5Q2xhc3NlcyA9IHNvcnRlZFVuaXF1ZVZhbHVlcyh2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgcmV0dXJuICFfZmFDb21iaW5lZENsYXNzZXMuaW5jbHVkZXMoY2xzKTsKICB9KSk7CiAgdmFyIGZhU3R5bGVzID0gZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICBnaXZlblByZWZpeCA9IGNsczsKICAgIHJldHVybiAhWjIuaW5jbHVkZXMoY2xzKTsKICB9KTsKICB2YXIgX2ZhU3R5bGVzID0gX3NsaWNlZFRvQXJyYXkoZmFTdHlsZXMsIDEpLCBfZmFTdHlsZXMkID0gX2ZhU3R5bGVzWzBdLCBzdHlsZUZyb21WYWx1ZXMgPSBfZmFTdHlsZXMkID09PSB2b2lkIDAgPyBudWxsIDogX2ZhU3R5bGVzJDsKICB2YXIgZmFtaWx5ID0gZ2V0RmFtaWx5SWQoZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcyk7CiAgdmFyIGNhbm9uaWNhbCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtb3ZlTm9uRmFDbGFzc2VzVG9SZXN0KG5vblN0eWxlT3JGYW1pbHlDbGFzc2VzKSksIHt9LCB7CiAgICBwcmVmaXg6IGdldENhbm9uaWNhbFByZWZpeChzdHlsZUZyb21WYWx1ZXMsIHsKICAgICAgZmFtaWx5CiAgICB9KQogIH0pOwogIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY2Fub25pY2FsKSwgZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeCh7CiAgICB2YWx1ZXMsCiAgICBmYW1pbHksCiAgICBzdHlsZXM6IHN0eWxlczIsCiAgICBjb25maWc6IGNvbmZpZzIsCiAgICBjYW5vbmljYWwsCiAgICBnaXZlblByZWZpeAogIH0pKSwgYXBwbHlTaGltQW5kQWxpYXMoc2tpcExvb2t1cHMsIGdpdmVuUHJlZml4LCBjYW5vbmljYWwpKTsKfQpmdW5jdGlvbiBhcHBseVNoaW1BbmRBbGlhcyhza2lwTG9va3VwcywgZ2l2ZW5QcmVmaXgsIGNhbm9uaWNhbCkgewogIHZhciBwcmVmaXg0ID0gY2Fub25pY2FsLnByZWZpeCwgaWNvbk5hbWUgPSBjYW5vbmljYWwuaWNvbk5hbWU7CiAgaWYgKHNraXBMb29rdXBzIHx8ICFwcmVmaXg0IHx8ICFpY29uTmFtZSkgewogICAgcmV0dXJuIHsKICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICBpY29uTmFtZQogICAgfTsKICB9CiAgdmFyIHNoaW0gPSBnaXZlblByZWZpeCA9PT0gImZhIiA/IGJ5T2xkTmFtZShpY29uTmFtZSkgOiB7fTsKICB2YXIgYWxpYXNJY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpOwogIGljb25OYW1lID0gc2hpbS5pY29uTmFtZSB8fCBhbGlhc0ljb25OYW1lIHx8IGljb25OYW1lOwogIHByZWZpeDQgPSBzaGltLnByZWZpeCB8fCBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmFyIiAmJiAhc3R5bGVzMlsiZmFyIl0gJiYgc3R5bGVzMlsiZmFzIl0gJiYgIWNvbmZpZzIuYXV0b0ZldGNoU3ZnKSB7CiAgICBwcmVmaXg0ID0gImZhcyI7CiAgfQogIHJldHVybiB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZQogIH07Cn0KZnVuY3Rpb24gZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeChwcmVmaXhPcHRpb25zKSB7CiAgdmFyIHZhbHVlcyA9IHByZWZpeE9wdGlvbnMudmFsdWVzLCBmYW1pbHkgPSBwcmVmaXhPcHRpb25zLmZhbWlseSwgY2Fub25pY2FsID0gcHJlZml4T3B0aW9ucy5jYW5vbmljYWwsIF9wcmVmaXhPcHRpb25zJGdpdmVuUCA9IHByZWZpeE9wdGlvbnMuZ2l2ZW5QcmVmaXgsIGdpdmVuUHJlZml4ID0gX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QID09PSB2b2lkIDAgPyAiIiA6IF9wcmVmaXhPcHRpb25zJGdpdmVuUCwgX3ByZWZpeE9wdGlvbnMkc3R5bGVzID0gcHJlZml4T3B0aW9ucy5zdHlsZXMsIHN0eWxlczMgPSBfcHJlZml4T3B0aW9ucyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3ByZWZpeE9wdGlvbnMkc3R5bGVzLCBfcHJlZml4T3B0aW9ucyRjb25maWcgPSBwcmVmaXhPcHRpb25zLmNvbmZpZywgY29uZmlnJCQxID0gX3ByZWZpeE9wdGlvbnMkY29uZmlnID09PSB2b2lkIDAgPyB7fSA6IF9wcmVmaXhPcHRpb25zJGNvbmZpZzsKICB2YXIgaXNEdW90b25lRmFtaWx5ID0gZmFtaWx5ID09PSB0ODsKICB2YXIgdmFsdWVzSGFzRHVvdG9uZSA9IHZhbHVlcy5pbmNsdWRlcygiZmEtZHVvdG9uZSIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFkIik7CiAgdmFyIGRlZmF1bHRGYW1pbHlJc0R1b3RvbmUgPSBjb25maWckJDEuZmFtaWx5RGVmYXVsdCA9PT0gImR1b3RvbmUiOwogIHZhciBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUgPSBjYW5vbmljYWwucHJlZml4ID09PSAiZmFkIiB8fCBjYW5vbmljYWwucHJlZml4ID09PSAiZmEtZHVvdG9uZSI7CiAgaWYgKCFpc0R1b3RvbmVGYW1pbHkgJiYgKHZhbHVlc0hhc0R1b3RvbmUgfHwgZGVmYXVsdEZhbWlseUlzRHVvdG9uZSB8fCBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUpKSB7CiAgICBjYW5vbmljYWwucHJlZml4ID0gImZhZCI7CiAgfQogIGlmICh2YWx1ZXMuaW5jbHVkZXMoImZhLWJyYW5kcyIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFiIikpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSAiZmFiIjsKICB9CiAgaWYgKCFjYW5vbmljYWwucHJlZml4ICYmIG5ld0Nhbm9uaWNhbEZhbWlsaWVzLmluY2x1ZGVzKGZhbWlseSkpIHsKICAgIHZhciB2YWxpZFByZWZpeCA9IE9iamVjdC5rZXlzKHN0eWxlczMpLmZpbmQoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4gbmV3Q2Fub25pY2FsU3R5bGVzLmluY2x1ZGVzKGtleTIpOwogICAgfSk7CiAgICBpZiAodmFsaWRQcmVmaXggfHwgY29uZmlnJCQxLmF1dG9GZXRjaFN2ZykgewogICAgICB2YXIgZGVmYXVsdFByZWZpeCA9IEV0LmdldChmYW1pbHkpLmRlZmF1bHRTaG9ydFByZWZpeElkOwogICAgICBjYW5vbmljYWwucHJlZml4ID0gZGVmYXVsdFByZWZpeDsKICAgICAgY2Fub25pY2FsLmljb25OYW1lID0gYnlBbGlhcyhjYW5vbmljYWwucHJlZml4LCBjYW5vbmljYWwuaWNvbk5hbWUpIHx8IGNhbm9uaWNhbC5pY29uTmFtZTsKICAgIH0KICB9CiAgaWYgKGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYSIgfHwgZ2l2ZW5QcmVmaXggPT09ICJmYSIpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgfHwgImZhcyI7CiAgfQogIHJldHVybiBjYW5vbmljYWw7Cn0KZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW5zKG5leHRQbHVnaW5zLCBfcmVmMikgewogIHZhciBvYmogPSBfcmVmMi5taXhvdXRzVG87CiAgX3BsdWdpbnMgPSBuZXh0UGx1Z2luczsKICBfaG9va3MgPSB7fTsKICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goZnVuY3Rpb24oazQpIHsKICAgIGlmIChkZWZhdWx0UHJvdmlkZXJLZXlzLmluZGV4T2YoazQpID09PSAtMSkgewogICAgICBkZWxldGUgcHJvdmlkZXJzW2s0XTsKICAgIH0KICB9KTsKICBfcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKHBsdWdpbikgewogICAgdmFyIG1peG91dDggPSBwbHVnaW4ubWl4b3V0ID8gcGx1Z2luLm1peG91dCgpIDoge307CiAgICBPYmplY3Qua2V5cyhtaXhvdXQ4KS5mb3JFYWNoKGZ1bmN0aW9uKHRrKSB7CiAgICAgIGlmICh0eXBlb2YgbWl4b3V0OFt0a10gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBvYmpbdGtdID0gbWl4b3V0OFt0a107CiAgICAgIH0KICAgICAgaWYgKF90eXBlb2YobWl4b3V0OFt0a10pID09PSAib2JqZWN0IikgewogICAgICAgIE9iamVjdC5rZXlzKG1peG91dDhbdGtdKS5mb3JFYWNoKGZ1bmN0aW9uKHNrKSB7CiAgICAgICAgICBpZiAoIW9ialt0a10pIHsKICAgICAgICAgICAgb2JqW3RrXSA9IHt9OwogICAgICAgICAgfQogICAgICAgICAgb2JqW3RrXVtza10gPSBtaXhvdXQ4W3RrXVtza107CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHBsdWdpbi5ob29rcykgewogICAgICB2YXIgaG9va3M4ID0gcGx1Z2luLmhvb2tzKCk7CiAgICAgIE9iamVjdC5rZXlzKGhvb2tzOCkuZm9yRWFjaChmdW5jdGlvbihob29rKSB7CiAgICAgICAgaWYgKCFfaG9va3NbaG9va10pIHsKICAgICAgICAgIF9ob29rc1tob29rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBfaG9va3NbaG9va10ucHVzaChob29rczhbaG9va10pOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwbHVnaW4ucHJvdmlkZXMpIHsKICAgICAgcGx1Z2luLnByb3ZpZGVzKHByb3ZpZGVycyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBjaGFpbkhvb2tzKGhvb2ssIGFjY3VtdWxhdG9yKSB7CiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07CiAgfQogIHZhciBob29rRm5zID0gX2hvb2tzW2hvb2tdIHx8IFtdOwogIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbihob29rRm4pIHsKICAgIGFjY3VtdWxhdG9yID0gaG9va0ZuLmFwcGx5KG51bGwsIFthY2N1bXVsYXRvcl0uY29uY2F0KGFyZ3MpKTsKICB9KTsKICByZXR1cm4gYWNjdW11bGF0b3I7Cn0KZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHsKICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTsKICB9CiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107CiAgaG9va0Zucy5mb3JFYWNoKGZ1bmN0aW9uKGhvb2tGbikgewogICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpOwogIH0pOwogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gY2FsbFByb3ZpZGVkKCkgewogIHZhciBob29rID0gYXJndW1lbnRzWzBdOwogIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICByZXR1cm4gcHJvdmlkZXJzW2hvb2tdID8gcHJvdmlkZXJzW2hvb2tdLmFwcGx5KG51bGwsIGFyZ3MpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJY29uRGVmaW5pdGlvbihpY29uTG9va3VwKSB7CiAgaWYgKGljb25Mb29rdXAucHJlZml4ID09PSAiZmEiKSB7CiAgICBpY29uTG9va3VwLnByZWZpeCA9ICJmYXMiOwogIH0KICB2YXIgaWNvbk5hbWUgPSBpY29uTG9va3VwLmljb25OYW1lOwogIHZhciBwcmVmaXg0ID0gaWNvbkxvb2t1cC5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIGlmICghaWNvbk5hbWUpIHJldHVybjsKICBpY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lOwogIHJldHVybiBpY29uRnJvbU1hcHBpbmcobGlicmFyeS5kZWZpbml0aW9ucywgcHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXg0LCBpY29uTmFtZSk7Cn0KZnVuY3Rpb24gZG9tVmFyaWFudHModmFsLCBhYnN0cmFjdENyZWF0b3IpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAiYWJzdHJhY3QiLCB7CiAgICBnZXQ6IGFic3RyYWN0Q3JlYXRvcgogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICJodG1sIiwgewogICAgZ2V0OiBmdW5jdGlvbiBnZXQyKCkgewogICAgICByZXR1cm4gdmFsLmFic3RyYWN0Lm1hcChmdW5jdGlvbihhNSkgewogICAgICAgIHJldHVybiB0b0h0bWwyKGE1KTsKICAgICAgfSk7CiAgICB9CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgIm5vZGUiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgIGlmICghSVNfRE9NKSByZXR1cm4gdm9pZCAwOwogICAgICB2YXIgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB2YWwuaHRtbDsKICAgICAgcmV0dXJuIGNvbnRhaW5lci5jaGlsZHJlbjsKICAgIH0KICB9KTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGFzSWNvbihfcmVmMikgewogIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgbWFpbiA9IF9yZWYyLm1haW4sIG1hc2sgPSBfcmVmMi5tYXNrLCBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcywgc3R5bGVzMyA9IF9yZWYyLnN0eWxlcywgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybTsKICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpICYmIG1haW4uZm91bmQgJiYgIW1hc2suZm91bmQpIHsKICAgIHZhciB3aWR0aCA9IG1haW4ud2lkdGgsIGhlaWdodCA9IG1haW4uaGVpZ2h0OwogICAgdmFyIG9mZnNldCA9IHsKICAgICAgeDogd2lkdGggLyBoZWlnaHQgLyAyLAogICAgICB5OiAwLjUKICAgIH07CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gam9pblN0eWxlcyhfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3R5bGVzMyksIHt9LCB7CiAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogIiIuY29uY2F0KG9mZnNldC54ICsgdHJhbnNmb3JtMi54IC8gMTYsICJlbSAiKS5jb25jYXQob2Zmc2V0LnkgKyB0cmFuc2Zvcm0yLnkgLyAxNiwgImVtIikKICAgIH0pKTsKICB9CiAgcmV0dXJuIFt7CiAgICB0YWc6ICJzdmciLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIKICB9XTsKfQpmdW5jdGlvbiBhc1N5bWJvbChfcmVmMikgewogIHZhciBwcmVmaXg0ID0gX3JlZjIucHJlZml4LCBpY29uTmFtZSA9IF9yZWYyLmljb25OYW1lLCBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIHN5bWJvbCA9IF9yZWYyLnN5bWJvbDsKICB2YXIgaWQgPSBzeW1ib2wgPT09IHRydWUgPyAiIi5jb25jYXQocHJlZml4NCwgIi0iKS5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGljb25OYW1lKSA6IHN5bWJvbDsKICByZXR1cm4gW3sKICAgIHRhZzogInN2ZyIsCiAgICBhdHRyaWJ1dGVzOiB7CiAgICAgIHN0eWxlOiAiZGlzcGxheTogbm9uZTsiCiAgICB9LAogICAgY2hpbGRyZW46IFt7CiAgICAgIHRhZzogInN5bWJvbCIsCiAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhdHRyaWJ1dGVzKSwge30sIHsKICAgICAgICBpZAogICAgICB9KSwKICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMgogICAgfV0KICB9XTsKfQpmdW5jdGlvbiBpc0xhYmVsZWQoYXR0cmlidXRlcykgewogIHZhciBsYWJlbHMgPSBbImFyaWEtbGFiZWwiLCAiYXJpYS1sYWJlbGxlZGJ5IiwgInRpdGxlIiwgInJvbGUiXTsKICByZXR1cm4gbGFiZWxzLnNvbWUoZnVuY3Rpb24obGFiZWwpIHsKICAgIHJldHVybiBsYWJlbCBpbiBhdHRyaWJ1dGVzOwogIH0pOwp9CmZ1bmN0aW9uIG1ha2VJbmxpbmVTdmdBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIF9wYXJhbXMkaWNvbnMgPSBwYXJhbXMyLmljb25zLCBtYWluID0gX3BhcmFtcyRpY29ucy5tYWluLCBtYXNrID0gX3BhcmFtcyRpY29ucy5tYXNrLCBwcmVmaXg0ID0gcGFyYW1zMi5wcmVmaXgsIGljb25OYW1lID0gcGFyYW1zMi5pY29uTmFtZSwgdHJhbnNmb3JtMiA9IHBhcmFtczIudHJhbnNmb3JtLCBzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgbWFza0lkID0gcGFyYW1zMi5tYXNrSWQsIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUgPSBwYXJhbXMyLndhdGNoYWJsZSwgd2F0Y2hhYmxlID0gX3BhcmFtcyR3YXRjaGFibGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyR3YXRjaGFibGU7CiAgdmFyIF9yZWYyID0gbWFzay5mb3VuZCA/IG1hc2sgOiBtYWluLCB3aWR0aCA9IF9yZWYyLndpZHRoLCBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7CiAgdmFyIGF0dHJDbGFzcyA9IFtjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChpY29uTmFtZSkgOiAiIl0uZmlsdGVyKGZ1bmN0aW9uKGMxMSkgewogICAgcmV0dXJuIGV4dHJhLmNsYXNzZXMuaW5kZXhPZihjMTEpID09PSAtMTsKICB9KS5maWx0ZXIoZnVuY3Rpb24oYzExKSB7CiAgICByZXR1cm4gYzExICE9PSAiIiB8fCAhIWMxMTsKICB9KS5jb25jYXQoZXh0cmEuY2xhc3Nlcykuam9pbigiICIpOwogIHZhciBjb250ZW50MyA9IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgICAgImRhdGEtcHJlZml4IjogcHJlZml4NCwKICAgICAgImRhdGEtaWNvbiI6IGljb25OYW1lLAogICAgICAiY2xhc3MiOiBhdHRyQ2xhc3MsCiAgICAgICJyb2xlIjogZXh0cmEuYXR0cmlidXRlcy5yb2xlIHx8ICJpbWciLAogICAgICAidmlld0JveCI6ICIwIDAgIi5jb25jYXQod2lkdGgsICIgIikuY29uY2F0KGhlaWdodCkKICAgIH0pCiAgfTsKICBpZiAoIWlzTGFiZWxlZChleHRyYS5hdHRyaWJ1dGVzKSAmJiAhZXh0cmEuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSA9ICJ0cnVlIjsKICB9CiAgaWYgKHdhdGNoYWJsZSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1tEQVRBX0ZBX0kyU1ZHXSA9ICIiOwogIH0KICB2YXIgYXJncyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZW50MyksIHt9LCB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZSwKICAgIG1haW4sCiAgICBtYXNrLAogICAgbWFza0lkLAogICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgc3ltYm9sLAogICAgc3R5bGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuc3R5bGVzKQogIH0pOwogIHZhciBfcmVmMjIgPSBtYXNrLmZvdW5kICYmIG1haW4uZm91bmQgPyBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RNYXNrIiwgYXJncykgfHwgewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczoge30KICB9IDogY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUFic3RyYWN0SWNvbiIsIGFyZ3MpIHx8IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IHt9CiAgfSwgY2hpbGRyZW4yID0gX3JlZjIyLmNoaWxkcmVuLCBhdHRyaWJ1dGVzID0gX3JlZjIyLmF0dHJpYnV0ZXM7CiAgYXJncy5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICBhcmdzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogIGlmIChzeW1ib2wpIHsKICAgIHJldHVybiBhc1N5bWJvbChhcmdzKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGFzSWNvbihhcmdzKTsKICB9Cn0KZnVuY3Rpb24gbWFrZUxheWVyc1RleHRBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCB3aWR0aCA9IHBhcmFtczIud2lkdGgsIGhlaWdodCA9IHBhcmFtczIuaGVpZ2h0LCB0cmFuc2Zvcm0yID0gcGFyYW1zMi50cmFuc2Zvcm0sIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUyID0gcGFyYW1zMi53YXRjaGFibGUsIHdhdGNoYWJsZSA9IF9wYXJhbXMkd2F0Y2hhYmxlMiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTI7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICBpZiAod2F0Y2hhYmxlKSB7CiAgICBhdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gIiI7CiAgfQogIHZhciBzdHlsZXMzID0gX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLnN0eWxlcyk7CiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSkgewogICAgc3R5bGVzM1sidHJhbnNmb3JtIl0gPSB0cmFuc2Zvcm1Gb3JDc3MoewogICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgIHN0YXJ0Q2VudGVyZWQ6IHRydWUsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0pOwogICAgc3R5bGVzM1siLXdlYmtpdC10cmFuc2Zvcm0iXSA9IHN0eWxlczNbInRyYW5zZm9ybSJdOwogIH0KICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlczMpOwogIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gc3R5bGVTdHJpbmc7CiAgfQogIHZhciB2YWwgPSBbXTsKICB2YWwucHVzaCh7CiAgICB0YWc6ICJzcGFuIiwKICAgIGF0dHJpYnV0ZXMsCiAgICBjaGlsZHJlbjogW2NvbnRlbnQzXQogIH0pOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCBleHRyYSA9IHBhcmFtczIuZXh0cmE7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKGV4dHJhLnN0eWxlcyk7CiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICB9CiAgdmFyIHZhbCA9IFtdOwogIHZhbC5wdXNoKHsKICAgIHRhZzogInNwYW4iLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBbY29udGVudDNdCiAgfSk7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBhc0ZvdW5kSWNvbihpY29uMykgewogIHZhciB3aWR0aCA9IGljb24zWzBdOwogIHZhciBoZWlnaHQgPSBpY29uM1sxXTsKICB2YXIgX2ljb24kc2xpY2UgPSBpY29uMy5zbGljZSg0KSwgX2ljb24kc2xpY2UyID0gX3NsaWNlZFRvQXJyYXkoX2ljb24kc2xpY2UsIDEpLCB2ZWN0b3JEYXRhID0gX2ljb24kc2xpY2UyWzBdOwogIHZhciBlbGVtZW50NCA9IG51bGw7CiAgaWYgKEFycmF5LmlzQXJyYXkodmVjdG9yRGF0YSkpIHsKICAgIGVsZW1lbnQ0ID0gewogICAgICB0YWc6ICJnIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5HUk9VUCkKICAgICAgfSwKICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2xhc3M6ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlNFQ09OREFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMF0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjbGFzczogIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuUFJJTUFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMV0KICAgICAgICB9CiAgICAgIH1dCiAgICB9OwogIH0gZWxzZSB7CiAgICBlbGVtZW50NCA9IHsKICAgICAgdGFnOiAicGF0aCIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICBkOiB2ZWN0b3JEYXRhCiAgICAgIH0KICAgIH07CiAgfQogIHJldHVybiB7CiAgICBmb3VuZDogdHJ1ZSwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgaWNvbjogZWxlbWVudDQKICB9Owp9CmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4NCkgewogIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnMi5zaG93TWlzc2luZ0ljb25zICYmIGljb25OYW1lKSB7CiAgICBjb25zb2xlLmVycm9yKCdJY29uIHdpdGggbmFtZSAiJy5jb25jYXQoaWNvbk5hbWUsICciIGFuZCBwcmVmaXggIicpLmNvbmNhdChwcmVmaXg0LCAnIiBpcyBtaXNzaW5nLicpKTsKICB9Cn0KZnVuY3Rpb24gZmluZEljb24oaWNvbk5hbWUsIHByZWZpeDQpIHsKICB2YXIgZ2l2ZW5QcmVmaXggPSBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmEiICYmIGNvbmZpZzIuc3R5bGVEZWZhdWx0ICE9PSBudWxsKSB7CiAgICBwcmVmaXg0ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgaWYgKGdpdmVuUHJlZml4ID09PSAiZmEiKSB7CiAgICAgIHZhciBzaGltID0gYnlPbGROYW1lKGljb25OYW1lKSB8fCB7fTsKICAgICAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGljb25OYW1lOwogICAgICBwcmVmaXg0ID0gc2hpbS5wcmVmaXggfHwgcHJlZml4NDsKICAgIH0KICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXg0ICYmIHN0eWxlcyQxW3ByZWZpeDRdICYmIHN0eWxlcyQxW3ByZWZpeDRdW2ljb25OYW1lXSkgewogICAgICB2YXIgaWNvbjMgPSBzdHlsZXMkMVtwcmVmaXg0XVtpY29uTmFtZV07CiAgICAgIHJldHVybiByZXNvbHZlMihhc0ZvdW5kSWNvbihpY29uMykpOwogICAgfQogICAgbWF5YmVOb3RpZnlNaXNzaW5nKGljb25OYW1lLCBwcmVmaXg0KTsKICAgIHJlc29sdmUyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtaXNzaW5nSWNvblJlc29sdXRpb25NaXhpbiksIHt9LCB7CiAgICAgIGljb246IGNvbmZpZzIuc2hvd01pc3NpbmdJY29ucyAmJiBpY29uTmFtZSA/IGNhbGxQcm92aWRlZCgibWlzc2luZ0ljb25BYnN0cmFjdCIpIHx8IHt9IDoge30KICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBpc1dhdGNoZWQobm9kZTIpIHsKICB2YXIgaTJzdmcyID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpIDogbnVsbDsKICByZXR1cm4gdHlwZW9mIGkyc3ZnMiA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaGFzUHJlZml4QW5kSWNvbihub2RlMikgewogIHZhciBwcmVmaXg0ID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSA6IG51bGw7CiAgdmFyIGljb24zID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsOwogIHJldHVybiBwcmVmaXg0ICYmIGljb24zOwp9CmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlMikgewogIHJldHVybiBub2RlMiAmJiBub2RlMi5jbGFzc0xpc3QgJiYgbm9kZTIuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUyLmNsYXNzTGlzdC5jb250YWlucyhjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MpOwp9CmZ1bmN0aW9uIGdldE11dGF0b3IoKSB7CiAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IHRydWUpIHsKICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlOwogIH0KICB2YXIgbXV0YXRvciA9IG11dGF0b3JzW2NvbmZpZzIuYXV0b1JlcGxhY2VTdmddOwogIHJldHVybiBtdXRhdG9yIHx8IG11dGF0b3JzLnJlcGxhY2U7Cn0KZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgdGFnKTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50KHRhZyk7Cn0KZnVuY3Rpb24gY29udmVydFNWRyhhYnN0cmFjdE9iaikgewogIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICB2YXIgX3BhcmFtcyRjZUZuID0gcGFyYW1zMi5jZUZuLCBjZUZuID0gX3BhcmFtcyRjZUZuID09PSB2b2lkIDAgPyBhYnN0cmFjdE9iai50YWcgPT09ICJzdmciID8gY3JlYXRlRWxlbWVudE5TIDogY3JlYXRlRWxlbWVudCA6IF9wYXJhbXMkY2VGbjsKICBpZiAodHlwZW9mIGFic3RyYWN0T2JqID09PSAic3RyaW5nIikgewogICAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZVRleHROb2RlKGFic3RyYWN0T2JqKTsKICB9CiAgdmFyIHRhZyA9IGNlRm4oYWJzdHJhY3RPYmoudGFnKTsKICBPYmplY3Qua2V5cyhhYnN0cmFjdE9iai5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgIHRhZy5zZXRBdHRyaWJ1dGUoa2V5MiwgYWJzdHJhY3RPYmouYXR0cmlidXRlc1trZXkyXSk7CiAgfSk7CiAgdmFyIGNoaWxkcmVuMiA9IGFic3RyYWN0T2JqLmNoaWxkcmVuIHx8IFtdOwogIGNoaWxkcmVuMi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7CiAgICB0YWcuYXBwZW5kQ2hpbGQoY29udmVydFNWRyhjaGlsZCwgewogICAgICBjZUZuCiAgICB9KSk7CiAgfSk7CiAgcmV0dXJuIHRhZzsKfQpmdW5jdGlvbiBub2RlQXNDb21tZW50KG5vZGUyKSB7CiAgdmFyIGNvbW1lbnQzID0gIiAiLmNvbmNhdChub2RlMi5vdXRlckhUTUwsICIgIik7CiAgY29tbWVudDMgPSAiIi5jb25jYXQoY29tbWVudDMsICJGb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tICIpOwogIHJldHVybiBjb21tZW50MzsKfQpmdW5jdGlvbiBwZXJmb3JtT3BlcmF0aW9uU3luYyhvcCkgewogIG9wKCk7Cn0KZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7CiAgdmFyIGNhbGxiYWNrRnVuY3Rpb24gPSB0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIgPyBjYWxsYmFjayA6IG5vb3AkMjsKICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgY2FsbGJhY2tGdW5jdGlvbigpOwogIH0gZWxzZSB7CiAgICB2YXIgZnJhbWUgPSBwZXJmb3JtT3BlcmF0aW9uU3luYzsKICAgIGlmIChjb25maWcyLm11dGF0ZUFwcHJvYWNoID09PSBNVVRBVElPTl9BUFBST0FDSF9BU1lOQykgewogICAgICBmcmFtZSA9IFdJTkRPVy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcGVyZm9ybU9wZXJhdGlvblN5bmM7CiAgICB9CiAgICBmcmFtZShmdW5jdGlvbigpIHsKICAgICAgdmFyIG11dGF0b3IgPSBnZXRNdXRhdG9yKCk7CiAgICAgIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm11dGF0ZSIpOwogICAgICBtdXRhdGlvbnMubWFwKG11dGF0b3IpOwogICAgICBtYXJrMigpOwogICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkgewogIGRpc2FibGVkID0gdHJ1ZTsKfQpmdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHsKICBkaXNhYmxlZCA9IGZhbHNlOwp9CmZ1bmN0aW9uIG9ic2VydmUob3B0aW9ucykgewogIGlmICghTVVUQVRJT05fT0JTRVJWRVIpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKCFjb25maWcyLm9ic2VydmVNdXRhdGlvbnMpIHsKICAgIHJldHVybjsKICB9CiAgdmFyIF9vcHRpb25zJHRyZWVDYWxsYmFjayA9IG9wdGlvbnMudHJlZUNhbGxiYWNrLCB0cmVlQ2FsbGJhY2sgPSBfb3B0aW9ucyR0cmVlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHRyZWVDYWxsYmFjaywgX29wdGlvbnMkbm9kZUNhbGxiYWNrID0gb3B0aW9ucy5ub2RlQ2FsbGJhY2ssIG5vZGVDYWxsYmFjayA9IF9vcHRpb25zJG5vZGVDYWxsYmFjayA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkbm9kZUNhbGxiYWNrLCBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPSBvcHRpb25zLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHBzZXVkb0VsZW1lbiwgX29wdGlvbnMkb2JzZXJ2ZU11dGF0ID0gb3B0aW9ucy5vYnNlcnZlTXV0YXRpb25zUm9vdCwgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX29wdGlvbnMkb2JzZXJ2ZU11dGF0OwogIG1vID0gbmV3IE1VVEFUSU9OX09CU0VSVkVSKGZ1bmN0aW9uKG9iamVjdHMpIHsKICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuOwogICAgdmFyIGRlZmF1bHRQcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICB0b0FycmF5MihvYmplY3RzKS5mb3JFYWNoKGZ1bmN0aW9uKG11dGF0aW9uUmVjb3JkKSB7CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgJiYgIWlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzWzBdKSkgewogICAgICAgIGlmIChjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7CiAgICAgICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHRyZWVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUgJiYgY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2soW211dGF0aW9uUmVjb3JkLnRhcmdldF0sIHRydWUpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgaXNXYXRjaGVkKG11dGF0aW9uUmVjb3JkLnRhcmdldCkgJiYgfkFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04uaW5kZXhPZihtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lKSkgewogICAgICAgIGlmIChtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lID09PSAiY2xhc3MiICYmIGhhc1ByZWZpeEFuZEljb24obXV0YXRpb25SZWNvcmQudGFyZ2V0KSkgewogICAgICAgICAgdmFyIF9nZXRDYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG11dGF0aW9uUmVjb3JkLnRhcmdldCkpLCBwcmVmaXg0ID0gX2dldENhbm9uaWNhbEljb24ucHJlZml4LCBpY29uTmFtZSA9IF9nZXRDYW5vbmljYWxJY29uLmljb25OYW1lOwogICAgICAgICAgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCwgcHJlZml4NCB8fCBkZWZhdWx0UHJlZml4KTsKICAgICAgICAgIGlmIChpY29uTmFtZSkgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX0lDT04sIGljb25OYW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7CiAgICAgICAgICBub2RlQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0pOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgbW8ub2JzZXJ2ZShvYnNlcnZlTXV0YXRpb25zUm9vdCwgewogICAgY2hpbGRMaXN0OiB0cnVlLAogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCiAgICBzdWJ0cmVlOiB0cnVlCiAgfSk7Cn0KZnVuY3Rpb24gZGlzY29ubmVjdCgpIHsKICBpZiAoIW1vKSByZXR1cm47CiAgbW8uZGlzY29ubmVjdCgpOwp9CmZ1bmN0aW9uIHN0eWxlUGFyc2VyKG5vZGUyKSB7CiAgdmFyIHN0eWxlID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpOwogIHZhciB2YWwgPSBbXTsKICBpZiAoc3R5bGUpIHsKICAgIHZhbCA9IHN0eWxlLnNwbGl0KCI7IikucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGUyKSB7CiAgICAgIHZhciBzdHlsZXMzID0gc3R5bGUyLnNwbGl0KCI6Iik7CiAgICAgIHZhciBwcm9wID0gc3R5bGVzM1swXTsKICAgICAgdmFyIHZhbHVlMiA9IHN0eWxlczMuc2xpY2UoMSk7CiAgICAgIGlmIChwcm9wICYmIHZhbHVlMi5sZW5ndGggPiAwKSB7CiAgICAgICAgYWNjW3Byb3BdID0gdmFsdWUyLmpvaW4oIjoiKS50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBjbGFzc1BhcnNlcihub2RlMikgewogIHZhciBleGlzdGluZ1ByZWZpeCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVmaXgiKTsKICB2YXIgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1pY29uIik7CiAgdmFyIGlubmVyVGV4dCA9IG5vZGUyLmlubmVyVGV4dCAhPT0gdm9pZCAwID8gbm9kZTIuaW5uZXJUZXh0LnRyaW0oKSA6ICIiOwogIHZhciB2YWwgPSBnZXRDYW5vbmljYWxJY29uKGNsYXNzQXJyYXkobm9kZTIpKTsKICBpZiAoIXZhbC5wcmVmaXgpIHsKICAgIHZhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgfQogIGlmIChleGlzdGluZ1ByZWZpeCAmJiBleGlzdGluZ0ljb25OYW1lKSB7CiAgICB2YWwucHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7CiAgICB2YWwuaWNvbk5hbWUgPSBleGlzdGluZ0ljb25OYW1lOwogIH0KICBpZiAodmFsLmljb25OYW1lICYmIHZhbC5wcmVmaXgpIHsKICAgIHJldHVybiB2YWw7CiAgfQogIGlmICh2YWwucHJlZml4ICYmIGlubmVyVGV4dC5sZW5ndGggPiAwKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBieUxpZ2F0dXJlKHZhbC5wcmVmaXgsIG5vZGUyLmlubmVyVGV4dCkgfHwgYnlVbmljb2RlKHZhbC5wcmVmaXgsIHRvSGV4KG5vZGUyLmlubmVyVGV4dCkpOwogIH0KICBpZiAoIXZhbC5pY29uTmFtZSAmJiBjb25maWcyLmF1dG9GZXRjaFN2ZyAmJiBub2RlMi5maXJzdENoaWxkICYmIG5vZGUyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBub2RlMi5maXJzdENoaWxkLmRhdGE7CiAgfQogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gYXR0cmlidXRlc1BhcnNlcihub2RlMikgewogIHZhciBleHRyYUF0dHJpYnV0ZXMgPSB0b0FycmF5Mihub2RlMi5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBhdHRyKSB7CiAgICBpZiAoYWNjLm5hbWUgIT09ICJjbGFzcyIgJiYgYWNjLm5hbWUgIT09ICJzdHlsZSIpIHsKICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlOwogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCB7fSk7CiAgcmV0dXJuIGV4dHJhQXR0cmlidXRlczsKfQpmdW5jdGlvbiBibGFua01ldGEoKSB7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lOiBudWxsLAogICAgcHJlZml4OiBudWxsLAogICAgdHJhbnNmb3JtOiBtZWFuaW5nbGVzc1RyYW5zZm9ybSwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBtYXNrOiB7CiAgICAgIGljb25OYW1lOiBudWxsLAogICAgICBwcmVmaXg6IG51bGwsCiAgICAgIHJlc3Q6IFtdCiAgICB9LAogICAgbWFza0lkOiBudWxsLAogICAgZXh0cmE6IHsKICAgICAgY2xhc3NlczogW10sCiAgICAgIHN0eWxlczoge30sCiAgICAgIGF0dHJpYnV0ZXM6IHt9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1ldGEobm9kZTIpIHsKICB2YXIgcGFyc2VyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7CiAgICBzdHlsZVBhcnNlcjogdHJ1ZQogIH07CiAgdmFyIF9jbGFzc1BhcnNlciA9IGNsYXNzUGFyc2VyKG5vZGUyKSwgaWNvbk5hbWUgPSBfY2xhc3NQYXJzZXIuaWNvbk5hbWUsIHByZWZpeDQgPSBfY2xhc3NQYXJzZXIucHJlZml4LCBleHRyYUNsYXNzZXMgPSBfY2xhc3NQYXJzZXIucmVzdDsKICB2YXIgZXh0cmFBdHRyaWJ1dGVzID0gYXR0cmlidXRlc1BhcnNlcihub2RlMik7CiAgdmFyIHBsdWdpbk1ldGEgPSBjaGFpbkhvb2tzKCJwYXJzZU5vZGVBdHRyaWJ1dGVzIiwge30sIG5vZGUyKTsKICB2YXIgZXh0cmFTdHlsZXMgPSBwYXJzZXIuc3R5bGVQYXJzZXIgPyBzdHlsZVBhcnNlcihub2RlMikgOiBbXTsKICByZXR1cm4gX29iamVjdFNwcmVhZDIoewogICAgaWNvbk5hbWUsCiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLAogICAgbWFzazogewogICAgICBpY29uTmFtZTogbnVsbCwKICAgICAgcHJlZml4OiBudWxsLAogICAgICByZXN0OiBbXQogICAgfSwKICAgIG1hc2tJZDogbnVsbCwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBleHRyYTogewogICAgICBjbGFzc2VzOiBleHRyYUNsYXNzZXMsCiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsCiAgICAgIGF0dHJpYnV0ZXM6IGV4dHJhQXR0cmlidXRlcwogICAgfQogIH0sIHBsdWdpbk1ldGEpOwp9CmZ1bmN0aW9uIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpIHsKICB2YXIgbm9kZU1ldGEgPSBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID09PSAibmVzdCIgPyBwYXJzZU1ldGEobm9kZTIsIHsKICAgIHN0eWxlUGFyc2VyOiBmYWxzZQogIH0pIDogcGFyc2VNZXRhKG5vZGUyKTsKICBpZiAofm5vZGVNZXRhLmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMQVlFUlNfVEVYVF9DTEFTU05BTUUpKSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUxheWVyc1RleHQiLCBub2RlMiwgbm9kZU1ldGEpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb24iLCBub2RlMiwgbm9kZU1ldGEpOwogIH0KfQpmdW5jdGlvbiBnZXRLbm93blByZWZpeGVzKCkgewogIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEh0KSwgX3RvQ29uc3VtYWJsZUFycmF5KGxvKSk7Cn0KZnVuY3Rpb24gb25UcmVlKHJvb3Q2KSB7CiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBudWxsOwogIGlmICghSVNfRE9NKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgdmFyIGh0bWxDbGFzc0xpc3QgPSBET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0OwogIHZhciBoY2xBZGQgPSBmdW5jdGlvbiBoY2xBZGQyKHN1ZmZpeCkgewogICAgcmV0dXJuIGh0bWxDbGFzc0xpc3QuYWRkKCIiLmNvbmNhdChIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MsICItIikuY29uY2F0KHN1ZmZpeCkpOwogIH07CiAgdmFyIGhjbFJlbW92ZSA9IGZ1bmN0aW9uIGhjbFJlbW92ZTIoc3VmZml4KSB7CiAgICByZXR1cm4gaHRtbENsYXNzTGlzdC5yZW1vdmUoIiIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgIi0iKS5jb25jYXQoc3VmZml4KSk7CiAgfTsKICB2YXIgcHJlZml4ZXMgPSBjb25maWcyLmF1dG9GZXRjaFN2ZyA/IGdldEtub3duUHJlZml4ZXMoKSA6IFoyLmNvbmNhdChPYmplY3Qua2V5cyhzdHlsZXMkMikpOwogIGlmICghcHJlZml4ZXMuaW5jbHVkZXMoImZhIikpIHsKICAgIHByZWZpeGVzLnB1c2goImZhIik7CiAgfQogIHZhciBwcmVmaXhlc0RvbVF1ZXJ5ID0gWyIuIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCAiOm5vdChbIikuY29uY2F0KERBVEFfRkFfSTJTVkcsICJdKSIpXS5jb25jYXQocHJlZml4ZXMubWFwKGZ1bmN0aW9uKHAkJDEpIHsKICAgIHJldHVybiAiLiIuY29uY2F0KHAkJDEsICI6bm90KFsiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgIl0pIik7CiAgfSkpLmpvaW4oIiwgIik7CiAgaWYgKHByZWZpeGVzRG9tUXVlcnkubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBjYW5kaWRhdGVzID0gW107CiAgdHJ5IHsKICAgIGNhbmRpZGF0ZXMgPSB0b0FycmF5Mihyb290Ni5xdWVyeVNlbGVjdG9yQWxsKHByZWZpeGVzRG9tUXVlcnkpKTsKICB9IGNhdGNoIChlJCQxKSB7CiAgfQogIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHsKICAgIGhjbEFkZCgicGVuZGluZyIpOwogICAgaGNsUmVtb3ZlKCJjb21wbGV0ZSIpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm9uVHJlZSIpOwogIHZhciBtdXRhdGlvbnMgPSBjYW5kaWRhdGVzLnJlZHVjZShmdW5jdGlvbihhY2MsIG5vZGUyKSB7CiAgICB0cnkgewogICAgICB2YXIgbXV0YXRpb24gPSBnZW5lcmF0ZU11dGF0aW9uKG5vZGUyKTsKICAgICAgaWYgKG11dGF0aW9uKSB7CiAgICAgICAgYWNjLnB1c2gobXV0YXRpb24pOwogICAgICB9CiAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgIGlmICghUFJPRFVDVElPTikgewogICAgICAgIGlmIChlJCQxLm5hbWUgPT09ICJNaXNzaW5nSWNvbiIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSQkMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgUHJvbWlzZS5hbGwobXV0YXRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc29sdmVkTXV0YXRpb25zKSB7CiAgICAgIHBlcmZvcm0ocmVzb2x2ZWRNdXRhdGlvbnMsIGZ1bmN0aW9uKCkgewogICAgICAgIGhjbEFkZCgiYWN0aXZlIik7CiAgICAgICAgaGNsQWRkKCJjb21wbGV0ZSIpOwogICAgICAgIGhjbFJlbW92ZSgicGVuZGluZyIpOwogICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpIGNhbGxiYWNrKCk7CiAgICAgICAgbWFyazIoKTsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9KTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUkJDEpIHsKICAgICAgbWFyazIoKTsKICAgICAgcmVqZWN0KGUkJDEpOwogICAgfSk7CiAgfSk7Cn0KZnVuY3Rpb24gb25Ob2RlKG5vZGUyKSB7CiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBudWxsOwogIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpLnRoZW4oZnVuY3Rpb24obXV0YXRpb24pIHsKICAgIGlmIChtdXRhdGlvbikgewogICAgICBwZXJmb3JtKFttdXRhdGlvbl0sIGNhbGxiYWNrKTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiByZXNvbHZlSWNvbnMobmV4dDIpIHsKICByZXR1cm4gZnVuY3Rpb24obWF5YmVJY29uRGVmaW5pdGlvbikgewogICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgdmFyIGljb25EZWZpbml0aW9uID0gKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pLmljb24gPyBtYXliZUljb25EZWZpbml0aW9uIDogZmluZEljb25EZWZpbml0aW9uKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pOwogICAgdmFyIG1hc2sgPSBwYXJhbXMyLm1hc2s7CiAgICBpZiAobWFzaykgewogICAgICBtYXNrID0gKG1hc2sgfHwge30pLmljb24gPyBtYXNrIDogZmluZEljb25EZWZpbml0aW9uKG1hc2sgfHwge30pOwogICAgfQogICAgcmV0dXJuIG5leHQyKGljb25EZWZpbml0aW9uLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFyYW1zMiksIHt9LCB7CiAgICAgIG1hc2sKICAgIH0pKTsKICB9Owp9CmZ1bmN0aW9uIGhleFZhbHVlRnJvbUNvbnRlbnQoY29udGVudDMpIHsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgcmV0dXJuIHRvSGV4KF90b0NvbnN1bWFibGVBcnJheShjbGVhbmVkKVswXSB8fCAiIik7Cn0KZnVuY3Rpb24gaXNTZWNvbmRhcnlMYXllcihzdHlsZXMzKSB7CiAgdmFyIGhhc1N0eWxpc3RpY1NldCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mZWF0dXJlLXNldHRpbmdzIikuaW5jbHVkZXMoInNzMDEiKTsKICB2YXIgY29udGVudDMgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgdmFyIGNvZGVQb2ludCA9IGNsZWFuZWQuY29kZVBvaW50QXQoMCk7CiAgdmFyIGlzUHJlcGVuZFRlbiA9IGNvZGVQb2ludCA+PSBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRVswXSAmJiBjb2RlUG9pbnQgPD0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMV07CiAgdmFyIGlzRG91YmxlZCA9IGNsZWFuZWQubGVuZ3RoID09PSAyID8gY2xlYW5lZFswXSA9PT0gY2xlYW5lZFsxXSA6IGZhbHNlOwogIHJldHVybiBpc1ByZXBlbmRUZW4gfHwgaXNEb3VibGVkIHx8IGhhc1N0eWxpc3RpY1NldDsKfQpmdW5jdGlvbiBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCkgewogIHZhciBmb250RmFtaWx5U2FuaXRpemVkID0gZm9udEZhbWlseS5yZXBsYWNlKC9eWyciXXxbJyJdJC9nLCAiIikudG9Mb3dlckNhc2UoKTsKICB2YXIgZm9udFdlaWdodEludGVnZXIgPSBwYXJzZUludChmb250V2VpZ2h0KTsKICB2YXIgZm9udFdlaWdodFNhbml0aXplZCA9IGlzTmFOKGZvbnRXZWlnaHRJbnRlZ2VyKSA/ICJub3JtYWwiIDogZm9udFdlaWdodEludGVnZXI7CiAgcmV0dXJuIChGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdIHx8IHt9KVtmb250V2VpZ2h0U2FuaXRpemVkXSB8fCBGT05UX0ZBTUlMWV9XRUlHSFRfRkFMTEJBQ0tbZm9udEZhbWlseVNhbml0aXplZF07Cn0KZnVuY3Rpb24gcmVwbGFjZUZvclBvc2l0aW9uKG5vZGUyLCBwb3NpdGlvbjMpIHsKICB2YXIgcGVuZGluZ0F0dHJpYnV0ZSA9ICIiLmNvbmNhdChEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcpLmNvbmNhdChwb3NpdGlvbjMucmVwbGFjZSgiOiIsICItIikpOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUpICE9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXNvbHZlMigpOwogICAgfQogICAgdmFyIGNoaWxkcmVuMiA9IHRvQXJyYXkyKG5vZGUyLmNoaWxkcmVuKTsKICAgIHZhciBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCA9IGNoaWxkcmVuMi5maWx0ZXIoZnVuY3Rpb24oYyQkMSkgewogICAgICByZXR1cm4gYyQkMS5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgPT09IHBvc2l0aW9uMzsKICAgIH0pWzBdOwogICAgdmFyIHN0eWxlczMgPSBXSU5ET1cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlMiwgcG9zaXRpb24zKTsKICAgIHZhciBmb250RmFtaWx5ID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LWZhbWlseSIpOwogICAgdmFyIGZvbnRGYW1pbHlNYXRjaCA9IGZvbnRGYW1pbHkubWF0Y2goRk9OVF9GQU1JTFlfUEFUVEVSTik7CiAgICB2YXIgZm9udFdlaWdodCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC13ZWlnaHQiKTsKICAgIHZhciBjb250ZW50MyA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpOwogICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50ICYmICFmb250RmFtaWx5TWF0Y2gpIHsKICAgICAgbm9kZTIucmVtb3ZlQ2hpbGQoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpOwogICAgICByZXR1cm4gcmVzb2x2ZTIoKTsKICAgIH0gZWxzZSBpZiAoZm9udEZhbWlseU1hdGNoICYmIGNvbnRlbnQzICE9PSAibm9uZSIgJiYgY29udGVudDMgIT09ICIiKSB7CiAgICAgIHZhciBfY29udGVudCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpOwogICAgICB2YXIgcHJlZml4NCA9IGdldFByZWZpeChmb250RmFtaWx5LCBmb250V2VpZ2h0KTsKICAgICAgdmFyIGhleFZhbHVlID0gaGV4VmFsdWVGcm9tQ29udGVudChfY29udGVudCk7CiAgICAgIHZhciBpc1Y0ID0gZm9udEZhbWlseU1hdGNoWzBdLnN0YXJ0c1dpdGgoIkZvbnRBd2Vzb21lIik7CiAgICAgIHZhciBpc1NlY29uZGFyeSA9IGlzU2Vjb25kYXJ5TGF5ZXIoc3R5bGVzMyk7CiAgICAgIHZhciBpY29uTmFtZSA9IGJ5VW5pY29kZShwcmVmaXg0LCBoZXhWYWx1ZSk7CiAgICAgIHZhciBpY29uSWRlbnRpZmllciA9IGljb25OYW1lOwogICAgICBpZiAoaXNWNCkgewogICAgICAgIHZhciBpY29uTmFtZTQgPSBieU9sZFVuaWNvZGUoaGV4VmFsdWUpOwogICAgICAgIGlmIChpY29uTmFtZTQuaWNvbk5hbWUgJiYgaWNvbk5hbWU0LnByZWZpeCkgewogICAgICAgICAgaWNvbk5hbWUgPSBpY29uTmFtZTQuaWNvbk5hbWU7CiAgICAgICAgICBwcmVmaXg0ID0gaWNvbk5hbWU0LnByZWZpeDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGljb25OYW1lICYmICFpc1NlY29uZGFyeSAmJiAoIWFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50IHx8IGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50LmdldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCkgIT09IHByZWZpeDQgfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgIT09IGljb25JZGVudGlmaWVyKSkgewogICAgICAgIG5vZGUyLnNldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlLCBpY29uSWRlbnRpZmllcik7CiAgICAgICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgICBub2RlMi5yZW1vdmVDaGlsZChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHZhciBtZXRhID0gYmxhbmtNZXRhKCk7CiAgICAgICAgdmFyIGV4dHJhID0gbWV0YS5leHRyYTsKICAgICAgICBleHRyYS5hdHRyaWJ1dGVzW0RBVEFfRkFfUFNFVURPX0VMRU1FTlRdID0gcG9zaXRpb24zOwogICAgICAgIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KS50aGVuKGZ1bmN0aW9uKG1haW4pIHsKICAgICAgICAgIHZhciBhYnN0cmFjdCA9IG1ha2VJbmxpbmVTdmdBYnN0cmFjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7CiAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICBtYXNrOiBlbXB0eUNhbm9uaWNhbEljb24oKQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lOiBpY29uSWRlbnRpZmllciwKICAgICAgICAgICAgZXh0cmEsCiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgICAgdmFyIGVsZW1lbnQ0ID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJzdmciKTsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICI6OmJlZm9yZSIpIHsKICAgICAgICAgICAgbm9kZTIuaW5zZXJ0QmVmb3JlKGVsZW1lbnQ0LCBub2RlMi5maXJzdENoaWxkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vZGUyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnQ0Lm91dGVySFRNTCA9IGFic3RyYWN0Lm1hcChmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0b0h0bWwyKGEkJDEpOwogICAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICAgIG5vZGUyLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTsKICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXNvbHZlMigpOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHJlcGxhY2U0KG5vZGUyKSB7CiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmJlZm9yZSIpLCByZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmFmdGVyIildKTsKfQpmdW5jdGlvbiBwcm9jZXNzYWJsZShub2RlMikgewogIHJldHVybiBub2RlMi5wYXJlbnROb2RlICE9PSBkb2N1bWVudC5oZWFkICYmICF+VEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMuaW5kZXhPZihub2RlMi50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgJiYgKCFub2RlMi5wYXJlbnROb2RlIHx8IG5vZGUyLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gInN2ZyIpOwp9CmZ1bmN0aW9uIHNlYXJjaFBzZXVkb0VsZW1lbnRzKHJvb3Q2KSB7CiAgdmFyIHVzZUFzTm9kZUxpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgdmFyIG5vZGVMaXN0OwogIGlmICh1c2VBc05vZGVMaXN0KSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2OwogIH0gZWxzZSBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuKSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICB9IGVsc2UgewogICAgdmFyIHNlbGVjdG9yU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZG9jdW1lbnQuc3R5bGVTaGVldHMpLCBfc3RlcDI7CiAgICB0cnkgewogICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOyApIHsKICAgICAgICB2YXIgc3R5bGVzaGVldCA9IF9zdGVwMi52YWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzdHlsZXNoZWV0LmNzc1J1bGVzKSwgX3N0ZXAzOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IzLnMoKTsgIShfc3RlcDMgPSBfaXRlcmF0b3IzLm4oKSkuZG9uZTsgKSB7CiAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICAgICAgdmFyIHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MocnVsZS5zZWxlY3RvclRleHQpOwogICAgICAgICAgICAgIHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocGFyc2VkU2VsZWN0b3JzKSwgX3N0ZXA0OwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjQucygpOyAhKF9zdGVwNCA9IF9pdGVyYXRvcjQubigpKS5kb25lOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXA0LnZhbHVlOwogICAgICAgICAgICAgICAgICBzZWxlY3RvclNldC5hZGQoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5lKGVycik7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIF9pdGVyYXRvcjQuZigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSQkMSkgewogICAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncykgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZvbnQgQXdlc29tZTogY2Fubm90IHBhcnNlIHN0eWxlc2hlZXQ6ICIuY29uY2F0KHN0eWxlc2hlZXQuaHJlZiwgIiAoIikuY29uY2F0KGUkJDEubWVzc2FnZSwgJylcbklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLicpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9pdGVyYXRvcjIuZigpOwogICAgfQogICAgaWYgKCFzZWxlY3RvclNldC5zaXplKSByZXR1cm47CiAgICB2YXIgY2xlYW5TZWxlY3RvcnMgPSBBcnJheS5mcm9tKHNlbGVjdG9yU2V0KS5qb2luKCIsICIpOwogICAgdHJ5IHsKICAgICAgbm9kZUxpc3QgPSByb290Ni5xdWVyeVNlbGVjdG9yQWxsKGNsZWFuU2VsZWN0b3JzKTsKICAgIH0gY2F0Y2ggKF91bnVzZWQpIHsKICAgIH0KICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgIHZhciBvcGVyYXRpb25zID0gdG9BcnJheTIobm9kZUxpc3QpLmZpbHRlcihwcm9jZXNzYWJsZSkubWFwKHJlcGxhY2U0KTsKICAgIHZhciBlbmQzID0gcGVyZi5iZWdpbigic2VhcmNoUHNldWRvRWxlbWVudHMiKTsKICAgIGRpc2FibGVPYnNlcnZhdGlvbigpOwogICAgUHJvbWlzZS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbigpIHsKICAgICAgZW5kMygpOwogICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICByZXNvbHZlMigpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgIGVuZDMoKTsKICAgICAgZW5hYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgcmVqZWN0KCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBmaWxsQmxhY2soYWJzdHJhY3QpIHsKICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7CiAgaWYgKGFic3RyYWN0LmF0dHJpYnV0ZXMgJiYgKGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCB8fCBmb3JjZSkpIHsKICAgIGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCA9ICJibGFjayI7CiAgfQogIHJldHVybiBhYnN0cmFjdDsKfQpmdW5jdGlvbiBkZUdyb3VwKGFic3RyYWN0KSB7CiAgaWYgKGFic3RyYWN0LnRhZyA9PT0gImciKSB7CiAgICByZXR1cm4gYWJzdHJhY3QuY2hpbGRyZW47CiAgfSBlbHNlIHsKICAgIHJldHVybiBbYWJzdHJhY3RdOwogIH0KfQp2YXIgbm9vcDIsIF9XSU5ET1csIF9ET0NVTUVOVCwgX01VVEFUSU9OX09CU0VSVkVSLCBfUEVSRk9STUFOQ0UsIF9yZWYsIF9yZWYkdXNlckFnZW50LCB1c2VyQWdlbnQsIFdJTkRPVywgRE9DVU1FTlQsIE1VVEFUSU9OX09CU0VSVkVSLCBQRVJGT1JNQU5DRSwgSVNfQlJPV1NFUiwgSVNfRE9NLCBJU19JRSwgX2h0LCBHLCBNMywgUSwgWCwgWjIsIGkxMCwgdDgsIGQ0LCBsNSwgZjYsIGg3LCBuMTEsIGczLCBvMTIsIHU2LCBtNSwgZTEwLCB5MywgcDYsIHM5LCB3MywgYTQsIHgzLCBiNCwgYzEwLCBJMiwgRiwgdjQsIFMzLCBBMywgUDMsIGozLCBCMiwgTjIsIGszLCBEMywgVDMsIEMzLCBXMiwgSzIsIFIzLCBMMiwgVSwgZHQyLCBodCwgeXQsIEt0LCBFdCwgTXQsIEh0LCBRdCwgWHQsIEosIHIxMCwgRTMsIF8zLCBsbCwgc2wsIGhsLCBubCwgbWwsIF93dCwgdCQxLCBmJDEsIGgkMSwgbyQxLCBuJDEsIHMkMSwgdSQxLCBnJDEsIHkkMSwgbSQxLCBhJDEsIHAkMSwgdyQxLCBlJDEsIGIkMSwgYyQxLCByJDEsIHgkMSwgaSQxLCBJJDEsIEYkMSwgdiQxLCBTJDEsIEEkMSwgUCQxLCBqJDEsIEIkMSwgTiQxLCBrJDEsIEQkMSwgQyQxLCBUJDEsIEwkMSwgVyQxLCBSJDEsIEskMSwgVSQxLCBKJDEsIEUkMSwgXyQxLCB3dCQxLCBHJDEsIGQkMSwgTSQxLCBPMiwgZGwkMSwgSGwsIFkkMSwgWGwsIFYkMSwgbG8sICQzLCB6JDEsIHEkMSwgSCQxLCBzbywgZm8sIE5BTUVTUEFDRV9JREVOVElGSUVSLCBVTklUU19JTl9HUklELCBERUZBVUxUX0NTU19QUkVGSVgsIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsIERBVEFfRkFfSTJTVkcsIERBVEFfRkFfUFNFVURPX0VMRU1FTlQsIERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORywgREFUQV9QUkVGSVgsIERBVEFfSUNPTiwgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCBNVVRBVElPTl9BUFBST0FDSF9BU1lOQywgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMsIFBTRVVET19FTEVNRU5UUywgUFJPRFVDVElPTiwgX1BSRUZJWF9UT19TVFlMRSwgUFJFRklYX1RPX1NUWUxFLCBfU1RZTEVfVE9fUFJFRklYLCBTVFlMRV9UT19QUkVGSVgsIF9QUkVGSVhfVE9fTE9OR19TVFlMRSwgUFJFRklYX1RPX0xPTkdfU1RZTEUsIF9MT05HX1NUWUxFX1RPX1BSRUZJWCwgTE9OR19TVFlMRV9UT19QUkVGSVgsIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOLCBMQVlFUlNfVEVYVF9DTEFTU05BTUUsIEZPTlRfRkFNSUxZX1BBVFRFUk4sIF9GT05UX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfV0VJR0hUX1RPX1BSRUZJWCwgQVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTiwgRFVPVE9ORV9DTEFTU0VTLCBSRVNFUlZFRF9DTEFTU0VTLCBpbml0aWFsLCBfZGVmYXVsdCwgX2NvbmZpZywgY29uZmlnMiwgX29uQ2hhbmdlQ2IsIGQkMiwgbWVhbmluZ2xlc3NUcmFuc2Zvcm0sIGlkUG9vbCwgYmFzZVN0eWxlcywgX2Nzc0luc2VydGVkLCBJbmplY3RDU1MsIHckMiwgbmFtZXNwYWNlLCBmdW5jdGlvbnMsIF9saXN0ZW5lciwgbG9hZGVkLCBiaW5kSW50ZXJuYWw0LCByZWR1Y2UzLCBNT05PLCBEVU8sIG1vZGVybk1hdGNoZXMsIGxlZ2FjeU1hdGNoZXMsIHN0eWxlczIsIHNoaW1zLCBGQU1JTFlfTkFNRVMsIFBSRUZJWEVTX0ZPUl9GQU1JTFksIF9kZWZhdWx0VXNhYmxlUHJlZml4LCBfYnlVbmljb2RlLCBfYnlMaWdhdHVyZSwgX2J5T2xkTmFtZSwgX2J5T2xkVW5pY29kZSwgX2J5QWxpYXMsIGJ1aWxkLCBlbXB0eUNhbm9uaWNhbEljb24sIF9mYUNvbWJpbmVkQ2xhc3NlcywgbmV3Q2Fub25pY2FsRmFtaWxpZXMsIG5ld0Nhbm9uaWNhbFN0eWxlcywgTGlicmFyeSwgX3BsdWdpbnMsIF9ob29rcywgcHJvdmlkZXJzLCBkZWZhdWx0UHJvdmlkZXJLZXlzLCBsaWJyYXJ5LCBub0F1dG8sIGRvbSwgcGFyc2U5LCBhcGksIGF1dG9SZXBsYWNlLCBzdHlsZXMkMSwgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4sIG5vb3AkMSwgcCQyLCBwcmVhbWJsZSwgYmVnaW4sIGVuZCwgcGVyZiwgbm9vcCQyLCBtdXRhdG9ycywgZGlzYWJsZWQsIG1vLCBzdHlsZXMkMiwgcmVuZGVyLCBSZXBsYWNlRWxlbWVudHMsIExheWVycywgTGF5ZXJzQ291bnRlciwgTGF5ZXJzVGV4dCwgQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSwgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9GQUxMQkFDSywgaGFzUHNldWRvRWxlbWVudCwgcGFyc2VDU1NSdWxlRm9yUHNldWRvcywgUHNldWRvRWxlbWVudHMsIF91bndhdGNoZWQsIE11dGF0aW9uT2JzZXJ2ZXIkMSwgcGFyc2VUcmFuc2Zvcm1TdHJpbmcsIFBvd2VyVHJhbnNmb3JtcywgQUxMX1NQQUNFLCBNYXNrcywgTWlzc2luZ0ljb25JbmRpY2F0b3IsIFN2Z1N5bWJvbHMsIHBsdWdpbnMsIG5vQXV0byQxLCBjb25maWckMSwgbGlicmFyeSQxLCBkb20kMSwgcGFyc2UkMSwgZmluZEljb25EZWZpbml0aW9uJDEsIHRvSHRtbCQxLCBpY29uMiwgbGF5ZXIsIHRleHQ4LCBjb3VudGVyLCBhdHRyczsKdmFyIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZm9udGF3ZXNvbWUtc3ZnLWNvcmVANy4yLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMiKCkgewogICAgbm9vcDIgPSBmdW5jdGlvbiBub29wMygpIHsKICAgIH07CiAgICBfV0lORE9XID0ge307CiAgICBfRE9DVU1FTlQgPSB7fTsKICAgIF9NVVRBVElPTl9PQlNFUlZFUiA9IG51bGw7CiAgICBfUEVSRk9STUFOQ0UgPSB7CiAgICAgIG1hcms6IG5vb3AyLAogICAgICBtZWFzdXJlOiBub29wMgogICAgfTsKICAgIHRyeSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgX1dJTkRPVyA9IHdpbmRvdzsKICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gInVuZGVmaW5lZCIpIF9ET0NVTUVOVCA9IGRvY3VtZW50OwogICAgICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICJ1bmRlZmluZWQiKSBfTVVUQVRJT05fT0JTRVJWRVIgPSBNdXRhdGlvbk9ic2VydmVyOwogICAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAidW5kZWZpbmVkIikgX1BFUkZPUk1BTkNFID0gcGVyZm9ybWFuY2U7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgIH0KICAgIF9yZWYgPSBfV0lORE9XLm5hdmlnYXRvciB8fCB7fSwgX3JlZiR1c2VyQWdlbnQgPSBfcmVmLnVzZXJBZ2VudCwgdXNlckFnZW50ID0gX3JlZiR1c2VyQWdlbnQgPT09IHZvaWQgMCA/ICIiIDogX3JlZiR1c2VyQWdlbnQ7CiAgICBXSU5ET1cgPSBfV0lORE9XOwogICAgRE9DVU1FTlQgPSBfRE9DVU1FTlQ7CiAgICBNVVRBVElPTl9PQlNFUlZFUiA9IF9NVVRBVElPTl9PQlNFUlZFUjsKICAgIFBFUkZPUk1BTkNFID0gX1BFUkZPUk1BTkNFOwogICAgSVNfQlJPV1NFUiA9ICEhV0lORE9XLmRvY3VtZW50OwogICAgSVNfRE9NID0gISFET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQgJiYgISFET0NVTUVOVC5oZWFkICYmIHR5cGVvZiBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBET0NVTUVOVC5jcmVhdGVFbGVtZW50ID09PSAiZnVuY3Rpb24iOwogICAgSVNfSUUgPSB+dXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSB8fCB+dXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQvIik7CiAgICBHID0gL2ZhKGt8a2R8c3xyfGx8dHxkfGRyfGRsfGR0fGJ8c2xyfHNscHJ8d3NifHRsfG5zfG5kc3xlc3xndHxqcnxqZnJ8amRyfHVzYnx1ZnNifHVkc2J8Y3J8c3N8c3J8c2x8c3R8c2RzfHNkcnxzZGx8c2R0KT9bXC1cIF0vLCBNMyA9IC9Gb250ID9Bd2Vzb21lID8oWzU2NyBdKikoU29saWR8UmVndWxhcnxMaWdodHxUaGlufER1b3RvbmV8QnJhbmRzfEZyZWV8UHJvfFNoYXJwIER1b3RvbmV8U2hhcnB8S2l0fE5vdGRvZyBEdW98Tm90ZG9nfENoaXNlbHxFdGNofEdyYXBoaXRlfFRodW1icHJpbnR8SmVsbHkgRmlsbHxKZWxseSBEdW98SmVsbHl8VXRpbGl0eXxVdGlsaXR5IEZpbGx8VXRpbGl0eSBEdW98U2xhYiBQcmVzc3xTbGFifFdoaXRlYm9hcmQpPy4qL2k7CiAgICBRID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFzOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFyOiAicmVndWxhciIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmF0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIsCiAgICAgICAgZmFiOiAiYnJhbmRzIiwKICAgICAgICAiZmEtYnJhbmRzIjogImJyYW5kcyIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhZDogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgICJmYS1kdW90b25lIjogInNvbGlkIiwKICAgICAgICBmYWRyOiAicmVndWxhciIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFkbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhZHQ6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhc3M6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYXNyOiAicmVndWxhciIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhc3Q6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYXNkczogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhc2RyOiAicmVndWxhciIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzZGw6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXNkdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNscjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2xwcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhdGw6ICJsaWdodCIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJzZW1pYm9sZCIsCiAgICAgICAgZmF3c2I6ICJzZW1pYm9sZCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYW5zOiAic29saWQiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFuZHM6ICJzb2xpZCIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFlczogInNvbGlkIgogICAgICB9LAogICAgICBncmFwaGl0ZTogewogICAgICAgICJmYS10aGluIjogInRoaW4iLAogICAgICAgIGZhZ3Q6ICJ0aGluIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhanI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWpmcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFqZHI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICBjaGlzZWw6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWNyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJzZW1pYm9sZCIsCiAgICAgICAgZmF1c2I6ICJzZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJzZW1pYm9sZCIsCiAgICAgICAgZmF1ZHNiOiAic2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXVmc2I6ICJzZW1pYm9sZCIKICAgICAgfQogICAgfSwgWCA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBaMiA9IFsiZmEtY2xhc3NpYyIsICJmYS1kdW90b25lIiwgImZhLXNoYXJwIiwgImZhLXNoYXJwLWR1b3RvbmUiLCAiZmEtdGh1bWJwcmludCIsICJmYS13aGl0ZWJvYXJkIiwgImZhLW5vdGRvZyIsICJmYS1ub3Rkb2ctZHVvIiwgImZhLWNoaXNlbCIsICJmYS1ldGNoIiwgImZhLWdyYXBoaXRlIiwgImZhLWplbGx5IiwgImZhLWplbGx5LWZpbGwiLCAiZmEtamVsbHktZHVvIiwgImZhLXNsYWIiLCAiZmEtc2xhYi1wcmVzcyIsICJmYS11dGlsaXR5IiwgImZhLXV0aWxpdHktZHVvIiwgImZhLXV0aWxpdHktZmlsbCJdOwogICAgaTEwID0gImNsYXNzaWMiLCB0OCA9ICJkdW90b25lIiwgZDQgPSAic2hhcnAiLCBsNSA9ICJzaGFycC1kdW90b25lIiwgZjYgPSAiY2hpc2VsIiwgaDcgPSAiZXRjaCIsIG4xMSA9ICJncmFwaGl0ZSIsIGczID0gImplbGx5IiwgbzEyID0gImplbGx5LWR1byIsIHU2ID0gImplbGx5LWZpbGwiLCBtNSA9ICJub3Rkb2ciLCBlMTAgPSAibm90ZG9nLWR1byIsIHkzID0gInNsYWIiLCBwNiA9ICJzbGFiLXByZXNzIiwgczkgPSAidGh1bWJwcmludCIsIHczID0gInV0aWxpdHkiLCBhNCA9ICJ1dGlsaXR5LWR1byIsIHgzID0gInV0aWxpdHktZmlsbCIsIGI0ID0gIndoaXRlYm9hcmQiLCBjMTAgPSAiQ2xhc3NpYyIsIEkyID0gIkR1b3RvbmUiLCBGID0gIlNoYXJwIiwgdjQgPSAiU2hhcnAgRHVvdG9uZSIsIFMzID0gIkNoaXNlbCIsIEEzID0gIkV0Y2giLCBQMyA9ICJHcmFwaGl0ZSIsIGozID0gIkplbGx5IiwgQjIgPSAiSmVsbHkgRHVvIiwgTjIgPSAiSmVsbHkgRmlsbCIsIGszID0gIk5vdGRvZyIsIEQzID0gIk5vdGRvZyBEdW8iLCBUMyA9ICJTbGFiIiwgQzMgPSAiU2xhYiBQcmVzcyIsIFcyID0gIlRodW1icHJpbnQiLCBLMiA9ICJVdGlsaXR5IiwgUjMgPSAiVXRpbGl0eSBEdW8iLCBMMiA9ICJVdGlsaXR5IEZpbGwiLCBVID0gIldoaXRlYm9hcmQiLCBkdDIgPSBbaTEwLCB0OCwgZDQsIGw1LCBmNiwgaDcsIG4xMSwgZzMsIG8xMiwgdTYsIG01LCBlMTAsIHkzLCBwNiwgczksIHczLCBhNCwgeDMsIGI0XSwgaHQgPSAoX2h0ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfaHQsIGkxMCwgYzEwKSwgdDgsIEkyKSwgZDQsIEYpLCBsNSwgdjQpLCBmNiwgUzMpLCBoNywgQTMpLCBuMTEsIFAzKSwgZzMsIGozKSwgbzEyLCBCMiksIHU2LCBOMiksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9odCwgbTUsIGszKSwgZTEwLCBEMyksIHkzLCBUMyksIHA2LCBDMyksIHM5LCBXMiksIHczLCBLMiksIGE0LCBSMyksIHgzLCBMMiksIGI0LCBVKSk7CiAgICB5dCA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgIDkwMDogImZhcyIsCiAgICAgICAgNDAwOiAiZmFyIiwKICAgICAgICBub3JtYWw6ICJmYXIiLAogICAgICAgIDMwMDogImZhbCIsCiAgICAgICAgMTAwOiAiZmF0IgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgOTAwOiAiZmFkIiwKICAgICAgICA0MDA6ICJmYWRyIiwKICAgICAgICAzMDA6ICJmYWRsIiwKICAgICAgICAxMDA6ICJmYWR0IgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgIDkwMDogImZhc3MiLAogICAgICAgIDQwMDogImZhc3IiLAogICAgICAgIDMwMDogImZhc2wiLAogICAgICAgIDEwMDogImZhc3QiCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgIDkwMDogImZhc2RzIiwKICAgICAgICA0MDA6ICJmYXNkciIsCiAgICAgICAgMzAwOiAiZmFzZGwiLAogICAgICAgIDEwMDogImZhc2R0IgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgNDAwOiAiZmFzbHIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIDQwMDogImZhc2xwciIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgIDYwMDogImZhd3NiIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgMzAwOiAiZmF0bCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgOTAwOiAiZmFucyIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgOTAwOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICA5MDA6ICJmYWVzIgogICAgICB9LAogICAgICBncmFwaGl0ZTogewogICAgICAgIDEwMDogImZhZ3QiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgIDQwMDogImZhY3IiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgNDAwOiAiZmFqciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgNDAwOiAiZmFqZnIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgNDAwOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICA2MDA6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgIDYwMDogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICA2MDA6ICJmYXVmc2IiCiAgICAgIH0KICAgIH07CiAgICBLdCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA3IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIiwKICAgICAgICAxMDA6ICJmYXQiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBCcmFuZHMiOiB7CiAgICAgICAgNDAwOiAiZmFiIiwKICAgICAgICBub3JtYWw6ICJmYWIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjogewogICAgICAgIDkwMDogImZhZCIsCiAgICAgICAgNDAwOiAiZmFkciIsCiAgICAgICAgbm9ybWFsOiAiZmFkciIsCiAgICAgICAgMzAwOiAiZmFkbCIsCiAgICAgICAgMTAwOiAiZmFkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjogewogICAgICAgIDkwMDogImZhc3MiLAogICAgICAgIDQwMDogImZhc3IiLAogICAgICAgIG5vcm1hbDogImZhc3IiLAogICAgICAgIDMwMDogImZhc2wiLAogICAgICAgIDEwMDogImZhc3QiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjogewogICAgICAgIDkwMDogImZhc2RzIiwKICAgICAgICA0MDA6ICJmYXNkciIsCiAgICAgICAgbm9ybWFsOiAiZmFzZHIiLAogICAgICAgIDMwMDogImZhc2RsIiwKICAgICAgICAxMDA6ICJmYXNkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IjogewogICAgICAgIDQwMDogImZhanIiLAogICAgICAgIG5vcm1hbDogImZhanIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjogewogICAgICAgIDQwMDogImZhamZyIiwKICAgICAgICBub3JtYWw6ICJmYWpmciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IER1byI6IHsKICAgICAgICA0MDA6ICJmYWpkciIsCiAgICAgICAgbm9ybWFsOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTbGFiIjogewogICAgICAgIDQwMDogImZhc2xyIiwKICAgICAgICBub3JtYWw6ICJmYXNsciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOiB7CiAgICAgICAgNDAwOiAiZmFzbHByIiwKICAgICAgICBub3JtYWw6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBUaHVtYnByaW50IjogewogICAgICAgIDMwMDogImZhdGwiLAogICAgICAgIG5vcm1hbDogImZhdGwiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOiB7CiAgICAgICAgOTAwOiAiZmFucyIsCiAgICAgICAgbm9ybWFsOiAiZmFucyIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOiB7CiAgICAgICAgOTAwOiAiZmFuZHMiLAogICAgICAgIG5vcm1hbDogImZhbmRzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgRXRjaCI6IHsKICAgICAgICA5MDA6ICJmYWVzIiwKICAgICAgICBub3JtYWw6ICJmYWVzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOiB7CiAgICAgICAgMTAwOiAiZmFndCIsCiAgICAgICAgbm9ybWFsOiAiZmFndCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IENoaXNlbCI6IHsKICAgICAgICA0MDA6ICJmYWNyIiwKICAgICAgICBub3JtYWw6ICJmYWNyIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCI6IHsKICAgICAgICA2MDA6ICJmYXdzYiIsCiAgICAgICAgbm9ybWFsOiAiZmF3c2IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IjogewogICAgICAgIDYwMDogImZhdXNiIiwKICAgICAgICBub3JtYWw6ICJmYXVzYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRHVvIjogewogICAgICAgIDYwMDogImZhdWRzYiIsCiAgICAgICAgbm9ybWFsOiAiZmF1ZHNiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsIjogewogICAgICAgIDYwMDogImZhdWZzYiIsCiAgICAgICAgbm9ybWFsOiAiZmF1ZnNiIgogICAgICB9CiAgICB9OwogICAgRXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbWyJjbGFzc2ljIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iLCAiYnJhbmRzIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsiZHVvdG9uZSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWQiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsic2hhcnAiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzaGFycC1kdW90b25lIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc2RzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbImNoaXNlbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWNyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbImV0Y2giLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFlcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbImdyYXBoaXRlIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhZ3QiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInRoaW4iLAogICAgICBzdHlsZUlkczogWyJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDEwMAogICAgfV0sIFsiamVsbHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJqZWxseS1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqZHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsiamVsbHktZmlsbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpmciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJub3Rkb2ciLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFucyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbIm5vdGRvZy1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFuZHMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzbGFiIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc2xyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInNsYWItcHJlc3MiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzbHByIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInRodW1icHJpbnQiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF0bCIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAibGlnaHQiLAogICAgICBzdHlsZUlkczogWyJsaWdodCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiAzMDAKICAgIH1dLCBbInV0aWxpdHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1c2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVkc2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWZpbGwiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1ZnNiIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzZW1pYm9sZCIsCiAgICAgIHN0eWxlSWRzOiBbInNlbWlib2xkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDYwMAogICAgfV0sIFsid2hpdGVib2FyZCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXdzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dXSksIE10ID0gewogICAgICBjaGlzZWw6IHsKICAgICAgICByZWd1bGFyOiAiZmFjciIKICAgICAgfSwKICAgICAgY2xhc3NpYzogewogICAgICAgIGJyYW5kczogImZhYiIsCiAgICAgICAgbGlnaHQ6ICJmYWwiLAogICAgICAgIHJlZ3VsYXI6ICJmYXIiLAogICAgICAgIHNvbGlkOiAiZmFzIiwKICAgICAgICB0aGluOiAiZmF0IgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgbGlnaHQ6ICJmYWRsIiwKICAgICAgICByZWd1bGFyOiAiZmFkciIsCiAgICAgICAgc29saWQ6ICJmYWQiLAogICAgICAgIHRoaW46ICJmYWR0IgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgc29saWQ6ICJmYWVzIgogICAgICB9LAogICAgICBncmFwaGl0ZTogewogICAgICAgIHRoaW46ICJmYWd0IgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgIHJlZ3VsYXI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgIHJlZ3VsYXI6ICJmYWpkciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgcmVndWxhcjogImZhamZyIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICBzb2xpZDogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIHNvbGlkOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNsIiwKICAgICAgICByZWd1bGFyOiAiZmFzciIsCiAgICAgICAgc29saWQ6ICJmYXNzIiwKICAgICAgICB0aGluOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNkbCIsCiAgICAgICAgcmVndWxhcjogImZhc2RyIiwKICAgICAgICBzb2xpZDogImZhc2RzIiwKICAgICAgICB0aGluOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICByZWd1bGFyOiAiZmFzbHIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIHJlZ3VsYXI6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICBsaWdodDogImZhdGwiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICBzZW1pYm9sZDogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVmc2IiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICBzZW1pYm9sZDogImZhd3NiIgogICAgICB9CiAgICB9OwogICAgSHQgPSBbImZhayIsICJmYS1raXQiLCAiZmFrZCIsICJmYS1raXQtZHVvdG9uZSJdLCBRdCA9IHsKICAgICAga2l0OiB7CiAgICAgICAgZmFrOiAia2l0IiwKICAgICAgICAiZmEta2l0IjogImtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJraXQtZHVvdG9uZSIsCiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImtpdC1kdW90b25lIgogICAgICB9CiAgICB9LCBYdCA9IFsia2l0Il07CiAgICBKID0gImtpdCIsIHIxMCA9ICJraXQtZHVvdG9uZSIsIEUzID0gIktpdCIsIF8zID0gIktpdCBEdW90b25lIiwgbGwgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBKLCBFMyksIHIxMCwgXzMpOwogICAgc2wgPSB7CiAgICAgIGtpdDogewogICAgICAgICJmYS1raXQiOiAiZmFrIgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImZha2QiCiAgICAgIH0KICAgIH07CiAgICBobCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSBLaXQiOiB7CiAgICAgICAgNDAwOiAiZmFrIiwKICAgICAgICBub3JtYWw6ICJmYWsiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgS2l0IER1b3RvbmUiOiB7CiAgICAgICAgNDAwOiAiZmFrZCIsCiAgICAgICAgbm9ybWFsOiAiZmFrZCIKICAgICAgfQogICAgfSwgbmwgPSB7CiAgICAgIGtpdDogewogICAgICAgIGZhazogImZhLWtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJmYS1raXQtZHVvdG9uZSIKICAgICAgfQogICAgfTsKICAgIG1sID0gewogICAgICBraXQ6IHsKICAgICAgICBraXQ6ICJmYWsiCiAgICAgIH0sCiAgICAgICJraXQtZHVvdG9uZSI6IHsKICAgICAgICAia2l0LWR1b3RvbmUiOiAiZmFrZCIKICAgICAgfQogICAgfTsKICAgIHQkMSA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBmJDEgPSBbImZhLWNsYXNzaWMiLCAiZmEtZHVvdG9uZSIsICJmYS1zaGFycCIsICJmYS1zaGFycC1kdW90b25lIiwgImZhLXRodW1icHJpbnQiLCAiZmEtd2hpdGVib2FyZCIsICJmYS1ub3Rkb2ciLCAiZmEtbm90ZG9nLWR1byIsICJmYS1jaGlzZWwiLCAiZmEtZXRjaCIsICJmYS1ncmFwaGl0ZSIsICJmYS1qZWxseSIsICJmYS1qZWxseS1maWxsIiwgImZhLWplbGx5LWR1byIsICJmYS1zbGFiIiwgImZhLXNsYWItcHJlc3MiLCAiZmEtdXRpbGl0eSIsICJmYS11dGlsaXR5LWR1byIsICJmYS11dGlsaXR5LWZpbGwiXTsKICAgIGgkMSA9ICJjbGFzc2ljIiwgbyQxID0gImR1b3RvbmUiLCBuJDEgPSAic2hhcnAiLCBzJDEgPSAic2hhcnAtZHVvdG9uZSIsIHUkMSA9ICJjaGlzZWwiLCBnJDEgPSAiZXRjaCIsIHkkMSA9ICJncmFwaGl0ZSIsIG0kMSA9ICJqZWxseSIsIGEkMSA9ICJqZWxseS1kdW8iLCBwJDEgPSAiamVsbHktZmlsbCIsIHckMSA9ICJub3Rkb2ciLCBlJDEgPSAibm90ZG9nLWR1byIsIGIkMSA9ICJzbGFiIiwgYyQxID0gInNsYWItcHJlc3MiLCByJDEgPSAidGh1bWJwcmludCIsIHgkMSA9ICJ1dGlsaXR5IiwgaSQxID0gInV0aWxpdHktZHVvIiwgSSQxID0gInV0aWxpdHktZmlsbCIsIEYkMSA9ICJ3aGl0ZWJvYXJkIiwgdiQxID0gIkNsYXNzaWMiLCBTJDEgPSAiRHVvdG9uZSIsIEEkMSA9ICJTaGFycCIsIFAkMSA9ICJTaGFycCBEdW90b25lIiwgaiQxID0gIkNoaXNlbCIsIEIkMSA9ICJFdGNoIiwgTiQxID0gIkdyYXBoaXRlIiwgayQxID0gIkplbGx5IiwgRCQxID0gIkplbGx5IER1byIsIEMkMSA9ICJKZWxseSBGaWxsIiwgVCQxID0gIk5vdGRvZyIsIEwkMSA9ICJOb3Rkb2cgRHVvIiwgVyQxID0gIlNsYWIiLCBSJDEgPSAiU2xhYiBQcmVzcyIsIEskMSA9ICJUaHVtYnByaW50IiwgVSQxID0gIlV0aWxpdHkiLCBKJDEgPSAiVXRpbGl0eSBEdW8iLCBFJDEgPSAiVXRpbGl0eSBGaWxsIiwgXyQxID0gIldoaXRlYm9hcmQiLCB3dCQxID0gKF93dCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX3d0LCBoJDEsIHYkMSksIG8kMSwgUyQxKSwgbiQxLCBBJDEpLCBzJDEsIFAkMSksIHUkMSwgaiQxKSwgZyQxLCBCJDEpLCB5JDEsIE4kMSksIG0kMSwgayQxKSwgYSQxLCBEJDEpLCBwJDEsIEMkMSksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF93dCwgdyQxLCBUJDEpLCBlJDEsIEwkMSksIGIkMSwgVyQxKSwgYyQxLCBSJDEpLCByJDEsIEskMSksIHgkMSwgVSQxKSwgaSQxLCBKJDEpLCBJJDEsIEUkMSksIEYkMSwgXyQxKSk7CiAgICBHJDEgPSAia2l0IiwgZCQxID0gImtpdC1kdW90b25lIiwgTSQxID0gIktpdCIsIE8yID0gIktpdCBEdW90b25lIiwgZGwkMSA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIEckMSwgTSQxKSwgZCQxLCBPMik7CiAgICBIbCA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgICJmYS1icmFuZHMiOiAiZmFiIiwKICAgICAgICAiZmEtZHVvdG9uZSI6ICJmYWQiLAogICAgICAgICJmYS1saWdodCI6ICJmYWwiLAogICAgICAgICJmYS1yZWd1bGFyIjogImZhciIsCiAgICAgICAgImZhLXNvbGlkIjogImZhcyIsCiAgICAgICAgImZhLXRoaW4iOiAiZmF0IgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFkciIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhZGwiLAogICAgICAgICJmYS10aGluIjogImZhZHQiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhc3MiLAogICAgICAgICJmYS1yZWd1bGFyIjogImZhc3IiLAogICAgICAgICJmYS1saWdodCI6ICJmYXNsIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYXN0IgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFzZHMiLAogICAgICAgICJmYS1yZWd1bGFyIjogImZhc2RyIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFzZGwiLAogICAgICAgICJmYS10aGluIjogImZhc2R0IgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzbHIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhc2xwciIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXdzYiIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgICJmYS1saWdodCI6ICJmYXRsIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFucyIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhbmRzIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhZXMiCiAgICAgIH0sCiAgICAgIGdyYXBoaXRlOiB7CiAgICAgICAgImZhLXRoaW4iOiAiZmFndCIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpmciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpkciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFjciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdWZzYiIKICAgICAgfQogICAgfSwgWSQxID0gewogICAgICBjbGFzc2ljOiBbImZhcyIsICJmYXIiLCAiZmFsIiwgImZhdCIsICJmYWQiXSwKICAgICAgZHVvdG9uZTogWyJmYWRyIiwgImZhZGwiLCAiZmFkdCJdLAogICAgICBzaGFycDogWyJmYXNzIiwgImZhc3IiLCAiZmFzbCIsICJmYXN0Il0sCiAgICAgICJzaGFycC1kdW90b25lIjogWyJmYXNkcyIsICJmYXNkciIsICJmYXNkbCIsICJmYXNkdCJdLAogICAgICBzbGFiOiBbImZhc2xyIl0sCiAgICAgICJzbGFiLXByZXNzIjogWyJmYXNscHIiXSwKICAgICAgd2hpdGVib2FyZDogWyJmYXdzYiJdLAogICAgICB0aHVtYnByaW50OiBbImZhdGwiXSwKICAgICAgbm90ZG9nOiBbImZhbnMiXSwKICAgICAgIm5vdGRvZy1kdW8iOiBbImZhbmRzIl0sCiAgICAgIGV0Y2g6IFsiZmFlcyJdLAogICAgICBncmFwaGl0ZTogWyJmYWd0Il0sCiAgICAgIGplbGx5OiBbImZhanIiXSwKICAgICAgImplbGx5LWZpbGwiOiBbImZhamZyIl0sCiAgICAgICJqZWxseS1kdW8iOiBbImZhamRyIl0sCiAgICAgIGNoaXNlbDogWyJmYWNyIl0sCiAgICAgIHV0aWxpdHk6IFsiZmF1c2IiXSwKICAgICAgInV0aWxpdHktZHVvIjogWyJmYXVkc2IiXSwKICAgICAgInV0aWxpdHktZmlsbCI6IFsiZmF1ZnNiIl0KICAgIH0sIFhsID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgZmFiOiAiZmEtYnJhbmRzIiwKICAgICAgICBmYWQ6ICJmYS1kdW90b25lIiwKICAgICAgICBmYWw6ICJmYS1saWdodCIsCiAgICAgICAgZmFyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFzOiAiZmEtc29saWQiLAogICAgICAgIGZhdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICBmYWRyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFkbDogImZhLWxpZ2h0IiwKICAgICAgICBmYWR0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICBmYXNzOiAiZmEtc29saWQiLAogICAgICAgIGZhc3I6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYXNsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhc3Q6ICJmYS10aGluIgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICBmYXNkczogImZhLXNvbGlkIiwKICAgICAgICBmYXNkcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhc2RsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhc2R0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgIGZhc2xyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgZmFzbHByOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgIGZhd3NiOiAiZmEtc2VtaWJvbGQiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICBmYXRsOiAiZmEtbGlnaHQiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgIGZhbnM6ICJmYS1zb2xpZCIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgZmFuZHM6ICJmYS1zb2xpZCIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgIGZhZXM6ICJmYS1zb2xpZCIKICAgICAgfSwKICAgICAgZ3JhcGhpdGU6IHsKICAgICAgICBmYWd0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICBmYWpyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgZmFqZnI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgIGZhamRyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgZmFjcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICBmYXVzYjogImZhLXNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgZmF1ZHNiOiAiZmEtc2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgZmF1ZnNiOiAiZmEtc2VtaWJvbGQiCiAgICAgIH0KICAgIH0sIFYkMSA9IFsiZmEtc29saWQiLCAiZmEtcmVndWxhciIsICJmYS1saWdodCIsICJmYS10aGluIiwgImZhLWR1b3RvbmUiLCAiZmEtYnJhbmRzIiwgImZhLXNlbWlib2xkIl0sIGxvID0gWyJmYSIsICJmYXMiLCAiZmFyIiwgImZhbCIsICJmYXQiLCAiZmFkIiwgImZhZHIiLCAiZmFkbCIsICJmYWR0IiwgImZhYiIsICJmYXNzIiwgImZhc3IiLCAiZmFzbCIsICJmYXN0IiwgImZhc2RzIiwgImZhc2RyIiwgImZhc2RsIiwgImZhc2R0IiwgImZhc2xyIiwgImZhc2xwciIsICJmYXdzYiIsICJmYXRsIiwgImZhbnMiLCAiZmFuZHMiLCAiZmFlcyIsICJmYWd0IiwgImZhanIiLCAiZmFqZnIiLCAiZmFqZHIiLCAiZmFjciIsICJmYXVzYiIsICJmYXVkc2IiLCAiZmF1ZnNiIl0uY29uY2F0KGYkMSwgViQxKSwgJDMgPSBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiIsICJkdW90b25lIiwgImJyYW5kcyIsICJzZW1pYm9sZCJdLCB6JDEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLCBxJDEgPSB6JDEuY29uY2F0KFsxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0pLCBIJDEgPSBbImF3IiwgImZ3IiwgInB1bGwtbGVmdCIsICJwdWxsLXJpZ2h0Il0sIHNvID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhZJDEpKSwgJDMsIEgkMSwgWyIyeHMiLCAieHMiLCAic20iLCAibGciLCAieGwiLCAiMnhsIiwgImJlYXQiLCAiYm9yZGVyIiwgImZhZGUiLCAiYmVhdC1mYWRlIiwgImJvdW5jZSIsICJmbGlwLWJvdGgiLCAiZmxpcC1ob3Jpem9udGFsIiwgImZsaXAtdmVydGljYWwiLCAiZmxpcCIsICJpbnZlcnNlIiwgImxheWVycyIsICJsYXllcnMtYm90dG9tLWxlZnQiLCAibGF5ZXJzLWJvdHRvbS1yaWdodCIsICJsYXllcnMtY291bnRlciIsICJsYXllcnMtdGV4dCIsICJsYXllcnMtdG9wLWxlZnQiLCAibGF5ZXJzLXRvcC1yaWdodCIsICJsaSIsICJwdWxsLWVuZCIsICJwdWxsLXN0YXJ0IiwgInB1bHNlIiwgInJvdGF0ZS0xODAiLCAicm90YXRlLTI3MCIsICJyb3RhdGUtOTAiLCAicm90YXRlLWJ5IiwgInNoYWtlIiwgInNwaW4tcHVsc2UiLCAic3Bpbi1yZXZlcnNlIiwgInNwaW4iLCAic3RhY2stMXgiLCAic3RhY2stMngiLCAic3RhY2siLCAidWwiLCAid2lkdGgtYXV0byIsICJ3aWR0aC1maXhlZCIsIHQkMS5HUk9VUCwgdCQxLlNXQVBfT1BBQ0lUWSwgdCQxLlBSSU1BUlksIHQkMS5TRUNPTkRBUlldKS5jb25jYXQoeiQxLm1hcChmdW5jdGlvbihsNikgewogICAgICByZXR1cm4gIiIuY29uY2F0KGw2LCAieCIpOwogICAgfSkpLmNvbmNhdChxJDEubWFwKGZ1bmN0aW9uKGw2KSB7CiAgICAgIHJldHVybiAidy0iLmNvbmNhdChsNik7CiAgICB9KSk7CiAgICBmbyA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA1IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgQnJhbmRzIjogewogICAgICAgIDQwMDogImZhYiIsCiAgICAgICAgbm9ybWFsOiAiZmFiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgRHVvdG9uZSI6IHsKICAgICAgICA5MDA6ICJmYWQiCiAgICAgIH0KICAgIH07CiAgICBOQU1FU1BBQ0VfSURFTlRJRklFUiA9ICJfX19GT05UX0FXRVNPTUVfX18iOwogICAgVU5JVFNfSU5fR1JJRCA9IDE2OwogICAgREVGQVVMVF9DU1NfUFJFRklYID0gImZhIjsKICAgIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MgPSAic3ZnLWlubGluZS0tZmEiOwogICAgREFUQV9GQV9JMlNWRyA9ICJkYXRhLWZhLWkyc3ZnIjsKICAgIERBVEFfRkFfUFNFVURPX0VMRU1FTlQgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCI7CiAgICBEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudC1wZW5kaW5nIjsKICAgIERBVEFfUFJFRklYID0gImRhdGEtcHJlZml4IjsKICAgIERBVEFfSUNPTiA9ICJkYXRhLWljb24iOwogICAgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTID0gImZvbnRhd2Vzb21lLWkyc3ZnIjsKICAgIE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DID0gImFzeW5jIjsKICAgIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTID0gWyJIVE1MIiwgIkhFQUQiLCAiU1RZTEUiLCAiU0NSSVBUIl07CiAgICBQU0VVRE9fRUxFTUVOVFMgPSBbIjo6YmVmb3JlIiwgIjo6YWZ0ZXIiLCAiOmJlZm9yZSIsICI6YWZ0ZXIiXTsKICAgIFBST0RVQ1RJT04gPSAoZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KSgpOwogICAgX1BSRUZJWF9UT19TVFlMRSA9IF9vYmplY3RTcHJlYWQyKHt9LCBRKTsKICAgIF9QUkVGSVhfVE9fU1RZTEVbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgICJmYS1kdW90b25lIjogImR1b3RvbmUiCiAgICB9KSwgUVtpMTBdKSwgUXRbImtpdCJdKSwgUXRbImtpdC1kdW90b25lIl0pOwogICAgUFJFRklYX1RPX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19TVFlMRSk7CiAgICBfU1RZTEVfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoe30sIE10KTsKICAgIF9TVFlMRV9UT19QUkVGSVhbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgIGR1b3RvbmU6ICJmYWQiCiAgICB9KSwgX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgbWxbImtpdCJdKSwgbWxbImtpdC1kdW90b25lIl0pOwogICAgU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX1NUWUxFX1RPX1BSRUZJWCk7CiAgICBfUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBfb2JqZWN0U3ByZWFkMih7fSwgWGwpOwogICAgX1BSRUZJWF9UT19MT05HX1NUWUxFW2kxMF0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX1BSRUZJWF9UT19MT05HX1NUWUxFW2kxMF0pLCBubFsia2l0Il0pOwogICAgUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBmYW1pbHlQcm94eShfUFJFRklYX1RPX0xPTkdfU1RZTEUpOwogICAgX0xPTkdfU1RZTEVfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoe30sIEhsKTsKICAgIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgc2xbImtpdCJdKTsKICAgIExPTkdfU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0xPTkdfU1RZTEVfVE9fUFJFRklYKTsKICAgIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOID0gRzsKICAgIExBWUVSU19URVhUX0NMQVNTTkFNRSA9ICJmYS1sYXllcnMtdGV4dCI7CiAgICBGT05UX0ZBTUlMWV9QQVRURVJOID0gTTM7CiAgICBfRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoe30sIHl0KTsKICAgIEZPTlRfV0VJR0hUX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KF9GT05UX1dFSUdIVF9UT19QUkVGSVgpOwogICAgQVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTiA9IFsiY2xhc3MiLCAiZGF0YS1wcmVmaXgiLCAiZGF0YS1pY29uIiwgImRhdGEtZmEtdHJhbnNmb3JtIiwgImRhdGEtZmEtbWFzayJdOwogICAgRFVPVE9ORV9DTEFTU0VTID0gWDsKICAgIFJFU0VSVkVEX0NMQVNTRVMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KFh0KSwgX3RvQ29uc3VtYWJsZUFycmF5KHNvKSk7CiAgICBpbml0aWFsID0gV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnIHx8IHt9OwogICAgaWYgKERPQ1VNRU5UICYmIHR5cGVvZiBET0NVTUVOVC5xdWVyeVNlbGVjdG9yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGF0dHJzID0gW1siZGF0YS1mYW1pbHktcHJlZml4IiwgImZhbWlseVByZWZpeCJdLCBbImRhdGEtY3NzLXByZWZpeCIsICJjc3NQcmVmaXgiXSwgWyJkYXRhLWZhbWlseS1kZWZhdWx0IiwgImZhbWlseURlZmF1bHQiXSwgWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCAic3R5bGVEZWZhdWx0Il0sIFsiZGF0YS1yZXBsYWNlbWVudC1jbGFzcyIsICJyZXBsYWNlbWVudENsYXNzIl0sIFsiZGF0YS1hdXRvLXJlcGxhY2Utc3ZnIiwgImF1dG9SZXBsYWNlU3ZnIl0sIFsiZGF0YS1hdXRvLWFkZC1jc3MiLCAiYXV0b0FkZENzcyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50cyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cy13YXJuaW5ncyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbiIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIl0sIFsiZGF0YS1vYnNlcnZlLW11dGF0aW9ucyIsICJvYnNlcnZlTXV0YXRpb25zIl0sIFsiZGF0YS1tdXRhdGUtYXBwcm9hY2giLCAibXV0YXRlQXBwcm9hY2giXSwgWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwgImtlZXBPcmlnaW5hbFNvdXJjZSJdLCBbImRhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZSIsICJtZWFzdXJlUGVyZm9ybWFuY2UiXSwgWyJkYXRhLXNob3ctbWlzc2luZy1pY29ucyIsICJzaG93TWlzc2luZ0ljb25zIl1dOwogICAgICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgYXR0ciA9IF9yZWYyMlswXSwga2V5MiA9IF9yZWYyMlsxXTsKICAgICAgICB2YXIgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpOwogICAgICAgIGlmICh2YWwgIT09IHZvaWQgMCAmJiB2YWwgIT09IG51bGwpIHsKICAgICAgICAgIGluaXRpYWxba2V5Ml0gPSB2YWw7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIF9kZWZhdWx0ID0gewogICAgICBzdHlsZURlZmF1bHQ6ICJzb2xpZCIsCiAgICAgIGZhbWlseURlZmF1bHQ6IGkxMCwKICAgICAgY3NzUHJlZml4OiBERUZBVUxUX0NTU19QUkVGSVgsCiAgICAgIHJlcGxhY2VtZW50Q2xhc3M6IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsCiAgICAgIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLAogICAgICBhdXRvQWRkQ3NzOiB0cnVlLAogICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50czogZmFsc2UsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3M6IHRydWUsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46IGZhbHNlLAogICAgICBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLAogICAgICBtdXRhdGVBcHByb2FjaDogImFzeW5jIiwKICAgICAga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLAogICAgICBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLAogICAgICBzaG93TWlzc2luZ0ljb25zOiB0cnVlCiAgICB9OwogICAgaWYgKGluaXRpYWwuZmFtaWx5UHJlZml4KSB7CiAgICAgIGluaXRpYWwuY3NzUHJlZml4ID0gaW5pdGlhbC5mYW1pbHlQcmVmaXg7CiAgICB9CiAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9kZWZhdWx0KSwgaW5pdGlhbCk7CiAgICBpZiAoIV9jb25maWcuYXV0b1JlcGxhY2VTdmcpIF9jb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlOwogICAgY29uZmlnMiA9IHt9OwogICAgT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwga2V5MiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQzKHZhbCkgewogICAgICAgICAgX2NvbmZpZ1trZXkyXSA9IHZhbDsKICAgICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgICAgcmV0dXJuIGNiKGNvbmZpZzIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgICAgICByZXR1cm4gX2NvbmZpZ1trZXkyXTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwgImZhbWlseVByZWZpeCIsIHsKICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQyKHZhbCkgewogICAgICAgIF9jb25maWcuY3NzUHJlZml4ID0gdmFsOwogICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgIHJldHVybiBjYihjb25maWcyKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIF9jb25maWcuY3NzUHJlZml4OwogICAgICB9CiAgICB9KTsKICAgIFdJTkRPVy5Gb250QXdlc29tZUNvbmZpZyA9IGNvbmZpZzI7CiAgICBfb25DaGFuZ2VDYiA9IFtdOwogICAgZCQyID0gVU5JVFNfSU5fR1JJRDsKICAgIG1lYW5pbmdsZXNzVHJhbnNmb3JtID0gewogICAgICBzaXplOiAxNiwKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgcm90YXRlOiAwLAogICAgICBmbGlwWDogZmFsc2UsCiAgICAgIGZsaXBZOiBmYWxzZQogICAgfTsKICAgIGlkUG9vbCA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CiAgICBiYXNlU3R5bGVzID0gIjpyb290LCA6aG9zdCB7XG4gIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRnJlZSc7XG4gIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBGcmVlJztcbiAgLS1mYS1mb250LWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBQcm8nO1xuICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUHJvJztcbiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnO1xuICAtLWZhLWZvbnQtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJztcbiAgLS1mYS1mb250LWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnO1xuICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBEdW90b25lJztcbiAgLS1mYS1mb250LWJyYW5kczogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgQnJhbmRzJztcbiAgLS1mYS1mb250LXNoYXJwLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7XG4gIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7XG4gIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnO1xuICAtLWZhLWZvbnQtc2hhcnAtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnO1xuICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7XG4gIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnO1xuICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7XG4gIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUnO1xuICAtLWZhLWZvbnQtc2xhYi1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTbGFiJztcbiAgLS1mYS1mb250LXNsYWItcHJlc3MtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyc7XG4gIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkJztcbiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQnO1xuICAtLWZhLWZvbnQtbm90ZG9nLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBOb3Rkb2cnO1xuICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byc7XG4gIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBFdGNoJztcbiAgLS1mYS1mb250LWdyYXBoaXRlLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEdyYXBoaXRlJztcbiAgLS1mYS1mb250LWplbGx5LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5JztcbiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCc7XG4gIC0tZmEtZm9udC1qZWxseS1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvJztcbiAgLS1mYS1mb250LWNoaXNlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBDaGlzZWwnO1xuICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSc7XG4gIC0tZmEtZm9udC11dGlsaXR5LWR1by1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8nO1xuICAtLWZhLWZvbnQtdXRpbGl0eS1maWxsLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwnO1xufVxuXG4uc3ZnLWlubGluZS0tZmEge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTtcbiAgaGVpZ2h0OiAxZW07XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XG4gIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xuICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xuICB2ZXJ0aWNhbC1hbGlnbjogMGVtO1xufVxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MTRlbTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtO1xufVxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCxcbi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1zdGFydCB7XG4gIGZsb2F0OiBpbmxpbmUtc3RhcnQ7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pO1xufVxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsXG4uc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtZW5kIHtcbiAgZmxvYXQ6IGlubGluZS1lbmQ7XG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XG59XG4uc3ZnLWlubGluZS0tZmEuZmEtbGkge1xuICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7XG4gIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTtcbiAgaW5zZXQtYmxvY2stc3RhcnQ6IDAuMjVlbTsgLyogc3luY2luZyB2ZXJ0aWNhbCBhbGlnbm1lbnQgd2l0aCBXZWIgRm9udCByZW5kZXJpbmcgKi9cbn1cblxuLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZmEtbGF5ZXJzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDFlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcbiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pO1xufVxuLmZhLWxheWVycyAuc3ZnLWlubGluZS0tZmEge1xuICBpbnNldDogMDtcbiAgbWFyZ2luOiBhdXRvO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG59XG5cbi5mYS1sYXllcnMtdGV4dCB7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xufVxuXG4uZmEtbGF5ZXJzLWNvdW50ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpO1xuICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pO1xuICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTtcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcbn1cblxuLmZhLWxheWVycy1ib3R0b20tcmlnaHQge1xuICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7XG4gIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7XG4gIHRvcDogYXV0bztcbiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0O1xufVxuXG4uZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHtcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xuICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTtcbiAgcmlnaHQ6IGF1dG87XG4gIHRvcDogYXV0bztcbiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7XG59XG5cbi5mYS1sYXllcnMtdG9wLXJpZ2h0IHtcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xuICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XG59XG5cbi5mYS1sYXllcnMtdG9wLWxlZnQge1xuICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTtcbiAgcmlnaHQ6IGF1dG87XG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XG59XG5cbi5mYS0xeCB7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4uZmEtMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cblxuLmZhLTN4IHtcbiAgZm9udC1zaXplOiAzZW07XG59XG5cbi5mYS00eCB7XG4gIGZvbnQtc2l6ZTogNGVtO1xufVxuXG4uZmEtNXgge1xuICBmb250LXNpemU6IDVlbTtcbn1cblxuLmZhLTZ4IHtcbiAgZm9udC1zaXplOiA2ZW07XG59XG5cbi5mYS03eCB7XG4gIGZvbnQtc2l6ZTogN2VtO1xufVxuXG4uZmEtOHgge1xuICBmb250LXNpemU6IDhlbTtcbn1cblxuLmZhLTl4IHtcbiAgZm9udC1zaXplOiA5ZW07XG59XG5cbi5mYS0xMHgge1xuICBmb250LXNpemU6IDEwZW07XG59XG5cbi5mYS0yeHMge1xuICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqL1xuICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi9cbiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovXG59XG5cbi5mYS14cyB7XG4gIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovXG4gIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi9cbn1cblxuLmZhLXNtIHtcbiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi9cbiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDE0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovXG4gIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqL1xufVxuXG4uZmEtbGcge1xuICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqL1xuICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi9cbiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovXG59XG5cbi5mYS14bCB7XG4gIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovXG4gIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDI0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi9cbn1cblxuLmZhLTJ4bCB7XG4gIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovXG4gIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAzMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqL1xuICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDMyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi9cbn1cblxuLmZhLXdpZHRoLWF1dG8ge1xuICAtLWZhLXdpZHRoOiBhdXRvO1xufVxuXG4uZmEtZncsXG4uZmEtd2lkdGgtZml4ZWQge1xuICAtLWZhLXdpZHRoOiAxLjI1ZW07XG59XG5cbi5mYS11bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7XG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xufVxuLmZhLXVsID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5mYS1saSB7XG4gIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSFcbiAgLSBUaGlzIGZlYXR1cmUgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgRm9udCBBd2Vzb21lICh2OCkhXG4gIC0gWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgaW4gdGhpcyB2ZXJzaW9uICp2NyksIGJ1dCBpdCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gRm9udCBBd2Vzb21lIHY4LlxuKi9cbi8qIE5vdGVzOlxuKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXdpZHRoID0gMS8xNiBieSBkZWZhdWx0ICh0byByZW5kZXIgYXMgfjFweCBiYXNlZCBvbiBhIDE2cHggZGVmYXVsdCBmb250LXNpemUpXG4qIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9XG4gICoqIDMvMTYgZm9yIHZlcnRpY2FsIHBhZGRpbmcgKHRvIGdpdmUgfjJweCBvZiB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uIGNvbnNpZGVyaW5nIGl0J3MgdmVydGljYWwgYWxpZ25tZW50KVxuICAqKiA0LzE2IGZvciBob3Jpem9udGFsIHBhZGRpbmcgKHRvIGdpdmUgfjRweCBvZiBob3Jpem9udGFsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24pXG4qL1xuLmZhLWJvcmRlciB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pO1xuICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpO1xuICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wNjI1ZW0pO1xuICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpO1xuICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4xODc1ZW0gMC4yNWVtKTtcbn1cblxuLmZhLXB1bGwtbGVmdCxcbi5mYS1wdWxsLXN0YXJ0IHtcbiAgZmxvYXQ6IGlubGluZS1zdGFydDtcbiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XG59XG5cbi5mYS1wdWxsLXJpZ2h0LFxuLmZhLXB1bGwtZW5kIHtcbiAgZmxvYXQ6IGlubGluZS1lbmQ7XG4gIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XG59XG5cbi5mYS1iZWF0IHtcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQ7XG4gIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xufVxuXG4uZmEtYm91bmNlIHtcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJvdW5jZTtcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC4yOCwgMC44NCwgMC40MiwgMSkpO1xufVxuXG4uZmEtZmFkZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlO1xuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xufVxuXG4uZmEtYmVhdC1mYWRlIHtcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTtcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTtcbn1cblxuLmZhLWZsaXAge1xuICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDtcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XG59XG5cbi5mYS1zaGFrZSB7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTtcbiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpO1xufVxuXG4uZmEtc3BpbiB7XG4gIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xuICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpO1xuICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XG59XG5cbi5mYS1zcGluLXJldmVyc2Uge1xuICAtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7XG59XG5cbi5mYS1wdWxzZSxcbi5mYS1zcGluLXB1bHNlIHtcbiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW47XG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpO1xufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAuZmEtYmVhdCxcbiAgLmZhLWJvdW5jZSxcbiAgLmZhLWZhZGUsXG4gIC5mYS1iZWF0LWZhZGUsXG4gIC5mYS1mbGlwLFxuICAuZmEtcHVsc2UsXG4gIC5mYS1zaGFrZSxcbiAgLmZhLXNwaW4sXG4gIC5mYS1zcGluLXB1bHNlIHtcbiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtYmVhdCB7XG4gIDAlLCA5MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1ib3VuY2Uge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICB9XG4gIDEwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbiAgMzAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcbiAgfVxuICA1NyUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTtcbiAgfVxuICA2NCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtZmFkZSB7XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1mbGlwIHtcbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1zaGFrZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xuICB9XG4gIDQlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7XG4gIH1cbiAgOCUsIDI0JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTtcbiAgfVxuICAxMiUsIDI4JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpO1xuICB9XG4gIDE2JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcbiAgfVxuICAyMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcbiAgfVxuICAzMiUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XG4gIH1cbiAgMzYlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7XG4gIH1cbiAgNDAlLCAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbi5mYS1yb3RhdGUtOTAge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG59XG5cbi5mYS1yb3RhdGUtMTgwIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmZhLXJvdGF0ZS0yNzAge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xufVxuXG4uZmEtZmxpcC1ob3Jpem9udGFsIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG59XG5cbi5mYS1mbGlwLXZlcnRpY2FsIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG59XG5cbi5mYS1mbGlwLWJvdGgsXG4uZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWwge1xuICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7XG59XG5cbi5mYS1yb3RhdGUtYnkge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1yb3RhdGUtYW5nbGUsIDApKTtcbn1cblxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1wcmltYXJ5IHtcbiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTtcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcbn1cblxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xuICBmaWxsOiB2YXIoLS1mYS1zZWNvbmRhcnktY29sb3IsIGN1cnJlbnRDb2xvcik7XG4gIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpO1xufVxuXG4uc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHtcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XG59XG5cbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XG4gIG9wYWNpdHk6IHZhcigtLWZhLXByaW1hcnktb3BhY2l0eSwgMSk7XG59XG5cbi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1wcmltYXJ5LFxuLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7XG4gIGZpbGw6IGJsYWNrO1xufVxuXG4uc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7XG4gIGZpbGw6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xufVxuXG4uZmEtc3RhY2sge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogMmVtO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyLjVlbTtcbn1cblxuLmZhLWludmVyc2Uge1xuICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7XG59XG5cbi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7XG4gIC0tZmEtd2lkdGg6IDEuMjVlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7XG59XG4uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMngge1xuICAtLWZhLXdpZHRoOiAyLjVlbTtcbiAgaGVpZ2h0OiAyZW07XG4gIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7XG59XG5cbi5mYS1zdGFjay0xeCxcbi5mYS1zdGFjay0yeCB7XG4gIGluc2V0OiAwO1xuICBtYXJnaW46IGF1dG87XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7XG59IjsKICAgIF9jc3NJbnNlcnRlZCA9IGZhbHNlOwogICAgSW5qZWN0Q1NTID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dCgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZG9tOiB7CiAgICAgICAgICAgIGNzcywKICAgICAgICAgICAgaW5zZXJ0Q3NzOiBlbnN1cmVDc3MKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3MoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbjogZnVuY3Rpb24gYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uKCkgewogICAgICAgICAgICBlbnN1cmVDc3MoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBiZWZvcmVJMnN2ZzogZnVuY3Rpb24gYmVmb3JlSTJzdmcoKSB7CiAgICAgICAgICAgIGVuc3VyZUNzcygpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICB3JDIgPSBXSU5ET1cgfHwge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0pIHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0gPSB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMpIHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc3R5bGVzID0ge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MpIHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uaG9va3MgPSB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcykgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5zaGltcyA9IFtdOwogICAgbmFtZXNwYWNlID0gdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXTsKICAgIGZ1bmN0aW9ucyA9IFtdOwogICAgX2xpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7CiAgICAgIERPQ1VNRU5ULnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBfbGlzdGVuZXIpOwogICAgICBsb2FkZWQgPSAxOwogICAgICBmdW5jdGlvbnMubWFwKGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgcmV0dXJuIGZuKCk7CiAgICAgIH0pOwogICAgfTsKICAgIGxvYWRlZCA9IGZhbHNlOwogICAgaWYgKElTX0RPTSkgewogICAgICBsb2FkZWQgPSAoRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsID8gL15sb2FkZWR8XmMvIDogL15sb2FkZWR8Xml8XmMvKS50ZXN0KERPQ1VNRU5ULnJlYWR5U3RhdGUpOwogICAgICBpZiAoIWxvYWRlZCkgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIF9saXN0ZW5lcik7CiAgICB9CiAgICBiaW5kSW50ZXJuYWw0ID0gZnVuY3Rpb24gYmluZEludGVybmFsNDIoZnVuYywgdGhpc0NvbnRleHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGE1LCBiNSwgYzExLCBkNSkgewogICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpc0NvbnRleHQsIGE1LCBiNSwgYzExLCBkNSk7CiAgICAgIH07CiAgICB9OwogICAgcmVkdWNlMyA9IGZ1bmN0aW9uIGZhc3RSZWR1Y2VPYmplY3Qoc3ViamVjdCwgZm4sIGluaXRpYWxWYWx1ZSwgdGhpc0NvbnRleHQpIHsKICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMoc3ViamVjdCksIGxlbmd0aCA9IGtleXMyLmxlbmd0aCwgaXRlcmF0b3IyID0gdGhpc0NvbnRleHQgIT09IHZvaWQgMCA/IGJpbmRJbnRlcm5hbDQoZm4sIHRoaXNDb250ZXh0KSA6IGZuLCBpMTEsIGtleTIsIHJlc3VsdDsKICAgICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgaTExID0gMTsKICAgICAgICByZXN1bHQgPSBzdWJqZWN0W2tleXMyWzBdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpMTEgPSAwOwogICAgICAgIHJlc3VsdCA9IGluaXRpYWxWYWx1ZTsKICAgICAgfQogICAgICBmb3IgKDsgaTExIDwgbGVuZ3RoOyBpMTErKykgewogICAgICAgIGtleTIgPSBrZXlzMltpMTFdOwogICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yMihyZXN1bHQsIHN1YmplY3Rba2V5Ml0sIGtleTIsIHN1YmplY3QpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgTU9OTyA9IDE7CiAgICBEVU8gPSAyOwogICAgbW9kZXJuTWF0Y2hlcyA9IFtbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggb3BhY2l0eT0iKFteIl0qKSIuKmQ9IihbXiJdKikiLipwYXRoLipkPSIoW14iXSopIi8sIHsKICAgICAgZDI6IDIsCiAgICAgIGQxOiAzCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBvcGFjaXR5PSIoW14iXSopIi4qZD0iKFteIl0qKSIvLCB7CiAgICAgIGQyOiAyCiAgICB9KV0sIFtNT05PLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZmlsbD0iY3VycmVudENvbG9yIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGQxOiAxCiAgICB9KV1dOwogICAgbGVnYWN5TWF0Y2hlcyA9IFtbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLipwYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIyOiAxLAogICAgICBkMjogMiwKICAgICAgYXR0cjE6IDMsCiAgICAgIGQxOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLipwYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjE6IDEsCiAgICAgIGQxOiAyLAogICAgICBhdHRyMjogMywKICAgICAgZDI6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIxOiAxLAogICAgICBkMTogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMjogMSwKICAgICAgZDI6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLywgewogICAgICBkMjogMSwKICAgICAgYXR0cjI6IDIsCiAgICAgIGQxOiAzLAogICAgICBhdHRyMTogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIvLCB7CiAgICAgIGQxOiAxLAogICAgICBhdHRyMTogMiwKICAgICAgZDI6IDMsCiAgICAgIGF0dHIyOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLywgewogICAgICBkMTogMSwKICAgICAgYXR0cjE6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi8sIHsKICAgICAgZDI6IDEsCiAgICAgIGF0dHIyOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qcGF0aCBkPSIoW14iXSspIi8sIHsKICAgICAgZDE6IDEsCiAgICAgIGQyOiAyCiAgICB9KV0sIFtNT05PLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIvLCB7CiAgICAgIGQxOiAxCiAgICB9KV0sIFtNT05PLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggc3R5bGU9IihbXiJdKykiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjE6IDEsCiAgICAgIGQxOiAyCiAgICB9KV1dOwogICAgc3R5bGVzMiA9IG5hbWVzcGFjZS5zdHlsZXMsIHNoaW1zID0gbmFtZXNwYWNlLnNoaW1zOwogICAgRkFNSUxZX05BTUVTID0gT2JqZWN0LmtleXMoUFJFRklYX1RPX0xPTkdfU1RZTEUpOwogICAgUFJFRklYRVNfRk9SX0ZBTUlMWSA9IEZBTUlMWV9OQU1FUy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBmYW1pbHlJZCkgewogICAgICBhY2NbZmFtaWx5SWRdID0gT2JqZWN0LmtleXMoUFJFRklYX1RPX0xPTkdfU1RZTEVbZmFtaWx5SWRdKTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICAgIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gbnVsbDsKICAgIF9ieVVuaWNvZGUgPSB7fTsKICAgIF9ieUxpZ2F0dXJlID0ge307CiAgICBfYnlPbGROYW1lID0ge307CiAgICBfYnlPbGRVbmljb2RlID0ge307CiAgICBfYnlBbGlhcyA9IHt9OwogICAgYnVpbGQgPSBmdW5jdGlvbiBidWlsZDIoKSB7CiAgICAgIHZhciBsb29rdXAgPSBmdW5jdGlvbiBsb29rdXAyKHJlZHVjZXIpIHsKICAgICAgICByZXR1cm4gcmVkdWNlMyhzdHlsZXMyLCBmdW5jdGlvbihvJCQxLCBzdHlsZSwgcHJlZml4NCkgewogICAgICAgICAgbyQkMVtwcmVmaXg0XSA9IHJlZHVjZTMoc3R5bGUsIHJlZHVjZXIsIHt9KTsKICAgICAgICAgIHJldHVybiBvJCQxOwogICAgICAgIH0sIHt9KTsKICAgICAgfTsKICAgICAgX2J5VW5pY29kZSA9IGxvb2t1cChmdW5jdGlvbihhY2MsIGljb24zLCBpY29uTmFtZSkgewogICAgICAgIGlmIChpY29uM1szXSkgewogICAgICAgICAgYWNjW2ljb24zWzNdXSA9IGljb25OYW1lOwogICAgICAgIH0KICAgICAgICBpZiAoaWNvbjNbMl0pIHsKICAgICAgICAgIHZhciBhbGlhc2VzID0gaWNvbjNbMl0uZmlsdGVyKGZ1bmN0aW9uKGEkJDEpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhJCQxID09PSAibnVtYmVyIjsKICAgICAgICAgIH0pOwogICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgIGFjY1thbGlhcy50b1N0cmluZygxNildID0gaWNvbk5hbWU7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSk7CiAgICAgIF9ieUxpZ2F0dXJlID0gbG9va3VwKGZ1bmN0aW9uKGFjYywgaWNvbjMsIGljb25OYW1lKSB7CiAgICAgICAgYWNjW2ljb25OYW1lXSA9IGljb25OYW1lOwogICAgICAgIGlmIChpY29uM1syXSkgewogICAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXS5maWx0ZXIoZnVuY3Rpb24oYSQkMSkgewogICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEkJDEgPT09ICJzdHJpbmciOwogICAgICAgICAgfSk7CiAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgYWNjW2FsaWFzXSA9IGljb25OYW1lOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0pOwogICAgICBfYnlBbGlhcyA9IGxvb2t1cChmdW5jdGlvbihhY2MsIGljb24zLCBpY29uTmFtZSkgewogICAgICAgIHZhciBhbGlhc2VzID0gaWNvbjNbMl07CiAgICAgICAgYWNjW2ljb25OYW1lXSA9IGljb25OYW1lOwogICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgYWNjW2FsaWFzXSA9IGljb25OYW1lOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0pOwogICAgICB2YXIgaGFzUmVndWxhciA9ICJmYXIiIGluIHN0eWxlczIgfHwgY29uZmlnMi5hdXRvRmV0Y2hTdmc7CiAgICAgIHZhciBzaGltTG9va3VwcyA9IHJlZHVjZTMoc2hpbXMsIGZ1bmN0aW9uKGFjYywgc2hpbSkgewogICAgICAgIHZhciBtYXliZU5hbWVNYXliZVVuaWNvZGUgPSBzaGltWzBdOwogICAgICAgIHZhciBwcmVmaXg0ID0gc2hpbVsxXTsKICAgICAgICB2YXIgaWNvbk5hbWUgPSBzaGltWzJdOwogICAgICAgIGlmIChwcmVmaXg0ID09PSAiZmFyIiAmJiAhaGFzUmVndWxhcikgewogICAgICAgICAgcHJlZml4NCA9ICJmYXMiOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGFjYy5uYW1lc1ttYXliZU5hbWVNYXliZVVuaWNvZGVdID0gewogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIG1heWJlTmFtZU1heWJlVW5pY29kZSA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGFjYy51bmljb2Rlc1ttYXliZU5hbWVNYXliZVVuaWNvZGUudG9TdHJpbmcoMTYpXSA9IHsKICAgICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgICBpY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSwgewogICAgICAgIG5hbWVzOiB7fSwKICAgICAgICB1bmljb2Rlczoge30KICAgICAgfSk7CiAgICAgIF9ieU9sZE5hbWUgPSBzaGltTG9va3Vwcy5uYW1lczsKICAgICAgX2J5T2xkVW5pY29kZSA9IHNoaW1Mb29rdXBzLnVuaWNvZGVzOwogICAgICBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjb25maWcyLnN0eWxlRGVmYXVsdCwgewogICAgICAgIGZhbWlseTogY29uZmlnMi5mYW1pbHlEZWZhdWx0CiAgICAgIH0pOwogICAgfTsKICAgIG9uQ2hhbmdlKGZ1bmN0aW9uKGMkJDEpIHsKICAgICAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoYyQkMS5zdHlsZURlZmF1bHQsIHsKICAgICAgICBmYW1pbHk6IGNvbmZpZzIuZmFtaWx5RGVmYXVsdAogICAgICB9KTsKICAgIH0pOwogICAgYnVpbGQoKTsKICAgIGVtcHR5Q2Fub25pY2FsSWNvbiA9IGZ1bmN0aW9uIGVtcHR5Q2Fub25pY2FsSWNvbjIoKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgcHJlZml4OiBudWxsLAogICAgICAgIGljb25OYW1lOiBudWxsLAogICAgICAgIHJlc3Q6IFtdCiAgICAgIH07CiAgICB9OwogICAgX2ZhQ29tYmluZWRDbGFzc2VzID0gbG8uY29uY2F0KEh0KTsKICAgIG5ld0Nhbm9uaWNhbEZhbWlsaWVzID0gZHQyLmZpbHRlcihmdW5jdGlvbihmYW1pbHlJZCkgewogICAgICByZXR1cm4gZmFtaWx5SWQgIT09IGkxMCB8fCBmYW1pbHlJZCAhPT0gdDg7CiAgICB9KTsKICAgIG5ld0Nhbm9uaWNhbFN0eWxlcyA9IE9iamVjdC5rZXlzKFhsKS5maWx0ZXIoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4ga2V5MiAhPT0gaTEwOwogICAgfSkubWFwKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKFhsW2tleTJdKTsKICAgIH0pLmZsYXQoKTsKICAgIExpYnJhcnkgPSAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBMaWJyYXJ5MigpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlicmFyeTIpOwogICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgICAgfQogICAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKExpYnJhcnkyLCBbewogICAgICAgIGtleTogImFkZCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZDMoKSB7CiAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRlZmluaXRpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgICBkZWZpbml0aW9uc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhZGRpdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLCB7fSk7CiAgICAgICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSB8fCB7fSksIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGRlZmluZUljb25zKGtleTIsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIHZhciBsb25nUHJlZml4ID0gUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXVtrZXkyXTsKICAgICAgICAgICAgaWYgKGxvbmdQcmVmaXgpIGRlZmluZUljb25zKGxvbmdQcmVmaXgsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGJ1aWxkKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJyZXNldCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9OwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogIl9wdWxsRGVmaW5pdGlvbnMiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHVsbERlZmluaXRpb25zKGFkZGl0aW9ucywgZGVmaW5pdGlvbjMpIHsKICAgICAgICAgIHZhciBub3JtYWxpemVkID0gZGVmaW5pdGlvbjMucHJlZml4ICYmIGRlZmluaXRpb24zLmljb25OYW1lICYmIGRlZmluaXRpb24zLmljb24gPyB7CiAgICAgICAgICAgIDA6IGRlZmluaXRpb24zCiAgICAgICAgICB9IDogZGVmaW5pdGlvbjM7CiAgICAgICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5tYXAoZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICB2YXIgX25vcm1hbGl6ZWQka2V5ID0gbm9ybWFsaXplZFtrZXkyXSwgcHJlZml4NCA9IF9ub3JtYWxpemVkJGtleS5wcmVmaXgsIGljb25OYW1lID0gX25vcm1hbGl6ZWQka2V5Lmljb25OYW1lLCBpY29uMyA9IF9ub3JtYWxpemVkJGtleS5pY29uOwogICAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdOwogICAgICAgICAgICBpZiAoIWFkZGl0aW9uc1twcmVmaXg0XSkgYWRkaXRpb25zW3ByZWZpeDRdID0ge307CiAgICAgICAgICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXg0XVthbGlhc10gPSBpY29uMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZGRpdGlvbnNbcHJlZml4NF1baWNvbk5hbWVdID0gaWNvbjM7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBhZGRpdGlvbnM7CiAgICAgICAgfQogICAgICB9XSk7CiAgICB9KSgpOwogICAgX3BsdWdpbnMgPSBbXTsKICAgIF9ob29rcyA9IHt9OwogICAgcHJvdmlkZXJzID0ge307CiAgICBkZWZhdWx0UHJvdmlkZXJLZXlzID0gT2JqZWN0LmtleXMocHJvdmlkZXJzKTsKICAgIGxpYnJhcnkgPSBuZXcgTGlicmFyeSgpOwogICAgbm9BdXRvID0gZnVuY3Rpb24gbm9BdXRvMigpIHsKICAgICAgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9IGZhbHNlOwogICAgICBjb25maWcyLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTsKICAgICAgY2FsbEhvb2tzKCJub0F1dG8iKTsKICAgIH07CiAgICBkb20gPSB7CiAgICAgIGkyc3ZnOiBmdW5jdGlvbiBpMnN2ZygpIHsKICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgaWYgKElTX0RPTSkgewogICAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVJMnN2ZyIsIHBhcmFtczIpOwogICAgICAgICAgY2FsbFByb3ZpZGVkKCJwc2V1ZG9FbGVtZW50czJzdmciLCBwYXJhbXMyKTsKICAgICAgICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImkyc3ZnIiwgcGFyYW1zMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk9wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuIikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKCkgewogICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgICB2YXIgYXV0b1JlcGxhY2VTdmdSb290ID0gcGFyYW1zMi5hdXRvUmVwbGFjZVN2Z1Jvb3Q7CiAgICAgICAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IGZhbHNlKSB7CiAgICAgICAgICBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgY29uZmlnMi5vYnNlcnZlTXV0YXRpb25zID0gdHJ1ZTsKICAgICAgICBkb21yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgIGF1dG9SZXBsYWNlKHsKICAgICAgICAgICAgYXV0b1JlcGxhY2VTdmdSb290CiAgICAgICAgICB9KTsKICAgICAgICAgIGNhbGxIb29rcygid2F0Y2giLCBwYXJhbXMyKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHBhcnNlOSA9IHsKICAgICAgaWNvbjogZnVuY3Rpb24gaWNvbihfaWNvbikgewogICAgICAgIGlmIChfaWNvbiA9PT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChfdHlwZW9mKF9pY29uKSA9PT0gIm9iamVjdCIgJiYgX2ljb24ucHJlZml4ICYmIF9pY29uLmljb25OYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9pY29uLnByZWZpeCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMoX2ljb24ucHJlZml4LCBfaWNvbi5pY29uTmFtZSkgfHwgX2ljb24uaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9pY29uKSAmJiBfaWNvbi5sZW5ndGggPT09IDIpIHsKICAgICAgICAgIHZhciBpY29uTmFtZSA9IF9pY29uWzFdLmluZGV4T2YoImZhLSIpID09PSAwID8gX2ljb25bMV0uc2xpY2UoMykgOiBfaWNvblsxXTsKICAgICAgICAgIHZhciBwcmVmaXg0ID0gZ2V0Q2Fub25pY2FsUHJlZml4KF9pY29uWzBdKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIiAmJiAoX2ljb24uaW5kZXhPZigiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikpID4gLTEgfHwgX2ljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkgewogICAgICAgICAgdmFyIGNhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKF9pY29uLnNwbGl0KCIgIiksIHsKICAgICAgICAgICAgc2tpcExvb2t1cHM6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBjYW5vbmljYWxJY29uLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCksCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKGNhbm9uaWNhbEljb24ucHJlZml4LCBjYW5vbmljYWxJY29uLmljb25OYW1lKSB8fCBjYW5vbmljYWxJY29uLmljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFyIF9wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9wcmVmaXgsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKF9wcmVmaXgsIF9pY29uKSB8fCBfaWNvbgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBhcGkgPSB7CiAgICAgIG5vQXV0bywKICAgICAgY29uZmlnOiBjb25maWcyLAogICAgICBkb20sCiAgICAgIHBhcnNlOiBwYXJzZTksCiAgICAgIGxpYnJhcnksCiAgICAgIGZpbmRJY29uRGVmaW5pdGlvbiwKICAgICAgdG9IdG1sOiB0b0h0bWwyCiAgICB9OwogICAgYXV0b1JlcGxhY2UgPSBmdW5jdGlvbiBhdXRvUmVwbGFjZTIoKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkYXV0b1JlcGxhY2VTdiA9IHBhcmFtczIuYXV0b1JlcGxhY2VTdmdSb290LCBhdXRvUmVwbGFjZVN2Z1Jvb3QgPSBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRhdXRvUmVwbGFjZVN2OwogICAgICBpZiAoKE9iamVjdC5rZXlzKG5hbWVzcGFjZS5zdHlsZXMpLmxlbmd0aCA+IDAgfHwgY29uZmlnMi5hdXRvRmV0Y2hTdmcpICYmIElTX0RPTSAmJiBjb25maWcyLmF1dG9SZXBsYWNlU3ZnKSBhcGkuZG9tLmkyc3ZnKHsKICAgICAgICBub2RlOiBhdXRvUmVwbGFjZVN2Z1Jvb3QKICAgICAgfSk7CiAgICB9OwogICAgc3R5bGVzJDEgPSBuYW1lc3BhY2Uuc3R5bGVzOwogICAgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7CiAgICAgIGZvdW5kOiBmYWxzZSwKICAgICAgd2lkdGg6IDUxMiwKICAgICAgaGVpZ2h0OiA1MTIKICAgIH07CiAgICBub29wJDEgPSBmdW5jdGlvbiBub29wNCgpIHsKICAgIH07CiAgICBwJDIgPSBjb25maWcyLm1lYXN1cmVQZXJmb3JtYW5jZSAmJiBQRVJGT1JNQU5DRSAmJiBQRVJGT1JNQU5DRS5tYXJrICYmIFBFUkZPUk1BTkNFLm1lYXN1cmUgPyBQRVJGT1JNQU5DRSA6IHsKICAgICAgbWFyazogbm9vcCQxLAogICAgICBtZWFzdXJlOiBub29wJDEKICAgIH07CiAgICBwcmVhbWJsZSA9ICdGQSAiNy4yLjAiJzsKICAgIGJlZ2luID0gZnVuY3Rpb24gYmVnaW4yKG5hbWUpIHsKICAgICAgcCQyLm1hcmsoIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lLCAiIGJlZ2lucyIpKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBlbmQobmFtZSk7CiAgICAgIH07CiAgICB9OwogICAgZW5kID0gZnVuY3Rpb24gZW5kMihuYW1lKSB7CiAgICAgIHAkMi5tYXJrKCIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgICBwJDIubWVhc3VyZSgiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUpLCAiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgYmVnaW5zIiksICIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgfTsKICAgIHBlcmYgPSB7CiAgICAgIGJlZ2luLAogICAgICBlbmQKICAgIH07CiAgICBub29wJDIgPSBmdW5jdGlvbiBub29wNSgpIHsKICAgIH07CiAgICBtdXRhdG9ycyA9IHsKICAgICAgcmVwbGFjZTogZnVuY3Rpb24gcmVwbGFjZTMobXV0YXRpb24pIHsKICAgICAgICB2YXIgbm9kZTIgPSBtdXRhdGlvblswXTsKICAgICAgICBpZiAobm9kZTIucGFyZW50Tm9kZSkgewogICAgICAgICAgbXV0YXRpb25bMV0uZm9yRWFjaChmdW5jdGlvbihhYnN0cmFjdCkgewogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb252ZXJ0U1ZHKGFic3RyYWN0KSwgbm9kZTIpOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZzIua2VlcE9yaWdpbmFsU291cmNlKSB7CiAgICAgICAgICAgIHZhciBjb21tZW50MyA9IERPQ1VNRU5ULmNyZWF0ZUNvbW1lbnQobm9kZUFzQ29tbWVudChub2RlMikpOwogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb21tZW50Mywgbm9kZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIucmVtb3ZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBuZXN0OiBmdW5jdGlvbiBuZXN0KG11dGF0aW9uKSB7CiAgICAgICAgdmFyIG5vZGUyID0gbXV0YXRpb25bMF07CiAgICAgICAgdmFyIGFic3RyYWN0ID0gbXV0YXRpb25bMV07CiAgICAgICAgaWYgKH5jbGFzc0FycmF5KG5vZGUyKS5pbmRleE9mKGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzcykpIHsKICAgICAgICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlKG11dGF0aW9uKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZvclN2ZyA9IG5ldyBSZWdFeHAoIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLS4qIikpOwogICAgICAgIGRlbGV0ZSBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmlkOwogICAgICAgIGlmIChhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzKSB7CiAgICAgICAgICB2YXIgc3BsaXRDbGFzc2VzID0gYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihhY2MsIGNscykgewogICAgICAgICAgICBpZiAoY2xzID09PSBjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MgfHwgY2xzLm1hdGNoKGZvclN2ZykpIHsKICAgICAgICAgICAgICBhY2MudG9TdmcucHVzaChjbHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFjYy50b05vZGUucHVzaChjbHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHRvTm9kZTogW10sCiAgICAgICAgICAgIHRvU3ZnOiBbXQogICAgICAgICAgfSk7CiAgICAgICAgICBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzID0gc3BsaXRDbGFzc2VzLnRvU3ZnLmpvaW4oIiAiKTsKICAgICAgICAgIGlmIChzcGxpdENsYXNzZXMudG9Ob2RlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBub2RlMi5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgc3BsaXRDbGFzc2VzLnRvTm9kZS5qb2luKCIgIikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbmV3SW5uZXJIVE1MID0gYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICByZXR1cm4gdG9IdG1sMihhNSk7CiAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoREFUQV9GQV9JMlNWRywgIiIpOwogICAgICAgIG5vZGUyLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDsKICAgICAgfQogICAgfTsKICAgIGRpc2FibGVkID0gZmFsc2U7CiAgICBtbyA9IG51bGw7CiAgICBzdHlsZXMkMiA9IG5hbWVzcGFjZS5zdHlsZXM7CiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIyKGljb25EZWZpbml0aW9uKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkdHJhbnNmb3JtID0gcGFyYW1zMi50cmFuc2Zvcm0sIHRyYW5zZm9ybTIgPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSwgX3BhcmFtcyRzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgc3ltYm9sID0gX3BhcmFtcyRzeW1ib2wgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRzeW1ib2wsIF9wYXJhbXMkbWFzayA9IHBhcmFtczIubWFzaywgbWFzayA9IF9wYXJhbXMkbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkbWFzaywgX3BhcmFtcyRtYXNrSWQgPSBwYXJhbXMyLm1hc2tJZCwgbWFza0lkID0gX3BhcmFtcyRtYXNrSWQgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJG1hc2tJZCwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICBpZiAoIWljb25EZWZpbml0aW9uKSByZXR1cm47CiAgICAgIHZhciBwcmVmaXg0ID0gaWNvbkRlZmluaXRpb24ucHJlZml4LCBpY29uTmFtZSA9IGljb25EZWZpbml0aW9uLmljb25OYW1lLCBpY29uMyA9IGljb25EZWZpbml0aW9uLmljb247CiAgICAgIHJldHVybiBkb21WYXJpYW50cyhfb2JqZWN0U3ByZWFkMih7CiAgICAgICAgdHlwZTogImljb24iCiAgICAgIH0sIGljb25EZWZpbml0aW9uKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7CiAgICAgICAgICBpY29uRGVmaW5pdGlvbiwKICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgIH0pOwogICAgICAgIHJldHVybiBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgbWFpbjogYXNGb3VuZEljb24oaWNvbjMpLAogICAgICAgICAgICBtYXNrOiBtYXNrID8gYXNGb3VuZEljb24obWFzay5pY29uKSA6IHsKICAgICAgICAgICAgICBmb3VuZDogZmFsc2UsCiAgICAgICAgICAgICAgd2lkdGg6IG51bGwsCiAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLAogICAgICAgICAgICAgIGljb246IHt9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICBzeW1ib2wsCiAgICAgICAgICBtYXNrSWQsCiAgICAgICAgICBleHRyYTogewogICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgIGNsYXNzZXMKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgUmVwbGFjZUVsZW1lbnRzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDIoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGljb246IHJlc29sdmVJY29ucyhyZW5kZXIpCiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzMigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikgewogICAgICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGUsIF9wYXJhbXMkY2FsbGJhY2sgPSBwYXJhbXMyLmNhbGxiYWNrLCBjYWxsYmFjayA9IF9wYXJhbXMkY2FsbGJhY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgfSA6IF9wYXJhbXMkY2FsbGJhY2s7CiAgICAgICAgICByZXR1cm4gb25UcmVlKG5vZGUyLCBjYWxsYmFjayk7CiAgICAgICAgfTsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgaWNvbk5hbWUgPSBub2RlTWV0YS5pY29uTmFtZSwgcHJlZml4NCA9IG5vZGVNZXRhLnByZWZpeCwgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgc3ltYm9sID0gbm9kZU1ldGEuc3ltYm9sLCBtYXNrID0gbm9kZU1ldGEubWFzaywgbWFza0lkID0gbm9kZU1ldGEubWFza0lkLCBleHRyYSA9IG5vZGVNZXRhLmV4dHJhOwogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KSwgbWFzay5pY29uTmFtZSA/IGZpbmRJY29uKG1hc2suaWNvbk5hbWUsIG1hc2sucHJlZml4KSA6IFByb21pc2UucmVzb2x2ZSh7CiAgICAgICAgICAgICAgZm91bmQ6IGZhbHNlLAogICAgICAgICAgICAgIHdpZHRoOiA1MTIsCiAgICAgICAgICAgICAgaGVpZ2h0OiA1MTIsCiAgICAgICAgICAgICAgaWNvbjoge30KICAgICAgICAgICAgfSldKS50aGVuKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgbWFpbiA9IF9yZWYyMlswXSwgbWFzazIgPSBfcmVmMjJbMV07CiAgICAgICAgICAgICAgcmVzb2x2ZTIoW25vZGUyLCBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICAgICAgbWFzazogbWFzazIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgICAgICAgICAgIHN5bWJvbCwKICAgICAgICAgICAgICAgIG1hc2tJZCwKICAgICAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICAgICAgfSldKTsKICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlQWJzdHJhY3RJY29uID0gZnVuY3Rpb24oX3JlZjMpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMy5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYzLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMy5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjMudHJhbnNmb3JtLCBzdHlsZXMzID0gX3JlZjMuc3R5bGVzOwogICAgICAgICAgdmFyIHN0eWxlU3RyaW5nID0gam9pblN0eWxlcyhzdHlsZXMzKTsKICAgICAgICAgIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBuZXh0Q2hpbGQ7CiAgICAgICAgICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpKSB7CiAgICAgICAgICAgIG5leHRDaGlsZCA9IGNhbGxQcm92aWRlZCgiZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nIiwgewogICAgICAgICAgICAgIG1haW4sCiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLAogICAgICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNoaWxkcmVuMi5wdXNoKG5leHRDaGlsZCB8fCBtYWluLmljb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMiwKICAgICAgICAgICAgYXR0cmlidXRlcwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgTGF5ZXJzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGxheWVyOiBmdW5jdGlvbiBsYXllcjIoYXNzZW1ibGVyKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtczIuY2xhc3NlcywgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImxheWVyIgogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGFzc2VtYmxlciwKICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBbXTsKICAgICAgICAgICAgICBhc3NlbWJsZXIoZnVuY3Rpb24oYXJncykgewogICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuMiA9IGNoaWxkcmVuMi5jb25jYXQoYTUuYWJzdHJhY3QpOwogICAgICAgICAgICAgICAgfSkgOiBjaGlsZHJlbjIgPSBjaGlsZHJlbjIuY29uY2F0KGFyZ3MuYWJzdHJhY3QpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdGFnOiAic3BhbiIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycyIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzZXMpKS5qb2luKCIgIikKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4yCiAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBMYXllcnNDb3VudGVyID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNvdW50ZXI6IGZ1bmN0aW9uIGNvdW50ZXIyKGNvbnRlbnQzKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkdGl0bGUgPSBwYXJhbXMyLnRpdGxlLCB0aXRsZSA9IF9wYXJhbXMkdGl0bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJHRpdGxlLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImNvdW50ZXIiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50My50b1N0cmluZygpLAogICAgICAgICAgICAgICAgdGl0bGUsCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLWNvdW50ZXIiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIExheWVyc1RleHQgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdGV4dDogZnVuY3Rpb24gdGV4dDkoY29udGVudDMpIHsKICAgICAgICAgICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgICAgICAgICB2YXIgX3BhcmFtcyR0cmFuc2Zvcm0gPSBwYXJhbXMyLnRyYW5zZm9ybSwgdHJhbnNmb3JtMiA9IF9wYXJhbXMkdHJhbnNmb3JtID09PSB2b2lkIDAgPyBtZWFuaW5nbGVzc1RyYW5zZm9ybSA6IF9wYXJhbXMkdHJhbnNmb3JtLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLXRleHQiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMihwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgZXh0cmEgPSBub2RlTWV0YS5leHRyYTsKICAgICAgICAgIHZhciB3aWR0aCA9IG51bGw7CiAgICAgICAgICB2YXIgaGVpZ2h0ID0gbnVsbDsKICAgICAgICAgIGlmIChJU19JRSkgewogICAgICAgICAgICB2YXIgY29tcHV0ZWRGb250U2l6ZSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobm9kZTIpLmZvbnRTaXplLCAxMCk7CiAgICAgICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgd2lkdGggPSBib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggLyBjb21wdXRlZEZvbnRTaXplOwogICAgICAgICAgICBoZWlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC8gY29tcHV0ZWRGb250U2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW25vZGUyLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHsKICAgICAgICAgICAgY29udGVudDogbm9kZTIuaW5uZXJIVE1MLAogICAgICAgICAgICB3aWR0aCwKICAgICAgICAgICAgaGVpZ2h0LAogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICB3YXRjaGFibGU6IHRydWUKICAgICAgICAgIH0pXSk7CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIENMRUFOX0NPTlRFTlRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoJyInLCAidWciKTsKICAgIFNFQ09OREFSWV9VTklDT0RFX1JBTkdFID0gWzExMDU5MjAsIDExMTIzMTldOwogICAgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgewogICAgICBGb250QXdlc29tZTogewogICAgICAgIG5vcm1hbDogImZhcyIsCiAgICAgICAgNDAwOiAiZmFzIgogICAgICB9CiAgICB9KSwgS3QpLCBmbyksIGhsKTsKICAgIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBPYmplY3Qua2V5cyhfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywga2V5MikgewogICAgICBhY2Nba2V5Mi50b0xvd2VyQ2FzZSgpXSA9IF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2tleTJdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLID0gT2JqZWN0LmtleXMoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywgZm9udEZhbWlseSkgewogICAgICB2YXIgd2VpZ2h0cyA9IEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVhbZm9udEZhbWlseV07CiAgICAgIGFjY1tmb250RmFtaWx5XSA9IHdlaWdodHNbOTAwXSB8fCBfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmVudHJpZXMod2VpZ2h0cykpWzBdWzFdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgaGFzUHNldWRvRWxlbWVudCA9IGZ1bmN0aW9uIGhhc1BzZXVkb0VsZW1lbnQyKHNlbGVjdG9yKSB7CiAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmIFBTRVVET19FTEVNRU5UUy5zb21lKGZ1bmN0aW9uKHBzZXVkb1NlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmluY2x1ZGVzKHBzZXVkb1NlbGVjdG9yKTsKICAgICAgfSk7CiAgICB9OwogICAgcGFyc2VDU1NSdWxlRm9yUHNldWRvcyA9IGZ1bmN0aW9uIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MyKHNlbGVjdG9yVGV4dCkgewogICAgICBpZiAoIXNlbGVjdG9yVGV4dCkgcmV0dXJuIFtdOwogICAgICB2YXIgc2VsZWN0b3JTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB2YXIgc2VsZWN0b3JzID0gc2VsZWN0b3JUZXh0LnNwbGl0KC8sKD8hW14oKV0qXCkpLykubWFwKGZ1bmN0aW9uKHMkJDEpIHsKICAgICAgICByZXR1cm4gcyQkMS50cmltKCk7CiAgICAgIH0pOwogICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMuZmxhdE1hcChmdW5jdGlvbihzZWxlY3RvcjIpIHsKICAgICAgICByZXR1cm4gc2VsZWN0b3IyLmluY2x1ZGVzKCIoIikgPyBzZWxlY3RvcjIgOiBzZWxlY3RvcjIuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocyQkMSkgewogICAgICAgICAgcmV0dXJuIHMkJDEudHJpbSgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHNlbGVjdG9ycyksIF9zdGVwOwogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7ICkgewogICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICBpZiAoaGFzUHNldWRvRWxlbWVudChzZWxlY3RvcikpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdG9yV2l0aG91dFBzZXVkbyA9IFBTRVVET19FTEVNRU5UUy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBwc2V1ZG9TZWxlY3RvcikgewogICAgICAgICAgICAgIHJldHVybiBhY2MucmVwbGFjZShwc2V1ZG9TZWxlY3RvciwgIiIpOwogICAgICAgICAgICB9LCBzZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChzZWxlY3RvcldpdGhvdXRQc2V1ZG8gIT09ICIiICYmIHNlbGVjdG9yV2l0aG91dFBzZXVkbyAhPT0gIioiKSB7CiAgICAgICAgICAgICAgc2VsZWN0b3JTZXQuYWRkKHNlbGVjdG9yV2l0aG91dFBzZXVkbyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgfQogICAgICByZXR1cm4gc2VsZWN0b3JTZXQ7CiAgICB9OwogICAgUHNldWRvRWxlbWVudHMgPSB7CiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6IGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MoYWNjdW11bGF0b3IpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IucHNldWRvRWxlbWVudHNDYWxsYmFjayA9IHNlYXJjaFBzZXVkb0VsZW1lbnRzOwogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMyhwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5wc2V1ZG9FbGVtZW50czJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGU7CiAgICAgICAgICBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50cyhub2RlMik7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIF91bndhdGNoZWQgPSBmYWxzZTsKICAgIE11dGF0aW9uT2JzZXJ2ZXIkMSA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkb206IHsKICAgICAgICAgICAgdW53YXRjaDogZnVuY3Rpb24gdW53YXRjaCgpIHsKICAgICAgICAgICAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgICAgICAgICBfdW53YXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKCkgewogICAgICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLCB7fSkpOwogICAgICAgICAgfSwKICAgICAgICAgIG5vQXV0bzogZnVuY3Rpb24gbm9BdXRvMygpIHsKICAgICAgICAgICAgZGlzY29ubmVjdCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHdhdGNoOiBmdW5jdGlvbiB3YXRjaDIocGFyYW1zMikgewogICAgICAgICAgICB2YXIgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBwYXJhbXMyLm9ic2VydmVNdXRhdGlvbnNSb290OwogICAgICAgICAgICBpZiAoX3Vud2F0Y2hlZCkgewogICAgICAgICAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2JzZXJ2ZShjaGFpbkhvb2tzKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIiwgewogICAgICAgICAgICAgICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgcGFyc2VUcmFuc2Zvcm1TdHJpbmcgPSBmdW5jdGlvbiBwYXJzZVRyYW5zZm9ybVN0cmluZzIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgIHZhciB0cmFuc2Zvcm0yID0gewogICAgICAgIHNpemU6IDE2LAogICAgICAgIHg6IDAsCiAgICAgICAgeTogMCwKICAgICAgICBmbGlwWDogZmFsc2UsCiAgICAgICAgZmxpcFk6IGZhbHNlLAogICAgICAgIHJvdGF0ZTogMAogICAgICB9OwogICAgICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBuMTIpIHsKICAgICAgICB2YXIgcGFydHMgPSBuMTIudG9Mb3dlckNhc2UoKS5zcGxpdCgiLSIpOwogICAgICAgIHZhciBmaXJzdDIgPSBwYXJ0c1swXTsKICAgICAgICB2YXIgcmVzdCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi0iKTsKICAgICAgICBpZiAoZmlyc3QyICYmIHJlc3QgPT09ICJoIikgewogICAgICAgICAgYWNjLmZsaXBYID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgfQogICAgICAgIGlmIChmaXJzdDIgJiYgcmVzdCA9PT0gInYiKSB7CiAgICAgICAgICBhY2MuZmxpcFkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICB9CiAgICAgICAgcmVzdCA9IHBhcnNlRmxvYXQocmVzdCk7CiAgICAgICAgaWYgKGlzTmFOKHJlc3QpKSB7CiAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGZpcnN0MikgewogICAgICAgICAgY2FzZSAiZ3JvdyI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInNocmluayI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgLSByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImxlZnQiOgogICAgICAgICAgICBhY2MueCA9IGFjYy54IC0gcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgICAgIGFjYy54ID0gYWNjLnggKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVwIjoKICAgICAgICAgICAgYWNjLnkgPSBhY2MueSAtIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiZG93biI6CiAgICAgICAgICAgIGFjYy55ID0gYWNjLnkgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInJvdGF0ZSI6CiAgICAgICAgICAgIGFjYy5yb3RhdGUgPSBhY2Mucm90YXRlICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHRyYW5zZm9ybTIpOwogICAgfTsKICAgIFBvd2VyVHJhbnNmb3JtcyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZTogewogICAgICAgICAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybTIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3M1KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyaW5nID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLXRyYW5zZm9ybSIpOwogICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgYWNjdW11bGF0b3IudHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHJhbnNmb3JtU3RyaW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNChwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5nZW5lcmF0ZUFic3RyYWN0VHJhbnNmb3JtR3JvdXBpbmcgPSBmdW5jdGlvbihfcmVmMikgewogICAgICAgICAgdmFyIG1haW4gPSBfcmVmMi5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgICAgICAgICB2YXIgb3V0ZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIDIsICIgMjU2KSIpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGlubmVyVHJhbnNsYXRlID0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggKiAzMiwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAqIDMyLCAiKSAiKTsKICAgICAgICAgIHZhciBpbm5lclNjYWxlID0gInNjYWxlKCIuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFggPyAtMSA6IDEpLCAiLCAiKS5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogICAgICAgICAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgICAgICAgICB2YXIgaW5uZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogIiIuY29uY2F0KGlubmVyVHJhbnNsYXRlLCAiICIpLmNvbmNhdChpbm5lclNjYWxlLCAiICIpLmNvbmNhdChpbm5lclJvdGF0ZSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgcGF0aDIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChpY29uV2lkdGggLyAyICogLTEsICIgLTI1NikiKQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBvcGVyYXRpb25zID0gewogICAgICAgICAgICBvdXRlciwKICAgICAgICAgICAgaW5uZXIsCiAgICAgICAgICAgIHBhdGg6IHBhdGgyCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIG9wZXJhdGlvbnMuaW5uZXIpLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiBtYWluLmljb24udGFnLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IG1haW4uaWNvbi5jaGlsZHJlbiwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluLmljb24uYXR0cmlidXRlcyksIG9wZXJhdGlvbnMucGF0aCkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9XQogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgQUxMX1NQQUNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB3aWR0aDogIjEwMCUiLAogICAgICBoZWlnaHQ6ICIxMDAlIgogICAgfTsKICAgIE1hc2tzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgbWFza0RhdGEgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzayIpOwogICAgICAgICAgICB2YXIgbWFzayA9ICFtYXNrRGF0YSA/IGVtcHR5Q2Fub25pY2FsSWNvbigpIDogZ2V0Q2Fub25pY2FsSWNvbihtYXNrRGF0YS5zcGxpdCgiICIpLm1hcChmdW5jdGlvbihpMTEpIHsKICAgICAgICAgICAgICByZXR1cm4gaTExLnRyaW0oKTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBpZiAoIW1hc2sucHJlZml4KSB7CiAgICAgICAgICAgICAgbWFzay5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWNjdW11bGF0b3IubWFzayA9IG1hc2s7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm1hc2tJZCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1tYXNrLWlkIik7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM1KHByb3ZpZGVyczIpIHsKICAgICAgICBwcm92aWRlcnMyLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMi5tYWluLCBtYXNrID0gX3JlZjIubWFzaywgZXhwbGljaXRNYXNrSWQgPSBfcmVmMi5tYXNrSWQsIHRyYW5zZm9ybTIgPSBfcmVmMi50cmFuc2Zvcm07CiAgICAgICAgICB2YXIgbWFpbldpZHRoID0gbWFpbi53aWR0aCwgbWFpblBhdGggPSBtYWluLmljb247CiAgICAgICAgICB2YXIgbWFza1dpZHRoID0gbWFzay53aWR0aCwgbWFza1BhdGggPSBtYXNrLmljb247CiAgICAgICAgICB2YXIgdHJhbnMgPSB0cmFuc2Zvcm1Gb3JTdmcoewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYXNrV2lkdGgsCiAgICAgICAgICAgIGljb25XaWR0aDogbWFpbldpZHRoCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBtYXNrUmVjdCA9IHsKICAgICAgICAgICAgdGFnOiAicmVjdCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTExfU1BBQ0UpLCB7fSwgewogICAgICAgICAgICAgIGZpbGw6ICJ3aGl0ZSIKICAgICAgICAgICAgfSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluID0gbWFpblBhdGguY2hpbGRyZW4gPyB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluUGF0aC5jaGlsZHJlbi5tYXAoZmlsbEJsYWNrKQogICAgICAgICAgfSA6IHt9OwogICAgICAgICAgdmFyIG1hc2tJbm5lckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLmlubmVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFtmaWxsQmxhY2soX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgIHRhZzogbWFpblBhdGgudGFnLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluUGF0aC5hdHRyaWJ1dGVzKSwgdHJhbnMucGF0aCkKICAgICAgICAgICAgfSwgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluKSldCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tPdXRlckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrSW5uZXJHcm91cF0KICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lkID0gIm1hc2stIi5jb25jYXQoZXhwbGljaXRNYXNrSWQgfHwgbmV4dFVuaXF1ZUlkKCkpOwogICAgICAgICAgdmFyIGNsaXBJZCA9ICJjbGlwLSIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTsKICAgICAgICAgIHZhciBtYXNrVGFnID0gewogICAgICAgICAgICB0YWc6ICJtYXNrIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7CiAgICAgICAgICAgICAgaWQ6IG1hc2tJZCwKICAgICAgICAgICAgICBtYXNrVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIsCiAgICAgICAgICAgICAgbWFza0NvbnRlbnRVbml0czogInVzZXJTcGFjZU9uVXNlIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrUmVjdCwgbWFza091dGVyR3JvdXBdCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGRlZnMgPSB7CiAgICAgICAgICAgIHRhZzogImRlZnMiLAogICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICB0YWc6ICJjbGlwUGF0aCIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgaWQ6IGNsaXBJZAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgY2hpbGRyZW46IGRlR3JvdXAobWFza1BhdGgpCiAgICAgICAgICAgIH0sIG1hc2tUYWddCiAgICAgICAgICB9OwogICAgICAgICAgY2hpbGRyZW4yLnB1c2goZGVmcywgewogICAgICAgICAgICB0YWc6ICJyZWN0IiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgICJmaWxsIjogImN1cnJlbnRDb2xvciIsCiAgICAgICAgICAgICAgImNsaXAtcGF0aCI6ICJ1cmwoIyIuY29uY2F0KGNsaXBJZCwgIikiKSwKICAgICAgICAgICAgICAibWFzayI6ICJ1cmwoIyIuY29uY2F0KG1hc2tJZCwgIikiKQogICAgICAgICAgICB9LCBBTExfU1BBQ0UpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIE1pc3NpbmdJY29uSW5kaWNhdG9yID0gewogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM2KHByb3ZpZGVyczIpIHsKICAgICAgICB2YXIgcmVkdWNlTW90aW9uID0gZmFsc2U7CiAgICAgICAgaWYgKFdJTkRPVy5tYXRjaE1lZGlhKSB7CiAgICAgICAgICByZWR1Y2VNb3Rpb24gPSBXSU5ET1cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzOwogICAgICAgIH0KICAgICAgICBwcm92aWRlcnMyLm1pc3NpbmdJY29uQWJzdHJhY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBnQ2hpbGRyZW4gPSBbXTsKICAgICAgICAgIHZhciBGSUxMID0gewogICAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIgogICAgICAgICAgfTsKICAgICAgICAgIHZhciBBTklNQVRJT05fQkFTRSA9IHsKICAgICAgICAgICAgYXR0cmlidXRlVHlwZTogIlhNTCIsCiAgICAgICAgICAgIHJlcGVhdENvdW50OiAiaW5kZWZpbml0ZSIsCiAgICAgICAgICAgIGR1cjogIjJzIgogICAgICAgICAgfTsKICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICBkOiAiTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40eiIKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIE9QQUNJVFlfQU5JTUFURSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTklNQVRJT05fQkFTRSksIHt9LCB7CiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJvcGFjaXR5IgogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgZG90ID0gewogICAgICAgICAgICB0YWc6ICJjaXJjbGUiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgY3g6ICIyNTYiLAogICAgICAgICAgICAgIGN5OiAiMzY0IiwKICAgICAgICAgICAgICByOiAiMjgiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjaGlsZHJlbjogW10KICAgICAgICAgIH07CiAgICAgICAgICBpZiAoIXJlZHVjZU1vdGlvbikgewogICAgICAgICAgICBkb3QuY2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFOSU1BVElPTl9CQVNFKSwge30sIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJyIiwKICAgICAgICAgICAgICAgIHZhbHVlczogIjI4OzE0OzI4OzI4OzE0OzI4OyIKICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MTsxOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBnQ2hpbGRyZW4ucHVzaChkb3QpOwogICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwgewogICAgICAgICAgICAgIG9wYWNpdHk6ICIxIiwKICAgICAgICAgICAgICBkOiAiTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyeiIKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNoaWxkcmVuOiByZWR1Y2VNb3Rpb24gPyBbXSA6IFt7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MDswOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfV0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHsKICAgICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgIHRhZzogInBhdGgiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6ICIwIiwKICAgICAgICAgICAgICAgIGQ6ICJNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6IgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHsKICAgICAgICAgICAgICAgICAgdmFsdWVzOiAiMDswOzE7MTswOzA7IgogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgY2xhc3M6ICJtaXNzaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGlsZHJlbjogZ0NoaWxkcmVuCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBTdmdTeW1ib2xzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgc3ltYm9sRGF0YSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1zeW1ib2wiKTsKICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbERhdGEgPT09IG51bGwgPyBmYWxzZSA6IHN5bWJvbERhdGEgPT09ICIiID8gdHJ1ZSA6IHN5bWJvbERhdGE7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yWyJzeW1ib2wiXSA9IHN5bWJvbDsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBwbHVnaW5zID0gW0luamVjdENTUywgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIFBzZXVkb0VsZW1lbnRzLCBNdXRhdGlvbk9ic2VydmVyJDEsIFBvd2VyVHJhbnNmb3JtcywgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzXTsKICAgIHJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5zLCB7CiAgICAgIG1peG91dHNUbzogYXBpCiAgICB9KTsKICAgIG5vQXV0byQxID0gYXBpLm5vQXV0bzsKICAgIGNvbmZpZyQxID0gYXBpLmNvbmZpZzsKICAgIGxpYnJhcnkkMSA9IGFwaS5saWJyYXJ5OwogICAgZG9tJDEgPSBhcGkuZG9tOwogICAgcGFyc2UkMSA9IGFwaS5wYXJzZTsKICAgIGZpbmRJY29uRGVmaW5pdGlvbiQxID0gYXBpLmZpbmRJY29uRGVmaW5pdGlvbjsKICAgIHRvSHRtbCQxID0gYXBpLnRvSHRtbDsKICAgIGljb24yID0gYXBpLmljb247CiAgICBsYXllciA9IGFwaS5sYXllcjsKICAgIHRleHQ4ID0gYXBpLnRleHQ7CiAgICBjb3VudGVyID0gYXBpLmNvdW50ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1icmFuZHMtc3ZnLWljb25zQDcuMi4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1icmFuZHMtc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4LCBmYVNxdWFyZUdpdGh1YiwgZmFHaXRodWJTcXVhcmUsIGZhVGhpbmtQZWFrcywgZmFHb29nbGVEcml2ZSwgZmFBdXRvcHJlZml4ZXIsIGZhU3F1YXJlVmlhZGVvLCBmYVZpYWRlb1NxdWFyZSwgZmFDcGFuZWwsIGZhTWVuZGVsZXksIGZhRHJhZnQyZGlnaXRhbCwgZmFSZXBseWQsIGZhRW1waXJlLCBmYUFjY2Vzc2libGVJY29uLCBmYVF1b3JhLCBmYUNjSmNiLCBmYUZlZG9yYSwgZmFEdW9saW5nbywgZmFGaXJzdGRyYWZ0LCBmYUZyZWVic2QsIGZhT2R5c2VlLCBmYUdnQ2lyY2xlLCBmYUNsb3VkZmxhcmUsIGZhSGFja2VycmFuaywgZmFTa3lhdGxhcywgZmFEZXNrcHJvLCBmYVJlc29sdmluZywgZmFCbGFja2JlcnJ5LCBmYVN0cmlwZVMsIGZhU3F1YXJlQmVoYW5jZSwgZmFCZWhhbmNlU3F1YXJlLCBmYVNlcnZpY2VzdGFjaywgZmFSb2NrZXRjaGF0LCBmYVJlYmVsLCBmYVNxdWFyZVdlYkF3ZXNvbWUsIGZhTGlua3RyZWUsIGZhU2ltcGx5YnVpbHQsIGZhU3R1YmJlciwgZmFBcHBlciwgZmFHb29nbGVTY2hvbGFyLCBmYVlhcm4sIGZhU3RhY2tPdmVyZmxvdywgZmFCbHVldG9vdGgsIGZhQ3JlYXRpdmVDb21tb25zTmNKcCwgZmFSZWRkaXQsIGZhQ29ubmVjdGRldmVsb3AsIGZhUmVzZWFyY2hnYXRlLCBmYVNpZ25hbE1lc3NlbmdlciwgZmFYaW5nLCBmYVNxdWFyZUpzLCBmYUpzU3F1YXJlLCBmYUZvbnRpY29ucywgZmFVcHMsIGZhQW1hem9uUGF5LCBmYVBhbmRvcmEsIGZhT3BlbmlkLCBmYVZzY28sIGZhR2xvYmFsZWFrcywgZmFWZW5tbywgZmFVYnVudHUsIGZhVmlhY29pbiwgZmFaaGlodSwgZmFZYW5kZXgsIGZhUGl4aXYsIGZhT3BlbmFpLCBmYVNpdGgsIGZhSnVsaWEsIGZhTmZjRGlyZWN0aW9uYWwsIGZhQ3JlYXRpdmVDb21tb25zQnksIGZhVW1icmFjbywgZmFIb29saSwgZmFTcXVhcmVHaXQsIGZhR2l0U3F1YXJlLCBmYU9kbm9rbGFzc25pa2ksIGZhRHJ1cGFsLCBmYUJsb2dnZXJCLCBmYUludmlzaW9uLCBmYUZhY2Vib29rRiwgZmFDZW50b3MsIGZhU2NhbGV3YXksIGZhQ2NBbWF6b25QYXksIGZhRWJheSwgZmFDb250YW8sIGZhRWxsbywgZmFTaXN0cml4LCBmYVBlcmlzY29wZSwgZmFFeHBlZGl0ZWRzc2wsIGZhTmFwc3RlciwgZmFEZWxpY2lvdXMsIGZhR3VpbGRlZCwgZmFPYnNpZGlhbiwgZmFYYm94LCBmYVVudGFwcGQsIGZhR29vZ2xlUGx1c0csIGZhR2l0aHViQWx0LCBmYUdldFBvY2tldCwgZmFHbGlkZSwgZmFCaXR5LCBmYVdwZXhwbG9yZXIsIGZhTWVnYXBvcnQsIGZhTGVldGNvZGUsIGZhTWRiLCBmYVBhZ2U0LCBmYVRoZVJlZFlldGksIGZhSmlyYSwgZmFGZWRleCwgZmFFdmVybm90ZSwgZmFVc2IsIGZhQW5ncnljcmVhdGl2ZSwgZmFNaXp1bmksIGZhSXRjaElvLCBmYVdpbmRvd3MsIGZhU3R1bWJsZXVwb24sIGZhR29vZ2xlLCBmYURpc2NvcmQsIGZhSGFja2VyTmV3cywgZmFFbGV2ZW50eSwgZmExMXR5LCBmYVRlYW1zcGVhaywgZmFTdXBwbGUsIGZhU3F1YXJlVHdpdHRlciwgZmFUd2l0dGVyU3F1YXJlLCBmYVZpbSwgZmFGb250QXdlc29tZSwgZmFGb250QXdlc29tZUZsYWcsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCwgZmFXaXJzaW5kaGFuZHdlcmssIGZhV3NoLCBmYVpvb20sIGZhQ29uZmx1ZW5jZSwgZmFEaWdnLCBmYVRocmVhZHMsIGZhV3ByZXNzciwgZmFSZW5kYWN0LCBmYVlvYXN0LCBmYU5pbWJsciwgZmFQaXhlbGZlZCwgZmFZYWhvbywgZmFCbHVlc2t5LCBmYVNjcmliZCwgZmFDcmVhdGl2ZUNvbW1vbnNQZCwgZmFFYXJseWJpcmRzLCBmYVN5bWZvbnljYXN0cywgZmFTcXVhcmVPZG5va2xhc3NuaWtpLCBmYU9kbm9rbGFzc25pa2lTcXVhcmUsIGZhTWFya2Rvd24sIGZhVHlwbzMsIGZhSm9vbWxhLCBmYVdlaXhpbiwgZmFHcnVudCwgZmFTdXBwb3J0bm93LCBmYVJvY2tybXMsIGZhVW5zcGxhc2gsIGZhU3F1YXJlSW5zdGFncmFtLCBmYUluc3RhZ3JhbVNxdWFyZSwgZmFGaXJzdE9yZGVyQWx0LCBmYUZ1bGNydW0sIGZhQXJjaExpbnV4LCBmYUZlZGl2ZXJzZSwgZmFCcmF2ZVJldmVyc2UsIGZhQXZpYW5leCwgZmFOczgsIGZhU3F1YXJlUGludGVyZXN0LCBmYVBpbnRlcmVzdFNxdWFyZSwgZmFCbHVldG9vdGhCLCBmYUdyaXBmaXJlLCBmYVNxdWFyZUdvb2dsZVBsdXMsIGZhR29vZ2xlUGx1c1NxdWFyZSwgZmFHaXRlZSwgZmFYbXBwLCBmYUFwcFN0b3JlLCBmYVdpeCwgZmFJbnRlcmNvbSwgZmFSZWFjdGV1cm9wZSwgZmFXYXplLCBmYUNyZWF0aXZlQ29tbW9uc1JlbWl4LCBmYUJhbmRjYW1wLCBmYVNxdWFyZVdlYkF3ZXNvbWVTdHJva2UsIGZhVmltZW9WLCBmYVN0cmF2YSwgZmFVbmlyZWdpc3RyeSwgZmFDY0RpbmVyc0NsdWIsIGZhS3ViZXJuZXRlcywgZmFQaW50ZXJlc3QsIGZhQWxnb2xpYSwgZmFTdGFja3BhdGgsIGZhT2N0b3B1c0RlcGxveSwgZmFZYW1tZXIsIGZhTW9keCwgZmFTcXVhcmVUaHJlYWRzLCBmYU9sZFJlcHVibGljLCBmYVN1c2UsIGZhQXBwU3RvcmVJb3MsIGZhVWx0cmFseXRpY3NZb2xvLCBmYVNxdWFyZURyaWJiYmxlLCBmYURyaWJiYmxlU3F1YXJlLCBmYVVpa2l0LCBmYVN1cGVycG93ZXJzLCBmYVlvdXR1YmUsIGZhRW1iZXIsIGZhQm9vdHN0cmFwLCBmYUl0dW5lcywgZmFTcXVhcmVYaW5nLCBmYVhpbmdTcXVhcmUsIGZhQ3NzM0FsdCwgZmFTcXVhcmVzcGFjZSwgZmFUcmVsbG8sIGZhVmlhZGVvLCBmYVNlYXJjaGVuZ2luLCBmYVVucmVhbEVuZ2luZSwgZmFQYXlwYWwsIGZhU3F1YXJlQmx1ZXNreSwgZmFEQW5kREJleW9uZCwgZmFNaWNyb3NvZnQsIGZhRmx5LCBmYUNjU3RyaXBlLCBmYVdvcmRwcmVzc1NpbXBsZSwgZmFTZWxsc3ksIGZhRGFzaGN1YmUsIGZhR2l0dGVyLCBmYVdvbGZQYWNrQmF0dGFsaW9uLCBmYUxhc3RmbSwgZmFTaG9wd2FyZSwgZmFCbG9nZ2VyLCBmYUVkZ2UsIGZhSW94aG9zdCwgZmFTY2hsaXgsIGZhREFuZEQsIGZhVnVlanMsIGZhTWV0YSwgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSwgZmFTdHVkaW92aW5hcmksIGZhQml0YnVja2V0LCBmYVZrLCBmYUdpdGh1YiwgZmFDb2RpZXBpZSwgZmFQaWVkUGlwZXIsIGZhUmFzcGJlcnJ5UGksIGZhQ3NzMywgZmFIdWJzcG90LCBmYUNtcGxpZCwgZmFEeWFsb2csIGZhRWxlbWVudG9yLCBmYUZpcnN0T3JkZXIsIGZhRHJpYmJibGUsIGZhTGlua2VkaW4sIGZhQ2NQYXlwYWwsIGZhRGhsLCBmYVRleCwgZmFDbGF1ZGUsIGZhU2hvcGlmeSwgZmFTcXVhcmVSZWRkaXQsIGZhUmVkZGl0U3F1YXJlLCBmYUNyZWF0aXZlQ29tbW9uc05jLCBmYUdhbGFjdGljUmVwdWJsaWMsIGZhRmFjZWJvb2ssIGZhR2l0bGFiLCBmYVFxLCBmYVN0cmlwZSwgZmFEYWlseW1vdGlvbiwgZmFTdGVhbSwgZmFWZW5tb1YsIGZhU25hcGNoYXQsIGZhU25hcGNoYXRHaG9zdCwgZmFHYWxhY3RpY1NlbmF0ZSwgZmFQaG9lbml4RnJhbWV3b3JrLCBmYUdpdCwgZmFPcHRpbk1vbnN0ZXIsIGZhSmVua2lucywgZmFTbGlkZXNoYXJlLCBmYVViZXIsIGZhRGlnaXRhbE9jZWFuLCBmYVNvdW5kY2xvdWQsIGZhU3F1YXJlRmlnbWEsIGZhQ3JlYXRpdmVDb21tb25zU2EsIGZhQ2hyb21lLCBmYVRyYWRlRmVkZXJhdGlvbiwgZmFWYWFkaW4sIGZhRGV2aWFudGFydCwgZmFNZWRpdW0sIGZhTWVkaXVtTSwgZmFPcGVuY2FydCwgZmFZQ29tYmluYXRvciwgZmFMaW5lLCBmYUFtaWxpYSwgZmFBc3ltbWV0cmlrLCBmYVBoYWJyaWNhdG9yLCBmYUJvdHMsIGZhVmluZSwgZmFNZWRydCwgZmFPc2ksIGZhR2csIGZhQnV5c2VsbGFkcywgZmFHb29nbGVQbHVzLCBmYVNjcmVlbnBhbCwgZmFCaXRjb2luLCBmYVN3aWZ0LCBmYUZpbGVzUGlud2hlZWwsIGZhTGFyYXZlbCwgZmFXcGZvcm1zLCBmYVNwZWFrZXJEZWNrLCBmYUZsaWNrciwgZmFDY1Zpc2EsIGZhVXB3b3JrLCBmYUtha2FvVGFsaywgZmFGbHV0dGVyLCBmYUJ1ZmZlciwgZmFHcmF0aXBheSwgZmFHb29nbGVQYXksIGZhQXBwbGUsIGZhVHVtYmxyLCBmYVBob2VuaXhTcXVhZHJvbiwgZmFDZW50ZXJjb2RlLCBmYURlYmlhbiwgZmFNYXN0b2RvbiwgZmFTa2V0Y2gsIGZhV2ViQXdlc29tZSwgZmFTYXNzLCBmYVRocmVlbWEsIGZhU3F1YXJlV2hhdHNhcHAsIGZhV2hhdHNhcHBTcXVhcmUsIGZhU2t5cGUsIGZhQW5ndWxhciwgZmFDaXJjbGVadWxpcCwgZmFPcGVuc3VzZSwgZmFEcm9wYm94LCBmYURlZXplciwgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZywgZmFKZWRpT3JkZXIsIGZhUlByb2plY3QsIGZhSW5zdGFsb2QsIGZhQ2FuYWRpYW5NYXBsZUxlYWYsIGZhRXRoZXJldW0sIGZhSG91enosIGZhVmliZXIsIGZhS2lja3N0YXJ0ZXIsIGZhU3F1YXJlS2lja3N0YXJ0ZXIsIGZhU3BvdGlmeSwgZmFMZWFucHViLCBmYUphdmEsIGZhTmZjU3ltYm9sLCBmYVdvZHUsIGZhU3F1YXJlU3RlYW0sIGZhU3RlYW1TcXVhcmUsIGZhQ3JlYXRpdmVDb21tb25zTmNFdSwgZmFOcG0sIGZhQ2xvdWRzY2FsZSwgZmFUaGVtZWNvLCBmYUdvb2dsZVBsYXksIGZhS29ydnVlLCBmYVczYywgZmFHcmF2LCBmYUF3cywgZmFHbGlkZUcsIGZhSnNmaWRkbGUsIGZhS2V5YmFzZSwgZmFMdW1vbkRyb3AsIGZhRm9yZ2VqbywgZmFQb3N0Z3Jlc3FsLCBmYVdlZWJseSwgZmFEb2NrZXIsIGZhTWFnZW50bywgZmFUb3JCcm93c2VyLCBmYUdpdEFsdCwgZmFGaXJlZm94QnJvd3NlciwgZmFDbG91ZHNtaXRoLCBmYVdpemFyZHNPZlRoZUNvYXN0LCBmYUNyZWF0aXZlQ29tbW9uc05kLCBmYVVzcHMsIGZhU3F1YXJlTGV0dGVyYm94ZCwgZmFNYW5kYWxvcmlhbiwgZmFTbGFjaywgZmFTbGFja0hhc2gsIGZhQW5nZWxsaXN0LCBmYUFuZHJvaWQsIGZhTWVldHVwLCBmYUZvbnRpY29uc0ZpLCBmYVBhbGZlZCwgZmFXcGJlZ2lubmVyLCBmYURpYXNwb3JhLCBmYVByb2R1Y3RIdW50LCBmYVNxdWFyZVVwd29yaywgZmFDdXR0bGVmaXNoLCBmYU1lZGFwcHMsIGZhUGl4LCBmYVNxdWFyZVR1bWJsciwgZmFUdW1ibHJTcXVhcmUsIGZhUmVhY3QsIGZhSHVnZ2luZ0ZhY2UsIGZhSnhsLCBmYVNxdWFyZUxpbmtlZGluLCBmYUNzcywgZmFIYXNobm9kZSwgZmFSZWRkaXRBbGllbiwgZmFUaWt0b2ssIGZhV29yZHByZXNzLCBmYUlkZWFsLCBmYVBpZWRQaXBlclBwLCBmYVVzc3VubmFoLCBmYUZvcnRBd2Vzb21lQWx0LCBmYUJ1cm9tb2JlbGV4cGVydGUsIGZhQmlsaWJpbGksIGZhTmVvcywgZmFEZXYsIGZhSG90amFyLCBmYURvY2h1YiwgZmFWaW1lbywgZmFNYXhjZG4sIGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2UsIGZhRm9udEF3ZXNvbWVBbHQsIGZhU3BlYWthcCwgZmFGYW50YXN5RmxpZ2h0R2FtZXMsIGZhTGludXgsIGZhQ290dG9uQnVyZWF1LCBmYUdvb2dsZVdhbGxldCwgZmFGb3Vyc3F1YXJlLCBmYVNoaXJ0c2luYnVsaywgZmFNaW50Yml0LCBmYVp1bGlwLCBmYVN0YXlsaW5rZWQsIGZhV2ViZmxvdywgZmFSZW5yZW4sIGZhS29GaSwgZmFSZXYsIGZhS2V5Y2RuLCBmYUhpcmVBSGVscGVyLCBmYVNxdWFyZUhhY2tlck5ld3MsIGZhSGFja2VyTmV3c1NxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCwgZmFPcmNpZCwgZmFCb2FyZEdhbWVHZWVrLCBmYUJnZywgZmFCZWhhbmNlLCBmYU1vbmVybywgZmFGaWdtYSwgZmFJbnN0YWdyYW0sIGZhUGVyYnl0ZSwgZmFTcXVhcmVWaW1lbywgZmFWaW1lb1NxdWFyZSwgZmFQdXNoZWQsIGZhTWl4Y2xvdWQsIGZhWWFuZGV4SW50ZXJuYXRpb25hbCwgZmFIaXZlLCBmYUNyZWF0aXZlQ29tbW9uc1plcm8sIGZhU3F1YXJlU25hcGNoYXQsIGZhU25hcGNoYXRTcXVhcmUsIGZhVGhlbWVpc2xlLCBmYURhcnRMYW5nLCBmYURlcGxveWRvZywgZmFGbGlwYm9hcmQsIGZhQnV5TkxhcmdlLCBmYVdhdGNobWFuTW9uaXRvcmluZywgZmFIaXBzLCBmYUNsb3VkdmVyc2lmeSwgZmFHb29kcmVhZHMsIGZhVGlkYWwsIGZhVW5pdHksIGZhVGVuY2VudFdlaWJvLCBmYUZyZWVDb2RlQ2FtcCwgZmFYVHdpdHRlciwgZmFTdGlja2VyTXVsZSwgZmFUd2l0Y2gsIGZhS2lja3N0YXJ0ZXJLLCBmYUNyaXRpY2FsUm9sZSwgZmFTdGVhbVN5bWJvbCwgZmFNYWlsY2hpbXAsIGZhTHVtb24sIGZhTnV0cml0aW9uaXgsIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzLCBmYVJlZGhhdCwgZmFTcXVhcmVQaWVkUGlwZXIsIGZhUGllZFBpcGVyU3F1YXJlLCBmYVdoYXRzYXBwLCBmYUltZGIsIGZhUHl0aG9uLCBmYUNhc2hBcHAsIGZhUGludGVyZXN0UCwgZmFXaG1jcywgZmFKb2dldCwgZmFTcXVhcmVZb3V0dWJlLCBmYVlvdXR1YmVTcXVhcmUsIGZhQXRsYXNzaWFuLCBmYVBpZWRQaXBlckhhdCwgZmFJbnRlcm5ldEV4cGxvcmVyLCBmYUFpcmJuYiwgZmFKcywgZmFRdWluc2NhcGUsIGZhQWR2ZXJzYWwsIGZhQ3JlYXRpdmVDb21tb25zLCBmYU5vdGlvbiwgZmFDaHJvbWVjYXN0LCBmYVVsdHJhbHl0aWNzSHViLCBmYVdpa2lwZWRpYVcsIGZhU2l0cm94LCBmYVNxdWFyZUdpdGxhYiwgZmFHaXRsYWJTcXVhcmUsIGZhU2hvZWxhY2UsIGZhT3BlbnN0cmVldG1hcCwgZmFTZWxsY2FzdCwgZmFNaXgsIGZhQ2NBcHBsZVBheSwgZmFTb2xhbmEsIGZhVHlwZXNjcmlwdCwgZmFCcmF2ZSwgZmFFdHN5LCBmYUJ0YywgZmFBZG4sIGZhU3F1YXJlWFR3aXR0ZXIsIGZhU3F1YXJlRm9udEF3ZXNvbWUsIGZhRm9ydW1iZWUsIGZhNDJHcm91cCwgZmFJbm5vc29mdCwgZmFTdHVtYmxldXBvbkNpcmNsZSwgZmFTeW1mb255LCBmYVNhbGVzZm9yY2UsIGZhU291cmNldHJlZSwgZmFMaW5rZWRpbkluLCBmYUh0bWw1LCBmYVJ1c3QsIGZhSG9ybmJpbGwsIGZhUGhwLCBmYURpc3F1cywgZmE1MDBweCwgZmFBZmZpbGlhdGV0aGVtZSwgZmFSZWRSaXZlciwgZmFUd2l0dGVyLCBmYUZvcnRBd2Vzb21lLCBmYU1peGVyLCBmYUx5ZnQsIGZhQXBwbGVQYXksIGZhQXJ0c3RhdGlvbiwgZmFOb2RlSnMsIGZhVW5jaGFydGVkLCBmYVBsYXlzdGF0aW9uLCBmYU1pY3JvYmxvZywgZmFHaXRrcmFrZW4sIGZhVGVsZWdyYW0sIGZhVGVsZWdyYW1QbGFuZSwgZmFVbHRyYWx5dGljcywgZmFJdHVuZXNOb3RlLCBmYUxlc3MsIGZhRmlyZWZveCwgZmFLYWdnbGUsIGZhRmFjZWJvb2tNZXNzZW5nZXIsIGZhQXVkaWJsZSwgZmFQYXRyZW9uLCBmYVZudiwgZmFQYWdlbGluZXMsIGZhQW1hem9uLCBmYUVudmlyYSwgZmFMaW5vZGUsIGZhQWNjdXNvZnQsIGZhRXJsYW5nLCBmYVVuaXNvbiwgZmFDY0Rpc2NvdmVyLCBmYVNhZmFyaSwgZmFTcGFjZUF3ZXNvbWUsIGZhTm9kZSwgZmFDb2RlcGVuLCBmYVJhdmVscnksIGZhQWxpcGF5LCBmYUNjQW1leCwgZmFQaWVkUGlwZXJBbHQsIGZhTGV0dGVyYm94ZCwgZmFPcGVyYSwgZmFXZWlibywgZmFSZWFkbWUsIGZhR29sYW5nLCBmYVN0YWNrRXhjaGFuZ2UsIGZhR3VscCwgZmFZZWxwLCBmYUdvZm9yZSwgZmFBdmlhdG8sIGZhUGFkbGV0LCBmYUVkZ2VMZWdhY3ksIGZhU3F1YXJlTGFzdGZtLCBmYUxhc3RmbVNxdWFyZSwgZmFHb29kcmVhZHNHLCBmYUNjTWFzdGVyY2FyZCwgZmFEaXNjb3Vyc2UsIGZhQmxhY2tUaWUsIGZhU3F1YXJlRmFjZWJvb2ssIGZhRmFjZWJvb2tTcXVhcmUsIGZhQmF0dGxlTmV0LCBmYUJpbW9iamVjdCwgZmFTdmVsdGUsIGZhU3F1YXJlRGVza3BybywgZmFUYWlsd2luZENzcywgaWNvbnM7CnZhciBpbml0X2ZyZWVfYnJhbmRzX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLWJyYW5kcy1zdmctaWNvbnNANy4yLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzIigpIHsKICAgIHByZWZpeCA9ICJmYWIiOwogICAgZmFTcXVhcmVHaXRodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdGh1YiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXRodWItc3F1YXJlIl0sICJmMDkyIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjY1LjggNDA3LjdjMC0xLjggMC02IC4xLTExLjYgLjEtMTEuNCAuMS0yOC44IC4xLTQzLjcgMC0xNS42LTUuMi0yNS41LTExLjMtMzAuNyAzNy00LjEgNzYtOS4yIDc2LTczLjEgMC0xOC4yLTYuNS0yNy4zLTE3LjEtMzkgMS43LTQuMyA3LjQtMjItMS43LTQ1LTEzLjktNC4zLTQ1LjcgMTcuOS00NS43IDE3LjktMjYuNi03LjUtNTYuNi03LjUtODMuMiAwIDAgMC0zMS44LTIyLjItNDUuNy0xNy45LTkuMSAyMi45LTMuNSA0MC42LTEuNyA0NS0xMC42IDExLjctMTUuNiAyMC44LTE1LjYgMzkgMCA2My42IDM3LjMgNjkgNzQuMyA3My4xLTQuOCA0LjMtOS4xIDExLjctMTAuNiAyMi4zLTkuNSA0LjMtMzMuOCAxMS43LTQ4LjMtMTMuOS05LjEtMTUuOC0yNS41LTE3LjEtMjUuNS0xNy4xLTE2LjItLjItMS4xIDEwLjItMS4xIDEwLjIgMTAuOCA1IDE4LjQgMjQuMiAxOC40IDI0LjIgOS43IDI5LjcgNTYuMSAxOS43IDU2LjEgMTkuNyAwIDkgLjEgMjEuNyAuMSAzMC42IDAgNC44IC4xIDguNiAuMSAxMCAwIDQuMy0zIDkuNS0xMS41IDgtNjYtMjIuMS0xMTIuMi04NC45LTExMi4yLTE1OC4zIDAtOTEuOCA3MC4yLTE2MS41IDE2Mi0xNjEuNVMzODggMTY1LjYgMzg4IDI1Ny40Yy4xIDczLjQtNDQuNyAxMzYuMy0xMTAuNyAxNTguMy04LjQgMS41LTExLjUtMy43LTExLjUtOHptLTkwLjUtNTQuOGMtLjItMS41IDEuMS0yLjggMy0zLjIgMS45LS4yIDMuNyAuNiAzLjkgMS45IC4zIDEuMy0xIDIuNi0zIDMtMS45IC40LTMuNy0uNC0zLjktMS43em0tOS4xIDMuMmMtMi4yIC4yLTMuNy0uOS0zLjctMi40IDAtMS4zIDEuNS0yLjQgMy41LTIuNCAxLjktLjIgMy43IC45IDMuNyAyLjQgMCAxLjMtMS41IDIuNC0zLjUgMi40em0tMTQuMy0yLjJjLTEuOS0uNC0zLjItMS45LTIuOC0zLjJzMi40LTEuOSA0LjEtMS41YzIgLjYgMy4zIDIuMSAyLjggMy40LS40IDEuMy0yLjQgMS45LTQuMSAxLjN6bS0xMi41LTcuM2MtMS41LTEuMy0xLjktMy4yLS45LTQuMSAuOS0xLjEgMi44LS45IDQuMyAuNiAxLjMgMS4zIDEuOCAzLjMgLjkgNC4xLS45IDEuMS0yLjggLjktNC4zLS42em0tOC41LTEwYy0xLjEtMS41LTEuMS0zLjIgMC0zLjkgMS4xLS45IDIuOC0uMiAzLjcgMS4zIDEuMSAxLjUgMS4xIDMuMyAwIDQuMS0uOSAuNi0yLjYgMC0zLjctMS41em0tNi4zLTguOGMtMS4xLTEuMy0xLjMtMi44LS40LTMuNSAuOS0uOSAyLjQtLjQgMy41IC42IDEuMSAxLjMgMS4zIDIuOCAuNCAzLjUtLjkgLjktMi40IC40LTMuNS0uNnptLTYtNi40Yy0xLjMtLjYtMS45LTEuNy0xLjUtMi42IC40LS42IDEuNS0uOSAyLjgtLjQgMS4zIC43IDEuOSAxLjggMS41IDIuNi0uNCAuOS0xLjcgMS4xLTIuOCAuNHoiXQogICAgfTsKICAgIGZhR2l0aHViU3F1YXJlID0gZmFTcXVhcmVHaXRodWI7CiAgICBmYVRoaW5rUGVha3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhpbmstcGVha3MiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjczMSIsICJNNDY1LjQgNDA5LjRsODcuMS0xNTAuMi0zMi0uMy01NS4xIDk1LTIwNi4yLTM1My45LTIzNi4yIDQwNy40IDMyIC4zIDIwNC4yLTM1Mi4xIDIwNi4yIDM1My44ek0xMTAuMSAzNjUuM2wzMi4xIDAgMTE3LjQtMjAyLjUgMjAzLjQgMzQ5LjEgMzIuNSAuMS0yMzUuOC00MDQuNi0xNDkuNiAyNTcuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlRHJpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLWRyaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYWEiLCAiTTMzOSAzMTQuOUwxNzUuNCAzMiAzMzYuNiAzMiA1MDAuMiAzMTQuOSAzMzkgMzE0Ljl6TTIwMS41IDMzOC41bC04MC42IDE0MS41IDMxMC41IDAgODAuNi0xNDEuNS0zMTAuNSAwek0xNTQuMSA2Ny40TDAgMzM4LjUgODAuNiA0ODAgMjM3IDIwOC44IDE1NC4xIDY3LjR6Il0KICAgIH07CiAgICBmYUF1dG9wcmVmaXhlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdXRvcHJlZml4ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxYyIsICJNMzE4LjQgMTZsLTE2MSA0ODAgNzcuNSAwIDI1LjQtODEuNCAxMTkuNSAwIDI1LjIgODEuNCA3Ny41IDAtMTY0LjEtNDgwek0yNzguMSAzNTcuOWw0MS4yLTEzMC40IDEuNSAwIDQwLjkgMTMwLjQtODMuNiAwek02NDAgNDA1TDYzMCAzNzMuNiA0NjIuMSAzNTggNDgxLjUgNDE0LjUgNjQwIDQwNXpNMTc3LjkgMzU4TDEwIDM3My43IDAgNDA1IDE1OC41IDQxNC40IDE3Ny45IDM1OHoiXQogICAgfTsKICAgIGZhU3F1YXJlVmlhZGVvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS12aWFkZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidmlhZGVvLXNxdWFyZSJdLCAiZjJhYSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTExOC4zIDM4MS4yYy02OC03My42LTE5LjgtMTk2LjEgODEuMi0xOTYuMSAxMy4zIDAgMjYuNiAyLjEgMzkuMSA2LjctNC4zIDguNC03LjMgMTcuNi04LjQgMjcuMS05LjctNC4xLTIwLjItNi0zMC43LTYtNDguOCAwLTg0LjYgNDEuNy04NC42IDg4LjkgMCA0MyAyOC41IDc4LjcgNjkuNSA4NS45IDYxLjUtMjQgNzIuOS0xMTcuNiA3Mi45LTE3NSAwLTcuMyAwLTE0LjgtLjYtMjIuMS0xMS4yLTMyLjktMjYuNi02NC42LTQ0LjItOTQuNSAyNy4xIDE4LjMgNDEuOSA2Mi41IDQ0LjIgOTQuMWwwIC40YzcuNyAyMi41IDExLjggNDYuMiAxMS44IDcwIDAgNTQuMS0yMS45IDk5LTY4LjMgMTI4LjJsLTIuNCAuMmM1MCAxIDg2LjItMzguNiA4Ni4yLTg3LjIgMC0xMi4yLTIuMS0yNC4zLTYuOS0zNS43IDkuNS0xLjkgMTguNS01LjYgMjYuNC0xMC41IDE1LjMgMzYuNiAxMi42IDg3LjMtMjIuOCAxMjUuNi00Mi40IDQ2LjItMTIwIDQ2LjYtMTYyLjQgMHpNMjc0LjYgMjE3LjZjMjEuOS0xMiA0OS42LTMwLjcgNjIuMy01MyAxLjUtMyA0LjEtOC42IDQuNS0xMi0xMi41IDI3LjktNDQuMiA0OS44LTczLjkgNTYuNy00LjctNy4zLTcuNS0xNS41LTcuNS0yNC4zIDAtMTAuMyA1LjItMjQuMSAxMi45LTMxLjYgOC4zLTcuOSAxOC0xMC45IDI3LjktMTQuMSAxNi01LjEgMzIuNS0xMC4zIDQ0LjUtMzUuOSAzMi41IDQ2LjIgMTMuMSAxMzAuMy0zNi4zIDEzMC4zLTEzLjMgMC0yNS4xLTcuMS0zNC40LTE2LjF6Il0KICAgIH07CiAgICBmYVZpYWRlb1NxdWFyZSA9IGZhU3F1YXJlVmlhZGVvOwogICAgZmFDcGFuZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3BhbmVsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzODgiLCAiTTIxMC4zIDIyMC4yYy01LjYtMjQuOC0yNi45LTQxLjItNTEtNDEuMmwtMzcgMGMtNy4xIDAtMTIuNSA0LjUtMTQuMyAxMC45TDczLjEgMzIwIDk3LjggMzE5LjljNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDI1LjgtOTUuNyAxOS44IDBjOC40IDAgMTYuMiA1LjYgMTguMyAxNC44IDIuNSAxMC45LTUuOSAyMi42LTE4LjMgMjIuNmwtMTAuMyAwYy03IDAtMTIuNSA0LjYtMTQuMyAxMC44bC02LjQgMjMuOCAzMiAwYzM3LjIgMCA1OC4zLTM2LjIgNTEuNy02NS4zem0tMTU2LjUgMjhsMTguNiAwYzYuOSAwIDEyLjQtNC40IDE0LjMtMTAuOWw2LjItMjMuNi00MCAwQzMwIDIxMy43IDkgMjI3LjggMS43IDI1NC44LTcgMjg4LjYgMTguNSAzMjAgNTIgMzIwbDEyLjQgMCA3LjEtMjYuMWMxLjItNC40LTIuMi04LjMtNi40LTguM2wtMTEuMyAwYy0yNC43IDAtMjQuOS0zNy40IDAtMzcuNHptMjQ3LjUtMzQuOGwtNzcuOSAwLTMuNSAxMy40Yy0yLjQgOS42IDQuNSAxOC41IDE0LjIgMTguNWw1Ny41IDBjNCAwIDIuNCA0LjMgMi4xIDUuM2wtOC42IDMxLjhjLS40IDEuNC0uOSA1LjMtNS41IDUuM2wtMzQuOSAwYy01LjMgMC01LjMtNy45IDAtNy45bDIxLjYgMGM2LjggMCAxMi4zLTQuNiAxNC4yLTEwLjhsMy41LTEzLjItNDguNCAwYy0zOS4yIDAtNDMuNiA2My44LS43IDYzLjhsNTcuNSAuMmMxMS4yIDAgMjAuNi03LjIgMjMuNC0xNy44bDE0LTUxLjhjNC44LTE5LjItOS43LTM2LjgtMjguNS0zNi44ek02MzMuMSAxNzlsLTE4LjkgMGMtNC45IDAtOS4yIDMuMi0xMC40IDcuOUw1NjguMiAzMjBjMjAuNyAwIDM5LjgtMTMuOCA0NC45LTM0LjVsMjYuNS05OC4yYzEuMi00LjMtMi04LjMtNi41LTguM3pNMzk2LjggMjEzLjdsMCAuMS00OC4zIDAtMjYuMiA5OGMtMS4yIDQuNCAyLjIgOC4zIDYuNCA4LjNsMTguOSAwYzQuOCAwIDkuMi0zIDEwLjQtNy44bDE3LjItNjQgMTkuOCAwYzEyLjUgMCAyMS40IDExLjggMTguMSAyMy40bC0xMC42IDQwYy0xLjIgNC4zIDEuOSA4LjMgNi40IDguM2wxOS4xIDBjNC42IDAgOS4xLTIuOSAxMC4zLTcuOGw4LjgtMzMuMWM5LTMzLjEtMTUuOS02NS40LTUwLjMtNjUuNHptOTguMyA3NC42Yy0zLjYgMC02LTMuNC01LjEtNi43bDgtMzBjLjktMy45IDMuNy02IDcuOC02bDMyLjkgMGMyLjYgMCA0LjYgMi40IDMuOSA1LjFsLS43IDIuNmMtLjYgMi0xLjkgMy0zLjkgM2wtMjEuNiAwYy03IDAtMTIuNiA0LjYtMTQuMiAxMC44bC0zLjUgMTMgNTMuNCAwYzEwLjUgMCAyMC4zLTYuNiAyMy4yLTE3LjZsMy4yLTEyYzQuOS0xOS4xLTkuMy0zNi44LTI4LjMtMzYuOGwtNDcuMyAwYy0xNy45IDAtMzMuOCAxMi0zOC42IDI5LjZsLTEwLjggNDBjLTUgMTcuNyA4LjMgMzYuNyAyOC4zIDM2LjdsNjYuNyAwYzYuOCAwIDEyLjMtNC41IDE0LjItMTAuN2w1LjctMjEtNzMuMyAweiJdCiAgICB9OwogICAgZmFNZW5kZWxleSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZW5kZWxleSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2IzIiwgIk02MjQuNiAzMjUuMmMtMTIuMy0xMi40LTI5LjctMTkuMi00OC40LTE3LjItNDMuMy0xLTQ5LjctMzQuOS0zNy41LTk4LjggMjIuOC01Ny41LTE0LjktMTMxLjUtODcuNC0xMzAuOC03Ny40IC43LTgxLjcgODItMTMwLjkgODItNDguMSAwLTU0LTgxLjMtMTMwLjktODItNzIuOS0uOC0xMTAuMSA3My4zLTg3LjQgMTMwLjggMTIuMiA2My45IDUuOCA5Ny44LTM3LjUgOTguOC0yMS4yLTIuMy0zNyA2LjUtNTMgMjIuNS0xOS45IDE5LjctMTkuMyA5NC44IDQyLjYgMTAyLjYgNDcuMSA1LjkgODEuNi00Mi45IDYxLjItODcuOC00Ny4zLTEwMy43IDE4NS45LTEwNi4xIDE0Ni41LTguMi0uMSAuMS0uMiAuMi0uMyAuNC0yNi44IDQyLjggNi44IDk3LjQgNTguOCA5NS4yIDUyLjEgMi4xIDg1LjQtNTIuNiA1OC44LTk1LjItLjEtLjItLjItLjMtLjMtLjQtMzkuNC05Ny45IDE5My44LTk1LjUgMTQ2LjUgOC4yLTQuNiAxMC02LjcgMjEuMy01LjcgMzMgNC45IDUzLjQgNjguNyA3NC4xIDEwNC45IDM1LjIgMTcuOC0xNC44IDIzLjEtNjUuNiAwLTg4LjN6TTMyMC43IDMwNi4xbC0uNiAwYy00My40IDAtNjIuOC0zNy41LTYyLjgtNjIuOCAwLTM0LjcgMjguMi02Mi44IDYyLjgtNjIuOGwuNiAwYzM0LjcgMCA2Mi44IDI4LjEgNjIuOCA2Mi44IDAgMjUtMTkuMiA2Mi44LTYyLjggNjIuOHoiXQogICAgfTsKICAgIGZhRHJhZnQyZGlnaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcmFmdDJkaWdpdGFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOTYiLCAiTTQ5NiAzOTguMWwtMTQ0LTgyLjIgMCA2NC43LTkxLjMgMGMzMC44LTM1IDgxLjgtOTUuOSAxMTEuOC0xNDkuMyAzNS4yLTYyLjYgMTYuMS0xMjMuNC0xMi44LTE1My4zLTQuNC00LjYtNjIuMi02Mi45LTE2Ni00MS4yLTU5LjEgMTIuNC04OS40IDQzLjQtMTA0LjMgNjcuMy0xMy4xIDIwLjktMTcgMzkuOC0xOC4yIDQ3LjctNS41IDMzIDE5LjQgNjcuMSA1Ni43IDY3LjEgMzEuNyAwIDU3LjMtMjUuNyA1Ny4zLTU3LjQgMC0yNy4xLTE5LjctNTIuMS00OC01Ni44IDEuOC03LjMgMTcuNy0yMS4xIDI2LjMtMjQuNyA0MS4xLTE3LjMgNzggNS4yIDgzLjMgMzMuNSA4LjMgNDQuMy0zNy4xIDkwLjQtNjkuNyAxMjcuNi03Ni42IDg3LTE0Mi44IDE1NS43LTE2MS4xIDE3NC44bDMzNi0uMSAwIDY0LjIgMTQ0LTgxLjl6TTM4NS45IDM3MWw0Ny4xIDI3LjItNDcuMSAyNy4yIDAtNTQuNHpNMTA1LjQgMTYxLjRhMjIuNCAyMi40IDAgMSAxIDQ0LjggMCAyMi40IDIyLjQgMCAxIDEgLTQ0LjggMHpNOTguNSAzODAuNWMyNS42LTI3LjQgOTcuNy0xMDQuNyAxNTAuOC0xNjkuOSAzNS4xLTQzLjEgNDAuMy04Mi40IDI4LjQtMTEyLjctNy40LTE4LjgtMTcuNS0zMC4yLTI0LjMtMzUuNyA0NS4zIDIuMSA2OCAyMy40IDgyLjIgMzguMyAwIDAgNDIuNCA0OC4yIDUuOCAxMTMuMy0zNyA2NS45LTExMC45IDE0Ny41LTEyOC41IDE2Ni43bC0xMTQuNCAweiJdCiAgICB9OwogICAgZmFSZXBseWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVwbHlkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTYiLCAiTTMyMCA0ODBsLTE5MiAwQzU3LjYgNDgwIDAgNDIyLjQgMCAzNTJMMCAxNjBDMCA4OS42IDU3LjYgMzIgMTI4IDMybDE5MiAwYzcwLjQgMCAxMjggNTcuNiAxMjggMTI4bDAgMTkyYzAgNzAuNC01Ny42IDEyOC0xMjggMTI4ek0xOTMuNCAyNzMuMmMtNi4xLTItMTEuNi0zLjEtMTYuNC0zLjEtNy4yIDAtMTMuNSAxLjktMTguOSA1LjZzLTkuNiA5LTEyLjggMTUuOGwtMS4xIDAtNC4yLTE4LjMtMjggMCAwIDEzOC45IDM2LjEgMCAwLTg5LjdjMS41LTUuNCA0LjQtOS44IDguNy0xMy4yczkuOC01LjEgMTYuMi01LjFjNC42IDAgOS44IDEgMTUuNiAzLjFsNC44LTM0ek0zMDguNiAzNzYuNmMtMy4yIDIuNC03LjcgNC44LTEzLjcgNy4xcy0xMi44IDMuNS0yMC40IDMuNWMtMTIuMiAwLTIxLjEtMy0yNi41LTguOS01LjUtNS45LTguNS0xNC43LTktMjYuNGw4My4zIDBjLjktNC44IDEuNi05LjQgMi4xLTEzLjkgLjUtNC40IC43LTguNiAuNy0xMi41IDAtMTAuNy0xLjYtMTkuNy00LjctMjYuOS0zLjItNy4yLTcuMy0xMy0xMi41LTE3LjItNS4yLTQuMy0xMS4xLTcuMy0xNy44LTkuMi02LjctMS44LTEzLjUtMi44LTIwLjYtMi44LTIxLjEgMC0zNy41IDYuMS00OS4yIDE4LjNzLTE3LjUgMzAuNS0xNy41IDU1YzAgMjIuOCA1LjIgNDAuNyAxNS42IDUzLjcgMTAuNCAxMy4xIDI2LjggMTkuNiA0OS4yIDE5LjYgMTAuNyAwIDIwLjktMS41IDMwLjQtNC42czE3LjEtNi44IDIyLjYtMTEuMmwtMTItMjMuNnptLTIxLjgtNzAuM2MzLjggNS40IDUuMyAxMy4xIDQuNiAyMy4xbC01MS43IDBjLjktOS40IDMuNy0xNyA4LjItMjIuNnMxMS41LTguNSAyMS04LjVjOC4yLS4xIDE0LjEgMi42IDE3LjkgOHptNzkuOSAyLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjQgMiAxMS43IDYuMSAxNS42em0wIDEwMC41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjQtOS42LTUuNy0xNi43LTUuN2MtNi43IDAtMTIgMS45LTE2LjEgNS43cy02LjEgOC45LTYuMSAxNS40YzAgNi42IDIgMTEuNyA2LjEgMTUuNnoiXQogICAgfTsKICAgIGZhRW1waXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVtcGlyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWQxIiwgIk0yOTUuNiA1NC4yYy0xMC44LTIuMi0yMi4xLTMuMy0zMy41LTMuNmwwLTE4LjJjNzguMSAyLjIgMTQ2LjEgNDQgMTg0LjYgMTA2LjZsLTE1LjggOS4xYy02LjEtOS43LTEyLjctMTguOC0yMC4yLTI3LjFsLTE4IDE1LjVjLTI2LTI5LjYtNjEuNC01MC43LTEwMS45LTU4LjRsNC44LTIzLjl6TTYxLjQgMzIyLjRsMjMtNy43Yy02LjQtMTguMy0xMC0zOC4yLTEwLTU4LjdzMy4zLTQwLjQgOS43LTU4LjdsLTIyLjctNy43YzMuNi0xMC44IDguMy0yMS4zIDEzLjYtMzFsLTE1LjgtOS4xQzQyIDE4MSAzMi4xIDIxNy41IDMyLjEgMjU2czEwIDc1IDI3LjEgMTA2LjZMNzUgMzUzLjVjLTUuMy0xMC05LjctMjAuMy0xMy42LTMxLjF6TTIyMS4xIDQzNGMtNDAuNC04LTc1LjgtMjkuMS0xMDEuOS01OC43bC0xOCAxNS44Yy03LjUtOC42LTE0LjQtMTcuNy0yMC4yLTI3LjRsLTE2IDkuNGMzOC41IDYyLjMgMTA2LjggMTA0LjMgMTg0LjkgMTA2LjZsMC0xOC4zYy0xMS4zLS4zLTIyLjctMS43LTMzLjUtMy42bDQuNy0yMy44ek0xMDEuMyAxMjAuOWwxOCAxNS41YzI2LTI5LjYgNjEuNC01MC43IDEwMS45LTU4LjRsLTQuNy0yMy44YzEwLjgtMi4yIDIyLjEtMy4zIDMzLjUtMy42bDAtMTguMkMxNzEuOSAzNC42IDEwMy45IDc2LjQgNjUuNCAxMzlsMTUuOCA5LjFjNi05LjcgMTIuNi0xOC45IDIwLjEtMjcuMnpNNDEwLjcgMzkxLjFsLTE4LTE1LjhjLTI2IDI5LjYtNjEuNCA1MC43LTEwMS45IDU4LjdsNC43IDIzLjhjLTEwLjggMS45LTIyLjEgMy4zLTMzLjUgMy42bDAgMTguM2M3OC4xLTIuMiAxNDYuNC00NC4zIDE4NC45LTEwNi42bC0xNi4xLTkuNGMtNS43IDkuNy0xMi42IDE4LjgtMjAuMSAyNy40ek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODMuOCAwYTIzNS44IDIzNS44IDAgMSAwIC00NzEuNiAwIDIzNS44IDIzNS44IDAgMSAwIDQ3MS42IDB6bS0zOS0xMDYuNkw0MzcgMTU4LjVjNS4zIDkuNyAxMCAyMC4yIDEzLjYgMzFsLTIyLjcgNy43YzYuNCAxOC4zIDkuNyAzOC4yIDkuNyA1OC43cy0zLjYgNDAuNC0xMCA1OC43bDIzIDcuN2MtMy45IDEwLjgtOC4zIDIxLTEzLjYgMzFsMTUuOCA5LjFDNDcwIDMzMSA0NzkuOSAyOTQuNSA0NzkuOSAyNTZzLTkuOS03NS0yNy4xLTEwNi42em0tMTgzIDE3Ny43YzE2LjMtMy4zIDMwLjQtMTEuNiA0MC43LTIzLjVsNTEuMiA0NC44YzExLjktMTMuNiAyMS4zLTI5LjMgMjcuMS00Ni44bC02NC4yLTIyLjFjMi41LTcuNSAzLjktMTUuMiAzLjktMjMuNXMtMS40LTE2LjEtMy45LTIzLjVsNjQuNS0yMi4xYy02LjEtMTcuNC0xNS41LTMzLjItMjcuNC00Ni44bC01MS4yIDQ0LjhjLTEwLjItMTEuOS0yNC40LTIwLjUtNDAuNy0yMy44bDEzLjMtNjYuNGMtOC42LTEuOS0xNy43LTIuOC0yNy4xLTIuOHMtMTguNSAuOC0yNy4xIDIuOGwxMy4zIDY2LjRjLTE2LjMgMy4zLTMwLjQgMTEuOS00MC43IDIzLjhsLTUxLjItNDQuOGMtMTEuOSAxMy42LTIxLjMgMjkuMy0yNy40IDQ2LjhsNjQuNSAyMi4xYy0yLjUgNy41LTMuOSAxNS4yLTMuOSAyMy41czEuNCAxNi4xIDMuOSAyMy41bC02NC4yIDIyLjFjNS44IDE3LjQgMTUuMiAzMy4yIDI3LjEgNDYuOGw1MS4yLTQ0LjhjMTAuMiAxMS45IDI0LjQgMjAuMiA0MC43IDIzLjVsLTEzLjMgNjYuN2M4LjYgMS43IDE3LjcgMi44IDI3LjEgMi44czE4LjUtMS4xIDI3LjEtMi44bC0xMy4zLTY2Ljd6Il0KICAgIH07CiAgICBmYUFjY2Vzc2libGVJY29uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFjY2Vzc2libGUtaWNvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMTA3XSwgImYzNjgiLCAiTTQyMy45IDI1NS44TDQxMSA0MTMuMWMtMy4zIDQwLjctNjMuOSAzNS4xLTYwLjYtNC45bDEwLTEyMi41LTQxLjEgMi4zYzEwLjEgMjAuNyAxNS44IDQzLjkgMTUuOCA2OC41IDAgNDEuMi0xNi4xIDc4LjctNDIuMyAxMDYuNWwtMzkuMy0zOS4zYzU3LjktNjMuNyAxMy4xLTE2Ny4yLTc0LTE2Ny4yLTI1LjkgMC00OS41IDkuOS02Ny4yIDI2TDczIDI0My4yYzIyLTIwLjcgNTAuMS0zNS4xIDgxLjQtNDAuMmw3NS4zLTg1LjctNDIuNi0yNC44LTUxLjYgNDZDMTA1LjUgMTY1LjMgNjQuOSAxMjAgOTUgOTMuMWw2OC02MC43YzkuOC04LjggMjQuMS0xMC4yIDM1LjUtMy42IDAgMCAxMzkuMyA4MC45IDEzOS41IDgxLjEgMTYuMiAxMC4xIDIwLjcgMzYgNi4xIDUyLjZsLTU4LjQgNjYuNSAxMDYuMS01LjljMTguNS0xLjEgMzMuNiAxNC40IDMyLjEgMzIuN3pNMzU5IDEwMS44QTUwLjkgNTAuOSAwIDEgMCAzNTkgMCA1MC45IDUwLjkgMCAxIDAgMzU5IDEwMS44ek0xNzkuNiA0NTYuNWMtODAuNiAwLTEyNy40LTkwLjYtODIuNy0xNTYuMUw1Ny4yIDI2MC43QzM2LjQgMjg3IDI0IDMyMC4zIDI0IDM1Ni40IDI0IDQ4Ny4xIDE3NC43IDU1Ny44IDI3NS40IDQ3OC45bC0zOS43LTM5LjdjLTE2IDEwLjktMzUuMyAxNy4zLTU2LjEgMTcuM3oiXQogICAgfTsKICAgIGZhUXVvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicXVvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJjNCIsICJNNDQwLjcgMzg2LjdsLTI5LjMgMGMtMS41IDEzLjUtMTAuNSAzMC44LTMzIDMwLjgtMjAuNSAwLTM1LjMtMTQuMi00OS41LTM1LjggNDQuMi0zNC4yIDc0LjctODcuNSA3NC43LTE1MyAuMS0xMTcuNS05Ni42LTE5Ni43LTE5OC40LTE5Ni43LTk5LjcgMC0xOTcuNyA3OS43LTE5Ny43IDE5Ni43IDAgMTM0LjEgMTMxLjMgMjIxLjYgMjQ5IDE4OSAxOS43IDMzLjYgNDUuNyA2Mi4zIDk1LjIgNjIuMyA4MS44IDAgOTAuOC03NS4zIDg5LTkzLjN6TTI5Ny4yIDMyOS4yYy0xOS41LTI5LjItNDMuNy01Mi4yLTkxLjUtNTIuMi0zMC41IDAtNTQuMyAxMC02OSAyMi44bDEyLjIgMjQuM2M2LjItMyAxMy00IDE5LjgtNCAzNS41IDAgNTMuNyAzMC44IDY5LjIgNjEuMy0xMCAzLTIwLjcgNC4yLTMyLjcgNC4yLTc1IDAtMTA3LjUtNTMtMTA3LjUtMTU2LjcgMC0xMDQuNCAzMi41LTE1Ny45IDEwNy41LTE1Ny45IDc2LjIgMCAxMDguNyA1My41IDEwOC43IDE1Ny43IC4xIDQxLjgtNS40IDc1LjYtMTYuNyAxMDAuNXoiXQogICAgfTsKICAgIGZhQ2NKY2IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtamNiIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNGIiLCAiTTQzMS41IDI0NC4zbDAtMzIuM2M0MS4yIDAgMzguNSAuMiAzOC41IC4yIDcuMyAxLjMgMTMuMyA3LjMgMTMuMyAxNiAwIDguOC02IDE0LjUtMTMuMyAxNS44LTEuMiAuNC0zLjMgLjMtMzguNSAuM3ptNDIuOCAyMC4yYy0yLjgtLjctMy4zLS41LTQyLjgtLjVsMCAzNWMzOS42IDAgNDAgLjIgNDIuOC0uNSA3LjUtMS41IDEzLjUtOCAxMy41LTE3IDAtOC43LTYtMTUuNS0xMy41LTE3ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODIgMTkyLjNsLTU3IDBjMCA2Ny4xIDEwLjcgMTA5LjctMzUuOCAxMDkuNy0xOS41IDAtMzguOC01LjctNTcuMi0xNC44bDAgMjhjMzAgOC4zIDY4IDguMyA2OCA4LjMgOTcuOSAwIDgyLTQ3LjcgODItMTMxLjJ6bTE3OC41IDQuNWMtNjMuNC0xNi0xNjUtMTQuOS0xNjUgNTkuMyAwIDc3LjEgMTA4LjIgNzMuNiAxNjUgNTkuMmwwLTI4LjNDMzEyLjkgMzExLjcgMjUzIDMwOSAyNTMgMjU2czU5LjgtNTUuNiAxMDcuNS0zMS4ybDAtMjh6TTU0NCAyODYuNWMwLTE4LjUtMTYuNS0zMC41LTM4LTMybDAtLjhjMTkuNS0yLjcgMzAuMy0xNS41IDMwLjMtMzAuMiAwLTE5LTE1LjctMzAtMzctMzEgMCAwIDYuMy0uMy0xMjAuMy0uM2wwIDEyNy41IDEyMi43IDBjMjQuMyAuMSA0Mi4zLTEyLjkgNDIuMy0zMy4yeiJdCiAgICB9OwogICAgZmFGZWRvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmVkb3JhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3OTgiLCAiTTAgMjU1LjhDLjEgMTMyLjIgMTAwLjMgMzIgMjI0IDMyUzQ0OCAxMzIuMyA0NDggMjU2IDM0Ny44IDQ3OS45IDIyNC4xIDQ4MEw1MC45IDQ4MEMyMi44IDQ4MCAuMSA0NTcuMyAwIDQyOS4ybDAgMCAwLTE3My40IDAgMHptMzQyLjYtNjMuMWMwLTM5LjctMzUuNi02OC41LTczLjItNjguNS0zNC45IDAtNjUuOCAyNi4zLTcwLjEgNTkuOS0uMiAzLjgtLjQgNS0uNCA4LjUtLjEgMjEuMSAwIDQyLjgtLjggNjQuNCAuOSAyNi4xIDEgNTIuMSAwIDc2LjYgMCAyNy4xLTE5LjQgNDUuNS00NC43IDQ1LjVzLTQ1LjgtMjAuMi00NS44LTQ1LjVjLjUtMjcuNyAyMi42LTQ1LjMgNDguNS00Ni4xbC4yIDAgMjYuMy0uMiAwLTM3LjMtMjYuMyAuMmMtNDcuMS0uNC04NC42IDM2LjUtODUuOSA4My40IDAgNDUuNiAzNy41IDgyLjkgODMgODIuOSA0MyAwIDc4LjctMzMuNiA4Mi42LTc1LjZsLjItNTMuNSAzMi42LS4zYzI1LjMgLjIgMjUtMzcuOC0uMi0zNy4zbC0zMi40IC4zYzAtNi40IC4xLTEyLjggLjEtMTkuMiAuMS0xMi43IC4xLTI1LjQtLjEtMzguMiAuMS0xNi41IDE1LjgtMzEuMiAzMy4yLTMxLjIgMTcuNSAwIDM1LjkgOC43IDM1LjkgMzEuMiAwIDMuMi0uMSA1LjEtLjMgNi4zLTEuOSAxMC41IDUuMiAyMC40IDE1LjcgMjEuOSAxMC42IDEuNSAyMC4yLTYuMSAyMS4yLTE2LjYgLjYtNC4yIC43LTcuOSAuNy0xMS42eiJdCiAgICB9OwogICAgZmFEdW9saW5nbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkdW9saW5nbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODEyIiwgIk01MDQuMyAyMzAuNWMxMC40IDg4LjUtNDMuNCAxNzIuMS0xMjguMiAxOTlzLTE3Ni42LTEwLjMtMjE4LjktODguN2MtNzIgMy0xMzcuNC0zOS44LTE2My4yLTEwNS41LTIuNi02LjYtMS45LTE0IDEuOS0xOS45czEwLjItOS43IDE3LjItMTAuMWw5Ni4xLTYtMjMuOC03NS45Yy02LjMtMjAtMi4yLTQxLjkgMTEtNTguM3MzMy43LTI1IDU0LjUtMjNjNTIuMiA1IDg2LjggNC44IDEwNC0uNlMzMDAgMTYuNyAzMzktMTYuOWMxNS45LTEzLjcgMzcuNy0xOC41IDU3LjgtMTIuN3MzNi4xIDIxLjMgNDIuNCA0MS40TDQ2Mi44IDg3IDU0My42IDM3LjNjNi0zLjcgMTMuNC00LjMgMTkuOS0xLjZzMTEuMyA4LjMgMTIuOSAxNS4yYzE2LjIgNjguMi0xMi40IDE0MC4zLTcyLjEgMTc5LjV6TTI1OC41IDQ3NS45bDAgMGMxNS4xIDcuNSAyMS41IDI1LjggMTQuMiA0MXMtMjUuNCAyMS45LTQwLjcgMTQuOWwtNDMuOS0yMWMtMTUuMS03LjUtMjEuNS0yNS44LTE0LjItNDFzMjUuNC0yMS45IDQwLjctMTQuOWw0My44IDIxek01NjQuNiAzNDUuN2MxNC44IDguNCAyMCAyNy4zIDExLjYgNDIuMmwtMjMuOSA0Mi40Yy04LjcgMTQuMy0yNy4xIDE5LjItNDEuNiAxMC45cy0xOS45LTI2LjYtMTItNDEuNGwyMy45LTQyLjRjNC03LjEgMTAuNy0xMi40IDE4LjYtMTQuNnMxNi4zLTEuMiAyMy40IDIuOXoiXQogICAgfTsKICAgIGZhRmlyc3RkcmFmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdGRyYWZ0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYTEiLCAiTTM4NCAxOTJsLTY0IDAgMCAxMjgtMTI4IDAgMCAxMjgtMTkyIDAgMC0yNS42IDE2Ni40IDAgMC0xMjggMTI4IDAgMC0xMjggODkuNiAwIDAgMjUuNnptLTI1LjYgMzguNGwwIDEyOC0xMjggMCAwIDEyOC0xNjYuNCAwIDAgMjUuNiAxOTIgMCAwLTEyOCAxMjggMCAwLTE1My42LTI1LjYgMHptMjUuNiAxOTJsLTg5LjYgMCAwIDg5LjYgMjUuNiAwIDAtNjQgNjQgMCAwLTI1LjZ6TTAgMGwwIDM4NCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOC0zODQgMHoiXQogICAgfTsKICAgIGZhRnJlZWJzZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmcmVlYnNkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTQiLCAiTTMwMy43IDk2LjJjMTEuMS0xMS4xIDExNS41LTc3IDEzOS4yLTUzLjIgMjMuNyAyMy43LTQyLjEgMTI4LjEtNTMuMiAxMzkuMnMtMzkuNCAuOS02My4xLTIyLjljLTIzLjgtMjMuNy0zNC4xLTUyLTIyLjktNjMuMXpNMTA5LjkgNjguMUM3My42IDQ3LjUgMjIgMjQuNiA1LjYgNDEuMS0xMSA1Ny43IDEyLjcgMTEwLjUgMzMuNSAxNDYuOCA1MiAxMTQuNiA3OC4zIDg3LjUgMTA5LjkgNjguMXpNNDA2LjcgMTc0YzMuMyAxMS4zIDIuNyAyMC43LTIuNyAyNi4xLTIwLjMgMjAuMy04Ny41LTI3LTEwOS4zLTcwLjEtMTgtMzIuMy0xMS4xLTUzLjQgMTQuOS00OC43IDUuNy0zLjYgMTIuMy03LjYgMTkuNi0xMS42LTI5LjgtMTUuNS02My42LTI0LjMtOTkuNS0yNC4zLTExOS4xIDAtMjE1LjYgOTYuNS0yMTUuNiAyMTUuNiAwIDExOSA5Ni41IDIxNS42IDIxNS42IDIxNS42UzQ0NS4zIDM4MC4xIDQ0NS4zIDI2MWMwLTM4LjQtMTAuMS03NC41LTI3LjctMTA1LjgtMy45IDctNy42IDEzLjMtMTAuOSAxOC44eiJdCiAgICB9OwogICAgZmFPZHlzZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2R5c2VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YzYiLCAiTTQwNi43IDQ2M2MtNDIuMyAzMC44LTk0LjQgNDktMTUwLjcgNDktMTExLjEgMC0yMDUuNy03MC44LTI0MS4xLTE2OS44IDIuNCAxLjcgNS45IDMuNiA3LjkgNC40IDE2LjMgNy40IDQwLjEtNS40IDYyLjktMjguNyA2LjktNi45IDE0LjQtMTIuNCAyMi44LTE3LjMgMTguMy0xMS45IDM3LjYtMjAuOCA1OC40LTI3LjIgMCAwIDIyLjMgMzQuMiA0My4xIDc0LjhzLTIyLjMgNTQtMjcuMiA1NGMtLjMgMC0uOCAwLTEuNS0uMS0xMS0uNS03MC0zLTU2IDUxLjEgMTQuOSA1Ny40IDk3LjUgMzYuNiAxMzkuNiA4LjlzMzEuNy0xMTguMyAzMS43LTExOC4zYzQxLjEtNi40IDU0IDM3LjEgNTcuOSA1OS40IC44IDQuNiAxLjEgOS45IDEuNCAxNS41IDEuMSAyMS4yIDIuMyA0NS42IDM1LjMgNDYuNCA1LjMgMCAxMC42LS44IDE1LjUtMmwwLS4xem0tOTUuMy0yMy43Yy0yLS41LTMuNS0yLjUtMy01IDEtMi41IDMtMy41IDUtM3MzLjUgMyAzIDUtMi41IDMuNS01IDN6bS0yMDctOTUuNmMxLjUtLjUgMy41IDEgNCAzIDAgMi0xIDQtMyA0LTEuNSAuNS0zLjUtMS00LTMtLjUtMS41IDEtMy41IDMtNHpNNDUxLjggNDIxYzM3LjUtNDQuNiA2MC4yLTEwMi4yIDYwLjItMTY1IDAtNjcuNS0yNi4xLTEyOC45LTY4LjgtMTc0LjctLjEgMjMuNS02LjEgNDguMi0xNi44IDY5LjItMTEuOSAyMC4zLTQ5IDU4LjktNjkuOCA3OC43LS43IC4zLTEuMSAuOS0xLjUgMS40LS4yIC4yLS4zIC40LS41IC42LTUgNi45LTQgMTYuOCAzIDIxLjggMjEuMyAxNS44IDU2LjQgNDUuNiA1OS40IDcyLjggMy41IDM0LjkgMjcuOSA3NS42IDM0LjIgODYuMiAuOCAxLjMgMS4zIDIuMSAxLjQgMi40IDAgMi4yLS40IDQuMy0uOCA2LjVsMCAuMXpNMzkwLjcgMjUxYy0uNSAzIDEgNS45IDQgNi40czUuOS0xIDYuNC00LTEtNS45LTQtNi40Yy0zLTEtNS45IDEtNi40IDR6bTYxLjQtNjAuOWwtMTEuNCA1LjQtMyAxMi45LTUuNC0xMS40LTEyLjktMyAxMS40LTUuNCAzLTEyLjkgNS40IDExLjQgMTIuOSAzek0zOTUuNSA0MS4zYy0xNi4yIDguMi0yMi4xIDMyLjgtMjkgNjEuNC0uMyAxLjQtLjcgMi44LTEgNC4yLTkuNSAzOC41LTMwLjYgMzcuNi00MS43IDM3LjItMS4xIDAtMi0uMS0yLjktLjEtNS4xIDAtNi00LTguOS0xNy4xLTIuNi0xMi4xLTYuOS0zMi0xNy45LTYzLjYtMjIuNy02NS44LTgyLjctNDkuNC0xMjguMi0yMi4yLTU1LjMgMzMuMS0zNC40IDEwMS45LTE5LjggMTQ5LjQgLjcgMi4yIDEuNCA0LjQgMiA2LjYtNCA0LTEzLjggNy41LTI2IDExLjktMTIuMSA0LjMtMjYuNiA5LjUtNDAuMyAxNi45LTMzLjkgMTgtNzAuMyA0OS03OS44IDYyLjYtMS4zLTEwLjctMi0yMS41LTItMzIuNSAwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDUxLjQgMCA5OS40IDE1LjIgMTM5LjUgNDEuM3pNNTguOSAxODkuNmMtMS41LTItNC41LTMtNi40LTEuNXMtMyA0LjUtMS41IDYuNCA0LjUgMyA2LjQgMS41YzIuNS0xLjUgMy00LjUgMS41LTYuNHpNMzI3LjMgNjQuOWMyLTEuNSA1LS41IDYuNCAxLjUgMS41IDIuNSAxIDUuNC0xLjUgNi40LTIgMS41LTUgLjUtNi40LTEuNXMtLjUtNSAxLjUtNi40ek05NS4xIDEwNWMtLjUgMS41IC41IDMgMiAzIDEuNSAuNSAzLS41IDMtMiAuNS0xLjUtLjUtMy0yLTNzLTMgLjUtMyAyem04NC43LS41Yy0zLjUtNDMuMSAzNy4xLTU0IDM3LjEtNTQgNDQuMS0xNS40IDU2IDUuOSA2Ni40IDM3LjZzMyA0Mi42LTM4LjYgNTguOS02MS45LTQuNS02NC45LTQyLjZsMCAuMXptODkuNiAxNC45bDEgMGMyLjUgMCA1LTIgNS01IDItNi45IDEtMTQuNC0yLTIwLjgtMS41LTItNC0zLjUtNi40LTIuNS0zIDEtNC41IDQtMy41IDYuOSAyIDQuNSAzIDkuOSAxLjUgMTQuOS0uNSAzIDEuNSA1LjkgNC41IDYuNGwtLjEgLjF6bS05LjktNDEuNmMtMiAwLTQtMS01LTNzLTItMy41LTMtNWMtMi0yLTItNS40IDAtNy40czUuNC0yIDcuNCAwYzIgMi41IDMuNSA1IDUgNy40cy41IDUuOS0yLjUgNy40Yy0uNiAwLTEgLjItMS4zIC4zLS4yIC4xLS40IC4yLS42IC4ybDAgLjF6Il0KICAgIH07CiAgICBmYUdnQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdnLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjYxIiwgIk0yNTcuNSA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMjA4IDM4Mi44bC0xMjUuNy0xMjUuNyAxMjUuNy0xMjUuNyAzNS4yIDM1LjQtMjQuMiAyNC4yLTExLjEtMTEuMS03Ny4yIDc3LjIgNzcuMiA3Ny4yIDI2LjYtMjYuNi01My4xLTUyLjkgMjQuNC0yNC40IDc3LjIgNzcuMi03NSA3NS4yem05OS0yLjJsLTM1LjItMzUuMiAyNC4xLTI0LjQgMTEuMSAxMS4xIDc3LjItNzcuMi03Ny4yLTc3LjItMjYuNSAyNi41IDUzLjEgNTIuOS0yNC40IDI0LjQtNzcuMi03Ny4yIDc1LTc1IDEyNS43IDEyNS43LTEyNS43IDEyNS42eiJdCiAgICB9OwogICAgZmFDbG91ZGZsYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3VkZmxhcmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA3ZCIsICJNNDA3LjkgMzE5LjlMMTc3LjEgMzE3Yy0uNyAwLTEuNC0uMi0yLS41cy0xLjItLjgtMS42LTEuNGMtLjQtLjYtLjctMS4zLS43LTJzMC0xLjQgLjItMi4xYy40LTEuMSAxLjEtMi4xIDIuMS0yLjhzMi4xLTEuMiAzLjMtMS4ybDIzMi45LTIuOWMyNy42LTEuMyA1Ny41LTIzLjYgNjgtNTAuOGwxMy4zLTM0LjVjLjQtLjkgLjUtMS45IC41LTIuOSAwLS41LS4xLTEuMS0uMi0xLjYtNy40LTMyLjItMjUtNjEuMS01MC4zLTgyLjNzLTU2LjctMzMuNy04OS43LTM1LjUtNjUuNiA3LjMtOTMgMjUuNy00OCA0NS4zLTU4LjggNzYuNWMtMTEuMy04LjUtMjQuOS0xMy4zLTM5LTEzLjdzLTI4IDMuNS0zOS44IDExLjQtMjAuOCAxOS4xLTI1LjkgMzIuMy01LjkgMjcuNi0yLjQgNDEuM2MtNTIuMyAxLjUtOTQuMiA0NC4xLTk0LjIgOTYuNSAwIDQuNyAuMyA5LjMgMSAxNCAuMiAxLjEgLjcgMi4xIDEuNSAyLjhzMS45IDEuMSAyLjkgMS4xbDQyNi4xIC4xYzAgMCAuMSAwIC4xIDAgMS4yIDAgMi4zLS40IDMuMy0xLjFzMS42LTEuNyAyLTIuOWwzLjMtMTEuM2MzLjktMTMuNCAyLjQtMjUuOC00LjEtMzQuOS02LTguNC0xNi4xLTEzLjMtMjguMi0xMy45em0xMDUuOS05OC44Yy0yLjEgMC00LjMgLjEtNi40IC4yLS44IC4xLTEuNSAuMy0yLjEgLjhzLTEgMS4xLTEuMyAxLjhsLTkuMSAzMS4yYy0zLjkgMTMuNC0yLjQgMjUuOCA0LjEgMzQuOSA2IDguNCAxNi4xIDEzLjMgMjguMiAxMy45bDQ5LjIgMi45Yy43IDAgMS40IC4yIDIgLjVzMS4xIC44IDEuNSAxLjRjLjQgLjYgLjcgMS4zIC44IDJzMCAxLjUtLjIgMi4xYy0uNCAxLjEtMS4xIDIuMS0yLjEgMi44cy0yLjEgMS4yLTMuMyAxLjJsLTUxLjEgMi45Yy0yNy44IDEuMy01Ny43IDIzLjYtNjguMSA1MC44bC0zLjcgOS42Yy0uMiAuNC0uMiAuOC0uMiAxLjNzLjIgLjggLjQgMS4yIC42IC43IC45IC45IC44IC4zIDEuMiAuM2MwIDAgLjEgMCAuMSAwbDE3NS45IDBjMSAwIDItLjMgMi44LS45czEuNC0xLjUgMS43LTIuNGMzLjEtMTEuMSA0LjctMjIuNSA0LjctMzQgMC02OS4zLTU2LjUtMTI1LjUtMTI2LjEtMTI1LjV6Il0KICAgIH07CiAgICBmYUhhY2tlcnJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFja2VycmFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWY3IiwgIk00NzcuOSAxMjhDNDYzLjQgMTAzIDI4NS41IDAgMjU2LjUgMHMtMjA2LjkgMTAyLjgtMjIxLjMgMTI4LTE0LjUgMjMwLjggMCAyNTYgMTkyLjQgMTI4IDIyMS4zIDEyOCAyMDYuOC0xMDIuOSAyMjEuMy0xMjggMTQuNS0yMzEgMC0yNTZ6TTMxNi41IDQxNC4yYy00IDAtNDAuOS0zNS44LTM4LTM4LjcgLjktLjkgNi4zLTEuNSAxNy41LTEuOCAwLTI2LjIgLjYtNjguNiAuOS04Ni4zIDAtMi0uNC0zLjQtLjQtNS44bC03OS45IDBjMCA3LjEtLjUgMzYuMiAxLjQgNzIuOSAuMiA0LjUtMS42IDYtNS43IDUuOS0xMC4xIDAtMjAuMy0uMS0zMC40LS4xLTQuMSAwLTUuOS0xLjUtNS43LTYuMSAuOS0zMy40IDMtODQtLjItMjEyLjdsMC0zLjJjLTkuNy0uNC0xNi40LTEtMTcuMy0xLjgtMi45LTIuOSAzNC41LTM4LjcgMzguNS0zOC43czQxLjIgMzUuOCAzOC4zIDM4LjdjLS45IC45LTcuOSAxLjUtMTYuOCAxLjhsMCAzLjJjLTIuNCAyNS44LTIgNzkuNi0yLjYgMTA1LjRsODAuMyAwYzAtNC42IC40LTM0LjctMS4yLTgzLjYtLjEtMy40IDEtNS4yIDQuMi01LjIgMTEuMS0uMSAyMi4yLS4xIDMzLjItLjEgMy41IDAgNC42IDEuNyA0LjUgNS40LTMuNyAxOTEuMy0uNyAxNzcuOS0uNyAyMTAuMyA4LjkgLjQgMTYuOCAxIDE3LjcgMS44IDIuOSAyLjktMzMuNiAzOC43LTM3LjYgMzguN2wwIDB6Il0KICAgIH07CiAgICBmYVNreWF0bGFzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNreWF0bGFzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTYiLCAiTTY0MCAzMjkuM2MwIDY1LjktNTIuNSAxMTQuNC0xMTcuNSAxMTQuNC0xNjUuOSAwLTE5Ni42LTI0OS43LTM1OS43LTI0OS43LTE0Ni45IDAtMTQ3LjEgMjEyLjIgNS42IDIxMi4yIDQyLjUgMCA5MC45LTE3LjggMTI1LjMtNDIuNSA1LjYtNC4xIDE2LjktMTYuMyAyMi44LTE2LjNzMTAuOSA1IDEwLjkgMTAuOWMwIDcuOC0xMy4xIDE5LjEtMTguNyAyNC4xLTQwLjkgMzUuNi0xMDAuMyA2MS4yLTE1NC43IDYxLjItODMuNCAuMS0xNTQtNTktMTU0LTE0NC45UzY3LjUgMTQ5LjYgMTUyLjggMTQ5LjZjMTg1LjMgMCAyMjIuNSAyNDUuOSAzNjEuOSAyNDUuOSA5OS45IDAgOTQuOC0xMzkuNyAzLjQtMTM5LjctMTcuNSAwLTM1IDExLjYtNDYuOSAxMS42LTguNCAwLTE1LjktNy4yLTE1LjktMTUuNiAwLTExLjYgNS4zLTIzLjcgNS4zLTM2LjMgMC02Ni42LTUwLjktMTE0LjctMTE2LjktMTE0LjctNTMuMSAwLTgwIDM2LjktODguOCAzNi45LTYuMiAwLTExLjItNS0xMS4yLTExLjIgMC01LjYgNC4xLTEwLjMgNy44LTE0LjQgMjUuMy0yOC44IDY0LjctNDMuNyAxMDIuOC00My43IDc5LjQgMCAxMzkuMSA1OC40IDEzOS4xIDEzNy44IDAgNi45LS4zIDEzLjctMS4yIDIwLjYgMTEuOS0zLjEgMjQuMS00LjcgMzUuOS00LjcgNjAuNyAwIDExMS45IDQ1LjMgMTExLjkgMTA3LjJ6Il0KICAgIH07CiAgICBmYURlc2twcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVza3BybyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzhmIiwgIk0xMjIgNDA2LjJsODQgMGMyMy4xIDAgNDMuOS0zLjUgNjIuNi0xMC43IDE4LjctNy4xIDM0LjctMTcuMSA0OC0zMC4xIDEzLjMtMTMuNCAyMy42LTI5LjIgMzAuNy00Ny41IDMuOS05LjYgNi44LTE5LjggOC42LTMwLjZsNzMuNyAwYy0yLjUgMjEuMy03LjcgNDEuMy0xNS41IDYwLTExLjEgMjcuMi0yNi45IDUwLjgtNDcuMyA3MC45LTIwIDE5LjYtNDQuMiAzNC44LTcyLjYgNDUuNHMtNjAgMTYtOTQuNyAxNmwtMTQ5LjggLjIgMC0xOTIuNCA3Mi4zLS4yIDAgMTE4Ljh6TTE5OS40IDMyYzM0LjcgMCA2Ni4yIDUuNCA5NC43IDE2IDI4LjUgMTAuNyA1Mi45IDI2LjEgNzMuMyA0Ni4yIDIwLjQgMTkuNiAzNi4yIDQzLjIgNDcuMyA3MC45IDcuNSAxOC4zIDEyLjQgMzguMSAxNC45IDU5LjNsLTczLjctLjFjLTEuOS0xMC41LTQuNy0yMC41LTguNi0yOS45LTcuMS0xOC43LTE3LjMtMzQuNS0zMC43LTQ3LjUtMTMuMy0xMy40LTI5LjMtMjMuNi00OC0zMC44LTE4LjYtNy4xLTM5LjUtMTAuNy02Mi43LTEwLjdsLTg0IDAgMCAxMTguOC03Mi4yIC4yIDAtMTkyLjMgMTQ5LjctLjF6Il0KICAgIH07CiAgICBmYVJlc29sdmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNvbHZpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlNyIsICJNMjg5LjIgMjc4LjJjNDYtMTMuMyA0OS42LTIzLjUgNDQtNDMuNEwzMjIgMTk1LjVjLTYuMS0yMC45LTE4LjQtMjguMS03MS4xLTEyLjhsLTE4OC4yIDU0LjEgMjguNiA5OC42IDE5Ny45LTU3LjJ6TTI1Ni41IDhDMTM5LjQgOCA0MS4yIDg4LjcgMTUuMiAxOTcuNWwyMjEuOS02My45YzM0LjgtMTAuMiA1NC4yLTExLjcgNzkuMy04LjIgMzYuMyA2LjEgNTIuNyAyNSA2MS40IDU1LjJsMTAuNyAzNy44YzguMiAyOC4xIDEgNTAuNi0yMy41IDczLjYtMTkuNCAxNy40LTMxLjIgMjQuNS02MS40IDMzLjJsLTkyLjYgMjYuNiAyMjAuNCAyNy4xIDkuNyAzNC4yLTQ4LjEgMTMuMy0yODYuOC0zNy4zIDIzIDgwLjJDMTY2IDQ5MS4zIDIwOS41IDUwNCAyNTUuNSA1MDQgMzkyLjUgNTA0IDUwNCAzOTIuNiA1MDQgMjU1LjcgNTA1IDExOS40IDM5My41IDggMjU2LjUgOHpNNDYuMyAzODguNkw4IDI1Ni44YzAgNDguNSAxNC4zIDkzLjQgMzguMyAxMzEuOHoiXQogICAgfTsKICAgIGZhQmxhY2tiZXJyeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibGFja2JlcnJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzN2IiLCAiTTE2NiAxMTYuOWMwIDIzLjQtMTYuNCA0OS4xLTcyLjUgNDkuMWwtNzAuMSAwIDIxLTg4LjggNjcuOCAwYzQyLjEgMCA1My44IDIzLjMgNTMuOCAzOS43ek0yOTIuMiA3Ny4ybC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi40LTExLjYtMzkuNy01My43LTM5Ljd6TTg4LjggMjA4LjFsLTY3LjggMC0yMSA4OC44IDcwLjEgMGM1Ni4xIDAgNzIuNS0yMy40IDcyLjUtNDkuMSAwLTE2LjMtMTEuNy0zOS43LTUzLjgtMzkuN3ptMTgwLjEgMGwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My43LTM5Ljd6bTE4OS4zLTUzLjhsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIC4xLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3ptLTI4IDEzNy45bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yMy40IDcwLjEtNDkuMSAwLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3pNMjQwLjggMzQ2bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6Il0KICAgIH07CiAgICBmYVN0cmlwZVMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyaXBlLXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyYSIsICJNMTU1LjYgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43bDAtMTM0LjNjLTQ3LjMtMTguOS05NC41LTI2LjEtMTQxLjgtMjYuMS0xMTUuNyAwLTE5Mi44IDYwLjQtMTkyLjggMTYxLjQgMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41bDAgMTI4LjVjNDkuMyAyMS4zIDEwMi4zIDMyLjMgMTU2IDMyLjQgMTE4LjYgMCAyMDAuMy01MSAyMDAuMy0xNTMuNiAwLTE3MC4yLTIxOC0xMzkuNy0yMTgtMjAzLjl6Il0KICAgIH07CiAgICBmYVNxdWFyZUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJlaGFuY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYmVoYW5jZS1zcXVhcmUiXSwgImYxYjUiLCAiTTE1NS4zIDMxOC40YzE3LjIgMCAzMS4yLTYuMSAzMS4yLTI1LjQgMC0xOS43LTExLjctMjcuNC0zMC4zLTI3LjVsLTQ2IDAgMCA1Mi45IDQ1LjEgMHptLTUuNC0xMjkuNmwtMzkuNiAwIDAgNDQuOCA0Mi43IDBjMTUuMSAwIDI1LjgtNi42IDI1LjgtMjIuOSAwLTE3LjctMTMuNy0yMS45LTI4LjktMjEuOXptMTI5LjUgNzQuOGw2Mi4yIDBjLTEuNy0xOC41LTExLjMtMjkuNy0zMC41LTI5LjctMTguMyAwLTMwLjUgMTEuNC0zMS43IDI5Ljd6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0zNDkuNSAxODVsLTc3LjggMCAwLTE4LjkgNzcuOCAwIDAgMTguOXpNMTkzLjcgMjQzLjdjMjMuNiA2LjcgMzUgMjcuNSAzNSA1MS42IDAgMzktMzIuNyA1NS43LTY3LjYgNTUuOWwtOTMuMSAwIDAtMTkyIDkwLjUgMGMzMi45IDAgNjEuNCA5LjMgNjEuNCA0Ny41IDAgMTkuMy05IDI4LjgtMjYuMiAzN3ptMTE4LjctMzguNmM0My41IDAgNjcuNiAzNC4zIDY3LjYgNzUuNCAwIDEuNi0uMSAzLjMtLjIgNSAwIC44LS4xIDEuNS0uMSAyLjJsLTEwMC4yIDBjMCAyMi4yIDExLjcgMzUuMyAzNC4xIDM1LjMgMTEuNiAwIDI2LjUtNi4yIDMwLjItMTguMWwzMy43IDBjLTEwLjQgMzEuOS0zMS45IDQ2LjgtNjUuMSA0Ni44LTQzLjggMC03MS4xLTI5LjctNzEuMS03MyAwLTQxLjggMjguNy03My42IDcxLjEtNzMuNnoiXQogICAgfTsKICAgIGZhQmVoYW5jZVNxdWFyZSA9IGZhU3F1YXJlQmVoYW5jZTsKICAgIGZhU2VydmljZXN0YWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlcnZpY2VzdGFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2VjIiwgIk05NiAyMTZjODEuNyAxMC4yIDI3My43IDEwMi4zIDMwNCAyMzJMOCA0NDhjOTkuNS04LjEgMTg0LjUtMTM3IDg4LTIzMnpNMTI4IDY0YzMyLjMgMzUuNiA0Ny43IDgzLjkgNDYuNCAxMzMuNiA4Mi45IDMzLjcgMjA3LjMgMTIzLjcgMjMzLjYgMjUwLjRsOTYgMEM0NjMuMyAyMzEuOSAyMzAuOCA3OS41IDEyOCA2NHoiXQogICAgfTsKICAgIGZhUm9ja2V0Y2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXRjaGF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZTgiLCAiTTI4NC41IDIyNC44Yy02LjcgMC0xMy4zIDIuMS0xOC45IDUuOHMtOS45IDkuMS0xMi41IDE1LjQtMy4yIDEzLjEtMS45IDE5LjcgNC42IDEyLjcgOS40IDE3LjQgMTAuOSA4IDE3LjUgOS4zIDEzLjUgLjYgMTkuNy0yIDExLjUtNyAxNS4zLTEyLjYgNS43LTEyLjIgNS43LTE4LjljMC05LjEtMy43LTE3LjgtMTAuMS0yNC4ycy0xNS4xLTEwLTI0LjItOS45em0tMTEwLjQgMGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTEwbDAgMHptMjIwLjkgMGEzNC4xIDM0LjEgMCAxIDAgLjQgNjguMiAzNC4xIDM0LjEgMCAxIDAgLS40LTY4LjJ6bTE1My44LTU1LjNjLTE1LjUtMjQuMi0zNy4zLTQ1LjYtNjQuNy02My42LTUyLjktMzQuOC0xMjIuNC01NC0xOTUuNy01NC0yNC4yIDAtNDguMyAyLjEtNzIgNi40LTE0LjktMTQuMy0zMS41LTI2LjYtNDkuNS0zNi42LTY2LjgtMzMuMy0xMjUuNi0yMC45LTE1NS4zLTEwLjItMi4zIC44LTQuMyAyLjEtNS45IDMuOXMtMi43IDMuOS0zLjMgNi4yLS41IDQuNyAuMSA3LjEgMS44IDQuNCAzLjUgNi4xQzI3IDU2LjUgNjEuNiA5OS4zIDUzLjEgMTM4LjMgMjAgMTcyLjIgMiAyMTMgMiAyNTUuNiAyIDI5OSAyMCAzMzkuOCA1My4xIDM3My43IDYxLjYgNDEyLjcgMjcgNDU1LjYgNiA0NzcuMiA0LjMgNDc5IDMuMiA0ODEuMSAyLjUgNDgzLjRzLS43IDQuNy0uMSA3IDEuNyA0LjUgMy4zIDYuMiAzLjYgMy4xIDUuOSAzLjljMjkuNyAxMC43IDg4LjUgMjMuMSAxNTUuMy0xMC4yIDE4LTEwIDM0LjctMjIuMyA0OS41LTM2LjYgMjMuOCA0LjMgNDcuOSA2LjQgNzIgNi40IDczLjMgMCAxNDIuOC0xOS4yIDE5NS43LTU0IDI3LjQtMTggNDkuMS0zOS40IDY0LjctNjMuNiAxNy4zLTI2LjkgMjYuMS01NS45IDI2LjEtODYuMSAwLTMxLTguOC02MC0yNi4xLTg2LjlsMCAwek0yODUuNCA0MDkuOWMtMzAuMiAuMS02MC4zLTMuOC04OS40LTExLjVsLTIwLjEgMTkuNGMtMTEuMiAxMC43LTIzLjYgMjAtMzcuMSAyNy42LTE2LjQgOC4yLTM0LjIgMTMuMy01Mi41IDE0LjkgMS0xLjggMS45LTMuNiAyLjgtNS40IDIwLjItMzcuMSAyNS42LTcwLjUgMTYuMy0xMDAuMS0zMy0yNi01Mi44LTU5LjItNTIuOC05NS40IDAtODMuMSAxMDQuMy0xNTAuNSAyMzIuOC0xNTAuNXMyMzIuOSA2Ny40IDIzMi45IDE1MC41YzAgODMuMS0xMDQuMyAxNTAuNS0yMzIuOSAxNTAuNXoiXQogICAgfTsKICAgIGZhUmViZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmViZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFkMCIsICJNMjU2LjkgNTA0Yy0xMzkuMyAwLTI0Ny41LTExNi4yLTI0My4zLTI1NC4xIDIuOC03OS4yIDQzLjItMTUyLjIgMTE2LjUtMjAwLjQgLjMgMCAxLjktLjYgMS4xIC44LTUuOCA1LjUtMTExLjMgMTI5LjgtMTQuMSAyMjYuNCA0OS44IDQ5LjUgOTAgMi41IDkwIDIuNSAzOC41LTUwLjEtLjYtMTI1LjktLjYtMTI1LjktMTAtMjQuOS00NS43LTQwLjEtNDUuNy00MC4xbDI4LjgtMzEuOGMyNC40IDEwLjUgNDMuMiAzOC43IDQzLjIgMzguNyAuOC0yOS42LTIxLjktNjEuNC0yMS45LTYxLjRMMjU1LjUgOCAyOTkuOCA1OC4xYy0yMC41IDI4LjgtMjEuOSA2Mi42LTIxLjkgNjIuNiAxMy44LTIzIDQzLjUtMzkuMyA0My41LTM5LjNsMjguNSAzMS44Yy0yNy40IDguOS00NS40IDM5LjktNDUuNCAzOS45LTE1LjggMjguNS0yNy4xIDg5LjQgLjYgMTI3LjMgMzIuNCA0NC42IDg3LjctMi44IDg3LjctMi44IDEwMi43LTkxLjktMTAuNS0yMjUtMTAuNS0yMjUtNi4xLTUuNSAuOC0yLjggLjgtMi44IDUwLjEgMzYuNSAxMTQuNiA4NC40IDExNi4yIDIwNC44IDIgMTQ1LjYtOTkuOSAyNDkuNC0yNDIuNCAyNDkuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlV2ViQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2ViLWF3ZXNvbWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY4MyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjM1IDE3Ny42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il0KICAgIH07CiAgICBmYUxpbmt0cmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmt0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDgiLCAiTTE2IDE3My40bDEyNS44IDAtODkuNC04NS40IDQ5LjUtNTEgODUuMiA4Ny44IDAtMTI0LjggNzMuOSAwIDAgMTI0LjggODUuMi04Ny42IDQ5LjQgNTAuOC04OS40IDg1LjIgMTI1LjcgMCAwIDcwLjUtMTI2LjQgMCA5MCA4Ny42LTQ5LjMgNDkuOC0xMjIuMi0xMjMtMTIyLjIgMTIzLTQ5LjUtNDkuNiA5MC04Ny42LTEyNi40IDAgMC03MC41ek0xODYuOSAzNDQuOGw3My45IDAgMCAxNjcuMi03My45IDAgMC0xNjcuMnoiXQogICAgfTsKICAgIGZhU2ltcGx5YnVpbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2ltcGx5YnVpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIxNSIsICJNNDgxLjYgNjRsLTEwNiAwQzM2MS4xIDY0IDM0OSA3NS44IDM0OSA5MC4zbDAgMzkuNi0xODUuMyAwIDAtMzkuNmMwLTE0LjUtMTItMjYuMy0yNi42LTI2LjNsLTEwNiAwQzE2LjUgNjQgNC43IDc1LjggNC43IDkwLjNsMCAzMzEuNGMwIDE0LjUgMTEuOCAyNi4zIDI2LjYgMjYuM2w0NTAuNCAwYzE0LjggMCAyNi42LTExLjggMjYuNi0yNi4zbDAtMzMxLjRjLS4yLTE0LjUtMTItMjYuMy0yNi43LTI2LjN6TTE1MC41IDIyMi43YTY2LjUgNjYuNSAwIDEgMSAtLjMgMTMzLjEgNjYuNSA2Ni41IDAgMSAxIC4zLTEzMy4xem0yMTEuOSAuMWE2Ni41IDY2LjUgMCAxIDEgLjMgMTMyLjkgNjYuNSA2Ni41IDAgMSAxIC0uMy0xMzIuOXoiXQogICAgfTsKICAgIGZhU3R1YmJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHViYmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1YzciLCAiTTEzNi41IDI5NC4ybDU4LjggMjIuOWM5LjEtMzYuOCAyNS40LTYxLjEgNTUtNjEuMSA0OS40IDAgNzEuNCA2My42IDE0Mi40IDYzLjYgMTUuNiAwIDM1LjktMi44IDU1LjMtMTMuM2wwIDYxLjdjMCA2MS44LTUwLjQgMTEyLTExMi4zIDExMkwwIDQ4MCA0MS44IDQyNCAwIDM2OCA0MS43IDMxMiAwIDI1Ni4xIDQxLjggMjAwLjEgMCAxNDQuMSA0MS44IDg4IDAgMzIgMzM1LjcgMzJDMzk3LjYgMzIgNDQ4IDgyLjMgNDQ4IDE0NC4xbDAgNTEuM2MtOS4yIDM2LjMtMjUuOSA2MC42LTU1IDYwLjYtNDkuNiAwLTcxLjYtNjMuNS0xNDIuNC02My41LTM1LjkgMC05NS4yIDE0LjYtMTE0LjEgMTAxLjZsMCAuMXoiXQogICAgfTsKICAgIGZhQXBwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM3MSIsICJNNDIuMSAyMzkuMWMyMi4yIDAgMjkgMi44IDMzLjUgMTQuNmwuOCAwIDAtMjIuOWMwLTExLjMtNC44LTE1LjQtMTcuOS0xNS40LTExLjMgMC0xNC40IDIuNS0xNS4xIDEyLjhsLTM4LjYgMGMuMy0xMy45IDEuNS0xOS4xIDUuOC0yNC40IDcuMy04LjggMTguOS0xMS44IDQ2LjEtMTEuOCAzMyAwIDQ3LjEgNSA1My45IDE4LjkgMiA0LjMgNCAxNS42IDQgMjMuN2wwIDc2LjMtMzguMyAwIDEuMy0xOS4xLTEgMGMtNS4zIDE1LjYtMTMuNiAyMC40LTM1LjUgMjAuNC0zMC4zIDAtNDEuMS0xMC4xLTQxLjEtMzcuMyAwLTI1LjIgMTIuMy0zNS44IDQyLjEtMzUuOHptMTcuMSA0OC4xYzEzLjEgMCAxNi45LTMgMTYuOS0xMy40IDAtOS4xLTQuMy0xMS42LTE5LjYtMTEuNi0xMy4xIDAtMTcuOSAzLTE3LjkgMTIuMS0uMSAxMC40IDMuNyAxMi45IDIwLjYgMTIuOXpNMTM3IDE5Mi4zbDM4LjMgMC0xLjUgMjAuNiAuOCAwYzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjIgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4ybC0uOCAwIDAgNzAuMy0zOS41IDAgMC0xNjl6TTIxNy45IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTU3LjktNjAuN2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4zIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5IC4xIDB6TTM1Ni43IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTUzLjgtMy44YzAtMjUuNCAzLjMtMzcuOCAxMi4zLTQ1LjggOC44LTguMSAyMi4yLTExLjMgNDUuMS0xMS4zIDQyLjggMCA1NS43IDEyLjggNTUuNyA1NS43bDAgMTEuMS03NS4zIDBjLS4zIDItLjMgNC0uMyA0LjggMCAxNi45IDQuNSAyMS45IDIwLjEgMjEuOSAxMy45IDAgMTcuOS0zIDE3LjktMTMuOWwzNy41IDAgMCAyLjNjMCA5LjgtMi41IDE4LjktNi44IDI0LjctNy4zIDkuOC0xOS42IDEzLjYtNDQuMyAxMy42LTI3LjUgMC00MS42LTMuMy01MC42LTEyLjMtOC41LTguNS0xMS4zLTIxLjMtMTEuMy01MC44em03Ni40LTExLjZjLS4zLTEuOC0uMy0zLjMtLjMtMy44IDAtMTIuMy0zLjMtMTQuNi0xOS42LTE0LjYtMTQuNCAwLTE3LjEgMy0xOC4xIDE1LjFsLS4zIDMuMyAzOC4zIDB6bTU1LjYtNDUuM2wzOC4zIDAtMS44IDE5LjkgLjcgMGM2LjgtMTQuOSAxNC40LTIwLjIgMjkuNy0yMC4yIDEwLjggMCAxOS4xIDMuMyAyMy40IDkuMyA1LjMgNy4zIDYuOCAxNC40IDYuOCAzNCAwIDEuNSAwIDUgLjIgOS4zbC0zNSAwYy4zLTEuOCAuMy0zLjMgLjMtNCAwLTE1LjQtMi0xOS40LTEwLjMtMTkuNC02LjMgMC0xMC44IDMuMy0xMy4xIDkuMy0xIDMtMSA0LjMtMSAxMi4zbDAgNjgtMzguMyAwIDAtMTE4LjUgLjEgMHoiXQogICAgfTsKICAgIGZhR29vZ2xlU2Nob2xhciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtc2Nob2xhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjNiIiwgIk0zOTAuOSAyOTguNXMwIC4xIC4xIC4xYzkuMiAxOS40IDE0LjQgNDEuMSAxNC40IDY0LS4xIDgyLjUtNjYuOSAxNDkuNC0xNDkuNCAxNDkuNFMxMDYuNyA0NDUuMSAxMDYuNyAzNjIuN2MwLTIyLjkgNS4yLTQ0LjYgMTQuNC02NCAxLjctMy42IDMuNi03LjIgNS42LTEwLjcgNC40LTcuNiA5LjQtMTQuNyAxNS0yMS4zIDI3LjQtMzIuNiA2OC41LTUzLjMgMTE0LjQtNTMuMyAzMy42IDAgNjQuNiAxMS4xIDg5LjYgMjkuOSA5LjEgNi45IDE3LjQgMTQuNyAyNC44IDIzLjUgNS42IDYuNiAxMC42IDEzLjggMTUgMjEuMyAyIDMuNCAzLjggNyA1LjUgMTAuNWwtLjEtLjF6bTI2LjQtMTguOGMtMzAuMS01OC40LTkxLTk4LjQtMTYxLjMtOTguNHMtMTMxLjIgNDAtMTYxLjMgOTguNGwtOTQuNy03NyAyNTYtMjAyLjcgMjU2IDIwMi43LTk0LjcgNzcuMSAwLS4xeiJdCiAgICB9OwogICAgZmFZYXJuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhcm4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlMyIsICJNNDAxLjkgMzQ1LjJjLTM5IDkuMy00OC40IDMyLjEtMTA0IDQ3LjQgMCAwLTIuNyA0LTEwLjQgNS44LTEzLjQgMy4zLTYzLjkgNi02OC41IDYuMS0xMi40IC4xLTE5LjktMy4yLTIyLTguMi02LjQtMTUuMyA5LjItMjIgOS4yLTIyLTguMS01LTktOS45LTkuOC04LjEtMi40IDUuOC0zLjYgMjAuMS0xMC4xIDI2LjUtOC44IDguOS0yNS41IDUuOS0zNS4zIC44LTEwLjgtNS43IC44LTE5LjIgLjgtMTkuMnMtNS44IDMuNC0xMC41LTMuNmMtNi05LjMtMTcuMS0zNy4zIDExLjUtNjItMS4zLTEwLjEtNC42LTUzLjcgNDAuNi04NS42IDAgMC0yMC42LTIyLjgtMTIuOS00My4zIDUtMTMuNCA3LTEzLjMgOC42LTEzLjkgNS43LTIuMiAxMS4zLTQuNiAxNS40LTkuMSAyMC42LTIyLjIgNDYuOC0xOCA0Ni44LTE4czEyLjQtMzcuOCAyMy45LTMwLjRjMy41IDIuMyAxNi4zIDMwLjYgMTYuMyAzMC42czEzLjYtNy45IDE1LjEtNWM4LjIgMTYgOS4yIDQ2LjUgNS42IDY1LjEtNi4xIDMwLjYtMjEuNCA0Ny4xLTI3LjYgNTcuNS0xLjQgMi40IDE2LjUgMTAgMjcuOCA0MS4zIDEwLjQgMjguNiAxLjEgNTIuNyAyLjggNTUuMyAuOCAxLjQgMTMuNyAuOCAzNi40LTEzLjIgMTIuOC03LjkgMjguMS0xNi45IDQ1LjQtMTcgMTYuNy0uNSAxNy42IDE5LjIgNC45IDIyLjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQxNi43IDc1LjJjLTEuNy0xMy42LTEzLjItMjMtMjgtMjIuOC0yMiAuMy00MC41IDExLjctNTIuOCAxOS4yLTQuOCAzLTguOSA1LjItMTIuNCA2LjggMy4xLTQ0LjUtMjIuNS03My4xLTI4LjctNzkuNCA3LjgtMTEuMyAxOC40LTI3LjggMjMuNC01My4yIDQuMy0yMS43IDMtNTUuNS02LjktNzQuNS0xLjYtMy4xLTcuNC0xMS4yLTIxLTcuNC05LjctMjAtMTMtMjIuMS0xNS42LTIzLjgtMS4xLS43LTIzLjYtMTYuNC00MS40IDI4LTEyLjIgLjktMzEuMyA1LjMtNDcuNSAyMi44LTIgMi4yLTUuOSAzLjgtMTAuMSA1LjRsLjEgMGMtOC40IDMtMTIuMyA5LjktMTYuOSAyMi4zLTYuNSAxNy40IC4yIDM0LjYgNi44IDQ1LjctMTcuOCAxNS45LTM3IDM5LjgtMzUuNyA4Mi41LTM0IDM2LTExLjggNzMtNS42IDc5LjYtMS42IDExLjEgMy43IDE5LjQgMTIgMjMuOCAxMi42IDYuNyAzMC4zIDkuNiA0My45IDIuOCA0LjkgNS4yIDEzLjggMTAuMSAzMCAxMC4xIDYuOCAwIDU4LTIuOSA3Mi42LTYuNSA2LjgtMS42IDExLjUtNC41IDE0LjYtNy4xIDkuOC0zLjEgMzYuOC0xMi4zIDYyLjItMjguNyAxOC0xMS43IDI0LjItMTQuMiAzNy42LTE3LjQgMTIuOS0zLjIgMjEtMTUuMSAxOS40LTI4LjJ6Il0KICAgIH07CiAgICBmYVN0YWNrT3ZlcmZsb3cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stb3ZlcmZsb3ciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2YyIsICJNMjkxIDMxMWwtMTk1LjctNDEuMy04LjIgMzkuMyAxOTUuNyA0MSA4LjItMzl6bTUxLTg3TDE4OC41IDk1LjcgMTYzIDEyNi41IDMxNi41IDI1NC44IDM0MiAyMjR6bS0zMS4yIDM5LjdMMTI5LjUgMTc5IDExMi44IDIxNS41IDI5NCAzMDAgMzEwLjggMjYzLjd6TTI2Mi4zIDMybC0zMiAyNCAxMTkuMyAxNjAuMyAzMi0yNC0xMTkuMy0xNjAuM3ptMjAuNSAzMjhsLTIwMCAwIDAgMzkuNyAyMDAgMCAwLTM5Ljd6bTM5LjcgODBsLTI3OS41IDAgMC0xMjAtNDAgMCAwIDE2MCAzNTkuNSAwIDAtMTYwLTQwIDAgMCAxMjB6Il0KICAgIH07CiAgICBmYUJsdWV0b290aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI5MyIsICJNMjYwLjYgMTcxLjFsLTQyLjkgNDIuOS0uMy04NiA0My4yIDQzLjF6TTIxNy40IDM5MC45bDQzLjEtNDMuMS00Mi45LTQyLjktLjIgODZ6TTM4NCAyNTkuNEMzODQgNDY1IDMxMi4xIDUxMiAxOTguOSA1MTJTMCA0NjUgMCAyNTkuNCA4My40IDAgMTk2LjYgMCAzODQgNTMuOSAzODQgMjU5LjR6bS0xNTguNSAwbDc5LjQtODguNi0xMjUuMS0xMzQuMyAwIDE3Ni45LTczLjgtNzMuOC0yNyAyNi45IDkyLjcgOTMtOTIuNyA5MyAyNi45IDI2LjkgNzMuOC03My44IDIuMyAxNzAgMTI3LjQtMTI3LjUtODMuOS04OC43eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtanAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuNCAxMTkuOCA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjIgNTA0IDI1NiA1MDQgMTE3LjIgMzk2LjUgOCAyNTUuNyA4em0uNiA0NTAuN2MtMTEyIDAtMjAzLjYtOTIuNS0yMDMuNi0yMDIuNyAwLTIxLjEgMy00MS4yIDktNjAuM2wxMjcgNTYuNS0yNy45IDAgMCAzOC42IDU4LjEgMCA1LjcgMTEuOCAwIDE4LjctNjMuOCAwIDAgMzguNyA2My44IDAgMCA1NiA2MS43IDAgMC01NiA2NC4yIDAgMC0zNS43IDgxIDM2LjFjLTEuNSAyLjItNTcuMSA5OC4zLTE3NS4yIDk4LjN6bTg3LjYtMTM3LjNsLTU3LjYgMCAwLTE4LjcgMi45LTUuNiA1NC43IDI0LjN6bTYuNS01MS40bDAtMTcuOC0zOC42IDAgNjMtMTE2LTY1LjggMC00My40IDk2LTIzLTEwLjItMzkuNi04NS43LTY1LjggMCAyNy4zIDUxLTgxLjktMzYuNWMyNy44LTQ0LjEgODIuNi05OC4xIDE3My43LTk4LjEgMTEyLjggMCAyMDMgOTAgMjAzIDIwMy40IDAgMjEtMi43IDQwLjYtNy45IDU5TDM1MC40IDI3MHoiXQogICAgfTsKICAgIGZhUmVkZGl0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWExIiwgIk0wIDI1NkMwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTYgMzk3LjQgNTEyIDI1NiA1MTJMMzcuMSA1MTJjLTEzLjcgMC0yMC41LTE2LjUtMTAuOS0yNi4yTDc1IDQzN0MyOC43IDM5MC43IDAgMzI2LjcgMCAyNTZ6TTM0OS42IDE1My42YzIzLjYgMCA0Mi43LTE5LjEgNDIuNy00Mi43cy0xOS4xLTQyLjctNDIuNy00Mi43Yy0yMC42IDAtMzcuOCAxNC42LTQxLjggMzQtMzQuNSAzLjctNjEuNCAzMy02MS40IDY4LjRsMCAuMmMtMzcuNSAxLjYtNzEuOCAxMi4zLTk5IDI5LjEtMTAuMS03LjgtMjIuOC0xMi41LTM2LjUtMTIuNS0zMyAwLTU5LjggMjYuOC01OS44IDU5LjggMCAyNCAxNC4xIDQ0LjYgMzQuNCA1NC4xIDIgNjkuNCA3Ny42IDEyNS4yIDE3MC42IDEyNS4yczE2OC43LTU1LjkgMTcwLjYtMTI1LjNjMjAuMi05LjYgMzQuMS0zMC4yIDM0LjEtNTQgMC0zMy0yNi44LTU5LjgtNTkuOC01OS44LTEzLjcgMC0yNi4zIDQuNi0zNi40IDEyLjQtMjcuNC0xNy02Mi4xLTI3LjctMTAwLTI5LjFsMC0uMmMwLTI1LjQgMTguOS00Ni41IDQzLjQtNDkuOSA0LjQgMTguOCAyMS4zIDMyLjggNDEuNSAzMi44bC4xIC4yek0xNzcuMSAyNDYuOWMxNi43IDAgMjkuNSAxNy42IDI4LjUgMzkuM3MtMTMuNSAyOS42LTMwLjMgMjkuNi0zMS40LTguOC0zMC40LTMwLjUgMTUuNC0zOC4zIDMyLjEtMzguM2wuMS0uMXptMTkwLjEgMzguM2MxIDIxLjctMTMuNyAzMC41LTMwLjQgMzAuNXMtMjkuMy03LjktMzAuMy0yOS42IDExLjgtMzkuMyAyOC41LTM5LjMgMzEuMiAxNi42IDMyLjEgMzguM2wuMSAuMXptLTQ4LjEgNTYuN2MtMTAuMyAyNC42LTM0LjYgNDEuOS02MyA0MS45cy01Mi43LTE3LjMtNjMtNDEuOWMtMS4yLTIuOSAuOC02LjIgMy45LTYuNSAxOC40LTEuOSAzOC4zLTIuOSA1OS4xLTIuOXM0MC43IDEgNTkuMSAyLjljMy4xIC4zIDUuMSAzLjYgMy45IDYuNXoiXQogICAgfTsKICAgIGZhQ29ubmVjdGRldmVsb3AgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29ubmVjdGRldmVsb3AiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwZSIsICJNNTUwLjggMjQxbC01MC4xLTg2LjhjMS4xLTIuMSAxLjktNC42IDEuOS03LjIgMC04LTYuNy0xNC43LTE0LjctMTVMNDMyLjQgMzYuMWMuNS0xLjYgMS4xLTMuMiAxLjEtNC44IDAtOC42LTctMTUuMy0xNS4zLTE1LjMtNC44IDAtOC44IDIuMS0xMS44IDUuNmwtMTA2LjYgMGMtMi43LTMuNS02LjctNS42LTExLjUtNS42cy04LjggMi4xLTExLjUgNS42bC0xMDYuMSAwYy0yLjktMy41LTctNS42LTExLjgtNS42LTguMyAwLTE1LjMgNi43LTE1LjMgMTUuMyAwIDEuNiAuNSAzLjUgMS4xIDQuOGwtNTYgOTcuMmMtNS40IDIuNC05LjEgNy41LTkuMSAxMy43IDAgLjUgLjMgMS4xIC4zIDEuNkwyNi42IDI0MC43Yy03LjIgMS4zLTEyLjYgNy41LTEyLjYgMTUgMCA3LjIgNS4xIDEzLjQgMTIuMSAxNWw1NS4yIDk1LjRjLS41IDEuNi0uOCAyLjktLjggNC44IDAgNy4yIDUuMSAxMy40IDEyLjEgMTQuN2w1MS43IDg5LjdjLS41IDEuNi0xLjEgMy41LTEuMSA1LjQgMCA4LjYgNyAxNS4zIDE1LjMgMTUuMyA0LjggMCA4LjgtMi4xIDExLjUtNS40bDEwNi45IDBjMi43IDMuMiA3IDUuNCAxMS41IDUuNHM4LjgtMi4xIDExLjUtNS40bDEwNy4xIDBjMi43IDIuOSA2LjcgNC44IDExIDQuOCA4LjYgMCAxNS4zLTcgMTUuMy0xNS4zIDAtMS42LS4zLTIuOS0uOC00LjNsNTEuNy05MC4zYzctMS4zIDEyLjEtNy41IDEyLjEtMTQuNyAwLTEuNi0uMy0zLjItLjgtNC44bDU0LjktOTUuNGM3LTEuMyAxMi4zLTcuNSAxMi4zLTE1IDAtNy4yLTUuMS0xMy40LTExLjgtMTQuN3ptLTM5NyAyMDkuN2wtNDMuNy03NS44IDQzLjcgMCAwIDc1Ljh6bTAtODMuOGwtNDMuNyAwYy0uMy0xLjEtLjgtMi4xLTEuMy0zLjJsNDUtNDcuNCAwIDUwLjZ6bTAtNjIuNGwtNTAuNCA1My4zYy0xLjMtLjUtMi43LTEuMy00LTEuNkw0My43IDI1OS44Yy41LTEuMyAuNS0yLjcgLjUtNHMwLTIuNC0uMy0zLjVsNTItOTBjMi43LS4zIDUuNC0xLjEgNy44LTIuN2w1MC4xIDUyIDAgOTIuOXptMC0xMDIuM0wxMDggMTU0LjhjMS4zLTIuMSAyLjEtNC44IDIuMS03LjggMC0uMy0uMy0uOC0uMy0xLjFsNDMuOS0xNS44IDAgNzIuMXptMC04MC42bC00My43IDE1LjggNDMuNy03NS41IDAgNTkuN3ptMzI2LjUgMzkuMWwuOCAxLjMtMzUuNCAxNjcuMS02My44LTY3LjIgOTgtMTAxLjUgLjMgLjN6TTI5Mi4xIDM1NS4xbDExLjUgMTEuOC0yMi44IDAgMTEuMy0xMS44em0tLjMtMTEuM2wtODMuMy04NS40IDc5LjYtODQuNCA4MyA4Ny42LTc5LjMgODIuMnptNS40IDUuOWw3OS4zLTgyLjIgNjcuNSA3MS4zLTUuOSAyOC4xLTEyNCAwLTE2LjktMTcuMXpNNDEwLjcgNDQuNGMxLjEgLjUgMi4xIDEuMSAzLjUgMS4zbDU3LjkgMTAwLjcgMCAuNWMwIDIuOSAuOCA1LjYgMi4xIDcuOGwtOTcuNSAxMDEuMi04My04Ny42IDExNy4xLTEyNHptLTkuMS0yLjFsLTExMy42IDEyMC4zLTU3LjEtNjAuMyAxNjYuMy02MCA0LjMgMHptLTEyMy41IDBjMi43IDIuNyA2LjIgNC4zIDEwLjIgNC4zczcuNS0xLjYgMTAuMi00LjNsNzUgMC0xNDguNCA1My42LTUwLjktNTMuNiAxMDMuOSAwek0xNjEuOSA0Ny45bDEuMS0yLjFjLjktLjIgMS44LS41IDIuNy0uOGw1MS4yIDUzLjgtNTQuOSAxOS44IDAtNzAuN3ptMCA3OS4zbDYwLjgtMjIgNTkuNyA2My4yLTc5LjYgODQuMS00MS00Mi4xIDAtODMuM3ptMCA5Mi43bDM2LjQgMzcuOC0zNi40IDM4LjMgMC03Ni4xem0wIDg3LjlsNDIuMS00NC41IDgyLjggODYtMTcuMSAxNy43LTEwNy43IDAgMC01OS4yem03IDE2Mi4xYy0xLjYtMS42LTMuNS0yLjctNS45LTMuNWwtMS4xLTEuNiAwLTg5LjcgOTkuOSAwLTkxLjYgOTQuOC0xLjMgMHptMTI5LjkgMGMtMi43LTIuNC02LjQtNC4zLTEwLjQtNC4zcy03LjggMS45LTEwLjQgNC4zbC05Ni40IDAgOTEuNi05NC44IDM4LjMgMCA5MS42IDk0LjgtMTA0LjIgMHptMTIwLTExLjhsLTQuMyA3LjVjLTEuMyAuMy0yLjQgLjgtMy41IDEuM2wtODkuMi05MS45IDExNC40IDAtMTcuNCA4M3ptMTIuOS0yMi4ybDEyLjktNjAuOCAyMiAwLTM0LjggNjAuOHptMzQuOC02OC44bC0yMC40IDAgNC42LTIxLjIgMTcuMSAxOC4yYy0uNSAuOC0xLjEgMS45LTEuMyAyLjl6bTY2LjItMTA3LjRsLTU1LjQgOTYuN2MtMS4zIC41LTIuNyAxLjEtNCAxLjlsLTIwLjYtMjIgMzQuNi0xNjMuOSA0NS44IDc5LjNjLS4zIDEuMy0uOCAyLjctLjggNC4zIDAgMS4zIC4zIDIuNCAuNSAzLjd6Il0KICAgIH07CiAgICBmYVJlc2VhcmNoZ2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNlYXJjaGdhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmOCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjYyLjIgMzY2LjRjLTYuNiAzLTMzLjIgNi01MC0xNC4yLTkuMi0xMC42LTI1LjMtMzMuMy00Mi4yLTYzLjYtOC45IDAtMTQuNyAwLTIxLjQtLjZsMCA0Ni40YzAgMjMuNSA2IDIxLjIgMjUuOCAyMy45bDAgOC4xYy02LjktLjMtMjMuMS0uOC0zNS42LS44LTEzLjEgMC0yNi4xIC42LTMzLjYgLjhsMC04LjFjMTUuNS0yLjkgMjItMS4zIDIyLTIzLjlsMC0xMDkuNGMwLTIyLjYtNi40LTIxLTIyLTIzLjlsMC04LjFjMjUuOCAxIDUzLjEtLjYgNzAuOS0uNiAzMS43IDAgNTUuOSAxNC40IDU1LjkgNDUuNiAwIDIxLjEtMTYuNyA0Mi4yLTM5LjIgNDcuNSAxMy42IDI0LjIgMzAgNDUuNiA0Mi4yIDU4LjkgNy4yIDcuOCAxNy4yIDE0LjcgMjcuMiAxNC43bDAgNy4zem0yMi45LTEzNWMtMjMuMyAwLTMyLjItMTUuNy0zMi4yLTMyLjJsMC0zMi4yYzAtMTIuMiA4LjgtMzAuNCAzNC0zMC40czMwLjQgMTcuOSAzMC40IDE3LjlsLTEwLjcgNy4ycy01LjUtMTIuNS0xOS43LTEyLjVjLTcuOSAwLTE5LjcgNy4zLTE5LjcgMTkuN2wwIDI2LjhjMCAxMy40IDYuNiAyMy4zIDE3LjkgMjMuMyAxNC4xIDAgMjEuNS0xMC45IDIxLjUtMjYuOGwtMTcuOSAwIDAtMTAuNyAzMC40IDBjMCAyMC41IDQuNyA0OS45LTM0IDQ5Ljl6TTE2OC42IDI3Ni4xYy05LjQgMC0xMy42LS4zLTIwLS44bDAtNjkuN2M2LjQtLjYgMTUtLjYgMjIuNS0uNiAyMy4zIDAgMzcuMiAxMi4yIDM3LjIgMzQuNSAwIDIxLjktMTUgMzYuNi0zOS43IDM2LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbE1lc3NlbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwtbWVzc2VuZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2NjMiLCAiTTI1NiAwYy0xMy4zIDAtMjYuMyAxLTM5LjEgM2wzLjcgMjMuN0MyMzIuMSAyNC45IDI0NCAyNCAyNTYgMjRzMjMuOSAuOSAzNS40IDIuN0wyOTUuMSAzQzI4Mi4zIDEgMjY5LjMgMCAyNTYgMHptNjAuOCA3LjNsLTUuNyAyMy4zYzIzLjQgNS43IDQ1LjQgMTQuOSA2NS40IDI3LjFsMTIuNS0yMC41Yy0yMi4xLTEzLjQtNDYuNC0yMy42LTcyLjItMjkuOXptNzYuNCA2MS42YzE5LjEgMTQgMzYgMzAuOSA1MC4xIDUwLjFsMTkuNC0xNC4yQzQ0NyA4My42IDQyOC40IDY1IDQwNy4zIDQ5LjVMMzkzLjEgNjguOHptODEuNyA1NC4ybC0yMC41IDEyLjVjMTIuMiAyMCAyMS40IDQyIDI3LjEgNjUuNGwyMy4zLTUuN2MtNi4zLTI1LjgtMTYuNS01MC4xLTI5LjktNzIuMnptMTAuNSA5Ny41YzEuOCAxMS41IDIuNyAyMy40IDIuNyAzNS40cy0uOSAyMy45LTIuNyAzNS40bDIzLjcgMy43YzEuOS0xMi43IDMtMjUuOCAzLTM5LjFzLTEtMjYuMy0zLTM5LjFsLTIzLjcgMy43em0tMzEgMTU1LjlsMjAuNSAxMi41YzEzLjQtMjIuMSAyMy42LTQ2LjQgMjkuOS03Mi4ybC0yMy4zLTUuN2MtNS43IDIzLjQtMTQuOSA0NS40LTI3LjEgNjUuNHptOC4yIDMwLjhsLTE5LjQtMTQuMmMtMTQgMTkuMS0zMC45IDM2LTUwLjEgNTAuMWwxNC4yIDE5LjRjMjEuMS0xNS41IDM5LjgtMzQuMSA1NS4yLTU1LjJ6bS04Ni4xIDQ3Yy0yMCAxMi4yLTQyIDIxLjQtNjUuNCAyNy4xbDUuNyAyMy4zYzI1LjgtNi4zIDUwLjEtMTYuNSA3Mi4yLTI5LjlsLTEyLjUtMjAuNXpNMjk1LjEgNTA5bC0zLjctMjMuN0MyNzkuOSA0ODcuMSAyNjggNDg4IDI1NiA0ODhzLTIzLjktLjktMzUuNC0yLjdMMjE2LjkgNTA5YzEyLjcgMS45IDI1LjggMyAzOS4xIDNzMjYuMy0xIDM5LjEtM3ptLTk0LjEtMjcuNmMtMTcuNi00LjMtMzQuNC0xMC42LTUwLjEtMTguNmwtNy44LTQtMzIuOCA3LjcgNS41IDIzLjQgMjQuMy01LjdjMTcuNCA4LjkgMzUuOSAxNS44IDU1LjMgMjAuNWw1LjctMjMuM3pNOTUuNCA0OTQuNkw5MCA0NzEuMyA0OC4zIDQ4MWMtMTAuNCAyLjQtMTkuNy02LjktMTcuMy0xNy4zbDkuNy00MS42LTIzLjQtNS41LTkuNyA0MS42QzEuMiA0ODYgMjYgNTEwLjggNTMuOCA1MDQuNGw0MS42LTkuN3ptLTUwLTkyLjlsNy43LTMyLjgtNC03LjhjLTgtMTUuNy0xNC4zLTMyLjUtMTguNi01MC4xTDcuMyAzMTYuN0MxMiAzMzYuMSAxOC45IDM1NC43IDI3LjcgMzcybC01LjcgMjQuMyAyMy40IDUuNXpNMyAyOTUuMWwyMy43LTMuN0MyNC45IDI3OS45IDI0IDI2OCAyNCAyNTZzLjktMjMuOSAyLjctMzUuNEwzIDIxNi45QzEgMjI5LjcgMCAyNDIuNyAwIDI1NnMxIDI2LjMgMyAzOS4xem0yNy42LTk0LjFjNS43LTIzLjQgMTQuOS00NS40IDI3LjEtNjUuNEwzNy4yIDEyMy4xYy0xMy40IDIyLjEtMjMuNiA0Ni40LTI5LjkgNzIuMmwyMy4zIDUuN3ptMTguOS05Ni4ybDE5LjQgMTQuMmMxNC0xOS4xIDMwLjktMzYgNTAuMS01MC4xTDEwNC43IDQ5LjVDODMuNiA2NSA2NSA4My42IDQ5LjUgMTA0Ljd6bTg2LjEtNDdjMjAtMTIuMiA0Mi0yMS40IDY1LjQtMjcuMUwxOTUuMiA3LjNjLTI1LjggNi4zLTUwLjEgMTYuNS03Mi4yIDI5LjlsMTIuNSAyMC41ek0yNTYgNDY0YzExNC45IDAgMjA4LTkzLjEgMjA4LTIwOFMzNzAuOSA0OCAyNTYgNDggNDggMTQxLjEgNDggMjU2YzAgMzYuNCA5LjQgNzAuNyAyNS44IDEwMC41IDEuNiAyLjkgMi4xIDYuMiAxLjQgOS40bC0yMS42IDkyLjUgOTIuNS0yMS42YzMuMi0uNyA2LjUtLjIgOS40IDEuNCAyOS44IDE2LjUgNjQgMjUuOCAxMDAuNSAyNS44eiJdCiAgICB9OwogICAgZmFYaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInhpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2OCIsICJNMTYyLjcgMjEwYy0xLjggMy4zLTI1LjIgNDQuNC03MC4xIDEyMy41LTQuOSA4LjMtMTAuOCAxMi41LTE3LjcgMTIuNUw5LjggMzQ2Yy03LjcgMC0xMi4xLTcuNS04LjUtMTQuNGw2OS0xMjEuM2MuMiAwIC4yLS4xIDAtLjNMMjYuNCAxMzQuNGMtNC4zLTcuOCAuMy0xNC4xIDguNS0xNC4xbDY1LjEgMGM3LjMgMCAxMy4zIDQuMSAxOCAxMi4yTDE2Mi43IDIxMHpNMzgyLjYgNDYuMWwtMTQ0IDI1MyAwIC4zIDkxLjYgMTY2LjZjMy45IDcuMSAuMiAxNC4xLTguNSAxNC4xbC02NS4yIDBjLTcuNiAwLTEzLjYtNC0xOC0xMi4yTDE0Ni4xIDI5OS40YzMuMy01LjggNTEuNS05MC44IDE0NC44LTI1NS4yIDQuNi04LjEgMTAuNC0xMi4yIDE3LjUtMTIuMmw2NS43IDBjOCAwIDEyLjMgNi43IDguNSAxNC4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsianMtc3F1YXJlIl0sICJmM2I5IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTgwLjkgNDQ0LjljLTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41TDE1MiAzODUuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVsMC0xNDMuMSA0Mi4xIDAgMCAxNDMuN2MwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNXptODUuOC00M0wzMDEgMzgyLjFjOSAxNC43IDIwLjggMjUuNiA0MS41IDI1LjYgMTcuNCAwIDI4LjYtOC43IDI4LjYtMjAuOCAwLTE0LjQtMTEuNC0xOS41LTMwLjctMjhsLTEwLjUtNC41Yy0zMC40LTEyLjktNTAuNS0yOS4yLTUwLjUtNjMuNSAwLTMxLjYgMjQuMS01NS42IDYxLjYtNTUuNiAyNi44IDAgNDYgOS4zIDU5LjggMzMuN0wzNjggMjkwYy03LjItMTIuOS0xNS0xOC0yNy4xLTE4LTEyLjMgMC0yMC4xIDcuOC0yMC4xIDE4IDAgMTIuNiA3LjggMTcuNyAyNS45IDI1LjZsMTAuNSA0LjVjMzUuOCAxNS4zIDU1LjkgMzEgNTUuOSA2Ni4yIDAgMzcuOC0yOS44IDU4LjYtNjkuNyA1OC42LTM5LjEgMC02NC40LTE4LjYtNzYuNy00M3oiXQogICAgfTsKICAgIGZhSnNTcXVhcmUgPSBmYVNxdWFyZUpzOwogICAgZmFGb250aWNvbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udGljb25zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyODAiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTE4NyAxNzIuOWMtMTguNCAwLTE5IDkuOS0xOSAyNy40bDAgMjMuM2MwIDIuNC0zLjUgNC40LS42IDQuNGw2Ny40IDAtMTEuMSAzNy4zLTU1LjcgMCAwIDExMi45YzAgNS44LTIgNi43IDMuMiA3LjNsNDMuNSA0LjEgMCAyNS4xLTEzMC43IDAgMC0yNS43IDIxLjMtMmM1LjItLjYgNi43LTIuMyA2LjctNy45bDAtMTExLjRjMC0yLjMtMi45LTIuMy01LjgtMi4zbC0yMi4yIDAgMC0zNy40IDI4IDAgMC0yMWMwLTQ5LjYgMjYuNS03MCA3Ny4zLTcwIDM0LjEgMCA2NC43IDguMiA2NC43IDUyLjhsLTUwLjcgNi4xYy4zLTE4LjctNC40LTIzLTE2LjMtMjN6bTc0LjMgMjQxLjhsMC0yNS4xIDIwLjQtMi42YzUuMi0uNiA3LjYtMS43IDcuNi03LjNsMC0xMDcuOWMwLTQuMS0yLjktNi43LTYuNy03LjlsLTI0LjItNi40IDYuNy0yOS41IDgwLjIgMCAwIDE1MS43YzAgNS44LTIuNiA2LjQgMi45IDcuM2wxNS43IDIuNiAwIDI1LjEtMTAyLjYgMHptODAuOC0yNTUuNWw5IDMzLjItNy4zIDcuMy0zMS4yLTE2LjYtMzEuMiAxNi42LTcuMy03LjMgOS0zMy4yLTIxLjgtMjQuMiAzLjUtOS42IDI3LjcgMCAxNS41LTI4IDkuMyAwIDE1LjUgMjggMjcuNyAwIDMuNSA5LjYtMjEuOSAyNC4yeiJdCiAgICB9OwogICAgZmFVcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXBzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3ZTAiLCAiTTEwMy4yIDMwM2MtNS4yIDMuNi0zMi42IDEzLjEtMzIuNi0xOWwwLTEwNC0zMi43IDAgMCAxMDIuNmMwIDc0LjkgODAuMiA1MS4xIDk3LjkgMzlsMC0xNDEuNi0zMi42IDAgMCAxMjN6TTQgNzQuOEw0IDI5NS43YzAgMTAzLjcgNzQuOSAxMzUuMiAxODcuNyAxODQuMSAxMTIuNC00OC45IDE4Ny43LTgwLjIgMTg3LjctMTg0LjFsMC0yMjAuOUMyNjMuMSAxMy4yIDk3LjYgMjUuMiA0IDc0Ljh6TTM2Mi4xIDI5NS43YzAgODYuNi01My4yIDExMy42LTE3MC40IDE2NS4zLTExNy41LTUxLjgtMTcwLjUtNzguNy0xNzAuNS0xNjUuM2wwLTEyNi40YzEwMi4zLTkzLjggMjMxLjYtMTAwIDM0MC45LTg5LjhsMCAyMTYuMnpNMTUyLjUgMTg4LjNsMCAyMTIuOCAzMi43IDAgMC02OC43YzI0LjQgNy4zIDcxLjctMi42IDcxLjctNzguNSAwLTk3LjQtODAuNy04MC45LTEwNC40LTY1LjZ6bTMyLjcgMTE3LjNsMC0xMDAuM2M4LjQtNC4yIDM4LjQtMTIuNyAzOC40IDQ5LjMgMCA2Ny45LTM2LjQgNTEuOC0zOC40IDUxem03OS4xLTg2LjRjLjEgNDcuMyA1MS42IDQyLjUgNTIuMiA3MC40IC42IDIzLjUtMzAuNCAyMy01MC44IDQuOWwwIDMwLjFjMzYuMiAyMS41IDgxLjkgOC4xIDgzLjItMzMuNSAxLjctNTEuNS01NC4xLTQ2LjYtNTMuNC03My4yIC42LTIwLjMgMzAuNi0yMC41IDQ4LjUtMi4ybDAtMjguNGMtMjguNS0yMi03OS45LTkuMi03OS43IDMxLjl6Il0KICAgIH07CiAgICBmYUFtYXpvblBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWF6b24tcGF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MmMiLCAiTTE0IDMyNS4zYzIuMy00LjIgNS4yLTQuOSA5LjctMi41IDEwLjQgNS42IDIwLjYgMTEuNCAzMS4yIDE2LjcgNDAuNiAyMC4yIDgzLjMgMzUuOCAxMjcuNCA0Ni4zIDIwLjggNSA0MS45IDkgNjMuMiAxMS44IDMxLjUgNC4yIDYzLjIgNiA5NSA1LjIgMTcuNC0uNCAzNC44LTEuOCA1Mi4xLTMuOCA1Ni4yLTYuNiAxMTEuMS0yMSAxNjMuMy00Mi44IDIuOS0xLjIgNS45LTIgOS4xLTEuMiA2LjcgMS44IDkgOSA0LjEgMTMuOS0zIDIuNy02LjIgNS4yLTkuNiA3LjQtMzAuNyAyMS4xLTY0LjIgMzYuNC05OS42IDQ3LjktMjQuNSA3LjktNDkuNiAxMy44LTc1LjEgMTcuNi0xNy42IDIuNy0zNS40IDQuMy01My4yIDQuOC0uOCAwLTEuNyAuMi0yLjUgLjNsLTIxLjEgMGMtLjgtLjEtMS43LS4yLTIuNS0uMy0zLjYtLjItNy4yLS4zLTEwLjctLjQtMTYuOS0uOC0zMy43LTIuNS01MC40LTUuMy0yNy40LTQuNS01NC4zLTExLjUtODAuNC0yMC45LTUzLjctMTkuNC0xMDMuMS00OC45LTE0NS42LTg3LTEuOC0xLjYtMy0zLjgtNC40LTUuN2wwLTJ6TTE3MiA2NS4xbC00LjMgLjZjLTEzLjggMS43LTI2LjggNi45LTM4IDE1LjEtMi40IDEuNy00LjYgMy41LTcuMSA1LjQtLjItLjQtLjMtLjktLjQtMS40LS40LTIuNy0uOC01LjUtMS4zLTguMi0uNy00LjYtMy02LjYtNy42LTYuNmwtMTEuNSAwYy02LjkgMC04LjIgMS4zLTguMiA4LjJsMCAyMDkuM2MwIDEgMCAyIC4xIDMgLjIgMyAyIDQuOSA0LjkgNSA3IC4xIDE0LjEgLjEgMjEuMSAwIDIuOSAwIDQuNy0yIDUtNSAuMS0xIC4xLTIgLjEtM2wwLTcyLjRjMS4xIC45IDEuNyAxLjQgMi4yIDEuOSAxNy45IDE0LjkgMzguNSAxOS44IDYxIDE1LjQgMjAuNC00IDM0LjYtMTYuNSA0My44LTM0LjkgNy0xMy45IDkuOS0yOC43IDEwLjMtNDQuMSAuNS0xNy4xLTEuMi0zMy45LTguMS00OS44LTguNS0xOS42LTIyLjYtMzIuNS00My45LTM2LjktMy4yLS43LTYuNS0xLTkuOC0xLjUtMi44LS4xLTUuNS0uMS04LjMtLjF6TTEyNC42IDEwN2MtLjEtLjcgLjEtMS4zIC40LTEuOXMuOC0xLjEgMS4zLTEuNGMxMy43LTkuNSAyOC44LTE0LjUgNDUuNi0xMy4yIDE0LjkgMS4xIDI3LjEgOC40IDMzLjUgMjUuOSAzLjkgMTAuNyA0LjkgMjEuOCA0LjkgMzMgMCAxMC40LS44IDIwLjYtNCAzMC42LTYuOCAyMS4zLTIyLjQgMjkuNC00Mi42IDI4LjUtMTQtLjYtMjYuMi02LTM3LjQtMTMuOS0uNi0uMy0xLS44LTEuMy0xLjRzLS40LTEuMi0uNC0xLjljLjEtMTQuMSAwLTI4LjEgMC00Mi4ycy4xLTI4IDAtNDIuMXpNMzMwLjMgNjUuMWMtMSAuMS0yIC4zLTIuOSAuNC05LjcgLjQtMTkuNCAxLjgtMjguOSA0LjEtNi4xIDEuNi0xMiAzLjgtMTcuOSA1LjgtMy42IDEuMi01LjQgMy44LTUuMyA3LjcgLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA0LjggMi4xIDYuMSA2LjggNC45IDcuOC0yIDE1LjYtNC4yIDIzLjUtNS43IDEyLjMtMi4zIDI0LjctMy4zIDM3LjItMS40IDYuNSAxIDEyLjYgMi45IDE2LjggOC40IDMuNyA0LjggNS4xIDEwLjUgNS4zIDE2LjQgLjMgOC4zIC4yIDE2LjYgLjMgMjQuOSAwIC41LS4xIC45LS4yIDEuNC0uNS0uMS0uOSAwLTEuMy0uMS0xMC41LTIuNi0yMS4yLTQuMi0zMi00LjktMTEuMy0uNi0yMi41IC4xLTMzLjMgMy45LTEyLjkgNC41LTIzLjMgMTIuMy0yOS40IDI0LjktNC43IDkuOC01LjQgMjAuMi0zLjkgMzAuNyAyIDE0IDkgMjQuOCAyMS40IDMxLjcgMTEuOSA2LjYgMjQuOCA3LjQgMzcuOSA1LjQgMTUuMS0yLjMgMjguNS04LjcgNDAuMy0xOC40IC41LS40IDEtLjggMS42LTEuMSAuNiAzLjggMS4xIDcuNCAxLjggMTEgLjYgMy4xIDIuNSA1LjEgNS40IDUuMiA1LjQgLjEgMTAuOSAuMSAxNi4zIDAgMS4zIDAgMi41LS41IDMuNC0xLjRzMS40LTIuMSAxLjUtMy4zYy4xLS45IC4xLTEuOSAuMS0yLjhsMC0xMDZjMC00LjMtLjMtOC42LS45LTEyLjktMS45LTEyLjktNy40LTIzLjUtMTktMzAuNC02LjctNC0xNC4xLTYtMjEuOC03LjEtMy42LS41LTcuMi0uOC0xMC44LTEuMy0zLjkgLjEtNy45IC4xLTExLjkgLjF6bTM1IDEyNy43YzAgLjYtLjEgMS4yLS4zIDEuN3MtLjcgMS0xLjIgMS4zYy0xMS4yIDguMS0yMy41IDEzLjUtMzcuNCAxNC45LTUuNyAuNi0xMS40IC40LTE2LjgtMS44LTMtMS4xLTUuNi0yLjktNy44LTUuMnMtMy43LTUuMS00LjYtOC4xYy0yLTYuMy0yLTEzLjEtLjEtMTkuNCAyLjUtOC4zIDguNC0xMyAxNi40LTE1LjYgOC0yLjQgMTYuNS0zLjIgMjQuOC0yLjIgOC40IC43IDE2LjYgMi4zIDI1IDMuNCAxLjYgLjIgMi4xIDEgMi4xIDIuNi0uMSA0LjggMCA5LjUgMCAxNC4zcy0uMiA5LjQtLjEgMTQuMXpNNjI1LjIgMzIyLjJjLTEtNS00LjgtNi45LTkuMS04LjMtNi44LTIuMS0xMy45LTMuNS0yMS0zLjktMTMuMS0xLjEtMjYuMy0uNS0zOS4yIDEuOS0xNC4zIDIuNy0yNy45IDcuMy00MCAxNS42LTEuNCAuOS0yLjcgMi4xLTMuNyAzLjUtLjQgLjYtLjYgMS4zLS43IDEuOXMwIDEuNCAuMiAyLjFjLjQgMS41IDIuMSAxLjkgMy42IDEuOCAuNyAwIDEuNSAwIDIuMi0uMSA3LjgtLjggMTUuNS0xLjcgMjMuMy0yLjUgMTEuNC0xLjEgMjIuOS0xLjggMzQuMy0uOSA0LjkgLjQgOS43IDEuMyAxNC40IDIuNyA1LjEgMS40IDcuNCA1LjIgNy42IDEwLjQgLjQgOC0xLjQgMTUuNy0zLjUgMjMuMy00LjEgMTUuNC0xMCAzMC4zLTE1LjggNDUuMS0uNCAxLS44IDItMSAzLS41IDIuOSAxLjIgNC44IDQuMSA0LjEgMS44LS40IDMuNC0xLjMgNC44LTIuNSA0LjUtNC4yIDguOC04LjcgMTIuNy0xMy40IDEyLjgtMTYuNCAyMC4zLTM1LjMgMjQuNy01NS42IC44LTMuNiAxLjQtNy4zIDIuMS0xMC45bDAtMTcuM3pNNDkzLjEgMTk5Yy0xMi45LTM1LjctMjUuOC03MS40LTM4LjctMTA3LjItMi01LjctNC4yLTExLjMtNi4zLTE2LjktMS4xLTIuOS0zLjItNC44LTYuNC00LjgtNy42LS4xLTE1LjItLjItMjIuOS0uMS0yLjUgMC0zLjcgMi0zLjIgNC41IC41IDIuMSAxLjEgNC4xIDEuOSA2LjEgMTkuNiA0OC41IDM5LjMgOTcgNTkuMSAxNDUuNSAxLjcgNC4xIDIuMSA3LjYgLjIgMTEuOC0zLjMgNy4zLTUuOSAxNS05LjMgMjIuMy0zIDYuNS04IDExLjQtMTUuMiAxMy4zLTUgMS4zLTEwLjIgMS43LTE1LjQgMS4xLTIuNS0uMi01LS44LTcuNS0xLTMuNC0uMi01LjEgMS4zLTUuMiA0LjgtLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA1LjUgMiA4IDcuNCA4LjkgNS42IDEuMSAxMS4yIDEuOCAxNi45IDIgMTcuMSAuNCAzMC43LTYuNSAzOS41LTIxLjQgMy41LTUuOSA2LjYtMTIgOS4yLTE4LjQgMjMuNy01OS44IDQ3LjItMTE5LjcgNzAuNi0xNzkuNiAuNy0xLjggMS4zLTMuNiAxLjYtNS41IC40LTIuOC0uOS00LjQtMy43LTQuNC02LjYtLjEtMTMuMyAwLTE5LjkgMC0xLjctLjEtMy40IC4zLTQuNyAxLjNzLTIuNCAyLjMtMyAzLjljLS41IDEuNC0xLjEgMi43LTEuNiA0LjFsLTM0LjggMTAwYy0yLjUgNy4yLTUuMSAxNC41LTcuNyAyMi4yLS40LTEuMS0uNi0xLjctLjktMi40eiJdCiAgICB9OwogICAgZmFQYW5kb3JhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhbmRvcmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTdkYSIsICJNMjAxLjMgMzJMMCAzMiAwIDQ4MCAxMjAuMiA0ODBjMTEuMiAwIDIwLjMtOS4xIDIwLjMtMjAuM2wwLTg2LjEgMzAuMSAwYzE0Ny4xIDAgMjA3LjMtODIuOSAyMDcuMy0xNzkuOSAwLTExOS43LTkwLjktMTYxLjgtMTc2LjUtMTYxLjh6Il0KICAgIH07CiAgICBmYU9wZW5pZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuaWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE5YiIsICJNMjcxLjUgNDMybC02OCAzMkM4OC41IDQ1My43IDAgMzkyLjUgMCAzMTguMiAwIDI0Ni43IDgyLjUgMTg3LjIgMTkxLjcgMTczLjlsMCA0M2MtNzEuNSAxMi41LTEyNCA1My0xMjQgMTAxLjMgMCA1MSA1OC41IDkzLjMgMTM1LjcgMTAzbDAtMzQwIDY4LTMzLjIgMCAzODQgLjEgMHpNNDQ4IDI5MWwtMTMxLjMtMjguNSAzNi44LTIwLjdjLTE5LjUtMTEuNS00My41LTIwLTcwLTI0LjhsMC00M2M0Ni4yIDUuNSA4Ny43IDE5LjUgMTIwLjMgMzkuM2wzNS0xOS44IDkuMiA5Ny41eiJdCiAgICB9OwogICAgZmFWc2NvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZzY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdkZCIsICJNMzU3LjYgMjU2YzAtMjcuMS0xMC42LTUyLjUtMjkuNy03MS43cy00NC42LTI5LjctNzEuNy0yOS43bC0uMSAwYy0yNy4xIDAtNTIuNiAxMC42LTcxLjcgMjkuN3MtMjkuNyA0NC42LTI5LjcgNzEuN2MwIDI3LjEgMTAuNiA1Mi41IDI5LjcgNzEuNyAxOS4yIDE5LjIgNDQuNiAyOS43IDcxLjcgMjkuN2wuMSAwYzI3LjEgMCA1Mi42LTEwLjYgNzEuNy0yOS43IDE5LjItMTkuMiAyOS43LTQ0LjYgMjkuNy03MS43ek0xNzYuMyA0ODIuMWMyMyA4LjEgNDcgMTIuNiA3MS42IDEzLjRsMC01OS4xYy0xNy4xLS43LTMzLjUtMy44LTQ5LTguOWwtMjIuNiA1NC42em0xMzctNTQuNmMtMTUuNSA1LjEtMzIgOC4yLTQ5IDguOWwwIDU5LjFjMjQuNi0uOCA0OC42LTUuMyA3MS42LTEzLjRsLTIyLjYtNTQuNnpNOTIuNSA0MzEuMmMyMC4yIDE4LjkgNDMuMyAzNCA2OC43IDQ1bDIyLjUtNTQuNWMtMTguMy03LjktMzUuMS0xOC44LTQ5LjgtMzEuOUw5Mi41IDQzMS4yem0yODUuOS00MS40Yy0xNC42IDEzLjItMzEuNCAyNC00OS44IDMxLjlsMjIuNSA1NC41YzI1LjQtMTEgNDguNC0yNi4xIDY4LjctNDVsLTQxLjQtNDEuNHpNMTQ1LjQgMzc4LjJjMTMuNiAxMi4xIDI5IDIxLjkgNDUuOCAyOSAxOCA3LjYgMzcuMSAxMiA1Ni43IDEyLjlsMC00Ni44Yy0yNi40LTEuOC01MC4zLTEyLjMtNjkuMS0yOC42bC0zMy40IDMzLjR6bTE4OC0zMy40Yy0xOC44IDE2LjMtNDIuNyAyNi44LTY5LjEgMjguNmwwIDQ2LjhjMTkuNi0uOSAzOC43LTUuMyA1Ni43LTEyLjkgMTYuOC03LjEgMzIuMi0xNi45IDQ1LjgtMjlsLTMzLjQtMzMuNHpNMzguNSAzNTYuNmMxMC43IDIzLjIgMjUgNDQuMyA0Mi41IDYzLjFsNDEuMy00MS4zYy0xMi40LTEzLjQtMjIuOS0yOC42LTMwLjktNDUuMkwzOC41IDM1Ni42em0zODIuNC0yMy41Yy04IDE2LjYtMTguNSAzMS45LTMwLjkgNDUuMmw0MS4zIDQxLjNjMTcuNS0xOC43IDMxLjgtMzkuOSA0Mi41LTYzLjFsLTUyLjktMjMuNXptLTMzMS02OWMxLjEgMTguOCA1LjQgMzcuMiAxMi44IDU0LjUgNy41IDE3LjggMTggMzQgMzEuMiA0OC4ybDMzLjUtMzMuNWMtMTYuNC0xOC44LTI2LjktNDIuOC0yOC43LTY5LjJsLTQ4LjggMHptMjgzLjcgMGMtMS44IDI2LjQtMTIuMyA1MC40LTI4LjcgNjkuMmwzMy41IDMzLjVjMTMuMS0xNC4yIDIzLjYtMzAuNCAzMS4yLTQ4LjIgNy4zLTE3LjQgMTEuNi0zNS43IDEyLjctNTQuNWwtNDguNyAwem0tMzU3LjEgMGMuOSAyNi43IDYuMSA1Mi43IDE1LjYgNzcuNUw4NSAzMTguMmMtNi40LTE3LTEwLjMtMzUuMS0xMS4zLTU0bC01Ny4xIDB6bTQyMi4xIDBjLTEgMTguOS01IDM3LjEtMTEuMyA1NGw1Mi44IDIzLjVjOS41LTI0LjggMTQuNy01MC44IDE1LjYtNzcuNWwtNTcuMSAwek0zMi4xIDE3MC40Yy05LjUgMjQuOC0xNC43IDUwLjgtMTUuNiA3Ny41bDU3LjEgMGMxLTE4LjkgNS0zNy4xIDExLjMtNTRMMzIuMSAxNzAuNHptMTAxLjctMjUuMmMtMTMuMSAxNC4yLTIzLjYgMzAuNC0zMS4yIDQ4LjItNy4zIDE3LjQtMTEuNiAzNS43LTEyLjggNTQuNWw0OC44IDBjMS44LTI2LjQgMTIuMy01MC40IDI4LjctNjkuMmwtMzMuNS0zMy41em0yMTEuMSAzMy41YzE2LjQgMTguOCAyNi45IDQyLjggMjguNyA2OS4ybDQ4LjcgMGMtMS4xLTE4LjgtNS40LTM3LjItMTIuNy01NC41LTcuNS0xNy44LTE4LTM0LTMxLjItNDguMmwtMzMuNSAzMy41em04Mi40IDE1LjJjNi40IDE3IDEwLjMgMzUuMSAxMS4zIDU0bDU3LjEgMGMtLjktMjYuNy02LjEtNTIuNy0xNS42LTc3LjVsLTUyLjggMjMuNXpNODEgOTIuM0M2My40IDExMSA0OS4yIDEzMi4yIDM4LjUgMTU1LjRsNTIuOSAyMy41YzgtMTYuNiAxOC41LTMxLjkgMzAuOS00NS4yTDgxIDkyLjN6bTMwOSA0MS4zYzEyLjQgMTMuNCAyMi45IDI4LjYgMzAuOSA0NS4ybDUyLjktMjMuNWMtMTAuNy0yMy4yLTI1LTQ0LjMtNDIuNS02My4xTDM5MCAxMzMuN3pNMjQ4IDkxLjhjLTE5LjYgLjktMzguNyA1LjMtNTYuNyAxMi45LTE2LjggNy4xLTMyLjIgMTYuOS00NS44IDI5bDMzLjQgMzMuNGMxOC44LTE2LjMgNDIuNy0yNi44IDY5LjEtMjguNmwwLTQ2Ljd6bTE2LjMgNDYuN2MyNi40IDEuOCA1MC4zIDEyLjMgNjkuMSAyOC42bDMzLjQtMzMuNGMtMTMuNi0xMi4xLTI5LTIxLjktNDUuOC0yOS0xOC03LjYtMzcuMS0xMi01Ni43LTEyLjlsMCA0Ni43ek0xNjEuMiAzNS44Yy0yNS40IDExLTQ4LjQgMjYuMS02OC43IDQ1bDQxLjQgNDEuNGMxNC43LTEzLjIgMzEuNC0yNCA0OS44LTMxLjlMMTYxLjIgMzUuOHpNMzI4LjYgOTAuM2MxOC4zIDcuOSAzNS4xIDE4LjggNDkuOCAzMS45bDQxLjQtNDEuNGMtMjAuMi0xOC45LTQzLjMtMzQtNjguNy00NUwzMjguNiA5MC4zek0yNDggMTYuNGMtMjQuNiAuOC00OC42IDUuMy03MS42IDEzLjRsMjIuNiA1NC42YzE1LjUtNS4xIDMyLTguMiA0OS04LjlsMC01OS4xem0xNi4zIDU5LjFjMTcuMSAuNyAzMy41IDMuOCA0OSA4LjlsMjIuNi01NC42Yy0yMy04LjEtNDctMTIuNi03MS42LTEzLjRsMCA1OS4xek01MTIuMiAyNjQuMmwtLjIgMEM1MDcuOCAzOTkgMzk5LjIgNTA3LjcgMjY0LjMgNTExLjlsMCAuMS0xNi4zIDAgMC0uMUMxMTMuMSA1MDcuNyA0LjUgMzk5IC4yIDI2NC4xbC0uMiAwIDAtMTYuMyAuMiAwQzQuNSAxMTMgMTEzLjEgNC4zIDI0OCAuMWwwLS4xIDE2LjMgMCAwIC4xQzM5OS4yIDQuMyA1MDcuOCAxMTMgNTEyIDI0Ny45bC4yIDAgMCAxNi4zeiJdCiAgICB9OwogICAgZmFHbG9iYWxlYWtzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdsb2JhbGVha3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTg1ZCIsICJNNDExLjIgMzIuMmMyMC4yIDAgMzYuOCAxNi42IDM2LjggMzYuOWwwIDM3My44YzAgMjAuMi0xNi42IDM2LjktMzYuOCAzNi45bC05NC40IDAgMjgtNzkuNGMzLjEtOC44LTEuNi0xOC43LTEwLjQtMjEuOC0xLjYtLjUtMi42LTEtNC4yLTFzLTMuNiAwLTUuMiAuNWMtNS4yIDEtOS45IDUuMi0xMS45IDEwLjlsLTYuMiAxNi42IDAtNjcuNWMwLTEwLjktNy44LTE5LjctMTguMi0yMS44bC03LjIgMGMtLjUgMC0xIDAtMS42IC41LS41IDAtMSAuNS0xLjYgLjUtMi42IDEtNS4yIDIuNi03LjIgNC4xbDAtNC4xYzAtNS43LTIuNi0xMC40LTUuNy0xNGwtMS0xYy0xLTEtMi42LTIuMS00LjItMi42bDAtMjYuNWMwLTUuMi00LjEtOS4zLTkuMy05LjNsLTM5LjkgMGMtNi43IDAtMTEuNC03LjMtOC4zLTEzLjVMMjgzLjEgODQuMWMxNC41LTMxLjEgNDUuNi01MS40IDgwLjQtNTEuOWw0Ny43IDB6bS0xNjYgMGMxNy42IDAgMzAuMSAxNi4xIDI4IDMyLjItMi42IDMuNi00LjcgNy44LTYuMiAxMC45TDE4Ni42IDI0MS41Yy04LjggMTguNyA0LjIgNDAgMjQuNCA0MGwzMC42IDAgMCAxNi4xYy03LjggMy4xLTEzIDEwLjktMTMgMTkuN2wwIDMuNmMtMy42LTMuNi04LjgtNS43LTE0LjUtNS43LTExLjkgMC0yMS44IDkuOS0yMS44IDIxLjhsMCAxOS4yLTMuMSAwYy05LjMgMC0xNy4xIDcuOC0xNy4xIDE3LjFsMCAxMDUuOS05NS40IDBjLTQyIDAtNzIuNi00MC41LTYxLjItODEuNSAxLTMuMSA0LjItNS4yIDcuMy00LjdsMjEuMiAwYzI0LjQgMCA0NC42LTIwLjIgNDQuNi00NS4ybDAtNC4yYzAtMjQuOS0xOS43LTQ1LjItNDQuNi00NS4yLS41IDAtMS0uNS0xLTFsOC44LTMyLjdjMi4xLTYuMi0yLjYtMTEuOS04LjgtMTEuOWwtMzMuMiAwYy02LjcgMC0xMS40LTcuMy04LjMtMTMuNUw3Ni43IDg0LjdjMTYuMS0zMi4yIDQ4LjItNTIuNCA4NC01Mi40bDg0LjUgMHpNMTMzLjcgMTQ0LjRjLTEwLjQgMC0xOC43IDguMy0xOC43IDE4LjcgMCA5LjkgOC4zIDE4LjcgMTguNyAxOC43IDEwLjQgMCAxOC43LTguMyAxOC43LTE4LjdzLTguMy0xOC43LTE4LjctMTguN3ptMjAyLjggMGExOC42IDE4LjYgMCAxIDAgLS4yIDM3LjIgMTguNiAxOC42IDAgMSAwIC4yLTM3LjJ6Il0KICAgIH07CiAgICBmYVZlbm1vID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZlbm1vIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU4NWEiLCAiTTY3LjggMjAyLjdjMi40IDUgMy45IDExIDMuOSAxOS44IDAgMTYuMi0xMS41IDM5LjgtMjAuNyA1NC45bC05LjktNzkuNy00MSAzLjkgMTguOCAxMTIgNDYuOSAwYzIwLjUtMjYuOSA0NS44LTY1LjMgNDUuOC05NC44IDAtOS4zLTEuOS0xNi42LTYuMy0yMy43bC0zNy40IDcuNXptMTEzLTcuMWMtNDIuOCAwLTYzLjUgMzctNjMuNSA3MS45IDAgMjYuOSAxMi44IDQ4LjUgNDguNCA0OC41IDE0IDAgMjguNS0zIDM3LjgtNy41bDUtMzMuNmMtMTMuMiA2LjctMjMuMyA5LjMtMzMuOSA5LjMtOS43IDAtMTcuMS01LjItMTcuMS0xOC4zIDIyLS4yIDYwLTkuMyA2MC0zOC44IDAtMTguMy0xMy4yLTMxLjUtMzYuNy0zMS41bDAgMHptLTIyLjUgNDguOWMxLjEtMTIuOSAxMS0yMiAxOC42LTIyIDQuMyAwIDggMi42IDggNy43IDAgMTAuOC0xOSAxNC4yLTI2LjYgMTQuMmwwIDB6bTE1MC4yLTQ4LjljLTE1LjMgMC0yNi4xIDUuOC0zNC4zIDExLjJsLS40LTkuMy0zNC44IDAtMTguNCAxMTYuMSA0MC4yIDAgMTIuNy04MS40YzMuNS0xLjcgOC42LTQuMSAxMy44LTQuMSAzLjkgMCA3LjEgMS4zIDcuMSA2LjUgMCAyLjItLjcgNi0uOSA4bC0xMS4yIDcxLjEgNDAgMCAxMi4zLTc3LjVjLjctNC4xIDEuMy0xMC4zIDEuMy0xNC42IDAtMTUuNS03LjEtMjUuOS0yNy40LTI1Ljl6bTE4My4yIDBjLTE0LjkgMC0yNS43IDQuNS0zNy4yIDEyLjctNC4xLTcuMy0xMi4zLTEyLjctMjQuOC0xMi43LTE0LjUgMC0yNS4zIDUuOC0zMy4zIDExLjZsLTEuMS05LjctMzQuNCAwLTE4LjQgMTE2LjEgNDAuMiAwIDEyLjgtODEuNGMzLjUtMS43IDguNi00LjEgMTMuOC00LjEgMy45IDAgNy4xIDEuMyA3LjEgNy4xIDAgMS41LS40IDMuOS0uNiA1LjhsLTExLjQgNzIuNiA0MCAwIDEyLjctODEuNGMzLjctMS45IDguNi00LjEgMTMuNi00LjEgMy45IDAgNy4xIDEuMyA3LjEgNy4xIDAgMS41LS40IDMuOS0uNyA1LjhsLTExLjQgNzIuNiA0MCAwIDEyLjMtNzcuNWMuNy00LjEgMS4zLTEwLjMgMS4zLTE0LjYgMC0xNS41LTcuMS0yNS45LTI3LjctMjUuOWwwIDB6bTEwMi4yIDBjLTQ0LjcgMC02NC4yIDM0LjMtNjQuMiA3MC45IDAgMjcuOCAxMS4yIDUwIDQ1LjEgNTAgNDUuOCAwIDY1LTM3LjUgNjUtNzMuNyAwLTI3LjQtMTIuMy00Ny4yLTQ2LTQ3LjJ6bS0xMy40IDkwYy03LjEgMC0xMC4xLTYuNy0xMC4xLTE3LjUgMC0xNC4yIDMuMi00MiAxOS00MiA3LjEgMCA5LjUgNi41IDkuNSAxNS45IDAgMTQuMi0zLjUgNDMuNS0xOC40IDQzLjV6Il0KICAgIH07CiAgICBmYVVidW50dSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1YnVudHUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjdkZiIsICJNNDY5LjIgNzVjMC0yMC4xLTgtMzkuMy0yMi4yLTUzLjVzLTMzLjQtMjIuMi01My41LTIyLjItMzkuMyA4LTUzLjUgMjIuMi0yMi4yIDMzLjQtMjIuMiA1My41YzAgMjAuMSA4IDM5LjMgMjIuMSA1My41czMzLjQgMjIuMSA1My41IDIyLjEgMzkuMy04IDUzLjUtMjIuMSAyMi4xLTMzLjQgMjIuMS01My41bC4xIDB6bS0zMTUgMTY1LjdhNzUuNiA3NS42IDAgMSAwIC0xNTEuMiAwIDc1LjYgNzUuNiAwIDEgMCAxNTEuMiAwek01NyAzNDZjMTguNiA0Ni45IDUxIDg3IDkzIDExNS4xczkxLjUgNDIuNiAxNDIgNDEuN2MtMTQuNy0xOC42LTIyLjktNDEuNS0yMy4yLTY1LjItNi44LS45LTEzLjMtMi4xLTE5LjUtMy40LTI2LjgtNS43LTUxLjktMTcuMy03My42LTM0cy0zOS4zLTM4LjEtNTEuNy02Mi41Yy0yMC45IDkuOS00NC41IDEyLjgtNjcuMSA4LjJsLjEgLjF6bTM5NS4xIDg5LjhhNzUuNiA3NS42IDAgMSAwIC0xNTEuMiAwIDc1LjYgNzUuNiAwIDEgMCAxNTEuMiAwek00NDQgMzUxLjZjMTguNSAxNC44IDMxLjYgMzUuMiAzNy4yIDU4LjIgMzMuMy00MS4zIDUyLjYtOTIuMiA1NC44LTE0NS4ycy0xMi41LTEwNS40LTQyLjItMTQ5LjRjLTguNiAyMS41LTI0IDM5LjYtNDMuOCA1MS42IDE1LjQgMjguNiAyMi45IDYwLjggMjEuOSA5My4ycy0xMC43IDY0LTI4IDkxLjZsLjEgMHpNMTAxLjEgMTM1LjRjMTIuNCAyLjcgMjQuMyA3LjUgMzUuMSAxNC4zIDE2LjYtMjQuMiAzOC45LTQ0LjEgNjQuOC01OFMyNTUuOCA3MC40IDI4NS4yIDcwYy4yLTUuOSAuOS0xMS45IDItMTcuNyAzLjYtMTYuNyAxMS4xLTMyLjMgMjEuOC00NS41LTQ3LjctMy44LTk1LjQgNi0xMzcuNiAyOC41Uzk0LjMgOTEuNyA3MC44IDEzMy40YzIuNy0uMiA1LjMtLjMgOC0uMyA3LjUgMCAxNSAuOCAyMi40IDIuM2wtLjEgMHoiXQogICAgfTsKICAgIGZhVmlhY29pbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFjb2luIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyMzciLCAiTTM4NCAzMmwtNjQgMC04MC43IDE5Mi05NC41IDAtODAuOC0xOTItNjQgMCA0OCAxMTItNDggMCAwIDQ4IDY4LjUgMCAxMy44IDMyLTgyLjMgMCAwIDQ4IDEwMi44IDAgODkuMiAyMDggODkuMi0yMDggMTAyLjggMCAwLTQ4LTgyLjMgMCAxMy44LTMyIDY4LjUgMCAwLTQ4LTQ4IDAgNDgtMTEyek0xOTIgMzM2bC0yNy02NCA1NCAwLTI3IDY0eiJdCiAgICB9OwogICAgZmFaaGlodSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ6aGlodSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjNmIiwgIk0xNzAuNSAxNDguMWwwIDIxNy41IDIzLjQgMCA3LjcgMjYuNCA0Mi0yNi40IDQ5LjUgMCAwLTIxNy41LTEyMi43IDB6bTk3LjggMTkzLjlsLTI3LjkgMC0yNy45IDE3LjUtNS4xLTE3LjUtMTEuOSAwIDAtMTcwLjMgNzIuOCAwIDAgMTcwLjN6TTE0OS44IDI0Ny43bC01Mi4zIDBjMS43LTI3LjEgMi4yLTUxLjYgMi4yLTczLjVsNTEuMiAwczItMjIuNi04LjYtMjIuM2wtODguNSAwYzMuNS0xMy4xIDcuOS0yNi43IDEzLjEtNDAuNyAwIDAtMjQuMSAwLTMyLjMgMjEuNi0zLjQgOC45LTEzLjIgNDMuMS0zMC43IDc4LjEgNS45LS42IDI1LjQtMS4yIDM2LjgtMjIuMiAyLjEtNS45IDIuNS02LjcgNS4xLTE0LjVsMjguOSAwYzAgMTAuNS0xLjIgNjYuOS0xLjcgNzMuNGwtNTIuMyAwYy0xMS43IDAtMTUuNiAyMy42LTE1LjYgMjMuNmw2NS42IDBjLTQuNCA0OS45LTI4IDkxLjktNzAuOCAxMjUuMSAyMC41IDUuOSA0MC45LS45IDUxLTkuOSAwIDAgMjMtMjAuOSAzNS42LTY5LjNsNTQgNjQuOXM3LjktMjYuOS0xLjItNDBjLTcuNi04LjktMjguMS0zMy4xLTM2LjgtNDEuOEw4Ny45IDMxMmM0LjQtMTQgNy0yNy42IDcuOS00MC43bDYxLjYgMHMtLjEtMjMuNi03LjYtMjMuNmwwIDB6bTQxMi0xLjZjMjAuOC0yNS42IDQ1LTU4LjYgNDUtNTguNnMtMTguNi0xNC44LTI3LjQtNC4xYy02IDguMi0zNi44IDQ4LjItMzYuOCA0OC4ybDE5LjIgMTQuNHpNNDExLjggMTg3Yy05LTguMi0yNS45IDIuMS0yNS45IDIuMXMzOS41IDU1IDQxLjEgNTcuNGwxOS41LTEzLjdzLTI1LjctMzcuNi0zNC43LTQ1LjlsMCAwIDAgMHpNNjQwIDI1OC40Yy0xOS44IDAtMTMwLjkgLjktMTMxLjEgLjlsMC0xMDFjNC44IDAgMTIuNC0uNCAyMi44LTEuMiA0MC45LTIuNCA3MC4xLTQgODcuOC00LjggMCAwIDEyLjItMjcuMi0uNi0zMy40LTMuMS0xLjItMjMuMiA0LjYtMjMuMiA0LjZzLTE2NS4yIDE2LjUtMjMyLjQgMThjMS42IDguOCA3LjYgMTcuMSAxNS44IDE5LjYgMTMuMyAzLjUgMjIuNyAxLjcgNDkuMiAuOSAyNC44LTEuNiA0My43LTIuNCA1Ni41LTIuNGwwIDk5LjgtMTMzLjUgMHMyLjggMjIuMyAyNS41IDIyLjlsMTA3LjkgMCAwIDcwLjljMCAxNC0xMS4yIDIyLTI0LjUgMjEuMS0xNC4xIC4xLTI2LjEtMS4xLTQxLjctMS44IDIgNCA2LjMgMTQuNCAxOS4zIDIxLjggOS45IDQuOCAxNi4yIDYuNiAyNiA2LjYgMjkuNiAwIDQ1LjctMTcuMyA0NC45LTQ1LjNsMC03My4zIDEyMi40IDBjOS43IDAgOC43LTIzLjggOC43LTIzLjhsMCAweiJdCiAgICB9OwogICAgZmFZYW5kZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieWFuZGV4IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImY0MTMiLCAiTTE1My4xIDMxNS44TDY1LjcgNTEyIDIgNTEyIDk4IDMwMi4yQzUyLjkgMjc5LjMgMjIuOCAyMzcuOCAyMi44IDE2MS4xIDIyLjcgNTMuNyA5MC44IDAgMTcxLjcgMGw4Mi4zIDAgMCA1MTItNTUuMSAwIDAtMTk2LjItNDUuOCAwek0xOTguOSA0Ni41bC0yOS40IDBjLTQ0LjQgMC04Ny40IDI5LjQtODcuNCAxMTQuNiAwIDgyLjMgMzkuNCAxMDguOCA4Ny40IDEwOC44bDI5LjQgMCAwLTIyMy40eiJdCiAgICB9OwogICAgZmFQaXhpdiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaXhpdiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjQwIiwgIk05NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2TDk2IDMyem03Ny43IDIxNy4zYTYwLjEgNjAuMSAwIDEgMCAxMjAuMyAwIDYwLjEgNjAuMSAwIDEgMCAtMTIwLjMgMHpNMTE5LjEgMzg3LjhjLS4zLS44LS41LTEuNy0uNS0yLjZsMC0yNDQuM2MwLTEuOCAuNy0zLjYgMi00LjlzMy0yIDQuOS0ybDE2LjkgMGMxLjIgMCAyLjMgLjMgMy4zIC44czEuOSAxLjMgMi41IDIuM2wxNCAyMS44YzE5LjctMTUuNiA0NC41LTI1IDcxLjYtMjUgNjMuNiAwIDExNS4yIDUxLjYgMTE1LjIgMTE1LjJTMjk3LjUgMzY0LjUgMjMzLjggMzY0LjVjLTIyIDAtNDIuNi02LjItNjAuMS0xNi45bDAgMzcuNmMwIC45LS4yIDEuOC0uNSAyLjZzLS45IDEuNi0xLjUgMi4yLTEuNCAxLjEtMi4yIDEuNS0xLjcgLjUtMi42IC41bC00MS4zIDBjLS45IDAtMS44LS4yLTIuNi0uNXMtMS42LS45LTIuMi0xLjUtMS4xLTEuNC0xLjUtMi4yeiJdCiAgICB9OwogICAgZmFPcGVuYWkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbmFpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3Y2YiLCAiTTE5Ni40IDE4NS44bDAtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44TDM0My4zIDExMS4xYy02LjEtMy42LTEyLjMtMy42LTE4LjQgMEwxOTYuNCAxODUuOHpNNDI0LjcgMzc1LjJsMC0xMTYuMmMwLTcuMi0zLjEtMTIuMy05LjItMTUuOUwyODcgMTY4LjQgMzI5IDE0NC4zYzMuNi0yIDYuNy0yIDEwLjIgMEw0MzcgMjAwLjdjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNmwwIDB6TTE2Ni4yIDI3Mi44bC00Mi0yNC42Yy0zLjYtMi01LjEtNS4xLTUuMS05LjJsMC0xMTIuNmMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBMMTc1LjQgMTA4LjVjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOWwwIDE0OC41IDAgMHptOTAuNCA1Mi4ybC02MC4yLTMzLjggMC03MS43IDYwLjItMzMuOCA2MC4yIDMzLjggMCA3MS43LTYwLjIgMzMuOHptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlsMC0xNDguNSA0Mi41IDI0LjZjMy42IDIgNS4xIDUuMSA1LjEgOS4ybDAgMTEyLjZjMCA1NC44LTQyLjUgOTYuMy05OS4zIDk2LjNsMCAwek0xNzMuOCAzNjYuNUw3Ni4xIDMxMC4yYy0yOC4yLTE2LjQtNDcuMS01MS4yLTQ3LjEtODUgMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZsMCAxMTYuN2MwIDcuMiAzLjEgMTIuMyA5LjIgMTUuOWwxMjggNzQuMi00MiAyNC4xYy0zLjYgMi02LjcgMi0xMC4yIDB6bS01LjYgODRjLTU3LjkgMC0xMDAuNC00My41LTEwMC40LTk3LjMgMC00LjEgLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjIgMCA0OC42YzAgNC4xLTEuNSA3LjItNS4xIDkuMmwtOTcuOCA1Ni4zYy0xMy4zIDcuNy0yOS4yIDExLjMtNDUuNiAxMS4zbDAgMHptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiXQogICAgfTsKICAgIGZhU2l0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaXRoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MTIiLCAiTTAgMzJsNjkuNyAxMTguOC01OC45LTExLjUgNjkuOCA5MWMtMyAxNy0zIDM0LjQgMCA1MS40bC02OS44IDkxIDU4LjktMTEuNS02OS43IDExOC44IDExOC44LTY5LjctMTEuNSA1OC45IDkxLTY5LjhjMTcgMyAzNC41IDMgNTEuNSAwbDkxIDY5LjgtMTEuNS01OC45IDExOC43IDY5LjctNjkuNy0xMTguOCA1OC45IDExLjUtNjkuOC05MWMzLTE3IDMtMzQuNCAwLTUxLjRsNjkuOC05MS01OC45IDExLjUgNjkuNy0xMTguOC0xMTguNyA2OS43IDExLjUtNTguOS05MS4xIDY5LjljLTguNS0xLjUtMTcuMS0yLjMtMjUuNy0yLjNzLTE3LjIgLjgtMjUuNyAyLjNMMTA3LjIgNDIuOCAxMTguOCAxMDEuNyAwIDMyek0yMjQgMzgwLjJhMTI0LjIgMTI0LjIgMCAxIDEgMC0yNDguNCAxMjQuMiAxMjQuMiAwIDEgMSAwIDI0OC40em0wLTIxMS44YTg3LjYgODcuNiAwIDEgMCAwIDE3NS4xIDg3LjYgODcuNiAwIDEgMCAwLTE3NS4xeiJdCiAgICB9OwogICAgZmFKdWxpYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqdWxpYSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODUyIiwgIk0xMjQgNDA2LjVjMCAxNi4xLTEuOCAyOS4xLTUuNCAzOXMtOC44IDE3LjYtMTUuNSAyMy4xLTE0LjcgOS4xLTI0LjEgMTEtMTkuOCAyLjgtMzEuMiAyLjhjLTE1LjUgMC0yNy4zLTIuNC0zNS41LTcuM1MwIDQ2NC41IDAgNDU3LjdjMC01LjYgMi4zLTEwLjQgNi45LTE0LjNzMTAuOC01LjggMTguNS01LjhjNS44IDAgMTAuNCAxLjYgMTMuOSA0LjdzNi4zIDYuMiA4LjYgOS4zYzIuNiAzLjQgNC44IDUuNiA2LjUgNi44czMuNCAxLjcgNC44IDEuN2MzLjEgMCA1LjQtMS44IDctNS40czIuNC0xMC43IDIuNC0yMS4ybDAtMTk4LjcgNTUuNC0xNS4yIDAgMTg2Ljl6bTc4LjktMTgxLjZsMCAxMjcuOWMwIDMuNiAuNyA2LjkgMi4xIDEwczMuMyA1LjggNS43IDguMSA1LjIgNC4xIDguNSA1LjQgNi43IDIuMSAxMC40IDIuMWM0LjIgMCA4LjktMi4zIDE0LjctNi40IDkuMi02LjQgMTQuNy0xMC45IDE0LjctMTYuMWwwLTEzMSA1NS4xIDAgMCAxODEuNi01NS4xIDAgMC0xNi45Yy03LjMgNi4xLTE1IDExLTIzLjIgMTQuN3MtMTYuMiA1LjYtMjMuOSA1LjZjLTkgMC0xNy40LTEuNS0yNS4xLTQuNXMtMTQuNS03LTIwLjMtMTIuMi0xMC40LTExLjItMTMuNy0xOC4xYy0zLjMtNi45LTUtMTQuMy01LTIyLjJsMC0xMjcuOSA1NS4xIDB6TTM5MS40IDQwNi41bC01NC45IDAgMC0yNTQuNiA1NC45LTE1LjIgMCAyNjkuOHptMjIuOS0xNzEuN2w1NS4xLTE1LjIgMCAxODYuOS01NS4xIDAgMC0xNzEuN3ptMTcwLjMgNzcuOWMtNS4zIDIuMy0xMC43IDQuOS0xNi4xIDcuOXMtMTAuMyA2LjItMTQuNyA5LjgtOCA3LjMtMTAuOCAxMS40LTQuMSA4LjItNC4xIDEyLjZjMCAzLjQgLjQgNi42IDEuMyA5LjhzMi4xIDUuOCAzLjggOC4xIDMuNCA0LjEgNS4zIDUuNCA0IDIuMSA2LjMgMi4xYzQuNSAwIDkuMS0xLjQgMTMuNy00LjFzOS43LTYuMiAxNS40LTEwLjRsMC01Mi41ek02NDAgNDA2LjVsLTU1LjQgMCAwLTE0LjVjLTMuMSAyLjYtNiA1LTguOSA3LjFzLTYuMiA0LjEtOS44IDUuNy03LjcgMi45LTEyLjIgMy44Yy00LjUgLjktOS44IDEuMy0xNS45IDEuMy04LjQgMC0xNS45LTEuMi0yMi42LTMuNi02LjctMi40LTEyLjQtNS43LTE3LTkuOXMtOC4zLTkuMS0xMC44LTE0LjljLTIuNS01LjctMy44LTEyLTMuOC0xOC43IDAtNi45IDEuMy0xMy4yIDQtMTguOSAyLjctNS42IDYuMy0xMC43IDEwLjktMTUuMiA0LjYtNC41IDkuOS04LjUgMTYuMS0xMi4xczEyLjctNi44IDE5LjctOS44IDE0LjMtNS43IDIxLjktOC4yIDE1LjEtNC45IDIyLjUtNy4xbDYtMS41IDAtMTcuOWMwLTExLjYtMi4yLTE5LjgtNi42LTI0LjdzLTEwLjQtNy4zLTE3LjgtNy4zYy04LjcgMC0xNC44IDIuMS0xOC4xIDYuM3MtNS4xIDkuMy01LjEgMTUuMmMwIDMuNC0uNCA2LjctMS4xIDkuOS0uNyAzLjItMiA2LTMuNyA4LjVzLTQuMyA0LjQtNy42IDUuOGMtMy4zIDEuNS03LjUgMi4yLTEyLjUgMi4yLTcuNyAwLTE0LTIuMi0xOC45LTYuNi00LjgtNC40LTcuMy0xMC03LjMtMTYuOCAwLTYuMyAyLjEtMTIuMSA2LjQtMTcuNSA0LjMtNS40IDEwLTEwIDE3LjMtMTMuOSA3LjMtMy45IDE1LjYtNi45IDI1LjEtOS4yczE5LjYtMy40IDMwLjItMy40YzEzLjEgMCAyNC4zIDEuMiAzMy43IDMuNXMxNy4yIDUuNyAyMy4zIDEwIDEwLjYgOS42IDEzLjUgMTUuNyA0LjQgMTMgNC40IDIwLjZsMCAxMzYuMXpNNjAgMTcyLjlhMzcuNCAzNy40IDAgMSAxIDc0LjkgMCAzNy40IDM3LjQgMCAxIDEgLTc0LjkgMHpNNDUyLjIgOTVhMzcuNCAzNy40IDAgMSAxIDc0LjkgMCAzNy40IDM3LjQgMCAxIDEgLTc0LjkgMHptNDUgNzcuOWEzNy40IDM3LjQgMCAxIDEgNzQuOSAwIDM3LjQgMzcuNCAwIDEgMSAtNzQuOSAwem0tODkuOSAwYTM3LjQgMzcuNCAwIDEgMSA3NC45IDAgMzcuNCAzNy40IDAgMSAxIC03NC45IDB6Il0KICAgIH07CiAgICBmYU5mY0RpcmVjdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5mYy1kaXJlY3Rpb25hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMwIiwgIk0yMTEuOCA0ODguNmMxLjYgMi41IDIuMSA1LjYgMS40IDguNS0uNiAyLjktMi40IDUuNS00LjkgNy4xLTIuNiAxLjYtNS42IDIuMS04LjYgMS41LTYxLjQtMTMuOS0xMTUuNi00OS45LTE1Mi4yLTEwMS4yUy01LjQgMjkwLjMgMS42IDIyNy43YzctNjIuNyAzNi44LTEyMC41IDgzLjctMTYyLjUgNDYuOS00MiAxMDcuNy02NS4yIDE3MC43LTY1LjIgMS41IDAgMi4xIC4zIDQuMyAuOSAxLjQgLjYgMS44IDEuNCAzLjcgMi41IDEuMSAxLjEgMS45IDIuMyAyLjUgMy43IC41IDEuNCAuOCAyLjggLjggNC4zbDAgMTAxIDI0LjUtMjUuOWMxLTEuMSAyLjItMiAzLjYtMi42IDEuMy0uNiAyLjgtLjkgNC4zLTEgMS41LS4xIDIuOSAuMiA0LjMgLjdzMi43IDEuMyAzLjggMi40YzEgMSAxLjkgMi4yIDIuNSAzLjYgLjYgMS4zIDEgMi44IDEgNC4zcy0uMiAzLS43IDQuM2MtLjYgMS40LTEuNCAyLjYtMi40IDMuN2wtNDQgNDYuNmMtMS4xIDEuMS0yLjMgMi0zLjcgMi42LTEuNSAuNi0zIC45LTUuNCAuOS0uNiAwLTIuMi0uMy0zLjYtLjlzLTIuNy0xLjUtMy43LTIuNmwtNDQuMS00Ni42Yy0yLTIuMi0zLjEtNS4xLTMtOC4xIDAtMyAxLjMtNi43IDMuNS03LjkgMi4yLTIuMSA1LjEtMy4yIDguMS0zLjEgMyAuMSA1LjggMS4zIDcuOSAzLjVsMjQuNSAyNiAwLTg5LjVjLTU2LjQgMi44LTEwOS44IDI1LjgtMTUwLjUgNjUtNDAuNiAzOS4xLTY1LjcgOTEuNy03MC42IDE0Ny45UzM0LjQgMzQ4LjEgNjcuNyAzOTMuN2MzMi40IDQ1LjUgODIgNzcuNSAxMzcgODkuOSAyLjkgLjcgNS41IDIuNSA3LjEgNXpNMTcxLjQgMTI2LjFjLS44IDEuMy0xLjkgMi40LTMuMSAzLjItMjAuNSAxMy45LTM3LjIgMzIuNi00OC44IDU0LjVzLTE3LjcgNDYuMy0xNy43IDcxLjEgNi4xIDQ5LjIgMTcuNyA3MC4yYzExLjYgMjIuOCAyOC4zIDQxLjUgNDguOCA1NS40IDIuNSAxLjcgNC4yIDQuMyA0LjcgNy4zIC42IDIuOS0uOSA2LTEuNyA4LjQtMS43IDIuNS01LjIgNC4yLTcuMyAzLjktMi45IDEuNC02IC44LTguNC0uOS0yMy42LTE2LTQyLjgtMzcuNS01Ni4xLTYyLjctMTMuMy0yNS4xLTIwLjMtNTMuMS0yMC4zLTgxLjYgMC0yOC40IDctNTYuNSAyMC4zLTgxLjYgMTMuMy0yNS4yIDMyLjUtNDYuNyA1Ni4xLTYyLjcgMS4yLS44IDIuNi0xLjQgNC0xLjggMS41LS4zIDMtLjMgNC41IDAgMS40IC4yIDIuOCAuOCA0LjEgMS42czIuMyAxLjkgMy4yIDMuMWMuOCAxLjIgMS40IDIuNiAxLjcgNC4xcy4zIDMgMCA0LjRjLS4zIDEuNS0uOCAyLjktMS43IDQuMXpNMzQwLjkgMzgzLjVjLjgtMS4yIDEuOS0yLjMgMi4yLTMuMWwwLS4xYzIxLjMtMTQgMzgtMzIuNyA0OS42LTU0LjYgMTEuNS0yMS44IDE3LjUtNDYuMiAxNy41LTcwLjlzLTYtNDkuMS0xNy41LTcxYy0xMS42LTIyLjctMjguMy00MC41LTQ5LjYtNTQuNS0uMy0uOC0xLjQtMS45LTIuMi0zLjEtLjgtMS4zLTEuNC0yLjctMS42LTQuMS0xLjItMS41LS4zLTMgMC00LjQgLjMtMS41IC45LTIuOSAxLjctNC4xIC45LTEuMiAxLjEtMi4zIDMuMi0zLjEgMS4yLS44IDIuNi0xLjMgNC4xLTEuNnMyLjktLjMgNC40IDAgMi44IC45IDQuMSAxLjhjMjMuNCAxNiA0Mi43IDM3LjUgNTUuOSA2Mi42IDEzLjMgMjUuMSAxOS40IDUzLjEgMTkuNCA4MS41IDAgMjguNS02LjEgNTYuNS0xOS40IDgxLjYtMTMuMiAyNS4xLTMyLjUgNDYuNi01NS45IDYyLjYtMS4zIC45LTIuNiAxLjUtNC4xIDEuOHMtMi45IC4zLTQuNCAwLTIuOS0xLjctNC4xLTEuNmMtMi4xLS44LTIuMy0xLjktMy4yLTMuMS0uOC0xLjItMS40LTIuNi0xLjctNC4xLS4zLTEuNC0xLjItMi45IDAtNC40IC4yLTEuNCAuOC0yLjggMS42LTQuMXpNMzEyLjMgNi4zYzU2LjIgMTIuNyAxMDYuNCA0NCAxNDIuNyA4OC43IDMwLjQgMzcuNiA0OS42IDgzIDU1LjMgMTMxIDUuNiA0OC0yLjQgOTYuNy0yMy4yIDE0MC4zLTIwLjkgNDMuNi01My42IDgwLjUtOTQuNSAxMDYuMy00MC45IDI1LjctODguMiAzOS40LTEzNi42IDM5LjQtMS41IDAtMi45LS4zLTQuMy0uOS0xLjQtLjUtMi42LTEuNC0zLjctMi40LTEuOS0xLjEtMS45LTIuMy0yLjQtMy43LS42LTEuNC0uOS0yLjgtLjktNC4zbDAtOTkuMi0yNC41IDI2Yy0yLjEgMi4yLTQuOSAyLjYtNy45IDMuNi0zIC4xLTUuOS0xLjEtOC4xLTQtMi4yLTEuMi0zLjUtNC0zLjUtNy0uMS0zIDEtNS45IDMtOC4xbDQ0LjEtNDYuNmMxLjMtMi4yIDUuMS0zLjQgNy4zLTMuNCA0IDAgNi45IDEuMiA5LjEgMy40bDQ0IDQ2LjZjMi4xIDIuMiAzLjIgNS4xIDMuMSA4LjFzLTEuNCA1LjgtMy41IDdjLTIuMiAyLjktNS4xIDQuMS04LjEgNC0zLTEtNS45LTEuNC03LjktMy42bC0yNC41LTI1LjkgMCA4Ny41YzU2LjQtMi44IDEwOS44LTI1LjggMTUwLjUtNjUgNDAuNy00MCA2NS44LTkxLjcgNzAuNy0xNDcuOSA0LjgtNTcuMS0xMC44LTExMi4zLTQ0LjEtMTU3LjktMzMuMy00NS42LTgyLTc3LjUtMTM3LTg5LjktMS41LS4zLTIuOC0uOS00LjEtMS44LTEuMi0uOS0yLjItMS45LTMtMy4yLS44LTEuMi0yLjItMi42LTEuNi00LjEtLjItMS41LS4yLTMgLjEtNC40IC40LTEuNCAxLTIuOCAxLjgtNCAuOS0xLjIgMi0yLjIgMy4yLTMgMS4zLS44IDIuNy0xLjMgNC4xLTEuNiAxLjUtLjMgMy0uMiA0LjQgLjF6bTQwLjggMjQ5LjhjMCAzMS40LTE3LjUgNjEuMS00OS4zIDgzLjUtMi4xIDEuNS00LjggMi4zLTcuNCAyLTIuNy0uMi01LjItMS4zLTctMy4ybC03MC4xLTY5LjhjLTIuMi0yLjEtNC4yLTUtMy40LTggMC0zIDEuMi01LjkgMy4zLTggMi4yLTIuMSA1LTMuMyA4LTMuM3M1LjkgMS4yIDggMy4zbDYzLjEgNjIuOGMyMC44LTE3LjEgMzIuMi0zNy45IDMyLjItNTkuMyAwLTIzLjktMTQuMS00Ny0zOS43LTY1LjEtMi41LTEuNy00LjEtNC4zLTQuNi03LjMtLjUtMi45IC4xLTYgMS45LTguNCAxLjctMi41IDQuMy00LjEgNy4zLTQuNiAyLjktLjUgNiAuMSA4LjQgMS45IDMxLjggMjIuNCA0OS4zIDUyLjEgNDkuMyA4My41ek0yMTYuNyAzNDEuNWMtMyAuNS02LS4yLTguNS0xLjktMzEuNy0yMi40LTUwLjEtNTIuMS01MC4xLTgzLjVzMTguNC02MS4xIDUwLjEtODMuNWMyLjItMS42IDQuOS0yLjMgNy41LTIuMSAyLjcgLjMgNS4xIDEuNCA3IDMuM2w3MC4xIDY5LjhjMi4xIDIuMSAzLjMgNSAzLjMgOHMtMiA1LjgtMy4zIDhjLTIuMSAyLjEtNSAzLjMtNy45IDMuMy0zIDAtNi44LTEuMi04LTMuM2wtNjMuMS02Mi45Yy0yMC45IDE3LjMtMzIuMiAzOC0zMi4yIDU5LjQgMCAyMyAxNC4xIDQ3IDM5LjcgNjUgMi40IDEuOCA0LjEgNC40IDQuNiA3LjQgLjUgMi45LS4yIDUuOS0xLjkgOC40LTEuNyAyLjQtNC40IDQuMS03LjMgNC42eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLWJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTciLCAiTTMyMi45IDE5NC40bDAgMTAxLjQtMjguMyAwIDAgMTIwLjUtNzcuMSAwIDAtMTIwLjQtMjguMyAwIDAtMTAxLjVjMC00LjQgMS42LTguMiA0LjYtMTEuMyAzLjEtMy4xIDYuOS00LjcgMTEuMy00LjdsMTAxLjkgMGM0LjEgMCA3LjggMS42IDExLjEgNC43IDMuMSAzLjIgNC44IDYuOSA0LjggMTEuM3ptLTMyLjUtNjQuNWEzNC41IDM0LjUgMCAxIDEgLTY5IC44IDM0LjUgMzQuNSAwIDEgMSA2OS0uOHpNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zeiJdCiAgICB9OwogICAgZmFVbWJyYWNvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVtYnJhY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhlOCIsICJNMjU2LjMgOGEyNDggMjQ4IDAgMSAwIC0uNyA0OTYgMjQ4IDI0OCAwIDEgMCAuNy00OTZ6bTE0NSAyNjZjLS44IDI3LjEtNS40IDQ4LjgtMTQgNjVzLTIzLjEgMjcuOS00My41IDM1Yy0yMC40IDcuMS00OC45IDEwLjYtODUuNCAxMC41bC00LjYgMGMtMzYuNSAuMS02NS0zLjMtODUuNC0xMC41cy0zNC45LTE4LjgtNDMuNS0zNWMtOC42LTE2LjItMTMuMi0zNy45LTE0LTY1LS43LTEwLjItLjctMjAuNSAwLTMwLjcgLjQtMTQuNyAxLjYtMjkuMyAzLjYtNDMuOSAxLjktMTMuNCAzLjYtMjIuNiA1LjQtMzIgMS00LjkgMS4zLTYuNCAxLjgtOC40IC4zLTEuMSAuOS0yLjEgMS44LTIuOHMyLTEuMSAzLjEtMS4xbC43IDAgMzIgNWMxLjIgLjIgMi4yIC44IDMgMS43czEuMiAyLjEgMS4yIDMuM2MwIC4zIDAgLjUgMCAuOGwtMS43IDguOGMtMS42IDguOC0zLjIgMjAuMS00LjggMzMuNy0xLjcgMTQtMi41IDI4LjEtMi42IDQyLjItLjIgMjcgMi41IDQ2LjkgOC4xIDU5LjggMi44IDYuNCA3LjIgMTIgMTIuNiAxNi40czExLjkgNy40IDE4LjcgOC44YzE4LjggNCAzOC4xIDUuNyA1Ny4zIDUuMWwxMC4zIDBjMTkuMiAuNiAzOC41LTEuMiA1Ny4zLTUuMiA2LjgtMS40IDEzLjItNC41IDE4LjYtOC44czkuNy0xMCAxMi41LTE2LjRjNS43LTEyLjkgOC40LTMyLjkgOC4xLTU5LjgtLjEtMTQuMS0xLTI4LjItMi42LTQyLjEtMS43LTEzLjYtMy4zLTI0LjgtNC45LTMzLjdsLTEuNy04LjhjMC0uMyAwLS41IDAtLjggMC0xLjIgLjQtMi40IDEuMi0zLjNzMS44LTEuNSAzLTEuN2wzMi01IC44IDBjMS4xIDAgMi4yIC40IDMuMSAxLjFzMS41IDEuNyAxLjggMi44Yy42IDIgLjggMy42IDEuOCA4LjQgMS44IDkuNiAzLjUgMTguOCA1LjQgMzIgMiAxNC42IDMuMiAyOS4yIDMuNiA0My45IC43IDEwLjIgLjcgMjAuNSAwIDMwLjdsMCAweiJdCiAgICB9OwogICAgZmFIb29saSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob29saSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDI3IiwgIk0xNDQuNSAzNTJsMzguMyAuOGMtMTMuMi00LjYtMjYtMTAuMi0zOC4zLTE2LjhsMCAxNnptNTcuNy01LjNsMCA1LjMtMTkuNCAuOGMzNi41IDEyLjUgNjkuOSAxNC4yIDk0LjcgNy4yLTE5LjkgLjItNDUuOC0yLjYtNzUuMy0xMy4zek02MTEuMSAyMzEuNWMxNS45IDAgMjguOS0xMi45IDI4LjktMjguOXMtMTIuOS0yNC41LTI4LjktMjQuNWMtMTUuOSAwLTI4LjkgOC42LTI4LjkgMjQuNXMxMi45IDI4LjkgMjguOSAyOC45ek01ODIuMSAzNTJsNTcuOSAwIDAtMTEwLjUtNTcuOSAwIDAgMTEwLjV6bS03My43IDBsNTcuOSAwIDAtMTk1LjMtNTcuOSAyNy4zIDAgMTY4em0tMzEtMTE5LjRjLTE4LjItMTguMi01MC40LTE3LjEtNTAuNC0xNy4xcy0zMi4zLTEuMS01MC40IDE3LjFjLTE4LjIgMTguMi0xNi44IDMzLjktMTYuOCA1Mi42cy0xLjQgMzQuMyAxNi44IDUyLjUgNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjgtMzMuOCAxNi44LTUyLjUtLjEtMTguOCAxLjMtMzQuNS0xNi44LTUyLjZ6bS0zOS44IDcxLjljMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40ek0zMzEuNCAyMzIuNmMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjItMS4xLTUwLjQgMTcuMWMtMS45IDEuOS0zLjcgMy45LTUuMyA2LTM4LjItMjkuNi03Mi41LTQ2LjUtMTAyLjEtNjEuMWwwLTIwLjctMjIuNSAxMC42Yy01NC40LTIyLjEtODktMTguMi05Ny4zIC4xIDAgMC0yNC45IDMyLjggNjEuOCAxMTAuOGwwIDczLjcgNTcuOSAwIDAtMjguNmMtNi41LTQuMi0xMy04LjctMTkuNC0xMy42LTE0LjgtMTEuMi0yNy40LTIxLjYtMzguNC0zMS40bDAtMzFjMTMuMSAxNC43IDMwLjUgMzEuNCA1My40IDUwLjNsNC41IDMuNiAwLTI5LjhjMC02LjkgMS43LTE4LjIgMTAuOC0xOC4yczEwLjYgNi45IDEwLjYgMTVsMCA0OC43YzE4IDEyLjIgMzcuMyAyMi4xIDU3LjcgMjkuNmwwLTkzLjljMC0xOC43LTEzLjQtMzcuNC00MC42LTM3LjQtMTUuOC0uMS0zMC41IDguMi0zOC41IDIxLjlsMC01NC4zYzQxLjkgMjAuOSA4My45IDQ2LjUgOTkuOSA1OC4zLTEwLjIgMTQuNi05LjMgMjguMS05LjMgNDMuNyAwIDE4LjctMS40IDM0LjMgMTYuOCA1Mi41czUwLjQgMTcuMSA1MC40IDE3LjEgMzIuMyAxLjEgNTAuNC0xNy4xYzE4LjItMTguMiAxNi43LTMzLjggMTYuNy01Mi41IDAtMTguNSAxLjUtMzQuMi0xNi43LTUyLjN6TTY1LjIgMTg0bDAgNjMuM2MtNDguNy01NC41LTM4LjktNzYtMzUuMi03OS4xIDEzLjUtMTEuNCAzNy41LTggNjQuNCAyLjFMNjUuMiAxODR6TTI5MS43IDMwNC41YzAgMy42LTEuOCAxMi41LTEwLjcgMTIuNXMtMTAuNy04LjktMTAuNy0xMi41bDAtNDAuNGMwLTguNyA3LjMtMTAuOSAxMC43LTEwLjlzMTAuNyAyLjEgMTAuNyAxMC45bDAgNDAuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlR2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1naXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ2l0LXNxdWFyZSJdLCAiZjFkMiIsICJNMTIwLjggMzM1LjVjLTUuOS0uNC0xMi42LS44LTIwLjItMS4zLTMuMyA0LjEtNi42IDguNC02LjYgMTMuNSAwIDE4LjUgNjUuNSAxOC41IDY1LjUtMS41IDAtOC4zLTcuNC04LjctMzguOC0xMC43bC4xIDB6bTcuOC0xMTcuOWMtMzIuMyAwLTMzLjcgNDQuNS0uNyA0NC41IDMyLjUgMCAzMS43LTQ0LjUgLjctNDQuNXpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTI0My45IDE3Mi4yYy0xNC41IDAtMjIuOS04LjQtMjIuOS0yMi45czguNC0yMi4zIDIyLjktMjIuM2MxNC43IDAgMjMuMSA3LjggMjMuMSAyMi4zcy04LjQgMjIuOS0yMy4xIDIyLjl6TTE0OS42IDE5NWw0OS41IDAgMCAyMS42LTIzLjQgMS44YzQuNiA1LjggOS40IDE0IDkuNCAyNS43IDAgNDguNy01Ny4yIDQ3LjItNzQuMiA0Mi40bC04LjQgMTMuNGM1IC4zIDkuOCAuNiAxNC4zIC44IDU2LjMgMy4yIDgwLjUgNC42IDgwLjUgMzguNSAwIDI5LjItMjUuNyA0NS43LTY5LjkgNDUuNy00NiAwLTYzLjUtMTEuNi02My41LTMxLjcgMC0xMS40IDUuMS0xNy41IDE0LTI1LjktOC40LTMuNS0xMS4yLTkuOS0xMS4yLTE2LjggMC05LjYgNy40LTE2LjMgMjMtMzAuNmwuMi0uMmMtMTIuNC02LjEtMjEuOC0xOS4zLTIxLjgtMzguMSAwLTUxLjYgNTYuNi01My4zIDgxLjYtNDYuOGwtLjEgLjJ6TTI3MC41IDMwMy4xbDEzIDEuOCAwIDIwLjEtNzIuNCAwIDAtMjAuMWMyLjctLjQgNS0uNyA2LjktLjkgOS45LTEuMiAxMC4xLTEuMyAxMC4xLTZsMC03NC43YzAtNC40LS45LTQuNy0xMC4xLTcuOC0xLjktLjctNC4yLTEuNC02LjktMi40bDIuOC0yMC42IDUyLjYgMCAwIDEwNS41YzAgNC4xIC4yIDQuNiA0LjEgNS4xbC0uMSAwem0xMDYuNi0xMC40TDM4NCAzMTVjLTEwLjkgNS40LTI2LjkgMTAuMi00MS40IDEwLjItMzAuMiAwLTQxLjctMTIuMi00MS43LTQwLjlsMC02Ni42YzAtLjggMC0xLjQtLjItMS44LS44LTEuMi00LjItLjctMTkuNi0uN2wwLTIyLjZjMjIuMy0yLjUgMzEuMi0xMy43IDM0LTQxLjRsMjQuMiAwYzAgMzMuMy0uNiAzOCAuNyAzOC42IC4zIC4xIC43IDAgMS4zIDBsMzUuOCAwIDAgMjUuNC0zNy44IDAgMCA2MS42Yy0uMiA2LjMtLjkgMzAuNCAzNy45IDE1LjlsLS4xIDB6Il0KICAgIH07CiAgICBmYUdpdFNxdWFyZSA9IGZhU3F1YXJlR2l0OwogICAgZmFPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9kbm9rbGFzc25pa2kiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjI2MyIsICJNMjc1LjEgMzM0Yy0yNy40IDE3LjQtNjUuMSAyNC4zLTkwIDI2LjlsMjAuOSAyMC42IDc2LjMgNzYuM2MyNy45IDI4LjYtMTcuNSA3My4zLTQ1LjcgNDUuNy0xOS4xLTE5LjQtNDcuMS00Ny40LTc2LjMtNzYuNkw4NCA1MDMuNGMtMjguMiAyNy41LTczLjYtMTcuNi00NS40LTQ1LjcgMTkuNC0xOS40IDQ3LjEtNDcuNCA3Ni4zLTc2LjNsMjAuNi0yMC42Yy0yNC42LTIuNi02Mi45LTkuMS05MC42LTI2LjktMzIuNi0yMS00Ni45LTMzLjMtMzQuMy01OSA3LjQtMTQuNiAyNy43LTI2LjkgNTQuNi01LjcgMCAwIDM2LjMgMjguOSA5NC45IDI4LjlTMjU1IDI2OS4yIDI1NSAyNjkuMmMyNi45LTIxLjEgNDcuMS04LjkgNTQuNiA1LjcgMTIuNCAyNS43LTEuOSAzOC0zNC41IDU5LjF6bTE0LjYtMjA0LjdhMTI5LjcgMTI5LjcgMCAxIDEgLTI1OS40IC40IDEyOS43IDEyOS43IDAgMSAxIDI1OS40LS40em0tMTkzLjQgLjRhNjMuNyA2My43IDAgMSAwIDEyNy40LS40IDYzLjcgNjMuNyAwIDEgMCAtMTI3LjQgLjR6Il0KICAgIH07CiAgICBmYURydXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcnVwYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFhOSIsICJNMjcyLjMgMTA4LjFDMjM2LjUgNzIuNSAyMDIuNSAzOC40IDE5Mi40IDAgMTgyLjQgMzguNCAxNDguMSA3Mi41IDExMi40IDEwOC4xIDU4LjggMTYxLjctMS45IDIyMi40LTEuOSAzMTMuNC00LjMgNDIwLjcgODAuOCA1MDkuNiAxODguMSA1MTJzMTk2LjItODIuOCAxOTguNS0xOTAuMWMuMS0yLjggLjEtNS42IDAtOC41IDAtOTEuMS02MC44LTE1MS43LTExNC4zLTIwNS4zek05OCAzMzEuMWMtNS45IDcuNS0xMSAxNS42LTE1LjIgMjQuMi0uMyAuNy0uOCAxLjMtMS4zIDEuOHMtMS4yIC44LTIgMWwtMS43IDBjLTQuMyAwLTkuMi04LjUtOS4yLTguNS0xLjMtMi0yLjUtNC4yLTMuNy02LjRsLS44LTEuOGMtMTEuMi0yNS43LTEuNS02Mi4zLTEuNS02Mi4zIDQuOC0xNy44IDEyLjctMzQuNyAyMy4yLTQ5LjkgNi40LTkuNiAxMy41LTE4LjkgMjEtMjcuN2w5LjIgOS4yIDQzLjUgNDQuNGMuOCAuOSAxLjMgMi4xIDEuMyAzLjNzLS41IDIuNC0xLjMgMy4zTDExNC4xIDMxMi4zIDk4IDMzMS4xem05Ni42IDEyNy4zYy0xMi45LS4xLTI1LjYtMy45LTM2LjQtMTFzLTE5LjQtMTcuMS0yNC42LTI4LjktNy0yNC45LTUtMzcuNyA3LjYtMjQuNyAxNi4yLTM0LjRjMTQuMi0xNi45IDMxLjUtMzMuNSA1MC4zLTU1LjMgMjIuMyAyMy44IDM2LjkgNDAuMSA1MS4yIDU4IDEuMSAxLjQgMi4xIDIuOSAzIDQuNCA3LjggMTEuMSAxMiAyNC40IDEyIDM4IDAgOC44LTEuNyAxNy40LTUgMjUuNXMtOC4yIDE1LjUtMTQuNCAyMS43LTEzLjUgMTEuMS0yMS42IDE0LjUtMTYuNyA1LjEtMjUuNSA1LjFsLS4yIDB6TTMyMC43IDM1MS42Yy0uNCAxLjQtMS4yIDIuNi0yLjMgMy42cy0yLjQgMS42LTMuOCAxLjhsLTEuMyAwYy0yLjYtLjktNC45LTIuNy02LjMtNS4xLTExLjYtMTcuNS0yNC45LTMzLjktMzkuNS00OWwtMTcuOC0xOC40LTU5LjEtNjEuM2MtMTIuNC0xMS41LTI0LjItMjMuNi0zNS40LTM2LjMtLjMtLjUtLjYtLjktLjktMS40LTItMi44LTMuNi01LjktNC43LTkuMmwwLTEuOGMtLjgtNS0uNC0xMC4xIDEuMi0xNXM0LjQtOS4yIDgtMTIuN2MxMS40LTExLjQgMjMtMjMgMzMuOC0zNC45IDEyIDEzLjMgMjQuOCAyNiAzNy40IDM4LjYgMjUuOCAyNCA0OS4xIDUwLjUgNjkuNiA3OS4xIDE3LjMgMjQuNSAyNi43IDUzLjggMjcgODMuOC0uMSAxMi45LTIuMiAyNS44LTYgMzguMnoiXQogICAgfTsKICAgIGZhQmxvZ2dlckIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxvZ2dlci1iIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2QiLCAiTTQ0Ni42IDIyMi43Yy0xLjgtOC02LjgtMTUuNC0xMi41LTE4LjUtMS44LTEtMTMtMi4yLTI1LTIuNy0yMC4xLS45LTIyLjMtMS4zLTI4LjctNS0xMC4xLTUuOS0xMi44LTEyLjMtMTIuOS0yOS41LS4xLTMzLTEzLjgtNjMuNy00MC45LTkxLjMtMTkuMy0xOS43LTQwLjktMzMtNjUuNS00MC41LTUuOS0xLjgtMTkuMS0yLjQtNjMuMy0yLjktNjkuNC0uOC04NC44IC42LTEwOC40IDEwLTQzLjUgMTcuMi03NC43IDUzLjgtODYuMSAxMDAuNi0yLjEgOC44LTIuNiAyMi45LTMuMSAxMDMuOS0uNiAxMDEuNSAuMSAxMTYuNCA2LjQgMTM2LjUgMTUuNiA0OS42IDU5LjkgODYuMyAxMDQuNCA5NC4zIDE0LjggMi43IDE5Ny4zIDMuMyAyMTYgLjggMzIuNS00LjQgNTgtMTcuNSA4MS45LTQxLjkgMTcuMy0xNy43IDI4LjEtMzYuOCAzNS4yLTYyLjEgNC45LTE3LjYgNC41LTE0Mi44IDIuNS0xNTEuN3pNMTI0LjUgMTU5LjFjNy44LTcuOSAxMC04LjIgNTguOC04LjIgNDMuOSAwIDQ1LjQgLjEgNTEuOCAzLjQgOS4zIDQuNyAxMy40IDExLjMgMTMuNCAyMS45IDAgOS41LTMuOCAxNi4yLTEyLjMgMjEuNi00LjYgMi45LTcuMyAzLjEtNTAuMyAzLjMtMjYuNSAuMi00Ny43LS40LTUwLjgtMS4yLTE2LjYtNC43LTIyLjgtMjguNS0xMC42LTQwLjh6TTMxNi4zIDM1OC45bC0xNC45IDIuNC03Ny41IC45Yy02OC4xIC44LTg3LjMtLjQtOTAuOS0yLTcuMS0zLjEtMTMuOC0xMS43LTE0LjktMTkuNC0xLjEtNy4zIDIuNi0xNy4zIDguMi0yMi40IDcuMS02LjQgMTAuMi02LjYgOTcuMy02LjcgODkuNi0uMSA4OS4xLS4xIDk3LjYgNy44IDEyLjEgMTEuMyA5LjUgMzEuMi00LjkgMzkuNHoiXQogICAgfTsKICAgIGZhSW52aXNpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW52aXNpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiMCIsICJNNDA3LjQgMzJMNDAuNiAzMkMxOC4yIDMyIDAgNTAuMiAwIDcyLjZMMCA0MzkuNEMwIDQ2MS44IDE4LjIgNDgwIDQwLjYgNDgwbDM2Ni44IDBjMjIuNCAwIDQwLjYtMTguMiA0MC42LTQwLjZsMC0zNjYuOEM0NDggNTAuMiA0MjkuOCAzMiA0MDcuNCAzMnpNMTc2LjEgMTQ1LjZjLjQgMjMuNC0yMi40IDI3LjMtMjYuNiAyNy40LTE0LjkgMC0yNy4xLTEyLTI3LjEtMjcgLjEtMzUuMiA1My4xLTM1LjUgNTMuNy0uNHpNMzMyLjggMzc3Yy02NS42IDAtMzQuMS03NC0yNS0xMDYuNiAxNC4xLTQ2LjQtNDUuMi01OS01OS45IC43bC0yNS44IDEwMy4zLTQ1LjEgMCA4LjEtMzIuNWMtMzEuNSA1MS44LTk0LjYgNDQuNC05NC42LTQuMyAuMS0xNC4zIC45LTE0IDIzLTEwNC4xbC0zMS44IDAgOS43LTM1LjYgNzYuNCAwYy0zMy42IDEzMy43LTMyLjYgMTI2LjktMzIuOSAxMzguMiAwIDIwLjkgNDAuOSAxMy41IDU3LjQtMjMuMmwxOS44LTc5LjQtMzIuMyAwIDkuNy0zNS42IDY4LjggMC04LjkgNDAuNWM0MC41LTc1LjUgMTI3LjktNDcuOCAxMDEuOCAzOC0xNC4yIDUxLjEtMTQuNiA1MC43LTE0LjkgNTguOCAwIDE1LjUgMTcuNSAyMi42IDMxLjgtMTYuOUwzODYgMzI1Yy0xMC41IDM2LjctMjkuNCA1Mi01My4yIDUyeiJdCiAgICB9OwogICAgZmFGYWNlYm9va0YgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2stZiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMzllIiwgIk04MCAyOTkuM2wwIDIxMi43IDExNiAwIDAtMjEyLjcgODYuNSAwIDE4LTk3LjgtMTA0LjUgMCAwLTM0LjZjMC01MS43IDIwLjMtNzEuNSA3Mi43LTcxLjUgMTYuMyAwIDI5LjQgLjQgMzcgMS4ybDAtODguN0MyOTEuNCA0IDI1Ni40IDAgMjM2LjIgMCAxMjkuMyAwIDgwIDUwLjUgODAgMTU5LjRsMCA0Mi4xLTY2IDAgMCA5Ny44IDY2IDB6Il0KICAgIH07CiAgICBmYUNlbnRvcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjZW50b3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4OSIsICJNMjg5LjYgOTcuNWwzMS42IDMxLjctNzYuMyA3Ni41IDAtMTA4LjIgNDQuNyAwek0xMjcuMiAxMjkuMmw3Ni4zIDc2LjUgMC0xMDguMi00NC43IDAtMzEuNiAzMS43em00MS41LTQxLjZsNDQuNyAwIDAgMTI3LjkgMTAuOCAxMC44IDEwLjgtMTAuOCAwLTEyNy45IDQ0LjcgMC01NS41LTU1LjYtNTUuNSA1NS42em0yNi4yIDE2OC4xbC0xMC44LTEwLjgtMTI4LjYgMCAwLTQ0LjgtNTUuNSA1NS42IDU1LjUgNTUuNiAwLTQ0LjggMTI4LjYgMCAxMC44LTEwLjh6TTI3NC4yIDIzNWwxMDcuOSAwIDAtNDQuOC0zMS42LTMxLjctNzYuMyA3Ni41em0xNzMuMyAyMC43bC01NS41LTU1LjYgMCA0NC44LTEyNy43IDAtMTAuOCAxMC44IDEwLjggMTAuOCAxMjcuNyAwIDAgNDQuOCA1NS41LTU1LjZ6TTY1LjQgMTc2LjJsMzIuNS0zMS43IDkwLjMgOTAuNSAxNS4zIDAgMC0xNS4zLTkwLjMtOTAuNSAzMS42LTMxLjctNzkuNCAwIDAgNzguN3pNMzgyLjEgOTcuNWwtNzguNSAwIDMxLjYgMzEuNy05MC4zIDkwLjUgMCAxNS4zIDE1LjMgMCA5MC4zLTkwLjUgMzEuNiAzMS43IDAtNzguN3pNMjAzLjUgNDEzLjlsMC0xMDguMS03Ni4zIDc2LjUgMzEuNiAzMS43IDQ0LjcgMCAwLS4xek02NS40IDIzNWwxMDguOCAwLTc2LjMtNzYuNS0zMi41IDMxLjcgMCA0NC44ek0zODIuMSAzMzUuMmwtMzEuNiAzMS43LTkwLjMtOTAuNS0xNS4zIDAgMCAxNS4zIDkwLjMgOTAuNS0zMS42IDMxLjcgNzguNSAwIDAtNzguN3ptMC01OC44bC0xMDcuOSAwIDc2LjMgNzYuNSAzMS42LTMxLjcgMC00NC44ek0zMjEuMiAzODIuMmwtNzYuMy03Ni41IDAgMTA4LjEgNDQuNyAwIDMxLjYtMzEuNnpNOTcuOSAzNTIuOWw3Ni4zLTc2LjUtMTA4LjggMCAwIDQ0LjggMzIuNSAzMS43em0xODEuOCA3MC45bC00NC43IDAgMC0xMjcuOS0xMC44LTEwLjgtMTAuOCAxMC44IDAgMTI3LjktNDQuNyAwIDU1LjUgNTUuNiA1NS41LTU1LjZ6TTExMy4yIDM4Mi4ybDkwLjMtOTAuNSAwLTE1LjMtMTUuMyAwLTkwLjMgOTAuNS0zMi41LTMxLjcgMCA3OC43IDc5LjQgMC0zMS42LTMxLjd6Il0KICAgIH07CiAgICBmYVNjYWxld2F5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjYWxld2F5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU4NTkiLCAiTTI0My40IDExNy4zbC04NC4zIDBjLTE4LjUgMi4xLTMyLjcgMTcuNS0zMy40IDM2bDAgMTIxLjljMCA4LjIgMy4yIDE1LjMgOC41IDIwLjdzMTIuNSA4LjYgMjAuNiA4LjZjMTYgMCAyOS4yLTEzLjIgMjkuMi0yOS4ybDAtNzcuNGMwLTEyLjEgMTAtMjIuMSAyMi4xLTIyLjFsMzguMSAwYzguMiAwIDE1LjMtMy4yIDIwLjYtOC42czguNS0xMi44IDguNS0yMWMwLTE2LTEzLjktMjguOS0yOS45LTI4Ljl6TTIwNS4zIDM5NS40bDg0LjMgMGMxOC41LTIuMSAzMi43LTE3LjUgMzMuNC0zNmwwLTEyMS45YzAtOC4yLTMuMi0xNS4zLTguNS0yMC43cy0xMi41LTguNi0yMC42LTguNmMtMTYgMC0yOS4yIDEzLjItMjkuMiAyOS4ybDAgNzcuNGMwIDEyLjEtMTAgMjIuMS0yMi4xIDIyLjFsLTM4LjEgMGMtOC4yIDAtMTUuMyAzLjItMjAuNiA4LjZzLTguNSAxMi44LTguNSAyMWMuNCAxNiAxMy45IDI4LjkgMjkuOSAyOC45ek0xMDQuMyAwTDI1Ny42IDBjMTAxIDAgMTgyLjUgODEuNiAxODIuMSAxODIuOWwwIDI0Mi44Yy00LjYgNDYtNDIgODIuNC04OC4yIDg2LjNMMTkwIDUxMkM4OS4zIDUxMiA3LjUgNDMwIDcuNSAzMjkuMUw3LjUgOTdjMC01My41IDQzLjQtOTcgOTYuOC05N3pNMzgxLjcgMTgyLjljMC02OC41LTU1LjktMTI0LjQtMTI0LjItMTI0LjRsLTE1MyAwQzgzLjMgNTguNSA2Ni4yIDc1LjYgNjYuMiA5N2wwIDIzMi4xYzAgNjguOCA1NS41IDEyNC40IDEyNC4yIDEyNC40bDE1OC43IDBjMTYuNy0yLjEgMjkuOS0xNSAzMi43LTMxLjRsMC0yMzkuMnoiXQogICAgfTsKICAgIGZhQ2NBbWF6b25QYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1hem9uLXBheSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDJkIiwgIk0xMjQuNyAyMDEuOGMuMS0xMS44IDAtMjMuNSAwLTM1LjNsMC0zNS4zYzAtMS4zIC40LTIgMS40LTIuNyAxMS41LTggMjQuMS0xMi4xIDM4LjItMTEuMSAxMi41IC45IDIyLjcgNyAyOC4xIDIxLjcgMy4zIDguOSA0LjEgMTguMiA0LjEgMjcuNyAwIDguNy0uNyAxNy4zLTMuNCAyNS42LTUuNyAxNy44LTE4LjcgMjQuNy0zNS43IDIzLjktMTEuNy0uNS0yMS45LTUtMzEuNC0xMS43LS45LS44LTEuNC0xLjYtMS4zLTIuOHptMTU0LjkgMTQuNmM0LjYgMS44IDkuMyAyIDE0LjEgMS41IDExLjYtMS4yIDIxLjktNS43IDMxLjMtMTIuNSAuOS0uNiAxLjMtMS4zIDEuMy0yLjUtLjEtMy45IDAtNy45IDAtMTEuOCAwLTQtLjEtOCAwLTEyIDAtMS40LS40LTItMS44LTIuMi03LS45LTEzLjktMi4yLTIwLjktMi45LTctLjYtMTQtLjMtMjAuOCAxLjktNi43IDIuMi0xMS43IDYuMi0xMy43IDEzLjEtMS42IDUuNC0xLjYgMTAuOCAuMSAxNi4yIDEuNiA1LjUgNS4yIDkuMiAxMC40IDExLjJ6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM2OC41IDEwMy45Yy40IDEuNyAuOSAzLjQgMS42IDUuMSAxNi41IDQwLjYgMzIuOSA4MS4zIDQ5LjUgMTIxLjkgMS40IDMuNSAxLjcgNi40IC4yIDkuOS0yLjggNi4yLTQuOSAxMi42LTcuOCAxOC43LTIuNiA1LjUtNi43IDkuNS0xMi43IDExLjItNC4yIDEuMS04LjUgMS4zLTEyLjkgLjktMi4xLS4yLTQuMi0uNy02LjMtLjgtMi44LS4yLTQuMiAxLjEtNC4zIDQtLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjYgMS42IDYuNyA2LjIgNy41IDQuNyAuOCA5LjQgMS42IDE0LjIgMS43IDE0LjMgLjMgMjUuNy01LjQgMzMuMS0xNy45IDIuOS00LjkgNS42LTEwLjEgNy43LTE1LjQgMTkuOC01MC4xIDM5LjUtMTAwLjMgNTkuMi0xNTAuNSAuNi0xLjUgMS4xLTMgMS4zLTQuNiAuNC0yLjQtLjctMy42LTMuMS0zLjctNS42LS4xLTExLjEgMC0xNi43IDAtMy4xIDAtNS4zIDEuNC02LjQgNC4zLS40IDEuMS0uOSAyLjMtMS4zIDMuNGwtMjkuMSA4My43Yy0yLjEgNi4xLTQuMiAxMi4xLTYuNSAxOC42LS40LS45LS42LTEuNC0uOC0xLjktMTAuOC0yOS45LTIxLjYtNTkuOS0zMi40LTg5LjgtMS43LTQuNy0zLjUtOS41LTUuMy0xNC4yLS45LTIuNS0yLjctNC01LjQtNC02LjQtLjEtMTIuOC0uMi0xOS4yLS4xLTIuMiAwLTMuMyAxLjYtMi44IDMuN3pNMjQyLjQgMjA2YzEuNyAxMS43IDcuNiAyMC44IDE4IDI2LjYgOS45IDUuNSAyMC43IDYuMiAzMS43IDQuNiAxMi43LTEuOSAyMy45LTcuMyAzMy44LTE1LjUgLjQtLjMgLjgtLjYgMS40LTEgLjUgMy4yIC45IDYuMiAxLjUgOS4yIC41IDIuNiAyLjEgNC4zIDQuNSA0LjQgNC42IC4xIDkuMSAuMSAxMy43IDAgMi4zLS4xIDMuOC0xLjYgNC0zLjkgLjEtLjggLjEtMS42IC4xLTIuM2wwLTg4LjhjMC0zLjYtLjItNy4yLS43LTEwLjgtMS42LTEwLjgtNi4yLTE5LjctMTUuOS0yNS40LTUuNi0zLjMtMTEuOC01LTE4LjItNS45LTMtLjQtNi0uNy05LjEtMS4xbC0xMCAwYy0uOCAuMS0xLjYgLjMtMi41IC4zLTguMiAuNC0xNi4zIDEuNC0yNC4yIDMuNS01LjEgMS4zLTEwIDMuMi0xNSA0LjktMyAxLTQuNSAzLjItNC40IDYuNSAuMSAyLjgtLjEgNS42IDAgOC4zIC4xIDQuMSAxLjggNS4yIDUuNyA0LjEgNi41LTEuNyAxMy4xLTMuNSAxOS43LTQuOCAxMC4zLTEuOSAyMC43LTIuNyAzMS4xLTEuMiA1LjQgLjggMTAuNSAyLjQgMTQuMSA3IDMuMSA0IDQuMiA4LjggNC40IDEzLjcgLjMgNi45IC4yIDEzLjkgLjMgMjAuOCAwIC40LS4xIC43LS4yIDEuMi0uNCAwLS44IDAtMS4xLS4xLTguOC0yLjEtMTcuNy0zLjYtMjYuOC00LjEtOS41LS41LTE4LjkgLjEtMjcuOSAzLjItMTAuOCAzLjgtMTkuNSAxMC4zLTI0LjYgMjAuOC00LjEgOC4zLTQuNiAxNy0zLjQgMjUuOHpNOTguNyAxMDYuOWwwIDE3NS4zYzAgLjggMCAxLjcgLjEgMi41IC4yIDIuNSAxLjcgNC4xIDQuMSA0LjIgNS45IC4xIDExLjggLjEgMTcuNyAwIDIuNSAwIDQtMS43IDQuMS00LjEgLjEtLjggLjEtMS43IC4xLTIuNWwwLTYwLjdjLjkgLjcgMS40IDEuMiAxLjkgMS42IDE1IDEyLjUgMzIuMiAxNi42IDUxLjEgMTIuOSAxNy4xLTMuNCAyOC45LTEzLjkgMzYuNy0yOS4yIDUuOC0xMS42IDguMy0yNC4xIDguNy0zNyAuNS0xNC4zLTEtMjguNC02LjgtNDEuNy03LjEtMTYuNC0xOC45LTI3LjMtMzYuNy0zMC45LTIuNy0uNi01LjUtLjgtOC4yLTEuMmwtNyAwYy0xLjIgLjItMi40IC4zLTMuNiAuNS0xMS43IDEuNC0yMi4zIDUuOC0zMS44IDEyLjctMiAxLjQtMy45IDMtNS45IDQuNS0uMS0uNS0uMy0uOC0uNC0xLjItLjQtMi4zLS43LTQuNi0xLjEtNi45LS42LTMuOS0yLjUtNS41LTYuNC01LjZsLTkuNyAwYy01LjktLjEtNi45IDEtNi45IDYuOHpNNDkzLjYgMzM5Yy0yLjctLjctNS4xIDAtNy42IDEtNDMuOSAxOC40LTg5LjUgMzAuMi0xMzYuOCAzNS44LTE0LjUgMS43LTI5LjEgMi44LTQzLjcgMy4yLTI2LjYgLjctNTMuMi0uOC03OS42LTQuMy0xNy44LTIuNC0zNS41LTUuNy01My05LjktMzctOC45LTcyLjctMjEuNy0xMDYuNy0zOC44LTguOC00LjQtMTcuNC05LjMtMjYuMS0xNC0zLjgtMi4xLTYuMi0xLjUtOC4yIDIuMWwwIDEuN2MxLjIgMS42IDIuMiAzLjQgMy43IDQuOCAzNiAzMi4yIDc2LjYgNTYuNSAxMjIgNzIuOSAyMS45IDcuOSA0NC40IDEzLjcgNjcuMyAxNy41IDE0IDIuMyAyOCAzLjggNDIuMiA0LjUgMyAuMSA2IC4yIDkgLjQgLjcgMCAxLjQgLjIgMi4xIC4zbDE3LjcgMGMuNy0uMSAxLjQtLjMgMi4xLS4zIDE0LjktLjQgMjkuOC0xLjggNDQuNi00IDIxLjQtMy4yIDQyLjQtOC4xIDYyLjktMTQuNyAyOS42LTkuNiA1Ny43LTIyLjQgODMuNC00MC4xIDIuOC0xLjkgNS43LTMuOCA4LTYuMiA0LjMtNC40IDIuMy0xMC40LTMuMy0xMS45ek01NDQgMzExLjNjLS44LTQuMi00LTUuOC03LjYtNy01LjctMS45LTExLjYtMi44LTE3LjYtMy4zLTExLS45LTIyLS40LTMyLjggMS42LTEyIDIuMi0yMy40IDYuMS0zMy41IDEzLjEtMS4yIC44LTIuNCAxLjgtMy4xIDMtLjYgLjktLjcgMi4zLS41IDMuNCAuMyAxLjMgMS43IDEuNiAzIDEuNSAuNiAwIDEuMiAwIDEuOC0uMWwxOS41LTIuMWM5LjYtLjkgMTkuMi0xLjUgMjguOC0uOCA0LjEgLjMgOC4xIDEuMiAxMiAyLjIgNC4zIDEuMSA2LjIgNC40IDYuNCA4LjcgLjMgNi43LTEuMiAxMy4xLTIuOSAxOS41LTMuNSAxMi45LTguMyAyNS40LTEzLjMgMzcuOC0uMyAuOC0uNyAxLjctLjggMi41LS40IDIuNSAxIDQgMy40IDMuNSAxLjQtLjMgMy0xLjEgNC0yLjEgMy43LTMuNiA3LjUtNy4yIDEwLjYtMTEuMiAxMC43LTEzLjggMTctMjkuNiAyMC43LTQ2LjYgLjctMyAxLjItNi4xIDEuNy05LjEgLjItNC43IC4yLTkuNiAuMi0xNC41eiJdCiAgICB9OwogICAgZmFFYmF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImViYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRmNCIsICJNNjA2LjUgMTg5LjVsLTU0LjggMTA5LjktNTQuOS0xMDkuOS0zNy41IDAgMTAuOSAyMC42Yy0xMS41LTE5LTM1LjktMjYtNjMuMy0yNi0zMS44IDAtNjcuOSA4LjctNzEuNSA0My4xbDMzLjcgMGMxLjQtMTMuOCAxNS43LTIxLjggMzUtMjEuOCAyNiAwIDQxIDkuNiA0MSAzM2wwIDMuNGMtMTIuNyAwLTI4IC4xLTQxLjcgLjQtNDIuNCAuOS02OS42IDEwLTc2LjcgMzQuNCAxLTUuMiAxLjUtMTAuNiAxLjUtMTYuMiAwLTUyLjEtMzkuNy03Ni4yLTc1LjQtNzYuMi0yMS4zIDAtNDMgNS41LTU4LjcgMjQuMmwwLTgwLjYtMzIuMSAwIDAgMTY5LjVjMCAxMC4zLS42IDIyLjktMS4xIDMzLjFsMzEuNSAwYy43LTYuMyAxLjEtMTIuOSAxLjEtMTkuNSAxMy42IDE2LjYgMzUuNCAyNC45IDU4LjcgMjQuOSAzNi45IDAgNjQuOS0yMS45IDczLjMtNTQuMi0uNSAyLjgtLjcgNS44LS43IDkgMCAyNC4xIDIxLjEgNDUgNjAuNiA0NSAyNi42IDAgNDUuOC01LjcgNjEuOS0yNS41IDAgNi42IC4zIDEzLjMgMS4xIDIwLjJsMjkuOCAwYy0uNy04LjItMS0xNy41LTEtMjYuOGwwLTY1LjZjMC05LjMtMS43LTE3LjItNC44LTIzLjhsNjEuNSAxMTYuMS0yOC41IDU0LjEgMzUuOSAwIDk5LjItMTk0LjgtMzQgMHpNMjQ0LjIgMzEzLjhjLTI5LjYgMC01MC4yLTIxLjUtNTAuMi01My44IDAtMzIuNCAyMC42LTUzLjggNTAuMi01My44IDI5LjggMCA1MC4yIDIxLjQgNTAuMiA1My44IDAgMzIuMy0yMC40IDUzLjgtNTAuMiA1My44em0yMDAuOS00Ny4zYzAgMzAtMTcuOSA0OC40LTUxLjYgNDguNC0yNS4xIDAtMzUtMTMuNC0zNS0yNS44IDAtMTkuMSAxOC4xLTI0LjQgNDcuMi0yNS4zIDEzLjEtLjUgMjcuNi0uNiAzOS40LS42bDAgMy4zek0zMy4yIDI2OC4xbDEyOC44IDAgMC04LjVjMC01MS43LTMzLjEtNzUuNC03OC40LTc1LjQtNTYuOCAwLTgzIDMwLjgtODMgNzcuNiAwIDQyLjUgMjUuMyA3NCA4Mi41IDc0IDMxLjQgMCA2OC0xMS43IDc0LjQtNDYuMWwtMzMuMSAwYy0xMiAzNS44LTg3LjcgMzYuNy05MS4yLTIxLjZ6bTk1LTIxLjRsLTk0LjQgMGM2LjktNTYuNiA5Mi4xLTU0LjcgOTQuNCAweiJdCiAgICB9OwogICAgZmFDb250YW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29udGFvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNmQiLCAiTTQ1LjQgMzA1YzE0LjQgNjcuMSAyNi40IDEyOSA2OC4yIDE3NUwzNCA0ODBjLTE4LjcgMC0zNC0xNS4yLTM0LTM0TDAgNjZDMCA0Ny4zIDE1LjIgMzIgMzQgMzJsNTcuNyAwYy0xMy44IDEyLjYtMjYuMSAyNy4yLTM2LjkgNDMuNi00NS40IDcwLTI3IDE0Ni44LTkuNCAyMjkuNHpNNDc4IDMybC05MC4yIDBjMjEuNCAyMS40IDM5LjIgNDkuNSA1Mi43IDg0LjFMMzAzLjQgMTQ1LjRjLTE0LjktMjktMzcuOC01My4zLTgyLjYtNDMuOS0yNC42IDUuMy00MSAxOS4zLTQ4LjMgMzQuNi04LjggMTguNy0xMy4yIDM5LjggOC4yIDE0MC4zIDIxLjEgMTAwLjIgMzMuNyAxMTcuNyA0OS41IDEzMS4yIDEyLjkgMTEuMSAzMy40IDE3IDU4LjMgMTEuNyA0NC41LTkuNCA1NS43LTQwLjcgNTcuNC03My4ybDEzNy40LTI5LjZjMy4yIDcxLjUtMTguNyAxMjUuMi01Ny40IDE2My42bDUyLjEgMGMxOC43IDAgMzQtMTUuMiAzNC0zNEw1MTIgNjZjMC0xOC44LTE1LjItMzQtMzQtMzR6Il0KICAgIH07CiAgICBmYUVsbG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWxsbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWYxIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM5OS44IDI5My4yQzM4My4zIDM1OC41IDMyMy44IDQwNC44IDI1NiA0MDQuOFMxMjguNyAzNTguNSAxMTIuMiAyOTMuMmMtMS42LTcuNCAyLjUtMTUuNyA5LjktMTcuNHMxNS43IDIuNSAxNy40IDkuOWMxNCA1Mi45IDYyIDkwLjEgMTE2LjYgOTAuMXMxMDIuNS0zNy4yIDExNi42LTkwLjFjMS43LTcuNCA5LjktMTIuNCAxNy40LTkuOSA3LjQgMS43IDEyLjQgOS45IDkuOSAxNy40eiJdCiAgICB9OwogICAgZmFTaXN0cml4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpc3RyaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlZSIsICJNNDQ4IDQ0OUwzMDEuMiAzMDAuMmMyMC0yNy45IDMxLjktNjIuMiAzMS45LTk5LjIgMC05My4xLTc0LjctMTY4LjktMTY2LjUtMTY4LjktOTEuOS0uMS0xNjYuNiA3NS43LTE2Ni42IDE2OC44Uzc0LjcgMzY5LjggMTY2LjUgMzY5LjhjMzkuOCAwIDc2LjMtMTQuMiAxMDUtMzcuOUw0MTcuNSA0ODAgNDQ4IDQ0OXpNMTY2LjUgMzMwLjhjLTcwLjYgMC0xMjguMS01OC4zLTEyOC4xLTEyOS45Uzk1LjkgNzEgMTY2LjUgNzEgMjk0LjYgMTI5LjMgMjk0LjYgMjAwLjkgMjM3LjIgMzMwLjggMTY2LjUgMzMwLjh6Il0KICAgIH07CiAgICBmYVBlcmlzY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJpc2NvcGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNkYSIsICJNMzcwIDYzLjZjLTM4LjYtNDEtODkuNS02My42LTE0My40LTYzLjYtMTE0LjcgMC0yMDguMSA5Ni4yLTIwOC4xIDIxNC40IDAgNzUuMSA1Ny44IDE1OS44IDgyLjcgMTkyLjcgMzYuNiA0OC40IDkxLjQgMTA0LjkgMTI1LjQgMTA0LjkgNDEuNiAwIDExMi45LTk0LjIgMTIwLjktMTA1IDI0LjYtMzMuMSA4Mi0xMTguMyA4Mi0xOTIuNiAwLTU2LjUtMjEuMS0xMTAuMS01OS41LTE1MC44ek0yMjYuNiA0OTMuOWMtNDIuNSAwLTE5MC0xNjcuMy0xOTAtMjc5LjQgMC0xMDcuNCA4My45LTE5Ni4zIDE5MC0xOTYuMyAxMDAuOCAwIDE4NC43IDg5IDE4NC43IDE5Ni4zIC4xIDExMi4xLTE0Ny40IDI3OS40LTE4NC43IDI3OS40ek0zMzggMjA2LjhjMCA1OS4xLTUxLjEgMTA5LjctMTEwLjggMTA5LjctMTAwLjYgMC0xNTAuNy0xMDguMi05Mi45LTE4MS44bDAgLjRjMCAyNC41IDIwLjEgNDQuNCA0NC44IDQ0LjRzNDQuOC0xOS45IDQ0LjgtNDQuNGMwLTE4LjItMTEuMS0zMy44LTI2LjktNDAuNyA3Ni42LTE5LjIgMTQxIDM5LjMgMTQxIDExMi40eiJdCiAgICB9OwogICAgZmFFeHBlZGl0ZWRzc2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZXhwZWRpdGVkc3NsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyM2UiLCAiTTI1NiA0My40YTIxMi42IDIxMi42IDAgMSAwIDAgNDI1LjIgMjEyLjYgMjEyLjYgMCAxIDAgMC00MjUuMnpNMTU4LjYgMTc2LjNjMC01My43IDQzLjctOTcuNCA5Ny40LTk3LjRzOTcuNCA0My43IDk3LjQgOTcuNGwwIDI2LjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNmMwLTgyLjEtMTI0LTgyLjEtMTI0IDBsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjYgLjIgMHpNMzk3LjcgMzgwYzAgOS43LTggMTcuNy0xNy43IDE3LjdsLTI0OCAwYy05LjcgMC0xNy43LTgtMTcuNy0xNy43bDAtMTQxLjdjMC05LjcgOC0xNy43IDE3LjctMTcuN2wyNDggMGM5LjcgMCAxNy43IDggMTcuNyAxNy43bDAgMTQxLjd6bS0yNDgtMTM3LjNsMCAxMzIuOWMwIDIuNS0xLjkgNC40LTQuNCA0LjRsLTguOSAwYy0yLjUgMC00LjQtMS45LTQuNC00LjRsMC0xMzIuOWMwLTIuNSAxLjktNC40IDQuNC00LjRsOC45IDBjMi41IDAgNC40IDEuOSA0LjQgNC40em0xNDEuNyA0OC43YzAgMTMtNy4yIDI0LjQtMTcuNyAzMC40bDAgMzEuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0zMS42Yy0xMC41LTYuMS0xNy43LTE3LjQtMTcuNy0zMC40IDAtMTkuNyAxNS44LTM1LjQgMzUuNC0zNS40czM1LjUgMTUuOCAzNS41IDM1LjR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCAxNy43YTIzMC4zIDIzMC4zIDAgMSAxIDAgNDYwLjYgMjMwLjMgMjMwLjMgMCAxIDEgMC00NjAuNnoiXQogICAgfTsKICAgIGZhTmFwc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuYXBzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDIiLCAiTTMwNi4zIDM3My42Yy0xNC4yIDEzLjYtMzEuMyAyNC4xLTUwLjQgMzAuNS0xOS02LjQtMzYuMi0xNi45LTUwLjMtMzAuNWwxMDAuNyAwem00NC0xOTkuNmMyMC0xNi45IDQzLjYtMjkuMiA2OS42LTM2LjJsMCAxNjEuMmMwIDIxOS40LTMyOCAyMTcuNi0zMjggLjNsMC0xNjEuNmMyNS45IDYuOSA0OS42IDE5LjYgNjkuNSAzNi40IDU2LjgtNDAgMTMyLjUtMzkuOSAxODguOS0uMXpNMTQxLjUgMTE1LjVjNjQuNC02MCAxNjQuMy02MC4xIDIyOC45LS4yLTcuMSAzLjUtMTMuOSA3LjMtMjAuNiAxMS41LTU4LjctMzAuNS0xMjkuMi0zMC40LTE4Ny45IC4xLTYuMy00LTEzLjktOC4yLTIwLjQtMTEuNHpNNTEuOCA5My4ybDAgNjkuM2MtNTguNCAzNi41LTU4LjQgMTIxLjEgLjEgMTU4LjMgMjYuNCAyNDUuMSAzODEuNyAyNDAuMyA0MDcuNiAxLjVsLjMtMS43YzU4LjctMzYuMyA1OC45LTEyMS43IC4yLTE1OC4ybDAtNjkuMmMtMTcuMyAuNS0zNCAzLTUwLjEgNy40LTgyLTkxLjUtMjI1LjUtOTEuNS0zMDcuNSAuMS0xNi4zLTQuNC0zMy4xLTctNTAuNi03LjV6TTI2Ny4yIDM1MnMzNi0uMyA2MS4zLTEuNWMxMC4yLS41IDIxLjEtNCAyNS41LTYuNSAyNi4zLTE1LjEgMjUuNC0zOS4yIDI2LjItNDcuNC03OS41LS42LTk5LjktMy45LTExMyA1NS40ek0xMzEuNyAyOTYuN2MuOCA4LjItLjEgMzIuMyAyNi4yIDQ3LjQgNC40IDIuNSAxNS4yIDYgMjUuNSA2LjUgMjUuMyAxLjEgNjEuMyAxLjUgNjEuMyAxLjUtMTMuMi01OS40LTMzLjctNTYuMS0xMTMtNTUuNHpNMzAwLjggNDIwLjFjLTMuMi01LjMtNi45LTcuMy02LjktNy4zLTI0LjggNy4zLTUyLjIgNi45LTc1LjkgMCAwIDAtMi45IDEuNS02LjQgNi42LTIuOCA0LjEtMy43IDkuNi0zLjcgOS42IDI5LjEgMTcuNiA2Ny4xIDE3LjYgOTYuMiAwLS4xLS4xLS4zLTQtMy4zLTguOXoiXQogICAgfTsKICAgIGZhRGVsaWNpb3VzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlbGljaW91cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE1IiwgIk00NDYuNiA2OGMtLjQtMS41LS45LTMtMS40LTQuNS0uOS0yLjUtMi00LjgtMy4zLTcuMS0xLjQtMi40LTMtNC44LTQuNy02LjktMi4xLTIuNS00LjQtNC44LTYuOS02LjgtMS4xLS45LTIuMi0xLjctMy4zLTIuNS0xLjMtLjktMi42LTEuNy00LTIuNC0xLjgtMS0zLjYtMS44LTUuNS0yLjUtMS43LS43LTMuNS0xLjMtNS40LTEuNy0zLjgtMS03LjktMS41LTEyLTEuNWwtMzUyIDBDMjEuNiAzMiAuMSA1My41IC4xIDgwbDAgMzUyYzAgNC4xIC41IDguMiAxLjUgMTIgMiA3LjcgNS44IDE0LjYgMTEgMjAuMyAxIDEuMSAyLjEgMi4yIDMuMyAzLjMgNS43IDUuMiAxMi42IDkgMjAuMyAxMSAzLjggMSA3LjkgMS41IDEyIDEuNWwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1Mi4xYy0uMS00LjEtLjYtOC4yLTEuNi0xMnpNNDE2LjEgNDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC0xOTItMTkyIDAgMC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDE3NiAwIDAgMTkyIDE5MiAwIDAgMTc2eiJdCiAgICB9OwogICAgZmFHdWlsZGVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImd1aWxkZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3ZSIsICJNNDQzLjkgNjRMNSA2NGMwIDEwMy4zIDIyLjIgMTgwLjEgNDMuNCAyMjIuNCA2NC4xIDEyNy44IDE3NiAxNjEuNiAxNzcuMyAxNjEuNiA1NS43LTIwLjUgMTA0LjUtNTYuMyAxNDAuNi0xMDMuNSAyNS45LTMzLjkgNTMuMS04Ny4yIDY1LjktMTQ1LjhsLTI1OS45IDBjNC4xIDM2LjQgMjIuMiA2Ny45IDQ1LjEgODYuOWw4OC42IDBjLTE3IDI4LjItNDguMiA1NC40LTgwLjUgNjkuNS0zMS4yLTEzLjMtNjkuMS00Ni41LTk2LjUtOTguNC0yNi43LTUzLjgtMjcuMS0xMDUuOS0yNy4xLTEwNS45bDMzNi4xIDBjNC0yOC44IDUuOS01Ny45IDUuOS04Ni45eiJdCiAgICB9OwogICAgZmFPYnNpZGlhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvYnNpZGlhbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlODc5IiwgIk0xNDIuMyAzMjAuM2MzNi4xLTguMiA3MC4zLTExIDEwMS4zIC43IDMxLjggMTEuOSA2MS43IDM5LjYgODYuNyA5Ni04LjEgMTcuNy0xMi40IDM2LjktMTQuNyA1My44LTMuMSAyMi45LTI1LjQgNDAuNy00Ny43IDM0LjYtMzEuNy04LjctNjguMy0yMi4zLTEwMS4zLTI0LjktNC40LS4zLTUwLjYtMy44LTUwLjYtMy44LTEuNy0uMS0zLjQtLjQtNS4xLS44IDMxLjUtNjQuMiAzOC4yLTExNS4xIDMxLjMtMTU1LjR6TTU1IDIxOS41YzIyLjMgMTQuOCA0OS41IDM3LjggNjQuMSA3My42IDE2LjEgMzkuNCAxNy44IDk1LjctMjEuNiAxNzYuMS0xLS44LTIuMS0xLjctMy0yLjdMNy40IDM3Ni44Yy05LjUtOS44LTEyLjEtMjQuNC02LjUtMzYuOSAuNi0xLjMgNDQuNi05OC4zIDU0LjEtMTIwLjR6bTI2NC4zLTkxLjNjNC45IDYuMiA3LjQgMTQgNy40IDIxLjkgLjEgMjAuOCAxLjggNjMuNiAxMy4zIDkxLjIgMTEuMiAyNi44IDMxLjggNTUuOCA0Mi41IDcwIDQuMSA1LjUgNC44IDEyLjkgMS4zIDE4LjctNy42IDEyLjgtMjIuNiAzNy41LTQzLjggNjkuMi0uMyAuNC0uNiAuOS0uOCAxLjMtMjUuMi01Mi4yLTU1LjktODAuNy05MC40LTkzLjYtOS42LTMuNi0xOS41LTYtMjkuNC03LjMtMTcuOC00NS44LTIzLjItNzkuNy0yMi0xMDYuNCAxLjItMjcuNCA5LjItNDcuOCAxOC4yLTY2LjMgOC45LTE4LjEgMTkuOC0zNS45IDI0LjktNTUuNyAzLjItMTIuNSA0LjItMjUuOCAxLjctNDAuOWw3Ny4xIDk4ek0xODQuMiAxNC4xYzEwLjMtOS4yIDI0LjYtMTAuOCAzNi4zLTUuNSA5LjYgMjQuNiA5LjcgNDIuOCA1LjYgNTguOC00LjYgMTcuOC0xNC4xIDMzLTIzLjkgNTIuOC05LjYgMTkuNS0xOC40IDQyLTE5LjcgNzIuMy0xLjIgMjcuOSA0LjEgNjEuOSAyMC40IDEwNS44LTIxLS42LTQyLjUgMi42LTYzLjcgNy40LTEuNy02LjQtMy44LTEyLjQtNi4xLTE4LjItMTcuMy00Mi4yLTQ5LjktNjcuOS03NC4xLTgzLjMgMy4xLTE4LjcgOC4yLTU1LjQgMTEuNi03Ny41IDEuMi03LjYgNC45LTE0LjYgMTAuNy0xOS44TDE4NC4yIDE0LjF6Il0KICAgIH07CiAgICBmYVhib3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieGJveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDEyIiwgIk0zNjkuOSAzMTguMmM0NC4zIDU0LjMgNjQuNyA5OC44IDU0LjQgMTE4LjctNy45IDE1LjEtNTYuNyA0NC42LTkyLjYgNTUuOS0yOS42IDkuMy02OC40IDEzLjMtMTAwLjQgMTAuMi0zOC4yLTMuNy03Ni45LTE3LjQtMTEwLjEtMzktMjcuOS0xOC4yLTM0LjItMjUuNy0zNC4yLTQwLjYgMC0yOS45IDMyLjktODIuMyA4OS4yLTE0Mi4xIDMyLTMzLjkgNzYuNS03My43IDgxLjQtNzIuNiA5LjQgMi4xIDg0LjMgNzUuMSAxMTIuMyAxMDkuNXpNMTg4LjYgMTQzLjhjLTI5LjctMjYuOS01OC4xLTUzLjktODYuNC02My40LTE1LjItNS4xLTE2LjMtNC44LTI4LjcgOC4xLTI5LjIgMzAuNC01My41IDc5LjctNjAuMyAxMjIuNC01LjQgMzQuMi02LjEgNDMuOC00LjIgNjAuNSA1LjYgNTAuNSAxNy4zIDg1LjQgNDAuNSAxMjAuOSA5LjUgMTQuNiAxMi4xIDE3LjMgOS4zIDkuOS00LjItMTEtLjMtMzcuNSA5LjUtNjQgMTQuMy0zOSA1My45LTExMi45IDEyMC4zLTE5NC40em0zMTEuNiA2My41Yy0xNi45LTgwLTY3LjUtMTMwLjMtNzQuNi0xMzAuMy03LjMgMC0yNC4yIDYuNS0zNiAxMy45LTIzLjMgMTQuNS00MSAzMS40LTY0LjMgNTIuOCA0Mi40IDUzLjMgMTAyLjIgMTM5LjQgMTIyLjkgMjAyLjMgNi44IDIwLjcgOS43IDQxLjEgNy40IDUyLjMtMS43IDguNS0xLjcgOC41IDEuNCA0LjYgNi4xLTcuNyAxOS45LTMxLjMgMjUuNC00My41IDcuNC0xNi4yIDE1LTQwLjIgMTguNi01OC43IDQuMy0yMi41IDMuOS03MC44LS44LTkzLjR6TTE0MS4zIDQzYzQ3LjctMi41IDEwOS43IDM0LjUgMTE0LjMgMzUuNCAuNyAuMSAxMC40LTQuMiAyMS42LTkuNyA2My45LTMxLjEgOTQtMjUuOCAxMDcuNC0yNS4yLTYzLjktMzkuMy0xNTIuNy01MC0yMzMuOS0xMS43LTIzLjQgMTEuMS0yNCAxMS45LTkuNCAxMS4yeiJdCiAgICB9OwogICAgZmFVbnRhcHBkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVudGFwcGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQwNSIsICJNNDAxLjUgNDkuOUMzMjEuNyAyMTAgMzE2LjkgMjAyLjQgMzEzLjYgMjIzLjFsLTUuMiAzMi44Yy0xLjkgMTItNi42IDIzLjUtMTMuNyAzMy40TDE0NS44IDQ5Ny4xYy03LjYgMTAuNi0yMC40IDE2LjItMzMuNCAxNC42LTQwLjMtNS03Ny44LTMyLjItOTUuMy02OC41LTUuNy0xMS44LTQuNS0yNS44IDMuMS0zNi40TDE2OS4xIDE5OC45YzcuMS05LjkgMTYuNC0xOCAyNy4yLTIzLjdsMjkuMy0xNS41YzE4LjUtOS44IDkuNy0xMS45IDEzNS42LTEzOC45IDEtNC44IDEtNy4zIDMuNi04IDMtLjcgNi42LTEgNi4zLTQuNmwtLjQtNC42Yy0uMi0xLjkgMS4zLTMuNiAzLjItMy42IDQuNS0uMSAxMy4yIDEuMiAyNS42IDEwIDEyLjMgOC45IDE2LjQgMTYuOCAxNy43IDIxLjEgLjYgMS44LS42IDMuNy0yLjQgNC4ybC00LjUgMS4xYy0zLjQgLjktMi41IDQuNC0yLjMgNy40IC4xIDIuOC0yLjMgMy42LTYuNSA2LjF6TTIzMC4zIDM2LjRjMy40IC45IDIuNSA0LjQgMi4zIDcuNC0uMiAyLjcgMi4xIDMuNSA2LjQgNiA3LjkgMTUuOSAxNS4zIDMwLjUgMjIuMiA0NCAuNyAxLjMgMi4zIDEuNSAzLjMgLjUgMTEuMi0xMiAyNC42LTI2LjIgNDAuNS00Mi42IDEuMy0xLjQgMS40LTMuNSAuMS00LjktOC04LjItMTYuNS0xNi45LTI1LjYtMjYuMS0xLTQuNy0xLTcuMy0zLjYtOC0zLS44LTYuNi0xLTYuMy00LjYgLjMtMy4zIDEuNC04LjEtMi44LTguMi00LjUtLjEtMTMuMiAxLjEtMjUuNiAxMC0xMi4zIDguOS0xNi40IDE2LjgtMTcuNyAyMS4xLTEuNCA0LjIgMy42IDQuNiA2LjggNS40ek02MjAuMiA0MDYuN0w0NzEuNCAxOTguOGMtMTMuMi0xOC41LTI2LjYtMjMuNC01Ni40LTM5LjEtMTEuMi01LjktMTQuMi0xMC45LTMwLjUtMjguOS0xLTEuMS0yLjktLjktMy42IC41LTQ2LjMgODguOC00Ny4xIDgyLjgtNDkgOTQuOC0xLjcgMTAuNy0xLjMgMjAgLjMgMjkuOCAxLjkgMTIgNi42IDIzLjUgMTMuNyAzMy40TDQ5NC44IDQ5Ny4yYzcuNiAxMC42IDIwLjIgMTYuMiAzMy4xIDE0LjcgNDAuMy00LjkgNzgtMzIgOTUuNy02OC42IDUuNC0xMS45IDQuMy0yNS45LTMuNC0zNi42eiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtcGx1cy1nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYwZDUiLCAiTTM4Ni4zIDIyOC41YzEuOCA5LjcgMy4xIDE5LjQgMy4xIDMyIDAgMTA5LjgtNzMuNiAxODcuNS0xODQuNCAxODcuNS0xMDYuMSAwLTE5Mi04NS45LTE5Mi0xOTJTOTguOSA2NCAyMDUgNjRjNTEuOSAwIDk1LjEgMTguOSAxMjguNiA1MC4zbC01Mi4xIDUwYy0xNC4xLTEzLjYtMzktMjkuNi03Ni41LTI5LjYtNjUuNSAwLTExOC45IDU0LjItMTE4LjkgMTIxLjNTMTM5LjUgMzc3LjMgMjA1IDM3Ny4zYzc2IDAgMTA0LjUtNTQuNyAxMDktODIuOGwtMTA5IDAgMC02NiAxODEuMyAwIDAgMHptMTg1LjQgNi40bDAtNTUuNy01NiAwIDAgNTUuNy01NS43IDAgMCA1NiA1NS43IDAgMCA1NS43IDU2IDAgMC01NS43IDU1LjcgMCAwLTU2LTU1LjcgMHoiXQogICAgfTsKICAgIGZhR2l0aHViQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGh1Yi1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjExMyIsICJNMjAyLjEgMzI4LjdjMCAyMC45LTEwLjkgNTUuMS0zNi43IDU1LjFzLTM2LjctMzQuMi0zNi43LTU1LjEgMTAuOS01NS4xIDM2LjctNTUuMSAzNi43IDM0LjIgMzYuNyA1NS4xek00OTYgMjc4LjJjMCAzMS45LTMuMiA2NS43LTE3LjUgOTUtMzcuOSA3Ni42LTE0Mi4xIDc0LjgtMjE2LjcgNzQuOC03NS44IDAtMTg2LjIgMi43LTIyNS42LTc0LjgtMTQuNi0yOS0yMC4yLTYzLjEtMjAuMi05NSAwLTQxLjkgMTMuOS04MS41IDQxLjUtMTEzLjYtNS4yLTE1LjgtNy43LTMyLjQtNy43LTQ4LjggMC0yMS41IDQuOS0zMi4zIDE0LjYtNTEuOCA0NS4zIDAgNzQuMyA5IDEwOC44IDM2IDI5LTYuOSA1OC44LTEwIDg4LjctMTAgMjcgMCA1NC4yIDIuOSA4MC40IDkuMiAzNC0yNi43IDYzLTM1LjIgMTA3LjgtMzUuMiA5LjggMTkuNSAxNC42IDMwLjMgMTQuNiA1MS44IDAgMTYuNC0yLjYgMzIuNy03LjcgNDguMiAyNy41IDMyLjQgMzkgNzIuMyAzOSAxMTQuMnptLTY0LjMgNTAuNWMwLTQzLjktMjYuNy04Mi42LTczLjUtODIuNi0xOC45IDAtMzcgMy40LTU2IDYtMTQuOSAyLjMtMjkuOCAzLjItNDUuMSAzLjItMTUuMiAwLTMwLjEtLjktNDUuMS0zLjItMTguNy0yLjYtMzctNi01Ni02LTQ2LjggMC03My41IDM4LjctNzMuNSA4Mi42IDAgODcuOCA4MC40IDEwMS4zIDE1MC40IDEwMS4zbDQ4LjIgMGM3MC4zIDAgMTUwLjYtMTMuNCAxNTAuNi0xMDEuM3ptLTgyLjYtNTUuMWMtMjUuOCAwLTM2LjcgMzQuMi0zNi43IDU1LjFzMTAuOSA1NS4xIDM2LjcgNTUuMSAzNi43LTM0LjIgMzYuNy01NS4xLTEwLjktNTUuMS0zNi43LTU1LjF6Il0KICAgIH07CiAgICBmYUdldFBvY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnZXQtcG9ja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNjUiLCAiTTQwNy42IDY0bC0zNjcgMEMxOC41IDY0IDAgODIuNSAwIDEwNC42TDAgMjM5LjhDMCAzNjQuNSA5OS43IDQ2NCAyMjQuMiA0NjQgMzQ4LjIgNDY0IDQ0OCAzNjQuNSA0NDggMjM5LjhsMC0xMzUuMkM0NDggODIuMiA0MzAuMyA2NCA0MDcuNiA2NHptLTE2MiAyNjguNWMtMTIuNCAxMS44LTMxLjQgMTEuMS00Mi40IDAtMTEzLjctMTA4LjktMTE0LjktMTA1LjEtMTE0LjktMTIzLjIgMC0xNi45IDEzLjgtMzAuNyAzMC43LTMwLjcgMTcgMCAxNi4xIDMuOCAxMDUuMiA4OS4zIDkwLjYtODYuOSA4OC42LTg5LjMgMTA1LjUtODkuM3MzMC43IDEzLjggMzAuNyAzMC43YzAgMTcuOC0yLjkgMTUuNy0xMTQuOCAxMjMuMnoiXQogICAgfTsKICAgIGZhR2xpZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2xpZGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJhNSIsICJNMjUyLjggMTQ4LjZjMCA4LjgtMS42IDE3LjctMy40IDI2LjQtNS44IDI3LjgtMTEuNiA1NS44LTE3LjMgODMuNi0xLjQgNi4zLTguMyA0LjktMTMuNyA0LjktMjMuOCAwLTMwLjUtMjYtMzAuNS00NS41IDAtMjkuMyAxMS4yLTY4LjEgMzguNS04My4xIDQuMy0yLjUgOS4yLTQuMiAxNC4xLTQuMiAxMS40IDAgMTIuMyA4LjMgMTIuMyAxNy45ek00NDggODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zODQgMjY3YzAtNS4xLTIwLjgtMzcuNy0yNS41LTM5LjUtMi4yLS45LTcuMi0yLjMtOS42LTIuMy0yMy4xIDAtMzguNyAxMC41LTU4LjIgMjEuNWwtLjUtLjVjNC4zLTI5LjQgMTQuNi01Ny4yIDE0LjYtODcuNCAwLTQ0LjYtMjMuOC02Mi43LTY3LjUtNjIuNy03MS43IDAtMTA4IDcwLjgtMTA4IDEyMy41IDAgNTQuNyAzMiA4NSA4Ni4zIDg1IDcuNSAwIDYuOS0uNiA2LjkgMi4zLTEwLjUgODAuMy01Ni41IDgyLjktNTYuNSA1OC45IDAtMjQuNCAyOC0zNi41IDI4LjMtMzgtLjItNy42LTI5LjMtMTcuMi0zNi43LTE3LjItMjEuMSAwLTMyLjcgMzMtMzIuNyA1MC42IDAgMzIuMyAyMC40IDU0LjcgNTMuMyA1NC43IDQ4LjIgMCA4My40LTQ5LjcgOTQuMy05MS43IDkuNC0zNy43IDctMzkuNCAxMi4zLTQyLjEgMjAtMTAuMSAzNS44LTE2LjggNTguNC0xNi44IDExLjEgMCAxOSAyLjMgMzYuNyA1LjIgMS44IC4xIDQuMS0xLjcgNC4xLTMuNXoiXQogICAgfTsKICAgIGZhQml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaXR5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzN2EiLCAiTTg2LjUgNjcuMmM5NS40LTg5LjIgMjQ2LjEtOTEuMiAzNDMuMSAzLjggMTQuMyAxNC4xLTYuNCAzNy4xLTIyLjQgMjEuNS04NC44LTgyLjQtMjE1LjgtODAuMy0yOTguOS0zLjItMTYuMyAxNS4xLTM2LjUtOC4zLTIxLjgtMjIuMXptOTguOSA0MTguNmMxOS4zIDUuNyAyOS4zLTIzLjYgNy45LTMwLTExMi4yLTMzLjktMTc1LjgtMTQ5LjctMTQ3LjUtMjYxIDUtMTkuNi0yNC45LTI4LjEtMzAuMi03LjEtMzIuMSAxMjcuNCA0MS4xIDI1OS44IDE2OS44IDI5OC4xem0xNDguMS0yYzEyMS45LTQwLjIgMTkyLjktMTY2LjkgMTY0LjQtMjkxLTQuNS0xOS43LTM0LjktMTMuOC0zMCA3LjkgMjQuMiAxMDcuNy0zNy4xIDIxNy45LTE0My4yIDI1My40LTIxLjIgNy0xMC40IDM2IDguOCAyOS43em0tNjIuOS03OWwuMi03MS44YzAtOC4yLTYuNi0xNC44LTE0LjgtMTQuOHMtMTQuOCA2LjctMTQuOCAxNC44bC0uMiA3MS44YzAgOC4yIDYuNiAxNC44IDE0LjggMTQuOHMxNC44LTYuNiAxNC44LTE0Ljh6bTcxLTI2OWMyLjEgOTAuOSA0LjcgMTMxLjktODUuNSAxMzIuNS05Mi41LS43LTg2LjktNDQuMy04NS41LTEzMi41IDAtMjEuOC0zMi41LTE5LjYtMzIuNSAwbDAgNzEuNmMwIDY5LjMgNjAuNyA5MC45IDExOCA5MC4xIDU3LjMgLjggMTE4LTIwLjggMTE4LTkwLjFsMC03MS42YzAtMTkuNi0zMi41LTIxLjgtMzIuNSAweiJdCiAgICB9OwogICAgZmFXcGV4cGxvcmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwZXhwbG9yZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkZSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptNDgwIDBhMjI0IDIyNCAwIDEgMCAtNDQ4IDAgMjI0IDIyNCAwIDEgMCA0NDggMHpNMTYwLjkgMTI0LjZsODYuOSAzNy4xLTM3LjEgODYuOS04Ni45LTM3LjEgMzcuMS04Ni45em0xMTAgMTY5LjFsNDYuNiA5NC0xNC42IDAtNTAtMTAwLTQ4LjkgMTAwLTE0IDAgNTEuMS0xMDYuOS0yMi4zLTkuNCA2LTE0IDY4LjYgMjkuMS02IDE0LjMtMTYuNS03LjF6TTI1OS4xIDE3Ny40bDY4LjYgMjkuNC0yOS40IDY4LjMtNjguMy0yOS4xIDI5LjEtNjguNnptODAuMyA0Mi45bDU0LjYgMjMuMS0yMy40IDU0LjMtNTQuMy0yMy4xIDIzLjEtNTQuM3oiXQogICAgfTsKICAgIGZhTWVnYXBvcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVnYXBvcnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVhMyIsICJNMjIyLjUgMjA5LjZsMCA2Ni4yIDMzLjUgMzMuNSAzMy4zLTMzLjMgMC02Ni40LTMzLjQtMzMuNC0zMy40IDMzLjR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDAxLjEgNDIyLjRsLTI2LjEgMTkuMi0yNi0xOS4yIDAtNjUuNS0zMy40LTMzLjQtMzMuNCAzMy40IDAgNjUuNS0yNi4yIDE5LjItMjYuMS0xOS4yIDAtNjUuNS0zMy40LTMzLjQtMzMuNSAzMy40IDAgNjUuNS0yNi4xIDE5LjItMjYuMS0xOS4yIDAtODcgNTkuNS01OS41IDAtODcuOSA1OS41LTU5LjUgMC03NS42IDI2LjEtMTkuMiAyNi4xIDE5LjIgMCA3NS42IDU5LjUgNTkuNSAwIDg3LjYgNTkuNyA1OS43IDAgODcuMS0uMSAweiJdCiAgICB9OwogICAgZmFMZWV0Y29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsZWV0Y29kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlODZhIiwgIk0yMzUuNCA5LjNDMjQ2LjUtMi41IDI2NS4xLTMuMiAyNzcgNy45czEyLjUgMjkuOCAxLjQgNDEuNmwtNDMgNDZjMjEuNSAzLjMgNDIuMSAxMS44IDU5LjEgMjUuNmw3NC42IDYwLjNjMTIuNiAxMC4yIDE0LjYgMjguOCA0LjQgNDEuNHMtMjguNyAxNC42LTQxLjQgNC40bC03NC42LTYwLjNjLTI2LjItMjEuMS03MS45LTE4LjItOTQuNSA1LjlMODEgMjYxYy0yMS41IDIzLTE5LjEgNjAgNS42IDg0LjJsOTEuMiA4OS40YzI0LjkgMjQgNjUuNiAyNCA5MC4xLS40bDUxLjEtNTFjMTEuNS0xMS41IDMwLjEtMTEuNSA0MS42IC4xczExLjQgMzAuMi0uMSA0MS43bC01MS4xIDUxYy00Ny4xIDQ3LjEtMTI0IDQ3LjctMTcxLjkgMS42bC05Mi05MC4yQy0xLjQgMzQxLjMtNiAyNjcuOSAzOCAyMjAuN0wyMzUuNCA5LjN6TTQxMS43IDI3My4yYzE2LjIgMCAyOS40IDEzLjIgMjkuNCAyOS41cy0xMy4yIDI5LjUtMjkuNCAyOS41bC0yMTYuOSAwYy0xNi4yIDAtMjkuNC0xMy4yLTI5LjQtMjkuNXMxMy4yLTI5LjUgMjkuNC0yOS41bDIxNi45IDB6Il0KICAgIH07CiAgICBmYU1kYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZGIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjhjYSIsICJNMTcuNCAxNjAuNGwtMTAuNCAxOTEuNiA0My45IDAgNS42LTc5LjggMjcuOSA3OS44IDQ0LjcgMCAyNS41LTc3LjQgNC44IDc3LjQgNDUuNSAwLTEyLjgtMTkxLjYtNDUuNSAwLTQwLjcgMTE3LjMtNDIuMy0xMTcuMy00Ni4zIDB6bTI4MSAwbC00Ny45IDAgMCAxOTEuNiA0Ny45IDBzOTUgLjggOTQuMi05NS44Yy0uOC05NC4yLTk0LjItOTUuOC05NC4yLTk1LjhsMCAwem0tMS4yIDE0Ni41bDAtMTAyLjFzNDYgNC4zIDQ2LjggNTAuNi00Ni44IDUxLjUtNDYuOCA1MS41bDAgMHptMjM4LjMtNzQuMmM3LjItMTEuNCAxMC0yNSA4LTM4LjMtNS4zLTM1LjgtNTUuMS0zNC4zLTU1LjEtMzQuM2wtNTEuOSAwIDAgMTkxLjYgNDUuNSAwczg3IDQuOCA4Ny02My44YzAtNDMuMS0zMy41LTU1LjEtMzMuNS01NS4xbDAgMHptLTUxLjktMzEuOXMxMy42LTEuNiAxNiA5LjZjMS40IDYuNy00IDEyLTQgMTJsLTEyIDAgMC0yMS42em0tLjEgMTA5LjVsLjEtMjQuOSAwLTE4LjIgLjEgMHM0MS42LTQuNyA0MS4yIDIyLjRjLS4zIDI1LjctNDEuMyAyMC43LTQxLjMgMjAuN2wwIDB6Il0KICAgIH07CiAgICBmYVBhZ2U0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZ2U0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDciLCAiTTI1NiA1MDRDMTE5IDUwNCA4IDM5MyA4IDI1NlMxMTkgOCAyNTYgOGMyMC45IDAgNDEuMyAyLjYgNjAuNyA3LjVMNTAuMyAzOTIgMjU2IDM5MiAyNTYgNTA0em0wLTE0My42bDAtMjEzLjYtMTQ5LjQgMjEzLjYgMTQ5LjQgMHpNMzUyIDM5MmwwIDkyLjdjNDUuNy0xOS4yIDg0LjUtNTEuNyAxMTEuNC05Mi43TDM1MiAzOTJ6bTU3LjQtMTM4LjJsLTIxLjIgOC40IDIxLjIgOC4zIDAtMTYuN3ptLTIwLjMgNTQuNWMtNi43IDAtOCA2LjMtOCAxMi45bDAgNy43IDE2LjIgMCAwLTEwYzAtNS45LTIuMy0xMC42LTguMi0xMC42ek01MDQgMjU2YzAgMzcuMy04LjIgNzIuNy0yMyAxMDQuNGwtMTI5IDAgMC0zMzMuMUM0NDEuMyA2NC44IDUwNCAxNTMuMSA1MDQgMjU2ek0zNjguNCAxNDMuNmw2OC4yIDAgMC00Ny42LTEzLjkgMCAwIDMyLjYtMTMuOSAwIDAtMjkuNi0xMy45IDAgMCAyOS42LTEyLjcgMCAwLTMyLjYtMTMuOSAwIDAgNDcuNiAuMSAwem02OC4xIDE4NS4zbC0yNi41IDAgMC0xMWMwLTE1LjQtNS42LTI1LjItMjAuOS0yNS4yLTE1LjQgMC0yMC43IDEwLjYtMjAuNyAyNS45bDAgMjUuMyA2OC4yIDAgMC0xNS0uMSAwem0wLTEwM2wtNjguMiAyOS43IDAgMTIuNCA2OC4yIDI5LjUgMC0xNi42LTE0LjQtNS43IDAtMjYuNSAxNC40LTUuOSAwLTE2Ljl6bS00LjgtNjguNWwtMzUuNiAwIDAgMjYuNiAxMy45IDAgMC0xMi4yIDExIDBjOC42IDE1LjggMS4zIDM1LjMtMTguNiAzNS4zLTIyLjUgMC0yOC4zLTI1LjMtMTUuNS0zNy43bC0xMS42LTEwLjZjLTE2LjIgMTcuNS0xMi4yIDYzLjkgMjcuMSA2My45IDM0IDAgNDQuNy0zNS45IDI5LjMtNjUuM3oiXQogICAgfTsKICAgIGZhVGhlUmVkWWV0aSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGUtcmVkLXlldGkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY5ZCIsICJNNDg4LjcgMjQxLjdsMjAuNyA3LjFjLTkuNi0yMy45LTIzLjktMzctMzEuNy00NC44bDcuMS0xOC4yYy4yIDAgMTIuMy0yNy44LTIuNS0zMC43LS42LTExLjMtNi42LTI3LTE4LjQtMjctNy42LTEwLjYtMTcuNy0xMi4zLTMwLjctNS45LTkuMSA0LjQtMTcuNiAxMC0yNS4zIDE2LjUtNS4zLTYuNC0zIC40LTMtMjkuOC0zNy4xLTI0LjMtNDUuNC0xMS43LTc0LjggM2wuNSAuNWMtMjItNy43LTQ1LjEtMTIuMi02OC40LTEzLjMtNS41LTguNy0xOC42LTE5LjEtMjUuMS0yNS4xbDI0LjggNy4xYy01LjUtNS41LTI2LjgtMTIuOS0zNC4yLTE1LjIgMTguMi00LjEgMjkuOC0yMC44IDQyLjUtMzMtMzQuOS0xMC4xLTY3LjktNS45LTk3LjkgMTEuOGwxMi00NC4yLTEuOC0uNWMtMzEuNiAyNC4yLTMzIDQxLjktMzMuNyA0NS41LS45LTIuNC02LjMtMTkuNi0xNS4yLTI3LTMuMyA4LjEtMy41IDE3LjEtLjUgMjUuMyAzIDguNCA1LjkgMTQuOCA4LjQgMTguOS0xNi0zLjMtMjguMy00LjktNDkuMiAwbC0zLjcgMCAzMyAxNC4zYy0yMC4yIDE4LjktMzYuMSA0MS45LTQ2LjcgNjcuNGwtMS43IDguNCAxLjcgMS43IDcuNi00LjdjLTMuMyAxMS42LTUuMyAxOS40LTYuNiAyNS44LTEwLjkgMTIuMi0yMC4yIDI1LjgtMjcuOCA0MC4zLTE1IDEtMzEuOCAxMC44LTQwLjMgMTQuM2wzIDMuNCAyOC44IDFjLS41IDEtLjcgMi4yLTEuMiAzLjItNy4zIDYuNC0zOS44IDM3LjctMzMgODAuN2wyMC4yLTIyLjRjLjUgMS43IC43IDMuNCAxLjIgNS4yIDAgMjUuNSAuNCA4OS42IDY0LjkgMTUwLjUgNDMuNiA0MCA5NiA2MC4yIDE1Ny41IDYwLjIgMTIxLjcgMCAyMjMtODcuMyAyMjMtMjExLjUgNi44LTkuNy0xLjIgMyAxNi43LTI1LjFsMTMgMTQuMyAyLjUtLjVjLTEuOC0xMS43LTQuOC0yMy4xLTguOS0zNC4yLTEuNS00LjgtMy44LTkuMy02LjgtMTMuM2wwIDB6TTM5OC41IDExMS4ybC0uNSAyMS45YzUuNSAxOC4xIDE2LjkgMTcuMiAyMi40IDE3LjJsLTMuNC00LjcgMjIuNC01LjRjLTkgLjUtMTggLjUtMjcgMCAxMi44LTIuMSAzMy4zLTI5IDQzLTExLjMgMy40IDcuNiA2LjQgMTcuMiA5LjMgMjcuOGwxLjctNS45Yy0xLjMtNS0xLjgtMTAuMS0xLjctMTUuMiA1LjQgLjUgOC44IDMuNCA5LjMgMTAuMSAuNSA2LjQgMS43IDE0LjggMy40IDI1LjNsNC43LTExLjNjNC42IDAgNC41LTMuNi0yLjUgMjAuNy0yMC45LTguNy0zNS4xLTguNC00Ni41LTguNGwxOC4yLTE2Yy0yNS4zIDguMi0zMyAxMC44LTU0LjggMjAuOS0xLjEtNS40LTUtMTMuNS0xNi0xOS45LTMuMiAzLjgtMi44IC45LS43IDE0LjhsLTIuNSAwYy0xLjItOC4yLTQuMS0xNi04LjQtMjMuMWw0LjItMy40YzguNC03LjEgMTEuOC0xNC4zIDEwLjYtMjEuOS0uNS02LjQtNS40LTEzLjUtMTMuNS0yMC43IDUuNi0zLjQgMTUuMi0uNCAyOC4zIDguNXptLTM5LjYtMTAuMWMyLjcgMS45IDExLjQgNS40IDE4LjkgMTcuMiA0LjIgOC40IDQgOS44IDMuNCAxMS4xLS41IDIuNC0uNSA0LjMtMyA3LjEtMS43IDIuNS01LjQgNC43LTExLjggNy42LTcuNi0xMy0xNi41LTIzLjYtMjcuOC0zMS4ybDIwLjMtMTEuOHptLTI2Ny40IDQybDEuMi0xLjdjMS4yLTIuOSA0LjItNy42IDkuMy0xNS4ybDIuNS0zLjQtMTMgMTIuMyA1LjQtNC43LTEwLjEgOS4zLTQuMiAxLjJjMTIuMy0yNC4xIDIzLjEtNDEuMyAzMi41LTUwLjIgOS4zLTkuMyAxNi0xNiAyMC4yLTE5LjRsLTYuNCAxLjJjLTExLjMtNC4yLTE5LjQtNy4xLTI0LjgtOC40IDIuNS0uNSAzLjctLjUgMy4yLS41IDEwLjMgMCAxNy41IC41IDIwLjkgMS4yIDUuMiAxLjcgMTAuNiAyLjUgMTYgMi41bC41LTEuNy04LjQtMzUuOCAxMy41IDI5YzIuOC00LjQgNC44LTkuMiA1LjktMTQuMyAxLjctNi40IDUuNC0xMyAxMC4xLTE5LjRzNy42LTEwLjYgOS4zLTExLjNjLTIuNiA4LjMtNC43IDE2LjgtNi40IDI1LjNsLTEuNyA3LjEtLjUgNC43IDIuNSAyLjVjMjEuOS0xMy41IDQ1LjUtMTkuNCA3MS4zLTE4LjlsMjEuMSAuNWMtMTEuOCAxMy41LTI3LjggMjEuOS00OC41IDI0LjgtNy43IDEuNC0xNS42IDIuNC0yMy40IDIuOWwtLjItLjUtMi41LTEuMmMtNC44LTEtOS43LS4zLTE0IDItMi41LS4yLTQuOS0uNS03LjEtLjdsLTIuNSAxLjcgLjUgMS4yYzIgLjIgMy45IC41IDYuMiAuN2wtMiAzLjQgMy40LS41LTEwLjYgMTEuM2MtNC4yIDMtNS40IDYuNC00LjIgOS4zbDUuNC0zLjQgMS4yIDBjNi4xLTguMiAxNS4yLTEzLjYgMjUuMy0xNS4ybDAtM2M2LjQgLjUgMTMgMSAxOS40IDEuMiA2LjQgMCA4LjQgLjUgNS40IDEuMiA3LjIgNCAxNC4xIDguNiAyMC43IDEzLjUgMTMuNSAxMC4xIDIzLjYgMjEuOSAzMCAzNS40IDguOCAxOC4yIDEzLjUgMzcuMSAxMy41IDU2LjYgMCA5LjUtMSAxOS0zIDI4LjMtMy41IDE1LjktOC45IDMxLjMtMTYgNDZsMi41IC41YzE4LjItMTkuNyA0MS45LTE2IDQ5LjItMTZsLTYuNCA1LjkgMjIuNCAxNy43LTEuNyAzMC43Yy01LjQtMTIuMy0xNi41LTIxLjEtMzMtMjcuOCAxNi41IDE0LjggMjMuNiAyMS4xIDIxLjkgMjAuMi00LjgtMi44LTMuNS0xLjktMTAuOC0zLjcgNC4xIDQuMSAxNy41IDE4LjggMTguMiAyMC43bC4yIC4yLS4yIC4yYzAgMS44IDEuNi0xLjItMTQgMjIuOS03NS4yLTE1LjMtMTA2LjMtNDIuNy0xNDEuMi02My4ybDExLjggMS4yYy0xMS44LTE4LjUtMTUuNi0xNy43LTM4LjQtMjYuMWwxMC42LTguNGMtOC44LTMtMTguMi0zLTI4LjMgLjVsNy42LTEwLjYtMS4yLTEuN2MtMTQuOSA0LjMtMTkuOCA5LjItMjIuNiAxMS4zLTEuMS01LjUtMi44LTEyLjQtMTIuMy0yOC44bC0xLjIgMjctMTMuMi01YzEuNS0yNS4yIDUuNC01MC41IDEzLjItNzQuNnpNMzY4IDQ3My4xYy00OS45IDI1LTU2LjEgMjIuNC01OSAyMy45LTI5LjgtMTEuOC01MC45LTMxLjctNjMuNS01OC44bDMwIDE2LjVjLTkuOC05LjMtMTguMy0xNi41LTM4LjQtNDQuM2wxMS44IDIzLjEtMTcuNy03LjZjMTQuMiAyMS4xIDIzLjUgNTEuNyA2Ni42IDczLjUtMTIwLjggMjQuMi0xOTktNzIuMS0yMDAuOS03NC4zIDExLjEgOS4yIDIyLjkgMTcuNSAzNS40IDI0LjggMy40IDEuNyA3LjEgMi41IDEwLjEgMS4ybC0xNi0yMC43YzkuMiA0LjIgOS41IDQuNSA2OS4xIDI5LTQyLjUtMjAuNy03My44LTQwLjgtOTMuMi02MC4yLS41IDYuNC0xLjIgMTAuMS0xLjIgMTAuMSA4LjcgNy4zIDE1LjggMTYuNCAyMC43IDI2LjYtMzktMTguOS01Ny42LTQ3LjYtNzEuMy04Mi42IDQ5LjkgNTUuMSAxMTguOSAzNy41IDEyMC41IDM3LjEgMzQuOCAxNi40IDY5LjkgMjMuNiAxMTMuOSAxMC42IDMuMyAwIDIwLjMgMTcgMjUuMyAzOS4xbDQuMi0zLTIuNS0yMy42YzkgOSAyNC45IDIyLjYgMzQuNCAxMy0xNS42LTUuMy0yMy41LTkuNS0yOS41LTMxLjcgNC42IDQuMiA3LjYgOSAyNy44IDE1bDEuMi0xLjItMTAuNS0xNC4yYzExLjctNC44LTMuNSAxIDMyLTEwLjggNC4zIDM0LjMgOSA0OS4yIC43IDg5LjV6TTQ4My4zIDI1OC43bC0yLjUgLjUgMyA5LjNjLTMuNSA1LjktMjMuNyA0NC4zLTcxLjYgNzkuNy0zOS41IDI5LjgtNzYuNiAzOS4xLTgwLjkgNDAuM2wtNy42LTcuMS0xLjIgMyAxNC4zIDE2LTcuMS00LjcgMy40IDQuMi0xLjIgMC0yMS45LTEzLjUgOS4zIDI2LjYtMTktMjcuOS0xLjIgMi41IDcuNiAyOWMtNi4xLTguMi0yMS0zMi42LTU2LjgtMzkuNmwzMi41IDIxLjJjLTMxLjIgNC43LTYzIDIuNS05My4yLTYuNC00LjItMS4yLTguOS0yLjUtMTMuNS00LjJsMS4yLTMtNDQuOC0yMi40IDI2LjEgMjIuNGMtNTcuNyA5LjEtMTEzLTI1LjQtMTI2LjQtODMuNEwyOS4zIDI4NC44IDcgMzA3LjFjMTkuNS01Ny41IDI1LjYtNTcuOSA1MS40LTcwLjEtOS4xLTUuMy0xLjYtMy4zLTM4LjQtOS4zIDE1LjgtNS44IDMzLTE1LjQgNzMgNS4yIDEuMi0uNyAyLjQtMS4zIDMuNy0xLjcgLjYtMy4yIC40LS44IDEtMTEuOCAzLjkgMTAgMy42IDguNyAzIDkuM2wxLjcgLjVjMTIuNy02LjUgOC45LTQuNSAxNy04LjlsLTUuNCAxMy41IDIyLjMtNS44LTguNCA4LjQgMi41IDIuNWM0LjUtMS44IDMwLjMgMy40IDQwLjggMTZsLTIzLjYtMi41YzM5LjQgMjMgNTEuNSA1NCA1NS44IDY5LjZsMS43LTEuMmMtMi44LTIyLjMtMTIuNC0zMy45LTE2LTQwLjEgNC4yIDUgMzkuMiAzNC42IDExMC40IDQ2LTExLjMtLjUtMjMuMSA1LjQtMzQuOSAxOC45bDQ2LjctMjAuMi05LjMgMjEuOWM3LjYtMTAuMSAxNC44LTIzLjYgMjEuMi0zOS42bDAtLjUgMS4yLTMtMS4yIDE2YzEzLjUtNDEuOCAyNS4zLTc4LjUgMzUuNC0xMDkuN2wxMy41LTI3LjggMC0yLTUuNC00LjIgMTAuMSAwIDUuOSA0LjIgMi41LTEuMi0zLjQtMTYgMTIuMyAxOC45IDQxLjgtMjAuMi0xNC44IDEzIC41IDIuOSAxNy43LS41YzExLjEgLjQgMjIuMSAxLjggMzMgNC4ybC0yMy42IDIuNS0xLjIgMyAyNi42IDIzLjFjOS45IDkuOSAxOC45IDIwLjYgMjcgMzItMTEuMi0zLjMtMTAuMy0zLjQtMjEuMi0zLjRsMTIuMyAzMi41LTguOS0xMi44em0tNi4xLTcxLjNsLTMuOSAxMy0xNC4zLTExLjggMTguMi0xLjJ6bS0yNTQuOCA3LjFjMS43IDEwLjYgNC43IDE3LjcgOC44IDIxLjktOS4zIDYuNi0yNy41IDEzLjktNDYuNSAxNmwuNSAxLjJjOC4zIDEuMyAxNi45IC40IDI0LjgtMi41bC03LjEgMTNjNC4yLTEuNyAxMC4xLTcuMSAxNy43LTE0LjggMTEuOS01LjUgMTIuNy01LjEgMjAuMi0xNi0xMi43LTYuNC0xNS43LTEzLjctMTguNC0xOC44em0zLjctMTAyLjNjLTYuNC0zLjQtMTAuNiAzLTEyLjMgMTguOXMyLjUgMjkuNSAxMS44IDM5LjYgMTguMiAxMC42IDI2LjEgMyAzLjQtMjMuNi0xMS4zLTQ3LjdjLTMuNS01LjctOC40LTEwLjUtMTQuMy0xMy44bDAgMHptLTQuNyA0Ni4zYzUuNCAyLjIgMTAuNSAxLjkgMTIuMy0xMC42bDAtNC43LTEuMiAuNWMtNC4zLTMuMS0yLjUtNC41LTEuNy02LjJsLjUtLjVjLS45LTEuMi01LTguMS0xMi41IDQuNy0uNS0xMy41IC41LTIxLjkgMy0yNC44IDEuMi0yLjUgNC43LTEuMiAxMS4zIDQuMiA2LjQgNS40IDExLjMgMTYgMTUuMiAzMi41IDYuNSAyOC0xOS44IDI2LjItMjYuOSA0Ljl6bS00NS01LjVjMS42IC4zIDkuMy0xLjEgOS4zLTE0LjhsLS41IDBjLTUuNC0xLjEtMi4yLTUuNS0uNy01LjktMS43LTMtMy40LTQuMi01LjQtNC43LTguMSAwLTExLjYgMTIuNy04LjEgMjEuMiAuNSAxLjEgMS4zIDIgMi4yIDIuOHMyIDEuMiAzLjIgMS40bDAgMHptNDAuMS01MC4xbC0yLjUgLjUgLjUgM2M5LjEtLjUgMTguMSAxLjUgMjYuMSA1LjktMi41LTUuNS0xMC0xNC4zLTI4LjMtMTQuM2wuNSAyLjUgMy43IDIuNHptLTcxLjggNDkuNGMyMS43IDE2LjggMTYuNSAyMS40IDQ2LjUgMjMuNmwtMi45LTQuN2M4LjQtNy4yIDEzLjctMTcuMyAxNC44LTI4LjMgMS43LTE2LTEuMi0yOS41LTguOC00MS4zbDEzLTcuNmMwLS4zIDAtLjYtLjEtLjlzLS4yLS42LS40LS44Yy0yLjItLjktNC42LTEuMi03LS45cy00LjYgMS4yLTYuNSAyLjZjLTEyLjcgNi43LTI4IDIwLjktMjkgMjIuNC0xLjcgMS43LTMuNCA1LjktNS40IDEzLjUtMS45IDcuNy0yLjkgMTUuNi0yLjkgMjMuNi00LjctOC0xMC41LTYuNC0xOS45LTUuOWw3LjEgNy42Yy0xNi41IDAtMjMuMyAxNS40LTIzLjYgMTYgNi44IDAgNC42LTcuNiAzMC0xMi4zLTQuMy02LjMtMy4zLTUtNC45LTYuNnptMTguNy0xOC43YzEuMi03LjYgMy40LTEzIDYuNC0xNy4yIDUuNC02LjQgMTAuNi0xMC4xIDE2LTExLjggNC4yLTEuNyA3LjEgMS4yIDEwLjEgOS4zIDIuNSA4LjIgMy41IDE2LjggMyAyNS4zLS41IDkuMy0zLjQgMTcuMi04LjQgMjMuMS0yLjkgMy40LTUuNCA1LjktNi40IDcuNi0zLjggLjQtNy42IC4yLTExLjMtLjVsLTcuMS0zLjQtNS40LTYuNGMuOC0xMCAxLjMtMTguOCAzLjEtMjZ6bTQyIDU2LjFjLTM0LjggMTQuNC0zNC43IDE0LTM2LjEgMTQuMy0yMC44IDQuNy0xOS0yNC40LTE4LjktMjQuOGw1LjktMS4yLS41LTIuNWMtMjAuMi0yLjYtMzEgNC4yLTMyLjUgNC45IC41IC41IDMgMy40IDUuOSA5LjMgNC4yLTYuNCA4LjgtMTAuMSAxNS4yLTEwLjYtMS43IDExLjItMS4yIDIyLjcgMS43IDMzLjcgLjEgLjUgMi42IDE3LjQgMjcuNSAyNC4xIDExLjMgMyAyNyAxLjIgNDguOS01LjRsLTkuMiAuNWMtNC4yLTE0LjgtNi40LTI0LjgtNS45LTI5LjUgMTEuMy04LjggMjEuOS0xMS4zIDMwLjctNy42bDIuNSAwLTExLjgtNy42LTcuMSAuNWMtNS45IDEuMi0xMi4zIDQuMi0xOS40IDguNGwzLjEtNi41eiJdCiAgICB9OwogICAgZmFKaXJhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImppcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdiMSIsICJNNDk4LjUgMjQxLjdjLTcyLjktNzIuNy0xNjkuNC0xNjkuOS0yNDEuNS0yNDEuNy0xNjUuNSAxNjQuOS0yNDIuNSAyNDEuNy0yNDIuNSAyNDEuNy03LjkgNy45LTcuOSAyMC43IDAgMjguNyAxMzIuOCAxMzIuMyA2MS44IDYxLjUgMjQyLjUgMjQxLjYgMzc5LjQtMzc4IDE1LjctMTYuNyAyNDEuNS0yNDEuNyA4LTcuOSA4LTIwLjcgMC0yOC42ek0yNTcgMzMxLjdsLTc2LTc1LjcgNzYtNzUuNyA3NiA3NS43LTc2IDc1Ljd6Il0KICAgIH07CiAgICBmYUZlZGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZlZGV4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3OTciLCAiTTU4NiAyODQuNWw1My4zLTU5LjktNjIuNCAwLTIxLjcgMjQuOC0yMi41LTI0LjgtMTE4LjcgMCAwLTE2IDU2LjEgMCAwLTQ4LjEtMTUxLjIgMCAwIDc1LjUtLjUgMGMtOS42LTExLTIxLjUtMTQuOC0zNS40LTE0LjgtMjguNCAwLTQ5LjggMTkuNC01Ny4zIDQ0LjktMTgtNTkuNC05Ny40LTU3LjYtMTIxLjktMTRsMC0yNC4yLTU0LjggMCAwLTI2LjIgNjAgMCAwLTQxLjEtMTA5IDAgMCAxODQuNCA0OSAwIDAtNzcuNSA0OC45IDBjLTEuNSA1LjctMi4zIDExLjgtMi4zIDE4LjIgMCA3My4xIDEwMi42IDkxLjQgMTMwLjIgMjMuN2wtNDIgMGMtMTQuNyAyMC45LTQ1LjggOC45LTQ1LjgtMTQuNmw4NS41IDBjMy43IDMwLjUgMjcuNCA1Ni45IDYwLjEgNTYuOSAxNC4xIDAgMjctNi45IDM0LjktMTguNmwuNSAwIDAgMTEuOSAyMTIuMiAwIDIyLjEtMjUgMjIuMyAyNSA2NC40IDAtNTQtNjAuNXpNMTM5LjMgMjY3LjljNi4xLTI2LjMgNDEuNy0yNS42IDQ2LjUgMGwtNDYuNSAwem0xNTMuNCA0OC45Yy0zNC42IDAtMzQtNjIuOCAwLTYyLjggMzIuNiAwIDM0LjUgNjIuOCAwIDYyLjh6bTE2Ny44IDE5LjFsLTk0LjQgMCAwLTE2Ni41IDk1IDAgMCAzMC4yLTU2LjEgMCAwIDMzLjkgNTUuNSAwIDAgMjguMS01Ni4xIDAgMCA0NC43IDU2LjEgMCAwIDI5LjZ6bS00NS45LTM5LjhsMC0yNC40IDU2LjEgMCAwLTQ0IDUwLjcgNTctNTAuNyA1NyAwLTQ1LjYtNTYuMSAwem0xMzguNiAxMC4zbC0yNi4xIDI5LjUtMzguMSAwIDQ1LjYtNTEuMi00NS42LTUxLjIgMzkuNyAwIDI2LjYgMjkuMyAyNS42LTI5LjMgMzguNSAwLTQ1LjQgNTEgNDYgNTEuNC00MC41IDAtMjYuMy0yOS41eiJdCiAgICB9OwogICAgZmFFdmVybm90ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldmVybm90ZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmODM5IiwgIk0xMjEuMSAxMzIuMmMxLjYgMjIuMy0xNy42IDIxLjYtMjEuNiAyMS42LTY4LjkgMC03My42LTEtODMuNiAzLjMtLjYgLjItLjcgMC0uNC0uNEwxMjQuMSA0Ni40Yy40LS40IC42LS4yIC40IC40LTQuNCAxMC0zLjQgMTUuMS0zLjQgODUuNHptNzkgMzA4Yy0xNC43LTM3LjEgMTMtNzYuOSA1Mi41LTc2LjYgMTcuNSAwIDIyLjYgMjMuMiA3LjkgMzEuNC02LjIgMy4zLTI0LjkgMS43LTI1LjEgMTkuMiAwIDE3LjEgMTkuNyAyNSAzMS4yIDI0LjkgNiAwIDExLjktMS4yIDE3LjUtMy41czEwLjYtNS43IDE0LjgtOS45IDcuNi05LjMgOS45LTE0LjggMy41LTExLjUgMy41LTE3LjVsMC0uMWMwLTExLjYtNy44LTQ3LjItNDcuNS01NS4zLTcuNy0xLjUtNjUtNi4zLTY4LjQtNTAuNS0zLjcgMTYuOS0xNy40IDYzLjUtNDMuMSA2OS4xLTguNyAxLjktNjkuNyA3LjYtMTEyLjktMzYuOCAwIDAtMTguNi0xNS4yLTI4LjItNTgtMy40LTE1LjctOS4zLTM5LjctMTEuMS02MiAwLTE4IDExLjEtMzAuNCAyNS4xLTMyLjIgODEgMCA5MCAyLjMgMTAxLTcuOCA5LjgtOS4yIDcuOC0xNS41IDcuOC0xMDIuOCAxLTguMyA3LjgtMzAuOCA1My40LTI0LjEgNiAuOSAzMS45IDQuMiAzNy41IDMwLjZMMjkwIDc0LjhjMjAuNCAzLjcgNzAuOSA3IDgwLjYgNTcuOSAyMi43IDEyMS4xIDguOSAyMzguNSA3LjggMjM4LjUtMTYgMTE0LjQtMTExLjEgMTA4LjktMTExLjEgMTA4LjktMTktLjItNTQuMi05LjQtNjcuMy0zOS44bDAgMHpNMjgxIDIzNS40Yy0xIDEuOS0yLjIgNiAuOSA3IDE0LjEgNC45IDM5LjggNi44IDQ1LjkgNS41IDMuMS0uMiAzLjEtNC40IDIuNS02LjYtMy41LTIxLjgtNDAuOC0yNi41LTQ5LjItNS45bDAgMHoiXQogICAgfTsKICAgIGZhVXNiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzYiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjg3IiwgIk02MzMuNSAyNTZjMCAzLjEtMS43IDYuMS00LjUgNy41TDUzOS45IDMxN2MtMS40IC44LTIuOCAxLjQtNC41IDEuNC0xLjQgMC0zLjEtLjMtNC41LTEuMS0yLjgtMS43LTQuNS00LjUtNC41LTcuOGwwLTM1LjYtMjMwLjcgMGMyNS4zIDM5LjYgNDAuNSAxMDYuOSA2OS42IDEwNi45bDI2LjcgMCAwLTI2LjhjMC01IDMuOS04LjkgOC45LTguOWw4OS4xIDBjNSAwIDguOSAzLjkgOC45IDguOWwwIDg5LjFjMCA1LTMuOSA4LjktOC45IDguOWwtODkuMSAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNy0yNi43IDBjLTc1LjQgMC04MS4xLTE0Mi41LTEyNC43LTE0Mi41bC0xMDAuMyAwYy04LjEgMzAuNi0zNS45IDUzLjUtNjkgNTMuNS0zOS4zLS4xLTcxLjMtMzIuMS03MS4zLTcxLjRzMzItNzEuMyA3MS4zLTcxLjNjMzMuMSAwIDYxIDIyLjggNjkgNTMuNSAzOS4xIDAgNDMuOSA5LjUgNzQuNi02MC40IDQwLjEtODkuMSA1OC4xLTgyLjEgMTA4LjktODIuMSA3LjUtMjAuOSAyNy0zNS42IDUwLjQtMzUuNiAyOS41IDAgNTMuNSAyMy45IDUzLjUgNTMuNXMtMjMuOSA1My41LTUzLjUgNTMuNWMtMjMuNCAwLTQyLjktMTQuOC01MC40LTM1LjZsLTI5LjggMGMtMjkuMSAwLTQ0LjMgNjcuNC02OS42IDEwNi45bDMwMi4xIDAgMC0zNS42YzAtMy4zIDEuNy02LjEgNC41LTcuOHM2LjQtMS40IDguOSAuM0w2MjkgMjQ4LjhjMi44IDEuMSA0LjUgNC4xIDQuNSA3LjJ6Il0KICAgIH07CiAgICBmYUFuZ3J5Y3JlYXRpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5ncnljcmVhdGl2ZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzZlIiwgIk02NDAgMjM4LjJsLTMuMiAyOC4yLTM0LjUgMi4zLTIgMTguMSAzNC41LTIuMy0zLjIgMjguMi0zNC40IDIuMi0yLjMgMjAuMSAzNC40LTIuMi0zIDI2LjEtNjQuNyA0LjEgMTIuNy0xMTMuMi00Ny4zIDExNS40LTMxLjkgMi0yMy44LTExNy44IDMwLjMtMiAxMy42IDc5LjQgMzEuNy04Mi40IDkzLjEtNi4yek00MjYuOCAzNzEuNWwyOC4zLTEuOCAxMi45LTEyMC4xLTI4LjQgMS45LTEyLjggMTIwek0xNjIgMzg4LjFsLTE5LjQtMzYtMy41IDM3LjQtMjguMiAxLjcgMi43LTI5LjFjLTExIDE4LTMyIDM0LjMtNTYuOSAzNS44LTMyLjggMi01OS43LTIwLjktNTYuNC01OC4yIDIuNi0yOS4zIDI2LjctNjIuOCA2Ny41LTY1LjQgMzcuNy0yLjQgNDcuNiAyMy4yIDUxLjMgMjguOGwyLjgtMzAuOCAzOC45LTIuNWMyMC4xLTEuMyAzOC43IDMuNyA0Mi41IDIzLjdsMi42LTI2LjYgNjQuOC00LjItMi43IDI3LjktMzYuNCAyLjQtMS43IDE3LjkgMzYuNC0yLjMtMi43IDI3LjktMzYuNCAyLjMtMS45IDE5LjkgMzYuMy0yLjMtMi4xIDIwLjggNTUtMTE3LjIgMjMuOC0xLjYgMzIuMSAxMTAuNiA4LjktODUuNi0yMi4zIDEuNCAyLjktMjcuOSA3NS00LjktMyAyOC0yNC4zIDEuNi05LjcgOTEuOS01OCAzLjctNC4zLTE1LjYtMzkuNCAyLjUtOCAxNi4zLTEyNi4yIDcuN3ptLTQ0LjMtNzAuMmwtMjYuNCAxLjdjLTYuNy0xMi40LTE0LjQtMTYuNi0yNi4zLTE1LjgtMTkgMS4yLTMzLjMgMTcuNS0zNC42IDMzLjMtMS40IDE2IDcuMyAzMi41IDI4LjcgMzEuMiAxMi44LS44IDIxLjMtOC42IDI4LjktMTguOWwyNy0xLjcgMi43LTI5Ljh6bTU2LjEtNy43YzEuMi0xMi45LTcuNi0xMy42LTI2LjEtMTIuNEwxNDUgMzI2LjNjMTQuMi0uOSAyNy41LTIuMSAyOC44LTE2LjF6TTE5NC45IDM4MWw1LjgtNjBjLTUgMTMuNS0xNC43IDIxLjEtMjcuOSAyNi42TDE5NC45IDM4MXptMTM1LjQtNDVsLTcuOS0zNy44LTE1LjggMzkuMyAyMy43LTEuNXpNMTYwLjIgMjYxLjRsLTQuMy0xNy41LTM5LjYgMi42LTguMSAxOC4yLTMxLjkgMi4xIDU3LTEyMS45IDIzLjktMS42IDMwLjcgMTAyIDkuOS0xMDQuNyAyNy0xLjggMzcuOCA2My42IDYuNS02Ni42IDI4LjUtMS45LTQgNDEuMmM3LjQtMTMuNSAyMi45LTQ0LjcgNjMuNi00Ny41IDQwLjUtMi44IDUyLjQgMjkuMyA1My40IDMwLjNsMy4zLTMyIDM5LjMtMi43YzEyLjctLjkgMjcuOCAuMyAzNi4zIDkuN2wtNC40LTExLjkgMzIuMi0yLjIgMTIuOSA0My4yIDIzLTQ1LjcgMzEtMi4yLTQzLjYgNzguNC00LjggNDQuMy0yOC40IDEuOSA0LjgtNDQuMy0xNS44LTQzYzEgMjIuMy05LjIgNDAuMS0zMiA0OS42bDI1LjIgMzguOC0zNi40IDIuNC0xOS4yLTM2LjgtNCAzOC4zLTI4LjQgMS45IDMuMy0zMS41Yy02LjcgOS4zLTE5LjcgMzUuNC01OS42IDM4LTI2LjIgMS43LTQ1LjYtMTAuMy01NS40LTM5LjJsLTQgNDAuMy0yNSAxLjYtMzcuNi02My4zLTYuMyA2Ni4yLTU2LjggMy43em0yNzYuNi04Mi4xYzEwLjItLjcgMTcuNS0yLjEgMjEuNi00LjMgNC41LTIuNCA3LTYuNCA3LjYtMTIuMSAuNi01LjMtLjYtOC44LTMuNC0xMC40LTMuNi0yLjEtMTAuNi0yLjgtMjIuOS0ybC0yLjkgMjguOHpNMzI3LjcgMjE0YzUuNiA1LjkgMTIuNyA4LjUgMjEuMyA3LjkgNC43LS4zIDkuMS0xLjggMTMuMy00LjEgNS41LTMgMTAuNi04IDE1LjEtMTQuM2wtMzQuMiAyLjMgMi40LTIzLjkgNjMuMS00LjMgMS4yLTEyLTMxLjIgMi4xYy00LjEtMy43LTcuOC02LjYtMTEuMS04LjEtNC0xLjctOC4xLTIuOC0xMi4yLTIuNS04IC41LTE1LjMgMy42LTIyIDkuMi03LjcgNi40LTEyIDE0LjUtMTIuOSAyNC40LTEuMSA5LjYgMS40IDE3LjMgNy4yIDIzLjN6bS0yMDEuMyA4LjJsMjMuOC0xLjYtOC4zLTM3LjYtMTUuNSAzOS4yeiJdCiAgICB9OwogICAgZmFNaXp1bmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl6dW5pIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzY2MiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc2IDM1OS45Yy0zMS40IDEwLjYtNTguOCAyNy4zLTgwIDQ4LjJMOTYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMjMuOXpNMjk2IDM1MGMtMTIuOS0yLTI2LjItMy4xLTM5LjgtMy4xLTEzLjggMC0yNy4yIDEuMS00MC4yIDMuMWwwLTIxNGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjE0em0xMjAgNTcuN2MtMjEuMi0yMC44LTQ4LjYtMzcuNC04MC00OEwzMzYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyNzEuN3oiXQogICAgfTsKICAgIGZhSXRjaElvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0Y2gtaW8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzYSIsICJNNzEuOSAzNC44QzUwLjIgNDcuNyA3LjQgOTYuOCA3IDEwOS43bDAgMjEuM2MwIDI3LjEgMjUuMyA1MC44IDQ4LjIgNTAuOCAyNy42IDAgNTAuNS0yMi44IDUwLjUtNTAgMCAyNy4xIDIyLjIgNTAgNDkuOCA1MHM0OS0yMi44IDQ5LTUwYzAgMjcuMSAyMy42IDUwIDUxLjIgNTBsLjUgMGMyNy42IDAgNTEuMi0yMi44IDUxLjItNTAgMCAyNy4xIDIxLjUgNTAgNDkgNTBzNDkuOC0yMi44IDQ5LjgtNTBjMCAyNy4xIDIzIDUwIDUwLjUgNTAgMjMgMCA0OC4zLTIzLjggNDguMy01MC44bDAtMjEuM2MtLjQtMTIuOS00My4yLTYyLjEtNjQuOS03NS02Ny40LTIuMy0xMTQuMi0yLjctMTg0LTIuN1M5MS4xIDMzLjEgNzEuOSAzNC44ek0yMDQuMiAxNjkuMmMtMjIgMzguNC03Ny45IDM4LjctOTkuOCAuMi0xMy4yIDIzLjEtNDMuMiAzMi4xLTU2IDI3LjctMy45IDQwLjItMTMuNyAyMzcuMSAxNy43IDI2OS4yIDgwIDE4LjcgMzAyLjEgMTguMSAzNzkuOCAwIDMxLjYtMzIuMyAyMS4zLTIzMiAxNy43LTI2OS4yLTEyLjkgNC40LTQyLjktNC42LTU2LTI3LjctMjIgMzguNS03Ny44IDM4LjEtOTkuOC0uMi03LjEgMTIuNS0yMyAyOC45LTUxLjggMjguOS0xMC40IC4zLTIwLjgtMi4yLTI5LjktNy4zcy0xNi43LTEyLjYtMjEuOS0yMS42bDAgMHptLTQxLjYgNTMuOGMxNi41IDAgMzEuMSAwIDQ5LjIgMTkuOCAyOS4zLTMgNTguOS0zIDg4LjIgMCAxOC4yLTE5LjcgMzIuOC0xOS43IDQ5LjItMTkuNyA1Mi4zIDAgNjUuMiA3Ny41IDgzLjkgMTQ0LjQgMTcuMyA2Mi4yLTUuNSA2My43LTM0IDYzLjctNDIuMS0xLjYtNjUuNS0zMi4yLTY1LjUtNjIuOC0zOS4zIDYuNC0xMDEuOSA4LjgtMTU1LjYgMCAwIDMwLjYtMjMuMyA2MS4yLTY1LjUgNjIuOC0yOC40LS4xLTUxLjItMS42LTMzLjktNjMuNyAxOC43LTY3IDMxLjYtMTQ0LjQgODMuOS0xNDQuNGwwLS4xek0yNTYgMjcwLjhzLTQ0LjQgNDAuOC01Mi40IDU1LjJsMjktMS4yIDAgMjUuM2MwIDEuNSAyMS4zIC4yIDIzLjMgLjIgMTEuNiAuNSAyMy4zIDEgMjMuMy0uMmwwLTI1LjMgMjkgMS4yYy04LTE0LjUtNTIuNC01NS4yLTUyLjQtNTUuMmwuMSAweiJdCiAgICB9OwogICAgZmFXaW5kb3dzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpbmRvd3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YSIsICJNMCA5My43bDE4My42LTI1LjMgMCAxNzcuNC0xODMuNiAwIDAtMTUyLjF6TTAgNDE4LjNsMTgzLjYgMjUuMyAwLTE3NS4yLTE4My42IDAgMCAxNDkuOXptMjAzLjggMjhsMjQ0LjIgMzMuNyAwLTIxMS42LTI0NC4yIDAgMCAxNzcuOXptMC0zODAuNmwwIDE4MC4xIDI0NC4yIDAgMC0yMTMuOC0yNDQuMiAzMy43eiJdCiAgICB9OwogICAgZmFTdHVtYmxldXBvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVtYmxldXBvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWE0IiwgIk01MDIuOSAyNjZsMCA2OS43YzAgNjIuMS01MC4zIDExMi40LTExMi40IDExMi40LTYxLjggMC0xMTIuNC00OS44LTExMi40LTExMS4zbDAtNzAuMiAzNC4zIDE2IDUxLjEtMTUuMiAwIDcwLjZjMCAxNC43IDEyIDI2LjUgMjYuNyAyNi41UzQxNyAzNTIuNyA0MTcgMzM4bDAtNzIgODUuOSAwek0yNzguMiAyMDcuOGwzNC4zIDE2IDUxLjEtMTUuMiAwLTM1LjZjMC02MC41LTUxLjEtMTA5LTExMi4xLTEwOS02MC44IDAtMTEyLjEgNDguMi0xMTIuMSAxMDguMmwwIDE2Mi40YzAgMTQuOS0xMiAyNi43LTI2LjcgMjYuN1M4NiAzNDkuNSA4NiAzMzQuNmwwLTY4LjYtODYgMCAwIDY5LjdjMCA2MiA1MC4zIDExMi4zIDExMi40IDExMi4zIDYxLjYgMCAxMTIuNC00OS41IDExMi40LTExMC44bDAtMTYwLjNjMC0xNC43IDEyLTI2LjcgMjYuNy0yNi43czI2LjcgMTIgMjYuNyAyNi43bDAgMzAuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWEwIiwgIk01MDAgMjYxLjhDNTAwIDQwMy4zIDQwMy4xIDUwNCAyNjAgNTA0IDEyMi44IDUwNCAxMiAzOTMuMiAxMiAyNTZTMTIyLjggOCAyNjAgOGM2Ni44IDAgMTIzIDI0LjUgMTY2LjMgNjQuOWwtNjcuNSA2NC45Yy04OC4zLTg1LjItMjUyLjUtMjEuMi0yNTIuNSAxMTguMiAwIDg2LjUgNjkuMSAxNTYuNiAxNTMuNyAxNTYuNiA5OC4yIDAgMTM1LTcwLjQgMTQwLjgtMTA2LjlsLTE0MC44IDAgMC04NS4zIDIzNi4xIDBjMi4zIDEyLjcgMy45IDI0LjkgMy45IDQxLjR6Il0KICAgIH07CiAgICBmYURpc2NvcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzY29yZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzkyIiwgIk00OTIuNSA2OS44Yy0uMi0uMy0uNC0uNi0uOC0uNy0zOC4xLTE3LjUtNzguNC0zMC0xMTkuNy0zNy4xLS40LS4xLS44IDAtMS4xIC4xcy0uNiAuNC0uOCAuOGMtNS41IDkuOS0xMC41IDIwLjItMTQuOSAzMC42LTQ0LjYtNi44LTg5LjktNi44LTEzNC40IDAtNC41LTEwLjUtOS41LTIwLjctMTUuMS0zMC42LS4yLS4zLS41LS42LS44LS44cy0uNy0uMi0xLjEtLjJjLTQxLjMgNy4xLTgxLjYgMTkuNi0xMTkuNyAzNy4xLS4zIC4xLS42IC40LS44IC43LTc2LjIgMTEzLjgtOTcuMSAyMjQuOS04Ni45IDMzNC41IDAgLjMgLjEgLjUgLjIgLjhzLjMgLjQgLjUgLjZjNDQuNCAzMi45IDk0IDU4IDE0Ni44IDc0LjIgLjQgLjEgLjggLjEgMS4xIDBzLjctLjQgLjktLjdjMTEuMy0xNS40IDIxLjQtMzEuOCAzMC00OC44IC4xLS4yIC4yLS41IC4yLS44czAtLjUtLjEtLjgtLjItLjUtLjQtLjYtLjQtLjMtLjctLjRjLTE1LjgtNi4xLTMxLjItMTMuNC00NS45LTIxLjktLjMtLjItLjUtLjQtLjctLjZzLS4zLS42LS4zLS45IDAtLjYgLjItLjkgLjMtLjUgLjYtLjdjMy4xLTIuMyA2LjItNC43IDkuMS03LjEgLjMtLjIgLjYtLjQgLjktLjRzLjcgMCAxIC4xYzk2LjIgNDMuOSAyMDAuNCA0My45IDI5NS41IDAgLjMtLjEgLjctLjIgMS0uMnMuNyAuMiAuOSAuNGMyLjkgMi40IDYgNC45IDkuMSA3LjIgLjIgLjIgLjQgLjQgLjYgLjdzLjIgLjYgLjIgLjktLjEgLjYtLjMgLjktLjQgLjUtLjYgLjZjLTE0LjcgOC42LTMwIDE1LjktNDUuOSAyMS44LS4yIC4xLS41IC4yLS43IC40cy0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOCAuMSAuNSAuMiAuOGM4LjggMTcgMTguOCAzMy4zIDMwIDQ4LjggLjIgLjMgLjYgLjYgLjkgLjdzLjggLjEgMS4xIDBjNTIuOS0xNi4yIDEwMi42LTQxLjMgMTQ3LjEtNzQuMiAuMi0uMiAuNC0uNCAuNS0uNnMuMi0uNSAuMi0uOGMxMi4zLTEyNi44LTIwLjUtMjM2LjktODYuOS0zMzQuNXptLTMwMiAyNjcuN2MtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjQgNTkuMi01Mi44IDU5LjJ6bTE5NS40IDBjLTI5IDAtNTIuOC0yNi42LTUyLjgtNTkuMnMyMy40LTU5LjIgNTIuOC01OS4yYzI5LjcgMCA1My4zIDI2LjggNTIuOCA1OS4yIDAgMzIuNy0yMy4yIDU5LjItNTIuOCA1OS4yeiJdCiAgICB9OwogICAgZmFIYWNrZXJOZXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhhY2tlci1uZXdzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZDQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTIxLjIgMjI5LjJsLS4yIDBjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40em0yMTggNTMuOWwwIDEwMC45LTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzUyLjUgOTguMyA0OS4yIDEwMS4yIDU5LjMgMTI1LjYgMTIuMy0yNyA1LjgtMjQuNCA2MC42LTEyNS42bDM0LjggMC04MC44IDE1NS4xeiJdCiAgICB9OwogICAgZmFFbGV2ZW50eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2ZW50eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyIxMXR5Il0sICJlN2Q2IiwgIk02MTUuMyAxNjguNWMyLjMgMCA0LjYgLjcgNi42IDIuMiAxLjkgMS40IDMuMSAzLjMgMy44IDUgMS40IDMuMyAxLjggNy4zIDEuOCAxMS4zIDAgMi4yLS4zIDQuOS0uNyA3LjZsMCAuNC01MC45IDI2NC45IDAgMGMtNCAyMi4xLTguNSAzOS40LTEzLjYgNTEuNy01IDEyLjEtMTAuOSAyMS42LTE4LjYgMjdsMCAwYy03LjUgNS4zLTE2LjkgNy43LTI3LjYgOGwtMyAwYy0xNiAwLTI5LjMtNC4yLTM2LjktMTQuOC0uMS0uMS0uMS0uMS0uMi0uMi0uMS0uMi0uMy0uNC0uNS0uNmwwIDBjLTEuOC0yLjQtMi41LTUuMi0yLjktNy40LS41LTIuOC0uNy02LjEtLjctOS44IDAtNy4zIC42LTEzLjUgMi4xLTE4LjIgMS40LTQuNCA0LjgtMTAuNCAxMi4yLTEwLjRsMS4zIC4xYy4yIDAgLjQgLjEgLjUgLjEgLjMgLjEgLjYgLjEgLjggLjIgLjYgLjEgMS4zIC4zIDIuMiAuNmw3LjYgMi4yIC4xIDAgNy42IDIuMWMuOSAuMiAxLjcgLjQgMi4yIC41IC40IC4xIC42IC4xIC43IC4xIDAgMCAuMSAwIC4yLS4xIC4xLS4xIC40LS4yIC44LS42IC45LS45IDIuMi0yLjYgMy42LTUuNyAyLjYtNS44IDQuMi0xNC43IDQuMi0yNy40IDAtLjctLjMtMy40LTEuMy04LjktLjktNS4xLTIuMy0xMi4yLTQuMi0yMS4xbC01Ni0yMzIuOS0uMS0uNCAwLS4zYy0uNC0yLjctLjctNS4zLS43LTcuMyAwLTMuNyAuNC03LjUgMS43LTEwLjYgLjctMS42IDEuOC0zLjQgMy41LTQuOSAxLjktMS41IDQuMi0yLjMgNi41LTIuM2wzNC42IDBjNC42IDAgOC43IDEuNyAxMS45IDVsMS4zIDEuNWMxLjIgMS42IDIgMy40IDIuNyA1LjIgLjkgMi40IDEuNSA1LjEgMiA4LjFsMzAuNCAxNjEuMiAyMy44LTE2MGMuOC01LjggMi4yLTExLjQgNS4xLTE1LjEgMy0zLjggNy4yLTUuOCAxMi01LjhsMjQgMHpNMzc1LjEgMzQuNmMyLjYgMCA1LjEgLjcgNy40IDIuMyAyLjIgMS41IDMuNyAzLjYgNC43IDUuNyAxLjkgNCAyLjUgOS4xIDIuNSAxNC41bDAgMTExLjJjMCAuMSAwIC4yIDAgLjNsMzIuNCAwYzIuNSAwIDUgLjYgNy4yIDIuMSAyLjIgMS40IDMuNyAzLjQgNC44IDUuNSAyIDMuOSAyLjYgOC44IDIuNiAxMy45bDAgMTUuNGMwIDUtLjYgOS44LTIuNiAxMy43LTEuMSAyLTIuNiA0LTQuOCA1LjQtMi4yIDEuNC00LjcgMi03LjEgMmwtMzIuNSAwIDAgMTQ1LjhjMCAxMC44IC43IDE5LjUgMiAyNi4yIDEuNCA2LjkgMy4xIDEwLjkgNC43IDEyLjkgMS4yIDEuNSAyLjIgMi41IDMuMSAzLjJsMi4yIDEuNCAuMSAuMSAyLjkgLjhjMS4yIC4yIDIuNiAuMyA0LjMgLjNsMjAuMyAwYzQuNSAwIDguOSAxLjcgMTEuOCA1LjggMi42IDMuNiAzLjMgOC4xIDMuMyAxMi4ybDAgMTcuMmMwIDQuNS0uOCA5LjMtMy40IDEzLjEtMyA0LjItNy41IDYtMTIuMyA2bDAgMC0yOS4xIC4xYy04IDAtMTUtLjYtMjEuMi0xLjctNi43LTEuMy0xMy40LTQuMS0yMC4xLTguMS03LjItNC40LTEzLTEwLjMtMTcuNS0xNy44LTQuNS03LjUtNy45LTE3LjUtMTAuNS0yOS41LTIuNi0xMi4yLTMuOS0yNi42LTMuOS00M2wwLTE0NC45LTEzLjQgMGMtMi40IDAtNC45LS42LTcuMS0yLTIuMi0xLjQtMy43LTMuNC00LjgtNS40LTItMy45LTIuNi04LjctMi42LTEzLjdsMC0xNS40YzAtNS4xIC42LTEwIDIuNi0xMy45IDEuMS0yLjEgMi42LTQgNC44LTUuNSAyLjItMS41IDQuNy0yLjEgNy4yLTIuMWwxMy40IDAgMC0uNiA1LjItMTExLjIgMC0uMSAuMy0zLjljLjUtMy44IDEuMy03LjQgMi43LTEwLjMgMi4xLTQuMiA2LTcuOSAxMS44LTcuOWwyOC42IDB6bS0yNjggMTEuN2MxLjggLjMgMy42IC45IDUuMyAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjMgOC40IDIuMyAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEgMCAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMyAwLS40IDAtLjEgMC0uMiAwLS4yIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguNC0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguOCAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS41LTE5LjVjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xem0xNDMuOC0uNWMxLjggLjMgMy42IC45IDUuMiAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjIgOC40IDIuMiAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4yIDAtLjQgMGwwIDBjLS4xIDAtLjIgMC0uMyAwLS4xIDAtLjIgMC0uMyAwLTIuMiAuMS00LjUtLjQtNi42LTEuNy0yLjMtMS40LTMuOC0zLjQtNC43LTUuMy0xLjgtMy43LTIuMy04LjMtMi4zLTEzbDAtMjcuNGMwLTQuNCAuNy04LjcgMi42LTEyLjQgMi4xLTMuOSA1LjUtNi42IDkuOC03LjZsNzUuNC0xOS40YzEuNC0uNCAyLjktLjUgNC40LS41bDEuOCAuMXoiXQogICAgfTsKICAgIGZhMTF0eSA9IGZhRWxldmVudHk7CiAgICBmYVRlYW1zcGVhayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWFtc3BlYWsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmOSIsICJNMTUyLjggMzcuMmMtMzIuMiAzOC4xLTU2LjEgODIuNi02OS45IDEzMC41IDAgLjItLjEgLjMtLjEgLjUtMzkuMyAxNi4yLTY2LjggNTQuOC02Ni44IDk5LjggMCA1OS42IDQ4LjQgMTA4IDEwOCAxMDhzMTA4LTQ4LjQgMTA4LTEwOGMwLTUzLjUtMzguOS05Ny45LTkwLTEwNi41IDE1LjctNDEuOCA0MC40LTc5LjYgNzIuMy0xMTAuNyAxLjgtMS42IDQtMi42IDYuMy0zLjEgMzcuMi0xMS41IDc2LjctMTMuMyAxMTQuOC01LjIgMTE5LjMgMjUuMSAxOTguNiAxMzguMiAxODEuNyAyNTguOC04LjQgNjIuNi0zOC42IDExMi43LTg3LjcgMTUxLjQtNTAuMSAzOS43LTEwNy41IDU0LjMtMTcwLjIgNTIuMmwtMjQtMWMxMi40IDIuOCAyNSA0LjkgMzcuNiA2LjMgNDAuNyA0LjIgODEuNCAyLjEgMTIwLjEtMTIuNSA5NC0zNS41IDE0OS4zLTEwMi4zIDE2Mi45LTIwMi41IDQuOC01Mi42LTUuOC0xMDUuNC0zMC44LTE1Mi03MC40LTEzMS45LTIzNC4yLTE4MS42LTM2Ni0xMTEuMi0yLjQgMS40LTQuNSAzLjEtNi4zIDUuMmwuMSAwek0zMDkuNCA0MzMuOWMtMi4xIDExLjUtNC4yIDIxLjktMTQuNiAzMS4zIDUzLjItMSAxMjMuMi0yOS4yIDE2MS44LTk3LjEgMzkuNy02OS45IDM3LjYtMTM5LjktNi4zLTIwNy44LTM2LjUtNTUuMy04OS44LTgyLjQtMTU2LjYtODYuNiAxLjUgMi4zIDMuMiA0LjQgNS4yIDYuM2w1LjIgNi4zYzI1LjEgMzEuMyAzNy42IDY3LjkgNDIuOCAxMDcuNSAyLjEgMTUuNy0xIDMwLjMtMTMuNiA0MS44LTQuMiAzLjEtNS4yIDYuMy00LjIgMTAuNGw3LjMgMTcuNyAyOS4zIDU0LjNjNS4yIDExLjUgNC4yIDE5LjgtNi4zIDI4LjItMy4yIDIuNS02LjcgNC42LTEwLjQgNi4zbC0xOC44IDguNCAzLjEgMTMuNmMzLjEgNi4zIDEgMTIuNS0zLjEgMTcuNy0yLjUgMi40LTMuOCA1LjktMy4xIDkuNCAyLjEgMTEuNS0yLjEgMTkuOC0xMi41IDI1LjEtMi4xIDEtNC4yIDUuMi01LjIgNy4zbDAtLjF6bS0xMzMuNi0zLjFjMTYuNyAxMS41IDM0LjUgMjAuOSA1My4yIDI2LjEgMjQgNS4yIDQxLjgtNi4zIDQ0LjktMzAuMyAxLTguNCA1LjItMTQuNiAxMi41LTE3LjcgNy4zLTQuMiA4LjQtNy4zIDIuMS0xMy42bC05LjQtOC40IDEzLjYtNC4yYzYuMy0yLjEgNy4zLTUuMiA1LjItMTEuNS0xLjQtMy0yLjQtNi4yLTMuMS05LjQtMy4xLTE0LjYtMi4xLTE1LjcgMTEuNS0xOC44IDguNC0zLjEgMTUuNy02LjMgMjEuOS0xMi41IDMuMS0yLjEgMy4xLTQuMiAxLTguNGwtMTYuNy0zMC4zYy0xLTEuOS0yLjEtMy44LTMuMS01LjctNi40LTExLjctMTMtMjMuNi0xNS43LTM3LjEtMi4xLTkuNC0xLTE3LjcgOC40LTI0IDUuMi00LjIgOC40LTkuNCA4LjQtMTYuNy0uNC0xMC4xLTEuNS0yMC4zLTMuMS0zMC4zLTYuMy0zNy42LTIzLTY4LjktNTEuMi05NS01LjItNC4yLTkuNC02LjMtMTYuNy00LjJsLTM1LjYgMTIuNyA2IDMuNmM2LjMgMy43IDEyLjIgNy4zIDE3IDEyLjEgMzAuMyAyNi4xIDQxLjggNjEuNiA0NS45IDEwMC4yIDEgOC40IDAgMTYuNy03LjMgMjEuOS04LjQgNS4yLTEwLjQgMTIuNS03LjMgMjAuOSA0LjkgMTMuMiAxMC40IDI2IDE2LjcgMzguNkwyOTEuNiAzMThjLTYuMyA4LjQtMTMuNiAxMS41LTIxLjkgMTQuNi0xMi41IDMuMS0xNC42IDcuMy0xMC40IDIwLjkgLjYgMS41IDEuNCAyLjggMi4xIDQuMiAyLjEgNS4yIDEgOC40LTQuMiAxMC40bC0xMi41IDMuMSA1LjIgNC4yIDQuMiA0LjJjNC4yIDUuMiA0LjIgOC40LTIuMSAxMC40LTcuMyA0LjItMTEuNSA5LjQtMTEuNSAxNy43IDAgMTIuNS03LjMgMTkuOC0xOC44IDI0LTMuOCAxLTcuNiAxLjUtMTEuNSAxbC0zNC41LTIuMSAuMSAuMnoiXQogICAgfTsKICAgIGZhU3VwcGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cHBsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Y5IiwgIk02NDAgMjYyLjVjMCA2NC4xLTEwOSAxMTYuMS0yNDMuNSAxMTYuMS0yNC44IDAtNDguNi0xLjgtNzEuMS01IDcuNyAuNCAxNS41IC42IDIzLjQgLjYgMTM0LjUgMCAyNDMuNS01Ni45IDI0My41LTEyNy4xIDAtMjkuNC0xOS4xLTU2LjQtNTEuMi03OCA2MCAyMS4xIDk4LjkgNTUuMSA5OC45IDkzLjR6TTQ3LjcgMjI3LjljLS4xLTcwLjIgMTA4LjgtMTI3LjMgMjQzLjMtMTI3LjYgNy45IDAgMTUuNiAuMiAyMy4zIC41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOS0xMzQuNSAuNC0yNDMuNCA1Mi42LTI0My4zIDExNi43IC4xIDM4LjMgMzkuMSA3Mi4zIDk5LjMgOTMuMy0zMi4zLTIxLjUtNTEuNS00OC42LTUxLjYtNzh6bTYwLjIgMzkuOVMxMTguNCAyODEgMTM3LjIgMjgxYzE3LjkgMCAyOC40LTExLjUgMjguNC0yNS4xIDAtMjgtNDAuMi0yNS4xLTQwLjItMzkuNyAwLTUuNCA1LjMtOS4xIDEyLjUtOS4xIDUuNyAwIDExLjMgMi42IDExLjMgNi42bDAgMy45IDE0LjIgMCAwLTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42bDAgNTQuNGMwIDExLjMtNy4xIDE3LjgtMTcuOCAxNy44cy0xNy44LTYuNS0xNy44LTE3LjdsMC01NC41LTE1LjggMCAwIDU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOWwwLTU1LTE1LjcgMHptMzQuNCA4NS40bDE1LjggMCAwLTI5LjUgMTUuNSAwYzE2IDAgMjcuMi0xMS41IDI3LjItMjguMXMtMTEuMi0yNy44LTI3LjItMjcuOGwtMzkuMSAwIDAgMTMuNCA3LjggMCAwIDcyem0xNS44LTQzbDAtMjkuMSAxMi45IDBjOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcgNDNsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjctNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcuMSAzNC44YzAgNS44IDIuNCA4LjIgOC4yIDguMmwzNy42IDBjNS44IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE4LjYgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTYxLjJjMC01LjctMi40LTguMi04LjItOC4ybC0xNS40IDAgMCAxMy40IDUuMiAwYzEuNyAwIDIuNiAxIDIuNiAyLjZsMCA2MS4yLS4xIDB6bTYzLjQgMGMwIDUuOCAyLjQgOC4yIDguMiA4LjJsMzguNyAwYzUuNyAwIDguMi0yLjQgOC4yLTguMmwwLTEzLTE0LjMgMCAwIDUuMmMwIDEuNy0xIDIuNi0yLjYgMi42bC0xOS43IDBjLTEuNyAwLTIuNi0xLTIuNi0yLjZsMC0yMC4zIDI3LjcgMCAwLTEzLjQtMjcuNyAwIDAtMjIuNCAxOS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDUuMiAxNC4yIDAgMC0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJsLTUxLjYgMCAwIDEzLjQgNy44IDAgMCA2My45IC4xIDB6bTU4LjktNzZsMCA1LjkgMS42IDAgMC01LjkgMi43IDAgMC0xLjItNyAwIDAgMS4yIDIuNyAwem01LjctMS4ybDAgNy4xIDEuNSAwIDAtNS43IDIuMyA1LjcgMS4zIDAgMi4zLTUuNyAwIDUuNyAxLjUgMCAwLTcuMS0yLjMgMC0yLjEgNS4xLTIuMS01LjEtMi40IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHdpdHRlci1zcXVhcmUiXSwgImYwODEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM1MS4zIDE5OS4zYzAgODYuNy02NiAxODYuNi0xODYuNiAxODYuNi0zNy4yIDAtNzEuNy0xMC44LTEwMC43LTI5LjQgNS4zIC42IDEwLjQgLjggMTUuOCAuOCAzMC43IDAgNTguOS0xMC40IDgxLjQtMjgtMjguOC0uNi01My0xOS41LTYxLjMtNDUuNSAxMC4xIDEuNSAxOS4yIDEuNSAyOS42LTEuMi0zMC02LjEtNTIuNS0zMi41LTUyLjUtNjQuNGwwLS44YzguNyA0LjkgMTguOSA3LjkgMjkuNiA4LjMtOS02LTE2LjQtMTQuMS0yMS41LTIzLjZzLTcuOC0yMC4yLTcuNy0zMWMwLTEyLjIgMy4yLTIzLjQgOC45LTMzLjEgMzIuMyAzOS44IDgwLjggNjUuOCAxMzUuMiA2OC42LTkuMy00NC41IDI0LTgwLjYgNjQtODAuNiAxOC45IDAgMzUuOSA3LjkgNDcuOSAyMC43IDE0LjgtMi44IDI5LTguMyA0MS42LTE1LjgtNC45IDE1LjItMTUuMiAyOC0yOC44IDM2LjEgMTMuMi0xLjQgMjYtNS4xIDM3LjgtMTAuMi04LjkgMTMuMS0yMC4xIDI0LjctMzIuOSAzNCAuMiAyLjggLjIgNS43IC4yIDguNXoiXQogICAgfTsKICAgIGZhVHdpdHRlclNxdWFyZSA9IGZhU3F1YXJlVHdpdHRlcjsKICAgIGZhVmltID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODhhIiwgIk0zMDMuMyA1NC41bDAtMTIuMyA0LTMuNyA3LjktNy4yIDMuNS0zLjIgMTY4IDAgMTUuMSAxNS4xIDAgMzguOS0zLjUgMy42LTgwLjkgODIuOSA4Ni45IDg2LjktOTEuMiA5MS4yIDguOSAwIDcuNi04LjMgMS0uOWMxLjEtLjggMi41LTEuMiAzLjktMS4ybDI4LjkgMCAxLjUgLjJjMS41IC40IDIuOCAxLjIgMy44IDIuNWw3LjYgMTAuMmMxLjMgMS43IDEuNiAzLjkgMSA1LjlsLTIyLjMgNzIuNSAxLjIgMGMyLjIgMCA0LjIgMS4xIDUuNSAyLjlzMS41IDQuMSAuNyA2LjFMNDU5IDQ0NWMtMSAyLjYtMy40IDQuMi02LjIgNC4ybC00MC40IDBjLTIuMSAwLTQuMS0xLTUuMy0yLjdzLTEuNi0zLjktMS01LjlsMjAtNjMuMi0yMi4yIDAtMTYuMiA1MC43YzIuMSAuMSA0LjEgMS4xIDUuMyAyLjkgMS4yIDEuOCAxLjQgNC4yIC42IDYuMmwtMy4zIDcuOWMtMSAyLjUtMy41IDQuMS02LjEgNC4xbC0zNi44IDBjLTIuMSAwLTQuMS0xLTUuNC0yLjdzLTEuNi0zLjktMS01LjlsMTAtMzIuMS0yMy45IDIzLjhjLjMgMS4yIC4zIDIuNS0uMSAzLjhsLTIuOSA4LjZjLS45IDIuNy0zLjQgNC41LTYuMyA0LjVsLTcuNCAwLTU0LjYgNTQuNi04My44LTgzLjgtMzEuNiAzMi41LTMuNiAzLjctNDkuMiAwLTIuOC0xLjdjLTguOC01LjEtMTQuOC04LjUtMTcuOS0xMC4zbDAtMTI5LjMtNTguNS01OC41IDIuNi0yLjYgNTUuOS01NiAwLTk5LjQtMTIuNiAwLTEwLjgtMTAuOC0zLjYtMy42IDAtNDAuNyAzLjItMy41IDcuOS04LjUgMy43LTMuOSAxNjYuNiAwIDggOCAyNy40LTI3LjQgNDYuNCA0Ni40em0tMjUxLTUuNmwwIDMwLjMgOS40IDcuOCAxOC45IDAgMCAzNDcuOSAxMS40IDEwLjMgMzguMiAwIDkxLTkzYzAtLjQgLjEtLjggLjItMS4xbDIuNi0xMC41Yy43LTIuOSAzLjQtNSA2LjQtNWw3LjEgMCAxNS41LTE1LjktMi0yYy0xLjgtMS44LTIuNC00LjUtMS41LTYuOWw2LjktMTkuM2MuNC0xLjEgMS4xLTIgMS45LTIuOGw2LjktNS45YzEuMi0xIDIuOC0xLjYgNC4zLTEuNmwxOS43IDAgMS4zIC4yYy4xIDAgLjEgLjEgLjIgLjFsMTk5LjItMjAzLjUgMC0yOC43LTguMi03LjQtMTU2LjIgMC03LjggNy44IDAgMzAuNSA4LjIgNy40IDIxIDAtMTQ3IDE0Ni40IDAtMTQ2LjYgMTYuOSAwIDguNy04LjcgMC0yNy43LTcuNC05LjktMTU3LjYgMC04IDh6TTIyNy42IDM1Mi43bDE0LjggMC0zMS44IDkwLjkgNDUuMyAwIDMtOS42LTEyLjUgMCAzMS41LTkxLjktNDcuNiAwLTIuNiAxMC41em0xMzYuOSAxbC0xNi40IDAtMTAuNS0xMC44LTM1LjggMC0zLjMgOS44IDExLjggMC0zMC41IDg5LjkgMzguMSAwIDIuOS04LjYtOC44IDAgMjAtNjMgMzcuOCAwLTIyLjMgNzEuNiAzNi44IDAgMy4zLTcuOS04LjggMCAyMC4zLTY0IDM2LjEgMC0yMi43IDcxLjkgNDAuNCAwIDMuMy04LjYtMTAuMiAwIDI1LTgxLjEtNy41LTEwLjItMjguOSAwLTkuNSAxMC41LTE3LjQgMC05LjktMTAuOC0yMy4zIDAtOS44IDExLjJ6TTI2Mi41IDI5My42bC02LjkgMTkuMyA1LjMgNS4zIDIxLjMgMCA1LjYtNS42IDUuOS0yMC4zLTQuNi00LjYtMTkuNyAwLTYuOSA1Ljl6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNTAxLCA2MjY5NCwgImZvbnQtYXdlc29tZS1mbGFnIiwgImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwgImYyYjQiLCAiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNjQgMCAwLTY0IDM3My42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUZsYWcgPSBmYUZvbnRBd2Vzb21lOwogICAgZmFGb250QXdlc29tZUxvZ29GdWxsID0gZmFGb250QXdlc29tZTsKICAgIGZhV2lyc2luZGhhbmR3ZXJrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpcnNpbmRoYW5kd2VyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ3c2giXSwgImUyZDAiLCAiTTE4LjkgNDc5LjhsODMuNCAwIDAtMTEyLTgzLjQgNDcgMCA2NXptMzI5IDBsODIuNCAwIDAtNjUtODIuNC00NyAwIDExMnptMC00NDhsMCAyMTkuOC0xMjMuNi03Mi40LTEyMS43IDcyLjQgMC0yMTkuOC04My43IDAgMCAzNjAuOCAyMDUuNC0xMjIuMyAyMDYgMTIyLjMgMC0zNjAuOC04Mi4zIDB6Il0KICAgIH07CiAgICBmYVdzaCA9IGZhV2lyc2luZGhhbmR3ZXJrOwogICAgZmFab29tID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInpvb20iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTg3YiIsICJNMTM0LjIgMzI2LjZsLTExNC40IDBjLTggMC0xNS4yLTQuOC0xOC4zLTEyLjJTLjEgMjk4LjYgNS44IDI5Mi45bDc5LjMtNzkuMy01Ni44IDBDMTIuNyAyMTMuNiAwIDIwMSAwIDE4NS40bDEwNS41IDBjOCAwIDE1LjIgNC44IDE4LjMgMTIuMnMxLjQgMTUuOS00LjMgMjEuNmwtNzkuMyA3OS4zIDY1LjcgMGMxNS42IDAgMjguMyAxMi42IDI4LjMgMjguM3pNNjQwIDIzOC4zYzAtMzAuNC0yNC43LTU1LjEtNTUuMS01NS4xLTE2LjIgMC0zMC45IDcuMS00MSAxOC4zLTEwLjEtMTEuMi0yNC43LTE4LjMtNDEtMTguMy0zMC40IDAtNTUuMSAyNC43LTU1LjEgNTUuMWwwIDg4LjNjMTUuNiAwIDI4LjMtMTIuNyAyOC4zLTI4LjNsMC02MGMwLTE0LjggMTItMjYuOCAyNi44LTI2LjhzMjYuOCAxMiAyNi44IDI2LjhsMCA2MGMwIDE1LjYgMTIuNiAyOC4zIDI4LjMgMjguM2wwLTg4LjNjMC0xNC44IDEyLTI2LjggMjYuOC0yNi44czI2LjggMTIgMjYuOCAyNi44bDAgNjBjMCAxNS42IDEyLjYgMjguMyAyOC4zIDI4LjNsMC04OC4zek0yODguMiAyNTZhNzIuOCA3Mi44IDAgMSAxIDE0NS41IDAgNzIuOCA3Mi44IDAgMSAxIC0xNDUuNSAwem0xMTcuMyAwYTQ0LjUgNDQuNSAwIDEgMCAtODkgMCA0NC41IDQ0LjUgMCAxIDAgODkgMHptLTI3NC4xIDBhNzIuOCA3Mi44IDAgMSAxIDE0NS41IDAgNzIuOCA3Mi44IDAgMSAxIC0xNDUuNSAwem0xMTcuMyAwYTQ0LjUgNDQuNSAwIDEgMCAtODkgMCA0NC41IDQ0LjUgMCAxIDAgODkgMHoiXQogICAgfTsKICAgIGZhQ29uZmx1ZW5jZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb25mbHVlbmNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3OGQiLCAiTTIuOCA0MTIuMmMtNC41IDcuNi0yLjEgMTcuNSA1LjUgMjIuMmwxMDUuOSA2NS4yYzcuNyA0LjcgMTcuNyAyLjQgMjIuNC01LjMgMC0uMSAuMS0uMiAuMS0uMiA2Ny4xLTExMi4yIDgwLjUtOTUuOSAyODAuOS0uNyA4LjEgMy45IDE3LjggLjQgMjEuNy03LjcgLjEtLjEgLjEtLjMgLjItLjRsNTAuNC0xMTQuMWMzLjYtOC4xLS4xLTE3LjYtOC4xLTIxLjMtMjIuMi0xMC40LTY2LjItMzEuMi0xMDUuOS01MC4zLTI0Ny45LTEyMC42LTMzMC44IDQ1LjctMzczLjEgMTEyLjZ6TTUxMC4yIDEwMC4xYzQuNS03LjYgMi4xLTE3LjUtNS41LTIyLjJMMzk4LjkgMTIuOGMtNy41LTUtMTcuNi0zLjEtMjIuNiA0LjQtLjIgLjMtLjQgLjYtLjYgMS02Ny4zIDExMi42LTgxLjEgOTUuNi0yODAuNiAuOS04LjEtMy45LTE3LjgtLjQtMjEuNyA3LjctLjEgLjEtLjEgLjMtLjIgLjRMMjIuNyAxNDEuM2MtMy42IDguMSAuMSAxNy42IDguMSAyMS4zIDIyLjIgMTAuNCA2Ni4zIDMxLjIgMTA2IDUwLjQgMjQ4IDEyMCAzMzAuOC00NS40IDM3My40LTExMi45eiJdCiAgICB9OwogICAgZmFEaWdnID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpZ2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhNiIsICJNODEuNyAxNzIuM2wtODEuNyAwIDAgMTc0LjQgMTMyLjcgMCAwLTI1MC43LTUxIDAgMCA3Ni4zem0wIDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6TTM3OC45IDE3Mi4zbDAgMTc0LjQgODEuOCAwIDAgMjguNS04MS44IDAgMCA0MC44IDEzMy4xIDAgMC0yNDMuNy0xMzMuMSAwem04MS44IDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6bS0yMzUuNiA0MWw4Mi4xIDAgMCAyOC41LTgyLjEgMCAwIDQwLjggMTMzLjMgMCAwLTI0My43LTEzMy4zIDAgMCAxNzQuNHptNTEuMi0xMzMuM2wzMC44IDAgMCA5Mi4zLTMwLjggMCAwLTkyLjN6TTE1My4zIDk2bDUxLjMgMCAwIDUxLTUxLjMgMCAwLTUxem0wIDc2LjNsNTEuMyAwIDAgMTc0LjQtNTEuMyAwIDAtMTc0LjR6Il0KICAgIH07CiAgICBmYVRocmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE4IiwgIk0zMzEuNSAyMzUuN2MyLjIgLjkgNC4yIDEuOSA2LjMgMi44IDI5LjIgMTQuMSA1MC42IDM1LjIgNjEuOCA2MS40IDE1LjcgMzYuNSAxNy4yIDk1LjgtMzAuMyAxNDMuMi0zNi4yIDM2LjItODAuMyA1Mi41LTE0Mi42IDUzbC0uMyAwYy03MC4yLS41LTEyNC4xLTI0LjEtMTYwLjQtNzAuMi0zMi4zLTQxLTQ4LjktOTguMS00OS41LTE2OS42bDAtLjVDMTcgMTg0LjMgMzMuNiAxMjcuMiA2NS45IDg2LjIgMTAyLjIgNDAuMSAxNTYuMiAxNi41IDIyNi40IDE2bC4zIDBjNzAuMyAuNSAxMjQuOSAyNCAxNjIuMyA2OS45IDE4LjQgMjIuNyAzMiA1MCA0MC42IDgxLjdsLTQwLjQgMTAuOGMtNy4xLTI1LjgtMTcuOC00Ny44LTMyLjItNjUuNC0yOS4yLTM1LjgtNzMtNTQuMi0xMzAuNS01NC42LTU3IC41LTEwMC4xIDE4LjgtMTI4LjIgNTQuNC0yNi4yIDMzLjMtMzkuOCA4MS41LTQwLjMgMTQzLjIgLjUgNjEuNyAxNC4xIDEwOS45IDQwLjMgMTQzLjMgMjggMzUuNiA3MS4yIDUzLjkgMTI4LjIgNTQuNCA1MS40LS40IDg1LjQtMTIuNiAxMTMuNy00MC45IDMyLjMtMzIuMiAzMS43LTcxLjggMjEuNC05NS45LTYuMS0xNC4yLTE3LjEtMjYtMzEuOS0zNC45LTMuNyAyNi45LTExLjggNDguMy0yNC43IDY0LjgtMTcuMSAyMS44LTQxLjQgMzMuNi03Mi43IDM1LjMtMjMuNiAxLjMtNDYuMy00LjQtNjMuOS0xNi0yMC44LTEzLjgtMzMtMzQuOC0zNC4zLTU5LjMtMi41LTQ4LjMgMzUuNy04MyA5NS4yLTg2LjQgMjEuMS0xLjIgNDAuOS0uMyA1OS4yIDIuOC0yLjQtMTQuOC03LjMtMjYuNi0xNC42LTM1LjItMTAtMTEuNy0yNS42LTE3LjctNDYuMi0xNy44bC0uNyAwYy0xNi42IDAtMzkgNC42LTUzLjMgMjYuM2wtMzQuNC0yMy42YzE5LjItMjkuMSA1MC4zLTQ1LjEgODcuOC00NS4xbC44IDBjNjIuNiAuNCA5OS45IDM5LjUgMTAzLjcgMTA3LjdsLS4yIC4yIC4xIDB6bS0xNTYgNjguOGMxLjMgMjUuMSAyOC40IDM2LjggNTQuNiAzNS4zIDI1LjYtMS40IDU0LjYtMTEuNCA1OS41LTczLjItMTMuMi0yLjktMjcuOC00LjQtNDMuNC00LjQtNC44IDAtOS42IC4xLTE0LjQgLjQtNDIuOSAyLjQtNTcuMiAyMy4yLTU2LjIgNDEuOGwtLjEgLjF6Il0KICAgIH07CiAgICBmYVdwcmVzc3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3ByZXNzciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW5kYWN0Il0sICJmM2U0IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQyNy4zIDE2Ni42Yy0xNS4yIDM0LjUtMzAuNCA2OS00NS42IDEwMy41LTIuNCA1LjUtNi45IDguMi0xMyA4LjItMjMgMC00NiAuMS02OSAwLTUuMSAwLTguMiAxLjktMTAuMyA2LjctMTAuMiAyMy42LTIwLjYgNDctMzEgNzAuNS0xLjUgMy41LTQuMSA1LjMtNy45IDUuMy00NS45IDAtOTEuOSAwLTEzNy44IDAtMy4xIDAtNS42LTEuMS03LjctMy40LTExLjItMTIuMy0yMi41LTI0LjYtMzMuNy0zNi45LTIuNy0zLTIuOC02LjItMS4yLTkuNyA4LjctMTkuNSAxNy4zLTM5LjEgMjUuOS01OC43IDEyLjktMjkuNCAyNS45LTU4LjcgMzguNy04OC4xIDEuNy0zLjkgNC4zLTUuNyA4LjUtNS43IDE0LjIgLjEgMjguNSAwIDQyLjcgMCA2LjIgMCA5LjIgNC44IDYuNyAxMC42LTEzLjYgMzAuOC0yNy4yIDYxLjYtNDAuNyA5Mi4zLTUuNyAxMy0xMS40IDI2LTE3LjEgMzktMy45IDkgNy4xIDEyIDExIDUuNiAuMi0uNC0xLjQgNC4yIDMwLTY3LjcgMS40LTMuMSAzLjQtNC40IDYuOC00LjQgMTUuMiAuMSAzMC40IDAgNDUuNiAwIDUuNiAwIDcuOSAzLjYgNS43IDguNy04LjMgMTktMTYuNyAzNy45LTI1IDU2LjktNSAxMS40IDguMSAxMi41IDExLjMgNS4zIDAtLjEgMjcuOS02My4zIDMyLjItNzMuMiAyLTQuNiA1LjQtNi41IDEwLjMtNi41IDI2LjQgLjEgNTIuOSAwIDc5LjMgMCAxMi40IDAgMTMuOS0xMy42IDMuOS0xMy42LTI1LjMgMC01MC41IDAtNzUuOCAwLTYuMyAwLTcuOC0yLjUtNS4zLTguMyA1LjgtMTMuMSAxMS42LTI2LjEgMTcuMy0zOS4yIDEuNy00IDQuNS01LjggOC44LTUuOCAyMy4xIC4xIDI2IDAgMTMwLjggMCA2LjEgMCA4IDIuOCA1LjYgOC4zeiJdCiAgICB9OwogICAgZmFSZW5kYWN0ID0gZmFXcHJlc3NyOwogICAgZmFZb2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5b2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmIxIiwgIk05MS4zIDc2bDE4NiAwLTcgMTguOS0xNzkgMGMtMzkuNyAwLTcxLjkgMzEuNi03MS45IDcwLjNsMCAyMDUuNGMwIDM1LjQgMjQuOSA3MC4zIDg0IDcwLjNsMCAxOS4xLTEyLjEgMEM0MS4yIDQ2MCAwIDQxOS44IDAgMzcwLjVMMCAxNjUuMkMwIDExNS45IDQwLjcgNzYgOTEuMyA3NnpNMzIwLjQgMjBsNjYuNSAwYy0xNDMuOCAzNzguMS0xNDUuNyAzOTguOS0xODQuNyA0MzkuMy0yMC44IDIxLjYtNDkuMyAzMS43LTc4LjMgMzIuN2wwLTUxLjFjNDkuMi03LjcgNjQuNi00OS45IDY0LjYtNzUuMyAwLTIwLjEgLjYtMTIuNi04Mi4xLTIyMy4ybDYxLjQgMCA1MC40IDE1Ni42IDEwMi4yLTI3OXpNNDQ4IDE2MS41bDAgMjk4LjUtMjE0IDBjNi42LTkuNiAxMC43LTE2LjMgMTIuMS0xOS40bDE4Mi41IDAgMC0yNzkuMWMwLTMyLjUtMTcuMS01MS45LTQ4LjItNjIuOUwzODcuMSA4MWM0MS43IDEzLjYgNjAuOSA0My4xIDYwLjkgODAuNXoiXQogICAgfTsKICAgIGZhTmltYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5pbWJsciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWE4IiwgIk0yNDYuNiAzNTMuM2EyNyAyNyAwIDEgMSAwLTU0IDI3IDI3IDAgMSAxIDAgNTR6bS03OS40LTI3YTI3LjEgMjcuMSAwIDEgMSAtNTQuMyAwIDI3LjEgMjcuMSAwIDEgMSA1NC4zIDB6TTE5MS44IDE1OUMxNTcgMTU5IDg5LjQgMTc4LjggNTkuMiAyMjdMMTQgMCAxNCAzMzUuNUMxNCA0MzMuMSA5My42IDUxMiAxOTEuOCA1MTJTMzY5LjUgNDMzIDM2OS41IDMzNS41IDI5MC4xIDE1OSAxOTEuOCAxNTl6bTAgMzA4LjFjLTczLjMgMC0xMzIuNS01OC45LTEzMi41LTEzMS42czU5LjItMTMxLjYgMTMyLjUtMTMxLjYgMTMyLjUgNTguOSAxMzIuNSAxMzEuNS01OS4zIDEzMS42LTEzMi41IDEzMS42bDAgLjF6Il0KICAgIH07CiAgICBmYVBpeGVsZmVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeGVsZmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZGIiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjM1LjcgMzExLjlsNDcgMGM0NC4yIDAgODAuMS0zNC45IDgwLjEtNzhzLTM1LjktNzgtODAuMS03OGwtNjcuOCAwYy0yNS41IDAtNDYuMiAyMC4xLTQ2LjIgNDVsMCAxNzUuMSA2Ny02NC4xeiJdCiAgICB9OwogICAgZmFZYWhvbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YWhvbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTllIiwgIk0yMjMuOCAxNDEuMWwtNTYuNyAxNDMuMi01Ni0xNDMuMi05Ni4xIDAgMTA1LjggMjQ5LjEtMzguNiA4OS44IDk0LjIgMCAxNDAuOS0zMzguOS05My42IDB6TTMyOS4yIDI3Ni45YTU4LjIgNTguMiAwIDEgMCAwIDExNi40IDU4LjIgNTguMiAwIDEgMCAwLTExNi40ek0zOTQuNyAzMmwtOTMgMjIzLjUgMTA0LjggMCA5Mi42LTIyMy41LTEwNC40IDB6Il0KICAgIH07CiAgICBmYUJsdWVza3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmx1ZXNreSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNjcxIiwgIk00MDcuOCAyOTQuN2MtMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjN6TTI4OCAyMjcuMUMyNjEuOSAxNzYuNCAxOTAuOSA4MS45IDEyNC45IDM1LjMgNjEuNi05LjQgMzcuNS0xLjcgMjEuNiA1LjUgMy4zIDEzLjggMCA0MS45IDAgNTguNFM5LjEgMTk0IDE1IDIxMy45YzE5LjUgNjUuNyA4OS4xIDg3LjkgMTUzLjIgODAuNyAzLjMtLjUgNi42LS45IDEwLTEuNC0zLjMgLjUtNi42IDEtMTAgMS40LTkzLjkgMTQtMTc3LjMgNDguMi02Ny45IDE2OS45IDEyMC4zIDEyNC42IDE2NC44LTI2LjcgMTg3LjctMTAzLjQgMjIuOSA3Ni43IDQ5LjIgMjIyLjUgMTg1LjYgMTAzLjQgMTAyLjQtMTAzLjQgMjguMS0xNTYtNjUuOC0xNjkuOS0zLjMtLjQtNi43LS44LTEwLTEuMyAzLjQgLjQgNi43IC45IDEwIDEuMyA2NC4xIDcuMSAxMzMuNi0xNS4xIDE1My4yLTgwLjcgNS45LTE5LjkgMTUtMTM4LjkgMTUtMTU1LjVzLTMuMy00NC43LTIxLjYtNTIuOWMtMTUuOC03LjEtNDAtMTQuOS0xMDMuMiAyOS44LTY2LjEgNDYuNi0xMzcuMSAxNDEuMS0xNjMuMiAxOTEuOHoiXQogICAgfTsKICAgIGZhU2NyaWJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjcmliZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjhhIiwgIk00Mi42IDI1Mi43Yy0xNi4xLTE5LTI0LjctNDUuOS0yNC44LTc5LjkgMC0xMDAuNCA3NS4yLTE1My4xIDE2Ny4yLTE1My4xIDk4LjYtMS42IDE1Ni44IDQ5IDE4NC4zIDcwLjZsLTUwLjUgNzIuMS0zNy4zLTI0LjYgMjYuOS0zOC42Yy0zNi41LTI0LTc5LjQtMzYuNS0xMjMtMzUuOC01MC43LS44LTExMS43IDI3LjItMTExLjcgNzYuMiAwIDE4LjcgMTEuMiAyMC43IDI4LjYgMTUuNiAyMy4zLTUuMyA0MS45IC42IDU1LjggMTQgMjYuNCAyNC4zIDIzLjIgNjcuNi0uNyA5MS45LTI5LjIgMjkuNS04NS4yIDI3LjMtMTE0LjgtOC40em0zMTcuNyA1LjljLTE1LjUtMTguOC0zOC45LTI5LjQtNjMuMi0yOC42LTM4LjEtMi03MS4xIDI4LTcwLjUgNjcuMi0uNyAxNi44IDYgMzMgMTguNCA0NC4zIDE0LjEgMTMuOSAzMyAxOS43IDU2LjMgMTQuNCAxNy40LTUuMSAyOC42LTMuMSAyOC42IDE1LjYgMCA0LjMtLjUgOC41LTEuNCAxMi43LTE2LjcgNDAuOS01OS41IDY0LjQtMTIxLjQgNjQuNC01MS45IC4yLTEwMi40LTE2LjQtMTQ0LjEtNDcuM2wzMy43LTM5LjQtMzUuNi0yNy40LTYwLjggNzEuOCAxNS40IDEzLjhjNTIuNSA0Ni44IDEyMC40IDcyLjUgMTkwLjcgNzIuMiA1MS40IDAgOTQuNC0xMC41IDEzMy42LTQ0LjEgNTcuMS01MS40IDU0LjItMTQ5LjIgMjAuMy0xODkuNnoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zUGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1wZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgNDQ5LjVjLTEzOS4yIDAtMjM1LjgtMTM4LTE5MC4yLTI2Ny45bDc4LjggMzUuMWMtMi4xIDEwLjUtMy4zIDIxLjUtMy4zIDMyLjkgMCA5OSA3My45IDEyNi45IDEyMC40IDEyNi45IDIyLjkgMCA1My41LTYuNyA3OS40LTI5LjVMMzA1IDMxMS4xYy01LjUgNi4zLTE3LjYgMTYuNy0zNi4zIDE2LjctMzcuOCAwLTUzLjctMzkuOS01My45LTcxLjkgMjMwLjQgMTAyLjYgMjE2LjUgOTYuNSAyMTcuOSA5Ni44LTM0LjMgNjIuNC0xMDAuNiAxMDQuOC0xNzYuNyAxMDQuOHptMTk0LjItMTUwbC0yMjQtMTAwYzE4LjgtMzQgNTQuOS0zMC43IDc0LjctMTFsNDAuNC00MS42Yy0yNy4xLTIzLjMtNTgtMjcuNS03OC4xLTI3LjUtNDcuNCAwLTgwLjkgMjAuNS0xMDAuNyA1MS42TDg3LjYgMTQ1LjZjMzYuMS01NC45IDk4LjEtOTEuMiAxNjguNS05MS4yIDExMS4xIDAgMjAxLjUgOTAuNCAyMDEuNSAyMDEuNSAwIDE4LTIuNCAzNS40LTYuOCA1Mi0uMy0uMS0uNC0uMi0uNi0uNHoiXQogICAgfTsKICAgIGZhRWFybHliaXJkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlYXJseWJpcmRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOWEiLCAiTTMyOS4zIDQ3LjVjMS4yLTEzIDIxLjMtMTQgMzYuNi04LjcgLjkgLjMgMjYuMiA5LjcgMTkgMTUuMi0yNy45LTcuNC01Ni40IDE4LjItNTUuNi02LjV6bS0yMDEgNi45YzMwLjctOC4xIDYyIDIwIDYxLjEtNy4xLTEuMy0xNC4yLTIzLjQtMTUuMy00MC4yLTkuNi0xIC4zLTI4LjcgMTAuNS0yMC45IDE2Ljd6TTMzNS41IDE2MGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6bS0xNTkuNyAwYTE2IDE2IDAgMSAwIDAgMzIgMTYgMTYgMCAxIDAgMC0zMnpNNDk0LjMgMzIzLjJjLTkuOSAyNC00MC43IDExLTYzLjktMS4yLTEzLjUgNjkuMS01OC4xIDExMS40LTEyNi4zIDEyNC4yIC4zIC45LTItLjEgMjQgMSAzMy42IDEuNCA2My44LTMuMSA5Ny40LTgtMTkuOC0xMy44LTExLjQtMzcuMS05LjgtMzguMSAxLjQtLjkgMTQuNyAxLjcgMjEuNiAxMS41IDguNi0xMi41IDI4LjQtMTQuOCAzMC4yLTEzLjYgMS42IDEuMSA2LjYgMjAuOS02LjkgMzQuNiA0LjctLjkgOC4yLTEuNiA5LjgtMi4xIDIuNi0uOCAxNy43IDExLjMgMy4xIDEzLjMtMTQuMyAyLjMtMjIuNiA1LjEtNDcuMSAxMC44LTQ1LjkgMTAuNy04NS45IDExLjgtMTE3LjcgMTIuOGwxIDExLjZjMy44IDE4LjEtMjMuNCAyNC4zLTI3LjYgNi4yIC44IDE3LjktMjcuMSAyMS44LTI4LjQtMWwtLjUgNS4zYy0uNyAxOC40LTI4LjQgMTcuOS0yOC4zLS42LTcuNSAxMy41LTI4LjEgNi44LTI2LjQtOC41bDEuMi0xMi40Yy0zNi43IC45LTU5LjcgMy4xLTYxLjggMy4xLTIwLjkgMC0yMC45LTMxLjYgMC0zMS42IDIuNCAwIDI3LjcgMS4zIDYzLjIgMi44LTYxLjEtMTUuNS0xMDMuNy01NS0xMTQuOS0xMTguMi0yNSAxMi44LTU3LjUgMjYuOC02OC4yIC44LTEwLjUtMjUuNCAyMS41LTQyLjYgNjYuOC03My40IC43LTYuNiAxLjYtMTMuMyAyLjctMTkuOC0xNC40LTE5LjYtMTEuNi0zNi4zLTE2LjEtNjAuNC0xNi44IDIuNC0yMy4yLTkuMS0yMy42LTIzLjEgLjMtNy4zIDIuMS0xNC45IDIuNC0xNS40IDEuMS0xLjggMTAuMS0yIDEyLjctMi42IDYtMzEuNyA1MC42LTMzLjIgOTAuOS0zNC41IDE5LjctMjEuOCA0NS4yLTQxLjUgODAuOS00OC4zLTE1LjMtMTkuNC0zLjQtMzkuOS0yLjQtNDAuNCAxLjctLjggMjEuMiA0LjMgMjYuMyAyMy4yIDUuMi04LjggMTguMy0xMS40IDE5LjYtMTAuNyAxLjEgLjYgNi40IDE1LTQuOSAyNS45IDQwLjMgMy41IDcyLjIgMjQuNyA5NiA1MC43IDM2LjEgMS41IDcxLjggNS45IDc3LjEgMzQgMi43IC42IDExLjYgLjggMTIuNyAyLjYgLjMgLjUgMi4xIDguMSAyLjQgMTUuNC0uNSAxMy45LTYuOCAyNS40LTIzLjYgMjMuMS0zLjIgMTcuMy0yLjcgMzIuOS04LjcgNDcuNyAyLjQgMTEuNyA0IDIzLjggNC44IDM2LjQgMzcgMjUuNCA3MC4zIDQyLjUgNjAuMyA2Ni45ek0yMjMuNSAxNTkuOWMuOS00NC0zNy45LTQyLjItNzguNi00MC4zLTIxLjcgMS0zOC45IDEuOS00NS41IDEzLjktMTEuNCAyMC45IDUuOSA5Mi45IDIzLjIgMTAxLjIgOS44IDQuNyA3My40IDcuOSA4Ni4zLTcuMSA4LjItOS40IDE1LTQ5LjQgMTQuNi02Ny43em01MiA1OC4zYy00LjMtMTIuNC02LTMwLjEtMTUuMy0zMi43LTItLjUtOS0uNS0xMSAwLTEwIDIuOC0xMC44IDIyLjEtMTcgMzcuMiAxNS40IDAgMTkuMyA5LjcgMjMuNyA5LjcgNC4zIDAgNi4zLTExLjMgMTkuNi0xNC4yem0xMzUuNy04NC43Yy02LjYtMTIuMS0yNC44LTEyLjktNDYuNS0xMy45LTQwLjItMS45LTc4LjItMy44LTc3LjMgNDAuMy0uNSAxOC4zIDUgNTguMyAxMy4yIDY3LjggMTMgMTQuOSA3Ni42IDExLjggODYuMyA3LjEgMTUuOC03LjYgMzYuNS03OC45IDI0LjMtMTAxLjN6Il0KICAgIH07CiAgICBmYVN5bWZvbnljYXN0cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzeW1mb255Y2FzdHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZThhYiIsICJNMjkzLjggMzQyLjVjMy40LTEuNSA2LjgtMS41IDEwLjIgMGw1NC4yIDIyLjZjMi42IC45IDQuNyAyLjYgNi4yIDQuOHMyLjMgNC44IDIuMyA3LjZjMCAxOS40LTMuNiAzNy4yLTEwLjcgNTMuNC02LjIgMTMuNi0xNC41IDI1LjQtMjQuOCAzNS42LTguNyA4LjUtMTcuNyAxNC42LTI3LjEgMTguNC0zLjQgMS41LTYuOCAxLjUtMTAuMiAwLTEwLjctNC4zLTIwLjYtMTEuMy0yOS43LTIwLjktMTAtMTAuNC0xNy44LTIyLjUtMjMuNS0zNi40LTYuNC0xNS42LTkuNi0zMi4zLTkuNi01MCAwLTIuOCAuNy01LjQgMi4yLTcuNiAxLjUtMi4zIDMuNi0zLjkgNi4yLTQuOGw1NC4yLTIyLjZ6TTQ3OS43IDQ4My44YTcwLjEgNzAuMSAwIDEgMSAwLTE0MC4yIDcwLjEgNzAuMSAwIDEgMSAwIDE0MC4yek0yNDQuNiAzNzcuNmMwIDE1LjMgMi42IDI5LjcgNy45IDQzLjIgNC45IDEyLjQgMTEuNiAyMy4zIDIwLjEgMzIuNSA4LjEgOC45IDE2LjkgMTUuMyAyNi4zIDE5LjIgOS4yLTMuOCAxNy44LTEwIDI1LjctMTguNyA4LjctOS4yIDE1LjQtMTkuOSAyMC4zLTMyLjIgNS41LTEzLjcgOC4yLTI4LjQgOC4yLTQ0LjFsLTU0LjItMjIuNi01NC4yIDIyLjZ6bTIzNS4xLTIwLjNhNTYuNSA1Ni41IDAgMSAwIDAgMTEzIDU2LjUgNTYuNSAwIDEgMCAwLTExM3ptLTM1Mi44IDIuM2M0LjEgMCA3LjYgMS4zIDEwLjQgMy45IDIuOCAyLjYgNC4yIDUuOSA0LjIgOS42bDAgMTYuNCAzMS4xLTE5LjJjMS41LTEuMSAzLjItMS43IDUuMS0xLjcgMi40IDAgNC42IC44IDYuMyAyLjVzMi43IDMuOCAyLjcgNi4ybDAgNzIuNmMwIDIuNi0uOSA0LjgtMi43IDYuNXMtMy45IDIuNS02LjMgMi41Yy0xLjkgMC0zLjYtLjYtNS4xLTEuN2wtMzEuMS0xOS4yIDAgMTYuNGMwIDMuOC0xLjQgNy00LjIgOS42cy02LjMgNC0xMC40IDRsLTg4LjIgMGMtNC4xIDAtNy42LTEuMy0xMC41LTRzLTQuMi01LjgtNC4yLTkuNmwwLTgxLjNjMC0zLjggMS40LTcgNC4yLTkuNnM2LjMtMy45IDEwLjUtMy45bDg4LjIgMHptMTcyIDk3LjhjLTExLjMtNy0yMC40LTE2LjQtMjcuNC0yOC4zLTcuNS0xMi40LTExLjktMjYuNi0xMy00Mi40bDQwLjQtMTcgMCA4Ny42ek0zNy41IDM3My40bDAgODAuOGMuMiAuMiAuNiAuMyAxLjIgLjNsODguMiAwYy40IDAgLjctLjEgMS4xLS4zbDAtODAuOGMtLjItLjItLjYtLjMtMS4yLS4zbC04OC4xIDBjLS40IDAtLjggLjEtMS4yIC4zem00MTguNCA1LjFjMi4zLTEuMyA0LjUtMS4zIDYuOCAwbDQ5LjggMzAuMmMyLjMgMS4zIDMuNCAzLjMgMy40IDUuOXMtMS4xIDQuNi0zLjQgNS45bC00OS44IDI4LjZjLTIuMyAxLjMtNC41IDEuMy02LjggMHMtMy40LTMuMy0zLjQtNS45bDAtNTguOGMwLTIuNiAxLjEtNC42IDMuNC01Ljl6TTE0MS41IDQwNS41bDAgMTYuNCAzMS43IDE5LjggMC01Ni0zMS43IDE5Ljh6TTQ1MS4xIDUuMmMzNS44LTEuMiA2Mi45IDE1LjEgNjMuOCA0MC44IC40IDEwLjktNS45IDMyLjItMjcuOCAzMy0xNi4zIC42LTI3LjYtOS4yLTI4LjEtMjQuMS0uMi01LjQgMS4yLTEwLjIgNC45LTE1LjggMy42LTcuMSA0LjQtNy45IDQuMy0xMS0uMy05LjQtMTQuNS05LjctMTguMy05LjUtNTMgMS44LTY2LjkgNzMuMy03OC4yIDEzMS41bC01LjYgMzAuN2MzMC41IDQuNSA1Mi4yLTEgNjQuMi04LjggMTctMTEtNC44LTIyLjQtMi0zNSAyLjgtMTIuOCAxNC40LTE5IDIzLjctMTkuMiAxMi45LS4zIDIyLjIgMTMuMSAyMS45IDI2LjctLjUgMjIuNi0zMC40IDUzLjYtOTAuMiA1Mi4zLTcuMy0uMi0xNC0uNy0yMC4yLTEuNGwtMTEuMyA2Mi4zYy0zIDE0LTYuMyAyOS41LTEwLjcgNDUuOGwyMDQgMCAuOSAuMWMuMyAuMSAuNiAuMSAuOCAuMiAyLjIgLjYgNCAyLjUgNC41IDQuOCAuNiAyLjgtMSA2LTMuNyA3LjItLjUgLjItMS4xIC40LTEuNyAuNS0uMyAwLS42IDAtLjkgLjFsLTUxNS4zIDBjLS43LS4xLS45IDAtMS43LS4yLTIuNS0uNy00LjQtMy4xLTQuNi01LjctLjItMi4zIDEtNC42IDMtNS44IC43LS41IDEuNi0uOCAyLjQtLjkgLjMgMCAuNiAwIC44LS4xbDQ4LjQgMGMtMTcuMi0xNi44LTIwLTM3LjItMTYtNTAuNSA1LjQtMTcuNiAxOS40LTIwLjkgMzMtMTYuNyAxNC42IDQuNSAyMC4zIDIyLjMgMTYuMiAzNi0uNSAxLjUtMS4yIDMuOS0yLjggNy4yLTEuNyAzLjgtNC44IDcuMS02LjIgMTEuNS0xLjUgNC45IC43IDkuMSA0LjUgMTIuNmw1OC45IDBjNC4yLTQgNy40LTkgOS4xLTE0LjYgNS4zLTE3LTUuNS0yOC45LTEwLTMzLjVsLTIxLjctMjMuMmMtOS45LTExLjEtMzEuNy00MS45LTIxLjEtNzYuNSA0LjEtMTMuNCAxMi44LTI3LjUgMjUuMy0zNi45IDI2LjUtMTkuNyA1NS4zLTIzIDgyLjctMTUuMSAzNS41IDEwLjIgNTIuNSAzMy43IDc0LjYgNTEuOCAxMi40LTM2LjMgMjkuNS03MS45IDU1LjMtMTAxLjkgMjMuMy0yNy4zIDU0LjYtNDcuMSA5MC40LTQ4LjN6TTIyOS42IDEyMS4zYy0yMi4yLTYtMzUuNy0uOS00NS4yIDExLjItMTEuMyAxNC4zLTcuNSAzMi44IDMuMyA0My43bDE4IDE5LjljMjIgMjUuNSAzNC4xIDQ1LjMgMjkuNiA3Mi0yLjIgMTMuMS04LjUgMjUuMi0xNy45IDM1LjNsNTQuMiAwYzEtNS4xIDItMTAuNCAzLjEtMTUuOGwzLjYtMjEuOWM1LjktMjkuNCAxMi40LTYyLjIgMjIuMy05NC44LTI0LjEtMTguMS0zOC41LTQwLjctNzAuOS00OS41eiJdCiAgICB9OwogICAgZmFTcXVhcmVPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1vZG5va2xhc3NuaWtpIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIm9kbm9rbGFzc25pa2ktc3F1YXJlIl0sICJmMjY0IiwgIk0yMjQgMTM3LjFjLTUuNC0uMy0xMC44IC42LTE1LjkgMi40cy05LjcgNC44LTEzLjYgOC41LTcgOC4yLTkuMiAxMy4yLTMuMiAxMC4zLTMuMiAxNS43IDEuMSAxMC44IDMuMiAxNS43IDUuMyA5LjUgOS4yIDEzLjIgOC42IDYuNiAxMy42IDguNSAxMC41IDIuNyAxNS45IDIuNGM1LjQgLjMgMTAuOC0uNiAxNS45LTIuNHM5LjctNC44IDEzLjYtOC41IDctOC4yIDkuMi0xMy4yIDMuMi0xMC4zIDMuMi0xNS43LTEuMS0xMC44LTMuMi0xNS43LTUuMy05LjUtOS4yLTEzLjItOC42LTYuNi0xMy42LTguNS0xMC41LTIuNy0xNS45LTIuNHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCAyNThhODEgODEgMCAxIDEgMC0xNjIuMSA4MSA4MSAwIDEgMSAwIDE2Mi4xem01OS4zIDYuMmMxNi44LTEzLjIgMjkuNS01LjUgMzQuMSAzLjYgNy44IDE2LTEuMSAyMy43LTIxLjUgMzctMTcuMSAxMC45LTQwLjcgMTUuMi01Ni4yIDE2LjhsMTMgMTIuOSA0Ny43IDQ3LjdjMTcuNCAxNy45LTExIDQ1LjgtMjguNiAyOC42LTEyLTEyLjItMjkuNS0yOS43LTQ3LjctNDcuOWwtNDcuNyA0Ny45Yy0xNy43IDE3LjItNDYtMTEtMjguNC0yOC42IDMuNy0zLjcgNy45LTcuOSAxMi41LTEyLjUgMTAuNC0xMC40IDIyLjYtMjIuNyAzNS4yLTM1LjJsMTIuOS0xMi45Yy0xNS40LTEuNi0zOS4zLTUuNy01Ni42LTE2LjgtMjAuMy0xMy4zLTI5LjMtMjAuOS0yMS40LTM3IDQuNi05LjEgMTcuMy0xNi44IDM0LjEtMy42IDAgMCAyMi43IDE4IDU5LjMgMThzNTkuMy0xOCA1OS4zLTE4eiJdCiAgICB9OwogICAgZmFPZG5va2xhc3NuaWtpU3F1YXJlID0gZmFTcXVhcmVPZG5va2xhc3NuaWtpOwogICAgZmFNYXJrZG93biA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXJrZG93biIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjBmIiwgIk01OTMuOCA1OS4xbC01NDcuNiAwQzIwLjcgNTkuMSAwIDc5LjggMCAxMDUuMkwwIDQwNi43YzAgMjUuNSAyMC43IDQ2LjIgNDYuMiA0Ni4ybDU0Ny43IDBjMjUuNSAwIDQ2LjItMjAuNyA0Ni4xLTQ2LjFsMC0zMDEuNmMwLTI1LjQtMjAuNy00Ni4xLTQ2LjItNDYuMXpNMzM4LjUgMzYwLjZsLTYxLjUgMCAwLTEyMC02MS41IDc2LjktNjEuNS03Ni45IDAgMTIwLTYxLjcgMCAwLTIwOS4yIDYxLjUgMCA2MS41IDc2LjkgNjEuNS03Ni45IDYxLjUgMCAwIDIwOS4yIC4yIDB6bTEzNS4zIDMuMWwtOTIuMy0xMDcuNyA2MS41IDAgMC0xMDQuNiA2MS41IDAgMCAxMDQuNiA2MS41IDAtOTIuMiAxMDcuN3oiXQogICAgfTsKICAgIGZhVHlwbzMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHlwbzMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQyYiIsICJNMTc4LjcgNzguNGMwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMSAwIDEwMy41IDEwNi44IDMzNy41IDE4NC4xIDMzNy41IDM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5LTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOXpNMzAxLjUgMzJjLTMwLjEgMC00MS43IDUuNC00MS43IDM2LjMgMCA2Ni40IDUzLjggMTk4LjUgMTAxLjcgMTk4LjUgMjYuMyAwIDc4LjgtOTkuNyA3OC44LTE4Mi4zIDAtNDAuOS02Ny01Mi41LTEzOC44LTUyLjV6Il0KICAgIH07CiAgICBmYUpvb21sYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqb29tbGEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhYSIsICJNLjYgOTIuMWMwLTMzLjMgMjYuOC02MC4xIDU5LjgtNjAuMSAzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMSAuNiA5Ni41IDMwbC00NC4zIDQ0LjNjLTIwLjUtMjAuNS00Mi42LTE2LjMtNTUuNC0zLjUtMTQuMyAxNC4zLTE0LjMgMzcuOSAwIDUyLjJsOTkuNSA5OS41LTQ0IDQ0LjNjLTg3LjctODcuMi00OS43LTQ5LjctOTkuOC05OS43LTI2LjgtMjYuNS0zNS02NC44LTI0LjgtOTguOS0yNi45LTUuOC00Ni43LTI5LjctNDYuNy01OC4zek0xMzAuMSAyMDguNWw0NC4zIDQ0LjNjMTAtMTAgODkuNy04OS43IDk5LjctOTkuOCAxNC4zLTE0LjMgMzcuNi0xNC4zIDUxLjkgMCAxMi44IDEyLjggMTcgMzUtMy41IDU1LjRsNDQgNDQuM2MzMS4yLTMxLjIgMzguNS02Ny42IDI4LjktMTAxLjIgMjkuMi00LjEgNTEuOS0yOS4yIDUxLjktNTkuNSAwLTMzLjItMjYuOC02MC4xLTU5LjgtNjAuMS0zMC4zIDAtNTUuNCAyMi41LTU5LjUgNTEuNi0zMy44LTkuOS03MS43LTEuNS05OC4zIDI1LjEtMTguMyAxOS4xLTcxLjEgNzEuNS05OS42IDk5Ljl6TTM5Ni40IDM2MC43YzguMi0zMi43LS45LTY4LjUtMjYuMy05My45LTExLjgtMTIuMiA1IDQuNy05OS41LTk5LjdsLTQ0LjMgNDQuMyA5OS43IDk5LjdjMTQuMyAxNC4zIDE0LjMgMzcuNiAwIDUxLjktMTIuOCAxMi44LTM1IDE3LTU1LjQtMy41bC00NCA0NC4zYzI3LjYgMzAuMiA2OCAzOC44IDEwMi43IDI4IDUuNSAyNy40IDI5LjcgNDguMSA1OC45IDQ4LjEgMzMgMCA1OS44LTI2LjggNTkuOC02MC4xIDAtMzAuMi0yMi41LTU1LTUxLjYtNTkuMXptLTg0LjMtNTMuMWwtNDQtNDQuM2MtODcgODYuNC01MC40IDUwLjQtOTkuNyA5OS44LTE0LjMgMTQuMy0zNy42IDE0LjMtNTEuOSAwLTEzLjEtMTMuNC0xNi45LTM1LjMgMy4yLTU1LjRsLTQ0LTQ0LjNjLTMwLjIgMzAuMi0zOCA2NS4yLTI5LjUgOTguMy0yNi43IDYtNDYuMiAyOS45LTQ2LjIgNTguMiAwIDMzLjMgMjYuOCA2MC4xIDU5LjggNjAuMSAyOC42IDAgNTIuNS0xOS44IDU4LjYtNDYuNyAzMi43IDguMiA2OC41LS42IDk0LjItMjYgMzIuMS0zMiAxMi4yLTEyLjQgOTkuNS05OS43eiJdCiAgICB9OwogICAgZmFXZWl4aW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VpeGluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZDciLCAiTTM4NS4yIDE2Ny42YzYuNCAwIDEyLjYgLjMgMTguOCAxLjEtMTYuNi03OC40LTEwMC43LTEzNi43LTE5Ni4zLTEzNi43LTEwNy4yIDAtMTk0LjcgNzIuOC0xOTQuNyAxNjUuNCAwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6TTI4MC43IDExNC43YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yIC4xLTE0LjcgMTQuNi0yNC40IDI5LjMtMjQuNHpNMTQ0LjMgMTYzLjNjLTE0LjUgMC0yOS4zLTkuNy0yOS4zLTI0LjIgMC0xNC44IDE0LjgtMjQuNCAyOS4zLTI0LjQgMTQuOCAwIDI0LjQgOS43IDI0LjQgMjQuNCAwIDE0LjYtOS42IDI0LjItMjQuNCAyNC4yek01NjMgMzE5LjRjMC03Ny45LTc3LjktMTQxLjMtMTY1LjQtMTQxLjMtOTIuNyAwLTE2NS40IDYzLjQtMTY1LjQgMTQxLjNTMzA1IDQ2MC43IDM5Ny42IDQ2MC43YzE5LjMgMCAzOC45LTUuMSA1OC42LTkuOWw1My40IDI5LjMtMTQuOC00OC42QzUzNCA0MDIuMSA1NjMgMzYzLjIgNTYzIDMxOS40ek0zNDMuOSAyOTQuOWMtOS43IDAtMTkuMy05LjctMTkuMy0xOS42IDAtOS43IDkuNy0xOS4zIDE5LjMtMTkuMyAxNC44IDAgMjQuNCA5LjcgMjQuNCAxOS4zIDAgMTAtOS43IDE5LjYtMjQuNCAxOS42em0xMDcuMSAwYy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjUgMCAyNC40IDkuNyAyNC40IDE5LjMgLjEgMTAtOS45IDE5LjYtMjQuNCAxOS42eiJdCiAgICB9OwogICAgZmFHcnVudCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncnVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2FkIiwgIk02MS42IDE4OS4zYy0xLjEgMTAgNS4yIDE5LjEgNS4yIDE5LjEgLjctNy41IDIuMi0xMi44IDQtMTYuNiAuNCAxMC4zIDMuMiAyMy41IDEyLjggMzQuMSA2LjkgNy42IDM1LjYgMjMuMyA1NC45IDYuMSAxIDIuNCAyLjEgNS4zIDMgOC41IDIuOSAxMC4zLTIuNyAyNS4zLTIuNyAyNS4zczE1LjEtMTcuMSAxMy45LTMyLjVjMTAuOC0uNSAyMS40LTguNCAyMS4xLTE5LjUgMCAwLTE4LjkgMTAuNC0zNS41LTguOC05LjctMTEuMi00MC45LTQyLTgzLjEtMzEuOCA0LjMgMSA4LjkgMi40IDEzLjUgNC4xbC0uMSAwYy00LjIgMi02LjUgNy4xLTcgMTJ6bTI4LjMtMS44YzE5LjUgMTEgMzcuNCAyNS43IDQ0LjkgMzctNS43IDMuMy0yMS43IDEwLjQtMzgtMS43LTEwLjMtNy42LTkuOC0yNi4yLTYuOS0zNS4zek0yMzIgMjMzLjNjLTEuMiAxNS41IDEzLjkgMzIuNSAxMy45IDMyLjVzLTUuNi0xNS0yLjctMjUuM2MuOS0zLjIgMi02IDMtOC41IDE5LjMgMTcuMyA0OCAxLjUgNTQuOC02LjEgOS42LTEwLjYgMTIuMy0yMy44IDEyLjgtMzQuMSAxLjggMy44IDMuNCA5LjEgNCAxNi42IDAgMCA2LjQtOS4xIDUuMi0xOS4xLS42LTUtMi45LTEwLTctMTEuOGwtLjEgMGM0LjYtMS44IDkuMi0zLjIgMTMuNS00LjEtNDIuMy0xMC4yLTczLjQgMjAuNi04My4xIDMxLjgtMTYuNyAxOS4yLTM1LjUgOC44LTM1LjUgOC44LS4yIDEwLjkgMTAuNCAxOC45IDIxLjIgMTkuM3ptNjIuNy00NS44YzMgOS4xIDMuNCAyNy43LTcgMzUuNC0xNi4zIDEyLjEtMzIuMiA1LTM3LjkgMS42IDcuNS0xMS40IDI1LjQtMjYgNDQuOS0zN3ptLTEzNC40IDIzMWwtMjkuNCAwYy01LjUgMC04LjIgMS42LTkuNSAyLjktMS45IDItMi4yIDQuNy0uOSA4LjEgMy41IDkuMSAxMS40IDE2LjUgMTMuNyAxOC42IDMuMSAyLjcgNy41IDQuMyAxMS44IDQuMyA0LjQgMCA4LjMtMS43IDExLTQuNiA3LjUtOC4yIDExLjktMTcuMSAxMy0xOS44IC42LTEuNSAxLjMtNC41LS45LTYuOC0xLjgtMS44LTQuNy0yLjctOC44LTIuN3pNMzQ5LjUgMzE3LjNjLTIuNCAxNy45LTEzIDMzLjgtMjQuNiA0My43LTMuMS0yMi43LTMuNy01NS41LTMuNy02Mi40IDAtMTQuNyA5LjUtMjQuNSAxMi4yLTI2LjEgMi41LTEuNSA1LjQtMyA4LjMtNC42IDE4LTkuNiA0MC40LTIxLjYgNDAuNC00My43IDAtMTYuMi05LjMtMjMuMi0xNS40LTI3LjgtLjgtLjYtMS41LTEuMS0yLjItMS43LTIuMS0xLjctMy43LTMtNC4zLTQuNC00LjQtOS44LTMuNi0zNC4yLTEuNy0zNy42IC42LS42IDE2LjctMjAuOSAxMS44LTM5LjItMi03LjQtNi45LTEzLjMtMTQuMS0xNy01LjMtMi43LTExLjktNC4yLTE5LjUtNC41LS4xLTItLjUtMy45LS45LTUuOS0uNi0yLjYtMS4xLTUuMy0uOS04LjEgLjQtNC43IC44LTkgMi4yLTExLjMgOC40LTEzLjMgMjguOC0xNy42IDI5LTE3LjZsMTIuMy0yLjQtOC4xLTkuNWMtLjEtLjItMTcuMy0xNy41LTQ2LjMtMTcuNS03LjkgMC0xNiAxLjMtMjQuMSAzLjktMjQuMiA3LjgtNDIuOSAzMC41LTQ5LjQgMzkuMy0zLjEtMS02LjMtMS45LTkuNi0yLjctNC4yLTE1LjggOS0zOC41IDktMzguNXMtMTMuNi0zLTMzLjcgMTUuMmMtMi42LTYuNS04LjEtMjAuNS0xLjgtMzcuMi0yOS41IDEwLjQtMzYuOSAyNi4zLTM5LjEgNDAuNy03LjYtNS40LTYuNy0yMy4xLTcuMi0yNy42LTcuNSAuOS0yOS4yIDIxLjktMjguMiA0OC4zLTIgLjUtMy45IDEuMS01LjkgMS43LTYuNS04LjgtMjUuMS0zMS41LTQ5LjQtMzkuMy03LjktMi4yLTE2LTMuNS0yMy45LTMuNS0yOSAwLTQ2LjEgMTcuMy00Ni4zIDE3LjVsLTguMSA5LjQgMTIuMyAyLjRjLjIgMCAyMC42IDQuMyAyOSAxNy42IDEuNCAyLjIgMS44IDYuNiAyLjIgMTEuMyAuMiAyLjgtLjQgNS41LS45IDguMS0uNCAxLjktLjggMy45LS45IDUuOS03LjcgLjMtMTQuMiAxLjgtMTkuNSA0LjUtNy4yIDMuNy0xMi4xIDkuNi0xNC4xIDE3LTUgMTguMiAxMS4yIDM4LjUgMTEuOCAzOS4yIDEuOSAzLjQgMi43IDI3LjgtMS43IDM3LjYtLjYgMS40LTIuMiAyLjctNC4zIDQuNC0uNyAuNS0xLjQgMS4xLTIuMiAxLjctNi4xIDQuNi0xNS40IDExLjctMTUuNCAyNy44IDAgMjIuMSAyMi40IDM0LjEgNDAuNCA0My43IDMgMS42IDUuOCAzLjEgOC4zIDQuNiAyLjcgMS42IDEyLjIgMTEuNCAxMi4yIDI2LjEgMCA2LjktLjYgMzkuNy0zLjcgNjIuNC0xMS42LTkuOS0yMi4yLTI1LjktMjQuNi00My44IDAgMC0yOS4yIDIyLjYtMjAuNiA3MC44IDUuMiAyOS41IDIzLjIgNDYuMSA0NyA1NC43IDguOCAxOS4xIDI5LjQgNDUuNyA2Ny4zIDQ5LjYgMTQuNCAxMS44IDM0LjQgMTkuNSA2My42IDE5LjVsLjIgMGMyOS4xIDAgNDkuMS03LjcgNjMuNi0xOS41IDM3LjktMy45IDU4LjUtMzAuNSA2Ny4zLTQ5LjYgMjMuOC04LjcgNDEuNy0yNS4yIDQ3LTU0LjcgOC4yLTQ4LjQtMjEuMS03MC45LTIxLjEtNzAuOXpNMzA2IDM3LjdjNS42LTEuOCAxMS42LTIuNyAxNy43LTIuNyAxMSAwIDE5LjkgMyAyNC43IDUtMy4xIDEuNC02LjQgMy4yLTkuNyA1LjMtMi40LS40LTUuNi0uOC05LjItLjgtMTAuNSAwLTIwLjUgMy4xLTI4LjcgOC45LTEyLjMgOC43LTE4IDE2LjktMjAuNyAyMi40LTIuMi0xLjMtNC41LTIuNS03LjEtMy43LTEuNi0uOC0zLjEtMS41LTQuNy0yLjIgNi4xLTkuMSAxOS45LTI2LjUgMzcuNy0zMi4yem0yMSAxOC4yYy0uOCAxLTEuNiAyLjEtMi4zIDMuMi0zLjMgNS4yLTMuOSAxMS42LTQuNCAxNy44LS41IDYuNC0xLjEgMTIuNS00LjQgMTctNC4yIC44LTguMSAxLjctMTEuNSAyLjctMi4zLTMuMS01LjYtNy0xMC41LTExLjIgMS40LTQuOCA1LjUtMTYuMSAxMy41LTIyLjUgNS42LTQuMyAxMi4yLTYuNyAxOS42LTd6TTQ1LjkgNDUuM2MtMy4zLTIuMi02LjYtNC05LjctNS4zIDQuOC0yIDEzLjctNSAyNC43LTUgNi4xIDAgMTIgLjkgMTcuNyAyLjcgMTcuOCA1LjggMzEuNiAyMy4yIDM3LjcgMzIuMS0xLjYgLjctMy4yIDEuNC00LjggMi4yLTIuNSAxLjItNC45IDIuNS03LjEgMy43LTIuNi01LjQtOC4zLTEzLjctMjAuNy0yMi40LTguMy01LjgtMTguMi04LjktMjguOC04LjktMy40IC4xLTYuNiAuNS05IC45ek05MC42IDg1LjRjLTQuOSA0LjItOC4zIDgtMTAuNSAxMS4yLTMuNC0uOS03LjMtMS45LTExLjUtMi43LTMuMy00LjQtMy44LTEwLjUtNC4zLTE2LjktLjUtNi4yLTEuMS0xMi42LTQuNC0xNy44LS43LTEuMS0xLjUtMi4yLTIuMy0zLjIgNy40IC4zIDE0IDIuNiAxOS41IDcgOCA2LjMgMTIuMSAxNy42IDEzLjUgMjIuNHpNNTguNCAyNTkuOWMtMi43LTEuNi01LjYtMy4xLTguNC00LjYtMTQuOS04LTMwLjItMTYuMy0zMC4yLTMwLjUgMC0xMS4xIDQuMy0xNC42IDguOS0xOC4ybC41LS40Yy43LS42IDEuNC0xLjIgMi4yLTEuOC0uOSA3LjItMS45IDEzLjMtMi43IDE0LjkgMCAwIDEyLjEtMTUgMTUuNy00NC4zIDEuNC0xMS41LTEuMS0zNC4zLTUuMS00MyAuMiA0LjkgMCA5LjgtLjMgMTQuNC0uNC0uOC0uOC0xLjYtMS4zLTIuMi0zLjItNC0xMS44LTE3LjUtOS40LTI2LjYgLjktMy41IDMuMS02IDYuNy03LjggMy44LTEuOSA4LjgtMi45IDE1LjEtMi45IDEyLjMgMCAyNS45IDMuNyAzMi45IDYgMjUuMSA4IDU1LjQgMzAuOSA2NC4xIDM3LjcgLjIgLjIgLjQgLjMgLjQgLjNsNS42IDMuOS0zLjUtNS44Yy0uMi0uMy0xOS4xLTMxLjQtNTMuMi00Ni41IDItMi45IDcuNC04LjEgMjEuNi0xNS4xIDIxLjQtMTAuNSA0Ni41LTE1LjggNzQuMy0xNS44IDI3LjkgMCA1Mi45IDUuMyA3NC4zIDE1LjggMTQuMiA2LjkgMTkuNiAxMi4yIDIxLjYgMTUuMS0zNCAxNS4xLTUyLjkgNDYuMi01My4xIDQ2LjVsLTMuNSA1LjggNS42LTMuOXMuMi0uMSAuNC0uM2M4LjctNi44IDM5LTI5LjggNjQuMS0zNy43IDctMi4yIDIwLjYtNiAzMi45LTYgNi4zIDAgMTEuMyAxIDE1LjEgMi45IDMuNSAxLjggNS43IDQuNCA2LjcgNy44IDIuNSA5LjEtNi4xIDIyLjYtOS40IDI2LjYtLjUgLjYtLjkgMS4zLTEuMyAyLjItLjMtNC42LS41LTkuNS0uMy0xNC40LTQgOC44LTYuNSAzMS41LTUuMSA0MyAzLjYgMjkuMyAxNS43IDQ0LjMgMTUuNyA0NC4zLS44LTEuNi0xLjgtNy43LTIuNy0xNC45IC43IC42IDEuNSAxLjIgMi4yIDEuOGwuNSAuNGM0LjYgMy43IDguOSA3LjEgOC45IDE4LjIgMCAxNC4yLTE1LjQgMjIuNS0zMC4yIDMwLjUtMi45IDEuNS01LjcgMy4xLTguNCA0LjYtOC43IDUtMTggMTYuNy0xOS4xIDM0LjItLjkgMTQuNiAuOSA0OS45IDMuNCA3NS45LTEyLjQgNC44LTI2LjcgNi40LTM5LjcgNi44LTItNC4xLTMuOS04LjUtNS41LTEzLjEtLjctMi0xOS42LTUxLjEtMjYuNC02Mi4yIDUuNSAzOSAxNy41IDczLjcgMjMuNSA4OS42LTMuNS0uNS03LjMtLjctMTEuNy0uN2wtMTE3IDBjLTQuNCAwLTguMyAuMy0xMS43IC43IDYtMTUuOSAxOC4xLTUwLjYgMjMuNS04OS42LTYuOCAxMS4yLTI1LjcgNjAuMy0yNi40IDYyLjItMS42IDQuNi0zLjUgOS01LjUgMTMuMS0xMy0uNC0yNy4yLTItMzkuNy02LjggMi41LTI2IDQuMy02MS4yIDMuNC03NS45LS45LTE3LjQtMTAuMy0yOS4yLTE5LTM0LjJ6TTM1LjEgNDA0LjZjLTEyLjEtMjAtOC43LTU0LjEtMy43LTU5LjEgMTAuOSAzNC40IDQ3LjIgNDQuMyA3NC40IDQ1LjQtMi43IDQuMi01LjIgNy42LTcgMTBsLTEuNCAxLjRjLTcuMiA3LjgtOC42IDE4LjUtNC4xIDMxLjgtMjIuNy0uMS00Ni4zLTkuOC01OC4yLTI5LjV6bTQ1LjcgNDMuNWM2IDEuMSAxMi4yIDEuOSAxOC42IDIuNCAzLjUgOCA3LjQgMTUuOSAxMi4zIDIzLjEtMTQuNC01LjktMjQuNC0xNi0zMC45LTI1LjV6bTExMS41IDUwLjFjLTYwLjYtLjEtNzguMy00NS44LTg0LjktNjQuNy0zLjctMTAuNS0zLjQtMTguMiAuOS0yMy4xIDIuOS0zLjMgOS41LTcuMiAyNC42LTcuMmwxMTguOCAwYzE1LjEgMCAyMS44IDMuOSAyNC42IDcuMiA0LjIgNC44IDQuNSAxMi42IC45IDIzLjEtNi42IDE4LjgtMjQuMyA2NC42LTg0LjkgNjQuN3ptODAuNi0yNC42YzQuOS03LjIgOC44LTE1LjEgMTIuMy0yMy4xIDYuNC0uNSAxMi42LTEuMyAxOC42LTIuNC02LjUgOS41LTE2LjUgMTkuNi0zMC45IDI1LjV6bTc2LjYtNjljLTEyIDE5LjctMzUuNiAyOS4zLTU4LjEgMjkuNyA0LjUtMTMuMyAzLjEtMjQuMS00LjEtMzEuOC0uNC0uNS0uOS0xLTEuNC0xLjUtMS44LTIuNC00LjMtNS44LTctMTAgMjcuMi0xLjIgNjMuNS0xMSA3NC40LTQ1LjQgNSA1IDguNCAzOS4xLTMuOCA1OXpNMTkyLjIgMTg3LjdsLjIgMGMxMi43LS4xIDI3LjItMTcuOCAyNy4yLTE3LjgtOS45IDYtMTguOCA4LjEtMjcuMyA4LjMtOC41LS4yLTE3LjQtMi4zLTI3LjMtOC4zIDAgMCAxNC41IDE3LjYgMjcuMiAxNy44em02MS43IDIzMC43bC0yOS40IDBjLTQuMiAwLTcuMiAuOS04LjkgMi43LTIuMiAyLjMtMS41IDUuMi0uOSA2LjcgMSAyLjYgNS41IDExLjMgMTMgMTkuMyAyLjcgMi45IDYuNiA0LjUgMTEgNC41czguNy0xLjYgMTEuOC00LjJjMi4zLTIgMTAuMi05LjIgMTMuNy0xOC4xIDEuMy0zLjMgMS02LS45LTcuOS0xLjMtMS4zLTQtMi45LTkuNC0zeiJdCiAgICB9OwogICAgZmFTdXBwb3J0bm93ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cHBvcnRub3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTgzMyIsICJNMCAxOTEuOWwyMDMuOS0uMWMxLjgtLjYgMi41LTkuNSAzLjItMTIuMiAzLjMtMTMuNSA4LjQtMjYuNCAxNC44LTM4LjdsLTE2MC4yIDAgMC00OC4yIDIzNC41IDAgMCAzOWMtNTEuMiAzNi4xLTU2LjQgOTIuNi0yMy42IDE0My45IDMzLjEgNTEuNyA5My40IDg4LjEgMTQ5LjUgMTEwLjUgNjcuOC0yNS4yIDE2NC45LTg5LjkgMTY5LjQtMTY5LjYgMy4xLTU1LjMtNDIuMi0xMDEuOC05OC43LTkxLjgtNDEuNSA3LjQtNjIuMSA0Ni43LTU0LjggODYuNGwtNDguMiAwYy03LjMtNTYuNiAyMi44LTExMi42IDc4LjQtMTMwLjMgNzguNy0yNS4xIDE1OS41IDI4IDE3MC40IDEwOC44IDE1LjIgMTEyLjMtOTUuNSAxOTkuOS0xODguMSAyMzcuOC00LjQgMS44LTI0LjQgMTAuMS0yNy41IDEwLjFsLTI4MC4zIDAgMC00OC4yIDE3OC41IDAtMzguMS0yOC45LTIzLjItMjIuMS0xOTguMyAwIDAtNDguMiAxNjMuMSAwYy03LjEtMTEuNi0xMi4zLTI0LjMtMTYuMS0zNy40LS43LTIuNS0yLjEtMTItMy44LTEyLjZsLTIwNC45LS4xIDAtNDguMiAwIDB6Il0KICAgIH07CiAgICBmYVJvY2tybXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicm9ja3JtcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2U5IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMy40IDQyNy41bC05MCAwLTExMi0xMzEuM2MtMTcuOS0yMC40LTMuOS01Ni4xIDI2LjYtNTYuMWw3NS4zIDAtODQuNi05OS4zLTg0LjMgOTguOS05MCAwIDE0Ny4xLTE3Mi41YzE0LjQtMTguNCA0MS4zLTE3LjMgNTQuNSAwTDQxMy43IDI1Mi4zYzE5IDIyLjggMiA1Ny4yLTI3LjYgNTYuMS0uNiAwLTc0LjIgLjItNzQuMiAuMkw0MTMuNCA0MjcuNXoiXQogICAgfTsKICAgIGZhVW5zcGxhc2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5zcGxhc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YyIsICJNNDQ4IDIzMC4ybDAgMjQ5LjgtNDQ4IDAgMC0yNDkuOCAxNDEuMSAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45IDE0MS4xIDB6TTMwNi45IDMybC0xNjUuNyAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45eiJdCiAgICB9OwogICAgZmFTcXVhcmVJbnN0YWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJpbnN0YWdyYW0tc3F1YXJlIl0sICJlMDU1IiwgIk0xOTQuNCAyMTEuN2E1My4zIDUzLjMgMCAxIDAgNTkuMiA4OC42IDUzLjMgNTMuMyAwIDEgMCAtNTkuMi04OC42em0xNDIuMy02OC40Yy01LjItNS4yLTExLjUtOS4zLTE4LjQtMTItMTguMS03LjEtNTcuNi02LjgtODMuMS02LjUtNC4xIDAtNy45IC4xLTExLjIgLjFzLTcuMiAwLTExLjQtLjFjLTI1LjUtLjMtNjQuOC0uNy04Mi45IDYuNS02LjkgMi43LTEzLjEgNi44LTE4LjQgMTJzLTkuMyAxMS41LTEyIDE4LjRjLTcuMSAxOC4xLTYuNyA1Ny43LTYuNSA4My4yIDAgNC4xIC4xIDcuOSAuMSAxMS4xczAgNy0uMSAxMS4xYy0uMiAyNS41LS42IDY1LjEgNi41IDgzLjIgMi43IDYuOSA2LjggMTMuMSAxMiAxOC40czExLjUgOS4zIDE4LjQgMTJjMTguMSA3LjEgNTcuNiA2LjggODMuMSA2LjUgNC4xIDAgNy45LS4xIDExLjItLjFzNy4yIDAgMTEuNCAuMWMyNS41IC4zIDY0LjggLjcgODIuOS02LjUgNi45LTIuNyAxMy4xLTYuOCAxOC40LTEyczkuMy0xMS41IDEyLTE4LjRjNy4yLTE4IDYuOC01Ny40IDYuNS04MyAwLTQuMi0uMS04LjEtLjEtMTEuNHMwLTcuMSAuMS0xMS40Yy4zLTI1LjUgLjctNjQuOS02LjUtODMtMi43LTYuOS02LjgtMTMuMS0xMi0xOC40bDAgLjJ6bS02Ny4xIDQ0LjVjMTguMSAxMi4xIDMwLjYgMzAuOSAzNC45IDUyLjJzLS4yIDQzLjUtMTIuMyA2MS42Yy02IDktMTMuNyAxNi42LTIyLjYgMjIuNnMtMTkgMTAuMS0yOS42IDEyLjJjLTIxLjMgNC4yLTQzLjUtLjItNjEuNi0xMi4zcy0zMC42LTMwLjktMzQuOS01Mi4yIC4yLTQzLjUgMTIuMi02MS42IDMwLjktMzAuNiA1Mi4yLTM0LjkgNDMuNSAuMiA2MS42IDEyLjJsLjEgMHptMjkuMi0xLjNjLTMuMS0yLjEtNS42LTUuMS03LjEtOC42cy0xLjgtNy4zLTEuMS0xMS4xIDIuNi03LjEgNS4yLTkuOCA2LjEtNC41IDkuOC01LjIgNy42LS40IDExLjEgMS4xIDYuNSAzLjkgOC42IDcgMy4yIDYuOCAzLjIgMTAuNmMwIDIuNS0uNSA1LTEuNCA3LjNzLTIuNCA0LjQtNC4xIDYuMi0zLjkgMy4yLTYuMiA0LjItNC44IDEuNS03LjMgMS41Yy0zLjggMC03LjUtMS4xLTEwLjYtMy4ybC0uMSAwek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzU3IDM4OWMtMTguNyAxOC43LTQxLjQgMjQuNi02NyAyNS45LTI2LjQgMS41LTEwNS42IDEuNS0xMzIgMC0yNS42LTEuMy00OC4zLTcuMi02Ny0yNS45cy0yNC42LTQxLjQtMjUuOC02N2MtMS41LTI2LjQtMS41LTEwNS42IDAtMTMyIDEuMy0yNS42IDcuMS00OC4zIDI1LjgtNjdzNDEuNS0yNC42IDY3LTI1LjhjMjYuNC0xLjUgMTA1LjYtMS41IDEzMiAwIDI1LjYgMS4zIDQ4LjMgNy4xIDY3IDI1LjhzMjQuNiA0MS40IDI1LjggNjdjMS41IDI2LjMgMS41IDEwNS40IDAgMTMxLjktMS4zIDI1LjYtNy4xIDQ4LjMtMjUuOCA2N2wwIC4xeiJdCiAgICB9OwogICAgZmFJbnN0YWdyYW1TcXVhcmUgPSBmYVNxdWFyZUluc3RhZ3JhbTsKICAgIGZhRmlyc3RPcmRlckFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdC1vcmRlci1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwYSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDcuOGEyNDAuMiAyNDAuMiAwIDEgMSAwIDQ4MC40IDI0MC4yIDI0MC4yIDAgMSAxIDAtNDgwLjR6bTAgMjAuNWEyMTkuNyAyMTkuNyAwIDEgMCAwIDQzOS40IDIxOS43IDIxOS43IDAgMSAwIDAtNDM5LjR6bTAgOC4yYTIxMS41IDIxMS41IDAgMSAxIDAgNDIzIDIxMS41IDIxMS41IDAgMSAxIDAtNDIzem0xODYuMiAyNjBjLTQuNCAxNy4xLTExLjIgMzMuNS0yMC4xIDQ4LjdsLTc0LjEtMzUuOSA2MS41IDU0LjhjLTEwLjYgMTQuMS0yMy4yIDI2LjYtMzcuMiAzNy4zbC01NC44LTYxLjYgMzUuOSA3NC4zYy0xNS4yIDktMzEuNiAxNS44LTQ4LjYgMjAuMmwtMjcuMy03OC41IDQuOCA4Mi45Yy04LjYgMS4yLTE3LjQgMS44LTI2LjMgMS44cy0xNy43LS42LTI2LjMtMS44bDQuOC04Mi41LTI3LjIgNzhjLTE3LjEtNC41LTMzLjQtMTEuMy00OC43LTIwLjJsMzUuOS03NC4zLTU0LjkgNjEuNmMtMTQtMTAuNy0yNi42LTIzLjItMzcuMi0zNy4zbDYxLjYtNTQuOS03NC4zIDM1LjlDODAuNyAzMzggNzQgMzIxLjcgNjkuNSAzMDQuNmw3Ny44LTI3LjEtODIuMiA0LjhjLTEuMi04LjYtMS44LTE3LjMtMS44LTI2LjIgMC05IC42LTE3LjggMS44LTI2LjVsODIuNCA0LjgtNzcuOS0yNy4yYzQuNS0xNy4xIDExLjMtMzMuNSAyMC4yLTQ4LjdsNzQuMiAzNS45LTYxLjUtNTQuOWMxMC43LTE0IDIzLjItMjYuNiAzNy4zLTM3LjJsNTQuOCA2MS41LTM1LjgtNzQuMmMxNS4yLTguOSAzMS42LTE1LjcgNDguNi0yMC4xbDI2LjkgNzcuMi00LjctODEuNmM4LjYtMS4yIDE3LjQtMS44IDI2LjMtMS44czE3LjcgLjYgMjYuMyAxLjhsLTQuNyA4Mi4yIDI3LTc3LjhjMTcuMyA0LjUgMzMuNiAxMS40IDQ4LjYgMjAuMmwtMzUuOCA3NC4xIDU0LjctNjEuNWMxNC4xIDEwLjcgMjYuNiAyMy4yIDM3LjIgMzcuMmwtNjEuNCA1NC44IDc0LjEtMzUuOWM4LjkgMTUuMiAxNS43IDMxLjYgMjAuMiA0OC42bC03Ny44IDI3LjEgODIuMi00LjdjMS4yIDguNyAxLjggMTcuNSAxLjggMjYuNSAwIDguOS0uNiAxNy42LTEuOCAyNi4ybC04Mi4xLTQuNyA3Ny43IDI3LjF6Il0KICAgIH07CiAgICBmYUZ1bGNydW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZnVsY3J1bSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNTBiIiwgIk02My44IDE2NC4xTDI4LjQgMjA3LjctNyAxNjQuMSAyOC40IDEyMC42IDYzLjggMTY0LjF6TTExMi4yIDBsLTIwLjUgMTk4LjItNTEgNTcuOCA1MSA1Ny44IDIwLjUgMTk4LjIgMC0yMTEuMS00MS4xLTQ0LjkgNDEuMS00NC45IDAtMjExLjF6bTc5LjcgMTY0LjFsMzUuNCA0My42IDM1LjQtNDMuNi0zNS40LTQzLjUtMzUuNCA0My41em0tNDguNSA0N2w0MS4xIDQ0LjktNDEuMSA0NC45IDAgMjExLjEgMjAuNi0xOTguMiA1MS01Ny44LTUxLTU3LjgtMjAuNi0xOTguMiAwIDIxMS4xeiJdCiAgICB9OwogICAgZmFBcmNoTGludXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXJjaC1saW51eCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODY3IiwgIk0yODguNy03LjhjLTI0LjEgNTktMzguNiA5Ny43LTY1LjQgMTU1IDE2LjQgMTcuNCAzNi42IDM3LjYgNjkuNCA2MC41LTM1LjItMTQuNS01OS4yLTI4LjktNzcuMi00NC0zNC4zIDcxLjYtODguMSAxNzMuNS0xOTcuMiAzNjkuNCA4NS43LTQ5LjUgMTUyLjItODAgMjE0LjEtOTEuNi0yLjctMTEuNC00LjEtMjMuOC00LTM2LjdsLjEtMi43YzEuNC01NC45IDI5LjktOTcuMiA2My44LTk0LjRzNjAuMiA0OS44IDU4LjggMTA0LjdjLS4zIDEwLjMtMS40IDIwLjItMy40IDI5LjQgNjEuMiAxMiAxMjcgNDIuNCAyMTEuNiA5MS4yLTE2LjctMzAuNy0zMS42LTU4LjMtNDUuOC04NC43LTIyLjQtMTcuNC00NS43LTM5LjktOTMuMy02NC40IDMyLjcgOC41IDU2LjMgMTguMyA3NC41IDI5LjMtMTQ0LjUtMjY5LjEtMTU2LjItMzA0LjgtMjA1LjgtNDIxLjF6Il0KICAgIH07CiAgICBmYUZlZGl2ZXJzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmZWRpdmVyc2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTg2NSIsICJNMzk0LjggNTI2LjlhNTQgNTQgMCAxIDEgNS44LTEwNy44IDU0IDU0IDAgMSAxIC01LjggMTA3Ljh6bS01MC4xLTgwLjZjLTUuNSAxMC45LTcuNCAyMy4zLTUuNiAzNS40TDE2OC43IDQ1NC40YzUuNS0xMC45IDcuNS0yMy4zIDUuNy0zNS40bDE3MC4zIDI3LjN6TTExMi43IDQ4MS42YTU0IDU0IDAgMSAxIDUuOS0xMDcuOCA1NCA1NCAwIDEgMSAtNS45IDEwNy44em0yNTcuNy02MS40Yy0xMC45IDUuNi0xOS43IDE0LjQtMjUuNCAyNS4zbC03MC42LTcwLjkgMzMuNi0xNyA2Mi40IDYyLjd6TTQ4Ni4xIDI2MWM4LjcgOC42IDE5LjggMTQuMyAzMS45IDE2LjRMNDM5LjQgNDMwLjhjLTguNy04LjYtMTkuOC0xNC4zLTMxLjktMTYuNEw0ODYuMSAyNjF6TTM3Ni43IDIxOS4zbDMwLjUgMTk1LjFjLTEyLjEtMS45LTI0LjUtLjEtMzUuNCA1LjNsLTMyLjItMjA2LjMgMzcuMiA2ek0zNTAuNCAzMjguOUwxNzQuMiA0MTguMmMtMi0xMi4xLTcuNi0yMy4yLTE2LjItMzJsMTg2LjYtOTQuNiA1LjggMzcuMnptLTE1Mi43LTIybC00MC4zIDc4LjdjLTguNy04LjYtMTkuOC0xNC4zLTMxLjktMTYuM2w0NS42LTg5IDI2LjYgMjYuN3pNMTI0LjcgMzY5Yy0xMi4xLTEuOC0yNC40IC4yLTM1LjQgNS42TDYyLjcgMjA0LjNjMTIuMSAxLjggMjQuNS0uMSAzNS40LTUuNkwxMjQuNyAzNjl6bTE0Ny4xLTQ3LjhsLTMzLjYgMTctMTM5LjQtMTM5LjljMTAuOS01LjYgMTkuNy0xNC40IDI1LjQtMjUuM0wyNzEuOCAzMjEuMnptMTk3LjUtOTIuOGMyIDEyLjEgNy42IDIzLjIgMTYuMiAzMS45bC04OS4zIDQ1LjItNS44LTM3LjIgNzguOS00MHptNTUuNiA0NC4zYTU0IDU0IDAgMSAxIDUuOS0xMDcuOCA1NCA1NCAwIDEgMSAtNS45IDEwNy44ek0yODQuNiA1OC43YzguNyA4LjYgMTkuOCAxNC4zIDMxLjggMTYuM2wtOTUuMyAxODYuMS0yNi42LTI2LjcgOTAtMTc1Ljh6TTQ3NC45IDE5Mi4xYy01LjUgMTAuOS03LjUgMjMuMy01LjcgMzUuM2wtMjA2LjQtMzMuMSAxNy4yLTMzLjUgMTk1IDMxLjN6TTY4LjcgMTk5LjZBNTQgNTQgMCAxIDEgNzQuNiA5MS44IDU0IDU0IDAgMSAxIDY4LjcgMTk5LjZ6bTQzMi0zMy40Yy0xMC45IDUuNi0xOS43IDE0LjQtMjUuNCAyNS4zTDM1My41IDY5LjNjMTAuOS01LjYgMTkuNy0xNC40IDI1LjQtMjUuM0w1MDAuNiAxNjYuMnpNMjI5LjMgMTUyLjZsLTE3LjIgMzMuNS04Ny40LTE0YzUuNC0xMC45IDcuNC0yMy4zIDUuNS0zNS40bDk5IDE1Ljl6bTEzOS41IDE1LjlsLTM3LjItNi0xMy42LTg3LjJjMTIuMSAxLjcgMjQuNS0uMyAzNS4zLTUuOWwxNS41IDk5LjF6TTI2Ny44IDI2LjJjMiAxMi4xIDcuNiAyMy4yIDE2LjIgMzEuOWwtMTUzLjkgNzhjLTItMTIuMS03LjYtMjMuMi0xNi4yLTMxLjlsMTUzLjktNzh6bTU1LjYgNDQuM2E1NCA1NCAwIDEgMSA1LjgtMTA3LjggNTQgNTQgMCAxIDEgLTUuOCAxMDcuOHoiXQogICAgfTsKICAgIGZhQnJhdmVSZXZlcnNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJyYXZlLXJldmVyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYzZCIsICJNMjk4LjUgMGMzIDAgNS44IDEuMyA3LjggMy42bDM4LjEgNDRjLjUtLjEgMS0uMiAxLjUtLjMgOS4yLTEuNiAxOC42LTIuMiAyNy43LTEuMiAxMS42IDEuNCAyMS41IDUuNCAyOC45IDEyLjkgNy43IDcuOCAxNS40IDE1LjggMjIuNiAyMy42IDIuNSAyLjcgNC45IDUuMiA2LjkgNy40IC43IC44IDEuNCAxLjUgMS45IDIgMy40IDMuNyA0LjIgOC4xIDIuNyAxMS45bC05LjggMjQuNiAxMy4xIDM4LjFjLjcgMiAuOCA0LjEgLjIgNi4yLS4xIC40LS4xIC40LS41IDIuMWwtMS41IDUuOGMtMS42IDYuMy0zLjUgMTMuMy01LjQgMjAuOS01LjYgMjEuNi0xMS4yIDQzLjItMTYuNCA2My40LTEyLjkgNDkuOS0yMS40IDgyLjctMjMuNCA5MC45LTExLjEgNDQuNS0xOS45IDYwLTQ4LjMgODAuMy0yNC45IDE3LjgtNzYuOCA1My42LTg2LjggNjAtMSAuNi0yIDEuMy0zLjQgMi4zLS41IC40LTMuMiAyLjItMy45IDIuNy00LjkgMy4zLTguMyA1LjUtMTIuMSA3LjMtNC43IDIuMi05LjMgMy41LTEzLjkgMy41cy05LjEtMS4yLTEzLjktMy41Yy0zLjctMS44LTcuMi0zLjktMTIuMS03LjMtLjgtLjUtMy40LTIuNC0zLjktMi43LTEuNC0xLTIuNS0xLjctMy40LTIuMy0xMC02LjQtNjEuOS00Mi4xLTg2LjgtNjAtMjguNC0yMC40LTM3LjItMzUuOC00OC4zLTgwLjMtMi04LjItMTAuNS00MS0yMy4zLTkwLjUtNS4zLTIwLjYtMTAuOS00Mi4yLTE2LjUtNjMuOC0yLTcuNi0zLjgtMTQuNi01LjQtMjAuOWwtMS41LTUuOC0uNS0yLjFjLS41LTItLjQtNC4yIC4yLTYuMmwxMy4xLTM4LjEtOS45LTI0LjVjLTEuNS0zLjgtLjctOC4yIDItMTEuMiAxLjItMS4zIDEuOC0yIDIuNi0yLjggMi0yLjIgNC40LTQuNyA2LjktNy40IDcuMy03LjcgMTUtMTUuNyAyMi43LTIzLjUgNy40LTcuNSAxNy4zLTExLjYgMjguOS0xMi45IDkuMS0xLjEgMTguNS0uNSAyNy43IDEuMiAuNSAuMSAxIC4yIDEuNSAuM2wzOC4xLTQ0YzItMi40IDQuOC0zLjcgNy44LTMuN2wxNDggMHptLTQuNyAyMS4xbC0xMzguNiAwLTM5LjEgNDUuMWMtMi42IDMtNi43IDQuMy0xMC42IDMuMi0uMi0uMS0uNy0uMi0xLjUtLjQtMS4zLS4zLTIuOS0uNi00LjUtLjktNy40LTEuMy0xNC45LTEuOC0yMS43LTEtNy4zIC45LTEzIDMuMi0xNi42IDYuOS03LjYgNy43LTE1LjIgMTUuNi0yMi4zIDIzLjMtMS43IDEuOC0zLjMgMy41LTQuOCA1LjFsOC44IDIyYzEgMi40IDEgNSAuMiA3LjVMMjkuNyAxNzAuNmMuNCAxLjQgLjUgMS45IDEuMiA0LjggMS42IDYuMyAzLjUgMTMuMyA1LjQgMjAuOSA1LjYgMjEuNiAxMS4yIDQzLjIgMTYuNCA2My40IDEyLjkgNTAgMjEuNCA4Mi44IDIzLjQgOTEgMTAuMSA0MC4xIDE2LjQgNTEuMyA0MC4yIDY4LjMgMjQuNiAxNy42IDc2LjMgNTMuMiA4NS45IDU5LjMgMS4yIC44IDIuNSAxLjYgNCAyLjcgLjYgLjQgMy4yIDIuMiAzLjkgMi43IDQgMi44IDYuNyA0LjQgOS4yIDUuNiAyLjIgMSAzLjkgMS41IDUuMSAxLjVzMi45LS41IDUuMS0xLjVjMi41LTEuMiA1LjItMi44IDkuMi01LjYgLjctLjUgMy4zLTIuMyAzLjktMi43IDEuNi0xLjEgMi44LTEuOSA0LTIuNyA5LjYtNi4xIDYxLjMtNDEuNyA4NS45LTU5LjMgMjMuOC0xNy4xIDMwLjItMjguMiA0MC4xLTY4LjMgMi4xLTguMyAxMC41LTQxLjEgMjMuMy05MC43IDUuMy0yMC42IDEwLjktNDIuMiAxNi41LTYzLjggMi03LjYgMy44LTE0LjYgNS40LTIwLjkgLjctMi45IC45LTMuNCAxLjItNC44bC0xMy4zLTM4LjhjLS44LTIuNC0uOC01LjEgLjItNy41bDguOC0yMmMtMS41LTEuNi0zLjEtMy4zLTQuOC01LjEtNy4yLTcuNi0xNC43LTE1LjUtMjIuMy0yMy4zLTMuNy0zLjctOS4zLTYtMTYuNi02LjktNi44LS44LTE0LjQtLjMtMjEuNyAxLTEuNyAuMy0zLjIgLjYtNC41IC45LS44IC4yLTEuMyAuMy0xLjUgLjQtMy44IDEuMS03LjktLjItMTAuNi0zLjJMMjkzLjggMjEuMXpNMjI0LjUgMzE2YzIuOCAwIDIwLjkgNi41IDM1LjQgMTQuMXMyNSAxMyAyOC4zIDE1LjIgMS4zIDYuMi0xLjcgOC40LTQ0LjEgMzQuNi00OC4xIDM4LjItOS44IDkuNS0xMy44IDkuNS05LjgtNS45LTEzLjgtOS41LTQ1LjEtMzYtNDguMS0zOC4yLTUuMS02LjItMS43LTguNCAxMy45LTcuNSAyOC4zLTE1LjIgMzIuNS0xNC4xIDM1LjQtMTQuMWwtLjIgMHptLjEtMjMwLjdjLjcgMCA4LjggLjIgMjAuNSA0LjIgMTIuMyA0LjIgMjUuNyA5LjQgMzEuOSA5LjRzNTEuOS04LjkgNTEuOS04LjkgNTQuMiA2Ni43IDU0LjIgODEtNi44IDE4LTEzLjcgMjUuNC0zNi44IDM5LjgtNDAuNyA0My45LTExLjkgMTAuNS03LjEgMjEuOCAxMS43IDI1LjggMy45IDQwLjQtMjEgMjQuNC0yOS40IDIyLjgtMjguNC0xMi4yLTM1LjctMTcuMS0zMC41LTI0LjMtMzAuNS0zMS44IDI0LTIwLjggMjguNC0yMy45IDI0LjctMTQuOCAyNS4xLTE5LjQgLjMtNi01LjctMTcuNC0xNi43LTI2LjctMTQuOS0zNi44IDE5LjEtMTUuNCAzMS41LTIwLjIgMzYuMi0xMy43IDM5LjItMTUuMSAyLjItMi43LTYuOC0zLjYtMzQuNi00LjMtNDYuMS0xLjEtMzEuMiA4LjItMzIuOCAxMC45LTMgMi43LTEuNCAxMS44IDEwLjEgNTIuOCAxMC45IDYwLjYgMi40IDEyLjktNS44IDE0LjgtMjIuMSA1LjItMjYuOCA1LjItMTguNi0zLjMtMjYuOC01LjItNi42LTctNS44LTE0LjggOS4zLTUxLjUgMTAuOS02MC42IC4yLTkuMi0xLjQtMTEuOC0yMS4zLTcuNi0zMi44LTEwLjktMzcuMSAuMi00Ni4xIDEuMS05LjggMi4yLTYuOCAzLjYgMjYuOCAxMC40IDM5LjIgMTUuMSAyOS43IDEwIDMxLjUgMjAuMi05IDI1LjQtMTQuOSAzNi44LTYuMSAxMi44LTUuNyAxNy40IDIwLjYgMTYuNCAyNS4xIDE5LjQgMjguNCAxNi40IDI4LjQgMjMuOS0yMy4yIDI3LTMwLjUgMzEuOC0yNy4yIDE1LjQtMzUuNyAxNy4xLTIxLjctOC4yLTI5LjQtMjIuOC0uOC0yOS4xIDMuOS00MC40LTMuMy0xNy43LTcuMS0yMS44LTMzLjgtMzYuNS00MC43LTQzLjktMTMuNy0xMS4yLTEzLjctMjUuNCA1NC4yLTgxIDU0LjItODEgNDUuOCA4LjkgNTEuOSA4LjkgMTkuNS01LjIgMzEuOS05LjQgMjAuNi00LjIgMjAuNi00LjJsLS4zIDB6Il0KICAgIH07CiAgICBmYUF2aWFuZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXZpYW5leCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzc0IiwgIk00NTMuMiAzMmwtMzEyIDBDMTAyLjMgMzIgNjUgNjMuMiA1Ny45IDEwMS43TDEuMyA0MTAuM0MtNS44IDQ0OC44IDIwIDQ4MCA1OSA0ODBsMzEyIDBjMzguOSAwIDc2LjItMzEuMiA4My4zLTY5LjdMNTExIDEwMS44QzUxOCA2My4yIDQ5Mi4yIDMyIDQ1My4yIDMyek0zOTUgMzc5LjNsLTMyIDEzLjUtMTE1LjQtMTEwYy0xNC43IDEwLTI5LjIgMTkuNS00MS43IDI3LjFsMjIuMSA2NC4yLTE3LjkgMTIuNy00MC42LTYxLTUyLjQtNDguMSAxNS43LTE1LjQgNTggMzEuMWM5LjMtMTAuNSAyMC44LTIyLjYgMzIuOC0zNC45bC0yMC41LTI5LjYtNjguOC05OS44IDE4LjgtMjguOSA4LjktNC44IDEwMy4xIDExMi40IDQuOSA0LjVjMTkuNC0xOC44IDMzLjgtMzIuNCAzMy44LTMyLjQgNy43LTYuNSAyMS41LTIuOSAzMC43IDcuOSA5IDEwLjUgMTAuNiAyNC43IDIuNyAzMS4zLTEuOCAxLjMtMTUuNSAxMS40LTM1LjMgMjUuNmw0LjUgNy4zIDk0LjkgMTE5LjQtNi4zIDcuOXoiXQogICAgfTsKICAgIGZhTnM4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5zOCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Q1IiwgIk0xMDQuMyAyNjkuMmwyNi4xIDAgMC0yNi4yLTI2LjEgMCAwIDI2LjJ6TTE1Ni44IDI0M2wtLjEtMjYuMiAwLS45Yy0uMi0xMC40LTQuNC0yMC4zLTExLjktMjcuNnMtMTcuNS0xMS4zLTI3LjktMTEuMS0yMC4zIDQuNC0yNy42IDExLjgtMTEuMyAxNy41LTExLjIgMjcuOWwwIC4yIDI2LjQgMCAwLS4yYy4xLTMuNCAxLjUtNi42IDMuOS05czUuNy0zLjcgOS4xLTMuNyA2LjcgMS4zIDkuMSAzLjcgMy44IDUuNiAzLjkgOWwwIDI2LjIgMjYuMyAwem01Mi40IDI1LjhjMCAxMi0yLjQgMjMuOC02LjkgMzQuOXMtMTEuMyAyMS4xLTE5LjcgMjkuNi0xOC41IDE1LjItMjkuNiAxOS43LTIyLjkgNi45LTM0LjkgNi45bC0uNiAwYy0yNC4yIDAtNDcuMy05LjYtNjQuNC0yNi43UzI2LjMgMjkzIDI2LjMgMjY4LjhsLTI2LjMgMCAwIC4yYzAgMTUuNCAzLjEgMzAuNyA5IDQ0LjlzMTQuNiAyNy4yIDI1LjUgMzguMSAyMy45IDE5LjUgMzguMSAyNS40IDI5LjUgOC45IDQ0LjkgOC45bC44IDBjMTUuNCAwIDMwLjctMyA0NC45LTlzMjcuMi0xNC42IDM4LjEtMjUuNSAxOS41LTIzLjggMjUuNC0zOC4xIDguOS0yOS41IDguOS00NC45bDAtMjYtMjYuMyAwIDAgMjZ6bS0xNTcuMiAwYy4xIDE3LjMgNyAzMy45IDE5LjIgNDYuMXMyOC44IDE5LjEgNDYuMSAxOS4xIDMzLjktNi45IDQ2LjEtMTkuMSAxOS4yLTI4LjggMTkuMi00Ni4xbC0yNi4zIDBjLS4yIDEwLjItNC40IDIwLTExLjcgMjcuMnMtMTcuMSAxMS4yLTI3LjQgMTEuMi0yMC4xLTQtMjcuNC0xMS4yLTExLjUtMTYuOS0xMS43LTI3LjJsMC0yNi0yNi4zIDAgMC0yNi42Yy4zLTE3LjMgNy40LTMzLjggMTkuNy00NS44czI5LTE4LjggNDYuMy0xOC42IDMzLjggNy4yIDQ1LjkgMTkuNSAxOC45IDI4LjkgMTguOSA0Ni4ybDAgMjUuMyAyNi4zIDAgMC0yNS4zYzAtMjQuMy05LjctNDcuNy0yNi45LTY0LjlzLTQwLjUtMjYuOS02NC45LTI2LjktNDcuNyA5LjctNjQuOSAyNi45LTI2LjkgNDAuNS0yNi45IDY0LjlsMCAyNS40IDI2LjMgMCAwIDI2em00MTguNC03MS4yYzEzLjcgMCAyNC42IDYuNiAzMC4xIDE4LjNsLjcgMS41IDIzLjItMTEuNS0uNi0xLjRjLTgtMTkuMy0yOC41LTMxLjMtNTMuNC0zMS4zLTIzLjEgMC00My42IDExLjQtNTEgMjguNC0uMSAyNi45LS4yIDIzLjkgMCAyNC44IDQuNyAxMSAxNC42IDE5LjQgMjguNyAyNC4yIDYuNSAyIDEzLjEgMy4zIDE5LjggNCA1LjUgLjcgMTAuNiAxLjQgMTUuOCAzLjEgNi40IDIuMSAxMC41IDUuMyAxMi44IDkuOGwwIDkuOWMtMy43IDcuNS0xMy44IDEyLjMtMjUuOCAxMi4zLTE0LjMgMC0yNi02LjktMzEuOS0xOWwtLjctMS41LTIzIDExLjUgLjYgMS40YzcuOSAxOS40IDI5LjYgMzIgNTUuMyAzMiAyMy42IDAgNDQuNi0xMS40IDUyLjMtMjguNGwuMi0yNS45LS4yLS43Yy00LjktMTEtMTUuMi0xOS42LTI4LjktMjQuMi03LjctMi43LTE0LjMtMy42LTIwLjctNC40LTUtLjUtMTAtMS41LTE0LjgtMi45LTYuMy0xLjktMTAuNC01LjEtMTIuNi05LjZsMC04LjRjMy40LTcuNCAxMi45LTEyLjEgMjQuMi0xMi4xbDAgMHpNMjg3LjYgMzExLjNsMjYuMSAwIDAtNjguNC0yNi4xIDAgMCA2OC40ek02MzkuOCAyNThjLTIuOS02LjMtOC4zLTEyLTE1LjQtMTYuNyA1LjYtMy44IDEwLjEtOS4xIDEzLTE1LjNsLjItMjUuMy0uMi0uN2MtNy40LTE2LTI2LjctMjYuNy00OC4yLTI2LjdTNTQ4LjUgMTg0IDU0MS4xIDIwMGwtLjIgMjUuMyAuMiAuN2MyLjkgNi4xIDcuNCAxMS40IDEzIDE1LjMtNy4yIDQuNy0xMi41IDEwLjUtMTUuNCAxNi43bC0uMiAyOC45IC4yIC43YzcuNiAxNiAyNy45IDI2LjcgNTAuNiAyNi43czQzLjEtMTAuNyA1MC42LTI2LjdsLjItMjguOS0uMi0uN3ptLTczLjItNTAuOGMzLjYtNi4zIDEyLjYtMTAuNSAyMi42LTEwLjVzMTkgNC4yIDIyLjYgMTAuNWwwIDEzLjdjLTMuNSA2LjItMTIuNiAxMC4zLTIyLjYgMTAuM3MtMTkuMS00LjItMjIuNi0xMC4zbDAtMTMuN3ptNDcuMyA3Mi4yYy0zLjggNi42LTEzLjMgMTAuOS0yNC43IDEwLjktMTEuMSAwLTIxLTQuNC0yNC43LTEwLjlsMC0xNi4yYzMuNy02LjMgMTMuNS0xMC41IDI0LjctMTAuNSAxMS4zIDAgMjAuOSA0LjEgMjQuNyAxMC41bDAgMTYuMnpNMzc2LjQgMjY2bC01OS44LTg5LjctMjkgMCAwIDQwLjYgMjYuNSAwIDAgLjQgNjIuNSA5NC4xIDI1LjcgMCAwLTEzNS4xLTI1LjkgMCAwIDg5Ljd6Il0KICAgIH07CiAgICBmYVNxdWFyZVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGludGVyZXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBpbnRlcmVzdC1zcXVhcmUiXSwgImYwZDMiLCAiTTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDcyLjYgMC0yLjItLjhjLTUuNC00OC4xLTMuMS01Ny41IDE1LjctMTM0LjcgMy45LTE2IDguNS0zNSAxMy45LTU3LjkgMCAwLTcuMy0xNC44LTcuMy0zNi41IDAtNzAuNyA3NS41LTc4IDc1LjUtMjUgMCAxMy41LTUuNCAzMS4xLTExLjIgNDkuOC0zLjMgMTAuNi02LjYgMjEuNS05LjEgMzItNS43IDI0LjUgMTIuMyA0NC40IDM2LjQgNDQuNCA0My43IDAgNzcuMi00NiA3Ny4yLTExMi40IDAtNTguOC00Mi4zLTk5LjktMTAyLjYtOTkuOS02OS45IDAtMTEwLjkgNTIuNC0xMTAuOSAxMDYuNiAwIDIxLjEgOC4yIDQzLjcgMTguMyA1NiAyIDIuNCAyLjMgNC41IDEuNyA3LTEuMSA0LjctMy4xIDEyLjktNC43IDE5LjItMSA0LTEuOCA3LjMtMi4xIDguNi0xLjEgNC41LTMuNSA1LjUtOC4yIDMuMy0zMC42LTE0LjMtNDkuOC01OS4xLTQ5LjgtOTUuMSAwLTc3LjUgNTYuMi0xNDguNiAxNjIuMi0xNDguNiA4NS4yIDAgMTUxLjQgNjAuNyAxNTEuNCAxNDEuOCAwIDg0LjYtNTMuMyAxNTIuNy0xMjcuNCAxNTIuNy0yNC45IDAtNDguMy0xMi45LTU2LjMtMjguMiAwIDAtMTIuMyA0Ni45LTE1LjMgNTguNC01IDE5LjMtMTcuNiA0Mi45LTI3LjQgNTkuM0wzODQgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFQaW50ZXJlc3RTcXVhcmUgPSBmYVNxdWFyZVBpbnRlcmVzdDsKICAgIGZhQmx1ZXRvb3RoQiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgtYiIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMjk0IiwgIk0xNjQuOSAyNjBMMjU3LjUgMTU2LjcgMTExLjYgMCAxMTEuNiAyMDYuMyAyNS40IDEyMC4yLTYgMTUxLjYgMTAyLjEgMjYwLTYgMzY4LjQgMjUuNCAzOTkuOCAxMTEuNiAzMTMuNyAxMTQuMyA1MTIgMjYyLjggMzYzLjQgMTY0LjkgMjYwem00MC45LTEwM2wtNTAgNTAtLjMtMTAwLjMgNTAuMyA1MC4zem0tNTAgMTU2bDUwIDUwLTUwLjMgNTAuMyAuMy0xMDAuM3oiXQogICAgfTsKICAgIGZhR3JpcGZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JpcGZpcmUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjNhYyIsICJNODAuNSAzMDEuNGMwLTczLjggMTA1LjEtMTIyLjUgMTA1LjEtMjAzIDAtNDcuMS0zNC04OC0zOS4xLTkwLjQgLjQgMy4zIC42IDYuNyAuNiAxMCAwIDkyLjEtMTQ3LjEgMTUzLjktMTQ3LjEgMjY4LjYgMCA0OS44IDMyLjIgNzkuMiA2Ni41IDEwOC4zIDY1LjEgNDYuNyA3OC4xIDcxLjQgNzguMSA4Ni42IDAgMTAuMS00LjggMTctNC44IDIyLjMgMTMuMS0xNi43IDE3LjQtMzEuOSAxNy41LTQ2LjQgMC0yOS42LTIxLjctNTYuMy00NC4yLTg2LjUtMTYtMjIuMy0zMi42LTQyLjYtMzIuNi02OS41em0yMDUuMy0zOWMtMTIuMS02Ni44LTc4LTEyNC40LTk0LjctMTMwLjlsNCA3LjJjMi40IDUuMSAzLjQgMTAuOSAzLjQgMTcuMSAwIDQ0LjctNTQuMiAxMTEuMi01Ni42IDExNi43LTIuMiA1LjEtMy4yIDEwLjUtMy4yIDE1LjggMCAyMC4xIDE1LjIgNDIuMSAxNy45IDQyLjEgMi40IDAgNTYuNi01NS40IDU4LjEtODcuNyA2LjQgMTEuNyA5LjEgMjIuNiA5LjEgMzMuNCAwIDQxLjItNDEuOCA5Ni45LTQxLjggOTYuOSAwIDExLjYgMzEuOSA1My4yIDM1LjUgNTMuMiAxIDAgMi4yLTEuNCAzLjItMi40IDM3LjktMzkuMyA2Ny4zLTg1IDY3LjMtMTM2LjggMC04LS43LTE2LjItMi4yLTI0LjZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUdvb2dsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdvb2dsZS1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdvb2dsZS1wbHVzLXNxdWFyZSJdLCAiZjBkNCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTY0IDI1NmMwLTU1LjMgNDQuNy0xMDAgMTAwLTEwMCAyNyAwIDQ5LjUgOS44IDY3IDI2LjJsLTI3LjEgMjYuMWMtNy40LTcuMS0yMC4zLTE1LjQtMzkuOC0xNS40LTM0LjEgMC02MS45IDI4LjItNjEuOSA2My4yIDAgMzQuOSAyNy44IDYzLjIgNjEuOSA2My4yIDM5LjYgMCA1NC40LTI4LjUgNTYuOC00My4xbC01Ni45IDAgMC0zNC40IDk0LjQgMGMxIDUgMS42IDEwLjEgMS42IDE2LjYgMCA1Ny4xLTM4LjMgOTcuNi05NiA5Ny42LTU1LjMgMC0xMDAtNDQuNy0xMDAtMTAwem0yOTEgMTguMmwwIDI5LTI5LjIgMCAwLTI5LTI5IDAgMC0yOS4yIDI5IDAgMC0yOSAyOS4yIDAgMCAyOSAyOSAwIDAgMjkuMi0yOSAweiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzU3F1YXJlID0gZmFTcXVhcmVHb29nbGVQbHVzOwogICAgZmFHaXRlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRlZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODYzIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzg1LjYgMTEzLjhsMCAwLTE3NyAwYy01Mi40IDAtOTQuOCA0Mi40LTk0LjggOTQuOGwwIDE3N2MwIDcgNS43IDEyLjYgMTIuNiAxMi42bDE4Ni41IDBjNDcuMSAwIDg1LjMtMzguMiA4NS4zLTg1LjNsMC03Mi43YzAtNy01LjctMTIuNi0xMi42LTEyLjZsLTE0NS40IDBjLTcgMC0xMi42IDUuNy0xMi42IDEyLjZsMCAzMS42YzAgNi42IDUuMSAxMi4xIDExLjYgMTIuNmwxIDAgODguNSAwYzYuNiAwIDEyLjEgNS4xIDEyLjYgMTEuNmwwIDEgMCA2LjNjMCAyMC45LTE3IDM3LjktMzcuOSAzNy45bC0xMjAuMSAwYy03IDAtMTIuNi01LjctMTIuNi0xMi42bDAtMTIwLjFjMC0yMC40IDE2LjEtMzcuMSAzNi40LTM3LjlsMS42IDAgMTc3IDBjNyAwIDEyLjYtNS43IDEyLjYtMTIuNmwwLTMxLjZjMC03LTUuNi0xMi42LTEyLjYtMTIuNnoiXQogICAgfTsKICAgIGZhWG1wcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4bXBwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4NjQiLCAiTTAgNDcuMmMzLjUgMTM3LjEgMTE3LjEgMjc4LjYgMjUyLjkgMzU2LjctMzEuNSAyNS02Ny4yIDQ0LjEtMTA2LjIgNTMuOWwwIDUuNGM1Ni40LTIuMyA5OC4xLTIwLjEgMTQxLjMtNDAuNyA2NS43IDM0LjYgMTIyLjIgMzkuOSAxNDEuNCA0MC43bDAtNS40Yy0zOS05LjgtNzQuNy0yOC44LTEwNi4yLTUzLjggMTM1LjctNzguMiAyNDkuMy0yMTkuOCAyNTIuOC0zNTYuOC01OC40IDI1LjctMTE5LjEgNDQuMi0xODAuMSA2Mi4zbDAgMGMzLjQgNTktMjAuMiAxNzAuNC0xMDcuOSAyNjIuMy04OC40LTkyLjMtMTExLjItMjA0LjEtMTA3LjgtMjYyLjNsMCAwQzExNy43IDkyLjYgNTkuMyA3MC4yIDAgNDcuMnpNOTMuOSA5N2w3My42IDIxLjhDMTY1LjQgMjE2IDIyNi44IDM1OCAzNDEuMyA0MzIuMiAxOTAuNSAzNzYuOSA4OS45IDIxNS43IDkzLjkgOTd6bTM4OC4zIDBjMy4zIDk5LTY1LjYgMjI0LjctMTcxLjcgMjk2LjQtNC43LTQuMS05LjMtOC40LTEzLjgtMTIuNyA3Ny04MC4yIDExMy4yLTE4Ni4zIDExMS45LTI2MS45TDQ4Mi4xIDk3ek0yNjQuNSA0MTAuNWMzIDEuNiA1LjkgMy4yIDguOSA0LjctMTIuNSA2LjQtMjUuNCAxMi4xLTM4LjYgMTcgMTAuMy02LjcgMjAuMi0xMy45IDI5LjctMjEuN3oiXQogICAgfTsKICAgIGZhQXBwU3RvcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwLXN0b3JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmYiLCAiTTI1NS45IDEyMC45bDkuMS0xNS43YzUuNi05LjggMTguMS0xMy4xIDI3LjktNy41czEzLjEgMTguMSA3LjUgMjcuOWwtODcuNSAxNTEuNSA2My4zIDBjMjAuNSAwIDMyIDI0LjEgMjMuMSA0MC44bC0xODUuNSAwYy0xMS4zIDAtMjAuNC05LjEtMjAuNC0yMC40czkuMS0yMC40IDIwLjQtMjAuNGw1MiAwIDY2LjYtMTE1LjQtMjAuOC0zNi4xYy01LjYtOS44LTIuMy0yMi4yIDcuNS0yNy45IDkuOC01LjYgMjIuMi0yLjMgMjcuOSA3LjVsOC45IDE1Ljd6bS03OC43IDIxOGwtMTkuNiAzNGMtNS42IDkuOC0xOC4xIDEzLjEtMjcuOSA3LjVzLTEzLjEtMTguMS03LjUtMjcuOWwxNC42LTI1LjJjMTYuNC01LjEgMjkuOC0xLjIgNDAuNCAxMS42em0xNjguOS02MS43bDUzLjEgMGMxMS4zIDAgMjAuNCA5LjEgMjAuNCAyMC40UzQxMC41IDMxOCAzOTkuMiAzMThsLTI5LjUgMCAxOS45IDM0LjVjNS42IDkuOCAyLjMgMjIuMi03LjUgMjcuOS05LjggNS42LTIyLjIgMi4zLTI3LjktNy41LTMzLjUtNTguMS01OC43LTEwMS42LTc1LjQtMTMwLjYtMTcuMS0yOS41LTQuOS01OS4xIDcuMi02OS4xIDEzLjQgMjMgMzMuNCA1Ny43IDYwLjEgMTA0ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQwIDI1NmEyMTYgMjE2IDAgMSAxIDQzMiAwIDIxNiAyMTYgMCAxIDEgLTQzMiAweiJdCiAgICB9OwogICAgZmFXaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2l4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1Y2YiLCAiTTM5My40IDEzMS43YzAgMTMgMi4xIDMyLjctMjguNyA0My44LTkuNSAzLjQtMTYgOS43LTE2IDkuNyAwLTMxIDQuNy00Mi4yIDE3LjQtNDguOSA5LjgtNS4xIDI3LjItNC42IDI3LjItNC42ek0yNzcuNiAxNjcuMmwtMzQuMiAxMzIuNy0yOC41LTEwOC42Yy03LjctMzItMjAuOC00OC41LTQ4LjQtNDguNS0yNy40IDAtNDAuNyAxNi4yLTQ4LjQgNDguNUw4OS41IDI5OS45IDU1LjMgMTY3LjJDNDkuNyAxNDAuNSAyMy45IDEyOSAwIDEzMkw2NS42IDM3OS45czIxLjYgMS42IDMyLjUtNGMxNC4yLTcuMiAyMS0xMi44IDI5LjYtNDYuNiA3LjctMzAuMSAyOS4xLTExOC40IDMxLjEtMTI0LjcgNC44LTE0LjkgMTEuMS0xMy44IDE1LjQgMCAyIDYuMyAyMy41IDk0LjYgMzEuMSAxMjQuNyA4LjYgMzMuNyAxNS40IDM5LjMgMjkuNiA0Ni42IDEwLjggNS41IDMyLjUgNCAzMi41IDRMMzMyLjkgMTMyYy0yNC40LTMuMS00OS44IDguOS01NS4zIDM1LjN6bTExNS44IDUuMnMtNC4xIDYuMy0xMy41IDExLjZjLTYgMy40LTExLjggNS42LTE4IDguNi0xNS4xIDcuMy0xMy4yIDEzLjktMTMuMiAzNS4ybDAgMTUyLjFzMTYuNiAyLjEgMjcuNC0zLjRjMTMuOS03LjEgMTcuMS0xNCAxNy4zLTQ0LjhsMC0xNTAuMyAwIDAgMC05em0xNjMuNCA4NC4xTDY0MCAxMzIuOHMtMzUuMS02LTUyLjUgOS44Yy0xMy4zIDEyLjEtMjQuNCAyOS42LTU0LjIgNzIuNS0uNSAuNy02LjMgMTAuNS0xMy4xIDAtMjkuMy00Mi4yLTQwLjgtNjAuMy01NC4yLTcyLjUtMTcuNC0xNS44LTUyLjUtOS44LTUyLjUtOS44bDgzLjIgMTIzLjctODMgMTIzLjRzMzYuNiA0LjYgNTQtMTEuMmMxMS41LTEwLjUgMTcuNi0yMC40IDUyLjUtNzAuNyA2LjgtMTAuNSAxMi42LS44IDEzLjEgMCAyOS40IDQyLjQgMzkuMiA1OC4xIDUzLjEgNzAuNyAxNy40IDE1LjggNTMuMyAxMS4yIDUzLjMgMTEuMmwtODMtMTIzLjR6Il0KICAgIH07CiAgICBmYUludGVyY29tID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImludGVyY29tIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YWYiLCAiTTM5MiAzMkw1NiAzMkMyNS4xIDMyIDAgNTcuMSAwIDg4TDAgNDI0YzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMzNiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtMzM2YzAtMzAuOS0yNS4xLTU2LTU2LTU2ek0yODMuNyAxMTQuMWMwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDE5OS41YzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTk5LjV6bS03NC42LTcuNWMwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDIxNi41YzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMjE2LjV6bS03NC43IDcuNWMwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDE5OS41YzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTk5LjV6TTU5LjcgMTQ0YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTM0LjNjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xMzQuM3pNMzgzLjEgMzcxLjhjLTcyLjggNjMtMjQxLjcgNjUuNC0zMTguMSAwLTE1LTEyLjggNC40LTM1LjUgMTkuNC0yMi43IDY1LjkgNTUuMyAyMTYuMSA1My45IDI3OS4zIDAgMTQuOS0xMi45IDM0LjMgOS44IDE5LjQgMjIuN3ptNS4yLTkzLjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xMzQuM2MwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDEzNC4zeiJdCiAgICB9OwogICAgZmFSZWFjdGV1cm9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFjdGV1cm9wZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzVkIiwgIk0yNTAuNyAyMTEuN2w1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMiA2Ljh6bTYzLjcgMGw1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMi0uMS0yLjMtNi44LTIuMyA2LjgtNy4yIC4xIDUuNyA0LjMtMS45IDYuOHptLTkxLjMgNTAuNWwtMy40IDBjLTQuOCAwLTMuOCA0LTMuOCAxMi4xIDAgNC43LTIuMyA2LjEtNS44IDYuMXMtNS44LTEuNC01LjgtNi4xbDAtMzYuNmMwLTQuNyAyLjMtNi4xIDUuOC02LjFzNS44IDEuNCA1LjggNi4xYzAgNy4yLS43IDEwLjUgMy44IDEwLjVsMy40IDBjNC43LS4xIDMuOC0zLjkgMy44LTEyLjMgMC05LjktNi43LTE0LjEtMTYuOC0xNC4xbC0uMiAwYy0xMC4xIDAtMTYuOCA0LjItMTYuOCAxNC4xbDAgNDAuMWMwIDEwLjQgNi43IDE0LjEgMTYuOCAxNC4xbC4yIDBjMTAuMSAwIDE2LjgtMy44IDE2LjgtMTQuMSAwLTkuOSAxLjEtMTMuOC0zLjgtMTMuOHptLTgwLjcgMTcuNGwtMTQuNyAwIDAtMTkuMyAxMS40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMTEuNCAwIDAtMTguMyAxNC40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMjEuNyAwYy0yLjQtLjEtMy43IDEuMy0zLjcgMy44bDAgNTkuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMjEuOSAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjh6bS00Mi0xOC41YzQuNi0yIDcuMy02IDcuMy0xMi40bDAtMTEuOWMwLTEwLjEtNi43LTE0LjEtMTYuOC0xNC4xbC0xMy40IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDU5LjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDMuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIyLjkgNS42IDAgNy40IDIzLjVjLjIgMSAuOCAxLjggMS42IDIuNHMxLjggLjkgMi43IC44bDMuMyAwYzIuOCAwIDQtMS44IDMuMi00LjRsLTguMS0yMy45em0tMy44LTE0YzAgNC44LTIuNSA2LjEtNi4xIDYuMWwtNS44IDAgMC0yMC45IDUuOCAwYzMuNiAwIDYuMSAxLjMgNi4xIDYuMWwwIDguN3pNMTc2LjEgMjI2Yy0uMS0uNS0uMi0xLS40LTEuNHMtLjYtLjgtMS0xLjEtLjgtLjYtMS4zLS43LTEtLjItMS41LS4xbC02LjkgMGMtLjUgMC0xIDAtMS40IC4ycy0uOSAuNC0xLjMgLjctLjcgLjctLjkgMS4xLS40IC45LS40IDEuNGwtMTEgNTkuMmMtLjUgMi43IC45IDQuMSAzLjQgNC4xbDMgMGMuNSAuMSAxIDAgMS41LS4ycy45LS40IDEuMy0uNyAuNy0uNyAuOS0xLjIgLjQtLjkgLjQtMS40bDEuOC0xMS4zIDEyLjIgMCAxLjggMTEuM2MwIC41IC4yIDEgLjQgMS40cy41IC45IC45IDEuMiAuOCAuNiAxLjMgLjcgMSAuMiAxLjUgLjJsMy41IDBjMi42IDAgMy45LTEuNCAzLjQtNC4xTDE3Ni4xIDIyNnptLTEyLjMgMzkuM2w0LjctMjkuNyA0LjcgMjkuNy05LjQgMHptODkuMyAyMC4ybDAtNTMuMiA3LjUgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0yNS44IDBjLTIuNSAwLTMuOCAxLjMtMy44IDMuOGwwIDIuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsNy4zIDAgMCA1My4yYzAgMi41IDEuMyAzLjggMy44IDMuOGwzLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMCAwem0yNDgtLjhsLTE5LjQgMCAwLTI2LjcgMTYuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTE2LjEgMCAwLTI1LjggMTkuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTIyLjIgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMjIuNSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsMCAwek00MDggMjIxLjhsLS44IDBjLTEwLjEgMC0xNS4zIDQuNy0xNS4zIDE0LjFsMCA0MC4xYzAgOS4zIDUuMiAxNC4xIDE1LjMgMTQuMWwuOCAwYzEwLjEgMCAxNS4zLTQuOCAxNS4zLTE0LjFsMC00MC4xYzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMWwwIDB6bTEwLjIgNTIuNGMtLjEgOC0zIDExLjEtMTAuNSAxMS4xcy0xMC41LTMuMS0xMC41LTExLjFsMC0zNi42YzAtNy45IDMtMTEuMSAxMC41LTExLjFzMTAuNSAzLjIgMTAuNSAxMS4xbDAgMzYuNnptLTQ2LjUtMTQuNWM2LjEtMS42IDkuMi02LjEgOS4yLTEzLjNsMC05LjdjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xbC0xMy43IDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuOSAxMS42IDAgMTAuNCAyNy4yYy4yIC41IC41IC45IC45IDEuMXMuOSAuNCAxLjQgLjRsMS41IDBjMS40IDAgMi0xIDEuNS0yLjNsLTEwLjYtMjcuM3ptLTYuNC0zLjlsLTEwLjIgMCAwLTI4LjUgMTAuMiAwYzcuNSAwIDEwLjUgMy4xIDEwLjUgMTEuMWwwIDYuNGMwIDcuOC0zIDExLTEwLjUgMTFsMCAwem04NS45LTMzLjFsLTEzLjcgMGMtLjMtLjEtLjUtLjEtLjggMHMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjctLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMS4yIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC42LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtMjYuMSAxMC42IDBjMTAuMSAwIDE1LjMtNC44IDE1LjMtMTQuMWwwLTEwLjVjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xem0xMC4yIDIyLjhjMCA3LjktMyAxMS4xLTEwLjUgMTEuMWwtMTAuMiAwIDAtMjkuMiAxMC4yIDBjNy41LS4xIDEwLjUgMy4xIDEwLjUgMTFsMCA3LjF6TTI1OS42IDMwOGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6TTQ4Ny4yIDE3MS45Yy0xMS43LTQuNC0yMy41LTguMS0zNS42LTExLjMgMTkuNi03OCAxMS42LTEzNC43LTIyLjMtMTUzLjktMzQuNS0xOS40LTg1LjkgNC4zLTEzOC4yIDU1LjIgMy40IDMuMyA2LjggNi43IDEwLjIgMTAuMiA4Mi41LTgwIDExOS42LTUzLjUgMTIwLjktNTIuOCAyMi40IDEyLjcgMzYgNTUuOCAxNS41IDEzNy44LTI3LjgtNi40LTU2LjEtMTAuNy04NC42LTEzLTcxLjktMTAwLjUtMTQwLjYtMTQyLjEtMTgyLjItMTQyLjEtMzAuOCAwLTQzLjggMjEtNDcuNiAyNy43LTE4LjEgMzItMTMuMyA4NC4yIC4xIDEzMy44LTcwLjUgMjAuMy0xMjAuNyA1NC4xLTEyMC4zIDk1IC41IDU5LjYgMTAzLjIgODcuOCAxMjIuMSA5Mi44LTIwLjUgODEuOS0xMC4xIDEzNS42IDIyLjMgMTUzLjkgMjggMTUuOCA3NS4xIDYgMTM4LjItNTUuMi0zLjQtMy4zLTYuOC02LjctMTAuMi0xMC4yLTgyLjUgODAtMTE5LjcgNTMuNS0xMjAuOSA1Mi44LTIyLjMtMTIuNi0zNi01NS42LTE1LjUtMTM3LjkgMTIuNCAyLjkgNDEuOCA5LjUgODQuNiAxMyA3MS45IDEwMC40IDE0MC42IDE0MiAxODIuMSAxNDIgMzAuOCAwIDQzLjgtMjEgNDcuNi0yNy43IDE4LTMxLjkgMTMuMy04NC4xLS4xLTEzMy44IDE1Mi4zLTQzLjggMTU2LjItMTMwLjIgMzMuOS0xNzYuM2wwIDB6TTEzNiAzNi44YzIuOS01LjEgMTEuOS0yMC4zIDM0LjktMjAuMyAzNi44IDAgOTguOCAzOS42IDE2My4zIDEyNi4yLTMxLjMtMS44LTYyLjctMS41LTkzLjkgLjkgMTMtMTguMyAyNy4xLTM1LjggNDIuMi01Mi40LTMuNC0zLjUtNi44LTYuOS0xMC4yLTEwLjItMTguMyAyMC4yLTM1LjMgNDEuNy01MC43IDY0LjItMjguNSAyLjctNTYuNyA3LjYtODQuNCAxNC42LS4yLTEuNC0yNC4zLTgyLjItMS4yLTEyM2wwIDB6TTQ0MC44IDQ3NS4xYy0yLjkgNS4xLTExLjggMjAuMy0zNC45IDIwLjMtMzYuNyAwLTk4LjctMzkuNC0xNjMuMy0xMjYuMiAzMS4zIDEuOCA2Mi43IDEuNSA5My45LS45LTEzIDE4LjMtMjcuMSAzNS44LTQyLjIgNTIuNCAzLjQgMy41IDYuOCA2LjkgMTAuMiAxMC4yIDE4LjQtMjAuMiAzNS4zLTQxLjcgNTAuNy02NC4yIDQ3LjMtNC43IDgwLjMtMTMuNSA4NC40LTE0LjYgMjIuNyA4NC40IDQuNSAxMTcgMS4yIDEyM3ptOS4xLTEzOC42Yy0zLjYtMTEuOS03LjctMjQuMS0xMi40LTM2LjQtMi4xIDAtNC4yLS41LTYuMS0xLjVzLTMuNS0yLjQtNC42LTQuMmwtLjEgLjFjLTEuNiAxLjUtMy40IDIuNy01LjQgMy42IDUuNyAxNC4zIDEwLjYgMjguNCAxNC43IDQyLjItMjMuNyA2LTQ3LjcgMTAuMy03MiAxMyAzLjUtNS4zIDE3LjItMjYuMiAzMi4yLTU0LjItMi4xLS44LTQuMi0xLjktNi0zLjItMS4xIDEuMi0zLjYgNC4yLTEwLjkgNC4yLTYuMiAxMS4yLTE3LjQgMzAuOS0zMy45IDU1LjItMzcuNCAzLjMtNzUgMy42LTExMi40IDEtNy45LTExLjItMjEuNS0zMS4xLTM2LjgtNTcuOC0xLS40LTItLjktMy0xLjUtMS45IDEuNi0zLjkgMy4yLTEyLjYgMy4yIDYuMyAxMS4yIDE3LjUgMzAuNyAzMy44IDU0LjYtMjQuMy0yLjMtNDguNC02LjItNzIuMi0xMS43IDMuOS0xNCA4LjYtMjguMyAxNC4xLTQyLjktMy4yIDAtNS40IC4yLTguNC0xLTIuMiAuOC00LjYgMS4xLTYuOSAxLTQuOSAxMy40LTkuMSAyNi41LTEyLjcgMzkuNC0xNTkuOS00Mi42LTE0MC4zLTEyMy42LTEuNS0xNjQgMy42IDExLjkgNy43IDI0LjEgMTIuNCAzNi40IDEwLjQgMCAxMi45IDMuNCAxNC40IDUuMyAuNy0uOCAxLjQtMS42IDIuMy0yLjItNS44LTE0LjctMTAuOS0yOS4yLTE1LjItNDMuMyA3LTEuOCAzMi40LTguNCA3Mi0xMy0xNS45IDI0LjMtMjYuNyA0My45LTMyLjggNTUuMyAzLjEgMS44IDUuMyA0LjYgNi40IDggMi41LTMuNyA2LjEtNi42IDEwLjItOC40IDYuNS0xMS43IDE3LjktMzEuOSAzNC44LTU2LjkgMzcuNC0zLjMgNzUtMy42IDExMi40LTEgMzEuNSA0NC42IDI4LjkgNDguMSA0Mi41IDY0LjUgMi42LTMuNSA2LjMtNiAxMC40LTcuNC02LjQtMTEuNC0xNy42LTMxLTM0LjMtNTUuNSA0MC40IDQuMSA2NSAxMCA3Mi4yIDExLjctNCAxNC40LTguOSAyOS4yLTE0LjYgNDQuMiAyLjUgMSA0LjggMi40IDYuOCA0LjNsLjEgLjFjMS0xLjUgMi4zLTIuOCAzLjgtMy44czMuMy0xLjYgNS4xLTEuOGM0LjktMTMuNCA5LjItMjYuNiAxMi44LTM5LjUgMTEuNyAzLjEgMjMuMiA2LjggMzQuNSAxMSAxMDYuMSAzOS45IDc0IDg3LjkgNzIuNiA5MC40LTE5LjggMzUuMS04MC4xIDU1LjItMTA1LjcgNjIuNXptLTExNC40LTExNGwtMS4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjYgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA0OS44YzAgNy45LTIuNiAxMS4xLTEwLjEgMTEuMXMtMTAuMS0zLjEtMTAuMS0xMS4xbDAtNDkuOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDUxLjVjMCA5LjYgNSAxNC4xIDE1LjEgMTQuMWwuNCAwYzEwLjEgMCAxNS4xLTQuNiAxNS4xLTE0LjFsMC01MS41YzAtLjMtLjEtLjUtLjItLjhzLS4zLS41LS41LS42LS40LS4zLS43LS40LS41LS4xLS44LS4xek0zMjEuOCAzMDhsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem0tMzEuMSA3LjRsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xem01LjEtMzAuOGwtMTkuNCAwIDAtMjYuNyAxNi4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMTYuMSAwIDAtMjUuOCAxOS4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMjIuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDIyLjUgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjYtLjEtLjhzLS4yLS41LS40LS43LS40LS40LS43LS40LS41LS4xLS44LS4xbDAgMHptLTcuNC05OS40bC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjEtMi4zLTYuOHoiXQogICAgfTsKICAgIGZhV2F6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3YXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2YiLCAiTTUwMi42IDIwMS43YzE0LjUgODUuOS0zMC45IDE2Ny45LTExMy4yIDIwOC4xIDEzIDM0LjEtMTIuNCA3MC4yLTQ4LjMgNzAuMi0xMy4yIDAtMjYtNS4xLTM1LjYtMTQuMnMtMTUuMy0yMS42LTE2LTM0LjhjLTYuNCAuMi02NC4yIDAtNzYuMy0uNi0uMyA2LjgtMS45IDEzLjUtNC43IDE5LjZzLTYuOSAxMS43LTExLjkgMTYuMy0xMC44IDguMi0xNy4yIDEwLjUtMTMuMiAzLjQtMTkuOSAzLjFjLTMzLjktMS40LTU4LTM0LjgtNDctNjcuOS0zNy4yLTEzLjEtNzIuNS0zNC45LTk5LjYtNzAuOC0xMy0xNy4zLS41LTQxLjggMjAuOC00MS44IDQ2LjMgMCAzMi4yLTU0LjIgNDMuMi0xMTAuMyAxOC40LTkzLjkgMTE2LjgtMTU3LjEgMjExLjctMTU3LjEgMTAyLjUgMCAxOTcuMiA3MC43IDIxNC4xIDE2OS43ek0zNzMuOSAzODguM2M0Mi0xOS4yIDgxLjMtNTYuNyA5Ni4zLTEwMi4xIDQwLjUtMTIzLjEtNjQuMi0yMjgtMTgxLjctMjI4LTgzLjQgMC0xNzAuMyA1NS40LTE4Ni4xIDEzNi05LjUgNDguOSA1IDEzMS40LTY4LjcgMTMxLjQgMjQuOSAzMy4xIDU4LjMgNTIuNiA5My43IDY0IDI0LjctMjEuOCA2My45LTE1LjUgNzkuOCAxNC4zIDE0LjIgMSA3OS4yIDEuMiA4Ny45IC44IDMuNS02LjkgOC41LTEyLjkgMTQuNy0xNy41czEzLjItNy45IDIwLjgtOS41IDE1LjQtMS40IDIyLjkgLjQgMTQuNSA1LjMgMjAuNSAxMC4yek0yMDUuNSAxODcuMWMwLTM0LjcgNTAuOC0zNC43IDUwLjggMHMtNTAuOCAzNC43LTUwLjggMHptMTE2LjYgMGMwLTM0LjcgNTAuOS0zNC43IDUwLjkgMHMtNTAuOSAzNC44LTUwLjkgMHpNMTk5LjUgMjU3LjhjLTMuNC0xNi45IDIyLjItMjIuMiAyNS42LTUuMmwuMSAuM2M0LjEgMjEuNCAyOS44IDQ0IDY0LjEgNDMuMSAzNS43LS45IDU5LjMtMjIuMiA2NC4xLTQyLjggNC41LTE2LjEgMjguNi0xMC40IDI1LjUgNi01LjIgMjIuMi0zMS4yIDYyLTkxLjUgNjIuOS00Mi42IDAtODAuOS0yNy44LTg3LjktNjQuMmwwIDB6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1JlbWl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtcmVtaXgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlZSIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek00MTguMSAyNjAuNGw0LjkgMi4yIDAgNzBjLTcuMiAzLjYtNjMuNCAyNy41LTY3LjMgMjguOC02LjUtMS44LTExMy43LTQ2LjgtMTM3LjMtNTYuMmwtNjQuMiAyNi42LTYzLjMtMjcuNSAwLTYzLjggNTkuMy0yNC44Yy0uNy0uNy0uNCA1LS40LTcwLjRsNjcuMy0yOS43IDE1MS45IDYyLjkgMCA2MS42IDQ5LjEgMjAuM3ptLTcwLjQgODEuNWwwLTQzLjgtLjQgMCAwLTEuOC0xMTMuOC00Ni41IDAgNDUuMiAxMTMuOCA0Ni45IDAtLjQgLjQgLjR6bTcuNS01Ny42bDM5LjktMTYuNC0zNi44LTE1LjUtMzkgMTYuNCAzNS45IDE1LjV6bTUyLjMgMzguMWwwLTQzLTQ0LjMgMTguNiAwIDQzLjQgNDQuMy0xOXoiXQogICAgfTsKICAgIGZhQmFuZGNhbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmFuZGNhbXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkNSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em00OC4yIDMyNi4xbC0xODEgMCA4NC43LTE1Ni4xIDE4MSAwLTg0LjcgMTU2LjF6Il0KICAgIH07CiAgICBmYVNxdWFyZVdlYkF3ZXNvbWVTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXdlYi1hd2Vzb21lLXN0cm9rZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjg0IiwgIk02NCA2NEM0Ni4zIDY0IDMyIDc4LjMgMzIgOTZsMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMNjQgNjR6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMzUgODEuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdCiAgICB9OwogICAgZmFWaW1lb1YgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmltZW8tdiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjdkIiwgIk00NDcuOCAxNTMuNmMtMiA0My42LTMyLjQgMTAzLjMtOTEuNCAxNzkuMS02MC45IDc5LjItMTEyLjQgMTE4LjgtMTU0LjYgMTE4LjgtMjYuMSAwLTQ4LjItMjQuMS02Ni4zLTcyLjMtMzUuMi0xMjkuMi01MC4yLTIwNC45LTc5LjMtMjA0LjktMy40IDAtMTUuMSA3LjEtMzUuMiAyMS4xTDAgMTY4LjJjNTEuNi00NS4zIDEwMC45LTk1LjcgMTMxLjgtOTguNSAzNC45LTMuNCA1Ni4zIDIwLjUgNjQuNCA3MS41IDI4LjcgMTgxLjUgNDEuNCAyMDguOSA5My42IDEyNi43IDE4LjctMjkuNiAyOC44LTUyLjEgMzAuMi02Ny42IDQuOC00NS45LTM1LjgtNDIuOC02My4zLTMxIDIyLTcyLjEgNjQuMS0xMDcuMSAxMjYuMi0xMDUuMSA0NS44IDEuMiA2Ny41IDMxLjEgNjQuOSA4OS40eiJdCiAgICB9OwogICAgZmFTdHJhdmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyYXZhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MjgiLCAiTTE1OC40IDBMNyAyOTIgOTYuMiAyOTIgMTU4LjQgMTc1LjkgMjIwLjEgMjkyIDMwOC42IDI5MiAxNTguNCAwek0zMDguNiAyOTJsLTQzLjkgODguMi00NC42LTg4LjItNjcuNiAwIDExMi4yIDIyMCAxMTEuNS0yMjAtNjcuNiAweiJdCiAgICB9OwogICAgZmFVbmlyZWdpc3RyeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bmlyZWdpc3RyeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDA0IiwgIk0xOTIgNDgwYzM5LjUgMCA3Ni4yLTExLjggMTA2LjgtMzIuMmwtMjEzLjUgMEMxMTUuOCA0NjguMiAxNTIuNSA0ODAgMTkyIDQ4MHpNMTAyLjkgMjg2LjlsMC0xMi40LTEwMi45IDAgMCAxMi40YzAgMi41IDAgNSAuMSA3LjRsMTAzLjEgMGMtLjItMi40LS4zLTQuOS0uMy03LjR6bTIwLjUgNTdsLTExNC45IDBjMi42IDguNSA1LjggMTYuOCA5LjYgMjQuOGwxMzguMyAwYy0xMi45LTUuNy0yNC4xLTE0LjItMzMtMjQuOHptLTE3LjctMzQuN2wtMTA0LjQgMGMuOSA3LjYgMi4yIDE1IDMuOSAyMi4zbDEwOS43IDBjLTQtNi45LTcuMi0xNC40LTkuMi0yMi4zem0tMi44LTY5LjNsLTEwMi45IDAgMCAxNy4zIDEwMi45IDAgMC0xNy4zem0wLTE3My4ybC0xMDIuOSAwIDAgNC45IDEwMi45IDAgMC00Ljl6bTAtMzQuN2wtMTAyLjkgMCAwIDIuNSAxMDIuOSAwIDAtMi41em0wIDY5LjNsLTEwMi45IDAgMCA3LjQgMTAyLjkgMCAwLTcuNHptMCAxMDRsLTEwMi45IDAgMCAxNC44IDEwMi45IDAgMC0xNC44em0wLTY5LjNsLTEwMi45IDAgMCA5LjkgMTAyLjkgMCAwLTkuOXptMCAzNC42bC0xMDIuOSAwIDAgMTIuNCAxMDIuOSAwIDAtMTIuNHpNMjY5LjEgMzMxLjVsMTA5LjcgMGMxLjgtNy4zIDMuMS0xNC43IDMuOS0yMi4zbC0xMDQuNCAwYy0yLjEgNy45LTUuMiAxNS40LTkuMiAyMi4zem0xMi0xODUuN2wxMDIuOSAwIDAtOS44LTEwMi45IDAgMCA5Ljh6bTAgMzcuMmwxMDIuOSAwIDAtMTIuNC0xMDIuOSAwIDAgMTIuNHptMC03NC4zbDEwMi45IDAgMC03LjQtMTAyLjkgMCAwIDcuNHptMC03Ni43bDAgMi41IDEwMi45IDAgMC0yLjUtMTAyLjkgMHpNNzguMSA0NDIuOWwyMjcuNyAwYzExLjgtOC43IDIyLjctMTguNiAzMi4yLTI5LjdsLTI5My4xIDBjOS42IDExIDIxLjQgMjEgMzMuMiAyOS43em0yMDMtMzcxLjNsMTAyLjkgMCAwLTQuOS0xMDIuOSAwIDAgNC45em0wIDE0OC41bDEwMi45IDAgMC0xNC44LTEwMi45IDAgMCAxNC44ek0zOC44IDQwNS43bDMwNS4zIDBjNi43LTguNSAxMi42LTE3LjYgMTcuOC0yNy4yTDIzIDM3OC41YzUuMiA5LjYgOS4yIDE4LjcgMTUuOCAyNy4yem0xODguOC0zNy4xbDEzOS40IDBjMy43LTggNS44LTE2LjIgOC41LTI0LjhsLTExNSAwYy04LjggMTAuNy0yMC4xIDE5LjItMzIuOSAyNC44em01My41LTgxLjdjMCAyLjUtLjEgNS0uNCA3LjRsMTAzLjEgMGMuMS0yLjUgLjItNC45IC4yLTcuNGwwLTEyLjQtMTAyLjkgMCAwIDEyLjR6bTAtMjkuN2wxMDIuOSAwIDAtMTcuMy0xMDIuOSAwIDAgMTcuM3oiXQogICAgfTsKICAgIGZhQ2NEaW5lcnNDbHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWRpbmVycy1jbHViIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNGMiLCAiTTIzOS43IDc5LjlhMTc1LjggMTc1LjggMCAxIDAgMCAzNTEuNiAxNzUuOCAxNzUuOCAwIDEgMCAwLTM1MS42ek0xOTkuOCAzNTkuNWMtNDEuNy0xNS45LTcxLjQtNTYuNC03MS40LTEwMy44czI5LjctODcuOSA3MS40LTEwNC4xbDAgMjA3Ljl6bTc5LjggLjNsMC0yMDguMmM0MS43IDE2LjIgNzEuNCA1Ni43IDcxLjQgMTA0LjFzLTI5LjcgODcuOS03MS40IDEwNC4xek01MjggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNMzI5LjcgNDQ4bC05MC4zIDBDMTMzLjIgNDQ4IDQ1LjYgMzYyLjUgNDUuNiAyNTcuOCA0NS42IDE0My4yIDEzMy4yIDY0IDIzOS40IDY0bDkwLjMgMGMxMDUgMCAyMDAuNyA3OS4yIDIwMC43IDE5My44IDAgMTA0LjctOTUuNyAxOTAuMi0yMDAuNyAxOTAuMnoiXQogICAgfTsKICAgIGZhS3ViZXJuZXRlcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrdWJlcm5ldGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NTciLCAiTTI1NiAzMTYuMWMzLjUtLjEgNy4yIDIgOC45IDUuMUwyOTMgMzcxLjdjLTMuNiAxLjItNy4zIDIuMy0xMS4yIDMuMS0yMS40IDQuOS00Mi43IDMuNC02Mi0zLjJsMjcuOS01MC40YzEuNy0zLjEgNC45LTUgOC4yLTUuMXptNTAuNS0yMy40bDU3LjIgOS43Yy04LjQgMjMuNS0yNC40IDQzLjktNDUuOCA1Ny41bC0yMi4yLTUzLjZjLTItNC43IC4xLTEwLjQgNC44LTEyLjYgMS45LS45IDQuMS0xLjMgNi0uOXptLTg5LjEgNy43Yy41IDIuMSAuMyA0LjItLjUgNmwtMjEuOCA1My4zYy0yMC41LTEzLjItMzYuOS0zMi45LTQ1LjctNTcuMWw1Ni43LTkuNmM1LjEtLjkgMTAuMSAyLjQgMTEuMyA3LjV6bTU4LjgtNDFsLTMuOSAxNy4xLTE1LjggNy42LTE1LjktNy43LTQtMTcuMSAxMS0xMy43IDE3LjcgMCAxMSAxMy43em0tNzMuNy0xNi43YzMuOSAzLjQgNC40IDkuNSAxLjIgMTMuNi0xLjMgMS43LTMuMSAyLjgtNSAzLjNsLTU1LjMgMTYuMmMtMi44LTI1LjcgMy4zLTUwLjcgMTYuMS03MS42bDQzLjEgMzguNnptMTUwLjctMzguNWM2LjQgMTAuNCAxMS4yIDIyIDE0LjEgMzQuNiAyLjkgMTIuNCAzLjYgMjQuOCAyLjQgMzYuOGwtNTUuNi0xNmMtNS0xLjQtOC4xLTYuNy02LjktMTEuNyAuNS0yLjEgMS42LTMuOCAzLjEtNS4xbDQyLjktMzguNXptLTExMy44IDQuNGMtLjIgNS4yLTQuNyA5LjQtOS45IDkuNC0yLjEgMC00LjEtLjctNS43LTEuOGwtNDcuMy0zMy40YzE0LjUtMTQuMyAzMy4xLTI0LjggNTQuNS0yOS43IDMuOS0uOSA3LjgtMS42IDExLjctMmwtMy4zIDU3LjZ6bTMwLjgtNTcuNmMyNSAzLjEgNDguMSAxNC40IDY1LjggMzEuN2wtNDcuMSAzMy4yYy00LjIgMy0xMCAyLjMtMTMuMy0xLjgtMS4zLTEuNy0yLTMuNi0yLjEtNS42bC0zLjMtNTcuNXpNMjU0LjUtMS4zYzUuOS0uMyAxMS43IC45IDE3IDMuNEw0NTUgODkuN2M0LjcgMi4zIDguOSA1LjYgMTIuMiA5LjdzNS42IDguOCA2LjggMTMuOWw0NS4zIDE5Ni45YzEuMiA1LjEgMS4yIDEwLjQgMCAxNS41cy0zLjUgOS45LTYuOCAxMy45TDM4NS42IDQ5Ny42Yy0zLjMgNC4xLTcuNSA3LjQtMTIuMiA5LjZzLTEwIDMuNC0xNS4yIDMuNGwtMjAzLjYgMGMtNS4zIDAtMTAuNS0xLjItMTUuMi0zLjRzLTguOS01LjUtMTIuMi05LjZMLjIgMzM5LjdjLS43LS45LTEuNC0xLjgtMi0yLjgtMi42LTMuOS00LjMtOC4zLTUuMS0xMi45cy0uNy05LjMgLjMtMTMuOEwzOC43IDExMy40YzEuMi01LjEgMy41LTkuOSA2LjgtMTMuOXM3LjUtNy40IDEyLjItOS43TDI0MS4xIDIuMWM0LjItMiA4LjgtMy4yIDEzLjQtMy40em0xLjggNjdjLTYuMSAwLTExIDUuNS0xMSAxMi4yIDAgLjEgMCAuMiAwIC4zIDAgLjktLjEgMiAwIDIuOCAuMSAzLjkgMSA2LjkgMS41IDEwLjQgLjkgNy43IDEuNyAxNCAxLjIgMTkuOS0uNSAyLjItMi4xIDQuMy0zLjYgNS43bC0uMiA0LjZjLTYuNiAuNS0xMy4yIDEuNi0xOS44IDMuMS0yOC41IDYuNS01My4xIDIxLjEtNzEuOCA0MS0xLjItLjgtMy4zLTIuMy00LTIuOC0yIC4zLTQgLjktNi41LS42LTQuOS0zLjMtOS40LTcuOS0xNC44LTEzLjQtMi41LTIuNi00LjMtNS4xLTcuMi03LjctLjctLjYtMS43LTEuNC0yLjQtMi0yLjMtMS44LTUtMi44LTcuNy0yLjktMy40LS4xLTYuNiAxLjItOC44IDMuOS0zLjggNC43LTIuNSAxMiAyLjcgMTYuMiAuMSAwIC4xIC4xIC4yIC4xIC43IC42IDEuNiAxLjMgMi4zIDEuOCAzLjEgMi4zIDYgMy41IDkuMSA1LjMgNi42IDQuMSAxMiA3LjQgMTYuMyAxMS41IDEuNyAxLjggMiA0LjkgMi4yIDYuM2wzLjUgMy4yYy0xOC44IDI4LjQtMjcuNiA2My40LTIyLjQgOTkuMWwtNC42IDEuM2MtMS4yIDEuNi0yLjkgNC00LjcgNC43LTUuNiAxLjgtMTIgMi40LTE5LjcgMy4zLTMuNiAuMy02LjcgLjEtMTAuNSAuOC0uOCAuMi0yIC40LTIuOSAuN2wtLjEgMC0uMiAuMWMtNi41IDEuNi0xMC43IDcuNS05LjMgMTMuNCAxLjMgNS45IDcuNyA5LjQgMTQuMiA4bC4yIDBjLjEgMCAuMS0uMSAuMi0uMSAuOS0uMiAyLjEtLjQgMi44LS42IDMuOC0xIDYuNS0yLjUgOS44LTMuOCA3LjMtMi42IDEzLjMtNC44IDE5LjItNS42IDIuNC0uMiA1IDEuNSA2LjMgMi4ybDQuOC0uOGMxMSAzNC4xIDM0LjEgNjEuNyA2My4zIDc5LjFsLTIgNC44Yy43IDEuOSAxLjUgNC40IDEgNi4yLTIuMSA1LjUtNS44IDExLjQtOS45IDE3LjktMiAzLTQuMSA1LjMtNS45IDguOC0uNCAuOC0xIDIuMS0xLjQgMy0yLjggNi0uOCAxMyA0LjcgMTUuNiA1LjUgMi42IDEyLjItLjEgMTUuMi02LjJsMCAwYy40LS45IDEtMiAxLjQtMi44IDEuNi0zLjYgMi4xLTYuNiAzLjItMTAuMSAyLjktNy4zIDQuNS0xNC45IDguNS0xOS43IDEuMS0xLjMgMi45LTEuOCA0LjgtMi4zbDIuNS00LjVjMjUuNSA5LjggNTQgMTIuNCA4Mi41IDUuOSA2LjUtMS41IDEyLjgtMy40IDE4LjgtNS43IC43IDEuMiAyIDMuNiAyLjMgNC4yIDEuOSAuNiAzLjkgLjkgNS42IDMuNCAzIDUuMSA1IDExLjIgNy41IDE4LjUgMS4xIDMuNCAxLjYgNi41IDMuMiAxMC4xIC40IC44IDEgMiAxLjQgMi44IDIuOSA2LjEgOS43IDguOCAxNS4yIDYuMiA1LjQtMi42IDcuNS05LjYgNC43LTE1LjYtLjQtLjktMS0yLjEtMS40LTMtMS44LTMuNC0zLjktNS43LTUuOS04LjctNC4yLTYuNS03LjYtMTEuOS05LjgtMTcuNC0uOS0yLjggLjItNC42IC44LTYuNS0uNC0uNS0xLjMtMy4yLTEuOC00LjQgMzAuNC0xNy45IDUyLjgtNDYuNiA2My4zLTc5LjYgMS40IC4yIDMuOSAuNyA0LjcgLjggMS43LTEuMSAzLjItMi41IDYuMi0yLjMgNS45IC44IDExLjkgMyAxOS4yIDUuNiAzLjQgMS4zIDYuMSAyLjggOS44IDMuOCAuOCAuMiAxLjkgLjQgMi44IC42IC4xIDAgLjEgMCAuMiAuMWwuMiAwYzYuNSAxLjQgMTIuOC0yLjIgMTQuMi04cy0yLjgtMTEuOC05LjMtMTMuNGMtLjktLjItMi4zLS42LTMuMi0uNy0zLjgtLjctNi45LS41LTEwLjUtLjgtNy43LS44LTE0LTEuNC0xOS43LTMuMi0yLjMtLjktNC0zLjctNC44LTQuOGwtNC40LTEuM2MyLjMtMTYuNiAxLjctMzMuOS0yLjMtNTEuMy00LTE3LjUtMTEuMS0zMy41LTIwLjYtNDcuNiAxLjEtMSAzLjMtMi45IDMuOS0zLjUgLjItMiAwLTQgMi4xLTYuMiA0LjMtNC4xIDkuOC03LjQgMTYuMy0xMS41IDMuMS0xLjggNi0zIDkuMS01LjMgLjctLjUgMS43LTEuMyAyLjQtMS45IDUuMy00LjIgNi41LTExLjQgMi43LTE2LjJzLTExLjEtNS4yLTE2LjQtMWMtLjcgLjYtMS44IDEuNC0yLjQgMi0yLjkgMi41LTQuOCA1LTcuMiA3LjctNS40IDUuNS05LjkgMTAuMS0xNC44IDEzLjQtMi4xIDEuMi01LjMgLjgtNi43IC43bC00LjIgM2MtMjMuOC0yNS01Ni4yLTQxLTkxLjItNDQuMS0uMS0xLjUtLjItNC4xLS4yLTQuOS0xLjQtMS40LTMuMi0yLjUtMy42LTUuNS0uNS01LjkgLjMtMTIuMyAxLjMtMTkuOSAuNS0zLjYgMS40LTYuNiAxLjUtMTAuNCAwLS45IDAtMi4yIDAtMy4xIDAtNi43LTQuOS0xMi4yLTExLTEyLjJ6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaW50ZXJlc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBkMiIsICJNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDgtMjUuNiAwLTUwLjItMy45LTczLjQtMTEuMSAxMC4xLTE2LjUgMjUuMi00My41IDMwLjgtNjUgMy0xMS42IDE1LjQtNTkgMTUuNC01OSA4LjEgMTUuNCAzMS43IDI4LjUgNTYuOCAyOC41IDc0LjggMCAxMjguNy02OC44IDEyOC43LTE1NC4zIDAtODEuOS02Ni45LTE0My4yLTE1Mi45LTE0My4yLTEwNyAwLTE2My45IDcxLjgtMTYzLjkgMTUwLjEgMCAzNi40IDE5LjQgODEuNyA1MC4zIDk2LjEgNC43IDIuMiA3LjIgMS4yIDguMy0zLjMgLjgtMy40IDUtMjAuMyA2LjktMjguMSAuNi0yLjUgLjMtNC43LTEuNy03LjEtMTAuMS0xMi41LTE4LjMtMzUuMy0xOC4zLTU2LjYgMC01NC43IDQxLjQtMTA3LjYgMTEyLTEwNy42IDYwLjkgMCAxMDMuNiA0MS41IDEwMy42IDEwMC45IDAgNjcuMS0zMy45IDExMy42LTc4IDExMy42LTI0LjMgMC00Mi42LTIwLjEtMzYuNy00NC44IDctMjkuNSAyMC41LTYxLjMgMjAuNS04Mi42IDAtMTktMTAuMi0zNC45LTMxLjQtMzQuOS0yNC45IDAtNDQuOSAyNS43LTQ0LjkgNjAuMiAwIDIyIDcuNCAzNi44IDcuNCAzNi44cy0yNC41IDEwMy44LTI5IDEyMy4yQzE2MS41IDQzNy4yIDE2My41IDQ2Ny40IDE2NS42IDQ4NyA3My40IDQ1MC45IDggMzYxLjEgOCAyNTYgOCAxMTkgMTE5IDggMjU2IDhTNTA0IDExOSA1MDQgMjU2eiJdCiAgICB9OwogICAgZmFBbGdvbGlhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFsZ29saWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YyIsICJNMjU2IDBjLTEzOS45IDAtMjU0IDExMi43LTI1NiAyNTIuMS0yIDE0MS41IDExMi45IDI1OC43IDI1NC41IDI1OS41IDQzLjcgLjMgODUuOS0xMC40IDEyMy4zLTMwLjcgMy42LTIgNC4yLTcgMS4xLTkuN2wtMjQtMjEuMmMtNC45LTQuMy0xMS44LTUuNS0xNy44LTMtMjYuMSAxMS4xLTU0LjUgMTYuOC04My43IDE2LjQtMTE0LjQtMS41LTIwNi45LTk2LjYtMjA1LjEtMjExIDEuOC0xMTIuOSA5NC4zLTIwNC4yIDIwNy43LTIwNC4ybDIwNy43IDAgMCAzNjktMTE3LjgtMTA0LjdjLTMuOC0zLjQtOS43LTIuNy0xMi43IDEuMy0xOC45IDI1LTQ5LjcgNDAuNi04My45IDM4LjItNDcuNS0zLjMtODUuOS00MS41LTg5LjUtODguOS00LjItNTYuNiA0MC42LTEwMy45IDk2LjMtMTAzLjkgNTAuNCAwIDkxLjkgMzguOCA5Ni4yIDg4IC40IDQuNCAyLjQgOC41IDUuNyAxMS40bDMwLjcgMjcuMmMzLjUgMy4xIDkgMS4yIDkuOS0zLjQgMi4yLTExLjggMy0yNC4yIDIuMS0zNi44LTQuOS03Mi02My4zLTEzMC0xMzUuNC0xMzQuNC04Mi43LTUuMS0xNTEuOCA1OS41LTE1NCAxNDAuNi0yLjEgNzguOSA2Mi42IDE0NyAxNDEuNiAxNDguNyAzMyAuNyA2My42LTkuNiA4OC4zLTI3LjZMNDk1IDUwOS40YzYuNiA1LjggMTcgMS4yIDE3LTcuN2wwLTQ5MmMwLTUuNC00LjQtOS43LTkuNy05LjdMMjU2IDB6Il0KICAgIH07CiAgICBmYVN0YWNrcGF0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGFja3BhdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0MiIsICJNMjQ0LjYgMjMyLjRjMCA4LjUtNC4zIDIwLjUtMjEuMyAyMC41bC0xOS42IDAgMC00MS41IDE5LjYgMGMxNy4xIDAgMjEuMyAxMi40IDIxLjMgMjF6TTQ0OCAzMmwwIDQ0OC00NDggMCAwLTQ0OCA0NDggMHpNMTUxLjMgMjg3LjhjMC0yMS4yLTEyLjEtMzQuNS00Ni43LTQ0LjgtMjAuNi03LjQtMjYtMTAuOS0yNi0xOC42czctMTQuNiAyMC40LTE0LjZjMTQuMSAwIDIwLjggOC40IDIwLjggMTguNGwzMC43IDAgLjItLjZjLjUtMTkuNi0xNS4xLTQxLjYtNTEuMS00MS42LTIzLjQgMC01Mi42IDEwLjgtNTIuNiAzOC4zIDAgMTkuNCA5LjIgMzEuMyA1MC43IDQ0LjQgMTcuMyA2LjIgMjEuOSAxMC40IDIxLjkgMTkuNSAwIDE1LjItMTkuMSAxNC4yLTE5LjUgMTQuMi0yMC40IDAtMjUuNy05LjEtMjUuNy0yMS45bC0zMC44IDAtLjIgLjZjLS43IDMxLjMgMjguNCA0NS4yIDU2LjYgNDUuMiAzMCAwIDUxLjEtMTMuNiA1MS4xLTM4LjN6bTEyNS40LTU1LjZjMC0yNS4zLTE4LjQtNDUuNS01My40LTQ1LjVsLTUxLjggMCAwIDEzOC4yIDMyLjIgMCAwLTQ3LjQgMTkuNiAwYzMwLjMgMCA1My40LTE2IDUzLjQtNDUuNHpNMjk3LjkgMzI1bDQ5LjEtMTM4LjItMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwek00MDQuNSAxODYuOGwtMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwIDQ5LjEtMTM4LjJ6Il0KICAgIH07CiAgICBmYU9jdG9wdXNEZXBsb3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2N0b3B1cy1kZXBsb3kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4MiIsICJNNDU1LjcgMzQ5LjJjLTQ1LjktMzkuMS0zNi43LTc3LjktMTYuMS0xMjguMSAzNS43LTg3LTIzLjUtMTg2LjktMTA5LjYtMjEyLjgtOTIuOS0yNy45LTE5NS43IDE2LTIzMC4zIDEwOC44LTguNyAyMy41LTEyLjUgNDguNS0xMSA3My41IDEuNyAyOS41IDE0LjcgNTMgMjQuMSA4MC4zIDE3LjIgNTAuMi0yOC4xIDkyLjctNjYuNyAxMTcuNi00Ni44IDMwLjItMzYuMyAzOS45LTguNCA0MS45IDIzLjQgMS43IDQ0LjUtNC41IDY1LjMtMTUgOS4yLTQuNiA0MC43LTE4LjkgNDUuMS0yOC42LTEyLjIgMjYuNi0zNyA3Mi43LTIxLjUgMTAyLjEgMTkuMSAzNi4yIDY3LjEtMzEuOCA3Ni43LTQ1LjggOC42LTEyLjYgNDMtODEuMyA2My42LTQ2LjkgMTguOSAzMS40IDguNiA3Ni40IDM1LjcgMTA0LjYgMzIuOSAzNC4yIDUxLjItMTguMyA1MS40LTQ0LjIgLjItMTYuNC02LjEtOTUuOSAyOS45LTU5LjkgMjEuNCAyMS40IDUyLjkgNzEuMiA4OC42IDY3IDM4LjctNC41LTIyLjEtNjgtMjguMy03OC43IDUuNCA0LjMgNTMuNyAzNC4xIDUzLjggOS41IC4xLTE4LjgtMzAuMS0zNC43LTQyLjUtNDUuM3oiXQogICAgfTsKICAgIGZhWWFtbWVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbW1lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODQwIiwgIk01MDAuNyAxNTkuNWMtLjQtMS44LTEuMi0zLjQtMi4zLTQuOHMtMi41LTIuNi00LjEtMy41Yy0zLjEtMS42LTYuNy0yLTEwLjEtMS4xbC0yNi40IDYuNiAwLS4yLTIyLjMgNS44LTEuMiAuMy0uNi0yLjJjLTE1LjUtNTguMy00NS0xMTEuOS04Ni4xLTE1Ni4yLTIuNi0yLjctNi4xLTQuMi05LjgtNC4zcy03LjMgMS4zLTEwIDMuOGwtMTAyLjkgMTAyLjctMTk5LjkgMGMtNi42IDAtMTIuOSAyLjYtMTcuNiA3LjNTMCAxMjQuOCAwIDEzMS40bDAgMjQ5QzAgMzg3IDIuNiAzOTMuMyA3LjMgMzk4czExIDcuMyAxNy42IDcuM0wyMjUgNDA1LjMgMzI4LjEgNTA4YzIuNiAyLjYgNiA0IDkuNyA0czcuMS0xLjQgOS43LTRjLjEtLjEgLjItLjMgLjQtLjQgMjkuMy0zMS41IDUyLjgtNjcuOCA2OS42LTEwNy40IDYuOS0xNi41IDEyLjctMzMuNSAxNy4zLTUwLjhsMCAwIDIwLjQgNS4zIDAtLjEgMjguMyA3LjNjLjkgLjIgMS43IC40IDIuNiAuNSAxLjQgLjIgMi44IC4yIDQuMS0uMSAyLjUtLjUgNC44LTEuNyA2LjctMy40czMuMi00IDMuOC02LjVjMTUuMi02My40IDE1LjItMTI5LjYgLjEtMTkzbDAgMHpNMzM3LjEgMjQuN2wwIDAgMCAwIDAgMHpNMjI2LjkgMTg5LjhsLTUyLjYgOTEuM2MtMSAxLjctMS41IDMuNy0xLjUgNS43bDAgNDYuMmMwIDUuOC0yLjMgMTEuNC02LjUgMTUuNnMtOS43IDYuNC0xNS42IDYuNGwtMy40IDBjLTUuOCAwLTExLjQtMi4zLTE1LjYtNi40cy02LjUtOS43LTYuNS0xNS42bDAtNDUuN2MwLTEuOS0uNS0zLjgtMS40LTUuNUw3Mi4zIDE4OS42Yy0xLjktMy40LTIuOC03LjEtMi44LTExczEuMS03LjYgMy0xMC45IDQuNy02LjEgOC4xLTggNy4xLTIuOSAxMS0yLjlsMy4zIDBjNCAwIDggMS4xIDExLjUgMy4yczYuMyA1LjEgOC4xIDguN2wzNi40IDcwLjMgMzcuNS03MC41YzEuOC0zLjUgNC42LTYuNCA3LjktOC40czcuMi0zLjIgMTEuMS0zLjIgNy44IC45IDExLjIgMi44IDYuMyA0LjcgOC4yIDguMWMyIDMuMyAzIDcuMSAzIDExcy0xIDcuNy0zIDExbDAgMHpNMzM3LjEgMjQuN2MzNS45IDQwLjYgNjEuOSA4OSA3NS44IDE0MS4zbC42IDItMTE0LjEgMjkuNiAwLTY2LjFjMC02LjYtMi43LTEyLjktNy4zLTE3LjZzLTExLTcuMy0xNy42LTcuM2wtMTkuNCAwIDgyLjEtODEuOHpNMzk3LjYgMzkybDAgMCAwIDBjLTE0LjcgMzQuOC0zNS4xIDY3LTYwLjIgOTUuMmwtODIuMi04MS45IDE5LjIgMGM2LjYgMCAxMi45LTIuNiAxNy42LTcuM3M3LjMtMTEgNy4zLTE3LjZsMC02Ni4yIDExNC42IDI5LjljLTQuNCAxNi4zLTkuOCAzMi4zLTE2LjMgNDcuOWwwIDB6bTg0LTUyLjRsMCAwLTUwLjYtMTMuMS0xMzEuNy0zNC4zIDAtNzIuNSAxMTkuNy0zMSA0LjUtMS4yYzI5LjktNy43IDQ5LjItMTIuOCA1OC4xLTE1LjEgMTIgNTUuMSAxMiAxMTIuMSAwIDE2Ny4yeiJdCiAgICB9OwogICAgZmFNb2R4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1vZHgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI4NSIsICJNMzU2IDI0MS44bDM2LjcgMjMuNyAwIDIxNC41LTEzMy04My44IDk2LjMtMTU0LjR6TTQ0MCA3NWwtMjEzLjcgMC0yMyAzNy44IDE1My41IDk2LjUgODMuMi0xMzQuM3pNMzUxIDIxNy44bC0yOTUuOC0xODUuOCAwIDIxNC41IDQ2IDI5IDI0OS44LTU3Ljd6TTk3IDI5NC4yTDggNDM3IDIyMS43IDQzNyAzNDYuNyAyMzYuNSA5NyAyOTQuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlVGhyZWFkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE5IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yOTQuMiAyNDQuM2MxOS41IDkuMyAzMy43IDIzLjUgNDEuMiA0MC45IDEwLjQgMjQuMyAxMS40IDYzLjktMjAuMiA5NS40LTI0LjIgMjQuMS01My41IDM1LTk1LjEgMzUuM2wtLjIgMGMtNDYuOC0uMy04Mi44LTE2LjEtMTA2LjktNDYuOC0yMS41LTI3LjMtMzIuNi02NS40LTMzLTExMy4xbDAtLjJjLjQtNDcuNyAxMS41LTg1LjcgMzMtMTEzLjEgMjQuMi0zMC43IDYwLjItNDYuNSAxMDYuOS00Ni44bC4yIDBjNDYuOSAuMyA4My4zIDE2IDEwOC4yIDQ2LjYgMTIuMyAxNS4xIDIxLjMgMzMuMyAyNyA1NC40bC0yNi45IDcuMmMtNC43LTE3LjItMTEuOS0zMS45LTIxLjQtNDMuNi0xOS40LTIzLjktNDguNy0zNi4xLTg3LTM2LjQtMzggLjMtNjYuOCAxMi41LTg1LjUgMzYuMi0xNy41IDIyLjMtMjYuNiA1NC40LTI2LjkgOTUuNSAuMyA0MS4xIDkuNCA3My4zIDI2LjkgOTUuNSAxOC43IDIzLjggNDcuNCAzNiA4NS41IDM2LjIgMzQuMy0uMyA1Ni45LTguNCA3NS44LTI3LjMgMjEuNS0yMS41IDIxLjEtNDcuOSAxNC4yLTY0LTQtOS40LTExLjQtMTcuMy0yMS4zLTIzLjMtMi40IDE4LTcuOSAzMi4yLTE2LjUgNDMuMi0xMS40IDE0LjUtMjcuNyAyMi40LTQ4LjQgMjMuNS0xNS43IC45LTMwLjgtMi45LTQyLjYtMTAuNy0xMy45LTkuMi0yMi0yMy4yLTIyLjktMzkuNS0xLjctMzIuMiAyMy44LTU1LjMgNjMuNS01Ny42IDE0LjEtLjggMjcuMy0uMiAzOS41IDEuOS0xLjYtOS45LTQuOS0xNy43LTkuOC0yMy40LTYuNy03LjgtMTcuMS0xMS44LTMwLjgtMTEuOWwtLjQgMGMtMTEgMC0yNiAzLjEtMzUuNiAxNy42bC0yMy0xNS44YzEyLjgtMTkuNCAzMy42LTMwLjEgNTguNS0zMC4xbC42IDBjNDEuOCAuMyA2Ni42IDI2LjMgNjkuMSA3MS44IDEuNCAuNiAyLjggMS4yIDQuMiAxLjlsLjEgLjV6bS03MS44IDY3LjVjMTctLjkgMzYuNC03LjYgMzkuNy00OC44LTguOC0xLjktMTguNi0yLjktMjktMi45LTMuMiAwLTYuNCAuMS05LjYgLjMtMjguNiAxLjYtMzguMSAxNS41LTM3LjQgMjcuOSAuOSAxNi43IDE5IDI0LjUgMzYuNCAyMy42bC0uMS0uMXoiXQogICAgfTsKICAgIGZhT2xkUmVwdWJsaWMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2xkLXJlcHVibGljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTAiLCAiTTI0My44IDEwLjJjNy41LS4zIDE1LS4zIDIyLjUtLjEgMy42IC4xIDcuMiAuNCAxMC44IC43IDQuOSAuMyA5LjggMSAxNC43IDEuNiAyLjkgLjQgNS44IDEgOC43IDEuNSA3LjkgMS4zIDE1LjcgMy4zIDIzLjQgNS40IDEyLjIgMy41IDI0LjIgNy45IDM1LjggMTMuMiAyNi42IDEyLjIgNTAuOSAyOS4yIDcxLjYgNDkuOSAyMCAyMC4xIDM2LjcgNDMuNSA0OC45IDY5LjIgMS4xIDIuNiAyLjQgNS4xIDMuNSA3LjcgMi44IDYuNCA1LjQgMTMgNy42IDE5LjYgNC4xIDEyLjMgNy4zIDI1IDkuNCAzNy44IC42IDMuMSAxIDYuMyAxLjQgOS41IC41IDMuOCAuOSA3LjcgMS4yIDExLjYgLjggOC4zIC44IDE2LjcgLjggMjUuMS0uMSA1LS4zIDkuOS0uNyAxNC45LS4yIDMuNC0uNSA2LjgtMSAxMC4xLS40IDIuNy0uNiA1LjUtMS4xIDguMi0uOSA1LjEtMS43IDEwLjMtMi45IDE1LjQtNC4xIDE4LjUtMTAuMyAzNi42LTE4LjUgNTMuNi0xNS44IDMyLjgtMzguOCA2Mi4yLTY3LjEgODUuMS0xNy4zIDE0LjEtMzYuNCAyNS45LTU2LjkgMzQuOS02LjIgMi43LTEyLjUgNS4zLTE4LjkgNy40LTMuNSAxLjItNyAyLjQtMTAuNiAzLjQtNi42IDEuOS0xMy4zIDMuNi0yMCA1LTQuNyAuOS05LjMgMS43LTE0IDIuNS01LjMgLjctMTAuNSAxLjQtMTUuOCAxLjctNi43IC43LTEzLjQgLjgtMjAuMSAuOC02LjggMC0xMy42LS4xLTIwLjQtLjgtMy4zLS4yLTYuNi0uNS05LjgtMS0yLjctLjQtNS41LS42LTguMi0xLjEtNC4xLS43LTguMi0xLjQtMTIuNC0yLjItNC4yLS45LTguNS0xLjktMTIuNy0zLTguNi0yLjItMTcuMS01LTI1LjQtOC4xLTEwLjUtNC4xLTIwLjgtOC43LTMwLjYtMTQuMi0yLjEtMS4yLTQuMy0yLjMtNi40LTMuNi0xMS4yLTYuNi0yMS45LTE0LjEtMzEuOS0yMi4zLTM0LjctMjguNC02MS40LTY2LjQtNzYuNC0xMDguNy0zLjEtOC43LTUuNy0xNy42LTcuOC0yNi43LTEuNS02LjItMi41LTEyLjQtMy42LTE4LjctLjQtMi4zLS42LTQuNy0xLTcuMS0uNi00LS44LTgtMS4yLTExLjktLjgtOS41LS43LTE5LS41LTI4LjUgLjEtMy41IC4zLTcgLjctMTAuNSAuMy0zLjIgLjUtNi40IC45LTkuNSAuNC0yLjggLjctNS42IDEuMi04LjQgLjctMy45IDEuMy03LjkgMi4xLTExLjggMy40LTE2LjUgOC41LTMyLjcgMTUuMy00OC4yIDEuMi0yLjkgMi42LTUuNyAzLjktOC42IDguMS0xNi43IDE3LjktMzIuNiAyOS41LTQ3LjEgMjAtMjUuNCA0NS4xLTQ2LjcgNzMuMy02Mi41IDcuNS00LjIgMTUuMi04IDIzLjEtMTEuNCAxNS44LTYuOSAzMi40LTEyIDQ5LjMtMTUuNCAzLjUtLjcgNy0xLjIgMTAuNi0xLjggMi42LS41IDUuMy0uNyA3LjktMS4xIDMuNS0uNSA3LjEtLjcgMTAuNi0xIDIuNS0uMiA0LjktLjQgNy40LS41em04LjYgMjQuNGMtOS4yIC4xLTE4LjQgMS0yNy42IDIuMi03LjMgMS4xLTE0LjUgMi42LTIxLjcgNC4zLTEzLjkgMy41LTI3LjUgOC4zLTQwLjUgMTQuNC0xMC41IDUtMjAuNiAxMC43LTMwLjIgMTcuMi00LjIgMi45LTguNCA1LjgtMTIuMyA5LTUuMSA0LTEwIDguMi0xNC43IDEyLjYtMi41IDIuMi00LjggNC43LTcuMiA3LjEtMjguMiAyOC44LTQ4LjQgNjUuNC01Ny41IDEwNC43LTIgOC40LTMuNSAxNy00LjQgMjUuNi0xLjEgOC45LTEuNCAxNy45LTEuNCAyNi44IC4xIDcuMSAuNCAxNC4zIDEuMiAyMS40IC42IDcuMSAxLjkgMTQuMiAzLjIgMjEuMiAxLjEgNC42IDIgOS4zIDMuMyAxMy45IDYuMyAyMy40IDE2LjUgNDUuNyAzMC4xIDY1LjggOC42IDEzIDE4LjggMjQuOSAzMCAzNS44IDE2LjMgMTUuOCAzNSAyOSA1NS4zIDM5LjIgNy4zIDMuNSAxNC43IDYuOSAyMi4zIDkuNiA1IDEuOCAxMC4xIDMuNiAxNS4yIDUgMTEuMyAzLjIgMjIuOCA1LjYgMzQuNCA3LjEgMi45IC4zIDUuOCAuNiA4LjcgLjkgMTMuOCAxLjEgMjcuNyAxIDQxLjUtLjQgNC40LS42IDguOS0xIDEzLjMtMS44IDMuNi0uNyA3LjMtMS4yIDEwLjktMi4xIDQuMS0xIDguMy0xLjkgMTIuNC0zLjEgMjYuNS03LjMgNTEuNi0xOS43IDczLjYtMzYuMiAxNS44LTExLjggMzAtMjUuOCA0Mi4xLTQxLjMgMy4zLTQgNi4yLTguMyA5LjEtMTIuNiAzLjQtNS4xIDYuNi0xMC4yIDkuNi0xNS41IDIuNC00LjQgNC43LTguOSA3LTEzLjQgNS43LTEyLjEgMTAuMy0yNC42IDEzLjgtMzcuNSAyLjYtMTAgNC43LTIwLjIgNS45LTMwLjQgMS44LTEzLjUgMS45LTI3LjEgMS4zLTQwLjctLjMtMy45LS43LTcuOC0xLTExLjctMi4yLTE5LjEtNi44LTM3LjktMTMuOC01NS44LTYtMTUuMS0xMy41LTI5LjYtMjIuNi00My4xLTEyLjctMTguOC0yOC4yLTM1LjctNDYtNDkuOC0yNS0yMC01NC41LTM0LjUtODUuNi00Mi4xLTcuOC0xLjktMTUuNy0zLjMtMjMuNi00LjQtMy45LS42LTcuOC0uOC0xMS44LTEuMi03LjQtLjYtMTQuOC0uNy0yMi4yLS42ek0xNDcuMyA4My41YzEzLjMtOC45IDI4LjEtMTUuNCA0My4zLTIwLjItMy4yIDEuOC02LjQgMy40LTkuNSA1LjMtMTEuMiA2LjctMjEuNSAxNC45LTMwLjQgMjQuNS02LjggNy40LTEyLjggMTUuNy0xNyAyNC45LTMuMyA2LjktNS42IDE0LjItNi45IDIxLjctLjkgNC44LTEuMyA5LjgtMS4yIDE0LjggLjEgMTMuNyA0LjQgMjcuMSAxMS4zIDM4LjggNS45IDEwLjIgMTMuNiAxOS4zIDIyLjQgMjcuMyA0LjkgNC40IDEwLjIgOC4xIDE1IDEyLjYgMi4zIDIuMiA0LjUgNC40IDYuNCA2LjkgMi42IDMuMyA0LjkgNyA2IDExLjEgLjkgMyAuNyA2LjIgLjcgOS4zIDAgNC4xIDAgOC4yIDAgMTIuMyAuMSAzLjUgMCA3LjEgLjEgMTAuNiAuMSAyLjQgMCA0LjggLjEgNy4xIC4yIDUuOCAuMSAxMS41IC4xIDE3LjMgLjEgMi45IDAgNS44IC4xIDguNyAwIDEuNiAuMSAzLjMgMCA0LjktLjkgLjEtMS44IC4yLTIuNyAuMi0xMSAwLTIxLjktMi42LTMyLTYuOS02LTIuNy0xMS44LTUuOS0xNy4xLTkuOC01LjgtNC4yLTExLjEtOS0xNS44LTE0LjMtNi41LTcuMi0xMi0xNS40LTE2LjYtMjMuOS0xLjEtMi0yLjItNC0zLjItNi4xLTEuMi0yLjYtMi42LTUuMS0zLjctNy44LTQtOS43LTYuNi0xOS45LTguMS0zMC4zLS41LTQuNC0xLjEtOC45LTEuMi0xMy4zLS43LTE1LjcgLjgtMzEuNiA0LjctNDYuOCAyLjEtOC4yIDQuOC0xNi4yIDguMy0yMy44IDYuMy0xNC4yIDE1LjMtMjcuMiAyNi4zLTM4LjIgNi4zLTYuMiAxMy4xLTExLjggMjAuNS0xNi43ek0zMjIuNyA2My40YzIuNyAuNyA1LjQgMS43IDguMSAyLjcgNi40IDIuMyAxMi43IDQuOCAxOC43IDggMTMuMSA2LjQgMjUuMyAxNC44IDM1LjggMjUgMTAuMiAxMCAxOC43IDIxLjYgMjUuMSAzNC4zIDEuMyAyLjcgMi42IDUuNSAzLjggOC4zIDYuMyAxNS4xIDEwIDMxLjMgMTEuMiA0Ny42IC40IDQuNSAuNCA5LjEgLjUgMTMuNiAuMSAxMS42LTEuNSAyMy4zLTQuMyAzNC41LTIgNy4zLTQuMyAxNC41LTcuOSAyMS4yLTMuMiA2LjYtNi43IDEzLjItMTAuOCAxOS4yLTYuOSAxMC41LTE1LjYgMTkuOS0yNS44IDI3LjItMTAuNSA3LjYtMjIuNiAxMy0zNS40IDE1LjQtMy41IC43LTcuMSAxLjEtMTAuNyAxLjItMS44IC4xLTMuNyAuMi01LjYtLjEtLjMtMi4xIDAtNC4zIDAtNi41IDAtMy43IC4xLTcuNCAuMS0xMS4yIC4yLTcgMC0xNC4xIC4yLTIxLjEgMC0yLjQgMC00LjggMC03LjEgLjItNS4xIDAtMTAuMSAuMS0xNS4yIC4xLTMtLjItNiAuNS05IC43LTIuNSAxLjgtNC45IDMuMS03LjEgNC41LTcuMyAxMS4xLTEzIDE3LjctMTguMyA1LjQtNC4yIDEwLjUtOC44IDE1LTEzLjggNy43LTguNCAxNC4yLTE3LjkgMTguOC0yOC4zIDIuNS01LjkgNC41LTEyLjEgNS41LTE4LjUgLjktNC40IDEuMS04LjggMS0xMy4zIDAtNy44LTEuNC0xNS42LTMuNi0yMy4yLTEuOC01LjctNC4zLTExLjItNy4xLTE2LjQtMy45LTYuOS04LjYtMTMuMy0xNC0xOS4yLTkuOS0xMC44LTIxLjgtMTkuOS0zNC42LTI3LjEtMS44LTEtMy44LTEuOC01LjYtM3pNMjIxLjkgMTIxLjljMS0xLjIgMi0yLjMgMy4xLTMuNC0uNiAuOS0xLjMgMS44LTIgMi43LTMuMSAzLjktNS41IDguMy03IDEzLjEtLjkgMy4zLTEuNyA2LjYtMS43IDEwLS4xIDIuNS0uMSA1LjEgLjMgNy42IDEuMSA3LjYgNC4zIDE0LjkgOC44IDIxLjEgMiAyLjcgNC4yIDUuMyA2LjkgNy4zIDEuNiAxLjMgMy41IDIuMSA1LjMgMyAzLjEgMS43IDYuMyAzLjIgOS4xIDUuNSAyLjcgMi4xIDQuNiA1LjMgNC40IDguOCAwIDczLjcgMCAxNDcuMyAwIDIyMSAwIDEuNC0uMSAyLjcgMCA0IC4xIDEuNSAuOCAyLjggMS41IDQuMSAuOSAxLjcgMS44IDMuMyAzLjIgNC42IC45IC44IDIgMS40IDMuMiAxLjIgMS41LS4yIDIuNy0xLjQgMy40LTIuNiAxLTEuNSAxLjctMy4yIDIuMy00LjkgLjgtMi4xIC40LTQuNCAuNS02LjYgLjEtNCAwLTguMSAuMS0xMi4xIDAtNS45IDAtMTEuOCAuMS0xNy43IC4xLTMuNiAwLTcuMiAuMS0xMC45IC4yLTQgMC04LjEgLjEtMTIuMSAwLTYgMC0xMiAuMS0xOCAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMS0zLjkgMC03LjkgLjEtMTEuOCAwLTYgMC0xMiAuMS0xOCAuMi0zLjkgMC03LjkgLjItMTEuOCAuMyAxLjQgLjEgMi45IC4yIDQuNCAuMiAzLjYgLjQgNy4yIC44IDEwLjggLjMgMy40IC40IDYuOSAuOSAxMC4zIC40IDMuMSAuNSA2LjIgMSA5LjMgLjYgNC4xIC45IDguMiAxLjUgMTIuMyAxLjUgOSAyLjggMTguMSA1LjEgMjcgMS4xIDQuOCAyLjQgOS42IDQgMTQuMyAyLjUgNy45IDUuNyAxNS43IDEwLjMgMjIuNiAxLjcgMi42IDMuOSA1IDYuMSA3LjIgLjMgLjIgLjYgLjUgLjkgLjcgLjYgLjMgMS4zLS4xIDEuNy0uNiAuNy0uOSAxLjItMS45IDEuNy0yLjkgNC4xLTcuOCA4LjItMTUuNiAxMi4zLTIzLjMgLjctMS4zIDEuNC0yLjYgMi42LTMuNiAxLjgtMS42IDMuOC0yLjcgNi0zLjYgMi45LTEuMiA1LjktMi4yIDktMi40IDYuNi0uNiAxMy4xIC43IDE5LjYgMS44IDMuNyAuNiA3LjQgMS4yIDExLjEgMS40IDMuNyAuMSA3LjUgLjEgMTEuMi0uMyA4LjYtLjkgMTctMyAyNC45LTYuMiA1LjMtMi4yIDEwLjUtNC44IDE1LjMtNy45IDExLjUtNy4yIDIxLjUtMTYuNiAzMC0yNyAxLjItMS40IDIuMi0yLjkgMy41LTQuMy0xLjIgMy4yLTIuNyA2LjQtNC4yIDkuNS0xLjMgMi45LTIuOCA1LjYtNC4zIDguNC01LjIgOS42LTExIDE4LjktMTcuOCAyNy41LTQgNS4yLTguNSAxMC4xLTEzLjMgMTQuNi02LjYgNi4xLTE0LjEgMTEuNC0yMi40IDE0LjgtOC4yIDMuNC0xNy4zIDQuNi0yNi4xIDMuMy0zLjYtLjYtNy0xLjctMTAuNC0yLjktMi44LTEtNS40LTIuNC04LTMuNy0zLjQtMS43LTYuNi0zLjgtOS43LTYuMSAyLjcgMy4xIDUuNyA1LjkgOC43IDguNiA0LjMgMy44IDguNyA3LjMgMTMuNiAxMC4yIDQgMi41IDguMyA0LjQgMTIuOCA1LjUgMS41IC40IDMgLjUgNC41IC42LTEuMyAxLjEtMi42IDItNCAzLTkuNiA2LjUtMjAgMTEuOS0zMC43IDE2LjQtMjAuOSA4LjctNDMuMiAxNC02NS43IDE1LjMtNC43IC4yLTkuMyAuNC0xNCAuNC01LS4xLTEwLS4xLTE0LjktLjctMTEuMi0uOC0yMi4zLTIuNy0zMy4yLTUuNC0xMC40LTIuNy0yMC42LTYuMS0zMC4zLTEwLjYtOC43LTMuOS0xNy4xLTguNC0yNS0xMy44LTEuOC0xLjMtMy43LTIuNS01LjQtNC4xIDYuNi0xLjIgMTMtMy40IDE5LTYuNSA1LjctMi45IDExLTYuNyAxNS42LTExLjEgMi4yLTIuMiA0LjMtNC42IDYuMi03LjEtMy40IDIuMS02LjkgNC4yLTEwLjYgNS44LTQuNCAyLjItOS4xIDMuOC0xMy44IDUtNS43IDEuNS0xMS43IDEuNy0xNy42IDEuMS04LjEtMS0xNS45LTQuMy0yMi41LTktNC4zLTIuOS04LjItNi40LTEyLTEwLjEtOS45LTEwLjItMTguMi0yMS44LTI1LjctMzMuOS0zLjktNi4zLTcuNS0xMi43LTExLjEtMTkuMi0xLTItMi4xLTQuMS0zLjItNi4xIDIuOCAyLjkgNS42IDYgOC40IDguOSAxOS4yIDE5LjIgMzcuNiAzMi4zIDUzLjcgMzUuNSAzLjEgLjcgNi4zIC41IDkuNSAuOCAyLjggLjMgNS42IC4yIDguMyAuMyA1IC4xIDEwLjEgMCAxNS4yLS4yIDMuNi0uMiA3LjMtLjcgMTAuOS0xLjEgMi4xLS4yIDQuMS0uNyA2LjEtMS4yIDMuOS0xIDguMS0xIDExLjggLjYgNC44IDEuOCA4LjQgNS42IDExLjQgOS43IDIuMiAzIDQuMSA2LjIgNS43IDkuNiAxLjIgMi40IDIuNSA0LjggMy42IDcuMyAxIDIuMiAyLjIgNC40IDMuNCA2LjUgLjcgMSAxLjQgMi4yIDIuNiAyLjYgMS4xLS44IDEuNy0xLjkgMi4zLTMgMi4xLTQuMiAzLjQtOC42IDQuOS0xMyAyLTYuNiAzLjgtMTMuMyA1LjItMjAgMi4yLTkuMyAzLjItMTguNyA0LjUtMjguMSAuNi00IC44LTggMS4zLTEyIC45LTEwLjYgMS45LTIxLjMgMi4yLTMxLjkgLjEtMS45IC4yLTMuNyAuMy01LjYgMC00LjMgLjItOC43IC4yLTEzIDAtMi40IDAtNC44IDAtNy4xIDAtNS4xLS4yLTEwLjEtLjItMTUuMi0uMi02LjYtLjctMTMuMi0xLjMtMTkuOC0uNy01LjktMS41LTExLjgtMy4xLTE3LjUtMi03LjctNS42LTE1LTkuOC0yMS44LTMuMi01LjEtNi44LTkuOS0xMS4xLTE0LTMuOS0zLjktOC42LTcuMS0xMy45LTguNC0xLjUtLjQtMy4xLS40LTQuNi0uNiAuMS0zIC43LTUuOSAxLjMtOC44IDEuNi03LjcgMy44LTE1LjMgNi44LTIyLjYgMS41LTQgMy40LTcuOSA1LjQtMTEuNyAzLjQtNi42IDcuNi0xMi44IDEyLjUtMTguNXptMzEuMyAxLjdjLjQtLjEgLjctLjEgMS4xLS4yIC4yIDEuOCAuMSAzLjYgLjEgNS40bDAgMzguMWMwIDEuNyAuMSAzLjUtLjIgNS4yLS40IDAtLjcgMC0xLjEgMC0uOS0zLjgtMS43LTcuNi0yLjYtMTEuMy0uNC0xLjUtLjYtMy4xLTEuMS00LjYtMS43LS4yLTMuNC0uMi01LjItLjItNS4xIDAtMTAuMSAwLTE1LjIgMC0xLjcgMC0zLjMgLjEtNSAwIDAtLjQtLjMtLjkgLjItMS4yIDEuMy0uNyAyLjctLjkgNC4xLTEuNCAzLjQtMS4xIDYuOS0yLjIgMTAuMy0zLjMgMS40LS41IDIuOS0uNyA0LjItMS41IDAtLjYgMC0xLjEgMC0xLjctMS4yLS42LTIuNS0uOS0zLjgtMS4zLTMuMS0xLTYuMy0yLTkuNC0zLTEuOC0uNi0zLjctMS01LjQtMS44IDAtLjQtLjEtLjctLjEtMS4xIDUuMS0uMiAxMC4yIC4xIDE1LjMtLjEgMy40LS4xIDYuNyAuMSAxMC4xLS4xIC4xLS40IC4zLS44IC40LTEuMiAxLjEtNC45IDIuMy05LjggMy40LTE0Ljd6bTYtLjJjLjQgMCAuNyAuMSAxLjEgLjIgMSAzLjggMS43IDcuOCAyLjcgMTEuNiAuNCAxLjQgLjYgMi45IDEgNC4zIDIuNSAuMiA1LjEgMCA3LjYgMCA1LjIgLjEgMTAuMyAuMSAxNS41IC4xIC44IDAgMS41IDAgMi4zIC4xIDAgLjQtLjEgLjctLjEgMS4xLTEuOCAuOC0zLjggMS4yLTUuNyAxLjktMy43IDEuMi03LjUgMi40LTExLjIgMy42LS42IC4yLTEuMSAuNC0xLjcgLjYtLjIgLjYtLjIgMS4xLS4xIDEuNyAuOSAuNSAxLjggLjggMi44IDEuMSA0LjkgMS41IDkuNyAzLjEgMTQuNiA0LjYgLjQgLjEgLjggLjMgMS4xIC41IC40IC4zIC4yIC44IC4yIDEuMi0xLjcgLjEtMy4zIDAtNSAwLTUuMiAwLTEwLjMgMC0xNS41IDAtMS42IDAtMy4yIDAtNC44IC4yLS41IDEuNy0uNyAzLjQtMS4yIDUuMS0uOSAzLjYtMS41IDcuMi0yLjUgMTAuOC0uNCAwLS43IDAtMS4xIC4xLS4zLTEuNy0uMi0zLjUtLjItNS4ybDAtMzguMWMwLTEuOC0uMS0zLjYgLjEtNS40em0tMTg2IDQ1YzEuMS0yLjIgMi4xLTQuNCAzLjQtNi41LTEuOCA3LjYtMi45IDE1LjMtMy42IDIzLS44IDcuNy0uOCAxNS41LS41IDIzLjIgMS4xIDE5LjkgNS41IDM5LjggMTQuMiA1Ny45IDMgNiA2LjQgMTEuOCAxMC41IDE3LjEgNi4xIDcuNSAxMi41IDE0LjggMTkuOCAyMS4xIDQuOCA0LjEgMTAgNy44IDE1LjUgMTAuOCAzLjMgMS43IDYuNSAzLjQgOS45IDQuNyA1IDIgMTAuMiAzLjYgMTUuNCA0LjkgMy44IDEgNy44IDEuNCAxMS41IDIuNyA1IDEuNiA5LjUgNC42IDEzIDguNCA0LjkgNS4yIDguMSAxMS45IDEwLjIgMTguNyAxIDIuOSAxLjYgNS45IDIuMiA4LjkgLjIgLjggLjIgMS41IC4yIDIuMy02LjUgMi44LTEzLjMgNS4xLTIwLjMgNi4yLTQuMSAuOC04LjMgMS0xMi41IDEuMS0xMC4yIC4yLTIwLjUtMS44LTMwLjEtNS4xLTMuNy0xLjQtNy41LTIuOS0xMS00LjctOC4xLTMuOC0xNS42LTguNy0yMi41LTE0LjUtMi45LTIuNi01LjgtNS4xLTguNC04LTkuMi05LjgtMTYuMy0yMS40LTIxLjgtMzMuNy0yLjQtNS41LTQuNi0xMS4yLTYuNC0xNy0xLjItMy45LTIuNC03LjktMy4zLTExLjktLjctMi45LTEuMi01LjktMS45LTguOS0uNS0yLjEtLjctNC4zLTEtNi41LS44LTUuNC0xLjMtMTAuOS0xLjMtMTYuNCAuMS02LjIgLjItMTIuNCAxLjEtMTguNSAuNC0yLjkgLjctNS43IDEuMi04LjYgMS01LjcgMi4xLTExLjQgMy43LTE2LjkgMy4xLTExLjYgNy41LTIzIDEyLjctMzMuOHptMzYzLjctNi40YzEuMSAxLjcgMS45IDMuNSAyLjggNS4zIDIuMSA0LjUgNC4yIDguOSA2IDEzLjUgNy42IDE4LjggMTIuMyAzOC44IDEzIDU5IDAgMS44IC4xIDMuNSAuMSA1LjMgLjEgOS42LTEuMyAxOS4xLTMuMiAyOC41LS43IDMuNi0xLjUgNy4yLTIuNiAxMC43LTQgMTQuNy0xMCAyOS0xOC40IDQxLjgtOC4yIDEyLjYtMTkgMjMuNS0zMS44IDMxLjQtNS43IDMuNi0xMS44IDYuNi0xOCA5LjItNS44IDIuMi0xMS43IDQtMTcuOCA1LjEtNi40IDEtMTIuOSAxLjUtMTkuNCAxLjItNy45LS41LTE1LjgtMi4xLTIzLjItNC44LTEuOS0uOC0zLjktMS41LTUuOC0yLjMtLjItMS41IC4yLTMgLjUtNC41IDEuMi01LjcgMy0xMS40IDUuNy0xNi42IDIuNC00LjUgNS41LTguNyA5LjUtMTEuOSAyLjQtMi4xIDUuMi0zLjYgOC4yLTQuOCAzLjYtMS41IDcuNS0yIDExLjItMi44IDcuMi0xLjcgMTQuNC0zLjkgMjEuMi03IDEwLjMtNC43IDE5LjctMTEuNCAyNy42LTE5LjUgMS42LTEuNiAzLjItMy4yIDQuNy00LjkgMy40LTMuOCA2LjctNy42IDkuOC0xMS41IDcuNS0xMC4xIDEyLjgtMjEuNiAxNi43LTMzLjUgMS42LTUuMyAzLjItMTAuNiA0LjItMTYuMSAuNi0yLjkgMS01LjggMS41LTguNyAuOS02LjEgMS42LTEyLjIgMS43LTE4LjQgLjEtNi42IC4xLTEzLjMtLjUtMTkuOS0uNy04LTEuOS0xNi0zLjctMjMuOHoiXQogICAgfTsKICAgIGZhU3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdXNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3ZDYiLCAiTTYwNC41IDIxMGExMC40IDEwLjQgMCAxIDEgLTExLjQtMTcuNCAxMC40IDEwLjQgMCAxIDEgMTEuNCAxNy40ek02MjEgMTg3LjJhMzguNSAzOC41IDAgMSAxIC03NSAxNy42IDM4LjUgMzguNSAwIDEgMSA3NS0xNy42ek00MzMuNyAzMzYuN2MzLjIgNC42IDUuOCA5IDcuMyAxMy40IDEgMy4xIDIuNCA3LjMgNS41IDguOSAuMiAuMSAuMyAuMiAuNSAuMiA1LjcgMi4xIDIwLjMgMS43IDIwLjMgMS43bDI2LjggMGMyLjMgMCAyMi40IDAgMjEuOS0yLjMtMi40LTEwLjgtMTQuOS0xMi43LTI0LjQtMTguMy04LjctNS4yLTE3LTExLjEtMjAuOC0yMS4zLTItNS4yLS44LTE3LjQgMi42LTIxLjggMi41LTMuMiA2LjEtNS4zIDEwLTYuMiA0LjMtLjkgOC44LS4xIDEzLjEgLjMgNS4zIC41IDEwLjYgMS41IDE1LjkgMi4yIDEwLjMgMS4zIDIwLjYgMS45IDMxIDEuNiAxNy4xLS41IDM0LjItMy4yIDUwLjQtOC43IDExLjMtMy44IDIyLjQtOC45IDMyLTE2LjEgMTAuOS04LjEgOC4xLTcuNC0zLTYuMi0xMy4zIDEuNC0yNi42IDEuNi0zOS45IC44LTEyLjQtLjctMjQuNy0yLjItMzUuOS03LjktOC44LTQuNi0xNi40LTkuMS0yMy40LTE2LjItMS0xLjEtMS43LTQuMiAuMi02LjIgMS45LTEuOSA1LjgtLjggNyAuMiAxMi4yIDEwLjIgMzAuNSAxOC42IDQ5LjMgMTkuNSAxMC4yIC41IDIwLjEgLjcgMzAuNCAuMyA1LjEtLjIgMTIuOC0uMiAxNy45LS4zIDIuNiAwIDkuOCAuNyAxMS4yLTIuMSAuNC0uOCAuNC0xLjggLjMtMi43LTEuNS00MC45LTQuNS04Ni45LTQ3LjMtMTA2LjUtMzEuOS0xNC42LTc5LjctMzcuMi05OS45LTQ2LjYtNC43LTIuMi0xMC4yIDEuMy0xMC4yIDYuNSAwIDEzLjYgLjcgMzMuMyAuNyA1MS4xLTkuNy05LjktMjYtMTYuMS0zOC40LTIxLjgtMTQuMS02LjUtMjguNy0xMi00My41LTE2LjYtMjkuOC05LjItNjAuNy0xNC45LTkxLjctMTgtMzUuMi0zLjUtNzEtMS44LTEwNS43IDUuMy01Ni45IDEyLjItMTEzLjEgMzkuNy0xNTUuNyA3OS44LTI2LjEgMjQuNi00Ni42IDU5LjctNDggOTUuMi0yIDUwLjMgMTIuMSA3Ny4zIDM4IDEwNS4yIDQxLjMgNDQuNCAxMzAuMiA1MC42IDE2Ni4yLTIgMTYuMi0yMy43IDE5LjctNTUuOCA4LTgyLTExLjgtMjYuMi0zOC44LTQ1LjEtNjcuNC00Ni0yMi4yLS43LTQ1LjkgMTAuNi01NC41IDMxLjEtNi41IDE1LjctMi44IDM1LjEgOSA0Ny4zIDQuNiA0LjggMTAuOSA4LjcgMTcuNyA3LjEgNC0uOSA3LjQtMy45IDgtOCAuOS02LTQuNC05LjktNy42LTE0LjUtNS44LTguMy00LjctMjAuOSAyLjctMjcuOSA2LjItNiAxNS4zLTcuOCAyMy45LTcuNyA4IDAgMTYuMiAxLjQgMjMuMSA1LjUgOS43IDUuNyAxNi4yIDE2LjIgMTguNCAyNy4yIDYuNyAzMy0yMC4yIDU5LjktNTYuNiA2Mi0xOC42IDEuMS0zNy42LTMuOC01Mi4xLTE1LjUtMzYuOS0yOS44LTQ1LjktOTAuMy0zLjgtMTIyLjcgNDAtMzAuNyA5MC40LTIyLjggMTIwLjItNi44IDIzLjggMTIuOCA0MS41IDMzLjYgNTUgNTYuNyA2LjcgMTEuNiAxMi41IDIzLjcgMTcuOCAzNi4xIDUuMSAxMS44IDkuOSAyMy44IDIwLjIgMzIuNSA2LjggNS44IDE1LjIgNS42IDI0LjEgNS42bDUwLjggMGM2LjkgMCA1LjItNC42IDIuMi03LjctNi43LTYuOS0xNi40LTguNC0yNS40LTEwLjktMjAuNS01LjYtMTguNC0zMi44LTEyLjctMzIuOCAxOC4zIDAgMTguOSAuNiAzNC45IC4zIDIzLjItLjMgMzAuMi0xLjcgNDguMyA1IDkuNyAzLjYgMTkgMTMuMSAyNS4xIDIxLjd6Il0KICAgIH07CiAgICBmYUFwcFN0b3JlSW9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcC1zdG9yZS1pb3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3MCIsICJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyNyAzODQuNWMtNS41IDkuNi0xNy44IDEyLjgtMjcuMyA3LjMtOS42LTUuNS0xMi44LTE3LjgtNy4zLTI3LjNsMTQuMy0yNC43YzE2LjEtNC45IDI5LjMtMS4xIDM5LjYgMTEuNEwxMjcgMzg0LjV6bTEzOC45LTUzLjlMODQgMzMwLjZjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUxIDAgNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNiA2Mi4xIDBjMjAuMiAwIDMxLjUgMjMuNyAyMi43IDQwem05OC4xIDBsLTI5IDAgMTkuNiAzMy45YzUuNSA5LjYgMi4yIDIxLjgtNy4zIDI3LjMtOS42IDUuNS0yMS44IDIuMi0yNy4zLTcuMy0zMi45LTU2LjktNTcuNS05OS43LTc0LTEyOC4xLTE2LjctMjktNC44LTU4IDcuMS02Ny44IDEzLjEgMjIuNyAzMi43IDU2LjcgNTguOSAxMDJsNTIgMGMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6Il0KICAgIH07CiAgICBmYVVsdHJhbHl0aWNzWW9sbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bHRyYWx5dGljcy15b2xvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NmYiLCAiTTM4My41IDEwLjhjNjEuOC0uMiAxMTIuMyA1MC42IDExMi4zIDExMi45LS4yIDIuNyAwIDAtLjEgMy4zbC4zIC4zYy0xLjUgODkuOS01MyAxNjguNC0xMjcuNCAyMDguNWwwIDUyLjhjMCA2Mi42LTUxLjEgMTEzLjUtMTEzLjcgMTEyLjktNjItLjYtMTExLjQtNTIuMi0xMTEuNC0xMTQuM2wwLTUxLjJjLTQwLjctMjEuOS03NC41LTU1LjItOTctOTUuNiAyMy4yIDE2LjUgNTEuNyAyNiA4MiAyNS45IDc4LjYtLjIgMTQyLjItNjQgMTQyLjMtMTQyLjUgLjEtNjIuMyA1MC41LTExMi43IDExMi45LTExMi45em0tMjU1IDIyNS44YTExMi45IDExMi45IDAgMSAxIDAtMjI1LjggMTEyLjkgMTEyLjkgMCAxIDEgMCAyMjUuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlRHJpYmJibGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWRyaWJiYmxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImRyaWJiYmxlLXNxdWFyZSJdLCAiZjM5NyIsICJNMTY1LjkgMTMyLjVjLTM4LjMgMTgtNjYuOCA1My4zLTc1LjcgOTUuNyA2LjEgLjEgNjIuNCAuMyAxMjYuNC0xNi43LTIyLjctNDAuMi00Ny4xLTc0LjEtNTAuNy03OXptMjYuMS05LjFjMy44IDUuMSAyOC42IDM4LjkgNTEgODAgNDguNi0xOC4zIDY5LjEtNDUuOSA3MS42LTQ5LjQtMzMuNi0yOS44LTc5LjMtNDEuMS0xMjIuNi0zMC42ek0yNzcuNCAzODJjLTItMTItMTAtNTMuOC0yOS4yLTEwMy42LTU1LjEgMTguOC05My44IDU2LjQtMTA4LjEgODUuNiA0MC41IDMxLjYgOTMuMyAzNi43IDEzNy4zIDE4ek0yMjcuOCAyMzIuNkMxNTkuNiAyNTMgOTMuNCAyNTIuMiA4Ny40IDI1MmwwIDQuMmMwIDM1LjEgMTMuMyA2Ny4xIDM1LjEgOTEuNCAyMi4yLTM3LjkgNjcuMS03Ny45IDExNi41LTkxLjgtMy40LTcuOC03LjItMTUuNS0xMS4xLTIzLjJsLS4xIDB6bTcyLjUgMTM2LjljMzAuNy0yMC43IDUyLjUtNTMuNiA1OC42LTkxLjYtNC42LTEuNS00Mi4zLTEyLjctODUuMS01LjggMTcuOSA0OS4xIDI1LjEgODkuMSAyNi41IDk3LjR6bS0zNC44LTExOWM0NS41LTUuNyA5MC43IDMuNCA5NS4yIDQuNC0uMy0zMi4zLTExLjgtNjEuOS0zMC45LTg1LjEtMi45IDMuOS0yNS44IDMzLjItNzYuMyA1My45IDQuOCA5LjggOC4zIDE3LjggMTIgMjYuOHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCA5NmExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il0KICAgIH07CiAgICBmYURyaWJiYmxlU3F1YXJlID0gZmFTcXVhcmVEcmliYmJsZTsKICAgIGZhVWlraXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidWlraXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwMyIsICJNNDQzLjkgMTI4bDAgMjU2LTIyNS45IDEyOC0yMTgtMTI4IDAtMjE0LjMgODcuNiA0NS4xIDAgMTE3IDEzMy41IDc1LjUgMTM1LjgtNzUuNSAwLTE1MS0xMDEuMS01Ny42IDg3LjYtNTMuMSAxMDAuNSA1Ny45ek0zMDguNiA0OS4xbC04NC44LTQ5LjEtODguNiA1NC44IDg2IDQ3LjMgODcuNC01M3oiXQogICAgfTsKICAgIGZhU3VwZXJwb3dlcnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3VwZXJwb3dlcnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkZCIsICJNNDQ4IDMyYy04My4zIDExLTE2Ni44IDIyLTI1MCAzMy05MiAxMi41LTE2My4zIDg2LjctMTY5IDE4MC0zLjMgNTUuNSAxOCAxMDkuNSA1Ny44IDE0OC4yTDAgNDgwYzgzLjMtMTEgMTY2LjUtMjIgMjQ5LjgtMzMgOTEuOC0xMi41IDE2My4zLTg2LjggMTY4LjctMTc5LjggMy41LTU1LjUtMTgtMTA5LjUtNTcuNy0xNDguMkw0NDggMzJ6TTM2OC4zIDI2NC4zYy00LjIgNzkuNS03NCAxMzkuMi0xNTIuOCAxMzQuNS03OS41LTQuNy0xNDAuNy03MS0xMzYuMy0xNTEgNC41LTc5LjIgNzQuMy0xMzkuMyAxNTMtMTM0LjUgNzkuMyA0LjcgMTQwLjUgNzEgMTM2LjEgMTUxeiJdCiAgICB9OwogICAgZmFZb3V0dWJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlvdXR1YmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTgwMl0sICJmMTY3IiwgIk01NDkuNyAxMjQuMUM1NDMuNSAxMDAuNCA1MjQuOSA4MS44IDUwMS40IDc1LjUgNDU4LjkgNjQgMjg4LjEgNjQgMjg4LjEgNjRTMTE3LjMgNjQgNzQuNyA3NS41QzUxLjIgODEuOCAzMi43IDEwMC40IDI2LjQgMTI0LjEgMTUgMTY3IDE1IDI1Ni40IDE1IDI1Ni40czAgODkuNCAxMS40IDEzMi4zYzYuMyAyMy42IDI0LjggNDEuNSA0OC4zIDQ3LjggNDIuNiAxMS41IDIxMy40IDExLjUgMjEzLjQgMTEuNXMxNzAuOCAwIDIxMy40LTExLjVjMjMuNS02LjMgNDItMjQuMiA0OC4zLTQ3LjggMTEuNC00Mi45IDExLjQtMTMyLjMgMTEuNC0xMzIuM3MwLTg5LjQtMTEuNC0xMzIuM3pNMjMyLjIgMzM3LjZsMC0xNjIuNCAxNDIuNyA4MS4yLTE0Mi43IDgxLjJ6Il0KICAgIH07CiAgICBmYUVtYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVtYmVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MjMiLCAiTTYzOS45IDI1NC42Yy0xLjEtMTAuNy0xMC43LTYuOC0xMC43LTYuOHMtMTUuNiAxMi4xLTI5LjMgMTAuN2MtMTMuNy0xLjMtOS40LTMyLTkuNC0zMnMzLTI4LjEtNS4xLTMwLjRjLTguMS0yLjQtMTggNy4zLTE4IDcuM3MtMTIuNCAxMy43LTE4LjMgMzEuMmwtMS42IC41czEuOS0zMC42LS4zLTM3LjZjLTEuNi0zLjUtMTYuNC0zLjItMTguOCAzcy0xNC4yIDQ5LjItMTUgNjcuMmMwIDAtMjMuMSAxOS42LTQzLjMgMjIuOHMtMjUtOS40LTI1LTkuNCA1NC44LTE1LjMgNTIuOS01OS4xLTQ0LjItMjcuNi00OS0yNGMtNC42IDMuNS0yOS40IDE4LjQtMzYuNiA1OS43LS4yIDEuNC0uNyA3LjUtLjcgNy41cy0yMS4yIDE0LjItMzMgMThjMCAwIDMzLTU1LjYtNy4zLTgwLjktMTEuNC02LjgtMjEuMy0uNS0yNy4yIDUuMyAxMy42LTE3LjMgNDYuNC02NC4yIDM2LjktMTA1LjItNS44LTI0LjQtMTgtMjcuMS0yOS4yLTIzLjEtMTcgNi43LTIzLjUgMTYuNy0yMy41IDE2LjdzLTIyIDMyLTI3LjEgNzkuNS0xMi42IDEwNS4xLTEyLjYgMTA1LjEtMTAuNSAxMC4yLTIwLjIgMTAuNy01LjQtMjguNy01LjQtMjguNyA3LjUtNDQuNiA3LTUyLjEtMS4xLTExLjYtOS45LTE0LjJjLTguOS0yLjctMTguNSA4LjYtMTguNSA4LjZzLTI1LjUgMzguNy0yNy43IDQ0LjZsLTEuMyAyLjQtMS4zLTEuNnMxOC01Mi43IC44LTUzLjUtMjguNSAxOC44LTI4LjUgMTguOC0xOS42IDMyLjgtMjAuNCAzNi41bC0xLjMtMS42czguMS0zOC4yIDYuNC00Ny42Yy0xLjYtOS40LTEwLjUtNy41LTEwLjUtNy41cy0xMS4zLTEuMy0xNC4yIDUuOS0xMy43IDU1LjMtMTUgNzAuN2MwIDAtMjguMiAyMC4yLTQ2LjggMjAuNC0xOC41IC4zLTE2LjctMTEuOC0xNi43LTExLjhzNjgtMjMuMyA0OS40LTY5LjJjLTguMy0xMS44LTE4LTE1LjUtMzEuNy0xNS4zLTEzLjcgLjMtMzAuMyA4LjYtNDEuMyAzMy4zLTUuMyAxMS44LTYuOCAyMy03LjggMzEuNSAwIDAtMTIuMyAyLjQtMTguOC0yLjlzLTEwIDAtMTAgMC0xMS4yIDE0LS4xIDE4LjMgMjguMSA2LjEgMjguMSA2LjFjMS42IDcuNSA2LjIgMTkuNSAxOS42IDI5LjcgMjAuMiAxNS4zIDU4LjgtMS4zIDU4LjgtMS4zbDE1LjktOC44cy41IDE0LjYgMTIuMSAxNi43IDE2LjQgMSAzNi41LTQ3LjljMTEuOC0yNSAxMi42LTIzLjYgMTIuNi0yMy42bDEuMy0uM3MtOS4xIDQ2LjgtNS42IDU5LjdDMTg3LjcgMzE5LjQgMjAzIDMxOCAyMDMgMzE4czguMyAyLjQgMTUtMjEuMiAxOS42LTQ5LjkgMTkuNi00OS45bDEuNiAwcy01LjYgNDguMSAzIDYzLjcgMzAuOSA1LjMgMzAuOSA1LjMgMTUuNi03LjggMTgtMTAuMmMwIDAgMTguNSAxNS44IDQ0LjYgMTIuOSA1OC4zLTExLjUgNzkuMS0yNS45IDc5LjEtMjUuOXMxMCAyNC40IDQxLjEgMjYuN2MzNS41IDIuNyA1NC44LTE4LjYgNTQuOC0xOC42cy0uMyAxMy41IDEyLjEgMTguNiAyMC43LTIyLjggMjAuNy0yMi44bDIwLjctNTcuMiAxLjkgMHMxLjEgMzcuMyAyMS41IDQzLjIgNDctMTMuNyA0Ny0xMy43IDYuNC0zLjUgNS4zLTE0LjN6bS01NzggNS4zYy44LTMyIDIxLjgtNDUuOSAyOS0zOSA3LjMgNyA0LjYgMjItOS4xIDMxLjQtMTMuNyA5LjUtMTkuOSA3LjYtMTkuOSA3LjZ6TTMzNC43IDEzNi4xczE5LjEtNDkuNyAyMy42LTI1LjUtNDAgOTYuMi00MCA5Ni4yYy41LTE2LjIgMTYuNC03MC43IDE2LjQtNzAuN3ptMjIuOCAxMzguNGMtMTIuNiAzMy00My4zIDE5LjYtNDMuMyAxOS42cy0zLjUtMTEuOCA2LjQtNDQuOSAzMy4zLTIwLjIgMzMuMy0yMC4yIDE2LjIgMTIuNCAzLjYgNDUuNXptODQuNi0xNC42cy0zLTEwLjUgOC4xLTMwLjZjMTEtMjAuMiAxOS42LTkuMSAxOS42LTkuMXM5LjQgMTAuMi0xLjMgMjUuNS0yNi40IDE0LjItMjYuNCAxNC4yeiJdCiAgICB9OwogICAgZmFCb290c3RyYXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYm9vdHN0cmFwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4MzYiLCAiTTMzMy41IDIwMS40YzAtMjIuMS0xNS42LTM0LjMtNDMtMzQuM2wtNTAuNCAwIDAgNzEuMiA0Mi41IDBjMzIuOC0uMSA1MC45LTEzLjMgNTAuOS0zNi45ek01MTcgMTg4LjZjLTkuNS0zMC45LTEwLjktNjguOC05LjgtOTguMSAxLjEtMzAuNS0yMi43LTU4LjUtNTQuNy01OC41TDEyMy43IDMyYy0zMi4xIDAtNTUuOCAyOC4xLTU0LjcgNTguNSAxIDI5LjMtLjMgNjcuMi05LjggOTguMS05LjYgMzEtMjUuNyA1MC42LTUyLjIgNTMuMWwwIDI4LjVjMjYuNCAyLjUgNDIuNiAyMi4xIDUyLjIgNTMuMSA5LjUgMzAuOSAxMC45IDY4LjggOS44IDk4LjEtMS4xIDMwLjUgMjIuNyA1OC41IDU0LjcgNTguNWwzMjguNyAwYzMyLjEgMCA1NS44LTI4LjEgNTQuNy01OC41LTEtMjkuMyAuMy02Ny4yIDkuOC05OC4xIDkuNi0zMSAyNS43LTUwLjYgNTIuMS01My4xbDAtMjguNWMtMjYuMy0yLjUtNDIuNS0yMi4xLTUyLTUzLjF6TTMwMC4yIDM3NS4xbC05Ny45IDAgMC0yMzguMyA5Ny40IDBjNDMuMyAwIDcxLjcgMjMuNCA3MS43IDU5LjQgMCAyNS4zLTE5LjEgNDcuOS00My41IDUxLjhsMCAxLjNjMzMuMiAzLjYgNTUuNSAyNi42IDU1LjUgNTguMyAwIDQyLjEtMzEuMyA2Ny41LTgzLjIgNjcuNXptLTEwLTEwOC43bC01MC4xIDAgMCA3OC40IDUyLjMgMGMzNC4yIDAgNTIuMy0xMy43IDUyLjMtMzkuNSAwLTI1LjctMTguNi0zOC45LTU0LjUtMzguOXoiXQogICAgfTsKICAgIGZhSXR1bmVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0dW5lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2I0IiwgIk0yMjMuNiA4MC4zYTE3MS4zIDE3MS4zIDAgMSAwIC4yIDM0Mi41IDE3MS4zIDE3MS4zIDAgMSAwIC0uMi0zNDIuNXptNzkuNCAyNDBjLTMuMiAxMy42LTEzLjUgMjEuMi0yNy4zIDIzLjgtMTIuMSAyLjItMjIuMiAyLjgtMzEuOS01LTExLjgtMTAtMTItMjYuNC0xLjQtMzYuOCA4LjQtOCAyMC4zLTkuNiAzOC0xMi44IDMtLjUgNS42LTEuMiA3LjctMy43IDMuMi0zLjYgMi4yLTIgMi4yLTgwLjggMC01LjYtMi43LTcuMS04LjQtNi4xLTQgLjctOTEuOSAxNy4xLTkxLjkgMTcuMS01IDEuMS02LjcgMi42LTYuNyA4LjMgMCAxMTYuMSAuNSAxMTAuOC0xLjIgMTE4LjUtMi4xIDktNy42IDE1LjgtMTQuOSAxOS42LTguMyA0LjYtMjMuNCA2LjYtMzEuNCA1LjItMjEuNC00LTI4LjktMjguNy0xNC40LTQyLjkgOC40LTggMjAuMy05LjYgMzgtMTIuOCAzLS41IDUuNi0xLjIgNy43LTMuNyA1LTUuNyAuOS0xMjcgMi42LTEzMy43IC40LTIuNiAxLjUtNC44IDMuNS02LjQgMi4xLTEuNyA1LjgtMi43IDYuNy0yLjcgMTAxLTE5IDExMy4zLTIxLjQgMTE1LjEtMjEuNCA1LjctLjQgOSAzIDkgOC43LS4xIDE3MC42IC40IDE2MS40LTEgMTY3LjZ6TTM0NS4yIDMyTDEwMi44IDMyQzQ1LjkgMzIgMCA3Ny45IDAgMTM0LjhMMCAzNzcuMkMwIDQzNC4xIDQ1LjkgNDgwIDEwMi44IDQ4MGwyNDIuNCAwYzU3IDAgMTAyLjgtNDUuOSAxMDIuOC0xMDIuOGwwLTI0Mi40QzQ0OCA3Ny45IDQwMi4xIDMyIDM0NS4yIDMyek0yMjMuNiA1OWExOTIuNSAxOTIuNSAwIDEgMSAwIDM4NSAxOTIuNSAxOTIuNSAwIDEgMSAwLTM4NXoiXQogICAgfTsKICAgIGZhU3F1YXJlWGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ4aW5nLXNxdWFyZSJdLCAiZjE2OSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTkzLjggMzIwLjJjLTUuNSAwLTguNy01LjMtNi0xMC4zbDQ5LjMtODYuN2MuMSAwIC4xLS4xIDAtLjJsLTMxLjQtNTRjLTMtNS42IC4yLTEwLjEgNi0xMC4xbDQ2LjYgMGM1LjIgMCA5LjUgMi45IDEyLjkgOC43bDMxLjkgNTUuM2MtMS4zIDIuMy0xOCAzMS43LTUwLjEgODguMi0zLjUgNi4yLTcuNyA5LjEtMTIuNiA5LjFsLTQ2LjYgMHptMTYzLjUtMzMuNGwwIC4yIDY1LjUgMTE5YzIuOCA1LjEgLjEgMTAuMS02IDEwLjFsLTQ2LjYgMGMtNS41IDAtOS43LTIuOS0xMi45LTguN2wtNjYtMTIwLjNjMS44LTMuMiAyMi45LTQwLjQgNjMuMy0xMTEuNiAxMS43LTIwLjcgMjUuMS00NC4zIDQwLjEtNzAuOCAzLjMtNS44IDcuNC04LjcgMTIuNS04LjdsNDYuOSAwYzUuNy0uMSA4LjggNC43IDYgMTBMMjU3LjMgMjg2Ljh6Il0KICAgIH07CiAgICBmYVhpbmdTcXVhcmUgPSBmYVNxdWFyZVhpbmc7CiAgICBmYUNzczNBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzMy1hbHQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjM4YiIsICJNMCAzMkwzNC45IDQyNy44IDE5MiA0ODAgMzQ5LjEgNDI3LjggMzg0IDMyIDAgMzJ6bTMxMy4xIDgwbC00LjggNDcuMy0xMTUuMyA0OS4zLS4zIC4xIDExMS41IDAtMTIuOCAxNDYuNi05OC4yIDI4LjctOTguOC0yOS4yLTYuNC03My45IDQ4LjkgMCAzLjIgMzguMyA1Mi42IDEzLjMgNTQuNy0xNS40IDMuNy02MS42LTE2Ni4zLS41IDAtLjEtLjIgLjEtMy42LTQ2LjMgMTEyLjEtNDYuNyA2LjUtMi43LTEyMi45IDAtNS44LTQ3LjMgMjQyLjIgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlc3BhY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlc3BhY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjViZSIsICJNMTg2LjEgMzQzLjNjLTkuNyA5LjctOS43IDI1LjMgMCAzNC45czI1LjMgOS42IDM0LjkgMEwzNzguMyAyMjEuMWMxOS4zLTE5LjMgNTAuNi0xOS4zIDY5LjkgMHMxOS4zIDUwLjYgMCA2OS45TDI5NCA0NDUuMWMxOS4zIDE5LjMgNTAuNSAxOS4zIDY5LjggMGwwIDAgMTE5LjMtMTE5LjJjMzguNi0zOC42IDM4LjYtMTAxLjEgMC0xMzkuNy0zOC42LTM4LjYtMTAxLjItMzguNi0xMzkuNyAwTDE4Ni4xIDM0My4zek00MzAuNyAyMzguNWMtOS43LTkuNy0yNS4zLTkuNy0zNC45IDBMMjM4LjUgMzk1LjdjLTE5LjMgMTkuMy01MC41IDE5LjMtNjkuOCAwbDAgMGMtOS42LTkuNi0yNS4zLTkuNy0zNC45IDBsMCAwYy05LjcgOS42LTkuNyAyNS4zIDAgMzQuOWwwIDBjMzguNiAzOC42IDEwMS4xIDM4LjYgMTM5LjcgMEw0MzAuNyAyNzMuNWM5LjYtOS43IDkuNi0yNS4zIDAtMzQuOXptLTI2MiA4Ny4zTDMyNS45IDE2OC43YzkuNi05LjYgOS42LTI1LjMgMC0zNC45LTkuNi05LjYtMjUuMy05LjYtMzQuOSAwTDEzMy43IDI5MC45Yy0xOS4zIDE5LjMtNTAuNiAxOS4zLTY5LjkgMGwwIDBjLTE5LjMtMTkuMy0xOS4zLTUwLjUgMC02OS44bDAgMCAxNTQuMi0xNTQuMmMtMTkuMy0xOS4zLTUwLjUtMTkuMy02OS44IDBsMCAwLTExOS4yIDExOS4zYy0zOC42IDM4LjYtMzguNiAxMDEuMSAwIDEzOS43IDM4LjYgMzguNiAxMDEuMSAzOC42IDEzOS43IDB6TTgxLjMgMjczLjVjOS42IDkuNiAyNS4zIDkuNiAzNC45IDBMMjczLjUgMTE2LjNjMTkuMy0xOS4zIDUwLjYtMTkuMyA2OS44IDBsMCAwYzkuNyA5LjYgMjUuMyA5LjYgMzQuOSAwczkuNi0yNS4zIDAtMzQuOWMtMzguNi0zOC42LTEwMS4xLTM4LjYtMTM5LjcgMEw4MS4zIDIzOC41Yy05LjYgOS42LTkuNiAyNS4zIDAgMzQuOWwwIDB6Il0KICAgIH07CiAgICBmYVRyZWxsbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0cmVsbG8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE4MSIsICJNMzkyLjMgMzJMNTYuMSAzMmMtMzEgMC01Ni4xIDI1LjEtNTYuMSA1Ni0uMSAwIDAtNCAwIDMzNiAwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMzYuMiAwYzMwLjgtLjIgNTUuNy0yNS4yIDU1LjctNTZsMC0zMzZjLjEtMzAuOC0yNC44LTU1LjgtNTUuNi01NnpNMTk3IDM3MS4zYy0uMiAxNC43LTEyLjEgMjYuNi0yNi45IDI2LjZsLTgyLjcgMGMtMTQuOCAuMS0yNi45LTExLjgtMjctMjYuNmwwLTI1NC4yYzAtMTQuOCAxMi0yNi45IDI2LjktMjYuOWw4Mi45IDBjMTQuOCAwIDI2LjkgMTIgMjYuOSAyNi45bDAgMjU0LjItLjEgMHptMTkzLjEtMTEyYzAgMTQuOC0xMiAyNi45LTI2LjkgMjYuOWwtODEgMGMtMTQuOCAwLTI2LjktMTItMjYuOS0yNi45bDAtMTQyLjFjMC0xNC44IDEyLTI2LjkgMjYuOC0yNi45bDgxLjEgMGMxNC44IDAgMjYuOSAxMiAyNi45IDI2LjlsMCAxNDIuMXoiXQogICAgfTsKICAgIGZhVmlhZGVvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYWRlbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmE5IiwgIk0yNzYuNCAxNTAuNWwwIC43Yy0xNy45LTUyLjYtNDIuNi0xMDMuNC03MC44LTE1MS4yIDQzLjMgMjkuMiA2NyAxMDAgNzAuOCAxNTAuNXptMzIuNyAxMjEuN2M3LjYgMTguMiAxMSAzNy41IDExIDU3IDAgNzcuNy01Ny44IDE0MS0xMzcuOCAxMzkuNGwzLjgtLjNjNzQuMi00Ni43IDEwOS4zLTExOC42IDEwOS4zLTIwNS4xIDAtMzguMS02LjUtNzUuOS0xOC45LTExMiAxIDExLjcgMSAyMy43IDEgMzUuNCAwIDkxLjgtMTguMSAyNDEuNi0xMTYuNiAyODAtNjUuNy0xMS40LTExMS4zLTY4LjYtMTExLjMtMTM3LjQgMC03NS42IDU3LjQtMTQyLjMgMTM1LjQtMTQyLjMgMTYuOCAwIDMzLjcgMy4xIDQ5LjEgOS42IDEuNy0xNS4xIDYuNS0yOS45IDEzLjQtNDMuMy0xOS45LTcuMi00MS4yLTEwLjctNjIuNS0xMC43LTE2MS41IDAtMjM4LjcgMTk1LjktMTI5LjkgMzEzLjcgNjcuOSA3NC42IDE5MiA3My45IDI1OS44IDAgNTYuNi02MS4zIDYwLjktMTQyLjQgMzYuNC0yMDEtMTIuNyA4LTI3LjEgMTMuOS00Mi4yIDE3ek00MTguMyAxMS43Yy0zMSA2Ni41LTgxLjMgNDcuMi0xMTUuOCA4MC4xLTEyLjQgMTItMjAuNiAzNC0yMC42IDUwLjUgMCAxNC4xIDQuNSAyNy4xIDEyIDM4LjggNDcuNC0xMSA5OC4zLTQ2IDExOC4yLTkwLjctLjcgNS41LTQuOCAxNC40LTcuMiAxOS4yLTIwLjMgMzUuNy02NC42IDY1LjYtOTkuNyA4NC45IDE0LjggMTQuNCAzMy43IDI1LjggNTUgMjUuOCA3OSAwIDExMC4xLTEzNC42IDU4LjEtMjA4LjZ6Il0KICAgIH07CiAgICBmYVNlYXJjaGVuZ2luID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlYXJjaGVuZ2luIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZWIiLCAiTTIxNC42IDEzMC4zbC02Ny4yIDI4LjIgMC0xMTUuMy01NC43IDE5MC4zIDU0LjctMjQuMiAwIDEzMC4zIDY3LjItMjA5LjN6TTEzMS40IDMzLjZsLTEuMyA0LjctMTUuMiA1Mi45Qzc0LjYgMTA2LjcgNDYgMTQ1LjggNDYgMTkxLjUgNDYgMjQzLjggODAuMyAyODcuNCAxMjkuNCAyOTdsMCA1My42QzUxLjUgMzQwLjEtNiAyNzIuNC02IDE5MS42LTYgMTExLjEgNTMuOCA0NC40IDEzMS40IDMzLjZ6TTQ0Mi44IDQ4MC44Yy0xMS4yIDExLjItMjMuMSAxMi4zLTI4LjYgMTAuNS01LjQtMS44LTI3LjEtMTkuOS02MC40LTQ0LjQtMzMuMy0yNC42LTMzLjYtMzUuNy00My01Ni43LTkuNC0yMC45LTMwLjQtNDIuNi01Ny41LTUyLjRsLTkuNy0xNC43Yy0yNC43IDE2LjktNTMgMjYuOS04MS4zIDI4LjdsMi4xLTYuNiAxNS45LTQ5LjVjNDYuNS0xMS45IDgwLjktNTQgODAuOS0xMDQuMiAwLTU0LjUtMzguNC0xMDIuMS05Ni0xMDcuMWwwLTUyLjFjODMuMiA1LjEgMTQ4LjggNzQuNSAxNDguOCAxNTkuMyAwIDMzLjYtMTEuMiA2NC43LTI5IDkwLjRsMTQuNiA5LjZjOS44IDI3LjEgMzEuNSA0OCA1Mi40IDU3LjRzMzIuMiA5LjcgNTYuOCA0M2MyNC42IDMzLjIgNDIuNyA1NC45IDQ0LjUgNjAuM3MuNyAxNy4zLTEwLjUgMjguNXptLTkuOS0xNy45YzAtNC40LTMuNi04LTgtOHMtOCAzLjYtOCA4IDMuNiA4IDggOCA4LTMuNiA4LTh6Il0KICAgIH07CiAgICBmYVVucmVhbEVuZ2luZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bnJlYWwtZW5naW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NWMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem02NS41LTExMy43bC0yNS4xLTI4LjMtNDIuNCA0Mi42Yy0yNC4xLS4zLTQ3LjktNi4yLTY5LjMtMTcuMnMtNDAuMS0yNi45LTU0LjUtNDYuM2M0LjUgMS40IDkuMiAyLjMgMTMuOSAyLjYgNi45IC4xIDE0LjUtMi40IDE0LjUtMTQuMWwwLTExNS4xYy4xLTMtLjUtNS45LTEuNy04LjZzLTMuMS01LTUuNC02LjktNS0zLjEtNy45LTMuNy01LjktLjUtOC44IC4yYy0xOS42IDQuNS0zNS4zIDUzLjUtMzUuMyA1My41LS4yLTIyLjYgNC41LTQ1IDEzLjgtNjUuNnMyMy0zOSA0MC4xLTUzLjhjMjIuNS0xOS41IDUwLjEtMzIuMiA3OS42LTM2LjctMjEuNCAxMi4yLTMzLjUgMzIuMS0zMy41IDQ4LjkgMCAyNi45IDE2LjIgMjMuNiAyMSAxOS43bDAgMTU1LjNjLjggMS45IDEuOSAzLjggMy4yIDUuNSAyLjEgMyA1IDUuNCA4LjIgN3M2LjkgMi41IDEwLjUgMi41YzE2LjIgMCAzNy4zLTE4LjUgMzcuMy0xOC41bDAtMTI1LjdjMC0xMi44LTkuNi0yOC4yLTE5LjMtMzMuNSAwIDAgMTcuOS0zLjIgMzEuNyA3LjQgMi42LTMuMiA1LjMtNi4yIDguMi05LjEgMzIuMi0zMS42IDYyLjUtNDAuNiA4Ny43LTQ1LjEgMCAwLTQ1LjkgMzYuMS00NS45IDg0LjUgMCAzNiAuOSAxMjMuOCAuOSAxMjMuOCAxNyAxNi40IDQyLjQtNy4zIDY1LjItMzAuOC00LjQgMjEuMy0yNCA3NS45LTg2LjYgMTA1LjR6Il0KICAgIH07CiAgICBmYVBheXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYXlwYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFlZCIsICJNMTExLjkgMjk1LjljLTMuNSAxOS4yLTE3LjQgMTA4LjctMjEuNSAxMzQtLjMgMS44LTEgMi41LTMgMi41bC03NC42IDBjLTcuNiAwLTEzLjEtNi42LTEyLjEtMTMuOUw1OS4zIDQ2LjZjMS41LTkuNiAxMC4xLTE2LjkgMjAtMTYuOSAxNTIuMyAwIDE2NS4xLTMuNyAyMDQgMTEuNCA2MC4xIDIzLjMgNjUuNiA3OS41IDQ0IDE0MC4zLTIxLjUgNjIuNi03Mi41IDg5LjUtMTQwLjEgOTAuMy00My40IC43LTY5LjUtNy03NS4zIDI0LjJ6TTM1Ny42IDE1MmMtMS44LTEuMy0yLjUtMS44LTMgMS4zLTIgMTEuNC01LjEgMjIuNS04LjggMzMuNi0zOS45IDExMy44LTE1MC41IDEwMy45LTIwNC41IDEwMy45LTYuMSAwLTEwLjEgMy4zLTEwLjkgOS40LTIyLjYgMTQwLjQtMjcuMSAxNjkuNy0yNy4xIDE2OS43LTEgNy4xIDMuNSAxMi45IDEwLjYgMTIuOWw2My41IDBjOC42IDAgMTUuNy02LjMgMTcuNC0xNC45IC43LTUuNC0xLjEgNi4xIDE0LjQtOTEuMyA0LjYtMjIgMTQuMy0xOS43IDI5LjMtMTkuNyA3MSAwIDEyNi40LTI4LjggMTQyLjktMTEyLjMgNi41LTM0LjggNC42LTcxLjQtMjMuOC05Mi42eiJdCiAgICB9OwogICAgZmFTcXVhcmVCbHVlc2t5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1ibHVlc2t5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2YTMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyNDcuNGMxNC41LTMwIDU0LTg1LjggOTAuNy0xMTMuMyAyNi41LTE5LjkgNjkuMy0zNS4yIDY5LjMgMTMuNyAwIDkuOC01LjYgODIuMS04LjkgOTMuOC0xMS40IDQwLjgtNTMgNTEuMi05MCA0NC45IDY0LjcgMTEgODEuMiA0Ny41IDQ1LjYgODQtNjcuNSA2OS4zLTk3LTE3LjQtMTA0LjYtMzkuNmwtLjMtLjljLS45LTIuNi0xLjQtNC4xLTEuOC00LjFzLS45IDEuNS0xLjggNC4xYy0uMSAuMy0uMiAuNi0uMyAuOS03LjYgMjIuMi0zNy4xIDEwOC44LTEwNC42IDM5LjYtMzUuNS0zNi41LTE5LjEtNzMgNDUuNi04NC0zNyA2LjMtNzguNi00LjEtOTAtNDQuOS0zLjMtMTEuNy04LjktODQtOC45LTkzLjggMC00OC45IDQyLjktMzMuNSA2OS4zLTEzLjcgMzYuNyAyNy41IDc2LjIgODMuNCA5MC43IDExMy4zeiJdCiAgICB9OwogICAgZmFEQW5kREJleW9uZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkLWFuZC1kLWJleW9uZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNmNhIiwgIk0zMTMuOCAyNDEuNWMxMy44IDAgMjEtMTAuMSAyNC44LTE3LjktMS0xLjEtNS00LjItNy40LTYuNi0yLjQgNC4zLTguMiAxMC43LTEzLjkgMTAuNy0xMC4yIDAtMTUuNC0xNC43LTMuMi0yNi42LS41LS4yLTQuMy0xLjgtOCAyLjQgMC0zIDEtNS4xIDIuMS02LjYtMy41IDEuMy05LjggNS42LTExLjQgNy45IC4yLTUuOCAxLjYtNy41IC42LTlsLS4yLS4ycy04LjUgNS42LTkuMyAxNC43YzAgMCAxLjEtMS42IDIuMS0xLjkgLjYtLjMgMS4zIDAgLjYgMS45LS4yIC42LTUuOCAxNS43IDUuMSAyNi0uNi0xLjYtMS45LTcuNiAyLjQtMS45LS4zIC4xIDUuOCA3LjEgMTUuNyA3LjF6bTUyLjQtMjEuMWMwLTQtNC45LTQuNC01LjYtNC41IDIgMy45IC45IDcuNSAuMiA5IDIuNS0uNCA1LjQtMS42IDUuNC00LjV6bTEwLjMgNS4yYzAtNi40LTYuMi0xMS40LTEzLjUtMTAuNyA4IDEuMyA1LjYgMTMuOC01IDExLjQgMy43LTIuNiAzLjItOS45LTEuMy0xMi41IDEuNCA0LjItMyA4LjItNy40IDQuNi0yLjQtMS45LTgtNi42LTEwLjYtOC42LTIuNC0yLjEtNS41LTEtNi42LTEuOC0xLjMtMS4xLS41LTMuOC0yLjItNS0xLjYtLjgtMy0uMy00LjgtMS0xLjYtLjYtMi43LTEuOS0yLjYtMy41LTIuNSA0LjQgMy40IDYuMyA0LjUgOC41IDEgMS45LS44IDQuOCA0IDguNSAxNC44IDExLjYgOS4xIDggMTAuNCAxOC4xIC42IDQuMyA0LjIgNi43IDYuNCA3LjQtMi4xLTEuOS0yLjktNi40IDAtOS4zIDAgMTMuOSAxOS4yIDEzLjMgMjMuMSA2LjQtMi40IDEuMS03LS4yLTktMS45IDcuNyAxIDE0LjItNC4xIDE0LjYtMTAuNnptLTM5LjQtMTguNGMyIC44IDEuNiAuNyA2LjQgNC41IDEwLjItMjQuNSAyMS43LTE1LjcgMjItMTUuNSAyLjItMS45IDkuOC0zLjggMTMuOC0yLjctMi40LTIuNy03LjUtNi4yLTEzLjMtNi4yLTQuNyAwLTcuNCAyLjItOCAxLjMtLjgtMS40IDMuMi0zLjQgMy4yLTMuNC01LjQgLjItOS42IDYuNy0xMS4yIDUuOS0xLjEtLjUgMS40LTMuNyAxLjQtMy43LTUuMSAyLjktOS4zIDkuMS0xMC4yIDEzIDQuNi01LjggMTMuOC05LjggMTkuNy05LTEwLjUgLjUtMTkuNSA5LjctMjMuOCAxNS44em0yNDIuNSA1MS45Yy0yMC43IDAtNDAgMS4zLTUwLjMgMi4xbDcuNCA4LjIgMCA3Ny4yLTcuNCA4LjJjMTAuNCAuOCAzMC45IDIuMSA1MS42IDIuMSA0Mi4xIDAgNTkuMS0yMC43IDU5LjEtNDguOSAwLTI5LjMtMjMuMi00OC45LTYwLjQtNDguOXptLTE1LjEgNzUuNmwwLTUzLjNjMzAuMS0zLjMgNDYuOCAzLjggNDYuOCAyNi4zIDAgMjUuNi0yMS40IDMwLjItNDYuOCAyN3pNMzAxLjYgMTgxYy0xLTMuNC0uMi02LjkgMS4xLTkuNCAxIDMgMi42IDYuNCA3LjUgOS0uNS0yLjQtLjItNS42IC41LTgtMS40LTUuNCAyLjEtOS45IDYuNC05LjkgNi45IDAgOC41IDguOCA0LjcgMTQuNCAyLjEgMy4yIDUuNSA1LjYgNy43IDcuOCAzLjItMy43IDUuNS05LjUgNS41LTEzLjggMC04LjItNS41LTE1LjktMTYuNy0xNi41LTIwLS45LTIwLjIgMTYuNi0yMCAxOC45IC41IDUuMiAzLjQgNy44IDMuMyA3LjV6bS0uNCA2Yy0uNSAxLjgtNyAzLjctMTAuMiA2LjkgNC44LTEgNy0uMiA3LjggMS44IC41IDEuNC0uMiAzLjQtLjUgNS42IDEuNi0xLjggNy01LjUgMTEtNi4yLTEtLjMtMy40LS44LTQuMy0uOCAyLjktMy40IDkuMy00LjUgMTIuOC0zLjctMi4yLS4yLTYuNyAxLjEtOC41IDIuNiAxLjYgLjMgMyAuNiA0LjMgMS4xLTIuMSAuOC00LjggMy40LTUuOCA2LjEgNy01IDEzLjEgNS4yIDcgOC4yIC44IC4yIDIuNyAwIDMuNS0uNS0uMyAxLjEtMS45IDMtMyAzLjQgMi45IDAgNy0xLjkgOC4yLTQuNiAwIDAtMS44IC42LTIuNi0uMnMuMy00LjMgLjMtNC4zYy0yLjMgMi45LTMuNC0xLjMtMS4zLTQuMi0xLS4zLTMuNS0uNi00LjYtLjUgMy4yLTEuMSAxMC40LTEuOCAxMS4yLS4zIC42IDEuMS0xIDMuNC0xIDMuNCA0LS41IDguMyAxLjEgNi43IDUuMSAyLjktMS40IDUuNS01LjkgNC44LTEwLjQtLjMgMS0xLjYgMi40LTIuOSAyLjcgLjItMS40LTEtMi4yLTEuOS0yLjYgMS43LTkuNi0xNC42LTE0LjItMTQuMS0yMy45LTEgMS4zLTEuOCA1LS44IDcuMSAyLjcgMy4yIDguNyA2LjcgMTAuMSAxMi4yLTIuNi02LjQtMTUuMS0xMS40LTE0LjYtMjAuMi0xLjYgMS42LTIuNiA3LjgtMS4zIDExIDIuNCAxLjQgNC41IDMuOCA0LjggNi4xLTIuMi01LjEtMTEuNC02LjEtMTMuOS0xMi4yLS42IDIuMi0uMyA1IDEgNi43IDAgMC0yLjItLjgtNy0uNiAxLjcgLjYgNS4xIDMuNSA0LjggNS4yem0yNS45IDcuNGMtMi43IDAtMy41LTIuMS00LjItNC4zIDMuMyAxLjMgNC4yIDQuMyA0LjIgNC4zem0zOC45IDMuN2wtMS0uNmMtMS4xLTEtMi45LTEuNC00LjctMS40LTIuOSAwLTUuOCAxLjMtNy41IDMuNC0uOCAuOC0xLjQgMS44LTIuMSAyLjZsMCAxNS43YzMuNSAyLjYgNy4xLTIuOSAzLTcuMiAxLjUgLjMgNC42IDIuNyA1LjEgMy4yIDAgMCAyLjYtLjUgNS0uNSAyLjEgMCAzLjkgLjMgNS42IDEuMWwwLTE4LjRjLTEuMSAuNS0yLjIgMS0yLjcgMS40bC0uNyAuN3pNNzkuOSAzMDUuOWMxNy4yLTQuNiAxNi4yLTE4IDE2LjItMTkuOSAwLTIwLjYtMjQuMS0yNS0zNy0yNWwtNTYuMSAwIDguMyA4LjYgMCAyOS41LTExLjMgMCAxMS40IDE0LjYgMCAzMi4zLTguNCA4LjZjNjEuNyAwIDczLjggMS41IDg2LjQtNS45IDYuNy00IDkuOS05LjggOS45LTE3LjYgMC01LjEgMi42LTE4LjgtMTkuNC0yNS4yek0zOC42IDI3OC40YzIwIDAgMjkuNi0uOCAyOS42IDkuMWwwIDNjMCAxMi4xLTE5IDguOC0yOS42IDguOGwwLTIwLjl6bTAgNTkuMmwwLTIyLjZjMTIuMiAwIDMyLjctMi4zIDMyLjcgOC44bDAgNC41IC4yIDBjMCAxMS4yLTEyLjUgOS4zLTMyLjkgOS4zem0xMDEuMi0xOS4zbDIzLjEgLjIgMC0uMiAxNC4xLTIxLjItMzcuMiAwIDAtMTQuOSA1Mi40IDAtMTQuMS0yMSAwLS4yLTczLjUgLjIgNy40IDguMiAwIDc3LjEtNy40IDguMiA4MS4yIDAgMTQuMS0yMS4yLTYwLjEgLjIgMC0xNS40em0yMTQuNy02MC4xYy03My45IDAtNzcuNSA5OS4zLS4zIDk5LjMgNzcuOSAwIDc0LjEtOTkuMyAuMy05OS4zem0tLjMgNzcuNWMtMzcuNCAwLTM2LjktNTUuMyAuMi01NS4zIDM2LjggLjEgMzguOCA1NS4zLS4yIDU1LjN6bS05MS4zLTguM2w0NC4xLTY2LjItNDEuNyAwIDYuMSA3LjItMjAuNSAzNy4yLS4zIDAtMjEtMzcuMiA2LjQtNy4yLTQ0LjkgMCA0NC4xIDY1LjggLjIgMTkuNC03LjcgOC4yIDQyLjYgMC03LjItOC4yLS4yLTE5ek0yMzQuNSAxNzYuMWMxLjYgMS4zIDIuOSAyLjQgMi45IDYuNmwwIDM4LjhjMCA0LjItLjggNS4zLTIuNyA2LjQtLjEgLjEtNy41IDQuNS03LjkgNC42bDM1LjEgMGMxMCAwIDE3LjQtMS41IDI2LTguNi0uNi01IC4yLTkuNSAuOC0xMiAwLS4yLTEuOCAxLjQtMi43IDMuNSAwLTUuNyAxLjYtMTUuNCA5LjYtMjAuNS0uMSAwLTMuNy0uOC05IDEuMSAyLTMuMSAxMC03LjkgMTAuNC03LjktOC4yLTI2LTM4LTIyLjktMzIuMi0yMi45LTMwLjkgMC0zMi42IC4zLTM5LjktNCAuMSAuOCAuNSA4LjIgOS42IDE0Ljl6bTIxLjUgNS41YzQuNiAwIDIzLjEtMy4zIDIzLjEgMTcuMyAwIDIwLjctMTguNCAxNy4zLTIzLjEgMTcuM2wwLTM0LjZ6bTIyOC45IDc5LjZsNyA4LjMgMCA0Mi41LS4zIDBjLTUuNC0xNC40LTQyLjMtNDEuNS00NS4yLTUwLjlsLTMxLjYgMCA3LjQgOC41IDAgNzYuOS03LjIgOC4zIDM5IDAtNy40LTguMiAwLTQ3LjQgLjMgMGMzLjcgMTAuNiA0NC41IDQyLjkgNDguNSA1NS42bDIxLjMgMCAwLTg1LjIgNy40LTguMy0zOS4yLS4xek0zNzguMiAxNjUuMWMtMzIuMiAwLTMyLjggLjItMzkuOS00IC4xIC43IC41IDguMyA5LjYgMTQuOSAzLjEgMiAyLjkgNC4zIDIuOSA5LjUgMS44LTEuMSAzLjgtMi4yIDYuMS0zLTEuMSAxLjEtMi43IDIuNy0zLjUgNC41IDEtMS4xIDcuNS01LjEgMTQuNi0zLjUtMS42IC4zLTQgMS4xLTYuMSAyLjkgLjEgMCAyLjEtMS4xIDcuNS0uM2wwLTQuM2M0LjcgMCAyMy4xLTMuNCAyMy4xIDE3LjMgMCAyMC41LTE4LjUgMTcuMy0xOS43IDE3LjMgNS43IDQuNCA1LjggMTIgMi4yIDE2LjNsLjMgMGMzMy40IDAgMzYuNy0yNy4zIDM2LjctMzQgMC0zLjgtMS4xLTMyLTMzLjgtMzMuNnoiXQogICAgfTsKICAgIGZhTWljcm9zb2Z0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1pY3Jvc29mdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2NhIiwgIk0wIDMybDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6bTIzMy40IDBsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnpNMCAyNjUuNGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42em0yMzMuNCAwbDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6Il0KICAgIH07CiAgICBmYUZseSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbHkiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjQxNyIsICJNMTY1LjkgNDI3LjhjMTIuOSAxMS43IDMzLjcgMzMuMyAzMy4yIDUwLjcgMCAuOC0uMSAxLjYtLjEgMi41LTEuOCAxOS44LTE4LjggMzEuMS0zOS4xIDMxLTI1LS4xLTM5LjktMTYuOC0zOC43LTM1LjggMS0xNi4yIDIwLjUtMzYuNyAzMi40LTQ3LjYgMi4zLTIuMSAyLjctMi43IDUuNi0zLjYgMy40IDAgMy45IC4zIDYuNyAyLjh6TTMwMCA2Ny4zYy0xNi4zLTI1LjctMzguNi00MC42LTYzLjMtNTIuMS0yNS41LTEwLjctNTQuNi0xNS40LTc2LjYtMTUuMi00NC4xIDAtNzEuMiAxMy4yLTgxLjEgMTcuMy01My42IDI3LjktODQuNCA2OS45LTgyLjkgMTQxLjMgNy4xIDgyLjIgOTcgMTc2IDE1NS44IDIzMy44IDEuNyAxLjYgNC41IDQuNSA2LjIgNS4xbDMuMyAuMWMyLjEtLjcgMS44LS41IDMuNS0yLjEgNTIuMy00OS4yIDE0MC43LTE0NS44IDE1NS45LTIxNS43IDctMzkuMiAzLjEtNzIuNS0yMC44LTExMi41ek0xNTQuOSAzNTEuOWMtMjgtNTEuMS02NS4yLTEzMC43LTY5LjMtMTg5LTMuNC00Ny41IDExLjQtMTMxLjIgNjkuMy0xMzYuN2wwIDMyNS43ek0yOTYuOCAxODBjLTE2LjQgNTYuOC03Ny4zIDEyOC0xMTguOSAxNzAuMyAyNy44LTUxLjkgNjUuMi0xMzMuMyA2Ny4yLTE5MS45IDEuNi00NS45LTkuOC0xMDUuOC00OC0xMzEuNCA4OC44IDE4LjMgMTE1LjUgOTguMSA5OS43IDE1M3oiXQogICAgfTsKICAgIGZhQ2NTdHJpcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2Mtc3RyaXBlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjUiLCAiTTQ5Mi40IDIyMC44Yy04LjkgMC0xOC43IDYuNy0xOC43IDIyLjdsMzYuNyAwYzAtMTYtOS4zLTIyLjctMTgtMjIuN3pNMzc1IDIyMy40Yy04LjIgMC0xMy4zIDIuOS0xNyA3bC4yIDUyLjhjMy41IDMuNyA4LjUgNi43IDE2LjggNi43IDEzLjEgMCAyMS45LTE0LjMgMjEuOS0zMy40IDAtMTguNi05LTMzLjItMjEuOS0zMy4xek01MjggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNMTIyLjIgMjgxLjFjMCAyNS42LTIwLjMgNDAuMS00OS45IDQwLjMtMTIuMiAwLTI1LjYtMi40LTM4LjgtOC4xbDAtMzMuOWMxMiA2LjQgMjcuMSAxMS4zIDM4LjkgMTEuMyA3LjkgMCAxMy42LTIuMSAxMy42LTguNyAwLTE3LTU0LTEwLjYtNTQtNDkuOSAwLTI1LjIgMTkuMi00MC4yIDQ4LTQwLjIgMTEuOCAwIDIzLjUgMS44IDM1LjMgNi41bDAgMzMuNGMtMTAuOC01LjgtMjQuNS05LjEtMzUuMy05LjEtNy41IDAtMTIuMSAyLjItMTIuMSA3LjcgMCAxNiA1NC4zIDguNCA1NC4zIDUwLjd6TTE5MSAyMjQuNWwtMjcgMCAwIDUwLjVjMCAyMC45IDIyLjUgMTQuNCAyNyAxMi42bDAgMjguOWMtNC43IDIuNi0xMy4zIDQuNy0yNC45IDQuNy0yMS4xIDAtMzYuOS0xNS41LTM2LjktMzYuNWwuMi0xMTMuOSAzNC43LTcuNCAwIDMwLjggMjYuOSAwIDAgMzAuM3ptNzQgMi40Yy00LjUtMS41LTE4LjctMy42LTI3LjEgNy40bDAgODQuNC0zNS41IDAgMC0xMjQuNSAzMC43IDAgMi4yIDEwLjVjOC4zLTE1LjMgMjQuOS0xMi4yIDI5LjYtMTAuNWwuMSAwIDAgMzIuN3ptNDQuMSA5MS44bC0zNS43IDAgMC0xMjQuNSAzNS43IDAgMCAxMjQuNXptMC0xNDIuOWwtMzUuNyA3LjYgMC0yOC45IDM1LjctNy42IDAgMjguOXptNzQuMSAxNDUuNWMtMTIuNCAwLTIwLTUuMy0yNS4xLTlsLS4xIDQwLjItMzUuNSA3LjUgMC0xNjUuOCAzMS4zIDAgMS44IDguOGM0LjktNC41IDEzLjktMTEuMSAyNy44LTExLjEgMjQuOSAwIDQ4LjQgMjIuNSA0OC40IDYzLjggMCA0NS4xLTIzLjIgNjUuNS00OC42IDY1LjZ6bTE2MC40LTUxLjVsLTY5LjUgMGMxLjYgMTYuNiAxMy44IDIxLjUgMjcuNiAyMS41IDE0LjEgMCAyNS4yLTMgMzQuOS03LjlsMCAyOC42Yy05LjcgNS4zLTIyLjQgOS4yLTM5LjQgOS4yLTM0LjYgMC01OC44LTIxLjctNTguOC02NC41IDAtMzYuMiAyMC41LTY0LjkgNTQuMy02NC45IDMzLjcgMCA1MS4zIDI4LjcgNTEuMyA2NS4xIDAgMy41LS4zIDEwLjktLjQgMTIuOXoiXQogICAgfTsKICAgIGZhV29yZHByZXNzU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndvcmRwcmVzcy1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxMSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zMyAyNTZjMC0zMi4zIDYuOS02MyAxOS4zLTkwLjdMMTU4LjcgNDU2LjdDODQuMyA0MjAuNSAzMyAzNDQuMiAzMyAyNTZ6TTI1NiA0NzljLTIxLjkgMC00My0zLjItNjMtOS4xbDY2LjktMTk0LjQgNjguNSAxODcuOGMuNSAxLjEgMSAyLjEgMS42IDMuMS0yMy4xIDguMS00OCAxMi42LTc0IDEyLjZ6bTMwLjctMzI3LjVjMTMuNC0uNyAyNS41LTIuMSAyNS41LTIuMSAxMi0xLjQgMTAuNi0xOS4xLTEuNC0xOC40IDAgMC0zNi4xIDIuOC01OS40IDIuOC0yMS45IDAtNTguNy0yLjgtNTguNy0yLjgtMTItLjctMTMuNCAxNy43LTEuNCAxOC40IDAgMCAxMS40IDEuNCAyMy40IDIuMWwzNC43IDk1LjItNDguOCAxNDYuMy04MS4yLTI0MS41YzEzLjQtLjcgMjUuNS0yLjEgMjUuNS0yLjEgMTItMS40IDEwLjYtMTkuMS0xLjQtMTguNCAwIDAtMzYuMSAyLjgtNTkuNCAyLjgtNC4yIDAtOS4xLS4xLTE0LjQtLjMgMzkuOS02MC41IDEwOC40LTEwMC41IDE4Ni4zLTEwMC41IDU4IDAgMTEwLjkgMjIuMiAxNTAuNiA1OC41LTEtLjEtMS45LS4yLTIuOS0uMi0yMS45IDAtMzcuNCAxOS4xLTM3LjQgMzkuNiAwIDE4LjQgMTAuNiAzMy45IDIxLjkgNTIuMyA4LjUgMTQuOCAxOC40IDMzLjkgMTguNCA2MS41IDAgMTkuMS03LjMgNDEuMi0xNyA3Mi4xbC0yMi4yIDc0LjMtODAuNy0yMzkuNnptODEuNCAyOTcuMmw2OC4xLTE5Ni45YzEyLjctMzEuOCAxNy01Ny4yIDE3LTc5LjkgMC04LjItLjUtMTUuOC0xLjUtMjIuOSAxNy40IDMxLjggMjcuMyA2OC4yIDI3LjMgMTA3IDAgODIuMy00NC42IDE1NC4xLTExMC45IDE5Mi43eiJdCiAgICB9OwogICAgZmFTZWxsc3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2VsbHN5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTMiLCAiTTU0MCAyMzcuM2MzLjEtMTIuMyA0LjMtMjQuOCA0LjMtMzcuNCAwLTkyLjUtNzUuNC0xNjcuOS0xNjcuOS0xNjcuOS03Ny4yIDAtMTQ0LjYgNTMtMTYzIDEyNy44LTE1LjMtMTMuMi0zNC45LTIwLjUtNTUuMi0yMC41LTQ2LjMgMC04NCAzNy43LTg0IDg0IDAgNy40IC45IDE1IDMuMSAyMi40LTQyLjkgMjAuMi03MC44IDYzLjctNzAuOCAxMTEuMiAwIDY4IDU1LjUgMTIzLjIgMTIzLjIgMTIzLjJsMzgxLjIgMGM2Ny43IDAgMTIzLjItNTUuMiAxMjMuMi0xMjMuMiAwLTU2LjQtMzguOS0xMDYtOTQuMS0xMTkuNXpNMjAwLjIgNDAxLjZjMCA4LjMtNyAxNS4zLTE1LjMgMTUuM2wtMzAuOSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMTEwLjljMC04LjMgNy0xNS4zIDE1LjMtMTUuM2wzMC45IDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuM2wwIDExMC45em04OS41IDBjMCA4LjMtNyAxNS4zLTE1LjMgMTUuM2wtMzAuOSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMTMxLjVjMC04LjMgNy0xNS4zIDE1LjMtMTUuM2wzMC45IDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuM2wwIDEzMS41em04OS41IDBjMCA4LjMtNyAxNS4zLTE1LjMgMTUuM2wtMzEgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTE2Mi43YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzEgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTYyLjd6bTg3IDBjMCA4LjMtNyAxNS4zLTE1LjMgMTUuM2wtMjguNSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMjI0LjZjMC04LjYgNy0xNS42IDE1LjMtMTUuNmwyOC41IDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuNmwwIDIyNC42eiJdCiAgICB9OwogICAgZmFEYXNoY3ViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkYXNoY3ViZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjEwIiwgIk0zMjYuOSAxMDRsLTIxNi4yIDBjLTUxLjEgMC05MS4yIDQzLjMtOTEuMiA5My41bDAgMjI5LjVjMCA1MC41IDQwLjEgODUgOTEuMiA4NWwyMjcuMiAwYzUxLjEgMCA5MS4yLTM0LjUgOTEuMi04NWwwLTQyNy0xMDIuMiAxMDR6TTE1NC4yIDQxNi41Yy0xNy43IDAtMzIuNC0xNS4xLTMyLjQtMzIuOGwwLTE0Mi45YzAtMTcuNyAxNC43LTMyLjUgMzIuNC0zMi41bDE0MC43IDBjMTcuNyAwIDMyIDE0LjggMzIgMzIuNWwwIDEyMy41IDUxLjEgNTIuMy0yMjMuOCAwIDAtLjF6Il0KICAgIH07CiAgICBmYUdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXR0ZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyNiIsICJNNjYuNCAzMjIuNWwtNTAuNCAwIDAtMzIyLjUgNTAuNCAwIDAgMzIyLjV6TTE2Ni45IDc2LjFsLTUwLjQgMCAwIDQzNS45IDUwLjQgMCAwLTQzNS45em0xMDAuNiAwbC01MC40IDAgMCA0MzUuOSA1MC40IDAgMC00MzUuOXpNMzY4IDc2bC01MC40IDAgMCAyNDcgNTAuNCAwIDAtMjQ3eiJdCiAgICB9OwogICAgZmFXb2xmUGFja0JhdHRhbGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b2xmLXBhY2stYmF0dGFsaW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MTQiLCAiTTIzNi4yIDQ3MS41bDEwLjYgMTUuOCA1LjMtMTIuMyA1LjMgNyAwIDI5LjljMjEuMS03LjkgMjEuMS02Ni45IDI1LjUtOTcuMiA0LjYtMzEuOS0uOS05Mi44IDgxLjQtMTQ5LjEtOC45LTIzLjYtMTItNDkuNC0yLjYtODAgMjcuOSAzLjQgNTMuOSAxMC42IDYzLjMgNTQuMWwtMzAuMyA4LjRjMTEuMSAyMyAxNyA0Ni44IDEzLjIgNzIuMWwtMjcuMy03LTYuMiAzMy40LTE4LjUtNy04LjggMzMuNC0xOS40LTcgMjYuNCAyMS4xIDguOC0yOC4yIDI0LjYgNS4yIDctMzUuNiAyNi40IDE0LjVjLjItMjAgNy01OC4xLTguOC04NC41bDI2LjQgNS4zYzQtMjIuMS0yLjQtMzkuMi03LjktNTYuN2wyMi40IDkuN2MtLjQtMjUuMS0yOS45LTU2LjgtNjEuNi01OC41LTIwLjItMS4xLTU2LjctMjUuMi01NC4xLTUxLjkgMi0xOS45IDE3LjQtNDIuNiA0My4xLTQ5LjctNDQgMzYuNS05LjcgNjcuMyA1LjMgNzMuNSA0LjQtMTEuNCAxNy41LTY5LjEgMC0xMzAuMi00MC40IDIyLjktODkuNyA2NS4xLTkzLjIgMTQ3LjhsLTU4IDM4LjctMy41IDkzLjIgMTA3LjMtNTkuOCA3IDctMTcuNiAzLjUtNDQgMzguNy0xNS44LTUuMy0yOC4xIDQ5LjMtMy41IDExOS42IDIxLjEgMTUuOC0zMi41IDE1LjgtMzIuNi0xNS44IDIxLjEtMTUuOC0zLjUtMTE5LjYtMjguMi00OS4zLTE1LjggNS4zLTQ0LTM4LjctMTcuNi0zLjUgNy03IDEwNy4zIDU5LjgtMy41LTkzLjMtNTguMS0zOC43Yy0zLjUtODIuOC01Mi43LTEyNS05My4yLTE0Ny45LTE3LjUgNjEuMS00LjQgMTE4LjggMCAxMzAuMiAxNS02LjIgNDkuMy0zNyA1LjMtNzMuNSAyNS43IDcuMSA0MS4xIDI5LjggNDMuMSA0OS43IDIuNiAyNi43LTMzLjkgNTAuOC01NC4xIDUxLjktMzEuNyAxLjctNjEuMiAzMy40LTYxLjYgNTguNWwyMi40LTkuN0MxMy40IDIyNC43IDcgMjQxLjggMTEgMjYzLjlsMjYuNC01LjNjLTE1LjggMjYuNC05LjEgNjQuNC04LjggODQuNGwyNi40LTE0LjUgNyAzNS42IDI0LjYtNS4zIDguOCAyOC4yIDI2LjQtMjEuMS0xOS40IDctOC44LTMzLjQtMTguNSA3LTYuMi0zMy40LTI3LjMgN0MzOCAyOTQuOCA0My44IDI3MSA1NSAyNDhsLTMwLjMtOC40YzkuNC00My41IDM1LjUtNTAuOCA2My4zLTU0LjEgOS40IDMwLjYgNi4yIDU2LjUtMi42IDgwLjEgODIuMyA1Ni4zIDc2LjggMTE3LjIgODEuNCAxNDkuMSA0LjQgMzAuMyA0LjQgODkuMyAyNS41IDk3LjJsMC0yOS44IDUuMy03IDUuMyAxMi4zIDEwLjYtMTUuOCAxMS40IDIxLjEgMTEuNC0yMS4xIDAgMHptNzkuMi05NUwyOTkuNSAzNjZjNy41LTQuNCAxMy44LTguNCAxOS40LTEyLjMtLjYgNy4yLS4zIDEzLjgtMy41IDIyLjhsMCAwem0yOC4yLTQ5LjNjLS40IDEwLjktLjkgMjEuNy0xLjggMzEuNy03LjgtMS45LTE1LjYtMy44LTIxLjEtNyA4LjItNy45IDE1LjYtMTYuMyAyMi45LTI0LjdsMCAwem0yNC42IDUuM2MwLTEzLjQtMi4xLTI0LjItNS4zLTMzLjQtNS41IDkuNS0xMS43IDE4LjYtMTguNSAyNy4zbDIzLjggNi4yem0zLjUtODAuOWMxOS40IDEyLjggMjcuOCAzMy43IDI5LjkgNTYuMy0xMi4zLTQuNS0yNC42LTkuMy0zNy0xMC42IDUuMS0xMiA2LjYtMjguMSA3LTQ1LjdsMCAwem0tMS44LTQ1LjdjLjggMTQuMyAxLjggMjguOCAxLjggNDIuMiAxOS4yLTguMSAyOS44LTkuNyA0NC0xNC4xLTEwLjYtMTktMjcuMi0yNS41LTQ1LjgtMjguMmwwIDB6TTEzNC4yIDM3Ni41TDE1MCAzNjZjLTcuNS00LjQtMTMuOC04LjQtMTkuNC0xMi4zIC42IDcuMyAuMyAxMy45IDMuNSAyMi45bDAgMHpNMTA2IDMyNy4zYy40IDEwLjkgLjkgMjEuNyAxLjggMzEuNyA3LjgtMS45IDE1LjYtMy44IDIxLjEtNy04LjItNy45LTE1LjYtMTYuMy0yMi45LTI0Ljd6bS0yNC42IDUuM2MwLTEzLjQgMi0yNC4yIDUuMy0zMy40IDUuNSA5LjUgMTEuNyAxOC42IDE4LjUgMjcuM2wtMjMuOCA2LjJ6bS0zLjUtODAuOWMtMTkuNCAxMi44LTI3LjggMzMuNy0yOS45IDU2LjMgMTIuMy00LjUgMjQuNi05LjMgMzctMTAuNi01LTEyLTYuNi0yOC4xLTctNDUuN2wtLjEgMHptMS44LTQ1LjdjLS44IDE0LjMtMS44IDI4LjgtMS44IDQyLjItMTkuMi04LjEtMjkuOC05LjctNDQtMTQuMSAxMC42LTE5IDI3LjItMjUuNSA0NS44LTI4LjF6Il0KICAgIH07CiAgICBmYUxhc3RmbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsYXN0Zm0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIwMiIsICJNMjI1LjggMzY3LjFsLTE4LjgtNTFzLTMwLjUgMzQtNzYuMiAzNGMtNDAuNSAwLTY5LjItMzUuMi02OS4yLTkxLjUgMC03Mi4xIDM2LjQtOTcuOSA3Mi4xLTk3LjkgNjYuNSAwIDc0LjggNTMuMyAxMDAuOSAxMzQuOSAxOC44IDU2LjkgNTQgMTAyLjYgMTU1LjQgMTAyLjYgNzIuNyAwIDEyMi0yMi4zIDEyMi04MC45IDAtNzIuOS02Mi43LTgwLjYtMTE1LTkyLjEtMjUuOC01LjktMzMuNC0xNi40LTMzLjQtMzQgMC0xOS45IDE1LjgtMzEuNyA0MS42LTMxLjcgMjguMiAwIDQzLjQgMTAuNiA0NS43IDM1LjhsNTguNi03Yy00LjctNTIuOC00MS4xLTc0LjUtMTAwLjktNzQuNS01Mi44IDAtMTA0LjQgMTkuOS0xMDQuNCA4My45IDAgMzkuOSAxOS40IDY1LjEgNjggNzYuOCA0NC45IDEwLjYgNzkuOCAxMy44IDc5LjggNDUuNyAwIDIxLjctMjEuMSAzMC41LTYxIDMwLjUtNTkuMiAwLTgzLjktMzEuMS05Ny45LTczLjktMzItOTYuOC00My42LTE2My0xNjEuMy0xNjMtODYuMSAwLTEzMS44IDU0LjUtMTMxLjggMTQ3LjIgMCA4OS4xIDQ1LjcgMTM3LjIgMTI3LjkgMTM3LjIgNjYuMiAwIDk3LjktMzEuMSA5Ny45LTMxLjF6Il0KICAgIH07CiAgICBmYVNob3B3YXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNob3B3YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YjUiLCAiTTQwMy41IDQ1NS40Yy00Mi42IDMxLjctOTQuNCA0OC43LTE0Ny41IDQ4LjYtMTM3LjIgMC0yNDgtMTExLTI0OC0yNDggMC0xMzcuMiAxMTEtMjQ4IDI0OC0yNDggNjEuMi0uMSAxMjAuMiAyMi42IDE2NS43IDYzLjUgLjYgLjUgLjkgMS4yIDEuMSAxLjlzLjEgMS41LS4zIDIuMi0uOCAxLjMtMS41IDEuNi0xLjQgLjUtMi4yIC40Yy0xOC44LTIuNS0zNy43LTMuNy01Ni43LTMuNy0xMjkuNCAwLTIyMi40IDUzLjUtMjIyLjQgMTU1LjQgMCAxMDkgOTIuMSAxNDUuOSAxNzYuOCAxNzguNyAzMy42IDEzIDY1LjQgMjUuNCA4NyA0MS42IC40IC4zIC44IC44IDEuMSAxLjNzLjQgMSAuNCAxLjYtLjEgMS4xLS40IDEuNi0uNiAuOS0xLjEgMS4zbC0uMSAwek01MDMgMjMzLjFjLS4xLS45LS41LTEuOC0xLjMtMi40LTUxLjgtNDMtOTMuNi02MC41LTE0NC41LTYwLjUtODQuMSAwLTgwLjMgNTIuMi04MC4zIDUzLjYgMCA0Mi42IDUyLjEgNjIgMTEyLjMgODQuNSAzMS4xIDExLjYgNjMuMiAyMy42IDkyLjcgMzkuOSAuNCAuMiAuOSAuNCAxLjQgLjRzMSAwIDEuNS0uMiAuOS0uNCAxLjMtLjggLjYtLjggLjgtMS4yYzE0LjEtMzYgMTkuNS03NC44IDE2LTExMy4zeiJdCiAgICB9OwogICAgZmFCbG9nZ2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsb2dnZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3YyIsICJNMTYyLjQgMTk2YzQuOC00LjkgNi4yLTUuMSAzNi40LTUuMSAyNy4yIDAgMjguMSAuMSAzMi4xIDIuMSA1LjggMi45IDguMyA3IDguMyAxMy42IDAgNS45LTIuNCAxMC03LjYgMTMuNC0yLjggMS44LTQuNSAxLjktMzEuMSAyLjEtMTYuNCAuMS0yOS41LS4yLTMxLjUtLjgtMTAuMy0yLjktMTQuMS0xNy43LTYuNi0yNS4zem02MS40IDk0LjVjLTUzLjkgMC01NS44IC4yLTYwLjIgNC4xLTMuNSAzLjEtNS43IDkuNC01LjEgMTMuOSAuNyA0LjcgNC44IDEwLjEgOS4yIDEyIDIuMiAxIDE0LjEgMS43IDU2LjMgMS4ybDQ3LjktLjYgOS4yLTEuNWM5LTUuMSAxMC41LTE3LjQgMy4xLTI0LjQtNS4zLTQuNy01LTQuNy02MC40LTQuN3pNNDQ3LjIgNDIwLjZjLTMuNSAyOC40LTIzIDUwLjQtNTEuMSA1Ny41LTcuMiAxLjgtOS43IDEuOS0xNzIuOSAxLjgtMTU3LjggMC0xNjUuOS0uMS0xNzItMS44LTguNC0yLjItMTUuNi01LjUtMjIuMy0xMC01LjYtMy44LTEzLjktMTEuOC0xNy0xNi40LTMuOC01LjYtOC4yLTE1LjMtMTAtMjJTMCA0MjAuMyAwIDI1Ni4zYzAtMTYzLjEgMC0xNjYuNiAxLjgtMTczLjcgNi4zLTI0LjcgMjUuOS00My42IDUxLjItNDkuMiA3LjMtMS42IDMzMi4xLTEuOSAzNDAtLjMgMjEuMiA0LjMgMzcuOSAxNy4xIDQ3LjYgMzYuNCA3LjcgMTUuMyA3LTEuNSA3LjMgMTgwLjYgLjIgMTE1LjggMCAxNjQuNS0uNyAxNzAuNXpNMzYxLjggMjM1LjRjLTEuMS01LTQuMi05LjYtNy43LTExLjUtMS4xLS42LTgtMS4zLTE1LjUtMS43LTEyLjQtLjYtMTMuOC0uOC0xNy44LTMuMS02LjItMy42LTcuOS03LjYtOC0xOC4zIDAtMjAuNC04LjUtMzkuNC0yNS4zLTU2LjUtMTItMTIuMi0yNS4zLTIwLjUtNDAuNi0yNS4xLTMuNi0xLjEtMTEuOC0xLjUtMzkuMi0xLjgtNDIuOS0uNS01Mi41IC40LTY3LjEgNi4yLTI3IDEwLjctNDYuMyAzMy40LTUzLjQgNjIuNC0xLjMgNS40LTEuNiAxNC4yLTEuOSA2NC4zLS40IDYyLjggMCA3Mi4xIDQgODQuNSA5LjcgMzAuNyAzNy4xIDUzLjQgNjQuNiA1OC40IDkuMiAxLjcgMTIyLjIgMi4xIDEzMy43IC41IDIwLjEtMi43IDM1LjktMTAuOCA1MC43LTI1LjkgMTAuNy0xMC45IDE3LjQtMjIuOCAyMS44LTM4LjUgMy4yLTEwLjkgMi45LTg4LjQgMS43LTkzLjl6Il0KICAgIH07CiAgICBmYUVkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWRnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjgyIiwgIk0xMjAuMSAzNy40YzQxLTI1LjIgODcuNi0zOC4yIDEzNC45LTM3LjQgMTY4IDAgMjU3IDEyMy44IDI1NyAyMTkuNS0uMSAzMi43LTEzIDYzLjktMzUuOSA4Ny4yLTIyLjkgMjMuMi01NCAzNi41LTg2LjcgMzctNzUuMiAwLTkxLjUtMjMuMS05MS41LTMyIDAtMy44IDEuMi02LjIgNC44LTkuNGwxLTEuMiAuNC0xLjZjMTAuNS0xMS41IDE1LjktMjYuMiAxNS45LTQxLjYgMC03OC43LTgyLjItMTQyLjctMTg0LTE0Mi43LTM3LjUtLjMtNzQuNSA4LjktMTA3LjUgMjYuOSAyNy01Ny41IDgyLjctOTcuNiA5MS4zLTEwMy44IC44LS42IC4zLS44IC4zLS44em0xNS42IDMxOC4xYy0xLjQgMzAgNC42IDYwIDE2LjQgODcuMiAxMy42IDI2LjQgMzIuNyA1MSA1Ni41IDY5LjMtNTkuNS0xMS41LTExMS41LTQzLjktMTQ5LjQtODkuMy0zOC4xLTQ2LjQtNTkuMi0xMDQuMy01OS4yLTE2NC44IDAtNTEuMiA2Mi40LTk0LjQgMTM2LTk0LjQgMzYuNi0uNiA3Mi40IDEwLjkgMTAxLjggMzIuN2wtMy42IDEuMmMtNTEuNSAxNy42LTk4LjUgOTAuNy05OC41IDE1OC4xek00NjkuOCA0MDBsLS43IC4xYy0xMS44IDE4LjgtMjUuOSAzNS4xLTQyLjIgNDkuNS0zMC44IDI4LTY4LjEgNDUuNS0xMDguOCA0OS45LTE4LjYgLjMtMzYuOC0zLjItNTMuOC0xMS40LTI1LjYtMTAuMy00Ny4xLTMwLTYxLjYtNTMtMTQuNC0yMy45LTIxLjEtNTEuNy0xOS03OS42LS42LTIwLjEgNS40LTQwLjMgMTUtNTguMiAxMy45IDMzLjEgMzcuNSA2MS4zIDY3LjYgODAuOHM2NS41IDI5LjUgMTAxLjQgMjguNmMzMSAuMyA2Mi4xLTYuNyA5MC4yLTIwLjVsMS45LS45YzMuOS0yLjMgNy43LTMuOSAxMS42IDAgNC41IDQuOSAxLjggOS4yLTEuMiAxNC0uMiAuMi0uMyAuNS0uNCAuN3oiXQogICAgfTsKICAgIGZhSW94aG9zdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpb3hob3N0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMDgiLCAiTTYxNiAxNjBsLTY3LjMgMEM1MTEuMiA3MC43IDQyMi45IDggMzIwIDggMTgzIDggNzIgMTE5IDcyIDI1NiA3MiAyNzIuNCA3My42IDI4OC41IDc2LjcgMzA0TDI0IDMwNGMtMTMuMyAwLTI0IDEwLjgtMjQgMjQgMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjcuMyAwYzM3LjUgODkuMyAxMjUuOCAxNTIgMjI4LjcgMTUyIDEzNyAwIDI0OC0xMTEgMjQ4LTI0OCAwLTE2LjQtMS42LTMyLjUtNC43LTQ4bDUyLjcgMGMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNHptLTk2IDk2YzAgMTEwLjUtODkuNSAyMDAtMjAwIDIwMC03NS43IDAtMTQxLjYtNDItMTc1LjUtMTA0TDQyNCAzNTJjMTMuMyAwIDI0LTEwLjggMjQtMjQgMC0xMy4zLTEwLjctMjQtMjQtMjRsLTI5OC4yIDBjLTMuOC0xNS40LTUuOC0zMS40LTUuOC00OCAwLTExMC41IDg5LjUtMjAwIDIwMC0yMDAgNzUuNyAwIDE0MS42IDQyIDE3NS41IDEwNEwyMTYgMTYwYy0xMy4zIDAtMjQgMTAuOC0yNCAyNCAwIDEzLjMgMTAuNyAyNCAyNCAyNGwyOTguMiAwYzMuOCAxNS40IDUuOCAzMS40IDUuOCA0OHpNMjE2IDIzMmwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEzLjItMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTMuMiAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTY2hsaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2NobGl4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZWEiLCAiTTM1MC41IDE1Ny43bC01NC4yLTQ2LjEgNzMuNC0zOSA3OC4zIDQ0LjItOTcuNSA0MC45ek0xOTIgMTIyLjFsNDUuNy0yOC4yIDM0LjcgMzQuNi01NS40IDI5LTI1LTM1LjR6bS02NS4xIDYuNmwzMS45LTIyLjEgMTcuMiAyOC40LTM2LjcgMjIuNS0xMi40LTI4Ljh6bS0yMy4zIDg4LjJsLTguOC0zNC44IDI5LjYtMTguMyAxMy4xIDM1LjMtMzMuOSAxNy44ek04Mi40IDEzMy4ybDIzLjktMTguMSA4LjkgMjQtMjYuNyAxOC4zLTYuMS0yNC4yek01OSAyMDYuNWwtMy42LTI4LjQgMjIuMy0xNS41IDYuMSAyOC43LTI0LjggMTUuMnpNMjguNCAyMjMuMWwyMC44LTEyLjggMy4zIDMzLjQtMjIuOSAxMi0xLjItMzIuNnpNMS40IDI2OEwyMC42IDI1Ny44IDIxIDI5NiAwIDMwNC44IDEuNCAyNjh6bTU5LjEgNTkuM2wtMjguMyA4LjMtMS42LTQ2LjggMjUuMS0xMC43IDQuOCA0OS4yek05OSAyNjMuMmwtMzEuMSAxMy01LjItNDAuOCAyNy40LTE0LjQgOC45IDQyLjJ6TTEyMy4yIDM3N2wtNDEuNiA1LjktOC4xLTYzLjUgMzUuMi0xMC44IDE0LjUgNjguNHptMjguNS0xMzkuOWwyMS4yIDU3LjEtNDYuMiAxMy42LTEzLjctNTQuMSAzOC43LTE2LjZ6bTg1LjcgMjMwLjVsLTcwLjktMy4zLTI0LjMtOTUuOCA1NS4yLTguNiA0MCAxMDcuN3pNMTUyLjUgMTg3LjlsNDIuMi0yMi40IDI4IDQ1LjktNTAuOCAyMS4zLTE5LjQtNDQuOHptNDEgOTQuOWw2MS4zLTE4LjcgNTIuOCA4Ni42LTc5LjggMTEuMy0zNC4zLTc5LjJ6bTUxLjQtODUuNmw2Ny4zLTI4LjggNjUuNSA2NS40LTg4LjYgMjYuMi00NC4yLTYyLjh6Il0KICAgIH07CiAgICBmYURBbmREID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImQtYW5kLWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM4ZCIsICJNODIuOSA5OC45Yy0uNi0xNy4yIDItMzMuOCAxMi43LTQ4LjIgLjMgNy40IDEuMiAxNC41IDQuMiAyMS42IDUuOS0yNy41IDE5LjctNDkuMyA0Mi4zLTY1LjUtMS45IDUuOS0zLjUgMTEuOC0zIDE3LjcgOC43LTcuNCAxOC44LTE3LjggNDQuNC0yMi43IDE0LjctMi44IDI5LjctMiA0Mi4xIDEgMzguNSA5LjMgNjEgMzQuMyA2OS43IDcyLjMgNS4zIDIzLjEgLjcgNDUtOC4zIDY2LjQtNS4yIDEyLjQtMTIgMjQuNC0yMC43IDM1LjEtMi0xLjktMy45LTMuOC01LjgtNS42LTQyLjgtNDAuOC0yNi44LTI1LjItMzcuNC0zNy40LTEuMS0xLjItMS0yLjItLjEtMy42IDguMy0xMy41IDExLjgtMjguMiAxMC00NC0xLjEtOS44LTQuMy0xOC45LTExLjMtMjYuMi0xNC41LTE1LjMtMzkuMi0xNS01My41IC42LTExLjQgMTIuNS0xNC4xIDI3LjQtMTAuOSA0My42IC4yIDEuMyAuNCAyLjcgMCAzLjktMy40IDEzLjctNC42IDI3LjYtMi41IDQxLjYgLjEgLjUgLjEgMS4xIC4xIDEuNiAwIC4zLS4xIC41LS4yIDEuMS0yMS44LTExLTM2LTI4LjMtNDMuMi01Mi4yLTguMyAxNy44LTExLjEgMzUuNS02LjYgNTQuMS0xNS42LTE1LjItMjEuMy0zNC4zLTIyLTU1LjJ6TTU1Mi41IDIyMi4xYy0xMS42LTExLjYtMjUtMjAuNC00MC4xLTI2LjYtMTIuOC01LjItMjYtNy45LTM5LjktNy4xLTEwIC42LTE5LjYgMy4xLTI5IDYuNC0yLjUgLjktNS4xIDEuNi03LjcgMi4yLTQuOSAxLjItNy4zLTMuMS00LjctNi44IDMuMi00LjYgMy40LTQuMiAxNS0xMiAuNi0uNCAxLjItLjggMi4yLTEuNWwtMi41IDBjLS42IDAtMS4yIC4yLTEuOSAuMy0xOS4zIDMuMy0zMC43IDE1LjUtNDguOSAyOS42LTEwLjQgOC4xLTEzLjggMy44LTEyLS41IDEuNC0zLjUgMy4zLTYuNyA1LjEtMTAgMS0xLjggMi4zLTMuNCAzLjUtNS4xLS4yLS4yLS41LS4zLS43LS41LTI3IDE4LjMtNDYuNyA0Mi40LTU3LjcgNzMuMyAuMyAuMyAuNyAuNiAxIC45IC4zLS42IC41LTEuMiAuOS0xLjcgMTAuNC0xMi4xIDIyLjgtMjEuOCAzNi42LTI5LjggMTguMi0xMC42IDM3LjUtMTguMyA1OC43LTIwLjIgNC4zLS40IDguNy0uMSAxMy4xLS4xLTEuOCAuNy0zLjUgLjktNS4zIDEuMS0xOC41IDIuNC0zNS41IDktNTEuNSAxOC41LTMwLjIgMTcuOS01NC41IDQyLjItNzUuMSA3MC40LS4zIC40LS40IC45LS43IDEuMyAxNC41IDUuMyAyNCAxNy4zIDM2LjEgMjUuNiAuMi0uMSAuMy0uMiAuNC0uNGwxLjItMi43YzEyLjItMjYuOSAyNy01Mi4zIDQ2LjctNzQuNSAxNi43LTE4LjggMzgtMjUuMyA2Mi41LTIwIDUuOSAxLjMgMTEuNCA0LjQgMTcuMiA2LjggMi4zLTEuNCA1LjEtMy4yIDgtNC43IDguNC00LjMgMTcuNC03IDI2LjctOSAxNC43LTMuMSAyOS41LTQuOSA0NC41LTEuM2wwLS41Yy0uNS0uNC0xLjItLjgtMS43LTEuNHpNMzE3LjEgMzk3LjZjLTM5LjQtMzMtMjIuOC0xOS41LTQyLjctMzUuNi0uOCAuOSAwLS4yLTEuOSAzLTExLjIgMTkuMS0yNS41IDM1LjMtNDQgNDcuNi0xMC4zIDYuOC0yMS41IDExLjgtMzQuMSAxMS44LTIxLjYgMC0zOC4yLTkuNS00OS40LTI3LjgtMTItMTkuNS0xMy4zLTQwLjctOC4yLTYyLjYgNy44LTMzLjggMzAuMS01NS4yIDM4LjYtNjQuMy0xOC43LTYuMi0zMyAxLjctNDYuNCAxMy45IC44LTEzLjkgNC4zLTI2LjIgMTEuOC0zNy4zLTI0LjMgMTAuNi00NS45IDI1LTY0LjggNDMuOS0uMy01LjggNS40LTQzLjcgNS42LTQ0LjcgLjMtMi43LS42LTUuMy0zLTcuNC0yNC4yIDI0LjctNDQuNSA1MS44LTU2LjEgODQuNiA3LjQtNS45IDE0LjktMTEuNCAyMy42LTE2LjItOC4zIDIyLjMtMTkuNiA1Mi44LTcuOCAxMDEuMSA0LjYgMTkgMTEuOSAzNi44IDI0LjEgNTIuMyAyLjkgMy43IDYuMyA2LjkgOS41IDEwLjMgLjItLjIgLjQtLjMgLjYtLjUtMS40LTctMi4yLTE0LjEtMS41LTIxLjkgMi4yIDMuMiAzLjkgNiA1LjkgOC42IDEyLjYgMTYgMjguNyAyNy40IDQ3LjIgMzUuNiAyNSAxMS4zIDUxLjEgMTMuMyA3Ny45IDguNiA1NC45LTkuNyA5MC43LTQ4LjYgMTE2LTk4LjggMS0xLjggLjYtMi45LS45LTQuMnptMTcyLTQ2LjRjLTkuNS0zLjEtMjIuMi00LjItMjguNy0yLjkgOS45IDQgMTQuMSA2LjYgMTguOCAxMiAxMi42IDE0LjQgMTAuNCAzNC43LTUuNCA0NS42LTExLjcgOC4xLTI0LjkgMTAuNS0zOC45IDkuMS0xLjItLjEtMi4zLS40LTMtLjYgMi44LTMuNyA2LTcgOC4xLTEwLjggOS40LTE2LjggNS40LTQyLjEtOC43LTU2LjEtMi4xLTIuMS00LjYtMy45LTctNS45LS4zIDEuMy0uMSAyLjEgLjEgMi44IDQuMiAxNi42LTguMSAzMi40LTI0LjggMzEuOC03LjYtLjMtMTMuOS0zLjgtMTkuNi04LjUtMTkuNS0xNi4xLTM5LjEtMzIuMS01OC41LTQ4LjMtNS45LTQuOS0xMi41LTguMS0yMC4xLTguNy00LjYtLjQtOS4zLS42LTEzLjktLjktNS45LS40LTguOC0yLjgtMTAuNC04LjQtLjktMy40LTEuNS02LjgtMi4yLTEwLjItMS41LTguMS02LjItMTMtMTQuMy0xNC4yLTQuNC0uNy04LjktMS0xMy4zLTEuNS0xMy0xLjQtMTkuOC03LjQtMjIuNi0yMC4zLTUgMTEtMS42IDIyLjQgNy4zIDI5LjkgNC41IDMuOCA5LjMgNy4zIDEzLjggMTEuMiA0LjYgMy44IDcuNCA4LjcgNy45IDE0LjggLjQgNC43IC44IDkuNSAxLjggMTQuMSAyLjIgMTAuNiA4LjkgMTguNCAxNyAyNS4xIDE2LjUgMTMuNyAzMyAyNy4zIDQ5LjUgNDEuMSAxNy45IDE1IDEzLjkgMzIuOCAxMyA1Ni0uOSAyMi45IDEyLjIgNDIuOSAzMy41IDUxLjIgMSAuNCAyIC42IDMuNiAxLjEtMTUuNy0xOC4yLTEwLjEtNDQuMSAuNy01Mi4zIC4zIDIuMiAuNCA0LjMgLjkgNi40IDkuNCA0NC4xIDQ1LjQgNjQuMiA4NSA1Ni45IDE2LTIuOSAzMC42LTguOSA0Mi45LTE5LjggMi0xLjggMy43LTQuMSA1LjktNi41LTE5LjMgNC42LTM1LjggLjEtNTAuOS0xMC42IC43LS4zIDEuMy0uMyAxLjktLjMgMjEuMyAxLjggNDAuNi0zLjQgNTctMTcuNCAxOS41LTE2LjYgMjYuNi00Mi45IDE3LjQtNjYtOC4zLTIwLjEtMjMuNi0zMi4zLTQzLjgtMzguOXpNOTkuOCAxNzkuM2MtNS4zLTkuMi0xMy4yLTE1LjYtMjIuMS0yMS4zIDEzLjctLjUgMjYuNiAuMiAzOS42IDMuNy03LTEyLjItOC41LTI0LjctNS0zOC43IDUuMyAxMS45IDEzLjcgMjAuMSAyMy42IDI2LjggMTkuNyAxMy4yIDM1LjcgMTkuNiA0Ni43IDMwLjIgMy40IDMuMyA2LjMgNy4xIDkuNiAxMC45LS44LTIuMS0xLjQtNC4xLTIuMi02LTUtMTAuNi0xMy0xOC42LTIyLjYtMjUtMS44LTEuMi0yLjgtMi41LTMuNC00LjUtMy4zLTEyLjUtMy0yNS4xLS43LTM3LjYgMS01LjUgMi44LTEwLjkgNC41LTE2LjMgLjgtMi40IDIuMy00LjYgNC02LjYgLjYgNi45IDAgMjUuNSAxOS42IDQ2IDEwLjggMTEuMyAyMi40IDIxLjkgMzMuOSAzMi43IDkgOC41IDE4LjMgMTYuNyAyNS41IDI2LjggMS4xIDEuNiAyLjIgMy4zIDMuOCA0LjctNS0xMy0xNC4yLTI0LjEtMjQuMi0zMy44LTkuNi05LjMtMTkuNC0xOC40LTI5LjItMjcuNC0zLjMtMy00LjYtNi43LTUuMS0xMC45LTEuMi0xMC40IDAtMjAuNiA0LjMtMzAuMiAuNS0xIDEuMS0yIDEuOS0zLjMgLjUgNC4yIC42IDcuOSAxLjQgMTEuNiA0LjggMjMuMSAyMC40IDM2LjMgNDkuMyA2My41IDEwIDkuNCAxOS4zIDE5LjIgMjUuNiAzMS42IDQuOCA5LjMgNy4zIDE5IDUuNyAyOS42LS4xIC42IC41IDEuNyAxLjEgMiA2LjIgMi42IDEwIDYuOSA5LjcgMTQuMyA3LjctMi42IDEyLjUtOCAxNi40LTE0LjUgNC4yIDIwLjItOS4xIDUwLjMtMjcuMiA1OC43IC40LTQuNSA1LTIzLjQtMTYuNS0yNy43LTYuOC0xLjMtMTIuOC0xLjMtMjIuOS0yLjEgNC43LTkgMTAuNC0yMC42IC41LTIyLjQtMjQuOS00LjYtNTIuOCAxLjktNTcuOCA0LjYgOC4yIC40IDE2LjMgMSAyMy41IDMuMy0yIDYuNS00IDEyLjctNS44IDE4LjktMS45IDYuNSAyLjEgMTQuNiA5LjMgOS42IDEuMi0uOSAyLjMtMS45IDMuMy0yLjctMy4xIDE3LjktMi45IDE1LjktMi44IDE4LjMgLjMgMTAuMiA5LjUgNy44IDE1LjcgNy4zLTIuNSAxMS44LTI5LjUgMjcuMy00NS40IDI1LjggNy00LjcgMTIuNy0xMC4zIDE1LjktMTcuOS02LjUgLjgtMTIuOSAxLjYtMTkuMiAyLjRsLS4zLS45YzQuNy0zLjQgOC03LjggMTAuMi0xMy4xIDguNy0yMS4xLTMuNi0zOC0yNS0zOS45LTkuMS0uOC0xNy44IC44LTI1LjkgNS41IDYuMi0xNS42IDE3LjItMjYuNiAzMi42LTM0LjUtMTUuMi00LjMtOC45LTIuNy0yNC42LTYuMyAxNC42LTkuMyAzMC4yLTEzLjIgNDYuNS0xNC42LTUuMi0zLjItNDguMS0zLjYtNzAuMiAyMC45IDcuOSAxLjQgMTUuNSAyLjggMjMuMiA0LjItMjMuOCA3LTQ0IDE5LjctNjIuNCAzNS42IDEuMS00LjggMi43LTkuNSAzLjMtMTQuMyAuNi00LjUgLjgtOS4yIC4xLTEzLjYtMS41LTkuNC04LjktMTUuMS0xOS43LTE2LjMtNy45LS45LTE1LjYgLjEtMjMuMyAxLjMtLjkgLjEtMS43IC4zLTIuOSAwIDE1LjgtMTQuOCAzNi0yMS43IDUzLjEtMzMuNSA2LTQuNSA2LjgtOC4yIDMtMTQuOXptMTI4LjQgMjYuOGMzLjMgMTYgMTIuNiAyNS41IDIzLjggMjQuMy00LjYtMTEuMy0xMi4xLTE5LjUtMjMuOC0yNC4zeiJdCiAgICB9OwogICAgZmFWdWVqcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2dWVqcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDFmIiwgIk0zNTYuOSA2NC4zbC03Ni45IDAtNTYgODguNi00OC04OC42LTE3NiAwIDIyNCAzODMuNyAyMjQtMzgzLjctOTEuMSAwek01NS43IDk2LjNsNTMuOCAwIDExNC41IDE5OC4yIDExNC40LTE5OC4yIDUzLjggMC0xNjguMiAyODguMi0xNjguMy0yODguMnoiXQogICAgfTsKICAgIGZhTWV0YSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZXRhIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0OWIiLCAiTTY0MCAzMTcuOWMwIDkxLjMtMzkuNCAxNDguNS0xMTAuMyAxNDguNS02Mi42IDAtOTUuOC0zNC42LTE1Ni45LTEzNi42bC0zMS40LTUyLjZjLTguMy0xMi41LTE0LjUtMjQuMi0yMS4yLTM1LTIwLjEgMzMuOC00Ny4xIDgzLTQ3LjEgODMtNjcgMTE2LjYtMTA0LjYgMTQxLjItMTU2LjkgMTQxLjItNzIuOCAwLTExNi4yLTU3LjMtMTE2LjItMTQ1LjkgMC0xNDMgNzkuOC0yNzguMSAxODMuOS0yNzguMSA1MC4yIDAgOTMuOCAyNC43IDE0NC44IDg5LjUgMzcuMS01MC4xIDc4LjEtODkuNSAxMzAuNi04OS41IDk5LjEgMCAxODAuNyAxMjUuNyAxODAuNyAyNzUuNXpNMjg3LjQgMTkyLjJjLTQyLjktNjIuMS03MC45LTgwLjUtMTA0LjQtODAuNS02MS45IDAtMTEzLjggMTA2LjEtMTEzLjggMjEwIDAgNDguNSAxOC41IDc1LjcgNDkuNiA3NS43IDMwLjIgMCA0OS0xOSAxMDMuMi0xMDMuOCAwIDAgMjQuNy0zOS4xIDY1LjQtMTAxLjR6TTUzMS4yIDM5Ny40YzMyLjIgMCA0Ni45LTI3LjUgNDYuOS03NC45IDAtMTI0LjItNTQuMy0yMjUuNC0xMjMuMi0yMjUuNC0zMy4yIDAtNjEuMSAyNS45LTk0LjkgNzggOS40IDEzLjggMTkuMSAyOSAyOS4zIDQ1LjRsMzcuNSA2Mi40YzU4LjcgOTQuMSA3My41IDExNC41IDEwNC40IDExNC41eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXNoYXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjIiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMTAxIDEzMi40YzcuOCAwIDEzLjcgNi4xIDEzLjcgMTMuN2wwIDE4Mi41YzAgNy43LTYuMSAxMy43LTEzLjcgMTMuN2wtMTM1LjEgMGMtNy43IDAtMTMuNy02LTEzLjctMTMuN2wwLTU0LTU0IDBjLTcuOCAwLTEzLjctNi0xMy43LTEzLjdsMC0xODIuNWMwLTguMiA2LjYtMTIuNyAxMi40LTEzLjdsMTM2LjQgMGM3LjcgMCAxMy43IDYgMTMuNyAxMy43bDAgNTQgNTQgMHpNMTY3LjkgMzAwLjNsNDAuNyAwIDAtMTAxLjRjMC03LjQgNS44LTEyLjYgMTItMTMuN2w1NS44IDAgMC00MC4zLTEwOC41IDAgMCAxNTUuNHptMTc2LjItODguMWwtMTA4LjUgMCAwIDE1NS40IDEwOC41IDAgMC0xNTUuNHoiXQogICAgfTsKICAgIGZhU3R1ZGlvdmluYXJpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0dWRpb3ZpbmFyaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2Y4IiwgIk00ODAuNyAxODcuN2w0LjIgMjggMCAyOC0yNS4xIDQ0LjEtMzkuOCA3OC40LTU2LjEgNjcuNS03OS4xIDM3LjgtMTcuNyAyNC41LTcuNyAxMi05LjYgNHMxNy4zLTYzLjYgMTkuNC02My42IDIwLjMgLjcgMjAuMyAuN2w2Ni43LTM4LjYtOTIuNSAyNi4xLTU1LjkgMzYuOC0yMi44IDI4LTYuNiAxLjQgMjAuOC03My42IDYuOS01LjUgMjAuNyAxMi45IDg4LjMtNDUuMiA1Ni44LTUxLjUgMTQuOC02OC40LTEyNS40IDIzLjMgMTUuMi0xOC4yLTE3My40LTUzLjMgODEuOS0xMC41LTE2Ni0xMjIuOSAxMTQuOSAxOC4xLTEwMS4zLTEwOCAyNTIuOSAxMjYuNi0zMS41LTM4IDEyNC40IDc0LjQtMTQzLjMtOTkgMTguNyAzOC40LTQ5LjYtMTguMS00NS41LTg0LjMgMTk0LjYgMTIyLTQyLjktNTUuOCAxMDggOTYuNCAxMi04LjktMjEtMTYuNCA0LjItMzcuOCAzNy44LTEwLjQgMjkuMiAyNC43IDExLjUgNC4yLTcgNi4yIDguNSAxMi0xMy4xIDcuNC0xMC4zIDIwLjIgMTAuNSAyMy45eiJdCiAgICB9OwogICAgZmFCaXRidWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYml0YnVja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MTBdLCAiZjE3MSIsICJNMjIuMiAzMmMtMi4xIDAtNC4yIC40LTYuMSAxLjFzLTMuNyAxLjktNS4yIDMuNC0yLjcgMy4yLTMuNSA1LjEtMS4zIDQtMS4zIDYuMWMwIC45IC4xIDEuOSAuMiAyLjhMNzQuMSA0NjIuN2MuOCA1LjEgMy40IDkuNyA3LjMgMTNzOC44IDUuMiAxNCA1LjJsMzI1LjcgMGMzLjggLjEgNy41LTEuMyAxMC41LTMuN3M0LjktNS45IDUuNS05LjdMNTA1IDUwLjdjLjctNC4yLS4zLTguNC0yLjgtMTEuOXMtNi4yLTUuNy0xMC40LTYuNGMtLjktLjEtMS45LS4yLTIuOC0uMkwyMi4yIDMyek0zMDguMSAzMjkuOGwtMTA0IDAtMjguMS0xNDcgMTU3LjMgMC0yNS4yIDE0N3oiXQogICAgfTsKICAgIGZhVmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE4OSIsICJNMzEuNSA2My41QzAgOTUgMCAxNDUuNyAwIDI0N0wwIDI2NUMwIDM2Ni4zIDAgNDE3IDMxLjUgNDQ4LjVTMTEzLjcgNDgwIDIxNSA0ODBsMTcuOSAwYzEwMS40IDAgMTUyLjEgMCAxODMuNS0zMS41UzQ0OCAzNjYuMyA0NDggMjY1bDAtMTcuOWMwLTEwMS40IDAtMTUyLjEtMzEuNS0xODMuNVMzMzQuMyAzMiAyMzMgMzJMMjE1IDMyQzExMy43IDMyIDYzIDMyIDMxLjUgNjMuNXpNNzUuNiAxNjguM2w1MS4xIDBjMS43IDg1LjUgMzkuNCAxMjEuNyA2OS4zIDEyOS4ybDAtMTI5LjIgNDguMiAwIDAgNzMuN2MyOS41LTMuMiA2MC41LTM2LjggNzAuOS03My43bDQ4LjIgMGMtMy45IDE5LjItMTEuOCAzNy4zLTIzLjEgNTMuM3MtMjUuNyAyOS41LTQyLjUgMzkuNmMxOC43IDkuMyAzNS4yIDIyLjQgNDguNCAzOC41czIyLjkgMzQuOSAyOC4zIDU1bC01MyAwYy00LjktMTcuNS0xNC44LTMzLjEtMjguNi00NXMtMzAuNy0xOS40LTQ4LjctMjEuNmwwIDY2LjYtNS44IDBjLTEwMi4xIDAtMTYwLjMtNzAtMTYyLjgtMTg2LjV6Il0KICAgIH07CiAgICBmYUdpdGh1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRodWIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjA5YiIsICJNMTczLjkgMzk3LjRjMCAyLTIuMyAzLjYtNS4yIDMuNi0zLjMgLjMtNS42LTEuMy01LjYtMy42IDAtMiAyLjMtMy42IDUuMi0zLjYgMy0uMyA1LjYgMS4zIDUuNiAzLjZ6bS0zMS4xLTQuNWMtLjcgMiAxLjMgNC4zIDQuMyA0LjkgMi42IDEgNS42IDAgNi4yLTJzLTEuMy00LjMtNC4zLTUuMmMtMi42LS43LTUuNSAuMy02LjIgMi4zem00NC4yLTEuN2MtMi45IC43LTQuOSAyLjYtNC42IDQuOSAuMyAyIDIuOSAzLjMgNS45IDIuNiAyLjktLjcgNC45LTIuNiA0LjYtNC42LS4zLTEuOS0zLTMuMi01LjktMi45ek0yNTIuOCA4Yy0xMzguNyAwLTI0NC44IDEwNS4zLTI0NC44IDI0NCAwIDExMC45IDY5LjggMjA1LjggMTY5LjUgMjM5LjIgMTIuOCAyLjMgMTcuMy01LjYgMTcuMy0xMi4xIDAtNi4yLS4zLTQwLjQtLjMtNjEuNCAwIDAtNzAgMTUtODQuNy0yOS44IDAgMC0xMS40LTI5LjEtMjcuOC0zNi42IDAgMC0yMi45LTE1LjcgMS42LTE1LjQgMCAwIDI0LjkgMiAzOC42IDI1LjggMjEuOSAzOC42IDU4LjYgMjcuNSA3Mi45IDIwLjkgMi4zLTE2IDguOC0yNy4xIDE2LTMzLjctNTUuOS02LjItMTEyLjMtMTQuMy0xMTIuMy0xMTAuNSAwLTI3LjUgNy42LTQxLjMgMjMuNi01OC45LTIuNi02LjUtMTEuMS0zMy4zIDIuNi02Ny45IDIwLjktNi41IDY5IDI3IDY5IDI3IDIwLTUuNiA0MS41LTguNSA2Mi44LTguNXM0Mi44IDIuOSA2Mi44IDguNWMwIDAgNDguMS0zMy42IDY5LTI3IDEzLjcgMzQuNyA1LjIgNjEuNCAyLjYgNjcuOSAxNiAxNy43IDI1LjggMzEuNSAyNS44IDU4LjkgMCA5Ni41LTU4LjkgMTA0LjItMTE0LjggMTEwLjUgOS4yIDcuOSAxNyAyMi45IDE3IDQ2LjQgMCAzMy43LS4zIDc1LjQtLjMgODMuNiAwIDYuNSA0LjYgMTQuNCAxNy4zIDEyLjEgMTAwLTMzLjIgMTY3LjgtMTI4LjEgMTY3LjgtMjM5IDAtMTM4LjctMTEyLjUtMjQ0LTI1MS4yLTI0NHpNMTA1LjIgMzUyLjljLTEuMyAxLTEgMy4zIC43IDUuMiAxLjYgMS42IDMuOSAyLjMgNS4yIDEgMS4zLTEgMS0zLjMtLjctNS4yLTEuNi0xLjYtMy45LTIuMy01LjItMXptLTEwLjgtOC4xYy0uNyAxLjMgLjMgMi45IDIuMyAzLjkgMS42IDEgMy42IC43IDQuMy0uNyAuNy0xLjMtLjMtMi45LTIuMy0zLjktMi0uNi0zLjYtLjMtNC4zIC43em0zMi40IDM1LjZjLTEuNiAxLjMtMSA0LjMgMS4zIDYuMiAyLjMgMi4zIDUuMiAyLjYgNi41IDEgMS4zLTEuMyAuNy00LjMtMS4zLTYuMi0yLjItMi4zLTUuMi0yLjYtNi41LTF6bS0xMS40LTE0LjdjLTEuNiAxLTEuNiAzLjYgMCA1LjlzNC4zIDMuMyA1LjYgMi4zYzEuNi0xLjMgMS42LTMuOSAwLTYuMi0xLjQtMi4zLTQtMy4zLTUuNi0yeiJdCiAgICB9OwogICAgZmFDb2RpZXBpZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb2RpZXBpZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjg0IiwgIk00NDIuNSAyMDIuOWMzMC43IDAgMzMuNSA1My4xLS4zIDUzLjFsLTEwLjggMCAwIDQ0LjMtMjYuNiAwIDAtOTcuNCAzNy43IDB6TTQ5MiAzNTIuNkM0NDkuOSA0NDQuNSAzNzAuNCA1MDQgMjY4IDUwNCAxMzEgNTA0IDIwIDM5MyAyMCAyNTZTMTMxIDggMjY4IDhjOTcuNCAwIDE3Mi44IDUzLjcgMjE4LjIgMTM4LjRMMzAwLjIgMjU1LjIgNDkyIDM1Mi42em0tMzguNSAxMi41bC02MC4zLTMwLjdjLTI3LjEgNDQuMy03MC40IDcxLjQtMTIyLjQgNzEuNC04Mi41IDAtMTQ5LjItNjYuNy0xNDkuMi0xNDguOSAwLTgyLjUgNjYuNy0xNDkuMiAxNDkuMi0xNDkuMiA0OC40IDAgODguOSAyMy41IDExNi45IDYzLjRsNTkuNS0zNC42QzQwNi41IDczLjkgMzQyLjUgMzYuNSAyNjggMzYuNSAxNDYuOCAzNi41IDQ4LjUgMTM0LjggNDguNSAyNTZTMTQ2LjggNDc1LjUgMjY4IDQ3NS41Yzc4LjYgMCAxNDYuNS00Mi4xIDE4NS41LTExMC40eiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmFlIiwgIk00NDAuMiAyMy4yYy0yNi43IDYuOC02OC4xIDI4LjUtMTE0LjYgNjcuNS0zMC45LTE3LjUtNjUuOC0yNi43LTEwMS40LTI2LjctMTE0LjkgMC0yMDggOTMuMS0yMDggMjA4czkzLjEgMjA4IDIwOCAyMDggMjA4LTkzLjEgMjA4LTIwOGMuMS01NC4xLTIxLTEwNi4xLTU4LjctMTQ0LjgtNi42IDguNS0xMi4zIDE3LjctMTcgMjcuNCAyOC45IDMyLjMgNDQuOCA3NC4xIDQ0LjkgMTE3LjQgMCA5Ny43LTc5LjQgMTc3LjEtMTc3LjEgMTc3LjEtMzAuOCAwLTYxLTguMS04Ny42LTIzLjQgODIuOS0xMDcuMyAxNTAuOC0zNy44IDE4NC4zLTIyNi42IDUuOC0zMi42IDI4LTk0LjMgMTI2LjItMTYwLjIgOC4xLTUuNCAyLjQtMTguMS03LTE1Ljd6TTEwOS4zIDQwNi40Qzg5LjggMzg5LjggNzQuMiAzNjkuMiA2My41IDM0NnMtMTYuMy00OC41LTE2LjMtNzRjMC05Ny43IDc5LjQtMTc3LjEgMTc3LjEtMTc3LjEgMjYuNiAwIDUyLjggNi4xIDc2LjYgMTcuOC02NiA2Mi4xLTEyNi45IDE1Mi45LTE5MS42IDI5My44eiJdCiAgICB9OwogICAgZmFSYXNwYmVycnlQaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyYXNwYmVycnktcGkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiYiIsICJNMzkyLjUgMjMyLjVsLTMuNy02LjVjLjEtNDYuNC0yMS40LTY1LjMtNDYuNS03OS43IDcuNi0yIDE1LjQtMy42IDE3LjYtMTMuMiAxMy4xLTMuMyAxNS44LTkuNCAxNy4xLTE1LjggMy40LTIuMyAxNC44LTguNyAxMy42LTE5LjcgNi40LTQuNCAxMC0xMC4xIDguMS0xOC4xIDYuOS03LjUgOC43LTEzLjcgNS44LTE5LjQgOC4zLTEwLjMgNC42LTE1LjYgMS4xLTIwLjkgNi4yLTExLjIgLjctMjMuMi0xNi42LTIxLjItNi45LTEwLjEtMjEuOS03LjgtMjQuMi03LjgtMi42LTMuMi02LTYtMTYuNS00LjctNi44LTYuMS0xNC40LTUtMjIuMy0yLjEtOS4zLTcuMy0xNS41LTEuNC0yMi42IC44LTExLjMtMy42LTEzLjkgMS4zLTE5LjQgMy40LTEyLjMtMi42LTE2LjEgMy0yMiA4LjlsLTYuOS0uMWMtMTguNiAxMC44LTI3LjggMzIuOC0zMS4xIDQ0LjEtMy4zLTExLjMtMTIuNS0zMy4zLTMxLjEtNDQuMWwtNi45IC4xYy01LjktNS45LTkuNy0xMS41LTIyLTguOS01LjYtMi04LjEtNy0xOS40LTMuNC00LjYtMS40LTguOS00LjQtMTMuOS00LjMtMi42IC4xLTUuNSAxLTguNyAzLjUtNy45LTMtMTUuNS00LTIyLjMgMi4xLTEwLjUtMS4zLTE0IDEuNC0xNi41IDQuNy0yLjMgMC0xNy4zLTIuMy0yNC4yIDcuOC0xNy4zLTItMjIuNyAxMC0xNi41IDIxLjItMy41IDUuNC03LjIgMTAuNyAxLjEgMjAuOS0yLjkgNS43LTEuMSAxMS45IDUuOCAxOS40LTEuOCA4IDEuOCAxMy43IDguMSAxOC4xLTEuMiAxMSAxMC4yIDE3LjQgMTMuNiAxOS43IDEuMyA2LjQgNCAxMi40IDE3LjEgMTUuOCAyLjIgOS41IDEwIDExLjIgMTcuNiAxMy4yLTI1LjEgMTQuNC00Ni42IDMzLjMtNDYuNSA3OS43bC0zLjcgNi41Yy0yOC44IDE3LjItNTQuNyA3Mi43LTE0LjIgMTE3LjcgMi42IDE0LjEgNy4xIDI0LjIgMTEgMzUuNCA1LjkgNDUuMiA0NC41IDY2LjMgNTQuNiA2OC44IDE0LjkgMTEuMiAzMC44IDIxLjggNTIuMiAyOS4yIDIwLjMgMjAuNiA0Mi4zIDI4LjQgNjQuMyAyOC40bDEgMGMyMi4xIDAgNDQtNy44IDY0LjItMjguNCAyMS41LTcuNCAzNy4zLTE4IDUyLjItMjkuMiAxMC4yLTIuNSA0OC43LTIzLjYgNTQuNi02OC44IDMuOS0xMS4yIDguNC0yMS4zIDExLTM1LjQgNDAuNi00NS4xIDE0LjctMTAwLjUtMTQtMTE3Ljd6bS0yMi4yLThjLTEuNSAxOC43LTk4LjktNjUuMS04Mi4xLTY3LjkgNDUuNy03LjUgODMuNiAxOS4yIDgyLjEgNjcuOXptLTQzIDkzLjFjLTI0LjUgMTUuOC01OS44IDUuNi03OC44LTIyLjhzLTE0LjYtNjQuMiA5LjktODAgNTkuOC01LjYgNzguOCAyMi44IDE0LjYgNjQuMi05LjkgODB6TTI1OS40IDI5LjNjLjggNC4yIDEuOCA2LjggMi45IDcuNiA1LjQtNS44IDkuOC0xMS43IDE2LjgtMTcuMyAwIDMuMy0xLjcgNi44IDIuNSA5LjQgMy43LTUgOC44LTkuNSAxNS41LTEzLjMtMy4yIDUuNi0uNiA3LjMgMS4yIDkuNiA1LjEtNC40IDEwLTguOCAxOS40LTEyLjMtMi42IDMuMS02LjIgNi4yLTIuNCA5LjggNS4zLTMuMyAxMC42LTYuNiAyMy4xLTguOS0yLjggMy4xLTguNyA2LjMtNS4xIDkuNCA2LjYtMi41IDE0LTQuNCAyMi4xLTUuNC0zLjkgMy4yLTcuMSA2LjMtMy45IDguOCA3LjEtMi4yIDE2LjktNS4xIDI2LjQtMi42bC02IDYuMWMtLjcgLjggMTQuMSAuNiAyMy45IC44LTMuNiA1LTcuMiA5LjctOS4zIDE4LjIgMSAxIDUuOCAuNCAxMC40IDAtNC43IDkuOS0xMi44IDEyLjMtMTQuNyAxNi42IDIuOSAyLjIgNi44IDEuNiAxMS4yIC4xLTMuNCA2LjktMTAuNCAxMS43LTE2IDE3LjMgMS40IDEgMy45IDEuNiA5LjcgLjktNS4yIDUuNS0xMS40IDEwLjUtMTguOCAxNSAxLjMgMS41IDUuOCAxLjUgMTAgMS42LTYuNyA2LjUtMTUuMyA5LjktMjMuNCAxNC4yIDQgMi43IDYuOSAyLjEgMTAgMi4xLTUuNyA0LjctMTUuNCA3LjEtMjQuNCAxMCAxLjcgMi43IDMuNCAzLjQgNy4xIDQuMS05LjUgNS4zLTIzLjIgMi45LTI3IDUuNiAuOSAyLjcgMy42IDQuNCA2LjcgNS44LTE1LjQgLjktNTcuMy0uNi02NS40LTMyLjMgMTUuNy0xNy4zIDQ0LjQtMzcuNSA5My43LTYyLjYtMzguNCAxMi44LTczIDMwLTEwMiA1My41LTM0LjMtMTUuOS0xMC44LTU1LjkgNS44LTcxLjh6TTIyNSAxNDMuOWMyNC4yLS4zIDU0LjEgMTcuOCA1NCAzNC43LS4xIDE1LTIxIDI3LjEtNTMuOCAyNi45LTMyLjEtLjQtNTMuNy0xNS4yLTUzLjYtMjkuOCAwLTExLjkgMjYuMi0zMi41IDUzLjQtMzEuOHpNMTAyIDEzMS4xYzMuNy0uNyA1LjQtMS41IDcuMS00LjEtOS0yLjgtMTguNy01LjMtMjQuNC0xMCAzLjEgMCA2IC43IDEwLTIuMS04LjEtNC4zLTE2LjctNy43LTIzLjQtMTQuMiA0LjItLjEgOC43IDAgMTAtMS42LTcuNC00LjUtMTMuNi05LjUtMTguOC0xNSA1LjggLjcgOC4zIC4xIDkuNy0uOS01LjYtNS42LTEyLjctMTAuNC0xNi0xNy4zIDQuMyAxLjUgOC4zIDIgMTEuMi0uMS0xLjktNC4yLTEwLTYuNy0xNC43LTE2LjYgNC42IC40IDkuNCAxIDEwLjQgMC0yLjEtOC41LTUuOC0xMy4zLTkuMy0xOC4yIDkuOC0uMSAyNC42IDAgMjMuOS0uOGwtNi02LjFjOS41LTIuNSAxOS4zIC40IDI2LjQgMi42IDMuMi0yLjUtLjEtNS42LTMuOS04LjggOC4xIDEuMSAxNS40IDIuOSAyMi4xIDUuNCAzLjUtMy4xLTIuMy02LjMtNS4xLTkuNCAxMi41IDIuMyAxNy44IDUuNiAyMy4xIDguOSAzLjgtMy42IC4yLTYuNy0yLjQtOS44IDkuNCAzLjQgMTQuMyA3LjkgMTkuNCAxMi4zIDEuNy0yLjMgNC40LTQgMS4yLTkuNiA2LjcgMy44IDExLjggOC4zIDE1LjUgMTMuMyA0LjEtMi42IDIuNS02LjIgMi41LTkuNCA3IDUuNiAxMS40IDExLjUgMTYuOCAxNy4zIDEuMS0uOCAyLTMuNCAyLjktNy42IDE2LjYgMTUuOSA0MC4xIDU1LjkgNiA3MS44LTI5LTIzLjUtNjMuNi00MC43LTEwMi01My41IDQ5LjMgMjUgNzggNDUuMyA5My43IDYyLjYtOCAzMS44LTUwIDMzLjItNjUuNCAzMi4zIDMuMS0xLjQgNS44LTMuMiA2LjctNS44LTQtMi44LTE3LjYtLjQtMjcuMi01LjZ6bTYwLjEgMjQuMWMxNi44IDIuOC04MC42IDg2LjUtODIuMSA2Ny45LTEuNS00OC43IDM2LjUtNzUuNSA4Mi4xLTY3Ljl6TTU4LjcgMzQyYy0yMy43LTE4LjgtMzEuMy03My43IDEyLjYtOTguMyAyNi41LTcgOSAxMDcuOC0xMi42IDk4LjN6bTkxIDk4LjJjLTEzLjMgNy45LTQ1LjggNC43LTY4LjgtMjcuOS0xNS41LTI3LjQtMTMuNS01NS4yLTIuNi02My40IDE2LjMtOS44IDQxLjUgMy40IDYwLjkgMjUuNiAxNi45IDIwIDI0LjYgNTUuMyAxMC41IDY1Ljd6TTEyMy4zIDMyMC41Yy0yNC41LTE1LjgtMjguOS01MS42LTkuOS04MHM1NC4zLTM4LjYgNzguOC0yMi44IDI4LjkgNTEuNiA5LjkgODBjLTE5LjEgMjguNC01NC40IDM4LjYtNzguOCAyMi44ek0yMjUuNSA0OTZjLTI5LjQgMS4yLTU4LjItMjMuNy01Ny44LTMyLjMtLjQtMTIuNyAzNS44LTIyLjYgNTkuMy0yMiAyMy43LTEgNTUuNiA3LjUgNTUuNyAxOC45IC41IDExLTI4LjggMzUuOS01Ny4yIDM1LjR6bTU4LjktMTI0LjljLjIgMjkuNy0yNi4yIDUzLjgtNTguOCA1NHMtNTkuMi0yMy44LTU5LjQtNTMuNGwwLS42Yy0uMi0yOS43IDI2LjItNTMuOCA1OC44LTU0czU5LjIgMjMuOCA1OS40IDUzLjRsMCAuNnptODIuMiA0Mi43Yy0yNS4zIDM0LjYtNTkuNiAzNS45LTcyLjMgMjYuMy0xMy4zLTEyLjQtMy4yLTUwLjkgMTUuMS03MiAyMC45LTIzLjMgNDMuMy0zOC41IDU4LjktMjYuNiAxMC41IDEwLjMgMTYuNyA0OS4xLTEuNyA3Mi4zem0yMi45LTczLjJjLTIxLjUgOS40LTM5LTEwNS4zLTEyLjYtOTguMyA0My45IDI0LjcgMzYuMyA3OS42IDEyLjYgOTguM3oiXQogICAgfTsKICAgIGZhQ3NzMyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjc3MzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxM2MiLCAiTTQ4MCAzMmwtNjQgMzY4LTIyMy4zIDgwLTE5Mi43LTgwIDE5LjYtOTQuOCA4MiAwLTggNDAuNiAxMTYuNCA0NC40IDEzNC4xLTQ0LjQgMTguOC05Ny4xLTMzMy40IDAgMTYtODIgMzMzLjcgMCAxMC41LTUyLjctMzMzLjQgMCAxNi4zLTgyIDQwNy40IDB6Il0KICAgIH07CiAgICBmYUh1YnNwb3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaHVic3BvdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2IyIiwgIk0yMzUuOCAyMTEuNmMtMjUuMSAyMy43LTQwLjggNTcuMy00MC44IDk0LjYgMCAyOS4zIDkuNyA1Ni4zIDI2IDc4TDE3MS41IDQzNGMtNC40LTEuNi05LjEtMi41LTE0LTIuNS0xMC44IDAtMjAuOSA0LjItMjguNSAxMS44cy0xMS44IDE3LjgtMTEuOCAyOC42IDQuMiAyMC45IDExLjggMjguNSAxNy44IDExLjYgMjguNSAxMS42YzEwLjggMCAyMC45LTMuOSAyOC42LTExLjYgNy42LTcuNiAxMS44LTE3LjggMTEuOC0yOC41IDAtNC4yLS42LTguMi0xLjktMTIuMWw1MC01MC4yYzIyIDE2LjkgNDkuNCAyNi45IDc5LjMgMjYuOSA3MS45IDAgMTMwLTU4LjMgMTMwLTEzMC4yIDAtNjUuMi00Ny43LTExOS4yLTExMC4yLTEyOC43bDAtNjEuNmMxNy41LTcuNCAyOC4yLTIzLjggMjguMi00Mi45IDAtMjYuMS0yMC45LTQ3LjktNDctNDcuOVMyNzkuNiA0NyAyNzkuNiA3My4xYzAgMTkuMSAxMC43IDM1LjUgMjguMiA0Mi45bDAgNjEuMmMtMTUuMiAyLjEtMjkuNiA2LjctNDIuNyAxMy42LTI3LjYtMjAuOS0xMTcuNS04NS43LTE2OC45LTEyNC44IDEuMi00LjQgMi05IDItMTMuOCAwLTI4LjgtMjMuNS01Mi4yLTUyLjQtNTIuMi0yOC44IDAtNTIuMiAyMy40LTUyLjIgNTIuMiAwIDI4LjkgMjMuNCA1Mi4zIDUyLjIgNTIuMyA5LjggMCAxOC45LTIuOSAyNi44LTcuNkwyMzUuOCAyMTEuNnptODkuNSAyNS42YTY5IDY5IDAgMSAxIDAgMTM4IDY5IDY5IDAgMSAxIDAtMTM4eiJdCiAgICB9OwogICAgZmFDbXBsaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY21wbGlkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUzNjAiLCAiTTIyNi4xIDM4OC4yYzAtLjctLjItMS41LS42LTIuMXMtMS0xLjEtMS43LTEuNGMtLjUtLjItMS4xLS40LTEuNi0uNGwtMTQ5LjYgMGMtMy4xIDAtNi4yLS44LTguOS0yLjJzLTUuMS0zLjUtNi45LTYuMS0yLjktNS41LTMuMy04LjYgMC02LjIgMS4xLTkuMUw4MS42IDI1NS43YzItNy4yIDYuMi0xMy41IDEyLTE4LjJzMTIuOS03LjQgMjAuNC03LjhsMTQ4LjYgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZsMTAuOC00MS4xYy40LTEgLjMtMi0uMS0yLjlzLTEuMi0xLjYtMi4xLTJjLS40LS4yLS45LS4zLTEuNC0uMy0uMSAwLS4xIDAtLjIgMGwtMTQ4LjUgMGMtMjIuMiAxLjItNDMuNCA5LjItNjAuOCAyM3MtMzAgMzIuNy0zNi4yIDU0LjFMMy41IDM1OC44Yy0zLjIgOC43LTQuMiAxOC0zIDI3LjFzNC42IDE3LjkgOS45IDI1LjUgMTIuMyAxMy44IDIwLjUgMTggMTcuMyA2LjUgMjYuNSA2LjZjMSAwIDEuOSAwIDIuOS0uMWwxNDguNiAwYzEuNS0uMSAyLjktLjcgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC43LTQxLjFjLjItLjUgLjMtLjkgLjMtMS40em04MC41LTMwN2MuMi0uNCAuMy0uOSAuMy0xLjQgMC0uNS0uMS0xLS4zLTEuNXMtLjUtLjktLjgtMS4yLS44LS42LTEuMi0uOC0xLS4zLTEuNS0uM2wtNDEuMiAwYy0xLjUgLjEtMi45IC42LTQgMS42cy0yIDIuMi0yLjQgMy42bC0yMS4zIDgwLjkgNTEuMSAwIDIxLjQtODAuOXptLTEyNi4zIDI4N2w1MS4xIDAgMzItMTIyLjYtNTEuMSAwLTMyIDEyMi42ek01MTEuOSA3OS43YzAtMS0uNS0xLjktMS4yLTIuNnMtMS43LTEuMS0yLjYtMS4xYy0uMSAwLS4xIDAtLjIgMGwtNDEgMGMtMS41IC4xLTIuOSAuNi00LjEgMS41cy0yIDIuMi0yLjUgMy42TDM2OC45IDQzMC42Yy0uMiAuNC0uMyAuOS0uMyAxLjMgMCAxIC40IDIgMS4xIDIuN3MxLjcgMS4xIDIuNyAxLjFsNDEuMiAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNkw1MTEuNSA4MS4yYy4yLS41IC4zLTEgLjMtMS41ek0zMjQuNiAzODQuNWwtNDEgMGMtMS41IC4xLTIuOSAuNy00IDEuNnMtMiAyLjItMi40IDMuNmwtMTAuNyA0MS4xYy0uMiAuNC0uMyAuOS0uMyAxLjQgMCAuNSAuMSAxIC4zIDEuNXMuNSAuOSAuOCAxLjIgLjggLjYgMS4yIC44IDEgLjMgMS41IC4zYy4xIDAgLjIgMCAuMyAwbDQwLjkgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZsMTAuOC00MS4xYy4yLS42IC4zLTEuMiAuMy0xLjhzLS4zLTEuMi0uNi0xLjctLjgtLjktMS4zLTEuMi0xLjItLjQtMS44LS40Yy0uMSAwLS4yIDAtLjMgMGwwIDB6TTYzNiA3Ni4xbC00MSAwYy0xLjUgLjEtMi45IC42LTQgMS41cy0yIDIuMi0yLjQgMy42TDQ5Ny4xIDQzMC42Yy0uMiAuNC0uMiAuOS0uMiAxLjMgMCAxIC40IDIgMS4xIDIuN3MxLjcgMS4xIDIuNyAxLjFsNDEuMSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNkw2MzkuNyA4MS4yYy4yLS41IC4zLTEgLjMtMS41LS4xLTEtLjUtMS45LTEuMi0yLjVzLTEuNi0xLTIuNi0xYy0uMSAwLS4xIDAtLjIgMGwwLS4xek0zNzEuNiAyMjUuMmwxMC44LTQxLjFjLjItLjQgLjItLjkgLjItMS40IDAtMS0uNC0yLTEuMS0yLjdzLTEuNy0xLjEtMi43LTEuMWwtNDEuMyAwYy0xLjUgLjEtMi45IC43LTQgMS42cy0yIDIuMi0yLjQgMy42bC0xMC44IDQxLjFjLS4yIC41LS4zIDEtLjMgMS41bDAgLjJjLjEgMSAuNSAxLjggMS4yIDIuNXMxLjYgMSAyLjYgMWMuMSAwIC4yIDAgLjMgMGw0MS4xIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42eiJdCiAgICB9OwogICAgZmFEeWFsb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHlhbG9nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOTkiLCAiTTE2IDMybDAgMTE5LjIgNjQgMCAwLTU1LjIgMTA3LjIgMEMzMDAuNiA5NiAzNjggMTc2LjIgMzY4IDI1NS45IDM2OCAzMzIgMzA5LjQgNDE2IDE4Ny4yIDQxNmwtMTcxLjIgMCAwIDY0IDE3MS4yIDBDMzQ3LjkgNDgwIDQzMiAzNjcuMyA0MzIgMjU1LjkgNDMyIDE5Ny4yIDQwOS45IDE0Mi41IDM2OS43IDEwMS42IDMyNC45IDU2IDI2MS43IDMyIDE4Ny4yIDMyTDE2IDMyeiJdCiAgICB9OwogICAgZmFFbGVtZW50b3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWxlbWVudG9yIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MzAiLCAiTS41IDI1NmMwIDE0MSAxMTMuNiAyNTUgMjU0LjYgMjU1IDE0MiAwIDI1Ni0xMTQgMjU2LTI1NSAwLTE0MC0xMTQtMjUzLjktMjU2LTI1My45LTE0MSAwLTI1NC42IDExMy45LTI1NC42IDI1My45ek0xOTIuMSAxNTBsMCAyMTMtNDMgMCAwLTIxMyA0MyAwem00MiAwbDEyOCAwIDAgNDMtMTI4IDAgMC00M3ptMTI4IDg1bDAgNDMtMTI4IDAgMC00MyAxMjggMHptLTEyOCA4NWwxMjggMCAwIDQzLTEyOCAwIDAtNDN6Il0KICAgIH07CiAgICBmYUZpcnN0T3JkZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyc3Qtb3JkZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJiMCIsICJNMTMuMyAyMjkuMmMuMS0uMSAuMi0uMyAuMy0uNCAwIC4xIDAgLjMtLjEgLjRsLS4yIDB6TTIyNC40IDk2LjZjLTcuMSAwLTE0LjYgLjYtMjEuNCAxLjdsMy43IDY3LjQtMjItNjRjLTE0LjMgMy43LTI3LjcgOS40LTQwIDE2LjZsMjkuNCA2MS40LTQ1LjEtNTAuOWMtMTEuNCA4LjktMjEuNyAxOS4xLTMwLjYgMzAuOWw1MC42IDQ1LjQtNjEuMS0yOS43Yy03LjEgMTIuMy0xMi45IDI1LjctMTYuNiA0MGw2NC4zIDIyLjYtNjgtNGMtLjkgNy4xLTEuNCAxNC42LTEuNCAyMnMuNiAxNC42IDEuNCAyMS43bDY3LjctNC02NCAyMi42YzMuNyAxNC4zIDkuNCAyNy43IDE2LjYgNDAuM0wxNDkgMzA2LjkgOTguMSAzNTJjOC45IDExLjcgMTkuMSAyMi4zIDMwLjkgMzAuOWw0NC45LTUwLjktMjkuNSA2MS40YzEyLjMgNy40IDI1LjcgMTMuMSA0MCAxNi45bDIyLjMtNjQuNi00IDY4YzcuMSAxLjEgMTQuNiAxLjcgMjEuNyAxLjcgNy40IDAgMTQuNi0uNiAyMS43LTEuN2wtNC02OC42IDIyLjYgNjUuMWMxNC4zLTQgMjcuNy05LjQgNDAtMTYuOWwtMjkuNC02MS4zIDQ0LjkgNTAuOWMxMS43LTguOSAyMi0xOS4xIDMwLjYtMzAuOWwtNTAuNi00NS4xIDYxLjEgMjkuNGM3LjEtMTIuMyAxMi45LTI1LjcgMTYuNi00MC4zbC02NC0yMi4zIDY3LjQgNGMxLjEtNy4xIDEuNC0xNC4zIDEuNC0yMS43cy0uMy0xNC45LTEuNC0yMmwtNjcuNyA0IDY0LTIyLjNjLTMuNy0xNC4zLTkuMS0yOC0xNi42LTQwLjNsLTYwLjkgMjkuNyA1MC42LTQ1LjRjLTguOS0xMS43LTE5LjEtMjItMzAuNi0zMC45bC00NS4xIDUwLjkgMjkuNC02MS4xYy0xMi4zLTcuNC0yNS43LTEzLjEtNDAtMTYuOWwtMjIuMyA2NC4zIDQtNjcuN2MtNy4xLTEuMi0xNC4zLTEuNy0yMS43LTEuN3pNNDQzLjggMTI4TDQ0My44IDM4NCAyMjQuNCA1MTIgNSAzODQgNSAxMjggMjI0LjQgMCA0NDMuOCAxMjh6bS0xNy4xIDEwLjNsLTIwMi4zLTExNy40LTIwMi4zIDExNy40IDAgMjM1LjEgMjAyLjMgMTE3LjcgMjAyLjMtMTE3LjcgMC0yMzUuMXpNMjI0LjQgMzcuMWwxODcuNyAxMDkuNCAwIDIxOC45LTE4Ny43IDEwOS41LTE4Ny43LTEwOS41IDAtMjE4LjggMTg3LjctMTA5LjV6bTAgNTAuOWMtOTIuMyAwLTE2Ni45IDc1LjEtMTY2LjkgMTY4IDAgOTIuNiA3NC42IDE2Ny43IDE2Ni45IDE2Ny43IDkyIDAgMTY2LjktNzUuMSAxNjYuOS0xNjcuNyAwLTkyLjktNzQuOS0xNjgtMTY2LjktMTY4eiJdCiAgICB9OwogICAgZmFEcmliYmJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcmliYmJsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTdkIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQyMCAxMjIuNGMyOS41IDM2IDQ3LjQgODIgNDcuOCAxMzItNy0xLjUtNzctMTUuNy0xNDcuNS02LjgtNS44LTE0LTExLjItMjYuNC0xOC42LTQxLjYgNzguMy0zMiAxMTMuOC03Ny41IDExOC4zLTgzLjV6TTM5Ni40IDk3LjljLTMuOCA1LjQtMzUuNyA0OC4zLTExMSA3Ni41LTM0LjctNjMuOC03My4yLTExNi4yLTc5LTEyNCA2Ny4yLTE2LjIgMTM4IDEuMyAxOTAuMSA0Ny41ek0xNjUuOSA2NC42YzUuNiA3LjcgNDMuNCA2MC4xIDc4LjUgMTIyLjUtOTkuMSAyNi4zLTE4Ni40IDI1LjktMTk1LjggMjUuOCAxMy43LTY1LjcgNTgtMTIwLjQgMTE3LjMtMTQ4LjN6TTQ0LjIgMjU2LjNjMC0yLjIgMC00LjMgLjEtNi41IDkuMyAuMiAxMTEuOSAxLjUgMjE3LjctMzAuMSA2LjEgMTEuOSAxMS45IDIzLjkgMTcuMiAzNS45LTc2LjYgMjEuNi0xNDYuMiA4My41LTE4MC41IDE0Mi4zLTMzLjgtMzcuNi01NC41LTg3LjItNTQuNS0xNDEuNnpNMTI2IDQyMy40YzIyLjEtNDUuMiA4Mi4yLTEwMy42IDE2Ny42LTEzMi44IDI5LjcgNzcuMyA0MiAxNDIuMSA0NS4yIDE2MC42LTY4LjEgMjktMTUwIDIxLjEtMjEyLjgtMjcuOXptMjQ4LjQgOC41Yy0yLjItMTIuOS0xMy40LTc0LjktNDEuMi0xNTEgNjYuNC0xMC42IDEyNC43IDYuOCAxMzEuOSA5LjEtOS40IDU4LjktNDMuMyAxMDkuOC05MC44IDE0MnoiXQogICAgfTsKICAgIGZhTGlua2VkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGlua2VkaW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA4YyIsICJNNDE2IDMyTDMxLjkgMzJDMTQuMyAzMiAwIDQ2LjUgMCA2NC4zTDAgNDQ3LjdDMCA0NjUuNSAxNC4zIDQ4MCAzMS45IDQ4MEw0MTYgNDgwYzE3LjYgMCAzMi0xNC41IDMyLTMyLjNsMC0zODMuNEM0NDggNDYuNSA0MzMuNiAzMiA0MTYgMzJ6TTEzNS40IDQxNmwtNjYuNCAwIDAtMjEzLjggNjYuNSAwIDAgMjEzLjgtLjEgMHpNMTAyLjIgOTZhMzguNSAzOC41IDAgMSAxIDAgNzcgMzguNSAzOC41IDAgMSAxIDAtNzd6TTM4NC4zIDQxNmwtNjYuNCAwIDAtMTA0YzAtMjQuOC0uNS01Ni43LTM0LjUtNTYuNy0zNC42IDAtMzkuOSAyNy0zOS45IDU0LjlsMCAxMDUuOC02Ni40IDAgMC0yMTMuOCA2My43IDAgMCAyOS4yIC45IDBjOC45LTE2LjggMzAuNi0zNC41IDYyLjktMzQuNSA2Ny4yIDAgNzkuNyA0NC4zIDc5LjcgMTAxLjlsMCAxMTcuMnoiXQogICAgfTsKICAgIGZhQ2NQYXlwYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtcGF5cGFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjQiLCAiTTE4Ni4zIDI1OC4yYzAgMTIuMi05LjcgMjEuNS0yMiAyMS41LTkuMiAwLTE2LTUuMi0xNi0xNSAwLTEyLjIgOS41LTIyIDIxLjctMjIgOS4zIDAgMTYuMyA1LjcgMTYuMyAxNS41ek04MC41IDIwOS43bC00LjcgMGMtMS41IDAtMyAxLTMuMiAyLjdsLTQuMyAyNi43IDguMi0uM2MxMSAwIDE5LjUtMS41IDIxLjUtMTQuMiAyLjMtMTMuNC02LjItMTQuOS0xNy41LTE0Ljl6bTI4NCAwbC00LjUgMGMtMS44IDAtMyAxLTMuMiAyLjdsLTQuMiAyNi43IDgtLjNjMTMgMCAyMi0zIDIyLTE4LS4xLTEwLjYtOS42LTExLjEtMTguMS0xMS4xek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjguMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGwtNDAgMGMtMi41IDAtNSAyLTUuMiA0LjdMMzIgMjk0LjJjLS4zIDIgMS4yIDQgMy4yIDRsMTkgMGMyLjcgMCA1LjItMi45IDUuNS01LjdsNC41LTI2LjZjMS03LjIgMTMuMi00LjcgMTgtNC43IDI4LjYgMCA0Ni4xLTE3IDQ2LjEtNDUuOHptODQuMiA4LjhsLTE5IDBjLTMuOCAwLTQgNS41LTQuMiA4LjItNS44LTguNS0xNC4yLTEwLTIzLjctMTAtMjQuNSAwLTQzLjIgMjEuNS00My4yIDQ1LjIgMCAxOS41IDEyLjIgMzIuMiAzMS43IDMyLjIgOSAwIDIwLjItNC45IDI2LjUtMTEuOS0uNSAxLjUtMSA0LjctMSA2LjIgMCAyLjMgMSA0IDMuMiA0bDE3LjIgMGMyLjcgMCA1LTIuOSA1LjUtNS43bDEwLjItNjQuM2MuMy0xLjktMS4yLTMuOS0zLjItMy45ek0yNTMgMzIyLjFsNjMuNy05Mi42Yy41LS41IC41LTEgLjUtMS43IDAtMS43LTEuNS0zLjUtMy4yLTMuNWwtMTkuMiAwYy0xLjcgMC0zLjUgMS00LjUgMi41bC0yNi41IDM5LTExLTM3LjVjLS44LTIuMi0zLTQtNS41LTRsLTE4LjcgMGMtMS43IDAtMy4yIDEuOC0zLjIgMy41IDAgMS4yIDE5LjUgNTYuOCAyMS4yIDYyLjEtMi43IDMuOC0yMC41IDI4LjYtMjAuNSAzMS42IDAgMS44IDEuNSAzLjIgMy4yIDMuMmwxOS4yIDBjMS44LS4xIDMuNS0xLjEgNC41LTIuNnpNNDEyLjMgMjE1LjRjMC0yMS0xNi4yLTI4LTM0LjctMjhsLTM5LjcgMGMtMi43IDAtNS4yIDItNS41IDQuN2wtMTYuMiAxMDJjLS4yIDIgMS4zIDQgMy4yIDRsMjAuNSAwYzIgMCAzLjUtMS41IDQtMy4ybDQuNS0yOWMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNCAwIDQ1LjktMTcgNDUuOS00NS44em04NC4yIDguOGwtMTkgMGMtMy44IDAtNCA1LjUtNC4zIDguMi01LjUtOC41LTE0LTEwLTIzLjctMTAtMjQuNSAwLTQzLjIgMjEuNS00My4yIDQ1LjIgMCAxOS41IDEyLjIgMzIuMiAzMS43IDMyLjIgOS4zIDAgMjAuNS00LjkgMjYuNS0xMS45LS4zIDEuNS0xIDQuNy0xIDYuMiAwIDIuMyAxIDQgMy4yIDRsMTcuMyAwYzIuNyAwIDUtMi45IDUuNS01LjdsMTAuMi02NC4zYy4zLTEuOS0xLjItMy45LTMuMi0zLjl6TTU0NCAxOTAuOWMwLTItMS41LTMuNS0zLjItMy41bC0xOC41IDBjLTEuNSAwLTMgMS4yLTMuMiAyLjdsLTE2LjIgMTA0LS4zIC41YzAgMS44IDEuNSAzLjUgMy41IDMuNWwxNi41IDBjMi41IDAgNS0yLjkgNS4yLTUuN2wxNi4yLTEwMS4yIDAtLjN6bS05MCA1MS44Yy0xMi4yIDAtMjEuNyA5LjctMjEuNyAyMiAwIDkuNyA3IDE1IDE2LjIgMTUgMTIgMCAyMS43LTkuMiAyMS43LTIxLjUgLjEtOS44LTYuOS0xNS41LTE2LjItMTUuNXoiXQogICAgfTsKICAgIGZhRGhsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRobCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzkwIiwgIk0yMzggMzAxLjJsNTguNyAwIDIyLjMtMzAuMi01OC43IDAtMjIuMyAzMC4yek0wIDI4Mi45bDAgNi40IDgxLjggMCA0LjctNi40LTg2LjUgMHpNMTcyLjkgMjcxYy04LjcgMC02LTMuNi00LjYtNS41IDIuOC0zLjggNy42LTEwLjQgMTAuNC0xNC4xczIuOC01LjktMi44LTUuOWwtNTEgMC00MS4xIDU1LjggMTAwLjEgMGMzMy4xIDAgNTEuNS0yMi41IDU3LjItMzAuM2wtNjguMiAwem0zMTcuNS02LjlsMzkuMy01My40LTYyLjIgMC0zOS4zIDUzLjQgNjIuMiAwek05NS4zIDI3MWwtOTUuMyAwIDAgNi40IDkwLjYgMCA0LjctNi40em0xMTEtMjYuNmMtMi44IDMuOC03LjUgMTAuNC0xMC4zIDE0LjItMS40IDItNC4xIDUuNSA0LjYgNS41bDQ1LjYgMHM3LjMtMTAgMTMuNS0xOC40YzguNC0xMS40IC43LTM1LTI5LjItMzVsLTExNy45IDAtMjAuNCAyNy44IDExMS40IDBjNS42IDAgNS41IDIuMiAyLjcgNS45ek0wIDMwMS4ybDczLjEgMCA0LjctNi40LTc3LjggMCAwIDYuNHptMzIzIDBsNTguNyAwIDIyLjMtMzAuMi01OC43IDBjLS4xIDAtMjIuMyAzMC4yLTIyLjMgMzAuMnptMjIyIC4xbDk1IDAgMC02LjQtOTAuMyAwLTQuNyA2LjR6TTU2Ny4zIDI3MWwtNC43IDYuNCA3Ny40IDAgMC02LjQtNzIuNyAwem0tMTMuNSAxOC4zbDg2LjIgMCAwLTYuNC04MS41IDAtNC43IDYuNHpNMzg5LjYgMjEwLjdsLTIyLjUgMzAuNi0yNi4yIDAgMjIuNS0zMC42LTU4LjcgMC0zOS4zIDUzLjQgMTQzLjYgMCAzOS4zLTUzLjQtNTguNyAwek00MjMuMSAyNzFzLTQuMyA1LjktNi40IDguN2MtNy40IDEwLS45IDIxLjYgMjMuMiAyMS42bDk0LjMgMCAyMi4zLTMwLjMtMTMzLjQgMHoiXQogICAgfTsKICAgIGZhVGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRleCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2ZmIiwgIk02MjAuOCA5NS40Yy0zMC44IC40LTQyLjEgMTYuNi00Ny43IDI0LjVsLS4xIC4xLTU1LjcgODAuNSA4Mi44IDEyMS4xYzcuNSAxMC42IDExLjMgMTIuNSAzNS40IDEyLjVsMCA5LjFjLTkuMS0uNy0yOC0uNy0zNy43LS43LTEyLjQgMC0zMC44IDAtNDIuOSAuN2wwLTkuMWMxMy4yLS44IDE2LjYtNy4zIDE2LjYtMTAuMiAwLTEuMSAwLTIuMy0zLTYuNGwtNjUuNS05Ni4zLTYwLjIgODcuOWMtMS45IDIuNy0zLjggNS40LTMuOCAxMC4yIDAgNi4xIDMuNCAxMy42IDE1IDE0LjdsMCA5LjFjLTkuNC0uNy0yNy4xLS43LTM3LjItLjdsLTIuOCAwLTExLjcgODIuNi0xOTUuOSAwIDAtOS4xYzI2LjcgMCAzMC45IDAgMzAuOS0xNi45bDAtMjAzLjJjMC0xNi45LTQuMy0xNi45LTMwLjktMTYuOWwwLTEwLjMgMTkuOCAwYy00LjgtNjEuMS0xMC44LTcxLjctNjgtNzEuOGwtMjAuNyAwYy02LjggMS41LTYuOCA2LjEtNi44IDE0LjRsMCAyMDVjMCAxMy42IDEuMSAxNy44IDMyLjQgMTcuOGwxMC41IDAgMCA5LjEtLjQgMGMtMTcuOS0uMy0zNi43LS43LTU0LjktLjdzLTM2LjkgLjMtNTQuOCAuN2wtLjYgMCAwLTkuMSAxMC43IDBjMzEuNyAwIDMyLjgtNC4xIDMyLjgtMTcuOGwwLTIwNWMwLTguNyAwLTEzLjItNy4yLTE0LjNsLTIwLjggMGMtNTguNCAwLTYzLjcgMTAuOS02OC42IDczLjNsLTYuOCAwIDYuMy04My4zIDIxNy41IDAgNi4xIDgxLjggMTY0LjEgMCA5IDgzLjMtNi44IDBjLTUuMy00OS44LTEyLjEtNzMtNzAuMy03M2wtNTEuNSAwYy0xNSAwLTE1LjggMS45LTE1LjggMTQuNmwwIDkzLjMgMzUuNSAwYzM1LjUgMCAzOC45LTEyLjggMzguOS00NGw2IDAgMCA5Ny45LTYgMGMwLTMxLjgtMy40LTQ0LjgtMzguOS00NC44bC0zNS41IDAgMCAxMDUuMmMwIDEzIC43IDE0LjggMTUuOCAxNC44bDUyLjIgMGM2MS4xIDAgNjkuOS0yNS44IDc3LjQtNzMuNi03LjcgMC0xNi4zIC4yLTIyLjIgLjdsMC05LjFjNy4yIDAgMzEuNy0uNCA0Ny44LTIzLjhsNjUuNS05NS43LTcyLjctMTA2LjdjLTguMy0xMS43LTE1LjEtMTIuNS0zNS44LTEyLjVsMC05LjFjOS4xIC43IDI3LjkgLjcgMzcuNyAuNyAxMi40IDAgMzAuOCAwIDQyLjktLjdsMCA5LjFjLTEyLjUgLjQtMTYuNiA2LjgtMTYuNiAxMC4yIDAgMS4xIC40IDIuMyAzIDYuNGw1NS43IDgxLjYgNDkuNy03Mi4xYzIuNy0zLjcgNC41LTYuOCA0LjUtMTEuMyAwLTYuMS0zLTEzLjYtMTUtMTQuOGwwLTkuMWM5LjQgLjcgMjQuOCAuNyAzNy4yIC43IDkgMCAyMy4zIDAgMzItLjdsMCA5LjF6Il0KICAgIH07CiAgICBmYUNsYXVkZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbGF1ZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg2MSIsICJNMTAwLjQgMzQwLjVsMTAwLjctNTYuNSAxLjctNC45LTEuNy0yLjctNC45IDAtMTYuOC0xLTU3LjUtMS42LTQ5LjktMi4xLTQ4LjMtMi42LTEyLjItMi42LTExLjQtMTUgMS4yLTcuNSAxMC4yLTYuOSAxNC43IDEuM2MxOC45IDEuMyA0NS45IDMuMSA4MSA1LjZsMzUuMiAyLjEgNTIuMiA1LjQgOC4zIDAgMS4yLTMuNC0yLjgtMi4xLTIuMi0yLjEtNTAuMy0zNC4xLTU0LjQtMzYtMjguNS0yMC43LTE1LjQtMTAuNS03LjgtOS44LTMuNC0yMS41IDE0LTE1LjQgMTguOCAxLjMgNC44IDEuMyAxOSAxNC43IDQwLjcgMzEuNSA1My4xIDM5LjEgNy44IDYuNSAzLjEtMi4yIC40LTEuNi0zLjUtNS44LTI4LjktNTIuMi0zMC44LTUzLjEtMTMuNy0yMi0zLjYtMTMuMmMtMS4zLTUuNC0yLjItMTAtMi4yLTE1LjVsMTUuOS0yMS42IDguOC0yLjggMjEuMiAyLjggOC45IDcuOCAxMy4yIDMwLjIgMjEuNCA0Ny41IDMzLjIgNjQuNiA5LjcgMTkuMiA1LjIgMTcuOCAxLjkgNS40IDMuNCAwIDAtMy4xIDIuNy0zNi40IDUtNDQuNyA0LjktNTcuNSAxLjctMTYuMiA4LTE5LjQgMTUuOS0xMC41IDEyLjQgNS45IDEwLjIgMTQuNy0xLjQgOS41LTYuMSAzOS41LTExLjkgNjEuOS03LjggNDEuNSA0LjUgMCA1LjItNS4yIDIxLTI3LjggMzUuMi00NC4xIDE1LjUtMTcuNSAxOC4xLTE5LjMgMTEuNi05LjIgMjIgMCAxNi4yIDI0LjEtNy4zIDI0LjktMjIuNyAyOC43LTE4LjggMjQuNC0yNyAzNi4zLTE2LjggMjkgMS42IDIuMyA0LS40IDYwLjktMTMgMzIuOS01LjkgMzkuMy02LjcgMTcuOCA4LjMgMS45IDguNC03IDE3LjItNDIgMTAuNC00OS4yIDkuOC03My4zIDE3LjMtLjkgLjcgMSAxLjMgMzMgMy4xIDE0LjEgLjggMzQuNiAwIDY0LjQgNC44IDE2LjggMTEuMSAxMC4xIDEzLjYtMS43IDEwLjQtMjUuOSAxMy4yYy0xNS41LTMuNy01NC40LTEyLjktMTE2LjYtMjcuN2wtMjgtNy0zLjkgMCAwIDIuMyAyMy4zIDIyLjggNDIuNyAzOC42IDUzLjUgNDkuOCAyLjcgMTIuMy02LjkgOS43LTcuMy0xLTQ3LTM1LjQtMTguMS0xNS45LTQxLjEtMzQuNi0yLjcgMCAwIDMuNiA5LjUgMTMuOSA1MCA3NS4yIDIuNiAyMy0zLjYgNy41LTEzIDQuNS0xNC4yLTIuNi0yOS4zLTQxLjEtMzAuMi00Ni4zLTI0LjQtNDEuNS0zIDEuNy0xNC40IDE1NC44LTYuNyA3LjktMTUuNSA1LjktMTMtOS44LTYuOS0xNS45IDYuOS0zMS41IDguMy00MS4xIDYuNy0zMi43IDYuMS00MC42IDMuNi0xMy41LS4yLS45LTMgLjQtMzAuNiA0Mi00Ni41IDYyLjktMzYuOCAzOS40LTguOCAzLjUtMTUuMy03LjkgMS40LTE0LjEgOC41LTEyLjYgNTAuOS02NC44IDMwLjctNDAuMiAxOS44LTIzLjItLjEtMy40LTEuMiAwLTEzNS4zIDg3LjgtMjQuMSAzLjEtMTAuNC05LjcgMS4zLTE1LjkgNC45LTUuMiA0MC43LTI4LS4xIC4xIDAgLjF6Il0KICAgIH07CiAgICBmYVNob3BpZnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hvcGlmeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDU3IiwgIk0zODguNSAxMDQuMWMtLjItMS4xLS43LTIuMS0xLjUtMi44cy0xLjgtMS4yLTIuOS0xLjJjLTIgMC0zNy4yLS44LTM3LjItLjhzLTIxLjYtMjAuOC0yOS42LTI4LjhsMCA0MzIuNyAxMjUuNy0zMS4ycy01NC0zNjUuNS01NC40LTM2Ny45ek0yODguOSA3MC41Yy0xLjktNi4xLTQuMy0xMS45LTcuMi0xNy42LTEwLjQtMjAtMjYtMzAuOS00NC40LTMwLjktMS4zIDAtMi43IC4xLTQgLjQtLjQtLjgtMS4yLTEuMi0xLjYtMi04LTguOC0xOC40LTEyLjgtMzAuOC0xMi40LTI0IC44LTQ4IDE4LTY3LjIgNDguOC0xMy42IDIxLjYtMjQgNDguOC0yNi44IDcwLjEtMjcuNiA4LjQtNDYuOCAxNC40LTQ3LjIgMTQuOC0xNCA0LjQtMTQuNCA0LjgtMTYgMTgtMS4yIDEwLTM4IDI5MS44LTM4IDI5MS44bDMwMi42IDUyLjUgMC00MzguM2MtMS41IC4xLTIuOSAuMi00LjQgLjQgMCAwLTUuNiAxLjYtMTQuOCA0LjR6TTIzMy42IDg3LjdjLTE2IDQuOC0zMy42IDEwLjQtNTAuOCAxNS42IDQuOC0xOC44IDE0LjQtMzcuNiAyNS42LTUwIDQuNC00LjQgMTAuNC05LjYgMTcuMi0xMi44IDYuOCAxNC40IDguNCAzNCA4IDQ3LjJ6TTIwMC44IDI0LjRjNS0uMiAxMCAxLjEgMTQuNCAzLjYtNi40IDMuMi0xMi44IDguNC0xOC44IDE0LjQtMTUuMiAxNi40LTI2LjggNDItMzEuNiA2Ni41LTE0LjQgNC40LTI4LjggOC44LTQyIDEyLjggOC44LTM4LjQgNDEuMi05Ni40IDc4LTk3LjJ6TTE1NC40IDI0NC42YzEuNiAyNS42IDY5LjIgMzEuMiA3My4yIDkxLjcgMi44IDQ3LjYtMjUuMiA4MC4xLTY1LjYgODIuNS00OC44IDMuMi03NS42LTI1LjYtNzUuNi0yNS42bDEwLjQtNDRzMjYuOCAyMC40IDQ4LjQgMTguOGMxNC0uOCAxOS4yLTEyLjQgMTguOC0yMC40LTItMzMuNi01Ny4yLTMxLjYtNjAuOC04Ni45LTMuMi00Ni40IDI3LjItOTMuMyA5NC41LTk3LjcgMjYtMS42IDM5LjIgNC44IDM5LjIgNC44bC0xNS4yIDU3LjZzLTE3LjItOC0zNy42LTYuNGMtMjkuNiAyLTMwIDIwLjgtMjkuNiAyNS42ek0yNDkuNiA4Mi45YzAtMTItMS42LTI5LjItNy4yLTQzLjYgMTguNCAzLjYgMjcuMiAyNCAzMS4yIDM2LjQtNy4yIDItMTUuMiA0LjQtMjQgNy4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVSZWRkaXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXJlZGRpdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJyZWRkaXQtc3F1YXJlIl0sICJmMWEyIiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6TTMwNS45IDE2Ni40YzIwLjYgMCAzNy4zLTE2LjcgMzcuMy0zNy4zcy0xNi43LTM3LjMtMzcuMy0zNy4zYy0xOCAwLTMzLjEgMTIuOC0zNi42IDI5LjgtMzAuMiAzLjItNTMuOCAyOC44LTUzLjggNTkuOWwwIC4yYy0zMi44IDEuNC02Mi44IDEwLjctODYuNiAyNS41LTguOC02LjgtMTkuOS0xMC45LTMyLTEwLjktMjguOSAwLTUyLjMgMjMuNC01Mi4zIDUyLjMgMCAyMSAxMi4zIDM5IDMwLjEgNDcuNCAxLjcgNjAuNyA2Ny45IDEwOS42IDE0OS4zIDEwOS42czE0Ny42LTQ4LjkgMTQ5LjMtMTA5LjdjMTcuNy04LjQgMjkuOS0yNi40IDI5LjktNDcuMyAwLTI4LjktMjMuNC01Mi4zLTUyLjMtNTIuMy0xMiAwLTIzIDQtMzEuOSAxMC44LTI0LTE0LjktNTQuMy0yNC4yLTg3LjUtMjUuNGwwLS4xYzAtMjIuMiAxNi41LTQwLjcgMzcuOS00My43IDMuOSAxNi41IDE4LjcgMjguNyAzNi4zIDI4LjdsLjItLjJ6TTE1NSAyNDguMWMxNC42IDAgMjUuOCAxNS40IDI1IDM0LjRzLTExLjggMjUuOS0yNi41IDI1LjktMjcuNS03LjctMjYuNi0yNi43IDEzLjUtMzMuNSAyOC4xLTMzLjVsMC0uMXptMTY2LjQgMzMuNWMuOSAxOS0xMiAyNi43LTI2LjYgMjYuN3MtMjUuNi02LjktMjYuNS0yNS45IDEwLjMtMzQuNCAyNS0zNC40IDI3LjMgMTQuNiAyOC4xIDMzLjVsMCAuMXptLTQyLjEgNDkuNmMtOSAyMS41LTMwLjMgMzYuNy01NS4xIDM2LjdzLTQ2LjEtMTUuMS01NS4xLTM2LjdjLTEuMS0yLjYgLjctNS40IDMuNC01LjcgMTYuMS0xLjYgMzMuNS0yLjUgNTEuNy0yLjVzMzUuNiAuOSA1MS43IDIuNWMyLjcgLjMgNC41IDMuMSAzLjQgNS43eiJdCiAgICB9OwogICAgZmFSZWRkaXRTcXVhcmUgPSBmYVNxdWFyZVJlZGRpdDsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1uYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGU4IiwgIk0yNTUuNiA4QzM5NS40IDggNTA0IDExNS45IDUwNCAyNTYgNTA0IDQwMy4yIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjEgNTA0IDggMzkzLjIgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6TTYzLjggMTg5LjFjLTcuNCAyMC40LTExLjEgNDIuNy0xMS4xIDY2LjkgMCAxMTAuOSA5Mi4xIDIwMi40IDIwMy43IDIwMi40IDEyMi40IDAgMTc3LjItMTAxLjggMTc4LjUtMTA0LjFsLTkzLjQtNDEuNmMtNy43IDM3LjEtNDEuMiA1My02OC4yIDU1LjRsMCAzOC4xLTI4LjggMCAwLTM4LjJjLTI3LjUtLjMtNTIuNi0xMC4yLTc1LjMtMjkuN2wzNC4xLTM0LjVjMzEuNyAyOS40IDg2LjQgMzEuOCA4Ni40LTIuMiAwLTYuMi0yLjItMTEuMi02LjYtMTUuMS0xNC4yLTYtMS44LS4xLTIxOS4zLTk3LjR6TTI1Ni40IDUyLjNDMjE4IDUyLjMgMTQ0IDYxIDg1LjkgMTQ1LjNsOTQuOCA0Mi41YzEwLTMxLjMgNDAuNC00Mi45IDYzLjgtNDQuM2wwLTM4LjEgMjguOCAwIDAgMzguMWMyMi43IDEuMiA0My40IDguOSA2MiAyM0wzMDMgMTk5LjdjLTQyLjctMjkuOS04My41LTgtNzAgMTEuMSA1My40IDI0LjEgNDMuOCAxOS44IDkzIDQxLjZsMTI3LjEgNTYuN2M0LjEtMTcuNCA2LjItMzUuMSA2LjItNTMuMSAwLTU3LTE5LjgtMTA1LTU5LjMtMTQzLjktMzkuMy0zOS45LTg3LjItNTkuOC0xNDMuNi01OS44eiJdCiAgICB9OwogICAgZmFHYWxhY3RpY1JlcHVibGljID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdhbGFjdGljLXJlcHVibGljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MGMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDEgMCA0OTYgMjQ4IDI0OCAwIDEgMSAwLTQ5NnptMCAxNi41YTIzMS41IDIzMS41IDAgMSAwIDAgNDYyLjkgMjMxLjUgMjMxLjUgMCAxIDAgMC00NjIuOXptMjcuNiAyMS44bDAgMjQuNmMzMC4zIDQuNSA1OSAxNi4zIDgzLjYgMzQuNWwxNy40LTE3LjRjLTI4LjctMjIuMS02My4zLTM2LjktMTAxLTQxLjh6bS01NS40IC4xYy0zNy42IDQuOS03Mi4yIDE5LjgtMTAwLjkgNDEuOWwxNy4zIDE3LjQgLjEgMGMyNC4xLTE3LjggNTIuNi0zMC4xIDgzLjUtMzQuN2wwLTI0LjV6bTEyLjIgNTAuMmwwIDgyLjljLTEwIDItMTkuNCA1LjktMjcuNyAxMS40bC01OC42LTU4LjYtMjEuOSAyMS45IDU4LjcgNTguN2MtNS41IDguMi05LjQgMTcuNi0xMS41IDI3LjZsLTgyLjkgMCAwIDMxIDgyLjkgMGMyIDEwIDYgMTkuMyAxMS41IDI3LjVsLTU4LjcgNTguNyAyMS45IDIxLjkgNTguNi01OC42YzguNCA1LjYgMTcuOCA5LjUgMjcuNyAxMS41bDAgODIuOSAzMSAwIDAtODIuOWMxMC0yIDE5LjQtNi4xIDI3LjYtMTEuNWw1OC43IDU4LjcgMjEuOS0yMS45LTU4LjctNTguN2M1LjUtOC4yIDkuNS0xNy41IDExLjUtMjcuNWw4Mi45IDAgMC0zMS04Mi45IDBjLTItMTAtNi0xOS40LTExLjUtMjcuNmw1OC43LTU4LjctMjEuOS0yMS45LTU4LjcgNTguN2MtOC4yLTUuNS0xNy42LTkuNS0yNy42LTExLjVsMC04Mi45LTMxIDB6bTE4My4yIDMwLjdsLTE3LjQgMTcuNGMxOC4zIDI0LjYgMzAuMiA1My40IDM0LjcgODMuN2wyNC42IDBjLTUtMzcuNy0xOS44LTcyLjMtNDEuOS0xMDF6bS0zMzUuNiAuMWMtMjIuMSAyOC43LTM2LjkgNjMuMy00MS44IDEwMC45bDI0LjYgMGM0LjYtMzEgMTYuOC01OS40IDM0LjYtODMuNUw4OC4yIDEyNy40ek00Ni4zIDI4My43YzQuOSAzNy42IDE5LjcgNzIuMiA0MS44IDEwMC45bDE3LjQtMTcuNEM4Ny43IDM0My4xIDc1LjYgMzE0LjYgNzEgMjgzLjdsLTI0LjYgMCAwIDB6bTM5NC43IDBjLTQuNiAzMS0xNi44IDU5LjUtMzQuNyA4My42bDE3LjQgMTcuNGMyMi4xLTI4LjcgMzctNjMuMyA0MS45LTEwMWwtMjQuNiAwek0xNDQuNyA0MDYuNGwtMTcuNCAxNy40YzI4LjcgMjIuMSA2My4zIDM3IDEwMSA0MS45bDAtMjQuNmMtMzEtNC42LTU5LjUtMTYuOC04My42LTM0LjZ6bTIyMi41IDBjLTI0LjEgMTcuOC01Mi42IDMwLjEtODMuNiAzNC43bDAgMjQuNmMzNy43LTQuOSA3Mi4yLTE5LjggMTAxLTQxLjhsLTE3LjMtMTcuNC0uMSAweiJdCiAgICB9OwogICAgZmFGYWNlYm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlYm9vayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyZTNdLCAiZjA5YSIsICJNNTEyIDI1NkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2QzAgMzc2IDgyLjcgNDc2LjggMTk0LjIgNTA0LjVsMC0xNzAuMy01Mi44IDAgMC03OC4yIDUyLjggMCAwLTMzLjdjMC04Ny4xIDM5LjQtMTI3LjUgMTI1LTEyNy41IDE2LjIgMCA0NC4yIDMuMiA1NS43IDYuNGwwIDcwLjhjLTYtLjYtMTYuNS0xLTI5LjYtMS00MiAwLTU4LjIgMTUuOS01OC4yIDU3LjJsMCAyNy44IDgzLjYgMC0xNC40IDc4LjItNjkuMyAwIDAgMTc1LjlDNDEzLjggNDk0LjggNTEyIDM4Ni45IDUxMiAyNTZ6Il0KICAgIH07CiAgICBmYUdpdGxhYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRsYWIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5NiIsICJNNTA0IDIwNC42bC0uNy0xLjgtNjkuNy0xODEuOGMtMS40LTMuNi0zLjktNi42LTcuMi04LjYtMi40LTEuNi01LjEtMi41LTgtMi44cy01LjcgLjEtOC40IDEuMS01LjEgMi43LTcuMSA0LjhjLTEuOSAyLjEtMy4zIDQuNy00LjEgNy40bC00NyAxNDQtMTkwLjUgMC00Ny4xLTE0NGMtLjgtMi44LTIuMi01LjMtNC4xLTcuNC0yLTIuMS00LjQtMy43LTcuMS00LjgtMi42LTEtNS41LTEuNC04LjQtMS4xcy01LjYgMS4yLTggMi44Yy0zLjIgMi01LjggNS4xLTcuMiA4LjZMOS44IDIwMi44IDkgMjA0LjZjLTEwIDI2LjItMTEuMyA1NS0zLjUgODIgNy43IDI2LjkgMjQgNTAuNyA0Ni40IDY3LjZsLjMgLjIgLjYgLjQgMTA2IDc5LjVjMzguNSAyOS4xIDY2LjcgNTAuMyA4NC42IDYzLjkgMy43IDEuOSA4LjMgNC4zIDEzIDQuM3M5LjMtMi40IDEzLTQuM2MxNy45LTEzLjUgNDYuMS0zNC45IDg0LjYtNjMuOWwxMDYuNy03OS45IC4zLS4zYzIyLjQtMTYuOSAzOC43LTQwLjYgNDUuNi02Ny41IDguNi0yNyA3LjQtNTUuOC0yLjYtODJ6Il0KICAgIH07CiAgICBmYVFxID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInFxIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZDYiLCAiTTQzNC4xIDQyMC40Yy0xMS41IDEuNC00NC45LTUyLjctNDQuOS01Mi43IDAgMzEuMy0xNi4xIDcyLjItNTEgMTAxLjggMTYuOCA1LjIgNTQuOCAxOS4yIDQ1LjggMzQuNC03LjMgMTIuMy0xMjUuNSA3LjktMTU5LjYgNC0zNC4xIDMuOC0xNTIuMyA4LjMtMTU5LjYtNC05LTE1LjIgMjguOS0yOS4yIDQ1LjgtMzQuNC0zNC45LTI5LjUtNTEuMS03MC40LTUxLjEtMTAxLjggMCAwLTMzLjMgNTQuMS00NC45IDUyLjctNS40LS42LTEyLjQtMjkuNiA5LjMtOTkuNyAxMC4zLTMzIDIyLTYwLjUgNDAuMS0xMDUuOC0zLjEtMTE2LjkgNDUuMi0yMTUgMTYwLjMtMjE1IDExMy43IDAgMTYzLjIgOTYuMSAxNjAuMyAyMTUgMTguMSA0NS4yIDI5LjkgNzIuOSA0MC4xIDEwNS44IDIxLjggNzAuMSAxNC43IDk5LjEgOS4zIDk5Ljd6Il0KICAgIH07CiAgICBmYVN0cmlwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHJpcGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQyOSIsICJNMTY1IDE0NC43bC00My4zIDkuMi0uMiAxNDIuNGMwIDI2LjMgMTkuOCA0My4zIDQ2LjEgNDMuMyAxNC42IDAgMjUuMy0yLjcgMzEuMi01LjlsMC0zMy44Yy01LjcgMi4zLTMzLjcgMTAuNS0zMy43LTE1LjdsMC02My4yIDMzLjcgMCAwLTM3LjgtMzMuNyAwLS4xLTM4LjV6bTg5LjEgNTEuNmwtMi43LTEzLjEtMzguNCAwIDAgMTUzLjIgNDQuMyAwIDAtMTAzLjFjMTAuNS0xMy44IDI4LjItMTEuMSAzMy45LTkuM2wwLTQwLjhjLTYtMi4xLTI2LjctNi0zNy4xIDEzLjF6TTM0Ni40IDEyNGwtNDQuNiA5LjUgMCAzNi4yIDQ0LjYtOS41IDAtMzYuMnpNNDQuOSAyMjguM2MwLTYuOSA1LjgtOS42IDE1LjEtOS43IDEzLjUgMCAzMC43IDQuMSA0NC4yIDExLjRsMC00MS44Yy0xNC43LTUuOC0yOS40LTguMS00NC4xLTguMS0zNiAwLTYwIDE4LjgtNjAgNTAuMiAwIDQ5LjIgNjcuNSA0MS4yIDY3LjUgNjIuNCAwIDguMi03LjEgMTAuOS0xNyAxMC45LTE0LjcgMC0zMy43LTYuMS00OC42LTE0LjJsMCA0MGMxNi41IDcuMSAzMy4yIDEwLjEgNDguNSAxMC4xIDM2LjkgMCA2Mi4zLTE1LjggNjIuMy00Ny44IDAtNTIuOS02Ny45LTQzLjQtNjcuOS02My40ek02NDAgMjYxLjZjMC00NS41LTIyLTgxLjQtNjQuMi04MS40cy02Ny45IDM1LjktNjcuOSA4MS4xYzAgNTMuNSAzMC4zIDc4LjIgNzMuNSA3OC4yIDIxLjIgMCAzNy4xLTQuOCA0OS4yLTExLjVsMC0zMy40Yy0xMi4xIDYuMS0yNiA5LjgtNDMuNiA5LjgtMTcuMyAwLTMyLjUtNi4xLTM0LjUtMjYuOWw4Ni45IDBjLjItMi4zIC42LTExLjYgLjYtMTUuOXptLTg3LjktMTYuOGMwLTIwIDEyLjMtMjguNCAyMy40LTI4LjQgMTAuOSAwIDIyLjUgOC40IDIyLjUgMjguNGwtNDUuOSAwek00MzkuMiAxODAuMmMtMTcuNCAwLTI4LjYgOC4yLTM0LjggMTMuOWwtMi4zLTExLTM5LjEgMCAwIDIwNC44IDQ0LjQtOS40IC4xLTUwLjJjNi40IDQuNyAxNS45IDExLjIgMzEuNCAxMS4yIDMxLjggMCA2MC44LTIzLjIgNjAuOC03OS42IC4xLTUxLjYtMjkuMy03OS43LTYwLjUtNzkuN3pNNDI4LjYgMzAyLjdjLTEwLjQgMC0xNi42LTMuOC0yMC45LTguNGwtLjMtNjZjNC42LTUuMSAxMS04LjggMjEuMi04LjggMTYuMiAwIDI3LjQgMTguMiAyNy40IDQxLjQgLjEgMjMuOS0xMC45IDQxLjgtMjcuNCA0MS44ek0zMDEuOSAzMzYuNGw0NC42IDAgMC0xNTMuMi00NC42IDAgMCAxNTMuMnoiXQogICAgfTsKICAgIGZhRGFpbHltb3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFpbHltb3Rpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA1MiIsICJNMjk4LjkgMjY3Yy03LjQtNC4yLTE1LjgtNi4zLTI0LjQtNi4yLTEzLjIgMC0yNC40IDQuNC0zMy40IDEzLjNzLTEzLjYgMjAtMTMuNiAzMy40YzAgMTQuMSA0LjQgMjUuNiAxMy4zIDM0LjZzMjAgMTMuNCAzMy40IDEzLjRjMTMuNyAwIDI1LTQuNiAzNC4xLTEzLjhTMzIyIDMyMS4xIDMyMiAzMDcuNWMwLTguMi0yLjEtMTYuMy02LjEtMjMuNS00LTcuMS05LjgtMTMtMTctMTd6TTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM3NC43IDQwNS4zbC01My4xIDAgMC0yMy45LS43IDBjLTEwLjUgMTcuNS0yOS4xIDI2LjItNTUuOCAyNi4yLTE4LjQgMC0zNC43LTQuNC00OC45LTEzLjEtMTQuMS04LjYtMjUuNS0yMS0zMi45LTM1LjgtNy43LTE1LjEtMTEuNi0zMi4xLTExLjYtNTAuOSAwLTE4LjQgMy45LTM1LjEgMTEuOC01MC4yIDcuNS0xNC43IDE4LjktMjcuMSAzMi45LTM1LjggMTQuMS04LjcgMzAtMTMuMSA0Ny43LTEzLjEgMTAuMi0uMSAyMC4yIDEuNiAyOS43IDUuMiA4LjkgMy41IDE3LjIgOS4xIDI1IDE3bDAtNzcuOSA1NS44LTEyLjEgMCAyNjQuNHoiXQogICAgfTsKICAgIGZhU3RlYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFiNiIsICJNNTA0IDI1NmMwIDEzNy0xMTEuMiAyNDgtMjQ4LjQgMjQ4LTExMy44IDAtMjA5LjYtNzYuMy0yMzktMTgwLjRsOTUuMiAzOS4zYzYuNCAzMi4xIDM0LjkgNTYuNCA2OC45IDU2LjQgMzkuMiAwIDcxLjktMzIuNCA3MC4yLTczLjVsODQuNS02MC4yYzUyLjEgMS4zIDk1LjgtNDAuOSA5NS44LTkzLjUgMC01MS42LTQyLTkzLjUtOTMuNy05My41cy05My43IDQyLTkzLjcgOTMuNWwwIDEuMi01OS4yIDg1LjdjLTE1LjUtLjktMzAuNyAzLjQtNDMuNSAxMi4xTDggMjM2LjFDMTguMiAxMDguNCAxMjUuMSA4IDI1NS42IDggMzkyLjggOCA1MDQgMTE5IDUwNCAyNTZ6TTE2My43IDM4NC4zbC0zMC41LTEyLjZjNS42IDExLjYgMTUuMyAyMC44IDI3LjIgMjUuOCAyNi45IDExLjIgNTcuOC0xLjYgNjktMjguNCA1LjQtMTMgNS41LTI3LjMgLjEtNDAuM1MyMTQgMzA1LjYgMjAxIDMwMC4yYy0xMi45LTUuNC0yNi43LTUuMi0zOC45LS42bDMxLjUgMTNjMTkuOCA4LjIgMjkuMiAzMC45IDIwLjkgNTAuNy04LjMgMTkuOS0zMSAyOS4yLTUwLjggMjF6TTMzNy41IDEyOS44YTYyLjMgNjIuMyAwIDEgMSAwIDEyNC42IDYyLjMgNjIuMyAwIDEgMSAwLTEyNC42em0uMSAxMDlhNDYuOCA0Ni44IDAgMSAwIDAtOTMuNiA0Ni44IDQ2LjggMCAxIDAgMCA5My42eiJdCiAgICB9OwogICAgZmFWZW5tb1YgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmVubW8tdiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODViIiwgIk00NjYuNSAxNC44YzE3LjQgMjguNyAyNS4zIDU4LjIgMjUuMyA5NS41IDAgMTE5LTEwMS45IDI3My41LTE4NC43IDM4Mi4xbC0xODguOSAwLTc1LjgtNDUxLjUgMTY1LjQtMTUuNyA0MC4xIDMyMS4zYzM3LjQtNjAuOCA4My42LTE1Ni4zIDgzLjYtMjIxLjQgMC0zNS42LTYuMS01OS45LTE1LjctNzkuOUw0NjYuNSAxNC44eiJdCiAgICB9OwogICAgZmFTbmFwY2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzbmFwY2hhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTI0LCAic25hcGNoYXQtZ2hvc3QiXSwgImYyYWIiLCAiTTQ5Ny4xIDM2Ni42Yy0zLjQtOS4yLTkuOC0xNC4xLTE3LjEtMTguMi0xLjQtLjgtMi42LTEuNS0zLjctMS45LTIuMi0xLjEtNC40LTIuMi02LjYtMy40LTIyLjgtMTIuMS00MC42LTI3LjMtNTMtNDUuNC0zLjUtNS4xLTYuNi0xMC41LTkuMS0xNi4xLTEuMS0zLTEtNC43LS4yLTYuMyAuOC0xLjIgMS43LTIuMiAyLjktMyAzLjktMi42IDgtNS4yIDEwLjctNyA0LjktMy4yIDguOC01LjcgMTEuMi03LjQgOS40LTYuNSAxNS45LTEzLjUgMjAtMjEuMyAyLjktNS40IDQuNS0xMS4zIDQuOS0xNy40cy0uNi0xMi4yLTIuOC0xNy44Yy02LjItMTYuMy0yMS42LTI2LjQtNDAuMy0yNi40LTMuOSAwLTcuOSAuNC0xMS43IDEuMi0xIC4yLTIuMSAuNS0zLjEgLjcgLjItMTEuMi0uMS0yMi45LTEuMS0zNC41LTMuNS00MC44LTE3LjgtNjIuMS0zMi43LTc5LjItOS41LTEwLjctMjAuNy0xOS43LTMzLjItMjYuNy0yMi42LTEyLjktNDguMi0xOS40LTc2LjEtMTkuNHMtNTMuNCA2LjUtNzYgMTkuNGMtMTIuNSA3LTIzLjcgMTYuMS0zMy4zIDI2LjgtMTQuOSAxNy0yOS4yIDM4LjQtMzIuNyA3OS4yLTEgMTEuNi0xLjIgMjMuNC0xLjEgMzQuNS0xLS4zLTItLjUtMy4xLS43LTMuOS0uOC03LjgtMS4yLTExLjctMS4yLTE4LjcgMC0zNC4xIDEwLjEtNDAuMyAyNi40LTIuMiA1LjctMy4yIDExLjgtMi44IDE3LjhzMiAxMiA0LjkgMTcuNGM0LjEgNy44IDEwLjcgMTQuNyAyMCAyMS4zIDIuNSAxLjcgNi40IDQuMiAxMS4yIDcuNCAyLjYgMS43IDYuNSA0LjIgMTAuMyA2LjcgMS4zIC45IDIuNCAyIDMuMyAzLjMgLjggMS42IC44IDMuNC0uNCA2LjYtMi41IDUuNS01LjUgMTAuOC04LjkgMTUuOC0xMi4xIDE3LjctMjkuNCAzMi42LTUxLjQgNDQuNi0xMS43IDYuMi0yMy45IDEwLjMtMjkgMjQuMy0zLjkgMTAuNS0xLjMgMjIuNSA4LjUgMzIuNiAzLjYgMy44IDcuOCA2LjkgMTIuNCA5LjQgOS42IDUuMyAxOS44IDkuMyAzMC4zIDEyLjEgMi4yIC42IDQuMyAxLjUgNi4xIDIuNyAzLjYgMy4xIDMuMSA3LjkgNy44IDE0LjggMi40IDMuNiA1LjQgNi43IDkgOS4xIDEwIDYuOSAyMS4zIDcuNCAzMy4yIDcuOCAxMC44IC40IDIzIC45IDM2LjkgNS41IDUuOCAxLjkgMTEuOCA1LjYgMTguNyA5LjkgMTYuNyAxMC4zIDM5LjYgMjQuMyA3Ny44IDI0LjNzNjEuMy0xNC4xIDc4LjEtMjQuNGM2LjktNC4yIDEyLjktNy45IDE4LjUtOS44IDEzLjktNC42IDI2LjItNS4xIDM2LjktNS41IDExLjktLjUgMjMuMi0uOSAzMy4yLTcuOCA0LjItMi45IDcuNy02LjcgMTAuMi0xMS4yIDMuNC01LjggMy40LTkuOSA2LjYtMTIuOCAxLjgtMS4yIDMuNy0yLjEgNS44LTIuNiAxMC43LTIuOCAyMS02LjkgMzAuOC0xMi4yIDQuOS0yLjYgOS4zLTYuMSAxMy0xMC4ybC4xLS4yYzkuMi05LjkgMTEuNS0yMS41IDcuOC0zMS44em0tMzQgMTguM2MtMjAuNyAxMS41LTM0LjUgMTAuMi00NS4zIDE3LjEtOS4xIDUuOS0zLjcgMTguNS0xMC4zIDIzLjEtOC4xIDUuNi0zMi4yLS40LTYzLjIgOS45LTI1LjYgOC41LTQyIDMyLjgtODggMzIuOHMtNjItMjQuMy04OC4xLTMyLjljLTMxLTEwLjMtNTUuMS00LjItNjMuMi05LjktNi42LTQuNi0xLjItMTcuMi0xMC4zLTIzLjEtMTAuNy02LjktMjQuNS01LjctNDUuMy0xNy4xLTEzLjItNy4zLTUuNy0xMS44LTEuMy0xMy45IDc1LjEtMzYuNCA4Ny4xLTkyLjYgODcuNy05Ni43IC42LTUgMS40LTktNC4yLTE0LjEtNS40LTUtMjkuMi0xOS43LTM1LjgtMjQuMy0xMC45LTcuNi0xNS43LTE1LjMtMTIuMi0yNC42IDIuNS02LjUgOC41LTguOSAxNC45LTguOSAyIDAgNCAuMiA2IC43IDEyIDIuNiAyMy43IDguNiAzMC40IDEwLjIgLjggLjIgMS42IC4zIDIuNSAuMyAzLjYgMCA0LjktMS44IDQuNi01LjktLjgtMTMuMS0yLjYtMzguNy0uNi02Mi42IDIuOC0zMi45IDEzLjQtNDkuMiAyNi02My42IDYuMS02LjkgMzQuNS0zNyA4OC45LTM3UzMzOSA3NC4yIDM0NSA4MS4xYzEyLjYgMTQuNCAyMy4yIDMwLjcgMjYgNjMuNiAyLjEgMjMuOSAuMyA0OS41LS42IDYyLjYtLjMgNC4zIDEgNS45IDQuNiA1LjkgLjggMCAxLjctLjEgMi41LS4zIDYuNy0xLjYgMTguNC03LjYgMzAuNC0xMC4yIDItLjQgNC0uNyA2LS43IDYuNCAwIDEyLjQgMi41IDE0LjkgOC45IDMuNSA5LjQtMS4yIDE3LTEyLjIgMjQuNi02LjYgNC42LTMwLjQgMTkuMy0zNS44IDI0LjMtNS42IDUuMS00LjggOS4xLTQuMiAxNC4yIC41IDQuMiAxMi41IDYwLjQgODcuNyA5Ni43IDQuNCAyLjIgMTEuOSA2LjctMS4zIDE0LjF6Il0KICAgIH07CiAgICBmYVNuYXBjaGF0R2hvc3QgPSBmYVNuYXBjaGF0OwogICAgZmFHYWxhY3RpY1NlbmF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnYWxhY3RpYy1zZW5hdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwZCIsICJNMjQ5LjkgMzMuNWwwIDI2LjFjLTEzLjYgMjAuNi0yMy45IDEwOC42LTI0LjUgMjE1LjMgMTEuNy0xNS42IDE5LjEtMzMuMyAxOS4xLTQ4LjJsMC0xNi45YzAtNS4zIC44LTEwLjUgMi4yLTE1LjYgLjYtMi4xIDEuNC00LjEgMi42LTUuOHMzLjQtMy44IDYuNy0zLjggNS40IDIuMSA2LjcgMy44YzEuMiAxLjggMiAzLjcgMi42IDUuOCAxLjQgNS4xIDIuMiAxMC4zIDIuMiAxNS42bDAgMTYuOWMwIDE0LjkgNy40IDMyLjYgMTkuMSA0OC4yLS42LTEwNi44LTEwLjktMTk0LjctMjQuNS0yMTUuM2wwLTI2LjEtMTIuMyAwek0yMjMuNSAxODEuM2MtOS41IDIuMS0xOC43IDUuMi0yNy41IDkuMSA4LjkgMTYuMSA5LjggMzIuNiAxLjcgMzcuMy04IDQuNi0yMS44LTQuMi0zMS40LTE5LjgtMTEuNiA4LjgtMjEuOSAxOS4zLTMwLjYgMzEuMSAxNC43IDkuNiAyMi45IDIyLjkgMTguMyAzMC43LTQuNSA3LjctMjAgNy4xLTM1LjUtMS01LjggMTMuMi05LjcgMjcuNS0xMS42IDQyLjQgOS43IC4yIDE4LjcgMi40IDI2LjIgNiAxNy44LS4zIDMyLjgtMiA0MC41LTQuMiA1LjYtMjYuNCAyMy00OC4yIDQ2LjMtNTkuNSAuNy0yNS42IDEuOS00OS43IDMuNS03Mi4xem02NSAwYzEuNiAyMi40IDIuNyA0Ni41IDMuNSA3Mi4xIDIzLjMgMTEuMyA0MC44IDMzLjIgNDYuMyA1OS41IDcuNyAyLjMgMjIuNyAzLjkgNDAuNSA0LjIgNy41LTMuNyAxNi41LTUuOCAyNi4yLTYtMS45LTE0LjktNS45LTI5LjItMTEuNy00Mi40LTE1LjQgOC4xLTMwLjkgOC43LTM1LjUgMS00LjYtNy43IDMuNi0yMS4xIDE4LjMtMzAuNy04LjctMTEuOC0xOS0yMi4zLTMwLjYtMzEuMS05LjUgMTUuNi0yMy40IDI0LjQtMzEuNCAxOS44LTguMS00LjYtNy4yLTIxLjIgMS43LTM3LjMtOC44LTMuOS0xOC03LTI3LjQtOS4xek0yNTYgMTg5LjljLTMuMiAwLTUuOSA4LjgtNi4xIDE5LjlsMCAwIDAgMTYuOWMwIDQxLjQtNDkgOTUtOTMuNSA5NS01MiAwLTEyMi44LTEuNC0xNTYuNCAyOS4ybDAgMi41YzkuNCAxNy4xIDIwLjYgMzMuMiAzMy4yIDQ4IDEyLjUtMjEuMSA1MS42LTQxIDEwOC00MS40IDQ1LjcgMSA3OSAyMC4zIDkwLjggNDAuOSAwIDAgMCAwIDAgLjEgNy43IDIuMSAxNS44IDMuMiAyNCAzLjIgOC4yIDAgMTYuNC0xLjEgMjQtMy4yIDAgMCAwIDAgMC0uMSAxMS43LTIwLjUgNDUuMS0zOS44IDkwLjgtNDAuOSA1Ni40IC40IDk1LjUgMjAuMyAxMDggNDEuNCAxMi42LTE0LjggMjMuOC0zMC45IDMzLjItNDhsMC0yLjVjLTMzLjYtMzAuNi0xMDQuNC0yOS4yLTE1Ni40LTI5LjItNDQuNSAwLTkzLjUtNTMuNi05My41LTk1bDAtMTYuOS0uMSAwYy0uMi0xMS4xLTIuOS0xOS45LTYuMS0xOS45em0wIDE3Ny45YTQwLjYgNDAuNiAwIDEgMSAwLTgxLjMgNDAuNiA0MC42IDAgMSAxIDAgODEuM3ptMC03My42YTMzIDMzIDAgMSAwIDAgNjUuOSAzMyAzMyAwIDEgMCAwLTY1Ljl6bTAgNTkuOGEyNi44IDI2LjggMCAxIDEgMC01My42IDI2LjggMjYuOCAwIDEgMSAwIDUzLjZ6bS0xMTQuOCAxM2MtMTAuMiAuMS0yMS42IC40LTMwLjUgMS43IC40IDQuNCAxLjUgMTguNiA3LjEgMjkuOCA5LjEtMi42IDE4LjQtMy45IDI3LjYtMy45IDQxLjMgLjkgNzEuNSAzNC40IDc4LjMgNzQuNWwuMSA0LjdjMTAuNCAxLjkgMjEuMiAyLjkgMzIuMiAyLjkgMTEgMCAyMS44LTEgMzIuMi0yLjlsLjEtNC43YzYuOC00MC4xIDM3LTczLjUgNzguMy03NC41IDkuMyAwIDE4LjUgMS4zIDI3LjYgMy45IDUuNi0xMS4xIDYuNy0yNS4zIDcuMS0yOS44LTguOS0xLjMtMjAuMy0xLjYtMzAuNS0xLjctMTguOCAuNC0zNS4yIDQuMi00OC42IDkuNy0xMi41IDE2LTI5LjIgMzAtNDkuNiAzMy4xLS4xIDAtLjIgMC0uMyAwIDAgMC0uMSAwLS4yIC4xLTUuMiAxLjEtMTAuNiAxLjYtMTYuMiAxLjYtNS41IDAtMTAuOS0uNS0xNi4yLTEuNi0uMSAwLS4xIDAtLjItLjEtLjEgMC0uMiAwLS4zIDAtMjAuNC0zLTM3LTE3LTQ5LjYtMzMuMS0xMy40LTUuNS0yOS45LTkuMi00OC42LTkuN3oiXQogICAgfTsKICAgIGZhUGhvZW5peEZyYW1ld29yayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaG9lbml4LWZyYW1ld29yayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2RjIiwgIk0yMTIuOSAzNDQuM2MzLjgtLjEgMjIuOC0xLjQgMjUuNi0yLjItMi40LTIuNi00My42LTEtNjgtNDkuNi00LjMtOC42LTcuNS0xNy42LTYuNC0yNy42IDIuOS0yNS41IDMyLjktMzAgNTItMTguNSAzNiAyMS42IDYzLjMgOTEuMyAxMTMuNyA5Ny41IDM3IDQuNSA4NC42LTE3IDEwOC4yLTQ1LjQtLjYtLjEtLjgtLjItMS0uMS0uNCAuMS0uOCAuMi0xLjEgLjMtMzMuMyAxMi4xLTk0LjMgOS43LTEzNC43LTE0LjgtMzcuNi0yMi44LTUzLjEtNTguNy01MS44LTc0LjYgMS44LTIxLjMgMjIuOS0yMy4yIDM1LjktMTkuNiAxNC40IDMuOSAyNC40IDE3LjYgMzguOSAyNy40IDE1LjYgMTAuNCAzMi45IDEzLjcgNTEuMyAxMC4zIDE0LjktMi43IDM0LjQtMTIuMyAzNi41LTE0LjUtMS4xLS4xLTEuOC0uMS0yLjUtLjItNi4yLS42LTEyLjQtLjgtMTguNS0xLjctMTExLjItMTYuNS0xMjguOS0xNjMuNi0yNTIuNS0xNzMuMS00NC4zLTMuNC05OS40IDguMS0xMzYuMyAzNS0uOCAuNi0xLjUgMS4yLTIuMiAxLjggLjEgLjIgLjEgLjMgLjIgLjUgLjggMCAxLjYtLjEgMi40LS4yIDYuMy0xIDEyLjUtLjggMTguNyAuMyAyMy44IDQuMyA0Ny43IDIzLjEgNTUuOSA3Ni41IDUuMyAzNC4zLS43IDUwLjggOCA4Ni4xIDE5IDc3LjEgOTEgMTA3LjYgMTI3LjcgMTA2LjR6TTc1LjMgNjQuOWMtLjktMS0uOS0xLjItMS4zLTIgMTIuMS0yLjYgMjQuMi00LjEgMzYuNi00LjgtMS4xIDE0LjctMjIuMiAyMS4zLTM1LjMgNi44ek0yNzIuMiA0MTUuNGMtNDIuOCAxLjItOTItMjYuNy0xMjMuNS02MS40LTQuNi01LTE2LjgtMjAuMi0xOC42LTIzLjRsLjQtLjRjNi42IDQuMSAyNS43IDE4LjYgNTQuOCAyNyAyNC4yIDcgNDguMSA2LjMgNzEuNi0zLjMgMjIuNy05LjMgNDEtLjUgNDMuMSAyLjktMTguNSAzLjgtMjAuMSA0LjQtMjQgNy45LTUuMSA0LjQtNC42IDExLjcgNyAxNy4yIDI2LjIgMTIuNCA2My0yLjggOTcuMiAyNS40IDIuNCAyIDguMSA3LjggMTAuMSAxMC43LS4xIC4yLS4zIC4zLS40IC41LTQuOC0xLjUtMTYuNC03LjUtNDAuMi05LjMtMjQuNy0yLTQ2LjMgNS4zLTc3LjUgNi4yek00NDcgMTYzLjRjMTYuNC01LjIgNDEuMy0xMy40IDY2LjUtMy4zIDE2LjEgNi41IDI2LjIgMTguNyAzMi4xIDM0LjYgMy41IDkuNCA1LjEgMTkuNyA1LjEgMjguNy0uMiAwLS40IDAtLjYgLjEtLjItLjQtLjQtLjktLjUtMS4zLTUtMjItMjkuOS00My44LTY3LjYtMjkuOS01MC4yIDE4LjYtMTMwLjQgOS43LTE3Ni45LTQ4LS43LS45LTIuNC0xLjctMS4zLTMuMiAuMS0uMiAyLjEgLjYgMyAxLjMgMTguMSAxMy40IDM4LjMgMjEuOSA2MC4zIDI2LjIgMzAuNSA2LjEgNTQuNiAyLjkgNzkuOS01LjJ6TTU0OS43IDI4MC45Yy0zMi40IC4yLTMzLjggNTAuMS0xMDMuNiA2NC40LTE4LjIgMy43LTM4LjcgNC42LTQ0LjkgNC4ybDAtLjRjMi44LTEuNSAxNC43LTIuNiAyOS43LTE2LjYgNy45LTcuMyAxNS4zLTE1LjEgMjIuOC0yMi45IDE5LjUtMjAuMiA0MS40LTQyLjIgODEuOS0zOSAyMy4xIDEuOCAyOS4zIDguMiAzNi4xIDEyLjcgLjMgLjIgLjQgLjUgLjcgLjktLjUgMC0uNyAuMS0uOSAwLTctMi43LTE0LjMtMy4zLTIxLjgtMy4zem0tMTIuMy0yNC4xYy0uMSAuMi0uMSAuNC0uMiAuNi0yOC45LTQuNC00OC03LjktNjguNSA0LTE3IDkuOS0zMS40IDIwLjUtNjIgMjQuNC0yNy4xIDMuNC00NS4xIDIuNC02Ni4xLTgtLjMtLjItLjYtLjQtMS0uNiAwLS4yIC4xLS4zIC4xLS41IDI0LjkgMy44IDM2LjQgNS4xIDU1LjUtNS44IDIyLjMtMTIuOSA0MC4xLTI2LjYgNzEuMy0zMSAyOS42LTQuMSA1MS4zIDIuNSA3MC45IDE2Ljl6TTI2OC42IDk3LjNjLS42LS42LTEuMS0xLjItMi4xLTIuMyA3LjYgMCAyOS43LTEuMiA1My40IDguNCAxOS43IDggMzIuMiAyMSA1MC4yIDMyLjkgMTEuMSA3LjMgMjMuNCA5LjMgMzYuNCA4LjEgNC4zLS40IDguNS0xLjIgMTIuOC0xLjcgLjQtLjEgLjkgMCAxLjUgLjMtLjYgLjQtMS4yIC45LTEuOCAxLjItOC4xIDQtMTYuNyA2LjMtMjUuNiA3LjEtMjYuMSAyLjYtNTAuMy0zLjctNzMuNC0xNS40LTE5LjMtOS45LTM2LjQtMjIuOS01MS40LTM4LjZ6TTY0MCAzMzUuN2MtMy41IDMuMS0yMi43IDExLjYtNDIuNyA1LjMtMTIuMy0zLjktMTkuNS0xNC45LTMxLjYtMjQuMS0xMC03LjYtMjAuOS03LjktMjguMS04LjQgLjYtLjggLjktMS4yIDEuMi0xLjQgMTQuOC05LjIgMzAuNS0xMi4yIDQ3LjMtNi41IDEyLjUgNC4yIDE5LjIgMTMuNSAzMC40IDI0LjIgMTAuOCAxMC40IDIxIDkuOSAyMy4xIDEwLjUgLjEtLjEgLjIgMCAuNCAuNHptLTIxMi41IDEzN2MyLjIgMS4yIDEuNiAxLjUgMS41IDItMTguNS0xLjQtMzMuOS03LjYtNDYuOC0yMi4yLTIxLjgtMjQuNy00MS43LTI3LjktNDguNi0yOS43IC41LS4yIC44LS40IDEuMS0uNCAxMy4xIC4xIDI2LjEgLjcgMzguOSAzLjkgMjUuMyA2LjQgMzUgMjUuNCA0MS42IDM1LjMgMy4yIDQuOCA3LjMgOC4zIDEyLjMgMTEuMXoiXQogICAgfTsKICAgIGZhR2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWQzIiwgIk0yMTYuMyAxNTguNGwtNzkuMyAwYy00MC0xMC41LTEzMC41LTcuOC0xMzAuNSA3NC44IDAgMzAuMSAxNSA1MS4yIDM1IDYxLTI1LjEgMjMtMzcgMzMuOC0zNyA0OS4yIDAgMTEgNC41IDIxLjEgMTcuOSAyNi44LTE0LjMgMTMuNC0yMi40IDIzLjEtMjIuNCA0MS40IDAgMzIuMSAyOCA1MC44IDEwMS42IDUwLjggNzAuOCAwIDExMS44LTI2LjQgMTExLjgtNzMuMiAwLTU4LjctNDUuMi01Ni41LTE1MS42LTYzbDEzLjQtMjEuNmMyNy4zIDcuNiAxMTguNyAxMCAxMTguNy02Ny45IDAtMTguNy03LjctMzEuNy0xNS00MS4xbDM3LjQtMi44IDAtMzQuNXpNMTUyLjkgNDAwLjNjMCAzMi4xLTEwNC45IDMyLjEtMTA0LjkgMi40IDAtOC4xIDUuMy0xNSAxMC42LTIxLjUgNzcuNyA1LjMgOTQuMyAzLjQgOTQuMyAxOS4xek0xMDIuMSAyNjUuN2MtNTIuOCAwLTUwLjUtNzEuMiAxLjItNzEuMiA0OS41IDAgNTAuOCA3MS4yLTEuMiA3MS4yek0yMzUuNCAzNjYuMmwwLTMyLjFjMjYuNy0zLjcgMjcuMi0yIDI3LjItMTFsMC0xMTkuNWMwLTguNS0yLjEtNy40LTI3LjItMTYuM2w0LjUtMzIuOSA4NC4yIDAgMCAxNjguN2MwIDYuNSAuNCA3LjMgNi41IDguMWwyMC43IDIuOCAwIDMyLjEtMTE1LjkgMHptNTIuNS0yNDQuM2MtMjMuMiAwLTM2LjYtMTMuNC0zNi42LTM2LjZzMTMuNC0zNS44IDM2LjYtMzUuOGMyMy42IDAgMzcgMTIuNiAzNyAzNS44cy0xMy40IDM2LjYtMzcgMzYuNnpNNTEyIDM1MC41Yy0xNy41IDguNS00My4xIDE2LjMtNjYuMyAxNi4zLTQ4LjQgMC02Ni43LTE5LjUtNjYuNy02NS41bDAtMTA2LjVjMC01LjQgMS00LjEtMzEuNy00LjFsMC0zNi4yYzM1LjgtNC4xIDUwLTIyIDU0LjUtNjYuM2wzOC42IDBjMCA2NS44LTEuMyA2MS44IDMuMyA2MS44bDU3LjMgMCAwIDQwLjYtNjAuNiAwIDAgOTcuMWMwIDYuOS00LjkgNTEuNCA2MC42IDI2LjhsMTEgMzUuOHoiXQogICAgfTsKICAgIGZhT3B0aW5Nb25zdGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wdGluLW1vbnN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIzYyIsICJNNTcyLjggNDIxLjRjNS42LTkuNSA0LjctMTUuMi01LjQtMTEuNi0zLTQuOS03LTkuNS0xMS4xLTEzLjggMi45LTkuNy0uNy0xNC4yLTEwLjgtOS4yLTQuNi0zLjItMTAuMy02LjUtMTUuOS05LjIgMC0xNS4xLTExLjYtMTEuNi0xNy42LTUuNy0xMC40LTEuNS0xOC43LS4zLTI2LjggNS43IC4zLTYuNSAuMy0xMyAuMy0xOS43IDEyLjYgMCA0MC4yLTExIDQ1LjktMzYuMiAxLjQtNi44IDEuNi0xMy44LS4zLTIxLjktMy0xMy41LTE0LjMtMjEuMy0yNS4xLTI1LjctLjgtNS45LTcuNi0xNC4zLTE0LjktMTUuOXMtMTIuNCA0LjktMTQuMSAxMC4zYy04LjUgMC0xOS4yIDIuOC0yMS4xIDguNC01LjQtLjUtMTEuMS0xLjQtMTYuOC0xLjkgMi43LTEuOSA1LjQtMy41IDguNC00LjYgNS40LTkuMiAxNC42LTExLjQgMjUuNy0xMS42bDAtMi44YzE5LjUtLjUgNDMtNS45IDUzLjgtMTguMSAxMi43LTEzLjggMTQuNi0zNy4zIDEyLjQtNTUuMS0yLjQtMTcuMy05LjctMzcuNi0yNC42LTQ4LjEtOC40LTUuOS0yMS42LS44LTIyLjcgOS41LTIuMiAxOS42IDEuMiAzMC0zOC42IDI1LjEtMTAuMy0yMy44LTI0LjYtNDQuNi00Mi43LTYwLTY5LjYtNTkuNy0xNjcuNy01My44LTI0NC4yLTM3LjYgMTkuNyA0LjYgNDEuMSA4LjYgNTkuNyAxNi41LTI2LjIgMi40LTUyLjcgMTEuMy03Ni4yIDIzLjItMzIuOCAxNy00NCAyOS45LTU2LjcgNDIuNCAxNC45LTIuMiAyOC45LTUuMSA0My44LTMuOC05LjcgNS40LTE4LjQgMTIuMi0yNi41IDIwLTI1LjggLjktMjMuOC01LjMtMjYuMi0yNS45LTEuMS0xMC41LTE0LjMtMTUuNC0yMi43LTkuNy0yOC4xIDE5LjktMzMuNSA3OS45LTEyLjIgMTAzLjUgMTAuOCAxMi4yIDM1LjEgMTcuMyA1NC45IDE3LjgtLjMgMS4xLS4zIDEuOS0uMyAyLjcgMTAuOCAuNSAxOS41IDIuNyAyNC42IDExLjYgMyAxLjEgNS43IDIuNyA4LjEgNC42LTUuNCAuNS0xMS4xIDEuNC0xNi41IDEuOS0zLjMtNi42LTEzLjctOC4xLTIxLjEtOC4xLTEuNi01LjctNi41LTEyLjItMTQuMS0xMC4zLTYuOCAxLjktMTQuMSAxMC0xNC45IDE1LjktMjIuNSA5LjUtMzAuMSAyNi44LTI1LjEgNDcuNiA1LjMgMjQuOCAzMyAzNi4yIDQ1LjkgMzYuMmwwIDE5LjdjLTYuNi01LTE0LjMtNy41LTI2LjgtNS43LTUuNS01LjUtMTcuMy0xMC4xLTE3LjMgNS43LTUuOSAyLjctMTEuNCA1LjktMTUuOSA5LjItOS44LTQuOS0xMy42LTEuNy0xMS4xIDkuMi00LjEgNC4zLTcuOCA4LjYtMTEuMSAxMy44LTEwLjItMy43LTExIDIuMi01LjQgMTEuNi0xLjEgMy41LTEuNiA3LTEuOSAxMC44LS41IDMxLjYgNDQuNiA2NCA3My41IDY1LjEgMTcuMyAuNSAzNC42LTguNCA0My0yMy41IDExMy4yIDQuOSAyMjYuNyA0LjEgMzQwLjIgMCA4LjEgMTUuMSAyNS40IDI0LjMgNDIuNyAyMy41IDI5LjItMS4xIDc0LjMtMzMuNSA3My41LTY1LjEgLjItMy43LS43LTcuMi0xLjctMTAuN3pNNDk5IDE2Ny40YzEuMS0zIDIuNC04LjQgMi40LTE0LjYgMC01LjkgNi44LTguMSAxNC4xLS44IDExLjEgMTEuNiAxNC45IDQwLjUgMTMuOCA1MS4xLTQuMS0xMy42LTEzLTI5LTMwLjMtMzUuN3ptLTQuNiA2LjdjMTkuNSA2LjIgMjguNiAyNy42IDI5LjcgNDguOS0xLjEgMi43LTMgNS40LTQuOSA3LjYtNS43IDUuOS0xNS40IDEwLTI2LjIgMTIuMiA0LjMtMjEuMyAuMy00Ny4zLTEyLjctNjMgNC45LS44IDEwLjktMi40IDE0LjEtNS43em0tMjQuMSA2LjhjMTMuOCAxMS45IDIwIDM5LjIgMTQuMSA2My41LTQuMSAuNS04LjEgLjgtMTEuNiAuOC0xLjktMjEuOS02LjgtNDQtMTQuMy02NC42IDMuNyAuMyA4LjEgLjMgMTEuOCAuM3pNNDcuNyAyMDNjLTEuMS0xMC41IDIuNC0zOS41IDEzLjgtNTEuMSA3LTcuMyAxNC4xLTUuMSAxNC4xIC44IDAgNi4yIDEuNCAxMS42IDIuNCAxNC42LTE3LjMgNi44LTI2LjIgMjIuMi0zMC4zIDM1Ljd6bTkuNyAyNy42Yy0xLjktMi4yLTMuNS00LjktNC45LTcuNiAxLjQtMjEuMyAxMC4zLTQyLjcgMjkuNy00OC45IDMuMiAzLjIgOS4yIDQuOSAxNC4xIDUuNy0xMyAxNS43LTE3IDQxLjYtMTIuNyA2My0xMC44LTIuMi0yMC41LTYtMjYuMi0xMi4yem00Ny45IDE0LjZjLTQuMSAwLTguMS0uMy0xMi43LS44LTQuNi0xOC42LTEuOS0zOC45IDUuNC01M2wwIC4zIDEyLjItNS4xYzQuOS0xLjkgOS43LTMuOCAxNC45LTQuOS0xMC43IDE5LjctMTcuNCA0MS4zLTE5LjggNjMuNXptMTg0LTEwLjVhNzYuMSA3Ni4xIDAgMSAxIDAtMTUyLjIgNzYuMSA3Ni4xIDAgMSAxIDAgMTUyLjJ6bTExNS42IDIyLjFjLS4zIDE3LjgtNyA0OC45LTIzIDU3LTEzLjIgNi42LTYuNS03LjUtMTYuNS01OC4xIDEzLjMgLjMgMjYuNiAuMyAzOS41IDEuMXptLTU0LTEuNmMuOCA0LjkgMy44IDQwLjMtMS42IDQxLjktMTEuNiAzLjUtNDAgNC4zLTUxLjEtMS4xLTQuMS0zLTQuNi0zNS45LTQuMy00MS4xbDAgLjNjMTguOS0uMyAzOC4xLS4zIDU3IDB6TTI3OC41IDMwOWMtMTMgMy41LTQxLjYgNC4xLTU0LjYtMS42LTYuNS0yLjctMy44LTQyLjQtMS45LTUxLjYgMTkuMi0uNSAzOC40LS41IDU3LjgtLjhsMCAuM2MxLjEgOC4zIDMuMyA1MS4yLTEuMyA1My43ek0xNzIgMjU3LjljMTIuMi0uOCAyNC42LTEuNCAzNi44LTEuNi0yLjQgMTUuNC0zIDQzLjUtNC45IDUyLjItMS4xIDYuOC00LjMgNi44LTkuNyA0LjMtMjEuOS05LjgtMjcuNi0zNS4yLTIyLjItNTQuOXptLTM1LjQgMzEuM2M3LjgtMS4xIDE1LjctMS45IDIzLjUtMi43IDEuNiA2LjIgMy44IDExLjkgNyAxNy42IDEwIDE3IDQ0IDM1LjcgNDUuMSA3IDYuMiAxNC45IDQwLjggMTIuMiA1NC45IDEwLjggMTUuNy0xLjQgMjMuOC0xLjQgMjYuOC0xNC4zIDEyLjQgNC4zIDMwLjggNC4xIDQ0IDMgMTEuMy0uOCAyMC44LS41IDI0LjYtOC45IDEuMSA1LjEgMS45IDExLjYgNC42IDE2LjggMTAuOCAyMS4zIDM3LjMgMS40IDQ2LjgtMzEuNiA4LjYgLjggMTcuNiAxLjkgMjYuNSAyLjctLjQgMS4zLTMuOCA3LjMgNy4zIDExLjYtNDcuNiA0Ny05NS43IDg3LjgtMTYzLjIgMTA3LTYzLjItMjAuOC0xMTIuMS01OS41LTE1NS45LTEwNi41IDkuNi0zLjQgMTAuNC04LjggOC0xMi41ek0xMTUgNDYxLjdjLTMuOCAxNy44LTIxLjkgMjkuNy0zOS43IDI4LjktMTkuMi0uOC00Ni41LTE3LTU5LjItMzYuNS0yLjctMzEuMSA0My44LTYxLjMgNjYuMi01NC42IDE0LjkgNC4zIDI3LjggMzAuOCAzMy41IDU0IDAgMy0uMyA1LjctLjggOC4yem0tOC43LTY2Yy0uNS0xMy41LS41LTI3LS4zLTQwLjVsLjMgMGMyLjctMS42IDUuNy0zLjggNy44LTYuNSA2LjUtMS42IDEzLTUuMSAxNS4xLTkuMiAzLjMtNy4xLTctNy41LTUuNC0xMi40IDIuNy0xLjEgNS43LTIuMiA3LjgtMy41IDI5LjIgMjkuMiA1OC42IDU2LjUgOTcuMyA3Ny0zNi44IDExLjMtNzIuNCAyNy42LTEwNS45IDQ3LTEuMi0xOC42LTcuNy0zNS45LTE2LjctNTEuOXptMzM3LjYgNjQuNmMtMTAzIDMuNS0yMDYuMiA0LjEtMzA5LjQgMCAwIC4zIDAgLjMtLjMgLjNsMC0uMyAuMyAwYzM1LjEtMjEuNiA3Mi4yLTM5LjIgMTEyLjQtNTAuOCAxMS42IDUuMSAyMyA5LjUgMzQuOSAxMy4yIDIuMiAuOCAyLjIgLjggNC4zIDAgMTQuMy00LjEgMjguNC05LjIgNDIuMi0xNS40IDQxLjUgMTEuNyA3OC44IDMxLjcgMTE1LjYgNTN6bTEwLjUtMTIuNGMtMzUuOS0xOS41LTczLTM1LjktMTExLjktNDcuNiAzOC4xLTIwIDcxLjktNDcuMyAxMDMuNS03Ni43IDIuMiAxLjQgNC42IDIuNCA3LjYgMy4yIDAgLjggLjMgMS45IC41IDIuNC00LjYgMi43LTcuOCA2LjItNS45IDEwLjMgMi4yIDMuOCA4LjYgNy42IDE1LjEgOC45IDIuNCAyLjcgNS4xIDUuMSA4LjEgNi44IDAgMTMuOC0uMyAyNy42LS44IDQxLjNsLjMtLjNjLTkuMyAxNS45LTE1LjUgMzctMTYuNSA1MS43em0xMDUuOSA2LjJjLTEyLjcgMTkuNS00MCAzNS43LTU5LjIgMzYuNS0xOS4zIC45LTQwLjUtMTMuMi00MC41LTM3IDUuNy0yMy4yIDE4LjktNDkuNyAzMy41LTU0IDIyLjctNi45IDY5LjIgMjMuNCA2Ni4yIDU0LjV6TTM3My4xIDc1LjJjLTMuOC03Mi4xLTEwMC44LTc5LjctMTI2LTIzLjUgNDQuNi0yNC4zIDkwLjMtMTUuNyAxMjYgMjMuNXpNNzUgNDA3LjFjLTE1LjcgMS42LTQ5LjUgMjUuNC00OS41IDQzLjIgMCAxMS42IDE1LjcgMTkuNSAzMi4yIDE0LjkgMTIuMi0zLjIgMzEuMS0xNy42IDM1LjktMjcuMyA2LTExLjYtMy43LTMyLjctMTguNi0zMC44ek0yOTAuOSAyMzAuOWMyOC42IDAgNTEuOS0yMS42IDUxLjktNDguNCAwLTM2LjEtNDAuNS01OC4xLTcyLjItNDQuMyA5LjUgMyAxNi41IDExLjYgMTYuNSAyMS42IDAgMjMuMy0zMy4zIDMyLTQ2LjUgMTEuMy03LjMgMzQuMSAxOS40IDU5LjggNTAuMyA1OS44ek02OC4yIDQ3NC4xYy41IDYuNSAxMi4yIDEyLjcgMjEuNiA5LjUgNi44LTIuNyAxNC42LTEwLjUgMTcuMy0xNi4yIDMtNy0xLjEtMjAtOS43LTE4LjQtOC45IDEuNi0yOS43IDE2LjctMjkuMiAyNS4xem00MzMuMi02N2MtMTQuOS0xLjktMjQuNiAxOS4yLTE4LjkgMzAuOCA0LjkgOS43IDI0LjEgMjQuMSAzNi4yIDI3LjMgMTYuNSA0LjYgMzIuMi0zLjIgMzIuMi0xNC45IDAtMTcuOC0zMy44LTQxLjYtNDkuNS00My4yek00NzkgNDQ5Yy04LjQtMS42LTEyLjQgMTEuMy05LjUgMTguNCAyLjQgNS43IDEwLjMgMTMuNSAxNy4zIDE2LjIgOS4yIDMuMiAyMS4xLTMgMjEuMy05LjUgLjktOC40LTIwLjItMjMuNS0yOS4xLTI1LjF6Il0KICAgIH07CiAgICBmYUplbmtpbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamVua2lucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2I2IiwgIk00NTUuNCA0MjVjLTEuNC0xMS4yLTE5LTIzLjEtMjguMi0zMS45LTUuMS01LTI5LTIzLjEtMzAuNC0yOS45LTEuNC02LjYgOS43LTIxLjUgMTMuMy0yOC45IDUuMS0xMC43IDguOC0yMy43IDExLjMtMzIuNiAxOC44LTY2LjEgMjAuNy0xNTYuOS02LjItMjExLjItMTAuMi0yMC42LTM4LjYtNDktNTYuNC02Mi41LTQyLTMxLjctMTE5LjYtMzUuMy0xNzAuMS0xNi42LTE0LjEgNS4yLTI3LjggOS44LTQwLjEgMTcuMS0zMy4xIDE5LjQtNjguMyAzMi41LTc4LjEgNzEuNi0yNC4yIDEwLjgtMzEuNSA0MS44LTMwLjMgNzcuOCAuMiA3IDQuMSAxNS44IDIuNyAyMi40LS43IDMuMy01LjIgNy42LTYuMSA5LjgtMTEuNiAyNy43LTIuMyA2NCAxMS4xIDgzLjcgOC4xIDExLjkgMjEuNSAyMi40IDM5LjIgMjUuMiAuNyAxMC42IDMuMyAxOS43IDguMiAzMC40IDMuMSA2LjggMTQuNyAxOSAxMC40IDI3LjctMi4yIDQuNC0yMSAxMy44LTI3LjMgMTcuNi0yMS4xIDEyLjUtMzYuNCAyMC4zLTU1LjkgMzQuMy0xMi42IDktMzIuMyAxMC4yLTI5LjIgMzEuMSAyLjEgMTQuMSAxMC4xIDMxLjYgMTQuNyA0NS44IC43IDIgMS40IDQuMSAyLjEgNmw0MjIgMGM0LjktMTUuMyA5LjctMzAuOSAxNC42LTQ3LjIgMy40LTExLjQgMTAuMi0yNy44IDguNy0zOS43ek0xNzQuMiAzMy43YzEuOC0uNSAzLjQgLjcgNC45IDIuNC0uMiA1LjItNS40IDUuMS04LjkgNi44LTUuNCA2LjctMTMuNCA5LjgtMjAgMTcuMi02LjggNy41LTE0LjQgMjcuNy0yMy40IDMwLTQuNSAxLjEtOS43LS44LTEzLjYtLjUtMTAuNCAuNy0xNy43IDYtMjguMyA3LjUgMTMuNi0yOS45IDU2LjEtNTQgODkuMy02My40ek02OS40IDEyNy4zYzEzLjUtMTQuOSAzMi4xLTI0LjEgNTQuOC0yNS45IDExLjcgMjkuNy04LjQgNjUtLjkgOTcuNiAyLjMgOS45IDEwLjIgMjUuNC0yLjQgMjUuNyAuMy0yOC4zLTM0LjgtNDYuMy02MS4zLTI5LjYtMS44LTIxLjUtNC45LTUxLjcgOS44LTY3Ljh6bTM2LjcgMjAwLjJjLTEtNC4xLTIuNy0xMi45LTIuMy0xNS4xIDEuNi04LjcgMTcuMS0xMi41IDExLTI0LjctMTEuMy0uMS0xMy44IDEwLjItMjQuMSAxMS4zLTI2LjcgMi42LTQ1LjYtMzUuNC00NC40LTU4LjQgMS0xOS41IDE3LjYtMzguMiA0MC4xLTM1LjggMTYgMS44IDIxLjQgMTkuMiAyNC41IDM0LjcgOS4yIC41IDIyLjUtLjQgMjYuOS03LjYtLjYtMTcuNS04LjgtMzEuNi04LjItNDcuNyAxLTMwLjMgMTcuNS01Ny42IDQuOC04Ny40IDEzLjYtMzAuOSA1My41LTU1LjMgODMuMS03MCAzNi42LTE4LjMgOTQuOS0zLjcgMTI5LjMgMTUuOCAxOS43IDExLjEgMzQuNCAzMi43IDQ4LjMgNTAuNy0xOS41LTUuOC0zNi4xIDQuMi0zMy4xIDIwLjMgMTYuMy0xNC45IDQ0LjItLjIgNTIuNSAxNi40IDcuOSAxNS44IDcuOCAzOS4zIDkgNjIuOCAyLjkgNTctMTAuNCAxMTUuOS0zOS4xIDE1Ny4xLTcuNyAxMS0xNC4xIDIzLTI0LjkgMzAuNi0yNiAxOC4yLTY1LjQgMzQuNy05OS4yIDIzLjQtNDQuNy0xNS02NS00NC44LTg5LjUtNzguOCAuNyAxOC43IDEzLjggMzQuMSAyNi44IDQ4LjQgMTEuMyAxMi41IDI1IDI2LjYgMzkuNyAzMi40LTEyLjMtMi45LTMxLjEtMy44LTM2LjIgNy4yLTI4LjYtMS45LTU1LjEtNC44LTY4LjctMjQuMi0xMC42LTE1LjQtMjEuNC00MS40LTI2LjMtNjEuNHptMjIyIDEyNC4xYzQuMS0zIDExLjEtMi45IDE3LjQtMy42LTUuNC0yLjctMTMtMy43LTE5LjMtMi4yLS4xLTQuMi0yLTYuOC0zLjItMTAuMiAxMC42LTMuOCAzNS41LTI4LjUgNDkuNi0yMC4zIDYuNyAzLjkgOS41IDI2LjIgMTAuMSAzNyAuNCA5LS44IDE4LTQuNSAyMi44LTE4LjgtLjYtMzUuOC0yLjgtNTAuNy03IC45LTYuMS0xLTEyLjEgLjYtMTYuNXptLTE3LjItMjBjLTE2LjggLjgtMjYtMS4yLTM4LjMtMTAuOCAuMi0uOCAxLjQtLjUgMS41LTEuNCAxOCA4IDQwLjgtMy4zIDU5LTQuOS03LjkgNS4xLTE0LjYgMTEuNi0yMi4yIDE3LjF6bS0xMi4xIDMzLjJjLTEuNi05LjQtMy41LTEyLTIuOC0yMC4yIDI1LTE2LjYgMjkuNyAyOC42IDIuOCAyMC4yek0xOTQuMyA0MzguNmMtMTEuNi0uNy00OC4xLTE0LTM4LjUtMjMuNyA5LjQgNi41IDI3LjUgNC45IDQxLjMgNy4zIC44IDQuNC0yLjggMTAuMi0yLjggMTYuNHpNMjYgNDk3LjFjLTQuMy0xMi43LTkuMi0yNS4xLTE0LjgtMzYuOSAzMC44LTIzLjggNjUuMy00OC45IDEwMi4yLTYzLjUgMi44LTEuMSAyMy4yIDI1LjQgMjYuMiAyNy42IDE2LjUgMTEuNyAzNyAyMSA1Ni4yIDMwLjIgMS4yIDguOCAzLjkgMjAuMiA4LjcgMzUuNSAuNyAyLjMgMS40IDQuNyAyLjIgNy4ybC0xODAuNyAwIDAtLjF6bTI0MC42IDUuN2wtLjggMGMuMy0uMiAuNS0uNCAuOC0uNWwwIC41em03LjUtNS43YzIuMS0xLjQgNC4zLTIuOCA2LjQtNC4zIDEuMSAxLjQgMi4yIDIuOCAzLjIgNC4zbC05LjYgMHptMTUuMS0yNC43Yy0xMC44IDcuMy0yMC42IDE4LjMtMzMuMyAyNS4yLTYgMy4zLTI3IDExLjctMzMuNCAxMC4yLTMuNi0uOC0zLjktNS4zLTUuNC05LjUtMy4xLTktMTAuMS0yMy40LTEwLjgtMzctLjgtMTcuMi0yLjUtNDYgMTYtNDIuNCAxNC45IDIuOSAzMi4zIDkuNyA0My45IDE2LjEgNy4xIDMuOSAxMS4xIDguNiAyMS45IDkuNS0uMSAxLjQtLjEgMi44LS4yIDQuMy01LjkgMy45LTE1LjMgMy44LTIxLjggNy4xIDkuNSAuNCAxNyAyLjcgMjMuNSA1LjktLjEgMy40LS4zIDctLjQgMTAuNnptNTMuNCAyNC43bC0xNCAwYy0uMS0zLjItMi44LTUuOC02LjEtNS44cy01LjkgMi42LTYuMSA1LjhsLTE3LjQgMGMtMi44LTQuNC01LjctOC42LTguOS0xMi41IDIuMS0yLjIgNC00LjcgNi02LjkgOSAzLjcgMTQuOC00LjkgMjEuNy00LjIgNy45IC44IDE0LjIgMTEuNyAyNS40IDExbC0uNiAxMi42em04LjcgMGMuMi00IC40LTcuOCAuNi0xMS41IDE1LjYtNy4zIDI5IDEuMyAzNS43IDExLjVsLTM2LjMgMHptODMuNC0zN2MtMi4zIDExLjItNS44IDI0LTkuOSAzNy4xLS4yLS4xLS40LS4xLS42LS4xbC0yNy45IDBjLjYtMS4xIDEuMi0yLjIgMS45LTMuMy0yLjYtNi4xLTktOC43LTEwLjktMTUuNSAxMi4xLTIyLjcgNi41LTkzLjQtMjQuMi03OC41IDQuMy02LjMgMTUuNi0xMS41IDIwLjgtMTkuMyAxMyAxMC40IDIwLjggMjAuMyAzMy4yIDMxLjQgNi44IDYgMjAgMTMuMyAyMS40IDIzLjEgLjggNS41LTIuNiAxOC45LTMuOCAyNS4xek0xOTAuNSAxMzAuNWM1LjQtMTQuOSAyNy4yLTM0LjcgNDUtMzIgNy43IDEuMiAxOCA4LjIgMTIuMiAxNy43LTMwLjItNy00NS4yIDEyLjYtNTQuNCAzMy4xLTguMS0yLTQuOS0xMy4xLTIuOC0xOC44em0xODQuMSA2My4xYzguMi0zLjYgMjIuNC0uNyAyOS42LTUuMy00LjItMTEuNS0xMC4zLTIxLjQtOS4zLTM3LjcgLjUgMCAxIDAgMS40IC4xIDYuOCAxNC4yIDEyLjcgMjkuMiAyMS40IDQxLjctNS43IDEzLjUtNDMuNiAyNS40LTQzLjEgMS4yem0tOTYuOCAyLjdjLTYuOC0xMC45LTE5LTMyLjUtMTQuNS00NS4zIDYuNSAxMS45IDguNiAyNC40IDE3LjggMzMuMyA0LjEgNCAxMi4yIDkgOC4yIDIwLjItLjkgMi43LTcuOCA4LjYtMTEuNyA5LjctMTQuNCA0LjMtNDcuOSAuOS0zNi42LTE3LjEgMTEuOSAuNyAyNy45IDcuOCAzNi44LS44em0yNy4zIDcwYzMuOCA2LjYgMS40IDE4LjcgMTIuMSAyMC42IDIwLjIgMy40IDQzLjYtMTIuMyA1OC4xLTE3LjggOS0xNS4yLS44LTIwLjctOC45LTMwLjUtMTYuNi0yMC0zOC44LTQ0LjgtMzgtNzQuNyA2LjctNC45IDcuMyA3LjQgOC4yIDkuNyA4LjcgMjAuMyAzMC40IDQ2LjIgNDYuMyA2My41IDMuOSA0LjMgMTAuMyA4LjQgMTEgMTEuMiAyLjEgOC4yLTUuNCAxOC00LjUgMjMuNS0yMS43IDEzLjktNDUuOCAyOS4xLTgxLjQgMjUuNi03LjQtNi43LTEwLjMtMjEuNC0yLjktMzEuMXptLTIwMS4zLTkuMmMtNi44LTMuOS04LjQtMjEtMTYuNC0yMS40LTExLjQtLjctOS4zIDIyLjItOS4zIDM1LjUtNy44LTcuMS05LjItMjkuMS0zLjUtNDAuMy02LjYtMy4yLTkuNSAzLjYtMTMuMSA1LjkgNC43LTM0LjEgNDkuOC0xNS44IDQyLjMgMjAuM3ptMjk5LjYgMjguOGMtMTAuMSAxOS4yLTI0LjQgNDAuNC01NCA0MS0uNi02LjItMS4xLTE1LjYgMC0xOS40IDIyLjctMi4yIDM2LjYtMTMuNyA1NC0yMS42ek0yNjEuNSAyOTguM2MxOC45IDkuOSA1My42IDExIDc5LjMgMTAuMiAxLjQgNS42IDEuMyAxMi42IDEuNCAxOS40LTMzIDEuOC03Mi02LjQtODAuNy0yOS42ek0zNTMuNyAzNDVjLTEuNyA0LjMtNS4zIDkuMy05LjggMTEuMS0xMi4xIDQuOS00NS42IDguNy02Mi40LS4zLTEwLjctNS43LTE3LjUtMTguNS0yMy40LTI2LTIuOC0zLjYtMTYuOS0xMi45LS4yLTEyLjkgMTMuMSAzMi43IDU4IDI5IDk1LjggMjguMXoiXQogICAgfTsKICAgIGZhU2xpZGVzaGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzbGlkZXNoYXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZTciLCAiTTE4Ny45IDE1My43Yy0zNCAwLTYxLjcgMjUuNy02MS43IDU3LjcgMCAzMS43IDI3LjcgNTcuNyA2MS43IDU3LjdzNjEuNy0yNiA2MS43LTU3LjdjMC0zMi0yNy43LTU3LjctNjEuNy01Ny43em0xNDMuNCAwYy0zNCAwLTYxLjcgMjUuNy02MS43IDU3LjcgMCAzMS43IDI3LjcgNTcuNyA2MS43IDU3LjcgMzQuMyAwIDYxLjctMjYgNjEuNy01Ny43IC4xLTMyLTI3LjQtNTcuNy02MS43LTU3Ljd6bTE1Ni42IDkwbC02IDQuMyAwLTE5OC4zYzAtMjcuNC0yMC42LTQ5LjctNDYtNDkuN0w3Ni44IDBjLTI1LjQgMC00NiAyMi4zLTQ2IDQ5LjdsMCAxOTguM2MtMi0xLjQtNC4zLTIuOS02LjMtNC4zLTE1LjEtMTAuNi0yNS4xIDQtMTYgMTcuNyAxOC4zIDIyLjYgNTMuMSA1MC4zIDEwNi4zIDcyLTU2LjMgMTkxLjcgMTM3LjQgMjIyLjMgMTM0LjMgMTI0LjEgMC0uNyAuMy01Ni42IC4zLTk2LjYgNS4xIDEuMSA5LjQgMi4zIDEzLjcgMy4xIDAgMzkuNyAuMyA5Mi44IC4zIDkzLjUtMy4xIDk4LjMgMTkwLjYgNjcuNyAxMzQuMy0xMjQgNTMuMS0yMS43IDg4LTQ5LjQgMTA2LjMtNzIgOS4xLTEzLjgtLjktMjguMy0xNi4xLTE3Ljh6bS0zMC41IDE5LjJjLTY4LjkgMzcuNC0xMjguMyAzMS4xLTE2MC42IDI5LjctMjMuNy0uOS0zMi42IDkuMS0zMy43IDI0LjktMTAuMy03LjctMTguNi0xNS41LTIwLjMtMTcuMS01LjEtNS40LTEzLjctOC0yNy4xLTcuNy0zMS43IDEuMS04OS43IDcuNC0xNTcuNC0yOGwwLTE5Mi40YzAtMzQuOSA4LjktNDUuNyA0MC42LTQ1LjdsMzE3LjcgMGMzMC4zIDAgNDAuOSAxMi45IDQwLjkgNDUuN2wwIDE5MC42LS4xIDB6Il0KICAgIH07CiAgICBmYVViZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidWJlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDAyIiwgIk00MTQuMSAzMkwzMy45IDMyQzE1LjIgMzIgMCA0Ny4yIDAgNjUuOUwwIDQ0NmMwIDE4LjggMTUuMiAzNCAzMy45IDM0TDQxNCA0ODBjMTguNyAwIDMzLjktMTUuMiAzMy45LTMzLjlsMC0zODAuMkM0NDggNDcuMiA0MzIuOCAzMiA0MTQuMSAzMnpNMjM3LjYgMzkxLjFDMTYzIDM5OC42IDk2LjQgMzQ0LjIgODguOSAyNjkuNmw5NC40IDAgMCAyMC40YzAgMy43IDMgNi44IDYuOCA2LjhsNjcuOSAwYzMuNyAwIDYuOC0zIDYuOC02LjhsMC02Ny45YzAtMy43LTMtNi44LTYuOC02LjhsLTY3LjkgMGMtMy43IDAtNi44IDMtNi44IDYuOGwwIDIwLjQtOTQuNCAwYzctNjkuNCA2NS40LTEyMi4yIDEzNS4xLTEyMi4yczEyOC4xIDUyLjggMTM1LjEgMTIyLjJjNy41IDc0LjUtNDYuOSAxNDEuMS0xMjEuNSAxNDguNnoiXQogICAgfTsKICAgIGZhRGlnaXRhbE9jZWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpZ2l0YWwtb2NlYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM5MSIsICJNODcgNDgxLjhsNzMuNyAwIDAtNzMuNi03My43IDAgMCA3My42ek0yNS40IDM0Ni42bDAgNjEuNiA2MS42IDAgMC02MS42LTYxLjYgMHpNNDkxLjYgMTc2LjlDNDY4LjYgMTAyLjcgNDA5LjIgNDMuNiAzMzUgMjAuMyAxNjQuOS0zMi44IDggOTMuNyA4IDI1NS45bDk1LjggMGMwLTEwMS44IDEwMS0xODAuNSAyMDguMS0xNDEuNyAzOS43IDE0LjMgNzEuNSA0Ni4xIDg1LjggODUuNyAzOS4xIDEwNy0zOS43IDIwNy44LTE0MS40IDIwOGwwIC4zLS4zIDAgMCA5NS44YzE2Mi42IDAgMjg4LjgtMTU2LjggMjM1LjYtMzI3LjF6bS0yMzUuMyAyMzFsMC05NS4zLTk1LjYgMCAwIDk1LjYgOTUuMyAwIDAtLjMgLjMgMHoiXQogICAgfTsKICAgIGZhU291bmRjbG91ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzb3VuZGNsb3VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYxYmUiLCAiTTY0MC4yIDI5OC42Yy0xLjMgMjMuMS0xMS41IDQ0LjgtMjguNCA2MC41cy0zOS4yIDI0LjQtNjIuMyAyNC4xbC0yMTggMGMtNC44IDAtOS40LTItMTIuOC01LjRzLTUuMy04LTUuMy0xMi44bDAtMjM0LjhjLS4yLTQgLjktOCAzLjEtMTEuNHM1LjMtNi4xIDktNy43YzAgMCAyMC4xLTEzLjkgNjIuMy0xMy45IDI1LjggMCA1MS4xIDYuOSA3My4zIDIwLjEgMTcuMyAxMC4yIDMyLjMgMjMuOCA0NC4xIDQwLjFzMjAgMzQuOCAyNC4yIDU0LjRjNy41LTIuMSAxNS4zLTMuMiAyMy4xLTMuMiAxMS43LS4xIDIzLjMgMi4yIDM0LjIgNi43czIwLjUgMTEuMyAyOC43IDE5LjcgMTQuNiAxOC4zIDE4LjkgMjkuMyA2LjMgMjIuNiA1LjkgMzQuM3ptLTM1NC0xNTMuNWMuMS0xIDAtMi0uMy0yLjlzLS44LTEuOC0xLjUtMi42LTEuNS0xLjMtMi40LTEuN2MtMS44LS44LTQtLjgtNS44IDAtLjkgLjQtMS43IDEtMi40IDEuN3MtMS4yIDEuNi0xLjUgMi42LS40IDEuOS0uMyAyLjljLTYgNzguOS0xMC42IDE1Mi45IDAgMjMxLjYgLjIgMS43IDEgMy4zIDIuMyA0LjUgMi42IDIuNCA2LjggMi40IDkuNCAwIDEuMy0xLjIgMi4xLTIuOCAyLjMtNC41IDExLjMtNzkuNCA2LjYtMTUyIDAtMjMxLjZsLjIgMHptLTQ0IDI3LjNjLS4yLTEuOC0xLjEtMy41LTIuNC00LjdzLTMuMS0xLjktNS0xLjktMy42IC43LTUgMS45LTIuMiAyLjktMi40IDQuN2MtNy45IDY3LjktNy45IDEzNi41IDAgMjA0LjQgLjMgMS44IDEuMiAzLjQgMi41IDQuNXMzLjEgMS44IDQuOCAxLjggMy41LS42IDQuOC0xLjggMi4yLTIuOCAyLjUtNC41YzguOC02Ny44IDguOC0xMzYuNSAuMS0yMDQuNGwuMSAwem0tNDQuMy02LjljLS4yLTEuOC0xLTMuNC0yLjMtNC42cy0zLTEuOC00LjgtMS44LTMuNSAuNy00LjggMS44LTIuMSAyLjgtMi4zIDQuNmMtNi43IDcyLTEwLjIgMTM5LjMgMCAyMTEuMSAwIDEuOSAuNyAzLjcgMi4xIDVzMy4xIDIuMSA1IDIuMSAzLjctLjcgNS0yLjEgMi4xLTMuMSAyLjEtNWMxMC41LTcyLjggNy4zLTEzOC4yIC4xLTIxMS4xbC0uMSAwem0tNDQgMjAuNmMwLTEuOS0uOC0zLjgtMi4xLTUuMnMtMy4yLTIuMS01LjItMi4xLTMuOCAuOC01LjIgMi4xLTIuMSAzLjItMi4xIDUuMmMtOC4xIDYzLjMtOC4xIDEyNy41IDAgMTkwLjggLjIgMS44IDEgMy40IDIuNCA0LjZzMy4xIDEuOSA0LjggMS45IDMuNS0uNyA0LjgtMS45IDIuMi0yLjggMi40LTQuNmM4LjgtNjMuMyA4LjktMTI3LjUgLjMtMTkwLjhsLS4xIDB6bS00NC41IDQ3LjZjMC0xLjktLjgtMy44LTIuMS01LjFzLTMuMi0yLjEtNS4xLTIuMS0zLjggLjgtNS4xIDIuMS0yLjEgMy4yLTIuMSA1LjFjLTEwLjUgNDkuMi01LjUgOTMuOSAuNCAxNDMuNiAuMyAxLjYgMS4xIDMuMSAyLjMgNC4yczIuOCAxLjcgNC41IDEuNyAzLjItLjYgNC41LTEuNyAyLjEtMi41IDIuMy00LjJjNi42LTUwLjQgMTEuNi05NC4xIC40LTE0My42em0tNDQuMS03LjVjLS4yLTEuOC0xLjEtMy41LTIuNC00LjhzLTMuMi0xLjktNS0xLjktMy42IC43LTUgMS45LTIuMiAyLjktMi40IDQuOGMtOS4zIDUwLjItNi4yIDk0LjQgLjMgMTQ0LjUgLjcgNy42IDEzLjYgNy41IDE0LjQgMCA3LjItNTAuOSAxMC41LTkzLjggLjMtMTQ0LjVsLS4yIDB6TTIwLjcgMjUwLjhjLS4yLTEuOC0xLjEtMy41LTIuNC00LjhzLTMuMi0xLjktNS0xLjktMy42IC43LTUgMS45LTIuMyAyLjktMi40IDQuOGMtOC41IDMzLjctNS45IDYxLjYgLjYgOTUuNCAuMiAxLjcgMSAzLjMgMi4zIDQuNHMyLjkgMS44IDQuNyAxLjggMy40LS42IDQuNy0xLjggMi4xLTIuNyAyLjMtNC40YzcuNS0zNC41IDExLjItNjEuOCAuNC05NS40bC0uMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVGaWdtYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZmlnbWEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTdlNCIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTczLjcgOTZjLTMzIDAtNTkuOCAyNi44LTU5LjggNTkuOCAwIDIxIDEwLjggMzkuNCAyNy4yIDUwLjEtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjFzMTAuOCAzOS41IDI3LjIgNTAuMWMtMTYuNCAxMC43LTI3LjIgMjkuMS0yNy4yIDUwLjEgMCAzMy4xIDI3LjEgNTkuOCA2MC4xIDU5LjggMzMuMiAwIDYwLjYtMjYuOSA2MC42LTYwLjNsMC01NS43YzEwLjYgOS44IDI0LjggMTUuOCA0MC40IDE1LjhsMS4xIDBjMzMgMCA1OS44LTI2LjggNTkuOC01OS44IDAtMjEtMTAuOC0zOS41LTI3LjItNTAuMSAxNi40LTEwLjcgMjcuMi0yOS4xIDI3LjItNTAuMSAwLTMzLTI2LjgtNTkuOC01OS44LTU5LjhMMTczLjcgOTZ6bTQxLjYgMjE5LjhsMCAzOS45YzAgMjIuNi0xOC42IDQxLTQxLjMgNDEtMjIuNCAwLTQwLjctMTguMi00MC43LTQwLjUgMC0yMi4zIDE4LjEtNDAuNCA0MC4zLTQwLjRsNDEuNyAwem0wLTEwMC4zbDAgODAuOS00MS43IDBjLTIyLjMtLjEtNDAuMy0xOC4yLTQwLjMtNDAuNSAwLTIyLjMgMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDB6bTYwLjggMGMyMi4zIDAgNDAuNSAxOC4xIDQwLjUgNDAuNXMtMTguMSA0MC41LTQwLjUgNDAuNWwtMS4xIDBjLTIyLjMgMC00MC40LTE4LjEtNDAuNC00MC41czE4LjEtNDAuNSA0MC40LTQwLjVsMS4xIDB6bS02MC44LTE5LjNsLTQxLjYgMGMtMjIuMyAwLTQwLjUtMTguMS00MC41LTQwLjRzMTguMS00MC41IDQwLjUtNDAuNWw0MS42IDAgMCA4MC45em02MC44LTgwLjljMjIuMyAwIDQwLjUgMTguMSA0MC41IDQwLjVzLTE4LjEgNDAuNC00MC41IDQwLjRsLTQxLjUgMCAwLTgwLjkgNDEuNSAweiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXNhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWYiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3pNMTQ1LjcgMjIxYzEzLTgzLjkgODAuNS05NS43IDEwOC45LTk1LjcgOTkuOCAwIDEyNy41IDgyLjUgMTI3LjUgMTM0LjIgMCA2My42LTQxIDEzMi45LTEyOC45IDEzMi45LTM4LjkgMC05OS4xLTIwLTEwOS40LTk3bDYyLjUgMGMxLjUgMzAuMSAxOS42IDQ1LjIgNTQuNSA0NS4yIDIzLjMgMCA1OC0xOC4yIDU4LTgyLjggMC04Mi41LTQ5LjEtODAuNi01Ni43LTgwLjYtMzMuMSAwLTUxLjcgMTQuNi01NS44IDQzLjhsMTguMiAwLTQ5LjIgNDkuMi00OS00OS4yIDE5LjQgMHoiXQogICAgfTsKICAgIGZhQ2hyb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNocm9tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY4IiwgIk0wIDI1NmMwLTQ2LjYgMTIuNS05MC40IDM0LjMtMTI4LjlMMTQ0LjEgMzE4LjNjMjEuOSAzOS4yIDYzLjggNjUuNyAxMTEuOSA2NS43IDE0LjMgMCAyNy4xLTIuMyA0MC44LTYuNkwyMjAuNSA1MDkuNkM5NS45IDQ5Mi4zIDAgMzg1LjMgMCAyNTZ6bTM2NS4xIDY1LjZjMTIuMy0xOS4yIDE4LjktNDIuNSAxOC45LTY1LjYgMC0zOC4yLTE2LjgtNzIuNS00My4zLTk2bDE1Mi43IDBjMTIgMjkuNiAxOC42IDYyLjEgMTguNiA5NiAwIDE0MS40LTExNC42IDI1NS4xLTI1NiAyNTZMMzY1LjEgMzIxLjZ6TTQ3Ny44IDEyOEwyNTYgMTI4Yy02Mi45IDAtMTEzLjcgNDQuMS0xMjUuNSAxMDIuN0w1NC4yIDk4LjVDMTAxIDM4LjUgMTc0IDAgMjU2IDAgMzUwLjggMCA0MzMuNSA1MS41IDQ3Ny44IDEyOHpNMzQ0IDI1NmE4OCA4OCAwIDEgMSAtMTc2IDAgODggODggMCAxIDEgMTc2IDB6Il0KICAgIH07CiAgICBmYVRyYWRlRmVkZXJhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFkZS1mZWRlcmF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTMiLCAiTTI1NiA4LjhhMjQ3LjIgMjQ3LjIgMCAxIDAgMCA0OTQuNCAyNDcuMiAyNDcuMiAwIDEgMCAwLTQ5NC40em0wIDExLjZhMjM1LjYgMjM1LjYgMCAxIDEgMCA0NzEuMiAyMzUuNiAyMzUuNiAwIDEgMSAwLTQ3MS4yek00MTEuMSAxNjMuMWwwLTQ2LjgtMTkzLjggMCAwIDgxLjctMTU1LjEgMCAzNi43IDQ2IDExNy43IDAgMCAxOTYuOCA0OC44IDAgMC0xOTUuOCA4My4zIDAgMC00Ny04My4zIDAgMC0zNC44IDE0NS43IDAgMC0uMXptLTczLjMgNDUuMWwwIDIzLjktODIuOSAwIDAgMTk3LjQtMjYuOCAwIDAtMTk3LjQtMTIzLjggMC0yMC4xLTIzLjkgMTQzLjkgMCAwLTgwLjYgMTcxLjggMCAwIDI0LjQtMTQ1IDAgMCA1Ni4yIDgyLjkgMHptLTE2MS4zLTY5bC0xMi40LTIwLjcgMi4xIDIzLjgtMjMuNSA1LjQgMjMuMyA1LjQtMi4xIDI0IDEyLjMtMjAuNSAyMi4yIDkuNS0xNS43LTE4LjEgMTUuOC0xOC4xLTIyIDkuM3ptLTI5LjYtMTkuN2w5LjMtMTEuNS0xMi43IDUuOS04LTEyLjQgMS43IDEzLjktMTQuMyAzLjggMTMuNyAyLjctLjggMTQuNyA2LjgtMTIuMiAxMy44IDUuMy05LjUtMTAuMnpNMzEyLjMgMjY0LjdsLTEzLjEgNS42LTcuMy0xMi4yIDEuMyAxNC4yLTEzLjkgMy4yIDEzLjkgMy4yLTEuMiAxNC4yIDcuMy0xMi4yIDEzLjEgNS41LTkuNC0xMC43IDkuMy0xMC44em0xMDYuOS03Ny4ybC0yMC45IDkuMS0xMi0xOS42IDIuMiAyMi43LTIyLjMgNS40IDIyLjIgNC45LTEuOCAyMi45IDExLjUtMTkuNiAyMS4yIDguOC0xNS4xLTE3IDE1LTE3LjZ6TTI1NiAyOS45YTIyNi4xIDIyNi4xIDAgMSAwIDAgNDUyLjIgMjI2LjEgMjI2LjEgMCAxIDAgMC00NTIuMnpNMzUwLjYgMTk2bDAgNTEtODMuMyAwIDAgMTk1LjctNTIuNyAwIDAtMTk2LjgtMTE2LjcgMC00MC00OS45IDE1Ny40IDAgMC04MS42IDE5Ny44IDAgMCA1MC43LTE0NS43IDAgMCAzMC45IDgzLjIgMHpNMjU2IDQzLjJjNjAuMyAwIDExNC44IDI1IDE1My42IDY1LjJsLTE5OS4xIDAgMCA4MS42LTE1Ny40IDBDODEuMSAxMDQuOCAxNjEuNCA0My4yIDI1NiA0My4yem0wIDQyNy4xYy0xMTcuOSAwLTIxMy42LTk1LjYtMjEzLjYtMjEzLjUgMC0yMS4yIDMuMS00MS44IDguOS02MS4xbDQzLjggNTYuMyAxMTQuNyAwIDAgMTk2LjggNjQuNiAwIDAtMTk1LjggODMuMyAwIDAtNjIuNy04My4yIDAgMC0xOS4yIDE0NS42IDAgMC01MC44YzMwLjggMzcgNDkuMyA4NC42IDQ5LjMgMTM2LjUgLjEgMTE3LjktOTUuNSAyMTMuNS0yMTMuNCAyMTMuNXpNMTg2LjggMjc1bC0xMS0yMS40IDEuNyAyNC41LTIzLjcgMy45IDIzLjggNS45LTMuNyAyMy44IDEzLTIwLjkgMjEuNSAxMC44LTE1LjgtMTguOCAxNi45LTE3LjEtMjIuNyA5LjN6Il0KICAgIH07CiAgICBmYVZhYWRpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2YWFkaW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwOCIsICJNMjI0LjUgMTQwLjdDMjI2IDEyMy4xIDIyOS40IDg4IDI3NC4zIDg4bDk4LjYgMGMyMC43IDAgMzIuMS03LjggMzIuMS0yMS42bDAtMTIuM2MwLTEyLjIgOS4zLTIyLjEgMjEuNS0yMi4xUzQ0OCA0MS45IDQ0OCA1NC4xbDAgMzYuNWMwIDQyLjktMjEuNSA2Mi02Ni44IDYybC0xMDAuNSAwYy0zMC4xIDAtMzMgMTQuNy0zMyAyNy4xIDAgMS4zLS4xIDIuNS0uMiAzLjctLjcgMTIuMy0xMC45IDIyLjItMjMuNCAyMi4ycy0yMi43LTkuOC0yMy40LTIyLjJjLS4xLTEuMi0uMi0yLjQtLjItMy43IDAtMTIuMy0zLTI3LjEtMzMtMjcuMWwtMTAwLjcgMEMyMS41IDE1Mi42IDAgMTMzLjUgMCA5MC42TDAgNTQuMUMwIDQxLjkgOS40IDMyIDIxLjYgMzJzMjEuNSA5LjkgMjEuNSAyMi4xbDAgMTIuM0M0My4xIDgwLjIgNTQuNSA4OCA3NS4yIDg4bDk4LjYgMGM0NC44IDAgNDguMyAzNS4xIDQ5LjggNTIuN2wuOSAwek0yMjQgNDU2YzExLjUgMCAyMS40LTcgMjUuNy0xNi4zIDEuMS0xLjggOTcuMS0xNjkuNiA5OC4yLTE3MS40IDExLjktMTkuNi0zLjItNDQuMy0yNy4yLTQ0LjMtMTMuOSAwLTIzLjMgNi40LTI5LjggMjAuM0wyMjQgMzYyIDE1Ny4xIDI0NC4zYy02LjQtMTMuOS0xNS45LTIwLjMtMjkuOC0yMC4zLTI0IDAtMzkuMSAyNC42LTI3LjIgNDQuMyAxLjEgMS45IDk3LjEgMTY5LjYgOTguMiAxNzEuNCA0LjMgOS4zIDE0LjIgMTYuMyAyNS43IDE2LjN6Il0KICAgIH07CiAgICBmYURldmlhbnRhcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGV2aWFudGFydCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMWJkIiwgIk0zMjAgOTMuMmwtOTguMiAxNzkuMSA3LjQgOS41IDkwLjggMCAwIDEyNy43LTE2MC45IDAtMTMuNSA5LjItNDMuNyA4NGMtLjMgMC04LjYgOC42LTkuMiA5LjJsLTkyLjcgMCAwLTkzLjIgOTMuMi0xNzkuNC03LjQtOS4yLTg1LjggMCAwLTEyNy42IDE1NiAwIDEzLjUtOS4yIDQzLjctODRjLjMgMCA4LjYtOC42IDkuMi05LjJsOTcuNiAwIDAgOTMuMXoiXQogICAgfTsKICAgIGZhTWVkaXVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZGl1bSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyNDA3LCAibWVkaXVtLW0iXSwgImYyM2EiLCAiTTM2OS40IDMyYzQzLjQgMCA3OC42IDM1LjIgNzguNiA3OC42bDAgODMuOGMtMS45LS4xLTMuOC0uMi01LjctLjJsLS40IDBjLTEwIDAtMjIuMyAyLjQtMzEuMSA2LjgtMTAgNC42LTE4LjcgMTEuNS0yNiAyMC42LTExLjggMTQuNi0xOC45IDM0LjMtMjAuNiA1Ni40LS4xIC43LS4xIDEuMy0uMiAycy0uMSAxLjItLjEgMS45Yy0uMSAxLjItLjEgMi40LS4xIDMuNiAwIDEuOS0uMSAzLjggMCA1LjggMS4yIDUwLjEgMjguMiA5MC4yIDc2LjMgOTAuMiAyLjcgMCA1LjMtLjEgNy45LS40bDAgMjAuNGMwIDQzLjQtMzUuMiA3OC42LTc4LjYgNzguNkw3OC42IDQ4MEMzNS4yIDQ4MCAwIDQ0NC44IDAgNDAxLjRMMCAxMTAuNkMwIDY3LjIgMzUuMiAzMiA3OC42IDMybDI5MC44IDB6TTgyLjMgMTM4LjlsLjMgLjFjMTMuMiAzIDE5LjggNy40IDE5LjggMjMuNGwwIDE4Ny4yYzAgMTYtNi43IDIwLjQtMTkuOSAyMy40bC0uMyAuMSAwIDIuOCA1Mi44IDAgMC0yLjgtLjMtLjFjLTEzLjItMy0xOS45LTcuNC0xOS45LTIzLjRsMC0xNzYuMyA4Ni4xIDIwMi41IDQuOSAwIDg4LjYtMjA4LjIgMCAxODYuNmMtMS4xIDEyLjYtNy44IDE2LjUtMTkuNyAxOS4ybC0uMyAuMSAwIDIuNyA5MS45IDAgMC0yLjctLjMtLjFjLTExLjktMi43LTE4LjctNi42LTE5LjktMTkuMmwtLjEtMTkxLjggLjEgMGMwLTE2IDYuNy0yMC40IDE5LjktMjMuNGwuMy0uMSAwLTIuNy03Mi4yIDAtNjcgMTU3LjQtNjctMTU3LjQtNzcuOCAwIDAgMi43ek00NDggMzQwLjNjLTI1LjEtNy40LTQzLTM1LjEtNDEuMi02Ny44bDAgMCA0MS4xIDAgMCA2Ny44em0tNi40LTEzNS42YzIuMyAwIDQuNCAuMyA2LjQgLjlsMCA1Ny40LTQwLjIgMGMxLjUtMzMuNiAxMy42LTU3LjkgMzMuOC01OC4zeiJdCiAgICB9OwogICAgZmFNZWRpdW1NID0gZmFNZWRpdW07CiAgICBmYU9wZW5jYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wZW5jYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyM2QiLCAiTTMzMS44IDQ0MC40YTQ1LjggNDUuOCAwIDEgMSA5MS41IC4zIDQ1LjggNDUuOCAwIDEgMSAtOTEuNS0uM3pNMTY5LjQgMzk0LjlhNDUuNyA0NS43IDAgMSAwIC4zIDkxLjMgNDUuNyA0NS43IDAgMSAwIC0uMy05MS4zem0yOTEuNy0yNzBjLTMwMi4yIDAtMzc5LjItMTIuOC00NjEuMS05OS4yIDM0LjQgNTEuNyA1My4zIDE0OC45IDM3My4xIDE0NC4yIDMzMy4zLTUgMTMwIDg2LjEgNzAuOCAxODguOSAxODYuNy0xNjYuNyAzMTkuNC0yMzMuOSAxNy4yLTIzMy45eiJdCiAgICB9OwogICAgZmFZQ29tYmluYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5LWNvbWJpbmF0b3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIzYiIsICJNNDQ4IDMybDAgNDQ4LTQ0OCAwIDAtNDQ4IDQ0OCAwek0yMzYgMjg3LjVsNzcuNS0xNDUuNS0zMi43IDAtNDUuOCA5MWMtNC43IDkuMy05IDE4LjMtMTIuOCAyNi44bC0xMi4yLTI2LjgtNDUuMi05MS0zNSAwIDc2LjcgMTQzLjggMCA5NC41IDI5LjUgMCAwLTkyLjh6Il0KICAgIH07CiAgICBmYUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2MwIiwgIk0zMTEgMTk2LjhsMCA4MS4zYzAgMi4xLTEuNiAzLjctMy43IDMuN2wtMTMgMGMtMS4zIDAtMi40LS43LTMtMS41TDI1NCAyMzAgMjU0IDI3OC4yYzAgMi4xLTEuNiAzLjctMy43IDMuN2wtMTMgMGMtMi4xIDAtMy43LTEuNi0zLjctMy43bDAtODEuM2MwLTIuMSAxLjYtMy43IDMuNy0zLjdsMTIuOSAwYzEuMSAwIDIuNCAuNiAzIDEuNmwzNy4zIDUwLjMgMC00OC4yYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wxMyAwYzIuMS0uMSAzLjggMS42IDMuOCAzLjVsMCAuMXptLTkzLjctMy43bC0xMyAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA4MS4zYzAgMi4xIDEuNiAzLjcgMy43IDMuN2wxMyAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTgxLjNjMC0xLjktMS42LTMuNy0zLjctMy43em0tMzEuNCA2OC4xbC0zNS42IDAgMC02NC40YzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMTMgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDEgLjMgMS44IDEgMi41IC43IC42IDEuNSAxIDIuNSAxbDUyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xM2MwLTEuOS0xLjYtMy43LTMuNS0zLjdsLjEgMHptMTkzLjctNjguMWwtNTIuMyAwYy0xLjkgMC0zLjcgMS42LTMuNyAzLjdsMCA4MS4zYzAgMS45IDEuNiAzLjcgMy43IDMuN2w1Mi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTMuMWMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTM1LjUgMCAwLTEzLjYgMzUuNSAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzLjFjMC0yLjEtMS42LTMuNy0zLjctMy43bC0zNS41IDAgMC0xMy43IDM1LjUgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xM2MtLjEtMS45LTEuNy0zLjctMy43LTMuN2wuMSAwek01MTIgOTMuNGwwIDMyNmMtLjEgNTEuMi00Mi4xIDkyLjctOTMuNCA5Mi42bC0zMjYgMEM0MS40IDUxMS45LS4xIDQ2OS44IDAgNDE4LjZsMC0zMjZDLjEgNDEuNCA0Mi4yLS4xIDkzLjQgMGwzMjYgMGM1MS4yIC4xIDkyLjcgNDIuMSA5Mi42IDkzLjR6TTQ0MS42IDIzMy41YzAtODMuNC04My43LTE1MS4zLTE4Ni40LTE1MS4zUzY4LjggMTUwLjEgNjguOCAyMzMuNWMwIDc0LjcgNjYuMyAxMzcuNCAxNTUuOSAxNDkuMyAyMS44IDQuNyAxOS4zIDEyLjcgMTQuNCA0Mi4xLS44IDQuNy0zLjggMTguNCAxNi4xIDEwLjFzMTA3LjMtNjMuMiAxNDYuNS0xMDguMmMyNy0yOS43IDM5LjktNTkuOCAzOS45LTkzLjFsMC0uMnoiXQogICAgfTsKICAgIGZhQW1pbGlhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFtaWxpYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzZkIiwgIk0yNDAuMiAzMmMtNjEuOSAwLTEzMS41IDE2LjktMTg0LjIgNTUuNC01LjEgMy4xLTkuMSA5LjItNy4yIDE5LjQgMS4xIDUuMSA1LjEgMjcuNCAxMC4yIDM5LjYgNC4xIDEwLjIgMTQuMiAxMC4yIDIwLjMgNi4xIDMyLjUtMjIuMyA5Ni41LTQ3LjcgMTUyLjMtNDcuNyA1Ny45IDAgNTguOSAyOC40IDU4LjkgNzMuMWwwIDM4LjVDMjAzLjEgMjI3LjcgNzguMyAyNTEgNDYuOCAyNjQuMiAxMS4zIDI4MC41IDE2LjQgMzU3LjcgMTYuNCAzNzZTMzEuNiA0ODAgMTQxLjMgNDgwYzQ3LjggMCAxMTMuNy0yMC43IDE1My4zLTQyLjFsMCAyNS40YzAgMyAyLjEgOC4yIDYuMSA5LjEgMy4xIDEgNTAuNyAyIDU5LjkgMnM2Mi41IC4zIDY2LjUtLjdjNC4xLTEgNS4xLTYuMSA1LjEtOS4xbDAtMjk2LjZjLS4xLTgwLjMtNTcuOS0xMzYtMTkyLTEzNnptNTAuMiAzNDhjLTIxLjQgMTMuMi00OC43IDI0LjQtNzkuMSAyNC40LTUyLjggMC01OC45LTMzLjUtNTktNDQuNyAwLTEyLjItMy00Mi43IDE4LjMtNTIuOSAyNC4zLTEzLjIgNzUuMS0yOS40IDExOS44LTMzLjVsMCAxMDYuN3oiXQogICAgfTsKICAgIGZhQXN5bW1ldHJpayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhc3ltbWV0cmlrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzNzIiLCAiTTUxNy41IDMwOS4yYzM4LjgtNDAgNTguMS04MCA1OC41LTExNi4xIC44LTY1LjUtNTkuNC0xMTguMi0xNjkuNC0xMzUtMTI4LjctMTkuNy0yODguNSAxNS41LTQwNi42IDgyLjQgNTItMjYuNSAxMTAuNi00OC4yIDE3MC43LTU4LjIgNzQuNS0yMC41IDE1My0yNS40IDIyMS4zLTE0LjggMTUyLjUgMjMuOCAxOTYuOCAxMjcuNSA5OC44IDIzMS43LTEwLjIgMTAuOC0yMiAyMS4xLTM1IDMwLjZMMzA0LjkgMTAzLjQgMTE0LjcgMzg4LjljLTY1LjYtMjkuNC03Ni41LTkwLjItMTkuMS0xNTEuMiAyMC44LTIyLjIgNDguMy00MS45IDc5LjUtNTguMSAyMC0xMi4yIDM5LjctMjIuNiA2Mi0zMC43LTY1LjEgMjAuMy0xMjIuNyA1Mi45LTE2MS42IDkyLjktMjcuNyAyOC42LTQxLjQgNTcuMS00MS43IDgyLjktLjUgMzUuMSAyMy40IDY1LjEgNjguNCA4M2wtMzQuNSA1MS43IDEwMS42IDAgMjItMzQuNGMyMi4yIDEgNDUuMyAwIDY4LjYtMi43bC0yMi44IDM3LjEgMTM1LjUgMC0zMi42LTUzLjFjMTguNi01LjMgMzYuOS0xMS41IDU0LjUtMTguN2w0NS45IDcxLjggMTAxLjYgMC03My40LTExMC40YzE4LjUtMTIuMSAzNS0yNS41IDQ4LjktMzkuOHpNMzI5LjkgMzg5LjdsLTI1LTQwLjYtMzIuNyA1My4zYy0yMy40IDMuNS00Ni43IDUuMS02OS4yIDQuNGwxMDEuOS0xNTkuMyA3OC43IDEyM2MtMTcuMiA3LjQtMzUuMyAxMy45LTUzLjcgMTkuMnoiXQogICAgfTsKICAgIGZhUGhhYnJpY2F0b3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhhYnJpY2F0b3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkYiIsICJNMzMxLjEgMjYyLjFsLS4xLTEzczIxLjctMTkuOCAyMS4xLTIxLjJsLTkuNS0yMGMtLjYtMS40LTI5LjUtLjUtMjkuNS0uNWwtOS40LTkuM3MuMi0yOC41LTEuMi0yOS4xbC0yMC4xLTkuMmMtMS40LS42LTIwLjcgMjEtMjAuNyAyMWwtMTMuMS0uMnMtMjAuNS0yMS40LTIxLjktMjAuOGwtMjAgOC4zYy0xLjQgLjUgLjIgMjguOSAuMiAyOC45bC05LjEgOS4xcy0yOS4yLS45LTI5LjcgLjRMMTYwIDIyNi4zYy0uNiAxLjQgMjEgMjEgMjEgMjFsLjEgMTIuOVMxNTkuNCAyODAgMTYwIDI4MS40bDkuNSAyMGMuNiAxLjQgMjkuNSAuNSAyOS41IC41bDkuNCA5LjNzLS4yIDMxLjggMS4yIDMyLjNsMjAuMSA4LjNjMS40IC42IDIwLjctMjMuNSAyMC43LTIzLjVsMTMuMSAuMnMyMC41IDIzLjggMjEuOCAyMy4zbDIwLTcuNWMxLjQtLjYtLjItMzIuMS0uMi0zMi4xbDkuMS05LjFzMjkuMiAuOSAyOS43LS41bDguMS0xOS44Yy43LTEuMS0yMC45LTIwLjctMjAuOS0yMC43em0tNDQuOS04LjdjLjcgMTcuMS0xMi44IDMxLjYtMzAuMSAzMi40cy0zMi4xLTEyLjUtMzIuOC0yOS42IDEyLjgtMzEuNiAzMC4xLTMyLjNjMTcuMy0uOCAzMi4xIDEyLjUgMzIuOCAyOS41em0yMDEuMi0zNy45bC05Ny05Ny0uMSAuMWMtNzUuMS03My4zLTE5NS40LTcyLjgtMjY5LjggMS42LTUwLjkgNTEtMjcuOCAyNy45LTk1LjcgOTUuMy0yMi4zIDIyLjMtMjIuMyA1OC43IDAgODEgNjkuOSA2OS40IDQ2LjQgNDYgOTcuNCA5N2wuMS0uMWM3NS4xIDczLjMgMTk1LjQgNzIuOSAyNjkuOC0xLjYgNTEtNTAuOSAyNy45LTI3LjkgOTUuMy05NS4zIDIyLjMtMjIuMyAyMi4zLTU4LjcgMC04MXpNMzYzLjUgMTQ4LjJhMTUyLjMgMTUyLjMgMCAxIDEgLTIxNSAyMTUuNiAxNTIuMyAxNTIuMyAwIDEgMSAyMTUtMjE1LjZ6Il0KICAgIH07CiAgICBmYUJvdHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYm90cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMzQwIiwgIk04Ni4zIDE5Ny44Yy04LS4xLTE1LjkgMS43LTIzLjEgNS4xcy0xMy41IDguNi0xOC40IDE0LjlsMC02MS45YzAtMi4yLS45LTQuMy0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTI4LjQgMGMtMi4yIDAtNC4zIC45LTUuOCAyLjRTMCAxNTMuOCAwIDE1NkwwIDMzMy42YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNyAxLjcgMS40IDIuNyAxLjggMi4xIC42IDMuMSAuNmwyOC40IDBjMS4xIDAgMi4xLS4yIDMuMS0uNnMxLjktMSAyLjctMS44IDEuNC0xLjcgMS44LTIuNyAuNi0yLjEgLjYtMy4xbDAtOC4xYzExLjYgMTMuNCAyNS45IDE5LjggNDEuNiAxOS44IDM0LjYgMCA2MS45LTI2LjIgNjEuOS03My44IDAtNDUuOS0yNy03My42LTYxLjktNzMuNnpNNzEuNSAzMDUuN2MtOS42IDAtMjEuMi00LjktMjYuNy0xMi41bDAtNDNjNS41LTcuNiAxNy4yLTEyLjggMjYuNy0xMi44IDE3LjcgMCAzMS4xIDEzLjEgMzEuMSAzNCAwIDIxLjItMTMuNCAzNC4zLTMxLjEgMzQuM3ptMTU2LjQtNTlhMTcuNCAxNy40IDAgMSAwIDAgMzQuOCAxNy40IDE3LjQgMCAxIDAgMC0zNC44em00Ni4xLTkwbDAtNDQuN2MyLjgtMS4yIDUuMi0zLjMgNi42LTZzMS45LTUuOCAxLjMtOC45LTIuMi01LjctNC42LTcuNy01LjQtMy04LjQtMy02LjEgMS4xLTguNCAzLTQgNC43LTQuNiA3LjctLjEgNi4xIDEuMyA4LjkgMy44IDQuOCA2LjYgNmwwIDQ0LjdjLTI4IDEuMy01NC40IDEzLjYtNzMuNiAzNC4xcy0yOS41IDQ3LjctMjguOCA3NS44IDEyLjMgNTQuNyAzMi40IDc0LjMgNDcgMzAuNiA3NS4xIDMwLjYgNTUtMTEgNzUuMS0zMC42IDMxLjctNDYuMyAzMi40LTc0LjMtOS43LTU1LjMtMjguOC03NS44LTQ1LjUtMzIuOC03My42LTM0LjF6bTg2IDEwNy40YzAgMzAuNS00MC44IDU1LjMtOTEuMSA1NS4zcy05MS4xLTI0LjctOTEuMS01NS4zIDQwLjgtNTUuMyA5MS4xLTU1LjMgOTEuMSAyNC43IDkxLjEgNTUuM2wwIDB6bS01MC4yIDE3LjRjMy40IDAgNi44LTEgOS43LTIuOXM1LjEtNC42IDYuNC03LjggMS43LTYuNyAxLTEwLjEtMi4zLTYuNS00LjgtOC45LTUuNS00LjEtOC45LTQuOC02LjktLjMtMTAuMSAxLTUuOSAzLjUtNy44IDYuNC0yLjkgNi4yLTIuOSA5LjdjMCA0LjYgMS44IDkgNS4xIDEyLjNzNy43IDUuMSAxMi4zIDUuMWwwIDB6bTI3MC45LTMxYy0xNC44LTIuNi0yMi40LTMuOC0yMi40LTkuOSAwLTUuNSA3LjMtOS45IDE3LjctOS45IDEyLjIgLjEgMjQuMiAzLjYgMzQuNSAxMC4xIDEuOCAxLjIgNCAxLjYgNi4yIDEuMXM0LTEuNyA1LjEtMy42Yy4xLS4xIC4xLS4yIC4yLS4zbDguNi0xNC45YzEuMS0xLjkgMS40LTQuMSAuOC02LjFzLTEuOS0zLjktMy43LTVjLTE1LjctOS40LTMzLjctMTQuMy01Mi0xNC4xLTM5IDAtNjAuMiAyMS41LTYwLjIgNDYuMiAwIDM2LjMgMzMuNyA0MS45IDU3LjYgNDUuNiAxMy40IDIuMyAyNC4xIDQuNCAyNC4xIDExIDAgNi40LTUuNSAxMC44LTE4LjkgMTAuOC0xMy42IDAtMzEtNi4yLTQyLjYtMTMuNi0uOS0uNi0xLjktMS0zLTEuMnMtMi4xLS4yLTMuMiAuMS0yLjEgLjctMi45IDEuMy0xLjYgMS40LTIuMiAyLjNjMCAuMS0uMSAuMS0uMSAuMmwtMTAuMiAxNi45Yy0xLjEgMS44LTEuNCA0LTEgNnMxLjcgMy45IDMuNSA1YzE1LjIgMTAuMyAzNy43IDE2LjcgNTkuNCAxNi43IDQwLjQgMCA2NC0xOS44IDY0LTQ2LjUgMC0zOC4xLTM1LjUtNDMuOS01OS4zLTQ4LjN6bS05NS45IDYwLjhjLS41LTItMS44LTMuNy0zLjYtNC44cy0zLjktMS41LTUuOS0xLjFjLTEuNCAuMy0yLjggLjQtNC4yIC40LTcuOCAwLTEyLjUtNi4xLTEyLjUtMTQuMmwwLTUxLjIgMjAuMyAwYzIuMiAwIDQuMi0uOSA1LjgtMi40czIuNC0zLjYgMi40LTUuOGwwLTIyLjdjMC0yLjItLjktNC4yLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjAuMyAwIDAtMzAuMmMwLTIuMi0uOS00LjItMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yOC4yIDBjLTIuMiAwLTQuMiAuOS01LjggMi40cy0yLjQgMy42LTIuNCA1LjhsMCAzMC4yLTE1LjEgMGMtMS4xIDAtMi4xIC4yLTMuMSAuNnMtMS45IDEtMi42IDEuOC0xLjQgMS43LTEuOCAyLjYtLjYgMi0uNiAzLjFsMCAyMi43YzAgMS4xIC4yIDIuMSAuNiAzLjFzMSAxLjkgMS44IDIuNiAxLjcgMS40IDIuNiAxLjggMiAuNiAzLjEgLjZsMTUuMSAwIDAgNjMuN2MwIDI3IDE1LjQgNDEuMyA0My45IDQxLjMgMTIuMiAwIDIxLjQtMi4yIDI3LjYtNS40IDEuNi0uOCAyLjktMi4yIDMuNy0zLjlzLjktMy42IC41LTUuNGwtNS0xOS4zeiJdCiAgICB9OwogICAgZmFWaW5lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpbmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjYSIsICJNMzg0IDI1NC43bDAgNTIuMWMtMTguNCA0LjItMzYuOSA2LjEtNTIuMSA2LjEtMzYuOSA3Ny40LTEwMyAxNDMuOC0xMjUuMSAxNTYuMi0xNCA3LjktMjcuMSA4LjQtNDIuNy0uOC0yNy4xLTE2LjMtMTI5LjktMTAwLjYtMTY0LjEtMzY1LjZsNzQuNSAwYzE4LjcgMTU5LjEgNjQuNSAyNDAuNyAxMTQuOCAzMDEuOCAyNy45LTI3LjkgNTQuOC02NS4xIDc1LjYtMTA2LjktNDkuOC0yNS4zLTgwLjEtODAuOS04MC4xLTE0NS42IDAtNjUuNiAzNy43LTExNS4xIDEwMi4yLTExNS4xIDExNC45IDAgMTA2LjIgMTI3LjkgODEuNiAxODEuNSAwIDAtNDYuNCA5LjItNjMuNS0yMC41IDMuNC0xMS4zIDguMi0zMC44IDguMi00OC41IDAtMzEuMy0xMS4zLTQ2LjYtMjguNC00Ni42LTE4LjIgMC0zMC44IDE3LjEtMzAuOCA1MCAuMSA3OS4yIDU5LjQgMTE4LjcgMTI5LjkgMTAxLjl6Il0KICAgIH07CiAgICBmYU1lZHJ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZHJ0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzYzgiLCAiTTEyOS43IDI1NmMwIDEyMS44IDgzLjkgMjIyLjggMTkzLjUgMjQxLjEtMTguNyA0LjUtMzguMiA2LjktNTguMiA2LjktMTM3LjYgMC0yNDktMTExLTI0OS0yNDhTMTI3LjQgOCAyNjQuOSA4YzIwLjEgMCAzOS42IDIuNCA1OC4yIDYuOS0xMDkuNiAxOC4zLTE5My40IDExOS4zLTE5My40IDI0MS4xek00MjcuMSAzNTYuM2MtNzcuNyA1NS40LTE3OS42IDQ3LjUtMjQwLjQtMTQuNiA1LjUgMTQuMSAxMi43IDI3LjcgMjEuNyA0MC41IDYxLjYgODguMiAxODIuNCAxMDkuMyAyNjkuNyA0N3MxMDguMS0xODQuMyA0Ni41LTI3Mi42Yy05LTEyLjktMTkuMy0yNC4zLTMwLjUtMzQuMiAzNy40IDc4LjggMTAuNyAxNzguNS02NyAyMzMuOXptLTIxOC44LTI0NGMtMS40IDEtMi43IDIuMS00IDMuMSA2NC4zLTE3LjggMTM1LjkgNCAxNzguOSA2MC41IDM1LjcgNDcgNDIuOSAxMDYuNiAyNC40IDE1OCA1Ni43LTU2LjIgNjcuNi0xNDIuMSAyMi4zLTIwMS44LTUwLTY1LjUtMTQ5LjEtNzQuNC0yMjEuNi0xOS44ek0zMTIgMjI0Yy00LjQgMC04LTMuNi04LThsMC00MGMwLTQuNC0zLjYtOC04LThsLTQ4IDBjLTQuNCAwLTggMy42LTggOGwwIDQwYzAgNC40LTMuNiA4LTggOGwtNDAgMGMtNC40IDAtOCAzLjYtOCA4bDAgNDhjMCA0LjQgMy42IDggOCA4bDQwIDBjNC40IDAgOCAzLjYgOCA4bDAgNDBjMCA0LjQgMy42IDggOCA4bDQ4IDBjNC40IDAgOC0zLjYgOC04bDAtNDBjMC00LjQgMy42LTggOC04bDQwIDBjNC40IDAgOC0zLjYgOC04bDAtNDhjMC00LjQtMy42LTgtOC04bC00MCAweiJdCiAgICB9OwogICAgZmFPc2kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3NpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MWEiLCAiTTggMjY2LjRjMi4zLTEzNS44IDk3LjQtMjMyLjQgMjEzLjgtMjQ4LjEgMTM4LjgtMTguNiAyNTUuNiA3NS44IDI3OCAyMDEuMSAyMS4zIDExOC44LTQ0IDIzMC0xNTEuNiAyNzQtOS4zIDMuOC0xNC40IDEuNy0xOC03LjctMTcuOC00Ni4zLTM1LjYtOTIuNi01My40LTEzOS0zLjEtOC4xLTEtMTMuMiA3LTE2LjggMjQuMi0xMSAzOS4zLTI5LjQgNDMuMy01NS44IDEuNS05LjcgMS0xOS42LTEuNS0yOS4xcy02LjktMTguNC0xMi45LTI2LjEtMTMuNi0xNC4xLTIyLjItMTguOC0xOC4xLTcuNS0yNy45LTguM2MtMzktMy40LTcxLjggMjMuNy03Ny41IDU5LjctNS4yIDMzIDExLjEgNjMuNyA0MS45IDc3LjcgOS42IDQuNCAxMS41IDguNiA3LjggMTguNC0xNy45IDQ2LjYtMzUuOCA5My4yLTUzLjcgMTM5LjktMi42IDYuOS04LjMgOS4zLTE1LjUgNi41LTUyLjYtMjAuMy0xMDEuNC02MS0xMzAuOC0xMTktMjQuOS00OS4yLTI1LjItODcuNy0yNi44LTEwOC43em0yMC45LTEuOWMuNCA2LjYgLjYgMTQuMyAxLjMgMjIuMSA2LjMgNzEuOSA0OS42IDE0My41IDEzMSAxODMuMSAzLjIgMS41IDQuNCAuOCA1LjYtMi4zIDE0LjktMzkuMSAyOS45LTc4LjIgNDUtMTE3LjMgMS4zLTMuMyAuNi00LjgtMi40LTYuNy0zMS42LTE5LjktNDcuMy00OC41LTQ1LjYtODYgMS0yMS42IDkuMy00MC41IDIzLjgtNTYuMyAzMC0zMi43IDc3LTM5LjggMTE1LjUtMTcuNiAxNS42IDkgMjguMiAyMi4zIDM2LjIgMzguNHMxMS4yIDM0LjIgOSA1MmMtMy42IDMwLjYtMTkuMyA1My45LTQ1LjcgNjkuOC0yLjcgMS42LTMuNSAyLjktMi4zIDYgMTUuMiAzOS4yIDMwLjMgNzguNCA0NS4yIDExNy43IDEuMiAzLjEgMi40IDMuOCA1LjYgMi4zIDM1LjUtMTYuNiA2NS4yLTQwLjMgODguMS03MiAzNC44LTQ4LjIgNDkuMS0xMDEuOSA0Mi4zLTE2MS0xMy43LTExNy41LTExOS40LTIxNC44LTI1NS41LTE5OC0xMDYuMSAxMy0xOTUuMyAxMDIuNS0xOTcuMSAyMjUuOHoiXQogICAgfTsKICAgIGZhR2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2MCIsICJNMTc5LjIgMjMwLjRsMTAyLjQgMTAyLjQtMTAyLjQgMTAyLjQtMTc5LjItMTc5LjIgMTc5LjItMTc5LjIgNDQuOCA0NC44LTI1LjYgMjUuNi0xOS4yLTE5LjItMTI4IDEyOCAxMjggMTI4IDUxLjUtNTEuNS03Ny4xLTc2LjUgMjUuNi0yNS42ek0zMzIuOCA3Ni44bC0xMDIuNCAxMDIuNCAxMDIuNCAxMDIuNCAyNS42LTI1LjYtNzcuMS03Ni41IDUxLjUtNTEuNSAxMjggMTI4LTEyOCAxMjgtMTkuMi0xOS4yLTI1LjYgMjUuNiA0NC44IDQ0LjggMTc5LjItMTc5LjItMTc5LjItMTc5LjJ6Il0KICAgIH07CiAgICBmYUJ1eXNlbGxhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnV5c2VsbGFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjBkIiwgIk0yMjQgMTUwLjdsNDIuOSAxNjAuNy04NS44IDAgNDIuOS0xNjAuN3pNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzgyLjcgNDA1LjNsLTk0LjUtMjk4LjctMTI4LjQgMC05NC41IDI5OC43IDkwLjcgMCAxMTEuNy05MS42IDI0LjIgOTEuNiA5MC44IDB6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJiMyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0xODUuMyAzODBjLTMyLjkgMC02NC40LTEzLjEtODcuNy0zNi4zcy0zNi4zLTU0LjgtMzYuMy04Ny43IDEzLjEtNjQuNCAzNi4zLTg3LjcgNTQuOC0zNi4zIDg3LjctMzYuM2MzMS4zIDAgNjAuMSAxMSA4MyAzMi4zbC0zMy42IDMyLjZjLTEzLjItMTIuOS0zMS4zLTE5LjEtNDkuNC0xOS4xLTQyLjkgMC03Ny4yIDM1LjUtNzcuMiA3OC4xUzE0Mi4zIDMzNCAxODUuMyAzMzRjMzIuNiAwIDY0LjktMTkuMSA3MC4xLTUzLjNsLTcwLjEgMCAwLTQyLjYgMTE2LjkgMGMxLjMgNi44IDEuOSAxMy44IDEuOSAyMC43IDAgNzAuOC00Ny41IDEyMS4yLTExOC44IDEyMS4yek00MTUuNSAyNzMuOGwwIDM1LjUtMzUuNSAwIDAtMzUuNS0zNS41IDAgMC0zNS41IDM1LjUgMCAwLTM1LjUgMzUuNSAwIDAgMzUuNSAzNS4yIDAgMCAzNS41LTM1LjIgMHoiXQogICAgfTsKICAgIGZhU2NyZWVucGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjcmVlbnBhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTcwIiwgIk0yNzguNiAyMi41YTIyLjUgMjIuNSAwIDEgMSAtNDUgMCAyMi41IDIyLjUgMCAxIDEgNDUgMHpNMTk4LjcgMjU5YTU3LjQgNTcuNCAwIDEgMSAxMTQuOCAwIDU3LjQgNTcuNCAwIDEgMSAtMTE0LjggMHptMTM4LjYgOTFjMjIuMy0xOS45IDM2LjUtNDcuMyAzOS45LTc3bDExOS41IDBjLTMuNSA2MS40LTMwLjQgMTE5LjItNzUuMiAxNjEuNC00NC43IDQyLjItMTAzLjkgNjUuOC0xNjUuNCA2NS44UzEzNS40IDQ3Ni42IDkwLjcgNDM0LjRDNDUuOSAzOTIuMiAxOS4xIDMzNC40IDE1LjUgMjczbDExOS43IDBjMy40IDI5LjcgMTcuNiA1Ny4xIDM5LjkgNzdzNTEuMiAzMC45IDgxLjEgMzAuOWMyOSAwIDU4LjctMTEgODEuMS0zMC45ek0yOC4zIDE0MS43YTIyLjUgMjIuNSAwIDEgMSA0NS0xLjQgMjIuNSAyMi41IDAgMSAxIC00NSAxLjR6bTQ1NS42LS43YTIyLjQgMjIuNCAwIDEgMSAtNDQuOSAwIDIyLjQgMjIuNCAwIDEgMSA0NC45IDB6TTMxOCA5NS4zYy0xNy4zIDEzLjgtMzkuMiAyMi44LTYxLjkgMjIuOHMtNDQuNi05LTYxLjktMjIuOGMtMTcuMy0xNC43LTI4LjgtMzUuMS0zMi40LTU3LjUgMTUuMS02LjQgMzAuOC0xMS4zIDQ2LjktMTQuNSAwIDEyLjYgNSAyNC42IDEzLjkgMzMuNXMyMC45IDEzLjkgMzMuNSAxMy45IDI0LjYtNSAzMy41LTEzLjkgMTMuOS0yMC45IDEzLjktMzMuNWMxNi4xIDMuMiAzMS44IDguMSA0Ni45IDE0LjUtMy42IDIyLjQtMTUuMSA0Mi44LTMyLjQgNTcuNXpNODIuOSAyMzFjLTIxLjQgNy42LTQ0LjcgNy40LTY1LjktLjYgMi0xNi4zIDUuNi0zMi4zIDEwLjgtNDcuOSA1LjQgMy4xIDExLjMgNS4xIDE3LjUgNiA2LjIgLjggMTIuNCAuNCAxOC41LTEuMiA2LTEuNyAxMS42LTQuNCAxNi42LTguMnM5LjEtOC41IDEyLjItMTMuOSA1LjEtMTEuNCA2LTE3LjVjLjgtNi4yIC40LTEyLjUtMS4yLTE4LjVzLTQuNC0xMS42LTguMi0xNi42Yy0zLjgtNC45LTguNS05LjEtMTMuOS0xMi4yIDEwLjgtMTIuMyAyMi45LTIzLjUgMzYtMzMuMyAxNy42IDE0LjMgMjkuNSAzNC41IDMzLjYgNTYuOHMuMSA0NS40LTExLjIgNjVjLTExLjQgMTkuNi0yOS40IDM0LjUtNTAuNyA0Mi4xem0zNDYuNCAuMWMtMjEuMy03LjYtMzkuMy0yMi42LTUwLjctNDIuMi0xMS4zLTE5LjYtMTUuMi00Mi43LTExLjEtNjUgNC4xLTIyLjIgMTYtNDIuNCAzMy41LTU2LjcgMTMuMSA5LjggMjUuMiAyMSAzNiAzMy4zLTEwLjcgNi40LTE4LjQgMTYuNy0yMS41IDI4LjgtMy4yIDEyLTIuMyAyNC44IDQuOCAzNS42IDYuMiAxMC44IDE2LjQgMTguNyAyOC40IDIyczI0LjkgMS43IDM1LjctNC4zYzUuMyAxNS41IDguOSAzMS42IDEwLjkgNDcuOC0yMi4xIDguMS00NC42IDguMy02NiAuN3oiXQogICAgfTsKICAgIGZhQml0Y29pbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaXRjb2luIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNzkiLCAiTTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTM1NC4zLTM1LjNjNC45LTMzLTIwLjItNTAuNy01NC42LTYyLjZsMTEuMS00NC43LTI3LjItNi44LTEwLjkgNDMuNWMtNy4yLTEuOC0xNC41LTMuNS0yMS44LTUuMWwxMC45LTQzLjgtMjcuMi02LjgtMTEuMiA0NC43Yy01LjktMS4zLTExLjctMi43LTE3LjQtNC4xbDAtLjEtMzcuNS05LjQtNy4yIDI5LjFzMjAuMiA0LjYgMTkuOCA0LjljMTEgMi44IDEzIDEwIDEyLjcgMTUuOGwtMTIuNyA1MC45Yy44IC4yIDEuNyAuNSAyLjggLjktLjktLjItMS45LS41LTIuOS0uN2wtMTcuOCA3MS4zYy0xLjMgMy4zLTQuOCA4LjQtMTIuNSA2LjUgLjMgLjQtMTkuOC00LjktMTkuOC00LjlsLTEzLjUgMzEuMSAzNS40IDguOGM2LjYgMS43IDEzIDMuNCAxOS40IDVsLTExLjMgNDUuMiAyNy4yIDYuOCAxMS4yLTQ0LjdjNy4yIDIgMTQuNCAzLjggMjEuNyA1LjZsLTExLjEgNDQuNSAyNy4yIDYuOCAxMS4zLTQ1LjFjNDYuNCA4LjggODEuMyA1LjIgOTYtMzYuNyAxMS44LTMzLjgtLjYtNTMuMy0yNS02NiAxNy44LTQuMSAzMS4yLTE1LjggMzQuNy0zOS45em0tNjIuMiA4Ny4yYy04LjQgMzMuOC02NS4zIDE1LjUtODMuOCAxMC45bDE0LjktNTkuOWMxOC40IDQuNiA3Ny42IDEzLjcgNjguOCA0OXptOC40LTg3LjdjLTcuNyAzMC43LTU1IDE1LjEtNzAuNCAxMS4zbDEzLjUtNTQuM2MxNS40IDMuOCA2NC44IDExIDU2LjggNDN6Il0KICAgIH07CiAgICBmYVN3aWZ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN3aWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4ZTEiLCAiTTQ0OCAxNTYuMWMwLTQuNS0uMS05LS4yLTEzLjUtLjEtOS45LTEtMTkuNy0yLjYtMjkuNC0xLjctOS43LTQuOC0xOS4yLTkuMi0yOC05LTE3LjctMjMuNC0zMi4xLTQxLjItNDEuMS04LjgtNC41LTE4LjMtNy42LTI4LTkuMi05LjctMS42LTE5LjYtMi41LTI5LjQtMi42LTQuNS0uMS05LS4yLTEzLjUtLjJMMTI0LjEgMzJjLTQuNSAwLTkgLjEtMTMuNSAuMi0yLjQgLjEtNC45IC4yLTcuNCAuMy03LjQgLjMtMTQuOCAxLjEtMjIuMSAyLjMtNy4zIDEuMy0xNC40IDMuMy0yMS4yIDYuMS0yLjMgMS00LjYgMi02LjggMy4xLTYuNiAzLjQtMTIuOCA3LjUtMTguNCAxMi4zLTEuOSAxLjYtMy43IDMuMy01LjQgNS03IDctMTIuOSAxNS0xNy40IDIzLjgtNC40IDguOC03LjYgMTguMy05LjIgMjgtMS42IDkuNy0yLjQgMTkuNi0yLjUgMjkuNC0uMSA0LjUtLjIgOS0uMiAxMy41TDAgMzU1LjljMCA0LjUgLjEgOSAuMiAxMy41IC4xIDkuOSAxIDE5LjcgMi42IDI5LjQgMS43IDkuNyA0LjggMTkuMiA5LjIgMjggOSAxNy43IDIzLjQgMzIuMSA0MS4xIDQxLjEgOC44IDQuNCAxOC4zIDcuNSAyOCA5LjIgOS43IDEuNiAxOS42IDIuNSAyOS40IDIuNiA0LjUgLjEgOSAuMiAxMy41IC4ybDE5OS44IDBjNC41IDAgOS0uMSAxMy41LS4yIDkuOS0uMSAxOS43LTEgMjkuNC0yLjYgOS43LTEuNyAxOS4yLTQuOCAyOC05LjIgMTcuNy05IDMyLjEtMjMuNCA0MS4xLTQxLjIgNC40LTguOCA3LjYtMTguMyA5LjItMjggMS42LTkuNyAyLjUtMTkuNiAyLjYtMjkuNCAuMS00LjUgLjItOSAuMi0xMy41bDAtMTgzLjhjMC01LjQgMC0xMC43IDAtMTZ6bS02OS45IDI0MWMtMjAtMzguOS01Ny4yLTI5LjMtNzYuMy0xOS41LTEuNyAxLTMuNSAyLTUuMiAzbC0uNCAuMmMtMzkuNSAyMS05Mi41IDIyLjUtMTQ1LjgtLjQtNDMuNC0xOC44LTgwLjEtNTAuMy0xMDUuMy05MC40IDEyLjMgOS4xIDI1LjQgMTYuOSAzOS4yIDIzLjQgNTYuNCAyNi40IDExMyAyNC41IDE1MyAwLTU3LTQzLjgtMTA0LjYtMTAxLTE0MS4xLTE0Ny4yLTctOC4xLTEzLjItMTYuOC0xOC44LTI1LjkgNDMuNyA0MCAxMTIuNyA5MC4yIDEzNy41IDEwNC4xLTUyLjYtNTUuNS05OC45LTEyMy45LTk2LjctMTIxLjcgODIuOCA4My40IDE1OS4yIDEzMC42IDE1OS4yIDEzMC42IDIuOSAxLjYgNSAyLjggNi43IDQgMS42LTQuMSAzLTguMiA0LjItMTIuNSAxMy4yLTQ4LjMtMS43LTEwMy42LTM1LjMtMTQ5LjIgNzYuOCA0Ni4xIDEyMi4yIDEzMy43IDEwMy42IDIwNy44LS40IDEuNy0xIDMuNC0xLjQgNS4xIDM4LjUgNDcuNCAyOCA5OC4yIDIzLjEgODguNmwwIDB6Il0KICAgIH07CiAgICBmYUZpbGVzUGlud2hlZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlsZXMtcGlud2hlZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTY5ZiIsICJNMjUzLjUgMjQ2LjRMMTM3LjIgMTMwLjJjLS42LS42LTEtMS4zLTEuNC0ycy0uNS0xLjYtLjUtMi40IC4yLTEuNiAuNS0yLjQgLjgtMS40IDEuNC0yTDI1My42IDUuMWMuOS0uOSAyLTEuNSAzLjItMS43czIuNS0uMSAzLjYgLjMgMi4xIDEuMyAyLjggMi4zIDEuMSAyLjIgMS4xIDMuNWwwIDIzMi41YzAgMS4zLS4zIDIuNS0xIDMuNnMtMS43IDEuOS0yLjkgMi40LTIuNSAuNi0zLjcgLjMtMi40LS45LTMuMi0xLjl6bTQwLjMtNC40bDAtMTM0LjRjMC0uOCAuMS0xLjYgLjUtMi40cy44LTEuNSAxLjMtMi4xIDEuMy0xLjEgMi0xLjQgMS42LS41IDIuNC0uNWwxMzQuNCAwYzEuMiAwIDIuNSAuNCAzLjUgMS4xczEuOCAxLjcgMi4zIDIuOCAuNiAyLjQgLjMgMy42LS45IDIuMy0xLjcgMy4yTDMwNC4zIDI0Ni40Yy0uOSAuOC0yIDEuNC0zLjIgMS42cy0yLjQgLjEtMy41LS40LTIuMS0xLjMtMi44LTIuMy0xLjEtMi4yLTEuMS0zLjRsLjEgLjF6bTMwLjYgMzVjLTEuMiAwLTIuNS0uMy0zLjUtMXMtMS45LTEuNi0yLjQtMi44LS42LTIuNC0uNC0zLjYgLjgtMi4zIDEuNy0zLjJMNDA0IDE4Mi4yYy42LS42IDEuMy0xIDItMS40czEuNi0uNSAyLjQtLjUgMS42IC4yIDIuNCAuNSAxLjQgLjggMiAxLjRsODQuNCA4NC4yYy45IC45IDEuNSAyIDEuNyAzLjJzLjEgMi41LS4zIDMuNi0xLjMgMi4xLTIuMyAyLjgtMi4yIDEuMS0zLjUgMS4xbC0xNjguNSAwIC4xLS4xem05MC43IDEzMWwtOTUuMy05NS4yYy0uOS0uOS0xLjUtMi0xLjctMy4ycy0uMS0yLjUgLjQtMy43IDEuMy0yLjEgMi40LTIuOCAyLjMtMSAzLjUtMWw5NS4yIDBjMS43IDAgMy4yIC43IDQuNCAxLjhzMS44IDIuOCAxLjggNC40bDAgOTUuM2MwIDEuMi0uNCAyLjUtMS4xIDMuNXMtMS43IDEuOC0yLjggMi4zLTIuNCAuNi0zLjYgLjMtMi4zLS45LTMuMi0xLjd6TTE2LjggMzAyLjFsMjE2LjkgMGMxLjIgMCAyLjUgLjQgMy41IDEuMXMxLjggMS43IDIuMyAyLjggLjYgMi40IC4zIDMuNi0uOCAyLjMtMS43IDMuMkwxMjkuNyA0MjEuMmMtLjYgLjYtMS4zIDEtMiAxLjRzLTEuNiAuNS0yLjQgLjUtMS42LS4yLTIuNC0uNS0xLjQtLjgtMi0xLjRMMTIuMyAzMTIuOGMtLjktLjktMS41LTItMS43LTMuMnMtLjEtMi41IC40LTMuNiAxLjMtMi4xIDIuMy0yLjggMi4zLTEgMy41LTFsMC0uMXpNMjY0LjMgNDY1LjNjMCAuOC0uMiAxLjYtLjUgMi40cy0uOCAxLjUtMS40IDItMS4zIDEtMiAxLjQtMS42IC41LTIuNCAuNWwtMTI4IDBjLTEuMiAwLTIuNS0uNC0zLjUtMS4xcy0xLjgtMS43LTIuMy0yLjgtLjYtMi40LS4zLTMuNiAuOC0yLjMgMS43LTMuMmwxMjgtMTI4Yy45LS45IDItMS41IDMuMi0xLjdzMi41LS4xIDMuNiAuMyAyLjEgMS4zIDIuOCAyLjMgMS4xIDIuMiAxLjEgMy41bDAgMTI4em00MC0xMzIuNWw4Mi44IDgyLjdjLjYgLjYgMSAxLjMgMS40IDJzLjUgMS42IC41IDIuNC0uMiAxLjYtLjUgMi40LS44IDEuNC0xLjQgMkwzMDQuMyA1MDdjLS45IC45LTIgMS41LTMuMiAxLjdzLTIuNSAuMS0zLjYtLjMtMi4xLTEuMy0yLjgtMi4zLTEuMS0yLjItMS4xLTMuNWwwLTE2NS40YzAtMS4yIC40LTIuNSAxLjEtMy41czEuNy0xLjggMi44LTIuMyAyLjQtLjYgMy42LS4zIDIuMyAuOCAzLjIgMS43ek03OSAxMjIuNGMwLTEuMiAuMy0yLjUgMS0zLjVzMS43LTEuOCAyLjgtMi4zIDIuNC0uNiAzLjYtLjQgMi4zIC44IDMuMiAxLjdMMjM4LjEgMjY2LjRjLjkgLjkgMS41IDIgMS43IDMuMnMuMSAyLjUtLjMgMy42LTEuMyAyLjEtMi4zIDIuOC0yLjIgMS4xLTMuNSAxLjFsLTE0OC40IDBjLTEuNyAwLTMuMi0uNy00LjQtMS44cy0xLjgtMi44LTEuOC00LjRsMC0xNDguNC0uMS0uMXoiXQogICAgfTsKICAgIGZhTGFyYXZlbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsYXJhdmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYmQiLCAiTTUwNC42IDExNS44Yy0uMS0uMi0uMi0uNS0uMy0uNy0uMS0uNC0uMy0uOC0uNS0xLjItLjItLjItLjMtLjUtLjUtLjctLjItLjMtLjUtLjYtLjctLjktLjItLjItLjUtLjQtLjgtLjYtLjMtLjItLjYtLjUtLjktLjdMNDA0LjYgNTUuNWMtMS4yLS43LTIuNi0xLjEtNC0xLjFzLTIuOCAuNC00IDEuMUwzMDAuMyAxMTFjLS4zIC4yLS42IC40LS45IC43LS4zIC4yLS41IC40LS44IC42LS4zIC4zLS41IC42LS43IC45LS4yIC4yLS40IC40LS41IC43LS4yIC40LS40IC44LS41IDEuMi0uMSAuMi0uMiAuNC0uMyAuNy0uMiAuNy0uMyAxLjQtLjMgMi4xbDAgMTA1LjItODAuMiA0Ni4yIDAtMjA1LjljMC0uNy0uMS0xLjQtLjMtMi4xLS4xLS4yLS4yLS40LS4zLS43LS4xLS40LS4zLS44LS41LTEuMi0uMS0uMy0uNC0uNS0uNS0uNy0uMi0uMy0uNS0uNi0uNy0uOS0uMi0uMi0uNS0uNC0uOC0uNi0uMy0uMi0uNi0uNS0uOS0uN0wxMTUuOCAxLjFjLTEuMi0uNy0yLjYtMS4xLTQtMS4xcy0yLjggLjQtNCAxLjFMMTEuNSA1Ni41Yy0uMyAuMi0uNiAuNC0uOSAuNy0uMyAuMi0uNSAuNC0uOCAuNi0uMyAuMy0uNSAuNi0uNyAuOS0uMiAuMy0uNCAuNS0uNiAuNy0uMiAuNC0uNCAuOC0uNSAxLjItLjEgLjItLjIgLjQtLjMgLjctLjIgLjctLjMgMS40LS4zIDIuMWwwIDMyOS43YzAgMS40IC40IDIuOCAxLjEgNHMxLjcgMi4yIDIuOSAyLjlMMjA0IDUxMC45Yy40IC4yIC45IC40IDEuMyAuNSAuMiAuMSAuNCAuMiAuNiAuMyAxLjMgLjQgMi44IC40IDQuMSAwIC4yLS4xIC40LS4yIC42LS4yIC41LS4yIDEtLjMgMS40LS42TDQwNC42IDQwMC4xYzEuMi0uNyAyLjItMS43IDIuOS0yLjlzMS4xLTIuNiAxLjEtNGwwLTEwNS4zIDkyLjItNTMuMWMxLjItLjcgMi4yLTEuNyAyLjktM3MxLjEtMi42IDEuMS00bDAtMTA5LjhjMC0uNy0uMS0xLjQtLjItMi4xek0xMTEuOCAxNy4zbDgwLjIgNDYuMS04MC4yIDQ2LjItODAuMi00Ni4yIDgwLjItNDYuMnptODguMiA2MGwwIDIwMS4zYy0zMy4yIDE5LjEtNTkuOSAzNC41LTgwLjIgNDYuMmwwLTIwMS4zQzE1MyAxMDQuNCAxNzkuNyA4OSAyMDAgNzcuM3ptMCA0MTIuOEwyMy41IDM4OC41IDIzLjUgNzcuM2MyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDIxNS4yYzAgLjMgLjEgLjYgLjEgLjkgMCAuNCAuMSAuOCAuMiAxLjIgLjEgLjMgLjIgLjYgLjQgLjkgLjEgLjMgLjMgLjcgLjQgMSAuMiAuMyAuNCAuNSAuNiAuOCAuMiAuMyAuNCAuNiAuNyAuOCAuMiAuMiAuNSAuNCAuOCAuNiAuMyAuMiAuNiAuNSAuOSAuN2w5Mi4yIDUyLjIgLjEgOTIuNHptOC0xMDYuMkwxMjggMzM4LjZjNTQuNy0zMS41IDExMy41LTY1LjMgMTc2LjMtMTAxLjVsODAuMSA0Ni4xQzM1NSAzMDAgMjk2LjIgMzMzLjUgMjA4IDM4My45em0xODQuNSA0LjZsLTE3Ni41IDEwMS42IDAtOTIuM0MzMTcuNCAzNDAgMzc2LjIgMzA2LjQgMzkyLjUgMjk3bDAgOTEuNHptMC0xMTkuMWMtMjAuMy0xMS42LTQ3LjEtMjctODAuMi00Ni4xbDAtOTEuNGMyMC4zIDExLjcgNDcuMSAyNy4xIDgwLjIgNDYuMmwwIDkxLjN6bTgtMTA1LjNsLTgwLjItNDYuMiA4MC4yLTQ2LjIgODAuMiA0Ni4xLTgwLjIgNDYuMnptOCAxMDUuM2wwLTkxLjNjMzMuMi0xOS4xIDYwLTM0LjUgODAuMy00Ni4ybDAgOTEuNC04MC4zIDQ2LjJ6Il0KICAgIH07CiAgICBmYVdwZm9ybXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3Bmb3JtcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjk4IiwgIk00NDggNzUuMmwwIDM2MS43YzAgMjQuMy0xOSA0My4yLTQzLjIgNDMuMmwtMzYxLjYgMEMxOS4zIDQ4MCAwIDQ2MS40IDAgNDM2LjhMMCA3NS4yQzAgNTEuMSAxOC44IDMyIDQzLjIgMzJsMzYxLjcgMGMyNCAwIDQzLjEgMTguOCA0My4xIDQzLjJ6TTQxMC43IDQzNi44bDAtMzYxLjZjMC0zLTIuNi01LjgtNS44LTUuOGwtOS4zIDAtMTEwLjMgNzQuNi02MS4zLTQ5LjktNjEuMiA0OS45LTExMC4zLTc0LjctOS4zIDBjLTMuMiAwLTUuOCAyLjgtNS44IDUuOGwwIDM2MS43YzAgMyAyLjYgNS44IDUuOCA1LjhsMzYxLjcgMGMzLjIgLjEgNS44LTIuNyA1LjgtNS44ek0xNTAuMiAxODZsMCAzNy03My41IDAgMC0zNyA3My41IDB6bTAgNzQuNGwwIDM3LjMtNzMuNSAwIDAtMzcuMyA3My41IDB6bTExLjEtMTQ3LjNsNTQtNDMuNy0xMTguNSAwIDY0LjUgNDMuN3ptMjEwIDcyLjlsMCAzNy0xOTYgMCAwLTM3IDE5NiAwem0wIDc0LjRsMCAzNy4zLTE5NiAwIDAtMzcuMyAxOTYgMHpNMjg2LjcgMTEzLjFsNjQuNS00My43LTExOC40IDAgNTMuOSA0My43ek0zNzEuMyAzMzVsMCAzNy4zLTk5LjQgMCAwLTM3LjMgOTkuNCAweiJdCiAgICB9OwogICAgZmFTcGVha2VyRGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGVha2VyLWRlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzYyIsICJNMjEzLjkgMjk2TDEwMCAyOTZjLTI2LjUgMC01Mi0xMC41LTcwLjctMjkuM1MwIDIyMi41IDAgMTk2IDEwLjUgMTQ0IDI5LjMgMTI1LjMgNzMuNSA5NiAxMDAgOTZsMTMyLjggMGMxMC42IDAgMjAuOCA0LjIgMjguMyAxMS43czExLjcgMTcuNyAxMS43IDI4LjMtNC4yIDIwLjgtMTEuNyAyOC4zLTE3LjcgMTEuNy0yOC4zIDExLjdMOTggMTc2Yy0yNi41IDAtMjYuNCA0MCAwIDQwbDExMy44IDBjMjYuNSAwIDUyIDEwLjUgNzAuNyAyOS4zczI5LjMgNDQuMiAyOS4zIDcwLjctMTAuNSA1Mi0yOS4zIDcwLjctNDQuMiAyOS4zLTcwLjcgMjkuM0w0MCA0MTZjLTEwLjYgMC0yMC44LTQuMi0yOC4zLTExLjdTMCAzODYuNiAwIDM3NiA0LjIgMzU1LjIgMTEuNyAzNDcuNyAyOS40IDMzNiA0MCAzMzZsMTczLjkgMGMyNi41IDAgMjYuNS00MCAwLTQwek0yOTggNDE2YzEzLjUtOS4yIDI1LTIxIDMzLjgtMzQuN3MxNC43LTI5LjIgMTcuMy00NS4zbDY0LjYgMGMyLjYgMCA1LjItLjYgNy42LTEuNnM0LjYtMi41IDYuNC00LjQgMy4zLTQuMSA0LjItNi41IDEuNS01IDEuNC03LjZsMC0xMjBjMC0yLjYtLjUtNS4yLTEuNC03LjZzLTIuNC00LjYtNC4yLTYuNS00LTMuMy02LjQtNC40LTUtMS42LTcuNi0xLjZsLTExNy4yIDBjOS43LTExLjEgMTUtMjUuMyAxNS00MHMtNS4zLTI4LjktMTUtNDBsMTM2LjkgMGM0My40IDAgNzguNiAzNS44IDc4LjYgODBsMCAxNjBjMCA0NC4yLTM1LjIgODAtNzguNiA4MEwyOTggNDE2eiJdCiAgICB9OwogICAgZmFGbGlja3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmxpY2tyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxNmUiLCAiTTQwMCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xNDQuNSAxOTJhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3ptMTU5IDBhNjMuNSA2My41IDAgMSAxIDAgMTI3IDYzLjUgNjMuNSAwIDEgMSAwLTEyN3oiXQogICAgfTsKICAgIGZhQ2NWaXNhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLXZpc2EiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMCIsICJNNDcwLjEgMjMxLjNzNy42IDM3LjIgOS4zIDQ1bC0zMy40IDBjMy4zLTguOSAxNi00My41IDE2LTQzLjUtLjIgLjMgMy4zLTkuMSA1LjMtMTQuOWwyLjggMTMuNHpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTUyLjUgMzMxLjJsNjMuMi0xNTUuMi00Mi41IDAtMzkuMyAxMDYtNC4zLTIxLjUtMTQtNzEuNGMtMi4zLTkuOS05LjQtMTIuNy0xOC4yLTEzLjFsLTY0LjcgMC0uNyAzLjFjMTUuOCA0IDI5LjkgOS44IDQyLjIgMTcuMWwzNS44IDEzNSA0Mi41IDB6bTk0LjQgLjJsMjUuMi0xNTUuNC00MC4yIDAtMjUuMSAxNTUuNCA0MC4xIDB6bTEzOS45LTUwLjhjLjItMTcuNy0xMC42LTMxLjItMzMuNy00Mi4zLTE0LjEtNy4xLTIyLjctMTEuOS0yMi43LTE5LjIgLjItNi42IDcuMy0xMy40IDIzLjEtMTMuNCAxMy4xLS4zIDIyLjcgMi44IDI5LjkgNS45bDMuNiAxLjcgNS41LTMzLjZjLTcuOS0zLjEtMjAuNS02LjYtMzYtNi42LTM5LjcgMC02Ny42IDIxLjItNjcuOCA1MS40LS4zIDIyLjMgMjAgMzQuNyAzNS4yIDQyLjIgMTUuNSA3LjYgMjAuOCAxMi42IDIwLjggMTkuMy0uMiAxMC40LTEyLjYgMTUuMi0yNC4xIDE1LjItMTYgMC0yNC42LTIuNS0zNy43LTguM2wtNS4zLTIuNS01LjYgMzQuOWM5LjQgNC4zIDI2LjggOC4xIDQ0LjggOC4zIDQyLjIgLjEgNjkuNy0yMC44IDcwLTUzek01MjggMzMxLjRsLTMyLjQtMTU1LjQtMzEuMSAwYy05LjYgMC0xNi45IDIuOC0yMSAxMi45bC01OS43IDE0Mi41IDQyLjIgMHM2LjktMTkuMiA4LjQtMjMuM2w1MS42IDBjMS4yIDUuNSA0LjggMjMuMyA0LjggMjMuM2wzNy4yIDB6Il0KICAgIH07CiAgICBmYVVwd29yayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1cHdvcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY0MSIsICJNNDkzLjkgMjk1LjZjLTUwLjMgMC04My41LTM4LjktOTIuOC01My45IDExLjktOTUuMyA0Ni44LTEyNS40IDkyLjgtMTI1LjQgNDUuNSAwIDgwLjkgMzYuNCA4MC45IDg5LjdzLTM1LjQgODkuNy04MC45IDg5LjdsMC0uMXptMC0yMzcuOGMtODEuOSAwLTEyNy44IDUzLjQtMTQxIDEwOC40LTE0LjktMjgtMjUuOS02NS41LTM0LjUtMTAwLjNsLTExMy4yIDAgMCAxNDFjMCA1MS4xLTIzLjMgODktNjguOCA4OXMtNzEuNi0zNy44LTcxLjYtODlsLjUtMTQxLTY1LjMgMCAwIDE0MWMwIDQxLjEgMTMuMyA3OC40IDM3LjYgMTA1LjEgMjUgMjcuNSA1OS4yIDQxLjggOTguOCA0MS44IDc4LjggMCAxMzMuOC02MC40IDEzMy44LTE0Ni45bDAtOTQuOGM4LjIgMzEuMiAyNy44IDkxLjEgNjUuMyAxNDMuNmwtMzUgMTk5LjQgNjYuNCAwIDIzLjEtMTQxLjNjNy42IDYuMyAxNS43IDEyIDI0LjIgMTcgMjIuMiAxNCA0Ny43IDIxLjkgNzMuOSAyMi44IDAgMCA0IC4yIDYuMSAuMiA4MS4yIDAgMTQ1LjktNjIuOSAxNDUuOS0xNDcuOFM1NzUuMyA1Ny45IDQ5NC4xIDU3LjlsLS4yLS4xeiJdCiAgICB9OwogICAgZmFLYWthb1RhbGsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2FrYW8tdGFsayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlN2Q3IiwgIk0yODggMi41YzE1OS4xIDAgMjg4IDEwMS43IDI4OCAyMjcuMSAwIDEyNS40LTEyOC45IDIyNy4xLTI4OCAyMjcuMS0xNy41IDAtMzQuNi0xLjItNTEuMi0zLjYtMTYuNiAxMS43LTExMi42IDc5LjEtMTIxLjcgODAuNCAwIDAtMy43IDEuNC02LjktLjRzLTIuNi02LjctMi42LTYuN0MxMDYuNiA1MTkuOCAxMzAuNiA0MzcuMiAxMzUgNDIxLjkgNTMuOSAzODEuOCAwIDMxMC42IDAgMjI5LjUgMCAxMDQuMSAxMjguOSAyLjUgMjg4IDIuNXpNODYuMiAxNjEuN2MtOSAwLTE2LjMgNy4zLTE2LjMgMTYuM3M3LjMgMTYuMyAxNi4zIDE2LjNsMjUuOSAwIDAgOTguN2MwIDguOCA3LjUgMTUuOSAxNi42IDE1LjlzMTYuNi03LjEgMTYuNi0xNS45bDAtOTguNyAyNS45IDBjOSAwIDE2LjMtNy4zIDE2LjMtMTYuM3MtNy4zLTE2LjMtMTYuMy0xNi4zbC04NS4xIDB6bTE0MC44IDBjLTEwLjggLjItMTkuMyA4LjQtMjIuMSAxNi40TDE2NS4yIDI4Mi43Yy01IDE1LjctLjYgMjEuNSAzLjkgMjMuNiAzLjIgMS41IDYuOSAyLjMgMTAuNiAyLjMgNi45IDAgMTIuMi0yLjggMTMuOC03LjNsOC4yLTIxLjYgNTAuNyAwIDguMiAyMS41YzEuNiA0LjUgNi45IDcuMyAxMy44IDcuMyAzLjcgMCA3LjMtLjggMTAuNi0yLjMgNC42LTIuMSA5LTcuOSAzLjktMjMuNkwyNDkuMiAxNzguMWMtMi44LTgtMTEuMy0xNi4yLTIyLjItMTYuNHptMTgwLjkgMGMtOS4yIDAtMTYuNiA3LjUtMTYuNiAxNi42bDAgMTEzLjdjMCA5LjIgNy41IDE2LjYgMTYuNiAxNi42czE2LjYtNy41IDE2LjYtMTYuNmwwLTM2LjIgNS44LTUuOCAzOC45IDUxLjZjMy4yIDQuMiA4IDYuNiAxMy4zIDYuNiAzLjYgMCA3LjEtMS4xIDEwLTMuMyAzLjUtMi43IDUuOC02LjYgNi40LTExcy0uNS04LjgtMy4yLTEyLjNsLTQwLjktNTQuMiAzNy45LTM3LjhjMi42LTIuNiAzLjktNi4yIDMuNy0xMC4xLS4yLTMuOS0yLTcuNi00LjktMTAuNS0zLjEtMy4xLTcuMy00LjktMTEuNC00LjktMy42IDAtNi44IDEuMy05LjIgMy43bC00Ni4zIDQ2LjQgMC0zNS43YzAtOS4yLTcuNS0xNi42LTE2LjYtMTYuNnptLTkxLjMgMGMtOS4zIDAtMTYuOSA3LjUtMTYuOSAxNi42bDAgMTEyLjhjMCA4LjQgNy4xIDE1LjIgMTUuOSAxNS4zbDUzLjMgMGM4LjggMCAxNS45LTYuOSAxNS45LTE1LjNzLTcuMi0xNS4yLTE1LjktMTUuMmwtMzUuMyAwIDAtOTcuNmMwLTkuMi03LjYtMTYuNi0xNy0xNi42em0tNzMgODguNmwtMzMuMiAwIDE2LjYtNDcuMSAxNi42IDQ3LjF6Il0KICAgIH07CiAgICBmYUZsdXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmx1dHRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjk0IiwgIk00MjkuNSAyMzYuM0wyOTEuNyAzNzQuMSA0MjkuNSA1MTIgMjcyIDUxMmMtMzYuMS0zNi4xLTgyLjEtODIuMS0xMzcuOS0xMzcuOWwxMzcuOS0xMzcuOCAxNTcuNSAwek0yNzIgMEwxNiAyNTYgOTQuOCAzMzQuOCA0MjkuNSAwIDI3MiAweiJdCiAgICB9OwogICAgZmFCdWZmZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnVmZmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4MzciLCAiTTQyOC4yIDM4MC43TDIzMS43IDQ3OC41Yy0yLjMgMS00LjggMS41LTcuMyAxLjVzLTUtLjUtNy4zLTEuNUwyMC41IDM4MC43Yy00LTItNC01LjMgMC03LjNMNjcuNiAzNTBjMi4zLTEgNC44LTEuNSA3LjMtMS41czUgLjUgNy4zIDEuNWwxMzQuOCA2N2MyLjMgMSA0LjggMS41IDcuMyAxLjVzNS0uNSA3LjMtMS41bDEzNC44LTY3YzIuMy0xIDQuOC0xLjUgNy4zLTEuNXM1IC41IDcuMyAxLjVsNDcuMSAyMy40YzQgMiA0IDUuMiAwIDcuMnptMC0xMzYuNWwtNDcuMS0yMy40Yy0yLjMtMS00LjgtMS41LTcuMy0xLjVzLTUgLjUtNy4zIDEuNUwyMzEuNyAyODcuOGMtMi4zIDEtNC44IDEuNS03LjMgMS41cy01LS41LTcuMy0xLjVMODIuMyAyMjAuN2MtMi4zLTEtNC44LTEuNS03LjMtMS41cy01IC41LTcuMyAxLjVMMjAuNSAyNDQuMWMtNCAyLTQgNS4zIDAgNy4zbDE5Ni41IDk3LjhjMi4zIDEgNC44IDEuNSA3LjMgMS41czUtLjUgNy4zLTEuNWwxOTYuNS05Ny44YzQtMiA0LTUuMyAwLTcuM3pNMjAuNSAxMzAuNEwyMTcgMjIwLjdjNC43IDEuOSAxMCAxLjkgMTQuNyAwbDE5Ni41LTkwLjNjNC0xLjkgNC00LjkgMC02LjdMMjMxLjcgMzMuNGMtNC43LTEuOS0xMC0xLjktMTQuNyAwTDIwLjUgMTIzLjdjLTQgMS44LTQgNC45IDAgNi43eiJdCiAgICB9OwogICAgZmFHcmF0aXBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncmF0aXBheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTg0IiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTM3NC4zIDIzMy43TDI1Ny43IDM5MS4zIDE0MS4zIDIzMy43Yy05LTEyLjMtMTkuNy01MiAxNC03NC4zIDI5LTE4LjcgNTYuNC00LjMgNzAuNyAxMi4zIDE2LjQgMTguNSA0OC4xIDE3LjQgNjMuNyAwIDE0LjMtMTYuNiA0MS43LTMxIDcwLjMtMTIuMyAzNCAyMi4zIDIzLjMgNjEuOSAxNC4yIDc0LjN6Il0KICAgIH07CiAgICBmYUdvb2dsZVBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtcGF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzkiLCAiTTEwNS43IDIxNWwwIDQxLjIgNTcuMSAwYy0xLjIgNi42LTMuNiAxMi45LTcuMiAxOC41cy04LjQgMTAuNC0xMy45IDE0LjFjLTkuNSA2LjYtMjEuNyAxMC4zLTM2IDEwLjMtMjcuNiAwLTUwLjktMTguOS01OS4zLTQ0LjItNC40LTEzLjMtNC40LTI3LjcgMC00MSA4LjQtMjUuNSAzMS43LTQ0LjQgNTkuMy00NC40IDcuNS0uMSAxNC45IDEuMiAyMS45IDRzMTMuMyA2LjkgMTguNiAxMi4xTDE3Ni41IDE1NWMtMTkuMS0xOC4xLTQ0LjQtMjguMS03MC43LTI3LjgtMTkuNyAuMS0zOC45IDUuNy01NS42IDE2LjFzLTMwLjEgMjUuMy0zOC44IDQzQzMuOSAyMDEuMiAwIDIxNy43IDAgMjM0LjRzMy45IDMzLjIgMTEuMyA0OC4xbDAgLjJjOC43IDE3LjcgMjIuMSAzMi41IDM4LjggNDNzMzUuOSAxNiA1NS42IDE2YzI4LjUgMCA1Mi41LTkuNSA3MC0yNS45IDIwLTE4LjYgMzEuNC00Ni4yIDMxLjQtNzguOSAwLTcuMy0uNi0xNC42LTEuOC0yMS44bC05OS43IDB6bTM4OS40LTRjLTEwLjEtOS40LTIzLjktMTQuMS00MS40LTE0LjEtMjIuNSAwLTM5LjMgOC4zLTUwLjUgMjQuOUw0MjQuMSAyMzVjNy42LTExLjMgMTguMS0xNyAzMS4zLTE3IDguNCAwIDE2LjUgMy4yIDIyLjcgOC44IDMgMi42IDUuNSA1LjkgNy4xIDkuNnMyLjUgNy42IDIuNSAxMS43bDAgNS41Yy05LjEtNS4xLTIwLjYtNy44LTM0LjYtNy44LTE2LjQgMC0yOS42IDMuOS0zOS41IDExLjhzLTE0LjggMTguMy0xNC44IDMxLjZjLS4yIDUuOSAxIDExLjggMy40IDE3LjJzNiAxMC4yIDEwLjUgMTQuMWM5LjIgOC4zIDIxIDEyLjUgMzQuOCAxMi41IDE2LjMgMCAyOS4yLTcuMyAzOS0yMS45bDEgMCAwIDE3LjcgMjIuNiAwIDAtNzguN2MuMS0xNi42LTQuOS0yOS43LTE1LTM5em0tMTkuMiA4OS4zYy0zLjUgMy41LTcuNiA2LjMtMTIuMiA4LjJzLTkuNSAyLjktMTQuNCAyLjljLTYuNyAuMS0xMy4xLTIuMS0xOC4zLTYuMi0yLjQtMS44LTQuNC00LjItNS43LTYuOXMtMi01LjctMi04LjdjMC03IDMuMi0xMi44IDkuNS0xNy40czE0LjUtNyAyNC4xLTdjMTMuMi0uMiAyMy41IDIuOCAzMC44IDguOCAwIDEwLjEtNCAxOC45LTExLjcgMjYuNHptLTkzLjctMTQyYy01LjMtNS4zLTExLjYtOS41LTE4LjYtMTIuM3MtMTQuNC00LjItMjEuOS00bC02Mi43IDAgMCAxODYuNyAyMy42IDAgMC03NS42IDM5IDBjMTYgMCAyOS41LTUuNCA0MC41LTE1LjkgLjktLjkgMS44LTEuOCAyLjYtMi43IDkuNi0xMC41IDE0LjgtMjQuNCAxNC4zLTM4LjZzLTYuNi0yNy43LTE2LjktMzcuNmwwIDB6bS0xNi42IDYyLjJjLTMgMy4yLTYuNiA1LjctMTAuNiA3LjRzLTguNCAyLjUtMTIuNyAyLjNsLTM5LjYgMCAwLTY1LjIgMzkuNiAwYzguNSAwIDE2LjYgMy4zIDIyLjYgOS4yIDYuMSA2LjEgOS42IDE0LjMgOS44IDIzcy0zLjEgMTctOSAyMy4zbDAgMHpNNjE0LjMgMjAxbC0zNi41IDkxLjctLjUgMC0zNy40LTkxLjctMjUuNyAwIDUxLjggMTE5LjYtMjkuNCA2NC4zIDI0LjMgMCA3OS0xODMuOS0yNS43IDB6Il0KICAgIH07CiAgICBmYUFwcGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcGxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNzkiLCAiTTMxOS4xIDI2OC43Yy0uMi0zNi43IDE2LjQtNjQuNCA1MC04NC44LTE4LjgtMjYuOS00Ny4yLTQxLjctODQuNy00NC42LTM1LjUtMi44LTc0LjMgMjAuNy04OC41IDIwLjctMTUgMC00OS40LTE5LjctNzYuNC0xOS43LTU1LjggLjktMTE1LjEgNDQuNS0xMTUuMSAxMzMuMiAwIDI2LjIgNC44IDUzLjMgMTQuNCA4MS4yIDEyLjggMzYuNyA1OSAxMjYuNyAxMDcuMiAxMjUuMiAyNS4yLS42IDQzLTE3LjkgNzUuOC0xNy45IDMxLjggMCA0OC4zIDE3LjkgNzYuNCAxNy45IDQ4LjYtLjcgOTAuNC04Mi41IDEwMi42LTExOS4zLTY1LjItMzAuNy02MS43LTkwLTYxLjctOTEuOXpNMjYyLjUgMTA0LjVjMjcuMy0zMi40IDI0LjgtNjEuOSAyNC03Mi41LTI0LjEgMS40LTUyIDE2LjQtNjcuOSAzNC45LTE3LjUgMTkuOC0yNy44IDQ0LjMtMjUuNiA3MS45IDI2LjEgMiA0OS45LTExLjQgNjkuNS0zNC4zeiJdCiAgICB9OwogICAgZmFUdW1ibHIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHVtYmxyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxNzMiLCAiTTMwOS45IDQ4MC4zYy0xMy42IDE0LjUtNTAgMzEuNy05Ny40IDMxLjctMTIwLjggMC0xNDctODguOC0xNDctMTQwLjZsMC0xNDQtNDcuNSAwYy01LjUgMC0xMC00LjUtMTAtMTBsMC02OGMwLTcuMiA0LjUtMTMuNiAxMS4zLTE2IDYyLTIxLjggODEuNS03NiA4NC4zLTExNy4xIC44LTExIDYuNS0xNi4zIDE2LjEtMTYuM2w3MC45IDBjNS41IDAgMTAgNC41IDEwIDEwbDAgMTE1LjIgODMgMGM1LjUgMCAxMCA0LjQgMTAgOS45bDAgODEuN2MwIDUuNS00LjUgMTAtMTAgMTBsLTgzLjQgMCAwIDEzMy4yYzAgMzQuMiAyMy43IDUzLjYgNjggMzUuOCA0LjgtMS45IDktMy4yIDEyLjctMi4yIDMuNSAuOSA1LjggMy40IDcuNCA3LjlsMjIgNjQuM2MxLjggNSAzLjMgMTAuNi0uNCAxNC41eiJdCiAgICB9OwogICAgZmFQaG9lbml4U3F1YWRyb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhvZW5peC1zcXVhZHJvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTExIiwgIk05NiA2My40YzQ2LjUtMzYuMSAxMDUuNi01Ni4xIDE2NC41LTU0LjYgMjkuNi0uNCA1OS4xIDUuNCA4Ni45IDE1LjMtMjQuMS00LjYtNDktNi4zLTczLjQtMi41LTQyLjkgNS4zLTgzIDI3LjItMTExLjggNTkuMiA1LjctMSAxMC44LTMuNyAxNi01LjkgMTguMS03LjkgMzcuNS0xMy4zIDU3LjItMTQuOCAxOS43LTIuMSAzOS42LS40IDU5LjMgMS45LTE0LjQgMi44LTI5LjEgNC42LTQzIDkuNi0zNC40IDExLjEtNjUuMyAzMy4yLTg2LjMgNjIuNi0xMy44IDE5LjctMjMuNiA0Mi45LTI0LjcgNjcuMS0uNCAxNi41IDUuMiAzNC44IDE5LjggNDQgMTEuMiA2LjggMjQuNiA5LjIgMzcuNSA2LjcgMTUuNC0yLjUgMzAuMS04LjYgNDMuNi0xNi4zIDExLjUtNi44IDIyLjctMTQuNiAzMi0yNC4zIDMuOC0zLjIgMi41LTguNCAyLjYtMTIuOC0yLjEtLjMtNC40LTEuMS02LjMgLjMtMTEuNCA2LjMtMjMuNCAxMS40LTM1LjggMTUuNC0yMCA2LjItNDIuMiA4LjUtNjIuMSAuOCAxMi44IDEuNyAyNi4xIC4zIDM3LjctNS40IDIwLjItOS43IDM2LjgtMjUuMiA1NC40LTM4LjggMjcuNy0yMS4zIDU3LjUtMzkuOSA4OC45LTU1LjMgMjUuNy0xMiA1Mi45LTIyLjggODEuNi0yNC4xLTE1LjYgMTMuNy0zMi4xIDI2LjUtNDYuOCA0MS40LTE0LjUgMTQtMjcuNSAyOS41LTQwLjEgNDUuMi0zLjUgNC42LTkgNi45LTEzLjYgMTAuMi0yMi40IDE1LTQwLjMgMzUuOC01MS45IDYwLjEtOS4zIDE5LjctMTQuNSA0MS45LTExLjggNjMuNiAxLjkgMTMuNyA4LjcgMjcuNiAyMC45IDM0LjkgMTIuOSA4IDI5IDguMSA0My41IDUuMSAzMi44LTcuNCA2MS40LTI4LjkgODEtNTUuOCAyMC40LTI3LjUgMzAuNS02Mi4yIDI5LjItOTYuMy0uNS03LjUtMS42LTE1LTEuNy0yMi41IDggMTkuNSAxNC44IDM5LjcgMTYuNiA2MC44IDIgMTQuMyAuNyAyOC44LTEuNiA0Mi45LTEuOSAxMS01LjcgMjEuNS03LjggMzIuNCAyMC40LTIyLjkgMzQtNTAuOSAzOS4zLTgxLjEgNS42LTM1LjUgLjctNzEuOS0xNC4yLTEwNC42IDIwLjggMzIgMzIuMyA2OS42IDM1LjcgMTA3LjUgLjUgMTIuNyAuNSAyNS41IDAgMzguMi0yLjggMzQuMy0xMi45IDY3LjYtMjkuNiA5Ny44LTI2LjEgNDcuMy02OCA4NS42LTExNy4yIDEwOC03OC4zIDM2LjItMTc0LjcgMzEuMy0yNDgtMTQuNy0zOS0yMy44LTcwLjYtNTgtOTEuNC05OC43LTE0LjctMjguOS0yMy4zLTYwLjUtMjUuNC05Mi45bDAtMzEuM0MzLjkgMTcyIDQwLjkgMTA1LjggOTYgNjMuNHptMjIyIDgwLjNjNS41LS45IDEwLjgtMi40IDE2LTQuNSA1LTEuOCA5LjItNS45IDEwLjMtMTEuMi05IDUtMTggOS45LTI2LjMgMTUuN3oiXQogICAgfTsKICAgIGZhQ2VudGVyY29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjZW50ZXJjb2RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzODAiLCAiTTIwMS44IDI1NC44YTY0LjEgNjQuMSAwIDEgMSAxMjcuNCAxMy44IDY0LjEgNjQuMSAwIDEgMSAtMTI3LjQtMTMuOHptNDEuNiAyNDguOUM5Ni43IDQ5Ni04LjIgMzY1LjUgMTAuMSAyMjQuMyAyMS4zIDEzNy43IDc1LjkgNjcuNCAxNDkuMiAzMi4zIDMxMC4yLTQ0LjggNDk4LjkgNjkuNyA1MDMuOSAyNDguOSA1MDggMzk1LjkgMzg1LjUgNTExLjEgMjQzLjQgNTAzLjd6bTE3OS45LTE4MGMyNy45LTExOC0xNjAuNS0yMDUuOS0yMzcuMi0yMzQuMi01Ny41IDU2LjMtNjkuMSAxODguNi0zMy44IDM0NC40IDY4LjggMTUuOCAxNjkuMS0yNi40IDI3MS0xMTAuMnoiXQogICAgfTsKICAgIGZhRGViaWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlYmlhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjBiIiwgIk0zODAuNCAyNDUuNmMzLTcuNiA1LjUtMTQgNS4yLTI0LjRsLTQuMyA5YzQuNC0xMy4yIDQtMjcuMSAzLjYtNDAuNC0uMi02LS4zLTExLjggMC0xNy40bC0xLjgtLjVjLTEuNS00NS4yLTQwLjYtOTMuMS03NS4zLTEwOS40LTMwLTEzLjgtNzYuMS0xNi4yLTk3LjMtNS44IDEuMy0xLjEgNC4yLTIgNi44LTIuN2wuMy0uMWMzLjMtMSA2LTEuNyA0LTIuOS0xOS4yIDEuOS0yNC45IDUuNS0zMS4xIDkuNGwtLjEgMGMtNC42IDIuOS05LjUgNi0yMC4zIDguNy0zLjUgMy40IDEuNyAyIDUuOCAuOXM3LjItMS45LS4xIDIuNGMtMy41IDEtNi42IDEuMy05LjYgMS42bC0uMSAwYy04LjMgLjgtMTUuOCAxLjYtMzAuNyAxNyAuOCAxLjMgMy40LS4yIDUuMy0xLjNsLjEtLjFjMi4zLTEuNCAzLjQtMi0xLjcgNC40LTE5LjEtMi40LTYwLjMgNDMuNy02OS4xIDU5bDQuNiAuOGMtMy4yIDgtNi44IDE0LjgtMTAgMjAuOC00LjMgOC4xLTcuOSAxNC45LTguNyAyMS4zLS4zIDUuMS0xIDExLTEuNyAxNy4zLS4xIDEtLjIgMi0uMyAzbC0uMSAuNmMtMyAyNy4zLTYuNyA2MC44IDMuOSA3M2wtMS4zIDEzYy42IDEuMiAxLjEgMi4zIDEuNiAzLjUgLjIgLjQgLjQgLjggLjUgMS4xIDEgMi4xIDIgNC4yIDMuMyA2LjJsLTMgLjJjNyAyMi4xIDEwLjggMjIuNSAxNS4xIDIyLjkgNC40IC40IDkuMyAuOSAxOC43IDI0LjItMi43LS45LTUuNS0xLjktOS40LTcuMi0uNSA0LjEgNS44IDE2LjMgMTMuMSAyNS44bC0zLjEgMy42YzIuMSAzLjcgNC44IDYuMiA3LjYgOC44IDEgLjkgMi4xIDEuOSAzLjEgMi45LTExLjktNi41IDMuMiAxMy43IDExLjkgMjUuMiAuOCAxLjEgMS41IDIgMi4yIDIuOSAxLjQgMS45IDIuNSAzLjQgMi45IDQuMWwyLjQtNC4yYy0uMyA2LjEgNC4zIDEzLjkgMTMuMSAyNC43bDcuMy0uM2MzIDYgMTQgMTYuNyAyMC43IDE3LjJsLTQuNCA1LjhjOC4xIDIuNiAxMC4zIDQuMyAxMi43IDYuMiAyLjYgMi4xIDUuNCA0LjMgMTYuMSA4LjFsLTQuMi03LjRjMy41IDMgNi4yIDUuOSA4LjggOC43bC4xIC4xYzUuMiA1LjYgOS45IDEwLjYgMTkuNyAxNS4zIDEwLjcgMy43IDE2LjYgNC43IDIyLjcgNS44IC4zIDAgLjYgLjEgLjkgLjEgNS40IC44IDExLjIgMS44IDIwLjggNC41LTEuMS0uMS0yLjItLjEtMy4zLS4xLTIuMy0uMS00LjctLjEtNy0uMS0xNC40LS4yLTI5LjItLjQtNDIuNy01LjItOTYuNi0yNS43LTE4NC45LTEzOS0xNzguNC0yNTUuNi0uNi05LjktLjMtMjAuOSAwLTMwLjcgLjQtMTMuNSAuNy0yNC44LTEuNi0yOC4zbDEtMy4xYzUuMy0xNy40IDExLjctMzguMiAyMy44LTYyLjhsLS4xLS4yIDAtLjFjLjQgLjQgMy40IDMuNCA4LjgtNS44IC44LTEuOCAxLjYtMy43IDIuNC01LjYgLjUtMS4xIC45LTIuMiAxLjQtMy4yIDIuNS02LjEgNS4xLTEyLjMgOC40LTE3LjlsMi42LS42YzEuNy0xMC4xIDE3LTIzLjggMjkuOC0zNS4ybDEuMS0xYzUuNy01LjEgMTAuNy05LjcgMTMuNi0xMy4xbC43IDQuNGMxNy0xNS45IDQ0LjYtMjcuNSA2NS42LTM2LjRsLjUtLjJjNC44LTIgOS4zLTMuOSAxMy4zLTUuNy0zLjQgMy44IDIuMiAyLjcgMTAgMSA0LjgtMSAxMC40LTIuMSAxNS4zLTIuNGwtMy45IDIuMWMtMi43IDEuNC01LjQgMi44LTggNC42IDguMS0yIDExLjctMS40IDE1LjctLjhsLjMgMGMzLjUgLjYgNy4zIDEuMiAxNC42IC4yLTUuNiAuOC0xMi4zIDMtMTEuMiAzLjggNy45IC45IDEyLjgtLjEgMTcuMi0xbC4yIDBjNS41LTEuMSAxMC4zLTIgMTkuMyAuOWwtMS00LjhjNy4zIDIuNiAxMi43IDQuMyAxNy41IDUuOGwuNSAuMWMxMCAzIDE3LjYgNS4zIDM0LjIgMTQuMSAzLjIgLjIgNS4zLS41IDcuNC0xLjJsLjEgMGMzLjYtMS4xIDctMi4xIDE1LjIgMS4yIC4zIC41IC41IDEgLjcgMS40IC4xIC4yIC4yIC41IC4zIC43bDAgLjFjMSAyLjYgMS44IDQuNiAxNC42IDEyLjEgMS43LS43LTIuNy00LjctNi40LTguMmwtLjEtLjFjLS4yLS4xLS4zLS4zLS41LS40IDMyLjIgMTcuMyA2Ny4zIDU0LjEgNzggOTMuNS02LTExLjEtNS4yLTUuNS00LjMgLjUgLjYgNCAxLjIgOC4xLS4yIDcuNSA0LjUgMTIuMSA4LjEgMjQuNSAxMC40IDM3LjRsLS44LTIuOS0uMS0uM2MtMy4zLTExLjktOS42LTM0LjMtMTkuOS00OS4zLS40IDQuMy0yLjggMy45LTUuMiAzLjVsLS4xIDBjLTMuMy0uNi02LjItMS4xLTEuOSAxMi42IDIuNiAzLjggMy4xIDIuNCAzLjUgMS4xIC41LTEuNSAuOS0yLjcgNC43IDUuMiAuMSA0LjEgMSA4LjIgMi4xIDEyLjdsLjEgLjZjLjEgLjMgLjEgLjUgLjIgLjhsLjEgLjZjLjYgMi42IDEuMyA1LjQgMS44IDguNC0xLjEtLjItMi4zLTIuMi0zLjQtNC4yLTEuNC0yLjQtMi44LTQuNy0zLjctMy4yIDIuNCAxMS41IDYuNSAxNy40IDggMTguMy0uMyAuNi0uNiAuNy0xLjEgLjctLjggMC0xLjggLjEtMS45IDUuMyAuNyAxMy43IDMuMyAxMi41IDUuMyAxMS42IC42LS4zIDEuMi0uNiAxLjctLjQtLjYgMi41LTEuNiA1LjEtMi43IDcuOS0yLjggNy4xLTYgMTUuNC0zLjQgMjYuMS0uOC0zLTItNi0zLjEtOC45bC0uMS0uNGMtLjItLjUtLjQtMS0uNi0xLjUtLjMtLjgtLjYtMS42LS45LTIuMy0uNiA0LjQtLjMgNy43LS4xIDEwLjZsMCAuN2MuNCA1LjMgLjcgMTAtMyAxOS45IDQuMy0xNC4yIDMuOC0yNi45LS4yLTIwLjggMSAxMC45LTMuNyAyMC40LTggMjguOWwtLjEgLjJjLTMuNiA3LjEtNi44IDEzLjUtNS45IDE5LjNsLTUuMi03LjFjLTcuNSAxMC45LTcgMTMuMy02LjUgMTUuNWwwIC4xYy41IDEuOSAxIDMuOC0zLjQgMTAuOCAxLjctMi45IDEuMy0zLjYgMS00LjItLjQtLjgtLjctMS41IDEuNy01LjEtMS42IC4xLTUuNSAzLjktMTAuMSA4LjUtMy45IDMuOS04LjUgOC40LTEyLjggMTEuOC0zNy41IDMwLjEtODIuMyAzNC0xMjUuNiAxNy44IC4yLTEtLjItMi4xLTMuMS00LjEtMzYuOC0yOC4yLTU4LjUtNTIuMS01MC45LTEwNy41IDIuMS0xLjYgMy42LTUuOCA1LjMtMTAuOGwuMi0uNCAuMS0uMyAwLS4xYzIuOS04LjQgNi41LTE4LjggMTQuMy0yMy44IDcuOC0xNy4zIDMxLjMtMzMuMyA1Ni40LTMzLjcgMjUuNi0xLjQgNDcuMiAxMy43IDU4LjEgMjcuOS0xOS44LTE4LjQtNTIuMS0yNC03OS43LTEwLjQtMjguMiAxMi43LTQ1IDQzLjgtNDIuNSA3NC43IC4zLS40IC42LS42IC45LS44bC4yLS4yYy42LS41IDEuMS0uOSAxLjQtMy4zLS45IDYwLjIgNjQuOCAxMDQuMyAxMTIuMSA4MmwuNiAxLjNjMTIuNy0zLjUgMTUuOS02LjUgMjAuMy0xMC43bC4xLS4xYzIuMi0yLjEgNC43LTQuNSA4LjktNy4zLS4zIC43LTEuMyAxLjctMi40IDIuNy0yLjIgMi4xLTQuNiA0LjUtMS42IDQuNiA1LTEuMyAxOC41LTEzLjQgMjguNS0yMi4zIC42LS41IDEuMi0xIDEuNy0xLjUgMS41LTEuMyAyLjgtMi41IDQtMy42bC4zLS4zYzEuOS00LjIgMS42LTUuNiAxLjMtN2wwLS4xYy0uNC0xLjYtLjgtMy4zIDIuNC05LjZsNy4zLTMuN2MuOC0yLjEgMS41LTQuMSAyLjItNiAuMi0uNiAuNS0xLjIgLjctMS44bC0uNC0uMi0uMS0uMXpNMjQ4IDMzNC4xYy02LTMtMTMuNy04LjktMTQuOC0xMS40bC0uNCAuM2MtLjMgLjYtLjUgMS4zLS4yIDIuMi0xMi4yLTUuNy0yMy40LTE0LjMtMzIuNi0yNC45IDQuOSA3LjEgMTAuMSAxNC4xIDE3IDE5LjUtNi45LTIuMy0xNS4xLTExLjgtMjEuNi0xOS4zbC0uMS0uMWMtNC4zLTUtNy45LTkuMS05LjctOS41IDE5LjggMzUuNSA4MC41IDYyLjMgMTEyLjMgNDktMTQuNyAuNS0zMy40IC4zLTQ5LjktNS44em03OS4zLTExOS43bC0uMS0uMmMtLjUtMS41LTEuMS0zLjEtMS43LTMuNCAxLjQtNS44IDUuNC0xMC43IDQuNCA0LjYtMSAzLjgtMS44IDEuNS0yLjYtMXptLTQuMiAyMi4yYy0xLjMgNy45LTUgMTUuNS0xMC4xIDIyLjUgLjItMi0xLjItMi40LTIuNi0yLjgtMi45LS44LTUuOS0xLjYgNS42LTE2LjEtLjUgMS45LTIuMSA0LjYtMy43IDcuM2wtLjMgLjRjLTMuNiA1LjktNi43IDExIDQgNC4zbDEtMS44YzIuNi00LjUgNS04LjggNi0xMy44bC4xIDB6bS01NS42IDMzLjljNy4xIC42IDE0LjEgLjYgMjEtMS4xLTIuNSAyLjQtNS4yIDQuOC04LjMgNy4yLTExLjEtMS43LTIxLjItNi0xMi43LTYuMXptLTkyLjYgMTEuNmMzLjYgNy4xIDYuNCAxMS41IDkgMTUuN2wuMSAuMmMyLjMgMy43IDQuNCA3LjEgNi44IDExLjctNS4xLTQuMi04LjctOS41LTEyLjUtMTVsLS4zLS41Yy0xLjQtMi4xLTIuOC00LjItNC40LTYuMmwxLjItNS45IC4xIDB6bTcuNS05LjZjMS42IDMuMyAzLjIgNi40IDUuNyA5LjFsMi42IDcuNy0xLjMtMi4xYy0zLjItNS4zLTYuMy0xMC42LTgtMTYuN2wxIDJ6bTIzOC45LTQxLjZjLTIuMyAxNy40LTcuNyAzNC42LTE2IDUwLjMgNy42LTE0LjkgMTIuNS0zMC45IDE0LjgtNDcuMmwxLjItMy4xek0zNS44IDExMC42Yy40IC44IDEuNCAuNSAyLjMgLjMgMS45LS41IDMuNi0uOS0uMSA3LjYtLjUgLjMtMSAuNy0xLjUgMS0xLjQgLjktMi44IDEuOS0zLjkgMyAxLjktMy44IDMuNS03LjQgMy4yLTExLjl6TTI1LjUgMTUyLjNjLS43IDMuNy0xLjUgNy45LTMuNCAxMy45IC4yLTEuOSAwLTMuNS0uMi00LjlsMC0uMWMtLjQtMy40LS43LTYuMyA0LjMtMTIuOC0uMyAxLjItLjUgMi41LS43IDMuOGwwIC4xeiJdCiAgICB9OwogICAgZmFNYXN0b2RvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXN0b2RvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGY2IiwgIk00MzMgMTc5LjFjMC05Ny4yLTYzLjctMTI1LjctNjMuNy0xMjUuNy02Mi41LTI4LjctMjI4LjYtMjguNC0yOTAuNSAwIDAgMC02My43IDI4LjUtNjMuNyAxMjUuNyAwIDExNS43LTYuNiAyNTkuNCAxMDUuNiAyODkuMSA0MC41IDEwLjcgNzUuMyAxMyAxMDMuMyAxMS40IDUwLjgtMi44IDc5LjMtMTguMSA3OS4zLTE4LjFsLTEuNy0zNi45cy0zNi4zIDExLjQtNzcuMSAxMC4xYy00MC40LTEuNC04My00LjQtODkuNi01NC0uNi00LjYtLjktOS4zLS45LTEzLjkgODUuNiAyMC45IDE1OC43IDkuMSAxNzguNyA2LjcgNTYuMS02LjcgMTA1LTQxLjMgMTExLjItNzIuOSA5LjgtNDkuOCA5LTEyMS41IDktMTIxLjV6TTM1Ny45IDMwNC4zbC00Ni42IDAgMC0xMTQuMmMwLTQ5LjctNjQtNTEuNi02NCA2LjlsMCA2Mi41LTQ2LjMgMCAwLTYyLjVjMC01OC41LTY0LTU2LjYtNjQtNi45bDAgMTE0LjItNDYuNyAwYzAtMTIyLjEtNS4yLTE0Ny45IDE4LjQtMTc1IDI1LjktMjguOSA3OS44LTMwLjggMTAzLjggNi4xbDExLjYgMTkuNSAxMS42LTE5LjVjMjQuMS0zNy4xIDc4LjEtMzQuOCAxMDMuOC02LjEgMjMuNyAyNy4zIDE4LjQgNTMgMTguNCAxNzVsMCAweiJdCiAgICB9OwogICAgZmFTa2V0Y2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2tldGNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YzYiLCAiTTI3LjggMTYyLjJsLTE4LjUgMjQuOSA5MC41IDAgNi45LTEzMC43LTc4LjkgMTA1Ljh6TTM5Ni42IDQ1LjdMMjY4IDMyIDQwMy43IDE3OS4yIDM5Ni42IDQ1Ljd6TTExMi41IDIxOC4zbC0xMS4yLTIyLTkxLjEgMCAyMjQuOSAyNjEuNy0xMjIuNi0yMzkuN3ptMi0zMS4ybDI4NCAwQzM0MC42IDEyNC4zIDI5My4zIDcyLjkgMjU2LjYgMzNMMTE0LjUgMTg3LjF6bTI5Ny4zIDkuMWwtMTMzLjkgMjYxLjggMjI0LjgtMjYxLjctOTAuOSAwIDAtLjF6TTQxNS43IDY5bC05LjQtMTIuNiAuOSAxNy4zIDYuMSAxMTMuNCA5MC4zIDAtODcuOS0xMTguMXpNMTEzLjggOTMuNUwxMDkuMiAxNzkuMSAyNDUgMzIgMTE2LjQgNDUuNyAxMTMuOCA5My41ek00MDEuNSAxOTYuMmwtMjkwIDBjMTguMiAzNS42IDY2LjYgMTMwLjIgMTQ1LjEgMjgzLjhMNDAxLjUgMTk2LjJ6Il0KICAgIH07CiAgICBmYVdlYkF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2ViLWF3ZXNvbWUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY4MiIsICJNMzcyLjIgNTJjMCAyMC45LTEyLjQgMzktMzAuMiA0Ny4yTDQ0OCAxOTIgNTUyLjQgMTcxLjFjLTUuMy03LjctOC40LTE3LjEtOC40LTI3LjEgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDI2LTIwLjYgNDcuMS00Ni40IDQ4TDQ4MSA0NDIuM2MtMTAuMyAyMy0zMy4yIDM3LjctNTguNCAzNy43bC0yMDUuMiAwYy0yNS4yIDAtNDgtMTQuOC01OC40LTM3LjdMNDYuNCAxOTJDMjAuNiAxOTEuMSAwIDE3MCAwIDE0NCAwIDExNy41IDIxLjUgOTYgNDggOTZzNDggMjEuNSA0OCA0OGMwIDEwLjEtMy4xIDE5LjQtOC40IDI3LjFMMTkyIDE5MiAyOTguMSA5OS4xYy0xNy43LTguMy0zMC0yNi4zLTMwLTQ3LjEgMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwuMSAweiJdCiAgICB9OwogICAgZmFTYXNzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhc3MiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxZSIsICJNMzAxLjggMzc4LjlsMCAwem0yNDkuMS04N2MtMjAuMSAwLTQwIDQuNi01OCAxMy41LTUuOS0xMS45LTEyLTIyLjMtMTMtMzAuMS0xLjItOS4xLTIuNS0xNC41LTEuMS0yNS4zczcuNy0yNi4xIDcuNi0yNy4yLTEuNC02LjYtMTQuMy02LjctMjQgMi41LTI1LjMgNS45Yy0yLjMgNi4yLTQuMSAxMi42LTUuMyAxOS4xLTIuMyAxMS43LTI1LjggNTMuNS0zOS4xIDc1LjMtNC40LTguNS04LjEtMTYtOC45LTIyLTEuMi05LjEtMi41LTE0LjUtMS4xLTI1LjNzNy43LTI2LjEgNy42LTI3LjItMS40LTYuNi0xNC4zLTYuNy0yNCAyLjUtMjUuMyA1LjktMi43IDExLjQtNS4zIDE5LjEtMzMuOSA3Ny4zLTQyLjEgOTUuNGMtNC4yIDkuMi03LjggMTYuNi0xMC40IDIxLjYtLjQgLjgtLjcgMS4zLS45IDEuNyAuMy0uNSAuNS0xIC41LS44LTIuMiA0LjMtMy41IDYuNy0zLjUgNi43bDAgLjFjLTEuNyAzLjItMy42IDYuMS00LjUgNi4xLS42IDAtMS45LTguNCAuMy0xOS45IDQuNy0yNC4yIDE1LjgtNjEuOCAxNS43LTYzLjEtLjEtLjcgMi4xLTcuMi03LjMtMTAuNy05LjEtMy4zLTEyLjQgMi4yLTEzLjIgMi4ycy0xLjQgMi0xLjQgMiAxMC4xLTQyLjQtMTkuNC00Mi40Yy0xOC40IDAtNDQgMjAuMi01Ni42IDM4LjUtNy45IDQuMy0yNSAxMy42LTQzIDIzLjUtNi45IDMuOC0xNCA3LjctMjAuNyAxMS40LS41LS41LS45LTEtMS40LTEuNS0zNS44LTM4LjItMTAxLjktNjUuMi05OS4xLTExNi41IDEtMTguNyA3LjUtNjcuOCAxMjcuMS0xMjcuNCA5OC00OC44IDE3Ni4zLTM1LjQgMTg5LjgtNS42IDE5LjQgNDIuNS00MS45IDEyMS42LTE0My43IDEzMy0zOC44IDQuMy01OS4yLTEwLjctNjQuMy0xNi4zLTUuMy01LjktNi4xLTYuMi04LjEtNS4xLTMuMyAxLjgtMS4yIDcgMCAxMC4xIDMgNy45IDE1LjUgMjEuOSAzNi44IDI4LjkgMTguNyA2LjEgNjQuMiA5LjUgMTE5LjItMTEuOCA2MS44LTIzLjggMTA5LjktOTAuMSA5NS44LTE0NS42LTE0LjQtNTYuNC0xMDcuOS03NC45LTE5Ni4zLTQzLjUtNTIuNyAxOC43LTEwOS43IDQ4LjEtMTUwLjcgODYuNC00OC43IDQ1LjYtNTYuNSA4NS4zLTUzLjMgMTAxLjkgMTEuNCA1OC45IDkyLjYgOTcuMyAxMjUuMSAxMjUuNy0xLjYgLjktMy4xIDEuNy00LjUgMi41LTE2LjMgOC4xLTc4LjIgNDAuNS05My43IDc0LjctMTcuNSAzOC44IDIuOSA2Ni42IDE2LjMgNzAuNCA0MS44IDExLjYgODQuNi05LjMgMTA3LjYtNDMuNnMyMC4yLTc5LjEgOS42LTk5LjVjLS4xLS4zLS4zLS41LS40LS44IDQuMi0yLjUgOC41LTUgMTIuOC03LjUgOC4zLTQuOSAxNi40LTkuNCAyMy41LTEzLjMtNCAxMC44LTYuOSAyMy44LTguNCA0Mi42LTEuOCAyMiA3LjMgNTAuNSAxOS4xIDYxLjcgNS4yIDQuOSAxMS41IDUgMTUuNCA1IDEzLjggMCAyMC0xMS40IDI2LjktMjUgOC41LTE2LjYgMTYtMzUuOSAxNi0zNS45cy05LjQgNTIuMiAxNi4zIDUyLjJjOS40IDAgMTguOC0xMi4xIDIzLTE4LjNsMCAuMXMuMi0uNCAuNy0xLjJjMS0xLjUgMS41LTIuNCAxLjUtMi40bDAtLjNjMy44LTYuNSAxMi4xLTIxLjQgMjQuNi00NiAxNi4yLTMxLjggMzEuNy03MS41IDMxLjctNzEuNSAxLjUgOC43IDMuNiAxNy4zIDYuMiAyNS44IDIuOCA5LjUgOC43IDE5LjkgMTMuNCAzMC0zLjggNS4yLTYuMSA4LjItNi4xIDguMiAwIC4xIDAgLjEgLjEgLjItMyA0LTYuNCA4LjMtOS45IDEyLjUtMTIuOCAxNS4yLTI4IDMyLjYtMzAgMzcuNi0yLjQgNS45LTEuOCAxMC4zIDIuOCAxMy43IDMuNCAyLjYgOS40IDMgMTUuNyAyLjUgMTEuNS0uOCAxOS42LTMuNiAyMy41LTUuNCA3LjItMi42IDE0LTYuMSAyMC4yLTEwLjYgMTIuNS05LjIgMjAuMS0yMi40IDE5LjQtMzkuOC0uNC05LjYtMy41LTE5LjItNy4zLTI4LjIgMS4xLTEuNiAyLjMtMy4zIDMuNC01IDE5LjgtMjguOSAzNS4xLTYwLjYgMzUuMS02MC42IDEuNSA4LjcgMy42IDE3LjMgNi4yIDI1LjggMi40IDguMSA3LjEgMTcgMTEuNCAyNS43LTE4LjYgMTUuMS0zMC4xIDMyLjYtMzQuMSA0NC4xLTcuNCAyMS4zLTEuNiAzMC45IDkuMyAzMy4xIDQuOSAxIDExLjktMS4zIDE3LjEtMy41IDcuNy0yLjYgMTUtNi4zIDIxLjYtMTEuMSAxMi41LTkuMiAyNC42LTIyLjEgMjMuOC0zOS42LS4zLTcuOS0yLjUtMTUuOC01LjQtMjMuNCAxNS43LTYuNiAzNi4xLTEwLjIgNjIuMS03LjIgNTUuNyA2LjUgNjYuNiA0MS4zIDY0LjUgNTUuOHMtMTMuOCAyMi42LTE3LjcgMjUtNS4xIDMuMy00LjggNS4xYy41IDIuNiAyLjMgMi41IDUuNiAxLjkgNC42LS44IDI5LjItMTEuOCAzMC4zLTM4LjcgMS42LTM0LTMxLjEtNzEuNC04OS03MS4xbDAgMHpNMTIxLjggNDM2LjZjLTE4LjQgMjAuMS00NC4yIDI3LjctNTUuMyAyMS4zLTExLjktNi45LTcuMi0zNi41IDE1LjUtNTcuOSAxMy44LTEzIDMxLjYtMjUgNDMuNC0zMi40IDIuNy0xLjYgNi42LTQgMTEuNC02LjkgLjgtLjUgMS4yLS43IDEuMi0uNyAuOS0uNiAxLjktMS4xIDIuOS0xLjcgOC4zIDMwLjQgLjMgNTcuMi0xOS4xIDc4LjNsMCAwem0xMzQuNC05MS40Yy02LjQgMTUuNy0xOS45IDU1LjctMjguMSA1My42LTctMS44LTExLjMtMzIuMy0xLjQtNjIuMyA1LTE1LjEgMTUuNi0zMy4xIDIxLjktNDAuMSAxMC4xLTExLjMgMjEuMi0xNC45IDIzLjgtMTAuNCAzLjUgNS45LTEyLjIgNDkuNC0xNi4yIDU5LjJ6bTExMSA1M2MtMi43IDEuNC01LjIgMi4zLTYuNCAxLjYtLjktLjUgMS4xLTIuNCAxLjEtMi40czEzLjktMTQuOSAxOS40LTIxLjdjMy4yLTQgNi45LTguNyAxMC45LTEzLjkgMCAuNSAuMSAxIC4xIDEuNi0uMSAxNy45LTE3LjMgMzAtMjUuMSAzNC44bDAgMHptODUuNi0xOS41Yy0yLTEuNC0xLjctNi4xIDUtMjAuNyAyLjYtNS43IDguNi0xNS4zIDE5LTI0LjUgMS4yIDMuNSAxLjggNy4xIDEuOSAxMC44LS4xIDIyLjUtMTYuMiAzMC45LTI1LjkgMzQuNGwwIDB6Il0KICAgIH07CiAgICBmYVRocmVlbWEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhyZWVtYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlODVmIiwgIk04Ny40IDQ0NS4xYzE4LjUgMCAzMy41IDE1IDMzLjUgMzMuNFMxMDUuOSA1MTIgODcuNCA1MTIgNTQgNDk3IDU0IDQ3OC41IDY5IDQ0NS4xIDg3LjQgNDQ1LjF6bTEwOS4yIDBjMTguNSAwIDMzLjUgMTUgMzMuNSAzMy40cy0xNSAzMy41LTMzLjUgMzMuNS0zMy40LTE1LTMzLjQtMzMuNSAxNS0zMy40IDMzLjQtMzMuNHptMTA5LjMgMGMxOC41IDAgMzMuNSAxNSAzMy41IDMzLjRzLTE1IDMzLjUtMzMuNSAzMy41LTMzLjUtMTUtMzMuNS0zMy41IDE1LTMzLjQgMzMuNS0zMy40ek0xOTIuMyAuM2MxMDkuOCAwIDE5OS4yIDg5LjMgMTk5LjIgMTk5LjFTMzAyLjIgMzk4LjUgMTkyLjQgMzk4LjVjLTQwLjUgMC03OC4xLTEyLjEtMTA5LjYtMzIuOWwtNzYuNSAyNC41IDI0LjgtNzRDNy4zIDI4My40LTYuOCAyNDMtNi44IDE5OS40LTYuOCA4OS43IDgyLjUgLjMgMTkyLjMgLjN6bS4xIDkzLjdjLTMxLjYgMC01Ny4zIDI1LjgtNTcuMyA1Ny4zbDAgMjYuNy0xLjggMGMtMTAgMC0xOCA4LTE4IDE4bDAgNzIuM2MwIDEwIDggMTggMTggMThsMTE4LjEgMGMxMCAwIDE4LTggMTgtMThsLjEgMCAwLTcyLjNjMC0xMC04LjEtMTgtMTgtMThsLTEuOCAwIDAtMjYuN2MwLTMxLjYtMjUuOC01Ny4zLTU3LjMtNTcuM3ptLS4xIDIzLjVjMTguNiAwIDMzLjggMTUuMSAzMy44IDMzLjhsMCAyNi43LTY3LjYgMCAwLTI2LjdjMC0xOC42IDE1LjEtMzMuOCAzMy44LTMzLjh6Il0KICAgIH07CiAgICBmYVNxdWFyZVdoYXRzYXBwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS13aGF0c2FwcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ3aGF0c2FwcC1zcXVhcmUiXSwgImY0MGMiLCAiTTkyLjEgMjU0LjZjMCAyNC45IDcgNDkuMiAyMC4yIDcwLjFsMy4xIDUtMTMuMyA0OC42IDQ5LjktMTMuMSA0LjggMi45YzIwLjIgMTIgNDMuNCAxOC40IDY3LjEgMTguNGwuMSAwYzcyLjYgMCAxMzMuMy01OS4xIDEzMy4zLTEzMS44IDAtMzUuMi0xNS4yLTY4LjMtNDAuMS05My4yLTI1LTI1LTU4LTM4LjctOTMuMi0zOC43LTcyLjcgMC0xMzEuOCA1OS4xLTEzMS45IDEzMS44ek0yNzQuOCAzMzBjLTEyLjYgMS45LTIyLjQgLjktNDcuNS05LjktMzYuOC0xNS45LTYxLjgtNTEuNS02Ni45LTU4LjctLjQtLjYtLjctLjktLjgtMS4xLTItMi42LTE2LjItMjEuNS0xNi4yLTQxIDAtMTguNCA5LTI3LjkgMTMuMi0zMi4zIC4zLS4zIC41LS41IC43LS44IDMuNi00IDcuOS01IDEwLjYtNSAyLjYgMCA1LjMgMCA3LjYgLjFsLjggMGMyLjMgMCA1LjIgMCA4LjEgNi44IDEuMiAyLjkgMyA3LjMgNC45IDExLjggMy4zIDggNi43IDE2LjMgNy4zIDE3LjYgMSAyIDEuNyA0LjMgLjMgNi45LTMuNCA2LjgtNi45IDEwLjQtOS4zIDEzLTMuMSAzLjItNC41IDQuNy0yLjMgOC42IDE1LjMgMjYuMyAzMC42IDM1LjQgNTMuOSA0Ny4xIDQgMiA2LjMgMS43IDguNi0xIDIuMy0yLjYgOS45LTExLjYgMTIuNS0xNS41IDIuNi00IDUuMy0zLjMgOC45LTJzMjMuMSAxMC45IDI3LjEgMTIuOWMuOCAuNCAxLjUgLjcgMi4xIDEgMi44IDEuNCA0LjcgMi4zIDUuNSAzLjYgLjkgMS45IC45IDkuOS0yLjQgMTkuMS0zLjMgOS4zLTE5LjEgMTcuNy0yNi43IDE4Ljh6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0xNDguMSAzOTMuOUw2NCA0MTYgODYuNSAzMzMuOGMtMTMuOS0yNC0yMS4yLTUxLjMtMjEuMi03OS4zIC4xLTg3LjQgNzEuMi0xNTguNSAxNTguNi0xNTguNSA0Mi40IDAgODIuMiAxNi41IDExMi4yIDQ2LjUgMjkuOSAzMCA0Ny45IDY5LjggNDcuOSAxMTIuMiAwIDg3LjQtNzIuNyAxNTguNS0xNjAuMSAxNTguNS0yNi42IDAtNTIuNy02LjctNzUuOC0xOS4zeiJdCiAgICB9OwogICAgZmFXaGF0c2FwcFNxdWFyZSA9IGZhU3F1YXJlV2hhdHNhcHA7CiAgICBmYVNreXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNreXBlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxN2UiLCAiTTQyNC43IDI5OS44YzIuOS0xNCA0LjctMjguOSA0LjctNDMuOCAwLTExMy41LTkxLjktMjA1LjMtMjA1LjMtMjA1LjMtMTQuOSAwLTI5LjcgMS43LTQzLjggNC43LTE5LTE0LjctNDIuNi0yMy40LTY4LjMtMjMuNC02MS44IDAtMTEyIDUwLjItMTEyIDExMiAwIDI1LjcgOC43IDQ5LjMgMjMuMyA2OC4yLTIuOSAxNC00LjcgMjguOS00LjcgNDMuOCAwIDExMy41IDkxLjkgMjA1LjMgMjA1LjMgMjA1LjMgMTQuOSAwIDI5LjctMS43IDQzLjgtNC43IDE5IDE0LjYgNDIuNiAyMy4zIDY4LjIgMjMuMyA2MS44IDAgMTEyLTUwLjIgMTEyLTExMiAuMS0yNS42LTguNi00OS4yLTIzLjItNjguMXpNMjMwLjEgMzkxLjNjLTY1LjYgMC0xMjAuNS0yOS4yLTEyMC41LTY1IDAtMTYgOS0zMC42IDI5LjUtMzAuNiAzMS4yIDAgMzQuMSA0NC45IDg4LjEgNDQuOSAyNS43IDAgNDIuMy0xMS40IDQyLjMtMjYuMyAwLTE4LjctMTYtMjEuNi00Mi0yOC02Mi41LTE1LjQtMTE3LjgtMjItMTE3LjgtODcuMiAwLTU5LjIgNTguNi04MS4xIDEwOS4xLTgxLjEgNTUuMSAwIDExMC44IDIxLjkgMTEwLjggNTUuNCAwIDE2LjktMTEuNCAzMS44LTMwLjMgMzEuOC0yOC4zIDAtMjkuMi0zMy41LTc1LTMzLjUtMjUuNyAwLTQyIDctNDIgMjIuNSAwIDE5LjggMjAuOCAyMS44IDY5LjEgMzMgNDEuNCA5LjMgOTAuNyAyNi44IDkwLjcgNzcuNiAwIDU5LjEtNTcuMSA4Ni41LTExMiA4Ni41eiJdCiAgICB9OwogICAgZmFBbmd1bGFyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFuZ3VsYXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQyMCIsICJNMTg1LjcgMjY4LjFsNzYuMiAwLTM4LjEtOTEuNi0zOC4xIDkxLjZ6TTIyMy44IDMyTDE2IDEwNi40IDQ3LjggMzgyLjEgMjIzLjggNDgwIDM5OS44IDM4Mi4xIDQzMS42IDEwNi40IDIyMy44IDMyek0zNTQgMzczLjhsLTQ4LjYgMC0yNi4yLTY1LjQtMTEwLjYgMC0yNi4yIDY1LjQtNDguNyAwIDEzMC4xLTI5Mi4zIDEzMC4yIDI5Mi4zeiJdCiAgICB9OwogICAgZmFDaXJjbGVadWxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtenVsaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg1MSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6TTI0My41IDI0MGMxLjItMS45LS45LTQuMi0yLjYtMi44bC04OSA3OS41Yy05LjIgNy4yLTE1LjIgMTkuMS0xNS4yIDMyLjUgMCAyMS45IDE2IDM5LjggMzUuNyAzOS44bDE2Ny4zIDBjMTkuNiAwIDM1LjctMTcuOSAzNS43LTM5LjggMC0yMS45LTE2LjEtMzkuNy0zNS43LTM5LjhsLTEyNi42IDBjLTEuOSAwLTMtMi4zLTIuMS00LjFMMjQzLjUgMjQwek0xNzIuNCAxMjMuMWMtMTkuNiAwLTM1LjcgMTcuOS0zNS43IDM5LjhzMTYgMzkuOCAzNS43IDM5LjhsMTI2LjYgMGMxLjkgMCAzLjEgMi4yIDIuMiA0LjFMMjY4LjUgMjcyYy0xLjIgMS45IC45IDQuMiAyLjYgMi44bDg5LTc5LjVjOS4yLTcuMiAxNS4yLTE5LjEgMTUuMi0zMi41IDAtMjEuOS0xNi0zOS43LTM1LjctMzkuOGwtMTY3LjMgMHoiXQogICAgfTsKICAgIGZhT3BlbnN1c2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbnN1c2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTYyYiIsICJNNDcxLjEgMTAyLjdzLS4zIDE4LjMtLjMgMjAuM2MtOS4xLTMtNzQuNC0yNC4xLTEzNS43LTI2LjMtNTEuOS0xLjgtMTIyLjgtNC4zLTIyMyA1Ny4zLTE5LjQgMTIuNC03My45IDQ2LjEtOTkuNiAxMDkuNy01LjUgMTMuMy0xMi42IDQzLjMtNS41IDcxLjQgMy4zIDEyLjggOC45IDI0LjkgMTYuNSAzNS43IDE3LjQgMjUgNDYuNiA0MS42IDc4LjEgNDQuNCA0NC40IDMuOSA3OC4xLTE2IDkwLTUzLjMgOC4yLTI1LjggMC02My42LTMxLjUtODIuOS0yNS42LTE1LjctNTMuMy0xMi4xLTY5LjItMS42LTEzLjkgOS4yLTIxLjggMjMuNS0yMS42IDM5LjIgLjMgMjcuOCAyNC4zIDQyLjYgNDEuNSA0Mi42IDUuNCAwIDEwLjctLjkgMTUuOC0yLjcgNi41LTEuOCAxMy4zLTYuNSAxMy4zLTE0LjkgMC0xMi4xLTExLjYtMTQuOC0xNi44LTEzLjktMi45IC41LTQuNSAyLTExLjggMi40LTItLjItMTItMy4xLTEyLTE0bDAtLjFjLjItMTIuMyAxMy4yLTE4IDI1LjUtMTYuOSAzMi4zIDIuOCA0Ny43IDQwLjcgMjguNSA2NS43LTE4LjMgMjMuNy03Ni42IDIzLjItOTkuNy0yMC40LTI2LTQ5LjIgMTIuNy0xMTEuMiA4Ny05OC40IDMzLjIgNS43IDgzLjYgMzUuNSAxMDIuNCAxMDQuM2w0NS45IDBjLTUuNy0xNy42LTguOS02OC4zIDQyLjctNjguMyA1Ni43IDAgNjMuOSAzOS45IDc5LjggNjguM2w0OC42IDBjLTEyLjgtMTguMy0yMS43LTM4LjctMTguOS01NS44IDUuNi0zMy44IDM5LjctMTguNCA4Mi40LTE3LjQgNjYuNSAuNCAxMDIuMS0yNyAxMDMuMS0yOCAzLjctMy4xIDYuNS0xNS44IDctMTcuNyAxLjMtNS4xLTMuMi0yLjQtMy4yLTIuNC04LjcgNS4yLTMwLjUgMTUuMi01MC45IDE1LjYtMjUuMyAuNS03Ni4yLTI1LjQtODEuNi0yOC4yLS4zLS40IC4xIDEuMi0xMS0yNS41IDg4LjQgNTguMyAxMTguMyA0MC41IDE0NS4yIDIxLjcgLjgtLjYgNC4zLTIuOSAzLjYtNS43LTEzLjgtNDguMS0yMi40LTYyLjctMzQuNS02OS42LTM3LTIxLjYtMTI1LTM0LjctMTI5LjItMzUuMyAuMS0uMS0uOS0uMy0uOSAuN3ptNjAuNCA3Mi44YTM3LjYgMzcuNiAwIDEgMSA3NS4yIDIuNiAzNy42IDM3LjYgMCAxIDEgLTc1LjItMi42em0zOC42LTI1LjNjLTMuNi0uMy03LjEgLjEtMTAuNSAxLjJzLTYuNSAyLjktOS4yIDUuMy00LjggNS4zLTYuMyA4LjUtMi40IDYuNy0yLjUgMTAuMyAuNSA3LjEgMS44IDEwLjQgMy4zIDYuMyA1LjggOC45IDUuNSA0LjUgOC44IDUuOSA2LjkgMiAxMC40IDEuOWMzLjYgLjMgNy4xLS4xIDEwLjUtMS4yczYuNS0yLjkgOS4yLTUuMyA0LjgtNS4zIDYuMy04LjUgMi40LTYuNyAyLjUtMTAuMy0uNS03LjEtMS44LTEwLjQtMy4zLTYuMy01LjgtOC45LTUuNS00LjUtOC44LTUuOS02LjktMi0xMC40LTEuOXptNC4zIDI4LjhjLTE1LjQgMC0xNS40LTE1LjYgMC0xNS42czE1LjQgMTUuNiAwIDE1LjZ6Il0KICAgIH07CiAgICBmYURyb3Bib3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHJvcGJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTZiIiwgIk0yODguNCAxMTYuM2wtMTMyIDg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLjQtODUuMSAxMzIuMy04NC4zLTEzMi4zLTgzLjUgMTMyLjMtODQuMyAxMzIuMSA4NC4zek0xNTUuNiAzOTUuN2wxMzItODQuMyAxMzIgODQuMy0xMzIgODQuMy0xMzItODQuM3pNMjg4LjQgMjg0LjFsMTMyLTg0LjMtMTMyLTgzLjYgMTMxLjMtODQuMiAxMzIuMyA4NC4zLTEzMi4zIDg0LjMgMTMyLjMgODQuMi0xMzIuMyA4NC4zLTEzMS4zLTg1eiJdCiAgICB9OwogICAgZmFEZWV6ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVlemVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzciLCAiTTE0LjggMTAxLjFDNi42IDEwMS4xIDAgMTI3LjYgMCAxNjAuM3M2LjYgNTkuMiAxNC44IDU5LjIgMTQuOC0yNi41IDE0LjgtNTkuMi02LjYtNTkuMi0xNC44LTU5LjJ6TTQ0OC43IDQwLjljLTcuNyAwLTE0LjUgMTcuMS0xOS40IDQ0LjEtNy43LTQ2LjctMjAuMi03Ny0zNC4yLTc3LTE2LjggMC0zMS4xIDQyLjktMzggMTA1LjQtNi42LTQ1LjQtMTYuOC03NC4yLTI4LjMtNzQuMi0xNi4xIDAtMjkuNiA1Ni45LTM0LjcgMTM2LjItOS40LTQwLjgtMjMuMi02Ni4zLTM4LjMtNjYuM3MtMjguOCAyNS41LTM4LjMgNjYuM2MtNS4xLTc5LjMtMTguNi0xMzYuMi0zNC43LTEzNi4yLTExLjUgMC0yMS43IDI4LjgtMjguMyA3NC4yLTYuNi02Mi41LTIxLjItMTA1LjQtMzcuOC0xMDUuNC0xNCAwLTI2LjUgMzAuNC0zNC4yIDc3LTQuOC0yNy0xMS43LTQ0LjEtMTkuNC00NC4xLTE0LjMgMC0yNiA1OS4yLTI2IDEzMi4xUzQ5IDMwNS4yIDYzLjMgMzA1LjJjNS45IDAgMTEuNS05LjkgMTUuOC0yNi44IDYuOSA2MS43IDIxLjIgMTA0LjEgMzggMTA0LjEgMTMgMCAyNC41LTI1LjUgMzIuMS02NS42IDUuNCA3Ni4zIDE4LjYgMTMwLjQgMzQuMiAxMzAuNCA5LjcgMCAxOC42LTIxLjQgMjUuMy01Ni40IDcuOSA3Mi4yIDI2LjMgMTIyLjcgNDcuNyAxMjIuN3MzOS41LTUwLjUgNDcuNy0xMjIuN2M2LjYgMzUgMTUuNiA1Ni40IDI1LjMgNTYuNCAxNS42IDAgMjguOC01NC4xIDM0LjItMTMwLjQgNy43IDQwLjEgMTkuNCA2NS42IDMyLjEgNjUuNiAxNi42IDAgMzAuOS00Mi4zIDM4LTEwNC4xIDQuMyAxNi44IDkuNyAyNi44IDE1LjggMjYuOCAxNC4zIDAgMjYtNTkuMiAyNi0xMzIuMVM0NjMgNDAuOSA0NDguNyA0MC45em00OC41IDYwLjJjLTguMiAwLTE0LjggMjYuNS0xNC44IDU5LjJzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjAiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMy42IDUzLjJjMi44LS4zIDExLjUgMSAxMS41IDExLjVsNi42IDEwNy4yIDQuOS01OS4zYzAtNiA0LjctMTAuNiAxMC42LTEwLjZzMTAuNiA0LjcgMTAuNiAxMC42YzAgMi41LS41LTUuNyA1LjcgODEuNWw1LjgtNjQuMmMuMy0yLjkgMi45LTkuMyAxMC4yLTkuMyAzLjggMCA5LjkgMi4zIDEwLjYgOC45bDExLjUgOTYuNSA1LjMtMTIuOGMxLjgtNC40IDUuMi02LjYgMTAuMi02LjZsNTggMCAwIDIxLjMtNTAuOSAwLTE4LjIgNDQuM2MtMy45IDkuOS0xOS41IDkuMS0yMC44LTMuMWwtNC0zMS45LTcuNSA5Mi42Yy0uMyAzLTMgOS4zLTEwLjIgOS4zLTMgMC05LjgtMi4xLTEwLjYtOS4zIDAtMS45IC42IDUuOC02LjItNzcuOWwtNS4zIDcyLjJjLTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0yLjkgMC05LjgtMi0xMC42LTkuMyAwLTEuOSAuNSA2LjctNS44LTg3LjdMMjU1IDM4My45YzAgNi4zLTMuNiAxMi40LTEwLjYgMTIuNC01LjIgMC0xMC42LTQuMS0xMC42LTEyTDIyOCAyOTYuNmMtNS44IDkyLjUtNS4zIDg0LTUuMyA4NS45LTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLS43LS40LTEuMS0uNC0yLjZsLTYuMi04OC42LTQuOSA1Ni43Yy0uNyA2LjUtNi43IDkuMy0xMC42IDkuMy01LjggMC05LjYtNC4xLTEwLjYtOC45TDE1Ny43IDI3MmMtMiA0LTMuNSA4LjQtMTEuMSA4LjRsLTUxLjQgMCAwLTIxLjMgNDQuOCAwIDEzLjctMjcuOWM0LjQtOS45IDE4LjItNy4yIDE5LjkgMi43bDMuMSAyMC40IDguNC05Ny45YzAtNiA0LjgtMTAuNiAxMC42LTEwLjYgLjUgMCAxMC42LS4yIDEwLjYgMTIuNGw0LjkgNjkuMSA2LjYtOTIuNmMwLTEwLjEgOS41LTEwLjYgMTAuMi0xMC42IC42IDAgMTAuNiAuNyAxMC42IDEwLjZsNS4zIDgwLjYgNi4yLTk3LjljLjEtMS4xLS42LTEwLjMgOS45LTExLjV6Il0KICAgIH07CiAgICBmYUplZGlPcmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqZWRpLW9yZGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MGUiLCAiTTM5OC45IDM3My42Yzk1LjktMTIyLjEgMTcuMi0yMzMuMSAxNy4yLTIzMy4xIDQ1LjQgODUuOC00MS40IDE3MC41LTQxLjQgMTcwLjUgMTA1LTE3MS41LTYwLjUtMjcxLjUtNjAuNS0yNzEuNSA5Ni45IDcyLjctMTAuMSAxOTAuNy0xMC4xIDE5MC43IDg1LjggMTU4LjQtNjguNiAyMzAuMS02OC42IDIzMC4xcy0uNC0xNi45LTIuMi04NS43YzQuMyA0LjUgMzQuNSAzNi4yIDM0LjUgMzYuMmwtMjQuMi00Ny40IDYyLjYtOS4xLTYyLjYtOS4xIDIwLjItNTUuNS0zMS40IDQ1LjljLTIuMi04Ny43LTcuOC0zMDUuMS03LjktMzA2LjkgMCAxLTUuNiAyMTktNy45IDMwNi45bC0zMS40LTQ1LjkgMjAuMiA1NS41LTYyLjYgOS4xIDYyLjYgOS4xLTI0LjIgNDcuNCAzNC41LTM2LjJjLTEuOCA2OC44LTIuMiA4NS43LTIuMiA4NS43UzU5LjEgMzg4LjYgMTQ0LjkgMjMwLjJjMCAwLTEwNy0xMTguMS0xMC4xLTE5MC43IDAgMC0xNjUuNSA5OS45LTYwLjUgMjcxLjUgMCAwLTg2LjgtODQuOC00MS40LTE3MC41IDAgMC03OC43IDExMSAxNy4yIDIzMy4xIDAgMC0yNi4yLTE2LjEtNDkuNC03Ny43IDAgMCAxNi45IDE4My4zIDIyMiAxODUuN2w0LjEgMGMyMDUtMi40IDIyMi0xODUuNyAyMjItMTg1LjctMjMuNiA2MS41LTQ5LjkgNzcuNy00OS45IDc3Ljd6Il0KICAgIH07CiAgICBmYVJQcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInItcHJvamVjdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGY3IiwgIk01NzguNSAyMjYuNkM1NzguNSAxMTkuMSA0NDguNCAzMiAyODggMzJTLTIuNSAxMTkuMS0yLjUgMjI2LjZjMCA5NS44IDEwMy4zIDE3NS40IDIzOS40IDE5MS41bDAgNjEuOSA5OS4xIDAgMC02MS41YzI0LjMtMi43IDQ3LjYtNy40IDY5LjQtMTMuOWw0MC4xIDc1LjQgMTEyIDAtNjcuNC0xMTMuN2M1NC41LTM1LjQgODguNC04NC45IDg4LjQtMTM5Ljd6TTExMS43IDI0MS4xYzAtNzMuNSA5OC45LTEzMyAyMjAuOC0xMzNzMjExLjkgNDAuNyAyMTEuOSAxMzNjMCA1MC4xLTI2LjUgODUtNzAuMyAxMDYuNC0yLjQtMS42LTQuNy0yLjktNi40LTMuNy0xMC4yLTUuMi0yNy44LTEwLjUtMjcuOC0xMC41czg2LjYtNi40IDg2LjYtOTIuNy05MC42LTg3LjktOTAuNi04Ny45bC0xOTkgMCAwIDIwOC4zYy03NC4xLTIxLjUtMTI1LjItNjcuMS0xMjUuMi0xMTkuOXptMjI1LjEgMzguM2wwLTU1LjZjNTcuOCAwIDg3LjgtNi44IDg3LjggMjcuMyAwIDM2LjUtMzguMiAyOC4zLTg3LjggMjguM3ptLS45IDcyLjVsMjYuNiAwYzEwLjggMCAxOC45IDExLjcgMjQgMTkuMi0xNi4xIDEuOS0zMyAyLjgtNTAuNiAyLjlsMC0yMi4xeiJdCiAgICB9OwogICAgZmFJbnN0YWxvZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnN0YWxvZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDgxIiwgIk0xNTMuNiA0ODBsMjMzLjcgMCAxMTUuNC0yMDQuMi0yOTguMyA1Ny40LTUwLjggMTQ2Ljh6TTUwNSAyNDAuMUwzODcuNCAzMiAxNTUuOSAzMiAzNjAuNSAyNjcuOSA1MDUgMjQwLjF6TTEyNC42IDQ4LjhMNy41IDI1NiAxMjMuNSA0NjEuMiAyMjUuOSAxNjUuNiAxMjQuNiA0OC44eiJdCiAgICB9OwogICAgZmFDYW5hZGlhbk1hcGxlTGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYW5hZGlhbi1tYXBsZS1sZWFmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODUiLCAiTTM4My44IDM1MS43YzIuNS0yLjUgMTA1LjItOTIuNCAxMDUuMi05Mi40bC0xNy41LTcuNWMtMTAtNC45LTcuNC0xMS41LTUtMTcuNCAyLjQtNy42IDIwLjEtNjcuMyAyMC4xLTY3LjNzLTQ3LjcgMTAtNTcuNyAxMi41Yy03LjUgMi40LTEwLTIuNS0xMi41LTcuNXMtMTUtMzIuNC0xNS0zMi40LTUyLjYgNTkuOS01NS4xIDYyLjNjLTEwIDcuNS0yMC4xIDAtMTcuNi0xMCAwLTEwIDI3LjYtMTI5LjYgMjcuNi0xMjkuNnMtMzAuMSAxNy40LTQwLjEgMjIuNGMtNy41IDUtMTIuNiA1LTE3LjYtNS01LjEtNy41LTQyLjctNzkuOC00Mi43LTc5LjhzLTM3LjUgNzIuMy00Mi41IDc5LjhjLTUgMTAtMTAgMTAtMTcuNiA1LTEwLTUtNDAuMS0yMi40LTQwLjEtMjIuNFMxODMuMyAxODIgMTgzLjMgMTkyYzIuNSAxMC03LjUgMTcuNS0xNy42IDEwLTIuNS0yLjUtNTUuMS02Mi4zLTU1LjEtNjIuM3MtMTIuNSAyNy4zLTE1IDMyLjMtNSA5LjktMTIuNSA3LjVDNzMgMTc3IDI1LjQgMTY3IDI1LjQgMTY3UzQzIDIyNi43IDQ1LjUgMjM0LjNjMi40IDYgNSAxMi41LTUgMTcuNEwyMyAyNTkuM3MxMDIuNiA4OS45IDEwNS4yIDkyLjRjNS4xIDUgMTAgNy41IDUuMSAyMi41LTUuMSAxNS0xMC4xIDM1LjEtMTAuMSAzNS4xczk1LjItMjAuMSAxMDUuMy0yMi42YzguNy0uOSAxOC4zIDIuNSAxOC4zIDEyLjVTMjQxIDUxMiAyNDEgNTEybDMwIDBzLTUuOC0xMDIuNy01LjgtMTEyLjggOS41LTEzLjQgMTguNC0xMi41YzEwIDIuNSAxMDUuMiAyMi42IDEwNS4yIDIyLjZzLTUtMjAuMS0xMC0zNS4xIDAtMTcuNSA1LTIyLjV6Il0KICAgIH07CiAgICBmYUV0aGVyZXVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV0aGVyZXVtIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MmUiLCAiTTMxMS45IDI2MC44TDE2MCAzNTMuNiA4IDI2MC44IDE2MCAwIDMxMS45IDI2MC44ek0xNjAgMzgzLjRMOCAyOTAuNiAxNjAgNTEyIDMxMiAyOTAuNiAxNjAgMzgzLjR6Il0KICAgIH07CiAgICBmYUhvdXp6ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvdXp6IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2MiLCAiTTI3NiAzMzAuN2wtMTA0LjYgMCAwIDE0OS4zLTE1NC4zIDAgMC00NDggMTA5LjUgMCAwIDEwNC41IDMwNS4xIDg1LjYgMCAyNTcuOS0xNTUuNyAwIDAtMTQ5LjN6Il0KICAgIH07CiAgICBmYVZpYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDkiLCAiTTQ0NC4zIDQ5LjljLTEyLjctMTEuNy02NC4xLTQ5LTE3OC43LTQ5LjUgMCAwLTEzNS4xLTguMS0yMDAuOSA1Mi4zLTM2LjYgMzYuNi00OS41IDkwLjMtNTAuOSAxNTYuOHMtMy4xIDE5MS4xIDExNyAyMjQuOWwuMSAwLS4xIDUxLjZzLS44IDIwLjkgMTMgMjUuMWMxNi42IDUuMiAyNi40LTEwLjcgNDIuMy0yNy44IDguNy05LjQgMjAuNy0yMy4yIDI5LjgtMzMuNyA4Mi4yIDYuOSAxNDUuMy04LjkgMTUyLjUtMTEuMiAxNi42LTUuNCAxMTAuNS0xNy40IDEyNS43LTE0MiAxNS44LTEyOC42LTcuNi0yMDkuOC00OS44LTI0Ni41ek00NTguMiAyODdjLTEyLjkgMTA0LTg5IDExMC42LTEwMyAxMTUuMS02IDEuOS02MS41IDE1LjctMTMxLjIgMTEuMiAwIDAtNTIgNjIuNy02OC4yIDc5LTUuMyA1LjMtMTEuMSA0LjgtMTEtNS43IDAtNi45IC40LTg1LjcgLjQtODUuN2wwIDBDNDMuNCAzNzIuNyA0OS40IDI2Ni42IDUwLjUgMjExLjFzMTEuNi0xMDEgNDIuNi0xMzEuNmM1NS43LTUwLjUgMTcwLjQtNDMgMTcwLjQtNDMgOTYuOSAuNCAxNDMuMyAyOS42IDE1NC4xIDM5LjQgMzUuNyAzMC42IDUzLjkgMTAzLjggNDAuNiAyMTEuMXptLTEzOS04MC44Yy40IDguNi0xMi41IDkuMi0xMi45IC42LTEuMS0yMi0xMS40LTMyLjctMzIuNi0zMy45LTguNi0uNS03LjgtMTMuNCAuNy0xMi45IDI3LjkgMS41IDQzLjQgMTcuNSA0NC44IDQ2LjJ6bTIwLjMgMTEuM2MxLTQyLjQtMjUuNS03NS42LTc1LjgtNzkuMy04LjUtLjYtNy42LTEzLjUgLjktMTIuOSA1OCA0LjIgODguOSA0NC4xIDg3LjggOTIuNS0uMSA4LjYtMTMuMSA4LjItMTIuOS0uM3ptNDcgMTMuNGMuMSA4LjYtMTIuOSA4LjctMTIuOSAuMS0uNi04MS41LTU0LjktMTI1LjktMTIwLjgtMTI2LjQtOC41LS4xLTguNS0xMi45IDAtMTIuOSA3My43IC41IDEzMyA1MS40IDEzMy43IDEzOS4yek0zNzUuMiAzMjlsMCAuMmMtMTAuOCAxOS0zMSA0MC01MS44IDMzLjNsLS4yLS4zYy0yMS4xLTUuOS03MC44LTMxLjUtMTAyLjItNTYuNS0xNi4yLTEyLjgtMzEtMjcuOS00Mi40LTQyLjQtMTAuMy0xMi45LTIwLjctMjguMi0zMC44LTQ2LjYtMjEuMy0zOC41LTI2LTU1LjctMjYtNTUuNy02LjctMjAuOCAxNC4yLTQxIDMzLjMtNTEuOGwuMiAwYzkuMi00LjggMTgtMy4yIDIzLjkgMy45IDAgMCAxMi40IDE0LjggMTcuNyAyMi4xIDUgNi44IDExLjcgMTcuNyAxNS4yIDIzLjggNi4xIDEwLjkgMi4zIDIyLTMuNyAyNi42bC0xMiA5LjZjLTYuMSA0LjktNS4zIDE0LTUuMyAxNHMxNy44IDY3LjMgODQuMyA4NC4zYzAgMCA5LjEgLjggMTQtNS4zbDkuNi0xMmM0LjYtNiAxNS43LTkuOCAyNi42LTMuNyAxNC43IDguMyAzMy40IDIxLjIgNDUuOCAzMi45IDcgNS43IDguNiAxNC40IDMuOCAyMy42eiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJraWNrc3RhcnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzcXVhcmUta2lja3N0YXJ0ZXIiXSwgImYzYmIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyMC44IDIzM2wtMjMuMyAyMy4xIDIzLjMgMjIuOWMyNC4xIDIzLjkgMjQuMSA2MyAwIDg2LjlzLTYzLjQgMjMuOS04Ny42IDBsLTguNS04LjRjLTExLjMgMTYtMjkuNyAyNi41LTUwLjkgMjYuNS0zNC4xIDAtNjEuOS0yNy41LTYxLjktNjEuNGwwLTEzMy4yYzAtMzMuOCAyNy43LTYxLjQgNjEuOS02MS40IDIxLjEgMCAzOS42IDEwLjUgNTAuOSAyNi41bDguNS04LjRjMjQuMS0yMy45IDYzLjQtMjMuOSA4Ny42IDBzMjQuMSA2MyAwIDg2Ljl6Il0KICAgIH07CiAgICBmYVNxdWFyZUtpY2tzdGFydGVyID0gZmFLaWNrc3RhcnRlcjsKICAgIGZhU3BvdGlmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcG90aWZ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYmMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzU2LjcgMzcyLjljLTQuMiAwLTYuOC0xLjMtMTAuNy0zLjYtNjIuNC0zNy42LTEzNS0zOS4yLTIwNi43LTI0LjUtMy45IDEtOSAyLjYtMTEuOSAyLjYtOS43IDAtMTUuOC03LjctMTUuOC0xNS44IDAtMTAuMyA2LjEtMTUuMiAxMy42LTE2LjggODEuOS0xOC4xIDE2NS42LTE2LjUgMjM3IDI2LjIgNi4xIDMuOSA5LjcgNy40IDkuNyAxNi41cy03LjEgMTUuNC0xNS4yIDE1LjR6bTI2LjktNjUuNmMtNS4yIDAtOC43LTIuMy0xMi4zLTQuMi02Mi41LTM3LTE1NS43LTUxLjktMjM4LjYtMjkuNC00LjggMS4zLTcuNCAyLjYtMTEuOSAyLjYtMTAuNyAwLTE5LjQtOC43LTE5LjQtMTkuNHM1LjItMTcuOCAxNS41LTIwLjdjMjcuOC03LjggNTYuMi0xMy42IDk3LjgtMTMuNiA2NC45IDAgMTI3LjYgMTYuMSAxNzcgNDUuNSA4LjEgNC44IDExLjMgMTEgMTEuMyAxOS43LS4xIDEwLjgtOC41IDE5LjUtMTkuNCAxOS41em0zMS03Ni4yYy01LjIgMC04LjQtMS4zLTEyLjktMy45LTcxLjItNDIuNS0xOTguNS01Mi43LTI4MC45LTI5LjctMy42IDEtOC4xIDIuNi0xMi45IDIuNi0xMy4yIDAtMjMuMy0xMC4zLTIzLjMtMjMuNiAwLTEzLjYgOC40LTIxLjMgMTcuNC0yMy45IDM1LjItMTAuMyA3NC42LTE1LjIgMTE3LjUtMTUuMiA3MyAwIDE0OS41IDE1LjIgMjA1LjQgNDcuOCA3LjggNC41IDEyLjkgMTAuNyAxMi45IDIyLjYgMCAxMy42LTExIDIzLjMtMjMuMiAyMy4zeiJdCiAgICB9OwogICAgZmFMZWFucHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxlYW5wdWIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIxMiIsICJNMzg2LjYgMTExLjVsMTUuMSAyNDktMTEtLjNjLTM2LjItLjgtNzEuNiA4LjgtMTAyLjcgMjgtMzEtMTkuMi02Ni40LTI4LTEwMi43LTI4LTQ1LjYgMC04Mi4xIDEwLjctMTIzLjUgMjcuN0w5My4yIDEyOS42YzI4LjUtMTEuOCA2MS41LTE4LjEgOTIuMi0xOC4xIDQxLjIgMCA3My44IDEzLjIgMTAyLjcgNDIuNSAyNy43LTI4LjMgNTktNDEuNyA5OC41LTQyLjV6TTU2OS4yIDQ0OGMtMjUuNSAwLTQ3LjUtNS4yLTcwLjUtMTUuNi0zNC4zLTE1LjYtNzAtMjUtMTA3LjktMjUtMzkgMC03NC45IDEyLjktMTAyLjcgNDAuNi0yNy43LTI3LjctNjMuNy00MC42LTEwMi43LTQwLjYtMzcuOSAwLTczLjYgOS4zLTEwNy45IDI1LTIyLjIgOS45LTQ0LjcgMTUuNi02OS4yIDE1LjZMNyA0NDggNDkuNiA5OC45YzM5LjMtMjIuMiA4Ny0zNC45IDEzMi4zLTM0LjkgMzcuMSAwIDc1LjIgNy43IDEwNi4yIDI5LjEgMzEtMjEuNCA2OS4yLTI5LjEgMTA2LjItMjkuMSA0NS4zIDAgOTMgMTIuNiAxMzIuMyAzNC45TDU2OS4yIDQ0OHptLTQzLjQtNDQuN0w0OTEuOCAxMjNjLTMwLjctMTQtNjcuMi0yMS40LTEwMS0yMS40LTM4LjQgMC03NC40IDEyLjEtMTAyLjcgMzguNy0yOC4zLTI2LjYtNjQuMi0zOC43LTEwMi43LTM4LjctMzMuOCAwLTcwLjMgNy40LTEwMSAyMS40bC0zNCAyODAuMmM0Ny4yLTE5LjUgODIuOS0zMy41IDEzNS0zMy41IDM3LjYgMCA3MC44IDkuNiAxMDIuNyAyOS42IDMxLjgtMjAgNjUuMS0yOS42IDEwMi43LTI5LjYgNTIuMiAwIDg3LjggMTQgMTM1IDMzLjV6Il0KICAgIH07CiAgICBmYUphdmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamF2YSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNGU0IiwgIk0yNzcuOCAzMTIuOWM5LjgtNi43IDIzLjQtMTIuNSAyMy40LTEyLjVzLTM4LjcgNy03Ny4yIDEwLjJjLTQ3LjEgMy45LTk3LjcgNC43LTEyMy4xIDEuMy02MC4xLTggMzMtMzAuMSAzMy0zMC4xcy0zNi4xLTIuNC04MC42IDE5Yy01Mi41IDI1LjQgMTMwIDM3IDIyNC41IDEyLjF6bS04NS40LTMyLjFjLTE5LTQyLjctODMuMS04MC4yIDAtMTQ1LjggMTAzLjctODEuOCA1MC41LTEzNSA1MC41LTEzNSAyMS41IDg0LjUtNzUuNiAxMTAuMS0xMTAuNyAxNjIuNi0yMy45IDM1LjkgMTEuNyA3NC40IDYwLjIgMTE4LjJ6TTMwNyAxMDQuNmMuMSAwLTE3NS4yIDQzLjgtOTEuNSAxNDAuMiAyNC43IDI4LjQtNi41IDU0LTYuNSA1NHM2Mi43LTMyLjQgMzMuOS03Mi45QzIxNiAxODguMSAxOTUuNCAxNjkuMyAzMDcgMTA0LjZ6bS02LjEgMjcwLjVjLS41IDEtMS4yIDEuOC0yIDIuNiAxMjguMy0zMy43IDgxLjEtMTE4LjkgMTkuOC05Ny4zLTMuMyAxLjItNi4yIDMuNC04LjIgNi4zIDMuNi0xLjMgNy4zLTIuMyAxMS0zIDMxLTYuNSA3NS41IDQxLjUtMjAuNiA5MS40ek0zNDggNDM3LjRzMTQuNSAxMS45LTE1LjkgMjEuMmMtNTcuOSAxNy41LTI0MC44IDIyLjgtMjkxLjYgLjctMTguMy03LjkgMTYtMTkgMjYuOC0yMS4zIDExLjItMi40IDE3LjctMiAxNy43LTItMjAuMy0xNC4zLTEzMS4zIDI4LjEtNTYuNCA0MC4yIDIwNC4yIDMzLjIgMzcyLjQtMTQuOSAzMTkuNC0zOC44ek0xMjQuNSAzOTZjLTc4LjcgMjIgNDcuOSA2Ny40IDE0OC4xIDI0LjUtOS44LTMuOC0xOS4yLTguNC0yOC4yLTEzLjgtNDQuNyA4LjUtNjUuNCA5LjEtMTA2IDQuNS0zMy41LTMuOC0xMy45LTE1LjItMTMuOS0xNS4yem0xNzkuOCA5Ny4yYy03OC43IDE0LjgtMTc1LjggMTMuMS0yMzMuMyAzLjYgMC0uMSAxMS44IDkuNyA3Mi40IDEzLjYgOTIuMiA1LjkgMjMzLjgtMy4zIDIzNy4xLTQ2LjkgMCAwLTYuNCAxNi41LTc2LjIgMjkuN3pNMjYwLjcgMzUzYy01OS4yIDExLjQtOTMuNSAxMS4xLTEzNi44IDYuNi0zMy41LTMuNS0xMS42LTE5LjctMTEuNi0xOS43LTg2LjggMjguOCA0OC4yIDYxLjQgMTY5LjUgMjUuOS03LjgtMi44LTE1LTcuMS0yMS4xLTEyLjh6Il0KICAgIH07CiAgICBmYU5mY1N5bWJvbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuZmMtc3ltYm9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MzEiLCAiTTM2MC45IDMyLjRjNy43LTEuMyAxNS43IC41IDIxLjIgNSA4NC4xIDU4LjcgMTI5LjkgMTM2LjMgMTI5LjkgMjE3LjcgMCA4My4xLTQ1LjggMTYwLjgtMTI5LjkgMjE5LjUtNC44IDQtMTEuNyA1LjktMTguNiA1LjMtNy0uNi0xMy41LTMuNi0xOC40LTguNUwxNjEuNyAyODguN2MtNS42LTUuNS04LjctMTMtOS42LTIwLjkgMC03LjggNC0xNS4zIDkuNS0yMC45IDUuNi01LjUgMTMuMS04LjcgMjAuOS04LjcgNy45IDAgMTUuNCAzLjEgMjAuOSA4LjZMMzY4LjUgNDExLjJjNTQuNi00NC43IDg0LjMtOTkuMiA4NC4zLTE1Ni4xIDAtNjEuNi0zNi45LTEyMi4yLTEwMy45LTE2OS4zLTYuNC00LjUtMTAuOC0xMS40LTEyLjEtMTkuMS0xLjQtNy43IC40LTE1LjcgNS0yMi4xIDQuNS02LjQgMTEuNC0xMC44IDE5LjEtMTIuMXptLTIwNiA0NDcuMmMtNy43IDEuMy0xNS42LS41LTIyLjEtNS04My4xLTU4LjctMTI5LTEzNi40LTEyOS0yMTkuNSAwLTgxLjQgNDUuOC0xNTkgMTI5LTIxNy43IDUuNy00IDEyLjYtNS45IDE5LjYtNS4zIDYuOSAuNiAxMy40IDMuNiAxOC4zIDguNUwzNTQuMSAyMjMuM2M1LjYgNS41IDguNyAxMyA4LjcgMjAuOSAuMSA2LjktMyAxNS4zLTguNiAyMC45LTUuNSA1LjUtMTMgOC43LTIwLjkgOC43LTcuOCAwLTE2LjItMy4xLTIwLjktOC42TDE0Ny4zIDEwMC43Yy01NC42IDQ1LjItODQuMyA5OS4yLTg0LjMgMTU0LjQgMCA2My40IDM2LjkgMTI0IDEwMy4xIDE3MS4xIDcuMyA0LjYgMTEuNiAxMS40IDEzIDE5LjIgMS4zIDcuNy0uNSAxNS43LTUgMjIuMXMtMTEuNCAxMC43LTE5LjIgMTIuMXoiXQogICAgfTsKICAgIGZhV29kdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b2R1IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwODgiLCAiTTE3OC40IDMzOS43bC0zNy4zIDAtMjguOS0xMTYuMi0uNSAwLTI4LjUgMTE2LjItMzggMC00NS4yLTE3MC44IDM3LjUgMCAyNyAxMTYuMiAuNSAwIDI5LjctMTE2LjIgMzUuMiAwIDI5LjIgMTE3LjcgLjUgMCAyOC0xMTcuNyAzNi44IDAtNDUuOSAxNzAuOHptOTMtMTI3YzM5IDAgNjQuMSAyNS44IDY0LjEgNjUuMyAwIDM5LjItMjUuMSA2NS02NC4xIDY1LTM4LjcgMC02My45LTI1LjgtNjMuOS02NSAwLTM5LjUgMjUuMS02NS4zIDYzLjktNjUuM3ptMCAxMDQuOGMyMy4yIDAgMzAuMS0xOS45IDMwLjEtMzkuNSAwLTE5LjktNi45LTM5LjctMzAuMS0zOS43LTI3LjcgMC0yOS45IDE5LjktMjkuOSAzOS43IDAgMTkuNiA2LjkgMzkuNSAyOS45IDM5LjV6bTE2My43IDYuNWwtLjUgMGMtNy45IDEzLjQtMjEuOCAxOS4xLTM3LjUgMTkuMS0zNy4zIDAtNTUuNS0zMi01NS41LTY2LjIgMC0zMy4yIDE4LjQtNjQuMSA1NC44LTY0LjEgMTQuNiAwIDI4LjkgNi4yIDM2LjggMTguNGwuMiAwIDAtNjIuMiAzNCAwIDAgMTcwLjgtMzIuMyAwIDAtMTUuOHptLTI5LjctODUuNmMtMjIuMiAwLTI5LjkgMTkuMS0yOS45IDM5LjUgMCAxOS40IDguOCAzOS43IDI5LjkgMzkuNyAyMi41IDAgMjkuMi0xOS42IDI5LjItMzkuOSAwLTIwLjEtNy4yLTM5LjItMjkuMi0zOS4yek01OTMgMzM5LjdsLTMyLjMgMCAwLTE3LjItLjcgMGMtOC42IDEzLjktMjMuNCAyMC42LTM3LjggMjAuNi0zNi4xIDAtNDUuMi0yMC4zLTQ1LjItNTAuOWwwLTc2LjEgMzQgMCAwIDY5LjhjMCAyMC4zIDYgMzAuNCAyMS44IDMwLjQgMTguNCAwIDI2LjMtMTAuMyAyNi4zLTM1LjRsMC02NC44IDM0IDAgMCAxMjMuNnptOS41LTM2LjhsMzcuNSAwIDAgMzYuOC0zNy41IDAgMC0zNi44eiJdCiAgICB9OwogICAgZmFTcXVhcmVTdGVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc3RlYW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic3RlYW0tc3F1YXJlIl0sICJmMWI3IiwgIk0xNjUuNiAzMDkuMWMxOC42IDcuNyAyNy4zIDI4LjkgMTkuNiA0Ny40cy0yOSAyNy4yLTQ3LjYgMTkuNGwtMjguNS0xMS44YzUgMTAuNiAxMy44IDE5LjQgMjUuNCAyNC4yIDI1LjIgMTAuNSA1NC4xLTEuNCA2NC42LTI2LjUgNS4xLTEyLjEgNS4xLTI1LjUgLjEtMzcuNy01LjEtMTIuMS0xNC41LTIxLjYtMjYuNy0yNi43LTEyLjEtNS0yNS00LjgtMzYuNC0uNWwyOS41IDEyLjJ6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgMTQ0LjcgMTE2LjYgNDguMWMxMi04LjIgMjYuMi0xMi4xIDQwLjctMTEuM2w1NS40LTgwLjIgMC0xLjFjMC00OC4yIDM5LjMtODcuNSA4Ny42LTg3LjVzODcuNiAzOS4zIDg3LjYgODcuNWMwIDQ5LjItNDAuOSA4OC43LTg5LjYgODcuNWwtNzkgNTYuM2MxLjYgMzguNS0yOS4xIDY4LjgtNjUuNyA2OC44LTMxLjggMC01OC41LTIyLjctNjQuNS01Mi43TDAgMzE5LjIgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI0MS45IDE5Ni4yYTU4LjQgNTguNCAwIDEgMCAxMTYuOCAwIDU4LjQgNTguNCAwIDEgMCAtMTE2LjggMHptMTAyLjQtLjFhNDMuOSA0My45IDAgMSAxIC04Ny44IDAgNDMuOSA0My45IDAgMSAxIDg3LjggMHoiXQogICAgfTsKICAgIGZhU3RlYW1TcXVhcmUgPSBmYVNxdWFyZVN0ZWFtOwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtZXUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlOSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuMyAxMTkuNyA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE3IDM5Ni40IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMy4yIDMuNy00NS4yIDEwLjktNjZsNjUuNyAyOS4xLTQuNyAwIDAgMjkuNSAyMy4zIDBjMCA2LjItLjQgMy4yLS40IDE5LjVsLTIyLjggMCAwIDI5LjUgMjcgMGMxMS40IDY3IDY3LjIgMTAxLjMgMTI0LjYgMTAxLjMgMjYuNiAwIDUwLjYtNy45IDY0LjgtMTUuOGwtMTAtNDYuMWMtOC43IDQuNi0yOC4yIDEwLjgtNDcuMyAxMC44LTI4LjIgMC01OC4xLTEwLjktNjcuMy01MC4ybDkwLjMgMCAxMjguMyA1Ni44Yy0xLjUgMi4xLTU2LjIgMTA0LjMtMTc4LjggMTA0LjN6TTIzOS42IDI2OC4xbC0uNS0uNCAuOSAuNC0uNCAwem03Ny4yLTE5LjVsMy43IDAgMC0yOS41LTcwLjMgMC0yOC42LTEyLjZjMi41LTUuNSA1LjQtMTAuNSA4LjgtMTQuMyAxMi45LTE1LjggMzEuMS0yMi40IDUxLjEtMjIuNCAxOC4zIDAgMzUuMyA1LjQgNDYuMSAxMGwxMS42LTQ3LjNjLTE1LTYuNi0zNy0xMi40LTYyLjMtMTIuNC0zOSAwLTcyLjIgMTUuOC05NS45IDQyLjMtNS4zIDYuMS05LjggMTIuOS0xMy45IDIwLjFMODUuNSAxNDYuNGM2NC42LTk2LjggMTU3LjctOTMuNiAxNzAuNy05My42IDExMyAwIDIwMyA5MC4yIDIwMyAyMDMuNCAwIDE4LjctMi4xIDM2LjMtNi4zIDUyLjlMMzE2LjggMjQ4LjZ6Il0KICAgIH07CiAgICBmYU5wbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJucG0iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkNCIsICJNMjg4IDI4OGwtMzIgMCAwLTY0IDMyIDAgMCA2NHpNNTc2IDE2MGwwIDE5Mi0yODggMCAwIDMyLTEyOCAwIDAtMzItMTYwIDAgMC0xOTIgNTc2IDB6TTE2MCAxOTJsLTEyOCAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTEyOHptMTYwIDBsLTEyOCAwIDAgMTYwIDY0IDAgMC0zMiA2NCAwIDAtMTI4em0yMjQgMGwtMTkyIDAgMCAxMjggNjQgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYUNsb3Vkc2NhbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRzY2FsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzgzIiwgIk0zMTguMSAxNTRsLTkuNCA3LjZjLTIyLjUtMTkuMy01MS41LTMzLjYtODMuMy0zMy42LTcxLjYgMC0xMjkuNCA2MC44LTEyOS40IDEzMi4zIDAgNi42IC40IDEzLjEgMS40IDE5LjQtMi01NiA0MS44LTk3LjQgOTIuNi05Ny40IDI0LjIgMCA0Ni4yIDkuNCA2Mi42IDI0LjdsLTI1LjIgMjAuNGMtOC4zLS45LTE2LjggMS44LTIzLjEgOC4xLTExLjEgMTEtMTEuMSAyOC45IDAgNDAgMTEuMSAxMSAyOC45IDExIDQwIDAgNi4zLTYuMyA5LTE0LjkgOC4xLTIzLjFsNzUuMi04OC44YzYuMy02LjUtMy4zLTE1LjktOS41LTkuNnpNMjEzLjcgMjQ2LjVhMTQgMTQgMCAxIDEgMjAuNiAxOSAxNCAxNCAwIDEgMSAtMjAuNi0xOXpNMjI0IDMyYTIyNCAyMjQgMCAxIDAgMCA0NDggMjI0IDIyNCAwIDEgMCAwLTQ0OHptMCA2NGExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il0KICAgIH07CiAgICBmYVRoZW1lY28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhlbWVjbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWM2IiwgIk0yMDIuOSA4LjRjOS45LTUuNyAyNi01LjggMzYtLjJMNDMwIDExNS45YzEwIDUuNiAxOCAxOS40IDE4IDMwLjlMNDQ4IDM2NGMwIDExLjQtOC4xIDI1LjMtMTggMzFMMjM4LjggNTAzLjdjLTkuOSA1LjctMjYgNS42LTM1LjgtLjJMMTcuOSAzOTUuMUM4IDM4OS4zIDAgMzc1LjQgMCAzNjRMMCAxNDYuN2MwLTExLjQgOC0yNS40IDE3LjktMzEuMUwyMDIuOSA4LjR6TTEyNS41IDIwOC4zYy0xNS45IDAtMzEuOSAuMS00Ny44IC4xbDAgMTAxLjQgMTkuMSAwIDAtMjkuOCAyOC43IDBjNDkuNyAwIDQ5LjYtNzEuNyAwLTcxLjd6TTI2NS42IDMwOC42bC0zMC43LTM0LjZjMzctNy41IDM0LjgtNjUuMi0xMC45LTY1LjUtMTYuMSAwLTMyLjItLjEtNDguMy0uMWwwIDEwMS42IDE5LjEgMCAwLTMzLjkgMTguNCAwIDI5LjYgMzMuOSAyMi44IDAgMC0xLjN6bS00MS42LTgyLjNjMjMuMyAwIDIzLjMgMzIuNSAwIDMyLjVsLTI5LjEgMCAwLTMyLjUgMjkuMSAwem0tOTUuNi0xLjZjMjEuMiAwIDIxLjEgMzguOSAwIDM4LjlsLTMyLjMgMCAwLTM4LjggMzIuMyAwem0xOTIuNi0xOC4yYy02OC41IDAtNzEgMTA1LjggMCAxMDUuOCA2OS41IDAgNjkuNC0xMDUuOCAwLTEwNS44em0wIDE3LjRjNDQuMSAwIDQ0LjggNzAuOSAwIDcwLjlzLTQ0LjQtNzAuOSAwLTcwLjl6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNhYiIsICJNMjkzLjYgMjM0LjNMNzIuOSAxMyAzNTMuNyAxNzQuMiAyOTMuNiAyMzQuM3pNMTUuMyAwQzIuMyA2LjgtNi40IDE5LjItNi40IDM1LjNsMCA0NDEuM2MwIDE2LjEgOC43IDI4LjUgMjEuNyAzNS4zTDI3MS45IDI1NS45IDE1LjMgMHpNNDQwLjUgMjI1LjZsLTU4LjktMzQuMS02NS43IDY0LjUgNjUuNyA2NC41IDYwLjEtMzQuMWMxOC0xNC4zIDE4LTQ2LjUtMS4yLTYwLjh6TTcyLjkgNDk5TDM1My43IDMzNy44IDI5My42IDI3Ny43IDcyLjkgNDk5eiJdCiAgICB9OwogICAgZmFLb3J2dWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia29ydnVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MmYiLCAiTTM4Ny42IDM0bC0zMjcgMEMyNy45IDM0IDEuMSA2MC44IDEuMSA5My41bDAgMzI3LjFjMCAzMi42IDI2LjggNTkuNCA1OS41IDU5LjRsMzI3LjEgMGMzMyAwIDU5LjUtMjYuOCA1OS41LTU5LjVsMC0zMjdDNDQ3LjEgNjAuOCA0MjAuMyAzNCAzODcuNiAzNHpNODguMiAxMjAuOGw5NiAwIDAgMTE2IDYxLjgtMTE2IDExMC45IDAtODEuMiAxMzItMTg3LjUgMCAwLTEzMnpNMjUwIDM5Mi45bC02NS43LTExMy42IDAgMTEzLjYtOTYgMCAwLTEzMC44IDE5MS41IDAgODguNiAxMzAuOC0xMTguNCAweiJdCiAgICB9OwogICAgZmFXM2MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidzNjIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZGUiLCAiTTEwNS4yIDMwNS4zbDMwLjktMTA0LjdjNy45LTI2LjcgOC42LTQwLjYgLjItNjguOGwtMTAuMS0zMy45IDQ0LjEgMCA2MSAyMDcuNCA0NS43LTE1NS41YzEzLjMtNDUuMyAyMS4xLTUxLjkgNTkuNC01MS45bDEzMi44IDBjLTI0LjIgNDIuOS00OS4zIDg1LjItNzMuOSAxMjcuOSAyLjYgLjggNS4yIDEuOCA3LjcgMi44IDE3LjMgNy4xIDMyLjIgMTkuNCA0MiAzNS41IDExLjIgMTguNSAxNi44IDQwLjIgMTYuOCA2NS4yIDAgMzAuOC04LjIgNTYuOC0yNC42IDc3LjgtMTQuNSAxOC42LTM1IDI5LjUtNTguMiAzMS4yIDAgLjMtNS4yIC40LTUuOCAuNC0zOS43LS4xLTcwLjgtMzIuMS04My4xLTY4LjdsNDIuOSAwYzMuNSA1LjMgNi44IDEwLjcgMTEuMiAxNS41IDguMSA3LjMgMTguNSAxMC45IDI5LjMgMTEuMSAxMy4xIDAgMjMuMy05LjEgMjkuOS0xOS44IDguMS0xMy4yIDEyLjItMjkgMTIuMi00Ny41IDAtMTMuMS0xLjgtMjQuMy01LjMtMzMuNi0uOS0yLjMtMS45LTQuNS0zLTYuNi0xLjQtMi42LTIuOS01LjEtNC43LTcuNC0xMC4xLTEzLjItMjkuMy0xOS43LTQ3LjUtMTkuOGwtMjguMiAwIDcwLjMtMTIyLTM1LjYgMGMtNDMuMSAwLTM1LjktNS40LTUwLjQgNDMuM2wtNzUuNyAyNTUuMy00LjIgMC02My4xLTIxMS4xLTYzLjEgMjExLjEtNC4yIDAtMTAxLTM0MC43IDQ0LjIgMCA2MSAyMDcuNHpNNDY3IDMzNS43Yy4zIC42IDExLjMgMjAuMyAxOC4zIDMwLjMgNy4xIDEwLjEgMTkuOCAyMC45IDI0LjggMjQuNnMxOS4xIDEyLjUgMzQuMyAxMy45YzE1LjIgMS41IDIzLjMgLjIgMzguNy02LjYgMTUuNC02LjggMjcuOS0yMC40IDM0LjktMjguMSA2LjktNy42IDE3LjktMjcuMyAxOC4yLTI3LjdsMy4zIDE2LjhjMS43IDktMSAyMy43LTQuMSAzMC00LjMgOC42LTcuNiAxMy41LTE0IDIwLjMtNi4xIDYuNS0xNi43IDEzLjUtMjEuMyAxNi40LTQuNiAyLjktMjMuMSAxNS4xLTUwLjEgMTAuM3MtNDQuNy0yNS45LTUzLjktMzguMmMtOS44LTEzLjItMTYuNy0yOC4zLTE5LTMzLjItMy44LTguNC05LjktMjguMi0xMC4xLTI4Ljh6bTE2OS43LTIxOGMzLjMgMjAuMy0uMSAyOC43LTkuMSA0NmwtMTIuNyAyNC4yYy0uMy0uNi0xMC0yMC43LTI1LjktMzEuOS0xMy42LTkuNi0yMi41LTExLjctMzYuMy04LjgtMTcuOCAzLjctMzggMjUtNDYuOCA1MS4yLTEwLjUgMzEuNC0xMC43IDQ2LjYtMTEgNjAuNi0uNiAyMi40IDIuOSAzNS42IDIuOSAzNS42cy0xNS40LTI4LjUtMTUuMi03MC4xYy4xLTI5LjcgNC44LTU2LjcgMTguNS04My4zIDEyLjEtMjMuNCAzMC4xLTM3LjQgNDYuMS0zOS4xIDE2LjUtMS43IDI5LjYgNi4zIDM5LjcgMTQuOSAxMC42IDkgMjEuMyAyOC44IDIxLjMgMjguOGwyNC45LTQ5LjggMy42IDIxLjh6Il0KICAgIH07CiAgICBmYUdyYXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JhdiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ2IiwgIk0zMDIuNiAyMTAuNmM0LjUgNC41IDQuNSAxMi4zIDAgMTYuOGwtMTAgMTBjLTQuNSA0LjktMTIuMyA0LjktMTcuMSAwbC0xMC44LTEwLjhjLTQuNS00LjktNC41LTEyLjMgMC0xNy4xbDEwLTEwYzQuNS00LjUgMTIuMy00LjUgMTcuMSAwbDEwLjggMTEuMXptLTMxLjItMjAuM2E3LjcgNy43IDAgMSAwIC0xMC42LTExIDcuNyA3LjcgMCAxIDAgMTAuNiAxMXptLTI2LjggNS41YTcuNSA3LjUgMCAxIDAgMTAuNyAxMC41IDcuNSA3LjUgMCAxIDAgLTEwLjctMTAuNXpNMzE5LjQgMTgyYy0yMC41LTE0LjktMzQuOS00NC42LTEyLjMtNzAuMyAyMi4zLTI1LjcgNDItMTcuOCA2MS43IC44IDEyLjMgMTEuNyAzMC4yIDI1LjcgMTcuOCA0OS44LTEyLjkgMjQuMy00Ni42IDM0LjMtNjcuMiAxOS43em00OS4yLTQ1LjljLTkuMi0xMC4zLTI0LjEgNy4xLTE2IDE2LjYgNy42IDkuMyAzMy4xIDIuNSAxNi0xNi42ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00NDMuNyA0NGMyLjYtMTYuNi0yMC45LTE3LjEtMjYtMjYuNS0xNC0yNC45LTI4LjYtMzgtNTYuMy0zMS40IDEyLTguMyAyNC4zLTYuMyAyNC4zLTYuMyAuMy02LjYgMC0xMy40LTkuNy0yNS43IDQtMTIuOSAuMy0yMy4xIC4zLTIzLjEgMTYtOC45IDI3LjctMjUuMiAzMC00NC42IDMuNy0zMi0xOS40LTYxLjEtNTEuNC02NC44LTIyLjgtMi42LTQ1LjEgNy45LTU2LjEgMjYuNS0yMy45IDQxLjQgMS40IDczLjIgMjMuMSA4NC0xNC45LTEuNC0zNS40LTEyLjMtNDEuNC0zNS40LTYuOC0yNi41IDIuOS01MS40IDkuMi02My40IDAgMC00LjUtNi04LjMtOS4yIDAgMC0xNC4yIDAtMjUuNCA1LjUgMTIuMy0xNS43IDI2LTE0LjkgMjYtMTQuOSAwLTYuNi0uNi0xNS40LTMuNy0yMi4zLTUuNi0xMS40LTI0LjYtMTMuMy0zMi43IDIuOSAuMS0uMiAuMy0uNCAuNC0uNS01LjIgMTIuMy0xLjEgNTcuNyAxNy40IDkwLTIuNiAxLjQtOS40IDYuMy0xMy40IDEwLjMtMjIuMyAxMC01OCA2Mi4yLTU4IDYyLjItMjkuMSAxMS4xLTc5LjcgNTIuNS03Mi45IDgyLjMgLjMgMy4xIDEuNCA1LjcgMy4xIDcuNy0yLjkgMi4zLTUuNyA1LjItOC42IDguNi0xMi4zIDE0LjItNS41IDM2LjMgMTguMyAyNS4yIDE2LjMtNy40IDMwLjYtMjAuOSAzNy41LTMxLjQgMCAwLTUuNy01LjItMTYuOC00LjUgMjguNi02LjggMzUuNC05LjcgNDcuNy05LjQgOC4zIDQgOC4zLTM1LjQgOC4zLTM1LjQgMC0xNS4yLTIuMy0zMi0xMS41LTQyLjggMTIuOSAxMi42IDMwIDMzLjggMjguOSA2Mi42LS44IDE4LjktMTUuNyAyMy43LTE1LjcgMjMuNy05LjQgMTcuMS00NC42IDY4LTMxLjQgMTA5LjQgMCAwLTEwLTE1LjQtMTAuNS0yMi44LTE4IDIwLTQ4IDU0LTI1LjQgNjYuNiAyNy41IDE1LjIgMTEyLjMtOTEuNSAxMzAuMy0xNDYuOSAzNS43LTIxLjUgNTcuMi00OC44IDY2LTY3LjEgMjIuNyA0NC45IDk4LjQgOTcuNSAxMDQuNCA2MC45eiJdCiAgICB9OwogICAgZmFBd3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXdzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzUiLCAiTTE4MC40IDIwM2MtLjcgMjIuNiAxMC42IDMyLjcgMTAuOSAzOS0uMSAxLjMtLjYgMi41LTEuMyAzLjZzLTEuNyAyLTIuOCAyLjZsLTEyLjggOWMtMS43IDEuMi0zLjYgMS44LTUuNiAxLjktLjQgMC04LjIgMS44LTIwLjUtMjUuNi03LjUgOS40LTE3IDE2LjktMjcuOSAyMnMtMjIuNyA3LjctMzQuNyA3LjVjLTE2LjMgLjktNjAuNC05LjItNTguMS01Ni4yLTEuNi0zOC4zIDM0LjEtNjIuMSA3MC45LTYwIDcuMSAwIDIxLjYgLjQgNDcgNi4zbDAtMTUuNmMyLjctMjYuNS0xNC43LTQ3LTQ0LjgtNDMuOS0yLjQgMC0xOS40LS41LTQ1LjggMTAuMS03LjQgMy40LTguMyAyLjgtMTAuOCAyLjgtNy40IDAtNC40LTIxLjUtMi45LTI0LjIgNS4yLTYuNCAzNS45LTE4LjQgNjUuOS0xOC4yIDIwLjEtMS44IDQwLjEgNC40IDU1LjcgMTcuMyA2LjMgNy4xIDExLjIgMTUuNCAxNC4yIDI0LjRzNC4yIDE4LjUgMy41IDI4bDAgNjkuM3pNOTQgMjM1LjRjMzIuNC0uNSA0Ni4yLTIwIDQ5LjMtMzAuNSAyLjUtMTAuMSAyLjEtMTYuNCAyLjEtMjcuNC05LjctMi4zLTIzLjYtNC45LTM5LjYtNC45LTE1LjItMS4xLTQyLjggNS42LTQxLjcgMzIuMy0xLjIgMTYuOCAxMS4xIDMxLjQgMzAgMzAuNXptMTcwLjkgMjMuMWMtNy45IC43LTExLjUtNC45LTEyLjctMTAuNEwyMDIuNCA4My40Yy0xLTIuOC0xLjYtNS42LTEuOS04LjYtLjItMS4yIC4xLTIuNCAuOC0zLjRzMS44LTEuNiAzLTEuOGMuMiAwLTIuMSAwIDIyLjIgMCA4LjgtLjkgMTEuNiA2IDEyLjYgMTAuNEwyNzQuOSAyMjAuOCAzMDguMSA4MGMuNS0zLjIgMi45LTExLjEgMTIuOC0xMC4ybDE3LjIgMGMyLjItLjIgMTEuMS0uNSAxMi43IDEwLjRMMzg0LjEgMjIyLjcgNDIxIDgwLjFjLjUtMi4yIDIuNy0xMS40IDEyLjctMTAuNGwxOS43IDBjLjktLjEgNi4yLS44IDUuMyA4LjYtLjQgMS44IDMuNC0xMC43LTUyLjggMTY5LjktMS4xIDUuNS00LjggMTEuMS0xMi43IDEwLjRsLTE4LjcgMGMtMTAuOSAxLjItMTIuNS05LjctMTIuNy0xMC43bC0zMy4yLTEzNy4xLTMyLjggMTM3Yy0uMiAxLjEtMS43IDExLjktMTIuNyAxMC43bC0xOC4zIDAgMCAwem0yNzMuNSA1LjZjLTUuOSAwLTMzLjktLjMtNTcuNC0xMi4zLTIuMy0xLTQuMy0yLjYtNS43LTQuOHMtMi4xLTQuNi0yLjEtNy4xbDAtMTAuN2MwLTguNSA2LjItNi45IDguOC01LjkgMTAgNC4xIDE2LjUgNy4xIDI4LjggOS42IDM2LjcgNy41IDUyLjgtMi4zIDU2LjctNC41IDEzLjItNy44IDE0LjItMjUuNyA1LjMtMzQuOS0xMC41LTguOC0xNS41LTkuMS01My4xLTIxLTQuNi0xLjMtNDMuNy0xMy42LTQzLjgtNTIuNC0uNi0yOC4yIDI1LTU2LjIgNjkuNS01NiAxMi43IDAgNDYuNCA0LjEgNTUuNiAxNS42IDEuNCAyLjEgMiA0LjYgMS45IDdsMCAxMC4xYzAgNC40LTEuNiA2LjctNC45IDYuNy03LjctLjktMjEuNC0xMS4yLTQ5LjItMTAuOC02LjktLjQtMzkuOSAuOS0zOC40IDI1LS40IDE5IDI2LjYgMjYuMSAyOS43IDI2LjkgMzYuNSAxMSA0OC42IDEyLjggNjMuMSAyOS42IDE3LjEgMjIuMiA3LjkgNDguMyA0LjMgNTUuNC0xOS4xIDM3LjUtNjguNCAzNC40LTY5LjMgMzQuNHptNDAuMiAxMDQuOWMtNzAgNTEuNy0xNzEuNyA3OS4yLTI1OC41IDc5LjItMTE3LjEgLjgtMjMwLjMtNDIuMy0zMTcuMy0xMjAuNy02LjUtNS45LS44LTE0IDcuMi05LjUgOTYuNSA1NS4yIDIwNS43IDg0LjIgMzE2LjkgODQuMSA4My0uNCAxNjUuMS0xNy4zIDI0MS42LTQ5LjUgMTEuOC01IDIxLjggNy44IDEwLjEgMTYuNHptMjkuMi0zMy4zYy05LTExLjUtNTkuMy01LjQtODEuOC0yLjctNi44IC44LTcuOS01LjEtMS44LTkuNSA0MC4xLTI4LjIgMTA1LjktMjAuMSAxMTMuNC0xMC42IDcuNSA5LjUtMi4xIDc1LjQtMzkuNiAxMDYuOS01LjggNC45LTExLjMgMi4zLTguNy00LjEgOC40LTIxLjMgMjcuNC02OC41IDE4LjQtODB6Il0KICAgIH07CiAgICBmYUdsaWRlRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnbGlkZS1nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTYiLCAiTTQwNy4xIDIxMS4yYy0zLjUtMS40LTExLjYtMy44LTE1LjQtMy44LTM3LjEgMC02Mi4yIDE2LjgtOTMuNSAzNC41bC0uOS0uOWM3LTQ3LjMgMjMuNS05MS45IDIzLjUtMTQwLjQgMC03MS41LTM4LjItMTAwLjYtMTA4LjQtMTAwLjYtMTE1LjEgMC0xNzMuNCAxMTMuNy0xNzMuNCAxOTguNCAwIDg3LjkgNTEuMyAxMzYuNiAxMzguNiAxMzYuNiAxMiAwIDExLTEgMTEgMy44LTE2LjkgMTI4LjktOTAuOCAxMzMuMS05MC44IDk0LjYgMC0zOS4yIDQ1LTU4LjYgNDUuNS02MS0uMy0xMi4yLTQ3LTI3LjYtNTguOS0yNy42LTMzLjkgLjEtNTIuNCA1MS4yLTUyLjQgNzkuMyAwIDUxLjkgMzIuOCA4Ny45IDg1LjUgODcuOSA3Ny40IDAgMTM0LTc3LjggMTUxLjQtMTQ1LjQgMTUuMS02MC41IDExLjItNjMuMyAxOS43LTY3LjYgMzIuMi0xNi4yIDU3LjUtMjcgOTMuOC0yNyAxNy44IDAgMzAuNSAzLjcgNTguOSA4LjQgMi45IDAgNi43LTIuOSA2LjctNS44IDAtOC0zMy40LTYwLjUtNDAuOS02My40ek0yMzEuOCAxMjYuOGMtOS4zIDQ0LjctMTguNiA4OS42LTI3LjggMTM0LjMtMi4zIDEwLjItMTMuMyA3LjgtMjIgNy44LTM4LjMgMC00OS00MS44LTQ5LTczLjEgMC00NyAxOC0xMDkuMyA2MS44LTEzMy40IDctNC4xIDE0LjgtNi43IDIyLjYtNi43IDE4LjYgMCAyMCAxMy4zIDIwIDI4LjctLjEgMTQuMy0yLjcgMjguNS01LjYgNDIuNHoiXQogICAgfTsKICAgIGZhSnNmaWRkbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianNmaWRkbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjYyIsICJNNTExLjEgMjM3LjVjLTQuNy0yLjYtNS43LTUuNy02LjQtMTAuOC0yLjQtMTYuNS0zLjUtMzMuNi05LjEtNDkuMS0zNS45LTEwMC0xNTQtMTQzLjQtMjQ2LjgtOTEuNi0yNy40IDE1LjItNDkgMzYuNC02NS41IDYzLjktMy4yLTEuNS01LjUtMi43LTcuOC0zLjctMzAuMS0xMi40LTU5LTEwLjEtODUuMyA5LjItMjUuNSAxOC43LTM2LjQgNDQuNS0zMi43IDc2LjQgLjQgMy0yIDcuNi00LjUgOS41LTM5LjcgMzAtNTYgNzguMS00MS45IDEyNC42IDEzLjggNDUuNiA1Ny41IDc5LjggMTA1LjYgODEuNCAzMC4zIDEgNjAuNiAuNSA5MSAuNSA4NCAwIDE2OC4xIC41IDI1Mi4xLS41IDUyLjctLjYgOTYuMS0zNi45IDEwOC4yLTg3LjMgMTEuNS00OC4xLTExLjEtOTcuMy01Ni44LTEyMi42em0yMS4xIDE1Ni45Yy0xOC4yIDIyLjQtNDIuMyAzNS4zLTcxLjMgMzUuNy01Ni45IC44LTExMy44IC4yLTE3MC43IC4yIDAgLjctMTYzIC4yLTE2My43IC4yLTQzLjktLjMtNzYuNy0xOS44LTk1LjItNjAtMTguOS00MS4yLTQtOTAuOCAzNC4yLTExNi4xIDkuMi02LjEgMTIuNS0xMS42IDEwLjEtMjMuMS01LjUtMjYuNCA0LjUtNDggMjYuNC02MyAyMy0xNS43IDQ3LjQtMTYuMSA3Mi0zLjEgMTAuMyA1LjQgMTQuNiAxMS42IDIyLjItMi41IDE0LjItMjYuNCAzNC42LTQ2LjcgNjAuNy02MS4zIDk3LjUtNTQuNCAyMjguNCA3LjYgMjMwLjIgMTMyLjcgLjEgOC4yIDIuNCAxMi40IDkuOCAxNS45IDU3LjYgMjYuOCA3NC41IDk2LjEgMzUuMSAxNDQuNXptLTg3LjgtODAuNWMtNS44IDMxLjItMzQuNiA1NS4xLTY2LjcgNTUuMS0xNyAwLTMyLjEtNi41LTQ0LjEtMTcuNy0yNy43LTI1LjctNzEuMS03NS05NS45LTkzLjQtMjAuMS0xNC45LTQyLTEyLjMtNjAuMyAzLjgtNTAgNDQuMSAxNS45IDEyMS44IDY3LjEgNzcuMiA0LjUtNCA3LjgtOS41IDEyLjctMTIuOCA4LjItNS41IDIwLjgtLjkgMTMuMiAxMC42LTE3LjQgMjYuMy00OS4zIDM4LjItNzguOSAyOS4zLTI4LjktOC43LTQ4LjgtMzYtNDguNi03MC4yIDEuMi0yMi41IDEyLjQtNDMuMSAzNS40LTU2IDIyLjYtMTIuNiA0Ni40LTEzLjEgNjcgMi41IDUwLjggMzguNSA3NS42IDgxLjcgMTA3LjMgMTAxLjIgMjQuNiAxNS4xIDU0LjMgNy40IDY4LjgtMTcuNSAyOC44LTQ5LjItMzQuNi0xMDUtNzguOS02My41LTQgMy43LTYuOSA4LjktMTEuNCAxMS43LTExIDYuOC0xNy4zLTQuMS0xMi44LTEwLjQgMjAuNy0yOC42IDUwLjUtNDAuNCA4My4zLTI4LjIgMzEuNCAxMS43IDQ5LjEgNDQuNCA0Mi44IDc4LjJ6Il0KICAgIH07CiAgICBmYUtleWJhc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2V5YmFzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGY1IiwgIk0yODYuMiA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2ek0zOTguMSAyNzEuNGMtOS41LTE0LjYtMzkuNC01Mi40LTg3LjMtNzMuNy02LjEtMi43LTEyLjItNS4xLTE4LjQtNy4zIDQuMS05LjkgNi0yMC42IDUuOC0zMS40cy0yLjctMjEuMy03LjItMzEuMS0xMC45LTE4LjUtMTguOS0yNS43LTE3LjQtMTIuNi0yNy42LTE2Yy0xMi40LTQuMS0yMy4zLTYtMzIuNC01LjgtLjYtMi0xLjktMTEgOS40LTM1bC0yMi45LTEzLjUtNS41IDcuNmMtOC43IDEyLjEtMTYuOSAyMy42LTI0LjMgMzQuOS0yLjctLjYtNS41LTEuMS04LjMtMS4yLTQxLjUtMi40LTM5LTIuMy00MS4xLTIuMy01MC42IDAtNTAuOCA1Mi4xLTUwLjggNDUuOWwtMi40IDM2LjdjLTEuNiAyNyAxOS44IDUwLjIgNDcuNiA1MS44bDguOSAuNUMxMDYgMjE1LjUgOTAuNCAyMjcuNSA3Ni42IDI0MS40IDE0IDMwNC43IDE0IDM3NCAxNCA0MjkuOGwwIDMzLjYgMjMuMy0yOS44YzMuMSAxMy4xIDggMjUuOCAxNC42IDM3LjYgNS44IDEwLjEgMTQuOSA5LjQgMTkuNiA3LjMgNC4yLTEuOSAxMC02LjkgMy44LTIwLjEtOC0xNi44LTEzLjMtMzQuNy0xNS44LTUzLjFsNDYuOC01OS44LTI0LjcgNzQuMWM1OC4yLTQyLjQgMTU3LjQtNjEuOCAyMzYuMi0zOC42IDM0LjIgMTAuMSA2Ny40IC43IDg0LjctMjMuOCAuNy0xIDEuMi0yLjIgMS44LTMuMiAxLjggOS40IDIuNyAxOC45IDIuOCAyOC40IDAgMjMuMy0zLjcgNTIuOS0xNC45IDgxLjYtMi41IDYuNSAxLjggMTQuNSA4LjYgMTUuNyA3LjQgMS42IDE1LjMtMy4xIDE4LjQtMTEuMSA5LjYtMjUuNSAxNC42LTU0LjYgMTQuNi04Ni4yIDAtMzguNi0xMy03Ny41LTM1LjktMTEwLjl6TTE0Mi40IDEyOC42bC0xNS43LS45LTEuNCAyMS44IDEzLjEgLjhjLS42IDYuNS0uNSAxMy4xIC4zIDE5LjZsLTIyLjQtMS4zYy0xLjYtLjEtMy4yLS41LTQuNy0xLjFzLTIuOC0xLjYtMy45LTIuOC0xLjktMi42LTIuNS00LjEtLjgtMy4xLS43LTQuN0wxMDcgMTE5YzEtMTIuMiAxMy45LTExLjMgMTMuMy0xMS4zbDI5LjEgMS43Yy0yLjggNi4yLTUuMSAxMi42LTcgMTkuMnpNMjkwLjggMzAwLjhjLTIuMSAxLjYtNC44IDIuNC03LjUgMi4ycy01LjEtMS41LTYuOS0zLjVsLTkuNy0xMS41LTM0LjQgMjdjLTEuNiAxLjMtMy43IDEuOS01LjggMS43cy00LTEuMi01LjMtMi44bC0xNS44LTE4LjZjLTEuMi0xLjYtMS43LTMuNS0xLjUtNS40czEuMy0zLjcgMi44LTQuOWwzNC42LTI3LjItMTQuMS0xNi43LTE3LjEgMTMuNWMtMS42IDEuMi0zLjUgMS44LTUuNSAxLjZzLTMuOC0xLjEtNS4xLTIuNmMwIDAtMy43LTQuNC0zLjgtNC41LTEuMi0xLjYtMS43LTMuNS0xLjUtNS41czEuMy0zLjcgMi44LTQuOUwyMTQgMjI1LjJzLTE4LjUtMjItMTguNi0yMi4xYy0uOC0xLTEuMy0yLjEtMS43LTMuM3MtLjQtMi41LS4zLTMuNyAuNi0yLjQgMS4yLTMuNSAxLjUtMiAyLjUtMi44YzIuMS0xLjcgNC44LTIuNCA3LjQtMi4yczUuMSAxLjUgNi45IDMuNmw4MS4xIDk2LjNjLjggMSAxLjMgMi4xIDEuNyAzLjNzLjQgMi41IC4zIDMuNy0uNiAyLjUtMS4yIDMuNS0xLjUgMi4xLTIuNSAyLjh6TTE4Ny40IDQxOWExOCAxOCAwIDEgMCAwIDM2IDE4IDE4IDAgMSAwIDAtMzZ6Il0KICAgIH07CiAgICBmYUx1bW9uRHJvcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsdW1vbi1kcm9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZTMiLCAiTTQ4MCAzMmM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZMOTYgNDQ4Yy01MyAwLTk2LTQzLTk2LTk2TDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzg0IDB6TTMwMi40IDExNC43Yy05LjgtMTYuNC0yMC41LTE2LjQtMjkuNiAwbC02OC45IDExNGMtMTAuNyAxNS42LTE2LjQgMzIuOC0xNi40IDUyLjUgMCA1MC45IDQ0LjMgOTQuMyAxMDAuMSA5NC4zIDU1IDAgMTAwLjktNDMuNSAxMDAuOS05NC4zIDAtMTkuNy02LjYtMzcuOC0xNy4yLTUyLjVsLTY4LjktMTE0eiJdCiAgICB9OwogICAgZmFGb3JnZWpvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcmdlam8iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTg2MCIsICJNMjYxLjUgMS4yYzM0IDAgNjEuNiAyNy42IDYxLjYgNjEuNnMtMjcuNiA2MS42LTYxLjYgNjEuNmMtMjMgMC00My4xLTEyLjctNTMuNy0zMS40bC0yOC41IDBjLTI0IDAtNDcgOS41LTY0IDI2LjVzLTI2LjUgNDAtMjYuNSA2NGwwIDQzLjVjMjYtMTkuNSA1Ny43LTMwLjIgOTAuNi0zMC4ybDI4LjUgMGMxMC42LTE4LjcgMzAuNi0zMS40IDUzLjctMzEuNCAzNCAwIDYxLjYgMjcuNiA2MS42IDYxLjZzLTI3LjYgNjEuNi02MS42IDYxLjZjLTIzIDAtNDMuMS0xMi43LTUzLjctMzEuNGwtMjguNSAwYy0yNCAwLTQ3IDkuNS02NCAyNi41cy0yNi41IDQwLTI2LjUgNjRsMCA0Ny44YzE4LjcgMTAuNiAzMS40IDMwLjYgMzEuNCA1My42IDAgMzQtMjcuNiA2MS42LTYxLjYgNjEuNlMtMyA0ODMuMi0zIDQ0OS4yYzAtMjMgMTIuNy00My4xIDMxLjQtNTMuNmwwLTIxMmMwLTQwIDE1LjktNzguNCA0NC4yLTEwNi43czY2LjctNDQuMiAxMDYuNy00NC4ybDI4LjUgMGMxMC42LTE4LjcgMzAuNi0zMS40IDUzLjctMzEuNHpNNTguNiA0MjMuOWMtMTQgMC0yNS4zIDExLjMtMjUuMyAyNS4zczExLjMgMjUuNCAyNS4zIDI1LjQgMjUuNC0xMS40IDI1LjQtMjUuNC0xMS40LTI1LjMtMjUuNC0yNS4zek0yNjEuNSAyMDEuN2EyNS40IDI1LjQgMCAxIDAgMCA1MC43IDI1LjQgMjUuNCAwIDEgMCAwLTUwLjd6bTAtMTY0LjJhMjUuNCAyNS40IDAgMSAwIDAgNTAuNyAyNS40IDI1LjQgMCAxIDAgMC01MC43eiJdCiAgICB9OwogICAgZmFQb3N0Z3Jlc3FsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBvc3RncmVzcWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg1OCIsICJNMjE5LjggMTcxLjNjMy45IC41IDEzLjEgMi43IDEyLjMgOC41LS44IDUuOS05LjIgOS4xLTE0LjIgOC40LTQuNy0uNy0xMy4yLTYuMS0xMi4zLTEyLjFsLjMtMi4xYzQuMiAwIDguMy0zLjUgMTMuOS0yLjd6bTE2OC4xLTMuNGMxMC44IDIuNi0xLjEgMTMuNS02LjggMTQuMy00LjMgLjYtMTIuMS0yLjItMTIuOC03LjQtMS03LjQgMTUuNy03LjkgMTkuNy02Ljl6bS0yMi0xNDAuOGMzNS43LS4zIDgxLjMgOS40IDExNC4zIDUxLjcgNy4yIDkuMiAxMCAyNCA5LjcgNDAuOS0uOCA0OS42LTI2IDEyOS40LTcwLjcgMTk3LjQgNC41IDIuOSAxNy42IDcuNCA1MS4xIC41IDUuNi0xLjIgMTIuNy0yLjIgMTcuNiAxLjYgMTguMiAxMy45LTE5LjYgMzUuMS0yOC40IDM5LjItMTMuMiA2LjItMzQuOCA5LjUtNTEuMiA4LjctMi4xLS4yLTQuMy0uMi02LjMtLjYtNS4xLTEuMS03LjQtMS04LjMtLjctMS4xIC4zLTEuNCAyLjktMS42IDMuOC0yLjggMjQuOS03LjcgNjQuNy0xMC43IDgyLTIuOCAxNi4zLTcuNyAyOS4zLTE3LjIgMzkuMi05LjUgOS45LTIyLjggMTUuNy00MC42IDE5LjUtMjIuMyA0LjgtMzcuOS0uMS00OC43LTkuMS0xMC4zLTguNy0xNS4yLTIwLjQtMTgtMjcuNC0xLjgtNC41LTMtMTEuNS00LTE5LjgtMi4zLTE5LjgtMy4zLTUwLjQtMy04My4zLTI0LjYgMjIuMS01NSAxNy4yLTY4LjIgMTMuOS0xMC41LTIuNi0zMy0xNi4xLTE3LjUtMjguNyAxMS45LTkuNyAzMC4zLTUuNSA0Mi4yLTE1IDIuNC0xLjkgMTEuNC0xMC42IDExLjQtMTMuNS0xMC0uMy0xOS42LTIuOS0yOC4xLTcuNS0xMy41IDE0LjUtMjYuNCAyOS41LTM5LjMgNDQuNi04LjMgOS45LTE3LjQgMTUuOC0yNy40IDE2LjItOS45IC40LTE4LjctNC42LTI2LjEtMTEuOC03LjMtNy4xLTE0LjEtMTcuMi0yMC40LTI5LTE5LTM1LjUtMzMuMi04Ni4xLTQyLjMtMTI2LjQtNi0yNi43LTkuNi00OS4xLTEwLjEtNTktMi4yLTQ0LjMgOC03NC4xIDI2LTkzLjIgMTcuOS0xOSA0Mi40LTI2IDY2LjEtMjcuNCAzNS42LTIgNzEgOC41IDg2LjYgMTMuOGw1IDEuOGMxNS45LTEwLjggMzYuMS0xNy40IDYxLjctMTcgMTMuMiAuMiAyNS41IDIuMiAzNi43IDQuMiAxOC42LTcuMSAzOS44LTkuNSA1OS40LTkuN3ptLTk2IDIwLjVjLTI0LjctLjQtNDIuOSA2LjUtNTYuNiAxNi44LS44IC42LTEuOCAxLTIuOCAxLjItMTQuNCAxMS44LTIzLjkgMjgtMzAuMyA0NC44LTcuMiAxOS4xLTEwIDM4LjUtMTEuMSA1MS41IDcuNi00LjMgMTcuOS04LjcgMjguNy0xMS4yIDEwLjUtMi40IDIyLjQtMy4yIDMyLjcgLjggMTAuOSA0LjIgMTkgMTMuMyAyMi4yIDI4LjEgNy41IDM0LjcgNi43IDU4LjIgMi43IDc1LjktNC44IDIxLTE2LjggMzkuNS0yMS45IDYwLjQgMy41LS45IDcuMS0uNiA5LjggLjFsNy4yIDIuOWM3LjcgNC40IDEyLjggMTMgMTQgMjEuNyAyIDYgLjEgMTQuMyAwIDIwLjYgNi43IDE2LjMgNy4yIDM2LjEgNi43IDUzLjMtLjcgMjUtMSA0MC4yIDMuMiA1MS43IDIuOSA3LjkgNC43IDE2LjQgMTAuNCAyMi44IDIuNiAzIDYuMSA1LjUgMTAuOSA2LjggMTguNSA1LjEgNDQtNC43IDU2LjYtMTguMiA3LjctOC4yIDEyLjMtMTkuMyAxMy40LTMzLjkgMS4xLTEzLjYgNC4yLTI3LjYgNi4zLTQxLjFsMi45LTguOGMxLjctMTQuOCAzLjQtMjkuNiA1LTQ0LjQtLjQtOS4xIC45LTE2LjEgMy45LTIxLjUgMy4xLTUuNyA3LjYtOC45IDExLjgtMTAuOCAxLjgtLjggMy45LTEuMiA1LjYtMi0xLjYtMi40LTMuNi00LjYtNS4zLTYuOC04LjItMTAuNC0xMy4zLTIyLjMtMTkuNy0zMy44LTguNS0xNS4yLTIzLjgtNDIuMi0zMC4xLTY3LjUtNC4xLTE2LjQtNC45LTM0LjUgNi00NyA5LjgtMTEuMiAyNi45LTE1LjUgNTEuOS0xMy0zLjQtMTAtMTEuNC0yNy41LTI0LjgtNDQuNy0xOC0yMy00NS43LTQ1LjktODUuNy01My4xLTcuMy0uOS0xNS4yLTEuNS0yMy42LTEuN3ptLTMyLjIgMjgyYy04IC43LTE1LjUgMTguMi0yMS43IDIzLjEtNi4yIDQuOS0xNC41IDcuNi0zMCAxMC43LTQuNSAuOS03LjcgMS45LTkuNyAyLjggMjIuMyAxNS44IDU4LjMgMy4yIDcyLjYtMTYuOCAxLjctMi40IDIuMS02IC41LTEwLjItMS43LTQuNS02LjQtMTAuMS0xMS45LTkuNnpNMTE3LjYgNDkuMmMtMjEuNiAxLjItNDIgNy41LTU2LjQgMjIuOC0xNC40IDE1LjItMjQuMiA0MC42LTIyLjEgODIuNSAuNCA4LjUgMy44IDMwIDkuOCA1Ni42IDguOSAzOS44IDIzLjcgOTAuMyA0MC42IDEyMi4yIDYgMTEuMSAxNy40IDMzIDMyLjggMzIuMyA0LjQtLjIgMTAuMS0yLjggMTctMTEgMTIuNi0xNC44IDI1LjItMjkuNSAzOC41LTQzLjctMTcuOS0xNS40LTI4LjUtNDAuMy0yNC44LTY3LjIgMy40LTI0LjMgLjUtNDguMiAxLjItNzIuNSAuNC0xMS45IDIuMy0zOC43IDEyLjYtNjUuOCA1LjktMTUuNSAxNC41LTMxLjMgMjcuNC00NC4yLTE2LjQtNS40LTQ3LjEtMTMuNS03Ni42LTExLjl6TTQwNS4xIDMyOC45Yy0zLjggMS4xLTYuNyAyLjItOC43IDUuOC0xLjMgMi40LTIuNSA2LjctMi4yIDE0LjIgNC44IDMuOSAxNC4xIDMuMyAxOS44IDMuMiAxMy45LS4yIDI5LjktMy4xIDM5LjMtNy41IDcuOS0zLjcgMTQuNy04LjMgMTktMTIuMi0zOC4yIDcuNy01NS40IDIuMS02My4yLTQuOC0xLjMgLjQtMi45IC45LTMuOSAxLjJ6TTIyNS4zIDE2NC45Yy0xNS40LTUuOS0zNS40IDEuOC00OC45IDkuNC0zLjYgMi02LjUgNC03LjkgNS4yIC40IDguOCAyLjggMzYuMS0xLjQgNjYuMy01LjEgMzYuNiAyMS43IDY2LjYgNTIuNSA2Ni43IDUuMS0yMC44IDE3LTM5LjIgMjEuOC02MC4xIDMuNS0xNS4zIDQuNS0zNi42LTIuNy02OS43LTIuMy0xMC41LTcuNC0xNS40LTEzLjQtMTcuN3pNMzcwLjEgNDIuMmMtMTUuMi0uMi0yOC44IDEuNy0zOS4yIDMuOCAyNiAxMS44IDQ1LjYgMjkuNyA1OS42IDQ3LjYgMTcuNCAyMi4yIDI2LjMgNDQuMSAyOSA1NSAuNyAyLjcgMS4zIDUuNyAuNSA4LjQgLjYgMTguOS00IDMxLjMtNC42IDQ5LjItLjQgMTIuOSAyLjkgMjguMSAzLjcgNDQuNyAuOCAxNS43LTEgMzIuNS0xMS4yIDQ5LjUgLjggMSAxLjYgMi4xIDIuNCAzLjEgMjYuOC00Mi4yIDQ2LTg4LjYgNTYuMy0xMjguNSA1LjUtMjEuNCA4LjQtNDAuNyA4LjctNTYuMSAuMi0xNS4yLTItMjUuNC01LjgtMzAuNC0yOC4zLTM2LjEtNjYuOC00NS44LTk5LjMtNDYuMnptMzUuNiAxMTkuNWMtMjUuMy0zLjItMzcuMyAxLjUtNDIuOCA3LjctNiA2LjgtNi44IDE4LjUtMi45IDM0LjEgNS43IDIyLjYgMjAuMSA0OC42IDI4LjcgNjQgMy42IDYuNCA2LjQgMTMuMSAxMCAxOS40IDUuNS0xMS43IDYuNi0yMy41IDYtMzUuNS0uNy0xNS00LjItMzAuMy0zLjctNDUuOGwuNC03LjRjMS4yLTE0LjMgNC4xLTI0LjYgNC4yLTM2LjV6Il0KICAgIH07CiAgICBmYVdlZWJseSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWVibHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVjYyIsICJNNDI1LjEgNjUuOGMtMzkuOSAwLTczLjMgMjUuNy04My43IDY0LjMtMTguMi01OC4xLTY1LjUtNjQuMy04NS02NC4zLTE5LjggMC02Ni44IDYuMy04NS4zIDY0LjMtMTAuNC0zOC42LTQzLjQtNjQuMy04My43LTY0LjMtNDkgMC04Ny41IDMzLjktODcuNSA3Ny4yIDAgMjkgNC4yIDMzLjMgNzcuMiAyMzMuNSAyMi40IDYwLjYgNjcuOCA2OS40IDkyLjcgNjkuNCAzOS4yIDAgNzAtMTkuNSA4NS45LTU0IDE1LjkgMzQuOCA0Ni43IDU0LjMgODUuOSA1NC4zIDI1IDAgNzAuNC05LjEgOTIuNy02OS43IDc2LjYtMjA4LjYgNzcuNS0yMDUuNiA3Ny41LTIyNy4yIC42LTQ4LjMtMzYtODMuNS04Ni45LTgzLjV6bTI2LjMgMTE0LjhMMzg1LjkgMzU3LjFjLTcuOSAyMS41LTIxLjIgMzcuMi00Ni4yIDM3LjItMjMuNCAwLTM3LjQtMTIuNC00NC0zMy45bC0zOS4zLTExNy40LTEgMC0zOS4zIDExNy40Yy03IDIxLjUtMjAuOSAzMy42LTQ0IDMzLjYtMjUgMC0zOC4zLTE1LjctNDYuMi0zNy4yTDYwLjkgMTgxLjZjLTUuNC0xNC44LTcuOS0yMy45LTcuOS0zNC41IDAtMTYuMyAxNS44LTI5LjQgMzguMy0yOS40IDE4LjcgMCAzMiAxMS44IDM2LjEgMjkuMWw0NCAxMzkuOCAxIDAgNDQuNy0xMzYuOGM2LTE5LjcgMTYuNS0zMi4xIDM5LTMyLjFzMzIuOSAxMi4xIDM5IDMyLjFsNDQuNyAxMzYuOCAxIDAgNDQtMTM5LjhjNC4xLTE3LjIgMTcuNC0yOS4xIDM2LjEtMjkuMSAyMi4yIDAgMzguMyAxMy4zIDM4LjMgMzUuNy0uMyA3LjktNC4xIDE2LTcuNiAyNy4yeiJdCiAgICB9OwogICAgZmFEb2NrZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZG9ja2VyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzOTUiLCAiTTM0OS45IDIzNi4zbC02Ni4xIDAgMC01OS40IDY2LjEgMCAwIDU5LjR6bTAtMjA0LjNsLTY2LjEgMCAwIDYwLjcgNjYuMSAwIDAtNjAuN3ptNzguMiAxNDQuOGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40ek0yNzEuOCAxMDQuN2wtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xem03OC4xIDBsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXptMjc2LjggMTAwYy0xNC40LTkuNy00Ny42LTEzLjItNzMuMS04LjQtMy4zLTI0LTE2LjctNDQuOS00MS4xLTYzLjdsLTE0LTkuMy05LjMgMTRjLTE4LjQgMjcuOC0yMy40IDczLjYtMy43IDEwMy44LTguNyA0LjctMjUuOCAxMS4xLTQ4LjQgMTAuN2wtNDM0LjcgMGMtOC43IDUwLjggNS44IDExNi44IDQ0IDE2Mi4xIDM3LjEgNDMuOSA5Mi43IDY2LjIgMTY1LjQgNjYuMiAxNTcuNCAwIDI3My45LTcyLjUgMzI4LjQtMjA0LjIgMjEuNCAuNCA2Ny42IC4xIDkxLjMtNDUuMiAxLjUtMi41IDYuNi0xMy4yIDguNS0xNy4xbC0xMy4zLTguOXpNMTE1LjYgMTc2LjhsLTY2IDAgMCA1OS40IDY2LjEgMCAwLTU5LjQtLjEgMHptNzguMSAwbC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6bTc4LjEgMGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40em0tNzguMS03Mi4xbC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6Il0KICAgIH07CiAgICBmYU1hZ2VudG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFnZW50byIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2M0IiwgIk00NDUuOSAxMjcuOWwwIDI1Ni4xLTYzLjQgMzYuNSAwLTI1NS44LTE1OC41LTkxLjYtMTU4LjYgOTEuNiAuNCAyNTUuOS02My4zLTM2LjYgMC0yNTUuOSAyMjEuOS0xMjguMSAyMjEuNSAxMjcuOXpNMjU1LjggNDIwLjVsLTMxLjYgMTguNC0zMS44LTE4LjIgMC0yNTYtNjMuMyAzNi42IC4xIDI1NS45IDk0LjkgNTQuOSA5NS4xLTU0LjkgMC0yNTYtNjMuNC0zNi42IDAgMjU1Ljl6Il0KICAgIH07CiAgICBmYVRvckJyb3dzZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidG9yLWJyb3dzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTgzOCIsICJNMjU2LjUgNDY1LjRsMC0zMWM5OC4zLS4zIDE3Ny45LTgwIDE3Ny45LTE3OC40UzM1NC44IDc3LjkgMjU2LjUgNzcuNmwwLTMxQzM3MiA0Ni44IDQ2NS40IDE0MC41IDQ2NS40IDI1NlMzNzIgNDY1LjIgMjU2LjUgNDY1LjR6bTAtMTA4LjZjNTUuNC0uMyAxMDAuMy00NS4zIDEwMC4zLTEwMC44UzMxMiAxNTUuNSAyNTYuNSAxNTUuMmwwLTMxYzcyLjYgLjMgMTMxLjQgNTkuMiAxMzEuNCAxMzEuOFMzMjkuMSAzODcuNiAyNTYuNSAzODcuOGwwLTMxem0wLTE1NS4xYzI5LjcgLjMgNTMuOCAyNC41IDUzLjggNTQuM3MtMjQgNTQtNTMuOCA1NC4zbDAtMTA4LjZ6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6Il0KICAgIH07CiAgICBmYUdpdEFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXQtYWx0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4NDEiLCAiTTQzOS42IDIzNi4xTDI0NCA0MC41QzIzOC42IDM1IDIzMS4yIDMyIDIyMy42IDMycy0xNSAzLTIwLjQgOC40bC00MC43IDQwLjYgNTEuNSA1MS41YzI3LjEtOS4xIDUyLjcgMTYuOCA0My40IDQzLjdsNDkuNyA0OS43YzM0LjItMTEuOCA2MS4yIDMxIDM1LjUgNTYuNy0yNi41IDI2LjUtNzAuMi0yLjktNTYtMzcuM2wtNDYuMy00Ni4zIDAgMTIxLjljMjUuMyAxMi41IDIyLjMgNDEuOCA5LjEgNTUtNi40IDYuNC0xNS4yIDEwLjEtMjQuMyAxMC4xcy0xNy44LTMuNi0yNC4zLTEwLjFjLTE3LjYtMTcuNi0xMS4xLTQ2LjkgMTEuMi01NmwwLTEyM2MtMjAuOC04LjUtMjQuNi0zMC43LTE4LjYtNDVMMTQyLjYgMTAxIDguNSAyMzUuMUMzIDI0MC42IDAgMjQ3LjkgMCAyNTUuNXMzIDE1IDguNSAyMC40TDIwNC4xIDQ3MS42YzUuNCA1LjQgMTIuNyA4LjQgMjAuNCA4LjRzMTUtMyAyMC40LTguNEw0MzkuNiAyNzYuOWM1LjQtNS40IDguNC0xMi44IDguNC0yMC40cy0zLTE1LTguNC0yMC40eiJdCiAgICB9OwogICAgZmFGaXJlZm94QnJvd3NlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlZm94LWJyb3dzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTAwNyIsICJNMTMwLjIgMTI3LjVsMCAwem0zNTEuNCA0NS40Yy0xMC42LTI1LjUtMzIuMS01My00OC45LTYxLjcgMTMuNyAyNi45IDIxLjcgNTMuOSAyNC43IDc0IDAgLjEgMCAuMyAuMSAuNC0yNy42LTY4LjgtNzQuNC05Ni41LTExMi42LTE1Ni44LTE1LTIzLjctMTAuOS0yNS4yLTEzLjEtMjQuN2wtLjEgLjFjLTQ2LjcgMjYtNzUuMyA3OC40LTgyLjYgMTIyLjctMTYuNiAuOS0zMi45IDUtNDcuOSAxMi4xLTEuNCAuNi0yLjUgMS43LTMuMSAzcy0uOSAyLjgtLjYgNC4zYy4yIC44IC42IDEuNiAxLjEgMi4zczEuMiAxLjMgMS45IDEuNyAxLjYgLjcgMi40IC44IDEuNyAwIDIuNS0uM2wuNS0uMmMxNS41LTcuMyAzMi40LTExLjIgNDkuNS0xMS4zIDYyLjgtLjYgOTcuMiA0NCAxMDcuNiA2Mi4zLTEzLTkuMi0zNi40LTE4LjItNTguOC0xNC4zIDg3LjcgNDMuOSA2NC4yIDE5NC41LTU3LjQgMTg5LjItNTkuNS0yLjYtOTcuMS01MS0xMDAuNS05MC44IDAgMCAxMS4yLTQxLjkgODAuNi00MS45IDcuNSAwIDI4LjktMjAuOSAyOS4zLTI3LS4xLTItNDIuNS0xOC45LTU5LjEtMzUuMi04LjgtOC43LTEzLjEtMTIuOS0xNi44LTE2LjEtMi0xLjctNC4xLTMuMy02LjMtNC44LTUuNi0xOS41LTUuOC00MC0uNy01OS42LTI1LjEgMTEuNC00NC42IDI5LjQtNTguNyA0NS40bC0uMSAwYy05LjctMTIuMi05LTUyLjYtOC40LTYxLjEtLjEtLjUtNy4yIDMuNy04LjIgNC4zLTguNiA2LjEtMTYuNSAxMi45LTIzLjggMjAuNC0xNi4zIDE2LjYtNDQuMSA1MC4yLTU1LjUgMTAxLjItNC41IDIwLjQtNi44IDQ0LjQtNi44IDUyLjMgMCAxMzQuNyAxMDkuMiAyNDMuOSAyNDMuOSAyNDMuOSAxMjAuNiAwIDIyMy04Ny4yIDI0MC40LTIwMi42IDExLjYtNzYuNy0xNC43LTEzMS4xLTE0LjctMTMyeiJdCiAgICB9OwogICAgZmFDbG91ZHNtaXRoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3Vkc21pdGgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM4NCIsICJNNTEyIDIyNy42TDUxMiAyODQuNSAyODQuNCA1MTIgMjI3LjYgNTEyIDAgMjg0LjQgMCAyMjcuNiAyMjcuNiAwIDI4NC41IDAgNTEyIDIyNy42em0tMjU2IDE2MmMxNy44IC41IDM1LjYtMi42IDUyLjItOS4xczMxLjgtMTYuMiA0NC42LTI4LjcgMjMtMjcuMyAyOS45LTQzLjggMTAuNS0zNC4xIDEwLjUtNTItMy42LTM1LjUtMTAuNS01Mi0xNy4xLTMxLjMtMjkuOS00My44LTI4LTIyLjItNDQuNi0yOC43LTM0LjQtOS42LTUyLjItOS4xYy0xNy44LS41LTM1LjYgMi42LTUyLjIgOS4xcy0zMS44IDE2LjMtNDQuNiAyOC43LTIzIDI3LjMtMjkuOSA0My44LTEwLjUgMzQuMS0xMC41IDUyIDMuNiAzNS41IDEwLjUgNTIgMTcuMSAzMS4zIDI5LjkgNDMuOCAyOCAyMi4yIDQ0LjYgMjguNyAzNC40IDkuNiA1Mi4yIDkuMXoiXQogICAgfTsKICAgIGZhV2l6YXJkc09mVGhlQ29hc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2l6YXJkcy1vZi10aGUtY29hc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjczMCIsICJNMjE5LjIgMzQ1LjdjLTEuOSAxLjQtMTEuMSA4LjQtLjMgMjMuNiA0LjYgNi40IDE0LjEgMTIuOCAyMS43IDYuNiA2LjUtNC45IDcuNC0xMi45IC4zLTIzLTUuNS03LjgtMTQuMy0xMi45LTIxLjctNy4xem0zMzYuOCA3NS45Yy0uMyAxLjctLjYgMS43IC44IDAgMi4xLTQuMiA0LjItMTAuMiA1LTE5LjkgMy4xLTM4LjUtNDAuMy03MS41LTEwMS4zLTc4LTU0LjctNi0xMjQuNCA5LjItMTg4LjggNjAuNWwtLjMgMS42YzIuNiA1IDUgMTAuNyAzLjQgMjEuMmwuOCAuM2M2My45LTU4LjQgMTMxLjItNzcuMiAxODQuNC03My44IDU4LjQgMy43IDEwMCAzNCAxMDAgNjguMSAwIDEwLTIuNiAxNS43LTMuOSAyMC4yek0zOTIuMyAyNDAuNGMuOCA3LjEgNC4yIDEwLjIgOS4yIDEwLjUgNS41IC4zIDkuNC0yLjYgMTAuNS02LjYgLjgtMy40IDIuMS0yOS44IDIuMS0yOS44UzQwMi44IDIyMSAzOTkuMSAyMjVjLTMuNyAzLjctNy4zIDguNC02LjggMTUuNXptLTUwLTE1MS4xYy0yMDQuNSAwLTMyOS4yIDEzNy41LTM0MS41IDE1MS45LTEgLjUtMS4zIC44IC44IDEuMyA2MC41IDE2LjUgMTU1LjggODEuMiAxOTYuMSAyMDIuMmwxIC4zYzU1LjItNjkuOSAxNDAuOS0xMjguMSAyMzctMTI4LjEgODAuOSAwIDEzMC4yIDQyLjIgMTMwLjIgODAuNCAwIDE4LjMtNi42IDMzLjUtMjIuMyA0Ni4zIDAgMS0uMiAuOCAuOCAuOCAxNC43LTEwLjcgMjcuNS0yOC44IDI3LjUtNDguMiAwLTIyLjgtMTIuMS0zOC4yLTEyLjEtMzguMiA3LjEgNy4xIDEwLjcgMTYuMiAxMC43IDE2LjIgNS44LTQwLjkgMjctNjIuMyAyNy02Mi4zLTIuNC05LjctNi44LTE3LjgtNi44LTE3LjggNy42IDguMSAxNC40IDI3LjUgMTQuNCA0MS40IDAgMTAuNS0zLjQgMjIuOC0xMi42IDMxLjlsLjMgLjVjOC4xLTUgMTYuNS0xNi44IDE2LjUtMzggMC0xNS43LTQuNy0yNS45LTQuNy0yNS45IDUuOC01LjIgMTEuMy05LjIgMTYtMTEuOCAuOCAzLjQgMi4xIDkuNyAyLjQgMTQuOSAwIDEgLjggMS44IDEgMCAuOC01LjgtLjMtMTYuMi0uMy0xNi41IDYtMy4xIDkuNy00LjUgOS43LTQuNS0xNS43LTExMC4zLTE0NC0xOTYuOS0yOTEuMi0xOTYuOXpNMjQzIDM3OC45Yy0xMS4xIDktMjQuMiA0LjEtMzAuNi00LjItNy40LTkuNi02LjgtMjQuMSA0LjItMzIuNSAxNC44LTExLjQgMjcuMS0uNSAzMS4yIDUuNSAuMyAuNCAxMi4xIDE2LjYtNC43IDMxLjJ6bTIuMS0xMzYuNGw5LjQtMTcuOCAxMS44IDcxLTEyLjYgNi0yNC42LTI4LjggMTQuMS0yNi43IDMuNyA0LjQtMS44LTguMXptMTguNiAxMTcuNmwtLjMtLjNjMi00LjEtMi41LTYuNi0xNy41LTMxLjctMS4zLTIuNC0zLjEtMi45LTQuNC0yLjZsLS4zLS41YzcuOS01LjggMTUuNC0xMC4yIDI1LjQtMTUuN2wuNSAuM2MxLjMgMS44IDIuMSAyLjkgMy40IDQuN2wtLjMgLjVjLTEtLjMtMi40LS44LTUuMiAuMy0yLjEgLjgtNy45IDMuNy0xMi4zIDcuNmwwIDEuM2MxLjYgMi40IDMuOSA2LjYgNS44IDkuN2wuMyAwYzEwLTYuMyA3LjYtNC41IDExLjUtNy45bC4zIDBjLjUgMS44IC41IDEuOCAxLjggNS41bC0uMyAuM2MtMy4xIC42LTQuNyAuMy0xMS41IDUuNWwwIC4zYzkuNSAxNyAxMSAxNi44IDEyLjYgMTZsLjMgLjNjLTIuMyAxLjYtNi4zIDQuMi05LjcgNi42ek0zMTkgMzI3LjZjLTMuMSAxLjYtNiAyLjktMTAgNWwtLjMtLjNjMS4zLTIuNiAxLjItMi43LTExLjgtMzIuNWwtLjMtLjNjLS4yIDAtOC45IDMuNy0xMCA3LjNsLS41IDAtMS01LjggLjMtLjVjNy4zLTQuNiAyNS41LTExLjYgMjcuOC0xMi42bC41IC4zIDMuMSA1LS4zIC41Yy0zLjUtMS44LTcuNCAuOC0xMi4zIDIuNmwwIC4zYzEyLjMgMzIgMTIuNyAzMC42IDE0LjcgMzAuNmwwIC4yem00NC44LTE2LjVjLTQuMiAxLTUuMiAxLjMtOS43IDIuOWwtLjMtLjMgLjUtNC41Yy0xLTMuNC0zLjEtMTEuNS0zLjctMTMuNmwtLjMtLjNjLTMuNCAuOC04LjkgMi42LTEyLjggMy45bC0uMyAuM2MuOCAyLjYgMy4xIDkuOSA0LjIgMTMuOSAuOCAyLjQgMS44IDIuOSAyLjkgMy4xbDAgLjVjLTMuNyAxLTcuMSAyLjYtMTAuMiAzLjlsLS4zLS4zYzEtMS4zIDEtMi45IC4zLTUtMS0zLjEtOC4xLTIzLjgtOS4yLTI3LjItLjUtMS44LTEuNi0zLjEtMi42LTMuMWwwLS41YzMuMS0xIDYtMi4xIDEwLjctMy40bC4zIC4zLS4zIDQuN2MxLjMgMy45IDIuNCA3LjYgMy4xIDkuN2wuMyAwYzMuOS0xLjMgOS40LTIuOSAxMi44LTMuOWwuMy0uMy0yLjYtOS40Yy0uNS0xLjgtMS0zLjQtMi42LTMuOWwwLS4zYzQuNC0xIDcuMy0xLjggMTAuNy0yLjRsLjMgLjNjLTEgMS4zLTEgMi45LS41IDQuNCAxLjYgNi4zIDQuNyAyMC40IDYuMyAyNi41IC41IDIuNiAxLjggMy40IDIuNiAzLjl6bTMyLjItNi44bC0uMyAuM2MtNC43IC41LTE0LjEgMi40LTIyLjUgNC4ybC0uMy0uMyAuOC00LjJjLTEuNi03LjktMy40LTE4LjYtNS0yNi4yLS4zLTEuOC0uOC0yLjktMi42LTMuN2wuOC0uNWM5LjItMS42IDIwLjItMi40IDI0LjktMi42bC4zIC4zYy41IDIuNCAuOCAzLjEgMS42IDUuNWwtLjMgLjNjLTEuMS0xLjEtMy4zLTMuMi0xNi4yLS44bC0uMyAuM2MuMyAxLjYgMSA2LjYgMS42IDkuOWwuMyAuM2M5LjUtMS43IDQuOC0uMSAxMC43LTIuNGwuMyAwYzAgMS42LS4zIDEuOC0uMyA1LjJsLS4zIDBjLTQuOC0xLTIuMi0uOS0xMC4yIDBsLS4zIC4zYy4zIDIuMSAxLjYgOS40IDIuMSAxMi42bC4zIC4zYzEuMiAuNCAxNC4yLS42IDE2LjItNC43bC4zIDBjLS41IDIuNC0xIDQuMi0xLjYgNnptMTAuNy00NC41Yy00LjUgMi40LTguMSAyLjktMTEgMi45LS4yIDAtMTEuNCAxLjEtMTcuNS0xMC02LjctMTAuOC0xLTI1LjIgNS41LTMxLjcgOC44LTguMSAyMy40LTEwLjEgMjguNS0xNyA4LTEwLjMtMTMtMjIuMy0yOS42LTUuOGwtMi42LTIuOSA1LjItMTYuMmMyNS42LTEuNiA0NS4yLTMgNTAgMTYuMiAuOCAzLjEgMCA5LjQtLjMgMTIuMSAwIDIuNi0xLjggMTguOC0yLjEgMjMtLjUgNC4yLS44IDE4LjMtLjggMjAuNyAuMyAyLjQgLjUgNC4yIDEuNiA1LjUgMS42IDEuOCA1LjggMS44IDUuOCAxLjhsLS44IDQuN2MtMTEuOC0xLjEtMTAuMy0uNi0yMC40LTEtMy4yLTUuMS0yLjItMy4zLTQuMi03LjkgMCAwLTQuMiAzLjktNy4zIDUuNXpNNDQzLjkgMjgxYy02LjQtMTAuNi0xOS44LTcuMi0yMS43IDUuNS0yLjYgMTcuMSAxNC4zIDE5LjggMjAuNyAxMC4ybC4zIC4zYy0uNSAxLjgtMS44IDYtMS44IDYuM2wtLjUgLjVjLTEwLjMgNi45LTI4LjUtMi41LTI1LjctMTguNiAxLjktMTAuOSAxNC40LTE4LjkgMjguOC05LjlsLjMgLjVjMCAxLjEtLjMgMy40LS4zIDUuM3ptNS44LTg3LjdsMC02LjZjLjcgMCAxOS42IDMuMyAyNy44IDcuM2wtMS42IDE3LjVzMTAuMi05LjQgMTUuNC0xMC43YzUuMi0xLjYgMTQuOSA3LjMgMTQuOSA3LjNsLTExLjMgMTEuM2MtMTIuMS02LjQtMTkuNi0uMS0yMC43IC44LTUuMyAzOC43LTguNiA0Mi4yIDQuNCA0Ni4xbC0uNSA0LjdjLTE3LjYtNC4zLTE4LjUtNC41LTM2LjktNy4zbC44LTQuN2M3LjMgMCA3LjUtNS4zIDcuNi02LjggMCAwIDUtNTMuMiA1LTU1LjMgMC0yLjktNS0zLjctNS0zLjd6bTExIDExNC40Yy04LjEtMi4xLTE0LjEtMTEtMTAuNy0yMC43IDMuMS05LjQgMTIuMy0xMi4zIDE4LjktMTAuMiA5LjIgMi42IDEyLjggMTEuOCAxMC43IDE5LjQtMi42IDguOS05LjQgMTMuOS0xOC45IDExLjV6bTQyLjIgOS43Yy0yLjQtLjUtNy4xLTIuNC04LjYtMi45bDAtLjMgMS42LTEuOGMuNi04LjIgLjYtNy4zIC4zLTcuNi00LjgtMS44LTYuNy0yLjQtNy4xLTIuNC0xLjMgMS44LTIuOSA0LjUtMy43IDUuNWwtLjggMy40IDAgLjNjLTEuMy0uMy0zLjktMS4zLTYtMS42bDAtLjMgMi42LTEuOGMzLjQtNC43IDEwLTE0LjEgMTMuOS0yMC4ybDAtMi4xIC41LS4zYzIuMSAuOCA1LjUgMi4xIDcuNiAyLjkgLjUgLjUgLjItMS45LTEgMjUuMS0uMiAxLjggMCAyLjYgLjggMy45em0tNC43LTg5LjhjMTEuMy0xOC4zIDMwLjgtMTYuMiAzNC0zLjRsNy42LTI2LjJjMi4zLTYuMi0yLjgtOS45LTQuNS0xMS4zbDEuOC0zLjdjMTIuMiAxMC40IDE2LjQgMTQgMjIuNSAyMC40LTI1LjkgNzMuMS0zMC44IDgwLjgtMjQuNiA4NC4zbC0xLjggNC40Yy02LjQtMy4zLTguOS00LjQtMTcuOC04LjZsMi4xLTYuOGMtLjMtLjMtMy45IDMuOS05LjcgMy43LTE5LjEtMS4zLTIyLjktMzEuNy05LjctNTIuOXptMjkuMyA3OS4zYzAtNS43LTYuMy03LjktNy45LTUuMi0xLjMgMi4xIDEgNSAyLjkgOC40IDEuNiAyLjYgMi42IDYuMyAxIDkuNC0yLjYgNi4zLTEyLjQgNS4zLTE1LjQtLjggMC0uNy0uMyAuMSAxLjgtNC43bC44LS4zYy0uNiA1LjcgNi4xIDkuNiA4LjQgNSAxLTIuMS0uNS01LjUtMi4xLTguNC0xLjYtMi42LTMuNy02LjMtMS44LTkuNyAyLjctNS4xIDExLjMtNC41IDE0LjcgMi40bDAgLjUtMi40IDMuNHptMjEuMiAxMy40Yy0yLTMuMy0uOS0yLjEtNC41LTQuN2wtLjMgMGMtMi40IDQuMi01LjggMTAuNS04LjYgMTYuMi0xLjMgMi40LTEgMy40LS44IDMuOWwtLjMgLjMtNS44LTQuNCAuMy0uMyAyLjEtMS4zYzMuMS01LjggNi42LTEyLjEgOS4yLTE3bDAtLjNjLTIuNi0yLTEuMi0xLjUtNi0xLjhsMC0uMyAzLjEtMy40IC4zIDBjMy43IDIuNCAxMCA2LjggMTIuMyA4LjlsLjMgLjMtMS4zIDMuOXpNNTc1LjggMjc2bC0yLjktMi45Yy44LTIuNCAxLjgtNSAyLjEtNy42IC43LTkuNy0xMS41LTExLjgtMTEuNS01IDAgNSA3LjkgMTkuNCA3LjkgMjcuOCAwIDEwLjItNS44IDE1LjctMTMuOSAxNi41LTguNCAuOC0yMC4yLTEwLjUtMjAuMi0xMC41bDUtMTQuNCAyLjkgMi4xYy0zIDE3LjggMTcuNyAyMC40IDEzLjMgNS4yLTEuMS00LTE4LjctMzQuMiAyLjEtMzguMiAxMy42LTIuNCAyMyAxNi41IDIzIDE2LjVMNTc1LjggMjc2em0zNS42LTEwLjJjLTExLTMwLjQtNjAuNS0xMjcuNS0xOTItMTI5LjYtNTMuNC0xLTk0LjMgMTUuNC0xMzIuOCAzOGw4NS42LTkuMi05MS40IDIwLjcgMjUuMSAxOS42LTMuOS0xNi41YzcuNS0xLjcgMzkuMS04LjUgNjYuOC04LjlsLTIyLjMgODAuNGMxMy42LS43IDE5LTkgMTkuNi0yMi44bDUtMSAuMyAyNi43Yy0yMi41IDMuMi0zNy4zIDYuNy00OS41IDkuOWwxMy4xLTQzLjItNjEuNS0zNi43IDIuNCA4LjEgMTAuMiA1YzYuMyAxOC42IDE5LjQgNTYuNiAyMC40IDU4LjcgMiA0LjMgMy4yIDUuOCAxMiA0LjVsMS4xIDVjLTE2LjEgNC45LTIzLjcgNy42LTM5IDE0LjRsLTIuNC00LjdjNC40LTIuOSA4LjctMy45IDUuNS0xMi44LTIzLjctNjIuNS0yMS41LTU4LjEtMjIuOC01OS40bDIuNC00LjQgMzMuNSA2Ny4zYy0zLjgtMTEuOSAxLjcgMS43LTMzLTc4LjhsLTQxLjkgODguNSA0LjctMTMuOS0zNS45LTQyLjIgMjcuOCA5My41LTExLjggOC40Yy0xMTEuOS0xMDEuNy0xMDUuOC05OC40LTExMy43LTk4LjctNS41LS4zLTEzLjYgNS41LTEzLjYgNS41bC01LTZjMzAuNi0yMy41IDMxLjYtMjQuMyA1OC40LTQyLjdsNC4yIDcuMXMtNS44IDQuMi03LjkgNy4xYy01LjkgOS4zIDEuNyAxMy4zIDYxLjggNzUuN2wtMTguOC01OC45IDM5LjgtMTAuMiAyNS43IDMwLjYgNC40LTEyLjMtNS0yNC42IDEzLjEtMy40IC41IDMuMSAzLjctMTAuNS05NC4zIDI5LjMgMTEuMy01LTEzLjYtNDIuNCAxNy4zLTkuMiAzMC4xIDM2LjEgMjguNS0xMy4xYy0xLjQtNy41LTIuNS0xNC41LTQuNy0xOS42bDE3LjMgMTMuOSA0LjctMi4xLTU5LjItNDIuNyAyMy4xIDExLjVjMTktNi4xIDI1LjItNy41IDMyLjItOS43bDIuNiAxMWMtMTIuNiAxMi42IDEuNCAxNi44IDYuNSAxOS40bC0xMy42LTYxIDEyIDI4LjNjNC4yLTEuMyA3LjMtMi4xIDcuMy0yLjFsMi42IDguNnMtMy4xIDEtNi4zIDIuMWw4LjkgMjEgMzMuOC02NS43LTIwLjcgNjFjNDIuNC0yNC4xIDgxLjQtMzYuNyAxMzItMzUuOSA2NyAxIDE2Ny4zIDQwLjggMTk5LjggMTM5LjggLjggMi4xIDAgMi42LS44IC4zem0tNDA4LTExMy40czEuOC0uNSA0LjItMS4zbDkuNCA3LjZjLS40IDAtMy40LS4zLTExLjMgMi40bC0yLjQtOC42em0xNDMuOCAzOC41Yy0xLjYtLjYtMjYuNS00LjgtMzMuMyAyMC43bDIxLjcgMTcgMTEuNS0zNy43ek0zMTguNCA2Ny4xYy01OC40IDAtMTA2LjEgMTItMTE1IDE0LjRsMCAuOGM4LjQgMi4xIDE0LjQgNC4yIDIxLjIgMTEuOGwxLjYgLjNjNi42LTEuOCA0OS0xMy45IDExMC4yLTEzLjkgMTgwLjIgMCAzMDEuNyAxMTYuOCAzMDEuNyAyMjMuNGwwIDEwYzAgMS4zIC44IDIuNiAxLjEgLjUgLjUtMi4xIC44LTguNiAuOC0xOS42IC4zLTgzLjgtOTYuNi0yMjcuNi0zMjEuNi0yMjcuNnpNNTI5LjUgMjM2LjhjMS4zLTUuOCAwLTEyLjMtNy4zLTEzLjEtOS42LTEuMS0xNi4xIDIzLjgtMTcgMzMuNS0uOCA1LjUtMS4zIDE0LjkgNiAxNC45IDQuNyAwIDkuNy0uOSAxOC4zLTM1LjR6TTQ2OCAyNzkuN2MtMi42LS44LTkuNC0uOC0xMi42IDEwLjUtMS44IDYuOCAuNSAxMy40IDYgMTQuNyAzLjcgMS4xIDguOSAuNSAxMS44LTEwLjcgMi42LTkuOS0xLjgtMTMuNi01LjItMTQuNHptMjMgMjFjMS44IC41IDMuMSAxIDUuOCAxLjggMC0xLjggLjUtOC40IC44LTEyLjEtMSAxLjMtNS41IDguMS02LjYgMTBsMCAuM3oiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1uZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGViIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTk0IDE0NC4zbDAgNDIuNS0xODAuMyAwIDAtNDIuNSAxODAuMyAwem0wIDc5LjhsMCA0Mi41LTE4MC4zIDAgMC00Mi41IDE4MC4zIDB6Il0KICAgIH07CiAgICBmYVVzcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXNwcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2UxIiwgIk00MjguMyAyNDEuN2MyNS44LTQxLjMgMTUuMi00OC44LTExLjctNDguOGwtMjcgMGMtLjEgMC0xLjUtMS40LTEwLjkgOC0xMS4yIDUuNi0zNy45IDYuMy0zNy45IDguNyAwIDQuNSA3MC4zLTMuMSA4OC4xIDAgOS41IDEuNS0xLjUgMjAuNC00LjQgMzItLjUgNC41IDIuNCAyLjMgMy44IC4xek0zMTYuMiAyNjQuM2M2NC0yMS4zIDk3LjMtMjMuOSAxMDItMjYuMiA0LjQtMi45LTQuNC02LjYtMjYuMi01LjgtNTEuNyAyLjItMTM3LjYgMzcuMS0xNzIuNiA1My45bC0zMC43LTkzLjMgMTk2LjYgMGMtMi43LTI4LjItMTUyLjktMjIuNi0zMzcuOS0yMi42TC01IDQxNS44YzE5Ni40LTk3LjMgMjU4LjktMTMwLjMgMzIxLjItMTUxLjV6TTYyLjcgOTZjMjUzLjMgNTMuNyAzMzAgNjUuNyAzMzIuMSA4NS4yIDM2LjQgMCA0NS45IDAgNTIuNCA2LjYgMjEuMSAxOS43LTE0LjYgNjcuNy0xNC42IDY3LjctNC40IDIuOS00MDYuNCAxNjAuMi00MDYuNCAxNjAuMkw0NDkuMyA0MTUuNyA1MTcgOTYgNjIuNyA5NnoiXQogICAgfTsKICAgIGZhU3F1YXJlTGV0dGVyYm94ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtbGV0dGVyYm94ZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjJlIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xMDUuMSAxODdDNjYuNCAxODcgMzUgMjE4LjMgMzUgMjU3czMxLjQgNzAgNzAuMSA3MGMyNC44IDAgNDYuNS0xMi44IDU5LTMyLjJsLjUtLjctLjQtLjZjLTYuNS0xMC42LTEwLjItMjMuMS0xMC4yLTM2LjUgMC0xMy42IDMuOS0yNi4zIDEwLjYtMzcuMS0xMi40LTE5LjgtMzQuNC0zMi45LTU5LjUtMzIuOXpNMjI0IDE4N2MtMjQuOCAwLTQ2LjUgMTIuOC01OSAzMi4ybC0uNSAuNyAuNCAuNmM2LjUgMTAuNiAxMC4yIDIzLjEgMTAuMiAzNi41IDAgMTMuNi0zLjkgMjYuMy0xMC42IDM3LjEgMTIuNCAxOS43IDM0LjQgMzIuOSA1OS41IDMyLjkgMjQuOCAwIDQ2LjUtMTIuOCA1OS0zMi4ybC41LS43LS40LS42Yy02LjUtMTAuNi0xMC4yLTIzLjEtMTAuMi0zNi41IDAtMTMuNiAzLjktMjYuMyAxMC42LTM3LjEtMTIuNC0xOS43LTM0LjQtMzIuOS01OS41LTMyLjl6bTExOC45IDBjLTI0LjggMC00Ni41IDEyLjgtNTkgMzIuMmwtLjUgLjcgLjQgLjZjNi41IDEwLjYgMTAuMiAyMy4xIDEwLjIgMzYuNSAwIDEzLjYtMy45IDI2LjMtMTAuNiAzNy4xIDEyLjQgMTkuOCAzNC40IDMyLjkgNTkuNSAzMi45IDM4LjcgMCA3MC4xLTMxLjMgNzAuMS03MHMtMzEuNC03MC03MC4xLTcweiJdCiAgICB9OwogICAgZmFNYW5kYWxvcmlhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYW5kYWxvcmlhbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTBmIiwgIk0yMDAuNiA1MTEuOWMtMS0zLjMtMS43LTE1LjgtMS40LTI0LjYgLjYtMTUuOSAxLTI0LjcgMS40LTI4LjggLjYtNi4yIDIuOS0yMC43IDMuMy0yMS40IC42LTEgLjQtMjcuOS0uMi0zMy4xLS4zLTIuNi0uNi0xMS45LS43LTIwLjctLjEtMTYuNS0uNS0yMC4xLTIuNy0yNC44LTEuMS0yLjMtMS4yLTMuOC0xLTExLjQgLjItNC4yIC4xLTguNS0uMy0xMi43LTItMTMtMy41LTI3LjctMy4yLTMzLjlzLjQtNy4xIDIuMS05LjdjMy4xLTQuNyA2LjUtMTQgOC42LTIzLjMgMi4zLTkuOSAzLjktMTcuMiA0LjYtMjAuNyAxLjEtNS4xIDIuNi0xMC4xIDQuNC0xNS4xIDIuMy02LjIgMi41LTE1LjQgLjQtMTUuNC0uMyAwLTEuNCAxLjItMi40IDIuN3MtNC44IDQuOC04LjMgNy40Yy04LjQgNi4xLTExLjcgOS40LTEyLjcgMTIuNnMtMSA3LjItLjIgNy44Yy4zIC4yIDEuMyAyLjQgMi4xIDQuOSAxLjYgNSAxLjkgMTAuMyAuNyAxNS40LS40IDEuOC0xIDUuNS0xLjUgOC4ycy0xIDYuNS0xLjMgOC4yYy0uMiAxLjUtLjcgMy0xLjUgNC4zLTEgMS0xLjEgLjktMi4xLS41LS43LTEuNS0xLjItMy4xLTEuNC00LjctLjItMS43LTEuNi03LjEtMy4xLTExLjktMy4zLTEwLjktMy41LTE2LjItMS0yMSAuOC0xLjQgMS40LTMgMS43LTQuNiAwLTIuNC0yLjItNS4zLTcuNC05LjktNy02LjItOC42LTcuOS0xMC4yLTExLjMtMS43LTMuNi0zLjEtNC4xLTQuNS0xLjUtMS44IDMtMi42IDkuMS0zIDIybC0uMyAxMi4yIDIgMi4yYzMuMiAzLjcgMTIuMSAxNi41IDEzLjggMTkuOCAzLjQgNi43IDQuMyAxMS43IDQuNCAyMy42czEgMjIuOCAyIDI0LjdjLjQgLjcgLjUgMS40IC4zIDEuNXMuNCAyLjEgMS4zIDQuM2MxIDIuOSAxLjcgNS45IDIuMSA5IC40IDMuNSAuOSA3IDEuNyAxMC40IDIuMiA5LjYgMi44IDE0LjEgMi40IDIwLjEtLjIgMy4zLS41IDExLjEtLjcgMTcuMy0xLjMgNDEuOC0xLjggNTgtMiA2MS4yLS4xIDItLjQgMTEuNS0uNiAyMS4xLS40IDE2LjMtMS4zIDI3LjQtMi40IDI4LjYtLjYgLjctOC4xLTQuOS0xMi41LTkuNS0zLjgtMy45LTQtNC44LTIuOC05LjkgLjctMyAyLjMtMTguMyAzLjMtMzIuNiAuNC00LjggLjgtMTAuNSAxLTEyLjcgLjgtOS40IDEuNy0yMC4zIDIuNi0zNC44IC42LTguNSAxLjMtMTYuNCAxLjctMTcuN3MuOS05LjkgMS4xLTE5LjFsLjQtMTYuOC0yLjMtNC4zYy0xLjctMy4zLTQuOS02LjktMTMuMi0xNS4zLTYtNi4xLTExLjgtMTIuMy0xMi45LTEzLjhsLTItMi44IC44LTEwLjljMS4xLTE1LjcgMS4xLTQ4LjYgMC01OS4xbC0uOS04LjctMy4zLTQuNWMtNS45LTguMS01LjgtNy43LTYuMi0zMy4zLS4xLTYuMS0uNC0xMS41LS42LTEyLjEtLjgtMS45LTMtMi43LTguNS0zLTguOS0uNi0xMS0xLjktMjMuOC0xNC42LTYuMi02LTEyLjMtMTItMTMuOC0xMy4yLTIuOC0yLjQtMi44LTItLjYtOS42bDEuNC00LjYtMS43LTNjLS44LTEuNC0xLjYtMi44LTIuNi00LjEtMS4zLTEuNS01LjUtMTAuOS02LTEzLjUtLjItLjctLjItMS40LS4xLTIuMXMuNS0xLjMgLjktMS44YzIuMi0yLjkgMy40LTUuNyA0LjUtMTAuNyAyLjMtMTEuMiA3LjctMjYuMSAxMC42LTI5LjIgMy4yLTMuNSA3LjctMSA5LjQgNSAxLjMgNC44IDEuNCA5LjggLjEgMTguNi0uNSAzLjctLjkgNy40LTEgMTEuMSAwIDQgLjIgNC43IDIuMyA3LjQgMy4zIDQuNCA3LjcgNy40IDE1LjIgMTAuNSAxLjcgLjcgMy4zIDEuNyA0LjcgMi44IDExLjIgMTAuNyAxOC42IDE2LjIgMjIuOSAxNi45IDUuMiAuOCA4IDQuNSAxMCAxMy40IDEuMyA1LjcgNCAxMS4xIDUuNSAxMS4xIDEuMi0uMiAyLjMtLjcgMy4zLTEuNCAyLTEuMiAyLjItMS43IDIuMi00LjItLjMtNi0uOS0xMS45LTItMTcuOC0uNC0xLjctLjgtNC4xLS45LTUuNHMtLjYtMy44LTEtNS43Yy0yLjYtMTEuMi0zLjYtMTUuNS00LjEtMTYtMS42LTItNC4xLTEwLjItNC45LTE1LjktMS42LTExLjEtNC0xNC4yLTEyLjktMTcuNC00LjktMS44LTkuNC00LjUtMTMuMy03LjktMS4yLTEtNC0zLjItNi40LTUuMXMtNC40LTMuNS00LjYtMy44Yy0uOC0uNy0xLjctMS40LTIuNy0yLTYuMi00LjItOC44LTctMTEuMy0xMmwtMi40LTVjLS4xLTguNy0uMy0xNy4zLS40LTI2bDYuOS02LjZjNC0zLjggOC41LTcuNCAxMC42LTguNCAzLjMtMS43IDQuNC0xLjkgMTEuNC0yIDguNS0uMiAxMC4xIDAgMTEuNyAxLjZzMS40IDYuNC0uMyA4LjVjLS42IC43LTEuMSAxLjUtMS4zIDIuMyAwIC42LTIuNiA0LjktNS40IDktMS4xIDIuMi0xLjkgNC41LTIuNCA2LjggMjAuNCAxMy40IDIxLjYgMy44IDE0LjEgMjlsMTEuNCAyLjVjMy4xLTguNyA2LjUtMTcuMyA4LjYtMjYuMiAuMy03LjYtMTItNC4yLTE1LjQtOC43LTIuMy01LjkgMy4xLTE0LjIgNi4xLTE5LjIgMS42LTIuMyA2LjYtNC43IDguOC00LjEgLjkgLjIgNC4yLS40IDcuNC0xLjMgMi41LS44IDUtMS4zIDcuNS0xLjcgMi0uMiA0LjEtLjcgNi0xLjMgMy43LTEuMSA0LjUtMS4yIDYuMy0uNCAxLjkgLjYgMy44IDEuMSA1LjggMS40IDIuMSAuMyA0LjEgLjkgNiAxLjkgMS42IC45IDMuMyAxLjcgNSAyLjIgMi41IC43IDMgLjYgNy0xLjdMMjI2IDUuNCAyMzYuNyA1YzEwLjQtLjQgMTAuOC0uNSAxNS4zLTIuN0wyNTYuNSAwIDI1OSAxLjRjMS44IDEgMy4xIDIuNyA0LjkgNiAyLjQgNC41IDIuNCA0LjYgMS40IDcuNC0uOSAyLjQtLjkgMy4zLS4xIDYuNCAuNSAyIDEuMiA0IDIuMSA1LjkgLjYgMS4zIDEuMSAyLjYgMS4zIDQgLjMgNC4zIDAgNS4zLTIuNCA2LjktMi4yIDEuNS03IDcuOS03IDkuMy0uMiAxLS42IDItMS4xIDMtNSAxMS41LTYuOCAxMy42LTE0LjMgMTctOS4yIDQuMi0xMi4zIDUuMi0xNi4yIDUuMi0zLjEgMC00IC4yLTQuNSAxLjMtMS4yIDEuNC0yLjUgMi43LTQuMSAzLjctMS44IDEuMi0zLjMgMi45LTQuNCA0LjgtLjUgMS4yLTEuNCAyLjItMi41IDIuOS0uOSAuNC0xLjggMS0yLjUgMS43LTIuMiAxLjktNC42IDMuNy03IDUuNC0zLjMgMi4zLTYuOSA1LTcuOSA2LS43IC43LTEuNSAxLjMtMi40IDEuNy0uOCAuNC0xLjYgLjktMi4xIDEuNi0xLjMgMS40LTEuNSAyLjEtMS4xIDQuNiAuMyAyIC44IDQgMS40IDUuOSAxLjMgMy44IDEuMyA3LjkgMCAxMC42cy0uOSA2LjcgMS40IDkuNmMyIDIuNiAyLjIgNC42IC43IDguOC0uOCAyLjktMS4xIDUuOS0xLjEgOC45IDAgNC45IC4yIDYuMyAxLjUgOC40czEuOCAyLjUgMy4yIDIuM2MyLS4yIDIuMy0xLjEgNC43LTEyLjEgMi4yLTEwIDMuNy0xMS45IDEzLjgtMTcuMSAyLjktMS41IDcuNS00IDEwLTUuNHM2LjgtMy43IDkuNC00LjljNS45LTIuNiAxMS4yLTYuNiAxNS4yLTExLjcgNy4xLTguOCAxMC0xNi4yIDEyLjgtMzMuMyAuNC0yLjggMS4zLTUuNCAyLjktNy43IDEuNC0yLjIgMi40LTQuNyAyLjktNy4zIDEtNS4zIDIuOS05LjEgNS42LTExLjUgNC43LTQuMiA2LTEuMSA0LjYgMTAuOS0uNSAzLjktMS4xIDEwLjMtMS40IDE0LjRsLS42IDcuNGMzIDIuNyA1LjkgNS41IDguOSA4LjJsLjEgOC40Yy4xIDQuNiAuNSA5LjUgLjkgMTAuOWwuOCAyLjUtNi40IDYuM2MtOC41IDguMy0xMi45IDEzLjktMTYuOCAyMS42LTEuOCAzLjUtMy43IDcuMS00LjQgOC0yLjIgMy4xLTYuNSAxMy04LjggMjAuM2wtMi4zIDcuMi03IDYuNWMtMy44IDMuNi04IDcuMi05LjIgOC4yLTMgMi4zLTQuMyA1LjEtNC4zIDEwLS4xIDIuNSAuNCA1IDEuNiA3LjMgLjggMS42IDEuNSAzLjIgMi4xIDQuOCAuMyAxIC45IDIgMS42IDIuOSAxLjQgMS42IDEuOSAxNi4xIC44IDIzLjItLjcgNC41LTMuNiAxMi00LjcgMTItMS44IDAtNC4xIDkuMy01LjEgMjAuNy0uMiAyLS42IDUuOS0xIDguN3MtMSAxMC0xLjQgMTZjLS44IDEyLjItLjIgMTguOCAyIDIzLjIgMy40IDYuNyAuNSAxMi43LTExIDIyLjhsLTQgMy41IC4xIDUuMmMuMSAzIC40IDYgMS4xIDguOSA0LjYgMTYgNC43IDE2LjkgNC40IDM3LjEtLjUgMjYuNC0uMyA0MC4zIC42IDQ0LjIgLjUgMi4zIC45IDQuNiAxLjEgNyAuMiAyIC43IDUuMyAxLjEgNy40IC41IDIuMyAuOCAxMSAuOCAyMi43bDAgMTkuMS0xLjggMi42Yy0yLjcgMy45LTE1LjEgMTMuNS0xNS41IDEyLjNsLjEgMHptMjkuNS00NS4xYy0uMi0uMy0uMy02LjktLjMtMTQuNiAwLTE0LjEtLjktMjcuNS0yLjMtMzQuNC0uNC0yLS44LTkuNy0uOS0xNy4xLS4yLTExLjktMS40LTI0LjQtMi42LTI2LjQtLjctMS4xLTMtMTcuNy0zLTIxLjMgMC00LjIgMS02IDUuMy05LjFzNC45LTMuMSA1LjUtLjdjLjMgMS4xIDEuNCA1LjYgMi42IDEwIDMuOSAxNS4xIDQuMSAxNi4zIDQgMjEuNy0uMSA1LjgtLjEgNi4xLTEuNyAxNy43LTEgNy4xLTEuMiAxMi40LTEgMjguNCAuMiAxOS40LS42IDM1LjctMiA0MS4zLS43IDIuOC0yLjggNS41LTMuNCA0LjRsLS4xIDB6bS03MS0zNy42Yy0uOC0zLjYtMS4zLTcuMi0xLjctMTAuOHMtMS03LjItMS43LTEwLjhjLS41LTIuMS0uOS00LjMtMS02LjUtLjMtMy4yLS45LTcuNS0xLjMtOS41LTEtNC44LTMuMy0xOS40LTMuNC0yMS4xIDAtLjctLjMtNC0uNy03LjQtLjctNi4yLS44LTI3LjctLjItMjguMyAxLTEgNi42IDIuOCAxMS4zIDcuNGw1LjMgNS4zLS40IDYuNWMtLjIgMy42LS42IDEwLjItLjggMTQuOC0uNSAxMy4zLS43IDguNy0xLjYgMjguNC0uOCAxNy40LTEuOSAzMS4zLTIuNiAzMi0uMSAuMS0uMiAuMS0uMiAuMnMtLjIgMC0uMyAwLS4yIDAtLjMtLjEtLjEtLjEtLjItLjJsMCAwek03MiAxNjIuNmMyMS4xIDEyLjggMTcuOCAxNC4yIDI4LjUgMTcuNyAxMyA0LjMgMTguOSA3LjEgMjMuMiAxNi45LTQzLjcgMzYuMS02OSA1Ny45LTc2LjcgNzAuOS0zMSA1Mi02IDEwMS42IDYyLjggODcuMi0xNC4yIDI5LjItNzggMjguNi05OC43LTQuOS0yNC43LTQwLTIyLjEtMTE4LjMgNjEtMTg3LjdsMCAwem0yMTAuOCAxNzljNTYuNyA2LjkgODIuMy0zNy43IDQ2LjUtODkuMiAwIDAtMjYuOS0yOS4zLTY0LjMtNjggMy0xNS41IDkuNS0zMi4xIDMwLjYtNTMuOCA4OS4yIDYzLjUgOTIgMTQxLjYgOTIuNSAxNDkuNCA0LjMgNzAuNi03OC43IDkxLjItMTA1LjMgNjEuN2wwIDB6Il0KICAgIH07CiAgICBmYVNsYWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNsYWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjI0NDcsICJzbGFjay1oYXNoIl0sICJmMTk4IiwgIk05NC4xIDMxNS4xYzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xUzAgMzQxIDAgMzE1LjEgMjEuMiAyNjggNDcuMSAyNjhsNDcuMSAwIDAgNDcuMXptMjMuNyAwYzAtMjUuOSAyMS4yLTQ3LjEgNDcuMS00Ny4xUzIxMiAyODkuMiAyMTIgMzE1LjFsMCAxMTcuOGMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMXMtNDcuMS0yMS4yLTQ3LjEtNDcuMWwwLTExNy44em00Ny4xLTE4OWMtMjUuOSAwLTQ3LjEtMjEuMi00Ny4xLTQ3LjFTMTM5IDMyIDE2NC45IDMyIDIxMiA1My4yIDIxMiA3OS4xbDAgNDcuMS00Ny4xIDB6bTAgMjMuN2MyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMVMxOTAuOCAyNDQgMTY0LjkgMjQ0TDQ3LjEgMjQ0QzIxLjIgMjQ0IDAgMjIyLjggMCAxOTYuOXMyMS4yLTQ3LjEgNDcuMS00Ny4xbDExNy44IDB6bTE4OSA0Ny4xYzAtMjUuOSAyMS4yLTQ3LjEgNDcuMS00Ny4xUzQ0OCAxNzEgNDQ4IDE5Ni45IDQyNi44IDI0NCA0MDAuOSAyNDRsLTQ3LjEgMCAwLTQ3LjF6bS0yMy43IDBjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFTMjM2IDIyMi44IDIzNiAxOTYuOWwwLTExNy44QzIzNiA1My4yIDI1Ny4yIDMyIDI4My4xIDMyczQ3LjEgMjEuMiA0Ny4xIDQ3LjFsMCAxMTcuOHptLTQ3LjEgMTg5YzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xUzMwOSA0ODAgMjgzLjEgNDgwIDIzNiA0NTguOCAyMzYgNDMyLjlsMC00Ny4xIDQ3LjEgMHptMC0yMy43Yy0yNS45IDAtNDcuMS0yMS4yLTQ3LjEtNDcuMVMyNTcuMiAyNjggMjgzLjEgMjY4bDExNy44IDBjMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFzLTIxLjIgNDcuMS00Ny4xIDQ3LjFsLTExNy44IDB6Il0KICAgIH07CiAgICBmYVNsYWNrSGFzaCA9IGZhU2xhY2s7CiAgICBmYUFuZ2VsbGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmdlbGxpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIwOSIsICJNMzE1LjYgMjE1LjRjMTEuNy0zMi42IDQ1LjQtMTI2LjkgNDUuNC0xNTcuMSAwLTI2LjYtMTUuNy00OC45LTQzLjctNDguOS00NC42IDAtODQuNiAxMzEuNy05Ny4xIDE2My4xLTkuNy0yOC41LTU1LjEtMTcyLjUtOTUuMS0xNzIuNS0zMS4xIDAtNDUuNyAyMi45LTQ1LjcgNTEuNyAwIDM1LjMgMzQuMiAxMjYuOCA0Ni42IDE2Mi02LjMtMi4zLTEzLjEtNC4zLTIwLTQuMy0yMy40IDAtNDguMyAyOS4xLTQ4LjMgNTIuNiAwIDguOSA0LjkgMjEuNCA4IDI5LjctMzYuOSAxMC01MS4xIDM0LjYtNTEuMSA3MS43LS4xIDcyLjIgNjguMyAxNDguNiAxNjQuNSAxNDguNiAxMTggMCAxOTEuNC04OC42IDE5MS40LTIwMi45IDAtNDMuMS02LjktODItNTQuOS05My43ek0yODAuMiAxMDhjNC0xMi4zIDIxLjEtNjQuMyAzNy4xLTY0LjMgOC42IDAgMTAuOSA4LjkgMTAuOSAxNiAwIDE5LjEtMzguNiAxMjQuNi00Ny4xIDE0OGwtMzQtNiAzMy4xLTkzLjd6TTExMC44IDQ4LjNjMC0xMS45IDE0LjUtNDUuNyA0Ni4zIDQ3LjFsMzQuNiAxMDAuM2MtMTUuNi0xLjMtMjcuNy0zLTM1LjQgMS40LTEwLjktMjguOC00NS41LTExOS43LTQ1LjUtMTQ4Ljh6TTEwOC41IDI0NGMyOS4zIDAgNjcuMSA5NC42IDY3LjEgMTA3LjQgMCA1LjEtNC45IDExLjQtMTAuNiAxMS40LTIwLjkgMC03Ni45LTc2LjktNzYuOS05Ny43IC4xLTcuNyAxMi43LTIxLjEgMjAuNC0yMS4xek0yOTIuOCA0MzAuM2MtMjkuMSAzMi02Ni4zIDQ4LjYtMTA5LjcgNDguNi01OS40IDAtMTA2LjMtMzIuNi0xMjguOS04OC4zLTE3LjEtNDMuNCAzLjgtNjguMyAyMC42LTY4LjMgMTEuNCAwIDU0LjMgNjAuMyA1NC4zIDczLjEgMCA0LjktNy43IDguMy0xMS43IDguMy0xNi4xIDAtMjIuNC0xNS41LTUxLjEtNTEuNC0yOS43IDI5LjcgMjAuNSA4Ni45IDU4LjMgODYuOSAyNi4xIDAgNDMuMS0yNC4yIDM4LTQyIDMuNyAwIDguMyAuMyAxMS43LS42IDEuMSAyNy4xIDkuMSA1OS40IDQxLjcgNjEuNyAwLS45IDItNy4xIDItNy40IDAtMTcuNC0xMC42LTMyLjYtMTAuNi01MC4zIDAtMjguMyAyMS43LTU1LjcgNDMuNy03MS43IDgtNiAxNy43LTkuNyAyNy4xLTEzLjEgOS43LTMuNyAyMC04IDI3LjQtMTUuNC0xLjEtMTEuMi01LjctMjEuMS0xNi45LTIxLjEtMjcuNyAwLTEyMC42IDQtMTIwLjYtMzkuNyAwLTYuNyAuMS0xMy4xIDE3LjQtMTMuMSAzMi4zIDAgMTE0LjMgOCAxMzguMyAyOS4xIDE4LjEgMTYuMSAyNC4zIDExMy4yLTMxIDE3NC43em0tOTguNi0xMjZjOS43IDMuMSAxOS43IDQgMjkuNyA2LTcuNCA1LjQtMTQgMTItMjAuMyAxOS4xLTIuOC04LjUtNi4yLTE2LjgtOS40LTI1LjF6Il0KICAgIH07CiAgICBmYUFuZHJvaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5kcm9pZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTdiIiwgIk00MjAuNSAyNTMuOWEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bS0yNjUuMSAwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMjczLjctOTYuNWw0Ny45LTgzYy44LTEuMSAxLjMtMi40IDEuNS0zLjhzLjItMi43LS4xLTQuMS0uOS0yLjYtMS43LTMuNy0xLjgtMi0zLTIuNy0yLjUtMS4xLTMuOS0xLjMtMi43IDAtNCAuNC0yLjUgMS4xLTMuNiAxLjktMS45IDItMi41IDMuMmwtNDguNSA4NC4xYy0zOC44LTE3LjQtODAuOC0yNi40LTEyMy4zLTI2LjRzLTg0LjUgOS0xMjMuMyAyNi40TDExNi4yIDY0LjRjLS42LTEuMi0xLjUtMi4zLTIuNS0zLjJzLTIuMy0xLjUtMy42LTEuOS0yLjctLjUtNC0uNC0yLjcgLjYtMy45IDEuMy0yLjIgMS42LTMgMi43LTEuNCAyLjQtMS43IDMuNy0uMyAyLjctLjEgNC4xIC44IDIuNiAxLjUgMy44bDQ3LjkgODNDNjQuNSAyMDIuMiA4LjIgMjg1LjUgMCAzODRsNTc2IDBjLTguMi05OC41LTY0LjUtMTgxLjgtMTQ2LjktMjI2LjZ6Il0KICAgIH07CiAgICBmYU1lZXR1cCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWV0dXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJlMCIsICJNMTMxLjEgNDE0LjNjMS4xIDUuNy0yLjMgMTEuMS04IDEyLjMtNS40IDEuMS0xMC45LTIuMy0xMi04LTEuMS01LjQgMi4zLTExLjEgNy43LTEyLjNzMTEuMSAyLjMgMTIuMyA4em0xNDMuMSA3MS40Yy02LjMgNC42LTggMTMuNC0zLjcgMjAgNC42IDYuNiAxMy40IDguMyAyMCAzLjcgNi4zLTQuNiA4LTEzLjQgMy40LTIwLTQuMi02LjUtMTMuMS04LjMtMTkuNy0zLjd6bS04Ni00NjIuM2ExMS44IDExLjggMCAxIDAgLTQuOS0yMyAxMS44IDExLjggMCAxIDAgNC45IDIzek02Ni41IDIyNi4zYTIyLjIgMjIuMiAwIDEgMCAtMjQuNyAzNi45IDIyLjIgMjIuMiAwIDEgMCAyNC43LTM2Ljl6bTI3Mi0xNzAuOWEyMi4xIDIyLjEgMCAxIDAgLTIyLjQtMzggMjIuMSAyMi4xIDAgMSAwIDIyLjQgMzh6bS0xOTEuMSA1OGExNi45IDE2LjkgMCAxIDAgLTE4LjgtMjggMTYuOSAxNi45IDAgMSAwIDE4LjggMjh6bTM3Mi4zIDE1NmMtNy40IDEuNy0xMi4zIDkuMS0xMC42IDE2LjkgMS40IDcuNCA4LjkgMTIuMyAxNi4zIDEwLjYgNy40LTEuNCAxMi4zLTguOSAxMC42LTE2LjYtMS41LTcuNC04LjktMTIuMy0xNi4zLTEwLjl6bTM5LjctNTYuOGExMC4xIDEwLjEgMCAxIDAgLTE5LjggNC4zIDEwLjEgMTAuMSAwIDEgMCAxOS44LTQuM3ptLTgwLjMtNzMuN2ExOC44IDE4LjggMCAxIDAgMjAuNyAzMS4zIDE4LjggMTguOCAwIDEgMCAtMjAuNy0zMS4zem0tNi4zIDEzOS40YzI2LjMgNDMuMSAxNS4xIDEwMC0yNi4zIDEyOS4xLTE3LjQgMTIuMy0zNy4xIDE3LjctNTYuOSAxNy4xLTEyIDQ3LjEtNjkuNCA2NC42LTEwNS4xIDMyLjYtMS4xIC45LTIuNiAxLjctMy43IDIuOS0zOS4xIDI3LjEtOTIuMyAxNy40LTExOS40LTIyLjMtOS43LTE0LjMtMTQuNi0zMC42LTE1LjEtNDYuOS02NS40LTEwLjktOTAtOTQtNDEuMS0xMzkuNy0yOC4zLTQ2LjkgLjYtMTA3LjQgNTMuNC0xMTQuOSAyNS4xLTY2LjIgMTA3LjYtOTcuNiAxNjMuNi01NC4yIDY3LjQtMjIuMyAxMzYuMyAyOS40IDEzMC45IDEwMS4xIDQxLjEgMTIuNiA1Mi44IDY2LjkgMTkuNyA5NS4yem0tNzAgNzQuM2MtMy4xLTIwLjYtNDAuOS00LjYtNDMuMS0yNy4xLTMuMS0zMiA0My43LTEwMS4xIDQwLTEyOC0zLjQtMjQtMTkuNC0yOS4xLTMzLjQtMjkuNC0xMy40LS4zLTE2LjkgMi0yMS40IDQuNi0yLjkgMS43LTYuNiA0LjktMTEuNy0uMy02LjMtNi0xMS4xLTExLjctMTkuNC0xMi45LTEyLjMtMi0xNy43IDItMjYuNiA5LjctMy40IDIuOS0xMiAxMi45LTIwIDkuMS0zLjQtMS43LTE1LjQtNy43LTI0LTExLjQtMTYuMy03LjEtNDAgNC42LTQ4LjYgMjAtMTIuOSAyMi45LTM4IDExMy4xLTQxLjcgMTI1LjEtOC42IDI2LjYgMTAuOSA0OC42IDM2LjkgNDcuMSAxMS4xLS42IDE4LjMtNC42IDI1LjQtMTcuNCA0LTcuNCA0MS43LTEwNy43IDQ0LjYtMTEyLjYgMi0zLjQgOC45LTggMTQuNi01LjEgNS43IDMuMSA2LjkgOS40IDYgMTUuMS0xLjEgOS43LTI4IDcwLjktMjguOSA3Ny43LTMuNCAyMi45IDI2LjkgMjYuNiAzOC42IDQgMy43LTcuMSA0NS43LTkyLjYgNDkuNC05OC4zIDQuMy02LjMgNy40LTguMyAxMS43LTggMy4xIDAgOC4zIC45IDcuMSAxMC45LTEuNCA5LjQtMzUuMSA3Mi4zLTM4LjkgODcuNy00LjYgMjAuNiA2LjYgNDEuNCAyNC45IDUwLjYgMTEuNCA1LjcgNjIuNSAxNS43IDU4LjUtMTEuMXptNS43IDkyLjNhMjMuMyAyMy4zIDAgMSAwIDI2LjIgMzguNCAyMy4zIDIzLjMgMCAxIDAgLTI2LjItMzguNHoiXQogICAgfTsKICAgIGZhRm9udGljb25zRmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udGljb25zLWZpIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYTIiLCAiTTExNC40IDIyNGw5Mi40IDAtMTUuMiA1MS4yLTc2LjQgMCAwIDE1Ny44YzAgOC0yLjggOS4yIDQuNCAxMGw1OS42IDUuNiAwIDM0LjQtMTc5LjIgMCAwLTM1LjIgMjkuMi0yLjhjNy4yLS44IDkuMi0zLjIgOS4yLTEwLjhsMC0xNTUuOGMwLTMuMi00LTMuMi04LTMuMmwtMzAuNCAwIDAtNTEuMiAzOC40IDAgMC0yOC44YzAtNjggMzYuNC05NiAxMDYtOTYgNDYuOCAwIDg4LjggMTEuMiA4OC44IDcyLjRMMTYzLjYgMTgwYy40LTI1LjYtNi0zMS42LTIyLjQtMzEuNi0yNS4yIDAtMjYgMTMuNi0yNiAzNy42bDAgMzJjMCAzLjItNC44IDYtLjggNnpNMzg0IDQ4M2wtMTQwLjggMCAwLTM0LjQgMjgtMy42YzcuMi0uOCAxMC40LTIuNCAxMC40LTEwbDAtMTQ4YzAtNS42LTQtOS4yLTkuMi0xMC44bC0zMy4yLTguOCA5LjItNDAuNCAxMTAgMCAwIDIwOGMwIDgtMy42IDguOCA0IDEwbDIxLjYgMy42IDAgMzQuNHpNMzU0IDEzNS44bDEyLjQgNDUuNi0xMCAxMC00Mi44LTIyLjgtNDIuOCAyMi44LTEwLTEwIDEyLjQtNDUuNi0zMC0zNi40IDQuOC0xMCAzOCAwIDIxLjItMzguNCAxMi44IDAgMjEuMiAzOC40IDM4IDAgNC44IDEzLjItMzAgMzMuMnoiXQogICAgfTsKICAgIGZhUGFsZmVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhbGZlZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2Q4IiwgIk0zODQuOSAxOTMuOWMwLTQ3LjQtNTUuMi00NC4yLTk1LjQtMjkuOC0xLjMgMzkuNC0yLjUgODAuNy0zIDExOS44IC43IDIuOCAyLjYgNi4yIDE1LjEgNi4yIDM2LjggMCA4My40LTQyLjggODMuMy05Ni4yek0xOTAuNCAyNjYuMWMuMiAwIDYuNS0yLjcgMTEuMi0yLjcgMjYuNiAwIDIwLjcgNDQuMS0xNC40IDQ0LjEtMjEuNSAwLTM3LjEtMTguMS0zNy4xLTQzIDAtNDIgNDIuOS05NS42IDEwMC43LTEyNi41IDEtMTIuNCAzLTIyIDEwLjUtMjguMiAxMS4yLTkgMjYuNi0zLjUgMjkuNSAxMS4xIDcyLjItMjIuMiAxMzUuMiAxIDEzNS4yIDcyIDAgNzcuOS03OS4zIDE1Mi42LTE0MC4xIDEzOC4yLS4xIDM5LjQgLjkgNzQuNCAyLjcgMTAwbDAgLjJjLjIgMy40IC42IDEyLjUtNS4zIDE5LjEtOS42IDEwLjYtMzMuNCAxMC0zNi40LTIyLjMtNC4xLTQ0LjQgLjItMjA2LjEgMS40LTI0Mi41LTIxLjUgMTUtNTguNSA1MC4zLTU4LjUgNzUuOSAuMiAyLjUgLjQgNCAuNiA0LjZ6TTggMTgxLjFzLS4xIDM3LjQgMzguNCAzNy40bDMwIDAgMjIuNCAyMTcuMnMwIDQ0LjMgNDQuNyA0NC4zbDI4OC45IDBzNDQuNy0uNCA0NC43LTQ0LjNsMjIuNC0yMTcuMiAzMCAwczM4LjQgMS4yIDM4LjQtMzcuNGMwIDAgLjEtMzcuNC0zOC40LTM3LjRsLTMwLjEgMGMtNy4zLTI1LjYtMzAuMi03NC4zLTExOS40LTc0LjNsLTI4IDAgMC0xOS4xcy0yLjctMTguNC0yMS4xLTE4LjRsLTg1LjggMFMyMjQgMzEuOSAyMjQgNTAuM2wwIDE5LjEtMjguMSAwcy0xMDUgNC4yLTEyMC41IDc0LjNsLTI5IDBTOCAxNDIuNSA4IDE4MS4xeiJdCiAgICB9OwogICAgZmFXcGJlZ2lubmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwYmVnaW5uZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5NyIsICJNNDYzLjIgMzIyLjRjNTYuMiA2NC4zIDQuMiAxNTcuNi05MS45IDE1Ny42LTM5LjYgMC03OC44LTE3LjctMTAwLjEtNTAtNi45IC40LTIyLjcgLjQtMjkuNiAwLTIxLjQgMzIuNC02MC42IDUwLTEwMC4xIDUwLTk1LjUgMC0xNDguMy05My05MS45LTE1Ny42LTc5LjEtMTMxLjkgMzEuMy0yOTAuNCAyMDYuOC0yOTAuNCAxNzUuNiAwIDI4NS45IDE1OC42IDIwNi44IDI5MC40em0tMzM5LjYtODNsNDEuNSAwIDAtNTguMS00MS41IDAgMCA1OC4xem0yMTcuMiA4Ni4xbDAtMjMuOGMtNjAuNSAyMC45LTEzMi40IDkuMi0xODcuNi0zNGwuMiAyNC45YzUxLjEgNDYuNCAxMzEuNyA1Ny45IDE4Ny4zIDMyLjl6TTE5MCAyMzkuNGwxNjYuMSAwIDAtNTguMS0xNjYuMSAwIDAgNTguMXoiXQogICAgfTsKICAgIGZhRGlhc3BvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlhc3BvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc5MSIsICJNMjE5LjcgMzU0LjZjLTEuNCAwLTg4IDExOS45LTg4LjcgMTE5LjlTNDQuNCA0MTQgNDQgNDEzLjMgMTMwLjYgMjg3LjUgMTMwLjYgMjg1LjhjMC0yLjItMTI5LjYtNDQtMTM3LjYtNDcuMS0xLjMtLjUgMzEuNC0xMDEuOCAzMS43LTEwMi4xIC42LS43IDE0NC40IDQ3IDE0NS41IDQ3IC40IDAgLjktLjYgMS0xLjMgLjQtMiAxLTE0OC42IDEuNy0xNDkuNiAuOC0xLjIgMTA0LjUtLjcgMTA1LjEtLjMgMS41IDEgMy41IDE1Ni4xIDYuMSAxNTYuMSAxLjQgMCAxMzguNy00NyAxMzkuMy00Ni4zIC44IC45IDMxLjkgMTAyLjIgMzEuNSAxMDIuNi0uOSAuOS0xNDAuMiA0Ny4xLTE0MC42IDQ4LjgtLjMgMS40IDgyLjggMTIyLjEgODIuNSAxMjIuOXMtODUuNSA2My41LTg2LjMgNjMuNWMtMS0uMi04OS0xMjUuNS05MC45LTEyNS41bDAgMHoiXQogICAgfTsKICAgIGZhUHJvZHVjdEh1bnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicHJvZHVjdC1odW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODgiLCAiTTMyNi4zIDIxOC44YzAgMjAuNS0xNi43IDM3LjItMzcuMiAzNy4ybC03MC4zIDAgMC03NC40IDcwLjMgMGMyMC41IDAgMzcuMiAxNi43IDM3LjIgMzcuMnpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzY3LjktMzcuMmMwLTQ3LjktMzguOS04Ni44LTg2LjgtODYuOGwtMTE5LjkgMCAwIDI0OCA0OS42IDAgMC03NC40IDcwLjMgMGM0Ny45IDAgODYuOC0zOC45IDg2LjgtODYuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlVXB3b3JrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS11cHdvcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY3YyIsICJNNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNDgwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDg4QzAgNTcuMSAyNS4xIDMyIDU2IDMyek0yNzAuOSAyNzQuMmM2LjYtNTIuOSAyNS45LTY5LjUgNTEuNC02OS41IDI1LjMgMCA0NC45IDIwLjIgNDQuOSA0OS43cy0xOS43IDQ5LjctNDQuOSA0OS43Yy0yNy45IDAtNDYuMy0yMS41LTUxLjQtMjkuOXptLTI2LjctNDEuOGMtOC4yLTE1LjUtMTQuMy0zNi4zLTE5LjItNTUuNmwtNjIuOSAwIDAgNzguMWMwIDI4LjQtMTIuOSA0OS40LTM4LjIgNDkuNFM4NC4xIDI4My40IDg0LjEgMjU1bC4zLTc4LjEtMzYuMiAwIDAgNzguMWMwIDIyLjggNy40IDQzLjUgMjAuOSA1OC4yIDEzLjkgMTUuMiAzMi44IDIzLjIgNTQuOCAyMy4yIDQzLjcgMCA3NC4yLTMzLjUgNzQuMi04MS41bDAtNTIuNWM0LjYgMTcuMyAxNS40IDUwLjUgMzYuMiA3OS43bC0xOS4zIDExMC41IDM2LjggMCAxMi44LTc4LjRjNC4yIDMuNSA4LjcgNi42IDEzLjQgOS40IDEyLjMgNy44IDI2LjQgMTIuMiA0MC45IDEyLjZsMy40IDBjNDUuMSAwIDgwLjktMzQuOSA4MC45LTgxLjlzLTM1LjktODIuMi04MC45LTgyLjJjLTQ1LjQgMC03MC45IDI5LjctNzguMSA2MC4xbDAgLjJ6Il0KICAgIH07CiAgICBmYUN1dHRsZWZpc2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3V0dGxlZmlzaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzhjIiwgIk0zNDggMzA1LjVjLTE3LjUgMzEuNi01Ny40IDU0LjUtOTYgNTQuNS01Ni42IDAtMTA0LTQ3LjQtMTA0LTEwNHM0Ny40LTEwNCAxMDQtMTA0YzM4LjYgMCA3OC41IDIyLjkgOTYgNTQuNSAxMy43LTUwLjkgNDEuNy05My4zIDg3LTExNy44LTQ1LjMtNDkuNi0xMTAuNS04MC43LTE4My04MC43LTEzNyAwLTI0OCAxMTEtMjQ4IDI0OFMxMTUgNTA0IDI1MiA1MDRjNzIuNSAwIDEzNy43LTMxLjEgMTgzLTgwLjctNDUuMy0yNC41LTczLjMtNjYuOS04Ny0xMTcuOHoiXQogICAgfTsKICAgIGZhTWVkYXBwcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWRhcHBzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzYzYiLCAiTTExOC4zIDIzOC40YzMuNS0xMi41IDYuOS0zMy42IDEzLjItMzMuNiA4LjMgMS44IDkuNiAyMy40IDE4LjYgMzYuNiA0LjYtMjMuNSA1LjMtODUuMSAxNC4xLTg2LjcgOS0uNyAxOS43IDY2LjUgMjIgNzcuNSA5LjkgNC4xIDQ4LjkgNi42IDQ4LjkgNi42IDEuOSA3LjMtMjQgNy42LTQwIDcuOC00LjYgMTQuOC01LjQgMjcuNy0xMS40IDI4LTQuNyAuMi04LjItMjguOC0xNy41LTQ5LjZsLTkuNCA2NS41Yy00LjQgMTMtMTUuNS0yMi41LTIxLjktMzkuMy0zLjMtLjEtNjIuNC0xLjYtNDcuNi03LjhsMzEtNXpNMjI4IDQ0OGMyMS4yIDAgMjEuMi0zMiAwLTMyTDkyIDQxNmMtMjEuMiAwLTIxLjIgMzIgMCAzMmwxMzYgMHptLTI0IDY0YzIxLjIgMCAyMS4yLTMyIDAtMzJsLTg4IDBjLTIxLjIgMC0yMS4yIDMyIDAgMzJsODggMHptMzQuMi0xNDEuNWMzLjItMTguOSA1LjItMzYuNCAxMS45LTQ4LjggNy45LTE0LjcgMTYuMS0yOC4xIDI0LTQxIDI0LjYtNDAuNCA0NS45LTc1LjIgNDUuOS0xMjUuNSAwLTg1LjYtNzEuOC0xNTUuMi0xNjAtMTU1LjJTMCA2OS42IDAgMTU1LjJjMCA1MC4yIDIxLjMgODUuMSA0NS45IDEyNS41IDcuOSAxMi45IDE2IDI2LjMgMjQgNDEgNi43IDEyLjUgOC43IDI5LjggMTEuOSA0OC45IDMuNSAyMSAzNi4xIDE1LjcgMzIuNi01LjEtMy42LTIxLjctNS42LTQwLjctMTUuMy01OC42LTMyLjYtNjAuNC02Ni4xLTk1LjYtNjYuMS0xNTEuNyAwLTY3LjkgNTctMTIzLjIgMTI3LTEyMy4yUzI4NyA4Ny4zIDI4NyAxNTUuMmMwIDU2LjEtMzMuNSA5MS4zLTY2LjEgMTUxLjYtOS43IDE4LTExLjcgMzcuNC0xNS4zIDU4LjYtMy40IDIwLjYgMjkgMjYuNCAzMi42IDUuMXoiXQogICAgfTsKICAgIGZhUGl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDNhIiwgIk0yNDIuNCAyOTIuNWM1LjQtNS40IDE0LjctNS40IDIwLjEgMGw3NyA3N2MxNC4yIDE0LjIgMzMuMSAyMiA1My4xIDIybDE1LjEgMC05Ny4xIDk3LjFjLTMwLjMgMjkuNS03OS41IDI5LjUtMTA5LjggMGwtOTcuNS05Ny40IDkuMyAwYzIwIDAgMzguOS03LjggNTMuMS0yMmw3Ni43LTc2Ljd6bTIwLjEtNzMuNmMtNi40IDUuNS0xNC42IDUuNi0yMC4xIDBsLTc2LjctNzYuN2MtMTQuMi0xNS4xLTMzLjEtMjItNTMuMS0yMmwtOS4zIDAgOTcuNC05Ny40YzMwLjQtMzAuMyA3OS42LTMwLjMgMTA5LjkgMGw5Ny4yIDk3LjEtMTUuMiAwYy0yMCAwLTM4LjkgNy44LTUzLjEgMjJsLTc3IDc3ek0xMTIuNiAxNDIuN2MxMy44IDAgMjYuNSA1LjYgMzcuMSAxNS40bDc2LjcgNzYuN2M3LjIgNi4zIDE2LjYgMTAuOCAyNi4xIDEwLjggOS40IDAgMTguOC00LjUgMjYtMTAuOGw3Ny03N2M5LjgtOS43IDIzLjMtMTUuMyAzNy4xLTE1LjNsMzcuNyAwIDU4LjMgNTguM2MzMC4zIDMwLjMgMzAuMyA3OS41IDAgMTA5LjhsLTU4LjMgNTguMy0zNy43IDBjLTEzLjggMC0yNy4zLTUuNi0zNy4xLTE1LjRsLTc3LTc3Yy0xMy45LTEzLjktMzguMi0xMy45LTUyLjEgLjFsLTc2LjcgNzYuNmMtMTAuNiA5LjgtMjMuMyAxNS40LTM3LjEgMTUuNGwtMzEuOCAwLTU4LTU4Yy0zMC4zLTMwLjMtMzAuMy03OS41IDAtMTA5LjhsNTgtNTguMSAzMS44IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVR1bWJsciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdHVtYmxyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInR1bWJsci1zcXVhcmUiXSwgImYxNzQiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYuOCA0MTZjLTc1LjUgMC05MS45LTU1LjUtOTEuOS04Ny45bDAtOTAtMjkuNyAwYy0zLjQgMC02LjItMi44LTYuMi02LjJsMC00Mi41YzAtNC41IDIuOC04LjUgNy4xLTEwIDM4LjgtMTMuNyA1MC45LTQ3LjUgNTIuNy03My4yIC41LTYuOSA0LjEtMTAuMiAxMC0xMC4ybDQ0LjMgMGMzLjQgMCA2LjIgMi44IDYuMiA2LjJsMCA3MiA1MS45IDBjMy40IDAgNi4yIDIuOCA2LjIgNi4ybDAgNTEuMWMwIDMuNC0yLjggNi4yLTYuMiA2LjJsLTUyLjEgMCAwIDgzLjNjMCAyMS40IDE0LjggMzMuNSA0Mi41IDIyLjQgMy0xLjIgNS42LTIgOC0xLjQgMi4yIC41IDMuNiAyLjEgNC42IDQuOUwzMTggMzg3LjFjMSAzLjIgMiA2LjctLjMgOS4xLTguNSA5LjEtMzEuMiAxOS44LTYwLjkgMTkuOHoiXQogICAgfTsKICAgIGZhVHVtYmxyU3F1YXJlID0gZmFTcXVhcmVUdW1ibHI7CiAgICBmYVJlYWN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlYWN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MWIiLCAiTTQxOC4yIDE3Ny4yYy01LjQtMS44LTEwLjgtMy41LTE2LjItNS4xIC45LTMuNyAxLjctNy40IDIuNS0xMS4xIDEyLjMtNTkuNiA0LjItMTA3LjUtMjMuMS0xMjMuMy0yNi4zLTE1LjEtNjkuMiAuNi0xMTIuNiAzOC40LTQuMyAzLjctOC41IDcuNi0xMi41IDExLjUtMi43LTIuNi01LjUtNS4yLTguMy03LjctNDUuNS00MC40LTkxLjEtNTcuNC0xMTguNC00MS41LTI2LjIgMTUuMi0zNCA2MC4zLTIzIDExNi43IDEuMSA1LjYgMi4zIDExLjEgMy43IDE2LjctNi40IDEuOC0xMi43IDMuOC0xOC42IDUuOS01My40IDE4LjUtOTEuNyA0Ny43LTkxLjcgNzcuOSAwIDMxLjIgNDAuOCA2Mi41IDk2LjMgODEuNSA0LjUgMS41IDkgMyAxMy42IDQuMy0xLjUgNi0yLjggMTEuOS00IDE4LTEwLjUgNTUuNS0yLjMgOTkuNSAyMy45IDExNC42IDI3IDE1LjYgNzIuNC0uNCAxMTYuNi0zOS4xIDMuNS0zLjEgNy02LjMgMTAuNS05LjcgNC40IDQuMyA5IDguNCAxMy42IDEyLjQgNDIuOCAzNi44IDg1LjEgNTEuNyAxMTEuMiAzNi42IDI3LTE1LjYgMzUuOC02Mi45IDI0LjQtMTIwLjUtLjktNC40LTEuOS04LjktMy0xMy41IDMuMi0uOSA2LjMtMS45IDkuNC0yLjkgNTcuNy0xOS4xIDk5LjUtNTAgOTkuNS04MS43IDAtMzAuMy0zOS40LTU5LjctOTMuOC03OC40ek0yODIuOSA5Mi4zYzM3LjItMzIuNCA3MS45LTQ1LjEgODcuNy0zNiAxNi45IDkuNyAyMy40IDQ4LjkgMTIuOCAxMDAuNC0uNyAzLjQtMS40IDYuNy0yLjMgMTAtMjIuMi01LTQ0LjctOC42LTY3LjMtMTAuNi0xMy0xOC42LTI3LjItMzYuNC00Mi42LTUzLjEgMy45LTMuNyA3LjctNy4yIDExLjctMTAuN3pNMTY3LjIgMzA3LjVjNS4xIDguNyAxMC4zIDE3LjQgMTUuOCAyNS45LTE1LjYtMS43LTMxLjEtNC4yLTQ2LjQtNy41IDQuNC0xNC40IDkuOS0yOS4zIDE2LjMtNDQuNSA0LjYgOC44IDkuMyAxNy41IDE0LjMgMjYuMXpNMTM2LjkgMTg3LjJjMTQuNC0zLjIgMjkuNy01LjggNDUuNi03LjgtNS4zIDguMy0xMC41IDE2LjgtMTUuNCAyNS40LTQuOSA4LjUtOS43IDE3LjItMTQuMiAyNi02LjMtMTQuOS0xMS42LTI5LjUtMTYtNDMuNnptMjcuNCA2OC45YzYuNi0xMy44IDEzLjgtMjcuMyAyMS40LTQwLjZzMTUuOC0yNi4yIDI0LjQtMzguOWMxNS0xLjEgMzAuMy0xLjcgNDUuOS0xLjdzMzEgLjYgNDUuOSAxLjdjOC41IDEyLjYgMTYuNiAyNS41IDI0LjMgMzguN3MxNC45IDI2LjcgMjEuNyA0MC40Yy02LjcgMTMuOC0xMy45IDI3LjQtMjEuNiA0MC44LTcuNiAxMy4zLTE1LjcgMjYuMi0yNC4yIDM5LTE0LjkgMS4xLTMwLjQgMS42LTQ2LjEgMS42cy0zMC45LS41LTQ1LjYtMS40Yy04LjctMTIuNy0xNi45LTI1LjctMjQuNi0zOXMtMTQuOC0yNi44LTIxLjUtNDAuNnptMTgwLjYgNTEuMmM1LjEtOC44IDkuOS0xNy43IDE0LjYtMjYuNyA2LjQgMTQuNSAxMiAyOS4yIDE2LjkgNDQuMy0xNS41IDMuNS0zMS4yIDYuMi00NyA4IDUuNC04LjQgMTAuNS0xNyAxNS41LTI1LjZ6bTE0LjQtNzYuNWMtNC43LTguOC05LjUtMTcuNi0xNC41LTI2LjItNC45LTguNS0xMC0xNi45LTE1LjMtMjUuMiAxNi4xIDIgMzEuNSA0LjcgNDUuOSA4LTQuNiAxNC44LTEwIDI5LjItMTYuMSA0My40ek0yNTYuMiAxMTguM2MxMC41IDExLjQgMjAuNCAyMy40IDI5LjYgMzUuOC0xOS44LS45LTM5LjctLjktNTkuNSAwIDkuOC0xMi45IDE5LjktMjQuOSAyOS45LTM1Ljh6TTE0MC4yIDU3YzE2LjgtOS44IDU0LjEgNC4yIDkzLjQgMzkgMi41IDIuMiA1IDQuNiA3LjYgNy0xNS41IDE2LjctMjkuOCAzNC41LTQyLjkgNTMuMS0yMi42IDItNDUgNS41LTY3LjIgMTAuNC0xLjMtNS4xLTIuNC0xMC4zLTMuNS0xNS41LTkuNC00OC40LTMuMi04NC45IDEyLjYtOTR6TTExNS43IDMyMC42Yy00LjItMS4yLTguMy0yLjUtMTIuNC0zLjktMjEuMy02LjctNDUuNS0xNy4zLTYzLTMxLjItMTAuMS03LTE2LjktMTcuOC0xOC44LTI5LjkgMC0xOC4zIDMxLjYtNDEuNyA3Ny4yLTU3LjYgNS43LTIgMTEuNS0zLjggMTcuMy01LjUgNi44IDIxLjcgMTUgNDMgMjQuNSA2My42LTkuNiAyMC45LTE3LjkgNDIuNS0yNC44IDY0LjV6bTExNi42IDk4Yy0xNi41IDE1LjEtMzUuNiAyNy4xLTU2LjQgMzUuMy0xMS4xIDUuMy0yMy45IDUuOC0zNS4zIDEuMy0xNS45LTkuMi0yMi41LTQ0LjUtMTMuNS05MiAxLjEtNS42IDIuMy0xMS4yIDMuNy0xNi43IDIyLjQgNC44IDQ1IDguMSA2Ny45IDkuOCAxMy4yIDE4LjcgMjcuNyAzNi42IDQzLjIgNTMuNC0zLjIgMy4xLTYuNCA2LjEtOS42IDguOXptMjQuNS0yNC4zYy0xMC4yLTExLTIwLjQtMjMuMi0zMC4zLTM2LjMgOS42IC40IDE5LjUgLjYgMjkuNSAuNiAxMC4zIDAgMjAuNC0uMiAzMC40LS43LTkuMiAxMi43LTE5LjEgMjQuOC0yOS42IDM2LjR6bTEzMC43IDMwYy0uOSAxMi4yLTYuOSAyMy42LTE2LjUgMzEuMy0xNS45IDkuMi00OS44LTIuOC04Ni40LTM0LjItNC4yLTMuNi04LjQtNy41LTEyLjctMTEuNSAxNS4zLTE2LjkgMjkuNC0zNC44IDQyLjItNTMuNiAyMi45LTEuOSA0NS43LTUuNCA2OC4yLTEwLjUgMSA0LjEgMS45IDguMiAyLjcgMTIuMiA0LjkgMjEuNiA1LjcgNDQuMSAyLjUgNjYuM3ptMTguMi0xMDcuNWMtMi44IC45LTUuNiAxLjgtOC41IDIuNi03LTIxLjgtMTUuNi00My4xLTI1LjUtNjMuOCA5LjYtMjAuNCAxNy43LTQxLjQgMjQuNS02Mi45IDUuMiAxLjUgMTAuMiAzLjEgMTUgNC43IDQ2LjYgMTYgNzkuMyAzOS44IDc5LjMgNTggMCAxOS42LTM0LjkgNDQuOS04NC44IDYxLjR6TTI1NiAzMDEuOGE0NS44IDQ1LjggMCAxIDAgMC05MS42IDQ1LjggNDUuOCAwIDEgMCAwIDkxLjZ6Il0KICAgIH07CiAgICBmYUh1Z2dpbmdGYWNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImh1Z2dpbmctZmFjZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODY5IiwgIk0yODYuOCA4LjJjMTMwIDAgMjM1LjQgMTA1LjggMjM1LjQgMjM2LjMgMCAxNy43LTEuOSAzNS01LjYgNTEuNy0xLjQgNi41LTMuMSAxMi44LTUuMSAxOS4xIDYuNS0uNiAxMyAuNiAxOC43IDMuNSAxMi42IDYuNSAyMC4yIDIxLjcgMTguMiAzNS43LS43IDQuOS0yLjQgOS40LTQuOCAxMy41IDUuMiA0LjIgOSAxMC4xIDEwLjggMTcuMSAxLjQgNS41IDIuOSAxNy4xLTQuOCAyOC45IDUuOCA5LjIgNi42IDIwLjYgMi4yIDMwLjYtNi4yIDE0LjEtMjEuNyAyNS4zLTUxLjcgMzcuMy0zMi41IDEzLTY3LjEgMjEuOS0xMDIuMyAyMS45LTMyIDAtNTUuOS04LjktNzEtMjYuNC0xMyAyLjItMjYuMyAzLjQtNDAgMy40LTEyLjcgMC0yNS4yLTEtMzcuMy0yLjktMTUuMSAxNy4yLTM4LjggMjUuOS03MC42IDI1LjktMzUuMSAwLTcwLTktMTAyLjQtMjEuOS0zMC0xMi00NS41LTIzLjEtNTEuNy0zNy4zLTQuNC05LjktMy42LTIxLjQgMi4yLTMwLjYtNy43LTExLjktNi4zLTIzLjQtNC44LTI4LjkgMS44LTcgNS43LTEyLjkgMTAuOC0xNy4xLTIuNS00LjEtNC4xLTguNi00LjgtMTMuNS0xLjUtMTAuNCAyLTIwLjcgOS43LTI5LjIgNi4xLTYuNyAxNS4xLTEwLjMgMjQuMi0xMC4yLTEuOS02LjEtMy42LTEyLjQtNS0xOC43LTMuNy0xNi43LTUuNy0zNC01LjctNTEuOCAwLTEzMC41IDEwNS40LTIzNi4zIDIzNS40LTIzNi4zek0xMTcuNSAzMTFjLTEzLTguMi0yMi4xLTMuNi0xOSAxMy40czU3LjIgNTguMiA1MiA2Ny4yYy01LjIgOC44LTIzLjUtMTAuMS0yMy44LTEwLjUgMCAwLTU4LjItNTMuMS03MC44LTM5LjMtMTIuNiAxMy44IDkuNiAyNS40IDQxLjMgNDQuN3MzNC4yIDI0LjQgMjkuNyAzMS43LTc0LjUtNTItODEuMS0yNi44Yy02LjUgMjUuMSA3MS40IDMyLjQgNjYuNyA0OS44LTQuOCAxNy40LTU0LjktMzIuOC02NS4yLTEzLjMtMTAuMyAxOS42IDcwLjggNDIuNiA3MS40IDQyLjcgMjYuMiA2LjggOTIuNiAyMS4zIDExNS45LTEyLjkgMTYuNy0yNC42IDE1LjYtNDMuMS03LjQtNjYuMXMtMzYuMy01Ni43LTM2LjMtNTYuN2MwLS4yLTUtMTkuNS0xNi4zLTE3LjgtMTEuNCAxLjgtMTkuNyAzMSA0LjEgNDguOSAyMy44IDE3LjktNC43IDMwLTEzLjkgMTMuMy05LjItMTYuOC0zNC4yLTU5LjktNDcuMS02OC4yem0zNjAuNiAxMy40YzMuMS0xNy02LjEtMjEuNi0xOS0xMy40LTEzIDguMy0zNy45IDUxLjQtNDcuMSA2OC4ycy0zNy43IDQuNi0xMy45LTEzLjMgMTUuNC00Ny4xIDQuMS00OC45LTE2LjMgMTcuOC0xNi4zIDE3LjhjLS4xIC4yLTEzLjQgMzMuNy0zNi4zIDU2LjctMjIuOSAyMy0yNC4xIDQxLjUtNy40IDY2LjEgMjMuMiAzNC4yIDg5LjcgMTkuNyAxMTUuOSAxMi45IDEuNS0uNCA4MS42LTIzLjMgNzEuNC00Mi43LTEwLjMtMTkuNS02MC40IDMwLjYtNjUuMyAxMy4zLTQuOC0xNy4zIDczLjItMjQuNiA2Ni43LTQ5LjgtNi42LTI1LjEtNzYuNiAzNC4xLTgxLjEgMjYuOC00LjUtNy4zLTItMTIuNCAyOS43LTMxLjcgMzEuNy0xOS4zIDU0LTMwLjkgNDEuMy00NC43LTEyLjctMTMuOC03MC44IDM5LjMtNzAuOCAzOS4zLS40IC40LTE4LjYgMTkuMy0yMy44IDEwLjUtNS4zLTguOSA0OC45LTUwLjEgNTItNjcuMnpNMjg2LjggMzIuNmMtMTE2LjYgMC0yMTEuMSA5NC45LTIxMS4xIDIxMS45IDAgMTcuMSAyIDMzLjggNS44IDQ5LjcgMC0uMSAuMS0uMSAuMi0uMiA2LjEtNy40IDE0LjktMTEuNCAyNC43LTExLjQgMTcuNyAwIDMxLjEgMTEuOSA0MS41IDI0LjkgNi44LTkuNCAxNy4xLTE1IDI3LjktMTUgMjAuNyAwIDMzLjIgMTguMSAzNy45IDM0LjMgMi4zIDUuNSAxMy42IDMwLjUgMzAuNCA0Ny40IDI1LjcgMjUuOCAzMi4yIDUyLjQgMTkuNCA4MC45IDE2IDEuOCAzMi44IDEuNyA0OS4yLS4zLTEyLjUtMjguNC02LTU0LjkgMTkuNi04MC42IDE2LjktMTYuOSAyOC4xLTQxLjkgMzAuNS00Ny40IDQuNy0xNi4yIDE3LjItMzQuMyAzNy45LTM0LjMgMTAuOSAwIDIxLjIgNS42IDI3LjkgMTUgMTAuNC0xMyAyMy44LTI0LjkgNDEuNS0yNC45IDguNyAwIDE2LjYgMy4xIDIyLjUgOC45IDUtMjIgNi40LTQ1LjggNC4xLTY4LjctMTAuOC0xMDYuOS0xMDAuNy0xOTAuMy0yMTAtMTkwLjN6bTEuNSAyMzQuMmM0My42IDAgNzktNDIgNzktMTQuNSAwIDI3LjQtMTkuMiA4MC45LTc4LjggODAuOS0xOS4yIDAtMzQuMi01LjUtNDUuOC0xMy45LTIzLjItMTkuNC0zMy40LTQ4LjItMzMuNC02Ni45IDAtMjcuNCAzNS40IDE0LjUgNzkgMTQuNXptLTEzLjMgMjVjLTguMiAyLjQtMTUuNSA2LjgtMjEuNSAxMi42IDIyIDEyLjggNTAuNCAxMi45IDcxLjctMS4zLTUuNS00LjktMTItOC43LTE5LjEtMTEtNS4xLTEuNi0xMC40IDE1LjgtMTYgMTUuOC01LjIgMC0xMC4zLTE3LjYtMTUuMS0xNi4yek0xNDcuMSAyMTUuNWExOS44IDE5LjggMCAxIDEgMC0zOS42IDE5LjggMTkuOCAwIDEgMSAwIDM5LjZ6bTI4Mi40IDBhMTkuOCAxOS44IDAgMSAxIDAtMzkuNiAxOS44IDE5LjggMCAxIDEgMCAzOS42em0tMjQ0LTU1LjRjNy45LTE0LjkgMjYuMy0yMC41IDQxLjEtMTIuNnMyMC40IDI2LjQgMTIuNiA0MS4yYy0zLjcgNy0xNS41LTQuNC0yMi40LTEuOS03LjcgMi43LTEwLjggMTguNy0xOC42IDE0LjYtMTQuOC03LjktMjAuNC0yNi40LTEyLjYtNDEuMnptMTY0LjQtMTIuNmMxNC44LTcuOSAzMy4yLTIuMyA0MS4xIDEyLjZzMi4yIDMzLjMtMTIuNiA0MS4yYy03LjggNC4yLTEwLjktMTEuOC0xOC43LTE0LjYtNi45LTIuNC0xOC43IDktMjIuNCAxLjktNy45LTE0LjktMi4yLTMzLjMgMTIuNi00MS4yeiJdCiAgICB9OwogICAgZmFKeGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianhsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2N2IiLCAiTTQxMi4yIDMyTDM1LjggMzJDMTYgMzIgMCA0OCAwIDY3LjhMMCA0NDQuMkMwIDQ2NCAxNiA0ODAgMzUuOCA0ODBsMzc2LjQgMGMxOS44IDAgMzUuOC0xNiAzNS44LTM1LjhsMC0zNzYuNEM0NDggNDggNDMyIDMyIDQxMi4yIDMyek0zNzguNiAzMzMuN2MwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6bTAtMTEzLjljMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlTGlua2VkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxpbmtlZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTUgMTcwLjJsNjYuNSAwIDAgMjEzLjgtNjYuNSAwIDAtMjEzLjh6bTcxLjctNjcuN2EzOC41IDM4LjUgMCAxIDEgLTc3IDAgMzguNSAzOC41IDAgMSAxIDc3IDB6TTMxNy45IDQxNmwwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjItNjYuNCAweiJdCiAgICB9OwogICAgZmFDc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2YTIiLCAiTTM3Ni4zIDMyTDAgMzIgMCA0MDguM2MwIDE5IDcuNiAzNy4yIDIxIDUwLjdzMzEuNyAyMSA1MC43IDIxbDMwNC42IDBjMTkgMCAzNy4yLTcuNiA1MC43LTIxczIxLTMxLjcgMjEtNTAuN2wwLTMwNC42YzAtMTktNy42LTM3LjItMjEtNTAuN3MtMzEuNy0yMS01MC43LTIxek0zMzIuNCA0MzEuNGMtNy43LTguNS0xMS43LTIwLjctMTItMzYuNmwzMS4zIDBjLjIgMTQuMSA1LjEgMjEuMSAxNC44IDIxLjFjNC45IDAgOC40LTEuNiAxMC41LTQuN2MyLTMuMSAzLTggMy0xNC44YzAtNS40LTEuMy05LjktNC0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMzUxLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNSAxMi41YzcuNSA4LjQgMTEuNSAyMC4zIDExLjggMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQgMjcuNC0xMi4zIDM1LjdjLTguMiA4LjMtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTAxIDBjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNC00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTMuOS0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMjUwLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNCAxMi41YzcuNiA4LjQgMTEuNSAyMC4zIDExLjkgMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQuMSAyNy40LTEyLjMgMzUuN3MtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTA1LjYgMS4xYy04LjQtNy43LTEyLjUtMTkuMi0xMi41LTM0LjVsMC03NS40YzAtMTUuMiA0LjQtMjYuNyAxMy4yLTM0LjZjOC45LTcuOCAyMC43LTExLjggMzUuMi0xMS44YzE0LjEgMCAyNS4yIDQgMzMuNCAxMmM4LjMgOCAxMi41IDIwIDEyLjUgMzUuOWwwIDYtMzMuMSAwIDAtNS44YzAtNi4xLTEuMy0xMC43LTQtMTMuNmMtMS4xLTEuNS0yLjYtMi43LTQuMy0zLjVzLTMuNS0xLjItNS40LTEuMWMtNS40IDAtOS4yIDEuOC0xMS40IDUuNmMtMi4zIDUuMi0zLjMgMTAuOC0zIDE2LjRsMCA2NS41YzAgMTMuNyA0LjggMjAuNiAxNC40IDIwLjhjNC41IDAgNy45LTEuNiAxMC4yLTQuOGMyLjUtNC4xIDMuNy04LjggMy41LTEzLjZsMC00LjkgMzMuMSAwIDAgNS4xYzAgMTAuNi0yLjEgMTkuNS02LjIgMjYuNmMtNCA2LjktOS45IDEyLjUtMTcuMSAxNmMtNy43IDMuNy0xNi4xIDUuNS0yNC42IDUuM2MtMTQuMiAwLTI1LjUtMy45LTMzLjgtMTEuNnoiXQogICAgfTsKICAgIGZhSGFzaG5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFzaG5vZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ5OSIsICJNMzUuNyAxNzEuMWMtNDYuOSA0Ni00Ni45IDEyMi45IDAgMTY5LjhMMTcxLjYgNDc2LjhjNDYgNDYuOSAxMjIuOSA0Ni45IDE2OS44IDBMNDc3LjMgMzQwLjljNDYuOS00Ni45IDQ2LjktMTIzLjggMC0xNjkuOEwzNDEuNCAzNS4yYy00Ni45LTQ2LjktMTIzLjgtNDYuOS0xNjkuOCAwTDM1LjcgMTcxLjF6TTE5NiAxOTYuNWE4NC41IDg0LjUgMCAxIDEgMTIwIDExOSA4NC41IDg0LjUgMCAxIDEgLTEyMC0xMTl6Il0KICAgIH07CiAgICBmYVJlZGRpdEFsaWVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdC1hbGllbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjgxIiwgIk0zNzMgMTM4LjZjLTI1LjIgMC00Ni4zLTE3LjUtNTEuOS00MS0zMC42IDQuMy01NC4yIDMwLjctNTQuMiA2Mi40bDAgLjJjNDcuNCAxLjggOTAuNiAxNS4xIDEyNC45IDM2LjMgMTIuNi05LjcgMjguNC0xNS41IDQ1LjUtMTUuNSA0MS4zIDAgNzQuNyAzMy40IDc0LjcgNzQuNyAwIDI5LjgtMTcuNCA1NS41LTQyLjcgNjcuNS0yLjQgODYuOC05NyAxNTYuNi0yMTMuMiAxNTYuNlM0NS41IDQxMC4xIDQzIDMyMy40Yy0yNS40LTExLjktNDMtMzcuNy00My02Ny43IDAtNDEuMyAzMy40LTc0LjcgNzQuNy03NC43IDE3LjIgMCAzMyA1LjggNDUuNyAxNS42IDM0LTIxLjEgNzYuOC0zNC40IDEyMy43LTM2LjRsMC0uM2MwLTQ0LjMgMzMuNy04MC45IDc2LjgtODUuNSA0LjktMjQuMiAyNi4zLTQyLjQgNTIuMS00Mi40IDI5LjQgMCA1My4zIDIzLjkgNTMuMyA1My4zcy0yMy45IDUzLjMtNTMuMyA1My4zek0xNTcuNSAyNTUuM2MtMjAuOSAwLTM4LjkgMjAuOC00MC4yIDQ3LjlzMTcuMSAzOC4xIDM4IDM4LjEgMzYuNi05LjggMzcuOC0zNi45LTE0LjctNDkuMS0zNS43LTQ5LjFsLjEgMHpNMzk1IDMwMy4xYy0xLjItMjcuMS0xOS4yLTQ3LjktNDAuMi00Ny45cy0zNi45IDIyLTM1LjcgNDkuMSAxNi45IDM2LjkgMzcuOCAzNi45IDM5LjMtMTEgMzgtMzguMWwuMSAwem0tNjAuMSA3MC44YzEuNS0zLjYtMS03LjctNC45LTguMS0yMy0yLjMtNDcuOS0zLjYtNzMuOC0zLjZzLTUwLjggMS4zLTczLjggMy42Yy0zLjkgLjQtNi40IDQuNS00LjkgOC4xIDEyLjkgMzAuOCA0My4zIDUyLjQgNzguNyA1Mi40czY1LjgtMjEuNiA3OC43LTUyLjR6Il0KICAgIH07CiAgICBmYVRpa3RvayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWt0b2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YiIsICJNNDQ4LjUgMjA5LjljLTQ0IC4xLTg3LTEzLjYtMTIyLjgtMzkuMmwwIDE3OC43YzAgMzMuMS0xMC4xIDY1LjQtMjkgOTIuNnMtNDUuNiA0OC03Ni42IDU5LjYtNjQuOCAxMy41LTk2LjkgNS4zLTYwLjktMjUuOS04Mi43LTUwLjgtMzUuMy01Ni0zOS04OC45IDIuOS02Ni4xIDE4LjYtOTUuMiA0MC01Mi43IDY5LjYtNjcuNyA2Mi45LTIwLjUgOTUuNy0xNmwwIDg5LjljLTE1LTQuNy0zMS4xLTQuNi00NiAuNHMtMjcuOSAxNC42LTM3IDI3LjMtMTQgMjguMS0xMy45IDQzLjkgNS4yIDMxIDE0LjUgNDMuNyAyMi40IDIyLjEgMzcuNCAyNi45IDMxLjEgNC44IDQ2LS4xIDI4LTE0LjQgMzcuMi0yNy4xIDE0LjItMjguMSAxNC4yLTQzLjhsMC0zNDkuNCA4OCAwYy0uMSA3LjQgLjYgMTQuOSAxLjkgMjIuMiAzLjEgMTYuMyA5LjQgMzEuOSAxOC43IDQ1LjdzMjEuMyAyNS42IDM1LjIgMzQuNmMxOS45IDEzLjEgNDMuMiAyMC4xIDY3IDIwLjFsMCA4Ny40eiJdCiAgICB9OwogICAgZmFXb3JkcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29yZHByZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxOWEiLCAiTTYxLjcgMTY5LjRsMTAxLjUgMjc4Yy03MS0zNC40LTExOS45LTEwNy4yLTExOS45LTE5MS40IDAtMzAuOSA2LjYtNjAuMSAxOC40LTg2LjZ6bTMzNy45IDc1LjljMC0yNi4zLTkuNC00NC41LTE3LjUtNTguNy0xMC44LTE3LjUtMjAuOS0zMi40LTIwLjktNDkuOSAwLTE5LjYgMTQuOC0zNy44IDM1LjctMzcuOCAuOSAwIDEuOCAuMSAyLjggLjItMzcuOS0zNC43LTg4LjMtNTUuOS0xNDMuNy01NS45LTc0LjMgMC0xMzkuNyAzOC4xLTE3Ny44IDk1LjkgNSAuMiA5LjcgLjMgMTMuNyAuMyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ny41IDIzMC40IDQ2LjYtMTM5LjYtMzMuMS05MC44Yy0xMS41LS43LTIyLjMtMi0yMi4zLTItMTEuNS0uNy0xMC4xLTE4LjIgMS4zLTE3LjUgMCAwIDM1LjEgMi43IDU2IDIuNyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ni45IDIyOC43IDIxLjItNzAuOWM5LTI5LjQgMTYtNTAuNSAxNi02OC43ek0yNTkuNyAyNzQuNkwxOTUuOSA0NjAuMWMxOS4xIDUuNiAzOS4yIDguNyA2MC4xIDguNyAyNC44IDAgNDguNS00LjMgNzAuNi0xMi4xLS42LS45LTEuMS0xLjktMS41LTIuOUwyNTkuNyAyNzQuNnptMTgzLTEyMC43Yy45IDYuOCAxLjQgMTQgMS40IDIxLjkgMCAyMS42LTQgNDUuOC0xNi4yIDc2LjJsLTY1IDE4Ny45YzYzLjMtMzYuOSAxMDUuOC0xMDUuNCAxMDUuOC0xODMuOSAwLTM3LTkuNC03MS44LTI2LTEwMi4xek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODQuNiAwYTIzNi42IDIzNi42IDAgMSAwIC00NzMuMiAwIDIzNi42IDIzNi42IDAgMSAwIDQ3My4yIDB6Il0KICAgIH07CiAgICBmYUlkZWFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImlkZWFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMTMiLCAiTTkzLjggMTY1LjVhNDkuMSA0OS4xIDAgMSAwIDAgOTguMSA0OS4xIDQ5LjEgMCAxIDAgMC05OC4xek01NC4zIDQyNS44bDc4LjkgMCAwLTE0MC41LTc4LjkgMCAwIDE0MC41ek0yMDUuOCAyMTQuMmMwLTIwLTEwLTIyLjUtMTguNy0yMi41bC0xNCAwIDAgNDUuOCAxNCAwYzkuNyAwIDE4LjctMi44IDE4LjctMjMuM3ptMjAxLjcgNDZsMC05MS4zIDIyLjggMCAwIDY4LjYgMzMuNyAwQzQ1NC42IDExMy4xIDM1Ni44IDg2LjIgMjY3LjggODYuMmwtOTQuOCAwIDAgODIuOCAxNCAwYzI1LjYgMCA0MS41IDE3LjQgNDEuNSA0NS4zIDAgMjguOC0xNS41IDQ2LTQxLjUgNDZsLTE0IDAgMCAxNjUuNiA5NC44IDBjMTQ0LjYgMCAxOTQuOS02Ny4yIDE5Ni43LTE2NS42bC01Ny4xIDB6bS0xMDkuOCAwbC01Ni4yIDAgMC05MS4yIDU0LjQgMCAwIDIyLjctMzEuNyAwIDAgMTAuNiAzMCAwIDAgMjIuNy0zMCAwIDAgMTIuNSAzMy41IDAgMCAyMi43em03NC43IDBsLTUuMi0xNy43LTI5LjcgMC01LjIgMTcuNy0yMy43IDAgMjcuNS05MS4zIDMyLjMgMCAyNy41IDkxLjMtMjMuNyAwek0yNjcuOCAzMkwuMSAzMiAuMSA0ODAgMjY3LjggNDgwYzE2MS44IDAgMjUxLTc5LjcgMjUxLTIyNC41IDAtODMuNS0zMi42LTIyMy41LTI1MS0yMjMuNXptMCA0MjYuOWwtMjQ2LjYgMCAwLTQwNS45IDI0Ni42IDBjMTQyLjEgMCAyMjkuOSA2NC42IDIyOS45IDIwMi40IDAgMTM0LjEtODEgMjAzLjQtMjI5LjkgMjAzLjR6bTgzLjktMjY0LjlsLTcuNSAyNS44IDE2LjQgMC03LjUtMjUuOC0xLjQgMHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyUHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1wcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE3IiwgIk0yMDUuMyAxNzQuNmMwIDIxLjEtMTQuMiAzOC4xLTMxLjcgMzguMS03LjEgMC0xMi44LTEuMi0xNy4yLTMuN2wwLTY4YzQuNC0yLjcgMTAuMS00LjIgMTcuMi00LjIgMTcuNSAwIDMxLjcgMTYuOSAzMS43IDM3Ljh6bTUyLjYgNjdjLTcuMSAwLTEyLjggMS41LTE3LjIgNC4ybDAgNjhjNC40IDIuNSAxMC4xIDMuNyAxNy4yIDMuNyAxNy40IDAgMzEuNy0xNi45IDMxLjctMzcuOCAwLTIxLjEtMTQuMy0zOC4xLTMxLjctMzguMXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg1IDI1NS4xYzQxIDAgNzQuMi0zNS42IDc0LjItNzkuNlMyMjYgOTUuOSAxODUgOTUuOWMtMTIgMC0yNC4xIDMuMi0zNC42IDguOGwtNDUuNyAwIDAgMjA2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4xIDE4LjEgNC44IDI4LjUgNC44em0xNTguNCAyNS4zYzAtNDQtMzMuMi03OS42LTczLjktNzkuNi0zLjIgMC02LjQgLjItOS42IC43LTMuNyAxMi41LTEwLjEgMjMuOC0xOS4yIDMzLjQtMTMuOCAxNS0zMi4yIDIzLjgtNTEuOCAyNC44bDAgMTU2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4yIDE4LjIgNC43IDI4LjcgNC43IDQwLjggMCA3NC0zNS42IDc0LTc5LjZ6Il0KICAgIH07CiAgICBmYVVzc3VubmFoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzc3VubmFoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDciLCAiTTQ5Ni45IDI2OC4xYzAgNjMuOS0yNS40IDEyNS4yLTcwLjYgMTcwLjNTMzE5LjkgNTA5IDI1NiA1MDkgMTMwLjggNDgzLjUgODUuNyA0MzguNCAxNS4xIDMzMS45IDE1LjEgMjY4YzAtNjMuOSAyNS40LTEyNS4yIDcwLjYtMTcwLjRTMTkyLjIgMjcuMSAyNTYuMSAyNy4xIDM4MS4zIDUyLjQgNDI2LjUgOTcuNiA0OTcgMjA0LjEgNDk3IDI2OGwtLjEgLjF6TTM5LjUgMjY4Yy0uNiAyOC44IDQuNSA1Ny41IDE1LjEgODQuM3MyNi40IDUxLjIgNDYuNiA3MS44IDQ0LjIgMzcgNzAuOCA0OC4xIDU1LjEgMTYuOSA4My45IDE2LjkgNTcuNC01LjggODMuOS0xNi45IDUwLjYtMjcuNSA3MC44LTQ4LjEgMzYtNDUgNDYuNi03MS44IDE1LjctNTUuNSAxNS4xLTg0LjNjLjYtMjguOC00LjUtNTcuNS0xNS4xLTg0LjNzLTI2LjQtNTEuMi00Ni42LTcxLjgtNDQuMi0zNy03MC44LTQ4LjEtNTUuMS0xNi45LTgzLjktMTYuOS01Ny40IDUuOC04My45IDE2LjktNTAuNiAyNy41LTcwLjggNDguMS0zNiA0NS00Ni42IDcxLjgtMTUuNyA1NS41LTE1LjEgODQuM3ptMzg1LjkgNjMuM2MtMTIuNyAwLTIxLjYtMS45LTI2LjctNS45LTUuNS00LjMtOC4yLTEyLjMtOC4yLTIzLjhsMC05Ni41YzAtNi41LTUuMi0yMC4yLTE1LjctNDEuMiA3IDAgMTctOS4xIDMwLTI3LjJsMCAxNDcuOGMwIDExIDIuNCAxOS40IDcgMjUuMyAzLjcgNC43IDEwLjEgOC45IDE5IDEyLjYgMS4yIC40IDIuNiAuOSA0LjEgMS40IDIuOSAuOSA2LjMgMi4xIDEwLjMgMy41LTEuOCAyLjctOC4zIDQtMTkuOSA0bC4xIDB6bS0yMTkgMGMtMS4zIDIuNC0zLjYgNS41LTYuOCA5LjRsLTE4LjUgMjIuNWMtMS02LjEtNC0xMy05LjMtMjAuNnMtOS43LTExLjQtMTMuNC0xMS40bC04OS44IDBjMy4zLTUuMyA0LjktOC44IDQuOS0xMC44cy0uOC01LjMtMi40LTkuN2MtMS41LTQuNC0yLjQtOC41LTIuNC0xMi40IDAtNy40IDIuMS0xMy45IDYuMy0xOS4zbDIwLTI1LjYtNy4xLTE3LjcgMTYuMS0xOS44IDYuNyAxNi44IDgtMTAuM2MtMS44IDYuNC0yLjYgMTIuMy0yLjYgMTcuNyAwIDQuMiAyLjggMTMuMyA4LjMgMjcuM2wxNi4yIDQwLjcgMTcuNyAwYzIuOCAuNCA3LjcgNSAxNC42IDEzLjkgMS44IDIuNCA0LjMgNS44IDcuNyAxMC4yIDEuNCAxLjkgMi45IDMuOSA0LjYgNi4xIDEuMy0yLjMgMi00LjYgMi03LjEgMC0yLTEuMy02LjYtNC0xMy40TDE3OCAzMDQuMWMtNC0xMC42LTYuMS0xNy43LTYuMS0yMS4zIDAtNi4zIDEuOS0xMi4zIDUuOC0xNy45IC41LS42IDEtMS4zIDEuNS0xLjkgNC40LTUuNiA4LjgtMTEuMSAxMy4zLTE2LjUtMS4xIDQuNi0xLjcgOC43LTEuNyAxMiAwIDMuNyAxLjcgOS45IDUuMSAxOC44bDcuOSAyMC40YzEuOSA0LjcgMyA4LjIgMy43IDEwLjNsMjUuOSAwLS45LTIuNmMtMS40LTMuOS00LTctNy43LTkuM2wxNS42LTIwLjEgMTIuMyAzMiAxMy40IDAtNi4xLTE1LjhjLTEuNS0zLjktNC03LTcuNy05LjNsMTUuNy0yMC4xIDE3LjMgNDUuMiAxMy40IDAtMTEuNC0yOS40Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjYtMjAgMjIuNCA1OC43IDI2LjIgMGMxLjUgMCAzLTEuMSA0LjUtMy4xczIuMi00LjEgMi4yLTYuM2wwLTkzLjVjMC02LjUtNC41LTIwLjMtMTMuNy00MS4yIDUuNCAwIDE0LjEtOS4xIDI2LjItMjcuMmwwIDE2My41YzAgNy4yIC42IDEyIDEuNyAxNC42IDEuNiAzLjQgNS4zIDYuMiAxMS4xIDguMi0zLjkgNS42LTguNyA4LjUtMTQuNSA4LjVsLTE1NC44IDAtLjEtLjJ6bS05OC00NGMtMi43LTYuNy00LTExLjctNC0xNS0uNiAxLjItMi40IDMuNy01LjQgNy42LTEuNCAxLjktMi4yIDMuNy0yLjIgNS4zIDAgMi42IC44IDUuNyAyLjIgOS4zbDUuNiAxMy45YzUgMCA5IDAgMTEuOS0uMWwtOC4yLTIwLjkgLjEtLjF6bTEzLjUtNzIuNGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem0tMjcuNiAwYy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6bTg3IDI3LjVjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHoiXQogICAgfTsKICAgIGZhRm9ydEF3ZXNvbWVBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydC1hd2Vzb21lLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2EzIiwgIk0yMDggMjM3LjRsLTIyLjIgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgNTEuN2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMjIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTUxLjdjMC0yLjEtMS42LTMuNy0zLjctMy43em0xMTguMiAwbC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43Yy0uMS0yLjEtMS43LTMuNy0zLjctMy43em0xMzItMTI1LjFjLTIuMy0zLjItNC42LTYuNC03LjEtOS41LTkuOC0xMi41LTIwLjgtMjQtMzIuOC0zNC40LTQuNS0zLjktOS4xLTcuNi0xMy45LTExLjItMS42LTEuMi0zLjItMi4zLTQuOC0zLjUtMjcuNi0xOS42LTU5LjMtMzMuNy05My42LTQwLjctMTYuMi0zLjMtMzIuOS01LTUwLTVzLTMzLjkgMS43LTUwIDVjLTM0LjMgNy4xLTY2IDIxLjItOTMuMyA0MC44LTEuNiAxLjEtMy4yIDIuMy00LjggMy41LTQuOCAzLjYtOS40IDcuMy0xMy45IDExLjItMyAyLjYtNS45IDUuMy04LjggOHMtNS43IDUuNS04LjQgOC40Yy01LjUgNS43LTEwLjcgMTEuOC0xNS42IDE4LTIuNCAzLjEtNC44IDYuMy03LjEgOS41LTI4LjkgNDAuNi00NS44IDkwLjEtNDUuOCAxNDMuNiAwIDIgLjEgNCAuMSA2IC4xIC43IC4xIDEuMyAuMSAyIC4xIDEuMyAuMSAyLjcgLjIgNCAwIC44IC4xIDEuNSAuMSAyLjMgMCAxLjMgLjEgMi41IC4yIDMuNyAuMSAuOCAuMSAxLjYgLjIgMi40IC4xIDEuMSAuMiAyLjMgLjMgMy41IDAgLjggLjEgMS42IC4yIDIuNCAuMSAxLjIgLjMgMi40IC40IDMuNiAuMSAuOCAuMiAxLjUgLjMgMi4zIC4xIDEuMyAuMyAyLjYgLjUgMy45IC4xIC42IC4yIDEuMyAuMyAxLjlsLjkgNS43Yy4xIC42IC4yIDEuMSAuMyAxLjcgLjMgMS4zIC41IDIuNyAuOCA0IC4yIC44IC4zIDEuNiAuNSAyLjQgLjIgMSAuNSAyLjEgLjcgMy4yIC4yIC45IC40IDEuNyAuNiAyLjYgLjIgMSAuNCAyIC43IDMgLjIgLjkgLjUgMS44IC43IDIuNyAuMyAxIC41IDEuOSAuOCAyLjkgLjMgLjkgLjUgMS44IC44IDIuNyAuMiAuOSAuNSAxLjkgLjggMi44cy41IDEuOCAuOCAyLjdjLjMgMSAuNiAxLjkgLjkgMi44IC42IDEuNiAxLjEgMy4zIDEuNyA0LjkgLjQgMSAuNyAxLjkgMSAyLjggLjMgMSAuNyAyIDEuMSAzIC4zIC44IC42IDEuNSAuOSAyLjNsMS4yIDNjLjMgLjcgLjYgMS41IC45IDIuMiAuNCAxIC45IDIgMS4zIDNsLjkgMi4xYy41IDEgLjkgMiAxLjQgMyAuMyAuNyAuNiAxLjMgLjkgMiAuNSAxIDEgMi4xIDEuNSAzLjEgLjIgLjYgLjUgMS4xIC44IDEuNyAuNiAxLjEgMS4xIDIuMiAxLjcgMy4zIC4xIC4yIC4yIC4zIC4zIC41IDIuMiA0LjEgNC40IDguMiA2LjggMTIuMiAuMiAuNCAuNSAuOCAuNyAxLjIgLjcgMS4xIDEuMyAyLjIgMiAzLjMgLjMgLjUgLjYgLjkgLjkgMS40IC42IDEuMSAxLjMgMi4xIDIgMy4yIC4zIC41IC42IC45IC45IDEuNCAuNyAxLjEgMS40IDIuMSAyLjEgMy4yIC4yIC40IC41IC44IC44IDEuMiAuNyAxLjEgMS41IDIuMiAyLjMgMy4zIC4yIC4yIC4zIC41IC41IC43IDM3LjUgNTEuNyA5NC40IDg4LjUgMTYwIDk5LjQgLjkgLjEgMS43IC4zIDIuNiAuNCAxIC4yIDIuMSAuNCAzLjEgLjVzMS45IC4zIDIuOCAuNGMxIC4yIDIgLjMgMyAuNCAuOSAuMSAxLjkgLjIgMi45IC4zczEuOSAuMiAyLjkgLjMgMi4xIC4yIDMuMSAuM2MuOSAuMSAxLjggLjEgMi43IC4yIDEuMSAuMSAyLjMgLjEgMy40IC4yIC44IDAgMS43IC4xIDIuNSAuMSAxLjMgMCAyLjYgLjEgMy45IC4xIC43IC4xIDEuNCAuMSAyLjEgLjEgMiAuMSA0IC4xIDYgLjFzNC0uMSA2LS4xYy43IDAgMS40LS4xIDIuMS0uMSAxLjMgMCAyLjYgMCAzLjktLjEgLjggMCAxLjctLjEgMi41LS4xIDEuMS0uMSAyLjMtLjEgMy40LS4yIC45IDAgMS44LS4xIDIuNy0uMiAxLS4xIDIuMS0uMiAzLjEtLjNzMS45LS4yIDIuOS0uM2MuOS0uMSAxLjktLjIgMi45LS4zczItLjMgMy0uNCAxLjktLjMgMi44LS40YzEtLjIgMi4xLS4zIDMuMS0uNSAuOS0uMSAxLjctLjMgMi42LS40IDY1LjYtMTEgMTIyLjUtNDcuNyAxNjAuMS0xMDIuNCAuMi0uMiAuMy0uNSAuNS0uNyAuOC0xLjEgMS41LTIuMiAyLjMtMy4zIC4yLS40IC41LS44IC44LTEuMiAuNy0xLjEgMS40LTIuMSAyLjEtMy4yIC4zLS41IC42LS45IC45LTEuNCAuNi0xLjEgMS4zLTIuMSAyLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjctMS4xIDEuMy0yLjIgMi0zLjMgLjItLjQgLjUtLjggLjctMS4yIDIuNC00IDQuNi04LjEgNi44LTEyLjIgLjEtLjIgLjItLjMgLjMtLjUgLjYtMS4xIDEuMS0yLjIgMS43LTMuMyAuMi0uNiAuNS0xLjEgLjgtMS43IC41LTEgMS0yLjEgMS41LTMuMSAuMy0uNyAuNi0xLjMgLjktMiAuNS0xIDEtMiAxLjQtM2wuOS0yLjFjLjUtMSAuOS0yIDEuMy0zIC4zLS43IC42LTEuNSAuOS0yLjJsMS4yLTNjLjMtLjggLjYtMS41IC45LTIuMyAuNC0xIC43LTIgMS4xLTNzLjctMS45IDEtMi44Yy42LTEuNiAxLjItMy4zIDEuNy00LjkgLjMtMSAuNi0xLjkgLjktMi44cy41LTEuOCAuOC0yLjdjLjItLjkgLjUtMS45IC44LTIuOHMuNi0xLjggLjgtMi43Yy4zLTEgLjUtMS45IC44LTIuOSAuMi0uOSAuNS0xLjggLjctMi43IC4yLTEgLjUtMiAuNy0zIC4yLS45IC40LTEuNyAuNi0yLjYgLjItMSAuNS0yLjEgLjctMy4yIC4yLS44IC4zLTEuNiAuNS0yLjQgLjMtMS4zIC42LTIuNyAuOC00IC4xLS42IC4yLTEuMSAuMy0xLjdsLjktNS43Yy4xLS42IC4yLTEuMyAuMy0xLjkgLjEtMS4zIC4zLTIuNiAuNS0zLjkgLjEtLjggLjItMS41IC4zLTIuMyAuMS0xLjIgLjMtMi40IC40LTMuNiAwLS44IC4xLTEuNiAuMi0yLjQgLjEtMS4xIC4yLTIuMyAuMy0zLjUgLjEtLjggLjEtMS42IC4yLTIuNCAuMSAxLjcgLjEgLjUgLjItLjcgMC0uOCAuMS0xLjUgLjEtMi4zIC4xLTEuMyAuMi0yLjcgLjItNCAuMS0uNyAuMS0xLjMgLjEtMiAuMS0yIC4xLTQgLjEtNiAwLTUzLjUtMTYuOS0xMDMtNDUuOC0xNDMuN3pNNDQ4IDM3MS41Yy05LjQgMTUuNS0yMC42IDI5LjktMzMuNiA0Mi45LTIwLjYgMjAuNi00NC41IDM2LjctNzEuMiA0OC0xMy45IDUuOC0yOC4yIDEwLjMtNDIuOSAxMy4ybDAtNzUuOGMwLTU4LjYtODguNi01OC42LTg4LjYgMGwwIDc1LjhjLTE0LjctMi45LTI5LTcuMy00Mi45LTEzLjItMjYuNy0xMS4zLTUwLjYtMjcuNC03MS4yLTQ4LTEzLTEzLTI0LjItMjcuNC0zMy42LTQyLjlsMC03MS4zYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOCAyOS42IDAgMC0xNDRjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjEgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC00LjggNi41LTMuNyA5LjUtMy43bDAtOTAuMmMtNC40LTItNy40LTYuNy03LjQtMTEuNSAwLTE2LjggMjUuNC0xNi44IDI1LjQgMCAwIDQuOC0zIDkuNC03LjQgMTEuNWwwIDMuOWM2LjMtMS40IDEyLjctMi4zIDE5LjItMi4zIDkuNCAwIDE4LjQgMy41IDI2LjMgMy41IDcuMiAwIDE1LjItMy41IDE5LjQtMy41IDIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDQ4LjRjMCA1LjYtMTguNyA2LjUtMjIuNCA2LjUtOC42IDAtMTYuNi0zLjUtMjUuNC0zLjUtNyAwLTE0LjEgMS4yLTIwLjggMi44bDAgMzAuN2MzIDAgOS41LTEuMSA5LjUgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMTQ0IDI5LjUgMCAwLTI1LjhjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA3MS4zeiJdCiAgICB9OwogICAgZmFCdXJvbW9iZWxleHBlcnRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1cm9tb2JlbGV4cGVydGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3ZiIsICJNMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTE2MCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTMyMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMTkybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek00NDAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnpNMCAzNTJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il0KICAgIH07CiAgICBmYUJpbGliaWxpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpbGliaWxpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzZDkiLCAiTTQ4OC42IDEwNC4xYzE2LjcgMTguMSAyNC40IDM5LjcgMjMuMyA2NS43bDAgMjAyLjRjLS40IDI2LjQtOS4yIDQ4LjEtMjYuNSA2NS4xLTE3LjIgMTctMzkuMSAyNS45LTY1LjUgMjYuN0w5MiA0NjRjLTI2LjQtLjgtNDguMi05LjgtNjUuMy0yNy4yLTE3LjEtMTcuNC0yNi00MC4zLTI2LjctNjguNkwwIDE2OS44Yy44LTI2IDkuNy00Ny42IDI2LjctNjUuNyAxNy4xLTE2LjMgMzguOC0yNS4zIDY1LjMtMjYuMWwyOS40IDAtMjUuNC0yNS44Yy01LjctNS43LTguNi0xMy04LjYtMjEuOHMyLjktMTYuMSA4LjYtMjEuOCAxMy04LjYgMjEuOS04LjYgMTYuMSAyLjkgMjEuOSA4LjZsNzMuMyA2OS40IDg4IDAgNzQuNS02OS40QzM4MS43IDIuOSAzODkuMiAwIDM5OCAwczE2LjEgMi45IDIxLjkgOC42YzUuNyA1LjcgOC42IDEzIDguNiAyMS44cy0yLjkgMTYuMS04LjYgMjEuOEwzOTQuNiA3OCA0MjMuOSA3OGMyNi40IC44IDQ4IDkuOCA2NC43IDI2LjF6bS0zOC44IDY5LjdjLS40LTkuNi0zLjctMTcuNC0xMC43LTIzLjUtNS4yLTYuMS0xNC05LjQtMjIuNy05LjhsLTMyMC40IDBjLTkuNiAuNC0xNy40IDMuNy0yMy42IDkuOC02LjEgNi4xLTkuNCAxMy45LTkuOCAyMy41bDAgMTk0LjRjMCA5LjIgMy4zIDE3IDkuOCAyMy41czE0LjQgOS44IDIzLjYgOS44bDMyMC40IDBjOS4yIDAgMTctMy4zIDIzLjMtOS44czkuNy0xNC4zIDEwLjEtMjMuNWwwLTE5NC40ek0xODUuNSAyMTYuNWM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMi02LjIgNi4zLTE0IDkuNS0yMy42IDkuNXMtMTcuNS0zLjItMjMuNi05LjUtOS40LTE0LTkuOC0yMy4ybDAtMzMuM2MuNC05LjEgMy44LTE2LjkgMTAuMS0yMy4yczEzLjItOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEwem0xOTEuNSAwYzYuMyA2LjMgOS43IDE0LjEgMTAuMSAyMy4ybDAgMzMuM2MtLjQgOS4yLTMuNyAxNi45LTkuOCAyMy4ycy0xNCA5LjUtMjMuNiA5LjUtMTcuNC0zLjItMjMuNi05LjVjLTctNi4zLTkuNC0xNC05LjctMjMuMmwwLTMzLjNjLjMtOS4xIDMuNy0xNi45IDEwLTIzLjJzMTQuMS05LjYgMjMuMy0xMGM5LjIgLjQgMTcgMy43IDIzLjMgMTB6Il0KICAgIH07CiAgICBmYU5lb3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmVvcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNjEyIiwgIk0zODMuOCA1MTJsLTk1LjEgMC0xMDguMi0xNTQuNSAwIDkxLjEtODYuNCA2My40LTk3LjcgMCAwLTQ4Mi4yIDQwLjUtMjkuOCAxMDggMCAxMjMuNyAxNzYuMSAwLTExMi43IDg2LjQtNjMuNCA5Ny43IDAgMCA0NjEuNS02OC45IDUwLjV6TTcuMiAzNS4zbDAgNDYwLjcgNzItNTIuOSAwLTI0OS4xIDIxNS41IDMwNy42IDg0LjggMCA1Mi40LTM4LjItNzguMyAwLTMxNi4xLTQ1MC41LTMwLjIgMjIuM3pNODkuNyA1MDEuOWw4MC01OC44IDAtMTAxLTc5LjgtMTE0LjQgMCAyMjAuOS03Mi42IDUzLjMgNzIuMyAwIDAgMHpNNDkgMTAuOGwzMTAuNiA0NDIuNiA4Mi40IDAgMC00NDIuNi03OS44IDAgMCAzMTcuNi0yMjIuOS0zMTcuNi05MC4zIDB6TTI3OS40IDE5MS42bDcyIDEwMi44IDAtMjc4LjUtNzIgNTMgMCAxMjIuN3oiXQogICAgfTsKICAgIGZhRGV2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRldiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNmNjIiwgIk0xMjAuMSAyMDguM2MtMy45LTIuOS03LjgtNC4zLTExLjYtNC4zbC0xNy40IDAgMCAxMDQuNSAxNy40IDBjMy45IDAgNy44LTEuNCAxMS42LTQuM3M1LjgtNy4zIDUuOC0xMy4xbDAtNjkuN2MwLTUuOC0yLTEwLjItNS44LTEzLjF6TTQwNC4xIDMyTDQzLjkgMzJDMTkuNyAzMiAuMSA1MS42IDAgNzUuOEwwIDQzNi4yQy4xIDQ2MC40IDE5LjcgNDgwIDQzLjkgNDgwbDM2MC4yIDBjMjQuMiAwIDQzLjgtMTkuNiA0My45LTQzLjhsMC0zNjAuNEM0NDcuOSA1MS42IDQyOC4zIDMyIDQwNC4xIDMyek0xNTQuMiAyOTEuMmMwIDE4LjgtMTEuNiA0Ny4zLTQ4LjQgNDcuM2wtNDYuNCAwIDAtMTY1LjUgNDcuNCAwYzM1LjQgMCA0Ny40IDI4LjUgNDcuNCA0Ny4zbDAgNzAuOXptMTAwLjctODguN2wtNTMuMyAwIDAgMzguNCAzMi42IDAgMCAyOS42LTMyLjYgMCAwIDM4LjQgNTMuMyAwIDAgMjkuNi02Mi4yIDBjLTExLjIgLjMtMjAuNC04LjUtMjAuNy0xOS43bDAtMTI1LjFjLS4zLTExLjEgOC42LTIwLjQgMTkuNy0yMC43bDYzLjIgMCAwIDI5LjV6TTM1OC41IDMxNy44Yy0xMy4yIDMwLjctMzYuOCAyNC42LTQ3LjQgMGwtMzguNS0xNDQuOCAzMi42IDAgMjkuNyAxMTMuNyAyOS42LTExMy43IDMyLjYgMC0zOC41IDE0NC44eiJdCiAgICB9OwogICAgZmFIb3RqYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaG90amFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYjEiLCAiTTM2MS44IDBjMCAxMzEuNi04MC43IDE3Ni44LTE0MC4yIDIwOS40LS42IC4zLTEuMSAuNi0xLjYgLjktNTMuOCAzMC4yLTg4LjcgNDkuOC04OS42IDEyMmwtOTguMSAwYzAtMTMxLjUgODAuNy0xNzYuNyAxNDAuMi0yMDkuMyA1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OSAwek0zMDEuMyAzMDIuNmM1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OCAwYzAgMTMxLjYtODAuNyAxNzYuNy0xNDAuMiAyMDkuNC01NC44IDI5LjgtOTAuMyA1MC05MC4zIDEyM2wtOTggMGMwLTEzMS42IDgwLjctMTc2LjggMTQwLjItMjA5LjR6Il0KICAgIH07CiAgICBmYURvY2h1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkb2NodWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5NCIsICJNNDEzLjkgMTYwTDI3MiAxNjAgMjcyIDE5LjYgNDEzLjkgMTYwek0zMjAgMTkybDAgMTMwYzAgNjYuOC0zNi41IDEwMC4xLTExMy4zIDEwMC4xbC05NC43IDAgMC0zMzcuMyA5NC43IDBjMTIgMCAyMy4xIC44IDMzLjEgMi41bDAtODRDMjI4LjkgMS4xIDIxNy40IDAgMjA1LjIgMEwxNiAwIDE2IDUxMiAyMDUuMiA1MTJDMzQ1LjcgNTEyIDQxNiA0NDcuNCA0MTYgMzE4LjFsMC0xMjYuMS05NiAweiJdCiAgICB9OwogICAgZmFWaW1lbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW1lbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDBhIiwgIk00MDMuMiAzMkw0NC44IDMyQzIwLjEgMzIgMCA1Mi4xIDAgNzYuOEwwIDQzNS4yQzAgNDU5LjkgMjAuMSA0ODAgNDQuOCA0ODBsMzU4LjQgMGMyNC43IDAgNDQuOC0yMC4xIDQ0LjgtNDQuOGwwLTM1OC40QzQ0OCA1Mi4xIDQyNy45IDMyIDQwMy4yIDMyek0zNzcgMTgwLjhjLTEuNCAzMS41LTIzLjQgNzQuNy02NiAxMjkuNC00NCA1Ny4yLTgxLjMgODUuOC0xMTEuNyA4NS44LTE4LjkgMC0zNC44LTE3LjQtNDcuOS01Mi4zLTI1LjUtOTMuMy0zNi40LTE0OC01Ny40LTE0OC0yLjQgMC0xMC45IDUuMS0yNS40IDE1LjJMNTMuNCAxOTEuM2MzNy4zLTMyLjggNzIuOS02OS4yIDk1LjItNzEuMiAyNS4yLTIuNCA0MC43IDE0LjggNDYuNSA1MS43IDIwLjcgMTMxLjIgMjkuOSAxNTEgNjcuNiA5MS42IDEzLjUtMjEuNCAyMC44LTM3LjcgMjEuOC00OC45IDMuNS0zMy4yLTI1LjktMzAuOS00NS44LTIyLjQgMTUuOS01Mi4xIDQ2LjMtNzcuNCA5MS4yLTc2IDMzLjMgLjkgNDkgMjIuNSA0Ny4xIDY0Ljd6Il0KICAgIH07CiAgICBmYU1heGNkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXhjZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNiIsICJNNDYxLjEgNDQyLjdsLTk3LjQgMCA1MS45LTI0Mi43YzIuMy0xMC4yIC45LTE5LjUtNC40LTI1LjctNS02LjEtMTMuNy05LjYtMjQuMi05LjZsLTQ5LjMgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtODMuNCAwLTU5LjUgMjc4LTk3LjQgMCA1OS41LTI3OC00NC42LTk1LjQgMzcyLjEgMGMzOS40IDAgNzUuMyAxNi4zIDk4LjMgNDQuOSAyMy4zIDI4LjYgMzEuOCA2Ny40IDIzLjYgMTA1LjlMNDYxLjEgNDQyLjd6Il0KICAgIH07CiAgICBmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mb250LWF3ZXNvbWUtc3Ryb2tlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZvbnQtYXdlc29tZS1hbHQiXSwgImYzNWMiLCAiTTY0IDY0QzQ2LjMgNjQgMzIgNzguMyAzMiA5NmwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCA2NHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE1NCA1OGMwIDkuMy00LjggMTcuNC0xMi4xIDIybDE4OC45IDBjNy4zIDAgMTMuMiA1LjkgMTMuMiAxMy4yIDAgMS44LS40IDMuNy0xLjEgNS40TDMxMiAyNjQgMzQyLjkgMzMzLjRjLjggMS43IDEuMSAzLjUgMS4xIDUuNCAwIDcuMy01LjkgMTMuMi0xMy4yIDEzLjJsLTE4Ni44IDAgMCAzMi0zMiAwIDAtMjA5LjVjLTYuMS00LjgtMTAtMTIuMi0xMC0yMC41IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lQWx0ID0gZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZTsKICAgIGZhU3BlYWthcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGVha2FwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjMiLCAiTTY0LjQgMzkxLjhDLTE1IDMwMy42LTcuNiAxNjcuNCA4MS4xIDg3LjZzMjI0LjgtNzMgMzA0LjIgMTUuMiA3MiAyMjQuNC0xNi42IDMwNC4xYy0xOC43IDE2LjkgNjQgNDMuMSA0MiA1Mi4zLTgyLjEgMzQuMi0yNTMuOSAzNS0zNDYuMi02Ny41bDAgMHpNMjc3LjcgMTgwLjJsMzguNS00MC45Yy05LjYtOC45LTMyLTI2LjgtNzYuMi0yNy42LTUyLjMtLjktOTUuOSAyOC4zLTk2LjggODAtLjIgMTEuMyAuMyAzNi43IDI5LjQgNTQuOCAzNC41IDIxLjQgODYuNSAyMS41IDg2IDUyLjMtLjQgMjEuMy0yNi40IDI1LjgtMzguNiAyNS42LTMgMC0zMC4yLS41LTQ3LjYtMjQuNmwtNDAgNDIuNmMyOC4yIDI3IDU5IDMyLjYgODMuNSAzMyAxMC4yIC4yIDk2LjQgLjMgOTcuOC04MSAuMy0xNS44LTIuMS0zOS43LTI4LjktNTYuNi0zNC40LTIxLjYtODUtMTkuNC04NC40LTQ5LjcgLjQtMjMuMyAzMS0yNS40IDM3LjUtMjUuMyAuNCAwIDI2LjYgLjMgMzkuNiAxNy40bDAgMHoiXQogICAgfTsKICAgIGZhRmFudGFzeUZsaWdodEdhbWVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhbnRhc3ktZmxpZ2h0LWdhbWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZGMiLCAiTTI1NiAzMi45TDMyLjkgMjU2IDI1NiA0NzkuMSA0NzkuMSAyNTYgMjU2IDMyLjl6TTg4LjMgMjU1LjhjMi0yIDExLjktMTIuMyA5Ni41LTk3LjUgNDEuNC00MS44IDg2LjItNDMuOCAxMTkuOC0xOC43IDI0LjYgMTguNCA2Mi4xIDU4LjkgNjIuMSA1OSAuNyAuNyAxLjEgMi45IC42IDMuNC0xMS4zIDExLjgtMjIuNyAyMy41LTMzLjUgMzQuNy0zNC4yLTMyLjMtNDAuNS0zOC4yLTQ4LjUtNDQtMTcuOC0xMi43LTQxLjQtMTAuMS01NyA1LjEtMi4yIDIuMS0xLjggMy40IC4xIDUuNCAyLjkgMi45IDI4LjEgMjguMyAzNS4xIDM1LjgtMTEuOSAxMS42LTIzLjcgMjMtMzUuNyAzNC43LTEyLTEyLjUtMjQuNS0yNS41LTM2LjUtMzguMS0yMS40IDIxLjEtNDEuNyA0MS4xLTYxLjggNjFMODguMyAyNTUuOHpNMzIzLjIgMzU3LjRjLTM1LjUgMzUuNC03OC4xIDM4LjEtMTA3IDIwLjUtMjIuMS0xMy41LTM5LjQtMzIuMS03Mi45LTY2LjggMTItMTIuNCAyMy44LTI0LjQgMzUuNC0zNi4zIDMzIDMxLjkgMzcuMSAzNiA0NC43IDQyLjEgMTguNSAxNC43IDQyLjUgMTMuNyA1OS4zLTEuOCAzLjctMy40IDMuNy0zLjYgLjEtNy4yLTEwLjYtMTAuNy0yMS4yLTIxLjQtMzEuOC0zMi4yLTEuMy0xLjMtMy0yLjUtLjgtNC43IDEwLjgtMTAuNyAyMS41LTIxLjUgMzIuMi0zMi4zIC4zLS4zIC42LS40IDEuOS0xLjEgMTIuNCAxMi45IDI0LjkgMjUuOSAzNy4yIDM4LjggMjEtMjAuNyA0MS4yLTQwLjcgNjEuMy02MC40IDEzLjcgMTMuNCAyNy4xIDI2LjYgNDAuOSA0MC0yMC4yIDIwLjktODEuNyA4Mi43LTEwMC41IDEwMS41ek0yNTYgMEwwIDI1NiAyNTYgNTEyIDUxMiAyNTYgMjU2IDB6TTE2IDI1NkwyNTYgMTYgNDk2IDI1NiAyNTYgNDk2IDE2IDI1NnoiXQogICAgfTsKICAgIGZhTGludXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGludXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YyIsICJNMjIwLjkgMTIzLjNjMSAuNSAxLjggMS43IDMgMS43IDEuMSAwIDIuOC0uNCAyLjktMS41IC4yLTEuNC0xLjktMi4zLTMuMi0yLjktMS43LS43LTMuOS0xLTUuNS0uMS0uNCAuMi0uOCAuNy0uNiAxLjEgLjMgMS4zIDIuMyAxLjEgMy40IDEuN3pNMTk5IDEyNWMxLjIgMCAyLTEuMiAzLTEuNyAxLjEtLjYgMy4xLS40IDMuNS0xLjYgLjItLjQtLjItLjktLjYtMS4xLTEuNi0uOS0zLjgtLjYtNS41IC4xLTEuMyAuNi0zLjQgMS41LTMuMiAyLjkgLjEgMSAxLjggMS41IDIuOCAxLjR6TTQyMCA0MDMuOGMtMy42LTQtNS4zLTExLjYtNy4yLTE5LjctMS44LTguMS0zLjktMTYuOC0xMC41LTIyLjQtMS4zLTEuMS0yLjYtMi4xLTQtMi45LTEuMy0uOC0yLjctMS41LTQuMS0yIDkuMi0yNy4zIDUuNi01NC41LTMuNy03OS4xLTExLjQtMzAuMS0zMS4zLTU2LjQtNDYuNS03NC40LTE3LjEtMjEuNS0zMy43LTQxLjktMzMuNC03MiAuNS00NS45IDUuMS0xMzEuMi03NS44LTEzMS4zLTEwMi40LS4yLTc2LjggMTAzLjQtNzcuOSAxMzUuMi0xLjcgMjMuNC02LjQgNDEuOC0yMi41IDY0LjctMTguOSAyMi41LTQ1LjUgNTguOC01OC4xIDk2LjctNiAxNy45LTguOCAzNi4xLTYuMiA1My4zLTYuNSA1LjgtMTEuNCAxNC43LTE2LjYgMjAuMi00LjIgNC4zLTEwLjMgNS45LTE3IDguM3MtMTQgNi0xOC41IDE0LjVjLTIuMSAzLjktMi44IDguMS0yLjggMTIuNCAwIDMuOSAuNiA3LjkgMS4yIDExLjggMS4yIDguMSAyLjUgMTUuNyAuOCAyMC44LTUuMiAxNC40LTUuOSAyNC40LTIuMiAzMS43IDMuOCA3LjMgMTEuNCAxMC41IDIwLjEgMTIuMyAxNy4zIDMuNiA0MC44IDIuNyA1OS4zIDEyLjUgMTkuOCAxMC40IDM5LjkgMTQuMSA1NS45IDEwLjQgMTEuNi0yLjYgMjEuMS05LjYgMjUuOS0yMC4yIDEyLjUtLjEgMjYuMy01LjQgNDguMy02LjYgMTQuOS0xLjIgMzMuNiA1LjMgNTUuMSA0LjEgLjYgMi4zIDEuNCA0LjYgMi41IDYuN2wwIC4xYzguMyAxNi43IDIzLjggMjQuMyA0MC4zIDIzIDE2LjYtMS4zIDM0LjEtMTEgNDguMy0yNy45IDEzLjYtMTYuNCAzNi0yMy4yIDUwLjktMzIuMiA3LjQtNC41IDEzLjQtMTAuMSAxMy45LTE4LjMgLjQtOC4yLTQuNC0xNy4zLTE1LjUtMjkuN3pNMjIzLjggODcuM2M5LjgtMjIuMiAzNC4yLTIxLjggNDQtLjQgNi41IDE0LjIgMy42IDMwLjktNC4zIDQwLjQtMS42LS44LTUuOS0yLjYtMTIuNi00LjkgMS4xLTEuMiAzLjEtMi43IDMuOS00LjYgNC44LTExLjgtLjItMjctOS4xLTI3LjMtNy4zLS41LTEzLjkgMTAuOC0xMS44IDIzLTQuMS0yLTkuNC0zLjUtMTMtNC40LTEtNi45LS4zLTE0LjYgMi45LTIxLjh6TTE4My4xIDc1LjhjMTAuMSAwIDIwLjggMTQuMiAxOS4xIDMzLjUtMy41IDEtNy4xIDIuNS0xMC4yIDQuNiAxLjItOC45LTMuMy0yMC4xLTkuNi0xOS42LTguNCAuNy05LjggMjEuMi0xLjggMjguMSAxIC44IDEuOS0uMi01LjkgNS41LTE1LjYtMTQuNi0xMC41LTUyLjEgOC40LTUyLjF6bS0xMy42IDYwLjdjNi4yLTQuNiAxMy42LTEwIDE0LjEtMTAuNSA0LjctNC40IDEzLjUtMTQuMiAyNy45LTE0LjIgNy4xIDAgMTUuNiAyLjMgMjUuOSA4LjkgNi4zIDQuMSAxMS4zIDQuNCAyMi42IDkuMyA4LjQgMy41IDEzLjcgOS43IDEwLjUgMTguMi0yLjYgNy4xLTExIDE0LjQtMjIuNyAxOC4xLTExLjEgMy42LTE5LjggMTYtMzguMiAxNC45LTMuOS0uMi03LTEtOS42LTIuMS04LTMuNS0xMi4yLTEwLjQtMjAtMTUtOC42LTQuOC0xMy4yLTEwLjQtMTQuNy0xNS4zLTEuNC00LjkgMC05IDQuMi0xMi4zem0zLjMgMzM0Yy0yLjcgMzUuMS00My45IDM0LjQtNzUuMyAxOC0yOS45LTE1LjgtNjguNi02LjUtNzYuNS0yMS45LTIuNC00LjctMi40LTEyLjcgMi42LTI2LjRsMC0uMmMyLjQtNy42IC42LTE2LS42LTIzLjktMS4yLTcuOC0xLjgtMTUgLjktMjAgMy41LTYuNyA4LjUtOS4xIDE0LjgtMTEuMyAxMC4zLTMuNyAxMS44LTMuNCAxOS42LTkuOSA1LjUtNS43IDkuNS0xMi45IDE0LjMtMTggNS4xLTUuNSAxMC04LjEgMTcuNy02LjkgOC4xIDEuMiAxNS4xIDYuOCAyMS45IDE2bDE5LjYgMzUuNmM5LjUgMTkuOSA0My4xIDQ4LjQgNDEgNjguOXptLTEuNC0yNS45Yy00LjEtNi42LTkuNi0xMy42LTE0LjQtMTkuNiA3LjEgMCAxNC4yLTIuMiAxNi43LTguOSAyLjMtNi4yIDAtMTQuOS03LjQtMjQuOS0xMy41LTE4LjItMzguMy0zMi41LTM4LjMtMzIuNS0xMy41LTguNC0yMS4xLTE4LjctMjQuNi0yOS45cy0zLTIzLjMtLjMtMzUuMmM1LjItMjIuOSAxOC42LTQ1LjIgMjcuMi01OS4yIDIuMy0xLjcgLjggMy4yLTguNyAyMC44LTguNSAxNi4xLTI0LjQgNTMuMy0yLjYgODIuNCAuNi0yMC43IDUuNS00MS44IDEzLjgtNjEuNSAxMi0yNy40IDM3LjMtNzQuOSAzOS4zLTExMi43IDEuMSAuOCA0LjYgMy4yIDYuMiA0LjEgNC42IDIuNyA4LjEgNi43IDEyLjYgMTAuMyAxMi40IDEwIDI4LjUgOS4yIDQyLjQgMS4yIDYuMi0zLjUgMTEuMi03LjUgMTUuOS05IDkuOS0zLjEgMTcuOC04LjYgMjIuMy0xNSA3LjcgMzAuNCAyNS43IDc0LjMgMzcuMiA5NS43IDYuMSAxMS40IDE4LjMgMzUuNSAyMy42IDY0LjYgMy4zLS4xIDcgLjQgMTAuOSAxLjQgMTMuOC0zNS43LTExLjctNzQuMi0yMy4zLTg0LjktNC43LTQuNi00LjktNi42LTIuNi02LjUgMTIuNiAxMS4yIDI5LjIgMzMuNyAzNS4yIDU5IDIuOCAxMS42IDMuMyAyMy43IC40IDM1LjcgMTYuNCA2LjggMzUuOSAxNy45IDMwLjcgMzQuOC0yLjItLjEtMy4yIDAtNC4yIDAgMy4yLTEwLjEtMy45LTE3LjYtMjIuOC0yNi4xLTE5LjYtOC42LTM2LTguNi0zOC4zIDEyLjUtMTIuMSA0LjItMTguMyAxNC43LTIxLjQgMjcuMy0yLjggMTEuMi0zLjYgMjQuNy00LjQgMzkuOS0uNSA3LjctMy42IDE4LTYuOCAyOS0zMi4xIDIyLjktNzYuNyAzMi45LTExNC4zIDcuMnptMjU3LjQtMTEuNWMtLjkgMTYuOC00MS4yIDE5LjktNjMuMiA0Ni41LTEzLjIgMTUuNy0yOS40IDI0LjQtNDMuNiAyNS41cy0yNi41LTQuOC0zMy43LTE5LjNjLTQuNy0xMS4xLTIuNC0yMy4xIDEuMS0zNi4zIDMuNy0xNC4yIDkuMi0yOC44IDkuOS00MC42IC44LTE1LjIgMS43LTI4LjUgNC4yLTM4LjcgMi42LTEwLjMgNi42LTE3LjIgMTMuNy0yMS4xIC4zLS4yIC43LS4zIDEtLjUgLjggMTMuMiA3LjMgMjYuNiAxOC44IDI5LjUgMTIuNiAzLjMgMzAuNy03LjUgMzguNC0xNi4zIDktLjMgMTUuNy0uOSAyMi42IDUuMSA5LjkgOC41IDcuMSAzMC4zIDE3LjEgNDEuNiAxMC42IDExLjYgMTQgMTkuNSAxMy43IDI0LjZ6TTE3My40IDE0OC43YzIgMS45IDQuNyA0LjUgOCA3LjEgNi42IDUuMiAxNS44IDEwLjYgMjcuMyAxMC42IDExLjYgMCAyMi41LTUuOSAzMS44LTEwLjggNC45LTIuNiAxMC45LTcgMTQuOC0xMC40czUuOS02LjMgMy4xLTYuNi0yLjYgMi42LTYgNS4xYy00LjQgMy4yLTkuNyA3LjQtMTMuOSA5LjgtNy40IDQuMi0xOS41IDEwLjItMjkuOSAxMC4ycy0xOC43LTQuOC0yNC45LTkuN2MtMy4xLTIuNS01LjctNS03LjctNi45LTEuNS0xLjQtMS45LTQuNi00LjMtNC45LTEuNC0uMS0xLjggMy43IDEuNyA2LjV6Il0KICAgIH07CiAgICBmYUNvdHRvbkJ1cmVhdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb3R0b24tYnVyZWF1IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4OWUiLCAiTTQ3NC4zIDMzMC40QzQ1MC42IDQyMi4zIDM4MC4xIDQ3NSAyNzIuNCA0NzguOGwwLTQ5LjJjMC00OCAyNi40LTc0LjQgNzQuNC03NC40IDYyIDAgOTkuMi0zNy4yIDk5LjItOTkuMiAwLTYxLjQtMzYuNS05OC4zLTk3LjQtOTkuMS0zMy02OS4zLTE0Ni41LTY0LjctMTc3LjIgMC02MC45IC44LTk3LjQgMzcuNy05Ny40IDk5LjEgMCA2Mi4xIDM3LjMgOTkuNCA5OS40IDk5LjQgNDggMCA3NC42IDI2LjIgNzQuNiA3NC40bDAgNDkuMmMtMTM0LjQtNS0yMTEuMS04NS4xLTIxMS4xLTIyMyAwLTE0MS44IDgxLjQtMjIzLjIgMjIzLjItMjIzLjIgMTE0LjggMCAxODkuOCA1My4yIDIxNC43IDE0OC44bDI1LjMgMEM0NzMuOSA3MS41IDM4OC4yIDggMjU5LjggOCAxMDUgOCAxMiAxMDEuMiAxMiAyNTUuOCAxMiA0MTEuMSAxMDUuMiA1MDQuMyAyNTkuOCA1MDQgMzg4LjEgNTA0IDQ3My43IDQ0MC4yIDQ5OS41IDMzMC40bC0yNS4yIDB6TTM1NyAxODIuM2M0MS40IDMuNCA2NC4yIDI5IDY0LjIgNzMuNyAwIDQ4LTI2LjQgNzQuNC03NC40IDc0LjQtMjguNiAwLTQ5LjMtOS42LTYxLjYtMjcuMyA4My4xLTE2LjUgNzUuNi05OS43IDcxLjgtMTIwLjd6bS04MS43IDk3LjRjLTIuNS0xMC4zLTE2LjMtODcgNTYuMi05NyAyLjMgMTAuMSAxNi41IDg3LjEtNTYuMyA5N2wwIDB6TTI2MCAxMzJjMjguNiAwIDQ5IDkuNyA2MS40IDI3LjYtMjguNCA1LjUtNDkuNCAyMC42LTYxLjYgNDMuNC0xMi4yLTIyLjktMzMuMi0zOC02MS42LTQzLjQgMTIuNC0xNy43IDMzLjMtMjcuNCA2MS42LTI3LjRsLjItLjN6bS03MS41IDUwLjdjNzMuMiAxMC42IDU4LjkgODYuOCA1Ni41IDk3LTcyLjQtOS44LTU5LTg3LTU2LjItOTdsLS4yIDB6TTE3My4yIDMzMC40Yy00OCAwLTc0LjQtMjYuNC03NC40LTc0LjQgMC00NC40IDIyLjktNzAgNjQuMi03My43LTYuOCAzNy4yLTEuNCAxMDYuNSA3MS42IDEyMC43LTEyLjEgMTcuNi0zMi44IDI3LjMtNjEuMSAyNy4zbC0uMyAwem01My4yIDEyLjRjMTQuMy03LjYgMjYtMTkuMyAzMy42LTMzLjUgNy44IDE0LjUgMTkuMyAyNS41IDMzLjggMzMuNS0xNC40IDcuNi0yNi4xIDE5LjQtMzMuNiAzMy44LTgtMTQuNS0xOS4xLTI2LjItMzMuNi0zMy44bC0uMyAweiJdCiAgICB9OwogICAgZmFHb29nbGVXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXdhbGxldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWVlIiwgIk0xNTYuOCAxMjYuOGMzNy42IDYwLjYgNjQuMiAxMTMuMSA4NC4zIDE2Mi41LTguMyAzMy44LTE4LjggNjYuNS0zMS4zIDk4LjMtMTMuMi01Mi4zLTI2LjUtMTAxLjMtNTYtMTQ4LjUgNi41LTM2LjQgMi4zLTczLjYgMy0xMTIuM3pNMTA5LjMgMjAwbC05My4yIDBjLTYuNSAwLTEwLjUgNy41LTYuNSAxMi43IDQyLjIgNTQuMyA3MS43IDExNy44IDkxLjcgMTg3LjNsMTAzLjUgMGMtMTYuMi02OS43LTM4LjctMTMzLjctODIuNS0xOTMuNS0zLTQtOC02LjUtMTMtNi41em00Ny44LTg4YzY4LjUgMTA4IDEzMCAyMzQuNSAxMzguMiAzNjhMNDA5IDQ4MGMtMTItMTM4LTY4LjQtMjY1LTE0My4yLTM2OGwtMTA4LjcgMHpNNDA4LjkgNDMuNWMtMS44LTYuOC04LjItMTEuNS0xNS4yLTExLjVsLTg4LjMgMGMtNS4zIDAtOSA1LTcuOCAxMC4zIDEzLjIgNDYuNSAyMi4zIDk1LjUgMjYuNSAxNDYgNDguMiA4Ni4yIDc5LjcgMTc4LjMgOTAuNiAyNzAuOCAxNS44LTYwLjUgMjUuMy0xMzMuNSAyNS4zLTIwMyAwLTczLjYtMTIuMS0xNDUuMS0zMS4xLTIxMi42eiJdCiAgICB9OwogICAgZmFGb3Vyc3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvdXJzcXVhcmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE4MCIsICJNMzMxLjEgM0w1Ny45IDNDMjAuNCAzIDggMzEuMyA4IDQ5LjFMOCA0ODIuOWMwIDIwLjMgMTIuMSAyNy43IDE4LjIgMzAuMSA2LjIgMi41IDIyLjggNC42IDMyLjktNy4xIDEyOC45LTE0OS40IDEzMS4xLTE1MS45IDEzMS4xLTE1MS45IDMuMS0zLjQgMy40LTMuMSA2LjgtMy4xbDgzLjQgMGMzNS4xIDAgNDAuNi0yNS4yIDQ0LjMtMzkuN2w0OC42LTI0M0MzODEuOCAyNS44IDM3MS4xIDMgMzMxLjEgM3pNMzE0LjggNzYuOGwtMTEuNCA1OS43Yy0xLjIgNi41LTkuNSAxMy4yLTE2LjkgMTMuMmwtMTA2LjQgMGMtMTIgMC0yMC42IDguMy0yMC42IDIwLjNsMCAxM2MwIDEyIDguNiAyMC42IDIwLjYgMjAuNmw5MC40IDBjOC4zIDAgMTYuNiA5LjIgMTQuOCAxOC4yLTEuOCA4LjktMTAuNSA1My44LTExLjQgNTguOC0uOSA0LjktNi44IDEzLjUtMTYuOSAxMy41bC03My41IDBjLTEzLjUgMC0xNy4yIDEuOC0yNi41IDEyLjYgMCAwLTguOSAxMS40LTg5LjUgMTA4LjMtLjkgLjktMS44IC42LTEuOC0uM2wwLTMzOC44YzAtNy43IDYuOC0xNi42IDE2LjYtMTYuNmwyMTkgMGM4LjIgMCAxNS42IDcuNyAxMy41IDE3LjV6Il0KICAgIH07CiAgICBmYVNoaXJ0c2luYnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaGlydHNpbmJ1bGsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxNCIsICJNMTAwIDQxMC4zbDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0zOS40IDE3LjVsMzAuNiAxMy40IDQuNC05LjktMzAuNi0xMy40LTQuNCA5Ljl6bTE3Mi4xLTE0bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40ek0xNzkuMSA0NDVsMzAuMyAxMy43IDQuNC05LjktMzAuMy0xMy40LTQuNCA5LjZ6TTYwLjQgMzkyLjhsMzAuNiAxMy40IDQuNC05LjYtMzAuNi0xMy43LTQuNCA5Ljl6bTIxMS40IDM4LjVsNC40IDkuOSAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjR6bS0zOS4zIDE3LjVsNC40IDkuOSAzMC42LTEzLjctNC40LTkuNi0zMC42IDEzLjR6bTExOC40LTUyLjJsNC40IDkuNiAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjd6TTE3MCA0Ni42bC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bS00Ny4yIDBsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS00Ny4zIDBsLTMzLjIgMCAwIDEwLjUgMzMuMyAwLS4xLTEwLjV6bTE0MS41IDBsLTMzLjIgMCAwIDEwLjUgMzMuMiAwIDAtMTAuNXptOTQuNSAwbC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tOTQuNiAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTE0MS41IDBsLTMzLjMgMCAwIDEwLjUgMzMuMyAwIDAtMTAuNXpNNTIuOCAzNTEuMWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em03MC0yMTUuOWwtMzMuNiAwIDAgMTAuNSAzMy41IDAgLjEtMTAuNXptLTcwIDEwLjZsMjIuOCAwIDAtMTAuNS0zMy42IDAgMCAzMy41IDEwLjggMCAwLTIzek0yMjEuNyAzNzQuNGE5MS4zIDkxLjMgMCAxIDAgMC0xODIuNiA5MS4zIDkxLjMgMCAxIDAgMCAxODIuNnpNMTczLjUgMjYzLjNjMC0yNS40IDI5LjUtMzEuOCA0OS42LTMxLjggMTYuOSAwIDI5LjIgNS44IDQ0LjMgMTJsLTguOCAxNi45LS45IDBjLTYuNC05LjktMjQuOC0xMy4xLTM1LjYtMTMuMS05IDAtMjkuOCAxLjgtMjkuOCAxNC45IDAgMjEuNiA3OC41LTEwLjIgNzguNSAzNy45IDAgMjUuNC0zMS41IDMxLjItNTEgMzEuMi0xOC4xIDAtMzIuNC0yLjktNDcuMi0xMi4ybDktMTguNCAuOSAwYzYuMSAxMi4yIDIzLjYgMTQuOSAzNS45IDE0LjkgOC43IDAgMzIuNy0xLjIgMzIuNy0xNC4zIDAtMjYuMS03Ny42IDYuMy03Ny42LTM4ek01Mi44IDE3OC40bC0xMC44IDAgMCAzMy42IDEwLjggMCAwLTMzLjZ6TTM5NS4yIDM4NC42bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNNTIuOCAzMDcuOWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41ek0wIDMuN2wwIDQwNiAyMjEuNyA5OC42IDIyNi4zLTk4LjYgMC00MDYtNDQ4IDB6TTQxOC44IDM5MC44bC0xOTYuOCA4NS43LTE5Mi44LTg1LjcgMC0yNzAuMSAzODkuNyAwIDAgMjcwLjEtLjEgMHptMC0yOTkuM2wtMzg5LjYgMCAwLTU4LjYgMzg5LjcgMCAwIDU4LjYtLjEgMHpNNTIuOCAyMjEuNmwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em0wIDQzLjJsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMTcwIDEzNS4ybC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6TTM5NS4yIDI5OC4zbDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptMC00My4ybDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNMjE3IDEzNS4ybC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6TTM5NS4yIDIxMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAgMTI5LjVsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0tMTMxLTIwNi4zbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em04My43IDMzLjZsMTAuOCAwIDAtMzMuNS0zMy41IDAgMCAxMC41IDIyLjggMC0uMSAyM3ptLTM2LjQtMzMuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41eiJdCiAgICB9OwogICAgZmFNaW50Yml0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1pbnRiaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYyZiIsICJNNzMuMiA1MTJsMC03My4xIDI5Mi41IDAgMC03My4yIDczLjIgMCAwLTE0Ni4zIDczLjEgMCAwLTIxOS40LTIxOS40IDAgMCA3My4xLTE0Ni4zIDAgMCA3My4yLTczLjEgMCAwIDI5Mi42LTczLjIgMCAwIDczLjEgNzMuMiAwem03My4xLTIxOS40bDczLjIgMCAwIDczLjEtNzMuMiAwIDAtNzMuMXptNzMuMi03My4xbDczLjEgMCAwIDczLjEtNzMuMiAwIDAtNzMuMiAuMSAuMXptNzMuMSAwbDAtNzMuMiA3My4yIDAgMCA3My4xLTczLjIgMCAwIC4xek0zNjUuNyA3My4xbDczLjIgMCAwIDczLjItNzMuMiAwIDAtNzMuMnoiXQogICAgfTsKICAgIGZhWnVsaXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAienVsaXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTg1MyIsICJNNDI0IDk5YzAgMjIuNi0xMC4xIDQyLjYtMjUuNSA1NC44TDI0OS4zIDI4Ny43Yy0yLjggMi40LTYuNC0xLjUtNC40LTQuN2w1NC43LTExMC4xYzEuNS0zLjEtLjUtNi45LTMuNi02LjlMODMuOCAxNjZDNTAuOSAxNjYgMjQgMTM1LjkgMjQgOTkgMjQgNjIuMSA1MC45IDMyIDgzLjggMzJsMjgwLjQgMEMzOTcuMSAzMiA0MjQgNjIuMSA0MjQgOTl6TTgzLjggNDgwbDI4MC40IDBjMzIuOSAwIDU5LjgtMzAuMiA1OS44LTY3cy0yNi45LTY3LTU5LjgtNjdsLTIxMi4zIDBjLTMuMSAwLTUuMS0zLjgtMy42LTYuOUwyMDMuMSAyMjljMi0zLjItMS42LTcuMS00LjQtNC43TDQ5LjUgMzU4LjJDMzQuMSAzNzAuNCAyNCAzOTAuNCAyNCA0MTMgMjQgNDQ5LjggNTAuOSA0ODAgODMuOCA0ODB6Il0KICAgIH07CiAgICBmYVN0YXlsaW5rZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RheWxpbmtlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y1IiwgIk0zODYuNyAyOTIuNWwyLjcgMi43LTE3MC0xNjcuM2MtMy41LTMuNS05LjctMy43LTEzLjgtLjVMMTQ4LjMgMTcxYy00LjIgMy4yLTQuNiA4LjctMS4xIDEyLjJsNjguMSA2NC4zYzMuNiAzLjUgOS45IDMuNyAxNCAuNWwuMS0uMWM0LjEtMy4yIDEwLjQtMyAxNCAuNWw4NCA4MS4zYzMuNiAzLjUgMy4yIDktLjkgMTIuMmwtOTMuMiA3NGMtNC4yIDMuMy0xMC41IDMuMS0xNC4yLS40TDY3LjIgMjY4Yy0zLjUtMy41LTkuNy0zLjctMTMuOS0uNUw3LjUgMzAyLjRjLTQuMiAzLjItNC43IDguNy0xLjIgMTIuMkwyMTUgNTEwLjdzNy40IDYuOCAxNy4zLS44TDQzMC4zIDM0NmM0LTMuMiA0LjQtOC43IC43LTEyLjJsLTQ0LjMtNDEuM3ptNTQuNS04My40TDIzMC43IDIuNWMtMS41LTEuMi04LTUuNS0xNi4zIDEuMUw3LjYgMTY1LjdjLTQuMiAzLjItNC44IDguNy0xLjIgMTIuMmw0Mi4zIDQxLjcgMTcxLjcgMTY1LjFjMy43IDMuNSAxMC4xIDMuNyAxNC4zIC40bDUwLjItMzguOC0uMy0uMyA3LjctNmM0LjItMy4yIDQuNi04LjcgLjktMTIuMmwtNTcuMS01NC40Yy0zLjYtMy41LTEwLTMuNy0xNC4yLS41bC0uMSAuMWMtNC4yIDMuMi0xMC41IDMuMS0xNC4yLS40TDExMyAxODAuOGMtMy42LTMuNS0zLjEtOC45IDEuMS0xMi4ybDkyLjItNzEuNWM0LjEtMy4yIDEwLjMtMyAxMy45IC41bDE2MC40IDE1OWMzLjcgMy41IDEwIDMuNyAxNC4xIC41bDQ1LjgtMzUuOGM0LjEtMy4yIDQuNC04LjcgLjctMTIuMnoiXQogICAgfTsKICAgIGZhV2ViZmxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWJmbG93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NWMiLCAiTTY0MCA2NGwtMjA0LjIgMzk5LjItMTkxLjggMCA4NS41LTE2NS41LTMuOCAwQzI1NS4xIDM4OS4zIDE0OS45IDQ0OS41IDAgNDYzLjJMMCAzMDAuMXM5NS45LTUuNyAxNTIuMy02NC45bC0xNTIuMyAwIDAtMTcxLjIgMTcxLjEgMCAwIDE0MC44IDMuOCAwIDcwLTE0MC44IDEyOS40IDAgMCAxMzkuOSAzLjggMCA3Mi42LTEzOS45IDE4OS4zIDB6Il0KICAgIH07CiAgICBmYVJlbnJlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZW5yZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4YiIsICJNMjE0IDE2OS4xQzIxNCAyNzkuNSAxNTMgMzc0LjUgNjYuNCA0MTYuNSAzMCAzNzMuMiA4IDMxNy43IDggMjU2LjYgOCAxMzMuOSA5Ny4xIDMyLjIgMjE0IDEyLjVsMCAxNTYuNnpNMjU1IDUwNGMtNDIuOSAwLTgzLjMtMTEtMTE4LjUtMzAuNCA1Ny4yLTM2LjEgMTAzLjQtOTAuNyAxMTguNS0xNTQuNiAxNS41IDYzLjkgNjEuNyAxMTguNSAxMTguOCAxNTQuNy0zNS4xIDE5LjMtNzUuNSAzMC4zLTExOC44IDMwLjN6bTE5MC42LTg3LjVDMzU5IDM3NC41IDI5OCAyNzkuNiAyOTggMTY5LjFsMC0xNTYuNmMxMTYuOSAxOS43IDIwNiAxMjEuNCAyMDYgMjQ0LjEgMCA2MS4xLTIyIDExNi42LTU4LjQgMTU5Ljl6Il0KICAgIH07CiAgICBmYUtvRmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia28tZmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg1NiIsICJNMjQ5LjggNzVjODkuOCAwIDExMyAxLjEgMTQ2LjMgNC40IDc4LjEgNy44IDEyMy42IDU2IDEyMy42IDEyNS4ybDAgOC45YzAgNjQuMy00Ny4xIDExNi45LTExMC44IDEyMi40LTUgMTYuNi0xMi44IDMzLjItMjMuMyA0OS45LTI0LjQgMzcuNy03My4xIDg1LjMtMTYyLjkgODUuM2wtMTcuNyAwYy03My4xIDAtMTI5LjctMzEuNi0xNjMuNS04OS4yLTI5LjktNTAuNC0zMy44LTEwNi40LTMzLjgtMTgxLjIgMC03My43IDQ0LjQtMTEzLjYgOTYuNC0xMjAuMiAzOS4zLTUgODguMS01LjUgMTQ1LjctNS41em0wIDQxLjZjLTYwLjQgMC0xMDMuNiAuNS0xMzYuMyA1LjUtNDYgNi43LTY0LjMgMzIuNy02NC4zIDc5LjJsLjIgMjUuN2MxLjIgNTcuMyA3LjEgOTcuMSAyNy41IDEzNC41IDI2LjYgNDkuMyA3NC44IDY4LjIgMTI5LjcgNjguMmwxNy4yIDBjNzIgMCAxMDctMzQuOSAxMjYuMy02NS40IDkuNC0xNS41IDE3LjctMzIuNyAyMi4yLTU0LjNsMy4zLTEzLjggMTkuOSAwYzQ0LjMgMCA4Mi42LTM2IDgyLjYtODJsMC04LjNjMC01MS41LTMyLjItNzguNy04OC4xLTg1LjMtMzEuNi0yLjgtNTAuNC0zLjktMTQwLjItMy45ek0yNjcgMTY5LjJjMzguMiAwIDY0LjggMzEuNiA2NC44IDY3IDAgMzIuNy0xOC4zIDYxLTQyLjEgODMuMS0xNSAxNS0zOS4zIDMwLjUtNTUuOSA0MC41LTQuNCAyLjgtMTAgNC40LTE2LjcgNC40LTUuNSAwLTEwLjUtMS43LTE1LjUtNC40LTE2LjYtMTAtNDEtMjUuNS01Ni41LTQwLjUtMjEuOC0yMC44LTM5LjItNDYuOS00MS4zLTc3bC0uMi02LjFjMC0zNS41IDI1LjUtNjcgNjQuMy02NyAyMi43IDAgMzguOCAxMS42IDQ5LjMgMjcuNyAxMS42LTE2LjEgMjcuMi0yNy43IDQ5LjktMjcuN3ptMTIyLjUtMy45YzI4LjMgMCA0My44IDE2LjYgNDMuOCA0My4ycy0xNS41IDQyLjctNDMuOCA0Mi43Yy04LjkgMC0xMy44LTUtMTMuOC0xMS43bDAtNjIuNmMwLTYuNyA1LTExLjYgMTMuOC0xMS42eiJdCiAgICB9OwogICAgZmFSZXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmV2IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1YjIiLCAiTTE1OC43IDI3NC45YTY1LjYgNjUuNiAwIDEgMSAxMzEuMiAwIDY1LjYgNjUuNiAwIDEgMSAtMTMxLjIgMHptMjcwLjctNS4xbC0uMSAwYy0uNy0yOS4zLTcuNy01OC4yLTIwLjUtODQuNnMtMzEuMi00OS43LTUzLjgtNjguNEwzMDkuNiAxNDNjMjIgMTQuMiA0MC4xIDMzLjggNTIuNyA1Ni44czE5LjEgNDguOCAxOS4xIDc1LjFjMCA4Ni42LTcwLjUgMTU3LjEtMTU3LjEgMTU3LjFTNjcuMiAzNjEuNSA2Ny4yIDI3NC45YzAtODEuOSA2My0xNDkuMyAxNDMtMTU2LjRsMCAzOS4xIDEwOC44LTYyLjgtMTA4LjgtNjIuOCAwIDM4LjNjLTEwNi43IDcuMi0xOTEgOTYtMTkxIDIwNC42IDAgMTExLjYgODkuMSAyMDIuMyAyMDAuMSAyMDVsMCAuMSAyMTAuMiAwIDAtMjEwLjJ6Il0KICAgIH07CiAgICBmYUtleWNkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrZXljZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiYSIsICJNNjMuOCA0MDkuM2w2MC41LTU5YzMyLjEgNDIuOCA3MS4xIDY2IDEyNi42IDY3LjQgMzAuNSAuNyA2MC4zLTcgODYuNC0yMi40IDUuMSA1LjMgMTguNSAxOS41IDIwLjkgMjItMzIuMiAyMC43LTY5LjYgMzEuMS0xMDguMSAzMC4yLTQzLjMtMS4xLTg0LjYtMTYuNy0xMTcuNy00NC40IC4zLS42LTM4LjIgMzcuNS0zOC42IDM3LjkgOS41IDI5LjgtMTMuMSA2Mi40LTQ2LjMgNjIuNC0yNi44LS4xLTQ3LjUtMjEuNy00Ny41LTQ4LjUgMC0zNC4zIDMzLjEtNTYuNiA2My44LTQ1LjZ6TTQxOC43IDE1Ni45YzE5LjEgMzEuMyAyOS42IDY3LjQgMjguNyAxMDQtMS4xIDQ0LjgtMTkgODcuNS00OC42IDEyMSAuMyAuMyAyMy44IDI1LjIgMjQuMSAyNS41IDkuNi0xLjMgMTkuMiAyIDI1LjkgOS4xIDExLjMgMTIgMTAuOSAzMC45LTEuMSA0Mi40LTEyIDExLjMtMzAuOSAxMC45LTQyLjQtMS4xLTYuNy03LTkuNC0xNi44LTcuNi0yNi4zLTI0LjktMjYuNi00NC40LTQ3LjItNDQuNC00Ny4yIDQyLjctMzQuMSA2My4zLTc5LjYgNjQuNC0xMjQuMiAuNy0yOC45LTcuMi01Ny4yLTIxLjEtODIuMmwyMi4xLTIxek0xMDQgNTMuMWM2LjcgNyA5LjQgMTYuOCA3LjYgMjYuM2w0NS45IDQ4LjFjLTQuNyAzLjgtMTMuMyAxMC40LTIyLjggMjEuMy0yNS40IDI4LjUtMzkuNiA2NC44LTQwLjcgMTAyLjktLjcgMjguOSA2LjEgNTcuMiAyMCA4Mi40TDkyIDM1NS42Yy0xOS4zLTMxLjYtMjguOS02Ny43LTI3LjgtMTA0LjcgMS00NC42IDE4LjMtODcuNiA0Ny41LTEyMS4xTDg2LjQgMTAzLjRjLTkuNiAxLjMtMTkuMi0yLTI1LjktOS4xLTExLjMtMTItMTAuOS0zMC45IDEuMS00Mi40IDExLjktMTEuMiAzMC42LTEwLjkgNDIuNCAxLjJ6TTQ2NC45IDhjMjYgMCA0Ny4xIDIyLjQgNDcuMSA0OC4zUzQ5MC45IDEwNCA0NjQuOSAxMDRjLTYuMyAuMS0xNC0xLjEtMTUuOS0xLjhsLTYyLjkgNTkuN2MtMzIuNy00My42LTc2LjctNjUuOS0xMjYuOS02Ny4yLTMwLjUtLjctNjAuMyA2LjgtODYuMiAyMi40bC0yMS4xLTIyQzE4NC4xIDc0LjMgMjIxLjUgNjQgMjYwIDY0LjkgMzAzLjMgNjYgMzQ0LjYgODEuNiAzNzcuNyAxMDkuNWw0MS4xLTM4LjZjLTEuNS00LjctMi4yLTkuNi0yLjItMTQuNS0uMS0yNi43IDIyLjMtNDguNCA0OC4zLTQ4LjR6TTI1Ni43IDExMy40YzUuNSAwIDEwLjkgLjQgMTYuNCAxLjEgNzguMSA5LjggMTMzLjQgODEuMSAxMjMuOCAxNTkuMS05LjggNzguMS04MS4xIDEzMy40LTE1OS4xIDEyMy44LTc4LjEtOS44LTEzMy40LTgxLjEtMTIzLjgtMTU5LjIgOS4zLTcyLjQgNzAuMS0xMjQuNiAxNDIuNy0xMjQuOHptLTU5IDExOS40Yy42IDIyLjcgMTIuMiA0MS44IDMyLjQgNTIuMmwtMTEgNTEuNyA3My43IDAtMTEtNTEuN2MyMC4xLTEwLjkgMzIuMS0yOSAzMi40LTUyLjItLjQtMzIuOC0yNS44LTU3LjUtNTguMy01OC4zLTMyLjEgLjgtNTcuMyAyNC44LTU4LjIgNTguM3oiXQogICAgfTsKICAgIGZhSGlyZUFIZWxwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGlyZS1hLWhlbHBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2IwIiwgIk00NDMuMSAwTDcxLjkgMEM2Ny45IDM3LjMgMzcuNCA2Ny44IDAgNzEuN0wwIDQ0My4yYzM3LjQgNC45IDY2IDMyLjQgNzEuOSA2OC44bDM3Mi4yIDBjMy0zNi40IDMyLjUtNjUuOCA2Ny45LTY5LjhsMC0zNzAuNUM0NzUuNiA2NS44IDQ0NyAzNi40IDQ0My4xIDB6bS0zNyA0MDQuOWMtMzYuMyAwLTE4LjgtMi01NS4xLTItMzUuOCAwLTIxIDItNTYuMSAyLTUuOSAwLTQuOS04LjIgMC05LjggMjIuOC03LjYgMjIuOS0xMC4yIDI0LjYtMTIuOCAxMC40LTE1LjYgNS45LTgzIDUuOS0xMTMgMC01LjMtNi40LTEyLjgtMTMuOC0xMi44bC0xMTEuMiAwYy03LjQgMC0xMy44IDcuNS0xMy44IDEyLjggMCAzMC00LjUgOTcuNCA1LjkgMTEzIDEuNyAyLjUgMS44IDUuMiAyNC42IDEyLjggNC45IDEuNiA2IDkuOCAwIDkuOC0zNS4xIDAtMjAuMy0yLTU2LjEtMi0zNi4zIDAtMTguOCAyLTU1LjEgMi03LjkgMC01LjgtMTAuOCAwLTEwLjggMTAuMi0zLjQgMTMuNS0zLjUgMjEuNy0xMy44IDcuNy0xMi45IDcuOS00NC40IDcuOS0xMjcuOGwwLTEwMS4yYzAtMjIuMi0xMi4yLTI4LjMtMjguNi0zMi40LTguOC0yLjItNC0xMS44IDEtMTEuOCAzNi41IDAgMjAuNiAyIDU3LjEgMiAzMi43IDAgMTYuNS0yIDQ5LjItMiAzLjMgMCA4LjUgOC4zIDEgMTAuOC00LjkgMS42LTI3LjYgMy43LTI3LjYgMzkuMyAwIDQ1LjYtLjIgNTUuOCAxIDY4LjggMCAxLjMgMi4zIDEyLjggMTIuOCAxMi44bDEwOS4yIDBjMTAuNSAwIDEyLjgtMTEuNSAxMi44LTEyLjggMS4yLTEzIDEtMjMuMiAxLTY4LjggMC0zNS42LTIyLjctMzcuNy0yNy42LTM5LjMtNy41LTIuNS0yLjMtMTAuOCAxLTEwLjggMzIuNyAwIDE2LjUgMiA0OS4yIDIgMzYuNSAwIDIwLjYtMiA1Ny4xLTIgNC45IDAgOS45IDkuNiAxIDExLjgtMTYuNCA0LjEtMjguNiAxMC4zLTI4LjYgMzIuNGwwIDEwMS4yYzAgODMuNCAuMSAxMTQuOSA3LjkgMTI3LjggOC4yIDEwLjIgMTEuNCAxMC40IDIxLjcgMTMuOCA1LjggMCA3LjggMTAuOCAwIDEwLjh6Il0KICAgIH07CiAgICBmYVNxdWFyZUhhY2tlck5ld3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWhhY2tlci1uZXdzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhhY2tlci1uZXdzLXNxdWFyZSJdLCAiZjNhZiIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTIxIDIyOS4ycy4xLS4xIC4xLS4yIC4xLS4yIC4yLS4yYzAgLjEgMCAuMy0uMSAuNGwtLjIgMHpNMjM5LjIgMzg0bC0zMS40IDAgMC0xMDIuNy03OS44LTE1My4zIDM3LjMgMGM0MS41IDc3LjcgNDguMSA5NS44IDU0LjEgMTEyIDEuNiA0LjMgMy4xIDguNSA1LjIgMTMuNiAzLjItNyA1LjEtMTEuOSA3LjEtMTcuMyA1LjktMTUuMyAxMi44LTMzLjIgNTMuNS0xMDguM2wzNC44IDAtODAuOCAxNTUuMSAwIDEwMC45eiJdCiAgICB9OwogICAgZmFIYWNrZXJOZXdzU3F1YXJlID0gZmFTcXVhcmVIYWNrZXJOZXdzOwogICAgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXBkLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVkIiwgIk0yNTUuNiA4QzExMi43IDggOCAxMjMuMSA4IDI1NiA4IDM5NC41IDEyMS42IDUwNCAyNTUuNiA1MDQgMzg1LjUgNTA0IDUwNCA0MDMuMSA1MDQgMjU2IDUwNCAxMTguMSAzOTcuNCA4IDI1NS42IDh6bS44IDQ1MC44Yy0xMTIuNSAwLTIwMy43LTkzLTIwMy43LTIwMi44IDAtMTA1LjQgODUuNS0yMDMuMyAyMDMuNy0yMDMuMyAxMTIuNiAwIDIwMi45IDg5LjUgMjAyLjggMjAzLjMgMCAxMjEuNy05OS42IDIwMi44LTIwMi44IDIwMi44ek0zMjQuNyAxODZsLTUzLjIgMCAwIDEzNy4yIDUzLjIgMGMyMS40IDAgNzAtNS4xIDcwLTY4LjYgMC02My40LTQ4LjYtNjguNi03MC02OC42em0uOCAxMDguNWwtMTkuOSAwIDAtNzkuNyAxOS40LS4xYzMuOCAwIDM1LTIuMSAzNSAzOS45IDAgMjQuNi0xMC41IDM5LjktMzQuNSAzOS45ek0yMTEuNyAxODZsLTY4LjIgMCAwIDEzNy4zIDM0LjYgMCAwLTQ0LjMgMjcgMGM1NC4xIDAgNTcuMS0zNy41IDU3LjEtNDYuNSAwLTMxLTE2LjgtNDYuNS01MC41LTQ2LjV6bS00LjkgNjcuM2wtMjkuMiAwIDAtNDEuNiAyOC4zIDBjMzAuOSAwIDI4LjggNDEuNiAuOSA0MS42eiJdCiAgICB9OwogICAgZmFPcmNpZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcmNpZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmOGQyIiwgIk0yOTQuNyAxODguMmwtNDUuOSAwIDAgMTUzLjggNDcuNSAwYzY3LjYgMCA4My4xLTUxLjMgODMuMS03Ni45IDAtNDEuNi0yNi41LTc2LjktODQuNy03Ni45ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE3NS4yIDM2OC44bC0yOS44IDAgMC0yMDcuNSAyOS44IDAgMCAyMDcuNXpNMTYwLjMgOTguNWExOS42IDE5LjYgMCAxIDEgMCAzOS4yIDE5LjYgMTkuNiAwIDEgMSAwLTM5LjJ6TTMwMCAzNjlsLTgxIDAgMC0yMDcuNyA4MC42IDBjNzYuNyAwIDExMC40IDU0LjggMTEwLjQgMTAzLjkgMCA1My4zLTQxLjcgMTAzLjktMTEwIDEwMy45eiJdCiAgICB9OwogICAgZmFCb2FyZEdhbWVHZWVrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJvYXJkLWdhbWUtZ2VlayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiZ2ciXSwgImU4NTUiLCAiTTE2OC44IDE2OC4zbDMwLjEtOC4yLTEyLjMgOTguOCAxNi43IDE2LjEtMzguOSA5MS4yLTExMS44IDQxLjItNTIuNi0xMzEuOCAxNy43LTE3LTEwLjUtODQuMyAxOTEuMi03MC4zLTI5LjUgNjQuM3ptMTgwLjYgMTYuNWMxMS42IDAgMTkgNy40IDE5IDE3LjlsMCAzMS41YzAgOS43LTYuMyAxOC45LTE5LjUgMjIuMSAxMy4xIDMuMSAyMC41IDEyIDIwLjUgMjEuNGwwIDMwLjljMCAxMS4xLTcuNCAxOC4xLTE5IDE4LjFsLTg5LjEgMCAwLTE0MS44IDg4IDB6TTI5OCAyOTkuOGwzMyAwYzEuNSAwIDIuMS0xIDIuMS0yLjFsMC0yNi45YzAtMS0uNi0yLjMtMi4xLTIuM2wtMzMgMCAwIDMxLjN6bTAtNTcuM2wzMyAwYzEuNSAwIDIuMS0xLjEgMi4xLTIuM2wwLTI0LjhjMC0xLS42LTIuMy0yLjEtMi4zbC0zMyAwIDAgMjkuNHptMjA0LjEtMjcuMmwtNjUuNiAwYy0xIDAtMi4xIDEuMS0yLjEgMi4zbDAgNzYuMWMwIDEuMyAxIDIuMSAyLjEgMi4xbDI5LjcgMGMxLjUgMCAyLjMtLjggMi4zLTIuMWwwLTI0LTE5LjMgMCAxMi44LTMwIDQwLjEgMCAwIDcwLjhjMCA5LjItNy4yIDE2LjItMTYuMyAxNi4ybC03MS41IDBjLTkuMSAwLTE2LjUtNy0xNi41LTE2LjJsMC0xMDkuN2MwLTguNiA3LjQtMTYgMTYuNS0xNmw4Ny44IDAgMCAzMC41em0xMzIuNiAwbC02NS42IDBjLTEuMSAwLTIuMSAxLjEtMi4xIDIuM2wwIDc2LjFjMCAxLjMgMSAyLjEgMi4xIDIuMWwyOS42IDBjMS41IDAgMi4zLS44IDIuMy0yLjFsMC0yNC0xOS4yIDAgMTIuOC0zMCA0MC4xIDAgMCA3MC44YzAgOS4yLTcuMiAxNi4yLTE2LjMgMTYuMmwtNzEuNSAwYy05LjEgMC0xNi41LTYuOS0xNi41LTE2LjJsMC0xMDkuN2MwLTguNiA3LjQtMTYgMTYuNS0xNmw4Ny44IDAgMCAzMC41eiJdCiAgICB9OwogICAgZmFCZ2cgPSBmYUJvYXJkR2FtZUdlZWs7CiAgICBmYUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmVoYW5jZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWI0IiwgIk0yMzIgMjM3LjJjMzEuOC0xNS4yIDQ4LjQtMzguMiA0OC40LTc0IDAtNzAuNi01Mi42LTg3LjgtMTEzLjMtODcuOGwtMTY3LjEgMCAwIDM1NC40IDE3MS44IDBjNjQuNCAwIDEyNC45LTMwLjkgMTI0LjktMTAyLjkgMC00NC41LTIxLjEtNzcuNC02NC43LTg5Ljd6TTc3LjkgMTM1LjlsNzMuMSAwYzI4LjEgMCA1My40IDcuOSA1My40IDQwLjUgMCAzMC4xLTE5LjcgNDIuMi00Ny41IDQyLjJsLTc5IDAgMC04Mi43em04My4zIDIzMy43bC04My4zIDAgMC05Ny42IDg0LjkgMGMzNC4zIDAgNTYgMTQuMyA1NiA1MC42IDAgMzUuOC0yNS45IDQ3LTU3LjYgNDd6TTUxOS43IDEyOC45bC0xNDMuNyAwIDAtMzQuOSAxNDMuNyAwIDAgMzQuOXpNNTc2IDMwNS4yYzAtNzUuOS00NC40LTEzOS4yLTEyNC45LTEzOS4yLTc4LjIgMC0xMzEuMyA1OC44LTEzMS4zIDEzNS44IDAgNzkuOSA1MC4zIDEzNC43IDEzMS4zIDEzNC43IDYxLjMgMCAxMDEtMjcuNiAxMjAuMS04Ni4zbC02Mi4yIDBjLTYuNyAyMS45LTM0LjMgMzMuNS01NS43IDMzLjUtNDEuMyAwLTYzLTI0LjItNjMtNjUuM2wxODUuMSAwYy4zLTQuMiAuNi04LjcgLjYtMTMuMnpNMzkwLjQgMjc0YzIuMy0zMy43IDI0LjctNTQuOCA1OC41LTU0LjggMzUuNCAwIDUzLjIgMjAuOCA1Ni4yIDU0LjhsLTExNC43IDB6Il0KICAgIH07CiAgICBmYU1vbmVybyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtb25lcm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkMCIsICJNMzYwIDM4NGwxMDguNCAwQzQyNSA0NTUuOSAzNDYuMSA1MDQgMjU2IDUwNFM4NyA0NTUuOSA0My42IDM4NGwxMDguNCAwIDAtMTI3LjggMTA0IDEwNC44IDEwNC0xMDUgMCAxMjh6TTk2IDMzNmwwLTIwOCAxNTkuNCAxNTkuNCAxNjAuNi0xNTkuNCAwIDIwOCA3NC44IDBjOC41LTI1LjEgMTMuMi01MiAxMy4yLTgwIDAtMTM3LTExMS0yNDgtMjQ4LTI0OFM4IDExOSA4IDI1NmMwIDI4IDQuNiA1NC45IDEzLjIgODBMOTYgMzM2eiJdCiAgICB9OwogICAgZmFGaWdtYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaWdtYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNzk5IiwgIk0xNCA5NS44QzE0IDQyLjkgNTYuOSAwIDEwOS44IDBMMjc0LjIgMGM1Mi45IDAgOTUuOCA0Mi45IDk1LjggOTUuOCAwIDMzLjUtMTcuMiA2My00My4yIDgwLjEgMjYgMTcuMSA0My4yIDQ2LjYgNDMuMiA4MC4xIDAgNTIuOS00Mi45IDk1LjgtOTUuOCA5NS44bC0yLjEgMGMtMjQuOCAwLTQ3LjQtOS40LTY0LjQtMjQuOWwwIDg4LjNjMCA1My42LTQ0IDk2LjgtOTcuNCA5Ni44LTUyLjggMC05Ni4zLTQyLjgtOTYuMy05NS44IDAtMzMuNSAxNy4yLTYzIDQzLjItODAuMS0yNi0xNy4xLTQzLjItNDYuNi00My4yLTgwLjFzMTcuMi02MyA0My4yLTgwLjFDMzEuMiAxNTguOCAxNCAxMjkuMyAxNCA5NS44em0xNjIuMyA5NS44bC02Ni41IDBjLTM1LjYgMC02NC40IDI4LjgtNjQuNCA2NC40IDAgMzUuNCAyOC42IDY0LjIgNjQgNjQuNGw2Ni45IDAgMC0xMjguOHpNMjA3LjcgMjU2YzAgMzUuNiAyOC44IDY0LjQgNjQuNCA2NC40bDIuMSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC0yLjEgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjR6bS05Ny45IDk1LjhsLS40IDBjLTM1LjQgLjItNjQgMjktNjQgNjQuNHMyOS4yIDY0LjQgNjQuOSA2NC40YzM2LjMgMCA2Ni0yOS40IDY2LTY1LjVsMC02My40LTY2LjUgMHptMC0zMjAuNGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjRzMjguOCA2NC40IDY0LjQgNjQuNGw2Ni41IDAgMC0xMjguOC02Ni41IDB6bTk3LjkgMTI4LjhsNjYuNSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC02Ni41IDAgMCAxMjguOHoiXQogICAgfTsKICAgIGZhSW5zdGFncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTZkIiwgIk0yMjQuMyAxNDFhMTE1IDExNSAwIDEgMCAtLjYgMjMwIDExNSAxMTUgMCAxIDAgLjYtMjMwem0tLjYgNDAuNGE3NC42IDc0LjYgMCAxIDEgLjYgMTQ5LjIgNzQuNiA3NC42IDAgMSAxIC0uNi0xNDkuMnptOTMuNC00NS4xYTI2LjggMjYuOCAwIDEgMSA1My42IDAgMjYuOCAyNi44IDAgMSAxIC01My42IDB6bTEyOS43IDI3LjJjLTEuNy0zNS45LTkuOS02Ny43LTM2LjItOTMuOS0yNi4yLTI2LjItNTgtMzQuNC05My45LTM2LjItMzctMi4xLTE0Ny45LTIuMS0xODQuOSAwLTM1LjggMS43LTY3LjYgOS45LTkzLjkgMzYuMXMtMzQuNCA1OC0zNi4yIDkzLjljLTIuMSAzNy0yLjEgMTQ3LjkgMCAxODQuOSAxLjcgMzUuOSA5LjkgNjcuNyAzNi4yIDkzLjlzNTggMzQuNCA5My45IDM2LjJjMzcgMi4xIDE0Ny45IDIuMSAxODQuOSAwIDM1LjktMS43IDY3LjctOS45IDkzLjktMzYuMiAyNi4yLTI2LjIgMzQuNC01OCAzNi4yLTkzLjkgMi4xLTM3IDIuMS0xNDcuOCAwLTE4NC44ek0zOTkgMzg4Yy03LjggMTkuNi0yMi45IDM0LjctNDIuNiA0Mi42LTI5LjUgMTEuNy05OS41IDktMTMyLjEgOXMtMTAyLjcgMi42LTEzMi4xLTljLTE5LjYtNy44LTM0LjctMjIuOS00Mi42LTQyLjYtMTEuNy0yOS41LTktOTkuNS05LTEzMi4xcy0yLjYtMTAyLjcgOS0xMzIuMWM3LjgtMTkuNiAyMi45LTM0LjcgNDIuNi00Mi42IDI5LjUtMTEuNyA5OS41LTkgMTMyLjEtOXMxMDIuNy0yLjYgMTMyLjEgOWMxOS42IDcuOCAzNC43IDIyLjkgNDIuNiA0Mi42IDExLjcgMjkuNSA5IDk5LjUgOSAxMzIuMXMyLjcgMTAyLjctOSAxMzIuMXoiXQogICAgfTsKICAgIGZhUGVyYnl0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJieXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODMiLCAiTTMwNS4zIDI4NC42bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXpNMTQ5LjQgMTI4LjdsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0zNjYuNiAzMkw4MS40IDMyYy0yMS42IDAtNDIuMiA4LjYtNTcuNSAyMy45UzAgOTEuOCAwIDExMy40TDAgMzk4LjZjMCAyMS42IDguNiA0Mi4yIDIzLjkgNTcuNVM1OS44IDQ4MCA4MS40IDQ4MGwyODUuMyAwYzIxLjYgMCA0Mi4yLTguNiA1Ny41LTIzLjlTNDQ4IDQyMC4yIDQ0OCAzOTguNmwwLTI4NS4zYzAtMjEuNi04LjYtNDIuMi0yMy45LTU3LjVTMzg4LjIgMzIgMzY2LjYgMzJ6bTYzLjYgMzY2LjZjMCAxNi45LTYuNyAzMy0xOC43IDQ1cy0yOC4xIDE4LjYtNDUgMTguN2wtMjg1LjMgMGMtMTYuOSAwLTMzLTYuNy00NS0xOC43cy0xOC42LTI4LjEtMTguNy00NWwwLTI4NS4zYzAtMTYuOSA2LjctMzMgMTguNy00NXMyOC4xLTE4LjYgNDUtMTguN2wyODUuMyAwYzE2LjkgMCAzMyA2LjcgNDUgMTguN3MxOC42IDI4LjEgMTguNyA0NWwwIDI4NS4zem0tMTI1LTI2OS45bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlVmltZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpbWVvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInZpbWVvLXNxdWFyZSJdLCAiZjE5NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMxOC41IDMwOS41Yy00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMy44LTEzLjktNy4zLTI2LjktMTAuNS0zOS0xOC4yLTY4LjMtMjguNi0xMDcuNC00Ni4yLTEwNy40LTIuNCAwLTEwLjggNS0yNS4xIDE1LjFMNjQgMTkyYzctNi4xIDEzLjktMTIuNCAyMC42LTE4LjUgMjkuMS0yNi4zIDU1LjYtNTAuMyA3My41LTUxLjkgMjQuOS0yLjQgNDAuMiAxNC42IDQ2IDUxLjEgMjAuNSAxMjkuNiAyOS42IDE0OS4yIDY2LjggOTAuNSAxMy40LTIxLjIgMjAuNi0zNy4yIDIxLjUtNDguMyAzLjQtMzIuOC0yNS42LTMwLjYtNDUuMi0yMi4yIDE1LjctNTEuNSA0NS44LTc2LjUgOTAuMS03NS4xIDMyLjkgMSA0OC40IDIyLjQgNDYuNSA2NC0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOXoiXQogICAgfTsKICAgIGZhVmltZW9TcXVhcmUgPSBmYVNxdWFyZVZpbWVvOwogICAgZmFQdXNoZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicHVzaGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTEiLCAiTTQxNS4xIDExMS45bC05OC41LTkgMTQtMzMuNGMxMC40LTIzLjUtMTAuOC00MC40LTI4LjctMzdMMzAuNiA3Ni45Yy0xNS4xIDIuNy0yNiAxOC4zLTIxLjQgMzYuNkwxMTQuMyA0NjEuOGM2LjUgMjEuMyAzNi43IDI0LjIgNDcuNyA3TDE5Ny4zIDM4OCA0MzIuNSAxNTYuN2MxNi40LTE2LjggNC4zLTQyLjktMTcuNC00NC44ek0zMDUuNyA1My42YzUuMS0uNyA3LjUgMi41IDUuMiA3LjRsLTE2LjggMzkuOS0xNzcuNC0xNi4zIDE4OS0zMXpNMzAuOCAxMDcuOWMtMy4xLTUuMSAxLTEwIDYuMS05LjFsMjQ4LjcgMjIuNy05Ni45IDIzMC43LTE1Ny45LTI0NC4zek0xNDQuMSA0NTYuNGMtMi42IDQtNy45IDMuMS05LjQtMS4yTDUxLjYgMTc5LjcgMTc5LjMgMzc3LjNjLTcgMTUtMzUuMiA3OS4xLTM1LjIgNzkuMXpNNDE2LjkgMTQxLjlsLTE5OC43IDE5NS40IDg5LjctMjEzLjcgMTA2LjQgOS43YzQgMS4xIDUuNyA1LjMgMi42IDguNnoiXQogICAgfTsKICAgIGZhTWl4Y2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4Y2xvdWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI4OSIsICJNMjEzIDM0Ni42bC0zMy4yIDAgMC0xNTEuNSA2LjItMjEuNi0xMC43IDAtMzguMSAxNzMuMS02MSAwLTM4LjQtMTczLjEtMTAuNSAwIDUuOSAyMS42IDAgMTUxLjUtMzMuMiAwIDAtMTgxLjYgNjUuNyAwIDM2LjYgMTczLjEgOC41IDAgMzYuNi0xNzMuMSA2NS43IDAgMCAxODEuNnptMzMxLjUtNjNsLTg2IDYyLjEgMC0zOC4xIDcyLjktNTEuOC03Mi45LTUxLjggMC0zOC4xIDg2IDYyLjMgOS4zIDAgODYuMy02Mi4zIDAgMzguMS03My4xIDUxLjggNzMuMSA1MS44IDAgMzguMS04Ni4zLTYyLjEtOS4zIDB6TTQzMC4yIDI3Mi4zbC0xODIgMCAwLTMzLjEgMTgyIDAgMCAzMy4xeiJdCiAgICB9OwogICAgZmFZYW5kZXhJbnRlcm5hdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbmRleC1pbnRlcm5hdGlvbmFsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MTQiLCAiTTEyOS41IDUxMmwwLTE2Ni4xLTExMS0yOTcuOSA1NS44IDAgODEuOCAyMjkuNyA5NC4xLTI3Ny43IDUxLjMgMC0xMjAuNyAzNDcuOCAwIDE2NC4yLTUxLjMgMHoiXQogICAgfTsKICAgIGZhSGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwN2YiLCAiTTI2MC40IDI1NC45TDEzMS41IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjMtLjggLjEtMS4xIC4zLS42IC41LS44IC44TC4zIDI1NC45Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xTDEyOS4xIDQ3OC45Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuMyAuOC0uMSAxLjEtLjMgLjYtLjUgLjgtLjhMMjYwLjQgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6bTM5LjEtMjUuN2MuMiAuMyAuNSAuNiAuOCAuOHMuNyAuMyAxLjEgLjNsNjYuNSAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44IC4zLS43IC4zLTEuMS0uMS0uOC0uMy0xLjFMMjU5LjEgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uM2wtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjgtLjMgLjctLjMgMS4xIC4xIC44IC4zIDEuMUwyOTkuNCAyMjkuMnptMjEyLjMgMjUuN0wzODQuOSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni42IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDQ0MC43IDI1NiAzMTQuNSA0NzYuN2MtLjIgLjMtLjMgLjctLjMgMS4xcy4xIC44IC4zIDEuMSAuNSAuNiAuOCAuOCAuNyAuMyAxLjEgLjNsNjYuNiAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44TDUxMS43IDI1Ny4xYy4yLS4zIC4zLS43IC4zLTEuMXMtLjEtLjgtLjMtMS4xek0zNjYgMjg0LjlsLTY2LjUgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44TDE4OC44IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMMzY3LjkgMjg4LjNjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjEtLjUtLjYtLjgtLjgtLjctLjMtMS4xLS4zeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNaZXJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtemVybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYzIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bS0uNCA2MC41Yy04MS45IDAtMTAyLjUgNzcuMy0xMDIuNSAxNDIuOFMxNzQuMSAzOTguOCAyNTYgMzk4LjggMzU4LjUgMzIxLjUgMzU4LjUgMjU2IDMzNy45IDExMy4yIDI1NiAxMTMuMnptMCA1My45YzMuMyAwIDYuNCAuNSA5LjIgMS4yIDUuOSA1LjEgOC44IDEyLjEgMy4xIDIxLjlMMjEzLjggMjkwLjRjLTEuNy0xMi43LTEuOS0yNS4xLTEuOS0zNC40IDAtMjguOCAyLTg4LjkgNDQuMS04OC45em00MC44IDQ2LjJjMi45IDE1LjQgMy4zIDMxLjQgMy4zIDQyLjcgMCAyOC45LTIgODguOS00NC4xIDg4LjktMTMuNSAwLTMyLjYtNy43LTIwLjEtMjYuNGw2MC45LTEwNS4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVTbmFwY2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc25hcGNoYXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic25hcGNoYXQtc3F1YXJlIl0sICJmMmFkIiwgIk0zODQgMzJMNjQgMzJjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43UzAgNzkgMCA5NkwwIDQxNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM1M0NyA0ODAgNjQgNDgwbDMyMCAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43UzQ0OCA0MzMgNDQ4IDQxNmwwLTMyMGMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM1M0MDEgMzIgMzg0IDMyem0tMy45IDMxOS4zbC0uMSAuMWMtMi41IDIuOC01LjQgNS4xLTguNyA2LjgtNi41IDMuNi0xMy40IDYuMy0yMC42IDguMi0xLjQgLjQtMi43IDEtMy45IDEuOC0yLjIgMS45LTIuMSA0LjYtNC40IDguNi0xLjcgMy00IDUuNS02LjggNy41LTYuNyA0LjYtMTQuMiA0LjktMjIuMiA1LjItNy4yIC4zLTE1LjQgLjYtMjQuNyAzLjctMy44IDEuMi03LjggMy43LTEyLjQgNi41LTExLjMgNi45LTI2LjcgMTYuNC01Mi4zIDE2LjRzLTQwLjktOS40LTUyLjEtMTYuM2MtNC43LTIuOS04LjctNS40LTEyLjUtNi42LTkuMy0zLjEtMTcuNS0zLjQtMjQuNy0zLjctOC0uMy0xNS41LS42LTIyLjItNS4yLTIuNC0xLjYtNC40LTMuNy02LTYuMS0zLjItNC42LTIuOS03LjgtNS4zLTkuOS0xLjMtLjgtMi42LTEuNS00LjEtMS44LTcuMS0xLjktMTMuOS00LjYtMjAuMy04LjEtMy4xLTEuNi01LjktMy44LTguMy02LjMtNi42LTYuOC04LjMtMTQuOC01LjctMjEuOCAzLjQtOS4zIDExLjYtMTIuMSAxOS40LTE2LjMgMTQuOC04IDI2LjMtMTguMSAzNC40LTI5LjkgMi4zLTMuMyA0LjMtNi45IDYtMTAuNiAuOC0yLjIgLjgtMy4zIC4yLTQuNC0uNi0uOS0xLjMtMS42LTIuMi0yLjItMi41LTEuNy01LjEtMy40LTYuOS00LjUtMy4zLTIuMS01LjktMy44LTcuNS01LTYuMy00LjQtMTAuNi05LTEzLjQtMTQuMi0xLjktMy42LTMtNy42LTMuMy0xMS42cy40LTguMSAxLjktMTEuOWM0LjEtMTAuOSAxNC41LTE3LjcgMjctMTcuNyAyLjYgMCA1LjMgLjMgNy44IC44IC43IC4yIDEuNCAuMyAyIC41LS4xLTcuNCAuMS0xNS40IC43LTIzLjEgMi40LTI3LjMgMTEuOS00MS42IDIxLjktNTMgNi40LTcuMiAxMy45LTEzLjIgMjIuMy0xNy45IDE1LjEtOC42IDMyLjItMTMgNTAuOS0xM3MzNS44IDQuNCA1MC45IDEzYzguMyA0LjcgMTUuOSAxMC44IDIyLjIgMTcuOSAxMCAxMS40IDE5LjUgMjUuNyAyMS45IDUzIC42IDcuNyAuOSAxNS40IC43IDIzLjEgLjctLjIgMS40LS4zIDIuMS0uNSAyLjYtLjYgNS4yLS44IDcuOC0uOCAxMi41IDAgMjIuOCA2LjggMjcgMTcuNyAxLjUgMy44IDIuMSA3LjkgMS45IDExLjlzLTEuNCA4LTMuMyAxMS42Yy0yLjcgNS4yLTcuMSA5LjktMTMuNCAxNC4yLTEuNyAxLjItNC4zIDIuOS03LjUgNS0xLjggMS4yLTQuNSAyLjktNy4yIDQuNy0uOCAuNS0xLjQgMS4yLTEuOSAyLS41IDEtLjUgMi4yIC4yIDQuMiAxLjcgMy44IDMuNyA3LjQgNi4xIDEwLjggOC4zIDEyLjEgMjAuMiAyMi4zIDM1LjUgMzAuNCAxLjUgLjggMyAxLjUgNC40IDIuMyAuNyAuMyAxLjYgLjggMi41IDEuMyA0LjkgMi43IDkuMiA2IDExLjUgMTIuMiAyLjUgNi45IDEgMTQuNy01LjIgMjEuM3ptLTE2LjctMTguNWMtNTAuMy0yNC4zLTU4LjMtNjEuOS01OC43LTY0LjctLjQtMy40LS45LTYgMi44LTkuNSAzLjYtMy4zIDE5LjUtMTMuMiAyNC0xNi4zIDcuMy01LjEgMTAuNS0xMC4yIDguMi0xNi41LTEuNy00LjMtNS43LTYtMTAtNi0xLjMgMC0yLjcgLjItNCAuNC04IDEuNy0xNS44IDUuOC0yMC40IDYuOS0uNSAuMS0xLjEgLjItMS43IC4yLTIuNCAwLTMuMy0xLjEtMy4xLTQgLjYtOC44IDEuOC0yNS45IC40LTQxLjktMS45LTIyLTktMzIuOS0xNy40LTQyLjYtNC4xLTQuNi0yMy4xLTI0LjctNTkuNS0yNC43cy01NS40IDIwLjEtNTkuNSAyNC44Yy04LjQgOS43LTE1LjUgMjAuNi0xNy40IDQyLjYtMS40IDE2LS4xIDMzLjEgLjQgNDEuOSAuMiAyLjgtLjcgNC0zLjEgNC0uNiAwLTEuMS0uMS0xLjctLjItNC41LTEuMS0xMi4zLTUuMS0yMC4zLTYuOS0xLjMtLjMtMi42LS40LTQtLjQtNC4zIDAtOC4zIDEuNi0xMCA2LTIuNCA2LjMgLjggMTEuNCA4LjIgMTYuNSA0LjQgMy4xIDIwLjQgMTMgMjQgMTYuMyAzLjcgMy40IDMuMiA2LjEgMi44IDkuNS0uNCAyLjgtOC40IDQwLjQtNTguNyA2NC43LTIuOSAxLjQtOCA0LjQgLjkgOS4zIDEzLjkgNy42IDIzLjEgNi44IDMwLjMgMTEuNCA2LjEgMy45IDIuNSAxMi40IDYuOSAxNS40IDUuNSAzLjggMjEuNi0uMyA0Mi4zIDYuNiAxNy40IDUuNyAyOC4xIDIyIDU5IDIyczQxLjgtMTYuMyA1OC45LTIyYzIwLjgtNi45IDM2LjktMi44IDQyLjMtNi42IDQuNC0zLjEgLjgtMTEuNSA2LjktMTUuNCA3LjItNC42IDE2LjQtMy44IDMwLjMtMTEuNSA4LjgtNC45IDMuOC03LjkgLjktOS40eiJdCiAgICB9OwogICAgZmFTbmFwY2hhdFNxdWFyZSA9IGZhU3F1YXJlU25hcGNoYXQ7CiAgICBmYVRoZW1laXNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGVtZWlzbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJiMiIsICJNMjA4IDg4LjNjMC0xMCA2LjMtMjEuNyAxNy43LTIxLjcgMTEuMSAwIDE3LjcgMTEuNyAxNy43IDIxLjcgMCAxMC4zLTYuNiAyMS43LTE3LjcgMjEuNy0xMS40IDAtMTcuNy0xMS40LTE3LjctMjEuN3ptMzA0IDE2MGMwIDM2LTExLjQgMTAyLjMtMzYuMyAxMjkuNy0yMi45IDI0LjktODcuNCA2MS4xLTEyMC45IDcwLjZsLTEuMSAuMyAwIDMyLjZjMCAxNi4zLTEyLjYgMzAuNi0yOS4xIDMwLjYtMTAgMC0xOS40LTUuNy0yNC42LTE0LjMtNS40IDguNi0xNC45IDE0LjMtMjQuOSAxNC4zcy0xOS40LTUuNy0yNC45LTE0LjNjLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xMC4zIDAtMTkuNC01LjctMjQuOS0xNC4zLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xOC45IDAtMjkuNC0xNS43LTI5LjQtMzIuOS0xNi4zIDEyLjMtMzUuNyAxOS40LTU2LjYgMTkuNC0yMiAwLTQzLjQtOC4zLTYwLjMtMjIuOSAxMC4zLS4zIDIwLjYtMi4zIDMwLjMtNS43LTIwLjktNS43LTM5LjQtMTguOS01Mi0zNi4zIDIxLjQgNC42IDQ2LjIgMS43IDY3LjEtMTEuMS0yMi0yMi01Ni42LTU4LjktNjguNi04Ny40LTUuNy0xMy40LTYuOS0zMS40LTYuOS00NS43IDAtNDkuNyAyMC4zLTE2MCA4Ni4zLTE2MCAxMC42IDAgMTguOSA0LjkgMjMuMSAxNC45IDMuNy01LjQgNy43LTEwLjUgMTItMTUuNCAyLTIuNiA1LjctNS40IDcuMS04LjMgOC0xMi42IDExLjctMjEuMSAyMS43LTM0IDMyLjMtNDEuMSA4MS43LTY5LjQgMTM0LjktNjkuNCA2IDAgMTIgLjMgMTcuNyAxLjEgMTAuOS0xMS43IDI2LTE4LjMgNDEuNy0xOC4zIDE0LjYgMCAyOS43IDYgNDAgMTYuMyAuOSAuOSAxLjQgMi4zIDEuNCAzLjQgMCAzLjctMTAuMyAxMy40LTEyLjkgMTYuMyA0LjMgMS40IDE1LjcgNi45IDE1LjcgMTIgMCAyLjktMi45IDUuMS00LjYgNy4xIDMxLjQgMjcuNyA0OS40IDY3LjEgNTYuMyAxMDggNC4zLTUuMSAxMC4zLTguNiAxNy4xLTguNiAxMC42IDAgMjAuOSA3LjEgMjguNiAxNCAyMC45IDE4LjYgMjUuNyA1My4xIDI1LjcgNzkuN3pNMTg4IDg5LjRjMCAxOC4zIDEyLjYgMzcuMSAzMi4zIDM3LjFzMzIuMy0xOC45IDMyLjMtMzcuMWMwLTE4LTEyLjYtMzYuOS0zMi4zLTM2LjlTMTg4IDcxLjQgMTg4IDg5LjR6TTIzNy43IDE5NGMwLTE5LjcgMy43LTM5LjEgOC42LTU4LjMtNTIgNzkuNS0xMy41IDE4NC42IDY4LjkgMTg0LjYgMjEuNCAwIDQyLjYtNy43IDYwLTIwIDItNy40IDMuNy0xNC45IDMuNy0yMi42IDAtMTQuMy02LjMtMjEuNC0yMC42LTIxLjQtNC42IDAtOS4xIC45LTEzLjQgMS43LTYzLjMgMTIuNy0xMDcuMSAzLjctMTA3LjEtNjR6TTE5Ni42IDQ0OC45YzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwIDkuNy0yMCAyMC45bDAgMzIuNmMwIDExLjEgOC42IDIxLjEgMjAgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS4xIDBjMC0xMS4xLTguNi0yMC45LTIwLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC0xMCAyMC0yMS4xbDAtMzIuNnptNDkuNyAwYzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtMTAgMjAuMy0yMS4xbDAtMzIuNnpNNDIxLjcgMjg2Yy0zMC45IDU5LjEtOTAuMyAxMDIuNi0xNTguNiAxMDIuNi05Ni42IDAtMTYwLjYtODQuNi0xNjAuNi0xNzYuNiAwLTE2LjkgMi0zMy40IDYtNDkuNy0yMCAzMy43LTI5LjcgNzIuNi0yOS43IDExMS40IDAgNjAuMyAyNC45IDEyMS43IDcxLjQgMTYwLjkgNS4xLTkuNyAxNC45LTE2LjMgMjYtMTYuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjYtMTQuMyAyNC45LTE0LjMgMTAgMCAxOS40IDUuNyAyNC42IDE0LjMgNS40LTguNiAxNC45LTE0LjMgMjQuOS0xNC4zczE5LjQgNS43IDI0LjkgMTQuM2M1LjEtOC42IDE0LjYtMTQuMyAyNC42LTE0LjMgMTAuOSAwIDIwLjkgNi42IDI1LjcgMTYgNDMuNC0zNi4zIDY4LjYtOTIgNzEuNC0xNDguM3ptMTAuNi05OS43YzAtNTMuNy0zNC42LTEwNS43LTkyLjYtMTA1LjctMzAuMyAwLTU4LjYgMTUuMS03OC45IDM2LjktMjAgNjYuNC0yNy40IDEzNi42IDQxLjQgMTM2LjYgMjguOCAwIDk3LjQtMjguNSA4NC4zIDM2LjkgMjguOS0yNiA0NS43LTY1LjcgNDUuNy0xMDQuNnoiXQogICAgfTsKICAgIGZhRGFydExhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFydC1sYW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OTMiLCAiTTM3OC42IDc4LjljLTIuOC0uMS01LjYtLjItOC41LS4ybC0yNjQuMSAwIDE0My4yLTcyYzcuNC00LjQgMTguOC02LjcgMzAuNC02LjcgMTMuNSAwIDI5LjQgOS4yIDM3IDE2LjhsNjIgNjIgMCAuMXpNMTA3LjMgOTYuNWwyNjIuOCAwYzE2IDAgMjUuNCAxLjQgMzUuNCA5LjNsMTA2LjUgMTA2LjQgMCAyMDguOC03OS4zIC43LTMyNS40LTMyNS4yek05Ni41IDM3M2wwLTI2Mi4yIDMyMy44IDMyMy44IC43IDc3LjQtMjEyLjIgMC05OC4xLTk4LjJDOTkuNCA0MDIuNSA5Ni41IDM5OC41IDk2LjUgMzczek03OC43IDEwNS4zbDAgMjY3LjdjMCAzLjMgLjEgNi4zIC4yIDkuMWwtNjItNjJDNi41IDMwOS4zIDAgMjk0LjMgMCAyNzkuNiAwIDI3Mi44IDMuOSAyNjIuMSA2LjcgMjU2bDcyLTE1MC43eiJdCiAgICB9OwogICAgZmFEZXBsb3lkb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVwbG95ZG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOGUiLCAiTTM4Mi4yIDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTMxNy41IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTE4OC41IDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTEyMy44IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTQ0OCA5NmMxNy41IDAgMzIgMTQuNCAzMiAzMmwwIDI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkw2NCA0MTZjLTE3LjUgMC0zMi0xNC40LTMyLTMybDAtMjU2YzAtMTcuNSAxNC40LTMyIDMyLTMybDM4NCAwem0wLTMyTDY0IDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4TDAgMzg0YzAgMzUuMiAyOC44IDY0IDY0IDY0bDM4NCAwYzM1LjIgMCA2NC0yOC44IDY0LTY0bDAtMjU2YzAtMzUuMi0yOC44LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFGbGlwYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmxpcGJvYXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0NGQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM1OC40IDIxMS4ybC04OS42IDAgMCA4OS42LTg5LjYgMCAwIDg5LjYtODkuNiAwIDAtMjY4LjggMjY4LjggMCAwIDg5LjZ6Il0KICAgIH07CiAgICBmYUJ1eU5MYXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXktbi1sYXJnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmOGE2IiwgIk0yODguMiAzMkMxMzMuNSAzMiA4IDEzMi4zIDggMjU2UzEzMy41IDQ4MCAyODguMiA0ODAgNTY4LjQgMzc5LjcgNTY4LjQgMjU2IDQ0Mi45IDMyIDI4OC4yIDMyek0yMDIuOCAzODkuMmwtMTM4LjUgMS40IDc3LjItMjkwLjcgMTMzLjQgMGM2My4yIDAgODQuOSAyOC42IDc4IDcyLjgtLjQgMi4zLS45IDQuNi0xLjUgNi45LTUuNi0xLjMtMTEuNC0xLjktMTcuMi0xLjktNDIuMyAwLTc2LjcgMzMuOS03Ni43IDc1LjcgMCAzNy4xIDI3LjEgNjggNjIuOSA3NC41LTE4LjIgMzcuMi01Ni4yIDYwLjktMTE3LjcgNjEuNXpNMzU4LjIgMjA3LjFsMzIgMC0yMi4yIDkwLjMtMzUuNCAwLTExLjItMzUuNi03LjggMzUuNi0zNy44IDAgMjYuNi05MC4zIDMxLjMgMCAxNSAzNi44IDkuNC0zNi44ek01MDQuMSAzODkuMmwtMTk3LjEgMCAxNS44LTYxLjJjMy44IC42IDcuNiAuOCAxMS41IC44IDQyLjMgMCA3Ni43LTMzLjkgNzYuNy03NS42IDAtMzIuNi0yMS02MC41LTUwLjQtNzEuMWwyMS4zLTgyLjQgOTIuNSAwLTUzIDIwNS40IDEwMy45IDAtMjEuMiA4NC4xek0yMTEuOSAyNjkuNGwtMjQuNyAwLTEzLjggNTYuNSAyNC43IDBjMTYuMSAwIDMyLjEtMy4yIDM3LjktMjYuNiA1LjYtMjIuMy04LTI5LjgtMjQuMS0yOS44ek0yMzMuMiAxNzBsLTIxLjMgMC0xMS43IDQ3LjcgMjEuNCAwYzE4IDAgMzUuNC0xNC42IDM5LjItMzAuMSA0LjYtMTguOS05LjUtMTcuNi0yNy42LTE3LjZ6Il0KICAgIH07CiAgICBmYVdhdGNobWFuTW9uaXRvcmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRjaG1hbi1tb25pdG9yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwODciLCAiTTI1NiAxNmEyNDAgMjQwIDAgMSAwIDAgNDgwIDI0MCAyNDAgMCAxIDAgMC00ODB6TTEyMS43IDQyOS4xYy01MS42LTQwLjItODQuOS0xMDIuOC04NC45LTE3My4xIDAtMjEuNyAzLjItNDMuMyA5LjYtNjQuMWwxMDIuOS0xNy45LS4xIDExLTEzLjkgMnMtLjEgMTIuNS0uMSAxOS41YzAgMiAuNCA0IDEuMiA1LjhzMi4xIDMuNCAzLjcgNC42bDkuNSA3LjQtMjcuNyAyMDQuOXpNMjI3LjQgMTQ1LjlsOC41LTcuNnM2LjktNS40LS4xLTkuM2MtNy4yLTQtMzkuNS0zNC41LTM5LjUtMzQuNS01LjMtNS41LTguMy03LjMtMTUuNSAwIDAgMC0zMi4zIDMwLjUtMzkuNSAzNC41LTcuMSA0LS4xIDkuMy0uMSA5LjNsOC41IDcuNiAwIDQuNC03My41LTE5LjJjMzkuNi01Ni45IDEwNS41LTk0LjMgMTgwLTk0LjMgMzEuMyAwIDYyLjIgNi43IDkwLjYgMTkuNnM1My44IDMxLjggNzQuMyA1NS40bC0xOTMuNSAzNy43IDAtMy42em0zNC4xIDMyOS4zbC0zMy45LTI1MC45IDkuNS03LjRjMS42LTEuMiAyLjgtMi44IDMuNy00LjZzMS4zLTMuOCAxLjItNS44YzAtNy0uMS0xOS41LS4xLTE5LjVsLTEzLjktMi0uMS0xMC41IDI0MS43IDMxLjRjMy45IDE2LjQgNS44IDMzLjMgNS44IDUwLjEgMCAxMTkuMS05NS40IDIxNi4yLTIxMy44IDIxOS4xeiJdCiAgICB9OwogICAgZmFIaXBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpcHMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ1MiIsICJNMjUxLjYgMTU3LjZjMC0xLjktLjktMi44LTIuOC0yLjhsLTQwLjkgMGMtMS42IDAtMi43IDEuNC0yLjcgMi44bDAgMjAxLjhjMCAxLjQgMS4xIDIuOCAyLjcgMi44bDQwLjkgMGMxLjkgMCAyLjgtLjkgMi44LTIuOGwwLTIwMS44ek0xNTYuNSAxNjhjLTE2LjEtMTEuOC0zNi4zLTE3LjktNjAuMy0xOC0xOC4xLS4xLTM0LjYgMy43LTQ5LjggMTEuNGwwLTgxLjJjMC0xLjgtLjktMi43LTIuOC0yLjdsLTQwLjkgMEMuOSA3Ny41IDAgNzguNCAwIDgwLjJMMCAzNTkuNGMwIDEuOSAuOSAyLjggMi43IDIuOGw0MSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMTM2LjFjMC0uOC0yLjgtMjcgNDUuOC0yNyA0OC41IDAgNDUuOCAyNi4xIDQ1LjggMjdsMCAxMjIuNmMwIDkgNy4zIDE2LjMgMTYuNCAxNi4zbDI3LjMgMGMxLjggMCAyLjctLjkgMi43LTIuOGwwLTEzNi4xYzAtMjMuNC05LjMtNDEuOC0yOC01NS4zek02MzQuOSAyNzguMWMtNi44LTE1LjctMTguNC0yNy0zNC45LTM0LjFsLTU3LjYtMjUuM2MtOC42LTMuNi05LjItMTEuMi0yLjYtMTYuMSA3LjQtNS41IDQ0LjMtMTMuOSA4NCA2LjggMS43IDEgNC0uMyA0LTIuNGwwLTQ0LjdjMC0xLjMtLjYtMi4xLTEuOS0yLjYtMTcuNy02LjYtMzYuMS05LjktNTUuMS05LjktMjYuNSAwLTQ1LjMgNS44LTU4LjUgMTUuNC0uNSAuNC0yOC40IDIwLTIyLjcgNTMuNyAzLjQgMTkuNiAxNS44IDM0LjIgMzcuMiA0My42TDU4MC40IDI4NmMxMS42IDUuMSAxNS4yIDEzLjMgMTIuMiAyMS4yLTMuNyA5LjEtMTMuMiAxMy42LTM2LjUgMTMuNi0yNC4zIDAtNDQuNy04LjktNTguNC0xOS4xLTIuMS0xLjQtNC40IC4yLTQuNCAyLjNsMCAzNC40YzAgMTAuNCA0LjkgMTcuMyAxNC42IDIwLjcgMTUuNiA1LjUgMzEuNiA4LjIgNDguMiA4LjIgMTIuNyAwIDI1LjgtMS4yIDM2LjMtNC4zIC43LS4zIDM2LTguOSA0NS42LTQ1LjggMy41LTEzLjUgMi40LTI2LjUtMy4xLTM5LjF6TTM3Ni4yIDE0OS44Yy0zMS43IDAtMTA0LjIgMjAuMS0xMDQuMiAxMDMuNWwwIDE4My41YzAgLjggLjYgMi43IDIuNyAyLjdsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi43bDAtODguOGMxNi41IDEyLjcgMzUuOCAxOS4xIDU3LjcgMTkuMSA2MC41IDAgMTA4LjctNDguNSAxMDguNy0xMDguNyAuMS02MC4zLTQ4LjItMTA4LjYtMTA4LjYtMTA4LjZ6bTAgNDYuNmE2Mi4yIDYyLjIgMCAxIDEgMCAxMjQuMyA2Mi4yIDYyLjIgMCAxIDEgMC0xMjQuM3pNMjI4LjMgNzIuNWMtMTUuOSAwLTI4LjggMTIuOS0yOC45IDI4LjkgMCAxNS42IDEyLjcgMjguOSAyOC45IDI4LjlzMjguOS0xMy4xIDI4LjktMjguOWMwLTE2LjItMTMtMjguOS0yOC45LTI4Ljl6Il0KICAgIH07CiAgICBmYUNsb3VkdmVyc2lmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZHZlcnNpZnkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM4NSIsICJNMTYwLjYgMzA0YzguMiA2OC41IDY3LjQgMTE1LjUgMTQ2IDExMS4zIDUxLjIgNDMuMyAxMzYuOCA0NS44IDE4Ni40LTUuNiA2OS4yIDEuMSAxMTguNS00NC42IDEzMS41LTk5LjUgMTQuOC02Mi41LTE4LjItMTMyLjUtOTIuMS0xNTUuMS0zMy04OC4xLTEzMS40LTEwMS41LTE4Ni41LTg1LTU3LjMgMTcuMy04NC4zIDUzLjItOTkuMyAxMDkuNy03LjggMi43LTI2LjUgOC45LTQ1IDI0LjEgMTEuNyAwIDE1LjIgOC45IDE1LjIgMTkuNWwwIDIwLjRjMCAxMC43LTguNyAxOS41LTE5LjUgMTkuNWwtMjAuMiAwYy0xMC43IDAtMTkuNS02LTE5LjUtMTYuN2wwLTYuNi00Ni44IDBjLTMuOCAwLTEwLjggNC4zLTEwLjggMTEuOWwwIDQwLjRjMCA2LjQgNS4zIDExLjggMTEuNyAxMS44bDQ4LjkgMCAwLS4xek0zODggMzEyYy0xMC43IDQ2LjMgMjEuNyA3Mi40IDU1LjMgODYuOC0xMDcuMiAzMy44LTE3MS42LTUwLjgtMTM1LjMtMTEwLjgtMzMuMiAyMS42LTMzLjcgNzEuMi0yOS4yIDkyLjktMTcuOS0xMi40LTUzLjgtMzIuNC01Ny40LTc5LjgtMy0zOS45IDIxLjUtNzUuNyA1Ny05My45IDMwLjYtMTUuOCAxMDMuNS04LjUgMTMzLjYgNDAuOC0xNC4xLTQ4LTUzLjgtNzAuMS0xMDEuOC03NC44IDMwLjktMzAuNyA2NC40LTUwLjMgMTE0LjItNDMuNyA2OS44IDkuMyAxMzMuMiA4Mi44IDY3LjcgMTUwLjUgMzUtMTYuMyA0OC43LTU0LjQgNDcuNS03Ni45bDEwLjUgMTkuNmMxMS44IDIyIDE1LjIgNDcuNiA5LjQgNzItOS4yIDM5LTQwLjYgNjguOC03OS43IDc2LjUtMzIuMSA2LjMtODMuMS01LjEtOTEuOC01OS4yek0xNDAgMjA4bC0zOS44IDBjLTguOSAwLTE2LjItNy4zLTE2LjItMTYuMmwwLTM5LjZjMC04LjkgNy4zLTE2LjIgMTYuMi0xNi4ybDM5LjggMGM4LjkgMCAxNi4yIDcuMyAxNi4yIDE2LjJsMCAzOS42YzAgOC45LTcuMyAxNi4yLTE2LjIgMTYuMnpNMjIuMSAxNjhjLTUuNiAwLTEwLjEtNC41LTEwLjEtMTAuMWwwLTI3LjhjMC01LjYgNC41LTEwLjEgMTAuMS0xMC4xbDI3LjcgMGM1LjUgMCAxMC4xIDQuNSAxMC4xIDEwLjFsMCAyNy44YzAgNS42LTQuNSAxMC4xLTEwLjEgMTAuMWwtMjcuNyAwek0xODAgMTQyLjdsMC0yMS40YzAtNS4xIDQuMi05LjMgOS4zLTkuM2wyMS40IDBjNS4xIDAgOS4zIDQuMiA5LjMgOS4zbDAgMjEuNGMwIDUuMS00LjIgOS4zLTkuMyA5LjNsLTIxLjQgMGMtNS4xIDAtOS4zLTQuMi05LjMtOS4zek02OCAyMzUuNWwwIDI1YzAgNi4zLTUuMSAxMS41LTExLjQgMTEuNWwtMjUuMiAwYy02LjMgMC0xMS40LTUuMi0xMS40LTExLjVsMC0yNWMwLTYuMyA1LjEtMTEuNSAxMS40LTExLjVsMjUuMSAwYzYuNCAwIDExLjUgNS4yIDExLjUgMTEuNXoiXQogICAgfTsKICAgIGZhR29vZHJlYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2E4IiwgIk0yOTkuOSAxOTEuMmM1LjEgMzcuMy00LjcgNzktMzUuOSAxMDAuNy0yMi4zIDE1LjUtNTIuOCAxNC4xLTcwLjggNS43LTM3LjEtMTcuMy00OS41LTU4LjYtNDYuOC05Ny4yIDQuMy02MC45IDQwLjktODcuOSA3NS4zLTg3LjUgNDYuOS0uMiA3MS44IDMxLjggNzguMiA3OC4zek00NDggODhsMCAzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNDgwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDg4QzAgNTcuMSAyNS4xIDMyIDU2IDMybDMzNiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2ek0zMzAgMzEzLjJzLS4xLTM0LS4xLTIxNy4zbC0yOSAwIDAgNDAuM2MtLjggLjMtMS4yLS41LTEuNi0xLjItOS42LTIwLjctMzUuOS00Ni4zLTc2LTQ2LTUxLjkgLjQtODcuMiAzMS4yLTEwMC42IDc3LjgtNC4zIDE0LjktNS44IDMwLjEtNS41IDQ1LjYgMS43IDc3LjkgNDUuMSAxMTcuOCAxMTIuNCAxMTUuMiAyOC45LTEuMSA1NC41LTE3IDY5LTQ1LjIgLjUtMSAxLjEtMS45IDEuNy0yLjkgLjIgLjEgLjQgLjEgLjYgLjIgLjMgMy44IC4yIDMwLjcgLjEgMzQuNS0uMiAxNC44LTIgMjkuNS03LjIgNDMuNS03LjggMjEtMjIuMyAzNC43LTQ0LjUgMzkuNS0xNy44IDMuOS0zNS42IDMuOC01My4yLTEuMi0yMS41LTYuMS0zNi41LTE5LTQxLjEtNDEuOC0uMy0xLjYtMS4zLTEuMy0yLjMtMS4zbC0yNi44IDBjLjggMTAuNiAzLjIgMjAuMyA4LjUgMjkuMiAyNC4yIDQwLjUgODIuNyA0OC41IDEyOC4yIDM3LjQgNDkuOS0xMi4zIDY3LjMtNTQuOSA2Ny40LTEwNi4zeiJdCiAgICB9OwogICAgZmFUaWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWRhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2RjIiwgIk0xMDcuMiA0OGwtMS4zIDBjLTMyLjMgMzMuMS02NS40IDY1LjUtOTggOTguNS0yLjYgMi44LTYuMSA1LjEtNy45IDguNiAzNS42IDM1LjQgNzEgNzEgMTA2LjYgMTA2LjQgMzUuNC0zNS4zIDcwLjctNzAuOCAxMDYuMS0xMDYuMWwwLTEuMy03My4yLTczLjJDMTI4LjggNjkuOCAxMTcuMyA1OS42IDEwNy4yIDQ4em0yMTMuNSAwbC0xLjMgMGMtMzQuOSAzNi4xLTcxLjUgNzEtMTA2LjMgMTA3LjIgMzUuOSAzNS4xIDcxIDcxIDEwNi43IDEwNi4zIDM0LjMtMzQuMSA2OC40LTY4LjQgMTAyLjYtMTAyLjQgMS41LTEuNSAzLjMtMi44IDQuMS00LjgtMzQuNi0zMy44LTY4LjQtNjguMi0xMDIuNi0xMDIuMS0xLjMtMS4zLTIuMy0yLjYtMy4zLTQuMXptMjEzLjUgMGwtMS4zIDBjLTE3LjIgMTgtMzUuMSAzNS4zLTUyLjYgNTMtMTcuOSAxNy43LTM1LjQgMzUuNy01My41IDUzLjMgLjggMi4zIDMgMy42IDQuNiA1LjVMNTMzLjMgMjYxLjVjMzYuMS0zNC45IDcwLjgtNzEuMiAxMDYuNy0xMDYuMS0uNS0yLjItMi42LTMuNS00LTVMNTU1LjggNzAuMmMtNy4xLTcuNC0xNC45LTE0LjItMjEuNS0yMi4yek0zMTkuNiAyNjEuN2MtMzQuOSAzNS4xLTcwIDcwLTEwNC45IDEwNC45LS4zIC43LS43IDEuNy0xIDIuMyAyNCAyMy43IDQ3LjcgNDcuNSA3MS41IDcxLjMgMTEuOCAxMS4zIDIyLjggMjMuNSAzNC45IDM0LjQgOC40LTcuNCAxNi40LTE2LjQgMjQuNy0yNC4zIDI1LjUtMjUuMyA1MS01MSA3Ni41LTc2LjMgMS44LTIuMiA0LjMtMy42IDUuNS02LjMtMzUuNC0zNC45LTcwLjUtNzAuMi0xMDUuNi0xMDUuNGwtMS41LS43eiJdCiAgICB9OwogICAgZmFVbml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bml0eSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDQ5IiwgIk0yNDMuNiA5MS42bDgwLjEgNDYuOGMyLjkgMS42IDMgNi4yIDAgNy44bC05NS4yIDU1LjZjLTIuOSAxLjctNi4zIDEuNi05IDBsLTk1LjItNTUuNmMtMi45LTEuNi0zLTYuMyAwLTcuOGw4MC4xLTQ2LjggMC05MS42LTIwNC40IDExOS40IDAgMjM4LjggNzguNC00NS44IDAtOTMuNmMtLjEtMy4zIDMuOC01LjcgNi43LTMuOWw5NS4yIDU1LjZjMi45IDEuNyA0LjUgNC43IDQuNSA3LjhsMCAxMTEuMmMuMSAzLjMtMy44IDUuNy02LjcgMy45TDk4IDM0Ni44IDE5LjYgMzkyLjYgMjI0IDUxMiA0MjguNCAzOTIuNiAzNTAgMzQ2LjggMjY5LjkgMzkzLjZjLTIuOCAxLjctNi44LS41LTYuNy0zLjlsMC0xMTEuMmMwLTMuMyAxLjgtNi4zIDQuNS03LjhMMzYyLjkgMjE1YzIuOC0xLjcgNi44IC41IDYuNyAzLjlsMCA5My42IDc4LjQgNDUuOCAwLTIzOC44LTIwNC40LTExOS40IDAgOTEuNnoiXQogICAgfTsKICAgIGZhVGVuY2VudFdlaWJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlbmNlbnQtd2VpYm8iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjFkNSIsICJNNDAuNSA0OTUuOGMxLjQgMTkuOS0yNy42IDIyLjItMjkuNyAyLjktMTEuNi0xMjkuOSAzMS4xLTIzOS41IDEwMS40LTMxMy4yLTE1LjYtMzQgOS4yLTc3LjEgNTAuNi03Ny4xIDMwLjMgMCA1NS4xIDI0LjYgNTUuMSA1NS4xIDAgNDQtNDkuNSA3MC44LTg2LjkgNDUuMS02NS43IDcxLjMtMTAxLjQgMTY5LjgtOTAuNSAyODcuMnpNMTYwLjIgLjFjLTEyNS45IDAtMjA0LjMgMTM0LjItMTQ4LjMgMjQyLjMgOC43IDE3LjQgMzUuMyA0LjUgMjYuMy0xMy40LTQ2LjMtOTIuNiAyMS0xOTkuMiAxMjItMTk5LjIgNzUuNCAwIDEzNi45IDYxLjQgMTM2LjkgMTM2LjkgMCA5MC44LTg2LjkgMTUzLjktMTY3LjcgMTMzLjEtMTkuMS00LjEtMjUuNiAyNC40LTYuNiAyOS4xIDExMC43IDIzLjIgMjA0LTYwIDIwNC0xNjIuMyAwLTkxLjktNzQuNi0xNjYuNS0xNjYuNi0xNjYuNXoiXQogICAgfTsKICAgIGZhRnJlZUNvZGVDYW1wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZyZWUtY29kZS1jYW1wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyYzUiLCAiTTk3LjQgOTYuMmMxMC40LTEwLjYgMTYtMTcuMSAxNi0yMS45IDAtMi44LTEuOS01LjUtMy44LTcuNC0yLjQtMS44LTUuNC0yLjgtOC40LTIuOC04LjUgMC0yMC45IDguOC0zNS44IDI1LjctNDEuNSA0Ny4zLTYyLjcgOTMuMS02MS44IDE2MC42UzIxIDM2Ny4zIDU3LjYgNDEyLjJjMTguOCAyMy42IDMzLjIgMzUuOCA0My41IDM1LjggMy4yLS4zIDYuMS0xLjYgOC40LTMuOCAxLjktMi44IDMuOC01LjYgMy44LTguNCAwLTUuNi0zLjktMTIuMi0xMy4yLTIwLjYtNDQuNS00Mi4zLTY3LjMtOTctNjcuNS0xNjUtLjItNjEuNCAyMS42LTExMi40IDY0LjgtMTU0ek0yMzkuNiA0MjAuMWMuNiAuNCAuOSAuNiAuOSAuNmwtLjktLjZ6bTkzLjggLjZsLjItLjFjLS4yIC4xLS4zIC4yLS4yIC4xem0zLjEtMTU4LjJjLTE2LjItNC4yIDUwLjQtODIuOS02OC4xLTE3Ny4yIDAgMCAxNS41IDQ5LjQtNjIuOCAxNTkuNi03NC4zIDEwNC40IDIzLjUgMTY4LjcgMzQgMTc1LjItNi43LTQuMy00Ny40LTM1LjcgOS42LTEyOC42IDExLTE4LjMgMjUuNS0zNC45IDQzLjUtNzIuMiAwIDAgMTUuOSAyMi40IDcuNiA3MS4xLTEyLjUgNzMuNiA1My44IDUyLjUgNTQuOCA1My41IDIyLjggMjYuOC0xNy43IDczLjUtMjEuNiA3Ni42IDUuNS0zLjcgMTE3LjctNzggMzMtMTg4LjEtNiA2LTEzLjggMzQuMi0zMCAzMC4xek01MTEgODkuN2MtMTQuOS0xNi45LTI3LjQtMjUuNy0zNS45LTI1LjctMyAuMS01LjkgMS4xLTguNCAyLjgtMS45IDEuOS0zLjggNC43LTMuOCA3LjQgMCA0LjggNS42IDExLjMgMTYgMjEuOSA0My4yIDQxLjYgNjUgOTIuNiA2NC44IDE1NC4xLS4yIDY4LTIzIDEyMi42LTY3LjUgMTY1LTkuMyA4LjQtMTMuMiAxNC45LTEzLjIgMjAuNiAwIDIuNyAxLjkgNS42IDMuOCA4LjQgMi4zIDIuMiA1LjIgMy42IDguNCAzLjggMTAuMyAwIDI0LjctMTIuMSA0My41LTM1LjggMzYuNi00NC45IDUzLjEtOTQuNCA1NC4xLTE2MS45UzU1Mi41IDEzNyA1MTEgODkuN3oiXQogICAgfTsKICAgIGZhWFR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieC10d2l0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MWIiLCAiTTM1Ny4yIDQ4TDQyNy44IDQ4IDI3My42IDIyNC4yIDQ1NSA0NjQgMzEzIDQ2NCAyMDEuNyAzMTguNiA3NC41IDQ2NCAzLjggNDY0IDE2OC43IDI3NS41LTUuMiA0OCAxNDAuNCA0OCAyNDAuOSAxODAuOSAzNTcuMiA0OHpNMzMyLjQgNDIxLjhsMzkuMSAwLTI1Mi40LTMzMy44LTQyIDAgMjU1LjMgMzMzLjh6Il0KICAgIH07CiAgICBmYVN0aWNrZXJNdWxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0aWNrZXItbXVsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2Y3IiwgIk01NjEuNyAxOTkuNmwwIDB6bS02LjItNzcuNGMtNy43LTIyLjMtNS4xLTcuMi0xMy40LTM2LjktMS42LTYuNS0zLjYtMTQuNS02LjItMjAtNC40LTguNy00LjYtNy41LTQuNi05LjUgMC01LjMgMzAuNy00NS4zIDE5LTQ2LjktNS43LS42LTEyLjIgMTEuNi0yMC42IDE3LTguNiA0LjItOCA1LTEwLjMgNS0yLjYgMC01LjctMy02LjItNS0yLTUuNyAxLjktMjUuOS0zLjYtMjUuOS0zLjYgMC0xMi4zIDI0LjgtMTcgMjUuOC01LjIgMS4zLTI3LjktMTEuNC03NS4xIDE4LTI1LjMgMTMuMi04Ni45IDY1LjItODcgNjUuMy02LjcgNC43LTIwIDQuNy0zNS41IDE2LTQ0LjQgMzAuMS0xMDkuNiA5LjQtMTEwLjcgOS0xMTAuNi0yNi44LTEyOC0xNS4yLTE1OSAxMS41LTIwLjggMTcuOS0yMy43IDM2LjUtMjQuMiAzOC45LTQuMiAyMC40IDUuMiA0OC4zIDYuNyA2NC4zIDEuOCAxOS4zLTIuNyAxNy43IDcuNyA5OC4zIC41IDEgNC4xIDAgNS4xIDEuNSAwIDguNC0zLjggMTIuMS00LjEgMTMtMS41IDQuNS0xLjUgMTAuNSAwIDE2IDIuMyA4LjIgOC4yIDM3LjIgOC4yIDQ2LjkgMCA0MS44IC40IDQ0IDIuNiA0OS40IDMuOSAxMCAxMi41IDkuMSAxNyAxMiAzLjEgMy41LS41IDguNSAxIDEyLjUgLjUgMiAzLjYgNCA2LjIgNSA5LjIgMy42IDI3IC4zIDI5LjktMi41IDEuNi0xLjUgLjUtNC41IDMuMS01IDUuMSAwIDEwLjgtLjUgMTQuNC0yLjUgNS4xLTIuNSA0LjEtNiAxLjUtMTAuNS0uNC0uOC03LTEzLjMtOS44LTE2LTIuMS0yLTUuMS0zLTcuMi00LjUtNS44LTQuOS0xMC4zLTE5LjQtMTAuMy0xOS41LTQuNi0xOS40LTEwLjMtNDYuMy00LjEtNjYuOCA0LjYtMTcuMiAzOS41LTg3LjcgMzkuNi04Ny44IDQuMS02LjUgMTctMTEuNSAyNy4zLTcgNiAxLjkgMTkuMyAyMiA2NS40IDMwLjkgNDcuOSA4LjcgOTcuNC0yIDExMi4yLTIgMi44IDItMS45IDEzLS41IDM4LjkgMCAyNi40LS40IDEzLjctNC4xIDI5LjktMi4yIDkuNyAzLjQgMjMuMi0xLjUgNDYuOS0xLjQgOS44LTkuOSAzMi43LTguMiA0My40IC41IDEgMSAyIDEuNSAzLjUgLjUgNC41IDEuNSA4LjUgNC42IDEwIDcuMyAzLjYgMTItMy41IDkuOCAxMS41LS43IDMuMS0yLjYgMTIgMS41IDE1IDQuNCAzLjcgMzAuNiAzLjQgMzYuNSAuNSAyLjYtMS41IDEuNi00LjUgNi40LTcuNCAxLjktLjkgMTEuMy0uNCAxMS4zLTYuNSAuMy0xLjgtOS4yLTE5LjktOS4zLTIwLTIuNi0zLjUtOS4yLTQuNS0xMS4zLTgtNi45LTEwLjEtMS43LTUyLjYgLjUtNTkuNCAzLTExIDUuNi0yMi40IDguNy0zMi40IDExLTQyLjUgMTAuMy01MC42IDE2LjUtNjguMyAuOC0xLjggNi40LTIzLjEgMTAuMy0yOS45IDkuMy0xNyAyMS43LTMyLjQgMzMuNS00Ny40IDE4LTIyLjkgMzQtNDYuOSA1Mi02OS44IDYuMS03IDguMi0xMy43IDE4LTggMTAuOCA1LjcgMjEuNiA3IDMxLjkgMTcgMTQuNiAxMi44IDEwLjIgMTguMiAxMS44IDIyLjkgMS41IDUgNy43IDEwLjUgMTQuOSA5LjUgMTAuNC0yIDEzLTIuNSAxMy40LTIuNSAyLjYtLjUgNS43LTUgNy4yLTggMy4xLTUuNSA3LjItOSA3LjItMTYuNSAwLTcuNy0uNC0yLjgtMjAuNi01Mi45eiJdCiAgICB9OwogICAgZmFUd2l0Y2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHdpdGNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZTgiLCAiTTM1OS40IDEwMy41bC0zOC42IDAgMCAxMDkuNyAzOC42IDAgMC0xMDkuN3pNMjUzLjIgMTAzbC0zOC42IDAgMCAxMDkuOCAzOC42IDAgMC0xMDkuOHpNODkgMGwtOTYuNSA5MS40IDAgMzI5LjIgMTE1LjggMCAwIDkxLjQgOTYuNS05MS40IDc3LjMgMCAxNzMuOC0xNjQuNiAwLTI1Ni0zNjYuOSAwek00MTcuMyAyMzcuOGwtNzcuMiA3My4xLTc3LjIgMC02Ny42IDY0IDAtNjQtODYuOSAwIDAtMjc0LjMgMzA4LjkgMCAwIDIwMS4yeiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlcksgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2lja3N0YXJ0ZXItayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2JjIiwgIk0zNTYuNyAyNTYuMmw0MC44LTQwLjVjNDIuMi00MS45IDQyLjItMTEwLjMgMC0xNTIuMXMtMTExLTQxLjktMTUzLjIgMEwyMjkuMyA3OC40QzIwOS42IDUwLjMgMTc3LjEgMzIgMTQwLjIgMzIgODAuNSAzMiAzMiA4MC4yIDMyIDEzOS41bDAgMjMzYzAgNTkuNCA0OC41IDEwNy41IDEwOC4yIDEwNy41IDM3LjEgMCA2OS4zLTE4LjMgODktNDYuNGwxNC45IDE0LjdjNDIuMiA0MS45IDExMSA0MS45IDE1My4yIDBzNDIuMi0xMTAuMyAwLTE1Mi4xbC00MC44LTQwIC4xIDB6Il0KICAgIH07CiAgICBmYUNyaXRpY2FsUm9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcml0aWNhbC1yb2xlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2YzkiLCAiTTIyNS44IDBjLjMgLjIgMjE2LjYgMTI0LjUgMjE3LjEgMTI0LjcgMyAxLjIgMy43IDMuNSAzLjcgNi42LS4xIDgzLjQtLjEgMTY2LjkgMCAyNTAuNCAuMSAxLjItLjIgMi40LS44IDMuNHMtMS41IDEuOS0yLjYgMi40Yy0yMS40IDEyLTIwNy45IDExOC4zLTIxOC45IDEyNC42bC0zIDBjLTc5LjMtNDUuNy0yMTguMy0xMjUuNC0yMTguNC0xMjUuNS0uNi0uMy0xLjEtLjctMS40LTEuM3MtLjUtMS4yLS40LTEuOWMwLS45IDAtMjI1LjktLjEtMjUzLjEtLjEtMSAuMi0yIC43LTIuOXMxLjMtMS42IDIuMi0yQzI3LjIgMTEyLjEgMjEzLjIgNiAyMjQuMSAwbDEuOCAwek0yMTUuNCAyMC40bC0uMi0uMmMtNjQuNyAzNi45LTEyOS41IDczLjctMTk0LjIgMTEwLjYgMCAuMSAuMSAuMiAuMSAuNEw1MiAxNDIuOWMtNy43IDYtOC4zIDYtMTAuNiA1LjEtLjEgMC0yNC4yLTkuMy0yNi44LTEwbDAgMjMwLjRjLjktMS40IDY0LjEtMTEwLjkgNjQuMS0xMTEgMS42LTIuOCAzLTEuOSA5LjEtMS41IDEuNCAuMSAxLjUgLjIgLjggMS40LTQxLjIgNzEuMy0zNi40IDYzLTY3LjUgMTE2LjktLjggMS40LS42IDEuMSAxLjIgMS4xbDE4Ni41IDBjMS40IDAgMS43LS4yIDEuNy0xLjZsMC04LjljMC0xLjMgMi40LS44LTE4LjQtMS03LjUtLjEtMTQuMS0zLjItMjEuNC0xMi43LTcuNC05LjctMTQuNi0xOS40LTIxLjgtMjkuMi0yLjMtMy4xLTMuNC0yLjQtMTYuOC0yLjQtMS44IDAtMS44IDAtMS44IDEuOCAuMyAyNi4yIC4yIDI1LjMgMSAzMi43IC41IDQuNCAyLjIgNC4yIDkuNyA0LjggMy4xIC4zIDMuOSA0LjEgLjUgNC45LTEuNiAuNC0zMS42IC41LTMzLjctLjEtLjUtLjEtMS0uNS0xLjMtLjlzLS41LTEtLjQtMS42IC4zLTEuMSAuNi0xLjUgLjktLjcgMS40LS44YzMuMy0uOCA2LjIgLjggNi43LTQuNCAxLjMtMTMuNyAxLjItOSAxLjEtNzkuNCAwLTEwLjgtLjQtMTIuNi01LjQtMTMuNi0xLjItLjItMy41LS4yLTQuNy0uNi0yLjktMS0yLTQuOCAxLjgtNC44IDMzLjcgMCA0Ni4xLTEuMSA1Ni4xIDQuOSA3LjcgNC42IDEyIDExLjUgMTIuNSAyMC40IC45IDE0LjYtNi41IDIyLjMtMTUgMzIuNi0uMiAuMS0uMyAuMy0uNCAuNXMtLjEgLjQtLjEgLjYgMCAuNCAuMSAuNiAuMiAuNCAuNCAuNWMyLjYgMy4yIDUgNi42IDcuNyA5LjggMjcuNiAzMy4yIDI0LjEgMzAuNSA0MS4zIDMzLjEgLjkgLjEgMS0uNCAxLTEuMmwwLTExYzAtMSAuMy0xLjQgMS40LTEuMyA3LjggMS4yIDE1LjggMS4xIDIzLjYtLjMgMS4xLS4xIDEuNSAuMiAxLjUgMS4zIDAgLjEgLjkgMjYuNyAuOSAyNi44IDAgMS41IC43IDEuNiAxLjkgMS42bDE4Ni43IDBjLTI3LjItNDctNTQuMi05NC04MS4yLTE0MC44IDIuMy0uNy0uNCAwIDYuNy0xLjQgMi0uNCAyLjEtLjQgMy4xIDEuNCA3LjMgMTIuNiA3Ny4zIDEzNCA3Ny40IDEzNC4xbDAtMjMwLjRjLTEuNyAuNS0xMDMuMyAzOC43LTEwNS44IDM5LjctMS4xIC40LTEuNSAuMi0xLjktLjktLjYtMS45LTEuMy0zLjgtMi4xLTUuNi0uMy0uOC0uMS0xLjEgLjYtMS40IC4xIDAgOTUuNS0zNS44IDEwMy0zOC44LTY1LjQtMzcuNi0xMzAuNi03NS0xOTYtMTEyLjZsODYuOCAxNTAuNC0uMyAuM2MtOS42LS45LTEwLjUtMS42LTExLjgtMy45LTEtMS43LTczLjUtMTI3LjctODItMTQyLjItOS4xIDE0LjctODMuNiAxNDYuMi04NS40IDE0Ni4zLTIuOSAuMi01LjkgLjEtOS4yIC4xIDI4LjgtNDkuOCA1Ny42LTk5LjUgODYuMi0xNDlsMCAwem01MS45IDEyOS45YzEuOS0uMSAzLjctLjQgNS41LS44IDEuNy0uMyAyLjUgLjIgMi42IDEuOSAwIC4xIC4xIDE5LjEtLjkgMjAuNXMtMS45IDEuMi0yLjYtLjJjLTUtOS43IDYuMi05LjctMzkuMS0xMi0uNyAwLTEgLjItMSAuOSAwIC4xIDMuNyAxMjIgMy43IDEyMi4xIDAgLjkgLjUgMS4yIDEuMiAxLjUgMyAxLjIgNS45IDIuNSA4LjcgNCA3LjMgNC4zIDExLjQgMTAuOCAxMi40IDE5LjMgMS40IDExLjgtMi44IDM1LjgtMzIuMiAzNy4xLTIuOCAuMS0yOC4zIDEuMS0zNC4xLTIzLjMtNC43LTE5LjMgOC4zLTMyLjcgMTkuOS0zNi40IC42LS4xIDEuMi0uNCAxLjUtLjlzLjUtMS4xIC41LTEuN2MuMS01LjYgMy0xMDcuMSAzLjctMTIxLjMgMC0xLjEtLjYtMS4yLTEuNC0xLjEtMzIuMyAuNS0zNi43LS4zLTQwLjIgOC41LTIuNCA2LjItNC4xIDEuMy00IC4yIDEuMS02IDIuMi0xMiAzLjMtMTggLjQtMi4xIDEuNC0yLjYgMy40LTEuOSA1LjYgMi4xIDYuNyAxLjcgMzcuMiAxLjkgMS43IDAgMS44LS4xIDEuOC0xLjggLjctMjcuNSAuNi0yMi42IDEtMjkuNiAuMS0uNi0uMS0xLjItLjMtMS43cy0uNy0uOS0xLjMtMS4xYy01LjYtMi45LTguOC03LjYtOC45LTEzLjktLjQtMTQuOCAxNy43LTIxLjcgMjcuNC0xMS41IDYuOCA3LjIgNS44IDE4LjktMi41IDI0LjItLjggLjQtMS40IDEuMS0xLjggMS44cy0uNiAxLjYtLjQgMi41YzAgLjYtLjEtNC4zIDEgMzAgMCAuOSAuNCAxLjEgMS4yIDEuMSAuMSAwIDIzLS4xIDM0LjUtLjRsMC0uMXpNNjguMyAxNDEuN2MxOS44LTQuNSAzMi43LS42IDUyLjUgMS43IDIuOCAuMyAzLjcgMS4yIDMuNiA0LS4yIDUtMS4yIDIyLjMtMS4yIDIzLjEgMCAuNS0uMiAxLS41IDEuNHMtLjcgLjctMS4yIC45Yy00LjEgMS43LTMuNi00LjQtNC03LjMtMy4xLTIyLjQtNzMuOS0zMi43LTc0LjYgMjUuNC0uMyAyMy45IDE3IDUzLjYgNTQuMSA1MC45IDI3LjItMiAxOS0yMC4yIDI0LjgtMjAuNSAuNC0uMSAuOSAwIDEuMyAuMXMuOCAuNCAxLjEgLjcgLjUgLjcgLjYgMS4yIC4xIC45IDAgMS4zYy0xLjggMTAuOC0zLjQgMTktMy40IDE5LjItMS41IDkuMi04Ni43IDIyLjEtOTMuNC00Mi4xLTIuNy0yNS44IDEwLjQtNTMuNCA0MC4zLTYwLjJ6bTgwIDg3LjdsLTE5LjUgMGMtLjYgMC0xLjItLjEtMS42LS40cy0uOC0uOC0xLTEuNGMyLjQtMy44IDUuOSAuOSA1LjktNi4xLS4xLTI1LjggLjItMzggLjItNDAuMSAwLTMuNC0uNS00LjYtMy4zLTQuOS03LS43LTMuMS0zLjQtMS4xLTMuNCAxMS44LS4xIDIyLjYtLjIgMzAgLjcgOC44IDEuMSAxNi43IDEyLjYgNy45IDIyLjYtMiAyLjItNCA0LjQtNi4xIDYuNyAxIDEuMiA2LjkgOC44IDE3LjMgMTkuNyAyLjcgMi44IDYuMiAzLjUgOS45IDMuMSAuNiAwIDEuMS0uMiAxLjUtLjZzLjctLjkgLjctMS41Yy4zLTMuNCAuMyA0LjcgLjQtNDAuNiAwLTUuNi0uMy02LjYtMy4yLTYuOC00LS40LTQtMi4zLS43LTMuNGwxOS4xLS4xYy4zIDAgNC41IC41IDEgMy40IDAgMC0uMiAwLS4yIDAtMy42IC4zLTMuOSAxLTQgNC42LS4zIDQzLjkgLjEgNDAuMiAuNCA0Mi44IC4xIC44IC4zIDIuMiA1LjEgMi4xIDIuNSAwIDMuOSAzLjQgMCAzLjQtMTAuNCAuMS0yMC43IDAtMzEuMSAuMS0xMC43IDAtMTMuNS02LjItMjQuMi0yMC44LTEuNi0yLjItOC4zLTIuNC04LjItLjQgLjkgMTYuNSAwIDE3LjggNCAxNy43IDQuOC0uMSA0LjcgMy42IC44IDMuNWwuMSAwem0yNzUtMTAuMWMtMS4yIDcuMSAuMiAxMC40LTUuMyAxMC4zLTYxLjUtLjQtNDcuOC0uMi01MC43LS4zLTEuMi0uMS0yLjQtLjQtMy42LS43LTIuNS0uNiAxLjUtMS4yLS40LTUuNi0xLjQtMy40LTIuOC02LjgtNC4xLTEwLjItLjEtLjQtLjQtLjgtLjctMS4xcy0uOC0uNC0xLjMtLjRjLTQuOS0uMi05LjctLjItMTQuNiAuMS0uMyAwLS42IC4yLS45IC4zcy0uNSAuNC0uNyAuN2MtMS42IDMuNi0zLjEgNy4zLTQuNSAxMS0xLjMgMy4yIDcuOSAxLjMgMTIuMiAyLjIgMyAuNiA0LjUgMy43IC43IDMuN2wtMjYuNCAwYy0yLjkgMC0zLjEtMy4yLS43LTMuMiAxLjIgLjEgMi40LS4yIDMuNS0uOXMxLjktMS41IDIuNC0yLjZjMS41LTMgMi44LTYgNC4xLTkuMSAxOC4yLTQyLjEgMTcuMS00MC4yIDE4LjQtNDEuNiAuMi0uMiAuNC0uNCAuNy0uNnMuNi0uMiAuOC0uMiAuNiAuMSAuOCAuMiAuNSAuMyAuNyAuNmMyLjkgMy4zIDE4LjQgNDQuNyAyMy42IDUxLjkgMiAyLjcgNS43IDIgNi40IDIgMy42IC4xIDQtMS4xIDQuMS00LjMgLjEtMS45IC4xIDEuMiAuMS00MS4yIDAtNC41LTIuNC0zLjctNS42LTQuMy0uMyAwLTIuNi0uNi0uMS0zLjEgLjItLjItLjktLjIgMjEuNy0uMiAyLjMgMCA1LjMgMi44LTEuMiAzLjQtLjQgMC0uNyAwLTEuMSAuMnMtLjYgLjMtLjkgLjYtLjQgLjYtLjYgLjktLjIgLjctLjEgMS4xYy0uMSAxLjYtLjIgMzguOSAuMyA0MS4yIC4yIC43IC42IDEuNCAxLjIgMS44czEuMyAuNyAyLjEgLjZjMTMuMyAuNCAxNC45IC40IDE2LTMuNCAxLjctNS44IDQuMS0yLjUgMy43LS4ybDAgLjF6TTMxOC42IDI4My42Yy00LjIgMC00LjQtMy40LS42LTMuNCAzNS45LS4yIDI4LjEgLjQgMzcuMi0uNiAxLjctLjIgMi40IC4yIDIuMyAxLjktLjMgMy40LS42IDYuOC0xIDEwLjItLjIgMi4yLTMuMiAyLjYtMy40LS4yLS40LTUuMy0yLjItNC41LTE1LjYtNS4xLTEuNi0uMS0xLjYgMC0xLjYgMS41bDAgMTYuMWMwIDEuNyAwIDEuNiAxLjYgMS41IDMuMS0uMiAxMC4zIC4zIDE1LjctMS41IC41LS4yIDMuMy0xLjggMy4xIDEuOCAwIC4yLS44IDEwLjQtMS4yIDExLjQtLjUgMS4zLTEuOSAxLjUtMi42IC4zLTEuMi0yIDAtNS4xLTMuNy01LjMtMTUuNC0uOS0xMi45LTIuNS0xMi45IDYgMCAxMi4zLS44IDE2LjEgMy45IDE2LjIgMTYuNiAuNSAxNC40IDAgMTYuNC01LjcgLjgtMi40IDMuNS0xLjggMy4yIC42LS40IDMuMi0uOCA2LjQtMS4yIDkuNiAwIC40LS4yIDIuNC00LjcgMi40LTM3LjItLjEtMzQuNS0uMi0zNS4yLS4zLTIuNy0uNS0yLjItMyAuMi0zLjQgMS4xLS4yIDQgLjUgNC4yLTIuNiAyLjQtNTYuMi0uMS01MS4zLTMuOS01MS4zbDAgMHptLS40LTEwOS41YzIuNSAuNiAzLjEgMS44IDMgNC42LS4zIDUuMy0uMyA5LS42IDkuNy0uNyAyLjItMy4xIDIuMS0zLjMtLjMtLjQtNC44LTMtNy44LTcuNi05LjEtMjYuMy03LjctMzIuOCAxNS41LTI3LjIgMzAuMiA1LjkgMTUuNCAyMiAxNS45IDI4LjkgMTMuOCA1LjktMS45IDUuOS02LjUgNi45LTcuNiAxLjItMS4zIDIuMi0xLjggMy4xIDEuMSAwIC4xIC42IDExLjktNiAxMi43LTEuNiAuMi0xOS40IDMuNy0zMi43LTMuNC0yMS0xMS4yLTE2LjctMzUuNS02LjktNDUuMyAxNC0xNC4xIDM5LjktNy4xIDQyLjMtNi41bDAgMHpNMjg5LjggMjgwLjFjMy4zIDAgMy43IDMgLjIgMy40LTIuNiAuMy01LS40LTUgNS41IDAgMi0uMiAyOSAuNCA0MS40IC4xIDIuMyAxLjIgMy41IDMuNCAzLjcgMjIgMS4yIDE1LTEuNyAxOC44LTYuMyAxLjgtMi4yIDIuOCAuOCAyLjggMS4xIC4zIDEzLjYtNCAxMi40LTUuMiAxMi40bC0zOC4yLS4yYy0xLjktLjItMi4xLTMtLjQtMy40IDItLjUgNC45IC40IDUuMS0yLjggMS0xNS45IC42LTQ0LjYgLjMtNDcuOC0uMy0zLjgtMi44LTMuMy01LjctMy43LTIuNS0uNC0yLTMuMiAuMy0zLjIgMS40IDAgMTggMCAyMy4xIDB6bS0zMS42LTU3LjhjLjEgNC4xIDIuOSAzLjUgNiAzLjYgMi42IC4xIDIuNSAzLjQtLjEgMy40LTYuNSAwLTEzLjcgMC0yMS42LS4xLTMuOCAwLTMuNC0zLjQgMC0zLjQgNC41IDAgMy4yIDEuNiAzLjQtNDUuNSAwLTUuMS0zLjMtMy41LTQuNy00LjItMi42LTEuMi0xLjQtMy4xIC40LTMuMiAxLjMgMCAyMC4yLS40IDIxLjIgLjJzMS45IDEuNi0uNCAyLjljLTEgLjUtMy45LS4zLTQuMiAyLjUgMCAuMi0uOCAxLjYtLjEgNDMuOGwwIDB6TTIyMS4zIDQ5Ni42Yy41IC4zIDEgLjUgMS42IC41czEuMS0uMiAxLjYtLjVjMTctOS44IDE4Mi0xMDMuNiAxOTcuNC0xMTIuNS0uMS0uNCAxMS4zLS4yLTE4MS41LS4zLTEuMiAwLTEuNiAuNC0xLjUgMS42IDAgLjEgMS4zIDQ0LjUgMS4yIDUwLjQtLjEgMi42LS42IDUuMi0xLjQgNy43LS42IDEuOCAuNC0uNS0xMy41IDMyLjItLjcgMS43LTEgMi4yLTItLjEtNC4yLTEwLjMtOC4zLTIwLjctMTIuNi0zMS0xLjUtMy40LTIuMi03LjEtMi0xMC44IC4yLTIuNSAuOC0xNi4xIDEuNS00OCAwLTEuOSAwLTItMi0ybC0xODMgMGMyLjYgMS42IDE3OC4zIDEwMi42IDE5NiAxMTIuOGwuMSAwek0xMzAuNCAzMDcuOWMwIDIuNCAuNCAyLjggMi44IDMgMTEuNSAxLjIgMjEgMy43IDI1LjYtNy4zIDYtMTQuNSAyLjctMzQuNC0xMi41LTM4LjgtMi0uNi0xNi0yLjgtMTUuOSAxLjUgMCA4IDAgMTEuNiAwIDQxLjZ6bTEwNS44LTE1YzAgMi4xIDEuMSAzOC43IDEuMSAzOS4xIC4zIDkuOS0yNS42IDUuOC0yNS4yLTIuNiAuMS0yIDEuNC0zNy40IDEuMS0zOS40LTE0LjEgNy40LTE0LjQgNDAuMiA2LjQgNDguOCA0IDEuNyA4LjQgMS45IDEyLjUgLjZzNy42LTQgOS45LTcuN2M0LjktNy44IDYuOC0yOS41LTUuNC0zOS0uMSAuMS0uMiAuMS0uNCAuMWwwIDB6bS0xMi4zLTE5OGMtOS44IDAtOS43IDE0LjgtLjEgMTQuOXMxMC4xLTE0LjkgLjEtMTQuOWwwIDB6TTE0My43IDE5OC42YzAgMS44IC40IDIuNCAyLjIgMi42IDEzLjYgMS40IDEyLjUtMTEgMTIuMi0xMy40LTEuNy0xMS4yLTE0LjQtMTAuMi0xNC40LTcuOCAwIDQuNSAwIDEzLjcgMCAxOC42ek0zNTYgMjA1bC02LjEtMTUuOGMtMi4yIDUuNS00LjIgMTAuNi02LjIgMTUuOGwxMi4zIDB6Il0KICAgIH07CiAgICBmYVN0ZWFtU3ltYm9sID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0ZWFtLXN5bWJvbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y2IiwgIk0yNzMuNSAxNzcuNWE2MSA2MSAwIDEgMSAxMjIgMCA2MSA2MSAwIDEgMSAtMTIyIDB6bTE3NC41IC4yYzAgNjMtNTEgMTEzLjgtMTEzLjcgMTEzLjhMMjI1IDM3MS4zYy00IDQzLTQwLjUgNzYuOC04NC41IDc2LjgtNDAuNSAwLTc0LjctMjguOC04My02N0wwIDM1OCAwIDI1MC43IDk3LjIgMjkwYzE1LjEtOS4yIDMyLjItMTMuMyA1Mi0xMS41bDcxLTEwMS43QzIyMC43IDExNC41IDI3MS43IDY0IDMzNC4yIDY0IDM5NyA2NCA0NDggMTE1IDQ0OCAxNzcuN3pNMjAzIDM2M2MwLTM0LjctMjcuOC02Mi41LTYyLjUtNjIuNS00LjUgMC05IC41LTEzLjUgMS41bDI2IDEwLjVjMjUuNSAxMC4yIDM4IDM5IDI3LjcgNjQuNS0xMC4yIDI1LjUtMzkuMiAzOC02NC43IDI3LjUtMTAuMi00LTIwLjUtOC4zLTMwLjctMTIuMiAxMC41IDE5LjcgMzEuMiAzMy4yIDU1LjIgMzMuMiAzNC43IDAgNjIuNS0yNy44IDYyLjUtNjIuNXpNNDEwLjUgMTc3LjdhNzYuNCA3Ni40IDAgMSAwIC0xNTIuOCAwIDc2LjQgNzYuNCAwIDEgMCAxNTIuOCAweiJdCiAgICB9OwogICAgZmFNYWlsY2hpbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFpbGNoaW1wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1OWUiLCAiTTMzMSAyNDMuNWMzLjEtLjQgNi4yLS40IDkuMyAwIDEuNy0zLjggMi0xMC40IC41LTE3LjYtMi4yLTEwLjctNS4zLTE3LjEtMTEuNS0xNi4xcy02LjUgOC43LTQuMiAxOS40YzEuMyA2IDMuNSAxMS4xIDYgMTQuM2wwIDB6TTI3Ny40IDI1MmM0LjUgMiA3LjIgMy4zIDguMyAyLjEgMS45LTEuOS0zLjUtOS40LTEyLjEtMTMuMS01LTIuMS0xMC40LTIuOC0xNS44LTIuMnMtMTAuNSAyLjctMTQuOCA1LjhjLTMgMi4yLTUuOCA1LjItNS40IDcuMSAuOSAzLjcgMTAtMi43IDIyLjYtMy41IDctLjQgMTIuOCAxLjggMTcuMyAzLjdsMCAwem0tOSA1LjFjLTkuMSAxLjQtMTUgNi41LTEzLjUgMTAuMSAuOSAuMyAxLjIgLjggNS4yLS44IDYtMi4zIDEyLjQtMi45IDE4LjctMS45IDIuOSAuMyA0LjMgLjUgNC45LS41IDEuNS0yLjItNS43LTgtMTUuNC02LjlsMCAwem01NC4yIDE3LjFjMy40LTYuOS0xMC45LTEzLjktMTQuMy03czEwLjkgMTMuOSAxNC4zIDdsMCAwem0xNS43LTIwLjVjLTcuNy0uMS04IDE1LjgtLjMgMTUuOXM4LTE1LjggLjMtMTZsMCAwek0xMTkuNSAzMzIuN2MtMS4zIC4zLTYgMS41LTguNS0yLjMtNS4yLTggMTEuMS0yMC40IDMtMzUuOC05LjEtMTcuNS0yNy44LTEzLjUtMzUtNS41LTguNyA5LjYtOC43IDIzLjUtNSAyNC4xIDQuMyAuNiA0LjEtNi41IDcuNC0xMS42IC45LTEuNCAyLjEtMi42IDMuNS0zLjZzMy0xLjYgNC42LTIgMy40LS40IDUgMCAzLjMgMSA0LjcgMS45YzExLjYgNy42IDEuNCAxNy44IDIuMyAyOC42IDEuNCAxNi43IDE4LjQgMTYuNCAyMS42IDkgLjItLjQgLjMtLjggLjMtMS4ycy0uMi0uOC0uNS0xLjFjMCAuOSAuNy0xLjMtMy40LS40bDAgMHptMjk5LjctMTcuMWMtMy4zLTExLjctMi42LTkuMi02LjgtMjAuNSAyLjQtMy43IDE1LjMtMjQtMy4xLTQzLjMtMTAuNC0xMC45LTMzLjktMTYuNS00MS4xLTE4LjUtMS41LTExLjQgNC42LTU4LjctMjEuNS04MyAyMC44LTIxLjYgMzMuOC00NS4zIDMzLjctNjUuNy0uMS0zOS4yLTQ4LjItNTEtMTA3LjQtMjYuNWwtMTIuNSA1LjNjLS4xIDAtMjIuNy0yMi4zLTIzLjEtMjIuNi02Ny41LTU4LjktMjc4LjggMTc1LjktMjExLjMgMjMyLjlsMTQuOCAxMi41Yy00IDEwLjctNS40IDIyLjItNC4xIDMzLjUgMy40IDMzLjQgMzYgNjAuNCA2Ny41IDYwLjQgNTcuNyAxMzMuMSAyNjcuOSAxMzMuMyAzMjIuMyAzIDEuNy00LjUgOS4xLTI0LjYgOS4xLTQyLjRzLTEwLjEtMjUuMy0xNi41LTI1LjNsMCAwem0tMzE2IDQ4LjJjLTIyLjgtLjYtNDcuNS0yMS4xLTQ5LjktNDUuNS02LjItNjEuMyA3NC4zLTc1LjMgODQtMTIuMyA0LjUgMjkuNi00LjcgNTguNS0zNC4xIDU3LjhsMCAwek04NC43IDI0OS42Yy0xNS4yIDMtMjguNSAxMS41LTM2LjcgMjMuNS00LjktNC4xLTE0LTEyLTE1LjYtMTUtMTMtMjQuOCAxNC4yLTczIDMzLjMtMTAwLjIgNDcuMS02Ny4yIDEyMC45LTExOC4xIDE1NS0xMDguOSA1LjUgMS42IDIzLjkgMjIuOSAyMy45IDIyLjlzLTM0LjEgMTguOS02NS44IDQ1LjNDMTM2LjIgMTUwIDEwNCAxOTcuNyA4NC43IDI0OS42ek0zMjMuNiAzNTAuN3MtMzUuNyA1LjMtNjkuNS03LjFjNi4yLTIwLjIgMjcgNi4xIDk2LjQtMTMuOCAxNS4zLTQuNCAzNS40LTEzIDUxLTI1LjQgMy40IDcuOCA1LjggMTUuOSA3LjEgMjQuMyAzLjctLjcgMTQuMi0uNSAxMS40IDE4LjEtMy4zIDE5LjktMTEuNyAzNi0yNS45IDUwLjgtOC45IDkuNi0xOS40IDE3LjUtMzEuMiAyMy4zLTYuNSAzLjQtMTMuMyA2LjMtMjAuMyA4LjYtNTMuNSAxNy41LTEwOC4zLTEuNy0xMjYtNDMtMS40LTMuMS0yLjYtNi40LTMuNi05LjctNy41LTI3LjItMS4xLTU5LjggMTguOC04MC40IDEuMi0xLjMgMi41LTIuOSAyLjUtNC44LS4yLTEuNy0uOC0zLjMtMS45LTQuNS03LTEwLjEtMzEuMi0yNy40LTI2LjMtNjAuOCAzLjUtMjQgMjQuNS00MC45IDQ0LjEtMzkuOWw1IC4zYzguNSAuNSAxNS45IDEuNiAyMi45IDEuOSAxMS43IC41IDIyLjItMS4yIDM0LjYtMTEuNiA0LjItMy41IDcuNi02LjUgMTMuMy03LjUgMi4zLS42IDQuNy0uNyA3LS4zczQuNiAxLjIgNi42IDIuNWMxMCA2LjYgMTEuNCAyMi43IDExLjkgMzQuNSAuMyA2LjcgMS4xIDIzIDEuNCAyNy42IC42IDEwLjcgMy40IDEyLjIgOS4xIDE0IDMuMiAxIDYuMiAxLjggMTAuNSAzLjEgMTMuMiAzLjcgMjEgNy41IDI2IDEyLjMgMi41IDIuNSA0LjIgNS44IDQuNyA5LjMgMS42IDExLjQtOC44IDI1LjQtMzYuMyAzOC4yLTQ2LjcgMjEuNy05My43IDE0LjQtMTAwLjUgMTMuNy0yMC4yLTIuNy0zMS42IDIzLjMtMTkuNSA0MS4xIDIyLjYgMzMuNCAxMjIuNCAyMCAxNTEuNC0yMS40IC43LTEgLjEtMS42LS43LTEtNDEuOCAyOC42LTk3LjEgMzguMi0xMjguNSAyNi00LjgtMS44LTE0LjctNi40LTE1LjktMTYuNyA0My42IDEzLjUgNzEgLjcgNzEgLjdzMi0yLjgtLjYtMi41ek0xNzEuNyAxNTcuNWMxNi43LTE5LjQgMzcuNC0zNi4yIDU1LjgtNDUuNiAuMS0uMSAuMy0uMSAuNS0uMXMuMyAuMSAuNCAuMiAuMiAuMyAuMiAuNCAwIC4zLS4xIC41Yy0xLjUgMi43LTQuMyA4LjMtNS4yIDEyLjcgMCAuMSAwIC4zIDAgLjRzLjIgLjMgLjMgLjQgLjMgLjEgLjQgLjEgLjMgMCAuNC0uMWMxMS41LTcuOCAzMS41LTE2LjIgNDktMTcuMyAuMiAwIC4zIDAgLjUgLjFzLjIgLjIgLjMgLjQgLjEgLjMgMCAuNS0uMSAuMy0uMyAuNGMtMi45IDIuMi01LjUgNC44LTcuNyA3LjctLjEgLjEtLjEgLjItLjEgLjRzMCAuMyAuMSAuNCAuMiAuMiAuMyAuMyAuMiAuMSAuNCAuMWMxMi4zIC4xIDI5LjcgNC40IDQxIDEwLjcgLjggLjQgLjIgMS45LS42IDEuNy02OS41LTE1LjktMTIzLjEgMTguNS0xMzQuNSAyNi44LS4yIC4xLS4zIC4xLS41IC4xcy0uMy0uMS0uNS0uMi0uMi0uMy0uMi0uNSAuMS0uNCAuMi0uNWwtLjEgMHoiXQogICAgfTsKICAgIGZhTHVtb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHVtb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTdlMiIsICJNNDUyLjUgMjIzLjVjOS44IDAgMTYuNSA2LjMgMTYuNSAxNi42bDAgMzEuOGMwIDEwLjMtNi42IDE2LjYtMTYuNiAxNi42bC01Ni4yIDBjLTkuOCAwLTE2LjUtNi4zLTE2LjUtMTYuNmwwLTMxLjhjMC0xMC4zIDYuNy0xNi42IDE2LjUtMTYuNmw1Ni4zIDB6bS0yNS43IDEzLjFjLTEuNS0yLjYtMy4yLTIuNi00LjYgMGwtMTAuNyAxNy42Yy0xLjcgMi40LTIuNiA1LjEtMi42IDguMiAwIDcuOSA2LjkgMTQuNiAxNS42IDE0LjYgOC41IDAgMTUuNi02LjcgMTUuNi0xNC42IDAtMy0xLTUuOC0yLjctOC4ybC0xMC43LTE3LjZ6TTg1LjggMjIzLjhjMSAwIDEuNSAuNiAxLjUgMS41bDAgNTAuMyA2NC42IDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgOS43YzAgLjktLjYgMS41LTEuNiAxLjVsLTc4LjQgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptODguMyAwYzEgMCAxLjUgLjYgMS41IDEuNWwwIDQ1YzAgNCAyIDUuMiA1LjcgNS4ybDQ2LjkgMGMzLjggMCA1LjctMS4zIDUuNy01LjJsMC00NWMwLS45IC41LTEuNSAxLjUtMS41bDEyLjMgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA0NmMwIDEwLjUtNS4zIDE2LjgtMTcuNiAxNi44bC01NCAwYy0xMi4zIDAtMTcuNi02LjMtMTcuNi0xNi44bDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDB6bTEwOC4yIDBjMSAwIDEuNiAuNSAyLjIgMS40bDMwLjUgNDYuNCAxLjQgMCAzMC41LTQ2LjRjLjYtLjkgMS4yLTEuNCAyLjItMS40bDE4IDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNjEuNGMwIC45LS41IDEuNS0xLjUgMS41bC0xMi4zIDBjLTEgMC0xLjYtLjYtMS42LTEuNWwwLTQzLjgtMS4xIDAtMjguNyA0My44Yy0uNiAuOS0xLjMgMS41LTIuNCAxLjVsLTEwLjcgMGMtMSAwLTEuNy0uNi0yLjMtMS41bC0yOC43LTQzLjgtMS4xIDAgMCA0My44YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE3LjkgMHptMjE0LjQgMGMuOSAwIDEuMyAuNCAyLjIgMS4xbDUyLjcgNDYuMyAxLjMgMCAwLTQ2YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDYxLjRjMCAuOS0uNiAxLjUtMS42IDEuNWwtMTQuNCAwYy0xIDAtMS40LS40LTIuMy0xLjFsLTUyLjYtNDYuMy0xLjQgMCAwIDQ2YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE0LjQgMHpNMzIwIDExNC4xYzg3LjkgMCAxNjcuNyAxNS43IDIyNS41IDQxbDIuNyAxLjJDNTg3LjEgMTczLjggNjQwIDIwNi41IDY0MCAyNTZzLTUyLjkgODIuMi05MS44IDk5LjZsLTIuNyAxLjJjLTU3LjggMjUuNC0xMzcuNiA0MS0yMjUuNSA0MS03Ni4yIDAtMTU1LjEtMTAuNS0yMjUuNS00MS0zOS42LTE3LjQtOTQuNS01MC4zLTk0LjUtMTAwLjhzNTQuOS04My41IDk0LjUtMTAwLjhjNzAuNC0zMC41IDE0OS4zLTQxIDIyNS41LTQxem0tODguOSAyMjljMjAuMyAyOSA1Mi44IDQ5LjYgODguOSA0OS42IDM2LjIgMCA2OC43LTIwLjYgODktNDkuN2wtMTc3LjkgLjF6bS05Ni4xIDBjNDMuMyAyOS43IDk2LjcgNDMuNSAxNDguNCA0OC0yNC4yLTkuMS00NC40LTI2LjctNTguNi00OC4xbC04OS45IDB6bTI4MC4zLS4xYy0xNC4yIDIxLjQtMzQuNCAzOS4xLTU4LjYgNDguMSA1MS44LTQuNSAxMDUuMy0xOC4zIDE0OC42LTQ4LjJsLTkwIDB6bS0zMzcuNCAuMWM0NC4xIDIzLjEgOTMuNyAzNS40IDE0Mi43IDQyLjYtMzMuNC04LjYtNjYuNS0yMS45LTk0LjQtNDIuNmwtNDguMyAwem00MzYuMi0uMmMtMjcuOSAyMC44LTYxLjEgMzQuMi05NC42IDQyLjggNDcuMy02LjkgODkuNi0xOC41IDEyMy45LTMzLjZsMS43LS44YzYuMS0yLjcgMTEuOS01LjUgMTcuNC04LjRsLTQ4LjUgMHpNNTIwIDE3My42YzEwLjcgOC43IDE5LjggMTguMSAyNyAyOC4yIC40IC42IC41IDEuMyAuMSAycy0xIDEtMS43IDFsLTEuNiAwYy0uNiAwLTEuMi0uMy0xLjUtLjgtNy45LTEwLjktMTguMi0yMS4xLTMwLjYtMzAuNGwtOTMuNSAwYzUuNCA4LjggOS45IDE4LjUgMTMuNCAyOC42IC4yIC42IC4xIDEuMi0uMiAxLjdzLS45IC44LTEuNiAuOGwtMS40IDBjLS44IDAtMS41LS41LTEuOC0xLjMtMy44LTEwLjctOC43LTIwLjgtMTQuNS0yOS45bC0xODQuMyAuMWMtNS44IDkuMS0xMC43IDE5LjEtMTQuNCAyOS44LS4zIC44LTEgMS4zLTEuOCAxLjNsLTEuNCAwYy0uNiAwLTEuMi0uMy0xLjYtLjhzLS41LTEuMS0uMi0xLjdjMy41LTEwLjIgOC0xOS43IDEzLjQtMjguNmwtOTMuNiAwYy0xMi4zIDkuMy0yMi42IDE5LjQtMzAuNCAzMC4zLS40IC41LS45IC44LTEuNSAuOGwtMS42IDBjLS43IDAtMS40LS40LTEuNy0xcy0uMy0xLjQgLjEtMmM3LjYtMTAuNSAxNi43LTE5LjkgMjYuOC0yOGwtNTEgMGMtMjguOSAxNi42LTYyIDQzLjMtNjMuNSA3OS43bDQ0LjcgMGMuNSAwIDEgLjIgMS4zIC42cy42IC44IC42IDEuM2wwIDEuM2MwIDEuMS0uOSAxLjktMS45IDEuOWwtNDQuNyAwQzYuOCAyOTUgNDAgMzIxLjcgNjkgMzM4LjNsNTAuOSAwYy0xMC4zLTguNC0xOS4xLTE3LjQtMjYuMS0yN2wtLjgtMS4xYy0uNC0uNi0uNS0xLjMtLjEtMnMxLTEgMS43LTFsMS42IDAgLjIgMGMuNSAuMSAxIC4zIDEuMyAuOCA3LjkgMTAuOSAxOC4xIDIxIDMwLjUgMzAuM2w5My42IDBjLTUuMy04LjgtOS44LTE4LjQtMTMuNC0yOC41LS4yLS42LS4xLTEuMiAuMi0xLjdzLjktLjggMS42LS44bDEuNCAwIC4yIDBjLjcgLjEgMS40IC42IDEuNyAxLjMgMy44IDEwLjcgOC42IDIwLjcgMTQuNCAyOS44bDE4NC41LS4xYzUuOC05LjEgMTAuNi0xOS4xIDE0LjQtMjkuN2wuMS0uMWMuMy0uNyAxLTEuMSAxLjctMS4xbDEuNCAwYy42IDAgMS4yIC4zIDEuNiAuOHMuNSAxLjIgLjIgMS43Yy0zLjUgMTAuMS04IDE5LjctMTMuMyAyOC41bDkzLjcgMGMxMi4zLTkuMyAyMi41LTE5LjQgMzAuMy0zMC4ybC4xLS4yYy40LS40IC45LS42IDEuNC0uNmwxLjYgMGMuNyAwIDEuNCAuNCAxLjcgMXMuMyAxLjQtLjEgMmMtNy4xIDEwLTE2LjEgMTkuMy0yNi43IDI3LjlsNTEuMSAwYzI4LjgtMTYuNiA2MS44LTQzLjMgNjMuNC03OS42bC00NC43IDBjLTEgMC0xLjktLjktMS45LTEuOWwwLTEuM2MwLTEuMSAuOS0xLjkgMS45LTEuOWw0NC43IDBjLTEuNi0zNi41LTM0LjktNjMuMy02My45LTc5LjlsLTUwLjkgMHpNMjIwLjUgMTI2LjJjLTQ5LjEgNy4xLTk4LjcgMTkuNS0xNDMgNDIuN2w0OC40IDBjMjcuOS0yMC44IDYxLTM0LjEgOTQuNS00Mi43em02Mi44LTUuNGMtNTEuOCA0LjUtMTA1LjIgMTguMy0xNDguNiA0OC4xbDkwIDBjMTQuMi0yMS40IDM0LjQtMzkgNTguNi00OC4xem0zNi42LTEuNmMtMzYuMiAwLTY4LjcgMjAuNi04OSA0OS43bDE3Ny45LS4xYy0yMC4zLTI5LjEtNTIuNy00OS42LTg4LjktNDkuNnptMzYuNiAxLjZjMjQuMiA5LjEgNDQuNCAyNi42IDU4LjUgNDhsODkuOCAwYy00My4zLTI5LjctOTYuNi00My41LTE0OC4zLTQ4em02Mi44IDUuNGMzMy40IDguNSA2Ni40IDIxLjkgOTQuMyA0Mi41bDQ4LjMgMGMtNDQuMS0yMy4xLTkzLjYtMzUuNC0xNDIuNi00Mi41eiJdCiAgICB9OwogICAgZmFOdXRyaXRpb25peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJudXRyaXRpb25peCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Q2IiwgIk0xMTIgOC4xUzI0NS40LS4xIDIzMyAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44ek00MjQgMzIzLjdjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OC0yMi4zLTM3LTMyLTgzLjgtMzItMTMyLjMgMC00OC40IDE3LjctOTQuNyA0MC0xMzEuNyA0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTE0NCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yMTYgNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMjg4IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM2MCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0zODQgMjU2Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTMTE4LjggMTgwLjEgODAgMjAwYy04LjggMTkuNS0xMS4yIDMzLjktMTYgNTYgNDIuMi03LjkgOTguNy0xNC44IDE2MC0xNC44czExNy44IDYuOSAxNjAgMTQuOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYxIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwNyAyMDUuNmMtNC43IDAtOSAyLjgtMTAuNyA3LjJsLTQgOS41LTExLTkyLjhjLTEuNy0xMy45LTIyLTEzLjQtMjMuMSAuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43LTQzLjkgMCAwIDIzLjIgNTEuMyAwYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yIC4ybDQuNi01OC42IDQuOSA2NC40YzEuMSAxNC4zIDIyIDE0LjIgMjMuMSAuMWw2LjgtODMgMi43IDIyLjNjMS40IDExLjggMTcuNyAxNC4xIDIyLjMgMy4xbDE4LTQzLjQgNTAuNSAwIDAtMjMuMi01OC40IC4zem0tNzggNS4ybC0yMS45IDAgMCAyMS45YzAgNC4xLTMuMyA3LjUtNy41IDcuNS00LjEgMC03LjUtMy4zLTcuNS03LjVsMC0yMS45LTIxLjkgMGMtNC4xIDAtNy41LTMuMy03LjUtNy41IDAtNC4xIDMuNC03LjUgNy41LTcuNWwyMS45IDAgMC0yMS45YzAtNC4xIDMuNC03LjUgNy41LTcuNXM3LjUgMy4zIDcuNSA3LjVsMCAyMS45IDIxLjkgMGM0LjEgMCA3LjUgMy4zIDcuNSA3LjUgMCA0LjEtMy40IDcuNS03LjUgNy41eiJdCiAgICB9OwogICAgZmFSZWRoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVkaGF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YmMiLCAiTTM0MS41IDI4NS42YzMzLjcgMCA4Mi4zLTYuOSA4Mi4zLTQ3IC4yLTYuNyAuOS0xLjgtMjAuOS05Ni4yLTQuNi0xOS4xLTguNy0yNy44LTQyLjMtNDQuNi0yNi4xLTEzLjMtODIuOS0zNS40LTk5LjctMzUuNC0xNS43IDAtMjAuMiAyMC4yLTM4LjkgMjAuMi0xOCAwLTMxLjMtMTUuMS00OC4xLTE1LjEtMTYuMSAwLTI2LjcgMTEtMzQuOCAzMy42LTI3LjUgNzcuNi0yNi4zIDc0LjMtMjYuMSA3OC4zIDAgMjQuOCA5Ny42IDEwNi4xIDIyOC41IDEwNi4xek00MjkgMjU0LjhjNC43IDIyIDQuNyAyNC4zIDQuNyAyNy4yIDAgMzcuNy00Mi4zIDU4LjYtOTggNTguNi0xMjUuNyAuMS0yMzUuOS03My42LTIzNS45LTEyMi4zIDAtNi44IDEuNC0xMy41IDQuMS0xOS43LTQ1LjIgMi4zLTEwMy44IDEwLjMtMTAzLjggNjIgMCA4NC43IDIwMC42IDE4OSAzNTkuNSAxODkgMTIxLjggMCAxNTIuNS01NS4xIDE1Mi41LTk4LjYgMC0zNC4yLTI5LjYtNzMtODIuOS05Ni4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVQaWVkUGlwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBpZWQtcGlwZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGllZC1waXBlci1zcXVhcmUiXSwgImUwMWUiLCAiTTMyLjEgNDE5bC0zMiA2MC4yIC44LTMyOEMuOSA4NS4zIDU0LjEgMzIgMTIwLjEgMzJsMzI3LjIgMEMzNTQuMyA2MC45IDI1Ny40IDEyNi4yIDE5My40IDIwMC42IDEyMi44IDI4MiA4Mi43IDMzOCAzMi4xIDQxOXptNDE2LTM4N1MzMDUuMyA5OC44IDI2MS43IDE5OS4xYy0yMy4yIDUzLjYtMjguOSAxMTguMS03MSAxNTguNi0yOC45IDI3LjgtNjkuOCAzOC4yLTEwNS4zIDU2LjMtMjMuMiAxMi02Ni40IDQwLjUtODQuOSA2NmwzMjguNCAwYzY2IDAgMTE5LjMtNTMuMyAxMTkuMy0xMTkuMi0uMSAwLS4xLTMyOC44LS4xLTMyOC44eiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJTcXVhcmUgPSBmYVNxdWFyZVBpZWRQaXBlcjsKICAgIGZhV2hhdHNhcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2hhdHNhcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIzMiIsICJNMzgwLjkgOTcuMWMtNDEuOS00Mi05Ny43LTY1LjEtMTU3LTY1LjEtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODAgMTE3LjcgNDQ5LjFjMzIuNCAxNy43IDY4LjkgMjcgMTA2LjEgMjdsLjEgMGMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguMyAxOC42LTY4LjEtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjFzNTYuMiA4MS4yIDU2LjEgMTMwLjVjMCAxMDEuOC04NC45IDE4NC42LTE4Ni42IDE4NC42ek0zMjUuMSAzMDAuNWMtNS41LTIuOC0zMi44LTE2LjItMzcuOS0xOC01LjEtMS45LTguOC0yLjgtMTIuNSAyLjhzLTE0LjMgMTgtMTcuNiAyMS44Yy0zLjIgMy43LTYuNSA0LjItMTIgMS40LTMyLjYtMTYuMy01NC0yOS4xLTc1LjUtNjYtNS43LTkuOCA1LjctOS4xIDE2LjMtMzAuMyAxLjgtMy43IC45LTYuOS0uNS05LjdzLTEyLjUtMzAuMS0xNy4xLTQxLjJjLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4ycy05LjcgMS40LTE0LjggNi45Yy01LjEgNS42LTE5LjQgMTktMTkuNCA0Ni4zczE5LjkgNTMuNyAyMi42IDU3LjRjMi44IDMuNyAzOS4xIDU5LjcgOTQuOCA4My44IDM1LjIgMTUuMiA0OSAxNi41IDY2LjYgMTMuOSAxMC43LTEuNiAzMi44LTEzLjQgMzcuNC0yNi40czQuNi0yNC4xIDMuMi0yNi40Yy0xLjMtMi41LTUtMy45LTEwLjUtNi42eiJdCiAgICB9OwogICAgZmFJbWRiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImltZGIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkOCIsICJNODkuNSAzMjMuNmwtMzUuNiAwIDAtMTM3LjQgMzUuNiAwIDAgMTM3LjR6bTY2LjYtNzMuMWw5LjEtNjQuMyA0Ni4zIDAgMCAxMzcuNC0zMSAwIDAtOTIuNy0xMy40IDkyLjctMjEuMyAwLTEzLTkwLjctLjEgOTAuNy0zMS4yIDAgMC0xMzcuNCA0Ni4xIDBjLjUgOC4zIDIuOCAxOC4xIDQuMyAyOS40bDQuMiAzNC45em02Ny42IDczLjFsMC0xMzcuNCAyNi42IDBjMTcgMCAyNyAuOSAzMyAyLjQgNi4xIDEuNyAxMC43IDQuMiAxMy45IDcuOSAzLjEgMy4zIDUuMSA2LjYgNS44IDEyIC45IDQuNCAxLjQgMTMuMSAxLjQgMjYuMmwwIDQ4LjJjMCAxMi4zLS43IDIwLjUtMS45IDI0LjctMS4xIDQuMS0zLjEgNy40LTYgOS43LTIuOCAyLjQtNi40IDQuMS0xMC43IDUtNC4yIC44LTEwLjYgMS4zLTE5LjEgMS4zbC00MyAwem0zNS41LTExMy45bDAgODkuNGM1LjEgMCA4LjMtMSA5LjQtMi4zIDEuMS0yIDEuOC03LjYgMS44LTE2LjdsMC01My4zYzAtNi4yLS4xLTEwLjItLjctMTItLjMtMS44LTEuMi0zLTIuNi00LjctMS40IDAtNC4xLS40LTcuOS0uNHptNTcuMyAxMTMuOWwwLTEzNy40IDM0LjEgMCAwIDQzLjljMi45LTIuNCA2LjEtNC45IDkuNS02LjYgMy42LTEuNSA4LjgtMi40IDEyLjgtMi40IDQuOCAwIDguOSAuOCAxMi4zIDIuMiAzLjQgMS41IDYgMy41IDggNi4yIDEuNyAyLjYgMi43IDUuMyAzLjEgNy44IC40IDIuNi0uMiA4LS4yIDE2LjJsMCAzOC42YzAgOC4yIC4yIDE0LjMtLjggMTguNC0xLjEgNC0zLjggNy42LTcuOCA5LjYtNC4xIDMuOS04LjkgNS4zLTE0LjYgNS4zLTQgMC05LjItLjktMTIuNy0yLjUtMy41LTEuOC02LjctNC41LTkuNi04bC0yLjEgOC43LTMyIDB6bTQ1LjEtMjAuN2MuNy0xLjggMS02IDEtMTIuNWwwLTM1LjRjMC01LjYtLjMtOS41LTEuMS0xMS4yLS43LTEuOS0zLjctMi43LTUuOC0yLjctMiAwLTMuNCAuOC00LjEgMi4zLS42IDEuNS0xIDUuNC0xIDExLjZsMCAzNi40YzAgNi4xIC40IDEwIDEuMiAxMS42IC42IDEuNyAyLjEgMi41IDQuMSAyLjUgMi4yIDAgNC4yLS44IDUuNy0yLjZ6TTQxOC40IDMyYzE1LjcgMS4yIDI4LjcgMTUuMiAyOC43IDMxLjlsMCAzODQuMmMwIDE2LjQtMTEuOSAzMC40LTI4LjIgMzEtLjMgMC0uNSAuOS0uOCAuOUwyOS45IDQ4MGMtLjMgMC0uNi0uOS0uOC0uMS0xNS43LTEuNC0yNy45LTEzLjgtMjktMzAuMkwwIDYxLjhDMS4xIDQ1LjkgMTMuOCAzMy4xIDMwLjMgMzEuMWwzODcuNCAwYy4yIDAgLjUgLjkgLjcgLjl6TTMwLjMgNDEuM0MxOSA0MiAxMCA1MSA5LjMgNjIuNGwwIDM4Ny4zYy40IDUuNCAyLjcgMTAuNSA2LjQgMTQuMyAzLjggMy45IDguOCA2LjMgMTQuMiA2LjdsMzg4LjIgMGMxMS41LTEgMjAuNi0xMS42IDIwLjYtMjIuNmwwLTM4NC4yYzAtNS43LTIuMS0xMS4zLTYtMTUuNXMtOS4zLTYuOC0xNS03LjJsLTM4Ny40IDB6Il0KICAgIH07CiAgICBmYVB5dGhvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJweXRob24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMiIsICJNNDM5LjggMjAwLjVjLTcuNy0zMC45LTIyLjMtNTQuMi01My40LTU0LjJsLTQwLjEgMCAwIDQ3LjRjMCAzNi44LTMxLjIgNjcuOC02Ni44IDY3LjhsLTEwNi44IDBjLTI5LjIgMC01My40IDI1LTUzLjQgNTQuM2wwIDEwMS44YzAgMjkgMjUuMiA0NiA1My40IDU0LjMgMzMuOCA5LjkgNjYuMyAxMS43IDEwNi44IDAgMjYuOS03LjggNTMuNC0yMy41IDUzLjQtNTQuM2wwLTQwLjctMTA2LjcgMCAwLTEzLjYgMTYwLjIgMGMzMS4xIDAgNDIuNi0yMS43IDUzLjQtNTQuMiAxMS4yLTMzLjUgMTAuNy02NS43IDAtMTA4LjZ6TTI4Ni4yIDQ0NC43YTIwLjQgMjAuNCAwIDEgMSAwLTQwLjcgMjAuNCAyMC40IDAgMSAxIDAgNDAuN3pNMTY3LjggMjQ4LjFsMTA2LjggMGMyOS43IDAgNTMuNC0yNC41IDUzLjQtNTQuM2wwLTEwMS45YzAtMjktMjQuNC01MC43LTUzLjQtNTUuNi0zNS44LTUuOS03NC43LTUuNi0xMDYuOCAuMS00NS4yIDgtNTMuNCAyNC43LTUzLjQgNTUuNmwwIDQwLjcgMTA2LjkgMCAwIDEzLjYtMTQ3IDBjLTMxLjEgMC01OC4zIDE4LjctNjYuOCA1NC4yLTkuOCA0MC43LTEwLjIgNjYuMSAwIDEwOC42IDcuNiAzMS42IDI1LjcgNTQuMiA1Ni44IDU0LjJsMzYuNyAwIDAtNDguOGMwLTM1LjMgMzAuNS02Ni40IDY2LjgtNjYuNHpNMTYxLjIgNjQuN2EyMC40IDIwLjQgMCAxIDEgMCA0MC44IDIwLjQgMjAuNCAwIDEgMSAwLTQwLjh6Il0KICAgIH07CiAgICBmYUNhc2hBcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2FzaC1hcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTdkNCIsICJNNDQwLjMgOTYuOWMtOS40LTI2LjUtMzAuMy00Ny40LTU2LjgtNTctMjQuMS03LjktNDYuMy03LjktOTEuNi03LjlMMTU2IDMyYy00NC44IDAtNjcuMiAwLTkxLjMgNy41LTI2LjUgOS42LTQ3LjQgMzAuNS01NyA1Ny03LjcgMjQuMy03LjcgNDYuNy03LjcgOTEuN0wwIDMyMy44YzAgNDUuMiAwIDY3LjQgNy41IDkxLjUgOS42IDI2LjUgMzAuNSA0Ny40IDU3IDU3IDI0LjMgNy43IDQ2LjcgNy43IDkxLjYgNy43bDEzNS43IDBjNDUgMCA2Ny40IDAgOTEuNi03LjcgMjYuNS05LjYgNDcuNC0zMC41IDU3LTU3IDcuNy0yNC4zIDcuNy00Ni43IDcuNy05MS41bDAtMTM1LjVjMC00NSAwLTY3LjQtNy43LTkxLjV6TTMyMy4xIDE4NS40bC0yNS44IDIxLjFjLTIuMyAxLjktNS41IDEuNS03LjMtLjktMTMuMi0xNi4yLTMzLjctMjUuNC01Ni4xLTI1LjQtMjUgMC00MC42IDEwLjktNDAuNiAyNi4yLS40IDEyLjggMTEuNyAxOS42IDQ5LjEgMjcuNyA0Ny4yIDEwIDY4LjcgMjkuNyA2OC43IDYyLjcgMCA0MS40LTMzLjcgNzEuOS04Ni40IDc1LjNsLTUuMSAyNC41Yy0uNCAyLjMtMi42IDQuMS01LjEgNC4xbC00MC42IDBjLTMuNCAwLTUuOC0zLjItNS4xLTYuNGw2LjQtMjcuM2MtMjYtNy41LTQ3LjItMjItNTkuMy0zOS43LTEuNS0yLjMtMS4xLTUuMyAxLjEtN2wyOC4yLTIyYzIuMy0xLjkgNS44LTEuMyA3LjUgMS4xIDE0LjkgMjAuOSAzOCAzMy4zIDY1LjcgMzMuMyAyNSAwIDQzLjgtMTIuMiA0My44LTI5LjcgMC0xMy40LTkuNC0xOS42LTQxLjItMjYuMi01NC4yLTExLjctNzUuOC0zMS44LTc1LjgtNjQuOSAwLTM4LjQgMzIuMi02Ny4yIDgwLjktNzFsNS4zLTI1LjRjLjQtMi4zIDIuNi00LjEgNS4xLTQuMWwzOS45IDBjMy4yIDAgNS44IDMgNS4xIDYuMmwtNi4yIDI4LjRjMjAuOSA2LjQgMzggMTcuOSA0OC43IDMyLjIgMS43IDIuMSAxLjMgNS4zLS45IDd6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdFAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGludGVyZXN0LXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIzMSIsICJNMjA0IDYuNWMtMTAyLjYgMC0yMDQgNjguNC0yMDQgMTc5LjEgMCA3MC40IDM5LjYgMTEwLjQgNjMuNiAxMTAuNCA5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44IDAtOTkuMy04NS44LTE2NC4xLTE4MC0xNjQuMXoiXQogICAgfTsKICAgIGZhV2htY3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2htY3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwZCIsICJNNDQ4IDE2MWwwLTIxLjMtMjguNS04LjgtMi4yLTEwLjQgMjAuMS0yMC43LTEwLjQtMTkuNC0yOSA3LjUtNy4yLTcuNSA3LjUtMjguMi0xOS4xLTExLjYtMjEuMyAyMS0xMC43LTMuMi03LTI2LjQtMjIuNiAwLTYuMiAyNi40LTEyLjEgMy4yLTE5LjctMjEtMTkuNCAxMSA4LjEgMjcuNy04LjEgOC40LTI4LjUtNy41LTExIDE5LjEgMjAuNyAyMS0yLjkgMTAuNC0yOC41IDcuOC0uMyAyMS43IDI4LjggNy41IDIuNCAxMi4xLTIwLjEgMTkuOSAxMC40IDE4LjUgMjkuNi03LjUgNy4yIDguNi04LjEgMjYuOSAxOS45IDExLjYgMTkuNC0yMC40IDExLjYgMi45IDYuNyAyOC41IDIyLjYgLjMgNi43LTI4LjggMTEuNi0zLjUgMjAuNyAyMS42IDIwLjQtMTIuMS04LjgtMjggNy44LTguMSAyOC44IDguOCAxMC4zLTIwLjEtMjAuOS0xOC44IDIuMi0xMi4xIDI5LjEtN3pNMzI4LjggOTIuNmE1Ni44IDU2LjggMCAxIDEgMCAxMTMuNiA1Ni44IDU2LjggMCAxIDEgMC0xMTMuNnptNzIuMyAxMzBsNDYuOSAxNC41IDAgMzkuOS01NS4xIDEzLjQtNC4xIDIyLjcgMzguOSAzNS4zLTE5LjIgMzcuOS01NC0xNi43LTE0LjYgMTUuMiAxNi43IDUyLjUtMzguMyAyMi43LTM4LjktNDAuNS0yMS43IDYuNi0xMi42IDU0LTQyLjQtLjUtMTIuNi01My42LTIxLjctNS42LTM2LjQgMzguNC0zNy40LTIxLjcgMTUuMi01MC41LTEzLjctMTYuMS01NS41IDE0LjEtMTkuNy0zNC44IDM3LjktMzcuNC00LjgtMjIuOC01NC0xNC4xIC41LTQwLjkgNTMuNS0xNC43IDUuNy0xOS43LTM4LjktMzkuNCAyMC43LTM1LjggNTMuNiAxNC4xIDE1LjItMTUuNy0xNS4yLTUyIDM2LjQtMjAuNyAzNi44IDM5LjQgMjIuNy02LjEgMTEuNi01MiA0Mi40IDAgMTEuNiA0NS45LTIyLjYtNS45LTYuMy0xLjctMy4zIDUuNy0xMSAxOS4xLTMuMyA1LjYgNC42IDQuNiAxNy4yIDE3LjQtLjMgMS0yMy44IDYuNS02LjIgMS43YzAgMy4yLS4xIDkuNi0uMyAxOS4zLTQ3LjUgMTAuNC04My4zIDUyLjgtODMuMyAxMDMuNSAwIDU4LjMgNDcuMyAxMDUuNyAxMDUuNyAxMDUuNyA1MC41IDAgOTIuNy0zNS40IDEwMy4yLTgyLjggOS45IC4xIDE2LjYgLjIgMjAuMSAuM2wxLjYtNi43IDUuNi0yNCAxLjktLjYgMTcuMSAxNy44IDQuNyA0LjkgNS44LTMuNCAyMC40LTEyLjEgNS44LTMuNS0yLTYuNS02LjgtMjEuMnoiXQogICAgfTsKICAgIGZhSm9nZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiam9nZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiNyIsICJNMzg2LjEgNDVDMzQ1LjYgMTkuOSAzMDAuNiA4IDI1Ni4yIDggMTczIDggOTEuOCA0OS45IDQ0LjkgMTI1LjktMjcgMjQyLjUgOS4zIDM5NS4yIDEyNS45IDQ2Ny4xczI2OS4zIDM1LjYgMzQxLjItODAuOUM1MzkgMjY5LjYgNTAyLjcgMTE2LjggMzg2LjEgNDV6bTUxLjggMzIzLjJjLTQwLjQgNjUuNS0xMTAuNCAxMDEuNS0xODIgMTAxLjUtNi44IDAtMTMuNi0uNC0yMC40LTEtOS0xMy42LTE5LjktMzMuMy0yMy43LTQyLjQtNS43LTEzLjctMjcuMi00NS42IDMxLjItNjcuMSA1MS43LTE5LjEgMTc2LjctMTYuNSAyMDguOC0xNy42LTQgOS04LjYgMTcuOS0xMy45IDI2LjZ6TTIzNy4xIDI4MS45Yy01NS41LTEuNC04MS43LTIwLjgtNTguNS00OC4yczUxLjEtNDAuNyA2OC45LTUxLjJjMTcuOS0xMC41IDI3LjMtMzMuNy0yMy42LTI5LjctMTI4LjYgOC43LTE2Ny4zIDk5LjMtMTc4LjMgMTQwLjItOC44LTQ5LjctLjEtMTAyLjcgMjguNS0xNDkuMSA2MS45LTEwMC41IDE5My41LTEzMS43IDI5NC02OS44IDc0LjggNDYuMSAxMTEuMiAxMzAuOSA5OS4zIDIxMi43LTI0LjktLjUtMTc5LjMtMy42LTIzMC4zLTQuOXptMTgzLjgtNTQuOGMtMjIuNy02LTU3IDExLjMtODYuNyAyNy4yLTI5LjcgMTUuOC0zMS4xIDguMi0zMS4xIDguMnM0MC4yLTI4LjEgNTAuNy0zNC41IDMxLjktMTQgMTMuNC0yNC42Yy0zLjItMS44LTYuNy0yLjctMTAuNC0yLjctMTcuOCAwLTQxLjUgMTguNy02Ny41IDM1LjYtMzEuNSAyMC41LTY1LjMgMzEuMy02NS4zIDMxLjNMMzkzLjUgMjY2IDQ0MCAyNDIuNnMzLjYtOS41LTE5LjEtMTUuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlWW91dHViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteW91dHViZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzk4LCAieW91dHViZS1zcXVhcmUiXSwgImY0MzEiLCAiTTI4MiAyNTYuMmwtOTUuMi01NC4xIDAgMTA4LjIgOTUuMi01NC4xek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHptMTQuNCAxMzYuMWM3LjYgMjguNiA3LjYgODguMiA3LjYgODguMnMwIDU5LjYtNy42IDg4LjFjLTQuMiAxNS44LTE2LjUgMjcuNy0zMi4yIDMxLjktMjguMyA3LjctMTQyLjIgNy43LTE0Mi4yIDcuN3MtMTEzLjkgMC0xNDIuMi03LjZjLTE1LjctNC4yLTI4LTE2LjEtMzIuMi0zMS45LTcuNi0yOC42LTcuNi04OC4yLTcuNi04OC4yczAtNTkuNyA3LjYtODguMmM0LjItMTUuOCAxNi41LTI4LjIgMzIuMi0zMi40IDI4LjMtNy43IDE0Mi4yLTcuNyAxNDIuMi03LjdzMTEzLjkgMCAxNDIuMiA3LjdjMTUuNyA0LjIgMjggMTYuNiAzMi4yIDMyLjR6Il0KICAgIH07CiAgICBmYVlvdXR1YmVTcXVhcmUgPSBmYVNxdWFyZVlvdXR1YmU7CiAgICBmYUF0bGFzc2lhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdGxhc3NpYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3YiIsICJNMTUyLjIgMjM2LjRjLTcuNy04LjItMTkuNy03LjctMjQuOCAyLjhMMS42IDQ5MC4yYy01IDEwIDIuNCAyMS43IDEzLjQgMjEuN2wxNzUgMGM1LjggLjEgMTEtMy4yIDEzLjQtOC40IDM3LjktNzcuOCAxNS4xLTE5Ni4zLTUxLjItMjY3LjF6TTI0NC40IDguMWMtMTIyLjMgMTkzLjQtOC41IDM0OC42IDY1IDQ5NS41IDIuNSA1LjEgNy43IDguNCAxMy40IDguNEw0OTcgNTEyYzExLjIgMCAxOC40LTExLjggMTMuNC0yMS43IDAgMC0yMzQuNS00NzAuNi0yNDAuNC00ODIuMy01LjMtMTAuNi0xOC44LTEwLjgtMjUuNiAuMXoiXQogICAgfTsKICAgIGZhUGllZFBpcGVySGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItaGF0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZTUiLCAiTTY0MCAyNC45Yy04MC44IDUzLjYtODkuNCA5Mi41LTk2LjQgMTA0LjQtNi43IDEyLjItMTEuNyA2MC4zLTIzLjMgODMuNi0xMS43IDIzLjYtNTQuMiA0Mi4yLTY2LjEgNTAtMTEuNyA3LjgtMjguMyAzOC4xLTQxLjkgNjQuMi0xMDguMS00LjQtMTY3LjQgMzguOC0yNTkuMiA5My42IDI5LjQtOS43IDQzLjMtMTYuNyA0My4zLTE2LjcgOTQuMi0zNiAxMzkuMy02OC4zIDI4MS4xLTQ5LjIgMS4xIDAgMS45IC42IDIuOCAuOCAzLjkgMi4yIDUuMyA2LjkgMy4xIDEwLjhsLTUzLjkgOTUuOGMtMi41IDQuNy03LjggNy4yLTEzLjEgNi4xLTEyNi44LTIzLjgtMjI2LjkgMTcuMy0zMTguOSAxOC42LTczLjQgMS4xLTk3LjUtMzMuNS05Ny41LTM1LjEgMC0xLjEgLjYtMS43IDEuNy0xLjcgMCAwIDM4LjMgMCAxMDMuMS0xNS4zIDczLjYtMTQwLjMgMTM5LjItMTg5LjQgMjEwLjYtMTg5LjQgMCAwIDcxLjcgMCA5MC42IDYxLjkgMjIuOC0zOS43IDI4LjMtNDkuMiAyOC4zLTQ5LjIgNS4zLTkuNCAzNS03Ny4yIDg2LjQtMTQxLjQgNTEuNS02NCA5MC40LTc5LjkgMTE5LjMtOTEuOHoiXQogICAgfTsKICAgIGZhSW50ZXJuZXRFeHBsb3JlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnRlcm5ldC1leHBsb3JlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZiIiwgIk00ODMuMSAxNTkuN2MxMC45LTI0LjYgMjEuNC02MC40IDIxLjQtODcuOSAwLTcyLjctNzkuNi05OC40LTIwOS43LTM4LjYtMTA3LjYtNy4yLTIxMS4yIDczLjctMjM3LjEgMTg2LjUgMzAuOS0zNC45IDc4LjMtODIuMyAxMjItMTAxLjItNTQuMyA0OC4zLTEwMC42IDEwOS40LTEzNS43IDE3My4yLTIwLjcgMzcuOS00NCA5OS4yLTQ0IDE0NSAwIDk4LjYgOTIuOSA4Ni41IDE4MC4zIDQyIDMxLjQgMTUuNCA2Ni42IDE1LjYgMTAxLjcgMTUuNiA5Ny4xIDAgMTg0LjItNTQuMyAyMTYuOC0xNDZsLTEyMC44IDBjLTUyLjUgODguNi0xOTYuOCA1My0xOTYuOC00Ny40bDMyOC44IDBjNi40LTQzLjYtMS43LTk1LjctMjYuOS0xNDEuMnpNNjQuNiAzNDYuOUM4Mi4zIDM5OCAxMTguMyA0NDIuNyAxNjQuOCA0NzAuMiA3Ni4xIDUxOS4xLTguNCA0OTkuMyA2NC42IDM0Ni45ek0xODAuNSAyMzhjMi01NS4yIDUwLjMtOTQuOSAxMDQtOTQuOSA1My40IDAgMTAyIDM5LjcgMTA0IDk0LjlsLTIwOCAwek0zNjUuMSA1MC40YzIxLjQtMTAuMyA0OC42LTIyIDcyLjYtMjIgMzEuNCAwIDU0LjMgMjEuNyA1NC4zIDUzLjcgMCAyMC03LjQgNDktMTQuNiA2Ny45LTI2LjMtNDIuMy02Ni04MS42LTExMi4zLTk5LjZ6Il0KICAgIH07CiAgICBmYUFpcmJuYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhaXJibmIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgzNCIsICJNMjI0LjUgMzczLjFjLTI1LjItMzEuNy00MC4xLTU5LjQtNDUtODMuMi0yMi41LTg4IDExMi42LTg4IDkwLjEgMC01LjQgMjQuMi0yMC4zIDUyLTQ1IDgzLjJsLS4xIDB6bTEzOC4yIDczLjJjLTQyLjEgMTguMy04My43LTEwLjktMTE5LjMtNTAuNSAxMDMuOS0xMzAuMSA0Ni4xLTIwMC0xOC44LTIwMC01NC45IDAtODUuMiA0Ni41LTczLjMgMTAwLjUgNi45IDI5LjIgMjUuMiA2Mi40IDU0LjQgOTkuNS0zMi41IDM2LTYwLjUgNTIuNy04NS4yIDU0LjktNTAgNy40LTg5LjEtNDEuMS03MS4zLTkxLjEgMTUuMS0zOS4yIDExMS43LTIzMS4yIDExNS45LTI0MS42IDE1LjgtMzAuMSAyNS42LTU3LjQgNTkuNC01Ny40IDMyLjMgMCA0My40IDI1LjkgNjAuNCA1OS45IDM2IDcwLjYgODkuNCAxNzcuNSAxMTQuOCAyMzkuMSAxMy4yIDMzLjEtMS40IDcxLjMtMzcgODYuNnptNDctMTM2LjFjLTEyOC45LTI3NC4zLTEzNi0yNzguMi0xODUuMS0yNzguMi00NS41IDAtNjQuOSAzMS43LTg0LjcgNzIuOC0xMDYuMiAyMTIuMy0xMTYuNCAyNDIuNC0xMTcuMyAyNDUtMjUuMiA2OS4zIDI2LjcgMTMwLjIgODkuNiAxMzAuMiAyMS43IDAgNjAuNi02LjEgMTEyLjQtNjIuNCA1OC43IDYzLjggMTAxLjMgNjIuNCAxMTIuNCA2Mi40IDYyLjkgLjEgMTE0LjktNjAuOSA4OS42LTEzMC4yIDAtMy45LTE2LjgtMzguOS0xNi44LTM5LjZsMCAweiJdCiAgICB9OwogICAgZmFKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2I4IiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yNDMuOCAzODEuNGMwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNS0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjd6bTk5LjYgNjMuNWMtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjZ6Il0KICAgIH07CiAgICBmYVF1aW5zY2FwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxdWluc2NhcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ1OSIsICJNMzEzLjcgNDc0LjZsLTEgMGMtNDEuOSAwLTgyLjEtMTYuNy0xMTEuOC00Ni4zcy00Ni4zLTY5LjktNDYuMy0xMTEuOCAxNi43LTgyLjEgNDYuMy0xMTEuOCA2OS45LTQ2LjMgMTExLjgtNDYuM2M5NC45IDAgMTY4LjIgODMuMSAxNTcgMTc2LjYgNCA1LjEgOC4yIDkuNiAxMS4yIDE1LjMgMTMuNC0zMC4zIDIwLjMtNjIuNCAyMC4zLTk3LjcgMC0xMzUuMS0xMDkuNS0yNDQuNi0yNDQuNi0yNDQuNlMxMi4xIDExNy41IDEyLjEgMjUyLjYgMTIxLjYgNDk3LjIgMjU2LjYgNDk3LjJjMjMuOCAuMiA0Ny42LTMuMiA3MC40LTEwLjEtNS4yLTMuNS04LjktOC4xLTEzLjMtMTIuNXptNzguMy0xNjlhOTkuMiA5OS4yIDAgMSAwIDAgMTk4LjQgOTkuMiA5OS4yIDAgMSAwIDAtMTk4LjR6Il0KICAgIH07CiAgICBmYUFkdmVyc2FsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFkdmVyc2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmEiLCAiTTQ4Mi4xIDMyTDI4LjcgMzJDNS44IDMyIDAgMzcuOSAwIDYwLjlMMCA0NTEuMUMwIDQ3NC40IDUuOCA0ODAgMjguNyA0ODBsNDUzLjQgMGMyNC40IDAgMjkuOS01LjIgMjkuOS0yOS43bDAtMzg4LjFjMC0yNC42LTUuNC0zMC4yLTI5LjktMzAuMnpNMTc4LjQgMjIwLjNjLTI3LjUtMjAuMi03Mi4xLTguNy04NC4yIDIzLjQtNC4zIDExLjEtOS4zIDkuNS0xNy41IDguMy05LjctMS41LTE3LjItMy4yLTIyLjUtNS41LTI4LjgtMTEuNCA4LjYtNTUuMyAyNC45LTY0LjMgNDEuMS0yMS40IDgzLjQtMjIuMiAxMjUuMy00LjggNDAuOSAxNi44IDM0LjUgNTkuMiAzNC41IDEyOC41IDIuNyAyNS44LTQuMyA1OC4zIDkuMyA4OC44IDEuOSA0LjQgLjQgNy45LTIuNyAxMC43LTguNCA2LjctMzkuMyAyLjItNDYuNi03LjQtMS45LTIuMi0xLjgtMy42LTMuOS02LjItMy42LTMuOS03LjMtMi4yLTExLjkgMS01Ny40IDM2LjQtMTQwLjMgMjEuNC0xNDctNDMuMy0zLjEtMjkuMyAxMi40LTU3LjEgMzkuNi03MSAzOC4yLTE5LjUgMTEyLjItMTEuOCAxMTQtMzAuOSAxLjEtMTAuMi0xLjktMjAuMS0xMS4zLTI3LjN6bTI4Ni43IDIyMmMwIDE1LjEtMTEuMSA5LjktMTcuOCA5LjlsLTM5NC45IDBjLTcuNCAwLTE4LjIgNC44LTE3LjgtMTAuNyAuNC0xMy45IDEwLjUtOS4xIDE3LjEtOS4xIDEzMi4zLS40IDI2NC41LS40IDM5Ni44IDAgNi44IDAgMTYuNi00LjQgMTYuNiA5Ljl6bTMuOC0zNDAuNWwwIDI5MWMwIDUuNy0uNyAxMy45LTguMSAxMy45LTEyLjQtLjQtMjcuNSA3LjEtMzYuMS01LjYtNS44LTguNy03LjgtNC0xMi40LTEuMi01My40IDI5LjctMTI4LjEgNy4xLTE0NC40LTg1LjItNi4xLTMzLjQtLjctNjcuMSAxNS43LTEwMCAxMS44LTIzLjkgNTYuOS03Ni4xIDEzNi4xLTMwLjVsMC03MWMwLTI2LjItLjEtMjYuMiAyNi0yNi4yIDMuMSAwIDYuNiAuNCA5LjcgMCAxMC4xLS44IDEzLjYgNC40IDEzLjYgMTQuMy0uMSAuMi0uMSAuMy0uMSAuNXpNNDE3LjQgMzM0LjFjLTE5LjUgNDcuNi03Mi45IDQzLjMtOTAgNS4yLTE1LjEtMzMuMy0xNS41LTY4LjIgLjQtMTAxLjUgMTYuMy0zNC4xIDU5LjctMzUuNyA4MS41LTQuOCAyMC42IDI4LjggMTQuOSA4NC42IDguMSAxMDEuMXpNMTIyLjYgMzY5LjRjLTcuNS0xLjMtMzMtMy4zLTMzLjctMjcuOC0uNC0xMy45IDcuOC0yMyAxOS44LTI1LjggMjQuNC01LjkgNDkuMy05LjkgNzMuNy0xNC43IDguOS0yIDcuNCA0LjQgNy44IDkuNSAxLjQgMzMtMjYuMSA1OS4yLTY3LjYgNTguOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1ZSIsICJNMjUzLjggMjE0LjlsLTMzLjIgMTcuM2MtOS40LTE5LjYtMjUuMi0xOS45LTI3LjUtMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjYgOS4yIDQzLjggMzMuMiA0My44IDE0LjUgMCAyNC42LTcuMSAzMC42LTIxLjNsMzAuNiAxNS41Yy02LjIgMTEuNS0yNS43IDM5LTY1LjEgMzktMjIuNiAwLTc0LTEwLjMtNzQtNzcgMC01OC43IDQzLTc3LjEgNzIuNi03Ny4xIDMwLjcgMCA1Mi43IDExLjkgNjYgMzUuOXptMTQzIDBsLTMyLjggMTcuM2MtOS41LTE5LjgtMjUuNy0xOS45LTI3LjktMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjUgOS4yIDQzLjggMzMuMiA0My44IDE0LjQgMCAyNC42LTcuMSAzMC41LTIxLjNsMzEgMTUuNWMtMi4xIDMuOC0yMS40IDM5LTY1LjEgMzktMjIuNyAwLTc0LTkuOS03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjYgMTEuOSA2NS42IDM1Ljl6TTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2LjEgOCAzOTQuNSAxMjEuNiA1MDQuMSAyNTUuNiA1MDQuMSAzODUuNSA1MDQuMSA1MDQgNDAzLjIgNTA0IDI1Ni4xIDUwNCAxMTguMiAzOTcuNCA4IDI1NS42IDh6bS45IDQ1MC44Yy0xMTIuNSAwLTIwMy43LTkzLTIwMy43LTIwMi44IDAtMTA1LjQgODUuNC0yMDMuMyAyMDMuNy0yMDMuMyAxMTIuNSAwIDIwMi44IDg5LjUgMjAyLjggMjAzLjMgMCAxMjEuNy05OS43IDIwMi44LTIwMi44IDIwMi44eiJdCiAgICB9OwogICAgZmFOb3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm90aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZDkiLCAiTTk0LjkgMTAwLjJjMTQuOSAxMi4xIDIwLjUgMTEuMiA0OC42IDkuM0w0MDcuOCA5My42YzUuNiAwIC45LTUuNi0uOS02LjVMMzYyLjkgNTUuNGMtOC40LTYuNS0xOS42LTE0LTQxLjEtMTIuMUw2NS45IDYxLjljLTkuMyAuOS0xMS4yIDUuNi03LjUgOS4zbDM2LjQgMjguOXptMTUuOSA2MS42bDAgMjc4LjFjMCAxNC45IDcuNSAyMC41IDI0LjMgMTkuNmwyOTAuNS0xNi44YzE2LjgtLjkgMTguNy0xMS4yIDE4LjctMjMuM2wwLTI3Ni4yYzAtMTIuMS00LjctMTguNy0xNS0xNy43TDEyNS43IDE0My4xYy0xMS4yIC45LTE0LjkgNi41LTE0LjkgMTguN3ptMjg2LjcgMTQuOWMxLjkgOC40IDAgMTYuOC04LjQgMTcuOGwtMTQgMi44IDAgMjA1LjNjLTEyLjIgNi41LTIzLjQgMTAuMy0zMi43IDEwLjMtMTUgMC0xOC43LTQuNy0yOS45LTE4LjdsLTkxLjUtMTQzLjcgMCAxMzkgMjkgNi41czAgMTYuOC0yMy40IDE2LjhsLTY0LjQgMy43Yy0xLjktMy43IDAtMTMuMSA2LjUtMTQuOWwxNi44LTQuNyAwLTE4My44LTIzLjMtMS45Yy0xLjktOC40IDIuOC0yMC41IDE1LjktMjEuNWw2OS4xLTQuNyA5NS4zIDE0NS42IDAtMTI4LjgtMjQuMy0yLjhjLTEuOS0xMC4zIDUuNi0xNy43IDE0LjktMTguN2w2NC41LTMuOHpNNDQuNCAzNi43TDMxMC42IDE3LjFjMzIuNy0yLjggNDEuMS0uOSA2MS42IDE0bDg1IDU5LjdjMTQgMTAuMyAxOC43IDEzLjEgMTguNyAyNC4zbDAgMzI3LjZjMCAyMC41LTcuNSAzMi43LTMzLjYgMzQuNUwxMzMuMiA0OTUuOGMtMTkuNiAuOS0yOS0xLjktMzkuMi0xNC45TDMxLjQgMzk5LjdjLTExLjItMTQuOS0xNS45LTI2LjEtMTUuOS0zOS4ybDAtMjkxLjJjMC0xNi44IDcuNS0zMC44IDI4LjktMzIuN3oiXQogICAgfTsKICAgIGZhQ2hyb21lY2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaHJvbWVjYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MzgiLCAiTTQ0OCA2NEw2NC4yIDY0Yy0yMy42IDAtNDIuNyAxOS4xLTQyLjcgNDIuN2wwIDYzLjkgNDIuNyAwIDAtNjMuOSAzODMuOCAwIDAgMjk4LjYtMTQ5LjIgMCAwIDQyLjcgMTQ5LjQgMGMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN2wwLTI5OC42QzQ5MC45IDgzLjEgNDcxLjYgNjQgNDQ4IDY0ek0yMS41IDM4My42bDAgNjMuOSA2My45IDBjMC0zNS4zLTI4LjYtNjMuOS02My45LTYzLjl6bTAtODVsMCA0Mi40YzU4LjkgMCAxMDYuNiA0OC4xIDEwNi42IDEwN2w0Mi43IDBjLjEtODIuNC02Ni45LTE0OS4zLTE0OS4zLTE0OS40ek0yMTMuNiA0NDhsNDIuNyAwQzI1NS44IDMxOC41IDE1MSAyMTMuNyAyMS41IDIxMy40bDAgNDIuNGMxMDYtLjIgMTkyIDg2LjIgMTkyLjEgMTkyLjJ6Il0KICAgIH07CiAgICBmYVVsdHJhbHl0aWNzSHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVsdHJhbHl0aWNzLWh1YiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODZlIiwgIk0xMzAuNCAxNmM2MC45IDAgMTEwLjQgNDkuNSAxMTAuNCAxMTAuNGwwIDI0LjljNC44LS43IDkuNy0xIDE0LjYtMSA4OC4xLS4yIDE2NS4xIDQ5IDIwNS40IDEyMS4yLTIyLjgtMTYuMi01MC43LTI1LjQtODAuNC0yNS4zLTc3LjEgLjItMTM5LjUgNjIuNi0xMzkuNiAxMzkuNC0uMSA2MC45LTQ5LjUgMTEwLjMtMTEwLjcgMTEwLjUtNjAuNiAuMi0xMTAuMi00OS41LTExMC4yLTExMC41IC4yLTIuNiAwIDAgLjEtMy4ybDAtMjU2QzIwLjEgNjUuNSA2OS41IDE2IDEzMC40IDE2ek0zODAuMyA0OTZhMTEwLjQgMTEwLjQgMCAxIDEgMC0yMjAuOSAxMTAuNCAxMTAuNCAwIDEgMSAwIDIyMC45eiJdCiAgICB9OwogICAgZmFXaWtpcGVkaWFXID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpa2lwZWRpYS13IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyNjYiLCAiTTY0MCA1MS4ybC0uMyAxMi4yYy0yOC4xIC44LTQ1IDE1LjgtNTUuOCA0MC4zLTI1IDU3LjgtMTAzLjMgMjQwLTE1NS4zIDM1OC42bC0xMy42IDAtODEuOS0xOTMuMWMtMzIuNSA2My42LTY4LjMgMTMwLTk5LjIgMTkzLjEtLjMgLjMtMTUgMC0xNS0uMy00Ni45LTEwOS43LTk2LjEtMjE4LjYtMTQzLjEtMzI4LjYtMTEuNC0yNi43LTQ5LjQtNzAtNzUuNi02OS43IDAtMy4xLS4zLTEwLS4zLTE0LjJsMTYxLjkgMCAwIDEzLjljLTE5LjIgMS4xLTUyLjggMTMuMy00My4zIDM0LjIgMjEuOSA0OS43IDEwMy42IDI0MC4zIDEyNS42IDI4OC42IDE1LTI5LjcgNTcuOC0xMDkuMiA3NS4zLTE0Mi44LTEzLjktMjguMy01OC42LTEzMy45LTcyLjgtMTYwLTkuNy0xNy44LTM2LjEtMTkuNC01NS44LTE5LjdsMC0xMy45IDE0Mi41IC4zIDAgMTMuMWMtMTkuNCAuNi0zOC4xIDcuOC0yOS40IDI2LjEgMTguOSA0MCAzMC42IDY4LjEgNDguMSAxMDQuNyA1LjYtMTAuOCAzNC43LTY5LjQgNDguMS0xMDAuOCA4LjktMjAuNi0zLjktMjguNi0zOC42LTI5LjQgLjMtMy42IDAtMTAuMyAuMy0xMy42IDQ0LjQtLjMgMTExLjEtLjMgMTIzLjEtLjZsMCAxMy42QzQ2Mi40IDY0IDQzOS4xIDc2IDQyNi44IDk0LjlMMzY3LjYgMjE3LjdjNi40IDE2LjEgNjMuMyAxNDIuOCA2OS4yIDE1Ni43TDU1OS4yIDkxLjhjLTguNi0yMy4xLTM2LjQtMjguMS00Ny4yLTI4LjNsMC0xMy45IDEyNy44IDEuMSAuMiAuNXoiXQogICAgfTsKICAgIGZhU2l0cm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpdHJveCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDRhIiwgIk0yMTIuNCAwbDAgMCAyMzUuNiAwIDAgMTI4LTM4NCAwQzY0IDU3LjYgMTQxLjggLjUgMjEyLjQgMHptMjQuOCAxOTJsMCAwYzY5LjkgLjUgMTQ2LjcgNTcuNiAxNDYuNyAxMjhsLTE3My4yIDAgMCAwQzE0MC45IDMxOS42IDY0IDI2Mi40IDY0IDE5MmwxNzMuMyAwem0tMS43IDMyMGM3MC43LS41IDE0OC40LTU3LjYgMTQ4LjQtMTI4bC0zODQgMCAwIDEyOCAyMzUuNiAwIDAgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlR2l0bGFiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1naXRsYWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ2l0bGFiLXNxdWFyZSJdLCAiZTVhZSIsICJNMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2em0zMzcuNSAxMi41bDQ0LjYgMTE2LjQgLjQgMS4yYzUuNiAxNi44IDcuMiAzNS4yIDIuMyA1Mi41LTUgMTcuMi0xNS40IDMyLjQtMjkuOCA0My4zbC0uMiAuMS02OC40IDUxLjItNTQuMSA0MC45Yy0uNSAuMi0xLjEgLjUtMS43IC44LTIgMS00LjQgMi02LjcgMi0zIDAtNi44LTEuOC04LjMtMi44bC01NC4yLTQwLjktNjcuOS01MC45LS40LS4zLS4yLS4xYy0xNC4zLTEwLjgtMjQuOC0yNi0yOS43LTQzLjNzLTQuMi0zNS43IDIuMi01Mi41bC41LTEuMiA0NC43LTExNi40Yy45LTIuMyAyLjUtNC4zIDQuNS01LjYgMS42LTEgMy40LTEuNiA1LjItMS44IDEuMy0uNyAyLjEtLjQgMy40IC4xIC42IC4yIDEuMiAuNSAyIC43IDEgLjQgMS42IC45IDIuNCAxLjUgLjYgLjQgMS4yIDEgMi4xIDEuNSAxLjIgMS40IDIuMiAzIDIuNyA0LjhsMjkuMiA5Mi4yIDEyMi45IDAgMzAuMi05Mi4yYy41LTEuOCAxLjQtMy40IDIuNi00LjhzMi44LTIuNCA0LjUtMy4xYzEuNy0uNiAzLjYtLjkgNS40LS43czMuNiAuOCA1LjIgMS44YzIgMS4zIDMuNyAzLjMgNC42IDUuNnoiXQogICAgfTsKICAgIGZhR2l0bGFiU3F1YXJlID0gZmFTcXVhcmVHaXRsYWI7CiAgICBmYVNob2VsYWNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNob2VsYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2MGMiLCAiTTQwNS4yIDMzMWMyLjItMS4xIDQuNC0yLjMgNi41LTMuN2w4LjMtNC44YzEuNS0xLjEgNC40LTMuNCA4LjctNi43bC41LS41YzMuNC0zLjQgNy4yLTUgMTEuMy00LjkgMS44IDAgMy45IC41IDYuNCAxLjVsMzEtMjcuNWMuOS0uNyAxLjctMS4zIDIuNi0xLjhsLjIgMGMzLjMtMS45IDYtMS44IDguMiAuNCAzLjkgMi4xIDQuMiA1LjYgLjkgMTAuNkw0NTcuMiAzMjJjLjIgLjUgLjQgMSAuNCAxLjUgLjUgMi4yIC4zIDQuNC0uNSA2LjYtLjcgMS41LTEuOCAyLjktMy4xIDQuMi0xLjQgMS40LTIuNyAyLjgtNC4yIDQuMkw0MzEgMzUyLjJjLTEuNyAxLjItMy40IDIuMy01LjEgMy4zLTIuMSAxLjMtNC4zIDIuNS02LjYgMy42LTEgLjQtMS45IC45LTIuOSAxLjMtNS45IDIuNS0xMS45IDQuMi0xOC4yIDUtMi45IDI0LjUtMTEuMyA0Ny4xLTI1LjEgNjcuOC0xNy41IDI1LjctNDEuNCA0NS40LTcxLjggNTguOC0zMC4yIDEzLjUtNjMgMjAuMi05OC4yIDIwLjItNDguNi0uNS04OC0xMS40LTExOC4yLTMyLjgtMzUuMS0yNS01Mi42LTU3LjktNTIuNi05OS4xbDAtNS42YzEuMi0yOC4xIDkuNS01NC42IDI0LjgtNzkuOCAxNS4xLTI0LjkgMzcuMS00MS43IDY2LjEtNTAuNSAxNC45LTQuNCAyOS45LTYuNiA0NS02LjYgMTUuNSAwIDMxLjYgMi45IDQ4LjEgOC42czM1LjIgMTUuNSA1NS45IDI5LjVsNTQuMSAzNi4zYzE1LjEgOS44IDI4LjggMTYuNSA0MS4yIDIwLTIuNi0yNS4xLTExLjctNDYuNi0yNy4zLTY0LjUtMTUuNy0xOC4xLTM1LjYtMzEuMy01OS45LTM5LjdMMjU3IDIyMGMtMjEuNC03LjUtMzcuMy0xNC45LTQ3LjctMjIuMi0yOC4yLTE5LjEtNDMuOC00NS4yLTQ3LTc4LjVsLS41LTkuOGMwLTMyLjEgMTMtNTguOSAzOS04MC41IDIzLTE5LjMgNTAuNi0yOSA4Mi41LTI5IDI0IDAgNDUuNiA2LjkgNjQuNyAyMC44IDE5LjIgMTQgMzAuMSAzMy44IDMyLjYgNTkuNGwuNSAxMGMwIDE4LjYtNC44IDM0LjUtMTQuNCA0Ny43LTkuOCAxMy4yLTE4LjUgMTkuOS0yNiAxOS45LTEuNi0uMS0zLjEtLjMtNC41LS42bC0zNCAzMmMtNS41IDMtOS4yIDIuNS0xMS4xLTEuNi0xLjktMi4yLTEuOC00LjkgLjUtOC4ybC4yLS4yYy41LS43IDEuMi0xLjUgMi0yLjRsMzEuNi0zMGMtLjQtMS41LS42LTMuMS0uNi00LjggMC00LjEgMS42LTcuNiA0LjktMTAuNCAxMy44LTEyLjQgMjAuOC0yNi43IDIwLjgtNDIuOCAwLTE2LTYuMS0yOS41LTE4LjItNDAuNHMtMjguNy0xNi41LTQ5LjctMTYuOGMtMjYuMiAwLTQ3LjggNy45LTY0LjcgMjMuN1MxOTIuNiA4OS45IDE5Mi42IDExMmMwIDE3LjggNi45IDMzLjkgMjAuNiA0OC4zIDEzLjYgMTQuMiAzNC42IDI1LjQgNjMgMzMuNSAzOS44IDExLjUgNzAuMiAzMSA5MS4zIDU4LjMgMTguNyAyNC4yIDI5LjEgNTEuMyAzMS4zIDgxLjQgMi4yLS43IDQuMy0xLjUgNi41LTIuNmwtLjEgLjF6TTI5NC40IDE3OC43YzAgMS4xIC42IDEuNiAxLjggMS42IC4xIDAgOS43LTguOSAyOC44LTI2LjYgMC0yLjQtNS4xIC45LTE1LjMgMTAtMTAuMiA5LjItMTUuMyAxNC4yLTE1LjMgMTQuOWwwIC4xem04IDYuNGMwLTEtLjUtMS41LTEuNS0xLjUtMS4xIDAtMi4xIC41LTIuOSAxLjYtMS45LS4xLTMuMyAuMS00LjIgLjctLjQgLjItLjUgLjUtLjUgLjcgMCAuNyAuNSAxLjMgMS41IDEuNmwzLjMgMGMyLjktMS4xIDQuNC0yLjIgNC40LTMuM2wtLjEgLjJ6TTMyNSAxNjUuMmMwLTIuOC0xLjYtMi44LTQuOSAwLTEuNiAxLjUtMy42IDMuNS02IDYuMi0uOCAuNi0yLjYgMi4yLTUuMyA0LjktMi44IDIuOS00LjIgNC43LTQuMiA1LjNsLjIgMS4zYy43IC4yIDEuMiAuNCAxLjUgLjQgLjEgMCAzLjMtMi45IDkuNS04LjdzOS4zLTguOSA5LjMtOS4zbC0uMS0uMXptMTU5LjcgMTIwbC0zMC42IDI3YzEuOCAxIDMuMiAyLjQgNCA0LjJsMzAuMi0yN2MuMi0xLjIgLjEtMi4yLS41LTIuOS0uNi0uNS0xLjYtLjktMy4xLTEuM3ptLTEuNi0uOWwtLjctLjctMjcgMjEuOSAxLjYgMiAyNi0yMy4xIC4xLS4xek0zNjYuOSAzNjMuOWMtOC0yLjEtMTUuNC00LjYtMjIuMi03LjUtMTUuMy02LjItMzQuMy0xNy01Ny0zMi40bC0zNy40LTI1LjNjLTE1LjgtMTAuMS0zMC4yLTE3LjYtNDMuMi0yMi42LTEzLjEtNC45LTI2LTcuMy0zOC42LTcuM2wtNS41IDBjLTMyLjIgMS43LTU3LjIgMTMuOC03NSAzNi4yLTE2LjYgMjAuOC0yNSA0NS4zLTI1IDczLjYgMCAzMS44IDEyLjggNTYuNyAzOC4yIDc0LjcgMjUuNCAxOC4xIDYwLjIgMjcuMSAxMDQuNCAyNy4xIDM0LjcgMCA2NC02LjIgODcuOC0xOC42IDIzLjctMTIuNCA0Mi4xLTI4LjggNTUuMi00OS4yIDkuOC0xNS41IDE1LjktMzEuOCAxOC4yLTQ4LjhsLjEgLjF6Il0KICAgIH07CiAgICBmYU9wZW5zdHJlZXRtYXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbnN0cmVldG1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODZiIiwgIk02MSA0OTguN2MtNy4xLTEuOC0xMC44LTQuNy0yOS42LTIzLjYtMjIuNS0yMi40LTIzLjktMjQuNi0yMy45LTM2LjMgMC0xMy0zLjktOC40IDY3LjktODAuMyA3Mi41LTcyLjcgNjguNy02OS41IDgxLjktNjkuNSA2LjEgMCA3LjYgLjQgMTIuNSAyLjhsNS42IDIuOGMxMS43LTExLjcgMjMuNC0yMy40IDM1LjEtMzUuMWwtNC40LTYuOWMtOC42LTEzLjMtMTYuNi0zMi44LTIwLjMtNDguOS0xMC4yLTQ1LjQgLjgtOTMuMyAyOS44LTEyOS43IDUwLjEtNjIuOCAxNDAuMS03Ni43IDIwNi42LTMyIDM2LjUgMjQuNSA2MC4zIDYyLjUgNjcgMTA3IDEuNCA5LjQgMS40IDMxLjggMCA0MS44LTQuOSAzNC42LTE5LjcgNjQtNDQuNCA4OC43LTEyLjcgMTIuNy0yMyAyMC4xLTM5LjIgMjguMi0xOS4zIDkuNy0zNS43IDE0LjMtNTggMTYuMS0zMS43IDIuNi02Ni45LTYuMS05My44LTIzLjRsLTYuOS00LjRjLTExLjcgMTEuNy0yMy40IDIzLjQtMzUuMSAzNS4xbDIuOCA1LjZjMi41IDQuOSAyLjggNi40IDIuOCAxMi41IDAgMTMuMSAzLjEgOS40LTY5IDgxLjUtNTUuNiA1NS41LTY0LjEgNjMuNy02OC40IDY1LjctNS41IDIuNS0xMy45IDMuNC0xOSAyLjF6TTM1OS40IDI5Ni45YzQwLjEtNy4zIDc1LjEtMzQgOTIuNy03MC43IDI4LTU4LjQgOS4yLTEyNy00NC44LTE2My4zLTEyLjktOC43LTMwLjgtMTYtNDcuNy0xOS40LTExLjctMi40LTM2LjQtMi4xLTQ4LjYgLjUtMTguMiAzLjktMzQuOSAxMS4xLTQ5LjQgMjEuNC04LjkgNi40LTIzLjcgMjEuMS0yOS45IDI5LjktMzQuNiA0OS0zMS41IDExNC4xIDcuNyAxNTkuMyAyMC4xIDIzLjIgNDcuOCAzOC40IDc4LjYgNDMgMTAuMiAxLjUgMzEgMS4yIDQxLjUtLjh6bS0zNS41LTE3LjRjLTEzLjgtMi4yLTI1LjYtNS43LTM1LjEtMTAuNWwtNS40LTIuNyAwLTQ5LjktOS41IDBjLTguMiAwLTE5LjUgMS42LTI3LjcgNC0xLjEgLjMtMS41IDEuNi0xLjcgNC44bC0uMyA0LjQtNC4xLTcuOGMtOS0xNy4yLTEyLjItMzAuNy0xMi4yLTUxLjQgMC0xNiAxLjEtMjMuNCA1LjYtMzYuMyAyLjQtNi44IDguMi0xOC45IDEwLjgtMjIuMyAxLjEtMS41IDEuMi0xLjEgMS4zIDMuM2wwIDVjMTguOC0uMiAzNy42LS4zIDU2LjQtLjUgLjItNC43IC4zLTkuNSAuNS0xNC4ybC0xOSAwIDAtMzEgMy40LTEuN2M1LjYtMi44IDE1LjktNi43IDIxLjctOC4yIDMtLjggNi4xLTEuNiA2LjktMS44IDEuMi0uNCAxLjMgLjEgLjcgMy4zLTEuMiA2LjEtLjkgMjMgLjUgMjkgMi44IDExLjkgOS44IDIwLjcgMTkuMiAyNC4zIDUuNiAyLjEgMTYuMyAyLjYgMjIuNSAuOSA1LjktMS42IDEyLjUtNi40IDE1LjktMTEuNSA1LTcuNSA2LjctMTQuMSA3LjItMjcuMWwuNC0xMS40IDcgMy42YzggNC4yIDE3LjggMTEuMiAyNC45IDE4IDQuOCA0LjYgNSA0LjggNSA5LjJsMCA0LjUtMTguOSAwIDAgMTQuNiAzNSAwYzEuMyAyLjYgMi41IDUuMiAzLjggNy43bC05LjcgMGMtNi43IDAtMTIuNyAuNi0xOS40IDEuOWwtOS43IDEuOSAwIDcuMWMwIDMuOSAuMiA3LjEgLjMgNy4xczQuMS0uOCA4LjctMS43IDguNy0xLjcgOS4xLTEuN2MuNCAwIC44IDExLjMgLjggMjUuOGwwIDI1LjhjLTYuMiAuMi0xMi4zIC4zLTE4LjUgLjUtLjIgNC43LS4zIDkuNC0uNSAxNC4yIDEzLjUgLjIgMjcgLjMgNDAuNCAuNS0xIDIuMy0yIDQuNS0zIDYuOGwtMTAuNyAuMWMtOS45IC4xLTExLjEgLjItMTUuNiAyLjUtMTEuOCA1LjgtMTguMSAxOC45LTE4LjMgMzcuOWwtLjEgOS4zLTUuOCAzYy01IDIuNi0yMi42IDktMjQuOSA5LS41IDAtLjgtMTItLjgtMzAuNmwwLTMwLjYtOS40IDBjLTYgMC0xMi40IC42LTE3LjkgMS43LTEyLjYgMi42LTExLjUgMS43LTExLjUgOS41IDAgNSAuMyA2LjggMS4xIDYuOCAuNiAwIDQuNi0uOCA4LjgtMS43czgtMS43IDguMy0xLjcgLjYgMTEgLjYgMjQuNWwwIDI0LjUtNy41LS4xYy00LjEtLjEtOC41LS4zLTkuNy0uNXptLTM5LjQtNzEuNmM4LjktMy45IDE1LjYtMTIuOSAxOC4zLTI0LjQgMS42LTYuOSAxLjctMjIuNiAwLTMwLjItMi41LTEyLTkuNi0yMS4xLTE5LjMtMjQuOC02LjktMi42LTE4LjQtMi42LTI1LjMgMC05LjcgMy43LTE2LjQgMTIuOC0xOS4yIDI1LjYtMS42IDcuNS0xLjYgMjEuNCAwIDI4LjkgMi42IDEyLjUgMTAuNSAyMi4zIDIwLjYgMjUuNiA3IDIuMyAxOC45IDIgMjQuOS0uN3ptLTE5LjktMTQuNWMtMy41LTMtNS4yLTguOS01LjgtMjAuNi0uNi0xMC41IC42LTIxLjMgMi45LTI2IDItNC4zIDUuOC02LjQgMTAuNC02IDcuNCAuOCAxMC4zIDYuNSAxMS4xIDIyLjUgLjkgMTYuNy0xLjkgMjguOS03IDMxLjMtMy45IDEuOC04LjYgMS4zLTExLjYtMS4yem05NC45IDE1LjFjMTUtNC42IDIyLjgtMjAuMSAyMS45LTQzLjUtLjgtMTkuOS03LjktMzIuMS0yMS41LTM3LjItNS43LTIuMS0xOC0xLjgtMjQgLjUtOS42IDMuNy0xNi40IDEyLjQtMTkuMyAyNC43LTIgOC42LTEuMyAyOCAxLjMgMzUuMiA0IDExLjMgMTEuNiAxOC43IDIxLjQgMjEgNS44IDEuNCAxNC40IDEgMjAuMy0uOHptLTE2LjctMTQuMmMtNS0yLjctNy4zLTEzLjItNi41LTMwLjEgLjYtMTIuOCAxLjUtMTYuNyA0LjgtMjAuNCA0LjctNS4zIDEzLjYtMy44IDE2LjcgMi44IDMuNCA3LjMgNCAzMC4xIDEgNDAuMi0xLjcgNS43LTUuMiA4LjgtMTAuMSA4LjctMiAwLTQuNi0uNi01LjgtMS4zem0tODUuMiA1MS41Yy03LjMtNy42LTkuOS0xMS40LTguNC0xMS45IDIuOS0uOSAxMy45LTMuMSAxNC4yLTIuOCAuMiAuMiAuMiA0LjkgLjEgMTAuNGwtLjIgMTAuMS01LjYtNS45em0xNTYuNC0xLjJjLjctNiAzLjEtMTEuNSA1LjctMTMuMiAyLjktMS44IDYuNC0yLjYgOC0xLjcgMS4yIC43IC45IDEuNS0yLjQgNS45LTIuMSAyLjgtNS42IDctNy44IDkuNGwtNCA0LjMgLjUtNC43ek00MzguNCAxNjFsLjEtMzIuOSAyLjYgNy43YzUuMSAxNS4zIDYuOSAzMS44IDUuMSA0Ni42LTEuNCAxMS42LTEuNCAxMS41LTQuOSAxMS41bC0zIDAgLjEtMzIuOXpNMzQ0IDEwNi4yYy0yLjYtMS01LjMtNC44LTYuNS05LTEuMi00LTEuNS0yOC41LS40LTMzLjUgLjYtMyAuOS0zLjIgMy44LTMuMiA2LjIgMCAxOC4zIDIgMTguNyAzLjEgLjIgLjYgLjcgNC45IDEgOS41IC43IDkuNy0uNyAyMy4yLTIuOCAyNy42LTIuNCA1LjEtOC41IDcuNS0xMy43IDUuM3ptLTk0LjMtMi40Yy40LS44IDMuNy00LjYgNy4zLTguNGw2LjUtNi45YzAgNS42IDAgMTEuMiAuMSAxNi44bC03LjMgMGMtNi43IDAtNy4zLS4xLTYuNS0xLjV6bTM0LjQgMzQxLjdjLTI0LTYuOS00My45LTEyLjktNDQuMi0xMy4xLS41LS42IDI0LjMtODguNSAyNS4zLTg5LjYgLjUtLjUgODUuNCAyMy4zIDg4LjkgMjQuOSAxLjIgLjYtLjEgNS44LTEwLjYgNDIuNC02LjYgMjMtMTIuNCA0My4yLTEyLjggNDVzLTEuNCAzLjItMS45IDMuMS0yMC43LTUuOC00NC43LTEyLjd6TTM0Mi44IDQ1NmMwLTEuMSAyNC43LTg3LjMgMjUuMS04Ny42IC45LS43IDg3LjEtMjQuNyA4Ny40LTI0LjQgLjQgLjQtMjQuMSA4Ny4zLTI0LjcgODcuOS0uNCAuMy04My4yIDI0LTg1LjggMjQuNS0xLjEgLjItMS45IC4xLTEuOS0uNHpNMTk5LjYgNDE3LjVjMTctMTcuMSAzMi4yLTMyLjcgMzMuNy0zNC43IDMuNC00LjUgOC4yLTE0LjggOS41LTIwLjUgLjUtMi40IDEuMS03LjEgMS4yLTEwLjVsLjItNi4yIDMuNy0xYzItLjYgMy44LS45IDQtLjcgLjUgLjUtMjQuMyA4Ny0yNS4xIDg3LjgtLjQgLjMtMTMuNiA0LjMtMjkuNCA4LjhsLTI4LjcgOC4yIDMxLTMxLjF6bTE2Ni45LTYxLjZjLS4yLS4zLS43LTItMS4yLTMuN2wtLjktMy4yIDMuMi0uNWMyNy00LjYgNTUuOS0xNy4zIDc4LjctMzQuNSAzLjMtMi41IDUuMS0zLjQgNS4zLTIuNyAxLjEgMy4zIDUuNSAxOS4xIDUuNCAxOS4zLS43IC43LTkwLjIgMjUuOC05MC41IDI1LjR6TTYyLjkgMzI5LjhjLTEtLjgtMjMuOC03Ny45LTI1LjUtODYuNC0uMy0xLjcgMy0uOSA0My44IDEwLjggNDIuNyAxMi4yIDQ0LjIgMTIuNyA0NC44IDE0LjkgLjUgMiAuMiAyLjYtMi41IDQuNS0xLjcgMS4yLTE1LjUgMTQuNi0zMC43IDI5LjhzLTI3LjggMjcuNi0yOCAyNy42LTEuMS0uNS0xLjgtMS4xem0xNi41LTg4LjJjLTIzLjktNi45LTQzLjUtMTIuNi00My42LTEyLjYtLjMtLjIgMjUuMy04OS4zIDI1LjktODkuOCAuNC0uNCA4OS4xIDI0LjQgOTAgMjUuMiAuMiAuMi01LjQgMjAuNS0xMi40IDQ1LjEtMTEuNiA0MC43LTEyLjkgNDQuOC0xNC41IDQ0LjctMSAwLTIxLjMtNS43LTQ1LjItMTIuNnptNTkuNiAxMC44Yy4yLS42IDQuMy0xNC41IDguOS0zMC45bDguNS0yOS43IDEuMSA2LjVjMS45IDExLjIgNS4zIDIzLjkgOS4zIDM1LjEgMi4xIDUuOSAzLjggMTAuOSAzLjYgMTFzLTYuNyAyLTE0LjUgNC4zLTE0LjkgNC4yLTE1LjggNC41Yy0xLjEgLjMtMS41IC4xLTEuMi0uN3pNMTA2IDEzOS4xYy0yMy45LTYuOS00My43LTEyLjgtNDMuOS0xMy4yLS44LTEuMy0yNS4xLTg3LTI0LjctODcuNCAuNS0uNSA4Ni44IDI0LjMgODcuNiAyNS4xIC45IDEgMjUuOCA4OC4yIDI1LjEgODgtLjMgMC0yMC4xLTUuNy00NC0xMi42em00My4yLTM0LjVDMTM2LjUgNjAgMTM5IDY4LjggMTM3LjIgNjIuNWwzNC4xLTkuN2MxOC44LTUuNCAzNC43LTkuOSAzNS40LTEwLjJzLTEuNiAyLjgtNS4yIDYuOGMtMTkuMSAyMS4zLTMxLjUgNDQtMzkuNCA3MS45LTEuNSA1LjItMi43IDEwLjMtMi43IDExLjMgMCA1LjktMi4zLS41LTEwLjItMjh6Il0KICAgIH07CiAgICBmYVNlbGxjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlbGxjYXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyZGEiLCAiTTM1My41IDMyTDk0LjggMzJDNDIuNyAzMiAuMSA3NC42IC4xIDEyNi42bDAgMjU4LjdDLjEgNDM3LjQgNDIuNyA0ODAgOTQuOCA0ODBsMjU4LjcgMGM1Mi4xIDAgOTQuNy00Mi42IDk0LjctOTQuNmwwLTI1OC44YzAtNTItNDIuNi05NC42LTk0LjctOTQuNnptLTUwIDMxNi40Yy0yNy45IDQ4LjItODkuOSA2NC45LTEzOC4yIDM3LjItMjIuOSAzOS44LTU0LjkgOC42LTQyLjMtMTMuMmwxNS43LTI3LjJjNS45LTEwLjMgMTkuMi0xMy45IDI5LjUtNy45IDE4LjYgMTAuOC0uMS0uMSAxOC41IDEwLjcgMjcuNiAxNS45IDYzLjQgNi4zIDc5LjQtMjEuMyAxNS45LTI3LjYgNi4zLTYzLjQtMjEuMy03OS40LTE3LjgtMTAuMi0uNi0uNC0xOC42LTEwLjYtMjQuNi0xNC4yLTMuNC01MS45IDIxLjYtMzcuNSAxOC42IDEwLjgtLjEtLjEgMTguNSAxMC43IDQ4LjQgMjggNjUuMSA5MC4zIDM3LjIgMTM4LjV6bTIxLjgtMjA4LjhjLTE3IDI5LjUtMTYuMyAyOC44LTE5IDMxLjUtNi41IDYuNS0xNi4zIDguNy0yNi41IDMuNi0xOC42LTEwLjggLjEgLjEtMTguNS0xMC43LTI3LjYtMTUuOS02My40LTYuMy03OS40IDIxLjNzLTYuMyA2My40IDIxLjMgNzkuNGMwIDAgMTguNSAxMC42IDE4LjYgMTAuNiAyNC42IDE0LjIgMy40IDUxLjktMjEuNiAzNy41LTE4LjYtMTAuOCAuMSAuMS0xOC41LTEwLjctNDguMi0yNy44LTY0LjktOTAuMS0zNy4xLTEzOC40IDI3LjktNDguMiA4OS45LTY0LjkgMTM4LjItMzcuMmw0LjgtOC40YzE0LjMtMjQuOSA1Mi0zLjMgMzcuNyAyMS41eiJdCiAgICB9OwogICAgZmFNaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzY2IiLCAiTTAgNjRMMCA0MTIuOWMwIDU2LjIgODggNTguMSA4OCAwbDAtMjM4LjZjNy45LTUyLjkgODgtNTAuNCA4OCA2LjVsMCAxNzUuM2MwIDU3LjkgOTYgNTggOTYgMEwyNzIgMjQwYzUuMy01NC43IDg4LTUyLjUgODggNC4zbDAgMjMuOGMwIDU5LjkgODggNTYuNiA4OCAwTDQ0OCA2NCAwIDY0eiJdCiAgICB9OwogICAgZmFDY0FwcGxlUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWFwcGxlLXBheSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDE2IiwgIk0zMDIuMiAyMTguNGMwIDE3LjItMTAuNSAyNy4xLTI5IDI3LjFsLTI0LjMgMCAwLTU0LjIgMjQuNCAwYzE4LjQgMCAyOC45IDkuOCAyOC45IDI3LjF6TTM0OS43IDI4MWMwIDguMyA3LjIgMTMuNyAxOC41IDEzLjcgMTQuNCAwIDI1LjItOS4xIDI1LjItMjEuOWwwLTcuNy0yMy41IDEuNWMtMTMuMyAuOS0yMC4yIDUuOC0yMC4yIDE0LjR6TTU3NiA3OWwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0NzljLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNzlDMCA1Mi41IDIxLjUgMzEgNDggMzFsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTEyNy44IDE5Ny4yYzguNCAuNyAxNi44LTQuMiAyMi4xLTEwLjQgNS4yLTYuNCA4LjYtMTUgNy43LTIzLjctNy40IC4zLTE2LjYgNC45LTIxLjkgMTEuMy00LjggNS41LTguOSAxNC40LTcuOSAyMi44em02MC42IDc0LjVjLS4yLS4yLTE5LjYtNy42LTE5LjgtMzAtLjItMTguNyAxNS4zLTI3LjcgMTYtMjguMi04LjgtMTMtMjIuNC0xNC40LTI3LjEtMTQuNy0xMi4yLS43LTIyLjYgNi45LTI4LjQgNi45LTUuOSAwLTE0LjctNi42LTI0LjMtNi40LTEyLjUgLjItMjQuMiA3LjMtMzAuNSAxOC42LTEzLjEgMjIuNi0zLjQgNTYgOS4zIDc0LjQgNi4yIDkuMSAxMy43IDE5LjEgMjMuNSAxOC43IDkuMy0uNCAxMy02IDI0LjItNiAxMS4zIDAgMTQuNSA2IDI0LjMgNS45IDEwLjItLjIgMTYuNS05LjEgMjIuOC0xOC4yIDYuOS0xMC40IDkuOC0yMC40IDEwLTIxem0xMzUuNC01My40YzAtMjYuNi0xOC41LTQ0LjgtNDQuOS00NC44bC01MS4yIDAgMCAxMzYuNCAyMS4yIDAgMC00Ni42IDI5LjMgMGMyNi44IDAgNDUuNi0xOC40IDQ1LjYtNDV6bTkwIDIzLjdjMC0xOS43LTE1LjgtMzIuNC00MC0zMi40LTIyLjUgMC0zOS4xIDEyLjktMzkuNyAzMC41bDE5LjEgMGMxLjYtOC40IDkuNC0xMy45IDIwLTEzLjkgMTMgMCAyMC4yIDYgMjAuMiAxNy4ybDAgNy41LTI2LjQgMS42Yy0yNC42IDEuNS0zNy45IDExLjYtMzcuOSAyOS4xIDAgMTcuNyAxMy43IDI5LjQgMzMuNCAyOS40IDEzLjMgMCAyNS42LTYuNyAzMS4yLTE3LjRsLjQgMCAwIDE2LjQgMTkuNiAwIDAtNjggLjEgMHpNNTE2IDIxMC45bC0yMS41IDAtMjQuOSA4MC42LS40IDAtMjQuOS04MC42LTIyLjMgMCAzNS45IDk5LjMtMS45IDZjLTMuMiAxMC4yLTguNSAxNC4yLTE3LjkgMTQuMi0xLjcgMC00LjktLjItNi4yLS4zbDAgMTYuNGMxLjIgLjQgNi41IC41IDguMSAuNSAyMC43IDAgMzAuNC03LjkgMzguOS0zMS44TDUxNiAyMTAuOXoiXQogICAgfTsKICAgIGZhU29sYW5hID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNvbGFuYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODVlIiwgIk01MTAuNSAzODUuMmwtODQuOSA4OC43Yy0xLjggMS45LTQuMSAzLjUtNi42IDQuNXMtNS4yIDEuNi03LjkgMS42TDguOSA0ODBjLTEuOSAwLTMuOC0uNS01LjQtMS42cy0yLjktMi41LTMuNi00LjItMS0zLjYtLjctNS41IDEuMi0zLjYgMi41LTQuOWw4NC45LTg4LjdjMS44LTEuOSA0LjEtMy41IDYuNS00LjVzNS4xLTEuNiA3LjgtMS42bDQwMi40IDBjMS45IDAgMy44IC41IDUuNCAxLjZzMi45IDIuNSAzLjYgNC4yIDEgMy42IC43IDUuNS0xLjIgMy42LTIuNSA0Ljl6TTQyNS43IDIwNi42Yy0xLjgtMS45LTQuMS0zLjUtNi42LTQuNXMtNS4yLTEuNi03LjktMS42bC00MDIuNCAwYy0xLjkgMC0zLjggLjUtNS40IDEuNnMtMi45IDIuNS0zLjYgNC4yLTEgMy42LS43IDUuNSAxLjIgMy42IDIuNSA0LjlsODQuOSA4OC43YzEuOCAxLjkgNC4xIDMuNSA2LjUgNC41czUuMSAxLjYgNy44IDEuNmw0MDIuNCAwYzEuOSAwIDMuOC0uNSA1LjQtMS42czIuOS0yLjUgMy42LTQuMiAxLTMuNiAuNy01LjUtMS4yLTMuNi0yLjUtNC45bC04NC45LTg4Ljd6TTguOSAxNDIuOWw0MDIuNCAwYzIuNyAwIDUuNC0uNSA3LjktMS42czQuNy0yLjYgNi42LTQuNWw4NC45LTg4LjdjMS4zLTEuNCAyLjItMy4xIDIuNS00LjlzLjEtMy43LS43LTUuNS0yLTMuMi0zLjYtNC4yLTMuNS0xLjYtNS40LTEuNkwxMDEgMzJjLTIuNyAwLTUuNCAuNS03LjggMS42cy00LjcgMi42LTYuNSA0LjVMMS43IDEyNi44Yy0xLjMgMS40LTIuMiAzLjEtMi41IDQuOXMtLjEgMy43IC43IDUuNSAyIDMuMiAzLjYgNC4yIDMuNSAxLjYgNS40IDEuNnoiXQogICAgfTsKICAgIGZhVHlwZXNjcmlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0eXBlc2NyaXB0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU4NDAiLCAiTTE2LjggMzJsNDE0LjQgMGM5LjMgMCAxNi44IDcuNSAxNi44IDE2LjhsMCA0MTQuNGMwIDkuMy03LjUgMTYuOC0xNi44IDE2LjhMMTYuOCA0ODBDNy41IDQ4MCAwIDQ3Mi41IDAgNDYzLjJMMCA0OC44QzAgMzkuNSA3LjUgMzIgMTYuOCAzMnpNMjQ5IDI3MC4zbDAtMzYuNy0xNTkuNCAwIDAgMzYuNyA1Ni45IDAgMCAxNjMuNiA0NS4zIDAgMC0xNjMuNiA1Ny4yIDB6bTE4LjEgMTU5LjNjNy4zIDMuNyAxNS45IDYuNSAyNS45IDguNHMyMC41IDIuOCAzMS41IDIuOGMxMC44IDAgMjEtMSAzMC43LTMuMXMxOC4yLTUuNCAyNS41LTEwLjEgMTMuMS0xMC45IDE3LjQtMTguNCA2LjQtMTcgNi40LTI4LjJjMC04LjEtMS4yLTE1LjItMy43LTIxLjNzLTUuOS0xMS41LTEwLjUtMTYuMy0xMC4xLTktMTYuNS0xMi44LTEzLjctNy4zLTIxLjctMTAuN2MtNS45LTIuNC0xMS4yLTQuOC0xNS45LTcuMXMtOC43LTQuNi0xMS45LTctNS44LTQuOS03LjYtNy41LTIuNy01LjctMi43LTljMC0zLjEgLjgtNS44IDIuNC04LjNzMy44LTQuNiA2LjctNi40IDYuNS0zLjEgMTAuNy00LjEgOC45LTEuNSAxNC4xLTEuNWMzLjcgMCA3LjcgLjMgMTEuOSAuOHM4LjQgMS40IDEyLjYgMi42IDguMyAyLjYgMTIuMyA0LjQgNy43IDMuOCAxMSA2LjFsMC00MS44Yy02LjgtMi42LTE0LjMtNC41LTIyLjQtNS44cy0xNy40LTEuOS0yNy45LTEuOWMtMTAuNyAwLTIwLjggMS4xLTMwLjQgMy40cy0xOCA1LjgtMjUuMiAxMC43LTEzIDExLTE3LjIgMTguNS02LjMgMTYuNS02LjMgMjYuOWMwIDEzLjMgMy45IDI0LjcgMTEuNiAzNC4xczE5LjUgMTcuNCAzNS4yIDIzLjljNi4yIDIuNSAxMS45IDUgMTcuMyA3LjRzMTAgNC45IDEzLjggNy41IDcgNS40IDkuMiA4LjUgMy40IDYuNiAzLjQgMTAuNWMwIDIuOS0uNyA1LjYtMi4xIDhzLTMuNSA0LjYtNi40IDYuNC02LjQgMy4yLTEwLjcgNC4zLTkuMyAxLjUtMTUgMS41Yy05LjcgMC0xOS40LTEuNy0yOC45LTUuMXMtMTguNC04LjUtMjYuNi0xNS4zbDAgNDQuN3oiXQogICAgfTsKICAgIGZhQnJhdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnJhdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYzYyIsICJNMTQ1LjYgMGwxNTcgMCA0NC43IDUwLjhzMzkuMy0xMC45IDU3LjggNy42IDMzLjggMzQuOSAzMy44IDM0LjlsLTEyIDI5LjUgMTUuMyA0My43cy00NC45IDE3MC4yLTUwLjEgMTkxYy0xMC40IDQwLjktMTcuNCA1Ni44LTQ2LjkgNzcuNXMtODIuOSA1Ni44LTkxLjYgNjIuMmMtMS45IDEuMi0zLjkgMi41LTUuOSAzLjktNy41IDUuMS0xNS44IDEwLjgtMjMuNSAxMC44cy0xNi4xLTUuNy0yMy41LTEwLjhjLTItMS40LTQtMi44LTUuOS0zLjktOC43LTUuNS02Mi4xLTQxLjUtOTEuNi02Mi4ycy0zNi41LTM2LjYtNDYuOS03Ny41Yy01LjMtMjAuOC01MC4xLTE5MS01MC4xLTE5MUwyMS41IDEyMi44IDkuMyA5My4zczE1LjMtMTYuNCAzMy44LTM0LjkgNTcuOC03LjYgNTcuOC03LjZMMTQ1LjYgMHptNzguNSA0MDcuNmMzLjcgMCA4LjktNC43IDEzLTguNCAuNi0uNSAxLjItMS4xIDEuNy0xLjUgNC4yLTMuNyA0Ny44LTM3LjUgNTEtMzkuOHM1LjQtNi41IDEuOS04LjdjLTIuOC0xLjctMTAtNS41LTIwLjMtMTAuOC0zLTEuNi02LjMtMy4yLTkuNy01LTE1LjQtOC0zNC41LTE0LjctMzcuNS0xNC43cy0yMi4xIDYuOC0zNy41IDE0LjdjLTMuNSAxLjgtNi43IDMuNS05LjcgNS0xMC4zIDUuMy0xNy42IDkuMS0yMC4zIDEwLjgtMy42IDIuMi0xLjQgNi40IDEuOSA4LjdzNDYuOCAzNi4xIDUxIDM5LjhjLjUgLjUgMS4xIDEgMS43IDEuNSA0LjEgMy43IDkuMyA4LjQgMTMgOC40bC0uMiAwem0wLTE2NS43YzQuNyAwIDE3LjYtMyAyNi40LTVsMi0uNWM3LjgtMS44IDcuMy02LjMgNi40LTEzLS4xLS44LS4yLTEuNi0uMy0yLjQtLjYtNi4xLTUuOC0zMy4xLTkuMS01MC4zLTEuMS01LjgtMi0xMC41LTIuNC0xMi45LTEuNS04LjEtLjYtOS40IC43LTExLjMgLjItLjMgLjUtLjcgLjctMS4xIDEuNC0yLjMgMTYtNi4yIDI3LjktOS41IDIuNS0uNyA0LjgtMS4zIDYuOS0xLjkgMTAuNi0zIDMyLjQtLjYgNDQuMiAuNiAxLjggLjIgMy40IC40IDQuNyAuNSA5LjYgLjkgMTAuNCAyLjMgNy4yIDMuOC0yLjMgMS4xLTE2LjIgNi4zLTI4LjcgMTAuOS00LjcgMS44LTkuMiAzLjUtMTIuOCA0LjgtMS41IC41LTMgMS4xLTQuNSAxLjctMTIuNSA0LjYtMjcuMiAxMC0yOC45IDE5LjQtMS41IDguMyA1LjIgMTkuOSAxMS4zIDMwLjMgMS42IDIuOCAzLjIgNS41IDQuNiA4LjEgNi4zIDExLjkgNi41IDEzLjMgNi4xIDE4LjEtLjQgMy45LTE0LjUgMTIuNy0yMi40IDE3LjYtMS44IDEuMS0zLjMgMi4xLTQuMiAyLjctLjggLjUtMi4xIDEuNC0zLjggMi40LTguNiA1LjItMjYuMyAxNi0yNi4zIDIyLjUgMCA3LjggMjQuNiAyOC4xIDMyLjQgMzMuMnMyOC45IDE2LjEgMzcuOSAxNy44IDIzLTguNSAzMS4yLTIzLjhjNy43LTE0LjQgMS43LTI4LjUtMy4yLTQwbC0uOS0yLjJjLTQuNS0xMC42IDEuOS0xNyA2LjItMjEuMyAuNS0uNSAxLTEgMS40LTEuNGw0My00NS43YzEuMy0xLjMgMi41LTIuNiAzLjctMy44IDUuOC01LjcgMTAuOC0xMC41IDEwLjgtMjIuOCAwLTE0LjktNTcuNS04NC41LTU3LjUtODQuNXMtNDguNSA5LjMtNTUuMSA5LjNjLTUuMiAwLTE1LjMtMy41LTI1LjgtNy4xLTIuNy0uOS01LjQtMS45LTgtMi43LTEzLTQuMy0yMS44LTQuNC0yMS44LTQuNHMtOC43IDAtMjEuOCA0LjRjLTIuNyAuOS01LjQgMS44LTggMi43LTEwLjUgMy42LTIwLjYgNy4xLTI1LjggNy4xLTYuNSAwLTU1LjEtOS4zLTU1LjEtOS4zcy01Ny41IDY5LjYtNTcuNSA4NC41YzAgMTIuMyA0LjkgMTcuMSAxMC44IDIyLjggMS4yIDEuMiAyLjUgMi40IDMuNyAzLjhsNDMuMSA0NS44Yy40IC41IC45IC45IDEuNCAxLjQgNC4zIDQuMyAxMC42IDEwLjcgNi4yIDIxLjNsLS45IDIuMmMtNC45IDExLjUtMTEgMjUuNi0zLjIgNDAgOC4yIDE1LjMgMjIuMiAyNS41IDMxLjIgMjMuOHMzMC4xLTEyLjcgMzcuOS0xNy44IDMyLjQtMjUuNCAzMi40LTMzLjJjMC02LjUtMTcuNy0xNy4zLTI2LjMtMjIuNS0xLjctMS0zLjEtMS45LTMuOC0yLjQtLjktLjYtMi40LTEuNS00LjItMi43LTcuOS00LjktMjItMTMuNy0yMi40LTE3LjYtLjQtNC44LS4zLTYuMiA2LjEtMTguMSAxLjMtMi41IDIuOS01LjMgNC42LTguMSA2LTEwLjQgMTIuOC0yMiAxMS4zLTMwLjMtMS43LTkuNC0xNi40LTE0LjgtMjguOS0xOS40LTEuNi0uNi0zLjEtMS4xLTQuNS0xLjctMy42LTEuNC04LjEtMy4xLTEyLjgtNC44bC0uMSAwYy0xMi41LTQuNy0yNi40LTkuOS0yOC43LTEwLjktMy4yLTEuNS0yLjMtMi44IDcuMi0zLjggMS4zLS4xIDIuOS0uMyA0LjctLjUgMTEuOC0xLjMgMzMuNi0zLjYgNDQuMi0uNiAyLjEgLjYgNC40IDEuMiA2LjkgMS45IDExLjkgMy4yIDI2LjUgNy4yIDI3LjkgOS41IC4yIC40IC41IC43IC43IDEuMSAxLjMgMS45IDIuMiAzLjIgLjcgMTEuMy0uNCAyLjQtMS4zIDcuMS0yLjQgMTIuOS0zLjMgMTcuMi04LjUgNDQuMi05LjEgNTAuMy0uMSAuOC0uMiAxLjctLjMgMi40LS44IDYuNy0xLjQgMTEuMiA2LjQgMTNsMiAuNWM4LjggMiAyMS44IDUgMjYuNCA1bDAtLjF6Il0KICAgIH07CiAgICBmYUV0c3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZXRzeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMmQ3IiwgIk0zODQgMzQ4Yy0xLjggMTAuNy0xMy44IDExMC0xNS41IDEzMi0xMTcuOS00LjMtMjE5LjktNC43LTM2OC41IDBsMC0yNS41YzQ1LjUtOC45IDYwLjYtOCA2MS0zNS4yIDEuOC03Mi4zIDMuNS0yNDQuMSAwLTMyMi0xLTI4LjUtMTIuMS0yNi44LTYxLTM2TDAgMzUuOGM3My45IDIuNCAyNTUuOSA4LjYgMzYzLTMuOC0zLjUgMzguMi03LjggMTI2LjUtNy44IDEyNi41bC0yMy4yIDBDMzIwLjkgMTE1LjcgMzEzLjIgNjggMjc3LjMgNjhsLTEzNyAwYy0xMC4yIDAtMTAuNyAzLjUtMTAuNyA5LjhsMCAxNjMuOGM1OCAuNSA4OC41LTIuNSA4OC41LTIuNSAyOS44LTEgMjcuNi04LjUgNDAuNy02NS4zbDI1LjggMGMtNC40IDEwMS40LTMuOSA2MS44LTEuOCAxNjAuM0wyNTcgMzM0Yy05LjItNDAuMS05LjEtNjEtMzkuNS02MS41IDAgMC0yMS41LTItODgtMmwwIDEzOWMwIDI2IDE0LjMgMzguMyA0NC4zIDM4LjNsODkuMyAwYzYzLjYgMCA2Ni42LTI1IDk4LjctOTkuOGwyMi4yIDB6Il0KICAgIH07CiAgICBmYUJ0YyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidGMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE1YSIsICJNMzEwLjQgMjQyLjZjMjcuNy0xNC4yIDQ1LjQtMzkuNCA0MS4zLTgxLjMtNS40LTU3LjQtNTIuNS03Ni42LTExNC44LTgxLjlsMC03OS40LTQ4LjUgMCAwIDc3LjJjLTEyLjYgMC0yNS41IC4zLTM4LjQgLjZsMC03Ny44LTQ4LjUgMCAwIDc5LjRjLTE3LjggLjUtMzguNiAuMy05Ny40IDBsMCA1MS43YzM4LjMtLjcgNTguNC0zLjEgNjMgMjEuNGwwIDIxNy40Yy0yLjkgMTkuNS0xOC41IDE2LjctNTMuMyAxNi4xTDQgNDQzLjdjODguNSAwIDk3LjQgLjMgOTcuNCAuM2wwIDY4IDQ4LjUgMCAwLTY3LjFjMTMuMiAuMyAyNi4yIC4zIDM4LjQgLjNsMCA2Ni43IDQ4LjUgMCAwLTY4YzgxLjMtNC40IDEzNS42LTI0LjkgMTQyLjktMTAxLjUgNS43LTYxLjQtMjMuMy04OC45LTY5LjMtOTkuOXpNMTUwLjggMTM0LjZjMjcuNCAwIDExMy4xLTguNSAxMTMuMSA0OC41IDAgNTQuNS04NS43IDQ4LjItMTEzLjEgNDguMmwwLTk2Ljd6bTAgMjUxLjhsMC0xMDYuNWMzMi44IDAgMTMzLjEtOS4xIDEzMy4xIDUzLjMgMCA2MC4yLTEwMC40IDUzLjMtMTMzLjEgNTMuM3oiXQogICAgfTsKICAgIGZhQWRuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFkbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTcwIiwgIk0yNTYgMTY3LjVsNjQuOSA5OC44LTEyOS44IDAgNjQuOS05OC44ek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zOTYuMiA4Mi43bC0xNDguMi0yMjMuMi0xNDguMiAyMjMuMiAzMC40IDAgMzMuNi01MS43IDE2OC42IDAgMzMuNiA1MS43IDMwLjIgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlWFR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXgtdHdpdHRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjFhIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yOTcuMSA4NGwtMTAzLjggMTE4LjYgMTIyLjEgMTYxLjQtOTUuNiAwLTc0LjgtOTcuOS04NS43IDk3LjktNDcuNSAwIDExMS0xMjYuOS0xMTcuMS0xNTMuMSA5OCAwIDY3LjcgODkuNSA3OC4yLTg5LjUgNDcuNSAwek0zMjMuMyAzNjcuNmwtMTY5LjktMjI0LjctMjguMyAwIDE3MS44IDIyNC43IDI2LjQgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlRm9udEF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNWFkIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem05MCAxMjJjMCA5LjMtNC44IDE3LjQtMTIuMSAyMmwxODguOSAwYzcuMyAwIDEzLjIgNS45IDEzLjIgMTMuMiAwIDEuOC0uNCAzLjctMS4xIDUuNEwzMTIgMjY0IDM0Mi45IDMzMy40Yy43IDEuNyAxLjEgMy41IDEuMSA1LjQgMCA3LjMtNS45IDEzLjItMTMuMiAxMy4ybC0xODYuOCAwIDAgMzItMzIgMCAwLTIwOS41Yy02LjEtNC44LTEwLTEyLjItMTAtMjAuNSAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2eiJdCiAgICB9OwogICAgZmFGb3J1bWJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb3J1bWJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjExIiwgIk01LjggMzA5LjdDMiAyOTIuNyAwIDI3NS41IDAgMjU4LjMgMCAxMzUgOTkuOCAzNSAyMjMuMSAzNSAyMzkuNyAzNSAyNTYuNCAzNyAyNzIuNCA0MC41IDE0OSA4Ny41IDUxLjkgMTg2IDUuOCAzMDkuN3pNMzk4LjcgMTIwLjVjLTEzLjctMTcuNS0yOS43LTMyLjctNDcuOC00NS4zLTE0OS42IDQ0LjMtMjY2LjMgMTYyLjEtMzA5LjcgMzEyIDEyLjUgMTguMSAyOCAzNS42IDQ1LjIgNDkgNDMuMS0xNTEuMyAxNjEuMi0yNzEuNyAzMTIuMy0zMTUuN3ptMTUuOCAyNTIuN2MxNS4yLTI1LjEgMjUuNC01My43IDI5LjUtODIuOC03OS40IDQyLjktMTQ1IDExMC42LTE4Ny42IDE5MC4zIDMwLTQuNCA1OC45LTE1LjMgODQuNi0zMS4zIDM1IDEzLjEgNzAuOSAyNC4zIDEwNyAzMy42LTkuMy0zNi41LTIwLjQtNzQuNS0zMy41LTEwOS44em0yOS43LTE0NS41Yy0yLjYtMTkuNS03LjktMzguNy0xNS44LTU2LjgtMTM3LjkgNDUuOC0yNDYuNCAxNTYuNi0yOTEuMyAyOTUuMSAxOC4xIDcuNiAzNyAxMi41IDU2LjYgMTUuMiA0Ni4zLTExNC4xIDEzNi44LTIwNi44IDI1MC41LTI1My41eiJdCiAgICB9OwogICAgZmE0Mkdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIjQyLWdyb3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImlubm9zb2Z0Il0sICJlMDgwIiwgIk0zMjAgOTZsMCAzMjBjMjEgMCA0MS44LTQuMSA2MS4yLTEyLjJzMzctMTkuOCA1MS45LTM0LjcgMjYuNi0zMi41IDM0LjctNTEuOSAxMi4yLTQwLjIgMTIuMi02MS4yLTQuMS00MS44LTEyLjItNjEuMi0xOS44LTM3LjEtMzQuNy01MS45LTMyLjUtMjYuNi01MS45LTM0LjctNDAuMi0xMi4yLTYxLjItMTIuMnpNMCAyNTZMMTYwIDQxNiAzMjAgMjU2IDE2MCA5NiAwIDI1NnptNDgwIDBjMCAyMSA0LjEgNDEuOCAxMi4yIDYxLjJzMTkuOCAzNyAzNC43IDUxLjkgMzIuNSAyNi42IDUxLjkgMzQuNyA0MC4yIDEyLjIgNjEuMiAxMi4ybDAtMzIwYy00Mi40IDAtODMuMSAxNi45LTExMy4xIDQ2LjlTNDgwIDIxMy42IDQ4MCAyNTZ6Il0KICAgIH07CiAgICBmYUlubm9zb2Z0ID0gZmE0Mkdyb3VwOwogICAgZmFTdHVtYmxldXBvbkNpcmNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVtYmxldXBvbi1jaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhMyIsICJNMjY0IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDE3Ny41Yy05LjggMC0xNy44IDgtMTcuOCAxNy44bDAgMTA2LjljMCA0MC45LTMzLjkgNzMuOS03NC45IDczLjktNDEuNCAwLTc0LjktMzMuNS03NC45LTc0LjlsMC00Ni41IDU3LjMgMCAwIDQ1LjhjMCAxMCA4IDE3LjggMTcuOCAxNy44czE3LjgtNy45IDE3LjgtMTcuOGwwLTEwOC40YzAtNDAgMzQuMi03Mi4xIDc0LjctNzIuMSA0MC43IDAgNzQuNyAzMi4zIDc0LjcgNzIuNmwwIDIzLjctMzQuMSAxMC4xLTIyLjktMTAuNyAwLTIwLjZjLjEtOS42LTcuOS0xNy42LTE3LjctMTcuNnpNNDMxLjYgMzA5LjFjMCA0MS40LTMzLjUgNzQuOS03NC45IDc0LjktNDEuMiAwLTc0LjktMzMuMi03NC45LTc0LjJsMC00Ni44IDIyLjkgMTAuNyAzNC4xLTEwLjEgMCA0Ny4xYzAgOS44IDggMTcuNiAxNy44IDE3LjZzMTcuOC03LjkgMTcuOC0xNy42bDAtNDggNTcuMyAwYy0uMSA0NS45LS4xIDQ2LjQtLjEgNDYuNHoiXQogICAgfTsKICAgIGZhU3ltZm9ueSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzeW1mb255IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2QiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzg5LjcgMTUxLjVjLTExLjUgLjQtMTkuNC02LjQtMTkuOC0xNi45LS4zLTkuMiA2LjctMTMuNCA2LjUtMTguOS0uMi02LjUtMTAuMi02LjgtMTIuOS02LjctMzkuOCAxLjMtNDguNiA1Ny01OC45IDExMy44IDIxLjQgMy4yIDM2LjYtLjcgNDUuMS02LjIgMTItNy43LTMuMy0xNS43LTEuNC0yNC42IDQtMTguMiAzMi42LTE5IDMyIDUuMy0uNCAxNy45LTI1LjkgNDEuOC03Ny42IDM1LjctMTAuOCA1OS41LTE4LjQgMTE1LTU4LjIgMTYxLjctMjkgMzQuNS01OC40IDM5LjgtNzEuNiA0MC4zLTI0LjYgLjktNDEtMTIuMy00MS42LTI5LjgtLjYtMTcgMTQuNC0yNi4zIDI0LjMtMjYuNiAyMS45LS44IDMwLjEgMjUuNyAxNC45IDM0LTEyLjEgOS43IC4xIDEyLjYgMi4xIDEyLjYgMTAuNC0uNCAxNy4zLTUuNSAyMi4yLTkgMjQtMjAgMzMuMi01NC45IDQ1LjQtMTE4LjMgOC4yLTQ5LjcgMTctNzggMTguMi04Mi0xNi45LTEyLjctMjcuMS0yOC42LTQ5LjgtMzQuNy0xNS42LTQuMi0yNS4xLS42LTMxLjggNy44LTcuOSAxMC01LjMgMjMgMi40IDMwLjdsMTIuNiAxNGMxNS41IDE3LjkgMjQgMzEuOSAyMC44IDUwLjYtNS4xIDI5LjktNDAuNyA1Mi45LTgyLjkgMzkuOS0zNi0xMS4xLTQyLjctMzYuNi0zOC40LTUwLjYgNy41LTI0LjIgNDIuNC0xMS43IDM0LjYgMTMuNi0yLjggOC42LTQuOSA4LjctNi4zIDEzLjEtNC42IDE0LjggNDEuOCAyOC40IDUxLTEuNCA0LjUtMTQuNS01LjMtMjEuNy0yMi4yLTM5LjktMjguNS0zMS43LTE2LTY1LjUgMi45LTc5LjcgNTIuOC0zOS40IDEwMC41IDE3LjUgMTEwLjYgMjUuOCAzNy4yLTEwOSAxMDAuNS0xMDUuNSAxMDIuNC0xMDUuNSAyNS4yLS44IDQ0LjIgMTAuNiA0NC44IDI4LjYgLjIgNy43LTQuMiAyMi42LTE5LjUgMjMuMXoiXQogICAgfTsKICAgIGZhU2FsZXNmb3JjZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzYWxlc2ZvcmNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4M2IiLCAiTTI0OS40IDI0NS42bC0yNi40IDBjLjctNS4yIDMuMy0xNC4xIDEzLjYtMTQuMSA2LjggMCAxMiAzLjggMTIuNyAxNC4xek0zODYgMjMxLjhjLS41IDAtMTQuMS0xLjgtMTQuMSAyMHMxMy42IDIwIDE0LjEgMjBjMTMgMCAxNC4xLTEzLjUgMTQuMS0yMCAwLTIxLjgtMTMuNy0yMC0xNC4xLTIwek0xNDIuOCAyNTUuNWMtMS4xIC45LTIgMi0yLjUgMy4ycy0uOCAyLjctLjcgNGMwIDQuOCAyLjEgNi4xIDMuMyA3IDQuNyAzLjcgMTUuMSAyLjEgMjAuOSAxbDAtMTYuOWMtNS4zLTEuMS0xNi43LTItMjAuOSAxLjZ6TTY0MC41IDIzMmMwIDg3LjYtODAgMTU0LjQtMTY1LjQgMTM2LjQtMTguNCAzMy03MC43IDcwLjgtMTMyLjIgNDEuNi00MS4yIDk2LTE3Ny45IDkyLjItMjEzLjgtNS4yLTExOS43IDIzLjktMTc4LjgtMTM4LjQtNzUuMy0xOTkuMy0zNC44LTc5LjQgMjIuNi0xNzMuNiAxMTQuMy0xNzMuNiAxOS4xIDAgMzcuOSA0LjQgNTUgMTIuOXMzMiAyMC43IDQzLjYgMzUuOGMyMC43LTIxLjQgNDkuNC0zNC44IDgxLjEtMzQuOCA0Mi4zIDAgNzkgMjMuNSA5OC44IDU4LjYgOTIuOC00MC43IDE5My44IDI4LjIgMTkzLjggMTI3LjV6TTEyMC45IDI2My44YzAtMTEuOC0xMS43LTE1LjItMTcuOS0xNy4yLTUuMy0yLjEtMTMuNC0zLjUtMTMuNC04LjkgMC05LjUgMTctNi43IDI1LjItMi4xIDAgMCAxLjIgLjcgMS42LS41IC4yLS43IDIuNC02LjYgMi42LTcuMyAuMS0uMyAuMS0uNi0uMS0uOHMtLjQtLjUtLjYtLjZjLTEyLjMtNy42LTQwLjctOC41LTQwLjcgMTIuNyAwIDEyLjUgMTEuNSAxNS40IDE3LjkgMTcuMiA0LjcgMS42IDEzLjIgMyAxMy4yIDguNyAwIDQtMy41IDcuMS05LjIgNy4xLTYuOSAwLTEzLjUtMi4yLTE5LTYuMy0uNS0uMi0xLjQtLjctMS42IC43bC0yLjQgNy41Yy0uNSAuOSAuMiAxLjIgLjIgMS40IDEuOCAxLjQgMTAuMyA2LjYgMjIuOCA2LjYgMTMuMiAwIDIxLjQtNy4xIDIxLjQtMTguMWwwIDB6bTMyLTQyLjZjLTEwLjEgMC0xOC43IDMuMi0yMS40IDUuMi0uMSAuMS0uMiAuMi0uMyAuM3MtLjEgLjItLjEgLjQgMCAuMyAwIC40IC4xIC4zIC4yIC40bDIuNiA3LjFjLjEgLjIgLjIgLjUgLjUgLjZzLjUgLjIgLjcgLjFjLjYgMCA2LjgtNCAxNi45LTQgNCAwIDcuMSAuNyA5LjIgMi40IDMuNiAyLjggMy4xIDguMyAzLjEgMTAuNi00LjgtLjMtMTkuMS0zLjQtMjkuNCAzLjgtMi4zIDEuNi00LjMgMy44LTUuNSA2LjNzLTEuOSA1LjQtMS44IDguMmMwIDUuOSAxLjUgMTAuNCA2LjYgMTQuNCAxMi4yIDguMiAzNi4zIDIgMzguMSAxLjQgMS42LS4zIDMuNS0uNyAzLjUtMS45bDAtMzMuOWMwLTQuNiAuMy0yMS42LTIyLjgtMjEuNmwwIC4xem00Ni42LTIxYzAtLjIgMC0uMy0uMS0uNXMtLjEtLjMtLjMtLjQtLjItLjItLjQtLjMtLjMtLjEtLjUtLjFsLTkuOCAwYy0uMiAwLS4zIDAtLjUgLjFzLS4zIC4xLS40IC4zLS4yIC4yLS4zIC40LS4xIC4zLS4xIC41bDAgNzljMCAuMiAwIC4zIC4xIC41cy4xIC4zIC4zIC40IC4yIC4yIC40IC4zIC4zIC4xIC41IC4xbDkuOSAwYy4yIDAgLjMgMCAuNS0uMXMuMy0uMSAuNC0uMyAuMi0uMiAuMy0uNCAuMS0uMyAuMS0uNWwtLjEtNzl6bTU1LjcgMjguOWMtMi4xLTIuMy02LjgtNy41LTE3LjYtNy41LTMuNSAwLTE0LjIgLjItMjAuNyA4LjktNi40IDcuNi02LjYgMTguMS02LjYgMjEuNCAwIDMuMSAuMiAxNC4zIDcuMSAyMS4yIDIuNiAyLjkgOS4xIDguMiAyMi44IDguMiAxMC44IDAgMTYuNS0yLjMgMTguNi0zLjggLjUtLjIgLjctLjcgLjItMS45bC0yLjMtNi44Yy0uMS0uMy0uMy0uNS0uNi0uNnMtLjUtLjItLjgtLjFjLTIuNiAuOS02LjMgMi44LTE1LjMgMi44LTE3LjQgMC0xNi44LTE0LjctMTYuOS0xNi43bDM3LjIgMGMuMyAwIC41LS4xIC43LS4zcy40LS40IC40LS43Yy0uMyAwIDIuMS0xNC43LTYuMS0yNC4ybDAgMHptMzYuNyA1Mi43YzEzLjIgMCAyMS40LTcuMSAyMS40LTE4LjEgMC0xMS44LTExLjctMTUuMi0xNy45LTE3LjItNC4xLTEuNy0xMy40LTMuNC0xMy40LTguOSAwLTMuOCAzLjMtNi40IDguNS02LjQgNS44IC4xIDExLjUgMS42IDE2LjcgNC4yIDAgMCAxLjIgLjcgMS42LS41IC4yLS43IDIuNC02LjYgMi42LTcuMyAuMS0uMyAuMS0uNi0uMS0uOHMtLjQtLjUtLjYtLjZjLTcuOS00LjktMTYuNy00LjktMjAuMi00LjktMTIgMC0yMC41IDcuMy0yMC41IDE3LjYgMCAxMi41IDExLjUgMTUuNCAxNy45IDE3LjIgNi4xIDIgMTMuMiAzLjMgMTMuMiA4LjcgMCA0LTMuNSA3LjEtOS4yIDcuMS02LjkgMC0xMy41LTIuMi0xOS02LjQtLjEtLjEtLjMtLjItLjUtLjJzLS40IDAtLjUgLjEtLjMgLjItLjQgLjMtLjIgLjMtLjIgLjVsLTIuMyA3LjVjLS41IC45IC4yIDEuMiAuMiAxLjQgMS43IDEuNCAxMC4zIDYuNiAyMi44IDYuNmwwIDB6TTM1Ny42IDIyNGMwLS43LS4yLTEuMi0xLjItMS4ybC0xMS44IDBjMC0uMSAuOS04LjkgNC41LTEyLjUgNC4yLTQuMiAxMS44LTEuNiAxMi0xLjYgMS4yIC41IDEuNCAwIDEuNi0uNWwyLjgtNy44Yy43LS45IDAtMS4yLS4yLTEuNC01LjEtMi0xNy40LTIuOS0yNC41IDQuMi01LjUgNS41LTcgMTMuOS04IDE5LjVsLTguNSAwYy0uMyAwLS42IC4yLS44IC40cy0uMyAuNS0uNCAuOGwtMS40IDcuOGMwIC43IC4yIDEuMiAxLjIgMS4ybDguMiAwYy04LjUgNDcuOS04LjcgNTAuMi0xMC4zIDU1LjUtMS4xIDMuNi0zLjMgNi45LTUuOSA3LjgtLjEgMC0zLjkgMS43LTkuNi0uMiAwIDAtLjktLjUtMS40IC43LS4yIC43LTIuNiA2LjgtMi44IDcuNXMwIDEuNCAuNSAxLjRjNS4xIDIgMTMgMS44IDE3LjkgMCA2LjMtMi4zIDkuNy03LjkgMTEuNS0xMi45IDIuOC03LjcgMi44LTkuOCAxMS44LTU5LjdsMTIuMiAwYy4zIDAgLjYtLjIgLjgtLjRzLjMtLjUgLjQtLjhsMS40LTcuOHpNNDExIDI0MGMtLjYtMS43LTUuMS0xOC4xLTI1LjItMTguMS0xNS4yIDAtMjMgMTAtMjUuMiAxOC4xLTEgMy0zLjIgMTQgMCAyMy41IC4xIC4zIDQuNCAxOC4xIDI1LjIgMTguMSAxNSAwIDIyLjktOS42IDI1LjItMTguMSAzLjItOS42IDEtMjAuNSAwLTIzLjV6bTQ1LjQtMTYuN2MtNS0xLjctMTYuNi0xLjktMjIuMSA1LjRsMC00LjVjMC0uMiAwLS4zLS4xLS41cy0uMS0uMy0uMy0uNC0uMi0uMi0uNC0uMy0uMy0uMS0uNS0uMWwtOS40IDBjLS4yIDAtLjMgMC0uNSAuMXMtLjMgLjEtLjQgLjMtLjIgLjItLjMgLjQtLjEgLjMtLjEgLjVsMCA1NS4zYzAgLjIgMCAuMyAuMSAuNXMuMSAuMyAuMyAuNCAuMiAuMiAuNCAuMyAuMyAuMSAuNSAuMWw5LjYgMGMuMiAwIC4zIDAgLjUtLjFzLjMtLjEgLjQtLjMgLjItLjIgLjMtLjQgLjEtLjMgLjEtLjVsMC0yNy44YzAtMi45IC4xLTExLjQgNC41LTE1LjEgNC45LTQuOSAxMi0zLjQgMTMuNC0zLjEgLjMgMCAuNi0uMSAuOC0uM3MuNC0uNCAuNi0uN2MxLjItMi42IDIuMi01LjMgMy4xLTggLjEtLjMgLjEtLjUgMC0uOHMtLjMtLjUtLjUtLjZsMCAwem00Ni44IDU0LjFsLTIuMS03LjNjLS41LTEuMi0xLjQtLjctMS40LS43LTQuMiAxLjgtMTAuMSAxLjktMTEuMyAxLjktNC42IDAtMTcuMi0xLjEtMTcuMi0xOS44IDAtNi4yIDEuOC0xOS44IDE2LjUtMTkuOCAzLjktLjEgNy44IC41IDExLjUgMS42IDAgMCAuOSAuNSAxLjItLjcgLjktMi42IDEuNi00LjUgMi42LTcuNSAuMi0uOS0uNS0xLjItLjctMS4yLTExLjYtMy45LTIyLjMtMi41LTI3LjggMC0xLjYgLjctMTYuMiA2LjUtMTYuMiAyNy41IDAgMi45LS42IDMwLjEgMjguOSAzMC4xIDUuMyAwIDEwLjYtMSAxNS41LTIuOCAuMi0uMiAuNC0uNCAuNS0uNnMuMS0uNSAwLS44bDAgMHptNTMuOS0zOS41Yy0uOC0zLTUuNC0xNi4yLTIyLjMtMTYuMi0xNiAwLTIzLjUgMTAuMS0yNS42IDE4LjYtMS4yIDMuOC0xLjcgNy44LTEuNyAxMS44IDAgMjUuOSAxOC44IDI5LjQgMjkuOSAyOS40IDEwLjggMCAxNi41LTIuMyAxOC42LTMuOCAuNS0uMiAuNy0uNyAuMi0xLjlsLTIuNC02LjhjLS4xLS4zLS4zLS41LS42LS42cy0uNi0uMi0uOC0uMWMtMi42IC45LTYuMyAyLjgtMTUuMyAyLjgtMTcuNCAwLTE2LjktMTQuNy0xNi45LTE2LjdsMzcuMiAwYy4zIDAgLjUtLjEgLjctLjNzLjQtLjQgLjQtLjdjLS4yIDAgLjktNy4xLTEuNC0xNS41bDAgMHptLTIzLjMtNi40Yy0xMC4zIDAtMTMgOS0xMy42IDE0LjFsMjYuNCAwYy0uOS0xMS45LTcuNi0xNC4xLTEyLjctMTQuMWwwIDB6Il0KICAgIH07CiAgICBmYVNvdXJjZXRyZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic291cmNldHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2QzIiwgIk00MjcuNCAyMDNjMC0xMTIuMS05MC45LTIwMy0yMDMtMjAzLTExMi4xLS4yLTIwMyA5MC42LTIwMy4yIDIwMi42LS4xIDQzIDEzLjUgODQuOCAzOC43IDExOS42czYwLjkgNjAuNiAxMDEuOCA3My44bDAgMTAxLjdjMCAzLjggMS41IDcuNCA0LjIgMTAuMXM2LjMgNC4yIDEwLjEgNC4ybDk2LjQgMGMzLjggMCA3LjQtMS41IDEwLjEtNC4yczQuMi02LjMgNC4yLTEwLjFsMC0xMDEuNmM0MC44LTEzLjIgNzYuNS0zOSAxMDEuNy03My43czM4LjktNzYuNSAzOS0xMTkuNHptLTI3MS42IDBjMC05MC44IDEzNy4zLTkwLjggMTM3LjMgMC0uMSA4OS45LTEzNy4zIDkxLTEzNy4zIDB6Il0KICAgIH07CiAgICBmYUxpbmtlZGluSW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGlua2VkaW4taW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBlMSIsICJNMTAwLjMgNDQ4bC05Mi45IDAgMC0yOTkuMSA5Mi45IDAgMCAyOTkuMXpNNTMuOCAxMDguMUMyNC4xIDEwOC4xIDAgODMuNSAwIDUzLjggMCAzOS41IDUuNyAyNS45IDE1LjggMTUuOHMyMy44LTE1LjggMzgtMTUuOCAyNy45IDUuNyAzOCAxNS44IDE1LjggMjMuOCAxNS44IDM4YzAgMjkuNy0yNC4xIDU0LjMtNTMuOCA1NC4zek00NDcuOSA0NDhsLTkyLjcgMCAwLTE0NS42YzAtMzQuNy0uNy03OS4yLTQ4LjMtNzkuMi00OC4zIDAtNTUuNyAzNy43LTU1LjcgNzYuN2wwIDE0OC4xLTkyLjggMCAwLTI5OS4xIDg5LjEgMCAwIDQwLjggMS4zIDBjMTIuNC0yMy41IDQyLjctNDguMyA4Ny45LTQ4LjMgOTQgMCAxMTEuMyA2MS45IDExMS4zIDE0Mi4zbDAgMTY0LjMtLjEgMHoiXQogICAgfTsKICAgIGZhSHRtbDUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaHRtbDUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjEzYiIsICJNMCAzMkwzNC45IDQyNy44IDE5MS41IDQ4MCAzNDkuMSA0MjcuOCAzODQgMzIgMCAzMnpNMzA4LjIgMTU5LjlsLTE4My44IDAgNC4xIDQ5LjQgMTc1LjYgMC0xMy42IDE0OC40LTk3LjkgMjcgMCAuMy0xLjEgMC05OC43LTI3LjMtNi03NS44IDQ3LjcgMCAzLjUgMzguMSA1My41IDE0LjUgNTMuNy0xNC41IDYtNjIuMi0xNjYuOSAwLTEyLjgtMTQ1LjYgMjQxLjEgMC00LjQgNDcuN3oiXQogICAgfTsKICAgIGZhUnVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJydXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwN2EiLCAiTTUwOC41IDI0OS44bC0yMS44LTEzLjVjLS4yLTItLjMtMy45LS41LTUuOWwxOC43LTE3LjVjLjktLjkgMS42LTEuOSAyLTMuMXMuNS0yLjUgLjItMy43LS44LTIuNC0xLjYtMy4zLTEuOC0xLjctMy0yLjFsLTI0LTljLS41LTEuOS0xLjEtMy44LTEuNy01LjZsMTUtMjAuOGMuNy0xIDEuMi0yLjIgMS4zLTMuNHMwLTIuNS0uNS0zLjctMS4yLTIuMi0yLjItMi45LTIuMS0xLjMtMy40LTEuNWwtMjUuNC00LjJjLS45LTEuNy0xLjgtMy40LTIuNy01LjJsMTAuNy0yMy40Yy41LTEuMSAuNy0yLjQgLjYtMy42cy0uNS0yLjQtMS4yLTMuNS0xLjYtMS45LTIuOC0yLjUtMi40LS44LTMuNi0uOGwtMjUuOCAuOWMtMS4yLTEuNS0yLjQtMi45LTMuNi00LjRMNDM5IDgxLjhjLjMtMS4yIC4zLTIuNS0uMS0zLjdzLTEtMi4zLTEuOS0zLjItMi0xLjUtMy4yLTEuOS0yLjUtLjQtMy43LS4xTDQwNSA3OC45Yy0xLjQtMS4yLTIuOS0yLjQtNC40LTMuNmwuOS0yNS44Yy4xLTEuMy0uMi0yLjUtLjgtMy42cy0xLjQtMi4xLTIuNS0yLjgtMi4yLTEuMS0zLjUtMS4yLTIuNSAuMS0zLjcgLjZMMzY3LjcgNTMuMmMtMS43LS45LTMuNC0xLjgtNS4xLTIuN2wtNC4yLTI1LjRjLS4yLTEuMi0uNy0yLjQtMS41LTMuNHMtMS44LTEuNy0yLjktMi4yLTIuNC0uNy0zLjctLjUtMi40IC42LTMuNCAxLjNMMzI2IDM1LjNjLTEuOS0uNi0zLjgtMS4xLTUuNi0xLjdsLTktMjRjLS40LTEuMi0xLjItMi4yLTIuMS0zcy0yLjEtMS40LTMuMy0xLjYtMi41LS4yLTMuNyAuMi0yLjMgMS4xLTMuMSAyTDI4MS42IDI1LjljLTItLjItMy45LS40LTUuOS0uNUwyNjIuMyAzLjVjLS43LTEuMS0xLjYtMS45LTIuNy0yLjZzLTIuMy0uOS0zLjYtLjktMi41IC4zLTMuNiAuOS0yIDEuNS0yLjcgMi42TDIzNi4yIDI1LjNjLTIgLjItMy45IC4zLTUuOSAuNkwyMTIuOSA3LjFjLS45LS45LTEuOS0xLjYtMy4xLTJzLTIuNS0uNS0zLjctLjItMi40IC44LTMuMyAxLjYtMS43IDEuOC0yLjEgM2wtOSAyNGMtMS45IC42LTMuOCAxLjEtNS43IDEuN2wtMjAuOC0xNWMtMS0uNy0yLjItMS4yLTMuNC0xLjNzLTIuNSAwLTMuNyAuNS0yLjIgMS4yLTIuOSAyLjItMS4zIDIuMS0xLjUgMy40bC00LjIgMjUuNGMtMS43IC45LTMuNCAxLjgtNS4yIDIuN0wxMjAuOSA0Mi42Yy0xLjEtLjUtMi40LS43LTMuNy0uNnMtMi41IC41LTMuNSAxLjItMS45IDEuNy0yLjUgMi44LS44IDIuNC0uOCAzLjZsLjkgMjUuOGMtMS41IDEuMi0zIDIuNC00LjQgMy42TDgxLjggNzNjLTEuMi0uMy0yLjUtLjMtMy43IC4xcy0yLjMgMS0zLjIgMS45LTEuNSAyLTEuOSAzLjItLjQgMi41LS4xIDMuN0w3OC45IDEwN2MtMS4yIDEuNC0yLjQgMi45LTMuNiA0LjRsLTI1LjgtLjljLTEuMyAwLTIuNSAuMi0zLjYgLjhzLTIuMSAxLjQtMi44IDIuNC0xLjEgMi4yLTEuMiAzLjUgLjEgMi41IC42IDMuNmwxMC43IDIzLjRjLS45IDEuNy0xLjggMy40LTIuNyA1LjJsLTI1LjQgNC4xYy0xLjIgLjItMi40IC43LTMuNCAxLjVzLTEuNyAxLjgtMi4yIDIuOS0uNyAyLjQtLjUgMy43IC42IDIuNCAxLjMgMy40bDE1IDIwLjhjLS42IDEuOS0xLjEgMy44LTEuNyA1LjdsLTI0IDljLTEuMiAuNC0yLjIgMS4yLTMgMi4xcy0xLjQgMi4xLTEuNiAzLjMtLjIgMi41IC4yIDMuNyAxLjEgMi4zIDIgMy4xbDE4LjcgMTcuNWMtLjIgMi0uNCAzLjktLjYgNS45TDMuNSAyNDkuOGMtMS4xIC43LTEuOSAxLjYtMi42IDIuN3MtLjkgMi4zLS45IDMuNiAuMyAyLjUgLjkgMy42IDEuNSAyIDIuNiAyLjdsMjEuOCAxMy41Yy4yIDIgLjMgMy45IC42IDUuOUw3LjEgMjk5LjFjLS45IC45LTEuNiAxLjktMiAzLjFzLS41IDIuNS0uMiAzLjcgLjggMi40IDEuNiAzLjMgMS44IDEuNyAzIDIuMWwyNCA5Yy42IDEuOSAxLjEgMy44IDEuNyA1LjZsLTE1IDIwLjhjLS43IDEtMS4yIDIuMi0xLjMgMy40czAgMi41IC41IDMuNyAxLjIgMi4yIDIuMiAyLjkgMi4xIDEuMyAzLjQgMS41bDI1LjQgNC4yYy45IDEuNyAxLjggMy40IDIuNyA1LjFMNDIuNiAzOTEuMWMtLjUgMS4xLS43IDIuNC0uNiAzLjZzLjUgMi41IDEuMiAzLjVjLjcgMS4xIDEuNiAxLjkgMi43IDIuNXMyLjQgLjggMy42IC44bDI1LjgtLjljMS4yIDEuNSAyLjQgMi45IDMuNiA0LjRMNzMgNDMwLjJjLS4zIDEuMi0uMyAyLjUgLjEgMy43czEgMi4zIDEuOSAzLjIgMiAxLjUgMy4yIDEuOSAyLjUgLjQgMy43IC4xbDI1LjItNS45YzEuNSAxLjIgMi45IDIuNCA0LjQgMy42bC0uOSAyNS44YzAgMS4zIC4yIDIuNSAuOCAzLjZzMS40IDIuMSAyLjUgMi44IDIuMiAxLjEgMy41IDEuMiAyLjUtLjEgMy42LS42bDIzLjQtMTAuN2MxLjcgLjkgMy40IDEuOCA1LjEgMi43bDQuMiAyNS40Yy4yIDEuMiAuNyAyLjQgMS41IDMuNHMxLjggMS44IDIuOSAyLjIgMi40IC43IDMuNyAuNSAyLjQtLjYgMy40LTEuM2wyMC44LTE1YzEuOSAuNiAzLjggMS4xIDUuNiAxLjdsOSAyNGMuNCAxLjIgMS4yIDIuMiAyLjEgM3MyLjEgMS40IDMuMyAxLjYgMi41IC4yIDMuNy0uMiAyLjMtMS4xIDMuMS0ybDE3LjUtMTguN2MyIC4yIDMuOSAuNCA1LjkgLjZsMTMuNSAyMS44Yy43IDEuMSAxLjYgMS45IDIuNyAyLjZzMi4zIC45IDMuNiAuOSAyLjUtLjMgMy42LS45IDItMS41IDIuNy0yLjZsMTMuNS0yMS44YzItLjIgMy45LS4zIDUuOS0uNmwxNy41IDE4LjdjLjkgLjkgMS45IDEuNiAzLjEgMnMyLjUgLjUgMy43IC4yIDIuNC0uOCAzLjMtMS42IDEuNy0xLjggMi4xLTNsOS0yNGMxLjktLjYgMy44LTEuMSA1LjYtMS43bDIwLjggMTVjMSAuNyAyLjIgMS4yIDMuNCAxLjNzMi41IDAgMy43LS41IDIuMi0xLjIgMi45LTIuMiAxLjMtMi4xIDEuNS0zLjRsNC4yLTI1LjRjMS43LS45IDMuNC0xLjggNS4xLTIuN2wyMy40IDEwLjdjMS4xIC41IDIuNCAuNyAzLjYgLjZzMi40LS41IDMuNS0xLjIgMS45LTEuNiAyLjUtMi44IC44LTIuNCAuOC0zLjZsLS45LTI1LjhjMS41LTEuMiAyLjktMi40IDQuNC0zLjZsMjUuMiA1LjljMS4yIC4zIDIuNSAuMyAzLjctLjFzMi4zLTEgMy4yLTEuOSAxLjUtMiAxLjktMy4yIC40LTIuNSAuMS0zLjdMNDMzLjEgNDA1YzEuMi0xLjQgMi40LTIuOSAzLjYtNC40bDI1LjggLjljMS4zIC4xIDIuNS0uMiAzLjYtLjhzMi4xLTEuNCAyLjgtMi41Yy43LTEgMS4xLTIuMiAxLjItMy41cy0uMS0yLjUtLjYtMy42bC0xMC43LTIzLjRjLjktMS43IDEuOC0zLjQgMi43LTUuMWwyNS40LTQuMmMxLjItLjIgMi40LS43IDMuNC0xLjVzMS44LTEuOCAyLjItMi45IC43LTIuNCAuNS0zLjctLjYtMi40LTEuMy0zLjRsLTE1LTIwLjhjLjYtMS45IDEuMS0zLjggMS43LTUuNmwyNC05YzEuMi0uNCAyLjItMS4yIDMtMi4xczEuNC0yLjEgMS42LTMuMyAuMi0yLjUtLjItMy43LTEuMS0yLjMtMi0zLjFsLTE4LjctMTcuNWMuMi0xLjkgLjQtMy45IC42LTUuOWwyMS44LTEzLjVjMS4xLS43IDEuOS0xLjYgMi42LTIuN3MuOS0yLjMgLjktMy42LS4zLTIuNS0uOS0zLjYtMS41LTItMi42LTIuN2wwIDB6bS0xNTEgMTI5LjFjLTMuNi0uOC03LjQtLjEtMTAuNSAxLjlzLTUuMyA1LjItNiA4LjhsLTcuNiAzNS43Yy0yNC42IDExLjEtNTEuMyAxNi44LTc4LjMgMTYuN3MtNTMuNi02LjEtNzguMS0xNy40bC03LjYtMzUuN2MtLjQtMS44LTEuMS0zLjUtMi4xLTVzLTIuNC0yLjgtMy45LTMuOC0zLjItMS43LTUtMi0zLjYtLjMtNS40IC4xbC0zMS41IDYuOGMtNS44LTYtMTEuMy0xMi41LTE2LjMtMTkuMmwxNTMuMiAwYzEuNyAwIDIuOS0uMyAyLjktMS45bDAtNTQuMmMwLTEuNi0xLjItMS45LTIuOS0xLjlsLTQ0LjggMCAwLTM0LjQgNDguNSAwYzQuNCAwIDIzLjcgMS4zIDI5LjggMjUuOSAxLjkgNy41IDYuMiAzMi4xIDkuMSA0MCAyLjkgOC44IDE0LjYgMjYuNSAyNy4xIDI2LjVsNzkgMGMtNS4zIDcuMS0xMS4xIDEzLjgtMTcuMyAyMC4xbC0zMi4xLTYuOXptMjUuOCAzNC41YzAgMy0uOSA2LTIuNiA4LjVzLTQgNC41LTYuOCA1LjYtNS44IDEuNS04LjggLjktNS43LTItNy44LTQuMi0zLjYtNC44LTQuMi03LjgtLjMtNiAuOC04LjggMy4xLTUuMiA1LjYtNi45IDUuNC0yLjYgOC41LTIuNmwuNCAwYzQgLjEgNy43IDEuOCAxMC41IDQuNnM0LjMgNi43IDQuMyAxMC42bC4xIDB6bS0yMjUuNi0uN2MwIDMtLjkgNi0yLjYgOC41cy00LjEgNC41LTYuOCA1LjYtNS44IDEuNS04LjggLjktNS43LTItNy44LTQuMi0zLjYtNC44LTQuMi03LjgtLjMtNiAuOS04LjggMy4xLTUuMiA1LjYtNi44IDUuNC0yLjYgOC41LTIuNmwuNSAwYzQgLjEgNy43IDEuOCAxMC41IDQuNnM0LjMgNi43IDQuMyAxMC42bC4xIDB6TTY5LjYgMjM0LjJsMzIuOC0xNC42YzEuNy0uNyAzLjItMS44IDQuNC0zLjFzMi4yLTIuOSAyLjktNC42IDEtMy41IC45LTUuMy0uNS0zLjYtMS4yLTUuM2wtNi44LTE1LjIgMjYuNiAwIDAgMTE5LjctNTMuNiAwYy02LjYtMjMuMi04LjctNDcuNi02LjEtNzEuNnpNNTguMyAxOTguMWMwLTIgLjQtNCAxLjItNS44czEuOS0zLjUgMy4zLTQuOSAzLjEtMi41IDQuOS0zLjMgMy44LTEuMiA1LjgtMS4ybC41IDBjMyAuMSA1LjkgMSA4LjMgMi44czQuMyA0LjEgNS40IDYuOSAxLjMgNS44IC43IDguOC0yLjEgNS42LTQuMyA3LjctNC45IDMuNS03LjggNC4xLTYgLjItOC43LS45LTUuMS0zLjEtNi44LTUuNi0yLjUtNS40LTIuNS04LjRsMCAwem0xNTUuMiAyNC41bDAtMzUuMyA2My4zIDBjMy4zIDAgMjMuMSAzLjggMjMuMSAxOC42IDAgMTIuMy0xNS4yIDE2LjctMjcuNyAxNi43bC01OC43IDB6TTM5OSAzMDYuN2MtOS44IDEuMS0yMC42LTQuMS0yMi0xMC4xLTUuOC0zMi41LTE1LjQtMzkuNC0zMC42LTUxLjQgMTguOS0xMiAzOC41LTI5LjYgMzguNS01My4zIDAtMjUuNS0xNy41LTQxLjYtMjkuNC00OS41LTE2LjgtMTEtMzUuMy0xMy4yLTQwLjMtMTMuMmwtMTk4LjkgMGMyNy41LTMwLjcgNjQuNC01MS41IDEwNC45LTU5LjJsMjMuNSAyNC42YzEuMyAxLjMgMi44IDIuNCA0LjQgMy4xczMuNSAxLjEgNS4zIDEuMiAzLjYtLjMgNS4zLS45IDMuMi0xLjcgNC42LTIuOWwyNi4zLTI1YzI2LjggNSA1Mi4xIDE1LjggNzQuMyAzMS42czQwLjYgMzYuMiA1NC4xIDU5LjlsLTE4IDQwLjZjLTEuNSAzLjQtMS41IDcuMi0uMiAxMC42czMuOSA2LjIgNy4zIDcuN2wzNC42IDE1LjNjMS4xIDEwLjggMS4yIDIxLjcgLjQgMzIuNWwtMTkuMyAwYy0xLjkgMC0yLjcgMS4zLTIuNyAzLjFsMCA4LjhjMCAyMC44LTExLjcgMjUuMy0yMiAyNi41ek0yNDAgNjAuMmMwLTQgMS42LTcuOSA0LjUtMTAuN3M2LjctNC41IDEwLjctNC41bC40IDBjMyAuMSA1LjkgMSA4LjQgMi44czQuMyA0LjEgNS40IDYuOSAxLjMgNS44IC43IDguOC0yLjEgNS42LTQuMyA3LjctNC45IDMuNS03LjggNC02IC4yLTguNy0uOS01LjEtMy4xLTYuOC01LjYtMi41LTUuNC0yLjUtOC40ek00MzYuOCAyMTRjLTIgMC00LS40LTUuOC0xLjJzLTMuNS0xLjktNC45LTMuMy0yLjUtMy4xLTMuMy00LjktMS4yLTMuOC0xLjItNS44IC40LTQgMS4yLTUuOCAxLjktMy41IDMuMy00LjkgMy4xLTIuNSA0LjktMy4zIDMuOC0xLjIgNS44LTEuMmwuNCAwYzQgLjEgNy45IDEuNyAxMC43IDQuNnM0LjQgNi44IDQuMyAxMC44LTEuNyA3LjktNC42IDEwLjctNi44IDQuNC0xMC44IDQuM3oiXQogICAgfTsKICAgIGZhSG9ybmJpbGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaG9ybmJpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU5MiIsICJNNzYuOCAzNzAuM2MxIDcuOC0uNCAxNS44LTQuMSAyMi44cy05LjYgMTIuNi0xNi43IDE2LjEtMTUuMSA0LjctMjIuOSAzLjMtMTUtNS4xLTIwLjYtMTAuNy05LjItMTIuOS0xMC41LTIwLjcgMC0xNS44IDMuNi0yMi45IDkuMy0xMi44IDE2LjMtMTYuNSAxNS01IDIyLjktMy45Yy03OC4zLTExMS4zIDUyLTE5MC41IDUyLTE5MC41LTUuOSA0My04LjIgOTEuMi04LjIgOTEuMi02Ny4zIDQxLjUgLjkgNjQuMSAzOS44IDcyLjkgOS45IDI3IDI3LjggNTAuMiA1MS40IDY2LjdzNTEuNiAyNS4zIDgwLjMgMjUuM2MxLjkgMCAzLjgtLjIgNS43LS4zbC4xIDE4LjljLTk5LjIgMS40LTE1OC43LTI5LjEtMTg4LjktNTEuNnptMTA4LTMyNy43Yy45LTcuMi0uMi0xNC42LTMuNC0yMS4yLTMtNi4yLTcuNi0xMS41LTEzLjQtMTUuM3MtMTIuNS01LjktMTkuNC02LjItMTMuOCAxLjQtMTkuOCA0LjctMTEuMSA4LjMtMTQuNSAxNC4zLTUuMiAxMi44LTUgMTkuNyAyLjIgMTMuNyA1LjkgMTkuNSA4LjkgMTAuNiAxNS4xIDEzLjYgMTMuMSA0LjQgMjAgMy45Yy0yMi42IDI5LjktNTMuOCA4OS42LTUyLjQgMTkwbDIxLjgtLjJjMC0uOS0uMS0xLjgtLjEtMi43IDAtMjggOC40LTU1LjMgMjQuMS03OC41czM3LjktNDEuMiA2My44LTUxLjZjOC0zNy43IDMwLjctMTE0LjMgNzMuOC00NC4zIDAgMCA0OC4xIDIuNCA5MS4yIDguMiAwIDAtNzcuOC0xMjgtMTg3LjYtNTQuMWwwIDB6TTQ4OSAxNzYuOGM2LjMtMyAxMS43LTcuNyAxNS41LTEzLjZzNS45LTEyLjcgNi4xLTE5LjgtMS42LTE0LTUuMi0yMC04LjctMTEtMTQuOS0xNC4zLTEzLjItNC44LTIwLjItNC40LTEzLjggMi44LTE5LjUgNi45LTEwLjIgOS42LTEzIDE2LjEtMy43IDEzLjYtMi43IDIwLjVjLTMxLjctMjEuOS04OS44LTQ5LjEtMTgzLjQtNDcuN2wuMSAyMi41YzIuNy0uMiA1LjQtLjQgOC4xLS40IDI4LjEgMCA1NS42IDguNSA3OC45IDI0LjNzNDEuMiAzOC4zIDUxLjYgNjQuNWMzOS4xIDkgMTA1LjEgMzEuNiAzOC41IDcyLjUgMCAwLTIuMyA0OC4xLTguMiA5MS4yIDAgMCAxMzMuNC04MS4yIDQ5LTE5NC42IDYuNiAuNiAxMy4zLS42IDE5LjMtMy41bDAgMHpNMzc0LjQgNDM2LjJjMjEuNC0zMi41IDQ2LjQtODkuNyA0NS4xLTE3OS43bC0xOS41IC4xYy4xIDIuMSAuMyA0LjEgLjMgNi4yIDAgMjguNi04LjggNTYuNS0yNS4xIDgwcy0zOS41IDQxLjQtNjYuMyA1MS40Yy04LjkgMzktMzEuNCAxMDYuNy03Mi44IDM5LjUgMCAwLTQ4LjEtMi4zLTkxLjItOC4yIDAgMCA3OS45IDEzMS4zIDE5MS45IDUxIC4zIDQuOSAxLjUgOS42IDMuNiAxNCAyLjkgNi4xIDcuNSAxMS40IDEzLjEgMTUuMXMxMi4yIDYgMTkgNi40IDEzLjYtMS4xIDE5LjYtNC4yIDExLjEtNy44IDE0LjctMTMuNiA1LjYtMTIuNCA1LjctMTkuMi0xLjUtMTMuNS00LjgtMTkuNC04LjItMTAuOS0xNC4xLTE0LjMtMTIuNi01LjItMTkuNC01LjFsMC0uMXoiXQogICAgfTsKICAgIGZhUGhwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBocCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDU3IiwgIk0zMjAgMTA0LjVjMTcxLjQgMCAzMDMuMiA3Mi4yIDMwMy4yIDE1MS41UzQ5MS4zIDQwNy41IDMyMCA0MDcuNUMxNDguNiA0MDcuNSAxNi44IDMzNS4zIDE2LjggMjU2UzE0OC43IDEwNC41IDMyMCAxMDQuNXptMC0xNi44QzE0My4zIDg3LjcgMCAxNjMgMCAyNTZTMTQzLjMgNDI0LjMgMzIwIDQyNC4zIDY0MCAzNDkgNjQwIDI1NiA0OTYuNyA4Ny43IDMyMCA4Ny43ek0yMTguMiAyNDIuNWMtNy45IDQwLjUtMzUuOCAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzggMCA2My44LTQuMSA1Ni40IDM0LjN6TTk3LjQgMzUwLjNsMzYuNyAwIDguNy00NC44YzQxLjEgMCA2Ni42IDMgOTAuMi0xOS4xIDI2LjEtMjQgMzIuOS02Ni43IDE0LjMtODguMS05LjctMTEuMi0yNS4zLTE2LjctNDYuNS0xNi43bC03MC43IDAtMzIuNyAxNjguN3pNMjgzLjEgMTM2LjdsMzYuNSAwLTguNyA0NC44YzMxLjUgMCA2MC43LTIuMyA3NC44IDEwLjcgMTQuOCAxMy42IDcuNyAzMS04LjMgMTEzLjFsLTM3IDBjMTUuNC03OS40IDE4LjMtODYgMTIuNy05Mi01LjQtNS44LTE3LjctNC42LTQ3LjQtNC42bC0xOC44IDk2LjYtMzYuNSAwIDMyLjctMTY4LjZ6TTUwNSAyNDIuNWMtOCA0MS4xLTM2LjcgMzYuMy03MC4xIDM2LjNsMTMuNy03MC42YzM4LjIgMCA2My44LTQuMSA1Ni40IDM0LjN6TTM4NC4yIDM1MC4zbDM2LjggMCA4LjctNDQuOGM0My4yIDAgNjcuMSAyLjUgOTAuMi0xOS4xIDI2LjEtMjQgMzIuOS02Ni43IDE0LjMtODguMS05LjctMTEuMi0yNS4zLTE2LjctNDYuNS0xNi43bC03MC43IDAtMzIuOCAxNjguN3oiXQogICAgfTsKICAgIGZhRGlzcXVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpc3F1cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlN2Q1IiwgIk0yOTAuMiA1MTJjLTYyLjYgMC0xMTkuOS0yMi45LTE2NC4yLTYwLjhMMTcgNDY2LjEgNTkuMSAzNjIuMmMtMTQuNy0zMi40LTIyLjktNjguMy0yMi45LTEwNi4yIDAtMTQxLjQgMTEzLjctMjU2IDI1NC0yNTYgMTQwLjMgMCAyNTQgMTE0LjYgMjU0IDI1NiAwIDE0MS40LTExMy43IDI1Ni0yNTQgMjU2ek00MjguOSAyNTUuM2wwLS43QzQyOC45IDE4MC43IDM3Ni44IDEyOCAyODcgMTI4bC05NyAwIDAgMjU2IDk1LjYgMGM5MC41IDAgMTQzLjQtNTQuOSAxNDMuNC0xMjguN3pNMjg4IDMyMS4xbC0yOC40IDAgMC0xMzAuMiAyOC40IDBjNDEuNyAwIDY5LjMgMjMuOCA2OS4zIDY0LjdsMCAuN2MwIDQxLjMtMjcuNyA2NC43LTY5LjMgNjQuN3oiXQogICAgfTsKICAgIGZhNTAwcHggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiNTAwcHgiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI2ZSIsICJNNzEuOCAzNDQuM2MtNi41LTE0LjItNi45LTE4LjMgNy40LTIzLjEgMjUuNi04IDggOS4yIDQzLjIgNDkuMmwuMyAwIDAtOTMuOWMxLjItNTAuMiA0NC05Mi4yIDk3LjctOTIuMiA1My45IDAgOTcuNyA0My41IDk3LjcgOTYuOCAwIDYzLjQtNjAuOCAxMTMuMi0xMjguNSA5My4zLTEwLjUtNC4yLTIuMS0zMS43IDguNS0yOC42IDUzIDAgODkuNC0xMC4xIDg5LjQtNjQuNCAwLTYxLTc3LjEtODkuNi0xMTYuOS00NC42LTIzLjUgMjYuNC0xNy42IDQyLjEtMTcuNiAxNTcuNiA1MC43IDMxIDExOC4zIDIyIDE2MC40LTIwLjEgMjQuOC0yNC44IDM4LjUtNTggMzguNS05MyAwLTM1LjItMTMuOC02OC4yLTM4LjgtOTMuMy0yNC44LTI0LjgtNTcuOC0zOC41LTkzLjMtMzguNVMxNTEgMTYzLjMgMTI2LjMgMTg4Yy0uMyAuMy0xNiAxNi41LTIxLjIgMjMuOWwtLjUgLjZjLTMuMyA0LjctNi4zIDkuMS0yMC4xIDYuMS02LjktMS43LTE0LjMtNS44LTE0LjMtMTEuOEw3MC4yIDIwYzAtNSAzLjktMTAuNSAxMC41LTEwLjVMMzIyIDkuNWM4LjMgMCA4LjMgMTEuNiA4LjMgMTUuMSAwIDMuOSAwIDE1LjEtOC4zIDE1LjFsLTIyMy4yIDAgMCAxMzIuOSAuMyAwYzEwNC4yLTEwOS44IDI4Mi44LTM2IDI4Mi44IDEwOC45IDAgMTc4LjEtMjQ0LjggMjIwLjMtMzEwLjEgNjIuOHpNMTM1LjEgODMuNWMtLjUgNC4yIDQuNiAyNC41IDE0LjYgMjAuNiAxMjQuOC00Ny41IDIwMi44IDQwLjQgMjA5LjQgNDAuNCA0LjggMCAyMi44LTE1LjMgMTQuMy0yMi44LTkzLjItODktMjM0LjUtNTctMjM4LjMtMzguMnpNMzYxLjUgNDE0LjdjLTExMCAxMDkuOS0yOTkgNjAuOC0zMzItMTA0LjIgMC0xMi4yLTMwLjQtNy40LTI4LjkgMy4zIDI0IDE3My40IDI0NiAyNTYuOSAzODEuNiAxMjEuMyA2LjktNy44LTEyLjYtMjguNC0yMC43LTIwLjR6TTE4Mi4xIDMwNi42YzAgNCA0LjMgNy4zIDUuNSA4LjUgMyAzIDYuMSA0LjQgOC41IDQuNCAzLjggMCAyLjYgLjIgMjIuMy0xOS41IDE5LjYgMTkuMyAxOS4xIDE5LjUgMjIuMyAxOS41IDUuNCAwIDE4LjUtMTAuNCAxMC43LTE4LjJsLTE3LjMtMTcuMyAxOC4yLTE4LjJjNi4zLTYuOC0xMC4xLTIxLjgtMTYuMi0xNS43TDIxOC4yIDI2OGMtMTguNi0xOC44LTE4LjQtMTkuNS0yMS41LTE5LjUtNSAwLTE4IDExLjctMTIuNCAxNy4zTDIwMi41IDI4NGMtMTguMSAxNy45LTIwLjQgMTkuMi0yMC40IDIyLjZ6Il0KICAgIH07CiAgICBmYUFmZmlsaWF0ZXRoZW1lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFmZmlsaWF0ZXRoZW1lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmIiLCAiTTE1OS43IDIzNy40QzEwOC40IDMwOC4zIDQzLjEgMzQ4LjIgMTQgMzI2LjYtMTUuMiAzMDQuOSAyLjggMjMwIDU0LjIgMTU5LjEgMTA1LjUgODguMiAxNzAuOCA0OC4zIDE5OS45IDY5LjlzMTEuMSA5Ni42LTQwLjIgMTY3LjV6bTM1MS4yLTU3LjNjLTczLjggMTIzLjQtMTkxLjkgMTg3LjctMjY0LjUgMTQzLjYtMjUtMTUuMi00MS4zLTQxLjItNDktNzMuOC0zMy42IDY0LjgtOTIuOCAxMTMuOC0xNjQuMSAxMzMuMiA0OS44IDU5LjMgMTI0LjEgOTYuOSAyMDcgOTYuOSAxNTAgMCAyNzEuNi0xMjMuMSAyNzEuNi0yNzQuOSAuMS04LjUtLjMtMTYuOC0xLTI1eiJdCiAgICB9OwogICAgZmFSZWRSaXZlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWQtcml2ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMyIsICJNMzUzLjIgMzJMOTQuOCAzMkM0Mi40IDMyIDAgNzQuNCAwIDEyNi44TDAgMzg1LjJDMCA0MzcuNiA0Mi40IDQ4MCA5NC44IDQ4MGwyNTguNCAwYzUyLjQgMCA5NC44LTQyLjQgOTQuOC05NC44bDAtMjU4LjRDNDQ4IDc0LjQgNDA1LjYgMzIgMzUzLjIgMzJ6TTE0NC45IDIwMC45bDAgNTYuM2MwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsMC0xNTQuMmMwLTEzLjIgMTAuNy0yMy45IDIzLjktMjMuOWwxNTQuMiAwYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwtNTYuMyAwYy0xMi4zLS42LTI0LjYgMTEuNi0yNCAyNHptMTc2LjMgNzJsLTU2LjMgMGMtMTIuMy0uNi0yNC42IDExLjYtMjQgMjRsMCA1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwwLTE1NC4yYzAtMTMuMiAxMC43LTIzLjkgMjMuOS0yMy45bDE1NC4yIDBjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45eiJdCiAgICB9OwogICAgZmFUd2l0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInR3aXR0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjA5OSIsICJNNDU5LjQgMTUxLjdjLjMgNC41IC4zIDkuMSAuMyAxMy42IDAgMTM4LjctMTA1LjYgMjk4LjYtMjk4LjYgMjk4LjYtNTkuNSAwLTExNC43LTE3LjItMTYxLjEtNDcuMSA4LjQgMSAxNi42IDEuMyAyNS4zIDEuMyA0OS4xIDAgOTQuMi0xNi42IDEzMC4zLTQ0LjgtNDYuMS0xLTg0LjgtMzEuMi05OC4xLTcyLjggNi41IDEgMTMgMS42IDE5LjggMS42IDkuNCAwIDE4LjgtMS4zIDI3LjYtMy42LTQ4LjEtOS43LTg0LjEtNTItODQuMS0xMDNsMC0xLjNjMTQgNy44IDMwLjIgMTIuNyA0Ny40IDEzLjMtMjguMy0xOC44LTQ2LjgtNTEtNDYuOC04Ny40IDAtMTkuNSA1LjItMzcuNCAxNC4zLTUzIDUxLjcgNjMuNyAxMjkuMyAxMDUuMyAyMTYuNCAxMDkuOC0xLjYtNy44LTIuNi0xNS45LTIuNi0yNCAwLTU3LjggNDYuOC0xMDQuOSAxMDQuOS0xMDQuOSAzMC4yIDAgNTcuNSAxMi43IDc2LjcgMzMuMSAyMy43LTQuNSA0Ni41LTEzLjMgNjYuNi0yNS4zLTcuOCAyNC40LTI0LjQgNDQuOC00Ni4xIDU3LjggMjEuMS0yLjMgNDEuNi04LjEgNjAuNC0xNi4yLTE0LjMgMjAuOC0zMi4yIDM5LjMtNTIuNiA1NC4zeiJdCiAgICB9OwogICAgZmFGb3J0QXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb3J0LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4NiIsICJNNDg5LjUgMjg3LjlsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjYgMCAwLTE3OC4zYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjYgMCAwLTMyYzAtNi04LTQuNi0xMS43LTQuNmwwLTM4YzguMy0yIDE3LjEtMy40IDI1LjctMy40IDEwLjkgMCAyMC45IDQuMyAzMS40IDQuMyA0LjYgMCAyNy43LTEuMSAyNy43LThsMC02MGMwLTIuNi0yLTQuNi00LjYtNC42LTUuMSAwLTE1LjEgNC4zLTI0IDQuMy05LjcgMC0yMC45LTQuMy0zMi42LTQuMy04IDAtMTYgMS4xLTIzLjcgMi45bDAtNC45YzUuNC0yLjYgOS4xLTguMyA5LjEtMTQuMyAwLTIwLjctMzEuNC0yMC44LTMxLjQgMCAwIDYgMy43IDExLjcgOS4xIDE0LjNsMCAxMTEuN2MtMy43IDAtMTEuNy0xLjQtMTEuNyA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi4zIDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAxNzguMy0zNi42IDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAyMTkuNSAxODIuOSAwIDAtOTZjMC03Mi42IDEwOS43LTcyLjYgMTA5LjcgMGwwIDk2IDE4Mi45IDAgMC0yMTkuNWMuMS0yLjYtMS45LTQuNi00LjUtNC42em0tMjg4LjEtNC41YzAgMi42LTIgNC42LTQuNiA0LjZsLTI3LjQgMGMtMi42IDAtNC42LTItNC42LTQuNmwwLTY0YzAtMi42IDItNC42IDQuNi00LjZsMjcuNCAwYzIuNiAwIDQuNiAyIDQuNiA0LjZsMCA2NHptMTQ2LjQgMGMwIDIuNi0yIDQuNi00LjYgNC42bC0yNy40IDBjLTIuNiAwLTQuNi0yLTQuNi00LjZsMC02NGMwLTIuNiAyLTQuNiA0LjYtNC42bDI3LjQgMGMyLjYgMCA0LjYgMiA0LjYgNC42bDAgNjR6Il0KICAgIH07CiAgICBmYU1peGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1peGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNTYiLCAiTTgyLjYgNzYuMWMtMy44LTUuMS04LjctOS40LTE0LjItMTIuNXMtMTEuNy01LjEtMTguMS01LjctMTIuOCAuMS0xOC44IDIuMi0xMS42IDUuMy0xNi4zIDkuNmMtMTcuNiAxNi4yLTE5IDQzLjUtNC44IDYyLjhsOTEuOCAxMjMtOTIuMyAxMjQuMWMtMTQuMiAxOS4zLTEzLjEgNDYuNiA0LjcgNjIuOCA0LjcgNC4zIDEwLjMgNy42IDE2LjMgOS42czEyLjUgMi44IDE4LjggMi4yIDEyLjUtMi41IDE4LjEtNS43IDEwLjQtNy40IDE0LjItMTIuNUwyMTAuOSAyNjIuN2MxLjUtMi4xIDIuMy00LjYgMi4zLTcuMXMtLjgtNS0yLjMtNy4xTDgyLjYgNzYuMXpNNDM4LjIgMzc5LjZsLTkyLjMtMTI0LjEgOTEuOC0xMjNjMTQuMi0xOS4yIDEyLjgtNDYuNi00LjctNjIuOC00LjctNC4zLTEwLjMtNy42LTE2LjMtOS42cy0xMi41LTIuOC0xOC44LTIuMi0xMi41IDIuNS0xOC4xIDUuNy0xMC40IDcuNC0xNC4yIDEyLjVsLTEyOCAxNzIuMWMtMS41IDIuMS0yLjMgNC42LTIuMyA3LjFzLjggNSAyLjMgNy4xTDM2NiA0MzUuOWMzLjggNS4xIDguNyA5LjQgMTQuMiAxMi41czExLjcgNS4xIDE4LjEgNS43IDEyLjgtLjEgMTguOC0yLjIgMTEuNi01LjMgMTYuMy05LjZjMTcuOC0xNi4yIDE5LTQzLjUgNC43LTYyLjh6Il0KICAgIH07CiAgICBmYUx5ZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHlmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2MzIiwgIk0wIDgxLjFsNzcuOCAwIDAgMjA4LjdjMCAzMy4xIDE1IDUyLjggMjcuMiA2MS0xMi43IDExLjEtNTEuMiAyMC45LTgwLjItMi44LTE3LTE0LTI0LjgtMzcuMy0yNC44LTU5TDAgODEuMXpNNDg1LjkgMjU0LjZsMC0yMiAyMy44IDAgMC03Ni44LTI2LjEgMGMtMTAuMS00Ni4zLTUxLjItODAuNy0xMDAuMy04MC43LTU2LjYgMC0xMDIuNyA0Ni0xMDIuNyAxMDIuN2wwIDE3OS4yYzE2IDIuMyAzNS40LS4zIDUxLjctMTQgMTcuMS0xNCAyNC44LTM3LjIgMjQuOC01OWwwLTYuNyAzOC44IDAgMC03Ni44LTM4LjggMCAwLTIzLjNjMC0zNC42IDUyLjItMzQuNiA1Mi4yIDBsMCA3Ny4xYzAgNTYuNiA0NiAxMDIuNyAxMDIuNyAxMDIuN2wwLTc2LjVjLTE0LjUgMC0yNi4xLTExLjctMjYuMS0yNS45em0tMjk0LjMtOTlsMCAxMTNjMCAxNS40LTIzLjggMTUuNC0yMy44IDBsMC0xMTMtNzYuOCAwIDAgMTMyLjdjMCAyMy44IDggNTQgNDUgNjMuOSAzNyA5LjggNTguMi0xMC42IDU4LjItMTAuNi0yLjEgMTMuNC0xNC41IDIzLjMtMzQuOSAyNS4zLTE1LjUgMS42LTM1LjItMy42LTQ1LTcuOGwwIDcwLjNjMjUuMSA3LjUgNTEuNSA5LjggNzcuNiA0LjcgNDcuMS05LjEgNzYuOC00OC40IDc2LjgtMTAwLjhsMC0xNzguMi03Ny4xIDAgMCAuNXoiXQogICAgfTsKICAgIGZhQXBwbGVQYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUtcGF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MTUiLCAiTTExNi45IDE1OC41Yy03LjUgOC45LTE5LjUgMTUuOS0zMS41IDE0LjktMS41LTEyIDQuNC0yNC44IDExLjMtMzIuNiA3LjUtOS4xIDIwLjYtMTUuNiAzMS4zLTE2LjEgMS4yIDEyLjQtMy43IDI0LjctMTEuMSAzMy44em0xMC45IDE3LjJjLTE3LjQtMS0zMi4zIDkuOS00MC41IDkuOS04LjQgMC0yMS05LjQtMzQuOC05LjEtMTcuOSAuMy0zNC41IDEwLjQtNDMuNiAyNi41LTE4LjggMzIuMy00LjkgODAgMTMuMyAxMDYuMyA4LjkgMTMgMTkuNSAyNy4zIDMzLjUgMjYuOCAxMy4zLS41IDE4LjUtOC42IDM0LjUtOC42IDE2LjEgMCAyMC44IDguNiAzNC44IDguNCAxNC41LS4zIDIzLjYtMTMgMzIuNS0yNiAxMC4xLTE0LjggMTQuMy0yOS4xIDE0LjUtMjkuOS0uMy0uMy0yOC0xMC45LTI4LjMtNDIuOS0uMy0yNi44IDIxLjktMzkuNSAyMi45LTQwLjMtMTIuNS0xOC42LTMyLTIwLjYtMzguOC0yMS4xem0xMDAuNC0zNi4ybDAgMTk0LjkgMzAuMyAwIDAtNjYuNiA0MS45IDBjMzguMyAwIDY1LjEtMjYuMyA2NS4xLTY0LjNzLTI2LjQtNjQtNjQuMS02NGwtNzMuMiAwek0yNTguNSAxNjVsMzQuOSAwYzI2LjMgMCA0MS4zIDE0IDQxLjMgMzguNnMtMTUgMzguOC00MS40IDM4LjhsLTM0LjggMCAwLTc3LjR6TTQyMC43IDMzNS45YzE5IDAgMzYuNi05LjYgNDQuNi0yNC45bC42IDAgMCAyMy40IDI4IDAgMC05N2MwLTI4LjEtMjIuNS00Ni4zLTU3LjEtNDYuMy0zMi4xIDAtNTUuOSAxOC40LTU2LjggNDMuNmwyNy4zIDBjMi4zLTEyIDEzLjQtMTkuOSAyOC42LTE5LjkgMTguNSAwIDI4LjkgOC42IDI4LjkgMjQuNWwwIDEwLjgtMzcuOCAyLjNjLTM1LjEgMi4xLTU0LjEgMTYuNS01NC4xIDQxLjUgLjEgMjUuMiAxOS43IDQyIDQ3LjggNDJ6bTguMi0yMy4xYy0xNi4xIDAtMjYuNC03LjgtMjYuNC0xOS42IDAtMTIuMyA5LjktMTkuNCAyOC44LTIwLjVsMzMuNi0yLjEgMCAxMWMwIDE4LjItMTUuNSAzMS4yLTM2IDMxLjJ6bTEwMi41IDc0LjZjMjkuNSAwIDQzLjQtMTEuMyA1NS41LTQ1LjRsNTMuMS0xNDktMzAuOCAwLTM1LjYgMTE1LjEtLjYgMC0zNS42LTExNS4xLTMxLjYgMCA1MS4yIDE0MS45LTIuOCA4LjZjLTQuNiAxNC42LTEyLjEgMjAuMy0yNS41IDIwLjMtMi40IDAtNy0uMy04LjktLjVsMCAyMy40YzEuOCAuNCA5LjMgLjcgMTEuNiAuN3oiXQogICAgfTsKICAgIGZhQXJ0c3RhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcnRzdGF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3N2EiLCAiTTIuMSAzNzcuNGw0MyA3NC4zYzQuMyA4LjUgMTAuOCAxNS43IDE4LjkgMjAuN3MxNy40IDcuNiAyNyA3LjZsMjg1LjQgMC01OS4yLTEwMi42LTMxNS4xIDB6TTUwMS45IDM1MEwzMzUuNyA1OS4zYy00LjQtOC4yLTEwLjktMTUuMS0xOC45LTIwUzI5OS43IDMyIDI5MC40IDMybC04OC40IDAgMjU3LjMgNDQ3LjYgNDAuNy03MC41YzEuOS0zLjIgMjEtMjkuNyAyLTU5LjF6TTI3NS4yIDMwNC41bC0xMTUuNS0yMDAtMTE1LjUgMjAwIDIzMSAweiJdCiAgICB9OwogICAgZmFOb2RlSnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm9kZS1qcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2QzIiwgIk0yMjQuNSA1MDhjLTYuNyAwLTEzLjUtMS44LTE5LjQtNS4ybC02MS43LTM2LjVjLTkuMi01LjItNC43LTctMS43LTggMTIuMy00LjMgMTQuOC01LjIgMjcuOS0xMi43IDEuNC0uOCAzLjItLjUgNC42IC40bDQ3LjQgMjguMWMxLjcgMSA0LjEgMSA1LjcgMEw0MTIgMzY3LjVjMS43LTEgMi44LTMgMi44LTVsMC0yMTMuMmMwLTIuMS0xLjEtNC0yLjktNS4xTDIyNy4zIDM3LjdjLTEuNy0xLTQtMS01LjcgMEwzNy4xIDE0NC4zYy0xLjggMS0yLjkgMy0yLjkgNS4xbDAgMjEzLjFjMCAyIDEuMSA0IDIuOSA0LjlsNTAuNiAyOS4yYzI3LjUgMTMuNyA0NC4zLTIuNCA0NC4zLTE4LjdsMC0yMTAuNGMwLTMgMi40LTUuMyA1LjQtNS4zbDIzLjQgMGMyLjkgMCA1LjQgMi4zIDUuNCA1LjNsMCAyMTAuNWMwIDM2LjYtMjAgNTcuNi01NC43IDU3LjYtMTAuNyAwLTE5LjEgMC00Mi41LTExLjZMMjAuNiAzOTYuMWMtMTItNi45LTE5LjQtMTkuOC0xOS40LTMzLjdsMC0yMTMuMWMwLTEzLjggNy40LTI2LjggMTkuNC0zMy43TDIwNS4xIDljMTEuNy02LjYgMjcuMi02LjYgMzguOCAwTDQyOC42IDExNS43YzEyIDYuOSAxOS40IDE5LjggMTkuNCAzMy43bDAgMjEzLjFjMCAxMy44LTcuNCAyNi43LTE5LjQgMzMuN0wyNDMuOSA1MDIuOGMtNS45IDMuNC0xMi42IDUuMi0xOS40IDUuMnpNMzczLjYgMjk3LjljMC0zOS45LTI3LTUwLjUtODMuNy01OC01Ny40LTcuNi02My4yLTExLjUtNjMuMi0yNC45IDAtMTEuMSA0LjktMjUuOSA0Ny40LTI1LjkgMzcuOSAwIDUxLjkgOC4yIDU3LjcgMzMuOCAuNSAyLjQgMi43IDQuMiA1LjIgNC4ybDI0IDBjMS41IDAgMi45LS42IDMuOS0xLjdzMS41LTIuNiAxLjQtNC4xYy0zLjctNDQuMS0zMy02NC42LTkyLjItNjQuNi01Mi43IDAtODQuMSAyMi4yLTg0LjEgNTkuNSAwIDQwLjQgMzEuMyA1MS42IDgxLjggNTYuNiA2MC41IDUuOSA2NS4yIDE0LjggNjUuMiAyNi43IDAgMjAuNi0xNi42IDI5LjQtNTUuNSAyOS40LTQ4LjkgMC01OS42LTEyLjMtNjMuMi0zNi42LS40LTIuNi0yLjYtNC41LTUuMy00LjVsLTIzLjkgMGMtMyAwLTUuMyAyLjQtNS4zIDUuMyAwIDMxLjEgMTYuOSA2OC4yIDk3LjggNjguMiA1OC40LS4xIDkyLTIzLjIgOTItNjMuNHoiXQogICAgfTsKICAgIGZhVW5jaGFydGVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuY2hhcnRlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDg0IiwgIk0xNzEuOCAyMzIuOGMxLjEgMCAyLjEtLjMgMy0uOXMxLjYtMS40IDItMi40YzIuMi05LjggNy40LTE4LjYgMTQuOS0yNS4zIDEuMi0uOCAxLjctMi41IDEuNy00LjEtLjEtLjctLjMtMS4zLS42LTEuOXMtLjktMS4xLTEuNC0xLjRMNzQuNSAxMjguNSAxNDkuMSA4NWMxLjUtLjggMi43LTIgMy42LTMuNXMxLjQtMy4xIDEuNC00LjhjMC0xLjctLjQtMy40LTEuMy00LjlzLTIuMi0yLjctMy43LTMuNEwxMjYuNyA1NS42Yy0xLjUtLjgtMy4xLTEuMi00LjgtMS4ycy0zLjMgLjQtNC44IDEuMkwxNyAxMTMuNmMtMS41IC44LTIuNyAyLTMuNiAzLjVzLTEuNCAzLjEtMS40IDQuOEwxMiAyMzdjMCAxLjcgLjQgMy40IDEuMyA0LjlzMi4yIDIuNyAzLjcgMy40bDIyLjQgMTIuOGMxLjUgLjkgMy4yIDEuMyA1IDEuMiAyLjQgLjEgNC44LS44IDYuNi0yLjUgMS44LTEuOSAyLjgtNC40IDIuOS03bDAtODUuMyAxMTUuOSA2Ny45Yy42IC4zIDEuNCAuNCAyLjEgLjR6TTMyMy40IDM3Ny43Yy0xLjcgLjEtMy40IC41LTUgMS4ybC03NC41IDQzLjEgMC0xMzQuMmMwLTIuOS0yLjktNS44LTYuMi00LjYtOS40IDIuOC0xOS41IDMtMjkgLjQtLjctLjItMS41LS4yLTIuMi0uMXMtMS40IC40LTIgLjktMS4xIDEtMS40IDEuNy0uNSAxLjQtLjUgMi4xbDAgMTMzLjMtNzQuNS00My4xYy0xLjUtLjktMy4yLTEuMy01LTEuMi0yLjUgMC00LjkgMS02LjcgMi44cy0yLjggNC4yLTIuOCA2LjdsMCAyNi4xYzAgMS43IC40IDMuNCAxLjMgNC45czIuMiAyLjcgMy43IDMuNGwxMDAuMiA1Ny42YzEuNSAuOSAzLjIgMS4zIDUgMS4yIDEuNyAwIDMuNC0uNCA1LTEuMmwxMDAuMi01Ny42YzEuNS0uOCAyLjctMiAzLjYtMy41czEuNC0zLjEgMS40LTQuOGwwLTI2LjFjLS44LTQuNi01LjQtOS4xLTEwLjQtOS4xek0yODYuMSA3OGEyMyAyMyAwIDEgMCAwLTQ2IDIzIDIzIDAgMSAwIDAgNDZ6bTYzLjYtMTAuMWEyMyAyMyAwIDEgMCAwIDQ2IDIzIDIzIDAgMSAwIDAtNDZ6bTYzLjIgODMuN2EyMyAyMyAwIDEgMCAwLTQ2IDIzIDIzIDAgMSAwIDAgNDZ6bS02My4yLTkuMmEyMyAyMyAwIDEgMCAwIDQ2IDIzIDIzIDAgMSAwIDAtNDZ6bS02My42IDgzLjJjNC41IDAgOS0xLjMgMTIuOC0zLjlzNi43LTYuMSA4LjUtMTAuMyAyLjItOC44IDEuMy0xMy4zLTMuMS04LjYtNi4zLTExLjgtNy4zLTUuNC0xMS44LTYuMy05LjEtLjQtMTMuMyAxLjMtNy44IDQuNy0xMC4zIDguNS0zLjkgOC4yLTMuOSAxMi44YzAgMyAuNiA2IDEuOCA4LjhzMi45IDUuMyA1IDcuNSA0LjcgMy44IDcuNSA1IDUuOCAxLjggOC44IDEuOGwwIDB6TTIyNCAyNjJjNC41IDAgOS0xLjQgMTIuOC0zLjlzNi43LTYuMSA4LjUtMTAuMyAyLjItOC44IDEuMy0xMy4zLTMuMS04LjYtNi4zLTExLjgtNy4zLTUuNC0xMS44LTYuMy05LjEtLjQtMTMuMyAxLjMtNy44IDQuNy0xMC4zIDguNS0zLjkgOC4yLTMuOSAxMi44YzAgMyAuNiA2IDEuNyA4LjhzMi44IDUuMyA1IDcuNSA0LjcgMy44IDcuNSA1IDUuOCAxLjggOC44IDEuOGwwIDB6bTE4OC45LTgyLjRjLTQuNiAwLTkgMS4zLTEyLjggMy45cy02LjcgNi4xLTguNSAxMC4zLTIuMiA4LjgtMS4zIDEzLjMgMy4xIDguNiA2LjMgMTEuOCA3LjMgNS40IDExLjggNi4zIDkuMSAuNCAxMy4zLTEuMyA3LjgtNC43IDEwLjMtOC41IDMuOS04LjIgMy45LTEyLjhjMC02LjEtMi40LTExLjktNi43LTE2LjNzLTEwLjItNi43LTE2LjMtNi43bDAgMHptMCA3Mi4zYy00LjYgMC05IDEuMy0xMi44IDMuOXMtNi43IDYuMS04LjUgMTAuMy0yLjIgOC44LTEuMyAxMy4zIDMuMSA4LjYgNi4zIDExLjggNy4zIDUuNCAxMS44IDYuMyA5LjEgLjQgMTMuMy0xLjMgNy44LTQuNyAxMC4zLTguNSAzLjktOC4yIDMuOS0xMi44YzAtNi4xLTIuNC0xMS45LTYuNy0xNi4zcy0xMC4yLTYuNy0xNi4zLTYuN2wwIDB6Il0KICAgIH07CiAgICBmYVBsYXlzdGF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBsYXlzdGF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZGYiLCAiTTU3MSAzNzIuM2MtMTEuMyAxNC4yLTM4LjggMjQuMy0zOC44IDI0LjNsLTIwNS4xIDczLjYgMC01NC4zIDE1MC45LTUzLjhjMTcuMS02LjEgMTkuOC0xNC44IDUuOC0xOS40LTEzLjktNC42LTM5LjEtMy4zLTU2LjIgMi45bC0xMDAuNSAzNS41IDAtNTYuNGMyMy4yLTcuOCA0Ny4xLTEzLjYgNzUuNy0xNi44IDQwLjktNC41IDkwLjkgLjYgMTMwLjIgMTUuNSA0NC4yIDE0IDQ5LjIgMzQuNyAzOCA0OC45ek0zNDYuNiAyNzkuOGwwLTEzOWMwLTE2LjMtMy0zMS4zLTE4LjMtMzUuNi0xMS43LTMuOC0xOSA3LjEtMTkgMjMuNGwwIDM0Ny45LTkzLjgtMjkuOCAwLTQxNC43YzM5LjkgNy40IDk4IDI0LjkgMTI5LjIgMzUuNCA3OS41IDI3LjMgMTA2LjQgNjEuMyAxMDYuNCAxMzcuOCAwIDc0LjUtNDYgMTAyLjgtMTA0LjUgNzQuNnpNNDMuMyA0MTAuMmMtNDUuNC0xMi44LTUzLTM5LjUtMzIuMy01NC44IDE5LjEtMTQuMiA1MS43LTI0LjkgNTEuNy0yNC45bDEzNC41LTQ3LjggMCA1NC41LTk2LjggMzQuNmMtMTcuMSA2LjEtMTkuNyAxNC44LTUuOCAxOS40czM5LjEgMy4zIDU2LjItMi45bDQ2LjQtMTYuOSAwIDQ4LjhjLTUxLjYgOS4zLTEwMS40IDcuMy0xNTMuOS0xMHoiXQogICAgfTsKICAgIGZhTWljcm9ibG9nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1pY3JvYmxvZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDFhIiwgIk0zOTkuOCAzNjIuMmMyOS41LTM0LjcgNDcuMS03OC4zIDQ3LjEtMTI1LjggMC0xMTMtOTkuNi0yMDQuNC0yMjIuNS0yMDQuNFMyIDEyMy41IDIgMjM2LjQgMTAxLjYgNDQwLjkgMjI0LjUgNDQwLjljMjcgMCA1My45LTQuNSA3OS40LTEzLjQgMS40LS41IDMtLjUgNC41LS4xczIuNyAxLjQgMy42IDIuNmMxOC42IDI1LjEgNDcuNiA0Mi43IDc5LjkgNDkuOSAxLjEgLjIgMi4zIDAgMy4zLS42czEuNy0xLjYgMS45LTIuOGMuMS0uNiAuMS0xLjMgMC0xLjlzLS40LTEuMi0uOC0xLjdjLTEyLjMtMTYtMTguNy0zNS44LTE4LTU2czguNC0zOS41IDIxLjctNTQuN2wtLjIgLjF6TTMzMCAyMTIuNGwtNTcuMyA0My41IDIwLjggNjguOWMuNCAxLjMgLjQgMi43LS4xIDRzLTEuMiAyLjQtMi4zIDMuMi0yLjQgMS4yLTMuOCAxLjItMi43LS40LTMuOC0xLjJsLTU5LjEtNDEtNTkuMSA0MS4xYy0xLjEgLjgtMi40IDEuMi0zLjggMS4ycy0yLjctLjQtMy44LTEuMi0xLjktMS45LTIuMy0zLjItLjUtMi43LS4xLTRsMjAuOC02OC45LTU3LjMtNDMuNWMtMS4xLS44LTEuOS0xLjktMi4zLTMuMnMtLjQtMi43IDAtNCAxLjItMi40IDIuMy0zLjIgMi40LTEuMyAzLjctMS4zbDcxLjktMS41IDIzLjctNjcuOWMuNC0xLjMgMS4zLTIuNCAyLjQtMy4yczIuNC0xLjIgMy44LTEuMiAyLjcgLjQgMy44IDEuMiAxLjkgMS45IDIuNCAzLjJsMjMuNyA2Ny45IDcxLjkgMS41YzEuNCAwIDIuNyAuNCAzLjggMS4yczEuOSAxLjkgMi4zIDMuMiAuNCAyLjcgMCA0LTEuMiAyLjQtMi4zIDMuM2wwIDB6Il0KICAgIH07CiAgICBmYUdpdGtyYWtlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRrcmFrZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNhNiIsICJNNTU3LjcgMTE4LjFjLTIuMy02LjEtOS4zLTkuMi0xNS4zLTYuNi01LjcgMi40LTguNSA4LjktNi4zIDE0LjYgMTAuOSAyOSAxNi45IDYwLjUgMTYuOSA5My4zIDAgMTM0LjYtMTAwLjMgMjQ1LjctMjMwLjIgMjYyLjdsMC0xMjMuN2M3LjktMS41IDE1LjUtMy42IDIzLTYuMmwwIDEwNGMxMDYuNy0yNS45IDE4NS45LTEyMi4xIDE4NS45LTIzNi44IDAtOTEuOC01MC44LTE3MS44LTEyNS44LTIxMy4zLTUuNy0zLjItMTMtLjktMTUuOSA1LTIuNyA1LjUtLjYgMTIuMiA0LjcgMTUuMSA2Ny45IDM3LjYgMTEzLjkgMTEwIDExMy45IDE5My4yIDAgOTMuMy01Ny45IDE3My4xLTEzOS44IDIwNS40bDAtOTIuMmMxNC4yLTQuNSAyNC45LTE3LjcgMjQuOS0zMy41IDAtMTMuMS02LjgtMjQuNC0xNy4zLTMwLjUgOC4zLTc5LjUgNDQuNS01OC42IDQ0LjUtODMuOWwwLTE0LjdjMC0zOC04Ny45LTE2MS44LTEyOS0xNjQuNy0yLjUtLjItNS0uMi03LjYgMC00MS4yIDMtMTI5LjEgMTI2LjctMTI5LjEgMTY0LjdsMCAxNC44YzAgMjUuMyAzNi4zIDQuMyA0NC41IDgzLjktMTAuNiA2LjEtMTcuMyAxNy40LTE3LjMgMzAuNSAwIDE1LjggMTAuNiAyOSAyNC44IDMzLjVsMCA5Mi4yYy04MS45LTMyLjItMTM5LjgtMTEyLTEzOS44LTIwNS40IDAtODMuMSA0Ni0xNTUuNSAxMTMuOS0xOTMuMiA1LjQtMyA3LjQtOS42IDQuNy0xNS4xLTIuOS01LjktMTAuMS04LjItMTUuOS01LTc1IDQxLjUtMTI1LjggMTIxLjUtMTI1LjggMjEzLjMgMCAxMTQuNyA3OS4yIDIxMC44IDE4NS45IDIzNi44bDAtMTA0YzcuNiAyLjUgMTUuMSA0LjYgMjMgNi4ybDAgMTIzLjdjLTEyOS44LTE3LTIzMC4yLTEyOC4xLTIzMC4yLTI2Mi43IDAtMzIuOCA2LTY0LjMgMTYuOS05My4zIDIuMi01LjgtLjYtMTIuMi02LjMtMTQuNi02LTIuNi0xMyAuNC0xNS4zIDYuNi0xMS44IDMxLjUtMTguMyA2NS42LTE4LjMgMTAxLjMgMCAxNTUuMSAxMjIuNiAyODEuNiAyNzYuMyAyODcuOGwwLTE0NS45YzYuOCAuNCAxNSAuNSAyMy40IDBsMCAxNDUuOGMxNTMuNy02LjEgMjc2LjMtMTMyLjYgMjc2LjMtMjg3LjcgMC0zNS43LTYuNS02OS44LTE4LjMtMTAxLjR6TTM1Ny45IDMyMi45YTIzLjcgMjMuNyAwIDEgMSAwLTQ3LjQgMjMuNyAyMy43IDAgMSAxIDAgNDcuNHpNMjE4LjEgMjc1LjRhMjMuNyAyMy43IDAgMSAxIDAgNDcuNCAyMy43IDIzLjcgMCAxIDEgMC00Ny40eiJdCiAgICB9OwogICAgZmFUZWxlZ3JhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWxlZ3JhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNDYyLCAidGVsZWdyYW0tcGxhbmUiXSwgImYyYzYiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzcxIDE3Ni43Yy0zLjcgMzkuMi0xOS45IDEzNC40LTI4LjEgMTc4LjMtMy41IDE4LjYtMTAuMyAyNC44LTE2LjkgMjUuNC0xNC40IDEuMy0yNS4zLTkuNS0zOS4zLTE4LjctMjEuOC0xNC4zLTM0LjItMjMuMi01NS4zLTM3LjItMjQuNS0xNi4xLTguNi0yNSA1LjMtMzkuNSAzLjctMy44IDY3LjEtNjEuNSA2OC4zLTY2LjcgLjItLjcgLjMtMy4xLTEuMi00LjRzLTMuNi0uOC01LjEtLjVjLTIuMiAuNS0zNy4xIDIzLjUtMTA0LjYgNjkuMS05LjkgNi44LTE4LjkgMTAuMS0yNi45IDkuOS04LjktLjItMjUuOS01LTM4LjYtOS4xLTE1LjUtNS0yNy45LTcuNy0yNi44LTE2LjMgLjYtNC41IDYuNy05IDE4LjQtMTMuNyA3Mi4zLTMxLjUgMTIwLjUtNTIuMyAxNDQuNi02Mi4zIDY4LjktMjguNiA4My4yLTMzLjYgOTIuNS0zMy44IDIuMSAwIDYuNiAuNSA5LjYgMi45IDIgMS43IDMuMiA0LjEgMy41IDYuNyAuNSAzLjIgLjYgNi41IC40IDkuOHoiXQogICAgfTsKICAgIGZhVGVsZWdyYW1QbGFuZSA9IGZhVGVsZWdyYW07CiAgICBmYVVsdHJhbHl0aWNzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVsdHJhbHl0aWNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NmQiLCAiTTM5MS40IDM5LjdjNjUuOC0uMiAxMTguNiA1MS44IDEyMC40IDExNi42IC43IDI2LjQtMS41IDU0LjEtMy44IDc0LjEtMTcuMiAxNDguNi0xMjIuNCAyNDItMjUyLjQgMjQyLTk1LjQtLjEtMTc5LjQtNTIuNy0yMjMuMi0xMzAuNiAyNC40IDE3LjQgNTQuNSAyNy40IDg3LjYgMjcuNCA4My4yIC4xIDE1MS40LTY3LjQgMTUxLjItMTUwbC4xLTYwLjZjLS4yLTY1LjcgNTMuOS0xMTkgMTIwLjEtMTE4Ljl6TTExOS45IDEwMC4yYzY2LjIgMCAxMTkuOSA1My4zIDExOS45IDExOVMxODYuMSAzMzguMyAxMTkuOSAzMzguMyAwIDI4NSAwIDIxOS4zYzAtNjUuNyA1My43LTExOSAxMTkuOS0xMTl6Il0KICAgIH07CiAgICBmYUl0dW5lc05vdGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaXR1bmVzLW5vdGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjNiNSIsICJNMzgxLjkgMzg4LjJjLTYuNCAyNy40LTI3LjIgNDIuOC01NS4xIDQ4LTI0LjUgNC41LTQ0LjkgNS42LTY0LjUtMTAuMi0yMy45LTIwLjEtMjQuMi01My40LTIuNy03NC40IDE3LTE2LjIgNDAuOS0xOS41IDc2LjgtMjUuOCA2LTEuMSAxMS4yLTIuNSAxNS42LTcuNCA2LjQtNy4yIDQuNC00LjEgNC40LTE2My4yIDAtMTEuMi01LjUtMTQuMy0xNy0xMi4zLTguMiAxLjQtMTg1LjcgMzQuNi0xODUuNyAzNC42LTEwLjIgMi4yLTEzLjQgNS4yLTEzLjQgMTYuNyAwIDIzNC43IDEuMSAyMjMuOS0yLjUgMjM5LjUtNC4yIDE4LjItMTUuNCAzMS45LTMwLjIgMzkuNS0xNi44IDkuMy00Ny4yIDEzLjQtNjMuNCAxMC40LTQzLjItOC4xLTU4LjQtNTgtMjkuMS04Ni42IDE3LTE2LjIgNDAuOS0xOS41IDc2LjgtMjUuOCA2LTEuMSAxMS4yLTIuNSAxNS42LTcuNCAxMC4xLTExLjUgMS44LTI1Ni42IDUuMi0yNzAuMiAuOC01LjIgMy05LjYgNy4xLTEyLjkgNC4yLTMuNSAxMS44LTUuNSAxMy40LTUuNSAyMDQtMzguMiAyMjguOS00My4xIDIzMi40LTQzLjEgMTEuNS0uOCAxOC4xIDYgMTguMSAxNy42IC4yIDM0NC41IDEuMSAzMjYtMS44IDMzOC41eiJdCiAgICB9OwogICAgZmFMZXNzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxlc3MiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxZCIsICJNNjEzLjIgMjE5YzAtMjAuNSAzLjItMzIuNiAzLjItNTQuNiAwLTM0LjItMTIuNi00NS4yLTQwLjUtNDUuMmwtMjAuNSAwIDAgMjQuMiA2LjMgMGMxNC4yIDAgMTcuMyA0LjcgMTcuMyAyMi4xIDAgMTYuMy0xLjYgMzIuNi0xLjYgNTEuNSAwIDI0LjIgNy45IDMzLjYgMjMuNiAzNy4zbDAgMS42Yy0xNS44IDMuNy0yMy42IDEzLjEtMjMuNiAzNy4zIDAgMTguOSAxLjYgMzQuMiAxLjYgNTEuNSAwIDE3LjktMy43IDIyLjYtMTcuMyAyMi42bDAgLjUtNi4zIDAgMCAyNS4yIDIwLjUgMGMyNy44IDAgNDAuNS0xMSA0MC41LTQ1LjIgMC0yMi42LTMuMi0zNC4yLTMuMi01NC42IDAtMTEgNi44LTIyLjYgMjcuMy0yMy42bDAtMjcuM2MtMjAuNS0uNy0yNy4zLTEyLjMtMjcuMy0yMy4zek01MDcuNiAyNTFjLTE1LjgtNi4zLTMwLjUtMTAtMzAuNS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNnMyMi4xIDQuNyAzMy42IDEzLjFsMjEtMjcuOGMtMTMuMS0xMC0zMS0yMC41LTU1LjItMjAuNS0zNS43IDAtNTkuOSAyMC41LTU5LjkgNDkuNCAwIDI1LjcgMjIuNiAzOC45IDQxLjUgNDYuMiAxNi4zIDYuMyAzMi4xIDExLjYgMzIuMSAyMi4xIDAgNy45LTYuMyAxMy4xLTIwLjUgMTMuMS0xMy4xIDAtMjYuMy01LjMtNDAuNS0xNi4zbC0yMSAzMC41YzE1LjggMTMuMSAzOS45IDIyLjEgNTkuOSAyMi4xIDQyIDAgNjQuNi0yMi4xIDY0LjYtNTFzLTIyLjUtNDEtNDMtNDcuOHpNMTQ4LjcgMzEwLjRjLTMuNyAwLTguNC0zLjItOC40LTEzLjFsMC0xNzguMi03NC42IDBjLTI4LjQgMC00MSAxMS00MSA0NS4yIDAgMjIuNiAzLjIgMzUuMiAzLjIgNTQuNiAwIDExLTYuOCAyMi42LTI3LjMgMjMuNmwwIDI3LjNjMjAuNSAuNSAyNy4zIDEyLjEgMjcuMyAyMy4xIDAgMTkuNC0zLjIgMzEtMy4yIDUzLjYgMCAzNC4yIDEyLjYgNDUuMiA0MC41IDQ1LjJsMjAuNSAwIDAtMjQuMi02LjMgMGMtMTMuMSAwLTE3LjMtNS4zLTE3LjMtMjIuNnMxLjYtMzIuMSAxLjYtNTEuNWMwLTI0LjItNy45LTMzLjYtMjMuNi0zNy4zbDAtMS42YzE1LjgtMy43IDIzLjYtMTMuMSAyMy42LTM3LjMgMC0xOC45LTEuNi0zNC4yLTEuNi01MS41czMuNy0yMi4xIDE3LjMtMjIuMWwxNC4xIDAgMCAxNTAuOGMwIDMyLjEgMTEgNTMuMSA0My4xIDUzLjEgMTAgMCAxNy45LTEuNiAyMy42LTMuN2wtNS4zLTM0LjJjLTMuMSAuOC00LjYgLjgtNi4yIC44ek0zODAuNCAyNTFjLTE2LjMtNi4zLTMxLTEwLTMxLTIwLjUgMC03LjkgNi4zLTEyLjYgMTcuOS0xMi42czIyLjEgNC43IDMzLjYgMTMuMWwyMS0yNy44Yy0xMy4xLTEwLTMxLTIwLjUtNTUuMi0yMC41LTM1LjcgMC01OS45IDIwLjUtNTkuOSA0OS40IDAgMjUuNyAyMi42IDM4LjkgNDEuNSA0Ni4yIDE2LjMgNi4zIDMyLjEgMTEuNiAzMi4xIDIyLjEgMCA3LjktNi4zIDEzLjEtMjAuNSAxMy4xLTEzLjEgMC0yNi4zLTUuMy00MC41LTE2LjNsLTIwLjUgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxIC4xLTI4LjktMjIuNS00MS00My00Ny44em0tMTU1LTY4LjhjLTM4LjQgMC03NS4xIDMyLjEtNzQuMSA4Mi41IDAgNTIgMzQuMiA4Mi41IDc5LjMgODIuNSAxOC45IDAgMzkuOS02LjggNTYuMi0xNy45TDI3MSAzMDEuNWMtMTEuNiA2LjgtMjIuNiAxMC0zNC4yIDEwLTIxIDAtMzcuMy0xMC00MS41LTM0LjJsOTUuMiAwYy41LTMuNyAxLjYtMTEgMS42LTE5LjQgLjYtNDIuNi0yMi42LTc1LjctNjYuNy03NS43em0tMzAgNjYuMmMzLjItMjEgMTUuOC0zMSAzMC41LTMxIDE4LjkgMCAyNi4zIDEzLjEgMjYuMyAzMWwtNTYuOCAweiJdCiAgICB9OwogICAgZmFGaXJlZm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcmVmb3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2OSIsICJNNTAzLjUgMjQxLjVjLS4xLTEuNi0uMi0zLjEtLjItNC43bDAtLjEtLjQtNC43IDAtLjFjLTEuMy0xMy45LTMuNy0yNy43LTcuMy00MS4yIDAtLjEgMC0uMS0uMS0uMmwtMS4xLTRjLS4xLS4yLS4xLS41LS4yLS42LS40LTEuMi0uNy0yLjUtMS4xLTMuNy0uMS0uMi0uMS0uNi0uMi0uOC0uNC0xLjItLjctMi40LTEuMS0zLjUtLjEtLjQtLjItLjYtLjQtMS0uNC0xLjItLjctMi4zLTEuMi0zLjVsLS40LTEuMWMtLjQtMS4xLS44LTIuMy0xLjItMy40LS4xLS4zLS4yLS43LS40LTEtLjUtMS4xLS44LTIuMy0xLjMtMy40LS4xLS4yLS4yLS42LS40LS44LS41LTEuMi0xLTIuMy0xLjQtMy41IDAtLjEtLjEtLjItLjEtLjQtMS42LTMuOC0zLjItNy43LTUtMTEuNGwtLjQtLjdjLS41LTEtLjgtMS44LTEuMy0yLjYtLjItLjUtLjUtMS4xLS43LTEuNi0uNC0uOC0uOC0xLjYtMS4yLTIuNC0uNC0uNi0uNi0xLjItMS0xLjhzLS44LTEuNC0xLjItMi4zYy0uNC0uNi0uNy0xLjMtMS4xLTEuOXMtLjgtMS40LTEuMi0yLjJjLS40LS43LS44LTEuNC0xLjItMi0uNC0uNy0uOC0xLjMtMS4yLTJzLS44LTEuMy0xLjItMi0uOC0xLjMtMS4yLTEuOS0uOC0xLjQtMS4zLTIuMmMtLjQtLjYtLjgtMS4yLTEuMi0xLjhsLTEuNC0yLjFjLS40LS42LS44LTEuMi0xLjItMS44LS41LS43LTEuMS0xLjYtMS42LTIuMy0uNC0uNS0uNy0xLjEtMS4xLTEuNmwtMS44LTIuNWMtLjQtLjUtLjYtLjgtMS0xLjMtMS0xLjMtMS44LTIuNS0yLjgtMy43LTcuMi05LjQtMTUtMTguMy0yMy41LTI2LjYtNS43LTYtMTEuOC0xMS41LTE4LjMtMTYuNy00LTMuNS04LjItNi43LTEyLjUtOS44LTcuNy01LjgtMTYtMTAuOC0yNC42LTE1LjEtMi40LTEuMy00LjgtMi41LTcuMi0zLjctMTcuNy04LjYtMzYuMy0xNS4yLTU1LjQtMTkuNi0xLjktLjQtMy44LS44LTUuNi0xLjJsLS4xIDBjLTEtLjEtMS44LS40LTIuOC0uNS0xMi41LTIuNC0yNS4yLTMuNy0zOC00bC0xMC42IDBjLTE1LjMgLjItMzAuNSAxLjktNDUuNSA1LTMzLjYgNy4xLTYzLjIgMjEuMi04Mi45IDM5LTEuMSAxLTEuOSAxLjctMi40IDIuMmwtLjUgLjUgLjEgMGMwIDAgLjEgMCAuMSAwczAtLjEgMC0uMWwtLjEgLjFjLjEtLjEgLjEtLjEgLjItLjEgMTQuNi04LjggMzQuOS0xNiA0OS40LTE5LjZsNS45LTEuNGMuNC0uMSAuOC0uMSAxLjItLjIgMS43LS40IDMuNC0uNyA1LjItMS4xIC4yIDAgLjYtLjEgLjgtLjEgNjQuMi0xMS43IDEzMi42IDcuNSAxODAuMiA1MyAxMC4zIDkuOCAxOS4zIDIwLjggMjYuOSAzMi44IDMwLjQgNDkuMiAyNy41IDExMS4xIDMuOCAxNDcuNi0zNC40IDUzLTExMS40IDcxLjMtMTU5IDI0LjgtMTYtMTUuNS0yNS4yLTM2LjctMjUuNi01OS0uMi0xMC43IDItMjEuMiA2LjItMzEgMS43LTMuOCAxMy4xLTI1LjcgMTguMi0yNC42LTEzLjEtMi44LTM3LjUgMi42LTU0LjcgMjguMi0xNS40IDIyLjktMTQuNSA1OC4yLTUgODMuMy02LTEyLjQtMTAuMS0yNS42LTEyLjEtMzkuMi0xMi4yLTgyLjYgNDMuMy0xNTMgOTQuMy0xNzAuNS0yNy41LTI0LTk2LjUtMjIuMy0xNDcuNyAxNS40LTI5LjkgMjItNTEuMiA1My4yLTYyLjUgOTAuNCAxLjctMjAuOSA5LjYtNTIuMSAyNS44LTgzLjktMTcuMiA4LjktMzkgMzctNDkuOCA2Mi45LTE1LjYgMzcuNC0yMSA4Mi4yLTE2LjEgMTI0LjggLjQgMy4yIC43IDYuNCAxLjEgOS42IDE5LjkgMTE3LjEgMTIyIDIwNi40IDI0NC44IDIwNi40IDEzNy4xIDAgMjQ4LjMtMTExLjIgMjQ4LjMtMjQ4LjQtLjEtNC41LS4yLTkuMS0uNS0xMy41eiJdCiAgICB9OwogICAgZmFLYWdnbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2FnZ2xlIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY1ZmEiLCAiTTMwNC4yIDUwMS41TDE1OC40IDMyMC4zIDI5OC4yIDE4NWMyLjYtMi43IDEuNy0xMC41LTUuMy0xMC41bC02OS4yIDBjLTMuNSAwLTcgMS44LTEwLjUgNS4zbC0xMzIuMyAxMzMuNyAwLTMwNmMwLTUtMi41LTcuNS03LjUtNy41TDIxLjUgMEMxNi41IDAgMTQgMi41IDE0IDcuNWwwIDQ5N2MwIDUgMi41IDcuNSA3LjUgNy41bDUxLjkgMGM1IDAgNy41LTIuNSA3LjUtNy41bDAtMTA5IDMwLjgtMjkuMyAxMTAuNSAxNDAuNmMzIDMuNSA2LjUgNS4zIDEwLjUgNS4zbDY2LjkgMGMzLjUgMCA1LjUtMSA2LTNsLTEuNC03LjZ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rTWVzc2VuZ2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhY2Vib29rLW1lc3NlbmdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzlmIiwgIk0yNTYuNiA4Yy0xNDAgMC0yNDguNiAxMDIuMy0yNDguNiAyNDAuNiAwIDcyLjMgMjkuNyAxMzQuOCA3OC4xIDE3Ny45IDguMyA3LjUgNi42IDExLjkgOCA1OC4yIC4xIDMuMiAxIDYuNCAyLjYgOS4yczMuOSA1LjIgNi43IDYuOSA1LjkgMi44IDkuMSAzIDYuNS0uMyA5LjUtMS42QzE3NC45IDQ3OSAxNzUuNiA0NzcuMiAxODQuNiA0NzkuNiAzMzcuOCA1MjEuOCA1MDQgNDIzLjcgNTA0IDI0OC42IDUwNCAxMTAuMyAzOTYuNiA4IDI1Ni42IDh6TTQwNS44IDE5My4xbC03MyAxMTUuNmMtMi44IDQuMy02LjQgOC4xLTEwLjYgMTFzLTkuMSA0LjgtMTQuMSA1LjgtMTAuMyAuOC0xNS4zLS40LTkuNy0zLjQtMTMuOC02LjRsLTU4LjEtNDMuNWMtMi42LTEuOS01LjgtMy05LTNzLTYuNCAxLjEtOSAzbC03OC40IDU5LjRjLTEwLjUgNy45LTI0LjItNC42LTE3LjEtMTUuN2w3My0xMTUuNmMyLjgtNC4zIDYuNC04LjEgMTAuNi0xMXM5LjEtNC44IDE0LjEtNS44IDEwLjMtLjggMTUuMyAuNCA5LjcgMy40IDEzLjkgNi40bDU4LjEgNDMuNWMyLjYgMS45IDUuOCAzIDkgM3M2LjQtMS4xIDktM2w3OC40LTU5LjRjMTAuNC04IDI0LjEgNC41IDE3LjEgMTUuNnoiXQogICAgfTsKICAgIGZhQXVkaWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdWRpYmxlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzMiLCAiTTY0MCAxOTkuOWwwIDU0LTMyMCAyMDAtMzIwLTE5OS45IDAtNTQgMzIwIDIwMCAzMjAtMjAwLjF6bS0xOTQuNSA3Mmw0Ny4xLTI5LjRjLTM3LjItNTUuOC0xMDAuNy05Mi42LTE3Mi43LTkyLjZzLTEzNS41IDM2LjctMTcyLjYgOTIuNGwuMyAwYzIuNS0yLjMgNS4xLTQuNSA3LjctNi43IDg5LjctNzQuNCAyMTkuNC01OC4xIDI5MC4yIDM2LjN6TTIyNS40IDI5MC43YzE2LjktMTEuOSAzNi41LTE4LjcgNTcuNC0xOC43IDM0LjQgMCA2NS4yIDE4LjQgODYuNCA0Ny42bDQ1LjQtMjguNGMtMjAuOS0yOS45LTU1LjYtNDkuNS05NC44LTQ5LjUtMzguOSAwLTczLjQgMTkuNC05NC40IDQ5ek0xMDMuNiAxNjEuMUMyMzUuNCA1Ni44IDQyMS44IDg0LjcgNTIxLjEgMjIzLjJsLjcgMSA0OC44LTMwLjRjLTUzLjUtODEuNy0xNDUuOC0xMzUuNy0yNTAuNy0xMzUuNy0xMDMuNSAwLTE5Ni42IDUzLjUtMjUwLjUgMTM1LjYgOS45LTEwLjUgMjIuNy0yMy41IDM0LjItMzIuNnoiXQogICAgfTsKICAgIGZhUGF0cmVvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYXRyZW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDkiLCAiTTQ5MCAxNTMuOGMtLjEtNjUuNC01MS0xMTktMTEwLjctMTM4LjMtNzQuMi0yNC0xNzItMjAuNS0yNDIuOSAxMi45LTg1LjggNDAuNS0xMTIuOCAxMjkuMy0xMTMuOCAyMTcuOC0uOCA3Mi44IDYuNCAyNjQuNCAxMTQuNiAyNjUuOCA4MC4zIDEgOTIuMy0xMDIuNSAxMjkuNS0xNTIuMyAyNi40LTM1LjUgNjAuNS00NS41IDEwMi40LTU1LjkgNzItMTcuOCAxMjEuMS03NC43IDEyMS0xNTBsLS4xIDB6Il0KICAgIH07CiAgICBmYVZudiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2bnYiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQwYiIsICJNMTA0LjkgMzUyYy0zNC4xIDAtNDYuNC0zMC40LTQ2LjQtMzAuNEwyLjYgMjEwLjFTLTcuOCAxOTIgMTMgMTkybDMyLjggMGMxMC40IDAgMTMuMiA4LjcgMTguOCAxOC4xbDM2LjcgNzQuNXM1LjIgMTMuMSAyMS4xIDEzLjEgMjEuMS0xMy4xIDIxLjEtMTMuMWwzNi43LTc0LjVjNS42LTkuNSA4LjQtMTguMSAxOC44LTE4LjFsMzIuOCAwYzIwLjggMCAxMC40IDE4LjEgMTAuNCAxOC4xTDE4Ni40IDMyMS42UzE3NC4yIDM1MiAxNDAgMzUybC0zNS4xIDB6bTM5NSAwYy0zNC4xIDAtNDYuNC0zMC40LTQ2LjQtMzAuNEwzOTcuNiAyMTAuMVMzODcuMiAxOTIgNDA4IDE5MmwzMi44IDBjMTAuNCAwIDEzLjIgOC43IDE4LjggMTguMWwzNi43IDc0LjVzNS4yIDEzLjEgMjEuMSAxMy4xIDIxLjEtMTMuMSAyMS4xLTEzLjFsMzYuOC03NC41YzUuNi05LjUgOC40LTE4LjEgMTguOC0xOC4xbDMyLjkgMGMyMC44IDAgMTAuNCAxOC4xIDEwLjQgMTguMUw1ODEuNSAzMjEuNlM1NjkuMyAzNTIgNTM1LjEgMzUybC0zNS4yIDB6TTMzNy42IDE5MmMzNC4xIDAgNDYuNCAzMC40IDQ2LjQgMzAuNGw1NS45IDExMS41UzQ1MC4zIDM1MiA0MjkuNSAzNTJsLTMyLjggMGMtMTAuNCAwLTEzLjItOC43LTE4LjgtMTguMWwtMzYuNy03NC41cy01LjItMTMuMS0yMS4xLTEzLjEtMjEuMSAxMy4xLTIxLjEgMTMuMWwtMzYuNyA3NC41Yy01LjYgOS40LTguNCAxOC4xLTE4LjggMTguMWwtMzIuOSAwYy0yMC44IDAtMTAuNC0xOC4xLTEwLjQtMTguMWw1NS45LTExMS41UzI2OC4zIDE5MiAzMDIuNSAxOTJsMzUuMSAweiJdCiAgICB9OwogICAgZmFQYWdlbGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFnZWxpbmVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxOGMiLCAiTTM4NC4xIDMxMi43Yy01NS4xIDEzNi43LTE4Ny4xIDU0LTE4Ny4xIDU0LTQwLjUgODEuOC0xMDcuNCAxMzQuNC0xODQuNiAxMzQuNy0xNi4xIDAtMTYuNi0yNC40IDAtMjQuNCA2NC40LS4zIDEyMC41LTQyLjcgMTU3LjItMTEwLjEtNDEuMSAxNS45LTExOC42IDI3LjktMTYxLjYtODIuMiAxMDktNDQuOSAxNTkuMSAxMS4yIDE3OC4zIDQ1LjUgOS45LTI0LjQgMTctNTAuOSAyMS42LTc5LjcgMCAwLTEzOS43IDIxLjktMTQ5LjUtOTguMSAxMTkuMS00Ny45IDE1Mi42IDc2LjcgMTUyLjYgNzYuNyAxLjYtMTYuNyAzLjMtNTIuNiAzLjMtNTMuNCAwIDAtMTA2LjMtNzMuNy0zOC4xLTE2NS4yIDEyNC42IDQzIDYxLjQgMTYyLjQgNjEuNCAxNjIuNCAuNSAxLjYgLjUgMjMuOCAwIDMzLjQgMCAwIDQ1LjItODkgMTM2LjQtNTcuNS00LjIgMTM0LTE0MS45IDEwNi40LTE0MS45IDEwNi40LTQuNCAyNy40LTExLjIgNTMuNC0yMCA3Ny41IDAgMCA4My05MS44IDE3Mi0yMHoiXQogICAgfTsKICAgIGZhQW1hem9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFtYXpvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcwIiwgIk0yNTcuNyAxNjIuN2MtNDguNyAxLjgtMTY5LjUgMTUuNS0xNjkuNSAxMTcuNSAwIDEwOS41IDEzOC4zIDExNCAxODMuNSA0My4yIDYuNSAxMC4yIDM1LjQgMzcuNSA0NS4zIDQ2LjhsNTYuOC01NnMtMzIuMy0yNS4zLTMyLjMtNTIuOGwwLTE0Ny4xQzM0MS41IDg5IDMxNyAzMiAyMjkuMiAzMiAxNDEuMiAzMiA5NC41IDg3IDk0LjUgMTM2LjNsNzMuNSA2LjhjMTYuMy00OS41IDU0LjItNDkuNSA1NC4yLTQ5LjUgNDAuNy0uMSAzNS41IDI5LjggMzUuNSA2OS4xem0wIDg2LjhjMCA4MC04NC4yIDY4LTg0LjIgMTcuMiAwLTQ3LjIgNTAuNS01Ni43IDg0LjItNTcuOGwwIDQwLjZ6TTM5My43IDQxM2MtNy43IDEwLTcwIDY3LTE3NC41IDY3UzM0LjcgNDA4LjUgMTAuMiAzNzljLTYuOC03LjcgMS0xMS4zIDUuNS04LjMgNzMuMyA0NC41IDE4Ny44IDExNy44IDM3Mi41IDMwLjMgNy41LTMuNyAxMy4zIDIgNS41IDEyem0zOS44IDIuMmMtNi41IDE1LjgtMTYgMjYuOC0yMS4yIDMxLTUuNSA0LjUtOS41IDIuNy02LjUtMy44czE5LjMtNDYuNSAxMi43LTU1Yy02LjUtOC4zLTM3LTQuMy00OC0zLjItMTAuOCAxLTEzIDItMTQtLjMtMi4zLTUuNyAyMS43LTE1LjUgMzcuNS0xNy41IDE1LjctMS44IDQxLS44IDQ2IDUuNyAzLjcgNS4xIDAgMjcuMS02LjUgNDMuMXoiXQogICAgfTsKICAgIGZhRW52aXJhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVudmlyYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjk5IiwgIk0wIDMyYzQ3Ny42IDAgMzY2LjYgMzE3LjMgMzY3LjEgMzY2LjNsODAuOSA4MS43LTI2IDAtNzAuNC03MS4yQzMxMi42IDQxMyAyMjcuMiA0NDMuMyAxMzcuMiAzNzEuOCA0NyAzMDAuMyA1MiAyMTQuNyAwIDMyek03OS43IDc4Yy00OS43LTIzLjUtNS4yIDkuMi01LjIgOS4yIDQ1LjIgMzEuMiA2NiA3My43IDkwLjIgMTE5LjkgMzEuNSA2MC4yIDc5IDEzOS43IDE0NC4yIDE2Ny43IDY1IDI4IDM0LjIgMTIuNSA2LTguNS0yOC4yLTIxLjItNjguMi04Ny05MS0xMzAuMi0zMS43LTYwLTYxLTExOC42LTE0NC4yLTE1OC4xeiJdCiAgICB9OwogICAgZmFMaW5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGlub2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYjgiLCAiTTM2Ni4zIDE4Ni45bC01OS41IDM2LjktLjggMzYuOS0yOS4zLTE5LjMtMzkuNCAyNC4zYzIuMiA1NS4yIDIuNSA1OS4zIDIuNSA1OS41bC05Ny4yIDY1LjQtMTUuMS0xMDQuNyAxMDguMS02Mi00MC4yLTI2LTc1LjQgMzguNS0yMS0xNDMuMyAxMjktNDkuNC05MS4zLTQzLjYtMTI1LjcgMzkuNCAyNy43IDEzNC45IDQxLjkgMzIuNy0zMS44IDE1LjEgMjAuOSAxMDEuNCAyOS4zIDI3LjctMjAuOSAxMi42IDE2LjggNzguOCA2Ni4yIDY5LjZjLTEwLjgtNzQuOC0xMS43LTc4LjYtMTEuNy03OC44bDc3LjktNTUuM0MyNDQgMzY1LjQgMjQyLjMgMzY3IDI0Mi4zIDM2N2wuOCAyNC4zIDMzLjUgMjguNS0uOC03Ny4xIDQ2LjktMzMuNSAyNi44LTE4LjQtMi41IDM2IDI1LjEgMTcuNiA2LjctNzQuNiA1OC43LTQzLjYtNzEuMi0zOS40eiJdCiAgICB9OwogICAgZmFBY2N1c29mdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhY2N1c29mdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzY5IiwgIk0zMjIuMSAyNTJsMC0xLTUxLjItNjUuOHMtMTIgMS42LTI1IDE1LjFjLTkgOS4zLTI0Mi4xIDIzOS4xLTI0My40IDI0MC45LTcgMTAgMS42IDYuOCAxNS43IDEuNyAuOCAwIDExNC41LTM2LjYgMTE0LjUtMzYuNiAuNS0uNi0uMS0uMSAuNi0uNi0uNC01LjEtLjgtMjYuMi0xLTI3LjctLjYtNS4yIDIuMi02LjkgNy04LjlsOTIuNi0zMy44Yy42LS44IDg4LjUtODEuNyA5MC4yLTgzLjN6TTQ4Mi4yIDM3Mi4xYzEzLjMgMTYuMSAyMC43IDEzLjMgMzAuOCA5LjMgMy4yLTEuMiAxMTUuNC00Ny42IDExNy44LTQ4LjkgOC00LjMtMS43LTE2LjctNy4yLTIzLjQtMi4xLTIuNS0yMDUuMS0yNDUuNi0yMDcuMi0yNDguMy05LjctMTIuMi0xNC4zLTEyLjktMzguNC0xMi44LTEwLjIgMC0xMDYuOCAuNS0xMTYuNSAuNi0xOS4yIC4xLTMyLjktLjMtMTkuMiAxNi45IDcuNyA5LjUgMjM0LjIgMjk5LjcgMjM5LjkgMzA2LjZ6bTE1Mi43IDEuNmMtMi4zLS4zLTI0LjYtNC43LTM4LTcuMiAwIDAtMTE1IDUwLjQtMTE3LjUgNTEuNi0xNiA3LjMtMjYuOS0zLjItMzYuNy0xNC42bC01Ny4xLTc0Yy01LjQtLjktNjAuNC05LjYtNjUuMy05LjMtMy4xIC4yLTkuNiAuOC0xNC40IDIuOS00LjkgMi4xLTE0NS4yIDUyLjgtMTUwLjIgNTQuNy01LjEgMi0xMS40IDMuNi0xMS4xIDcuNiAuMiAyLjUgMiAyLjYgNC42IDMuNSAyLjcgLjggMzAwLjkgNjcuNiAzMDggNjkuMSAxNS42IDMuMyAzOC41IDEwLjUgNTMuNiAxLjcgMi4xLTEuMiAxMjMuOC03Ni40IDEyNS44LTc3LjggNS40LTQgNC4zLTYuOC0xLjctOC4yeiJdCiAgICB9OwogICAgZmFFcmxhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZXJsYW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzOWQiLCAiTTg3LjIgNTMuNWwtODcuMiAwIDAgNDA1IDEwMC40IDBjLTQ5LjctNTIuNi03OC44LTEyNS4zLTc4LjctMjEyLjEtLjEtNzYuNyAyNC0xNDIuNyA2NS41LTE5Mi45em0yMzguMiA5LjdjLTQ1LjkgLjEtODUuMSAzMy41LTg5LjIgODMuMmwxNjkuOSAwYy0xLjEtNDkuNy0zNC41LTgzLjEtODAuNy04My4yem0yMzAuNy05LjZsLjMgMC0uMS0uMS0uMiAuMXptLjMgMGMzMS40IDQyLjcgNDguNyA5Ny41IDQ2LjIgMTYyLjcgLjUgNiAuNSAxMS43IDAgMjQuMWwtMzcyLjQgMGMtLjIgMTA5LjcgMzguOSAxOTQuOSAxMzguNiAxOTUuMyA2OC41LS4zIDExOC01MSAxNTEuOS0xMDYuMWw5Ni40IDQ4LjJjLTE3LjQgMzAuOS0zNi41IDU3LjgtNTcuOSA4MC44bDgwLjggMCAwLTQwNS04My42IDB6Il0KICAgIH07CiAgICBmYVVuaXNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bmlzb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg1NCIsICJNNDM1LjEgMTYxLjdhMTMuOSAxMy45IDAgMSAxIDE5LjYtMTkuNyAxMy45IDEzLjkgMCAxIDEgLTE5LjYgMTkuN3pNMzY5LjcgOTcuOGMxMC40IDIuMSAyMC42IDUuMiAzMC40IDkuMiA2LjggMi44IDEwLjEgMTAuOCA3LjMgMTcuNy0yLjggNi43LTEwLjkgMTAuMS0xNy42IDcuMy04LjMtMy40LTE2LjgtNS44LTI1LjctNy44LTguNi0xLjctMTcuMy0yLjUtMjYtMi41LTE5LjMgMC0zNy4xLTEwLjMtNDYuNy0yNy04LjctMTUuMS0yMC42LTI4LjktMzQuNy0zOS43LTU5LjEtNDUuNS0xNDMuOC0zNC4zLTE4OS4yIDI1LTIuNiAzLjMtNi41IDUuMy0xMC43IDUuMy03LjQgMC0xMy41LTYuMS0xMy41LTEzLjUgMC0zLjIgMS4yLTYuMyAzLjItOC44IDEyLjktMTYuNyAyOC45LTMwLjcgNDcuMS00MS4yIDc3LjQtNDQuOCAxNzYuNC0xOC4yIDIyMS4xIDU5LjQgNC4zIDguMiAxMy43IDEzLjMgMjIuOCAxMy41IDEwLjggMCAyMS42IDEgMzIuMiAzLjF6TTM1IDI3MGM0LjYtOC4yIDQuNi0xOC4yIDAtMjYuNC0yMS45LTM2LjUtMjcuMy04Mi4zLTE2LjMtMTIzLjIgMS42LTUuOSA2LjktMTAgMTMtMTAgOC43IDAgMTUuMyA4LjcgMTMgMTctOS41IDM1LjQtMy40IDcxIDEzLjcgMTAyLjkgOS4zIDE2LjUgOS4zIDM2LjcgMCA1My4xLTguNyAxNS43LTE0LjggMzIuNC0xNy4yIDUwLjMtOS43IDczLjkgNDIuMyAxNDEuNyAxMTYuMiAxNTEuNCA3LjMgMSAxMi42IDcuOSAxMS42IDE1LjItMSA3LjMtNy44IDEyLjYtMTUuMSAxMS42LTIxLjEtMi44LTQxLjQtOS43LTU5LjgtMjAuMy03NS42LTQzLjYtMTA0LjktMTQ1LjgtNTkuMi0yMjEuNXpNMjE2LjkgNTA5Yy03LjQgMi0xNS4xLTIuNC0xNy4xLTkuOHMyLjUtMTUgOS45LTE2LjljOC41LTIuMiAxNy40IDQuNSAxNy40IDEzLjQgMCA2LjItNC4yIDExLjYtMTAuMiAxMy4zem0xMjIuMy05MWMtOS41IDAtMTguNCA1LTIzLjIgMTMuMi00LjkgOS40LTExLjcgMTguMi0xOC43IDI2LjJsMCAwYy03LjEgOC0xNC44IDE1LjItMjMuMiAyMS43LTUuOSA0LjUtMTQuNCAzLjQtMTktMi41cy0zLjQtMTQuNCAyLjUtMTguOWM3LTUuNCAxMy41LTExLjUgMTkuNC0xOC4xbDAgMGM1LjktNi42IDExLjEtMTMuOCAxNS41LTIxLjYgOS43LTE2LjcgMjcuNS0yNyA0Ni44LTI3IDE3LjggMCAzNS40LTMuNSA1MS44LTEwLjMgNjguMy0yOC4zIDEwMS4xLTEwOC4zIDczLjItMTc2LjUtLjYtMS42LTEtMy4zLTEtNSAwLTcuNCA2LjEtMTMuNSAxMy41LTEzLjUgNS40IDAgMTAuMyAzLjIgMTIuNCA4LjIgOC4yIDE5LjcgMTIuNCA0MC44IDEyLjQgNjIuMSAwIDg5LjUtNzIuNyAxNjIuMS0xNjIuNCAxNjIuMWwwIDB6bS0xMy4xLTI2OGMzLjktLjQgNy45LS42IDExLjktLjYgNTkuMyAwIDEwOC4yIDQ4LjcgMTA4LjIgMTA3LjhTMzk3LjMgMzY1IDMzOCAzNjVjLTQgMC03LjktLjItMTEuOC0uNi0yMi4yLTEuNy00My4zIDEwLjQtNTIuOSAzMC40LTE3LjIgMzkuMS01Ni4yIDY0LjUtOTkuMSA2NC41LTU5LjMgMC0xMDguMi00OC43LTEwOC4yLTEwNy44IDAtMjMuMiA3LjUtNDUuNyAyMS40LTY0LjMgMTIuMi0xOC4zIDEyLjEtNDIuMy0uNC02MC41LTEzLjYtMTguNS0yMC45LTQwLjgtMjAuOS02My43IDAtNTkuMSA0OC44LTEwNy44IDEwOC4yLTEwNy44IDQyLjggMCA4MS44IDI1LjQgOTkgNjQuNCA5LjYgMjAgMzAuNyAzMi4xIDUyLjkgMzAuNHpNMTA2LjggMzkzLjRjMTQuNCAyNS4yIDQxLjEgNDAuOCA2OS44IDQwLjggNDQuMiAwIDgwLjYtMzYuOCA4MC42LTgxLjZzLTM2LjQtODEuNi04MC42LTgxLjZjLTE0LjIgMC0yOC4xIDMuOC00MC4zIDEwLjktMzguMyAyMi40LTUxLjYgNzIuNy0yOS41IDExMS40ek0yNjggMjk4YzE0LjQgMjUuMiA0MS4xIDQwLjggNjkuOCA0MC44IDQ0LjIgMCA4MC42LTM2LjggODAuNi04MS42cy0zNi40LTgxLjYtODAuNi04MS42Yy0xNC4yIDAtMjguMSAzLjgtNDAuMyAxMC45LTM4LjMgMjIuNC01MS42IDcyLjctMjkuNSAxMTEuNHptLTkxLjItNTQuNmM0NC4yIDAgODAuNS0zNi44IDgwLjUtODEuNnMtMzYuNC04MS42LTgwLjYtODEuNi04MC42IDM2LjgtODAuNiA4MS42YzAgNDQuNyAzNi40IDgxLjYgODAuNiA4MS42eiJdCiAgICB9OwogICAgZmFDY0Rpc2NvdmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWRpc2NvdmVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjIiLCAiTTUyMC40IDE5Ni4xYzAtNy45LTUuNS0xMi4xLTE1LjYtMTIuMWwtNC45IDAgMCAyNC45IDQuNyAwYzEwLjMgMCAxNS44LTQuNCAxNS44LTEyLjh6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00ODMuOSAxNzAuOWMyMi42IDAgNTIuOS00LjEgNTIuOSAyNC40IDAgMTIuNi02LjYgMjAuNy0xOC43IDIzLjJsMjUuOCAzNC40LTE5LjYgMC0yMi4yLTMyLjgtMi4yIDAgMCAzMi44LTE2IDAgMC04MnpNNDI4IDE3MWw0NS4zIDAgMCAxNC0yOS4zIDAgMCAxOC4yIDI4LjMgMCAwIDEzLjgtMjguMyAwIDAgMjIuMiAyOS4zIDAgMCAxMy44LTQ1LjMgMCAwLTgyem0tNjguNyAwbDIxLjkgNTUuMiAyMi4yLTU1LjIgMTcuNSAwLTM1LjUgODQuMi04LjYgMC0zNS04NC4yIDE3LjUgMHptLTU1LjkgODYuMmE0NC42IDQ0LjYgMCAxIDEgMC04OS4yIDQ0LjYgNDQuNiAwIDEgMSAwIDg5LjJ6bS00OS4zLTgzLjFsMCAxOWMtMjAuMS0yMC4xLTQ2LjgtNC43LTQ2LjggMTkgMCAyNSAyNy41IDM4LjUgNDYuOCAxOS4ybDAgMTljLTI5LjcgMTQuMy02My4zLTUuNy02My4zLTM4LjIgMC0zMS4yIDMzLjEtNTMgNjMuMy0zOHptLTk3LjIgNjYuM2MxMS40IDAgMjIuNC0xNS4zLTMuMy0yNC40LTE1LTUuNS0yMC4yLTExLjQtMjAuMi0yMi43IDAtMjMuMiAzMC42LTMxLjQgNDkuNy0xNC4zbC04LjQgMTAuOGMtMTAuNC0xMS42LTI0LjktNi4yLTI0LjkgMi41IDAgNC40IDIuNyA2LjkgMTIuMyAxMC4zIDE4LjIgNi42IDIzLjYgMTIuNSAyMy42IDI1LjYgMCAyOS41LTM4LjggMzcuNC01Ni42IDExLjNsMTAuMy05LjljMy43IDcuMSA5LjkgMTAuOCAxNy41IDEwLjh6TTU1LjQgMjUzbC0yMy40IDAgMC04MiAyMy40IDBjMjYuMSAwIDQ0LjEgMTcgNDQuMSA0MS4xIDAgMTguNS0xMy4yIDQwLjktNDQuMSA0MC45em02Ny41IDBsLTE2IDAgMC04MiAxNiAwIDAgODJ6TTU0NCA0MzNjMCA4LjItNi44IDE1LTE1IDE1bC00MDEgMGMxODkuNi0zNS42IDM4Mi43LTEzOS4yIDQxNi0xNjBsMCAxNDV6TTc0LjEgMTkxLjZjLTUuMi00LjktMTEuNi02LjYtMjEuOS02LjZsLTQuMiAwIDAgNTQuMiA0LjIgMGMxMC4zIDAgMTctMiAyMS45LTYuNCA1LjctNS4yIDguOS0xMi44IDguOS0yMC43cy0zLjItMTUuNS04LjktMjAuNXoiXQogICAgfTsKICAgIGZhU2FmYXJpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhZmFyaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY3IiwgIk0yNzQuNyAyNzQuN0wyMzcuMyAyMzcuMyAxNjYgMzQ2IDI3NC43IDI3NC43ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMS44IDE4Mi44bDE0LjgtNi4xYzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjggMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuMy0yLjYgMS43TDQxOCAxOTcuNmMtMiAuOC00LjIgLjgtNi4xIDBzLTMuNS0yLjQtNC4zLTQuMy0uOC00LjIgMC02LjEgMi40LTMuNSA0LjMtNC4zek0zMTQuNCA5NGw2LjEtMTQuOGMuOC0yIDIuNC0zLjUgNC4zLTQuM3M0LjItLjggNi4xIDAgMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMWwtNi4xIDE0LjhjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBjLTEtLjQtMS45LTEtMi42LTEuN3MtMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjF6TTI1NiA2MGMyLjEgMCA0LjIgLjggNS43IDIuM1MyNjQgNjUuOSAyNjQgNjhsMCAxNmMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43UzI1My45IDYwIDI1NiA2MHpNMTgxIDc0LjljMS0uNCAyLS42IDMuMS0uNnMyLjEgLjIgMy4xIC42IDEuOSAxIDIuNiAxLjcgMS4zIDEuNiAxLjcgMi42TDE5Ny42IDk0Yy40IDEgLjcgMiAuNyAzLjFzLS4yIDIuMS0uNiAzLjEtMSAxLjktMS43IDIuNi0xLjYgMS40LTIuNiAxLjgtMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS44LTEuMy0xLjctMS43LTIuN2wtNi4xLTE0LjhjLS44LTItLjgtNC4yIDAtNi4xczIuNC0zLjUgNC4zLTQuM3ptLTYzLjYgNDIuNWMxLjUtMS41IDMuNS0yLjMgNS43LTIuM3M0LjIgLjggNS43IDIuM0wxNDAgMTI4LjdjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNsLTExLjMtMTEuM2MtMS41LTEuNS0yLjMtMy41LTIuMy01LjZzLjgtNC4xIDIuMy01LjZsMCAwek02MCAyNTZjMC0yLjEgLjgtNC4yIDIuMy01LjdTNjUuOSAyNDggNjggMjQ4bDE2IDBjMi4xIDAgNC4yIC44IDUuNyAyLjNzMi4zIDMuNSAyLjMgNS43LS44IDQuMi0yLjMgNS43LTMuNSAyLjMtNS43IDIuM2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNTNjAgMjU4LjEgNjAgMjU2em00MC4yIDczLjJsLTE0LjggNi4xYy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjEgMS0xLjkgMS43LTIuNiAxLjYtMS4zIDIuNi0xLjdMOTQgMzE0LjRjMi0uOCA0LjItLjggNi4xIDBzMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMS0yLjQgMy41LTQuMyA0LjN6bTQuMy0xMzZjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjZsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuMyA0LjItLjggNi4xIDBsMTQuOCA2LjFjMiAuOCAzLjUgMi40IDQuMyA0LjNzLjggNC4yIDAgNi4xbDAgMHpNMTk3LjYgNDE4bC02LjEgMTQuOGMtLjQgMS0xIDEuOS0xLjcgMi42cy0xLjYgMS4zLTIuNiAxLjctMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xbDYuMS0xNC44Yy40LTEgMS0xLjkgMS43LTIuN3MxLjYtMS40IDIuNi0xLjggMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS44IDEuMyAxLjcgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjcgMy4xek0yNjQgNDQ0YzAgMi4xLS44IDQuMi0yLjMgNS43cy0zLjUgMi4zLTUuNyAyLjMtNC4yLS44LTUuNy0yLjMtMi4zLTMuNS0yLjMtNS43bDAtMTZjMC0yLjEgLjgtNC4yIDIuMy01LjdzMy41LTIuMyA1LjctMi4zIDQuMiAuOCA1LjcgMi4zIDIuMyAzLjUgMi4zIDUuN2wwIDE2em02Ny02LjljLTEgLjQtMiAuNi0zLjEgLjZzLTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjZMMzE0LjQgNDE4Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuM2w2LjEgMTQuOGMuOCAyIC44IDQuMiAwIDYuMXMtMi40IDMuNS00LjMgNC4zem02My42LTQyLjVjLTEuNSAxLjUtMy41IDIuMy01LjcgMi4zcy00LjItLjgtNS43LTIuM0wzNzIgMzgzLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42IDMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuM2wxMS4zIDExLjNjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42bDAgMHpNMjg2LjIgMjg2LjJMMTEwLjMgNDAxLjcgMjI1LjggMjI1LjggNDAxLjcgMTEwLjMgMjg2LjIgMjg2LjJ6TTQzNy4xIDMzMWMtLjggMi0yLjQgMy41LTQuMyA0LjNzLTQuMiAuOC02LjEgMGwtMTQuOC02LjFjLTItLjgtMy41LTIuNC00LjMtNC4zcy0uOC00LjIgMC02LjFjLjQtMSAxLTEuOSAxLjctMi42czEuNi0xLjMgMi42LTEuNyAyLS42IDMuMS0uNiAyLjEgLjIgMy4xIC42bDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMXptNi45LTY3bC0xNiAwYy0yLjEgMC00LjItLjgtNS43LTIuM3MtMi4zLTMuNS0yLjMtNS43IC44LTQuMiAyLjMtNS43IDMuNS0yLjMgNS43LTIuM2wxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjN6Il0KICAgIH07CiAgICBmYVNwYWNlQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGFjZS1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YWMiLCAiTTk2IDI1NmwzMiAwIDAgMjU2LTEyOCAwIDAtMTYwIDMyIDAgMC0zMiAzMiAwIDAtMzIgMzIgMCAwLTMyem00MTYgOTZsMCAxNjAtMTI4IDAgMC0yNTYgMzIgMCAwIDMyIDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMHpNMzIwIDY0bDMyIDAgMCAzODQtMzIgMCAwLTMyLTEyOCAwIDAgMzItMzIgMCAwLTM4NCAzMiAwIDAtMzIgMzIgMCAwLTMyIDY0IDAgMCAzMiAzMiAwIDAgMzJ6bS0zMiA2NGwtNjQgMCAwIDY0IDY0IDAgMC02NHoiXQogICAgfTsKICAgIGZhTm9kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub2RlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MTkiLCAiTTMxNi4zIDQ1MmMtMi4xIDAtNC4yLS42LTYuMS0xLjZMMjkxIDQzOWMtMi45LTEuNi0xLjUtMi4yLS41LTIuNSAzLjgtMS4zIDQuNi0xLjYgOC43LTQgLjQtLjIgMS0uMSAxLjQgLjFsMTQuOCA4LjhjLjUgLjMgMS4zIC4zIDEuOCAwTDM3NSA0MDhjLjUtLjMgLjktLjkgLjktMS42bDAtNjYuN2MwLS43LS4zLTEuMy0uOS0xLjZsLTU3LjgtMzMuM2MtLjUtLjMtMS4yLS4zLTEuOCAwbC01Ny44IDMzLjNjLS42IC4zLS45IDEtLjkgMS42bDAgNjYuN2MwIC42IC40IDEuMiAuOSAxLjVsMTUuOCA5LjFjOC42IDQuMyAxMy45LS44IDEzLjktNS44bDAtNjUuOWMwLS45IC43LTEuNyAxLjctMS43bDcuMyAwYy45IDAgMS43IC43IDEuNyAxLjdsMCA2NS45YzAgMTEuNS02LjIgMTgtMTcuMSAxOC0zLjMgMC02IDAtMTMuMy0zLjZsLTE1LjItOC43Yy0zLjctMi4yLTYuMS02LjItNi4xLTEwLjVsMC02Ni43YzAtNC4zIDIuMy04LjQgNi4xLTEwLjVsNTcuOC0zMy40YzMuNy0yLjEgOC41LTIuMSAxMi4xIDBsNTcuOCAzMy40YzMuNyAyLjIgNi4xIDYuMiA2LjEgMTAuNWwwIDY2LjdjMCA0LjMtMi4zIDguNC02LjEgMTAuNWwtNTcuOCAzMy40Yy0xLjcgMS4xLTMuOCAxLjctNiAxLjd6TTM2MyAzODYuMmMwLTEyLjUtOC40LTE1LjgtMjYuMi0xOC4yLTE4LTIuNC0xOS44LTMuNi0xOS44LTcuOCAwLTMuNSAxLjUtOC4xIDE0LjgtOC4xIDExLjkgMCAxNi4zIDIuNiAxOC4xIDEwLjYgLjIgLjggLjggMS4zIDEuNiAxLjNsNy41IDBjLjUgMCAuOS0uMiAxLjItLjUgLjMtLjQgLjUtLjggLjQtMS4zLTEuMi0xMy44LTEwLjMtMjAuMi0yOC44LTIwLjItMTYuNSAwLTI2LjMgNy0yNi4zIDE4LjYgMCAxMi43IDkuOCAxNi4xIDI1LjYgMTcuNyAxOC45IDEuOSAyMC40IDQuNiAyMC40IDguMyAwIDYuNS01LjIgOS4yLTE3LjQgOS4yLTE1LjMgMC0xOC43LTMuOC0xOS44LTExLjQtLjEtLjgtLjgtMS40LTEuNy0xLjRsLTcuNSAwYy0uOSAwLTEuNyAuNy0xLjcgMS43IDAgOS43IDUuMyAyMS4zIDMwLjYgMjEuMyAxOC41IDAgMjktNy4yIDI5LTE5Ljh6bTU0LjUtNTAuMWMwIDYuMS01IDExLjEtMTEuMSAxMS4xcy0xMS4xLTUtMTEuMS0xMS4xYzAtNi4zIDUuMi0xMS4xIDExLjEtMTEuMSA2LS4xIDExLjEgNC44IDExLjEgMTEuMXptLTEuOCAwYzAtNS4yLTQuMi05LjMtOS40LTkuMy01LjEgMC05LjMgNC4xLTkuMyA5LjNzNC4yIDkuNCA5LjMgOS40YzUuMi0uMSA5LjQtNC4zIDkuNC05LjR6bS00LjUgNi4ybC0yLjYgMGMtLjEtLjYtLjUtMy44LS41LTMuOS0uMi0uNy0uNC0xLjEtMS4zLTEuMWwtMi4yIDAgMCA1LTIuNCAwIDAtMTIuNSA0LjMgMGMxLjUgMCA0LjQgMCA0LjQgMy4zIDAgMi4zLTEuNSAyLjgtMi40IDMuMSAxLjcgLjEgMS44IDEuMiAyLjEgMi44IC4xIDEgLjMgMi43IC42IDMuM3ptLTIuOC04LjhjMC0xLjctMS4yLTEuNy0xLjgtMS43bC0yIDAgMCAzLjUgMS45IDBjMS42IDAgMS45LTEuMSAxLjktMS44ek0xMzcuMyAxOTFjMC0yLjctMS40LTUuMS0zLjctNi40TDcyLjMgMTQ5LjNjLTEtLjYtMi4yLS45LTMuNC0xbC0uNiAwYy0xLjIgMC0yLjMgLjQtMy40IDFMMy43IDE4NC42QzEuNCAxODUuOSAwIDE4OC40IDAgMTkxbC4xIDk1YzAgMS4zIC43IDIuNSAxLjggMy4yczIuNSAuNyAzLjcgMEw0MiAyNjguM2MyLjMtMS40IDMuNy0zLjggMy43LTYuNGwwLTQ0LjRjMC0yLjYgMS40LTUuMSAzLjctNi40bDE1LjUtOC45YzEuMi0uNyAyLjQtMSAzLjctMXMyLjYgLjMgMy43IDFsMTUuNSA4LjljMi4zIDEuMyAzLjcgMy44IDMuNyA2LjRsMCA0NC40YzAgMi42IDEuNCA1LjEgMy43IDYuNGwzNi40IDIwLjljMS4xIC43IDIuNiAuNyAzLjcgMCAxLjEtLjYgMS44LTEuOSAxLjgtMy4ybC4yLTk1ek00NzIuNSA4Ny4zbDAgMTc2LjRjMCAyLjYtMS40IDUuMS0zLjcgNi40bC02MS4zIDM1LjRjLTIuMyAxLjMtNS4xIDEuMy03LjQgMGwtNjEuMy0zNS40Yy0yLjMtMS4zLTMuNy0zLjgtMy43LTYuNGwwLTcwLjhjMC0yLjYgMS40LTUuMSAzLjctNi40bDYxLjMtMzUuNGMyLjMtMS4zIDUuMS0xLjMgNy40IDBsMTUuMyA4LjhjMS43IDEgMy45LS4zIDMuOS0yLjJsMC05NGMwLTIuOCAzLTQuNiA1LjUtMy4ybDM2LjUgMjAuNGMyLjMgMS4yIDMuOCAzLjcgMy44IDYuNHptLTQ2IDEyOC45YzAtLjctLjQtMS4zLS45LTEuNmwtMjEtMTIuMmMtLjYtLjMtMS4zLS4zLTEuOSAwbC0yMSAxMi4yYy0uNiAuMy0uOSAuOS0uOSAxLjZsMCAyNC4zYzAgLjcgLjQgMS4zIC45IDEuNmwyMSAxMi4xYy42IC4zIDEuMyAuMyAxLjggMGwyMS0xMi4xYy42LS4zIC45LS45IC45LTEuNmwwLTI0LjMgLjEgMHptMjA5LjgtLjdjMi4zLTEuMyAzLjctMy44IDMuNy02LjRsMC0xNy4xYzAtMi42LTEuNC01LjEtMy43LTYuNGwtNjAuOS0zNS40Yy0yLjMtMS4zLTUuMS0xLjMtNy40IDBsLTYxLjMgMzUuNGMtMi4zIDEuMy0zLjcgMy44LTMuNyA2LjRsMCA3MC44YzAgMi43IDEuNCA1LjEgMy43IDYuNGw2MC45IDM0LjdjMi4yIDEuMyA1IDEuMyA3LjMgMGwzNi44LTIwLjVjMi41LTEuNCAyLjUtNSAwLTYuNEw1NTAgMjQxLjZjLTEuMi0uNy0xLjktMS45LTEuOS0zLjJsMC0yMi4yYzAtMS4zIC43LTIuNSAxLjktMy4ybDE5LjItMTEuMWMxLjEtLjcgMi42LS43IDMuNyAwTDU5Mi4xIDIxM2MxLjEgLjcgMS45IDEuOSAxLjkgMy4ybDAgMTcuNGMwIDIuOCAzLjEgNC42IDUuNiAzLjJsMzYuNy0yMS4zek01NTkgMjE5Yy0uNCAuMy0uNyAuNy0uNyAxLjJsMCAxMy42YzAgLjUgLjMgMSAuNyAxLjJsMTEuOCA2LjhjLjQgLjMgMSAuMyAxLjQgMEw1ODQgMjM1Yy40LS4zIC43LS43IC43LTEuMmwwLTEzLjZjMC0uNS0uMy0xLS43LTEuMmwtMTEuOC02LjhjLS40LS4zLTEtLjMtMS40IDBMNTU5IDIxOXpNMzA0LjggMjYyLjVsMC03MC40YzAtMi42LTEuNi01LjEtMy45LTYuNGwtNjEuMS0zNS4yYy0yLjEtMS4yLTUtMS40LTcuNCAwbC02MS4xIDM1LjJjLTIuMyAxLjMtMy45IDMuNy0zLjkgNi40bDAgNzAuNGMwIDIuOCAxLjkgNS4yIDQgNi40bDYxLjIgMzUuMmMyLjQgMS40IDUuMiAxLjMgNy40IDBsNjEtMzUuMmMxLjgtMSAzLjEtMi43IDMuNi00LjcgLjEtLjUgLjItMS4xIC4yLTEuN3pNMjMwLjUgMTM3LjZsLS44IC41IDEuMSAwLS4zLS41em03Ni4yIDEzMC4ybC0uNC0uNyAwIC45IC40LS4yeiJdCiAgICB9OwogICAgZmFDb2RlcGVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvZGVwZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjYiIsICJNNTAyLjMgMTU5LjdsLTIzNC0xNTZjLTgtNC45LTE2LjUtNS0yNC42IDBsLTIzNCAxNTZjLTYgNC05LjcgMTEuMS05LjcgMTguM0wwIDMzNGMwIDcuMSAzLjcgMTQuMyA5LjcgMTguM2wyMzQgMTU2YzggNC45IDE2LjUgNSAyNC42IDBsMjM0LTE1NmM2LTQgOS43LTExLjEgOS43LTE4LjNsMC0xNTZjMC03LjEtMy43LTE0LjMtOS43LTE4LjN6TTI3OCA2My4xbDE3Mi4zIDExNC45LTc2LjkgNTEuNC05NS40LTYzLjcgMC0xMDIuNnptLTQ0IDBMMjM0IDE2NS43IDEzOC42IDIyOS40IDYxLjcgMTc4IDIzNCA2My4xek00NCAyMTkuMUw5OS4xIDI1NiA0NCAyOTIuOCA0NCAyMTkuMXpNMjM0IDQ0OC44TDYxLjcgMzM0IDEzOC42IDI4Mi42IDIzNCAzNDYuMyAyMzQgNDQ4Ljh6TTI1NiAzMDhsLTc3LjctNTIgNzcuNy01MiA3Ny43IDUyLTc3LjcgNTJ6bTIyIDE0MC45bDAtMTAyLjYgOTUuNC02My43IDc2LjkgNTEuNC0xNzIuMyAxMTQuOXptMTkwLTE1NmwtNTUuMS0zNi45IDU1LjEtMzYuOSAwIDczLjd6Il0KICAgIH07CiAgICBmYVJhdmVscnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmF2ZWxyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ5IiwgIk00OTguNiAyMzQuMmMtMS4yLTEwLjMtMS43LTIwLjgtMy43LTMxLTIuNS0xMi40LTUuNy0yNC42LTkuNi0zNi42LTYuOC0yMC45LTE3LjItNDAuMy0zMC45LTU3LjUtNS45LTcuNi0xMi4xLTE0LjgtMTguOC0yMS43LTE0LjEtMTQtMzAtMjYuMS00Ny4xLTM2LjEtMTcuOC0xMC42LTM2LjgtMTguOS01Ni43LTI0LjctMTEtMy4xLTIyLjMtNS40LTMzLjUtNy42LTYuOC0xLjMtMTMuNy0xLjctMjAuNi0yLjUtLjMgMC0uNi0uNC0uOS0uNi0xMC44IDAtMjEuNSAwLTMyLjMgMC0yLjQgLjQtNC44IC45LTcuMiAxLjItMTEuNiAxLjItMjMuMSAzLjYtMzQuMyA3LjEtMTMuOCA0LjEtMjcuMSA5LjYtMzkuOCAxNi40LTEzLjMgNy0yNi4xIDE1LjEtMzguMSAyNC4yLTYuMiA0LjYtMTIuMyA5LjQtMTggMTQuNS0xMC4yIDkuMi0yMC40IDE4LjQtMjkuOSAyOC4zLTEyLjggMTMuMy0yNC4xIDI4LjEtMzMuNiA0NC04LjYgMTQtMTUuNSAyOS0yMC41IDQ0LjYtNy4yIDIyLjctMTAuMyA0Ni42LTkuMiA3MC4zIC42IDEzLjUgMiAyNi45IDQuNCA0MC4yIDMuNCAxOC40IDkgMzYuMyAxNi43IDUzLjMgMTMuNiAyOS4yIDMyLjEgNTEuNSA1MC40IDY3LjkgMTIuOCAxMS42IDI2LjggMjEuOSA0MS44IDMwLjYgMTcuNyAxMC40IDM2LjQgMTguOSA1NS45IDI1LjMgMTMuMyA0LjMgMjYuOSA3LjYgNDAuNiA5LjggNi4xIDEgMTIuMyAxLjMgMTguNCAxLjkgLjQgLjEgLjggLjMgMS4yIC42bDMyLjMgMGMyLjUtLjQgNS0uOSA3LjUtMS4xIDE2LjMtMS4zIDMyLjEtNS4zIDQ3LjUtMTAuNyAxNy4yLTUuOSAzMy43LTEzLjkgNDktMjMuOCA5LjctNi40IDE5LjQtMTMuMSAyOC43LTIwLjEgNS44LTQuMyAxMS05LjUgMTYuMy0xNC41IDQtMy43IDcuOC03LjYgMTEuNS0xMS41IDEyLTEyLjcgMjIuNi0yNi42IDMxLjQtNDEuNiA5LjUtMTYgMTcuNC0zMi45IDIyLjMtNTAuOSAyLjktMTAuNCA0LjktMjEgNy0zMS43IDEtNS4zIDEuMy0xMC43IDEuOS0xNi4xIDAtLjMgLjQtLjYgLjYtLjlsMC0zNy4xYy0uMi0uNi0uNC0xLjItLjYtMS44em0tMTYxLjEtMS4ycy0xNi42LTMtMjguNS0zYy0yNy4yIDAtMzMuNiAxNC45LTMzLjYgMzdsMCA5My43LTczLjUgMCAwLTE5MC43IDczLjUgMCAwIDMxLjljOC45LTI2LjggMjYuOC0zNi4yIDYyLTM2LjJsMCA2Ny4zeiJdCiAgICB9OwogICAgZmFBbGlwYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWxpcGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2NDIiLCAiTTM3Ny43IDMyTDcwLjMgMzJDMzEuNCAzMiAwIDYzLjQgMCAxMDIuM0wwIDQwOS43QzAgNDQ4LjYgMzEuNCA0ODAgNzAuMyA0ODBsMzA3LjUgMGMzOC41IDAgNjkuOC0zMS4xIDcwLjMtNjkuNi00Ni0yNS42LTExMC42LTYwLjMtMTcxLjYtODguNC0zMi4xIDQ0LTg0LjEgODEtMTQ4LjYgODEtNzAuNiAwLTkzLjctNDUuMy05Ny03Ni40LTQtMzkgMTQuOS04MS41IDk5LjUtODEuNSAzNS40IDAgNzkuNCAxMC4yIDEyNy4xIDI1IDE2LjUtMzAuMSAyNi41LTYwLjMgMjYuNS02MC4zbC0xNzguMiAwIDAtMTYuNyA5Mi4xIDAgMC0zMS4yLTEwOS40IDAgMC0xOSAxMDkuNCAwIDAtNTAuNCA1MC45IDAgMCA1MC40IDEwOS40IDAgMCAxOS0xMDkuNCAwIDAgMzEuMiA4OC44IDBzLTE1LjIgNDYuNi0zOC4zIDkwLjljNDguOSAxNi43IDEwMCAzNiAxNDguNiA1Mi43bDAtMjM0LjRjLjItMzguNy0zMS4yLTcwLjMtNjkuOS03MC4zek00Ny4zIDMyM2MxIDIwLjIgMTAuMiA1My43IDY5LjkgNTMuNyA1Mi4xIDAgOTIuNi0zOS43IDExNy45LTcyLjktNDQuNi0xOC43LTg0LjUtMzEuNC0xMDkuNC0zMS40LTY3LjQgMC03OS40IDMzLjEtNzguNCA1MC42eiJdCiAgICB9OwogICAgZmFDY0FtZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1leCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYzIiwgIk0wIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEuMS02MS43IDAtMzEuOS0zNS4xLTMxLjkgMzUuMS0yMDMuNyAwIDAtMTYzLjgtNjUuOCAwIDgxLjctMTg0LjcgNzguNiAwIDI4LjEgNjMuMiAwLTYzLjIgOTcuMiAwIDE2LjkgNDcuNiAxNy00Ny42IDc1LjUgMCAwLTIuNGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyem00NDAuNC0yMS43bDQyLjItNDYuMyA0MiA0Ni4zIDUxLjQgMC02OC03Mi4xIDY4LTcyLjEtNTAuNiAwLTQyIDQ2LjctNDEuNS00Ni43LTUxLjQgMCA2Ny41IDcyLjUtNjcuNCA3MS42IDAtMzMuMS04MyAwIDAtMjIuMiA4MC45IDAgMC0zMi4zLTgwLjkgMCAwLTIyLjQgODMgMCAwLTMzLjEtMTIyIDAgMCAxNDMuMiAxNzEuOCAwem05Ni4zLTcybDM5LjMgNDEuOSAwLTgzLjMtMzkuMyA0MS40em0tMzYuMy05MmwzNi45LTEwMC42IDAgMTAwLjYgMzguNyAwIDAtMTQzLjMtNjAuMiAwLTMyLjIgODkuMy0zMS45LTg5LjMtNjEuMiAwIDAgMTQzLjEtNjMuMi0xNDMuMS01MS4yIDAtNjIuNCAxNDMuMyA0MyAwIDExLjktMjguNyA2NS45IDAgMTIgMjguNyA4Mi43IDAgMC0xMDAuMyAzNi44IDEwMC4zIDM0LjQgMHpNMjgyIDE4NS40bDE5LjUtNDYuOSAxOS40IDQ2LjktMzguOSAweiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1hbHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFhOCIsICJNMjQ0IDI0NmMtMy4yLTItNi4zLTIuOS0xMC4xLTIuOS02LjYgMC0xMi42IDMuMi0xOS4zIDMuN2wxLjcgNC45IDI3LjctNS43ek0zNzkuOSA0NDMuOWMtMTkgMC02NC4xIDkuNS03OS45IDE5LjhsNi45IDQ1LjFjMzUuNyA2LjEgNzAuMSAzLjYgMTA2LTkuOC00LjgtMTAtMjMuNS01NS4xLTMzLTU1LjF6TTM0MC44IDE3N2M2LjYgMi44IDExLjUgOS4yIDIyLjcgMjIuMSAyLTEuNCA3LjUtNS4yIDcuNS04LjYgMC00LjktMTEuOC0xMy4yLTEzLjItMjMgMTEuMi01LjcgMjUuMi02IDM3LjYtOC45IDY4LjEtMTYuNCAxMTYuMy01Mi45IDE0Ni44LTExNi43IDYuMS0xMi42IDExLjgtMjUuOCAxMi40LTM5LjlsLTIgMi42Yy0yOC40IDUwLTMzIDYzLjItODEuMyAxMDAtMzEuOSAyNC40LTY5LjIgNDAuMi0xMDYuNiA1NC42bC02LjMtLjMgMC0yMS44Yy0xOS42IDEuNi0xOS43LTE0LjYtMzEuNi0yMy0xOC43IDIwLjYtMzEuNiA0MC44LTU4LjkgNTEuMS0xMi43IDQuOC0xOS42IDEwLTI1LjkgMjEuOCAzNC45LTE2LjQgOTEuMi0xMy41IDk4LjgtMTB6TTU1NS41IDBsLS42IDEuMS0uMyAuOSAuNi0uNiAuMy0xLjR6TTQ5Ni4zIDM4Mi4xYy0zMy45LTU2LjktNzUuMy0xMTguNC0xNTAtMTE1LjVsLS4zLTZjLTEuMS0xMy41IDMyLjggMy4yIDM1LjEtMzFsLTE0LjQgNy4yYy0xOS44LTQ1LjctOC42LTU0LjMtNjUuNS01NC4zLTE0LjcgMC0yNi43IDEuNy00MS40IDQuNiAyLjkgMTguNiAyLjIgMzYuNy0xMC45IDUwLjNsMTkuNSA1LjVjLTEuNyAzLjItMi45IDYuMy0yLjkgOS44IDAgMjEgNDIuOCAyLjkgNDIuOCAzMy42IDAgMTguNC0zNi44IDYwLjEtNTQuOSA2MC4xLTggMC01My43LTUwLTUzLjQtNjAuMWwuMy00LjYgNTIuMy0xMS41YzEzLTIuNiAxMi4zLTIyLjctMi45LTIyLjctMy43IDAtNDMuMSA5LjItNDkuNCAxMC42LTItNS4yLTcuNS0xNC4xLTEzLjgtMTQuMS0zLjIgMC02LjMgMy4yLTkuNSA0LTkuMiAyLjYtMzEgMi45LTIxLjUgMjAuMUwxNS45IDI5OC41Yy01LjUgMS4xLTguOSA2LjMtOC45IDExLjggMCA2IDUuNSAxMC45IDExLjUgMTAuOSA4IDAgMTMxLjMtMjguNCAxNDcuNC0zMi4yIDIuNiAzLjIgNC42IDYuMyA3LjggOC42IDIwLjEgMTQuNCA1OS44IDg1LjkgNzYuNCA4NS45IDI0LjEgMCA1OC0yMi40IDcxLjMtNDEuOSAzLjItNC4zIDYuOS03LjUgMTIuNC02LjkgLjYgMTMuOC0zMS42IDM0LjItMzMgNDMuNy0xLjQgMTAuMi0xIDM1LjItLjMgNDEuMSAyNi43IDguMSA1Mi0zLjYgNzcuOS0yLjkgNC4zLTIxIDEwLjYtNDEuOSA5LjgtNjMuNWwtLjMtOS41Yy0xLjQtMzQuMi0xMC45LTM4LjUtMzQuOC01OC42LTEuMS0xLjEtMi42LTIuNi0zLjctNCAyLjItMS40IDEuMS0xIDQuNi0xLjcgODguNSAwIDU2LjMgMTgzLjYgMTExLjUgMjI5LjkgMzMuMS0xNSA3Mi41LTI3LjkgMTAzLjUtNDcuMi0yOS0yNS42LTUyLjYtNDUuNy03Mi43LTc5Ljl6TTMwMC4xIDQyOC4ybDAgMjcuMiAxMS44LTMuNC0yLjktMjMuOC04LjkgMHpNMjMxLjQgMjc3LjhsMjQuMSA2MS4yIDIxLTEzLjgtMzEuMy01MC45LTEzLjggMy41em04NC40IDE1NC45bDIgMTIuNGM5LTEuNSA1OC40LTYuNiA1OC40LTE0LjEgMC0xLjQtLjYtMy4yLS45LTQuNi0yNi44IDAtMzYuOSAzLjgtNTkuNSA2LjN6Il0KICAgIH07CiAgICBmYUxldHRlcmJveGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGV0dGVyYm94ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjJkIiwgIk01MjEuMyAxMjhDNTg2LjkgMTI4IDY0MCAxODEuMSA2NDAgMjQ2LjZTNTg2LjkgMzY1LjIgNTIxLjMgMzY1LjJjLTQyLjUgMC03OS43LTIyLjMtMTAwLjctNTUuOCAxMS40LTE4LjIgMTgtMzkuNyAxOC02Mi44cy02LjYtNDQuNi0xOC02Mi44bC44LTEuMmMyMC44LTMyLjMgNTYuOC01My45IDk3LjktNTQuNmwyIDB6TTMyMCAxMjhjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwem0tMjAxLjMgMGM0Mi41IDAgNzkuNyAyMi4zIDEwMC43IDU1LjgtMTEuNCAxOC4yLTE4IDM5LjctMTggNjIuOHM2LjYgNDQuNiAxOCA2Mi44bC0uOCAxLjJjLTIwLjggMzIuMy01Ni44IDUzLjktOTcuOSA1NC42bC0yIDBDNTMuMSAzNjUuMSAwIDMxMi4xIDAgMjQ2LjZTNTMuMSAxMjggMTE4LjcgMTI4eiJdCiAgICB9OwogICAgZmFPcGVyYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZhIiwgIk0zMjEuOSAzMi43Yy0xNzAuMiAwLTI1Mi42IDIyMy44LTE0Ny41IDM1NS4xIDM2LjUgNDUuNCA4OC42IDc1LjYgMTQ3LjUgNzUuNiAzNi4zIDAgNzAuMy0xMS4xIDk5LjQtMzAuNC00My44IDM5LjItMTAxLjkgNjMtMTY1LjMgNjMtMy45IDAtOCAwLTExLjktLjMtMTMxLjUtNi4xLTIzNi4xLTExNC42LTIzNi4xLTI0Ny43IDAtMTM3IDExMS0yNDggMjQ4LTI0OGwuOCAwYzYzLjEgLjMgMTIwLjcgMjQuMSAxNjQuNCA2My4xLTI5LTE5LjQtNjMuMS0zMC40LTk5LjMtMzAuNHpNNDIzLjcgNDMwLjRjLTQwLjkgMjQuNy05MC43IDIzLjYtMTMyLTUuOCA1Ni4yLTIwLjUgOTcuNy05MS42IDk3LjctMTc2LjYgMC04NC43LTQxLjItMTU1LjgtOTcuNC0xNzYuNiA0MS44LTI5LjIgOTEuMi0zMC4zIDEzMi45LTUgMTA1LjkgOTguNyAxMDUuNSAyNjUuNy0xLjIgMzY0eiJdCiAgICB9OwogICAgZmFXZWlibyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlibyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMThhIiwgIk00MDcgMTc3LjZjNy42LTI0LTEzLjQtNDYuOC0zNy40LTQxLjctMjIgNC44LTI4LjgtMjguMS03LjEtMzIuOCA1MC4xLTEwLjkgOTIuMyAzNy4xIDc2LjUgODQuOC02LjggMjEuMi0zOC44IDEwLjgtMzItMTAuM3pNMjE0LjggNDQ2LjdjLTEwNi4zIDAtMjE0LjgtNTEuNC0yMTQuOC0xMzYuMyAwLTQ0LjMgMjgtOTUuNCA3Ni4zLTE0My43IDk5LjctOTkuNyAyMDMuMi0xMDAuOSAxNzMuNi01LjctNCAxMy4xIDEyLjMgNS43IDEyLjMgNiA3OS41LTMzLjYgMTQwLjUtMTYuOCAxMTQgNTEuNC0zLjcgOS40IDEuMSAxMC45IDguMyAxMy4xIDEzNS43IDQyLjMgMzQuOCAyMTUuMi0xNjkuNyAyMTUuMnpNMzU4LjUgMzAwLjRjLTUuNC01NS43LTc4LjUtOTQtMTYzLjQtODUuNy04NC44IDguNi0xNDguOCA2MC4zLTE0My40IDExNnM3OC41IDk0IDE2My40IDg1LjdjODQuOC04LjYgMTQ4LjgtNjAuMyAxNDMuNC0xMTZ6TTM0Ny45IDM1LjFjLTI1LjkgNS42LTE2LjggNDMuNyA4LjMgMzguMyA3Mi4zLTE1LjIgMTM0LjggNTIuOCAxMTEuNyAxMjQtNy40IDI0LjIgMjkuMSAzNyAzNy40IDEyIDMxLjktOTkuOC01NS4xLTE5NS45LTE1Ny40LTE3NC4zem0tNzguNSAzMTFjLTE3LjEgMzguOC02Ni44IDYwLTEwOS4xIDQ2LjMtNDAuOC0xMy4xLTU4LTUzLjQtNDAuMy04OS43IDE3LjctMzUuNCA2My4xLTU1LjQgMTAzLjQtNDUuMSA0MiAxMC44IDYzLjEgNTAuMiA0NiA4OC41em0tODYuMy0zMGMtMTIuOS01LjQtMzAgLjMtMzggMTIuOS04LjMgMTIuOS00LjMgMjggOC42IDM0IDEzLjEgNiAzMC44IC4zIDM5LjEtMTIuOSA4LTEzLjEgMy43LTI4LjMtOS43LTM0em0zMi42LTEzLjRjLTUuMS0xLjctMTEuNCAuNi0xNC4zIDUuNC0yLjkgNS4xLTEuNCAxMC42IDMuNyAxMi45IDUuMSAyIDExLjctLjMgMTQuNi01LjQgMi44LTUuMiAxLjEtMTAuOS00LTEyLjl6Il0KICAgIH07CiAgICBmYVJlYWRtZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFkbWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkNSIsICJNNTI4LjMgNDYuNWwtMTM5LjggMGMtNDguMSAwLTg5LjkgMzMuMy0xMDAuNCA4MC4zLTEwLjYtNDctNTIuMy04MC4zLTEwMC40LTgwLjNMNDggNDYuNUMyMS41IDQ2LjUgMCA2OCAwIDk0LjVMMCAzNDAuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGw4OS43IDBjMTAyLjIgMCAxMzIuNyAyNC40IDE0Ny4zIDc1IC43IDIuOCA1LjIgMi44IDYgMCAxNC43LTUwLjYgNDUuMi03NSAxNDcuMy03NWw4OS43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNDUuN2MwLTI2LjQtMjEuMy00Ny45LTQ3LjctNDguMXpNMjQyIDMxMS45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHpNNTAxLjMgMzExLjhjMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjhjMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOC0uMSAweiJdCiAgICB9OwogICAgZmFHb2xhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29sYW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0MGYiLCAiTTQwMC4xIDE5NC44Yy0xMC45IDIuOC0xOS45IDQuMy0yOS4xIDcuNi03LjMgMS45LTE0LjcgMy45LTIzLjIgNi4xbC0uNiAuMWMtNC4yIDEuMi00LjYgMS4zLTguNS0zLjItNC43LTUuMy04LjEtOC43LTE0LjYtMTEuOS0xOS43LTkuNi0zOC43LTYuOC01Ni40IDQuNy0yMS4yIDEzLjctMzIuMSAzNC0zMS44IDU5LjIgLjMgMjUgMTcuNCA0NS41IDQxLjIgNDguOSAyMiAyLjggMzkuOC00LjYgNTMuOC0yMC41IDIuMS0yLjYgNC01LjMgNi4xLTguMyAuOC0xIDEuNS0yLjEgMi4zLTMuM2wtNjAuMSAwYy02LjUgMC04LjEtNC01LjktOS4zIDQtOS43IDExLjUtMjUuOSAxNS45LTM0IC45LTEuOCAzLjEtNS44IDYuOS01LjhsMTAxLjEgMGM0LjUtMTMuNCAxMS44LTI2LjkgMjEuNi0zOS43IDIyLjctMjkuOSA0OS4zLTQ1LjUgODcuMi01MiAzMS44LTUuNiA2MS43LTIuNSA4OC45IDE1LjkgMjQuNiAxNi44IDM5LjggMzkuNiA0My45IDY5LjUgNS4zIDQyLjEtNi45IDc2LjMtMzYuNyAxMDUuNi0xOS43IDIwLjktNDQuOSAzNC03My45IDM5LjktNS42IDEtMTEuMSAxLjUtMTYuNSAyLTIuOSAuMi01LjcgLjUtOC41IC44LTI4LjMtLjYtNTQuMi04LjctNzYtMjcuNC0xNS4zLTEzLjMtMjUuOS0yOS42LTMxLjEtNDguNS0zLjcgNy4zLTggMTQuNC0xNCAyMS4xLTIxLjYgMjkuNi01MC45IDQ4LTg3LjkgNTIuOS0zMC42IDQuMS01OC45LTEuOC04My45LTIwLjUtMjMtMTcuNS0zNi4xLTQwLjUtMzkuNS02OS4yLTQuMS0zNCA1LjktNjUuNCAyNi40LTkxLjMgMjIuMi0yOSA1MS41LTQ3LjQgODcuMy01My45IDI5LjMtNi4yIDU3LjMtMS45IDgyLjYgMTUuMyAxNi41IDEwLjkgMjguMyAyNS44IDM2LjEgNDMuOSAxLjkgMi44IC42IDQuNC0zLjEgNS4zek00OC4zIDIwMC40Yy0xLjMgMC0xLjYtLjYtLjktMS42bDYuNi04LjRjLjYtLjkgMi4yLTEuNSAzLjQtMS41bDExMS4zIDBjMS4yIDAgMS41IC45IC45IDEuOGwtNS4zIDguMWMtLjYgMS0yLjIgMS45LTMuMSAxLjlsLTExMi44LS4zek0xLjIgMjI5LjFjLTEuMiAwLTEuNi0uNy0uOS0xLjZsNi41LTguNGMuNi0uOSAyLjItMS42IDMuNC0xLjZsMTQyLjEgMGMxLjIgMCAxLjggMSAxLjUgMS45bC0yLjUgNy41Yy0uMyAxLjItMS41IDEuOS0yLjggMS45TDEuMiAyMjkuMXptNzQuNSAyNi44Yy0uNiAuOS0uMyAxLjggLjkgMS44bDY4IC4zYy45IDAgMi4yLS45IDIuMi0yLjFsLjYtNy41YzAtMS4zLS42LTIuMi0xLjktMi4ybC02Mi4zIDBjLTEuMiAwLTIuNSAuOS0zLjEgMS45bC00LjQgNy44em01MDEuNS0xOGMtLjItMi42LS4zLTQuOC0uNy03LTUuNi0zMC44LTM0LTQ4LjMtNjMuNi00MS40LTI5IDYuNS00Ny43IDI0LjktNTQuNSA1NC4yLTUuNiAyNC4zIDYuMiA0OC45IDI4LjYgNTguOSAxNy4yIDcuNSAzNC4zIDYuNiA1MC44LTEuOSAyNC42LTEzLjYgMzgtMzIuNyAzOS42LTU5LjUtLjEtMS4yLS4xLTIuMy0uMi0zLjN6Il0KICAgIH07CiAgICBmYVN0YWNrRXhjaGFuZ2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stZXhjaGFuZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE4ZCIsICJNMTguMSAzMzIuM2w0MTIuNyAwIDAgMjJjMCAzNy43LTI5LjMgNjgtNjUuMyA2OGwtMTkgMC04Ni44IDg5LjcgMC04OS43LTE3Ni4zIDBjLTM2IDAtNjUuMy0zMC4zLTY1LjMtNjhsMC0yMnptMC0yMy42bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6bTAtMTA5LjRsNDEyLjcgMCAwLTg1LTQxMi43IDAgMCA4NXpNMzY1LjQgMEw4My40IDBjLTM2IDAtNjUuMyAzMC4zLTY1LjMgNjcuN2wwIDIyLjMgNDEyLjcgMCAwLTIyLjNDNDMwLjcgMzAuMyA0MDEuNCAwIDM2NS40IDB6Il0KICAgIH07CiAgICBmYUd1bHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3VscCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmM2FlIiwgIk0yMTAgMzkxLjFsLTE0LjEgMjQuNi00LjYgODAuMmMwIDguOS0yOC4zIDE2LjEtNjMuMSAxNi4xcy02My4xLTcuMi02My4xLTE2LjFsLTUuOC03OS40LTE0LjktMjUuNGM0MS4yIDE3LjMgMTI2IDE2LjcgMTY1LjYgMHpNMTQgMTM3LjhMMjcuNiAyNjMuM2M1LjktMjAgMjAuOC00NyA0MC01NS4yIDYuMy0yLjcgMTIuNy0yLjcgMTguNyAuOSA1LjIgMyA5LjYgOS4zIDEwLjEgMTEuOCAxLjIgNi41LTIgOS4xLTQuNSA5LjEtMyAwLTUuMy00LjYtNi44LTcuMy00LjEtNy4zLTEwLjMtNy42LTE2LjktMi44LTYuOSA1LTEyLjkgMTMuNC0xNy4xIDIwLjctNS4xIDguOC05LjQgMTguNS0xMiAyOC4yLTEuNSA1LjYtMi45IDE0LjYtLjYgMTkuOSAxIDIuMiAyLjUgMy42IDQuOSAzLjYgNSAwIDEyLjMtNi42IDE1LjgtMTAuMSA0LjUtNC41IDEwLjMtMTEuNSAxMi41LTE2bDUuMi0xNS41YzIuNi02LjggOS45LTUuNiA5LjkgMCAwIDEwLjItMy43IDEzLjYtMTAgMzQuNy01LjggMTkuNS03LjYgMjUuOC03LjYgMjUuOC0uNyAyLjgtMy40IDcuNS02LjMgNy41LTEuMiAwLTIuMS0uNC0yLjYtMS4yLTEtMS40LS45LTUuMy0uOC02LjMgLjItMy4yIDYuMy0yMi4yIDcuMy0yNS4yLTIgMi4yLTQuMSA0LjQtNi40IDYuNi01LjQgNS4xLTE0LjEgMTEuOC0yMS41IDExLjgtMy40IDAtNS42LS45LTcuNy0yLjRsNy42IDc5LjZjMiA1IDM5LjIgMTcuMSA4OC4yIDE3LjEgNDkuMSAwIDg2LjMtMTIuMiA4OC4yLTE3LjFsMTAuOS05NC42Yy01LjcgNS4yLTEyLjMgMTEuNi0xOS42IDE0LjgtNS40IDIuMy0xNy40IDMuOC0xNy40LTUuNyAwLTUuMiA5LjEtMTQuOCAxNC40LTIxLjUgMS40LTEuNyA0LjctNS45IDQuNy04LjEgMC0yLjktNi0yLjItMTEuNyAyLjUtMy4yIDIuNy02LjIgNi4zLTguNyA5LjctNC4zIDYtNi42IDExLjItOC41IDE1LjUtNi4yIDE0LjItNC4xIDguNi05LjEgMjItNSAxMy4zLTQuMiAxMS44LTUuMiAxNC0uOSAxLjktMi4yIDMuNS00IDQuNS0xLjkgMS00LjUgLjktNi4xLS4zLS45LS42LTEuMy0xLjktMS4zLTMuNyAwLS45IC4xLTEuOCAuMy0yLjcgMS41LTYuMSA3LjgtMTguMSAxNS0zNC4zIDEuNi0zLjcgMS0yLjYgLjgtMi4zLTYuMiA2LTEwLjkgOC45LTE0LjQgMTAuNS01LjggMi42LTEzIDIuNi0xNC41LTQuMS0uMS0uNC0uMS0uOC0uMi0xLjItMTEuOCA5LjItMjQuMyAxMS43LTIwLTguMS00LjYgOC4yLTEyLjYgMTQuOS0yMi40IDE0LjktNC4xIDAtNy4xLTEuNC04LjYtNS4xLTIuMy01LjUgMS4zLTE0LjkgNC42LTIzLjggMS43LTQuNSA0LTkuOSA3LjEtMTYuMiAxLjYtMy40IDQuMi01LjQgNy42LTQuNSAuNiAuMiAxLjEgLjQgMS42IC43IDIuNiAxLjggMS42IDQuNSAuMyA3LjItMy44IDcuNS03LjEgMTMtOS4zIDIwLjgtLjkgMy4zLTIgOSAxLjUgOSAyLjQgMCA0LjctLjggNi45LTIuNCA0LjYtMy40IDguMy04LjUgMTEuMS0xMy41IDItMy42IDQuNC04LjMgNS42LTEyLjMgLjUtMS43IDEuMS0zLjMgMS44LTQuOCAxLjEtMi41IDIuNi01LjEgNS4yLTUuMSAxLjMgMCAyLjQgLjUgMy4yIDEuNSAxLjcgMi4yIDEuMyA0LjUgLjQgNi45LTIgNS42LTQuNyAxMC42LTYuOSAxNi43LTEuMyAzLjUtMi43IDgtMi43IDExLjcgMCAzLjQgMy43IDIuNiA2LjggMS4yIDIuNC0xLjEgNC44LTIuOCA2LjgtNC41IDEuMi00LjkgLjktMy44IDI2LjQtNjguMiAxLjMtMy4zIDMuNy00LjcgNi4xLTQuNyAxLjIgMCAyLjIgLjQgMy4yIDEuMSAxLjcgMS4zIDEuNyA0LjEgMSA2LjItLjcgMS45LS42IDEuMy00LjUgMTAuNS01LjIgMTIuMS04LjYgMjAuOC0xMy4yIDMxLjktMS45IDQuNi03LjcgMTguOS04LjcgMjIuMy0uNiAyLjItMS4zIDUuOCAxIDUuOCA1LjQgMCAxOS4zLTEzLjEgMjMuMS0xNyAuMi0uMyAuNS0uNCAuOS0uNiAuNi0xLjkgMS4yLTMuNyAxLjctNS41IDEuNC0zLjggMi43LTguMiA1LjMtMTEuMyAuOC0xIDEuNy0xLjYgMi43LTEuNiAyLjggMCA0LjIgMS4yIDQuMiA0IDAgMS4xLS43IDUuMS0xLjEgNi4yIDEuNC0xLjUgMi45LTMgNC41LTQuNSAxNS0xMy45IDI1LjctNi44IDI1LjcgLjIgMCA3LjQtOC45IDE3LjctMTMuOCAyMy40LTEuNiAxLjktNC45IDUuNC01IDYuNCAwIDEuMyAuOSAxLjggMi4yIDEuOCAyIDAgNi40LTMuNSA4LTQuNyA1LTMuOSAxMS44LTkuOSAxNi42LTE0LjFsMTQuOC0xMzYuOGMtMzAuNSAxNy4xLTE5Ny42IDE3LjItMjI4LjMgLjJ6bTIyOS43LTguNWMwIDIxLTIzMS4yIDIxLTIzMS4yIDAgMC04LjggNTEuOC0xNS45IDExNS42LTE1LjkgOSAwIDE3LjggLjEgMjYuMyAuNEwxNjcgNjUuMSAyMjguMyAuNmMxLjQtMS40IDUuOC0uMiA5LjkgMy41czYuNiA3LjkgNS4zIDkuM2wtLjEgLjEtNTcuMyA2MC41LTEwIDQwLjdjMzkuOSAyLjYgNjcuNiA4LjEgNjcuNiAxNC42em0tNjkuNCA0LjZjMC0uOC0uOS0xLjUtMi41LTIuMWwtLjIgLjhjMCAxLjMtNSAyLjQtMTEuMSAyLjRzLTExLjEtMS4xLTExLjEtMi40YzAtLjEgMC0uMiAuMS0uM2wuMi0uN2MtMS44IC42LTMgMS40LTMgMi4zIDAgMi4xIDYuMiAzLjcgMTMuNyAzLjcgNy43IC4xIDEzLjktMS42IDEzLjktMy43eiJdCiAgICB9OwogICAgZmFZZWxwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInllbHAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFlOSIsICJNNDIuOSAyNDAuM2w5OS42IDQ4LjZjMTkuMiA5LjQgMTYuMiAzNy41LTQuNSA0Mi43TDMwLjUgMzU4LjVjLTMuMiAuOC02LjQgLjktOS42IC4zcy02LjItMS44LTguOS0zLjctNC45LTQuMy02LjYtNy4xLTIuNy01LjktMy4xLTkuMmMtMy4zLTI4LjgtLjItNTcuOSA5LTg1LjMgMS0zLjEgMi43LTUuOSA0LjktOC4zczQuOS00LjIgNy45LTUuNSA2LjItMS44IDkuNS0xLjggNi40IC45IDkuMyAyLjN6bTQ0IDIzOS4zYzIzLjggMTYuMyA1MC45IDI3LjMgNzkuNCAzMi4xIDMuMiAuNiA2LjUgLjQgOS42LS40czYuMS0yLjMgOC42LTQuNCA0LjYtNC42IDYtNy41IDIuMy02LjEgMi40LTkuNGwzLjktMTEwLjhjLjctMjEuMy0yNS41LTMxLjktMzkuOC0xNi4xTDgyLjggNDQ1LjVjLTIuMiAyLjQtMy44IDUuMy00LjggOC40cy0xLjMgNi40LS45IDkuNiAxLjUgNi4zIDMuMSA5LjEgMy45IDUuMiA2LjYgN2wwIDB6TTIzMi4yIDM2OS43bDU4LjggOTRjMS43IDIuOCA0IDUuMSA2LjggNi45czUuOCAzIDkgMy41IDYuNSAuMyA5LjctLjUgNi4xLTIuNCA4LjYtNC40YzIyLjMtMTguNCA0MC4zLTQxLjUgNTIuNy02Ny42IDEuNC0yLjkgMi4xLTYuMSAyLjItOS40cy0uNi02LjUtMS45LTkuNC0zLjItNS43LTUuNi03LjgtNS4yLTMuOS04LjMtNC45TDI1OC43IDMzNS43Yy0yMC4zLTYuNS0zNy44IDE1LjgtMjYuNSAzMy45ek0zODAuNiAyMzcuNGMtMTEuNS0yNi41LTI4LjctNTAuMi01MC40LTY5LjMtMi40LTIuMS01LjMtMy43LTguNC00LjdzLTYuNC0xLjItOS42LS44LTYuMyAxLjUtOS4xIDMuMi01LjEgNC02LjkgNi43bC02MiA5MS45Yy0xMS45IDE3LjcgNC43IDQwLjYgMjUuMiAzNC43TDM2NiAyNjguNmMzLjEtLjkgNi0yLjUgOC41LTQuNnM0LjUtNC43IDUuOC03LjcgMi4xLTYuMiAyLjItOS40LS42LTYuNS0xLjktOS41bDAgMHpNNjIuMSAzMC4yYy0yLjggMS40LTUuNCAzLjMtNy40IDUuN3MtMy42IDUuMi00LjUgOC4yLTEuMiA2LjItLjkgOS4zIDEuMyA2LjEgMi45IDguOUwxNTYuMyAyNDIuNmMxMS43IDIwLjIgNDIuNiAxMS45IDQyLjYtMTEuNGwwLTIwOC4zYzAtMy4xLS42LTYuMy0xLjgtOS4ycy0zLjEtNS41LTUuNC03LjYtNS0zLjgtOC00LjgtNi4xLTEuNC05LjMtMS4yYy0zOSAzLjEtNzcgMTMuMy0xMTIuMyAzMC4xeiJdCiAgICB9OwogICAgZmFHb2ZvcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29mb3JlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTciLCAiTTM0OCAzMTkuOGwtMTMuMiAwIDAgMzQuN2MtMjQuNSAyMy4xLTU2LjMgMzUuOC04OS45IDM1LjgtNzMuMiAwLTEzMi40LTYwLjItMTMyLjQtMTM0LjQgMC03NC4xIDU5LjItMTM0LjQgMTMyLjQtMTM0LjQgMzUuMyAwIDY4LjYgMTQgOTMuNiAzOS40bDYyLjMtNjMuM2MtNDEuOC00Mi4zLTk3LjEtNjUuNi0xNTYuMS02NS42LTEyMi43IDAtMjIwLjcgMTAwLjYtMjIwLjcgMjI0IDAgMTIyLjUgOTcgMjI0IDIyMC43IDIyNCA2My4yIDAgMTI0LjUtMjYuMiAxNzEtODIuNS0yLTI3LjYtMTMuNC03Ny43LTY3LjctNzcuN3pNMzM1LjkgMjA3LjNsLTEwNi4zIDAgMCA4OSAxMTguNCAwYzMzLjUgMCA2MC41IDE1LjEgNzYgNDEuOGwwLTMwLjZjMC02NS4yLTQwLjQtMTAwLjItODguMS0xMDAuMnoiXQogICAgfTsKICAgIGZhQXZpYXRvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF2aWF0byIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDIxIiwgIk0xMDcuMiAyODMuNWwtMTktNDEuOC01Mi4xIDAtMTkgNDEuOC0xNy4xIDAgNjIuMi0xMzEuNCA2Mi4yIDEzMS40LTE3LjIgMHptLTQ1LTk4LjFsLTE5LjYgNDIuNSAzOS4yIDAtMTkuNi00Mi41ek0xNzQuOSAyODcuOGwtNjIuMi0xMzEuNCAxNy4xIDAgNDUuMSA5NiA0NS4xLTk2IDE3IDAtNjIuMSAxMzEuNHptODAuNi00LjNsMC0xMjcuMSAxNS41IDAgMCAxMjcuMS0xNS41IDB6TTQ2NC42IDE2Ny45bDAgMTE1LjYtMTcuMyAwIDAtMTE1LjYtNDEuMiAwIDAtMTEuNSA5OS42IDAgMCAxMS41LTQxLjEgMHpNNjQwIDIxOC44YzAgOS4yLTEuNyAxNy44LTUuMSAyNS44cy04LjIgMTUuMS0xNC4yIDIxLjEtMTMuMSAxMC44LTIxLjEgMTQuMi0xNi42IDUuMS0yNS44IDUuMS0xNy44LTEuNy0yNS44LTUuMS0xNS4xLTguMi0yMS4xLTE0LjItMTAuOC0xMy0xNC4yLTIxLjFjLTMuNC04LTUuMS0xNi42LTUuMS0yNS44czEuNy0xNy44IDUuMS0yNS44IDguMi0xNS4xIDE0LjItMjEuMSAxMy04LjQgMjEuMS0xMS45YzgtMy40IDE2LjYtNS4xIDI1LjgtNS4xczE3LjggMS43IDI1LjggNS4xIDE1LjEgNS44IDIxLjEgMTEuOWM2IDYgMTAuNyAxMy4xIDE0LjIgMjEuMSAzLjQgOCA1LjEgMTYuNiA1LjEgMjUuOHptLTE1LjUgMGMwLTcuMy0xLjMtMTQtMy45LTIwLjNzLTYuMi0xMS43LTEwLjgtMTYuMy0xMC04LjItMTYuMi0xMC45LTEyLjgtNC0xOS44LTQtMTMuNiAxLjMtMTkuOCA0LTExLjYgNi4zLTE2LjIgMTAuOS04LjIgMTAtMTAuOCAxNi4zLTMuOSAxMy4xLTMuOSAyMC4zYzAgNy4zIDEuMyAxNCAzLjkgMjAuM3M2LjIgMTEuNyAxMC44IDE2LjMgMTAgOC4yIDE2LjIgMTAuOSAxMi44IDQgMTkuOCA0IDEzLjYtMS4zIDE5LjgtNCAxMS42LTYuMyAxNi4yLTEwLjkgOC4yLTEwIDEwLjgtMTYuMyAzLjktMTMuMSAzLjktMjAuM3ptLTk0LjggOTYuN2wwLTYuMyA4OC45LTEwLTI0Mi45IDEzLjRjLjYtMi4yIDEuMS00LjYgMS40LTcuMiAuMy0yIC41LTQuMiAuNi02LjVsNjQuOC04LjEtNjQuOSAxLjljMC0uNC0uMS0uNy0uMS0xLjEtMi44LTE3LjItMjUuNS0yMy43LTI1LjUtMjMuN2wtMS4xLTI2LjMgMjMuOCAwIDE5IDQxLjggMTcuMSAwLTYyLjItMTMxLjQtNjIuMiAxMzEuNCAxNy4xIDAgMTktNDEuOCAyMy42IDAtMS4xIDI2LjRzLTIyLjcgNi41LTI1LjUgMjMuN2MtLjEgLjMtLjEgLjctLjEgMS4xbC02NC45LTEuOSA2NC44IDguMWMuMSAyLjMgLjMgNC40IC42IDYuNSAuMyAyLjYgLjggNSAxLjQgNy4ybC0yNDIuOS0xMy41IDg4LjkgMTAgMCA2LjNjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjMC02LjItNC42LTExLjMtMTAuNS0xMi4ybDAtNS44IDgwLjMgOSAwIDUuNGMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTQuOSAyOC40IDMuMiAwIDIzLjctNS45IDAgMCAxMy45IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy4yIDM4LjMgNC4zYzguMSAxMS40IDE5IDEzLjYgMTkgMTMuNmwtLjEgNi43LTUuMSAuMi0uMSAxMi4xIDQuMSAwIC4xLTUgNS4yIDAgLjEgNSA0LjEgMC0uMS0xMi4xLTUuMS0uMi0uMS02LjdzMTAuOS0yLjEgMTktMTMuNmwzOC4zLTQuMyAwIDIzLjItNS45IDAgMCAxMy44IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy43IDI4LjQtMy4yIDAgNC45Yy01LjcgMS4xLTkuOSA2LjItOS45IDEyLjEgMCA2LjggNS42IDEwLjIgMTIuNCAxMC4yczEyLjQtMy40IDEyLjQtMTAuMmMwLTYtNC4zLTExLTkuOS0xMi4xbDAtNS40IDgwLjMtOSAwIDUuOGMtNS45IC45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40czEyLjQtNS42IDEyLjQtMTIuNGMtLjItNi4zLTQuNy0xMS40LTEwLjctMTIuM3pNMzI4LjkgMjI3LjlsMTkuNi00Mi41IDE5LjYgNDIuNS0xNy45IDAtMS43LTQwLjMtMS43IDQwLjMtMTcuOSAweiJdCiAgICB9OwogICAgZmFQYWRsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFkbGV0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YTAiLCAiTTI5Ny45IDBsLjEgMGM3LjYgLjEgMTQuNCA0LjcgMTcuNSAxMS44bDEzMiAzMDguNSAuMy0uMSAuMiAuNC0yLjggMTAtNDIuOSAxNThjLTMuNyAxNi4yLTE5LjcgMjYuMy0zNS44IDIyLjZsLTY4LjQtMTUuNi02OC41IDE1LjZjLTE2LjEgMy43LTMyLjEtNi40LTM1LjgtMjIuNmwtNDIuOS0xNTgtMi43LTEwIC4xLS40IDEzMi4xLTMwOC40YzMtNyA5LjktMTEuNiAxNy41LTExLjh6TTE2MC4xIDMyMi4xbDEzMSAzOS4xIDYuOSAxMjIuNSA3LjktMTIxLjUgMTMwLjYtMzkuMyAuMi0uMS0xMzEgMjUuMS04LjYtMzIwLjItNS4yIDMyMC4yLTEzMS44LTI1Ljh6TTQyNiAyMjIuNmw5NC40LTQxIDczLjggMC0xNTcgMjQ3LjYgMzEuNi0xMDktNDIuOC05Ny42em0xNzEuNS00MS4ybDQxLjQgNzYuMmM0IDcuNS0zLjkgMTUuOS0xMS42IDEyLjJsLTQ3LjYtMjIuNyAxNy44LTY1Ljd6TTEyNy4zIDMxOC41TDE1OC43IDQzMCAxLjYgMTU0LjVjLTUuOS0xMC40IDUuNS0yMiAxNS45LTE2LjJsMTUxLjggODQuMi00Mi4xIDk2eiJdCiAgICB9OwogICAgZmFFZGdlTGVnYWN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVkZ2UtbGVnYWN5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNzgiLCAiTS02IDIyOC4ybC40LS41YzAgLjIgMCAuMy0uMSAuNWwtLjMgMHptNDYwLjYgMTUuNWMwLTQ0LTcuOC04NC41LTI4LjgtMTIyLjQtNDEtNzMuNC0xMTMuNi0xMTMuMy0xOTguNi0xMTMuMy0xMzkuOS0uMy0yMTguMyAxMDUuMi0yMzIuOCAyMTkuNyA0Mi40LTYxLjMgMTE3LjEtMTIxLjQgMjIwLjQtMTI1IDAgMCAxMDkuNyAwIDk5LjQgMTA1bC0xNzUuOCAwYzYuNC0zNy40IDE4LjUtNTkgMzQuMy03OC45LTc1IDM0LjktMTIxLjggOTYuMS0xMjAuOCAxODguMyAuOCA3MS41IDUwLjEgMTQ0LjggMTIwLjggMTcyIDgzLjQgMzEuOCAxOTIuOCA3LjIgMjQwLjEtMjEuM2wwLTEwNC40Yy04MC45IDU2LjUtMjcwLjkgNjAuOS0yNzIuMy02Ny42bDMxNC4xIDAgMC01Mi4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVMYXN0Zm0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxhc3RmbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJsYXN0Zm0tc3F1YXJlIl0sICJmMjAzIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEwLjcgMjgwLjhjLTEuOC01LjUtMy40LTEwLjgtNS0xNS45LTEyLjktNDEuOS0yMS02OC40LTU4LTY4LjQtMjIuNCAwLTQ1LjEgMTYuMS00NS4xIDYxLjIgMCAzNS4yIDE4IDU3LjIgNDMuMyA1Ny4yIDI4LjYgMCA0Ny42LTIxLjMgNDcuNi0yMS4zbDExLjcgMzEuOXMtMTkuOCAxOS40LTYxLjIgMTkuNGMtNTEuMyAwLTc5LjktMzAuMS03OS45LTg1LjggMC01Ny45IDI4LjYtOTIgODIuNS05MiA2Ny45IDAgNzkuMyAzNS4zIDk2LjQgODguNCAxLjQgNC40IDIuOSA4LjkgNC40IDEzLjUgOC44IDI2LjggMjQuMiA0Ni4yIDYxLjIgNDYuMiAyNC45IDAgMzguMS01LjUgMzguMS0xOS4xIDAtMTcuNS0xNi45LTIxLjItNDAtMjYuNC0zLjItLjctNi41LTEuNC05LjktMi4yLTMwLjQtNy4zLTQyLjUtMjMuMS00Mi41LTQ4IDAtNDAgMzIuMy01Mi40IDY1LjItNTIuNCAzNy40IDAgNjAuMSAxMy42IDYzIDQ2LjZsLTM2LjcgNC40Yy0xLjUtMTUuOC0xMS0yMi40LTI4LjYtMjIuNC0xNi4xIDAtMjYgNy4zLTI2IDE5LjggMCAxMSA0LjggMTcuNiAyMC45IDIxLjMgMi4yIC41IDQuNSAxIDYuNyAxLjQgMzEuMSA2LjUgNjUuMSAxMy43IDY1LjEgNTYuMSAuMSAzNi43LTMwLjcgNTAuNi03Ni4xIDUwLjYtNjMuNCAwLTg1LjQtMjguNi05Ny4xLTY0LjF6Il0KICAgIH07CiAgICBmYUxhc3RmbVNxdWFyZSA9IGZhU3F1YXJlTGFzdGZtOwogICAgZmFHb29kcmVhZHNHID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcy1nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzYTkiLCAiTTEwLjggNDAzLjNsMi44IDBjMTIuNyAwIDI1LjUgMCAzOC4yIC4xIDEuNiAwIDMuMS0uNCAzLjYgMi4xIDcuMSAzNC45IDMwIDU0LjYgNjIuOSA2My45IDI2LjkgNy42IDU0LjEgNy44IDgxLjMgMS44IDMzLjgtNy40IDU2LTI4LjMgNjgtNjAuNCA4LTIxLjUgMTAuNy00My44IDExLTY2LjUgLjEtNS44IC4zLTQ3LS4yLTUyLjhsLS45LS4zYy0uOCAxLjUtMS43IDIuOS0yLjUgNC40LTIyLjEgNDMuMS02MS4zIDY3LjQtMTA1LjQgNjkuMS0xMDMgNC0xNjkuNC01Ny0xNzItMTc2LjItLjUtMjMuNyAxLjgtNDYuOSA4LjMtNjkuNyAyMC42LTcxLjEgNzQuNi0xMTguMiAxNTMuOS0xMTguOCA2MS4zLS40IDEwMS41IDM4LjcgMTE2LjIgNzAuMyAuNSAxLjEgMS4zIDIuMyAyLjQgMS45bDAtNjEuNiA0NC4zIDBjMCAyODAuMyAuMSAzMzIuMiAuMSAzMzIuMi0uMSA3OC41LTI2LjcgMTQzLjctMTAzIDE2Mi4yLTY5LjUgMTYuOS0xNTkgNC44LTE5Ni01Ny4yLTgtMTMuNS0xMS44LTI4LjMtMTMtNDQuNXpNMTU3LjEgMzYuNWMtNTIuNS0uNS0xMDguNSA0MC43LTExNSAxMzMuOC00LjEgNTkgMTQuOCAxMjIuMiA3MS41IDE0OC42IDI3LjYgMTIuOSA3NC4zIDE1IDEwOC4zLTguNyA0Ny42LTMzLjIgNjIuNy05NyA1NC44LTE1NC05LjctNzEuMS00Ny44LTEyMC0xMTkuNi0xMTkuN3oiXQogICAgfTsKICAgIGZhQ2NNYXN0ZXJjYXJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLW1hc3RlcmNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMSIsICJNNDgyLjkgNDEwLjNjMCA2LjgtNC42IDExLjctMTEuMiAxMS43LTYuOCAwLTExLjItNS4yLTExLjItMTEuN3M0LjQtMTEuNyAxMS4yLTExLjdjNi42IDAgMTEuMiA1LjIgMTEuMiAxMS43ek0xNzIuMSAzOTguNmMtNy4xIDAtMTEuMiA1LjItMTEuMiAxMS43UzE2NSA0MjIgMTcyLjEgNDIyYzYuNSAwIDEwLjktNC45IDEwLjktMTEuNy0uMS02LjUtNC40LTExLjctMTAuOS0xMS43em0xMTcuNS0uM2MtNS40IDAtOC43IDMuNS05LjUgOC43bDE5LjEgMGMtLjktNS43LTQuNC04LjctOS42LTguN3ptMTA3LjggLjNjLTYuOCAwLTEwLjkgNS4yLTEwLjkgMTEuN3M0LjEgMTEuNyAxMC45IDExLjcgMTEuMi00LjkgMTEuMi0xMS43YzAtNi41LTQuNC0xMS43LTExLjItMTEuN3ptMTA1LjkgMjYuMWMwIC4zIC4zIC41IC4zIDEuMSAwIC4zLS4zIC41LS4zIDEuMS0uMyAuMy0uMyAuNS0uNSAuOC0uMyAuMy0uNSAuNS0xLjEgLjUtLjMgLjMtLjUgLjMtMS4xIC4zLS4zIDAtLjUgMC0xLjEtLjMtLjMgMC0uNS0uMy0uOC0uNS0uMy0uMy0uNS0uNS0uNS0uOC0uMy0uNS0uMy0uOC0uMy0xLjEgMC0uNSAwLS44IC4zLTEuMSAwLS41IC4zLS44IC41LTEuMSAuMy0uMyAuNS0uMyAuOC0uNSAuNS0uMyAuOC0uMyAxLjEtLjMgLjUgMCAuOCAwIDEuMSAuMyAuNSAuMyAuOCAuMyAxLjEgLjVzLjIgLjYgLjUgMS4xem0tMi4yIDEuNGMuNSAwIC41LS4zIC44LS4zIC4zLS4zIC4zLS41IC4zLS44czAtLjUtLjMtLjhjLS4zIDAtLjUtLjMtMS4xLS4zbC0xLjYgMCAwIDMuNSAuOCAwIDAtMS40IC4zIDAgMS4xIDEuNCAuOCAwLTEuMS0xLjN6TTU3NiA4MWwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODFjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODFDMCA1NC41IDIxLjUgMzMgNDggMzNsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTY0IDIyMC42YzAgNzYuNSA2Mi4xIDEzOC41IDEzOC41IDEzOC41IDI3LjIgMCA1My45LTguMiA3Ni41LTIzLjEtNzIuOS01OS4zLTcyLjQtMTcxLjIgMC0yMzAuNS0yMi42LTE1LTQ5LjMtMjMuMS03Ni41LTIzLjEtNzYuNC0uMS0xMzguNSA2Mi0xMzguNSAxMzguMnpNMjg4IDMyOS40YzcwLjUtNTUgNzAuMi0xNjIuMiAwLTIxNy41LTcwLjIgNTUuMy03MC41IDE2Mi42IDAgMjE3LjV6TTE0NS43IDQwNS43YzAtOC43LTUuNy0xNC40LTE0LjctMTQuNy00LjYgMC05LjUgMS40LTEyLjggNi41LTIuNC00LjEtNi41LTYuNS0xMi4yLTYuNS0zLjggMC03LjYgMS40LTEwLjYgNS40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMGMwLTE4LjktMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAuMiA4LjIgMzAuMmw3LjkgMGMwLTE4LjMtMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAgOC4yIDMwLjJsOC4yIDAgMC0yMy0uMiAwek0xOTAuNiAzOTJsLTcuOSAwIDAgNC40Yy0yLjctMy4zLTYuNS01LjQtMTEuNy01LjQtMTAuMyAwLTE4LjIgOC4yLTE4LjIgMTkuMyAwIDExLjIgNy45IDE5LjMgMTguMiAxOS4zIDUuMiAwIDktMS45IDExLjctNS40bDAgNC42IDcuOSAwIDAtMzYuOHptNDAuNSAyNS42YzAtMTUtMjIuOS04LjItMjIuOS0xNS4yIDAtNS43IDExLjktNC44IDE4LjUtMS4xbDMuMy02LjVjLTkuNC02LjEtMzAuMi02LTMwLjIgOC4yIDAgMTQuMyAyMi45IDguMyAyMi45IDE1IDAgNi4zLTEzLjUgNS44LTIwLjcgLjhsLTMuNSA2LjNjMTEuMiA3LjYgMzIuNiA2IDMyLjYtNy41em0zNS40IDkuM2wtMi4yLTYuOGMtMy44IDIuMS0xMi4yIDQuNC0xMi4yLTQuMWwwLTE2LjYgMTMuMSAwIDAtNy40LTEzLjEgMCAwLTExLjItOC4yIDAgMCAxMS4yLTcuNiAwIDAgNy4zIDcuNiAwIDAgMTYuN2MwIDE3LjYgMTcuMyAxNC40IDIyLjYgMTAuOXptMTMuMy0xMy40bDI3LjUgMGMwLTE2LjItNy40LTIyLjYtMTcuNC0yMi42LTEwLjYgMC0xOC4yIDcuOS0xOC4yIDE5LjMgMCAyMC41IDIyLjYgMjMuOSAzMy44IDE0LjJsLTMuOC02Yy03LjggNi40LTE5LjYgNS44LTIxLjktNC45ek0zMzguOSAzOTJjLTQuNi0yLTExLjYtMS44LTE1LjIgNC40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMCAwLTIwLjdjMC0xMS42IDkuNS0xMC4xIDEyLjgtOC40bDIuNC03LjZ6bTEwLjYgMTguM2MwLTExLjQgMTEuNi0xNS4xIDIwLjctOC40bDMuOC02LjVjLTExLjYtOS4xLTMyLjctNC4xLTMyLjcgMTUgMCAxOS44IDIyLjQgMjMuOCAzMi43IDE1bC0zLjgtNi41Yy05LjIgNi41LTIwLjcgMi42LTIwLjctOC42ek00MTYuMiAzOTJsLTguMiAwIDAgNC40Yy04LjMtMTEtMjkuOS00LjgtMjkuOSAxMy45IDAgMTkuMiAyMi40IDI0LjcgMjkuOSAxMy45bDAgNC42IDguMiAwIDAtMzYuOHptMzMuNyAwYy0yLjQtMS4yLTExLTIuOS0xNS4yIDQuNGwwLTQuNC03LjkgMCAwIDM2LjcgNy45IDAgMC0yMC43YzAtMTEgOS0xMC4zIDEyLjgtOC40bDIuNC03LjZ6bTQwLjMtMTQuOWwtNy45IDAgMCAxOS4zYy04LjItMTAuOS0yOS45LTUuMS0yOS45IDEzLjkgMCAxOS40IDIyLjUgMjQuNiAyOS45IDEzLjlsMCA0LjYgNy45IDAgMC01MS43em03LjYtNzUuMWwwIDQuNiAuOCAwIDAtNC42IDEuOSAwIDAtLjgtNC42IDAgMCAuOCAxLjkgMHptNi42IDEyMy44YzAtLjUgMC0xLjEtLjMtMS42LS4zLS4zLS41LS44LS44LTEuMXMtLjgtLjUtMS4xLS44Yy0uNSAwLTEuMS0uMy0xLjYtLjMtLjMgMC0uOCAuMy0xLjQgLjMtLjUgLjMtLjggLjUtMS4xIC44LS41IC4zLS44IC44LS44IDEuMS0uMyAuNS0uMyAxLjEtLjMgMS42IDAgLjMgMCAuOCAuMyAxLjQgMCAuMyAuMyAuOCAuOCAxLjEgLjMgLjMgLjUgLjUgMS4xIC44IC41IC4zIDEuMSAuMyAxLjQgLjMgLjUgMCAxLjEgMCAxLjYtLjMgLjMtLjMgLjgtLjUgMS4xLS44cy41LS44IC44LTEuMWMuMy0uNiAuMy0xLjEgLjMtMS40em0zLjItMTI0LjdsLTEuNCAwLTEuNiAzLjUtMS42LTMuNS0xLjQgMCAwIDUuNCAuOCAwIDAtNC4xIDEuNiAzLjUgMS4xIDAgMS40LTMuNSAwIDQuMSAxLjEgMCAwLTUuNHptNC40LTgwLjVjMC03Ni4yLTYyLjEtMTM4LjMtMTM4LjUtMTM4LjMtMjcuMiAwLTUzLjkgOC4yLTc2LjUgMjMuMSA3Mi4xIDU5LjMgNzMuMiAxNzEuNSAwIDIzMC41IDIyLjYgMTUgNDkuNSAyMy4xIDc2LjUgMjMuMSA3Ni40IC4xIDEzOC41LTYxLjkgMTM4LjUtMTM4LjR6Il0KICAgIH07CiAgICBmYURpc2NvdXJzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNjb3Vyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5MyIsICJNMjI1LjkgMzJDMTAzLjMgMzIgMCAxMzAuNSAwIDI1Mi4xIDAgMjU2IC4xIDQ4MCAuMSA0ODBsMjI1LjgtLjJDMzQ4LjYgNDc5LjggNDQ4IDM3Ny41IDQ0OCAyNTUuOVMzNDguNiAzMiAyMjUuOSAzMnpNMjI0IDM4NGMtMTkuNCAwLTM3LjktNC4zLTU0LjQtMTIuMUw4OC41IDM5MiAxMTEuNCAzMTdjLTkuOC0xOC4xLTE1LjQtMzguOS0xNS40LTYxIDAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjgtNTcuMyAxMjgtMTI4IDEyOHoiXQogICAgfTsKICAgIGZhQmxhY2tUaWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxhY2stdGllIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2UiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTMxNi41IDM1Ny4ybC05Mi41IDg4LjctOTIuNS04OC43IDY0LjUtMTg0LTY0LjUtODYuNiAxODQuOSAwLTY0LjQgODYuNiA2NC41IDE4NHoiXQogICAgfTsKICAgIGZhU3F1YXJlRmFjZWJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZhY2Vib29rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZhY2Vib29rLXNxdWFyZSJdLCAiZjA4MiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5OC4yIDAgMC0xNDUuOC01Mi44IDAgMC03OC4yIDUyLjggMCAwLTMzLjdjMC04Ny4xIDM5LjQtMTI3LjUgMTI1LTEyNy41IDE2LjIgMCA0NC4yIDMuMiA1NS43IDYuNGwwIDcwLjhjLTYtLjYtMTYuNS0xLTI5LjYtMS00MiAwLTU4LjIgMTUuOS01OC4yIDU3LjJsMCAyNy44IDgzLjYgMC0xNC40IDc4LjItNjkuMyAwIDAgMTQ1LjggMTI5IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rU3F1YXJlID0gZmFTcXVhcmVGYWNlYm9vazsKICAgIGZhQmF0dGxlTmV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJhdHRsZS1uZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzNSIsICJNNDQ4LjggMjI1LjZjMjYuOSAuMiAzNS42LTcuNCAzOC45LTEyLjQgMTIuNS0xNi4zLTcuMS00Ny42LTUyLjgtNzEuMyAxNy44LTMzLjYgMzAuMS02My43IDM2LjMtODUuMyAzLjQtMTEuOCAxLjEtMTkgLjUtMjAuMy0xLjcgMTAuNS0xNS44IDQ4LjUtNDguMiAxMDAtMjUtMTEuMi01Ni41LTIwLjEtOTMuOC0yMy44LTguOS0xNi45LTM0LjktNjMuOS02MC41LTg4LjktMTYuOC0xNi41LTMwLjMtMjIuNi00MC44LTIzLjVsMCAwYy0xMy44LTEuNi0yMi43IDUuOC0yNy40IDExLTE3LjIgMTguNS0yNC4zIDQ4LjktMjUgODQuMS03LjItMTIuMy0xNy4yLTI0LjYtMjguNS0yNS45bC0uMiAwYy0yMC43LTMuNS0zOC40IDI5LjItMzYgODEuMy0zOC40IDEuNC03MSA1LjgtOTMgMTEuMi05LjkgMi40LTE2LjIgNy4zLTE3LjggOS43IDEtLjQgMjIuNC05LjIgMTExLjYtOS4yIDUuMiA1MyAyOS44IDEwMS44IDI2IDkzLjItOS43IDE1LjQtMzguMiA2Mi40LTQ3LjMgOTcuNy01LjkgMjIuOS00LjQgMzcuNiAuMiA0Ny4xIDUuNiAxMi44IDE2LjQgMTYuNyAyMy4yIDE4LjMgMjUgNS43IDU1LjQtMy42IDg2LjctMjEuMS03LjUgMTIuOC0xMy45IDI4LjUtOS4xIDM5LjMgNy4zIDE5LjYgNDQuNSAxOC43IDg4LjQtOS40IDIwLjIgMzIuMiA0MC4xIDU3LjkgNTUuNyA3NC4xIDIuNiAyLjggNS41IDUuMiA4LjggNy4xIDUuMSAzLjIgOC42IDMuNCA4LjYgMy40LTguMi02LjctMzQtMzgtNjIuNS05MS44IDIyLjItMTYgNDUuNy0zOC45IDY3LjUtNjkuMyAxMjIuOCA0LjYgMTQzLjMtMjQuOCAxNDgtMzEuNiAxNC43LTE5LjkgMy40LTU3LjQtNTcuMy05My43ek0zNzEgMzMxLjhjMjMuOC0zNy43IDMwLjMtNjcuOCAyOS40LTkyLjMgMjcuOSAxNy42IDQ3LjIgMzcuNiA0OS4xIDU4LjggMS4xIDEyLjktOC4xIDI5LjEtNzguNSAzMy41ek0yMTcuMSAzODcuN2M5LjgtNi4yIDE5LjUtMTMuMSAyOS4yLTIwLjUgNi43IDEzLjMgMTMuNiAyNi4xIDIwLjYgMzguMi00MC42IDIxLjktNjguOCAxMi44LTQ5LjgtMTcuN3ptMjE1LTE3MS4zYy0xMC4zLTUuMy0yMS4yLTEwLjMtMzIuNC0xNSA3LjktMTIuMSAxNS41LTI0LjQgMjIuNy0zNi45IDM5LjEgMjQuMSA0NS45IDUzLjIgOS42IDUxLjl6TTI3OS40IDM5OGMtNS41LTExLjQtMTEtMjMuNS0xNi41LTM2LjQgNDMuMiAxLjMgNjIuNC0xOC43IDYzLjMtMjAuNCAwIC4xLTI1IDE1LjYtNjIuNSAxMi4yIDMwLjYtMjUuNiA1OS4xLTUzLjcgODUuMS04NCA4LjctMTAuMiAxNy0yMC42IDI0LjktMzEuMS0uNC0uMy0xLjUtMy0xNi41LTEyLTUxLjcgNjAuMy0xMDIuMyA5OC0xMzIuOCAxMTUuOS0yMC42LTExLjItNDAuOC0zMS44LTU1LjctNjEuNS0yMC0zOS45LTMwLTgyLjQtMzEuNi0xMTYuMSAxMi4zIC45IDI1LjMgMi4yIDM4LjggMy45LTIyLjMgMzYuOC0xNC40IDYzLTEzLjUgNjQuMiAwLS4xLTEtMjkuMiAyMC4xLTU5LjYgOSA1Mi41IDI0IDEwMy44IDQ0LjcgMTUyLjggLjktLjQgMS44IC45IDE4LjctOC4yLTI2LjMtNzQuNS0zMy44LTEzOC4yLTM0LTE3My40IDIwLTEyLjQgNDguMi0xOS44IDgxLjYtMTcuOCA0NC42IDIuNyA4Ni40IDE1LjIgMTE2LjMgMzAuNy03LjEgMTAuNC0xNC45IDIxLjMtMjMuMyAzMi41LTIwLjctMzcuNy00Ny4zLTQzLjktNDguOS00My43IC4xIDAgMjUuOSAxNC4xIDQxLjUgNDcuMi0zNy41LTEzLjgtNzYuMS0yNC40LTExNS4zLTMxLjctMTMuMS0yLjQtMjYuMi00LjQtMzkuNC02LS4xIC40LTEuOCAxLjgtMi4yIDIwLjMgNzcuOSAxNC41IDEzNi42IDM5LjkgMTY3LjIgNTcuMiAuNyAyMy42LTcgNTEuNi0yNS40IDc5LjYtMjQuNiAzNy4zLTU2LjQgNjcuMi04NC44IDg1LjR6bTI3LjQtMjg3Yy00NC42LTEuNy03My42IDcuNC05NC43IDIwLjcgMi01Mi4zIDIxLjMtNzYuNCAzOC4yLTc1LjMgMTYuOS00LjIgNTQuOSA1Mi4yIDU2LjUgNTQuNnptLTEzMC43IDMuMWMuNSAxMi4xIDEuNiAyNC42IDMuMiAzNy4zLTE0LjYtLjktMjguNy0xLjMtNDIuNC0xLjMtLjEgMy4yLS4xLTUxIDI0LjctNDkuNmwuMSAwYzUuOCAxLjEgMTAuNiA2LjkgMTQuNCAxMy42em0tMjguMSAxNjJjMjAuOCAzOS43IDQzLjMgNjAuNiA2NS4zIDcyLjMtNDYuOCAyNC44LTc3LjUgMjAtODQuOSA0LjUtLjItLjItMTEuMS0xNS4zIDE5LjctNzYuOGwwIDB6Il0KICAgIH07CiAgICBmYUJpbW9iamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaW1vYmplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3OCIsICJNNDE2IDMyTDMyIDMyQzE0LjQgMzIgMCA0Ni40IDAgNjRMMCA0NDhjMCAxNy42IDE0LjQgMzIgMzIgMzJsMzg0IDBjMTcuNiAwIDMyLTE0LjQgMzItMzJsMC0zODRjMC0xNy42LTE0LjQtMzItMzItMzJ6TTM1MiAyODkuNGMwIDQ5LjQtMTEuNCA4Mi42LTEwMy44IDgyLjZsLTE2LjkgMGMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhsLS45IDAgMCAzNC44LTY0IDAgMC0yMzIgNjQgMCAwIDc0LjcgMS4xIDBjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGwxNy4zIDBjOTIuNCAwIDEwMy44IDMzLjEgMTAzLjggODIuNWwwIDM1IC4xIDB6bS02NC0yOC45bDAgMjIuOWMwIDIxLjctMy40IDMzLjgtMzguNCAzMy44bC00NS4zIDBjLTI4LjkgMC00NC4xLTYuNS00NC4xLTM1LjdsMC0xOWMwLTI5LjMgMTUuMi0zNS43IDQ0LjEtMzUuN2w0NS4zIDBjMzUtLjIgMzguNCAxMiAzOC40IDMzLjd6Il0KICAgIH07CiAgICBmYVN2ZWx0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdmVsdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTg2OCIsICJNMjAyLjEgMjYuNGM2Ni44LTQyLjYgMTU5LjMtMjIuNyAyMDYuMSA0NC4zIDExLjEgMTUuNSAxOSAzMy4xIDIzLjIgNTEuOHM0LjcgMzcuOSAxLjMgNTYuN2MtMy4yIDE4LTEwLjEgMzUuMS0yMC4xIDUwLjMgMTQuNiAyNy45IDE5LjYgNjAgMTQgOTEtMy4zIDE4LjQtMTAuNCAzNi0yMC45IDUxLjVzLTI0LjEgMjguNy0zOS45IDM4LjdMMjQ4LjMgNDg1LjZjLTY2LjggNDIuNi0xNTkuMyAyMi43LTIwNi4xLTQ0LjItMTEuMS0xNS41LTE5LTMzLjItMjMuMi01MS44cy00LjctMzcuOS0xLjMtNTYuN2MzLjItMTggMTAuMS0zNS4xIDIwLjEtNTAuMy0xNC43LTI3LjktMTkuNi02MC0xNC05MS4xIDMuMy0xOC40IDEwLjQtMzYgMjAuOS01MS41czI0LjEtMjguNyAzOS45LTM4LjdMMjAyLjEgMjYuNHpNMzE1LjYgNjcuMmMtMTcuOS02LjYtMzcuNC03LjYtNTUuOS0yLjgtOC40IDIuMy0xNi41IDUuOC0yMy44IDEwLjVMMTE4LjUgMTQ5LjdjLTkuNSA2LTE3LjcgMTMuOS0yNCAyMy4zUzg0IDE5Mi44IDgyIDIwMy45Yy0yIDExLjMtMS43IDIyLjkgLjggMzQuMXM3LjMgMjEuOCAxMy45IDMxLjJjMTAuOSAxNS43IDI2LjMgMjcuNiA0NC4yIDM0LjNzMzcuNCA3LjYgNTUuOSAyLjhjOC40LTIuMyAxNi41LTUuOCAyMy44LTEwLjVsNDQuOC0yOC42YzIuMi0xLjQgNC43LTIuNSA3LjItMy4yIDUuNi0xLjQgMTEuNC0xLjIgMTYuOCAuOHMxMCA1LjYgMTMuMyAxMC4zYzIgMi44IDMuNSA2IDQuMiA5LjRzLjkgNi45IC4zIDEwLjNjLS42IDMuMy0xLjkgNi41LTMuOCA5LjMtMS45IDIuOC00LjQgNS4yLTcuMiA3TDE3OC44IDM4Ni4xYy0yLjIgMS40LTQuNyAyLjUtNy4yIDMuMi01LjYgMS40LTExLjQgMS4yLTE2LjgtLjhzLTEwLTUuNi0xMy4zLTEwLjNjLTMuNi01LjEtNS4zLTExLjItNC43LTE3LjRsLjQtNC40LTQuMy0xLjNjLTE2LjUtNS0zMi4xLTEyLjctNDUuOS0yMi45bC02LTQuNC0yLjIgNi43Yy0xLjIgMy42LTIuMSA3LjMtMi44IDExLTIgMTEuMy0xLjcgMjIuOSAuOCAzNC4xczcuMyAyMS44IDEzLjkgMzEuMWMxMC45IDE1LjcgMjYuMyAyNy42IDQ0LjIgMzQuM3MzNy40IDcuNiA1NS44IDIuOGM4LjQtMi4zIDE2LjUtNS44IDIzLjktMTAuNWwxMTcuMy03NC44YzkuNS02IDE3LjctMTMuOSAyNC0yMy4zczEwLjYtMTkuOSAxMi42LTMxYzItMTEuMyAxLjgtMjIuOS0uOC0zNC4xcy03LjMtMjEuOC0xNC0zMS4xYy0xMC45LTE1LjctMjYuMy0yNy42LTQ0LjItMzQuM3MtMzcuNC03LjYtNTUuOS0yLjhjLTguNCAyLjMtMTYuNSA1LjgtMjMuOCAxMC41TDE4NSAyNDQuOGMtMi4yIDEuNC00LjYgMi41LTcuMiAzLjItNS42IDEuNC0xMS41IDEuMi0xNi44LS44cy0xMC01LjYtMTMuMy0xMC4zYy0yLTIuOC0zLjQtNi00LjItOS40cy0uOS02LjktLjItMTAuM2MuNi0zLjMgMS45LTYuNSAzLjgtOS4zczQuNC01LjIgNy4yLTdsMTE3LjQtNzQuOGMyLjItMS40IDQuNy0yLjUgNy4yLTMuMiA1LjYtMS40IDExLjQtMS4xIDE2LjggLjlzMTAgNS42IDEzLjMgMTAuM2MzLjYgNS4xIDUuMiAxMS4zIDQuNyAxNy40bC0uNCA0LjQgNC40IDEuM2MxNi41IDUgMzIgMTIuOCA0NS45IDIzbDYgNC40IDIuMi02LjhjMS4yLTMuNiAyLjEtNy4zIDIuOC0xMSAyLTExLjMgMS44LTIyLjktLjgtMzQuMXMtNy4zLTIxLjgtMTQtMzEuMWMtMTAuOS0xNS43LTI2LjMtMjcuNi00NC4yLTM0LjN6Il0KICAgIH07CiAgICBmYVNxdWFyZURlc2twcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWRlc2twcm8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTg0NCIsICJNNDA4LjggMzJDNDMwLjQgMzIgNDQ4IDQ5LjYgNDQ4IDcxLjJsMCAzNjkuNmMwIDIxLjYtMTcuNiAzOS4yLTM5LjIgMzkuMkwzOS4yIDQ4MEMxNy42IDQ4MCAwIDQ2Mi40IDAgNDQwLjhMMCA3MS4yQzAgNDkuNiAxNy42IDMyIDM5LjIgMzJsMzY5LjYgMHpNMTEwLjkgMjc0LjFsMCAxMTQuNCA4OS4xLS4xYzIwLjYgMCAzOS40LTMuMiA1Ni4zLTkuNXMzMS4zLTE1LjQgNDMuMi0yN2MxMi4yLTExLjkgMjEuNi0yNiAyOC4yLTQyLjEgNC42LTExLjEgNy43LTIzIDkuMi0zNS43bC00My44IDBjLTEuMSA2LjQtMi44IDEyLjQtNS4xIDE4LjItNC4yIDEwLjktMTAuMyAyMC4zLTE4LjIgMjguMi03LjkgNy43LTE3LjQgMTMuNy0yOC42IDE3LjktMTEuMSA0LjMtMjMuNSA2LjQtMzcuMyA2LjRsLTUwIDAgMC03MC42LTQzIC4xem0wLTE1MS40bDAgMTE0LjQgNDMtLjEgMC03MC43IDUwIDBjMTMuNyAwIDI2LjIgMi4xIDM3LjMgNi40IDExLjEgNC4zIDIwLjYgMTAuMyAyOC42IDE4LjMgNy45IDcuNyAxNCAxNy4xIDE4LjIgMjguMiAyLjMgNS42IDQgMTEuNSA1LjEgMTcuOGw0My45IC4xYy0xLjQtMTIuNi00LjQtMjQuNC04LjktMzUuMy02LjYtMTYuNC0xNi0zMC41LTI4LjEtNDIuMi0xMi4xLTExLjktMjYuNy0yMS4xLTQzLjYtMjcuNS0xNi45LTYuNC0zNS43LTkuNS01Ni4zLTkuNWwtODkgLjF6Il0KICAgIH07CiAgICBmYVRhaWx3aW5kQ3NzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRhaWx3aW5kLWNzcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODY2IiwgIk0zMjAgNjRjLTg1LjMgMC0xMzguNyA0Mi43LTE2MCAxMjggMzItNDIuNyA2OS4zLTU4LjcgMTEyLTQ4IDI0LjMgNi4xIDQxLjcgMjMuOCA2MSA0My4zIDMxLjQgMzEuOCA2Ny43IDY4LjcgMTQ3IDY4LjcgODUuMyAwIDEzOC43LTQyLjcgMTYwLTEyOC0zMiA0Mi43LTY5LjMgNTguNy0xMTIgNDgtMjQuMy02LjEtNDEuNy0yMy44LTYxLTQzLjMtMzEuNC0zMS44LTY3LjctNjguNy0xNDctNjguN3pNMTYwIDI1NmMtODUuMyAwLTEzOC43IDQyLjctMTYwIDEyOCAzMi00Mi43IDY5LjMtNTguNyAxMTItNDggMjQuMyA2LjEgNDEuNyAyMy44IDYxIDQzLjMgMzEuNCAzMS44IDY3LjcgNjguNyAxNDcgNjguNyA4NS4zIDAgMTM4LjctNDIuNyAxNjAtMTI4LTMyIDQyLjctNjkuMyA1OC43LTExMiA0OC0yNC4zLTYuMS00MS43LTIzLjgtNjEtNDMuMy0zMS40LTMxLjgtNjcuNy02OC43LTE0Ny02OC43eiJdCiAgICB9OwogICAgaWNvbnMgPSB7CiAgICAgIGZhU3F1YXJlR2l0aHViLAogICAgICBmYUdpdGh1YlNxdWFyZSwKICAgICAgZmFUaGlua1BlYWtzLAogICAgICBmYUdvb2dsZURyaXZlLAogICAgICBmYUF1dG9wcmVmaXhlciwKICAgICAgZmFTcXVhcmVWaWFkZW8sCiAgICAgIGZhVmlhZGVvU3F1YXJlLAogICAgICBmYUNwYW5lbCwKICAgICAgZmFNZW5kZWxleSwKICAgICAgZmFEcmFmdDJkaWdpdGFsLAogICAgICBmYVJlcGx5ZCwKICAgICAgZmFFbXBpcmUsCiAgICAgIGZhQWNjZXNzaWJsZUljb24sCiAgICAgIGZhUXVvcmEsCiAgICAgIGZhQ2NKY2IsCiAgICAgIGZhRmVkb3JhLAogICAgICBmYUR1b2xpbmdvLAogICAgICBmYUZpcnN0ZHJhZnQsCiAgICAgIGZhRnJlZWJzZCwKICAgICAgZmFPZHlzZWUsCiAgICAgIGZhR2dDaXJjbGUsCiAgICAgIGZhQ2xvdWRmbGFyZSwKICAgICAgZmFIYWNrZXJyYW5rLAogICAgICBmYVNreWF0bGFzLAogICAgICBmYURlc2twcm8sCiAgICAgIGZhUmVzb2x2aW5nLAogICAgICBmYUJsYWNrYmVycnksCiAgICAgIGZhU3RyaXBlUywKICAgICAgZmFTcXVhcmVCZWhhbmNlLAogICAgICBmYUJlaGFuY2VTcXVhcmUsCiAgICAgIGZhU2VydmljZXN0YWNrLAogICAgICBmYVJvY2tldGNoYXQsCiAgICAgIGZhUmViZWwsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZSwKICAgICAgZmFMaW5rdHJlZSwKICAgICAgZmFTaW1wbHlidWlsdCwKICAgICAgZmFTdHViYmVyLAogICAgICBmYUFwcGVyLAogICAgICBmYUdvb2dsZVNjaG9sYXIsCiAgICAgIGZhWWFybiwKICAgICAgZmFTdGFja092ZXJmbG93LAogICAgICBmYUJsdWV0b290aCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwLAogICAgICBmYVJlZGRpdCwKICAgICAgZmFDb25uZWN0ZGV2ZWxvcCwKICAgICAgZmFSZXNlYXJjaGdhdGUsCiAgICAgIGZhU2lnbmFsTWVzc2VuZ2VyLAogICAgICBmYVhpbmcsCiAgICAgIGZhU3F1YXJlSnMsCiAgICAgIGZhSnNTcXVhcmUsCiAgICAgIGZhRm9udGljb25zLAogICAgICBmYVVwcywKICAgICAgZmFBbWF6b25QYXksCiAgICAgIGZhUGFuZG9yYSwKICAgICAgZmFPcGVuaWQsCiAgICAgIGZhVnNjbywKICAgICAgZmFHbG9iYWxlYWtzLAogICAgICBmYVZlbm1vLAogICAgICBmYVVidW50dSwKICAgICAgZmFWaWFjb2luLAogICAgICBmYVpoaWh1LAogICAgICBmYVlhbmRleCwKICAgICAgZmFQaXhpdiwKICAgICAgZmFPcGVuYWksCiAgICAgIGZhU2l0aCwKICAgICAgZmFKdWxpYSwKICAgICAgZmFOZmNEaXJlY3Rpb25hbCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSwKICAgICAgZmFVbWJyYWNvLAogICAgICBmYUhvb2xpLAogICAgICBmYVNxdWFyZUdpdCwKICAgICAgZmFHaXRTcXVhcmUsCiAgICAgIGZhT2Rub2tsYXNzbmlraSwKICAgICAgZmFEcnVwYWwsCiAgICAgIGZhQmxvZ2dlckIsCiAgICAgIGZhSW52aXNpb24sCiAgICAgIGZhRmFjZWJvb2tGLAogICAgICBmYUNlbnRvcywKICAgICAgZmFTY2FsZXdheSwKICAgICAgZmFDY0FtYXpvblBheSwKICAgICAgZmFFYmF5LAogICAgICBmYUNvbnRhbywKICAgICAgZmFFbGxvLAogICAgICBmYVNpc3RyaXgsCiAgICAgIGZhUGVyaXNjb3BlLAogICAgICBmYUV4cGVkaXRlZHNzbCwKICAgICAgZmFOYXBzdGVyLAogICAgICBmYURlbGljaW91cywKICAgICAgZmFHdWlsZGVkLAogICAgICBmYU9ic2lkaWFuLAogICAgICBmYVhib3gsCiAgICAgIGZhVW50YXBwZCwKICAgICAgZmFHb29nbGVQbHVzRywKICAgICAgZmFHaXRodWJBbHQsCiAgICAgIGZhR2V0UG9ja2V0LAogICAgICBmYUdsaWRlLAogICAgICBmYUJpdHksCiAgICAgIGZhV3BleHBsb3JlciwKICAgICAgZmFNZWdhcG9ydCwKICAgICAgZmFMZWV0Y29kZSwKICAgICAgZmFNZGIsCiAgICAgIGZhUGFnZTQsCiAgICAgIGZhVGhlUmVkWWV0aSwKICAgICAgZmFKaXJhLAogICAgICBmYUZlZGV4LAogICAgICBmYUV2ZXJub3RlLAogICAgICBmYVVzYiwKICAgICAgZmFBbmdyeWNyZWF0aXZlLAogICAgICBmYU1penVuaSwKICAgICAgZmFJdGNoSW8sCiAgICAgIGZhV2luZG93cywKICAgICAgZmFTdHVtYmxldXBvbiwKICAgICAgZmFHb29nbGUsCiAgICAgIGZhRGlzY29yZCwKICAgICAgZmFIYWNrZXJOZXdzLAogICAgICBmYUVsZXZlbnR5LAogICAgICBmYTExdHksCiAgICAgIGZhVGVhbXNwZWFrLAogICAgICBmYVN1cHBsZSwKICAgICAgZmFTcXVhcmVUd2l0dGVyLAogICAgICBmYVR3aXR0ZXJTcXVhcmUsCiAgICAgIGZhVmltLAogICAgICBmYUZvbnRBd2Vzb21lLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZywKICAgICAgZmFGb250QXdlc29tZUxvZ29GdWxsLAogICAgICBmYVdpcnNpbmRoYW5kd2VyaywKICAgICAgZmFXc2gsCiAgICAgIGZhWm9vbSwKICAgICAgZmFDb25mbHVlbmNlLAogICAgICBmYURpZ2csCiAgICAgIGZhVGhyZWFkcywKICAgICAgZmFXcHJlc3NyLAogICAgICBmYVJlbmRhY3QsCiAgICAgIGZhWW9hc3QsCiAgICAgIGZhTmltYmxyLAogICAgICBmYVBpeGVsZmVkLAogICAgICBmYVlhaG9vLAogICAgICBmYUJsdWVza3ksCiAgICAgIGZhU2NyaWJkLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1BkLAogICAgICBmYUVhcmx5YmlyZHMsCiAgICAgIGZhU3ltZm9ueWNhc3RzLAogICAgICBmYVNxdWFyZU9kbm9rbGFzc25pa2ksCiAgICAgIGZhT2Rub2tsYXNzbmlraVNxdWFyZSwKICAgICAgZmFNYXJrZG93biwKICAgICAgZmFUeXBvMywKICAgICAgZmFKb29tbGEsCiAgICAgIGZhV2VpeGluLAogICAgICBmYUdydW50LAogICAgICBmYVN1cHBvcnRub3csCiAgICAgIGZhUm9ja3JtcywKICAgICAgZmFVbnNwbGFzaCwKICAgICAgZmFTcXVhcmVJbnN0YWdyYW0sCiAgICAgIGZhSW5zdGFncmFtU3F1YXJlLAogICAgICBmYUZpcnN0T3JkZXJBbHQsCiAgICAgIGZhRnVsY3J1bSwKICAgICAgZmFBcmNoTGludXgsCiAgICAgIGZhRmVkaXZlcnNlLAogICAgICBmYUJyYXZlUmV2ZXJzZSwKICAgICAgZmFBdmlhbmV4LAogICAgICBmYU5zOCwKICAgICAgZmFTcXVhcmVQaW50ZXJlc3QsCiAgICAgIGZhUGludGVyZXN0U3F1YXJlLAogICAgICBmYUJsdWV0b290aEIsCiAgICAgIGZhR3JpcGZpcmUsCiAgICAgIGZhU3F1YXJlR29vZ2xlUGx1cywKICAgICAgZmFHb29nbGVQbHVzU3F1YXJlLAogICAgICBmYUdpdGVlLAogICAgICBmYVhtcHAsCiAgICAgIGZhQXBwU3RvcmUsCiAgICAgIGZhV2l4LAogICAgICBmYUludGVyY29tLAogICAgICBmYVJlYWN0ZXVyb3BlLAogICAgICBmYVdhemUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zUmVtaXgsCiAgICAgIGZhQmFuZGNhbXAsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZSwKICAgICAgZmFWaW1lb1YsCiAgICAgIGZhU3RyYXZhLAogICAgICBmYVVuaXJlZ2lzdHJ5LAogICAgICBmYUNjRGluZXJzQ2x1YiwKICAgICAgZmFLdWJlcm5ldGVzLAogICAgICBmYVBpbnRlcmVzdCwKICAgICAgZmFBbGdvbGlhLAogICAgICBmYVN0YWNrcGF0aCwKICAgICAgZmFPY3RvcHVzRGVwbG95LAogICAgICBmYVlhbW1lciwKICAgICAgZmFNb2R4LAogICAgICBmYVNxdWFyZVRocmVhZHMsCiAgICAgIGZhT2xkUmVwdWJsaWMsCiAgICAgIGZhU3VzZSwKICAgICAgZmFBcHBTdG9yZUlvcywKICAgICAgZmFVbHRyYWx5dGljc1lvbG8sCiAgICAgIGZhU3F1YXJlRHJpYmJibGUsCiAgICAgIGZhRHJpYmJibGVTcXVhcmUsCiAgICAgIGZhVWlraXQsCiAgICAgIGZhU3VwZXJwb3dlcnMsCiAgICAgIGZhWW91dHViZSwKICAgICAgZmFFbWJlciwKICAgICAgZmFCb290c3RyYXAsCiAgICAgIGZhSXR1bmVzLAogICAgICBmYVNxdWFyZVhpbmcsCiAgICAgIGZhWGluZ1NxdWFyZSwKICAgICAgZmFDc3MzQWx0LAogICAgICBmYVNxdWFyZXNwYWNlLAogICAgICBmYVRyZWxsbywKICAgICAgZmFWaWFkZW8sCiAgICAgIGZhU2VhcmNoZW5naW4sCiAgICAgIGZhVW5yZWFsRW5naW5lLAogICAgICBmYVBheXBhbCwKICAgICAgZmFTcXVhcmVCbHVlc2t5LAogICAgICBmYURBbmREQmV5b25kLAogICAgICBmYU1pY3Jvc29mdCwKICAgICAgZmFGbHksCiAgICAgIGZhQ2NTdHJpcGUsCiAgICAgIGZhV29yZHByZXNzU2ltcGxlLAogICAgICBmYVNlbGxzeSwKICAgICAgZmFEYXNoY3ViZSwKICAgICAgZmFHaXR0ZXIsCiAgICAgIGZhV29sZlBhY2tCYXR0YWxpb24sCiAgICAgIGZhTGFzdGZtLAogICAgICBmYVNob3B3YXJlLAogICAgICBmYUJsb2dnZXIsCiAgICAgIGZhRWRnZSwKICAgICAgZmFJb3hob3N0LAogICAgICBmYVNjaGxpeCwKICAgICAgZmFEQW5kRCwKICAgICAgZmFWdWVqcywKICAgICAgZmFNZXRhLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NoYXJlLAogICAgICBmYVN0dWRpb3ZpbmFyaSwKICAgICAgZmFCaXRidWNrZXQsCiAgICAgIGZhVmssCiAgICAgIGZhR2l0aHViLAogICAgICBmYUNvZGllcGllLAogICAgICBmYVBpZWRQaXBlciwKICAgICAgZmFSYXNwYmVycnlQaSwKICAgICAgZmFDc3MzLAogICAgICBmYUh1YnNwb3QsCiAgICAgIGZhQ21wbGlkLAogICAgICBmYUR5YWxvZywKICAgICAgZmFFbGVtZW50b3IsCiAgICAgIGZhRmlyc3RPcmRlciwKICAgICAgZmFEcmliYmJsZSwKICAgICAgZmFMaW5rZWRpbiwKICAgICAgZmFDY1BheXBhbCwKICAgICAgZmFEaGwsCiAgICAgIGZhVGV4LAogICAgICBmYUNsYXVkZSwKICAgICAgZmFTaG9waWZ5LAogICAgICBmYVNxdWFyZVJlZGRpdCwKICAgICAgZmFSZWRkaXRTcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmMsCiAgICAgIGZhR2FsYWN0aWNSZXB1YmxpYywKICAgICAgZmFGYWNlYm9vaywKICAgICAgZmFHaXRsYWIsCiAgICAgIGZhUXEsCiAgICAgIGZhU3RyaXBlLAogICAgICBmYURhaWx5bW90aW9uLAogICAgICBmYVN0ZWFtLAogICAgICBmYVZlbm1vViwKICAgICAgZmFTbmFwY2hhdCwKICAgICAgZmFTbmFwY2hhdEdob3N0LAogICAgICBmYUdhbGFjdGljU2VuYXRlLAogICAgICBmYVBob2VuaXhGcmFtZXdvcmssCiAgICAgIGZhR2l0LAogICAgICBmYU9wdGluTW9uc3RlciwKICAgICAgZmFKZW5raW5zLAogICAgICBmYVNsaWRlc2hhcmUsCiAgICAgIGZhVWJlciwKICAgICAgZmFEaWdpdGFsT2NlYW4sCiAgICAgIGZhU291bmRjbG91ZCwKICAgICAgZmFTcXVhcmVGaWdtYSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYSwKICAgICAgZmFDaHJvbWUsCiAgICAgIGZhVHJhZGVGZWRlcmF0aW9uLAogICAgICBmYVZhYWRpbiwKICAgICAgZmFEZXZpYW50YXJ0LAogICAgICBmYU1lZGl1bSwKICAgICAgZmFNZWRpdW1NLAogICAgICBmYU9wZW5jYXJ0LAogICAgICBmYVlDb21iaW5hdG9yLAogICAgICBmYUxpbmUsCiAgICAgIGZhQW1pbGlhLAogICAgICBmYUFzeW1tZXRyaWssCiAgICAgIGZhUGhhYnJpY2F0b3IsCiAgICAgIGZhQm90cywKICAgICAgZmFWaW5lLAogICAgICBmYU1lZHJ0LAogICAgICBmYU9zaSwKICAgICAgZmFHZywKICAgICAgZmFCdXlzZWxsYWRzLAogICAgICBmYUdvb2dsZVBsdXMsCiAgICAgIGZhU2NyZWVucGFsLAogICAgICBmYUJpdGNvaW4sCiAgICAgIGZhU3dpZnQsCiAgICAgIGZhRmlsZXNQaW53aGVlbCwKICAgICAgZmFMYXJhdmVsLAogICAgICBmYVdwZm9ybXMsCiAgICAgIGZhU3BlYWtlckRlY2ssCiAgICAgIGZhRmxpY2tyLAogICAgICBmYUNjVmlzYSwKICAgICAgZmFVcHdvcmssCiAgICAgIGZhS2FrYW9UYWxrLAogICAgICBmYUZsdXR0ZXIsCiAgICAgIGZhQnVmZmVyLAogICAgICBmYUdyYXRpcGF5LAogICAgICBmYUdvb2dsZVBheSwKICAgICAgZmFBcHBsZSwKICAgICAgZmFUdW1ibHIsCiAgICAgIGZhUGhvZW5peFNxdWFkcm9uLAogICAgICBmYUNlbnRlcmNvZGUsCiAgICAgIGZhRGViaWFuLAogICAgICBmYU1hc3RvZG9uLAogICAgICBmYVNrZXRjaCwKICAgICAgZmFXZWJBd2Vzb21lLAogICAgICBmYVNhc3MsCiAgICAgIGZhVGhyZWVtYSwKICAgICAgZmFTcXVhcmVXaGF0c2FwcCwKICAgICAgZmFXaGF0c2FwcFNxdWFyZSwKICAgICAgZmFTa3lwZSwKICAgICAgZmFBbmd1bGFyLAogICAgICBmYUNpcmNsZVp1bGlwLAogICAgICBmYU9wZW5zdXNlLAogICAgICBmYURyb3Bib3gsCiAgICAgIGZhRGVlemVyLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nLAogICAgICBmYUplZGlPcmRlciwKICAgICAgZmFSUHJvamVjdCwKICAgICAgZmFJbnN0YWxvZCwKICAgICAgZmFDYW5hZGlhbk1hcGxlTGVhZiwKICAgICAgZmFFdGhlcmV1bSwKICAgICAgZmFIb3V6eiwKICAgICAgZmFWaWJlciwKICAgICAgZmFLaWNrc3RhcnRlciwKICAgICAgZmFTcXVhcmVLaWNrc3RhcnRlciwKICAgICAgZmFTcG90aWZ5LAogICAgICBmYUxlYW5wdWIsCiAgICAgIGZhSmF2YSwKICAgICAgZmFOZmNTeW1ib2wsCiAgICAgIGZhV29kdSwKICAgICAgZmFTcXVhcmVTdGVhbSwKICAgICAgZmFTdGVhbVNxdWFyZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1LAogICAgICBmYU5wbSwKICAgICAgZmFDbG91ZHNjYWxlLAogICAgICBmYVRoZW1lY28sCiAgICAgIGZhR29vZ2xlUGxheSwKICAgICAgZmFLb3J2dWUsCiAgICAgIGZhVzNjLAogICAgICBmYUdyYXYsCiAgICAgIGZhQXdzLAogICAgICBmYUdsaWRlRywKICAgICAgZmFKc2ZpZGRsZSwKICAgICAgZmFLZXliYXNlLAogICAgICBmYUx1bW9uRHJvcCwKICAgICAgZmFGb3JnZWpvLAogICAgICBmYVBvc3RncmVzcWwsCiAgICAgIGZhV2VlYmx5LAogICAgICBmYURvY2tlciwKICAgICAgZmFNYWdlbnRvLAogICAgICBmYVRvckJyb3dzZXIsCiAgICAgIGZhR2l0QWx0LAogICAgICBmYUZpcmVmb3hCcm93c2VyLAogICAgICBmYUNsb3Vkc21pdGgsCiAgICAgIGZhV2l6YXJkc09mVGhlQ29hc3QsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmQsCiAgICAgIGZhVXNwcywKICAgICAgZmFTcXVhcmVMZXR0ZXJib3hkLAogICAgICBmYU1hbmRhbG9yaWFuLAogICAgICBmYVNsYWNrLAogICAgICBmYVNsYWNrSGFzaCwKICAgICAgZmFBbmdlbGxpc3QsCiAgICAgIGZhQW5kcm9pZCwKICAgICAgZmFNZWV0dXAsCiAgICAgIGZhRm9udGljb25zRmksCiAgICAgIGZhUGFsZmVkLAogICAgICBmYVdwYmVnaW5uZXIsCiAgICAgIGZhRGlhc3BvcmEsCiAgICAgIGZhUHJvZHVjdEh1bnQsCiAgICAgIGZhU3F1YXJlVXB3b3JrLAogICAgICBmYUN1dHRsZWZpc2gsCiAgICAgIGZhTWVkYXBwcywKICAgICAgZmFQaXgsCiAgICAgIGZhU3F1YXJlVHVtYmxyLAogICAgICBmYVR1bWJsclNxdWFyZSwKICAgICAgZmFSZWFjdCwKICAgICAgZmFIdWdnaW5nRmFjZSwKICAgICAgZmFKeGwsCiAgICAgIGZhU3F1YXJlTGlua2VkaW4sCiAgICAgIGZhQ3NzLAogICAgICBmYUhhc2hub2RlLAogICAgICBmYVJlZGRpdEFsaWVuLAogICAgICBmYVRpa3RvaywKICAgICAgZmFXb3JkcHJlc3MsCiAgICAgIGZhSWRlYWwsCiAgICAgIGZhUGllZFBpcGVyUHAsCiAgICAgIGZhVXNzdW5uYWgsCiAgICAgIGZhRm9ydEF3ZXNvbWVBbHQsCiAgICAgIGZhQnVyb21vYmVsZXhwZXJ0ZSwKICAgICAgZmFCaWxpYmlsaSwKICAgICAgZmFOZW9zLAogICAgICBmYURldiwKICAgICAgZmFIb3RqYXIsCiAgICAgIGZhRG9jaHViLAogICAgICBmYVZpbWVvLAogICAgICBmYU1heGNkbiwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSwKICAgICAgZmFGb250QXdlc29tZUFsdCwKICAgICAgZmFTcGVha2FwLAogICAgICBmYUZhbnRhc3lGbGlnaHRHYW1lcywKICAgICAgZmFMaW51eCwKICAgICAgZmFDb3R0b25CdXJlYXUsCiAgICAgIGZhR29vZ2xlV2FsbGV0LAogICAgICBmYUZvdXJzcXVhcmUsCiAgICAgIGZhU2hpcnRzaW5idWxrLAogICAgICBmYU1pbnRiaXQsCiAgICAgIGZhWnVsaXAsCiAgICAgIGZhU3RheWxpbmtlZCwKICAgICAgZmFXZWJmbG93LAogICAgICBmYVJlbnJlbiwKICAgICAgZmFLb0ZpLAogICAgICBmYVJldiwKICAgICAgZmFLZXljZG4sCiAgICAgIGZhSGlyZUFIZWxwZXIsCiAgICAgIGZhU3F1YXJlSGFja2VyTmV3cywKICAgICAgZmFIYWNrZXJOZXdzU3F1YXJlLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1BkQWx0LAogICAgICBmYU9yY2lkLAogICAgICBmYUJvYXJkR2FtZUdlZWssCiAgICAgIGZhQmdnLAogICAgICBmYUJlaGFuY2UsCiAgICAgIGZhTW9uZXJvLAogICAgICBmYUZpZ21hLAogICAgICBmYUluc3RhZ3JhbSwKICAgICAgZmFQZXJieXRlLAogICAgICBmYVNxdWFyZVZpbWVvLAogICAgICBmYVZpbWVvU3F1YXJlLAogICAgICBmYVB1c2hlZCwKICAgICAgZmFNaXhjbG91ZCwKICAgICAgZmFZYW5kZXhJbnRlcm5hdGlvbmFsLAogICAgICBmYUhpdmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zWmVybywKICAgICAgZmFTcXVhcmVTbmFwY2hhdCwKICAgICAgZmFTbmFwY2hhdFNxdWFyZSwKICAgICAgZmFUaGVtZWlzbGUsCiAgICAgIGZhRGFydExhbmcsCiAgICAgIGZhRGVwbG95ZG9nLAogICAgICBmYUZsaXBib2FyZCwKICAgICAgZmFCdXlOTGFyZ2UsCiAgICAgIGZhV2F0Y2htYW5Nb25pdG9yaW5nLAogICAgICBmYUhpcHMsCiAgICAgIGZhQ2xvdWR2ZXJzaWZ5LAogICAgICBmYUdvb2RyZWFkcywKICAgICAgZmFUaWRhbCwKICAgICAgZmFVbml0eSwKICAgICAgZmFUZW5jZW50V2VpYm8sCiAgICAgIGZhRnJlZUNvZGVDYW1wLAogICAgICBmYVhUd2l0dGVyLAogICAgICBmYVN0aWNrZXJNdWxlLAogICAgICBmYVR3aXRjaCwKICAgICAgZmFLaWNrc3RhcnRlckssCiAgICAgIGZhQ3JpdGljYWxSb2xlLAogICAgICBmYVN0ZWFtU3ltYm9sLAogICAgICBmYU1haWxjaGltcCwKICAgICAgZmFMdW1vbiwKICAgICAgZmFOdXRyaXRpb25peCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZ1BsdXMsCiAgICAgIGZhUmVkaGF0LAogICAgICBmYVNxdWFyZVBpZWRQaXBlciwKICAgICAgZmFQaWVkUGlwZXJTcXVhcmUsCiAgICAgIGZhV2hhdHNhcHAsCiAgICAgIGZhSW1kYiwKICAgICAgZmFQeXRob24sCiAgICAgIGZhQ2FzaEFwcCwKICAgICAgZmFQaW50ZXJlc3RQLAogICAgICBmYVdobWNzLAogICAgICBmYUpvZ2V0LAogICAgICBmYVNxdWFyZVlvdXR1YmUsCiAgICAgIGZhWW91dHViZVNxdWFyZSwKICAgICAgZmFBdGxhc3NpYW4sCiAgICAgIGZhUGllZFBpcGVySGF0LAogICAgICBmYUludGVybmV0RXhwbG9yZXIsCiAgICAgIGZhQWlyYm5iLAogICAgICBmYUpzLAogICAgICBmYVF1aW5zY2FwZSwKICAgICAgZmFBZHZlcnNhbCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnMsCiAgICAgIGZhTm90aW9uLAogICAgICBmYUNocm9tZWNhc3QsCiAgICAgIGZhVWx0cmFseXRpY3NIdWIsCiAgICAgIGZhV2lraXBlZGlhVywKICAgICAgZmFTaXRyb3gsCiAgICAgIGZhU3F1YXJlR2l0bGFiLAogICAgICBmYUdpdGxhYlNxdWFyZSwKICAgICAgZmFTaG9lbGFjZSwKICAgICAgZmFPcGVuc3RyZWV0bWFwLAogICAgICBmYVNlbGxjYXN0LAogICAgICBmYU1peCwKICAgICAgZmFDY0FwcGxlUGF5LAogICAgICBmYVNvbGFuYSwKICAgICAgZmFUeXBlc2NyaXB0LAogICAgICBmYUJyYXZlLAogICAgICBmYUV0c3ksCiAgICAgIGZhQnRjLAogICAgICBmYUFkbiwKICAgICAgZmFTcXVhcmVYVHdpdHRlciwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZSwKICAgICAgZmFGb3J1bWJlZSwKICAgICAgZmE0Mkdyb3VwLAogICAgICBmYUlubm9zb2Z0LAogICAgICBmYVN0dW1ibGV1cG9uQ2lyY2xlLAogICAgICBmYVN5bWZvbnksCiAgICAgIGZhU2FsZXNmb3JjZSwKICAgICAgZmFTb3VyY2V0cmVlLAogICAgICBmYUxpbmtlZGluSW4sCiAgICAgIGZhSHRtbDUsCiAgICAgIGZhUnVzdCwKICAgICAgZmFIb3JuYmlsbCwKICAgICAgZmFQaHAsCiAgICAgIGZhRGlzcXVzLAogICAgICBmYTUwMHB4LAogICAgICBmYUFmZmlsaWF0ZXRoZW1lLAogICAgICBmYVJlZFJpdmVyLAogICAgICBmYVR3aXR0ZXIsCiAgICAgIGZhRm9ydEF3ZXNvbWUsCiAgICAgIGZhTWl4ZXIsCiAgICAgIGZhTHlmdCwKICAgICAgZmFBcHBsZVBheSwKICAgICAgZmFBcnRzdGF0aW9uLAogICAgICBmYU5vZGVKcywKICAgICAgZmFVbmNoYXJ0ZWQsCiAgICAgIGZhUGxheXN0YXRpb24sCiAgICAgIGZhTWljcm9ibG9nLAogICAgICBmYUdpdGtyYWtlbiwKICAgICAgZmFUZWxlZ3JhbSwKICAgICAgZmFUZWxlZ3JhbVBsYW5lLAogICAgICBmYVVsdHJhbHl0aWNzLAogICAgICBmYUl0dW5lc05vdGUsCiAgICAgIGZhTGVzcywKICAgICAgZmFGaXJlZm94LAogICAgICBmYUthZ2dsZSwKICAgICAgZmFGYWNlYm9va01lc3NlbmdlciwKICAgICAgZmFBdWRpYmxlLAogICAgICBmYVBhdHJlb24sCiAgICAgIGZhVm52LAogICAgICBmYVBhZ2VsaW5lcywKICAgICAgZmFBbWF6b24sCiAgICAgIGZhRW52aXJhLAogICAgICBmYUxpbm9kZSwKICAgICAgZmFBY2N1c29mdCwKICAgICAgZmFFcmxhbmcsCiAgICAgIGZhVW5pc29uLAogICAgICBmYUNjRGlzY292ZXIsCiAgICAgIGZhU2FmYXJpLAogICAgICBmYVNwYWNlQXdlc29tZSwKICAgICAgZmFOb2RlLAogICAgICBmYUNvZGVwZW4sCiAgICAgIGZhUmF2ZWxyeSwKICAgICAgZmFBbGlwYXksCiAgICAgIGZhQ2NBbWV4LAogICAgICBmYVBpZWRQaXBlckFsdCwKICAgICAgZmFMZXR0ZXJib3hkLAogICAgICBmYU9wZXJhLAogICAgICBmYVdlaWJvLAogICAgICBmYVJlYWRtZSwKICAgICAgZmFHb2xhbmcsCiAgICAgIGZhU3RhY2tFeGNoYW5nZSwKICAgICAgZmFHdWxwLAogICAgICBmYVllbHAsCiAgICAgIGZhR29mb3JlLAogICAgICBmYUF2aWF0bywKICAgICAgZmFQYWRsZXQsCiAgICAgIGZhRWRnZUxlZ2FjeSwKICAgICAgZmFTcXVhcmVMYXN0Zm0sCiAgICAgIGZhTGFzdGZtU3F1YXJlLAogICAgICBmYUdvb2RyZWFkc0csCiAgICAgIGZhQ2NNYXN0ZXJjYXJkLAogICAgICBmYURpc2NvdXJzZSwKICAgICAgZmFCbGFja1RpZSwKICAgICAgZmFTcXVhcmVGYWNlYm9vaywKICAgICAgZmFGYWNlYm9va1NxdWFyZSwKICAgICAgZmFCYXR0bGVOZXQsCiAgICAgIGZhQmltb2JqZWN0LAogICAgICBmYVN2ZWx0ZSwKICAgICAgZmFTcXVhcmVEZXNrcHJvLAogICAgICBmYVRhaWx3aW5kQ3NzCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtcmVndWxhci1zdmctaWNvbnNANy4yLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4MiwgZmFTcXVhcmVNaW51cywgZmFNaW51c1NxdWFyZSwgZmFDYWxlbmRhckNoZWNrLCBmYUZhY2VLaXNzLCBmYUtpc3MsIGZhUGFzdGUsIGZhRmlsZUNsaXBib2FyZCwgZmFIYW5kUG9pbnRMZWZ0LCBmYUZpbGVFeGNlbCwgZmFFbnZlbG9wZSwgZmFTcXVhcmVDYXJldERvd24sIGZhQ2FyZXRTcXVhcmVEb3duLCBmYVRydWNrLCBmYUJlbGwsIGZhTWVzc2FnZSwgZmFDb21tZW50QWx0LCBmYUZhY2VEaXp6eSwgZmFEaXp6eSwgZmFDYWxlbmRhckRheXMsIGZhQ2FsZW5kYXJBbHQsIGZhSGFuZFBvaW50VXAsIGZhSGFuZExpemFyZCwgZmFTcXVhcmVGdWxsLCBmYUNpcmNsZVBhdXNlLCBmYVBhdXNlQ2lyY2xlLCBmYUhhcmREcml2ZSwgZmFIZGQsIGZhRmlsZVppcHBlciwgZmFGaWxlQXJjaGl2ZSwgZmFGbG9wcHlEaXNrLCBmYVNhdmUsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsIGZhR3JpblRvbmd1ZVNxdWludCwgZmFDYW1lcmEsIGZhQ2FtZXJhQWx0LCBmYUZhY2VHcmluU3RhcnMsIGZhR3JpblN0YXJzLCBmYUV5ZSwgZmFGYWNlU2FkVGVhciwgZmFTYWRUZWFyLCBmYVNoYXJlRnJvbVNxdWFyZSwgZmFTaGFyZVNxdWFyZSwgZmFOb3RlU3RpY2t5LCBmYVN0aWNreU5vdGUsIGZhSGFuZEJhY2tGaXN0LCBmYUhhbmRSb2NrLCBmYUNoZXNzUXVlZW4sIGZhRmFjZUdyaW5UZWFycywgZmFHcmluVGVhcnMsIGZhUGVuVG9TcXVhcmUsIGZhRWRpdCwgZmFGYWNlR3JpbkJlYW1Td2VhdCwgZmFHcmluQmVhbVN3ZWF0LCBmYUNsb2NrLCBmYUNsb2NrRm91ciwgZmFGYWNlTGF1Z2hXaW5rLCBmYUxhdWdoV2luaywgZmFQYXBlclBsYW5lLCBmYUhlYXJ0LCBmYUZvbnRBd2Vzb21lMiwgZmFGb250QXdlc29tZUZsYWcyLCBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwyLCBmYUNsb25lLCBmYUZvbGRlck9wZW4sIGZhV2luZG93TWluaW1pemUsIGZhU3RhckhhbGYsIGZhQWxhcm1DbG9jaywgZmFOZXdzcGFwZXIsIGZhSG9zcGl0YWwsIGZhSG9zcGl0YWxBbHQsIGZhSG9zcGl0YWxXaWRlLCBmYUNpcmNsZVN0b3AsIGZhU3RvcENpcmNsZSwgZmFPYmplY3RVbmdyb3VwLCBmYUNvbW1lbnQsIGZhQ2hlc3NQYXduLCBmYUNhbGVuZGFyUGx1cywgZmFDbGlwYm9hcmQsIGZhVGh1bWJzRG93biwgZmFJZEJhZGdlLCBmYVNxdWFyZUNoZWNrLCBmYUNoZWNrU3F1YXJlLCBmYUNoZXNzQmlzaG9wLCBmYUVudmVsb3BlT3BlbiwgZmFDaXJjbGVYbWFyaywgZmFUaW1lc0NpcmNsZSwgZmFYbWFya0NpcmNsZSwgZmFTcXVhcmVDYXJldFVwLCBmYUNhcmV0U3F1YXJlVXAsIGZhRmlsZUltYWdlLCBmYVNxdWFyZUNhcmV0UmlnaHQsIGZhQ2FyZXRTcXVhcmVSaWdodCwgZmFTdW4sIGZhSW1hZ2UsIGZhTGlnaHRidWxiLCBmYUFkZHJlc3NDYXJkLCBmYUNvbnRhY3RDYXJkLCBmYVZjYXJkLCBmYUZhY2VNZWgsIGZhTWVoLCBmYU1hcCwgZmFIYW5kUG9pbnREb3duLCBmYUZhY2VNZWhCbGFuaywgZmFNZWhCbGFuaywgZmFGYWNlR3JpblRvbmd1ZSwgZmFHcmluVG9uZ3VlLCBmYUZ1dGJvbCwgZmFGdXRib2xCYWxsLCBmYVNvY2NlckJhbGwsIGZhRmFjZVN1cnByaXNlLCBmYVN1cnByaXNlLCBmYUZvbGRlciwgZmFGb2xkZXJCbGFuaywgZmFDbG91ZCwgZmFDaXJjbGUsIGZhRmFjZUdyaW5TcXVpbnQsIGZhR3JpblNxdWludCwgZmFDaXJjbGVVc2VyLCBmYVVzZXJDaXJjbGUsIGZhUmVjdGFuZ2xlTGlzdCwgZmFMaXN0QWx0LCBmYUhhbmQsIGZhSGFuZFBhcGVyLCBmYVRodW1ic1VwLCBmYUJ1aWxkaW5nLCBmYUNoZXNzUm9vaywgZmFDaXJjbGVRdWVzdGlvbiwgZmFRdWVzdGlvbkNpcmNsZSwgZmFGaWxlLCBmYUZhY2VTYWRDcnksIGZhU2FkQ3J5LCBmYUNhbGVuZGFyTWludXMsIGZhRmFjZVRpcmVkLCBmYVRpcmVkLCBmYUhhbmRQb2ludFJpZ2h0LCBmYUNpcmNsZVVwLCBmYUFycm93QWx0Q2lyY2xlVXAsIGZhSGFuZFNjaXNzb3JzLCBmYUdlbSwgZmFSZWN0YW5nbGVYbWFyaywgZmFSZWN0YW5nbGVUaW1lcywgZmFUaW1lc1JlY3RhbmdsZSwgZmFXaW5kb3dDbG9zZSwgZmFUcmFzaENhbiwgZmFUcmFzaEFsdCwgZmFMaWZlUmluZywgZmFDb3B5cmlnaHQsIGZhQ2lyY2xlTGVmdCwgZmFBcnJvd0FsdENpcmNsZUxlZnQsIGZhQ2FsZW5kYXIsIGZhRmFjZUZyb3duT3BlbiwgZmFGcm93bk9wZW4sIGZhQ2hhcnRCYXIsIGZhQmFyQ2hhcnQsIGZhSG91c2UsIGZhSG9tZSwgZmFIb21lQWx0LCBmYUhvbWVMZ0FsdCwgZmFGYWNlRnJvd24sIGZhRnJvd24sIGZhVXNlciwgZmFVc2VyQWx0LCBmYVVzZXJMYXJnZSwgZmFTbm93Zmxha2UsIGZhQm9va21hcmssIGZhU3F1YXJlQ2FyZXRMZWZ0LCBmYUNhcmV0U3F1YXJlTGVmdCwgZmFIYW5kc2hha2UsIGZhSGFuZHNoYWtlQWx0LCBmYUhhbmRzaGFrZVNpbXBsZSwgZmFGYWNlU21pbGVXaW5rLCBmYVNtaWxlV2luaywgZmFGYWNlR3JpblNxdWludFRlYXJzLCBmYUdyaW5TcXVpbnRUZWFycywgZmFGaWxlQXVkaW8sIGZhQ2FsZW5kYXJYbWFyaywgZmFDYWxlbmRhclRpbWVzLCBmYUNpcmNsZURvd24sIGZhQXJyb3dBbHRDaXJjbGVEb3duLCBmYUZpbGVMaW5lcywgZmFGaWxlQWx0LCBmYUZpbGVUZXh0LCBmYUNvbW1lbnRzLCBmYUNpcmNsZUNoZWNrLCBmYUNoZWNrQ2lyY2xlLCBmYU1vb24sIGZhQ2xvc2VkQ2FwdGlvbmluZywgZmFJbWFnZXMsIGZhQ2lyY2xlUmlnaHQsIGZhQXJyb3dBbHRDaXJjbGVSaWdodCwgZmFJZENhcmQsIGZhRHJpdmVyc0xpY2Vuc2UsIGZhQ2lyY2xlUGxheSwgZmFQbGF5Q2lyY2xlLCBmYUZhY2VMYXVnaEJlYW0sIGZhTGF1Z2hCZWFtLCBmYUFkZHJlc3NCb29rLCBmYUNvbnRhY3RCb29rLCBmYUhvdXJnbGFzcywgZmFIb3VyZ2xhc3NFbXB0eSwgZmFIZWFkcGhvbmVzLCBmYUhlYWRwaG9uZXNBbHQsIGZhSGVhZHBob25lc1NpbXBsZSwgZmFGaWxlUG93ZXJwb2ludCwgZmFXaW5kb3dNYXhpbWl6ZSwgZmFDb21tZW50RG90cywgZmFDb21tZW50aW5nLCBmYUZhY2VHcmluVG9uZ3VlV2luaywgZmFHcmluVG9uZ3VlV2luaywgZmFIb3VyZ2xhc3NIYWxmLCBmYUhvdXJnbGFzczIsIGZhQ3JlZGl0Q2FyZCwgZmFDcmVkaXRDYXJkQWx0LCBmYUhhbmRTcG9jaywgZmFCZWxsU2xhc2gsIGZhU3RhciwgZmFGbGFnLCBmYUxlbW9uLCBmYVdpbmRvd1Jlc3RvcmUsIGZhRmFjZUdyaW5IZWFydHMsIGZhR3JpbkhlYXJ0cywgZmFGYWNlS2lzc0JlYW0sIGZhS2lzc0JlYW0sIGZhRmlsZVBkZiwgZmFGYWNlR3JpbldpZGUsIGZhR3JpbkFsdCwgZmFGYWNlTGF1Z2hTcXVpbnQsIGZhTGF1Z2hTcXVpbnQsIGZhRmFjZUtpc3NXaW5rSGVhcnQsIGZhS2lzc1dpbmtIZWFydCwgZmFDb3B5LCBmYUNoZXNzS2luZywgZmFTcXVhcmVQbHVzLCBmYVBsdXNTcXVhcmUsIGZhRmlsZUNvZGUsIGZhRmFjZUdyaW5XaW5rLCBmYUdyaW5XaW5rLCBmYU1vbmV5QmlsbDEsIGZhTW9uZXlCaWxsQWx0LCBmYUV5ZVNsYXNoLCBmYUZpbGVXb3JkLCBmYUZhY2VBbmdyeSwgZmFBbmdyeSwgZmFDaGVzc0tuaWdodCwgZmFGYWNlR3JpbkJlYW0sIGZhR3JpbkJlYW0sIGZhSGFuZFBlYWNlLCBmYUNvbXBhc3MsIGZhU3F1YXJlLCBmYUZhY2VHcmluLCBmYUdyaW4sIGZhRmFjZVNtaWxlLCBmYVNtaWxlLCBmYUZhY2VTbWlsZUJlYW0sIGZhU21pbGVCZWFtLCBmYUZvbGRlckNsb3NlZCwgZmFLZXlib2FyZCwgZmFGYWNlUm9sbGluZ0V5ZXMsIGZhTWVoUm9sbGluZ0V5ZXMsIGZhRmFjZUdyaW1hY2UsIGZhR3JpbWFjZSwgZmFDaXJjbGVEb3QsIGZhRG90Q2lyY2xlLCBmYU9iamVjdEdyb3VwLCBmYUZhY2VGbHVzaGVkLCBmYUZsdXNoZWQsIGZhU3RhckhhbGZTdHJva2UsIGZhU3RhckhhbGZBbHQsIGZhRmlsZVZpZGVvLCBmYUZhY2VMYXVnaCwgZmFMYXVnaCwgZmFIYW5kUG9pbnRlciwgZmFSZWdpc3RlcmVkLCBpY29uczI7CnZhciBpbml0X2ZyZWVfcmVndWxhcl9zdmdfaWNvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1yZWd1bGFyLXN2Zy1pY29uc0A3LjIuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMvaW5kZXgubWpzIigpIHsKICAgIHByZWZpeDIgPSAiZmFyIjsKICAgIGZhU3F1YXJlTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3NjcsICJtaW51cy1zcXVhcmUiXSwgImYxNDYiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xMzYgMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWludXNTcXVhcmUgPSBmYVNxdWFyZU1pbnVzOwogICAgZmFDYWxlbmRhckNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLWNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzQiLCAiTTMyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyem0yMzAuNyA2NS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjExLjQgMzc0LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdCiAgICB9OwogICAgZmFGYWNlS2lzcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzUsICJraXNzIl0sICJmNTk2IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI0MCAwbDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni00OGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFLaXNzID0gZmFGYWNlS2lzczsKICAgIGZhUGFzdGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicGFzdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZmlsZS1jbGlwYm9hcmQiXSwgImYwZWEiLCAiTTY0IDQ4bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTIgMCAwLTQ4LTExMiAwYy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2em0xNzYgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRMMTA0IDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNS42IDBjOC44LTguNiAxOS0xNS44IDMwLjItMjEuMSAuMS0uOSAuMi0xLjkgLjItMi45ek00NDggNDY0bC0xNjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmwxMDEuNSAwYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsNTguNSA1OC41YzMgMyA0LjcgNy4xIDQuNyAxMS4zTDQ2NCA0NDhjMCA4LjgtNy4yIDE2LTE2IDE2ek0yMjQgMjI0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNsLTU4LjUtNTguNWMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wyODggMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NHoiXQogICAgfTsKICAgIGZhRmlsZUNsaXBib2FyZCA9IGZhUGFzdGU7CiAgICBmYUhhbmRQb2ludExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYTUiLCAiTTY0IDEyOGwxNzcuNiAwYy0xIDUuMi0xLjYgMTAuNS0xLjYgMTZsMCAxNi0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMjI0IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI0IDBjNjYuMyAwIDEyMCA1My43IDEyMCAxMjBsMCA0OGMwIDUyLjUtMzMuNyA5Ny4xLTgwLjcgMTEzLjQgLjUtMy4xIC43LTYuMiAuNy05LjQgMC0yMC05LjItMzcuOS0yMy42LTQ5LjcgNC45LTkgNy42LTE5LjQgNy42LTMwLjMgMC0xNS4xLTUuMy0yOS0xNC00MCA4LjgtMTEgMTQtMjQuOSAxNC00MGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MHptMzItODBsMCAwYy0xOCAwLTM0LjYgNi00OCAxNkw2NCA4MEMyOC43IDgwIDAgMTA4LjcgMCAxNDRzMjguNyA2NCA2NCA2NGw4MiAwYy0xLjMgNS4xLTIgMTAuNS0yIDE2IDAgMjUuMyAxNC43IDQ3LjIgMzYgNTcuNi0yLjYgNy00IDE0LjUtNCAyMi40IDAgMjAgOS4yIDM3LjkgMjMuNiA0OS43LTQuOSA5LTcuNiAxOS40LTcuNiAzMC4zIDAgMzUuMyAyOC43IDY0IDY0IDY0bDg4IDBjOTIuOCAwIDE2OC03NS4yIDE2OC0xNjhsMC00OGMwLTkyLjgtNzUuMi0xNjgtMTY4LTE2OGwtMjQgMHpNMjU2IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwek0yNDAgMjI0YzAgNS41IC43IDEwLjkgMiAxNmwtMzQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwzMiAwIDAgMTZ6bTI0IDY0bDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMjQgMHoiXQogICAgfTsKICAgIGZhRmlsZUV4Y2VsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtZXhjZWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjMyIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptOTkuMiAyNjUuNmMtOC0xMC42LTIzLTEyLjgtMzMuNi00LjhzLTEyLjggMjMtNC44IDMzLjZMMTYyIDM0NCAxMjQuOCAzOTMuNmMtOCAxMC42LTUuOCAyNS42IDQuOCAzMy42czI1LjYgNS44IDMzLjYtNC44TDE5MiAzODQgMjIwLjggNDIyLjRjOCAxMC42IDIzIDEyLjggMzMuNiA0LjhzMTIuOC0yMyA0LjgtMzMuNkwyMjIgMzQ0IDI1OS4yIDI5NC40YzgtMTAuNiA1LjgtMjUuNi00LjgtMzMuNnMtMjUuNi01LjgtMzMuNiA0LjhMMTkyIDMwNCAxNjMuMiAyNjUuNnoiXQogICAgfTsKICAgIGZhRW52ZWxvcGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODYsIDk5OTMsIDYxNDQzXSwgImYwZTAiLCAiTTYxLjQgNjRDMjcuNSA2NCAwIDkxLjUgMCAxMjUuNCAwIDEyNi4zIDAgMTI3LjEgLjEgMTI4TDAgMTI4IDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2LS4xIDBjMC0uOSAuMS0xLjcgLjEtMi42IDAtMzMuOS0yNy41LTYxLjQtNjEuNC02MS40TDYxLjQgNjR6TTQ2NCAxOTIuM0w0NjQgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE5MS43IDE1NC44IDExNy40YzMxLjQgMjMuOSA3NC45IDIzLjkgMTA2LjQgMEw0NjQgMTkyLjN6TTQ4IDEyNS40QzQ4IDExOCA1NCAxMTIgNjEuNCAxMTJsMzg5LjIgMGM3LjQgMCAxMy40IDYgMTMuNCAxMy40IDAgNC4yLTIgOC4yLTUuMyAxMC43TDI4MC4yIDI3MS41Yy0xNC4zIDEwLjgtMzQuMSAxMC44LTQ4LjQgMEw1My4zIDEzNi4xYy0zLjMtMi41LTUuMy02LjUtNS4zLTEwLjd6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtZG93biIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtZG93biJdLCAiZjE1MCIsICJNMzg0IDQzMmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwem02NC0xNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjB6TTIyNCAzNTJjLTYuNyAwLTEzLTIuOC0xNy42LTcuN2wtMTA0LTExMmMtNi41LTctOC4yLTE3LjItNC40LTI1LjlTMTEwLjUgMTkyIDEyMCAxOTJsMjA4IDBjOS41IDAgMTguMiA1LjcgMjIgMTQuNHMyLjEgMTguOS00LjQgMjUuOWwtMTA0IDExMmMtNC41IDQuOS0xMC45IDcuNy0xNy42IDcuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVEb3duID0gZmFTcXVhcmVDYXJldERvd247CiAgICBmYVRydWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInRydWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgImYwZDEiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMuMyAwYzEwLjQtMzYuOSA0NC40LTY0IDg0LjctNjRzNzQuMiAyNy4xIDg0LjcgNjRsMTAyLjYgMGM0LjktMTcuNCAxNS4xLTMyLjcgMjguNy00My45TDM2OCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6bTMuMyAzNjhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTUuNCAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQwLjYgNDAuNmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjR6TTQxNiAyNTZsMTEyIDAgMC0yMy40YzAtNC4yLTEuNy04LjMtNC43LTExLjNsLTQwLjYtNDAuNmMtMy0zLTcuMS00LjctMTEuMy00LjdsLTU1LjQgMCAwIDgwem0wIDQ4bDAgMzIuNGMyLjYtLjIgNS4zLS40IDgtLjQgNDAuMyAwIDc0LjIgMjcuMSA4NC43IDY0bDMuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTgwLTExMiAwek0xNTIgNDY0YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHptMjcyIDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFCZWxsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJlbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNzYsIDYxNjAyXSwgImYwZjMiLCAiTTIyNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkuN0MxMTguNiA0NS4zIDU2IDExNS40IDU2IDIwMGwwIDE0LjVjMCAzNy43LTEwIDc0LjctMjkgMTA3LjNMNS4xIDM1OS4yQzEuOCAzNjUgMCAzNzEuNSAwIDM3OC4yIDAgMzk5LjEgMTYuOSA0MTYgMzcuOCA0MTZsMzcyLjQgMGMyMC45IDAgMzcuOC0xNi45IDM3LjgtMzcuOCAwLTYuNy0xLjgtMTMuMy01LjEtMTlMNDIxIDMyMS43Yy0xOS0zMi42LTI5LTY5LjYtMjktMTA3LjNsMC0xNC41YzAtODQuNi02Mi42LTE1NC43LTE0NC0xNjYuM2wwLTkuN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzkyLjQgMzY4bC0zMzYuOSAwIDEyLjktMjIuMUM5MS43IDMwNiAxMDQgMjYwLjYgMTA0IDIxNC41bDAtMTQuNWMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHMxMjAgNTMuNyAxMjAgMTIwbDAgMTQuNWMwIDQ2LjIgMTIuMyA5MS41IDM1LjUgMTMxLjRMMzkyLjQgMzY4ek0xNTYuMSA0NjRjOS45IDI4IDM2LjYgNDggNjcuOSA0OHM1OC0yMCA2Ny45LTQ4bC0xMzUuOCAweiJdCiAgICB9OwogICAgZmFNZXNzYWdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1lc3NhZ2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY29tbWVudC1hbHQiXSwgImYyN2EiLCAiTTIwMy43IDUxMi45czAgMCAwIDBsLTM3LjggMjYuN2MtNy4zIDUuMi0xNi45IDUuOC0yNC45IDEuN1MxMjggNTI5IDEyOCA1MjBsMC03Mi0zMiAwYy01MyAwLTk2LTQzLTk2LTk2TDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzIwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDUzLTQzIDk2LTk2IDk2bC0xMjAuNCAwLTkxLjkgNjQuOXptNjQuMy0xMDQuMWM4LjEtNS43IDE3LjgtOC44IDI3LjctOC44TDQxNiA0MDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgODBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDU2IDBjMTAuNCAwIDE5LjMgNi42IDIyLjYgMTUuOSAuOSAyLjUgMS40IDUuMiAxLjQgOC4xbDAgNDkuN2MzMi43LTIzLjEgNjMuMy00NC43IDkxLjktNjQuOXoiXQogICAgfTsKICAgIGZhQ29tbWVudEFsdCA9IGZhTWVzc2FnZTsKICAgIGZhRmFjZURpenp5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZGl6enkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGl6enkiXSwgImY1NjciLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMjg4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFEaXp6eSA9IGZhRmFjZURpenp5OwogICAgZmFDYWxlbmRhckRheXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItZGF5cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci1hbHQiXSwgImYwNzMiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMzg0IDQzMmM4LjggMCAxNi03LjIgMTYtMTZsMC02NC04OCAwIDAgODAgNzIgMHptMTYtMTI4bDAtODAtODggMCAwIDgwIDg4IDB6bS0xMzYgMGwwLTgwLTgwIDAgMCA4MCA4MCAwem0tMTI4IDBsMC04MC04OCAwIDAgODAgODggMHpNNDggMzUybDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDcyIDAgMC04MC04OCAwem0xMzYgMGwwIDgwIDgwIDAgMC04MC04MCAwek0xMjAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OCAzNTIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyQWx0ID0gZmFDYWxlbmRhckRheXM7CiAgICBmYUhhbmRQb2ludFVwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzU3XSwgImYwYTYiLCAiTTY0IDY0bDAgMTc3LjZjNS4yLTEgMTAuNS0xLjYgMTYtMS42bDE2IDAgMC0xNzZjMC04LjgtNy4yLTE2LTE2LTE2UzY0IDU1LjIgNjQgNjR6TTgwIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyNGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMGw0OCAwYzUyLjUgMCA5Ny4xLTMzLjcgMTEzLjQtODAuNy0zLjEgLjUtNi4yIC43LTkuNCAuNy0yMCAwLTM3LjktOS4yLTQ5LjctMjMuNi05IDQuOS0xOS40IDcuNi0zMC4zIDcuNi0xNS4xIDAtMjktNS4zLTQwLTE0LTExIDguOC0yNC45IDE0LTQwIDE0bC00MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTgwIDB6TTAgMzIwbDAgMGMwLTE4IDYtMzQuNiAxNi00OEwxNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwczY0IDI4LjcgNjQgNjRsMCA4MmM1LjEtMS4zIDEwLjUtMiAxNi0yIDI1LjMgMCA0Ny4yIDE0LjcgNTcuNiAzNiA3LTIuNiAxNC41LTQgMjIuNC00IDIwIDAgMzcuOSA5LjIgNDkuNyAyMy42IDktNC45IDE5LjQtNy42IDMwLjMtNy42IDM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCA5Mi44LTc1LjIgMTY4LTE2OCAxNjhsLTQ4IDBDNzUuMiA1MTIgMCA0MzYuOCAwIDM0NGwwLTI0em0zMzYtNjRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6TTE2MCAyNDBjNS41IDAgMTAuOSAuNyAxNiAybDAtMzRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAzMiAxNiAwem02NCAyNGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDI0eiJdCiAgICB9OwogICAgZmFIYW5kTGl6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtbGl6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNTgiLCAiTTcyIDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTUyIDBjNC41IDAgOC45IDEuMyAxMi43IDMuNmw2NCA0MGM3IDQuNCAxMS4zIDEyLjEgMTEuMyAyMC40bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMC43LTQ2LjktMjkuMy0xNDUuMSAwYy0zOS44IDAtNzItMzIuMi03Mi03MnMzMi4yLTcyIDcyLTcybDEwNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDcyIDIwOGMtMzkuOCAwLTcyLTMyLjItNzItNzJTMzIuMiA2NCA3MiA2NGwyMDkuNiAwYzQ2LjcgMCA5MC45IDIxLjUgMTE5LjcgNTguM2w3OC40IDEwMC4xYzIwLjkgMjYuNyAzMi4zIDU5LjcgMzIuMyA5My43TDUxMiA0MjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDcuOWMwLTIzLjItNy44LTQ1LjgtMjIuMS02NC4xTDM2My41IDE1MS45Yy0xOS43LTI1LjItNDkuOS0zOS45LTgxLjktMzkuOUw3MiAxMTJ6Il0KICAgIH07CiAgICBmYVNxdWFyZUZ1bGwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZ1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg5OTcsIDEyODk5OCwgMTI4OTk5LCAxMjllMywgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgImY0NWMiLCAiTTQ0OCA0OGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlUGF1c2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBhdXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIwOTIsICJwYXVzZS1jaXJjbGUiXSwgImYyOGIiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTQ0em0xMTIgMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTQ0eiJdCiAgICB9OwogICAgZmFQYXVzZUNpcmNsZSA9IGZhQ2lyY2xlUGF1c2U7CiAgICBmYUhhcmREcml2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYXJkLWRyaXZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NDM2LCAiaGRkIl0sICJmMGEwIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYyYzUuMS0xLjMgMTAuNS0yIDE2LTJsMzIwIDBjNS41IDAgMTAuOSAuNyAxNiAybDAtMTYyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNNDggMzIwbDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAzMDRjLTguOCAwLTE2IDcuMi0xNiAxNnpNMCAzMjBMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTZ6bTIxNiA0OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFIZGQgPSBmYUhhcmREcml2ZTsKICAgIGZhRmlsZVppcHBlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXppcHBlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLWFyY2hpdmUiXSwgImYxYzYiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTgwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptNjQgNTZsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdCiAgICB9OwogICAgZmFGaWxlQXJjaGl2ZSA9IGZhRmlsZVppcHBlcjsKICAgIGZhRmxvcHB5RGlzayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmbG9wcHktZGlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODE5MCwgMTI4NDI2LCAic2F2ZSJdLCAiZjBjNyIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQyLjdjMC00LjItMS43LTguMy00LjctMTEuM0wzMjAgODYuNiAzMjAgMTc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAwem04MCAwbDAgODAgMTI4IDAgMC04MC0xMjggMHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNDIuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDQyOS4zIDEyOGMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDQ0OCA0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNjAgMzIwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhU2F2ZSA9IGZhRmxvcHB5RGlzazsKICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsICJncmluLXRvbmd1ZS1zcXVpbnQiXSwgImY1OGEiLCAiTTQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4UzQ4IDE0MS4xIDQ4IDI1NmMwIDc1LjkgNDAuNyAxNDIuNCAxMDEuNSAxNzguNy0zLjYtMTAuOS01LjUtMjIuNi01LjUtMzQuN2wwLTM3LjVjLTEwLjItMTIuNi0xOC4zLTI2LjktMjMuOC00Mi40LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtNS41IDE1LjYtMTMuNiAyOS45LTIzLjggNDIuNWwwIDM3LjVjMCAxMi4xLTEuOSAyMy44LTUuNSAzNC43IDYwLjgtMzYuMyAxMDEuNS0xMDIuNyAxMDEuNS0xNzguN3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTI1LjgtNzUuN2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXMxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjN6bTI2My42LTIxLjFjNC41IDYuOCAzLjEgMTUuOS0zLjEgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41ek0zMjAgNDE2bDAtMzcuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDM3LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVNxdWludCA9IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ7CiAgICBmYUNhbWVyYSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYW1lcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjI1OCwgImNhbWVyYS1hbHQiXSwgImYwMzAiLCAiTTE5My4xIDMyYy0xOC43IDAtMzYuMiA5LjQtNDYuNiAyNC45TDEyMC41IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNTYuNSAwLTI2LTM5LjFDMzU1LjEgNDEuNCAzMzcuNiAzMiAzMTguOSAzMkwxOTMuMSAzMnptLTYuNyA1MS42YzEuNS0yLjIgNC0zLjYgNi43LTMuNmwxMjUuNyAwYzIuNyAwIDUuMiAxLjMgNi43IDMuNmwzMy4yIDQ5LjhjNC41IDYuNyAxMS45IDEwLjcgMjAgMTAuN2w2OS4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsNjkuMyAwYzggMCAxNS41LTQgMjAtMTAuN2wzMy4yLTQ5Ljh6TTI1NiAzODRhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0xOTIgMjcyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhQ2FtZXJhQWx0ID0gZmFDYW1lcmE7CiAgICBmYUZhY2VHcmluU3RhcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXN0YXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzIxLCAiZ3Jpbi1zdGFycyJdLCAiZjU4NyIsICJNMCAyNTZjMC0yOS42IDUtNTcuOSAxNC4yLTg0LjRsMTcuMyAxNi45LTQuNiAyN2MtNC4yIDI0LjQgNS42IDQ2LjIgMjIgNTkuOSA5LjggMTA1LjggOTguOCAxODguNyAyMDcuMSAxODguN3MxOTcuNC04Mi44IDIwNy4xLTE4OC42YzE2LjQtMTMuNyAyNi4xLTM1LjQgMjItNTkuOWwtNC42LTI3IDE3LjMtMTYuOWM5LjIgMjYuNCAxNC4yIDU0LjggMTQuMiA4NC40IDAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NnpNMjU2IDQ4Yy0xNS4yIDAtMzAgMS42LTQ0LjMgNC43TDIwMS40IDMxLjhDMTk3IDIzIDE5MS4xIDE1LjggMTg0LjIgMTAuMiAyMDcgMy42IDIzMS4xIDAgMjU2IDBzNDkgMy42IDcxLjggMTAuMkMzMjAuOSAxNS44IDMxNSAyMyAzMTAuNiAzMS44TDMwMC4zIDUyLjdDMjg2IDQ5LjYgMjcxLjIgNDggMjU2IDQ4ek0zNzIuMiAzMDIuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMzUzLjcgNTMuMWM1LjktMTEuOSAyMi44LTExLjkgMjguNyAwbDIzLjMgNDcuMiA1MiA3LjZjMTMuMSAxLjkgMTguNCAxOCA4LjkgMjcuM2wtMzcuNyAzNi43IDguOSA1MS44YzIuMiAxMy4xLTExLjUgMjMtMjMuMiAxNi45TDM2OCAyMTYgMzIxLjUgMjQwLjVjLTExLjcgNi4yLTI1LjUtMy44LTIzLjItMTYuOWw4LjktNTEuOC0zNy43LTM2LjdjLTkuNS05LjMtNC4zLTI1LjQgOC45LTI3LjNsNTItNy42IDIzLjMtNDcuMnptLTE5NS4zIDBsMjMuMyA0Ny4yIDUyIDcuNmMxMy4xIDEuOSAxOC40IDE4IDguOSAyNy4zbC0zNy43IDM2LjcgOC45IDUxLjhjMi4yIDEzLjEtMTEuNSAyMy0yMy4yIDE2LjlMMTQ0IDIxNiA5Ny41IDI0MC41Yy0xMS43IDYuMi0yNS41LTMuOC0yMy4yLTE2LjlsOC45LTUxLjgtMzcuNy0zNi43Yy05LjUtOS4zLTQuMy0yNS40IDguOS0yNy4zbDUyLTcuNiAyMy4zLTQ3LjJjNS45LTExLjkgMjIuOC0xMS45IDI4LjcgMHoiXQogICAgfTsKICAgIGZhR3JpblN0YXJzID0gZmFGYWNlR3JpblN0YXJzOwogICAgZmFFeWUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgImYwNmUiLCAiTTI4OCA4MEMyMjIuOCA4MCAxNjkuMiAxMDkuNiAxMjguMSAxNDcuNyA4OS42IDE4My41IDYzIDIyNiA0OS40IDI1NiA2MyAyODYgODkuNiAzMjguNSAxMjguMSAzNjQuMyAxNjkuMiA0MDIuNCAyMjIuOCA0MzIgMjg4IDQzMnMxMTguOC0yOS42IDE1OS45LTY3LjdDNDg2LjQgMzI4LjUgNTEzIDI4NiA1MjYuNiAyNTYgNTEzIDIyNiA0ODYuNCAxODMuNSA0NDcuOSAxNDcuNyA0MDYuOCAxMDkuNiAzNTMuMiA4MCAyODggODB6TTk1LjQgMTEyLjZDMTQyLjUgNjguOCAyMDcuMiAzMiAyODggMzJzMTQ1LjUgMzYuOCAxOTIuNiA4MC42YzQ2LjggNDMuNSA3OC4xIDk1LjQgOTMgMTMxLjEgMy4zIDcuOSAzLjMgMTYuNyAwIDI0LjYtMTQuOSAzNS43LTQ2LjIgODcuNy05MyAxMzEuMS00Ny4xIDQzLjctMTExLjggODAuNi0xOTIuNiA4MC42UzE0Mi41IDQ0My4yIDk1LjQgMzk5LjRjLTQ2LjgtNDMuNS03OC4xLTk1LjQtOTMtMTMxLjEtMy4zLTcuOS0zLjMtMTYuNyAwLTI0LjYgMTQuOS0zNS43IDQ2LjItODcuNyA5My0xMzEuMXpNMjg4IDMzNmM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTI5LjYtMTYuMS01NS41LTQwLTY5LjMtMS40IDU5LjctNDkuNiAxMDcuOS0xMDkuMyAxMDkuMyAxMy44IDIzLjkgMzkuNyA0MCA2OS4zIDQwem0tNzkuNi04OC40YzIuNSAuMyA1IC40IDcuNiAuNCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTIuNi0uMi01LjEtLjQtNy42LTM3LjQgMy45LTY3LjIgMzMuNy03MS4xIDcxLjF6bTQ1LjYtMTE1YzEwLjgtMyAyMi4yLTQuNSAzMy45LTQuNSA4LjggMCAxNy41IC45IDI1LjggMi42IC4zIC4xIC41IC4xIC44IC4yIDU3LjkgMTIuMiAxMDEuNCA2My43IDEwMS40IDEyNS4yIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4LTYxLjYgMC0xMTMtNDMuNS0xMjUuMi0xMDEuNC0xLjgtOC42LTIuOC0xNy41LTIuOC0yNi42IDAtMTEgMS40LTIxLjggNC0zMiAuMi0uNyAuMy0xLjMgLjUtMS45IDExLjktNDMuNCA0Ni4xLTc3LjYgODkuNS04OS41eiJdCiAgICB9OwogICAgZmFGYWNlU2FkVGVhciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC10ZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ2LCAic2FkLXRlYXIiXSwgImY1YjQiLCAiTTQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4UzQ4IDE0MS4xIDQ4IDI1NmMwIDQxLjggMTIuMyA4MC43IDMzLjYgMTEzLjMgOC4yIDQ0LjcgNDcuMyA3OC42IDk0LjMgNzguNyAyNC43IDEwLjMgNTEuNyAxNiA4MC4xIDE2IDExNC45IDAgMjA4LTkzLjEgMjA4LTIwOHpNMjg4IDM1MmMtNS41IDAtMTAuOSAuNi0xNiAxLjggMC0uNiAwLTEuMiAwLTEuOCAwLTE2LjItNC0zMS41LTExLjEtNDQuOSA4LjctMiAxNy44LTMuMSAyNy4xLTMuMSA0MC4yIDAgNzUuNyAxOS44IDk3LjUgNTAgNy43IDEwLjggNS4zIDI1LjgtNS41IDMzLjVzLTI1LjggNS4zLTMzLjUtNS41Yy0xMy4xLTE4LjItMzQuNC0zMC01OC41LTMwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMTg1LjQgMjc2LjhjNi41IDcuOCAxMi42IDE2LjEgMTguMyAyNC42IDkgMTMuNCAyMC4zIDMwLjIgMjAuMyA0Ny40IDAgMjguMy0yMS41IDUxLjItNDggNTEuMnMtNDgtMjIuOS00OC01MS4yYzAtMTcuMiAxMS4yLTM0IDIwLjMtNDcuNCA1LjctOC41IDExLjktMTYuNyAxOC4zLTI0LjYgMi40LTIuOSA1LjctNC44IDkuNC00LjhzNyAxLjkgOS40IDQuOHoiXQogICAgfTsKICAgIGZhU2FkVGVhciA9IGZhRmFjZVNhZFRlYXI7CiAgICBmYVNoYXJlRnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzaGFyZS1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxNTA5LCAic2hhcmUtc3F1YXJlIl0sICJmMTRkIiwgIk00MjUuNSA3Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzM4NC41IDE0LjMgMzg0LjUgMjRsMCA1Ni00OCAwYy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MCAwIDQ2LjcgMjAuNyA4MC40IDQzLjYgMTAzLjQgOC4xIDguMiAxNi41IDE0LjkgMjQuMyAyMC40IDkuMiA2LjUgMjEuNyA1LjcgMzAuMS0xLjlzMTAuMi0yMCA0LjUtMjkuOGMtMy42LTYuMy02LjUtMTQuOS02LjUtMjYuNyAwLTM2LjIgMjkuMy02NS41IDY1LjUtNjUuNWw0Ni41IDAgMCA1NmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsMTM2LTEzNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0MjUuNSA3em03IDk3bDAtMjIuMSA3OC4xIDc4LjEtNzguMSA3OC4xIDAtMjIuMWMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzMzggMTkyYy01MC45IDAtOTMuOSAzMy41LTEwOC4zIDc5LjYtMy4zLTkuNC01LjItMTkuOC01LjItMzEuNiAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0em0tMzIwLThjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0IDB6Il0KICAgIH07CiAgICBmYVNoYXJlU3F1YXJlID0gZmFTaGFyZUZyb21TcXVhcmU7CiAgICBmYU5vdGVTdGlja3kgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibm90ZS1zdGlja3kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjAyNiwgInN0aWNreS1ub3RlIl0sICJmMjQ5IiwgIk0yNDAgNDMyTDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNzYtODggMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA4OHpNMzgwLjEgMzIwTDI4OCA0MTIuMSAyODggMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDY4LjEgMHpNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0MjkuMyAzMzguN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2eiJdCiAgICB9OwogICAgZmFTdGlja3lOb3RlID0gZmFOb3RlU3RpY2t5OwogICAgZmFIYW5kQmFja0Zpc3QgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1iYWNrLWZpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaGFuZC1yb2NrIl0sICJmMjU1IiwgIk05NiA0MDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA0MDB6TTczLjIgMzUybDY0LjYgMC03OS41LTg4LjNDNTEuNyAyNTYuMyA0OCAyNDYuOCA0OCAyMzYuOUw0OCAyMDRjMC0xNi4xIDExLjktMjkuNSAyNy40LTMxLjcgMTEuOC0xLjcgMjAuNi0xMS44IDIwLjYtMjMuOEw5NiA3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3LjIgMCAxMy42IDMuMSAxOCA4LjEgNC42IDUuMiAxMS4xIDguMSAxOCA4LjFzMTMuNC0zIDE4LTguMWM0LjQtNSAxMC44LTguMSAxOC04LjEgOC41IDAgMTUuOSA0LjQgMjAuMiAxMS4xIDYuOSAxMC43IDIwLjkgMTQuMiAzMiA4IDMuNS0xLjkgNy40LTMuMSAxMS44LTMuMSAxMC42IDAgMTkuNyA2LjkgMjIuOCAxNi42IDMuOCAxMS43IDE1LjkgMTguNyAyOCAxNiAxLjctLjQgMy40LS42IDUuMi0uNiAxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDkyLjJjMCAxNC40LTMuNSAyOC41LTEwLjIgNDEuMmwtNTIuMiA5OC42IDU0LjMgMCA0MC4zLTc2LjJjMTAuNC0xOS42IDE1LjgtNDEuNSAxNS44LTYzLjZsMC05Mi4yYzAtMzguNC0zMC4xLTY5LjgtNjguMS03MS45LTEyLjktMTkuMy0zNC45LTMyLjEtNTkuOS0zMi4xLTUuNyAwLTExLjIgLjctMTYuNSAxLjktMTIuNy0xMS4xLTI5LjMtMTcuOS00Ny41LTE3LjktMTMuMSAwLTI1LjQgMy41LTM2IDkuNi0xMC42LTYuMS0yMi45LTkuNi0zNi05LjYtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA1OC43QzE5LjcgMTQzIDAgMTcxLjIgMCAyMDRsMCAzMi45YzAgMjEuNyA4IDQyLjcgMjIuNiA1OC45TDczLjIgMzUyeiJdCiAgICB9OwogICAgZmFIYW5kUm9jayA9IGZhSGFuZEJhY2tGaXN0OwogICAgZmFDaGVzc1F1ZWVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLXF1ZWVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgxOV0sICJmNDQ1IiwgIk0zMjUuMyA5MC44YzkuMS00LjggMjAuNi0zLjMgMjguMiA0LjNsMzkuOCAzOS44IDMuNyAzLjNjOS4xIDcuMSAyMC45IDEwIDMyLjQgNy43bDQ2LjQtOS4zIDMuNS0uNGM4LS40IDE1LjggMy4yIDIwLjYgOS44IDUuNSA3LjYgNi4xIDE3LjYgMS42IDI1LjhsLTExMi42IDIwMi42IDUxLjUgNzAuOSAxLjggMi43YzQgNi42IDYuMiAxNC4yIDYuMiAyMiAwIDIzLjMtMTguOSA0Mi4xLTQyLjEgNDIuMWwtMjk5LjggMGMtMjEuOCAwLTM5LjgtMTYuNi00MS45LTM3LjhsLS4yLTQuMyAuMS0zLjNjLjYtNy43IDMuNC0xNS4xIDcuOS0yMS40bDUxLjUtNzAuOS0xMTIuNS0yMDIuNmMtNC41LTguMi0zLjktMTguMyAxLjYtMjUuOHMxNC45LTExLjIgMjQuMS05LjRsNDYuNCA5LjNjMTMuMSAyLjYgMjYuNy0xLjUgMzYuMS0xMC45TDE1OS41IDk1IDE2MyA5Mi4yYzguNi01LjggMjAuMS01LjYgMjguNSAxLjFsNDAgMzIgMi44IDIuMWMxNC40IDkuNiAzMy41IDguOSA0Ny4yLTIuMWw0MC0zMiAzLjgtMi41ek0xNjQuNyA0MDBsLTQ2LjYgNjQgMjc2LjcgMC00Ni42LTY0LTE4My42IDB6TTMxMS41IDE2Mi44Yy0zMC4xIDI0LjEtNzIuMSAyNS42LTEwMy44IDQuNWwtNi4yLTQuNS0yMy4zLTE4LjYtMjQuNiAyNC42Yy0xOS44IDE5LjgtNDcuNyAyOC45LTc1LjEgMjQuOGw4OC4xIDE1OC41IDE3OS44IDAgODgtMTU4LjVjLTI1LjcgMy44LTUxLjctMy45LTcxLjEtMjFsLTQtMy43LTI0LjYtMjQuNi0yMy4yIDE4LjZ6TTI1Ni41IDcyYTQwIDQwIDAgMSAxIDAtODAgNDAgNDAgMCAxIDEgMCA4MHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5UZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdGVhcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg1MTQsICJncmluLXRlYXJzIl0sICJmNTg4IiwgIk01MDQuMSAzNTNDNTEyLjkgMzY3LjIgNTI1LjMgMzc5IDUzOS44IDM4Ny4yIDQ5NS4xIDQ2MiA0MTMuNCA1MTIgMzIwIDUxMlMxNDQuOSA0NjIgMTAwLjIgMzg3LjJjMTQuNi04LjIgMjYuOS0yMCAzNS44LTM0LjMgMzQuOSA2NiAxMDQuMiAxMTEgMTg0LjEgMTExczE0OS4yLTQ1IDE4NC4xLTExMXptMTYuNC0xNTIuNUM0OTYuMiAxMTIuNiA0MTUuNyA0OCAzMjAgNDhTMTQzLjggMTEyLjYgMTE5LjUgMjAwLjVjLTEwLjYtNC44LTIyLjctNi44LTM1LjQtNWwtMTMuNCAxLjlDOTcuMiA4NC4zIDE5OC44IDAgMzIwIDBTNTQyLjggODQuMyA1NjkuMyAxOTcuNGwtMTMuNC0xLjljLTEyLjctMS44LTI0LjggLjItMzUuNCA1ek00NTUuOCAzMjBjLTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44ek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAgMjguNC0yMyA1MS40LTUxLjQgNTEuNC0yNS42IDAtNDcuMy0xOC44LTUwLjktNDQuMUw1MzEgMjYxLjFjLTEuNS0xMC42IDcuNS0xOS42IDE4LjEtMTguMWw0Ni43IDYuN2MyNS4zIDMuNiA0NC4xIDI1LjMgNDQuMSA1MC45em0tNjQwIDBjMC0yNS42IDE4LjgtNDcuMyA0NC4xLTUwLjlMOTAuOSAyNDNjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0M5OC43IDMzMy4yIDc3IDM1MiA1MS40IDM1MiAyMyAzNTIgMCAzMjkgMCAzMDAuNnoiXQogICAgfTsKICAgIGZhR3JpblRlYXJzID0gZmFGYWNlR3JpblRlYXJzOwogICAgZmFQZW5Ub1NxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tdG8tc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImVkaXQiXSwgImYwNDQiLCAiTTQ0MSA1OC45TDQ1My4xIDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDQyNCAxMzQuMSAzNzcuOSA4OCA0MDcgNTguOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHpNMjA5LjggMjU2LjJMMzQ0IDEyMS45IDM5MC4xIDE2OCAyNTUuOCAzMDIuMmMtMi45IDIuOS02LjUgNS0xMC40IDYuMWwtNTguNSAxNi43IDE2LjctNTguNWMxLjEtMy45IDMuMi03LjUgNi4xLTEwLjR6TTM3My4xIDI1TDE3NS44IDIyMi4yYy04LjcgOC43LTE1IDE5LjQtMTguMyAzMS4xbC0yOC42IDEwMGMtMi40IDguNC0uMSAxNy40IDYuMSAyMy42czE1LjIgOC41IDIzLjYgNi4xbDEwMC0yOC42YzExLjgtMy40IDIyLjUtOS43IDMxLjEtMTguM0w0ODcgMTM4LjljMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44TDQ3NC45IDI1QzQ0Ni44LTMuMSA0MDEuMi0zLjEgMzczLjEgMjV6TTg4IDY0QzM5LjQgNjQgMCAxMDMuNCAwIDE1MkwwIDQyNGMwIDQ4LjYgMzkuNCA4OCA4OCA4OGwyNzIgMGM0OC42IDAgODgtMzkuNCA4OC04OGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDIyLjEtMTcuOSA0MC00MCA0MEw4OCA0NjRjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtMjcyYzAtMjIuMSAxNy45LTQwIDQwLTQwbDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDY0eiJdCiAgICB9OwogICAgZmFFZGl0ID0gZmFQZW5Ub1NxdWFyZTsKICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0tc3dlYXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg1MTcsICJncmluLWJlYW0tc3dlYXQiXSwgImY1ODMiLCAiTTUzMC4yIDE1LjljLTguOC0xMC43LTE4LjUtMjAuOS0yOS0zMC0zLTIuNi03LjQtMi42LTEwLjQgMC0xMC41IDkuMS0yMC4xIDE5LjMtMjkgMzAtMTQuNyAxNy44LTI5LjggNDAuMS0yOS44IDY0LjEgMCAzNi40IDI3LjYgNjQgNjQgNjRzNjQtMjcuNiA2NC02NGMwLTI0LTE1LjItNDYuMy0yOS44LTY0LjF6bS0xMzIgOC45QzM2NC44IDguOSAzMjcuNCAwIDI4OCAwIDE0Ni42IDAgMzIgMTE0LjYgMzIgMjU2UzE0Ni42IDUxMiAyODggNTEyIDU0NCAzOTcuNCA1NDQgMjU2YzAtMjQuNC0zLjQtNDgtOS44LTcwLjQtMTEuOSA0LjItMjQuNyA2LjQtMzguMiA2LjQtMy40IDAtNi44LS4xLTEwLjItLjQgNi42IDIwLjMgMTAuMiA0MS45IDEwLjIgNjQuNCAwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTODAgMzcwLjkgODAgMjU2IDE3My4xIDQ4IDI4OCA0OGMzNC44IDAgNjcuNSA4LjUgOTYuMyAyMy42IDEuNC0xNy40IDYuOS0zMy4xIDEzLjgtNDYuOHpNNDIzLjggMzIwYzQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOC0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCAxOS44IDU1LjkgNzMuMSA5NS45IDEzNS44IDk1LjkgNjIuNyAwIDExNi00MC4xIDEzNS44LTk2ek0xODAgMjA4YzAtMTUuNSAxMi41LTI4IDI4LTI4czI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04em0xODgtMjhjMTUuNSAwIDI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMTUuNSAxMi41LTI4IDI4LTI4eiJdCiAgICB9OwogICAgZmFHcmluQmVhbVN3ZWF0ID0gZmFGYWNlR3JpbkJlYW1Td2VhdDsKICAgIGZhQ2xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzksICJjbG9jay1mb3VyIl0sICJmMDE3IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2xvY2tGb3VyID0gZmFDbG9jazsKICAgIGZhRmFjZUxhdWdoV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtd2luayJdLCAiZjU5YyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMTguMyA1OC4yYy00LjItMTMuNyA3LjEtMjYuMiAyMS40LTI2LjJsMjMyLjYgMGMxNC4zIDAgMjUuNiAxMi41IDIxLjQgMjYuMi0xOCA1OC45LTcyLjkgMTAxLjgtMTM3LjcgMTAxLjhTMTM2LjMgMzczLjEgMTE4LjMgMzE0LjJ6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGF1Z2hXaW5rID0gZmFGYWNlTGF1Z2hXaW5rOwogICAgZmFQYXBlclBsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInBhcGVyLXBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE5MTNdLCAiZjFkOCIsICJNMjkwLjUgMjg3LjdMNDkxLjQgODYuOSAzNTkgNDU2LjMgMjkwLjUgMjg3Ljd6TTQ1Ny40IDUzTDI1Ni42IDI1My44IDg4IDE4NS4zIDQ1Ny40IDUzek0zOC4xIDIxNi44bDIwNS44IDgzLjYgODMuNiAyMDUuOGM1LjMgMTMuMSAxOC4xIDIxLjcgMzIuMyAyMS43IDE0LjcgMCAyNy44LTkuMiAzMi44LTIzLjFMNTcwLjYgOGMzLjUtOS44IDEtMjAuNi02LjMtMjhzLTE4LjItOS44LTI4LTYuM0wzOS40IDE1MS43Yy0xMy45IDUtMjMuMSAxOC4xLTIzLjEgMzIuOCAwIDE0LjIgOC42IDI3IDIxLjcgMzIuM3oiXQogICAgfTsKICAgIGZhSGVhcnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNTMsIDEyODE1NCwgMTI4MTU1LCAxMjgxNTYsIDEyODQyMCwgMTI5MjkzLCAxMjkyOTQsIDEyOTUwNSwgOTgyOSwgMTAwODQsIDYxNTc4XSwgImYwMDQiLCAiTTM3OC45IDgwYy0yNy4zIDAtNTMgMTMuMS02OSAzNS4ybC0zNC40IDQ3LjZjLTQuNSA2LjItMTEuNyA5LjktMTkuNCA5LjlzLTE0LjktMy43LTE5LjQtOS45bC0zNC40LTQ3LjZjLTE2LTIyLjEtNDEuNy0zNS4yLTY5LTM1LjItNDcgMC04NS4xIDM4LjEtODUuMSA4NS4xIDAgNDkuOSAzMiA5OC40IDY4LjEgMTQyLjMgNDEuMSA1MCA5MS40IDk0IDEyNS45IDEyMC4zIDMuMiAyLjQgNy45IDQuMiAxNCA0LjJzMTAuOC0xLjggMTQtNC4yYzM0LjUtMjYuMyA4NC44LTcwLjQgMTI1LjktMTIwLjMgMzYuMi00My45IDY4LjEtOTIuNCA2OC4xLTE0Mi4zIDAtNDctMzguMS04NS4xLTg1LjEtODUuMXpNMjcxIDg3LjFjMjUtMzQuNiA2NS4yLTU1LjEgMTA3LjktNTUuMSA3My41IDAgMTMzLjEgNTkuNiAxMzMuMSAxMzMuMSAwIDY4LjYtNDIuOSAxMjguOS03OS4xIDE3Mi44LTQ0LjEgNTMuNi05Ny4zIDEwMC4xLTEzMy44IDEyNy45LTEyLjMgOS40LTI3LjUgMTQuMS00My4xIDE0LjFzLTMwLjgtNC43LTQzLjEtMTQuMUMxNzYuNCA0MzggMTIzLjIgMzkxLjUgNzkuMSAzMzggNDIuOSAyOTQuMSAwIDIzMy43IDAgMTY1LjEgMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZTIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI1MDEsIDYyNjk0LCAiZm9udC1hd2Vzb21lLWZsYWciLCAiZm9udC1hd2Vzb21lLWxvZ28tZnVsbCJdLCAiZjJiNCIsICJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA0OCAwIDAtNjQgMzg5LjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6TTgwIDQwMGwwLTI1NiAzNTYuNCAwLTQ4LjIgMTA4LjVjLTUuNSAxMi40LTUuNSAyNi42IDAgMzlMNDM2LjQgNDAwIDgwIDQwMHoiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWVGbGFnMiA9IGZhRm9udEF3ZXNvbWUyOwogICAgZmFGb250QXdlc29tZUxvZ29GdWxsMiA9IGZhRm9udEF3ZXNvbWUyOwogICAgZmFDbG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbG9uZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjRkIiwgIk0yODggNDY0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDgtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2ek0yMjQgMzA0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwem0tNjQtMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0eiJdCiAgICB9OwogICAgZmFGb2xkZXJPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZvbGRlci1vcGVuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTk0LCAxMjg0NDksIDYxNzE3XSwgImYwN2MiLCAiTTk3LjUgNDAwbDUwLTE2MCAzNzkuNCAwLTUwIDE2MC0zNzkuNCAwem0xOTAuNyA0OEw0NzcgNDQ4YzIxIDAgMzkuNi0xMy42IDQ1LjgtMzMuN2w1MC0xNjBjOS43LTMwLjktMTMuNC02Mi4zLTQ1LjgtNjIuM2wtMzc5LjQgMGMtMjEgMC0zOS42IDEzLjYtNDUuOCAzMy43TDgwLjIgMjk0LjQgODAuMiA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTM4LjcgMGMzLjUgMCA2LjggMS4xIDkuNiAzLjJMMjgyLjkgMTEyYzEzLjggMTAuNCAzMC43IDE2IDQ4IDE2bDExNy4zIDBjOC44IDAgMTYgNy4yIDE2IDE2bDQ4IDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMzMwLjkgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI3My4zIDQ0LjhDMjYyLjIgMzYuNSAyNDguOCAzMiAyMzQuOSAzMkw5Ni4yIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMHoiXQogICAgfTsKICAgIGZhV2luZG93TWluaW1pemUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDY5XSwgImYyZDEiLCAiTTAgNDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDQ0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVN0YXJIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxNzMxXSwgImYwODkiLCAiTTI4NS43LTE1LjhjMTAuOCAyLjYgMTguNCAxMi4yIDE4LjQgMjMuM2wwIDM4Ny4xYzAgOS01LjEgMTcuMy0xMy4xIDIxLjRMMTQzLjggNDkxYy04IDQuMS0xNy43IDMuMy0yNS0ycy0xMS0xNC4yLTkuNi0yMy4yTDEzNC40IDMwNS45IDIwIDE5MS40Yy02LjQtNi40LTguNi0xNS44LTUuOC0yNC40czEwLjEtMTQuOSAxOS4xLTE2LjNMMTkzLjEgMTI1LjMgMjU4LjgtMy4zYzUtOS45IDE2LjItMTUgMjctMTIuNHpNMjU2LjEgMTA3LjRMMjMwLjMgMTU4Yy0zLjUgNi44LTEwIDExLjYtMTcuNiAxMi44bC0xMjUuNSAyMCA4OS44IDg5LjljNS40IDUuNCA3LjkgMTMuMSA2LjcgMjAuN2wtMTkuOCAxMjUuNSA5Mi4yLTQ2LjkgMC0yNzIuNnoiXQogICAgfTsKICAgIGZhQWxhcm1DbG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJhbGFybS1jbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzkyMDBdLCAiZjM0ZSIsICJNNDAyLjYgNTAuMmMtNS40IDEuNy0xMS4zIDEuOC0xNi4yLS45LTUuOC0zLjItMTEuOC02LjItMTcuOC04LjktMTAuNC00LjctMTMuNy0xOC4zLTQuMS0yNC42IDE1LTkuOSAzMy0xNS43IDUyLjMtMTUuNyA1Mi42IDAgOTUuMiA0Mi42IDk1LjIgOTUuMiAwIDEzLjItMi43IDI1LjgtNy42IDM3LjMtNC41IDEwLjUtMTguNCA5LjgtMjQuOSAuNC0zLjgtNS41LTcuOC0xMC44LTEyLTE2LTMuNS00LjQtNC41LTEwLjItMy44LTE1LjggLjItMS45IC40LTMuOSAuNC01LjkgMC0yNi4xLTIxLjItNDcuMi00Ny4yLTQ3LjItNC45IDAtOS43IC44LTE0LjIgMi4yek0zMi41IDEzMi45Yy02LjUgOS40LTIwLjUgMTAuMS0yNC45LS40LTQuOS0xMS41LTcuNi0yNC4xLTcuNi0zNy4zIDAtNTIuNiA0Mi42LTk1LjIgOTUuMi05NS4yIDE5LjMgMCAzNy4zIDUuOCA1Mi4zIDE1LjcgOS42IDYuMyA2LjMgMTkuOS00LjEgMjQuNi02LjEgMi44LTEyIDUuNy0xNy44IDguOS00LjkgMi43LTEwLjkgMi42LTE2LjIgLjktNC41LTEuNC05LjItMi4yLTE0LjItMi4yLTI2LjEgMC00Ny4yIDIxLjItNDcuMiA0Ny4yIDAgMiAuMSA0IC40IDUuOSAuNyA1LjYtLjMgMTEuNC0zLjggMTUuOC00LjIgNS4yLTguMiAxMC41LTEyIDE2ek00MzIgMjg4YTE3NiAxNzYgMCAxIDAgLTM1MiAwIDE3NiAxNzYgMCAxIDAgMzUyIDB6TTM5Ni41IDQ2Mi41QzM1OC4xIDQ5My40IDMwOS4yIDUxMiAyNTYgNTEycy0xMDIuMS0xOC42LTE0MC41LTQ5LjVMNzMgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQyLjUtNDIuNUM1MC42IDM5MC4xIDMyIDM0MS4yIDMyIDI4OCAzMiAxNjQuMyAxMzIuMyA2NCAyNTYgNjRTNDgwIDE2NC4zIDQ4MCAyODhjMCA1My4yLTE4LjYgMTAyLjEtNDkuNSAxNDAuNUw0NzMgNDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQyLjUtNDIuNXpNMjgwIDE4NGwwIDk0LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDgtNDhjLTQuNS00LjUtNy0xMC42LTctMTdsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhTmV3c3BhcGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm5ld3NwYXBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0MF0sICJmMWVhIiwgIk0xNjggODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzA0YzAgOC40LTEuNCAxNi41LTQuMSAyNEw0NDAgNDMyYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMzA0YzAtMTMuMy0xMC43LTI0LTI0LTI0TDE2OCA4MHpNNzIgNDgwYy0zOS44IDAtNzItMzIuMi03Mi03MkwwIDExMkMwIDk4LjcgMTAuNyA4OCAyNCA4OHMyNCAxMC43IDI0IDI0bDAgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMDRjMC0zOS44IDMyLjItNzIgNzItNzJsMjcyIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAzMDRjMCAzOS44LTMyLjIgNzItNzIgNzJMNzIgNDgwek0xOTIgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHptMTUyIDI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTIxNiAyNTZsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDgwbDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhSG9zcGl0YWwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG9zcGl0YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NzMsIDYyNTg5LCAiaG9zcGl0YWwtYWx0IiwgImhvc3BpdGFsLXdpZGUiXSwgImYwZjgiLCAiTTE3NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDQ4LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjcyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTc2IDB6TTE2MCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNzYgMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDgwLTE3NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNzJjMC04LjggNy4yLTE2IDE2LTE2bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC03MnpNMTEyIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek05NiAzMzZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzIwIDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYtMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTI2NCAxMDRsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsQWx0ID0gZmFIb3NwaXRhbDsKICAgIGZhSG9zcGl0YWxXaWRlID0gZmFIb3NwaXRhbDsKICAgIGZhQ2lyY2xlU3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtc3RvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCAic3RvcC1jaXJjbGUiXSwgImYyOGQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTYwIDE5MmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem00OCAxMTJsMC05NiA5NiAwIDAgOTYtOTYgMHoiXQogICAgfTsKICAgIGZhU3RvcENpcmNsZSA9IGZhQ2lyY2xlU3RvcDsKICAgIGZhT2JqZWN0VW5ncm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJvYmplY3QtdW5ncm91cCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjQ4IiwgIk00OC4yIDY2LjhjLS4xLS44LS4yLTEuNy0uMi0yLjVsMC0uMmMwLTguOCA3LjItMTYgMTYtMTYgLjkgMCAxLjkgLjEgMi44IC4yIDcuNSAxLjMgMTMuMiA3LjkgMTMuMiAxNS44IDAgOC44LTcuMiAxNi0xNiAxNi03LjkgMC0xNC41LTUuNy0xNS44LTEzLjJ6TTAgNjRjMCAyNi45IDE2LjUgNDkuOSA0MCA1OS4zbDAgMTA1LjNjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMjAxLjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMTA1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MEwxMjMuMyA0MEMxMTMuOSAxNi41IDkwLjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NHptMzY4IDBhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMzI0LjcgODhjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAxMDUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTIwMS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMTA1LjNjMTYtNi41IDI4LjktMTkuMyAzNS4zLTM1LjNsMjAxLjMgMHpNMzg0IDI3MmExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6TTgwIDI4OGMwIDcuOS01LjcgMTQuNS0xMy4yIDE1LjgtLjggLjEtMS43IC4yLTIuNSAuMmwtLjIgMGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtLjkgLjEtMS45IC4yLTIuOCAxLjMtNy41IDcuOS0xMy4yIDE1LjgtMTMuMiA4LjggMCAxNiA3LjIgMTYgMTZ6bTQzNi43LTQwYzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMTA1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0yMDEuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTIwLjctNDggMCAwIDIwLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMjAxLjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMTA1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MGwtNTIuNyAwIDAgOS42YzEwLjcgMTAuOSAxOS4xIDIzLjkgMjQuNiAzOC40bDI4IDB6bTU5LjMtOGExNiAxNiAwIDEgMSAwLTMyIDE2IDE2IDAgMSAxIDAgMzJ6TTI3MS44IDQ1MC43YTE2IDE2IDAgMSAxIC0zMS41LTUuNSAxNiAxNiAwIDEgMSAzMS41IDUuNXptMzAxLjUgMTNjLTcuNS0xLjMtMTMuMi03LjktMTMuMi0xNS44IDAtOC44IDcuMi0xNiAxNi0xNiA3LjkgMCAxNC41IDUuNyAxNS44IDEzLjJsMCAuMWMuMSAuOSAuMiAxLjggLjIgMi43IDAgOC44LTcuMiAxNi0xNiAxNi0uOSAwLTEuOS0uMS0yLjgtLjJ6Il0KICAgIH07CiAgICBmYUNvbW1lbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ4OSwgNjE2NjldLCAiZjA3NSIsICJNNTEuOSAzODQuOUMxOS4zIDM0NC42IDAgMjk0LjQgMCAyNDAgMCAxMDcuNSAxMTQuNiAwIDI1NiAwUzUxMiAxMDcuNSA1MTIgMjQwIDM5Ny40IDQ4MCAyNTYgNDgwYy0zNi41IDAtNzEuMi03LjItMTAyLjYtMjBMMzcgNTA5LjljLTMuNyAxLjYtNy41IDIuMS0xMS41IDIuMS0xNC4xIDAtMjUuNS0xMS40LTI1LjUtMjUuNSAwLTQuMyAxLjEtOC41IDMuMS0xMi4ybDQ4LjgtODkuNHptMzcuMy0zMC4yYzEyLjIgMTUuMSAxNC4xIDM2LjEgNC44IDUzLjJsLTE4IDMzLjEgNTguNS0yNS4xYzExLjgtNS4xIDI1LjItNS4yIDM3LjEtLjMgMjUuNyAxMC41IDU0LjIgMTYuNCA4NC4zIDE2LjQgMTE3LjggMCAyMDgtODguOCAyMDgtMTkyUzM3My44IDQ4IDI1NiA0OCA0OCAxMzYuOCA0OCAyNDBjMCA0Mi44IDE1LjEgODIuNCA0MS4yIDExNC43eiJdCiAgICB9OwogICAgZmFDaGVzc1Bhd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtcGF3biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjNdLCAiZjQ0MyIsICJNMTkyLTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwIDAgMjcuNi05LjMgNTIuOS0yNC45IDczLjIgOS44IDMgMTYuOSAxMi4xIDE2LjkgMjIuOCAwIDEzLjMtMTAuNyAyNC0yNCAyNGwtLjYgMCAyNC42IDE2MCA1My42IDY3YzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw2My40IDUxMmMtMjYuMiAwLTQ3LjQtMjEuMi00Ny40LTQ3LjQgMC0xMC44IDMuNy0yMS4yIDEwLjQtMjkuNmw1My42LTY3IDI0LjYtMTYwLS42IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTAuOCA3LjEtMTkuOCAxNi45LTIyLjgtMTUuNi0yMC4zLTI0LjktNDUuNi0yNC45LTczLjIgMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6TTExNS45IDQwMGwtNTEuMiA2NCAyNTQuNyAwLTUxLjItNjQtMTUyLjIgMHptMzYuMi0xODQuN2wtMjEgMTM2LjcgMTIxLjkgMC0yMS0xMzYuNy0xLjEtNy4zLTc3LjYgMC0xLjEgNy4zek0xOTIgMTZhNzIgNzIgMCAxIDAgMCAxNDQgNzIgNzIgMCAxIDAgMC0xNDR6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzEiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6bTEwNCA2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4LTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjAzXSwgImYzMjgiLCAiTTIzMiA5NmwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em0wIDQ4YzM3LjEgMCA2Ny42LTI4IDcxLjYtNjRMMzIwIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDM1MmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2LjQgMGM0IDM2IDM0LjUgNjQgNzEuNiA2NGw4MCAwek0yOTEuOSAzMkMyNzkgMTIuNyAyNTcgMCAyMzIgMEwxNTIgMGMtMjUgMC00NyAxMi43LTU5LjkgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NGwtMjguMSAweiJdCiAgICB9OwogICAgZmFUaHVtYnNEb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInRodW1icy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc4LCA2MTU3Nl0sICJmMTY1IiwgIk0zNjAgMzJsNy40IC40YzM1IDMuNiA2Mi41IDMyLjIgNjQuNCA2Ny43IDE3LjggMTEuOCAzMC4xIDMxLjQgMzIgNTMuOWwuMiA2YzAgNS43LS43IDExLjItMiAxNi41IDEwLjIgMTEuNSAxNi44IDI2LjMgMTcuOCA0Mi43bC4yIDQuOGMwIDEzLjItMy42IDI1LjQtOS44IDM2IDQuOSA4LjQgOC4yIDE3LjkgOS4zIDI4bC40IDhjMCAzNy4zLTI4LjMgNjcuOS02NC42IDcxLjZsLTcuNCAuNC0xMDkuNyAwIDE0LjEgMzAgMy4xIDcuNmMxMi41IDM1LjctMS44IDc1LjUtMzQuMiA5NWwtNy4yIDMuOWMtMzcuNSAxNy42LTgxLjcgMy42LTEwMi42LTMxLjJsLS42LS45LTIuNy01LS42LTEuMi0zMC4xLTY0Yy05LjQgMTcuOC0yOCAyOS45LTQ5LjUgMjkuOWwtMzIgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCAxNTJjMC0zMC45IDI1LjEtNTYgNTYtNTZsMzIgMGMxMi40IDAgMjMuOSA0LjEgMzMuMiAxMSAxMy4yLTIxLjQgMzItMzkuNCA1NS01MS42bDEyLjItNi41IC43LS4zIDYuNi0zLjIgLjctLjMgNy4xLTNjMTYuNy02LjYgMzQuNS05LjkgNTIuNi05LjlMMzYwIDMyek0yNTUuOSA4MGMtMTIgMC0yMy45IDIuMy0zNS4xIDYuNmwtNC43IDItNS4zIDIuNiAwIDAtMTIuMiA2LjVjLTI5LjIgMTUuNS00OC4zIDQ0LjktNTAuNyA3Ny42bC0uMiA4IDAgMTEyLjkgLjEgNC4xYy41IDguMiAyLjUgMTYuMiA2IDIzLjdsNTYuOCAxMjAuOSAyLjEgMy44YzguNCAxMy43IDI2IDE5LjEgNDAuOCAxMi4ybDIuOS0xLjZjMTMtNy44IDE4LjctMjMuNyAxMy43LTM4bC0xLjItMy0zMC4yLTY0LjJjLTMuNS03LjQtMi45LTE2LjEgMS41LTIzLjFzMTItMTEuMSAyMC4yLTExLjFsMTQ3LjUgMCAyLjQtLjFjMTEuMy0xLjEgMjAuMy0xMC4xIDIxLjQtMjEuNGwuMS0yLjVjMC03LjEtMy4xLTEzLjUtOC4yLTE4LTUuMi00LjYtOC4yLTExLjEtOC4yLTE4czMtMTMuNCA4LjItMThjNC40LTMuOSA3LjQtOS4zIDgtMTUuM2wuMi0yLjdjMC04LjQtNC40LTE1LjktMTEuMi0yMC4yLTEwLjctNi45LTE0LjItMjAuOS04LTMyIDEuNS0yLjYgMi41LTUuNiAyLjktOC42bC4yLTMuMmMwLTEwLjYtNi45LTE5LjYtMTYuNi0yMi44LTExLjctMy44LTE4LjctMTUuOS0xNi0yOCAuMi0uOSAuMy0xLjggLjQtMi42bC4yLTIuNmMwLTEyLjQtOS41LTIyLjYtMjEuNi0yMy44TDM2MCA4MCAyNTUuOSA4MHpNNTYgMTQ0Yy00LjQgMC04IDMuNi04IDhsMCAyMjRjMCA0LjQgMy42IDggOCA4bDMyIDBjNC40IDAgOC0zLjYgOC04bDAtMjI0YzAtNC40LTMuNi04LTgtOGwtMzIgMHoiXQogICAgfTsKICAgIGZhSWRCYWRnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpZC1iYWRnZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMmMxIiwgIk0yNTYgNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM4NGMwLTguOC03LjItMTYtMTYtMTZsLTY0IDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMTYwIDMyMGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw5NiA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTc0NSwgOTk4OSwgNjE1MTAsICJjaGVjay1zcXVhcmUiXSwgImYxNGEiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6bTIzMC43IDg5LjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zIDEwLjcgNy44IDEzLjEgMjIuOCA1LjMgMzMuNUwyMTEuNCAzNjYuMWMtNC4xIDUuNy0xMC41IDkuMy0xNy41IDkuOC03IC41LTEzLjktMi0xOC44LTYuOWwtNTUuOS01NS45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzYgMzYgMTA1LjYtMTQ1LjJ6Il0KICAgIH07CiAgICBmYUNoZWNrU3F1YXJlID0gZmFTcXVhcmVDaGVjazsKICAgIGZhQ2hlc3NCaXNob3AgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtYmlzaG9wIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTgyMV0sICJmNDNhIiwgIk0yMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCA4MS44IDk4LjFjMjQuNyAyOS42IDM4LjIgNjcgMzguMiAxMDUuNiAwIDQzLjctMTcuNCA4NS43LTQ4LjMgMTE2LjZsLTguNiA4LjYgNDYuNSA1OC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw0Ny40IDUxMkMyMS4yIDUxMiAwIDQ5MC44IDAgNDY0LjYgMCA0NTMuOSAzLjcgNDQzLjQgMTAuNCA0MzVsNDYuNS01OC4yLTguNi04LjZDMTcuNCAzMzcuNCAwIDI5NS40IDAgMjUxLjcgMCAyMTMuMSAxMy41IDE3NS44IDM4LjIgMTQ2LjFMMTIwIDQ4IDEwNCA0OEM5MC43IDQ4IDgwIDM3LjMgODAgMjRTOTAuNyAwIDEwNCAwTDIxNiAwek05NC40IDQwNi44bC00NS43IDU3LjIgMjIyLjcgMC00NS43LTU3LjEtNS41LTYuOS0xMjAuMyAwLTUuNSA2Ljh6TTE1Ni45IDc4LjdMNzUuMSAxNzYuOGMtMTUuMyAxOC40LTI0LjYgNDEtMjYuNyA2NC43TDQ4IDI1MS43YzAgMzEgMTIuMyA2MC43IDM0LjIgODIuN2wxNy43IDE3LjcgMTIwLjIgMGM2LjItNi4yIDEyLjEtMTIuMSAxNy44LTE3LjcgMjEuOS0yMS45IDM0LjItNTEuNiAzNC4yLTgyLjZsLS40LTEwLjJjLTEuNS0xNy02LjctMzMuMy0xNS4yLTQ4TDIwOSAyNDFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTEuOC01MS44LTYzLjctNzYuNS0zLjEtMy44LTMuMSAzLjh6Il0KICAgIH07CiAgICBmYUVudmVsb3BlT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzVdLCAiZjJiNiIsICJNNTEyIDQxNmMwIDM1LjMtMjguNSA2NC02My45IDY0TDY0IDQ4MGMtMzUuNCAwLTY0LTI4LjctNjQtNjRMMCAxNjRjLjEtMTUuNSA3LjgtMzAgMjAuNS0zOC44TDIwNi0yLjdjMzAuMS0yMC43IDY5LjgtMjAuNyA5OS45IDBMNDkxLjUgMTI1LjJjMTIuOCA4LjggMjAuNCAyMy4zIDIwLjUgMzguOGwwIDI1MnpNNjQgNDMybDM4NC4xIDBjOC44IDAgMTUuOS03LjEgMTUuOS0xNmwwLTE5MS43LTE1NC44IDExNy40Yy0zMS40IDIzLjktNzQuOSAyMy45LTEwNi40IDBMNDggMjI0LjMgNDggNDE2YzAgOC45IDcuMiAxNiAxNiAxNnpNNDYzLjYgMTY0LjRMMjc4LjcgMzYuOGMtMTMuNy05LjQtMzEuNy05LjQtNDUuNCAwTDQ4LjQgMTY0LjQgMjMxLjggMzAzLjVjMTQuMyAxMC44IDM0LjEgMTAuOCA0OC40IDBMNDYzLjYgMTY0LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMyLCAidGltZXMtY2lyY2xlIiwgInhtYXJrLWNpcmNsZSJdLCAiZjA1NyIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAweiJdCiAgICB9OwogICAgZmFUaW1lc0NpcmNsZSA9IGZhQ2lyY2xlWG1hcms7CiAgICBmYVhtYXJrQ2lyY2xlID0gZmFDaXJjbGVYbWFyazsKICAgIGZhU3F1YXJlQ2FyZXRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXVwIl0sICJmMTUxIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMjI0IDY0YzYuNyAwIDEzIDIuOCAxNy42IDcuN2wxMDQgMTEyYzYuNSA3IDguMiAxNy4yIDQuNCAyNS45UzMzNy41IDMyMCAzMjggMzIwbC0yMDggMGMtOS41IDAtMTguMi01LjctMjItMTQuNHMtMi4xLTE4LjkgNC40LTI1LjlsMTA0LTExMmM0LjUtNC45IDEwLjktNy43IDE3LjYtNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVVwID0gZmFTcXVhcmVDYXJldFVwOwogICAgZmFGaWxlSW1hZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbWFnZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0M10sICJmMWM1IiwgIk0xNzYgNDhMNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwLTg4IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtODh6TTMxNi4xIDE2MEwyMjQgNjcuOSAyMjQgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY4LjEgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMTk3LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0yNTkuNCA0MzJsLTEzNC44IDBjLTE1LjggMC0yOC42LTEyLjgtMjguNi0yOC42IDAtNi40IDIuMS0xMi41IDYtMTcuNmw2Ny42LTg2LjlDMTc1IDI5MiAxODMuMyAyODggMTkyIDI4OHMxNyA0IDIyLjQgMTAuOUwyODIgMzg1LjljMy45IDUgNiAxMS4yIDYgMTcuNiAwIDE1LjgtMTIuOCAyOC42LTI4LjYgMjguNnpNMTEyIDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1yaWdodCJdLCAiZjE1MiIsICJNNDAwIDk2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjB6TTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNFMxNjAgMzY5LjUgMTYwIDM2MGwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVSaWdodCA9IGZhU3F1YXJlQ2FyZXRSaWdodDsKICAgIGZhU3VuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInN1biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3MjhdLCAiZjE4NSIsICJNMjg4LTMyYzggMCAxNS40IDQgMTkuOSAxMC42bDU4LjggODcuNCAxMDMuNC0yMC4yYzcuOC0xLjUgMTUuOSAuOSAyMS42IDYuNnM4LjEgMTMuOCA2LjYgMjEuNkw0NzggMTc3LjMgNTY1LjQgMjM2LjFDNTcyIDI0MC41IDU3NiAyNDggNTc2IDI1NnMtNCAxNS40LTEwLjYgMTkuOUw0NzggMzM0LjcgNDk4LjIgNDM4YzEuNSA3LjgtLjkgMTUuOS02LjYgMjEuNnMtMTMuOCA4LjEtMjEuNiA2LjZMMzY2LjcgNDQ2IDMwNy45IDUzMy40QzMwMy40IDU0MCAyOTYgNTQ0IDI4OCA1NDRzLTE1LjQtNC0xOS45LTEwLjZMMjA5LjMgNDQ2IDEwNS45IDQ2Ni4yYy03LjggMS41LTE1LjktLjktMjEuNi02LjZzLTguMS0xMy44LTYuNi0yMS42TDk4IDMzNC43IDEwLjYgMjc1LjlDNCAyNzEuNCAwIDI2NCAwIDI1NnM0LTE1LjQgMTAuNi0xOS45TDk4IDE3Ny4zIDc3LjggNzMuOWMtMS41LTcuOCAuOS0xNS45IDYuNi0yMS42czEzLjgtOC4xIDIxLjYtNi42bDEwMy4zIDIwLjIgNTguOC04Ny40IDEuOC0yLjNDMjc0LjQtMjkgMjgxLTMyIDI4OC0zMnptLTQ3LjggMTM4Yy01LjQgOC0xNSAxMi0yNC41IDEwLjJsLTg0LTE2LjQgMTYuNCA4NGMxLjggOS41LTIuMiAxOS4xLTEwLjIgMjQuNUw2NyAyNTYgMTM4IDMwMy44YzggNS40IDEyIDE1IDEwLjIgMjQuNWwtMTYuNCA4NCA4NC0xNi40IDMuNS0uNGM4LjMtLjQgMTYuMyAzLjYgMjEgMTAuNmw0Ny44IDcxIDQ3LjgtNzEgMi4yLTIuOGM1LjYtNi4xIDE0LTkgMjIuMy03LjNsODQgMTYuNC0xNi40LTg0Yy0xLjgtOS41IDIuMi0xOS4xIDEwLjItMjQuNWw3MS00Ny44LTcxLTQ3LjhjLTgtNS40LTEyLTE1LTEwLjItMjQuNWwxNi40LTg0LTg0IDE2LjRjLTkuNSAxLjgtMTkuMS0yLjItMjQuNS0xMC4ybC00Ny44LTcxLTQ3LjggNzF6TTI4OCAzNzZhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQwem0wLTE5MmE3MiA3MiAwIDEgMCAwIDE0NCA3MiA3MiAwIDEgMCAwLTE0NHoiXQogICAgfTsKICAgIGZhSW1hZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzZSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTEyOCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEzNiA3MmM4LjUgMCAxNi40IDQuNSAyMC43IDExLjhsODAgMTM2YzQuNCA3LjQgNC40IDE2LjYgLjEgMjQuMVMzNTIuNiAzODQgMzQ0IDM4NGwtMjQwIDBjLTguOSAwLTE3LjItNS0yMS4zLTEyLjlzLTMuNS0xNy41IDEuNi0yNC44bDU2LTgwYzQuNS02LjQgMTEuOC0xMC4yIDE5LjctMTAuMnMxNS4yIDMuOCAxOS43IDEwLjJsMTcuMiAyNC42IDQ2LjUtNzljNC4zLTcuMyAxMi4yLTExLjggMjAuNy0xMS44eiJdCiAgICB9OwogICAgZmFMaWdodGJ1bGIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibGlnaHRidWxiIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTYxXSwgImYwZWIiLCAiTTI5Ni41IDI5MS4xQzMyMSAyNjUuMiAzMzYgMjMwLjQgMzM2IDE5MiAzMzYgMTEyLjUgMjcxLjUgNDggMTkyIDQ4UzQ4IDExMi41IDQ4IDE5MmMwIDM4LjQgMTUgNzMuMiAzOS41IDk5LjEgMjEuMyAyMi40IDQ0LjkgNTQgNTMuMyA5Mi45bDEwMi40IDBjOC40LTM5IDMyLTcwLjUgNTMuMy05Mi45em0zNC44IDMzQzMwNy43IDM0OSAyODggMzc5LjQgMjg4IDQxMy43bDAgMTguM2MwIDQ0LjItMzUuOCA4MC04MCA4MGwtMzIgMGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xOC4zQzk2IDM3OS40IDc2LjMgMzQ5IDUyLjcgMzI0LjEgMjAgMjg5LjcgMCAyNDMuMiAwIDE5MiAwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJjMCA1MS4yLTIwIDk3LjctNTIuNyAxMzIuMXpNMTQ0IDE4NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYgMzkuNC04OCA4OC04OCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6Il0KICAgIH07CiAgICBmYUFkZHJlc3NDYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImFkZHJlc3MtY2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMTQwLCAiY29udGFjdC1jYXJkIiwgInZjYXJkIl0sICJmMmJiIiwgIk01MTIgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsNDQ4IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOCAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bS0zMiA0MGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpNMzc2IDE0NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6Il0KICAgIH07CiAgICBmYUNvbnRhY3RDYXJkID0gZmFBZGRyZXNzQ2FyZDsKICAgIGZhVmNhcmQgPSBmYUFkZHJlc3NDYXJkOwogICAgZmFGYWNlTWVoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI4LCAibWVoIl0sICJmMTFhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMTc2IDI0MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xODQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhTWVoID0gZmFGYWNlTWVoOwogICAgZmFNYXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibWFwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sICJmMjc5IiwgIk01MTIgNDhjMC04LjMtNC4zLTE2LTExLjMtMjAuNHMtMTUuOS00LjgtMjMuMy0xLjFMMzUyLjUgODguMSAxODAgMjkuNGMtMTMuNy00LjctMjguNy0zLjgtNDEuOSAyLjNMMTMuOCA5MC4zQzUuNCA5NC4yIDAgMTAyLjcgMCAxMTJMMCA0NjRjMCA4LjIgNC4yIDE1LjkgMTEuMSAyMC4zczE1LjYgNC45IDIzLjEgMS40bDEyNy4zLTU5LjkgMTcwLjcgNTYuOWMxMy43IDQuNiAyOC41IDMuNyA0MS42LTIuNWwxMjQuNC01OC41YzguNC00IDEzLjgtMTIuNCAxMy44LTIxLjdsMC0zNTJ6TTE0NCA4Mi4xbDAgMjk5LTk2IDQ1LjIgMC0yOTkgOTYtNDUuMnptNDggMzAzLjNsMC0zMDEuMSAxMjggNDMuNSAwIDMwMC4zLTEyOC00Mi43ek0zNjggMTM0bDk2LTQ3LjQgMCAyOTguMi05NiA0NS4yIDAtMjk2eiJdCiAgICB9OwogICAgZmFIYW5kUG9pbnREb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGE3IiwgIk02NCA0NDhsMC0xNzcuNmM1LjIgMSAxMC41IDEuNiAxNiAxLjZsMTYgMCAwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnpNODAgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwbDQ4IDBjNTIuNSAwIDk3LjEgMzMuNyAxMTMuNCA4MC43LTMuMS0uNS02LjItLjctOS40LS43LTIwIDAtMzcuOSA5LjItNDkuNyAyMy42LTktNC45LTE5LjQtNy42LTMwLjMtNy42LTE1LjEgMC0yOSA1LjMtNDAgMTQtMTEtOC44LTI0LjktMTQtNDAtMTRsLTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtODAgMHpNMCAxOTJsMCAwYzAgMTggNiAzNC42IDE2IDQ4bDAgMjA4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC04MmM1LjEgMS4zIDEwLjUgMiAxNiAyIDI1LjMgMCA0Ny4yLTE0LjcgNTcuNi0zNiA3IDIuNiAxNC41IDQgMjIuNCA0IDIwIDAgMzcuOS05LjIgNDkuNy0yMy42IDkgNC45IDE5LjQgNy42IDMwLjMgNy42IDM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODhDMzg0IDc1LjIgMzA4LjggMCAyMTYgMEwxNjggMEM3NS4yIDAgMCA3NS4yIDAgMTY4bDAgMjR6bTMzNiA2NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NHpNMTYwIDI3MmM1LjUgMCAxMC45LS43IDE2LTJsMCAzNGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyIDE2IDB6bTY0LTI0bDAtNDBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjR6Il0KICAgIH07CiAgICBmYUZhY2VNZWhCbGFuayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLW1laC1ibGFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU2NiwgIm1laC1ibGFuayJdLCAiZjVhNCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnpNNTEyIDI1NmEyNTYgMjU2IDAgMSAxIC01MTIgMCAyNTYgMjU2IDAgMSAxIDUxMiAwek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYU1laEJsYW5rID0gZmFGYWNlTWVoQmxhbms7CiAgICBmYUZhY2VHcmluVG9uZ3VlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzksICJncmluLXRvbmd1ZSJdLCAiZjU4OSIsICJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNzQuMSAzOC44IDEzOS4yIDk3LjEgMTc2LS43LTUuMi0xLjEtMTAuNi0xLjEtMTZsMC01My41Yy0xMC4yLTEyLjYtMTguMy0yNi45LTIzLjgtNDIuNC00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTUuNSAxNS42LTEzLjYgMjkuOS0yMy44IDQyLjVsMCA1My41YzAgNS40LS40IDEwLjgtMS4xIDE2IDU4LjQtMzYuOCA5Ny4xLTEwMS45IDk3LjEtMTc2em00OCAwYzAgMTE2LjMtNzcuNiAyMTQuNi0xODMuOSAyNDUuNy0xOS41IDE2LjQtNDQuNiAyNi4zLTcyLjEgMjYuM3MtNTIuNi05LjktNzIuMS0yNi4zQzc3LjYgNDcwLjYgMCAzNzIuMyAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYgMjA4bDAtMzcuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDM3LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZSA9IGZhRmFjZUdyaW5Ub25ndWU7CiAgICBmYUZ1dGJvbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmdXRib2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTE3LCAiZnV0Ym9sLWJhbGwiLCAic29jY2VyLWJhbGwiXSwgImYxZTMiLCAiTTM4NyAyMjguM2MtNC40LTIuOC03LjYtNy05LjItMTEuOXMtMS40LTEwLjIgLjUtMTVMNDExLjYgMTE4Yy0xOS45LTIyLjQtNDQuNi00MC41LTcyLjQtNTIuN2wtNjkuMSA1Ny42Yy00IDMuMy05IDUuMS0xNC4xIDUuMXMtMTAuMi0xLjgtMTQuMS01LjFMMTcyLjggNjUuM2MtMjcuOCAxMi4yLTUyLjUgMzAuMy03Mi40IDUyLjdsMzMuNCA4My40YzEuOSA0LjggMi4xIDEwLjEgLjUgMTVzLTQuOSA5LjEtOS4yIDExLjlMNDkgMjc2LjJjMyAzMC45IDEyLjcgNTkuNyAyNy42IDg1LjJsODkuNy02YzUuMi0uMyAxMC4zIDEuMSAxNC41IDQuMnM3LjIgNy40IDguNCAxMi41bDIyIDg3LjJjMTQuNCAzLjIgMjkuNCA0LjggNDQuOCA0LjhzMzAuMy0xLjcgNDQuOC00LjhsMjItODcuMmMxLjMtNSA0LjItOS40IDguNC0xMi41czkuMy00LjUgMTQuNS00LjJsODkuNyA2YzE1LTI1LjQgMjQuNy01NC4zIDI3LjYtODUuMUwzODcgMjI4LjN6TTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnptNjIgMjIxYzguNCA2LjEgMTEuOSAxNi45IDguNyAyNi44bC0xOC4zIDU2LjNjLTMuMiA5LjktMTIuNCAxNi42LTIyLjggMTYuNmwtNTkuMiAwYy0xMC40IDAtMTkuNi02LjctMjIuOC0xNi42bC0xOC4zLTU2LjNjLTMuMi05LjkgLjMtMjAuNyA4LjctMjYuOGw0Ny45LTM0LjhjOC40LTYuMSAxOS44LTYuMSAyOC4yIDBMMzE4IDIyMXoiXQogICAgfTsKICAgIGZhRnV0Ym9sQmFsbCA9IGZhRnV0Ym9sOwogICAgZmFTb2NjZXJCYWxsID0gZmFGdXRib2w7CiAgICBmYUZhY2VTdXJwcmlzZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXN1cnByaXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU4LCAic3VycHJpc2UiXSwgImY1YzIiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS00OCA4MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhU3VycHJpc2UgPSBmYUZhY2VTdXJwcmlzZTsKICAgIGZhRm9sZGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZvbGRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE5MywgMTI4NDQ3LCA2MTcxNiwgImZvbGRlci1ibGFuayJdLCAiZjA3YiIsICJNNjQgNDAwbDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MGMwLTguOC03LjItMTYtMTYtMTZsLTE0OS4zIDBjLTE3LjMgMC0zNC4yLTUuNi00OC0xNkwyMTIuMyA4My4yYy0yLjgtMi4xLTYuMS0zLjItOS42LTMuMkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNnptMzg0IDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0eiJdCiAgICB9OwogICAgZmFGb2xkZXJCbGFuayA9IGZhRm9sZGVyOwogICAgZmFDbG91ZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3MjldLCAiZjBjMiIsICJNODAgMTkyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwIDQ3LjEgMCA4OS40IDIwLjQgMTE4LjcgNTIuNyAxMC42LTMuMSAyMS44LTQuNyAzMy4zLTQuNyA2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDEzLjItMi4xIDI1LjktNi4xIDM3LjggNDEuNiAyMS4xIDcwLjEgNjQuMyA3MC4xIDExNC4yIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC01Ni44IDMyLjktMTA1LjkgODAuNy0xMjkuNC0uNC00LjgtLjctOS43LS43LTE0LjZ6TTI0MCA4MGMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA4LjQgLjkgMTYuNiAyLjcgMjQuNSAyLjcgMTIuMS00LjMgMjQuMy0xNi4xIDI4LjEtMzguNyAxMi40LTY2LjYgNDguNy02Ni42IDkxLjQgMCA1MyA0MyA5NiA5NiA5NmwzMDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTM3LjQtMjUuNy02OC45LTYwLjUtNzcuNi03LjUtMS45LTEzLjYtNy4yLTE2LjUtMTQuM3MtMi4xLTE1LjIgMi0yMS43YzctMTEuMSAxMS0yNC4yIDExLTM4LjMgMC0zOS44LTMyLjItNzItNzItNzItMTEuMSAwLTIxLjUgMi41LTMwLjggNi45LTEwLjUgNS0yMy4xIDEuNy0yOS44LTcuOC0yMC4zLTI4LjYtNTMuNy00Ny4xLTkxLjMtNDcuMXoiXQogICAgfTsKICAgIGZhQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMwOCwgMTI4MzA5LCAxMjg5OTIsIDEyODk5MywgMTI4OTk0LCAxMjg5OTUsIDEyODk5NiwgOTY3OSwgOTg5OCwgOTg5OSwgMTEwNDQsIDYxNzA4LCA2MTkxNV0sICJmMTExIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUZhY2VHcmluU3F1aW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTgsICJncmluLXNxdWludCJdLCAiZjU4NSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42em0tMjQ5LjYtMTQzYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUdyaW5TcXVpbnQgPSBmYUZhY2VHcmluU3F1aW50OwogICAgZmFDaXJjbGVVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS11c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNDIsICJ1c2VyLWNpcmNsZSJdLCAiZjJiZCIsICJNNDA2LjUgMzk5LjZDMzg3LjQgMzUyLjkgMzQxLjUgMzIwIDI4OCAzMjBsLTY0IDBjLTUzLjUgMC05OS40IDMyLjktMTE4LjUgNzkuNi0zNS42LTM3LjMtNTcuNS04Ny45LTU3LjUtMTQzLjYgMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4czIwOCA5My4xIDIwOCAyMDhjMCA1NS43LTIxLjkgMTA2LjItNTcuNSAxNDMuNnptLTQwLjEgMzIuN0MzMzQuNCA0NTIuNCAyOTYuNiA0NjQgMjU2IDQ2NHMtNzguNC0xMS42LTExMC41LTMxLjdjNy4zLTM2LjcgMzkuNy02NC4zIDc4LjUtNjQuM2w2NCAwYzM4LjggMCA3MS4yIDI3LjYgNzguNSA2NC4zek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0yNzJhNDAgNDAgMCAxIDEgMC04MCA0MCA0MCAwIDEgMSAwIDgwem0tODgtNDBhODggODggMCAxIDAgMTc2IDAgODggODggMCAxIDAgLTE3NiAweiJdCiAgICB9OwogICAgZmFVc2VyQ2lyY2xlID0gZmFDaXJjbGVVc2VyOwogICAgZmFSZWN0YW5nbGVMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInJlY3RhbmdsZS1saXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtYWx0Il0sICJmMDIyIiwgIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTE2MCAzMjBhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTA0LTU2bDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFMaXN0QWx0ID0gZmFSZWN0YW5nbGVMaXN0OwogICAgZmFIYW5kID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMDYsIDk5OTUsICJoYW5kLXBhcGVyIl0sICJmMjU2IiwgIk0yNTYuNSAwYy0yNS4zIDAtNDcuMiAxNC43LTU3LjYgMzYtNy0yLjYtMTQuNS00LTIyLjQtNC0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE2NS41LTIuNy0yLjdjLTI1LTI1LTY1LjUtMjUtOTAuNSAwcy0yNSA2NS41IDAgOTAuNUwxMDcgNDM3YzQ4IDQ4IDExMy4xIDc1IDE4MSA3NWwxNi41IDBjMS41IDAgMy0uMSA0LjUtLjQgOTEuNy02LjIgMTY1LTc5LjQgMTcxLjEtMTcxLjEgLjMtMS41IC40LTMgLjQtNC41bDAtMTc2YzAtMzUuMy0yOC43LTY0LTY0LTY0LTUuNSAwLTEwLjkgLjctMTYgMmwwLTJjMC0zNS4zLTI4LjctNjQtNjQtNjQtNy45IDAtMTUuNCAxLjQtMjIuNCA0LTEwLjQtMjEuMy0zMi4zLTM2LTU3LjYtMzZ6bS0xNiA5Ni4xbDAtLjEgMC0zMmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE3Mi45Yy0uMSAuNi0uMSAxLjMtLjIgMS45LTMuNCA2OS43LTU5LjMgMTI1LjYtMTI5IDEyOS0uNiAwLTEuMyAuMS0xLjkgLjJMMjg4IDQ2NEMyMzIuOSA0NjQgMTgwIDQ0Mi4xIDE0MSA0MDMuMUw1My4yIDMxNS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsNDMuNyA0My43YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMmwwLTIyMy40YzAtOC44IDcuMi0xNiAxNi0xNiA4LjggMCAxNiA3LjEgMTYgMTUuOWwwIDEzNi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMzUuOXoiXQogICAgfTsKICAgIGZhSGFuZFBhcGVyID0gZmFIYW5kOwogICAgZmFUaHVtYnNVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzcsIDYxNTc1XSwgImYxNjQiLCAiTTE3MS41IDM4LjhDMTkyLjMgNCAyMzYuNS0xMCAyNzQgNy42bDcuMiAzLjhDMzE2IDMyLjMgMzMwIDc2LjUgMzEyLjQgMTE0bDAgMC0xNC4xIDMwIDEwOS43IDAgNy40IC40YzM2LjMgMy43IDY0LjYgMzQuNCA2NC42IDcxLjYgMCAxMy4yLTMuNiAyNS40LTkuOCAzNiA2LjEgMTAuNiA5LjcgMjIuOCA5LjggMzYgMCAxOC4zLTYuOSAzNC44LTE4IDQ3LjUgMS4zIDUuMyAyIDEwLjggMiAxNi41IDAgMjUuMS0xMi45IDQ3LTMyLjIgNTkuOS0xLjkgMzUuNS0yOS40IDY0LjItNjQuNCA2Ny43bC03LjQgLjQtMTA0LjEgMGMtMTggMC0zNS45LTMuNC01Mi42LTkuOWwtNy4xLTMtLjctLjMtNi42LTMuMi0uNy0uMy0xMi4yLTYuNWMtMTIuMy02LjUtMjMuMy0xNC43LTMyLjktMjQuMS00LjEgMjYuOS0yNy4zIDQ3LjQtNTUuMyA0Ny40bC0zMiAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDIwMGMwLTMwLjkgMjUuMS01NiA1Ni01NmwzMiAwYzEwLjggMCAyMC45IDMuMSAyOS41IDguNWw1MC4xLTEwNi41IC42LTEuMiAyLjctNSAuNi0uOXpNNTYgMTkyYy00LjQgMC04IDMuNi04IDhsMCAyMjRjMCA0LjQgMy42IDggOCA4bDMyIDBjNC40IDAgOC0zLjYgOC04bDAtMjI0YzAtNC40LTMuNi04LTgtOGwtMzIgMHpNMjUzLjYgNTFjLTE0LjgtNi45LTMyLjMtMS42LTQwLjcgMTJsLTIuMiA0LTU2LjggMTIwLjljLTMuNSA3LjUtNS41IDE1LjUtNiAyMy43bC0uMSA0LjIgMCAxMTIuOSAuMiA3LjljMi40IDMyLjcgMjEuNCA2Mi4xIDUwLjcgNzcuN2wxMS41IDYuMSA2LjMgMy4xYzEyLjQgNS42IDI1LjggOC41IDM5LjQgOC41bDEwNC4xIDAgMi40LS4xYzEyLjEtMS4yIDIxLjYtMTEuNSAyMS42LTIzLjlsLS4yLTIuNmMtLjEtLjktLjItMS43LS40LTIuNi0yLjctMTIuMSA0LjMtMjQuMiAxNi0yOCA5LjctMy4xIDE2LjYtMTIuMiAxNi42LTIyLjggMC00LjMtMS4xLTguMi0zLjEtMTEuOC02LjMtMTEuMS0yLjgtMjUuMiA4LTMyIDYuOC00LjMgMTEuMi0xMS44IDExLjItMjAuMiAwLTcuMS0zLjEtMTMuNS04LjItMTgtNS4yLTQuNi04LjItMTEuMS04LjItMThzMy0xMy40IDguMi0xOGM1LjEtNC41IDguMi0xMC45IDguMi0xOGwtLjEtMi40Yy0xLjEtMTEuMy0xMC4xLTIwLjMtMjEuNC0yMS40bC0yLjQtLjEtMTQ3LjUgMGMtOC4yIDAtMTUuOC00LjItMjAuMi0xMS4xLTQuNC02LjktNS0xNS43LTEuNS0yMy4xTDI2OSA5My42YzctMTUgMS40LTMyLjctMTIuNS00MUwyNTMuNiA1MXoiXQogICAgfTsKICAgIGZhQnVpbGRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc5NzAsIDYxNjg3XSwgImYxYWQiLCAiTTY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDgwIDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAgODAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zODRjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDQ4ek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTk2IDQ4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI0MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNoZXNzUm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1yb29rIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyMF0sICJmNDQ3IiwgIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEzOC43YzAgMTMuOC00LjUgMjcuMy0xMi44IDM4LjRsLTM1LjIgNDYuOSAwIDExMiA0MC44IDY4LjFjNC43IDcuOCA3LjIgMTYuNyA3LjIgMjUuOCAwIDI3LjctMjIuNCA1MC4xLTUwLjEgNTAuMUw1MC4xIDUxMmMtMjcuNyAwLTUwLjEtMjIuNC01MC4xLTUwLjEgMC05LjEgMi41LTE4IDcuMi0yNS44TDQ4IDM2OCA0OCAyNTYgMTIuOCAyMDkuMUM0LjUgMTk4IDAgMTg0LjUgMCAxNzAuN0wwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMHpNNDguMyA0NjAuOGwtLjMgMS4xYzAgMS4yIDEgMi4xIDIuMSAyLjFsMjgzLjggMGMxLjIgMCAyLjEtMSAyLjEtMi4xbC0uMy0xLjEtMzYuNS02MC44LTIxNC40IDAtMzYuNSA2MC44ek00OCAxNzAuN2MwIDIuNiAuNiA1LjEgMS44IDcuNGwxLjQgMi4yIDAgMCAzNS4yIDQ2LjkgOS42IDEyLjggMCAxMTIgMTkyIDAgMC0xMTIgOS42LTEyLjggMzUuMi00Ni45IDAgMCAxLjQtMi4yYzEuMi0yLjMgMS44LTQuOCAxLjgtNy40bDAtMTIyLjctNjQgMCAwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjQtNjQgMCAwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjQtNjQgMCAwIDEyMi43eiJdCiAgICB9OwogICAgZmFDaXJjbGVRdWVzdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcXVlc3Rpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEwOCwgInF1ZXN0aW9uLWNpcmNsZSJdLCAiZjA1OSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYtODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCA0Ny4yLTM2IDY3LjItNTYgNzQuNWwwIDMuOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTguMWMwLTIwLjUgMTQuOC0zNS4yIDMwLjEtNDAuMiA2LjQtMi4xIDEzLjItNS41IDE4LjItMTAuMyA0LjMtNC4yIDcuNy0xMCA3LjctMTkuNiAwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjI0IDM2OGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFRdWVzdGlvbkNpcmNsZSA9IGZhQ2lyY2xlUXVlc3Rpb247CiAgICBmYUZpbGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE5NiwgMTI4NDU5LCA2MTQ2Ml0sICJmMTViIiwgIk0xNzYgNDhMNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwLTg4IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtODh6TTMxNi4xIDE2MEwyMjQgNjcuOSAyMjQgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY4LjEgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMTk3LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdCiAgICB9OwogICAgZmFGYWNlU2FkQ3J5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc2FkLWNyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NywgInNhZC1jcnkiXSwgImY1YjMiLCAiTTQwMCA0MDYuMUw0MDAgMjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTUyLjZjLTI4LjcgMTUtNjEuNCAyMy40LTk2IDIzLjRzLTY3LjMtOC41LTk2LTIzLjRMMTYwIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExOC4xQzcyLjYgMzY4LjIgNDggMzE1IDQ4IDI1NiA0OCAxNDEuMSAxNDEuMSA0OCAyNTYgNDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU5LTI0LjYgMTEyLjItNjQgMTUwLjF6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNTIgMTk2bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTcyIDIwYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwek0yMDggMzM2bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFTYWRDcnkgPSBmYUZhY2VTYWRDcnk7CiAgICBmYUNhbGVuZGFyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItbWludXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MiIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMzIgMTM2bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhRmFjZVRpcmVkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtdGlyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTUsICJ0aXJlZCJdLCAiZjVjOCIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzYuNSA2NC4zQzE5Ni4xIDMwMi4xIDIyMy44IDI4OCAyNTYgMjg4czU5LjkgMTQuMSA3OS41IDMyLjNjMTkgMTcuOCAzMi41IDQxLjcgMzIuNSA2My43IDAgNS40LTIuNyAxMC40LTcuMiAxMy40cy0xMC4yIDMuNC0xNS4yIDEuM2wtMTcuMi03LjVjLTIyLjgtMTAtNDcuNS0xNS4xLTcyLjQtMTUuMXMtNDkuNiA1LjItNzIuNCAxNS4xbC0xNy4yIDcuNWMtNC45IDIuMi0xMC43IDEuNy0xNS4yLTEuM3MtNy4yLTgtNy4yLTEzLjRjMC0yMiAxMy41LTQ1LjkgMzIuNS02My43ek0xMjIuNiAxNTkuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFUaXJlZCA9IGZhRmFjZVRpcmVkOwogICAgZmFIYW5kUG9pbnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYTQiLCAiTTQ0OCAxMjhsLTE3Ny42IDBjMSA1LjIgMS42IDEwLjUgMS42IDE2bDAgMTYgMTc2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZ6TTIyNCAxNDRjMC0xNy43LTE0LjMtMzItMzItMzJsLTI0IDBjLTY2LjMgMC0xMjAgNTMuNy0xMjAgMTIwbDAgNDhjMCA1Mi41IDMzLjcgOTcuMSA4MC43IDExMy40LS41LTMuMS0uNy02LjItLjctOS40IDAtMjAgOS4yLTM3LjkgMjMuNi00OS43LTQuOS05LTcuNi0xOS40LTcuNi0zMC4zIDAtMTUuMSA1LjMtMjkgMTQtNDAtOC44LTExLTE0LTI0LjktMTQtNDBsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwek0xOTIgNjRsMCAwYzE4IDAgMzQuNiA2IDQ4IDE2bDIwOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC04MiAwYzEuMyA1LjEgMiAxMC41IDIgMTYgMCAyNS4zLTE0LjcgNDcuMi0zNiA1Ny42IDIuNiA3IDQgMTQuNSA0IDIyLjQgMCAyMC05LjIgMzcuOS0yMy42IDQ5LjcgNC45IDkgNy42IDE5LjQgNy42IDMwLjMgMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTg4IDBDNzUuMiA0NDggMCAzNzIuOCAwIDI4MGwwLTQ4QzAgMTM5LjIgNzUuMiA2NCAxNjggNjRsMjQgMHptNjQgMzM2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDY0IDB6bTE2LTE3NmMwIDUuNS0uNyAxMC45LTIgMTZsMzQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMCAwIDE2em0tMjQgNjRsLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNjQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMjQgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlVXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjcsICJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sICJmMzViIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTExLjMtMzg3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMDQgMTA0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40czguMyA5LjkgMTQuOCA5LjlsNzIgMCAwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTA0IDcyIDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTEwNC0xMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlVXAgPSBmYUNpcmNsZVVwOwogICAgZmFIYW5kU2Npc3NvcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU3IiwgIk0uMiAyNzYuM2MtMS4yLTM1LjMgMjYuNC02NSA2MS43LTY2LjJsMy4zLS4xLTguMi0xLjhDMjIuNSAyMDAuNSAuNyAxNjYuMyA4LjMgMTMxLjhTNTAuMiA3NS41IDg0LjcgODMuMmwxNzMgMzguM2MyLjMtMi45IDQuNi01LjcgNy4xLTguNWwxOC40LTIwLjNDMjk5LjkgNzQuNSAzMjMuNSA2NCAzNDguMyA2NGwxMC4yIDBjNTQuMSAwIDEwNC4xIDI4LjcgMTMxLjMgNzUuNGwxLjUgMi42YzEzLjYgMjMuMiAyMC43IDQ5LjcgMjAuNyA3Ni42TDUxMiAzNDRjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTEwNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIuOCAuMi01LjYgLjUtOC4zLTE5LjQtMTEtMzIuNS0zMS44LTMyLjUtNTUuNyAwLS44IDAtMS42IDAtMi40TDY2LjQgMzM4Yy0zNS4zIDEuMi02NS0yNi40LTY2LjItNjEuN3ptNjMuNC0xOC4yYy04LjggLjMtMTUuNyA3LjctMTUuNCAxNi42czcuNyAxNS43IDE2LjUgMTUuNGwxNjEuNS01LjZjOS44LS4zIDE4LjcgNS4zIDIyLjcgMTQuMnMyLjIgMTkuMy00LjUgMjYuNGMtMi44IDIuOS00LjQgNi43LTQuNCAxMSAwIDguOCA3LjIgMTYgMTYgMTYgOS4xIDAgMTcuNCA1LjEgMjEuNSAxMy4zczMuMiAxNy45LTIuMyAyNS4xYy0yIDIuNy0zLjIgNi0zLjIgOS42IDAgOC44IDcuMiAxNiAxNiAxNmwxMDQgMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTEyNS40YzAtMTguNC00LjktMzYuNS0xNC4yLTUyLjRsLTEuNS0yLjZjLTE4LjYtMzItNTIuOC01MS42LTg5LjgtNTEuNmwtMTAuMiAwYy0xMS4zIDAtMjIgNC44LTI5LjYgMTMuMWwwIDAtMTguNCAyMC4zYy0uNiAuNi0xLjEgMS4zLTEuNyAxLjlsNTcgMTMuMmM4LjYgMiAxNCAxMC42IDEyIDE5LjJzLTEwLjYgMTQtMTkuMiAxMkwyNjIuOCAxNzEuOCA3NC4zIDEzMGMtOC42LTEuOS0xNy4yIDMuNS0xOS4xIDEyLjJzMy41IDE3LjIgMTIuMiAxOS4xbDE4Ny41IDQxLjZjMTAuMiAyLjMgMTcuOCAxMC45IDE4LjcgMjEuNGwuMSAxYy42IDYuNi0xLjUgMTMuMS01LjggMTguMXMtMTAuNiA3LjktMTcuMiA4LjJMNjMuNiAyNTguMXoiXQogICAgfTsKICAgIGZhR2VtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImdlbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0Ml0sICJmM2E1IiwgIk0xNjguNSA3Mmw4Ny41IDkzIDg3LjUtOTMtMTc1IDB6TTM4My45IDk5LjFsLTcyLjMgNzYuOSAxMjkgMC01Ni42LTc2Ljl6bTUwIDEyNC45TDc4LjEgMjI0IDI1NiA0MjAuMyA0MzMuOSAyMjR6TTcxLjUgMTc2bDEyOSAwLTcyLjMtNzYuOS01Ni42IDc2Ljl6bTQzNC4zIDQwLjFsLTIzMiAyNTZjLTQuNSA1LTExIDcuOS0xNy44IDcuOXMtMTMuMi0yLjktMTcuOC03LjlsLTIzMi0yNTZjLTcuNy04LjUtOC4zLTIxLjItMS41LTMwLjRsMTEyLTE1MmM0LjUtNi4xIDExLjctOS44IDE5LjMtOS44bDI0MCAwYzcuNiAwIDE0LjggMy42IDE5LjMgOS44bDExMiAxNTJjNi44IDkuMiA2LjEgMjEuOS0xLjUgMzAuNHoiXQogICAgfTsKICAgIGZhUmVjdGFuZ2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsICJyZWN0YW5nbGUtdGltZXMiLCAidGltZXMtcmVjdGFuZ2xlIiwgIndpbmRvdy1jbG9zZSJdLCAiZjQxMCIsICJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0zMzQuMSA0OS45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00NC4xIDQ0LjEgNDQuMSA0NC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ0LjEtNDQuMS00NC4xIDQ0LjFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDQuMS00NC4xLTQ0LjEtNDQuMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ0LjEgNDQuMSA0NC4xLTQ0LjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVRpbWVzID0gZmFSZWN0YW5nbGVYbWFyazsKICAgIGZhVGltZXNSZWN0YW5nbGUgPSBmYVJlY3RhbmdsZVhtYXJrOwogICAgZmFXaW5kb3dDbG9zZSA9IGZhUmVjdGFuZ2xlWG1hcms7CiAgICBmYVRyYXNoQ2FuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNDYwLCAidHJhc2gtYWx0Il0sICJmMmVkIiwgIk0xNjYuMi0xNmMtMTMuMyAwLTI1LjMgOC4zLTMwIDIwLjhMMTIwIDQ4IDI0IDQ4QzEwLjcgNDggMCA1OC43IDAgNzJTMTAuNyA5NiAyNCA5Nmw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMC0xNi4yLTQzLjJDMzA3LjEtNy43IDI5NS4yLTE2IDI4MS44LTE2TDE2Ni4yLTE2ek0zMiAxNDRsMCAzMDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMDQtNDggMCAwIDMwNGMwIDguOC03LjIgMTYtMTYgMTZMOTYgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMDQtNDggMHptMTYwIDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzZ6bTExMiAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzZ6Il0KICAgIH07CiAgICBmYVRyYXNoQWx0ID0gZmFUcmFzaENhbjsKICAgIGZhTGlmZVJpbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibGlmZS1yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2QiLCAiTTM4NS4xIDQxOS4xQzM0OS43IDQ0Ny4yIDMwNC44IDQ2NCAyNTYgNDY0cy05My43LTE2LjgtMTI5LjEtNDQuOWw4MC40LTgwLjRjMTQuMyA4LjQgMzEgMTMuMyA0OC44IDEzLjNzMzQuNS00LjggNDguOC0xMy4zbDgwLjQgODAuNHptNjguMSAuMkM0ODkuOSAzNzQuOSA1MTIgMzE4LjEgNTEyIDI1NlM0ODkuOSAxMzcuMSA0NTMuMiA5Mi43TDQ2NSA4MWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQxOS4zIDU4LjhDMzc0LjkgMjIuMSAzMTguMSAwIDI1NiAwUzEzNy4xIDIyLjEgOTIuNyA1OC44TDgxIDQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMzNy43IDcxLjYgNDcgODFMNTguOCA5Mi43QzIyLjEgMTM3LjEgMCAxOTMuOSAwIDI1NlMyMi4xIDM3NC45IDU4LjggNDE5LjNMNDcgNDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTEuOC0xMS44QzEzNy4xIDQ4OS45IDE5My45IDUxMiAyNTYgNTEyczExOC45LTIyLjEgMTYzLjMtNTguOEw0MzEgNDY1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTEuOC0xMS44em0tMzQuMS0zNC4xbC04MC40LTgwLjRjOC40LTE0LjMgMTMuMy0zMSAxMy4zLTQ4LjhzLTQuOC0zNC41LTEzLjMtNDguOGw4MC40LTgwLjRDNDQ3LjIgMTYyLjMgNDY0IDIwNy4yIDQ2NCAyNTZzLTE2LjggOTMuNy00NC45IDEyOS4xek0zODUuMSA5Mi45bC04MC40IDgwLjRjLTE0LjMtOC40LTMxLTEzLjMtNDguOC0xMy4zcy0zNC41IDQuOC00OC44IDEzLjNMMTI2LjkgOTIuOUMxNjIuMyA2NC44IDIwNy4yIDQ4IDI1NiA0OHM5My43IDE2LjggMTI5LjEgNDQuOXpNMTczLjMgMzA0LjhMOTIuOSAzODUuMUM2NC44IDM0OS43IDQ4IDMwNC44IDQ4IDI1NnMxNi44LTkzLjcgNDQuOS0xMjkuMWw4MC40IDgwLjRjLTguNCAxNC4zLTEzLjMgMzEtMTMuMyA0OC44czQuOCAzNC41IDEzLjMgNDguOHpNMjA4IDI1NmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFDb3B5cmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29weXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgImYxZjkiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjA1LjEgMzA2LjljLTI4LjEtMjguMS0yOC4xLTczLjcgMC0xMDEuOHM3My43LTI4LjEgMTAxLjggMGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjljLTQ2LjktNDYuOS0xMjIuOC00Ni45LTE2OS43IDBzLTQ2LjkgMTIyLjggMCAxNjkuNyAxMjIuOCA0Ni45IDE2OS43IDBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMjguMSAyOC4xLTczLjcgMjguMS0xMDEuOCAweiJdCiAgICB9OwogICAgZmFDaXJjbGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4NDAsICJhcnJvdy1hbHQtY2lyY2xlLWxlZnQiXSwgImYzNTkiLCAiTTQ4IDI1NmEyMDggMjA4IDAgMSAxIDQxNiAwIDIwOCAyMDggMCAxIDEgLTQxNiAwem00NjQgMGEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0xMjQuNyAyNDQuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsMTA0IDEwNGM0LjYgNC42IDExLjUgNS45IDE3LjQgMy41czkuOS04LjMgOS45LTE0LjhsMC03MiAxMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMDQgMCAwLTcyYzAtNi41LTMuOS0xMi4zLTkuOS0xNC44cy0xMi45LTEuMS0xNy40IDMuNWwtMTA0IDEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0ID0gZmFDaXJjbGVMZWZ0OwogICAgZmFDYWxlbmRhciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODE5NywgMTI4MTk4XSwgImYxMzMiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4IDM1MiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHpNNDggMjI0bDAgMTkyYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xOTItMzUyIDB6Il0KICAgIH07CiAgICBmYUZhY2VGcm93bk9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mcm93bi1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTUwLCAiZnJvd24tb3BlbiJdLCAiZjU3YSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRnJvd25PcGVuID0gZmFGYWNlRnJvd25PcGVuOwogICAgZmFDaGFydEJhciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1iYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYmFyLWNoYXJ0Il0sICJmMDgwIiwgIk00OCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDQyLjcgMCA1NkwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4MCA0MzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDQ4IDU2em0xMDQgNzJsMjA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTUyIDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0wIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI3MiAweiJdCiAgICB9OwogICAgZmFCYXJDaGFydCA9IGZhQ2hhcnRCYXI7CiAgICBmYUhvdXNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvdXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTY4LCA2MzQ5OCwgNjM1MDAsICJob21lIiwgImhvbWUtYWx0IiwgImhvbWUtbGctYWx0Il0sICJmMDE1IiwgIk0yNDAgNi4xYzkuMS04LjIgMjIuOS04LjIgMzIgMGwyMzIgMjA4YzkuOSA4LjggMTAuNyAyNCAxLjggMzMuOXMtMjQgMTAuNy0zMy45IDEuOGwtOC03LjIgMCAyMDUuM2MwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjA1LjMtOCA3LjJjLTkuOSA4LjgtMjUgOC0zMy45LTEuOHMtOC0yNSAxLjgtMzMuOUwyNDAgNi4xem0xNiA1MC4xTDk2IDE5OS43IDk2IDQ0OGMwIDguOCA3LjIgMTYgMTYgMTZsNDggMCAwLTEwNGMwLTM5LjggMzIuMi03MiA3Mi03Mmw0OCAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMTA0IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQ4LjMtMTYwLTE0My40ek0yMDggNDY0bDk2IDAgMC0xMDRjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTA0eiJdCiAgICB9OwogICAgZmFIb21lID0gZmFIb3VzZTsKICAgIGZhSG9tZUFsdCA9IGZhSG91c2U7CiAgICBmYUhvbWVMZ0FsdCA9IGZhSG91c2U7CiAgICBmYUZhY2VGcm93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgImZyb3duIl0sICJmMTE5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTMzNC43IDM4NC42QzMxOS43IDM2OSAyOTMuNiAzNTIgMjU2IDM1MnMtNjMuNyAxNy03OC43IDMyLjZjLTkuMiA5LjYtMjQuNCA5LjktMzMuOSAuN3MtOS45LTI0LjQtLjctMzMuOWMyMi4xLTIzIDYwLTQ3LjQgMTEzLjMtNDcuNHM5MS4yIDI0LjQgMTEzLjMgNDcuNGM5LjIgOS42IDguOSAyNC44LS43IDMzLjlzLTI0LjggOC45LTMzLjktLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRnJvd24gPSBmYUZhY2VGcm93bjsKICAgIGZhVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NCwgNjI0NzAsICJ1c2VyLWFsdCIsICJ1c2VyLWxhcmdlIl0sICJmMDA3IiwgIk0xNDQgMTI4YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHptMjA4IDBhMTI4IDEyOCAwIDEgMCAtMjU2IDAgMTI4IDEyOCAwIDEgMCAyNTYgMHpNNDggNDgwYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDk2IDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2bC05NiAwQzc4LjggMzA0IDAgMzgyLjggMCA0ODBsMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04eiJdCiAgICB9OwogICAgZmFVc2VyQWx0ID0gZmFVc2VyOwogICAgZmFVc2VyTGFyZ2UgPSBmYVVzZXI7CiAgICBmYVNub3dmbGFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzbm93Zmxha2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDA1MiwgMTAwNTRdLCAiZjJkYyIsICJNMjgwLjEtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDc4LjEtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTcgNTcgMCA3Ni41LTY2LjItMzguMi0yMC45LTc3LjhjLTMuNC0xMi44LTE2LjYtMjAuNC0yOS40LTE3Uzk1LjIgOTggOTguNyAxMTAuOGw4LjQgMzEuNS02Ny42LTM5QzI4IDk2LjYgMTMuMyAxMDAuNSA2LjcgMTEyUzQgMTM4LjIgMTUuNSAxNDQuOGw2Ny42IDM5LTMxLjUgOC40Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w3Ny44LTIwLjkgNjYuMiAzOC4yLTY2LjIgMzguMi03Ny44LTIwLjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDMxLjUgOC40LTY3LjYgMzlDNCAzNzMuOCAuMSAzODguNSA2LjcgNDAwczIxLjMgMTUuNCAzMi44IDguOGw2Ny42LTM5LTguNCAzMS41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wyMC45LTc3LjggNjYuMi0zOC4yIDAgNzYuNS01NyA1N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgNzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzguMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtNzYuNSA2Ni4yIDM4LjIgMjAuOSA3Ny44YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC04LjQtMzEuNSA2Ny42IDM5YzExLjUgNi42IDI2LjIgMi43IDMyLjgtOC44czIuNy0yNi4yLTguOC0zMi44bC02Ny42LTM5IDMxLjUtOC40YzEyLjgtMy40IDIwLjQtMTYuNiAxNy0yOS40cy0xNi42LTIwLjQtMjkuNC0xN2wtNzcuOCAyMC45LTY2LjItMzguMiA2Ni4yLTM4LjIgNzcuOCAyMC45YzEyLjggMy40IDI2LTQuMiAyOS40LTE3cy00LjItMjYtMTctMjkuNGwtMzEuNS04LjQgNjcuNi0zOWMxMS41LTYuNiAxNS40LTIxLjMgOC44LTMyLjhzLTIxLjMtMTUuNC0zMi44LTguOGwtNjcuNiAzOSA4LjQtMzEuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTIwLjkgNzcuOC02Ni4yIDM4LjIgMC03Ni41IDU3LTU3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzIDAtNzguMXoiXQogICAgfTsKICAgIGZhQm9va21hcmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYm9va21hcmsiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzgsIDYxNTkxXSwgImYwMmUiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDE3LjFjMCAyNS42LTI4LjUgNDAuOC00OS44IDI2LjZMMTkyIDQxMi44IDQ5LjggNTA3LjdDMjguNSA1MjEuOSAwIDUwNi42IDAgNDgxLjFMMCA2NHpNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4Ny4yIDExNy40LTc4LjJjMTYuMS0xMC43IDM3LjEtMTAuNyA1My4yIDBMMzM2IDQ1MS4yIDMzNiA2NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtbGVmdCJdLCAiZjE5MSIsICJNNDggNDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjB6bTE2IDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MHptNjQtMjI0YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40UzI4OCAxNDIuNSAyODggMTUybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZUxlZnQgPSBmYVNxdWFyZUNhcmV0TGVmdDsKICAgIGZhSGFuZHNoYWtlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTMwOSwgNjI2NjIsICJoYW5kc2hha2UtYWx0IiwgImhhbmRzaGFrZS1zaW1wbGUiXSwgImYyYjUiLCAiTTU5OC4xIDc1LjRjMTAuNy03LjggMTMuMS0yMi44IDUuMy0zMy41cy0yMi44LTEzLjEtMzMuNS01LjNsLTc0LjUgNTQuMi05LjktNi42QzQ2NS44IDcxIDQ0Mi42IDY0IDQxOC45IDY0bC01OS4yIDAtLjQgMC0xNDMuNiAwYy0yNi43IDAtNTIuNSA4LjktNzMuNCAyNS4xTDcwLjEgMzYuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNzLTUuNCAyNS43IDUuMyAzMy41bDg4IDY0YzkuNiA2LjkgMjIuNyA1LjkgMzEuMS0yLjRsMy45LTMuOWMxMy41LTEzLjUgMzEuOC0yMS4xIDUwLjktMjEuMWw0Ni4zIDAtOTEuNyA5MS43Yy0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNmwuOCAuOEMyMTggMzA4IDI5NCAzMDggMzQwLjkgMjYxLjFsMjcuMS0yNy4xIDk3LjggOTcuOGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtOS44IDkuOC0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwyOCAyOGMtMTcuNSAxMC40LTM3LjIgMTYuNy01Ny42IDE4LjVMMzEzIDM5OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS0zLjggMGMtMzYuMSAwLTcwLjctMTQuMy05Ni4yLTM5LjhMNjUgMjc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDE2MC4yIDQ0Mi4xYzM0LjUgMzQuNSA4MS4zIDUzLjkgMTMwLjEgNTMuOWw1MS44IDAgMSAxIDEtMSA1LjcgMGM0OC44IDAgOTUuNi0xOS40IDEzMC4xLTUzLjlsMTkuOS0xOS45YzEuMi0xLjIgMi4zLTIuMyAzLjQtMy41IC43LS41IDEuMy0xLjEgMS45LTEuN0w2MDkgMzEzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTUzLjggNTMuOGMtNC4yLTEyLjgtMTEuMy0yNC45LTIxLjUtMzUuMUwzODUgMTgzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNDQuMSA0NC4xYy0yNi41IDI2LjUtNjguNSAyOC05Ni43IDQuNmw5OC43LTk4LjdjMTMuNC0xMy40IDMxLjYtMjEgNTAuNi0yMS4xbDguNSAwIC4yIDAgNTAuOCAwYzE0LjIgMCAyOC4xIDQuMiAzOS45IDEyLjFMNDgyLjcgMTQwYzguNCA1LjYgMTkuMyA1LjMgMjcuNC0uNmw4OC02NHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlQWx0ID0gZmFIYW5kc2hha2U7CiAgICBmYUhhbmRzaGFrZVNpbXBsZSA9IGZhSGFuZHNoYWtlOwogICAgZmFGYWNlU21pbGVXaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMSwgInNtaWxlLXdpbmsiXSwgImY0ZGEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhU21pbGVXaW5rID0gZmFGYWNlU21pbGVXaW5rOwogICAgZmFGYWNlR3JpblNxdWludFRlYXJzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1zcXVpbnQtdGVhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMTUsICJncmluLXNxdWludC10ZWFycyJdLCAiZjU4NiIsICJNNDAzLjEgNDAzLjFjNjcuMi02Ny4yIDc4LjgtMTY4LjkgMzQuOS0yNDhsMzYuNy01LjJjNC41LS42IDguOC0xLjYgMTMuMS0yLjggNDQuNiA5NC45IDI3LjcgMjExLjUtNTAuNyAyOTBzLTE5NS4xIDk1LjMtMjkwIDUwLjdjMS4yLTQuMiAyLjEtOC42IDIuOC0xMy4xbDUuMi0zNi43Yzc5LjEgNDMuOSAxODAuOCAzMi4zIDI0OC0zNC45ek03NSA3NWM3OC40LTc4LjQgMTk1LjEtOTUuMyAyOTAtNTAuNy0xLjIgNC4yLTIuMSA4LjYtMi44IDEzLjFsLTUuMiAzNi43Yy03OS4xLTQzLjktMTgwLjgtMzIuMy0yNDggMzQuOXMtNzguOCAxNjguOS0zNC45IDI0OGwtMzYuNyA1LjJjLTQuNSAuNi04LjggMS42LTEzLjEgMi44LTQ0LjYtOTQuOS0yNy43LTIxMS41IDUwLjctMjkwek0zNzAuOSAyMDYuNWM1LjgtMTAuOSAyMS4xLTEyLjQgMjYuNC0xLjMgMjUuNiA1My41IDE2LjIgMTE5LjYtMjguMiAxNjMuOS00NC4zIDQ0LjMtMTEwLjMgNTMuNy0xNjMuOCAyOC4yLTExLjEtNS4zLTkuNi0yMC42IDEuMy0yNi40IDMyLTE3LjEgNjQuMi00MC44IDkzLjgtNzAuNCAyOS43LTI5LjcgNTMuNC02MS45IDcwLjUtOTR6TTkzLjMgMjgxLjljLTEuNy04IDIuOS0xNS45IDEwLjYtMTguNGw4NC42LTI4YzUuNy0xLjkgMTIuMS0uNCAxNi4zIDMuOXM1LjggMTAuNiAzLjkgMTYuM2wtMjggODQuNmMtMi42IDcuNy0xMC41IDEyLjMtMTguNCAxMC42cy0xMy40LTktMTIuNy0xNy4xbDMuOS00My4xLTQzLjEgMy45Yy04LjEgLjctMTUuNS00LjctMTcuMS0xMi43ek0yOTQuNiAxMTAuNGwtMy45IDQzLjEgNDMuMS0zLjljOC4xLS43IDE1LjUgNC43IDE3LjEgMTIuN3MtMi45IDE1LjktMTAuNiAxOC40bC04NC42IDI4Yy01LjcgMS45LTEyLjEgLjQtMTYuMy0zLjlzLTUuOC0xMC42LTMuOS0xNi4zbDI4LTg0LjZjMi42LTcuNyAxMC41LTEyLjMgMTguNC0xMC42czEzLjQgOSAxMi43IDE3LjF6TTUxMiA1MS40YzAgMjUuNi0xOC44IDQ3LjMtNDQuMSA1MC45TDQyMS4xIDEwOWMtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQxMy4zIDE4LjggNDM1IDAgNDYwLjYgMCA0ODkgMCA1MTIgMjMgNTEyIDUxLjR6TTQ0LjEgNDA5LjdMOTAuOSA0MDNjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0M5OC43IDQ5My4yIDc3IDUxMiA1MS40IDUxMiAyMyA1MTIgMCA0ODkgMCA0NjAuNiAwIDQzNSAxOC44IDQxMy4zIDQ0LjEgNDA5Ljd6Il0KICAgIH07CiAgICBmYUdyaW5TcXVpbnRUZWFycyA9IGZhRmFjZUdyaW5TcXVpbnRUZWFyczsKICAgIGZhRmlsZUF1ZGlvID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtYXVkaW8iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjNyIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNMjIxLjkgMjY3LjZjLTQuNyAxMC0uMyAyMS45IDkuNyAyNi42IDE5LjIgOC45IDMyLjQgMjguMyAzMi40IDUwLjhzLTEzLjIgNDEuOS0zMi40IDUwLjhjLTEwIDQuNy0xNC40IDE2LjYtOS43IDI2LjZzMTYuNiAxNC40IDI2LjYgOS43QzI4MS4yIDQxNi44IDMwNCAzODMuNiAzMDQgMzQ1cy0yMi44LTcxLjktNTUuNi04Ny4xYy0xMC00LjctMjEuOS0uMy0yNi42IDkuN3pNMTA0IDMwNWMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwIDI3LjIgMzRjMyAzLjggNy42IDYgMTIuNSA2bC4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtLjMgMGMtNC45IDAtOS41IDIuMi0xMi41IDZsLTI3LjIgMzQtMTYgMHpNMjIzLjMgMzczYzkuOS01LjQgMTYuNy0xNiAxNi43LTI4LjFzLTYuNy0yMi43LTE2LjctMjguMWMtNy44LTQuMi0xNS4zIDMuMy0xNS4zIDEyLjFsMCAzMmMwIDguOCA3LjYgMTYuMyAxNS4zIDEyLjF6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXIteG1hcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FsZW5kYXItdGltZXMiXSwgImYyNzMiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6bTE3MS45IDkyLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJUaW1lcyA9IGZhQ2FsZW5kYXJYbWFyazsKICAgIGZhQ2lyY2xlRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY2LCAiYXJyb3ctYWx0LWNpcmNsZS1kb3duIl0sICJmMzU4IiwgIk0yNTYgNDY0YTIwOCAyMDggMCAxIDEgMC00MTYgMjA4IDIwOCAwIDEgMSAwIDQxNnpNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0yNDQuNyAzODcuM2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGwxMDQtMTA0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTMzY2LjUgMjU2IDM2MCAyNTZsLTcyIDAgMC0xMDRjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTA0LTcyIDBjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGwxMDQgMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZURvd24gPSBmYUNpcmNsZURvd247CiAgICBmYUZpbGVMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWxpbmVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQxLCAxMjg0NjIsIDYxNjg2LCAiZmlsZS1hbHQiLCAiZmlsZS10ZXh0Il0sICJmMTVjIiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem01NiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhRmlsZUFsdCA9IGZhRmlsZUxpbmVzOwogICAgZmFGaWxlVGV4dCA9IGZhRmlsZUxpbmVzOwogICAgZmFDb21tZW50cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODQ5MCwgNjE2NzBdLCAiZjA4NiIsICJNNzYuMiAyNTguN2M2LjEtMTUuMiA0LTMyLjYtNS42LTQ1LjktMTQuNS0yMC4xLTIyLjYtNDMuNy0yMi42LTY4LjggMC02Ni44IDYwLjUtMTI4IDE0NC0xMjhzMTQ0IDYxLjIgMTQ0IDEyOC02MC41IDEyOC0xNDQgMTI4Yy0xNS45IDAtMzEuMS0yLjMtNDUuMy02LjUtMTAuMy0zLjEtMjEuNC0yLjUtMzEuNCAxLjVsLTUwLjQgMjAuMiAxMS40LTI4LjV6TTAgMTQ0YzAgMzUuOCAxMS42IDY5LjEgMzEuNyA5Ni44TDEuOSAzMTUuMmMtMS4zIDMuMi0xLjkgNi42LTEuOSAxMCAwIDE0LjggMTIgMjYuOCAyNi44IDI2LjggMy40IDAgNi44LS43IDEwLTEuOWw5Ni4zLTM4LjVjMTguNiA1LjUgMzguNCA4LjQgNTguOSA4LjQgMTA2IDAgMTkyLTc4LjggMTkyLTE3NlMyOTgtMzIgMTkyLTMyIDAgNDYuOCAwIDE0NHpNMzg0IDUxMmMyMC42IDAgNDAuMy0zIDU4LjktOC40bDk2LjMgMzguNWMzLjIgMS4zIDYuNiAxLjkgMTAgMS45IDE0LjggMCAyNi44LTEyIDI2LjgtMjYuOCAwLTMuNC0uNy02LjgtMS45LTEwbC0yOS43LTc0LjRjMjAtMjcuOCAzMS43LTYxLjEgMzEuNy05Ni44IDAtODIuNC02MS43LTE1MS41LTE0NS0xNzAuNy0xLjYgMTYuMy01LjEgMzEuOS0xMC4xIDQ2LjkgNjMuOSAxNC44IDEwNy4yIDY3LjMgMTA3LjIgMTIzLjkgMCAyNS4xLTguMSA0OC43LTIyLjYgNjguOC05LjYgMTMuMy0xMS43IDMwLjYtNS42IDQ1LjlsMTEuNCAyOC41LTUwLjQtMjAuMmMtMTAtNC0yMS4xLTQuNS0zMS40LTEuNS0xNC4yIDQuMi0yOS40IDYuNS00NS4zIDYuNS03Mi4yIDAtMTI3LjEtNDUuNy0xNDAuNy0xMDEuMi0xNS42IDMuMi0zMS43IDUtNDguMSA1LjIgMTYuNCA4MS45IDk0LjcgMTQ0IDE4OC44IDE0NHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzMsICJjaGVjay1jaXJjbGUiXSwgImYwNTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTQ2NGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6bTcwLjcgMTIxLjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zIDEwLjcgNy44IDEzLjEgMjIuOCA1LjMgMzMuNUwyNDMuNCAzNjYuMWMtNC4xIDUuNy0xMC41IDkuMy0xNy41IDkuOC03IC41LTEzLjktMi0xOC44LTYuOWwtNTUuOS01NS45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzYgMzYgMTA1LjYtMTQ1LjJ6Il0KICAgIH07CiAgICBmYUNoZWNrQ2lyY2xlID0gZmFDaXJjbGVDaGVjazsKICAgIGZhTW9vbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtb29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzY5LCA5MjE0XSwgImYxODYiLCAiTTIzOS4zIDQ4LjdjLTEwNy4xIDguNS0xOTEuMyA5OC4xLTE5MS4zIDIwNy4zIDAgMTE0LjkgOTMuMSAyMDggMjA4IDIwOCAzMy4zIDAgNjQuNy03LjggOTIuNi0yMS43LTEwMy40LTIzLjQtMTgwLjYtMTE1LjgtMTgwLjYtMjI2LjMgMC02NS44IDI3LjQtMTI1LjEgNzEuMy0xNjcuM3pNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAxOS40IDAgMzguNCAyLjIgNTYuNyA2LjMgOS45IDIuMiAxNy4zIDEwLjUgMTguNSAyMC41cy00IDE5LjgtMTMuMSAyNC40Yy02MC42IDMwLjItMTAyLjEgOTIuNy0xMDIuMSAxNjQuOCAwIDEwMS42IDgyLjQgMTg0IDE4NCAxODQgNSAwIDkuOS0uMiAxNC44LS42IDEwLjEtLjggMTkuNiA0LjggMjMuOCAxNC4xczIgMjAuMS01LjMgMjcuMUMzODcuMyA0ODQuOCAzMjQuOCA1MTIgMjU2IDUxMiAxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NnoiXQogICAgfTsKICAgIGZhQ2xvc2VkQ2FwdGlvbmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbG9zZWQtY2FwdGlvbmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjBhIiwgIk00NDggMTEyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptODggMTQ0bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgwYzAtNC40IDMuNi04IDgtOHptMTY4IDhjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgweiJdCiAgICB9OwogICAgZmFJbWFnZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2VzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzMDIiLCAiTTQ4MCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMjAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMHpNMTYwIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMzJ6bTgwIDExMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNDAuNyAzLjhjLTQuMy03LjMtMTIuMi0xMS44LTIwLjctMTEuOHMtMTYuNCA0LjUtMjAuNyAxMS44bC00Ni41IDc5LTE3LjItMjQuNmMtNC41LTYuNC0xMS44LTEwLjItMTkuNy0xMC4ycy0xNS4yIDMuOC0xOS43IDEwLjJsLTU2IDgwYy01LjEgNy4zLTUuOCAxNi45LTEuNiAyNC44UzE5MS4xIDMyMCAyMDAgMzIwbDI0MCAwYzguNiAwIDE2LjYtNC42IDIwLjgtMTIuMXM0LjItMTYuNy0uMS0yNC4xbC04MC0xMzZ6TTQ4IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEzOC43IDAgMTUyTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM2MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjk2eiJdCiAgICB9OwogICAgZmFDaXJjbGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTgzOCwgImFycm93LWFsdC1jaXJjbGUtcmlnaHQiXSwgImYzNWEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHptMzg3LjMgMTEuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTA0LTEwNGMtNC42LTQuNi0xMS41LTUuOS0xNy40LTMuNVMyNTYgMTQ1LjUgMjU2IDE1MmwwIDcyLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDEwNCAwIDAgNzJjMCA2LjUgMy45IDEyLjMgOS45IDE0LjhzMTIuOSAxLjEgMTcuNC0zLjVsMTA0LTEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodCA9IGZhQ2lyY2xlUmlnaHQ7CiAgICBmYUlkQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpZC1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDcsICJkcml2ZXJzLWxpY2Vuc2UiXSwgImYyYzIiLCAiTTQ4IDQxNmwwLTI1NiA0ODAgMCAwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYzAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDggMzEyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0zNzYgMjA4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXQogICAgfTsKICAgIGZhRHJpdmVyc0xpY2Vuc2UgPSBmYUlkQ2FyZDsKICAgIGZhQ2lyY2xlUGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGxheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY5LCAicGxheS1jaXJjbGUiXSwgImYxNDQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjEyLjUgMTQ3LjVjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNVMxNzYgMTU5LjMgMTc2IDE2OGwwIDE3NmMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OHpNMjk4IDI1NmwtNzQgNDUuMiAwLTkwLjQgNzQgNDUuMnoiXQogICAgfTsKICAgIGZhUGxheUNpcmNsZSA9IGZhQ2lyY2xlUGxheTsKICAgIGZhRmFjZUxhdWdoQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTMsICJsYXVnaC1iZWFtIl0sICJmNTlhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUxhdWdoQmVhbSA9IGZhRmFjZUxhdWdoQmVhbTsKICAgIGZhQWRkcmVzc0Jvb2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1ib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzgsICJjb250YWN0LWJvb2siXSwgImYyYjkiLCAiTTM4NCA0OGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDgwIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwyODggMHpNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwek0yNDAgMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0tMzIgNDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDB6TTUxMiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDE5MmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptMTYgMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0eiJdCiAgICB9OwogICAgZmFDb250YWN0Qm9vayA9IGZhQWRkcmVzc0Jvb2s7CiAgICBmYUhvdXJnbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5MjAzLCA2MjAzMiwgImhvdXJnbGFzcy1lbXB0eSJdLCAiZjI1NCIsICJNMjQgMEMxMC43IDAgMCAxMC43IDAgMjRTMTAuNyA0OCAyNCA0OGw4IDAgMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWw4MS41IDgxLjUtODEuNSA4MS41QzQ4IDM2NiAzMiA0MDQuNyAzMiA0NDVsMCAxOS04IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMCAwLTE5YzAtNDAuMy0xNi03OS00NC41LTEwNy41bC04MS41LTgxLjUgODEuNS04MS41QzMzNiAxNDYgMzUyIDEwNy4zIDM1MiA2N2wwLTE5IDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzNzMuMyAwIDM2MCAwTDI0IDB6TTE5MiAyODkuOWw4MS41IDgxLjVDMjkzIDM5MSAzMDQgNDE3LjQgMzA0IDQ0NWwwIDE5LTIyNCAwIDAtMTljMC0yNy42IDExLTU0IDMwLjUtNzMuNUwxOTIgMjg5Ljl6bTAtNjcuOWwtODEuNS04MS41QzkxIDEyMSA4MCA5NC42IDgwIDY3bDAtMTkgMjI0IDAgMCAxOWMwIDI3LjYtMTEgNTQtMzAuNSA3My41TDE5MiAyMjIuMXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW1wdHkgPSBmYUhvdXJnbGFzczsKICAgIGZhSGVhZHBob25lcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkcGhvbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTExLCA2Mjg2MywgImhlYWRwaG9uZXMtYWx0IiwgImhlYWRwaG9uZXMtc2ltcGxlIl0sICJmMDI1IiwgIk00OCAyMjRjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZzMTc2IDc4LjggMTc2IDE3NmwwIDQ0LjhjLTE0LjEtOC4yLTMwLjUtMTIuOC00OC0xMi44bC0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xNjBDNDQ4IDEwMC4zIDM0Ny43IDAgMjI0IDBTMCAxMDAuMyAwIDIyNEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjLTE3LjUgMC0zMy45IDQuNy00OCAxMi44TDQ4IDIyNHptMCAxMjhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwIDEyOC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMyem0zNTIgMGwwIDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAtMTI4IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6Il0KICAgIH07CiAgICBmYUhlYWRwaG9uZXNBbHQgPSBmYUhlYWRwaG9uZXM7CiAgICBmYUhlYWRwaG9uZXNTaW1wbGUgPSBmYUhlYWRwaG9uZXM7CiAgICBmYUZpbGVQb3dlcnBvaW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtcG93ZXJwb2ludCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM0IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem04OCAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTI4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiAyOCAwYzM3LjYgMCA2OC0zMC40IDY4LTY4cy0zMC40LTY4LTY4LTY4bC01MiAwem01MiA4OGwtMjggMCAwLTQwIDI4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIweiJdCiAgICB9OwogICAgZmFXaW5kb3dNYXhpbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWF4aW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NzBdLCAiZjJkMCIsICJNNDggMjI0bDAgMTYwYzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNjAtNDE2IDB6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6Il0KICAgIH07CiAgICBmYUNvbW1lbnREb3RzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3MiwgNjIwNzUsICJjb21tZW50aW5nIl0sICJmNGFkIiwgIk0wIDI0MGMwIDU0LjQgMTkuMyAxMDQuNiA1MS45IDE0NC45TDMuMSA0NzQuM2MtMiAzLjctMy4xIDcuOS0zLjEgMTIuMiAwIDE0LjEgMTEuNCAyNS41IDI1LjUgMjUuNSA0IDAgNy44LS42IDExLjUtMi4xTDE1My40IDQ2MGMzMS40IDEyLjkgNjYuMSAyMCAxMDIuNiAyMCAxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MHpNOTQgNDA3LjljOS4zLTE3LjEgNy40LTM4LjEtNC44LTUzLjItMjYuMS0zMi4zLTQxLjItNzEuOS00MS4yLTExNC43IDAtMTAzLjIgOTAuMi0xOTIgMjA4LTE5MnMyMDggODguOCAyMDggMTkyLTkwLjIgMTkyLTIwOCAxOTJjLTMwLjIgMC01OC43LTUuOS04NC4zLTE2LjQtMTEuOS00LjktMjUuMy00LjgtMzcuMSAuM0w3NiA0NDAuOSA5NCA0MDcuOXpNMTQ0IDI3MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE0NC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem04MCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUNvbW1lbnRpbmcgPSBmYUNvbW1lbnREb3RzOwogICAgZmFGYWNlR3JpblRvbmd1ZVdpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQwLCAiZ3Jpbi10b25ndWUtd2luayJdLCAiZjU4YiIsICJNMzY2LjkgNDMyYy44LTUuMiAxLjEtMTAuNiAxLjEtMTZsMC01My41YzEwLjItMTIuNiAxOC4zLTI2LjkgMjMuOC00Mi41IDQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOC0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCA1LjUgMTUuNSAxMy42IDI5LjkgMjMuOCA0Mi40bDAgNTMuNWMwIDUuNCAuNCAxMC44IDEuMSAxNi01OC40LTM2LjgtOTcuMS0xMDEuOS05Ny4xLTE3NiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDc0LjEtMzguOCAxMzkuMi05Ny4xIDE3NnptLTM4LjggNjkuN0M0MzQuNCA0NzAuNiA1MTIgMzcyLjMgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2QzAgMzcyLjMgNzcuNiA0NzAuNiAxODMuOSA1MDEuNyAyMDMuNCA1MTguMSAyMjguNSA1MjggMjU2IDUyOHM1Mi42LTkuOSA3Mi4xLTI2LjN6TTMyMCAzNzguNmwwIDM3LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC0zNy40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45IDIuOCAxMi42IDIwLjggMTIuNiAyMy42IDAgMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTEzMiAyMzJjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6bTIyOC40LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTI4OCAyMDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMTI4IDBhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAweiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlV2luayA9IGZhRmFjZUdyaW5Ub25ndWVXaW5rOwogICAgZmFIb3VyZ2xhc3NIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1oYWxmIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhvdXJnbGFzcy0yIl0sICJmMjUyIiwgIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEwzNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMTljMCA0MC4zLTE2IDc5LTQ0LjUgMTA3LjVsLTgxLjUgODEuNSA4MS41IDgxLjVDMzM2IDM2NiAzNTIgNDA0LjcgMzUyIDQ0NWwwIDE5IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtMTljMC00MC4zIDE2LTc5IDQ0LjUtMTA3LjVsODEuNS04MS41LTgxLjUtODEuNUM0OCAxNDYgMzIgMTA3LjMgMzIgNjdsMC0xOS04IDBDMTAuNyA0OCAwIDM3LjMgMCAyNHpNMTEwLjUgMzcxLjVjLTMuOSAzLjktNy41IDguMS0xMC43IDEyLjVsMTg0LjQgMGMtMy4yLTQuNC02LjgtOC42LTEwLjctMTIuNWwtODEuNS04MS41LTgxLjUgODEuNXpNODAuOCA0MzJjLS41IDQuMy0uOCA4LjYtLjggMTNsMCAxOSAyMjQgMCAwLTE5YzAtNC40LS4zLTguNy0uOC0xM0w4MC44IDQzMnpNMjU0LjEgMTYwbC0xMjQuMSAwIDYyLjEgNjIuMSA2Mi4xLTYyLjF6bTM5LjctNDhDMzAwLjQgOTguMSAzMDQgODIuNyAzMDQgNjdsMC0xOS0yMjQgMCAwIDE5YzAgMTUuNyAzLjYgMzEuMSAxMC4yIDQ1bDIwMy41IDB6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczIgPSBmYUhvdXJnbGFzc0hhbGY7CiAgICBmYUNyZWRpdENhcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY3JlZGl0LWNhcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzksIDYyMDgzLCAiY3JlZGl0LWNhcmQtYWx0Il0sICJmMDlkIiwgIk00NDggMTEyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyLTQxNiAwIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwem0xNiAxMTJsMCAxNjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYwIDQxNiAwek02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNODAgMzQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0xNDQgMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQ3JlZGl0Q2FyZEFsdCA9IGZhQ3JlZGl0Q2FyZDsKICAgIGZhSGFuZFNwb2NrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtc3BvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0MDZdLCAiZjI1OSIsICJNMTM4LjMgODAuOGMtOS4yLTMzLjggMTAuNS02OC44IDQ0LjMtNzguNCAzNC05LjYgNjkuNCAxMC4yIDc5IDQ0LjJMMjkxLjkgMTUzLjcgMzA1LjEgODRjNi42LTM0LjcgNDAuMS01Ny41IDc0LjgtNTAuOSAzMS40IDYgNTMgMzMuOSA1MiA2NC45IDEwLTIuNiAyMC44LTIuOCAzMS41LS4xIDM0LjMgOC42IDU1LjEgNDMuMyA0Ni42IDc3LjZMNDU0LjcgMzk3LjJDNDM3LjggNDY0LjcgMzc3LjIgNTEyIDMwNy42IDUxMmwtMzMuNyAwYy01Ni45IDAtMTEyLjItMTktMTU3LjItNTMuOWwtOTItNzEuNmMtMjcuOS0yMS43LTMyLjktNjEuOS0xMS4yLTg5LjhzNjEuOS0zMi45IDg5LjgtMTEuMmwxNyAxMy4yLTUxLjgtMTMxLjJjLTEzLTMyLjkgMy4yLTcwLjEgMzYtODMgMTEuMS00LjQgMjIuNy01LjQgMzMuNy0zLjd6bTc3LjEtMjEuMmMtMi40LTguNS0xMS4yLTEzLjQtMTkuNy0xMXMtMTMuNCAxMS4yLTExIDE5LjdsNTQuOCAxODIuNGMzLjUgMTIuMy0zLjMgMjUuMi0xNS40IDI5LjNzLTI1LjMtMi0zMC0xMy45TDE0Mi45IDEzOC4xYy0zLjItOC4yLTEyLjUtMTIuMy0yMC44LTlzLTEyLjMgMTIuNS05IDIwLjhsNzMuMyAxODUuNmMxMiAzMC4zLTIzLjcgNTctNDkuNCAzN0w3My44IDMyMy40Yy03LTUuNC0xNy00LjItMjIuNSAyLjhzLTQuMiAxNyAyLjggMjIuNWw5MiA3MS42YzM2LjUgMjguNCA4MS40IDQzLjggMTI3LjcgNDMuOGwzMy43IDBjNDcuNSAwIDg5LTMyLjQgMTAwLjUtNzguNWw1NS40LTIyMS42YzIuMS04LjYtMy4xLTE3LjMtMTEuNi0xOS40cy0xNy4zIDMuMS0xOS40IDExLjZsLTI2IDEwNGMtMi45IDExLjctMTMuNCAxOS45LTI1LjUgMTkuOS0xNi41IDAtMjguOS0xNS0yNS44LTMxLjJMMzgzLjcgOTljMS43LTguNy00LTE3LjEtMTIuNy0xOC43UzM1NCA4NC4zIDM1Mi4zIDkzTDMyMC41IDI2MGMtMi4yIDExLjYtMTIuNCAyMC0yNC4yIDIwLTExIDAtMjAuNy03LjMtMjMuNy0xNy45TDIxNS40IDU5LjZ6Il0KICAgIH07CiAgICBmYUJlbGxTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sICJmMWY2IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04Ny44LTg3LjhjMTcuNS0zLjMgMzAuOC0xOC43IDMwLjgtMzcuMSAwLTYuNy0xLjgtMTMuMy01LjEtMTlMNDg1IDMyMS43Yy0xOS0zMi42LTI5LTY5LjYtMjktMTA3LjNsMC0xNC41YzAtODQuNi02Mi42LTE1NC43LTE0NC0xNjYuM2wwLTkuN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDkuN2MtNDIuMiA2LTc5LjQgMjcuOC0xMDUuNCA1OS4xTDQxLTI0Ljl6TTE5Mi44IDEyNi45QzIxNC43IDk4LjQgMjQ5LjIgODAgMjg4IDgwIDM1NC4zIDgwIDQwOCAxMzMuNyA0MDggMjAwbDAgMTQuNWMwIDQ2LjIgMTIuMyA5MS41IDM1LjUgMTMxLjRsMTIuOSAyMi4xLTIyLjYgMC0yNDEuMS0yNDEuMXpNMTMyLjUgMzQ1LjljMTkuNS0zMy40IDMxLjMtNzAuNyAzNC42LTEwOWwtNDYuNy00Ni43Yy0uMiAzLjMtLjMgNi42LS4zIDkuOWwwIDE0LjVjMCAzNy43LTEwIDc0LjctMjkgMTA3LjNMNjkuMSAzNTkuMmMtMy40IDUuOC01LjEgMTIuMy01LjEgMTkgMCAyMC45IDE2LjkgMzcuOCAzNy44IDM3LjhsMjQ0LjQgMC00OC00OC0xNzguNiAwIDEyLjktMjIuMXpNMjIwLjEgNDY0YzkuOSAyOCAzNi42IDQ4IDY3LjkgNDhzNTgtMjAgNjcuOS00OGwtMTM1LjggMHoiXQogICAgfTsKICAgIGZhU3RhciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTEwODgsIDYxNDQ2XSwgImYwMDUiLCAiTTI4OC4xLTMyYzkgMCAxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4ycy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXptMCA3Ni44TDIzMC4zIDE1OGMtMy41IDYuOC0xMCAxMS42LTE3LjYgMTIuOGwtMTI1LjUgMjAgODkuOCA4OS45YzUuNCA1LjQgNy45IDEzLjEgNi43IDIwLjdsLTE5LjggMTI1LjUgMTEzLjMtNTcuNmM2LjgtMy41IDE0LjktMy41IDIxLjggMGwxMTMuMyA1Ny42LTE5LjgtMTI1LjVjLTEuMi03LjYgMS4zLTE1LjMgNi43LTIwLjdsODkuOC04OS45LTEyNS41LTIwYy03LjYtMS4yLTE0LjEtNi0xNy42LTEyLjhMMjg4LjEgNDQuOHoiXQogICAgfTsKICAgIGZhRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTg4LCA2MTcyNV0sICJmMDI0IiwgIk00OCAyNEM0OCAxMC43IDM3LjMgMCAyNCAwUzAgMTAuNyAwIDI0TDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDAgODAuMy0yMC4xYzQxLjEtMTAuMyA4NC42LTUuNSAxMjIuNSAxMy40IDQ0LjIgMjIuMSA5NS41IDI0LjggMTQxLjcgNy40bDM0LjctMTNjMTIuNS00LjcgMjAuOC0xNi42IDIwLjgtMzBsMC0yNzkuN2MwLTIzLTI0LjItMzgtNDQuOC0yNy43bC05LjYgNC44Yy00Ni4zIDIzLjItMTAwLjggMjMuMi0xNDcuMSAwLTM1LjEtMTcuNi03NS40LTIyLTExMy41LTEyLjVMNDggNTIgNDggMjR6bTAgNzcuNWw5Ni42LTI0LjJjMjctNi43IDU1LjUtMy42IDgwLjQgOC44IDU0LjkgMjcuNCAxMTguNyAyOS43IDE3NSA2LjhsMCAyNDEuOC0yNC40IDkuMWMtMzMuNyAxMi42LTcxLjIgMTAuNy0xMDMuNC01LjQtNDguMi0yNC4xLTEwMy4zLTMwLjEtMTU1LjYtMTcuMWwtNjguNiAxNy4yIDAtMjM3eiJdCiAgICB9OwogICAgZmFMZW1vbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJsZW1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzgxOV0sICJmMDk0IiwgIk0zNjggODBjLTMuMiAwLTYuMiAuNC04LjkgMS4zLTE5LjEgNS41LTQ2LjEgMTAuNy03NC4zIDMuMy01Ny40LTE0LjktMTI0LjYgNy40LTE3NC43IDU3LjVTMzcuNyAyNTkuNCA1Mi42IDMxNi44YzcuMyAyOC4yIDIuMiA1NS4yLTMuMyA3NC4zLS44IDIuOC0xLjMgNS44LTEuMyA4LjkgMCAxNy43IDE0LjMgMzIgMzIgMzIgMy4yIDAgNi4yLS40IDguOS0xLjMgMTkuMS01LjUgNDYuMS0xMC43IDc0LjMtMy4zIDU3LjQgMTQuOSAxMjQuNi03LjQgMTc0LjctNTcuNXM3Mi40LTExNy4zIDU3LjUtMTc0LjdjLTcuMy0yOC4yLTIuMi01NS4yIDMuMy03NC4zIC44LTIuOCAxLjMtNS44IDEuMy04LjkgMC0xNy43LTE0LjMtMzItMzItMzJ6bTAtNDhjNDQuMiAwIDgwIDM1LjggODAgODAgMCA3LjctMS4xIDE1LjItMy4xIDIyLjMtNC42IDE1LjgtNy4xIDMyLjktMyA0OC45IDIwLjEgNzcuNi0xMC45IDE2MS41LTcwIDIyMC43cy0xNDMuMSA5MC4yLTIyMC43IDcwYy0xNi00LjEtMzMtMS42LTQ4LjkgMy03LjEgMi0xNC42IDMuMS0yMi4zIDMuMS00NC4yIDAtODAtMzUuOC04MC04MCAwLTcuNyAxLjEtMTUuMiAzLjEtMjIuMyA0LjYtMTUuOCA3LjEtMzIuOSAzLTQ4LjktMjAuMS03Ny42IDEwLjktMTYxLjUgNzAtMjIwLjdTMjE5LjMgMTggMjk2LjggMzguMWMxNiA0LjEgMzMgMS42IDQ4LjktMyA3LjEtMiAxNC42LTMuMSAyMi4zLTMuMXpNMjQ2LjcgMTY3Yy01MiAxNS4yLTk2LjUgNTkuNy0xMTEuNyAxMTEuNy0zLjcgMTIuNy0xNy4xIDIwLTI5LjggMTYuM1M4NS4yIDI3OCA4OSAyNjUuM2MxOS44LTY3LjcgNzYuNi0xMjQuNSAxNDQuMy0xNDQuMyAxMi43LTMuNyAyNi4xIDMuNiAyOS44IDE2LjNzLTMuNiAyNi4xLTE2LjMgMjkuOHoiXQogICAgfTsKICAgIGZhV2luZG93UmVzdG9yZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctcmVzdG9yZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMmQyIiwgIk01MTIgODBMMjI0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNi00OCAwIDAtMTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4IDAgMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE5MmMwLTguOC03LjItMTYtMTYtMTZ6TTM2OCAyODhsLTMyMCAwIDAgMTI4YzAgOC44IDcuMiAxNiAxNiAxNmwyODggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjh6TTY0IDE2MGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbkhlYXJ0cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4taGVhcnRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI1LCAiZ3Jpbi1oZWFydHMiXSwgImY1ODQiLCAiTTQ2NCAyNTZjMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzQ4IDM3MC45IDQ4IDI1NmMwLTMuNSAuMS03LjEgLjMtMTAuNi0xNC0xMy45LTI5LjctMzMuMS0zOS4zLTU2LjctNS44IDIxLjQtOC45IDQ0LTguOSA2Ny4zIDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZTNTEyIDM5Ny40IDUxMiAyNTZjMC0yMy4zLTMuMS00NS45LTguOS02Ny4zLTkuNiAyMy43LTI1LjQgNDIuOC0zOS4zIDU2LjcgLjIgMy41IC4zIDcgLjMgMTAuNnpNMzY4IDU4LjljMTEuNy02IDI0LjUtOS42IDM3LjctMTAuNi00Mi4xLTMwLjQtOTMuOC00OC4zLTE0OS43LTQ4LjNTMTQ4LjQgMTcuOSAxMDYuMyA0OC4zYzEzLjIgMSAyNiA0LjYgMzcuNyAxMC42IDEzLjgtNy4xIDI5LjMtMTAuOSA0NS4xLTEwLjlsMi45IDBjOC45IDAgMTcuNiAxLjIgMjUuOCAzLjUgMTIuNC0yLjMgMjUuMi0zLjUgMzguMi0zLjVzMjUuOCAxLjIgMzguMiAzLjVjOC4yLTIuMyAxNi45LTMuNSAyNS44LTMuNWwyLjkgMGMxNS44IDAgMzEuMyAzLjggNDUuMSAxMC45em00LjIgMjQzLjRjLTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDE5LjggNTUuOSA3My4xIDk1LjkgMTM1LjggOTUuOSA2Mi43IDAgMTE2LTQwLjEgMTM1LjgtOTYgNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44ek0zMjIuOSA5NkwzMjAgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNTMuNCA2Ni45IDk1LjcgODkgMTA4LjIgNC40IDIuNSA5LjYgMi41IDE0IDAgMjIuMS0xMi41IDg5LTU0LjggODktMTA4LjIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTIuOSAwYy0xMy41IDAtMjYuNSA1LjQtMzYgMTQuOWwtOS4xIDkuMS05LjEtOS4xYy05LjUtOS41LTIyLjUtMTQuOS0zNi0xNC45em0tMTg4IDE0LjljLTkuNS05LjUtMjIuNS0xNC45LTM2LTE0LjlMOTYgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNTMuNCA2Ni45IDk1LjcgODkgMTA4LjIgNC40IDIuNSA5LjYgMi41IDE0IDAgMjIuMS0xMi41IDg5LTU0LjggODktMTA4LjIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTIuOSAwYy0xMy41IDAtMjYuNSA1LjQtMzYgMTQuOWwtOS4xIDkuMS05LjEtOS4xeiJdCiAgICB9OwogICAgZmFHcmluSGVhcnRzID0gZmFGYWNlR3JpbkhlYXJ0czsKICAgIGZhRmFjZUtpc3NCZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCAia2lzcy1iZWFtIl0sICJmNTk3IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI0MCAxNmwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tNjQtOTJjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFLaXNzQmVhbSA9IGZhRmFjZUtpc3NCZWFtOwogICAgZmFGaWxlUGRmID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtcGRmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxYzEiLCAiTTIwOCA0OEw5NiA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmw4MCAwIDAgNDgtODAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwyMjkuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM5Ny4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNsMCAxNDkuNS00OCAwIDAtMTI4LTg4IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtODh6TTM0OC4xIDE2MEwyNTYgNjcuOSAyNTYgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY4LjEgMHpNMjQwIDM4MGwzMiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC0xMiAwIDAgMjhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMTI4YzAtMTEgOS0yMCAyMC0yMHptMzIgODBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0xMiAwIDAgNDAgMTIgMHptOTYtODBsMzIgMGMyOC43IDAgNTIgMjMuMyA1MiA1MmwwIDY0YzAgMjguNy0yMy4zIDUyLTUyIDUybC0zMiAwYy0xMSAwLTIwLTktMjAtMjBsMC0xMjhjMC0xMSA5LTIwIDIwLTIwem0zMiAxMjhjNi42IDAgMTItNS40IDEyLTEybDAtNjRjMC02LjYtNS40LTEyLTEyLTEybC0xMiAwIDAgODggMTIgMHptNzYtMTA4YzAtMTEgOS0yMCAyMC0yMGw0OCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtMjggMCAwIDI0IDI4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC0yOCAwIDAgNDRjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMTI4eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbldpZGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTUsICJncmluLWFsdCJdLCAiZjU4MSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0yMjQgMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0IDE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NHptOTYgNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NC0xNC4zIDY0LTMyIDY0eiJdCiAgICB9OwogICAgZmFHcmluQWx0ID0gZmFGYWNlR3JpbldpZGU7CiAgICBmYUZhY2VMYXVnaFNxdWludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaC1zcXVpbnQiXSwgImY1OWIiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTI1LjIgNzYuNGMtNi41LTE0IDUtMjguNCAyMC40LTI4LjRsMjIwLjggMGMxNS40IDAgMjYuOCAxNC40IDIwLjQgMjguNC0yMi44IDQ5LjQtNzIuOCA4My42LTEzMC44IDgzLjZzLTEwNy45LTM0LjItMTMwLjgtODMuNnptLTIuNi0xNzMuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFMYXVnaFNxdWludCA9IGZhRmFjZUxhdWdoU3F1aW50OwogICAgZmFGYWNlS2lzc1dpbmtIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3Mtd2luay1oZWFydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUzNiwgImtpc3Mtd2luay1oZWFydCJdLCAiZjU5OCIsICJNMzg2IDQzOS41Yy0yOS4yIDE1LjYtNjIuNSAyNC41LTk4IDI0LjUtMTE0LjkgMC0yMDgtOTMuMS0yMDgtMjA4UzE3My4yIDQ4IDI4OCA0OGMxMTMuMiAwIDIwNS4yIDkwLjQgMjA3LjkgMjAyLjkgMTQuMyAxLjUgMjguNiA2IDQxLjkgMTMuNyAyIDEuMiA0IDIuNCA1LjkgMy43IC4yLTQuMSAuMy04LjIgLjMtMTIuMyAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzMyIDExNC42IDMyIDI1NiAxNDYuNiA1MTIgMjg4IDUxMmM0MS40IDAgODAuNS05LjggMTE1LjEtMjcuMy01LjgtMTIuOS0xMi0yOC41LTE3LjItNDUuMnpNMjU2IDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC0xMi4zLTQuNi0yMy41LTEyLjItMzIgNy42LTguNSAxMi4yLTE5LjcgMTIuMi0zMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0tNDgtNDhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNTItNDRsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdCiAgICB9OwogICAgZmFLaXNzV2lua0hlYXJ0ID0gZmFGYWNlS2lzc1dpbmtIZWFydDsKICAgIGZhQ29weSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwYzUiLCAiTTM4NCAzMzZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDEzMy41IDBjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2w1OC41IDU4LjVjMyAzIDQuNyA3LjEgNC43IDExLjNMNDAwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZ6TTE5MiAzODRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNzAuNyAxOC43QzM1OC43IDYuNyAzNDIuNSAwIDMyNS41IDBMMTkyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0ek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNDggMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4LTE2IDB6Il0KICAgIH07CiAgICBmYUNoZXNzS2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1raW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTgxOF0sICJmNDNmIiwgIk0yMjQtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgODAgMTYxLjggMGMyMS4xIDAgMzguMiAxNy4xIDM4LjIgMzguMiAwIDYuNC0xLjYgMTIuNy00LjcgMTguM0wzNTcuMiAzNzQuNSA0MDUuNiA0MzVjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDc5LjQgNTEyYy0yNi4yIDAtNDcuNC0yMS4yLTQ3LjQtNDcuNCAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42TDkwLjggMzc0LjUgNC43IDIxNi42QzEuNiAyMTAuOSAwIDIwNC42IDAgMTk4LjIgMCAxNzcuMSAxNy4xIDE2MCAzOC4yIDE2MGwxNjEuOCAwIDAtODAtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTEzMS44IDQwMGwtMy42IDQuNC00Ny42IDU5LjYgMjg2LjYgMC00Ny42LTU5LjYtMy42LTQuNC0xODQuMyAwem0xLjEtNDguNWwuMyAuNSAxODEuNiAwIC4zLS41IDc4LjMtMTQzLjUtMzM4LjcgMCA3OC4zIDE0My41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE4NDYsICJwbHVzLXNxdWFyZSJdLCAiZjBmZSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVzU3F1YXJlID0gZmFTcXVhcmVQbHVzOwogICAgZmFGaWxlQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNvZGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjOSIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNMTcwLjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTgwLTMxLjJjLTguNi0xMC4xLTIzLjgtMTEuMi0zMy44LTIuNnMtMTEuMiAyMy44LTIuNiAzMy44bDM0LjYgNDAuNC0zNC42IDQwLjRjLTguNiAxMC4xLTcuNSAyNS4yIDIuNiAzMy44czI1LjIgNy41IDMzLjgtMi42bDQ4LTU2YzcuNy05IDcuNy0yMi4yIDAtMzEuMmwtNDgtNTZ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJncmluLXdpbmsiXSwgImY1OGMiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFHcmluV2luayA9IGZhRmFjZUdyaW5XaW5rOwogICAgZmFNb25leUJpbGwxID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1iaWxsLWFsdCJdLCAiZjNkMSIsICJNMTEyIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NGwwIDE2MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwyODggMGMwLTM1LjMgMjguNy02NCA2NC02NGwwLTE2MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsLTI4OCAwek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0yNTYgMTZhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0em0tMTYgNDRjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNDguNC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDQ4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDB6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbEFsdCA9IGZhTW9uZXlCaWxsMTsKICAgIGZhRXllU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZXllLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMTc2LjkgMTExLjFjMzIuMS0xOC45IDY5LjItMzEuMSAxMTEuMS0zMS4xIDY1LjIgMCAxMTguOCAyOS42IDE1OS45IDY3LjcgMzguNSAzNS43IDY1LjEgNzguMyA3OC42IDEwOC4zLTEzLjYgMzAtNDAuMiA3Mi41LTc4LjYgMTA4LjMtMy4xIDIuOC02LjIgNS42LTkuNCA4LjRMMzkzLjggMzI4YzE0LTIwLjUgMjIuMi00NS4zIDIyLjItNzIgMC03MC43LTU3LjMtMTI4LTEyOC0xMjgtMjYuNyAwLTUxLjUgOC4yLTcyIDIyLjJsLTM5LjEtMzkuMXptMTgyIDE4MmwtMTA4LTEwOGMxMS4xLTUuOCAyMy43LTkuMSAzNy4xLTkuMSA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDEzLjQtMy4zIDI2LTkuMSAzNy4xek0xMDMuNCAxNzMuMmwtMzQtMzRjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42TDM1Mi4yIDQyMmMtMjAgNi40LTQxLjQgMTAtNjQuMiAxMC02NS4yIDAtMTE4LjgtMjkuNi0xNTkuOS02Ny43LTM4LjUtMzUuNy02NS4xLTc4LjMtNzguNi0xMDguMyAxMC40LTIzLjEgMjguNi01My42IDU0LTgyLjh6Il0KICAgIH07CiAgICBmYUZpbGVXb3JkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtd29yZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMyIiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem03MS4zIDI3NC4yYy0zLjItMTIuOS0xNi4yLTIwLjctMjkuMS0xNy41Uzg1LjUgMjczIDg4LjcgMjg1LjhsMzIgMTI4YzIuNSAxMC4yIDExLjQgMTcuNSAyMS45IDE4LjFzMjAuMS01LjcgMjMuOC0xNS41bDI1LjUtNjguMSAyNS41IDY4LjFjMy43IDkuOCAxMy4zIDE2LjEgMjMuOCAxNS41czE5LjQtNy45IDIxLjktMTguMWwzMi0xMjhjMy4yLTEyLjktNC42LTI1LjktMTcuNS0yOS4xcy0yNS45IDQuNi0yOS4xIDE3LjVsLTEzLjMgNTMuMi0yMC45LTU1LjhDMjExIDI2Mi4yIDIwMiAyNTYgMTkyIDI1NnMtMTkgNi4yLTIyLjUgMTUuNmwtMjAuOSA1NS44LTEzLjMtNTMuMnoiXQogICAgfTsKICAgIGZhRmFjZUFuZ3J5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtYW5ncnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDQsICJhbmdyeSJdLCAiZjU1NiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTE0NGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUFuZ3J5ID0gZmFGYWNlQW5ncnk7CiAgICBmYUNoZXNzS25pZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLWtuaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MjJdLCAiZjQ0MSIsICJNMjMyLTMyYzExMC41IDAgMjAwIDg5LjUgMjAwIDIwMGwwIDEyNy43YzAgMTguOS02LjEgMzcuMS0xNy4yIDUyLjJsLTUuMSA2LjItMzYuMyA0MC43IDMyLjEgNDAuMmM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjZsLS4yIDQuOGMtMi40IDIzLjktMjIuNiA0Mi41LTQ3LjEgNDIuNWwtMjg5LjIgMC00LjgtLjJjLTIzLjktMi40LTQyLjUtMjIuNi00Mi41LTQ3LjEgMC0xMC44IDMuNy0yMS4yIDEwLjQtMjkuNmwzNy42LTQ3IDAtMjQuM2MwLTI0LjMgMTAuMS00Ny42IDI3LjgtNjQuMmw2My41LTU5LjUtMTcuNCAwLS4yIC4yYy0yMC4zIDIwLjMtNDkuNiAyOC4yLTc3LjEgMjEuMWwtNS41LTEuNmMtMzAuOS0xMC4zLTUyLjMtMzgtNTQuOS03MC4xbC0uMi02LjQgMC0xLjRjMC0xOS43IDcuMS0zOC44IDE5LjktNTMuOGw3Ni4xLTg4LjggMC00Ny4xIC4xLTIuNUMxMTMuNC0yMi42IDEyMy42LTMyIDEzNi0zMmw5NiAwek04MC43IDQ2NGwyODYuNiAwLTM4LjQtNDgtMjA5LjkgMC0zOC40IDQ4ek0xNjAgNDhjMCA1LjctMi4xIDExLjMtNS44IDE1LjZMNzIuMyAxNTkuMUM2NyAxNjUuNCA2NCAxNzMuNCA2NCAxODEuN2wwIDEuNCAuNCA1LjJjMS45IDExLjkgMTAuMyAyMS45IDIxLjkgMjUuOGw0LjUgMS4xYzEwLjUgMS45IDIxLjMtMS40IDI5LTlsNy4yLTcuMiAzLjctM2MzLjktMi42IDguNS00IDEzLjMtNGw4OCAwYzkuOCAwIDE4LjcgNiAyMi4zIDE1LjJzMS4zIDE5LjYtNS45IDI2LjNsLTEwNy44IDEwMWMtOC4xIDcuNi0xMi43IDE4LjEtMTIuNyAyOS4ybDAgNC4zIDIwNS4yIDAgNDAuNy00NS44IDIuMy0yLjhjNS4xLTYuOCA3LjgtMTUuMiA3LjgtMjMuN0wzODQgMTY4YzAtODMuOS02OC4xLTE1Mi0xNTItMTUybC03MiAwIDAgMzJ6bTMyIDcyYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5CZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE2LCAiZ3Jpbi1iZWFtIl0sICJmNTgyIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFHcmluQmVhbSA9IGZhRmFjZUdyaW5CZWFtOwogICAgZmFIYW5kUGVhY2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wZWFjZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk5OTZdLCAiZjI1YiIsICJNMjE5IDEuNGMtMzUuMi0zLjctNjYuNiAyMS44LTcwLjMgNTdsLTYuNCA2MC42LTE3LjQtNDkuNEMxMTMuMiAzNi4zIDc2LjYgMTguOCA0My4zIDMwLjVTLTcuNiA3OC44IDQuMSAxMTIuMUw1Ni45IDI2Mi4yQzQxLjcgMjc2LjcgMzIuMiAyOTcuMyAzMi4yIDMyMGwwIDI0YzAgOTIuOCA3NS4yIDE2OCAxNjggMTY4bDQ4IDBjOTIuOCAwIDE2OC03NS4yIDE2OC0xNjhsMC0xMjBjMC0zNS4zLTI4LjctNjQtNjQtNjQtNy45IDAtMTUuNCAxLjQtMjIuNCA0LTEwLjQtMjEuMy0zMi4zLTM2LTU3LjYtMzYtLjcgMC0xLjUgMC0yLjIgMGw1LjktNTYuM2MzLjctMzUuMi0yMS44LTY2LjYtNTctNzAuM3ptLS4yIDE1NS40Yy02LjYgMTAuMS0xMC41IDIyLjItMTAuNSAzNS4ybDAgNDhjMCAuNyAwIDEuNCAwIDItNS4xLTEuMy0xMC41LTItMTYtMmwtNy40IDAtNS40LTE1LjMgMTctMTYxLjNjLjktOC44IDguOC0xNS4yIDE3LjYtMTQuMnMxNS4yIDguOCAxNC4yIDE3LjZsLTkuNSA5MC4xek03OS42IDg1LjZsNTQuMyAxNTQuNC0yMS43IDBjLTQgMC04IC4zLTExLjkgLjlMNDkuNCA5Ni4yYy0yLjktOC4zIDEuNS0xNy41IDkuOC0yMC40czE3LjUgMS41IDIwLjQgOS44ek0yNTYuMiAxOTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDh6bTM4LjQgMTA4YzEwLjQgMjEuMyAzMi4zIDM2IDU3LjYgMzYgNS41IDAgMTAuOS0uNyAxNi0ybDAgMTBjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTQ4IDBjLTY2LjMgMC0xMjAtNTMuNy0xMjAtMTIwbDAtMjRjMC0xNy43IDE0LjMtMzIgMzItMzJsODAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0IDAtLjcgMC0xLjQgMC0yIDUuMSAxLjMgMTAuNSAyIDE2IDIgNy45IDAgMTUuNC0xLjQgMjIuNC00em03My42LTI4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4eiJdCiAgICB9OwogICAgZmFDb21wYXNzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbXBhc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTddLCAiZjE0ZSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMDYuNyA2OS4xTDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4zIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk2MzIsIDk3MjMsIDk3MjQsIDYxNTkwXSwgImYwYzgiLCAiTTM4NCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwzMjAgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhRmFjZUdyaW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEyLCAiZ3JpbiJdLCAiZjU4MCIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW4gPSBmYUZhY2VHcmluOwogICAgZmFGYWNlU21pbGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU3OCwgInNtaWxlIl0sICJmMTE4IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVNtaWxlID0gZmFGYWNlU21pbGU7CiAgICBmYUZhY2VTbWlsZUJlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZS1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTIyLCAic21pbGUtYmVhbSJdLCAiZjViOCIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzcuMyA2My40QzE5Mi4zIDMzNSAyMTguNCAzNTIgMjU2IDM1MnM2My43LTE3IDc4LjctMzIuNmM5LjItOS42IDI0LjQtOS45IDMzLjktLjdzOS45IDI0LjQgLjcgMzMuOWMtMjIuMSAyMy02MCA0Ny40LTExMy4zIDQ3LjRzLTkxLjItMjQuNC0xMTMuMy00Ny40Yy05LjItOS42LTguOS0yNC44IC43LTMzLjlzMjQuOC04LjkgMzMuOSAuN3pNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYVNtaWxlQmVhbSA9IGZhRmFjZVNtaWxlQmVhbTsKICAgIGZhRm9sZGVyQ2xvc2VkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZvbGRlci1jbG9zZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTE4NSIsICJNNDQ4IDQwMEw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE0NCA0MTYgMCAwIDE0NGMwIDguOC03LjIgMTYtMTYgMTZ6bTE2LTIwOGwtNDE2IDAgMC05NmMwLTguOCA3LjItMTYgMTYtMTZsMTM4LjcgMGMzLjUgMCA2LjggMS4xIDkuNiAzLjJMMjUwLjcgMTEyYzEzLjggMTAuNCAzMC43IDE2IDQ4IDE2TDQ0OCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDh6TTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFLZXlib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJrZXlib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzllM10sICJmMTFjIiwgIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6TTE3NiAzMjBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em0tNzItNzJjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptNjQgOTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNnptMTYtOTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhRmFjZVJvbGxpbmdFeWVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utcm9sbGluZy1leWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTgwLCAibWVoLXJvbGxpbmctZXllcyJdLCAiZjVhNSIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMzc2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTE2MCAyNjRjLTIyLjEgMC00MC0xNy45LTQwLTQwIDAtOS41IDMuMy0xOC4xIDguOC0yNSAzLjIgMTQuMyAxNiAyNSAzMS4yIDI1czI4LTEwLjcgMzEuMi0yNWM1LjUgNi44IDguOCAxNS41IDguOCAyNSAwIDIyLjEtMTcuOSA0MC00MCA0MHptMCA0MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTkyLTQwYy0yMi4xIDAtNDAtMTcuOS00MC00MCAwLTkuNSAzLjMtMTguMSA4LjgtMjUgMy4yIDE0LjMgMTYgMjUgMzEuMiAyNXMyOC0xMC43IDMxLjItMjVjNS41IDYuOCA4LjggMTUuNSA4LjggMjUgMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTAgNDBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6Il0KICAgIH07CiAgICBmYU1laFJvbGxpbmdFeWVzID0gZmFGYWNlUm9sbGluZ0V5ZXM7CiAgICBmYUZhY2VHcmltYWNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3JpbWFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NiwgImdyaW1hY2UiXSwgImY1N2YiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6TTUxMiAyNTZhMjU2IDI1NiAwIDEgMSAtNTEyIDAgMjU2IDI1NiAwIDEgMSA1MTIgMHpNMTUyIDM1MmMwIDExLjkgOC42IDIxLjggMjAgMjMuN2wwLTQ3LjNjLTExLjQgMS45LTIwIDExLjgtMjAgMjMuN3ptODQgMjRsMC00OC0yNCAwIDAgNDggMjQgMHptNjQgMGwwLTQ4LTI0IDAgMCA0OCAyNCAwem00MC0uM2MxMS40LTEuOSAyMC0xMS44IDIwLTIzLjdzLTguNi0yMS44LTIwLTIzLjdsMCA0Ny4zek0xNzYgMjg4bDE2MCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xNjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHptMC0xMTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhR3JpbWFjZSA9IGZhRmFjZUdyaW1hY2U7CiAgICBmYUNpcmNsZURvdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZG90IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjgwLCAiZG90LWNpcmNsZSJdLCAiZjE5MiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtNDY0YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnptMCAzMDRhOTYgOTYgMCAxIDEgMC0xOTIgOTYgOTYgMCAxIDEgMCAxOTJ6Il0KICAgIH07CiAgICBmYURvdENpcmNsZSA9IGZhQ2lyY2xlRG90OwogICAgZmFPYmplY3RHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJvYmplY3QtZ3JvdXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0NyIsICJNNDAgNjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDggNTkuM2MxNi02LjUgMjguOS0xOS4zIDM1LjMtMzUuM2wzMjkuMyAwYzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMjY1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0zMjkuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTI2NS4zek01MTIgMGMtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwTDEyMy4zIDQwQzExMy45IDE2LjUgOTAuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0IDAgOTAuOSAxNi41IDExMy45IDQwIDEyMy4zbDAgMjY1LjNjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNi45IDAgNDkuOS0xNi41IDU5LjMtNDBsMzI5LjMgMGM5LjUgMjMuNSAzMi41IDQwIDU5LjMgNDAgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjY1LjNjMjMuNS05LjUgNDAtMzIuNSA0MC01OS4zIDAtMzUuMy0yOC43LTY0LTY0LTY0ek00ODggNjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgNDI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDI0IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTE5MiAxNzZsODggMCAwIDU2LTg4IDAgMC01NnptLTgtNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC03MmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTA0IDB6bTcyIDE4NGwwIDI0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTI0IDBjMCAxNC42LTMuOSAyOC4yLTEwLjcgNDBsMjYuNyAwIDAgNTYtODggMCAwLTE2LjRjLTIuNiAuMy01LjMgLjQtOCAuNGwtMzIgMHoiXQogICAgfTsKICAgIGZhRmFjZUZsdXNoZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mbHVzaGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTYzLCAiZmx1c2hlZCJdLCAiZjU3OSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE2MCAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMTYtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTkyIDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDB6TTE2MCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0wIDEyOGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTQ0LTgwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRmx1c2hlZCA9IGZhRmFjZUZsdXNoZWQ7CiAgICBmYVN0YXJIYWxmU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3Rhci1oYWxmLWFsdCJdLCAiZjVjMCIsICJNMzA5LjUtMTguOWMtNC4xLTgtMTIuNC0xMy4xLTIxLjQtMTMuMXMtMTcuMyA1LjEtMjEuNCAxMy4xTDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjg4LjEgNDE3LjYgNDMyLjQgNDkxYzggNC4xIDE3LjcgMy4zIDI1LTJzMTEtMTQuMiA5LjYtMjMuMkw0NDEuNyAzMDUuOSA1NTYuMSAxOTEuNGM2LjQtNi40IDguNi0xNS44IDUuOC0yNC40cy0xMC4xLTE0LjktMTkuMS0xNi4zTDM4MyAxMjUuMyAzMDkuNS0xOC45ek0yNjQuMSA5MS44bDAgMjg0LjEtMTAwLjEgNTAuOSAxOS44LTEyNS41YzEuMi03LjYtMS4zLTE1LjMtNi43LTIwLjdsLTg5LjgtODkuOSAxMjUuNS0yMGM3LjYtMS4yIDE0LjEtNiAxNy42LTEyLjhsMzMuOC02Ni4yem00OCAyODQuMWwwLTI4NC4xIDMzLjggNjYuMmMzLjUgNi44IDEwIDExLjYgMTcuNiAxMi44bDEyNS41IDIwLTg5LjggODkuOWMtNS40IDUuNC03LjkgMTMuMS02LjcgMjAuN2wxOS44IDEyNS41LTEwMC4xLTUwLjl6Il0KICAgIH07CiAgICBmYVN0YXJIYWxmQWx0ID0gZmFTdGFySGFsZlN0cm9rZTsKICAgIGZhRmlsZVZpZGVvID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtdmlkZW8iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjOCIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNODAgMjg4bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI0IDM1IDM1YzMuMiAzLjIgNy41IDUgMTIgNSA5LjQgMCAxNy03LjYgMTctMTdsMC05NC4xYzAtOS40LTcuNi0xNy0xNy0xNy00LjUgMC04LjggMS44LTEyIDVsLTM1IDM1IDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2ggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaCJdLCAiZjU5OSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMTguMyA1OC4yYy00LjItMTMuNyA3LjEtMjYuMiAyMS40LTI2LjJsMjMyLjYgMGMxNC4zIDAgMjUuNiAxMi41IDIxLjQgMjYuMi0xOCA1OC45LTcyLjkgMTAxLjgtMTM3LjcgMTAxLjhTMTM2LjMgMzczLjEgMTE4LjMgMzE0LjJ6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTGF1Z2ggPSBmYUZhY2VMYXVnaDsKICAgIGZhSGFuZFBvaW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNWEiLCAiTTE2MCA2NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTM2YzAgMTAuMyA2LjYgMTkuNSAxNi40IDIyLjhzMjAuNi0uMSAyNi44LTguM2MzLTMuOSA3LjYtNi40IDEyLjgtNi40IDguOCAwIDE2IDcuMiAxNiAxNiAwIDEwLjMgNi42IDE5LjUgMTYuNCAyMi44czIwLjYtLjEgMjYuOC04LjNjMy0zLjkgNy42LTYuNCAxMi44LTYuNCA3LjggMCAxNC4zIDUuNiAxNS43IDEzIDEuNiA4LjIgNy4zIDE1LjEgMTUuMSAxOHMxNi43IDEuNiAyMy4zLTMuNmMyLjctMi4xIDYuMS0zLjQgOS45LTMuNCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxMjBjMCAzOS44LTMyLjIgNzItNzIgNzJsLTExNi42IDBjLTM3LjQgMC03Mi40LTE4LjctOTMuMi00OS45TDUwLjcgMzEyLjljLTQuOS03LjQtMi45LTE3LjMgNC40LTIyLjJzMTcuMy0yLjkgMjIuMiA0LjRMMTE2IDM1My4yYzUuOSA4LjggMTYuOCAxMi43IDI2LjkgOS43czE3LTEyLjQgMTctMjNMMTYwIDY0ek0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxOTcuN0M5MS4yIDIzOCA1NS41IDIzMi44IDI4LjUgMjUwLjctLjkgMjcwLjQtOC45IDMxMC4xIDEwLjggMzM5LjVMNzguMyA0NDAuOGMyOS43IDQ0LjUgNzkuNiA3MS4yIDEzMy4xIDcxLjJMMzI4IDUxMmM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGwwLTEyMGMwLTM1LjMtMjguNy02NC02NC02NC00LjUgMC04LjggLjUtMTMgMS4zLTExLjctMTUuNC0zMC4yLTI1LjMtNTEtMjUuMy02LjkgMC0xMy41IDEuMS0xOS43IDMuMS0xMS42LTE2LjQtMzAuNy0yNy4xLTUyLjMtMjcuMS0yLjcgMC01LjQgLjItOCAuNUwyNDAgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6bTQ4IDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdCiAgICB9OwogICAgZmFSZWdpc3RlcmVkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInJlZ2lzdGVyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNzRdLCAiZjI1ZCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDAgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTYgMzQuNCAwIDQxIDY4LjNjNi44IDExLjQgMjEuNiAxNSAzMi45IDguMnMxNS0yMS42IDguMi0zMi45bC0zMC4yLTUwLjNjMjQuNi0xMS41IDQxLjYtMzYuNCA0MS42LTY1LjMgMC0zOS44LTMyLjItNzItNzItNzJsLTgwIDB6bTcyIDk2bC00OCAwIDAtNDggNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAweiJdCiAgICB9OwogICAgaWNvbnMyID0gewogICAgICBmYVNxdWFyZU1pbnVzLAogICAgICBmYU1pbnVzU3F1YXJlLAogICAgICBmYUNhbGVuZGFyQ2hlY2ssCiAgICAgIGZhRmFjZUtpc3MsCiAgICAgIGZhS2lzcywKICAgICAgZmFQYXN0ZSwKICAgICAgZmFGaWxlQ2xpcGJvYXJkLAogICAgICBmYUhhbmRQb2ludExlZnQsCiAgICAgIGZhRmlsZUV4Y2VsLAogICAgICBmYUVudmVsb3BlLAogICAgICBmYVNxdWFyZUNhcmV0RG93biwKICAgICAgZmFDYXJldFNxdWFyZURvd24sCiAgICAgIGZhVHJ1Y2ssCiAgICAgIGZhQmVsbCwKICAgICAgZmFNZXNzYWdlLAogICAgICBmYUNvbW1lbnRBbHQsCiAgICAgIGZhRmFjZURpenp5LAogICAgICBmYURpenp5LAogICAgICBmYUNhbGVuZGFyRGF5cywKICAgICAgZmFDYWxlbmRhckFsdCwKICAgICAgZmFIYW5kUG9pbnRVcCwKICAgICAgZmFIYW5kTGl6YXJkLAogICAgICBmYVNxdWFyZUZ1bGwsCiAgICAgIGZhQ2lyY2xlUGF1c2UsCiAgICAgIGZhUGF1c2VDaXJjbGUsCiAgICAgIGZhSGFyZERyaXZlLAogICAgICBmYUhkZCwKICAgICAgZmFGaWxlWmlwcGVyLAogICAgICBmYUZpbGVBcmNoaXZlLAogICAgICBmYUZsb3BweURpc2ssCiAgICAgIGZhU2F2ZSwKICAgICAgZmFGYWNlR3JpblRvbmd1ZVNxdWludCwKICAgICAgZmFHcmluVG9uZ3VlU3F1aW50LAogICAgICBmYUNhbWVyYSwKICAgICAgZmFDYW1lcmFBbHQsCiAgICAgIGZhRmFjZUdyaW5TdGFycywKICAgICAgZmFHcmluU3RhcnMsCiAgICAgIGZhRXllLAogICAgICBmYUZhY2VTYWRUZWFyLAogICAgICBmYVNhZFRlYXIsCiAgICAgIGZhU2hhcmVGcm9tU3F1YXJlLAogICAgICBmYVNoYXJlU3F1YXJlLAogICAgICBmYU5vdGVTdGlja3ksCiAgICAgIGZhU3RpY2t5Tm90ZSwKICAgICAgZmFIYW5kQmFja0Zpc3QsCiAgICAgIGZhSGFuZFJvY2ssCiAgICAgIGZhQ2hlc3NRdWVlbiwKICAgICAgZmFGYWNlR3JpblRlYXJzLAogICAgICBmYUdyaW5UZWFycywKICAgICAgZmFQZW5Ub1NxdWFyZSwKICAgICAgZmFFZGl0LAogICAgICBmYUZhY2VHcmluQmVhbVN3ZWF0LAogICAgICBmYUdyaW5CZWFtU3dlYXQsCiAgICAgIGZhQ2xvY2ssCiAgICAgIGZhQ2xvY2tGb3VyLAogICAgICBmYUZhY2VMYXVnaFdpbmssCiAgICAgIGZhTGF1Z2hXaW5rLAogICAgICBmYVBhcGVyUGxhbmUsCiAgICAgIGZhSGVhcnQsCiAgICAgIGZhRm9udEF3ZXNvbWU6IGZhRm9udEF3ZXNvbWUyLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZzogZmFGb250QXdlc29tZUZsYWcyLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbDIsCiAgICAgIGZhQ2xvbmUsCiAgICAgIGZhRm9sZGVyT3BlbiwKICAgICAgZmFXaW5kb3dNaW5pbWl6ZSwKICAgICAgZmFTdGFySGFsZiwKICAgICAgZmFBbGFybUNsb2NrLAogICAgICBmYU5ld3NwYXBlciwKICAgICAgZmFIb3NwaXRhbCwKICAgICAgZmFIb3NwaXRhbEFsdCwKICAgICAgZmFIb3NwaXRhbFdpZGUsCiAgICAgIGZhQ2lyY2xlU3RvcCwKICAgICAgZmFTdG9wQ2lyY2xlLAogICAgICBmYU9iamVjdFVuZ3JvdXAsCiAgICAgIGZhQ29tbWVudCwKICAgICAgZmFDaGVzc1Bhd24sCiAgICAgIGZhQ2FsZW5kYXJQbHVzLAogICAgICBmYUNsaXBib2FyZCwKICAgICAgZmFUaHVtYnNEb3duLAogICAgICBmYUlkQmFkZ2UsCiAgICAgIGZhU3F1YXJlQ2hlY2ssCiAgICAgIGZhQ2hlY2tTcXVhcmUsCiAgICAgIGZhQ2hlc3NCaXNob3AsCiAgICAgIGZhRW52ZWxvcGVPcGVuLAogICAgICBmYUNpcmNsZVhtYXJrLAogICAgICBmYVRpbWVzQ2lyY2xlLAogICAgICBmYVhtYXJrQ2lyY2xlLAogICAgICBmYVNxdWFyZUNhcmV0VXAsCiAgICAgIGZhQ2FyZXRTcXVhcmVVcCwKICAgICAgZmFGaWxlSW1hZ2UsCiAgICAgIGZhU3F1YXJlQ2FyZXRSaWdodCwKICAgICAgZmFDYXJldFNxdWFyZVJpZ2h0LAogICAgICBmYVN1biwKICAgICAgZmFJbWFnZSwKICAgICAgZmFMaWdodGJ1bGIsCiAgICAgIGZhQWRkcmVzc0NhcmQsCiAgICAgIGZhQ29udGFjdENhcmQsCiAgICAgIGZhVmNhcmQsCiAgICAgIGZhRmFjZU1laCwKICAgICAgZmFNZWgsCiAgICAgIGZhTWFwLAogICAgICBmYUhhbmRQb2ludERvd24sCiAgICAgIGZhRmFjZU1laEJsYW5rLAogICAgICBmYU1laEJsYW5rLAogICAgICBmYUZhY2VHcmluVG9uZ3VlLAogICAgICBmYUdyaW5Ub25ndWUsCiAgICAgIGZhRnV0Ym9sLAogICAgICBmYUZ1dGJvbEJhbGwsCiAgICAgIGZhU29jY2VyQmFsbCwKICAgICAgZmFGYWNlU3VycHJpc2UsCiAgICAgIGZhU3VycHJpc2UsCiAgICAgIGZhRm9sZGVyLAogICAgICBmYUZvbGRlckJsYW5rLAogICAgICBmYUNsb3VkLAogICAgICBmYUNpcmNsZSwKICAgICAgZmFGYWNlR3JpblNxdWludCwKICAgICAgZmFHcmluU3F1aW50LAogICAgICBmYUNpcmNsZVVzZXIsCiAgICAgIGZhVXNlckNpcmNsZSwKICAgICAgZmFSZWN0YW5nbGVMaXN0LAogICAgICBmYUxpc3RBbHQsCiAgICAgIGZhSGFuZCwKICAgICAgZmFIYW5kUGFwZXIsCiAgICAgIGZhVGh1bWJzVXAsCiAgICAgIGZhQnVpbGRpbmcsCiAgICAgIGZhQ2hlc3NSb29rLAogICAgICBmYUNpcmNsZVF1ZXN0aW9uLAogICAgICBmYVF1ZXN0aW9uQ2lyY2xlLAogICAgICBmYUZpbGUsCiAgICAgIGZhRmFjZVNhZENyeSwKICAgICAgZmFTYWRDcnksCiAgICAgIGZhQ2FsZW5kYXJNaW51cywKICAgICAgZmFGYWNlVGlyZWQsCiAgICAgIGZhVGlyZWQsCiAgICAgIGZhSGFuZFBvaW50UmlnaHQsCiAgICAgIGZhQ2lyY2xlVXAsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVVcCwKICAgICAgZmFIYW5kU2Npc3NvcnMsCiAgICAgIGZhR2VtLAogICAgICBmYVJlY3RhbmdsZVhtYXJrLAogICAgICBmYVJlY3RhbmdsZVRpbWVzLAogICAgICBmYVRpbWVzUmVjdGFuZ2xlLAogICAgICBmYVdpbmRvd0Nsb3NlLAogICAgICBmYVRyYXNoQ2FuLAogICAgICBmYVRyYXNoQWx0LAogICAgICBmYUxpZmVSaW5nLAogICAgICBmYUNvcHlyaWdodCwKICAgICAgZmFDaXJjbGVMZWZ0LAogICAgICBmYUFycm93QWx0Q2lyY2xlTGVmdCwKICAgICAgZmFDYWxlbmRhciwKICAgICAgZmFGYWNlRnJvd25PcGVuLAogICAgICBmYUZyb3duT3BlbiwKICAgICAgZmFDaGFydEJhciwKICAgICAgZmFCYXJDaGFydCwKICAgICAgZmFIb3VzZSwKICAgICAgZmFIb21lLAogICAgICBmYUhvbWVBbHQsCiAgICAgIGZhSG9tZUxnQWx0LAogICAgICBmYUZhY2VGcm93biwKICAgICAgZmFGcm93biwKICAgICAgZmFVc2VyLAogICAgICBmYVVzZXJBbHQsCiAgICAgIGZhVXNlckxhcmdlLAogICAgICBmYVNub3dmbGFrZSwKICAgICAgZmFCb29rbWFyaywKICAgICAgZmFTcXVhcmVDYXJldExlZnQsCiAgICAgIGZhQ2FyZXRTcXVhcmVMZWZ0LAogICAgICBmYUhhbmRzaGFrZSwKICAgICAgZmFIYW5kc2hha2VBbHQsCiAgICAgIGZhSGFuZHNoYWtlU2ltcGxlLAogICAgICBmYUZhY2VTbWlsZVdpbmssCiAgICAgIGZhU21pbGVXaW5rLAogICAgICBmYUZhY2VHcmluU3F1aW50VGVhcnMsCiAgICAgIGZhR3JpblNxdWludFRlYXJzLAogICAgICBmYUZpbGVBdWRpbywKICAgICAgZmFDYWxlbmRhclhtYXJrLAogICAgICBmYUNhbGVuZGFyVGltZXMsCiAgICAgIGZhQ2lyY2xlRG93biwKICAgICAgZmFBcnJvd0FsdENpcmNsZURvd24sCiAgICAgIGZhRmlsZUxpbmVzLAogICAgICBmYUZpbGVBbHQsCiAgICAgIGZhRmlsZVRleHQsCiAgICAgIGZhQ29tbWVudHMsCiAgICAgIGZhQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2hlY2tDaXJjbGUsCiAgICAgIGZhTW9vbiwKICAgICAgZmFDbG9zZWRDYXB0aW9uaW5nLAogICAgICBmYUltYWdlcywKICAgICAgZmFDaXJjbGVSaWdodCwKICAgICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LAogICAgICBmYUlkQ2FyZCwKICAgICAgZmFEcml2ZXJzTGljZW5zZSwKICAgICAgZmFDaXJjbGVQbGF5LAogICAgICBmYVBsYXlDaXJjbGUsCiAgICAgIGZhRmFjZUxhdWdoQmVhbSwKICAgICAgZmFMYXVnaEJlYW0sCiAgICAgIGZhQWRkcmVzc0Jvb2ssCiAgICAgIGZhQ29udGFjdEJvb2ssCiAgICAgIGZhSG91cmdsYXNzLAogICAgICBmYUhvdXJnbGFzc0VtcHR5LAogICAgICBmYUhlYWRwaG9uZXMsCiAgICAgIGZhSGVhZHBob25lc0FsdCwKICAgICAgZmFIZWFkcGhvbmVzU2ltcGxlLAogICAgICBmYUZpbGVQb3dlcnBvaW50LAogICAgICBmYVdpbmRvd01heGltaXplLAogICAgICBmYUNvbW1lbnREb3RzLAogICAgICBmYUNvbW1lbnRpbmcsCiAgICAgIGZhRmFjZUdyaW5Ub25ndWVXaW5rLAogICAgICBmYUdyaW5Ub25ndWVXaW5rLAogICAgICBmYUhvdXJnbGFzc0hhbGYsCiAgICAgIGZhSG91cmdsYXNzMiwKICAgICAgZmFDcmVkaXRDYXJkLAogICAgICBmYUNyZWRpdENhcmRBbHQsCiAgICAgIGZhSGFuZFNwb2NrLAogICAgICBmYUJlbGxTbGFzaCwKICAgICAgZmFTdGFyLAogICAgICBmYUZsYWcsCiAgICAgIGZhTGVtb24sCiAgICAgIGZhV2luZG93UmVzdG9yZSwKICAgICAgZmFGYWNlR3JpbkhlYXJ0cywKICAgICAgZmFHcmluSGVhcnRzLAogICAgICBmYUZhY2VLaXNzQmVhbSwKICAgICAgZmFLaXNzQmVhbSwKICAgICAgZmFGaWxlUGRmLAogICAgICBmYUZhY2VHcmluV2lkZSwKICAgICAgZmFHcmluQWx0LAogICAgICBmYUZhY2VMYXVnaFNxdWludCwKICAgICAgZmFMYXVnaFNxdWludCwKICAgICAgZmFGYWNlS2lzc1dpbmtIZWFydCwKICAgICAgZmFLaXNzV2lua0hlYXJ0LAogICAgICBmYUNvcHksCiAgICAgIGZhQ2hlc3NLaW5nLAogICAgICBmYVNxdWFyZVBsdXMsCiAgICAgIGZhUGx1c1NxdWFyZSwKICAgICAgZmFGaWxlQ29kZSwKICAgICAgZmFGYWNlR3JpbldpbmssCiAgICAgIGZhR3JpbldpbmssCiAgICAgIGZhTW9uZXlCaWxsMSwKICAgICAgZmFNb25leUJpbGxBbHQsCiAgICAgIGZhRXllU2xhc2gsCiAgICAgIGZhRmlsZVdvcmQsCiAgICAgIGZhRmFjZUFuZ3J5LAogICAgICBmYUFuZ3J5LAogICAgICBmYUNoZXNzS25pZ2h0LAogICAgICBmYUZhY2VHcmluQmVhbSwKICAgICAgZmFHcmluQmVhbSwKICAgICAgZmFIYW5kUGVhY2UsCiAgICAgIGZhQ29tcGFzcywKICAgICAgZmFTcXVhcmUsCiAgICAgIGZhRmFjZUdyaW4sCiAgICAgIGZhR3JpbiwKICAgICAgZmFGYWNlU21pbGUsCiAgICAgIGZhU21pbGUsCiAgICAgIGZhRmFjZVNtaWxlQmVhbSwKICAgICAgZmFTbWlsZUJlYW0sCiAgICAgIGZhRm9sZGVyQ2xvc2VkLAogICAgICBmYUtleWJvYXJkLAogICAgICBmYUZhY2VSb2xsaW5nRXllcywKICAgICAgZmFNZWhSb2xsaW5nRXllcywKICAgICAgZmFGYWNlR3JpbWFjZSwKICAgICAgZmFHcmltYWNlLAogICAgICBmYUNpcmNsZURvdCwKICAgICAgZmFEb3RDaXJjbGUsCiAgICAgIGZhT2JqZWN0R3JvdXAsCiAgICAgIGZhRmFjZUZsdXNoZWQsCiAgICAgIGZhRmx1c2hlZCwKICAgICAgZmFTdGFySGFsZlN0cm9rZSwKICAgICAgZmFTdGFySGFsZkFsdCwKICAgICAgZmFGaWxlVmlkZW8sCiAgICAgIGZhRmFjZUxhdWdoLAogICAgICBmYUxhdWdoLAogICAgICBmYUhhbmRQb2ludGVyLAogICAgICBmYVJlZ2lzdGVyZWQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1zb2xpZC1zdmctaWNvbnNANy4yLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanMKdmFyIHByZWZpeDMsIGZhMCwgZmExLCBmYTIsIGZhMywgZmE0LCBmYTUsIGZhNiwgZmE3LCBmYTgsIGZhOSwgZmFEb2xsYXJTaWduLCBmYURvbGxhciwgZmFVc2QsIGZhRG9nLCBmYVRydWNrTW92aW5nLCBmYVJvdGF0ZSwgZmFTeW5jQWx0LCBmYVNxdWFyZU1pbnVzMiwgZmFNaW51c1NxdWFyZTIsIGZhQWxpZ25KdXN0aWZ5LCBmYUNhbGVuZGFyQ2hlY2syLCBmYUZhY2VLaXNzMiwgZmFLaXNzMiwgZmFLaXRjaGVuU2V0LCBmYURuYSwgZmFDaGlsZFJlYWNoaW5nLCBmYVBhc3RlMiwgZmFGaWxlQ2xpcGJvYXJkMiwgZmFNZXRlb3IsIGZhR2VhcnMsIGZhQ29ncywgZmFGaWxlQ2lyY2xlUGx1cywgZmFJY2ljbGVzLCBmYUFycm93VHJlbmRVcCwgZmFIZXhhZ29uTm9kZXNCb2x0LCBmYVF1ZXN0aW9uLCBmYUhhbmRzQm91bmQsIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UsIGZhRmlsZUFycm93RG93biwgZmFGaWxlRG93bmxvYWQsIGZhUGVyc29uQm9vdGgsIGZhTG9jdXN0LCBmYVJpZ2h0TG9uZywgZmFMb25nQXJyb3dBbHRSaWdodCwgZmFUcnVja0Ryb3BsZXQsIGZhSGFuZEhvbGRpbmdNZWRpY2FsLCBmYUhhbmRQb2ludExlZnQyLCBmYUNhbGN1bGF0b3IsIGZhTWludXMsIGZhU3VidHJhY3QsIGZhQXJyb3dVcFpBLCBmYVNvcnRBbHBoYVVwQWx0LCBmYU1pY3JvcGhvbmVTbGFzaCwgZmFTcXVhcmVQZW4sIGZhUGVuU3F1YXJlLCBmYVBlbmNpbFNxdWFyZSwgZmFIYW5kRmlzdCwgZmFGaXN0UmFpc2VkLCBmYUNvbW1lbnRTbXMsIGZhU21zLCBmYVNpbUNhcmQsIGZhU2NhbGVCYWxhbmNlZCwgZmFCYWxhbmNlU2NhbGUsIGZhQ2FyLCBmYUF1dG9tb2JpbGUsIGZhQ3JvcFNpbXBsZSwgZmFDcm9wQWx0LCBmYU1lZGFsLCBmYVNjcm9sbCwgZmFGaWxlRXhjZWwyLCBmYUZpbHRlciwgZmFEcnVtLCBmYU1hcFBpbiwgZmFTY2FsZVVuYmFsYW5jZWRGbGlwLCBmYUJhbGFuY2VTY2FsZVJpZ2h0LCBmYUFycm93c1RvQ2lyY2xlLCBmYUVudmVsb3BlMiwgZmFCYWJ5LCBmYVNxdWFyZUNhcmV0RG93bjIsIGZhQ2FyZXRTcXVhcmVEb3duMiwgZmFUZW50LCBmYUEsIGZhUGFyYWNodXRlQm94LCBmYUNhcnRBcnJvd0Rvd24sIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ2xvdWRBcnJvd1VwLCBmYUNsb3VkVXBsb2FkLCBmYUNsb3VkVXBsb2FkQWx0LCBmYUF0LCBmYUluZGlhblJ1cGVlU2lnbiwgZmFJbmRpYW5SdXBlZSwgZmFJbnIsIGZhVHJ1Y2syLCBmYUNoYWxrYm9hcmRVc2VyLCBmYUNoYWxrYm9hcmRUZWFjaGVyLCBmYVVzZXJDaGVjaywgZmFVc2VyTmluamEsIGZhUGxhbnRXaWx0LCBmYVdlaWdodFNjYWxlLCBmYVdlaWdodCwgZmFDYXJldFJpZ2h0LCBmYUZsb3JpblNpZ24sIGZhQmVsbDIsIGZhTGFyaVNpZ24sIGZhTWlsbFNpZ24sIGZhUGVyc29uU25vd2JvYXJkaW5nLCBmYVNub3dib2FyZGluZywgZmFUdHksIGZhVGVsZXR5cGUsIGZhVXNlcnNSZWN0YW5nbGUsIGZhTW9iaWxlLCBmYU1vYmlsZUFuZHJvaWQsIGZhTW9iaWxlUGhvbmUsIGZhQXJyb3dzVHVyblRvRG90cywgZmFFeGNsYW1hdGlvbiwgZmFDaHVyY2gsIGZhVG9nZ2xlT2ZmLCBmYVNob2VQcmludHMsIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVdhbGxldCwgZmFNZXNzYWdlMiwgZmFDb21tZW50QWx0MiwgZmFUcm9waHksIGZhRmFjZURpenp5MiwgZmFEaXp6eTIsIGZhQmFjdGVyaWEsIGZhRWFyRGVhZiwgZmFEZWFmLCBmYURlYWZuZXNzLCBmYUhhcmRPZkhlYXJpbmcsIGZhUGVvcGxlQXJyb3dzLCBmYVBlb3BsZUFycm93c0xlZnRSaWdodCwgZmFIYW5kc0NsYXBwaW5nLCBmYVZpcnVzQ292aWRTbGFzaCwgZmFDYWxlbmRhckRheXMyLCBmYUNhbGVuZGFyQWx0MiwgZmFEaWFtb25kVHVyblJpZ2h0LCBmYURpcmVjdGlvbnMsIGZhSGFuZFBvaW50VXAyLCBmYUJlemllckN1cnZlLCBmYVBlcnNvbkhhbGZEcmVzcywgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCwgZmFQb2xsSCwgZmFTY2hvb2xDaXJjbGVYbWFyaywgZmFIYW5kTGl6YXJkMiwgZmFDaGFsa2JvYXJkLCBmYUJsYWNrYm9hcmQsIGZhVXBSaWdodEZyb21TcXVhcmUsIGZhRXh0ZXJuYWxMaW5rQWx0LCBmYVNxdWFyZUZ1bGwyLCBmYUNsb3ZlciwgZmFUZWV0aE9wZW4sIGZhQmFyc1N0YWdnZXJlZCwgZmFSZW9yZGVyLCBmYVN0cmVhbSwgZmFXYXJlaG91c2UsIGZhU3dhdGNoYm9vaywgZmFDYW1wZ3JvdW5kLCBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LCBmYUdsYXNzZXMsIGZhQ2lyY2xlUGF1c2UyLCBmYVBhdXNlQ2lyY2xlMiwgZmFNZW1vcnksIGZhR2lmdCwgZmFNb25leUJpbGxXaGVhdCwgZmFEdW5nZW9uLCBmYVN1aXRjYXNlTWVkaWNhbCwgZmFNZWRraXQsIGZhUGVyc29uQ2FuZSwgZmFHYXVnZSwgZmFEYXNoYm9hcmQsIGZhR2F1Z2VNZWQsIGZhVGFjaG9tZXRlckFsdEF2ZXJhZ2UsIGZhRW52ZWxvcGVPcGVuVGV4dCwgZmFUb29sYm94LCBmYVBvd2VyT2ZmLCBmYVNpZ25hbCwgZmFTaWduYWw1LCBmYVNpZ25hbFBlcmZlY3QsIGZhQXJyb3dzU3BpbiwgZmFKb2ludCwgZmFCcmFpbGxlLCBmYUJhc2tldFNob3BwaW5nLCBmYVNob3BwaW5nQmFza2V0LCBmYUJyaWRnZSwgZmFQbGFuZUFycml2YWwsIGZhQ2FzaFJlZ2lzdGVyLCBmYVJpbmcsIGZhQXF1YXJpdXMsIGZhU2hhcmVOb2RlcywgZmFTaGFyZUFsdCwgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbiwgZmFCaW5vY3VsYXJzLCBmYUtpcFNpZ24sIGZhSGFyZERyaXZlMiwgZmFIZGQyLCBmYVJhbmtpbmdTdGFyLCBmYVVzZXJUaWUsIGZhRWxsaXBzaXMsIGZhRWxsaXBzaXNILCBmYVN0b3JlU2xhc2gsIGZhUGVyY2VudCwgZmFQZXJjZW50YWdlLCBmYUZpbGVaaXBwZXIyLCBmYUZpbGVBcmNoaXZlMiwgZmFEaXNwbGF5LCBmYUljb25zLCBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LCBmYVJ1bGVyVmVydGljYWwsIGZhTWFwTG9jYXRpb25Eb3QsIGZhTWFwTWFya2VkQWx0LCBmYUhlYXJ0Q3JhY2ssIGZhSGVhcnRCcm9rZW4sIGZhQ293LCBmYVJzcywgZmFGZWVkLCBmYU1hZ25pZnlpbmdHbGFzcywgZmFTZWFyY2gsIGZhQ2xvdWRNb29uLCBmYUJveGVzU3RhY2tlZCwgZmFCb3hlcywgZmFCb3hlc0FsdCwgZmFDb2RlQnJhbmNoLCBmYUJhbiwgZmFDYW5jZWwsIGZhSnVnRGV0ZXJnZW50LCBmYVJlcGx5LCBmYU1haWxSZXBseSwgZmFTdW5QbGFudFdpbHQsIGZhQmFjdGVyaXVtLCBmYVJlY29yZFZpbnlsLCBmYUZsb3BweURpc2syLCBmYVNhdmUyLCBmYVRvaWxldHNQb3J0YWJsZSwgZmFPLCBmYVBhbGV0dGUsIGZhVW5sb2NrLCBmYUVhckxpc3RlbiwgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLCBmYUNvZGVQdWxsUmVxdWVzdCwgZmFLZXksIGZhU2t1bGwsIGZhTWFyc1N0cm9rZVVwLCBmYU1hcnNTdHJva2VWLCBmYUZpcmVGbGFtZVNpbXBsZSwgZmFCdXJuLCBmYVRyZWUsIGZhU21vZywgZmFTLCBmYUplZGksIGZhUGVyc29uSGlraW5nLCBmYUhpa2luZywgZmFBcnJvd3NVcFRvTGluZSwgZmFNYXJzRG91YmxlLCBmYVRoZXJtb21ldGVyLCBmYVBhaW50YnJ1c2gsIGZhUGFpbnRCcnVzaCwgZmFOZXV0ZXIsIGZhU3F1YXJlUGhvbmVGbGlwLCBmYVBob25lU3F1YXJlQWx0LCBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiwgZmFHcmluVG9uZ3VlU3F1aW50MiwgZmFDb21tZW50RG9sbGFyLCBmYUhpcHBvLCBmYUJvd2xGb29kLCBmYVNxdWFyZVZpcnVzLCBmYUNsb3VkU3VuUmFpbiwgZmFBcnJvd1JpZ2h0TG9uZywgZmFMb25nQXJyb3dSaWdodCwgZmFCdWlsZGluZ1VuLCBmYVRlbXBlcmF0dXJlTG93LCBmYURvb3JPcGVuLCBmYUFsaWduTGVmdCwgZmFDYW1lcmEyLCBmYUNhbWVyYUFsdDIsIGZhVXNlcnNSYXlzLCBmYVJhaW5ib3csIGZhU2l0ZW1hcCwgZmFGYWNlR3JpblN0YXJzMiwgZmFHcmluU3RhcnMyLCBmYVNvcnRVcCwgZmFTb3J0QXNjLCBmYUV5ZTIsIGZhQ2FyZXRMZWZ0LCBmYUFwcGxlV2hvbGUsIGZhQXBwbGVBbHQsIGZhU2Nyb2xsVG9yYWgsIGZhVG9yYWgsIGZhSG91c2VMb2NrLCBmYUFycm93c0xlZnRSaWdodFRvTGluZSwgZmFUcmFzaCwgZmFGYWNlU2FkVGVhcjIsIGZhU2FkVGVhcjIsIGZhRmF4LCBmYVBlcnNvbkNpcmNsZVBsdXMsIGZhSGFtc2EsIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24sIGZhQ2xpcGJvYXJkQ2hlY2ssIGZhU2hhcmVGcm9tU3F1YXJlMiwgZmFTaGFyZVNxdWFyZTIsIGZhUmVjZWlwdCwgZmFFcXVhbHMsIGZhQ2hldnJvblVwLCBmYVZpcnVzU2xhc2gsIGZhU2xhc2gsIGZhRXhwYW5kLCBmYU5vdGVTdGlja3kyLCBmYVN0aWNreU5vdGUyLCBmYVRhYmxlQ29sdW1ucywgZmFDb2x1bW5zLCBmYVBlcnNvblNoZWx0ZXIsIGZhQ2lyY2xlTm90Y2gsIGZhV2F0ZXIsIGZhRGVsZXRlTGVmdCwgZmFCYWNrc3BhY2UsIGZhQnJvb21CYWxsLCBmYVF1aWRkaXRjaCwgZmFRdWlkZGl0Y2hCcm9vbUJhbGwsIGZhSiwgZmFTaHV0dGxlU3BhY2UsIGZhU3BhY2VTaHV0dGxlLCBmYVlpbllhbmcsIGZhU3RvcCwgZmFUcm93ZWwsIGZhSGFuZEJhY2tGaXN0MiwgZmFIYW5kUm9jazIsIGZhVGVtcGVyYXR1cmVIaWdoLCBmYUdyZWF0ZXJUaGFuLCBmYUNydXRjaCwgZmFTZXB0YWdvbiwgZmFIZXB0YWdvbiwgZmFTdHJlZXRWaWV3LCBmYVdhdmVTcXVhcmUsIGZhQW5nbGVMZWZ0LCBmYVNjcmV3ZHJpdmVyLCBmYVRyYWN0b3IsIGZhQnJpZGdlQ2lyY2xlWG1hcmssIGZhVmlhbHMsIGZhU3RldGhvc2NvcGUsIGZhUG9kY2FzdCwgZmFBcnJvd1VwUmlnaHREb3RzLCBmYUNoZXNzUXVlZW4yLCBmYUFuY2hvckNpcmNsZUV4Y2xhbWF0aW9uLCBmYUVsbGlwc2lzVmVydGljYWwsIGZhRWxsaXBzaXNWLCBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sIGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbiwgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUsIGZhTm90RXF1YWwsIGZhVHJhaW5UcmFtLCBmYVBsYW5lRGVwYXJ0dXJlLCBmYVJpZ2h0VG9CcmFja2V0LCBmYVNpZ25JbkFsdCwgZmFTZENhcmQsIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiwgZmFTaGVrZWxTaWduLCBmYUlscywgZmFTaGVrZWwsIGZhU2hlcWVsLCBmYVNoZXFlbFNpZ24sIGZhUmFkaW8sIGZhSGFuZERvdHMsIGZhQWxsZXJnaWVzLCBmYUJvb2tTa3VsbCwgZmFCb29rRGVhZCwgZmFVbmxvY2tLZXlob2xlLCBmYVVubG9ja0FsdCwgZmFGaWxlQXJyb3dVcCwgZmFGaWxlVXBsb2FkLCBmYUZhY2VHcmluVGVhcnMyLCBmYUdyaW5UZWFyczIsIGZhUGVuVG9TcXVhcmUyLCBmYUVkaXQyLCBmYUVhcnRoRXVyb3BlLCBmYUdsb2JlRXVyb3BlLCBmYUZhY2VHcmluQmVhbVN3ZWF0MiwgZmFHcmluQmVhbVN3ZWF0MiwgZmFDaXJjbGVIYWxmU3Ryb2tlLCBmYUFkanVzdCwgZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uLCBmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrLCBmYVRydWNrRmllbGRVbiwgZmFDbG9jazIsIGZhQ2xvY2tGb3VyMiwgZmFCb29rLCBmYUZhY2VMYXVnaFdpbmsyLCBmYUxhdWdoV2luazIsIGZhQ2xvdWRNZWF0YmFsbCwgZmFDaGFydEFyZWEsIGZhQXJlYUNoYXJ0LCBmYVJ1cGlhaFNpZ24sIGZhVGV4dFdpZHRoLCBmYVNhdGVsbGl0ZSwgZmFNYWduaWZ5aW5nR2xhc3NNaW51cywgZmFTZWFyY2hNaW51cywgZmFQZW9wbGVHcm91cCwgZmFTcXVhcmVCaW5hcnksIGZhTWFza3NUaGVhdGVyLCBmYVRoZWF0ZXJNYXNrcywgZmFDYXJ0UGx1cywgZmFIYW5kc0FzbEludGVycHJldGluZywgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZywgZmFBc2xJbnRlcnByZXRpbmcsIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZywgZmFUYWJsZUNlbGxzUm93VW5sb2NrLCBmYVJvY2tldCwgZmFTaHJpbXAsIGZhVGVuZ2VTaWduLCBmYVRlbmdlLCBmYUhvdXNlQ2hpbW5leU1lZGljYWwsIGZhQ2xpbmljTWVkaWNhbCwgZmFVc2Vyc1NsYXNoLCBmYVBhcGVyUGxhbmUyLCBmYUJvb2tBdGxhcywgZmFBdGxhcywgZmFUYWJsZSwgZmFIZWFydDIsIGZhQ2lyY2xlQ2hldnJvblVwLCBmYUNoZXZyb25DaXJjbGVVcCwgZmFCYXR0ZXJ5SGFsZiwgZmFCYXR0ZXJ5MywgZmFGb250QXdlc29tZTMsIGZhRm9udEF3ZXNvbWVGbGFnMywgZmFGb250QXdlc29tZUxvZ29GdWxsMywgZmFIYW5kY3VmZnMsIGZhSGF0Q293Ym95U2lkZSwgZmFJbmR1c3RyeSwgZmFMaW5lc0xlYW5pbmcsIGZhUGFzc3BvcnQsIGZhSW5maW5pdHksIGZhQ2xvbmUyLCBmYUZvcndhcmQsIGZhTSwgZmFSb2FkU3Bpa2VzLCBmYU1vdW50YWluLCBmYUNoZXNzLCBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycywgZmFUZW1wZXJhdHVyZTMsIGZhVGhlcm1vbWV0ZXIzLCBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycywgZmFCLCBmYVNoaWVsZFZpcnVzLCBmYUxpdGVjb2luU2lnbiwgZmFEaWNlRDYsIGZhR3JpcExpbmVzVmVydGljYWwsIGZhR29sZkJhbGxUZWUsIGZhR29sZkJhbGwsIGZhSGV4YWdvbiwgZmFGb2xkZXJPcGVuMiwgZmFLYWFiYSwgZmFIYW5kSG9sZGluZywgZmFTaW5nbGVRdW90ZVJpZ2h0LCBmYUJvdHRsZURyb3BsZXQsIGZhV2luZG93TWluaW1pemUyLCBmYUNoZXZyb25SaWdodCwgZmFFZ2csIGZhTGFuZG1hcmtEb21lLCBmYUxhbmRtYXJrQWx0LCBmYVdvcm0sIGZhVXNlckluanVyZWQsIGZhU3RyaWtldGhyb3VnaCwgZmFCbG9nLCBmYVN0b3B3YXRjaDIwLCBmYVRydWNrUGlja3VwLCBmYVNlZWRsaW5nLCBmYVNwcm91dCwgZmFUcmFuc2dlbmRlciwgZmFUcmFuc2dlbmRlckFsdCwgZmFTdGFySGFsZjIsIGZhUGhvdG9GaWxtLCBmYVBob3RvVmlkZW8sIGZhUGljdHVyZUluUGljdHVyZSwgZmFQdW1wTWVkaWNhbCwgZmFGaXJlLCBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsIGZhU2VhcmNoUGx1cywgZmFGbGFzaywgZmFBbGlnblJpZ2h0LCBmYUNhYmxlQ2FyLCBmYVRyYW0sIGZhS2l0TWVkaWNhbCwgZmFGaXJzdEFpZCwgZmFHcmlwTGluZXMsIGZhQnVyZ2VyLCBmYUhhbWJ1cmdlciwgZmFTbm93bWFuLCBmYUhvdGVsLCBmYVByaW50LCBmYVZvbGxleWJhbGwsIGZhVm9sbGV5YmFsbEJhbGwsIGZhVHJhZmZpY0xpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhVXNlcnMsIGZhQ2VydGlmaWNhdGUsIGZhQWxhcm1DbG9jazIsIGZhSGVsaWNvcHRlclN5bWJvbCwgZmFIb3VzZUNoaW1uZXlDcmFjaywgZmFIb3VzZURhbWFnZSwgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLCBmYURhdGFiYXNlLCBmYU5ld3NwYXBlcjIsIGZhQ2xvdWRSYWluLCBmYU1heGltaXplLCBmYUV4cGFuZEFycm93c0FsdCwgZmFMb2NhdGlvbkFycm93LCBmYUNpdHksIGZhWFJheSwgZmFVbWJyZWxsYUJlYWNoLCBmYUFycm93UmlnaHRUb0JyYWNrZXQsIGZhU2lnbkluLCBmYUhlYWRzZXQsIGZhU3Bsb3RjaCwgZmFVcExvbmcsIGZhTG9uZ0Fycm93QWx0VXAsIGZhSGV4YWdvbk5vZGVzLCBmYUhvc3BpdGFsMiwgZmFIb3NwaXRhbEFsdDIsIGZhSG9zcGl0YWxXaWRlMiwgZmFQZXJzb25IYXJhc3NpbmcsIGZhTW9uZXlCaWxsVHJlbmRVcCwgZmFQZW5SdWxlciwgZmFQZW5jaWxSdWxlciwgZmFSZXBlYXQsIGZhQm9uZSwgZmFGaXJlRmxhbWVDdXJ2ZWQsIGZhRmlyZUFsdCwgZmFCdXNTaW1wbGUsIGZhQnVzQWx0LCBmYVZlbnVzTWFycywgZmFCbGVuZGVyLCBmYVUsIGZhU2hhcmUsIGZhTWFpbEZvcndhcmQsIGZhUGhvbmVGbGlwLCBmYVBob25lQWx0LCBmYVRvaWxldFBvcnRhYmxlLCBmYVBlcnNvblByZWduYW50LCBmYUxlc3NUaGFuLCBmYVN1cGVyc2NyaXB0LCBmYUNpcmNsZVN0b3AyLCBmYVN0b3BDaXJjbGUyLCBmYUFycm93c1VwRG93biwgZmFBcnJvd3NWLCBmYVBvb1N0b3JtLCBmYVBvb0JvbHQsIGZhVmlkZW9TbGFzaCwgZmFTcXVhcmVYbWFyaywgZmFUaW1lc1NxdWFyZSwgZmFYbWFya1NxdWFyZSwgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsIGZhSGFuZEhvbGRpbmdXYXRlciwgZmFXb25TaWduLCBmYUtydywgZmFXb24sIGZhT2JqZWN0VW5ncm91cDIsIGZhQ29tbWVudDIsIGZhSGlsbEF2YWxhbmNoZSwgZmFBcnJvd3NUb0V5ZSwgZmFTbm93cGxvdywgZmFDaGFydEdhbnR0LCBmYVZpZGVvLCBmYVZpZGVvQ2FtZXJhLCBmYUNoZXNzUGF3bjIsIGZhU3luYWdvZ3VlLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhQ2FsZW5kYXJQbHVzMiwgZmFXaGVlbGNoYWlyTW92ZSwgZmFXaGVlbGNoYWlyQWx0LCBmYVVzZXJTaGllbGQsIGZhQm9sZCwgZmFIZWFydFB1bHNlLCBmYUhlYXJ0YmVhdCwgZmFTcXVhcmVSb290VmFyaWFibGUsIGZhU3F1YXJlUm9vdEFsdCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYU1hcmtlciwgZmFDbGlwYm9hcmQyLCBmYVBsYWNlT2ZXb3JzaGlwLCBmYUNhbm5hYmlzLCBmYVBlb3BsZVJvb2YsIGZhRGlzZWFzZSwgZmFCb29rQmlibGUsIGZhQmlibGUsIGZhQ2hlc3NCb2FyZCwgZmFNYXJzLCBmYUxhcHRvcCwgZmFVc2VyWG1hcmssIGZhVXNlclRpbWVzLCBmYUZsYWdVc2EsIGZhSGFuZE1pZGRsZUZpbmdlciwgZmFNb3J0YXJQZXN0bGUsIGZhSGVhZFNpZGVDb3VnaCwgZmFQbGFuZUxvY2ssIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsIGZhQmF0dGVyeTQsIGZhRnJhbmNTaWduLCBmYUZpbHRlckNpcmNsZURvbGxhciwgZmFGdW5uZWxEb2xsYXIsIGZhQ2hlZXNlLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhU2Nob29sLCBmYURpY2VGaXZlLCBmYVRvcm5hZG8sIGZhSmV0RmlnaHRlciwgZmFGaWdodGVySmV0LCBmYVRodW1ic0Rvd24yLCBmYUJyb29tLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFVdGVuc2lscywgZmFDdXRsZXJ5LCBmYUlkQmFkZ2UyLCBmYVNwaWRlciwgZmFNb2JpbGVSZXRybywgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsIGZhRmlsbERyaXAsIGZhU2hpZWxkSGVhcnQsIGZhUGVyc29uU2tpaW5nTm9yZGljLCBmYVNraWluZ05vcmRpYywgZmFTcXVhcmVDaGVjazIsIGZhQ2hlY2tTcXVhcmUyLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFDaGVzc0Jpc2hvcDIsIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCwgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQsIGZhRHJhd1BvbHlnb24sIGZhVmVjdG9yUG9seWdvbiwgZmFJQ3Vyc29yLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFTaGllbGREb2csIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFFbnZlbG9wZU9wZW4yLCBmYU1vdW5kLCBmYVZvaWNlbWFpbCwgZmFWZXN0LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhVywgZmFFeWVEcm9wcGVyLCBmYUV5ZURyb3BwZXJFbXB0eSwgZmFFeWVkcm9wcGVyLCBmYUNpcmNsZVhtYXJrMiwgZmFUaW1lc0NpcmNsZTIsIGZhWG1hcmtDaXJjbGUyLCBmYVRyYWlsZXIsIGZhVHVya2lzaExpcmFTaWduLCBmYVRyeSwgZmFUdXJraXNoTGlyYSwgZmFWb2xjYW5vLCBmYVdhbmRTcGFya2xlcywgZmFNaWNyb3Bob25lLCBmYUNyb3duLCBmYVRlbnRBcnJvd1R1cm5MZWZ0LCBmYVRydWNrRmFzdCwgZmFTaGlwcGluZ0Zhc3QsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFVc2VyQ2xvY2ssIGZhU2hvd2VyLCBmYVNxdWFyZUNhcmV0VXAyLCBmYUNhcmV0U3F1YXJlVXAyLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFQZW5GYW5jeSwgZmFFdXJvU2lnbiwgZmFFdXIsIGZhRXVybywgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYUxpcmFTaWduLCBmYVllblNpZ24sIGZhQ255LCBmYUpweSwgZmFSbWIsIGZhWWVuLCBmYUJveE9wZW4sIGZhVHJ1Y2tGaWVsZCwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGVyc29uUHJheWluZywgZmFQcmF5LCBmYUNsaXBib2FyZExpc3QsIGZhU2Fja0RvbGxhciwgZmFNb3VudGFpblN1biwgZmFBcnJvd1VwV2lkZVNob3J0LCBmYVNvcnRBbW91bnRVcCwgZmFVc2Vyc0xpbmUsIGZhU3Rhck9mRGF2aWQsIGZhTm90ZXNNZWRpY2FsLCBmYUF1c3RyYWxTaWduLCBmYUNsaXBib2FyZFVzZXIsIGZhRmlsZUltYWdlMiwgZmFTcXVhcmVDYXJldFJpZ2h0MiwgZmFDYXJldFNxdWFyZVJpZ2h0MiwgZmFWaWFsLCBmYUhlbGljb3B0ZXIsIGZhTWl0dGVuLCBmYUdhc1B1bXAsIGZhRW52ZWxvcGVDaXJjbGVDaGVjaywgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhU3VuMiwgZmFCYXNlYmFsbCwgZmFCYXNlYmFsbEJhbGwsIGZhSW1hZ2UyLCBmYU5vdGRlZiwgZmFCYXNrZXRiYWxsLCBmYUJhc2tldGJhbGxCYWxsLCBmYVBlbmNpbCwgZmFQZW5jaWxBbHQsIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsIGZhRGljZVNpeCwgZmFBbmdsZXNEb3duLCBmYUFuZ2xlRG91YmxlRG93biwgZmFTeXJpbmdlLCBmYVdoZWF0QXduLCBmYVdoZWF0QWx0LCBmYVBsYW5lVXAsIGZhQWxpZ25DZW50ZXIsIGZhSG9ja2V5UHVjaywgZmFDaXJjbGVBcnJvd0xlZnQsIGZhQXJyb3dDaXJjbGVMZWZ0LCBmYVBsdWdDaXJjbGVCb2x0LCBmYVJlc3Ryb29tLCBmYUFuY2hvckxvY2ssIGZhVGltZWxpbmUsIGZhTGlnaHRidWxiMiwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhTWFyc0FuZFZlbnVzLCBmYU5ldHdvcmtXaXJlZCwgZmFCdWlsZGluZ1NoaWVsZCwgZmFDb2RlLCBmYUZlYXRoZXJQb2ludGVkLCBmYUZlYXRoZXJBbHQsIGZhRmlsZUNpcmNsZVF1ZXN0aW9uLCBmYVNpZ25hdHVyZSwgZmFFYXJ0aEFtZXJpY2FzLCBmYUVhcnRoLCBmYUVhcnRoQW1lcmljYSwgZmFHbG9iZUFtZXJpY2FzLCBmYUNhcnJvdCwgZmFUZW1wZXJhdHVyZUZ1bGwsIGZhVGVtcGVyYXR1cmU0LCBmYVRoZXJtb21ldGVyNCwgZmFUaGVybW9tZXRlckZ1bGwsIGZhVGFibGVDZWxsc1Jvd0xvY2ssIGZhQm9sdExpZ2h0bmluZywgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFBcnJvd1VwTG9uZywgZmFMb25nQXJyb3dVcCwgZmFBZGRyZXNzQ2FyZDIsIGZhQ29udGFjdENhcmQyLCBmYVZjYXJkMiwgZmFBbmdsZVJpZ2h0LCBmYUZhY2VNZWgyLCBmYU1laDIsIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciwgZmFNYXAyLCBmYVVzZXJQbHVzLCBmYVZlbnVzLCBmYURpYWdyYW1TdWNjZXNzb3IsIGZhSGVhZFNpZGVDb3VnaFNsYXNoLCBmYURpYWdyYW1Qcm9qZWN0LCBmYVByb2plY3REaWFncmFtLCBmYVRlcm1pbmFsLCBmYUhvdXNlRmlyZSwgZmFNYXNrLCBmYUh1cnJpY2FuZSwgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFUaHVtYnRhY2ssIGZhVGh1bWJUYWNrLCBmYUhhbmRQb2ludERvd24yLCBmYUZhY2VNZWhCbGFuazIsIGZhTWVoQmxhbmsyLCBmYVRlbXBlcmF0dXJlRW1wdHksIGZhVGVtcGVyYXR1cmUwLCBmYVRoZXJtb21ldGVyMCwgZmFUaGVybW9tZXRlckVtcHR5LCBmYUJvcmRlck5vbmUsIGZhSGlnaGxpZ2h0ZXIsIGZhTW9uZXlCaWxsV2F2ZSwgZmFUb2lsZXRQYXBlclNsYXNoLCBmYUZpbGVTaGllbGQsIGZhVGV4dEhlaWdodCwgZmFGYWNlR3JpblRvbmd1ZTIsIGZhR3JpblRvbmd1ZTIsIGZhRmlsZVNpZ25hdHVyZSwgZmFCdWlsZGluZ1doZWF0LCBmYVBsdWdDaXJjbGVNaW51cywgZmFGdXRib2wyLCBmYUZ1dGJvbEJhbGwyLCBmYVNvY2NlckJhbGwyLCBmYUNpcmNsZVBsdXMsIGZhUGx1c0NpcmNsZSwgZmFCcmF6aWxpYW5SZWFsU2lnbiwgZmFTdGFyQW5kQ3Jlc2NlbnQsIGZhRmFjZVN1cnByaXNlMiwgZmFTdXJwcmlzZTIsIGZhSG9zcGl0YWxVc2VyLCBmYUFycm93RG93blVwTG9jaywgZmFGb2xkZXIyLCBmYUZvbGRlckJsYW5rMiwgZmFIb2xseUJlcnJ5LCBmYVZlbnVzRG91YmxlLCBmYUNsaXBib2FyZFF1ZXN0aW9uLCBmYUhvdGRvZywgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhTWljcm9zY29wZSwgZmFDbG91ZDIsIGZhQmFzZWJhbGxCYXRCYWxsLCBmYUNhclJlYXIsIGZhQ2FyQWx0LCBmYVRodW1idGFja1NsYXNoLCBmYVRodW1iVGFja1NsYXNoLCBmYVBsdXNNaW51cywgZmFIb3VzZUNpcmNsZUNoZWNrLCBmYUNhbGVuZGFyRGF5LCBmYUxpYnJhLCBmYUNpcmNsZTIsIGZhTW9iaWxlVmlicmF0ZSwgZmFGYWNlR3JpblNxdWludDIsIGZhR3JpblNxdWludDIsIGZhVXNlcnNCZXR3ZWVuTGluZXMsIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhVGFibGVMaXN0LCBmYVRoTGlzdCwgZmFGbGFza1ZpYWwsIGZhQ2lyY2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25DaXJjbGUsIGZhVGF4aSwgZmFDYWIsIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFQZW9wbGVQdWxsaW5nLCBmYUJhY2t3YXJkLCBmYUNhckJ1cnN0LCBmYUNhckNyYXNoLCBmYUxpbmssIGZhQ2hhaW4sIGZhQmFja3dhcmRTdGVwLCBmYVN0ZXBCYWNrd2FyZCwgZmFYLCBmYUNpcmNsZVVzZXIyLCBmYVVzZXJDaXJjbGUyLCBmYVJlY3RhbmdsZUxpc3QyLCBmYUxpc3RBbHQyLCBmYUhhbmQyLCBmYUhhbmRQYXBlcjIsIGZhQ2FuY2VyLCBmYVZhblNodXR0bGUsIGZhU2h1dHRsZVZhbiwgZmFTdGFpcnMsIGZhSG9yc2VIZWFkLCBmYVZhdWx0LCBmYUNsb3NlZENhcHRpb25pbmdTbGFzaCwgZmFEcnVtU3RlZWxwYW4sIGZhVGh1bWJzVXAyLCBmYVN0YW1wLCBmYU1lbm9yYWgsIGZhQ2hpbGRyZW4sIGZhQ2hhcnRMaW5lLCBmYUxpbmVDaGFydCwgZmFTcXVhcmVFbnZlbG9wZSwgZmFFbnZlbG9wZVNxdWFyZSwgZmFCYW5TbW9raW5nLCBmYVNtb2tpbmdCYW4sIGZhVHJ1Y2tGcm9udCwgZmFCdWlsZGluZzIsIGZhQnVsbHNleWUsIGZhQXJyb3dMZWZ0TG9uZywgZmFMb25nQXJyb3dMZWZ0LCBmYUNoZXNzUm9vazIsIGZhQmxlbmRlclBob25lLCBmYUFycm93VHVyblVwLCBmYUxldmVsVXAsIGZhQmljeWNsZSwgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUdlYXIsIGZhQ29nLCBmYU1hcnNBbmRWZW51c0J1cnN0LCBmYU90dGVyLCBmYUNpcmNsZUNoZXZyb25MZWZ0LCBmYUNoZXZyb25DaXJjbGVMZWZ0LCBmYUNpcmNsZVF1ZXN0aW9uMiwgZmFRdWVzdGlvbkNpcmNsZTIsIGZhV2Fsa2llVGFsa2llLCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFIb3VzZUNoaW1uZXksIGZhSG9tZUxnLCBmYVJpZ2h0RnJvbUJyYWNrZXQsIGZhU2lnbk91dEFsdCwgZmFGaWxlMiwgZmFQbGFuZVNsYXNoLCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYVBlcnNvbkZhbGxpbmcsIGZhVHVybkRvd24sIGZhTGV2ZWxEb3duQWx0LCBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIsIGZhRXhwYW5kQWx0LCBmYVVzZXJUYWcsIGZhSGFuZFNwYXJrbGVzLCBmYUFycm93c1RvRG90LCBmYUZhY2VTYWRDcnkyLCBmYVNhZENyeTIsIGZhRG9uZ1NpZ24sIGZhUGVvcGxlTGluZSwgZmFTcXVhcmVSc3MsIGZhUnNzU3F1YXJlLCBmYUNhbGVuZGFyTWludXMyLCBmYUNoYXJ0RGlhZ3JhbSwgZmFGYWNlVGlyZWQyLCBmYVRpcmVkMiwgZmFIYW5kUG9pbnRSaWdodDIsIGZhQXJyb3dVcCwgZmFDdWJlc1N0YWNrZWQsIGZhQ2hpbGRDb21iYXRhbnQsIGZhQ2hpbGRSaWZsZSwgZmFWZXN0UGF0Y2hlcywgZmFNYXJ0aW5pR2xhc3NFbXB0eSwgZmFHbGFzc01hcnRpbmksIGZhTWFnbmV0LCBmYVJvYWRCYXJyaWVyLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhU3F1YXJlUGVyc29uQ29uZmluZWQsIGZhUGxhdGVXaGVhdCwgZmFTaWduSGFuZ2luZywgZmFTaWduLCBmYUNhckJhdHRlcnksIGZhQmF0dGVyeUNhciwgZmFTaGlydCwgZmFUU2hpcnQsIGZhVHNoaXJ0LCBmYVBhcmFncmFwaCwgZmFFbnZlbG9wZXNCdWxrLCBmYU1haWxCdWxrLCBmYUd1aXRhciwgZmFTdWl0Y2FzZSwgZmFDaXJjbGVVcDIsIGZhQXJyb3dBbHRDaXJjbGVVcDIsIGZhRiwgZmFYbWFya3NMaW5lcywgZmFFYXJ0aE9jZWFuaWEsIGZhR2xvYmVPY2VhbmlhLCBmYUNvbW1lbnRTbGFzaCwgZmFQbGF5LCBmYVZpYWxDaXJjbGVDaGVjaywgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFDZWRpU2lnbiwgZmFQdXp6bGVQaWVjZSwgZmFIZWxtZXRVbiwgZmFHbGFzc1dhdGVyLCBmYUhlYXJ0Q2lyY2xlQm9sdCwgZmFQdW1wU29hcCwgZmFIYW5kU2Npc3NvcnMyLCBmYURvbGx5LCBmYURvbGx5Qm94LCBmYVBhcGVyY2xpcCwgZmFEZW1vY3JhdCwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUZlcnJ5LCBmYU1vc3F1aXRvLCBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCwgZmFMZWZ0UmlnaHQsIGZhQXJyb3dzQWx0SCwgZmFWaXJ1cywgZmFHZW0yLCBmYVRvaWxldCwgZmFTaW5nbGVRdW90ZUxlZnQsIGZhTW9uZXlCaWxscywgZmFUYWJsZXRCdXR0b24sIGZhUmVjdGFuZ2xlWG1hcmsyLCBmYVJlY3RhbmdsZVRpbWVzMiwgZmFUaW1lc1JlY3RhbmdsZTIsIGZhV2luZG93Q2xvc2UyLCBmYVdyZW5jaCwgZmFUcmFzaENhbjIsIGZhVHJhc2hBbHQyLCBmYVRhYmxlQ2VsbHMsIGZhVGgsIGZhUmliYm9uLCBmYUxhbmRtYXJrRmxhZywgZmFVcERvd25MZWZ0UmlnaHQsIGZhQXJyb3dzQWx0LCBmYUNhclNpZGUsIGZhVHJhc2hBcnJvd1VwLCBmYVRyYXNoUmVzdG9yZSwgZmFMaWZlUmluZzIsIGZhQ29weXJpZ2h0MiwgZmFGaWxlUHJlc2NyaXB0aW9uLCBmYUVyYXNlciwgZmFIb3VyZ2xhc3NTdGFydCwgZmFIb3VyZ2xhc3MxLCBmYUNpcmNsZUxlZnQyLCBmYUFycm93QWx0Q2lyY2xlTGVmdDIsIGZhQ3J1emVpcm9TaWduLCBmYVNtb2tpbmcsIGZhU3F1YXJlUG9sbFZlcnRpY2FsLCBmYVBvbGwsIGZhUGVyc29uQ2lyY2xlTWludXMsIGZhQmlvaGF6YXJkLCBmYUJlbGxDb25jaWVyZ2UsIGZhQ29uY2llcmdlQmVsbCwgZmFSdWxlckhvcml6b250YWwsIGZhSG9yc2UsIGZhQ2FsZW5kYXIyLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUl0YWxpYywgZmFLaGFuZGEsIGZhRmFjZUZyb3duT3BlbjIsIGZhRnJvd25PcGVuMiwgZmFDaGVjaywgZmFGaW5nZXJwcmludCwgZmFDaGFyZ2luZ1N0YXRpb24sIGZhVXNlckxvY2ssIGZhTW9iaWxlU2NyZWVuQnV0dG9uLCBmYU1vYmlsZUFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsIGZhQmxpbmQsIGZhRmlsZVdhdmVmb3JtLCBmYUZpbGVNZWRpY2FsQWx0LCBmYUhvdXNlQ3JhY2ssIGZhSGF0V2l6YXJkLCBmYVVzZXJEb2N0b3IsIGZhVXNlck1kLCBmYUNoYXJ0QmFyMiwgZmFCYXJDaGFydDIsIGZhU3ByYXlDYW5TcGFya2xlcywgZmFBaXJGcmVzaGVuZXIsIGZhQmFodFNpZ24sIGZhVGVtcGVyYXR1cmVBcnJvd1VwLCBmYVRlbXBlcmF0dXJlVXAsIGZhV2ViQXdlc29tZTIsIGZhTm9uQmluYXJ5LCBmYU4sIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93cywgZmFIb3VzZTIsIGZhSG9tZTIsIGZhSG9tZUFsdDIsIGZhSG9tZUxnQWx0MiwgZmFTcGlubmVyLCBmYUdhdmVsLCBmYUxlZ2FsLCBmYVRpY2tldFNpbXBsZSwgZmFUaWNrZXRBbHQsIGZhRG92ZSwgZmFUYXJwRHJvcGxldCwgZmFUcmVlQ2l0eSwgZmFUdXJuVXAsIGZhTGV2ZWxVcEFsdCwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhU2xpZGVycywgZmFTbGlkZXJzSCwgZmFNb3NxdWUsIGZhSCwgZmFJbmZvLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFBcnJvd1R1cm5Eb3duLCBmYUxldmVsRG93biwgZmFSb2FkLCBmYVNwaXJhbCwgZmFGYWNlRnJvd24yLCBmYUZyb3duMiwgZmFXaW5lR2xhc3NFbXB0eSwgZmFXaW5lR2xhc3NBbHQsIGZhQ2xhcHBlcmJvYXJkLCBmYUZvcndhcmRTdGVwLCBmYVN0ZXBGb3J3YXJkLCBmYVNxdWFyZVVwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LCBmYUJvb2tKb3VybmFsV2hpbGxzLCBmYUpvdXJuYWxXaGlsbHMsIGZhQ2hhbXBhZ25lR2xhc3NlcywgZmFHbGFzc0NoZWVycywgZmFEdW1wc3RlciwgZmFIZWFydENpcmNsZVhtYXJrLCBmYUNvbXB1dGVyLCBmYVdhbmRNYWdpYywgZmFNYWdpYywgZmFCcmFpbiwgZmFCcmllZmNhc2VNZWRpY2FsLCBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uLCBmYUNvZGVDb21taXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFQZXJzb25SYXlzLCBmYU1hbmF0U2lnbiwgZmFTb3J0LCBmYVVuc29ydGVkLCBmYUNpcmNsZVJhZGlhdGlvbiwgZmFSYWRpYXRpb25BbHQsIGZhTGFwdG9wQ29kZSwgZmFTaW5rLCBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVXNlcjIsIGZhVXNlckFsdDIsIGZhVXNlckxhcmdlMiwgZmFTbm93Zmxha2UyLCBmYVRhdXJ1cywgZmFTa3VsbENyb3NzYm9uZXMsIGZhUGVzb1NpZ24sIGZhV2luZUdsYXNzLCBmYVRlbXBlcmF0dXJlSGFsZiwgZmFUZW1wZXJhdHVyZTIsIGZhVGhlcm1vbWV0ZXIyLCBmYVRoZXJtb21ldGVySGFsZiwgZmFUaWNrZXQsIGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbiwgZmFBcnJvd3NUdXJuUmlnaHQsIGZhQ2FuZHlDYW5lLCBmYVdoZWVsY2hhaXIsIGZhU3BlbGxDaGVjaywgZmFWb2x1bWVPZmYsIGZhTHVuZ3MsIGZhQm9va21hcmsyLCBmYUJhcmNvZGUsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFGaWxlQ2lyY2xlWG1hcmssIGZhQ3ViZSwgZmFUYXBlLCBmYUJvbWIsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU3F1YXJlQ2FyZXRMZWZ0MiwgZmFDYXJldFNxdWFyZUxlZnQyLCBmYVJ1bGVyLCBmYUksIGZhVm9sdW1lWG1hcmssIGZhVm9sdW1lTXV0ZSwgZmFWb2x1bWVUaW1lcywgZmFBcmNod2F5LCBmYVBlcnNvbkRpZ2dpbmcsIGZhRGlnZ2luZywgZmFHYXVnZUhpZ2gsIGZhVGFjaG9tZXRlckFsdCwgZmFUYWNob21ldGVyQWx0RmFzdCwgZmFHZW5kZXJsZXNzLCBmYUNsb3VkU3VuLCBmYUFycm93UmlnaHQsIGZhSGFuZHNoYWtlMiwgZmFIYW5kc2hha2VBbHQyLCBmYUhhbmRzaGFrZVNpbXBsZTIsIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFCcmlkZ2VXYXRlciwgZmFCdWlsZGluZ05nbywgZmFJZ2xvbywgZmFDaXJjbGVEb2xsYXJUb1Nsb3QsIGZhRG9uYXRlLCBmYVksIGZhRmFjZVNtaWxlV2luazIsIGZhU21pbGVXaW5rMiwgZmFEaWNlRm91ciwgZmFGYWNlR3JpblNxdWludFRlYXJzMiwgZmFHcmluU3F1aW50VGVhcnMyLCBmYUZpbGVBdWRpbzIsIGZhQXJyb3dzRG93blRvTGluZSwgZmFHLCBmYVZpaGFyYSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUdhdWdlU2ltcGxlLCBmYUdhdWdlU2ltcGxlTWVkLCBmYVRhY2hvbWV0ZXJBdmVyYWdlLCBmYVJpZ2h0TGVmdCwgZmFFeGNoYW5nZUFsdCwgZmFQaWxscywgZmFFeHBsb3Npb24sIGZhQXJyb3dzRG93blRvUGVvcGxlLCBmYVVzZXJzVmlld2ZpbmRlciwgZmFDYXJPbiwgZmFTbGVpZ2gsIGZhRHVtYmJlbGwsIGZhQmFieUNhcnJpYWdlLCBmYUNhcnJpYWdlQmFieSwgZmFLaXdpQmlyZCwgZmFDYWxlbmRhclhtYXJrMiwgZmFDYWxlbmRhclRpbWVzMiwgZmFDaXJjbGVEb3duMiwgZmFBcnJvd0FsdENpcmNsZURvd24yLCBmYUZpbGVNZWRpY2FsLCBmYVhtYXJrLCBmYUNsb3NlLCBmYU11bHRpcGx5LCBmYVJlbW92ZSwgZmFUaW1lcywgZmFTaGFwZXMsIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsIGZhRGljZU9uZSwgZmFMb2NrT3BlbiwgZmFQZXBwZXJIb3QsIGZhRHJvcGxldFNsYXNoLCBmYVRpbnRTbGFzaCwgZmFEcm9wbGV0LCBmYVRpbnQsIGZhRmlsZUxpbmVzMiwgZmFGaWxlQWx0MiwgZmFGaWxlVGV4dDIsIGZhQ29tbWVudHNEb2xsYXIsIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sIGZhU2VhcmNoTG9jYXRpb24sIGZhRmlsZUludm9pY2UsIGZhUGVudGFnb24sIGZhUmVwdWJsaWNhbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZpbG0sIGZhRmlsbUFsdCwgZmFGaWxtU2ltcGxlLCBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssIGZhQ29tbWVudHMyLCBmYVRhZ3MsIGZhR3VuLCBmYUNpcmNsZUNoZWNrMiwgZmFDaGVja0NpcmNsZTIsIGZhU2NvcnBpbywgZmFJZENhcmRDbGlwLCBmYUlkQ2FyZEFsdCwgZmFNb29uMiwgZmFPaWxXZWxsLCBmYVRhY2hvZ3JhcGhEaWdpdGFsLCBmYURpZ2l0YWxUYWNob2dyYXBoLCBmYVRhYmxldCwgZmFUYWJsZXRBbmRyb2lkLCBmYVJ1YmxlU2lnbiwgZmFSb3VibGUsIGZhUnViLCBmYVJ1YmxlLCBmYUNsb3NlZENhcHRpb25pbmcyLCBmYVBlbiwgZmFQbGFuZSwgZmFJbWFnZXMyLCBmYU1vYmlsZVNjcmVlbiwgZmFNb2JpbGVBbmRyb2lkQWx0LCBmYUd1YXJhbmlTaWduLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUNpcmNsZVJpZ2h0MiwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiwgZmFQaG9uZVZvbHVtZSwgZmFWb2x1bWVDb250cm9sUGhvbmUsIGZhQ3ViZXMsIGZhUGhvbmUsIGZhVG9yaWlHYXRlLCBmYUJhY29uLCBmYVBlcnNvbkZhbGxpbmdCdXJzdCwgZmFRdW90ZVJpZ2h0LCBmYVF1b3RlUmlnaHRBbHQsIGZhSG91c2VNZWRpY2FsRmxhZywgZmFQcmVzY3JpcHRpb24sIGZhRGljZVRocmVlLCBmYUJ1aWxkaW5nTG9jaywgZmFJZENhcmQyLCBmYURyaXZlcnNMaWNlbnNlMiwgZmFDaXJjbGVQbGF5MiwgZmFQbGF5Q2lyY2xlMiwgZmFGYWNlTGF1Z2hCZWFtMiwgZmFMYXVnaEJlYW0yLCBmYUxlYWYsIGZhSG91c2VDaGltbmV5VXNlciwgZmFSb3RhdGVSaWdodCwgZmFSZWRvQWx0LCBmYVJvdGF0ZUZvcndhcmQsIGZhVG9vdGgsIGZhSG91c2VDaGltbmV5V2luZG93LCBmYU1vdG9yY3ljbGUsIGZhQmFja3dhcmRGYXN0LCBmYUZhc3RCYWNrd2FyZCwgZmFBZGRyZXNzQm9vazIsIGZhQ29udGFjdEJvb2syLCBmYVNhaWxib2F0LCBmYUJvb2tCb29rbWFyaywgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFVbml2ZXJzYWxBY2Nlc3MsIGZhVG9pbGV0UGFwZXIsIGZhVG9pbGV0UGFwZXJBbHQsIGZhVG9pbGV0UGFwZXJCbGFuaywgZmFWckNhcmRib2FyZCwgZmFQaXp6YVNsaWNlLCBmYVNwcmF5Q2FuLCBmYVZvbHVtZUxvdywgZmFWb2x1bWVEb3duLCBmYUNyb3NzLCBmYVBlcnNvbiwgZmFNYWxlLCBmYUhvdXJnbGFzczMsIGZhSG91cmdsYXNzRW1wdHkyLCBmYUZpc2gsIGZhRHJ1bXN0aWNrQml0ZSwgZmFDaGFydFNpbXBsZSwgZmFBdG9tLCBmYVAsIGZhSmV0RmlnaHRlclVwLCBmYVBsdWdDaXJjbGVYbWFyaywgZmFTaGVldFBsYXN0aWMsIGZhViwgZmFMaXN0LCBmYUxpc3RTcXVhcmVzLCBmYVBpc2NlcywgZmFTb2xhclBhbmVsLCBmYUxhbmRNaW5lT24sIGZhSGVhZHBob25lczIsIGZhSGVhZHBob25lc0FsdDIsIGZhSGVhZHBob25lc1NpbXBsZTIsIGZhQnVzLCBmYUZpbGVQb3dlcnBvaW50MiwgZmFRdW90ZUxlZnQsIGZhUXVvdGVMZWZ0QWx0LCBmYUNoZXZyb25Eb3duLCBmYUVhcnRoQXNpYSwgZmFHbG9iZUFzaWEsIGZhQ2VudFNpZ24sIGZhU2hpZWxkQ2F0LCBmYVNjaG9vbENpcmNsZUNoZWNrLCBmYU1hcnRpbmlHbGFzcywgZmFHbGFzc01hcnRpbmlBbHQsIGZhUGx1ZywgZmFQYW5vcmFtYSwgZmFDbG9ja1JvdGF0ZUxlZnQsIGZhSGlzdG9yeSwgZmFKYXJXaGVhdCwgZmFDbG91ZEFycm93RG93biwgZmFDbG91ZERvd25sb2FkLCBmYUNsb3VkRG93bmxvYWRBbHQsIGZhVHJ1Y2tSYW1wQm94LCBmYVRydWNrTG9hZGluZywgZmFBbmdsZURvd24sIGZhUGx1Z0NpcmNsZUNoZWNrLCBmYVdpbmRvd01heGltaXplMiwgZmFIYW5kc0hvbGRpbmdDaXJjbGUsIGZhTG9jYXRpb25QaW4sIGZhTWFwTWFya2VyLCBmYUJvd2xpbmdCYWxsLCBmYUNhcnRGbGF0YmVkLCBmYURvbGx5RmxhdGJlZCwgZmFIb3VzZVVzZXIsIGZhSG9tZVVzZXIsIGZhR2hvc3QsIGZhQ29tbWVudE5vZGVzLCBmYVBlcnNvbkFycm93RG93blRvTGluZSwgZmFQbHVnQ2lyY2xlUGx1cywgZmFQZXJzb25Td2ltbWluZywgZmFTd2ltbWVyLCBmYUNvbW1lbnREb3RzMiwgZmFDb21tZW50aW5nMiwgZmFDaGFydFBpZSwgZmFQaWVDaGFydCwgZmFGcm9nLCBmYVdpbmVCb3R0bGUsIGZhSW5ib3gsIGZhU3F1YXJlSCwgZmFIU3F1YXJlLCBmYUhvdXNlTWVkaWNhbCwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUZpbGVDc3YsIGZhSGF0Q293Ym95LCBmYUZhY2VHcmluVG9uZ3VlV2luazIsIGZhR3JpblRvbmd1ZVdpbmsyLCBmYUwsIGZhQXJyb3dEb3duU2hvcnRXaWRlLCBmYVNvcnRBbW91bnREZXNjLCBmYVNvcnRBbW91bnREb3duQWx0LCBmYUhvdXJnbGFzc0hhbGYyLCBmYUhvdXJnbGFzczIyLCBmYVNwb29uLCBmYVV0ZW5zaWxTcG9vbiwgZmFDcmVkaXRDYXJkMiwgZmFDcmVkaXRDYXJkQWx0MiwgZmFGaWxlSW52b2ljZURvbGxhciwgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLCBmYVBhc3RhZmFyaWFuaXNtLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFCdWxsaG9ybiwgZmFCb3hUaXNzdWUsIGZhTWF0dHJlc3NQaWxsb3csIGZhQ2hldnJvbkxlZnQsIGZhQ2xvdWRNb29uUmFpbiwgZmFBcnJvd0Rvd24xOSwgZmFTb3J0TnVtZXJpY0FzYywgZmFTb3J0TnVtZXJpY0Rvd24sIGZhSGFuZFNwb2NrMiwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFDb21tZW50TWVkaWNhbCwgZmFCZWxsU2xhc2gyLCBmYUhhbmRzaGFrZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUJvdHRsZVdhdGVyLCBmYURpY2VEMjAsIGZhQXJyb3dEb3duWkEsIGZhU29ydEFscGhhRGVzYywgZmFTb3J0QWxwaGFEb3duQWx0LCBmYUJydXNoLCBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCwgZmFBcnJvd1VwU2hvcnRXaWRlLCBmYVNvcnRBbW91bnRVcEFsdCwgZmFHcmlwVmVydGljYWwsIGZhR3JpZFZlcnRpY2FsLCBmYUNhclR1bm5lbCwgZmFDaGFydENvbHVtbiwgZmFDYXByaWNvcm4sIGZhVHJ1Y2tBcnJvd1JpZ2h0LCBmYVR2LCBmYVRlbGV2aXNpb24sIGZhVHZBbHQsIGZhU2VjdGlvbiwgZmFQZWFjZSwgZmFTdGFyMiwgZmFGbGFnMiwgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLCBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsIGZhV2FybmluZywgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwgZmFHcmFkdWF0aW9uQ2FwLCBmYU1vcnRhckJvYXJkLCBmYVN0b3JlLCBmYVVzZXJBc3Ryb25hdXQsIGZhQnVpbGRpbmdGbGFnLCBmYU11Z1NhdWNlciwgZmFDb2ZmZWUsIGZhTGVtb24yLCBmYUNhcmF2YW4sIGZhUSwgZmFMb2NrLCBmYVBhaW50Um9sbGVyLCBmYVZvbHVtZUhpZ2gsIGZhVm9sdW1lVXAsIGZhRm9sZGVyUGx1cywgZmFNZXJjdXJ5LCBmYUFuY2hvciwgZmFTcXVhcmVQYXJraW5nLCBmYVBhcmtpbmcsIGZhSGFudWtpYWgsIGZhUm90YXRlTGVmdCwgZmFSb3RhdGVCYWNrLCBmYVJvdGF0ZUJhY2t3YXJkLCBmYVVuZG9BbHQsIGZhSGVhZGluZywgZmFIZWFkZXIsIGZhQ3Jvc3NoYWlycywgZmFDaXJjbGVOb2RlcywgZmFXaW5kb3dSZXN0b3JlMiwgZmFSLCBmYUZpbHRlckNpcmNsZVhtYXJrLCBmYUdvcHVyYW0sIGZhSGVhcnRDaXJjbGVNaW51cywgZmFTdGFyT2ZMaWZlLCBmYUJ1c2luZXNzVGltZSwgZmFCcmllZmNhc2VDbG9jaywgZmFGaXJlRXh0aW5ndWlzaGVyLCBmYUFycm93RG93bkxvbmcsIGZhTG9uZ0Fycm93RG93biwgZmFVc2VyTWludXMsIGZhTW9uZXlDaGVjaywgZmFIb3VzZUxhcHRvcCwgZmFMYXB0b3BIb3VzZSwgZmFEb3dubG9hZCwgZmFTYWdpdHRhcml1cywgZmFDb3VjaCwgZmFSb2FkTG9jaywgZmFTY2lzc29ycywgZmFDdXQsIGZhQnVnLCBmYUFycm93UmlnaHRGcm9tQnJhY2tldCwgZmFTaWduT3V0LCBmYUhhbmRIb2xkaW5nSGFuZCwgZmFTdHJvb3B3YWZlbCwgZmFDaGlsZCwgZmFJY2VDcmVhbSwgZmFDb21wdXRlck1vdXNlLCBmYU1vdXNlLCBmYUZhdWNldCwgZmFBd2FyZCwgZmFQZXJzb25Ecm93bmluZywgZmFDYW1lcmFSb3RhdGUsIGZhRmFjZUdyaW5IZWFydHMyLCBmYUdyaW5IZWFydHMyLCBmYUZpbGVGcmFnbWVudCwgZmFQZXJzb25NaWxpdGFyeVJpZmxlLCBmYVRvZ2dsZU9uLCBmYUx1bmdzVmlydXMsIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLCBmYVBpbmdQb25nUGFkZGxlQmFsbCwgZmFUYWJsZVRlbm5pcywgZmFCb3hlc1BhY2tpbmcsIGZhUGVyc29uQ2hhbGtib2FyZCwgZmFEaWNlVHdvLCBmYUFycm93UmlnaHRBcnJvd0xlZnQsIGZhRXhjaGFuZ2UsIGZhRm9vdGJhbGwsIGZhRm9vdGJhbGxCYWxsLCBmYVRydWNrTW9uc3RlciwgZmFBc3RlcmlzaywgZmFCYXR0ZXJ5RnVsbCwgZmFCYXR0ZXJ5LCBmYUJhdHRlcnk1LCBmYUNoaWxkRHJlc3MsIGZhRmFjZUtpc3NCZWFtMiwgZmFLaXNzQmVhbTIsIGZhVHJhc2hDYW5BcnJvd1VwLCBmYVRyYXNoUmVzdG9yZUFsdCwgZmFGb250LCBmYUJvcmVIb2xlLCBmYVZpcnVzQ292aWQsIGZhRmlsZVBkZjIsIGZhTGFuZ3VhZ2UsIGZhU2hpZWxkSGFsdmVkLCBmYVNoaWVsZEFsdCwgZmFDYXJldFVwLCBmYUZpbGVQZW4sIGZhRmlsZUVkaXQsIGZhUGVyc29uQmlraW5nLCBmYUJpa2luZywgZmFCb29rT3BlblJlYWRlciwgZmFCb29rUmVhZGVyLCBmYUdsYXNzV2F0ZXJEcm9wbGV0LCBmYVRvd2VyQnJvYWRjYXN0LCBmYUJyb2FkY2FzdFRvd2VyLCBmYU1pbmltaXplLCBmYUNvbXByZXNzQXJyb3dzQWx0LCBmYUFycm93UmlnaHRUb0NpdHksIGZhTGFwdG9wTWVkaWNhbCwgZmFCcmVhZFNsaWNlLCBmYUdsb2JlLCBmYUZvbGRlck1pbnVzLCBmYU1hc2tGYWNlLCBmYUJvbmcsIGZhUm9hZEJyaWRnZSwgZmFBcnJvd1VwOTEsIGZhU29ydE51bWVyaWNVcEFsdCwgZmFNb3VudGFpbkNpdHksIGZhQXJyb3dEb3duOTEsIGZhU29ydE51bWVyaWNEZXNjLCBmYVNvcnROdW1lcmljRG93bkFsdCwgZmFGYWNlR3JpbldpZGUyLCBmYUdyaW5BbHQyLCBmYVBvb3AsIGZhRGhhcm1hY2hha3JhLCBmYUJhdHRlcnlRdWFydGVyLCBmYUJhdHRlcnkyLCBmYUFua2gsIGZhRGlhbW9uZCwgZmFTdWJzY3JpcHQsIGZhUnVwZWVTaWduLCBmYVJ1cGVlLCBmYVBlcnNvblJpZmxlLCBmYUQsIGZhU3F1YXJlTmZpLCBmYVRlZXRoLCBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciwgZmFTZWFyY2hEb2xsYXIsIGZhRHVtcHN0ZXJGaXJlLCBmYVVwbG9hZCwgZmFVc2VyU2xhc2gsIGZhVXNlckFsdFNsYXNoLCBmYVVzZXJMYXJnZVNsYXNoLCBmYUFycm93TGVmdCwgZmFWaWFsVmlydXMsIGZhQ2hlY2tEb3VibGUsIGZhUGF3LCBmYUhlbG1ldFNhZmV0eSwgZmFIYXJkSGF0LCBmYUhhdEhhcmQsIGZhRSwgZmFGYWNlTGF1Z2hTcXVpbnQyLCBmYUxhdWdoU3F1aW50MiwgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciwgZmFDb21wcmVzc0FsdCwgZmFHaWZ0cywgZmFCZWQsIGZhTW9uZXlCaWxsVHJhbnNmZXIsIGZhUGVyc29uUnVubmluZywgZmFSdW5uaW5nLCBmYUNpcmNsZUNoZXZyb25Eb3duLCBmYUNoZXZyb25DaXJjbGVEb3duLCBmYVVzZXJOdXJzZSwgZmFGYWNlS2lzc1dpbmtIZWFydDIsIGZhS2lzc1dpbmtIZWFydDIsIGZhRmlsbCwgZmFNb25leUJpbGwxV2F2ZSwgZmFNb25leUJpbGxXYXZlQWx0LCBmYUxhbmRtYXJrLCBmYU11c2ljLCBmYUJvb2tNZWRpY2FsLCBmYVNodWZmbGUsIGZhUmFuZG9tLCBmYVVuZGVybGluZSwgZmFCdWlsZGluZ1VzZXIsIGZhUm9ib3QsIGZhUGx1cywgZmFBZGQsIGZhQ29weTIsIGZhQ2hlc3NLaW5nMiwgZmFIb3VzZUZsb29kV2F0ZXIsIGZhQml0Y29pblNpZ24sIGZhQm94LCBmYVNxdWFyZVBsdXMyLCBmYVBsdXNTcXVhcmUyLCBmYUFycm93c0xlZnRSaWdodCwgZmFBcnJvd3NILCBmYUZhbiwgZmFDcm93LCBmYUZpbGVDaXJjbGVDaGVjaywgZmFMaW5rU2xhc2gsIGZhQ2hhaW5Ccm9rZW4sIGZhQ2hhaW5TbGFzaCwgZmFVbmxpbmssIGZhQXJyb3dSb3RhdGVSaWdodCwgZmFBcnJvd1JpZ2h0Um90YXRlLCBmYUFycm93Um90YXRlRm9yd2FyZCwgZmFSZWRvLCBmYVBlbkNsaXAsIGZhUGVuQWx0LCBmYURvb3JDbG9zZWQsIGZhQXJyb3dEb3duV2lkZVNob3J0LCBmYVNvcnRBbW91bnRBc2MsIGZhU29ydEFtb3VudERvd24sIGZhQ2FyZXREb3duLCBmYUssIGZhQ2hlY2tUb1Nsb3QsIGZhVm90ZVllYSwgZmFGaXNoRmlucywgZmFDb21wcmVzcywgZmFBcnJvd1VwQVosIGZhU29ydEFscGhhVXAsIGZhVXNlckdyYWR1YXRlLCBmYUZpbGVDb2RlMiwgZmFTb2FwLCBmYVJlY3ljbGUsIGZhRmFjZUdyaW5XaW5rMiwgZmFHcmluV2luazIsIGZhV2F0ZXJMYWRkZXIsIGZhTGFkZGVyV2F0ZXIsIGZhU3dpbW1pbmdQb29sLCBmYUdlbWluaSwgZmFUb3dlckNlbGwsIGZhQ29sb25TaWduLCBmYUxhcHRvcEZpbGUsIGZhQmFoYWksIGZhSGF5a2FsLCBmYU1vbmV5QmlsbDEyLCBmYU1vbmV5QmlsbEFsdDIsIGZhQ2xvdWRCb2x0LCBmYVRodW5kZXJzdG9ybSwgZmFFdGhlcm5ldCwgZmFIcnl2bmlhU2lnbiwgZmFIcnl2bmlhLCBmYUV5ZVNsYXNoMiwgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLCBmYUx1Z2dhZ2VDYXJ0LCBmYVJhZGlhdGlvbiwgZmFGaWxlV29yZDIsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFUZW50cywgZmFNdWdIb3QsIGZhQm9sdCwgZmFaYXAsIGZhSmFyLCBmYVRydWNrUGxhbmUsIGZhSGFuZEhvbGRpbmdIZWFydCwgZmFBcnJvd1JvdGF0ZUxlZnQsIGZhQXJyb3dMZWZ0Um90YXRlLCBmYUFycm93Um90YXRlQmFjaywgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLCBmYVVuZG8sIGZhRmFjZUFuZ3J5MiwgZmFBbmdyeTIsIGZhQnVyc3QsIGZhWiwgZmFCYW5kYWdlLCBmYUJhbmRBaWQsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFCdXNTaWRlLCBmYUJ1Z3MsIGZhQmVlck11Z0VtcHR5LCBmYUJlZXIsIGZhUGVyc29uQ2lyY2xlQ2hlY2ssIGZhU3RhcGxlciwgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywgZmFOYWlyYVNpZ24sIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFFeWVMb3dWaXNpb24sIGZhTG93VmlzaW9uLCBmYUNpcmNsZUFycm93VXAsIGZhQXJyb3dDaXJjbGVVcCwgZmFDYW1lcmFSZXRybywgZmFDYXBzdWxlcywgZmFQb28sIGZhVm9sdW1lLCBmYVZvbHVtZU1lZGl1bSwgZmFFbGV2YXRvciwgZmFUYWcsIGZhRmlsZUNpcmNsZU1pbnVzLCBmYURvd25Mb25nLCBmYUxvbmdBcnJvd0FsdERvd24sIGZhQ29tcGFjdERpc2MsIGZhU3VpdGNhc2VSb2xsaW5nLCBmYUJvb2tRdXJhbiwgZmFRdXJhbiwgZmFQaG9uZVNsYXNoLCBmYVJvYWRDaXJjbGVDaGVjaywgZmFTaG9wTG9jaywgZmFJbWFnZVBvcnRyYWl0LCBmYVBvcnRyYWl0LCBmYUJyaWRnZUxvY2ssIGZhSGFtbWVyLCBmYUFycm93VXAxOSwgZmFTb3J0TnVtZXJpY1VwLCBmYUNoZXNzS25pZ2h0MiwgZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93VXBSaWdodEZyb21TcXVhcmUsIGZhRXh0ZXJuYWxMaW5rLCBmYUFycm93RG93blVwQWNyb3NzTGluZSwgZmFGYWNlR3JpbkJlYW0yLCBmYUdyaW5CZWFtMiwgZmFSZWN0YW5nbGVBZCwgZmFBZCwgZmFCb29rVGFuYWtoLCBmYVRhbmFraCwgZmFIb3RUdWJQZXJzb24sIGZhSG90VHViLCBmYUZpbGVIYWxmRGFzaGVkLCBmYU91dGRlbnQsIGZhRGVkZW50LCBmYUhhbmRQZWFjZTIsIGZhSGVhZFNpZGVWaXJ1cywgZmFDb21wYXNzMiwgZmFQZW5OaWIsIGZhVGVudEFycm93c0Rvd24sIGZhRm9yd2FyZEZhc3QsIGZhRmFzdEZvcndhcmQsIGZhQ3JvcCwgZmFXaGlza2V5R2xhc3MsIGZhR2xhc3NXaGlza2V5LCBmYVNxdWFyZTIsIGZhRmFjZUdyaW4yLCBmYUdyaW4yLCBmYUZpbGVDb250cmFjdCwgZmFBbmdsZVVwLCBmYUZhY2VTbWlsZTIsIGZhU21pbGUyLCBmYVBlcnNvbkRyZXNzQnVyc3QsIGZhRGl2aWRlLCBmYUNvZGVGb3JrLCBmYUhvdXNlRmxhZywgZmFCdWlsZGluZ0NvbHVtbnMsIGZhQmFuaywgZmFJbnN0aXR1dGlvbiwgZmFNdXNldW0sIGZhVW5pdmVyc2l0eSwgZmFSdWcsIGZhQ29kZU1lcmdlLCBmYUhvdXNlVHN1bmFtaSwgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCwgZmFVbWJyZWxsYSwgZmFIaWxsUm9ja3NsaWRlLCBmYVVzZXJTZWNyZXQsIGZhUGFnZXIsIGZhQnJpZWZjYXNlLCBmYVRyb3dlbEJyaWNrcywgZmFTb2NrcywgZmFULCBmYU1pY3JvY2hpcCwgZmFUcnVja01lZGljYWwsIGZhQW1idWxhbmNlLCBmYU9tLCBmYU1vc3F1aXRvTmV0LCBmYVByZXNjcmlwdGlvbkJvdHRsZSwgZmFVc2Vyc0dlYXIsIGZhVXNlcnNDb2csIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLCBmYVBhdXNlLCBmYVN0YWZmU25ha2UsIGZhUm9kQXNjbGVwaXVzLCBmYVJvZFNuYWtlLCBmYVN0YWZmQWVzY3VsYXBpdXMsIGZhUGlnZ3lCYW5rLCBmYU1vbnVtZW50LCBmYUFuZ2xlc1JpZ2h0LCBmYUFuZ2xlRG91YmxlUmlnaHQsIGZhRGVza3RvcCwgZmFEZXNrdG9wQWx0LCBmYVBsYW5lQ2lyY2xlWG1hcmssIGZhUmV0d2VldCwgZmFVc2VyR2VhciwgZmFVc2VyQ29nLCBmYUJvcmRlckFsbCwgZmFDb2lucywgZmFNYXJzU3Ryb2tlLCBmYUhhbmRzaGFrZUFuZ2xlLCBmYUhhbmRzSGVscGluZywgZmFBcnJvd0Rvd24sIGZhTG9jYXRpb25Eb3QsIGZhTWFwTWFya2VyQWx0LCBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbiwgZmFDb29raWVCaXRlLCBmYVNjcmV3ZHJpdmVyV3JlbmNoLCBmYVRvb2xzLCBmYUluZGVudCwgZmFCYXJzLCBmYU5hdmljb24sIGZhSGFuZHNQcmF5aW5nLCBmYVByYXlpbmdIYW5kcywgZmFWaXJ1c2VzLCBmYVNjaG9vbEZsYWcsIGZhVHJhZGVtYXJrLCBmYUZpcmVCdXJuZXIsIGZhRmFjZVNtaWxlQmVhbTIsIGZhU21pbGVCZWFtMiwgZmFUZW50QXJyb3dMZWZ0UmlnaHQsIGZhUm91dGUsIGZhQW5nbGVzVXAsIGZhQW5nbGVEb3VibGVVcCwgZmFCdWNrZXQsIGZhTGVzc1RoYW5FcXVhbCwgZmFGb2xkZXJDbG9zZWQyLCBmYVBlcnNvblRocm91Z2hXaW5kb3csIGZhU2Nob29sTG9jaywgZmFQZXJzb25CdXJzdCwgZmFMZWZ0TG9uZywgZmFMb25nQXJyb3dBbHRMZWZ0LCBmYUxvY2F0aW9uQ3Jvc3NoYWlycywgZmFMb2NhdGlvbiwgZmFQZXJzb25Eb3RzRnJvbUxpbmUsIGZhRGlhZ25vc2VzLCBmYUdhdWdlU2ltcGxlSGlnaCwgZmFUYWNob21ldGVyLCBmYVRhY2hvbWV0ZXJGYXN0LCBmYUFuZ2xlc0xlZnQsIGZhQW5nbGVEb3VibGVMZWZ0LCBmYVVwRG93biwgZmFBcnJvd3NBbHRWLCBmYUJhdHRlcnlFbXB0eSwgZmFCYXR0ZXJ5MCwgZmFLZXlib2FyZDIsIGZhQ29va2llLCBmYVN0b3B3YXRjaCwgZmFFamVjdCwgZmFTYXRlbGxpdGVEaXNoLCBmYUZhY2VSb2xsaW5nRXllczIsIGZhTWVoUm9sbGluZ0V5ZXMyLCBmYUxpc3RDaGVjaywgZmFUYXNrcywgZmFTYWNrWG1hcmssIGZhSGFzaHRhZywgZmFUcmFpbiwgZmFHYW1lcGFkLCBmYUZpbGVFeHBvcnQsIGZhQXJyb3dSaWdodEZyb21GaWxlLCBmYUZhY2VHcmltYWNlMiwgZmFHcmltYWNlMiwgZmFUcmFpblN1YndheSwgZmFTdWJ3YXksIGZhQ2lyY2xlRG90MiwgZmFEb3RDaXJjbGUyLCBmYU9iamVjdEdyb3VwMiwgZmFTaGlwLCBmYUMsIGZhU3F1YXJlUGhvbmUsIGZhUGhvbmVTcXVhcmUsIGZhUnVsZXJDb21iaW5lZCwgZmFBcnJvd3NSb3RhdGUsIGZhUmVmcmVzaCwgZmFTeW5jLCBmYVBlcnNvbkRyZXNzLCBmYUZlbWFsZSwgZmFCb29rT3BlbiwgZmFGb2xkZXJUcmVlLCBmYVZpcmdvLCBmYUJveEFyY2hpdmUsIGZhQXJjaGl2ZSwgZmFUZW50QXJyb3dEb3duVG9MaW5lLCBmYVFyY29kZSwgZmFEcmFnb24sIGZhSG91cmdsYXNzRW5kLCBmYUhvdXJnbGFzczMyLCBmYUdyaXAsIGZhR3JpZEhvcml6b250YWwsIGZhR3JpcEhvcml6b250YWwsIGZhQm9yZGVyVG9wTGVmdCwgZmFCb3JkZXJTdHlsZSwgZmFMaXN0VWwsIGZhTGlzdERvdHMsIGZhUGVvcGxlUm9iYmVyeSwgZmFNb2JpbGVCdXR0b24sIGZhQXJyb3dEb3duQVosIGZhU29ydEFscGhhQXNjLCBmYVNvcnRBbHBoYURvd24sIGZhTW9uZXlCaWxsLCBmYUNpcmNsZU1pbnVzLCBmYU1pbnVzQ2lyY2xlLCBmYUFycm93UG9pbnRlciwgZmFNb3VzZVBvaW50ZXIsIGZhU3F1YXJlU2hhcmVOb2RlcywgZmFTaGFyZUFsdFNxdWFyZSwgZmFUYWJsZUNlbGxzTGFyZ2UsIGZhVGhMYXJnZSwgZmFDYXQsIGZhQ2FsZW5kYXJXZWVrLCBmYUNvZGVDb21wYXJlLCBmYUxlbywgZmFSb2FkQ2lyY2xlWG1hcmssIGZhUGFsbGV0LCBmYUNha2VDYW5kbGVzLCBmYUJpcnRoZGF5Q2FrZSwgZmFDYWtlLCBmYUJ1Z1NsYXNoLCBmYVRhcnAsIGZhRGlhZ3JhbVByZWRlY2Vzc29yLCBmYUZhY2VGbHVzaGVkMiwgZmFGbHVzaGVkMiwgZmFEaWFncmFtTmV4dCwgZmFBbmNob3JDaXJjbGVYbWFyaywgZmFQZXJzb25DaXJjbGVYbWFyaywgZmFTcGEsIGZhQXJpZXMsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUhlYXJ0Q2lyY2xlQ2hlY2ssIGZhTWFyc1N0cm9rZVJpZ2h0LCBmYU1hcnNTdHJva2VILCBmYVRvd2VyT2JzZXJ2YXRpb24sIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhRmF1Y2V0RHJpcCwgZmFDaXJjbGVJbmZvLCBmYUluZm9DaXJjbGUsIGZhRmVhdGhlciwgZmFCb3dsUmljZSwgZmFTdGFySGFsZlN0cm9rZTIsIGZhU3RhckhhbGZBbHQyLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFNYXNrVmVudGlsYXRvciwgZmFGaWxlVmlkZW8yLCBmYUFycm93VHJlbmREb3duLCBmYU9pbENhbiwgZmFQZW9wbGVDYXJyeUJveCwgZmFQZW9wbGVDYXJyeSwgZmFDaGFpciwgZmFXaW5kLCBmYUxheWVyR3JvdXAsIGZhSGVhZFNpZGVNYXNrLCBmYUhhbmRzLCBmYVNpZ25MYW5ndWFnZSwgZmFTaWduaW5nLCBmYVRhYmxldHMsIGZhV2VpZ2h0SGFuZ2luZywgZmFEaWNlLCBmYVNob3BTbGFzaCwgZmFTdG9yZUFsdFNsYXNoLCBmYVNvcnREb3duLCBmYVNvcnREZXNjLCBmYVBlc2V0YVNpZ24sIGZhVGFibGV0U2NyZWVuQnV0dG9uLCBmYVRhYmxldEFsdCwgZmFIYW5kSG9sZGluZ0RvbGxhciwgZmFIYW5kSG9sZGluZ1VzZCwgZmFTaGllbGQsIGZhU2hpZWxkQmxhbmssIGZhRmFjZUxhdWdoMiwgZmFMYXVnaDIsIGZhSGFuZHNIb2xkaW5nLCBmYUNhcnRTaG9wcGluZywgZmFTaG9wcGluZ0NhcnQsIGZhT2N0YWdvbiwgZmFIYW5kUG9pbnRlcjIsIGZhUmVnaXN0ZXJlZDIsIGZhSG91c2VTaWduYWwsIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiwgaWNvbnMzOwp2YXIgaW5pdF9mcmVlX3NvbGlkX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjIuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIoKSB7CiAgICBwcmVmaXgzID0gImZhcyI7CiAgICBmYTAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzMCIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwbDAgMTI4YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDA4LjQgMCAzMjBMMCAxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NmwwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6Il0KICAgIH07CiAgICBmYTEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICIzMSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDY0IDAgMCAzMjAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjMyIiwgIk00OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNzEgMGM2MC4yIDAgMTA5IDQ4LjggMTA5IDEwOSAwIDQzLjgtMjYuMiA4My4zLTY2LjQgMTAwLjRsLTEzOS4xIDU5QzExOSAzMTUuNCA5NiAzNTAuMiA5NiAzODguN2wwIDI3LjMgMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU5LjNjMC02NC4yIDM4LjQtMTIyLjIgOTcuNS0xNDcuM2wxMzkuMS01OWMxNi42LTcuMSAyNy40LTIzLjQgMjcuNC00MS40IDAtMjQuOS0yMC4yLTQ1LTQ1LTQ1TDgwIDk2QzYyLjMgOTYgNDggODEuNyA0OCA2NHoiXQogICAgfTsKICAgIGZhMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjMzIiwgIk04MCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDE2MCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4IDAgMzguMi0xNi44IDcyLjUtNDMuMyA5NiAyNi42IDIzLjUgNDMuMyA1Ny44IDQzLjMgOTYgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDgwIDI4OHoiXQogICAgfTsKICAgIGZhNCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjM0IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjI0LTE5MiAwIDAtMjI0eiJdCiAgICB9OwogICAgZmE1ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiMzUiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwIDAgMTEyIDEyMCAwYzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2UzI1OS4xIDQ4MCAxODQgNDgwTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNTIgMGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MkwzMiAyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6Il0KICAgIH07CiAgICBmYTYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzNiIsICJNMjU2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04OCAwYy00OC42IDAtODggMzkuNC04OCA4OGwwIDMyLjJjMjIuOS0xNS4zIDUwLjQtMjQuMiA4MC0yNC4ybDQ4IDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjg3LjUgNDgwIDIwOCA0ODBsLTQ4IDBDODAuNSA0ODAgMTYgNDE1LjUgMTYgMzM2bDAtMTUyQzE2IDEwMC4xIDg0LjEgMzIgMTY4IDMybDg4IDB6TTgwIDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHoiXQogICAgfTsKICAgIGZhNyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI3IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI1NiAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTIyNCAzODRjLTguOSAxNS4zLTI4LjUgMjAuNC00My44IDExLjVzLTIwLjQtMjguNS0xMS41LTQzLjhMMjMyLjMgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhOCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI4IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM4IiwgIk0zMDQgMTYwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC0zMiAwYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOCAwIDM0LjYgMTMuNyA2NiAzNiA4OS0zMS41IDIzLjMtNTIgNjAuOC01MiAxMDMgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsNjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQyLjItMjAuNS03OS43LTUyLTEwMyAyMi4zLTIzIDM2LTU0LjQgMzYtODl6TTE3Ni4xIDI4OGwxNS45IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRsNDguMSAwem0wLTY0TDE0NCAyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAzNS4zLTI4LjYgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYTkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiOSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzOSIsICJNMjA4IDMyMGMyOS42IDAgNTcuMS04LjkgODAtMjQuMmwwIDMyLjJjMCA0OC42LTM5LjQgODgtODggODhMOTYgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEwNCAwYzgzLjkgMCAxNTItNjguMSAxNTItMTUybDAtMTUyLjFDMzUxLjkgOTYuNCAyODcuNSAzMiAyMDggMzJsLTQ4IDBDODAuNSAzMiAxNiA5Ni41IDE2IDE3NlM4MC41IDMyMCAxNjAgMzIwbDQ4IDB6bTgwLTE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDggMGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MGw0OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgweiJdCiAgICB9OwogICAgZmFEb2xsYXJTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvbGxhci1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MTc4LCA2MTc4MSwgImRvbGxhciIsICJ1c2QiXSwgIjI0IiwgIk0xMzYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTExNC45IDBjLTI0LjkgMC00NS4xIDIwLjItNDUuMSA0NS4xIDAgMjIuNSAxNi41IDQxLjUgMzguNyA0NC43bDkxLjYgMTMuMWM1My44IDcuNyA5My43IDUzLjcgOTMuNyAxMDggMCA2MC4zLTQ4LjkgMTA5LjEtMTA5LjEgMTA5LjFsLTEwLjkgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtNzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMzAuOSAwYzI0LjkgMCA0NS4xLTIwLjIgNDUuMS00NS4xIDAtMjIuNS0xNi41LTQxLjUtMzguNy00NC43bC05MS42LTEzLjFDNTUuOSAyNzMuNSAxNiAyMjcuNCAxNiAxNzMuMSAxNiAxMTIuOSA2NC45IDY0IDEyNS4xIDY0bDEwLjkgMCAwLTQweiJdCiAgICB9OwogICAgZmFEb2xsYXIgPSBmYURvbGxhclNpZ247CiAgICBmYVVzZCA9IGZhRG9sbGFyU2lnbjsKICAgIGZhRG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAyMV0sICJmNmQzIiwgIk0zMiAxMTJjMTYuNiAwIDMwLjIgMTIuNiAzMS44IDI4LjdsLjMgNi42QzY1LjggMTYzLjQgNzkuNCAxNzYgOTYgMTc2bDE3OS4xIDAgMTQwLjkgNjAuNCAwIDI0My42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzMS4zQzI5NiAzNjEgMjY4LjggMzY4IDI0MCAzNjhzLTU2LTctODAtMTkuM0wxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0NS42Yy0zNy4zLTEzLjItNjQtNDguNi02NC05MC40IDAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTUuOC0zMmM3LjcgMCAxNC45IDMuNiAxOS42IDkuOEwzOTIgMCA0NDQuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDMyIDU1MiAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC02NCAwLTcgMjgtMTI0LjctNTMuNCAzMS42LTE0Ny4yQzMzNC4zLTIzLjkgMzQ0LjItMzIgMzU1LjgtMzJ6TTQ0OCA0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYVRydWNrTW92aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vdmluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGRmIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4IDI1LjIgMCA0OC0xMC42IDY0LTI3LjYgMTYgMTcgMzguOCAyNy42IDY0IDI3LjYgNDAuMyAwIDc0LjItMjcuMSA4NC43LTY0bDEzNC42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NCA0MyAwIDc4LjktMzAuOSA4Ni41LTcxLjcgMjAtMTAuOCAzMy41LTMyIDMzLjUtNTYuM2wwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDU3NiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ4MCAxOTJsNTAuNyAwIDQ1LjMgNDUuMyAwIDUwLjctOTYgMCAwLTk2ek04OCAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0zOTIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjE2IDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVJvdGF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjAsICJzeW5jLWFsdCJdLCAiZjJmMSIsICJNNDgwLjEgMTkybDcuOSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAuMiA0NzEgN0w0MTkuMyA1OC44QzM3NSAyMi4xIDMxOCAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjFDNzkuMiAxMzUuNSAxNTkuMyA2NCAyNTYgNjQgMzAwLjQgNjQgMzQxLjIgNzkgMzczLjcgMTA0LjNMMzI3IDE1MWMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMzMzQuMyAxOTIgMzQ0IDE5MmwxMzYuMSAwem0yOS40IDEwMC41YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNDQuNCAwLTg1LjItMTUtMTE3LjctNDAuM0wxODUgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIwIDE2OCAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA1MTEuOCA0MSA1MDVsNTEuOC01MS44QzEzNyA0ODkuOSAxOTQgNTEyIDI1NiA1MTIgMzg1IDUxMiA0OTEuNyA0MTYuNiA1MDkuNCAyOTIuNXoiXQogICAgfTsKICAgIGZhU3luY0FsdCA9IGZhUm90YXRlOwogICAgZmFTcXVhcmVNaW51czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3NjcsICJtaW51cy1zcXVhcmUiXSwgImYxNDYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcyIDIwMGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzU3F1YXJlMiA9IGZhU3F1YXJlTWludXMyOwogICAgZmFBbGlnbkp1c3RpZnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tanVzdGlmeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM5IiwgIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem0wIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQ0OCA0NDhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckNoZWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjc0IiwgIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTIyIDE2MS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMzEuMiAxMzcgMjc5LjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxOTUuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhRmFjZUtpc3MyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgImtpc3MiXSwgImY1OTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgMjg4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFLaXNzMiA9IGZhRmFjZUtpc3MyOwogICAgZmFLaXRjaGVuU2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpdGNoZW4tc2V0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWEiLCAiTTI0MCAxNDRhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4IDY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmw3MS44IDBjOC44LTkuOCAyMS42LTE2IDM1LjgtMTZsMTA0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTEwNCAwYy0xNC4yIDAtMjctNi4yLTM1LjgtMTZsLTcxLjggMHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5NiAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjg4IDQ2NGwwLTExMiAyMjQgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4ek00OCAzMjBsMTI4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE2IDBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMCAzMiAxNiAwek0yNCA0NjRsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFEbmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG5hIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTE2XSwgImY0NzEiLCAiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgNTcuOC0yNC40IDEwNC44LTU3LjQgMTQ0LjUtMjQuMSAyOC45LTUzLjggNTUuMS04My42IDc5LjUgMjkuOCAyNC41IDU5LjUgNTAuNiA4My42IDc5LjUgMzMgMzkuNiA1Ny40IDg2LjcgNTcuNCAxNDQuNSAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkw2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEMwIDQyMi4yIDI0LjQgMzc1LjIgNTcuNCAzMzUuNSA4MS41IDMwNi42IDExMS4yIDI4MC41IDE0MSAyNTYgMTExLjIgMjMxLjUgODEuNSAyMDUuNCA1Ny40IDE3Ni41IDI0LjQgMTM2LjggMCA4OS44IDAgMzIgMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMjU2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI4My41IDM4NGwtMTgyLjkgMGMtOC4yIDEwLjUtMTUuMSAyMS4xLTIwLjYgMzJsMjI0LjIgMGMtNS42LTEwLjktMTIuNS0yMS41LTIwLjYtMzJ6TTIzOCAzMzZjLTE0LjMtMTMtMjkuOC0yNS44LTQ2LTM5LTE2LjIgMTMuMS0zMS43IDI2LTQ2IDM5bDkyIDB6TTEwMC41IDEyOGwxODIuOSAwYzguMi0xMC41IDE1LjEtMjEuMSAyMC42LTMyTDc5LjkgOTZjNS42IDEwLjkgMTIuNSAyMS41IDIwLjYgMzJ6TTE0NiAxNzZjMTQuMyAxMyAyOS44IDI1LjggNDYgMzkgMTYuMi0xMy4xIDMxLjctMjYgNDYtMzlsLTkyIDB6Il0KICAgIH07CiAgICBmYUNoaWxkUmVhY2hpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGQtcmVhY2hpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTU5ZCIsICJNMjU2IDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMTUyLjkgMTY5LjNjLTIzLjctOC40LTQ0LjUtMjQuMy01OC44LTQ1LjhMNzQuNiA5NC4yQzY0LjggNzkuNSA0NSA3NS42IDMwLjMgODUuNFMxMS42IDExNSAyMS40IDEyOS44TDQwLjkgMTU5YzE4LjEgMjcuMSA0Mi44IDQ4LjQgNzEuMSA2Mi40TDExMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU4LjRjMjkuMS0xNC4yIDU0LjQtMzYuMiA3Mi43LTY0LjJsMTguMi0yNy45YzkuNi0xNC44IDUuNC0zNC42LTkuNC00NC4zcy0zNC42LTUuNS00NC4zIDkuNEwyOTEgMTIyLjRjLTIxLjggMzMuNC01OC45IDUzLjYtOTguOCA1My42LTEyLjYgMC0yNC45LTItMzYuNi01LjgtLjktLjMtMS44LS43LTIuNy0uOXoiXQogICAgfTsKICAgIGZhUGFzdGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhc3RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpbGUtY2xpcGJvYXJkIl0sICJmMGVhIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTIgMCAwLTIyNGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmw2NCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjQ4IDExMmwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTQwIDQ4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MHoiXQogICAgfTsKICAgIGZhRmlsZUNsaXBib2FyZDIgPSBmYVBhc3RlMjsKICAgIGZhTWV0ZW9yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1ldGVvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCAiZjc1MyIsICJNNDkzLjcgLjlsLTE5NC4yIDc0LjcgMi4zLTI5LjNjMS0xMi44LTEyLjgtMjEuNS0yNC0xNS4xTDEwMS4zIDEzMy40QzM4LjYgMTY5LjcgMCAyMzYuNiAwIDMwOSAwIDQyMS4xIDkwLjkgNTEyIDIwMyA1MTIgMjc1LjQgNTEyIDM0Mi4zIDQ3My40IDM3OC42IDQxMC43TDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuMyA3NC43LTE5NC4yYy42LTEuNSAuOS0zLjIgLjktNC44IDAtNy41LTYtMTMuNS0xMy41LTEzLjUtMS43IDAtMy4zIC4zLTQuOCAuOXpNMTkyIDE5MmExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTYgOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFHZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjb2dzIl0sICJmMDg1IiwgIk00MTUuOSAyMTAuNWMxMi4yLTMuMyAyNSAyLjUgMzAuNSAxMy44TDQ2NSAyNjEuOWMxMC4zIDEuNCAyMC40IDQuMiAyOS45IDguMWwzNS0yMy4zYzEwLjUtNyAyNC40LTUuNiAzMy4zIDMuM2wxOS4yIDE5LjJjOC45IDguOSAxMC4zIDIyLjkgMy4zIDMzLjNsLTIzLjMgMzQuOWMxLjkgNC43IDMuNiA5LjYgNSAxNC43IDEuNCA1LjEgMi4zIDEwLjEgMyAxNS4ybDM3LjcgMTguNmMxMS4zIDUuNiAxNy4xIDE4LjQgMTMuOCAzMC41bC03IDI2LjJjLTMuMyAxMi4xLTE0LjYgMjAuMy0yNy4yIDE5LjVsLTQyLTIuN2MtNi4zIDguMS0xMy42IDE1LjYtMjEuOSAyMmwyLjcgNDEuOWMuOCAxMi42LTcuNCAyNC0xOS41IDI3LjJsLTI2LjIgN2MtMTIuMiAzLjMtMjQuOS0yLjUtMzAuNS0xMy44bC0xOC42LTM3LjZjLTEwLjMtMS40LTIwLjQtNC4yLTI5LjktOC4xbC0zNSAyMy4zYy0xMC41IDctMjQuNCA1LjYtMzMuMy0zLjNsLTE5LjItMTkuMmMtOC45LTguOS0xMC4zLTIyLjgtMy4zLTMzLjNsMjMuMy0zNWMtMS45LTQuNy0zLjYtOS42LTUtMTQuN3MtMi4zLTEwLjItMy0xNS4ybC0zNy43LTE4LjZjLTExLjMtNS42LTE3LTE4LjQtMTMuOC0zMC41bDctMjYuMmMzLjMtMTIuMSAxNC42LTIwLjMgMjcuMi0xOS41bDQxLjkgMi43YzYuMy04LjEgMTMuNi0xNS42IDIxLjktMjJsLTIuNy00MS44Yy0uOC0xMi42IDcuNC0yNCAxOS41LTI3LjJsMjYuMi03ek00NDguNCAzNDBhNDQgNDQgMCAxIDAgLjEgODggNDQgNDQgMCAxIDAgLS4xLTg4ek0yMjQuOS00NS41bDI2LjIgN2MxMi4xIDMuMyAyMC4zIDE0LjcgMTkuNSAyNy4ybC0yLjcgNDEuOGM4LjMgNi40IDE1LjYgMTMuOCAyMS45IDIybDQyLTIuN2MxMi41LS44IDIzLjkgNy40IDI3LjIgMTkuNWw3IDI2LjJjMy4yIDEyLjEtMi41IDI0LjktMTMuOCAzMC41bC0zNy43IDE4LjZjLS43IDUuMS0xLjcgMTAuMi0zIDE1LjJzLTMuMSAxMC01IDE0LjdsMjMuMyAzNWM3IDEwLjUgNS42IDI0LjQtMy4zIDMzLjNMMzA3LjMgMjYyYy04LjkgOC45LTIyLjggMTAuMy0zMy4zIDMuM0wyMzkgMjQyYy05LjUgMy45LTE5LjYgNi43LTI5LjkgOC4xbC0xOC42IDM3LjZjLTUuNiAxMS4zLTE4LjQgMTctMzAuNSAxMy44bC0yNi4yLTdjLTEyLjItMy4zLTIwLjMtMTQuNy0xOS41LTI3LjJsMi43LTQxLjljLTguMy02LjQtMTUuNi0xMy44LTIxLjktMjJsLTQyIDIuN2MtMTIuNSAuOC0yMy45LTcuNC0yNy4yLTE5LjVsLTctMjYuMmMtMy4yLTEyLjEgMi41LTI0LjkgMTMuOC0zMC41bDM3LjctMTguNmMuNy01LjEgMS43LTEwLjEgMy0xNS4yIDEuNC01LjEgMy0xMCA1LTE0LjdMNTUuMSA0Ni41Yy03LTEwLjUtNS42LTI0LjQgMy4zLTMzLjNMNzcuNi02YzguOS04LjkgMjIuOC0xMC4zIDMzLjMtMy4zbDM1IDIzLjNjOS41LTMuOSAxOS42LTYuNyAyOS45LTguMWwxOC42LTM3LjZjNS42LTExLjMgMTguMy0xNyAzMC41LTEzLjh6TTE5Mi40IDg0YTQ0IDQ0IDAgMSAwIDAgODggNDQgNDQgMCAxIDAgMC04OHoiXQogICAgfTsKICAgIGZhQ29ncyA9IGZhR2VhcnM7CiAgICBmYUZpbGVDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs1ODYwNl0sICJlNDk0IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFJY2ljbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImljaWNsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhZCIsICJNNzUuOCAzMDQuOEwxIDM1LjdDLjMgMzMuMiAwIDMwLjcgMCAyOC4yIDAgMTIuNiAxMi42IDAgMjguMiAwTDQ4Mi40IDBjMTYuMyAwIDI5LjYgMTMuMiAyOS42IDI5LjYgMCAxLjYtLjEgMy4zLS40IDQuOUw0MzQuNiA0OTYuMWMtMS41IDkuMi05LjUgMTUuOS0xOC44IDE1LjktOS4yIDAtMTcuMS02LjYtMTguNy0xNS42TDMzNiAxNjAgMzA3LjIgMzAzLjljLTEuOSA5LjMtMTAuMSAxNi4xLTE5LjYgMTYuMS05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjctOS4zIDAtMTcuNS02LjItMjAtMTUuMnoiXQogICAgfTsKICAgIGZhQXJyb3dUcmVuZFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXRyZW5kLXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTgiLCAiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04Mi43LTE2OS40IDE2OS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjY5LjMgNTQuNiA0MDYuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMEwzMjAgMzA2LjcgNDY2LjcgMTYwIDM4NCAxNjB6Il0KICAgIH07CiAgICBmYUhleGFnb25Ob2Rlc0JvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbi1ub2Rlcy1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU2OWEiLCAiTTI0OCAxMDYuNmMxOC45LTkgMzItMjguMyAzMi01MC42YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2YzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTIuOCAxLjMtNS41IDIuOS04IDQuN2wtODAuMS00NS44YzEuNi0yMC44LTguNi00MS42LTI3LjktNTIuOEM1Ny4yIDk2IDIzIDEwNS4yIDcuNSAxMzJTMS4yIDE5MyAyOCAyMDguNWMxLjMgLjggMi42IDEuNSA0IDIuMWwwIDkwLjhjLTEuMyAuNi0yLjcgMS4zLTQgMi4xQzEuMiAzMTktOCAzNTMuMiA3LjUgMzgwUzU3LjIgNDE2IDg0IDQwMC41YzE5LjMtMTEuMSAyOS40LTMyIDI3LjgtNTIuOGw1MC41LTI4LjljLTExLjUtMTEuMi0xOS45LTI1LjYtMjMuOC00MS43TDg4IDMwNi4xYy0yLjYtMS44LTUuMi0zLjMtOC00LjdsMC05MC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLS4xIDEuNC0uMiAyLjgtLjIgNC4zYzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTE4LjkgOS0zMiAyOC4zLTMyIDUwLjZjMCAzMC45IDI1LjEgNTYgNTYgNTZjMzAuNyAwIDU1LjYtMjQuNyA1Ni01NS4yYy03LjUtMTIuOS0xMy41LTI2LjgtMTcuNi00MS41Yy00LjItNC05LjEtNy4zLTE0LjQtOS45bDAtOTguOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsMTAuNSA2YzUuNS0xNS4zIDEzLjEtMjkuNSAyMi40LTQyLjVsLTkuMS01LjJjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHpNNDQwLjUgMTMyQzQyNSAxMDUuMiAzOTAuOCA5NiAzNjQgMTExLjVjLTE5LjMgMTEuMS0yOS40IDMyLTI3LjggNTIuOGwtNTAuNiAyOC45YzExLjUgMTEuMiAxOS45IDI1LjYgMjMuOCA0MS43TDM2MCAyMDUuOWMuNCAuMyAuOCAuNiAxLjMgLjljMjEuNy05LjUgNDUuNi0xNC44IDcwLjgtMTQuOGMyIDAgNCAwIDUuOSAuMWMxMi4xLTE3LjMgMTMuOC00MC42IDIuNi02MC4xek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNDcuOS0yMjVjNC4zIDMuNyA1LjQgOS45IDIuNiAxNC45TDQ1Mi40IDM1NmwzNS42IDBjNS4yIDAgOS44IDMuMyAxMS40IDguMnMtLjEgMTAuMy00LjIgMTMuNGwtOTYgNzJjLTQuNSAzLjQtMTAuOCAzLjItMTUuMS0uNnMtNS40LTkuOS0yLjYtMTQuOUw0MTEuNiAzODAgMzc2IDM4MGMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnoiXQogICAgfTsKICAgIGZhUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVlc3Rpb24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDA2NywgMTAwNjgsIDYxNzM2XSwgIjNmIiwgIk02NCAxNjBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQyLjctMjcuOSA3OC45LTY2LjUgOTEuNC0yOC40IDkuMi02MS41IDM1LjMtNjEuNSA3Ni42bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0YzAtMS43IC42LTQuMSAzLjUtNy4zIDMtMy4zIDcuOS02LjUgMTMuNy04LjQgNjQuMy0yMC43IDExMC44LTgxIDExMC44LTE1Mi4zIDAtODguNC03MS42LTE2MC0xNjAtMTYwUzAgNzEuNiAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem05NiAzNTJjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDAtNDAgMTcuOS00MCA0MCAxNy45IDQwIDQwIDQweiJdCiAgICB9OwogICAgZmFIYW5kc0JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWJvdW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjkiLCAiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCAyMTMuOWMwIDE0LjIgNS4xIDI3LjkgMTQuMyAzOC43TDk5LjYgMzUyIDk2IDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzODQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMy42IDAgODUuMy05OS41YzkuMi0xMC44IDE0LjMtMjQuNSAxNC4zLTM4LjdMNTc2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyLjgtNjkuMyA5Mi40Yy01LjcgNy42LTE2LjEgOS42LTI0LjIgNC44LTkuNy01LjctMTIuMS0xOC43LTUuMS0yNy41TDQ0MSAxODBjMTAuOC0xMy41IDguOS0zMy4zLTQuNC00NC41cy0zMy05LjgtNDQuNSAzLjJsLTQ2LjcgNTIuNUMzMjkgMjA5LjcgMzIwIDIzMy40IDMyMCAyNTguMWwwIDkzLjktNjQgMCAwLTkzLjljMC0yNC42LTktNDguNC0yNS40LTY2LjhsLTQ2LjctNTIuNWMtMTEuNS0xMy0zMS4zLTE0LjQtNDQuNS0zLjJTMTI0LjIgMTY2LjQgMTM1IDE4MGwyNy42IDM0LjVjNyA4LjggNC43IDIxLjgtNS4xIDI3LjUtOC4xIDQuOC0xOC42IDIuNy0yNC4yLTQuOEw2NCAxNDQuOCA2NCAzMnptNjQgNDQ4bDAgMzIgMTI4IDAgMC0zMiA2NCAwIDAgMzIgMTI4IDAgMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDk2IDQzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAweiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1sdWdnYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NTQiLCAiTTI2NC4zIDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptLTggMTgxLjNsLTIyLjYgMjIuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzcuNWMwIDEyLjMtNyAyMy0xNy4yIDI4LjQtLjkgNC4yLTIuNCA4LjQtNC4zIDEyLjNsLTY5IDEzOC4xLS44LS40LTI3LjcgNTUuM2MtOS45IDE5LjgtMzMuOSAyNy44LTUzLjcgMTcuOUwxNC42IDUyMWMtMTkuOC05LjktMjcuOC0zMy45LTE3LjktNTMuN0w0Ny4zIDM2Ni4zYzkuOS0xOS44IDMzLjktMjcuOCA1My43LTE3LjlsMzAuNyAxNS4zIDI4LjMtNTYuNmMuMy0uNiAuNC0xLjIgLjQtMS44bDAtMTYuOWMwLS4yIDAtLjMgMC0uNWwwLTM3LjVjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlsMzUuMS0zNS4xYzIyLjgtMjIuOCA1My42LTM1LjYgODUuOC0zNS42IDM2LjkgMCA3MS44IDE2LjggOTQuOCA0NS42TDQyMi4xIDE4MGM2LjEgNy42IDE1LjMgMTIgMjUgMTJsMzMuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMy4yIDBjLTI5LjIgMC01Ni43LTEzLjMtNzUtMzZsLTMuOC00LjcgMCAxMTUuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNMNDQ4IDUwNy41YzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4yTDM3MiA0MjguNGMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtNjkuM3ptLjEgMTY1LjhjMi40IDIuMyA0LjggNC42IDcuNCA2LjhsNDYgMzkuNC0yLjIgNy42Yy00LjUgMTUuNy0xMi45IDMwLTI0LjQgNDEuNWwtNjguMyA2OC4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMzggNDIxLjFjMy44LTMuOCA2LjYtOC42IDguMS0xMy44TDI1Ni40IDM3MXoiXQogICAgfTsKICAgIGZhRmlsZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1kb3dubG9hZCJdLCAiZjU2ZCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE3NSA0NDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjMgMC04Ni4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODYuMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NHoiXQogICAgfTsKICAgIGZhRmlsZURvd25sb2FkID0gZmFGaWxlQXJyb3dEb3duOwogICAgZmFQZXJzb25Cb290aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYm9vdGgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1NiIsICJNNDAgMjRBNTYgNTYgMCAxIDEgMTUyIDI0IDU2IDU2IDAgMSAxIDQwIDI0em01MS4xIDg4YzIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM2IDguNCAxNS43IDEzLjQgMjYgMTMuNGwzMS4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzIwOS44IDM3My4zIDIyNCA0MDEuOCAyMjQgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDcwLjQgMzQ4LjhDNDYuMiAzMzAuNyAzMiAzMDIuMiAzMiAyNzJsMC0xMDAuOUMzMiAxMzguNSA1OC41IDExMiA5MS4xIDExMnpNMzIgNTEybDAtMTMyLjdjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMOTYgNDI4IDk2IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptNTQ0LTg4bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi0xNjggMGMtNy4xIDAtMTMuOC0zLjEtMTguNC04LjZzLTYuNS0xMi42LTUuMy0xOS42bDMwLjctMTc2LjctNjMuMS0xMzcuNiAwIDcyYy01LjItMS0xMC41LTEuNi0xNi0xLjZsLTMyIDAgMC0xMjBjMC0zMC45IDI1LjEtNTYgNTYtNTZMNTIwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzNjh6TTI4OCAzMzZjNS41IDAgMTAuOC0uNiAxNi0xLjZMMzA0IDUyMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE4NCAzMiAweiJdCiAgICB9OwogICAgZmFMb2N1c3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jdXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MjAiLCAiTTMyOCAzMmMxMzcgMCAyNDggMTExIDI0OCAyNDhsMCA0MC0uNCA4LjJDNTcxLjUgMzY4LjUgNTM3LjQgNDAwIDQ5NiA0MDBsLTEyLjMgMCAyNS4yIDQ0LjFjNi42IDExLjUgMi42IDI2LjItOC45IDMyLjhzLTI2LjIgMi42LTMyLjctOC45bC0zOC44LTY3LjktODAuNCAwLTQ4LjIgNjkuN2MtNy41IDEwLjktMjIuNSAxMy42LTMzLjQgNi4xcy0xMy42LTIyLjUtNi4xLTMzLjRsMjkuMy00Mi4zLTc0LjUgMC01MS43IDcwLjJjLTcuOSAxMC43LTIyLjkgMTIuOS0zMy42IDUuMXMtMTIuOS0yMi45LTUuMS0zMy42bDQwLjUtNTUtNDMtMTYuNC03OS4zIDEwMC41Yy04LjIgMTAuNC0yMy4zIDEyLjItMzMuNyA0cy0xMi4yLTIzLjMtNC0zMy43bDI0MC0zMDQgMi4xLTIuM2M1LjItNS4xIDEyLjUtNy41IDE5LjktNi42IDguNCAxLjEgMTUuNiA2LjUgMTguOSAxNC4zbDIxLjcgNTAuNyA0MC45LTU1LjUgMi4xLTIuNGM1LjEtNS4zIDEyLjUtOCAyMC03LjIgOC41IDEgMTUuOSA2LjUgMTkuMyAxNC40bDQxLjggOTcuNSA2NC4yIDBjMTAuMiAwIDIwIDIgMjkgNS41LTE2LjQtOTQtOTguMy0xNjUuNS0xOTctMTY1LjVsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMHpNNDg4IDI5NmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6TTQzLjUgMzMxLjFDMzYuMiAzMjEuNCAzMiAzMDkuNSAzMiAyOTYuOCAzMiAyNjUuNSA1Ny41IDI0MCA4OC45IDI0MGwyNy42IDAtNzIuOSA5MS4xek0yMjUuMSAyNDBsNDguMiAwIDEuNC0xLjktMTYuOS0zOS41LTMyLjcgNDEuNXptMTA3LjggMGw0Ni43IDAtMTcuMi00MC0yOS41IDQweiJdCiAgICB9OwogICAgZmFSaWdodExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LWFsdC1yaWdodCJdLCAiZjMwYiIsICJNNTY2LjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAzOTYuOSAzODQgMzg0bDAtNjQtMzM2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzM2IDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0ID0gZmFSaWdodExvbmc7CiAgICBmYVRydWNrRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1kcm9wbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OGMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIwOCAzMDRjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzMuMiAzNC41LTc4IDU1LjgtMTAyLjQgOC43LTEwIDIzLjgtMTAgMzIuNSAwIDIxLjIgMjQuNCA1NS44IDY5LjEgNTUuOCAxMDIuNCAwIDQ4LTMyLjIgNzItNzIgNzJ6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDVjIiwgIk0yNDAgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDU2IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTU2LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNTYgMCAwLTU2ek02Ni43IDM4NGw0Mi41LTQyLjVjMjQtMjQgNTYuNi0zNy41IDkwLjUtMzcuNUwzNTIgMzA0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMi42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjVzOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNC43IDB6Il0KICAgIH07CiAgICBmYUhhbmRQb2ludExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE1IiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmwyMDggMCAwLTY0LTIwOCAwek0xOTIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bS02NC02NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bTg4LTk2bC0uNiAwYzUuNCA5LjQgOC42IDIwLjMgOC42IDMyIDAgMTMuMi00IDI1LjQtMTAuOCAzNS42IDI0LjkgOC43IDQyLjggMzIuNSA0Mi44IDYwLjQgMCAxMS43LTMuMSAyMi42LTguNiAzMmw4LjYgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTYxLjdjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC0xMS42LTExLjZDNDI5LjUgNzcuNSAzOTYuOSA2NCAzNjMgNjRsLTI3IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTU2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnoiXQogICAgfTsKICAgIGZhQ2FsY3VsYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxjdWxhdG9yIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDI1XSwgImYxZWMiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTk2IDY0bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiAxNjhhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHptODAgMjRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjgtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNODggMzUyYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTI4LTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6bTgwIDI0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNjQgNDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDQ0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTIzMi0yNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIxMSwgODcyMiwgMTAxMzQsICJzdWJ0cmFjdCJdLCAiZjA2OCIsICJNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhU3VidHJhY3QgPSBmYU1pbnVzOwogICAgZmFBcnJvd1VwWkEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtei1hIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtYWxwaGEtdXAtYWx0Il0sICJmODgyIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTI4OCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSAyMjQgMzIwIDIyNGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjEgMzIgNDQ4IDMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQxMi42IDI3My43QzQwNy4yIDI2Mi44IDM5Ni4xIDI1NiAzODQgMjU2cy0yMy4yIDYuOC0yOC42IDE3LjdsLTgwIDE2MGMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTgwLTE2MHpNMzg0IDM1OS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40eiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFVcEFsdCA9IGZhQXJyb3dVcFpBOwogICAgZmFNaWNyb3Bob25lU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTMxIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQyNC43IDM1OC44QzQ1OC45IDMyNC4yIDQ4MCAyNzYuNiA0ODAgMjI0bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDM5LjMtMTUuNyA3NC45LTQxLjMgMTAwLjlMMzU2LjggMjkxQzM3My42IDI3My43IDM4NCAyNTAgMzg0IDIyNGwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMwLjItMTUxLTE1MXptMjk4LjMgNDM0bC00MS40LTQxLjRjLTMuMyAuMi02LjUgLjMtOS44IC4zLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0bDAtMTAuMi00My42LTQzLjZjLTIuOCAzLjktNC40IDguNy00LjQgMTMuOGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOS4zLTEuMiAxOC40LTMgMjcuMy01LjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBlbi1zcXVhcmUiLCAicGVuY2lsLXNxdWFyZSJdLCAiZjE0YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzI1LjggMTM5LjdsMTQuNCAxNC40YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yMy44IDIzLjgtNzEtNzEgMjMuOC0yMy44YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwek0xMTkuOSAyODlsOTEuNS05MS42IDcxIDcxLTkxLjYgOTEuNWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXoiXQogICAgfTsKICAgIGZhUGVuU3F1YXJlID0gZmFTcXVhcmVQZW47CiAgICBmYVBlbmNpbFNxdWFyZSA9IGZhU3F1YXJlUGVuOwogICAgZmFIYW5kRmlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWZpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5OTk0LCAiZmlzdC1yYWlzZWQiXSwgImY2ZGUiLCAiTTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTEyLTY0IDAgMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA4MC02NCAwIDAtODB6bTE5MiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2em05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgNTIuMy0yNS4xIDk4LjgtNjQgMTI4bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc4LjRjLTE3LjMtNy45LTMzLjItMTguOC00Ni45LTMyLjVMMzcuNSAzNTcuNUMxMy41IDMzMy41IDAgMzAwLjkgMCAyNjdsMC0yN2MwLTM1LjMgMjguNy02NCA2NC02NGw4OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJ6Il0KICAgIH07CiAgICBmYUZpc3RSYWlzZWQgPSBmYUhhbmRGaXN0OwogICAgZmFDb21tZW50U21zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtc21zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNtcyJdLCAiZjdjZCIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTE0MC44IDE3Mi44bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42czE4LjYtNDEuNiA0MS42LTQxLjZ6bTE4OC44IDQxLjZjMC0yMyAxOC42LTQxLjYgNDEuNi00MS42bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42em0tOTguMy0zMy44bDI0LjcgNDEuMSAyNC43LTQxLjFjMy43LTYuMiAxMS4xLTkuMSAxOC03LjJzMTEuNyA4LjIgMTEuNyAxNS40bDAgMTAyLjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00NC42LTguNyAxNC41Yy0yLjkgNC44LTguMSA3LjgtMTMuNyA3LjhzLTEwLjgtMy0xMy43LTcuOGwtOC43LTE0LjUgMCA0NC42YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTAyLjRjMC03LjIgNC44LTEzLjUgMTEuNy0xNS40czE0LjMgMSAxOCA3LjJ6Il0KICAgIH07CiAgICBmYVNtcyA9IGZhQ29tbWVudFNtczsKICAgIGZhU2ltQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaW0tY2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2M0IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyNTguNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDgwYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MCAxMjggMCAwLTcyLTk2IDB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtNzItODAgMCAwIDQwem0yNTYgMGwwLTQwLTEyOCAwIDAgNzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDAgMCA3MiA4MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYVNjYWxlQmFsYW5jZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NhbGUtYmFsYW5jZWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODc4LCAiYmFsYW5jZS1zY2FsZSJdLCAiZjI0ZSIsICJNMzg0IDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM5OC40IDk2Yy01LjIgMjUuOC0yMi45IDQ3LjEtNDYuNCA1Ny4zbDAgMjk0LjcgMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIzLjUtMTAuMy00MS4yLTMxLjYtNDYuNC01Ny4zTDEyOCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMGMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6bTU1LjYgMjg4TDU4NC40IDMyMCA1MTIgMTk1LjggNDM5LjYgMzIwek01MTIgNDE2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45ek0xMjYuOCAxOTUuOEw1NC40IDMyMCAxOTkuMyAzMjAgMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4LjlTMTEuNyAzODIgLjkgMzM3LjF6Il0KICAgIH07CiAgICBmYUJhbGFuY2VTY2FsZSA9IGZhU2NhbGVCYWxhbmNlZDsKICAgIGZhQ2FyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY2NCwgImF1dG9tb2JpbGUiXSwgImYxYjkiLCAiTTEzNS4yIDExNy40bC0yNi4xIDc0LjYgMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0zMjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDMwNGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBdXRvbW9iaWxlID0gZmFDYXI7CiAgICBmYUNyb3BTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcC1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY3JvcC1hbHQiXSwgImY1NjUiLCAiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTIwOCAwIDAtMzUyek0zODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDY0IDIwOCAwIDAgMzUyeiJdCiAgICB9OwogICAgZmFDcm9wQWx0ID0gZmFDcm9wU2ltcGxlOwogICAgZmFNZWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZWRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk0MV0sICJmNWEyIiwgIk0yMjQuMyAxMjhMMTM5LjctMTIuOWMtNi41LTEwLjgtMjAuMS0xNC43LTMxLjMtOS4xTDIxLjggMjEuM0M5LjkgMjcuMiA1LjEgNDEuNiAxMSA1My41TDgwLjYgMTkyLjZjLTMwLjEgMzMuOS00OC4zIDc4LjUtNDguMyAxMjcuNCAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTQ4LjktMTguMy05My41LTQ4LjMtMTI3LjRMNDM3LjYgNTMuNWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJMMzQwLjItMjIuMWMtMTEuMi01LjYtMjQuOS0xLjYtMzEuMyA5LjFMMjI0LjMgMTI4em0zMC44IDE0Mi41YzEuNCAyLjggNCA0LjcgNyA1LjFsNTAuMSA3LjNjNy43IDEuMSAxMC43IDEwLjUgNS4yIDE2bC0zNi4zIDM1LjRjLTIuMiAyLjItMy4yIDUuMi0yLjcgOC4zbDguNiA0OS45YzEuMyA3LjYtNi43IDEzLjUtMTMuNiA5LjlsLTQ0LjgtMjMuNmMtMi43LTEuNC02LTEuNC04LjcgMGwtNDQuOCAyMy42Yy02LjkgMy42LTE0LjktMi4yLTEzLjYtOS45bDguNi00OS45Yy41LTMtLjUtNi4xLTIuNy04LjNsLTM2LjMtMzUuNGMtNS42LTUuNC0yLjUtMTQuOCA1LjItMTZsNTAuMS03LjNjMy0uNCA1LjctMi40IDctNS4xbDIyLjQtNDUuNGMzLjQtNyAxMy4zLTcgMTYuOCAwbDIyLjQgNDUuNHoiXQogICAgfTsKICAgIGZhU2Nyb2xsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIyMF0sICJmNzBlIiwgIk0wIDExMkMwIDcwLjUgMzEuNiAzNi40IDcyIDMyLjRsMC0uNCAyODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTc2LTE3NiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDYwYzAgMjQuMy0xOS43IDQ0LTQ0IDQ0cy00NC0xOS43LTQ0LTQ0bDAtMjI4LTY0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDh6TTIzNi44IDQ4MGM3LjEtMTMuMSAxMS4yLTI4LjEgMTEuMi00NGwwLTYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDI0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCA0NC4yLTM1LjggODAtODAgODBsLTIyNy4yIDB6TTgwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRmlsZUV4Y2VsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4Y2VsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjQgMjY2LjdjLTcuNC0xMS0yMi4zLTE0LTMzLjMtNi43cy0xNCAyMi4zLTYuNyAzMy4zTDE2My4yIDM1MiAxMjQgNDEwLjdjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wyOC00MiAyOCA0MmM3LjQgMTEgMjIuMyAxNCAzMy4zIDYuN3MxNC0yMi4zIDYuNy0zMy4zTDIyMC44IDM1MiAyNjAgMjkzLjNjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zcy0yNS45LTQuNC0zMy4zIDYuN2wtMjggNDItMjgtNDJ6Il0KICAgIH07CiAgICBmYUZpbHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBiMCIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMzIwIDQ5Mi45IDMyMCA0ODBsMC0xNzguNyAxODIuNi0xODIuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6Il0KICAgIH07CiAgICBmYURydW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NV0sICJmNTY5IiwgIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NiAxMTQuNiA5NiAwIDEyOCAwIDIwOEwwIDM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdMNzIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMTkuNGMzMyA4LjkgNzEuMSAxNC41IDExMiAxNi4xTDIzMiAzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMy41YzQwLjktMS42IDc5LTcuMiAxMTItMTYuMUwzOTIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDIuN2M0NC42LTE5LjkgNzItNDcuNCA3Mi03OC43bDAtMTYwYzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjUgMzguOCAxNS4xIDQ0LjQgMzAuNiA0NC40IDQxLjMgMCAuOC0yLjcgMTcuMi00NiAzNS45LTM4LjkgMTYuOC05NiAyOC4xLTE2MiAyOC4xUzEzMi45IDI2MC43IDk0IDI0My45Yy00My4zLTE4LjctNDYtMzUuMS00Ni0zNS45IDAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjMgMzguMy0xNC45IDk1LjQtMjIuNyAxNjMuNi0yMi43IDE4IDAgMzUuMSAuNSA1MS40IDEuNnoiXQogICAgfTsKICAgIGZhTWFwUGluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1waW4iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjgyMDVdLCAiZjI3NiIsICJNMTkyIDI4NC40QzI1Ni4xIDI2OS45IDMwNCAyMTIuNSAzMDQgMTQ0IDMwNCA2NC41IDIzOS41IDAgMTYwIDBTMTYgNjQuNSAxNiAxNDRjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40TDEyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5NS42ek0xNjggOTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNCA0Ni42LTEwNCAxMDQtMTA0IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjYWxlLXVuYmFsYW5jZWQtZmxpcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYWxhbmNlLXNjYWxlLXJpZ2h0Il0sICJmNTE2IiwgIk0xMTguMiA2Mi40QzEwMS41IDU2LjggOTIuNCAzOC42IDk4IDIxLjlTMTIxLjctMy45IDEzOC41IDEuNmwxMTMgMzcuN2MxMy45LTIzLjUgMzkuNi0zOS4zIDY4LjktMzkuMyA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDMtLjIgNS45LS41IDguOGwxMjIuNiA0MC45YzE2LjggNS42IDI1LjggMjMuNyAyMC4yIDQwLjVzLTIzLjcgMjUuOC00MC41IDIwLjJMMzY2LjcgMTQ1LjJjLTQuNSAzLjItOS4zIDUuOS0xNC40IDguMmwwIDMyNi43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnpNMjAwLjggMjg4TDEyOC4zIDE2My44IDU1LjkgMjg4IDIwMC44IDI4OHptLTcyLjQgOTZjLTYyLjkgMC0xMTUuMi0zNC0xMjYtNzguOS0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4Ljl6bTM4Mi44LTkyLjJsLTcyLjQgMTI0LjIgMTQ0LjkgMC03Mi40LTEyNC4yem0xMjYgMTQxLjNDNjI2LjQgNDc4IDU3NC4xIDUxMiA1MTEuMiA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xeiJdCiAgICB9OwogICAgZmFCYWxhbmNlU2NhbGVSaWdodCA9IGZhU2NhbGVVbmJhbGFuY2VkRmxpcDsKICAgIGZhQXJyb3dzVG9DaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJkIiwgIk05LjQgOS40QzIxLjktMy4xIDQyLjEtMy4xIDU0LjYgOS40TDEyOCA4Mi43IDEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguNyAwLTczLjQtNzMuNEMtMy4xIDQyLjEtMy4xIDIxLjkgOS40IDkuNHpNMjAwIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTUwMi42IDU0LjZMNDI5LjMgMTI4IDQ0OCAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE4LjcgNzMuNC03My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS00NS4zIDQ0OEwzODQgNDI5LjMgMzg0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMCA3My40IDczLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6TTkuNCA0NTcuNEw4Mi43IDM4NCA2NCAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy03My40IDczLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFFbnZlbG9wZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODYsIDk5OTMsIDYxNDQzXSwgImYwZTAiLCAiTTQ4IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40bDIwOCAxNTZjMTcuMSAxMi44IDQwLjUgMTIuOCA1Ny42IDBsMjA4LTE1NmMxMi4xLTkuMSAxOS4yLTIzLjMgMTkuMi0zOC40IDAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDY0ek0wIDE5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE4OC0xOTguNCAxNDguOGMtMzQuMSAyNS42LTgxLjEgMjUuNi0xMTUuMiAwTDAgMTk2eiJdCiAgICB9OwogICAgZmFCYWJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhYnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjc3YyIsICJNMTIwIDg4YTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNNy43IDE0NC41YzEzLTE3LjkgMzgtMjEuOCA1NS45LTguOEw5OS44IDE2MmMyNi44IDE5LjUgNTkuMSAzMCA5Mi4yIDMwczY1LjQtMTAuNSA5Mi4yLTMwbDM2LjItMjYuNGMxNy45LTEzIDQyLjktOSA1NS45IDguOHM5IDQyLjktOC44IDU1LjlsLTM2LjIgMjYuNGMtMTMuNiA5LjktMjguMSAxOC4yLTQzLjMgMjVsMCAzNi4zLTE5MiAwIDAtMzYuM2MtMTUuMi02LjctMjkuNy0xNS4xLTQzLjMtMjVMMTYuNSAyMDAuM2MtMTcuOS0xMy0yMS44LTM4LTguOC01NS45ek05Ny41IDMyOS4zbDYwLjYgNTMtMjYgMzcuMiAyNC4zIDI0LjNjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTQ4LTQ4QzM4IDQzOC42IDM2LjEgNDE3IDQ3LjIgNDAxLjFsNTAuMi03MS44em0xMjguNSA1M2w2MC42LTUzIDUwLjIgNzEuOGMxMS4xIDE1LjkgOS4yIDM3LjUtNC41IDUxLjJsLTQ4IDQ4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyNC4zLTI0LjMtMjYtMzcuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXREb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtZG93biIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtZG93biJdLCAiZjE1MCIsICJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlRG93bjIgPSBmYVNxdWFyZUNhcmV0RG93bjI7CiAgICBmYVRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdkIiwgIk0yNi45IDIwNi45TDMuNyA0NDQuOUMxLjggNDYzLjcgMTYuNiA0ODAgMzUuNSA0ODBsMTcyLjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOWMwLTguMyA2LjctMTUgMTUtMTUgNS41IDAgMTAuNiAzIDEzLjIgNy45bDg2LjEgMTU5YzguNCAxNS41IDI0LjYgMjUuMSA0Mi4yIDI1LjFsNjQuMSAwYzE4LjkgMCAzMy43LTE2LjMgMzEuOC0zNS4xTDQ4NS42IDIwNy4xYy0xLjktMTkuNi0xMi44LTM3LjMtMjkuNS00Ny44TDI4MC45IDQ4LjNjLTE1LjctMTAtMzUuOC05LjktNTEuNSAuMUw1Ni4xIDE1OS4yYy0xNi41IDEwLjYtMjcuMyAyOC4yLTI5LjIgNDcuN3oiXQogICAgfTsKICAgIGZhQSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTddLCAiNDEiLCAiTTIyMS41IDUxLjdDMjE2LjYgMzkuOCAyMDQuOSAzMiAxOTIgMzJzLTI0LjYgNy44LTI5LjUgMTkuN2MtOTMuMyAyMjQtMTQ2LjcgMzUyLTE2MCAzODQtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMmwzMS44LTc2LjMgMTk3LjMgMCAzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhjLTEzLjMtMzItNjYuNy0xNjAtMTYwLTM4NHpNMjY0IDMyMGwtMTQ0IDAgNzItMTcyLjggNzIgMTcyLjh6Il0KICAgIH07CiAgICBmYVBhcmFjaHV0ZUJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXJhY2h1dGUtYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0Y2QiLCAiTTEyOCAyMjRDMTI4IDE1Mi4yIDE0NC4zIDg4LjQgMTY5LjUgNDMuNCAxOTUuMS0yLjQgMjI2LjYtMjQgMjU2LTI0czYwLjkgMjEuNiA4Ni41IDY3LjRDMzY3LjcgODguNCAzODQgMTUyLjIgMzg0IDIyNGwtMTA0IDAgMCA5NiA4IDBjOS4zIDAgMTguMSAyIDI2IDUuNWwxMTguNC0xMDEuNS0uNSAwYzAtNzguNC0xNy43LTE1MC42LTQ3LjYtMjA0LTYuMS0xMS0xMi45LTIxLjMtMjAuMy0zMC45IDg2LjUgMzUuOSAxNDcuOCAxMTUuMSAxNDcuOCAyMTguOSAwIDctMy4xIDEzLjctOC40IDE4LjJMMzQ3LjQgMzYwLjFjMyA3LjQgNC42IDE1LjQgNC42IDIzLjlsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTguNCAxLjYtMTYuNSA0LjYtMjMuOUw4LjQgMjI2LjJDMy4xIDIyMS43IDAgMjE1IDAgMjA4IDAgMTA0LjIgNjEuMyAyNC45IDE0Ny44LTEwLjkgMTQwLjUtMS40IDEzMy43IDkgMTI3LjYgMjAgOTcuNyA3My40IDgwIDE0NS42IDgwIDIyNGwtLjUgMCAxMTguNCAxMDEuNWM4LTMuNSAxNi44LTUuNSAyNi01LjVsOCAwIDAtOTYtMTA0IDB6Il0KICAgIH07CiAgICBmYUNhcnRBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTgiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiAxODcuMiAwIDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMSAxNzcuNCAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2EiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2xvdWRBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWFycm93LXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIzMzgsICJjbG91ZC11cGxvYWQiLCAiY2xvdWQtdXBsb2FkLWFsdCJdLCAiZjBlZSIsICJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zMDUgMTkxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFDbG91ZFVwbG9hZCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFDbG91ZFVwbG9hZEFsdCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFBdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxOTQ2XSwgIjQwIiwgIk0yNTYgNjRDMTUwIDY0IDY0IDE1MCA2NCAyNTZzODYgMTkyIDE5MiAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMCA1MTIgMTE0LjYgNTEyIDI1NmwwIDMyYzAgNTMtNDMgOTYtOTYgOTYtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjktMjIuOCAyMS01My4zIDMzLjktODYuOCAzMy45LTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhjMjcuOSAwIDUzLjcgOC45IDc0LjcgMjQuMSA1LjctNSAxMy4xLTguMSAyMS4zLTguMSAxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUluZGlhblJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRpYW4tcnVwZWUtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJpbmRpYW4tcnVwZWUiLCAiaW5yIl0sICJlMWJjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03Ni43IDBjMTcuNyAxOS44IDMwLjEgNDQuNiAzNC43IDcybDQyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQyIDBjLTEwLjQgNjIuMi02MC44IDExMC45LTEyMy44IDExOC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmw4MCAwYzM1LjggMCA2Ni4xLTIzLjUgNzYuMy01NkwyNCAyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTY0LjMgMGMtMTAuMi0zMi41LTQwLjUtNTYtNzYuMy01NkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFJbmRpYW5SdXBlZSA9IGZhSW5kaWFuUnVwZWVTaWduOwogICAgZmFJbnIgPSBmYUluZGlhblJ1cGVlU2lnbjsKICAgIGZhVHJ1Y2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgImYwZDEiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTU3LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTUxMiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0xOTIgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUNoYWxrYm9hcmRVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYWxrYm9hcmQtdXNlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjaGFsa2JvYXJkLXRlYWNoZXIiXSwgImY1MWMiLCAiTTE5MiAzODRjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyIDAtNTMgNDMtOTYgOTYtOTZsOTYgMHpNNTQ0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzMuMS0yNS4yIDYwLjQtNTcuNSA2My43bC02LjUgLjMtMjExLjEgMGMtNS4xLTI0LjItMTYuMy00Ni4xLTMyLjEtNjRsNTEuMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDAgMC0yODgtMzUyIDAgMCA1Ny4zYy0xNC44LTYtMzEtOS4zLTQ4LTkuMy01LjQgMC0xMC44IC4zLTE2IDFsMC00OWMwLTM1LjMgMjguNy02NCA2NC02NGwzNTIgMHpNMTQ0IDM1MmE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyOwogICAgZmFVc2VyQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGZjIiwgIk0yODYgMzA0Yzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc4IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwek01ODUuNyAxMDUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41TDUyMi4xIDI3NC45Yy00LjIgNS43LTEwLjcgOS40LTE3LjcgOS44cy0xNC0yLjItMTguOS03LjNsLTQ2LjQtNDhjLTkuMi05LjUtOS0yNC43IC42LTMzLjkgOS41LTkuMiAyNC43LTguOSAzMy45IC42bDI2LjUgMjcuNCA4NS42LTExNy43ek0yNTYuMyAyNDhhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQweiJdCiAgICB9OwogICAgZmFVc2VyTmluamEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1uaW5qYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sICJmNTA0IiwgIk0zNTIgMTI4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4LTU3LjIgMC0xMDUuNi0zNy41LTEyMi04OS4zLTEuMSAxLjMtMi4yIDIuNi0zLjUgMy44LTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xLTguMSAuOC0xNC42LTUuNy0xMy44LTEzLjggMS40LTE0LjcgNi4zLTM3LjggMjIuMS01My42IDUuOC01LjggMTIuNi0xMC4xIDE5LjYtMTMuNC03LTMuMi0xMy44LTcuNi0xOS42LTEzLjQtMTUuOC0xNS44LTIwLjctMzguOC0yMi4xLTUzLjYtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOCAxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjEgNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjEgMjEuMy00MS4yIDY0LjMtNjkuNCAxMTMuOC02OS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4ek0xNDQgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkwxNjAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnptLTEuNCAyMTFsNjcgNTAuMmM4LjUgNi40IDIwLjMgNi40IDI4LjggMGw2Ny01MC4yYzYuNS00LjkgMTUuMi02LjIgMjIuNi0yLjggNjEuNCAyOC4yIDEwNC4xIDkwLjIgMTA0LjEgMTYyLjEgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNDUuNyA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtNzIgNDIuNy0xMzQgMTA0LjEtMTYyLjEgNy40LTMuNCAxNi4xLTIuMSAyMi42IDIuOHoiXQogICAgfTsKICAgIGZhUGxhbnRXaWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW50LXdpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTVhYSIsICJNMzQ0LTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwbDAgNi4yYzI5LjMgMTIuMiA0OCA0MS4zIDQ4IDc2LjkgMCAyNy45LTI1LjMgNzQuOC02NiAxMTEuNy0zLjggMy41LTguOCA1LjMtMTQgNS4zcy0xMC4yLTEuOC0xNC01LjNjLTQwLjctMzYuOC02Ni04My43LTY2LTExMS43IDAtMzUuNiAxOC43LTY0LjcgNDgtNzYuOWwwLTYuMmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDQyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI5NmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDM4LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM0MyNS4zIDQwNS45IDAgMzU5IDAgMzMxLjEgMCAyOTUuNCAxOC43IDI2Ni40IDQ4IDI1NC4yTDQ4IDIxNmMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAyMC4yIDAgMzkuMyA1IDU2IDEzLjhMMjI0IDg4YzAtNjYuMyA1My43LTEyMCAxMjAtMTIweiJdCiAgICB9OwogICAgZmFXZWlnaHRTY2FsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlnaHQtc2NhbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2VpZ2h0Il0sICJmNDk2IiwgIk0xMTYuNiAxOTJjLTMtMTAuMS00LjYtMjAuOS00LjYtMzIgMC02MS45IDUwLjEtMTEyIDExMi0xMTJTMzM2IDk4LjEgMzM2IDE2MGMwIDExLjEtMS42IDIxLjktNC42IDMybC03MSAwIDI0LjYtNDQuM2M2LjQtMTEuNiAyLjMtMjYuMi05LjMtMzIuNnMtMjYuMi0yLjMtMzIuNiA5LjNsLTM3LjYgNjcuNy04OC44IDB6TTEyOCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwQzI5My4zIDExLjkgMjYwIDAgMjI0IDBzLTY5LjMgMTEuOS05NiAzMnoiXQogICAgfTsKICAgIGZhV2VpZ2h0ID0gZmFXZWlnaHRTY2FsZTsKICAgIGZhQ2FyZXRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1yaWdodCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMGRhIiwgIk0yNDkuMyAyMzUuOGMxMC4yIDEyLjYgOS41IDMxLjEtMi4yIDQyLjhsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzY0LjUgMzk2LjkgNjQuNSAzODRsMC0yNTZjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4IDIuMiAyLjR6Il0KICAgIH07CiAgICBmYUZsb3JpblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxvcmluLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE4NCIsICJNMzE0LjcgMzJjLTM4LjggMC03My43IDIzLjMtODguNiA1OS4xTDE3MC43IDIyNCA2NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMC00NS4xIDEwOC4zYy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN0wzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcuMyAwYzM4LjggMCA3My43LTIzLjMgODguNi01OS4xTDIxMy4zIDI4OCAzMjAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDQ1LjEtMTA4LjNjNS0xMS45IDE2LjYtMTkuNyAyOS41LTE5LjdMMzUyIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNy4zIDB6Il0KICAgIH07CiAgICBmYUJlbGwyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNzYsIDYxNjAyXSwgImYwZjMiLCAiTTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMuMkMxMTkgNTAgNjQgMTE0LjYgNjQgMTkybDAgMjEuN2MwIDQ4LjEtMTYuNCA5NC44LTQ2LjQgMTMyLjRMNy44IDM1OC4zQzIuNyAzNjQuNiAwIDM3Mi40IDAgMzgwLjUgMCA0MDAuMSAxNS45IDQxNiAzNS41IDQxNmwzNzYuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC05LjgtMTIuMkM0MDAuNCAzMDguNSAzODQgMjYxLjggMzg0IDIxMy43bDAtMjEuN2MwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOGwwLTMuMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTYyIDQ2NGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4czU0LjktMjAuNCA2Mi00OGwtMTI0IDB6Il0KICAgIH07CiAgICBmYUxhcmlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcmktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWM4IiwgIk0xNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQxLjVjNy45LTEgMTUuOS0xLjUgMjQtMS41czE2LjEgLjUgMjQgMS41TDIxNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNTRjNTguOSAyMy44IDEwMy4yIDc2IDExNi4yIDEzOS43IDMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuNy0zMy4yLTI2LjQtNjEuOC01My40LTgwLjJsMCA4MS44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAxLjhjLTcuOC0xLjUtMTUuOC0yLjItMjQtMi4ycy0xNi4yIC44LTI0IDIuMkwxNjggMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODEuOGMtMzMuOCAyMy01NiA2MS45LTU2IDEwNS44IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNi45IDBDMTguNSAzNTAgMCAzMDUuMiAwIDI1NiAwIDE3NS40IDQ5LjYgMTA2LjQgMTIwIDc4bDAtNTRjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbGxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbGwtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWVkIiwgIk0yOTctMjIuMmMxMi4zIDUgMTguMiAxOSAxMy4yIDMxLjNsLTI5IDcxLjNDMzM4LjggODUuMSAzODQgMTMzLjMgMzg0IDE5MmwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OC02LjQgMC0xMi41IDEuMi0xOCAzLjVsLTMwIDczLjggMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxLjItNTcuOCAxNDIuMmMtNSAxMi4zLTE5IDE4LjItMzEuMyAxMy4ycy0xOC4yLTE5LTEzLjItMzEuM0wxNjAgMjUxLjMgMTYwIDE5MmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQxNy43IDAgNDAwTDAgMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyIDEwLjkgMCAyMC41IDUuNCAyNi4zIDEzLjcgMTYtOC43IDM0LjMtMTMuNyA1My43LTEzLjcgMzEuMyAwIDU5LjcgMTIuOSA4MCAzMy42IDkuNi05LjggMjAuOS0xNy44IDMzLjUtMjMuNUwyNjUuOC05YzUtMTIuMyAxOS0xOC4yIDMxLjMtMTMuMnoiXQogICAgfTsKICAgIGZhUGVyc29uU25vd2JvYXJkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zbm93Ym9hcmRpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MzgsICJzbm93Ym9hcmRpbmciXSwgImY3Y2UiLCAiTTQyNC41IDE2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xNjYuNCA0NS41YzEwLjItMTQuNCAzMC4yLTE3LjkgNDQuNi03LjdsMjcyIDE5MmMxNC40IDEwLjIgMTcuOSAzMC4yIDcuNyA0NC42cy0zMC4yIDE3LjktNDQuNiA3LjdsLTkyLjItNjUuMS02Mi4yIDUzLjMgMzIuMSAyNi43YzE4LjIgMTUuMiAyOC44IDM3LjcgMjguOCA2MS41bDAgODcuOCA3Ny41IDE1LjJjNi4yIDEuMiAxMi42IC45IDE4LjctLjhsNDEuMi0xMS44YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTQxLjIgMTEuOGMtMTMuNCAzLjgtMjcuNCA0LjQtNDEuMSAxLjhMODcuMSA0NDMuM2MtMTcuMi0zLjQtMzMtMTEuOC00NS4zLTI0LjFMMTUuNSAzOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyNi4yIDI2LjJjNS42IDUuNiAxMi44IDkuNCAyMC42IDExbDY0LjIgMTIuNiAwLTEyMy43YzAtMjcuNyAxMi01NCAzMi44LTcyLjJsNjktNjAuNC04OC4yLTYyLjNDMTU5LjYgODAgMTU2LjIgNjAgMTY2LjQgNDUuNXptNTguMSAzNzUuN2w2NCAxMi41IDAtNzUuM2MwLTQuNy0yLjEtOS4zLTUuOC0xMi4zbC01OC4yLTQ4LjUgMCAxMjMuNnoiXQogICAgfTsKICAgIGZhU25vd2JvYXJkaW5nID0gZmFQZXJzb25Tbm93Ym9hcmRpbmc7CiAgICBmYVR0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGVsZXR5cGUiXSwgImYxZTQiLCAiTTQ1MC4yIDI2Ni44YzE1LjggNi41IDM0LjEgLjMgNDIuNi0xNC42bDIuNC00LjJjMjcuOS00OC45IDIzLjYtMTE4LjgtMzEuMy0xNTQuNS0xMjYtODItMjg5LjYtODItNDE1LjYgMC01NC45IDM1LjctNTkuMyAxMDUuNy0zMS4zIDE1NC41bDIuNCA0LjJjOC41IDE0LjkgMjYuNyAyMS4xIDQyLjYgMTQuNmw4MS45LTMzLjdjMTMuOS01LjcgMjIuNC0xOS45IDIwLjktMzQuOWwtNS4xLTUxYzYyLjUtMjEgMTMwLjgtMTkuOSAxOTIuNiAzLjNsLTQuOCA0Ny43Yy0xLjUgMTUgNyAyOS4yIDIwLjkgMzQuOWw4MS45IDMzLjd6TTMyIDM1MmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem05NiAwYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTY0IDQxNmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTM1MiAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwek0yNTYgMzIwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptNjQgMzJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMTI4LTMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMTI4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFUZWxldHlwZSA9IGZhVHR5OwogICAgZmFVc2Vyc1JlY3RhbmdsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yZWN0YW5nbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjI0IDcyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0wIDE1MmM1MyAwIDk2IDQzIDk2IDk2bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtNTMgNDMtOTYgOTYtOTZ6bTk2LTY0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAyNzIuM2MtMTUuMiAyMi44LTI0IDUwLjItMjQgNzkuN2wwIDI0YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNDYuOCAwQzg5LjYgNDAwIDgwIDM5MC40IDgwIDM3OC43TDgwIDM2OGMwLTUwLjMgMzguNy05MS42IDg4LTk1Ljd6TTQyNy45IDQwMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLTI0YzAtMjkuNS04LjgtNTYuOS0yNC03OS43IDQ5LjMgNC4xIDg4IDQ1LjMgODggOTUuN2wwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNDYuOCAwek05NiAxOTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhTW9iaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI0MSwgIm1vYmlsZS1hbmRyb2lkIiwgIm1vYmlsZS1waG9uZSJdLCAiZjNjZSIsICJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwem03MiA0MTZsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlOwogICAgZmFNb2JpbGVQaG9uZSA9IGZhTW9iaWxlOwogICAgZmFBcnJvd3NUdXJuVG9Eb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXRvLWRvdHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjMSIsICJNMjY1LjQtNi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMjg1LjMgNjQgMzUyIDY0YzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC02Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bS04Mi43IDI3Mmw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE2Mi43IDQwMCA5NiA0MDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0ODEuNyAwIDQ2NGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsNjYuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpNMzIwIDM2OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTY0IDE2MGE2NCA2NCAwIDEgMSAwLTEyOCA2NCA2NCAwIDEgMSAwIDEyOHoiXQogICAgfTsKICAgIGZhRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsxMDA2OSwgMTAwNzEsIDYxNzM4XSwgIjIxIiwgIk02NCA0MzJjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDAtNDAtMTcuOS00MC00MGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIC42IDAgMS4xIDAgMS43bC0xNiAzMDRjLS45IDE3LTE1IDMwLjMtMzIgMzAuM1MzMyAzNzAuNyAzMiAzNTMuN0wxNiA0OS43YzAtLjYgMC0xLjEgMC0xLjcgMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUNodXJjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaHVyY2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTYyXSwgImY1MWQiLCAiTTI4MC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIzMi0yMS4zIDIzMi04bDAgMjQtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgNDgtOTguNiA2NS44QzEyMCAxODYuNyAxMTIgMjAxLjYgMTEyIDIxNy43bDAgMzguMy03OS44IDQ1LjZDMTIuMyAzMTMgMCAzMzQuMiAwIDM1Ny4xTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTkwLjljMC0yMy0xMi4zLTQ0LjItMzIuMi01NS42TDQwMCAyNTYgNDAwIDIxNy43YzAtMTYtOC0zMS0yMS40LTM5LjlsLTk4LjYtNjUuOCAwLTQ4IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0yNHpNMjU2IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYVRvZ2dsZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb2ZmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMDQiLCAiTTM4NCAxMjhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNDU0LjcgMzg0IDM4NCAzODRsLTE5MiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4bDE5MiAwek01NzYgMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyTDE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhU2hvZVByaW50cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9lLXByaW50cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTRiIiwgIk0yOTYgMTkyYy0yMS4xLTEyLjEtNDIuMy0yNC4yLTcyLTI5LjNsMC0xNDAuM0MyNTcuNyAxMyAzMTEuNCAwIDM1MiAwIDQ0OCAwIDU3NiA0OCA1NzYgMTI4cy0xMTkuNiA5Ni0xNzYgOTZjLTQ4IDAtNzYtMTYtMTA0LTMyek0xMjggMzJsNDggMCAwIDEyOC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0ek0yMzIgMzIwYzI4LTE2IDU2LTMyIDEwNC0zMiA1Ni40IDAgMTc2IDE2IDE3NiA5NlMzODQgNTEyIDI4OCA1MTJjLTQwLjUgMC05NC4zLTEzLTEyOC0yMi40bDAtMTQwLjNjMjkuNy01LjIgNTAuOS0xNy4zIDcyLTI5LjR6TTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OCAwIDAgMTI4LTQ4IDB6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGViIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FsbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNzIgMTI4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDMyek00MTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTWVzc2FnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21tZW50LWFsdCJdLCAiZjI3YSIsICJNMCAzNTJMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMCAwYy01LjIgMC0xMC4yIDEuNy0xNC40IDQuOEwxNjYuNCA1MzkuMmMtNC4yIDMuMS05LjIgNC44LTE0LjQgNC44LTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNzItMzIgMGMtNTMgMC05Ni00My05Ni05NnoiXQogICAgfTsKICAgIGZhQ29tbWVudEFsdDIgPSBmYU1lc3NhZ2UyOwogICAgZmFUcm9waHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJvcGh5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTQyXSwgImYwOTEiLCAiTTE0NC4zIDBsMjI0IDBjMjYuNSAwIDQ4LjEgMjEuOCA0Ny4xIDQ4LjItLjIgNS4zLS40IDEwLjYtLjcgMTUuOGw0OS42IDBjMjYuMSAwIDQ5LjEgMjEuNiA0Ny4xIDQ5LjgtNy41IDEwMy43LTYwLjUgMTYwLjctMTE4IDE5MC41LTE1LjggOC4yLTMxLjkgMTQuMy00Ny4yIDE4LjgtMjAuMiAyOC42LTQxLjIgNDMuNy01Ny45IDUxLjhsMCA3My4xIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC03My4xYy0xNi03LjctMzUuOS0yMi01NS4zLTQ4LjMtMTguNC00LjgtMzguNC0xMi4xLTU3LjktMjMuMS01NC4xLTMwLjMtMTAyLjktODcuNC0xMDkuOS0xODkuOS0xLjktMjguMSAyMS00OS43IDQ3LjEtNDkuN2w0OS42IDBjLS4zLTUuMi0uNS0xMC40LS43LTE1LjgtMS0yNi41IDIwLjYtNDguMiA0Ny4xLTQ4LjJ6TTEwMS41IDExMmwtNTIuNCAwYzYuMiA4NC43IDQ1LjEgMTI3LjEgODUuMiAxNDkuNi0xNC40LTM3LjMtMjYuMy04Ni0zMi44LTE0OS42ek0zODAgMjU2LjhjNDAuNS0yMy44IDc3LjEtNjYuMSA4My4zLTE0NC44TDQxMSAxMTJjLTYuMiA2MC45LTE3LjQgMTA4LjItMzEgMTQ0Ljh6Il0KICAgIH07CiAgICBmYUZhY2VEaXp6eTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1kaXp6eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXp6eSJdLCAiZjU2NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEzNC4xIDE1My45bDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwem0xOTIgMGwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHpNMjU2IDMwNGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhRGl6enkyID0gZmFGYWNlRGl6enkyOwogICAgZmFCYWN0ZXJpYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWN0ZXJpYSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0wzMTEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTYuMyA2LjNjNC42IDcuOCA4IDE2LjIgMTAuMyAyNC44bDExIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExIDBjLTIuMiA4LjYtNS42IDE2LjktMTAuMyAyNC44TDM0NSAxNTFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMS0zMC4xIDMwLjEgNC4xIDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xYy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMjE3IDI3OWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02LjMtNi4zYy03LjggNC42LTE2LjIgOC0yNC44IDEwLjNsMCAxMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExYy04LjYtMi4yLTE2LjktNS42LTI0LjgtMTAuM0w3MyAzMTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMzkgMTY5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMTAzIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45UzE5MS42LTIuMyAyMDEgN2w2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMjggMjU2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjQwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yOTYgNDBsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0w1NjcgMTk5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMNjAxIDM0M2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUw0NzMgNDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDMyOSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMjk1IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjFjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM1OSAyOTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xIDMwLjEtMzAuMS00LjEtNC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNi4zIDYuM2M3LjgtNC42IDE2LjItOCAyNC44LTEwLjNsMC0xMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek00NDggMzg0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYUVhckRlYWYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFyLWRlYWYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGVhZiIsICJkZWFmbmVzcyIsICJoYXJkLW9mLWhlYXJpbmciXSwgImYyYTQiLCAiTTUwMi42IDU0LjZsLTQwIDQwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MC00MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tMzIwIDMyMGwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRGVhZiA9IGZhRWFyRGVhZjsKICAgIGZhRGVhZm5lc3MgPSBmYUVhckRlYWY7CiAgICBmYUhhcmRPZkhlYXJpbmcgPSBmYUVhckRlYWY7CiAgICBmYVBlb3BsZUFycm93cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtYXJyb3dzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlb3BsZS1hcnJvd3MtbGVmdC1yaWdodCJdLCAiZTA2OCIsICJNMzIgNjRBNjQgNjQgMCAxIDEgMTYwIDY0IDY0IDY0IDAgMSAxIDMyIDY0ek0wIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzMuMiAwIDYuNCAuMiA5LjUgLjdMOTMuMSAyMDUuMUM2NSAyMzMuMiA2NSAyNzguOCA5My4xIDMwNi45bDU2IDU2YzMuNCAzLjQgNyA2LjQgMTAuOSA5bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xMjAuNkMxMi45IDMzMi40IDAgMzExLjcgMCAyODhsMC02NHpNMzUyIDY0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptNjYuOSAxNDEuMWwtNDQuNC00NC40YzMuMS0uNSA2LjMtLjcgOS41LS43bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRMNDgwIDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xYzMuOS0yLjYgNy41LTUuNiAxMC45LTlsNTYtNTZjMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44ek0zMDIuOCAxNzcuOGM5LTMuNyAxOS4zLTEuNyAyNi4yIDUuMmw1NiA1NmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNTYgNTZjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDMyMS43IDI4OCAzMTJsMC0yNC02NCAwIDAgMjRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNTYtNTZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDU2LTU2YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDE5MC4zIDIyNCAyMDBsMCAyNCA2NCAwIDAtMjRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yeiJdCiAgICB9OwogICAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQgPSBmYVBlb3BsZUFycm93czsKICAgIGZhSGFuZHNDbGFwcGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1jbGFwcGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMWE4IiwgIk0zNDQgOGwwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRTMzQ0LTUuMyAzNDQgOHpNMjIwIDEwLjdsMzIgNDhjNy40IDExIDQuNCAyNS45LTYuNyAzMy4zcy0yNS45IDQuNC0zMy4zLTYuN2wtMzItNDhjLTcuNC0xMS00LjQtMjUuOSA2LjctMzMuM1MyMTIuNi0uMyAyMjAgMTAuN3pNMTM1IDExOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyOTIuNyAyNDIuN2MxMC4xIDEwLjEgMjcuMyAyLjkgMjcuMy0xMS4zbDAtMzkuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTUzLjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40LTY0IDM4LjQtMTQ1LjggMjguMy0xOTguNS0yNC40TDcgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTMgNTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMMjMgMjY1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsOTMgOTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMNTUgMTg1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTE3IDExN2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMWwtOTMtOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek00MzMuMSA0ODQuOWMtMjQuMiAxNC41LTUwLjkgMjIuMS03Ny43IDIzLjEgNDguMS0zOS42IDc2LjYtOTkgNzYuNi0xNjIuNGwwLTk4LjFjOC4yLS4xIDE2LTYuNCAxNi0xNmwwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNHpNNDUzLjMgNGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXMtY292aWQtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRhOSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODMtODMgMTEuNC0xMS40YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTExLjMgMTEuMy0yMy44LTIzLjhjMTcuOS0yMy41IDI5LjktNTEuNyAzNC4xLTgyLjNsMzMuNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMzMuNiAwYy00LjItMzAuNy0xNi4zLTU4LjgtMzQuMS04Mi4zbDIzLjgtMjMuOCAxMS4zIDExLjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ0MC43IDQ2LjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTEuMyAxMS4zLTIzLjggMjMuOEMzNzAuOCA5Ny45IDM0Mi43IDg1LjggMzEyIDgxLjZsMC0zMy42IDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzQxLjMgMCAzMjggMEwyNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuNmMtMzAuNyA0LjItNTguOCAxNi4zLTgyLjMgMzQuMUwxNTcuOSA5MiAxNjkuMiA4MC42YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMTIzLjkgNTguMSA0MS0yNC45ek0xMTMuNiAyMzJsLTMzLjYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDMzLjYgMGM0LjIgMzAuNyAxNi4zIDU4LjggMzQuMSA4Mi4zbC0yMy44IDIzLjgtMTEuMy0xMS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2LjYgNTYuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjMtMTEuMyAyMy44LTIzLjhjMjMuNSAxNy45IDUxLjcgMjkuOSA4Mi4zIDM0LjFsMCAzMy42LTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYgMCAwLTMzLjZjMTMuNC0xLjggMjYuNC01LjIgMzguNy05LjlMMTIzLjUgMTkzLjNjLTQuNyAxMi4zLTggMjUuMi05LjkgMzguN3oiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJEYXlzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXlzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLWFsdCJdLCAiZjA3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyQWx0MiA9IGZhQ2FsZW5kYXJEYXlzMjsKICAgIGZhRGlhbW9uZFR1cm5SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kLXR1cm4tcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGlyZWN0aW9ucyJdLCAiZjVlYiIsICJNMjE1IDE3TDE3IDIxNUM2LjEgMjI1LjkgMCAyNDAuNiAwIDI1NnM2LjEgMzAuMSAxNyA0MUwyMTUgNDk1YzEwLjkgMTAuOSAyNS42IDE3IDQxIDE3czMwLjEtNi4xIDQxLTE3TDQ5NSAyOTdjMTAuOS0xMC45IDE3LTI1LjYgMTctNDFzLTYuMS0zMC4xLTE3LTQxTDI5NyAxN0MyODYuMSA2LjEgMjcxLjQgMCAyNTYgMHMtMzAuMSA2LjEtNDEgMTd6TTM4NSAyNTdsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTc4LjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwYzAtMzkuOCAzMi4yLTcyIDcyLTcybDc4LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFEaXJlY3Rpb25zID0gZmFEaWFtb25kVHVyblJpZ2h0OwogICAgZmFIYW5kUG9pbnRVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3NTddLCAiZjBhNiIsICJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMybDAgMjA4LTY0IDAgMC0yMDh6TTIyNCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS02NC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUwzNy41IDQ1My41QzEzLjUgNDI5LjUgMCAzOTYuOSAwIDM2M2wwLTI3YzAtMzUuMyAyOC43LTY0IDY0LTY0bDg4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNTYgMGMzOS44IDAgNzItMzIuMiA3Mi03MnoiXQogICAgfTsKICAgIGZhQmV6aWVyQ3VydmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmV6aWVyLWN1cnZlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NWIiLCAiTTI5NiAxMzZsMC00OCA0OCAwIDAgNDgtNDggMHpNMjg4IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDQtMTE4LjQgMEMxMTEuMiA2Mi43IDg5LjMgNDggNjQgNDggMjguNyA0OCAwIDc2LjcgMCAxMTJzMjguNyA2NCA2NCA2NGMyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzZsNjYuOSAwYy01OC45IDM5LjYtOTguOSAxMDUtMTA0IDE4MEw4MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zLjMgMGM1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMSA4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xbDY0IDBjMTYuNiAwIDMxLjEtOC40IDM5LjgtMjEuMSA1OSAyNS43IDEwMS42IDgyLjEgMTA3LjUgMTQ5LjFsLTMuMyAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNC41IDBjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwbDY2LjkgMGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0Yy0yNS4zIDAtNDcuMiAxNC43LTU3LjYgMzZsLTExOC40IDAgMC00YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek04OCAzNzZsNDggMCAwIDQ4LTQ4IDAgMC00OHptNDE2IDQ4bDAtNDggNDggMCAwIDQ4LTQ4IDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkhhbGZEcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGFsZi1kcmVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTQ4IiwgIk0xNDMuNC0zLjljOS43LTE2LjggMjcuOC0yOC4xIDQ4LjYtMjguMSAzMC45IDAgNTYgMjUuMSA1NiA1NiAwIDI1LjQtMTYuOSA0Ni44LTQwIDUzLjdsMCAwYy01LjEgMS41LTEwLjQgMi4zLTE2IDIuMy0zMC45IDAtNTYtMjUuMS01Ni01NmwwIDBjMC0xMC4xIDIuNy0xOS43IDcuNC0yNy45ek0zMTguMyAyOTkuMUwyNzIgMjM2LjcgMjcyIDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MCAwLS40IDAtMjM4LjZjMzYuMiA0LjQgNjkuMiAyMy40IDkxLjIgNTNsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgMTEzbDAgMzk5YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTI1LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsNDMtMTI5LTQ4LjMgNjUuMWMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjItMjkuNiA1NS4xLTQ4LjYgOTEuMi01M3oiXQogICAgfTsKICAgIGZhU3F1YXJlUG9sbEhvcml6b250YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBvbGwtaG9yaXpvbnRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsLWgiXSwgImY2ODIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYgMTUyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHptNzIgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIwOCAwek0xOTIgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVBvbGxIID0gZmFTcXVhcmVQb2xsSG9yaXpvbnRhbDsKICAgIGZhU2Nob29sQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZkIiwgIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFIYW5kTGl6YXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWxpemFyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU4IiwgIk0wIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwyMzguNSAwYzM2LjggMCA3MS4yIDE4IDkyLjEgNDguMmwxMTMuNSAxNjRjMTMgMTguNyAxOS45IDQxIDE5LjkgNjMuOGwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzLjgtNzguMS01MC4yLTE2MS45IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMNDggMTYwYy0yNi41IDAtNDgtMjEuNS00OC00OHoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFsa2JvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsYWNrYm9hcmQiXSwgImY1MWIiLCAiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDgwIDM4NGwtNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwIDAtMjU2IDM4NCAwIDAgMjU2eiJdCiAgICB9OwogICAgZmFCbGFja2JvYXJkID0gZmFDaGFsa2JvYXJkOwogICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rLWFsdCJdLCAiZjM1ZCIsICJNMjkwLjQgMTkuOEMyOTUuNCA3LjggMzA3LjEgMCAzMjAgMEw0ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOUw0MDAgMTU3LjMgMjQ2LjYgMzEwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDM1NC43IDExMiAyOTcuNCA1NC42Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOXpNMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBsODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgODBjMCA0NC4yLTM1LjggODAtODAgODBMODAgNTEyYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDE3NnoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhU3F1YXJlRnVsbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZ1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg5OTcsIDEyODk5OCwgMTI4OTk5LCAxMjllMywgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgImY0NWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhQ2xvdmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3ZlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTM5IiwgIk0zMTAuNCAxNkMzNDYuNiAxNiAzNzYgNDUuNCAzNzYgODEuN2wwIDUuMmMwIDExLjItMi43IDIyLjMtNy44IDMyLjJsLTIuMyA0LjItMjAuMSAzMy41Yy0xLjEgMS45LTEuMiAzLjQtMS4xIDQuNSAuMiAxLjMgLjkgMi43IDIuMSAzLjlzMi42IDEuOSAzLjkgMi4xYzEuMSAuMiAyLjYgLjEgNC41LTEuMWwzMy41LTIwLjEgNC4yLTIuM2MxMC01LjEgMjEtNy44IDMyLjItNy44bDUuMiAwYzM2LjIgMCA2NS42IDI5LjQgNjUuNiA2NS43IDAgMTcuNC02LjkgMzQuMS0xOS4yIDQ2LjRsLTEuMyAxLjNjLTMuNyAzLjctMy43IDkuNiAwIDEzLjNsMS4zIDEuM2MxMi4zIDEyLjMgMTkuMiAyOSAxOS4yIDQ2LjQgMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjZsLTUuMiAwYy0xMi44IDAtMjUuNS0zLjUtMzYuNS0xMC4xbC0zMy41LTIwLjFjLTEuOS0xLjEtMy40LTEuMi00LjUtMS4xLTEuMyAuMi0yLjcgLjktMy45IDIuMXMtMS45IDIuNi0yLjEgMy45Yy0uMiAxLjEtLjEgMi42IDEuMSA0LjVsMjAuMSAzMy41YzYuNiAxMSAxMC4xIDIzLjYgMTAuMSAzNi41bDAgNS4yYzAgMzYuMi0yOS40IDY1LjYtNjUuNiA2NS42LTE3LjQgMC0zNC4xLTYuOS00Ni40LTE5LjJsLTEuMy0xLjNjLTMuNy0zLjctOS42LTMuNy0xMy4zIDBsLTEuMyAxLjNjLTEyLjMgMTIuMy0yOSAxOS4yLTQ2LjQgMTkuMi0zNi4yIDAtNjUuNi0yOS40LTY1LjctNjUuNmwwLTUuMmMwLTEyLjggMy41LTI1LjUgMTAuMS0zNi41bDIwLjEtMzMuNWMxLjEtMS45IDEuMi0zLjQgMS4xLTQuNS0uMi0xLjMtLjktMi43LTIuMS0zLjlzLTIuNi0xLjktMy45LTIuMWMtLjUtLjEtMS4yLS4xLTEuOSAwbC0yLjUgMS0zMy41IDIwLjFjLTExIDYuNi0yMy42IDEwLjEtMzYuNSAxMC4xbC01LjIgMEM0NS40IDM3NiAxNiAzNDYuNiAxNiAzMTAuNCAxNiAyOTMgMjIuOSAyNzYuMyAzNS4yIDI2NGwxLjMtMS4zIDEuMi0xLjVjMi4xLTMuMSAyLjEtNy4yIDAtMTAuM2wtMS4yLTEuNS0xLjMtMS4zQzIyLjkgMjM1LjggMTYgMjE5LjEgMTYgMjAxLjcgMTYgMTY1LjQgNDUuNCAxMzYgODEuNyAxMzZsNS4yIDBjMTIuOCAwIDI1LjUgMy41IDM2LjUgMTAuMWwzMy41IDIwLjEgMi41IDFjLjcgLjEgMS40IC4xIDEuOSAuMSAxLjMtLjIgMi43LS45IDMuOS0yLjFzMS45LTIuNiAyLjEtMy45Yy4xLS41IC4xLTEuMi0uMS0xLjlsLTEtMi41LTIwLjEtMzMuNWMtNi42LTExLTEwLjEtMjMuNi0xMC4xLTM2LjVsMC01LjJjMC0zNi4yIDI5LjQtNjUuNyA2NS43LTY1LjcgMTcuNCAwIDM0LjEgNi45IDQ2LjQgMTkuMmwxLjMgMS4zYzMuNyAzLjYgOS42IDMuNyAxMy4zIDBsMS4zLTEuMyA0LjgtNC40QzI4MC41IDIxLjMgMjk1LjEgMTYgMzEwLjQgMTZ6Il0KICAgIH07CiAgICBmYVRlZXRoT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aC1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2MmYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA4MGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0wIDI3MmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMwNHptODAtMTYwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHptMTI4IDBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek04MCAxMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHpNNDggMzg0bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTE0NCA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDh6bTExMi0xNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnoiXQogICAgfTsKICAgIGZhQmFyc1N0YWdnZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXN0YWdnZXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW9yZGVyIiwgInN0cmVhbSJdLCAiZjU1MCIsICJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek02NCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYVJlb3JkZXIgPSBmYUJhcnNTdGFnZ2VyZWQ7CiAgICBmYVN0cmVhbSA9IGZhQmFyc1N0YWdnZXJlZDsKICAgIGZhV2FyZWhvdXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhcmVob3VzZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDk0IiwgIk0wIDE0Mi4xTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNy45YzAtMjcuNS0xNy42LTUyLTQzLjgtNjAuN0wzMDMuMiA1LjFjLTkuOS0zLjMtMjAuNS0zLjMtMzAuNCAwTDQzLjggODEuNEMxNy42IDkwLjEgMCAxMTQuNiAwIDE0Mi4xek00NjQgMjU2bC0zNTIgMCAwIDY0IDM1MiAwIDAtNjR6TTExMiA0MTZsMzUyIDAgMC02NC0zNTIgMCAwIDY0em0zNTIgMzJsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHoiXQogICAgfTsKICAgIGZhU3dhdGNoYm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzd2F0Y2hib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YzMiLCAiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwbDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNjhjMCA1My00MyA5Ni05NiA5NlMwIDQ2OSAwIDQxNkwwIDQ4ek0yNDAgNDA5LjZsMC0yNzEuNSA0OC4xLTQ4LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsNjcuOSA2Ny45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDI0MCA0MDkuNnpNMjA1LjUgNTEybDE5Mi0xOTIgNjYuNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1OC41IDB6TTgwIDY0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZMODAgNjR6TTY0IDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFDYW1wZ3JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbXBncm91bmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTc4XSwgImY2YmIiLCAiTTM0NC44IDUyLjNjMTEuMi0xMy43IDkuMi0zMy44LTQuNS00NXMtMzMuOC05LjItNDUgNC41bC0zOS4yIDQ4LTM5LjItNDhDMjA1LjYtMS45IDE4NS40LTQgMTcxLjcgNy4ycy0xNS43IDMxLjQtNC41IDQ1bDQ3LjQgNTgtMjAyIDI0Ni45QzQuNSAzNjcuMSAwIDM3OS42IDAgMzkyLjZMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zOS40YzAtMTIuOS00LjUtMjUuNS0xMi43LTM1LjVsLTIwMi0yNDYuOSA0Ny40LTU4ek0yNTYgMjg4bDExMiAxMjgtMjI0IDAgMTEyLTEyOHoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU1MiIsICJNMTA0LjUgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0tOCAxODEuM0w3My45IDIyNy45Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNS4xLTM1LjFjMjIuOC0yMi44IDUzLjYtMzUuNiA4NS44LTM1LjYgMzYuOSAwIDcxLjggMTYuOCA5NC44IDQ1LjZMMjYyLjMgMTgwYzYuMSA3LjYgMTUuMyAxMiAyNSAxMmwzMy4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMzLjIgMGMtMjkuMiAwLTU2LjctMTMuMy03NS0zNmwtMy44LTQuNyAwIDExNS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44TDEzMCAzNDcuNWMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zek05Ni42IDM3MWMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41TDU1LjEgNTM0LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMOTYuNiAzNzF6TTUwNS41IDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJ6Il0KICAgIH07CiAgICBmYUdsYXNzZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3NlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTMwIiwgIk0xNDMuMyA5NmMtMTQgMC0yNi41IDkuMi0zMC42IDIyLjZMNzAuNCAyNTYgMjI0IDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMmw2NCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1My42IDAtNDIuMy0xMzcuNEM0NTkuMiAxMDUuMiA0NDYuOCA5NiA0MzIuNyA5Nkw0MDAgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIuNyAwYzQyLjEgMCA3OS40IDI3LjUgOTEuOCA2Ny44bDQ1LjQgMTQ3LjVjNC4xIDEzLjIgNi4xIDI2LjkgNi4xIDQwLjdsMCA5NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtMzItNjQgMCAwIDMyYzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC05NmMwLTEzLjggMi4xLTI3LjUgNi4xLTQwLjdMNTEuNSA5OS44QzYzLjkgNTkuNSAxMDEuMSAzMiAxNDMuMyAzMkwxNzYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyLjcgMHpNNjQgMzIwbDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwem00MTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NC0xMjggMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVBhdXNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGF1c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgInBhdXNlLWNpcmNsZSJdLCAiZjI4YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxOTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhUGF1c2VDaXJjbGUyID0gZmFDaXJjbGVQYXVzZTI7CiAgICBmYU1lbW9yeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZW1vcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzOCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRDMCAxNDIuMiA0LjQgMTQ4IDEwLjEgMTUxLjcgMjMuMyAxNjAuMyAzMiAxNzUuMSAzMiAxOTJzLTguNyAzMS43LTIxLjkgNDAuM0M0LjQgMjM2IDAgMjQxLjggMCAyNDguNmwwIDU1LjQgNTEyIDAgMC01NS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuMy0xMy4yLTguNi0yMS45LTIzLjQtMjEuOS00MC4zczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM2wwLTcuNGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNTEyIDQxNmwwLTY0LTUxMiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA4OCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTYwIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFHaWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdpZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NzNdLCAiZjA2YiIsICJNMzIxLjUgNjguOEMzMjkuMSA1NS45IDM0Mi45IDQ4IDM1Ny44IDQ4bDIuMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC03My4zIDAgMzQuOC01OS4yem0tMTMxIDBsMzQuOCA1OS4yLTczLjMgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGwyLjIgMGMxNC45IDAgMjguOCA3LjkgMzYuMyAyMC44em04OS42LTI0LjNsLTI0LjEgNDEtMjQuMS00MUMyMTUuNyAxNi45IDE4Ni4xIDAgMTU0LjIgMEwxNTIgMGMtNDguNiAwLTg4IDM5LjQtODggODggMCAxNC40IDMuNSAyOCA5LjYgNDBMMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTQxLjYgMGM2LjEtMTIgOS42LTI1LjYgOS42LTQwIDAtNDguNi0zOS40LTg4LTg4LTg4bC0yLjIgMGMtMzEuOSAwLTYxLjUgMTYuOS03Ny43IDQ0LjR6TTQ4MCAyNzJsLTIwMCAwIDAgMjA4IDEzNiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ0em0tMjQ4IDBsLTIwMCAwIDAgMTQ0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEzNiAwIDAtMjA4eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXaGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MmEiLCAiTTE3Ni0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2ek01NiAwbDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgNDhDNDIuNyA0OCAzMiAzNy4zIDMyIDI0UzQyLjcgMCA1NiAwek0yNCA3MmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxMjBDMTAuNyAxMjAgMCAxMDkuMyAwIDk2UzEwLjcgNzIgMjQgNzJ6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAwYzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMC0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDExMmM4LjggMCAxNiA3LjIgMTYgMTYgMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUR1bmdlb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVuZ2VvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQ5IiwgIk0zNDcuNSAxNDQuOGM2LjUgNS40IDEyLjUgMTEuMyAxOCAxNy43IDguNyAxMC4yIDIzLjcgMTQgMzUuMSA2LjlsNTQuMS0zMy44YzExLjItNyAxNC43LTIxLjcgNi45LTMyLjItMTUuMy0yMC41LTMzLjUtMzguNi01NC4xLTUzLjgtMTAuNC03LjYtMjQuNy00LjMtMzEuOCA2LjRsLTM1LjEgNTIuNmMtNy44IDExLjYtMy44IDI3LjMgNyAzNi4yek0zMjcuOCA0MS4xYzguNi0xMi45IDIuOS0zMC41LTEyLjItMzQuMS0xOS4xLTQuNi0zOS4xLTctNTkuNi03cy00MC40IDIuNC01OS42IDdjLTE1LjEgMy42LTIwLjggMjEuMi0xMi4yIDM0LjFsNDAgNjBjNS4yIDcuOCAxNC41IDExLjcgMjMuOSAxMS4yIDUuMi0uMyAxMC42LS4zIDE1LjggMCA5LjQgLjUgMTguNy0zLjQgMjMuOS0xMS4ybDQwLTYwek01MC41IDEwMy4zYy03LjkgMTAuNS00LjMgMjUuMyA2LjkgMzIuMmw1NC4xIDMzLjhjMTEuNCA3LjEgMjYuMyAzLjMgMzUuMS02LjkgNS41LTYuNCAxMS41LTEyLjMgMTgtMTcuNyAxMC44LTguOSAxNC44LTI0LjYgNy0zNi4yTDEzNi40IDU1LjljLTcuMS0xMC43LTIxLjUtMTQtMzEuOC02LjQtMjAuNiAxNS4xLTM4LjggMzMuMy01NC4xIDUzLjh6bTYyIDE0MS4xYy44LTkuOS0zLjMtMTkuOS0xMS44LTI1LjFMNDEgMTgyYy0xMi45LTgtMjkuOS0yLjMtMzMuNiAxMi41LTQuOSAxOS43LTcuNSA0MC4zLTcuNSA2MS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMy45IC4yLTcuOCAuNS0xMS42em0yODcuMSAwYy4zIDMuOCAuNSA3LjcgLjUgMTEuNmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTIxLjItMi42LTQxLjgtNy41LTYxLjYtMy42LTE0LjctMjAuNy0yMC41LTMzLjYtMTIuNWwtNTkuNyAzNy4zYy04LjQgNS4zLTEyLjYgMTUuMi0xMS44IDI1LjF6TTg4IDM1MmwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNDAwIDBsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNHptLTgwIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6bTE2MCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6Il0KICAgIH07CiAgICBmYVN1aXRjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1lZGtpdCJdLCAiZjBmYSIsICJNMTkyIDU2bDAgNDAgMTI4IDAgMC00MGMwLTQuNC0zLjYtOC04LThMMjAwIDQ4Yy00LjQgMC04IDMuNi04IDh6bS00OCA4bDAtOGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMTIgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQyNC0yMjQgMCAwLTQxNnpNOTYgMTc2bDAgMzA0LTMyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDAgMCA4MHpNNDE2IDQ4MGwwLTM4NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMiAwek0yNDQgMjA4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzNi0zNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMzYgMCAwIDM2YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM2IDM2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0zNiAwIDAtMzZjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFNZWRraXQgPSBmYVN1aXRjYXNlTWVkaWNhbDsKICAgIGZhUGVyc29uQ2FuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTNjIiwgIk0yMzItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE0NCAyMzYuN0w5Ny43IDI5OS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxNDIgMTMyIDE4MS43IDExMiAyMjQgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDMwNCAyMzYuNyAzMDQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjN6TTM5MiAzODRjLTQuNCAwLTggMy42LTggOCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTI4YzAtNC40LTMuNi04LTgtOHoiXQogICAgfTsKICAgIGZhR2F1Z2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGFzaGJvYXJkIiwgImdhdWdlLW1lZCIsICJ0YWNob21ldGVyLWFsdC1hdmVyYWdlIl0sICJmNjI0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0tMTYgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNDAwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFEYXNoYm9hcmQgPSBmYUdhdWdlOwogICAgZmFHYXVnZU1lZCA9IGZhR2F1Z2U7CiAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTsKICAgIGZhRW52ZWxvcGVPcGVuVGV4dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuLXRleHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjY1OCIsICJNMjg4IDMzLjlMOTYuNCAxNzUuOCAyNTQuNSAyOTNjNS4zIDMuOSAxMS4yIDYuOSAxNy41IDguN0wyNzIgNDY0YzAgNS41IC41IDEwLjggMS4zIDE2TDk2IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMzkuOWMwLTIwLjMgOS42LTM5LjQgMjUuOS01MS40TDI1NC41LTIxYzkuNy03LjIgMjEuNC0xMSAzMy41LTExczIzLjggMy45IDMzLjUgMTFMNTE4LjEgMTI0LjdjNy4yIDUuMyAxMy4xIDEyIDE3LjQgMTkuNi0yLjUtLjItNS0uMy03LjUtLjNMNDM2LjYgMTQ0IDI4OCAzMy45ek0zMjAgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMjR6bTgwIDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMHoiXQogICAgfTsKICAgIGZhVG9vbGJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b29sYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIwXSwgImY1NTIiLCAiTTE3NiA1NmwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA0OGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMjggMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDc2LjEtMTM2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTE0NCAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0xMzYgMCAwLTc2LjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFMMTI4IDk2ek0wIDQxNmwwLTk2IDEzNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDE0NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDEzNiAwIDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHoiXQogICAgfTsKICAgIGZhUG93ZXJPZmYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG93ZXItb2ZmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIxMV0sICJmMDExIiwgIk0yODggMGMwLTE3LjctMTQuMy0zMi0zMi0zMlMyMjQtMTcuNyAyMjQgMGwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDI4OCAwek0xNDYuMyA5OC40YzE0LjUtMTAuMSAxOC0zMC4xIDcuOS00NC42cy0zMC4xLTE4LTQ0LjYtNy45QzQzLjQgOTIuMSAwIDE2OSAwIDI1NiAwIDM5Ny40IDExNC42IDUxMiAyNTYgNTEyUzUxMiAzOTcuNCA1MTIgMjU2YzAtODctNDMuNC0xNjMuOS0xMDkuNy0yMTAuMS0xNC41LTEwLjEtMzQuNC02LjYtNDQuNiA3LjlzLTYuNiAzNC40IDcuOSA0NC42YzQ5LjggMzQuOCA4Mi4zIDkyLjQgODIuMyAxNTcuNiAwIDEwNi04NiAxOTItMTkyIDE5MlM2NCAzNjIgNjQgMjU2YzAtNjUuMiAzMi41LTEyMi45IDgyLjMtMTU3LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDYsICJzaWduYWwtNSIsICJzaWduYWwtcGVyZmVjdCJdLCAiZjAxMiIsICJNNDg4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDB6TTM2MCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAyNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHpNMTUyIDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNNDggMzg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmFsNSA9IGZhU2lnbmFsOwogICAgZmFTaWduYWxQZXJmZWN0ID0gZmFTaWduYWw7CiAgICBmYUFycm93c1NwaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXNwaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiYiIsICJNNDgxLjcgMjQwLjFjLTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43LTMuMyA0Ny0yMy42IDg5LjQtNTQuOCAxMjFMMzYxIDM1OWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMjAgMzY2LjMgMzIwIDM3NmwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTM1LTM1YzQxLjctNDIuMiA2OC45LTk4LjggNzMuNC0xNjEuOCAxLjItMTcuNi0xMi0zMi45LTI5LjctMzQuMnpNMzkgNDFMNzQgNzZjLTQxLjcgNDIuMi02OC45IDk4LjgtNzMuNCAxNjEuOC0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMnMzMi45LTEyIDM0LjItMjkuN2MzLjMtNDcgMjMuNi04OS40IDU0LjgtMTIxTDE1MSAxNTNjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMxOTIgMTQ1LjcgMTkyIDEzNmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEw1NiAwQzQ2LjMgMCAzNy41IDUuOCAzMy44IDE0LjhTMzIuMiAzNC4xIDM5IDQxem0yMDEtMTAuN2MtMS4yIDE3LjYgMTIgMzIuOSAyOS43IDM0LjIgNDcgMy4zIDg5LjQgMjMuNiAxMjEgNTQuOEwzNTkgMTUxYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzM2Ni4zIDE5MiAzNzYgMTkybDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAzMi4yIDQ3MSAzOUw0MzYgNzRjLTQyLjItNDEuNy05OC44LTY4LjktMTYxLjgtNzMuNC0xNy42LTEuMi0zMi45IDEyLTM0LjIgMjkuN3pNNDEgNDczbDM1LTM1YzQyLjIgNDEuNyA5OC44IDY4LjkgMTYxLjggNzMuNCAxNy42IDEuMiAzMi45LTEyIDM0LjItMjkuN3MtMTItMzIuOS0yOS43LTM0LjJjLTQ3LTMuMy04OS40LTIzLjYtMTIxLTU0LjhMMTUzIDM2MWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE0NS43IDMyMCAxMzYgMzIwTDI0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0NTZjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgNDc5LjggNDEgNDczeiJdCiAgICB9OwogICAgZmFKb2ludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqb2ludCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTk1IiwgIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0yOTIuNyAzMjBjNS42IDAgMTAuNyAyLjkgMTMuNiA3LjZMMzk0LjYgNDcxYzEuMyAyLjEgMCA0LjktMi40IDUuMi0xNi4xIDIuNS0zMi40IDMuNy00OC43IDMuN2wtMzguMSAwYy01LjYgMC0xMC43LTIuOS0xMy42LTcuNmwtNzktMTI4LjRjLTYtOS44IDAtMjIuNiAxMS41LTIzLjMgNi43LS40IDEzLjQtLjYgMjAuMi0uNmw0OC4zIDB6TTQ1OS4zIDQ2NS45Yy02LjQgMS0xMi43LTEuOS0xNi4xLTcuNEwzNzQuMSAzNDYuMWMtNi43LTEwLjkgMS41LTI0LjcgMTQuMi0yMi45IDEuMyAuMiAyLjYgLjQgMy44IC42bDEzNi40IDIxYzI3LjMgNC4yIDQ3LjQgMjcuNyA0Ny40IDU1LjNzLTIwLjEgNTEuMS00Ny40IDU1LjNsLTY5LjIgMTAuNnpNMTM4LjcgMzM2YzYuNy0xLjUgMTMuNiAxLjQgMTcuMiA3LjJsNjguOSAxMTJjNi42IDEwLjctMS4yIDI0LjQtMTMuOCAyMy4xLTEzLTEuNC0yNS45LTMuNS0zOC42LTYuNUwzMS4yIDQzOS4yQzEyLjkgNDM1IDAgNDE4LjcgMCA0MDBzMTIuOS0zNSAzMS4yLTM5LjJMMTM4LjcgMzM2eiJdCiAgICB9OwogICAgZmFCcmFpbGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWlsbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJhMSIsICJNODAgMTQ0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMCAxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNC0xMC43IDI0LTI0IDI0em0wIDU2YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwLTgwIDM1LjgtODAgODAgMzUuOCA4MCA4MCA4MHptMjQ4LTgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNHptNTYgMGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwIDgwLTM1LjggODAtODB6TTMwNCAyMzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wIDEwNGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0xOTJhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6Il0KICAgIH07CiAgICBmYUJhc2tldFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2tldC1zaG9wcGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzaG9wcGluZy1iYXNrZXQiXSwgImYyOTEiLCAiTTI4OCAwYzYuNiAwIDEyLjkgMi43IDE3LjQgNy41bDE0NCAxNTIgLjUgLjUgNzguMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMTQuNS05LjYgMjYuNy0yMi44IDMwLjdMNDkxLjEgNDI5LjljLTYuNSAyOS4zLTMyLjUgNTAuMS02Mi41IDUwLjFsLTI4MS4zIDBjLTMwIDAtNTYtMjAuOC02Mi41LTUwLjFsLTQ2LTIwNy4yYy0xMy4yLTMuOS0yMi44LTE2LjItMjIuOC0zMC43IDAtMTcuNyAxNC4zLTMyIDMyLTMybDc4LjEgMCAuNS0uNSAxNDQtMTUyQzI3NS4xIDIuNyAyODEuNCAwIDI4OCAwem0wIDU4LjlMMTkyLjIgMTYwIDM4My44IDE2MCAyODggNTguOXpNMjA4IDI2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyem04MC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTI4IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZzsKICAgIGZhQnJpZGdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGM4IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTRjMC0zOC44IDI2LjQtNzIuNiA2NC04MmwwLTExMi00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBsYW5lQXJyaXZhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1hcnJpdmFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ4XSwgImY1YWYiLCAiTTM4Ni42IDE5My4xTDI2NS45IDMuN2MtNC44LTcuNi0xMi42LTEyLjgtMjEuNC0xNC4zbC00My4xLTcuNmMtMTAuOC0xLjktMjAuMiA3LjMtMTguNiAxOC4xbDI0IDE2MS42LTEwNS0xOC41LTMzLjgtNjEuOEM2NC41IDc0LjcgNTguMiA3MC4yIDUxLjEgNjlMMzQgNjZjLTkuOC0xLjctMTguOCA1LjktMTguOCAxNS44bC42IDEwNi4zYy4yIDMwLjkgMjIuNCA1Ny4zIDUyLjkgNjIuN2wxMy41IDIuNCAwIDAgNDE3LjYgNzMuNmMzMC41IDUuNCA1OS41LTE1IDY0LjktNDUuNHMtMTUtNTkuNS00NS40LTY0LjlMMzg2LjYgMTkzLjF6TTIyNCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMzEuMi0xNS4zYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDh6Il0KICAgIH07CiAgICBmYUNhc2hSZWdpc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXNoLXJlZ2lzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODgiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRzMjguNyA2NCA2NCA2NGw0OCAwIDAgMzItNTcgMGMtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY5LjZjMC00LjgtLjQtOS42LTEuMS0xNC40TDQ4OC4yIDIxNC40QzQ4My41IDE4My4xIDQ1Ni42IDE2MCA0MjUgMTYwbC0yMTcgMCAwLTMyIDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRTMjkxLjMgMCAyNTYgMEw5NiAwem0wIDQ4bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDk2IDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek02NCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNDgtMTYwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTIwLTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTE2MCAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek0zMjggMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTI1NiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek00MjQgMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTM1MiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdCiAgICB9OwogICAgZmFSaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcwYiIsICJNNjQgMjA4YzAgNy44IDQuNCAxOC43IDE3LjEgMzAuMyA0NS40LTI0LjIgMTA3LjctMzguMyAxNzQuOS0zOC4zczEyOS41IDE0LjEgMTc0LjkgMzguM2MxMi44LTExLjYgMTcuMS0yMi41IDE3LjEtMzAuMyAwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjYtMzUuMi0xNy42LTg2LjEtMjkuNC0xNDQuMS0yOS40cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuNyAzMy4yIDEyLjQgNzUuNyAyMC4zIDEyMi45IDIwLjNzODkuNy03LjggMTIyLjktMjAuM0MzNDUuMyAyNTUuNiAzMDMgMjQ4IDI1NiAyNDh6TTAgMjA4QzAgMTU4LjQgMzkuNCAxMjIuMiA4My4zIDEwMC4yIDEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44bDAgOTZjMCA0OS42LTM5LjQgODUuOC04My4zIDEwNy44LTQ1LjkgMjIuOS0xMDcgMzYuMi0xNzIuNyAzNi4yUzEyOS4xIDQzNC43IDgzLjMgNDExLjhDMzkuNCAzODkuOCAwIDM1My42IDAgMzA0bDAtOTZ6Il0KICAgIH07CiAgICBmYUFxdWFyaXVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFxdWFyaXVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4NDUiLCAiTTQwMS43IDI5MS40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxMjggNjRjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM0w0MTYgMzU1LjggMzAyLjMgNDEyLjZjLTkgNC41LTE5LjYgNC41LTI4LjYgMEwxNjAgMzU1LjggNDYuMyA0MTIuNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOWwxMjgtNjRjOS00LjUgMTkuNi00LjUgMjguNiAwTDI4OCAzNDguMiA0MDEuNyAyOTEuNHptMy40LTE5My41YzguMi0zIDE3LjMtMi41IDI1LjIgMS41bDEyOCA2NGMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zTDQxNiAxNjMuOCAzMDIuMyAyMjAuNmMtOSA0LjUtMTkuNiA0LjUtMjguNiAwTDE2MCAxNjMuOCA0Ni4zIDIyMC42Yy0xNS44IDcuOS0zNSAxLjUtNDIuOS0xNC4zcy0xLjUtMzUgMTQuMy00Mi45bDEyOC02NCAzLjQtMS41YzguMi0zIDE3LjMtMi41IDI1LjIgMS41bDExMy43IDU2LjggMTEzLjctNTYuOCAzLjQtMS41eiJdCiAgICB9OwogICAgZmFTaGFyZU5vZGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoYXJlLW5vZGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNoYXJlLWFsdCJdLCAiZjFlMCIsICJNMzg0IDE5MmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05Ni05NiA0My05NiA5NmMwIDUuNCAuNSAxMC44IDEuMyAxNkwxNTkuNiAxODQuMWMtMTYuOS0xNS0zOS4yLTI0LjEtNjMuNi0yNC4xLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjQuNCAwIDQ2LjYtOS4xIDYzLjYtMjQuMUwyODkuMyA0MDBjLS45IDUuMi0xLjMgMTAuNS0xLjMgMTYgMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05Ni00My05Ni05Ni05NmMtMjQuNCAwLTQ2LjYgOS4xLTYzLjYgMjQuMUwxOTAuNyAyNzJjLjktNS4yIDEuMy0xMC41IDEuMy0xNnMtLjUtMTAuOC0xLjMtMTZsMTI5LjctNzIuMWMxNi45IDE1IDM5LjIgMjQuMSA2My42IDI0LjF6Il0KICAgIH07CiAgICBmYVNoYXJlQWx0ID0gZmFTaGFyZU5vZGVzOwogICAgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1M2YiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJpbm9jdWxhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmlub2N1bGFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWU1IiwgIk0xMjggMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyLTk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptNjQgOTZsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU5LjFjMC0zNC42IDkuNC02OC42IDI3LjItOTguMyAxMy43LTIyLjggMjIuNS00OC4yIDI1LjgtNzQuNkw2MC41IDE1NmMyLTE2IDE1LjYtMjggMzEuOC0yOGw5OS44IDB6bTIyNy44IDBjMTYuMSAwIDI5LjggMTIgMzEuOCAyOEw0NTkgMjE2YzMuMyAyNi40IDEyLjEgNTEuOCAyNS44IDc0LjYgMTcuOCAyOS43IDI3LjIgNjMuNyAyNy4yIDk4LjNsMCA1OS4xYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMjAgOTkuOCAwek0zMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyLTk2IDAgMC0zMnptLTMyIDY0bDAgMTYwLTY0IDAgMC0xNjAgNjQgMHoiXQogICAgfTsKICAgIGZhS2lwU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXAtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWM0IiwgIk0zNDAuOCA4OC4zYzEzLjQtMTEuNSAxNS0zMS43IDMuNS00NS4xcy0zMS43LTE1LTQ1LjEtMy41TDEyOCAxODYuNCAxMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgNDYuMyA2NCA2NGwwIDE2OC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAxNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyMi40IDE3MS4yIDE0Ni43YzEzLjQgMTEuNSAzMy42IDkuOSA0NS4xLTMuNXM5LjktMzMuNi0zLjUtNDUuMUwxNzMuMiAyODAgMzUyIDI4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxNzMuMiAyMzIgMzQwLjggODguM3oiXQogICAgfTsKICAgIGZhSGFyZERyaXZlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXJkLWRyaXZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NDM2LCAiaGRkIl0sICJmMGEwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMjYwLjFDMTguMSAyNDcuNCA0MC4yIDI0MCA2NCAyNDBsMzIwIDBjMjMuOCAwIDQ1LjkgNy40IDY0IDIwLjFMNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00NDggMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0ek0yMjQgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyOC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUhkZDIgPSBmYUhhcmREcml2ZTI7CiAgICBmYVJhbmtpbmdTdGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhbmtpbmctc3RhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTYxIiwgIk0zMjEuOCA1NC4xTDI5OC4yIDYuM2MtMy45LTguMy0xNi4xLTguNi0yMC40IDBsLTIzLjYgNDcuOC01Mi4zIDcuNWMtOS4zIDEuNC0xMy4zIDEyLjktNi40IDE5LjhsMzggMzctOSA1Mi4xYy0xLjQgOS4zIDguMiAxNi41IDE2LjggMTIuMmw0Ni45LTI0LjggNDYuNiAyNC40YzguNiA0LjMgMTguMy0yLjkgMTYuOC0xMi4ybC05LTUyLjEgMzgtMzYuNmM2LjgtNi44IDIuOS0xOC4zLTYuNC0xOS44bC01Mi4zLTcuNXpNMjU2IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNjBjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2MGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDggMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNNDE2IDQzMmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh6Il0KICAgIH07CiAgICBmYVVzZXJUaWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci10aWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUwOCIsICJNMjI0IDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6bS0zMC41IDU2bDYxIDBjOS43IDAgMTcuNSA3LjggMTcuNSAxNy41IDAgNC4yLTEuNSA4LjItNC4yIDExLjRsLTI3LjQgMzIgMzEgMTE1LjEgLjYgMCAzNC42LTEzOC41YzIuMi04LjcgMTEuMS0xNCAxOS41LTEwLjggNjEuOSAyMy42IDEwNS45IDgzLjYgMTA1LjkgMTUzLjggMCAxNS4xLTEyLjMgMjcuNC0yNy40IDI3LjRMNDMuNCA1MTJjLTE1LjEgMC0yNy40LTEyLjMtMjcuNC0yNy40IDAtNzAuMiA0NC0xMzAuMiAxMDUuOS0xNTMuOCA4LjQtMy4yIDE3LjMgMi4xIDE5LjUgMTAuOGwzNC42IDEzOC41IC42IDAgMzEtMTE1LjEtMjcuNC0zMmMtMi43LTMuMi00LjItNy4yLTQuMi0xMS40IDAtOS43IDcuOC0xNy41IDE3LjUtMTcuNXoiXQogICAgfTsKICAgIGZhRWxsaXBzaXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxsaXBzaXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZWxsaXBzaXMtaCJdLCAiZjE0MSIsICJNMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0xNjggMGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTIyNC01NmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhRWxsaXBzaXNIID0gZmFFbGxpcHNpczsKICAgIGZhU3RvcmVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9yZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDcxIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01OC42LTU4LjZjMS4xLTQgMS42LTguMiAxLjYtMTIuNWwwLTE1MS4yYy0xMi41IDQuNi0yNi4xIDcuMi00MC41IDcuMi04LjEgMC0xNS45LS44LTIzLjUtMi40bDAgNjYuNC0zMC4yIDAtMTM3LjUtMTM3LjVjMi45LTMuNiA1LjUtNy40IDcuNi0xMS41IDExLjYgMjIgMzQuNyAzNyA2MS4zIDM3IDI2LjggMCA0OS44LTE1LjEgNjEuNC0zNy4xIDExLjQgMjIuMSAzNC41IDM3LjEgNjAuOCAzNy4xIDQ1LjYgMCA3OC40LTQzLjcgNjUuNi04Ny41TDUxMy44IDcyLjNDNTA2LjggNDguNCA0ODQuOSAzMiA0NjAgMzJMMTE2IDMyYy01LjUgMC0xMC44IC44LTE1LjkgMi4zTDQxLTI0Ljl6TTE1MS41IDIyMS4zTDQ4LjcgMTE4LjYgMzguOSAxNTIuNWMtMTIuOCA0My43IDIwIDg3LjUgNjUuNiA4Ny41IDE4LjEgMCAzNC43LTcuMSA0Ny0xOC43ek00MTAuMiA0ODBsLTEyOC0xMjgtMTU0LjIgMCAwLTY2LjRjLTcuNiAxLjYtMTUuNSAyLjQtMjMuNSAyLjQtMTQuNCAwLTI4LTIuNi00MC41LTcuMkw2NCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMjk4LjIgMHoiXQogICAgfTsKICAgIGZhUGVyY2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJjZW50IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjIxMDEsIDYyNzg1LCAicGVyY2VudGFnZSJdLCAiMjUiLCAiTTE5MiAxMjhhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwek00NDggMzg0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNNDM4LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMzg0IDM4NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwzODQtMzg0eiJdCiAgICB9OwogICAgZmFQZXJjZW50YWdlID0gZmFQZXJjZW50OwogICAgZmFGaWxlWmlwcGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXppcHBlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLWFyY2hpdmUiXSwgImYxYzYiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek02NCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDQ4Qzc0LjcgNDggNjQgNTguNyA2NCA3MnptMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptNjQgNzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDhjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0tMTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdCiAgICB9OwogICAgZmFGaWxlQXJjaGl2ZTIgPSBmYUZpbGVaaXBwZXIyOwogICAgZmFEaXNwbGF5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpc3BsYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTE2MyIsICJNNDQ4IDk2bDAgMjU2LTM4NCAwIDAtMjU2IDM4NCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0NCAwLTE2IDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAtMTYtNDggMTQ0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUljb25zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImljb25zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhlYXJ0LW11c2ljLWNhbWVyYS1ib2x0Il0sICJmODZkIiwgIk0xNzQuOSAyNzJjMTAuNyAwIDIwLjcgNS4zIDI2LjYgMTQuMmwxMS44IDE3LjggMjYuNyAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTEyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzNTJjMC0yNi41IDIxLjUtNDggNDgtNDhsMjYuNyAwIDExLjgtMTcuOGM1LjktOC45IDE1LjktMTQuMiAyNi42LTE0LjJsNjEuNyAwem0yNzguNi0xMmM1LjYtNC45IDEzLjktNS4zIDE5LjktLjlzOC4zIDEyLjQgNS4zIDE5LjNMNDQwLjMgMzY4IDQ5NiAzNjhjNi43IDAgMTIuNiA0LjEgMTUgMTAuNHMuNiAxMy4zLTQuNCAxNy43bC0xMjggMTEyYy01LjYgNC45LTEzLjkgNS4zLTE5LjkgLjlzLTguMy0xMi40LTUuMy0xOS4zbDM4LjUtODkuNy01NS44IDBjLTYuNyAwLTEyLjYtNC4xLTE1LTEwLjRzLS42LTEzLjMgNC40LTE3LjdsMTI4LTExMnpNMTQ0IDM2MGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6TTQ4My44IC40YzYuNS0xLjEgMTMuMSAuNCAxOC41IDQuNCA2LjEgNC41IDkuNyAxMS43IDkuNyAxOS4ybDAgMTUyLS4zIDQuOWMtMy4zIDI0LjItMzAuNSA0My4xLTYzLjcgNDMuMS0zNS4zIDAtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4YzUuNSAwIDEwLjkgLjYgMTYgMS42bDAtNDkuMy0xMTIgMzMuNiAwIDExMC4yLS4zIDQuOWMtMy4zIDI0LjItMzAuNSA0My4xLTYzLjcgNDMuMS0zNS4zIDAtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4YzUuNSAwIDEwLjkgLjYgMTYgMS42TDMwNCA3MmMwLTEwLjYgNy0yMCAxNy4xLTIzbDE2MC00OCAyLjctLjZ6TTE4OC45IDBDMjI2IDAgMjU2IDMwIDI1NiA2Ny4xbDAgNi4xYzAgNTYuMS03NS4yIDExMi4xLTExMC4zIDEzNS4zLTEwLjggNy4xLTI0LjYgNy4xLTM1LjQgMC0zNS4xLTIzLjEtMTEwLjMtNzkuMi0xMTAuMy0xMzUuM2wwLTYuMUMwIDMwIDMwIDAgNjcuMSAwIDg4LjIgMCAxMDggOS45IDEyMC43IDI2LjhsNy4zIDkuOCA3LjMtOS44QzE0OCA5LjkgMTY3LjggMCAxODguOSAweiJdCiAgICB9OwogICAgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCA9IGZhSWNvbnM7CiAgICBmYVJ1bGVyVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItdmVydGljYWwiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjU0OCIsICJNMCAxNkMwLTEwLjUgMjEuNS0zMiA0OC0zMmwxNjAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI0LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDU0NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxNnoiXQogICAgfTsKICAgIGZhTWFwTG9jYXRpb25Eb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwLWxvY2F0aW9uLWRvdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJtYXAtbWFya2VkLWFsdCJdLCAiZjVhMCIsICJNNTc2IDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDQxMy41IDc3LjUgMjM0LjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzcwLjggODguOCA2NCA5OS45IDY0IDExMmwwIDM1MmMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTczLjMgNTcuOGMtNC4zLTYuNC04LjUtMTMuMS0xMi42LTE5LjktMTEtMTguMy0yMS45LTM5LjMtMzAtNjEuOGwtMTAxLjItMzMuNyAwLTI4NC41IDEyOCA0Mi43IDAgOTkuM2MzMS0zNS44IDc3LTU4LjQgMTI4LTU4LjQgMjIuNiAwIDQ0LjIgNC40IDY0IDEyLjVMNTc2IDQ4ek01MTIgMjI0Yy02Ni4zIDAtMTIwIDUyLjgtMTIwIDExNy45IDAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOXpNNDcyIDM0NGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdCiAgICB9OwogICAgZmFNYXBNYXJrZWRBbHQgPSBmYU1hcExvY2F0aW9uRG90OwogICAgZmFIZWFydENyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQ4LCAiaGVhcnQtYnJva2VuIl0sICJmN2E5IiwgIk0xMzMuMSAzMmMxNy4zIDAgMzQuMiAzLjQgNDkuOSA5LjdsNTQuOCA4NS4yLTc1LjQgNzUuNGMtMS41IDEuNS0yLjQgMy42LTIuMyA1LjhzMSA0LjIgMi42IDUuN2wxMTIgMTA0YzIuOSAyLjcgNy40IDIuOSAxMC41IC4zczMuOC03IDEuNy0xMC40bC02MC40LTk4LjEgOTAuNy03NS42YzIuNi0yLjEgMy41LTUuNyAyLjQtOC44TDI5Ni40IDYwLjZDMzE5LjYgNDIuMyAzNDguNiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxMTIuMi0xMzkuOSAyNDIuNS0yMTIuOSAyOTguMi0xMi40IDkuNC0yNy42IDE0LjEtNDMuMSAxNC4xcy0zMC44LTQuNi00My4xLTE0LjFDMTM5LjkgNDEwLjIgMCAyNzkuOSAwIDE2Ny43bDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyeiJdCiAgICB9OwogICAgZmFIZWFydEJyb2tlbiA9IGZhSGVhcnRDcmFjazsKICAgIGZhQ293ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODAwNF0sICJmNmM4IiwgIk05NiAyMjRsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTg4LjJjOS45IDYuNiAyMC42IDEyIDMyIDE2LjFsMCAyNC4yYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xNi45YzUuMyAuNiAxMC42IC45IDE2IC45czEwLjctLjMgMTYtLjlsMCAxNi45YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yNC4yYzExLjQtNCAyMi4xLTkuNCAzMi0xNi4xbDAgODguMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwIDMyIDMyIDAgNDkuNWMwIDkuNSAyLjggMTguNyA4LjEgMjYuNkw1MzAgNDI3YzguOCAxMy4xIDIzLjUgMjEgMzkuMyAyMSAyMi41IDAgNDEuOS0xNS45IDQ2LjMtMzhsMjAuMy0xMDEuNmMyLjYtMTMtLjMtMjYuNS04LTM3LjNsLTMuOS01LjUgMC04MS42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQuNC01Mi45LTc0LjFDNDk2IDg2LjUgNDUyLjQgNjQgNDA1LjkgNjRMMTQ0IDY0Qzc3LjcgNjQgMjQgMTE3LjcgMjQgMTg0bDAgNTRDOS40IDI0OS44IDAgMjY3LjggMCAyODhsMCAxNy42YzAgOCA2LjQgMTQuNCAxNC40IDE0LjQgMzEuOCAwIDU3LjYtMjUuOCA1Ny42LTU3LjZMNzIgMTg0YzAtMjQuMyAxMi4xLTQ1LjggMzAuNS01OC45LTQuMiAxMC44LTYuNSAyMi42LTYuNSAzNC45bDAgNjR6TTU2MCAzMzZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHpNMTY2LjYgMTY2LjZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmwxNzguNyAwYzEyLjUgMCAyMi42IDEwLjEgMjIuNiAyMi42IDAgNi0yLjQgMTEuOC02LjYgMTZsLTIzLjQgMjMuNEMzMzIuMiAyMTEuOCAzMDIuNyAyMjQgMjcyIDIyNHMtNjAuMi0xMi4yLTgxLjktMzMuOWwtMjMuNC0yMy40eiJdCiAgICB9OwogICAgZmFSc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZlZWQiXSwgImYwOWUiLCAiTTAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzIgMjI5LjggMCA0MTYgMTg2LjIgNDE2IDQxNiAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkMzODQgMjUzLjYgMjI2LjQgOTYgMzIgOTYgMTQuMyA5NiAwIDgxLjcgMCA2NHpNMCA0MTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0zMiAxNjBjMTU5LjEgMCAyODggMTI4LjkgMjg4IDI4OCAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0LTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUZlZWQgPSBmYVJzczsKICAgIGZhTWFnbmlmeWluZ0dsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjksICJzZWFyY2giXSwgImYwMDIiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6Il0KICAgIH07CiAgICBmYVNlYXJjaCA9IGZhTWFnbmlmeWluZ0dsYXNzOwogICAgZmFDbG91ZE1vb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtbW9vbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNmMzIiwgIk00ODAgMGMxNC42IDAgMjguOCAxLjYgNDIuNSA0LjcgNy40IDEuNyAxMyA3LjggMTMuOSAxNS40cy0zIDE0LjktOS44IDE4LjNjLTQ1LjQgMjIuNi03Ni42IDY5LjUtNzYuNiAxMjMuNiAwIDc2LjIgNjEuOCAxMzggMTM4IDEzOCAzLjcgMCA3LjQtLjEgMTEuMS0uNCA3LjYtLjYgMTQuNyAzLjYgMTcuOCAxMC42czEuNSAxNS4xLTMuOSAyMC40Yy0yNiAyNS01OS4xIDQyLjctOTUuOSA0OS45LTExLjEtMjUuMy0zMC4yLTQ2LjMtNTQuMS01OS44LTcuNi02My40LTYxLjYtMTEyLjYtMTI3LjEtMTEyLjYtMTEuMiAwLTIyLjEgMS41LTMyLjUgNC4yLTQuOC00LjItOS45LTguMi0xNS4yLTExLjgtLjEtMi44LS4yLTUuNi0uMi04LjQgMC0xMDYgODYtMTkyIDE5Mi0xOTJ6bS0uMSA0MzEuOWMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMjcxLjkgMGMtNTMgMC05Ni00My05Ni05NiAwLTQ3LjYgMzQuNi04NyA4MC05NC42LS40LTUyLjggNDIuOS05Ny4zIDk2LTk3LjMgMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjQgMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjQgNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjktLjYgMTEuNy0xLjkgMTcuMiAzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43eiJdCiAgICB9OwogICAgZmFCb3hlc1N0YWNrZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm94ZXMtc3RhY2tlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNjI1LCAiYm94ZXMiLCAiYm94ZXMtYWx0Il0sICJmNDY4IiwgIk0yMjQgMGwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCA1LjUtLjcgMTAuOS0yIDE2bC0yNTIgMGMtMS4zLTUuMS0yLTEwLjUtMi0xNmwwLTEyOGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwem05NiA1MTJjLTExLjIgMC0yMS44LTIuOS0zMS04IDkuNS0xNi41IDE1LTM1LjYgMTUtNTZsMC0xMjhjMC0yMC40LTUuNS0zOS41LTE1LTU2IDkuMi01LjEgMTkuNy04IDMxLThsMzIgMCAwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwek0wIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwIDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzIweiJdCiAgICB9OwogICAgZmFCb3hlcyA9IGZhQm94ZXNTdGFja2VkOwogICAgZmFCb3hlc0FsdCA9IGZhQm94ZXNTdGFja2VkOwogICAgZmFDb2RlQnJhbmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtYnJhbmNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxMjYiLCAiTTgwIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCA3MC43IDE3NiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIuN2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0xNzYgMCAwIDcwLjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MFMwIDQ3Ni4yIDAgNDMyYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNsMC0yMDUuM0MxOS43IDE0MSAwIDExMi44IDAgODAgMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIzMiAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTgwIDQ1NmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYUJhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2ODMsICJjYW5jZWwiXSwgImYwNWUiLCAiTTM2Ny4yIDQxMi41TDk5LjUgMTQ0LjhjLTIyLjQgMzEuNC0zNS41IDY5LjgtMzUuNSAxMTEuMiAwIDEwNiA4NiAxOTIgMTkyIDE5MiA0MS41IDAgNzkuOS0xMy4xIDExMS4yLTM1LjV6bTQ1LjMtNDUuM2MyMi40LTMxLjQgMzUuNS02OS44IDM1LjUtMTExLjIgMC0xMDYtODYtMTkyLTE5Mi0xOTItNDEuNSAwLTc5LjkgMTMuMS0xMTEuMiAzNS41TDQxMi41IDM2Ny4yek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFDYW5jZWwgPSBmYUJhbjsKICAgIGZhSnVnRGV0ZXJnZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImp1Zy1kZXRlcmdlbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTUxOSIsICJNOTYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA5NkM3NC43IDk2IDY0IDg1LjMgNjQgNzJTNzQuNyA0OCA4OCA0OGw4IDAgMC0yNHpNMCAyNTZjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsMTI4IDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI1NnptMjU2IDBsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVJlcGx5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcGx5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE3MTQsICJtYWlsLXJlcGx5Il0sICJmM2U1IiwgIk0yMDQuMiAxOC40YzEyIDUgMTkuOCAxNi42IDE5LjggMjkuNmwwIDgwIDExMiAwYzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgMTEzLjMtODEuNSAxNjMuOS0xMDAuMiAxNzQuMS0yLjUgMS40LTUuMyAxLjktOC4xIDEuOS0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43IDAtNy41IDQuMy0xNC40IDkuOC0xOS41IDkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuNyAwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAgODBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02Ljl6Il0KICAgIH07CiAgICBmYU1haWxSZXBseSA9IGZhUmVwbHk7CiAgICBmYVN1blBsYW50V2lsdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdW4tcGxhbnQtd2lsdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTdhIiwgIk0xNjAgMGMtNS41IDAtMTAuNiAyLjgtMTMuNSA3LjRsLTEuMSAyLjEtMjQuOCA1NS40LTU2LjctMjEuN2MtNS45LTIuMi0xMi41LS44LTE3IDMuN1M0MSA1OCA0My4yIDYzLjlsMjEuNyA1Ni43LTU1LjQgMjQuOEMzLjcgMTQ4IDAgMTUzLjcgMCAxNjBzMy43IDEyIDkuNSAxNC42bDU1LjQgMjQuOC0yMS43IDU2LjdjLTIuMiA1LjktLjggMTIuNSAzLjcgMTdzMTEuMSA1LjkgMTcgMy43bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuOCAyMS43YzUuOSAyLjIgMTIuNSAuOCAxNy0zLjdzNS45LTExLjEgMy43LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43IC43LTIuMmMxLjItNS4zLS40LTEwLjktNC4zLTE0LjhzLTkuNS01LjUtMTQuOC00LjNsLTIuMiAuNy01Ni44IDIxLjctMjQuOC01NS40QzE3MiAzLjcgMTY2LjMgMCAxNjAgMHptMCA5NmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzc2IDE2bDAgNTMuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42IDAgMTYuOCAxNiA0NCAzNy40IDY3LjIgNS44IDYuMiAxNS41IDYuMiAyMS4yIDAgMjEuNC0yMy4zIDM3LjQtNTAuNiAzNy40LTY3LjIgMC0yMS41LTkuMi0zNy0yNC00NC42bDAtNTMuNGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDIyLjdjLTkuOC00LjMtMjAuNi02LjctMzItNi43LTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjEuNGMtMTQuOCA3LjYtMjQgMjMuMS0yNCA0NC42IDAgMTYuOCAxNiA0NCAzNy40IDY3LjIgNS44IDYuMiAxNS41IDYuMiAyMS4yIDAgMjEuNC0yMy4zIDM3LjQtNTAuNiAzNy40LTY3LjIgMC0yMS41LTkuMi0zNy0yNC00NC42bDAtMjEuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2LTQyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMDQgMCAwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFCYWN0ZXJpdW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFjdGVyaXVtIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNWEiLCAiTTQwOCAxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMzNjAgMi43IDM2MCAxNmwwIDIzLjRjLTEzLjkgNS4zLTI2LjkgMTMuNS0zOC4yIDI0LjVMMzA1IDQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOC0zMC4xIDMwLjEtMTYuOC0xNi44Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOGMtMTAgMTAtMjAgMjAtMzAuMSAzMC4xTDE3NyAxNzVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44LTMwLjEgMzAuMS0xNi44LTE2LjhjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44Yy0xMSAxMS4zLTE5LjIgMjQuMy0yNC41IDM4LjJMNDggMzI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2LjMgMGMxLjMgMTguMyA3LjEgMzYuNCAxNy40IDUyLjRMNzEgNDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTAuNi0xMC42YzE2IDEwLjMgMzQuMSAxNi4xIDUyLjQgMTcuNGwwIDE2LjNjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIzLjRjMTMuOS01LjMgMjYuOS0xMy41IDM4LjItMjQuNUwyNzEgNDY1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44IDMwLjEtMzAuMSAxNi44IDE2LjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjhjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM5OSAzMzdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjggMzAuMS0zMC4xIDE2LjggMTYuOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOGMxMS0xMS4zIDE5LjItMjQuMyAyNC41LTM4LjJsMjMuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNi4zIDBjLTEuMy0xOC4zLTcuMS0zNi40LTE3LjQtNTIuNEw1MDUgNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw0NjAuNCA0OS43Yy0xNi0xMC4zLTM0LjEtMTYuMS01Mi40LTE3LjRMNDA4IDE2ek0xNjAgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTI3MiAyNDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFSZWNvcmRWaW55bCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWNvcmQtdmlueWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhkOSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2LTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0wIDI0MGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTEyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmxvcHB5RGlzazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxvcHB5LWRpc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTAsIDEyODQyNiwgInNhdmUiXSwgImYwYzciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDIuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNTIgNTAuN0MzNDAgMzguNyAzMjMuNyAzMiAzMDYuNyAzMkw2NCAzMnptMzIgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjR6TTIyNCAyODhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVNhdmUyID0gZmFGbG9wcHlEaXNrMjsKICAgIGZhVG9pbGV0c1BvcnRhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldHMtcG9ydGFibGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4NCIsICJNNjQgMGw5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMjI0IDAgMC0xNkMwIDI4LjcgMjguNyAwIDY0IDB6TTAgMTI4bDIyNCAwIDAgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjggMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA1MDEuMyAwIDQ4OEwwIDEyOHpNMTI4IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzUyIDBsOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTIyNCAwIDAtMTZjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTI4OCAxMjhsMjI0IDAgMCAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyOCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTM2MHpNNDE2IDI0OGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0IDAgMC05Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhTyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTExXSwgIjRmIiwgIk0yMjQgOTZhMTYwIDE2MCAwIDEgMCAwIDMyMCAxNjAgMTYwIDAgMSAwIDAtMzIwek00NDggMjU2YTIyNCAyMjQgMCAxIDEgLTQ0OCAwIDIyNCAyMjQgMCAxIDEgNDQ4IDB6Il0KICAgIH07CiAgICBmYVBhbGV0dGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFsZXR0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkxMl0sICJmNTNmIiwgIk01MTIgMjU2YzAgLjkgMCAxLjggMCAyLjctLjQgMzYuNS0zMy42IDYxLjMtNzAuMSA2MS4zTDM0NCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgMy40IC40IDYuNyAxIDkuOSAyLjEgMTAuMiA2LjUgMjAgMTAuOCAyOS45IDYuMSAxMy44IDEyLjEgMjcuNSAxMi4xIDQyIDAgMzEuOC0yMS42IDYwLjctNTMuNCA2Mi0zLjUgLjEtNyAuMi0xMC42IC4yLTE0MS40IDAtMjU2LTExNC42LTI1Ni0yNTZTMTE0LjYgMCAyNTYgMCA1MTIgMTE0LjYgNTEyIDI1NnpNMTI4IDI4OGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjg4IDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhVW5sb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVubG9jayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3NV0sICJmMDljIiwgIk0xMjggOTZjMC0zNS4zIDI4LjctNjQgNjQtNjQgMzEuNyAwIDU4IDIzIDYzLjEgNTMuMyAyLjkgMTcuNCAxOS40IDI5LjIgMzYuOSAyNi4zczI5LjItMTkuNCAyNi4zLTM2LjlDMzA4LjEgMTQuMSAyNTUuNS0zMiAxOTItMzIgMTIxLjMtMzIgNjQgMjUuMyA2NCA5NmwwIDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NGwtMTkyIDAgMC02NHoiXQogICAgfTsKICAgIGZhRWFyTGlzdGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhci1saXN0ZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXNzaXN0aXZlLWxpc3RlbmluZy1zeXN0ZW1zIl0sICJmMmEyIiwgIk0zNzkuNiAuM2MtOC45IDEuMi0xNy4yIDYuMi0yMi40IDE0LjEtNi44IDEwLjQtNyAyNC4xLS40IDM0LjYgNS42IDguOSAxNS41IDEyLjcgMjMuOCAxOC41IDcuNSA1LjIgMTcuNiAxMy4yIDI3LjcgMjQuMiAyMCAyMS43IDM5LjUgNTQuMyAzOS41IDEwMC4zIDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02Ni0yOC41LTExMy40LTU2LjUtMTQzLjctMTMuOS0xNS4xLTI3LjgtMjYuMS0zOC4zLTMzLjMtMTEtNy42LTIzLjUtMTYuNi0zNy42LTE0Ljd6TTI0MCAxMjhjLTU3LjYgMC0xMDUuMSA0My42LTExMS4zIDk5LjUtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM2M5LjctODggODQuMy0xNTYuNSAxNzQuOS0xNTYuNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdsMCA2LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTItMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTYuMWMwLTMyLjkgMTcuNC01OS42IDM0LjQtNzggMTguNC0yMCAyOS42LTQ2LjYgMjkuNi03NS45IDAtNjEuOS01MC4xLTExMi0xMTItMTEyek0wIDQ4MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjAtOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek04Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpNMjQwIDIwOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcyA9IGZhRWFyTGlzdGVuOwogICAgZmFDb2RlUHVsbFJlcXVlc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1wdWxsLXJlcXVlc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTEzYyIsICJNMzI4IDI0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlMyOTMuOSAuMiAyODcgN0wyMzEgNjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU2IDU2YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTMzI4IDE0NS43IDMyOCAxMzZsMC0yNCAyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjE0LjdjLTI4LjMgMTIuMy00OCA0MC41LTQ4IDczLjMgMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zTDQ0OCAxNDRjMC01My00My05Ni05Ni05NmwtMjQgMCAwLTI0ek03MiA4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem01NiA3My4zYzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBTMTYgMzUuOCAxNiA4MGMwIDMyLjggMTkuNyA2MSA0OCA3My4zbDAgMjA1LjNjLTI4LjMgMTIuMy00OCA0MC41LTQ4IDczLjMgMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtMjA1LjN6TTcyIDQzMmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0zNDQtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFLZXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2V5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjczXSwgImYwODQiLCAiTTMzNiAzNTJjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZTNDMzLjIgMCAzMzYgMCAxNjAgNzguOCAxNjAgMTc2YzAgMTguNyAyLjkgMzYuOCA4LjMgNTMuN0w3IDM5MWMtNC41IDQuNS03IDEwLjYtNyAxN2wwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGM2LjQgMCAxMi41LTIuNSAxNy03bDMzLjMtMzMuM2MxNi45IDUuNCAzNSA4LjMgNTMuNyA4LjN6TTM3NiA5NmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVNrdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNrdWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTI4XSwgImY1NGMiLCAiTTQxNiA0MjcuNGM1OC41LTQ0IDk2LTExMS42IDk2LTE4Ny40IDAtMTMyLjUtMTE0LjYtMjQwLTI1Ni0yNDBTMCAxMDcuNSAwIDI0MGMwIDc1LjggMzcuNSAxNDMuNCA5NiAxODcuNEw5NiA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA2NCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNi42ek05NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0yNTYtNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2VVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLXN0cm9rZS11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4OTYsICJtYXJzLXN0cm9rZS12Il0sICJmMjJhIiwgIk0xOTIgMjU2YTExMiAxMTIgMCAxIDAgMCAyMjQgMTEyIDExMiAwIDEgMCAwLTIyNHpNMTYgMzY4YzAtODYuMyA2Mi4xLTE1OC4xIDE0NC4xLTE3My4xLS4xLS45LS4xLTEuOS0uMS0yLjlsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02MS40LTI4IDIyLjRjLTEzLjggMTEtMzMuOSA4LjgtNDUtNXMtOC44LTMzLjkgNS00NWw4MC02NGMxMS43LTkuMyAyOC4zLTkuMyA0MCAwbDgwIDY0YzEzLjggMTEgMTYgMzEuMiA1IDQ1cy0zMS4yIDE2LTQ1IDVsLTI4LTIyLjQgMCA2MS40IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxNmMwIDEgMCAxLjktLjEgMi45IDgyIDE1IDE0NC4xIDg2LjggMTQ0LjEgMTczLjEgMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMTYgNDY1LjIgMTYgMzY4eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlViA9IGZhTWFyc1N0cm9rZVVwOwogICAgZmFGaXJlRmxhbWVTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZS1mbGFtZS1zaW1wbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYnVybiJdLCAiZjQ2YSIsICJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42IDAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41IDAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6Il0KICAgIH07CiAgICBmYUJ1cm4gPSBmYUZpcmVGbGFtZVNpbXBsZTsKICAgIGZhVHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzk0XSwgImYxYmIiLCAiTTIyNC0zMmM3IDAgMTMuNyAzLjEgMTguMyA4LjVsMTM2IDE2MGM2LjEgNy4xIDcuNCAxNy4xIDMuNSAyNS42UzM2OS40IDE3NiAzNjAgMTc2bC0yNC45IDAgNzUuMiA4OC41YzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTNDAxLjQgMzA0IDM5MiAzMDRsLTM4LjUgMCA4OC44IDEwNC41YzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTNDMzLjQgNDQ4IDQyNCA0NDhsLTE2OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC0xNjggMGMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNkw5NC41IDMwNCA1NiAzMDRjLTkuNCAwLTE3LjktNS40LTIxLjgtMTMuOXMtMi42LTE4LjUgMy41LTI1LjZMMTEyLjkgMTc2IDg4IDE3NmMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNmwxMzYtMTYwQzIxMC4zLTI4LjkgMjE3LTMyIDIyNC0zMnoiXQogICAgfTsKICAgIGZhU21vZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbW9nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3NWYiLCAiTTE3NiAyODhDOTYuNSAyODggMzIgMjIzLjUgMzIgMTQ0Uzk2LjUgMCAxNzYgMGMyNy4yIDAgNTIuNiA3LjUgNzQuMyAyMC42IDIwLjEtMTMgNDQtMjAuNiA2OS43LTIwLjYgNDcuNCAwIDg4LjcgMjUuNyAxMTAuOSA2NGwxLjEgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMiAwIDYwLjMtNDcuNiAxMDkuNC0xMDcuMiAxMTEuOS0yMi42IDIwLTUyLjMgMzIuMS04NC44IDMyLjEtMzIuNSAwLTYyLjEtMTIuMS04NC43LTMyTDE3NiAyODh6TTUxMiAzOTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRMMjQgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0ek04OCA0NjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMTc2IDBsMjg4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI4OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInMiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMTVdLCAiNTMiLCAiTTAgMTU3LjVDMCA4OC4yIDU2LjIgMzIgMTI1LjUgMzJMMjcyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDEyNS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MUwyMTAuMSAyMzBDMjcyLjkgMjM3LjkgMzIwIDI5MS4yIDMyMCAzNTQuNSAzMjAgNDIzLjggMjYzLjggNDgwIDE5NC41IDQ4MEw0OCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ2LjUgMGMzNCAwIDYxLjUtMjcuNSA2MS41LTYxLjUgMC0zMS0yMy4xLTU3LjItNTMuOS02MUwxMDkuOSAyODJDNDcuMSAyNzQuMSAwIDIyMC44IDAgMTU3LjV6Il0KICAgIH07CiAgICBmYUplZGkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamVkaSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjY5IiwgIk0yNDYgMzE1LjdsLTIxLjItMzEuOWMtMi4xLTMuMi0xLjctNy40IDEtMTAuMXM2LjktMy4xIDEwLjEtMWwyOS41IDE5LjdjMi4xIDEuNCA0LjktLjEgNS0yLjZMMjc5LjcgOGMuMS00LjUgMy44LTggOC4zLThzOC4xIDMuNSA4LjMgOGw5LjQgMjgxLjljLjEgMi41IDIuOSAzLjkgNSAyLjZsMjkuNS0xOS43YzMuMi0yLjEgNy40LTEuNyAxMC4xIDFzMy4xIDYuOSAxIDEwLjFMMzMwIDMxNS43Yy0xLjMgMS45LS4yIDQuNSAyIDQuOWwzNy42IDcuNWMzLjcgLjcgNi40IDQgNi40IDcuOHMtMi43IDcuMS02LjQgNy44TDMzMiAzNTEuNGMtMi4yIC40LTMuMyAzLTIgNC45bDIxLjIgMzEuOWMyLjEgMy4yIDEuNyA3LjQtMSAxMC4xcy02LjkgMy4xLTEwLjEgMWwtMjYuMy0xNy42Yy0yLjItMS40LTUuMSAuMi01IDIuOGwyLjEgNjEuNWM1OS44LTEwLjggMTA1LjEtNjMuMSAxMDUuMS0xMjYgMC0zNy0xNS43LTcwLjQtNDAuOC05My43LTctNi41LTYuNS0xOC42IDEtMjQuNCAzNC0yNi4zIDU1LjgtNjcuNSA1NS44LTExMy45IDAtMTYuOC0yLjktMzMtOC4yLTQ4LTQuNi0xMyAxMC4yLTMwIDIxLjQtMjIgNTMuNSAzOCA5Mi43IDk0LjggMTA3LjggMTYwLjcgLjUgMi4xLS4yIDQuMy0xLjcgNS45bC0yOC40IDI4LjRjLTQgNC0xLjIgMTAuOSA0LjUgMTAuOWwyNiAwYzMuNCAwIDYuMiAyLjYgNi4zIDYgLjEgMy4zIC4yIDYuNiAuMiAxMCAwIDE3LjUtMS43IDM0LjctNC44IDUxLjMtLjIgMS4yLS45IDIuNC0xLjcgMy4zbC00Ni41IDQ2LjVjLTQgNC0xLjIgMTAuOSA0LjUgMTAuOWwxNC42IDBjNC42IDAgNy43IDQuOCA1LjcgOS00NC41IDg5LjUtMTM2LjkgMTUxLTI0My43IDE1MVM4OC44IDQ1MC41IDQ0LjMgMzYxYy0yLjEtNC4yIDEtOSA1LjctOWwxNC42IDBjNS43IDAgOC42LTYuOSA0LjUtMTAuOUwyMi42IDI5NC42Yy0uOS0uOS0xLjUtMi0xLjctMy4zLTMuMi0xNi42LTQuOC0zMy44LTQuOC01MS4zIDAtMy4zIC4xLTYuNyAuMi0xMCAuMS0zLjQgMi45LTYgNi4zLTZsMjYgMGM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDI0LjYgMTg0LjZjLTEuNS0xLjUtMi4yLTMuOC0xLjctNS45IDE1LjItNjYgNTQuMy0xMjIuOCAxMDcuOC0xNjAuNyAxMS4zLTggMjYgOC45IDIxLjQgMjItNS4zIDE1LTguMiAzMS4yLTguMiA0OCAwIDQ2LjMgMjEuOSA4Ny41IDU1LjggMTEzLjkgNy41IDUuOCA4IDE3LjkgMSAyNC40LTI1LjEgMjMuNC00MC44IDU2LjctNDAuOCA5My43IDAgNjIuOSA0NS40IDExNS4yIDEwNS4xIDEyNmwyLjEtNjEuNWMuMS0yLjYtMi44LTQuMi01LTIuOGwtMjYuMyAxNy42Yy0zLjIgMi4xLTcuNCAxLjctMTAuMS0xcy0zLjEtNi45LTEtMTAuMUwyNDYgMzU2LjNjMS4zLTEuOSAuMi00LjUtMi00LjlsLTM3LjYtNy41Yy0zLjctLjctNi40LTQtNi40LTcuOHMyLjctNy4xIDYuNC03LjhsMzcuNi03LjVjMi4yLS40IDMuMy0zIDItNC45eiJdCiAgICB9OwogICAgZmFQZXJzb25IaWtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWhpa2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoaWtpbmciXSwgImY2ZWMiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTI4IDE3My42YzAtMzQgMjcuNi02MS42IDYxLjYtNjEuNiAyMC4zIDAgMzkuNyA4LjEgNTQgMjIuNGw0OC4yIDQ4LjJjNiA2IDE0LjEgOS40IDIyLjYgOS40bDM3LjUgMGM1LjggMCAxMS4zIDEuNiAxNiA0LjNsMC03Ni4zYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNjguM2MtNC43IDIuNy0xMC4yIDQuMy0xNiA0LjNsLTM3LjUgMGMtMjUuNSAwLTQ5LjktMTAuMS02Ny45LTI4LjFsLTYuNi02LjYgMCAxMDkuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNsMTIuNiA4OC4xYzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4ybC0xMi42LTg4LjFjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTEwMXptLTQuOCAyMDMuN2MyLjMgMi4zIDQuNyA0LjQgNy4xIDYuNWw0NC45IDM4LjVjLTMuNiA4LjQtOC41IDE2LjMtMTQuNCAyMy40TDg4LjYgNTMyLjVjLTExLjMgMTMuNi0zMS41IDE1LjQtNDUuMSA0LjFzLTE1LjQtMzEuNS00LjEtNDUuMWw3Mi4zLTg2LjdjMi42LTMuMSA0LjUtNi42IDUuOC0xMC40bDUuNy0xNy4xek0wIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NCAxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnoiXQogICAgfTsKICAgIGZhSGlraW5nID0gZmFQZXJzb25IaWtpbmc7CiAgICBmYUFycm93c1VwVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy11cC10by1saW5lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0YzIiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJTNDMzLjcgMCA0MTYgMEwzMiAwem04Ni42IDEzNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNjQgMjM3LjMgNjQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDIuNyA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0em0yNTYgMGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAyNDIuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQyLjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHoiXQogICAgfTsKICAgIGZhTWFyc0RvdWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLWRvdWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTFdLCAiZjIyNyIsICJNMjg4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy05NSA5NWMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44IDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzAgNDAxLjIgMCAzMDQgNzguOCAxMjggMTc2IDEyOGMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDk1LTk1LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE3NiA0MTZhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0xNjAgNjRjLTYuOCAwLTEzLjQtLjQtMjAtMS4xIDIzLjYtMTguOSA0My4zLTQyLjUgNTcuNi02OS40IDQzLjMtMTUuNSA3NC40LTU2LjkgNzQuNC0xMDUuNSAwLTI1LjItOC4zLTQ4LjUtMjIuNC02Ny4yIDcuMSAyLjEgMTQuNiAzLjIgMjIuNCAzLjIgMTcgMCAzMi43LTUuMyA0NS43LTE0LjMgMTEuNyAyMy42IDE4LjMgNTAuMiAxOC4zIDc4LjMgMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZ6TTUyOCAxNTcuM0w1MjggMzJjMC0xMS40LTIuNC0yMi4yLTYuNy0zMkw2MDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctNDggNDh6Il0KICAgIH07CiAgICBmYVRoZXJtb21ldGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRoZXJtb21ldGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0OTEiLCAiTTk2IDM4Mi4xbDAtODguOGMwLTE0LjkgNS45LTI5LjEgMTYuNC0zOS42bDIxLjctMjEuNyA0MSA0MWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQxLTQxIDQ2LjEtNDYuMSA0MSA0MWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQxLTQxIDQ2LjEtNDYuMSA0MSA0MWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQxLTQxIDcuOC03LjhjMTkuNC0xOS40IDQ1LjYtMzAuMiA3My0zMC4yIDU3IDAgMTAzLjIgNDYuMiAxMDMuMiAxMDMuMiAwIDI3LjQtMTAuOSA1My42LTMwLjIgNzNMMjU4LjMgMzk5LjZjLTEwLjUgMTAuNS0yNC43IDE2LjQtMzkuNiAxNi40bC04OC44IDAtODkgODljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwUy0yLjMgNDgwLjQgNyA0NzFsODktODl6Il0KICAgIH07CiAgICBmYVBhaW50YnJ1c2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFpbnRicnVzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODM5NiwgInBhaW50LWJydXNoIl0sICJmMWZjIiwgIk00ODAuNSAxMC4zTDI1OS4xIDE1OGMtMjkuMSAxOS40LTQ3LjYgNTAuOS01MC42IDg1LjMgNjIuMyAxMi44IDExMS40IDYxLjkgMTI0LjMgMTI0LjMgMzQuNS0zIDY1LjktMjEuNSA4NS4zLTUwLjZMNTY1LjcgOTUuNWM2LjctMTAuMSAxMC4zLTIxLjkgMTAuMy0zNC4xIDAtMzMuOS0yNy41LTYxLjQtNjEuNC02MS40LTEyLjEgMC0yNCAzLjYtMzQuMSAxMC4zek0yODggNDAwYzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzY0IDMzOC4xIDY0IDQwMGMwIDMuOSAuMiA3LjggLjYgMTEuNiAxLjggMTcuNS0xMC4yIDM2LjQtMjcuOCAzNi40TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNDQgMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnoiXQogICAgfTsKICAgIGZhUGFpbnRCcnVzaCA9IGZhUGFpbnRicnVzaDsKICAgIGZhTmV1dGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5ldXRlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk5MDZdLCAiZjIyYyIsICJNODAgMTc2YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTIyMy45IDM0OS4xQzMwNS45IDMzNC4xIDM2OCAyNjIuMyAzNjggMTc2IDM2OCA3OC44IDI4OS4yIDAgMTkyIDBTMTYgNzguOCAxNiAxNzZjMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0LjEgMTczLjEtLjEgMS0uMSAxLjktLjEgMi45bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC0xIDAtMS45LS4xLTIuOXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGhvbmVGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waG9uZS1mbGlwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBob25lLXNxdWFyZS1hbHQiXSwgImY4N2IiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTIzMiA5Ni43bDIuOCAuOGMzMi4zIDguOCA1OS45IDQwLjEgNTEuOCA3OC4yLTE4LjUgODcuNS04Ny40IDE1Ni4zLTE3NC45IDE3NC45LTM4LjEgOC4xLTY5LjQtMTkuNS03OC4yLTUxLjhsLS44LTIuOGMtMi43LTkuOCAyLjQtMjAuMSAxMS44LTI0bDQ4LjctMjAuM2M4LjMtMy40IDE3LjgtMS4xIDIzLjUgNS45bDE5LjMgMjMuNmMzNS4xLTE3LjQgNjMuNC00Ni42IDc5LjYtODIuNGwtMjIuMS0xOGMtNi45LTUuNy05LjMtMTUuMi01LjktMjMuNWwyMC4zLTQ4LjdjMy45LTkuNCAxNC4yLTE0LjQgMjQtMTEuOHoiXQogICAgfTsKICAgIGZhUGhvbmVTcXVhcmVBbHQgPSBmYVNxdWFyZVBob25lRmxpcDsKICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQxLCAiZ3Jpbi10b25ndWUtc3F1aW50Il0sICJmNThhIiwgIk0wIDI1NmMwIDEwNC40IDYyLjUgMTk0LjIgMTUyLjIgMjM0LjEtNS4zLTEzLTguMi0yNy4yLTguMi00Mi4xbDAtNjEuN2MtMTYuOS0xNi41LTMwLjEtMzYuNy0zOC4zLTU5LjMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xYzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS04LjMgMjIuNi0yMS41IDQyLjgtMzguMyA1OS4zbDAgNjEuN2MwIDE0LjktMi45IDI5LjEtOC4yIDQyLjEgODkuNy0zOS44IDE1Mi4yLTEyOS42IDE1Mi4yLTIzNC4xIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMCAxMTQuNiAwIDI1NnptMTI1LjgtOTEuN2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXMxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjN6bTI2My42LTIxLjFjNC41IDYuOCAzLjEgMTUuOS0zLjEgMjEuMUwzNTMgMTkyIDM4Ni4yIDIxOS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41ek0zMjAgNDQ4bDAtNDUuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDQ1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVNxdWludDIgPSBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MjsKICAgIGZhQ29tbWVudERvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjUxIiwgIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHptNC0zNTJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYUhpcHBvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhpcHBvIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDM1XSwgImY2ZWQiLCAiTTQwNyA0N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNy4yIDE3LjJjMS45LS4xIDMuOS0uMiA1LjgtLjJsMzIgMGMxMS4yIDAgMjEuOSAyLjMgMzEuNiA2LjVMNTQzIDU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw1NjQgMTAxLjljNy42IDEyLjIgMTIgMjYuNyAxMiA0Mi4xIDAgMTAuMiA3LjQgMTguOCAxNi43IDIzIDI3LjkgMTIuNSA0Ny4zIDQwLjUgNDcuMyA3MyAwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNi02NCAwIDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNy42Yy0xMS44LTIuNC0yMi43LTcuNC0zMi0xNC40LTEuNS0xLjEtMi45LTIuMy00LjMtMy41LTE3LTE0LjctMjcuNy0zNi40LTI3LjctNjAuNSAwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmMwIDQ0LjcgMjYuMiA4My4yIDY0IDEwMS4ybDAgMTAuOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzZjLTE5LjggNy43LTQxLjQgMTItNjQgMTJzLTQ0LjItNC4zLTY0LTEybDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTE4LjktMTguMSA0MC43Yy01LjQgMTIuMS0xOS42IDE3LjYtMzEuNyAxMi4yUy0zLjMgMzYyLjQgMi4xIDM1MC4zTDI0IDMwMC45YzUuMy0xMS45IDgtMjQuNyA4LTM3LjcgMC0xMDcuNSA4NS4yLTE5NS4yIDE5MS44LTE5OS4xbC4yLS4xIDY0IDBjNDEuNyAwIDgzLjQgMTIuMSAxMTcuMiAyNS43IDEuNy0xLjggMy41LTMuNiA1LjMtNS4yTDQwNyA4MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bTczIDE4NWEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem04OCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTQ4MCAxNDRhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFCb3dsRm9vZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3dsLWZvb2QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRjNiIsICJNMCAxNzZjMC0zNS4zIDI4LjctNjQgNjQtNjQgLjUgMCAxLjEgMCAxLjYgMCA3LjQtMzYuNSAzOS43LTY0IDc4LjQtNjQgMTUgMCAyOSA0LjEgNDAuOSAxMS4yIDEzLjMtMjUuNyA0MC4xLTQzLjIgNzEuMS00My4yczU3LjggMTcuNiA3MS4xIDQzLjJjMTItNy4xIDI2LTExLjIgNDAuOS0xMS4yIDM4LjcgMCA3MSAyNy41IDc4LjQgNjQgLjUgMCAxLjEgMCAxLjYgMCAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDExLjctMy4xIDIyLjYtOC42IDMyTDguNiAyMDhDMy4xIDE5OC42IDAgMTg3LjcgMCAxNzZ6TTAgMjgzLjRDMCAyNjguMyAxMi4zIDI1NiAyNy40IDI1Nmw0NTcuMSAwYzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40IDAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhsLTIzMS41IDBjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40eiJdCiAgICB9OwogICAgZmFTcXVhcmVWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdmlydXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU3OCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMTYwIDgwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTkyIDI0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUNsb3VkU3VuUmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zdW4tcmFpbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzc4Ml0sICJmNzQzIiwgIk0yNTQuOSA0NDguMmM0LjItMTIuNiAxNy44LTE5LjQgMzAuMy0xNS4yIDEyLjYgNC4yIDE5LjQgMTcuOCAxNS4yIDMwLjRsLTIxLjQgNjQuMWMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMnMtMTkuNC0xNy44LTE1LjItMzAuM2wyMS40LTY0LjJ6bTEyMCAwYzQuMi0xMi42IDE3LjgtMTkuNCAzMC4zLTE1LjIgMTIuNiA0LjIgMTkuNCAxNy44IDE1LjIgMzAuNGwtMjEuNCA2NC4xYy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4ycy0xOS40LTE3LjgtMTUuMi0zMC4zbDIxLjQtNjQuMnptMTIwIDBjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjMtMTUuMiAxMi42IDQuMiAxOS40IDE3LjggMTUuMiAzMC40bC0yMS40IDY0LjFjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJzLTE5LjQtMTcuOC0xNS4yLTMwLjNsMjEuNC02NC4yek00NDguMyAxMjhjNDQuMiAwIDgwIDM1LjggODAgODAgMCA3LjUtMS4xIDE0LjctMyAyMS41IDI5LjggMTEuNiA1MSA0MC42IDUxIDc0LjUgMCA0NC4yLTM1LjggODAtODAgODBsLTE5MiAwLTguMi0uNGMtNDAuMy00LjEtNzEuOC0zOC4yLTcxLjgtNzkuNiAwLTM5IDI3LjktNzEuNSA2NC45LTc4LjUtLjUtMy4xLS45LTYuMi0uOS05LjUgMC0zMC45IDI1LjEtNTYgNTYtNTYgMTIuNCAwIDIzLjkgNC4xIDMzLjIgMTAuOSAxMy40LTI1LjUgNDAuMS00Mi45IDcwLjgtNDIuOXpNMjQwLjMtMzEuOGM1LjMgMCAxMC4zIDIuNyAxMy4zIDcuMWw0Ny4zIDcwLjQgODMuMy0xNi4zYzUuMi0xIDEwLjYgLjcgMTQuMyA0LjQgMy44IDMuOCA1LjQgOS4yIDQuNCAxNC40bC04LjYgNDMuOGMtMTEuOSA1LjUtMjIuOCAxMi45LTMyLjQgMjEuNi01LjctMS0xMS43LTEuNS0xNy43LTEuNS0xNC4zIDAtMjggMy00MC40IDguMi0xNi45LTE1LTM5LjItMjQuMi02My42LTI0LjItNTMgMC05NiA0My05NiA5NiAwIDMwLjkgMTQuNiA1OC4yIDM3LjIgNzUuOC0zLjQgMTEuNS01LjIgMjMuNi01LjIgMzYuMiAwIDEzLjIgMiAyNS45IDUuNyAzNy45bC0yLjQtMy41LTgzLjIgMTYuM2MtNS4yIDEtMTAuNi0uNy0xNC4zLTQuNC0zLjgtMy44LTUuNC05LjItNC40LTE0LjRsMTYuMy04My4zLTcwLjQtNDcuNGMtNC40LTMtNy4xLTgtNy4xLTEzLjMgMC01LjMgMi42LTEwLjMgNy0xMy4ybDcwLjQtNDcuNC0xNi4zLTgzLjItLjItMmMtLjMtNC42IDEuMy05LjEgNC42LTEyLjQgMy44LTMuOCA5LjItNS40IDE0LjQtNC40bDgzLjIgMTYuMyA0Ny4zLTcwLjQgMS4yLTEuNmMzLTMuNSA3LjQtNS41IDEyLjEtNS41em0wIDE3NS44YzguNiAwIDE2LjYgMi4zIDIzLjYgNi4yLTkuNyAxMS45LTE2LjkgMjUuOS0yMC43IDQxLjMtMTUgOC4xLTI4LjIgMTkuMi0zOC44IDMyLjMtNy41LTguNS0xMi4yLTE5LjYtMTIuMi0zMS44IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctcmlnaHQiXSwgImYxNzgiLCAiTTU2Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0NjYuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDQzNC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd1JpZ2h0ID0gZmFBcnJvd1JpZ2h0TG9uZzsKICAgIGZhQnVpbGRpbmdVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy11biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGQ5IiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjcyLTExMiAwYy0yMC45IDAtMzkuNSAxMC4xLTUxLjIgMjUuNi04LTYtMTgtOS42LTI4LjgtOS42LTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjQgNjQgMCAwIDQ4LTE0NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjcuNCAzODAuNWM5LTIuMSAxOC4zIDIuMiAyMi41IDEwLjVsMjYuMSA1Mi4yIDAtNDMuM2MwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDEyOGMwIDkuMy02LjQgMTcuMy0xNS40IDE5LjVzLTE4LjMtMi4yLTIyLjUtMTAuNUw0NTIgNDg0LjcgNDUyIDUyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC05LjMgNi40LTE3LjMgMTUuNC0xOS41ek0zMjQgNDAwbDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwbDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVMb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtbG93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NmIiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00NjQgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzUyIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHoiXQogICAgfTsKICAgIGZhRG9vck9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9vci1vcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MmIiLCAiTTI4OCA2NGw2NCAwIDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTk2IDAgMCAwLTE2MCAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDE2ek0xNjAgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUFsaWduTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMzYiLCAiTTI4OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhbWVyYTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIyNTgsICJjYW1lcmEtYWx0Il0sICJmMDMwIiwgIk0xNDkuMSA2NC44TDEzOC43IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNzQuNyAwLTEwLjQtMzEuMkMzNTYuNCA0NS4yIDMzOC4xIDMyIDMxNy40IDMyTDE5NC42IDMyYy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjh6TTI1NiAxOTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUNhbWVyYUFsdDIgPSBmYUNhbWVyYTI7CiAgICBmYVVzZXJzUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yYXlzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OTMiLCAiTTMxLTMzQzIxLjctMjMuNiAyMS43LTguNCAzMSAxTDg3IDU3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw2NS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTYwOS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNTE5IDIzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMNjA5IDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6TTY1IDU0NWw1Ni01NmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDMxIDUxMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwem01NDQgMGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTMyMCAyMDhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTAgMzJjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEybDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLThjMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTIxNi04MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTQ1MS4yIDI2MC40QzQ2OS40IDI4Ni4zIDQ4MCAzMTcuOSA0ODAgMzUybDAgOGMwIDguNC0xLjQgMTYuNS00LjEgMjRsNzguOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTMtNDMtOTYtOTYtOTYtMTAgMC0xOS43IDEuNS0yOC44IDQuNHptLTI2Mi40IDBjLTkuMS0yLjktMTguOC00LjQtMjguOC00LjQtNTMgMC05NiA0My05NiA5NmwwIDEwLjdjMCAxMS44IDkuNiAyMS4zIDIxLjMgMjEuM2w3OC44IDBjLTIuNy03LjUtNC4xLTE1LjYtNC4xLTI0bDAtOGMwLTM0LjEgMTAuNi02NS43IDI4LjgtOTEuNnpNMjE2IDE2MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6Il0KICAgIH07CiAgICBmYVJhaW5ib3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFpbmJvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzc1Ml0sICJmNzViIiwgIk0zMjAgOTZDMTc4LjYgOTYgNjQgMjEwLjYgNjQgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0MzMuNyAwIDQxNmwwLTY0QzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyUzY0MCAxNzUuMyA2NDAgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NEM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDExMmMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHpNMjg4IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVNpdGVtYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2l0ZW1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGU4IiwgIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04IDAgMCA2NCAxMjAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjAgMCAwIDgwIDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTgwLTEyMCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMzkuOCAzMi4yLTcyIDcyLTcybDEyMCAwIDAtNjQtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblN0YXJzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3RhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsICJncmluLXN0YXJzIl0sICJmNTg3IiwgIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTYgMC0yNC40LTMuNC00OC4xLTkuOC03MC41IDE4LjYtMzYuMS0yLjctODMuNi00Ni43LTkwLTQ2LjktNTguMy0xMTguOS05NS41LTE5OS41LTk1LjVTMTAzLjQgMzcuMyA1Ni41IDk1LjVjLTQ0IDYuNC02NS4zIDUzLjktNDYuNyA5MC02LjQgMjIuNC05LjggNDYtOS44IDcwLjUgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6bS0zMS42LTIzMWM1LjMtMTAuNyAyMC41LTEwLjcgMjUuOCAwbDIwLjkgNDIuNCA0Ni43IDYuOGMxMS44IDEuNyAxNi41IDE2LjIgOCAyNC41bC0zMy44IDMzIDggNDYuNmMyIDExLjctMTAuMyAyMC43LTIwLjkgMTUuMmwtNDEuOC0yMi00MS44IDIyYy0xMC41IDUuNS0yMi45LTMuNC0yMC45LTE1LjJsOC00Ni42LTMzLjgtMzNjLTguNS04LjMtMy44LTIyLjggOC0yNC41bDQ2LjctNi44IDIwLjktNDIuNHptLTE5OC4yIDBsMjAuOSA0Mi40IDQ2LjcgNi44YzExLjggMS43IDE2LjUgMTYuMiA4IDI0LjVsLTMzLjggMzMgOCA0Ni42YzIgMTEuNy0xMC4zIDIwLjctMjAuOSAxNS4ybC00MS44LTIyLTQxLjggMjJjLTEwLjUgNS41LTIyLjktMy40LTIwLjktMTUuMmw4LTQ2LjYtMzMuOC0zM2MtOC41LTguMy0zLjgtMjIuOCA4LTI0LjVsNDYuNy02LjggMjAuOS00Mi40YzUuMy0xMC43IDIwLjUtMTAuNyAyNS44IDB6Il0KICAgIH07CiAgICBmYUdyaW5TdGFyczIgPSBmYUZhY2VHcmluU3RhcnMyOwogICAgZmFTb3J0VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWFzYyJdLCAiZjBkZSIsICJNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0eiJdCiAgICB9OwogICAgZmFTb3J0QXNjID0gZmFTb3J0VXA7CiAgICBmYUV5ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgImYwNmUiLCAiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNi00Ni44IDQzLjUtNzguMSA5NS40LTkzIDEzMS4xLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNnMxNDUuNS0zNi44IDE5Mi42LTgwLjZjNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjZ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0LTExLjUgMC0yMi4zLTMtMzEuNy04LjQtMSAxMC45LS4xIDIyLjEgMi45IDMzLjIgMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMi4yLTQ1LjctNTUuNS03NC44LTEwMS4xLTcwLjggNS4zIDkuMyA4LjQgMjAuMSA4LjQgMzEuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmV0LWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjBkOSIsICJNNy43IDIzNS44Yy0xMC4zIDEyLjYtOS41IDMxLjEgMi4yIDQyLjhsMTI4IDEyOGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMjU2YzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC0xMjggMTI4LTIuMiAyLjR6Il0KICAgIH07CiAgICBmYUFwcGxlV2hvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUtd2hvbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MjIsIDEyNzgyMywgImFwcGxlLWFsdCJdLCAiZjVkMSIsICJNMjI0IDExMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODBsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYgMHpNMCAyODhjMC03Ni4zIDM1LjctMTYwIDExMi0xNjAgMjcuMyAwIDU5LjcgMTAuMyA4Mi43IDE5LjMgMTguOCA3LjMgMzkuOSA3LjMgNTguNyAwIDIyLjktOC45IDU1LjQtMTkuMyA4Mi43LTE5LjMgNzYuMyAwIDExMiA4My43IDExMiAxNjAgMCAxMjgtODAgMjI0LTE2MCAyMjQtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuMy04LjEtMi44LTE2LjktMi44LTI1IDAtMTMuNCA0LjctMzUgMTEuMy01MS41IDExLjMtODAgMC0xNjAtOTYtMTYwLTIyNHoiXQogICAgfTsKICAgIGZhQXBwbGVBbHQgPSBmYUFwcGxlV2hvbGU7CiAgICBmYVNjcm9sbFRvcmFoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbC10b3JhaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0b3JhaCJdLCAiZjZhMCIsICJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDAgNjguOSAwIDg2LjcgMTMuNCA5My4zIDMybDM4OS41IDBjNi42LTE4LjYgMjQuNC0zMiA0NS4zLTMyIDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4LTIwLjkgMC0zOC43LTEzLjQtNDUuMy0zMkw5My4zIDQ4MGMtNi42IDE4LjYtMjQuNCAzMi00NS4zIDMyLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6TTE3Ny45IDMwMWMtMS4yIDItMS45IDQuMi0xLjkgNi42IDAgNi45IDUuNiAxMi41IDEyLjUgMTIuNWw1Ni45IDAgMzAuNSA0OS4yYzIuNiA0LjIgNy4yIDYuOCAxMi4yIDYuOHM5LjYtMi42IDEyLjItNi44bDMwLjUtNDkuMiA1Ni45IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtMi4zLS42LTQuNi0xLjktNi42bC0yNy44LTQ1IDI3LjgtNDVjMS4yLTIgMS45LTQuMiAxLjktNi42IDAtNi45LTUuNi0xMi41LTEyLjUtMTIuNWwtNTYuOSAwLTMwLjUtNDkuMmMtMi42LTQuMi03LjItNi44LTEyLjItNi44cy05LjYgMi42LTEyLjIgNi44bC0zMC41IDQ5LjItNTYuOSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCAyLjMgLjYgNC42IDEuOSA2LjZsMjcuOCA0NS0yNy44IDQ1eiJdCiAgICB9OwogICAgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7CiAgICBmYUhvdXNlTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTAiLCAiTTUyOCAyMjQuMWM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODB6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTg1IDE3MS44QzQ0MC4yIDE5NSA0MDAgMjQ0LjggNDAwIDMwNGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNMjcyIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5NiAwIDAtODcuM2MwLTE2LjUgNy0zMS41IDE4LjQtNDIuMS04LjctOS0yMC45LTE0LjYtMzQuNC0xNC42bC0zMiAwem0yNTYtNDcuOWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWxlZnQtcmlnaHQtdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGJhIiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhMMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzkwLjYgMzQyLjZsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40LTEzMy41IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDEzMy41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHpNNTc2IDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2eiJdCiAgICB9OwogICAgZmFUcmFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFzaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWY4IiwgIk0xMzYuNyA1LjlMMTI4IDMyIDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMC04LjctMjYuMUMzMDYuOS03LjIgMjk0LjctMTYgMjgwLjktMTZMMTY3LjEtMTZjLTEzLjggMC0yNiA4LjgtMzAuNCAyMS45ek00MTYgMTQ0TDMyIDE0NCA1My4xIDQ2Ny4xQzU0LjcgNDkyLjQgNzUuNyA1MTIgMTAxIDUxMkwzNDcgNTEyYzI1LjMgMCA0Ni4zLTE5LjYgNDcuOS00NC45TDQxNiAxNDR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRUZWFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC10ZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ2LCAic2FkLXRlYXIiXSwgImY1YjQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI3MSA5OGM1LjUtMS4zIDExLjEtMiAxNy0yIDI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwLTEyLjUgMC0yNC42IDEuOS0zNS45IDUuNSA5LjggMTIuNyAxNi41IDI3LjkgMTguOSA0NC42ek0xNzYgMjQwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTkyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE4NS40IDI5Mi44Yy0yLjQtMi45LTUuNy00LjgtOS40LTQuOHMtNyAxLjktOS40IDQuOGMtNi41IDcuOC0xMi42IDE2LjEtMTguMyAyNC42LTkgMTMuNC0yMC4zIDMwLjItMjAuMyA0Ny40IDAgMjguMyAyMS41IDUxLjIgNDggNTEuMnM0OC0yMi45IDQ4LTUxLjJjMC0xNy4yLTExLjItMzQtMjAuMy00Ny40LTUuNy04LjUtMTEuOS0xNi43LTE4LjMtMjQuNnoiXQogICAgfTsKICAgIGZhU2FkVGVhcjIgPSBmYUZhY2VTYWRUZWFyMjsKICAgIGZhRmF4ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZheCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNCwgMTI4NDM5XSwgImYxYWMiLCAiTTE2MCA2NGwwIDgwIDY0IDAgMC04MCAxNDYuNyAwIDQ1LjMgNDUuMyAwIDM0LjcgNjQgMCAwLTM0LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNDE2IDE4LjdDNDA0IDYuNyAzODcuNyAwIDM3MC43IDBMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0ek0zMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDB6bTQ0OCA2NGwtMzIwIDAgMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAyODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zMzYgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzEyIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek00MjQgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNDAwIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFQZXJzb25DaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQxIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFIYW1zYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1zYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjY1IiwgIk0zNC42IDI4OEw4MCAyODhjOC44IDAgMTYtNy4yIDE2LTE2TDk2IDcyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxMzJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xNjRjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE2NGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTEzMmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjAwYzAgOC44IDcuMiAxNiAxNiAxNmw0NS40IDBjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjYgMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFTMTM2LjYgNDg2LjIgOTUuNCA0NDFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zIDAtMTkuMSAxNS41LTM0LjYgMzQuNi0zNC42ek0yNTYgMjg4Yy0zOC40IDAtNzYuOCAzNS44LTkwLjYgNTAuMi0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQyIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1jaGVjayIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDZjIiwgIk0yNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwem0yNi45IDIxMi42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM2wtODUuNiAxMTcuNy0yNi41LTI3LjRjLTkuMi05LjUtMjQuNC05LjgtMzMuOS0uNnMtOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMjg4LjIgMjQ2LjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6TTEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlRnJvbVNxdWFyZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgInNoYXJlLXNxdWFyZSJdLCAiZjE0ZCIsICJNMzg0LjUgMjRsMCA3Mi02NCAwYy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDkzLjQgODIuOCAxMzQuOCAxMDAuNiAxNDIuNiAyLjIgMSA0LjYgMS40IDcuMSAxLjRsMi41IDBjOS44IDAgMTcuOC04IDE3LjgtMTcuOCAwLTguMy01LjktMTUuNS0xMi44LTIwLjMtOC45LTYuMi0xOS4yLTE4LjItMTkuMi00MC41IDAtNDUgMzYuNS04MS41IDgxLjUtODEuNWwzMC41IDAgMCA3MmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsMTM2LTEzNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0MjUuNSA3Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzM4NC41IDE0LjMgMzg0LjUgMjR6bS0yNzIgNzJjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTI1NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDB6Il0KICAgIH07CiAgICBmYVNoYXJlU3F1YXJlMiA9IGZhU2hhcmVGcm9tU3F1YXJlMjsKICAgIGZhUmVjZWlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWNlaXB0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgImY1NDMiLCAiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMi03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42UzM4NCAxNC42IDM4NCAyNGwwIDQ2NGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNmwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMiA3LjctMzEuMiAwbC00MC40LTM0LjYtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4TDAgMjRDMCAxNC42IDUuNSA2LjEgMTQgMi4yek0xMDQgMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHpNODAgMzUyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il0KICAgIH07CiAgICBmYUVxdWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcXVhbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2Mjc2NF0sICIzZCIsICJNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDEyOHptMCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIweiJdCiAgICB9OwogICAgZmFDaGV2cm9uVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDc3IiwgIk0yMDEuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDIyNCAxNzMuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxOTItMTkyeiJdCiAgICB9OwogICAgZmFWaXJ1c1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzUiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg4LjYtODguNmMxLjctMTIuMS0yLTI0LjgtMTEuMy0zNC0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwYy0zMS4yIDMxLjItODQuNSA5LjEtODQuNS0zNSAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtOS4zLTkuMy0yMi0xMy0zNC0xMS4zTDQxLTI0Ljl6TTcyIDIxNmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtMjEuNCAxMi42LTM3LjYgMjkuMS00NS4xbC0yNDAtMjQwQzEwOS42IDIwMy40IDkzLjQgMjE2IDcyIDIxNnoiXQogICAgfTsKICAgIGZhU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjcxNSIsICJNNy0yNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEw1NjkgNTAzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5Qy0yLjMtLjQtMi4zLTE1LjYgNy0yNXoiXQogICAgfTsKICAgIGZhRXhwYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGFuZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDY1IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDMzNC4zIDAgMzUybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2eiJdCiAgICB9OwogICAgZmFOb3RlU3RpY2t5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3RlLXN0aWNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCAic3RpY2t5LW5vdGUiXSwgImYyNDkiLCAiTTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIxMy41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDMyMi43IDQ2MS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ4MHpNMzg5LjUgMzA0TDI5NiAzMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTMuNSAxMTcuNS0xMTcuNXoiXQogICAgfTsKICAgIGZhU3RpY2t5Tm90ZTIgPSBmYU5vdGVTdGlja3kyOwogICAgZmFUYWJsZUNvbHVtbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY29sdW1ucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjb2x1bW5zIl0sICJmMGRiIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgNjRsMCAyNTYgMTI4IDAgMC0yNTYtMTI4IDB6bTMyMCAwbC0xMjggMCAwIDI1NiAxMjggMCAwLTI1NnoiXQogICAgfTsKICAgIGZhQ29sdW1ucyA9IGZhVGFibGVDb2x1bW5zOwogICAgZmFQZXJzb25TaGVsdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zaGVsdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGYiLCAiTTI3MS45IDQuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhDNi4yIDEzNy45IDAgMTQ4LjUgMCAxNjBMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAxNzguNiAyNTYgNjguOSA0NDggMTc4LjYgNDQ4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTEuNS02LjItMjIuMS0xNi4xLTI3LjhsLTIyNC0xMjh6TTI1NiAyMDhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0tOCAxOTJsMTYgMCAwIDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzQuNSAyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zMy4yLTYxLjdDMzI5LjcgMjQ1LjEgMjk0LjQgMjI0IDI1NiAyMjRzLTczLjcgMjEuMS05MS45IDU0LjlsLTMzLjIgNjEuN2MtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMMjAwIDMxMy41IDIwMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg4eiJdCiAgICB9OwogICAgZmFDaXJjbGVOb3RjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbm90Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjZSIsICJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44LTc5LjMgMjMuNi0xMzcuMSA5Ny4xLTEzNy4xIDE4NC4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xLTE2LjktNS0yNi42LTIyLjktMjEuNS0zOS44czIyLjktMjYuNiAzOS44LTIxLjVDNDM0LjkgNDIuMSA1MTIgMTQwIDUxMiAyNTYgNTEyIDM5Ny40IDM5Ny40IDUxMiAyNTYgNTEyUzAgMzk3LjQgMCAyNTZjMC0xMTYgNzcuMS0yMTMuOSAxODIuOS0yNDUuNCAxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41eiJdCiAgICB9OwogICAgZmFXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzczIiwgIk00MTAuNiAxMjQuMWMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bTAgMTQ0YzIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS43LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgMTQ0YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS44LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhRGVsZXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZWxldGUtbGVmdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzkwMDMsICJiYWNrc3BhY2UiXSwgImY1NWEiLCAiTTU3NiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjA1LjMgNjRjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDkuNCAyMzMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42TDE2MCA0MjkuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43TDUxMiA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZ6TTI4NC4xIDE4OC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUJhY2tzcGFjZSA9IGZhRGVsZXRlTGVmdDsKICAgIGZhQnJvb21CYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyb29tLWJhbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicXVpZGRpdGNoIiwgInF1aWRkaXRjaC1icm9vbS1iYWxsIl0sICJmNDU4IiwgIk00OTYgNTQ0YTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwek0xMDYuOCAyNzcuMmMzMC42LTMwLjYgNzMuMS00NS45IDExNS44LTQyLjJMMzQxIDM1My4zYzMuNyA0Mi44LTExLjYgODUuMi00Mi4yIDExNS45LTI3LjQgMjcuNC02NC42IDQyLjgtMTAzLjMgNDIuOEwyMi4xIDUxMmMtMTIuMiAwLTIyLjEtOS45LTIyLjEtMjIuMSAwLTYuMyAyLjctMTIuMyA3LjMtMTYuNUwxMzMuNyAzNTkuN2M0LjItMy43LS40LTEwLjQtNS40LTcuOUw3Ny4yIDM3Ny40Yy02LjEgMy0xMy4yLTEuNC0xMy4yLTguMiAwLTMxLjUgMTIuNS02MS44IDM0LjgtODRsOC04em00MTctMjcwYzEyLjYtMTAuMyAzMS4xLTkuNSA0Mi44IDIuMnMxMi40IDMwLjIgMi4yIDQyLjhsLTIuMiAyLjQtMTkyIDE5MiAzNC44IDM0LjdjNC4yIDQuMiA2LjYgMTAgNi42IDE2IDAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42bC0yOS4xIDAtMTA4LjMtMTA4LjMgMC0yOS4xYzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42IDYgMCAxMS44IDIuNCAxNiA2LjZsMzQuOCAzNC43IDE5Mi0xOTIgMi40LTIuMnoiXQogICAgfTsKICAgIGZhUXVpZGRpdGNoID0gZmFCcm9vbUJhbGw7CiAgICBmYVF1aWRkaXRjaEJyb29tQmFsbCA9IGZhQnJvb21CYWxsOwogICAgZmFKID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImoiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDZdLCAiNGEiLCAiTTI4OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwbDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNodXR0bGVTcGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHV0dGxlLXNwYWNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNwYWNlLXNodXR0bGUiXSwgImYxOTciLCAiTTAgMzY4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTAgMGM0MC42IDAgODAuNC0xMSAxMTUuMi0zMS45bDEzMy41LTgwLjEtOTMuMyAwLTY0LjkgMzguOWMtMTQgOC40LTI4LjkgMTQuNy00NC41IDE5bDAtNjYuNGM5LjctNS42IDE3LjgtMTMuNyAyMy40LTIzLjRsMTk4LjggMGM2Ny4xIDAgMTI3LjgtMjAuNiAxNzAuMy03MC42IDQuNi01LjQgNC42LTEzLjMgMC0xOC44LTQyLjUtNTAuMS0xMDMuMi03MC42LTE3MC4zLTcwLjZsLTE5OC44IDBjLTUuNi05LjctMTMuNy0xNy44LTIzLjQtMjMuNGwwLTY2LjRjMTUuNiA0LjIgMzAuNiAxMC42IDQ0LjUgMTlsNjQuOSAzOC45IDkzLjMgMC0xMzMuNS04MC4xQzE3OC40IDQzIDEzOC42IDMyIDk4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCAzNjh6bTk2IDBsMCA2NC00OCAwIDAtNjQgNDggMHpNOTYgODBsMCA2NC00OCAwIDAtNjQgNDggMHpNNDE2IDIyNGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhU3BhY2VTaHV0dGxlID0gZmFTaHV0dGxlU3BhY2U7CiAgICBmYVlpbllhbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieWluLXlhbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgImY2YWQiLCAiTTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgMzUyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC00NDhjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTYtOTYgNDMtOTYgOTYgNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTIwOV0sICJmMDRkIiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYVRyb3dlbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm93ZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4OSIsICJNNDA3LjkgMTgxLjRMMjc3LjMgMzEyIDM0Mi42IDM3Ny40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlzLTExLjUtMjAuOC03LjktMzIuMmw4MC0yNTZjMy4zLTEwLjcgMTItMTguOSAyMi45LTIxLjVzMjIuNCAuNSAzMC4zIDguNEwyMzIgMjY2LjcgMzYyLjYgMTM2LjFjLTE0LjMtMTQuNi0xNC4yLTM4IC4zLTUyLjVsOTUuNC05NS40YzI2LjktMjYuOSA3MC41LTI2LjkgOTcuNSAwczI2LjkgNzAuNSAwIDk3LjVsLTk1LjQgOTUuNGMtMTQuNSAxNC41LTM3LjkgMTQuNi01Mi41IC4zeiJdCiAgICB9OwogICAgZmFIYW5kQmFja0Zpc3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtYmFjay1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhhbmQtcm9jayJdLCAiZjI1NSIsICJNNy40IDI1My42QzIuNiAyNDUuOSAwIDIzNy4xIDAgMjI4bDAtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDE3LjMgMCAzMi40IDkuMSA0MC45IDIyLjggNC4zLTIyLjEgMjMuOC0zOC44IDQ3LjEtMzguOCAyMy40IDAgNDIuOSAxNi44IDQ3LjEgMzguOSA3LjMtNC40IDE1LjgtNi45IDI0LjktNi45IDIyLjEgMCA0MC44IDE1IDQ2LjMgMzUuNCA1LjUtMi4yIDExLjQtMy40IDE3LjctMy40IDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMzkuNiA3OS4xYy0xMC44IDIxLjctMzMgMzUuNC01Ny4yIDM1LjRMOTYgMzUyYy0xNi41IDAtMzEuOC04LjQtNDAuNi0yMi40bC00OC03NnpNMzIgNDgwbDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFIYW5kUm9jazIgPSBmYUhhbmRCYWNrRmlzdDI7CiAgICBmYVRlbXBlcmF0dXJlSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NjkiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjE2IDk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjEyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il0KICAgIH07CiAgICBmYUdyZWF0ZXJUaGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyZWF0ZXItdGhhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNzY5XSwgIjNlIiwgIk0zNC45IDUwLjZjLTcuNCAxNi0uNCAzNS4xIDE1LjYgNDIuNUw0MDMuNiAyNTYgNTAuNiA0MTljLTE2IDcuNC0yMy4xIDI2LjQtMTUuNiA0Mi41czI2LjQgMjMgNDIuNSAxNS42bDQxNi0xOTJjMTEuMy01LjIgMTguNi0xNi42IDE4LjYtMjkuMXMtNy4zLTIzLjgtMTguNi0yOS4xTDc3LjQgMzVjLTE2LTcuNC0zNS4xLS40LTQyLjUgMTUuNnoiXQogICAgfTsKICAgIGZhQ3J1dGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNydXRjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2Y3IiwgIk0yOTcuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMS40LTEuNC0xNTguNiAxNTguNmMtMTggMTgtNDIuNCAyOC4xLTY3LjkgMjguMWwtNTkgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjQtNjEuNyA2MS43LTkyLjggOTIuOC05My4zIDkzLjMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYtMTYgMCAwIDc3LjMtNzcuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC01OWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOUwyOTguNyA1NiAyOTcuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pNMzQ0IDEwMS4zTDI2MS4zIDE4NCAzMjggMjUwLjcgNDEwLjcgMTY4IDM0NCAxMDEuM3ptLTEyOCAxMjhsLTMwLjYgMzAuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgNTMuNSA1My41IDBjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMMjgyLjcgMjk2IDIxNiAyMjkuM3oiXQogICAgfTsKICAgIGZhU2VwdGFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VwdGFnb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGVwdGFnb24iXSwgImU4MjAiLCAiTTI2Ny40LTMxLjVjMTUuOS01LjUgMzMuNS00LjYgNDguOCAyLjdsMTcyLjQgODMgNi4zIDMuNWMxNC4yIDkgMjQuNSAyMy4zIDI4LjMgMzkuOWw0Mi42IDE4Ni41IDEuMiA3LjJjMS42IDE0LjMtMS43IDI4LjgtOS40IDQxLjFsLTQuMiA1LjktMTE5LjMgMTQ5LjZjLTEyLjEgMTUuMi0zMC42IDI0LjEtNTAgMjQuMWwtMTkxLjMgMGMtMTkuNSAwLTM3LjktOC45LTUwLTI0LjFMMjMuNSAzMzguNGMtMTIuMS0xNS4yLTE2LjctMzUuMi0xMi4zLTU0LjJsNDIuNi0xODYuNSAyLTdjNS42LTE1LjkgMTcuMi0yOSAzMi42LTM2LjRsMTcyLjQtODMgNi43LTIuN3oiXQogICAgfTsKICAgIGZhSGVwdGFnb24gPSBmYVNlcHRhZ29uOwogICAgZmFTdHJlZXRWaWV3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cmVldC12aWV3IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMWQiLCAiTTI1NiAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMTYwbDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMS44IDAtMTEuMSA5OS41Yy0xLjggMTYuMi0xNS41IDI4LjUtMzEuOCAyOC41bC0zOC43IDBjLTE2LjMgMC0zMC0xMi4zLTMxLjgtMjguNWwtMTEuMS05OS41LTEuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MTIuNCA0MDAuMmMtMTYuMS00LjItMzQuOC03LjYtNTUuNC0xMC4ybDUuMy00Ny43YzIyLjcgMi45IDQzLjcgNi43IDYyLjEgMTEuNSAyMi40IDUuOCA0Mi42IDEzLjMgNTcuOCAyMy4zIDE0LjcgOS42IDI5LjggMjQuOSAyOS44IDQ3cy0xNS4xIDM3LjQtMjkuOCA0N2MtMTUuMiA5LjktMzUuNSAxNy41LTU3LjggMjMuMy00NS4xIDExLjctMTA1LjMgMTcuOC0xNjguNCAxNy44cy0xMjMuMy02LjEtMTY4LjQtMTcuOEM2NS4yIDQ4OC40IDQ1IDQ4MC45IDI5LjggNDcxIDE1LjEgNDYxLjQgMCA0NDYuMSAwIDQyNHMxNS4xLTM3LjQgMjkuOC00N2MxNS4yLTkuOSAzNS41LTE3LjUgNTcuOC0yMy4zIDE4LjUtNC44IDM5LjUtOC42IDYyLjEtMTEuNUwxNTUgMzkwYy0yMC42IDIuNi0zOS4zIDYuMS01NS40IDEwLjItNTYuNiAxNC42LTU2LjYgMzIuOSAwIDQ3LjUgMzkuOSAxMC4zIDk1LjggMTYuMiAxNTYuNCAxNi4yczExNi41LTUuOSAxNTYuNC0xNi4yYzU2LjYtMTQuNiA1Ni42LTMyLjkgMC00Ny41eiJdCiAgICB9OwogICAgZmFXYXZlU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhdmUtc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2UiLCAiTTY0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjg4IDk2IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjg4LTk2IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTEyOHoiXQogICAgfTsKICAgIGZhQW5nbGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFs4MjQ5XSwgImYxMDQiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdCiAgICB9OwogICAgZmFTY3Jld2RyaXZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3Jld2RyaXZlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY5MV0sICJmNTRhIiwgIk0zNTIuMSAxNDYuN2wwLTQ5LjZjMC0xMC43IDUuMy0yMC43IDE0LjItMjYuNkw0ODUuMi04LjdjNi4zLTQuMiAxNC44LTMuNCAyMC4yIDJsNDUuNCA0NS41YzUuNCA1LjQgNi4yIDEzLjggMiAyMC4yTDQ3My42IDE3Ny44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJsLTQ5LjYgMC05MC43IDkwLjdjMTUgMzMuMyA4LjkgNzMuOS0xOC41IDEwMS4zTDE2Mi4xIDUxMC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwzNC4xIDQ0OS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUwxNjAuMSAyNTZjMjcuNC0yNy40IDY3LjktMzMuNiAxMDEuMy0xOC41bDkwLjctOTAuN3oiXQogICAgfTsKICAgIGZhVHJhY3RvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFjdG9yIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY4XSwgImY3MjIiLCAiTTE2MCA5NmwwIDk2IDEzMy40IDAtNTcuNi05Ni03NS44IDB6TTk2IDIyM0w5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDcuOCAwYzIyLjUgMCA0My4zIDExLjggNTQuOSAzMS4xbDc3LjQgMTI4LjkgNjQgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDEuNWMwIDE0LjItNi4zIDI3LjgtMTcuMyAzNi45bC0zNSAyOS4yYzI2LjUgMTUuMiA0NC4zIDQzLjcgNDQuMyA3Ni40IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMTQuNCAzLjUtMjggOS42LTQwbC0xMDEuMiAwYy0zIDEzLjQtNy45IDI2LTE0LjQgMzcuNyA3LjcgOS40IDcuMiAyMy40LTEuNiAzMi4ybC0yMi42IDIyLjZjLTguOCA4LjgtMjIuNyA5LjMtMzIuMiAxLjYtOS4zIDUuMi0xOS4zIDkuMy0yOS44IDEyLjMtMS4yIDEyLjEtMTEuNCAyMS42LTIzLjkgMjEuNmwtMzIgMGMtMTIuNCAwLTIyLjctOS41LTIzLjktMjEuNi0xMC41LTMtMjAuNC03LjItMjkuOC0xMi4zLTkuNCA3LjctMjMuNCA3LjItMzIuMi0xLjZMMzUuNSA0NTMuOGMtOC44LTguOC05LjMtMjIuNy0xLjYtMzIuMi01LjItOS4zLTkuMy0xOS4zLTEyLjMtMjkuOC0xMi4xLTEuMi0yMS42LTExLjQtMjEuNi0yMy45bDAtMzJjMC0xMi40IDkuNS0yMi43IDIxLjYtMjMuOSAzLTEwLjUgNy4yLTIwLjQgMTIuMy0yOS44LTcuNy05LjQtNy4yLTIzLjQgMS42LTMyLjJsMjIuNi0yMi42YzguOC04LjggMjIuNy05LjMgMzIuMi0xLjYgMS45LTEgMy43LTIgNS43LTN6bTY0IDY1YTY0IDY0IDAgMSAwIDAgMTI4IDY0IDY0IDAgMSAwIDAtMTI4ek00NDAgNDI0YTQwIDQwIDAgMSAwIDgwIDAgNDAgNDAgMCAxIDAgLTgwIDB6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjYiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFWaWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkzIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMzUyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0zNTIgNjQgMCAwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQ5Ny43IDAgNDgwIDBMMzIgMHpNMTYwIDY0bDAgMTI4LTY0IDAgMC0xMjggNjQgMHptMjU2IDBsMCAxMjgtNjQgMCAwLTEyOCA2NCAweiJdCiAgICB9OwogICAgZmFTdGV0aG9zY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGV0aG9zY29wZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY1OF0sICJmMGYxIiwgIk0zMiA0OEMzMiAyMS41IDUzLjUgMCA4MCAwbDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyMzguMyAwIDI1NiAwbDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDRjMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAxOS4yYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC04NS41Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgODUuNWMwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNjAgNDY1LjIgMTYwIDM2OGwwLTE5LjJDODcgMzM0IDMyIDI2OS40IDMyIDE5MkwzMiA0OHpNNDgwIDIyNGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVBvZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9kY2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmNlIiwgIk0zMzYgMzU5LjhjMzkuMS0zMi4zIDY0LTgxLjEgNjQtMTM1LjggMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0QzQ4IDI3OC43IDcyLjkgMzI3LjUgMTEyIDM1OS44IDExMi40IDM3Ny40IDExNS4yIDQwMC4yIDExOC40IDQyMS42IDQ4IDM4My45IDAgMzA5LjUgMCAyMjQgMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgODUuNi00OCAxNTkuOS0xMTguNSAxOTcuNiAzLjMtMjEuNCA2LTQ0LjIgNi40LTYxLjh6bS0xNC01My40Yy04LjMtMTIuNi0xOS4yLTIxLjYtMzAuNC0yNy44LTIuMS0xLjEtNC4yLTIuMi02LjMtMy4yIDExLjctMTMuOSAxOC44LTMxLjkgMTguOC01MS41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMTkuNiA3LjEgMzcuNiAxOC44IDUxLjUtMi4xIDEtNC4yIDItNi4zIDMuMi0xMS4yIDYuMi0yMi4xIDE1LjItMzAuNCAyNy44LTE4LjgtMjIuMy0zMC4xLTUxLTMwLjEtODIuNCAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4YzAgMzEuNC0xMS4zIDYwLjItMzAuMSA4Mi40ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOCAwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOS01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOCAwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMTI4YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YjciLCAiTTk2IDMyQzc4LjMgMzIgNjQgNDYuMyA2NCA2NFM3OC4zIDk2IDk2IDk2TDExNC43IDk2IDkuNCAyMDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTQxLjMgMTYwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMzJ6TTQwMy44IDcwLjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNMjc5LjcgMTk0LjJhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYyLjItMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6TTE1Ni4yIDMxNy44YTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2MS42LTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNNzAuMSA0MDMuOGEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6Il0KICAgIH07CiAgICBmYUNoZXNzUXVlZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXF1ZWVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgxOV0sICJmNDQ1IiwgIk0yNTYgODBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01LjUgMTg1TDEyOCAzODQgNzEuOCA0NTQuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwzODQgMzg0IDUwNi41IDE4NWMzLjYtNS45IDUuNS0xMi43IDUuNS0xOS42bDAtLjZjMC0yMC4zLTE2LjUtMzYuOC0zNi44LTM2LjgtNy4zIDAtMTQuNCAyLjItMjAuNCA2LjJsLTE2LjkgMTEuM2MtMTIuNyA4LjUtMjkuNiA2LjgtNDAuNC00bC0zNC4xLTM0LjFDMzU2LjEgMTAwLjEgMzQ2LjIgOTYgMzM2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTMwLjEgMzAuMWMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTMwLjEtMzAuMUMxOTYuMSAxMDAuMSAxODYuMiA5NiAxNzYgOTZzLTIwLjEgNC4xLTI3LjMgMTEuM2wtMzQuMSAzNC4xYy0xMC44IDEwLjgtMjcuNyAxMi41LTQwLjQgNEw1Ny4zIDEzNC4yYy02LjEtNC0xMy4yLTYuMi0yMC40LTYuMi0yMC4zIDAtMzYuOCAxNi41LTM2LjggMzYuOGwwIC42YzAgNi45IDEuOSAxMy43IDUuNSAxOS42eiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWIiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxsaXBzaXMtdmVydGljYWwiLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsiZWxsaXBzaXMtdiJdLCAiZjE0MiIsICJNNjQgMTQ0YTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMSAxIDAgMTEyem0wIDIyNGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTExMmMwIDMwLjktMjUuMSA1Ni01NiA1NnMtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2IDU2IDI1LjEgNTYgNTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzViA9IGZhRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZSIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDMiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYXJyb3ctdXAtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzkiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0yMDggNDgwbDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTI4IDMyIDB6TTU2Ni42IDEwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0OTYgNzcuMyA0OTYgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ2LjctMjUuNCAyNS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w4MC04MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhTm90RXF1YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90LWVxdWFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1M2UiLCAiTTM3OC42IDgxLjhjOS44LTE0LjcgNS44LTM0LjYtOC45LTQ0LjRzLTM0LjYtNS44LTQ0LjQgOC45TDI3MC45IDEyOCAzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTk2LjIgMC04NS4zIDEyOC0xMTAuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY4LjIgMC0zMC44IDQ2LjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45TDE3Ny4xIDM4NCA0MTYgMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTYuMiAwIDg1LjMtMTI4IDExMC45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY4LjIgMCAzMC44LTQ2LjJ6Il0KICAgIH07CiAgICBmYVRyYWluVHJhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi10cmFtIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NjUwXSwgImU1YjQiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyMCAwIDAgNjQgNDAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTYwYzAgMzEuMi0xNC45IDU5LTM4IDc2LjVsNjQuMyA3NmM4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LjYtODguMWMtMy42IC40LTcuMyAuNi0xMS4xIC42bC0xMjggMGMtMy44IDAtNy41LS4yLTExLjEtLjZMNDIuMyA1MzUuNWMtOC42IDEwLjEtMjMuNyAxMS40LTMzLjggMi44cy0xMS40LTIzLjctMi44LTMzLjhsNjQuMy03NkM0Ni45IDQxMSAzMiAzODMuMiAzMiAzNTJsMC0xNjBjMC01MyA0My05NiA5Ni05Nmw0MCAwIDAtNjQtMTIwIDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTMuMyAwIDQwTDAgOHpNMTI4IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMHptMzIgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhUGxhbmVEZXBhcnR1cmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtZGVwYXJ0dXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ3XSwgImY1YjAiLCAiTTM3MiAxNDMuOUwxNzIuNyA0MC4yYy04LTQuMS0xNy4zLTQuOC0yNS43LTEuN2wtNDEuMSAxNWMtMTAuMyAzLjctMTMuOCAxNi40LTcuMSAyNUwyMDAuMyAyMDYuNCAxMDAuMSAyNDIuOCA0MCAyMDYuMmMtNi4yLTMuOC0xMy44LTQuNS0yMC43LTIuMUwzIDIxMC4xYy05LjQgMy40LTEzLjQgMTQuNS04LjMgMjMuMWw1My42IDkxLjhjMTUuNiAyNi43IDQ4LjEgMzguNCA3Ny4xIDI3LjhsMTIuOS00LjcgMCAwIDM5OC40LTE0NWMyOS4xLTEwLjYgNDQtNDIuNyAzMy41LTcxLjhzLTQyLjctNDQtNzEuOC0zMy41TDM3MiAxNDMuOXpNMzIuMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUxMiAweiJdCiAgICB9OwogICAgZmFSaWdodFRvQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC10by1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24taW4tYWx0Il0sICJmMmY2IiwgIk0zNDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIwMSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMxNjAgMTAyLjMgMTYwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDM0NSAyNzN6bTcgMTQzYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYVNpZ25JbkFsdCA9IGZhUmlnaHRUb0JyYWNrZXQ7CiAgICBmYVNkQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZC1jYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3YzIiLCAiTTM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxMjUuMyAwQzEwOC4zIDAgOTIgNi43IDgwIDE4LjdMMTguNyA4MEM2LjcgOTIgMCAxMDguMyAwIDEyNS4zTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0xNjAgODhsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGEiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDk2IDQ0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFTaGVrZWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoZWtlbC1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MiwgImlscyIsICJzaGVrZWwiLCAic2hlcWVsIiwgInNoZXFlbC1zaWduIl0sICJmMjBiIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMzIwIDQ4MGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDB6Il0KICAgIH07CiAgICBmYUlscyA9IGZhU2hla2VsU2lnbjsKICAgIGZhU2hla2VsID0gZmFTaGVrZWxTaWduOwogICAgZmFTaGVxZWwgPSBmYVNoZWtlbFNpZ247CiAgICBmYVNoZXFlbFNpZ24gPSBmYVNoZWtlbFNpZ247CiAgICBmYVJhZGlvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhZGlvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjUxXSwgImY4ZDciLCAiTTQ5NC44IDE1YzEyLjctMy43IDIwLTE3LjEgMTYuMy0yOS44UzQ5NC0zNC44IDQ4MS4zLTMxTDUxLjggOTQuOUM0Mi40IDk3LjYgMzMuOSAxMDIuMSAyNi42IDEwOCAxMC41IDExOS43IDAgMTM4LjYgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjE4LjUgOTYgNDk0LjggMTV6TTM2OCAyMDhhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTY0IDI0OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAyNzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmREb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhbGxlcmdpZXMiXSwgImY0NjEiLCAiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4ek0yMDAgMzUyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC01NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS04OCAyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUFsbGVyZ2llcyA9IGZhSGFuZERvdHM7CiAgICBmYUJvb2tTa3VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXNrdWxsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvb2stZGVhZCJdLCAiZjZiNyIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTI3MiAxNjMuMmwwIDEyLjhjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMi44Yy0xOS40LTExLjctMzItMzAuMy0zMi01MS4yIDAtMzUuMyAzNS44LTY0IDgwLTY0czgwIDI4LjcgODAgNjRjMCAyMC45LTEyLjYgMzkuNS0zMiA1MS4yek0yMDggMTEyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptNzQuMiA5NS43YzQuNiAxMC4xIC4xIDIxLjktOS45IDI2LjVsLTQ3LjkgMjEuOCA0Ny45IDIxLjhjMTAuMSA0LjYgMTQuNSAxNi40IDkuOSAyNi41cy0xNi40IDE0LjUtMjYuNSA5LjlMMjI0IDI5NCAxNDQuMyAzMzAuMmMtMTAuMSA0LjYtMjEuOSAuMS0yNi41LTkuOXMtLjEtMjEuOSA5LjktMjYuNWw0Ny45LTIxLjgtNDcuOS0yMS44Yy0xMC4xLTQuNi0xNC41LTE2LjQtOS45LTI2LjVzMTYuNC0xNC41IDI2LjUtOS45TDIyNCAyNTAgMzAzLjcgMjEzLjhjMTAuMS00LjYgMjEuOS0uMSAyNi41IDkuOXoiXQogICAgfTsKICAgIGZhQm9va0RlYWQgPSBmYUJvb2tTa3VsbDsKICAgIGZhVW5sb2NrS2V5aG9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmxvY2sta2V5aG9sZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJ1bmxvY2stYWx0Il0sICJmMTNlIiwgIk0xOTIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjQgMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGwwLTY0YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYzLjUgMCAxMTYuMSA0Ni4xIDEyNi4yIDEwNi43IDIuOSAxNy40LTguOCAzMy45LTI2LjMgMzYuOXMtMzMuOS04LjgtMzYuOS0yNi4zQzI1MCA1NS4xIDIyMy43IDMyIDE5MiAzMnptNDAgMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDB6Il0KICAgIH07CiAgICBmYVVubG9ja0FsdCA9IGZhVW5sb2NrS2V5aG9sZTsKICAgIGZhRmlsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hcnJvdy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLXVwbG9hZCJdLCAiZjU3NCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTIwOSAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC02NCA2NGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgODYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODYuMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFGaWxlVXBsb2FkID0gZmFGaWxlQXJyb3dVcDsKICAgIGZhRmFjZUdyaW5UZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRlYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCAiZ3Jpbi10ZWFycyJdLCAiZjU4OCIsICJNNTU0LjggMjAzLjRsMTYuMyAyLjNDNTQ3LjcgODguNCA0NDQuMiAwIDMyMCAwUzkyLjMgODguNCA2OC45IDIwNS43bDE2LjMtMi4zYzM3LTUuMyA2OC42IDI2LjQgNjMuNCA2My40bC02LjcgNDYuN2MtNC4xIDI5LTIxLjYgNTMuMi00NS44IDY2LjggNDMuNyA3OC41IDEyNy42IDEzMS43IDIyMy44IDEzMS43czE4MC4xLTUzLjEgMjIzLjgtMTMxLjdjLTI0LjEtMTMuNS00MS42LTM3LjgtNDUuOC02Ni44bC02LjctNDYuN2MtNS4zLTM3IDI2LjQtNjguNiA2My40LTYzLjR6TTQ3MC4zIDMyNi45QzQ0Ny45IDM4OC4yIDM4OS4xIDQzMiAzMjAgNDMyUzE5Mi4xIDM4OC4yIDE2OS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAtMjUuNi0xOC44LTQ3LjMtNDQuMS01MC45TDU0OS4xIDI0M2MtMTAuNi0xLjUtMTkuNiA3LjUtMTguMSAxOC4xbDYuNyA0Ni43YzMuNiAyNS4zIDI1LjMgNDQuMSA1MC45IDQ0LjEgMjguNCAwIDUxLjQtMjMgNTEuNC01MS40em0tNjQwIDBDMCAzMjkgMjMgMzUyIDUxLjQgMzUyIDc3IDM1MiA5OC43IDMzMy4yIDEwMi4zIDMwNy45bDYuNy00Ni43YzEuNS0xMC42LTcuNS0xOS42LTE4LjEtMTguMWwtNDYuNyA2LjdDMTguOCAyNTMuMyAwIDI3NSAwIDMwMC42eiJdCiAgICB9OwogICAgZmFHcmluVGVhcnMyID0gZmFGYWNlR3JpblRlYXJzMjsKICAgIGZhUGVuVG9TcXVhcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi10by1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZWRpdCJdLCAiZjA0NCIsICJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzY4IDQ2LjEgNDY1LjkgMTQ0IDQ5MC4zIDExOS42YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzMiAxNzcuOSAzMzQuMSA4MCAxNzIuNCAyNDEuN3pNOTYgNjRDNDMgNjQgMCAxMDcgMCAxNjBMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgNjR6Il0KICAgIH07CiAgICBmYUVkaXQyID0gZmFQZW5Ub1NxdWFyZTI7CiAgICBmYUVhcnRoRXVyb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLWV1cm9wZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJnbG9iZS1ldXJvcGUiXSwgImY3YTIiLCAiTTI1Ni4yIDQ4YzExNC44IC4xIDIwNy44IDkzLjIgMjA3LjggMjA4IDAgMjIuMS0zLjQgNDMuNC05LjggNjMuNC0yIC40LTQuMSAuNi02LjIgLjZsLTIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC01MC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2bC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2cy03LjIgMTYtMTYgMTZsLTI1LjQgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmw3MC4xLTcwLjFjMi4xLTIuMSAzLjMtNSAzLjMtOCAwLTYuMi01LjEtMTEuMy0xMS4zLTExLjNsLTE0LjEgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmwyMy4xLTIzLjFjLjgtLjggMS42LTEuNSAyLjUtMi4yek00MzguNCAzNTYuMWMtMzIuOCA1OS42LTkzLjkgMTAxLjQtMTY1LjIgMTA3LjItLjctMi4zLTEuMS00LjgtMS4xLTcuMyAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjYuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC02Ni43YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyOS4zIDI5LjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDUuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDE2IDE2YzQuMiA0LjIgMTAgNi42IDE2IDYuNiA0LjggMCA5LjMgMS41IDEzIDQuMXpNMjU2IDUxMmwyNi4yLTEuM2MtOC42IC45LTE3LjMgMS4zLTI2LjIgMS4zem0yNi4yLTEuM0M0MTEuMyA0OTcuNiA1MTIgMzg4LjYgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMGwwIDBDMTE0LjYgMCAwIDExNC42IDAgMjU2IDAgMzgzLjUgOTMuMiA0ODkuMyAyMTUuMyA1MDguOCAyMjguNSA1MTAuOSAyNDIuMSA1MTIgMjU2IDUxMnpNMTg3LjMgMTIzLjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhR2xvYmVFdXJvcGUgPSBmYUVhcnRoRXVyb3BlOwogICAgZmFGYWNlR3JpbkJlYW1Td2VhdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0tc3dlYXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg1MTcsICJncmluLWJlYW0tc3dlYXQiXSwgImY1ODMiLCAiTTU0Ni4yLS4xYzE0LjcgMTcuOCAyOS44IDQwLjEgMjkuOCA2NC4xIDAgMzYuNC0yNy42IDY0LTY0IDY0cy02NC0yNy42LTY0LTY0YzAtMjQgMTUuMi00Ni4zIDI5LjgtNjQuMSA4LjgtMTAuNyAxOC41LTIwLjggMjktMzAgMy0yLjYgNy40LTIuNiAxMC40IDAgMTAuNSA5LjEgMjAuMSAxOS4zIDI5IDMwek0yODggMGM0Mi41IDAgODIuNiAxMC40IDExNy44IDI4LjctMy42IDEwLjktNS44IDIyLjctNS44IDM1LjMgMCA2Mi45IDQ5LjEgMTEyIDExMiAxMTIgNi40IDAgMTIuNy0uNSAxOC44LTEuNSA4LjYgMjUuNiAxMy4yIDUzIDEzLjIgODEuNSAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzMyIDM5Ny40IDMyIDI1NiAxNDYuNiAwIDI4OCAwek00MTguNyAzMDguOUMzNzkuNSAzMjEuMSAzMzUuMSAzMjggMjg4IDMyOHMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDIyLjQgNjEuMyA4MS4zIDEwNS4xIDE1MC4zIDEwNS4xczEyNy45LTQzLjggMTUwLjMtMTA1LjFjNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xek0yMDggMTgwYzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHptMTMyIDI4YzAtMTUuNSAxMi41LTI4IDI4LTI4czI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04eiJdCiAgICB9OwogICAgZmFHcmluQmVhbVN3ZWF0MiA9IGZhRmFjZUdyaW5CZWFtU3dlYXQyOwogICAgZmFDaXJjbGVIYWxmU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk2ODAsICJhZGp1c3QiXSwgImYwNDIiLCAiTTQ0OCAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJsMCAzODRjMTA2IDAgMTkyLTg2IDE5Mi0xOTJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTsKICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktdG8tcGVyc29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGMiLCAiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44IDAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOWwxMTEuNCAwYzguOC0uMSAxNS45LTcuMiAxNS45LTE2TDIwMCAxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFsLTEyMi45IDBjLTEuNiA1LjctMi41IDExLjctMi41IDE3LjkgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxLjggMCAzLjUtLjEgNS4yLS40TDUzIDIwOC42QzQwLjEgMjIwLjMgMzIgMjM3LjIgMzIgMjU2em0xOTAuMiA0Mi41YzEuMS0zLjMgMS44LTYuOCAxLjgtMTAuNWwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTMyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZsMCAzMi04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDAgMCAzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMyAxMy41IDguMSAxOC4xbDY0IDU2LjRjNy4xIDYuMiAxNy4xIDcuOCAyNS43IDMuOVM0MDAgNDk3LjggNDAwIDQ4OC40bDAtMzIuNCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtMzJjMC05LjQtNS41LTE4LTE0LjEtMjEuOXMtMTguNi0yLjQtMjUuNyAzLjhsLTY0IDU2Yy01LjIgNC41LTguMiAxMS4xLTguMiAxOHoiXQogICAgfTsKICAgIGZhVGFibGVDZWxsc0NvbHVtbkxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtY29sdW1uLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3OCIsICJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgMzY4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFUcnVja0ZpZWxkVW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZmllbGQtdW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4ZSIsICJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMCA0OGMwIDIxLjEgMTMuNyAzOS4xIDMyLjYgNDUuNS0uNCAzLjQtLjYgNy0uNiAxMC41IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTQ0LjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsLjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yNC43IDAtMS43LTQuMi00My44LTEwNi4zYy0xMi4zLTMwLTQxLjYtNDkuNS03NC00OS41bC00MC40IDBDMzY0LjQgNDQuOSAzNDMuNyAzMiAzMjAgMzJMOTYgMzJ6TTM4NCAyMjRsMC05NiAzMS45IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlsMzUuNCA4Ni4xLTgyLjEgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTI4MCA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yNTYuNiAxMzIuOWwyNy40IDQxIDAtMjkuOWMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgOC44LTUuOCAxNi42LTE0LjIgMTkuMXMtMTcuNS0uNy0yMi40LThsLTI3LjQtNDEgMCAyOS45YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTk2YzAtOC44IDUuOC0xNi42IDE0LjItMTkuMXMxNy41IC43IDIyLjQgOHpNMTMyIDE0NGwwIDY0YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC02NGMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDY0YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il0KICAgIH07CiAgICBmYUNsb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzOSwgImNsb2NrLWZvdXIiXSwgImYwMTciLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDbG9ja0ZvdXIyID0gZmFDbG9jazI7CiAgICBmYUJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIxMl0sICJmMDJkIiwgIk0zODQgNTEyTDk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2QzAgNDMgNDMgMCA5NiAwTDQwMCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM2wwIDY2LjdjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6TTk2IDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwLTY0LTI1NiAwem0zMi0yMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQgNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hXaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtd2luayJdLCAiZjU5YyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGF1Z2hXaW5rMiA9IGZhRmFjZUxhdWdoV2luazI7CiAgICBmYUNsb3VkTWVhdGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtbWVhdGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjczYiIsICJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwyNi45IDBjMy41LTEyLjEgMTAuMS0yMy4zIDE5LjItMzIuNGwxLjQtMS40YzE1LTE1IDM1LjMtMjIuOSA1Ni4xLTIyLjIgMTQuMi0xNS4xIDM0LjItMjMuOSA1NS40LTIzLjlsMiAwYzIxLjEgMCA0MS4xIDguOCA1NS40IDIzLjkgMjAuOC0uNiA0MS4xIDcuMyA1Ni4xIDIyLjJsMS40IDEuNGM5LjIgOS4yIDE1LjcgMjAuNCAxOS4yIDMyLjRsMjYuOSAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE1Ni41IDQyNC4zYzkuNSA2LjMgMTQuMiAxNy43IDExLjkgMjguOC0xLjggOS4yIDEgMTguNyA3LjcgMjUuM2wxLjQgMS40YzYuNiA2LjYgMTYuMSA5LjUgMjUuMyA3LjcgMTEuMS0yLjIgMjIuNSAyLjUgMjguOCAxMS45IDUuMiA3LjggMTQgMTIuNSAyMy4zIDEyLjVsMiAwYzkuNCAwIDE4LjEtNC43IDIzLjMtMTIuNSA2LjMtOS41IDE3LjctMTQuMiAyOC44LTExLjkgOS4yIDEuOCAxOC43LTEgMjUuMy03LjdsMS40LTEuNGM2LjYtNi42IDkuNS0xNi4xIDcuNy0yNS4zLTIuMi0xMS4xIDIuNS0yMi41IDExLjktMjguOCA3LjgtNS4yIDEyLjUtMTQgMTIuNS0yMy4zbDAtMmMwLTkuNC00LjctMTguMS0xMi41LTIzLjMtOS41LTYuMy0xNC4yLTE3LjctMTEuOS0yOC44IDEuOC05LjItMS0xOC43LTcuNy0yNS4zbC0xLjQtMS40Yy02LjYtNi42LTE2LjEtOS41LTI1LjMtNy43LTExLjEgMi4yLTIyLjUtMi41LTI4LjgtMTEuOS01LjItNy44LTE0LTEyLjUtMjMuMy0xMi41bC0yIDBjLTkuNCAwLTE4LjEgNC43LTIzLjMgMTIuNS02LjMgOS41LTE3LjcgMTQuMi0yOC44IDExLjktOS4yLTEuOC0xOC43IDEtMjUuMyA3LjdsLTEuNCAxLjRjLTYuNiA2LjYtOS41IDE2LjEtNy43IDI1LjMgMi4yIDExLjEtMi41IDIyLjUtMTEuOSAyOC44LTcuOCA1LjItMTIuNSAxNC0xMi41IDIzLjNsMCAyYzAgOS40IDQuNyAxOC4xIDEyLjUgMjMuM3pNNDggNDQ4YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDE2IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFDaGFydEFyZWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYXJlYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcmVhLWNoYXJ0Il0sICJmMWZlIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0yNDAgOTZjNi43IDAgMTMuMSAyLjggMTcuNyA3LjhMMzI4LjggMTgxLjMgMzc1IDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0zMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMTJjMC02IDIuMy0xMS44IDYuMy0xNi4ybDg4LTk2YzQuNS01IDExLTcuOCAxNy43LTcuOHoiXQogICAgfTsKICAgIGZhQXJlYUNoYXJ0ID0gZmFDaGFydEFyZWE7CiAgICBmYVJ1cGlhaFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVwaWFoLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIzZCIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yNTYtMzJsODAgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NjEuOSA0NDggNDAwIDQ0OGwtNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA5NiA0OCAweiJdCiAgICB9OwogICAgZmFUZXh0V2lkdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC13aWR0aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM1IiwgIk00MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxMjggMCAwIDE2MC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMTYwIDEyOCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDB6bTc4LjYgNDA2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDIyOS41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMjI5LjUgMCA5LjQtOS40eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2F0ZWxsaXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgImY3YmYiLCAiTTE5OSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDg5LjQgODkuNCA1NS01NWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0OCA0OGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTUgNTUgODkuNCA4OS40YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC05NiA5NmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTg5LjQtODkuNC0xNS41IDE1LjVjMTEuNCAyNC42IDE3LjggNTIgMTcuOCA4MC45IDAgMzEuNy03LjcgNjEuNS0yMS4yIDg3LjgtNC43IDktMTYuNyAxMC4zLTIzLjggMy4xbC05Ni4zLTk2LjMtNjAgNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDYwLTYwLTk2LjMtOTYuM2MtNy4yLTcuMi01LjktMTkuMiAzLjEtMjMuOCAyNi4zLTEzLjYgNTYuMi0yMS4yIDg3LjgtMjEuMiAyOC45IDAgNTYuMyA2LjQgODAuOSAxNy44TDE5Mi40IDIyNi4zIDEwMyAxMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDE5OSA3em0xNyA1MC45bC02Mi4xIDYyLjEgNzIuNCA3Mi40IDYyLjEtNjIuMS03Mi40LTcyLjR6TTM5MiAzNTguMWw2Mi4xLTYyLjEtNzIuNC03Mi40LTYyLjEgNjIuMSA3Mi40IDcyLjR6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbWludXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLW1pbnVzIl0sICJmMDEwIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTEzNiAxODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFTZWFyY2hNaW51cyA9IGZhTWFnbmlmeWluZ0dsYXNzTWludXM7CiAgICBmYVBlb3BsZUdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMzIiwgIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptOTYgMzEyYzAgMjUtMTIuNyA0Ny0zMiA1OS45bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xQzE3Mi43IDM1OSAxNjAgMzM3IDE2MCAzMTJsMC00MGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNDB6TTk2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0xNiAyNDBsMCAzMmMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCA3NS4zYzAgMS4yIDAgMi41IC4xIDMuNy04LjUgNy42LTE5LjcgMTIuMy0zMi4xIDEyLjNsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNTYuNkMxMi45IDM2NC40IDAgMzQzLjcgMCAzMjBsMC0zMmMwLTUzIDQzLTk2IDk2LTk2IDEyLjcgMCAyNC44IDIuNSAzNS45IDYuOS0xMi42IDIxLjQtMTkuOSA0Ni40LTE5LjkgNzMuMXpNMzY4IDQ2NGwwLTc1LjNjMTkuOS0yMi41IDMyLTUyLjIgMzItODQuN2wwLTMyYzAtMjYuNy03LjMtNTEuNi0xOS45LTczLjEgMTEuMS00LjUgMjMuMi02LjkgMzUuOS02LjkgNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDU2LjZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTEyLjMgMC0yMy42LTQuNi0zMi4xLTEyLjMgMC0xLjIgLjEtMi41IC4xLTMuN3pNNDE2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdCiAgICB9OwogICAgZmFTcXVhcmVCaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJpbmFyeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjliIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTQ0IDRjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgNDhjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMzIgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTQ4YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0zMiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4em0xNDAtNDRjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHpNMTMyIDI5NmMwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIwem05NiAyNGwwIDQ4YzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDMyIDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC00OGMwLTI0LjMtMTkuNy00NC00NC00NGwtMzIgMGMtMjQuMyAwLTQ0IDE5LjctNDQgNDR6bTQ0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4YzAtMi4yIDEuOC00IDQtNHoiXQogICAgfTsKICAgIGZhTWFza3NUaGVhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hc2tzLXRoZWF0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MTcsICJ0aGVhdGVyLW1hc2tzIl0sICJmNjMwIiwgIk0tNSAxMThMMjMuNSAyNzkuN2MxNCA3OS41IDc2LjMgMTQxLjggMTU1LjggMTU1LjhsMTIuNyAyLjJjLTE2LjUtMjguNi0yNy4xLTYwLjctMzAuNi05NC41bC0yNC4xIDQuM2MtOS43IDEuNy0xOC44LTUuOC0xNi45LTE1LjUgNC44LTI0LjcgMTkuMS00Ni42IDM5LjctNjAuOWwwLTc0LjZjLTEuNCAuOC0zIDEuMy00LjcgMS42bC02MyAxMS4xYy04LjcgMS41LTE3LjMtNC40LTE1LjktMTMuMSAzLjEtMTkuNiAxOC40LTM2IDM5LjEtMzkuNyAxNy4yLTMgMzMuOSAzLjUgNDQuNiAxNS44bDAtMjIuN2MwLTIyLjUgNi45LTUyLjQgMzIuMy03My40IDI2LTIxLjUgNjcuNy00My45IDEyNC45LTU0LjItMzAuNS0xNi4zLTg2LjMtMzItMTYzLjgtMTguNC04MC4zIDE0LjItMTI4IDUwLjEtMTUwLjEgNzYuMS05IDEwLjUtMTAuOCAyNC45LTguNCAzOC41ek0yMDggMTM4LjdsMCAxNzQuOGMwIDgwLjcgNTAuNSAxNTIuOSAxMjYuNCAxODAuNEwzNjIuMSA1MDRjMTQuMSA1LjEgMjkuNiA1LjEgNDMuNyAwTDQzMy42IDQ5NEM1MDkuNSA0NjYuNCA1NjAgMzk0LjMgNTYwIDMxMy41bDAtMTc0LjhjMC02LjktMi4xLTEzLjgtNy0xOC42LTIyLjYtMjIuNS03OC4yLTU2LTE2OS01NnMtMTQ2LjQgMzMuNi0xNjkgNTZjLTQuOSA0LjktNyAxMS43LTcgMTguNnptNjYuMSAxODcuMWMtMS40LTcgNy0xMSAxMi43LTYuNiAyNi45IDIwLjYgNjAuNiAzMi45IDk3LjIgMzIuOXM3MC4yLTEyLjMgOTcuMi0zMi45YzUuNy00LjQgMTQuMS0uNCAxMi43IDYuNi0xMC4xIDUxLjQtNTUuNSA5MC4zLTEwOS45IDkwLjNzLTk5LjgtMzguOC0xMDkuOS05MC4zem0uNS0xMDEuNUMyODEuMiAyMDUuNSAyOTkgMTkyIDMyMCAxOTJzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN2wtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43ek00ODAgMjQwbC02NCAwYy04LjggMC0xNi4zLTcuNC0xMy40LTE1LjcgNi41LTE4LjggMjQuNC0zMi4zIDQ1LjQtMzIuM3MzOC45IDEzLjUgNDUuNCAzMi4zYzIuOSA4LjQtNC41IDE1LjctMTMuNCAxNS43eiJdCiAgICB9OwogICAgZmFUaGVhdGVyTWFza3MgPSBmYU1hc2tzVGhlYXRlcjsKICAgIGZhQ2FydFBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1wbHVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTciLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiA0MTIuNyAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0zMzYgNzguNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMy42LTMzLjYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy42IDAgMCAzMy42YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMy42IDMzLjYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzMuNiAwIDAtMzMuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtYXNsLWludGVycHJldGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJhbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyIsICJhc2wtaW50ZXJwcmV0aW5nIiwgImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nIl0sICJmMmEzIiwgIk0xNTYuNiA0Ni4zYzcuOS0xNS44IDEuNS0zNS0xNC4zLTQyLjlzLTM1LTEuNS00Mi45IDE0LjNMMTMuNSAxODkuNEM0LjYgMjA3LjIgMCAyMjYuOCAwIDI0Ni43TDAgMjU2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDgwIDAgMC0uM2MzNS4yLTIuNyA2NS40LTIyLjggODIuMS01MS43IDguOC0xNS4zIDMuNi0zNC45LTExLjctNDMuN3MtMzQuOS0zLjYtNDMuNyAxMS43Yy03IDEyLTE5LjkgMjAtMzQuNyAyMC0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwYzE0LjggMCAyNy43IDggMzQuNyAyMCA4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43czIwLjUtMjguNCAxMS43LTQzLjdjLTEyLjgtMjIuMS0zMy42LTM5LjEtNTguNC00Ny4xbDgwLjgtMjJjMTctNC42IDI3LjEtMjIuMiAyMi41LTM5LjNzLTIyLjItMjcuMS0zOS4zLTIyLjVsLTEwMC43IDI3LjUgODEuNi02OGMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xUzI0OS4xLTMuOSAyMzUuNSA3LjRsLTEwMS45IDg0LjkgMjMtNDZ6TTQ4My40IDQ2NS43Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsODUuOS0xNzEuN2M4LjktMTcuOCAxMy41LTM3LjQgMTMuNS01Ny4ybDAtOS4zYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC04MCAwIDAgLjNjLTM1LjIgMi43LTY1LjQgMjIuOC04Mi4xIDUxLjctOC45IDE1LjMtMy42IDM0LjkgMTEuNyA0My43czM0LjkgMy42IDQzLjctMTEuN2M3LTEyIDE5LjktMjAgMzQuNy0yMCAyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGMtMTQuOCAwLTI3LjctOC0zNC43LTIwLTguOS0xNS4zLTI4LjQtMjAuNS00My43LTExLjdzLTIwLjUgMjguNC0xMS43IDQzLjdjMTIuOCAyMi4xIDMzLjYgMzkuMSA1OC40IDQ3LjFsLTgwLjggMjJjLTE3LjEgNC42LTI3LjEgMjIuMi0yMi41IDM5LjNzMjIuMiAyNy4xIDM5LjMgMjIuNWwxMDAuNy0yNy41LTgxLjYgNjhjLTEzLjYgMTEuMy0xNS40IDMxLjUtNC4xIDQ1LjFzMzEuNSAxNS40IDQ1LjEgNC4xbDEwMS45LTg0LjktMjMgNDZ6Il0KICAgIH07CiAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LXVubG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjkxIiwgIk0yNTYgMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptMjU2LTc5Yy00Ni43IDUuOC04NS42IDM2LjgtMTAyLjcgNzlsLTI1LjMgMCAwIDkwLjhjLTEwLjEgMTUuMi0xNiAzMy40LTE2IDUzLjFsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDEyOCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDl6TTEyOCAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem00MzIgNDhjLS4xLTE3LjYtMTQuNC0zMS45LTMyLTMxLjktMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA0NC4yIDAgNzkuOSAzNS44IDgwIDc5LjlsLTQ4IDB6Il0KICAgIH07CiAgICBmYVJvY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNSIsICJNMTI4IDMyMEwyNC41IDMyMGMtMjQuOSAwLTQwLjItMjcuMS0yNy40LTQ4LjVMNTAgMTgzLjNDNTguNyAxNjguOCA3NC4zIDE2MCA5MS4yIDE2MGw5NSAwYzc2LjEtMTI4LjkgMTg5LjYtMTM1LjQgMjY1LjUtMTI0LjMgMTIuOCAxLjkgMjIuOCAxMS45IDI0LjYgMjQuNiAxMS4xIDc1LjkgNC42IDE4OS40LTEyNC4zIDI2NS41bDAgOTVjMCAxNi45LTguOCAzMi41LTIzLjMgNDEuMmwtODguMiA1Mi45Yy0yMS4zIDEyLjgtNDguNS0yLjYtNDguNS0yNy40TDE5MiAzODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLS4xIDB6TTQwMCAxNjBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2hyaW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNocmltcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTQyNF0sICJlNDQ4IiwgIk03MiAzMkMzMi4yIDMyIDAgNjQuMiAwIDEwNCAwIDE0MS45IDI5LjMgMTcyLjkgNjYuNCAxNzUuOCA3Ny42IDI1Ny4yIDE0Ny40IDMyMCAyMzIgMzIwbDU2IDAgMC0xOTItMjE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNzIgMzJ6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNzIgMCAwLTcyLjItNjQuMS0yMi40Yy0xMi41LTQuNC0yNi4yIDIuMi0zMC42IDE0LjdzMi4yIDI2LjIgMTQuNyAzMC42bDQuNSAxLjZDMjMzIDQzMy45IDIyNCA0NDMuOSAyMjQgNDU2em0xMjggMjMuM2MzNi40LTMuMyA2OS41LTE3LjYgOTYuMS0zOS42bC04Ni41LTM0LjZjLTMgMS44LTYuMiAzLjItOS42IDQuM2wwIDY5Ljl6TTQ3Mi42IDQxNWMyNC42LTMwLjMgMzkuNC02OC45IDM5LjQtMTExIDAtMTIuMy0xLjMtMjQuMy0zLjctMzUuOUwzODIuOCAzNTUuMWMuOCAzLjQgMS4yIDcgMS4yIDEwLjYgMCA0LjYtLjcgOS0xLjkgMTMuMUw0NzIuNiA0MTV6TTMzNiAxMjhsLTE2IDAgMCAxOTIgMTguMyAwYzkuOSAwIDE5LjEgMy4yIDI2LjYgOC41bDEzMy41LTkyLjRDNDcxLjggMTcyLjYgNDA5LjEgMTI4IDMzNiAxMjh6TTE2OCAxOTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhVGVuZ2VTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbmdlLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4Mzc2LCAidGVuZ2UiXSwgImY3ZDciLCAiTTAgNTZDMCA0Mi43IDEwLjcgMzIgMjQgMzJsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgODBDMTAuNyA4MCAwIDY5LjMgMCA1NnpNMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwIDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhVGVuZ2UgPSBmYVRlbmdlU2lnbjsKICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2xpbmljLW1lZGljYWwiXSwgImY3ZjIiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMjQgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFDbGluaWNNZWRpY2FsID0gZmFIb3VzZUNoaW1uZXlNZWRpY2FsOwogICAgZmFVc2Vyc1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXNsYXNoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzMiLCAiTTczLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzI5LjctLjMgMzkgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMS44IDIyNGM1Ni42LTEgMTAyLjItNDcuMiAxMDIuMi0xMDQgMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDQtNTYuOCAwLTEwMyA0NS42LTEwNCAxMDIuMkw3My0yNC45ek01MTIgMjg4Yy0xNy4yIDAtMzMuNyAzLjQtNDguNyA5LjZsMTcwIDE3MGM0LjItNS40IDYuNy0xMi4yIDYuNy0xOS42bDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjh6TTU5LjkgOTcuN2MtMjEuNSAxMi41LTM1LjkgMzUuNy0zNS45IDYyLjMgMCAzOS44IDMyLjIgNzIgNzIgNzIgMjYuNiAwIDQ5LjgtMTQuNCA2Mi4zLTM1LjlMNTkuOSA5Ny43ek0yNTAuMiAyODhDMTk2LjggMzEzLjkgMTYwIDM2OC43IDE2MCA0MzJsMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTAuMiAwLTE5Mi0xOTJ6TTEyOCAyODhDNTcuMyAyODggMCAzNDUuMyAwIDQxNmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDg2LjcgMGMtNC4zLTkuOC02LjctMjAuNi02LjctMzJsMC0xNmMwLTUzLjIgMjAtMTAxLjggNTIuOS0xMzguNi0xMS43LTMuNS0yNC4xLTUuNC0zNi45LTUuNHpNNjE2IDE2MGE3MiA3MiAwIDEgMCAtMTQ0IDAgNzIgNzIgMCAxIDAgMTQ0IDB6Il0KICAgIH07CiAgICBmYVBhcGVyUGxhbmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyLXBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE5MTNdLCAiZjFkOCIsICJNNTM2LjQtMjYuM2M5LjgtMy41IDIwLjYtMSAyOCA2LjNzOS44IDE4LjIgNi4zIDI4bC0xNzggNDk2LjljLTUgMTMuOS0xOC4xIDIzLjEtMzIuOCAyMy4xLTE0LjIgMC0yNy04LjYtMzIuMy0yMS43bC02NC4yLTE1OGMtNC41LTExLTIuNS0yMy42IDUuMi0zMi42bDk0LjUtMTEyLjRjNS4xLTYuMSA0LjctMTUtLjktMjAuNnMtMTQuNi02LTIwLjYtLjlMMjI5LjIgMjc2LjFjLTkuMSA3LjYtMjEuNiA5LjYtMzIuNiA1LjJMMzguMSAyMTYuOGMtMTMuMS01LjMtMjEuNy0xOC4xLTIxLjctMzIuMyAwLTE0LjcgOS4yLTI3LjggMjMuMS0zMi44bDQ5Ni45LTE3OHoiXQogICAgfTsKICAgIGZhQm9va0F0bGFzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYXRsYXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYXRsYXMiXSwgImY1NTgiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0zMTAuNiAyMDhMMjc5IDIwOGMtMS40IDIzLjEtNiA0NC4yLTEyLjYgNjEuMiAyMi43LTEyLjUgMzkuNC0zNC44IDQ0LjItNjEuMnptLTE3My4xIDBjNC44IDI2LjQgMjEuNSA0OC43IDQ0LjIgNjEuMi02LjctMTctMTEuMi0zOC0xMi42LTYxLjJsLTMxLjYgMHptNzYuNCA1NWM0LjUgOS42IDguMiAxMy44IDEwLjIgMTUuNSAyLTEuNyA1LjctNS44IDEwLjItMTUuNSA2LjItMTMuNCAxMS4xLTMyLjUgMTIuNy01NWwtNDUuOCAwYzEuNiAyMi41IDYuNSA0MS42IDEyLjcgNTV6bS0xMi43LTg3bDQ1LjggMGMtMS42LTIyLjUtNi41LTQxLjYtMTIuNy01NS00LjUtOS42LTguMi0xMy44LTEwLjItMTUuNS0yIDEuNy01LjcgNS44LTEwLjIgMTUuNS02LjIgMTMuNC0xMS4xIDMyLjUtMTIuNyA1NXptMTA5LjUgMGMtNC44LTI2LjQtMjEuNS00OC43LTQ0LjItNjEuMiA2LjcgMTcgMTEuMiAzOCAxMi42IDYxLjJsMzEuNiAwek0xNjkgMTc2YzEuNC0yMy4xIDYtNDQuMiAxMi42LTYxLjItMjIuNyAxMi41LTM5LjQgMzQuOC00NC4yIDYxLjJsMzEuNiAwek05NiAxOTJhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHoiXQogICAgfTsKICAgIGZhQXRsYXMgPSBmYUJvb2tBdGxhczsKICAgIGZhVGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjZSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMC02LjUtLjNDMjUuMiA0NzYuNCAwIDQ0OS4xIDAgNDE2TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTY0IDMyMGwwIDk2IDEyOCAwIDAtOTYtMTI4IDB6bTE5MiAwbDAgOTYgMTI4IDAgMC05Ni0xMjggMHpNNjQgMjU2bDEyOCAwIDAtOTYtMTI4IDAgMCA5NnptMTkyIDBsMTI4IDAgMC05Ni0xMjggMCAwIDk2eiJdCiAgICB9OwogICAgZmFIZWFydDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNTMsIDEyODE1NCwgMTI4MTU1LCAxMjgxNTYsIDEyODQyMCwgMTI5MjkzLCAxMjkyOTQsIDEyOTUwNSwgOTgyOSwgMTAwODQsIDYxNTc4XSwgImYwMDQiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxMTIuMi0xMzkuOSAyNDIuNS0yMTIuOSAyOTguMi0xMi40IDkuNC0yNy42IDE0LjEtNDMuMSAxNC4xcy0zMC44LTQuNi00My4xLTE0LjFDMTM5LjkgNDEwLjIgMCAyNzkuOSAwIDE2Ny43bDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xeiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGV2cm9uVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtdXAiXSwgImYxMzkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zNzcgMjcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTg3LTg3LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIzOSAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMzc3IDI3MXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZVVwID0gZmFDaXJjbGVDaGV2cm9uVXA7CiAgICBmYUJhdHRlcnlIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktaGFsZiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTMiXSwgImYyNDIiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTMgPSBmYUJhdHRlcnlIYWxmOwogICAgZmFGb250QXdlc29tZTMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI1MDEsIDYyNjk0LCAiZm9udC1hd2Vzb21lLWZsYWciLCAiZm9udC1hd2Vzb21lLWxvZ28tZnVsbCJdLCAiZjJiNCIsICJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lRmxhZzMgPSBmYUZvbnRBd2Vzb21lMzsKICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMgPSBmYUZvbnRBd2Vzb21lMzsKICAgIGZhSGFuZGN1ZmZzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRjdWZmcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGY4IiwgIk0zMjAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyek0xOTIgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xNTIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTZjMCAxIC4xIDEuOSAuMiAyLjktNzQuNyAyNi4zLTEyOC4yIDk3LjUtMTI4LjIgMTgxLjEgMCAxMDYgODYgMTkyIDE5MiAxOTJzMTkyLTg2IDE5Mi0xOTJjMC04My43LTUzLjUtMTU0LjgtMTI4LjItMTgxLjEgLjEtLjkgLjItMS45IC4yLTIuOWwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwek02NCAzMjBhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHptNDQ4IDBjMCA2Ni45LTUxLjMgMTIxLjgtMTE2LjYgMTI3LjUtMTQuMyAyMi44LTMyLjQgNDMuMS01My40IDU5LjkgMTMuNSAzIDI3LjYgNC42IDQyIDQuNiAxMDYgMCAxOTItODYgMTkyLTE5MiAwLTgzLjctNTMuNS0xNTQuOC0xMjguMi0xODEuMSAuMS0uOSAuMi0xLjkgLjItMi45bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDBjLTEyLjMgMC0yMi40IDkuMi0yMy44IDIxLjEgMzAuMyAxOS4yIDU2LjEgNDUgNzUuMiA3NS40IDY1LjQgNS44IDExNi42IDYwLjYgMTE2LjYgMTI3LjV6TTM4NCA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUhhdENvd2JveVNpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGF0LWNvd2JveS1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4YzEiLCAiTTY0MCAzODguM2MwIDE2LjktNy4xIDMyLjItMTguNCA0My4xbC0zNS0yMy4zLTI5Mi43LTE5NS4xYy0zNi4xLTI0LjEtNzguNi0zNi45LTEyMi0zNi45bC0zLjkgMGMtMi43IDAtNS40IDAtOCAuMWwyMi4yLTEwMGM1LjctMjUuOCAyOC42LTQ0LjEgNTUtNDQuMSAxMi4yIDAgMjQuMSA0IDMzLjggMTEuM2w0LjcgMy41YzI2LjMgMTkuNyA2Mi40IDE5LjcgODguNiAwbDQuNy0zLjVjOS44LTcuMyAyMS42LTExLjMgMzMuOC0xMS4zIDI2LjQgMCA0OS4zIDE4LjMgNTUgNDQuMWwzMyAxNDguNUM1NzQuNSAyMzIuMyA2NDAgMzAyLjYgNjQwIDM4OC4zek0xNzEuOSAyMjRjMzMuOSAwIDY3LjEgMTAgOTUuNCAyOC45TDU2MCA0NDggNTYgNDQ4Yy0zMC45IDAtNTYtMjUuMS01Ni01NiAwLTkyLjggNzUuMi0xNjggMTY4LTE2OGwzLjkgMHoiXQogICAgfTsKICAgIGZhSW5kdXN0cnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5kdXN0cnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI3NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTI3OS44YzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xbC0xNTYuNiA4NC4zIDAtNjMuMmMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMUwxMjggMjE1LjQgMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFMaW5lc0xlYW5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGluZXMtbGVhbmluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTFlIiwgIk0xOTAuNCA3NC4xYzUuNi0xNi44LTMuNS0zNC45LTIwLjItNDAuNXMtMzQuOSAzLjUtNDAuNSAyMC4ybC0xMjggMzg0Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDEyOC0zODR6bTcwLjktNDEuN2MtMTcuNC0yLjktMzMuOSA4LjktMzYuOCAyNi4zbC02NCAzODRjLTIuOSAxNy40IDguOSAzMy45IDI2LjMgMzYuOHMzMy45LTguOSAzNi44LTI2LjNsNjQtMzg0YzIuOS0xNy40LTguOS0zMy45LTI2LjMtMzYuOHpNMzUyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFQYXNzcG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXNzcG9ydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWFiIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0yNzguNiAyMDhjLTQuOCAyNi40LTIxLjUgNDguNy00NC4yIDYxLjIgNi43LTE3IDExLjItMzggMTIuNi02MS4ybDMxLjYgMHptLTE3My4xIDBsMzEuNiAwYzEuNCAyMy4xIDYgNDQuMiAxMi42IDYxLjItMjIuNy0xMi41LTM5LjQtMzQuOC00NC4yLTYxLjJ6bTc2LjQgNTVjLTYuMi0xMy40LTExLjEtMzIuNS0xMi43LTU1bDQ1LjggMGMtMS42IDIyLjUtNi41IDQxLjYtMTIuNyA1NS00LjUgOS42LTguMiAxMy44LTEwLjIgMTUuNS0yLTEuNy01LjctNS44LTEwLjItMTUuNXptMC0xNDJjNC41LTkuNiA4LjItMTMuOCAxMC4yLTE1LjUgMiAxLjcgNS43IDUuOCAxMC4yIDE1LjUgNi4yIDEzLjQgMTEuMSAzMi41IDEyLjcgNTVsLTQ1LjggMGMxLjYtMjIuNSA2LjUtNDEuNiAxMi43LTU1em05Ni43IDU1TDI0NyAxNzZjLTEuNC0yMy4xLTYtNDQuMi0xMi42LTYxLjIgMjIuNyAxMi41IDM5LjQgMzQuOCA0NC4yIDYxLjJ6TTEzNyAxNzZsLTMxLjYgMGM0LjgtMjYuNCAyMS41LTQ4LjcgNDQuMi02MS4yLTYuNyAxNy0xMS4yIDM4LTEyLjYgNjEuMnptMTgzIDE2YTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6Il0KICAgIH07CiAgICBmYUluZmluaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImluZmluaXR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbODczNCwgOTg1NF0sICJmNTM0IiwgIk0wIDI1NmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MCA1MC40IDAgOTcuOCAyMy43IDEyOCA2NGwzMiA0Mi43IDMyLTQyLjdjMzAuMi00MC4zIDc3LjYtNjQgMTI4LTY0IDg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwUzU2OC40IDQxNiA0ODAgNDE2Yy01MC40IDAtOTcuOC0yMy43LTEyOC02NGwtMzItNDIuNy0zMiA0Mi43Yy0zMC4yIDQwLjMtNzcuNiA2NC0xMjggNjQtODguNCAwLTE2MC03MS42LTE2MC0xNjB6bTI4MCAwbC00My4yLTU3LjZjLTE4LjEtMjQuMi00Ni42LTM4LjQtNzYuOC0zOC40LTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMzAuMiAwIDU4LjctMTQuMiA3Ni44LTM4LjRMMjgwIDI1NnptODAgMGw0My4yIDU3LjZjMTguMSAyNC4yIDQ2LjYgMzguNCA3Ni44IDM4LjQgNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLTMwLjIgMC01OC43IDE0LjItNzYuOCAzOC40TDM2MCAyNTZ6Il0KICAgIH07CiAgICBmYUNsb25lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9uZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjRkIiwgIk0yODggNDQ4bC0yMjQgMCAwLTIyNCA0OCAwIDAtNjQtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC00OC02NCAwIDAgNDh6bS02NC05NmwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYUZvcndhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzkxOTNdLCAiZjA0ZSIsICJNMzcxLjcgNDMuMUMzNjAuMSAzMiAzNDMgMjguOSAzMjguMyAzNS4yUzMwNCA1NiAzMDQgNzJsMCAxMzYuMy0xNzIuMy0xNjUuMUMxMjAuMSAzMiAxMDMgMjguOSA4OC4zIDM1LjJTNjQgNTYgNjQgNzJsMCAzNjhjMCAxNiA5LjYgMzAuNSAyNC4zIDM2LjhzMzEuOCAzLjIgNDMuNC03LjlMMzA0IDMwMy43IDMwNCA0NDBjMCAxNiA5LjYgMzAuNSAyNC4zIDM2LjhzMzEuOCAzLjIgNDMuNC03LjlsMTkyLTE4NGM3LjktNy41IDEyLjMtMTggMTIuMy0yOC45cy00LjUtMjEuMy0xMi4zLTI4LjlsLTE5Mi0xODR6Il0KICAgIH07CiAgICBmYU0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwOV0sICI0ZCIsICJNMjIuNyAzMy40YzEzLjUtNC4xIDI4LjEgMS4xIDM1LjkgMTIuOUwyMjQgMjk0LjMgMzg5LjQgNDYuM2M3LjgtMTEuNyAyMi40LTE3IDM1LjktMTIuOVM0NDggNDkuOSA0NDggNjRsMCAzODRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNzguMy0xMzMuNCAyMDAuMWMtNS45IDguOS0xNS45IDE0LjItMjYuNiAxNC4ycy0yMC43LTUuMy0yNi42LTE0LjJMNjQgMTY5LjcgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ5LjkgOS4yIDM3LjUgMjIuNyAzMy40eiJdCiAgICB9OwogICAgZmFSb2FkU3Bpa2VzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtc3Bpa2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjgiLCAiTTY0IDExNi44YzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDYwNi44IDMwMi4yYzE0LjIgMjEuMy0xLjEgNDkuOC0yNi42IDQ5LjhMNjQgMzUyIDY0IDExNi44ek0zMiAzODRsNTc2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFNb3VudGFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3VudGFpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1Nl0sICJmNmZjIiwgIk0yNTYuNSAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNS03LjIgMTIuMS0yMC4zIDE5LjUtMzQuMyAxOS41bC00MzIgMGMtMTQuMSAwLTI3LjEtNy40LTM0LjMtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwIDIuOS00LjZDMjMxLjcgNi4yIDI0My42IDAgMjU2LjUgMHpNMTcwLjQgMjQ5LjlsMjYuOCAyNi44YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDQzLjMtNDMuM2M2LTYgMTQuMS05LjQgMjIuNi05LjRsNDIuOCAwLTcyLjEtMTMzLjUtODYuMSAxNTkuNHoiXQogICAgfTsKICAgIGZhQ2hlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQzOSIsICJNMTY4IDU2bDAgNDAtNzguMSAwYy0xNC4zIDAtMjUuOSAxMS42LTI1LjkgMjUuOSAwIDQgLjkgOCAyLjcgMTEuNmwzMy40IDY2LjhjLTExLjQgMS44LTIwLjIgMTEuNy0yMC4yIDIzLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRsNS42IDAtMTMuNiAxMzYtNTYuMiA3MC4zYy01IDYuMy03LjggMTQuMS03LjggMjIuMiAwIDE5LjYgMTUuOSAzNS41IDM1LjUgMzUuNWwyNDguOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4yTDI4OCAzODQgMjc0LjQgMjQ4IDI4MCAyNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjQgMC0xMS45LTguNy0yMS45LTIwLjItMjMuN2wzMy40LTY2LjhjMS44LTMuNiAyLjctNy42IDIuNy0xMS42IDAtMTQuMy0xMS42LTI1LjktMjUuOS0yNS45bC03OC4xIDAgMC00MCAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzI0NS4zIDggMjMyIDhsLTE2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNFMxNjgtMjEuMyAxNjgtOGwwIDE2LTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMHpNMzI1LjggMjc5LjZsOC41IDg1LjUgNDcuNCA1OS4yIDQuMiA1LjdjOS4yIDEzLjcgMTQuMSAyOS45IDE0LjEgNDYuNSAwIDEyLjctMi44IDI0LjgtNy45IDM1LjVsODMuMSAwYzIwLjMgMCAzNi44LTE2LjUgMzYuOC0zNi44IDAtNy4zLTIuMi0xNC40LTYuMi0yMC40bC0yNS44LTM4LjcgMC02NCAxMy4zLTEzLjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYtMzIgMCAwLTE2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJjMCAyMi40LTEwLjIgNDIuNC0yNi4yIDU1LjZ6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS10aHJlZS1xdWFydGVycyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJ0ZW1wZXJhdHVyZS0zIiwgInRoZXJtb21ldGVyLTMiLCAidGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnMiXSwgImYyYzgiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM0wxMzYgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNTYuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOwogICAgZmFUaGVybW9tZXRlcjMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVyczsKICAgIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7CiAgICBmYUIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzk4XSwgIjQyIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNDYuNS0yNC44LTg3LjMtNjItMTA5LjcgMTguNy0yMi4zIDMwLTUxIDMwLTgyLjMgMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTE2MCAyMjRsLTk2IDAgMC0xMjggOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNNjQgMjg4bDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMjggMCAwLTEyOHoiXQogICAgfTsKICAgIGZhU2hpZWxkVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLXZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNmMiLCAiTTI1My40IDIuOUMyNDkuMiAxIDI0NC43IDAgMjQwIDBzLTkuMiAxLTEzLjQgMi45TDM4LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjUzLjQgMi45ek0yNDAgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjA4IDI2NGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUxpdGVjb2luU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXRlY29pbi1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxZDMiLCAiTTEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0bDAgMTU3LjktMzguNiAxMWMtMTIuNyAzLjYtMjAuMSAxNi45LTE2LjUgMjkuN3MxNi45IDIwLjEgMjkuNyAxNi41TDY0IDI3MS44IDY0IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xNjIuNSAxMzQuNi0zOC41YzEyLjctMy42IDIwLjEtMTYuOSAxNi41LTI5LjdzLTE2LjktMjAuMS0yOS43LTE2LjVMMTI4IDIwMy42IDEyOCA2NHoiXQogICAgfTsKICAgIGZhRGljZUQ2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZDYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZkMSIsICJNMjI0LjQgOC4zQzI0NC0yLjggMjY4LTIuOCAyODcuNiA4LjNsMTc2IDk5LjdjMjAgMTEuNCAzMi40IDMyLjYgMzIuNCA1NS43bDAgMTk3LjRjMCAyMy0xMi40IDQ0LjMtMzIuNCA1NS43bC0xNzYgOTkuN2MtMTkuNiAxMS4xLTQzLjYgMTEuMS02My4xIDBsLTE3Ni05OS43QzI4LjQgNDA1LjUgMTYgMzg0LjIgMTYgMzYxLjJsMC0xOTcuNGMwLTIzIDEyLjQtNDQuMyAzMi40LTU1LjdsMTc2LTk5Ljd6TTEwMi42IDE1NS42Yy04LjgtMy4xLTE4LjggLjMtMjMuOCA4LjZzLTMuMiAxOC43IDMuNiAyNWwzLjIgMi40IDE1MC4yIDkwLjIgMCAxNDguN2MwIDExIDkgMjAgMjAgMjAgMTEgMCAyMC05IDIwLTIwbDAtMTQ4LjcgMTUwLjMtOTAuMmM5LjUtNS43IDEyLjYtMTggNi45LTI3LjRzLTE4LTEyLjUtMjcuNC02LjlsLTE0OS43IDg5LjgtMTQ5LjctODkuOC0zLjctMS43eiJdCiAgICB9OwogICAgZmFHcmlwTGluZXNWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmlwLWxpbmVzLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImY3YTUiLCAiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgNjR6bTEyOCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODR6Il0KICAgIH07CiAgICBmYUdvbGZCYWxsVGVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdvbGYtYmFsbC10ZWUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZ29sZi1iYWxsIl0sICJmNDUwIiwgIk0yOTguNSAzODQuMWMxMi4xIDEuMiAyMS41IDExLjUgMjEuNSAyMy45cy05LjQgMjIuNi0yMS41IDIzLjlsLTIuNSAuMS04MCAwIDAgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04OC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEyLjQgOS40LTIyLjYgMjEuNS0yMy45bDIuNS0uMSAyMDggMCAyLjUgLjF6TTE5MiAwYzEwNiAwIDE5MiA4NiAxOTIgMTkyIDAgNTcuNC0yNS4yIDEwOC44LTY1LjEgMTQ0TDY1LjEgMzM2QzI1LjIgMzAwLjggMCAyNDkuNCAwIDE5MiAwIDg2IDg2IDAgMTkyIDB6bTMyIDI0MGMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2em02NC02NGMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2em0tODAtMTZjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhR29sZkJhbGwgPSBmYUdvbGZCYWxsVGVlOwogICAgZmFIZXhhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhleGFnb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTA0M10sICJmMzEyIiwgIk0zMy41IDIyMC4zYy0xMi43IDIyLjItMTIuNyA0OS40IDAgNzEuNWw5Ni4yIDE2OC4xYzEyLjggMjIuNCAzNi43IDM2LjIgNjIuNSAzNi4ybDE5MS42IDBjMjUuOCAwIDQ5LjctMTMuOCA2Mi41LTM2LjJsOTYuMi0xNjguMWMxMi43LTIyLjIgMTIuNy00OS40IDAtNzEuNUw0NDYuMyA1Mi4yQzQzMy41IDI5LjggNDA5LjYgMTYgMzgzLjggMTZMMTkyLjIgMTZjLTI1LjggMC00OS43IDEzLjgtNjIuNSAzNi4yTDMzLjUgMjIwLjN6Il0KICAgIH07CiAgICBmYUZvbGRlck9wZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci1vcGVuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTk0LCAxMjg0NDksIDYxNzE3XSwgImYwN2MiLCAiTTU2IDIyNS42TDMyLjQgMjk2LjIgMzIuNCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRsMTE3LjMgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTM2NS40IDBjLTQxLjMgMC03OCAyNi40LTkxLjEgNjUuNnpNNDc3LjggNDQ4TDk5IDQ0OGMtMzIuOCAwLTU1LjktMzIuMS00NS41LTYzLjJsNDgtMTQ0QzEwOCAyMjEuMiAxMjYuNCAyMDggMTQ3IDIwOGwzNzguOCAwYzMyLjggMCA1NS45IDMyLjEgNDUuNSA2My4ybC00OCAxNDRjLTYuNSAxOS42LTI0LjkgMzIuOC00NS41IDMyLjh6Il0KICAgIH07CiAgICBmYUthYWJhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImthYWJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzMxXSwgImY2NmIiLCAiTTI1NiA1MS4zTDkyLjggMTEyLjQgMjQ3LjUgMTcxLjFjNS41IDIuMSAxMS41IDIuMSAxNyAwTDQxOS4yIDExMi40IDI1NiA1MS4zek0wIDEyOS4zYzAtMjAgMTIuNC0zNy45IDMxLjEtNDQuOWwyMDgtNzhjMTAuOS00LjEgMjIuOC00LjEgMzMuNyAwbDIwOCA3OGMxOC43IDcgMzEuMSAyNC45IDMxLjEgNDQuOWwwIDM2LTI1My4yIDk2Yy0xLjggLjctMy44IC43LTUuNyAwbC0yNTMuMi05NiAwLTM2em0wIDE0MGwwLTUyLjcgMjM2LjEgODkuNmMxMi44IDQuOSAyNi45IDQuOSAzOS43IDBsMjM2LjEtODkuNiAwIDUyLjctMTI4IDQ4LjYgMCA1MS4zIDEyOC00OC42IDAgNjIuMmMwIDIwLTEyLjQgMzcuOS0zMS4xIDQ0LjlsLTIwOCA3OGMtMTAuOSA0LjEtMjIuOCA0LjEtMzMuNyAwbC0yMDgtNzhDMTIuNCA0MjAuNyAwIDQwMi43IDAgMzgyLjdsMC02Mi4yIDEyOCA0OC42IDAtNTEuMy0xMjgtNDguNnpNMjM2LjEgNDEwLjFjMTIuOCA0LjkgMjYuOSA0LjkgMzkuNyAwbDYwLjEtMjIuOCAwLTUxLjMtNzcuMiAyOS4zYy0xLjggLjctMy44IC43LTUuNyAwbC03Ny4yLTI5LjMgMCA1MS4zIDYwLjEgMjIuOHoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0YmQiLCAiTTY2LjcgMzg0bDQyLjUtNDIuNWMyNC0yNCA1Ni42LTM3LjUgOTAuNS0zNy41TDM1MiAzMDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyLjYgMCAxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXM5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM0LjcgMHoiXQogICAgfTsKICAgIGZhU2luZ2xlUXVvdGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaW5nbGUtcXVvdGUtcmlnaHQiLAogICAgICBpY29uOiBbMTkyLCA1MTIsIFtdLCAiZTgxYyIsICJNNjQgNDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDB6Il0KICAgIH07CiAgICBmYUJvdHRsZURyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm90dGxlLWRyb3BsZXQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTRjNCIsICJNODAgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTAzLjNjNjQuOSAyMC40IDExMiA4MSAxMTIgMTUyLjdsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGMwLTcxLjYgNDcuMS0xMzIuMyAxMTItMTUyLjdMMTEyIDMyQzk0LjMgMzIgODAgMTcuNyA4MCAwem04MCA0MTZjMzUuMyAwIDY0LTMyLjQgNjQtNjQgMC0yMS4yLTI4LjktNjQuNS00Ny45LTkwLjYtOC4xLTExLjEtMjQuMi0xMS4xLTMyLjMgMC0xOSAyNi4xLTQ3LjkgNjkuNC00Ny45IDkwLjYgMCAzMS42IDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYVdpbmRvd01pbmltaXplMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWluaW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NjldLCAiZjJkMSIsICJNMCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQ2hldnJvblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tcmlnaHQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5MDAyXSwgImYwNTQiLCAiTTMxMS4xIDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xOTIgMTkyYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDMuMiAyNTYgNzMuOSA4Ni42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJ6Il0KICAgIH07CiAgICBmYUVnZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlZ2ciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjkzNzBdLCAiZjdmYiIsICJNMTkyIDQ5NkM4NiA0OTYgMCAzOTQgMCAyODggMCAxNzYgNjQgMTYgMTkyIDE2UzM4NCAxNzYgMzg0IDI4OGMwIDEwNi04NiAyMDgtMTkyIDIwOHpNMTU0LjggMTM0YzYuNS02IDctMTYuMSAxLTIyLjZzLTE2LjEtNy0yMi42LTFjLTIzLjkgMjEuOC00MS4xIDUyLjctNTIuMyA4NC4yLTExLjIgMzEuNi0xNi45IDY1LjEtMTYuOSA5My41IDAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC0yNC41IDUtNTQuNCAxNS4xLTgyLjggMTAuMS0yOC41IDI1LTU0LjEgNDMuNy03MS4yeiJdCiAgICB9OwogICAgZmFMYW5kbWFya0RvbWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZG1hcmstZG9tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYW5kbWFyay1hbHQiXSwgImY3NTIiLCAiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIC45IDAgMS44IC4xIDIuNi04MC41IDEzLjQtMTQ0IDc2LjktMTU3LjUgMTU3LjRMNjQgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMTYwLTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDQ0OCA0MTYgNDQ4IDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMi43IDBjLTEzLjUtODAuNC03Ny0xNDMuOS0xNTcuNS0xNTcuNCAuMS0uOSAuMS0xLjcgLjEtMi42IDAtMTcuNy0xNC4zLTMyLTMyLTMyem04MCAyNTZsNjQgMCAwIDE2MC02NCAwIDAtMTYwek0yMjQgNDE2bDAtMTYwIDY0IDAgMCAxNjAtNjQgMHpNMTEyIDI1Nmw2NCAwIDAgMTYwLTY0IDAgMC0xNjB6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrQWx0ID0gZmFMYW5kbWFya0RvbWU7CiAgICBmYVdvcm0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid29ybSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTk5IiwgIk0yMjQgOTZjMC01MyA0My05NiA5Ni05NmwzOC40IDBDNDA3LjkgMCA0NDggNDAuMSA0NDggODkuNkw0NDggMzc2YzAgNzUuMS02MC45IDEzNi0xMzYgMTM2UzE3NiA0NTEuMSAxNzYgMzc2bDAtODBjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBsMCAxNjhjMCAyNi41LTIxLjUgNDgtNDggNDhTMCA0OTAuNSAwIDQ2NEwwIDI5NmMwLTc1LjEgNjAuOS0xMzYgMTM2LTEzNnMxMzYgNjAuOSAxMzYgMTM2bDAgODBjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTE4NC0zMiAwYy01MyAwLTk2LTQzLTk2LTk2em0xNDQtOGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFVc2VySW5qdXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWluanVyZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjcyOCIsICJNMjQyLjcgODBMMzM0IDgwYy0xMC43LTI0LjYtMjkuNS00NC45LTUyLjktNTcuNkwyNDIuNyA4MHptLS45LTcwLjdDMjM2IDguNCAyMzAgOCAyMjQgOCAxNzQuOCA4IDEzMi41IDM3LjYgMTE0IDgwbDgwLjYgMCA0Ny4xLTcwLjd6TTIyNCAyNDhjNjYuMyAwIDEyMC01My43IDEyMC0xMjBsLTI0MCAwYzAgNjYuMyA1My43IDEyMCAxMjAgMTIwek05OC43IDM0MS44QzQ5LjMgMzcwLjIgMTYgNDIzLjUgMTYgNDg0LjYgMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsMTUxIDAtOTUuOC0xNzAuMnptNDUuMS0xNy43bDQyLjcgNzUuOSA4NS41IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCAxMS40LTIuNCAyMi4yLTYuNyAzMmw1OS4yIDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC05MC45LTczLjctMTY0LjYtMTY0LjYtMTY0LjZsLTg2LjkgMGMtMTIuNiAwLTI0LjkgMS40LTM2LjcgNC4xek0yMTMuNSA0NDhsMzYgNjQgMjIuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01OC41IDB6Il0KICAgIH07CiAgICBmYVN0cmlrZXRocm91Z2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RyaWtldGhyb3VnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGNjIiwgIk05NiAxNTcuNUM5NiA4OC4yIDE1Mi4yIDMyIDIyMS41IDMyTDM2OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwyMjEuNSA5NmMtMzQgMC02MS41IDI3LjUtNjEuNSA2MS41IDAgMzEgMjMuMSA1Ny4yIDUzLjkgNjFsNDQuMSA1LjUgMjIyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgzLjEgMEMxMDMgMjA0LjYgOTYgMTgxLjggOTYgMTU3LjV6TTM0OS4yIDMzNmw2NS41IDBjLjkgNi4xIDEuNCAxMi4yIDEuNCAxOC41IDAgNjkuMy01Ni4yIDEyNS41LTEyNS41IDEyNS41TDE0NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ2LjUgMGMzNCAwIDYxLjUtMjcuNSA2MS41LTYxLjUgMC02LjQtMS0xMi43LTIuOC0xOC41eiJdCiAgICB9OwogICAgZmFCbG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJsb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc4MSIsICJNMjI0IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0IDE0NS44IDAgMjY0IDExOC4yIDI2NCAyNjQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTkuMy05Ni43LTIxNi0yMTYtMjE2LTEzLjMgMC0yNC0xMC43LTI0LTI0ek04MCA5NmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDIyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4LTIxLjUtNDgtNDgtNDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNiA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NFMyNTUuNSA1MTIgMTc2IDUxMiAzMiA0NDcuNSAzMiAzNjhsMC0yMjRjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE2OCAwYzkyLjggMCAxNjggNzUuMiAxNjggMTY4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNjYuMy01My43LTEyMC0xMjAtMTIwLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVN0b3B3YXRjaDIwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3B3YXRjaC0yMCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDZmIiwgIk0xNjguNSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAyNS4zYy0xMDggMTEuOS0xOTIgMTAzLjUtMTkyIDIxNC43IDAgMTE5LjMgOTYuNyAyMTYgMjE2IDIxNnMyMTYtOTYuNyAyMTYtMjE2YzAtMzkuOC0xMC44LTc3LjEtMjkuNi0xMDkuMmwyOC4yLTI4LjJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTIzLjQgMjMuNGMtMzIuOS0zMC4yLTc1LjItNTAuMy0xMjItNTUuNWwwLTI1LjMgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDB6bS02MCAyNDBjMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwwIDMuOGMwIDExLjctMy4yIDIzLjEtOS4zIDMzbC00My44IDcxLjIgMzMuMSAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNTcuOCAwYy0xNC41IDAtMjYuMi0xMS43LTI2LjItMjYuMiAwLTQuOSAxLjMtOS42IDMuOS0xMy44bDU2LjctOTIuMWMyLjItMy42IDMuNC03LjggMy40LTEyLjFsMC0zLjhjMC02LjYtNS40LTEyLTEyLTEycy0xMiA1LjQtMTIgMTJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwem0xODAtNTJjMjguNyAwIDUyIDIzLjMgNTIgNTJsMCA5NmMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTk2YzAtMjguNyAyMy4zLTUyIDUyLTUyem0tMTIgNTJsMCA5NmMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtOTZjMC02LjYtNS40LTEyLTEyLTEycy0xMiA1LjQtMTIgMTJ6Il0KICAgIH07CiAgICBmYVRydWNrUGlja3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXBpY2t1cCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODc2M10sICJmNjNjIiwgIk0zNjMuOCA5Nmw1Ny42IDk2LTEzMy40IDAgMC05NiA3NS44IDB6TTQ5NiAxOTJMNDE4LjYgNjMuMUM0MDcuMSA0My44IDM4Ni4yIDMyIDM2My44IDMyTDI1NiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjgtMTQ0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIuNCAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGMwLTIuNy0uMS01LjQtLjQtOGwxNjAuNyAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGMwLTIuNy0uMS01LjQtLjQtOGwzMi40IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC04MGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNMTEyIDM5MmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwem0zNzYtNDBhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdCiAgICB9OwogICAgZmFTZWVkbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZWVkbGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc5MywgInNwcm91dCJdLCAiZjRkOCIsICJNNTEyIDMyQzUxMiAxNDAuMSA0MzUuNCAyMzAuMyAzMzMuNiAyNTEuNCAzMjUuNyAxOTMuMyAyOTkuNiAxNDEgMjYxLjEgMTAwLjUgMzAxLjIgNDAgMzY5LjkgMCA0NDggMGwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDMyIDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNGwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MEMxMDAuMyAzMjAgMCAyMTkuNyAwIDk2eiJdCiAgICB9OwogICAgZmFTcHJvdXQgPSBmYVNlZWRsaW5nOwogICAgZmFUcmFuc2dlbmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFuc2dlbmRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk4OTUsICJ0cmFuc2dlbmRlci1hbHQiXSwgImYyMjUiLCAiTTEyOC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5Ny45IDMyIDEzNiA3MC4xIDE1MSA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTE1IDE1IDE0LjIgMTQuMmMyNy45LTIzLjggNjQuMi0zOC4yIDEwMy44LTM4LjIgMzYuNyAwIDcwLjYgMTIuNCA5Ny42IDMzLjJMNDY2LjcgMzIgNDQ4IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjctODQuNCA4NC40YzEzIDIzLjEgMjAuNCA0OS45IDIwLjQgNzguMyAwIDc3LjQtNTUgMTQyLTEyOCAxNTYuOGwwIDM1LjIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtMzUuMmMtNzMtMTQuOC0xMjgtNzkuNC0xMjgtMTU2LjggMC0zMS40IDktNjAuNyAyNC43LTg1LjRsLTE2LjctMTYuNy0xNSAxNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxNS0xNS0zOC4xLTM4LjEgMCAzMC4xYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgMTEzLjcgMCA5NkwwIDBDMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMHpNMjg4IDMzNmE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnoiXQogICAgfTsKICAgIGZhVHJhbnNnZW5kZXJBbHQgPSBmYVRyYW5zZ2VuZGVyOwogICAgZmFTdGFySGFsZjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE3MzFdLCAiZjA4OSIsICJNMzA0LjEgNy42YzAtMTEuMS03LjYtMjAuNy0xOC40LTIzLjNzLTIxLjkgMi41LTI3IDEyLjRMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyOTEgNDE2LjFjOC00LjEgMTMuMS0xMi40IDEzLjEtMjEuNGwwLTM4Ny4xeiJdCiAgICB9OwogICAgZmFQaG90b0ZpbG0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvdG8tZmlsbSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwaG90by12aWRlbyJdLCAiZjg3YyIsICJNMTkyIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDU3NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjR6TTMyMCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0xNTYuNSAxMS41QzQ3Mi4xIDEwMC40IDQ2NC40IDk2IDQ1NiA5NnMtMTYuMSA0LjQtMjAuNSAxMS41bC01NCA4OC4zLTE3LjktMjUuNmMtNC41LTYuNC0xMS44LTEwLjItMTkuNy0xMC4ycy0xNS4yIDMuOC0xOS43IDEwLjJsLTU2IDgwYy01LjEgNy4zLTUuOCAxNi45LTEuNiAyNC44UzI3OS4xIDI4OCAyODggMjg4bDI1NiAwYzguNyAwIDE2LjctNC43IDIwLjktMTIuM3M0LjEtMTYuOC0uNS0yNC4zbC04OC0xNDR6TTE0NCAxMjhsMCAxNjBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMTkyIDAgMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDgwIDB6TTUyIDE5NmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAwem0wIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYVBob3RvVmlkZW8gPSBmYVBob3RvRmlsbTsKICAgIGZhUGljdHVyZUluUGljdHVyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaWN0dXJlLWluLXBpY3R1cmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTgwYiIsICJNNDQ4IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTEyLTY0IDAgMC0xMTItMzg0IDAgMCAzMjAgMTQ0IDAgMCA2NC0xNDQgMC02LjUtLjNjLTMwLjEtMy4xLTU0LjEtMjctNTcuMS01Ny4xTDAgNDE2IDAgOTZDMCA2Mi45IDI1LjIgMzUuNiA1Ny41IDMyLjNMNjQgMzIgNDQ4IDMyem0xNiAyMjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyOGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNjAgMHoiXQogICAgfTsKICAgIGZhUHVtcE1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHVtcC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwNmEiLCAiTTk2IDBsMCA4MCAxMjggMCAwLTI0IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgOCAyOTYgOGwtNzIgMCAwLThjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBDMTEwLjMtMzIgOTYtMTcuNyA5NiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHptNjQgMTIwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFGaXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyOTNdLCAiZjA2ZCIsICJNMTYwLjUtMjYuNGM5LjMtNy44IDIzLTcuNSAzMS45IC45IDEyLjMgMTEuNiAyMy4zIDI0LjQgMzMuOSAzNy40IDEzLjUgMTYuNSAyOS43IDM4LjMgNDUuMyA2NC4yIDUuMi02LjggMTAtMTIuOCAxNC4yLTE3LjkgMS4xLTEuMyAyLjItMi43IDMuMy00LjEgNy45LTkuOCAxNy43LTIyLjEgMzAuOC0yMi4xIDEzLjQgMCAyMi44IDExLjkgMzAuOCAyMi4xIDEuMyAxLjcgMi42IDMuMyAzLjkgNC44IDEwLjMgMTIuNCAyNCAzMC4zIDM3LjcgNTIuNCAyNy4yIDQzLjkgNTUuNiAxMDYuNCA1NS42IDE3Ni42IDAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRTMCA0MTEuNyAwIDI4OGMwLTkxLjEgNDEuMS0xNzAgODAuNS0yMjUgMTkuOS0yNy43IDM5LjctNDkuOSA1NC42LTY1LjEgOC4yLTguNCAxNi41LTE2LjcgMjUuNS0yNC4yek0yMjUuNyA0MTZjMjUuMyAwIDQ3LjctNyA2OC44LTIxIDQyLjEtMjkuNCA1My40LTg4LjIgMjguMS0xMzQuNC00LjUtOS0xNi05LjYtMjIuNS0ybC0yNS4yIDI5LjNjLTYuNiA3LjYtMTguNSA3LjQtMjQuNy0uNS0xNy4zLTIyLjEtNDkuMS02Mi40LTY1LjMtODMtNS40LTYuOS0xNS4yLTgtMjEuNS0xLjktMTguMyAxNy44LTUxLjUgNTYuOC01MS41IDEwNC4zIDAgNjguNiA1MC42IDEwOS4yIDExMy43IDEwOS4yeiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtcGx1cyJdLCAiZjAwZSIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMDggMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMCAwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OCA0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVNlYXJjaFBsdXMgPSBmYU1hZ25pZnlpbmdHbGFzc1BsdXM7CiAgICBmYUZsYXNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsYXNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwYzMiLCAiTTI4OCAwTDEyOCAwQzExMC4zIDAgOTYgMTQuMyA5NiAzMnMxNC4zIDMyIDMyIDMyTDEyOCAyMTUuNSA3LjUgNDI2LjNDMi42IDQzNSAwIDQ0NC43IDAgNDU0LjcgMCA0ODYuNCAyNS42IDUxMiA1Ny4zIDUxMmwzMzMuNCAwYzMxLjYgMCA1Ny4zLTI1LjYgNTcuMy01Ny4zIDAtMTAtMi42LTE5LjgtNy41LTI4LjRMMzIwIDIxNS41IDMyMCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMlMzMzcuNyAwIDMyMCAwTDI4OCAwek0xOTIgMjE1LjVsMC0xNTEuNSA2NCAwIDAgMTUxLjVjMCAxMS4xIDIuOSAyMi4xIDguNCAzMS44bDQxLjYgNzIuNy0xNjQgMCA0MS42LTcyLjdjNS41LTkuNyA4LjQtMjAuNiA4LjQtMzEuOHoiXQogICAgfTsKICAgIGZhQWxpZ25SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM4IiwgIk00NDggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMTkyIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFDYWJsZUNhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWJsZS1jYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NzMsIDU3NTUxLCAidHJhbSJdLCAiZjdkYSIsICJNMjg4LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTYwIDI0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTMyIDI4OGMwLTM1LjMgMjguNy02NCA2NC02NGwxMzYgMCAwLTk2LjItMTkzLjQgNTUuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDIyNC02NCAwIDAgMjI0LTY0YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTIwNi42IDU5IDAgMTA5LjkgMTM2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE2MHptODAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDU2IDAgMC05Ni01NiAwem0xODQgOTZsMC05Ni04MCAwIDAgOTYgODAgMHptNDggMGw1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNmwtNTYgMCAwIDk2eiJdCiAgICB9OwogICAgZmFUcmFtID0gZmFDYWJsZUNhcjsKICAgIGZhS2l0TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXQtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmaXJzdC1haWQiXSwgImY0NzkiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE2IDAgMC0zODQtMTYgMHptNjQgMGwwIDM4NCAyNTYgMCAwLTM4NC0yNTYgMHpNNDQ4IDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMTYgMCAwIDM4NCAxNiAwek0yMjQgMTg0YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFGaXJzdEFpZCA9IGZhS2l0TWVkaWNhbDsKICAgIGZhR3JpcExpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAtbGluZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdhNCIsICJNMzIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI4OHptMC0xMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTYweiJdCiAgICB9OwogICAgZmFCdXJnZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVyZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhhbWJ1cmdlciJdLCAiZjgwNSIsICJNNDggMzg0Yy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMjg4IDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC04LjgtNy4yLTE2LTE2LTE2TDQ4IDM4NHpNMzIgMjAyYzAgMTIuMiA5LjkgMjIgMjIgMjJMNDU4IDIyNGMxMi4yIDAgMjItOS45IDIyLTIyIDAtMTcuMi0yLjYtMzQuNC0xMC44LTQ5LjUtMjIuMi00MC44LTgyLjMtMTIwLjUtMjEzLjItMTIwLjVTNjUgMTExLjYgNDIuOCAxNTIuNUMzNC42IDE2Ny42IDMyIDE4NC44IDMyIDIwMnpNMCAzMDRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjcyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjU2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMTIwIDEyOGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yNDgtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFIYW1idXJnZXIgPSBmYUJ1cmdlcjsKICAgIGZhU25vd21hbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbm93bWFuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTczMSwgOTkyNF0sICJmN2QwIiwgIk00MDMgMjExLjdjMzIuMi0yNC45IDUzLTYzLjkgNTMtMTA3LjcgMC03NS4xLTYwLjktMTM2LTEzNi0xMzZTMTg0IDI4LjkgMTg0IDEwNGMwIDQzLjkgMjAuOCA4Mi45IDUzIDEwNy43LTMyLjIgMTYuMy01OSA0MS44LTc2LjggNzMuMUwxMTIgMjY0LjIgMTEyIDIyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE5LjYtMjIuNS05LjdjLTEyLjItNS4yLTI2LjMgLjQtMzEuNSAxMi42cy40IDI2LjMgMTIuNiAzMS41YzM2LjEgMTUuNSA3NS45IDMyLjUgMTE5LjQgNTEuMi0zLjkgMTQuOS02IDMwLjYtNiA0Ni43IDAgNzAgMzkuMSAxMzAuOCA5Ni42IDE2MS45IDcuOSA0LjMgMTYuOSA2LjEgMjUuOSA2LjFsMTIzIDBjOSAwIDE4LTEuOCAyNS45LTYuMSA1Ny41LTMxLjEgOTYuNi05MiA5Ni42LTE2MS45IDAtMTYuMi0yLjEtMzEuOC02LTQ2LjcgNDMuNS0xOC43IDgzLjQtMzUuNyAxMTkuNC01MS4yIDEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZsLTIyLjUgOS43IDAtMTkuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLjItNDguMiAyMC42Yy0xNy45LTMxLjMtNDQuNi01Ni44LTc2LjgtNzMuMXpNMjk2IDQxNmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yNC0xMjBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yNDggODBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNMzY4IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjkyLjIgMTU5LjNjLTIuNy00LjgtNC4yLTEwLjItNC4yLTE1LjcgMC0xNy41IDE0LjItMzEuNiAzMS42LTMxLjZsLjggMGMxNy41IDAgMzEuNiAxNC4yIDMxLjYgMzEuNiAwIDUuNS0xLjQgMTAuOS00LjIgMTUuN0wzMjcgMTk1LjhjLTMuMSA1LjQtMTAuOCA1LjQtMTMuOSAwbC0yMC45LTM2LjZ6Il0KICAgIH07CiAgICBmYUhvdGVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdGVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTc2XSwgImY1OTQiLCAiTTE2IDI0QzE2IDEwLjcgMjYuNyAwIDQwIDBMNDcyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQxNiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNDAgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTQxNi04IDBDMjYuNyA0OCAxNiAzNy4zIDE2IDI0em0yMDggODhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTI4IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTk2IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMTEyIDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0yNDAtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjg4IDM4NGw0My44IDBjOS45IDAgMTcuNS05IDE0LTE4LjItMTMuOC0zNi4xLTQ4LjgtNjEuOC04OS43LTYxLjhzLTc1LjkgMjUuNy04OS43IDYxLjhjLTMuNSA5LjIgNC4xIDE4LjIgMTQgMTguMmw0My44IDAgMCA4MCA2NCAwIDAtODB6Il0KICAgIH07CiAgICBmYVByaW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByaW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDI0LCAxMjg0MzgsIDkxMTNdLCAiZjAyZiIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzQxLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2w0Mi41IDQyLjVjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDM3LjUtMzg0IDAgMC04MHpNMCAyNTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2ek0xMjggNDE2bDAgMzIgMjU2IDAgMC05Ni0yNTYgMCAwIDY0ek00NTYgMjcyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVZvbGxleWJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sbGV5YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1MiwgInZvbGxleWJhbGwtYmFsbCJdLCAiZjQ1ZiIsICJNNTEyIDI1OC45Yy0yMy40IDgtNDcuOCAxMy4xLTcyLjYgMTUuMSA1LjktOTguNi0zMC43LTE5MS4xLTk0LjktMjU4LjMgOTcuOCAzNiAxNjcuNSAxMzAgMTY3LjUgMjQwLjMgMCAxIDAgMS45IDAgMi45em0tNS45IDUyYy01LjIgMjMuNy0xMy42IDQ2LjItMjQuOSA2Ni45LTk0LjcgNTIuMi0yMTQgNTAtMzA4LjQtMTMuNiAyMS43LTMxLjMgNDkuOC01OC45IDgzLjgtODAuNSA3OS41IDQxLjYgMTY4LjUgNDkuMSAyNDkuNSAyNy4xek0yNzkuNyAyNDEuNmMtMy43LTg5LjctNDEuNy0xNzAuNS0xMDEuMy0yMjkuNyAyMi4zLTcuMSA0Ni0xMS4yIDcwLjUtMTEuOSA5Mi41IDU1LjkgMTUwLjMgMTYwLjMgMTQyLjQgMjczLjgtMzgtMy4yLTc1LjktMTMuNy0xMTEuNi0zMi4zek0xMzAuNSAzMi44QzE0OS4xIDQ5LjEgMTY1LjggNjcuNyAxNzkuOSA4OC4yIDkxLjUgMTMyLjMgMjkuNyAyMTAuMyAzLjcgMjk5LjUgMS4zIDI4NS4zIDAgMjcwLjggMCAyNTYgMCAxNjAuMiA1Mi42IDc2LjcgMTMwLjUgMzIuOHptNzMuNCA5N2MxNi4zIDM0LjUgMjYuMSA3Mi42IDI3LjkgMTEyLjgtNzUuOCA0OC0xMjYuOCAxMjEuMy0xNDguMyAyMDIuNS0xNy42LTE2LjEtMzMtMzQuNi00NS41LTU1IDIuMS0xMDguMSA2My43LTIxMC40IDE2NS45LTI2MC4zek0yNTYgNTEyYy00Ny43IDAtOTIuMy0xMy0xMzAuNS0zNS43IDQuOC0yNC4zIDEyLjYtNDggMjMuMi03MC40IDgyLjQgNTQuNCAxODAuOCA2OC45IDI3MSA0Ny00NC40IDM3LTEwMS41IDU5LjItMTYzLjcgNTkuMnoiXQogICAgfTsKICAgIGZhVm9sbGV5YmFsbEJhbGwgPSBmYVZvbGxleWJhbGw7CiAgICBmYVRyYWZmaWNMaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFmZmljLWxpZ2h0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4Njc4XSwgImY2MzciLCAiTTY0LTMyQzI4LjctMzIgMC0zLjMgMCAzMkwwIDM4NGMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwbDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0LTMyem05NiAzOTJjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTYtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2em01Ni0xMDRhNTYgNTYgMCAxIDEgLTExMiAwIDU2IDU2IDAgMSAxIDExMiAwek0xNjAgMTUyYTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMSAxIDAgMTEyeiJdCiAgICB9OwogICAgZmFQbGFuZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTU1IiwgIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDc4IDcxLjVjLTY5LjMgMjktMTE4IDk3LjQtMTE4IDE3Ny4yIDAgNDkuMyAxOC42IDk0LjMgNDkuMSAxMjguM0wyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhVXNlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjBjMCIsICJNMzIwIDE2YTEwNCAxMDQgMCAxIDEgMCAyMDggMTA0IDEwNCAwIDEgMSAwLTIwOHpNOTYgODhhNzIgNzIgMCAxIDEgMCAxNDQgNzIgNzIgMCAxIDEgMC0xNDR6TTAgNDE2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDEyLjggMCAyNS4yIDEuOSAzNi45IDUuNC0zMi45IDM2LjgtNTIuOSA4NS40LTUyLjkgMTM4LjZsMCAxNmMwIDExLjQgMi40IDIyLjIgNi43IDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMnptNTIxLjMgNjRjNC4zLTkuOCA2LjctMjAuNiA2LjctMzJsMC0xNmMwLTUzLjItMjAtMTAxLjgtNTIuOS0xMzguNiAxMS43LTMuNSAyNC4xLTUuNCAzNi45LTUuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC04Ni43IDB6TTQ3MiAxNjBhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwek0xNjAgNDMyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il0KICAgIH07CiAgICBmYUNlcnRpZmljYXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNlcnRpZmljYXRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwYTMiLCAiTTIzOS4yLThjLTYuMS02LjItMTUtOC43LTIzLjQtNi40UzIwMC45LTUuNiAxOTguOCAyLjhMMTgzLjUgNjNjLTEuMSA0LjQtNS42IDctOS45IDUuN0wxMTMuOCA1MS45Yy04LjQtMi40LTE3LjQgMC0yMy41IDYuMXMtOC41IDE1LjEtNi4xIDIzLjVsMTYuOSA1OS44YzEuMiA0LjMtMS40IDguOC01LjcgOS45TDM1LjEgMTY2LjVjLTguNCAyLjEtMTUgOC43LTE3LjMgMTcuMXMuMiAxNy4zIDYuNCAyMy40bDQ0LjUgNDMuM2MzLjIgMy4xIDMuMiA4LjMgMCAxMS41TDI0LjMgMzA1LjFjLTYuMiA2LjEtOC43IDE1LTYuNCAyMy40czguOSAxNC45IDE3LjMgMTcuMWw2MC4yIDE1LjNjNC40IDEuMSA3IDUuNiA1LjcgOS45TDg0LjIgNDMwLjVjLTIuNCA4LjQgMCAxNy40IDYuMSAyMy41czE1LjEgOC41IDIzLjUgNi4xbDU5LjgtMTYuOWM0LjMtMS4yIDguOCAxLjQgOS45IDUuN2wxNS4zIDYwLjJjMi4xIDguNCA4LjcgMTUgMTcuMSAxNy4zczE3LjMtLjIgMjMuNC02LjRsNDMuMy00NC41YzMuMS0zLjIgOC4zLTMuMiAxMS41IDBMMzM3LjMgNTIwYzYuMSA2LjIgMTUgOC43IDIzLjQgNi40czE0LjktOC45IDE3LjEtMTcuM0wzOTMuMSA0NDljMS4xLTQuNCA1LjYtNyA5LjktNS43bDU5LjggMTYuOWM4LjQgMi40IDE3LjQgMCAyMy41LTYuMXM4LjUtMTUuMSA2LjEtMjMuNWwtMTYuOS01OS44Yy0xLjItNC4zIDEuNC04LjggNS43LTkuOWw2MC4yLTE1LjNjOC40LTIuMSAxNS04LjcgMTcuMy0xNy4xcy0uMi0xNy40LTYuNC0yMy40bC00NC41LTQzLjNjLTMuMi0zLjEtMy4yLTguMyAwLTExLjVsNDQuNS00My4zYzYuMi02LjEgOC43LTE1IDYuNC0yMy40cy04LjktMTQuOS0xNy4zLTE3LjFsLTYwLjItMTUuM2MtNC40LTEuMS03LTUuNi01LjctOS45bDE2LjktNTkuOGMyLjQtOC40IDAtMTcuNC02LjEtMjMuNXMtMTUuMS04LjUtMjMuNS02LjFMNDAzIDY4LjhjLTQuMyAxLjItOC44LTEuNC05LjktNS43TDM3Ny44IDIuOGMtMi4xLTguNC04LjctMTUtMTcuMS0xNy4zcy0xNy4zIC4yLTIzLjQgNi40TDI5NCAzNi41Yy0zLjEgMy4yLTguMyAzLjItMTEuNSAwTDIzOS4yLTh6Il0KICAgIH07CiAgICBmYUFsYXJtQ2xvY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsYXJtLWNsb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIwMF0sICJmMzRlIiwgIk01MDQuNCAxMzIuNWMtNC41IDEwLjUtMTguNCA5LjgtMjQuOSAuNC0yNy44LTQwLTY2LjEtNzIuMi0xMTEtOTIuNi0xMC40LTQuNy0xMy43LTE4LjMtNC4xLTI0LjYgMTUtOS45IDMzLTE1LjcgNTIuMy0xNS43IDUyLjYgMCA5NS4yIDQyLjYgOTUuMiA5NS4yIDAgMTMuMi0yLjcgMjUuOC03LjYgMzcuM3ptLTQ3MS45IC40Yy02LjUgOS40LTIwLjUgMTAuMS0yNC45LS40LTQuOS0xMS41LTcuNi0yNC4xLTcuNi0zNy4zIDAtNTIuNiA0Mi42LTk1LjIgOTUuMi05NS4yIDE5LjMgMCAzNy4zIDUuOCA1Mi4zIDE1LjcgOS42IDYuMyA2LjMgMTkuOS00LjEgMjQuNi00NC44IDIwLjQtODMuMSA1Mi42LTExMSA5Mi42ek0zOTAuMiA0NjcuNEMzNTIuOCA0OTUuNCAzMDYuMyA1MTIgMjU2IDUxMnMtOTYuOC0xNi42LTEzNC4xLTQ0LjZMODYuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMzUuMi0zNS4yQzQ4LjYgMzg0LjggMzIgMzM4LjMgMzIgMjg4IDMyIDE2NC4zIDEzMi4zIDY0IDI1NiA2NFM0ODAgMTY0LjMgNDgwIDI4OGMwIDUwLjMtMTYuNiA5Ni44LTQ0LjYgMTM0LjJsMzUuMiAzNS4yYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0zNS4yLTM1LjJ6TTI4MCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDRjMCA2LjQgMi41IDEyLjUgNyAxN2w1NiA1NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ5LTQ5IDAtOTQuMXoiXQogICAgfTsKICAgIGZhSGVsaWNvcHRlclN5bWJvbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWxpY29wdGVyLXN5bWJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTAyIiwgIk00NDUuNCAyMjRsNjQuNyAwQzQ5NS42IDEwOC4yIDQwMy44IDE2LjQgMjg4IDJsMCA2NC43QzM2OC40IDgwLjEgNDMxLjkgMTQzLjYgNDQ1LjQgMjI0ek01MTAgMjg4bC02NC43IDBDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS4zbDAgNjQuN2MxMTUuOC0xNC40IDIwNy42LTEwNi4yIDIyMi0yMjJ6TTIgMjg4QzE2LjQgNDAzLjggMTA4LjIgNDk1LjYgMjI0IDUxMGwwLTY0LjdDMTQzLjYgNDMxLjkgODAuMiAzNjguNCA2Ni43IDI4OEwyIDI4OHptMC02NGw2NC43IDBDODAuMiAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43TDIyNCAyQzEwOC4yIDE2LjQgMTYuNCAxMDguMiAyIDIyNHptMjA2LTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA5NiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTk2IDAgMC02NHoiXQogICAgfTsKICAgIGZhSG91c2VDaGltbmV5Q3JhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS1jcmFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJob3VzZS1kYW1hZ2UiXSwgImY2ZjEiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMDUuNiAwLTM4LjQtNjQgODAuOC02Ny4zYzcuOC02LjUgNy42LTE4LjYtLjQtMjQuOUwyMTguNiAyNjMuMmMtMTQuNi0xMS41LTMzLjggNy0yMi44IDIyTDI1NiAzNjggMTcwLjUgNDM5LjJjLTYuMSA1LTcuNSAxMy44LTMuNSAyMC41bDMxLjMgNTIuMi04Ni40IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHoiXQogICAgfTsKICAgIGZhSG91c2VEYW1hZ2UgPSBmYUhvdXNlQ2hpbW5leUNyYWNrOwogICAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1taWxpdGFyeS1wb2ludGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRhIiwgIk0yMTQuOSAxNC4xQzIwMiAxNS4yIDE5MiAyNiAxOTIgMzkgMTkyIDUyLjggMjAzLjIgNjQgMjE3IDY0bDE1MSAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMwLjZDMzg0IDggMzc2IC43IDM2Ni43IDEuNEwyMTQuOSAxNC4xek0yMDggMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZMMjA5LjYgOTZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNDAgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE1MiAwIDAgODkuNCAxNjIuOC0xNjIuOGMtMTMuMy00LjMtMjcuMy02LjUtNDEuNi02LjVMNDAgMjI0em0zNDUuNyAyMC45bC0xNzEuMSAxNzEuMSAxNjkuNCAwIDAtNDYuMyA1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDMwLjMgMjkwLjhjLTExLjItMTktMjYuNi0zNC41LTQ0LjYtNDUuOXpNMTkyIDQ0OGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzItMTkyIDB6Il0KICAgIH07CiAgICBmYURhdGFiYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRhdGFiYXNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxYzAiLCAiTTQ0OCAyMDUuOGMtMTQuOCA5LjgtMzEuOCAxNy43LTQ5LjUgMjQtNDcgMTYuOC0xMDguNyAyNi4yLTE3NC41IDI2LjJTOTYuNCAyNDYuNSA0OS41IDIyOS44Yy0xNy42LTYuMy0zNC43LTE0LjItNDkuNS0yNEwwIDI4OGMwIDQ0LjIgMTAwLjMgODAgMjI0IDgwczIyNC0zNS44IDIyNC04MGwwLTgyLjJ6bTAtNzcuOGwwLTQ4QzQ0OCAzNS44IDM0Ny43IDAgMjI0IDBTMCAzNS44IDAgODBsMCA0OGMwIDQ0LjIgMTAwLjMgODAgMjI0IDgwczIyNC0zNS44IDIyNC04MHpNMzk4LjUgMzg5LjhDMzUxLjYgNDA2LjUgMjg5LjkgNDE2IDIyNCA0MTZTOTYuNCA0MDYuNSA0OS41IDM4OS44Yy0xNy42LTYuMy0zNC43LTE0LjItNDkuNS0yNEwwIDQzMmMwIDQ0LjIgMTAwLjMgODAgMjI0IDgwczIyNC0zNS44IDIyNC04MGwwLTY2LjJjLTE0LjggOS44LTMxLjggMTcuNy00OS41IDI0eiJdCiAgICB9OwogICAgZmFOZXdzcGFwZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5ld3NwYXBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0MF0sICJmMWVhIiwgIk0wIDQxNkwwIDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMTYwIDEyOGwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTI0IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDB6bS0yNC03MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zNjAgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDB6Il0KICAgIH07CiAgICBmYUNsb3VkUmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1yYWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzgzLCA5OTI2XSwgImY3M2QiLCAiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMi0xLjMtNi43LTEuOS0xMy43LTEuOS0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MCAxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS41LS42IDEwLjgtMS42IDE2IC41IDAgMS4xIDAgMS42IDAgNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgMzIwem0xLjYgNjguMmMxLjEtMi41IDMuNi00LjIgNi40LTQuMnM1LjMgMS42IDYuNCA0LjJsMzAuMiA2OC4yYzIuMiA1LjEgMy40IDEwLjUgMy40IDE2IDAgMjEuOS0xOC4xIDM5LjYtNDAgMzkuNnMtNDAtMTcuNy00MC0zOS42YzAtNS41IDEuMi0xMSAzLjQtMTZsMzAuMi02OC4yem0xNTIgMGMxLjEtMi41IDMuNi00LjIgNi40LTQuMnM1LjMgMS42IDYuNCA0LjJsMzAuMiA2OC4yYzIuMiA1LjEgMy40IDEwLjUgMy40IDE2IDAgMjEuOS0xOC4xIDM5LjYtNDAgMzkuNnMtNDAtMTcuNy00MC0zOS42YzAtNS41IDEuMi0xMSAzLjQtMTZsMzAuMi02OC4yem0xMjEuOCA2OC4ybDMwLjItNjguMmMxLjEtMi41IDMuNi00LjIgNi40LTQuMnM1LjMgMS42IDYuNCA0LjJsMzAuMiA2OC4yYzIuMiA1LjEgMy40IDEwLjUgMy40IDE2IDAgMjEuOS0xOC4xIDM5LjYtNDAgMzkuNnMtNDAtMTcuNy00MC0zOS42YzAtNS41IDEuMi0xMSAzLjQtMTZ6Il0KICAgIH07CiAgICBmYU1heGltaXplID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1heGltaXplIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImV4cGFuZC1hcnJvd3MtYWx0Il0sICJmMzFlIiwgIk0xNjggMzJMMjQgMzJDMTAuNyAzMiAwIDQyLjcgMCA1NkwwIDIwMGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSAyMjMuOCA0MSAyMTdsNDAtNDAgNzkgNzktNzkgNzktNDAtNDBjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMCAzMDIuMyAwIDMxMkwwIDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTQwLTQwIDc5LTc5IDc5IDc5LTQwIDQwYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzI3MC4zIDQ4MCAyODAgNDgwbDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTNDQ4IDIwOS43IDQ0OCAyMDBsMC0xNDRjMC0xMy4zLTEwLjctMjQtMjQtMjRMMjgwIDMyYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhTMjU2LjIgNjYuMSAyNjMgNzNsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMxNzcuNyAzMiAxNjggMzJ6Il0KICAgIH07CiAgICBmYUV4cGFuZEFycm93c0FsdCA9IGZhTWF4aW1pemU7CiAgICBmYUxvY2F0aW9uQXJyb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tYXJyb3ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEyNCIsICJNNDc3LjkgNzUuNWM0LjUtMTEuOCAxLjctMjUuMi03LjItMzQuMXMtMjIuMy0xMS44LTM0LjEtNy4ybC00MTYgMTYwQzcuOSAxOTktLjMgMjExLjIgMCAyMjQuN3M5LjEgMjUuNCAyMS45IDI5LjZsMTc2LjggNTguOSA1OC45IDE3Ni44YzQuMyAxMi44IDE2LjEgMjEuNiAyOS42IDIxLjlzMjUuNy03LjkgMzAuNi0yMC41bDE2MC00MTZ6Il0KICAgIH07CiAgICBmYUNpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2l0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk2MV0sICJmNjRmIiwgIk0zMjAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMi00OCAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi02NCAwIDAtNzJDOTYgMTAuNyA4NS4zIDAgNzIgMFM0OCAxMC43IDQ4IDI0bDAgNzRjLTI3LjYgNy4xLTQ4IDMyLjItNDggNjJMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAgMC0xMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMzIwIDB6bTY0IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2em0tMTYgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHptMTYgMTEybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6bTExMi0xNmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwek0yNTYgMzA0bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6TTI0MCAxOTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMTI4IDMwNGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0xMTIgMTkyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6Il0KICAgIH07CiAgICBmYVhSYXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieC1yYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ5NyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHptMjgwIDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwIDAgNDgtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwIDAgNDgtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDAgMC00OCA4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwIDAtNDggNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMCAwLTE2eiJdCiAgICB9OwogICAgZmFVbWJyZWxsYUJlYWNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVtYnJlbGxhLWJlYWNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU4XSwgImY1Y2EiLCAiTTQ5Ny41IDM0MS4xYy01LjkgMTYuNy0yNS4zIDIzLTQxLjEgMTUuMWwtMTc4LjItODkuMS0xLjYgMy4yLTg4LjggMTc3LjcgMjkyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODQuMiAwIDEwMy4yLTIwNi4zIDEuNi0zLjItMTY1LjQtODIuN2MtMTUuOC03LjktMjIuNC0yNy4zLTEyLjUtNDIgNDUuOS02OC42IDEyNC4xLTExMy44IDIxMi45LTExMy44IDE0MS40IDAgMjU2IDExNC42IDI1NiAyNTYgMCAyOS44LTUuMSA1OC41LTE0LjUgODUuMXoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFRvQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC10by1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24taW4iXSwgImYwOTAiLCAiTTM1MiA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0tOS40IDE4Mi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wyNDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYVNpZ25JbiA9IGZhQXJyb3dSaWdodFRvQnJhY2tldDsKICAgIGZhSGVhZHNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkc2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1OTAiLCAiTTIyNCA2NGMtNzkgMC0xNDQuNyA1Ny4zLTE1Ny43IDEzMi43IDkuMy0zIDE5LjMtNC43IDI5LjctNC43bDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYgMGMtNTMgMC05Ni00My05Ni05NmwwLTY0QzAgMTAwLjMgMTAwLjMgMCAyMjQgMFM0NDggMTAwLjMgNDQ4IDIyNGwwIDE2OC4xYzAgNjYuMy01My44IDEyMC0xMjAuMSAxMjBsLTg3LjktLjEtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMCA0MCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtMjAuOWMtMTQuMSA4LjItMzAuNSAxMi44LTQ4IDEyLjhsLTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMGMxMC40IDAgMjAuMyAxLjYgMjkuNyA0LjctMTMtNzUuMy03OC42LTEzMi43LTE1Ny43LTEzMi43eiJdCiAgICB9OwogICAgZmFTcGxvdGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwbG90Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjViYyIsICJNMjA4LjUgNjIuM2wyOC4xLTM2LjlDMjQ4LjggOS40IDI2Ny44IDAgMjg4IDAgMzE2LjUgMCAzNDEuNiAxOC43IDM0OS44IDQ2bDE3LjggNTkuNGMxMC4zIDM0LjQgMzYuMSA2MiA2OS44IDc0LjZsMzkuOCAxNC45YzIwLjkgNy45IDM0LjggMjcuOSAzNC44IDUwLjIgMCAxNi45LTcuOSAzMi44LTIxLjUgNDIuOWwtNjcuMyA1MC41Yy0yNC4zIDE4LjItMzcuMiA0Ny45LTMzLjggNzguMWwyLjUgMjIuN2M0LjMgMzguNy0yNiA3Mi42LTY1IDcyLjYtMTQuOCAwLTI5LjMtNS4xLTQwLjktMTQuM2wtNTUuMy00NC4zYy00LjUtMy42LTkuMy02LjctMTQuNS05LjItMTUuOC03LjktMzMuNy0xMC40LTUxLTcuM0w4Mi40IDQ1MS45Yy0zNC42IDYuMy02Ni40LTIwLjMtNjYuNC01NS40IDAtMTMuMiA0LjctMjYgMTMuMS0zNi4ybDExLjItMTMuNGMxNC42LTE3LjQgMjIuNi0zOS40IDIyLjYtNjIuMSAwLTE4LjgtNS41LTM3LjItMTUuOC01M0w4LjggMTczLjVDMy4xIDE2NC43IDAgMTU0LjQgMCAxNDMuOSAwIDExMC41IDMwLjEgODUuMSA2MyA5MC43bDUxLjMgOC43YzM1LjkgNi4xIDcyLjItOC4yIDk0LjItMzcuMXoiXQogICAgfTsKICAgIGZhVXBMb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLWxvbmciLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtdXAiXSwgImYzMGMiLCAiTTEzNy40LTIyLjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDAuOSAxNjAgMjg4IDE2MGwtNjQgMCAwIDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zMzYtNjQgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuMiAxMTQuNSA5LjQgMTA1LjRsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93QWx0VXAgPSBmYVVwTG9uZzsKICAgIGZhSGV4YWdvbk5vZGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhleGFnb24tbm9kZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY5OSIsICJNMjQ4IDEwNi42YzE4LjktOSAzMi0yOC4zIDMyLTUwLjZjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMi44IDEuMy01LjUgMi45LTggNC43bC04MC4xLTQ1LjhjMS42LTIwLjgtOC42LTQxLjYtMjcuOS01Mi44QzU3LjIgOTYgMjMgMTA1LjIgNy41IDEzMlMxLjIgMTkzIDI4IDIwOC41YzEuMyAuOCAyLjYgMS41IDQgMi4xbDAgOTAuOGMtMS4zIC42LTIuNyAxLjMtNCAyLjFDMS4yIDMxOS04IDM1My4yIDcuNSAzODBTNTcuMiA0MTYgODQgNDAwLjVjMTkuMy0xMS4xIDI5LjQtMzIgMjcuOC01Mi44bDUwLjUtMjguOWMtMTEuNS0xMS4yLTE5LjktMjUuNi0yMy44LTQxLjdMODggMzA2LjFjLTIuNi0xLjgtNS4yLTMuMy04LTQuN2wwLTkwLjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtLjEgMS40LS4yIDIuOC0uMiA0LjNjMCAyMi4zIDEzLjEgNDEuNiAzMiA1MC42bDAgOTguOGMtMTguOSA5LTMyIDI4LjMtMzIgNTAuNmMwIDMwLjkgMjUuMSA1NiA1NiA1NnM1Ni0yNS4xIDU2LTU2YzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDgwLjEgNDUuOGMtMS42IDIwLjggOC42IDQxLjYgMjcuOCA1Mi44YzI2LjggMTUuNSA2MSA2LjMgNzYuNS0yMC41czYuMy02MS0yMC41LTc2LjVjLTEuMy0uOC0yLjctMS41LTQtMi4xbDAtOTAuOGMxLjQtLjYgMi43LTEuMyA0LTIuMWMyNi44LTE1LjUgMzYtNDkuNyAyMC41LTc2LjVTMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljMi42IDEuOCA1LjIgMy4zIDggNC43bDAgOTAuOGMtMi44IDEuMy01LjUgMi45LTggNC42bC04MC4xLTQ1LjhjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHoiXQogICAgfTsKICAgIGZhSG9zcGl0YWwyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTczLCA2MjU4OSwgImhvc3BpdGFsLWFsdCIsICJob3NwaXRhbC13aWRlIl0sICJmMGY4IiwgIk0xMjggNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAwLTY0ek0yNzIgMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDgwIDk2IDAgMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMHpNMTI4IDM2OGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek0xMTIgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTUxMiAzNjhsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDI1NmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwek0yNjQgMTA0bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMiAzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbEFsdDIgPSBmYUhvc3BpdGFsMjsKICAgIGZhSG9zcGl0YWxXaWRlMiA9IGZhSG9zcGl0YWwyOwogICAgZmFQZXJzb25IYXJhc3NpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWhhcmFzc2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTQ5IiwgIk0xOTIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01OS40IDMwNC41TDg4IDI1Ni45IDg4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDE2IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0NC43IDQ3LjQgNTcuMWMxMS4zIDEzLjYgMzEuNSAxNS41IDQ1LjEgNC4yczE1LjUtMzEuNSA0LjItNDUuMWwtNzMuNy04OC45Yy0xOC4yLTIyLTQ1LjMtMzQuNy03My45LTM0LjdsLTM1LjkgMGMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjl6TTQ4MCAyNDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNNDY0IDM0NGwwIDU4LjctNDEuNC00MS40Yy03LjMtNy4zLTE3LjYtMTAuNi0yNy44LTlzLTE4LjkgOC4xLTIzLjUgMTcuM2wtNDggOTZjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2wyOC4xLTU2LjMgNTQuNyA1NC43YzEyLjQgMTIuNCAyOS4xIDE5LjMgNDYuNiAxOS4zIDM2LjQgMCA2NS45LTI5LjUgNjUuOS02NS45TDU3NiAzNDRjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZ6TTI4OCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsNTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0tLjggNDkuN2MtNy45LTQtMTcuNS0uNy0yMS41IDcuMnMtLjcgMTcuNSA3LjIgMjEuNWw0OCAyNGM3LjkgNCAxNy41IC43IDIxLjUtNy4ycy43LTE3LjUtNy4yLTIxLjVsLTQ4LTI0eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxUcmVuZFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtdHJlbmQtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyOSIsICJNNDgwIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRMMzU0LjItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDMuOSAwLTExMS4zIDExMS4zLTk1LjEtODEuNWMtOS03LjctMjIuMi03LjctMzEuMiAwbC0xMTIgOTZjLTEwLjEgOC42LTExLjIgMjMuOC0yLjYgMzMuOHMyMy44IDExLjIgMzMuOCAyLjZsOTYuNC04Mi42IDk2LjQgODIuNmM5LjUgOC4yIDIzLjcgNy42IDMyLjYtMS4zbDEyNy0xMjcgMCA0My45YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRMNDgwIDh6TTQ4IDI1NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMjU2em00Ny4zIDU2Yy0zLjQgMjAuMS0xOS4yIDM2LTM5LjQgMzkuNC00LjQgLjctOC0yLjktOC03LjNsMC0zMmMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4LjEgMy42IDcuMyA4em0wIDE0NC4xYy43IDQuNC0yLjkgOC03LjMgOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtMzJjMC00LjQgMy42LTguMSA4LTcuMyAyMC4xIDMuNCAzNiAxOS4yIDM5LjQgMzkuNHpNNDU2IDQxNi43YzQuNC0uNyA4IDIuOSA4IDcuM2wwIDMyYzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC4xLTMuNi03LjMtOCAzLjQtMjAuMSAxOS4yLTM2IDM5LjQtMzkuNHpNNDE2LjcgMzEyYy0uNy00LjQgMi45LTggNy4zLThsMzIgMGM0LjQgMCA4IDMuNiA4IDhsMCAzMmMwIDQuNC0zLjYgOC4xLTggNy4zLTIwLjEtMy40LTM2LTE5LjItMzkuNC0zOS40ek0xOTIgMzg0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhUGVuUnVsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVuLXJ1bGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlbmNpbC1ydWxlciJdLCAiZjVhZSIsICJNNDA0IDBjMTkuMiAwIDM3LjYgNy42IDUxLjEgMjEuMmwzNS43IDM1LjdDNTA0LjQgNzAuNCA1MTIgODguOCA1MTIgMTA4cy03LjYgMzcuNi0yMS4yIDUxLjFMNDQ1LjkgMjA0IDMwOCA2Ni4xIDM1Mi45IDIxLjJDMzY2LjQgNy42IDM4NC44IDAgNDA0IDB6TTU4LjkgMzE1LjFMMjc0LjEgMTAwIDQxMiAyMzcuOSAxOTYuOSA0NTMuMWMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTEuMWMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJzLTguNS0xNS4xLTYuMi0yMy40TDM2LjQgMzUzLjhjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN3pNMjI1LjQgODAuOEw4MC44IDIyNS40IDExLjcgMTU2LjNjLTE1LjYtMTUuNi0xNS42LTQwLjkgMC01Ni42bDg4LTg4YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwbDUuOSA1LjktNTYuMyA1Ni4zYy03LjggNy44LTcuOCAyMC41IDAgMjguM3MyMC41IDcuOCAyOC4zIDBsNTYuMy01Ni4zIDM0LjkgMzQuOXpNNDMxLjIgMjg2LjZsMzQuOSAzNC45LTU2LjMgNTYuM2MtNy44IDcuOC03LjggMjAuNSAwIDI4LjNzMjAuNSA3LjggMjguMyAwbDU2LjMtNTYuMyA1LjkgNS45YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC04OCA4OGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBsLTY5LjEtNjkuMSAxNDQuNi0xNDQuNnoiXQogICAgfTsKICAgIGZhUGVuY2lsUnVsZXIgPSBmYVBlblJ1bGVyOwogICAgZmFSZXBlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU3XSwgImYzNjMiLCAiTTQ3MC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMzUyIDE5LjEgMzUyIDMybDAgMzItMTYwIDBDODYgNjQgMCAxNTAgMCAyNTYgMCAyNzMuNyAxNC4zIDI4OCAzMiAyODhzMzItMTQuMyAzMi0zMmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGwxNjAgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjR6TTQxLjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzE2MCA0OTIuOSAxNjAgNDgwbDAtMzIgMTYwIDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTE2MCAwIDAtMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlsLTY0IDY0eiJdCiAgICB9OwogICAgZmFCb25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjk0NjBdLCAiZjVkNyIsICJNMTk3LjQgMTYwYy0zLjkgMC03LjItMi44LTguMS02LjYtMTAuMi00Mi4xLTQ4LjEtNzMuNC05My4zLTczLjQtNTMgMC05NiA0My05NiA5NiAwIDI5LjEgMTIuOSA1NS4xIDMzLjMgNzIuNyA0LjMgMy43IDQuMyAxMC44IDAgMTQuNS0yMC40IDE3LjYtMzMuMyA0My43LTMzLjMgNzIuNyAwIDUzIDQzIDk2IDk2IDk2IDQ1LjIgMCA4My4xLTMxLjMgOTMuMy03My40IC45LTMuOCA0LjItNi42IDguMS02LjZsMjQ1LjEgMGMzLjkgMCA3LjIgMi44IDguMSA2LjYgMTAuMiA0Mi4xIDQ4LjEgNzMuNCA5My4zIDczLjQgNTMgMCA5Ni00MyA5Ni05NiAwLTI5LjEtMTIuOS01NS4xLTMzLjMtNzIuNy00LjMtMy43LTQuMy0xMC44IDAtMTQuNSAyMC40LTE3LjYgMzMuMy00My43IDMzLjMtNzIuNyAwLTUzLTQzLTk2LTk2LTk2LTQ1LjIgMC04My4xIDMxLjMtOTMuMyA3My40LS45IDMuOC00LjIgNi42LTguMSA2LjZsLTI0NS4xIDB6Il0KICAgIH07CiAgICBmYUZpcmVGbGFtZUN1cnZlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWZsYW1lLWN1cnZlZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaXJlLWFsdCJdLCAiZjdlNCIsICJNMTUzLjYgMjkuOWwxNi0yMS4zQzE3My42IDMuMiAxODAgMCAxODYuNyAwIDE5OC40IDAgMjA4IDkuNiAyMDggMjEuM2wwIDIyLjFjMCAxMy4xIDUuNCAyNS43IDE0LjkgMzQuN0wzMDcuNiAxNTlDMzU2LjQgMjA1LjYgMzg0IDI3MC4yIDM4NCAzMzcuNyAzODQgNDM0IDMwNiA1MTIgMjA5LjcgNTEyTDE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwbDAtMy44YzAtNDguOCAxOS40LTk1LjYgNTMuOS0xMzAuMWwzLjUtMy41YzQuMi00LjIgMTAtNi42IDE2LTYuNiAxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNkw5NiAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTMuOWMwLTE4LTcuMi0zNS4zLTE5LjktNDhsLTM4LjYtMzguNmMtMjQtMjQtMzcuNS01Ni43LTM3LjUtOTAuNyAwLTI3LjcgOS01NC44IDI1LjYtNzYuOXoiXQogICAgfTsKICAgIGZhRmlyZUFsdCA9IGZhRmlyZUZsYW1lQ3VydmVkOwogICAgZmFCdXNTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVzLXNpbXBsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJidXMtYWx0Il0sICJmNTVlIiwgIk05NiAwQzQzIDAgMCA0MyAwIDk2TDAgMzg0YzAgMjkuOCAyMC40IDU0LjkgNDggNjJsMCAzNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMTkyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzRjMjcuNi03LjEgNDgtMzIuMiA0OC02MmwwLTI4OGMwLTUzLTQzLTk2LTk2LTk2TDk2IDB6TTY0IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNOTYgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjU2IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFCdXNBbHQgPSBmYUJ1c1NpbXBsZTsKICAgIGZhVmVudXNNYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzLW1hcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODkyXSwgImYyMjgiLCAiTTQ4MC02NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJTNDYyLjMgMCA0ODAgMEw1MzAuNyAwIDQ3NCA1Ni43Yy0yNi4zLTE1LjctNTcuMS0yNC43LTkwLTI0LjctMzUuNCAwLTY4LjQgMTAuNS05NiAyOC41LTI3LjYtMTgtNjAuNi0yOC41LTk2LTI4LjUtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0IDE3My4xbDAgMzQuOS0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTM0LjljMjMuMy00LjMgNDQuOS0xMy4xIDY0LTI1LjYgMjcuNiAxOCA2MC42IDI4LjUgOTYgMjguNSA5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NiAwLTQxLjEtMTQuMS03OS0zNy44LTEwOUw1NzYgNDUuMyA1NzYgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkw0ODAtNjR6TTMzNiAzMDkuMmMyMC4yLTI4LjYgMzItNjMuNSAzMi0xMDEuMnMtMTEuOC03Mi42LTMyLTEwMS4yYzE0LjYtNi45IDMwLjgtMTAuOCA0OC0xMC44IDYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyUzQ0NS45IDMyMCAzODQgMzIwYy0xNy4yIDAtMzMuNS0zLjktNDgtMTAuOHpNMjg4IDE1MC4zYzEwLjIgMTYuOSAxNiAzNi42IDE2IDU3LjdzLTUuOCA0MC45LTE2IDU3LjdjLTEwLjItMTYuOS0xNi0zNi42LTE2LTU3LjdzNS44LTQwLjkgMTYtNTcuN3ptLTQ4LTQzLjVjLTIwLjIgMjguNi0zMiA2My41LTMyIDEwMS4yczExLjggNzIuNiAzMiAxMDEuMmMtMTQuNSA2LjktMzAuOCAxMC44LTQ4IDEwLjgtNjEuOSAwLTExMi01MC4xLTExMi0xMTJTMTMwLjEgOTYgMTkyIDk2YzE3LjIgMCAzMy41IDMuOSA0OCAxMC44eiJdCiAgICB9OwogICAgZmFCbGVuZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJsZW5kZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxNyIsICJNMCA1NkMwIDI1LjEgMjUuMSAwIDU2IDBMNDM3LjYgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw0NTcuMSA4MCAzNDQgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwLTkuMS05Ni02Mi45IDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgNTZ6TTExNC4zIDE5MkwxMDAuNiA0OCA1NiA0OGMtNC40IDAtOCAzLjYtOCA4bDAgMTI4YzAgNC40IDMuNiA4IDggOGw1OC4zIDB6TTEzNiAzODRsMjQwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQwIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTEyMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExN10sICI1NSIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjRjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOGwwLTIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMjI0YzAgMTA2LTg2IDE5Mi0xOTIgMTkyUzAgMzk0IDAgMjg4TDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6Il0KICAgIH07CiAgICBmYVNoYXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoYXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1haWwtZm9yd2FyZCJdLCAiZjA2NCIsICJNMzA3LjggMTguNGMtMTIgNS0xOS44IDE2LjYtMTkuOCAyOS42bDAgODAtMTEyIDBjLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgMTEzLjMgODEuNSAxNjMuOSAxMDAuMiAxNzQuMSAyLjUgMS40IDUuMyAxLjkgOC4xIDEuOSAxMC45IDAgMTkuNy04LjkgMTkuNy0xOS43IDAtNy41LTQuMy0xNC40LTkuOC0xOS41LTkuNC04LjgtMjIuMi0yNi40LTIyLjItNTYuNyAwLTUzIDQzLTk2IDk2LTk2bDk2IDAgMCA4MGMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45eiJdCiAgICB9OwogICAgZmFNYWlsRm9yd2FyZCA9IGZhU2hhcmU7CiAgICBmYVBob25lRmxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZS1mbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzgxLCAicGhvbmUtYWx0Il0sICJmODc5IiwgIk0zNTEuOCAyNWM3LjgtMTguOCAyOC40LTI4LjkgNDguMS0yMy41bDUuNSAxLjVjNjQuNiAxNy42IDExOS44IDgwLjIgMTAzLjcgMTU2LjQtMzcuMSAxNzUtMTc0LjggMzEyLjctMzQ5LjggMzQ5LjgtNzYuMyAxNi4yLTEzOC44LTM5LjEtMTU2LjQtMTAzLjdsLTEuNS01LjVjLTUuNC0xOS43IDQuNy00MC4zIDIzLjUtNDguMWw5Ny4zLTQwLjVjMTYuNS02LjkgMzUuNi0yLjEgNDcgMTEuOGwzOC42IDQ3LjJjNzAuMy0zNC45IDEyNi44LTkzLjMgMTU5LjMtMTY0LjlsLTQ0LjEtMzYuMWMtMTMuOS0xMS4zLTE4LjYtMzAuNC0xMS44LTQ3TDM1MS44IDI1eiJdCiAgICB9OwogICAgZmFQaG9uZUFsdCA9IGZhUGhvbmVGbGlwOwogICAgZmFUb2lsZXRQb3J0YWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXQtcG9ydGFibGUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTU4MyIsICJNMCA2NGwwIDE2IDMyMCAwIDAtMTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjR6bTI0IDY0TDAgMTI4IDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04IDIyNCAwIDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzYwLTI5NiAwem0yMjQgOTZsMjQgMCAwIDk2LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVBlcnNvblByZWduYW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1wcmVnbmFudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMzFlIiwgIk0xOTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTgwIDMyMS4yYzguNi00LjUgMTYuOC0xMCAyNC4zLTE2LjVsNC0zLjRjMjIuNi0xOS40IDM1LjctNDcuNyAzNS43LTc3LjYgMC0zNS45LTE4LjgtNjkuMS00OS42LTg3LjZsLTMwLjQtMTguMiAwLTEuOGMwLTQ2LjUtMzcuNy04NC4xLTg0LjEtODQuMS0yOC4xIDAtNTQuNCAxNC4xLTcwIDM3LjVMMjEuNCAyNzAuMmMtOS44IDE0LjctNS44IDM0LjYgOC45IDQ0LjRzMzQuNiA1LjggNDQuNC04LjlsMjktNDMuNS0zMC41IDExMy41Yy0yLjYgOS42LS42IDE5LjkgNS41IDI3LjhTOTQgNDE2IDEwNCA0MTZsOCAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTEwLjh6Il0KICAgIH07CiAgICBmYUxlc3NUaGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlc3MtdGhhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNzc0XSwgIjNjIiwgIk00NzcuMSA1MC42YzcuNCAxNiAuNCAzNS4xLTE1LjYgNDIuNUwxMDguNCAyNTYgNDYxLjQgNDE5YzE2IDcuNCAyMyAyNi40IDE1LjYgNDIuNXMtMjYuNCAyMy00Mi41IDE1LjZsLTQxNi0xOTJDNy4zIDI3OS44IDAgMjY4LjUgMCAyNTZTNy4zIDIzMi4yIDE4LjYgMjI3bDQxNi0xOTJjMTYtNy40IDM1LjEtLjQgNDIuNSAxNS42eiJdCiAgICB9OwogICAgZmFTdXBlcnNjcmlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdXBlcnNjcmlwdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTJiIiwgIk01NDQgMzJjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2QzQ0OS45IDI3LjMgNDQzLjUgNDYuNSA0NTEuNCA2Mi4zIDQ1NyA3My41IDQ2OC4zIDgwIDQ4MCA4MGwwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6TTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDE1LjMgMCA4OS42IDEyOC04OS42IDEyOC0xNS4zIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDI0MCAzMTEuOCAzMjUuOCA0MzQuNGM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1LjMgMC04OS42LTEyOCA4OS42LTEyOCAxNS4zIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMjQwIDIwMC4yIDE1NC4yIDc3LjZDMTQ4LjIgNjkuMSAxMzguNCA2NCAxMjggNjRMOTYgNjR6Il0KICAgIH07CiAgICBmYUNpcmNsZVN0b3AyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1zdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIwOTQsICJzdG9wLWNpcmNsZSJdLCAiZjI4ZCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNjBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhU3RvcENpcmNsZTIgPSBmYUNpcmNsZVN0b3AyOwogICAgZmFBcnJvd3NVcERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLWRvd24iLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFsiYXJyb3dzLXYiXSwgImYwN2QiLCAiTTE1MC42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiA3Ny4zIDk2IDQzNC43IDU0LjYgMzkzLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYgNiAxNC4xIDkuNCAyMi42IDkuNHMxNi42LTMuNCAyMi42LTkuNGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNDEuNCA0MS40IDAtMzU3LjUgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NWID0gZmFBcnJvd3NVcERvd247CiAgICBmYVBvb1N0b3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvby1zdG9ybSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwb28tYm9sdCJdLCAiZjc1YSIsICJNMjY4LjktMzEuOGMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjNjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMSAwIDIxLjctOC41IDM3LjItMjEuOSA0Ny42LTEzLjkgMTAuOC0zNC4xIDE3LTU4LjEgMTdsLTI0IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4IDAgMTQuOCAzLjcgMjguOCAxMC4yIDQxLjEtNDIgNi42LTc0LjIgNDMtNzQuMiA4Ni45IDAgNDYuNiAzNi4yIDg0LjcgODEuOSA4Ny44IDMuMS0xMi40IDkuOS0yMy44IDE5LjYtMzIuNUwyNDIuNyAyMjVjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43bC0xMi43IDQyLjRjMjguOCAxLjIgNTIuNyAyMS4xIDU5LjggNDcuOWwyNi4yIDBjNDguNiAwIDg4LTM5LjQgODgtODggMC00My45LTMyLjEtODAuMy03NC4yLTg2LjkgNi41LTEyLjMgMTAuMi0yNi4yIDEwLjItNDEuMSAwLTQ4LjYtMzkuNC04OC04OC04OGwtOS40IDBjLjktNS40IDEuNC0xMC45IDEuNC0xNi42IDAtNDguNy0zNi4xLTg4LjktODMuMS05NS4yek0xNDQuNiA0MTZsNjEuOCAwLTMxLjIgMTA0LjFjLTMuNiAxMS45IDUuMyAyMy45IDE3LjggMjMuOSA0LjYgMCA5LTEuNyAxMi40LTQuN0wzNDYuNSA0MTIuOWMzLjUtMy4xIDUuNS03LjYgNS41LTEyLjQgMC05LjItNy40LTE2LjYtMTYuNi0xNi42bC02MS44IDAgMzEuMi0xMDQuMWMzLjYtMTEuOS01LjMtMjMuOS0xNy44LTIzLjktNC42IDAtOSAxLjctMTIuNCA0LjdMMTMzLjUgMzg3LjFjLTMuNSAzLjEtNS41IDcuNi01LjUgMTIuNCAwIDkuMiA3LjQgMTYuNiAxNi42IDE2LjZ6Il0KICAgIH07CiAgICBmYVBvb0JvbHQgPSBmYVBvb1N0b3JtOwogICAgZmFWaWRlb1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpZGVvLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ZTIiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE1My0xNTMgMC0yMjIuMmMwLTM1LjMtMjguNy02NC02NC02NEwxMjkuOCA2NCA0MS0yNC45ek0zMiAxMjhsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjNy44IDAgMTUuMy0xLjQgMjIuMi00TDM2IDEwNS44Yy0yLjYgNi45LTQgMTQuNC00IDIyLjJ6TTQ2NCAzMzZsNzMuNSA1OC44YzQuMiAzLjQgOS40IDUuMiAxNC44IDUuMiAxMy4xIDAgMjMuNy0xMC42IDIzLjctMjMuN2wwLTI0MC42YzAtMTMuMS0xMC42LTIzLjctMjMuNy0yMy43LTUuNCAwLTEwLjYgMS44LTE0LjggNS4yTDQ2NCAxNzYgNDY0IDMzNnoiXQogICAgfTsKICAgIGZhU3F1YXJlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXhtYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwNjIsICJ0aW1lcy1zcXVhcmUiLCAieG1hcmstc3F1YXJlIl0sICJmMmQzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem03MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYVRpbWVzU3F1YXJlID0gZmFTcXVhcmVYbWFyazsKICAgIGZhWG1hcmtTcXVhcmUgPSBmYVNxdWFyZVhtYXJrOwogICAgZmFIYW5kSG9sZGluZ0Ryb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nLWRyb3BsZXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZC1ob2xkaW5nLXdhdGVyIl0sICJmNGMxIiwgIk0yNzUuNSA2LjZMMjA5LjIgMTAzQzE5OCAxMTkuMyAxOTIgMTM4LjYgMTkyIDE1OC4zbDAgMS43YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xLjdjMC0xOS44LTYtMzktMTcuMi01NS4zTDMwMC41IDYuNkMyOTcuNyAyLjUgMjkzIDAgMjg4IDBzLTkuNyAyLjUtMTIuNSA2LjZ6TTEwOS4zIDM0MS41TDY2LjcgMzg0IDMyIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAuNSAwYzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjNjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNiAyODAgNDE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1Mi4yIDBjLTMzLjkgMC02Ni41IDEzLjUtOTAuNSAzNy41eiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ1dhdGVyID0gZmFIYW5kSG9sZGluZ0Ryb3BsZXQ7CiAgICBmYVdvblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid29uLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4MzYxLCAia3J3IiwgIndvbiJdLCAiZjE1OSIsICJNNjIuNCA1My45QzU2LjggMzcuMSAzOC43IDI4LjEgMjEuOSAzMy42Uy0zLjkgNTcuNCAxLjcgNzQuMUw1Ni45IDI0MCAzMiAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAuOSAwIDU2LjcgMTcwLjFjNC41IDEzLjUgMTcuNCAyMi40IDMxLjYgMjEuOXMyNi40LTEwLjQgMjkuOC0yNC4yTDIzMyAyODggMjc5IDI4OCAzMjEgNDU1LjhjMy40IDEzLjggMTUuNiAyMy43IDI5LjggMjQuMnMyNy4xLTguNCAzMS42LTIxLjlMNDM5LjEgMjg4IDQ4MCAyODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0LjkgMCA1NS4zLTE2NS45YzUuNi0xNi44LTMuNS0zNC45LTIwLjItNDAuNXMtMzQuOSAzLjUtNDAuNSAyMC4ybC02MiAxODYuMS01NC42IDAtNDUuOS0xODMuOEMyODMuNSA0MiAyNzAuNyAzMiAyNTYgMzJzLTI3LjUgMTAtMzEgMjQuMkwxNzkgMjQwIDEyNC40IDI0MCA2Mi40IDUzLjl6bTc4IDIzNC4xbDI2LjYgMC0xMS40IDQ1LjYtMTUuMi00NS42ek0yNDUgMjQwbDExLTQ0LjEgMTEgNDQuMS0yMiAwem0xMDAgNDhsMjYuNiAwLTE1LjIgNDUuNi0xMS40LTQ1LjZ6Il0KICAgIH07CiAgICBmYUtydyA9IGZhV29uU2lnbjsKICAgIGZhV29uID0gZmFXb25TaWduOwogICAgZmFPYmplY3RVbmdyb3VwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvYmplY3QtdW5ncm91cCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjQ4IiwgIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwyMDkuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTIwOS4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMTEzLjF6TTExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAxMTMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjA5LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0xMTMuMWMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40TDExOS40IDk2ek01NDQgMjc5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNGwtMjkuMiAwYy01LjMtMTcuNy0xNC44LTMzLjUtMjcuNC00Ni40bDAtMTcuNiA1Ni42IDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCAxMTMuMWMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjA5LjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNC42IDY0IDAgMCAyNC42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTExMy4xeiJdCiAgICB9OwogICAgZmFDb21tZW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDg5LCA2MTY2OV0sICJmMDc1IiwgIk01MTIgMjQwYzAgMTMyLjUtMTE0LjYgMjQwLTI1NiAyNDAtMzcuMSAwLTcyLjMtNy40LTEwNC4xLTIwLjdMMzMuNSA1MTAuMWMtOS40IDQtMjAuMiAxLjctMjcuMS01LjhTLTIgNDg1LjggMi44IDQ3Ni44bDQ4LjgtOTIuMkMxOS4yIDM0NC4zIDAgMjk0LjMgMCAyNDAgMCAxMDcuNSAxMTQuNiAwIDI1NiAwUzUxMiAxMDcuNSA1MTIgMjQweiJdCiAgICB9OwogICAgZmFIaWxsQXZhbGFuY2hlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhpbGwtYXZhbGFuY2hlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MDciLCAiTTQ0MC4xIDQwMS45YzM0LjIgMjMuMSA4MS4xIDE5LjUgMTExLjQtMTAuOCAzNC40LTM0LjQgMzQuNC05MC4xIDAtMTI0LjUtMjcuOC0yNy44LTY5LjUtMzMuMS0xMDIuNi0xNi0xMS44IDYuMS0xNi40IDIwLjYtMTAuMyAzMi4zczIwLjYgMTYuNCAzMi4zIDEwLjNjMTUuMS03LjggMzQtNS4zIDQ2LjYgNy4zIDE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC04MS43LTgxLjdjMjIuMy0xNC4yIDM3LjEtMzkuMSAzNy4xLTY3LjUgMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjUgMS45LTYuOCAyLjktMTQgMi45LTIxLjUgMC00NC4yLTM1LjgtODAtODAtODAtMjcuMyAwLTUxLjUgMTMuNy02NS45IDM0LjYtNS44LTIwLTI0LjItMzQuNi00Ni4xLTM0LjYtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA0IC41IDcuOSAxLjQgMTEuNkw0NDAuMSA0MDEuOXpNNDgwLjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMCAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek02OC43IDg3QzQzLjUgNjEuOCAuNCA3OS43IC40IDExNS4zTC40IDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwzMTYuNyAwYzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjcgODd6Il0KICAgIH07CiAgICBmYUFycm93c1RvRXllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10by1leWUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRiZiIsICJNMTc2IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzguMS02My02M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTMjEuNyA1NS42IDMxIDY1bDYzIDYzLTM4LjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtOTZ6bTAgNDAwbDAtOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzguMSAwLTYzIDYzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNjMtNjMgMCAzOC4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6bTMxMiAyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTM4LjEgNjMgNjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyAzOC4xIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjR6TTQ2NCA1NmwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTM4LjEgMCA2My02M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC02MyA2MyAwLTM4LjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6TTMyMCAxMjBjLTU3LjMgMC05OS40IDM0LTEyNS42IDY0LjMtMjAgMjMuMS0zMi40IDQ1LjgtMzcuNiA1Ni4xLTIuNSA1LTQuOSA5LjctNC45IDE1LjZzMi4zIDEwLjYgNC45IDE1LjZjNS4yIDEwLjMgMTcuNiAzMyAzNy42IDU2LjEgMjYuMiAzMC4zIDY4LjIgNjQuMyAxMjUuNiA2NC4zczk5LjQtMzQgMTI1LjYtNjQuM2MyMC0yMy4xIDMyLjQtNDUuOCAzNy42LTU2LjEgMi41LTUgNC45LTkuNyA0LjktMTUuNnMtMi4zLTEwLjYtNC45LTE1LjZjLTUuMi0xMC4zLTE3LjYtMzMtMzcuNi01Ni4xLTI2LjItMzAuMy02OC4yLTY0LjMtMTI1LjYtNjQuM3pNMjU2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYVNub3dwbG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dwbG93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3ZDIiLCAiTTEyOCAxNjBsMC05NmMwLTM1LjMgMjguNy02NCA2NC02NEwyOTYuNCAwYzI0LjIgMCA0Ni40IDEzLjcgNTcuMiAzNS40bDg3LjYgMTc1LjFjNC40IDguOSA2LjggMTguNyA2LjggMjguNmwwIDU2LjkgODAgMCAwLTgwYzAtNDguNiAzOS40LTg4IDg4LTg4IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDIwOGMwIDIyLjEgMTcuOSA0MCA0MCA0MCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtNDguNiAwLTg4LTM5LjQtODgtODhsMC04MC02MyAwYzkuNSAxNi41IDE1IDM1LjYgMTUgNTYgMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTIyNCAwYy02MS45IDAtMTEyLTUwLjEtMTEyLTExMiAwLTMwLjUgMTIuMi01OC4yIDMyLTc4LjRMNjQgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0em05MS43IDM0LjlsNDMuNiAyOS4xIDExMy4yIDAtODAtMTYwLTEwNC40IDAgMCAxMDguOCAyNy43IDIyLjF6TTQxNiA0MDBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTIyNCAwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4em0tMjgwIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjE2LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjMyIDQwMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFDaGFydEdhbnR0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWdhbnR0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwZTQiLCAiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTY0IDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDB6TTM4NCAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMHoiXQogICAgfTsKICAgIGZhVmlkZW8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlkZW8iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidmlkZW8tY2FtZXJhIl0sICJmMDNkIiwgIk05NiA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgNjR6TTQ2NCAzMzZsNzMuNSA1OC44YzQuMiAzLjQgOS40IDUuMiAxNC44IDUuMiAxMy4xIDAgMjMuNy0xMC42IDIzLjctMjMuN2wwLTI0MC42YzAtMTMuMS0xMC42LTIzLjctMjMuNy0yMy43LTUuNCAwLTEwLjYgMS44LTE0LjggNS4yTDQ2NCAxNzYgNDY0IDMzNnoiXQogICAgfTsKICAgIGZhVmlkZW9DYW1lcmEgPSBmYVZpZGVvOwogICAgZmFDaGVzc1Bhd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXBhd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIzXSwgImY0NDMiLCAiTTE5Mi0zMmM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDI3LTguOSA1MS45LTI0IDcyIDE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMC43IDAgMjYuNyAxNjAgNTYuMiA3MC4zYzUgNi4zIDcuOCAxNC4xIDcuOCAyMi4yIDAgMTkuNi0xNS45IDM1LjUtMzUuNSAzNS41TDUxLjUgNTEyYy0xOS42IDAtMzUuNS0xNS45LTM1LjUtMzUuNSAwLTguMSAyLjctMTUuOSA3LjgtMjIuMkw4MCAzODQgMTA2LjcgMjI0IDk2IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMtMTUuMS0yMC4xLTI0LTQ1LTI0LTcyIDAtNjYuMyA1My43LTEyMCAxMjAtMTIweiJdCiAgICB9OwogICAgZmFTeW5hZ29ndWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3luYWdvZ3VlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzMzXSwgImY2OWIiLCAiTTE2IDgwYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMi0xMjggMCAwLTMyem0wIDM2OGwwLTI4OCAxMjggMCAxMjYuMi04NC4yYzEwLjctNy4yIDI0LjgtNy4yIDM1LjUgMGwxMjYuMiA4NC4yIDEyOCAwIDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTU2MCAxMTJsLTEyOCAwIDAtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDMyek0yMjQgMzg0bDAgODAgMTI4IDAgMC04MGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHptNjQtMTUyYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkMiIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJQbHVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzEiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMCAwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OCA0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXJNb3ZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWVsY2hhaXItbW92ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ3aGVlbGNoYWlyLWFsdCJdLCAiZTJjZSIsICJNMzEyIDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMjA1LjQgMTI0LjFjLTYuNC01LjItMTUuNi00LjctMjEuNCAxLjFsLTMzLjQgMzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTM4LjggODBjMjktMjkgNzUuMi0zMS40IDEwNy01LjVsODEuMyA2NmMyMS40IDE3LjQgMjMuOCA0OS4yIDUuMiA2OS41bC00MS44IDQ2IDk4IDBjMzAuMyAwIDUzIDI3LjcgNDcuMSA1Ny40TDQwNy40IDQ1NC4zYy0zLjUgMTcuMy0yMC4zIDI4LjYtMzcuNyAyNS4xcy0yOC42LTIwLjMtMjUuMS0zNy43TDM2OSAzMjAgMzE2LjggMzIwYzIuMSAxMC4zIDMuMiAyMSAzLjIgMzIgMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0NDAuNCAwIDM1MiA3MS42IDE5MiAxNjAgMTkyYzYgMCAxMS45IC4zIDE3LjggMWw1MC40LTUwLjQtMjIuNy0xOC41ek0xNjAgNDQ4YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyeiJdCiAgICB9OwogICAgZmFXaGVlbGNoYWlyQWx0ID0gZmFXaGVlbGNoYWlyTW92ZTsKICAgIGZhVXNlclNoaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTA1IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZDOTUuOCAzMDQgMTYgMzgzLjggMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMjUxLjUgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC03LjMgMS0xNC41IDIuOS0yMS4zbC00OC42IDB6bTI1MSAxODQuNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il0KICAgIH07CiAgICBmYUJvbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMDMyIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzIgMCAwIDMyMC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNDYuNS0yNC44LTg3LjMtNjItMTA5LjcgMTguNy0yMi4zIDMwLTUxIDMwLTgyLjMgMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTI4OCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDAgMC0xMjggOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHpNMTI4IDQxNmwwLTEyOCAxMjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTI4IDB6Il0KICAgIH07CiAgICBmYUhlYXJ0UHVsc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtcHVsc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGVhcnRiZWF0Il0sICJmMjFlIiwgIk0yNTYgMTA3LjlMMjQxIDg3LjFDMjE2IDUyLjUgMTc1LjkgMzIgMTMzLjEgMzIgNTkuNiAzMiAwIDkxLjYgMCAxNjUuMWwwIDIuNmMwIDIzLjYgNi4yIDQ4IDE2LjYgNzIuM2wxMDYgMGMzLjIgMCA2LjEtMS45IDcuNC00LjlsMzEuOC03Ni4zYzMuNy04LjggMTIuMy0xNC42IDIxLjgtMTQuOHMxOC4zIDUuNCAyMi4yIDE0LjFsNTEuMyAxMTMuOSA0MS40LTgyLjhjNC4xLTguMSAxMi40LTEzLjMgMjEuNS0xMy4zczE3LjQgNS4xIDIxLjUgMTMuM2wyMy4yIDQ2LjNjMS40IDIuNyA0LjEgNC40IDcuMiA0LjRsMTIzLjYgMGMxMC41LTI0LjMgMTYuNi00OC43IDE2LjYtNzIuM2wwLTIuNkM1MTIgOTEuNiA0NTIuNCAzMiAzNzguOSAzMiAzMzYuMiAzMiAyOTYgNTIuNSAyNzEgODcuMWwtMTUgMjAuN3pNNDY5LjYgMjg4bC05Ny44IDBjLTIxLjIgMC00MC42LTEyLTUwLjEtMzFsLTEuNy0zLjQtNDIuNSA4NS4xYy00LjEgOC4zLTEyLjcgMTMuNS0yMiAxMy4zcy0xNy42LTUuNy0yMS40LTE0LjFsLTQ5LjMtMTA5LjUtMTAuNSAyNS4yYy04LjcgMjAuOS0yOS4xIDM0LjUtNTEuNyAzNC41bC04MC4yIDBjNDcuMiA3My44IDEyMyAxNDEuNyAxNzAuNCAxNzcuOSAxMi40IDkuNCAyNy42IDE0LjEgNDMuMSAxNC4xczMwLjgtNC42IDQzLjEtMTQuMUMzNDYuNiA0MjkuNyA0MjIuNCAzNjEuOCA0NjkuNiAyODh6Il0KICAgIH07CiAgICBmYUhlYXJ0YmVhdCA9IGZhSGVhcnRQdWxzZTsKICAgIGZhU3F1YXJlUm9vdFZhcmlhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1yb290LXZhcmlhYmxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNxdWFyZS1yb290LWFsdCJdLCAiZjY5OCIsICJNMjgyLjYgNzguMWM4LTI3LjMgMzMtNDYuMSA2MS40LTQ2LjFsMjAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzQ0IDk2IDIzOC43IDQ1N2MtMy42IDEyLjMtMTQuMSAyMS4yLTI2LjggMjIuOHMtMjUuMS00LjYtMzEuNS0xNS42TDc3LjYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NS42IDBjMjIuOCAwIDQzLjggMTIuMSA1NS4zIDMxLjhsNjUuMiAxMTEuOCA4NC40LTI4OS41ek0zOTMuNCAyMzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0MS40IDQxLjQgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTQxLjQgNDEuNCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTQxLjQtNDEuNC00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDQxLjQtNDEuNC00MS40LTQxLjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFTcXVhcmVSb290QWx0ID0gZmFTcXVhcmVSb290VmFyaWFibGU7CiAgICBmYUhhbmRzQnViYmxlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1idWJibGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhhbmRzLXdhc2giXSwgImUwNWUiLCAiTTM4NCA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTk2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTEyOCA0NjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMCAxNjBsLjEgNzIuNmMwIDQ0LjggMTcuNiA4Ny4xIDQ3LjkgMTE4LjQgLjMtNzcgNDAuMS0xNDguNCAxMDUuNC0xODkuM2wxLjktMS4yYy0yLjUtMy43LTIuOC04LjYtLjQtMTIuN2w2Mi0xMDcuNGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOFMxODIgNSAxNzUuNCAxNi41bC02OCAxMTcuOCAwIDAgMCAwLTQzLjMgNzUgMC00OS4zYzAtMTcuNy0xNC40LTMyLTMyLTMyUzAgMTQyLjQgMCAxNjB6bTIxMy42LTM1LjljMTQuMS04LjggMjkuOC0xMi43IDQ1LjItMTIuMWwzNi41LTYzLjNjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44bC02Ny4xIDExNi4yIDI3LTE2Ljl6bTg2LjUtMzUuN2wtMTYuNCAyOC40YzE1LjEgNS41IDI4LjYgMTUuNiAzOC4zIDI5LjdsMTkuNy0zNC4yYzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHptNDYuNCA2My43bC0xMi41IDIxLjdjMiA4LjYgMi41IDE3LjUgMS43IDI2LjFsNC4zIDAgMCAwIDM0LjQgMCAxMy43LTIzLjhjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44ek0yODMuMSAxNzVjLTkuNC0xNS0yOS4xLTE5LjUtNDQuMS0xMC4ybC02MC4yIDM3LjZDMTI3LjMgMjM0LjcgOTYgMjkxLjIgOTYgMzUybDAgOGMwIDguOSAuOCAxNy42IDIuMiAyNi4xIDM1LjQgOC4yIDYxLjggNDAgNjEuOCA3Ny45IDAgNi4zLS43IDEyLjUtMi4xIDE4LjQgMjUuMiAxOC42IDU2LjQgMjkuNiA5MC4xIDI5LjZsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTkyIDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEyNCAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDE1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNTYgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTM2IDAgMCAwIDAgMC05My4yIDAgNDYuMi0yOC45YzE1LTkuNCAxOS41LTI5LjEgMTAuMi00NC4xeiJdCiAgICB9OwogICAgZmFIYW5kc1dhc2ggPSBmYUhhbmRzQnViYmxlczsKICAgIGZhTWFya2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcmtlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWExIiwgIk00MDguOCAwYy0yNy40IDAtNTMuNiAxMC45LTczIDMwLjJMMzE4LjEgNDggMzA1IDM0LjljLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMEwxMDMgMTM1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMjM3LjEgNjguOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyODQuMSA4MS45IDE4NCAxODIuMSAzMjkuOSAzMjggNDgxLjggMTc2LjJjMTkuNC0xOS40IDMwLjItNDUuNiAzMC4yLTczIDAtNTctNDYuMi0xMDMuMi0xMDMuMi0xMDMuMnpNMTAyLjQgMjYzLjdjLTQ5LjkgNDkuOS04My4zIDExNC05NS41IDE4My41TC40IDQ4My44Qy0xIDQ5MS42IDEuNSA0OTkuNCA3IDUwNXMxMy40IDggMjEuMSA2LjdsMzYuNy02LjVjNjkuNS0xMi4zIDEzMy42LTQ1LjYgMTgzLjUtOTUuNUwyOTYgMzYxLjkgMTUwLjEgMjE2IDEwMi40IDI2My43eiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODIwM10sICJmMzI4IiwgIk0zMjAgMzJsLTguNiAwQzMwMC40IDEyLjkgMjc5LjcgMCAyNTYgMEwxMjggMEMxMDQuMyAwIDgzLjYgMTIuOSA3Mi42IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTEzNiAxMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExMiAweiJdCiAgICB9OwogICAgZmFQbGFjZU9mV29yc2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFjZS1vZi13b3JzaGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2N2YiLCAiTTE2MCA3OWwwIDgxLTQ0LjggMzMuNkMxMDMuMSAyMDIuNyA5NiAyMTYuOSA5NiAyMzJsMCA0MC02MC42IDMwLjNDMTMuNyAzMTMuMiAwIDMzNS4zIDAgMzU5LjZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgNzQuNyAwIDg1LjQgMCAzMjAgMGw2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODguNGMwLTI0LjItMTMuNy00Ni40LTM1LjQtNTcuMkw0MTYgMjcyIDQxNiAyMzJjMC0xNS4xLTcuMS0yOS4zLTE5LjItMzguNEwzNTIgMTYwIDM1MiA3OWMwLTkuNS00LjItMTguNS0xMS41LTI0LjZMMjcxLjQtMy4yYy04LjktNy40LTIxLjgtNy40LTMwLjcgMEwxNzEuNSA1NC40QzE2NC4yIDYwLjUgMTYwIDY5LjUgMTYwIDc5em05NiAyNDFjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4MC0xMjggMCAwLTgwYzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdCiAgICB9OwogICAgZmFDYW5uYWJpcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYW5uYWJpcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTVmIiwgIk0yNTYgMGM1LjMgMCAxMC4zIDIuNyAxMy4zIDcuMSAxNS44IDIzLjUgMzYuNyA2My43IDQ5LjIgMTA5IDcuMyAyNi40IDExLjggNTUuMyAxMC4zIDg0IDExLjYtOC45IDIzLjctMTYuNyAzNS45LTIzLjcgNDEtMjMuMyA4NC40LTM2LjkgMTEyLjItNDIuNSA1LjItMSAxMC43IC42IDE0LjQgNC40czUuNCA5LjIgNC40IDE0LjVjLTUuNiAyNy43LTE5LjMgNzAuOS00Mi43IDExMS43LTkuMSAxNS45LTE5LjkgMzEuNy0zMi41IDQ2LjMgMjcuOSA2LjYgNTIuNSAxNy4yIDY3LjMgMjUuNCA1LjEgMi44IDguMiA4LjIgOC4yIDE0cy0zLjIgMTEuMi04LjIgMTRjLTE1LjIgOC40LTQwLjkgMTkuNS02OS44IDI2LjEtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjJjMS41IDYuMS0uNiAxMi41LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOEwyODAgNDE3LjIgMjgwIDQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcwLjgtNTguNSAyOS4xYy01LjYgMi44LTEyLjMgMi4xLTE3LjItMS44cy03LTEwLjMtNS41LTE2LjRsOC4zLTMzLjJjLTIyLjIgMi42LTQ1IDAtNjUuMi00LjYtMjguOS02LjYtNTQuNS0xNy42LTY5LjgtMjYuMS01LjEtMi44LTguMi04LjItOC4yLTE0czMuMi0xMS4yIDguMi0xNGw2LjItMy4zYzE1LTcuNiAzNi44LTE2LjQgNjEuMS0yMi4yLTEyLjUtMTQuNS0yMy4zLTMwLjQtMzIuNC00Ni4yLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjctMS4xLTUuMiAuNi0xMC43IDQuNC0xNC41czkuMi01LjQgMTQuNC00LjRjMjcuOSA1LjUgNzEuMiAxOS4yIDExMi4yIDQyLjUgMTIuMiA2LjkgMjQuMyAxNC44IDM1LjggMjMuNy0xLjQtMjguNyAzLjEtNTcuNiAxMC4zLTg0IDEyLjUtNDUuMyAzMy40LTg1LjUgNDkuMi0xMDlsMS4yLTEuNkMyNDYuOSAyIDI1MS4zIDAgMjU2IDB6Il0KICAgIH07CiAgICBmYVBlb3BsZVJvb2YgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLXJvb2YiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzNyIsICJNMzAyLjMtMTIuNmMtOS00LjUtMTkuNi00LjUtMjguNiAwbC0yNTYgMTI4QzEuOSAxMjMuMy00LjUgMTQyLjUgMy40IDE1OC4zczI3LjEgMjIuMiA0Mi45IDE0LjNMMjg4IDUxLjggNTI5LjcgMTcyLjZjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45bC0yNTYtMTI4ek0yODggMjcyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQ4Yy01MyAwLTk2IDQzLTk2IDk2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTUzLTQzLTk2LTk2LTk2ek0xNjAgMjU2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTExMiAzMzZjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMzMuMWMwIDE3IDEzLjggMzAuOSAzMC45IDMwLjlsODcuOCAwYy00LjMtOS44LTYuNy0yMC42LTYuNy0zMmwwLTQ4YzAtMTguNCAzLjUtMzYgOS44LTUyLjItMTIuMi03LjUtMjYuNS0xMS44LTQxLjgtMTEuOHpNNDI1LjQgNDgwbDg3LjggMGMxNyAwIDMwLjktMTMuOCAzMC45LTMwLjlsMC0zMy4xYzAtNDQuMi0zNS44LTgwLTgwLTgwLTE1LjMgMC0yOS42IDQuMy00MS44IDExLjggNi4zIDE2LjIgOS44IDMzLjggOS44IDUyLjJsMCA0OGMwIDExLjQtMi40IDIyLjItNi43IDMyeiJdCiAgICB9OwogICAgZmFEaXNlYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpc2Vhc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdmYSIsICJNMjM2LjUgMjkuNEwyMjQgNDhjLTIwIDMwLTUzLjYgNDgtODkuNyA0OEw2OCA5NmMtMzcuNSAwLTY3LjkgMzAuNC02Ny45IDY3LjkgMCAxOCA3LjIgMzUuMiAxOS45IDQ3LjlsMjcgMjdjMTEgMTEgMTcuMiAyNS45IDE3LjIgNDEuNSAwIDE1LjgtNi40IDMwLjktMTcuNyA0MkwzMy40IDMzNS4xYy0xMS4xIDEwLjgtMTcuMyAyNS43LTE3LjMgNDEuMiAwIDM2LjggMzQuMSA2NC4yIDcwLjEgNTYuMmw2Mi4zLTEzLjhjNy43LTEuNyAxNS43LTIuNiAyMy42LTIuNiAzMi44IDAgNjQuMiAxNC42IDg1LjIgMzkuOGwzMC41IDM2LjZjMTAuNCAxMi40IDI1LjcgMTkuNiA0MS45IDE5LjYgMzAuMSAwIDU0LjUtMjQuNCA1NC41LTU0LjVsMC01MS4yYzAtNDEuNCAyNS40LTc4LjUgNjQtOTMuNWwyMi4yLTguNmMyNS4yLTkuOCA0MS44LTM0LjEgNDEuOC02MS4xIDAtMjYuNC0xNS45LTUwLjMtNDAuMy02MC41TDQyOSAxNjQuOGMtMzMuMi0xMy45LTU3LjYtNDMtNjUuNS03OC4xbC03LjktMzUuMmMtNi44LTMwLjEtMzMuNS01MS41LTY0LjMtNTEuNS0yMiAwLTQyLjYgMTEtNTQuOCAyOS40ek0xNjAgMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJvb2tCaWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWJpYmxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJpYmxlIl0sICJmNjQ3IiwgIk05NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NkMwIDQzIDQzIDAgOTYgMEw0MDAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDIwLjktMTMuNCAzOC43LTMyIDQ1LjNsMCA2Ni43YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk2IDUxMnptMC0xMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDAgMC02NC0yNTYgMHpNMTkyIDgwbDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyIDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUJpYmxlID0gZmFCb29rQmlibGU7CiAgICBmYUNoZXNzQm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtYm9hcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQzYyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgNjRsMCA2NCA2NCAwIDAtNjQgNjQgMCAwIDY0IDY0IDAgMC02NCA2NCAwIDAgNjQtNjQgMCAwIDY0IDY0IDAgMCA2NC02NCAwIDAgNjQgNjQgMCAwIDY0LTY0IDAgMC02NC02NCAwIDAgNjQtNjQgMCAwLTY0LTY0IDAgMCA2NC02NCAwIDAtNjQgNjQgMCAwLTY0LTY0IDAgMC02NCA2NCAwIDAtNjQtNjQgMCAwLTY0IDY0IDB6bTY0IDEyOGw2NCAwIDAtNjQtNjQgMCAwIDY0em0wIDY0bDAtNjQtNjQgMCAwIDY0IDY0IDB6bTY0IDBsLTY0IDAgMCA2NCA2NCAwIDAtNjR6bTAgMGw2NCAwIDAtNjQtNjQgMCAwIDY0eiJdCiAgICB9OwogICAgZmFNYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzk0XSwgImYyMjIiLCAiTTMyMCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw0ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctOTUgOTVjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMzMiA0MDEuMiAzMiAzMDQgMTEwLjggMTI4IDIwOCAxMjhjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw5NS05NS01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yMDggNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhTGFwdG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODE4N10sICJmMTA5IiwgIk0xMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMjQwIDY0IDAgMC0yNDAgMzg0IDAgMCAyNDAgNjQgMCAwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJ6TTE5LjIgMzg0QzguNiAzODQgMCAzOTIuNiAwIDQwMy4yIDAgNDQ1LjYgMzQuNCA0ODAgNzYuOCA0ODBsNDg2LjQgMGM0Mi40IDAgNzYuOC0zNC40IDc2LjgtNzYuOCAwLTEwLjYtOC42LTE5LjItMTkuMi0xOS4yTDE5LjIgMzg0eiJdCiAgICB9OwogICAgZmFVc2VyWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci14bWFyayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ1c2VyLXRpbWVzIl0sICJmMjM1IiwgIk0yNTQuMSAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNDYuMSA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtOTguNSA3OS44LTE3OC4zIDE3OC4zLTE3OC4zbDU5LjQgMHpNNTMwLjMgMTA4LjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjl6TTIyNC40IDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6Il0KICAgIH07CiAgICBmYVVzZXJUaW1lcyA9IGZhVXNlclhtYXJrOwogICAgZmFGbGFnVXNhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsYWctdXNhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3NGQiLCAiTTMyIDBDNDkuNyAwIDY0IDE0LjMgNjQgMzJsMCAxNiA2OS0xNy4yYzM4LjEtOS41IDc4LjMtNS4xIDExMy41IDEyLjUgNDYuMyAyMy4yIDEwMC44IDIzLjIgMTQ3LjEgMGw5LjYtNC44QzQyMy44IDI4LjEgNDQ4IDQzLjEgNDQ4IDY2LjFsMCAzNi4xLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtMjAuMy05LTQxLjgtMTQuNy02My42LTE2LjlsMCAzMi4yYzE3LjQgMi4xIDM0LjQgNi43IDUwLjYgMTMuOWwxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDYyLTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM2wtNjMuNSAxMy42IDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDYxLjktNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy00MC4yLTE3LjktODUtMjIuNS0xMjguMS0xMy4zbC02My41IDEzLjYgMCAzMi43IDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRsMzMuNy0xMi4zIDAgMzMuNWMwIDEzLjMtOC4zIDI1LjMtMjAuOCAzMGwtMzQuNyAxM2MtNDYuMiAxNy4zLTk3LjYgMTQuNi0xNDEuNy03LjQtMzcuOS0xOS04MS40LTIzLjctMTIyLjUtMTMuNEw2NCA0MDAgNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDB6bTgwIDk2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTMyIDBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem0tMzIgNDhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6Il0KICAgIH07CiAgICBmYUhhbmRNaWRkbGVGaW5nZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1taWRkbGUtZmluZ2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NDA1XSwgImY4MDYiLCAiTTIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDE2NC4yYy04LjUtNy42LTE5LjctMTIuMi0zMi0xMi4yLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC01NS43Yy0yIDEuNC0zLjkgMy01LjggNC41TDU1IDI4NC44QzQwLjQgMjk3IDMyIDMxNSAzMiAzMzRMMzIgMzcyYzAgMzggMTYuOSA3NCA0Ni4xIDk4LjNsNS40IDQuNWMyOC44IDI0IDY1IDM3LjEgMTAyLjQgMzcuMUwzMDQgNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDgtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuMy0xLjktMjQuOC0yMi42LTQ0LjMtNDcuOS00NC4zLTEyLjMgMC0yMy41IDQuNi0zMiAxMi4yTDI3MiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHoiXQogICAgfTsKICAgIGZhTW9ydGFyUGVzdGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vcnRhci1wZXN0bGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVhNyIsICJNNTA0LjMgMTEuMUM0OTMuMy0xLjYgNDc0LjUtMy43IDQ2MSA2LjJMMjUyLjMgMTYwIDM5Ny4zIDE2MCA1MDIuNiA1NC42YzExLjgtMTEuOCAxMi42LTMwLjggMS42LTQzLjV6TTMyIDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmMwIDgyLjUgNDMuNCAxNDcuNyAxMjMuOSAxNzYuMi0xMS4xIDEzLjktMTkuNCAzMC4zLTIzLjkgNDguMS00LjQgMTcuMSAxMC40IDMxLjcgMjguMSAzMS43bDE5MiAwYzE3LjcgMCAzMi40LTE0LjYgMjguMS0zMS43LTQuNS0xNy44LTEyLjgtMzQuMS0yMy45LTQ4LjEgODAuNS0yOC42IDEyMy45LTkzLjcgMTIzLjktMTc2LjIgMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMTkyeiJdCiAgICB9OwogICAgZmFIZWFkU2lkZUNvdWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYWQtc2lkZS1jb3VnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDYxIiwgIk05NiA1MTJsNjQgMGM1MyAwIDk2LTQzIDk2LTk2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2bDEgMGMyNiAwIDQ3LTIxIDQ3LTQ3IDAtMTEtMy45LTIxLjYtMTAuOS0zMC4xTDI3My4zIDIwMEMyNzEuNCAxOTcuNiAyNzAuMSAxOTQuNyAyNjkuNyAxOTEuNyAyNTQgODMuMyAxNjAuNyAwIDQ4IDAgNDAuNCAwIDMyLjkgLjQgMjUuNCAxLjEgMTAuNSAyLjYgMCAxNS45IDAgMzAuOUwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwem0xNi0zMjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjMuMSAyMzcuMmwtNDEuNS0zLjVjLTEyLjItMS0yMS42LTExLjItMjEuNi0yMy40IDAtMTAuOCA3LjMtMjAuMiAxNy44LTIyLjhsNDAuNC0xMC4xYzE5LjItNC44IDM3LjggOS43IDM3LjggMjkuNSAwIDE3LjgtMTUuMiAzMS44LTMyLjkgMzAuM3pNNDgwIDMxMmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bS00MCAyNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0tNjQgNDhhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptMTI4IDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNNDgwIDUwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bS00MC03MmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFQbGFuZUxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTU4IiwgIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDgyLjEgNzUuMkM0MDkuNyAyNDguMSA0MDAgMjc0LjkgNDAwIDMwNGwwIDI0LjRjLTcuMyA2LjYtMTMuNiAxNC4yLTE4LjcgMjIuN2wtMzcuMy0xMi40IDAgOTkuNyAyNCAxOS4yIDAgMzguM2MwIDEzLjUgMi44IDI2LjQgNy44IDM4LjFMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTU2MCAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTQxNiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktdGhyZWUtcXVhcnRlcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYmF0dGVyeS00Il0sICJmMjQxIiwgIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjI0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnk0ID0gZmFCYXR0ZXJ5VGhyZWVRdWFydGVyczsKICAgIGZhRnJhbmNTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZyYW5jLXNpZ24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTE4ZiIsICJNODAgMzJDNjIuMyAzMiA0OCA0Ni4zIDQ4IDY0bDAgMjU2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtNjQgMTQ0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE0NCAwIDAtOTYgMTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgMzJ6Il0KICAgIH07CiAgICBmYUZpbHRlckNpcmNsZURvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXItY2lyY2xlLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJmdW5uZWwtZG9sbGFyIl0sICJmNjYyIiwgIk0zMiA2NEMxOS4xIDY0IDcuNCA3MS44IDIuNCA4My44Uy4yIDEwOS41IDkuNCAxMTguNkwxOTIgMzAxLjMgMTkyIDQxNmMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMyLjUgMi41IDUuMyA0LjUgOC4zIDYtMjEuMi0zMC45LTMzLjYtNjguMy0zMy42LTEwOC42IDAtOTkuNCA3NS41LTE4MS4xIDE3Mi4zLTE5MWw5MC40LTkwLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0ek01NzYgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQxNiAzMjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDUuOCAwYy01LjYgMC0xMC4yIDQuNi0xMC4yIDEwLjIgMCA0LjkgMy41IDkuMSA4LjMgMTBsNDUgOC4yYzIwIDMuNiAzNC42IDIxLjEgMzQuNiA0MS41IDAgMjMuMy0xOC45IDQyLjItNDIuMiA0Mi4ybC01LjggMCAwIDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04LTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTMuOCAwYzUuNiAwIDEwLjItNC42IDEwLjItMTAuMiAwLTQuOS0zLjUtOS4xLTguMy0xMGwtNDUtOC4yYy0yMC0zLjYtMzQuNi0yMS4xLTM0LjYtNDEuNSAwLTIyLjYgMTcuNy00MSA0MC00Mi4xbDAtOC4xeiJdCiAgICB9OwogICAgZmFGdW5uZWxEb2xsYXIgPSBmYUZpbHRlckNpcmNsZURvbGxhcjsKICAgIGZhQ2hlZXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWVzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2VmIiwgIk01MTIgMjQwLjJsMCAxNS44LTUxMiAwYzAtMjAgMTAtMzguNyAyNi42LTQ5LjhMMjc0LjkgNDAuN2M4LjYtNS43IDE4LjYtOC43IDI4LjktOC43IDExNSAwIDIwOC4yIDkzLjIgMjA4LjIgMjA4LjJ6bTAgNjMuOGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTEyIDUxMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVIID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1oIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTQwNSwgImhvc3BpdGFsLXN5bWJvbCJdLCAiZjQ3ZSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTk2LTM0NGwwIDE3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0LTk2IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgOTYgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsU3ltYm9sID0gZmFDaXJjbGVIOwogICAgZmFTY2hvb2wgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTc5XSwgImY1NDkiLCAiTTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI3LjktMTE1LjFjMTguMy0xNi40IDQ2LTE2LjQgNjQuMiAwTDQ0OCAxMjggNTEyIDEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyek0yMjQgMzc2bDAgODggMTI4IDAgMC04OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6bS0xMTIgOGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDM4NGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNMjg4IDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXQogICAgfTsKICAgIGZhRGljZUZpdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1maXZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MF0sICJmNTIzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTk2IDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0yMjQgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQtNjRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgMTYwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhVG9ybmFkbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b3JuYWRvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3Nzg2XSwgImY3NmYiLCAiTTAgMzJMMCA0NS42QzAgNjIuNyAxLjcgNzkuNiA1IDk2bDM1Mi44IDBjMy4yLTYuOSA3LjUtMTMuMyAxMy0xOC44bDM4LjYtMzguNmM0LjItNC4yIDYuNi0xMCA2LjYtMTYgMC0xMi41LTEwLjEtMjIuNi0yMi42LTIyLjZMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJ6TTM1NS43IDE0NGwtMzM2IDBjMTIuNCAyOS43IDMwLjIgNTYuOCA1Mi43IDgwbDMzOS42IDAtNDcuMi02Mi45Yy0zLjktNS4yLTctMTEtOS4yLTE3LjF6TTI0Mi42IDMzNC43YzguMiA0LjggMTUuOCAxMC43IDIyLjUgMTcuM0w0NDUgMzUyYzItOS44IDMtMTkuOSAzLTMwLjEgMC0xNy4xLTIuOS0zNC04LjYtNDkuOUwxMzYgMjcyIDI0Mi42IDMzNC43ek0yOTQuMyA0MDBjNS4zIDE3IDYuNSAzNS4yIDMuNiA1M2wtNS45IDM1LjdjLTIgMTIuMiA3LjQgMjMuNCAxOS44IDIzLjQgNS4zIDAgMTAuNC0yLjEgMTQuMi01LjlsNzguMi03OC4yYzguNS04LjUgMTUuOC0xNy44IDIxLjktMjcuOWwtMTMxLjggMHoiXQogICAgfTsKICAgIGZhSmV0RmlnaHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqZXQtZmlnaHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJmaWdodGVyLWpldCJdLCAiZjBmYiIsICJNNDk2LjIgMjA2LjhjLTEwLjctNC41LTIyLjItNi44LTMzLjgtNi44TDM2MiAyMDAgMjQ4IDQ4IDI5NiA0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyAwIDI5NiAwTDE1MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDggMCAwIDE1Mi01NC40IDAtNTIuOC02NmMtMy0zLjgtNy42LTYtMTIuNS02TDE2IDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODggNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMCAwIDg4YzAgOC44IDcuMiAxNiAxNiAxNmwyNC4zIDBjNC45IDAgOS41LTIuMiAxMi41LTZsNTIuOC02NiA1NC40IDAgMCAxNTItOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDExNC0xNTIgMTAwLjQgMGMxMS42IDAgMjMuMS0yLjMgMzMuOC02LjhsNjUtMjcuMWM4LjktMy43IDE0LjgtMTIuNSAxNC44LTIyLjJzLTUuOC0xOC40LTE0LjgtMjIuMmwtNjUtMjcuMXoiXQogICAgfTsKICAgIGZhRmlnaHRlckpldCA9IGZhSmV0RmlnaHRlcjsKICAgIGZhVGh1bWJzRG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzgsIDYxNTc2XSwgImYxNjUiLCAiTTM4NCAzMmMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDYuMy0xLjMgMTIuMi0zLjQgMTcuNyAyMC40IDUuNSAzNS40IDI0LjEgMzUuNCA0Ni4zIDAgOS4xLTIuNiAxNy42LTcgMjQuOSAyMi4yIDQuMiAzOSAyMy43IDM5IDQ3LjEgMCAxOS43LTExLjkgMzYuNi0yOC45IDQ0IDE3IDcuNCAyOC45IDI0LjMgMjguOSA0NCAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDAgMjguMiA3MC40YzIuNSA2LjMgMy44IDEzLjEgMy44IDE5LjlsMCA0LjJjMCAyNy4zLTIyLjEgNDkuNC00OS40IDQ5LjQtMTguNyAwLTM1LjgtMTAuNi00NC4yLTI3LjNMMTcwLjEgMzU2LjNjLTYuNy0xMy4zLTEwLjEtMjgtMTAuMS00Mi45bDAtMTg2LjZjMC0xOS40IDguOS0zNy44IDI0LTUwbDEyLjItOS43QzIyNC42IDQ0LjQgMjU5LjggMzIgMjk2LjEgMzJMMzg0IDMyek04MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsNDggMHoiXQogICAgfTsKICAgIGZhQnJvb20gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJvb20iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk1MjldLCAiZjUxYSIsICJNNTY2LjYgNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTkyIDE5Mi0zNC43LTM0LjdjLTQuMi00LjItMTAtNi42LTE2LTYuNi0xMi41IDAtMjIuNiAxMC4xLTIyLjYgMjIuNmwwIDI5LjEgMTA4LjMgMTA4LjMgMjkuMSAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42IDAtNi0yLjQtMTEuOC02LjYtMTZsLTM0LjctMzQuNyAxOTItMTkyek0zNDEuMSAzNTMuNEwyMjIuNiAyMzQuOWMtNDIuNy0zLjctODUuMiAxMS43LTExNS44IDQyLjNsLTggOGMtMjIuMyAyMi4zLTM0LjggNTIuNS0zNC44IDg0IDAgNi44IDcuMSAxMS4yIDEzLjIgOC4ybDUxLjEtMjUuNWM1LTIuNSA5LjUgNC4xIDUuNCA3LjlMNy4zIDQ3My40QzIuNyA0NzcuNiAwIDQ4My42IDAgNDg5LjkgMCA1MDIuMSA5LjkgNTEyIDIyLjEgNTEybDE3My4zIDBjMzguOCAwIDc1LjktMTUuNCAxMDMuNC00Mi44IDMwLjYtMzAuNiA0NS45LTczLjEgNDIuMy0xMTUuOHoiXQogICAgfTsKICAgIGZhRmlsZUltcG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWltcG9ydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhcnJvdy1yaWdodC10by1maWxlIl0sICJmNTZmIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI0MCAxODIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTE4Mi4xIDAgMCA5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0VG9GaWxlID0gZmFGaWxlSW1wb3J0OwogICAgZmFVdGVuc2lscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1dGVuc2lscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg2MCwgNjE2ODUsICJjdXRsZXJ5Il0sICJmMmU3IiwgIk02My45IDE0LjRDNjMuMSA2LjIgNTYuMiAwIDQ4IDBzLTE1LjEgNi4yLTE2IDE0LjNMMTcuOSAxNDkuN2MtMS4zIDYtMS45IDEyLjEtMS45IDE4LjIgMCA0NS45IDM1LjEgODMuNiA4MCA4Ny43TDk2IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0LjRjNDQuOS00LjEgODAtNDEuOCA4MC04Ny43IDAtNi4xLS42LTEyLjItMS45LTE4LjJMMjIzLjkgMTQuM0MyMjMuMSA2LjIgMjE2LjIgMCAyMDggMHMtMTUuMSA2LjItMTUuOSAxNC40TDE3OC41IDE0OS45Yy0uNiA1LjctNS40IDEwLjEtMTEuMSAxMC4xLTUuOCAwLTEwLjYtNC40LTExLjItMTAuMkwxNDMuOSAxNC42QzE0My4yIDYuMyAxMzYuMyAwIDEyOCAwcy0xNS4yIDYuMy0xNS45IDE0LjZMOTkuOCAxNDkuOGMtLjUgNS44LTUuNCAxMC4yLTExLjIgMTAuMi01LjggMC0xMC42LTQuNC0xMS4xLTEwLjFMNjMuOSAxNC40ek00NDggMEM0MzIgMCAzMjAgMzIgMzIwIDE3NmwwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00NDhjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUN1dGxlcnkgPSBmYVV0ZW5zaWxzOwogICAgZmFJZEJhZGdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZC1iYWRnZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMmMxIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwem05NiAzNTJsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZMOTYgNDQ4Yy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTE1MiA2NGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTcGlkZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3BpZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzc1XSwgImY3MTciLCAiTTM2OS4zLTMxYzExLjktMy41IDI0LjQgMi43IDI5IDEzLjlsLjggMi4zIDQwIDEzNmMyLjUgOC40IC4xIDE3LjUtNi4xIDIzLjdsLTY0LjEgNjQuMSA3Ni40LTIwLjggMTkuOS01OS44IC45LTIuM2M1LTExLjEgMTcuNy0xNi44IDI5LjUtMTIuOSAxMS44IDMuOSAxOC41IDE2LjEgMTUuOCAyOGwtLjcgMi40LTI0IDcyYy0yLjUgNy42LTguNyAxMy40LTE2LjUgMTUuNmwtOTEuMSAyNC44IDkxLjEgMjQuOGM3LjcgMi4xIDEzLjkgOCAxNi41IDE1LjZsMjQgNzIgLjcgMi40YzIuNyAxMS45LTQuMSAyNC4xLTE1LjggMjgtMTEuOCAzLjktMjQuNS0xLjgtMjkuNS0xMi45bC0uOS0yLjMtMTkuOS01OS44LTc2LjQtMjAuOCA2NC4xIDY0LjFjNi4xIDYuMSA4LjUgMTUuMSA2LjIgMjMuNGwtNDAgMTQ0LS44IDIuM2MtNC40IDExLjMtMTYuOCAxNy43LTI4LjggMTQuNC0xMi0zLjMtMTkuMy0xNS4yLTE3LjItMjcuMmwuNS0yLjQgMzYuMi0xMzAuNS0zNy4yLTM3LjJDMzUxIDQwNiAzMDguNCA0NDggMjU2IDQ0OHMtOTUtNDItOTYtOTQuMWwtMzcgMzcgMzYgMTIyLjMgLjYgMi40YzIuMiAxMS45LTQuOSAyMy45LTE2LjggMjcuNC0xMS45IDMuNS0yNC40LTIuNy0yOS0xMy45bC0uOC0yLjMtNDAtMTM2Yy0yLjUtOC40LS4xLTE3LjUgNi4xLTIzLjhsNjQuMS02NC4xLTc2LjQgMjAuOC0xOS45IDU5LjgtLjkgMi4zYy01IDExLjEtMTcuNyAxNi44LTI5LjUgMTIuOXMtMTguNS0xNi4xLTE1LjgtMjhsLjctMi40IDI0LTcyYzIuNS03LjYgOC43LTEzLjQgMTYuNS0xNS42bDkxLjEtMjQuOC05MS4xLTI0LjhjLTcuNy0yLjEtMTMuOS04LTE2LjUtMTUuNmwtMjQtNzItLjctMi40Yy0yLjctMTEuOSA0LjEtMjQuMSAxNS44LTI4czI0LjUgMS44IDI5LjUgMTIuOWwuOSAyLjMgMTkuOSA1OS44IDc2LjQgMjAuOC02NC4xLTY0LjFjLTYuMi02LjItOC41LTE1LjMtNi4xLTIzLjdsNDAtMTM2IC44LTIuM2M0LjYtMTEuMyAxNy4xLTE3LjQgMjktMTMuOSAxMS45IDMuNSAxOSAxNS41IDE2LjggMjcuNGwtLjYgMi40LTM2IDEyMi4zIDUzIDUzYzEtNDMuMyAzNi40LTc4LjEgNzkuOS03OC4xczc4LjkgMzQuOCA3OS45IDc4LjJsNTMuMS01My4xLTM2LTEyMi4zLS42LTIuNGMtMi4yLTEyIDQuOS0yMy45IDE2LjgtMjcuNHoiXQogICAgfTsKICAgIGZhTW9iaWxlUmV0cm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXJldHJvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1MjciLCAiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHptODAgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTggMTkyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0em02NC03MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHptNjQtNzJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6TTE2OCA0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFTaWduc1Bvc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2lnbnMtcG9zdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtYXAtc2lnbnMiXSwgImYyNzciLCAiTTI1Ni40IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDAgMCA2NC0xNTMuNCAwYy00LjIgMC04LjMgMS43LTExLjMgNC43bC00OCA0OGMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsNDggNDhjMyAzIDcuMSA0LjcgMTEuMyA0LjdsMTUzLjQgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTY0IDE1My40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w0OC00OGM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNDgtNDhjLTMtMy03LjEtNC43LTExLjMtNC43bC0xNTMuNCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYU1hcFNpZ25zID0gZmFTaWduc1Bvc3Q7CiAgICBmYUdyb3VwQXJyb3dzUm90YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyb3VwLWFycm93cy1yb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRmNiIsICJNMzcuNiAxMjIuM2MtMTEuNSAxOC43LTIwLjYgMzktMjcgNjAuNS01IDE2LjkgNC42IDM0LjggMjEuNSAzOS44czM0LjgtNC42IDM5LjgtMjEuNWMxOC40LTYxLjkgNjcuMy0xMTAuOCAxMjkuMi0xMjkuMiAxNi45LTUgMjYuNi0yMi45IDIxLjUtMzkuOFMxOTkuOCA1LjYgMTgyLjkgMTAuNkMxNjEuNCAxNyAxNDEuMSAyNi4xIDEyMi4zIDM3LjYgMTEyLjMgMTUuNCA4OS45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjQgMCA4OS45IDE1LjQgMTEyLjMgMzcuNiAxMjIuM3ptNDM2LjcgMGMyMi4yLTEwIDM3LjYtMzIuNCAzNy42LTU4LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjUuOSAwLTQ4LjMgMTUuNC01OC4zIDM3LjYtMTguNy0xMS41LTM5LTIwLjYtNjAuNS0yNy0xNi45LTUtMzQuOCA0LjYtMzkuOCAyMS41czQuNiAzNC44IDIxLjUgMzkuOGM2MS45IDE4LjQgMTEwLjggNjcuMyAxMjkuMiAxMjkuMiA1IDE2LjkgMjIuOSAyNi42IDM5LjggMjEuNXMyNi42LTIyLjkgMjEuNS0zOS44Yy02LjQtMjEuNS0xNS41LTQxLjgtMjctNjAuNXpNNTEyIDQ0OGMwLTI1LjktMTUuNC00OC4zLTM3LjYtNTguMyAxMS41LTE4LjcgMjAuNi0zOSAyNy02MC41IDUtMTYuOS00LjYtMzQuOC0yMS41LTM5LjhzLTM0LjggNC42LTM5LjggMjEuNWMtMTguNCA2MS45LTY3LjMgMTEwLjgtMTI5LjIgMTI5LjItMTYuOSA1LTI2LjYgMjIuOS0yMS41IDM5LjhzMjIuOSAyNi42IDM5LjggMjEuNWMyMS41LTYuNCA0MS44LTE1LjUgNjAuNS0yNyAxMCAyMi4yIDMyLjQgMzcuNiA1OC4zIDM3LjYgMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTM3LjYgMzg5LjdjLTIyLjIgMTAtMzcuNiAzMi40LTM3LjYgNTguMyAwIDM1LjMgMjguNyA2NCA2NCA2NCAyNS45IDAgNDguMy0xNS40IDU4LjMtMzcuNiAxOC43IDExLjUgMzkgMjAuNiA2MC41IDI3IDE2LjkgNSAzNC44LTQuNiAzOS44LTIxLjVzLTQuNi0zNC44LTIxLjUtMzkuOGMtNjEuOS0xOC40LTExMC44LTY3LjMtMTI5LjItMTI5LjItNS0xNi45LTIyLjktMjYuNi0zOS44LTIxLjVTNS42IDMxMi4yIDEwLjYgMzI5LjFjNi40IDIxLjUgMTUuNSA0MS44IDI3IDYwLjV6TTI1NiAxOTJjMTUuNiAwIDMwIDUuNiA0MS4xIDE0LjlsLTE1LjMgMTUuM2MtNi42IDYuNi0xLjkgMTcuOCA3LjQgMTcuOGw2MC41IDBjNS43IDAgMTAuNC00LjcgMTAuNC0xMC40bDAtNjAuNWMwLTkuMy0xMS4yLTEzLjktMTcuOC03LjRsLTExLjIgMTEuMmMtMTkuOC0xNy45LTQ2LjItMjguOS03NS4xLTI4LjktNDMuNiAwLTgxLjMgMjQuOS05OS44IDYxLjEtNiAxMS44LTEuNCAyNi4zIDEwLjQgMzIuM3MyNi4zIDEuNCAzMi4zLTEwLjRjMTAuNi0yMC44IDMyLjItMzQuOSA1Ny0zNC45em01OC42IDkzLjFjLTEwLjYgMjAuOC0zMi4yIDM0LjktNTcgMzQuOS0xNS43IDAtMzAtNS42LTQxLjEtMTQuOWwxNS4zLTE1LjNjNi42LTYuNiAxLjktMTcuOC03LjQtMTcuOEwxNjQgMjcyYy01LjcgMC0xMC40IDQuNy0xMC40IDEwLjRsMCA2MC41YzAgOS4zIDExLjIgMTMuOSAxNy44IDcuNGwxMS4yLTExLjJjMTkuOCAxNy45IDQ2LjIgMjguOSA3NS4xIDI4LjkgNDMuNiAwIDgxLjMtMjQuOSA5OS44LTYxLjEgNi0xMS44IDEuNC0yNi4zLTEwLjQtMzIuM3MtMjYuMy0xLjQtMzIuMyAxMC40eiJdCiAgICB9OwogICAgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3Mtc3BsaXQtdXAtYW5kLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiYyIsICJNMzQyLjYtMjIuNmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDQxLjQtNDEuNCAwIDE5NS45Yy0xOC44LTEwLjktNDAuNy0xNy4xLTY0LTE3LjFsLTExNC43IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAzMjAgMjI0IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXQogICAgfTsKICAgIGZhRmlsbERyaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsbC1kcmlwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1NzYiLCAiTTMwOS43IDcxLjZsLTY0LjQgNjQuNCAzMy40IDMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTMzLjQtMzMuNC05Ni40IDk2LjRjLTIuOSAyLjktNS4xIDYuNS02LjMgMTAuM2wzMjEuNSAwIDUzLjctNTMuN2M0LjktNC45IDcuNi0xMS41IDcuNi0xOC4zcy0yLjctMTMuNS03LjYtMTguM0wzNDYuMyA3MS42QzM0MS41IDY2LjcgMzM0LjkgNjQgMzI4IDY0cy0xMy41IDIuNy0xOC4zIDcuNnpNNTguMyAyMzIuNGw5Ni40LTk2LjQtNDkuNC00OS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDIwMCA5MC43IDI2NC40IDI2LjNDMjgxLjMgOS41IDMwNC4xIDAgMzI4IDBzNDYuNyA5LjUgNjMuNiAyNi4zTDUxNy43IDE1Mi40QzUzNC41IDE2OS4zIDU0NCAxOTIuMSA1NDQgMjE2cy05LjUgNDYuNy0yNi4zIDYzLjZMMzExLjYgNDg1LjdDMjk0LjcgNTAyLjUgMjcxLjkgNTEyIDI0OCA1MTJzLTQ2LjctOS41LTYzLjYtMjYuM0w1OC4zIDM1OS42QzQxLjUgMzQyLjcgMzIgMzE5LjkgMzIgMjk2czkuNS00Ni43IDI2LjMtNjMuNnpNNTEyIDU0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yNS4yIDMyLjYtNzkuNiA1MS4yLTEwOC43IDYtOS40IDE5LjUtOS40IDI1LjUgMCAxOC43IDI5LjEgNTEuMiA4My41IDUxLjIgMTA4LjcgMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYVNoaWVsZEhlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1oZWFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTc0IiwgIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMjQ5LjYgMTgzLjVsNi40IDguNSA2LjQtOC41YzExLjEtMTQuOCAyOC41LTIzLjUgNDYuOS0yMy41IDMyLjQgMCA1OC43IDI2LjMgNTguNyA1OC43bDAgNS4zYzAgNDkuMS02NS44IDk4LjEtOTYuNSAxMTguMy05LjUgNi4yLTIxLjUgNi4yLTMwLjkgMC0zMC43LTIwLjItOTYuNS02OS4zLTk2LjUtMTE4LjNsMC01LjNjMC0zMi40IDI2LjMtNTguNyA1OC43LTU4LjcgMTguNSAwIDM1LjkgOC43IDQ2LjkgMjMuNXoiXQogICAgfTsKICAgIGZhUGVyc29uU2tpaW5nTm9yZGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1za2lpbmctbm9yZGljIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNraWluZy1ub3JkaWMiXSwgImY3Y2EiLCAiTTQyNC44IDE2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem05OS44IDE5My43YzcuNiAxNS4yIDEuOSAzMy42LTEyLjYgNDJsMCAxODAuMy0zMiAwIDAtMTY0LjItMTAuMSA1Yy0yNy40IDEzLjctNjAuNyA2LjEtNzkuNC0xOC4ybC0xOS42LTI1LjUtMzkuNSA2OC44IDI0LjggMTIuNGMyOS41IDE0LjcgNDIuOSA0OS41IDMxLjEgODAuMmwtMjguMiA3My40IDE0OS40IDBjNy45IDAgMTUuNi0yLjMgMjIuMi02LjdsNy45LTUuM2MxMS03LjQgMjUuOS00LjQgMzMuMyA2LjdzNC40IDI1LjktNi43IDMzLjNsLTcuOSA1LjNDNTQzIDUwNi45IDUyNiA1MTIgNTA4LjYgNTEybC0xODkuMSAwYy0uNSAwLTEgMC0xLjUgMEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsODggMGMwLTguMiAzLjEtMTYuNCA5LjQtMjIuNmw3NC4xLTc0LjEgMTAuMi0zNS45YzExLjMgMTguMyAyNy43IDMzLjggNDguNCA0NC4ybDQuOCAyLjQtMS45IDYuOGMtMyAxMC41LTguNiAyMC0xNi4zIDI3LjdsLTUxLjUgNTEuNSAxMDEuMyAwIDM3LjEtOTYuNC01NS42LTI3LjhDMjMwLjQgMzE5IDIxNS4zIDI2NyAyMzkuMyAyMjcuMWwzNy43LTYyLjctMjcuNy03LjdjLTktMi41LTE4LjEgMy4yLTIwIDEyLjNsLTUuOSAyOS4zYy0zLjEgMTUuNi0xNy4xIDI2LjMtMzIuNSAyNS43bC0xMzAgMjA4LTM3LjcgMCAxNDAuNi0yMjVjLTMuNC02LjMtNC42LTEzLjgtMy4xLTIxLjNsNS45LTI5LjNjOS4xLTQ1LjYgNTUuMS03My44IDk5LjktNjEuNGwzMi41IDljNDYuNyAxMyA4OCA0MC44IDExNy42IDc5LjNsMjQuOSAzMi4zIDQwLjQtMjAuMmMxNS44LTcuOSAzNS0xLjUgNDIuOSAxNC4zeiJdCiAgICB9OwogICAgZmFTa2lpbmdOb3JkaWMgPSBmYVBlcnNvblNraWluZ05vcmRpYzsKICAgIGZhU3F1YXJlQ2hlY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk3NDUsIDk5ODksIDYxNTEwLCAiY2hlY2stc3F1YXJlIl0sICJmMTRhIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0zNDIgMTQ1LjdjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zTDE4OS4xIDMxNS4yIDEzNyAyNjMuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM1IDUgMTEuOSA3LjUgMTguOCA3czEzLjQtNC4xIDE3LjUtOS44TDM0Ny4zIDE3OS4yYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdCiAgICB9OwogICAgZmFDaGVja1NxdWFyZTIgPSBmYVNxdWFyZUNoZWNrMjsKICAgIGZhQmF0aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXRoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzA1LCAiYmF0aHR1YiJdLCAiZjJjZCIsICJNOTYgNzcuM2MwLTcuMyA1LjktMTMuMyAxMy4zLTEzLjMgMy41IDAgNi45IDEuNCA5LjQgMy45bDE0LjkgMTQuOWMtMy42IDkuMS01LjUgMTguOS01LjUgMjkuMiAwIDE5LjkgNy4yIDM4IDE5LjIgNTItNS4zIDkuMi00IDIxLjEgMy44IDI5IDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDI4OSA4OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOS03LjgtNy45LTE5LjgtOS4xLTI5LTMuOC0xNC0xMi0zMi4xLTE5LjItNTItMTkuMi0xMC4zIDAtMjAuMiAyLTI5LjIgNS41TDE2My45IDIyLjZDMTQ5LjQgOC4xIDEyOS43IDAgMTA5LjMgMCA2Ni42IDAgMzIgMzQuNiAzMiA3Ny4zTDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDQ4YzAgMjguNCAxMi40IDU0IDMyIDcxLjZMNjQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNiAyNTYgMCAwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00MC40YzE5LjYtMTcuNiAzMi00My4xIDMyLTcxLjZsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAyNTYgOTYgNzcuM3oiXQogICAgfTsKICAgIGZhQmF0aHR1YiA9IGZhQmF0aDsKICAgIGZhQ2hlc3NCaXNob3AyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLWJpc2hvcCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzk4MjFdLCAiZjQzYSIsICJNNjQgMzg0TDQ4LjMgMzY4LjNDMTcuNCAzMzcuNCAwIDI5NS40IDAgMjUxLjcgMCAyMTMuMSAxMy41IDE3NS44IDM4LjIgMTQ2LjFMMTA2LjcgNjQgOTYgNjRDNzguMyA2NCA2NCA0OS43IDY0IDMyUzc4LjMgMCA5NiAwTDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMC43IDAgNDcuNiA1Ny4xLTg1LjkgODUuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDgyLjMtODIuM2MxOC43IDI3LjMgMjguNyA1OS43IDI4LjcgOTMgMCA0My43LTE3LjQgODUuNy00OC4zIDExNi42TDI1NiAzODQgMzEyLjIgNDU0LjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMMzUuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDY0IDM4NHoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwcmVzY3JpcHRpb24tYm90dGxlLW1lZGljYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsicHJlc2NyaXB0aW9uLWJvdHRsZS1hbHQiXSwgImY0ODYiLCAiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NEwwIDMyek0zMiAxNDRsMzIwIDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHpNMTYwIDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0ID0gZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsOwogICAgZmFEcmF3UG9seWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcmF3LXBvbHlnb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs1ODA1NSwgInZlY3Rvci1wb2x5Z29uIl0sICJmNWVlIiwgIk02NCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmwyNzMuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAzNC0yNi41IDYxLjgtNjAgNjMuOWwtMi4xIDIuOS03MS41IDk5LjFjMy42IDggNS42IDE2LjkgNS42IDI2LjJzLTIgMTguMi01LjYgMjYuMmwyLjIgMy4xIDY5LjMgOTYgMi4xIDIuOWMzMy41IDIuMSA2MCAyOS45IDYwIDYzLjkgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yNzMuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI3My4xQzEyLjkgMTA4LjQgMCA4Ny43IDAgNjQgMCAyOC43IDI4LjcgMCA2NCAwek0zOTQuMiA0MTMuNGwtNjUuNS05MC42LTIuMi0zLjFjLTIuMSAuMi00LjMgLjMtNi41IC4zLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMi4yIDAgNC40IC4xIDYuNSAuM2w2Ny43LTkzLjdjLS42LS45LTEuMS0xLjctMS42LTIuNkwxMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40bDAgMjczLjFjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDI3My4xIDBjLjUtLjkgMS4xLTEuOCAxLjYtMi42eiJdCiAgICB9OwogICAgZmFWZWN0b3JQb2x5Z29uID0gZmFEcmF3UG9seWdvbjsKICAgIGZhSUN1cnNvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpLWN1cnNvciIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMjQ2IiwgIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM2wwIDk1LjctMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgOTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43UzE3IDUxMy40IDM0LjcgNTExLjlsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45IDIxLjIgMjQgNTEuMiA0MCA4NS40IDQyLjlsOCAuN2MxNy42IDEuNSAzMy4xLTExLjYgMzQuNS0yOS4ycy0xMS42LTMzLjEtMjkuMi0zNC41bC04LS43QzE4NS41IDQ0NC43IDE2MCA0MTcgMTYwIDM4My43bDAtOTUuNyAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtOTUuN2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdjLTM0LjEgMi44LTY0LjIgMTguOS04NS40IDQyLjktMjEuMi0yNC01MS4yLTQwLTg1LjQtNDIuOWwtOC0uN0MxNy0xLjQgMS42IDExLjcgLjEgMjkuM3oiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MDAiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6Il0KICAgIH07CiAgICBmYVNoaWVsZERvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtZG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzMiLCAiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAuOSAyODYuMmM0LjggMS4yIDkuOSAxLjggMTUuMSAxLjggMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NCA0NC4yIDBjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w3LjIgMTQuMyA2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgNDQuMi0zNS44IDgwLTgwIDgwbC00OCAwIDAgNTAuN2MwIDcuMy01LjkgMTMuMy0xMy4zIDEzLjMtMS44IDAtMy42LS40LTUuMi0xLjFsLTk4LjctNDIuM2MtNi42LTIuOC0xMC44LTkuMy0xMC44LTE2LjQgMC0yLjggLjYtNS41IDEuOS04bDE1LTMwek0xNjAgMTYwbDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il0KICAgIH07CiAgICBmYUdyZWF0ZXJUaGFuRXF1YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JlYXRlci10aGFuLWVxdWFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MzIiLCAiTTIxLjkgOTQuNEM1LjEgODguOC0zLjkgNzAuNiAxLjcgNTMuOVMyNS40IDI4LjEgNDIuMSAzMy42bDM4NCAxMjhDNDM5LjIgMTY2IDQ0OCAxNzguMiA0NDggMTkycy04LjggMjYtMjEuOSAzMC40bC0zODQgMTI4Yy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41TDMxNC44IDE5MiAyMS45IDk0LjR6TTQxNiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAweiJdCiAgICB9OwogICAgZmFFbnZlbG9wZU9wZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzNV0sICJmMmI2IiwgIk02NC40IDE3NS44TDI1NiAzMy45IDQ0Ny42IDE3NS44IDI4OS41IDI5M2MtOS43IDcuMi0yMS40IDExLTMzLjUgMTFzLTIzLjgtMy45LTMzLjUtMTFMNjQuNCAxNzUuOHpNMjU2LTMyYy0xMi4xIDAtMjMuOCAzLjktMzMuNSAxMUwyNS45IDEyNC43QzkuNiAxMzYuOCAwIDE1NS44IDAgMTc2LjFMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMzkuOWMwLTIwLjMtOS42LTM5LjQtMjUuOS01MS40TDI4OS41LTIxYy05LjctNy4yLTIxLjQtMTEtMzMuNS0xMXoiXQogICAgfTsKICAgIGZhTW91bmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyZCIsICJNMTEyLjQgMTc5LjJDMTQyIDEyNy43IDE5Ni44IDk2IDI1Ni4yIDk2czExNC4yIDMxLjcgMTQzLjkgODMuMkw1MDguNyAzNjhjMTIuMyAyMS4zLTMuMSA0OC0yNy43IDQ4TDMxLjUgNDE2Yy0yNC42IDAtNDAtMjYuNi0yNy43LTQ4TDExMi40IDE3OS4yeiJdCiAgICB9OwogICAgZmFWb2ljZW1haWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9pY2VtYWlsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4OTciLCAiTTE0NCAxNjBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTI2My44IDMyMGMxNS4zLTIyLjkgMjQuMi01MC40IDI0LjItODAgMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRTMCAxNjAuNSAwIDI0MCA2NC41IDM4NCAxNDQgMzg0bDM1MiAwYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0UzU3NS41IDk2IDQ5NiA5NiAzNTIgMTYwLjUgMzUyIDI0MGMwIDI5LjYgOC45IDU3LjEgMjQuMiA4MGwtMTEyLjUgMHpNNDk2IDE2MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHoiXQogICAgfTsKICAgIGZhVmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODUiLCAiTTIwMCA0NjRsMC0xNzAuMWMwLTMuOS0uNS03LjgtMS40LTExLjZMMTQ0LjQgNjUuNEMxNjIuMSA3Ny4yIDE4OC4yIDg4IDIyNCA4OHM2MS45LTEwLjggNzkuNi0yMi42TDI0OS40IDI4Mi4zYy0xIDMuOC0xLjQgNy43LTEuNCAxMS42TDI0OCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTA0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xOTMuNWMwLTkuNS0yLjgtMTguNy04LjEtMjYuNmwtNDcuOS03MS44Yy01LjMtNy45LTguMS0xNy4xLTguMS0yNi42TDM4NCA0OGMwLTI2LjUtMjEuNS00OC00OC00OGwtMy41IDBjLS4zIDAtLjYgMC0xIDAtLjYgMC0xLjIgMC0xLjggMC0xOC44IDAtMzQuMSA5LjctNDQuMSAxOC44LTkuMyA4LjQtMjguNSAyMS4yLTYxLjcgMjEuMnMtNTIuNC0xMi44LTYxLjctMjEuMmMtMTAtOS4xLTI1LjMtMTguOC00NC4xLTE4LjgtLjYgMC0xLjIgMC0xLjggMC0uMyAwLS42IDAtMSAwTDExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgOTcuNWMwIDkuNS0yLjggMTguNy04LjEgMjYuNkw4LjEgMjQzLjlDMi44IDI1MS44IDAgMjYxLjEgMCAyNzAuNUwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHoiXQogICAgfTsKICAgIGZhQXVkaW9EZXNjcmlwdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdWRpby1kZXNjcmlwdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjllIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA5NmwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgNDggMCAwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0em00OCAzMmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyLTQ4IDB6bTE1Mi05NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTQ4YzAtMzkuOC0zMi4yLTcyLTcyLTcybC00OCAwem00OCAxNDRsLTI0IDAgMC05NiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYVcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExOV0sICI1NyIsICJNMjAuOCAzNGMxNi41LTYuMiAzNSAyLjIgNDEuMiAxOC43TDE3Mi4yIDM0Ni43IDI1Ny4zIDU1YzQtMTMuNyAxNi41LTIzIDMwLjctMjNzMjYuNyA5LjQgMzAuNyAyM0w0MDMuOCAzNDYuNyA1MTQgNTIuOGM2LjItMTYuNSAyNC42LTI0LjkgNDEuMi0xOC43UzU4MC4yIDU4LjcgNTc0IDc1LjJsLTE0NCAzODRjLTQuOCAxMi45LTE3LjQgMjEuMy0zMS4yIDIwLjdzLTI1LjctOS44LTI5LjUtMjNMMjg4IDE3OC4zIDIwNi43IDQ1N2MtMy45IDEzLjItMTUuOCAyMi41LTI5LjUgMjNzLTI2LjMtNy44LTMxLjItMjAuN0wyIDc1LjJDLTQuMiA1OC43IDQuMiA0MC4yIDIwLjggMzR6Il0KICAgIH07CiAgICBmYUV5ZURyb3BwZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLWRyb3BwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXllLWRyb3BwZXItZW1wdHkiLCAiZXllZHJvcHBlciJdLCAiZjFmYiIsICJNMzQxLjYgMjkuMmwtMTAxLjYgMTAxLjYtOS40LTkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDEwMS42LTEwMS42YzM5LTM5IDM5LTEwMi4yIDAtMTQxLjFzLTEwMi4yLTM5LTE0MS4xIDB6TTU1LjQgMzIzLjNjLTE1IDE1LTIzLjQgMzUuNC0yMy40IDU2LjZsMCA0Mi40LTI2LjYgMzkuOWMtOC41IDEyLjctNi44IDI5LjYgNCA0MC40czI3LjcgMTIuNSA0MC40IDRsMzkuOS0yNi42IDQyLjQgMGMyMS4yIDAgNDEuNi04LjQgNTYuNi0yMy40bDEwOS40LTEwOS40LTQ1LjMtNDUuMy0xMDkuNCAxMDkuNGMtMyAzLTcuMSA0LjctMTEuMyA0LjdsLTM2LjEgMCAwLTM2LjFjMC00LjIgMS43LTguMyA0LjctMTEuM2wxMDkuNC0xMDkuNC00NS4zLTQ1LjMtMTA5LjQgMTA5LjR6Il0KICAgIH07CiAgICBmYUV5ZURyb3BwZXJFbXB0eSA9IGZhRXllRHJvcHBlcjsKICAgIGZhRXllZHJvcHBlciA9IGZhRXllRHJvcHBlcjsKICAgIGZhQ2lyY2xlWG1hcmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMyLCAidGltZXMtY2lyY2xlIiwgInhtYXJrLWNpcmNsZSJdLCAiZjA1NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYVRpbWVzQ2lyY2xlMiA9IGZhQ2lyY2xlWG1hcmsyOwogICAgZmFYbWFya0NpcmNsZTIgPSBmYUNpcmNsZVhtYXJrMjsKICAgIGZhVHJhaWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNDEiLCAiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5Ni40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04TDk2IDQxNmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgOTZ6bTQwOCAxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTEyIDEzNmwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em0xNzYtMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI2NCA0MjRhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHoiXQogICAgfTsKICAgIGZhVHVya2lzaExpcmFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR1cmtpc2gtbGlyYS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyeSIsICJ0dXJraXNoLWxpcmEiXSwgImUyYmIiLCAiTTE2MCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQzLjYgMTIxLjQtMzQuN2MxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0xMzQuNiAzOC41IDAgNDYuMSAxMjEuNC0zNC43YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTEzNC42IDM4LjUgMCAxNjIuNSA3MiAwYzUzIDAgOTYtNDMgOTYtOTYgMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtMTA0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2LjItMjUuNCA3LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wzOC42LTExIDAtNDYuMS0yNS40IDcuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDM4LjYtMTEgMC02MS45YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFUcnkgPSBmYVR1cmtpc2hMaXJhU2lnbjsKICAgIGZhVHVya2lzaExpcmEgPSBmYVR1cmtpc2hMaXJhU2lnbjsKICAgIGZhVm9sY2FubyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2xjYW5vIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU1XSwgImY3NzAiLCAiTTE2MCAxNDRjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMTUuNyAwIDMwIDUuNiA0MS4yIDE1IDExLjItMTguNiAzMS42LTMxIDU0LjgtMzFzNDMuNiAxMi40IDU0LjggMzFjMTEuMS05LjQgMjUuNS0xNSA0MS4yLTE1IDM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xNC43IDAtMjguMy01LTM5LjEtMTMuM2wtMzIgNDhDMjc1LjMgMTg3IDI2NiAxOTIgMjU2IDE5MnMtMTkuMy01LTI0LjktMTMuM2wtMzItNDhDMTg4LjMgMTM5IDE3NC43IDE0NCAxNjAgMTQ0ek0xNDQgMzUybDQ4LjQtMjQuMmMxMC4yLTUuMSAyMS42LTcuOCAzMy03LjggMTkuNiAwIDM4LjQgNy44IDUyLjIgMjEuNmwzMi41IDMyLjVjNi4zIDYuMyAxNC45IDkuOSAyMy44IDkuOSAxMS4zIDAgMjEuOC01LjYgMjgtMTVsOS43LTE0LjYtNTktNjYuM2MtOS4xLTEwLjItMjIuMi0xNi4xLTM1LjktMTYuMWwtNDEuOCAwYy0xMy43IDAtMjYuOCA1LjktMzUuOSAxNi4xbC01OS45IDY3LjQgNC43LTMuNXptMTkuNC05NS44YzE4LjItMjAuNSA0NC4zLTMyLjIgNzEuOC0zMi4ybDQxLjggMGMyNy40IDAgNTMuNSAxMS43IDcxLjggMzIuMmwxNTAuMiAxNjljOC41IDkuNSAxMy4yIDIxLjkgMTMuMiAzNC43IDAgMjguOC0yMy40IDUyLjItNTIuMiA1Mi4yTDUyLjIgNTEyQzIzLjQgNTEyIDAgNDg4LjYgMCA0NTkuOCAwIDQ0Ny4xIDQuNyA0MzQuNyAxMy4yIDQyNS4ybDE1MC4yLTE2OXoiXQogICAgfTsKICAgIGZhV2FuZFNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbmQtc3BhcmtsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcyYiIsICJNNDY0IDYuMWM5LjUtOC41IDI0LTguMSAzMyAuOWw4IDhjOSA5IDkuNCAyMy41IC45IDMzbC04NS44IDk1LjljLTIuNiAyLjktNC4xIDYuNy00LjEgMTAuN2wwIDIxLjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNS44IDBjLTQuNiAwLTguOSAxLjktMTEuOSA1LjNMMTAwLjcgNTAwLjljLTYuMyA3LjEtMTUuMyAxMS4xLTI0LjggMTEuMS04LjggMC0xNy4zLTMuNS0yMy41LTkuOEw5LjcgNDU5LjdjLTYuMi02LjItOS43LTE0LjctOS43LTIzLjUgMC05LjUgNC0xOC41IDExLjEtMjQuOGwxMTEuNi05OS44YzMuNC0zIDUuMy03LjQgNS4zLTExLjlsMC0yNy42YzAtOC44IDcuMi0xNiAxNi0xNmwzNC42IDBjMy45IDAgNy43LTEuNSAxMC43LTQuMUw0NjQgNi4xek00MzIgMjg4YzMuNiAwIDYuNyAyLjQgNy43IDUuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOGwtMTQuOC01MS43LTUxLjctMTQuOGMtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHpNODcuNyA2OS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44TDU3LjUgMTY2LjUgNS44IDE1MS43Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44czYuNyAyLjQgNy43IDUuOHpNMjA4IDBjMy43IDAgNi45IDIuNSA3LjggNi4xbDYuOCAyNy4zIDI3LjMgNi44YzMuNiAuOSA2LjEgNC4xIDYuMSA3LjhzLTIuNSA2LjktNi4xIDcuOGwtMjcuMyA2LjgtNi44IDI3LjNjLS45IDMuNi00LjEgNi4xLTcuOCA2LjFzLTYuOS0yLjUtNy44LTYuMWwtNi44LTI3LjMtMjcuMy02LjhjLTMuNi0uOS02LjEtNC4xLTYuMS03LjhzMi41LTYuOSA2LjEtNy44bDI3LjMtNi44IDYuOC0yNy4zYy45LTMuNiA0LjEtNi4xIDcuOC02LjF6Il0KICAgIH07CiAgICBmYU1pY3JvcGhvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTMwIiwgIk0xOTIgMEMxMzkgMCA5NiA0MyA5NiA5NmwwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6TTQ4IDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDE3MC43IDAgMTg0bDAgNDBjMCA5Ny45IDczLjMgMTc4LjcgMTY4IDE5MC41bDAgNDkuNS00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtNDkuNWM5NC43LTExLjggMTY4LTkyLjYgMTY4LTE5MC41bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCAzMDMuNSA0OCAyMjRsMC00MHoiXQogICAgfTsKICAgIGZhQ3Jvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3Jvd24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwODFdLCAiZjUyMSIsICJNMzEzIDg3LjJjOS4yLTcuMyAxNS0xOC42IDE1LTMxLjIgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCAxMi42IDUuOSAyMy45IDE1IDMxLjJMMTk0LjYgMTk0LjhjLTEwIDE1LjctMzEuMyAxOS42LTQ2LjIgOC40TDg4LjkgMTU4LjdjNC41LTYuNCA3LjEtMTQuMyA3LjEtMjIuNyAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDIxLjggMTcuNSAzOS42IDM5LjIgNDBMODcuOCAzOTMuNWM0LjcgMzEuMyAzMS42IDU0LjUgNjMuMyA1NC41bDI3My44IDBjMzEuNyAwIDU4LjYtMjMuMiA2My4zLTU0LjVMNTIwLjggMTc2YzIxLjctLjQgMzkuMi0xOC4yIDM5LjItNDAgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA4LjQgMi42IDE2LjMgNy4xIDIyLjdsLTU5LjQgNDQuNmMtMTQuOSAxMS4yLTM2LjIgNy4zLTQ2LjItOC40TDMxMyA4Ny4yeiJdCiAgICB9OwogICAgZmFUZW50QXJyb3dUdXJuTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93LXR1cm4tbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTgwIiwgIk0tLjUgMTEzbDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMzEtMzEgMzUwLjEgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMzUwLjEgMCAzMS0zMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM4MC45LTIuMyA3MS41IDdMLS41IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdCiAgICB9OwogICAgZmFUcnVja0Zhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZmFzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJzaGlwcGluZy1mYXN0Il0sICJmNDhiIiwgIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyIDUwLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MjEuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w2NDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zLjMgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTEwMi42IDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0zLjMgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC00OC00MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDI0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCAxNDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzEwLjcgOTYgMjQgOTZsNDAgMHpNNTc2IDI4OGwwLTUwLjctNDUuMy00NS4zLTUwLjcgMCAwIDk2IDk2IDB6TTI1NiA0MjRhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMjMyIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhU2hpcHBpbmdGYXN0ID0gZmFUcnVja0Zhc3Q7CiAgICBmYVVzZXJQZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1wZW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci1lZGl0Il0sICJmNGZmIiwgIk0yNTYuMSAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NmMtOTguNSAwLTE3OC4zIDc5LjgtMTc4LjMgMTc4LjMgMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdsMTk2LjUgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsNjcuMy02Ny4zYy0yOC0xOC4zLTYxLjQtMjguOS05Ny40LTI4LjlsLTU5LjQgMHpNMzMyLjMgNDY2LjlsLTExLjkgNTkuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42IDEgMCAxLjktLjEgMi45LS4zbDU5LjYtMTEuOWMxMi40LTIuNSAyMy44LTguNiAzMi43LTE3LjVsMTE4LjktMTE4LjktODAtODAtMTE4LjkgMTE4LjljLTguOSA4LjktMTUgMjAuMy0xNy41IDMyLjd6bTI2Ny44LTEyM2MyMi4xLTIyLjEgMjIuMS01Ny45IDAtODBzLTU3LjktMjIuMS04MCAwbC0yOC44IDI4LjggODAgODAgMjguOC0yOC44eiJdCiAgICB9OwogICAgZmFVc2VyRWRpdCA9IGZhVXNlclBlbjsKICAgIGZhVXNlckNsb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItY2xvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmZCIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0xOTQuMyAzMDRsNTkuNCAwYzMuOSAwIDcuOSAuMSAxMS44IC40LTE2LjIgMjguMi0yNS41IDYwLjgtMjUuNSA5NS42IDAgNDEuOCAxMy40IDgwLjUgMzYgMTEyTDQ1LjcgNTEyQzI5LjMgNTEyIDE2IDQ5OC43IDE2IDQ4Mi4zIDE2IDM4My44IDk1LjggMzA0IDE5NC4zIDMwNHpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDQtODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFTaG93ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hvd2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzAzXSwgImYyY2MiLCAiTTY0IDEzMS45YzAtMTkuOCAxNi4xLTM1LjkgMzUuOS0zNS45IDkuNSAwIDE4LjYgMy44IDI1LjQgMTAuNWwxNi4yIDE2LjJjLTIxIDM4LjktMTcuNCA4Ny41IDEwLjkgMTIzTDE1MSAyNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwzNDUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTEuMyAxLjNjLTM1LjUtMjguMy04NC4xLTMxLjktMTIzLTEwLjlMMTcwLjUgNjEuM0MxNTEuOCA0Mi41IDEyNi40IDMyIDk5LjkgMzIgNDQuNyAzMiAwIDc2LjcgMCAxMzEuOUwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzE2LjF6TTI1NiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzItMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldFVwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXVwIl0sICJmMTUxIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMjQgMTYwYzYuNyAwIDEzIDIuOCAxNy42IDcuN2wxMDQgMTEyYzYuNSA3IDguMiAxNy4yIDQuNCAyNS45UzMzNy41IDMyMCAzMjggMzIwbC0yMDggMGMtOS41IDAtMTguMi01LjctMjItMTQuNHMtMi4xLTE4LjkgNC40LTI1LjlsMTA0LTExMmM0LjUtNC45IDEwLjktNy43IDE3LjYtNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVVwMiA9IGZhU3F1YXJlQ2FyZXRVcDI7CiAgICBmYU1hcExvY2F0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1sb2NhdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJtYXAtbWFya2VkIl0sICJmNTlmIiwgIk01NzYgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMNDEzLjUgNzcuNSAyMzQuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNzAuOCA4OC44IDY0IDk5LjkgNjQgMTEybDAgMzUyYzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzMuMyA1Ny44Yy00LjMtNi40LTguNS0xMy4xLTEyLjYtMTkuOS0xMS0xOC4zLTIxLjktMzkuMy0zMC02MS44bC0xMDEuMi0zMy43IDAtMjg0LjUgMTI4IDQyLjcgMCA5OS4zYzMxLTM1LjggNzctNTguNCAxMjgtNTguNCAyMi42IDAgNDQuMiA0LjQgNjQgMTIuNUw1NzYgNDh6TTM5MiAzNDEuOWMwIDY4LjkgNjQuMSAxNTAuNCA5OC42IDE4OS4zIDExLjYgMTMgMzEuMyAxMyA0Mi45IDAgMzQuNS0zOC45IDk4LjYtMTIwLjQgOTguNi0xODkuMyAwLTY1LjEtNTMuNy0xMTcuOS0xMjAtMTE3LjlTMzkyIDI3Ni44IDM5MiAzNDEuOXoiXQogICAgfTsKICAgIGZhTWFwTWFya2VkID0gZmFNYXBMb2NhdGlvbjsKICAgIGZhUGVuRmFuY3kgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVuLWZhbmN5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk1LCAxMDAwMl0sICJmNWFjIiwgIk0zNzMuNSAyNy4xYzE1LTE3LjIgMzYuNy0yNy4xIDU5LjYtMjcuMSA0My42IDAgNzkgMzUuNCA3OSA3OSAwIDIyLjgtOS45IDQ0LjYtMjcuMSA1OS42TDI4My43IDMxMy44IDI3MyAzMDMgMjA5IDIzOSAxOTguMiAyMjguMyAzNzMuNSAyNy4xek0xNjEuMSAyNTlDMTYyIDI2MCAxODggMjg2IDIzOSAzMzdsMTMuOSAxMy45LTE3LjEgNzQuMmMtMy45IDE3LjEtMTYuOSAzMC43LTMzLjggMzUuNGwtMTY5LjggNDcuNSA5Mi4zLTkyLjNjMS4yIC4xIDIuMyAuMiAzLjUgLjIgMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMmMwIDEuMiAuMSAyLjQgLjIgMy41TDMuOSA0NzkuOCA1MS41IDMxMGM0LjctMTYuOSAxOC4zLTI5LjkgMzUuNC0zMy44TDE2MS4xIDI1OXoiXQogICAgfTsKICAgIGZhRXVyb1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXVyby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2NCwgImV1ciIsICJldXJvIl0sICJmMTUzIiwgIk03My4zIDE5MkMxMDAuOCA5OS41IDE4Ni41IDMyIDI4OCAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy02NS42IDAtMTIyIDM5LjUtMTQ2LjcgOTZMMjcyIDE5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQzLjIgMGMtLjUgNS4zLS44IDEwLjYtLjggMTZzLjMgMTAuNyAuOCAxNkwyNzIgMjcyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMzAuNyAwYzI0LjcgNTYuNSA4MS4xIDk2IDE0Ni43IDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTEwMS41IDAtMTg3LjItNjcuNS0yMTQuNy0xNjBMNDAgMzIwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0LjYgMGMtLjctMTAuNS0uNy0yMS41IDAtMzJMNDAgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDMzLjMgMHoiXQogICAgfTsKICAgIGZhRXVyID0gZmFFdXJvU2lnbjsKICAgIGZhRXVybyA9IGZhRXVyb1NpZ247CiAgICBmYUhvdXNlQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGIiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4yIDQ3LjItMTc1LjkgMTE0LjgtNS0xLjgtMTAuNS0yLjgtMTYuMS0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTAuOSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNTU1LjMgMzQwLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnoiXQogICAgfTsKICAgIGZhTGlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlyYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODM1Nl0sICJmMTk1IiwgIk04NC45IDI1NmwtMjguNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExLjYgMEM1My4yIDEyNC43IDExNi44IDQyIDIwNy42IDQybDguMiAwYzMzLjYgMCA2Ni4yIDExLjMgOTIuNSAzMi4ybDE2LjEgMTIuN2MxMy45IDExIDE2LjIgMzEuMSA1LjIgNDVzLTMxLjEgMTYuMi00NSA1LjJsLTE2LjEtMTIuN2MtMTUtMTEuOS0zMy42LTE4LjQtNTIuOC0xOC40bC04LjIgMGMtNTMuOCAwLTkwLjEgNTIuOS03My41IDEwMmwxNjIuNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDUuMSAwYzIuMyAxMC42IDMuNiAyMS4zIDMuOSAzMmwxNDEuMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDE1MCAzMzZjLTQuOCAxOC42LTEyLjYgMzYuNS0yMy42IDUyLjlsLTE4LjEgMjcuMSAyMTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNzIgMGMtMTEuOCAwLTIyLjYtNi41LTI4LjItMTYuOXMtNS0yMyAxLjYtMzIuOWw1MS4yLTc2LjhjMy43LTUuNiA2LjktMTEuNCA5LjQtMTcuNGwtMjYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwzNC44IDBjLS41LTEwLjgtMi42LTIxLjYtNi40LTMyeiJdCiAgICB9OwogICAgZmFZZW5TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInllbi1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTY1LCAiY255IiwgImpweSIsICJybWIiLCAieWVuIl0sICJmMTU3IiwgIk03NC45IDQ2LjdjLTkuNi0xNC45LTI5LjQtMTkuMi00NC4yLTkuNlMxMS41IDY2LjQgMjEuMSA4MS4zTDE0My43IDI3MiA4OCAyNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDMyLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtMzIgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTUuNyAwIDEyMi42LTE5MC43YzkuNi0xNC45IDUuMy0zNC43LTkuNi00NC4ycy0zNC43LTUuMy00NC4yIDkuNkwxOTIgMjI4LjggNzQuOSA0Ni43eiJdCiAgICB9OwogICAgZmFDbnkgPSBmYVllblNpZ247CiAgICBmYUpweSA9IGZhWWVuU2lnbjsKICAgIGZhUm1iID0gZmFZZW5TaWduOwogICAgZmFZZW4gPSBmYVllblNpZ247CiAgICBmYUJveE9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm94LW9wZW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ5ZSIsICJNNTYwLjMgMjM3LjJjMTAuNCAxMS44IDI4LjMgMTQuNCA0MS44IDUuNSAxNC43LTkuOCAxOC43LTI5LjcgOC45LTQ0LjRsLTQ4LTcyYy0yLjgtNC4yLTYuNi03LjctMTEuMS0xMC4yTDM1MS40IDQuN2MtMTkuMy0xMC43LTQyLjgtMTAuNy02Mi4yIDBMODguOCAxMTZjLTUuNCAzLTkuNyA3LjQtMTIuNiAxMi44TDI3LjcgMjE4LjdjLTEyLjYgMjMuNC0zLjggNTIuNSAxOS42IDY1LjFsMzMgMTcuNyAwIDUzLjNjMCAyMyAxMi40IDQ0LjMgMzIuNCA1NS43bDE3NiA5OS43YzE5LjYgMTEuMSA0My41IDExLjEgNjMuMSAwbDE3Ni05OS43YzIwLjEtMTEuNCAzMi40LTMyLjYgMzIuNC01NS43bDAtMTE3LjV6bS0yNDAtOS44TDE3MC4yIDE0NCAzMjAuMyA2MC42IDQ3MC40IDE0NCAzMjAuMyAyMjcuNHptLTQxLjUgNTAuMmwtMjEuMyA0Ni4yLTE2NS44LTg4LjggMjUuNC00Ny4yIDE2MS43IDg5Ljh6Il0KICAgIH07CiAgICBmYVRydWNrRmllbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZmllbGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4ZCIsICJNMzIgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjI0IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDQwLjQgMGMzMi40IDAgNjEuNiAxOS42IDc0IDQ5LjVsNDMuOCAxMDYuMyAxLjcgNC4yIDI0LjcgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0uNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOGwtMTQ0LjcgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0zLjYgLjItNy4xIC42LTEwLjUtMTktNi40LTMyLjYtMjQuNC0zMi42LTQ1LjVsMC00OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwwLTMyem0zNTIgMzJsMCA5NiA4Mi4xIDAtMzUuNC04Ni4xYy0yLjUtNi04LjMtOS45LTE0LjgtOS45TDM4NCAxMjh6TTE5MiAzOTJhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHptMjgwIDQwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhTG9jYXRpb25QaW5Mb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2F0aW9uLXBpbi1sb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MWYiLCAiTTAgMTg4LjZDMCA4NC40IDg2IDAgMTkyIDAgMjk0LjEgMCAzNzcuNiA3OC4zIDM4My42IDE3NyAzMjAuNyAxODUuMSAyNzIgMjM4LjggMjcyIDMwNGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA3NS43Yy05LjkgMTEuNi0xOC45IDIxLjctMjYuNCAyOS44LTExLjggMTIuOC0zMS41IDEyLjgtNDMuMyAwLTUwLjItNTQuNS0xNzAuNC0xOTcuNS0xNzAuNC0zMTYuOHpNMTkyIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptMjQwIDQ4LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0yODggNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFQZXJzb25QcmF5aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1wcmF5aW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NzIwLCAicHJheSJdLCAiZjY4MyIsICJNMzIwIDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMjAwLjcgMjY0bDIyLjkgMzEuNWM2LjUgOC45IDE2LjMgMTQuNyAyNy4yIDE2LjFzMjEuOS0xLjcgMzAuNC04LjdsODgtNzJjMTcuMS0xNCAxOS42LTM5LjIgNS42LTU2LjNzLTM5LjItMTkuNi01Ni4zLTUuNmwtNTUuMiA0NS4yLTI2LjItMzZjLTE1LjYtMjEuNS00MC42LTM0LjItNjcuMi0zNC4yLTMwLjkgMC01OS4yIDE3LjEtNzMuNiA0NC40TDQ3LjggMjgwLjljLTIwLjIgMzguNS05LjQgODUuOSAyNS42IDExMS44TDEyNi42IDQzMiA0MCA0MzJjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMjA4IDBjMTcuMyAwIDMyLjYtMTEuMSAzOC0yNy41cy0uMy0zNC40LTE0LjItNDQuN2wtMTE2LjEtODUuOCA0NS05MHoiXQogICAgfTsKICAgIGZhUHJheSA9IGZhUGVyc29uUHJheWluZzsKICAgIGZhQ2xpcGJvYXJkTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtbGlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDZkIiwgIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMiAwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTAgMTI4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTk2IDQxNmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVNhY2tEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Fjay1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzZdLCAiZjgxZCIsICJNMzI4IDExMmwtMTQ0IDAtMzcuMy03NC41Yy0xLjgtMy42LTIuNy03LjYtMi43LTExLjYgMC0xNC4zIDExLjYtMjUuOSAyNS45LTI1LjlMMzQyLjEgMGMxNC4zIDAgMjUuOSAxMS42IDI1LjkgMjUuOSAwIDQtLjkgOC0yLjcgMTEuNkwzMjggMTEyek0xNjkuNiAxNjBsMTcyLjggMCA0OC43IDQwLjZDNDU3LjYgMjU2IDQ5NiAzMzggNDk2IDQyNC41IDQ5NiA0NzIuOCA0NTYuOCA1MTIgNDA4LjUgNTEybC0zMDUuMSAwQzU1LjIgNTEyIDE2IDQ3Mi44IDE2IDQyNC41IDE2IDMzOCA1NC40IDI1NiAxMjAuOSAyMDAuNkwxNjkuNiAxNjB6TTI2MCAyMjRjLTExIDAtMjAgOS0yMCAyMGwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwyMTYgMzg0Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIweiJdCiAgICB9OwogICAgZmFNb3VudGFpblN1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3VudGFpbi1zdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyZiIsICJNMjU2LjUgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjUtNy4yIDEyLjEtMjAuMyAxOS41LTM0LjMgMTkuNWwtNDMyIDBjLTE0LjEgMC0yNy4xLTcuNC0zNC4zLTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMCAyLjktNC42QzIzMS43IDYuMiAyNDMuNiAwIDI1Ni41IDB6TTE3MC40IDI0OS45bDI2LjggMjYuOGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw0My4zLTQzLjNjNi02IDE0LjEtOS40IDIyLjYtOS40bDQyLjggMC03Mi4xLTEzMy41LTg2LjEgMTU5LjR6TTQ5Ni41IDE2MGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHoiXQogICAgfTsKICAgIGZhQXJyb3dVcFdpZGVTaG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC13aWRlLXNob3J0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNvcnQtYW1vdW50LXVwIl0sICJmMTYxIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTMyMCA0ODBsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbW91bnRVcCA9IGZhQXJyb3dVcFdpZGVTaG9ydDsKICAgIGZhVXNlcnNMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5MiIsICJNMjI0IDEyOGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTE3NiAzMzZjMC02MS45IDUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMmwwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTh6TTM5MiAxNDRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNy4yIDEwMC40YzkuMS0yLjkgMTguOC00LjQgMjguOC00LjQgNTMgMCA5NiA0MyA5NiA5NmwwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNzguOCAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtOGMwLTM0LjEtMTAuNi02NS43LTI4LjgtOTEuNnptLTI2Mi40IDBjLTE4LjIgMjYtMjguOCA1Ny41LTI4LjggOTEuNmwwIDhjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC03OC44IDBDNDEuNiAzNjggMzIgMzU4LjQgMzIgMzQ2LjdMMzIgMzM2YzAtNTMgNDMtOTYgOTYtOTYgMTAgMCAxOS43IDEuNSAyOC44IDQuNHpNNzIgMTQ0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMCA0NDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNDY0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhU3Rhck9mRGF2aWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1vZi1kYXZpZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDE3XSwgImY2OWEiLCAiTTQxNS45IDMxMS45bC0yNy44IDQ4LjEgNTUuNyAwLTI3LjgtNDguMXpNMzgzLjYgMjU2bC02MC4yLTEwNC0xMzQuOCAwLTYwLjIgMTA0IDYwLjIgMTA0IDEzNC44IDAgNjAuMi0xMDR6bTY0LjcgMGw1OC40IDEwMC45YzMuNSA2IDUuMyAxMi44IDUuMyAxOS43IDAgMjEuNy0xNy42IDM5LjQtMzkuNCAzOS40bC0xMTcgMC02MS4zIDEwNS44QzI4Ni41IDUzNS42IDI3MS44IDU0NCAyNTYgNTQ0cy0zMC41LTguNC0zOC40LTIyLjJsLTYxLjMtMTA1LjgtMTE3IDBjLTIxLjcgMC0zOS40LTE3LjYtMzkuNC0zOS40IDAtNi45IDEuOC0xMy43IDUuMy0xOS43TDYzLjcgMjU2IDUuMyAxNTUuMUMxLjggMTQ5LjEgMCAxNDIuMyAwIDEzNS40IDAgMTEzLjYgMTcuNiA5NiAzOS40IDk2bDExNyAwIDYxLjMtMTA1LjhDMjI1LjUtMjMuNiAyNDAuMi0zMiAyNTYtMzJzMzAuNSA4LjQgMzguNCAyMi4ybDYxLjMgMTA1LjggMTE3IDBjMjEuNyAwIDM5LjQgMTcuNiAzOS40IDM5LjQgMCA2LjktMS44IDEzLjctNS4zIDE5LjdMNDQ4LjMgMjU2ek0zODguMSAxNTJsMjcuOCA0OC4xIDI3LjgtNDguMS01NS43IDB6TTI5MSA5NmwtMzUtNjAuNC0zNSA2MC40IDcwIDB6TTEyMy45IDE1MmwtNTUuNyAwIDI3LjggNDguMSAyNy44LTQ4LjF6TTk2LjEgMzExLjlsLTI3LjggNDguMSA1NS43IDAtMjcuOC00OC4xek0yMjEgNDE2bDM1IDYwLjQgMzUtNjAuNC03MCAweiJdCiAgICB9OwogICAgZmFOb3Rlc01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90ZXMtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDgxIiwgIk05NiAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgxLjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0OTMuMyAyOTAuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxNjAgMEMxMjQuNyAwIDk2IDI4LjcgOTYgNjRsMCAyODh6TTI4OCAxMTJsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzI4eiJdCiAgICB9OwogICAgZmFBdXN0cmFsU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdXN0cmFsLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTBhOSIsICJNMjY2LjUgMjQwbC04NSAwIDQyLjUtMTA2LjQgNDIuNSAxMDYuNHptNjguOSAwTDI2Mi45IDU4LjNDMjU2LjUgNDIuNCAyNDEuMSAzMiAyMjQgMzJzLTMyLjUgMTAuNC0zOC45IDI2LjNMMTEyLjYgMjQwIDMyIDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2MS40IDAtMTkuMiA0OC00Mi4zIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjMuMSAwLTIwLjggNTIuMWMtNi42IDE2LjQgMS40IDM1IDE3LjkgNDEuNnMzNS0xLjQgNDEuNi0xNy45bDMwLjMtNzUuOSAyMDAgMCAzMC4zIDc1LjljNi42IDE2LjQgMjUuMiAyNC40IDQxLjYgMTcuOXMyNC40LTI1LjIgMTcuOS00MS42TDM5Mi45IDM4NCA0MTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00Mi4zIDAtMTkuMi00OCA2MS40IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwLjYgMHptLTQ5LjcgNDhsMTkuMiA0OC0xNjEuNiAwIDE5LjItNDggMTIzLjMgMHoiXQogICAgfTsKICAgIGZhQ2xpcGJvYXJkVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtdXNlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2YzIiwgIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDM0NGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNOTguMyA0MTNjLTEyLjkgMTUuNiAyLjIgMzUgMjIuNCAzNWwxNDIuNSAwYzIwLjIgMCAzNS4zLTE5LjQgMjIuNC0zNS0xNC43LTE3LjctMzYuOS0yOS02MS43LTI5bC02NCAwYy0yNC44IDAtNDcgMTEuMy02MS43IDI5eiJdCiAgICB9OwogICAgZmFGaWxlSW1hZ2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaW1hZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDNdLCAiZjFjNSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTEyOCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNOTIuNiA0NDhsMTk4LjggMGMxNS44IDAgMjguNi0xMi44IDI4LjYtMjguNiAwLTcuMy0yLjgtMTQuNC03LjktMTkuN0wyMTUuMyAyOTcuOWMtNi02LjMtMTQuNC05LjktMjMuMi05LjlsLS4zIDBjLTguOCAwLTE3LjEgMy42LTIzLjIgOS45TDcxLjkgMzk5LjdDNjYuOCA0MDUgNjQgNDEyLjEgNjQgNDE5LjQgNjQgNDM1LjIgNzYuOCA0NDggOTIuNiA0NDh6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0UmlnaHQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtcmlnaHQiXSwgImYxNTIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0zMjAgMjU2YzAgNi43LTIuOCAxMy03LjcgMTcuNmwtMTEyIDEwNGMtNyA2LjUtMTcuMiA4LjItMjUuOSA0LjRTMTYwIDM2OS41IDE2MCAzNjBsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlUmlnaHQyID0gZmFTcXVhcmVDYXJldFJpZ2h0MjsKICAgIGZhVmlhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE0XSwgImY0OTIiLCAiTTM0Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzA2LjcgNjQgMjguMSAzNDIuNkMxMC4xIDM2MC42IDAgMzg1IDAgNDEwLjVMMCA0MTZjMCA1MyA0MyA5NiA5NiA5Nmw1LjUgMGMyNS41IDAgNDkuOS0xMC4xIDY3LjktMjguMWwyNzguNi0yNzguNiA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6TTIwNS4zIDI1NmwxNDYuNy0xNDYuNyA1MC43IDUwLjctOTYgOTYtMTAxLjUgMHoiXQogICAgfTsKICAgIGZhSGVsaWNvcHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWxpY29wdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjQxXSwgImY1MzMiLCAiTTE3NiAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNTIgMCAwIDQ4LTIyMC44IDAtMzIuOC0zOS40QzY5LjkgODMuMiA2My4xIDgwIDU2IDgwTDI0IDgwQzE1LjcgODAgOCA4NC4zIDMuNiA5MS40cy00LjggMTUuOS0xLjEgMjMuNGw0OCA5NkM1NC42IDIxOC45IDYyLjkgMjI0IDcyIDIyNGwxMDcuOCAwIDEwNCAxNDMuMWMxNS4xIDIwLjcgMzkuMSAzMi45IDY0LjcgMzIuOWw3NS41IDBjNzUuMSAwIDEzNi02MC45IDEzNi0xMzZTNDk5LjEgMTI4IDQyNCAxMjhsLTQ4IDAgMC00OCAxNTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxNzYgMzJ6TTM3NiAxOTJsNDggMGMzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3MmwtNDggMCAwLTE0NHpNNTUyIDQxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjQgMCA0LjQtMy42IDgtOCA4bC0yNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhTWl0dGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pdHRlbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2I1IiwgIk0zNTIgMzg0TDY0IDM4NCA1LjQgMTc4LjlDMS44IDE2Ni40IDAgMTUzLjQgMCAxNDAuMyAwIDYyLjggNjIuOCAwIDE0MC4zIDBsMy40IDBjNjYgMCAxMjMuNSA0NC45IDEzOS41IDEwOC45bDMxLjQgMTI1LjggMTcuNi0yMC4xQzM0NC44IDIwMC4yIDM2Mi45IDE5MiAzODIgMTkybDIuOCAwYzM0LjkgMCA2My4zIDI4LjMgNjMuMyA2My4zIDAgMTUuOS02IDMxLjItMTYuOCA0Mi45TDM1MiAzODR6TTMyIDQ2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhR2FzUHVtcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXMtcHVtcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5ODFdLCAiZjUyZiIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwyNTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MiA4IDBjNDguNiAwIDg4IDM5LjQgODggODhsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTU0Yy0yNy42LTcuMS00OC0zMi4yLTQ4LTYybDAtNTkuNS0yNS44LTI4LjNjLTguOS05LjgtOC4yLTI1IDEuNi0zMy45czI1LTguMiAzMy45IDEuNmw3MS43IDc4LjhjOS40IDEwLjMgMTQuNiAyMy43IDE0LjYgMzcuN0w1MTIgMzc2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcybDAtMzJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTggMCAwIDE2MS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDQwIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMMzIgNjR6TTk2IDgwbDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNkwxMTIgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRlOCIsICJNNjQgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgODEuNGMtMjQuNC0xMS4yLTUxLjQtMTcuNC04MC0xNy40LTg3LjcgMC0xNjEuNyA1OC44LTE4NC43IDEzOS4yLTcuMS0xLjMtMTQuMS00LjItMjAuMS04LjhsLTIwOC0xNTZDNzEuMSAxNDEuMyA2NCAxMjcuMSA2NCAxMTJ6TTMwNCAzNjhjMCAyOC42IDYuMiA1NS42IDE3LjQgODBMMTI4IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xODggMTk4LjQgMTQ4LjhjMTIuNiA5LjQgMjYuOSAxNS40IDQxLjcgMTcuOSAwIDEuOC0uMSAzLjUtLjEgNS4zem00OCAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFQZXJzb25Ta2F0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1za2F0aW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNrYXRpbmciXSwgImY3YzUiLCAiTTM2OCA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTEyOCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTUwLjEgMGM0OS45IDAgNzQuOSA2MC4zIDM5LjYgOTUuNmwtNjMuOSA2My45IDY5LjggMzFjMTcuMyA3LjcgMjguNSAyNC45IDI4LjUgNDMuOWwwIDg1LjZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC03NS4yLTgyLjQtMzYuNmMtNDEtMTguMi01MS03Mi0xOS4zLTEwMy43bDQwLjQtNDAuNC05OC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04OS40IDM2MS40bDc1LjktNzUuOWM3LjcgMTkuNyAyMS42IDM3LjMgNDEgNDkuNmwtNzEuNiA3MS42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3ptMzQ2LjUgODcuMWM4LjYgMi4xIDEzLjggMTAuOCAxMS42IDE5LjRsLS40IDEuN2MtNi4yIDI0LjktMjguNiA0Mi40LTU0LjMgNDIuNEwzMDQgNTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDg4LjggMGMxMSAwIDIwLjYtNy41IDIzLjMtMTguMmwuNC0xLjdjMi4xLTguNiAxMC44LTEzLjggMTkuNC0xMS42ek0xNDMuMiA0ODYuM2wtNi4yIDMuMWMtMjEuNiAxMC44LTQ3LjYgNi42LTY0LjYtMTAuNUwxMi43IDQxOS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsNTkuNiA1OS42YzcuMyA3LjMgMTguNSA5LjEgMjcuNyA0LjVsNi4yLTMuMWM3LjktNCAxNy41LS43IDIxLjUgNy4ycy43IDE3LjUtNy4yIDIxLjV6Il0KICAgIH07CiAgICBmYVNrYXRpbmcgPSBmYVBlcnNvblNrYXRpbmc7CiAgICBmYVN1bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOF0sICJmMTg1IiwgIk0yODgtMzJjOC40IDAgMTYuMyA0LjQgMjAuNiAxMS43TDM2NC4xIDcyLjMgNDY4LjkgNDZjOC4yLTIgMTYuOSAuNCAyMi44IDYuM1M1MDAgNjcgNDk4IDc1LjFsLTI2LjMgMTA0LjcgOTIuNyA1NS41YzcuMiA0LjMgMTEuNyAxMi4yIDExLjcgMjAuNnMtNC40IDE2LjMtMTEuNyAyMC42TDQ3MS43IDMzMi4xIDQ5OCA0MzYuOGMyIDguMi0uNCAxNi45LTYuMyAyMi44UzQ3NyA0NjggNDY4LjkgNDY2bC0xMDQuNy0yNi4zLTU1LjUgOTIuN2MtNC4zIDcuMi0xMi4yIDExLjctMjAuNiAxMS43cy0xNi4zLTQuNC0yMC42LTExLjdMMjExLjkgNDM5LjcgMTA3LjIgNDY2Yy04LjIgMi0xNi44LS40LTIyLjgtNi4zUzc2IDQ0NSA3OCA0MzYuOGwyNi4yLTEwNC43LTkyLjYtNTUuNUM0LjQgMjcyLjIgMCAyNjQuNCAwIDI1NnM0LjQtMTYuMyAxMS43LTIwLjZMMTA0LjMgMTc5LjkgNzggNzUuMWMtMi04LjIgLjMtMTYuOCA2LjMtMjIuOFM5OSA0NCAxMDcuMiA0NmwxMDQuNyAyNi4yIDU1LjUtOTIuNiAxLjgtMi42YzQuNS01LjcgMTEuNC05LjEgMTguOC05LjF6bTAgMTQ0YTE0NCAxNDQgMCAxIDAgMCAyODggMTQ0IDE0NCAwIDEgMCAwLTI4OHptMCAyNDBhOTYgOTYgMCAxIDEgMC0xOTIgOTYgOTYgMCAxIDEgMCAxOTJ6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzU4LCA5OTE4LCAiYmFzZWJhbGwtYmFsbCJdLCAiZjQzMyIsICJNMjMyLjQgMS4xYy0xMjIuMiAxMS40LTIxOS41IDEwOC43LTIzMC45IDIzMC45IDE2LjItLjEgMzItMS44IDQ3LjItNSAxMy0yLjcgMjUuNyA1LjUgMjguNCAxOC41cy01LjUgMjUuNy0xOC41IDI4LjRjLTE4LjQgMy45LTM3LjYgNi01Ny4xIDYuMSAxMS40IDEyMi4yIDEwOC43IDIxOS41IDIzMC45IDIzMC45IC4xLTE5LjUgMi4yLTM4LjcgNi4xLTU3LjEgMi43LTEzIDE1LjUtMjEuMyAyOC40LTE4LjVzMjEuMyAxNS41IDE4LjUgMjguNGMtMy4yIDE1LjItNC45IDMxLTUgNDcuMiAxMjIuMi0xMS40IDIxOS41LTEwOC43IDIzMC45LTIzMC45LTE2LjIgLjEtMzIgMS44LTQ3LjIgNS0xMyAyLjctMjUuNy01LjUtMjguNC0xOC41czUuNS0yNS43IDE4LjUtMjguNGMxOC40LTMuOSAzNy42LTYgNTcuMS02LjEtMTEuNC0xMjIuMi0xMDguNy0yMTkuNS0yMzAuOS0yMzAuOS0uMSAxOS41LTIuMiAzOC43LTYuMSA1Ny4xLTIuNyAxMy0xNS41IDIxLjMtMjguNCAxOC41cy0yMS4zLTE1LjUtMTguNS0yOC40YzMuMi0xNS4yIDQuOS0zMSA1LTQ3LjJ6bTIuOCAxNTEuNGMtMjEuNCAzMi45LTQ5LjUgNjAuOS04Mi4zIDgyLjMtMTEuMSA3LjItMjYgNC4xLTMzLjItN3MtNC4xLTI2IDctMzMuMmMyNy4yLTE3LjcgNTAuNS00MSA2OC4zLTY4LjMgNy4yLTExLjEgMjIuMS0xNC4zIDMzLjItN3MxNC4zIDIyLjEgNyAzMy4yek0zOTMuMSAyODQuMmM3LjIgMTEuMSA0LjEgMjYtNyAzMy4yLTI3LjIgMTcuNy01MC41IDQxLTY4LjMgNjguMy03LjIgMTEuMS0yMi4xIDE0LjMtMzMuMiA3cy0xNC4zLTIyLjEtNy0zMy4yYzIxLjQtMzIuOSA0OS41LTYwLjkgODIuMy04Mi4zIDExLjEtNy4yIDI2LTQuMSAzMy4yIDd6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsQmFsbCA9IGZhQmFzZWJhbGw7CiAgICBmYUltYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDNlIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA4MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI3MiAyMjRjOC40IDAgMTYuMSA0LjQgMjAuNSAxMS41bDg4IDE0NGM0LjUgNy40IDQuNyAxNi43IC41IDI0LjNTMzY4LjcgNDE2IDM2MCA0MTZMODggNDE2Yy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDI2LjQgMzcuOCA2MS40LTEwMC41YzQuNC03LjEgMTIuMS0xMS41IDIwLjUtMTEuNXoiXQogICAgfTsKICAgIGZhTm90ZGVmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdGRlZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWZlIiwgIk02NCAzOTAuM0wxNTMuNSAyNTYgNjQgMTIxLjcgNjQgMzkwLjN6TTEwMi41IDQ0OEwyODEuNSA0NDggMTkyIDMxMy43IDEwMi41IDQ0OHptMTI4LTE5MkwzMjAgMzkwLjMgMzIwIDEyMS43IDIzMC41IDI1NnpNMjgxLjUgNjRMMTAyLjUgNjQgMTkyIDE5OC4zIDI4MS41IDY0ek0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6Il0KICAgIH07CiAgICBmYUJhc2tldGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFza2V0YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkzNiwgImJhc2tldGJhbGwtYmFsbCJdLCAiZjQzNCIsICJNOTIuNyA1OC44bDc4LjQgNzguNGMxOC4yLTI1IDI4LjktNTUuOSAyOC45LTg5LjIgMC0xNC4xLTEuOS0yNy43LTUuNS00MC42LTM4IDkuNC03Mi42IDI3LjItMTAxLjggNTEuNHpNNTguOCA5Mi43Yy0yNC4yIDI5LjItNDIgNjMuOC01MS40IDEwMS44IDEyLjkgMy42IDI2LjUgNS41IDQwLjYgNS41IDMzLjMgMCA2NC4xLTEwLjcgODkuMi0yOC45TDU4LjggOTIuN3pNMjU2IDBjLTQuNiAwLTkuMiAuMS0xMy43IC40IDMuNyAxNS4zIDUuNyAzMS4yIDUuNyA0Ny42IDAgNDYuNi0xNS45IDg5LjQtNDIuNiAxMjMuNEwyNTYgMjIyLjEgNDE5LjMgNTguOEMzNzQuOSAyMi4xIDMxOC4xIDAgMjU2IDB6TTQ4IDI0OGMtMTYuNCAwLTMyLjQtMi00Ny42LTUuNy0uMiA0LjUtLjQgOS4xLS40IDEzLjcgMCA2Mi4xIDIyLjEgMTE4LjkgNTguOCAxNjMuM0wyMjIuMSAyNTYgMTcxLjQgMjA1LjRDMTM3LjQgMjMyLjEgOTQuNiAyNDggNDggMjQ4em00NjMuNiAyMS43Yy4yLTQuNSAuNC05LjEgLjQtMTMuNyAwLTYyLjEtMjIuMS0xMTguOS01OC44LTE2My4zTDI4OS45IDI1NiAzNDAuNiAzMDYuNmMzNC0yNi43IDc2LjktNDIuNiAxMjMuNC00Mi42IDE2LjQgMCAzMi40IDIgNDcuNiA1Ljd6bS03LjEgNDcuOGMtMTIuOS0zLjYtMjYuNS01LjUtNDAuNi01LjUtMzMuMyAwLTY0LjEgMTAuNy04OS4yIDI4LjlsNzguNCA3OC40YzI0LjItMjkuMiA0Mi02My44IDUxLjQtMTAxLjh6TTM0MC45IDM3NC44Yy0xOC4yIDI1LTI4LjkgNTUuOS0yOC45IDg5LjIgMCAxNC4xIDEuOSAyNy43IDUuNSA0MC42IDM4LTkuNCA3Mi42LTI3LjIgMTAxLjgtNTEuNGwtNzguNC03OC40em0tMzQuMy0zNC4zTDI1NiAyODkuOSA5Mi43IDQ1My4yYzQ0LjMgMzYuNyAxMDEuMiA1OC44IDE2My4zIDU4LjggNC42IDAgOS4yLS4xIDEzLjctLjQtMy43LTE1LjMtNS43LTMxLjItNS43LTQ3LjYgMC00Ni42IDE1LjktODkuNCA0Mi42LTEyMy40eiJdCiAgICB9OwogICAgZmFCYXNrZXRiYWxsQmFsbCA9IGZhQmFza2V0YmFsbDsKICAgIGZhUGVuY2lsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCAicGVuY2lsLWFsdCJdLCAiZjMwMyIsICJNMzYuNCAzNTMuMmM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43bDE4MS4yLTE4MS4yIDMzLjktMzMuOWMxNi42IDE2LjYgNTEuMyA1MS4zIDEwNCAxMDRsMzMuOSAzMy45LTMzLjkgMzMuOS0xODEuMiAxODEuMmMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTAuNmMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJTLTEuNCA0ODkuMyAuOSA0ODFMMzYuNCAzNTMuMnptNTUuNi0zLjdjLTQuNCA0LjctNy42IDEwLjQtOS4zIDE2LjZsLTI0LjEgODYuOSA4Ni45LTI0LjFjNi40LTEuOCAxMi4yLTUuMSAxNy05LjdMOTEuOSAzNDkuNXptMzU0LTE0Ni4xYy0xNi42LTE2LjYtNTEuMy01MS4zLTEwNC0xMDRMMzA4IDY1LjVDMzM0LjUgMzkgMzQ5LjQgMjQuMSAzNTIuOSAyMC42IDM2Ni40IDcgMzg0LjgtLjYgNDA0LS42UzQ0MS42IDcgNDU1LjEgMjAuNmwzNS43IDM1LjdDNTA0LjQgNjkuOSA1MTIgODguMyA1MTIgMTA3LjRzLTcuNiAzNy42LTIxLjIgNTEuMWMtMy41IDMuNS0xOC40IDE4LjQtNDQuOSA0NC45eiJdCiAgICB9OwogICAgZmFQZW5jaWxBbHQgPSBmYVBlbmNpbDsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTEiLCAiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNMzU5IDMzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAxMDIuMSAwYzEuMiAwIDIuNC0uMSAzLjUtLjMgNTYuMS0zLjkgMTAwLjUtNTAuNiAxMDAuNS0xMDcuNyAwLTU5LjYtNDguNC0xMDgtMTA4LTEwOGwtOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5MiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC05OC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNzIgNzJ6Il0KICAgIH07CiAgICBmYURpY2VTaXggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1zaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYxXSwgImY1MjYiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQW5nbGVzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtZG93biJdLCAiZjEwMyIsICJNMjE0LjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE5MiA0MDIuNyAzMjkuNCAyNjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwem0xNjAtMzUybC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgMjEwLjcgMzI5LjQgNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zeiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZURvd24gPSBmYUFuZ2xlc0Rvd247CiAgICBmYVN5cmluZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3lyaW5nZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODEzN10sICJmNDhlIiwgIk00OTcuNS0xN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS00Ni4xIDQ2LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNyA3LTc4LjEgNzguMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00MS00MS00Ni4xIDQ2LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtMzcuNyAzNy43Yy0xMC41IDEwLjUtMTYuNCAyNC43LTE2LjQgMzkuNmwwIDg4LjgtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1Ny01NyA4OC44IDBjMTQuOSAwIDI5LjEtNS45IDM5LjYtMTYuNGwyMjkuNy0yMjkuNyA3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyA0Ni4xLTQ2LjEgMTUgMTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXQogICAgfTsKICAgIGZhV2hlYXRBd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIndoZWF0LWFsdCJdLCAiZTJjZCIsICJNNzkuNyAyMzQuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwTDEzNC4xIDQ0NC4zIDQ5LjQgNTI5Yy05LjQgOS40LTI0LjUgOS40LTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xem0xMDQtMTA0YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMiA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsNDYuMSA0Ni4xYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk1LjIgMTVjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjJMNTI5LjIgNDkgNDE0LjcgMTYzLjRjNy43IDEgMTUuMiAzIDIyLjUgNS45TDQ5NS41IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMGwtOTQuOS05NC45Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xYzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsMzkgMzkgNTIuNy01Mi43YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4xbC0xLjcgMS44LTU4LjMgNTguM2MyLjggNy4xIDQuNyAxNC41IDUuNyAyMi4xTDQ5NS4yIDE1eiJdCiAgICB9OwogICAgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247CiAgICBmYVBsYW5lVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIyZCIsICJNMjAwIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyAxNzMuNiAxNTkuMmM2LjYgNi4xIDEwLjQgMTQuNiAxMC40IDIzLjZsMCA0My43YzAgMTAuOS0xMC43IDE4LjYtMjEuMSAxNS4ybC0xNjIuOS01NC4zIDAgOTkuNyA2NiA1Mi44YzMuOCAzIDYgNy42IDYgMTIuNWwwIDE5LjhjMCAxMC40LTkuOCAxOC0xOS45IDE1LjVMMjU2IDUxMiAxNDcuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0MyNi43IDM5Ni40IDE2IDM4OC43IDE2IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIwMCAxNTEuMyAyMDAgMjR6Il0KICAgIH07CiAgICBmYUFsaWduQ2VudGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLWNlbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM3IiwgIk0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhSG9ja2V5UHVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob2NrZXktcHVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDUzIiwgIk0yNTYgMjU2QzExNC42IDI1NiAwIDIxMyAwIDE2MHMxMTQuNi05NiAyNTYtOTYgMjU2IDQzIDI1NiA5Ni0xMTQuNiA5Ni0yNTYgOTZ6TTAgMzUyTDAgMjQyLjdjMTYuOSAxMi4zIDM3IDIyLjIgNTguMSAzMC4xIDUzIDE5LjkgMTIzIDMxLjIgMTk3LjkgMzEuMnMxNDQuOS0xMS4zIDE5Ny45LTMxLjJjMjEuMi03LjkgNDEuMi0xNy44IDU4LjEtMzAuMUw1MTIgMzUyYzAgNTMtMTE0LjYgOTYtMjU2IDk2UzAgNDA1IDAgMzUyeiJdCiAgICB9OwogICAgZmFDaXJjbGVBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLWxlZnQiXSwgImYwYTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMzUgMjM5bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzkgMzkgMTUwLjEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTUwLjEgMCAzOSAzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlQXJyb3dMZWZ0OwogICAgZmFQbHVnQ2lyY2xlQm9sdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWIiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNzcuNC03N2MtNS44LTQuMi0xMy44LTQtMTkuNCAuNWwtODAgNjRjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhTNDMzLjIgNDE2IDQ0MCA0MTZsMzIuOSAwLTE1LjkgNDIuNGMtMi41IDYuNy0uMiAxNC4zIDUuNiAxOC42czEzLjggNCAxOS40LS41bDgwLTY0YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhTNTU4LjggMzg0IDU1MiAzODRsLTMyLjkgMCAxNS45LTQyLjRjMi41LTYuNyAuMi0xNC4zLTUuNi0xOC42eiJdCiAgICB9OwogICAgZmFSZXN0cm9vbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXN0cm9vbSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2JkIiwgIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNTQuOGMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjQtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQ0LjQgMTU2LjkgODMuNiAxMjggMTI4IDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTEyLjQgMy45LTI1LjQtLjItMzMuNS05LjRMMjAwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ2NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDY0IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ0MCA0ODBsMC05Ni0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDktMjYuOWMtMy4yIDAtNi40LS41LTkuNS0xLjUtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjEtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFBbmNob3JMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWQiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAyOC4zIDAgNTUuNC01LjcgODAtMTUuOWwwLS4yIDAtNzIuMmMtMTQuNCA5LjYtMzAuNiAxNi43LTQ4IDIwLjdsMC0yNTcuOWMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTI3MiAzMDQuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2LjUgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFUaW1lbGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aW1lbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjljIiwgIk0xNjAgMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDAgMCA1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTU0LjcgMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC01NC43YzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDU0LjctMjU2IDAgMC01NC43eiJdCiAgICB9OwogICAgZmFMaWdodGJ1bGIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZ2h0YnVsYiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2MV0sICJmMGViIiwgIk0yOTIuOSAzODRjNy4zLTIyLjMgMjEuOS00Mi41IDM4LjQtNTkuOSAzMi43LTM0LjQgNTIuNy04MC45IDUyLjctMTMyLjEgMC0xMDYtODYtMTkyLTE5Mi0xOTJTMCA4NiAwIDE5MmMwIDUxLjIgMjAgOTcuNyA1Mi43IDEzMi4xIDE2LjUgMTcuNCAzMS4yIDM3LjYgMzguNCA1OS45bDIwMS43IDB6TTI4OCA0MzJsLTE5MiAwIDAgMTZjMCA0NC4yIDM1LjggODAgODAgODBsMzIgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTE2ek0xODQgMTEyYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLXJpZ2h0Il0sICJmMGE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNDEtMTU5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5LTE1MC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTUwLjEgMC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MHoiXQogICAgfTsKICAgIGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDsKICAgIGZhTWFyc0FuZFZlbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtYW5kLXZlbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg5M10sICJmMjI0IiwgIk0zNjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM0LjctNjMgNjNjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFsMCAzNC45IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM0LjljLTgxLjktMTUtMTQ0LTg2LjgtMTQ0LTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2IDM3IDAgNzEuNCAxMS40IDk5LjggMzFsNjMtNjMtMzQuNyAwek0zNTIgMjA4YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6Il0KICAgIH07CiAgICBmYU5ldHdvcmtXaXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXR3b3JrLXdpcmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmYiLCAiTTI0OCA4OGw4MCAwIDAgNDgtODAgMCAwLTQ4em0tOC01NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwIDAgMzItMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMCAwIDMyLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwIDAtMzIgMTkyIDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMzIgMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC05NiAwek00NDggMzc2bDggMCAwIDQ4LTgwIDAgMC00OCA3MiAwem0tMjU2IDBsOCAwIDAgNDgtODAgMCAwLTQ4IDcyIDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ4IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBjLTEyLjUtMTQuNy0yMy4yLTMwLjgtMzEuOC00OGwtODkuNSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMCAwLTI2LjdjMC0xOC4xIDYuMS0zNS4yIDE2LjYtNDguOC0uNC0xLjQtLjYtMi45LS42LTQuNWwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDEgODYuNy0yOC45YzMuMS0xIDYuMi0xLjggOS4zLTIuNUw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQ0NS4zIDQ4OC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMjEiLCAiTTM2MC44IDEuMmMtMTctNC45LTM0LjcgNS0zOS42IDIybC0xMjggNDQ4Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMTI4LTQ0OGM0LjktMTctNS0zNC43LTIyLTM5LjZ6bTY0LjYgMTM2LjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDczLjQgNzMuNC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHptLTI3NC43IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAxNTAuNiAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhRmVhdGhlclBvaW50ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlci1wb2ludGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZlYXRoZXItYWx0Il0sICJmNTZiIiwgIk00NzUuMyAuMWM5LjktLjggMTkuNiAzIDI2LjYgMTBzMTAuOCAxNi43IDEwIDI2LjZjLTQgNDkuMy0xNy40IDEyNi4yLTQ2LjMgMTk5LjctMS44IDQuNS01LjUgNy45LTEwLjIgOS4zTDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDM4LjYgMGMxMiAwIDE5LjcgMTIuOCAxMy41IDIzLjEtNCA2LjctOC4zIDEzLjItMTIuNyAxOS42LTIgMi45LTUgNS04LjQgNi4xTDMxMC41IDM2NmMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDE2IDBjMTQuNiAwIDIxIDE3LjQgOC44IDI1LjQtNjggNDUtMTM3LjcgNDMuMy0xODIuNCAzMS4zLTEyLjctMy40LTI0LTkuOS0zNC40LTE3LjlMNDggNDk2Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJsODAtODAgLjUgLjVjLjctMS4zIDEuNi0yLjUgMi43LTMuNkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw4OS43IDMyNi4yYy04LjkgOC45LTI0IDQuNC0yNS04LjItNC4zLTUzLjIgOS4zLTEyMy4xIDcyLjYtMTg2LjQgOTEuMS05MS4xIDI1NC4yLTEyNC43IDMzNy45LTEzMS41eiJdCiAgICB9OwogICAgZmFGZWF0aGVyQWx0ID0gZmFGZWF0aGVyUG9pbnRlZDsKICAgIGZhRmlsZUNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWYiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xMDBjLTExLjYgMC0yMS4zIDguMi0yMy41IDE5LjItMS44IDguNy0xMC4yIDE0LjMtMTguOSAxMi41cy0xNC4zLTEwLjItMTIuNS0xOC45YzUuMi0yNS42IDI3LjgtNDQuOCA1NC45LTQ0LjggMzAuOSAwIDU2IDI1LjEgNTYgNTYgMCAxOS44LTExLjcgMzcuOC0yOS44IDQ1LjlsLTEwLjQgNC42Yy0xLjIgNy43LTcuOCAxMy41LTE1LjggMTMuNS04LjggMC0xNi03LjItMTYtMTYgMC0xMS4yIDYuNi0yMS4zIDE2LjgtMjUuOWwxMi40LTUuNWM2LjYtMi45IDEwLjgtOS40IDEwLjgtMTYuNiAwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25hdHVyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWI3IiwgIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA3LjhjMCAyNy43LTIuNCA1NS4zLTcuMSA4Mi41bC04NC40IDI1LjNjLTQwLjYgMTIuMi02OC40IDQ5LjYtNjguNCA5MmwwIDMyLjQtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3Mi41IDBjNC4yIDM2IDM0LjggNjQgNzIgNjQgMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44UzQwNS43IDMyMCA0MTYgMzIwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04My42IDAgMTgtNTMuOWMzLjgtMTEuMyAuOS0yMy44LTcuNC0zMi40cy0yMC43LTExLjgtMzIuMi04LjRMMzE2LjQgMTk4LjFjMi40LTIwLjcgMy42LTQxLjQgMy42LTYyLjNsMC03LjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJ6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zLTQuNyAwLTguNS0zLjgtOC41LTguNWwwLTcxLjljMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNNjE2IDQxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjkyLjkgMGMtNi41IDE2LjMtMTMuNyAzMi4zLTIxLjYgNDhMNjE2IDQxNnoiXQogICAgfTsKICAgIGZhRWFydGhBbWVyaWNhcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hbWVyaWNhcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OCwgImVhcnRoIiwgImVhcnRoLWFtZXJpY2EiLCAiZ2xvYmUtYW1lcmljYXMiXSwgImY1N2QiLCAiTTU1LjcgMTk5LjdsMzAuOSAzMC45YzYgNiAxNC4xIDkuNCAyMi42IDkuNGwyMS41IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjkuMyAyOS4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDM3LjVjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsMTMuMyAxMy4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDE4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIuN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0NS4zLTQ1LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtMzQuN2MwLTE3LjctMTQuMy0zMi0zMi0zMmwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmwzNC43IDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMTkuNy0xOS43QzI0MiAxMzAgMjQwIDEyNS4xIDI0MCAxMjBzMi0xMCA1LjctMTMuN2wxNy4zLTE3LjNjNS44LTUuOCA5LjEtMTMuNyA5LjEtMjEuOSAwLTcuMi0yLjQtMTMuNy02LjQtMTguOS0zLjItLjEtNi40LS4yLTkuNi0uMi05NS40IDAtMTc1LjcgNjQuMi0yMDAuMyAxNTEuN3pNNDY0IDI1NmMwLTM0LjYtOC40LTY3LjItMjMuNC05NS44LTYuNCAuOS0xMi43IDMuOS0xNy45IDkuMWwtMTMuNCAxMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjEgMGMyLjUgMCA1LS4zIDcuMy0uOCAuNC01IC41LTEwLjEgLjUtMTUuMnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhRWFydGggPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUVhcnRoQW1lcmljYSA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhR2xvYmVBbWVyaWNhcyA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhQ2Fycm90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnJvdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM2NV0sICJmNzg3IiwgIk00NTMuMS0zNi43TDQ0MC45LTI0LjZjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMSAxNS42IDE1LjYgMzEuMiAzMS4yIDQ2LjkgNDYuOSAzMS4yIDMxLjIgODEuOSAzMS4yIDExMy4xIDBsMTIuMS0xMi4xYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42TDYwMC45IDg4LjZjLTMxLjItMzEuMi04MS45LTMxLjItMTEzLjEgMCAzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFMNDc1LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTMzMS42IDk2Yy00NS4yIDAtODcuMSAyMC40LTExNSA1NC4zTDI3My4zIDIwN2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE5MS42IDE5My4yIDY3LjIgNDY2LjhjLTUuNSAxMi4xLTIuOSAyNi40IDYuNSAzNS45czIzLjcgMTIgMzUuOSA2LjVsMTQxLjYtNjQuNC00My44LTQzLjhjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni41IDU2LjUgOTUuMy00My4zYzUzLjEtMjQuMSA4Ny4yLTc3LjEgODcuMi0xMzUuNSAwLTgyLjItNjYuNi0xNDguOC0xNDguOC0xNDguOHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWZ1bGwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtNCIsICJ0aGVybW9tZXRlci00IiwgInRoZXJtb21ldGVyLWZ1bGwiXSwgImYyYzciLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM0wxMzYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDIxMi43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmU0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7CiAgICBmYVRoZXJtb21ldGVyNCA9IGZhVGVtcGVyYXR1cmVGdWxsOwogICAgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDsKICAgIGZhVGFibGVDZWxsc1Jvd0xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3YSIsICJNMjU2IDI4OGwwLTY0IDE1My4zIDBjMTcuMS00Mi4yIDU2LTczLjIgMTAyLjctNzlsMC00OWMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0MS4zIDBjLS45LTUuMi0xLjMtMTAuNi0xLjMtMTYuMWwwLTQ3LjktMTEyIDAgMC02NCAxMTMuMyAwYzMuNy0yMiAxNC44LTQxLjQgMzAuNy01NS42bDAtOC40LTE0NCAwem0wLTE5MmwxOTIgMCAwIDY0LTE5MiAwIDAtNjR6TTU2MCAyNzIuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2IDM2OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhQm9sdExpZ2h0bmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib2x0LWxpZ2h0bmluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMGI3IiwgIk0wIDI1NkwyOC41IDI4YzItMTYgMTUuNi0yOCAzMS44LTI4TDIyOC45IDBjMTUgMCAyNy4xIDEyLjEgMjcuMSAyNy4xIDAgMy4yLS42IDYuNS0xLjcgOS41TDIwOCAxNjAgMzQ3LjMgMTYwYzIwLjIgMCAzNi43IDE2LjQgMzYuNyAzNi43IDAgNy40LTIuMiAxNC42LTYuNCAyMC43bC0xOTIuMiAyODFjLTUuOSA4LjYtMTUuNiAxMy43LTI1LjkgMTMuN2wtMi45IDBjLTE1LjcgMC0yOC41LTEyLjgtMjguNS0yOC41IDAtMi4zIC4zLTQuNiAuOS02LjlMMTc2IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDbG91ZFNob3dlcnNXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zaG93ZXJzLXdhdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTQiLCAiTTI3OS4yIDU1LjdDMjYzLjkgMjIuOCAyMzAuNiAwIDE5MiAwIDEzOSAwIDk2IDQzIDk2IDk2IDYwLjcgOTYgMzIgMTI0LjcgMzIgMTYwczI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRsLTEuNiAwYy03LjQtMzYuNS0zOS43LTY0LTc4LjQtNjQtMjIuMiAwLTQyLjMgOS4xLTU2LjggMjMuN3pNNDEwLjYgNDc2LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwek0xMDAuMSAzMDMuNmM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NEMyOSAzNjUgMzUuOCAzNzguNiA0OC40IDM4Mi44czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMTIgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0eiJdCiAgICB9OwogICAgZmFBcnJvd1VwTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctdXAiXSwgImYxNzYiLCAiTTE4Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCA3Ny4zIDEyOCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQzNC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dVcCA9IGZhQXJyb3dVcExvbmc7CiAgICBmYUFkZHJlc3NDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0MCwgImNvbnRhY3QtY2FyZCIsICJ2Y2FyZCJdLCAiZjJiYiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptODAgMjU2bDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNDAtNDhsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDk2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ29udGFjdENhcmQyID0gZmFBZGRyZXNzQ2FyZDI7CiAgICBmYVZjYXJkMiA9IGZhQWRkcmVzc0NhcmQyOwogICAgZmFBbmdsZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbODI1MF0sICJmMTA1IiwgIk0yNDcuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTc5LjIgMjU2IDQxLjkgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhRmFjZU1laDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsICJtZWgiXSwgImYxMWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE3NiAzMjBsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNZWgyID0gZmFGYWNlTWVoMjsKICAgIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1mcm9tLWdyb3VuZC13YXRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI1IiwgIk0zMDMgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OCA4OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00NyAwIDI3OC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjc4LjEtNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzAzIDd6TTI0MCAxOTJsMCAxNjMuMWMtMTAuNi0yLjItMjEuMy0zLjItMzItMy4xLTMyLjUgLjItNjQuOSAxMC43LTkyLjMgMzEuNC04LjggNi42LTE1LjkgMTAuOS0yMS43IDEzLjVsLS44IC40Yy0zLjcgMS43LTYuNCAyLjktOS44IC4zLTYtNC41LTEyLjYtOC0xOS4zLTEwLjRMNjQgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEyOCAwem0zMzYgNDhsMCAxNTUuMmMtMS4xIC44LTIuMiAxLjUtMy4zIDIuNC00LjEgMy4xLTguMyAuOC0xMi42LTEuNS0uNi0uMy0xLjItLjYtMS44LTEtNS4yLTIuNy0xMS4xLTYuNi0xOC0xMS43LTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTE1LjUgLjEtMzEgMi41LTQ2IDcuM2wwLTE2Ny4zIDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek00MDMuNCA0NzYuMUMzNzkuMSA0OTQuMyAzNTEuMSA1MTIgMzIwIDUxMnMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il0KICAgIH07CiAgICBmYU1hcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sICJmMjc5IiwgIk01MTIgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMMzQ5LjUgNzcuNSAxNzAuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNi44IDg4LjggMCA5OS45IDAgMTEyTDAgNDY0YzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzkuNCA1OS44YzguMSAyLjcgMTYuOCAyLjEgMjQuNC0xLjdsMTI4LTY0YzEwLjgtNS40IDE3LjctMTYuNSAxNy43LTI4LjZsMC0zNTJ6TTE5MiAzNzYuOWwwLTI4NC41IDEyOCA0Mi43IDAgMjg0LjUtMTI4LTQyLjd6Il0KICAgIH07CiAgICBmYVVzZXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjM0IiwgIk0yODUuNyAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzcuNyA1MTJDNjEuMyA1MTIgNDggNDk4LjcgNDggNDgyLjMgNDggMzgzLjggMTI3LjggMzA0IDIyNi4zIDMwNGw1OS40IDB6TTUyOCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4LTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHoiXQogICAgfTsKICAgIGZhVmVudXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVudXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzkyXSwgImYyMjEiLCAiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtNjRjMC0xIDAtMS45LS4xLTIuOXoiXQogICAgfTsKICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXN1Y2Nlc3NvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDdhIiwgIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgNDgwTDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xNjAgMTYwbDAtNjQtOTYgMCAwIDY0IDk2IDB6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlQ291Z2hTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtY291Z2gtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2MiIsICJNNTM1LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUzNy4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDI1LTI1IDAtNDQ3LjJjMC0xNSAxMC41LTI4LjMgMjUuNC0yOS44IDcuNC0uNyAxNC45LTEuMSAyMi42LTEuMSAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDIuMiAyLjYgMjI3LjUtMjI3LjV6TTEzMy44IDUxMkwyODggMzU3LjggMjg4IDQxNmMwIDUzLTQzIDk2LTk2IDk2bC01OC4yIDB6TTE3NiAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMzYgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tODggNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4LTI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYURpYWdyYW1Qcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYWdyYW0tcHJvamVjdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwcm9qZWN0LWRpYWdyYW0iXSwgImY1NDIiLCAiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDEyOCAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTEyOCAwIDAgMTZjMCA3LjMtMS43IDE0LjMtNC42IDIwLjVsNjguNiA5MS41IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTcuMyAxLjctMTQuMyA0LjYtMjAuNUwxMjggMjI0IDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHoiXQogICAgfTsKICAgIGZhUHJvamVjdERpYWdyYW0gPSBmYURpYWdyYW1Qcm9qZWN0OwogICAgZmFUZXJtaW5hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTIwIiwgIk05LjQgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTQ2LjcgMjU2IDkuNCAxMTguNnpNMjI0IDM4NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUhvdXNlRmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1maXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGMiLCAiTTQ0OCAxOTJjMTQuMSAuNCAyMy44IDExLjQgMzIuNyAyMS43IDIgMi4zIDQgNC42IDYgNi43bDE5IDE5LjkgMTIuMi0xMy44YzUuNC02LjEgMTMuMy04LjkgMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjIgMjYuMiA4OC4yIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4xIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjV6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTQ3LjUgMTM3Yy0xOS4yLTQuMy00MCAuNS01NS41IDE0LjQtMzYuNCAzMi42LTY3LjcgNjkuOC05MC4zIDEwNi40LTEwLjMgMTYuNi0xOS43IDM0LjktMjYuOCA1My43TDI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgNjQuNiAwYzcuMyAxNy4yIDE2LjggMzMuNCAyOC4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDg5LjMgMzQzLjdjLTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC43IDUxLjktNTQuNyA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0zNi41LTM3LTczLTU0LjctODguNHoiXQogICAgfTsKICAgIGZhTWFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmEiLCAiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGw4LjQgMGMyNC4yIDAgNDYuNC0xMy43IDU3LjItMzUuNGwyMy4yLTQ2LjNjNC40LTguOCAxMy4zLTE0LjMgMjMuMi0xNC4zczE4LjggNS41IDIzLjIgMTQuM2wyMy4yIDQ2LjNjMTAuOCAyMS43IDMzIDM1LjQgNTcuMiAzNS40bDguNCAwYzk2IDAgMTc2LTY0IDE3Ni0xNzZTNTEyIDY0IDI4OCA2NHpNOTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzIwLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFIdXJyaWNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaHVycmljYW5lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3NTEiLCAiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNiAxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlsMCA2My4zYzAgOC40IDYuNSAxNS4zIDE0LjcgMTYuNSAxMDAuMyAxNC45IDE3Ny4zIDEwMS4zIDE3Ny4zIDIwNS43IDAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNC05LjIgMS41LTE3LjEtNS45LTE3LjEtMTUuMmwwLTYzLjNDMTkyIDQyMS45IDE4NS41IDQxNSAxNzcuMyA0MTMuNyA3NyAzOTguOSAwIDMxMi40IDAgMjA4em0yODggNDhhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem0tOTYtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFFYXJ0aEFmcmljYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hZnJpY2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTcsICJnbG9iZS1hZnJpY2EiXSwgImY1N2MiLCAiTTQ0Ny42IDE3NWMtMzEuNi03NC42LTEwNS41LTEyNy0xOTEuNi0xMjctMjIuMSAwLTQzLjQgMy41LTYzLjQgOS44LS40IDItLjYgNC4xLS42IDYuMmwwIDczLjRjMCAxMi41IDEwLjEgMjIuNiAyMi42IDIyLjYgNiAwIDExLjgtMi40IDE2LTYuNmwxNi0xNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsNS41IDBjMjguNSAwIDQyLjggMzQuNSAyMi42IDU0LjYtNiA2LTE0LjEgOS40LTIyLjYgOS40bC02MS41IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC0yMS4zIDIxLjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDIuNyAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDI5LjMtMjkuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC0xOC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTZsMC0zNC43YzAtOC41LTMuNC0xNi42LTkuNC0yMi42bC0xNi0xNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQ1IDBjMTIuNCAwIDIyLjctNy4xIDI4LTE3ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFHbG9iZUFmcmljYSA9IGZhRWFydGhBZnJpY2E7CiAgICBmYVRodW1idGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDQsIDEyODM5MiwgInRodW1iLXRhY2siXSwgImYwOGQiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5LjUgMCAxMC4zIDEzNC4xYzM3LjEgMjEuMiA2NS44IDU2LjQgNzguMiA5OS43bDMuOCAxMy40YzIuOCA5LjcgLjggMjAtNS4yIDI4LjFTMzYyIDM1MiAzNTIgMzUyTDMyIDM1MmMtMTAgMC0xOS41LTQuNy0yNS41LTEyLjdzLTgtMTguNC01LjItMjguMUw1IDI5Ny44YzEyLjQtNDMuMyA0MS03OC41IDc4LjItOTkuN0w5My41IDY0IDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMTYwIDQwMGw2NCAwIDAgMTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2sgPSBmYVRodW1idGFjazsKICAgIGZhSGFuZFBvaW50RG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwYTciLCAiTTMyIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjA4LTY0IDAgMCAyMDh6TTIyNCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS02NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE2MC05NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NHptLTk2LTg4bDAgLjZjOS40LTUuNCAyMC4zLTguNiAzMi04LjYgMTMuMiAwIDI1LjQgNCAzNS42IDEwLjggOC43LTI0LjkgMzIuNS00Mi44IDYwLjQtNDIuOCAxMS43IDAgMjIuNiAzLjEgMzIgOC42bDAtOC42QzM4NCA3MS42IDMxMi40IDAgMjI0IDBMMTYyLjMgMEMxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5bDAgMjdjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGwtNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcyeiJdCiAgICB9OwogICAgZmFGYWNlTWVoQmxhbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoLWJsYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTY2LCAibWVoLWJsYW5rIl0sICJmNWE0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yMDgtNDhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTI4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhTWVoQmxhbmsyID0gZmFGYWNlTWVoQmxhbmsyOwogICAgZmFUZW1wZXJhdHVyZUVtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTAiLCAidGhlcm1vbWV0ZXItMCIsICJ0aGVybW9tZXRlci1lbXB0eSJdLCAiZjJjYiIsICJNNjQgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NCA5NnptOTYgMzM2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmUwID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFUaGVybW9tZXRlcjAgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYVRoZXJtb21ldGVyRW1wdHkgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYUJvcmRlck5vbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLW5vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg1MCIsICJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpNMTYwIDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMjg4IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0yODggMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMC0zODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTQxNiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQxNiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0eiJdCiAgICB9OwogICAgZmFIaWdobGlnaHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWdobGlnaHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTkxIiwgIk0zMTUgMzE1TDQ3My40IDk5LjkgNDQ0LjEgNzAuNiAyMjkgMjI5IDMxNSAzMTV6bS0xODcgNWwwIDAgMC03MS43YzAtMTUuMyA3LjItMjkuNiAxOS41LTM4LjZMNDIwLjYgOC40QzQyOCAyLjkgNDM3IDAgNDQ2LjIgMCA0NTcuNiAwIDQ2OC41IDQuNSA0NzYuNiAxMi42bDU0LjggNTQuOGM4LjEgOC4xIDEyLjYgMTkgMTIuNiAzMC41IDAgOS4yLTIuOSAxOC4yLTguNCAyNS42TDMzNC40IDM5Ni41Yy05IDEyLjMtMjMuNCAxOS41LTM4LjYgMTkuNWwtNzEuNyAwLTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTUwLjctNTAuN2MtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMMTI4IDMyMHpNNyA0NjYuM2w1MS43LTUxLjcgNzAuNiA3MC42LTE5LjcgMTkuN2MtNC41IDQuNS0xMC42IDctMTcgN0wyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNC43YzAtNi40IDIuNS0xMi41IDctMTd6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC13YXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1M2EiLCAiTTAgNDE5LjZMMCAxMDkuNWMwLTIzLjIgMjQuMS0zOC42IDQ2LjMtMzIgODcuNyAyNi4yIDE0OS43IDUuNSAyMTIuMS0xNS4zIDY0LjUtMjEuNSAxMjkuNC00My4xIDIyMy4zLTEzLjEgMTguNSA1LjkgMzAuMyAyMy44IDMwLjMgNDMuM2wwIDMxMC4xYzAgMjMuMi0yNC4xIDM4LjYtNDYuMiAzMi04Ny43LTI2LjItMTQ5LjgtNS41LTIxMi4xIDE1LjMtNjQuNSAyMS41LTEyOS40IDQzLjEtMjIzLjMgMTMuMS0xOC41LTUuOS0zMC4zLTIzLjgtMzAuMy00My4zek0zMzYgMjU2YzAtNTMtMzUuOC05Ni04MC05NnMtODAgNDMtODAgOTYgMzUuOCA5NiA4MCA5NiA4MC00MyA4MC05NnpNMTIwIDQxMy42YzQuNCAwIDcuOS0zLjggNy4yLTguMS00LjYtMjcuOC0yNy00OS41LTU1LjItNTMtNC40LS41LTggMy4xLTggNy41bDAgMzkuOWMwIDMuNiAyLjQgNi44IDYgNy43IDE3LjkgNC4yIDM0LjMgNi4xIDUwIDYuMXptMzE4LjUtNTEuMWM1IC44IDkuNS0zIDkuNS04bDAtNDIuNmMwLTQuNC0zLjYtOC4xLTgtNy41LTI1LjIgMy4xLTQ1LjkgMjAuOS01My4yIDQ0LjYtMS40IDQuNyAyLjMgOS4xIDcuMiA5LjIgMTQuMiAuNCAyOSAxLjcgNDQuNCA0LjN6TTQ0OCAxNTJsMC0zOS45YzAtMy42LTIuNS02LjgtNi03LjctMTcuOS00LjItMzQuMy02LjEtNTAtNi4xLTQuNCAwLTcuOSAzLjgtNy4yIDguMSA0LjYgMjcuOCAyNyA0OS41IDU1LjIgNTMgNC40IC41IDgtMy4xIDgtNy41ek0xMjUuMiAxNjIuOWMxLjQtNC43LTIuMy05LjEtNy4yLTkuMi0xNC4yLS40LTI5LTEuNy00NC40LTQuMy01LS44LTkuNSAzLTkuNSA4TDY0IDIwMGMwIDQuNCAzLjYgOC4xIDggNy41IDI1LjItMy4xIDQ1LjktMjAuOSA1My4yLTQ0LjZ6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBhcGVyLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzIiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk0LjUtOTQuNWM0MC4yLTIzIDY5LjUtOTYuOSA2OS41LTE4NC42IDAtMTA2LTQzLTE5Mi05Ni0xOTJzLTk2IDg2LTk2IDE5MmMwIDI0LjEgMi4yIDQ3LjIgNi4zIDY4LjRMMzA0IDIzOC4yIDMwNCAyMjRjMC01OC45IDExLjgtMTE0LjUgMzMuMi0xNTcuMiA1LjktMTEuNyAxMy4xLTIzLjcgMjEuOS0zNC44TDEyOCAzMmMtOC4zIDAtMTYuNCAyLjEtMjQuMSA2LjFsLTYzLTYzek0zMiAyMjRsMCAyNjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTYwIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0xMTQuMi0yNTYtMjU2QzM3LjkgMTQ4LjIgMzIgMTg0LjcgMzIgMjI0em00MTYgNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NC0xNC4zIDY0LTMyIDY0eiJdCiAgICB9OwogICAgZmFGaWxlU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2hpZWxkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjAxLjIgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC0zNC40IDIyLTY1IDU0LjctNzUuOWwxMTItMzcuM2MzLjEtMSA2LjItMS44IDkuMy0yLjVsMC0zOS4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2em04Ny44IDMxMi41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhVGV4dEhlaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXh0LWhlaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDM0IiwgIk00MCAzMkMxNy45IDMyIDAgNDkuOSAwIDcybDAgNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDY0IDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyMCA2NCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDMyek00MzguNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjQgMC0yMjkuNSA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjI5LjUtOS40LTkuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5Ub25ndWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzksICJncmluLXRvbmd1ZSJdLCAiZjU4OSIsICJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyNDBsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlMiA9IGZhRmFjZUdyaW5Ub25ndWUyOwogICAgZmFGaWxlU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2lnbmF0dXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NzMiLCAiTTY0LjEgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjc3LjYgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgOTcuNS0xMzIgMTMyLTQyLjEgMC0xNi4xLTUzLjZjLTQuNy0xNS43LTE5LjEtMjYuNC0zNS41LTI2LjQtMTEuMyAwLTIxLjkgNS4xLTI4LjkgMTMuOUwxMzMuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDMxLjUgMGMtLjkgMy4xLTEuNyA2LjMtMi4zIDkuNWwtMTAuOSA1NC41LTE0Ni4yIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5My41IDAtMTE3LjUtMTE3LjV6bTYwLjIgNDA4LjRjMi41LTEyLjQgOC42LTIzLjggMTcuNS0zMi43bDExOC45LTExOC45IDgwIDgwLTExOC45IDExOC45Yy04LjkgOC45LTIwLjMgMTUtMzIuNyAxNy41bC01OS42IDExLjljLS45IC4yLTEuOSAuMy0yLjkgLjMtOCAwLTE0LjYtNi41LTE0LjYtMTQuNiAwLTEgLjEtMS45IC4zLTIuOWwxMS45LTU5LjZ6bTI2Ny44LTEyM2wtMjguOCAyOC44LTgwLTgwIDI4LjgtMjguOGMyMi4xLTIyLjEgNTcuOS0yMi4xIDgwIDBzMjIuMSA1Ny45IDAgODB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctd2hlYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYiIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNDkuMyAwYy02LTE0LjgtOS4zLTMxLTkuMy00OCAwLTE3LjcgNy4yLTMzLjcgMTguOC00NS4zLTExLjktMTkuNC0xOC44LTQyLjMtMTguOC02Ni43IDAtMTcuNyA3LjItMzMuNyAxOC44LTQ1LjMtMTEuOS0xOS40LTE4LjgtNDIuMy0xOC44LTY2LjcgMC0yNS4yIDE0LjUtNDYuOSAzNS42LTU3LjQtMi40LTcuMS0zLjYtMTQuNy0zLjYtMjIuNmwwLTMyQzM2OCA5Ni43IDM4OCA3MC4xIDQxNS45IDYwLjEgNDEzLjkgMjYuNiAzODYgMCAzNTIgMEw5NiAwek0yMDggMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTM1MiAwbC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZ6bTE2IDEyOGMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwem0wIDExMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwek00OTYgNTI4YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZ6bS0xNi05NmM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwem0xNi0xMjhjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNTEyIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0em05NiA2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNDQwIDEwNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVlIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xMjggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYUZ1dGJvbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnV0Ym9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTkxNywgImZ1dGJvbC1iYWxsIiwgInNvY2Nlci1iYWxsIl0sICJmMWUzIiwgIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE0LjEtMzI1LjdjLTguNC02LjEtMTkuOC02LjEtMjguMiAwTDE5NCAyMjFjLTguNCA2LjEtMTEuOSAxNi45LTguNyAyNi44bDE4LjMgNTYuM2MzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZsNTkuMiAwYzEwLjQgMCAxOS42LTYuNyAyMi44LTE2LjZsMTguMy01Ni4zYzMuMi05LjktLjMtMjAuNy04LjctMjYuOGwtNDcuOS0zNC44eiJdCiAgICB9OwogICAgZmFGdXRib2xCYWxsMiA9IGZhRnV0Ym9sMjsKICAgIGZhU29jY2VyQmFsbDIgPSBmYUZ1dGJvbDI7CiAgICBmYUNpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGx1cy1jaXJjbGUiXSwgImYwNTUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzIgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c0NpcmNsZSA9IGZhQ2lyY2xlUGx1czsKICAgIGZhQnJhemlsaWFuUmVhbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhemlsaWFuLXJlYWwtc2lnbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDZjIiwgIk00MDAgMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC00OC45IDBjLTI2IDAtNDcuMSAyMS4xLTQ3LjEgNDcuMSAwIDIyLjUgMTUuOSA0MS44IDM3LjkgNDYuMmwzMi44IDYuNmM1MS45IDEwLjQgODkuMyA1NiA4OS4zIDEwOSAwIDUwLjYtMzMuOCA5My4zLTgwIDEwNi43bDAgMjAuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQuOSAwYzI2IDAgNDcuMS0yMS4xIDQ3LjEtNDcuMSAwLTIyLjUtMTUuOS00MS44LTM3LjktNDYuMmwtMzIuOC02LjZjLTUxLjktMTAuNC04OS4zLTU2LTg5LjMtMTA5IDAtNTAuNiAzMy44LTkzLjIgODAtMTA2LjdMMzY4IDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6Il0KICAgIH07CiAgICBmYVN0YXJBbmRDcmVzY2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWFuZC1jcmVzY2VudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzBdLCAiZjY5OSIsICJNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAzMyAwIDY0LjYgNi4zIDkzLjYgMTcuNyA3LjQgMi45IDExLjUgMTAuNyA5LjggMTguNHMtOC44IDEzLTE2LjcgMTIuNGMtNC44LS4zLTkuNy0uNS0xNC42LS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41IDcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6Il0KICAgIH07CiAgICBmYUZhY2VTdXJwcmlzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zdXJwcmlzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgInN1cnByaXNlIl0sICJmNWMyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVN1cnByaXNlMiA9IGZhRmFjZVN1cnByaXNlMjsKICAgIGZhSG9zcGl0YWxVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjgwZCIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0yNDggODhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6TTQxNiAzMDRhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUFycm93RG93blVwTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXVwLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRiMCIsICJNMjYyLjYgNDIyLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMjUuNCAyNS40IDAtMTE0LjctNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyNTYgMCAwLTExNC43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTI1LjQtMjUuNCAwIDk0LjhjLTI1LjMgMjAuMy00Mi44IDUwLjEtNDcgODMuOWwtMTQ1IDAgMCAxMTQuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMTkyIDMybDAgMTQ0LTY0IDAgMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDk2IDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhRm9sZGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsICJmb2xkZXItYmxhbmsiXSwgImYwN2IiLCAiTTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFGb2xkZXJCbGFuazIgPSBmYUZvbGRlcjI7CiAgICBmYUhvbGx5QmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9sbHktYmVycnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhYSIsICJNMjU2LjIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0yNzcgMzgzLjhjMSAuMSAyLjEgLjIgMy4yIC4yIDM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjIuN2MwIDE2LjQgMTYgMjcuOSAzMS42IDIyLjhsMTIuOC00LjNjMTgtNiAzNy4zLTYuNSA1NS42LTEuNWwxOS40IDUuM2MxNy45IDQuOSAzNC40LTExLjYgMjkuNS0yOS41TDQ5NS45IDQ1MmMtNS0xOC4zLTQuNC0zNy42IDEuNS01NS42bDQuMy0xMi44YzUuMi0xNS41LTYuNC0zMS42LTIyLjgtMzEuNi0zNC42IDAtNjIuNy0yOC4xLTYyLjctNjIuN2wwLTMyYzAtMTYuNC0xNi0yNy45LTMxLjYtMjIuOGwtMTIuOCA0LjNjLTE4IDYtMzcuMyA2LjUtNTUuNiAxLjVsLTI5LjYtOC4xYy0yLjktLjgtNS45LTEtOC43LS43IDQuMiA5LjcgNS44IDIwLjggMy43IDMyLjNsLTYuMyAzNC44Yy0xLjUgOC40LTEuNCAxNyAuNSAyNS4zbDUuMyAyMy45YzIuOCAxMi43IDEuMSAyNS4yLTQgMzUuOXpNMTI3LjggMjM0LjVjLTE1LjUtNS4yLTMxLjYgNi40LTMxLjYgMjIuOGwwIDMyYzAgMzQuNi0yOC4xIDYyLjctNjIuNyA2Mi43LTE2LjQgMC0yNy45IDE2LTIyLjggMzEuNkwxNSAzOTYuNGM2IDE4IDYuNSAzNy4zIDEuNSA1NS42bC01LjMgMTkuNEM2LjQgNDg5LjQgMjIuOCA1MDUuOCA0MC43IDUwMWwxOS40LTUuM2MxOC4zLTUgMzcuNi00LjUgNTUuNiAxLjVsMTIuOCA0LjNjMTUuNSA1LjIgMzEuNi02LjQgMzEuNi0yMi44bDAtMzJjMC0zNC42IDI4LjEtNjIuNyA2Mi43LTYyLjcgMTYuNCAwIDI3LjktMTYgMjIuOC0zMS42bC00LjMtMTIuOGMtNi0xOC02LjUtMzcuMy0xLjUtNTUuNmw1LjMtMTkuNGM0LjktMTcuOS0xMS42LTM0LjQtMjkuNS0yOS41bC0xOS40IDUuM2MtMTguMyA1LTM3LjYgNC40LTU1LjYtMS41bC0xMi44LTQuM3pNMzg0LjIgMTQ0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVZlbnVzRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzLWRvdWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTBdLCAiZjIyNiIsICJNMTkyIDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM2OCAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0LjEgMTczLjEgLjEgMSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS04Mi0xNS0xNDQuMS04Ni44LTE0NC4xLTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2UzM2OCA3OC44IDM2OCAxNzZ6TTM1Ny41IDMyN2MxNC40LTE1LjggMjYuNi0zMy43IDM2LjEtNTMuMSAxNi4xIDkgMzQuNyAxNC4xIDU0LjUgMTQuMSA2MS45IDAgMTEyLTUwLjEgMTEyLTExMlM1MDkuOSA2NCA0NDggNjRjLTE5LjggMC0zOC4zIDUuMS01NC41IDE0LjEtOS41LTE5LjQtMjEuNi0zNy4zLTM2LjEtNTMuMSAyNi40LTE1LjkgNTcuNC0yNSA5MC41LTI1IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIC45IC4xIDEuOSAuMSAyLjlsMCA2NCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NGMwLTEgMC0xLjkgLjEtMi45LTIxLjEtMy45LTQwLjktMTEuNS01OC42LTIyLjJ6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZFF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1xdWVzdGlvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNGUzIiwgIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDI0OGMxNi4xIDAgMjkuMiAxMy4xIDI5LjIgMjkuMiAwIDguNy0zLjEgMTMuOS02LjkgMTcuNy00LjUgNC40LTEwLjcgNy41LTE2LjggOS41LTE0LjkgNS0yOS41IDE5LjMtMjkuNSAzOS41IDAgMTMuMyAxMC43IDI0IDI0IDI0IDExLjUgMCAyMS4yLTguMSAyMy41LTE5IDE5LjItNy4xIDUzLjctMjYuMyA1My43LTcxLjggMC00Mi42LTM0LjYtNzcuMi03Ny4yLTc3LjJzLTc3LjIgMzQuNi03Ny4yIDc3LjJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE2LjEgMTMuMS0yOS4yIDI5LjItMjkuMnptMjggMTY4YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHoiXQogICAgfTsKICAgIGZhSG90ZG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdGRvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc4OV0sICJmODBmIiwgIk0yODggMGMtMjAuNSAwLTQwLjEgOC4xLTU0LjYgMjIuNkwyMi42IDIzMy40QzguMSAyNDcuOSAwIDI2Ny41IDAgMjg4IDAgMzAwLjIgMi45IDMxMi4xIDguMiAzMjIuN0wzMjIuNyA4LjJDMzEyLjEgMi45IDMwMC4yIDAgMjg4IDB6TTIyNCA1MTJjMjAuNSAwIDQwLjEtOC4xIDU0LjYtMjIuNkw0ODkuNCAyNzguNmMxNC41LTE0LjUgMjIuNi0zNC4xIDIyLjYtNTQuNiAwLTEyLjItMi45LTI0LjEtOC4yLTM0LjdMMTg5LjMgNTAzLjhjMTAuNyA1LjQgMjIuNiA4LjIgMzQuNyA4LjJ6TTQ1Ni42IDE2OC42YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTI4OCAyODhjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMXM4MS45IDMxLjIgMTEzLjEgMGwyODgtMjg4eiJdCiAgICB9OwogICAgZmFBcnJvd1VwRnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwOWEiLCAiTTI0Ni42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDEwOS4zIDE5MiAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4ek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFNaWNyb3Njb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3Jvc2NvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDBdLCAiZjYxMCIsICJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NCAzMiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzM5MC43IDQ0OCAzMjAgNDQ4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYuOSAwYzMwLjQtMzQgNDguOS03OC44IDQ4LjktMTI4IDAtMTA2LTg2LTE5Mi0xOTItMTkybC0zMiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6TTEyMCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFDbG91ZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI5XSwgImYwYzIiLCAiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0bDMwNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNTEuNi0zMC41LTk2LjEtNzQuNS0xMTYuMyA2LjctMTMuMSAxMC41LTI4IDEwLjUtNDMuNyAwLTUzLTQzLTk2LTk2LTk2LTE3LjcgMC0zNC4yIDQuOC00OC40IDEzLjEtMjQuMS00NS44LTcyLjItNzcuMS0xMjcuNi03Ny4xLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOCAuNyAxNS45IDEuOSAyMy41LTU2LjkgMTkuMi05Ny45IDczLjEtOTcuOSAxMzYuNXoiXQogICAgfTsKICAgIGZhQmFzZWJhbGxCYXRCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsLWJhdC1iYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0MzIiLCAiTTQ2NC4xIDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptOC40LTU3NmMxNS4xIDAgMjkuNyA1LjggNDAuNyAxNi4ybDQ3LjIgNDQuOGMxMi42IDEyIDE5LjEgMjkgMTcuNSA0Ni4zLTEuMiAxMy4zLTcgMjUuOC0xNi41IDM1LjJMMzYzLjEgMzA5Yy03LjMgNy4zLTE1LjcgMTMuNC0yNSAxOEwyMDYgMzkzYy05LjIgNC42LTE3LjcgMTAuNy0yNSAxOGwtOTIgOTIgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN2wtMS44LTEuNy00OC00OC0xLjctMS44Yy03LjctOS40LTcuMS0yMy4zIDEuNy0zMi4xczIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgOTItOTJjNy4zLTcuMyAxMy40LTE1LjcgMTgtMjVsNjYuMS0xMzIuMWM0LjYtOS4yIDEwLjctMTcuNyAxOC0yNUw0MzAuOC0xNC43QzQ0MS45LTI1LjggNDU2LjktMzIgNDcyLjUtMzJ6Il0KICAgIH07CiAgICBmYUNhclJlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLXJlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2FyLWFsdCJdLCAiZjVkZSIsICJNMTY1LjQgOTZsMTgxLjIgMGMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40bDI2LjEgNzQuNi0yOTMuOCAwIDI2LjEtNzQuNmM0LjUtMTIuOCAxNi42LTIxLjQgMzAuMi0yMS40em0tOTAuNiAuM0wzOS42IDE5Ni44QzE2LjQgMjA2LjQgMCAyMjkuMyAwIDI1NmwwIDk2YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwzMiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI1NiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQwLjZjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNGwwLTk2YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDk2LjNDNDIzLjcgNTcuOCAzODcuNCAzMiAzNDYuNiAzMkwxNjUuNCAzMmMtNDAuOCAwLTc3LjEgMjUuOC05MC42IDY0LjN6TTIwOCAyODhsOTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTk2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMjgwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zNjAtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ2FyQWx0ID0gZmFDYXJSZWFyOwogICAgZmFUaHVtYnRhY2tTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2stc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidGh1bWItdGFjay1zbGFzaCJdLCAiZTY4ZiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MTcuOCAzNTIgNDQ4IDM1MmMxMCAwIDE5LjUtNC43IDI1LjUtMTIuN3M4LTE4LjQgNS4yLTI4LjFMNDc1IDI5Ny44Yy0xMi40LTQzLjMtNDEtNzguNS03OC4yLTk5LjdMMzg2LjUgNjQgNDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMTYwIDBjLTcuNCAwLTE0LjEgMi41LTE5LjUgNi42TDE5MC4xIDU2LjMgMTg1LjMgMTE5LjQgNDEtMjQuOXpNMjgyLjIgMzUyTDE0OS43IDIxOS42Yy0yMi43IDIwLjUtMzkuOCA0Ny40LTQ4LjcgNzguM2wtMy44IDEzLjRjLTIuOCA5LjctLjggMjAgNS4yIDI4LjFTMTE4IDM1MiAxMjggMzUybDE1NC4yIDB6TTI1NiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMi02NCAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2tTbGFzaCA9IGZhVGh1bWJ0YWNrU2xhc2g7CiAgICBmYVBsdXNNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzLW1pbnVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0M2MiLCAiTTIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDEyOC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTEyOHpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhSG91c2VDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwOSIsICJNNDk2IDU0NGExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMjE3LjYgMjAyYy0xMC4yLTEuNy0yMC43LTIuNi0zMS4zLTIuNi03OC42IDAtMTQ2LjEgNDcuMi0xNzUuOCAxMTQuOC01LjEtMS44LTEwLjUtMi44LTE2LjItMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkxIDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjEgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek01NTMuNCAzMzkuMWMtNy4xLTUuMi0xNy4xLTMuNi0yMi4zIDMuNWwtNTMgNzIuOC0yNi43LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjdzOC45LTIuOCAxMS43LTYuNmw2NC04OGM1LjItNy4xIDMuNi0xNy4xLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckRheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYUxpYnJhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpYnJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NGIiLCAiTTQ4MCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ0OCAwek0yNTYgMzJjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCAxNi42LTIuNCAzMi43LTYuNyA0OGw1NC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwNC4yIDBjLTExLjggMC0yMi43LTYuNS0yOC4yLTE2LjlzLTQuOS0yMy4xIDEuNi0zMi45YzExLjktMTcuOCAxOC44LTM5LjEgMTguOC02Mi4yIDAtNjEuOS01MC4xLTExMi0xMTItMTEyUzE0NCAxNDYuMSAxNDQgMjA4YzAgMjMuMSA2LjkgNDQuNCAxOC44IDYyLjIgNi42IDkuOCA3LjIgMjIuNSAxLjYgMzIuOVMxNDguMSAzMjAgMTM2LjIgMzIwTDMyIDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1NC44IDBjLTQuMy0xNS4zLTYuOC0zMS40LTYuOC00OCAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NnoiXQogICAgfTsKICAgIGZhQ2lyY2xlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDgsIDEyODMwOSwgMTI4OTkyLCAxMjg5OTMsIDEyODk5NCwgMTI4OTk1LCAxMjg5OTYsIDk2NzksIDk4OTgsIDk4OTksIDExMDQ0LCA2MTcwOCwgNjE5MTVdLCAiZjExMSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhTW9iaWxlVmlicmF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtdmlicmF0ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODE2IiwgIk0zODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTkyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDM4NCAwek0yNDggNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6TTQ4LjggMTMzLjRjOS40LTcuNyAyMy4zLTcuMSAzMi4xIDEuNyA5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzEgMzEgMjUuNCAyNS40IDIuOSAzLjJjNi4zIDcuNyA5LjggMTcuNCA5LjggMjcuNCAwIDExLjUtNC42IDIyLjUtMTIuNyAzMC42bC0yNS40IDI1LjQgMzEgMzEgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN0w0NyAzNzcgMTIuNyAzNDIuNkM1LjYgMzM1LjUgMS4yIDMyNi4yIC4yIDMxNi4zTDAgMzEyIC4yIDMwNy43YzEtOS45IDUuNC0xOS4yIDEyLjUtMjYuM0wzOC4xIDI1NiAxMi43IDIzMC42QzUuNiAyMjMuNSAxLjIgMjE0LjIgLjIgMjA0LjNMMCAyMDAgLjIgMTk1LjdjMS05LjkgNS40LTE5LjIgMTIuNS0yNi4zTDQ3IDEzNSA0OC44IDEzMy40ek00OTUgMTM1YzguOC04LjggMjIuNy05LjMgMzIuMS0xLjdsMS44IDEuNyAzNC4zIDM0LjNjNy4xIDcuMSAxMS41IDE2LjQgMTIuNSAyNi4zbC4yIDQuMy0uMiA0LjNjLTEgOS45LTUuNCAxOS4yLTEyLjUgMjYuM2wtMjUuNCAyNS40IDI1LjQgMjUuNGM3LjEgNy4xIDExLjUgMTYuNCAxMi41IDI2LjNsLjIgNC4zLS4yIDQuM2MtMSA5LjktNS40IDE5LjItMTIuNSAyNi4zbC0zNC4zIDM0LjMtMS44IDEuN2MtOS40IDcuNy0yMy4zIDcuMS0zMi4xLTEuN3MtOS4zLTIyLjctMS43LTMyLjFsMS43LTEuOCAzMS0zMS0yNS40LTI1LjRjLTguMS04LjEtMTIuNy0xOS4xLTEyLjctMzAuNiAwLTEwIDMuNS0xOS43IDkuOC0yNy40bDIuOS0zLjIgMjUuNC0yNS40LTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTgsICJncmluLXNxdWludCJdLCAiZjU4NSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xMjIuNiAxNDMuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMTkyIDM4Ni4yIDIxOS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50MiA9IGZhRmFjZUdyaW5TcXVpbnQyOwogICAgZmFVc2Vyc0JldHdlZW5MaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1iZXR3ZWVuLWxpbmVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTEiLCAiTTI0IDE2bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDY0QzEwLjcgNjQgMCA1My4zIDAgNDBTMTAuNyAxNiAyNCAxNnptMCA0NDhsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0zOTIgMTkyYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjcuMiAxMDAuNGM5LjEtMi45IDE4LjgtNC40IDI4LjgtNC40IDUzIDAgOTYgNDMgOTYgOTZsMCAxMC43YzAgMTEuOC05LjYgMjEuMy0yMS4zIDIxLjNsLTc4LjggMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLThjMC0zNC4xLTEwLjYtNjUuNy0yOC44LTkxLjZ6bS0yNjIuNCAwQzEzOC42IDMxOC4zIDEyOCAzNDkuOSAxMjggMzg0bDAgOGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTc4LjggMEM0MS42IDQxNiAzMiA0MDYuNCAzMiAzOTQuN0wzMiAzODRjMC01MyA0My05NiA5Ni05NiAxMCAwIDE5LjcgMS41IDI4LjggNC40ek03MiAxOTJhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0xNTItMTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0xNzYgMzg0YzAtNjEuOSA1MC4xLTExMiAxMTItMTEyczExMiA1MC4xIDExMiAxMTJsMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC04eiJdCiAgICB9OwogICAgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTEzIiwgIk0zMDkuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzUwLjggMjcyIDY0IDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5NiAwYy0yMS4yLTI5LjUtMzQuMy02NS4zLTM1LjktMTA0TDI3MiA0MDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgMjAgMGMzNC45LTQ4LjUgOTEuNy04MCAxNTYtODAgMTAuNyAwIDIxLjEgLjkgMzEuMyAyLjVMMzA5LjggOC42ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDQwMHoiXQogICAgfTsKICAgIGZhVGFibGVMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWxpc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgtbGlzdCJdLCAiZjAwYiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTY0IDBsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHpNNjQgMjI0bDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6TTY0IDM1MmwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFUaExpc3QgPSBmYVRhYmxlTGlzdDsKICAgIGZhRmxhc2tWaWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsYXNrLXZpYWwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRmMyIsICJNMTg0LjYgNDExLjVjLTMuMSA3LjMtNS40IDE0LjktNi44IDIyLjYtMTQuNSA4LjgtMzEuNSAxMy45LTQ5LjggMTMuOS01MyAwLTk2LTQzLTk2LTk2TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJTMTQuMyAwIDMyIDBMMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAyNTUuNi0zOS40IDkxLjl6TTk2IDY0bDAgMTI4IDY0IDAgMC0xMjgtNjQgMHpNMzUyIDBMNTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuNCA5MS4zIDIxM2MyLjMgNS40IDMuOCAxMS4xIDQuNCAxN2wuMyAuNi0uMyAwYy4yIDEuOCAuMyAzLjYgLjMgNS40IDAgMzIuMy0yNi4yIDU4LjYtNTguNiA1OC42bC0yNjYuOSAwYy0zMi4zIDAtNTguNi0yNi4yLTU4LjYtNTguNiAwLTEuOCAuMS0zLjYgLjMtNS40bC0uMyAwIC4zLS42Yy42LTUuOCAyLjEtMTEuNiA0LjQtMTdMMzIwIDIxNy40IDMyMCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMzAyLjMgMCAzMjAgMGwzMiAwek00NTMuMiAyNDIuNmMtMy40LTgtNS4yLTE2LjUtNS4yLTI1LjJsMC0xNTMuNC02NCAwIDAgMTUzLjRjMCA4LjctMS44IDE3LjItNS4yIDI1LjJsLTMzLjIgNzcuNCAxNDAuNyAwLTMzLjItNzcuNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4Y2xhbWF0aW9uLWNpcmNsZSJdLCAiZjA2YSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtMTkyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNiAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3oiXQogICAgfTsKICAgIGZhRXhjbGFtYXRpb25DaXJjbGUgPSBmYUNpcmNsZUV4Y2xhbWF0aW9uOwogICAgZmFUYXhpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRheGkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NjIsICJjYWIiXSwgImYxYmEiLCAiTTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTguOSAwYy00MiAwLTc5LjEgMjcuMy05MS42IDY3LjRsLTIzIDczLjVDMTQuNSAyMTkuMSAwIDI0My45IDAgMjcyTDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAzMjAgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNzZjMC0yOC4xLTE0LjUtNTIuOS0zNi40LTY3LjFsLTIzLTczLjVDNDQwLjEgOTEuMyA0MDIuOSA2NCAzNjAuOSA2NGwtOC45IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxOTIgMHpNMTUxLjEgMTI4bDIwOS45IDBjMTQgMCAyNi40IDkuMSAzMC41IDIyLjVsMTMgNDEuNS0yOTYuOSAwIDEzLTQxLjVjNC4yLTEzLjQgMTYuNS0yMi41IDMwLjUtMjIuNXpNOTYgMjcyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjg4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUNhYiA9IGZhVGF4aTsKICAgIGZhVGV4dFNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRleHQtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicmVtb3ZlLWZvcm1hdCJdLCAiZjg3ZCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMjIuNyAyNTYuOSAzNjguMiA5NiA0NzEgOTYgNDY1IDEyMC4yYy00LjMgMTcuMSA2LjEgMzQuNSAyMy4zIDM4LjhzMzQuNS02LjEgMzguOC0yMy4zbDExLTQ0LjFDNTQ1LjYgNjEuMyA1MjIuNyAzMiA0OTEuNSAzMmwtMzE5IDBjLTE5LjggMC0zNy4zIDEyLjEtNDQuNSAzMC4xbC04Ny04N3pNMTgwLjQgMTE0LjVsNC42LTE4LjUgMTE2LjcgMC0zMC44IDEwOS05MC41LTkwLjV6TTI0MSAzMTAuOEwyMTEuMyA0MTYgMTYwIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDIuMiAwIDE1LjEtNTMuMy01MS45LTUxLjl6Il0KICAgIH07CiAgICBmYVJlbW92ZUZvcm1hdCA9IGZhVGV4dFNsYXNoOwogICAgZmFQZW9wbGVQdWxsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1wdWxsaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzUiLCAiTTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMiA5LjggMCAxOC41LTQuNCAyNC40LTExLjJMODAuNCA0ODUuM2MyLjkgMTcuNCAxOS40IDI5LjIgMzYuOCAyNi4zczI5LjItMTkuNCAyNi4zLTM2LjhsLTIwLjUtMTIyLjcgMTUuNyAwIDMwIDEzNC45YzMuOCAxNy4zIDIwLjkgMjguMSAzOC4yIDI0LjNzMjguMS0yMC45IDI0LjMtMzguMmwtNTcuMy0yNTggMTE2LjMgNTMuOGMuNSAuMyAxLjEgLjUgMS42IC43IDguNiAzLjYgMTggMy4xIDI1LjktLjcgMy40LTEuNiA2LjYtMy45IDkuMy02LjcgMy4xLTMuMiA1LjUtNyA3LjEtMTEuNCAuMS0uMyAuMi0uNyAuMy0xbDIuNS03LjVjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlsLTIxLjQtMTAuNy0xNS4zLTM2LjhjLTE3LjEtNDEuMS01Ny4zLTY3LjktMTAxLjktNjcuOS0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTI0LjQgMTAuOS00NC42IDI5LTU4LjEgNTEuNkwxNTcuMyAxMzYuOUMxNDQuNyAxMzEgMTMwLjkgMTI4IDExNyAxMjhsLTUzIDB6TTQ2NCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTM0OS43IDMzNS42bC0yNSA2Mi40LTU5LjQgNTkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzNzIuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42eiJdCiAgICB9OwogICAgZmFCYWNrd2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNrd2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzkxOTRdLCAiZjA0YSIsICJNMjA0LjMgNDMuMUMyMTUuOSAzMiAyMzMgMjguOSAyNDcuNyAzNS4yUzI3MiA1NiAyNzIgNzJsMCAxMzYuMyAxNzIuMy0xNjUuMUM0NTUuOSAzMiA0NzMgMjguOSA0ODcuNyAzNS4yUzUxMiA1NiA1MTIgNzJsMCAzNjhjMCAxNi05LjYgMzAuNS0yNC4zIDM2LjhzLTMxLjggMy4yLTQzLjQtNy45TDI3MiAzMDMuNyAyNzIgNDQwYzAgMTYtOS42IDMwLjUtMjQuMyAzNi44cy0zMS44IDMuMi00My40LTcuOWwtMTkyLTE4NEM0LjUgMjc3LjMgMCAyNjYuOSAwIDI1NnM0LjUtMjEuMyAxMi4zLTI4LjlsMTkyLTE4NHoiXQogICAgfTsKICAgIGZhQ2FyQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLWJ1cnN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImNhci1jcmFzaCJdLCAiZjVlMSIsICJNMjMyIDE2LjFsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6TTMyIDE2OC4xbDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6TTI4MS41IDcwLjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMjgxLjUgMzYuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bS0xODEgMjE1bDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDY2LjYgMjUxLjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMHpNNjYuNiAyLjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMTAwLjUgMi43QzkxLjEtNi43IDc2LTYuNyA2Ni42IDIuN3pNMzUyLjkgMTc1LjRMNTA1IDIxNi4yYzYuNCAxLjcgMTEuMSA3LjMgMTEuOCAxMy45bDcuMiA3NC0yMzEuNS02MiA0My4yLTYwLjVjMy45LTUuNCAxMC43LTcuOSAxNy4yLTYuMnpNMjIzLjYgMjI4LjVsLTIuMSAyLjljLTIxLjcgNS41LTM5LjkgMjIuMy00Ni4xIDQ1LjUtNC4xIDE1LjUtMTIuNCA0Ni40LTI0LjggOTIuN2wtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjZsOC4zLTMwLjkgMjc4LjIgNzQuNS04LjMgMzAuOWMtNC42IDE3LjEgNS42IDM0LjYgMjIuNiAzOS4ybDE1LjUgNC4xYzE3LjEgNC42IDM0LjYtNS42IDM5LjItMjIuNiA0LjEtMTUuNSAxMi40LTQ2LjQgMjQuOC05Mi43bDguMy0zMC45YzYuMi0yMy4yLTEuMS00Ni44LTE3LjItNjIuNWwtLjMtMy42LTEwLTEwM2MtMy4yLTMzLjItMjYuNy02MC45LTU4LjktNjkuNUwzNjkuNSAxMTMuNmMtMzIuMi04LjYtNjYuNCAzLjYtODUuOCAzMC44bC02MC4yIDg0LjJ6bTQ4LjcgNTcuOGEzMiAzMiAwIDEgMSAtMTYuNiA2MS44IDMyIDMyIDAgMSAxIDE2LjYtNjEuOHptMjA4LjEgODguOWEzMiAzMiAwIDEgMSA2MS44IDE2LjYgMzIgMzIgMCAxIDEgLTYxLjgtMTYuNnoiXQogICAgfTsKICAgIGZhQ2FyQ3Jhc2ggPSBmYUNhckJ1cnN0OwogICAgZmFMaW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpbmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyNzksICJjaGFpbiJdLCAiZjBjMSIsICJNNDE5LjUgOTZjLTE2LjYgMC0zMi43IDQuNS00Ni44IDEyLjctMTUuOC0xNi0zNC4yLTI5LjQtNTQuNS0zOS41IDI4LjItMjQgNjQuMS0zNy4yIDEwMS4zLTM3LjIgODYuNCAwIDE1Ni41IDcwIDE1Ni41IDE1Ni41IDAgNDEuNS0xNi41IDgxLjMtNDUuOCAxMTAuNmwtNzEuMSA3MS4xYy0yOS4zIDI5LjMtNjkuMSA0NS44LTExMC42IDQ1LjgtODYuNCAwLTE1Ni41LTcwLTE1Ni41LTE1Ni41IDAtMS41IDAtMyAuMS00LjUgLjUtMTcuNyAxNS4yLTMxLjYgMzIuOS0zMS4xczMxLjYgMTUuMiAzMS4xIDMyLjljMCAuOSAwIDEuOCAwIDIuNiAwIDUxLjEgNDEuNCA5Mi41IDkyLjUgOTIuNSAyNC41IDAgNDgtOS43IDY1LjQtMjcuMWw3MS4xLTcxLjFjMTcuMy0xNy4zIDI3LjEtNDAuOSAyNy4xLTY1LjQgMC01MS4xLTQxLjQtOTIuNS05Mi41LTkyLjV6TTI3NS4yIDE3My4zYy0xLjktLjgtMy44LTEuOS01LjUtMy4xLTEyLjYtNi41LTI3LTEwLjItNDIuMS0xMC4yLTI0LjUgMC00OCA5LjctNjUuNCAyNy4xTDkxLjEgMjU4LjJjLTE3LjMgMTcuMy0yNy4xIDQwLjktMjcuMSA2NS40IDAgNTEuMSA0MS40IDkyLjUgOTIuNSA5Mi41IDE2LjUgMCAzMi42LTQuNCA0Ni43LTEyLjYgMTUuOCAxNiAzNC4yIDI5LjQgNTQuNiAzOS41LTI4LjIgMjMuOS02NCAzNy4yLTEwMS4zIDM3LjItODYuNCAwLTE1Ni41LTcwLTE1Ni41LTE1Ni41IDAtNDEuNSAxNi41LTgxLjMgNDUuOC0xMTAuNmw3MS4xLTcxLjFjMjkuMy0yOS4zIDY5LjEtNDUuOCAxMTAuNi00NS44IDg2LjYgMCAxNTYuNSA3MC42IDE1Ni41IDE1Ni45IDAgMS4zIDAgMi42IDAgMy45LS40IDE3LjctMTUuMSAzMS42LTMyLjggMzEuMnMtMzEuNi0xNS4xLTMxLjItMzIuOGMwLS44IDAtMS41IDAtMi4zIDAtMzMuNy0xOC02My4zLTQ0LjgtNzkuNnoiXQogICAgfTsKICAgIGZhQ2hhaW4gPSBmYUxpbms7CiAgICBmYUJhY2t3YXJkU3RlcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNrd2FyZC1zdGVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN0ZXAtYmFja3dhcmQiXSwgImYwNDgiLCAiTTM2MyAzNi44Yy0xMi45LTctMjguNy02LjMtNDEgMS44TDY0IDIwOC4xIDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNDQuMSAyNTggMTY5LjZjMTIuMyA4LjEgMjggOC44IDQxIDEuOHMyMS0yMC41IDIxLTM1LjJsMC0zNjhjMC0xNC43LTguMS0yOC4yLTIxLTM1LjJ6Il0KICAgIH07CiAgICBmYVN0ZXBCYWNrd2FyZCA9IGZhQmFja3dhcmRTdGVwOwogICAgZmFYID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIngiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjBdLCAiNTgiLCAiTTM3Ni42IDg0LjVjMTEuMy0xMy42IDkuNS0zMy44LTQuMS00NS4xcy0zMy44LTkuNS00NS4xIDQuMUwxOTIgMjA2IDU2LjYgNDMuNUM0NS4zIDI5LjkgMjUuMSAyOC4xIDExLjUgMzkuNFMtMy45IDcwLjkgNy40IDg0LjVMMTUwLjMgMjU2IDcuNCA0MjcuNWMtMTEuMyAxMy42LTkuNSAzMy44IDQuMSA0NS4xczMzLjggOS41IDQ1LjEtNC4xTDE5MiAzMDYgMzI3LjQgNDY4LjVjMTEuMyAxMy42IDMxLjUgMTUuNCA0NS4xIDQuMXMxNS40LTMxLjUgNC4xLTQ1LjFMMjMzLjcgMjU2IDM3Ni42IDg0LjV6Il0KICAgIH07CiAgICBmYUNpcmNsZVVzZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS11c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNDIsICJ1c2VyLWNpcmNsZSJdLCAiZjJiZCIsICJNMzk5IDM4NC4yQzM3Ni45IDM0NS44IDMzNS40IDMyMCAyODggMzIwbC02NCAwYy00Ny40IDAtODguOSAyNS44LTExMSA2NC4yIDM1LjIgMzkuMiA4Ni4yIDYzLjggMTQzIDYzLjhzMTA3LjgtMjQuNyAxNDMtNjMuOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2IDE2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0eiJdCiAgICB9OwogICAgZmFVc2VyQ2lyY2xlMiA9IGZhQ2lyY2xlVXNlcjI7CiAgICBmYVJlY3RhbmdsZUxpc3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY3RhbmdsZS1saXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtYWx0Il0sICJmMDIyIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptOTYgMjU2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTEyMC01NmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgMTI4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTGlzdEFsdDIgPSBmYVJlY3RhbmdsZUxpc3QyOwogICAgZmFIYW5kMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzA2LCA5OTk1LCAiaGFuZC1wYXBlciJdLCAiZjI1NiIsICJNMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjcyYzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRTLTMuNiAzMjUuNyAxMi40IDM0MUwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4yIDBjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZsMC0yMDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yMDh6Il0KICAgIH07CiAgICBmYUhhbmRQYXBlcjIgPSBmYUhhbmQyOwogICAgZmFDYW5jZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FuY2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4NDciLCAiTTQwOCAxNTJjNTcuNCAwIDEwNCA0Ni42IDEwNCAxMDQgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1Ni01NC4zIDAtMTA0LjgtMTctMTQ2LjMtNDUuOS0xNC41LTEwLjEtMTgtMzAuMS03LjktNDQuNnMzMC4xLTE4IDQ0LjYtNy45YzMxLjEgMjEuNyA2OC45IDM0LjQgMTA5LjcgMzQuNCA2Ny45IDAgMTI3LjUtMzUuMyAxNjEuNy04OC41LTMuMiAuMy02LjQgLjUtOS43IC41LTU3LjQgMC0xMDQtNDYuNi0xMDQtMTA0czQ2LjYtMTA0IDEwNC0xMDR6TTI1NiAwYzU0LjMgMCAxMDQuOCAxNyAxNDYuMyA0NS45IDE0LjUgMTAuMSAxOCAzMC4xIDcuOSA0NC42cy0zMC4xIDE4LTQ0LjYgNy45Yy0zMS4xLTIxLjctNjguOS0zNC40LTEwOS43LTM0LjQtNjcuOSAwLTEyNy41IDM1LjItMTYxLjcgODguNCAzLjItLjMgNi40LS40IDkuNy0uNCA1Ny40IDAgMTA0IDQ2LjYgMTA0IDEwNFMxNjEuNCAzNjAgMTA0IDM2MCAwIDMxMy40IDAgMjU2QzAgMjU0LjEgMCAyNTIuMiAuMSAyNTAuNCAzLjEgMTExLjYgMTE2LjUgMCAyNTYgMHpNMTA0IDIxNmE0MCA0MCAwIDEgMCAwIDgwIDQwIDQwIDAgMSAwIDAtODB6bTMwNCAwYTQwIDQwIDAgMSAwIDAgODAgNDAgNDAgMCAxIDAgMC04MHoiXQogICAgfTsKICAgIGZhVmFuU2h1dHRsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2YW4tc2h1dHRsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NiwgInNodXR0bGUtdmFuIl0sICJmNWI2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDMzNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwuNCAwYzQgNDQuOSA0MS43IDgwIDg3LjYgODBzODMuNi0zNS4xIDg3LjYtODBsMTA0LjcgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwIDQ2LjEgMCA4My45LTM1LjQgODcuNy04MC41IDMxLjctMy44IDU2LjMtMzAuOCA1Ni4zLTYzLjVsMC0xMDEuM2MwLTEzLjgtNC41LTI3LjMtMTIuOC0zOC40bC04MC0xMDYuN0M0NzEuMSA3My41IDQ1Mi4xIDY0IDQzMiA2NEw2NCA2NHpNNTA0IDIyNGwtMTIwIDAgMC05NiA0OCAwIDcyIDk2ek02NCAyMjRsMC05NiA5NiAwIDAgOTYtOTYgMHptMTYwIDBsMC05NiA5NiAwIDAgOTYtOTYgMHpNMzkyIDM5MmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0xNTIgMzUyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2h1dHRsZVZhbiA9IGZhVmFuU2h1dHRsZTsKICAgIGZhU3RhaXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjg5IiwgIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2eiJdCiAgICB9OwogICAgZmFIb3JzZUhlYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9yc2UtaGVhZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2FiIiwgIk0wIDQ2NEwwIDMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVjMjEuNC03LjYgNDMuOCA4LjMgNDMuOCAzMC45IDAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41LTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFsLTMuNCAwYy0yNi4xIDAtNTAuOS0xMS42LTY3LjYtMzEuN2wtMzIuMy0zOC43Yy0xMS43IDQuMS0yNC4yIDYuNC0zNy4zIDYuNGwtLjEgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNS0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjItNC40LTcuNy0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjQgMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHpNMzI4IDIyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVZhdWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZhdWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyYzUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwyNTYgMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yNTYgMjU2YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNjQgMjU2YTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6bTM4NC00OGMwIDE3LjgtOS43IDMzLjMtMjQgNDEuNmwwIDc4LjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03OC40Yy0xNC4zLTguMy0yNC0yMy44LTI0LTQxLjYgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHoiXQogICAgfTsKICAgIGZhQ2xvc2VkQ2FwdGlvbmluZ1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3NlZC1jYXB0aW9uaW5nLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxMzUiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwxMjkuOCA2NCA0ODAgNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAyNS41LTE0LjkgNDcuNC0zNi40IDU3LjhMNTY5IDUwMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5LjFDLTIuMy0uMy0yLjMtMTUuNSA3LTI0Ljl6bTM0NSAzMTFsMC03MC4yYzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDIyLjIgNDggNDh6bTYxLjUgNjEuNWMyMC4yLTguNCAzNC41LTI4LjQgMzQuNS01MS43IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMjIuMiAwIDQzLjcgNDMuN3pNMTMwLjMgMjAwLjFjLTEuNSA1LTIuMyAxMC40LTIuMyAxNS45bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMxOC4xIDAgMzQuMS04LjUgNDQuNC0yMS44TDM3OC4yIDQ0OCA5NiA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjU2YzAtNy44IDEuNC0xNS4zIDQtMjIuMmw5NC4zIDk0LjN6bTkzLjggOTMuOGMtLjEgLjctLjEgMS40LS4xIDIuMSAwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTUwLjIgNDguMSA0OC4xeiJdCiAgICB9OwogICAgZmFEcnVtU3RlZWxwYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bS1zdGVlbHBhbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTZhIiwgIk0yODggMzJjMTU5LjEgMCAyODggNDggMjg4IDEyOGwwIDE5MmMwIDgwLTEyOC45IDEyOC0yODggMTI4UzAgNDMyIDAgMzUyTDAgMTYwQzAgODAgMTI4LjkgMzIgMjg4IDMyek01MjggMTYwYzAtOS45LTgtMjkuOS01NS00OS44LTE4LjYtNy45LTQwLjktMTQuNC02Ni0xOS40bC0yNy44IDQzLjZjLTcuMyAxMS41LTExLjIgMjQuOC0xMS4yIDM4LjQgMCAxNy41IDYuNCAzNC40IDE4LjEgNDcuNWw5LjggMTFjMjkuOC01LjIgNTUuOS0xMi41IDc3LjItMjEuNSA0Ny4xLTE5LjkgNTUtMzkuOSA1NS00OS44ek0zNDkuMiAyMzcuM2MtOC0yNi4yLTMyLjQtNDUuMy02MS4yLTQ1LjNzLTUzLjMgMTkuMS02MS4yIDQ1LjNjMTkuNCAxLjcgMzkuOSAyLjcgNjEuMiAyLjdzNDEuOC0uOSA2MS4yLTIuN3pNMTY5IDkwLjhjLTI1LjIgNS00Ny40IDExLjYtNjYgMTkuNC00Ny4xIDE5LjktNTUgMzkuOS01NSA0OS44czggMjkuOSA1NSA0OS44YzIxLjMgOSA0Ny40IDE2LjMgNzcuMiAyMS41bDkuOC0xMWMxMS42LTEzLjEgMTguMS0zMCAxOC4xLTQ3LjUgMC0xMy42LTMuOS0yNi45LTExLjItMzguNEwxNjkgOTAuOHptNTYuMy04Yy0uOSA0LjMtMS40IDguNy0xLjQgMTMuMiAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtNC41LS41LTktMS40LTEzLjItMTkuOC0xLjgtNDAuOC0yLjgtNjIuNi0yLjhzLTQyLjggMS02Mi42IDIuOHoiXQogICAgfTsKICAgIGZhVGh1bWJzVXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRodW1icy11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3NywgNjE1NzVdLCAiZjE2NCIsICJNODAgMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0OCAwek0yNzAuNiAxNkMyOTcuOSAxNiAzMjAgMzguMSAzMjAgNjUuNGwwIDQuMmMwIDYuOC0xLjMgMTMuNi0zLjggMTkuOUwyODggMTYwIDQ0OCAxNjBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxOS43LTExLjkgMzYuNi0yOC45IDQ0IDE3IDcuNCAyOC45IDI0LjMgMjguOSA0NCAwIDIzLjQtMTYuOCA0Mi45LTM5IDQ3LjEgNC40IDcuMyA3IDE1LjggNyAyNC45IDAgMjIuMi0xNSA0MC44LTM1LjQgNDYuMyAyLjIgNS41IDMuNCAxMS41IDMuNCAxNy43IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC04Ny45IDBjLTM2LjMgMC03MS42LTEyLjQtOTkuOS0zNS4xTDE4NCA0MzUuMmMtMTUuMi0xMi4xLTI0LTMwLjUtMjQtNTBsMC0xODYuNmMwLTE0LjkgMy41LTI5LjYgMTAuMS00Mi45TDIyNi4zIDQzLjNDMjM0LjcgMjYuNiAyNTEuOCAxNiAyNzAuNiAxNnoiXQogICAgfTsKICAgIGZhU3RhbXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhbXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjViZiIsICJNMzEyIDIwMS44YzAtMTcuNCA5LjItMzMuMiAxOS45LTQ3IDEyLjYtMTYuMiAyMC4xLTM2LjYgMjAuMS01OC44IDAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMjIuMSA3LjUgNDIuNSAyMC4xIDU4LjggMTAuNyAxMy44IDE5LjkgMjkuNiAxOS45IDQ3IDAgMjkuOS0yNC4zIDU0LjItNTQuMiA1NC4yTDExMiAyNTZjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtNjEuOS01MC4xLTExMi0xMTItMTEybC0zMy44IDBjLTI5LjkgMC01NC4yLTI0LjMtNTQuMi01NC4yek01NiA0NjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNTYgNDY0eiJdCiAgICB9OwogICAgZmFNZW5vcmFoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1lbm9yYWgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjY3NiIsICJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xTDY0IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0bDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwyMC44IDcuNHptOTYgMEMxMTguOCAyLjkgMTIzLjEgMCAxMjggMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJTOTYgODEuNyA5NiA2NGwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMTE2LjggNy40em03Ny44IDQyLjRMMjEyLjggNy40QzIxNC44IDIuOSAyMTkuMSAwIDIyNCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMwOC44IDcuNEMzMTAuOCAyLjkgMzE1LjEgMCAzMjAgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDMwOC44IDcuNHptNzcuOCA0Mi40TDQwNC44IDcuNEM0MDYuOCAyLjkgNDExLjEgMCA0MTYgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek01MDAuOCA3LjRDNTAyLjggMi45IDUwNy4xIDAgNTEyIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUw1MDAuOCA3LjR6bTc3LjggNDIuNEw1OTYuOCA3LjRDNTk4LjggMi45IDYwMy4xIDAgNjA4IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNMzIgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwIDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNjAgMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMCAwIDY0IDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMCAwLTY0LTE5MiAwYy01MyAwLTk2LTQzLTk2LTk2TDAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDaGlsZHJlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZHJlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGUxIiwgIk0xNjAuNSAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0tNzIgNDgwbDAtODAtMTcuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw4Ni43IDI4NS41IDU4IDMyMy4zYy0xMC43IDE0LjEtMzAuOCAxNi44LTQ0LjggNi4yUy0zLjcgMjk4LjcgNyAyODQuN0w2NS45IDIwN2MyMi40LTI5LjYgNTcuNS00NyA5NC42LTQ3czcyLjIgMTcuNCA5NC42IDQ3TDMxNCAyODQuN2MxMC43IDE0LjEgNy45IDM0LjItNi4yIDQ0LjhzLTM0LjIgNy45LTQ0LjgtNi4ybC0yOC43LTM3LjggMzEuMSA5My40YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMWwtMTcuOCAwIDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MC0xNiAwIDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6TTQ4MC41IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bS04IDM4NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTc5LjUtMTIuOSAyMC41Yy05LjQgMTUtMjkuMiAxOS40LTQ0LjEgMTBzLTE5LjQtMjkuMi0xMC00NC4xbDUxLjctODIuMWMxNy42LTI3LjkgNDguMy00NC45IDgxLjItNDQuOWwxMi4zIDBjMzMgMCA2My43IDE2LjkgODEuMiA0NC45TDYxOS42IDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMGwtMTIuOS0yMC41IDAgMTc5LjVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0xNiAweiJdCiAgICB9OwogICAgZmFDaGFydExpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtbGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaW5lLWNoYXJ0Il0sICJmMjAxIiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNkw2NCA2NHptNDA2LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzMjAgMjEwLjcgMjYyLjYgMTUzLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw3My40LTczLjQgNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxpbmVDaGFydCA9IGZhQ2hhcnRMaW5lOwogICAgZmFTcXVhcmVFbnZlbG9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZW52ZWxvcGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZW52ZWxvcGUtc3F1YXJlIl0sICJmMTk5IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDkuMSAyNjcuOUwxMDguNCAyMDcuNGMtNy43LTQuNi0xMi40LTEyLjktMTIuNC0yMS45IDAtMTQuMSAxMS40LTI1LjUgMjUuNS0yNS41bDIwNC45IDBjMTQuMSAwIDI1LjUgMTEuNCAyNS41IDI1LjUgMCA5LTQuNyAxNy4zLTEyLjQgMjEuOUwyMzguOSAyNjcuOWMtNC41IDIuNy05LjYgNC4xLTE0LjkgNC4xcy0xMC40LTEuNC0xNC45LTQuMXpNMzUyIDIzNy4zbDAgODIuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODIuNyA5Ni43IDU4QzIwMi4xIDMwMSAyMTMgMzA0IDIyNCAzMDRzMjEuOS0zIDMxLjMtOC43bDk2LjctNTh6Il0KICAgIH07CiAgICBmYUVudmVsb3BlU3F1YXJlID0gZmFTcXVhcmVFbnZlbG9wZTsKICAgIGZhQmFuU21va2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW4tc21va2luZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4NSwgInNtb2tpbmctYmFuIl0sICJmNTRkIiwgIk05OS41IDE0NC44bDc5LjIgNzkuMi01MC43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTQ2LjcgMCA5Mi41IDkyLjVjLTMxLjQgMjIuNC02OS44IDM1LjUtMTExLjIgMzUuNS0xMDYgMC0xOTItODYtMTkyLTE5MiAwLTQxLjUgMTMuMS03OS45IDM1LjUtMTExLjJ6TTMzMy4zIDI4OGwtMzItMzIgODIuNyAwIDAgMzItNTAuNyAwem0zMiAzMmwxOC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwyNjkuMyAyMjQgMTQ0LjggOTkuNWMzMS40LTIyLjQgNjkuOC0zNS41IDExMS4yLTM1LjUgMTA2IDAgMTkyIDg2IDE5MiAxOTIgMCA0MS41LTEzLjEgNzkuOS0zNS41IDExMS4yTDM2NS4zIDMyMHpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI3MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnMtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFTbW9raW5nQmFuID0gZmFCYW5TbW9raW5nOwogICAgZmFUcnVja0Zyb250ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZyb250IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyYjciLCAiTTAgMTEyQzAgNjcuOCAzNS44IDMyIDgwIDMybDI4OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMjU2YzAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0xOTIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4QzEyLjYgNDE3LjQgMCAzOTQuMiAwIDM2OEwwIDExMnptOTYgODBsMCA2NCAyNTYgMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTMyIDE2MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yMjQgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFCdWlsZGluZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc5NzAsIDYxNjg3XSwgImYxYWQiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE3NiAzNTJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTk2IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNOTYgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI0MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJ1bGxzZXllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1bGxzZXllIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxNDAiLCAiTTQ0OCAyNTZhMTkyIDE5MiAwIDEgMCAtMzg0IDAgMTkyIDE5MiAwIDEgMCAzODQgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2IDgwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wLTIyNGExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6TTIyNCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQXJyb3dMZWZ0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1sZWZ0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1sZWZ0Il0sICJmMTc3IiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDEyOCAxMjhjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyODggNTQ0IDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDM0LjcgMCA3My40LTczLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0xlZnQgPSBmYUFycm93TGVmdExvbmc7CiAgICBmYUNoZXNzUm9vazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mtcm9vayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjBdLCAiZjQ0NyIsICJNMCAzMkwwIDEzMy41YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zTDY0IDIyNCA2NCAzODQgNy44IDQ1NC4zQzIuNyA0NjAuNiAwIDQ2OC40IDAgNDc2LjUgMCA0OTYuMSAxNS45IDUxMiAzNS41IDUxMmwzMTIuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC01Ni4yLTcwLjMgMC0xNjAgNDUuMy00NS4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMMzg0IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTQ4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi00OCAwIDAtMzJDOTYgMTQuMyA4MS43IDAgNjQgMEwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMnoiXQogICAgfTsKICAgIGZhQmxlbmRlclBob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJsZW5kZXItcGhvbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjZiNiIsICJNMTUxLjQgMTMuMmMxMC4yIDUuOCAxNC41IDE4LjQgMTAgMjkuM0wxMzguMiA5OC44Yy0zLjkgOS42LTEzLjcgMTUuNC0yNCAxNC40bC0yMC4yLTJDNzguNyAxNTIuOSA3OCAxOTguOSA5MS45IDI0MS4xbDIyLjQtMi4yYzEwLjMtMSAyMCA0LjggMjQgMTQuNGwyMy4yIDU2LjNjNC41IDEwLjkgLjIgMjMuNC0xMCAyOS4zbC0yLjkgMS42Yy0zMy42IDE5LjItODEuNyAxNi4yLTEwNi4yLTIxLjYtNTYuMy04Ni42LTU2LjMtMTk5LjEgMC0yODUuNyAyNC42LTM3LjcgNzIuNy00MC43IDEwNi4yLTIxLjZsMi45IDEuNnpNMjI0IDMzNkwxOTMuNyAxNy41QzE5Mi44IDguMSAyMDAuMiAwIDIwOS42IDBsMzI0IDBjMjEuMyAwIDM2LjYgMjAuMyAzMC44IDQwLjhMNTUzLjEgODAgNDQwIDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk5LjQgMC0xOC4zIDY0LTgxLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny40IDAtMjcuNCA5Ni0yNTYgMHptOCA0OGwyNDAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwbC0yNDAgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHptMTIwIDg4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhQXJyb3dUdXJuVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdHVybi11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJsZXZlbC11cCJdLCAiZjE0OCIsICJNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMwNi43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjMgMTYwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMHoiXQogICAgfTsKICAgIGZhTGV2ZWxVcCA9IGZhQXJyb3dUdXJuVXA7CiAgICBmYUJpY3ljbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmljeWNsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY5MF0sICJmMjA2IiwgIk0zMzEuNyA0My4zQzMzNiAzNi4zIDM0My43IDMyIDM1MiAzMmwxMDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjUuNiAwIDcyLjIgMTQ4LjRjMTAuNy0yLjkgMjEuOS00LjQgMzMuNC00LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhzLTU3LjMgMTI4LTEyOCAxMjgtMTI4LTU3LjMtMTI4LTEyOGMwLTQyIDIwLjItNzkuMiA1MS40LTEwMi42bC0yMC40LTQxLjktNzMuNSAxNDdjLTIuMyA0LjgtNi4zIDguOC0xMS40IDExLjItLjYgLjMtMS4yIC41LTEuOCAuNy0yLjkgMS4xLTUuOSAxLjYtOC45IDEuNUwyNzEgMzY4Yy03LjkgNjMuMS02MS43IDExMi0xMjcgMTEyLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4UzczLjMgMjI0IDE0NCAyMjRjMTAuOCAwIDIxLjIgMS4zIDMxLjIgMy44bDI4LjUtNTYuOS0xMS41LTI2LjktNDAuMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDU2IDBjOS42IDAgMTguMyA1LjcgMjIuMSAxNC41bDE0LjMgMzMuNSAxMjMuNyAwLTM3LjctNzcuNWMtMy42LTcuNC0zLjItMTYuMiAxLjItMjMuMnpNMjI4LjUgMjI4LjdsLTQ1LjYgOTEuMyA4NC44IDAtMzkuMS05MS4zek0zMDUuNyAyODdsNDcuNS05NS04OC4yIDAgNDAuNyA5NXptMTY4LjcgNzUuNWwtMjkuNy02MWMtMTIuOCAxMy0yMC43IDMwLjgtMjAuNyA1MC41IDAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03MmMtMi43IDAtNS41IC4yLTguMSAuNWwyOS43IDYxYzUuOCAxMS45IC44IDI2LjMtMTEuMSAzMi4xcy0yNi4zIC44LTMyLjEtMTEuMXpNMTQ5LjIgMzY4Yy0yMC4yIDAtMzMuNC0yMS4zLTI0LjMtMzkuNGwyNC4yLTQ4LjVjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzJjMzQuMyAwIDYyLjktMjMuOSA3MC4yLTU2bC02NSAweiJdCiAgICB9OwogICAgZmFDaXJjbGVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLWRvd24iXSwgImYwYWIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzkgMzc3bC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM5IDM5IDAtMTUwLjFjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1MC4xIDM5LTM5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODAgODBjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAweiJdCiAgICB9OwogICAgZmFBcnJvd0NpcmNsZURvd24gPSBmYUNpcmNsZUFycm93RG93bjsKICAgIGZhR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg4MSwgImNvZyJdLCAiZjAxMyIsICJNMTk1LjEgOS41QzE5OC4xLTUuMyAyMTEuMi0xNiAyMjYuNC0xNmw1OS44IDBjMTUuMiAwIDI4LjMgMTAuNyAzMS4zIDI1LjVMMzMyIDc5LjVjMTQuMSA2IDI3LjMgMTMuNyAzOS4zIDIyLjhsNjcuOC0yMi41YzE0LjQtNC44IDMwLjIgMS4yIDM3LjggMTQuNGwyOS45IDUxLjhjNy42IDEzLjIgNC45IDI5LjgtNi41IDM5LjlMNDQ3IDIzMy4zYy45IDcuNCAxLjMgMTUgMS4zIDIyLjdzLS41IDE1LjMtMS4zIDIyLjdsNTMuNCA0Ny41YzExLjQgMTAuMSAxNCAyNi44IDYuNSAzOS45bC0yOS45IDUxLjhjLTcuNiAxMy4xLTIzLjQgMTkuMi0zNy44IDE0LjRsLTY3LjgtMjIuNWMtMTIuMSA5LjEtMjUuMyAxNi43LTM5LjMgMjIuOGwtMTQuNCA2OS45Yy0zLjEgMTQuOS0xNi4yIDI1LjUtMzEuMyAyNS41bC01OS44IDBjLTE1LjIgMC0yOC4zLTEwLjctMzEuMy0yNS41bC0xNC40LTY5LjljLTE0LjEtNi0yNy4yLTEzLjctMzkuMy0yMi44TDczLjUgNDMyLjNjLTE0LjQgNC44LTMwLjItMS4yLTM3LjgtMTQuNEw1LjggMzY2LjFjLTcuNi0xMy4yLTQuOS0yOS44IDYuNS0zOS45bDUzLjQtNDcuNWMtLjktNy40LTEuMy0xNS0xLjMtMjIuN3MuNS0xNS4zIDEuMy0yMi43TDEyLjMgMTg1LjhjLTExLjQtMTAuMS0xNC0yNi44LTYuNS0zOS45TDM1LjcgOTQuMWM3LjYtMTMuMiAyMy40LTE5LjIgMzcuOC0xNC40bDY3LjggMjIuNWMxMi4xLTkuMSAyNS4zLTE2LjcgMzkuMy0yMi44TDE5NS4xIDkuNXpNMjU2LjMgMzM2YTgwIDgwIDAgMSAwIC0uNi0xNjAgODAgODAgMCAxIDAgLjYgMTYweiJdCiAgICB9OwogICAgZmFDb2cgPSBmYUdlYXI7CiAgICBmYU1hcnNBbmRWZW51c0J1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtYW5kLXZlbnVzLWJ1cnN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjMiLCAiTTQ2NC0zMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzNC43IDAtNjMgNjNjLTI4LjQtMTkuNS02Mi43LTMxLTk5LjgtMzEtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0IDE3My4xbDAgMzQuOS0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTM0LjljODEuOS0xNSAxNDQtODYuOCAxNDQtMTczLjEgMC0zNy0xMS40LTcxLjQtMzEtOTkuOGw2My02MyAwIDM0LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNjggOTZhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek0xOTAuOS0yMS45QzE4OC40LTI4IDE4Mi42LTMyIDE3Ni0zMnMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NC03Ni4yLTIzLjFjLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM1MzMy44IDQ2LjUgMzcgNTIuMmwzOS41IDY5LjEtNjUuNiA0NS4xYy01LjQgMy43LTggMTAuMy02LjUgMTYuN3M2LjcgMTEuMiAxMy4xIDEyLjJsNzguNyAxMi4yLTUuNiA3OS40Yy0uNSA2LjUgMy4xIDEyLjcgOSAxNS41czEyLjkgMS44IDE3LjgtMi42TDE1Mi4xIDI2OGMtNS4zLTE5LjEtOC4xLTM5LjItOC4xLTYwIDAtNjUuNCAyOC0xMjQuMiA3Mi42LTE2NS4xTDE5MC45LTIxLjl6Il0KICAgIH07CiAgICBmYU90dGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm90dGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDQ2XSwgImY3MDAiLCAiTTE4MS41IDE5Ny4xbDEyLjkgNi40YzUuOSAzIDEyLjQgNC41IDE5LjEgNC41IDIzLjUgMCA0Mi42LTE5LjEgNDIuNi00Mi42bDAtMjEuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMS40YzAgMjMuNSAxOS4xIDQyLjYgNDIuNiA0Mi42IDYuNiAwIDEzLjEtMS41IDE5LjEtNC41IDkuMy00LjcgMTYuNC04LjIgMjEuMi0xMC42TDEzNS4xIDE4NWMtNC41LTMtNy4xLTgtNy4xLTEzLjNsMC0zLjdjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDMuN2MwIDUuMy0yLjcgMTAuMy03LjEgMTMuM2wtMTEuOCA3LjkgOC40IDQuMnptLTguNiA0OS40bC0xMi45LTYuNC0xMi45IDYuNGMtMTIuNiA2LjMtMjYuNSA5LjYtNDAuNSA5LjYtMy42IDAtNy4xLS4yLTEwLjYtLjZsMCAuNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDE2MCAwIDAtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40IDkuNC01LjQgMjAuMy04LjYgMzItOC42bDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDggOC44IDAgMTYgNy4yIDE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk5LjdjMC00OC4yLTMwLjgtOTEtNzYuNi0xMDYuM2wtOC41LTIuOGMtOC0yLjctMTIuNi0xMS4xLTEwLjQtMTkuM3MxMC4zLTEzLjIgMTguNi0xMS42bDE5LjkgNEM1NzYgODYuMSA2NDAgMTY0LjIgNjQwIDI1NC45bDAgMS4xIDAgMGMwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0bC0xNjAuNiAwQzEzMiA0ODAgMzIgMzgwIDMyIDI1Ni42bDAtMzkuOGMtMTAuMS0xNC42LTE2LTMyLjMtMTYtNTEuNGwwLTIxLjQgMC0xLjRDNi43IDEzOS4zIDAgMTMwLjUgMCAxMjAgMCAxMDYuNyAxMC43IDk2IDI0IDk2bDIuOCAwQzQ0LjggNTguMiA4My4zIDMyIDEyOCAzMmw2NCAwYzQ0LjcgMCA4My4yIDI2LjIgMTAxLjIgNjRsMi44IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAxMC41LTYuNyAxOS4zLTE2IDIyLjZsMCAxLjQgMCAyMS40YzAgMS40IDAgMi44LS4xIDQuMyAxMi02LjIgMjUuNy05LjYgNDAuMS05LjZsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOCA1Ni40IDBjLTE1LjIgMTctMjQuNCAzOS40LTI0LjQgNjRsLTMyIDBjLTQyLjMgMC03OC4yLTI3LjQtOTEtNjUuMy01LjEgLjktMTAuMyAxLjMtMTUuNiAxLjMtMTQuMSAwLTI3LjktMy4zLTQwLjUtOS42ek05NiAxMjhhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyem0xMTIgMTZhMTYgMTYgMCAxIDEgMzIgMCAxNiAxNiAwIDEgMSAtMzIgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hldnJvbkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS1sZWZ0Il0sICJmMTM3IiwgIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTI3MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04NyA4NyA4NyA4N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE2NyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDI3MSAxMzV6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVMZWZ0ID0gZmFDaXJjbGVDaGV2cm9uTGVmdDsKICAgIGZhQ2lyY2xlUXVlc3Rpb24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTA4LCAicXVlc3Rpb24tY2lyY2xlIl0sICJmMDU5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zMzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCA0Ny4yLTM2IDY3LjItNTYgNzQuNWwwIDMuOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTguMWMwLTIwLjUgMTQuOC0zNS4yIDMwLjEtNDAuMiA2LjQtMi4xIDEzLjItNS41IDE4LjItMTAuMyA0LjMtNC4yIDcuNy0xMCA3LjctMTkuNiAwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjI0IDM2OGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFRdWVzdGlvbkNpcmNsZTIgPSBmYUNpcmNsZVF1ZXN0aW9uMjsKICAgIGZhV2Fsa2llVGFsa2llID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbGtpZS10YWxraWUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjhlZiIsICJNODgtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjAuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMjAuMiA0MC40Yy0zLjMgNi43LTUuMSAxNC01LjEgMjEuNWwwIDg0LjdjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTg0LjdjMC03LjUtMS43LTE0LjgtNS4xLTIxLjVMNi44IDMwMS41QzIuMyAyOTIuNiAwIDI4Mi44IDAgMjcyLjlMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMTYgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0em0zMiAxNzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhVXNlckdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItZ3JvdXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxMDEsICJ1c2VyLWZyaWVuZHMiXSwgImY1MDAiLCAiTTY0IDEyOGExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0wIDQ2NGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NnMxNzYgNzguOCAxNzYgMTc2bDAgNmMwIDIzLjItMTguOCA0Mi00MiA0Mkw0MiA1MTJjLTIzLjIgMC00Mi0xOC44LTQyLTQybDAtNnpNNDMyIDY0YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0wIDI0MGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGwwIDIyLjRjMCAyMy0xOC42IDQxLjYtNDEuNiA0MS42bC0xNDQuOCAwYzYuNi0xMi41IDEwLjQtMjYuOCAxMC40LTQybDAtNmMwLTUxLjUtMTcuNC05OC45LTQ2LjUtMTM2LjcgMjIuNi0xNC43IDQ5LjYtMjMuMyA3OC41LTIzLjN6Il0KICAgIH07CiAgICBmYVVzZXJGcmllbmRzID0gZmFVc2VyR3JvdXA7CiAgICBmYUhvdXNlQ2hpbW5leSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjM0OTksICJob21lLWxnIl0sICJlM2FmIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjQwIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiAxMjggMCAwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAweiJdCiAgICB9OwogICAgZmFIb21lTGcgPSBmYUhvdXNlQ2hpbW5leTsKICAgIGZhUmlnaHRGcm9tQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC1mcm9tLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1vdXQtYWx0Il0sICJmMmY1IiwgIk01MDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDM2MSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMjAgMTAyLjMgMzIwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDUwNSAyNzN6TTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHoiXQogICAgfTsKICAgIGZhU2lnbk91dEFsdCA9IGZhUmlnaHRGcm9tQnJhY2tldDsKICAgIGZhRmlsZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE5NiwgMTI4NDU5LCA2MTQ2Ml0sICJmMTViIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2eiJdCiAgICB9OwogICAgZmFQbGFuZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNjkiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE4My40LTE4My40IDcuMS03LjcgMTI3LjMgMGMzMC45IDAgNTYtMjUuMSA1Ni01NnMtMjUuMS01Ni01Ni01NkwzOTIuNyAyMDAgMjMzLjUgMjYuNEMyMjcuNSAxOS44IDIxOC45IDE2IDIwOS45IDE2bC00My43IDBjLTEwLjkgMC0xOC42IDEwLjctMTUuMiAyMS4xTDE3NS4xIDEwOS4yIDQxLTI0Ljl6TTEzMC4yIDIwMGwtMjQuNiAwLTUyLjgtNjZjLTMtMy44LTcuNi02LTEyLjUtNmwtMTkuOCAwYy0xMC40IDAtMTggOS44LTE1LjUgMTkuOUwzMiAyNTYgNSAzNjQuMUMyLjQgMzc0LjIgMTAuMSAzODQgMjAuNSAzODRsMTkuOCAwYzQuOSAwIDkuNS0yLjIgMTIuNS02bDUyLjgtNjYgOTkuNyAwLTU0LjMgMTYyLjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMWw0My43IDBjOSAwIDE3LjUtMy44IDIzLjYtMTAuNEwzMjAuNyAzOTAuNSAxMzAuMiAyMDB6Il0KICAgIH07CiAgICBmYUNsb3VkU2hvd2Vyc0hlYXZ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLXNob3dlcnMtaGVhdnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc0MCIsICJNOTYgMzIwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bTYuOCA3OS42bC0zMiA5NkM2Ni42IDUwOC4yIDUzIDUxNSA0MC40IDUxMC44UzIxIDQ5MyAyNS4yIDQ4MC40bDMyLTk2QzYxLjQgMzcxLjggNzUgMzY1IDg3LjYgMzY5LjJTMTA3IDM4NyAxMDIuOCAzOTkuNnptMTIwIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzE0MSA0OTMgMTQ1LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlMyMjcgMzg3IDIyMi44IDM5OS42em0xMTIgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMjUzIDQ5MyAyNTcuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzMzOSAzODcgMzM0LjggMzk5LjZ6bTEyMCAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMzNzMgNDkzIDM3Ny4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTNDU5IDM4NyA0NTQuOCAzOTkuNnoiXQogICAgfTsKICAgIGZhUGVyc29uRmFsbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZmFsbGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTQ2IiwgIk0zMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1LjRjMCA0NS0yMy42IDg2LjYtNjIuMSAxMDkuOGwtNC42IDIuOEMxMzEuNCAxODQuNyA5NiAyNDcuMSA5NiAzMTQuNkw5NiAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY5LjRjMC0xNi43IDMuMy0zMyA5LjQtNDhMMzU5LjIgNTAwLjJjMTEuMSAxMy43IDMxLjMgMTUuOCA0NSA0LjdzMTUuOC0zMS4zIDQuNy00NUwyOTUuMiAzMjAgNDAwIDMyMCA0MzguNCAzNzEuMmMxMC42IDE0LjEgMzAuNyAxNyA0NC44IDYuNHMxNy0zMC43IDYuNC00NC44bC00My4yLTU3LjZDNDM3LjMgMjYzLjEgNDIzLjEgMjU2IDQwOCAyNTZsLTg5IDAtNjIuOS03NS41YzQwLjMtMzYgNjMuOS04Ny45IDYzLjktMTQzLjFsMC01LjR6TTEwNCAxNDRhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYVR1cm5Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR1cm4tZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNTQ5LCAibGV2ZWwtZG93bi1hbHQiXSwgImYzYmUiLCAiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzIwIDMyMCAzMjBsLTY0IDAgMC0xNjBDMjU2IDcxLjYgMTg0LjQgMCA5NiAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MC02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWwxMjggMTI4eiJdCiAgICB9OwogICAgZmFMZXZlbERvd25BbHQgPSBmYVR1cm5Eb3duOwogICAgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLXJpZ2h0LWFuZC1kb3duLWxlZnQtZnJvbS1jZW50ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXhwYW5kLWFsdCJdLCAiZjQyNCIsICJNMzQ0IDBMNDg4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNDRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODctMzktMzljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTMzM0LjMgMCAzNDQgMHpNMTY4IDUxMkwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDAgMzQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMlMzNC4xIDMyMC4yIDQxIDMyN2wzOSAzOSA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMiAzMmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODcgODcgMzkgMzljNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMlMxNzcuNyA1MTIgMTY4IDUxMnoiXQogICAgfTsKICAgIGZhRXhwYW5kQWx0ID0gZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyOwogICAgZmFVc2VyVGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItdGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1MDciLCAiTTI1Ni4xIDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNCAzMDRsNTkuNCAwYzYuNyAwIDEzLjIgLjQgMTkuNyAxLjEtLjkgNC45LTEuNCA5LjktMS40IDE1bDAgOTIuMWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOWwzMS45IDMxLjktMjg2LjMgMGMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjN6TTM1Mi4xIDQxMi4ybDAtOTIuMWMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5Mi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw5NiA5NmMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNzYuMSA3Ni4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMGwtOTYtOTZjLTktOS0xNC4xLTIxLjItMTQuMS0zMy45em0xMDQtNDQuMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFIYW5kU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zcGFya2xlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDVkIiwgIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIwOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTExMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjJjLTE5LjIgNS40LTM0LjcgMjAuNC00MC40IDQwLjNsLTYuNSAyMi43LTIyLjcgNi41Yy0yNS4yIDcuMi00Mi41IDMwLjItNDIuNSA1Ni40IDAgMjIuMSAxMi40IDQyIDMxLjQgNTEuOS0yNy41IDE3LjgtNjAuMiAyOC4xLTk1LjQgMjguMWwtMTkuMiAwYy01OS42IDAtMTE2LjktMjIuOS0xNjAtNjRMNzYuNCAzNDFjLTE2LTE1LjItMTYuNi00MC42LTEuNC01Ni42czQwLjYtMTYuNiA1Ni42LTEuNGw2MC41IDU3LjZjMC0xLjUtLjEtMy4xLS4xLTQuNmwwLTI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZsLTcuMyAyNS40LTI1LjQgNy4zYy0zLjkgMS4xLTYuNiA0LjctNi42IDguN3MyLjcgNy42IDYuNiA4LjdsMjUuNCA3LjMgNy4zIDI1LjRjMS4xIDMuOSA0LjcgNi42IDguNyA2LjZzNy42LTIuNyA4LjctNi42bDcuMy0yNS40IDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdsLTI1LjQtNy4zLTcuMy0yNS40ek0xMDQgMTIwbDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMMTA0IDE2OCA5MC4yIDIxNi4zYy0xLjMgNC42LTUuNSA3LjctMTAuMiA3LjdzLTguOS0zLjEtMTAuMi03LjdMNTYgMTY4IDcuNyAxNTQuMkMzLjEgMTUyLjkgMCAxNDguNyAwIDE0NHMzLjEtOC45IDcuNy0xMC4yTDU2IDEyMCA2OS44IDcxLjdDNzEuMSA2Ny4xIDc1LjMgNjQgODAgNjRzOC45IDMuMSAxMC4yIDcuN0wxMDQgMTIwek01ODQgNDA4bDQ4LjMgMTMuOGM0LjYgMS4zIDcuNyA1LjUgNy43IDEwLjJzLTMuMSA4LjktNy43IDEwLjJMNTg0IDQ1NiA1NzAuMiA1MDQuM2MtMS4zIDQuNi01LjUgNy43LTEwLjIgNy43cy04LjktMy4xLTEwLjItNy43TDUzNiA0NTYgNDg3LjcgNDQyLjJjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDggNTQ5LjggMzU5LjdjMS4zLTQuNiA1LjUtNy43IDEwLjItNy43czguOSAzLjEgMTAuMiA3LjdMNTg0IDQwOHoiXQogICAgfTsKICAgIGZhQXJyb3dzVG9Eb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJlIiwgIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlTMTc5LjEgNjQgMTkyIDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTY5LjQgMzkzLjRsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzMyLjkgNDQ4IDMyMCA0NDhsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45ek0zMiAyMjRsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVM2NCAzMzIuOSA2NCAzMjBsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0yOTcuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w2NC02NGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVM0NDggMTc5LjEgNDQ4IDE5MmwwIDMyIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtNjQtNjR6TTI1NiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGYWNlU2FkQ3J5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC1jcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTcsICJzYWQtY3J5Il0sICJmNWIzIiwgIk0zNTIgNDkzLjRjLTI5LjYgMTItNjIuMSAxOC42LTk2IDE4LjZzLTY2LjQtNi42LTk2LTE4LjZMMTYwIDI5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3MS43QzQ0LjQgNDIxLjYgMCAzNDQgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgODgtNDQuNCAxNjUuNi0xMTIgMjExLjdMNDAwIDI5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE5Ny40ek0xNTIgMTk2bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTcyIDIwYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwek0yMDggMzM2bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFTYWRDcnkyID0gZmFGYWNlU2FkQ3J5MjsKICAgIGZhRG9uZ1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9uZy1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxNjkiLCAiTTI4OC0xNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDcyLjJjLTIyLjktMTUuMy01MC40LTI0LjItODAtMjQuMi03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NFM5Ni41IDQzMiAxNzYgNDMyYzMwIDAgNTcuOC05LjEgODAuOC0yNC44IDMuMyAxNC4yIDE2IDI0LjggMzEuMiAyNC44IDE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzA0IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNOTYgMjg4YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMjQgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQ2NHoiXQogICAgfTsKICAgIGZhUGVvcGxlTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM0IiwgIk0yODggMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptOTYgMzEyYzAgMjUtMTIuNyA0Ny0zMiA1OS45bDAgNDQuMS0xMjggMCAwLTQ0LjFDMjA0LjcgMzU5IDE5MiAzMzcgMTkyIDMxMmwwLTQwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA0MHptMTYgMTA0bDAtMjcuM2MxOS45LTIyLjUgMzItNTIuMiAzMi04NC43bDAtMzJjMC0yNi43LTcuMy01MS42LTE5LjktNzMuMSAxMS4xLTQuNSAyMy4yLTYuOSAzNS45LTYuOSA1MyAwIDk2IDQzIDk2IDk2bDAgMzJjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgNDAuNi0xMTIgMHpNNjQgMzc1LjRDNDQuOSAzNjQuNCAzMiAzNDMuNyAzMiAzMjBsMC0zMmMwLTUzIDQzLTk2IDk2LTk2IDEyLjcgMCAyNC44IDIuNSAzNS45IDYuOS0xMi42IDIxLjQtMTkuOSA0Ni40LTE5LjkgNzMuMWwwIDMyYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDI3LjMtMTEyIDAgMC00MC42ek0xMjggMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTMyMCAwYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0yNCA0NjRsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTcXVhcmVSc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXJzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJyc3Mtc3F1YXJlIl0sICJmMTQzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05NiAxMzZjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTM3IDAgMjQ4IDExMSAyNDggMjQ4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTEwLjUtODkuNS0yMDAtMjAwLTIwMC0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNCA4My45IDAgMTUyIDY4LjEgMTUyIDE1MiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTU3LjQtNDYuNi0xMDQtMTA0LTEwNC0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMCAxMjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhUnNzU3F1YXJlID0gZmFTcXVhcmVSc3M7CiAgICBmYUNhbGVuZGFyTWludXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzIiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMjQgMjY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhQ2hhcnREaWFncmFtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWRpYWdyYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTY5NSIsICJNODAgMzJDNTMuNSAzMiAzMiA1My41IDMyIDgwczIxLjUgNDggNDggNDhsMTUyIDAgMCA0MC00OCA0OC03MiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDY0LTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDcyIDAgNDggNDggMCA0MC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC00MCA0OC00OCA3MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNjQtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNjRjMC0zOS44LTMyLjItNzItNzItNzJsLTcyIDAtNDgtNDggMC00MCAxNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw4MCAzMnoiXQogICAgfTsKICAgIGZhRmFjZVRpcmVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXRpcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU1LCAidGlyZWQiXSwgImY1YzgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjQuNyAzMjguN2MyMi0yMiA1My45LTQwLjcgOTEuMy00MC43czY5LjMgMTguNyA5MS4zIDQwLjdjMTEuMSAxMS4xIDIwLjEgMjMuNCAyNi40IDM1LjQgNi4yIDExLjcgMTAuMyAyNC40IDEwLjMgMzUuOSAwIDUuMi0yLjYgMTAuMi02LjkgMTMuMnMtOS44IDMuNy0xNC43IDEuOGwtMjAuNS03LjdjLTI2LjktMTAuMS01NS41LTE1LjMtODQuMy0xNS4zbC0zLjIgMGMtMjguOCAwLTU3LjMgNS4yLTg0LjMgMTUuM0wxNDkuNiA0MTVjLTQuOSAxLjgtMTAuNCAxLjItMTQuNy0xLjhTMTI4IDQwNS4yIDEyOCA0MDBjMC0xMS42IDQuMi0yNC4yIDEwLjMtMzUuOSA2LjMtMTIgMTUuMy0yNC4zIDI2LjQtMzUuNHpNMTIyLjYgMTU5LjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhVGlyZWQyID0gZmFGYWNlVGlyZWQyOwogICAgZmFIYW5kUG9pbnRSaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE0IiwgIk00ODAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIwOCAwIDAtNjQgMjA4IDB6TTMyMCAyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMHptNjQtNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMjg4IDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem0tODgtOTZsLjYgMGMtNS40IDkuNC04LjYgMjAuMy04LjYgMzIgMCAxMy4yIDQgMjUuNCAxMC44IDM1LjYtMjQuOSA4LjctNDIuOCAzMi41LTQyLjggNjAuNCAwIDExLjcgMy4xIDIyLjYgOC42IDMybC04LjYgMEM3MS42IDQ0OCAwIDM3Ni40IDAgMjg4bDAtNjEuN2MwLTQyLjQgMTYuOS04My4xIDQ2LjktMTEzLjFsMTEuNi0xMS42QzgyLjUgNzcuNSAxMTUuMSA2NCAxNDkgNjRsMjcgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDg4YzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwbDAtNTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA1NmMwIDM5LjggMzIuMiA3MiA3MiA3MnoiXQogICAgfTsKICAgIGZhQXJyb3dVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzg1OTNdLCAiZjA2MiIsICJNMjE0LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTA5LjMgMTYwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcwLjcgMTA1LjQgMTA1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHoiXQogICAgfTsKICAgIGZhQ3ViZXNTdGFja2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImN1YmVzLXN0YWNrZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRlNiIsICJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHptMzIgMzUybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMjAgMTkybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTE4Mi42LTMuOWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0NS4zIDQ1LjNjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTQ1LjMgNDUuM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMOTIuMSAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNDUuMy00NS4zek0zMiAzODRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDaGlsZENvbWJhdGFudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1jb21iYXRhbnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiY2hpbGQtcmlmbGUiXSwgImU0ZTAiLCAiTTE3Ni41IDEyOGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTE2IDM1MmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyLjIgMjAuOSAzMy4yYzkuNCAxNSAyOS4yIDE5LjQgNDQuMSAxMHMxOS40LTI5LjIgMTAtNDQuMWwtMzkuOS02My4zQzI2Ni44IDE4NCAyMjMuMyAxNjAgMTc2LjUgMTYwUzg2LjIgMTg0IDYxLjMgMjIzLjZMMjEuNCAyODdjLTkuNCAxNS00LjkgMzQuNyAxMCA0NC4xczM0LjcgNC45IDQ0LjEtMTBsMjAuOS0zMy4yIDAgMTkyLjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDQ4LjUgMGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43bDAtMTE2LjNjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFDaGlsZFJpZmxlID0gZmFDaGlsZENvbWJhdGFudDsKICAgIGZhVmVzdFBhdGNoZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVzdC1wYXRjaGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODYiLCAiTTIwMCAyOTMuOUwyMDAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzAuNWMwLTkuNSAyLjgtMTguNyA4LjEtMjYuNmw0Ny45LTcxLjhjNS4zLTcuOSA4LjEtMTcuMSA4LjEtMjYuNkw2NCA0OEM2NCAyMS41IDg1LjUgMCAxMTIgMGwzLjUgMGMuMyAwIC42IDAgMSAwIC42IDAgMS4yIDAgMS44IDAgMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOCA5LjMgOC40IDI4LjUgMjEuMiA2MS43IDIxLjJzNTIuNC0xMi44IDYxLjctMjEuMmMxMC05LjEgMjUuMy0xOC44IDQ0LjEtMTguOCAuNiAwIDEuMiAwIDEuOCAwIC4zIDAgLjYgMCAxIDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5Ny41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42TDQ0OCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEwNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3MC4xYzAtMy45IC41LTcuOCAxLjQtMTEuNkwzMDMuNiA2NS40QzI4NS45IDc3LjIgMjU5LjggODggMjI0IDg4cy02MS45LTEwLjgtNzkuNi0yMi42bDU0LjIgMjE2LjhjMSAzLjggMS40IDcuNyAxLjQgMTEuNnpNOTYgNDU2YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNNjMuNSAyNTUuNWMtNC43IDQuNy00LjcgMTIuMyAwIDE3TDc5IDI4OCA2My41IDMwMy41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdzMTIuMyA0LjcgMTcgMEw5NiAzMDUgMTExLjUgMzIwLjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OCAxMjguNSAyNzIuNWM0LjctNC43IDQuNy0xMi4zIDAtMTdzLTEyLjMtNC43LTE3IDBMOTYgMjcxIDgwLjUgMjU1LjVjLTQuNy00LjctMTIuMy00LjctMTcgMHpNMzA0IDI4MGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFNYXJ0aW5pR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdsYXNzLW1hcnRpbmkiXSwgImYwMDAiLCAiTTMyIDMyQzE5LjEgMzIgNy40IDM5LjggMi40IDUxLjhTLjIgNzcuNSA5LjQgODYuNmwyMTQuNiAyMTQuNiAwIDE0Ni43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0xNDYuNyAyMTQuNi0yMTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzMiA0ODAgMzJMMzIgMzJ6TTI1NiAyNDIuN0wxMDkuMyA5NiA0MDIuNyA5NiAyNTYgMjQyLjd6Il0KICAgIH07CiAgICBmYUdsYXNzTWFydGluaSA9IGZhTWFydGluaUdsYXNzRW1wdHk7CiAgICBmYU1hZ25ldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk1MjJdLCAiZjA3NiIsICJNMCAxNzZMMCAyODhDMCA0MTEuNyAxMDAuMyA1MTIgMjI0IDUxMlM0NDggNDExLjcgNDQ4IDI4OGwwLTExMi0xMjggMCAwIDExMmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExMi0xMjggMHptMC00OGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRsMCA2NHptMzIwIDBsMTI4IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NHoiXQogICAgfTsKICAgIGZhUm9hZEJhcnJpZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1iYXJyaWVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAyNjYuMyAxNDkuMiA5NiA2NCA5NiA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDA1LjIgOTZsLTc0LjMgMC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zek0zNjIuOCAyODhsNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjN6TTIwMi44IDk2bC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zLTc0LjMgMHptMjg4IDE5Mmw4NS4yIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjctODUuMiAxNzAuM3oiXQogICAgfTsKICAgIGZhQ29tcGFzc0RyYWZ0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXBhc3MtZHJhZnRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZHJhZnRpbmctY29tcGFzcyJdLCAiZjU2OCIsICJNOTkuMyAyNTYuMWw2OS40LTExOS45Yy01LjYtMTIuMi04LjgtMjUuOC04LjgtNDAuMiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMmw0NC40IDc2LjdjLTIzLjEgMjYtNTMuNyA0NS4xLTg4LjQgNTMuOEwyNTYgMTkxLjkgMTg3LjkgMzA5LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNSA3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NCAxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNTIuNyA2NS44LTEzMy45IDEwOC0yMjQuOCAxMDgtMzUuNCAwLTY5LjQtNi40LTEwMC43LTE4LjFMOTguNyA0NjMuN0M5NCA0NzEuOCA4NyA0NzguNCA3OC42IDQ4Mi42TDIzLjIgNTEwLjNjLTUgMi41LTEwLjkgMi4yLTE1LjYtLjdTMCA1MDEuNSAwIDQ5NmwwLTU1LjRjMC04LjQgMi4yLTE2LjcgNi41LTI0LjFsNjAtMTAzLjdjLTEyLjgtMTEuMi0yNC42LTIzLjUtMzUuMy0zNi44LTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVjNS43IDcuMSAxMS44IDEzLjggMTguMiAyMC4xek0zODEuMSA0MDcuOWMzMi41LTEzIDYyLjQtMzEgODguOS01Mi45bDM1LjYgNjEuNWM0LjIgNy4zIDYuNSAxNS42IDYuNSAyNC4xbDAgNTUuNGMwIDUuNS0yLjkgMTAuNy03LjYgMTMuNnMtMTAuNiAzLjItMTUuNiAuN2wtNTUuNC0yNy43Yy04LjQtNC4yLTE1LjQtMTAuOC0yMC4xLTE4LjlsLTMyLjMtNTUuOHpNMjU2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURyYWZ0aW5nQ29tcGFzcyA9IGZhQ29tcGFzc0RyYWZ0aW5nOwogICAgZmFTcXVhcmVQZXJzb25Db25maW5lZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVyc29uLWNvbmZpbmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1NzciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTk2IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem04MCAxMDRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEwMi4xYzAgMzYuNC0yOS41IDY1LjktNjUuOSA2NS45LTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNsLTU0LjctNTQuNy0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOWw0MS40IDQxLjQgMC01OC43eiJdCiAgICB9OwogICAgZmFQbGF0ZVdoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYXRlLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NWEiLCAiTTE3NiAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNDIuNyA2NCA1NiA2NHpNMjQgMTM2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MGwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDE3NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMGw0NTYuNCAwYzE0LjggMCAyNi4yIDEyLjkgMjQuNCAyNy42LTYuMyA1MC4yLTQ0LjQgODkuNC05Mi42IDk4LjRsMCAyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yYy00OC4yLTktODYuMy00OC4yLTkyLjUtOTguNHoiXQogICAgfTsKICAgIGZhU2lnbkhhbmdpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2lnbi1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24iXSwgImY0ZDkiLCAiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzUyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTItMzIgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGwzMiAwIDAtMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHpNMjA4IDE3NmwyNDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjQwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaWduID0gZmFTaWduSGFuZ2luZzsKICAgIGZhQ2FyQmF0dGVyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItYmF0dGVyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYXR0ZXJ5LWNhciJdLCAiZjVkZiIsICJNODAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDE2IDB6TTM5MiAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTMyek02NCAyNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMjE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQmF0dGVyeUNhciA9IGZhQ2FyQmF0dGVyeTsKICAgIGZhU2hpcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwODUsICJ0LXNoaXJ0IiwgInRzaGlydCJdLCAiZjU1MyIsICJNMzIwLjIgMTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDUzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MTcuNiAxNjkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTAuNyA1MC43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40IDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwyMi45IDIxNC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wxNDEuNSA1MC43YzEyLTEyIDI4LjMtMTguNyA0NS4zLTE4LjdsNTMuNSAwYzAgNDQuMiAzNS44IDgwIDgwIDgweiJdCiAgICB9OwogICAgZmFUU2hpcnQgPSBmYVNoaXJ0OwogICAgZmFUc2hpcnQgPSBmYVNoaXJ0OwogICAgZmFQYXJhZ3JhcGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFyYWdyYXBoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTgyXSwgImYxZGQiLCAiTTE2MCAwTDQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDE2LTQ4IDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjAtNDggMEM3MS42IDMyMCAwIDI0OC40IDAgMTYwUzcxLjYgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVzQnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZXMtYnVsayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWlsLWJ1bGsiXSwgImY2NzQiLCAiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgMTYwIDgwIDAgMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDIwOCAwIDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTI0MCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzIgODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTEyIDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yODggMHptMjAwIDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEwLjQgMTU2LjYgODYuMmMxLjEgLjYgMi4yIC45IDMuNCAuOXMyLjQtLjMgMy40LS45TDMyMCAzMTQuNCAzMjAgMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnpNMzIwIDM2OS4yTDE4Ni42IDQ0Mi42Yy04LjEgNC41LTE3LjMgNi44LTI2LjYgNi44cy0xOC40LTIuNC0yNi42LTYuOEwwIDM2OS4yIDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTQuOHoiXQogICAgfTsKICAgIGZhTWFpbEJ1bGsgPSBmYUVudmVsb3Blc0J1bGs7CiAgICBmYUd1aXRhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndWl0YXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhNiIsICJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjYtMTEgMTEtMTggMjQuNi0yMS40IDM5LjYtMy43IDE2LjYtMTkuMSAzMC43LTM2LjEgMzEuNi0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42LTQ0LjggNDQuOC0zNi40IDEyNS44IDE4LjcgMTgwLjlTMTgzLjYgNTI4IDIyOC40IDQ4My4yYzE3LjktMTcuOSAyNy40LTQxLjcgMjguNi02Ny4zIC45LTE3IDE1LTMyLjMgMzEuNi0zNi4xIDE1LTMuNCAyOC42LTEwLjUgMzkuNi0yMS40IDMxLjgtMzEuOCAzMS04NS45IDEuNi0xMzFsNzcuNi03Ny42IDQxLTE1LjRjMy4yLTEuMiA2LjEtMy4xIDguNS01LjVsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDY1IDd6TTIwOCAyNTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUyM10sICJmMGYyIiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDI0IDIyNCAwIDAtNDI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNDE2IDk2bDAgMzg0IDMyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDB6TTk2IDQ4MGwwLTM4NC0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjcsICJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sICJmMzViIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTEuMy0zODcuM2wxMDQgMTA0YzQuNiA0LjYgNS45IDExLjUgMy41IDE3LjRTMzY2LjUgMjU2IDM2MCAyNTZsLTU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05Ni01NiAwYy02LjUgMC0xMi4zLTMuOS0xNC44LTkuOXMtMS4xLTEyLjkgMy41LTE3LjRsMTA0LTEwNGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVVcDIgPSBmYUNpcmNsZVVwMjsKICAgIGZhRiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTAyXSwgIjQ2IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFYbWFya3NMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFya3MtbGluZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU5YSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhRWFydGhPY2VhbmlhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLW9jZWFuaWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xvYmUtb2NlYW5pYSJdLCAiZTQ3YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNTAuNmMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0MS40IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTZ6TTQzMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQxMS4zIDM3OS4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTIyNCA0MzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptLTk2LTgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE4LjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDgtNDhjNC4yLTQuMiAxMC02LjYgMTYtNi42bDYuNiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2IDcuMi0xNiAxNi0xNmw2LjYgMGM2IDAgMTEuOCAyLjQgMTYgNi42bDQ4IDQ4YzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDUwLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTUwLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40TDEyOCAzNTJ6Il0KICAgIH07CiAgICBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhOwogICAgZmFDb21tZW50U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGIzIiwgIk00MS0yNUMzMS42LTM0LjMgMTYuNC0zNC4zIDctMjVTLTIuMy0uNCA3IDlMNTM1IDUzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjYtOTYuNmM0NC40LTQzLjIgNzEuNi0xMDEuOCA3MS42LTE2Ni41IDAtMTMyLjUtMTE0LjYtMjQwLTI1Ni0yNDAtNjMgMC0xMjAuOCAyMS40LTE2NS40IDU2LjhMNDEtMjV6bTE5LjQgMTU1QzQyLjIgMTYzIDMyIDIwMC4zIDMyIDIzOS45IDMyIDI5NC4yIDUxLjIgMzQ0LjIgODMuNiAzODQuNEwzNC44IDQ3Ni43Yy00LjggOS0zLjMgMjAgMy42IDI3LjVTNTYuMSA1MTQgNjUuNSA1MTBsMTE4LjQtNTAuN2MzMS44IDEzLjMgNjcuMSAyMC43IDEwNC4xIDIwLjcgMzYuNCAwIDcwLjktNy4xIDEwMi4zLTE5LjlMNjAuMyAxMzAuMXoiXQogICAgfTsKICAgIGZhUGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTY1NF0sICJmMDRiIiwgIk05MS4yIDM2LjljLTEyLjQtNi44LTI3LjQtNi41LTM5LjYgLjdTMzIgNTcuOSAzMiA3MmwwIDM2OGMwIDE0LjEgNy41IDI3LjIgMTkuNiAzNC40czI3LjIgNy41IDM5LjYgLjdsMzM2LTE4NGMxMi44LTcgMjAuOC0yMC41IDIwLjgtMzUuMXMtOC0yOC4xLTIwLjgtMzUuMWwtMzM2LTE4NHoiXQogICAgfTsKICAgIGZhVmlhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1OTYiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjEuNGMtNjYuMSAzMC4zLTExMiA5Ny4xLTExMiAxNzQuNiAwIDM5LjcgMTIgNzYuNiAzMi43IDEwNy4yLTEwLjMgMy4xLTIxLjMgNC44LTMyLjcgNC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwem05NiAzMzZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjOSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFDZWRpU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZWRpLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTBkZiIsICJNMjMyIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjYuNUM4OC44IDczLjkgMTYgMTU2LjQgMTYgMjU2Uzg4LjggNDM4LjEgMTg0IDQ1My41bDAgMjYuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQuNmM0Ni44LTMuNyA4OS4xLTIzLjYgMTIxLjMtNTMuOSAxMi45LTEyLjEgMTMuNC0zMi40IDEuMy00NS4ycy0zMi40LTEzLjQtNDUuMi0xLjNjLTIwLjcgMTkuNi00Ny42IDMyLjctNzcuMyAzNi4ybDAtMjcwLjFjMjkuOCAzLjUgNTYuNiAxNi42IDc3LjMgMzYuMiAxMi45IDEyLjEgMzMuMSAxMS41IDQ1LjItMS4zczExLjUtMzMuMS0xLjMtNDUuMkMzMjEuMSA4MC4yIDI3OC44IDYwLjMgMjMyIDU2LjZMMjMyIDMyem0tNDggOTEuOGwwIDI2NC40QzEyNC4zIDM3My44IDgwIDMyMC4xIDgwIDI1NnM0NC4zLTExNy44IDEwNC0xMzIuMnoiXQogICAgfTsKICAgIGZhUHV6emxlUGllY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHV6emxlLXBpZWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEzXSwgImYxMmUiLCAiTTIyNCAwYzM1LjMgMCA2NCAyMS41IDY0IDQ4IDAgMTAuNC00LjQgMjAtMTIgMjcuOS02LjYgNi45LTEyIDE1LjMtMTIgMjQuOSAwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjJsNDQuOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDQuOGMwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjIgOS41IDAgMTgtNS40IDI0LjktMTIgNy45LTcuNSAxNy41LTEyIDI3LjktMTIgMjYuNSAwIDQ4IDI4LjcgNDggNjRzLTIxLjUgNjQtNDggNjRjLTEwLjQgMC0yMC4xLTQuNC0yNy45LTEyLTYuOS02LjYtMTUuMy0xMi0yNC45LTEyLTE1IDAtMjcuMiAxMi4yLTI3LjIgMjcuMkwzODQgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC01Ni44IDBjLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yIDAtOS4yIDUuOC0xNy4zIDEzLjItMjIuOCAxMS42LTguNyAxOC44LTIwLjcgMTguOC0zNCAwLTI2LjUtMjguNy00OC02NC00OHMtNjQgMjEuNS02NCA0OGMwIDEzLjMgNy4yIDI1LjMgMTguOCAzNCA3LjQgNS41IDEzLjIgMTMuNSAxMy4yIDIyLjggMCAxMi44LTEwLjQgMjMuMi0yMy4yIDIzLjJMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM0My4yYzAtMTIuOCAxMC40LTIzLjIgMjMuMi0yMy4yIDkuMiAwIDE3LjMgNS44IDIyLjggMTMuMiA4LjcgMTEuNiAyMC43IDE4LjggMzQgMTguOCAyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjgtNS41IDcuNC0xMy41IDEzLjItMjIuOCAxMy4yLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yTDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEwOC44IDBjMTUgMCAyNy4yLTEyLjIgMjcuMi0yNy4yIDAtOS41LTUuNC0xOC0xMi0yNC45LTcuNS03LjktMTItMTcuNS0xMi0yNy45IDAtMjYuNSAyOC43LTQ4IDY0LTQ4eiJdCiAgICB9OwogICAgZmFIZWxtZXRVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWxtZXQtdW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUwMyIsICJNNDc5LjUgMjI0QzQ3MS4yIDk4LjkgMzY3LjIgMCAyNDAgMCAxMDcuNSAwIDAgMTA3LjUgMCAyNDBsMCA1Ni4zQzAgMzQ0LjggMzkuMiAzODQgODcuNyAzODRsMTI3LjMgMCAxMjguNiAxMjEuNGM0LjUgNC4yIDEwLjQgNi42IDE2LjUgNi42bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg2LjUgMC0xLjUtMS41IDAtMTc0LjUgMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLS41IDB6TTMyMCA0MTcuMmwtNzgtNzMuNyAzMi40LTU1LjUgNDUuNiAwIDAgMTI5LjJ6TTI4NS4zIDEwMy4xbDM0LjcgNTIgMC00My4yYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyIDAgNDMuMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTYwIDExMmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFHbGFzc1dhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsYXNzLXdhdGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjQiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTczIDE1Ni41bC02LjYtOTIuNSAyNTEuMyAwLTYuNiA5Mi41LTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwLTIwLjktMTAuNC00NS41LTEwLjQtNjYuNCAwLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMEw3MyAxNTYuNXoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmMiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzM2OS4yIDQxNiAzNzYgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzQ5NC44IDM4NCA0ODggMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXQogICAgfTsKICAgIGZhUHVtcFNvYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHVtcC1zb2FwIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwNmIiLCAiTTk2IDBsMCA4MCAxMjggMCAwLTI0IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgOCAyOTYgOGwtNzIgMCAwLThjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBDMTEwLjMtMzIgOTYtMTcuNyA5NiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHpNMjI0IDM0NGMwIDM1LjMtMjguNyA1Ni02NCA1NnMtNjQtMjAuNy02NC01NmMwLTMyLjUgMzctODAuOSA1MC45LTk3LjkgMy4yLTMuOSA4LjEtNi4xIDEzLjEtNi4xczkuOSAyLjIgMTMuMSA2LjFDMTg3IDI2My4xIDIyNCAzMTEuNSAyMjQgMzQ0eiJdCiAgICB9OwogICAgZmFIYW5kU2Npc3NvcnMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1NyIsICJNNDAgMjA4Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE4MC4yIDBjLTcuNiA4LjUtMTIuMiAxOS43LTEyLjIgMzIgMCAyNS4zIDE5LjUgNDYgNDQuMyA0Ny45LTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMSAwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMTEzLjFjMC00MC4yLTE2LTc4LjgtNDQuNC0xMDcuMy0yMi44LTIyLjgtNTMuNi0zNS42LTg1LjgtMzUuNkwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRsLTY3LjEtMjEuNCAwIC4xLTIwNC02NC4xQzYyLjkgNTkuMiA0MC41IDcwLjkgMzMuOSA5MnM1LjEgNDMuNSAyNi4yIDUwLjJMMjY5LjUgMjA4IDQwIDIwOHoiXQogICAgfTsKICAgIGZhRG9sbHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9sbHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9sbHktYm94Il0sICJmNDcyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDcyLjkgMCA5Mi4xIDI3Ni4yYy0yMi41IDE3LjYtMzcgNDUtMzcgNzUuOCAwIDUzIDQzIDk2IDk2IDk2IDUyLjQgMCA5NS4xLTQyIDk2LTk0LjNsMjAyLjEtNjcuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4yTDMzMS44IDM1N2MtMTcuMi0yMi4xLTQzLjktMzYuNS03NC0zN0wxNjUuNyA0My44QzE1Ni45IDE3LjYgMTMyLjUgMCAxMDQuOSAwTDMyIDB6TTIwOCA0MTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjgwLjUgODkuM2MtMjUuMiA4LjItMzkgMzUuMy0zMC44IDYwLjVsMzkuNiAxMjEuN2M4LjIgMjUuMiAzNS4zIDM5IDYwLjUgMzAuOGwxMjEuNy0zOS42YzI1LjItOC4yIDM5LTM1LjMgMzAuOC02MC41TDQ2Mi44IDgwLjVjLTguMi0yNS4yLTM1LjMtMzktNjAuNS0zMC44TDI4MC41IDg5LjN6Il0KICAgIH07CiAgICBmYURvbGx5Qm94ID0gZmFEb2xseTsKICAgIGZhUGFwZXJjbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyY2xpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIwNl0sICJmMGM2IiwgIk0yMjQuNiAxMi44YzU2LjItNTYuMiAxNDcuNC01Ni4yIDIwMy42IDBzNTYuMiAxNDcuNCAwIDIwMy42bC0xNjQgMTY0Yy0zNC40IDM0LjQtOTAuMSAzNC40LTEyNC41IDBzLTM0LjQtOTAuMSAwLTEyNC41TDI5Mi41IDEwMy4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTg1IDMwMS4zYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTY0LTE2NGMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0xNjQgMTY0Yy01My4xIDUzLjEtNTMuMSAxMzkuMiAwIDE5Mi4zczEzOS4yIDUzLjEgMTkyLjMgMEw0MjguMyAyODQuM2MxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDM0My40IDQ1OS42Yy03OC4xIDc4LjEtMjA0LjcgNzguMS0yODIuOCAwcy03OC4xLTIwNC43IDAtMjgyLjhsMTY0LTE2NHoiXQogICAgfTsKICAgIGZhRGVtb2NyYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVtb2NyYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc0NyIsICJNNjQgMzJjMC04LjkgMy44LTIwLjkgNi4yLTI3LjMgMS0yLjggMy44LTQuNyA2LjgtNC43IDEuOSAwIDMuOCAuNyA1LjIgMi4xTDEyOCA0NS43IDE3My44IDIuMWMxLjQtMS4zIDMuMi0yLjEgNS4yLTIuMSAzIDAgNS44IDEuOCA2LjggNC43IDIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjMgMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOGwyMTkuMiAwIDMyIDBjNDAuMyAwIDc4LjIgMTkgMTAyLjQgNTEuMmwxOS4yIDI1LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNGwtMTkuMi0yNS42Yy01LjMtNy0xMS44LTEyLjgtMTkuMi0xN2wwIDg3LjQtMzUyIDAtNDAuNC05NC4zYy0zLjktOS4yLTE1LjMtMTIuNi0yMy42LTdsLTQyLjEgMjhjLTkuMSA2LjEtMTkuNyA5LjMtMzAuNyA5LjNsLTIgMEMyMy45IDI1NiAwIDIzMi4xIDAgMjAyLjcgMCAxOTAuNiA0LjEgMTc4LjkgMTEuNyAxNjkuNEw4Ny42IDc0LjZDNzguMSA2Ny40IDY0IDUzLjIgNjQgMzJ6TTU0NCAzNTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjQtMTYwIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjggMzUyIDB6TTI1NiAyODBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNDgtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMzY4IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVNxdWFyZUFycm93VXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtYXJyb3ctdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZXh0ZXJuYWwtbGluay1zcXVhcmUiXSwgImYxNGMiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTI3MiAyOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTQuMSAwLTEwMyAxMDNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMDMtMTAzIDAgNTQuMXoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlID0gZmFTcXVhcmVBcnJvd1VwUmlnaHQ7CiAgICBmYUZlcnJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZlcnJ5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZWEiLCAiTTIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjgtLjEgMGMuMSAuNyAuMSAxLjMgLjEgMiAwIDMwLjItNy42IDU5LjgtMjIgODYuM2wtMTIuNyAyMy4zLS42IDFjLTIyLjMtMTEuMy00Ni41LTE2LjgtNzAuOC0xNi43LTMyLjUgLjItNjQuOSAxMC43LTkyLjQgMzEuNC0yMi4xIDE2LjYtMjkuMSAxNi42LTUxLjIgMC0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0yMy42IC4yLTQ3LjEgNS43LTY4LjcgMTYuN2wtLjYtMS0xMi43LTIzLjNjLTE0LjQtMjYuNS0yMi01Ni4yLTIyLTg2LjMgMC0uNyAwLTEuNCAuMS0ybC0uMSAwIDAtMTI4YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQ4IDAgMC0zMnpNMTYwIDI1NmwzMjAgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZsLTI4OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJ6TTQwMy40IDQ3Ni4xQzM3OS4xIDQ5NC4zIDM1MS4xIDUxMiAzMjAgNTEycy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhTW9zcXVpdG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9zcXVpdG8iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyYiIsICJNMTc4LjUgNDk1LjJjLTcuNSA5LjYtMjEgMTIuMS0zMS4zIDUuM1MxMzMuNSA0ODAgMTM4LjkgNDY5bDEuMi0yLjIgMzYuMi01OCAwLTQxIC4zLTRjLjYtMy45IDIuMi03LjcgNC42LTEwLjlsMzkuMy01Mi4yLTY2LjIgNTkuNWMtMTcgMTUuMy0zOSAyMy43LTYxLjkgMjMuOGwtOC4xIDBjLTQ2LjYgMC04NC40LTM3LjgtODQuNC04NC40IDAtNDMgMzIuNC03OS4yIDc1LjEtODMuOWwxMzAuNS0xNC41LTQ0LjgtMzguMy0yLjQtMi40Yy01LjMtNi03LjMtMTQuNC01LjMtMjIuM2wxMy4zLTUzLjQtMjUuOS0zOC45LTEuMy0yLjFjLTUuOC0xMC44LTIuNy0yNC42IDcuNC0zMS43IDEwLjEtNy4xIDIzLjctNS4xIDMxLjQgNC4zbDEuNSAyIDMyIDQ4IDEuNCAyLjJjMi44IDUuMyAzLjUgMTEuNiAyLjEgMTcuNmwtMTIuMyA0OS4yIDUzLjMgNDUuNyAwLTI4LjhjMC0xMS44IDYuNS0yMi4xIDE2LTI3LjdsMC02MC41IC4zLTMuM2MxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjdzMTQuMiA1LjUgMTUuNyAxMi43bC4zIDMuMiAwIDYwLjVjOS42IDUuNSAxNiAxNS44IDE2IDI3LjdsMCAyOC45IDUzLjQtNDUuOC0xMi4zLTQ5LjJjLTEuNS01LjktLjctMTIuMiAyLjEtMTcuNmwxLjQtMi4yIDMyLTQ4IDEuNS0yYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCA0Ni42LTM3LjggODQuNC04NC40IDg0LjRsLTguMSAwYy0yMi44IDAtNDQuOS04LjUtNjEuOS0yMy44bC02Ni4xLTU5LjUgMzkuMiA1Mi4yYzIuNCAzLjIgNCA3IDQuNiAxMC45bC4zIDQgMCA0MSAzNi4yIDU4IDEuMiAyLjFjNS40IDExIDIgMjQuNy04LjMgMzEuNXMtMjMuOCA0LjQtMzEuMy01LjNsLTEuNC0yLTQwLTY0LTEuNi0zLjFjLTEuNC0zLjEtMi4xLTYuNi0yLjEtMTAuMWwwLTM5LjgtMzIuNC00My4xIDAgNzQuN2MwIDE3LjctMTQuMyAzMi0zMiAzMi0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc0LjYtMzIuMyA0MyAwIDM5LjhjMCAzLjUtLjcgNi45LTIuMSAxMC4xbC0xLjYgMy4xLTQwIDY0LTEuNCAyeiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNDQuN2MtMzUuNyAyLjktNjguNSAxNS42LTk2IDM1LjRsMC00YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQgMGMtMTMuOCAxOS4yLTI0LjEgNDEtMzAuMSA2NC41LTEuOS0uNC0zLjktLjUtNS45LS41bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDgwIDc0LjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDAuNy02Ny4zYy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwyOC43IDI4LjctODkuNCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDg5LjQgMC0yOC43IDI4LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni01NmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNTYtNTZjLTYuMi02LjItMTYuNC02LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFMZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTYsICJhcnJvd3MtYWx0LWgiXSwgImYzMzciLCAiTTUwMi42IDQwNi42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDQ5Mi45IDM1MiA0ODBsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6TTkuNCAxNTAuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDE5LjEgMTYwIDMybDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRIID0gZmFMZWZ0UmlnaHQ7CiAgICBmYVZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzQiLCAiTTI5NiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBzLTE1LjYgNDAuOSAwIDU2LjZjMzEuMiAzMS4yIDkuMSA4NC41LTM1IDg0LjUtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtNDQuMSA1My4zLTY2LjEgODQuNS0zNSAxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMHMxNS42LTQwLjkgMC01Ni42Yy0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwQzM0OS4zIDEwNi4xIDI5NiA4NC4xIDI5NiA0MHpNMTYwIDIyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjAgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHZW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0Ml0sICJmM2E1IiwgIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNUwyMTAuNSAxNzkuOCA2My4zIDE5MmMtNC4xIC4zLTcuMyAzLjgtNy4zIDhzMy4yIDcuNiA3LjMgOGwxOTIgMTZjLjQgMCAuOSAwIDEuMyAwbDE5Mi0xNmM0LjEtLjMgNy4zLTMuOCA3LjMtOHMtMy4yLTcuNi03LjMtOGwtMTQ3LjItMTIuMyA1Ny40LTk1LjZjMi4xLTMuNSAxLjItOC4xLTIuMS0xMC41cy03LjktMi0xMC43IDFMMjU2IDE3Mi4yIDE2NS45IDc0LjZjLTIuOC0zLTcuNC0zLjQtMTAuNy0xeiJdCiAgICB9OwogICAgZmFUb2lsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NzAxXSwgImY3ZDgiLCAiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTQ4LjljLTEuOSAxLjQtMy44IDIuOS01LjYgNC40LTE1LjUgMTMuMi0yNi40IDMxLjYtMjYuNCA1NC42IDAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjUgMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM4NS43IDUxMiA5NiA1MTJsMjU2IDBjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOCAyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNSAwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNi0xLjgtMS41LTMuNy0zLTUuNi00LjRsMC0xNDguOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTNDM3LjMgMCA0MjQgMEwyNCAwek05NiA4MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMjQgMjg4Yy04OC40IDAtMTYwLTE0LjMtMTYwLTMyczcxLjYtMzIgMTYwLTMyIDE2MCAxNC4zIDE2MCAzMi03MS42IDMyLTE2MCAzMnoiXQogICAgfTsKICAgIGZhU2luZ2xlUXVvdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmdsZS1xdW90ZS1sZWZ0IiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImU4MWIiLCAiTTEyOCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxscyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMWYzIiwgIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM1MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptMTc2IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0xNjAgMTUybDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTEyYzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNTA0IDE1OS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek01MTIgMjY0bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzkyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNjR6Il0KICAgIH07CiAgICBmYVRhYmxldEJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtYnV0dG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxMGEiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVYbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsICJyZWN0YW5nbGUtdGltZXMiLCAidGltZXMtcmVjdGFuZ2xlIiwgIndpbmRvdy1jbG9zZSJdLCAiZjQxMCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVRpbWVzMiA9IGZhUmVjdGFuZ2xlWG1hcmsyOwogICAgZmFUaW1lc1JlY3RhbmdsZTIgPSBmYVJlY3RhbmdsZVhtYXJrMjsKICAgIGZhV2luZG93Q2xvc2UyID0gZmFSZWN0YW5nbGVYbWFyazI7CiAgICBmYVdyZW5jaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3cmVuY2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyOTVdLCAiZjBhZCIsICJNNTA5LjQgOTguNmM3LjYtNy42IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgODguNC03MS42IDE2MC0xNjAgMTYwLTE3LjUgMC0zNC40LTIuOC01MC4yLThMMTQ2LjkgNDk4LjljLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhMMjMyIDIxMC4yYy01LjItMTUuOC04LTMyLjYtOC01MC4yIDAtODguNCA3MS42LTE2MCAxNjAtMTYwIDIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMWwtODguNyA4OC43Yy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDg4LjctODguN3oiXQogICAgfTsKICAgIGZhVHJhc2hDYW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNDYwLCAidHJhc2gtYWx0Il0sICJmMmVkIiwgIk0xMzYuNyA1LjlDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMXpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTg4IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVRyYXNoQWx0MiA9IGZhVHJhc2hDYW4yOwogICAgZmFUYWJsZUNlbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoIl0sICJmMDBhIiwgIk0zODQgOTZsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHpNMjU2IDI4OGwtNjQgMCAwLTY0IDY0IDAgMCA2NHptLTY0IDY0bDY0IDAgMCA2NC02NCAwIDAtNjR6bS02NC02NGwtNjQgMCAwLTY0IDY0IDAgMCA2NHpNNjQgMzUybDY0IDAgMCA2NC02NCAwIDAtNjR6bTAtMTkybDAtNjQgNjQgMCAwIDY0LTY0IDB6bTEyOCAwbDAtNjQgNjQgMCAwIDY0LTY0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYVRoID0gZmFUYWJsZUNlbGxzOwogICAgZmFSaWJib24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmliYm9uIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk1XSwgImY0ZDYiLCAiTTIzNS4xIDBjMzMuNCAwIDY0LjUgMTcuNCA4MS45IDQ1LjkgMS4yIDIgMTMgMjEuMyAzNS4zIDU3LjggMjEuMSAzNC41IDE4LjMgNzguNS03IDExMEwyNzguMyAyOTcuNyAzNjQuNSA0MDZjNS41IDYuOSA0LjQgMTYuOS0yLjUgMjIuNWwtODAgNjRjLTYuOSA1LjUtMTcgNC40LTIyLjUtMi41TDM4LjYgMjEzLjhDMTMuMyAxODIuMyAxMC41IDEzOC4zIDMxLjYgMTAzLjggNTQgNjcuMiA2NS43IDQ3LjkgNjcgNDUuOSA4NC40IDE3LjQgMTE1LjQgMCAxNDguOSAwbDg2LjMgMHpNMTkyIDE4OS4ybDQ4LjYtNjEuMi05Ny4zIDAgNDguNiA2MS4yek03NSAzMzYuMmw4Ni4yIDEwNy44LTM2LjggNDZjLTUuNSA2LjktMTUuNiA4LTIyLjUgMi41bC04MC02NGMtNi45LTUuNS04LTE1LjYtMi41LTIyLjVMNzUgMzM2LjJ6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyay1mbGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MWMiLCAiTTM1Mi0zMkwyNDAtMzJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE0NC0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgMjI0LTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMjQgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDAgMC02NCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptNDggMjI0bDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHoiXQogICAgfTsKICAgIGZhVXBEb3duTGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MtYWx0Il0sICJmMGIyIiwgIk0yNzguNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTc5LjEgMTI4IDE5MiAxMjhsMzIgMCAwIDk2LTk2IDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzEyOCAzMzIuOSAxMjggMzIwbDAtMzIgOTYgMCAwIDk2LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDM4NCAzMjAgMzg0bC0zMiAwIDAtOTYgOTYgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzODQgMTc5LjEgMzg0IDE5MmwwIDMyLTk2IDAgMC05NiAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHQgPSBmYVVwRG93bkxlZnRSaWdodDsKICAgIGZhQ2FyU2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY2M10sICJmNWU0IiwgIk0xNDcgMTA2LjdsLTI5LjggODUuMyAxMjIuOSAwIDAtOTYtNzcuOSAwYy02LjggMC0xMi45IDQuMy0xNS4xIDEwLjd6TTQ4LjYgMTkzLjlMODYuNSA4NS42Qzk3LjggNTMuNSAxMjguMSAzMiAxNjIuMSAzMkwzNjAgMzJjMjUuMiAwIDQ4LjkgMTEuOSA2NCAzMmw5Ni4yIDEyOC4zQzU4Ny4xIDE5Ni41IDY0MCAyNTIuMSA2NDAgMzIwbDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE2LjQgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLTE0NC43IDBjLTQgNDQuOS00MS43IDgwLTg3LjYgODBzLTgzLjYtMzUuMS04Ny42LTgwbC0uNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTgwYzAtMzAuMSAyMC43LTU1LjMgNDguNi02Mi4xek00NDAgMTkybC02Ny4yLTg5LjZjLTMtNC03LjgtNi40LTEyLjgtNi40bC03MiAwIDAgOTYgMTUyIDB6TTE1MiA0MzJhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0zNjAtNDBhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHoiXQogICAgfTsKICAgIGZhVHJhc2hBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUiXSwgImY4MjkiLCAiTTE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZ6TTMyIDE0NGwzODQgMC0yMS4xIDMyMy4xQzM5My4zIDQ5Mi40IDM3Mi4zIDUxMiAzNDcgNTEyTDEwMSA1MTJjLTI1LjMgMC00Ni4zLTE5LjYtNDcuOS00NC45TDMyIDE0NHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmUgPSBmYVRyYXNoQXJyb3dVcDsKICAgIGZhTGlmZVJpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZmUtcmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWNkIiwgIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM1M0OTEuOCAxNDIuMSA0NTggOTguN2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZTMjAuMiAzNjkuOSA1NCA0MTMuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il0KICAgIH07CiAgICBmYUNvcHlyaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29weXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgImYxZjkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy00Ni45IDQ2LjktMTIyLjggNDYuOS0xNjkuNyAwcy00Ni45LTEyMi44IDAtMTY5LjcgMTIyLjgtNDYuOSAxNjkuNyAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMHMtMjguMSA3My43IDAgMTAxLjh6Il0KICAgIH07CiAgICBmYUZpbGVQcmVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wcmVzY3JpcHRpb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDIyLjUgMCA1OC40IDU1LTMzLjQgMzEuNmMtOS42IDkuMS0xMC4xIDI0LjMtLjkgMzMuOXMyNC4zIDEwLjEgMzMuOSAuOWwzNS40LTMzLjUgMzUuNiAzMy41YzkuNyA5LjEgMjQuOCA4LjYgMzMuOS0xczguNi0yNC44LTEtMzMuOWwtMzMuNi0zMS42IDMzLjYtMzEuOGM5LjYtOS4xIDEwLjEtMjQuMyAuOS0zMy45cy0yNC4zLTEwLjEtMzMuOS0uOWwtMzUuNyAzMy43LTQwLjktMzguNWMxMi45LTExLjcgMjEuMS0yOC42IDIxLjEtNDcuNSAwLTM1LjMtMjguNy02NC02NC02NGwtNTYgMHptMzIgODBsLTggMCAwLTMyIDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYUVyYXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcmFzZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyZCIsICJNMTc4LjUgNDE2bDEyMyAwIDY1LjMtNjUuMy0xNzMuNS0xNzMuNS0xMjYuNyAxMjYuNyAxMTIgMTEyek0yMjQgNDgwbC00NS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDE3IDM0NUM2LjEgMzM0LjEgMCAzMTkuNCAwIDMwNHM2LjEtMzAuMSAxNy00MUwyNjMgMTdDMjczLjkgNi4xIDI4OC42IDAgMzA0IDBzMzAuMSA2LjEgNDEgMTdMNTI3IDE5OWMxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFsLTEzNSAxMzUgMTIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAweiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NTdGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3Mtc3RhcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTEiXSwgImYyNTEiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek0yODggNDM3bDAgMTEtMTkyIDAgMC0xMWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWw2Ny45LTY3LjkgNjcuOSA2Ny45YzE4IDE4IDI4LjEgNDIuNCAyOC4xIDY3Ljl6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczEgPSBmYUhvdXJnbGFzc1N0YXJ0OwogICAgZmFDaXJjbGVMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCAiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sICJmMzU5IiwgIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43bDEwNC0xMDRjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXM5LjkgOC4zIDkuOSAxNC44bDAgNTYgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTZjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41bC0xMDQtMTA0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0MiA9IGZhQ2lyY2xlTGVmdDI7CiAgICBmYUNydXplaXJvU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcnV6ZWlyby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxNTIiLCAiTTI0MCA5NmMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCA3MS42IDQ3LjEgMTMyLjMgMTEyIDE1Mi43TDE5MiAyNTZjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTIuOCAwIDIzLjMgMTAuMSAyNCAyMi43IDE1LjUtOS41IDMzLjUtMTQuNyA1Mi4zLTE0LjdsMTEuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMS44IDBjLTE4LjggMC0zNi4xIDEwLTQ1LjQgMjYuMy00LjUgNy45LTYuOSAxNi44LTYuOSAyNS45bDAgNzUuOGM0Mi41IDAgODEuMS0xNi42IDEwOS44LTQzLjYgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzUzLjcgNDU2LjggMjk5LjUgNDgwIDI0MCA0ODAgMTE2LjMgNDgwIDE2IDM3OS43IDE2IDI1NlMxMTYuMyAzMiAyNDAgMzJjNTkuNSAwIDExMy43IDIzLjIgMTUzLjcgNjEuMSAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNDMzIxLjEgMTEyLjYgMjgyLjUgOTYgMjQwIDk2eiJdCiAgICB9OwogICAgZmFTbW9raW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNtb2tpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2ODRdLCAiZjQ4ZCIsICJNMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWwyMSAyMUM0NjkgMTkxIDQ4MCAyMTcuNCA0ODAgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xOWMwLTE0LjktNS45LTI5LjEtMTYuNC0zOS42bC0yMS0yMUMzNTcuMSAxNDYuOSAzMzYgOTYgMzM2IDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjR6TTU1MiAyODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTIxLTIxQzQ0MyA5NyA0MzIgNzAuNiA0MzIgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTljMCAxNC45IDUuOSAyOS4xIDE2LjQgMzkuNmwyMSAyMUM1NTQuOSAxNDEuMSA1NzYgMTkyIDU3NiAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMzIwIDQ0OGw5NiAwIDAtMzItOTYgMCAwIDMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMnptNTc2LTQwbDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcG9sbC12ZXJ0aWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsIl0sICJmNjgxIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01NiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE4NCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OHpNMjI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDIwOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTIwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUG9sbCA9IGZhU3F1YXJlUG9sbFZlcnRpY2FsOwogICAgZmFQZXJzb25DaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDAiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhQmlvaGF6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpb2hhemFyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3NjNdLCAiZjc4MCIsICJNMjYwIDEyLjZjMC04LjMtNy42LTE0LjUtMTUuNS0xMi4xLTYwLjkgMTguOC0xMDUuMSA3NS44LTEwNS4xIDE0My4xIDAgMjUuMSA2LjEgNDguNyAxNyA2OS41LTIxIDEuOC00MiA4LjItNjEuNSAxOS41LTU3LjkgMzMuNi04NC44IDEwMC4yLTcwLjkgMTYyLjUgMS45IDguNCAxMS40IDEyIDE4LjkgNy42IDUtMi45IDcuNi04LjYgNy4xLTE0LjQtLjMtMy4zLS40LTYuNi0uNC0xMC4xIDAtMTIzLjUgMTg0LjQtMTIzLjUgMTg0LjQgMCAwIDg4LjQtOTQuNSAxMTMuNi0xNDguMiA3NS40LTQuNS0zLjItMTAuNS0zLjktMTUuMy0xLjEtNyA0LjEtOC42IDEzLjYtMi43IDE5LjEgNDYuNiA0My44IDExOCA1My45IDE3Ni4xIDIwLjIgMTcuOS0xMC40IDMyLjgtMjMuOSA0NC41LTM5LjQgMTEuNyAxNS42IDI2LjYgMjkuMSA0NC41IDM5LjQgNTguMSAzMy43IDEyOS41IDIzLjYgMTc2LjEtMjAuMiA1LjktNS41IDQuMy0xNS4xLTIuNy0xOS4xLTQuOC0yLjgtMTAuOC0yLjEtMTUuMyAxLjEtNTMuNyAzOC4yLTE0OC4yIDEzLTE0OC4yLTc1LjQgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgMy40LS4xIDYuOC0uNCAxMC4xLS41IDUuOCAyLjEgMTEuNSA3LjEgMTQuNCA3LjQgNC4zIDE3IC44IDE4LjktNy42IDEzLjktNjIuMi0xMy0xMjguOS03MC45LTE2Mi41LTE5LjUtMTEuMy00MC40LTE3LjctNjEuNS0xOS41IDEwLjktMjAuOCAxNy00NC40IDE3LTY5LjUgMC02Ny4zLTQ0LjItMTI0LjMtMTA1LjEtMTQzLjEtNy45LTIuNC0xNS41IDMuOC0xNS41IDEyLjEgMCA1LjkgNCAxMSA5LjUgMTMuMiA4My40IDMzLjYgNzAuOCAxNzguNC0zNy44IDE3OC40UzE2Ny4xIDU5LjQgMjUwLjUgMjUuOGM1LjUtMi4yIDkuNS03LjMgOS41LTEzLjJ6TTI0OC40IDI4OGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek00MzUgMzE3LjdjLTE2LjIgMC0zMS40IDUuNS00Mi4xIDE1LTEwLjEgOS4xLTE4LjEgMjMuNC0xOC4xIDQ1LjYgMCAyMS4xIDcuMiAzNSAxNi41IDQ0LjEgMzIuMi0yNC42IDU1LjUtNjAuNSA2My45LTEwMS44LTYuMy0xLjktMTMuMi0zLTIwLjItM3pNMjAyIDM3OC4zYzAtMjIuMy04LTM2LjYtMTguMS00NS42LTEwLjctOS42LTI1LjktMTUtNDIuMS0xNS03IDAtMTMuOSAxLTIwLjIgMyA4LjQgNDEuMyAzMS42IDc3LjIgNjMuOSAxMDEuOCA5LjQtOS4xIDE2LjUtMjMuMSAxNi41LTQ0LjJ6bTQxLjItMjI0LjNjOSAxMC4yIDIzLjIgMTguMiA0NS4yIDE4LjJzMzYuMi04IDQ1LjItMTguMmM2LjctNy42IDExLjUtMTcuNSAxMy42LTI4LjQtMTguMy02LjgtMzguMi0xMC41LTU4LjgtMTAuNXMtNDAuNSAzLjctNTguOCAxMC41YzIuMiAxMC45IDYuOSAyMC44IDEzLjYgMjguNXoiXQogICAgfTsKICAgIGZhQmVsbENvbmNpZXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLWNvbmNpZXJnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcxOCwgImNvbmNpZXJnZS1iZWxsIl0sICJmNTYyIiwgIk0yMTYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjNDMTI0LjggMTU2LjcgNDAuMiAyNDMuNyAzMi42IDM1Mmw0NDYuOSAwQzQ3MS44IDI0My43IDM4Ny4yIDE1Ni43IDI4MCAxNDUuM2wwLTMzLjMgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQwMHoiXQogICAgfTsKICAgIGZhQ29uY2llcmdlQmVsbCA9IGZhQmVsbENvbmNpZXJnZTsKICAgIGZhUnVsZXJIb3Jpem9udGFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLWhvcml6b250YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU0NyIsICJNNDggMzg0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgMjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAzODR6Il0KICAgIH07CiAgICBmYUhvcnNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvcnNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDE0XSwgImY2ZjAiLCAiTTQ0OCAyMzguMWwwLTc4LjEgMTYgMCA5LjggMTkuNmMxMi41IDI1LjEgNDIuMiAzNi40IDY4LjMgMjYgMjAuNS04LjIgMzMuOS0yOCAzMy45LTUwLjFMNTc2IDgwYzAtMTkuMS04LjQtMzYuMy0yMS43LTQ4bDUuNyAwYzguOCAwIDE2LTcuMiAxNi0xNlM1NjguOCAwIDU2MCAwTDQ0OCAwQzM3Ny4zIDAgMzIwIDU3LjMgMzIwIDEyOGwtMTcxLjIgMEMxMTguMSAxMjggOTEuMiAxNDQuMyA3Ni4zIDE2OC44IDMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NmwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41IDEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42LTE2LjUgMjgtMjAuNiA2Mi4yLTEwIDkzLjlsMTcuNSA1Mi40YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsMzMuNyAwYzIxLjggMCAzNy4zLTIxLjQgMzAuNC00Mi4xbC0yMC44LTYyLjVjLTIuMS02LjQtLjUtMTMuNCA0LjMtMTguMmwxMi43LTEyLjdjMTMuMi0xMy4yIDIwLjYtMzEuMSAyMC42LTQ5LjcgMC0yLjMtLjEtNC42LS4zLTYuOWw4NCAyNGM0LjEgMS4yIDguMiAyLjEgMTIuMyAyLjhMMzIwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTY0LjNjMTkuMi0xOS4yIDMxLjUtNDUuNyAzMi03NS43bDAgMCAwLTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTk3LCAxMjgxOThdLCAiZjEzMyIsICJNMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMybDAgMzItMzIgMEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDQ4IDQ0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMjI0TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyLTQ0OCAweiJdCiAgICB9OwogICAgZmFIYW5kc0hvbGRpbmdDaGlsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ob2xkaW5nLWNoaWxkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZmEiLCAiTTMyMC0zMmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTYwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xIDEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOC03LjMtNy4zLTIzLjEtMjMuMS00Ny4yLTQ3LjItMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGMyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMmwwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJsMCA3OC45YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC02Ni43IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41TDAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDIyMS41YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDUxMiA0OTMuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w0MDAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTc4LjljMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMGM3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtMjQuMSAyNC4xLTM5LjkgMzkuOS00Ny4yIDQ3LjItMTEgMTEtOS4yIDI5LjIgMy43IDM3LjggOS43IDYuNSAyMi43IDUuMiAzMS0zLjFsNTEuMS01MS4xYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTYwIDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpNMzg0LjUgMTQ5bC0xOS44LTE2LjcgMTEuMSA4OC44YzEuNiAxMy4yLTcuNyAyNS4xLTIwLjggMjYuOHMtMjUuMS03LjctMjYuOC0yMC44bC00LjQtMzUtNy42IDAtNC40IDM1Yy0xLjYgMTMuMi0xMy42IDIyLjUtMjYuOCAyMC44cy0yMi41LTEzLjYtMjAuOC0yNi44bDExLjEtODguOC0xOS44IDE2LjdjLTEwLjEgOC42LTI1LjMgNy4zLTMzLjgtMi44cy03LjMtMjUuMyAyLjgtMzMuOGwyNy45LTIzLjZDMjcxLjMgNzIuOCAyOTUuMyA2NCAzMjAgNjRzNDguNyA4LjggNjcuNiAyNC43bDI3LjkgMjMuNmMxMC4xIDguNiAxMS40IDIzLjcgMi44IDMzLjhzLTIzLjcgMTEuNC0zMy44IDIuOHoiXQogICAgfTsKICAgIGZhSXRhbGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIml0YWxpYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMDMzIiwgIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTU4LjcgMC0xMzMuMyAzMjAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTguNyAwIDEzMy4zLTMyMC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhS2hhbmRhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtoYW5kYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzJdLCAiZjY2ZCIsICJNMjQwLjcgOGM4LjktNy40IDIxLjgtNy40IDMwLjcgMGwzNy44IDMxLjVjOC43IDcuMyAxMS4xIDE5LjYgNiAyOS42LTEuMiAyLjQtMi44IDUuNS00LjYgOS4yIDM0LjIgMTkuMiA1Ny4zIDU1LjggNTcuMyA5Ny44cy0yMy4xIDc4LjYtNTcuMyA5Ny44YzEuOCAzLjcgMy4zIDYuOCA0LjYgOS4yIDUuMSAxMCAyLjcgMjIuMy02IDI5LjZsLTM3LjIgMzEgMCAxOS44YzIyLjktMTUuNyA0OC40LTMzLjMgNzYuNy01Mi43IDQyLjgtMjkuNCA2OC40LTc4IDY4LjQtMTMwbDAtMTEuMWMwLTIzLjktNy4xLTQ3LjMtMjAuNC02Ny4yLTUuMS03LjctNC42LTE3LjggMS43LTI0LjYgNi42LTcuMSAxNy4yLTguMSAyNS4yLTIuOCAyNy41IDE4LjEgODkuNCA2Ny41IDg5LjQgMTQ5LjEgMCA0Ni41LTIwLjIgODguNi00MS44IDEyMC40LTIxLjYgMzItNDUuNiA1NS01NS4zIDYzLjgtNy44IDcuMS0xOSA3LjktMjcuNiAzbC03MC44LTQwLjMtMzIuNyAyMi41IDQ1LjUgMzEuM2MxLjgtLjQgMy43LS43IDUuNy0uNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTIuMiAwLTIyLjMtOS4xLTIzLjgtMjFsLTQwLjItMjcuNiAwIDI4LjljOS42IDUuNSAxNiAxNS45IDE2IDI3LjcgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMS44IDYuNC0yMi4yIDE2LTI3LjdsMC0yOC4xLTQwLjMgMjcuN2MtMS44IDExLjQtMTEuOCAyMC4xLTIzLjcgMjAuMS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIuMiAwIDQuNCAuMyA2LjUgLjlsNDUuOC0zMS41LTMyLjctMjIuNS03MC44IDQwLjNjLTguNyA0LjktMTkuOCA0LjEtMjcuNi0zLTkuNy04LjgtMzMuNy0zMS45LTU1LjMtNjMuOC0yMS41LTMxLjgtNDEuOC03My45LTQxLjgtMTIwLjQgMC04MS43IDYxLjktMTMxLjEgODkuNC0xNDkuMSA4LjEtNS4zIDE4LjYtNC4zIDI1LjIgMi44IDYuNCA2LjkgNi44IDE3IDEuNyAyNC42LTEzLjMgMTkuOS0yMC40IDQzLjMtMjAuNCA2Ny4ybDAgMTEuMWMwIDUxLjkgMjUuNiAxMDAuNiA2OC40IDEzMCAyOC40IDE5LjYgNTMuNyAzNi45IDc1LjYgNTJsMC0xOS4xLTM3LjItMzFjLTguNy03LjMtMTEuMS0xOS42LTYtMjkuNiAxLjItMi40IDIuOC01LjUgNC42LTkuMi0zNC4yLTE5LjItNTcuMy01NS44LTU3LjMtOTcuOHMyMy4xLTc4LjYgNTcuMy05Ny44Yy0xLjgtMy43LTMuMy02LjgtNC42LTkuMi01LjEtMTAtMi43LTIyLjMgNi0yOS42TDI0MC43IDh6TTIyMC4zIDEyMi45Yy0xNyAxMS41LTI4LjIgMzEtMjguMiA1My4xczExLjIgNDEuNiAyOC4yIDUzLjFjNi44LTE5LjIgMTEuOC0zOC40IDExLjgtNTMuMXMtNC45LTMzLjktMTEuOC01My4xem03MS41IDEwNi4yYzE3LTExLjUgMjguMi0zMSAyOC4yLTUzLjFzLTExLjItNDEuNi0yOC4yLTUzLjFjLTYuOCAxOS4yLTExLjggMzguNC0xMS44IDUzLjFzNC45IDMzLjkgMTEuOCA1My4xeiJdCiAgICB9OwogICAgZmFGYWNlRnJvd25PcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsICJmcm93bi1vcGVuIl0sICJmNTdhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6Il0KICAgIH07CiAgICBmYUZyb3duT3BlbjIgPSBmYUZhY2VGcm93bk9wZW4yOwogICAgZmFDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDAzLCAxMDAwNF0sICJmMDBjIiwgIk00MzQuOCA3MC4xYzE0LjMgMTAuNCAxNy41IDMwLjQgNy4xIDQ0LjdsLTI1NiAzNTJjLTUuNSA3LjYtMTQgMTIuMy0yMy40IDEzLjFzLTE4LjUtMi43LTI1LjEtOS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDEwMS41IDEwMS41IDIzNC0zMjEuN2MxMC40LTE0LjMgMzAuNC0xNy41IDQ0LjctNy4xeiJdCiAgICB9OwogICAgZmFGaW5nZXJwcmludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaW5nZXJwcmludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTc3IiwgIk00OCAyNTZjMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4IDYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjUgOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDAgMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjYtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOSA3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOSAxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDI0LjljMCAyNS4yLTEuNSA1MC4zLTQuNCA3NS4zLTEuNyAxNC42IDkuNCAyNy44IDI0LjIgMjcuOCAxMS44IDAgMjEuOS04LjYgMjMuMy0yMC4zIDMuMy0yNy40IDUtNTUgNS04Mi43bDAtMjQuOWMwLTk3LjItNzguOC0xNzYtMTc2LTE3NnpNMTUwLjcgMTQ4LjdjLTkuMS0xMC42LTI1LjMtMTEuNC0zMy45LS40LTIzLjEgMjkuOC0zNi44IDY3LjEtMzYuOCAxMDcuN2wwIDI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45LTMuNCAxNS42IDcuOSAzMS4xIDIzLjkgMzEuMSAxMC41IDAgMTkuOS03IDIyLjItMTcuMyA2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMSA3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjEtMy44IDE0LjMgNi43IDI5IDIxLjUgMjkgOS41IDAgMTcuOS02LjIgMjAuNC0xNS40IDEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdsMC0yNC45YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAyNC45YzAgMzYuMy0zLjUgNzIuNC0xMC40IDEwNy45LTIuNyAxMy45IDcuNyAyNy4yIDIxLjggMjcuMiAxMC4yIDAgMTktNyAyMS0xNyA3LjctMzguOCAxMS42LTc4LjMgMTEuNi0xMTguMWwwLTI0LjljMC01My00My05Ni05Ni05NnptMjQgOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlsMC0yNC45eiJdCiAgICB9OwogICAgZmFDaGFyZ2luZ1N0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcmdpbmctc3RhdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWU3IiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTI3LjdjLTMyLjUtMTAuMi01Ni00MC41LTU2LTc2LjNsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCAzMiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCAzNS44LTIzLjUgNjYuMS01NiA3Ni4zTDUyMCAzODBjMCAzNy42LTMwLjQgNjgtNjggNjhzLTY4LTMwLjQtNjgtNjhsMC0xMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwwIDEyOS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDcyIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMNjQgNjR6bTgyLjcgMTI1LjdsMzkgMC0yMC45IDY2LjljLTIuNCA3LjYgMy4zIDE1LjQgMTEuMyAxNS40IDIuOSAwIDUuNi0xIDcuOC0yLjlsOTQuNi04MmMzLjEtMi43IDQuOS02LjYgNC45LTEwLjcgMC03LjgtNi4zLTE0LjEtMTQuMS0xNC4xbC0zOSAwIDIwLjktNjYuOWMyLjQtNy42LTMuMy0xNS40LTExLjMtMTUuNC0yLjkgMC01LjYgMS03LjggMi45bC05NC42IDgyYy0zLjEgMi43LTQuOSA2LjYtNC45IDEwLjcgMCA3LjggNi4zIDE0LjEgMTQuMSAxNC4xeiJdCiAgICB9OwogICAgZmFVc2VyTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUwMiIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0xOTQuMyAzMDRsNTkuNCAwYzI5LjcgMCA1Ny43IDcuMyA4Mi4zIDIwLjFsMCA0LjNjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDQ1LjcgNTEyQzI5LjMgNTEyIDE2IDQ5OC43IDE2IDQ4Mi4zIDE2IDM4My44IDk1LjggMzA0IDE5NC4zIDMwNHptMzAxLjcgLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFNb2JpbGVTY3JlZW5CdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXNjcmVlbi1idXR0b24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibW9iaWxlLWFsdCJdLCAiZjNjZCIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em02NCAwbDAgMzA0IDIyNCAwIDAtMzA0LTIyNCAwek0xOTIgNDcyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTW9iaWxlQWx0ID0gZmFNb2JpbGVTY3JlZW5CdXR0b247CiAgICBmYUFuY2hvckNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRhYSIsICJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6TTI4OCAwYy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM0w4MCAzMDcuOWMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nV2l0aENhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsaW5kIl0sICJmMjlkIiwgIk0yMjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2MCAyMDUuM2wtMjIuNiAyMi42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNC40LTM0LjRjMjMuMi0yMy4yIDU0LjYtMzYuMiA4Ny4zLTM2LjIgMzYuMSAwIDcwLjMgMTUuOCA5My44IDQzLjFsNjguNiA4MGMxMS41IDEzLjQgOS45IDMzLjYtMy41IDQ1LjFzLTMzLjYgOS45LTQ1LjEtMy41bC01NS43LTY1IDAgMTE4LjYgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zem0uMSAxNjUuOGMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41bC02OC4zIDY4LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMMTYwLjEgMzcxem0yMzMuNS02Mi4yYzEwLjYtOCAyNS42LTUuOCAzMy42IDQuOGwxNDQgMTkyYzggMTAuNiA1LjggMjUuNi00LjggMzMuNnMtMjUuNiA1LjgtMzMuNi00LjhsLTE0NC0xOTJjLTgtMTAuNi01LjgtMjUuNiA0LjgtMzMuNnoiXQogICAgfTsKICAgIGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTsKICAgIGZhRmlsZVdhdmVmb3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtd2F2ZWZvcm0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1tZWRpY2FsLWFsdCJdLCAiZjQ3OCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2IDYwLjMgMCA0OC44IDYyLjdjNS4xIDYuNiAxMy4zIDEwIDIxLjYgOS4xczE1LjUtNi4xIDE5LjEtMTMuNmw0Mi45LTkxLjIgOS45IDE5LjhjNC4xIDguMSAxMi40IDEzLjMgMjEuNSAxMy4zbDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU3LjIgMC0yNS40LTUwLjdjLTQuMS04LjItMTIuNi0xMy40LTIxLjgtMTMuM3MtMTcuNSA1LjUtMjEuNCAxMy44bC00Ny4zIDEwMC42LTMyLTQxLjFDODYuNCAzMDcuNCA3OS40IDMwNCA3MiAzMDRMMCAzMDQgMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41eiJdCiAgICB9OwogICAgZmFGaWxlTWVkaWNhbEFsdCA9IGZhRmlsZVdhdmVmb3JtOwogICAgZmFIb3VzZUNyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzYjEiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODYuNCAwLTMxLjMtNTIuMmMtNC4xLTYuOC0yLjYtMTUuNSAzLjUtMjAuNUwyNTYgMzY4IDE5NS44IDI4NS4yYy0xMC45LTE1IDguMi0zMy41IDIyLjgtMjJsMTE3LjkgOTIuNmM4IDYuMyA4LjIgMTguNCAuNCAyNC45TDI1NiA0NDggMjk0LjQgNTEyIDQwMCA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6Il0KICAgIH07CiAgICBmYUhhdFdpemFyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtd2l6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZTgiLCAiTTY0IDQwMGw4NS43LTIwOC4yYzE3LTQxLjMgNDcuOC03NS4zIDg3LjItOTYuM0wzODMuOCAxNy4yYzEyLjMtNi42IDI2LjUgNC43IDIzIDE4LjJMMzY5LjYgMTc3LjhjLTEuMSA0LjEtMS42IDguMy0xLjYgMTIuNiAwIDYuMyAxLjIgMTIuNiAzLjYgMTguNWw3Ni40IDE5MS4xLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjYwLjQgMjMwLjkgMjU2IDIyNCAyNTZzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzIzIDE0NCAzMjkuMSAxNDQgMzM2czQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41IDExLjggMzUuNC0xNDMuMSAwek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OGw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVVzZXJEb2N0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1kb2N0b3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidXNlci1tZCJdLCAiZjBmMCIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMCAwIDI0MCAxMjAgMTIwIDAgMSAwIDAtMjQwem02MCAzMTIuOGMtNS40LS41LTExLS44LTE2LjYtLjhsLTg2LjkgMGMtNS42IDAtMTEuMSAuMy0xNi42IC44bDAgNjcuNWMxNi41IDcuNiAyOCAyNC4zIDI4IDQzLjYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC0xOS40IDExLjUtMzYuMSAyOC00My42bDAtNTguNEM2MSAzNTMgMTYgNDEzLjYgMTYgNDg0LjYgMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsMzYxLjEgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTcxLTQ1LTEzMS41LTEwOC0xNTQuNmwwIDM3LjRjMjMuMyA4LjIgNDAgMzAuNSA0MCA1Ni42bDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0yNi4xIDE2LjctNDguMyA0MC01Ni42bDAtNDYuNnoiXQogICAgfTsKICAgIGZhVXNlck1kID0gZmFVc2VyRG9jdG9yOwogICAgZmFDaGFydEJhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYmFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhci1jaGFydCJdLCAiZjA4MCIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgODBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDExMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUJhckNoYXJ0MiA9IGZhQ2hhcnRCYXIyOwogICAgZmFTcHJheUNhblNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwcmF5LWNhbi1zcGFya2xlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhaXItZnJlc2hlbmVyIl0sICJmNWQwIiwgIk0xNjAgMzJsMCA4MCAxMjggMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCAxMjhjLTUzIDAtOTYgNDMtOTYgOTZsMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDhjMC01My00My05Ni05Ni05NmwtMTI4IDB6bTY0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek00NDggNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDMyIDQwMy42IDIuMkM0MDMgMSA0MDEuNCAwIDQwMCAwcy0zIDEtMy42IDIuMkwzODQgMzIgMzU0LjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkwzODQgNjQgMzk2LjQgOTMuOEMzOTcgOTUgMzk4LjYgOTYgNDAwIDk2czMtMSAzLjYtMi4yTDQxNiA2NCA0NDUuOCA1MS42QzQ0NyA1MSA0NDggNDkuNCA0NDggNDh6bTc2LjQgNDUuOEM1MjUgOTUgNTI2LjYgOTYgNTI4IDk2czMtMSAzLjYtMi4yTDU0NCA2NCA1NzMuOCA1MS42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDMyIDUzMS42IDIuMkM1MzEgMSA1MjkuNCAwIDUyOCAwcy0zIDEtMy42IDIuMkw1MTIgMzIgNDgyLjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw1MTIgNjQgNTI0LjQgOTMuOHptNy4yIDEwMC40Yy0uNi0xLjItMi4yLTIuMi0zLjYtMi4ycy0zIDEtMy42IDIuMkw1MTIgMjI0IDQ4Mi4yIDIzNi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiAyNTYgNTI0LjQgMjg1LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw1NDQgMjU2IDU3My44IDI0My42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDIyNCA1MzEuNiAxOTQuMnpNNTEyIDE0NGMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMTI4IDQ2Ny42IDk4LjJDNDY3IDk3IDQ2NS40IDk2IDQ2NCA5NnMtMyAxLTMuNiAyLjJMNDQ4IDEyOCA0MTguMiAxNDAuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw0NDggMTYwIDQ2MC40IDE4OS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDE2MCA1MDkuOCAxNDcuNmMxLjItLjYgMi4yLTIuMiAyLjItMy42eiJdCiAgICB9OwogICAgZmFBaXJGcmVzaGVuZXIgPSBmYVNwcmF5Q2FuU3BhcmtsZXM7CiAgICBmYUJhaHRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhaHQtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMGFjIiwgIk0xMzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MC03NC40IDBDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN2w3MC4zIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNDggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTQwLjEtMjEuMS03NS4zLTUyLjctOTUuMSAxMy4xLTE4LjMgMjAuNy00MC43IDIwLjctNjQuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTI4bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMTYgMHptLTQ4IDY0bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtNDggMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRlbXBlcmF0dXJlLXVwIl0sICJlMDQwIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjEyLjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSA5LjRsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTkuNC05LjQgMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OC43LTkuNCA5LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY0LTY0YzYtNiAxNC4xLTkuNCAyMi42LTkuNHMxNi42IDMuNCAyMi42IDkuNHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVVcCA9IGZhVGVtcGVyYXR1cmVBcnJvd1VwOwogICAgZmFXZWJBd2Vzb21lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWItYXdlc29tZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjgyIiwgIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MiA1NTIuNCAxNzEuMWMtNS4zLTcuNy04LjQtMTcuMS04LjQtMjcuMSAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjYtMjAuNiA0Ny4xLTQ2LjQgNDhMNDgxIDQ0Mi4zYy0xMC4zIDIzLTMzLjIgMzcuNy01OC40IDM3LjdsLTIwNS4yIDBjLTI1LjIgMC00OC0xNC44LTU4LjQtMzcuN0w0Ni40IDE5MkMyMC42IDE5MS4xIDAgMTcwIDAgMTQ0IDAgMTE3LjUgMjEuNSA5NiA0OCA5NnM0OCAyMS41IDQ4IDQ4YzAgMTAuMS0zLjEgMTkuNC04LjQgMjcuMUwxOTIgMTkyIDI5OC4xIDk5LjFjLTE3LjctOC4zLTMwLTI2LjMtMzAtNDcuMSAwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUyeiJdCiAgICB9OwogICAgZmFOb25CaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm9uLWJpbmFyeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlODA3IiwgIk0xOTIgNTQ0Yy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NiAwLTg2LjMgNjIuMS0xNTggMTQ0LTE3M2wwLTQ3LjItNDkuNyAyNC44LTMgMS4zYy0xNS4yIDUuNy0zMi41LS44LTM5LjktMTUuNy03LjQtMTQuOC0yLjItMzIuNiAxMS41LTQxLjNsMi44LTEuNiAzOC44LTE5LjQtMzguOC0xOS40Yy0xNS44LTcuOS0yMi4yLTI3LjEtMTQuMy00Mi45IDcuNC0xNC44IDI0LjgtMjEuNCA0MC0xNS42bDMgMS4zIDQ5LjcgMjQuOCAwLTQ0LjJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ0LjIgNDkuNy0yNC44IDMtMS4zYzE1LjItNS44IDMyLjUgLjggMzkuOSAxNS42czIuMiAzMi43LTExLjUgNDEuM2wtMi44IDEuNi0zOC43IDE5LjQgMzguNyAxOS4zYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNy40IDE0LjgtMjQuNyAyMS40LTM5LjkgMTUuNmwtMy0xLjMtNDkuNy0yNC44IDAgNDcuMmM4MS45IDE1LjEgMTQ0IDg2LjggMTQ0IDE3MyAwIDk3LjItNzguOCAxNzYtMTc2IDE3NnptMC02NGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYU4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExMF0sICI0ZSIsICJNMjEuMSAzMy45YzEyLjctNC42IDI2LjktLjcgMzUuNSA5LjZMMzIwIDM1OS42IDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTMuNS04LjQgMjUuNS0yMS4xIDMwLjFzLTI2LjkgLjctMzUuNS05LjZMNjQgMTUyLjQgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDUwLjUgOC40IDM4LjUgMjEuMSAzMy45eiJdCiAgICB9OwogICAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MiXSwgImYwNDciLCAiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAxMTQuNy0xMTQuNyAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDExNC43IDAgMCAxMTQuNy05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTExNC43IDExNC43IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTE0LjcgMCAwLTExNC43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93cyA9IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0OwogICAgZmFIb3VzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgImhvbWUiLCAiaG9tZS1hbHQiLCAiaG9tZS1sZy1hbHQiXSwgImYwMTUiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUhvbWUyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVBbHQyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVMZ0FsdDIgPSBmYUhvdXNlMjsKICAgIGZhU3Bpbm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGlubmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMTAiLCAiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0wIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00OCAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0zNjggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNzUgMzY5LjFBNDggNDggMCAxIDEgMTQyLjkgNDM3IDQ4IDQ4IDAgMSAxIDc1IDM2OS4xek03NSA3NUE0OCA0OCAwIDEgMSAxNDIuOSAxNDIuOSA0OCA0OCAwIDEgMSA3NSA3NXpNNDM3IDM2OS4xQTQ4IDQ4IDAgMSAxIDM2OS4xIDQzNyA0OCA0OCAwIDEgMSA0MzcgMzY5LjF6Il0KICAgIH07CiAgICBmYUdhdmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdmVsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxlZ2FsIl0sICJmMGUzIiwgIk0xNjkuNiAxNTMuNGwtMTguNy0xOC43Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wyNjUuNi0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyOS42LTYuNmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMTQuOSAxNTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDB6TTI3NiAyMTEuN2wtMzEuNC0zMS40IDExMi0xMTIgMTE5LjQgMTE5LjQtMTEyIDExMi0zMS40LTMxLjQtMjMyIDIzMmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjMyLTIzMnpNMzkwLjkgMzc0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDUwNS42IDIxNC42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE4LjcgMTguN2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0w0NTQuOSAzOTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE4LjctMTguN3oiXQogICAgfTsKICAgIGZhTGVnYWwgPSBmYUdhdmVsOwogICAgZmFUaWNrZXRTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGlja2V0LXNpbXBsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aWNrZXQtYWx0Il0sICJmM2ZmIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNi0xOC44IDYuNS0zMi4zIDI0LjQtMzIuMyA0NS40czEzLjUgMzguOSAzMi4zIDQ1LjRjOC4zIDIuOSAxNS43IDkuOCAxNS43IDE4LjZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRDMCAzMTEuMiA3LjQgMzA0LjMgMTUuNyAzMDEuNCAzNC41IDI5NC45IDQ4IDI3NyA0OCAyNTZzLTEzLjUtMzguOS0zMi4zLTQ1LjRDNy40IDIwNy43IDAgMjAwLjggMCAxOTJsMC02NHoiXQogICAgfTsKICAgIGZhVGlja2V0QWx0ID0gZmFUaWNrZXRTaW1wbGU7CiAgICBmYURvdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG92ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzMF0sICJmNGJhIiwgIk00OTYgNjRjMTMuMiAwIDIwLjcgMTUuMSAxMi44IDI1LjZMNDgwIDEyOCA0ODAgMzA0YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0bC0xMTIgMC00Ni4zIDQ2LjNjLTEwLjQgMTAuNC0yNi41IDEyLjQtMzkuMSA0LjhMNDEuNSA0NDAuOWMtMTctMTAuMi0xNS0zNS41IDMuNC00Mi45TDE2MCAzNTJDMjMuOCAzMTEuMSA3LjUgMTY5LjggMjIgOTUuNyAyNS42IDc3LjkgNDUuMyA3MS40IDYxLjMgODAuMkwzMjAgMjI0IDMyMCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBsOTYgMHptLTk2IDU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHpNMTgyLjUtOS42YzEyLjQtMTMuNyAzMy4zLTguOSA0Mi41IDcuMWw1Ni40IDk4LjNjLTUuOCAxNC40LTkuMiAzMC4xLTkuNCA0Ni41TDEzOC4xIDY4YzEwLjEtMzEuNiAyNy01OC40IDQ0LjQtNzcuNnoiXQogICAgfTsKICAgIGZhVGFycERyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFycC1kcm9wbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1N2MiLCAiTTI1NiAxNjBjMzUuMyAwIDY0LTI2LjkgNjQtNjAgMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwek0zNjggOTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDE1Ny45IDE0NCA5NmMwLTExLjEgMS42LTIxLjkgNC42LTMyTDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMzIyLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04NC42IDBjMyAxMC4xIDQuNiAyMC45IDQuNiAzMnptODUuNSAxNzZMMzM2IDM4OS41IDMzNiAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFUcmVlQ2l0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmVlLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4NyIsICJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek01MjggMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTUxMiAzMDRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgNDgwbDAtMTYwLTE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMjYuNyAxMy4xLTUwLjMgMzMuMi02NC45LS44LTQuOS0xLjItMTAtMS4yLTE1LjEgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFUdXJuVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVybi11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNTQ4LCAibGV2ZWwtdXAtYWx0Il0sICJmM2JmIiwgIk0xNjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSAxOTIgMzIwIDE5MmwtNjQgMCAwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwLTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxldmVsVXBBbHQgPSBmYVR1cm5VcDsKICAgIGZhVGVtcGVyYXR1cmVRdWFydGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLXF1YXJ0ZXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtMSIsICJ0aGVybW9tZXRlci0xIiwgInRoZXJtb21ldGVyLXF1YXJ0ZXIiXSwgImYyY2EiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTI4LjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjsKICAgIGZhVGhlcm1vbWV0ZXIxID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7CiAgICBmYVRoZXJtb21ldGVyUXVhcnRlciA9IGZhVGVtcGVyYXR1cmVRdWFydGVyOwogICAgZmFTbGlkZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNsaWRlcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2xpZGVycy1oIl0sICJmMWRlIiwgIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0eiJdCiAgICB9OwogICAgZmFTbGlkZXJzSCA9IGZhU2xpZGVyczsKICAgIGZhTW9zcXVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMzMl0sICJmNjc4IiwgIk0xNzQuOCAyMjRsMjI2LjQgMGM0My41IDAgNzguOC0zNS4zIDc4LjgtNzguOCAwLTI1LjUtMTIuMy00OS40LTMzLjEtNjQuMkwyOTcuMy0yNS40Yy01LjYtMy45LTEzLTMuOS0xOC41IDBMMTI5LjEgODFDMTA4LjMgOTUuOCA5NiAxMTkuNyA5NiAxNDUuMiA5NiAxODguNyAxMzEuMyAyMjQgMTc0LjggMjI0ek01MTIgNTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNDQ4IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIwNi4zIDAgMjI0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwek0yNDAgMzg0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MC05NiAwIDAtODB6Il0KICAgIH07CiAgICBmYUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNF0sICI0OCIsICJNMzIwIDI4OGwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTI1NiAwIDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMjU2IDB6Il0KICAgIH07CiAgICBmYUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5mbyIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJmMTI5IiwgIk00OCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0yMjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg2OTQsICJ3YWxraW5nIl0sICJmNTU0IiwgIk0xOTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTEwNS40IDIyNy45bDIyLjYtMjIuNiAwIDY5LjNjMCAyOCAxMi4yIDU0LjcgMzMuNSA3Mi45bDcxLjQgNjEuMmM1LjkgNS4xIDkuOCAxMi4xIDEwLjkgMTkuOGwxMi42IDg4LjFjMi41IDE3LjUgMTguNyAyOS43IDM2LjIgMjcuMnMyOS43LTE4LjcgMjcuMi0zNi4ybC0xMi42LTg4LjFjLTMuMy0yMy4xLTE0LjktNDQuMS0zMi42LTU5LjNsLTM0LjUtMjkuNiAwLTExNS4yIDMuOCA0LjdjMTguMiAyMi44IDQ1LjggMzYgNzUgMzZsMzMuMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMy4yIDBjLTkuNyAwLTE4LjktNC40LTI1LTEybC0xNy45LTIyLjRjLTIzLTI4LjgtNTcuOS00NS42LTk0LjgtNDUuNi0zMi4yIDAtNjMuMSAxMi44LTg1LjggMzUuNkw2MC4xIDE4Mi42QzQyLjEgMjAwLjYgMzIgMjI1IDMyIDI1MC41TDMyIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcuNWMwLTguNSAzLjQtMTYuNiA5LjQtMjIuNnptMTIuNCAxNzkuNGMtMS41IDUuMi00LjMgMTAtOC4xIDEzLjhMNDEuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhsLTEwLjQgMzYuMnoiXQogICAgfTsKICAgIGZhV2Fsa2luZyA9IGZhUGVyc29uV2Fsa2luZzsKICAgIGZhQXJyb3dUdXJuRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10dXJuLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibGV2ZWwtZG93biJdLCAiZjE0OSIsICJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHoiXQogICAgfTsKICAgIGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duOwogICAgZmFSb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MzldLCAiZjAxOCIsICJNMjIzLjkgMzJsLTc2LjIgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMMS40IDQyMC41Qy02LjEgNDUwLjcgMTYuOCA0ODAgNDggNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjQgMTc2LjEgMGMzMS4yIDAgNTQuMS0yOS4zIDQ2LjYtNTkuNUw0MjYuNSA4MC42QzQxOS40IDUyLjEgMzkzLjggMzIgMzY0LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bTY0IDE5MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhU3BpcmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaXJhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODBhIiwgIk0xMTUuNSA3LjRjMTMuNi0xMS4zIDMzLjgtOS41IDQ1LjEgNC4xczkuNSAzMy44LTQuMSA0NS4xQzEwMC4yIDEwMy41IDY0IDE3NS4yIDY0IDI1NiA2NCAzNjIgMTUwIDQ0OCAyNTYgNDQ4czE5Mi04NiAxOTItMTkyYzAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE3NiAxODAuOSAxNzYgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxMTIgMzM1LjUgMTEyIDI1NmMwLTExMC41IDg5LjUtMjAwIDIwMC0yMDBzMjAwIDg5LjUgMjAwIDIwMGMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZDMCAxNTUuOCA0NSA2Ni4xIDExNS41IDcuNHoiXQogICAgfTsKICAgIGZhRmFjZUZyb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgImZyb3duIl0sICJmMTE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTAuNi0xMTMuOWMtMjAuNC0yOC01My40LTQ2LjEtOTAuNi00Ni4xcy03MC4yIDE4LjEtOTAuNiA0Ni4xYy03LjggMTAuNy0yMi44IDEzLjEtMzMuNSA1LjNzLTEzLjEtMjIuOC01LjMtMzMuNUMxNTUuNyAzMzAgMjAyLjggMzA0IDI1NiAzMDRzMTAwLjMgMjYgMTI5LjQgNjUuOWM3LjggMTAuNyA1LjQgMjUuNy01LjMgMzMuNXMtMjUuNyA1LjQtMzMuNS01LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRnJvd24yID0gZmFGYWNlRnJvd24yOwogICAgZmFXaW5lR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5lLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbIndpbmUtZ2xhc3MtYWx0Il0sICJmNWNlIiwgIk02NCAwQzQ4LjcgMCAzNS42IDEwLjggMzIuNiAyNS43TDMuMiAxNzNDMS4xIDE4My41IDAgMTk0LjIgMCAyMDVsMCAzYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44bDAgMTE1LjItNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTExNS4yQzI2NSAzNTAgMzIwIDI4NS40IDMyMCAyMDhsMC0zYzAtMTAuNy0xLjEtMjEuNC0zLjItMzJMMjg3LjQgMjUuN0MyODQuNCAxMC44IDI3MS4zIDAgMjU2IDBMNjQgMHptMS45IDE4NS42TDkwLjIgNjQgMjI5LjggNjQgMjU0LjEgMTg1LjZjMS4zIDYuNCAxLjkgMTIuOSAxLjkgMTkuNGwwIDNjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0zYzAtNi41IC42LTEzIDEuOS0xOS40eiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3NBbHQgPSBmYVdpbmVHbGFzc0VtcHR5OwogICAgZmFDbGFwcGVyYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xhcHBlcmJvYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxMzEiLCAiTTQ0OCA2NGMyIDAgMy45IC4xIDUuOCAuM2wtOTUuNyA5NS43IDY3LjkgMCA3Mi03MmM4LjggMTEgMTQgMjQuOSAxNCA0MGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDcwLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDkyLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDg2LjEgMHoiXQogICAgfTsKICAgIGZhRm9yd2FyZFN0ZXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZC1zdGVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN0ZXAtZm9yd2FyZCJdLCAiZjA1MSIsICJNMjEgMzYuOGMxMi45LTcgMjguNy02LjMgNDEgMS44TDMyMCAyMDguMSAzMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0NC4xLTI1OCAxNjkuNmMtMTIuMyA4LjEtMjggOC44LTQxIDEuOFMwIDQ1NC43IDAgNDQwTDAgNzJDMCA1Ny4zIDguMSA0My44IDIxIDM2Ljh6Il0KICAgIH07CiAgICBmYVN0ZXBGb3J3YXJkID0gZmFGb3J3YXJkU3RlcDsKICAgIGZhU3F1YXJlVXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4NTk5LCAiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0Il0sICJmMzYwIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNjggMTYwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDM1IDM1LTY3IDY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwyNCAyNGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2Ny02NyAzNSAzNWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyMCAzMjEuNyAzMjAgMzEybDAtMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjggMHoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0ID0gZmFTcXVhcmVVcFJpZ2h0OwogICAgZmFCb29rSm91cm5hbFdoaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWpvdXJuYWwtd2hpbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImpvdXJuYWwtd2hpbGxzIl0sICJmNjZhIiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjc0LjEgOTkuMmMyLjYtMi42IDYuNy0zLjEgOS45LTEuMSAzMi4xIDIwIDUzLjQgNTUuNiA1My40IDk2LjIgMCA2Mi42LTUwLjcgMTEzLjMtMTEzLjMgMTEzLjNTMTEwLjcgMjU2LjkgMTEwLjcgMTk0LjNjMC00MC42IDIxLjQtNzYuMiA1My40LTk2LjIgMy4xLTIgNy4yLTEuNSA5LjkgMS4xczMuMSA2LjcgMS4yIDkuOGMtNS4yIDguNi04LjIgMTguNy04LjIgMjkuNSAwIDE1LjEgNS45IDI4LjggMTUuNSAzOS4xIDIuNSAyLjcgMi45IDYuNyAuOSA5LjctNC43IDcuNC03LjQgMTYuMS03LjQgMjUuNSAwIDIxLjYgMTQuMyAzOS45IDM0IDQ1LjlsMS0yNC44Yy03LjEtNC40LTExLjgtMTIuMi0xMS44LTIxLjEgMC05LjYgNS41LTE4IDEzLjUtMjIuMWwzLjMtODEuOGMuMi00LjMgMy43LTcuNyA4LTcuN3M3LjggMy40IDggNy43bDMuMyA4MS44YzggNC4xIDEzLjUgMTIuNCAxMy41IDIyLjEgMCA4LjktNC43IDE2LjctMTEuOCAyMS4xbDEgMjQuOGMxOS42LTYgMzMuOS0yNC4xIDM0LTQ1LjZsMC0uNmMtLjEtOS4zLTIuNy0xNy45LTcuNC0yNS4yLTEuOS0zLjEtMS42LTcuMSAuOS05LjcgOS42LTEwLjIgMTUuNS0yMy45IDE1LjUtMzkuMSAwLTEwLjgtMy0yMC45LTguMi0yOS41LTEuOS0zLjItMS40LTcuMiAxLjItOS44eiJdCiAgICB9OwogICAgZmFKb3VybmFsV2hpbGxzID0gZmFCb29rSm91cm5hbFdoaWxsczsKICAgIGZhQ2hhbXBhZ25lR2xhc3NlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFtcGFnbmUtZ2xhc3NlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM0NiwgImdsYXNzLWNoZWVycyJdLCAiZjc5ZiIsICJNMTU1LjYgMTcuM0MxNjMgMyAxNzkuOS0zLjYgMTk1IDEuOWwxMjUgNDUuNiAxMjUtNDUuNmMxNS4xLTUuNSAzMiAxLjEgMzkuNCAxNS40bDc4LjggMTUyLjljMjguOCA1NS44IDEwLjMgMTIyLjMtMzguNSAxNTYuNmwzMS4zIDg2LjIgNDEtMTVjMTYuNi02IDM1IDIuNSA0MSAxOS4xcy0yLjUgMzUtMTkuMSA0MWMtNDcuNCAxNy4zLTk0LjggMzQuNS0xNDIuMiA1MS44LTE2LjYgNi4xLTM1LTIuNS00MS0xOS4xczIuNS0zNSAxOS4xLTQxbDQxLTE1LTMxLjMtODYuMmMtNTkuNCA1LjItMTE2LjItMzMuOS0xMzAtOTUuMmwtMTQuNi02NC43LTE0LjYgNjQuN2MtMTMuOCA2MS4zLTcwLjYgMTAwLjQtMTMwIDk1LjJsLTMxLjMgODYuMiA0MSAxNWMxNi42IDYuMSAyNS4yIDI0LjQgMTkuMSA0MXMtMjQuNCAyNS4yLTQxIDE5LjFjLTQ3LjQtMTcuMy05NC44LTM0LjYtMTQyLjItNTEuOC0xNi42LTYuMS0yNS4yLTI0LjQtMTkuMS00MVMyNi4zIDM5MiA0Mi45IDM5OGw0MSAxNSAzMS4zLTg2LjJDNjYuNSAyOTIuNSA0OC4xIDIyNiA3Ni45IDE3MC4yTDE1NS42IDE3LjN6bTQ0IDU0LjRsLTI3LjIgNTIuOCA4OS4yIDMyLjUgMTMuMS01Ny45LTc1LjEtMjcuNHptMjQwLjkgMGwtNzUuMSAyNy40IDEzLjEgNTcuOSA4OS4yLTMyLjUtMjcuMi01Mi44eiJdCiAgICB9OwogICAgZmFHbGFzc0NoZWVycyA9IGZhQ2hhbXBhZ25lR2xhc3NlczsKICAgIGZhRHVtcHN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5MyIsICJNMTMyLjMgNjRMMTA2LjcgMTkyIDI0IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMMjYuNSA4MC40QzI5LjggNzAuNiAzOSA2NCA0OS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zMTIgNjRsODIuNyAwIDI1LjYgMTI4LTEwOC4zIDAgMC0xMjh6bTEzMS43IDBsODMgMGMxMC4zIDAgMTkuNSA2LjYgMjIuOCAxNi40bDI1LjMgNzUuOWMuOCAyLjQgMS4yIDUgMS4yIDcuNmwwIDQuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtODIuNyAwLTI1LjYtMTI4ek0yNS43IDI0MGw1MjQuNyAwYy0uNCAyLjEtMTMuMyA3My40LTM4LjkgMjEzLjctMyAxNi4zLTE3LjkgMjcuNi0zNC40IDI2LjFTNDQ4IDQ2NC42IDQ0OCA0NDhsMC0xNi0zMjAgMCAwIDE2YzAgMTYuNi0xMi42IDMwLjQtMjkuMSAzMS45UzY3LjUgNDcwIDY0LjUgNDUzLjdDMzkgMzEzLjMgMjYgMjQyLjEgMjUuNyAyNDB6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MDEiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdCiAgICB9OwogICAgZmFDb21wdXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGU1IiwgIk0zNDguOCAzMkMzNDAuNyA0Ni4xIDMzNiA2Mi41IDMzNiA4MGwwIDE2LTI3MiAwIDAgMjI0IDI3MiAwIDAgNjQtMjcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg0LjggMHpNMzM2IDQzMmMwIDE3LjUgNC43IDMzLjkgMTIuOCA0OEwxMjAgNDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxNiAwek00MzIgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNTYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVdhbmRNYWdpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLW1hZ2ljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1hZ2ljIl0sICJmMGQwIiwgIk0zOTguNSAxMi4ybC04OC4yIDg4LjIgMTAxLjMgMTAxLjMgODguMi04OC4yQzUwNy42IDEwNS42IDUxMiA5NSA1MTIgODRzLTQuNC0yMS42LTEyLjItMjkuNUw0NTcuNSAxMi4yQzQ0OS42IDQuNCA0MzkgMCA0MjggMHMtMjEuNiA0LjQtMjkuNSAxMi4yek0yNzYuNCAxMzQuM0wxMi4yIDM5OC41QzQuNCA0MDYuNCAwIDQxNyAwIDQyOHM0LjQgMjEuNiAxMi4yIDI5LjVsNDIuMyA0Mi4zQzYyLjQgNTA3LjYgNzMgNTEyIDg0IDUxMnMyMS42LTQuNCAyOS41LTEyLjJMMzc3LjcgMjM1LjYgMjc2LjQgMTM0LjN6Il0KICAgIH07CiAgICBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7CiAgICBmYUJyYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTA0XSwgImY1ZGMiLCAiTTEyMCA1NmMwLTMwLjkgMjUuMS01NiA1Ni01NmwyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0yOS44IDAtNTQuOS0yMC40LTYyLTQ4LS43IDAtMS4zIDAtMiAwLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMTggNi0zNC42IDE2LTQ4LTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0IDAtMzAuOSAxNy42LTU3LjggNDMuMi03MS4xLTcuMS0xMi0xMS4yLTI2LTExLjItNDAuOSAwLTQ0LjIgMzUuOC04MCA4MC04MGwwLTI0em0yNzIgMGwwIDI0YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTUtNC4xIDI5LTExLjIgNDAuOSAyNS43IDEzLjMgNDMuMiA0MC4xIDQzLjIgNzEuMSAwIDI2LjItMTIuNiA0OS40LTMyIDY0IDEwIDEzLjQgMTYgMzAgMTYgNDggMCA0NC4yLTM1LjggODAtODAgODAtLjcgMC0xLjMgMC0yIDAtNy4xIDI3LjYtMzIuMiA0OC02MiA0OGwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NnoiXQogICAgfTsKICAgIGZhQnJpZWZjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDY5IiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxMiIsICJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvZGVDb21taXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1jb21taXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM4NiIsICJNMjg4IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDMwIDM2MSAzNjUuNCA0MTYgMjg4IDQxNlMxNDYgMzYxIDEzMS4yIDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTkuMiAwQzE0NiAxNTEgMjEwLjYgOTYgMjg4IDk2czE0MiA1NSAxNTYuOCAxMjhsOTkuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05OS4yIDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkJyZWFzdGZlZWRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJyZWFzdGZlZWRpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTUzYSIsICJNMjI0IDBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQzNi44IDM4Mi44TDM3My41IDQ2MmMtMTYuNiAyMC43LTQ2LjggMjQuMS02Ny41IDcuNS0xNy42LTE0LjEtMjIuNy0zOC4xLTEzLjUtNTcuN2wtLjctLjFjLTM4LjktNS42LTc0LjMtMjUuMS05OS43LTU0LjhsMC0zNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAuOCAwIDEuNiAuMSAyLjRsMTAxLjQgNTAuN2MyMy43IDExLjkgMzMuMyA0MC43IDIxLjUgNjQuNHMtNDAuNyAzMy4zLTY0LjQgMjEuNUwyNy4yIDQyNy4zYy0xLjEtLjUtMi4yLTEuMS0zLjMtMS43LTQuOS0yLjgtOS4yLTYuNC0xMi42LTEwLjYtNC42LTUuNC03LjgtMTEuNy05LjYtMTguNC0zLjMtMTItMS45LTI1LjIgNC44LTM2LjYgLjYtMS4xIDEuMy0yLjIgMi0zLjJMNzUuNiAyNTYuMWMyNi43LTQwLjEgNzEuNy02NC4xIDExOS44LTY0LjFsNzUuMiAwYzQ2LjUgMCA5MC4xIDIyLjUgMTE3LjIgNjAuM2w1MC43IDcwLjljMi4yIDMgNCA2LjEgNS41IDkuNCAyLjkgNi43IDQuMyAxMy44IDQgMjAuOC0uMyAxMC42LTQuMiAyMS0xMS4yIDI5LjR6TTMyMCAzMzJhNDQgNDQgMCAxIDAgLTg4IDAgNDQgNDQgMCAxIDAgODggMHoiXQogICAgfTsKICAgIGZhUGVyc29uUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcmF5cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRkIiwgIk0zMTIuNSAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMzMzguNSAxMzIgMjk4LjggMTEyIDI1Ni41IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTcuNSA3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw4MCA4MGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEuNSA3QzMyLjEtMi4zIDE2LjktMi4zIDcuNSA3em00NjQgMGwtODAgODBjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwek03LjUgNTA1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXptNDY0IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw4MCA4MHoiXQogICAgfTsKICAgIGZhTWFuYXRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hbmF0LXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFkNSIsICJNMTkyIDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyAxMDkuMyAwIDE5MC4xIDAgMjg4TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC02Mi41IDQ0LjgtMTE0LjUgMTA0LTEyNS44TDE2OCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI5My44YzU5LjIgMTEuMiAxMDQgNjMuMyAxMDQgMTI1LjhsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTk3LjktNzMuMy0xNzguNy0xNjgtMTkwLjVMMjE2IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsidW5zb3J0ZWQiXSwgImYwZGMiLCAiTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6Il0KICAgIH07CiAgICBmYVVuc29ydGVkID0gZmFTb3J0OwogICAgZmFDaXJjbGVSYWRpYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJhZGlhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NjIsICJyYWRpYXRpb24tYWx0Il0sICJmN2JhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem04MCAwbDY0LjMgMGM4LjcgMCAxNS43LTcuMSAxNy4zLTE1LjYgNC40LTI0LjQgMTguMS00NS41IDM3LjItNTkuNyA3LjQtNS41IDEwLjYtMTUuNiA2LTIzLjZsLTMyLjUtNTYuM2MtNC4zLTcuNS0xMy45LTEwLjMtMjEuMi01LjUtNDguMiAzMS41LTgxLjMgODQuMi04Ni4zIDE0NC44LS43IDguOCA2LjUgMTYgMTUuMyAxNnptMTM3LjkgODkuOGMtOC41LTMuNy0xOC44LTEuNC0yMy41IDYuNmwtMzEgNTMuOGMtNC4zIDcuNS0xLjkgMTcuMiA1LjggMjEuMSAyNi4xIDEzLjIgNTUuNSAyMC43IDg2LjggMjAuN3M2MC43LTcuNSA4Ni44LTIwLjdjNy43LTMuOSAxMC4xLTEzLjYgNS44LTIxLjFsLTMxLTUzLjhjLTQuNi04LTE1LTEwLjMtMjMuNS02LjYtMTEuNyA1LTI0LjUgNy44LTM4LjEgNy44cy0yNi40LTIuOC0zOC4xLTcuOHpNMzUwLjQgMjQwLjRjMS42IDguNiA4LjUgMTUuNiAxNy4zIDE1LjZsNjQuMyAwYzguOCAwIDE2LjEtNy4yIDE1LjMtMTYtNS02MC42LTM4LjEtMTEzLjItODYuMy0xNDQuOC03LjMtNC44LTE2LjgtMi0yMS4yIDUuNUwzMDcuMyAxNTdjLTQuNiA4LTEuNCAxOC4xIDYgMjMuNiAxOS4xIDE0LjIgMzIuNyAzNS40IDM3LjIgNTkuN3pNMjU2IDMwNS43YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhUmFkaWF0aW9uQWx0ID0gZmFDaXJjbGVSYWRpYXRpb247CiAgICBmYUxhcHRvcENvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFwdG9wLWNvZGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjVmYyIsICJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtNjQgMCAwLTI0MC0zODQgMCAwIDI0MC02NCAwIDAtMjQwek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjIgMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFTaW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2ZCIsICJNMjg4IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzIgMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMTkyLTY0IDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NmwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQwLTgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODAgMCAwLTQwYzAtNC40IDMuNi04IDgtOGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDQwLTY0IDAgMC0xOTJ6Il0KICAgIH07CiAgICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWZyb20td2F0ZXItcHVtcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI2IiwgIk0xNDQgMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2LTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNzkuNmMxNy42LTIgMzYgMi41IDUxLjMgMTQgMy40IDIuNiA2LjEgMS40IDkuOC0uM2wuOC0uNGM1LjctMi42IDEyLjktNi45IDIxLjctMTMuNSAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjMtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSAxMC43LTguMSAyMi45LTEyLjcgMzUuMy0xNC4xbDAtNzkuNWMwLTI2LjUtMjEuNS00OC00OC00OGwtNTYgMCAwLTE0Mi4xIDQ3IDQ3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0OTcgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04OCA4OGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ3LTQ3IDAgMTQyLjEtMTM2IDAgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTQ0IDMyek00NzQuNiA0NzYuMWMxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAweiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lTGluZXNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lLWxpbmVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1pY3JvcGhvbmUtYWx0LXNsYXNoIl0sICJmNTM5IiwgIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTUxIDE1MSAwLTMwLjJjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMzI4IDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtMS45IDIyLjktMTEuOCA0My40LTI2LjkgNTlsMzMuOSAzMy45YzI1LjUtMjYgNDEuMy02MS42IDQxLjMtMTAwLjlsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA1Mi42LTIxLjEgMTAwLjItNTUuMyAxMzQuOEw1NjkgNTAzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3IDkuMUMtMi4zLS4zLTIuMy0xNS41IDctMjQuOXpNMjk3LjggMzY3LjdsNDEuNCA0MS40Yy04LjggMi40LTE3LjkgNC4zLTI3LjMgNS40bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUMxNjkuMyA0MDIuNyA5NiAzMjEuOSA5NiAyMjRsMC00MGMwLTUuMSAxLjYtOS45IDQuNC0xMy44bDQzLjYgNDMuNiAwIDEwLjJjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDQgMy4zIDAgNi42LS4xIDkuOC0uM3oiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUFsdFNsYXNoID0gZmFNaWNyb3Bob25lTGluZXNTbGFzaDsKICAgIGZhU2VydmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlcnZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjMzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjE2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4em0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFVc2VyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NCwgNjI0NzAsICJ1c2VyLWFsdCIsICJ1c2VyLWxhcmdlIl0sICJmMDA3IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZDOTUuOCAzMDQgMTYgMzgzLjggMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTk4LjUtNzkuOC0xNzguMy0xNzguMy0xNzguM2wtNTkuNCAweiJdCiAgICB9OwogICAgZmFVc2VyQWx0MiA9IGZhVXNlcjI7CiAgICBmYVVzZXJMYXJnZTIgPSBmYVVzZXIyOwogICAgZmFTbm93Zmxha2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dmbGFrZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDUyLCAxMDA1NF0sICJmMmRjIiwgIk0yODguMiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjIuMS0xNS0xNWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw0OSA0OSAwIDcwLjYtNjEuMi0zNS4zLTE3LjktNjYuOWMtMy40LTEyLjgtMTYuNi0yMC40LTI5LjQtMTdTOTUuMyA5OCA5OC43IDExMC44bDUuNSAyMC41LTUzLjctMzFDMzUuMiA5MS41IDE1LjYgOTYuNyA2LjggMTEycy0zLjYgMzQuOSAxMS43IDQzLjdsNTMuNyAzMS0yMC41IDUuNWMtMTIuOCAzLjQtMjAuNCAxNi42LTE3IDI5LjRzMTYuNiAyMC40IDI5LjQgMTdsNjYuOS0xNy45IDYxLjIgMzUuMy02MS4yIDM1LjMtNjYuOS0xNy45Yy0xMi44LTMuNC0yNiA0LjItMjkuNCAxN3M0LjIgMjYgMTcgMjkuNGwyMC41IDUuNS01My43IDMxQzMuMiAzNjUuMS0yIDM4NC43IDYuOCA0MDBzMjguNCAyMC42IDQzLjcgMTEuN2w1My43LTMxLTUuNSAyMC41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wxNy45LTY2LjkgNjEuMi0zNS4zIDAgNzAuNi00OSA0OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDE1LTE1IDAgNjIuMWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjIuMSAxNSAxNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ5LTQ5IDAtNzAuNiA2MS4yIDM1LjMgMTcuOSA2Ni45YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC01LjUtMjAuNSA1My43IDMxYzE1LjMgOC44IDM0LjkgMy42IDQzLjctMTEuN3MzLjYtMzQuOS0xMS43LTQzLjdsLTUzLjctMzEgMjAuNS01LjVjMTIuOC0zLjQgMjAuNC0xNi42IDE3LTI5LjRzLTE2LjYtMjAuNC0yOS40LTE3bC02Ni45IDE3LjktNjEuMi0zNS4zIDYxLjItMzUuMyA2Ni45IDE3LjljMTIuOCAzLjQgMjYtNC4yIDI5LjQtMTdzLTQuMi0yNi0xNy0yOS40bC0yMC41LTUuNSA1My43LTMxYzE1LjMtOC44IDIwLjYtMjguNCAxMS43LTQzLjdzLTI4LjQtMjAuNS00My43LTExLjdsLTUzLjcgMzEgNS41LTIwLjVjMy40LTEyLjgtNC4yLTI2LTE3LTI5LjRzLTI2IDQuMi0yOS40IDE3bC0xNy45IDY2LjktNjEuMiAzNS4zIDAtNzAuNiA0OS00OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xNSAxNSAwLTYyLjF6Il0KICAgIH07CiAgICBmYVRhdXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXVydXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTg0ZiIsICJNMzM2LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgNTguNS0yOC42IDExMC4zLTcyLjUgMTQyLjMgNTMuMiAzNC4xIDg4LjUgOTMuOCA4OC41IDE2MS43IDAgMTA2LTg2IDE5Mi0xOTIgMTkyUzAgNDI2IDAgMzIwQzAgMjUyLjEgMzUuMyAxOTIuNCA4OC41IDE1OC4zIDQ0LjYgMTI2LjMgMTYgNzQuNSAxNiAxNiAxNi0xLjcgMzAuMy0xNiA0OC0xNlM4MC0xLjcgODAgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJTMzA0IDc3LjkgMzA0IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xOTIgMTkyYTEyOCAxMjggMCAxIDAgMCAyNTYgMTI4IDEyOCAwIDEgMCAwLTI1NnoiXQogICAgfTsKICAgIGZhU2t1bGxDcm9zc2JvbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNrdWxsLWNyb3NzYm9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNjksIDk3NjBdLCAiZjcxNCIsICJNMzg0IDE0NEMzODQgNjQuNSAzMTIuNCAwIDIyNCAwUzY0IDY0LjUgNjQgMTQ0YzAgNDcuMSAyNS4xIDg4LjkgNjQgMTE1LjJsMCAyOC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjguOGMzOC45LTI2LjMgNjQtNjguMSA2NC0xMTUuMnpNMTYwIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0NS41IDMzOS43Yy02LjgtMTYuMy0yNS41LTI0LTQxLjgtMTcuMkwyMjQgMzk3LjMgNDQuMyAzMjIuNWMtMTYuMy02LjgtMzUgLjktNDEuOCAxNy4ycy45IDM1IDE3LjIgNDEuOEwxNDAuOCA0MzIgMTkuNyA0ODIuNUMzLjQgNDg5LjMtNC4zIDUwOCAyLjUgNTI0LjNzMjUuNSAyNCA0MS44IDE3LjJMMjI0IDQ2Ni43IDQwMy43IDU0MS41YzE2LjMgNi44IDM1LS45IDQxLjgtMTcuMnMtLjktMzUtMTcuMi00MS44TDMwNy4yIDQzMiA0MjguMyAzODEuNWMxNi4zLTYuOCAyNC0yNS41IDE3LjItNDEuOHoiXQogICAgfTsKICAgIGZhUGVzb1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVzby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjIiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCA2NC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMi0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjNjUuNiAwIDEyMi0zOS41IDE0Ni43LTk2bDM3LjMgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOCAwYy41LTUuMyAuOC0xMC42IC44LTE2cy0uMy0xMC43LS44LTE2bDI0LjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzcuMyAwQzM2MiA3MS41IDMwNS42IDMyIDI0MCAzMkwxMTIgMzJ6bTE5OS42IDk2bC0xNjcuNiAwIDAtMzIgOTYgMGMyOC40IDAgNTQgMTIuNCA3MS42IDMyek0xNDQgMTc2bDE5MC43IDBjLjkgNS4yIDEuMyAxMC41IDEuMyAxNnMtLjUgMTAuOC0xLjMgMTZsLTE5MC43IDAgMC0zMnptMTY3LjYgODBjLTE3LjYgMTkuNi00My4xIDMyLTcxLjYgMzJsLTk2IDAgMC0zMiAxNjcuNiAweiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZS1nbGFzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyNzg2M10sICJmNGUzIiwgIk0zMi42IDI1LjdDMzUuNiAxMC44IDQ4LjcgMCA2NCAwTDI1NiAwYzE1LjMgMCAyOC40IDEwLjggMzEuNCAyNS43TDMxNi44IDE3M2MyLjEgMTAuNSAzLjIgMjEuMiAzLjIgMzJsMCAzYzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTE1LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNS4yQzU1IDM1MCAwIDI4NS40IDAgMjA4bDAtM2MwLTEwLjcgMS4xLTIxLjQgMy4yLTMyTDMyLjYgMjUuN3pNNzcuNCAxMjhsMTY1LjEgMC0xMi44LTY0LTEzOS41IDAtMTIuOCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWhhbGYiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjc3NzcsICJ0ZW1wZXJhdHVyZS0yIiwgInRoZXJtb21ldGVyLTIiLCAidGhlcm1vbWV0ZXItaGFsZiJdLCAiZjJjOSIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtOTIuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMiA9IGZhVGVtcGVyYXR1cmVIYWxmOwogICAgZmFUaGVybW9tZXRlcjIgPSBmYVRlbXBlcmF0dXJlSGFsZjsKICAgIGZhVGhlcm1vbWV0ZXJIYWxmID0gZmFUZW1wZXJhdHVyZUhhbGY7CiAgICBmYVRpY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aWNrZXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MDNdLCAiZjE0NSIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA2NEMwIDIwMC44IDcuNCAyMDcuNyAxNS43IDIxMC42IDM0LjUgMjE3LjEgNDggMjM1IDQ4IDI1NnMtMTMuNSAzOC45LTMyLjMgNDUuNEM3LjQgMzA0LjMgMCAzMTEuMiAwIDMyMGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC04LjgtNy40LTE1LjctMTUuNy0xOC42LTE4LjgtNi41LTMyLjMtMjQuNC0zMi4zLTQ1LjRzMTMuNS0zOC45IDMyLjMtNDUuNGM4LjMtMi45IDE1LjctOS44IDE1LjctMTguNmwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMzM2bDAtMTYwLTI1NiAwIDAgMTYwIDI1NiAwek0xMTIgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yODggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il0KICAgIH07CiAgICBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTk4IiwgIk00OTYgNTc2YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNODEgNTI5Yy05LjQgOS4zLTI0LjUgOS4zLTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOUw4MSA1Mjl6bTMwLjItMjk0LjRjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4zIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2wxMiAxMmMtLjggNy0xLjIgMTQuMi0xLjIgMjEuNCAwIDIwIDMgMzkuMyA4LjcgNTcuNC0zNi44IDIxLjgtODUgMTctMTE2LjYtMTQuN0wxNjUuNiA0NDQuMyA4MSA1MjlDNjkuNyA1MTcuNyA1OC40IDUwNi4zIDQ3IDQ5NWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xek00OTYgNDc2YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptMC0xNDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNiA4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6TTIxNS4yIDEzMC42YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDI0LjItNS45IDUwLjEtMi4xIDcxLjkgMTAuOC0zMi4yIDI0LjktNTYuMiA1OS44LTY3LjQgMTAwLjEtMy44LTIuOC03LjUtNi0xMS05LjVsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNTI2LjcgMTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDAgOC44IDguOCA5LjMgMjIuNyAxLjcgMzIuMUw1NjAuNiA0OSA0NDYuMiAxNjMuNGM3LjcgMSAxNS4zIDMgMjIuNSA1LjlMNTI3IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljMy4yIDMuMiA0LjcgNy40IDQuNyAxMS42LTE3LjctNS40LTM2LjUtOC4zLTU1LjktOC4zLTM0LjIgMC02Ni4zIDguOS05NC4xIDI0LjZsLTkyLjctOTIuN2MtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMUw0NjUgNDkgNDA2LjcgMTA3LjNjMi44IDcuMSA0LjcgMTQuNSA1LjggMjIuMUw1MjYuNyAxNXoiXQogICAgfTsKICAgIGZhQXJyb3dzVHVyblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0YzAiLCAiTTMxMy40LTYuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDEyOCAxMjggMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgMjQxLjcgMCAyMjRsMC0zMkMwIDEyMS4zIDU3LjMgNjQgMTI4IDY0bDIxMC43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptLTk2IDI1NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDM4NCA5NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFDYW5keUNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FuZHktY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg2IiwgIk00MjEuOCAzOS42QzQ1MiA4NS4yIDQ1Ni41IDE0Mi45IDQzNS4xIDE5MmwtMTY1LjQgMCA0MS40LTQxLjRjLjgtLjggMS41LTEuNiAyLjItMi40TDQyMS44IDM5LjZ6TTI2OCAxMDIuOWMtLjggLjctMS42IDEuNC0yLjQgMi4ybC0yOC4xIDI4LjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNUwxNzUgMTQuNkMyMjkuOS00MC4yIDMxNC41LTQ2LjcgMzc2LjUtNS42TDI2OCAxMDIuOXpNMTI1LjcgMzM2bDgwLTgwIDE4MSAwLTgyLjUgODIuNSAwLTIuNS0xNzguNSAwem0xMTcgNjRMMTQxLjQgNTAxLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNWwxMC43LTEwLjcgMTgxIDB6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlZWxjaGFpciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTkzIiwgIk0xMzYgNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTcuOSAxOTcuNmwxMi42IDYzYy0zOC42IDEyLjQtNjYuNSA0OC43LTY2LjUgOTEuNCAwIDUzIDQzIDk2IDk2IDk2IDM1LjYgMCA2Ni43LTE5LjQgODMuMy00OC4yIDIuMyAuMSA0LjYgLjIgNyAuMmw0LjEgMGMxIDAgMi4xIDAgMy4xIDBsNTUuMiAwYy0yMC40IDY0LjktODEgMTEyLTE1Mi43IDExMi04OC40IDAtMTYwLTcxLjYtMTYwLTE2MCAwLTczLjggNTAtMTM1LjkgMTE3LjktMTU0LjR6bTE0OC42LTI4LjFsMjMuNyAxMTguNSA2MC41IDBjMzMuMyAwIDYzLjIgMjAuNyA3NC45IDUxLjlsMjUuNSA2OCAxOC43LTYuMmMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNWwtNDggMTZjLTE2LjMgNS40LTM0LTMtNDAuMS0xOS4xbC0zNi4zLTk2LjljLTIuMy02LjItOC4zLTEwLjQtMTUtMTAuNGwtODYuMSAwYy0uNCAwLS44IDAtMS4zIDBsLTEzLjEgMGMtMzAuNSAwLTU2LjgtMjEuNS02Mi44LTUxLjRMMTY1LjMgMTg5LjdjLTYuNC0zMS45IDE4LTYxLjcgNTAuNi02MS43IDI0LjYgMCA0NS44IDE3LjQgNTAuNiA0MS41eiJdCiAgICB9OwogICAgZmFTcGVsbENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwZWxsLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4OTEiLCAiTTEyMCAzMmMtNDguNiAwLTg4IDM5LjQtODggODhsMCAxNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTY4YzAtNDguNi0zOS40LTg4LTg4LTg4bC0xNiAwem00MCAxMjhsLTY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDB6TTMwNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMGM0OC42IDAgODgtMzkuNCA4OC04OCAwLTIzLjYtOS4zLTQ1LTI0LjQtNjAuOCAxMC4zLTE0LjQgMTYuNC0zMi4xIDE2LjQtNTEuMiAwLTQ4LjYtMzkuNC04OC04OC04OGwtNjQgMHptNjQgMTEybC0zMiAwIDAtNDggMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMzM2IDI1NmwwLTQ4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDB6bTIzMyA4NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTEwNS43IDEzMi4xLTM4LjctMzguN2MtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi40IDYuNCAxNS4zIDkuOCAyNC40IDkuM3MxNy41LTQuOSAyMy4yLTEyTDU2OSAzNDB6Il0KICAgIH07CiAgICBmYVZvbHVtZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtb2ZmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwMjYiLCAiTTk2IDM1MmwtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw0OCAwIDEzNC4xLTExOS4yYzYuNC01LjcgMTQuNi04LjggMjMuMS04LjggMTkuMiAwIDM0LjggMTUuNiAzNC44IDM0LjhsMCAzNzguNGMwIDE5LjItMTUuNiAzNC44LTM0LjggMzQuOC04LjUgMC0xNi43LTMuMS0yMy4xLTguOEw5NiAzNTJ6Il0KICAgIH07CiAgICBmYUx1bmdzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImx1bmdzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NzI5XSwgImY2MDQiLCAiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0MS45LTMyIDE5LjIgMC0xMTYuN2MwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMjIgMCA0My43LTUuMSA2My40LTE1bDUtMi41YzM3LjQtMTguNyA2MS01Ni45IDYxLTk4LjhsMC0xMjggNjQtMzguNCA2NCAzOC40IDAgMTI4YzAgNDEuOCAyMy42IDgwLjEgNjEgOTguOGw1IDIuNWMxOS43IDkuOCA0MS40IDE1IDYzLjQgMTUgNTIuMiAwIDk0LjUtNDIuMyA5NC41LTk0LjVsMC02LjJjMC0xMTEuMS0zNi43LTIxOS0xMDQuNC0zMDdMNDI4LjkgNDguN2MtOC4xLTEwLjYtMjAuNy0xNi43LTM0LTE2LjctMjMuNyAwLTQyLjkgMTkuMi00Mi45IDQyLjlsMCAxMTguMi0zMi0xOS4yIDAtMTQxLjl6Il0KICAgIH07CiAgICBmYUJvb2ttYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rbWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCAiZjAyZSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0ODBjMCAxMS41IDYuMiAyMi4yIDE2LjIgMjcuOHMyMi4zIDUuNSAzMi4yLS40TDE5MiA0MjEuMyAzMzUuNSA1MDcuNGM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMzg0IDQ5MS41IDM4NCA0ODBsMC00MTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHoiXQogICAgfTsKICAgIGZhQmFyY29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMmEiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnptMjA4LThsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptLTk2IDBsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhTGlzdE9sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3Qtb2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC0xLTIiLCAibGlzdC1udW1lcmljIl0sICJmMGNiIiwgIk0wIDcyQzAgNTguOCAxMC43IDQ4IDI0IDQ4bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMDQgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtODAtMjQgMEMxMC43IDk2IDAgODUuMyAwIDcyek0zMC40IDMwMS4yQzQxLjggMjkyLjYgNTUuNyAyODggNzAgMjg4bDQuOSAwYzMzLjcgMCA2MS4xIDI3LjQgNjEuMSA2MS4xIDAgMTkuNi05LjQgMzcuOS0yNS4yIDQ5LjRsLTI0IDE3LjUgMzMuMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05MC43IDBDMTMuMSA0NjQgMCA0NTAuOSAwIDQzNC43IDAgNDI1LjMgNC41IDQxNi41IDEyLjEgNDExbDcwLjUtNTEuM2MzLjQtMi41IDUuNC02LjQgNS40LTEwLjYgMC03LjItNS45LTEzLjEtMTMuMS0xMy4xTDcwIDMzNmMtMy45IDAtNy43IDEuMy0xMC44IDMuNkwzOC40IDM1NS4yYy0xMC42IDgtMjUuNiA1LjgtMzMuNi00LjhTLTEgMzI0LjggOS42IDMxNi44bDIwLjgtMTUuNnpNMjI0IDY0bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDE2MGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUxpc3QxMiA9IGZhTGlzdE9sOwogICAgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sOwogICAgZmFGaWxlQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTVhMSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhQ3ViZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjdWJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjIiLCAiTTIyNC4zLTIuNWMxOS44LTExLjQgNDQuMi0xMS40IDY0IDBMNDY0LjIgOTljMTkuOCAxMS40IDMyIDMyLjYgMzIgNTUuNGwwIDIwM2MwIDIyLjktMTIuMiA0NC0zMiA1NS40TDI4OC4zIDUxNC41Yy0xOS44IDExLjQtNDQuMiAxMS40LTY0IDBMNDguNSA0MTNjLTE5LjgtMTEuNC0zMi0zMi42LTMyLTU1LjRsMC0yMDNjMC0yMi45IDEyLjItNDQgMzItNTUuNEwyMjQuMy0yLjV6bTIwNy44IDM2MGwwLTE2Ni4xLTE0My44IDgzIDAgMTY2LjEgMTQzLjgtODN6Il0KICAgIH07CiAgICBmYVRhcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFwZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGRiIiwgIk00MTIuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MCAwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0UzMyIDEzMi4zIDMyIDI1NiAxMzIuMyA0ODAgMjU2IDQ4MGwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTMxLjIgMHpNMjU2IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptNDggOTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhQm9tYiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib21iIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTYzXSwgImYxZTIiLCAiTTQ4MC0xNmM2LjkgMCAxMyA0LjQgMTUuMiAxMC45bDEzLjUgNDAuNCA0MC40IDEzLjVDNTU1LjYgNTEgNTYwIDU3LjEgNTYwIDY0cy00LjQgMTMtMTAuOSAxNS4ybC00MC40IDEzLjUtMTMuNSA0MC40QzQ5MyAxMzkuNiA0ODYuOSAxNDQgNDgwIDE0NHMtMTMtNC40LTE1LjItMTAuOWwtMTMuNS00MC40LTQwLjQtMTMuNUM0MDQuNCA3NyA0MDAgNzAuOSA0MDAgNjRzNC40LTEzIDEwLjktMTUuMmw0MC40LTEzLjUgMTMuNS00MC40QzQ2Ny0xMS42IDQ3My4xLTE2IDQ4MC0xNnpNMzIxLjQgOTcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTAuOSAxMC45YzcuOSAyMiAxMi4yIDQ1LjcgMTIuMiA3MC41IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFMzMiA0MTguOSAzMiAzMDQgMTI1LjEgOTYgMjQwIDk2YzI0LjcgMCA0OC41IDQuMyA3MC41IDEyLjNsMTAuOS0xMC45ek0xNDQgMzA0YzAtNTMgNDMtOTYgOTYtOTYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6Il0KICAgIH07CiAgICBmYVNjYWxlVW5iYWxhbmNlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2FsZS11bmJhbGFuY2VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhbGFuY2Utc2NhbGUtbGVmdCJdLCAiZjUxNSIsICJNNTE5LjggNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxNi4zLTMuOSA0OTkuNiAxLjZsLTExMyAzNy43Yy0xMy45LTIzLjUtMzkuNi0zOS4zLTY4LjktMzkuMy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDMgLjIgNS45IC41IDguOEwxMTUuNiAxMjkuNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDEzNS41LTQ1LjJjNC41IDMuMiA5LjMgNS45IDE0LjQgOC4ybDAgMzI2LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMjk0LjdjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM3LjMgMjg4bDcyLjQtMTI0LjIgNzIuNCAxMjQuMi0xNDQuOSAwem03Mi40IDk2YzYyLjkgMCAxMTUuMi0zNCAxMjYtNzguOSAyLjYtMTEtMS0yMi4zLTYuNy0zMi4xTDUzMy44IDEwOS44Yy01LTguNi0xNC4yLTEzLjgtMjQuMS0xMy44cy0xOS4xIDUuMy0yNC4xIDEzLjhMMzkwLjQgMjczLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjEgMTAuOCA0NC44IDYzLjEgNzguOSAxMjYgNzguOXpNMTI2LjggMjkxLjhsNzIuNCAxMjQuMi0xNDQuOSAwIDcyLjQtMTI0LjJ6TS45IDQzMy4xQzExLjcgNDc4IDY0IDUxMiAxMjYuOCA1MTJzMTE1LjItMzQgMTI2LTc4LjljMi42LTExLTEtMjIuMy02LjctMzIuMUwxNTAuOSAyMzcuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDcuNiA0MDEuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMXoiXQogICAgfTsKICAgIGZhQmFsYW5jZVNjYWxlTGVmdCA9IGZhU2NhbGVVbmJhbGFuY2VkOwogICAgZmFTcXVhcmVDYXJldExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1sZWZ0Il0sICJmMTkxIiwgIk0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2ek0xMjggMjU2YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40UzI4OCAxNDIuNSAyODggMTUybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZUxlZnQyID0gZmFTcXVhcmVDYXJldExlZnQyOwogICAgZmFSdWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWxlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIwN10sICJmNTQ1IiwgIk0yMDkuMSA1MTYuMmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjguMSA0MDMuMWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsMTctMTcgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDMzLjktMzMuOSA1MC45IDUwLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01MC45LTUwLjkgMzMuOS0zMy45IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMTctMTdjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBMNTQ4LjUgMTA4LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjA5LjEgNTE2LjJ6Il0KICAgIH07CiAgICBmYUkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwNV0sICI0OSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDk2IDAgMCAzMjAtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMCAwLTMyMCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFWb2x1bWVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm9sdW1lLW11dGUiLCAidm9sdW1lLXRpbWVzIl0sICJmNmE5IiwgIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzY3IDE3NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTQ3IDQ3LTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhVm9sdW1lTXV0ZSA9IGZhVm9sdW1lWG1hcms7CiAgICBmYVZvbHVtZVRpbWVzID0gZmFWb2x1bWVYbWFyazsKICAgIGZhQXJjaHdheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcmNod2F5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTciLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnptMCAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDAgMC0xMjhjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDEyOCAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI3Mi00NDggMCAwIDI3MnoiXQogICAgfTsKICAgIGZhUGVyc29uRGlnZ2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZGlnZ2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkaWdnaW5nIl0sICJmODVlIiwgIk0yMDggNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMC41IDE4MS4zYzUuOS0xMS45IDIwLjMtMTYuNyAzMi4yLTEwLjdsMjQuNiAxMi4zIDEyLjItMjAuNGMxOC45LTMxLjUgNTMuMi01MC41IDg5LjYtNTAuNSA0Ni4yIDAgODcuNyAzMC41IDEwMC41IDc1LjRsMzIuMiAxMTIuNyA5Mi45IDQ2LjQgMjUuOC00M2M1LjgtOS42IDE2LjItMTUuNSAyNy40LTE1LjVzMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTNTU1LjUgNTEyIDU0NCA1MTJsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4yTDM3MCAzODcuOCAyMS4zIDIxMy41Yy0xMS45LTUuOS0xNi43LTIwLjMtMTAuNy0zMi4yek05NC4zIDMwNy40bDExMiA1NmMxMC44IDUuNCAxNy43IDE2LjUgMTcuNyAyOC42bDAgODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OC4yLTYxLjMtMzAuNy0zNi4zIDEwOWMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMlMtMy45IDQ4Ni42IDEuNyA0NjkuOWw0OC0xNDRjMi45LTguOCA5LjUtMTUuOSAxOC4xLTE5LjRzMTguMy0zLjIgMjYuNiAuOXoiXQogICAgfTsKICAgIGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZzsKICAgIGZhR2F1Z2VIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdWdlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjQ2MSwgInRhY2hvbWV0ZXItYWx0IiwgInRhY2hvbWV0ZXItYWx0LWZhc3QiXSwgImY2MjUiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0yNTYgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMTYuMi02LTMxLjEtMTYtNDIuM2w2OS41LTEzOC45YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMnMtMjYuMy0xLjEtMzIuMiAxMC43TDI2MS4xIDI4OC4yYy0xLjctLjEtMy40LS4yLTUuMS0uMi0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFUYWNob21ldGVyQWx0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYVRhY2hvbWV0ZXJBbHRGYXN0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYUdlbmRlcmxlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VuZGVybGVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjJkIiwgIk0xOTIgMTI4YTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCAzMjBhMTkyIDE5MiAwIDEgMCAwLTM4NCAxOTIgMTkyIDAgMSAwIDAgMzg0eiJdCiAgICB9OwogICAgZmFDbG91ZFN1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zdW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5OTI1XSwgImY2YzQiLCAiTTIwOC4zIDE5MmM0My4xIDAgODAuNSAyNC40IDk5LjIgNjAuMSAxNC43LTE3LjIgMzYuNC0yOC4xIDYwLjgtMjguMSA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC45LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0zMjAgMGMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNy03OC41IDY2LTkxLjItMS4zLTYuOC0yLTEzLjctMi0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyem0xOTItMjIzLjhjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFsNDcuMyA3MC40IDgzLjMtMTYuM2M1LjItMSAxMC42IC43IDE0LjMgNC40IDMuOCAzLjggNS40IDkuMiA0LjQgMTQuNGwtMTYuMyA4My4zIDcwLjQgNDcuM2M0LjQgMyA3LjEgOCA3LjEgMTMuMyAwIDUuMy0yLjYgMTAuMy03IDEzLjJsLTcwLjQgNDcuMyAxNC41IDc0LjJjLTE3LjItMjEuNy00MC40LTM4LjQtNjcuMi00Ny4zLTIuNS0xMi43LTYuOS0yNC42LTEyLjgtMzUuNyA5LjYtMTQuOSAxNS4yLTMyLjcgMTUuMi01MS43IDAtNTMtNDMtOTYtOTYtOTYtNDcuOSAwLTg3LjYgMzUuMS05NC44IDgwLjktMjAuOS0xNi00NS45LTI3LTczLjEtMzEuMWwyMS41LTE0LjUtMTYuMy04My4yLS4zLTJjLS4zLTQuNiAxLjMtOS4xIDQuNi0xMi40IDMuOC0zLjggOS4yLTUuNCAxNC40LTQuNGw4My4zIDE2LjMgNDcuMy03MC40IDEuMi0xLjZjMy0zLjUgNy40LTUuNSAxMi4xLTUuNXptMCAxNzUuOGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDMuOC0uNSA3LjYtMS40IDExLjEtMjEuNy0xNi45LTQ4LjktMjcuMS03OC42LTI3LjEtNC42IDAtOS4xIC4yLTEzLjUgLjcgNi40LTE5IDI0LjMtMzIuNyA0NS41LTMyLjd6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NTk0XSwgImYwNjEiLCAiTTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM3MC43IDAtMTA1LjQgMTA1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzMDksIDYyNjYyLCAiaGFuZHNoYWtlLWFsdCIsICJoYW5kc2hha2Utc2ltcGxlIl0sICJmMmI1IiwgIk0yNjguOSA4NS4yTDE1Mi4zIDIxNC44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTgyLjdMMjIzLjQgNjQgMTgzLjggNjRjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDExMiA5NiAwIDMyIDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0NDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHQyID0gZmFIYW5kc2hha2UyOwogICAgZmFIYW5kc2hha2VTaW1wbGUyID0gZmFIYW5kc2hha2UyOwogICAgZmFQZXJzb25Ta2lpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNraWluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk5NzUsICJza2lpbmciXSwgImY3YzkiLCAiTTQxNiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIuNyAzMDAuOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4ybDE5Ny44IDEwMi43IDYyLjMtODcuMi04Mi05Mi4yYy0xMS0xMi40LTE2LjItMjcuNS0xNi4yLTQyLjRsMTExLjYgNTMuNCA0Mi45IDQ4LjJjMTQuOSAxNi43IDE2LjIgNDEuNiAzLjIgNTkuOGwtNjQuNCA5MC4yIDEyOC4zIDY2LjZjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzMzLjNDMS4yIDMyNy4yLTMuNCAzMTIuNyAyLjcgMzAwLjl6TTEwMyA0OS42bDE4IDguNyA4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTcgODQuOCA0MSAuNC0uMiA3Ni4xLTMzLjhjMzEuMy0xMy45IDY3LjktLjcgODMuMiAyOS45bDI4LjkgNTcuOCA2OC43IDI3LjVjMTYuNCA2LjYgMjQuNCAyNS4yIDE3LjggNDEuNnMtMjUuMiAyNC40LTQxLjYgMTcuOEwzOTMuOCAyMjRjLTEwLjktNC40LTE5LjgtMTIuNi0yNS4xLTIzLjFsLTExLjUtMjMuMWMtMTYuNCA5LjQtMjUuOSAxNC44LTI4LjUgMTYuM2wtNy42LTMuNy0xODUuNi04OS42LTkuMiAxOC4zYy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE3LjktMTcuNi04LjVDODEuMSA3NC42IDc3LjggNjUgODEuNiA1N1M5NSA0NS43IDEwMyA0OS42eiJdCiAgICB9OwogICAgZmFTa2lpbmcgPSBmYVBlcnNvblNraWluZzsKICAgIGZhQnJpZGdlV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLXdhdGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0Y2UiLCAiTTY0IDY0bDUxMiAwIDAgMTEyYy0zNy42IDkuNC02NCA0My4yLTY0IDgybDAgNzYuNGMtMjEtOS43LTQzLjUtMTQuNS02Ni0xNC40LTEwIC4xLTIwLjEgMS4xLTMwIDMuMWwwLTM1LjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMi43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0yNy43IC4yLTU1LjQgNy44LTgwIDIzbDAtODVjMC0zOC44LTI2LjQtNzIuNi02NC04Mkw2NCA2NHpNNDAzLjQgNDQ0LjFDMzc5LjEgNDYyLjMgMzUxLjEgNDgwIDMyMCA0ODBzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ05nbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1uZ28iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNyIsICJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwyMDggMCAwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTMwNCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xNjAgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek01MjAgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04MGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptLTQgNDRjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgODBjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MHptLTE2OCAwbDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTI0YzAtMTEtOS0yMC0yMC0yMGwtOCAwYy0xMSAwLTIwIDktMjAgMjAgMCA2LjUgMy4xIDEyLjQgOCAxNmwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMjAuNCAwYzEuOSA5LjEgOS45IDE2IDE5LjYgMTYgMTEgMCAyMC05IDIwLTIwIDAtMTkuOS0xNi4xLTM2LTM2LTM2bC0yNCAwYy0yNC4zIDAtNDQgMTkuNy00NCA0NHptLTkwLjEtMzIuOWMtNC4xLTguMy0xMy41LTEyLjctMjIuNS0xMC41UzIyMCAzOTAuNyAyMjAgNDAwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDMuMyAyNi4xIDUyLjJjNC4xIDguMyAxMy41IDEyLjcgMjIuNSAxMC41UzMyNCA1MzcuMyAzMjQgNTI4bDAtMTI4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDQzLjMtMjYuMS01Mi4yeiJdCiAgICB9OwogICAgZmFJZ2xvbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZ2xvbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmN2FlIiwgIk0zMjAgMzMuOGwwIDEyNi4yLTI3MS41IDBjNTEuNy03Ny4yIDEzOS42LTEyOCAyMzkuNS0xMjggMTAuOCAwIDIxLjUgLjYgMzIgMS44ek0zNjggMTYwbDAtMTE2LjdjNjYgMTkgMTIyLjIgNjEgMTU5LjUgMTE2LjdMMzY4IDE2MHpNMjIuNiAyMDhsNzMuNCAwIDAgMTEyLTk2IDBjMC0zOS43IDgtNzcuNiAyMi42LTExMnpNMTc2IDMyMGwtMzIgMCAwLTExMiAyODggMCAwIDExMi0zMiAwIDAgNDggMTc2IDAgMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjQgMTc2IDAgMC00OHptMzA0IDBsMC0xMTIgNzMuNCAwQzU2OCAyNDIuNCA1NzYgMjgwLjMgNTc2IDMyMGwtOTYgMHpNMjg4IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFDaXJjbGVEb2xsYXJUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvbGxhci10by1zbG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImRvbmF0ZSJdLCAiZjRiOSIsICJNOTYgMjI0YTE5MiAxOTIgMCAxIDEgMzg0IDAgMTkyIDE5MiAwIDEgMSAtMzg0IDB6bTE3Ni05MmwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwyNDggMjcyYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwek00OCAzNDRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRG9uYXRlID0gZmFDaXJjbGVEb2xsYXJUb1Nsb3Q7CiAgICBmYVkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMV0sICI1OSIsICJNNTggNDUuNEM0Ny44IDMxIDI3LjggMjcuNyAxMy40IDM4Uy00LjMgNjguMiA2IDgyLjZMMTYwIDI5OC4zIDE2MCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0OS43IDE1NC0yMTUuN2MxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZTMzM2LjIgMzEgMzI2IDQ1LjRMMTkyIDIzMi45IDU4IDQ1LjR6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZVdpbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMSwgInNtaWxlLXdpbmsiXSwgImY0ZGEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhU21pbGVXaW5rMiA9IGZhRmFjZVNtaWxlV2luazI7CiAgICBmYURpY2VGb3VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZm91ciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTldLCAiZjUyNCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzUyIDE2MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludC10ZWFycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTMxNSwgImdyaW4tc3F1aW50LXRlYXJzIl0sICJmNTg2IiwgIk01NjAgMzUuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0NjkuMSA5M2MtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQ2MS4zIDIuOCA0ODMtMTYgNTA4LjYtMTYgNTM3LTE2IDU2MCA3IDU2MCAzNS40ek00MDMuNSA2OC4xYy02IDQyLjIgMzAuMiA3OC40IDcyLjQgNzIuNGwzNy44LTUuNEM1NjUuNyAyMzIgNTUwLjggMzU1LjMgNDY5IDQzN3MtMjA1IDk2LjYtMzAxLjkgNDQuN2w1LjQtMzcuOGM2LTQyLjItMzAuMi03OC40LTcyLjQtNzIuNGwtMzcuOCA1LjRDMTAuMyAyODAgMjUuMiAxNTYuNyAxMDcgNzVTMzEyLTIxLjcgNDA4LjkgMzAuM2wtNS40IDM3Ljh6TTQxNy44IDIwMWMtMTkuMSAzNi40LTQ1LjYgNzIuNy03OC45IDEwNnMtNjkuNiA1OS44LTEwNiA3OC45Yy0xMS4xIDUuOC0xMi40IDIxLjQtMS4xIDI2LjYgNTkuMiAyNy41IDEzMS44IDE2LjggMTgwLjYtMzJzNTkuNS0xMjEuNCAzMi0xODAuNmMtNS4zLTExLjMtMjAuOC0xMC0yNi42IDEuMXpNMTEzLjkgMjcwLjZjMS43IDggOSAxMy40IDE3LjEgMTIuN2w0My4xLTMuOS0zLjkgNDMuMWMtLjcgOC4xIDQuNyAxNS41IDEyLjcgMTcuMXMxNS45LTIuOSAxOC40LTEwLjZsMjgtODQuNmMxLjktNS43IC40LTEyLjEtMy45LTE2LjNzLTEwLjYtNS44LTE2LjMtMy45bC04NC42IDI4Yy03LjcgMi42LTEyLjMgMTAuNS0xMC42IDE4LjV6TTMxNS4yIDk5LjFjLjctOC4xLTQuNy0xNS41LTEyLjctMTcuMXMtMTUuOSAyLjktMTguNSAxMC42bC0yOCA4NC42Yy0xLjkgNS43LS40IDEyLjEgMy45IDE2LjNzMTAuNiA1LjggMTYuMyAzLjlsODQuNi0yOGM3LjctMi42IDEyLjMtMTAuNSAxMC42LTE4LjRzLTktMTMuNC0xNy4xLTEyLjdsLTQzLjEgMy45IDMuOS00My4xek02MC4xIDQyNS43bDQ2LjctNi43YzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDMTE0LjcgNTA5LjIgOTMgNTI4IDY3LjQgNTI4IDM5IDUyOCAxNiA1MDUgMTYgNDc2LjYgMTYgNDUxIDM0LjggNDI5LjMgNjAuMSA0MjUuN3oiXQogICAgfTsKICAgIGZhR3JpblNxdWludFRlYXJzMiA9IGZhRmFjZUdyaW5TcXVpbnRUZWFyczI7CiAgICBmYUZpbGVBdWRpbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hdWRpbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM3IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXptNTMuOCAxODUuMmMtOS4xLTYuMy0yMS41LTQuMS0yNy44IDVzLTQuMSAyMS41IDUgMjcuOGMyMy45IDE2LjcgMzkuNCA0NC4zIDM5LjQgNzUuNXMtMTUuNiA1OC45LTM5LjQgNzUuNWMtOS4xIDYuMy0xMS4zIDE4LjgtNSAyNy44czE4LjggMTEuMyAyNy44IDVjMzQuMS0yMy44IDU2LjYtNjMuNSA1Ni42LTEwOC4zUzI5NiAyNjcuNSAyNjEuOCAyNDMuN3pNODAgMzEyYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMCAyNy4yIDM0YzMgMy44IDcuNiA2IDEyLjUgNmwuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZsLS4zIDBjLTQuOSAwLTkuNSAyLjItMTIuNSA2bC0yNy4yIDM0LTI0IDB6bTEyOCA3Mi4yYzAgMTAuNyAxMC41IDE4LjIgMTguOSAxMS42IDEyLjktMTAuMyAyMS4xLTI2LjEgMjEuMS00My44cy04LjItMzMuNS0yMS4xLTQzLjhjLTguNC02LjctMTguOSAuOS0xOC45IDExLjZsMCA2NC41eiJdCiAgICB9OwogICAgZmFBcnJvd3NEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1kb3duLXRvLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOCIsICJNMjE0LjYgMzEwLjZsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMjc0LjcgOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMjU2IDBsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTI0Mi43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNDIuNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJ6Il0KICAgIH07CiAgICBmYUcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwM10sICI0NyIsICJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwYzc3LjQgMCAxNDItNTUgMTU2LjgtMTI4TDI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ0IDBjMjUuOCAwIDQ5LjYgMjEuNCA0Ny4yIDUwLjYtOS41IDExNS0xMDUuOCAyMDUuNC0yMjMuMiAyMDUuNC0xMjMuNyAwLTIyNC0xMDAuMy0yMjQtMjI0UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1NyAxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2eiJdCiAgICB9OwogICAgZmFWaWhhcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmloYXJhIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2YTciLCAiTTI3My42LTMuMmM4LjUtNi40IDIwLjMtNi40IDI4LjggMEw0NDMuMiAxMDIuNGM4LjMgNi4yIDE4LjQgOS42IDI4LjggOS42IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgNDggNTguNyA2NCAxMy4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQ4IDI0LjQgMzIgMTUuNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTI4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjIuMSAwIDE3LjktMzIgMC00OC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTMuMyAwIDU4LjctNjQgMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzEwLjQgMCAyMC41LTMuNCAyOC44LTkuNkwyNzMuNi0zLjJ6TTEyOCAzNjhsMzIwIDAgMC00OC0zMjAgMCAwIDQ4ek0zODQgMTYwbC0xOTIgMCAwIDQ4IDE5MiAwIDAtNDh6Il0KICAgIH07CiAgICBmYUZsYWdDaGVja2VyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZy1jaGVja2VyZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzddLCAiZjExZSIsICJNMzIgMEM0OS43IDAgNjQgMTQuMyA2NCAzMmwwIDE2IDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNSA0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMWwwIDI3OS43YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNC0zNy45LTE5LTgxLjQtMjMuNy0xMjIuNS0xMy40TDY0IDM4NCA2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHpNNjQgMTg3LjFsNjQtMTMuOSAwIDY1LjUtNjQgMTMuOSAwIDY1LjUgNDguOC0xMi4yYzUuMS0xLjMgMTAuMS0yLjQgMTUuMi0zLjNsMC02My45IDM4LjktOC40YzguMy0xLjggMTYuNy0yLjUgMjUuMS0yLjFsMC02NGMxMy42IC40IDI3LjIgMi42IDQwLjQgNi40bDIzLjYgNi45IDAgNjYuNy00MS43LTEyLjNjLTcuMy0yLjEtMTQuOC0zLjQtMjIuMy0zLjhsMCA3MS40YzIxLjggMS45IDQzLjMgNi43IDY0IDE0LjRsMC02OS44IDIyLjcgNi43YzEzLjUgNCAyNy4zIDYuNCA0MS4zIDcuNGwwLTY0LjJjLTcuOC0uOC0xNS42LTIuMy0yMy4yLTQuNWwtNDAuOC0xMiAwLTYyYy0xMy0zLjgtMjUuOC04LjgtMzguMi0xNS04LjItNC4xLTE2LjktNy0yNS44LTguOGwwIDcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42bC0yNS4zIDUuNSAwLTc1LjItNjQgMTYgMCA3My4xek0zMjAgMzM1LjdjMTYuOCAxLjUgMzMuOS0uNyA1MC02LjhsMTQtNS4yIDAtNzEuNy03LjkgMS44Yy0xOC40IDQuMy0zNy4zIDUuNy01Ni4xIDQuNWwwIDc3LjR6bTY0LTE0OS40bDAtNzAuOGMtMjAuOSA2LjEtNDIuNCA5LjEtNjQgOS4xbDAgNjkuNGMxMy45IDEuNCAyOCAuNSA0MS43LTIuNmwyMi4zLTUuMnoiXQogICAgfTsKICAgIGZhR2F1Z2VTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdhdWdlLXNpbXBsZS1tZWQiLCAidGFjaG9tZXRlci1hdmVyYWdlIl0sICJmNjI5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdhdWdlU2ltcGxlTWVkID0gZmFHYXVnZVNpbXBsZTsKICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UgPSBmYUdhdWdlU2ltcGxlOwogICAgZmFSaWdodExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleGNoYW5nZS1hbHQiXSwgImYzNjIiLCAiTTUwMi42IDE1MC42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDIzNi45IDM1MiAyMjRsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6bS0zOTcuMyAzNTJsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMjc1LjEgMTYwIDI4OGwwIDY0IDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMCAwIDY0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45eiJdCiAgICB9OwogICAgZmFFeGNoYW5nZUFsdCA9IGZhUmlnaHRMZWZ0OwogICAgZmFQaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaWxscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDg0IiwgIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyek0xNzYgMzY4YzAtNDguNyAxOC4xLTkzLjIgNDgtMTI3bDAtMTI5QzIyNCA1MC4xIDE3My45IDAgMTEyIDBTMCA1MC4xIDAgMTEyTDAgNDAwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyIDM3LjMgMCA3MC4zLTE4LjIgOTAuNy00Ni4zLTE3LTI4LjYtMjYuNy02Mi0yNi43LTk3Ljd6bTY0LjcgNjcuNGM0LjYgOC43IDE2LjMgOS43IDIzLjMgMi43TDQzOC4xIDI2NGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMjk3LjkgNDcyYy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNC00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDQ3MnoiXQogICAgfTsKICAgIGZhRXhwbG9zaW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGxvc2lvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDE2MGMxMi40IDAgMjIuNyA5LjQgMjMuOSAyMS43TDI5My40IDI5MS42IDQ2Ny42IDExLjNjNi43LTEwLjcgMjAuNS0xNC41IDMxLjctOC41czE1LjggMTkuNSAxMC42IDMxTDM3Mi44IDMzOC42YzIuMiAyLjMgNC4zIDQuNyA2LjMgNy4xbDk3LjItNTQuN2MxMC41LTUuOSAyMy42LTMuMSAzMC45IDYuNHM2LjMgMjMtMi4yIDMxLjVsLTg3IDg3LTcxLjQgMGMtMTMuMi0zNy4zLTQ4LjctNjQtOTAuNS02NHMtNzcuNCAyNi43LTkwLjUgNjRsLTc5LjYgMC03NS41LTUyLjNDLjYgMzU3LTIuOCAzNDQuMSAyLjQgMzMzLjVzMTcuNC0xNS45IDI4LjctMTIuNGw5Ny4yIDMwLjRjMy0zLjkgNi4xLTcuNiA5LjQtMTEuM0w3NS40IDIzNi4zYy02LjEtMTAuMS0zLjktMjMuMSA1LjEtMzAuN3MyMi4yLTcuNSAzMS4xIC4xTDIxNCAyOTMuNmMxLjUtLjQgMy0uOCA0LjUtMS4xbDEzLjYtMTQyLjdjMS4yLTEyLjMgMTEuNS0yMS43IDIzLjktMjEuN3pNMzIgNDY0bDQ1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDB6Il0KICAgIH07CiAgICBmYUFycm93c0Rvd25Ub1Blb3BsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtZG93bi10by1wZW9wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOSIsICJNMTEzIDE1M2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTUgODlDNS43IDc5LjYgNS43IDY0LjQgMTUgNTVTMzkuNiA0NS43IDQ5IDU1TDcyIDc4LjEgNzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODYuMSAyMy0yM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTY0IDY0em0zMjAgMGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzM1IDg5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjMgMC04Ni4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6TTI1NiAxOTJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTYwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC01MyA0My05NiA5Ni05NnpNMzIgMjg4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTgwIDM2OGMxNS4zIDAgMjkuNiA0LjMgNDEuOCAxMS44LTYuMyAxNi4yLTkuOCAzMy44LTkuOCA1Mi4ybDAgNDhjMCAxMS40IDIuNCAyMi4yIDYuNyAzMmwtODcuOCAwQzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuMUwwIDQ0OGMwLTQ0LjIgMzUuOC04MCA4MC04MHpNMzkzLjMgNTEyYzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtNDhjMC0xOC40LTMuNS0zNi05LjgtNTIuMiAxMi4yLTcuNSAyNi41LTExLjggNDEuOC0xMS44IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMzMuMWMwIDE3LTEzLjggMzAuOS0zMC45IDMwLjlsLTg3LjggMHoiXQogICAgfTsKICAgIGZhVXNlcnNWaWV3ZmluZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXZpZXdmaW5kZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC04LjggNy4yLTE2IDE2LTE2bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMTQ5LjMgMCAxMzYgMEw2NCAwek00NDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTM1LjMtMjguNy02NC02NC02NEw0NDAgMHpNNDggMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMzYyLjcgMCAzNzZsMCA3MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwYy04LjggMC0xNi03LjItMTYtMTZsMC03MnptNTI4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3MmMwIDguOC03LjIgMTYtMTYgMTZsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTcyek0yODggMjE2YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTUzLTQzLTk2LTk2LTk2em0xOTItNjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTY4IDI3Mi4zYy00OS4zIDQuMS04OCA0NS4zLTg4IDk1LjdsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNDYuOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLTI0YzAtMjkuNSA4LjgtNTYuOSAyNC03OS43ek00MjcuOSA0MDBsNDYuOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTAuMy0zOC43LTkxLjYtODgtOTUuNyAxNS4yIDIyLjggMjQgNTAuMiAyNCA3OS43bDAgMjRjMCA4LjQtMS40IDE2LjUtNC4xIDI0ek0xOTIgMTkyYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUNhck9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGRkIiwgIk0yNDgtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyMDAtMjEuMyAyMDAtOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NHpNMTQ1LjMgMjA4bDE1Ny41IDBjNi43IDAgMTIuNiA0LjEgMTUgMTAuNGwyNi4xIDY5LjYtMjM5LjYgMCAyNi4xLTY5LjZjMi4zLTYuMiA4LjMtMTAuNCAxNS0xMC40ek0zNCAyOTIuOGwtMS4zIDMuNEMxMy4yIDMwNy4xIDAgMzI4IDAgMzUyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyODggMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0yNC0xMy4yLTQ0LjktMzIuOC01NS45bC0xLjMtMy40LTM2LjMtOTYuOWMtMTEuNy0zMS4yLTQxLjYtNTEuOS03NC45LTUxLjlsLTE1Ny41IDBjLTMzLjMgMC02My4yIDIwLjctNzQuOSA1MS45TDM0IDI5Mi44ek05NiAzMzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yMjQgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNyA3Qy0yLjMgMTYuNC0yLjMgMzEuNiA3IDQxTDU1IDg5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwUzk4LjMgNjQuNCA4OSA1NUw0MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN3pNNDA3IDdMMzU5IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlTNDE2LjQtMi4zIDQwNyA3eiJdCiAgICB9OwogICAgZmFTbGVpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xlaWdoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3Y2MiLCAiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NFM0Ni4zIDk2IDY0IDk2bDAgMTYwYzAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDY5LjUtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1MDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04MCAwIDAtNjRjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OC45IDBjLTQ4LjUgMC05Mi44LTI3LjQtMTE0LjUtNzAuOGwtMjUuMi01MC41QzIzNy43IDU5LjQgMTkzLjQgMzIgMTQ0LjkgMzJMNjQgMzJ6TTQzMiA0MTZsLTI1NiAwIDAtNjQgMjU2IDAgMCA2NHoiXQogICAgfTsKICAgIGZhRHVtYmJlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtYmJlbGwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ0YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTIgMjU2IDAgMC0xMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDE2IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xMTItMjU2IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xNi0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTE2eiJdCiAgICB9OwogICAgZmFCYWJ5Q2FycmlhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFieS1jYXJyaWFnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjYXJyaWFnZS1iYWJ5Il0sICJmNzdkIiwgIk02NCAyMDhsMCA4MGMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xMTIgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1Ni0zMzYgMHptLjItNDhsMjIzLjggMCAwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMzIgMEMxNDEuOSAwIDY4LjQgNzAuOSA2NC4yIDE2MHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0yODggMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFDYXJyaWFnZUJhYnkgPSBmYUJhYnlDYXJyaWFnZTsKICAgIGZhS2l3aUJpcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2l3aS1iaXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MzUiLCAiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNGw1NS43IDBjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMVM1NzYgNDcxIDU3NiA0NjRsMC0yNDBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTU1LjcgMEMzNTUuOSA5NiAzMjIuNCA3OC40IDI5MS4yIDU5LjYgMjYyLjMgNDIuMSAyMjguMyAzMiAxOTIgMzIgODYgMzIgMCAxMTggMCAyMjQgMCAyOTUuMSAzOC42IDM1Ny4xIDk2IDM5MC4zTDk2IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDZjMTUuMyAzLjkgMzEuNCA2IDQ4IDYgNS40IDAgMTAuNy0uMiAxNi0uN2wwIDQwLjdjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTUwLjljMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci10aW1lcyJdLCAiZjI3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yOTEuOSAyMjAuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclRpbWVzMiA9IGZhQ2FsZW5kYXJYbWFyazI7CiAgICBmYUNpcmNsZURvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjYsICJhcnJvdy1hbHQtY2lyY2xlLWRvd24iXSwgImYzNTgiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNsLTEwNC0xMDRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw1NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU2IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTEwNCAxMDRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZURvd24yID0gZmFDaXJjbGVEb3duMjsKICAgIGZhRmlsZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0NzciLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjAgMjgwbDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ3MywgMTAwMDUsIDEwMDA2LCAxMDA2MCwgMjE1LCAiY2xvc2UiLCAibXVsdGlwbHkiLCAicmVtb3ZlIiwgInRpbWVzIl0sICJmMDBkIiwgIk01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40eiJdCiAgICB9OwogICAgZmFDbG9zZSA9IGZhWG1hcms7CiAgICBmYU11bHRpcGx5ID0gZmFYbWFyazsKICAgIGZhUmVtb3ZlID0gZmFYbWFyazsKICAgIGZhVGltZXMgPSBmYVhtYXJrOwogICAgZmFTaGFwZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRyaWFuZ2xlLWNpcmNsZS1zcXVhcmUiXSwgImY2MWYiLCAiTTI1NiAwYzExLjIgMCAyMS43IDUuOSAyNy40IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMlMzNjMuNSAyMjQgMzUyIDIyNGwtMTkyIDBjLTExLjUgMC0yMi4yLTYuMi0yNy44LTE2LjJzLTUuNS0yMi4zIC40LTMyLjJsOTYtMTYwQzIzNC4zIDUuOSAyNDQuOCAwIDI1NiAwek0xMjggMjcyYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptMjAwIDE2bDExMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwbC0xMTIgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xMTJjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il0KICAgIH07CiAgICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlID0gZmFTaGFwZXM7CiAgICBmYURpY2VPbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgImY1MjUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFMb2NrT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NrLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNjMSIsICJNMzg0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhTMzIwIDI1LjMgMzIwIDk2bDAgNjQtMTYwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBlcHBlckhvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXBwZXItaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3Nzk4XSwgImY4MTYiLCAiTTU0NSA2NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ3OC45IDYzLjJDNDUyLjMgNDMuNiA0MTkuNSAzMiAzODQgMzIgMzQ4LjkgMzIgMzE2LjUgNDMuMyAyOTAuMSA2Mi40IDI3NC4xIDc0LjEgMjg0LjIgOTYgMzA0IDk2bDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAxOS44IDIxLjkgMjkuOSAzMy42IDEzLjkgMTkuMS0yNi40IDMwLjQtNTguOCAzMC40LTkzLjkgMC0zNS41LTExLjYtNjguMy0zMS4yLTk0LjlMNTQ1IDY1ek0yNzAgMTM1LjVsLTE1OS42IDIyOEMxMDEuMyAzNzYuNCA4Ni43IDM4NCA3MSAzODRsLTcgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyNy4xIDBjNjUuNyAwIDEyOS43LTIwLjIgMTgzLjUtNTcuOEw0NDAuNSAzMDYuMUM0MzUgMjk1LjkgNDMyIDI4NC4yIDQzMiAyNzJsLTU2IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtNTZjLTEyLjIgMC0yMy45LTMtMzQtOC41eiJdCiAgICB9OwogICAgZmFEcm9wbGV0U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJvcGxldC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aW50LXNsYXNoIl0sICJmNWM3IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ2My42IDM5Ny44YzEwLjUtMjMuOCAxNi40LTUwLjEgMTYuNC03Ny44IDAtOTEuMi0xMzAuMi0yNzQuMS0xNjYuNi0zMjMuNS01LjktOC0xNS4yLTEyLjUtMjUuMi0xMi41bC0uNCAwYy0xMCAwLTE5LjMgNC41LTI1LjIgMTIuNS0xNS42IDIxLjItNDguNSA2Ni45LTgwLjkgMTE5LjRMNDEtMjQuOXptOTIgMjI3LjdjLTIxLjYgNDMuOC0zNyA4NS45LTM3IDExNy4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQzLjQgMCA4My40LTE0LjQgMTE1LjUtMzguNkwxMzMgMjAyLjh6Il0KICAgIH07CiAgICBmYVRpbnRTbGFzaCA9IGZhRHJvcGxldFNsYXNoOwogICAgZmFEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRyb3BsZXQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsICJ0aW50Il0sICJmMDQzIiwgIk0xOTIgNTEyQzg2IDUxMiAwIDQyNiAwIDMyMCAwIDIyOC44IDEzMC4yIDQ1LjkgMTY2LjYtMy41IDE3Mi41LTExLjUgMTgxLjgtMTYgMTkxLjgtMTZsLjQgMGMxMCAwIDE5LjMgNC41IDI1LjIgMTIuNSAzNi40IDQ5LjQgMTY2LjYgMjMyLjMgMTY2LjYgMzIzLjUgMCAxMDYtODYgMTkyLTE5MiAxOTJ6TTExMiAzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4eiJdCiAgICB9OwogICAgZmFUaW50ID0gZmFEcm9wbGV0OwogICAgZmFGaWxlTGluZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDEsIDEyODQ2MiwgNjE2ODYsICJmaWxlLWFsdCIsICJmaWxlLXRleHQiXSwgImYxNWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjAgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUZpbGVBbHQyID0gZmFGaWxlTGluZXMyOwogICAgZmFGaWxlVGV4dDIgPSBmYUZpbGVMaW5lczI7CiAgICBmYUNvbW1lbnRzRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjUzIiwgIk0xOTIgMzIwYzEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDRjMCAzOS42IDE0LjMgNzYuMiAzOC40IDEwNS42TDIuOCAzMTYuOEMtMi4xIDMyNi4xLS40IDMzNy41IDcgMzQ1czE4LjkgOS4yIDI4LjIgNC4yTDExNi44IDMwNmMyMy4xIDkgNDguNSAxNCA3NS4yIDE0em0zLjIgNDhjMTYuNCA4MS45IDk0LjcgMTQ0IDE4OC44IDE0NCAyNi43IDAgNTIuMS01IDc1LjItMTRsODEuNiA0My4yYzkuMyA0LjkgMjAuNyAzLjIgMjguMi00LjJzOS4yLTE4LjkgNC4yLTI4LjJsLTM1LjYtNjcuMmMyNC4xLTI5LjQgMzguNC02NiAzOC40LTEwNS42IDAtODIuNC02MS43LTE1MS41LTE0NS0xNzAuNy0xMS41IDExNS44LTExNS44IDIwMS4yLTIzNS44IDIwMi43ek0xOTYgMzJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLWxvY2F0aW9uIl0sICJmNjg5IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNiA2IDcuMyAxNi44IDcuMyAyMi43IDAgMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVNlYXJjaExvY2F0aW9uID0gZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbjsKICAgIGZhRmlsZUludm9pY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbnZvaWNlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NzAiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTY0IDM4NGwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNzQuNyA2NCA4OCA2NHptMCA5Nmw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQZW50YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW50YWdvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNzkwIiwgIk0zMTYuNC0zLjFjLTE2LjgtMTIuMi0zOS42LTEyLjItNTYuNCAwTDM1LjMgMTYwLjJjLTE2LjggMTIuMi0yMy45IDMzLjktMTcuNCA1My43bDg1LjggMjY0LjFjNi40IDE5LjggMjQuOSAzMy4yIDQ1LjcgMzMuMmwyNzcuNyAwYzIwLjggMCAzOS4yLTEzLjQgNDUuNy0zMy4ybDg1LjgtMjY0LjFjNi40LTE5LjgtLjYtNDEuNC0xNy40LTUzLjdMMzE2LjQtMy4xeiJdCiAgICB9OwogICAgZmFSZXB1YmxpY2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcHVibGljYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc1ZSIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMmwyMjQgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDY0LTU0NCAwIDAtNjR6bTE1Mi0zMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0yMzIgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0yODAgMTYwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTEyOCAyODhsNDE2IDAgMCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGwwLTQ4LTMyIDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xOTIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2MCAxMjggMHoiXQogICAgfTsKICAgIGZhU2hvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0b3JlLWFsdCJdLCAiZjU0ZiIsICJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTYuOCAxMTMuN2MzLjYgNy4yIDUuNSAxNS4xIDUuNSAyMy4yIDAgMjcuMy0yMS4yIDQ5LjctNDggNTEuNkw1MTIgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTk2IDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAweiJdCiAgICB9OwogICAgZmFTdG9yZUFsdCA9IGZhU2hvcDsKICAgIGZhRmlsbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTAyLCA2MjM2OCwgImZpbG0tYWx0IiwgImZpbG0tc2ltcGxlIl0sICJmMDA4IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNNDggMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMwNC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHoiXQogICAgfTsKICAgIGZhRmlsbUFsdCA9IGZhRmlsbTsKICAgIGZhRmlsbVNpbXBsZSA9IGZhRmlsbTsKICAgIGZhQnVpbGRpbmdDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDQ1NC42IDQwMHoiXQogICAgfTsKICAgIGZhQ29tbWVudHMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDkwLCA2MTY3MF0sICJmMDg2IiwgIk0zODQgMTQ0YzAgOTcuMi04NiAxNzYtMTkyIDE3Ni0yNi43IDAtNTIuMS01LTc1LjItMTRMMzUuMiAzNDkuMmMtOS4zIDQuOS0yMC43IDMuMi0yOC4yLTQuMnMtOS4yLTE4LjktNC4yLTI4LjJsMzUuNi02Ny4yQzE0LjMgMjIwLjIgMCAxODMuNiAwIDE0NCAwIDQ2LjggODYtMzIgMTkyLTMyUzM4NCA0Ni44IDM4NCAxNDR6bTAgMzY4Yy05NC4xIDAtMTcyLjQtNjIuMS0xODguOC0xNDQgMTIwLTEuNSAyMjQuMy04Ni45IDIzNS44LTIwMi43IDgzLjMgMTkuMiAxNDUgODguMyAxNDUgMTcwLjcgMCAzOS42LTE0LjMgNzYuMi0zOC40IDEwNS42bDM1LjYgNjcuMmM0LjkgOS4zIDMuMiAyMC43LTQuMiAyOC4ycy0xOC45IDkuMi0yOC4yIDQuMkw0NTkuMiA0OThjLTIzLjEgOS00OC41IDE0LTc1LjIgMTR6Il0KICAgIH07CiAgICBmYVRhZ3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDJjIiwgIk00MDEuMiAzOS4xTDU0OS40IDE4OS40YzI3LjcgMjguMSAyNy43IDczLjEgMCAxMDEuMkwzOTMgNDQ4LjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw1MTUuMyAyNTYuOGM5LjItOS4zIDkuMi0yNC40IDAtMzMuN0wzNjcgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTMyLjEgMjI5LjVMMzIuMSA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDE0NCAxNDRjMjUgMjUgMjUgNjUuNSAwIDkwLjVMMjg1LjQgNDE4LjdjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC0xNDQtMTQ0Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zem0xNDQtODUuNWEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFHdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxOWIiLCAiTTUyOCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgtNDQ4IDBDMTQuMyA2NCAwIDc4LjMgMCA5NkwwIDIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMCAwYzIwLjggMCAzNi4xIDE5LjYgMzEgMzkuOEwzMyA0NDAuMmMtMi40IDkuNi0uMiAxOS43IDUuOCAyNy41UzU0LjEgNDgwIDY0IDQ4MGw5NiAwYzE0LjcgMCAyNy41LTEwIDMxLTI0LjJMMjE3IDM1MiAzMjEuNCAzNTJjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJsMjYuNy03NC44IDMxLjEgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyMi42LTIyLjYgNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2IDAgMC04ek0zMjEuNCAzMDRsLTkyLjUgMCAxNi02NCAxMDUgMC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4bDM4NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDgwIDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hlY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMzLCAiY2hlY2stY2lyY2xlIl0sICJmMDU4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhQ2hlY2tDaXJjbGUyID0gZmFDaXJjbGVDaGVjazI7CiAgICBmYVNjb3JwaW8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NvcnBpbyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODRlIiwgIk0zNjggMzJjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJsMCAyODkuN2MwIDcuOSA2LjQgMTQuMyAxNC4zIDE0LjMgMy45IDAgNy42LTEuNiAxMC4yLTQuM2w0MC4xLTQxLjEtOS43LTkuN2MtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM1NDIuMyAzNTIgNTUyIDM1Mmw2NCAwIDIuNSAuMWMxMi4xIDEuMiAyMS41IDExLjUgMjEuNSAyMy45bDAgNjQtLjMgMy42Yy0xLjIgOC4yLTYuNyAxNS4zLTE0LjUgMTguNi05IDMuNy0xOS4zIDEuNi0yNi4yLTUuMmwtOS4xLTkuMS0zOS42IDQwLjZjLTE0LjcgMTUuMS0zNC45IDIzLjYtNTYgMjMuNi00My4zIDAtNzguMy0zNS4xLTc4LjMtNzguM0w0MTYgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMzA0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMzA0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzIwYzAtMTYuNi0xMi42LTMwLjItMjguNy0zMS44bC02LjYtLjNDNDQuNiA5NC4yIDMyIDgwLjYgMzIgNjQgMzIgNDYuMyA0Ni4zIDMyIDY0IDMyIDkxIDMyIDExNS4zIDQzLjEgMTMyLjcgNjEgMTUyLjYgNDMgMTc5IDMyIDIwOCAzMiAyMzkuMyAzMiAyNjcuNyA0NC45IDI4OCA2NS43IDMwOC4zIDQ0LjkgMzM2LjYgMzIgMzY4IDMyeiJdCiAgICB9OwogICAgZmFJZENhcmRDbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlkLWNhcmQtY2xpcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJpZC1jYXJkLWFsdCJdLCAiZjQ3ZiIsICJNMjU2LTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NC0xMjggMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAzMmwxMTIgMCAwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzIgMTEyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyek0xNzYgNDAwYzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwek0yODggMjgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFJZENhcmRBbHQgPSBmYUlkQ2FyZENsaXA7CiAgICBmYU1vb24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NjksIDkyMTRdLCAiZjE4NiIsICJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyYzY4LjggMCAxMzEuMy0yNy4yIDE3Ny4zLTcxLjQgNy4zLTcgOS40LTE3LjkgNS4zLTI3LjFzLTEzLjctMTQuOS0yMy44LTE0LjFjLTQuOSAuNC05LjggLjYtMTQuOCAuNi0xMDEuNiAwLTE4NC04Mi40LTE4NC0xODQgMC03Mi4xIDQxLjUtMTM0LjYgMTAyLjEtMTY0LjggOS4xLTQuNSAxNC4zLTE0LjMgMTMuMS0yNC40UzMyMi42IDguNSAzMTIuNyA2LjNDMjk0LjQgMi4yIDI3NS40IDAgMjU2IDB6Il0KICAgIH07CiAgICBmYU9pbFdlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib2lsLXdlbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzMiIsICJNNTI4LjMgNjEuM2MtMTEuNC00Mi43LTU1LjMtNjgtOTgtNTYuNkw0MTQuOSA4LjhDMzk3LjggMTMuNCAzODcuNyAzMSAzOTIuMyA0OGwyNC41IDkxLjQtMTA4LjIgMjguMS02LjMtMTguMUMyOTcuNyAxMzYuNiAyODUuNiAxMjggMjcyIDEyOHMtMjUuNyA4LjYtMzAuMiAyMS40bC0xMy42IDM5LTEzMi4yIDM0LjMgMC0zOC42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjY0LTE2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzNy4zIDAtNjEuNC0xNzUuNC02Mi4yIDE2LjEgMjIuMSA2My4yLTY2LjYgMCAxOS45LTU2LjktNzQuNiAxOS4zLTQ2LjcgMTMzLjUtNDEuMyAwIDAtMTU5LjIgMzM3LjQtODcuNSAyNS4yIDk0YzQuNiAxNy4xIDIyLjEgMjcuMiAzOS4yIDIyLjZsMTUuNS00LjFjNDIuNy0xMS40IDY4LTU1LjMgNTYuNi05OEw1MjguMyA2MS4zek0yMDUuMSA0NDhsMTYuOC00OCAxMDAuMiAwIDE2LjggNDgtMTMzLjggMHoiXQogICAgfTsKICAgIGZhVGFjaG9ncmFwaERpZ2l0YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFjaG9ncmFwaC1kaWdpdGFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImRpZ2l0YWwtdGFjaG9ncmFwaCJdLCAiZjU2NiIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptNjQgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTg4IDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAzNTJ6bTI1NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHpNNDk2IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTg4IDMxMmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTEwNC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem01NiAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYURpZ2l0YWxUYWNob2dyYXBoID0gZmFUYWNob2dyYXBoRGlnaXRhbDsKICAgIGZhVGFibGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YWJsZXQtYW5kcm9pZCJdLCAiZjNmYiIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTg0IDQwMGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFUYWJsZXRBbmRyb2lkID0gZmFUYWJsZXQ7CiAgICBmYVJ1YmxlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWJsZS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM4MSwgInJvdWJsZSIsICJydWIiLCAicnVibGUiXSwgImYxNTgiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCAyMDgtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNDgtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDE1MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNTIgMCAwLTQ4IDExMiAwYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0UzMzNS41IDMyIDI1NiAzMkwxMTIgMzJ6TTI1NiAyNTZsLTExMiAwIDAtMTYwIDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgweiJdCiAgICB9OwogICAgZmFSb3VibGUgPSBmYVJ1YmxlU2lnbjsKICAgIGZhUnViID0gZmFSdWJsZVNpZ247CiAgICBmYVJ1YmxlID0gZmFSdWJsZVNpZ247CiAgICBmYUNsb3NlZENhcHRpb25pbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3NlZC1jYXB0aW9uaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMGEiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTE1MiA4MGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MGMwLTQuNCAzLjYtOCA4LTh6bTE2OCA4YzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MHoiXQogICAgfTsKICAgIGZhUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM5NF0sICJmMzA0IiwgIk0zNTIuOSAyMS4yTDMwOCA2Ni4xIDQ0NS45IDIwNCA0OTAuOCAxNTkuMUM1MDQuNCAxNDUuNiA1MTIgMTI3LjIgNTEyIDEwOHMtNy42LTM3LjYtMjEuMi01MS4xTDQ1NS4xIDIxLjJDNDQxLjYgNy42IDQyMy4yIDAgNDA0IDBzLTM3LjYgNy42LTUxLjEgMjEuMnpNMjc0LjEgMTAwTDU4LjkgMzE1LjFjLTEwLjcgMTAuNy0xOC41IDI0LjEtMjIuNiAzOC43TC45IDQ4MS42Yy0yLjMgOC4zIDAgMTcuMyA2LjIgMjMuNHMxNS4xIDguNSAyMy40IDYuMmwxMjcuOC0zNS41YzE0LjYtNC4xIDI3LjktMTEuOCAzOC43LTIyLjZMNDEyIDIzNy45IDI3NC4xIDEwMHoiXQogICAgfTsKICAgIGZhUGxhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjA3MiIsICJNNTIwIDIwMGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1NmwtMTI3LjMgMC0xNTkuMiAxNzMuNmMtNi4xIDYuNi0xNC42IDEwLjQtMjMuNiAxMC40bC00My43IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDU0LjMtMTYyLjktOTkuNyAwLTUyLjggNjZjLTMgMy44LTcuNiA2LTEyLjUgNmwtMTkuOCAwYy0xMC40IDAtMTgtOS44LTE1LjUtMTkuOUwzMiAyNTYgNSAxNDcuOUMyLjQgMTM3LjggMTAuMSAxMjggMjAuNSAxMjhsMTkuOCAwYzQuOSAwIDkuNSAyLjIgMTIuNSA2bDUyLjggNjYgOTkuNyAwLTU0LjMtMTYyLjlDMTQ3LjYgMjYuNyAxNTUuMyAxNiAxNjYuMiAxNmw0My43IDBjOSAwIDE3LjUgMy44IDIzLjYgMTAuNEwzOTIuNyAyMDAgNTIwIDIwMHoiXQogICAgfTsKICAgIGZhSW1hZ2VzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjMwMiIsICJNOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyMCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEw5NiA5NnpNMjQgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjk2YzAgOC44IDcuMiAxNiAxNiAxNmwzNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0em0xNjggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTYuNSAxMS41Yy00LjQtNy4xLTEyLjEtMTEuNS0yMC41LTExLjVzLTE2LjEgNC40LTIwLjUgMTEuNWwtNTYuMyA5Mi4xLTI0LjUtMzAuNmMtNC42LTUuNy0xMS40LTktMTguNy05cy0xNC4yIDMuMy0xOC43IDlsLTY0IDgwYy01LjggNy4yLTYuOSAxNy4xLTIuOSAyNS40UzE3NC44IDM1MiAxODQgMzUybDI3MiAwYzguNyAwIDE2LjctNC43IDIwLjktMTIuM3M0LjEtMTYuOC0uNS0yNC4zbC04OC0xNDR6Il0KICAgIH07CiAgICBmYU1vYmlsZVNjcmVlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtc2NyZWVuIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbIm1vYmlsZS1hbmRyb2lkLWFsdCJdLCAiZjNjZiIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0ek0xMjggNDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zMDQgNjRsLTIyNCAwIDAgMzA0IDIyNCAwIDAtMzA0eiJdCiAgICB9OwogICAgZmFNb2JpbGVBbmRyb2lkQWx0ID0gZmFNb2JpbGVTY3JlZW47CiAgICBmYUd1YXJhbmlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImd1YXJhbmktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTlhIiwgIk0xOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MS41QzczLjMgNzcuMyAwIDE1OC4xIDAgMjU2UzczLjMgNDM0LjcgMTY4IDQ0Ni41bDAgNDEuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDEuNWM5NC43LTExLjggMTY4LTkyLjYgMTY4LTE5MC41IDAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMzYgMCAwLTkzLjhjMjUuMyA0LjggNDcuOSAxNyA2NS42IDM0LjMgMTIuNiAxMi40IDMyLjkgMTIuMiA0NS4zLS40czEyLjItMzIuOS0uNS00NS4zQzI5Ny4yIDkwLjIgMjU4LjggNzAuOCAyMTYgNjUuNUwyMTYgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTE2OCAxMzAuMmwwIDI1MS41QzEwOC44IDM3MC41IDY0IDMxOC41IDY0IDI1NnM0NC44LTExNC41IDEwNC0xMjUuOHptNDggMjUxLjVsMC05My44IDEwMCAwYy0xMi4zIDQ3LjYtNTEuMiA4NC41LTEwMCA5My44eiJdCiAgICB9OwogICAgZmFCYWdTaG9wcGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWctc2hvcHBpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic2hvcHBpbmctYmFnIl0sICJmMjkwIiwgIk0xNjAgODBjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDQ4LTEyOCAwIDAtNDh6bS00OCA0OGwtNjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwIDAtNDhjMC02MS45LTUwLjEtMTEyLTExMi0xMTJTMTEyIDE4LjEgMTEyIDgwbDAgNDh6bTI0IDQ4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptMTUyIDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQmFnID0gZmFCYWdTaG9wcGluZzsKICAgIGZhQ2lyY2xlUmlnaHQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODM4LCAiYXJyb3ctYWx0LWNpcmNsZS1yaWdodCJdLCAiZjM1YSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHptMzg3LjMgMTEuM2wtMTA0IDEwNGMtNC42IDQuNi0xMS41IDUuOS0xNy40IDMuNVMyNTYgMzY2LjUgMjU2IDM2MGwwLTU2LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTU2YzAtNi41IDMuOS0xMi4zIDkuOS0xNC44czEyLjktMS4xIDE3LjQgMy41bDEwNCAxMDRjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQyID0gZmFDaXJjbGVSaWdodDI7CiAgICBmYVBob25lVm9sdW1lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLXZvbHVtZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2b2x1bWUtY29udHJvbC1waG9uZSJdLCAiZjJhMCIsICJNMzQ0LTMyYzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMzIwIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0IDc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNi0zOS40LTg4LTg4LTg4LTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDQuMSAxLjRjMTkuNy01LjQgNDAuMyA0LjcgNDguMSAyMy41bDQwLjUgOTcuM2M2LjkgMTYuNSAyLjEgMzUuNi0xMS44IDQ3bC00NC4xIDM2LjFjMzIuNSA3MS42IDg5IDEzMCAxNTkuMyAxNjQuOUwzNzQuNyAzMjNjMTEuMy0xMy45IDMwLjQtMTguNiA0Ny0xMS44TDUxOSAzNTEuOGMxOC44IDcuOCAyOC45IDI4LjQgMjMuNSA0OC4xbC0xLjUgNS41QzUyMy40IDQ3MC4xIDQ2MC45IDUyNS4zIDM4NC42IDUwOS4yIDIwOS42IDQ3Mi4xIDcxLjkgMzM0LjQgMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41eiJdCiAgICB9OwogICAgZmFWb2x1bWVDb250cm9sUGhvbmUgPSBmYVBob25lVm9sdW1lOwogICAgZmFDdWJlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjdWJlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIzIiwgIk0yODQtMS4zYy0xNy4zLTEwLTM4LjctMTAtNTYgMEwxNDMuOCA0Ny4zYy0xNy4zIDEwLTI4IDI4LjUtMjggNDguNWwwIDEwMS45LTg4LjMgNTFjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgOTcuM2MwIDIwIDEwLjcgMzguNSAyOCA0OC41bDg0LjMgNDguNmMxNy4zIDEwIDM4LjcgMTAgNTYgMGw4OC4zLTUxIDg4LjMgNTFjMTcuMyAxMCAzOC43IDEwIDU2IDBMNDg0LjUgNDQzYzE3LjMtMTAgMjgtMjguNSAyOC00OC41bDAtOTcuM2MwLTIwLTEwLjctMzguNS0yOC00OC41bC04OC4zLTUxIDAtMTAxLjljMC0yMC0xMC43LTM4LjUtMjgtNDguNUwyODQtMS4zek0yMzIgMjkyLjZsMCAxMDYuNS04OC4zIDUxYy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkyLjMtNTMuM3ptMjMxLjQgLjZjLjcgMS4yIDEuMSAyLjYgMS4xIDRsMCA5Ny4zYzAgMi45LTEuNSA1LjUtNCA2LjlsLTg0LjMgNDguNmMtMS4yIC43LTIuNiAxLjEtNCAxLjFsMC0xMDUuMyA5MS4yLTUyLjZ6TTM0OC4zIDk1LjhsMCAxMDEuOS05Mi4zIDUzLjMgMC0xMDYuNSA5MS4yLTUyLjZjLjcgMS4yIDEuMSAyLjYgMS4xIDR6Il0KICAgIH07CiAgICBmYVBob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjIyLCAxMjgzNzldLCAiZjA5NSIsICJNMTYwLjIgMjVDMTUyLjMgNi4xIDEzMS43LTMuOSAxMTIuMSAxLjRsLTUuNSAxLjVjLTY0LjYgMTcuNi0xMTkuOCA4MC4yLTEwMy43IDE1Ni40IDM3LjEgMTc1IDE3NC44IDMxMi43IDM0OS44IDM0OS44IDc2LjMgMTYuMiAxMzguOC0zOS4xIDE1Ni40LTEwMy43bDEuNS01LjVjNS40LTE5LjctNC43LTQwLjMtMjMuNS00OC4xbC05Ny4zLTQwLjVjLTE2LjUtNi45LTM1LjYtMi4xLTQ3IDExLjhsLTM4LjYgNDcuMkMyMzMuOSAzMzUuNCAxNzcuMyAyNzcgMTQ0LjggMjA1LjNMMTg5IDE2OS4zYzEzLjktMTEuMyAxOC42LTMwLjQgMTEuOC00N0wxNjAuMiAyNXoiXQogICAgfTsKICAgIGZhVG9yaWlHYXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvcmlpLWdhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTYxXSwgImY2YTEiLCAiTTAgOTZMMCAyOC41QzAgMjEuNiA1LjYgMTYgMTIuNSAxNiAxNC44IDE2IDE3IDE2LjYgMTkgMTcuOEw1OCA0MS4yQzgyLjkgNTYuMSAxMTEuMyA2NCAxNDAuMyA2NGwxNjcuNCAwYzI5IDAgNTcuNS03LjkgODIuMy0yMi44bDM5LTIzLjRjMS45LTEuMiA0LjItMS44IDYuNC0xLjggNi45IDAgMTIuNSA1LjYgMTIuNSAxMi41TDQ0OCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NGwwIDY0IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItMTkyIDAgMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItMTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNjRDMjguNyAxNjAgMCAxMzEuMyAwIDk2ek0xMjggMjI0bDY0IDAgMC02NC02NCAwIDAgNjR6bTEyOCAwbDY0IDAgMC02NC02NCAwIDAgNjR6Il0KICAgIH07CiAgICBmYUJhY29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5MzYzXSwgImY3ZTUiLCAiTTU1NyA5Ni43YzE0LjQgMTQuNCAxMi40IDM4LjQtNC4zIDUwLjJsLTY0LjYgNDUuN2MtNDMuNyAzMC45LTc5LjIgNzEuOS0xMDMuNCAxMTkuNmwtMjUuMyA0OS44Yy0yNS4xIDQ5LjMtNjIuMSA5MS41LTEwNy44IDEyMi42bC03NC4xIDUwLjZjLTEzLjEgOC45LTMwLjcgNy4zLTQxLjgtMy45bC00NC45LTQ0LjkgODYuNS02Ni41YzQyLjMtMzIuNSA3Ni43LTc0LjMgMTAwLjYtMTIybDI0LjUtNDkuMWMyNC41LTQ5IDYxLjgtOTAuNiAxMDcuOS0xMjAuMmwxMDguNy02OS45IDM4IDM4ek00ODQuMiAyMy45TDM4NC4zIDg4LjJjLTUzLjQgMzQuMy05Ni41IDgyLjQtMTI0LjkgMTM5LjFsLTI0LjUgNDkuMWMtMjAuNiA0MS4zLTUwLjMgNzcuMy04Ni45IDEwNS40bC05MS40IDcwLjMtMzYuOS0zNi45Yy0xNC40LTE0LjQtMTIuNC0zOC40IDQuMy01MC4ybDY0LjYtNDUuN2M0My43LTMwLjkgNzkuMi03MS45IDEwMy40LTExOS42bDI1LjMtNDkuOEMyNDIuMyAxMDAuOCAyNzkuMyA1OC42IDMyNSAyNy40bDc0LjEtNTAuNmMxMy4xLTguOSAzMC42LTcuMyA0MS44IDMuOWw0My4zIDQzLjN6Il0KICAgIH07CiAgICBmYVBlcnNvbkZhbGxpbmdCdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZmFsbGluZy1idXJzdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTQ3IiwgIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDUuNGMwIDU1LjItMjMuNyAxMDctNjMuOSAxNDMuMWw2Mi45IDc1LjUgODkgMGMxNS4xIDAgMjkuMyA3LjEgMzguNCAxOS4ybDQzLjIgNTcuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40TDM2OCAzMjAgMjYzLjIgMzIwIDM3Ni44IDQ1OS44YzExLjEgMTMuNyA5LjEgMzMuOS00LjcgNDVzLTMzLjkgOS4xLTQ1LTQuN0wxMzcuNCAyNjYuNmMtNi4xIDE1LTkuNCAzMS4zLTkuNCA0OGwwIDY5LjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OS40YzAtNjcuNCAzNS40LTEyOS45IDkzLjItMTY0LjZsNC42LTIuOEMyMDAuNCAxMjQgMjI0IDgyLjQgMjI0IDM3LjRsMC01LjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2IDg4QTU2IDU2IDAgMSAxIDEyOCA4OCA1NiA1NiAwIDEgMSAxNiA4OHptMzc2LTcuOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0OHptMTA0IDE1MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwem0tNTQuNS05Ny41Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAweiJdCiAgICB9OwogICAgZmFRdW90ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInF1b3RlLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIyMSwgInF1b3RlLXJpZ2h0LWFsdCJdLCAiZjEwZSIsICJNNDQ4IDI5NmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2em0tMjU2IDBjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNnoiXQogICAgfTsKICAgIGZhUXVvdGVSaWdodEFsdCA9IGZhUXVvdGVSaWdodDsKICAgIGZhSG91c2VNZWRpY2FsRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxNCIsICJNNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yNjcuNSA1OS4xTDQwMCAxODYuOSA0MDAgNTAzLjRjLTkuNCA1LjQtMjAuMyA4LjYtMzIgOC42bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNDQtMTkuOSAwQzEyLjYgMzA0IDAgMjkxLjQgMCAyNzUuOSAwIDI2OC4zIDMuMSAyNjEgOC42IDI1NS43TDIxMi41IDU5LjFDMjE5LjkgNTIgMjI5LjcgNDggMjQwIDQ4czIwLjEgNCAyNy41IDExLjF6TTIwNC44IDI1Ni44bDAgNDQtNDQgMGMtOS43IDAtMTcuNiA3LjktMTcuNiAxNy42bDAgMzUuMmMwIDkuNyA3LjkgMTcuNiAxNy42IDE3LjZsNDQgMCAwIDQ0YzAgOS43IDcuOSAxNy42IDE3LjYgMTcuNmwzNS4yIDBjOS43IDAgMTcuNi03LjkgMTcuNi0xNy42bDAtNDQgNDQgMGM5LjcgMCAxNy42LTcuOSAxNy42LTE3LjZsMC0zNS4yYzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtNDQgMCAwLTQ0YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmwtMzUuMiAwYy05LjcgMC0xNy42IDcuOS0xNy42IDE3LjZ6Il0KICAgIH07CiAgICBmYVByZXNjcmlwdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwcmVzY3JpcHRpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjViMSIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDUwLjcgMCAxMjggMTI4LTEwNS40IDEwNS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDI4OCAzOTcuMyAzOTMuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDMzMy4zIDM1MiA0MzguNiAyNDYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyODggMzA2LjcgMjAyLjIgMjIwLjlDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTIgMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEwzMiAwek0xNzYgMTYwbC0xMTIgMCAwLTk2IDExMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFEaWNlVGhyZWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS10aHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NThdLCAiZjUyNyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4IDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNiIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyMS4zYy00Ni45IDE5LTgwIDY1LTgwIDExOC43bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTc2IDM4NGwwIDgwIDgwIDAgMC02NC4xYzAtMTMuNyAxLjktMjcgNS41LTM5LjYtNS43LTUuMi0xMy4yLTguMy0yMS41LTguM2wtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTMwNyAyMjQuM2MtMS0uMi0yLS4zLTMtLjNsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNi43IDBjMi4xLTIyLjggOC40LTQ0LjMgMTguMy02My43ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMzUyIDgwLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFJZENhcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlkLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0NywgImRyaXZlcnMtbGljZW5zZSJdLCAiZjJjMiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NEwwIDk2em0wIDQ4bDU3NiAwIDAgMjcyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNDR6TTI0Ny4zIDQxNmMyMC4yIDAgMzUuMy0xOS40IDIyLjQtMzUtMTQuNy0xNy43LTM2LjktMjktNjEuNy0yOWwtNjQgMGMtMjQuOCAwLTQ3IDExLjMtNjEuNyAyOS0xMi45IDE1LjYgMi4yIDM1IDIyLjQgMzVsMTQyLjUgMHpNMTc2IDMxMmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMzYwIDIwOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAweiJdCiAgICB9OwogICAgZmFEcml2ZXJzTGljZW5zZTIgPSBmYUlkQ2FyZDI7CiAgICBmYUNpcmNsZVBsYXkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wbGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjksICJwbGF5LWNpcmNsZSJdLCAiZjE0NCIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTg4LjMgMTQ3LjFjLTcuNiA0LjItMTIuMyAxMi4zLTEyLjMgMjAuOWwwIDE3NmMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OGMtNy40LTQuNS0xNi43LTQuNy0yNC4zLS41eiJdCiAgICB9OwogICAgZmFQbGF5Q2lyY2xlMiA9IGZhQ2lyY2xlUGxheTI7CiAgICBmYUZhY2VMYXVnaEJlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxMywgImxhdWdoLWJlYW0iXSwgImY1OWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNzYgMTY0Yy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhTGF1Z2hCZWFtMiA9IGZhRmFjZUxhdWdoQmVhbTI7CiAgICBmYUxlYWYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVhZiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDZjIiwgIk00NzEuMyA2LjdDNDc3LjcgLjYgNDg3LTEuNiA0OTUuNiAxLjIgNTA1LjQgNC41IDUxMiAxMy43IDUxMiAyNGwwIDE4Ni45YzAgMTMxLjItMTA4LjEgMjM3LjEtMjM4LjggMjM3LjEtNzcgMC0xNDMuNC00OS41LTE2Ny41LTExOC43LTM1LjQgMzAuOC01Ny43IDc2LjEtNTcuNyAxMjYuNyAwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDQ2OS4zIDAgNDU2QzAgMzgxLjEgMzguMiAzMTUuMSA5Ni4xIDI3Ni4zIDEzMS40IDI1Mi43IDE3My41IDI0MCAyMTYgMjQwbDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDBjLTM5LjcgMC03Ny4zIDguOC0xMTEgMjQuNSAyMy4zLTcwIDg5LjItMTIwLjUgMTY3LTEyMC41IDY2LjQgMCAxMTUuOC0yMi4xIDE0OC43LTQ0IDE5LjItMTIuOCAzNS41LTI4LjEgNTAuNy00NS4zeiJdCiAgICB9OwogICAgZmFIb3VzZUNoaW1uZXlVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXktdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDY1IiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMzEyIDI1NmE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTE0NCA0MzJjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il0KICAgIH07CiAgICBmYVJvdGF0ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvdGF0ZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZWRvLWFsdCIsICJyb3RhdGUtZm9yd2FyZCJdLCAiZjJmOSIsICJNNDg4IDE5MmwtMTQ0IDBjLTkuNyAwLTE4LjUtNS44LTIyLjItMTQuOHMtMS43LTE5LjMgNS4yLTI2LjJsNDYuNy00Ni43Yy03NS4zLTU4LjYtMTg0LjMtNTMuMy0yNTMuNSAxNS45LTc1IDc1LTc1IDE5Ni41IDAgMjcxLjVzMTk2LjUgNzUgMjcxLjUgMGM4LjItOC4yIDE1LjUtMTYuOSAyMS45LTI2LjEgMTAuMS0xNC41IDMwLjEtMTggNDQuNi03LjlzMTggMzAuMSA3LjkgNDQuNmMtOC41IDEyLjItMTguMiAyMy44LTI5LjEgMzQuNy0xMDAgMTAwLTI2Mi4xIDEwMC0zNjIgMFMtMjUgMTc1IDc1IDc1Yzk0LjMtOTQuMyAyNDMuNy05OS42IDM0NC4zLTE2LjJMNDcxIDdjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlM1MTIgMTQuMyA1MTIgMjRsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYVJlZG9BbHQgPSBmYVJvdGF0ZVJpZ2h0OwogICAgZmFSb3RhdGVGb3J3YXJkID0gZmFSb3RhdGVSaWdodDsKICAgIGZhVG9vdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9vdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk0NjNdLCAiZjVjOSIsICJNMTQ1IDUuN0wyMjQgMzIgMzAzIDUuN0MzMTQuMyAxLjkgMzI2IDAgMzM3LjkgMCAzOTguNyAwIDQ0OCA0OS4zIDQ0OCAxMTAuMWwwIDY4LjVjMCAyOS40LTkuNSA1OC4xLTI3LjIgODEuNmwtMS4xIDEuNWMtMTIuOSAxNy4yLTIxLjMgMzcuNC0yNC4zIDU4LjdMMzczLjcgNDcxLjljLTMuMyAyMy0yMyA0MC4xLTQ2LjIgNDAuMS0yMi44IDAtNDIuMy0xNi41LTQ2LTM5TDI2MS4zIDM1MS42Yy0zLTE4LjItMTguOC0zMS42LTM3LjMtMzEuNnMtMzQuMiAxMy40LTM3LjMgMzEuNkwxNjYuNSA0NzNjLTMuOCAyMi41LTIzLjIgMzktNDYgMzktMjMuMiAwLTQyLjktMTcuMS00Ni4yLTQwLjFMNTIuNiAzMjAuNWMtMy0yMS4zLTExLjQtNDEuNS0yNC4zLTU4LjdsLTEuMS0xLjVDOS41IDIzNi43IDAgMjA4LjEgMCAxNzguN2wwLTY4LjVDMCA0OS4zIDQ5LjMgMCAxMTAuMSAwIDEyMiAwIDEzMy43IDEuOSAxNDUgNS43eiJdCiAgICB9OwogICAgZmFIb3VzZUNoaW1uZXlXaW5kb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS13aW5kb3ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTAwZCIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTIxNiAyMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAweiJdCiAgICB9OwogICAgZmFNb3RvcmN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdG9yY3ljbGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NDldLCAiZjIxYyIsICJNMjgwIDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2LjYgMCAyMi41IDQ4LjctOTUuMSA3MS4zYy0zMy40LTI1LjEtNzUtNDAtMTIwLTQwbC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDBjNzguNSAwIDE0My4yIDU5LjYgMTUxLjIgMTM2bC0yNS40IDBjLTExLjItNTkuMi02My4zLTEwNC0xMjUuOC0xMDQtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhTNzMuMyA0ODAgMTQ0IDQ4MGM2Mi41IDAgMTE0LjUtNDQuOCAxMjUuOC0xMDRsNTAuMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjIuNWMwLTQ1LjEgMjUuNy04NS40IDY1LjUtMTA3LjdsMTIuMSAyNi4xYy0zMi40IDIzLjItNTMuNSA2MS4yLTUzLjUgMTA0LjEgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOC01Ny4zLTEyOC0xMjgtMTI4Yy0xMC43IDAtMjEgMS4zLTMwLjkgMy44TDQzMy44IDE2MCA0ODggMTYwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTUzLjMgMGMtNi45IDAtMTMuNyAyLjItMTkuMiA2LjRsLTE3LjEgMTIuOC0yNC42LTUzLjNDMzY5LjkgMjEuNCAzNjEuNCAxNiAzNTIgMTZsLTcyIDB6TTQ0NS44IDMwMC40bDI4LjQgNjEuNmM1LjYgMTIgMTkuOCAxNy4zIDMxLjggMTEuN3MxNy4zLTE5LjggMTEuNy0zMS44bC0yOC41LTYxLjZjMi4yLS4yIDQuNC0uMyA2LjctLjMgMzkuOCAwIDcyIDMyLjIgNzIgNzJzLTMyLjIgNzItNzIgNzItNzItMzIuMi03Mi03MmMwLTIwLjIgOC4zLTM4LjUgMjEuOC01MS42ek0xNDQgNDI0Yy0zOS44IDAtNzItMzIuMi03Mi03MnMzMi4yLTcyIDcyLTcyYzMxLjMgMCA1OCAyMCA2Ny45IDQ4TDE0NCAzMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjcuOSAwYy05LjkgMjgtMzYuNiA0OC02Ny45IDQ4eiJdCiAgICB9OwogICAgZmFCYWNrd2FyZEZhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFja3dhcmQtZmFzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzkxOTgsICJmYXN0LWJhY2t3YXJkIl0sICJmMDQ5IiwgIk00OTIuMiA0NzcuNmMtMTIgNS0yNS43IDIuMi0zNC45LTYuOUwyODggMzAxLjMgMjg4IDQ0OGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOUw2NCAzMDEuMyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyUzY0IDQ2LjMgNjQgNjRMNjQgMjEwLjcgMjMzLjQgNDEuNGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMyODggNTEuMSAyODggNjRsMCAxNDYuNyAxNjkuNC0xNjkuNGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVM1MTIgNTEuMSA1MTIgNjRsMCAzODRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnoiXQogICAgfTsKICAgIGZhRmFzdEJhY2t3YXJkID0gZmFCYWNrd2FyZEZhc3Q7CiAgICBmYUFkZHJlc3NCb29rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgImNvbnRhY3QtYm9vayJdLCAiZjJiOSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwek0yMDggMjg4bDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek01MTIgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6bTAgMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek00OTYgMzIwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFDb250YWN0Qm9vazIgPSBmYUFkZHJlc3NCb29rMjsKICAgIGZhU2FpbGJvYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2FpbGJvYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ0NSIsICJNMjQwIDM1LjlsMCAzNDguMS0yMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNjEuOSA1MC4xIDExMiAxMTIgMTEybDI4OCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyIDAtOC44LTcuMi0xNi0xNi0xNmwtMjA4IDAgMC00OCAxNjEuNyAwYzEyLjkgMCAyMC41LTE0LjQgMTMuMi0yNUwyNjkuMiAyNi45Yy04LjktMTMtMjkuMi02LjctMjkuMiA5ek0xOTIgMzIwbDAtMTg0LjJjMC0xNi4xLTIxLTIyLjEtMjkuNi04LjVMNDcuMyAzMTEuNWMtNi43IDEwLjcgMSAyNC41IDEzLjYgMjQuNUwxNzYgMzM2YzguOCAwIDE2LTcuMiAxNi0xNnoiXQogICAgfTsKICAgIGZhQm9va0Jvb2ttYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYm9va21hcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTBiYiIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCAxNjkuNGMwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNi02IDAtMTEuOC0yLjQtMTYtNi42TDI3MiAxNDQgMjMwLjYgMTg1LjRjLTQuMiA0LjItMTAgNi42LTE2IDYuNi0xMi41IDAtMjIuNi0xMC4xLTIyLjYtMjIuNkwxOTIgMCA5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjEiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMzA1IDIyNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtMTAyLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDIuMSAwLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJ6Il0KICAgIH07CiAgICBmYU1pY3JvcGhvbmVMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lLWxpbmVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk3LCAibWljcm9waG9uZS1hbHQiXSwgImYzYzkiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTYgNTAuMyAwIDkxLjYgMzguNyA5NS43IDg4TDIzMiA4OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwIDAgNDgtNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NS43IDBjLTQuMSA0OS4zLTQ1LjMgODgtOTUuNyA4OC01MyAwLTk2LTQzLTk2LTk2TDk2IDk2ek0yNCAxNjBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0bDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwYzAgOTcuOS03My4zIDE3OC43LTE2OCAxOTAuNWwwIDQ5LjUgNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQ5LjVDNzMuMyA0MDIuNyAwIDMyMS45IDAgMjI0bDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pY3JvcGhvbmVBbHQgPSBmYU1pY3JvcGhvbmVMaW5lczsKICAgIGZhUmVwbHlBbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwbHktYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1haWwtcmVwbHktYWxsIl0sICJmMTIyIiwgIk0zMzIuMiAxOC40YzEyIDUgMTkuOCAxNi42IDE5LjggMjkuNmwwIDgwIDQ4IDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCAxMTMuMy04MS41IDE2My45LTEwMC4yIDE3NC4xLTIuNSAxLjQtNS4zIDEuOS04LjEgMS45LTEwLjkgMC0xOS43LTguOS0xOS43LTE5LjcgMC03LjUgNC4zLTE0LjQgOS44LTE5LjUgOS40LTguOCAyMi4yLTI2LjQgMjIuMi01Ni43IDAtNTMtNDMtOTYtOTYtOTZsLTMyIDAgMCA4MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXpNMjA1LjYgMjMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUw1NC42IDIwOCAyMDUuNiAzNTguOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDEwIDIzMS4yYy02LjQtNi0xMC0xNC40LTEwLTIzLjJzMy42LTE3LjIgMTAtMjMuMkwxNzEuNiAyMy4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFNYWlsUmVwbHlBbGwgPSBmYVJlcGx5QWxsOwogICAgZmFVbml2ZXJzYWxBY2Nlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW5pdmVyc2FsLWFjY2VzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjlhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNjEuNS04Ni4xYy0xMi4yLTUuMi0yNi4zIC40LTMxLjUgMTIuNnMuNCAyNi4zIDEyLjYgMzEuNWwxMS45IDUuMWMxNy4zIDcuNCAzNS4yIDEyLjkgNTMuNiAxNi4zbDAgNTAuMWMwIDQuMy0uNyA4LjYtMi4xIDEyLjZsLTI4LjcgODYuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyNC40LTczLjJjMS4zLTMuOCA0LjgtNi40IDguOC02LjRzNy42IDIuNiA4LjggNi40bDI0LjQgNzMuMmM0LjIgMTIuNiAxNy44IDE5LjQgMzAuNCAxNS4yUzMzOSAzOTcgMzM0LjggMzg0LjRsLTI4LjctODYuMWMtMS40LTQuMS0yLjEtOC4zLTIuMS0xMi42bDAtNTAuMWMxOC40LTMuNSAzNi4zLTguOSA1My42LTE2LjNsMTEuOS01LjFjMTIuMi01LjIgMTcuOC0xOS4zIDEyLjYtMzEuNXMtMTkuMy0xNy44LTMxLjUtMTIuNkwzMzguNyAxNzVjLTI2LjEgMTEuMi01NC4yIDE3LTgyLjcgMTdzLTU2LjUtNS44LTgyLjctMTdsLTExLjktNS4xek0yNTYgMTYwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhVG9pbGV0UGFwZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBhcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTMxLCA2MzI2MywgInRvaWxldC1wYXBlci1hbHQiLCAidG9pbGV0LXBhcGVyLWJsYW5rIl0sICJmNzFlIiwgIk0zMjcuMSAzMmMtOC44IDExLjEtMTYgMjMuMS0yMS45IDM0LjgtMjEuNCA0Mi43LTMzLjIgOTguNC0zMy4yIDE1Ny4ybDAgMjY0YzAgMzAuOS0yNS4xIDU2LTU2IDU2TDU2IDU0NGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCAyMjRDMCAxMTggNDMgMzIgOTYgMzJsMjMxLjEgMHpNNDE2IDQxNmMtNTMgMC05Ni04Ni05Ni0xOTJzNDMtMTkyIDk2LTE5MiA5NiA4NiA5NiAxOTItNDMgMTkyLTk2IDE5MnptMC0xMjhjMTcuNyAwIDMyLTI4LjcgMzItNjRzLTE0LjMtNjQtMzItNjQtMzIgMjguNy0zMiA2NCAxNC4zIDY0IDMyIDY0eiJdCiAgICB9OwogICAgZmFUb2lsZXRQYXBlckFsdCA9IGZhVG9pbGV0UGFwZXI7CiAgICBmYVRvaWxldFBhcGVyQmxhbmsgPSBmYVRvaWxldFBhcGVyOwogICAgZmFWckNhcmRib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ci1jYXJkYm9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjcyOSIsICJNNTEyIDk2TDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTcuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43bDMzLjktMzMuOWM3LjItNy4yIDE3LjEtMTEuMyAyNy4zLTExLjNzMjAuMSA0LjEgMjcuMyAxMS4zbDMzLjkgMzMuOWMxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43TDUxMiA0MTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTgwIDI0MGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTM1Mi02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhUGl6emFTbGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaXp6YS1zbGljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODE4IiwgIk0xNjkuNyAuOWMtMjIuOC0xLjYtNDEuOSAxNC00Ny41IDM0LjdMMTEyLjUgNzJDMjkzLjMgNzIuMyA0MzkuNyAyMTguNyA0NDAgMzk5LjVsMzYuNC05LjdjMjAuOC01LjUgMzYuMy0yNC43IDM0LjctNDcuNS0xMi42LTE4Mi44LTE1OC42LTMyOC44LTM0MS40LTM0MS40em0yMjIgNDExLjVjLjItNC4xIC4zLTguMiAuMy0xMi40IDAtMTU0LjYtMTI1LjQtMjgwLTI4MC0yODAtNC4xIDAtOC4zIC4xLTEyLjQgLjNMLjUgNDkxLjljLTEuNSA1LjUgLjEgMTEuNCA0LjEgMTUuNHM5LjkgNS42IDE1LjQgNC4xbDM3MS42LTk5LjF6TTE3NiAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAxMjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMzg0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVNwcmF5Q2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwcmF5LWNhbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJkIiwgIk0xOTIgMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtMTI4IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMjU2YzAtNTMgNDMtOTYgOTYtOTZsMTI4IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIwOGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjI0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjA4em0yNDAgODBhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwek0zMjAgNjRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDQ4IDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek01MTIgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0OCAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFWb2x1bWVMb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLWxvdyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI2NCwgInZvbHVtZS1kb3duIl0sICJmMDI3IiwgIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzgwLjYgMTgxLjVjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEMzNjEuMSAyMjcuNiAzNjggMjQxIDM2OCAyNTZzLTYuOSAyOC40LTE3LjcgMzcuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM0MDIuMSAzMTIuOSA0MTYgMjg2LjEgNDE2IDI1NnMtMTMuOS01Ni45LTM1LjUtNzQuNXoiXQogICAgfTsKICAgIGZhVm9sdW1lRG93biA9IGZhVm9sdW1lTG93OwogICAgZmFDcm9zcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm9zcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODMyNywgMTAwMTNdLCAiZjY1NCIsICJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgODAtODAgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw4MCAwIDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDggODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04MCAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6Il0KICAgIH07CiAgICBmYVBlcnNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjk0ODUsICJtYWxlIl0sICJmMTgzIiwgIk0yNDggMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN2w0Ni4zIDYyLjRjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDMjc0IDEzMiAyMzQuMyAxMTIgMTkyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDExMiAyMzYuNyAxMTIgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6Il0KICAgIH07CiAgICBmYU1hbGUgPSBmYVBlcnNvbjsKICAgIGZhSG91cmdsYXNzMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5MjAzLCA2MjAzMiwgImhvdXJnbGFzcy1lbXB0eSJdLCAiZjI1NCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxMWMwIDQyLjQtMTYuOSA4My4xLTQ2LjkgMTEzLjFsLTY3LjkgNjcuOSA2Ny45IDY3LjljMzAgMzAgNDYuOSA3MC43IDQ2LjkgMTEzLjFsMCAxMWMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMC0xMWMwLTQyLjQgMTYuOS04My4xIDQ2LjktMTEzLjFsNjcuOS02Ny45LTY3LjktNjcuOUM0OC45IDE1OC4xIDMyIDExNy40IDMyIDc1bDAtMTFDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNOTYgNjRsMCAxMWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOWw2Ny45IDY3LjkgNjcuOS02Ny45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlsMC0xMS0xOTIgMHptMCAzODRsMTkyIDAgMC0xMWMwLTI1LjUtMTAuMS00OS45LTI4LjEtNjcuOWwtNjcuOS02Ny45LTY3LjkgNjcuOWMtMTggMTgtMjguMSA0Mi40LTI4LjEgNjcuOWwwIDExeiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NFbXB0eTIgPSBmYUhvdXJnbGFzczM7CiAgICBmYUZpc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAzMV0sICJmNTc4IiwgIk0xODAuNSAxNDEuNUMyMTkuNyAxMDguNSAyNzIuNiA4MCAzMzYgODBzMTE2LjMgMjguNSAxNTUuNSA2MS41YzM5LjEgMzMgNjYuOSA3Mi40IDgxIDk5LjggNC43IDkuMiA0LjcgMjAuMSAwIDI5LjMtMTQuMSAyNy40LTQxLjkgNjYuOC04MSA5OS44LTM5LjIgMzMuMS05MiA2MS41LTE1NS41IDYxLjVzLTExNi4zLTI4LjUtMTU1LjUtNjEuNWMtMTYuMi0xMy43LTMwLjUtMjguNS00Mi43LTQzLjFMNDguMSAzNzkuNmMtMTIuNSA3LjMtMjguNCA1LjMtMzguNy00LjlzLTEyLjQtMjYtNS4zLTM4LjZMNTAgMjU2IDQuMiAxNzUuOWMtNy4yLTEyLjYtNS0yOC40IDUuMy0zOC42czI2LjEtMTIuMiAzOC43LTQuOWw4OS43IDUyLjNjMTIuMi0xNC42IDI2LjUtMjkuNCA0Mi43LTQzLjF6TTQ0OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhRHJ1bXN0aWNrQml0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcnVtc3RpY2stYml0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQ3IiwgIk0xNjAgMjY1LjJjMCA4LjUtMy40IDE2LjYtOS40IDIyLjZsLTI2LjggMjYuOGMtMTIuMyAxMi4zLTMyLjUgMTEuNC00OS40IDcuMi00LjYtMS4xLTkuNS0xLjgtMTQuNS0xLjgtMzMuMSAwLTYwIDI2LjktNjAgNjBzMjYuOSA2MCA2MCA2MGM2LjMgMCAxMiA1LjcgMTIgMTIgMCAzMy4xIDI2LjkgNjAgNjAgNjBzNjAtMjYuOSA2MC02MGMwLTUtLjYtOS44LTEuOC0xNC41LTQuMi0xNi45LTUuMi0zNy4xIDcuMi00OS40bDI2LjgtMjYuOGM2LTYgMTQuMS05LjQgMjIuNi05LjRsODkuMiAwYzYuMyAwIDEyLjQtLjMgMTguNS0xIDExLjktMS4yIDE2LjQtMTUuNSAxMC44LTI2LTguNS0xNS44LTEzLjMtMzMuOC0xMy4zLTUzIDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDggMCAxNS43IC44IDIzLjIgMi40IDExLjcgMi41IDI0LjEtNS45IDIyLTE3LjYtMTQuNy04Mi4zLTg2LjctMTQ0LjgtMTczLjItMTQ0LjgtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzZsMCA4OS4yeiJdCiAgICB9OwogICAgZmFDaGFydFNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ3MyIsICJNMTkyIDgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzUyek0wIDI3MmMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MnpNNDMyIDk2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFBdG9tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF0b20iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODgzXSwgImY1ZDIiLCAiTTIyNCAzOTguOGMtMTEuOCA1LjEtMjMuNCA5LjctMzQuOSAxMy41IDE2LjcgMzMuOCAzMSAzNS43IDM0LjkgMzUuN3MxOC4xLTEuOSAzNC45LTM1LjdjLTExLjQtMy45LTIzLjEtOC40LTM0LjktMTMuNXpNNDE0IDI1NmMzMyA0NS4yIDQ0LjMgOTAuOSAyMy42IDEyOC0yMC4yIDM2LjMtNjIuNSA0OS4zLTExNS4yIDQzLjItMjIgNTIuMS01NS43IDg0LjgtOTguNCA4NC44cy03Ni40LTMyLjctOTguNC04NC44QzcyLjkgNDMzLjMgMzAuNiA0MjAuMyAxMC40IDM4NC0xMC4zIDM0Ni45IDEgMzAxLjIgMzQgMjU2IDEgMjEwLjgtMTAuMyAxNjUuMSAxMC40IDEyOCAzMC42IDkxLjcgNzIuOSA3OC43IDEyNS42IDg0LjggMTQ3LjYgMzIuNyAxODEuMiAwIDIyNCAwczc2LjQgMzIuNyA5OC40IDg0LjhjNTIuNy02LjEgOTUgNi44IDExNS4yIDQzLjIgMjAuNyAzNy4xIDkuNCA4Mi44LTIzLjYgMTI4em0tNjUuOCA2Ny40Yy0xLjcgMTQuMi0zLjkgMjgtNi43IDQxLjIgMzEuOCAxLjQgMzguNi04LjcgNDAuMi0xMS43IDIuMy00LjIgNy0xNy45LTExLjktNDguMS02LjggNi4zLTE0IDEyLjUtMjEuNiAxOC42em0tNi43LTE3NS45YzIuOCAxMy4xIDUgMjYuOSA2LjcgNDEuMiA3LjYgNi4xIDE0LjggMTIuMyAyMS42IDE4LjYgMTguOS0zMC4yIDE0LjItNDQgMTEuOS00OC4xLTEuNi0yLjktOC40LTEzLTQwLjItMTEuN3pNMjU4LjkgOTkuN0MyNDIuMSA2NS45IDIyNy45IDY0IDIyNCA2NHMtMTguMSAxLjktMzQuOSAzNS43YzExLjQgMy45IDIzLjEgOC40IDM0LjkgMTMuNSAxMS44LTUuMSAyMy40LTkuNyAzNC45LTEzLjV6bS0xNTkgODguOWMxLjctMTQuMyAzLjktMjggNi43LTQxLjItMzEuOC0xLjQtMzguNiA4LjctNDAuMiAxMS43LTIuMyA0LjItNyAxNy45IDExLjkgNDguMSA2LjgtNi4zIDE0LTEyLjUgMjEuNi0xOC42ek03OC4yIDMwNC44Yy0xOC45IDMwLjItMTQuMiA0NC0xMS45IDQ4LjEgMS42IDIuOSA4LjQgMTMgNDAuMiAxMS43LTIuOC0xMy4xLTUtMjYuOS02LjctNDEuMi03LjYtNi4xLTE0LjgtMTIuMy0yMS42LTE4LjZ6TTMwNCAyNTZhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAwem0tODAtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFQID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMTJdLCAiNTAiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMTI4IDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjBTMjQ4LjQgMzUyIDE2MCAzNTJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI4OGw5NiAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2bC05NiAwIDAgMTkyeiJdCiAgICB9OwogICAgZmFKZXRGaWdodGVyVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamV0LWZpZ2h0ZXItdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUxOCIsICJNMjA2LjggNDcuOEMyMDIuMyA1OC41IDIwMCA3MCAyMDAgODEuNmwwIDEwMC40LTE1MiAxMTQgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDIzNC43IDAgMjQ4TDAgMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04IDE1MiAwIDAgNTQuNC02NiA1Mi44Yy0zLjggMy02IDcuNi02IDEyLjVsMCAyNC4zYzAgOC44IDcuMiAxNiAxNiAxNmw4OCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQuM2MwLTQuOS0yLjItOS41LTYtMTIuNWwtNjYtNTIuOCAwLTU0LjQgMTUyIDAgMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OC0xNTItMTE0IDAtMTAwLjRjMC0xMS42LTIuMy0yMy4xLTYuOC0zMy44bC0yNy4xLTY1QzI3NC40LTI2LjIgMjY1LjctMzIgMjU2LTMycy0xOC40IDUuOC0yMi4yIDE0LjhsLTI3LjEgNjV6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTYwIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdCiAgICB9OwogICAgZmFTaGVldFBsYXN0aWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hlZXQtcGxhc3RpYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTcxIiwgIk0wIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDkuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDM2NS4zIDM4Ni43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMMzg0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4em0yMDggNS41bDAtOTMuNWMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5My41IDAtMTE3LjUgMTE3LjV6TTE1MyAxMDVsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ4LTQ4YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXptOTYgMzJMMTM3IDI0OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMTUgMTAzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXoiXQogICAgfTsKICAgIGZhViA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTE4XSwgIjU2IiwgIk0xOS43IDM0LjVjMTYuMy02LjggMzUgLjkgNDEuOCAxNy4yTDE5MiAzNjQuOCAzMjIuNSA1MS43YzYuOC0xNi4zIDI1LjUtMjQgNDEuOC0xNy4yczI0IDI1LjUgMTcuMiA0MS44bC0xNjAgMzg0Yy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN3MtMjQuNi03LjgtMjkuNS0xOS43TDIuNSA3Ni4zYy02LjgtMTYuMyAuOS0zNSAxNy4yLTQxLjh6Il0KICAgIH07CiAgICBmYUxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LXNxdWFyZXMiXSwgImYwM2EiLCAiTTQwIDQ4QzI2LjcgNDggMTYgNTguNyAxNiA3MmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNEw0MCA0OHpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTE2IDIzMmwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTQwIDM2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUxpc3RTcXVhcmVzID0gZmFMaXN0OwogICAgZmFQaXNjZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGlzY2VzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU4NGMiLCAiTTQwLjQgMTAuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTIgMi45IDIuNyAyOC4zIDI2LjcgNTMuNiA2Ny44IDIyLjMgMzYuMiA0NSA4Ni42IDUxLjEgMTQ3LjhsNjcuMyAwYzYuMS02MS4xIDI4LjgtMTExLjYgNTEuMS0xNDcuOCAyNS4zLTQxLjEgNTAuNy02NS4xIDUzLjYtNjcuOCAxMy0xMS45IDMzLjMtMTEuMSA0NS4yIDIgMTEuOSAxMyAxMSAzMy4zLTIgNDUuMi0xLjQgMS4zLTIyIDIxLjEtNDIuNCA1NC4yLTE3LjkgMjkuMS0zNS40IDY4LTQxLjIgMTE0LjJsOTQgMCAzLjMgLjJjMTYuMSAxLjYgMjguNyAxNS4zIDI4LjcgMzEuOHMtMTIuNiAzMC4yLTI4LjcgMzEuOGwtMy4zIC4yLTk0IDBjNS44IDQ2LjIgMjMuMyA4NS4xIDQxLjIgMTE0LjIgMjAuNCAzMy4xIDQxIDUyLjkgNDIuNCA1NC4yIDEzIDExLjkgMTMuOSAzMi4yIDIgNDUuMi0xMS45IDEzLTMyLjIgMTMuOS00NS4yIDItMi45LTIuNy0yOC4zLTI2LjctNTMuNi02Ny44LTIyLjMtMzYuMi00NS04Ni42LTUxLjEtMTQ3LjhsLTY3LjMgMGMtNi4xIDYxLjEtMjguOCAxMTEuNi01MS4xIDE0Ny44LTI1LjMgNDEuMS01MC43IDY1LjEtNTMuNiA2Ny44LTEzIDExLjktMzMuMyAxMS4xLTQ1LjItMi0xMS45LTEzLTExLTMzLjMgMi00NS4yIDEuNC0xLjMgMjItMjEuMSA0Mi40LTU0LjIgMTcuOS0yOS4xIDM1LjQtNjggNDEuMi0xMTQuMmwtOTQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NCAwYy01LjgtNDYuMi0yMy4zLTg1LjEtNDEuMi0xMTQuMi0yMC40LTMzLjEtNDEtNTIuOS00Mi40LTU0LjItMTMtMTEuOS0xMy45LTMyLjItMi00NS4yeiJdCiAgICB9OwogICAgZmFTb2xhclBhbmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvbGFyLXBhbmVsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1YmEiLCAiTTEyMS44IDMyYy0zMCAwLTU2IDIwLjgtNjIuNSA1MC4xTDkuNiAzMDYuMUMuNyAzNDYuMSAzMS4xIDM4NCA3MiAzODRsMTg0LjEgMCAwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NCAxODQuMSAwYzQwLjkgMCA3MS40LTM3LjkgNjIuNS03Ny45bC00OS44LTIyNEM1MTAuNCA1Mi44IDQ4NC41IDMyIDQ1NC41IDMyTDEyMS44IDMyek0yNDUuNiA5Nmw4NS4yIDAgNy4zIDg4LTk5LjggMCA3LjMtODh6bS01NS41IDg4bC04Ny44IDAgMTkuNi04OCA3NS42IDAtNy4zIDg4ek05MS42IDIzMmw5NC41IDAtNy4zIDg4LTEwNi43IDAgMTkuNi04OHptMTQyLjYgMGwxMDcuOCAwIDcuMyA4OC0xMjIuNSAwIDcuMy04OHptMTU2IDBsOTQuNSAwIDE5LjYgODgtMTA2LjcgMC03LjMtODh6TTQ3NCAxODRsLTg3LjggMC03LjMtODggNzUuNiAwIDE5LjYgODh6Il0KICAgIH07CiAgICBmYUxhbmRNaW5lT24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZC1taW5lLW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWIiLCAiTTMxMiAwbDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0TDI2NCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTE2MCAyODhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiA4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMODAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDgwIDAgMC0zMnpNMTIgMTE0LjdjNy40LTExIDIyLjMtMTQgMzMuMy02LjdsOTYgNjRjMTEgNy40IDE0IDIyLjMgNi43IDMzLjNzLTIyLjMgMTQtMzMuMyA2LjdsLTk2LTY0Yy0xMS03LjQtMTQtMjIuMy02LjctMzMuM3pNNTMwLjcgMTA4YzExLTcuNCAyNS45LTQuNCAzMy4zIDYuN3M0LjQgMjUuOS02LjcgMzMuM2wtOTYgNjRjLTExIDcuNC0yNS45IDQuNC0zMy4zLTYuN3MtNC40LTI1LjkgNi43LTMzLjNsOTYtNjR6Il0KICAgIH07CiAgICBmYUhlYWRwaG9uZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYWRwaG9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MTEsIDYyODYzLCAiaGVhZHBob25lcy1hbHQiLCAiaGVhZHBob25lcy1zaW1wbGUiXSwgImYwMjUiLCAiTTY0IDIyNGMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MHMxNjAgNzEuNiAxNjAgMTYwbDAgMzcuNWMtMTAtMy41LTIwLjgtNS41LTMyLTUuNWwtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTYwQzQ0OCAxMDAuMyAzNDcuNyAwIDIyNCAwUzAgMTAwLjMgMCAyMjRMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwYy0xMS4yIDAtMjIgMS45LTMyIDUuNUw2NCAyMjR6Il0KICAgIH07CiAgICBmYUhlYWRwaG9uZXNBbHQyID0gZmFIZWFkcGhvbmVzMjsKICAgIGZhSGVhZHBob25lc1NpbXBsZTIgPSBmYUhlYWRwaG9uZXMyOwogICAgZmFCdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NjUzXSwgImYyMDciLCAiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCAzODRjMCAyOS44IDIwLjQgNTQuOSA0OCA2MmwwIDM0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAxOTIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zNGMyNy42LTcuMSA0OC0zMi4yIDQ4LTYybDAtMjg4YzAtNTMtNDMtOTYtOTYtOTZMOTYgMHpNNjQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEwNCAwIDAgMTEyLTEwNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4em0xODQgODBsMC0xMTIgMTA0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTA0IDB6TTk2IDMyMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI1NiAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMTUyIDcyYzAtMTMuMyAxMC43LTI0IDI0LTI0bDk2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFGaWxlUG93ZXJwb2ludDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wb3dlcnBvaW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzQiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNTIgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQgMjQgMGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MmwtNDggMHptNDggOTZsLTI0IDAgMC00OCAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFRdW90ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVvdGUtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgyMjAsICJxdW90ZS1sZWZ0LWFsdCJdLCAiZjEwZCIsICJNMCAyMTZDMCAxNDkuNyA1My43IDk2IDEyMCA5Nmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMTZ6bTI1NiAwYzAtNjYuMyA1My43LTEyMCAxMjAtMTIwbDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTEzNnoiXQogICAgfTsKICAgIGZhUXVvdGVMZWZ0QWx0ID0gZmFRdW90ZUxlZnQ7CiAgICBmYUNoZXZyb25Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tZG93biIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDc4IiwgIk0yMDEuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxOTItMTkyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMzguNyA1NC42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyeiJdCiAgICB9OwogICAgZmFFYXJ0aEFzaWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtYXNpYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OSwgImdsb2JlLWFzaWEiXSwgImY1N2UiLCAiTTUwIDI4NC44YzQuMiAyLjEgOSAzLjIgMTQgMy4ybDUwLjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwxMy4zIDEzLjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0LTEwLjcgMjQtMjRsMC00Mi43YzAtOC41IDMuNC0xNi42IDkuNC0yMi42bDEzLjMtMTMuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZMMzA0IDU3YzAtMS4yLS4xLTIuMy0uMi0zLjUtMTUuNC0zLjYtMzEuNC01LjUtNDcuOC01LjUtMTE0LjkgMC0yMDggOTMuMS0yMDggMjA4IDAgOS44IC43IDE5LjQgMiAyOC44em00MDMuMyAzNy4zYy0zLjItMS40LTYuNy0yLjEtMTAuNS0yLjFMNDMyIDMyMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZsLTM0LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRsLTQ1LjMgNDUuM2MtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMTguN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjQgMi4yIDIuMiA0LjcgNC4xIDcuMyA1LjUgMzkuMy0yNS40IDY5LjUtNjMuNiA4NC42LTEwOC44ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xMjggMzY4YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTI3MiAyNTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZ6bTQ4LTExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhR2xvYmVBc2lhID0gZmFFYXJ0aEFzaWE7CiAgICBmYUNlbnRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNlbnQtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlM2Y1IiwgIk0yMDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1LjRjNDMuNiA1LjIgODMgMjQuNSAxMTMuMyA1My4xIDEyLjkgMTIuMSAxMy40IDMyLjQgMS4zIDQ1LjJzLTMyLjQgMTMuNC00NS4yIDEuM2MtMjQuNC0yMy01Ny4yLTM3LjEtOTMuMy0zNy4xLTc1LjEgMC0xMzYgNjAuOS0xMzYgMTM2czYwLjkgMTM2IDEzNiAxMzZjMzYuMiAwIDY5LTE0LjEgOTMuMy0zNy4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yQzMyMyA0MzAuMSAyODMuNiA0NDkuNCAyNDAgNDU0LjZsMCAyNS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjhDODQuNyA0MzMuNSAxNiAzNTIuOCAxNiAyNTZTODQuNyA3OC41IDE3NiA2MGwwLTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaGllbGRDYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWNhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTcyIiwgIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwIDE1NC40YzAtNS44IDQuNy0xMC40IDEwLjQtMTAuNGwuMiAwYzMuNCAwIDYuNSAxLjYgOC41IDQuM2w0MCA1My4zYzMgNCA3LjggNi40IDEyLjggNi40bDQ4IDBjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNsLjIgMGM1LjggMCAxMC40IDQuNyAxMC40IDEwLjRMMzUyIDI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExNy42ek0yMTYgMjg4YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptOTYtMTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXQogICAgfTsKICAgIGZhU2Nob29sQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZiIiwgIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFNYXJ0aW5pR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFydGluaS1nbGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg2NCwgImdsYXNzLW1hcnRpbmktYWx0Il0sICJmNTdiIiwgIk0yLjQgNTEuOEM3LjQgMzkuOCAxOS4xIDMyIDMyIDMybDQ0OCAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlMMjg4IDMwMS4zIDI4OCA0NDggMzUyIDQ0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTE0Ni43LTIxNC42LTIxNC42Qy4yIDc3LjUtMi41IDYzLjcgMi40IDUxLjh6TTM1NC43IDE0NGw0OC00OC0yOTMuNSAwIDQ4IDQ4IDE5Ny41IDB6Il0KICAgIH07CiAgICBmYUdsYXNzTWFydGluaUFsdCA9IGZhTWFydGluaUdsYXNzOwogICAgZmFQbHVnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjhdLCAiZjFlNiIsICJNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDY0YzAgOTUuMS02OS4yIDE3NC4xLTE2MCAxODkuM2wwIDY2LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzEwMS4yIDM5OC4xIDMyIDMxOS4xIDMyIDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhUGFub3JhbWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFub3JhbWEiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTIwOSIsICJNNDMuOSA0OEMxOS43IDQ4IDAgNjcuNyAwIDkxLjlMMCA0MjAuMWMwIDI0LjMgMTkuNyA0My45IDQzLjkgNDMuOSA1LjUgMCAxMC43LTEgMTUuNy0yLjkgMTIuOS00LjkgMTAzLjQtMzcuMSAyMjguNC0zNy4xczIxNS41IDMyLjMgMjI4LjQgMzcuMWM1IDEuOSAxMC4yIDIuOSAxNS43IDIuOSAyNC4zIDAgNDMuOS0xOS43IDQzLjktNDMuOWwwLTMyOC4yYzAtMjQuMy0xOS43LTQzLjktNDMuOS00My45LTUuNSAwLTEwLjcgMS0xNS43IDIuOS0xMi45IDQuOS0xMDMuNCAzNy4xLTIyOC40IDM3LjFTNzIuNSA1NS43IDU5LjYgNTAuOUM1NC42IDQ5IDQ5LjQgNDggNDMuOSA0OHpNNzIgMTc2YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6bTI2NC4xLTE2YzcuNSAwIDE0LjYgMy42IDE5LjEgOS42TDQ3OS43IDMzNi4yYzUuOSA3LjkgNi40IDE4LjUgMS4zIDI2LjlzLTE0LjggMTIuOC0yNC41IDExLjFjLTQ1LjgtNy44LTEwMy4zLTE0LjItMTY4LjQtMTQuMi02NS42IDAtMTIzLjQgNi41LTE2OS4zIDE0LjQtOS44IDEuNy0xOS43LTIuOS0yNC43LTExLjVzLTQuMy0xOS40IDEuOS0yNy4yTDE2NS4zIDI0OWM0LjYtNS43IDExLjUtOSAxOC43LTlzMTQuMiAzLjMgMTguNyA5bDI3LjUgMzQuNCA4Ni43LTExMy45YzQuNi02IDExLjctOS41IDE5LjItOS41eiJdCiAgICB9OwogICAgZmFDbG9ja1JvdGF0ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvY2stcm90YXRlLWxlZnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGlzdG9yeSJdLCAiZjFkYSIsICJNMjg4IDY0YzEwNiAwIDE5MiA4NiAxOTIgMTkyUzM5NCA0NDggMjg4IDQ0OGMtNjUuMiAwLTEyMi45LTMyLjUtMTU3LjYtODIuMy0xMC4xLTE0LjUtMzAuMS0xOC00NC42LTcuOXMtMTggMzAuMS03LjkgNDQuNkMxMjQuMSA0NjguNiAyMDEgNTEyIDI4OCA1MTIgNDI5LjQgNTEyIDU0NCAzOTcuNCA1NDQgMjU2UzQyOS40IDAgMjg4IDBDMjAyLjMgMCAxMjYuNSA0Mi4xIDgwIDEwNi43TDgwIDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzE2IDYyLjMgMTYgODBsMCAxMTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjQuNiAwYy41IDAgMSAwIDEuNSAwbDg2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM4LjMgMEMxNTQuOSAxMDIuNiAyMTcgNjQgMjg4IDY0em0yNCA4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDYuNCAyLjUgMTIuNSA3IDE3bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjUtNjUgMC05NC4xeiJdCiAgICB9OwogICAgZmFIaXN0b3J5ID0gZmFDbG9ja1JvdGF0ZUxlZnQ7CiAgICBmYUphcldoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImphci13aGVhdCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTE3IiwgIk0zMi04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDIwOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDU2IDE2QzQyLjcgMTYgMzIgNS4zIDMyLTh6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTExMiAzMmwtNDIuMiAwYy0zLjIgMC01LjggMi42LTUuOCA1LjggMCAzMi4xIDI2IDU4LjIgNTguMiA1OC4ybDc1LjYgMGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjIgMC0zLjItMi42LTUuOC01LjgtNS44TDIwOCAxNjBjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43LTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3ptNDggMTE3LjdjLTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN2wtNDIuMiAwYy0zLjIgMC01LjggMi42LTUuOCA1LjggMCAzMi4xIDI2IDU4LjIgNTguMiA1OC4ybDc1LjYgMGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjIgMC0zLjItMi42LTUuOC01LjgtNS44TDIwOCAyNTZjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43ek0xMTIgMzUybC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsMjEuOCAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyIDIxLjggMGMzMi4xIDAgNTguMi0yNiA1OC4yLTU4LjIgMC0zLjItMi42LTUuOC01LjgtNS44TDIwOCAzNTJjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43LTExLjctMTMuMy0yOC45LTIxLjctNDgtMjEuN3oiXQogICAgfTsKICAgIGZhQ2xvdWRBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMzM3LCAiY2xvdWQtZG93bmxvYWQiLCAiY2xvdWQtZG93bmxvYWQtYWx0Il0sICJmMGVkIiwgIk0xNDQgNDgwYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTYzLjQgNDEtMTE3LjIgOTcuOS0xMzYuNS0xLjMtNy43LTEuOS0xNS41LTEuOS0yMy41IDAtNzkuNSA2NC41LTE0NCAxNDQtMTQ0IDU1LjQgMCAxMDMuNSAzMS4zIDEyNy42IDc3LjEgMTQuMi04LjMgMzAuOC0xMy4xIDQ4LjQtMTMuMSA1MyAwIDk2IDQzIDk2IDk2IDAgMTUuNy0zLjggMzAuNi0xMC41IDQzLjcgNDQgMjAuMyA3NC41IDY0LjcgNzQuNSAxMTYuMyAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzA0IDB6TTM3NyAzMTNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEwMi4xLTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdCiAgICB9OwogICAgZmFDbG91ZERvd25sb2FkID0gZmFDbG91ZEFycm93RG93bjsKICAgIGZhQ2xvdWREb3dubG9hZEFsdCA9IGZhQ2xvdWRBcnJvd0Rvd247CiAgICBmYVRydWNrUmFtcEJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1yYW1wLWJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0cnVjay1sb2FkaW5nIl0sICJmNGRlIiwgIk00MDAgMzJjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjQ4LjItMjk3LjIgODkuMkM1LjkgNDU0LjQtMy43IDQ3Mi4zIDEuNCA0ODkuMnMyMi45IDI2LjUgMzkuOCAyMS41bDMxNS41LTk0LjYgNDMuNyAwYy0uMiAyLjYtLjQgNS4zLS40IDggMCA0OC42IDM5LjQgODggODggODhzODgtMzkuNCA4OC04OGwwLTM5Mi0xNzYgMHpNNTI4IDQyNGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MCAxNy45LTQwIDQwLTQwYzIyLjEgMCAzOS45IDE3LjkgNDAgMzkuOWwwIC4xek01MS45IDE0OS41QzE4LjEgMTU5LjgtLjkgMTk1LjYgOS40IDIyOS40bDI4LjEgOTEuOEM0Ny44IDM1NSA4My42IDM3NCAxMTcuNCAzNjMuN2w5MS44LTI4LjFjMzMuOC0xMC4zIDUyLjgtNDYuMSA0Mi41LTc5LjlsLTI4LjEtOTEuOGMtMTAuMy0zMy44LTQ2LjEtNTIuOC03OS45LTQyLjVMNTEuOSAxNDkuNXoiXQogICAgfTsKICAgIGZhVHJ1Y2tMb2FkaW5nID0gZmFUcnVja1JhbXBCb3g7CiAgICBmYUFuZ2xlRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk2NF0sICJmMTA3IiwgIk0xNjkuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5MiAzMDYuNyA1NC42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1YyIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFXaW5kb3dNYXhpbWl6ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1heGltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgImYyZDAiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0yNCA2NGwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmRzSG9sZGluZ0NpcmNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ob2xkaW5nLWNpcmNsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGZiIiwgIk0zMjAgMGExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTYwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xIDEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOC03LjMtNy4zLTIzLjEtMjMuMS00Ny4yLTQ3LjItMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGMyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMmwwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJsMCA3OC45YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC02Ni43IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41TDAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDIyMS41YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDUxMiA0OTMuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w0MDAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTc4LjljMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMGM3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtMjQuMSAyNC4xLTM5LjkgMzkuOS00Ny4yIDQ3LjItMTEgMTEtOS4yIDI5LjIgMy43IDM3LjggOS43IDYuNSAyMi43IDUuMiAzMS0zLjFsNTEuMS01MS4xYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTYwIDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHoiXQogICAgfTsKICAgIGZhTG9jYXRpb25QaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tcGluIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbIm1hcC1tYXJrZXIiXSwgImYwNDEiLCAiTTE5MiAwQzg2IDAgMCA4NC40IDAgMTg4LjYgMCAzMDcuOSAxMjAuMiA0NTAuOSAxNzAuNCA1MDUuNCAxODIuMiA1MTguMiAyMDEuOCA1MTguMiAyMTMuNiA1MDUuNCAyNjMuOCA0NTAuOSAzODQgMzA3LjkgMzg0IDE4OC42IDM4NCA4NC40IDI5OCAwIDE5MiAweiJdCiAgICB9OwogICAgZmFNYXBNYXJrZXIgPSBmYUxvY2F0aW9uUGluOwogICAgZmFCb3dsaW5nQmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3dsaW5nLWJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQzNiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCA4MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTIwOCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTY0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQ2FydEZsYXRiZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1mbGF0YmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImRvbGx5LWZsYXRiZWQiXSwgImY0NzQiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyODhjMCAzOS44IDI5LjEgNzIuOCA2Ny4xIDc5LTIgNS4zLTMuMSAxMS0zLjEgMTcgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwxOTcuNSAwYy0xLjggNS0yLjcgMTAuNC0yLjcgMTYgMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNmwzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQwMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yODhDMTI4IDM1LjggOTIuMiAwIDQ4IDBMMzIgMHpNMjI0IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE3NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNDAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwyMjQgNjR6Il0KICAgIH07CiAgICBmYURvbGx5RmxhdGJlZCA9IGZhQ2FydEZsYXRiZWQ7CiAgICBmYUhvdXNlVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS11c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhvbWUtdXNlciJdLCAiZTFiMCIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjAwIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTE0NCA0MzJjMC00NC4yIDM1LjgtODAgODAtODBsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZ6Il0KICAgIH07CiAgICBmYUhvbWVVc2VyID0gZmFIb3VzZVVzZXI7CiAgICBmYUdob3N0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdob3N0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTIzXSwgImY2ZTIiLCAiTTQwLjEgNDY3LjFsLTExLjIgOUMyNS43IDQ3OC42IDIxLjggNDgwIDE3LjggNDgwIDggNDgwIDAgNDcyIDAgNDYyLjJMMCAxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkybDAgMjcwLjJjMCA5LjgtOCAxNy44LTE3LjggMTcuOC00IDAtNy45LTEuNC0xMS4xLTMuOWwtMTEuMi05Yy0xMy40LTEwLjctMzIuOC05LTQ0LjEgMy45TDI2OS4zIDUwNmMtMy4zIDMuOC04LjIgNi0xMy4zIDZzLTkuOS0yLjItMTMuMy02bC0yNi42LTMwLjVjLTEyLjctMTQuNi0zNS40LTE0LjYtNDguMiAwTDE0MS4zIDUwNmMtMy4zIDMuOC04LjIgNi0xMy4zIDZzLTkuOS0yLjItMTMuMy02TDg0LjIgNDcxYy0xMS4zLTEyLjktMzAuNy0xNC42LTQ0LjEtMy45ek0xNjAgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQ29tbWVudE5vZGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtbm9kZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY5NiIsICJNNDgwIDIwOEM1MDMuNyAyMDggNTI1LjYgMjE1LjMgNTQzLjcgMjI3LjkgNTM2LjkgMTAwLjkgNDI1IDAgMjg4IDAgMTQ2LjYgMCAzMiAxMDcuNSAzMiAyNDAgMzIgMjk0LjMgNTEuMiAzNDQuMyA4My42IDM4NC41TDM0LjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43YzI3LjIgMTEuNCA1Ni45IDE4LjQgODguMSAyMC4yIC4xLTE4LjkgNC45LTM4IDE1LTU1LjUgMTcuMS0yOS43IDQ1LjgtNDguNSA3Ny01NC4ybDkuMi0xNmMtMy40LTEwLjctNS4yLTIyLTUuMi0zMy44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyek0zMjguNiA0NDhjLTE3LjcgMzAuNi03LjIgNjkuNyAyMy40IDg3LjRzNjkuNyA3LjIgODcuNC0yMy40YzEuNS0yLjYgMi44LTUuMyAzLjktOGw3My4zIDBjMS4xIDIuNyAyLjQgNS40IDMuOSA4IDE3LjcgMzAuNiA1Ni44IDQxLjEgODcuNCAyMy40czQxLjEtNTYuOCAyMy40LTg3LjRjLTEzLjQtMjMuMi0zOS4xLTM0LjgtNjQtMzEuNGwtMTcuNi0zMC43Yy0xMSAxMS43LTI1IDIwLjYtNDAuNiAyNS42bDE2LjUgMjguOWMtMy44IDQuOC02LjggMTAtOSAxNS42bC03My40IDBjLTIuMi01LjYtNS4zLTEwLjgtOS0xNS42bDMzLTU3LjdjNC4xIC44IDguNCAxLjMgMTIuOCAxLjMgMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjQtNjQgMjguNy02NCA2NGMwIDEzLjQgNC4xIDI1LjggMTEuMiAzNi4xbC0zNC42IDYwLjVjLTI1LTMuNC01MC42IDguMy02NCAzMS40eiJdCiAgICB9OwogICAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWFycm93LWRvd24tdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM4IiwgIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTMxOC4zIDI5OS4xbC00Ni4zLTYyLjQgMCAyNDMuMyAyNzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODAgMCAwLTI0My4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVDMTEwIDEzMiAxNDkuNyAxMTIgMTkyIDExMnM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnpNMTc2IDQ4MGwzMiAwIDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTI4ek01NjYuNiAxNjYuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw0MzIgMTQ2LjcgNDMyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE0Ni43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zeiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWYiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHoiXQogICAgfTsKICAgIGZhUGVyc29uU3dpbW1pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXN3aW1taW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ2LCAic3dpbW1lciJdLCAiZjVjNCIsICJNNTUyIDE1MmE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTI5My40IDE5OC4ybC04OC42IDczLjljMS4xIDAgMi4yLS4xIDMuMy0uMSAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgNC44IDAgOS43IC4yIDE0LjUgLjYtOC4zLTMwLTI0LjMtNTcuNy00Ni44LTgwLjItMTguNC0xOC40LTQwLjYtMzIuNy02NS00MS44bC02OC42LTI1LjdjLTI3LjQtMTAuMy01OC03LjUtODMuMSA3LjZsLTUzLjUgMzIuMWMtMTUuMiA5LjEtMjAuMSAyOC43LTExIDQzLjlzMjguNyAyMC4xIDQzLjkgMTFMMjMwIDE4Ny4zYzguNC01IDE4LjYtNS45IDI3LjctMi41bDM1LjcgMTMuNHptMTEwIDE4MS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgMzg2LjMgMTcuNiAzOTQuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYVN3aW1tZXIgPSBmYVBlcnNvblN3aW1taW5nOwogICAgZmFDb21tZW50RG90czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgImNvbW1lbnRpbmciXSwgImY0YWQiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0xMjggMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFDb21tZW50aW5nMiA9IGZhQ29tbWVudERvdHMyOwogICAgZmFDaGFydFBpZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1waWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicGllLWNoYXJ0Il0sICJmMjAwIiwgIk01MTIuNCAyNDBsLTE3NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE3NmMwLTE3LjcgMTQuNC0zMi4yIDMxLjktMjkuOSAxMDcgMTQuMiAxOTEuOCA5OSAyMDYgMjA2IDIuMyAxNy41LTEyLjIgMzEuOS0yOS45IDMxLjl6TTIyMi42IDM3LjJjMTguMS0zLjggMzMuOCAxMSAzMy44IDI5LjVsMCAxOTcuM2MwIDUuNiAyIDExIDUuNSAxNS4zTDM5NCA0MzguN2MxMS43IDE0LjEgOS4yIDM1LjQtNi45IDQ0LjEtMzQuMSAxOC42LTczLjIgMjkuMi0xMTQuNyAyOS4yLTEzMi41IDAtMjQwLTEwNy41LTI0MC0yNDAgMC0xMTUuNSA4MS41LTIxMS45IDE5MC4yLTIzNC44ek00NzcuOCAyODhsNjQgMGMxOC41IDAgMzMuMyAxNS43IDI5LjUgMzMuOC0xMC4yIDQ4LjQtMzUgOTEuNC02OS42IDEyNC4yLTEyLjMgMTEuNy0zMS42IDkuMi00Mi40LTMuOUwzNzQuOSAzNDAuNGMtMTcuMy0yMC45LTIuNC01Mi40IDI0LjYtNTIuNGw3OC4yIDB6Il0KICAgIH07CiAgICBmYVBpZUNoYXJ0ID0gZmFDaGFydFBpZTsKICAgIGZhRnJvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmcm9nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MmUiLCAiTTM2OCAzMmM0MS43IDAgNzUuOSAzMS44IDc5LjcgNzIuNWw4NS42IDI2LjNjMjUuNCA3LjggNDIuOCAzMS4zIDQyLjggNTcuOSAwIDIxLjgtMTEuNyA0MS45LTMwLjcgNTIuN2wtMTQ0LjUgODIuMSA5Mi41IDkyLjUgNTAuNyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNEwzNDYuOSAzNjAuMmMxMS43LTM2IDMuMi03Ny4xLTI1LjQtMTA1LjctNDAuNi00MC42LTEwNi4zLTQwLjYtMTQ2LjktLjFMMTAxIDMyNC40Yy02LjQgNi4xLTYuNyAxNi4yLS42IDIyLjZzMTYuMiA2LjYgMjIuNiAuNmw3My44LTcwLjIgLjEtLjEgLjEtLjFjMy41LTMuNSA3LjMtNi42IDExLjMtOS4yIDI3LjktMTguNSA2NS45LTE1LjQgOTAuNSA5LjIgMjQuNyAyNC43IDI3LjcgNjIuOSA5IDkwLjktMi42IDMuOC01LjYgNy41LTkgMTAuOUwyNjEuOCA0MTYgMzUyIDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA0ODBDMjguNyA0ODAgMCA0NTEuMyAwIDQxNiAwIDI0OS42IDEyNyAxMTIuOSAyODkuMyA5Ny41IDI5Ni4yIDYwLjIgMzI4LjggMzIgMzY4IDMyem0wIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVdpbmVCb3R0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZS1ib3R0bGUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjcyZiIsICJNODAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDExLjgtNi40IDIyLjItMTYgMjcuN2wwIDE0NS42YzU2LjUgMjQuNyA5NiA4MS4xIDk2IDE0Ni43bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDU3NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyODhjMC02NS42IDM5LjUtMTIyIDk2LTE0Ni43TDk2LTQuM0M4Ni40LTkuOCA4MC0yMC4yIDgwLTMyek05NiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDI4OHoiXQogICAgfTsKICAgIGZhSW5ib3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5ib3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjAxYyIsICJNOTEuOCAzMkM1OS45IDMyIDMyLjkgNTUuNCAyOC40IDg2LjlMLjYgMjgxLjJjLS40IDMtLjYgNi0uNiA5LjFMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMjUuN2MwLTMtLjItNi4xLS42LTkuMUw0ODMuNiA4Ni45QzQ3OS4xIDU1LjQgNDUyLjEgMzIgNDIwLjIgMzJMOTEuOCAzMnptMCA2NGwzMjguNSAwIDI3LjQgMTkyLTU5LjkgMGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtMTQuMyAyOC42Yy01LjQgMTAuOC0xNi41IDE3LjctMjguNiAxNy43bC0xMjAuNCAwYy0xMi4xIDAtMjMuMi02LjgtMjguNi0xNy43bC0xNC4zLTI4LjZjLTUuNC0xMC44LTE2LjUtMTcuNy0yOC42LTE3LjdMNjQuMyAyODggOTEuOCA5NnoiXQogICAgfTsKICAgIGZhU3F1YXJlSCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoLXNxdWFyZSJdLCAiZjBmZCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzIwIDE2OGwwIDE3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTY0LTk2IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgOTYgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUhTcXVhcmUgPSBmYVNxdWFyZUg7CiAgICBmYUhvdXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzYjIiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTIyNCAyNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZXZyb25SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hldnJvbi1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS1yaWdodCJdLCAiZjEzOCIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHpNMjQxIDM3N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw4Ny04Ny04Ny04N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwTDM0NSAyMzljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMMjQxIDM3N3oiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZVJpZ2h0ID0gZmFDaXJjbGVDaGV2cm9uUmlnaHQ7CiAgICBmYUZpbGVDc3YgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jc3YiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjZkZCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI2NCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLThjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwxNiAwYzIuMiAwIDQgMS44IDQgNGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0xMzYgMGMtMjguNyAwLTUyIDIzLjMtNTIgNTJzMjMuMyA1MiA1MiA1MmM2LjYgMCAxMiA1LjQgMTIgMTJzLTUuNCAxMi0xMiAxMmwtMzIgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MnMtMjMuMy01Mi01Mi01MmMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwyNCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMjQgMHptOTYgMGMtMTEgMC0yMCA5LTIwIDIwbDAgMzEuNmMwIDM1LjUgMTAuNSA3MC4zIDMwLjIgOTkuOGw1LjEgNy43YzMuNyA1LjYgMTAgOC45IDE2LjYgOC45czEyLjktMy4zIDE2LjYtOC45bDUuMS03LjdjMTkuNy0yOS42IDMwLjItNjQuMyAzMC4yLTk5LjhsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDMxLjZjMCAxOS42LTQuMSAzOC45LTEyIDU2LjctNy45LTE3LjgtMTItMzcuMS0xMi01Ni43bDAtMzEuNmMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYUhhdENvd2JveSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtY293Ym95IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4YzAiLCAiTTE4Mi4yIDc2LjFMMTMwLjggMzA3LjVDMTQ1LjUgMzI0LjkgMTY3LjQgMzM2IDE5MiAzMzZsMjU2IDBjMjQuNiAwIDQ2LjUtMTEuMSA2MS4yLTI4LjVMNDU3LjggNzYuMWMtNS43LTI1LjgtMjguNi00NC4xLTU1LTQ0LjEtMTIuMiAwLTI0LjEgNC0zMy44IDExLjNsLTQuNyAzLjVjLTI2LjMgMTkuNy02Mi40IDE5LjctODguNiAwTDI3MSA0My4zYy05LjgtNy4zLTIxLjYtMTEuMy0zMy44LTExLjMtMjYuNCAwLTQ5LjMgMTguMy01NSA0NC4xek02NCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJTMCAyMzguMyAwIDI1NkMwIDM2MiA4NiA0NDggMTkyIDQ0OGwyNTYgMGMxMDYgMCAxOTItODYgMTkyLTE5MiAwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMjU2IDBjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblRvbmd1ZVdpbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MCwgImdyaW4tdG9uZ3VlLXdpbmsiXSwgImY1OGIiLCAiTTE1Mi4yIDQ5MC4xQzYyLjUgNDUwLjIgMCAzNjAuNCAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCAxMDQuNC02Mi41IDE5NC4yLTE1Mi4yIDIzNC4xIDUuMy0xMyA4LjItMjcuMiA4LjItNDIuMWwwLTYxLjdjMTYuOS0xNi41IDMwLjEtMzYuNyAzOC4zLTU5LjMgNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xLTM5LjIgMTIuMi04My43IDE5LjEtMTMwLjcgMTkuMXMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDguMyAyMi42IDIxLjUgNDIuOCAzOC4zIDU5LjNsMCA2MS43YzAgMTQuOSAyLjkgMjkuMSA4LjIgNDIuMXpNMTUyIDIxMmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE4NCA2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHpNMzIwIDQwMi42bDAgNDUuNGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGwwLTQ1LjRjMC0xNC43IDExLjktMjYuNiAyNi42LTI2LjZsMiAwYzExLjMgMCAyMS4xIDcuOSAyMy42IDE4LjkgMi44IDEyLjYgMjAuOCAxMi42IDIzLjYgMCAyLjUtMTEuMSAxMi4zLTE4LjkgMjMuNi0xOC45bDIgMGMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMzM2IDE4NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVXaW5rMiA9IGZhRmFjZUdyaW5Ub25ndWVXaW5rMjsKICAgIGZhTCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTA4XSwgIjRjIiwgIk02NCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDM1MiAxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25TaG9ydFdpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi1zaG9ydC13aWRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNvcnQtYW1vdW50LWRlc2MiLCAic29ydC1hbW91bnQtZG93bi1hbHQiXSwgImY4ODQiLCAiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50RGVzYyA9IGZhQXJyb3dEb3duU2hvcnRXaWRlOwogICAgZmFTb3J0QW1vdW50RG93bkFsdCA9IGZhQXJyb3dEb3duU2hvcnRXaWRlOwogICAgZmFIb3VyZ2xhc3NIYWxmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MtaGFsZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJob3VyZ2xhc3MtMiJdLCAiZjI1MiIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTk2IDc1bDAtMTEgMTkyIDAgMCAxMWMwIDE5LTUuNiAzNy40LTE2IDUzTDExMiAxMjhjLTEwLjMtMTUuNi0xNi0zNC0xNi01M3ptMTYgMzA5YzMuNS01LjMgNy42LTEwLjMgMTIuMS0xNC45bDY3LjktNjcuOSA2Ny45IDY3LjljNC42IDQuNiA4LjYgOS42IDEyLjIgMTQuOUwxMTIgMzg0eiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3MyMiA9IGZhSG91cmdsYXNzSGFsZjI7CiAgICBmYVNwb29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwb29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzQ4LCA2MTg3MywgInV0ZW5zaWwtc3Bvb24iXSwgImYyZTUiLCAiTTI0NS44IDIyMC45Yy0xNC41LTE3LjYtMjEuOC0zOS4yLTIxLjgtNjAuOCAwLTgwLjIgOTYtMTYwLjIgMTkyLTE2MC4yIDUzIDAgOTYgNDMgOTYgOTYgMCA5Ni04MCAxOTItMTYwLjIgMTkyLTIxLjYgMC00My4yLTcuMy02MC44LTIxLjhMNTQuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQ1LjggMjIwLjl6Il0KICAgIH07CiAgICBmYVV0ZW5zaWxTcG9vbiA9IGZhU3Bvb247CiAgICBmYUNyZWRpdENhcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyZWRpdC1jYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc5LCA2MjA4MywgImNyZWRpdC1jYXJkLWFsdCJdLCAiZjA5ZCIsICJNMCAxMjhsMCAzMiA1MTIgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4em0wIDgwTDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2LTUxMiAwek02NCAzNjBjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTE0NCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFDcmVkaXRDYXJkQWx0MiA9IGZhQ3JlZGl0Q2FyZDI7CiAgICBmYUZpbGVJbnZvaWNlRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaW52b2ljZS1kb2xsYXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjRDNzQuNyA2NCA2NCA3NC43IDY0IDg4em0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0xMTIgNzZsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMTUyIDQwMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGFnaGV0dGktbW9uc3Rlci1mbHlpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicGFzdGFmYXJpYW5pc20iXSwgImY2N2IiLCAiTTIwOCA2NGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAwYzAgMTYuMi02IDMxLjEtMTYgNDIuM2wxNS42IDMxLjJjMTguNy02IDM5LjktOS41IDY0LjQtOS41czQ1LjggMy41IDY0LjQgOS41TDQwMCAxMDYuM2MtMTAtMTEuMy0xNi0yNi4xLTE2LTQyLjMgMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NC0yOC43IDY0LTY0IDY0Yy0xLjcgMC0zLjQtLjEtNS4xLS4yTDQyNy44IDE1OGMyMS4xIDEzLjYgMzcuNyAzMC4yIDUxLjQgNDYuNCA3LjEgOC4zIDEzLjUgMTYuNiAxOS4zIDI0bDEuNCAxLjhjNi4zIDguMSAxMS42IDE0LjggMTYuNyAyMC40IDEwLjcgMTEuNyAxNi4xIDEzLjQgMTkuNCAxMy40IDIuNSAwIDQuMy0uNiA3LjEtMy4zIDMuNy0zLjUgNy4xLTguOCAxMi41LTE3LjRsLjYtLjljNC42LTcuNCAxMS0xNy42IDE5LjQtMjUuNyA5LjctOS4zIDIyLjktMTYuNyA0MC40LTE2LjcgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIuNSAwLTQuMyAuNi03LjEgMy4zLTMuNyAzLjUtNy4xIDguOC0xMi41IDE3LjRsLS42IC45Yy00LjYgNy40LTExIDE3LjYtMTkuNCAyNS43LTkuNyA5LjMtMjIuOSAxNi43LTQwLjQgMTYuNy0xOC41IDAtMzIuOS04LjUtNDQuMy0xOC42LTMuMSA0LTYuNiA4LjMtMTAuNSAxMi43IDEuNCA0LjMgMi44IDguNSA0IDEyLjUgLjkgMyAxLjggNS44IDIuNiA4LjYgMyA5LjggNS41IDE4LjIgOC42IDI1LjkgMy45IDkuOCA3LjQgMTUuNCAxMC44IDE4LjUgMi42IDIuNCA1LjkgNC4zIDEyLjggNC4zIDguNyAwIDE2LjktNC4yIDMzLjctMTMuMiAxNS04IDM1LjctMTguOCA2Mi4zLTE4LjggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTEzLjQgMC0yNC43IDUuMi0zOS43IDEzLjItMSAuNi0yLjEgMS4xLTMuMiAxLjctMTMuMSA3LjEtMzEuNiAxNy4xLTUzLjEgMTcuMS0xOC40IDAtMzMuNi02LjEtNDUuNS0xNy4yLTExLjEtMTAuMy0xNy45LTIzLjctMjIuNy0zNi0zLjYtOS02LjctMTkuMS05LjUtMjguNS0xNi40IDEyLjMtMzYuMSAyMy42LTU4LjkgMzEuMyAzLjYgMTAuOCA4LjQgMjMuNSAxNC40IDM2LjIgNy41IDE1LjkgMTYuMiAzMC40IDI1LjggNDAuNSA5LjYgMTAuMiAxNy43IDEzLjcgMjQuNSAxMy43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yNS4yIDAtNDUtMTMuNS01OS41LTI4LjgtMTQuNS0xNS40LTI1LjctMzQuOS0zNC4yLTUzLTgtMTctMTQuMS0zMy44LTE4LjMtNDYuOS01LjIgLjQtMTAuNiAuNi0xNiAuNnMtMTAuOC0uMi0xNi0uNmMtNC4yIDEzLTEwLjMgMjkuOS0xOC4zIDQ2LjktOC41IDE4LjEtMTkuOCAzNy42LTM0LjIgNTMtMTQuNCAxNS4zLTM0LjMgMjguOC01OS41IDI4LjgtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGM2LjggMCAxNS0zLjUgMjQuNS0xMy43IDkuNS0xMC4xIDE4LjMtMjQuNiAyNS44LTQwLjUgNS45LTEyLjYgMTAuNy0yNS40IDE0LjQtMzYuMi0yMi44LTcuNy00Mi41LTE5LTU4LjktMzEuMy0yLjkgOS40LTYgMTkuNS05LjUgMjguNS00LjggMTIuMi0xMS42IDI1LjYtMjIuNyAzNi0xMS45IDExLjEtMjcuMSAxNy4yLTQ1LjUgMTcuMi0xMy4xIDAtMjQuNS00LjEtMzMuOC04LjktNy45LTQtMTUuNy05LjItMjIuMS0xMy41bDAgMC0yLjQtMS42Yy0xNS4zLTEwLjItMjUuOC0xNi0zNy43LTE2LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjguMSAwIDQ5LjYgMTQuMiA2NC4zIDI0bDIuNCAxLjZjNi45IDQuNiAxMi4xIDguMSAxNy4yIDEwLjcgNS41IDIuOCA5LjEgMy42IDEyIDMuNiA2LjggMCAxMC4yLTEuOSAxMi44LTQuMyAzLjQtMy4yIDctOC44IDEwLjgtMTguNSAzLTcuNyA1LjYtMTYuMSA4LjYtMjUuOSAuOC0yLjcgMS43LTUuNiAyLjYtOC42IDEuMi00IDIuNi04LjIgNC0xMi41LTMuOS00LjUtNy40LTguOC0xMC41LTEyLjctMTEuNCAxMC4xLTI1LjkgMTguNi00NC4zIDE4LjYtMTcuNSAwLTMwLjctNy40LTQwLjQtMTYuNy04LjQtOC4xLTE0LjgtMTguMy0xOS40LTI1LjdsLS42LS45Yy01LjQtOC42LTguOC0xMy45LTEyLjUtMTcuNC0yLjgtMi43LTQuNi0zLjMtNy4xLTMuMy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzE3LjUgMCAzMC43IDcuNCA0MC40IDE2LjcgOC40IDguMSAxNC44IDE4LjMgMTkuNCAyNS43bC42IC45YzUuNCA4LjYgOC44IDEzLjkgMTIuNSAxNy40IDIuOCAyLjcgNC42IDMuMyA3LjEgMy4zIDMuMyAwIDguNy0xLjcgMTkuNC0xMy40IDUuMS01LjYgMTAuNC0xMi4zIDE2LjctMjAuNGwxLjQtMS44YzUuOC03LjQgMTIuMi0xNS43IDE5LjMtMjQgMTMuOC0xNi4yIDMwLjMtMzIuOCA1MS40LTQ2LjRsLTE1LjEtMzAuMmMtMS43IC4xLTMuNCAuMi01LjEgLjItMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NCA2NCAyOC43IDY0IDY0em0yMDggMGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdCiAgICB9OwogICAgZmFQYXN0YWZhcmlhbmlzbSA9IGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzsKICAgIGZhTWFydGluaUdsYXNzQ2l0cnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnRpbmktZ2xhc3MtY2l0cnVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImNvY2t0YWlsIl0sICJmNTYxIiwgIk01NzYgODBjMC00NC4yLTM1LjgtODAtODAtODAtMTggMC0zNC42IDYtNDggMTZsLTgxIDBjMjMuNi00Ny40IDcyLjUtODAgMTI5LTgwIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzU3NS41IDIyNCA0OTYgMjI0Yy02LjUgMC0xMy0uNC0xOS4zLTEuM2w2NC03NC43YzEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDE5LjQtMTQuNiAzMi0zNy44IDMyLTY0ek02Ni45IDgyLjZDNzIuMiA3MS4zIDgzLjUgNjQgOTYgNjRsMzg0IDBjMTIuNSAwIDIzLjggNy4zIDI5LjEgMTguNnMzLjQgMjQuNy00LjggMzQuMmwtMTg0LjMgMjE1IDAgMTE2LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNi4yLTE4NC4zLTIxNWMtOC4xLTkuNS0xMC0yMi44LTQuOC0zNC4yek0xNjUuNiAxMjhMMjg4IDI3MC44IDQxMC40IDEyOCAxNjUuNiAxMjh6Il0KICAgIH07CiAgICBmYUNvY2t0YWlsID0gZmFNYXJ0aW5pR2xhc3NDaXRydXM7CiAgICBmYUJ1bGxob3JuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1bGxob3JuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI2LCAxMjgzNjNdLCAiZjBhMSIsICJNNDYxLjIgMTguOUM0NzIuNyAyNCA0ODAgMzUuNCA0ODAgNDhsMCA0MTZjMCAxMi42LTcuMyAyNC0xOC44IDI5LjFzLTI0LjggMy4yLTM0LjMtNS4xbC00Ni42LTQwLjdjLTQzLjYtMzguMS05OC43LTYwLjMtMTU2LjQtNjNsMCA5NS43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2QzU3LjMgMzg0IDAgMzI2LjcgMCAyNTZTNTcuMyAxMjggMTI4IDEyOGw4NC41IDBjNjEuOC0uMiAxMjEuNC0yMi43IDE2Ny45LTYzLjNsNDYuNi00MC43YzkuNC04LjMgMjIuOS0xMC4yIDM0LjMtNS4xek0yMjQgMzIwbDAgLjJjNzAuMyAyLjcgMTM3LjggMjguNSAxOTIgNzMuNGwwLTI3NS4zYy01NC4yIDQ0LjktMTIxLjcgNzAuNy0xOTIgNzMuNEwyMjQgMzIweiJdCiAgICB9OwogICAgZmFCb3hUaXNzdWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm94LXRpc3N1ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDViIiwgIk0xMDMuOSAzMmwxNjEgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOWwxNy40IDUyLjJjNC40IDEzLjEgMTYuNiAyMS45IDMwLjQgMjEuOWw2MC41IDBjMjEuOCAwIDM3LjMgMjEuNCAzMC40IDQyLjFMMzg0IDMyMCAxMjggMzIwIDcyLjcgNzAuOUM2OC4yIDUxIDgzLjQgMzIgMTAzLjkgMzJ6TTQ4IDI1NmwxNi42IDAgMTYuNSA3NC40Qzg2IDM1Mi40IDEwNS41IDM2OCAxMjggMzY4bDI1NiAwYzIwLjcgMCAzOS0xMy4yIDQ1LjUtMzIuOGwyNi40LTc5LjIgOC4xIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhTWF0dHJlc3NQaWxsb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWF0dHJlc3MtcGlsbG93IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MjUiLCAiTTI1NiA2NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwLTM4NHptNDggMzg0bDIwOCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDM4NHpNNjQgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyeiJdCiAgICB9OwogICAgZmFDaGV2cm9uTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGV2cm9uLWxlZnQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5MDAxXSwgImYwNTMiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDI0Ni42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE5MiAxOTJ6Il0KICAgIH07CiAgICBmYUNsb3VkTW9vblJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtbW9vbi1yYWluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3M2MiLCAiTTQ0OCAwYy02OC42IDAtMTI3LjEgNDMuMS0xNDkuOCAxMDMuOCAxNy4xIDE0LjEgMjkuNiAzMy41IDM0LjkgNTUuOCAzOS45IDIxLjcgNjYuOSA2My45IDY2LjkgMTEyLjUgMCAxMy41LTIuMSAyNi41LTUuOSAzOC43IDE2LjkgNiAzNSA5LjMgNTMuOSA5LjMgNDMgMCA4Mi4xLTE3IDExMC44LTQ0LjYgNC42LTQuNCA1LjktMTEuMiAzLjMtMTdzLTguNi05LjMtMTQuOS04LjhjLTMgLjItNi4xIC40LTkuMiAuNC02My41IDAtMTE1LTUxLjUtMTE1LTExNSAwLTQ1LjEgMjYtODQuMiA2My44LTEwMyA1LjctMi44IDktOC45IDguMi0xNS4yUzQ4OS42IDUuMyA0ODMuNCAzLjlDNDcyIDEuNCA0NjAuMiAwIDQ0OCAwek0yNzIgMzUyYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMzktMjcuOS03MS41LTY0LjgtNzguNiAuNS0zLjEgLjgtNi4yIC44LTkuNCAwLTMwLjktMjUuMS01Ni01Ni01Ni0xMi40IDAtMjMuOSA0LTMzLjEgMTAuOC0xMy40LTI1LjUtNDAuMS00Mi44LTcwLjktNDIuOC00NC4yIDAtODAgMzUuOC04MCA4MCAwIDcuNCAxIDE0LjYgMi45IDIxLjUtMjkuOCAxMS42LTUwLjkgNDAuNi01MC45IDc0LjUgMCA0NC4yIDM1LjggODAgODAgODBsMTkyIDB6TTY5IDQwMS4xYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJMMTcuMiA0ODAuNEMxMyA0OTMgMTkuOCA1MDYuNiAzMi40IDUxMC44czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bjE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tMS05IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtbnVtZXJpYy1hc2MiLCAic29ydC1udW1lcmljLWRvd24iXSwgImYxNjIiLCAiTTQxOC43IDM4YzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40ek0zNjUuMSA0MzAuNmwxMS43LTE4Yy0zMi45LTkuOS01Ni44LTQwLjUtNTYuOC03Ni42IDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAyMi45LTYuNiA0NS4zLTE5LjEgNjQuNWwtNDIuMSA2NC45Yy05LjYgMTQuOC0yOS40IDE5LjEtNDQuMyA5LjRzLTE5LjEtMjkuNC05LjQtNDQuM3pNNDI0IDMzNmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xNTAuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtOTYgOTZ6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljQXNjID0gZmFBcnJvd0Rvd24xOTsKICAgIGZhU29ydE51bWVyaWNEb3duID0gZmFBcnJvd0Rvd24xOTsKICAgIGZhSGFuZFNwb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNwb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDA2XSwgImYyNTkiLCAiTTIxNC45IDIzLjdDMjEwLjMgNi42IDE5Mi44LTMuNSAxNzUuNyAxLjFzLTI3LjIgMjIuMS0yMi42IDM5LjJMMjA2IDIzNy44YzIuNSA5LjItNC41IDE4LjItMTQgMTguMi02LjQgMC0xMi00LjItMTMuOS0xMC4zTDEzNC42IDEwMi43Yy01LjEtMTYuOS0yMy0yNi40LTM5LjktMjEuM3MtMjYuNCAyMy0yMS4zIDM5LjlsNjIuOCAyMDYuNGMyLjQgNy45LTcuMiAxMy44LTEzLjIgOC4xTDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjEgMGMuMSAwIC4xLS4xIC4xLS4xcy4xLS4xIC4xLS4xYzU4LjMtMy41IDEwOC42LTQzLjIgMTI1LjMtOTkuN2w4MS4yLTI3NWM1LTE2LjktNC43LTM0LjctMjEuNi0zOS44cy0zNC43IDQuNy0zOS44IDIxLjZMNDExLjUgMjQ3LjFjLTEuNiA1LjMtNi40IDguOS0xMiA4LjktNy45IDAtMTMuOC03LjMtMTIuMi0xNS4xbDM2LTE3MC4zYzMuNy0xNy4zLTcuNC0zNC4zLTI0LjctMzcuOXMtMzQuMyA3LjQtMzcuOSAyNC43TDMyMy4xIDIzNS4xYy0yLjYgMTIuMi0xMy4zIDIwLjktMjUuOCAyMC45LTExLjkgMC0yMi40LTgtMjUuNC0xOS41bC01Ny0yMTIuOHoiXQogICAgfTsKICAgIGZhV2FuZE1hZ2ljU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FuZC1tYWdpYy1zcGFya2xlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWdpYy13YW5kLXNwYXJrbGVzIl0sICJlMmNhIiwgIk0yNjMuNC0yN0wyNzguMiA5LjggMzE1IDI0LjZjMyAxLjIgNSA0LjIgNSA3LjRzLTIgNi4yLTUgNy40TDI3OC4yIDU0LjIgMjYzLjQgOTFjLTEuMiAzLTQuMiA1LTcuNCA1cy02LjItMi03LjQtNUwyMzMuOCA1NC4yIDE5NyAzOS40Yy0zLTEuMi01LTQuMi01LTcuNHMyLTYuMiA1LTcuNEwyMzMuOCA5LjggMjQ4LjYtMjdjMS4yLTMgNC4yLTUgNy40LTVzNi4yIDIgNy40IDV6TTExMC43IDQxLjdsMjEuNSA1MC4xIDUwLjEgMjEuNWM1LjkgMi41IDkuNyA4LjMgOS43IDE0LjdzLTMuOCAxMi4yLTkuNyAxNC43bC01MC4xIDIxLjUtMjEuNSA1MC4xYy0yLjUgNS45LTguMyA5LjctMTQuNyA5LjdzLTEyLjItMy44LTE0LjctOS43TDU5LjggMTY0LjIgOS43IDE0Mi43QzMuOCAxNDAuMiAwIDEzNC40IDAgMTI4czMuOC0xMi4yIDkuNy0xNC43TDU5LjggOTEuOCA4MS4zIDQxLjdDODMuOCAzNS44IDg5LjYgMzIgOTYgMzJzMTIuMiAzLjggMTQuNyA5Ljd6TTQ2NCAzMDRjNi40IDAgMTIuMiAzLjggMTQuNyA5LjdsMjEuNSA1MC4xIDUwLjEgMjEuNWM1LjkgMi41IDkuNyA4LjMgOS43IDE0LjdzLTMuOCAxMi4yLTkuNyAxNC43bC01MC4xIDIxLjUtMjEuNSA1MC4xYy0yLjUgNS45LTguMyA5LjctMTQuNyA5LjdzLTEyLjItMy44LTE0LjctOS43bC0yMS41LTUwLjEtNTAuMS0yMS41Yy01LjktMi41LTkuNy04LjMtOS43LTE0LjdzMy44LTEyLjIgOS43LTE0LjdsNTAuMS0yMS41IDIxLjUtNTAuMWMyLjUtNS45IDguMy05LjcgMTQuNy05Ljd6TTQ2MCAwYzExIDAgMjEuNiA0LjQgMjkuNSAxMi4ybDQyLjMgNDIuM0M1MzkuNiA2Mi40IDU0NCA3MyA1NDQgODRzLTQuNCAyMS42LTEyLjIgMjkuNWwtODguMiA4OC4yLTEwMS4zLTEwMS4zIDg4LjItODguMkM0MzguNCA0LjQgNDQ5IDAgNDYwIDB6TTQ0LjIgMzk4LjVMMzA4LjQgMTM0LjMgNDA5LjcgMjM1LjYgMTQ1LjUgNDk5LjhDMTM3LjYgNTA3LjYgMTI3IDUxMiAxMTYgNTEycy0yMS42LTQuNC0yOS41LTEyLjJMNDQuMiA0NTcuNUMzNi40IDQ0OS42IDMyIDQzOSAzMiA0MjhzNC40LTIxLjYgMTIuMi0yOS41eiJdCiAgICB9OwogICAgZmFNYWdpY1dhbmRTcGFya2xlcyA9IGZhV2FuZE1hZ2ljU3BhcmtsZXM7CiAgICBmYUNvbW1lbnRNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2Y1IiwgIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMjE3LjYgMTUzLjZjMC0xMC42IDguNi0xOS4yIDE5LjItMTkuMmwzOC40IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDQ4IDQ4IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmwwIDM4LjRjMCAxMC42LTguNiAxOS4yLTE5LjIgMTkuMmwtNDggMCAwIDQ4YzAgMTAuNi04LjYgMTkuMi0xOS4yIDE5LjJsLTM4LjQgMGMtMTAuNiAwLTE5LjItOC42LTE5LjItMTkuMmwwLTQ4LTQ4IDBjLTEwLjYgMC0xOS4yLTguNi0xOS4yLTE5LjJsMC0zOC40YzAtMTAuNiA4LjYtMTkuMiAxOS4yLTE5LjJsNDggMCAwLTQ4eiJdCiAgICB9OwogICAgZmFCZWxsU2xhc2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyNzcsIDYxOTQzXSwgImYxZjYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg3LjUtODcuNWMxNy4yLTIuNCAzMC41LTE3LjMgMzAuNS0zNS4yIDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC05LjgtMTIuMkM0NjQuNCAzMDguNSA0NDggMjYxLjggNDQ4IDIxMy43bDAtMjEuN2MwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOGwwLTMuMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMuMmMtMzguNiA3LjgtNzIuMiAyOS42LTk1LjIgNTkuN0w0MS0yNC45em04NyAyMzguNWMwIDQ4LjEtMTYuNCA5NC44LTQ2LjQgMTMyLjRsLTkuOCAxMi4yYy01IDYuMy03LjggMTQuMS03LjggMjIuMiAwIDE5LjYgMTUuOSAzNS41IDM1LjUgMzUuNWwyMzUuMyAwLTIwNi45LTIwNi45IDAgNC41ek0yODggNTEyYzI5LjggMCA1NC45LTIwLjQgNjItNDhsLTEyNCAwYzcuMSAyNy42IDMyLjIgNDggNjIgNDh6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzU3NDM5LCAiaGFuZHNoYWtlLWFsdC1zbGFzaCIsICJoYW5kc2hha2Utc2ltcGxlLXNsYXNoIl0sICJlMDYwIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0yODgtMjg4IDE0LjItMTQuMmM0LjItNC4yIDkuNS02LjUgMTQuOS02LjkgNi44LS42IDEzLjggMS43IDE5IDYuOUw1MDUuNiAzNzYgNTc2IDMyMCA1NzYgMzIgNDY0IDk2IDQ0MC4yIDgwLjFDNDI0LjQgNjkuNiA0MDUuOSA2NCAzODYuOSA2NGwtNzAuNCAwYy0xLjEgMC0yLjMgMC0zLjQgLjEtMTYuOSAuOS0zMi44IDguNS00NC4yIDIxLjFsLTU1LjggNjIuMS0zNC0zNCA0NC4zLTQ5LjItMzkuNyAwYy0xNS4zIDAtMzAuMSAzLjYtNDMuNSAxMC40TDQxLTI0Ljl6TTAgNjkuOEwwIDMyMCAxNTYuNCA0NTAuM2MyMyAxOS4yIDUyIDI5LjcgODEuOSAyOS43bDE1LjcgMC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0MSA0MSA5IDBjMjIuMiAwIDQzLjgtNS44IDYyLjgtMTYuNEwwIDY5Ljh6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFsdFNsYXNoID0gZmFIYW5kc2hha2VTbGFzaDsKICAgIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2ggPSBmYUhhbmRzaGFrZVNsYXNoOwogICAgZmFCb3R0bGVXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3R0bGUtd2F0ZXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTRjNSIsICJNMTEyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBDOTQuMyAzMiA4MCAxNy43IDgwIDBzMTQuMy0zMiAzMi0zMnpNMTYgMTQ0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDE2MCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjQuMS0xMy4zIDQ1LjEtMzMgNTYgMTkuNyAxMC45IDMzIDMxLjkgMzMgNTZzLTEzLjMgNDUuMS0zMyA1NmMxOS43IDEwLjkgMzMgMzEuOSAzMyA1NnMtMTMuMyA0NS4xLTMzIDU2YzE5LjcgMTAuOSAzMyAzMS45IDMzIDU2IDAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDU0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yNC4xIDEzLjMtNDUuMSAzMy01Ni0xOS43LTEwLjktMzMtMzEuOS0zMy01NnMxMy4zLTQ1LjEgMzMtNTZjLTE5LjctMTAuOS0zMy0zMS45LTMzLTU2czEzLjMtNDUuMSAzMy01NmMtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZ6Il0KICAgIH07CiAgICBmYURpY2VEMjAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1kMjAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZjZiIsICJNMjI0LjQtOC4yYzE5LjYtMTEuMSA0My42LTExLjEgNjMuMSAwbDE5MiAxMDguOGMyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAyMTUuNmMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE5MiAxMDguOGMtMTkuNiAxMS4xLTQzLjYgMTEuMS02My4xIDBMMzIuNCA0MjcuNUMxMi40IDQxNi4xIDAgMzk0LjggMCAzNzEuOEwwIDE1Ni4yYzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN0wyMjQuNC04LjJ6bTUyIDczLjJDMjY3IDQ5LjggMjQ1IDQ5LjggMjM1LjYgNjVsLTc2LjYgMTIzLjctODUuNC00Ni4zLTMuOC0xLjZjLTguOS0yLjctMTguOCAxLjEtMjMuNCA5LjZzLTIuNCAxOC45IDQuNyAyNC44bDMuMyAyLjMgODMuNCA0NS4yLTc0LjYgMTIwLjZDNTUuMyAzNTYuMiA2MSAzNzMgNzUgMzc4LjRsMTYxIDYxLjkgMCAzOS43YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMzkuNyAxNjEtNjEuOWMxNC01LjQgMTkuNy0yMi4yIDExLjgtMzVsLTc0LjctMTIwLjYgODMuNC00NS4yYzkuNy01LjMgMTMuMy0xNy40IDguMS0yNy4xcy0xNy40LTEzLjMtMjcuMS04LjFMMzUzIDE4OC43IDI3Ni40IDY1em0tNDcgMzI5LjlsLTEyMi00Ni45IDU0LjUtODguMSA2Ny41IDEzNXpNNDA0LjYgMzQ4bC0xMjIgNDYuOSA2Ny41LTEzNSA1NC41IDg4LjF6TTMxOS4zIDIzMkwyNTYgMzU4LjYgMTkyLjcgMjMyIDMxOS4zIDIzMnpNMzA4IDE5MmwtMTA0LjEgMCA1Mi04NCA1MiA4NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duWkEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi16LWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1hbHBoYS1kZXNjIiwgInNvcnQtYWxwaGEtZG93bi1hbHQiXSwgImY4ODEiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMjg4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlMMzk3LjMgMTYwIDQ0OCAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOUwzNzAuOCA5NiAzMjAgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00MTIuNiAyNzMuN2w4MCAxNjBjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtNy4yLTE0LjMtODguNCAwLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDgwLTE2MGM1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43czIzLjIgNi44IDI4LjYgMTcuN3pNMzg0IDM1OS42bC0yMC4yIDQwLjQgNDAuNCAwLTIwLjItNDAuNHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhRGVzYyA9IGZhQXJyb3dEb3duWkE7CiAgICBmYVNvcnRBbHBoYURvd25BbHQgPSBmYUFycm93RG93blpBOwogICAgZmFCcnVzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicnVzaCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTVkIiwgIk0xNjIuNCA2Yy0xLjUtMy42LTUtNi04LjktNmwtMTkgMGMtMy45IDAtNy41IDIuNC04LjkgNkwxMDQuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDY2LjQgNmMtMS41LTMuNi01LTYtOC45LTZMNDggMEMyMS41IDAgMCAyMS41IDAgNDhsMCAyMDggMzg0IDAgMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjMwLjUgMGMtMy45IDAtNy41IDIuNC04LjkgNkwyMDAuOSA1Ny43Yy0zLjIgOC0xNC42IDgtMTcuOCAwTDE2Mi40IDZ6TTAgMzA0bDAgMTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMCAwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC02NCA2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtMzg0IDB6TTE5MiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTYgMTYgNy4yIDE2IDE2LTcuMiAxNi0xNiAxNnoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi13YWxraW5nLWRhc2hlZC1saW5lLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTMiLCAiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNNDMyIDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMzg0LTUuMyAzODQgOGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnptMCAxMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTQwOCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTYwOSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdCiAgICB9OwogICAgZmFBcnJvd1VwU2hvcnRXaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLXNob3J0LXdpZGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtdXAtYWx0Il0sICJmODg1IiwgIk0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDB6TTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudFVwQWx0ID0gZmFBcnJvd1VwU2hvcnRXaWRlOwogICAgZmFHcmlwVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcC12ZXJ0aWNhbCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJncmlkLXZlcnRpY2FsIl0sICJmNThlIiwgIk0xMjggNDBjMC0yMi4xLTE3LjktNDAtNDAtNDBMNDAgMEMxNy45IDAgMCAxNy45IDAgNDBMMCA4OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6bTAgMTkyYzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHpNMCA0MjRsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0zMjAgNDBjMC0yMi4xLTE3LjktNDAtNDAtNDBMMjMyIDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4ek0xOTIgMjMybDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHpNMzIwIDQyNGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6Il0KICAgIH07CiAgICBmYUdyaWRWZXJ0aWNhbCA9IGZhR3JpcFZlcnRpY2FsOwogICAgZmFDYXJUdW5uZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLXR1bm5lbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGRlIiwgIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDIuOCAwYy02LjYtNS45LTEwLjgtMTQuNC0xMC44LTI0bDAtMTEzLjFjMC0xMy41IDMuMS0yNi44IDktMzguOWwzOS43LTgwLjhjOS40LTE5LjEgMjguOS0zMS4zIDUwLjItMzEuM0wzMTcgMjI0YzIxLjMgMCA0MC44IDEyLjEgNTAuMiAzMS4zTDQwNyAzMzZjNS45IDEyLjEgOSAyNS40IDkgMzguOUw0MTYgNDg4YzAgOS42LTQuMiAxOC4xLTEwLjggMjRsNDIuOCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyQzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwek0zNjIuOCA1MTJjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0yNC0xOTIgMCAwIDI0YzAgOS42LTQuMiAxOC4xLTEwLjggMjRsMjEzLjcgMHptLTE3NS0yMzUuNWwtMjkuMyA1OS41IDE5NC45IDAtMjkuMy01OS41Yy0xLjMtMi43LTQuMS00LjUtNy4yLTQuNUwxOTUgMjcyYy0zIDAtNS44IDEuNy03LjIgNC41ek0xNzYgNDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMTg0LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0Q29sdW1uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWNvbHVtbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGUzIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0xNDQgMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTQ0LTY0bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTgwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNTEyIDk2bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhcHJpY29ybiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXByaWNvcm4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTg0OCIsICJNMjQwIDMyYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgNjUuMmMxOC44LTEwLjkgNDAuNy0xNy4yIDY0LTE3LjIgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNTE4LjcgNDgwIDQ0OCA0ODBjLTM1LjggMC02OC4yLTE0LjctOTEuNC0zOC40LTI4LjggNDIuNS03Ny40IDcwLjQtMTMyLjYgNzAuNC0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzUzIDAgOTYtNDMgOTYtOTZsMC0xNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjQtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyAzMiAzMiAzMkM3Mi42IDMyIDEwOC44IDUxIDEzMi4yIDgwLjUgMTU4LjYgNTAuNyAxOTcuMSAzMiAyNDAgMzJ6TTQ0OCAyODhhNjQgNjQgMCAxIDAgMCAxMjggNjQgNjQgMCAxIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYVRydWNrQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNThiIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMuMyAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMTAyLjYgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDMuMyAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ2LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDE0Ni43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43bC01MC43IDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNTEyIDIzNy4zbDAgNTAuNy05NiAwIDAtOTYgNTAuNyAwIDQ1LjMgNDUuM3pNMTUyIDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTIzMiA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0zMDUgMjI1bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXoiXQogICAgfTsKICAgIGZhVHYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MzcxNywgInRlbGV2aXNpb24iLCAidHYtYWx0Il0sICJmMjZjIiwgIk02NCA5NmwwIDI0MCA0NDggMCAwLTI0MC00NDggMHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0MDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE2MCA0NDhsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFUZWxldmlzaW9uID0gZmFUdjsKICAgIGZhVHZBbHQgPSBmYVR2OwogICAgZmFTZWN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlY3Rpb24iLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZTQ0NyIsICJNMTEwIDBDNDkuMiAwIDAgNDkuMiAwIDExMCAwIDEzMy43IDcuNiAxNTUuOCAyMC41IDE3NCA3LjYgMTkyIDAgMjE0LjEgMCAyMzggMCAyOTEuNyAzOC45IDMzNy42IDkxLjkgMzQ2LjRsNjEuNyAxMC4zYzIyLjIgMy43IDM4LjQgMjIuOSAzOC40IDQ1LjMgMCAyNS40LTIwLjYgNDYtNDYgNDZsLTk4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTggMGM2MC43IDAgMTEwLTQ5LjIgMTEwLTExMCAwLTIzLjctNy42LTQ1LjktMjAuNS02NCAxMi45LTE4IDIwLjUtNDAuMSAyMC41LTY0IDAtNTMuOC0zOC45LTk5LjYtOTEuOS0xMDguNWwtNjEuNy0xMC4zQzgwLjIgMTUxLjYgNjQgMTMyLjQgNjQgMTEwIDY0IDg0LjYgODQuNiA2NCAxMTAgNjRsOTggMGMxNy43IDAgMzItMTQuMyAzMi0zMlMyMjUuNyAwIDIwOCAwTDExMCAwem03NC43IDI5OS4xYy02LjUtMi40LTEzLjQtNC4zLTIwLjUtNS41bC02MS43LTEwLjNjLTIyLjItMy43LTM4LjQtMjIuOS0zOC40LTQ1LjMgMC05LjIgMi43LTE3LjggNy40LTI1IDYuNSAyLjQgMTMuNCA0LjMgMjAuNSA1LjVsNjEuNyAxMC4zYzIyLjIgMy43IDM4LjQgMjIuOSAzOC40IDQ1LjMgMCA5LjItMi43IDE3LjgtNy40IDI1eiJdCiAgICB9OwogICAgZmFQZWFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZWFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzRdLCAiZjY3YyIsICJNMjI0IDQ0NS4zbDAtMTIxLjgtOTQuMyA3Ny4xYzI2LjEgMjIuOCA1OC41IDM4LjcgOTQuMyA0NC43ek04OS4yIDM1MS4xTDIyNCAyNDAuOCAyMjQgNjYuN2MtOTAuOCAxNS4yLTE2MCA5NC4yLTE2MCAxODkuMyAwIDM0LjYgOS4yIDY3LjEgMjUuMiA5NS4xem0yOTMuMSA0OS41bC05NC4zLTc3LjEgMCAxMjEuOGMzNS43LTYgNjguMS0yMS45IDk0LjMtNDQuN3ptNDAuNi00OS41YzE2LTI4IDI1LjItNjAuNSAyNS4yLTk1LjEgMC05NS4xLTY5LjItMTc0LjEtMTYwLTE4OS4zbDAgMTc0LjIgMTM0LjggMTEwLjN6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYVN0YXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTA4OCwgNjE0NDZdLCAiZjAwNSIsICJNMzA5LjUtMTguOWMtNC4xLTgtMTIuNC0xMy4xLTIxLjQtMTMuMXMtMTcuMyA1LjEtMjEuNCAxMy4xTDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjg4LjEgNDE3LjYgNDMyLjQgNDkxYzggNC4xIDE3LjcgMy4zIDI1LTJzMTEtMTQuMiA5LjYtMjMuMkw0NDEuNyAzMDUuOSA1NTYuMSAxOTEuNGM2LjQtNi40IDguNi0xNS44IDUuOC0yNC40cy0xMC4xLTE0LjktMTkuMS0xNi4zTDM4MyAxMjUuMyAzMDkuNS0xOC45eiJdCiAgICB9OwogICAgZmFGbGFnMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTg4LCA2MTcyNV0sICJmMDI0IiwgIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjEuNiA2Mi43LTE4LjhjNDEuOS0xMi42IDg3LjEtOC43IDEyNi4yIDEwLjkgNDIuNyAyMS40IDkyLjUgMjQgMTM3LjIgNy4ybDM3LjEtMTMuOWMxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMGwwLTI0Ny43YzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTExLjggNS45Yy00NC45IDIyLjUtOTcuOCAyMi41LTE0Mi44IDAtMzYuNC0xOC4yLTc4LjMtMjEuOC0xMTcuMi0xMC4xTDY0IDU0LjQgNjQgMzJ6Il0KICAgIH07CiAgICBmYVRyaWFuZ2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJpYW5nbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODg4LCAiZXhjbGFtYXRpb24tdHJpYW5nbGUiLCAid2FybmluZyJdLCAiZjA3MSIsICJNMjU2IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41UzQ4Ni4xIDQ4MCA0NzIgNDgwTDQwIDQ4MGMtMTQuMSAwLTI3LjItNy40LTM0LjQtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwYzctMTIuOSAyMC41LTIxIDM1LjItMjF6bTAgMzUyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNSAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3oiXQogICAgfTsKICAgIGZhRXhjbGFtYXRpb25UcmlhbmdsZSA9IGZhVHJpYW5nbGVFeGNsYW1hdGlvbjsKICAgIGZhV2FybmluZyA9IGZhVHJpYW5nbGVFeGNsYW1hdGlvbjsKICAgIGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZjIiwgIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFHcmFkdWF0aW9uQ2FwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyYWR1YXRpb24tY2FwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3ODkxLCAibW9ydGFyLWJvYXJkIl0sICJmMTlkIiwgIk00OCAxOTUuOGwyMDkuMiA4Ni4xYzkuOCA0IDIwLjIgNi4xIDMwLjggNi4xczIxLTIuMSAzMC44LTYuMWwyNDIuNC05OS44YzktMy43IDE0LjgtMTIuNCAxNC44LTIyLjFzLTUuOC0xOC40LTE0LjgtMjIuMUwzMTguOCAzOC4xQzMwOSAzNC4xIDI5OC42IDMyIDI4OCAzMnMtMjEgMi4xLTMwLjggNi4xTDE0LjggMTM3LjlDNS44IDE0MS42IDAgMTUwLjMgMCAxNjBMMCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI2MC4yem00OCA3MS43TDk2IDM4NGMwIDUzIDg2IDk2IDE5MiA5NnMxOTItNDMgMTkyLTk2bDAtMTE2LjYtMTQyLjkgNTguOWMtMTUuNiA2LjQtMzIuMiA5LjctNDkuMSA5LjdzLTMzLjUtMy4zLTQ5LjEtOS43TDk2IDI2Ny40eiJdCiAgICB9OwogICAgZmFNb3J0YXJCb2FyZCA9IGZhR3JhZHVhdGlvbkNhcDsKICAgIGZhU3RvcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU0ZSIsICJNMzAuNyA3Mi4zQzM3LjYgNDguNCA1OS41IDMyIDg0LjQgMzJsMzQ0IDBjMjQuOSAwIDQ2LjggMTYuNCA1My44IDQwLjNsMjMuNCA4MC4yYzEyLjggNDMuNy0yMC4xIDg3LjUtNjUuNiA4Ny41LTI2LjMgMC00OS40LTE0LjktNjAuOC0zNy4xLTExLjYgMjEuOS0zNC42IDM3LjEtNjEuNCAzNy4xLTI2LjYgMC00OS43LTE1LTYxLjMtMzctMTEuNiAyMi0zNC43IDM3LTYxLjMgMzctMjYuOCAwLTQ5LjgtMTUuMS02MS40LTM3LjEtMTEuNCAyMi4xLTM0LjUgMzcuMS02MC44IDM3LjEtNDUuNiAwLTc4LjQtNDMuNy02NS42LTg3LjVMMzAuNyA3Mi4zek05Ni40IDM1MmwzMjAgMCAwLTY2LjRjNy42IDEuNiAxNS41IDIuNCAyMy41IDIuNCAxNC4zIDAgMjgtMi42IDQwLjUtNy4ybDAgMTUxLjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE1MS4yYzEyLjUgNC42IDI2LjEgNy4yIDQwLjUgNy4yIDguMSAwIDE1LjktLjggMjMuNS0yLjRsMCA2Ni40eiJdCiAgICB9OwogICAgZmFVc2VyQXN0cm9uYXV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItYXN0cm9uYXV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0ZmIiLCAiTTIyNCAzMzZjNzQuNiAwIDEzOC40LTQ2LjQgMTY0LTExMmw0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNCAwQzM2Mi40IDMwLjQgMjk4LjYtMTYgMjI0LTE2Uzg1LjYgMzAuNCA2MCA5NmwtNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDQgMGMyNS42IDY1LjYgODkuNCAxMTIgMTY0IDExMnpNMjA4IDgwbDMyIDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZ6TTE2IDQ4NC42QzE2IDQ5OS43IDI4LjMgNTEyIDQzLjQgNTEybDUyLjYgMCAwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDggNTIuNiAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtNTkuOC0zMS45LTExMi4yLTc5LjYtMTQxLTM2LjQgMjUuNS04MC42IDQwLjQtMTI4LjQgNDAuNHMtOTItMTQuOS0xMjguNC00MC40QzQ3LjkgMzcyLjQgMTYgNDI0LjggMTYgNDg0LjZ6TTE4My4zIDE0MS41Yy0uOS0zLjMtMy45LTUuNS03LjMtNS41cy02LjQgMi4yLTcuMyA1LjVsLTYgMjEuMi0yMS4yIDZjLTMuMyAuOS01LjUgMy45LTUuNSA3LjNzMi4yIDYuNCA1LjUgNy4zbDIxLjIgNiA2IDIxLjJjLjkgMy4zIDMuOSA1LjUgNy4zIDUuNXM2LjQtMi4yIDcuMy01LjVsNi0yMS4yIDIxLjItNmMzLjMtLjkgNS41LTMuOSA1LjUtNy4zcy0yLjItNi40LTUuNS03LjNsLTIxLjItNi02LTIxLjJ6TTE1MiA0ODhsMCAyNCA0OCAwIDAtMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTEyMC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAyNCA0OCAwIDAtMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1mbGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZDUiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE3NiAzNTJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTk2IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNOTYgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI0MCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ2NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjg4IDExMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJMNDk2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFNdWdTYXVjZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibXVnLXNhdWNlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJjb2ZmZWUiXSwgImYwZjQiLCAiTTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM1MiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzUxOC43IDI4OCA0NDggMjg4YzAgNTMtNDMgOTYtOTYgOTZsLTE5MiAwYy01MyAwLTk2LTQzLTk2LTk2TDY0IDY0em00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsMCAxMjhjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTY0IDQ0OGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUNvZmZlZSA9IGZhTXVnU2F1Y2VyOwogICAgZmFMZW1vbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVtb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MTldLCAiZjA5NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0LTYuNiAwLTEzIDEtMTkgMi45LTIyLjUgNy00OC4xIDE0LjktNzEgOS03NS4yLTE5LjEtMTU2LjQgMTEtMjEzLjcgNjguM1MtNy4yIDI1MC44IDExLjkgMzI2YzUuOCAyMi45LTIgNDguNC05IDcxLTEuOSA2LTIuOSAxMi40LTIuOSAxOSAwIDM1LjMgMjguNyA2NCA2NCA2NCA2LjYgMCAxMy0xIDE5LjEtMi45IDIyLjUtNyA0OC4xLTE0LjkgNzEtOSA3NS4yIDE5LjEgMTU2LjQtMTEgMjEzLjctNjguM1M0NTUuMiAyNjEuMiA0MzYuMSAxODZjLTUuOC0yMi45IDItNDguNCA5LTcxIDEuOS02IDIuOS0xMi40IDIuOS0xOS4xek0yMjIuNyAxNDNjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzYxLjIgMjU0IDY1IDI0MS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdCiAgICB9OwogICAgZmFDYXJhdmFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmF2YW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjhmZiIsICJNMzIgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAxOTIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjk2LjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThMOTYgNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA5NnpNMzUyIDM1Mmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDgtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0xNjAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMHptNjQgMzM2YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhUSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJxIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTEzXSwgIjUxIiwgIk02NCAyNTZjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjAgMjguOSAwIDU2LTcuNyA3OS40LTIxLjFsLTcyLTg2LjRjLTExLjMtMTMuNi05LjUtMzMuOCA0LjEtNDUuMXMzMy44LTkuNSA0NS4xIDQuMWw3MC45IDg1LjFjMjAuNC0yNi44IDMyLjUtNjAuMyAzMi41LTk2LjYgMC04OC40LTcxLjYtMTYwLTE2MC0xNjBTNjQgMTY3LjYgNjQgMjU2ek0zNDQuOSA0NDQuNkMzMTAgNDY3IDI2OC41IDQ4MCAyMjQgNDgwIDEwMC4zIDQ4MCAwIDM3OS43IDAgMjU2UzEwMC4zIDMyIDIyNCAzMiA0NDggMTMyLjMgNDQ4IDI1NmMwIDU2LjEtMjAuNiAxMDcuNC01NC43IDE0Ni43bDQ3LjMgNTYuOGMxMS4zIDEzLjYgOS41IDMzLjgtNC4xIDQ1LjFzLTMzLjggOS41LTQ1LjEtNC4xbC00Ni42LTU1Ljl6Il0KICAgIH07CiAgICBmYUxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3NF0sICJmMDIzIiwgIk0xMjggOTZsMCA2NCAxMjggMCAwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0ek02NCAxNjBsMC02NEM2NCAyNS4zIDEyMS4zLTMyIDE5Mi0zMlMzMjAgMjUuMyAzMjAgOTZsMCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0eiJdCiAgICB9OwogICAgZmFQYWludFJvbGxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWludC1yb2xsZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVhYSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMTYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDk2YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTguN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC0xOC43YzAtNDQuMiAzNS44LTgwIDgwLTgwbDE2MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCAxOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6Il0KICAgIH07CiAgICBmYVZvbHVtZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLWhpZ2giLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgyNjYsICJ2b2x1bWUtdXAiXSwgImYwMjgiLCAiTTUzMy42IDMyLjVjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEM1NTcuNSAxMTMuOCA1OTIgMTgwLjggNTkyIDI1NnMtMzQuNSAxNDIuMi04OC43IDE4Ni4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzU5OC41IDQyNi43IDY0MCAzNDYuMiA2NDAgMjU2UzU5OC41IDg1LjIgNTMzLjYgMzIuNXpNNDczLjEgMTA3Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDNDc1LjMgMTcwLjcgNDk2IDIxMC45IDQ5NiAyNTZzLTIwLjcgODUuMy01My4yIDExMS44Yy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41YzQzLjItMzUuMiA3MC45LTg4LjkgNzAuOS0xNDlzLTI3LjctMTEzLjgtNzAuOS0xNDl6bS02MC41IDc0LjVjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEMzOTMuMSAyMjcuNiA0MDAgMjQxIDQwMCAyNTZzLTYuOSAyOC40LTE3LjcgMzcuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM0MzQuMSAzMTIuOSA0NDggMjg2LjEgNDQ4IDI1NnMtMTMuOS01Ni45LTM1LjQtNzQuNXpNODAgMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDEyOCAxNjAgODAgMTYwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFWb2x1bWVVcCA9IGZhVm9sdW1lSGlnaDsKICAgIGZhRm9sZGVyUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjVlIiwgIk01MTIgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwek0yNTYgMTYwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMCAwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OCA0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwIDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYU1lcmN1cnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVyY3VyeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3OTFdLCAiZjIyMyIsICJNMTE3LTRDMTA2LTE3LjggODUuOC0yMCA3Mi4xLTlzLTE2IDMxLjItNSA0NUM3NC45IDQ1LjcgODMuNyA1NC41IDkzLjUgNjIuMSA0Ni43IDkzLjcgMTYgMTQ3LjMgMTYgMjA4IDE2IDI5NC4zIDc4LjEgMzY2LjEgMTYwIDM4MS4xbDAgMzQuOS0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTM0LjljODEuOS0xNSAxNDQtODYuOCAxNDQtMTczLjEgMC02MC43LTMwLjctMTE0LjMtNzcuNS0xNDUuOSA5LjgtNy43IDE4LjctMTYuNCAyNi40LTI2LjEgMTEuMS0xMy44IDguOC0zMy45LTUtNDVTMjc4LTE3LjggMjY3LTRjLTE3LjYgMjItNDQuNyAzNi03NSAzNlMxMzQuNyAxOCAxMTctNHptNzUgMzI0Yy02MS45IDAtMTEyLTUwLjEtMTEyLTExMlMxMzAuMSA5NiAxOTIgOTYgMzA0IDE0Ni4xIDMwNCAyMDhjMCA2MS44LTUwLjEgMTEyLTExMS45IDExMmwtLjEgMHoiXQogICAgfTsKICAgIGZhQW5jaG9yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk4NzVdLCAiZjEzZCIsICJNMjg4IDY0YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgMjU3LjljNjIuOS0xNC4zIDExMC4yLTY5LjcgMTExLjktMTM2LjVsLTE2LjEgMTQuMWMtMTAgOC43LTI1LjEgNy43LTMzLjktMi4zcy03LjctMjUuMSAyLjMtMzMuOWw2NC01NmM5LTcuOSAyMi42LTcuOSAzMS42IDBsNjQgNTZjMTAgOC43IDExIDIzLjkgMi4zIDMzLjlzLTIzLjkgMTEtMzMuOSAyLjNMNDk2IDMwNy45QzQ5My45IDQyMSA0MDEuNiA1MTIgMjg4IDUxMlM4Mi4xIDQyMSA4MCAzMDcuOUw2My44IDMyMi4xYy0xMCA4LjctMjUuMSA3LjctMzMuOS0yLjNzLTcuNy0yNS4xIDIuMy0zMy45bDY0LTU2YzktNy45IDIyLjYtNy45IDMxLjYgMGw2NCA1NmMxMCA4LjcgMTEgMjMuOSAyLjMgMzMuOXMtMjMuOSAxMS0zMy45IDIuM2wtMTYuMS0xNC4xYzEuOCA2Ni44IDQ5LjEgMTIyLjIgMTExLjkgMTM2LjVsMC0yNTcuOWMtMzcuMy0xMy4yLTY0LTQ4LjctNjQtOTAuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGFya2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGFya2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzM1OSwgInBhcmtpbmciXSwgImY1NDAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTE5MiAyNTZsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDggMCAwIDY0em00OCA2NGwtNDggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTg0YzAtMjIuMSAxNy45LTQwIDQwLTQwbDcyIDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6Il0KICAgIH07CiAgICBmYVBhcmtpbmcgPSBmYVNxdWFyZVBhcmtpbmc7CiAgICBmYUhhbnVraWFoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbnVraWFoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MzM0XSwgImY2ZTYiLCAiTTMxNC4yIDMuM2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3ptLTI4OCA0OEMyMS4xIDYwLjEgOCA4NC42IDggMTA0IDggMTE3LjMgMTguNyAxMjggMzIgMTI4czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNODggMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0MxMDEuMSA2MC4xIDg4IDg0LjYgODggMTA0em04Mi4yLTUyLjdjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTIxNiAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzIyOS4xIDYwLjEgMjE2IDg0LjYgMjE2IDEwNHpNMzk0LjIgNTEuM2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNDQwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNDUzLjEgNjAuMSA0NDAgODQuNiA0NDAgMTA0em04Mi4yLTUyLjdjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTU4NCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzU5Ny4xIDYwLjEgNTg0IDg0LjYgNTg0IDEwNHpNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6TTM1MiAxNDRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNzYtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJTMCAxNzQuMyAwIDE5MmwwIDk2YzAgNTMgNDMgOTYgOTYgOTZsMTkyIDAgMCA2NC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDAgMC02NCAxOTIgMGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDAgMC0xNzZ6Il0KICAgIH07CiAgICBmYVJvdGF0ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm90YXRlLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicm90YXRlLWJhY2siLCAicm90YXRlLWJhY2t3YXJkIiwgInVuZG8tYWx0Il0sICJmMmVhIiwgIk0yNCAxOTJsMTQ0IDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC00Ni43LTQ2LjdjNzUuMy01OC42IDE4NC4zLTUzLjMgMjUzLjUgMTUuOSA3NSA3NSA3NSAxOTYuNSAwIDI3MS41cy0xOTYuNSA3NS0yNzEuNSAwYy0xMC4yLTEwLjItMTktMjEuMy0yNi40LTMzLTkuNS0xNC45LTI5LjMtMTkuMy00NC4yLTkuOHMtMTkuMyAyOS4zLTkuOCA0NC4yQzQ5LjcgNDA4LjcgNjEuNCA0MjMuNSA3NSA0MzcgMTc1IDUzNyAzMzcgNTM3IDQzNyA0MzdTNTM3IDE3NSA0MzcgNzVDMzQyLjgtMTkuMyAxOTMuMy0yNC43IDkyLjcgNTguOEw0MSA3QzM0LjEgLjIgMjMuOC0xLjkgMTQuOCAxLjhTMCAxNC4zIDAgMjRMMCAxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjR6Il0KICAgIH07CiAgICBmYVJvdGF0ZUJhY2sgPSBmYVJvdGF0ZUxlZnQ7CiAgICBmYVJvdGF0ZUJhY2t3YXJkID0gZmFSb3RhdGVMZWZ0OwogICAgZmFVbmRvQWx0ID0gZmFSb3RhdGVMZWZ0OwogICAgZmFIZWFkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYWRpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaGVhZGVyIl0sICJmMWRjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAxMTIgMjI0IDAgMC0xMTItMTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMzIwIDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTE0NC0yMjQgMCAwIDE0NCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0zMjAtMTYgMEMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFIZWFkZXIgPSBmYUhlYWRpbmc7CiAgICBmYUNyb3NzaGFpcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3Jvc3NoYWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDViIiwgIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEzMS4yIDI4OGMxMi43IDYyLjcgNjIuMSAxMTIuMSAxMjQuOCAxMjQuOGwwLTEyLjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDEyLjhjNjIuNy0xMi43IDExMi4xLTYyLjEgMTI0LjgtMTI0LjhMNDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMi44IDBDNDMyLjEgMTYxLjMgMzgyLjcgMTExLjkgMzIwIDk5LjJsMCAxMi44YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTIuOEMxOTMuMyAxMTEuOSAxNDMuOSAxNjEuMyAxMzEuMiAyMjRsMTIuOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMi44IDB6TTI4OCAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFDaXJjbGVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbm9kZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRlMiIsICJNNDE4LjQgMTU3LjljMzUuMy04LjMgNjEuNi00MCA2MS42LTc3LjkgMC00NC4yLTM1LjgtODAtODAtODAtNDMuNCAwLTc4LjcgMzQuNS04MCA3Ny41TDEzNi4yIDE1MS4xQzEyMS43IDEzNi44IDEwMS45IDEyOCA4MCAxMjggMzUuOCAxMjggMCAxNjMuOCAwIDIwOHMzNS44IDgwIDgwIDgwYzEyLjIgMCAyMy44LTIuNyAzNC4xLTcuNkwyNTkuNyA0MDcuOGMtMi40IDcuNi0zLjcgMTUuOC0zLjcgMjQuMiAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMjcuNy0xNC01Mi4xLTM1LjQtNjYuNGwzNy44LTIwNy43ek0xNTYuMyAyMzIuMmMyLjItNi45IDMuNS0xNC4yIDMuNy0yMS43bDE4My44LTczLjVjMy42IDMuNSA3LjQgNi43IDExLjYgOS41TDMxNy42IDM1NC4xYy01LjUgMS4zLTEwLjggMy4xLTE1LjggNS41TDE1Ni4zIDIzMi4yeiJdCiAgICB9OwogICAgZmFXaW5kb3dSZXN0b3JlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctcmVzdG9yZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMmQyIiwgIk01MTIgOTZMMTYwIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNjQgNDggMCAwLTE5MnpNMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNHptNjQgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhUiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTE0XSwgIjUyIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggOTUuMyAwIDEwMi40IDE0Ni40YzEwLjEgMTQuNSAzMC4xIDE4IDQ0LjYgNy45czE4LTMwLjEgNy45LTQ0LjZMMjMwLjEgMzA5LjVDMjgyLjggMjg4LjEgMzIwIDIzNi40IDMyMCAxNzYgMzIwIDk2LjUgMjU1LjUgMzIgMTc2IDMyTDMyIDMyek0xNzYgMjU2bC0xMTIgMCAwLTE2MCAxMTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHoiXQogICAgfTsKICAgIGZhRmlsdGVyQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsdGVyLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMTdiIiwgIk0zMiA2NEMxOS4xIDY0IDcuNCA3MS44IDIuNCA4My44Uy4yIDEwOS41IDkuNCAxMTguNkwxOTIgMzAxLjMgMTkyIDQxNmMwIDguNSAzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMyLjUgMi41IDUuMyA0LjUgOC4zIDYtMjEuMi0zMC45LTMzLjYtNjguMy0zMy42LTEwOC42IDAtOTkuNCA3NS41LTE4MS4xIDE3Mi4zLTE5MWw5MC40LTkwLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhR29wdXJhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnb3B1cmFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NjQiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA0MCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOCA0OCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOCA0MCAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgODBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTQ4IDAgMC0yMjQtMzIgMCAwLTEyOC00OCAwIDAgMTI4IDMyIDAgMCAyMjQtMjI0IDAgMC0yMjQgMzIgMCAwLTEyOC00OCAwIDAgMTI4LTMyIDAgMCAyMjQtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OEw5NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjU2IDIwOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6TTIwOCA0MDBsMCA2NCA5NiAwIDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTI1NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMiA2NCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmYiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xMjggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYVN0YXJPZkxpZmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1vZi1saWZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2MjEiLCAiTTIwOC41IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNDAuOSAxMjItNzAuNGMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsMTYgMjcuN2M4LjggMTUuMyAzLjYgMzQuOS0xMS43IDQzLjdsLTEyMiA3MC40IDEyMiA3MC40YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdsLTE2IDI3LjdjLTguOCAxNS4zLTI4LjQgMjAuNi00My43IDExLjdsLTEyMi03MC40IDAgMTQwLjljMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQwLjktMTIyIDcwLjRjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43bDEyMi03MC40LTEyMi03MC40Yy0xNS4zLTguOC0yMC41LTI4LjQtMTEuNy00My43bDE2LTI3LjdjOC44LTE1LjMgMjguNC0yMC41IDQzLjctMTEuN2wxMjIgNzAuNCAwLTE0MC45eiJdCiAgICB9OwogICAgZmFCdXNpbmVzc1RpbWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVzaW5lc3MtdGltZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJicmllZmNhc2UtY2xvY2siXSwgImY2NGEiLCAiTTI2NCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDMwNSAwYzMzLjgtMjkuOSA3OC4zLTQ4IDEyNy00OCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyNjQgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDI5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTMuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0xNi42IDIuMS0zMi43IDYtNDhsLTIyIDB6bTM1MiA0OGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek00OTYgMzIwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQnJpZWZjYXNlQ2xvY2sgPSBmYUJ1c2luZXNzVGltZTsKICAgIGZhRmlyZUV4dGluZ3Vpc2hlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWV4dGluZ3Vpc2hlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxOV0sICJmMTM0IiwgIk01MTIgMzJjMC05LjYtNC4zLTE4LjctMTEuNy0yNC43UzQ4My4xLTEuMyA0NzMuNyAuNmwtMTYwIDMyQzMwMS41IDM1LjEgMjkyIDQ0LjMgMjg5IDU2bC02NSAwIDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjguNGMtNTUuMyAxMi4zLTEwMS4zIDQ5LjUtMTI1LjUgOTkuMS01LjggMTEuOS0uOSAyNi4zIDExLjEgMzIuMXMyNi4zIC45IDMyLjEtMTEuMUM2MiAxNDYuOSA5MS44IDEyMS4xIDEyOCAxMTBsMCAyOC44Yy0zNy44IDE4LTY0IDU2LjUtNjQgMTAxLjJsMCAxMjggMjI0IDAgMC0xMjhjMC00NC43LTI2LjItODMuMi02NC0xMDEuMmwwLTM0LjggNjUgMGMzIDExLjcgMTIuNSAyMC45IDI0LjcgMjMuNGwxNjAgMzJjOS40IDEuOSAxOS4xLS42IDI2LjYtNi42UzUxMiAxMzcuNiA1MTIgMTI4bDAtOTZ6TTI4OCA0NDhsMC0zMi0yMjQgMCAwIDMyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDk2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bkxvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctZG93biJdLCAiZjE3NSIsICJNMTM3LjQgNTM0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDM0LjcgMTkyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMTI4LTE3LjcgMTI4IDBsMCA0MzQuNy03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0Rvd24gPSBmYUFycm93RG93bkxvbmc7CiAgICBmYVVzZXJNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLW1pbnVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1MDMiLCAiTTI4NS43IDMwNGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuMyA0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMHpNMjU2IDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6bTM0NC05NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTQ0IDB6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzYyIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNOTYgMzEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjcyIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTGFwdG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWxhcHRvcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJsYXB0b3AtaG91c2UiXSwgImUwNjYiLCAiTTQ0OCAyNDBsMTkuOSAwYzE1LjUgMCAyOC4xLTEyLjYgMjguMS0yOC4xIDAtNy42LTMuMS0xNC45LTguNi0yMC4yTDI4My41LTQuOUMyNzYuMS0xMiAyNjYuMy0xNiAyNTYtMTZzLTIwLjEgNC0yNy41IDExLjFMMjQuNiAxOTEuN0MxOS4xIDE5NyAxNiAyMDQuMyAxNiAyMTEuOSAxNiAyMjcuNCAyOC42IDI0MCA0NC4xIDI0MGwxOS45IDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODUuNyAwYzcuNC02LjYgMTYuNC0xMS40IDI2LjMtMTRsMC0xMzBjMC01LjUgLjctMTAuOSAyLTE2bC0xMCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCAxNDQgMHpNMzUyIDM1MmwxNjAgMCAwIDEyOC0xNjAgMCAwLTEyOHptLTY0LTMybDAgMTYwLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwyODggMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJsLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhTGFwdG9wSG91c2UgPSBmYUhvdXNlTGFwdG9wOwogICAgZmFEb3dubG9hZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3dubG9hZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDE5IiwgIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAyNDIuNyAyNTYgMzJ6TTY0IDMyMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00Ni45IDAtNTYuNiA1Ni42Yy0zMS4yIDMxLjItODEuOSAzMS4yLTExMy4xIDBMMTEwLjkgMzIwIDY0IDMyMHptMzA0IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhU2FnaXR0YXJpdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2FnaXR0YXJpdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTg0ZCIsICJNNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODIuOC0xNDYuOCAxNDYuOCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjJzLTMyLjggMTIuNS00NS4zIDBMMTkyIDMzMy4zIDU0LjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMiAwcy0xMi41LTMyLjggMC00NS4yTDE0Ni44IDI4OCAxMDUuNCAyNDYuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjJzMzIuOC0xMi41IDQ1LjIgMEwxOTIgMjQyLjggMzM4LjggOTYgMjU2IDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAweiJdCiAgICB9OwogICAgZmFDb3VjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3VjaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGI4IiwgIk0xNDQgMjcyQzE0NCAyMjQuNyAxMDkuOCAxODUuNCA2NC44IDE3Ny41IDcyIDExMy42IDEyNi4yIDY0IDE5MiA2NGwyNTYgMGM2NS44IDAgMTIwIDQ5LjYgMTI3LjIgMTEzLjUtNDUgOC03OS4yIDQ3LjItNzkuMiA5NC41bDAgMzItMzUyIDAgMC0zMnpNMCAzODRMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDQ0OCAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdCiAgICB9OwogICAgZmFSb2FkTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2NyIsICJNMjU2IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDMzLjQgNDIwLjVDMjUuOSA0NTAuNyA0OC44IDQ4MCA4MCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyIDYuMSAwIDExLjggMS43IDE2LjcgNC43IDIuOC0yMy45IDE0LjMtNDUuMSAzMS40LTYwLjNsMC0yNC40YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYuMiAwIDEyLjQgLjQgMTguNCAxLjNMNDU4LjUgODAuNkM0NTEuNCA1Mi4xIDQyNS44IDMyIDM5Ni4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em02NCAxOTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiA4MC4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0zNTIgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFTY2lzc29ycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5ODQsIDk5ODYsIDk5ODgsICJjdXQiXSwgImYwYzQiLCAiTTE5MiAyNTZsLTM5LjUgMzkuNWMtMTIuNi00LjktMjYuMi03LjUtNDAuNS03LjUtNjEuOSAwLTExMiA1MC4xLTExMiAxMTJzNTAuMSAxMTIgMTEyIDExMiAxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42LTI4LjMtMjguMy03NC4xLTI4LjMtMTAyLjQgMEwyNTYgMTkyIDIxNi41IDE1Mi41YzQuOS0xMi42IDcuNS0yNi4yIDcuNS00MC41IDAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgNTAuMSAwIDExMiA1MC4xIDIyNCAxMTIgMjI0YzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2em05Ny45IDk3LjlMMzk2LjggNDYwLjhjMjguMyAyOC4zIDc0LjEgMjguMyAxMDIuNCAwIDcuMS03LjEgNy4xLTE4LjUgMC0yNS42bC0xNDUuMy0xNDUuMy02NCA2NHpNNjQgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQ4IDI0MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYUN1dCA9IGZhU2Npc3NvcnM7CiAgICBmYUJ1ZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE4OCIsICJNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRsLTEzNS4xIDBjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40bDAtMy42em0zNDUuNiAxMi44YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgMi42LS4xIDUuMy0uMiA3LjlsODMuNCA2Mi41YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40bC02My4xLTQ3LjNjLTIzLjIgNDQuMi02Ni41IDc2LjItMTE3LjcgODMuOUwzMTIgMjgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjMwLjJjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzIuNS0xMC40IDYuNS0yMC4yIDExLjgtMjkuMUw0NC44IDE1My42Yy0xNC4xLTEwLjYtMTctMzAuNy02LjQtNDQuOHMzMC43LTE3IDQ0LjgtNi40TDE5MiAxODRjMTIuMy01LjEgMjUuOC04IDQwLThsMTEyIDBjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1vdXQiXSwgImYwOGIiLCAiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYVNpZ25PdXQgPSBmYUFycm93UmlnaHRGcm9tQnJhY2tldDsKICAgIGZhSGFuZEhvbGRpbmdIYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oYW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjciLCAiTTQ2Ni44IDE4Ni41bDQyLjUtNDIuNSAzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMjMuNiAxNmMtMjkgMC01Ny4zIDkuMy04MC43IDI2LjVMMTYuMyAxMzUuOGMtMTcuOCAxMy4xLTIxLjYgMzguMS04LjUgNTUuOXMzOC4xIDIxLjYgNTUuOSA4LjVMMTgzLjQgMTEyIDI5NiAxMTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTUyLjIgMGMzMy45IDAgNjYuNS0xMy41IDkwLjUtMzcuNXptLTM1Ny41IDEzOUw2Ni43IDM2OCAzMiAzNjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MDAgMjgwIDQwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhU3Ryb29wd2FmZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Ryb29wd2FmZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1MSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzEyLjYgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjU2IDk3LjYgMjIyLjEgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzMy45IDMzLjktNDUuMyA0NS4zLTU2LjYtNTYuNmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw1Ni42IDU2LjYtNDUuMyA0NS4zLTMzLjktMzMuOWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSAzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zMy45IDMzLjktNDUuMy00NS4zIDU2LjYtNTYuNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC01Ni42IDU2LjYtNDUuMy00NS4zIDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpNMTQyLjkgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptNjcuOSA2Ny45bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3pNMjc4LjYgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptMjIuNi02Ny45bC00NS4zIDQ1LjMtNDUuMy00NS4zIDQ1LjMtNDUuMyA0NS4zIDQ1LjN6Il0KICAgIH07CiAgICBmYUNoaWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxYWUiLCAiTTk2IDY0QTY0IDY0IDAgMSAxIDIyNCA2NCA2NCA2NCAwIDEgMSA5NiA2NHptNDggMzIwbDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMODAgMjg3LjggNTkuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMFMtNC41IDMwMS45IDQuOSAyODdsMzkuOS02My4zQzY5LjcgMTg0IDExMy4yIDE2MCAxNjAgMTYwczkwLjMgMjQgMTE1LjIgNjMuNkwzMTUuMSAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBMMjQwIDI4Ny44IDI0MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAweiJdCiAgICB9OwogICAgZmFJY2VDcmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY2UtY3JlYW0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4NDhdLCAiZjgxMCIsICJNMzM1LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2IDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzQ4IDY0LjUgNDggMTQ0YzAgNS40IC4zIDEwLjcgLjkgMTZsLS45IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjg4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLS45IDB6TTY0IDMwNEwxNjkuMiA1MjkuNWM0LjEgOC44IDEzIDE0LjUgMjIuOCAxNC41czE4LjYtNS43IDIyLjgtMTQuNUwzMjAgMzA0IDY0IDMwNHoiXQogICAgfTsKICAgIGZhQ29tcHV0ZXJNb3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlci1tb3VzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQzMywgIm1vdXNlIl0sICJmOGNjIiwgIk0wIDE5MmwxNjggMCAwLTE5Mi04IDBDNzEuNiAwIDAgNzEuNiAwIDE2MGwwIDMyem0wIDQ4TDAgMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDY0IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC0xMTItMzg0IDB6bTM4NC00OGwwLTMyQzM4NCA3MS42IDMxMi40IDAgMjI0IDBsLTggMCAwIDE5MiAxNjggMHoiXQogICAgfTsKICAgIGZhTW91c2UgPSBmYUNvbXB1dGVyTW91c2U7CiAgICBmYUZhdWNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTAwNSIsICJNMTkyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDY0IDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyMi42IDIyLjYgMzIgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MCAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzLTE0LjMtMzItMzItMzJsLTM2LjEgMGMtMjAuMiAyOS01My45IDQ4LTkxLjkgNDhzLTcxLjctMTktOTEuOS00OEwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAyMi42LTIyLjZjNi02IDE0LjEtOS40IDIyLjYtOS40bDE4LjcgMCAwLTY0LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgNjQgOTYgNjRsOTYgMHoiXQogICAgfTsKICAgIGZhQXdhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXdhcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU1OSIsICJNMjQ1LjktMjUuOWMtMTMuNC04LjItMzAuMy04LjItNDMuNyAwLTI0LjQgMTQuOS0zOS41IDE4LjktNjguMSAxOC4zLTE1LjctLjQtMzAuMyA4LjEtMzcuOSAyMS45LTEzLjcgMjUuMS0yNC44IDM2LjItNDkuOSA0OS45LTEzLjggNy41LTIyLjIgMjIuMi0yMS45IDM3LjkgLjcgMjguNi0zLjQgNDMuNy0xOC4zIDY4LjEtOC4yIDEzLjQtOC4yIDMwLjMgMCA0My43IDE0LjkgMjQuNCAxOC45IDM5LjUgMTguMyA2OC4xLS40IDE1LjcgOC4xIDMwLjMgMjEuOSAzNy45IDIyLjEgMTIuMSAzMy4zIDIyLjEgNDUuMSA0MS41TDQyLjcgNDU4LjVjLTUuOSAxMS45LTEuMSAyNi4zIDEwLjcgMzIuMmw4NiA0M2MxMS41IDUuNyAyNS41IDEuNCAzMS43LTkuOGw1Mi44LTk1LjEgNTIuOCA5NS4xYzYuMiAxMS4yIDIwLjIgMTUuNiAzMS43IDkuOGw4Ni00M2MxMS45LTUuOSAxNi43LTIwLjMgMTAuNy0zMi4ybC00OC42LTk3LjJjMTEuNy0xOS40IDIzLTI5LjQgNDUuMS00MS41IDEzLjgtNy41IDIyLjItMjIuMiAyMS45LTM3LjktLjctMjguNiAzLjQtNDMuNyAxOC4zLTY4LjEgOC4yLTEzLjQgOC4yLTMwLjMgMC00My43LTE0LjktMjQuNC0xOC45LTM5LjUtMTguMy02OC4xIC40LTE1LjctOC4xLTMwLjMtMjEuOS0zNy45LTI1LjEtMTMuNy0zNi4yLTI0LjgtNDkuOS00OS45LTcuNS0xMy44LTIyLjItMjIuMi0zNy45LTIxLjktMjguNiAuNy00My43LTMuNC02OC4xLTE4LjN6TTIyNCA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGVyc29uRHJvd25pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyb3duaW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDUiLCAiTTI2NCA4OGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTEzMy45IDY1LjZjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ybDEwLjkgMzIuOGM5LjQgMjguMyAzMy4yIDQ5LjUgNjIuNSA1NS42IDUuNiAxLjIgMTEuMyAxLjggMTcuMSAxLjhsODggMGMxNy4yIDAgMzQuMy0yLjggNTAuNi04LjJsMTE0LjQtMzguMWMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNUw0MjMuNyAyMjguNWMtOC40IDIuOC0xNyA1LjEtMjUuNyA2LjlsLTI2LjUgODguM2MtNi4xIDMuNC0xMi4xIDcuMy0xNy45IDExLjctMjIuMSAxNi42LTI5LjEgMTYuNi01MS4yIDAtMjYuMi0xOS43LTU2LjktMzAuMi04Ny44LTMxLjNsMjAuMi02Ny4yYy01MS41LTEwLjctOTMuNS00OC4xLTExMC4yLTk4bC0xMC45LTMyLjhjLTUuNi0xNi44IDMuNS0zNC45IDIwLjItNDAuNXpNNDAzLjQgNDEyLjFDMzc5LjEgNDMwLjMgMzUxLjEgNDQ4IDMyMCA0NDhzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFDYW1lcmFSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGQ4IiwgIk0xMzguNyA5NmwxMC40LTMxLjJDMTU1LjYgNDUuMiAxNzMuOSAzMiAxOTQuNiAzMmwxMjIuOCAwYzIwLjcgMCAzOSAxMy4yIDQ1LjUgMzIuOEwzNzMuMyA5NiA0NDggOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGw3NC43IDB6TTk2IDMwNS45YzAgMy45IDEuNCA3LjcgNCAxMC42bDQ4IDU0YzYuNCA3LjIgMTcuNiA3LjIgMjMuOSAwbDQ4LTU0YzIuNi0yLjkgNC02LjcgNC0xMC42bDAtMS45YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMGMwLTM5LjggMzIuMi03MiA3Mi03MiA0LjQgMCA4LjcgLjQgMTIuOSAxLjJsMzQuOS0zOS4zYy0xNC42LTYuNC0zMC44LTkuOS00Ny44LTkuOS02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMS45em0xOTYtNDYuNWMtMi42IDIuOS00IDYuNy00IDEwLjZsMCAxLjljMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjMCAzOS44LTMyLjIgNzItNzIgNzItNC40IDAtOC43LS40LTEyLjktMS4ybC0zNC45IDM5LjNjMTQuNyA2LjQgMzAuOCA5LjkgNDcuOCA5LjkgNjYuMyAwIDEyMC01My43IDEyMC0xMjBsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xLjljMC0zLjktMS40LTcuNy00LTEwLjZsLTQ4LTU0Yy02LjQtNy4yLTE3LjYtNy4yLTIzLjkgMGwtNDggNTR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluSGVhcnRzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4taGVhcnRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI1LCAiZ3Jpbi1oZWFydHMiXSwgImY1ODQiLCAiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMgNS41LTEzLjUgOC45LTI4LjQgOC45LTQ0LjcgMC01My00My05Ni05Ni05NmwtMi45IDBjLTIuNSAwLTUgLjEtNy40IC4zLTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjLTIuNS0uMi00LjktLjMtNy40LS4zTDk2IDQ4Yy01MyAwLTk2IDQzLTk2IDk2IDAgMTYuMyAzLjUgMzEuMiA4LjkgNDQuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyMi45IDk2YzEzLjUgMCAyNi41IDUuNCAzNiAxNC45bDkuMSA5LjEgOS4xLTkuMWM5LjUtOS41IDIyLjUtMTQuOSAzNi0xNC45bDIuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNTMuNC02Ni45IDk1LjctODkgMTA4LjItNC40IDIuNS05LjYgMi41LTE0IDAtMjIuMS0xMi41LTg5LTU0LjgtODktMTA4LjIgMC0yNi41IDIxLjUtNDggNDgtNDhsMi45IDB6bS0xODggMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwYzEzLjUgMCAyNi41IDUuNCAzNiAxNC45eiJdCiAgICB9OwogICAgZmFHcmluSGVhcnRzMiA9IGZhRmFjZUdyaW5IZWFydHMyOwogICAgZmFGaWxlRnJhZ21lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1mcmFnbWVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNjk3IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI0MCAxMjggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOCAxMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2ek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAweiJdCiAgICB9OwogICAgZmFQZXJzb25NaWxpdGFyeVJpZmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1taWxpdGFyeS1yaWZsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTRiIiwgIk0xMjggMzljMC0xMyAxMC0yMy44IDIyLjktMjQuOUwzMDIuNyAxLjRDMzEyIC43IDMyMCA4IDMyMCAxNy40TDMyMCA0OGMwIDguOC03LjIgMTYtMTYgMTZMMTUzIDY0Yy0xMy44IDAtMjUtMTEuMi0yNS0yNXptMTcuNiA1N2wxNTYuOCAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNiAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTUuNSAuNi0xMC44IDEuNi0xNnptMjI4IDM2NC4zTDMyMCAzNjkuNyAzMjAgNDgwYzAgMS4zLS4xIDIuNS0uMiAzLjhMMTQ1LjUgMjM0LjljMTYuNi03LjEgMzQuNi0xMC45IDUzLjMtMTAuOWw1MC40IDBjMTUuOSAwIDMxLjMgMi44IDQ1LjggNy45TDM4OS45IDY3LjdjLTcuNy00LjQtMTAuMy0xNC4yLTUuOS0yMS45czE0LjItMTAuMyAyMS45LTUuOWwyNy43IDE2YzcuNyA0LjQgMTAuMyAxNC4yIDUuOSAyMS45bC01NS41IDk2LjEgMS42IC45YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdMMzYwLjcgMjgyYzIgMi44IDMuOSA1LjggNS43IDguOGw3Ni4xIDEyOC44YzExLjIgMTkgNC45IDQzLjUtMTQuMSA1NC44cy00My41IDQuOS01NC44LTE0LjF6TTI4OCA1MTJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExMC4zLTUzLjYgOTAuNmMtMTEuMiAxOS0zNS44IDI1LjMtNTQuOCAxNC4xUy01LjcgNDM4LjcgNS42IDQxOS43TDgxLjcgMjkwLjhjOS40LTE1LjggMjEuNy0yOS4zIDM2LTQwTDI5OS4xIDUxMGMtMy41IDEuMy03LjIgMi0xMS4xIDJ6TTI2NCAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFUb2dnbGVPbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwNSIsICJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyUzQ5MCA2NCAzODQgNjRMMTkyIDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUx1bmdzVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibHVuZ3MtdmlydXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2NyIsICJNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTUxLjNjOS42LTQuOCAyMC41LTcuNSAzMi03LjVzMjIuNCAyLjcgMzIgNy41TDMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDUwLjEgNDUxYzggMTguMyA4LjEgMzkuMiAuMiA1Ny41IDEwLjIgMi4zIDIwLjYgMy41IDMxLjIgMy41IDUyLjIgMCA5NC41LTQyLjMgOTQuNS05NC41bDAtNi4yYzAtMTExLjEtMzYuNy0yMTktMTA0LjQtMzA3TDQyOC45IDQ4LjdjLTguMS0xMC42LTIwLjctMTYuNy0zNC0xNi43LTIzLjcgMC00Mi45IDE5LjItNDIuOSA0Mi45bDAgMTM5LjljMS4yIDIuMiAyLjIgNC42IDMuMSA2LjkgMjYuNC0xMS42IDU4LjMtNi42IDc5LjkgMTVzMjYuNiA1My42IDE1IDc5LjlDNDc3IDMyNy4yIDQ5NiAzNTMuMyA0OTYgMzgzLjhzLTE5IDU2LjctNDUuOSA2Ny4xek0yMjAuOSAyMjEuOGMuOS0yLjQgMi00LjcgMy4xLTYuOWwwLTEzOC41YzAtMjQuNS0xOS45LTQ0LjQtNDQuNC00NC40LTEyLjUgMC0yNC40IDUuMy0zMi44IDE0LjVsLTI2LjQgMjlDNDIuOSAxNjAuOCAwIDI3MS44IDAgMzg3bDAgMzAuNWMwIDUyLjIgNDIuMyA5NC41IDk0LjUgOTQuNSAxMC41IDAgMjEtMS4yIDMxLjItMy41LTcuOS0xOC4zLTcuOC0zOS4zIC4yLTU3LjUtMjYuOS0xMC40LTQ1LjktMzYuNi00NS45LTY3LjFzMTktNTYuNyA0NS45LTY3LjFjLTExLjYtMjYuNC02LjYtNTguMyAxNS03OS45czUzLjYtMjYuNiA3OS45LTE1ek0xNTIgNDA4YzI4LjggMCA0My4yIDM0LjggMjIuOSA1NS4yLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMyMC40LTIwLjQgNTUuMi01LjkgNTUuMiAyMi45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yOC44IDM0LjgtNDMuMiA1NS4yLTIyLjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0yMC40LTIwLjQtNS45LTU1LjIgMjIuOS01NS4yIDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yOC44IDAtNDMuMi0zNC44LTIyLjktNTUuMiA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0yMC40IDIwLjQtNTUuMiA1LjktNTUuMi0yMi45IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMjguOC0zNC44IDQzLjItNTUuMiAyMi45LTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMjAuNCAyMC40IDUuOSA1NS4yLTIyLjkgNTUuMi0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0xMDQtODBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtdGVubmlzLXBhZGRsZS1iYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU1LCAicGluZy1wb25nLXBhZGRsZS1iYWxsIiwgInRhYmxlLXRlbm5pcyJdLCAiZjQ1ZCIsICJNOTcgMTI3bDY3LjQtNjcuNGMzOC4yLTM4LjIgOTAtNTkuNiAxNDQtNTkuNiAxMTIuNSAwIDIwMy43IDkxLjIgMjAzLjcgMjAzLjYgMCA0Ni40LTE1LjggOTEuMS00NC41IDEyNy0yMy42LTE2LjgtNTIuNC0yNi43LTgzLjUtMjYuNy0zMS4xIDAtNTkuOSA5LjktODMuNCAyNi42TDk3IDEyN3pNMjQwIDQ0OGMwIDkuNyAxIDE5LjEgMi44IDI4LjItMTkuOC01LjItMzgtMTUuNS01Mi43LTMwLjItMTIuMi0xMi4yLTMxLjktMTIuMi00NC4xIDBMOTYuNiA0OTUuNGMtMTAuNiAxMC42LTI1IDE2LjYtNDAgMTYuNi0zMS4yIDAtNTYuNi0yNS4zLTU2LjYtNTYuNiAwLTE1IDYtMjkuNCAxNi42LTQwbDQ5LjQtNDkuNGMxMi4yLTEyLjIgMTIuMi0zMS45IDAtNDQuMS0yMS43LTIxLjctMzMuOS01MS4yLTMzLjktODEuOSAwLTI5LjQgMTEuMS01Ny42IDMxLjEtNzlMMjY2LjYgMzY0LjZDMjQ5LjkgMzg4LjEgMjQwIDQxNi45IDI0MCA0NDh6bTE0NC05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGluZ1BvbmdQYWRkbGVCYWxsID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYVRhYmxlVGVubmlzID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYUJveGVzUGFja2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3hlcy1wYWNraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0YzciLCAiTTIwOCAwbDgwIDAgMCA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNTYgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA4LjggMGM4LjItMTQuMSAxMi44LTMwLjUgMTIuOC00OGwwLTE2MGMxMC0xMy40IDE2LTMwIDE2LTQ4bDAtMzJjMC00NC4yLTM1LjgtODAtODAtODBsLTE3NiAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTMyIDMzNmwzMjAgMCAwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTI4ek00OCAxOTJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNoYWxrYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNoYWxrYm9hcmQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZCIsICJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0xNzYgNTEybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNiAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTQ4IDE5MiAwIDAgMTkyLTE5MiAwIDAtMzItNjQgMCAwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDM2OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LTEyMi43IDBjLTQ1LjYgMC04OC41IDIxLjYtMTE1LjYgNTguMkwxNC4zIDI2MC45Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhRGljZVR3byA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLXR3byIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTddLCAiZjUyOCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTM1MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2NDQsICJleGNoYW5nZSJdLCAiZjBlYyIsICJNNTAyLjYgMTUwLjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MDIuNyAxNjAgMzIgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDM3MC43IDAtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zem0tMzk3LjMgMzUybC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxMDkuMyAzNTIgNDgwIDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzcwLjcgMCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYUV4Y2hhbmdlID0gZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OwogICAgZmFGb290YmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb290YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk0NCwgImZvb3RiYWxsLWJhbGwiXSwgImY0NGUiLCAiTTI2MS4xIDIyLjZjLTg5IDE4LTE1MC41IDYzLjQtMTkwIDEyMy45LTIzLjMgMzUuNi0zOC4xIDc1LjMtNDYuNyAxMTUuNUwyNTEuOSA0ODkuNGM4OS0xOCAxNTAuNS02My40IDE5MC4xLTEyMy45IDIzLjMtMzUuNiAzOC4xLTc1LjMgNDYuNy0xMTUuNUwyNjEuMSAyMi42em0yMzYgMTY4LjFjMy4yLTQyLjMgLjctODMuMy00LjgtMTE4LjctNC40LTI3LjgtMjYuOC00OC01My4xLTUxLjYtNDMtNS45LTgyLjItNy41LTExNy44LTUuNEw0OTcuMSAxOTAuNnpNMTkxLjcgNDk3LjFMMTUuOSAzMjEuNGMtMy4yIDQyLjMtLjcgODMuMyA0LjggMTE4LjcgNC40IDI3LjggMjYuOCA0OCA1My4xIDUxLjYgNDMgNS45IDgyLjIgNy41IDExNy44IDUuNHpNMjcxLjUgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhRm9vdGJhbGxCYWxsID0gZmFGb290YmFsbDsKICAgIGZhVHJ1Y2tNb25zdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vbnN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjYzYiIsICJNMzM2IDk2bDQ4IDY0LTEyOCAwIDAtNjQgODAgMHptMTI4IDY0TDM4Ny4yIDU3LjZDMzc1LjEgNDEuNSAzNTYuMSAzMiAzMzYgMzJMMjI0IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2LTE0NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMTguMSAxMC4xIDMzLjkgMjQuOSA0Mi4xLS41IDUuNyAxLjEgMTEuNiA0LjcgMTYuNC0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjMgMzEuM2wxMS4zIDExLjNjOC42IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjctOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjMtMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAyLjQtMy4yIDMuOS02LjggNC41LTEwLjVsMTE0LjIgMGMuNiAzLjcgMi4xIDcuMyA0LjUgMTAuNS0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjIgMzEuM2wxMS4zIDExLjNjOC41IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjgtOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjItMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAzLjYtNC44IDUuMi0xMC43IDQuNy0xNi40IDE0LjgtOC4yIDI0LjktMjMuOSAyNC45LTQyLjFsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNMTI4IDMzNmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTI3MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFBc3RlcmlzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhc3RlcmlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDMzLCA2MTU0NV0sICIyYSIsICJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjguNiAxNDQtODMuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdzMy42IDM0LjktMTEuNyA0My43TDI4OCAyNTYgNDMyIDMzOS4xYzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdzLTI4LjQgMjAuNi00My43IDExLjdMMjU2IDMxMS40IDI1NiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjguNi0xNDQgODMuMWMtMTUuMyA4LjgtMzQuOSAzLjYtNDMuNy0xMS43Uy43IDM0OCAxNiAzMzkuMUwxNjAgMjU2IDE2IDE3Mi45Qy43IDE2NC00LjUgMTQ0LjUgNC4zIDEyOS4xUzMyLjcgMTA4LjYgNDggMTE3LjRMMTkyIDIwMC42IDE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQmF0dGVyeUZ1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1mdWxsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjY3LCAiYmF0dGVyeSIsICJiYXR0ZXJ5LTUiXSwgImYyNDAiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDMwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0zMDQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeSA9IGZhQmF0dGVyeUZ1bGw7CiAgICBmYUJhdHRlcnk1ID0gZmFCYXR0ZXJ5RnVsbDsKICAgIGZhQ2hpbGREcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1kcmVzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTljIiwgIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjQgNjQgNjQgMCAxIDAgMjI0IDY0ek04OCA0MDBsMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTYgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNy44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC43IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMkw4Ni4yIDI4NS41IDU1IDM3OC45QzUxLjYgMzg5LjMgNTkuMyA0MDAgNzAuMiA0MDBMODggNDAweiJdCiAgICB9OwogICAgZmFGYWNlS2lzc0JlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCAia2lzcy1iZWFtIl0sICJmNTk3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhS2lzc0JlYW0yID0gZmFGYWNlS2lzc0JlYW0yOwogICAgZmFUcmFzaENhbkFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUtYWx0Il0sICJmODJhIiwgIk0xNjcuMS0xNmwxMTMuOSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45TDMyMCAzMiA0MTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgOC43LTI2LjFDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2ek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmVBbHQgPSBmYVRyYXNoQ2FuQXJyb3dVcDsKICAgIGZhRm9udCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb250IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwMzEiLCAiTTI4NS4xIDUwLjdDMjc5LjkgMzkuMyAyNjguNSAzMiAyNTYgMzJzLTIzLjkgNy4zLTI5LjEgMTguN0w1OS41IDQxNiA0OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNi4xIDAgMjItNDggMjA4LjMgMCAyMiA0OC02LjEgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDAtMTY3LjQtMzY1LjN6TTMzMC44IDMwNEwxODEuMiAzMDQgMjU2IDE0MC44IDMzMC44IDMwNHoiXQogICAgfTsKICAgIGZhQm9yZUhvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZS1ob2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzMiLCAiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDIzMi42Yy0xOS4xIDExLjEtMzIgMzEuNy0zMiA1NS40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0yMy43LTEyLjktNDQuNC0zMi01NS40TDI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMCAzODRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNDRjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDM4MS45IDE0NCAzMjBsMC0xNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLWNvdmlkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YTgiLCAiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMzMuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTEuMy0xMS4zLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM2wzMy42IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNi0zMy42IDBjLTQuMiAzMC43LTE2LjMgNTguOC0zNC4xIDgyLjNsMjMuOCAyMy44IDExLjMtMTEuM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU2LjYgNTYuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxMS4zLTExLjMtMjMuOC0yMy44Yy0yMy41IDE3LjktNTEuNyAyOS45LTgyLjMgMzQuMWwwIDMzLjYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMzMuNmMtMzAuNy00LjItNTguOC0xNi4zLTgyLjMtMzQuMWwtMjMuOCAyMy44IDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMS4zIDExLjMgMjMuOC0yMy44Qzk3LjkgMzM4LjggODUuOCAzMTAuNyA4MS42IDI4MGwtMzMuNiAwIDAgMTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCAzMDkuMyAwIDI5NmwwLTgwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNiAzMy42IDBjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTIgMTQ5LjcgMTE1LjdjMjMuNS0xNy45IDUxLjctMjkuOSA4Mi4zLTM0LjFsMC0zMy42LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zMiAyMDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGaWxlUGRmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBkZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWMxIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjQwIDM4MGMtMTEgMC0yMCA5LTIwIDIwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMjggMTIgMGMzMy4xIDAgNjAtMjYuOSA2MC02MHMtMjYuOS02MC02MC02MGwtMzIgMHptMzIgODBsLTEyIDAgMC00MCAxMiAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHptOTYtODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MmwwLTY0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0zMiAwem0yMCAxMjhsMC04OCAxMiAwYzYuNiAwIDEyIDUuNCAxMiAxMmwwIDY0YzAgNi42LTUuNCAxMi0xMiAxMmwtMTIgMHptODgtMTA4bDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI4IDAgMC0yNCAyOCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNDggMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFMYW5ndWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5ndWFnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWFiIiwgIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05LjYgMC04LjQgMjMuMWMtMTYuNCA0NS4yLTQxLjEgODYuNS03Mi4yIDEyMiAxNC4yIDguOCAyOSAxNi42IDQ0LjQgMjMuNWw1MC40IDIyLjQgNjIuMi0xNDBjNS4xLTExLjYgMTYuNi0xOSAyOS4yLTE5czI0LjEgNy40IDI5LjIgMTlsMTI4IDI4OGM3LjIgMTYuMi0uMSAzNS4xLTE2LjIgNDIuMnMtMzUuMS0uMS00Mi4yLTE2LjJsLTIwLTQ1LTE1Ny41IDAtMjAgNDVjLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsMzkuOC04OS41LTUwLjQtMjIuNGMtMjMtMTAuMi00NS0yMi40LTY1LjgtMzYuNC0yMS4zIDE3LjItNDQuNiAzMi4yLTY5LjUgNDQuN0w3OC4zIDM4MC42Yy0xNS44IDcuOS0zNSAxLjUtNDIuOS0xNC4zcy0xLjUtMzUgMTQuMy00Mi45bDM0LjUtMTcuM2MxNi4zLTguMiAzMS44LTE3LjcgNDYuNC0yOC4zLTEzLjgtMTIuNy0yNi44LTI2LjQtMzguOS00MC45TDgxLjYgMjI0LjdjLTExLjMtMTMuNi05LjUtMzMuOCA0LjEtNDUuMXMzMy44LTkuNSA0NS4xIDQuMWwxMC4yIDEyLjJjMTEuNSAxMy45IDI0LjEgMjYuOCAzNy40IDM4LjcgMjcuNS0zMC40IDQ5LjItNjYuMSA2My41LTEwNS40bC41LTEuMi0yMTAuMyAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDE2IDI3MC44TDM2NS43IDM4NCA0NjYuMyAzODQgNDE2IDI3MC44eiJdCiAgICB9OwogICAgZmFTaGllbGRIYWx2ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWhhbHZlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaGllbGQtYWx0Il0sICJmM2VkIiwgIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOGwwIDM3OC4xYzEzOC02Ni44IDE3NS4xLTIxNC44IDE3Ni0zMDMuNGwtMTc2LTc0LjYgMCAweiJdCiAgICB9OwogICAgZmFTaGllbGRBbHQgPSBmYVNoaWVsZEhhbHZlZDsKICAgIGZhQ2FyZXRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC11cCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMGQ4IiwgIk0xNDAuMyAxMzUuMmMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDEuNCAzMjAgMjg4LjUgMzIwbC0yNTYgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuNyAyNzQuNSA5LjkgMjY1LjRsMTI4LTEyOCAyLjQtMi4yeiJdCiAgICB9OwogICAgZmFGaWxlUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjIxLCAiZmlsZS1lZGl0Il0sICJmMzFjIiwgIk0xMjguMSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDYuMiAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmwxMzIuMi0xMzIuMiAwLTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzIyLjggMTguN0MzMTAuOCA2LjcgMjk0LjUgMCAyNzcuNiAwTDEyOC4xIDB6TTM4OS42IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTkzLjUgMTE3LjUgMTE3LjV6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXQogICAgfTsKICAgIGZhRmlsZUVkaXQgPSBmYUZpbGVQZW47CiAgICBmYVBlcnNvbkJpa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYmlraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjkyLCAiYmlraW5nIl0sICJmODRhIiwgIk0zNjggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI1NiAzMDUuMSAyNTYgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyNjMgMjMyLjkgMzIzLjMgMTg0LjQgMzY0IDIxN2M1LjcgNC41IDEyLjcgNyAyMCA3bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUyLjggMHpNMTEyIDUxMmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTM1MiAwYTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7CiAgICBmYUJvb2tPcGVuUmVhZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stb3Blbi1yZWFkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYm9vay1yZWFkZXIiXSwgImY1ZGEiLCAiTTI1NiAxNTJhODggODggMCAxIDAgMC0xNzYgODggODggMCAxIDAgMCAxNzZ6bTAgMjk4LjdsMC0xNDkuM2MxNi4zLTYuOCAzMi45LTEzLjcgNDkuNy0yMC43IDM5LTE2LjIgODAuOC0yNC42IDEyMy4xLTI0LjZsMTkuMiAwIDAgMTYwLTE5LjIgMGMtNTkuMSAwLTExNy43IDExLjctMTcyLjMgMzQuNWwtLjUgLjJ6TTI1NiAyMzJsLTI1LjEtMTAuNUMxODQuMSAyMDIgMTMzLjkgMTkyIDgzLjIgMTkyTDQ4IDE5MmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41bDEyLjggNS4zYzcuOSAzLjMgMTYuNyAzLjMgMjQuNiAwbDEyLjgtNS4zYzQ2LjgtMTkuNSA5Ny0yOS41IDE0Ny43LTI5LjVsMzUuMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41TDI1NiAyMzJ6Il0KICAgIH07CiAgICBmYUJvb2tSZWFkZXIgPSBmYUJvb2tPcGVuUmVhZGVyOwogICAgZmFHbGFzc1dhdGVyRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbGFzcy13YXRlci1kcm9wbGV0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjUiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTgzIDI5Ny41TDY2LjQgNjQgMzE3LjYgNjQgMzAxIDI5Ny41IDI4OCAzMDRjLTIwLjEgMTAuMS00My45IDEwLjEtNjQgMHMtNDMuOS0xMC4xLTY0IDAtNDMuOSAxMC4xLTY0IDBsLTEzLTYuNXpNMjU2IDE5NmMwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjUtNi4xLTcuNy0xNy41LTcuNy0yMy42IDAtMTguNSAyMy40LTUyLjIgNjkuNS01Mi4yIDkzLjUgMCAzMy4xIDI4LjcgNjAgNjQgNjBzNjQtMjYuOSA2NC02MHoiXQogICAgfTsKICAgIGZhVG93ZXJCcm9hZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItYnJvYWRjYXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJyb2FkY2FzdC10b3dlciJdLCAiZjUxOSIsICJNODcuOSAxMS41Yy0xMS4zLTYuOS0yNi4xLTMuMi0zMyA4LjEtMjQuOCA0MS0zOSA4OS4xLTM5IDE0MC40czE0LjIgOTkuNCAzOSAxNDAuNGM2LjkgMTEuMyAyMS42IDE1IDMzIDguMXMxNS0yMS42IDguMS0zM0M3NS43IDI0MS45IDY0IDIwMi4zIDY0IDE2MFM3NS43IDc4LjEgOTYuMSA0NC40YzYuOS0xMS4zIDMuMi0yNi4xLTguMS0zM3ptNDAwLjEgMGMtMTEuMyA2LjktMTUgMjEuNi04LjEgMzMgMjAuNCAzMy43IDMyLjEgNzMuMyAzMi4xIDExNS42cy0xMS43IDgxLjktMzIuMSAxMTUuNmMtNi45IDExLjMtMy4yIDI2LjEgOC4xIDMzczI2LjEgMy4yIDMzLTguMWMyNC44LTQxIDM5LTg5LjEgMzktMTQwLjRTNTQ1LjggNjAuNiA1MjEgMTkuNmMtNi45LTExLjMtMjEuNi0xNS0zMy04LjF6TTMyMCAyMTUuNGMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40IDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwyNTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNjQuNnpNMTgwLjIgOTFjNy4yLTExLjIgMy45LTI2LTcuMi0zMy4ycy0yNi0zLjktMzMuMiA3LjJjLTE3LjYgMjcuNC0yNy44IDYwLTI3LjggOTVzMTAuMiA2Ny42IDI3LjggOTVjNy4yIDExLjIgMjIgMTQuNCAzMy4yIDcuMnMxNC40LTIyIDcuMi0zMy4yYy0xMi44LTE5LjktMjAuMi00My42LTIwLjItNjlzNy40LTQ5LjEgMjAuMi02OXpNNDM2LjIgNjVjLTcuMi0xMS4yLTIyLTE0LjQtMzMuMi03LjJzLTE0LjQgMjItNy4yIDMzLjJjMTIuOCAxOS45IDIwLjIgNDMuNiAyMC4yIDY5cy03LjQgNDkuMS0yMC4yIDY5Yy03LjIgMTEuMi0zLjkgMjYgNy4yIDMzLjJzMjYgMy45IDMzLjItNy4yYzE3LjYtMjcuNCAyNy44LTYwIDI3LjgtOTVzLTEwLjItNjcuNi0yNy44LTk1eiJdCiAgICB9OwogICAgZmFCcm9hZGNhc3RUb3dlciA9IGZhVG93ZXJCcm9hZGNhc3Q7CiAgICBmYU1pbmltaXplID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbXByZXNzLWFycm93cy1hbHQiXSwgImY3OGMiLCAiTTQ1NiAyMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzIyLjEgMzIuMiAzMjkgMzlsNDAgNDAgNzMuNC03My40QzQ0NiAyIDQ1MC45IDAgNDU2IDBzMTAgMiAxMy43IDUuN2wzNi43IDM2LjdDNTEwIDQ2IDUxMiA1MC45IDUxMiA1NnMtMiAxMC01LjcgMTMuN0w0MzMgMTQzIDQ3MyAxODNjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMlM0NjUuNyAyMjQgNDU2IDIyNHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzMgMzI5IDQ3M2MtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggNDY1LjcgMjg4IDQ1NmwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNDQgMHptLTI1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTQwLTQwLTczLjQgNzMuNEM2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0Ni4zIDI4OCA1NiAyODhsMTQ0IDB6TTU2IDIyNGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44UzMyLjIgMTg5LjkgMzkgMTgzTDc5IDE0MyA1LjcgNjkuN0MyIDY2IDAgNjEuMSAwIDU2UzIgNDYgNS43IDQyLjNMNDIuMyA1LjdDNDYgMiA1MC45IDAgNTYgMFM2NiAyIDY5LjcgNS43TDE0MyA3OSAxODMgMzljNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgNDYuMyAyMjQgNTZsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRMNTYgMjI0eiJdCiAgICB9OwogICAgZmFDb21wcmVzc0Fycm93c0FsdCA9IGZhTWluaW1pemU7CiAgICBmYUFycm93UmlnaHRUb0NpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtdG8tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGIzIiwgIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwIDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek01MTIgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE1MyAxNjdsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFMYXB0b3BNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4MTIiLCAiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwLTY0IDAgMC0yNDAtMzg0IDAgMCAyNDAtNjQgMCAwLTI0MHpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRsNjAxLjYgMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yIDAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44TDc2LjggNDgwQzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQnJlYWRTbGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmVhZC1zbGljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2VjIiwgIk02NCA0MzJsMC0xNzZjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjE2LjUgNTEyLTIxNi41IDUxMiAwIDAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTc2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yODggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il0KICAgIH07CiAgICBmYUdsb2JlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsb2JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzYwXSwgImYwYWMiLCAiTTM1MS45IDI4MGwtMTkwLjkgMGMyLjkgNjQuNSAxNy4yIDEyMy45IDM3LjUgMTY3LjQgMTEuNCAyNC41IDIzLjcgNDEuOCAzNS4xIDUyLjQgMTEuMiAxMC41IDE4LjkgMTIuMiAyMi45IDEyLjJzMTEuNy0xLjcgMjIuOS0xMi4yYzExLjQtMTAuNiAyMy43LTI4IDM1LjEtNTIuNCAyMC4zLTQzLjUgMzQuNi0xMDIuOSAzNy41LTE2Ny40ek0xNjAuOSAyMzJsMTkwLjkgMEMzNDkgMTY3LjUgMzM0LjcgMTA4LjEgMzE0LjQgNjQuNiAzMDMgNDAuMiAyOTAuNyAyMi44IDI3OS4zIDEyLjIgMjY4LjEgMS43IDI2MC40IDAgMjU2LjQgMHMtMTEuNyAxLjctMjIuOSAxMi4yYy0xMS40IDEwLjYtMjMuNyAyOC0zNS4xIDUyLjQtMjAuMyA0My41LTM0LjYgMTAyLjktMzcuNSAxNjcuNHptLTQ4IDBDMTE2LjQgMTQ2LjQgMTM4LjUgNjYuOSAxNzAuOCAxNC43IDc4LjcgNDcuMyAxMC45IDEzMS4yIDEuNSAyMzJsMTExLjQgMHpNMS41IDI4MGM5LjQgMTAwLjggNzcuMiAxODQuNyAxNjkuMyAyMTcuMy0zMi4zLTUyLjItNTQuNC0xMzEuNy01Ny45LTIxNy4zTDEuNSAyODB6bTM5OC40IDBjLTMuNSA4NS42LTI1LjYgMTY1LjEtNTcuOSAyMTcuMyA5Mi4xLTMyLjcgMTU5LjktMTE2LjUgMTY5LjMtMjE3LjNsLTExMS40IDB6bTExMS40LTQ4QzUwMS45IDEzMS4yIDQzNC4xIDQ3LjMgMzQyIDE0LjcgMzc0LjMgNjYuOSAzOTYuNCAxNDYuNCAzOTkuOSAyMzJsMTExLjQgMHoiXQogICAgfTsKICAgIGZhRm9sZGVyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW1pbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NWQiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFNYXNrRmFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrLWZhY2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTFkNyIsICJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUw2NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNzguN2MwIDYyLjYgNDUuMiAxMTYgMTA3IDEyNi4zbDk3LjkgMTYuM2MzMyAyMiA3Mi42IDM0LjcgMTE1LjEgMzQuN3M4Mi4yLTEyLjggMTE1LjEtMzQuN0w1MzMgMzk2LjljNjEuNy0xMC4zIDEwNy02My43IDEwNy0xMjYuM2wwLTc4LjdjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg5LjIgMGMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFMMzk2LjQgODcuMUMzNzMuOCA3MiAzNDcuMiA2NCAzMjAgNjR6TTEzNS45IDMzNi45bC0xOC40LTMuMUM4Ni42IDMyOC43IDY0IDMwMiA2NCAyNzAuN2wwLTc4LjcgNDggMCAwIDQ4YzAgMzUgOC42IDY3LjkgMjMuOSA5Ni45em0zODYuNi0zLjFsLTE4LjQgMy4xQzUxOS40IDMwNy45IDUyOCAyNzUgNTI4IDI0MGwwLTQ4IDQ4IDAgMCA3OC43YzAgMzEuMy0yMi42IDU4LTUzLjUgNjMuMXpNMTkyIDIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em01NiA1NmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9uZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTVjIiwgIk00NDguNSAzODRjMCA0MS41LTEzLjEgNzkuOS0zNS41IDExMS4zLTcuOSAxMS4xLTIxLjIgMTYuNy0zNC44IDE2LjdsLTI0My4zIDBjLTEzLjcgMC0yNi45LTUuNi0zNC44LTE2LjctMjIuNC0zMS40LTM1LjUtNjkuOC0zNS41LTExMS4zIDAtNzEuMSAzOC42LTEzMy4xIDk2LTE2Ni4zbDAtMTUzLjdjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuN2MxNC4yIDguMiAyNy4yIDE4LjIgMzguOCAyOS42bDM5LjMtMzkuMy03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNiAxNiAzMiAzMiA0OCA0OCA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zYzE3LjMgMjguOSAyNy4zIDYyLjYgMjcuMyA5OC44ek0yODguNSA2NGwtNjQgMCAwIDE5MC42LTMyIDE4LjVjLTE5LjUgMTEuMy0zNS43IDI3LjUtNDYuOSA0Ni45bDIyMS44IDBjLTExLjItMTkuNC0yNy40LTM1LjYtNDYuOS00Ni45bC0zMi0xOC41IDAtMTkwLjZ6Il0KICAgIH07CiAgICBmYVJvYWRCcmlkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1icmlkZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2MyIsICJNMzIgMzJsMjA4IDAgMCA2NC0yNCAwIDAgNjQgMjQgMCAwIDEyOS4zYy00NS40IDcuNi04MCA0Ny4xLTgwIDk0LjdsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NGMwLTM4LjgtMjYuNC03Mi42LTY0LTgybDAtMTEyIDQwIDAgMC02NC04IDBDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMyek04OCA5NmwwIDY0IDgwIDAgMC02NC04MCAwek0zMzYgMzJsNzIgMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA3MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03MiAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi03MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MmMwLTI2LjUgMjEuNS00OCA0OC00OHptOTYgMTYwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhQXJyb3dVcDkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTktMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAtYWx0Il0sICJmODg3IiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTM2NS4xIDIwNi42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAxMTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDIuNyAxODJjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNVcEFsdCA9IGZhQXJyb3dVcDkxOwogICAgZmFNb3VudGFpbkNpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJlIiwgIk0yNTYuMyA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDggNDggMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03Ny44IDBjNC0xNS40IDIuNC0zMi42LTYuNy00OC4yTDM1NC42IDI1NiAzNjguMyAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy02LjEgMC0xMS40IDMuNC0xNC4xIDguNWwtNDIuNi03M2MtNi0xMC4yLTE0LjEtMTgtMjMuMy0yMy4zbDAtNTYuMnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYwIDk2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bS0yNzItNjQuN2wtNjUuMSAxMTEuNiAzMy4xIDMzLjEgNDgtNDggNDAuNCAwLTU2LjQtOTYuN3ptLTI3LjYtNDcuOWMxMi4zLTIxLjIgNDIuOS0yMS4yIDU1LjMgMEw0MjAuMyA0NjMuOWMxMi40IDIxLjMtMi45IDQ4LjEtMjcuNiA0OC4xTDU2IDUxMmMtMjQuNyAwLTQwLjEtMjYuOC0yNy42LTQ4LjFMMTk2LjcgMTc1LjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bjkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tOS0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtbnVtZXJpYy1kZXNjIiwgInNvcnQtbnVtZXJpYy1kb3duLWFsdCJdLCAiZjg4NiIsICJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0xMzQuNS0xODRsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAxMTJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptLTUuMyAxODJjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljRGVzYyA9IGZhQXJyb3dEb3duOTE7CiAgICBmYVNvcnROdW1lcmljRG93bkFsdCA9IGZhQXJyb3dEb3duOTE7CiAgICBmYUZhY2VHcmluV2lkZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTUsICJncmluLWFsdCJdLCAiZjU4MSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0yMDggMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0IDE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NHptMTI4IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhR3JpbkFsdDIgPSBmYUZhY2VHcmluV2lkZTI7CiAgICBmYVBvb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjE5IiwgIk0yNTQuNCA2LjZjMy41LTQuMyA5LTYuNSAxNC41LTUuNyA0Ni45IDYuMyA4My4xIDQ2LjUgODMuMSA5NS4xIDAgMTEuMi0xLjkgMjItNS41IDMybDUuNSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTkuMS04LjQgMzYuMy0yMS43IDQ4bDEzLjcgMGMzOS44IDAgNzIgMzIuMiA3MiA3MiAwIDIzLjItMTEgNDMuOC0yOCA1NyAzNC4xIDUuNyA2MCAzNS4zIDYwIDcxIDAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDUxMmMtMzkuOCAwLTcyLTMyLjItNzItNzIgMC0zNS43IDI1LjktNjUuMyA2MC03MS0xNy0xMy4yLTI4LTMzLjgtMjgtNTcgMC0zOS44IDMyLjItNzIgNzItNzJsMTMuNyAwYy0xMy4zLTExLjctMjEuNy0yOC45LTIxLjctNDggMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYuMiAwYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODAgMC05LjItMS41LTE3LjktNC4zLTI2LjEtMS44LTUuMi0uOC0xMS4xIDIuOC0xNS40eiJdCiAgICB9OwogICAgZmFEaGFybWFjaGFrcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGhhcm1hY2hha3JhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NF0sICJmNjU1IiwgIk0zMzcuOCAyMDUuN2w0OC42LTQyLjVjMTMuOCAxOS4zIDIzLjQgNDEuOSAyNy40IDY2LjJsLTY0LjQgNC4zYy0yLjQtMTAuMS02LjQtMTkuNS0xMS42LTI4em0xNDAuMSAxOS41Yy01LjMtMzguOC0yMC42LTc0LjUtNDMuMi0xMDQuM2wuOC0uN0M0NDkgMTA4LjQgNDQ5LjcgODcuNiA0MzcgNzVzLTMzLjQtMTItNDUuMiAxLjVsLS43IC44Yy0yOS44LTIyLjYtNjUuNS0zNy45LTEwNC4zLTQzLjJsLjEtMS4xYzEuMi0xNy45LTEzLTMzLTMwLjktMzNzLTMyLjEgMTUuMi0zMC45IDMzbC4xIDEuMWMtMzguOCA1LjMtNzQuNSAyMC42LTEwNC4zIDQzLjJsLS43LS44QzEwOC40IDYzIDg3LjYgNjIuMyA3NSA3NXMtMTIgMzMuNCAxLjUgNDUuMmwuOCAuN2MtMjIuNiAyOS44LTM3LjkgNjUuNS00My4yIDEwNC4zbC0xLjEtLjFjLTE3LjktMS4yLTMzIDEzLTMzIDMwLjlzMTUuMiAzMi4xIDMzIDMwLjlsMS4xLS4xYzUuMyAzOC44IDIwLjYgNzQuNSA0My4yIDEwNC4zbC0uOCAuN0M2MyA0MDMuNiA2Mi4zIDQyNC40IDc1IDQzN3MzMy40IDEyIDQ1LjItMS41bC43LS44YzI5LjggMjIuNiA2NS41IDM3LjkgMTA0LjMgNDMuMmwtLjEgMS4xYy0xLjIgMTcuOSAxMyAzMyAzMC45IDMzczMyLjEtMTUuMiAzMC45LTMzbC0uMS0xLjFjMzguOC01LjMgNzQuNS0yMC42IDEwNC4zLTQzLjJsLjcgLjhjMTEuOCAxMy41IDMyLjUgMTQuMiA0NS4yIDEuNXMxMi0zMy40LTEuNS00NS4ybC0uOC0uN2MyMi42LTI5LjggMzcuOS02NS41IDQzLjItMTA0LjNsMS4xIC4xYzE3LjkgMS4yIDMzLTEzIDMzLTMwLjlzLTE1LjItMzIuMS0zMy0zMC45bC0xLjEgLjF6TTE2My4yIDEyNS42YzE5LjMtMTMuOCA0MS45LTIzLjQgNjYuMi0yNy41bDQuMyA2NC40Yy0xMCAyLjQtMTkuNSA2LjQtMjggMTEuNmwtNDIuNS00OC42em0tNjUgMTAzLjhjNC4xLTI0LjQgMTMuNy00Ni45IDI3LjUtNjYuMmw0OC42IDQyLjVjLTUuMyA4LjUtOS4yIDE4LTExLjYgMjhsLTY0LjQtNC4zem0yNy41IDExOS40Yy0xMy44LTE5LjMtMjMuNC00MS45LTI3LjUtNjYuMmw2NC40LTQuM2MyLjQgMTAuMSA2LjQgMTkuNSAxMS42IDI4bC00OC42IDQyLjV6bTEwMy44IDY1Yy0yNC40LTQuMS00Ni45LTEzLjctNjYuMi0yNy40bDQyLjUtNDguNmM4LjUgNS4zIDE4IDkuMiAyOCAxMS42bC00LjMgNjQuNHptMTE5LjQtMjcuNGMtMTkuMyAxMy44LTQxLjkgMjMuNC02Ni4yIDI3LjRsLTQuMy02NC40YzEwLTIuNCAxOS41LTYuNCAyOC0xMS42bDQyLjUgNDguNnptNjUtMTAzLjhjLTQuMSAyNC40LTEzLjcgNDYuOS0yNy40IDY2LjJsLTQ4LjYtNDIuNWM1LjMtOC42IDkuMi0xOCAxMS42LTI4bDY0LjQgNC4zem0tNjUtMTU2LjlsLTQyLjUgNDguNmMtOC42LTUuMy0xOC05LjItMjgtMTEuNmw0LjMtNjQuNGMyNC40IDQuMSA0Ni45IDEzLjcgNjYuMiAyNy41ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmF0dGVyeVF1YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1xdWFydGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMiJdLCAiZjI0MyIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNjQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTIgPSBmYUJhdHRlcnlRdWFydGVyOwogICAgZmFBbmtoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFua2giLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5NzY1XSwgImY2NDQiLCAiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMS01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjctNS42LTQuOS0xMS41LTEwLjUtMTcuNC0xNi43LTI1LjktMjcuNS00Ni42LTYyLjYtNDYuNi0xMDQuMXpNMTYwIDBDODkuMyAwIDMyIDU3LjMgMzIgMTI4IDMyIDE4MC40IDUzLjUgMjIzLjUgNzguOCAyNTZMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Ni44IDBDMjY2LjUgMjIzLjUgMjg4IDE4MC40IDI4OCAxMjggMjg4IDU3LjMgMjMwLjcgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRGlhbW9uZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgzMF0sICJmMjE5IiwgIk0xNyAyMTVMMjE1IDE3QzIyNS45IDYuMSAyNDAuNiAwIDI1NiAwczMwLjEgNi4xIDQxIDE3TDQ5NSAyMTVjMTAuOSAxMC45IDE3IDI1LjYgMTcgNDFzLTYuMSAzMC4xLTE3IDQxTDI5NyA0OTVjLTEwLjkgMTAuOS0yNS42IDE3LTQxIDE3cy0zMC4xLTYuMS00MS0xN0wxNyAyOTdDNi4xIDI4Ni4xIDAgMjcxLjQgMCAyNTZzNi4xLTMwLjEgMTctNDF6Il0KICAgIH07CiAgICBmYVN1YnNjcmlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWJzY3JpcHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyYyIsICJNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHpNNTQ0IDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjkgNS42IDExLjIgMTYuOSAxNy43IDI4LjYgMTcuN2wwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6Il0KICAgIH07CiAgICBmYVJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydXBlZS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MCwgInJ1cGVlIl0sICJmMTU2IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6bTI4NS4xLTMybDM0LjkgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzQuOSAwYy03LjIgMC0xMy4xIDUuOS0xMy4xIDEzLjEgMCA1LjcgMy43IDEwLjcgOS4xIDEyLjVsNDkuNCAxNS45YzMxLjkgMTAuMyA1My41IDM5LjkgNTMuNSA3My40IDAgNDIuNi0zNC41IDc3LjEtNzcuMSA3Ny4xTDMyMCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTAuOSAwYzcuMiAwIDEzLjEtNS45IDEzLjEtMTMuMSAwLTUuNy0zLjctMTAuNy05LjEtMTIuNWwtNDkuNC0xNS45Yy0zMS45LTEwLjMtNTMuNS0zOS45LTUzLjUtNzMuNCAwLTQyLjYgMzQuNS03Ny4xIDc3LjEtNzcuMXoiXQogICAgfTsKICAgIGZhUnVwZWUgPSBmYVJ1cGVlU2lnbjsKICAgIGZhUGVyc29uUmlmbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJpZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGUiLCAiTTQxNiAwTDM4NCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45bC0yMy05Mi4xIDQ0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtMjYuNyA1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJsMC04NC41YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNTYtMTYgNS4zIDAtMTA5LjNjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdMNDMyIDE2YzAtOC44LTcuMi0xNi0xNi0xNnpNMjI0IDIwOEMxMTggMjA4IDMyIDI5NCAzMiA0MDBsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDhjMC0zMi41IDEyLjEtNjIuMSAzMi04NC43bDAgMTk2LjcgMTYwIDAgMC0yOTMuMWMtMjAtNy4xLTQxLjYtMTAuOS02NC0xMC45ek0yODAgODhhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdCiAgICB9OwogICAgZmFEID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMDBdLCAiNDQiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMTI4IDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNFMyODMuNyA0ODAgMTYwIDQ4MEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6TTY0IDk2bDAgMzIwIDk2IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBTMjQ4LjQgOTYgMTYwIDk2TDY0IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVOZmkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW5maSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTc2IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05MyAxNzIuM2wzNSA2MyAwLTUxLjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDEwLjktNy40IDIwLjUtMTggMjMuMnMtMjEuNy0yLTI3LTExLjZsLTM1LTYzIDAgNTEuNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEwLjkgNy40LTIwLjUgMTgtMjMuMnMyMS43IDIgMjcgMTEuNnpNMjA4IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwIDAgMzIgNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTQ0em0xOTIgMGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFUZWV0aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjJlIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTQ0IDIwOGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTI4IDBsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTgwIDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTMyMCAzMmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpNNDggMzM2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2em0xNDQgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0xMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAyNi41IDIxLjUgNDggNDggNDh6bTExMi0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtZG9sbGFyIl0sICJmNjg4IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIxMiA5NmMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDE2OCAyNTZjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYVNlYXJjaERvbGxhciA9IGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyOwogICAgZmFEdW1wc3RlckZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXItZmlyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzk0IiwgIk0xNjQuMyA2NEwxMzguNyAxOTIgNTYgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkw1OC41IDgwLjRDNjEuOCA3MC42IDcxIDY0IDgxLjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTM0NCA2NGw4Mi43IDAgMTYgODBjLTE0LjcgLjItMjkuMyA1LjUtNDAuOSAxNS45LTExLjUgMTAuMy0yMi41IDIxLTMyLjggMzIuMWwtMjQuOSAwIDAtMTI4ek05NiAyNDBsMjMzLjIgMGMtNi40IDguOC0xMi4zIDE3LjYtMTcuNyAyNi4zLTIxLjQgMzQuNy0zOS41IDc2LjEtMzkuNSAxMTUuOCAwIDE3LjEgMi4xIDMzLjggNiA0OS45bC0xMjAuNCAwIDEuOSAxMC4zYzMuMiAxNy40LTguNCAzNC0yNS44IDM3LjJzLTM0LTguNC0zNy4yLTI1LjhDNzEgMzEzLjMgNTggMjQyLjEgNTcuNyAyNDBMOTYgMjQwem01MTItNzJjMCAxMS03LjQgMjAuMy0xNy41IDIzLjEtLjktLjgtMS43LTEuNi0yLjYtMi40LTIxLjgtMjAtNTQuMy0yMS44LTc4LTUuNS00LjItNC4zLTguNS04LjUtMTIuOS0xMi42bC0yMS4zLTEwNi42IDgzIDBjMTAuMyAwIDE5LjUgNi42IDIyLjggMTYuNGwyNS4zIDc1LjljLjggMi40IDEuMiA1IDEuMiA3LjZsMCA0LjF6TTUwNS43IDI0MC4zTDUxOCAyMjYuNWM1LjQtNi4xIDEzLjMtOC44IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4xIDI2LjIgODguMSAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMiA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41czEzLjQgMy4yIDE4LjggNy41YzE0LjQgMTEuNCAzOC45IDQwLjcgMzguOSA0MC43ek01NDQgNDMyLjJjMC0zNi41LTM3LTczLTU0LjgtODguNC01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuOCA1MS45LTU0LjggODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFVcGxvYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXBsb2FkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwOTMiLCAiTTI1NiAxMDkuM0wyNTYgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEwLjctNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyNTYgMTA5LjN6TTIyNCA0MDBjNDQuMiAwIDgwLTM1LjggODAtODBsODAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwYzAgNDQuMiAzNS44IDgwIDgwIDgwem0xNDQgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFVc2VyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyNzE0LCAidXNlci1hbHQtc2xhc2giLCAidXNlci1sYXJnZS1zbGFzaCJdLCAiZjUwNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMTEuNSAyNDUuN2M1NS0xMC45IDk2LjUtNTkuNSA5Ni41LTExNy43IDAtNjYuMy01My43LTEyMC0xMjAtMTIwLTU4LjIgMC0xMDYuOCA0MS41LTExNy43IDk2LjVMNDEtMjQuOXpNMjM1LjYgMzA1LjRDMTQ3LjkgMzE2LjYgODAgMzkxLjUgODAgNDgyLjMgODAgNDk4LjcgOTMuMyA1MTIgMTA5LjcgNTEybDMzMi41IDAtMjA2LjYtMjA2LjZ6Il0KICAgIH07CiAgICBmYVVzZXJBbHRTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFVc2VyTGFyZ2VTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTJdLCAiZjA2MCIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgMTA1LjQtMTA1LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6Il0KICAgIH07CiAgICBmYVZpYWxWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFsLXZpcnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTciLCAiTTY0IDMyQzY0IDE0LjMgNzguMyAwIDk2IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTEuN2MtMTguNSAwLTM3IDctNTEuMSAyMS4xLTIxLjYgMjEuNi0yNi42IDUzLjYtMTUgNzkuOS0yNi45IDEwLjQtNDUuOSAzNi42LTQ1LjkgNjcuMXMxOSA1Ni43IDQ1LjkgNjcuMWMtNy4zIDE2LjUtOCAzNS4yLTIuMyA1Mi4yLTEzLjQgNS43LTI4LjIgOC44LTQzLjYgOC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwek0yODAgNDA4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjggMCA0My4yLTM0LjggMjIuOS01NS4yLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC40IDIwLjQgNTUuMiA1LjkgNTUuMi0yMi45IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAyOC44IDM0LjggNDMuMiA1NS4yIDIyLjkgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC40IDIwLjQtNS45IDU1LjIgMjIuOSA1NS4yIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yOC44IDAtNDMuMiAzNC44LTIyLjkgNTUuMiA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0yMC40LTIwLjQtNTUuMi01LjktNTUuMiAyMi45IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjguOC0zNC44LTQzLjItNTUuMi0yMi45LTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNC0yMC40IDUuOS01NS4yLTIyLjktNTUuMnptMTA0LTMyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2hlY2tEb3VibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stZG91YmxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NjAiLCAiTTI0OS45IDY2LjhjMTAuNC0xNC4zIDcuMi0zNC4zLTcuMS00NC43cy0zNC4zLTcuMi00NC43IDcuMWwtMTA2IDE0NS43LTM3LjUtMzcuNWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi42IDYuNiAxNS44IDEwIDI1LjEgOS4zczE3LjktNS41IDIzLjQtMTMuMWwxMjgtMTc2em0xMjggMTM2YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTE3MCAyMzMuNy02OS41LTY5LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTkyLTI2NHoiXQogICAgfTsKICAgIGZhUGF3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIwIiwgIk0yMzQuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNSAuMy04Ni4yIDMyLjYtOTYuOCA3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjMtMTQuMy03MC4xIDEwLjItODQuMSA1OS43IC45IDc4LjUgMzMuM3pNNjkuMiA0MDEuMkMxMjEuNiAyNTkuOSAyMTQuNyAyMjQgMjU2IDIyNHMxMzQuNCAzNS45IDE4Ni44IDE3Ny4yYzMuNiA5LjcgNS4yIDIwLjEgNS4yIDMwLjVsMCAxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjctMTEuNSAwLTIyLjktMS40LTM0LTQuMmwtODgtMjJjLTE1LjMtMy44LTMxLjMtMy44LTQ2LjYgMGwtODggMjJjLTExLjEgMi44LTIyLjUgNC4yLTM0IDQuMi0yNS44IDAtNDYuNy0yMC45LTQ2LjctNDYuN2wwLTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjMgMjkuMSA1MS43IDEwLjIgODQuMS01NCA0Ny4zLTc4LjUgMzMuM3pNMzEwLjEgMTg5LjdjLTMyLjMtMTAuNi00Ni45LTUzLjktMzIuNi05Ni44czUyLjEtNjkuMSA4NC40LTU4LjUgNDYuOSA1My45IDMyLjYgOTYuOC01Mi4xIDY5LjEtODQuNCA1OC41eiJdCiAgICB9OwogICAgZmFIZWxtZXRTYWZldHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsbWV0LXNhZmV0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXJkLWhhdCIsICJoYXQtaGFyZCJdLCAiZjgwNyIsICJNMzUyIDI2NGwwLTIwMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODUuOUM5MCAxMDkuOCAzMiAxOTEuOCAzMiAyODhsMCA2NCA1MTIgMCAwLTY0Yy0xLTk1LjItNTguNC0xNzcuNy0xNDQtMjA5LjhMNDAwIDI2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpNNDAgNDAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDQ5NiAwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwTDQwIDQwMHoiXQogICAgfTsKICAgIGZhSGFyZEhhdCA9IGZhSGVsbWV0U2FmZXR5OwogICAgZmFIYXRIYXJkID0gZmFIZWxtZXRTYWZldHk7CiAgICBmYUUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwMV0sICI0NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xMjggMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hTcXVpbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXNxdWludCJdLCAiZjU5YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwNy43IDMzMi4xQzEwMiAzMTggMTEzLjQgMzA0IDEyOC42IDMwNGwyNTQuOSAwYzE1LjIgMCAyNi42IDE0IDIwLjkgMjguMS0yMy44IDU4LjYtODEuMiA5OS45LTE0OC4zIDk5LjlzLTEyNC42LTQxLjMtMTQ4LjMtOTkuOXptMTUtMTg4LjhjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhTGF1Z2hTcXVpbnQyID0gZmFGYWNlTGF1Z2hTcXVpbnQyOwogICAgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21wcmVzcy1hbHQiXSwgImY0MjIiLCAiTTQzOS41IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDUwLjIgMjQwIDQ0MC41IDI0MGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N3pNNzIuNSAyNzJsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNDRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODctMzktMzljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNjIuOCAyNzIgNzIuNSAyNzJ6Il0KICAgIH07CiAgICBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjsKICAgIGZhR2lmdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2lmdHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5YyIsICJNMjAyLTMwLjZjMTIuNSA0LjQgMTkgMTguMSAxNC42IDMwLjZsLTguMiAyMy4xIDI1LjQtMTguNWMxMC43LTcuOCAyNS43LTUuNCAzMy41IDUuM3M1LjQgMjUuNy01LjMgMzMuNUwyMzMuOCA2NCAyNzIgNjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyLjFjLTU0LjcgMTAuNC05NiA1OC40LTk2IDExNmwwIDEuOWMwIDguOSAxIDE3LjUgMi44IDI1LjktMTEuOSAxNy44LTE4LjggMzkuMS0xOC44IDYyLjFsMCAxMjhjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwzOC4yIDAtMjguMy0yMC42QzQ3LjIgMzUuNiA0NC44IDIwLjYgNTIuNiA5LjlTNzUuNC0zLjIgODYuMSA0LjZsMjcuNCAyMC04LjMtMjVDMTAxLTEzIDEwNy44LTI2LjYgMTIwLjQtMzAuOHMyNi4yIDIuNiAzMC40IDE1LjJsOS45IDI5LjggMTAuNy0zMC4yYzQuNC0xMi41IDE4LjEtMTkgMzAuNi0xNC42ek00ODkuOSAyMDhjLTcuNSAwLTE0LjUgMy44LTE4LjYgMTAuMUw0NDYuOSAyNTYgNDg4IDI1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEuOWMwLTEyLjItOS45LTIyLjEtMjIuMS0yMi4xek0zODUuMSAyNTZsLTI0LjQtMzcuOWMtNC4xLTYuMy0xMS4xLTEwLjEtMTguNi0xMC4xLTEyLjIgMC0yMi4xIDkuOS0yMi4xIDIyLjFsMCAxLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDEuMSAwek0yODEuOSAyNjguNWMtNi4zLTEwLjctOS45LTIzLjItOS45LTM2LjVsMC0xLjljMC0zOC43IDMxLjQtNzAuMSA3MC4xLTcwLjEgMjMuOCAwIDQ2IDEyLjEgNTguOSAzMi4xbDE1IDIzLjIgMTUtMjMuMmMxMi45LTIwIDM1LjEtMzIuMSA1OC45LTMyLjEgMzguNyAwIDcwLjEgMzEuNCA3MC4xIDcwLjFsMCAxLjljMCAxMy4zLTMuNiAyNS44LTkuOSAzNi41IDE1LjcgMTEuNyAyNS45IDMwLjQgMjUuOSA1MS41bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC03MiAwIDAtMjA4LTQ4IDAgMCAyMDgtNzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMjhjMC0yMS4xIDEwLjItMzkuOCAyNS45LTUxLjV6Il0KICAgIH07CiAgICBmYUJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3MTZdLCAiZjIzNiIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjQgMjI0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTQ0OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem04MCAxNjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxUcmFuc2ZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXRyYW5zZmVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjgiLCAiTTMxIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMTAzLTFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSA2Ny43IDAgMCAwIDMzOC4zIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNzguMi01LjEtNS4xYy0yOC4xLTI4LjEtNzMuNy0yOC4xLTEwMS44IDAtMjcuMiAyNy4yLTI4LjEgNzAuNi0yLjggOTguOWw2Ny43IDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNDA2LjEgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzguMiA1LjEgNS4xYzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCAyNy4yLTI3LjIgMjguMS03MC42IDIuOC05OC45bC02Ny43IDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwzMSAxMDV6TTQxNiAyNTZhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem04OC02NC41YzQuNCAuNSA4LTMuMSA4LTcuNWwwLTQ4YzAtNC40LTMuNi04LTgtOGwtNDggMGMtNC40IDAtOC4xIDMuNi03LjUgOCAzLjYgMjkgMjYuNiA1MS45IDU1LjUgNTUuNXptLTM2OCAxMjljLTQuNC0uNS04IDMuMS04IDcuNWwwIDQ4YzAgNC40IDMuNiA4IDggOGw0OCAwYzQuNCAwIDguMS0zLjYgNy41LTgtMy42LTI5LTI2LjYtNTEuOS01NS41LTU1LjV6Il0KICAgIH07CiAgICBmYVBlcnNvblJ1bm5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJ1bm5pbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzksICJydW5uaW5nIl0sICJmNzBjIiwgIk0yNTYuNS0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTIzLjYgMTc2Yy0zLjMgMC02LjIgMi03LjQgNUw5NC4yIDIzNS45Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44cy0yNC40LTI1LjItMTcuOC00MS42bDIxLjktNTQuOUM2Ny43IDEyOS45IDk0LjEgMTEyIDEyMy42IDExMmw5Ny4zIDBjMjguNSAwIDU0LjggMTUuMSA2OS4xIDM5LjdsMzIuOCA1Ni4zIDYxLjYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjEuNiAwYy0yMi44IDAtNDMuOC0xMi4xLTU1LjMtMzEuOGwtMTAtMTcuMS0yMC43IDcwLjQgNzUuNCAyMi42YzI3LjcgOC4zIDQxLjggMzkgMzAuMSA2NS41TDI4NS43IDUwOWMtNy4yIDE2LjItMjYuMSAyMy40LTQyLjIgMTYuMnMtMjMuNC0yNi4xLTE2LjItNDIuMmw0OS4yLTExMC44LTk1LjktMjguOGMtMzIuNy05LjgtNTItNDMuNy00My43LTc2LjhsMjIuNy05MC42LTM1LjkgMHptLTggMTgxYzEzLjMgMTQuOSAzMC43IDI2LjMgNTEuMiAzMi40bDQuNyAxLjQtNi45IDE5LjNjLTUuOCAxNi4zLTE2IDMwLjgtMjkuMyA0MS44TDUyLjkgNTE5LjhjLTEzLjYgMTEuMi0zMy44IDkuMy00NS00LjNzLTkuMy0zMy44IDQuMy00NWw4Mi40LTY3LjljNC41LTMuNyA3LjgtOC41IDkuOC0xMy45TDExNS42IDM1N3oiXQogICAgfTsKICAgIGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZzsKICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS1kb3duIl0sICJmMTNhIiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTEzNSAyNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4NyA4NyA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMjczIDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTM1IDI0MXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZURvd24gPSBmYUNpcmNsZUNoZXZyb25Eb3duOwogICAgZmFVc2VyTnVyc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1udXJzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODJmIiwgIk05NiA0NC45YzAtMTIuNyA3LjUtMjQuMiAxOS4yLTI5LjNsOTYtNDJjOC4yLTMuNiAxNy41LTMuNiAyNS43IDBsOTYgNDJDMzQ0LjUgMjAuNyAzNTIgMzIuMiAzNTIgNDQuOWwwIDk5LjFjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhTOTYgMjE0LjcgOTYgMTQ0bDAtOTkuMXpNMzA0IDEyOGwtMTExLjYgMC0uNCAwLTQ4IDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwbDAtMTZ6TTIwOCAxNmwwIDE2LTE2IDBjLTQuNCAwLTggMy42LTggOGwwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwIDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTYgMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDAgMC0xNmMwLTQuNC0zLjYtOC04LThMMjE2IDhjLTQuNCAwLTggMy42LTggOHpNMTQyLjYgMzIzYy02LjUtNC45LTE1LjItNi4yLTIyLjYtMi44LTYxLjQgMjguMi0xMDQuMSA5MC4yLTEwNC4xIDE2Mi4xIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC03Mi00Mi43LTEzNC0xMDQuMS0xNjIuMS03LjQtMy40LTE2LjEtMi4xLTIyLjYgMi44bC02NyA1MC4yYy04LjUgNi40LTIwLjMgNi40LTI4LjggMGwtNjctNTAuMnoiXQogICAgfTsKICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy13aW5rLWhlYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTM2LCAia2lzcy13aW5rLWhlYXJ0Il0sICJmNTk4IiwgIk01NDMuNyAyNjguM2MuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNy42LTE3LjEtMTYuMS0zOC44LTIxLjgtNjEuNy03LjctMzAuNS0xNC4xLTc2LjIgOC4yLTExNC43bDIuNy00LjZjMjkuNS01MSA5NC43LTY4LjUgMTQ1LjctMzkgMiAxLjIgNCAyLjQgNS45IDMuN3pNMjQwIDMwNGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMDggMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTUyIDIwYy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdCiAgICB9OwogICAgZmFLaXNzV2lua0hlYXJ0MiA9IGZhRmFjZUtpc3NXaW5rSGVhcnQyOwogICAgZmFGaWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU3NSIsICJNMjk2IDY0YzYuOSAwIDEzLjUgMi43IDE4LjMgNy42TDQ0MC40IDE5Ny43YzQuOSA0LjkgNy42IDExLjUgNy42IDE4LjNzLTIuNyAxMy41LTcuNiAxOC4zTDM4Ni43IDI4OCA2NS4zIDI4OGMxLjMtMy45IDMuNC03LjQgNi4zLTEwLjNsOTYuNC05Ni40IDMzLjQgMzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNiAyNzcuNyA3MS42YzQuOS00LjkgMTEuNS03LjYgMTguMy03LjZ6TTEyMi43IDEzNkwyNi4zIDIzMi40QzkuNSAyNDkuMyAwIDI3Mi4xIDAgMjk2czkuNSA0Ni43IDI2LjMgNjMuNkwxNTIuNCA0ODUuN0MxNjkuMyA1MDIuNSAxOTIuMSA1MTIgMjE2IDUxMnM0Ni43LTkuNSA2My42LTI2LjNMNDg1LjcgMjc5LjZDNTAyLjUgMjYyLjcgNTEyIDIzOS45IDUxMiAyMTZzLTkuNS00Ni43LTI2LjMtNjMuNkwzNTkuNiAyNi4zQzM0Mi43IDkuNSAzMTkuOSAwIDI5NiAwcy00Ni43IDkuNS02My42IDI2LjNMMTY4IDkwLjcgMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2eiJdCiAgICB9OwogICAgZmFNb25leUJpbGwxV2F2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEtd2F2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1iaWxsLXdhdmUtYWx0Il0sICJmNTNiIiwgIk0wIDEwOS41TDAgNDE5LjZjMCAxOS40IDExLjggMzcuMyAzMC4zIDQzLjMgOTQgMzAgMTU4LjggOC40IDIyMy4zLTEzLjEgNjIuNC0yMC44IDEyNC40LTQxLjUgMjEyLjEtMTUuMyAyMi4yIDYuNiA0Ni4yLTguOCA0Ni4yLTMybDAtMzEwLjFjMC0xOS40LTExLjgtMzcuMy0zMC4zLTQzLjMtOTQtMzAtMTU4LjgtOC40LTIyMy4zIDEzLjEtNjIuNCAyMC44LTEyNC40IDQxLjUtMjEyLjEgMTUuMy0yMi4yLTYuNi00Ni4zIDguOC00Ni4zIDMyek0yNTYgMzY4Yy01MyAwLTk2LTUwLjEtOTYtMTEyczQzLTExMiA5Ni0xMTIgOTYgNTAuMSA5NiAxMTItNDMgMTEyLTk2IDExMnpNMTI3LjEgNDA1LjVjLjcgNC40LTIuOCA4LjEtNy4yIDguMS0xNS43IDAtMzIuMS0xLjgtNTAtNi4xLTMuNS0uOC02LTQtNi03LjdMNjQgMzYwYzAtNC40IDMuNi04LjEgOC03LjUgMjguMSAzLjUgNTAuNiAyNS4yIDU1LjIgNTN6TTQ0OCAzNTQuNmMwIDUtNC42IDguOC05LjUgOC0xNS40LTIuNS0zMC4yLTMuOS00NC40LTQuMy00LjktLjEtOC43LTQuNS03LjItOS4yIDcuMy0yMy43IDI4LTQxLjQgNTMuMi00NC42IDQuNC0uNSA4IDMuMSA4IDcuNWwwIDQyLjZ6bS04LTE5NS4xYy0yOC4xLTMuNS01MC42LTI1LjItNTUuMi01My0uNy00LjQgMi44LTguMSA3LjItOC4xIDE1LjcgMCAzMi4xIDEuOCA1MCA2LjEgMy41IC44IDYgNCA2IDcuN2wwIDM5LjljMCA0LjQtMy42IDguMS04IDcuNXptLTMyMi4xLTUuOGM0LjkgLjEgOC43IDQuNSA3LjIgOS4yLTcuMyAyMy43LTI4IDQxLjQtNTMuMiA0NC42LTQuNCAuNS04LTMuMS04LTcuNWwwLTQyLjZjMC01IDQuNi04LjggOS41LTggMTUuNCAyLjUgMzAuMiAzLjkgNDQuNCA0LjN6TTI0MCAxODhjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNDguNC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDQ4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDB6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmVBbHQgPSBmYU1vbmV5QmlsbDFXYXZlOwogICAgZmFMYW5kbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2M10sICJmNjZmIiwgIk0yMzguNyA1LjFjMTAuNS02LjggMjQuMS02LjggMzQuNiAwbDIyNCAxNDRjMTEuOSA3LjcgMTcuNCAyMi4zIDEzLjQgMzUuOXMtMTYuNSAyMy0zMC43IDIzbC0zMiAwIDAgMjA4IDUxLjIgMzguNGM4LjEgNiAxMi44IDE1LjUgMTIuOCAyNS42IDAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNmw1MS4yLTM4LjQgMCAwIDAtMjA4LTMyIDBjLTE0LjIgMC0yNi43LTkuNC0zMC43LTIzczEuNS0yOC4zIDEzLjQtMzUuOWwyMjQtMTQ0ek0zMzYgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHpNMjI0IDQxNmw2NCAwIDAtMjA4LTY0IDAgMCAyMDh6TTExMiAyMDhsMCAyMDggNjQgMCAwLTIwOC02NCAweiJdCiAgICB9OwogICAgZmFNdXNpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdXNpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkyNV0sICJmMDAxIiwgIk00NjggN2M3LjYgNi4xIDEyIDE1LjMgMTIgMjVsMCAzMDRjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42bDAtMTE2LjctMjI0IDQ5LjggMCAyMDYuM2MwIDQ0LjItNDMgODAtOTYgODBzLTk2LTM1LjgtOTYtODAgNDMtODAgOTYtODBjMTEuMiAwIDIyIDEuNiAzMiA0LjZMMTI4IDk2YzAtMTUgMTAuNC0yOCAyNS4xLTMxLjJsMjg4LTY0YzkuNS0yLjEgMTkuNCAuMiAyNyA2LjN6Il0KICAgIH07CiAgICBmYUJvb2tNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stbWVkaWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2U2IiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhU2h1ZmZsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHVmZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU2LCAicmFuZG9tIl0sICJmMDc0IiwgIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAyMDQuOSAzODQgMTkybDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOGwtMzIuNCA0My4yLTQwLTUzLjMgMjEuMi0yOC4zQzI5My4zIDExMC4yIDMyMS44IDk2IDM1MiA5NmwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTU0IDI5Nmw0MCA1My4zLTIxLjIgMjguM0MxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOEwxNTQgMjk2ek00MzguNiA0NzAuNmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzg0IDQ2MC45IDM4NCA0NDhsMC0zMi0zMiAwYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6Il0KICAgIH07CiAgICBmYVJhbmRvbSA9IGZhU2h1ZmZsZTsKICAgIGZhVW5kZXJsaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVuZGVybGluZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGNkIiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyUzExMy43IDY0IDk2IDY0bDAgMTYwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzI3MC4zIDAgMjg4IDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMzMiAzMTIuNCAzMiAyMjRMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMCA0ODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYSIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0zMzkgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTI0MCA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTM1MiA1MTJjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhUm9ib3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9ib3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDJdLCAiZjU0NCIsICJNMzUyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMjg4LTE3LjcgMjg4IDBsMCA2NC05NiAwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIyNGMwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAtNjR6TTE2MCAzNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTEyMCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjI0IDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTE0NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek02NCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCAyMDYuMyAwIDIyNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NnptNTQ0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAxMzMsIDYxNTQzLCAiYWRkIl0sICIyYiIsICJNMjU2IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTYweiJdCiAgICB9OwogICAgZmFBZGQgPSBmYVBsdXM7CiAgICBmYUNvcHkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjNSIsICJNMTkyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjAwLjZjMC0xNy40LTcuMS0zNC4xLTE5LjctNDYuMkwzNzAuNiAxNy44QzM1OC43IDYuNCAzNDIuOCAwIDMyNi4zIDBMMTkyIDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi02NCAwIDAgMTYtMTkyIDAgMC0yNTYgMTYgMCAwLTY0LTE2IDB6Il0KICAgIH07CiAgICBmYUNoZXNzS2luZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCAiZjQzZiIsICJNMjI0LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0IDE1My44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzUyIDM4NCA0MDguMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw2Ny41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMOTYgMzg0IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTUzLjggMCAwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFIb3VzZUZsb29kV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmxvb2Qtd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZSIsICJNNDk2IDIwOGw0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0wzNDggMTAuNUMzNDAuMyAzLjcgMzMwLjMgMCAzMjAgMHMtMjAuMyAzLjctMjggMTAuNUwxMjEuNCAxNTkuOGMtNiA1LjItOS40IDEyLjgtOS40IDIwLjcgMCAxNS4yIDEyLjMgMjcuNSAyNy41IDI3LjVsNC41IDAgMCA5NC40YzIwLjMtOS40IDQyLjEtMTQuMiA2NC0xNC40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAxNi45LS4xIDMzLjggMi42IDUwIDhsMC04OHptLTIyNC04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc0LjYgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0MTguMyAxNy42IDQyNi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA1MTQuMyAxNy42IDUyMi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQml0Y29pblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYml0Y29pbi1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwYjQiLCAiTTY0IDI0QzY0IDEwLjcgNzQuNyAwIDg4IDBzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDEuMWM1NC4zIDcuOCA5NiA1NC40IDk2IDExMC45IDAgMjQuMi03LjcgNDYuNi0yMC43IDY0LjkgMzEuNyAxOS44IDUyLjcgNTUgNTIuNyA5NS4xIDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0xNiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0zMiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0yMi4zIDBDMTguNyA0NDggMCA0MjkuMyAwIDQwNi4zTDAgMTAxLjZDMCA4MC44IDE2LjggNjQgMzcuNiA2NEw2NCA2NCA2NCAyNHptMCAyMDBsMTEyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTExMiAwIDAgOTZ6bTExMiA2NGwtMTEyIDAgMCA5NiAxNDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtMzIgMHoiXQogICAgfTsKICAgIGZhQm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIzMF0sICJmNDY2IiwgIk0zNjkuNCAxMjhsLTM0LjMtNDgtMjIyLjEgMC0zNC4zIDQ4IDI5MC43IDB6TTAgMTQ4LjVjMC0xMy4zIDQuMi0yNi4zIDExLjktMzcuMkw2MC45IDQyLjhDNzIuOSAyNiA5Mi4zIDE2IDExMi45IDE2bDIyMi4xIDBjMjAuNyAwIDQwLjEgMTAgNTIuMSAyNi44bDQ4LjkgNjguNWM3LjggMTAuOSAxMS45IDIzLjkgMTEuOSAzNy4yTDQ0OCA0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE0OC41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQbHVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxODQ2LCAicGx1cy1zcXVhcmUiXSwgImYwZmUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVzU3F1YXJlMiA9IGZhU3F1YXJlUGx1czI7CiAgICBmYUFycm93c0xlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvd3MtaCJdLCAiZjA3ZSIsICJNNDcwLjYgMzc0LjZsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w0MS40IDQxLjQtMzU3LjUgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNDEuNC00MS40IDM1Ny41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBcnJvd3NIID0gZmFBcnJvd3NMZWZ0UmlnaHQ7CiAgICBmYUZhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjg2MyIsICJNMTYwIDE0NGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxNTIuMmMxNS01LjMgMzEuMi04LjIgNDgtOC4yIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgOC44LTcuMiAxNi0xNiAxNmwtMTUyLjIgMGM1LjMgMTUgOC4yIDMxLjIgOC4yIDQ4IDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0LTguOCAwLTE2LTcuMi0xNi0xNmwwLTE1Mi4yYy0xNSA1LjMtMzEuMiA4LjItNDggOC4yLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtOC44IDcuMi0xNiAxNi0xNmwxNTIuMiAwYy01LjMtMTUtOC4yLTMxLjItOC4yLTQ4em05NiAxNDRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDcm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUyMCIsICJNNDU2LjUgMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzNi0zNTUuMiAyNjYuNEMtLjggNDAxLTMuNyA0MjEgNi45IDQzNS4yczMwLjYgMTcgNDQuOCA2LjRsNzYuOC01Ny42IDEzMS4zIDAgNDYuNiAxMTMuMSAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtMzkuMS05NC45IDQwLjkgMGMxLjEgMCAyLjIgMCAzLjIgMGw0Ni42IDExMy4yIDEgMi4yYzUuNyAxMC43IDE4LjggMTUuNSAzMC4zIDEwLjhzMTcuMy0xNy4zIDEzLjktMjlsLS44LTIuMy00Mi0xMDJDNDg1LjMgMzU0LjEgNTQ0LjUgMjgwIDU0NC41IDE5MmwwLTcyIDgwLjUtMjAuMWM4LjYtMi4xIDEzLjgtMTAuOCAxMS42LTE5LjQtNy4xLTI4LjUtMzIuNy00OC41LTYyLjEtNDguNWwtNTAuMSAwQzUwOC4yIDEyLjUgNDgzLjggMCA0NTYuNSAwem0wIDY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1YTAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUxpbmtTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImNoYWluLWJyb2tlbiIsICJjaGFpbi1zbGFzaCIsICJ1bmxpbmsiXSwgImYxMjciLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTEyMi0xMjJjNC4yLTMuNCA4LjMtNy4xIDEyLjEtMTAuOWw3MS4xLTcxLjFjMjkuMy0yOS4zIDQ1LjgtNjkuMSA0NS44LTExMC42IDAtODYuNC03MC0xNTYuNS0xNTYuNS0xNTYuNS0zNy4zIDAtNzMuMSAxMy4zLTEwMS4zIDM3LjIgMjAuMyAxMC4xIDM4LjcgMjMuNSA1NC41IDM5LjUgMTQuMS04LjMgMzAuMi0xMi43IDQ2LjgtMTIuNyA1MS4xIDAgOTIuNSA0MS40IDkyLjUgOTIuNSAwIDI0LjUtOS43IDQ4LTI3LjEgNjUuNGwtNzEuMSA3MS4xYy0zLjkgMy45LTguMSA3LjQtMTIuNiAxMC41bC00Ny41LTQ3LjVjMTYuNS0uOSAyOS43LTE0LjQgMzAuMi0zMS4xIDAtMS4zIDAtMi42IDAtMy45IDAtODYuMy02OS45LTE1Ni45LTE1Ni41LTE1Ni45LTE5LjIgMC0zNy45IDMuNS01NS41IDEwLjJMNDEtMjQuOXpNMjI1LjkgMTYwYy42IDAgMS4xIDAgMS43IDAgMTUuMSAwIDI5LjUgMy43IDQyLjEgMTAuMiAxLjggMS4yIDMuNiAyLjMgNS41IDMuMSAyNi44IDE2LjMgNDQuOCA0NS45IDQ0LjggNzkuNiAwIC40IDAgLjggMCAxLjJMMjI1LjkgMTYwek0zNDYuMiA0MTZMMTkyIDI2MS44YzEuMiA4NC42IDY5LjYgMTUyLjkgMTU0LjEgMTU0LjF6TTEzOS43IDIwOS41bC00NS4zLTQ1LjMtNDguNiA0OC42Yy0yOS4zIDI5LjMtNDUuOCA2OS4xLTQ1LjggMTEwLjYgMCA4Ni40IDcwIDE1Ni41IDE1Ni41IDE1Ni41IDM3LjIgMCA3My4xLTEzLjMgMTAxLjMtMzcuMi0yMC4zLTEwLjEtMzguOC0yMy41LTU0LjYtMzkuNS0xNCA4LjItMzAuMSAxMi42LTQ2LjcgMTIuNi01MS4xIDAtOTIuNS00MS40LTkyLjUtOTIuNSAwLTI0LjUgOS43LTQ4IDI3LjEtNjUuNGw0OC42LTQ4LjZ6Il0KICAgIH07CiAgICBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7CiAgICBmYUNoYWluU2xhc2ggPSBmYUxpbmtTbGFzaDsKICAgIGZhVW5saW5rID0gZmFMaW5rU2xhc2g7CiAgICBmYUFycm93Um90YXRlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcm90YXRlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNSwgImFycm93LXJpZ2h0LXJvdGF0ZSIsICJhcnJvdy1yb3RhdGUtZm9yd2FyZCIsICJyZWRvIl0sICJmMDFlIiwgIk00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3oiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFSZWRvID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFQZW5DbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1jbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlbi1hbHQiXSwgImYzMDUiLCAiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek0yNzQuMSAxMDBsMCAwIDEzNy45IDEzNy45LTIxNS4xIDIxNS4xYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMS4xYy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMnMtOC41LTE1LjEtNi4yLTIzLjRMMzYuNCAzNTMuOGM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43TDI0MC4xIDEzMy45IDIyMyAxMTYuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMODkgMjE3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE1NS4xIDgyLjljMjguMS0yOC4xIDczLjctMjguMSAxMDEuOCAwTDI3NC4xIDEwMHoiXQogICAgfTsKICAgIGZhUGVuQWx0ID0gZmFQZW5DbGlwOwogICAgZmFEb29yQ2xvc2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvb3ItY2xvc2VkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NjgyXSwgImY1MmEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDY0ek0zMjAgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duV2lkZVNob3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24td2lkZS1zaG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC1hc2MiLCAic29ydC1hbW91bnQtZG93biJdLCAiZjE2MCIsICJNMjQ2LjYgMzc0LjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIwIDk2eiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50QXNjID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYVNvcnRBbW91bnREb3duID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYUNhcmV0RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1kb3duIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwZDciLCAiTTE0MC4zIDM3Ni44YzEyLjYgMTAuMiAzMS4xIDkuNSA0Mi44LTIuMmwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMS40IDE5MiAyODguNSAxOTJsLTI1NiAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy43IDIzNy41IDkuOSAyNDYuNmwxMjggMTI4IDIuNCAyLjJ6Il0KICAgIH07CiAgICBmYUsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiayIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwN10sICI0YiIsICJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43QzE0My40IDE2Ny4yIDc2LjQgMjM2LjMgNjQgMjQ5TDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMDcgNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3oiXQogICAgfTsKICAgIGZhQ2hlY2tUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stdG8tc2xvdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2b3RlLXllYSJdLCAiZjc3MiIsICJNNTUyIDI4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDE2IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjU2IDB6bS0zNy4xIDg0LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zbC04NS42IDExNy43LTI2LjUtMjcuNGMtOS4yLTkuNS0yNC40LTkuOC0zMy45LS42LTkuNSA5LjItOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMzg0LjIgMTUwLjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYVZvdGVZZWEgPSBmYUNoZWNrVG9TbG90OwogICAgZmFGaXNoRmlucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXNoLWZpbnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmMiIsICJNMjc1LjIgMzguNGMtMTAuNi04LTI1LTguNS0zNi4zLTEuNVMyMjIgNTcuMyAyMjQuNiA3MC4zbDkuNyA0OC42Yy0xOS40IDktMzYuOSAxOS45LTUyLjQgMzEuNS0xNS4zIDExLjUtMjkgMjMuOS00MC43IDM2LjNMNDguMSAxMzIuNGMtMTIuNS03LjMtMjguNC01LjMtMzguNyA0LjlzLTEyLjQgMjYtNS4zIDM4LjZMNTAgMjU2IDQuMiAzMzYuMWMtNy4yIDEyLjYtNSAyOC40IDUuMyAzOC42czI2LjEgMTIuMiAzOC43IDQuOWw5My4xLTU0LjNjMTEuOCAxMi4zIDI1LjQgMjQuOCA0MC43IDM2LjMgMTUuNSAxMS42IDMzIDIyLjUgNTIuNCAzMS41bC05LjcgNDguNmMtMi42IDEzIDMuMSAyNi4zIDE0LjMgMzMuM3MyNS42IDYuNSAzNi4zLTEuNWw3Ny42LTU4LjJjNTQuOS00IDEwMS41LTI3IDEzNy4yLTUzLjggMzkuMi0yOS40IDY3LjItNjQuNyA4MS42LTg5LjUgNS44LTkuOSA1LjgtMjIuMiAwLTMyLjEtMTQuNC0yNC44LTQyLjUtNjAuMS04MS42LTg5LjUtMzUuOC0yNi44LTgyLjMtNDkuOC0xMzcuMi01My44TDI3NS4yIDM4LjR6TTM4NCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ29tcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcHJlc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA2NiIsICJNMTYwIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dVcEFaID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLXVwIl0sICJmMTVlIiwgIk00MTIuNiA0OS43QzQwNy4yIDM4LjggMzk2LjEgMzIgMzg0IDMycy0yMy4yIDYuOC0yOC42IDE3LjdjLTUwLjcgMTAxLjMtNzcuMyAxNTQuNy04MCAxNjAtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjljLTIuNy01LjMtMjkuMy01OC43LTgwLTE2MHpNMzg0IDEzNS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40ek0yODggMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDUwLjcgMC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzMwNy4xIDQ4MCAzMjAgNDgwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MC43IDAgNzMuNC03My40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ2MC45IDI4OCA0NDggMjg4bC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDI1LjQgMjUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC04MC04MHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhVXAgPSBmYUFycm93VXBBWjsKICAgIGZhVXNlckdyYWR1YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItZ3JhZHVhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUwMSIsICJNMjQxLjMtMTNjLTExLjQtMi4zLTIzLjEtMi4zLTM0LjUgMEwxOS4zIDI0LjVDOC4xIDI2LjcgMCAzNi42IDAgNDggMCA1OC4zIDYuNSA2Ny4zIDE2IDcwLjZMMTYgMTQ0IC4zIDIyMi42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjZsMzQuOSAwYzggMCAxNC42LTYuNSAxNC42LTE0LjYgMC0xLS4xLTEuOS0uMy0yLjlMNDggMTQ0IDQ4IDc3LjMgOTYgODYuOSA5NiAxNDRjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOGwwLTU3LjEgNzYuNy0xNS4zQzQzOS45IDY5LjMgNDQ4IDU5LjQgNDQ4IDQ4cy04LjEtMjEuMy0xOS4zLTIzLjVMMjQxLjMtMTN6TTIyNCAyMjRjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDE2MCAwYzAgNDQuMi0zNS44IDgwLTgwIDgwek0xMjAuMSAzMjAuMUM1OC43IDM0OC4zIDE2IDQxMC4zIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDE1NC4zIDAgMC0xNDYtNTcuNC00M2MtNi41LTQuOS0xNS4yLTYuMi0yMi42LTIuOHpNMjQ4IDUxMmwxNTQuMyAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtNzItNDIuNy0xMzQtMTA0LjEtMTYyLjEtNy40LTMuNC0xNi4xLTIuMS0yMi42IDIuOGwtNTcuNCA0MyAwIDE0NnoiXQogICAgfTsKICAgIGZhRmlsZUNvZGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29kZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM5IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTU0LjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTExMi0zMS4yYy04LjYtMTAuMS0yMy44LTExLjItMzMuOC0yLjZzLTExLjIgMjMuOC0yLjYgMzMuOGwzNC42IDQwLjQtMzQuNiA0MC40Yy04LjYgMTAuMS03LjUgMjUuMiAyLjYgMzMuOHMyNS4yIDcuNSAzMy44LTIuNmw0OC01NmM3LjctOSA3LjctMjIuMiAwLTMxLjJsLTQ4LTU2eiJdCiAgICB9OwogICAgZmFTb2FwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCAiZTA2ZSIsICJNMjA4LTMyYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMzIwIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0zNTIgMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAxNjBsMTEyIDBjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMMTYwIDIyNGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmwxOTIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMzUuMS0xOC45LTY1LjktNDctODIuNiAxOS0xOS44IDMwLjctNDYuNiAzMS03Ni4xIDQ1LjQgNy42IDgwIDQ3LjEgODAgOTQuN2wwIDEyOGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ4MGMtNTMgMC05Ni00My05Ni05NkwwIDI1NmMwLTUzIDQzLTk2IDk2LTk2em02NCAxMTJsMTkyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFSZWN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY3ljbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODQyLCA5ODUwLCA5ODUxXSwgImYxYjgiLCAiTTE1Mi4zIDYwQzE5OC41LTIwIDMxNC0yMCAzNjAuMiA2MGwzNy4zIDY0LjYgMjcuNy0xNmM4LjQtNC45IDE4LjktNC4yIDI2LjYgMS43czExLjEgMTUuOSA4LjYgMjUuM0w0MzYuOSAyMjNjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI3LjctMTYtMzcuMy02NC42Yy0yMS42LTM3LjMtNzUuNC0zNy4zLTk3IDBsLTUuMyA5LjFjLTguOCAxNS4zLTI4LjQgMjAuNS00My43IDExLjdTMTM4LjIgODQuNSAxNDcgNjkuMWw1LjMtOS4xek00NDkuNyAyNzkuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsNS4zIDkuMWM0Ni4yIDgwLTExLjUgMTgwLTEwMy45IDE4MGwtNzQuNiAwIDAgMzJjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDY0LTY0YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMmwwIDMyIDc0LjYgMGM0My4xIDAgNzAuMS00Ni43IDQ4LjUtODRsLTUuMy05LjFjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN3pNNTEgMjM1LjRsLTI3LjctMTZjLTguNC00LjktMTMuMS0xNC4zLTExLjgtMjMuOXM4LjItMTcuNSAxNy42LTIwTDExNi41IDE1MmMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN2wyMy40IDg3LjRjMi41IDkuNC0uOSAxOS4zLTguNiAyNS4zcy0xOC4yIDYuNi0yNi42IDEuN2wtMjcuNy0xNi0zNy4zIDY0LjZjLTIxLjYgMzcuMyA1LjQgODQgNDguNSA4NGwxMC42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjYgMEMyNS4zIDQ4MC0zMi40IDM4MCAxMy44IDMwMEw1MSAyMzUuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJncmluLXdpbmsiXSwgImY1OGMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMzI4IDE5NmMtMTEgMC0yMCA5LTIwIDIwcy05IDIwLTIwIDIwLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMHpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW5XaW5rMiA9IGZhRmFjZUdyaW5XaW5rMjsKICAgIGZhV2F0ZXJMYWRkZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2F0ZXItbGFkZGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImxhZGRlci13YXRlciIsICJzd2ltbWluZy1wb29sIl0sICJmNWM1IiwgIk0zNzQuNSA0MDUuN2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOCAyNS43LTQuOCAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTI0LjIgMTguMy01Mi4zIDM1LjktODMuNCAzNS45cy01OS4xLTE3LjctODMuMy0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC42LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjN6TTUxMS44IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOC0xNy41IDAtMzEuOCAxNC4yLTMxLjggMzEuOGwwIDIxMS44Yy0yMy4xLTUuMS00NC45LTQuNC02NC0uNGwwLTUxLjItMTkyIDAgMCA0OC43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0xNi4yIC4xLTMyLjQgMi43LTQ4IDhsMC0yMTYuMmMwLTUyLjkgNDIuOS05NS44IDk1LjctOTUuOCA0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjhsMCA5Ni4yIDE5MiAwIDAtOTYuMkM0MTYgNzQuOSA0NTguOSAzMiA1MTEuOCAzMnoiXQogICAgfTsKICAgIGZhTGFkZGVyV2F0ZXIgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFTd2ltbWluZ1Bvb2wgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFHZW1pbmkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VtaW5pIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU4NDkiLCAiTTM5NS40IDhjMTMuMi0xMS43IDMzLjMtMTAuNSA0NS4xIDIuNyAxMS43IDEzLjIgMTAuNSAzMy40LTIuNyA0NS4yLTIuNyAyLjQtMjMuMSAxOS44LTU4LjMgMzYuOC04LjIgNC0xNy4yIDcuOS0yNyAxMS42bDAgMzAzLjJjOS44IDMuOCAxOC44IDcuNiAyNyAxMS42IDE4LjIgOC44IDMyLjQgMTcuNyA0Mi4yIDI0LjUgMyAyLjEgNS41IDQuMSA3LjcgNS43IDEuMiAuOSAyLjMgMS42IDMuMiAyLjQgLjIgLjEgLjMgLjIgLjUgLjQgMS4zIDEuMSAyLjQgMiAzLjIgMi42IC40IC4zIC43IC42IC45IC44IC4xIC4xIC4zIC4yIC4zIC4zIDAgMCAuMSAuMSAuMSAuMWwuMSAwIDAgMCAwIDBjMy4zIDIuOSA1LjkgNi40IDcuNyAxMC4yIDUuNCAxMS4zIDMuOCAyNS4xLTUgMzUtLjMgLjQtLjcgLjctMS4xIDEuMS0xMS45IDEyLjItMzEuMiAxMy4xLTQ0IDEuNy0uMy0uMy0xLjUtMS4zLTMuNS0yLjgtLjQtLjMtLjktLjctMS41LTEuMS0xLjktMS40LTQuMi0zLjEtNy4xLTUuMS0yLjItMS41LTQuNy0zLjEtNy40LTQuOC02LjYtNC4xLTE0LjgtOC44LTI0LjQtMTMuNS03LjQtMy42LTE1LjYtNy4yLTI0LjctMTAuNS0xMy42LTUuMS0yOS05LjYtNDYuMS0xMi45LTUuNy0xLjEtMTEuNi0yLjEtMTcuNy0yLjgtMTIuMS0xLjYtMjUtMi41LTM4LjYtMi41LTU0LjIgMC05Ny40IDE0LjQtMTI3IDI4LjgtMy40IDEuNi02LjUgMy4zLTkuNSA0LjktNS4xIDIuOC05LjcgNS40LTEzLjggNy45LTMuMyAyLjEtNi4zIDQtOC45IDUuNy0xLjcgMS4yLTMuMiAyLjMtNC42IDMuMy0xLjkgMS40LTMuNSAyLjUtNC42IDMuNC0xLjQgMS4xLTIuMiAxLjgtMi41IDItMTMuMiAxMS43LTMzLjMgMTAuNS00NS4xLTIuOC0yLjItMi41LTQtNS4yLTUuMi04LjFzLTIuMS01LjktMi41LTguOWMtMS40LTEwLjIgMi4yLTIwLjggMTAuNC0yOC4yIC4yLS4yIC42LS41IDEuMi0xIC4xLS4xIC4yLS4yIC4zLS4zbDMuMi0yLjZjMS43LTEuMyAzLjctMi44IDYuMi00LjYgMS42LTEuMiAzLjMtMi41IDUuMi0zLjggOS44LTYuOCAyNC0xNS43IDQyLjItMjQuNSA4LjItNCAxNy4yLTcuOSAyNy0xMS42bDAtMzAzLjJDODYuNyAxMDAuNiA3Ny43IDk2LjcgNjkuNSA5Mi44IDM0LjMgNzUuNyAxNCA1OC4zIDExLjMgNTUuOS0xLjkgNDQuMi0zLjEgMjQgOC42IDEwLjcgMjAuMy0yLjUgNDAuNS0zLjcgNTMuNyA4IDU1LjEgOS4yIDcwLjcgMjIuMiA5Ny41IDM1LjIgMTI3LjEgNDkuNiAxNzAuMyA2NCAyMjQuNSA2NHM5Ny40LTE0LjQgMTI3LTI4LjhjMjYuOC0xMyA0Mi40LTI2IDQzLjgtMjcuMnpNMjg4LjUgMTIyLjNjLTE5LjcgMy41LTQxIDUuNy02NCA1LjdzLTQ0LjMtMi4yLTY0LTUuN2wwIDI2Ny40YzEyLjYtMi4zIDI1LjktNCAzOS45LTQuOSA3LjgtLjUgMTUuOC0uOCAyNC0uOCAyMyAwIDQ0LjQgMi4yIDY0IDUuN2wwLTI2Ny40eiJdCiAgICB9OwogICAgZmFUb3dlckNlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItY2VsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTg1IiwgIk01OS42IDkuOEM0Ny4zIDQuOCAzMy4zIDEwLjcgMjguNCAyMyAxNS4yIDU1LjUgOCA5MC45IDggMTI4czcuMiA3Mi41IDIwLjQgMTA1YzUgMTIuMyAxOSAxOC4yIDMxLjMgMTMuMnMxOC4yLTE5IDEzLjItMzEuM0M2MiAxODguMiA1NiAxNTguOCA1NiAxMjhzNi02MC4yIDE2LjktODdjNS0xMi4zLTEtMjYuMy0xMy4yLTMxLjN6bTQ1Ni44IDBjLTEyLjMgNS0xOC4yIDE5LTEzLjIgMzEuMyAxMC45IDI2LjggMTYuOSA1Ni4yIDE2LjkgODdzLTYgNjAuMi0xNi45IDg3Yy01IDEyLjMgMSAyNi4zIDEzLjIgMzEuM3MyNi4zLTEgMzEuMy0xMy4yYzEzLjEtMzIuNSAyMC40LTY3LjkgMjAuNC0xMDVzLTcuMi03Mi41LTIwLjQtMTA1Yy01LTEyLjMtMTktMTguMi0zMS4zLTEzLjJ6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjIgMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOWwyMC42LTQ1LjIgMjIwLjYgMCAyMC42IDQ1LjJjNy4zIDE2LjEgMjYuMyAyMy4yIDQyLjQgMTUuOXMyMy4yLTI2LjMgMTUuOS00Mi40TDM0MC4xIDE2NS4yek0zNzYuNSA0MDBsLTE3NyAwIDIxLjgtNDggMTMzLjMgMCAyMS44IDQ4ek0yODggMjA1LjNsNDQuOCA5OC43LTg5LjcgMCA0NC44LTk4Ljd6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6Il0KICAgIH07CiAgICBmYUNvbG9uU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2xvbi1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxNDAiLCAiTTIxMy44IDguN2MxMi45IDMuMiAyMC43IDE2LjIgMTcuNSAyOS4xbC00LjYgMTguNWMxNS40IC44IDMwLjQgMy40IDQ0LjcgNy41bDkuNC0zNy42QzI4My45IDEzLjMgMjk3IDUuNSAzMDkuOCA4LjdTMzMwLjUgMjUgMzI3LjMgMzcuOEwzMTYgODIuOGMxMy41IDcuOCAyNiAxNy4xIDM3LjIgMjcuOCAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTMuMS0yLjktNi40LTUuOC05LjgtOC40TDIzOS4yIDM5MGMyNi45LTQuNiA1MS4xLTE3LjEgNzAuMS0zNS4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yYy0zNC4zIDMyLjMtODAgNTIuOC0xMzAuNSA1NC40bC03LjUgMjkuOWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNXMtMjAuNy0xNi4yLTE3LjUtMjkuMWw1LjYtMjIuNWMtMTUtMy4yLTI5LjQtOC00Mi45LTE0LjRsLTEyLjEgNDguNWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNVM2OS41IDQ4NyA3Mi43IDQ3NC4ybDE2LTYzLjlDNDQuMyAzNzMuNiAxNiAzMTguMSAxNiAyNTYgMTYgMTU5LjIgODQuOCA3OC40IDE3Ni4zIDYwbDguNC0zMy44QzE4Ny45IDEzLjMgMjAxIDUuNSAyMTMuOCA4Ljd6TTE1OCAxMzIuOWMtNDYuMSAyMS44LTc4IDY4LjctNzggMTIzLjEgMCAzMC41IDEwIDU4LjYgMjYuOSA4MS4zTDE1OCAxMzIuOXpNMTQ3LjQgMzczLjRjMTMgNy42IDI3LjMgMTMuMSA0Mi41IDE2LjFsNjUuOS0yNjMuNmMtMTIuNi0zLjgtMjUuOS01LjktMzkuOC01LjktMS44IDAtMy41IDAtNS4zIC4xTDE0Ny40IDM3My40eiJdCiAgICB9OwogICAgZmFMYXB0b3BGaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1maWxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWQiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDQxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDgtNjQgMCAwLTQ4LTI4OCAwIDAgMTkyIDExMiAwIDAgOTYtMTYzLjIgMEMzNC40IDM1MiAwIDMxNy42IDAgMjc1LjIgMCAyNjQuNiA4LjYgMjU2IDE5LjIgMjU2TDY0IDI1NiA2NCA2NHpNNTI5LjkgMjU3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNTQ0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjU2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDc2LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xIDIwIDIwIDQ3LjkgNDcuOSA4My45IDgzLjl6TTQxNiAyNzJjMCA4LjggNy4yIDE2IDE2IDE2bDYwLjEgMC03Ni4xLTc2LjEgMCA2MC4xeiJdCiAgICB9OwogICAgZmFCYWhhaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWhhaSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXlrYWwiXSwgImY2NjYiLCAiTTI4OC40LThjMTMuMiAwIDI1IDguMSAyOS44IDIwLjRsMzEuOSA4MiA3Ny4yLTQyLjNjMTEuNi02LjMgMjUuOC00LjkgMzUuOSAzLjVzMTQgMjIuMyA5LjcgMzQuOGwtMjguMiA4My4zIDg2LjMgMTcuMmMxMi45IDIuNiAyMyAxMi44IDI1LjMgMjUuOHMtMy42IDI2LjEtMTQuOSAzMi45bC03NS4yIDQ1LjcgNTUgNjguNmM4LjMgMTAuMyA5LjMgMjQuNiAyLjcgMzZzLTE5LjUgMTcuNi0zMi42IDE1LjZsLTg3LTEzLjMtMiA4OGMtLjMgMTMuMi04LjYgMjQuOC0yMSAyOS40cy0yNi4zIDEtMzUtOWwtNTgtNjYuMS01OCA2Ni4xYy04LjcgOS45LTIyLjYgMTMuNS0zNSA5cy0yMC44LTE2LjItMjEtMjkuNGwtMi04OC04NyAxMy4zYy0xMyAyLTI2LTQuMi0zMi42LTE1LjZzLTUuNS0yNS43IDIuNy0zNmw1NS02OC42LTc1LjItNDUuN2MtMTEuMy02LjgtMTcuMi0xOS45LTE0LjktMzIuOXMxMi4zLTIzLjIgMjUuMy0yNS44bDg2LjMtMTcuMi0yOC4yLTgzLjNjLTQuMi0xMi41LS40LTI2LjMgOS43LTM0LjhzMjQuNC05LjkgMzUuOS0zLjVsNzcuMSA0Mi4zIDMxLjktODJDMjYzLjMgLjEgMjc1LjItOCAyODguNC04em0wIDEyMC4yTDI3MyAxNTEuNmMtMy4zIDguNi0xMC4yIDE1LjMtMTguOSAxOC41cy0xOC4yIDIuNC0yNi4zLTJsLTM3LTIwLjMgMTMuNiA0MGMzIDguNyAyIDE4LjMtMi42IDI2LjNzLTEyLjQgMTMuNi0yMS41IDE1LjRsLTQxLjQgOC4zIDM2LjEgMjEuOWM3LjkgNC44IDEzLjMgMTIuNyAxNC45IDIxLjhzLS44IDE4LjQtNi41IDI1LjZsLTI2LjQgMzMgNDEuOC02LjRjOS4xLTEuNCAxOC40IDEuMiAyNS40IDcuMXMxMS4yIDE0LjYgMTEuNCAyMy44bC45IDQyLjIgMjcuOS0zMS44YzYuMS02LjkgMTQuOC0xMC45IDI0LjEtMTAuOXMxOCA0IDI0LjEgMTAuOWwyNy45IDMxLjggLjktNDIuMmMuMi05LjIgNC40LTE3LjkgMTEuNC0yMy44czE2LjMtOC41IDI1LjQtNy4xbDQxLjggNi40LTI2LjQtMzNjLTUuOC03LjItOC4yLTE2LjUtNi42LTI1LjZzNy0xNyAxNC45LTIxLjhsMzYuMS0yMS45LTQxLjQtOC4zYy05LTEuOC0xNi45LTcuNC0yMS41LTE1LjRzLTUuNS0xNy42LTIuNi0yNi4zbDEzLjYtNDAtMzcgMjAuM2MtOC4xIDQuNC0xNy43IDUuMi0yNi4zIDJzLTE1LjUtOS45LTE4LjktMTguNWwtMTUuMy0zOS40eiJdCiAgICB9OwogICAgZmFIYXlrYWwgPSBmYUJhaGFpOwogICAgZmFNb25leUJpbGwxMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC1hbHQiXSwgImYzZDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0xOTIgODBhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek02NCAxODRsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxNDRjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek00NDAgMTkxLjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTQ0OCAzMjhsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxBbHQyID0gZmFNb25leUJpbGwxMjsKICAgIGZhQ2xvdWRCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWJvbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODUsICJ0aHVuZGVyc3Rvcm0iXSwgImY3NmMiLCAiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMzguNiAwIDEyNC4xLTExMWMxMi4yLTEwLjkgMjgtMTcgNDQuNC0xNyA0NC42IDAgNzYuNSA0MyA2My43IDg1LjdMMzU0LjEgMzIwIDQxNiAzMjBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLS41IDAtMS4xIDAtMS42IDAgMS4xLTUuMiAxLjYtMTAuNSAxLjYtMTYgMC00NC4yLTM1LjgtODAtODAtODAtMjQuMyAwLTQ2LjEgMTAuOS02MC44IDI4LTE4LjctMzUuNy01Ni4xLTYwLTk5LjItNjAtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA3LjEgLjcgMTQuMSAxLjkgMjAuOC0zOC4zIDEyLjYtNjUuOSA0OC43LTY1LjkgOTEuMnpNMTYwLjYgNDAwbDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzYyLjUgMzk2LjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDE0OS41IDM3MS4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdCiAgICB9OwogICAgZmFUaHVuZGVyc3Rvcm0gPSBmYUNsb3VkQm9sdDsKICAgIGZhRXRoZXJuZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXRoZXJuZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc5NiIsICJNMCAyMjRMMCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFIcnl2bmlhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJocnl2bmlhLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4MzcyLCAiaHJ5dm5pYSJdLCAiZjZmMiIsICJNMzM2IDE0OS40QzMzNiA3NyAyNjguNSAyMy41IDE5OCA0MC4xTDkzLjIgNjQuOUM3NiA2OC45IDY1LjQgODYuMiA2OS40IDEwMy40czIxLjMgMjcuOSAzOC41IDIzLjhsMTA0LjgtMjQuN2MzMC4zLTcuMSA1OS4zIDE1LjggNTkuMyA0Ni45IDAgMTcuNi05LjYgMzMuOC0yNSA0Mi4zbC0uNyAuNC0yMjIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMi40IDBjNS41LTEzLjMgOC40LTI3LjggOC40LTQyLjZ6TTM2MCAyNzJMMjQgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzLjMgMGMtNi4xIDEzLjQtOS4zIDI4LjEtOS4zIDQzLjMgMCA2NC4xIDU2LjkgMTEzLjQgMTIwLjQgMTA0LjJsMTM3LjktMTkuOWMxNy41LTIuNSAyOS42LTE4LjcgMjcuMS0zNi4ycy0xOC44LTI5LjYtMzYuMi0yNy4xTDE1OS4yIDQwNC4yYy0yNC45IDMuNi00Ny4yLTE1LjctNDcuMi00MC45IDAtMTUuMSA4LjItMjguOSAyMS40LTM2LjJsMTMtNy4xIDIxMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUhyeXZuaWEgPSBmYUhyeXZuaWFTaWduOwogICAgZmFFeWVTbGFzaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6Il0KICAgIH07CiAgICBmYUNhcnRGbGF0YmVkU3VpdGNhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1mbGF0YmVkLXN1aXRjYXNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImx1Z2dhZ2UtY2FydCJdLCAiZjU5ZCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjcgMGMxLjggNSAyLjcgMTAuNCAyLjcgMTYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC01LjYgMS0xMSAyLjctMTZsLTE5Ny41IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNiAxLjEtMTEuNyAzLjEtMTctMzguMS02LjItNjcuMS0zOS4yLTY3LjEtNzlMNjQgODBjMC04LjgtNy4yLTE2LTE2LTE2TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJ6TTE3NiAxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMCAwLTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2bDY0IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAyNCAzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNDAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNDR6TTM4NCA5NmwwLTI0YzAtNC40LTMuNi04LTgtOGwtNjQgMGMtNC40IDAtOCAzLjYtOCA4bDAgMjQgODAgMHoiXQogICAgfTsKICAgIGZhTHVnZ2FnZUNhcnQgPSBmYUNhcnRGbGF0YmVkU3VpdGNhc2U7CiAgICBmYVJhZGlhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYWRpYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjdiOSIsICJNNDQ2LjIgMzQuNWMtMTQuMi0xMC4xLTMzLjUtNC42LTQyLjIgMTAuNUwzMzEuNiAxNzAuM2MzMS4zIDE1LjggNTIuOCA0OC4zIDUyLjggODUuN2wxNDQgMGMxNy43IDAgMzIuMi0xNC40IDMwLjEtMzEuOS05LjEtNzguMS01MS40LTE0Ni4xLTExMi4zLTE4OS42ek0xNzIuNyA0NC45QzE2NCAyOS44IDE0NC43IDI0LjMgMTMwLjUgMzQuNSA2OS42IDc3LjkgMjcuMyAxNDUuOSAxOC4yIDIyNC4xIDE2LjEgMjQxLjYgMzAuNyAyNTYgNDguMyAyNTZsMTQ0IDBjMC0zNy41IDIxLjUtNjkuOSA1Mi44LTg1LjdMMTcyLjcgNDQuOXptLTkuNCA0MTYuOGMtOC43IDE1LjEtMy44IDM0LjUgMTIgNDEuOCAzNC40IDE1LjcgNzIuNyAyNC41IDExMyAyNC41czc4LjYtOC44IDExMy0yNC41YzE1LjgtNy4yIDIwLjctMjYuNyAxMi00MS44TDM0MSAzMzYuM2MtMTUuMSA5LjktMzMuMiAxNS43LTUyLjYgMTUuN3MtMzcuNS01LjgtNTIuNi0xNS43TDE2My4zIDQ2MS43ek0yODguMyAzMDRhNDggNDggMCAxIDAgLS43LTk2IDQ4IDQ4IDAgMSAwIC43IDk2eiJdCiAgICB9OwogICAgZmFGaWxlV29yZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13b3JkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzIiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMzUuNCAyNzQuOGMtMi45LTEyLjktMTUuNy0yMS4xLTI4LjYtMTguMnMtMjEuMSAxNS43LTE4LjIgMjguNmwzMiAxNDRjMi4zIDEwLjUgMTEuNCAxOC4yIDIyLjIgMTguOHMyMC42LTYuMSAyNC0xNi40bDI1LjItNzUuNyAyNS4yIDc1LjdjMy40IDEwLjIgMTMuMiAxNi45IDI0IDE2LjRzMTkuOS04LjIgMjIuMi0xOC44bDMyLTE0NGMyLjktMTIuOS01LjMtMjUuOC0xOC4yLTI4LjZzLTI1LjggNS4zLTI4LjYgMTguMmwtMTMuMiA1OS40LTIwLjYtNjEuOGMtMy4zLTkuOC0xMi40LTE2LjQtMjIuOC0xNi40cy0xOS41IDYuNi0yMi44IDE2LjRsLTIwLjYgNjEuOC0xMy4yLTU5LjR6Il0KICAgIH07CiAgICBmYUJlZFB1bHNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlZC1wdWxzZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcm9jZWR1cmVzIl0sICJmNDg3IiwgIk01MzEuMi0yMi40TDU3MiAzMiA2MTYgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDBjLTcuNiAwLTE0LjctMy42LTE5LjItOS42bC0yNC4xLTMyLjEtNDcgOTkuOWMtMy43IDcuOC0xMS4zIDEzLjEtMTkuOSAxMy43cy0xNi45LTMuNC0yMS43LTEwLjZMMzg3LjIgODAgMzQ0IDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDU2IDBjOCAwIDE1LjUgNCAyMCAxMC43bDI0LjQgMzYuNiA0NS45LTk3LjVjMy42LTcuNiAxMC45LTEyLjggMTkuMy0xMy43czE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDkuNSAwIDI2LjYgMzkuOWMxNC40IDIxLjYgMzkuMyAzMy44IDY1LjIgMzEuOXM0OC44LTE3LjYgNTkuOC00MS4xTDUyNyAxMjkuMmM0NS45IDcuMiA4MSA0Ni45IDgxIDk0LjhsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCAyMjQgMjI0IDAgMC0xMjh6TTE0NCAxOTJhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFQcm9jZWR1cmVzID0gZmFCZWRQdWxzZTsKICAgIGZhVGVudHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4MiIsICJNNTM5LjkgMzUybC05NS42IDAtOC40LTY2LjFjLTIuOS0yMy4yLTE1LjktNDMuOS0zNS40LTU2LjhMMjUyLjIgMTMxLjVjLTE4LTExLjktMzkuNy0xNS43LTYwLjEtMTEuNSAyLjUtNC4zIDUuOS03LjkgMTAuMS0xMC43TDM1MC42IDExLjZjMTAuNy03IDI0LjUtNyAzNS4yIDBsMTQ4LjQgOTcuN2M3LjggNS4xIDEzIDEzLjQgMTQuMiAyMi43bDIzLjMgMTg0YzIuNCAxOS4xLTEyLjUgMzYtMzEuNyAzNnpNNC44IDQ3NmwyMy4zLTE4NGMxLjItOS4zIDYuMy0xNy42IDE0LjItMjIuN2wxNDguNC05Ny43YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTQ5LjcgMGMtMTEuMiAwLTIxLjUtNS44LTI3LjMtMTUuNGwtNzctMTI2LjdjLTEuNy0yLjgtNC44LTQuNi04LjEtNC42LTUuMyAwLTkuNSA0LjMtOS41IDkuNWwwIDEwNS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDM2LjUgNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il0KICAgIH07CiAgICBmYU11Z0hvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdWctaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTc0OV0sICJmN2I2IiwgIk0xNTItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzE4My41IDMxLjcgMTc2IDI0LjEgMTc2IDggMTc2LTUuMyAxNjUuMy0xNiAxNTItMTZ6TTk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMGM0MS44IDAgNzcuNC0yNi43IDkwLjUtNjRsNS41IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTNTE4LjcgMTkyIDQ0OCAxOTJMOTYgMTkyek00NDggMzg0bDAtMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek0yODggOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyNDAtNS4zIDI0MCA4YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzI5NS41IDMxLjcgMjg4IDI0LjEgMjg4IDh6Il0KICAgIH07CiAgICBmYUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4ODksICJ6YXAiXSwgImYwZTciLCAiTTMzOC44LTkuOWMxMS45IDguNiAxNi4zIDI0LjIgMTAuOSAzNy44TDI3MS4zIDIyNCA0MTYgMjI0YzEzLjUgMCAyNS41IDguNCAzMC4xIDIxLjFzLjcgMjYuOS05LjYgMzUuNWwtMjg4IDI0MGMtMTEuMyA5LjQtMjcuNCA5LjktMzkuMyAxLjNzLTE2LjMtMjQuMi0xMC45LTM3LjhMMTc2LjcgMjg4IDMyIDI4OGMtMTMuNSAwLTI1LjUtOC40LTMwLjEtMjEuMXMtLjctMjYuOSA5LjYtMzUuNWwyODgtMjQwYzExLjMtOS40IDI3LjQtOS45IDM5LjMtMS4zeiJdCiAgICB9OwogICAgZmFaYXAgPSBmYUJvbHQ7CiAgICBmYUphciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqYXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTUxNiIsICJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTkyeiJdCiAgICB9OwogICAgZmFUcnVja1BsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXBsYW5lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGYiLCAiTTE0NCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDI3LjNjMCA3LjEgLjkgMTQuMSAyLjcgMjAuN0wxOTIgNDgwIDgzLjkgNTA3QzczLjggNTA5LjYgNjQgNTAxLjkgNjQgNDkxLjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDc0LTU5LjIgMC01Ny42LTEyMi4xIDQ4LjhDMTEuNCAzOTUuNCAwIDM4Ny43IDAgMzc2LjRsMC00NGMwLTggMy0xNS42IDguMy0yMS41TDE0NCAxNjEuNiAxNDQgNDh6bTIyNCA4MGwxOTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2MGMwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xNjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjLTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0bDAtMTYwYzAtNDQuMiAzNS44LTgwIDgwLTgwem0wIDE3NmwxOTIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMnptMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTIxNi0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ0hlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oZWFydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGJlIiwgIk0yNzkuNiAzMUMyNjUuNSAxMS41IDI0Mi45IDAgMjE4LjkgMCAxNzcuNSAwIDE0NCAzMy41IDE0NCA3NC45bDAgMi40YzAgNjQuNCA4MiAxMzMuNCAxMjIuMiAxNjMuMyAxMyA5LjcgMzAuNSA5LjcgNDMuNSAwIDQwLjItMzAgMTIyLjItOTguOSAxMjIuMi0xNjMuM2wwLTIuNGMwLTQxLjQtMzMuNS03NC45LTc0LjktNzQuOS0yNCAwLTQ2LjYgMTEuNS02MC43IDMxTDI4OCA0Mi43IDI3OS42IDMxek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhQXJyb3dSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNCwgImFycm93LWxlZnQtcm90YXRlIiwgImFycm93LXJvdGF0ZS1iYWNrIiwgImFycm93LXJvdGF0ZS1iYWNrd2FyZCIsICJ1bmRvIl0sICJmMGUyIiwgIk0yNTYgNjRjLTU2LjggMC0xMDcuOSAyNC43LTE0My4xIDY0bDQ3LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMCA1NC43QzExMC45IDMzLjYgMTc5LjUgMCAyNTYgMCAzOTcuNCAwIDUxMiAxMTQuNiA1MTIgMjU2UzM5Ny40IDUxMiAyNTYgNTEyYy04NyAwLTE2My45LTQzLjQtMjEwLjEtMTA5LjctMTAuMS0xNC41LTYuNi0zNC40IDcuOS00NC42czM0LjQtNi42IDQ0LjYgNy45YzM0LjggNDkuOCA5Mi40IDgyLjMgMTU3LjYgODIuMyAxMDYgMCAxOTItODYgMTkyLTE5MlMzNjIgNjQgMjU2IDY0eiJdCiAgICB9OwogICAgZmFBcnJvd0xlZnRSb3RhdGUgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYUFycm93Um90YXRlQmFja3dhcmQgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhVW5kbyA9IGZhQXJyb3dSb3RhdGVMZWZ0OwogICAgZmFGYWNlQW5ncnkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtYW5ncnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDQsICJhbmdyeSJdLCAiZjU1NiIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMjU2IDM2OGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUFuZ3J5MiA9IGZhRmFjZUFuZ3J5MjsKICAgIGZhQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVyc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkYyIsICJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN1MtMi4zIDI4IDQuMiAzNy42bDExMiAxNjMuMy05OS42IDMyLjNDNi43IDIzNi40IDAgMjQ1LjYgMCAyNTZzNi43IDE5LjYgMTYuNiAyMi44bDEwMy4xIDMzLjQtNTIuOSAxMDAuNmMtNC45IDkuMy0zLjIgMjAuNyA0LjMgMjguMXMxOC44IDkuMiAyOC4xIDQuM2wxMDAuNi01Mi45IDMzLjQgMTAzLjFjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42czE5LjYtNi43IDIyLjgtMTYuNmwzMy40LTEwMy4xIDEwMC42IDUyLjljOS4zIDQuOSAyMC43IDMuMiAyOC4xLTQuM3M5LjItMTguOCA0LjMtMjguMWwtNTIuOS0xMDAuNiAxMDMuMS0zMy40YzkuOS0zLjIgMTYuNi0xMi40IDE2LjYtMjIuOHMtNi43LTE5LjYtMTYuNi0yMi44bC0xMDYuNS0zNC41IDI1LjctNzAuNGMzLjItOC44IDEtMTguNi01LjYtMjUuMnMtMTYuNC04LjgtMjUuMi01LjZsLTcwLjQgMjUuNy0zNC41LTEwNi41QzI3NS42IDYuNyAyNjYuNCAwIDI1NiAwcy0xOS42IDYuNy0yMi44IDE2LjZMMjAwLjkgMTE2LjIgMzcuNiA0LjJ6Il0KICAgIH07CiAgICBmYVogPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMl0sICI1YSIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzMjAgMGMxMi40IDAgMjMuNyA3LjIgMjkgMTguNHMzLjYgMjQuNS00LjQgMzQuMUwxMDAuMyA0MTYgMzUyIDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFCYW5kYWdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbmRhZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NTcsICJiYW5kLWFpZCJdLCAiZjQ2MiIsICJNNDY0IDQxNmw0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00OCAwIDAgMzIwek00MTYgOTZsLTI1NiAwIDAgMzIwIDI1NiAwIDAtMzIwek02NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTMyMC00OCAwek0yMTYgMjA4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIxNiAzMDRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhQmFuZEFpZCA9IGZhQmFuZGFnZTsKICAgIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1NiIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFCdXNTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cy1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU4MWQiLCAiTTQ4MCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC01LjYgMGMtMTMuMiAzNy4zLTQ4LjYgNjQtOTAuNCA2NHMtNzcuMy0yNi43LTkwLjQtNjRsLTEzOS4xIDBjLTEzLjIgMzcuMy00OC43IDY0LTkwLjQgNjRzLTc3LjItMjYuNy05MC40LTY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDQzIDQzIDAgOTYgMEw0ODAgMHpNMTYwIDM2OGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTMyMCAwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnptMC0zMDRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC01My00My05Ni05Ni05NnpNMjQ4IDIyNGwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMDQgMCAwIDE2MHpNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDAgMC0xNjAtMTA0IDB6Il0KICAgIH07CiAgICBmYUJ1Z3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQwIiwgIk00NDcuNSAxNzQuNmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43YzI2LjcgMTMuNSA0Ni4zIDM5LjEgNTEuNCA2OS42bDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMMjk2IDQzMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtMzItMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNS4zIDBjNS4xLTMwLjUgMjQuNy01Ni4xIDUxLjQtNjkuNmwtMjIuOS0yNi43Yy04LjYtMTAuMS03LjUtMjUuMiAyLjYtMzMuOHMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6bS0yNTYtMTkyYzguOC04LjQgMjIuNy04LjkgMzIuMi0uOHMxMSAyMS45IDQuMSAzMS45bC0xLjUgMS45LTIzIDI2LjdDMjMwIDU1LjkgMjQ5LjUgODEuNSAyNTQuNyAxMTJsMjUuMyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgMzIgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjUuMyAwYy03LjYgNDUuNC00Ny4xIDgwLTk0LjcgODBzLTg3LTM0LjYtOTQuNy04MEw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwQzcwLjUgODEuNSA5MCA1NS45IDExNi43IDQyLjRMOTMuOCAxNS42Qzg1LjIgNS42IDg2LjMtOS42IDk2LjQtMTguMnMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6Il0KICAgIH07CiAgICBmYUJlZXJNdWdFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWVyLW11Zy1lbXB0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJiZWVyIl0sICJmMGZjIiwgIk02NCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwyODggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMDguMmMwIDI0LjItMTMuNyA0Ni40LTM1LjQgNTcuMkw0NDggMzcxLjggNDQ4IDM4NGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA4MHpNNDQ4IDMwMC4ybDY0LTMyIDAtMTA4LjItNjQgMCAwIDE0MC4yek0xOTIgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHptODggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4eiJdCiAgICB9OwogICAgZmFCZWVyID0gZmFCZWVyTXVnRW1wdHk7CiAgICBmYVBlcnNvbkNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZSIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhU3RhcGxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFwbGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1YWYiLCAiTTY0MCAyOTkuM0w2NDAgNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMCAwLTQ4LTM1MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExNi42LTMwLjItNS40Yy0xOS42LTMuNS0zMy44LTIwLjUtMzMuOC00MC40IDAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNWMzMi44LTQzLjggODQuNC02OS42IDEzOS4xLTY5LjYgMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRsMC0xNi0zMjAtNTcuMSAwIDczLjEgMzIwIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTEiLCAiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFOYWlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmFpcmEtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMWY2IiwgIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0bDAgMTkyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ0IDg5LjUgMCAxMDcuOCAxNjEuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOVMzODQgNDYyLjEgMzg0IDQ0OGwwLTE0NCAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTkyLTU3LjUgMC0xMzkuOC0yMDkuN3pNMjk0LjUgMzA0bDI1LjUgMCAwIDM4LjMtMjUuNS0zOC4zek0xODUuNSAyNTZsLTU3LjUgMCAwLTg2LjMgNTcuNSA4Ni4zeiJdCiAgICB9OwogICAgZmFXaWZpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpZmkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsid2lmaS0zIiwgIndpZmktc3Ryb25nIl0sICJmMWViIiwgIk0yODggOTZjLTkwLjkgMC0xNzMuMiAzNi0yMzMuNyA5NC42LTEyLjcgMTIuMy0zMyAxMi00NS4yLS43cy0xMi0zMyAuNy00NS4yQzgxLjcgNzQuOSAxNzkuOSAzMiAyODggMzJTNDk0LjMgNzQuOSA1NjYuMyAxNDQuN2MxMi43IDEyLjMgMTMgMzIuNiAuNyA0NS4ycy0zMi42IDEzLTQ1LjIgLjdDNDYxLjIgMTMyIDM3OC45IDk2IDI4OCA5NnpNMjQwIDQzMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xNjggMzI2LjJjLTExLjcgMTMuMy0zMS45IDE0LjUtNDUuMiAyLjhzLTE0LjUtMzEuOS0yLjgtNDUuMkMxNjEgMjM3LjQgMjIxLjEgMjA4IDI4OCAyMDhzMTI3IDI5LjQgMTY4IDc1LjhjMTEuNyAxMy4zIDEwLjQgMzMuNS0yLjggNDUuMnMtMzMuNSAxMC40LTQ1LjItMi44QzM3OC42IDI5Mi45IDMzNS44IDI3MiAyODggMjcycy05MC42IDIwLjktMTIwIDU0LjJ6Il0KICAgIH07CiAgICBmYVdpZmkzID0gZmFXaWZpOwogICAgZmFXaWZpU3Ryb25nID0gZmFXaWZpOwogICAgZmFNb25leUNoZWNrRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWNoZWNrLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1jaGVjay1hbHQiXSwgImY1M2QiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek0yOTYgMjg4bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptLTI0LTg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTE0OCAxNDRjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdDOTQuNSAyNjggNzYgMjQ2LjEgNzYgMjIwLjUgNzYgMTkxLjcgOTkuMiAxNjguMyAxMjggMTY4bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2tBbHQgPSBmYU1vbmV5Q2hlY2tEb2xsYXI7CiAgICBmYUV5ZUxvd1Zpc2lvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleWUtbG93LXZpc2lvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb3ctdmlzaW9uIl0sICJmMmE4IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNODggMTU3LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMzI4LjIgNDY2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw4OCAxNTcuOXpNNDUuNyAyNTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxODEuOSA0NTUuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDUuNyAyNTEuM3oiXQogICAgfTsKICAgIGZhTG93VmlzaW9uID0gZmFFeWVMb3dWaXNpb247CiAgICBmYUNpcmNsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS11cCJdLCAiZjBhYSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE3LTM3N2w4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zOS0zOSAwIDE1MC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTUwLjEtMzkgMzljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODAtODBjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlVXAgPSBmYUNpcmNsZUFycm93VXA7CiAgICBmYUNhbWVyYVJldHJvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYS1yZXRybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0N10sICJmMDgzIiwgIk0wIDQxNmwwLTIwOCAxMzYuMiAwYzEzLjUtMjAuMiAzMi0zNi44IDUzLjctNDhMMCAxNjAgMCAxMjUuN2MwLTM1LjMgMjguNy02NCA2NC02NGwuMSAwQzY1LjMgNDUuMSA3OS4xIDMyIDk2IDMybDMyIDBjMTYuOSAwIDMwLjcgMTMuMSAzMS45IDI5LjdsMzIuMSAwIDUxLjItMjMuOGM4LjQtMy45IDE3LjYtNiAyNi45LTZMNDQ4IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjQtMTkwIDBjMjEuNyAxMS4yIDQwLjIgMjcuOCA1My43IDQ4bDEzNi4yIDAgMCAyMDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMjU2IDE5MmE5Ni4xIDk2LjEgMCAxIDAgMCAxOTIuMSA5Ni4xIDk2LjEgMCAxIDAgMC0xOTIuMXoiXQogICAgfTsKICAgIGZhQ2Fwc3VsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2Fwc3VsZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQ2YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTItOTYgMCAwLTExMnptLTY0IDBsMCAyODhjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmwwLTEwNS44IDExNi4zIDE2OS41YzM1LjUgNTEuNyAxMDUuMyA2NC4zIDE1NiAyOC4xczYzLTEwNy41IDI3LjUtMTU5LjJMNDI3LjMgMTQ1LjNjLTM1LjUtNTEuNy0xMDUuMy02NC4zLTE1Ni0yOC4xLTUuNiA0LTEwLjcgOC40LTE1LjMgMTMuMWwwLTE4LjNDMjU2IDUwLjEgMjA1LjkgMCAxNDQgMFMzMiA1MC4xIDMyIDExMnpNMjk2LjYgMjQwLjJjLTE2LTIzLjMtMTAtNTUuMyAxMS45LTcxIDIxLjItMTUuMSA1MC41LTEwLjMgNjYgMTIuMmw2NyA5Ny42LTc5LjkgNTUuOS02NS05NC44eiJdCiAgICB9OwogICAgZmFQb28gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTY5XSwgImYyZmUiLCAiTTI2OC45IC45Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuNGMyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgNDQuMS0zNS43IDc5LjktNzkuOCA4MEwxNjAgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NCAwIDE5LjEgOC40IDM2LjMgMjEuNyA0OEwxMDQgMjQwYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDIzLjIgMTEgNDMuOCAyOCA1Ny0zNC4xIDUuNy02MCAzNS4zLTYwIDcxIDAgMzkuOCAzMi4yIDcyIDcyIDcybDM2OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyIDAtMzUuNy0yNS45LTY1LjMtNjAtNzEgMTctMTMuMiAyOC0zMy44IDI4LTU3IDAtMzkuOC0zMi4yLTcyLTcyLTcybC0xMy43IDBjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01LjUgMGMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjQgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjctOC4yIDEwLjUtMzkuNSA0NS05My44IDQ1cy04NS42LTM0LjYtOTMuOC00NWMtMS41LTEuOS0yLjItNC4zLTIuMi02LjcgMC02LjggNS41LTEyLjMgMTIuMy0xMi4zbDE2Ny40IDBjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zeiJdCiAgICB9OwogICAgZmFWb2x1bWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjY1LCAidm9sdW1lLW1lZGl1bSJdLCAiZjZhOCIsICJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTQ0MS4xIDEwN2MtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzQ0My4zIDE3MC43IDQ2NCAyMTAuOSA0NjQgMjU2cy0yMC43IDg1LjMtNTMuMiAxMTEuOGMtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNWM0My4yLTM1LjIgNzAuOS04OC45IDcwLjktMTQ5cy0yNy43LTExMy44LTcwLjktMTQ5em0tNjAuNSA3NC41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzYxLjEgMjI3LjYgMzY4IDI0MSAzNjggMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDAyLjEgMzEyLjkgNDE2IDI4Ni4xIDQxNiAyNTZzLTEzLjktNTYuOS0zNS41LTc0LjV6Il0KICAgIH07CiAgICBmYVZvbHVtZU1lZGl1bSA9IGZhVm9sdW1lOwogICAgZmFFbGV2YXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2YXRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTZkIiwgIk0yOTIuNy00LjdsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFM0MzguNS0zMiA0MzItMzJMMzA0LTMyYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjR6bS0xNjAtMjIuNmwtNjQgNjRjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRTNzMuNSA2NCA4MCA2NGwxMjggMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtNjQtNjRjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHptOTYgOTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek04MCA0MDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0xOTIgMGMwLTI2LjUgMjEuNS00OCA0OC00OGw2NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6bTMyLTEyOGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFUYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTkxXSwgImYwMmIiLCAiTTMyLjUgOTZsMCAxNDkuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2wxOTIgMTkyYzI1IDI1IDY1LjUgMjUgOTAuNSAwTDQ4My4yIDMzMy4zYzI1LTI1IDI1LTY1LjUgMC05MC41bC0xOTItMTkyQzI3OS4yIDM4LjcgMjYzIDMyIDI0NiAzMkw5Ni41IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NHptMTEyIDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWQiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhRG93bkxvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG93bi1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctYWx0LWRvd24iXSwgImYzMDkiLCAiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzAwLjkgMzUyIDI4OCAzNTJsLTY0IDAgMC0zMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzM2LTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjIgMzk3LjUgOS40IDQwNi42bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdERvd24gPSBmYURvd25Mb25nOwogICAgZmFDb21wYWN0RGlzYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYWN0LWRpc2MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTEsIDEyODE5MiwgMTI4NDQwXSwgImY1MWYiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6bS01Ni0xNmMwLTMyLjQgMTYuMy02Ni42IDQyLjgtOTMuMlMyMDcuNiAxMDQgMjQwIDEwNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDcuOSAwLTkzLjcgMjMuNS0xMjcuMSA1Ni45UzU2IDE5Mi4xIDU2IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZVJvbGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VpdGNhc2Utcm9sbGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWMxIiwgIk0xNDQgMjRjMC00LjQgMy42LTggOC04bDgwIDBjNC40IDAgOCAzLjYgOCA4bDAgNzItOTYgMCAwLTcyek0zMjAgOTZsLTMyIDAgMC03MmMwLTMwLjktMjUuMS01Ni01Ni01NmwtODAgMEMxMjEuMS0zMiA5Ni02LjkgOTYgMjRsMCA3Mi0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODhjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTEyMCAyMDhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvb2tRdXJhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXF1cmFuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInF1cmFuIl0sICJmNjg3IiwgIk02NCA1MTJsMjg4IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMyMGMwLTUzLTQzLTk2LTk2LTk2TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzM2YzAgMjAuOSAxMy40IDM4LjcgMzIgNDUuM0wzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMHpNMzUyIDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDAgMC02NCAyNTYgMHpNMjczLjEgMTQ0LjRjMi41LTYuMSAxMS4yLTYuMSAxMy43IDBsMTAuMyAyNC44IDI2LjggMi4xYzYuNiAuNSA5LjIgOC43IDQuMiAxM0wzMDcuOCAyMDEuOSAzMTQgMjI4YzEuNSA2LjQtNS41IDExLjUtMTEuMSA4LjFsLTIyLjktMTQtMjIuOSAxNGMtNS42IDMuNC0xMi42LTEuNi0xMS4xLTguMWw2LjItMjYuMS0yMC40LTE3LjVjLTUtNC4zLTIuMy0xMi41IDQuMi0xM2wyNi44LTIuMSAxMC4zLTI0Ljh6TTEwMCAxOTJjMC02OC41IDU1LjUtMTI0IDEyNC0xMjQgMjMuOCAwIDQ2LjEgNi43IDY1IDE4LjQgNC44IDIuOSA2LjkgOC44IDUgMTQuMXMtNy4xIDguNi0xMi43IDhjLTMuMS0uMy02LjItLjUtOS40LS41LTQ2LjQgMC04NCAzNy42LTg0IDg0czM3LjYgODQgODQgODRjMy4yIDAgNi4zLS4yIDkuNC0uNSA1LjYtLjYgMTAuOCAyLjcgMTIuNyA4cy0uMyAxMS4yLTUgMTQuMWMtMTguOSAxMS43LTQxLjIgMTguNC02NSAxOC40LTY4LjUgMC0xMjQtNTUuNS0xMjQtMTI0eiJdCiAgICB9OwogICAgZmFRdXJhbiA9IGZhQm9va1F1cmFuOwogICAgZmFQaG9uZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZGQiLCAiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNDEuNSAzNjguNkM4OS4yIDMxMC41IDUxLjYgMjM4LjggMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzEyLjkgMjguNSAyOS42IDU0LjggNDkuNSA3OC41TDUzNS0yNC45em0tMTUwLjQgNTM0Yy02My0xMy40LTEyMS4zLTM5LjgtMTcxLjctNzYuM0wyOTcuOCAzNDhjMTIuMiA4LjIgMjUgMTUuNiAzOC4zIDIyLjJMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNWMtMTcuNiA2NC42LTgwLjIgMTE5LjgtMTU2LjQgMTAzLjd6Il0KICAgIH07CiAgICBmYVJvYWRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY0IiwgIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVNob3BMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3AtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGE1IiwgIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1NS42IDExMS4xYy04LjItMS42LTE2LjYtMi41LTI1LjItMi41LTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBsLTU3LjMgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhSW1hZ2VQb3J0cmFpdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZS1wb3J0cmFpdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJwb3J0cmFpdCJdLCAiZjNlMCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek04MCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTE5MiAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYVBvcnRyYWl0ID0gZmFJbWFnZVBvcnRyYWl0OwogICAgZmFCcmlkZ2VMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2MiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMCAwIDMyLjJjMTMuOCAuNiAyNy4yIDIuOCA0MCA2LjRsMCA1MC43Yy0xNC44LTYtMzEtOS4zLTQ4LTkuMy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLS40IC4zLS43IC42LTEuMSAxLTE3LjMtMjUtNDYuMi00MS4zLTc4LjktNDEuMy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjR6bTQyNCA2OC42bDAtMzYuNi04MCAwIDAgNjQgMTguOCAwYzE4LjItMTIuOCAzOC45LTIyLjIgNjEuMi0yNy40ek0yMTYgOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDBsLTgwIDAgMCA2NCA4MCAwIDAtNjR6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUhhbW1lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1tZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgyOTZdLCAiZjZlMyIsICJNMjQ2LjkgMTguM0wyNzEgMy44YzIxLjYtMTMgNDYuMy0xOS44IDcxLjUtMTkuOCAzNi44IDAgNzIuMiAxNC42IDk4LjIgNDAuN2w2My45IDYzLjljMTUgMTUgMjMuNCAzNS40IDIzLjQgNTYuNmwwIDMwLjkgMTkuNyAxOS43IDAgMGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHMxNS42IDQwLjkgMCA1Ni42bC02NCA2NGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZMNDY0IDI0MCA0MzMuMSAyNDBjLTIxLjIgMC00MS42LTguNC01Ni42LTIzLjRsLTQ5LjEtNDkuMWMtMTUtMTUtMjMuNC0zNS40LTIzLjQtNTYuNmwwLTEyLjdjMC0xMS4yLTUuOS0yMS43LTE1LjUtMjcuNGwtNDEuNi0yNWMtMTAuNC02LjItMTAuNC0yMS4yIDAtMjcuNHpNNTAuNyA0MDIuN2wyMjIuMS0yMjIuMSA5MC41IDkwLjUtMjIyLjEgMjIyLjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNXoiXQogICAgfTsKICAgIGZhQXJyb3dVcDE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTEtOSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAiXSwgImYxNjMiLCAiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNNDE4LjcgMzhjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMzY1LjEgNDMwLjZjLTkuNiAxNC44LTUuNCAzNC42IDkuNCA0NC4zczM0LjYgNS40IDQ0LjMtOS40bDQyLjEtNjQuOWMxMi40LTE5LjIgMTkuMS00MS42IDE5LjEtNjQuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDM2LjEgMjMuOSA2Ni43IDU2LjggNzYuNmwtMTEuNyAxOHpNMzc2IDMzNmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY1VwID0gZmFBcnJvd1VwMTk7CiAgICBmYUNoZXNzS25pZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1rbmlnaHQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIyXSwgImY0NDEiLCAiTTE5Mi0zMmMxMDYgMCAxOTIgODYgMTkyIDE5MmwwIDEzMy41YzAgMTctNi44IDMzLjItMTguNyA0NS4yTDMyMCAzODQgMzcwLjggNDM0LjdjOC41IDguNSAxMy4yIDIwIDEzLjIgMzIgMCAyNS0yMC4zIDQ1LjItNDUuMiA0NS4zTDQ1LjMgNTEyYy0yNSAwLTQ1LjItMjAuMy00NS4yLTQ1LjMgMC0xMiA0LjgtMjMuNSAxMy4yLTMyTDY0IDM4NCA2NCAzNDkuNGMwLTE4LjcgOC4yLTM2LjQgMjIuMy00OC42bDg5LjctNzYuOC00OCAwLTEyLjEgMTIuMWMtMTIuNyAxMi43LTMwIDE5LjktNDggMTkuOS0zNy41IDAtNjcuOS0zMC40LTY3LjktNjcuOWwwLTguN2MwLTIyLjggOC4yLTQ0LjkgMjMuMS02Mi4zTDk2IDMyIDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNMTYwIDcyYTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHoiXQogICAgfTsKICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1mbG9vZC13YXRlci1jaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZiIsICJNMjg4LjUgMTEyYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTE0MS4yIDQ0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNTYgNTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTU2IDU2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDI4LjctMjguNy04OS40IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODkuNCAwLTI4LjctMjguN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6TTMzNi41IDExMmMwIDcxLjEtMzguNiAxMzMuMS05NiAxNjYuM2wwIDEyLjhjMjIuMSA0LjUgNDMuNCAxMy45IDYyLjQgMjguMiAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDYtNC41IDEyLjYtOCAxOS4zLTEwLjRsMC0xMTUuMiA0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0w0NDQuNSAxMC41QzQzNi44IDMuNyA0MjYuOCAwIDQxNi41IDBzLTIwLjMgMy43LTI4IDEwLjVMMzI5LjkgNjEuOGM0LjMgMTYgNi42IDMyLjggNi42IDUwLjJ6bTMyIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc1LjEgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCAzOTEuOCAyNjYgMzczLjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCA0ODcuOCAyNjYgNDY5LjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rIl0sICJmMDhlIiwgIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4Mi43IDAtMjAxLjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDQ4IDEwOS4zIDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2TDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgOTZ6Il0KICAgIH07CiAgICBmYUV4dGVybmFsTGluayA9IGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tdXAtYWNyb3NzLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRhZiIsICJNMjY1LjQgMTA1LjRsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTQxLjQtNDEuNCAwIDExNC43IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgMTE0LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgNDAyLjcgOTYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTExNC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6TTQxNiAzMzZsMCAxNDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQgNjQgMHpNOTYgMTc2TDk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDQtNjQgMHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5CZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgImdyaW4tYmVhbSJdLCAiZjU4MiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW0yID0gZmFGYWNlR3JpbkJlYW0yOwogICAgZmFSZWN0YW5nbGVBZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYWQiXSwgImY2NDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMTg0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0LTcuMSAwLTEzLjUtMy4xLTE3LjktOC0xMC4yIDUuMS0yMS44IDgtMzQuMSA4LTQyIDAtNzYtMzQtNzYtNzZzMzQtNzYgNzYtNzZjOS45IDAgMTkuMyAxLjkgMjggNS4zbDAtMjEuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em0tNDggOTJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMTYwIDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIgNDggMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMHptMzIgOTZsLTQ4IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwNGMwLTM1LjMgMjguNy02NCA2NC02NGwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjR6Il0KICAgIH07CiAgICBmYUFkID0gZmFSZWN0YW5nbGVBZDsKICAgIGZhQm9va1RhbmFraCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXRhbmFraCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YW5ha2giXSwgImY4MjciLCAiTTM1MiA1MTJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjYuN0MxMy40IDM3NC43IDAgMzU2LjkgMCAzMzZMMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzUyIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyMGMwIDUzLTQzIDk2LTk2IDk2em0zMi05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjU2IDAgMCA2NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTEzLjkgMjI5Yy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yQzIzMy42IDY2LjYgMjI5IDY0IDIyNCA2NHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXQogICAgfTsKICAgIGZhVGFuYWtoID0gZmFCb29rVGFuYWtoOwogICAgZmFIb3RUdWJQZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG90LXR1Yi1wZXJzb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaG90LXR1YiJdLCAiZjU5MyIsICJNMjQwIDQwYzAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMjAzLjUgOTMuMSAxOTIgNjcuMiAxOTIgNDAgMTkyIDI2LjcgMjAyLjcgMTYgMjE2IDE2czI0IDEwLjcgMjQgMjR6TTAgMzM2bDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkuNyAwYzguMSAwIDE2LjIgMS42IDIzLjggNC42bDEzNy4xIDU0LjhjNy42IDMgMTUuNiA0LjYgMjMuOCA0LjZMMzg0IDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzM2em05Ni0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE1MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MHptMTA0LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzI4IDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMzE1LjUgOTMuMSAzMDQgNjcuMiAzMDQgNDAgMzA0IDI2LjcgMzE0LjcgMTYgMzI4IDE2ek02NCA0MGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhSG90VHViID0gZmFIb3RUdWJQZXJzb247CiAgICBmYUZpbGVIYWxmRGFzaGVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaGFsZi1kYXNoZWQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTY5OCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNTYgMzg0IDAgMC0xNDkuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNMCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHpNNjQgNTEybDAtNjQtNjQgMGMwIDM1LjMgMjguNyA2NCA2NCA2NHptMzIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwtNjQgMCAwIDY0em02NC0xNjBsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il0KICAgIH07CiAgICBmYU91dGRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib3V0ZGVudCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJkZWRlbnQiXSwgImYwM2IiLCAiTS40IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMEMxNC44IDk2IC40IDgxLjcgLjQgNjR6bTE5MiAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgOTZsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0uNCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNLjcgMjY4LjZjLTguMi02LjQtOC4yLTE4LjkgMC0yNS4zbDEwMS45LTc5LjNjMTAuNS04LjIgMjUuOC0uNyAyNS44IDEyLjZsMCAxNTguNmMwIDEzLjMtMTUuMyAyMC44LTI1LjggMTIuNkwuNyAyNjguNnoiXQogICAgfTsKICAgIGZhRGVkZW50ID0gZmFPdXRkZW50OwogICAgZmFIYW5kUGVhY2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcGVhY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk2XSwgImYyNWIiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02MS4zIDUxLjJMMTQzLjkgMjQwIDc0LjEgMjQwIDIuNyA3Ni44Qy00LjQgNjAuNiAzIDQxLjggMTkuMiAzNC43UzU0LjIgMzUgNjEuMyA1MS4yem0yNyAyMjEuM2wtLjItLjUgOTUuOSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDY5LjUgNDUzLjVDNDUuNSA0MjkuNSAzMiAzOTYuOSAzMiAzNjNsMC0yN2MwLTMyLjcgMjQuNi01OS43IDU2LjMtNjMuNXoiXQogICAgfTsKICAgIGZhSGVhZFNpZGVWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtdmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2NCIsICJNMzI5LjcgNDQ4Yy01LjEgMC05LjcgMy43LTkuNyA4LjhsMCA3LjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTYzLjZjMC0xMi42LTUuMS0yNC41LTEzLjEtMzQuMi0zMS44LTM4LjctNTAuOS04OC4yLTUwLjktMTQyLjIgMC0xMjMuNyAxMDAuMy0yMjQgMjI0LTIyNCAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDM1LjggNDIuOWM3IDguNCAxMC45IDE5LjEgMTAuOSAzMC4xIDAgMjUuOS0yMSA0Ny00NyA0N2wtMSAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzguMyAwek0yMjQgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMjIuOS0yNy43IDM0LjQtNDMuOSAxOC4yLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMTYuMiAxNi4yIDQuNyA0My45LTE4LjIgNDMuOS0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0YzIyLjkgMCAzNC40IDI3LjcgMTguMiA0My45LTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMxNi4yLTE2LjIgNDMuOS00LjcgNDMuOSAxOC4yIDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yMi45IDI3LjctMzQuNCA0My45LTE4LjIgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0xNi4yLTE2LjItNC43LTQzLjkgMTguMi00My45IDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yMi45IDAtMzQuNC0yNy43LTE4LjItNDMuOSA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0xNi4yIDE2LjItNDMuOSA0LjctNDMuOS0xOC4yIDAtMTMuMy0xMC43LTI0LTI0LTI0em0tMzIgODhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFDb21wYXNzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgImYxNGUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhUGVuTmliID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1uaWIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDAwMV0sICJmNWFkIiwgIk0zNjguNSAxOC4zbC01MC4xIDUwLjEgMTI1LjMgMTI1LjMgNTAuMS01MC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ0Ny43IDE4LjNjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwek0yNzkuMyA5Ny4ybC0uNSAuMS0xNDQuMSA0My4yYy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0yLjkgOC43LTEuOSAxOC4yIDIuNSAyNkwxNjEuNyAzMTYuNGMtMS4xLTQtMS42LTguMS0xLjYtMTIuNCAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDhjLTQuMyAwLTguNS0uNi0xMi40LTEuNkw0MC4zIDUwNS43YzcuOCA0LjQgMTcuMiA1LjQgMjYgMi41bDI2NC4zLTg4LjZjMTkuNy02LjYgMzUtMjIuNCA0MS00Mi4zbDQzLjItMTQ0LjEgLjEtLjUtMTM1LjUtMTM1LjV6Il0KICAgIH07CiAgICBmYVRlbnRBcnJvd3NEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3dzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4MSIsICJNMTg1LjUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnptMjQ4IDcybDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdCiAgICB9OwogICAgZmFGb3J3YXJkRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkLWZhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MTk3LCAiZmFzdC1mb3J3YXJkIl0sICJmMDUwIiwgIk0xOS44IDQ3Ny42YzEyIDUgMjUuNyAyLjIgMzQuOS02LjlMMjI0IDMwMS4zIDIyNCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOUw0NDggMzAxLjMgNDQ4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTQ2LjctMTY5LjQtMTY5LjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzIyNCA1MS4xIDIyNCA2NEwyMjQgMjEwLjcgNTQuNiA0MS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMwIDUxLjEgMCA2NEwwIDQ0OGMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42eiJdCiAgICB9OwogICAgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7CiAgICBmYUNyb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTI1IiwgIk00NDggMTA5LjNsNTQuNi01NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQwMi43IDY0IDE3NiA2NCAxNzYgMTI4IDMzOC43IDEyOCAxMjggMzM4LjcgMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMi0zMiAwQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwOCAwIDAtNjQtMTYyLjcgMCAyMTAuNy0yMTAuNyAwIDMwNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjc0Ljd6Il0KICAgIH07CiAgICBmYVdoaXNrZXlHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aGlza2V5LWdsYXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5MzQ3LCAiZ2xhc3Mtd2hpc2tleSJdLCAiZjdhMCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwxOTIgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnpNNjQgMjU2bDAtMTYwIDMyMCAwIDAgMTYwLTMyMCAweiJdCiAgICB9OwogICAgZmFHbGFzc1doaXNrZXkgPSBmYVdoaXNrZXlHbGFzczsKICAgIGZhU3F1YXJlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sICJmMGM4IiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsICJncmluIl0sICJmNTgwIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbjIgPSBmYUZhY2VHcmluMjsKICAgIGZhRmlsZUNvbnRyYWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29udHJhY3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU2YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNzAuMyAxNjBjLTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMNjkuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40eiJdCiAgICB9OwogICAgZmFBbmdsZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk2M10sICJmMTA2IiwgIk0xNjkuNCAxMzcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDE5MiAyMDUuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYweiJdCiAgICB9OwogICAgZmFGYWNlU21pbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NzgsICJzbWlsZSJdLCAiZjExOCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTbWlsZTIgPSBmYUZhY2VTbWlsZTI7CiAgICBmYVBlcnNvbkRyZXNzQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyZXNzLWJ1cnN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDQiLCAiTTIwOCA0MC4xYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNOCAxNDQuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptOTIuNSAxNDEuNGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMjQ2LjIgMzg0bDI1LjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAyNS44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTQzLTEyOSA0OC4zIDY1LjFjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDNDM0IDEzMiAzOTQuMyAxMTIgMzUyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ4LjMtNjUuMS00MyAxMjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMXoiXQogICAgfTsKICAgIGZhRGl2aWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpdmlkZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMTM1LCAyNDddLCAiZjUyOSIsICJNMjI0IDQ4YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjggNDA4YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHoiXQogICAgfTsKICAgIGZhQ29kZUZvcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1mb3JrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxM2IiLCAiTTgwIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIuN2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0zMiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNsMC03MC43LTMyIDBDOTguMSAyODggNDggMjM3LjkgNDggMTc2bDAtMjIuN0MxOS43IDE0MSAwIDExMi44IDAgODAgMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSG91c2VGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZCIsICJNNDcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSA1OS4xbDEwMC41IDk2LjkgMCAzNTYtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjI4LjUgNTkuMUMyMzUuOSA1MiAyNDUuNyA0OCAyNTYgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjMyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ29sdW1ucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jb2x1bW5zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhbmsiLCAiaW5zdGl0dXRpb24iLCAibXVzZXVtIiwgInVuaXZlcnNpdHkiXSwgImYxOWMiLCAiTTI3MS45IDIwLjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4Yy0xMi42IDcuMi0xOC44IDIyLTE1LjEgMzZTMTcuNSAyMDggMzIgMjA4bDMyIDAgMCAyMDggMCAwLTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMDggMzIgMGMxNC41IDAgMjcuMi05LjggMzAuOS0yMy44cy0yLjUtMjguOC0xNS4xLTM2bC0yMjQtMTI4ek00MDAgMjA4bDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHpNMjU2IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmFuayA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFJbnN0aXR1dGlvbiA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhVW5pdmVyc2l0eSA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFSdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjkiLCAiTTI0IDY0bDU2IDAgMCAzODQtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtMzItOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBDMTAuNyAxMTIgMCAxMDEuMyAwIDg4UzEwLjcgNjQgMjQgNjR6bTEwNCAwbDMyMCAwIDAgMzg0LTMyMCAwIDAtMzg0ek01NzYgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAzMiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwLTM4NCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFDb2RlTWVyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1tZXJnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzg3IiwgIk04MCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyLjQgOTcuMmMyOC0xMi40IDQ3LjYtNDAuNSA0Ny42LTczLjIgMC00NC4yLTM1LjgtODAtODAtODBTMCAzNS44IDAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zQzE5LjcgMzcxIDAgMzk5LjIgMCA0MzIgMCA0NzYuMiAzNS44IDUxMiA4MCA1MTJzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtODYuNmMyNi43IDIwLjEgNjAgMzIgOTYgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDggNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhMMjA4IDI0MGMtNDkuOSAwLTkxLTM4LjEtOTUuNi04Ni44ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zNDQgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlVHN1bmFtaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS10c3VuYW1pIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTUiLCAiTTI4OCAxNkMxNTUuNSAxNiA0OCAxMjMuNSA0OCAyNTZTMTU1LjUgNDk2IDI4OCA0OTZjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0xNC41IDEwLjktMzIuNCAxOS43LTQ5LjUgMjUuOC0xNi44IDYtMzQuOSAxMC4xLTQ5LjkgMTAuMWwtLjEgMEMxMjguOSA1NDMuOSAwIDQxNSAwIDI1NiAwIDk2LjkgMTI4LjktMzIgMjg4LTMyIDMwMS4zLTMyIDMxMi0yMS4zIDMxMi04cy0xMC43IDI0LTI0IDI0em00NC44IDE2Ni40bDk2LTcyYzExLjQtOC41IDI3LjEtOC41IDM4LjUgMGw5NS41IDcyYzggNiAxMi43IDE1LjUgMTIuNyAyNS41bC4zIDEyMS41Yy0yLjIgMS4zLTQuMyAyLjYtNi40IDQuMi00LjMgMy4xLTguNyAuOC0xMy4yLTEuNWwtMS4yLS42LS43LS4zYy01LjQtMi43LTExLjctNi42LTE4LjktMTEuNy0yOS41LTIxLjEtNjQuMy0zMS42LTk5LjEtMzEuNC0zNC4xIC4yLTY4LjEgMTAuNy05NyAzMS40LTcuOCA1LjYtMTMuOCA5LjMtMTkuMyAxMS4yTDMyMCAyMDhjMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNnptNTQuNiAyMjkuN2MtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjEtMTA2IDAtMTkyLTg2LTE5Mi0xOTJTMTgyIDY0IDI4OCA2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NGM3LjQgMCAxOS43LTIuMyAzMy43LTcuMyAxMy44LTQuOSAyNy4xLTExLjcgMzYuNy0xOC45IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNS40IDExLjYgMzUuMyAyMS4xIDU1IDI0LjQgMTkuNSAzLjMgMzcgLjQgNTEuMS0xMC4yIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjcuMyAyMC41LTU5LjIgMjQtODcuOSAxOS4yLTI4LjUtNC44LTU1LjQtMTgtNzUuOS0zMy40LTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWNoYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjIiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHptLTMxMiA4bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NmwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MCA2NGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhVW1icmVsbGEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW1icmVsbGEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBlOSIsICJNMjU2LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMmMxMjYuMyAxNS43IDIyNCAxMjMuNSAyMjQgMjU0IDAgMy44LS4xIDcuNS0uMiAxMS4zLS4zIDYuOS01IDEyLjgtMTEuNyAxNC43cy0xMy44LS43LTE3LjYtNi41Yy0xNC40LTIxLjQtMzguOC0zNS41LTY2LjUtMzUuNS0yOS4zIDAtNTQuOSAxNS43LTY4LjkgMzkuMy0yLjcgNC42LTcuNiA3LjYtMTMgNy44cy0xMC41LTIuMi0xMy43LTYuNWMtMTQuNi0xOS44LTM4LTMyLjYtNjQuNS0zMi42cy00OS45IDEyLjgtNjQuNSAzMi42Yy0zLjIgNC4zLTguMyA2LjgtMTMuNyA2LjVzLTEwLjItMy4yLTEzLTcuOGMtMTQtMjMuNi0zOS42LTM5LjMtNjguOS0zOS4zLTI3LjcgMC01Mi4xIDE0LjEtNjYuNSAzNS41LTMuOSA1LjctMTEgOC40LTE3LjYgNi41Uy41IDI3NC4yIC4yIDI2Ny4zQy4xIDI2My41IDAgMjU5LjggMCAyNTYgMCAxMjUuNSA5Ny43IDE3LjcgMjI0IDJsMC0yYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAzNjBsMCAxMDIuNmMwIDQ1LTM2LjUgODEuNC04MS40IDgxLjQtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjYgOS42IDAgMTcuNC03LjggMTcuNC0xNy40TDIyNCAzMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhSGlsbFJvY2tzbGlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWxsLXJvY2tzbGlkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTA4IiwgIk0yNTIuNCAxMDMuOGwyNyA0OGMyLjggNSA4LjIgOC4yIDEzLjkgOC4ybDUzLjMgMGM1LjggMCAxMS4xLTMuMSAxMy45LTguMmwyNy00OGMyLjctNC45IDIuNy0xMC44IDAtMTUuN2wtMjctNDhjLTIuOC01LTguMi04LjItMTMuOS04LjJsLTUzLjMgMGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNMMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMzE2LjcgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM0w2OC4zIDg3ek01MDQuMiA0MDMuNmM0LjkgMi43IDEwLjggMi43IDE1LjcgMGw0OC0yN2M1LTIuOCA4LjItOC4yIDguMi0xMy45bDAtNTMuM2MwLTUuOC0zLjEtMTEuMS04LjItMTMuOWwtNDgtMjdjLTQuOS0yLjctMTAuOC0yLjctMTUuNyAwbC00OCAyN2MtNSAyLjgtOC4yIDguMi04LjIgMTMuOWwwIDUzLjNjMCA1LjggMy4xIDExLjEgOC4yIDEzLjlsNDggMjd6TTE5MiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhVXNlclNlY3JldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXNlY3JldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODM3M10sICJmMjFiIiwgIk0xNzEtMTZjLTM2LjQgMC01Ny44IDU4LjMtNjguMyAxMTJMNzIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDMyYzAgMTcgMy4zIDMzLjIgOS4zIDQ4bC05LjMgMCAwIDAtMjAuNSAwYy0xNS4yIDAtMjcuNSAxMi4zLTI3LjUgMjcuNSAwIDMgLjUgNS45IDEuNCA4LjdsMjguOSA4Ni42QzQwLjIgMzc5LjYgMTYgNDI4LjEgMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTU0LjItMjQuMi0xMDIuNy02Mi4zLTEzNS40bDI4LjktODYuNmMuOS0yLjggMS40LTUuNyAxLjQtOC43IDAtMTUuMi0xMi4zLTI3LjUtMjcuNS0yNy41bC0yMC41IDAgMCAwLTkuMyAwYzYtMTQuOCA5LjMtMzEgOS4zLTQ4bDAtMzIgMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzAuNyAwYy0xMC40LTUzLjctMzEuOS0xMTItNjguMy0xMTItOS42IDAtMTkgMy45LTI3LjUgOC4yLTguMiA0LjEtMTguNCA3LjgtMjUuNSA3LjhzLTE3LjMtMy43LTI1LjUtNy44QzE5MC0xMi4xIDE4MC42LTE2IDE3MS0xNnptOTMuNyA0ODQuNGwtMjQuOC03MC45IDI3LjktMzIuNWMyLjctMy4yIDQuMi03LjIgNC4yLTExLjQgMC05LjctNy44LTE3LjUtMTcuNS0xNy41bC02MSAwYy05LjcgMC0xNy41IDcuOC0xNy41IDE3LjUgMCA0LjIgMS41IDguMiA0LjIgMTEuNGwyNy45IDMyLjUtMjQuOCA3MC45LTU3LTE4MC40IDM1LjcgMGMxOC40IDEwLjIgMzkuNSAxNiA2MiAxNnM0My42LTUuOCA2Mi0xNmwzNS43IDAtNTcgMTgwLjR6TTIyNCAyNTZjLTM0LjcgMC02NC4yLTIyLjEtNzUuMy01MyA1LjcgMy4yIDEyLjMgNSAxOS4zIDVsMTIuNCAwYzE2LjUgMCAzMS4xLTEwLjYgMzYuMy0yNi4yIDIuMy03IDEyLjItNyAxNC41IDAgNS4yIDE1LjYgMTkuOSAyNi4yIDM2LjMgMjYuMmwxMi40IDBjNyAwIDEzLjYtMS44IDE5LjMtNS0xMS4xIDMwLjktNDAuNiA1My03NS4zIDUzeiJdCiAgICB9OwogICAgZmFQYWdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sICJmODE1IiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTEyOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJyaWVmY2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxODhdLCAiZjBiMSIsICJNMjAwIDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwLTgwIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwbDAgOTYgNTEyIDAgMC05NmMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNTEyIDMwNGwtMTkyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTExMnoiXQogICAgfTsKICAgIGZhVHJvd2VsQnJpY2tzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyb3dlbC1icmlja3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4YSIsICJNMjI0IDMyYzAtMTEuNS02LjItMjIuMi0xNi4yLTI3LjhzLTIyLjMtNS41LTMyLjIgLjRsLTE2MCA5NkM1LjkgMTA2LjMgMCAxMTYuOCAwIDEyOHM1LjkgMjEuNyAxNS41IDI3LjRsMTYwIDk2YzkuOSA1LjkgMjIuMiA2LjEgMzIuMiAuNFMyMjQgMjM1LjUgMjI0IDIyNGwwLTY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNTYgMCAwLTY0em05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDB6TTAgNDE2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMjI0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTI1NiAweiJdCiAgICB9OwogICAgZmFTb2NrcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2NrcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxMF0sICJmNjk2IiwgIk0yNTIuOCAwTDE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDExMiAwIDAtMTZjMC0xNy41IDQuNy0zMy45IDEyLjgtNDh6TTEyOCAxMTJsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMTUuNCAwIDMwLjUtMy43IDQ0LTEwLjctMTcuNi0yMy45LTI4LTUzLjQtMjgtODUuMyAwLTQ1LjMgMjEuMy04OCA1Ny42LTExNS4ybDY0LTQ4YzQtMyA2LjQtNy44IDYuNC0xMi44bDAtMTI4LTExMiAwem0xNjAgMGwwIDEyOGMwIDIwLjEtOS41IDM5LjEtMjUuNiA1MS4ybC02NCA0OGMtMjQuMiAxOC4xLTM4LjQgNDYuNi0zOC40IDc2LjggMCA1MyA0MyA5NiA5NiA5NiAyMC44IDAgNDEtNi43IDU3LjYtMTkuMmwxMTUuMi04Ni40QzQ2MSAzODIuMiA0ODAgMzQ0LjMgNDgwIDMwNGwwLTE5Mi0xOTIgMHpNNDgwIDY0bDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYgMTkyIDB6Il0KICAgIH07CiAgICBmYVQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExNl0sICI1NCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDEyOCAwIDAgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYU1pY3JvY2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb2NoaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkYiIsICJNMTc2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA1NiAwIDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC01NiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMGMwLTM1LjMtMjguNy02NC02NC02NGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwek0xNjAgMTI4bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2IDQ4bDAgMTYwIDE2MCAwIDAtMTYwLTE2MCAweiJdCiAgICB9OwogICAgZmFUcnVja01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NywgImFtYnVsYW5jZSJdLCAiZjBmOSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTc2IDEzNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQW1idWxhbmNlID0gZmFUcnVja01lZGljYWw7CiAgICBmYU9tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9tIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzI5XSwgImY2NzkiLCAiTTM4OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGwxNiAxNmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtMTYgMTZjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC0xNi0xNmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZsMTYtMTZ6TTE3NiAxNjBjLTEwLjggMC0yMC44IDMuNi0yOC44IDkuNi0xNC4xIDEwLjYtMzQuMiA3LjgtNDQuOC02LjRzLTcuOC0zNC4yIDYuNC00NC44YzE4LjctMTQuMSA0Mi0yMi40IDY3LjItMjIuNCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMiAwIDE3LjItMy45IDMzLjUtMTAuOCA0OGw0OS43IDBjMTIuNyAwIDI0LjktNSAzMy45LTE0LjFsMjAuNy0yMC43YzE4LjctMTguNyA0NC4xLTI5LjMgNzAuNi0yOS4zIDU1LjIgMCA5OS45IDQ0LjcgOTkuOSA5OS45bDAgOTYuMWMwIDU1LjItNDQuOCAxMDAtMTAwIDEwMFMzNTIgNDQzLjIgMzUyIDM4OGwwLTRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDRjMCAxOS45IDE2LjEgMzYgMzYgMzZzMzYtMTYuMSAzNi0zNmwwLTk2LjFjMC0xOS44LTE2LjEtMzUuOS0zNS45LTM1LjktOS41IDAtMTguNiAzLjgtMjUuNCAxMC41bC0yMC43IDIwLjdjLTIxIDIxLTQ5LjQgMzIuOC03OS4xIDMyLjhsLTI2LjggMGMxMi42IDE5LjYgMTkuOSA0Mi44IDE5LjkgNjggMCA3NS4yLTY1IDEzMi0xNDAgMTMyUzQwIDQ2My4yIDQwIDM4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgMzUuMyAzMS43IDY4IDc2IDY4czc2LTMyLjcgNzYtNjgtMzEuNy02OC03Ni02OGwtMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4ek0zMzcuMSA2MC4xYy0xMS0xMy44LTMxLjEtMTYuMi00NS01LjJzLTE2LjIgMzEuMS01LjIgNDVDMzEyLjYgMTMyLjIgMzU0LjQgMTUyIDQwMCAxNTJzODcuNC0xOS44IDExMy4xLTUyLjFjMTEtMTMuOCA4LjctMzQtNS4yLTQ1cy0zNC04LjctNDUgNS4yQzQ1MC4zIDc2IDQyNy41IDg4IDQwMCA4OHMtNTAuMy0xMi02Mi45LTI3Ljl6Il0KICAgIH07CiAgICBmYU1vc3F1aXRvTmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1aXRvLW5ldCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJjIiwgIk01NzYgMzUyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDQ4IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCAxNi0uMSAyLjVDNTk4LjYgNTY2LjYgNTg4LjQgNTc2IDU3NiA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtNDggMCAwIDE2LS4xIDIuNUM1MDIuNiA1NjYuNiA0OTIuNCA1NzYgNDgwIDU3NnMtMjIuNi05LjQtMjMuOS0yMS41bC0uMS0yLjUgMC0xNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC00OC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgNDggMCAwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00MjkuOSAxNi4zYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCAzLjktLjQgNy43LS45IDExLjUtNy4zLTMuNS0xNS4zLTUuOC0yMy44LTYuN0w1NzYgMzA0Yy0xOC41IDAtMzUuMyA3LTQ4IDE4LjQtMTEtOS45LTI1LjEtMTYuNS00MC42LTE4LjFMNDgwIDMwNGMtMzAuMyAwLTU2LjEgMTguNy02Ni44IDQ1LjItMTIuNSA1LTIzLjIgMTMuNC0zMS4xIDI0bC0zMC4yLTQwLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE2LjYgMC0zMC4yLTEyLjYtMzEuOC0yOC43bC0uMi0zLjMgMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zLTEwLjMtNi44LTEzLjctMjAuNS04LjMtMzEuNWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC43LTM4LjMtMi40LTIuNGMtNS4yLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjItMi4xYy01LjctMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44IC4yLTMuMmMxLjEtMTAuNCA3LjItMTkuNCAxNS44LTI0LjRsMC02MC41IC4zLTMuMmMxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjggNy43IDAgMTQuMiA1LjUgMTUuNyAxMi44bC4zIDMuMiAwIDYwLjVjOC43IDUgMTQuOCAxNCAxNS44IDI0LjRsLjIgMy4yIDAgMjguOSA1My40LTQ1LjctMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMnpNNTA0IDQ4OGw0OCAwIDAtNDgtNDggMCAwIDQ4eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uLWJvdHRsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDg1IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVVzZXJzR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1nZWFyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXJzLWNvZyJdLCAiZjUwOSIsICJNMzIwIDIyNGExMDQgMTA0IDAgMSAwIDAtMjA4IDEwNCAxMDQgMCAxIDAgMCAyMDh6TTk2IDIzMmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHpNMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjQtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjh6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwek0xNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTU2LjggMGMtNy4xLTIxLjYtNi4zLTQ0LjQgMTAuNy02NC0xNC0xNi4yLTIwLjUtMzkuNy0xMS40LTYzLjMgNi42LTE3LjEgMTUuOS0zMy4xIDI3LjQtNDcuMyA1LjQtNi42IDExLjYtMTEuNyAxOC4zLTE1LjQtMjIuMS0xMS41LTQ3LjItMTgtNzMuOC0xOC04OC40IDAtMTYwIDcxLjYtMTYwIDE2MHptNDY0LjYtNDQuMWM2LjMtMy42IDkuNS0xMS4xIDYuOC0xOC00LjgtMTIuNC0xMS41LTI0LjEtMTkuOS0zNC40LTQuNi01LjctMTIuNy02LjctMTktMy0yMS44IDEyLjYtNDguNi0yLjgtNDguNi0yOC4xIDAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOS0xMi45LTItMjYuOC0yLTM5LjcgMC03LjIgMS4xLTEyLjEgNy42LTEyLjEgMTQuOSAwIDI1LjItMjYuOCA0MC43LTQ4LjYgMjguMS02LjMtMy42LTE0LjQtMi42LTE5IDMtOC40IDEwLjMtMTUuMSAyMi0xOS45IDM0LjQtMi42IDYuOCAuNSAxNC4zIDYuOCAxNy45IDIxLjkgMTIuNiAyMS45IDQzLjUgMCA1Ni4yLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjkgNC44IDEyLjQgMTEuNSAyNC4xIDE5LjkgMzQuNCA0LjYgNS43IDEyLjcgNi43IDE5IDMgMjEuOC0xMi42IDQ4LjYgMi45IDQ4LjYgMjguMSAwIDcuMyA0LjkgMTMuOCAxMi4xIDE0LjkgMTIuOSAyIDI2LjggMiAzOS43IDAgNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0LjkgMC0yNS4yIDI2LjgtNDAuNyA0OC42LTI4LjEgNi4zIDMuNiAxNC40IDIuNiAxOS0zIDguNC0xMC4zIDE1LjEtMjIgMTkuOS0zNC40IDIuNi02LjgtLjUtMTQuMy02LjgtMTcuOS0yMS45LTEyLjYtMjEuOS00My41IDAtNTYuMnpNNDcyIDQxNmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdCiAgICB9OwogICAgZmFVc2Vyc0NvZyA9IGZhVXNlcnNHZWFyOwogICAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2NSIsICJNMjg4IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjUgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OWMzNS4yLTM5LjkgODYuNy02NSAxNDQtNjUgOSAwIDE3LjggLjYgMjYuNSAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFQYXVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXVzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDhdLCAiZjA0YyIsICJNNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyem0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzNTJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHoiXQogICAgfTsKICAgIGZhU3RhZmZTbmFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFmZi1zbmFrZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJyb2QtYXNjbGVwaXVzIiwgInJvZC1zbmFrZSIsICJzdGFmZi1hZXNjdWxhcGl1cyJdLCAiZTU3OSIsICJNMTkyIDMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDY0IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTE2IDAgMC02NCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAgMTkyIDMyIDBjNTMgMCA5NiA0MyA5NiA5NiAwIDQ3LjYtMzQuNiA4Ny4xLTgwIDk0LjdsMC02N2M5LjYtNS41IDE2LTE1LjkgMTYtMjcuNyAwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTY0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Ny42IDM0LjYtODcuMSA4MC05NC43bDAgNjdjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43IDAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMC0xOTItNzIuNiAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMybC0xNiAwQzIxLjUgMTI4IDAgMTA2LjUgMCA4MFMyMS41IDMyIDQ4IDMybDE0NCAweiJdCiAgICB9OwogICAgZmFSb2RBc2NsZXBpdXMgPSBmYVN0YWZmU25ha2U7CiAgICBmYVJvZFNuYWtlID0gZmFTdGFmZlNuYWtlOwogICAgZmFTdGFmZkFlc2N1bGFwaXVzID0gZmFTdGFmZlNuYWtlOwogICAgZmFQaWdneUJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGlnZ3ktYmFuayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGQzIiwgIk0yODgtMzJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6TTQ4IDMwNGMwLTcwLjEgNDctMTMxLjQgMTE3LjEtMTY0LjkgMjUuMyA0MS4zIDcwLjkgNjguOSAxMjIuOSA2OC45IDU1LjcgMCAxMDQuMS0zMS43IDEyOC03OCAxNS44LTExLjMgMzUuMS0xOCA1Ni0xOGwxOS41IDBjMTAuNCAwIDE4IDkuOCAxNS41IDE5LjlsLTE3LjEgNjguM2M5LjkgMTIuNCAxOC4yIDI1LjcgMjQuNCAzOS44bDIxLjcgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTYuNSAyMi0zOC41IDM5LjYtNjQgNTAuN2wwIDI5LjNjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMzIDBjLTE0LjMgMC0yNi44LTkuNS0zMC44LTIzLjJsLTcuMS0yNC44LTgyLjMgMC03LjEgMjQuOEMyMzUuOCA1MDIuNSAyMjMuMyA1MTIgMjA5IDUxMmwtMzMgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yOS4zQzg3LjUgNDI2IDQ4IDM2OS42IDQ4IDMwNHptMzc2IDE2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhTW9udW1lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9udW1lbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhNiIsICJNMjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw5NSA0N2MtNC4xIDQuMS02LjUgOS40LTcgMTUuMUw1OC40IDQ0OCA0OCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjQgMC0yOS43LTM4NS44Yy0uNC01LjctMi45LTExLjEtNy0xNS4xTDIwOS0zM3pNMTI4IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQW5nbGVzUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGVzLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTg3LCAiYW5nbGUtZG91YmxlLXJpZ2h0Il0sICJmMTAxIiwgIk00MzkuMSAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzcxLjIgMjU2IDIzMy45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE3OS4yIDI1NiA0MS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZVJpZ2h0ID0gZmFBbmdsZXNSaWdodDsKICAgIGZhRGVza3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZXNrdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDIxLCA2MTcwNCwgImRlc2t0b3AtYWx0Il0sICJmMzkwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0NCAwLTE2IDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAtMTYtNDggMTQ0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDk2bDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYURlc2t0b3BBbHQgPSBmYURlc2t0b3A7CiAgICBmYVBsYW5lQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTciLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXQogICAgfTsKICAgIGZhUmV0d2VldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXR3ZWV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzkiLCAiTTExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDMyIDAgMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjI0IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6TTQ1Ny40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzU1Ni45IDM1MiA1NDQgMzUybC0zMiAwIDAtMjI0YzAtNTMtNDMtOTYtOTYtOTZMMjg4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0eiJdCiAgICB9OwogICAgZmFVc2VyR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdlYXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci1jb2ciXSwgImY0ZmUiLCAiTTI1Ni41IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNyAzMDRsNTkuNCAwIDEuNSAwYy0xMi45IDI2LjgtNy44IDU4LjIgMTEuNSA3OS41LTIwLjIgMjIuMy0yNC44IDU1LjgtOS40IDgzLjRsMjIuNSA0MC40Yy45IDEuNiAxLjkgMy4yIDIuOSA0LjdsLTIzNyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3ptMjA1LjktNTYuNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNi4xYzAgMTguOSAyNC4xIDMyLjggNDAuNSAyMy40bDUtMi45YzExLjYtNi43IDI2LjUtMi42IDMzIDkuMWwyMi40IDQwLjJjNi4yIDExLjIgMi42IDI1LjItOC4yIDMybC00LjcgMi45Yy0xNi4yIDEwLjEtMTYuMiAzOS45IDAgNTAuMWw0LjYgMi45YzEwLjggNi44IDE0LjUgMjAuOCA4LjMgMzJMNjA3IDQ4My44Yy02LjUgMTEuNy0yMS40IDE1LjktMzMgOS4xbC00LjktMi45Yy0xNi40LTkuNS00MC41IDQuNS00MC41IDIzLjRsMCA2LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNS45YzAtMTktMjQuMi0zMy00MC43LTIzLjVsLTQuOCAyLjhjLTExLjYgNi43LTI2LjQgMi42LTMzLTkuMWwtMjIuNi00MC40Yy02LjItMTEuMi0yLjYtMjUuMyA4LjMtMzIuMWw0LjQtMi43YzE2LjMtMTAuMSAxNi4zLTQwLjEgMC01MC4ybC00LjUtMi44Yy0xMC45LTYuOC0xNC41LTIwLjktOC4zLTMyLjFsMjIuNS00MC4zYzYuNS0xMS43IDIxLjQtMTUuOCAzMi45LTkuMWw0LjggMi44YzE2LjUgOS41IDQwLjctNC41IDQwLjctMjMuNWwwLTUuOXptOTkuOSAxMzYuMmE1MiA1MiAwIDEgMCAtMTA0IDAgNTIgNTIgMCAxIDAgMTA0IDB6Il0KICAgIH07CiAgICBmYVVzZXJDb2cgPSBmYVVzZXJHZWFyOwogICAgZmFCb3JkZXJBbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLWFsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODRjIiwgIk0zODQgOTZsMCAxMjgtMTI4IDAgMC0xMjggMTI4IDB6bTAgMTkybDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwek0xOTIgMjI0bC0xMjggMCAwLTEyOCAxMjggMCAwIDEyOHpNNjQgMjg4bDEyOCAwIDAgMTI4LTEyOCAwIDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFDb2lucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2lucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTFlIiwgIk0xMjggOTZsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwUzUxMiAzNS44IDUxMiA4MGwwIDE2YzAgMzAuNi00MS4zIDU3LjItMTAyIDcwLjctMi40LTIuOC00LjktNS41LTcuNC04LTE1LjUtMTUuMy0zNS41LTI2LjktNTYuNC0zNS41LTQxLjktMTcuNS05Ni41LTI3LjEtMTU0LjItMjcuMS0yMS45IDAtNDMuMyAxLjQtNjMuOCA0LjEtLjItMS4zLS4yLTIuNy0uMi00LjF6TTQzMiAzNTNsMC00Ni4yYzE1LjEtMy45IDI5LjMtOC41IDQyLjItMTMuOSAxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1em0wLTk2bDAtMzNjMC00LjUtLjQtOC44LTEtMTMgMTUuNS0zLjkgMzAtOC42IDQzLjItMTQuMnMyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1ek0wIDI0MGwwLTE2YzAtNDQuMiA4Ni04MCAxOTItODBzMTkyIDM1LjggMTkyIDgwbDAgMTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDI4NC4yIDAgMjQwem0zODQgOTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDM4MC4yIDAgMzM2bDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNHptMCA4MC42bDAgMTUuNGMwIDQ0LjItODYgODAtMTkyIDgwUzAgNDc2LjIgMCA0MzJsMC0xNS40YzExLjYgOC4xIDI0LjUgMTQuNyAzNy44IDIwLjMgNDEuOSAxNy41IDk2LjUgMjcuMSAxNTQuMiAyNy4xczExMi4zLTkuNyAxNTQuMi0yNy4xYzEzLjItNS41IDI2LjEtMTIuMiAzNy44LTIwLjN6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODk0XSwgImYyMjkiLCAiTTQxNi0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MC43IDAtNTguNyA1OC43LTE3LjQtMTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTcuNCAxNy40LTIzIDIzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDIzLTIzIDE3LjQgMTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ1My4zIDEzNiA1MTIgNzcuMyA1MTIgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNTc2IDBjMC0xNy43LTE0LjMtMzItMzItMzJMNDE2LTMyek0xMjggMzA0YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFuZ2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZS1hbmdsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kcy1oZWxwaW5nIl0sICJmNGM0IiwgIk0yNjguOSA1My4yTDE1Mi4zIDE4Mi44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM0NCA1NzYgMjg4IDU3NiAwIDQ2NCA2NCA0NDAuMiA0OC4xQzQyNC40IDM3LjYgNDA1LjkgMzIgMzg2LjkgMzJsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxNTAuN0wyMjMuNCAzMiAxODMuOCAzMmMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMCAxOTIgMCA1NDQgMTQ0IDQwOCAxNTYuNCA0MTguM2MyMyAxOS4yIDUyIDI5LjcgODEuOSAyOS43bDE1LjcgMC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0MSA0MSA5IDBjMTkuMSAwIDM3LjgtNC4zIDU0LjgtMTIuM0wzNTkgNDA5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzIgMzIgMTcuNS0xNy41YzguOS04LjkgMTEuNS0yMS44IDcuNi0zMy4xbC0xMzcuOS0xMzYuOC0xNC45IDE0LjljLTQ5LjMgNDkuMy0xMjkuMSA0OS4zLTE3OC40IDAtMjMtMjMtMjMuOS01OS45LTIuMi04NHoiXQogICAgfTsKICAgIGZhSGFuZHNIZWxwaW5nID0gZmFIYW5kc2hha2VBbmdsZTsKICAgIGZhQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4NTk1XSwgImYwNjMiLCAiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDQwMi43IDIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM3MC43LTEwNS40LTEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiJdCiAgICB9OwogICAgZmFMb2NhdGlvbkRvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1kb3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibWFwLW1hcmtlci1hbHQiXSwgImYzYzUiLCAiTTAgMTg4LjZDMCA4NC40IDg2IDAgMTkyIDBTMzg0IDg0LjQgMzg0IDE4OC42YzAgMTE5LjMtMTIwLjIgMjYyLjMtMTcwLjQgMzE2LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4eiJdCiAgICB9OwogICAgZmFNYXBNYXJrZXJBbHQgPSBmYUxvY2F0aW9uRG90OwogICAgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZCIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyMjhhMjAgMjAgMCAxIDAgMC00MCAyMCAyMCAwIDEgMCAwIDQwem0wLTE4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQ29va2llQml0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb29raWUtYml0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTY0IiwgIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjYtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45LS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMS01MS41LTguMi05Mi44LTQ3LjEtMTA0LjUtOTcuNC0xLjgtNy42LTgtMTMuNC0xNS43LTE0LjYtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU2NyZXdkcml2ZXJXcmVuY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NyZXdkcml2ZXItd3JlbmNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRvb2xzIl0sICJmN2Q5IiwgIk03MC44LTYuN2M1LjQtNS40IDEzLjgtNi4yIDIwLjItMkwyMDkuOSA3MC41YzguOSA1LjkgMTQuMiAxNS45IDE0LjIgMjYuNmwwIDQ5LjYgOTAuOCA5MC44YzMzLjMtMTUgNzMuOS04LjkgMTAxLjIgMTguNUw1NDIuMiAzODIuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNjAuMSA2MC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwyODguMSAzODRjLTI3LjQtMjcuNC0zMy41LTY3LjktMTguNS0xMDEuMmwtOTAuOC05MC44LTQ5LjYgMGMtMTAuNyAwLTIwLjctNS4zLTI2LjYtMTQuMkwyMy40IDU4LjljLTQuMi02LjMtMy40LTE0LjggMi0yMC4yTDcwLjgtNi43em0xNDUgMzAzLjVjLTYuMyAzNi45IDIuMyA3NS45IDI2LjIgMTA3LjJsLTk0LjkgOTVjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhsMTM1LjQtMTM1LjUgMzUuMiAzNS4xek0zODQuMSAwYzIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMUwzODguOCA5MS4zYy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDU2LjctNTYuN2M3LjYtNy41IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgNDMuMi0xNy4yIDgyLjMtNDUgMTExLjFsLTQ5LjEtNDkuMWMtMzMuMS0zMy03OC41LTQ1LjctMTIxLjEtMzguNGwtNTYuOC01Ni44IDAtMjkuNy0uMi01Yy0uOC0xMi40LTQuNC0yNC4zLTEwLjUtMzQuOSAyOS40LTM1IDczLjQtNTcuMiAxMjIuNy01Ny4zeiJdCiAgICB9OwogICAgZmFUb29scyA9IGZhU2NyZXdkcml2ZXJXcmVuY2g7CiAgICBmYUluZGVudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTI3LjggMjY4LjZMMjUuOCAzNDcuOUMxNS4zIDM1Ni4xIDAgMzQ4LjYgMCAzMzUuM0wwIDE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6Il0KICAgIH07CiAgICBmYUJhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFycyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJuYXZpY29uIl0sICJmMGM5IiwgIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFOYXZpY29uID0gZmFCYXJzOwogICAgZmFIYW5kc1ByYXlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtcHJheWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcmF5aW5nLWhhbmRzIl0sICJmNjg0IiwgIk0yMjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyLjYgODguMi0xMTkuN2MxMy4xLTE3LjggOS4zLTQyLjgtOC41LTU1LjlzLTQyLjgtOS4zLTU1LjkgOC41TDEwNi41IDE0Mi45Qzg5LjMgMTY2LjIgODAgMTk0LjUgODAgMjIzLjZsMCAxMTAuNy01OC4xIDE5LjRDOC44IDM1OCAwIDM3MC4yIDAgMzg0bDAgOTZjMCAxMCA0LjcgMTkuNSAxMi43IDI1LjVzMTguNCA4IDI4LjEgNS4ybDE1NC40LTQ0LjFjNTUtMTUuNyA5Mi44LTY1LjkgOTIuOC0xMjMuMUwyODggMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNzJ6bTE5MiAwbDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTkuNmMwIDU3LjIgMzcuOSAxMDcuNCA5Mi44IDEyMy4xbDE1NC40IDQ0LjFjOS43IDIuOCAyMCAuOCAyOC4xLTUuMlM2NDAgNDkwIDY0MCA0ODBsMC05NmMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtNTguMS0xOS40IDAtMTEwLjdjMC0yOS05LjMtNTcuMy0yNi41LTgwLjdMNDQwLjIgMTYuM0M0MjcuMS0xLjUgNDAyLjEtNS4zIDM4NC4zIDcuOHMtMjEuNiAzOC4xLTguNSA1NS45TDQ2NCAxODMuNCA0NjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQcmF5aW5nSGFuZHMgPSBmYUhhbmRzUHJheWluZzsKICAgIGZhVmlydXNlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1c2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzYiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMzAuNSAzNi45IDQ1LjggNTguNSAyNC4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTIxLjYgMjEuNi02LjMgNTguNSAyNC4yIDU4LjUgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTMwLjUgMC00NS44IDM2LjktMjQuMiA1OC41IDEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwYy0yMS42LTIxLjYtNTguNS02LjMtNTguNSAyNC4yIDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMzAuNS0zNi45LTQ1LjgtNTguNS0yNC4yLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zQzc3LjggMjYwLjkgNjIuNSAyMjQgMzIgMjI0IDE0LjMgMjI0IDAgMjA5LjcgMCAxOTJzMTQuMy0zMiAzMi0zMmMzMC41IDAgNDUuOC0zNi45IDI0LjItNTguNS0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwQzEyMy4xIDc3LjggMTYwIDYyLjUgMTYwIDMyIDE2MCAxNC4zIDE3NC4zIDAgMTkyIDB6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjggNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjQ4IDQwYzAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01MDQgMzg0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVNjaG9vbEZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWZsYWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2ZSIsICJNMjU2LThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNzIgMCAwIDE5LjIgMTI4IDc2LjggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI4LTc2LjggMC05MS4yek0yNDAgMzg0bDAgODAgOTYgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek0xMTIgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0tMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFUcmFkZW1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhZGVtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbODQ4Ml0sICJmMjVjIiwgIk0zNDYuNiAxMTAuMmMtNy44LTExLjctMjIuNC0xNy0zNS45LTEyLjlTMjg4IDExMy45IDI4OCAxMjhsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE1MC4zIDY5LjQgMTA0LjFjNS45IDguOSAxNS45IDE0LjIgMjYuNiAxNC4yczIwLjctNS4zIDI2LjYtMTQuMkw1NDQgMjMzLjcgNTQ0IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTQuMS05LjItMjYuNS0yMi43LTMwLjZzLTI4LjEgMS4xLTM1LjkgMTIuOUw0NDggMjYyLjMgMzQ2LjYgMTEwLjJ6TTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDY0IDAgMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDk2eiJdCiAgICB9OwogICAgZmFGaXJlQnVybmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtYnVybmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZjEiLCAiTTI4MS43IDQ4LjNMMjk0IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNMzIwIDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNOTIuOCAzMjBjMzcuNyA0OC4zIDk2LjEgODAgMTYzLjIgODAgNjYuNSAwIDEyNS4xLTMxLjcgMTYzLTgwbDQ1IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDQuOCAwek00NTYgNDAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZUJlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgInNtaWxlLWJlYW0iXSwgImY1YjgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFTbWlsZUJlYW0yID0gZmFGYWNlU21pbGVCZWFtMjsKICAgIGZhVGVudEFycm93TGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdmIiwgIk0tLjUgMTEzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw3Mi03MmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDMxMC4xIDAgNTQuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDAtLjEgMC0yNjIgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03Mi03MnpNMzcuMSA0NzZMNjAuMyAyOTIuNmMxLjItOS43IDYuOC0xOC4zIDE1LjEtMjMuM0wyMzguOCAxNzBjMTAuMi02LjIgMjIuOS02LjIgMzMuMS0uMWwxNjUuNSA5OS40YzguNCA1IDE0IDEzLjcgMTUuMyAyMy40TDQ3NS45IDQ3NmMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTcxLjkgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN0wyNzUuNCAzNTcuOWMtMS44LTMuNi01LjUtNS45LTkuNS01LjktNS45IDAtMTAuNiA0LjctMTAuNiAxMC42bDAgMTE3LjRjMCAxNy43LTE0LjMgMzItMzIgMzJMNjguOCA1MTJjLTE5LjMgMC0zNC4yLTE2LjktMzEuNy0zNnoiXQogICAgfTsKICAgIGZhUm91dGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm91dGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRkNyIsICJNNTEyIDk2YzAgNTAuMi01OS4xIDEyNS4xLTg0LjYgMTU1LTMuOCA0LjQtOS40IDYuMS0xNC41IDVMMzIwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0yNzYuNCAwYzguNy05LjkgMTkuMy0yMi42IDMwLTM2LjggNi4zLTguNCAxMi44LTE3LjYgMTktMjcuMkw0MTYgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2bDM5LjggMGMtMjEtMzEuNS0zOS44LTY3LjctMzkuOC05NiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2ek0xMTcuMSA0ODkuMWMtMy44IDQuMy03LjIgOC4xLTEwLjEgMTEuM2wtMS44IDItLjItLjJjLTYgNC42LTE0LjYgNC0yMC0xLjgtMjUuMi0yNy40LTg1LTk3LjktODUtMTQ4LjQgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDMwLTIxLjEgNjctNDMuNSA5Ny45LTEwLjcgMTQuNy0yMS43IDI4LTMwLjggMzguNWwtLjYgLjd6TTEyOCAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtdXAiXSwgImYxMDIiLCAiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwem0xNjAgMzUybC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMzAxLjMgMzI5LjQgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7CiAgICBmYUJ1Y2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWNrZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjZiIsICJNNDQzLjcgMjA4YzIuNyA0LjcgNC4zIDEwLjIgNC4zIDE2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC01LjEgMC0yMi40IDIxM2MtMi42IDI0LjQtMjMuMiA0My00Ny44IDQzbC0yMzMuNiAwYy0yNC42IDAtNDUuMi0xOC41LTQ3LjgtNDNMMzcuMSAyNTYgMzIgMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMiAwLTUuOCAxLjYtMTEuMyA0LjMtMTZsNDM5LjQgMHpNMjI0LTE2Yzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMzItNDggMCAwLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzItNDggMCAwLTMyQzgwIDQ4LjUgMTQ0LjUtMTYgMjI0LTE2eiJdCiAgICB9OwogICAgZmFMZXNzVGhhbkVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlc3MtdGhhbi1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTM3IiwgIk00MjYuMSA5NC40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJsLTM4NCAxMjhDOC44IDE2NiAwIDE3OC4yIDAgMTkyczguOCAyNiAyMS45IDMwLjRsMzg0IDEyOGMxNi44IDUuNiAzNC45LTMuNSA0MC41LTIwLjJzLTMuNS0zNC45LTIwLjItNDAuNUwxMzMuMiAxOTIgNDI2LjEgOTQuNHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnoiXQogICAgfTsKICAgIGZhRm9sZGVyQ2xvc2VkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItY2xvc2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxODUiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3NiA1MTIgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NHptNjQtMjg4TDAgMTYwIDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2eiJdCiAgICB9OwogICAgZmFQZXJzb25UaHJvdWdoV2luZG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi10aHJvdWdoLXdpbmRvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNWE5IiwgIk02NCA2NGwyMjQgMCAwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40LTYwLjUgMjQuMi0xMDAuMSA4Mi43LTEwMC4xIDE0Ny45bDAgNzMuOC02NCAwIDAtMzIwem0yODggMGwyMjQgMCAwIDMyMC02Ny43IDAtMy43LTQuNS03NS4yLTkwLjJjLTkuMS0xMC45LTIyLjYtMTcuMy0zNi45LTE3LjNsLTcxLjEgMC00MS02My4xYy0uMy0uNS0uNi0xLTEtMS40IDQ0LjctMjkgNzIuNS03OSA3Mi41LTEzMy42bDAtOS44em03MyAzMjBsLTI2LjYgMCA0Mi43IDY0IDE1MC45IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCA0MDBjMCAyNi41IDIxLjUgNDggNDggNDhsMjYwLjIgMCAzMy4yIDQ5LjhjOS44IDE0LjcgMjkuNyAxOC43IDQ0LjQgOC45czE4LjctMjkuNyA4LjktNDQuNGwtODQuMi0xMjYuMiA3NC42IDAgNDAgNDh6bS0xNTkuNSAwbC03My41IDAgMC03My44YzAtMTAuMiAxLjYtMjAuMSA0LjctMjkuNUwyNjUuNSAzODR6TTE5MiAxMjhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2Nob29sTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZmIiwgIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzMgMCA2MC4yIDI1IDYzLjYgNTcuMi0xNC43LTUuOS0zMC44LTkuMi00Ny42LTkuMi03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTMzMi4zIDM0MS41Yy02LTMuNS0xMi45LTUuNS0yMC4zLTUuNWwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA4OCA5NiAwIDAtNjQuMWMwLTIwLjggNC40LTQwLjUgMTIuMy01OC40ek0xMTIgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0yMjQtNDhhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01NjAgMzUybDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMHptLTExMiAyLjdsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjN6Il0KICAgIH07CiAgICBmYVBlcnNvbkJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTNiIiwgIk0yMDQgNDAuMWMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTQgMTQ0LjFjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTk2LjUgMjg1LjVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw5Ni41IDI4NS41ek02Mi42IDIuN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw2Mi42IDM2LjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek0zNTIuNC0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNNDc4LjcgMjk5LjFsLTQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyNS4yLTMzLjkgNjUtNTMuOSAxMDcuMi01My45czgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42eiJdCiAgICB9OwogICAgZmFMZWZ0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWZ0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtbGVmdCJdLCAiZjMwYSIsICJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzE5MiAxMTUuMSAxOTIgMTI4bDAgNjQgMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzM2IDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7CiAgICBmYUxvY2F0aW9uQ3Jvc3NoYWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1jcm9zc2hhaXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvY2F0aW9uIl0sICJmNjAxIiwgIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAyNTZhMTYwIDE2MCAwIDEgMCAzMjAgMCAxNjAgMTYwIDAgMSAwIC0zMjAgMHptMTYwLTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzOwogICAgZmFQZXJzb25Eb3RzRnJvbUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRvdHMtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpYWdub3NlcyJdLCAiZjQ3MCIsICJNMTg0IDcyYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDI5OS4zYy0xOS45IDIyLjYtMzIgNTIuMi0zMiA4NC43bDAgMzItNjQgMCAwLTMyYzAtMTA2IDg2LTE5MiAxOTItMTkyczE5MiA4NiAxOTIgMTkybDAgMzItNjQgMCAwLTMyYzAtMzIuNS0xMi4xLTYyLjEtMzItODQuN2wwIDExNi43LTE5MiAwIDAtMTE2Ljd6TTIzMiAzODRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OC0xMDRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjQgNDY0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNjQgMTg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYURpYWdub3NlcyA9IGZhUGVyc29uRG90c0Zyb21MaW5lOwogICAgZmFHYXVnZVNpbXBsZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTY2OCwgInRhY2hvbWV0ZXIiLCAidGFjaG9tZXRlci1mYXN0Il0sICJmNjJhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhVGFjaG9tZXRlciA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFUYWNob21ldGVyRmFzdCA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFBbmdsZXNMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTcxLCAiYW5nbGUtZG91YmxlLWxlZnQiXSwgImYxMDAiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwem0zNTItMTYwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjY5LjMgMjU2IDQwNi42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZUxlZnQgPSBmYUFuZ2xlc0xlZnQ7CiAgICBmYVVwRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODU5NywgMTEwMjEsICJhcnJvd3MtYWx0LXYiXSwgImYzMzgiLCAiTTQwNi42IDUwMi42bDk2LTk2YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDM1MiA0ODAgMzUybC02NCAwIDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzIwLTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwek0xNTAuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDY0IDAgMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyMCA2NCAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRWID0gZmFVcERvd247CiAgICBmYUJhdHRlcnlFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LWVtcHR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMCJdLCAiZjI0NCIsICJNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNmw0MTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yMjRjMC04LjgtNy4yLTE2LTE2LTE2bC00MTYgMHpNMzIgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwbC00MTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0yMjR6Il0KICAgIH07CiAgICBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7CiAgICBmYUtleWJvYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrZXlib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzllM10sICJmMTFjIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTYgNjRsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTE3NiAxMjhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDb29raWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29va2llIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgImY1NjMiLCAiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU3RvcHdhdGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3B3YXRjaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCAiZjJmMiIsICJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem04MCAxODRsMCAxMDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRWplY3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5MTY3XSwgImYwNTIiLCAiTTIyNCAzMmMxMy41IDAgMjYuMyA1LjYgMzUuNCAxNS42bDE3NiAxOTJjMTIuOSAxNCAxNi4yIDM0LjMgOC42IDUxLjhTNDE5IDMyMCA0MDAgMzIwTDQ4IDMyMGMtMTkgMC0zNi4zLTExLjItNDMuOS0yOC43cy00LjMtMzcuNyA4LjYtNTEuOGwxNzYtMTkyQzE5Ny43IDM3LjYgMjEwLjUgMzIgMjI0IDMyek0wIDQzMmMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGVEaXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhdGVsbGl0ZS1kaXNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI1XSwgImY3YzAiLCAiTTIzMiAwYzE1NC42IDAgMjgwIDEyNS40IDI4MCAyODAgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMjguMS0xMDMuOS0yMzItMjMyLTIzMi0xMy4zIDAtMjQtMTAuNy0yNC0yNFMyMTguNyAwIDIzMiAwek0yMDggMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0IDEwMS42IDAgMTg0IDgyLjQgMTg0IDE4NCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjYuNCAxNDIuN2M4LjgtMTcuOSAzMi40LTE5LjkgNDYuNS01LjhsMTI4LjUgMTI4LjUgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzIgMTI4LjUgMTI4LjVjMTQuMSAxNC4xIDEyIDM3LjYtNS44IDQ2LjUtMzQuMiAxNi45LTcyLjYgMjYuNC0xMTMuMyAyNi40LTE0MS40IDAtMjU2LTExNC42LTI1Ni0yNTYgMC00MC43IDkuNS03OS4yIDI2LjQtMTEzLjN6Il0KICAgIH07CiAgICBmYUZhY2VSb2xsaW5nRXllczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1yb2xsaW5nLWV5ZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1ODAsICJtZWgtcm9sbGluZy1leWVzIl0sICJmNWE1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDM1MmwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTMyLTEyOGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNHptMTI4IDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNCAwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhTWVoUm9sbGluZ0V5ZXMyID0gZmFGYWNlUm9sbGluZ0V5ZXMyOwogICAgZmFMaXN0Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdC1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0YXNrcyJdLCAiZjBhZSIsICJNMTMzLjggMzYuM2MxMC45IDcuNiAxMy41IDIyLjYgNS45IDMzLjRsLTU2IDgwYy00LjEgNS44LTEwLjUgOS41LTE3LjYgMTAuMVM1MiAxNTggNDcgMTUzTDcgMTEzQy0yLjMgMTAzLjYtMi4zIDg4LjQgNyA3OVMzMS42IDY5LjcgNDEgNzlsMTkuOCAxOS44IDM5LjYtNTYuNmM3LjYtMTAuOSAyMi42LTEzLjUgMzMuNC01Ljl6bTAgMTYwYzEwLjkgNy42IDEzLjUgMjIuNiA1LjkgMzMuNGwtNTYgODBjLTQuMSA1LjgtMTAuNSA5LjUtMTcuNiAxMC4xUzUyIDMxOCA0NyAzMTNMNyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxOS44IDE5LjggMzkuNi01Ni42YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXpNMjI0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE2MCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNjQgMzc2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhVGFza3MgPSBmYUxpc3RDaGVjazsKICAgIGZhU2Fja1htYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhY2steG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU2YSIsICJNMzI4IDExMmwtMTQ0IDAtMzcuMy03NC41Yy0xLjgtMy42LTIuNy03LjYtMi43LTExLjYgMC0xNC4zIDExLjYtMjUuOSAyNS45LTI1LjlMMzQyLjEgMGMxNC4zIDAgMjUuOSAxMS42IDI1LjkgMjUuOSAwIDQtLjkgOC0yLjcgMTEuNkwzMjggMTEyek0xNjkuNiAxNjBsMTcyLjggMCA0OC43IDQwLjZDNDU3LjYgMjU2IDQ5NiAzMzggNDk2IDQyNC41IDQ5NiA0NzIuOCA0NTYuOCA1MTIgNDA4LjUgNTEybC0zMDUuMSAwQzU1LjIgNTEyIDE2IDQ3Mi44IDE2IDQyNC41IDE2IDMzOCA1NC40IDI1NiAxMjAuOSAyMDAuNkwxNjkuNiAxNjB6TTMyMy45IDI4NC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUhhc2h0YWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFzaHRhZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk4XSwgIjIzIiwgIk0yMTQuNyAuN2MxNy4zIDMuNyAyOC4zIDIwLjcgMjQuNiAzOGwtMTkuMSA4OS4zIDEyNi41IDAgMjItMTAyLjdDMzcyLjQgOCAzODkuNC0zIDQwNi43IC43czI4LjMgMjAuNyAyNC42IDM4TDQxMi4yIDEyOCA0ODAgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjcuNCAxMjggNjcuOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOGwxOS4xLTg5LjMtMTI2LjUgMC0yMiAxMDIuN2MtMy43IDE3LjMtMjAuNyAyOC4zLTM4IDI0LjZzLTI4LjMtMjAuNy0yNC42LTM4TDk5LjggMzg0IDMyIDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjcuNC0xMjgtNjcuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgxLjYgMCAyMi0xMDIuN0MxODAuNCA4IDE5Ny40LTMgMjE0LjcgLjd6TTIwNi40IDE5MmwtMjcuNCAxMjggMTI2LjUgMCAyNy40LTEyOC0xMjYuNSAweiJdCiAgICB9OwogICAgZmFUcmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY0Nl0sICJmMjM4IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTkyIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUdhbWVwYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2FtZXBhZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMTFiIiwgIk00NDggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTNTU0IDQ0OCA0NDggNDQ4bC0yNTYgMEM4NiA0NDggMCAzNjIgMCAyNTZTODYgNjQgMTkyIDY0bDI1NiAwek0xOTIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0MCA5NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTY0LTk2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUV4cG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4cG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvdy1yaWdodC1mcm9tLWZpbGUiXSwgImY1NmUiLCAiTTk2LjUgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05NiA3OC4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtNzguMSAwIDAtMTMzLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkxLjIgMTguN0MyNzkuMiA2LjcgMjYzIDAgMjQ2IDBMOTYuNSAwek0zNTggMTc2bC05My41IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MC41IDU4LjUgMzU4IDE3NnpNMjI0LjUgMzI4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEwNCAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUgPSBmYUZpbGVFeHBvcnQ7CiAgICBmYUZhY2VHcmltYWNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW1hY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTYsICJncmltYWNlIl0sICJmNTdmIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNNDAwIDM1MmMwIDI1LjItMTkuNCA0NS44LTQ0IDQ3LjhsMC05NS43YzI0LjYgMiA0NCAyMi43IDQ0IDQ3Ljh6TTI3NiAzMDRsNDAgMCAwIDk2LTQwIDAgMC05NnptLTgwIDk2bDAtOTYgNDAgMCAwIDk2LTQwIDB6bS00MC05NS44bDAgOTUuN2MtMjQuNi0yLTQ0LTIyLjctNDQtNDcuOHMxOS40LTQ1LjggNDQtNDcuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmltYWNlMiA9IGZhRmFjZUdyaW1hY2UyOwogICAgZmFUcmFpblN1YndheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi1zdWJ3YXkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3Vid2F5Il0sICJmMjM5IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw3MiAwIDAtMTYwLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yMTYgMjU2bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNzIgMCAwIDE2MHpNOTYgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMjI0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVN1YndheSA9IGZhVHJhaW5TdWJ3YXk7CiAgICBmYUNpcmNsZURvdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI4MCwgImRvdC1jaXJjbGUiXSwgImYxOTIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhRG90Q2lyY2xlMiA9IGZhQ2lyY2xlRG90MjsKICAgIGZhT2JqZWN0R3JvdXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9iamVjdC1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjQ3IiwgIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwzMzcuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTMzNy4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjF6bTQ0OCAwYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xek0xNDQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTExMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yNTYgMzIwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhU2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGlwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Njc0XSwgImYyMWEiLCAiTTI3MiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2LTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMTA4LjgtMjEuNiA4LjZjLTE0LjggNS45LTIyLjUgMjIuNC0xNy40IDM3LjUgMTAuNCAzMS4zIDI2LjggNTkuMyA0Ny43IDgzLjEgMjAuMS05LjIgNDEuNy0xMy45IDYzLjMtMTQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40bDEuNiAxLjIgMC0yMTUtMTA0IDQxLjYgMC04My4yYzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4My4yLTEwNC00MS42IDAgMjE1IDEuNi0xLjJjMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMjIuMy0uMSA0NC42IDQuNSA2NS4zIDE0IDIwLjktMjMuNyAzNy4zLTUxLjggNDcuNy04My4xIDUtMTUuMi0yLjYtMzEuNi0xNy40LTM3LjVMNTEyIDI1Mi44IDUxMiAxNDRjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDAgMC0xNmMwLTI2LjUtMjEuNS00OC00OC00OEwyNzIgMHpNNDAzLjQgNDc2LjFjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0ODIuMyAxNy42IDQ5MC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTldLCAiNDMiLCAiTTMyOS4xIDE0Mi45Yy02Mi41LTYyLjUtMTU1LjgtNjIuNS0yMTguMyAwcy02Mi41IDE2My44IDAgMjI2LjMgMTU1LjggNjIuNSAyMTguMyAwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTg3LjUgODcuNS0yMjEuMyA4Ny41LTMwOC44IDBzLTg3LjUtMjI5LjMgMC0zMTYuOCAyMjEuMy04Ny41IDMwOC44IDBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVBob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waG9uZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaG9uZS1zcXVhcmUiXSwgImYwOTgiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTg4IDk2LjdjOS44LTIuNyAyMC4xIDIuNCAyNCAxMS44bDIwLjMgNDguN2MzLjQgOC4zIDEuMSAxNy44LTUuOSAyMy41bC0yMi4xIDE4YzE2LjIgMzUuOCA0NC41IDY1IDc5LjYgODIuNGwxOS4zLTIzLjZjNS43LTYuOSAxNS4yLTkuMyAyMy41LTUuOWw0OC43IDIwLjNjOS40IDMuOSAxNC40IDE0LjIgMTEuOCAyNGwtLjggMi44Yy04LjggMzIuMy00MC4xIDU5LjktNzguMiA1MS44LTg3LjUtMTguNS0xNTYuMy04Ny40LTE3NC45LTE3NC45LTguMS0zOC4xIDE5LjUtNjkuNCA1MS44LTc4LjJsMi44LS44eiJdCiAgICB9OwogICAgZmFQaG9uZVNxdWFyZSA9IGZhU3F1YXJlUGhvbmU7CiAgICBmYVJ1bGVyQ29tYmluZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItY29tYmluZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU0NiIsICJNMSA0NDEuN0M1LjUgNDYzLjUgMjQuOCA0ODAgNDggNDgwbDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTY0IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTY0LTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAzLjMgLjMgNi42IDEgOS43eiJdCiAgICB9OwogICAgZmFBcnJvd3NSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MiwgInJlZnJlc2giLCAic3luYyJdLCAiZjAyMSIsICJNNjUuOSAyMjguNWMxMy4zLTkzIDkzLjQtMTY0LjUgMTkwLjEtMTY0LjUgNTMgMCAxMDEgMjEuNSAxMzUuOCA1Ni4yIC4yIC4yIC40IC40IC42IC42bDcuNiA3LjItNDcuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNC0xMS4zLTEwLjdDMzkwLjUgMjguNiAzMjYuNSAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjF6bTQ0My41IDY0YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNTMgMC0xMDEtMjEuNS0xMzUuOC01Ni4yLS4yLS4yLS40LS40LS42LS42bC03LjYtNy4yIDQ3LjkgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMjBjLTguNSAwLTE2LjcgMy40LTIyLjcgOS41Uy0uMSAzNDMuNyAwIDM1Mi4zbDEgMTI3Yy4xIDE3LjcgMTQuNiAzMS45IDMyLjMgMzEuN1M2NS4yIDQ5Ni40IDY1IDQ3OC43bC0uNC01MS41IDEwLjcgMTAuMWM0Ni4zIDQ2LjEgMTEwLjIgNzQuNyAxODAuNyA3NC43IDEyOSAwIDIzNS43LTk1LjQgMjUzLjQtMjE5LjV6Il0KICAgIH07CiAgICBmYVJlZnJlc2ggPSBmYUFycm93c1JvdGF0ZTsKICAgIGZhU3luYyA9IGZhQXJyb3dzUm90YXRlOwogICAgZmFQZXJzb25EcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZHJlc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmVtYWxlIl0sICJmMTgyIiwgIk0xMzYgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTIgMzg0bC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMjcwIDIzNCAzMTMgMzYyLjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0yNS44IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOHoiXQogICAgfTsKICAgIGZhRmVtYWxlID0gZmFQZXJzb25EcmVzczsKICAgIGZhQm9va09wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjE0LCAxMjgzNjZdLCAiZjUxOCIsICJNMjU2IDE0MS4zbDAgMzA5LjMgLjUtLjJDMzExLjEgNDI3LjcgMzY5LjcgNDE2IDQyOC44IDQxNmwxOS4yIDAgMC0zMjAtMTkuMiAwYy00Mi4yIDAtODQuMSA4LjQtMTIzLjEgMjQuNi0xNi44IDctMzMuNCAxMy45LTQ5LjcgMjAuN3pNMjMwLjkgNjEuNUwyNTYgNzIgMjgxLjEgNjEuNUMzMjcuOSA0MiAzNzguMSAzMiA0MjguOCAzMkw0NjQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1LjIgMGMtNTAuNyAwLTEwMC45IDEwLTE0Ny43IDI5LjVsLTEyLjggNS4zYy03LjkgMy4zLTE2LjcgMy4zLTI0LjYgMGwtMTIuOC01LjNDMTg0LjEgNDkwIDEzMy45IDQ4MCA4My4yIDQ4MEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41eiJdCiAgICB9OwogICAgZmFGb2xkZXJUcmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci10cmVlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4MDIiLCAiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCAzOTJjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTg0IDAgMC00OC0xODQgMGMtNC40IDAtOC0zLjYtOC04bDAtMjMyIDE5MiAwIDAtNDgtMTkyIDAgMC04OHpNMzM2IDIyNGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDh6bTAgMjg4bDE5MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTguNi04LjZjLTktOS0yMS4yLTE0LjEtMzMuOS0xNC4xTDMzNiAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFWaXJnbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJnbyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODUwIiwgIk0zNjggMzJjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJsMCAyNi44YzE0LjUtNi45IDMwLjgtMTAuOCA0OC0xMC44IDYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyUzU4OS45IDM4NCA1MjggMzg0bC00OCAwIDAgMzJjMCAxNi42IDEyLjYgMzAuMiAyOC43IDMxLjhsNi42IC4zYzE2LjEgMS42IDI4LjcgMTUuMyAyOC43IDMxLjggMCAxNy43LTE0LjMgMzItMzIgMzItNTMgMC05Ni00My05Ni05NmwwLTMyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDMwNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMwNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDMwNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyMGMwLTE2LjYtMTIuNi0zMC4yLTI4LjctMzEuOGwtNi42LS4zQzQ0LjYgOTQuMiAzMiA4MC42IDMyIDY0IDMyIDQ2LjMgNDYuMyAzMiA2NCAzMiA5MSAzMiAxMTUuMyA0My4xIDEzMi43IDYxIDE1Mi42IDQzIDE3OSAzMiAyMDggMzIgMjM5LjMgMzIgMjY3LjcgNDQuOSAyODggNjUuNyAzMDguMyA0NC45IDMzNi42IDMyIDM2OCAzMnpNNTI4IDIyNGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA0OCA0OCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFCb3hBcmNoaXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC1hcmNoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFyY2hpdmUiXSwgImYxODciLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2TDAgNjR6TTMyIDE3Nmw0NDggMCAwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjQwem0xNTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFBcmNoaXZlID0gZmFCb3hBcmNoaXZlOwogICAgZmFUZW50QXJyb3dEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctZG93bi10by1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1N2UiLCAiTTE4NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMUMxMjAgMi43IDEwOS4zLTggOTYtOFM3MiAyLjcgNzIgMTZsMCAxMDIuMS0zMS0zMUMzMS42IDc3LjcgMTYuNCA3Ny43IDcgODdTLTIuMyAxMTEuNiA3IDEyMWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnpNMTU1LjggMjYwLjZMMTMyLjEgNDQ4IDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTIuOC0uNC01LjUtMS04TDU0OC4yIDI2MC43Yy0xLjItOS43LTYuOS0xOC40LTE1LjMtMjMuNEwzNjcuNCAxMzcuOWMtMTAuMi02LjEtMjIuOS02LjEtMzMuMSAuMUwxNzAuOSAyMzcuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zek00NDggNDQ4bC05Ny4xIDAgMC0xNDkuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOUw0NDggNDQ4eiJdCiAgICB9OwogICAgZmFRcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMjkiLCAiTTY0IDE2MGw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHpNNjQgNDE2bDY0IDAgMC02NC02NCAwIDAgNjR6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnpNMzIwIDk2bDAgNjQgNjQgMCAwLTY0LTY0IDB6TTMwNCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTI4OCAzNTJhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzJ6bTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptLTMyIDMyYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6Il0KICAgIH07CiAgICBmYURyYWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcmFnb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDldLCAiZjZkNSIsICJNMzUyIDEyNC41bC01MS45LTEzYy02LjUtMS42LTExLjMtNy4xLTEyLTEzLjhzMi44LTEzLjEgOC43LTE2LjFsNDAuOC0yMC40LTQzLjMtMzIuNWMtNS41LTQuMS03LjgtMTEuMy01LjYtMTcuOVMyOTcuMSAwIDMwNCAwTDQ2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40bDU3LjYgNzYuOGM2LjIgOC4zIDkuNiAxOC40IDkuNiAyOC44IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43bC0xMy4zLTEzLjMtMzIgMCAwIDIxLjVjMCAyNC44IDEyLjggNDcuOSAzMy44IDYxLjFsMTA2LjYgNjYuNmMzMi4xIDIwLjEgNTEuNiA1NS4yIDUxLjYgOTMuMSAwIDYwLjYtNDkuMSAxMDkuOC0xMDkuOCAxMDkuOEwzMi4zIDUxMmMtMy4zIDAtNi42LS40LTkuNi0xLjQtOS4yLTIuOC0xNi43LTkuNi0yMC40LTE4LjYtMS4zLTMuMy0yLjItNi45LTIuMy0xMC43LS4yLTMuNyAuMy03LjMgMS4zLTEwLjcgMi44LTkuMiA5LjYtMTYuNyAxOC42LTIwLjQgMy0xLjIgNi4yLTIgOS41LTIuMkw0MzMuMyA0MTJjOC4zLS43IDE0LjctNy43IDE0LjctMTYuMSAwLTQuMy0xLjctOC40LTQuNy0xMS40bC00NC40LTQ0LjRjLTMwLTMwLTQ2LjktNzAuNy00Ni45LTExMy4xbDAtMTAyLjV6TTUxMiA3Mi4zYzAtLjEgMC0uMiAwLS4zczAtLjIgMC0uM2wwIC42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3IDAgMjcuNWMwIDMyLjggOC40IDY0LjggMjQgOTNsLTIzMiAwYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlTLjEgMjMyLjggNS40IDIyOEwxMzAuOSAxMTYuNXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1lbmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4OTg3LCAiaG91cmdsYXNzLTMiXSwgImYyNTMiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlsLTY3LjkgNjcuOS02Ny45LTY3LjlDMTA2LjEgMTI0LjkgOTYgMTAwLjQgOTYgNzV6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczMyID0gZmFIb3VyZ2xhc3NFbmQ7CiAgICBmYUdyaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzU4MTE5LCAiZ3JpZC1ob3Jpem9udGFsIiwgImdyaXAtaG9yaXpvbnRhbCJdLCAiZjU4ZCIsICJNODggOTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek0yODAgMjI0bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMTkyIDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDE5MmwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6TTI4MCAyODhjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek04OCA0MTZsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQweiJdCiAgICB9OwogICAgZmFHcmlkSG9yaXpvbnRhbCA9IGZhR3JpcDsKICAgIGZhR3JpcEhvcml6b250YWwgPSBmYUdyaXA7CiAgICBmYUJvcmRlclRvcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLXRvcC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvcmRlci1zdHlsZSJdLCAiZjg1MyIsICJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4em0xMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMnptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTE2MCAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6TTM4NCAxOTJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMzIgMTYwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQm9yZGVyU3R5bGUgPSBmYUJvcmRlclRvcExlZnQ7CiAgICBmYUxpc3RVbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0LXVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtZG90cyJdLCAiZjBjYSIsICJNNDggMTQ0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTQ4IDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTk2IDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFMaXN0RG90cyA9IGZhTGlzdFVsOwogICAgZmFQZW9wbGVSb2JiZXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1yb2JiZXJ5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzYiLCAiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42TDMyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDUuN2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMCAuNiAwIDE5MS40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI3LjMgMTMgMjAuNWM1LjkgOS4yIDE2LjEgMTQuOSAyNyAxNC45bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwLjQgMC0zNy40LTU4LjlDMTU3LjYgMTQyIDEzMi4xIDEyOCAxMDQuNyAxMjhMNzIgMTI4eiJdCiAgICB9OwogICAgZmFNb2JpbGVCdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLWJ1dHRvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTBiIiwgIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6TTE5MiA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25BWiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLWFzYyIsICJzb3J0LWFscGhhLWRvd24iXSwgImYxNWQiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTgyLTM0MC45YzUwLjcgMTAxLjMgNzcuMyAxNTQuNyA4MCAxNjAgNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtNy4yLTE0LjMtODguNCAwLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45YzIuNy01LjMgMjkuMy01OC43IDgwLTE2MCA1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43czIzLjIgNi44IDI4LjYgMTcuN3pNMzg0IDEzNS42bC0yMC4yIDQwLjQgNDAuNCAwLTIwLjItNDAuNHpNMjg4IDMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDM5Ny4zIDQxNiA0NDggNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlsNzMuNC03My40LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYUFzYyA9IGZhQXJyb3dEb3duQVo7CiAgICBmYVNvcnRBbHBoYURvd24gPSBmYUFycm93RG93bkFaOwogICAgZmFNb25leUJpbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGQ2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0xOTIgMjRjMCA0LjQtMy42IDguMS04IDcuNS0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OHpNNjQgMzI4YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHptOC0xMzYuNWMtNC40IC41LTgtMy4xLTgtNy41bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNXptMzY4IDEyOWM0LjQtLjUgOCAzLjEgOCA3LjVsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjV6Il0KICAgIH07CiAgICBmYUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtaW51cy1jaXJjbGUiXSwgImYwNTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjggMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWludXNDaXJjbGUgPSBmYUNpcmNsZU1pbnVzOwogICAgZmFBcnJvd1BvaW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJtb3VzZS1wb2ludGVyIl0sICJmMjQ1IiwgIk03Ny4zIDIuNWM4LjEtNC4xIDE3LjktMy4yIDI1LjEgMi4zbDMyMCAyMzkuOWM4LjMgNi4yIDExLjYgMTcgOC40IDI2LjhzLTEyLjQgMTYuNC0yMi44IDE2LjRsLTE1Mi4zIDAgODguOSAxNzcuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC04OC45LTE3Ny43LTkxLjMgMTIxLjhjLTYuMiA4LjMtMTcgMTEuNi0yNi44IDguNFM2NCA0MzQuMyA2NCA0MjRMNjQgMjRjMC05LjEgNS4xLTE3LjQgMTMuMy0yMS41eiJdCiAgICB9OwogICAgZmFNb3VzZVBvaW50ZXIgPSBmYUFycm93UG9pbnRlcjsKICAgIGZhU3F1YXJlU2hhcmVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc2hhcmUtbm9kZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic2hhcmUtYWx0LXNxdWFyZSJdLCAiZjFlMSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzY4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NC0xNS40IDAtMjkuNS01LjQtNDAuNi0xNC41bC04NS4zIDQ2LjUgODUuMyA0Ni41YzExLTkuMSAyNS4yLTE0LjUgNDAuNi0xNC41IDM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjRjMC0yLjUgLjEtNC45IC40LTcuM0wxNTguNSAzMDBjLTExLjcgMTIuMy0yOC4yIDIwLTQ2LjUgMjAtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlQWx0U3F1YXJlID0gZmFTcXVhcmVTaGFyZU5vZGVzOwogICAgZmFUYWJsZUNlbGxzTGFyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtbGFyZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgtbGFyZ2UiXSwgImYwMDkiLCAiTTM4NCA5NmwtMTI4IDAgMCAxMjggMTI4IDAgMC0xMjh6bTY0IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjh6TTY0IDI4OGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHptMTI4LTY0bDAtMTI4LTEyOCAwIDAgMTI4IDEyOCAwem02NCA2NGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHoiXQogICAgfTsKICAgIGZhVGhMYXJnZSA9IGZhVGFibGVDZWxsc0xhcmdlOwogICAgZmFDYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2F0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDA4XSwgImY2YmUiLCAiTTY0IDk2YzUzIDAgOTYgNDMgOTYgOTZsMCA4NS44YzI5LjctNDQuNyA3Ny44LTc2LjIgMTMzLjQtODQgMjUuNiA2MCA4NS4yIDEwMi4xIDE1NC42IDEwMi4xIDEwLjkgMCAyMS42LTEuMSAzMi0zLjFMNDgwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0MC44LTEzNiAxMDguOCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNDQgMGMtNTMgMC05Ni00My05Ni05NmwwLTIyNGMwLTE2LjYtMTIuNi0zMC4yLTI4LjctMzEuOGwtNi42LS4zQzQ0LjYgMTU4LjIgMzIgMTQ0LjYgMzIgMTI4IDMyIDExMC4zIDQ2LjMgOTYgNjQgOTZ6TTUzMy44IDMuMkM1NDQuMi01LjUgNTYwIDEuOSA1NjAgMTUuNUw1NjAgMTI4YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzMzNiAxODkuOSAzMzYgMTI4bDAtMTEyLjVjMC0xMy42IDE1LjgtMjEgMjYuMi0xMi4zTDQxNiA0OCA0ODAgNDggNTMzLjggMy4yek00MDAgMTA4YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptOTYgMGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyV2VlayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci13ZWVrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ODQiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDB6Il0KICAgIH07CiAgICBmYUNvZGVDb21wYXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtY29tcGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTNhIiwgIk0xOTguOCAxLjhjOS0zLjcgMTkuMy0xLjcgMjYuMiA1LjJsNTYgNTZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTU2IDU2Yy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4yUzE4NCAxNDUuNyAxODQgMTM2bDAtMjQtMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMTQuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNMNjQgMTQ0YzAtNTMgNDMtOTYgOTYtOTZsMjQgMCAwLTI0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnpNMzkyIDgwYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6bS04IDczLjNjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zTDQ0OCAzNjhjMCA1My00MyA5Ni05NiA5NmwtMjQgMCAwIDI0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTU2LTU2Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw1Ni01NmM2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzMyOCAzNjYuMyAzMjggMzc2bDAgMjQgMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIxNC43ek03MiA0MzJhMjQgMjQgMCAxIDAgNDggMCAyNCAyNCAwIDEgMCAtNDggMHoiXQogICAgfTsKICAgIGZhTGVvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODRhIiwgIk0yNjAgMGM3Mi45IDAgMTMyIDU5LjEgMTMyIDEzMmwwIDUuNC0uMSAxLjQtMjMuOCAyNzBjLjQgMjEuNyAxOC4yIDM5LjIgNDAgMzkuMiAyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0MGMwIDU3LjQtNDYuNiAxMDQtMTA0IDEwNFMzMDQgNDY1LjQgMzA0IDQwOGwwLTEuNCAuMS0xLjQgMjMuOS0yNzAuNiAwLTIuNmMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDRjMCAzLjcgLjMgNy4zIC44IDExbDI5LjcgMTkzLjRjLjkgNi4xIDEuNCAxMi4yIDEuNCAxOC40bDAgOS4yYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzAgNDI5LjkgMCAzNjggNTAuMSAyNTYgMTEyIDI1NmMxMS43IDAgMjMgMS44IDMzLjcgNS4xTDEyOS42IDE1Ni43Yy0xLjEtNi44LTEuNi0xMy44LTEuNi0yMC43bDAtNEMxMjggNTkuMSAxODcuMSAwIDI2MCAwek0xMTIgMzIwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnoiXQogICAgfTsKICAgIGZhUm9hZENpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjYiLCAiTTI4Ny45IDMybC03Ni4yIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjYgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OS4yYzM1LjItNDAgODYuNy02NS4yIDE0NC4yLTY1LjIgOSAwIDE3LjggLjYgMjYuNCAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjUgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFQYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFsbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ODIiLCAiTTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjQtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwem05NiA2NGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6bTE5MiAwbDEyOCAwIDAgNjQtMTI4IDAgMC02NHoiXQogICAgfTsKICAgIGZhQ2FrZUNhbmRsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FrZS1jYW5kbGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODc0LCAiYmlydGhkYXktY2FrZSIsICJjYWtlIl0sICJmMWZkIiwgIk04Ni40LTEwLjVMNjEuOCAzMS42QzU4IDM4LjEgNTYgNDUuNiA1NiA1My4yTDU2IDU2YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDIzMy42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41ek0zMTcuOCAzMS42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMzYxLjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjVMMzE3LjggMzEuNnpNMTI4IDE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjVDMjYuNyAyMjYuNiAwIDI2Mi4yIDAgMzA0bDAgMjAuOGMyMC45IDEuMyA0MS42IDcuMyA2MC4zIDE4bDcuMSA0LjFjMjYuMyAxNSA1OC45IDEzLjQgODMuNi00LjIgNDMuNy0zMS4yIDEwMi4zLTMxLjIgMTQ2IDAgMjQuNiAxNy42IDU3LjMgMTkuMyA4My42IDQuMmw3LjEtNC4xYzE4LjctMTAuNyAzOS4zLTE2LjcgNjAuMy0xOGwwLTIwLjhjMC00MS44LTI2LjctNzcuNC02NC05MC41bDAtNTMuNWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OHpNNDQ4IDM3M2MtMTIuNyAxLjItMjUuMSA1LTM2LjUgMTEuNWwtNy4xIDQuMWMtNDIuNiAyNC4zLTk1LjQgMjEuNy0xMzUuMy02LjgtMjctMTkuMy02My4yLTE5LjMtOTAuMiAwLTM5LjkgMjguNS05Mi43IDMxLjItMTM1LjMgNi44bC03LjEtNC4xQzI1LjEgMzc4IDEyLjcgMzc0LjEgMCAzNzNsMCA3NWMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTc1eiJdCiAgICB9OwogICAgZmFCaXJ0aGRheUNha2UgPSBmYUNha2VDYW5kbGVzOwogICAgZmFDYWtlID0gZmFDYWtlQ2FuZGxlczsKICAgIGZhQnVnU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVnLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0OTAiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyNDEuOCAxNzYgMzQ0IDE3NmMxNC4yIDAgMjcuNyAyLjggNDAgOGwxMDguOC04MS42YzE0LjEtMTAuNiAzNC4yLTcuNyA0NC44IDYuNHM3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgOS41LS44IDE4LjctMi40IDI3LjhMNTY5IDUwMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5LjFDLTIuMy0uMy0yLjMtMTUuNSA3LTI0Ljl6TTM5OC4yIDQ2OGMtMjMuMiAyMi4xLTUzIDM3LjItODYuMiA0Mi4ybDAtMTI4LjQgODYuMiA4Ni4yek0yNjQgMzMzLjhsMCAxNzYuNGMtNTEuMi03LjctOTQuNS0zOS43LTExNy43LTgzLjlMODMuMiA0NzMuNmMtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw4My40LTYyLjVjLS4xLTIuNi0uMi01LjItLjItNy45bDAtMzItOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5OC44IDBjMy4zLTEzLjkgOS4zLTI2LjcgMTcuNi0zNy44TDI2NCAzMzMuOHpNMzU1LjYgMTI4bC04Mi40IDAtNzIuMy03Mi4zQzIxNi4xIDIyLjggMjQ5LjQgMCAyODggMCAzNDEgMCAzODQgNDMgMzg0IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40eiJdCiAgICB9OwogICAgZmFUYXJwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhcnAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3YiIsICJNNDQ4IDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ5LjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNMMzg2LjcgNDI5LjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMHptNS41IDIwOEwzNjAgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6TTk2IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURpYWdyYW1QcmVkZWNlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXByZWRlY2Vzc29yIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzciLCAiTTI4OS4yIDEzNy45YzIuNS02IDguMy05LjkgMTQuOC05LjlsNDAgMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05OCAwYzEuMyA1LjEgMiAxMC41IDIgMTZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDI0IDQwIDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTY0IDY0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjR6TTM4NCAzNTJsLTMyMCAwIDAgNjQgMzIwIDAgMC02NHptNjQgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjR6Il0KICAgIH07CiAgICBmYUZhY2VGbHVzaGVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZsdXNoZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjMsICJmbHVzaGVkIl0sICJmNTc5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xNjggMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bS04LTk2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhRmx1c2hlZDIgPSBmYUZhY2VGbHVzaGVkMjsKICAgIGZhRGlhZ3JhbU5leHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1uZXh0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzYiLCAiTTM4NCAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDAgMCA2NC0zMiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMyOTQuNSAyODggMjg4IDI4OGwtMzIgMCAwLTY0IDEyOCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NGwtMzQgMGM1LjYgMjEuNy0uNSA0NS4xLTE2LjcgNjEuM2wtNjQgNjRjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC02NC02NEM5OC42IDMzMy4xIDkyLjQgMzA5LjcgOTggMjg4bC0zNCAweiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWMiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MyIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDQwMHoiXQogICAgfTsKICAgIGZhU3BhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJiIiwgIk0xNjkuNyAyMjcuNWMzNC4zIDE4LjcgNjQuNSA0NC4xIDg4LjggNzQuNSAxMS4xIDEzLjkgMjEgMjguOSAyOS40IDQ0LjggOC41LTE1LjkgMTguMy0zMC44IDI5LjQtNDQuOCAyNC4zLTMwLjUgNTQuNS01NS45IDg4LjgtNzQuNSA0MS43LTIyLjcgODkuNC0zNS41IDEzOS43LTM1LjVsOS45IDBjMTEuMSAwIDIwLjEgOSAyMC4xIDIwLjEgMCAxNDgtMTE5LjkgMjY3LjktMjY3LjkgMjY3LjlsLTQwLjIgMEMxMTkuOSA0ODAgMCAzNjAuMSAwIDIxMi4xIDAgMjAxIDkgMTkyIDIwLjEgMTkybDkuOSAwYzUwLjQgMCA5OC4xIDEyLjggMTM5LjcgMzUuNXpNMzAzLjkgMzhjMTYuOSAxNS45IDYxLjQgNjMuNCA4OSAxNDIuMy00MC4xIDIwLjItNzUuOCA0OC4yLTEwNC45IDgyLjEtMjkuMi0zMy45LTY0LjgtNjEuOC0xMDQuOS04Mi4xIDI3LjYtNzguOSA3Mi4yLTEyNi40IDg5LTE0Mi4zIDQuMy00LjEgMTAtNiAxNS45LTZzMTEuNiAyIDE1LjkgNnoiXQogICAgfTsKICAgIGZhQXJpZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJpZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTg0NiIsICJNNDAxLjYgMGM2MS4zIDAgMTEwLjQgNTAuMyAxMTAuNCAxMTEgMCAyOS40LTExLjYgNTcuOS0zMi42IDc4LjhsLTguOCA4LjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMiAwcy0xMi41LTMyLjggMC00NS4ybDguOC04LjhjOC44LTguOCAxMy44LTIxIDEzLjgtMzMuNiAwLTI1LjktMjEuMS00Ny00Ni40LTQ3LTIyLjUgMC00MS43IDE2LjEtNDUuNyAzOC4yTDI4Ny41IDQ4NS42YzAgLjEtLjEgLjMtLjEgLjQtLjIgLjgtLjMgMS42LS41IDIuMy0uMSAuMy0uMSAuNS0uMiAuNy0uMiAuNi0uNCAxLjMtLjcgMS45LS4yIC41LS40IDEtLjYgMS41LS4xIC4zLS4zIC42LS40IC45LTEuNiAzLjUtMy44IDYuNS02LjQgOS4yLTIgMi00LjIgMy43LTYuNiA1LjEtLjIgLjEtLjMgLjItLjUgLjMtLjcgLjQtMS40IC43LTIuMSAxLS4zIC4xLS42IC4zLS45IC40LS41IC4yLTEgLjQtMS41IC42LS42IC4yLTEuMiAuNS0xLjkgLjctLjIgLjEtLjUgLjItLjcgLjItLjggLjItMS42IC40LTIuMyAuNS0uMiAwLS4zIC4xLS40IC4xLS4yIDAtLjQgMC0uNiAuMS0uNyAuMS0xLjMgLjItMiAuMi0uNCAwLS44IC4xLTEuMiAuMS0uNiAwLTEuMiAuMS0xLjggLjEtLjYgMC0xLjIgMC0xLjgtLjEtLjQgMC0uOC0uMS0xLjItLjEtLjctLjEtMS40LS4xLTItLjItLjIgMC0uNCAwLS42LS4xLS4yIDAtLjMtLjEtLjUtLjEtLjgtLjItMS42LS4zLTIuMy0uNS0uMy0uMS0uNS0uMS0uOC0uMi0uNi0uMi0xLjMtLjQtMS45LS43LS41LS4yLTEtLjQtMS41LS42LS4zLS4xLS42LS4zLS45LS40LS43LS4zLTEuNC0uNy0yLjEtMS0uMi0uMS0uMy0uMi0uNS0uMy0yLjQtMS40LTQuNy0zLjEtNi42LTUuMS0yLjYtMi42LTQuOC01LjctNi40LTkuMi0uMS0uMi0uMi0uMy0uMi0uNWwtLjUtMS4xYy0uMS0uMy0uMi0uNS0uMy0uOC0uMi0uNi0uNS0xLjItLjctMS45LS4xLS4yLS4yLS41LS4yLS43LS4yLS44LS40LTEuNi0uNS0yLjMgMC0uMS0uMS0uMy0uMS0uNEwxNTYgMTAyLjJjLTQtMjIuMS0yMy4yLTM4LjItNDUuNy0zOC4yLTI1LjMgMC00Ni40IDIxLjEtNDYuNCA0NyAwIDEyLjYgNSAyNC44IDEzLjggMzMuNmw4LjggOC44YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4ycy0zMi44IDEyLjUtNDUuMiAwbC04LjgtOC44QzExLjYgMTY4LjkgMCAxNDAuMyAwIDExMSAwIDUwLjMgNDkuMSAwIDExMC40IDAgMTYzLjggMCAyMDkuNiAzOC4zIDIxOSA5MWwzNyAyMDcgMzctMjA3YzkuNC01Mi42IDU1LjItOTEgMTA4LjctOTF6Il0KICAgIH07CiAgICBmYUJhcnNQcm9ncmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXByb2dyZXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhc2tzLWFsdCJdLCAiZjgyOCIsICJNMjg4IDE2MGw5NiAwIDAtNjQtOTYgMCAwIDY0ek0wIDE2MEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggMjI0Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2ek0xNjAgNDE2bDIyNCAwIDAtNjQtMjI0IDAgMCA2NHpNMCA0MTZsMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNnoiXQogICAgfTsKICAgIGZhVGFza3NBbHQgPSBmYUJhcnNQcm9ncmVzczsKICAgIGZhSGVhcnRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlLXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5NywgIm1hcnMtc3Ryb2tlLWgiXSwgImYyMmIiLCAiTTMyMC41IDI1NmExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAwek0yMDguNSA4MGM4Ni4zIDAgMTU4LjEgNjIuMSAxNzMuMSAxNDQuMSAxLS4xIDEuOS0uMSAyLjktLjFsMTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2MS40IDAtMjIuNC0yOGMtMTEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVsNjQgODBjOS4zIDExLjcgOS4zIDI4LjMgMCA0MGwtNjQgODBjLTExIDEzLjgtMzEuMiAxNi00NSA1cy0xNi0zMS4yLTUtNDVsMjIuNC0yOC02MS40IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2IDBjLTEgMC0xLjkgMC0yLjktLjEtMTUgODItODYuOCAxNDQuMS0xNzMuMSAxNDQuMS05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlSCA9IGZhTWFyc1N0cm9rZVJpZ2h0OwogICAgZmFUb3dlck9ic2VydmF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLW9ic2VydmF0aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1ODYiLCAiTTIwOS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNS42IDExLjItMTYuOSAxNy43LTI4LjYgMTcuN2wwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMyAwIDMyIDE5MiA0NSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NSAwIDMyLTE5Mi0xMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYy0xMS43IDAtMjMtNi41LTI4LjYtMTcuNy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzEwLjcgNDQ4bC04Ni43LTYxLjktODYuNyA2MS45IDE3My40IDB6bS0xNTMtMTkybC0zLjUgMjEuMiA2OS45IDQ5LjkgNjkuOS00OS45LTMuNS0yMS4yLTEzMi43IDB6bS0xMi4zIDczLjlsLTEwLjEgNjAuNiA0Ny41LTMzLjktMzcuNC0yNi43em0xMTkuOSAyNi43bDQ3LjUgMzMuOS0xMC4xLTYwLjYtMzcuNCAyNi43ek0xNTIgMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhU3RlcmxpbmdTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0ZXJsaW5nLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxNjMsICJnYnAiLCAicG91bmQtc2lnbiJdLCAiZjE1NCIsICJNOTEuMyAyODhsLTM0LjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMS40IDBDMzcuMyAxNDcuMyAxMDUuMSA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTU3LjMgMC05NC43IDU5LjktNjkuNyAxMTEuNCAzLjYgNy40IDYuNiAxNC45IDkuMSAyMi42bDE0OS41IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0MS4yIDBjMSAzNS4zLTguNyA3MC42LTI4LjkgMTAwLjlsLTE4LjEgMjcuMSAyMTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNzIgMGMtMTEuOCAwLTIyLjYtNi41LTI4LjItMTYuOXMtNS0yMyAxLjYtMzIuOWw1MS4yLTc2LjhjMTMuMS0xOS42IDE5LjItNDIuNiAxOC4yLTY1LjR6Il0KICAgIH07CiAgICBmYUdicCA9IGZhU3RlcmxpbmdTaWduOwogICAgZmFQb3VuZFNpZ24gPSBmYVN0ZXJsaW5nU2lnbjsKICAgIGZhRmF1Y2V0RHJpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQtZHJpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4OF0sICJlMDA2IiwgIk0yMjQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDk2IDAgMCA2NC0xOC43IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40TDEyOCAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwMC4xIDBjMjAuMiAyOSA1My45IDQ4IDkxLjkgNDhzNzEuNy0xOSA5MS45LTQ4bDM2LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC04OC40LTcxLjYtMTYwLTE2MC0xNjBsLTMyIDAtMjIuNi0yMi42Yy02LTYtMTQuMS05LjQtMjIuNi05LjRsLTE4LjcgMCAwLTY0IDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQzNi44IDQ1NS40bC0xOC4yIDQyLjRjLTEuOCA0LjEtMi43IDguNi0yLjcgMTMuMWwwIDEuMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMS4yYzAtNC41LS45LTguOS0yLjctMTMuMWwtMTguMi00Mi40Yy0xLjktNC41LTYuMy03LjQtMTEuMi03LjRzLTkuMiAyLjktMTEuMiA3LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWluZm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaW5mby1jaXJjbGUiXSwgImYwNWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS04IDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4OCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87CiAgICBmYUZlYXRoZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTcxOF0sICJmNTJkIiwgIk0zNTIgMGM0MSAwIDgwLjMgMTYuMyAxMDkuMiA0NS4ybDUuNSA1LjVjMjkgMjkgNDUuMyA2OC4zIDQ1LjMgMTA5LjIgMCAyNC4xLTUuNyA0Ny42LTE2LjIgNjguOC0xLjkgMy43LTUuMyA2LjUtOS4zIDcuN0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzMi4yIDBjMTQuMyAwIDIxLjQgMTcuMiAxMS4zIDI3LjNsLTIyLjQgMjIuNGMtMS45IDEuOS00LjIgMy4yLTYuNyA0bC04MSAyNC4zYy0zLjkgMS4yLTYuNSA0LjctNi41IDguOCAwIDUuMSA0LjEgOS4yIDkuMiA5LjIgMTMuMiAwIDE4LjkgMTUuNyA3LjggMjIuOS00MS4xIDI2LjYtODkuMyA0MS4xLTEzOSA0MS4xbC04NiAwLTQ4IDQ4Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMNzkuNSAzMzYuNWMtNS43IDUuNy0xNS41IDEuNy0xNS41LTYuNCAwLTY3LjkgMjctMTMzIDc1LTE4MUwyNDIuOCA0NS4yQzI3MS43IDE2LjMgMzExIDAgMzUyIDB6Il0KICAgIH07CiAgICBmYUJvd2xSaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2wtcmljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMmViIiwgIk0xNzYgNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTI0IDQ4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE2MGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHpNMjI0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTk2IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTEwNCA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0yMTYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI5NiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTM5MiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yOTYgMTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3RhckhhbGZTdHJva2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3Rhci1oYWxmLWFsdCJdLCAiZjVjMCIsICJNMjg4LjEgMzUzLjZjMTAgMCAxOS45IDIuMyAyOSA3bDc0LjQgMzcuOS0xMy04Mi41Yy0zLjItMjAuMiAzLjUtNDAuNyAxNy45LTU1LjJsNTktNTkuMS04Mi41LTEzLjFjLTIwLjItMy4yLTM3LjctMTUuOS00Ny0zNC4xbC0zOC03NC40IDAgMjczLjZ6TTQ1Ny40IDQ4OWMtNy4zIDUuMy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXMxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4yeiJdCiAgICB9OwogICAgZmFTdGFySGFsZkFsdDIgPSBmYVN0YXJIYWxmU3Ryb2tlMjsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0ZW1wZXJhdHVyZS1kb3duIl0sICJlMDNmIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDM5LjEgMzEwLjZjLTYgNi0xNC4xIDkuNC0yMi42IDkuNHMtMTYuNi0zLjQtMjIuNi05LjRsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDkuNCA5LjQgMC0xNzguN2MwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC02NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVEb3duID0gZmFUZW1wZXJhdHVyZUFycm93RG93bjsKICAgIGZhTWFza1ZlbnRpbGF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzay12ZW50aWxhdG9yIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjQiLCAiTTE1Mi4yIDE5MmMtMTUuNCAzOC4zLTI0LjIgNzcuMi0yNC4yIDEwOC44IDAgMTMuMyAxLjUgMjYuMiA0LjQgMzguN2wtMTctMy40Yy0yOS45LTYtNTEuNC0zMi4yLTUxLjQtNjIuOGwwLTgxLjMgODguMiAwem0zMi45LTY0TDY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MS4zYzAgNjEgNDMuMSAxMTMuNSAxMDIuOSAxMjUuNWw2Ni4zIDEzLjNjMTguNyAyMi4xIDQyLjkgNDAgNzAuOCA1MS44bDAtODcuOGMtMTAuMS0xNC4yLTE2LTMxLjMtMTYtNDkuNyAwLTQ5LjUgNDMtMTM0LjQgOTYtMTM0LjQgNTIuNSAwIDk2IDg0LjkgOTYgMTM0LjQgMCAxOC40LTUuOSAzNS40LTE2IDQ5LjZsMCA4Ny43YzI3LjYtMTEuOCA1MS43LTI5LjYgNzAuNC01MS42bDY2LjctMTMuM2M1OS44LTEyIDEwMi45LTY0LjUgMTAyLjktMTI1LjVsMC04MS4zYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMjEuNSAwYy0zNC44LTU0LjItODIuNS05Ni0xMzQuNS05Ni01Mi42IDAtMTAwLjIgNDEuOC0xMzQuOSA5NnptMzAyLjUgNjRsODguNCAwIDAgODEuM2MwIDMwLjUtMjEuNSA1Ni44LTUxLjQgNjIuOGwtMTcgMy40YzIuOS0xMi40IDQuNS0yNS40IDQuNS0zOC43IDAtMzEuNi04LjktNzAuNS0yNC40LTEwOC44ek0yODggMzIwbDAgMTkyIDY0IDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUZpbGVWaWRlbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS12aWRlbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM4IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODAgMzA0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI0IDM1IDM1YzMuMiAzLjIgNy41IDUgMTIgNSA5LjQgMCAxNy03LjYgMTctMTdsMC05NC4xYzAtOS40LTcuNi0xNy0xNy0xNy00LjUgMC04LjggMS44LTEyIDVsLTM1IDM1IDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd1RyZW5kRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10cmVuZC1kb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTciLCAiTTM4NCAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4Mi43LTE2OS40LTE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMjQyLjcgNTQuNiAxMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEwzMjAgMjA1LjMgNDY2LjcgMzUyIDM4NCAzNTJ6Il0KICAgIH07CiAgICBmYU9pbENhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvaWwtY2FuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2MTMiLCAiTTMyMCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMi0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC44YzAgMTkgMTEuMiAzNi4yIDI4LjUgNDMuOWw2Ny41IDMwIDAgMjEuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNTkuMSAwYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkyIDM5Ny41IDE2Ni44Yy04LjktNC40LTE4LjctNi44LTI4LjYtNi44bC04MC45IDAgMC0zMiAzMiAwek05NiAyMDhsMCA4Ni4xLTQ4LTIxLjMgMC02NC44IDQ4IDB6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5Qm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1jYXJyeS1ib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicGVvcGxlLWNhcnJ5Il0sICJmNGNlIiwgIk02NC0zMkE1NiA1NiAwIDEgMSA2NCA4MCA1NiA1NiAwIDEgMSA2NC0zMnpNMCAxNzEuMWMwLTMyLjYgMjYuNS01OS4xIDU5LjEtNTkuMSAyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNS44IDguMiAxNS4xIDEzLjEgMjUuMSAxMy40bDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxMC0uMyAxOS4zLTUuMiAyNS4xLTEzLjRsNDguNy02OC4yYzEzLjYtMTkuMSAzNS42LTMwLjQgNTkuMS0zMC40IDMyLjYgMCA1OS4xIDI2LjUgNTkuMSA1OS4xTDU3NiAyNzJjMCAzMC4yLTE0LjIgNTguNy0zOC40IDc2LjhsLTc2LjggNTcuNmMtOC4xIDYtMTIuOCAxNS41LTEyLjggMjUuNmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0zMC4yIDE0LjItNTguNyAzOC40LTc2LjhsNDEuNi0zMS4yIDAtODAuMS0yLjggMy45Yy0xOCAyNS4yLTQ3LjEgNDAuMi03OC4xIDQwLjJMMzUyIDI4OGMtLjYgMC0xLjMgMC0xLjktLjEtLjYgMC0xLjMgLjEtMS45IC4xbC0xMjAuNCAwYy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzE3Ny44IDM3My4zIDE5MiA0MDEuOCAxOTIgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDM4LjQgMzQ4LjhDMTQuMiAzMzAuNyAwIDMwMi4yIDAgMjcyTDAgMTcxLjF6TTAgMzc5LjNjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMNjQgNDI4IDY0IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDUyOS43IDAgNTEyTDAgMzc5LjN6TTU2OCAyNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6bTggNDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODQgNTQuNC00MC44YzMuMy0yLjUgNi41LTUuMSA5LjYtNy45TDU3NiA1MTJ6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDsKICAgIGZhQ2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhaXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk2ODFdLCAiZjZjMCIsICJNMTUyIDI1NmwwLTE4MS44Yy0yNC41IDIwLjUtNDAgNTEuNC00MCA4NS44bDAgOTYgNDAgMHptNDggMGw0OCAwIDAtMjA1LjRjLTcuNy0xLjctMTUuOC0yLjYtMjQtMi42cy0xNi4zIC45LTI0IDIuNkwyMDAgMjU2ek0yOTYgNzQuMmwwIDE4MS44IDQwIDAgMC05NmMwLTM0LjQtMTUuNS02NS4yLTQwLTg1Ljh6TTMyIDI1NmwzMiAwIDAtOTZDNjQgNzEuNiAxMzUuNiAwIDIyNCAwUzM4NCA3MS42IDM4NCAxNjBsMCA5NiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTI1NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhV2luZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3MmUiLCAiTTI4OCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDMyIDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjggMGM0OC42IDAgODgtMzkuNCA4OC04OFM0MDguNiAwIDM2MCAwTDMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNjQgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTI4IDUxMmw0MCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4cy0zOS40LTg4LTg4LTg4TDMyIDMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTGF5ZXJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXllci1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWZkIiwgIk0yMzIuNSA1LjJjMTQuOS02LjkgMzIuMS02LjkgNDcgMGwyMTguNiAxMDFjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEwxMy45IDE0OS44QzUuNCAxNDUuOCAwIDEzNy4zIDAgMTI4czUuNC0xNy45IDEzLjktMjEuOEwyMzIuNSA1LjJ6TTQ4LjEgMjE4LjRsMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMjc3LjhDNS40IDI3My44IDAgMjY1LjMgMCAyNTZzNS40LTE3LjkgMTMuOS0yMS44bDM0LjEtMTUuOHpNMTMuOSAzNjIuMmwzNC4xLTE1LjggMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgNDA1LjhDNS40IDQwMS44IDAgMzkzLjMgMCAzODRzNS40LTE3LjkgMTMuOS0yMS44eiJdCiAgICB9OwogICAgZmFIZWFkU2lkZU1hc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLW1hc2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2MyIsICJNNDQ1LjkgMTkzYy0uMS0uNC0uMi0uOS0uMi0xLjMtMTUuNy0xMDguNC0xMDguOS0xOTEuNy0yMjEuNy0xOTEuNy04NSAwLTE1OSA0Ny40LTE5Ni45IDExNy4yTDI4My4zIDI4OCA0NTYgMjg4IDQ0Mi45IDMzNiAzMzYgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDk4LjIgMC04LjcgMzItODkuNSAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDgwLjYgMGMtNi43IDE5LjEtMjQuOCAzMi00NS4zIDMyTDI4OCA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTA0LjUtMjQ3LjUtMTY1QzMgMTgyLjEgMCAyMDIuNyAwIDIyNCAwIDI3OCAxOS4xIDMyNy41IDUwLjkgMzY2LjIgNTguOSAzNzUuOSA2NCAzODcuOCA2NCA0MDAuNEw2NCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTI3LjMgMCAuNyAwIDEzMS4zIDBjNDQuOSAwIDgzLjgtMzEuMSA5My42LTc0LjlsMzMuOS0xNTAuM2MzLjMtMTQuNC0uMy0yOS41LTkuNy00MUw0NDUuOSAxOTN6TTI4OCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhSGFuZHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1sYW5ndWFnZSIsICJzaWduaW5nIl0sICJmMmE3IiwgIk01MTIgMTYwbC0uMSA3Mi42YzAgNDQuOC0xNy42IDg3LjEtNDcuOSAxMTguNC0uMy03Ny00MC4xLTE0OC40LTEwNS40LTE4OS4zbC0xLjktMS4yYzIuNS0zLjcgMi44LTguNiAuNC0xMi43bC02Mi0xMDcuNGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhTMzMwIDUgMzM2LjYgMTYuNWw2OCAxMTcuOCAwIDAgMCAwIDQzLjMgNzUgLjEtNDkuM2MwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yOTguNCAxMjQuMmMtMTQuMS04LjgtMjkuOC0xMi43LTQ1LjItMTIuMUwyMTYuNyA0OC44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOGw2Ny4xIDExNi4yLTI3LTE2Ljl6TTIxMS45IDg4LjVsMTYuNCAyOC40Yy0xNS4xIDUuNS0yOC42IDE1LjYtMzguMyAyOS43bC0xOS43LTM0LjJjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDEyLjUgMjEuN2MtMiA4LjYtMi41IDE3LjUtMS43IDI2LjFsLTQuMyAwIDAgMC0zNC40IDAtMTMuNy0yMy44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjI4LjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkMzODQuNyAyMzQuNyA0MTYgMjkxLjIgNDE2IDM1MmwwIDhjMCA4My45LTY4LjEgMTUyLTE1MiAxNTJMODggNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDkyIDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMNTYgNDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEyNCAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDI0IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNTYgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiAyOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTM2IDAgMCAwIDAgMCA5My4yIDAtNDYuMi0yOC45Yy0xNS05LjQtMTkuNS0yOS4xLTEwLjItNDQuMXoiXQogICAgfTsKICAgIGZhU2lnbkxhbmd1YWdlID0gZmFIYW5kczsKICAgIGZhU2lnbmluZyA9IGZhSGFuZHM7CiAgICBmYVRhYmxldHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGV0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkwIiwgIk00OTUuMyA3Ni42Yy00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDI0OGMtNyA3LTYgMTguNyAyLjcgMjMuMyAyMC4xIDEwLjcgNDMgMTYuNyA2Ny40IDE2LjcgNzkuNSAwIDE0NC02NC41IDE0NC0xNDQgMC0yNC4zLTYtNDcuMy0xNi43LTY3LjR6TTI0MC43IDIxMS40YzQuNiA4LjcgMTYuMyA5LjcgMjMuMyAyLjdMNDM4LjEgNDBjNy03IDYtMTguNy0yLjctMjMuMy0yMC4xLTEwLjctNDMtMTYuNy02Ny40LTE2LjctNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCAyNC4zIDYgNDcuMyAxNi43IDY3LjR6TTE0NCAyMjRDNzkuMiAyMjQgMjQuNCAyNjYuOCA2LjMgMzI1LjYgMy40IDMzNS4xIDExIDM0NCAyMC45IDM0NGwyNDYuMiAwYzkuOSAwIDE3LjUtOC45IDE0LjYtMTguNC0uOS0zLTEuOS01LjktMy04LjctMzcuNC0xOC4xLTY4LTQ4LTg3LTg0LjgtMTQuOS01LjItMzAuOS04LjEtNDcuNi04LjF6TTI4MS43IDQxMC40YzIuOS05LjUtNC43LTE4LjQtMTQuNi0xOC40TDIwLjkgMzkyQzExIDM5MiAzLjQgNDAwLjkgNi4zIDQxMC40IDI0LjQgNDY5LjIgNzkuMiA1MTIgMTQ0IDUxMnMxMTkuNi00Mi44IDEzNy43LTEwMS42eiJdCiAgICB9OwogICAgZmFXZWlnaHRIYW5naW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlaWdodC1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1Y2QiLCAiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMybC0yMS44IDBjLTI4LjMgMC01My4yIDE4LjUtNjEuMyA0NS42TDIuNCA0NDAuMkMuOCA0NDUuNCAwIDQ1MC44IDAgNDU2LjIgMCA0ODcgMjUgNTEyIDU1LjggNTEybDQwMC40IDBjMzAuOCAwIDU1LjgtMjUgNTUuOC01NS44IDAtNS40LS44LTEwLjgtMi40LTE2bC04MC0yNjYuNWMtOC4xLTI3LjEtMzMtNDUuNi02MS4zLTQ1LjZsLTIxLjggMHoiXQogICAgfTsKICAgIGZhRGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTIyXSwgImY1MjIiLCAiTTE0MS40IDIuM0MxMDMtOCA2My41IDE0LjggNTMuMyA1My4yTDIuNSAyNDIuN0MtNy44IDI4MS4xIDE1IDMyMC42IDUzLjQgMzMwLjlsMTg5LjUgNTAuOGMzOC40IDEwLjMgNzcuOS0xMi41IDg4LjItNTAuOWw1MC44LTE4OS41YzEwLjMtMzguNC0xMi41LTc3LjktNTAuOS04OC4yTDE0MS40IDIuM3ptMjMgMjA1LjdhMzIgMzIgMCAxIDEgNTUuNC0zMiAzMiAzMiAwIDEgMSAtNTUuNCAzMnpNNzkuMiAyMjAuM2EzMiAzMiAwIDEgMSAzMiA1NS40IDMyIDMyIDAgMSAxIC0zMi01NS40em0xODUgOTYuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40em05LTIwOC40YTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bS0xMjEgMTQuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40ek00MTggMTkyTDM3Ny40IDM0My4yYy0xNy4yIDY0LTgzIDEwMi0xNDcgODQuOWwtMzguMy0xMC4zIDAgMzAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw0MTggMTkyeiJdCiAgICB9OwogICAgZmFTaG9wU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hvcC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdG9yZS1hbHQtc2xhc2giXSwgImUwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtMTkwLjNjMjYuOC0xLjkgNDgtMjQuMyA0OC01MS42IDAtOC0xLjktMTYtNS41LTIzLjJMNDk3LjcgNjcuNEM0ODYuOCA0NS43IDQ2NC43IDMyIDQ0MC40IDMyTDEzNS42IDMyYy0xMC43IDAtMjEgMi43LTMwLjIgNy42TDQxLTI0Ljl6TTMyMS44IDI1Nkw0NDggMjU2IDQ0OCAzODIuMiAzMjEuOCAyNTZ6TTM1MiA0MjEuOGwtNjQtNjQgMCAxMC4yYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTExMiA1OC4yIDAtMTM0LjgtMTM0LjgtMjkuOSA1OS45Yy0zLjYgNy4yLTUuNSAxNS4xLTUuNSAyMy4yIDAgMjcuMyAyMS4yIDQ5LjcgNDggNTEuNkw2NCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMC4yeiJdCiAgICB9OwogICAgZmFTdG9yZUFsdFNsYXNoID0gZmFTaG9wU2xhc2g7CiAgICBmYVNvcnREb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWRlc2MiXSwgImYwZGQiLCAiTTMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzMzMuNSA5LjQgMzQyLjZsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OHoiXQogICAgfTsKICAgIGZhU29ydERlc2MgPSBmYVNvcnREb3duOwogICAgZmFQZXNldGFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlc2V0YS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjEiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCAxMDQtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiA5NiAwYzgwLjIgMCAxNDYuNi01OSAxNTguMi0xMzZsMjUuOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNS44IDBDMzg2LjYgOTEgMzIwLjIgMzIgMjQwIDMyTDExMiAzMnpNMzMzIDE2OGwtMTg5IDAgMC03MiA5NiAwYzQ0LjcgMCA4Mi4zIDMwLjYgOTMgNzJ6TTE0NCAyMTZsMTg5IDBjLTEwLjcgNDEuNC00OC4yIDcyLTkzIDcybC05NiAwIDAtNzJ6Il0KICAgIH07CiAgICBmYVRhYmxldFNjcmVlbkJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtc2NyZWVuLWJ1dHRvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YWJsZXQtYWx0Il0sICJmM2ZhIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTI1NiA0MzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDY0bC0zMjAgMCAwIDI4OCAzMjAgMCAwLTI4OHoiXQogICAgfTsKICAgIGZhVGFibGV0QWx0ID0gZmFUYWJsZXRTY3JlZW5CdXR0b247CiAgICBmYUhhbmRIb2xkaW5nRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1kb2xsYXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZC1ob2xkaW5nLXVzZCJdLCAiZjRjMCIsICJNMjg4LTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyLTEuOCAwYy0zNi42IDAtNjYuMiAyOS43LTY2LjIgNjYuMiAwIDMzLjQgMjQuOSA2MS42IDU4IDY1LjdsNjEgNy42YzUuMSAuNiA5IDUgOSAxMC4yIDAgNS43LTQuNiAxMC4yLTEwLjIgMTAuMkwyNDAgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOHMxMi41IDI4IDI4IDI4bDI0IDAgMCAxMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTIgMS44IDBjMzYuNiAwIDY2LjItMjkuNyA2Ni4yLTY2LjIgMC0zMy40LTI0LjktNjEuNi01OC02NS43bC02MS03LjZjLTUuMS0uNi05LTUtOS0xMC4yIDAtNS43IDQuNi0xMC4yIDEwLjItMTAuMkwzMjggNzZjMTUuNSAwIDI4LTEyLjUgMjgtMjhzLTEyLjUtMjgtMjgtMjhsLTE2IDAgMC0xMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjsKICAgIGZhU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODczNywgInNoaWVsZC1ibGFuayJdLCAiZjEzMiIsICJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAweiJdCiAgICB9OwogICAgZmFTaGllbGRCbGFuayA9IGZhU2hpZWxkOwogICAgZmFGYWNlTGF1Z2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2giXSwgImY1OTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxhdWdoMiA9IGZhRmFjZUxhdWdoMjsKICAgIGZhSGFuZHNIb2xkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRjMiIsICJNODAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwUzAgODEuOSAwIDEwNEwwIDMyNS41YzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45TDEyOCA0OTMuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDY2LjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTc4LjljMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTI1LjMtMjUuMyAwIDBjLTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2MyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMiAxMSAxMSA5LjIgMjkuMi0zLjcgMzcuOC05LjcgNi41LTIyLjcgNS4yLTMxLTMuMUw5OC43IDMwOS41Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zTDgwIDEwNHptNDgwIDBsMCAxNjAuMmMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNTEuMSA1MS4xYy04LjMgOC4zLTIxLjMgOS42LTMxIDMuMS0xMi45LTguNi0xNC43LTI2LjktMy43LTM3LjggNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMmwwIDAtMjUuMyAyNS4zYy0yMSAyMS0zMi44IDQ5LjUtMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2Ni43IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsOTkuOS05OS45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlMNjQwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHoiXQogICAgfTsKICAgIGZhQ2FydFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtc2hvcHBpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3MjIsICJzaG9wcGluZy1jYXJ0Il0sICJmMDdhIiwgIk0yNC0xNkMxMC43LTE2IDAtNS4zIDAgOFMxMC43IDMyIDI0IDMybDQ1LjMgMGMzLjkgMCA3LjIgMi44IDcuOSA2LjZsNTIuMSAyODYuM2M2LjIgMzQuMiAzNiA1OS4xIDcwLjggNTkuMUw0NTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNTUuOSAwYy0xMS42IDAtMjEuNS04LjMtMjMuNi0xOS43bC01LjEtMjguMyAzMDMuNiAwYzMwLjggMCA1Ny4yLTIxLjkgNjIuOS01Mi4yTDU2OC45IDY5LjlDNTcyLjYgNTAuMiA1NTcuNSAzMiA1MzcuNCAzMmwtNDEyLjcgMC0uNC0yYy00LjgtMjYuNi0yOC00Ni01NS4xLTQ2TDI0LTE2ek0yMDggNTEyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFTaG9wcGluZ0NhcnQgPSBmYUNhcnRTaG9wcGluZzsKICAgIGZhT2N0YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvY3RhZ29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzIxXSwgImYzMDYiLCAiTTE4OC42IC4xYy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0wxOS4yIDE0M0M3LjIgMTU1IC41IDE3MS4yIC41IDE4OC4ybDAgMTM1LjZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMMTQzLjQgNDkzLjJjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN2wxMzUuNiAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My42IDM2OWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zbDAtMTM1LjZjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzY5LjUgMTguOGMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wxODguNiAuMXoiXQogICAgfTsKICAgIGZhSGFuZFBvaW50ZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjVhIiwgIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE0OC4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjIgMjAuNiAwIDM4LjIgMTMgNDUgMzEuMiA4LjgtOS4zIDIxLjItMTUuMiAzNS0xNS4yIDI1LjMgMCA0NiAxOS41IDQ3LjkgNDQuMyA4LjUtNy43IDE5LjgtMTIuMyAzMi4xLTEyLjMgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTg1LjMgMGMtNSAwLTkuOS0uMy0xNC43LTEtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjcgMC0zMjIuN3pNMjQwIDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdCiAgICB9OwogICAgZmFSZWdpc3RlcmVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWdpc3RlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgImYyNWQiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDAgMTQ0bDgwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyOC45LTE3IDUzLjgtNDEuNiA2NS4zbDMwLjIgNTAuM2M2LjggMTEuNCAzLjEgMjYuMS04LjIgMzIuOXMtMjYuMSAzLjEtMzIuOS04LjJsLTQxLTY4LjMtMzQuNCAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTcyIDk2bDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMCAwIDQ4IDQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlU2lnbmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLXNpZ25hbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDEyIiwgIk01MTUuOSAyNDBsLTE5LjkgMCAwIDE0NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTM3IDBjLTI0LTkxLjctOTMuNS0xNjUtMTgzLTE5NC4zbDAtMTMuNy0xOS45IDBjLTE1LjUgMC0yOC4xLTEyLjYtMjguMS0yOC4xIDAtNy42IDMuMS0xNC45IDguNi0yMC4yTDI3Ni41LTQuOUMyODMuOS0xMiAyOTMuNy0xNiAzMDQtMTZzMjAuMSA0IDI3LjUgMTEuMUw1MzUuNCAxOTEuN2M1LjUgNS4zIDguNiAxMi42IDguNiAyMC4yIDAgMTUuNS0xMi42IDI4LjEtMjguMSAyOC4xek0yODAgMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHpNMjQgMjg4YzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMCA0MDhjMC0xMy4zIDEwLjctMjQgMjQtMjQgNzUuMSAwIDEzNiA2MC45IDEzNiAxMzYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODgtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuZ2xhZGVzaGktdGFrYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUyZTYiLCAiTTM2IDMyLjNDMTguNCAzMC4xIDIuNCA0Mi41IC4zIDYwUzEwLjUgOTMuNiAyOCA5NS44bDcuOSAxYzE2IDIgMjggMTUuNiAyOCAzMS44bDAgMzEuNS00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAxNzZjMCA1MyA0MyA5NiA5NiA5NmwzMiAwYzEwNiAwIDE5Mi04NiAxOTItMTkybDAtMzJjMC01My00My05Ni05Ni05NmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMS41QzEyOCA4MC4xIDkyIDM5LjIgNDMuOSAzMy4ybC03LjktMXoiXQogICAgfTsKICAgIGljb25zMyA9IHsKICAgICAgZmEwLAogICAgICBmYTEsCiAgICAgIGZhMiwKICAgICAgZmEzLAogICAgICBmYTQsCiAgICAgIGZhNSwKICAgICAgZmE2LAogICAgICBmYTcsCiAgICAgIGZhOCwKICAgICAgZmE5LAogICAgICBmYURvbGxhclNpZ24sCiAgICAgIGZhRG9sbGFyLAogICAgICBmYVVzZCwKICAgICAgZmFEb2csCiAgICAgIGZhVHJ1Y2tNb3ZpbmcsCiAgICAgIGZhUm90YXRlLAogICAgICBmYVN5bmNBbHQsCiAgICAgIGZhU3F1YXJlTWludXM6IGZhU3F1YXJlTWludXMyLAogICAgICBmYU1pbnVzU3F1YXJlOiBmYU1pbnVzU3F1YXJlMiwKICAgICAgZmFBbGlnbkp1c3RpZnksCiAgICAgIGZhQ2FsZW5kYXJDaGVjazogZmFDYWxlbmRhckNoZWNrMiwKICAgICAgZmFGYWNlS2lzczogZmFGYWNlS2lzczIsCiAgICAgIGZhS2lzczogZmFLaXNzMiwKICAgICAgZmFLaXRjaGVuU2V0LAogICAgICBmYURuYSwKICAgICAgZmFDaGlsZFJlYWNoaW5nLAogICAgICBmYVBhc3RlOiBmYVBhc3RlMiwKICAgICAgZmFGaWxlQ2xpcGJvYXJkOiBmYUZpbGVDbGlwYm9hcmQyLAogICAgICBmYU1ldGVvciwKICAgICAgZmFHZWFycywKICAgICAgZmFDb2dzLAogICAgICBmYUZpbGVDaXJjbGVQbHVzLAogICAgICBmYUljaWNsZXMsCiAgICAgIGZhQXJyb3dUcmVuZFVwLAogICAgICBmYUhleGFnb25Ob2Rlc0JvbHQsCiAgICAgIGZhUXVlc3Rpb24sCiAgICAgIGZhSGFuZHNCb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSwKICAgICAgZmFGaWxlQXJyb3dEb3duLAogICAgICBmYUZpbGVEb3dubG9hZCwKICAgICAgZmFQZXJzb25Cb290aCwKICAgICAgZmFMb2N1c3QsCiAgICAgIGZhUmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0LAogICAgICBmYVRydWNrRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ01lZGljYWwsCiAgICAgIGZhSGFuZFBvaW50TGVmdDogZmFIYW5kUG9pbnRMZWZ0MiwKICAgICAgZmFDYWxjdWxhdG9yLAogICAgICBmYU1pbnVzLAogICAgICBmYVN1YnRyYWN0LAogICAgICBmYUFycm93VXBaQSwKICAgICAgZmFTb3J0QWxwaGFVcEFsdCwKICAgICAgZmFNaWNyb3Bob25lU2xhc2gsCiAgICAgIGZhU3F1YXJlUGVuLAogICAgICBmYVBlblNxdWFyZSwKICAgICAgZmFQZW5jaWxTcXVhcmUsCiAgICAgIGZhSGFuZEZpc3QsCiAgICAgIGZhRmlzdFJhaXNlZCwKICAgICAgZmFDb21tZW50U21zLAogICAgICBmYVNtcywKICAgICAgZmFTaW1DYXJkLAogICAgICBmYVNjYWxlQmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlLAogICAgICBmYUNhciwKICAgICAgZmFBdXRvbW9iaWxlLAogICAgICBmYUNyb3BTaW1wbGUsCiAgICAgIGZhQ3JvcEFsdCwKICAgICAgZmFNZWRhbCwKICAgICAgZmFTY3JvbGwsCiAgICAgIGZhRmlsZUV4Y2VsOiBmYUZpbGVFeGNlbDIsCiAgICAgIGZhRmlsdGVyLAogICAgICBmYURydW0sCiAgICAgIGZhTWFwUGluLAogICAgICBmYVNjYWxlVW5iYWxhbmNlZEZsaXAsCiAgICAgIGZhQmFsYW5jZVNjYWxlUmlnaHQsCiAgICAgIGZhQXJyb3dzVG9DaXJjbGUsCiAgICAgIGZhRW52ZWxvcGU6IGZhRW52ZWxvcGUyLAogICAgICBmYUJhYnksCiAgICAgIGZhU3F1YXJlQ2FyZXREb3duOiBmYVNxdWFyZUNhcmV0RG93bjIsCiAgICAgIGZhQ2FyZXRTcXVhcmVEb3duOiBmYUNhcmV0U3F1YXJlRG93bjIsCiAgICAgIGZhVGVudCwKICAgICAgZmFBLAogICAgICBmYVBhcmFjaHV0ZUJveCwKICAgICAgZmFDYXJ0QXJyb3dEb3duLAogICAgICBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNsb3VkQXJyb3dVcCwKICAgICAgZmFDbG91ZFVwbG9hZCwKICAgICAgZmFDbG91ZFVwbG9hZEFsdCwKICAgICAgZmFBdCwKICAgICAgZmFJbmRpYW5SdXBlZVNpZ24sCiAgICAgIGZhSW5kaWFuUnVwZWUsCiAgICAgIGZhSW5yLAogICAgICBmYVRydWNrOiBmYVRydWNrMiwKICAgICAgZmFDaGFsa2JvYXJkVXNlciwKICAgICAgZmFDaGFsa2JvYXJkVGVhY2hlciwKICAgICAgZmFVc2VyQ2hlY2ssCiAgICAgIGZhVXNlck5pbmphLAogICAgICBmYVBsYW50V2lsdCwKICAgICAgZmFXZWlnaHRTY2FsZSwKICAgICAgZmFXZWlnaHQsCiAgICAgIGZhQ2FyZXRSaWdodCwKICAgICAgZmFGbG9yaW5TaWduLAogICAgICBmYUJlbGw6IGZhQmVsbDIsCiAgICAgIGZhTGFyaVNpZ24sCiAgICAgIGZhTWlsbFNpZ24sCiAgICAgIGZhUGVyc29uU25vd2JvYXJkaW5nLAogICAgICBmYVNub3dib2FyZGluZywKICAgICAgZmFUdHksCiAgICAgIGZhVGVsZXR5cGUsCiAgICAgIGZhVXNlcnNSZWN0YW5nbGUsCiAgICAgIGZhTW9iaWxlLAogICAgICBmYU1vYmlsZUFuZHJvaWQsCiAgICAgIGZhTW9iaWxlUGhvbmUsCiAgICAgIGZhQXJyb3dzVHVyblRvRG90cywKICAgICAgZmFFeGNsYW1hdGlvbiwKICAgICAgZmFDaHVyY2gsCiAgICAgIGZhVG9nZ2xlT2ZmLAogICAgICBmYVNob2VQcmludHMsCiAgICAgIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVdhbGxldCwKICAgICAgZmFNZXNzYWdlOiBmYU1lc3NhZ2UyLAogICAgICBmYUNvbW1lbnRBbHQ6IGZhQ29tbWVudEFsdDIsCiAgICAgIGZhVHJvcGh5LAogICAgICBmYUZhY2VEaXp6eTogZmFGYWNlRGl6enkyLAogICAgICBmYURpenp5OiBmYURpenp5MiwKICAgICAgZmFCYWN0ZXJpYSwKICAgICAgZmFFYXJEZWFmLAogICAgICBmYURlYWYsCiAgICAgIGZhRGVhZm5lc3MsCiAgICAgIGZhSGFyZE9mSGVhcmluZywKICAgICAgZmFQZW9wbGVBcnJvd3MsCiAgICAgIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUhhbmRzQ2xhcHBpbmcsCiAgICAgIGZhVmlydXNDb3ZpZFNsYXNoLAogICAgICBmYUNhbGVuZGFyRGF5czogZmFDYWxlbmRhckRheXMyLAogICAgICBmYUNhbGVuZGFyQWx0OiBmYUNhbGVuZGFyQWx0MiwKICAgICAgZmFEaWFtb25kVHVyblJpZ2h0LAogICAgICBmYURpcmVjdGlvbnMsCiAgICAgIGZhSGFuZFBvaW50VXA6IGZhSGFuZFBvaW50VXAyLAogICAgICBmYUJlemllckN1cnZlLAogICAgICBmYVBlcnNvbkhhbGZEcmVzcywKICAgICAgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCwKICAgICAgZmFQb2xsSCwKICAgICAgZmFTY2hvb2xDaXJjbGVYbWFyaywKICAgICAgZmFIYW5kTGl6YXJkOiBmYUhhbmRMaXphcmQyLAogICAgICBmYUNoYWxrYm9hcmQsCiAgICAgIGZhQmxhY2tib2FyZCwKICAgICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSwKICAgICAgZmFFeHRlcm5hbExpbmtBbHQsCiAgICAgIGZhU3F1YXJlRnVsbDogZmFTcXVhcmVGdWxsMiwKICAgICAgZmFDbG92ZXIsCiAgICAgIGZhVGVldGhPcGVuLAogICAgICBmYUJhcnNTdGFnZ2VyZWQsCiAgICAgIGZhUmVvcmRlciwKICAgICAgZmFTdHJlYW0sCiAgICAgIGZhV2FyZWhvdXNlLAogICAgICBmYVN3YXRjaGJvb2ssCiAgICAgIGZhQ2FtcGdyb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCwKICAgICAgZmFHbGFzc2VzLAogICAgICBmYUNpcmNsZVBhdXNlOiBmYUNpcmNsZVBhdXNlMiwKICAgICAgZmFQYXVzZUNpcmNsZTogZmFQYXVzZUNpcmNsZTIsCiAgICAgIGZhTWVtb3J5LAogICAgICBmYUdpZnQsCiAgICAgIGZhTW9uZXlCaWxsV2hlYXQsCiAgICAgIGZhRHVuZ2VvbiwKICAgICAgZmFTdWl0Y2FzZU1lZGljYWwsCiAgICAgIGZhTWVka2l0LAogICAgICBmYVBlcnNvbkNhbmUsCiAgICAgIGZhR2F1Z2UsCiAgICAgIGZhRGFzaGJvYXJkLAogICAgICBmYUdhdWdlTWVkLAogICAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLAogICAgICBmYUVudmVsb3BlT3BlblRleHQsCiAgICAgIGZhVG9vbGJveCwKICAgICAgZmFQb3dlck9mZiwKICAgICAgZmFTaWduYWwsCiAgICAgIGZhU2lnbmFsNSwKICAgICAgZmFTaWduYWxQZXJmZWN0LAogICAgICBmYUFycm93c1NwaW4sCiAgICAgIGZhSm9pbnQsCiAgICAgIGZhQnJhaWxsZSwKICAgICAgZmFCYXNrZXRTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0Jhc2tldCwKICAgICAgZmFCcmlkZ2UsCiAgICAgIGZhUGxhbmVBcnJpdmFsLAogICAgICBmYUNhc2hSZWdpc3RlciwKICAgICAgZmFSaW5nLAogICAgICBmYUFxdWFyaXVzLAogICAgICBmYVNoYXJlTm9kZXMsCiAgICAgIGZhU2hhcmVBbHQsCiAgICAgIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQmlub2N1bGFycywKICAgICAgZmFLaXBTaWduLAogICAgICBmYUhhcmREcml2ZTogZmFIYXJkRHJpdmUyLAogICAgICBmYUhkZDogZmFIZGQyLAogICAgICBmYVJhbmtpbmdTdGFyLAogICAgICBmYVVzZXJUaWUsCiAgICAgIGZhRWxsaXBzaXMsCiAgICAgIGZhRWxsaXBzaXNILAogICAgICBmYVN0b3JlU2xhc2gsCiAgICAgIGZhUGVyY2VudCwKICAgICAgZmFQZXJjZW50YWdlLAogICAgICBmYUZpbGVaaXBwZXI6IGZhRmlsZVppcHBlcjIsCiAgICAgIGZhRmlsZUFyY2hpdmU6IGZhRmlsZUFyY2hpdmUyLAogICAgICBmYURpc3BsYXksCiAgICAgIGZhSWNvbnMsCiAgICAgIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQsCiAgICAgIGZhUnVsZXJWZXJ0aWNhbCwKICAgICAgZmFNYXBMb2NhdGlvbkRvdCwKICAgICAgZmFNYXBNYXJrZWRBbHQsCiAgICAgIGZhSGVhcnRDcmFjaywKICAgICAgZmFIZWFydEJyb2tlbiwKICAgICAgZmFDb3csCiAgICAgIGZhUnNzLAogICAgICBmYUZlZWQsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzLAogICAgICBmYVNlYXJjaCwKICAgICAgZmFDbG91ZE1vb24sCiAgICAgIGZhQm94ZXNTdGFja2VkLAogICAgICBmYUJveGVzLAogICAgICBmYUJveGVzQWx0LAogICAgICBmYUNvZGVCcmFuY2gsCiAgICAgIGZhQmFuLAogICAgICBmYUNhbmNlbCwKICAgICAgZmFKdWdEZXRlcmdlbnQsCiAgICAgIGZhUmVwbHksCiAgICAgIGZhTWFpbFJlcGx5LAogICAgICBmYVN1blBsYW50V2lsdCwKICAgICAgZmFCYWN0ZXJpdW0sCiAgICAgIGZhUmVjb3JkVmlueWwsCiAgICAgIGZhRmxvcHB5RGlzazogZmFGbG9wcHlEaXNrMiwKICAgICAgZmFTYXZlOiBmYVNhdmUyLAogICAgICBmYVRvaWxldHNQb3J0YWJsZSwKICAgICAgZmFPLAogICAgICBmYVBhbGV0dGUsCiAgICAgIGZhVW5sb2NrLAogICAgICBmYUVhckxpc3RlbiwKICAgICAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLAogICAgICBmYUNvZGVQdWxsUmVxdWVzdCwKICAgICAgZmFLZXksCiAgICAgIGZhU2t1bGwsCiAgICAgIGZhTWFyc1N0cm9rZVVwLAogICAgICBmYU1hcnNTdHJva2VWLAogICAgICBmYUZpcmVGbGFtZVNpbXBsZSwKICAgICAgZmFCdXJuLAogICAgICBmYVRyZWUsCiAgICAgIGZhU21vZywKICAgICAgZmFTLAogICAgICBmYUplZGksCiAgICAgIGZhUGVyc29uSGlraW5nLAogICAgICBmYUhpa2luZywKICAgICAgZmFBcnJvd3NVcFRvTGluZSwKICAgICAgZmFNYXJzRG91YmxlLAogICAgICBmYVRoZXJtb21ldGVyLAogICAgICBmYVBhaW50YnJ1c2gsCiAgICAgIGZhUGFpbnRCcnVzaCwKICAgICAgZmFOZXV0ZXIsCiAgICAgIGZhU3F1YXJlUGhvbmVGbGlwLAogICAgICBmYVBob25lU3F1YXJlQWx0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50OiBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiwKICAgICAgZmFHcmluVG9uZ3VlU3F1aW50OiBmYUdyaW5Ub25ndWVTcXVpbnQyLAogICAgICBmYUNvbW1lbnREb2xsYXIsCiAgICAgIGZhSGlwcG8sCiAgICAgIGZhQm93bEZvb2QsCiAgICAgIGZhU3F1YXJlVmlydXMsCiAgICAgIGZhQ2xvdWRTdW5SYWluLAogICAgICBmYUFycm93UmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd1JpZ2h0LAogICAgICBmYUJ1aWxkaW5nVW4sCiAgICAgIGZhVGVtcGVyYXR1cmVMb3csCiAgICAgIGZhRG9vck9wZW4sCiAgICAgIGZhQWxpZ25MZWZ0LAogICAgICBmYUNhbWVyYTogZmFDYW1lcmEyLAogICAgICBmYUNhbWVyYUFsdDogZmFDYW1lcmFBbHQyLAogICAgICBmYVVzZXJzUmF5cywKICAgICAgZmFSYWluYm93LAogICAgICBmYVNpdGVtYXAsCiAgICAgIGZhRmFjZUdyaW5TdGFyczogZmFGYWNlR3JpblN0YXJzMiwKICAgICAgZmFHcmluU3RhcnM6IGZhR3JpblN0YXJzMiwKICAgICAgZmFTb3J0VXAsCiAgICAgIGZhU29ydEFzYywKICAgICAgZmFFeWU6IGZhRXllMiwKICAgICAgZmFDYXJldExlZnQsCiAgICAgIGZhQXBwbGVXaG9sZSwKICAgICAgZmFBcHBsZUFsdCwKICAgICAgZmFTY3JvbGxUb3JhaCwKICAgICAgZmFUb3JhaCwKICAgICAgZmFIb3VzZUxvY2ssCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLAogICAgICBmYVRyYXNoLAogICAgICBmYUZhY2VTYWRUZWFyOiBmYUZhY2VTYWRUZWFyMiwKICAgICAgZmFTYWRUZWFyOiBmYVNhZFRlYXIyLAogICAgICBmYUZheCwKICAgICAgZmFQZXJzb25DaXJjbGVQbHVzLAogICAgICBmYUhhbXNhLAogICAgICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLAogICAgICBmYUNsaXBib2FyZENoZWNrLAogICAgICBmYVNoYXJlRnJvbVNxdWFyZTogZmFTaGFyZUZyb21TcXVhcmUyLAogICAgICBmYVNoYXJlU3F1YXJlOiBmYVNoYXJlU3F1YXJlMiwKICAgICAgZmFSZWNlaXB0LAogICAgICBmYUVxdWFscywKICAgICAgZmFDaGV2cm9uVXAsCiAgICAgIGZhVmlydXNTbGFzaCwKICAgICAgZmFTbGFzaCwKICAgICAgZmFFeHBhbmQsCiAgICAgIGZhTm90ZVN0aWNreTogZmFOb3RlU3RpY2t5MiwKICAgICAgZmFTdGlja3lOb3RlOiBmYVN0aWNreU5vdGUyLAogICAgICBmYVRhYmxlQ29sdW1ucywKICAgICAgZmFDb2x1bW5zLAogICAgICBmYVBlcnNvblNoZWx0ZXIsCiAgICAgIGZhQ2lyY2xlTm90Y2gsCiAgICAgIGZhV2F0ZXIsCiAgICAgIGZhRGVsZXRlTGVmdCwKICAgICAgZmFCYWNrc3BhY2UsCiAgICAgIGZhQnJvb21CYWxsLAogICAgICBmYVF1aWRkaXRjaCwKICAgICAgZmFRdWlkZGl0Y2hCcm9vbUJhbGwsCiAgICAgIGZhSiwKICAgICAgZmFTaHV0dGxlU3BhY2UsCiAgICAgIGZhU3BhY2VTaHV0dGxlLAogICAgICBmYVlpbllhbmcsCiAgICAgIGZhU3RvcCwKICAgICAgZmFUcm93ZWwsCiAgICAgIGZhSGFuZEJhY2tGaXN0OiBmYUhhbmRCYWNrRmlzdDIsCiAgICAgIGZhSGFuZFJvY2s6IGZhSGFuZFJvY2syLAogICAgICBmYVRlbXBlcmF0dXJlSGlnaCwKICAgICAgZmFHcmVhdGVyVGhhbiwKICAgICAgZmFDcnV0Y2gsCiAgICAgIGZhU2VwdGFnb24sCiAgICAgIGZhSGVwdGFnb24sCiAgICAgIGZhU3RyZWV0VmlldywKICAgICAgZmFXYXZlU3F1YXJlLAogICAgICBmYUFuZ2xlTGVmdCwKICAgICAgZmFTY3Jld2RyaXZlciwKICAgICAgZmFUcmFjdG9yLAogICAgICBmYUJyaWRnZUNpcmNsZVhtYXJrLAogICAgICBmYVZpYWxzLAogICAgICBmYVN0ZXRob3Njb3BlLAogICAgICBmYVBvZGNhc3QsCiAgICAgIGZhQXJyb3dVcFJpZ2h0RG90cywKICAgICAgZmFDaGVzc1F1ZWVuOiBmYUNoZXNzUXVlZW4yLAogICAgICBmYUFuY2hvckNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUVsbGlwc2lzVmVydGljYWwsCiAgICAgIGZhRWxsaXBzaXNWLAogICAgICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUsCiAgICAgIGZhTm90RXF1YWwsCiAgICAgIGZhVHJhaW5UcmFtLAogICAgICBmYVBsYW5lRGVwYXJ0dXJlLAogICAgICBmYVJpZ2h0VG9CcmFja2V0LAogICAgICBmYVNpZ25JbkFsdCwKICAgICAgZmFTZENhcmQsCiAgICAgIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFTaGVrZWxTaWduLAogICAgICBmYUlscywKICAgICAgZmFTaGVrZWwsCiAgICAgIGZhU2hlcWVsLAogICAgICBmYVNoZXFlbFNpZ24sCiAgICAgIGZhUmFkaW8sCiAgICAgIGZhSGFuZERvdHMsCiAgICAgIGZhQWxsZXJnaWVzLAogICAgICBmYUJvb2tTa3VsbCwKICAgICAgZmFCb29rRGVhZCwKICAgICAgZmFVbmxvY2tLZXlob2xlLAogICAgICBmYVVubG9ja0FsdCwKICAgICAgZmFGaWxlQXJyb3dVcCwKICAgICAgZmFGaWxlVXBsb2FkLAogICAgICBmYUZhY2VHcmluVGVhcnM6IGZhRmFjZUdyaW5UZWFyczIsCiAgICAgIGZhR3JpblRlYXJzOiBmYUdyaW5UZWFyczIsCiAgICAgIGZhUGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUyLAogICAgICBmYUVkaXQ6IGZhRWRpdDIsCiAgICAgIGZhRWFydGhFdXJvcGUsCiAgICAgIGZhR2xvYmVFdXJvcGUsCiAgICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQ6IGZhRmFjZUdyaW5CZWFtU3dlYXQyLAogICAgICBmYUdyaW5CZWFtU3dlYXQ6IGZhR3JpbkJlYW1Td2VhdDIsCiAgICAgIGZhQ2lyY2xlSGFsZlN0cm9rZSwKICAgICAgZmFBZGp1c3QsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwKICAgICAgZmFUYWJsZUNlbGxzQ29sdW1uTG9jaywKICAgICAgZmFUcnVja0ZpZWxkVW4sCiAgICAgIGZhQ2xvY2s6IGZhQ2xvY2syLAogICAgICBmYUNsb2NrRm91cjogZmFDbG9ja0ZvdXIyLAogICAgICBmYUJvb2ssCiAgICAgIGZhRmFjZUxhdWdoV2luazogZmFGYWNlTGF1Z2hXaW5rMiwKICAgICAgZmFMYXVnaFdpbms6IGZhTGF1Z2hXaW5rMiwKICAgICAgZmFDbG91ZE1lYXRiYWxsLAogICAgICBmYUNoYXJ0QXJlYSwKICAgICAgZmFBcmVhQ2hhcnQsCiAgICAgIGZhUnVwaWFoU2lnbiwKICAgICAgZmFUZXh0V2lkdGgsCiAgICAgIGZhU2F0ZWxsaXRlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzLAogICAgICBmYVNlYXJjaE1pbnVzLAogICAgICBmYVBlb3BsZUdyb3VwLAogICAgICBmYVNxdWFyZUJpbmFyeSwKICAgICAgZmFNYXNrc1RoZWF0ZXIsCiAgICAgIGZhVGhlYXRlck1hc2tzLAogICAgICBmYUNhcnRQbHVzLAogICAgICBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nLAogICAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYUFzbEludGVycHJldGluZywKICAgICAgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2ssCiAgICAgIGZhUm9ja2V0LAogICAgICBmYVNocmltcCwKICAgICAgZmFUZW5nZVNpZ24sCiAgICAgIGZhVGVuZ2UsCiAgICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCwKICAgICAgZmFDbGluaWNNZWRpY2FsLAogICAgICBmYVVzZXJzU2xhc2gsCiAgICAgIGZhUGFwZXJQbGFuZTogZmFQYXBlclBsYW5lMiwKICAgICAgZmFCb29rQXRsYXMsCiAgICAgIGZhQXRsYXMsCiAgICAgIGZhVGFibGUsCiAgICAgIGZhSGVhcnQ6IGZhSGVhcnQyLAogICAgICBmYUNpcmNsZUNoZXZyb25VcCwKICAgICAgZmFDaGV2cm9uQ2lyY2xlVXAsCiAgICAgIGZhQmF0dGVyeUhhbGYsCiAgICAgIGZhQmF0dGVyeTMsCiAgICAgIGZhRm9udEF3ZXNvbWU6IGZhRm9udEF3ZXNvbWUzLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZzogZmFGb250QXdlc29tZUZsYWczLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMsCiAgICAgIGZhSGFuZGN1ZmZzLAogICAgICBmYUhhdENvd2JveVNpZGUsCiAgICAgIGZhSW5kdXN0cnksCiAgICAgIGZhTGluZXNMZWFuaW5nLAogICAgICBmYVBhc3Nwb3J0LAogICAgICBmYUluZmluaXR5LAogICAgICBmYUNsb25lOiBmYUNsb25lMiwKICAgICAgZmFGb3J3YXJkLAogICAgICBmYU0sCiAgICAgIGZhUm9hZFNwaWtlcywKICAgICAgZmFNb3VudGFpbiwKICAgICAgZmFDaGVzcywKICAgICAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMsCiAgICAgIGZhVGVtcGVyYXR1cmUzLAogICAgICBmYVRoZXJtb21ldGVyMywKICAgICAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMsCiAgICAgIGZhQiwKICAgICAgZmFTaGllbGRWaXJ1cywKICAgICAgZmFMaXRlY29pblNpZ24sCiAgICAgIGZhRGljZUQ2LAogICAgICBmYUdyaXBMaW5lc1ZlcnRpY2FsLAogICAgICBmYUdvbGZCYWxsVGVlLAogICAgICBmYUdvbGZCYWxsLAogICAgICBmYUhleGFnb24sCiAgICAgIGZhRm9sZGVyT3BlbjogZmFGb2xkZXJPcGVuMiwKICAgICAgZmFLYWFiYSwKICAgICAgZmFIYW5kSG9sZGluZywKICAgICAgZmFTaW5nbGVRdW90ZVJpZ2h0LAogICAgICBmYUJvdHRsZURyb3BsZXQsCiAgICAgIGZhV2luZG93TWluaW1pemU6IGZhV2luZG93TWluaW1pemUyLAogICAgICBmYUNoZXZyb25SaWdodCwKICAgICAgZmFFZ2csCiAgICAgIGZhTGFuZG1hcmtEb21lLAogICAgICBmYUxhbmRtYXJrQWx0LAogICAgICBmYVdvcm0sCiAgICAgIGZhVXNlckluanVyZWQsCiAgICAgIGZhU3RyaWtldGhyb3VnaCwKICAgICAgZmFCbG9nLAogICAgICBmYVN0b3B3YXRjaDIwLAogICAgICBmYVRydWNrUGlja3VwLAogICAgICBmYVNlZWRsaW5nLAogICAgICBmYVNwcm91dCwKICAgICAgZmFUcmFuc2dlbmRlciwKICAgICAgZmFUcmFuc2dlbmRlckFsdCwKICAgICAgZmFTdGFySGFsZjogZmFTdGFySGFsZjIsCiAgICAgIGZhUGhvdG9GaWxtLAogICAgICBmYVBob3RvVmlkZW8sCiAgICAgIGZhUGljdHVyZUluUGljdHVyZSwKICAgICAgZmFQdW1wTWVkaWNhbCwKICAgICAgZmFGaXJlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsCiAgICAgIGZhU2VhcmNoUGx1cywKICAgICAgZmFGbGFzaywKICAgICAgZmFBbGlnblJpZ2h0LAogICAgICBmYUNhYmxlQ2FyLAogICAgICBmYVRyYW0sCiAgICAgIGZhS2l0TWVkaWNhbCwKICAgICAgZmFGaXJzdEFpZCwKICAgICAgZmFHcmlwTGluZXMsCiAgICAgIGZhQnVyZ2VyLAogICAgICBmYUhhbWJ1cmdlciwKICAgICAgZmFTbm93bWFuLAogICAgICBmYUhvdGVsLAogICAgICBmYVByaW50LAogICAgICBmYVZvbGxleWJhbGwsCiAgICAgIGZhVm9sbGV5YmFsbEJhbGwsCiAgICAgIGZhVHJhZmZpY0xpZ2h0LAogICAgICBmYVBsYW5lQ2lyY2xlQ2hlY2ssCiAgICAgIGZhVXNlcnMsCiAgICAgIGZhQ2VydGlmaWNhdGUsCiAgICAgIGZhQWxhcm1DbG9jazogZmFBbGFybUNsb2NrMiwKICAgICAgZmFIZWxpY29wdGVyU3ltYm9sLAogICAgICBmYUhvdXNlQ2hpbW5leUNyYWNrLAogICAgICBmYUhvdXNlRGFtYWdlLAogICAgICBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsCiAgICAgIGZhRGF0YWJhc2UsCiAgICAgIGZhTmV3c3BhcGVyOiBmYU5ld3NwYXBlcjIsCiAgICAgIGZhQ2xvdWRSYWluLAogICAgICBmYU1heGltaXplLAogICAgICBmYUV4cGFuZEFycm93c0FsdCwKICAgICAgZmFMb2NhdGlvbkFycm93LAogICAgICBmYUNpdHksCiAgICAgIGZhWFJheSwKICAgICAgZmFVbWJyZWxsYUJlYWNoLAogICAgICBmYUFycm93UmlnaHRUb0JyYWNrZXQsCiAgICAgIGZhU2lnbkluLAogICAgICBmYUhlYWRzZXQsCiAgICAgIGZhU3Bsb3RjaCwKICAgICAgZmFVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0VXAsCiAgICAgIGZhSGV4YWdvbk5vZGVzLAogICAgICBmYUhvc3BpdGFsOiBmYUhvc3BpdGFsMiwKICAgICAgZmFIb3NwaXRhbEFsdDogZmFIb3NwaXRhbEFsdDIsCiAgICAgIGZhSG9zcGl0YWxXaWRlOiBmYUhvc3BpdGFsV2lkZTIsCiAgICAgIGZhUGVyc29uSGFyYXNzaW5nLAogICAgICBmYU1vbmV5QmlsbFRyZW5kVXAsCiAgICAgIGZhUGVuUnVsZXIsCiAgICAgIGZhUGVuY2lsUnVsZXIsCiAgICAgIGZhUmVwZWF0LAogICAgICBmYUJvbmUsCiAgICAgIGZhRmlyZUZsYW1lQ3VydmVkLAogICAgICBmYUZpcmVBbHQsCiAgICAgIGZhQnVzU2ltcGxlLAogICAgICBmYUJ1c0FsdCwKICAgICAgZmFWZW51c01hcnMsCiAgICAgIGZhQmxlbmRlciwKICAgICAgZmFVLAogICAgICBmYVNoYXJlLAogICAgICBmYU1haWxGb3J3YXJkLAogICAgICBmYVBob25lRmxpcCwKICAgICAgZmFQaG9uZUFsdCwKICAgICAgZmFUb2lsZXRQb3J0YWJsZSwKICAgICAgZmFQZXJzb25QcmVnbmFudCwKICAgICAgZmFMZXNzVGhhbiwKICAgICAgZmFTdXBlcnNjcmlwdCwKICAgICAgZmFDaXJjbGVTdG9wOiBmYUNpcmNsZVN0b3AyLAogICAgICBmYVN0b3BDaXJjbGU6IGZhU3RvcENpcmNsZTIsCiAgICAgIGZhQXJyb3dzVXBEb3duLAogICAgICBmYUFycm93c1YsCiAgICAgIGZhUG9vU3Rvcm0sCiAgICAgIGZhUG9vQm9sdCwKICAgICAgZmFWaWRlb1NsYXNoLAogICAgICBmYVNxdWFyZVhtYXJrLAogICAgICBmYVRpbWVzU3F1YXJlLAogICAgICBmYVhtYXJrU3F1YXJlLAogICAgICBmYUhhbmRIb2xkaW5nRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ1dhdGVyLAogICAgICBmYVdvblNpZ24sCiAgICAgIGZhS3J3LAogICAgICBmYVdvbiwKICAgICAgZmFPYmplY3RVbmdyb3VwOiBmYU9iamVjdFVuZ3JvdXAyLAogICAgICBmYUNvbW1lbnQ6IGZhQ29tbWVudDIsCiAgICAgIGZhSGlsbEF2YWxhbmNoZSwKICAgICAgZmFBcnJvd3NUb0V5ZSwKICAgICAgZmFTbm93cGxvdywKICAgICAgZmFDaGFydEdhbnR0LAogICAgICBmYVZpZGVvLAogICAgICBmYVZpZGVvQ2FtZXJhLAogICAgICBmYUNoZXNzUGF3bjogZmFDaGVzc1Bhd24yLAogICAgICBmYVN5bmFnb2d1ZSwKICAgICAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrLAogICAgICBmYUNhbGVuZGFyUGx1czogZmFDYWxlbmRhclBsdXMyLAogICAgICBmYVdoZWVsY2hhaXJNb3ZlLAogICAgICBmYVdoZWVsY2hhaXJBbHQsCiAgICAgIGZhVXNlclNoaWVsZCwKICAgICAgZmFCb2xkLAogICAgICBmYUhlYXJ0UHVsc2UsCiAgICAgIGZhSGVhcnRiZWF0LAogICAgICBmYVNxdWFyZVJvb3RWYXJpYWJsZSwKICAgICAgZmFTcXVhcmVSb290QWx0LAogICAgICBmYUhhbmRzQnViYmxlcywKICAgICAgZmFIYW5kc1dhc2gsCiAgICAgIGZhTWFya2VyLAogICAgICBmYUNsaXBib2FyZDogZmFDbGlwYm9hcmQyLAogICAgICBmYVBsYWNlT2ZXb3JzaGlwLAogICAgICBmYUNhbm5hYmlzLAogICAgICBmYVBlb3BsZVJvb2YsCiAgICAgIGZhRGlzZWFzZSwKICAgICAgZmFCb29rQmlibGUsCiAgICAgIGZhQmlibGUsCiAgICAgIGZhQ2hlc3NCb2FyZCwKICAgICAgZmFNYXJzLAogICAgICBmYUxhcHRvcCwKICAgICAgZmFVc2VyWG1hcmssCiAgICAgIGZhVXNlclRpbWVzLAogICAgICBmYUZsYWdVc2EsCiAgICAgIGZhSGFuZE1pZGRsZUZpbmdlciwKICAgICAgZmFNb3J0YXJQZXN0bGUsCiAgICAgIGZhSGVhZFNpZGVDb3VnaCwKICAgICAgZmFQbGFuZUxvY2ssCiAgICAgIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsCiAgICAgIGZhQmF0dGVyeTQsCiAgICAgIGZhRnJhbmNTaWduLAogICAgICBmYUZpbHRlckNpcmNsZURvbGxhciwKICAgICAgZmFGdW5uZWxEb2xsYXIsCiAgICAgIGZhQ2hlZXNlLAogICAgICBmYUNpcmNsZUgsCiAgICAgIGZhSG9zcGl0YWxTeW1ib2wsCiAgICAgIGZhU2Nob29sLAogICAgICBmYURpY2VGaXZlLAogICAgICBmYVRvcm5hZG8sCiAgICAgIGZhSmV0RmlnaHRlciwKICAgICAgZmFGaWdodGVySmV0LAogICAgICBmYVRodW1ic0Rvd246IGZhVGh1bWJzRG93bjIsCiAgICAgIGZhQnJvb20sCiAgICAgIGZhRmlsZUltcG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0VG9GaWxlLAogICAgICBmYVV0ZW5zaWxzLAogICAgICBmYUN1dGxlcnksCiAgICAgIGZhSWRCYWRnZTogZmFJZEJhZGdlMiwKICAgICAgZmFTcGlkZXIsCiAgICAgIGZhTW9iaWxlUmV0cm8sCiAgICAgIGZhU2lnbnNQb3N0LAogICAgICBmYU1hcFNpZ25zLAogICAgICBmYUdyb3VwQXJyb3dzUm90YXRlLAogICAgICBmYUFycm93c1NwbGl0VXBBbmRMZWZ0LAogICAgICBmYUZpbGxEcmlwLAogICAgICBmYVNoaWVsZEhlYXJ0LAogICAgICBmYVBlcnNvblNraWluZ05vcmRpYywKICAgICAgZmFTa2lpbmdOb3JkaWMsCiAgICAgIGZhU3F1YXJlQ2hlY2s6IGZhU3F1YXJlQ2hlY2syLAogICAgICBmYUNoZWNrU3F1YXJlOiBmYUNoZWNrU3F1YXJlMiwKICAgICAgZmFCYXRoLAogICAgICBmYUJhdGh0dWIsCiAgICAgIGZhQ2hlc3NCaXNob3A6IGZhQ2hlc3NCaXNob3AyLAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsCiAgICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LAogICAgICBmYURyYXdQb2x5Z29uLAogICAgICBmYVZlY3RvclBvbHlnb24sCiAgICAgIGZhSUN1cnNvciwKICAgICAgZmFIZWFydENpcmNsZVBsdXMsCiAgICAgIGZhU2hpZWxkRG9nLAogICAgICBmYUdyZWF0ZXJUaGFuRXF1YWwsCiAgICAgIGZhRW52ZWxvcGVPcGVuOiBmYUVudmVsb3BlT3BlbjIsCiAgICAgIGZhTW91bmQsCiAgICAgIGZhVm9pY2VtYWlsLAogICAgICBmYVZlc3QsCiAgICAgIGZhQXVkaW9EZXNjcmlwdGlvbiwKICAgICAgZmFXLAogICAgICBmYUV5ZURyb3BwZXIsCiAgICAgIGZhRXllRHJvcHBlckVtcHR5LAogICAgICBmYUV5ZWRyb3BwZXIsCiAgICAgIGZhQ2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmsyLAogICAgICBmYVRpbWVzQ2lyY2xlOiBmYVRpbWVzQ2lyY2xlMiwKICAgICAgZmFYbWFya0NpcmNsZTogZmFYbWFya0NpcmNsZTIsCiAgICAgIGZhVHJhaWxlciwKICAgICAgZmFUdXJraXNoTGlyYVNpZ24sCiAgICAgIGZhVHJ5LAogICAgICBmYVR1cmtpc2hMaXJhLAogICAgICBmYVZvbGNhbm8sCiAgICAgIGZhV2FuZFNwYXJrbGVzLAogICAgICBmYU1pY3JvcGhvbmUsCiAgICAgIGZhQ3Jvd24sCiAgICAgIGZhVGVudEFycm93VHVybkxlZnQsCiAgICAgIGZhVHJ1Y2tGYXN0LAogICAgICBmYVNoaXBwaW5nRmFzdCwKICAgICAgZmFVc2VyUGVuLAogICAgICBmYVVzZXJFZGl0LAogICAgICBmYVVzZXJDbG9jaywKICAgICAgZmFTaG93ZXIsCiAgICAgIGZhU3F1YXJlQ2FyZXRVcDogZmFTcXVhcmVDYXJldFVwMiwKICAgICAgZmFDYXJldFNxdWFyZVVwOiBmYUNhcmV0U3F1YXJlVXAyLAogICAgICBmYU1hcExvY2F0aW9uLAogICAgICBmYU1hcE1hcmtlZCwKICAgICAgZmFQZW5GYW5jeSwKICAgICAgZmFFdXJvU2lnbiwKICAgICAgZmFFdXIsCiAgICAgIGZhRXVybywKICAgICAgZmFIb3VzZUNpcmNsZVhtYXJrLAogICAgICBmYUxpcmFTaWduLAogICAgICBmYVllblNpZ24sCiAgICAgIGZhQ255LAogICAgICBmYUpweSwKICAgICAgZmFSbWIsCiAgICAgIGZhWWVuLAogICAgICBmYUJveE9wZW4sCiAgICAgIGZhVHJ1Y2tGaWVsZCwKICAgICAgZmFMb2NhdGlvblBpbkxvY2ssCiAgICAgIGZhUGVyc29uUHJheWluZywKICAgICAgZmFQcmF5LAogICAgICBmYUNsaXBib2FyZExpc3QsCiAgICAgIGZhU2Fja0RvbGxhciwKICAgICAgZmFNb3VudGFpblN1biwKICAgICAgZmFBcnJvd1VwV2lkZVNob3J0LAogICAgICBmYVNvcnRBbW91bnRVcCwKICAgICAgZmFVc2Vyc0xpbmUsCiAgICAgIGZhU3Rhck9mRGF2aWQsCiAgICAgIGZhTm90ZXNNZWRpY2FsLAogICAgICBmYUF1c3RyYWxTaWduLAogICAgICBmYUNsaXBib2FyZFVzZXIsCiAgICAgIGZhRmlsZUltYWdlOiBmYUZpbGVJbWFnZTIsCiAgICAgIGZhU3F1YXJlQ2FyZXRSaWdodDogZmFTcXVhcmVDYXJldFJpZ2h0MiwKICAgICAgZmFDYXJldFNxdWFyZVJpZ2h0OiBmYUNhcmV0U3F1YXJlUmlnaHQyLAogICAgICBmYVZpYWwsCiAgICAgIGZhSGVsaWNvcHRlciwKICAgICAgZmFNaXR0ZW4sCiAgICAgIGZhR2FzUHVtcCwKICAgICAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLAogICAgICBmYVBlcnNvblNrYXRpbmcsCiAgICAgIGZhU2thdGluZywKICAgICAgZmFTdW46IGZhU3VuMiwKICAgICAgZmFCYXNlYmFsbCwKICAgICAgZmFCYXNlYmFsbEJhbGwsCiAgICAgIGZhSW1hZ2U6IGZhSW1hZ2UyLAogICAgICBmYU5vdGRlZiwKICAgICAgZmFCYXNrZXRiYWxsLAogICAgICBmYUJhc2tldGJhbGxCYWxsLAogICAgICBmYVBlbmNpbCwKICAgICAgZmFQZW5jaWxBbHQsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsCiAgICAgIGZhRGljZVNpeCwKICAgICAgZmFBbmdsZXNEb3duLAogICAgICBmYUFuZ2xlRG91YmxlRG93biwKICAgICAgZmFTeXJpbmdlLAogICAgICBmYVdoZWF0QXduLAogICAgICBmYVdoZWF0QWx0LAogICAgICBmYVBsYW5lVXAsCiAgICAgIGZhQWxpZ25DZW50ZXIsCiAgICAgIGZhSG9ja2V5UHVjaywKICAgICAgZmFDaXJjbGVBcnJvd0xlZnQsCiAgICAgIGZhQXJyb3dDaXJjbGVMZWZ0LAogICAgICBmYVBsdWdDaXJjbGVCb2x0LAogICAgICBmYVJlc3Ryb29tLAogICAgICBmYUFuY2hvckxvY2ssCiAgICAgIGZhVGltZWxpbmUsCiAgICAgIGZhTGlnaHRidWxiOiBmYUxpZ2h0YnVsYjIsCiAgICAgIGZhQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd0NpcmNsZVJpZ2h0LAogICAgICBmYU1hcnNBbmRWZW51cywKICAgICAgZmFOZXR3b3JrV2lyZWQsCiAgICAgIGZhQnVpbGRpbmdTaGllbGQsCiAgICAgIGZhQ29kZSwKICAgICAgZmFGZWF0aGVyUG9pbnRlZCwKICAgICAgZmFGZWF0aGVyQWx0LAogICAgICBmYUZpbGVDaXJjbGVRdWVzdGlvbiwKICAgICAgZmFTaWduYXR1cmUsCiAgICAgIGZhRWFydGhBbWVyaWNhcywKICAgICAgZmFFYXJ0aCwKICAgICAgZmFFYXJ0aEFtZXJpY2EsCiAgICAgIGZhR2xvYmVBbWVyaWNhcywKICAgICAgZmFDYXJyb3QsCiAgICAgIGZhVGVtcGVyYXR1cmVGdWxsLAogICAgICBmYVRlbXBlcmF0dXJlNCwKICAgICAgZmFUaGVybW9tZXRlcjQsCiAgICAgIGZhVGhlcm1vbWV0ZXJGdWxsLAogICAgICBmYVRhYmxlQ2VsbHNSb3dMb2NrLAogICAgICBmYUJvbHRMaWdodG5pbmcsCiAgICAgIGZhQ2xvdWRTaG93ZXJzV2F0ZXIsCiAgICAgIGZhQXJyb3dVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93VXAsCiAgICAgIGZhQWRkcmVzc0NhcmQ6IGZhQWRkcmVzc0NhcmQyLAogICAgICBmYUNvbnRhY3RDYXJkOiBmYUNvbnRhY3RDYXJkMiwKICAgICAgZmFWY2FyZDogZmFWY2FyZDIsCiAgICAgIGZhQW5nbGVSaWdodCwKICAgICAgZmFGYWNlTWVoOiBmYUZhY2VNZWgyLAogICAgICBmYU1laDogZmFNZWgyLAogICAgICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsCiAgICAgIGZhTWFwOiBmYU1hcDIsCiAgICAgIGZhVXNlclBsdXMsCiAgICAgIGZhVmVudXMsCiAgICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciwKICAgICAgZmFIZWFkU2lkZUNvdWdoU2xhc2gsCiAgICAgIGZhRGlhZ3JhbVByb2plY3QsCiAgICAgIGZhUHJvamVjdERpYWdyYW0sCiAgICAgIGZhVGVybWluYWwsCiAgICAgIGZhSG91c2VGaXJlLAogICAgICBmYU1hc2ssCiAgICAgIGZhSHVycmljYW5lLAogICAgICBmYUVhcnRoQWZyaWNhLAogICAgICBmYUdsb2JlQWZyaWNhLAogICAgICBmYVRodW1idGFjaywKICAgICAgZmFUaHVtYlRhY2ssCiAgICAgIGZhSGFuZFBvaW50RG93bjogZmFIYW5kUG9pbnREb3duMiwKICAgICAgZmFGYWNlTWVoQmxhbms6IGZhRmFjZU1laEJsYW5rMiwKICAgICAgZmFNZWhCbGFuazogZmFNZWhCbGFuazIsCiAgICAgIGZhVGVtcGVyYXR1cmVFbXB0eSwKICAgICAgZmFUZW1wZXJhdHVyZTAsCiAgICAgIGZhVGhlcm1vbWV0ZXIwLAogICAgICBmYVRoZXJtb21ldGVyRW1wdHksCiAgICAgIGZhQm9yZGVyTm9uZSwKICAgICAgZmFIaWdobGlnaHRlciwKICAgICAgZmFNb25leUJpbGxXYXZlLAogICAgICBmYVRvaWxldFBhcGVyU2xhc2gsCiAgICAgIGZhRmlsZVNoaWVsZCwKICAgICAgZmFUZXh0SGVpZ2h0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlOiBmYUZhY2VHcmluVG9uZ3VlMiwKICAgICAgZmFHcmluVG9uZ3VlOiBmYUdyaW5Ub25ndWUyLAogICAgICBmYUZpbGVTaWduYXR1cmUsCiAgICAgIGZhQnVpbGRpbmdXaGVhdCwKICAgICAgZmFQbHVnQ2lyY2xlTWludXMsCiAgICAgIGZhRnV0Ym9sOiBmYUZ1dGJvbDIsCiAgICAgIGZhRnV0Ym9sQmFsbDogZmFGdXRib2xCYWxsMiwKICAgICAgZmFTb2NjZXJCYWxsOiBmYVNvY2NlckJhbGwyLAogICAgICBmYUNpcmNsZVBsdXMsCiAgICAgIGZhUGx1c0NpcmNsZSwKICAgICAgZmFCcmF6aWxpYW5SZWFsU2lnbiwKICAgICAgZmFTdGFyQW5kQ3Jlc2NlbnQsCiAgICAgIGZhRmFjZVN1cnByaXNlOiBmYUZhY2VTdXJwcmlzZTIsCiAgICAgIGZhU3VycHJpc2U6IGZhU3VycHJpc2UyLAogICAgICBmYUhvc3BpdGFsVXNlciwKICAgICAgZmFBcnJvd0Rvd25VcExvY2ssCiAgICAgIGZhRm9sZGVyOiBmYUZvbGRlcjIsCiAgICAgIGZhRm9sZGVyQmxhbms6IGZhRm9sZGVyQmxhbmsyLAogICAgICBmYUhvbGx5QmVycnksCiAgICAgIGZhVmVudXNEb3VibGUsCiAgICAgIGZhQ2xpcGJvYXJkUXVlc3Rpb24sCiAgICAgIGZhSG90ZG9nLAogICAgICBmYUFycm93VXBGcm9tQnJhY2tldCwKICAgICAgZmFNaWNyb3Njb3BlLAogICAgICBmYUNsb3VkOiBmYUNsb3VkMiwKICAgICAgZmFCYXNlYmFsbEJhdEJhbGwsCiAgICAgIGZhQ2FyUmVhciwKICAgICAgZmFDYXJBbHQsCiAgICAgIGZhVGh1bWJ0YWNrU2xhc2gsCiAgICAgIGZhVGh1bWJUYWNrU2xhc2gsCiAgICAgIGZhUGx1c01pbnVzLAogICAgICBmYUhvdXNlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2FsZW5kYXJEYXksCiAgICAgIGZhTGlicmEsCiAgICAgIGZhQ2lyY2xlOiBmYUNpcmNsZTIsCiAgICAgIGZhTW9iaWxlVmlicmF0ZSwKICAgICAgZmFGYWNlR3JpblNxdWludDogZmFGYWNlR3JpblNxdWludDIsCiAgICAgIGZhR3JpblNxdWludDogZmFHcmluU3F1aW50MiwKICAgICAgZmFVc2Vyc0JldHdlZW5MaW5lcywKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyaywKICAgICAgZmFUYWJsZUxpc3QsCiAgICAgIGZhVGhMaXN0LAogICAgICBmYUZsYXNrVmlhbCwKICAgICAgZmFDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFFeGNsYW1hdGlvbkNpcmNsZSwKICAgICAgZmFUYXhpLAogICAgICBmYUNhYiwKICAgICAgZmFUZXh0U2xhc2gsCiAgICAgIGZhUmVtb3ZlRm9ybWF0LAogICAgICBmYVBlb3BsZVB1bGxpbmcsCiAgICAgIGZhQmFja3dhcmQsCiAgICAgIGZhQ2FyQnVyc3QsCiAgICAgIGZhQ2FyQ3Jhc2gsCiAgICAgIGZhTGluaywKICAgICAgZmFDaGFpbiwKICAgICAgZmFCYWNrd2FyZFN0ZXAsCiAgICAgIGZhU3RlcEJhY2t3YXJkLAogICAgICBmYVgsCiAgICAgIGZhQ2lyY2xlVXNlcjogZmFDaXJjbGVVc2VyMiwKICAgICAgZmFVc2VyQ2lyY2xlOiBmYVVzZXJDaXJjbGUyLAogICAgICBmYVJlY3RhbmdsZUxpc3Q6IGZhUmVjdGFuZ2xlTGlzdDIsCiAgICAgIGZhTGlzdEFsdDogZmFMaXN0QWx0MiwKICAgICAgZmFIYW5kOiBmYUhhbmQyLAogICAgICBmYUhhbmRQYXBlcjogZmFIYW5kUGFwZXIyLAogICAgICBmYUNhbmNlciwKICAgICAgZmFWYW5TaHV0dGxlLAogICAgICBmYVNodXR0bGVWYW4sCiAgICAgIGZhU3RhaXJzLAogICAgICBmYUhvcnNlSGVhZCwKICAgICAgZmFWYXVsdCwKICAgICAgZmFDbG9zZWRDYXB0aW9uaW5nU2xhc2gsCiAgICAgIGZhRHJ1bVN0ZWVscGFuLAogICAgICBmYVRodW1ic1VwOiBmYVRodW1ic1VwMiwKICAgICAgZmFTdGFtcCwKICAgICAgZmFNZW5vcmFoLAogICAgICBmYUNoaWxkcmVuLAogICAgICBmYUNoYXJ0TGluZSwKICAgICAgZmFMaW5lQ2hhcnQsCiAgICAgIGZhU3F1YXJlRW52ZWxvcGUsCiAgICAgIGZhRW52ZWxvcGVTcXVhcmUsCiAgICAgIGZhQmFuU21va2luZywKICAgICAgZmFTbW9raW5nQmFuLAogICAgICBmYVRydWNrRnJvbnQsCiAgICAgIGZhQnVpbGRpbmc6IGZhQnVpbGRpbmcyLAogICAgICBmYUJ1bGxzZXllLAogICAgICBmYUFycm93TGVmdExvbmcsCiAgICAgIGZhTG9uZ0Fycm93TGVmdCwKICAgICAgZmFDaGVzc1Jvb2s6IGZhQ2hlc3NSb29rMiwKICAgICAgZmFCbGVuZGVyUGhvbmUsCiAgICAgIGZhQXJyb3dUdXJuVXAsCiAgICAgIGZhTGV2ZWxVcCwKICAgICAgZmFCaWN5Y2xlLAogICAgICBmYUNpcmNsZUFycm93RG93biwKICAgICAgZmFBcnJvd0NpcmNsZURvd24sCiAgICAgIGZhR2VhciwKICAgICAgZmFDb2csCiAgICAgIGZhTWFyc0FuZFZlbnVzQnVyc3QsCiAgICAgIGZhT3R0ZXIsCiAgICAgIGZhQ2lyY2xlQ2hldnJvbkxlZnQsCiAgICAgIGZhQ2hldnJvbkNpcmNsZUxlZnQsCiAgICAgIGZhQ2lyY2xlUXVlc3Rpb246IGZhQ2lyY2xlUXVlc3Rpb24yLAogICAgICBmYVF1ZXN0aW9uQ2lyY2xlOiBmYVF1ZXN0aW9uQ2lyY2xlMiwKICAgICAgZmFXYWxraWVUYWxraWUsCiAgICAgIGZhVXNlckdyb3VwLAogICAgICBmYVVzZXJGcmllbmRzLAogICAgICBmYUhvdXNlQ2hpbW5leSwKICAgICAgZmFIb21lTGcsCiAgICAgIGZhUmlnaHRGcm9tQnJhY2tldCwKICAgICAgZmFTaWduT3V0QWx0LAogICAgICBmYUZpbGU6IGZhRmlsZTIsCiAgICAgIGZhUGxhbmVTbGFzaCwKICAgICAgZmFDbG91ZFNob3dlcnNIZWF2eSwKICAgICAgZmFQZXJzb25GYWxsaW5nLAogICAgICBmYVR1cm5Eb3duLAogICAgICBmYUxldmVsRG93bkFsdCwKICAgICAgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLAogICAgICBmYUV4cGFuZEFsdCwKICAgICAgZmFVc2VyVGFnLAogICAgICBmYUhhbmRTcGFya2xlcywKICAgICAgZmFBcnJvd3NUb0RvdCwKICAgICAgZmFGYWNlU2FkQ3J5OiBmYUZhY2VTYWRDcnkyLAogICAgICBmYVNhZENyeTogZmFTYWRDcnkyLAogICAgICBmYURvbmdTaWduLAogICAgICBmYVBlb3BsZUxpbmUsCiAgICAgIGZhU3F1YXJlUnNzLAogICAgICBmYVJzc1NxdWFyZSwKICAgICAgZmFDYWxlbmRhck1pbnVzOiBmYUNhbGVuZGFyTWludXMyLAogICAgICBmYUNoYXJ0RGlhZ3JhbSwKICAgICAgZmFGYWNlVGlyZWQ6IGZhRmFjZVRpcmVkMiwKICAgICAgZmFUaXJlZDogZmFUaXJlZDIsCiAgICAgIGZhSGFuZFBvaW50UmlnaHQ6IGZhSGFuZFBvaW50UmlnaHQyLAogICAgICBmYUFycm93VXAsCiAgICAgIGZhQ3ViZXNTdGFja2VkLAogICAgICBmYUNoaWxkQ29tYmF0YW50LAogICAgICBmYUNoaWxkUmlmbGUsCiAgICAgIGZhVmVzdFBhdGNoZXMsCiAgICAgIGZhTWFydGluaUdsYXNzRW1wdHksCiAgICAgIGZhR2xhc3NNYXJ0aW5pLAogICAgICBmYU1hZ25ldCwKICAgICAgZmFSb2FkQmFycmllciwKICAgICAgZmFDb21wYXNzRHJhZnRpbmcsCiAgICAgIGZhRHJhZnRpbmdDb21wYXNzLAogICAgICBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLAogICAgICBmYVBsYXRlV2hlYXQsCiAgICAgIGZhU2lnbkhhbmdpbmcsCiAgICAgIGZhU2lnbiwKICAgICAgZmFDYXJCYXR0ZXJ5LAogICAgICBmYUJhdHRlcnlDYXIsCiAgICAgIGZhU2hpcnQsCiAgICAgIGZhVFNoaXJ0LAogICAgICBmYVRzaGlydCwKICAgICAgZmFQYXJhZ3JhcGgsCiAgICAgIGZhRW52ZWxvcGVzQnVsaywKICAgICAgZmFNYWlsQnVsaywKICAgICAgZmFHdWl0YXIsCiAgICAgIGZhU3VpdGNhc2UsCiAgICAgIGZhQ2lyY2xlVXA6IGZhQ2lyY2xlVXAyLAogICAgICBmYUFycm93QWx0Q2lyY2xlVXA6IGZhQXJyb3dBbHRDaXJjbGVVcDIsCiAgICAgIGZhRiwKICAgICAgZmFYbWFya3NMaW5lcywKICAgICAgZmFFYXJ0aE9jZWFuaWEsCiAgICAgIGZhR2xvYmVPY2VhbmlhLAogICAgICBmYUNvbW1lbnRTbGFzaCwKICAgICAgZmFQbGF5LAogICAgICBmYVZpYWxDaXJjbGVDaGVjaywKICAgICAgZmFCcmlkZ2VDaXJjbGVDaGVjaywKICAgICAgZmFDZWRpU2lnbiwKICAgICAgZmFQdXp6bGVQaWVjZSwKICAgICAgZmFIZWxtZXRVbiwKICAgICAgZmFHbGFzc1dhdGVyLAogICAgICBmYUhlYXJ0Q2lyY2xlQm9sdCwKICAgICAgZmFQdW1wU29hcCwKICAgICAgZmFIYW5kU2Npc3NvcnM6IGZhSGFuZFNjaXNzb3JzMiwKICAgICAgZmFEb2xseSwKICAgICAgZmFEb2xseUJveCwKICAgICAgZmFQYXBlcmNsaXAsCiAgICAgIGZhRGVtb2NyYXQsCiAgICAgIGZhU3F1YXJlQXJyb3dVcFJpZ2h0LAogICAgICBmYUV4dGVybmFsTGlua1NxdWFyZSwKICAgICAgZmFGZXJyeSwKICAgICAgZmFNb3NxdWl0bywKICAgICAgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsCiAgICAgIGZhTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0FsdEgsCiAgICAgIGZhVmlydXMsCiAgICAgIGZhR2VtOiBmYUdlbTIsCiAgICAgIGZhVG9pbGV0LAogICAgICBmYVNpbmdsZVF1b3RlTGVmdCwKICAgICAgZmFNb25leUJpbGxzLAogICAgICBmYVRhYmxldEJ1dHRvbiwKICAgICAgZmFSZWN0YW5nbGVYbWFyazogZmFSZWN0YW5nbGVYbWFyazIsCiAgICAgIGZhUmVjdGFuZ2xlVGltZXM6IGZhUmVjdGFuZ2xlVGltZXMyLAogICAgICBmYVRpbWVzUmVjdGFuZ2xlOiBmYVRpbWVzUmVjdGFuZ2xlMiwKICAgICAgZmFXaW5kb3dDbG9zZTogZmFXaW5kb3dDbG9zZTIsCiAgICAgIGZhV3JlbmNoLAogICAgICBmYVRyYXNoQ2FuOiBmYVRyYXNoQ2FuMiwKICAgICAgZmFUcmFzaEFsdDogZmFUcmFzaEFsdDIsCiAgICAgIGZhVGFibGVDZWxscywKICAgICAgZmFUaCwKICAgICAgZmFSaWJib24sCiAgICAgIGZhTGFuZG1hcmtGbGFnLAogICAgICBmYVVwRG93bkxlZnRSaWdodCwKICAgICAgZmFBcnJvd3NBbHQsCiAgICAgIGZhQ2FyU2lkZSwKICAgICAgZmFUcmFzaEFycm93VXAsCiAgICAgIGZhVHJhc2hSZXN0b3JlLAogICAgICBmYUxpZmVSaW5nOiBmYUxpZmVSaW5nMiwKICAgICAgZmFDb3B5cmlnaHQ6IGZhQ29weXJpZ2h0MiwKICAgICAgZmFGaWxlUHJlc2NyaXB0aW9uLAogICAgICBmYUVyYXNlciwKICAgICAgZmFIb3VyZ2xhc3NTdGFydCwKICAgICAgZmFIb3VyZ2xhc3MxLAogICAgICBmYUNpcmNsZUxlZnQ6IGZhQ2lyY2xlTGVmdDIsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0OiBmYUFycm93QWx0Q2lyY2xlTGVmdDIsCiAgICAgIGZhQ3J1emVpcm9TaWduLAogICAgICBmYVNtb2tpbmcsCiAgICAgIGZhU3F1YXJlUG9sbFZlcnRpY2FsLAogICAgICBmYVBvbGwsCiAgICAgIGZhUGVyc29uQ2lyY2xlTWludXMsCiAgICAgIGZhQmlvaGF6YXJkLAogICAgICBmYUJlbGxDb25jaWVyZ2UsCiAgICAgIGZhQ29uY2llcmdlQmVsbCwKICAgICAgZmFSdWxlckhvcml6b250YWwsCiAgICAgIGZhSG9yc2UsCiAgICAgIGZhQ2FsZW5kYXI6IGZhQ2FsZW5kYXIyLAogICAgICBmYUhhbmRzSG9sZGluZ0NoaWxkLAogICAgICBmYUl0YWxpYywKICAgICAgZmFLaGFuZGEsCiAgICAgIGZhRmFjZUZyb3duT3BlbjogZmFGYWNlRnJvd25PcGVuMiwKICAgICAgZmFGcm93bk9wZW46IGZhRnJvd25PcGVuMiwKICAgICAgZmFDaGVjaywKICAgICAgZmFGaW5nZXJwcmludCwKICAgICAgZmFDaGFyZ2luZ1N0YXRpb24sCiAgICAgIGZhVXNlckxvY2ssCiAgICAgIGZhTW9iaWxlU2NyZWVuQnV0dG9uLAogICAgICBmYU1vYmlsZUFsdCwKICAgICAgZmFBbmNob3JDaXJjbGVDaGVjaywKICAgICAgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsCiAgICAgIGZhQmxpbmQsCiAgICAgIGZhRmlsZVdhdmVmb3JtLAogICAgICBmYUZpbGVNZWRpY2FsQWx0LAogICAgICBmYUhvdXNlQ3JhY2ssCiAgICAgIGZhSGF0V2l6YXJkLAogICAgICBmYVVzZXJEb2N0b3IsCiAgICAgIGZhVXNlck1kLAogICAgICBmYUNoYXJ0QmFyOiBmYUNoYXJ0QmFyMiwKICAgICAgZmFCYXJDaGFydDogZmFCYXJDaGFydDIsCiAgICAgIGZhU3ByYXlDYW5TcGFya2xlcywKICAgICAgZmFBaXJGcmVzaGVuZXIsCiAgICAgIGZhQmFodFNpZ24sCiAgICAgIGZhVGVtcGVyYXR1cmVBcnJvd1VwLAogICAgICBmYVRlbXBlcmF0dXJlVXAsCiAgICAgIGZhV2ViQXdlc29tZTogZmFXZWJBd2Vzb21lMiwKICAgICAgZmFOb25CaW5hcnksCiAgICAgIGZhTiwKICAgICAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzLAogICAgICBmYUhvdXNlOiBmYUhvdXNlMiwKICAgICAgZmFIb21lOiBmYUhvbWUyLAogICAgICBmYUhvbWVBbHQ6IGZhSG9tZUFsdDIsCiAgICAgIGZhSG9tZUxnQWx0OiBmYUhvbWVMZ0FsdDIsCiAgICAgIGZhU3Bpbm5lciwKICAgICAgZmFHYXZlbCwKICAgICAgZmFMZWdhbCwKICAgICAgZmFUaWNrZXRTaW1wbGUsCiAgICAgIGZhVGlja2V0QWx0LAogICAgICBmYURvdmUsCiAgICAgIGZhVGFycERyb3BsZXQsCiAgICAgIGZhVHJlZUNpdHksCiAgICAgIGZhVHVyblVwLAogICAgICBmYUxldmVsVXBBbHQsCiAgICAgIGZhVGVtcGVyYXR1cmVRdWFydGVyLAogICAgICBmYVRlbXBlcmF0dXJlMSwKICAgICAgZmFUaGVybW9tZXRlcjEsCiAgICAgIGZhVGhlcm1vbWV0ZXJRdWFydGVyLAogICAgICBmYVNsaWRlcnMsCiAgICAgIGZhU2xpZGVyc0gsCiAgICAgIGZhTW9zcXVlLAogICAgICBmYUgsCiAgICAgIGZhSW5mbywKICAgICAgZmFQZXJzb25XYWxraW5nLAogICAgICBmYVdhbGtpbmcsCiAgICAgIGZhQXJyb3dUdXJuRG93biwKICAgICAgZmFMZXZlbERvd24sCiAgICAgIGZhUm9hZCwKICAgICAgZmFTcGlyYWwsCiAgICAgIGZhRmFjZUZyb3duOiBmYUZhY2VGcm93bjIsCiAgICAgIGZhRnJvd246IGZhRnJvd24yLAogICAgICBmYVdpbmVHbGFzc0VtcHR5LAogICAgICBmYVdpbmVHbGFzc0FsdCwKICAgICAgZmFDbGFwcGVyYm9hcmQsCiAgICAgIGZhRm9yd2FyZFN0ZXAsCiAgICAgIGZhU3RlcEZvcndhcmQsCiAgICAgIGZhU3F1YXJlVXBSaWdodCwKICAgICAgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQsCiAgICAgIGZhQm9va0pvdXJuYWxXaGlsbHMsCiAgICAgIGZhSm91cm5hbFdoaWxscywKICAgICAgZmFDaGFtcGFnbmVHbGFzc2VzLAogICAgICBmYUdsYXNzQ2hlZXJzLAogICAgICBmYUR1bXBzdGVyLAogICAgICBmYUhlYXJ0Q2lyY2xlWG1hcmssCiAgICAgIGZhQ29tcHV0ZXIsCiAgICAgIGZhV2FuZE1hZ2ljLAogICAgICBmYU1hZ2ljLAogICAgICBmYUJyYWluLAogICAgICBmYUJyaWVmY2FzZU1lZGljYWwsCiAgICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQ29kZUNvbW1pdCwKICAgICAgZmFQZXJzb25CcmVhc3RmZWVkaW5nLAogICAgICBmYVBlcnNvblJheXMsCiAgICAgIGZhTWFuYXRTaWduLAogICAgICBmYVNvcnQsCiAgICAgIGZhVW5zb3J0ZWQsCiAgICAgIGZhQ2lyY2xlUmFkaWF0aW9uLAogICAgICBmYVJhZGlhdGlvbkFsdCwKICAgICAgZmFMYXB0b3BDb2RlLAogICAgICBmYVNpbmssCiAgICAgIGZhQXJyb3dVcEZyb21XYXRlclB1bXAsCiAgICAgIGZhTWljcm9waG9uZUxpbmVzU2xhc2gsCiAgICAgIGZhTWljcm9waG9uZUFsdFNsYXNoLAogICAgICBmYVNlcnZlciwKICAgICAgZmFVc2VyOiBmYVVzZXIyLAogICAgICBmYVVzZXJBbHQ6IGZhVXNlckFsdDIsCiAgICAgIGZhVXNlckxhcmdlOiBmYVVzZXJMYXJnZTIsCiAgICAgIGZhU25vd2ZsYWtlOiBmYVNub3dmbGFrZTIsCiAgICAgIGZhVGF1cnVzLAogICAgICBmYVNrdWxsQ3Jvc3Nib25lcywKICAgICAgZmFQZXNvU2lnbiwKICAgICAgZmFXaW5lR2xhc3MsCiAgICAgIGZhVGVtcGVyYXR1cmVIYWxmLAogICAgICBmYVRlbXBlcmF0dXJlMiwKICAgICAgZmFUaGVybW9tZXRlcjIsCiAgICAgIGZhVGhlcm1vbWV0ZXJIYWxmLAogICAgICBmYVRpY2tldCwKICAgICAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUFycm93c1R1cm5SaWdodCwKICAgICAgZmFDYW5keUNhbmUsCiAgICAgIGZhV2hlZWxjaGFpciwKICAgICAgZmFTcGVsbENoZWNrLAogICAgICBmYVZvbHVtZU9mZiwKICAgICAgZmFMdW5ncywKICAgICAgZmFCb29rbWFyazogZmFCb29rbWFyazIsCiAgICAgIGZhQmFyY29kZSwKICAgICAgZmFMaXN0T2wsCiAgICAgIGZhTGlzdDEyLAogICAgICBmYUxpc3ROdW1lcmljLAogICAgICBmYUZpbGVDaXJjbGVYbWFyaywKICAgICAgZmFDdWJlLAogICAgICBmYVRhcGUsCiAgICAgIGZhQm9tYiwKICAgICAgZmFTY2FsZVVuYmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlTGVmdCwKICAgICAgZmFTcXVhcmVDYXJldExlZnQ6IGZhU3F1YXJlQ2FyZXRMZWZ0MiwKICAgICAgZmFDYXJldFNxdWFyZUxlZnQ6IGZhQ2FyZXRTcXVhcmVMZWZ0MiwKICAgICAgZmFSdWxlciwKICAgICAgZmFJLAogICAgICBmYVZvbHVtZVhtYXJrLAogICAgICBmYVZvbHVtZU11dGUsCiAgICAgIGZhVm9sdW1lVGltZXMsCiAgICAgIGZhQXJjaHdheSwKICAgICAgZmFQZXJzb25EaWdnaW5nLAogICAgICBmYURpZ2dpbmcsCiAgICAgIGZhR2F1Z2VIaWdoLAogICAgICBmYVRhY2hvbWV0ZXJBbHQsCiAgICAgIGZhVGFjaG9tZXRlckFsdEZhc3QsCiAgICAgIGZhR2VuZGVybGVzcywKICAgICAgZmFDbG91ZFN1biwKICAgICAgZmFBcnJvd1JpZ2h0LAogICAgICBmYUhhbmRzaGFrZTogZmFIYW5kc2hha2UyLAogICAgICBmYUhhbmRzaGFrZUFsdDogZmFIYW5kc2hha2VBbHQyLAogICAgICBmYUhhbmRzaGFrZVNpbXBsZTogZmFIYW5kc2hha2VTaW1wbGUyLAogICAgICBmYVBlcnNvblNraWluZywKICAgICAgZmFTa2lpbmcsCiAgICAgIGZhQnJpZGdlV2F0ZXIsCiAgICAgIGZhQnVpbGRpbmdOZ28sCiAgICAgIGZhSWdsb28sCiAgICAgIGZhQ2lyY2xlRG9sbGFyVG9TbG90LAogICAgICBmYURvbmF0ZSwKICAgICAgZmFZLAogICAgICBmYUZhY2VTbWlsZVdpbms6IGZhRmFjZVNtaWxlV2luazIsCiAgICAgIGZhU21pbGVXaW5rOiBmYVNtaWxlV2luazIsCiAgICAgIGZhRGljZUZvdXIsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczogZmFGYWNlR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFHcmluU3F1aW50VGVhcnM6IGZhR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFGaWxlQXVkaW86IGZhRmlsZUF1ZGlvMiwKICAgICAgZmFBcnJvd3NEb3duVG9MaW5lLAogICAgICBmYUcsCiAgICAgIGZhVmloYXJhLAogICAgICBmYUZsYWdDaGVja2VyZWQsCiAgICAgIGZhR2F1Z2VTaW1wbGUsCiAgICAgIGZhR2F1Z2VTaW1wbGVNZWQsCiAgICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UsCiAgICAgIGZhUmlnaHRMZWZ0LAogICAgICBmYUV4Y2hhbmdlQWx0LAogICAgICBmYVBpbGxzLAogICAgICBmYUV4cGxvc2lvbiwKICAgICAgZmFBcnJvd3NEb3duVG9QZW9wbGUsCiAgICAgIGZhVXNlcnNWaWV3ZmluZGVyLAogICAgICBmYUNhck9uLAogICAgICBmYVNsZWlnaCwKICAgICAgZmFEdW1iYmVsbCwKICAgICAgZmFCYWJ5Q2FycmlhZ2UsCiAgICAgIGZhQ2FycmlhZ2VCYWJ5LAogICAgICBmYUtpd2lCaXJkLAogICAgICBmYUNhbGVuZGFyWG1hcms6IGZhQ2FsZW5kYXJYbWFyazIsCiAgICAgIGZhQ2FsZW5kYXJUaW1lczogZmFDYWxlbmRhclRpbWVzMiwKICAgICAgZmFDaXJjbGVEb3duOiBmYUNpcmNsZURvd24yLAogICAgICBmYUFycm93QWx0Q2lyY2xlRG93bjogZmFBcnJvd0FsdENpcmNsZURvd24yLAogICAgICBmYUZpbGVNZWRpY2FsLAogICAgICBmYVhtYXJrLAogICAgICBmYUNsb3NlLAogICAgICBmYU11bHRpcGx5LAogICAgICBmYVJlbW92ZSwKICAgICAgZmFUaW1lcywKICAgICAgZmFTaGFwZXMsCiAgICAgIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsCiAgICAgIGZhRGljZU9uZSwKICAgICAgZmFMb2NrT3BlbiwKICAgICAgZmFQZXBwZXJIb3QsCiAgICAgIGZhRHJvcGxldFNsYXNoLAogICAgICBmYVRpbnRTbGFzaCwKICAgICAgZmFEcm9wbGV0LAogICAgICBmYVRpbnQsCiAgICAgIGZhRmlsZUxpbmVzOiBmYUZpbGVMaW5lczIsCiAgICAgIGZhRmlsZUFsdDogZmFGaWxlQWx0MiwKICAgICAgZmFGaWxlVGV4dDogZmFGaWxlVGV4dDIsCiAgICAgIGZhQ29tbWVudHNEb2xsYXIsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sCiAgICAgIGZhU2VhcmNoTG9jYXRpb24sCiAgICAgIGZhRmlsZUludm9pY2UsCiAgICAgIGZhUGVudGFnb24sCiAgICAgIGZhUmVwdWJsaWNhbiwKICAgICAgZmFTaG9wLAogICAgICBmYVN0b3JlQWx0LAogICAgICBmYUZpbG0sCiAgICAgIGZhRmlsbUFsdCwKICAgICAgZmFGaWxtU2ltcGxlLAogICAgICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssCiAgICAgIGZhQ29tbWVudHM6IGZhQ29tbWVudHMyLAogICAgICBmYVRhZ3MsCiAgICAgIGZhR3VuLAogICAgICBmYUNpcmNsZUNoZWNrOiBmYUNpcmNsZUNoZWNrMiwKICAgICAgZmFDaGVja0NpcmNsZTogZmFDaGVja0NpcmNsZTIsCiAgICAgIGZhU2NvcnBpbywKICAgICAgZmFJZENhcmRDbGlwLAogICAgICBmYUlkQ2FyZEFsdCwKICAgICAgZmFNb29uOiBmYU1vb24yLAogICAgICBmYU9pbFdlbGwsCiAgICAgIGZhVGFjaG9ncmFwaERpZ2l0YWwsCiAgICAgIGZhRGlnaXRhbFRhY2hvZ3JhcGgsCiAgICAgIGZhVGFibGV0LAogICAgICBmYVRhYmxldEFuZHJvaWQsCiAgICAgIGZhUnVibGVTaWduLAogICAgICBmYVJvdWJsZSwKICAgICAgZmFSdWIsCiAgICAgIGZhUnVibGUsCiAgICAgIGZhQ2xvc2VkQ2FwdGlvbmluZzogZmFDbG9zZWRDYXB0aW9uaW5nMiwKICAgICAgZmFQZW4sCiAgICAgIGZhUGxhbmUsCiAgICAgIGZhSW1hZ2VzOiBmYUltYWdlczIsCiAgICAgIGZhTW9iaWxlU2NyZWVuLAogICAgICBmYU1vYmlsZUFuZHJvaWRBbHQsCiAgICAgIGZhR3VhcmFuaVNpZ24sCiAgICAgIGZhQmFnU2hvcHBpbmcsCiAgICAgIGZhU2hvcHBpbmdCYWcsCiAgICAgIGZhQ2lyY2xlUmlnaHQ6IGZhQ2lyY2xlUmlnaHQyLAogICAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQ6IGZhQXJyb3dBbHRDaXJjbGVSaWdodDIsCiAgICAgIGZhUGhvbmVWb2x1bWUsCiAgICAgIGZhVm9sdW1lQ29udHJvbFBob25lLAogICAgICBmYUN1YmVzLAogICAgICBmYVBob25lLAogICAgICBmYVRvcmlpR2F0ZSwKICAgICAgZmFCYWNvbiwKICAgICAgZmFQZXJzb25GYWxsaW5nQnVyc3QsCiAgICAgIGZhUXVvdGVSaWdodCwKICAgICAgZmFRdW90ZVJpZ2h0QWx0LAogICAgICBmYUhvdXNlTWVkaWNhbEZsYWcsCiAgICAgIGZhUHJlc2NyaXB0aW9uLAogICAgICBmYURpY2VUaHJlZSwKICAgICAgZmFCdWlsZGluZ0xvY2ssCiAgICAgIGZhSWRDYXJkOiBmYUlkQ2FyZDIsCiAgICAgIGZhRHJpdmVyc0xpY2Vuc2U6IGZhRHJpdmVyc0xpY2Vuc2UyLAogICAgICBmYUNpcmNsZVBsYXk6IGZhQ2lyY2xlUGxheTIsCiAgICAgIGZhUGxheUNpcmNsZTogZmFQbGF5Q2lyY2xlMiwKICAgICAgZmFGYWNlTGF1Z2hCZWFtOiBmYUZhY2VMYXVnaEJlYW0yLAogICAgICBmYUxhdWdoQmVhbTogZmFMYXVnaEJlYW0yLAogICAgICBmYUxlYWYsCiAgICAgIGZhSG91c2VDaGltbmV5VXNlciwKICAgICAgZmFSb3RhdGVSaWdodCwKICAgICAgZmFSZWRvQWx0LAogICAgICBmYVJvdGF0ZUZvcndhcmQsCiAgICAgIGZhVG9vdGgsCiAgICAgIGZhSG91c2VDaGltbmV5V2luZG93LAogICAgICBmYU1vdG9yY3ljbGUsCiAgICAgIGZhQmFja3dhcmRGYXN0LAogICAgICBmYUZhc3RCYWNrd2FyZCwKICAgICAgZmFBZGRyZXNzQm9vazogZmFBZGRyZXNzQm9vazIsCiAgICAgIGZhQ29udGFjdEJvb2s6IGZhQ29udGFjdEJvb2syLAogICAgICBmYVNhaWxib2F0LAogICAgICBmYUJvb2tCb29rbWFyaywKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LAogICAgICBmYU1pY3JvcGhvbmVMaW5lcywKICAgICAgZmFNaWNyb3Bob25lQWx0LAogICAgICBmYVJlcGx5QWxsLAogICAgICBmYU1haWxSZXBseUFsbCwKICAgICAgZmFVbml2ZXJzYWxBY2Nlc3MsCiAgICAgIGZhVG9pbGV0UGFwZXIsCiAgICAgIGZhVG9pbGV0UGFwZXJBbHQsCiAgICAgIGZhVG9pbGV0UGFwZXJCbGFuaywKICAgICAgZmFWckNhcmRib2FyZCwKICAgICAgZmFQaXp6YVNsaWNlLAogICAgICBmYVNwcmF5Q2FuLAogICAgICBmYVZvbHVtZUxvdywKICAgICAgZmFWb2x1bWVEb3duLAogICAgICBmYUNyb3NzLAogICAgICBmYVBlcnNvbiwKICAgICAgZmFNYWxlLAogICAgICBmYUhvdXJnbGFzczogZmFIb3VyZ2xhc3MzLAogICAgICBmYUhvdXJnbGFzc0VtcHR5OiBmYUhvdXJnbGFzc0VtcHR5MiwKICAgICAgZmFGaXNoLAogICAgICBmYURydW1zdGlja0JpdGUsCiAgICAgIGZhQ2hhcnRTaW1wbGUsCiAgICAgIGZhQXRvbSwKICAgICAgZmFQLAogICAgICBmYUpldEZpZ2h0ZXJVcCwKICAgICAgZmFQbHVnQ2lyY2xlWG1hcmssCiAgICAgIGZhU2hlZXRQbGFzdGljLAogICAgICBmYVYsCiAgICAgIGZhTGlzdCwKICAgICAgZmFMaXN0U3F1YXJlcywKICAgICAgZmFQaXNjZXMsCiAgICAgIGZhU29sYXJQYW5lbCwKICAgICAgZmFMYW5kTWluZU9uLAogICAgICBmYUhlYWRwaG9uZXM6IGZhSGVhZHBob25lczIsCiAgICAgIGZhSGVhZHBob25lc0FsdDogZmFIZWFkcGhvbmVzQWx0MiwKICAgICAgZmFIZWFkcGhvbmVzU2ltcGxlOiBmYUhlYWRwaG9uZXNTaW1wbGUyLAogICAgICBmYUJ1cywKICAgICAgZmFGaWxlUG93ZXJwb2ludDogZmFGaWxlUG93ZXJwb2ludDIsCiAgICAgIGZhUXVvdGVMZWZ0LAogICAgICBmYVF1b3RlTGVmdEFsdCwKICAgICAgZmFDaGV2cm9uRG93biwKICAgICAgZmFFYXJ0aEFzaWEsCiAgICAgIGZhR2xvYmVBc2lhLAogICAgICBmYUNlbnRTaWduLAogICAgICBmYVNoaWVsZENhdCwKICAgICAgZmFTY2hvb2xDaXJjbGVDaGVjaywKICAgICAgZmFNYXJ0aW5pR2xhc3MsCiAgICAgIGZhR2xhc3NNYXJ0aW5pQWx0LAogICAgICBmYVBsdWcsCiAgICAgIGZhUGFub3JhbWEsCiAgICAgIGZhQ2xvY2tSb3RhdGVMZWZ0LAogICAgICBmYUhpc3RvcnksCiAgICAgIGZhSmFyV2hlYXQsCiAgICAgIGZhQ2xvdWRBcnJvd0Rvd24sCiAgICAgIGZhQ2xvdWREb3dubG9hZCwKICAgICAgZmFDbG91ZERvd25sb2FkQWx0LAogICAgICBmYVRydWNrUmFtcEJveCwKICAgICAgZmFUcnVja0xvYWRpbmcsCiAgICAgIGZhQW5nbGVEb3duLAogICAgICBmYVBsdWdDaXJjbGVDaGVjaywKICAgICAgZmFXaW5kb3dNYXhpbWl6ZTogZmFXaW5kb3dNYXhpbWl6ZTIsCiAgICAgIGZhSGFuZHNIb2xkaW5nQ2lyY2xlLAogICAgICBmYUxvY2F0aW9uUGluLAogICAgICBmYU1hcE1hcmtlciwKICAgICAgZmFCb3dsaW5nQmFsbCwKICAgICAgZmFDYXJ0RmxhdGJlZCwKICAgICAgZmFEb2xseUZsYXRiZWQsCiAgICAgIGZhSG91c2VVc2VyLAogICAgICBmYUhvbWVVc2VyLAogICAgICBmYUdob3N0LAogICAgICBmYUNvbW1lbnROb2RlcywKICAgICAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmUsCiAgICAgIGZhUGx1Z0NpcmNsZVBsdXMsCiAgICAgIGZhUGVyc29uU3dpbW1pbmcsCiAgICAgIGZhU3dpbW1lciwKICAgICAgZmFDb21tZW50RG90czogZmFDb21tZW50RG90czIsCiAgICAgIGZhQ29tbWVudGluZzogZmFDb21tZW50aW5nMiwKICAgICAgZmFDaGFydFBpZSwKICAgICAgZmFQaWVDaGFydCwKICAgICAgZmFGcm9nLAogICAgICBmYVdpbmVCb3R0bGUsCiAgICAgIGZhSW5ib3gsCiAgICAgIGZhU3F1YXJlSCwKICAgICAgZmFIU3F1YXJlLAogICAgICBmYUhvdXNlTWVkaWNhbCwKICAgICAgZmFDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LAogICAgICBmYUZpbGVDc3YsCiAgICAgIGZhSGF0Q293Ym95LAogICAgICBmYUZhY2VHcmluVG9uZ3VlV2luazogZmFGYWNlR3JpblRvbmd1ZVdpbmsyLAogICAgICBmYUdyaW5Ub25ndWVXaW5rOiBmYUdyaW5Ub25ndWVXaW5rMiwKICAgICAgZmFMLAogICAgICBmYUFycm93RG93blNob3J0V2lkZSwKICAgICAgZmFTb3J0QW1vdW50RGVzYywKICAgICAgZmFTb3J0QW1vdW50RG93bkFsdCwKICAgICAgZmFIb3VyZ2xhc3NIYWxmOiBmYUhvdXJnbGFzc0hhbGYyLAogICAgICBmYUhvdXJnbGFzczI6IGZhSG91cmdsYXNzMjIsCiAgICAgIGZhU3Bvb24sCiAgICAgIGZhVXRlbnNpbFNwb29uLAogICAgICBmYUNyZWRpdENhcmQ6IGZhQ3JlZGl0Q2FyZDIsCiAgICAgIGZhQ3JlZGl0Q2FyZEFsdDogZmFDcmVkaXRDYXJkQWx0MiwKICAgICAgZmFGaWxlSW52b2ljZURvbGxhciwKICAgICAgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLAogICAgICBmYVBhc3RhZmFyaWFuaXNtLAogICAgICBmYU1hcnRpbmlHbGFzc0NpdHJ1cywKICAgICAgZmFDb2NrdGFpbCwKICAgICAgZmFCdWxsaG9ybiwKICAgICAgZmFCb3hUaXNzdWUsCiAgICAgIGZhTWF0dHJlc3NQaWxsb3csCiAgICAgIGZhQ2hldnJvbkxlZnQsCiAgICAgIGZhQ2xvdWRNb29uUmFpbiwKICAgICAgZmFBcnJvd0Rvd24xOSwKICAgICAgZmFTb3J0TnVtZXJpY0FzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd24sCiAgICAgIGZhSGFuZFNwb2NrOiBmYUhhbmRTcG9jazIsCiAgICAgIGZhV2FuZE1hZ2ljU3BhcmtsZXMsCiAgICAgIGZhTWFnaWNXYW5kU3BhcmtsZXMsCiAgICAgIGZhQ29tbWVudE1lZGljYWwsCiAgICAgIGZhQmVsbFNsYXNoOiBmYUJlbGxTbGFzaDIsCiAgICAgIGZhSGFuZHNoYWtlU2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlQWx0U2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2gsCiAgICAgIGZhQm90dGxlV2F0ZXIsCiAgICAgIGZhRGljZUQyMCwKICAgICAgZmFBcnJvd0Rvd25aQSwKICAgICAgZmFTb3J0QWxwaGFEZXNjLAogICAgICBmYVNvcnRBbHBoYURvd25BbHQsCiAgICAgIGZhQnJ1c2gsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LAogICAgICBmYUFycm93VXBTaG9ydFdpZGUsCiAgICAgIGZhU29ydEFtb3VudFVwQWx0LAogICAgICBmYUdyaXBWZXJ0aWNhbCwKICAgICAgZmFHcmlkVmVydGljYWwsCiAgICAgIGZhQ2FyVHVubmVsLAogICAgICBmYUNoYXJ0Q29sdW1uLAogICAgICBmYUNhcHJpY29ybiwKICAgICAgZmFUcnVja0Fycm93UmlnaHQsCiAgICAgIGZhVHYsCiAgICAgIGZhVGVsZXZpc2lvbiwKICAgICAgZmFUdkFsdCwKICAgICAgZmFTZWN0aW9uLAogICAgICBmYVBlYWNlLAogICAgICBmYVN0YXI6IGZhU3RhcjIsCiAgICAgIGZhRmxhZzogZmFGbGFnMiwKICAgICAgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLAogICAgICBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsCiAgICAgIGZhV2FybmluZywKICAgICAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFHcmFkdWF0aW9uQ2FwLAogICAgICBmYU1vcnRhckJvYXJkLAogICAgICBmYVN0b3JlLAogICAgICBmYVVzZXJBc3Ryb25hdXQsCiAgICAgIGZhQnVpbGRpbmdGbGFnLAogICAgICBmYU11Z1NhdWNlciwKICAgICAgZmFDb2ZmZWUsCiAgICAgIGZhTGVtb246IGZhTGVtb24yLAogICAgICBmYUNhcmF2YW4sCiAgICAgIGZhUSwKICAgICAgZmFMb2NrLAogICAgICBmYVBhaW50Um9sbGVyLAogICAgICBmYVZvbHVtZUhpZ2gsCiAgICAgIGZhVm9sdW1lVXAsCiAgICAgIGZhRm9sZGVyUGx1cywKICAgICAgZmFNZXJjdXJ5LAogICAgICBmYUFuY2hvciwKICAgICAgZmFTcXVhcmVQYXJraW5nLAogICAgICBmYVBhcmtpbmcsCiAgICAgIGZhSGFudWtpYWgsCiAgICAgIGZhUm90YXRlTGVmdCwKICAgICAgZmFSb3RhdGVCYWNrLAogICAgICBmYVJvdGF0ZUJhY2t3YXJkLAogICAgICBmYVVuZG9BbHQsCiAgICAgIGZhSGVhZGluZywKICAgICAgZmFIZWFkZXIsCiAgICAgIGZhQ3Jvc3NoYWlycywKICAgICAgZmFDaXJjbGVOb2RlcywKICAgICAgZmFXaW5kb3dSZXN0b3JlOiBmYVdpbmRvd1Jlc3RvcmUyLAogICAgICBmYVIsCiAgICAgIGZhRmlsdGVyQ2lyY2xlWG1hcmssCiAgICAgIGZhR29wdXJhbSwKICAgICAgZmFIZWFydENpcmNsZU1pbnVzLAogICAgICBmYVN0YXJPZkxpZmUsCiAgICAgIGZhQnVzaW5lc3NUaW1lLAogICAgICBmYUJyaWVmY2FzZUNsb2NrLAogICAgICBmYUZpcmVFeHRpbmd1aXNoZXIsCiAgICAgIGZhQXJyb3dEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dEb3duLAogICAgICBmYVVzZXJNaW51cywKICAgICAgZmFNb25leUNoZWNrLAogICAgICBmYUhvdXNlTGFwdG9wLAogICAgICBmYUxhcHRvcEhvdXNlLAogICAgICBmYURvd25sb2FkLAogICAgICBmYVNhZ2l0dGFyaXVzLAogICAgICBmYUNvdWNoLAogICAgICBmYVJvYWRMb2NrLAogICAgICBmYVNjaXNzb3JzLAogICAgICBmYUN1dCwKICAgICAgZmFCdWcsCiAgICAgIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LAogICAgICBmYVNpZ25PdXQsCiAgICAgIGZhSGFuZEhvbGRpbmdIYW5kLAogICAgICBmYVN0cm9vcHdhZmVsLAogICAgICBmYUNoaWxkLAogICAgICBmYUljZUNyZWFtLAogICAgICBmYUNvbXB1dGVyTW91c2UsCiAgICAgIGZhTW91c2UsCiAgICAgIGZhRmF1Y2V0LAogICAgICBmYUF3YXJkLAogICAgICBmYVBlcnNvbkRyb3duaW5nLAogICAgICBmYUNhbWVyYVJvdGF0ZSwKICAgICAgZmFGYWNlR3JpbkhlYXJ0czogZmFGYWNlR3JpbkhlYXJ0czIsCiAgICAgIGZhR3JpbkhlYXJ0czogZmFHcmluSGVhcnRzMiwKICAgICAgZmFGaWxlRnJhZ21lbnQsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwKICAgICAgZmFUb2dnbGVPbiwKICAgICAgZmFMdW5nc1ZpcnVzLAogICAgICBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwKICAgICAgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsCiAgICAgIGZhVGFibGVUZW5uaXMsCiAgICAgIGZhQm94ZXNQYWNraW5nLAogICAgICBmYVBlcnNvbkNoYWxrYm9hcmQsCiAgICAgIGZhRGljZVR3bywKICAgICAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LAogICAgICBmYUV4Y2hhbmdlLAogICAgICBmYUZvb3RiYWxsLAogICAgICBmYUZvb3RiYWxsQmFsbCwKICAgICAgZmFUcnVja01vbnN0ZXIsCiAgICAgIGZhQXN0ZXJpc2ssCiAgICAgIGZhQmF0dGVyeUZ1bGwsCiAgICAgIGZhQmF0dGVyeSwKICAgICAgZmFCYXR0ZXJ5NSwKICAgICAgZmFDaGlsZERyZXNzLAogICAgICBmYUZhY2VLaXNzQmVhbTogZmFGYWNlS2lzc0JlYW0yLAogICAgICBmYUtpc3NCZWFtOiBmYUtpc3NCZWFtMiwKICAgICAgZmFUcmFzaENhbkFycm93VXAsCiAgICAgIGZhVHJhc2hSZXN0b3JlQWx0LAogICAgICBmYUZvbnQsCiAgICAgIGZhQm9yZUhvbGUsCiAgICAgIGZhVmlydXNDb3ZpZCwKICAgICAgZmFGaWxlUGRmOiBmYUZpbGVQZGYyLAogICAgICBmYUxhbmd1YWdlLAogICAgICBmYVNoaWVsZEhhbHZlZCwKICAgICAgZmFTaGllbGRBbHQsCiAgICAgIGZhQ2FyZXRVcCwKICAgICAgZmFGaWxlUGVuLAogICAgICBmYUZpbGVFZGl0LAogICAgICBmYVBlcnNvbkJpa2luZywKICAgICAgZmFCaWtpbmcsCiAgICAgIGZhQm9va09wZW5SZWFkZXIsCiAgICAgIGZhQm9va1JlYWRlciwKICAgICAgZmFHbGFzc1dhdGVyRHJvcGxldCwKICAgICAgZmFUb3dlckJyb2FkY2FzdCwKICAgICAgZmFCcm9hZGNhc3RUb3dlciwKICAgICAgZmFNaW5pbWl6ZSwKICAgICAgZmFDb21wcmVzc0Fycm93c0FsdCwKICAgICAgZmFBcnJvd1JpZ2h0VG9DaXR5LAogICAgICBmYUxhcHRvcE1lZGljYWwsCiAgICAgIGZhQnJlYWRTbGljZSwKICAgICAgZmFHbG9iZSwKICAgICAgZmFGb2xkZXJNaW51cywKICAgICAgZmFNYXNrRmFjZSwKICAgICAgZmFCb25nLAogICAgICBmYVJvYWRCcmlkZ2UsCiAgICAgIGZhQXJyb3dVcDkxLAogICAgICBmYVNvcnROdW1lcmljVXBBbHQsCiAgICAgIGZhTW91bnRhaW5DaXR5LAogICAgICBmYUFycm93RG93bjkxLAogICAgICBmYVNvcnROdW1lcmljRGVzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd25BbHQsCiAgICAgIGZhRmFjZUdyaW5XaWRlOiBmYUZhY2VHcmluV2lkZTIsCiAgICAgIGZhR3JpbkFsdDogZmFHcmluQWx0MiwKICAgICAgZmFQb29wLAogICAgICBmYURoYXJtYWNoYWtyYSwKICAgICAgZmFCYXR0ZXJ5UXVhcnRlciwKICAgICAgZmFCYXR0ZXJ5MiwKICAgICAgZmFBbmtoLAogICAgICBmYURpYW1vbmQsCiAgICAgIGZhU3Vic2NyaXB0LAogICAgICBmYVJ1cGVlU2lnbiwKICAgICAgZmFSdXBlZSwKICAgICAgZmFQZXJzb25SaWZsZSwKICAgICAgZmFELAogICAgICBmYVNxdWFyZU5maSwKICAgICAgZmFUZWV0aCwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsCiAgICAgIGZhU2VhcmNoRG9sbGFyLAogICAgICBmYUR1bXBzdGVyRmlyZSwKICAgICAgZmFVcGxvYWQsCiAgICAgIGZhVXNlclNsYXNoLAogICAgICBmYVVzZXJBbHRTbGFzaCwKICAgICAgZmFVc2VyTGFyZ2VTbGFzaCwKICAgICAgZmFBcnJvd0xlZnQsCiAgICAgIGZhVmlhbFZpcnVzLAogICAgICBmYUNoZWNrRG91YmxlLAogICAgICBmYVBhdywKICAgICAgZmFIZWxtZXRTYWZldHksCiAgICAgIGZhSGFyZEhhdCwKICAgICAgZmFIYXRIYXJkLAogICAgICBmYUUsCiAgICAgIGZhRmFjZUxhdWdoU3F1aW50OiBmYUZhY2VMYXVnaFNxdWludDIsCiAgICAgIGZhTGF1Z2hTcXVpbnQ6IGZhTGF1Z2hTcXVpbnQyLAogICAgICBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLAogICAgICBmYUNvbXByZXNzQWx0LAogICAgICBmYUdpZnRzLAogICAgICBmYUJlZCwKICAgICAgZmFNb25leUJpbGxUcmFuc2ZlciwKICAgICAgZmFQZXJzb25SdW5uaW5nLAogICAgICBmYVJ1bm5pbmcsCiAgICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24sCiAgICAgIGZhQ2hldnJvbkNpcmNsZURvd24sCiAgICAgIGZhVXNlck51cnNlLAogICAgICBmYUZhY2VLaXNzV2lua0hlYXJ0OiBmYUZhY2VLaXNzV2lua0hlYXJ0MiwKICAgICAgZmFLaXNzV2lua0hlYXJ0OiBmYUtpc3NXaW5rSGVhcnQyLAogICAgICBmYUZpbGwsCiAgICAgIGZhTW9uZXlCaWxsMVdhdmUsCiAgICAgIGZhTW9uZXlCaWxsV2F2ZUFsdCwKICAgICAgZmFMYW5kbWFyaywKICAgICAgZmFNdXNpYywKICAgICAgZmFCb29rTWVkaWNhbCwKICAgICAgZmFTaHVmZmxlLAogICAgICBmYVJhbmRvbSwKICAgICAgZmFVbmRlcmxpbmUsCiAgICAgIGZhQnVpbGRpbmdVc2VyLAogICAgICBmYVJvYm90LAogICAgICBmYVBsdXMsCiAgICAgIGZhQWRkLAogICAgICBmYUNvcHk6IGZhQ29weTIsCiAgICAgIGZhQ2hlc3NLaW5nOiBmYUNoZXNzS2luZzIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyLAogICAgICBmYUJpdGNvaW5TaWduLAogICAgICBmYUJveCwKICAgICAgZmFTcXVhcmVQbHVzOiBmYVNxdWFyZVBsdXMyLAogICAgICBmYVBsdXNTcXVhcmU6IGZhUGx1c1NxdWFyZTIsCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0gsCiAgICAgIGZhRmFuLAogICAgICBmYUNyb3csCiAgICAgIGZhRmlsZUNpcmNsZUNoZWNrLAogICAgICBmYUxpbmtTbGFzaCwKICAgICAgZmFDaGFpbkJyb2tlbiwKICAgICAgZmFDaGFpblNsYXNoLAogICAgICBmYVVubGluaywKICAgICAgZmFBcnJvd1JvdGF0ZVJpZ2h0LAogICAgICBmYUFycm93UmlnaHRSb3RhdGUsCiAgICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkLAogICAgICBmYVJlZG8sCiAgICAgIGZhUGVuQ2xpcCwKICAgICAgZmFQZW5BbHQsCiAgICAgIGZhRG9vckNsb3NlZCwKICAgICAgZmFBcnJvd0Rvd25XaWRlU2hvcnQsCiAgICAgIGZhU29ydEFtb3VudEFzYywKICAgICAgZmFTb3J0QW1vdW50RG93biwKICAgICAgZmFDYXJldERvd24sCiAgICAgIGZhSywKICAgICAgZmFDaGVja1RvU2xvdCwKICAgICAgZmFWb3RlWWVhLAogICAgICBmYUZpc2hGaW5zLAogICAgICBmYUNvbXByZXNzLAogICAgICBmYUFycm93VXBBWiwKICAgICAgZmFTb3J0QWxwaGFVcCwKICAgICAgZmFVc2VyR3JhZHVhdGUsCiAgICAgIGZhRmlsZUNvZGU6IGZhRmlsZUNvZGUyLAogICAgICBmYVNvYXAsCiAgICAgIGZhUmVjeWNsZSwKICAgICAgZmFGYWNlR3Jpbldpbms6IGZhRmFjZUdyaW5XaW5rMiwKICAgICAgZmFHcmluV2luazogZmFHcmluV2luazIsCiAgICAgIGZhV2F0ZXJMYWRkZXIsCiAgICAgIGZhTGFkZGVyV2F0ZXIsCiAgICAgIGZhU3dpbW1pbmdQb29sLAogICAgICBmYUdlbWluaSwKICAgICAgZmFUb3dlckNlbGwsCiAgICAgIGZhQ29sb25TaWduLAogICAgICBmYUxhcHRvcEZpbGUsCiAgICAgIGZhQmFoYWksCiAgICAgIGZhSGF5a2FsLAogICAgICBmYU1vbmV5QmlsbDE6IGZhTW9uZXlCaWxsMTIsCiAgICAgIGZhTW9uZXlCaWxsQWx0OiBmYU1vbmV5QmlsbEFsdDIsCiAgICAgIGZhQ2xvdWRCb2x0LAogICAgICBmYVRodW5kZXJzdG9ybSwKICAgICAgZmFFdGhlcm5ldCwKICAgICAgZmFIcnl2bmlhU2lnbiwKICAgICAgZmFIcnl2bmlhLAogICAgICBmYUV5ZVNsYXNoOiBmYUV5ZVNsYXNoMiwKICAgICAgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLAogICAgICBmYUx1Z2dhZ2VDYXJ0LAogICAgICBmYVJhZGlhdGlvbiwKICAgICAgZmFGaWxlV29yZDogZmFGaWxlV29yZDIsCiAgICAgIGZhQmVkUHVsc2UsCiAgICAgIGZhUHJvY2VkdXJlcywKICAgICAgZmFUZW50cywKICAgICAgZmFNdWdIb3QsCiAgICAgIGZhQm9sdCwKICAgICAgZmFaYXAsCiAgICAgIGZhSmFyLAogICAgICBmYVRydWNrUGxhbmUsCiAgICAgIGZhSGFuZEhvbGRpbmdIZWFydCwKICAgICAgZmFBcnJvd1JvdGF0ZUxlZnQsCiAgICAgIGZhQXJyb3dMZWZ0Um90YXRlLAogICAgICBmYUFycm93Um90YXRlQmFjaywKICAgICAgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLAogICAgICBmYVVuZG8sCiAgICAgIGZhRmFjZUFuZ3J5OiBmYUZhY2VBbmdyeTIsCiAgICAgIGZhQW5ncnk6IGZhQW5ncnkyLAogICAgICBmYUJ1cnN0LAogICAgICBmYVosCiAgICAgIGZhQmFuZGFnZSwKICAgICAgZmFCYW5kQWlkLAogICAgICBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQnVzU2lkZSwKICAgICAgZmFCdWdzLAogICAgICBmYUJlZXJNdWdFbXB0eSwKICAgICAgZmFCZWVyLAogICAgICBmYVBlcnNvbkNpcmNsZUNoZWNrLAogICAgICBmYVN0YXBsZXIsCiAgICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssCiAgICAgIGZhTmFpcmFTaWduLAogICAgICBmYVdpZmksCiAgICAgIGZhV2lmaTMsCiAgICAgIGZhV2lmaVN0cm9uZywKICAgICAgZmFNb25leUNoZWNrRG9sbGFyLAogICAgICBmYU1vbmV5Q2hlY2tBbHQsCiAgICAgIGZhRXllTG93VmlzaW9uLAogICAgICBmYUxvd1Zpc2lvbiwKICAgICAgZmFDaXJjbGVBcnJvd1VwLAogICAgICBmYUFycm93Q2lyY2xlVXAsCiAgICAgIGZhQ2FtZXJhUmV0cm8sCiAgICAgIGZhQ2Fwc3VsZXMsCiAgICAgIGZhUG9vLAogICAgICBmYVZvbHVtZSwKICAgICAgZmFWb2x1bWVNZWRpdW0sCiAgICAgIGZhRWxldmF0b3IsCiAgICAgIGZhVGFnLAogICAgICBmYUZpbGVDaXJjbGVNaW51cywKICAgICAgZmFEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dBbHREb3duLAogICAgICBmYUNvbXBhY3REaXNjLAogICAgICBmYVN1aXRjYXNlUm9sbGluZywKICAgICAgZmFCb29rUXVyYW4sCiAgICAgIGZhUXVyYW4sCiAgICAgIGZhUGhvbmVTbGFzaCwKICAgICAgZmFSb2FkQ2lyY2xlQ2hlY2ssCiAgICAgIGZhU2hvcExvY2ssCiAgICAgIGZhSW1hZ2VQb3J0cmFpdCwKICAgICAgZmFQb3J0cmFpdCwKICAgICAgZmFCcmlkZ2VMb2NrLAogICAgICBmYUhhbW1lciwKICAgICAgZmFBcnJvd1VwMTksCiAgICAgIGZhU29ydE51bWVyaWNVcCwKICAgICAgZmFDaGVzc0tuaWdodDogZmFDaGVzc0tuaWdodDIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLAogICAgICBmYUV4dGVybmFsTGluaywKICAgICAgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsCiAgICAgIGZhRmFjZUdyaW5CZWFtOiBmYUZhY2VHcmluQmVhbTIsCiAgICAgIGZhR3JpbkJlYW06IGZhR3JpbkJlYW0yLAogICAgICBmYVJlY3RhbmdsZUFkLAogICAgICBmYUFkLAogICAgICBmYUJvb2tUYW5ha2gsCiAgICAgIGZhVGFuYWtoLAogICAgICBmYUhvdFR1YlBlcnNvbiwKICAgICAgZmFIb3RUdWIsCiAgICAgIGZhRmlsZUhhbGZEYXNoZWQsCiAgICAgIGZhT3V0ZGVudCwKICAgICAgZmFEZWRlbnQsCiAgICAgIGZhSGFuZFBlYWNlOiBmYUhhbmRQZWFjZTIsCiAgICAgIGZhSGVhZFNpZGVWaXJ1cywKICAgICAgZmFDb21wYXNzOiBmYUNvbXBhc3MyLAogICAgICBmYVBlbk5pYiwKICAgICAgZmFUZW50QXJyb3dzRG93biwKICAgICAgZmFGb3J3YXJkRmFzdCwKICAgICAgZmFGYXN0Rm9yd2FyZCwKICAgICAgZmFDcm9wLAogICAgICBmYVdoaXNrZXlHbGFzcywKICAgICAgZmFHbGFzc1doaXNrZXksCiAgICAgIGZhU3F1YXJlOiBmYVNxdWFyZTIsCiAgICAgIGZhRmFjZUdyaW46IGZhRmFjZUdyaW4yLAogICAgICBmYUdyaW46IGZhR3JpbjIsCiAgICAgIGZhRmlsZUNvbnRyYWN0LAogICAgICBmYUFuZ2xlVXAsCiAgICAgIGZhRmFjZVNtaWxlOiBmYUZhY2VTbWlsZTIsCiAgICAgIGZhU21pbGU6IGZhU21pbGUyLAogICAgICBmYVBlcnNvbkRyZXNzQnVyc3QsCiAgICAgIGZhRGl2aWRlLAogICAgICBmYUNvZGVGb3JrLAogICAgICBmYUhvdXNlRmxhZywKICAgICAgZmFCdWlsZGluZ0NvbHVtbnMsCiAgICAgIGZhQmFuaywKICAgICAgZmFJbnN0aXR1dGlvbiwKICAgICAgZmFNdXNldW0sCiAgICAgIGZhVW5pdmVyc2l0eSwKICAgICAgZmFSdWcsCiAgICAgIGZhQ29kZU1lcmdlLAogICAgICBmYUhvdXNlVHN1bmFtaSwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCwKICAgICAgZmFVbWJyZWxsYSwKICAgICAgZmFIaWxsUm9ja3NsaWRlLAogICAgICBmYVVzZXJTZWNyZXQsCiAgICAgIGZhUGFnZXIsCiAgICAgIGZhQnJpZWZjYXNlLAogICAgICBmYVRyb3dlbEJyaWNrcywKICAgICAgZmFTb2NrcywKICAgICAgZmFULAogICAgICBmYU1pY3JvY2hpcCwKICAgICAgZmFUcnVja01lZGljYWwsCiAgICAgIGZhQW1idWxhbmNlLAogICAgICBmYU9tLAogICAgICBmYU1vc3F1aXRvTmV0LAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZSwKICAgICAgZmFVc2Vyc0dlYXIsCiAgICAgIGZhVXNlcnNDb2csCiAgICAgIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVBhdXNlLAogICAgICBmYVN0YWZmU25ha2UsCiAgICAgIGZhUm9kQXNjbGVwaXVzLAogICAgICBmYVJvZFNuYWtlLAogICAgICBmYVN0YWZmQWVzY3VsYXBpdXMsCiAgICAgIGZhUGlnZ3lCYW5rLAogICAgICBmYU1vbnVtZW50LAogICAgICBmYUFuZ2xlc1JpZ2h0LAogICAgICBmYUFuZ2xlRG91YmxlUmlnaHQsCiAgICAgIGZhRGVza3RvcCwKICAgICAgZmFEZXNrdG9wQWx0LAogICAgICBmYVBsYW5lQ2lyY2xlWG1hcmssCiAgICAgIGZhUmV0d2VldCwKICAgICAgZmFVc2VyR2VhciwKICAgICAgZmFVc2VyQ29nLAogICAgICBmYUJvcmRlckFsbCwKICAgICAgZmFDb2lucywKICAgICAgZmFNYXJzU3Ryb2tlLAogICAgICBmYUhhbmRzaGFrZUFuZ2xlLAogICAgICBmYUhhbmRzSGVscGluZywKICAgICAgZmFBcnJvd0Rvd24sCiAgICAgIGZhTG9jYXRpb25Eb3QsCiAgICAgIGZhTWFwTWFya2VyQWx0LAogICAgICBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFDb29raWVCaXRlLAogICAgICBmYVNjcmV3ZHJpdmVyV3JlbmNoLAogICAgICBmYVRvb2xzLAogICAgICBmYUluZGVudCwKICAgICAgZmFCYXJzLAogICAgICBmYU5hdmljb24sCiAgICAgIGZhSGFuZHNQcmF5aW5nLAogICAgICBmYVByYXlpbmdIYW5kcywKICAgICAgZmFWaXJ1c2VzLAogICAgICBmYVNjaG9vbEZsYWcsCiAgICAgIGZhVHJhZGVtYXJrLAogICAgICBmYUZpcmVCdXJuZXIsCiAgICAgIGZhRmFjZVNtaWxlQmVhbTogZmFGYWNlU21pbGVCZWFtMiwKICAgICAgZmFTbWlsZUJlYW06IGZhU21pbGVCZWFtMiwKICAgICAgZmFUZW50QXJyb3dMZWZ0UmlnaHQsCiAgICAgIGZhUm91dGUsCiAgICAgIGZhQW5nbGVzVXAsCiAgICAgIGZhQW5nbGVEb3VibGVVcCwKICAgICAgZmFCdWNrZXQsCiAgICAgIGZhTGVzc1RoYW5FcXVhbCwKICAgICAgZmFGb2xkZXJDbG9zZWQ6IGZhRm9sZGVyQ2xvc2VkMiwKICAgICAgZmFQZXJzb25UaHJvdWdoV2luZG93LAogICAgICBmYVNjaG9vbExvY2ssCiAgICAgIGZhUGVyc29uQnVyc3QsCiAgICAgIGZhTGVmdExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0TGVmdCwKICAgICAgZmFMb2NhdGlvbkNyb3NzaGFpcnMsCiAgICAgIGZhTG9jYXRpb24sCiAgICAgIGZhUGVyc29uRG90c0Zyb21MaW5lLAogICAgICBmYURpYWdub3NlcywKICAgICAgZmFHYXVnZVNpbXBsZUhpZ2gsCiAgICAgIGZhVGFjaG9tZXRlciwKICAgICAgZmFUYWNob21ldGVyRmFzdCwKICAgICAgZmFBbmdsZXNMZWZ0LAogICAgICBmYUFuZ2xlRG91YmxlTGVmdCwKICAgICAgZmFVcERvd24sCiAgICAgIGZhQXJyb3dzQWx0ViwKICAgICAgZmFCYXR0ZXJ5RW1wdHksCiAgICAgIGZhQmF0dGVyeTAsCiAgICAgIGZhS2V5Ym9hcmQ6IGZhS2V5Ym9hcmQyLAogICAgICBmYUNvb2tpZSwKICAgICAgZmFTdG9wd2F0Y2gsCiAgICAgIGZhRWplY3QsCiAgICAgIGZhU2F0ZWxsaXRlRGlzaCwKICAgICAgZmFGYWNlUm9sbGluZ0V5ZXM6IGZhRmFjZVJvbGxpbmdFeWVzMiwKICAgICAgZmFNZWhSb2xsaW5nRXllczogZmFNZWhSb2xsaW5nRXllczIsCiAgICAgIGZhTGlzdENoZWNrLAogICAgICBmYVRhc2tzLAogICAgICBmYVNhY2tYbWFyaywKICAgICAgZmFIYXNodGFnLAogICAgICBmYVRyYWluLAogICAgICBmYUdhbWVwYWQsCiAgICAgIGZhRmlsZUV4cG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsCiAgICAgIGZhRmFjZUdyaW1hY2U6IGZhRmFjZUdyaW1hY2UyLAogICAgICBmYUdyaW1hY2U6IGZhR3JpbWFjZTIsCiAgICAgIGZhVHJhaW5TdWJ3YXksCiAgICAgIGZhU3Vid2F5LAogICAgICBmYUNpcmNsZURvdDogZmFDaXJjbGVEb3QyLAogICAgICBmYURvdENpcmNsZTogZmFEb3RDaXJjbGUyLAogICAgICBmYU9iamVjdEdyb3VwOiBmYU9iamVjdEdyb3VwMiwKICAgICAgZmFTaGlwLAogICAgICBmYUMsCiAgICAgIGZhU3F1YXJlUGhvbmUsCiAgICAgIGZhUGhvbmVTcXVhcmUsCiAgICAgIGZhUnVsZXJDb21iaW5lZCwKICAgICAgZmFBcnJvd3NSb3RhdGUsCiAgICAgIGZhUmVmcmVzaCwKICAgICAgZmFTeW5jLAogICAgICBmYVBlcnNvbkRyZXNzLAogICAgICBmYUZlbWFsZSwKICAgICAgZmFCb29rT3BlbiwKICAgICAgZmFGb2xkZXJUcmVlLAogICAgICBmYVZpcmdvLAogICAgICBmYUJveEFyY2hpdmUsCiAgICAgIGZhQXJjaGl2ZSwKICAgICAgZmFUZW50QXJyb3dEb3duVG9MaW5lLAogICAgICBmYVFyY29kZSwKICAgICAgZmFEcmFnb24sCiAgICAgIGZhSG91cmdsYXNzRW5kLAogICAgICBmYUhvdXJnbGFzczM6IGZhSG91cmdsYXNzMzIsCiAgICAgIGZhR3JpcCwKICAgICAgZmFHcmlkSG9yaXpvbnRhbCwKICAgICAgZmFHcmlwSG9yaXpvbnRhbCwKICAgICAgZmFCb3JkZXJUb3BMZWZ0LAogICAgICBmYUJvcmRlclN0eWxlLAogICAgICBmYUxpc3RVbCwKICAgICAgZmFMaXN0RG90cywKICAgICAgZmFQZW9wbGVSb2JiZXJ5LAogICAgICBmYU1vYmlsZUJ1dHRvbiwKICAgICAgZmFBcnJvd0Rvd25BWiwKICAgICAgZmFTb3J0QWxwaGFBc2MsCiAgICAgIGZhU29ydEFscGhhRG93biwKICAgICAgZmFNb25leUJpbGwsCiAgICAgIGZhQ2lyY2xlTWludXMsCiAgICAgIGZhTWludXNDaXJjbGUsCiAgICAgIGZhQXJyb3dQb2ludGVyLAogICAgICBmYU1vdXNlUG9pbnRlciwKICAgICAgZmFTcXVhcmVTaGFyZU5vZGVzLAogICAgICBmYVNoYXJlQWx0U3F1YXJlLAogICAgICBmYVRhYmxlQ2VsbHNMYXJnZSwKICAgICAgZmFUaExhcmdlLAogICAgICBmYUNhdCwKICAgICAgZmFDYWxlbmRhcldlZWssCiAgICAgIGZhQ29kZUNvbXBhcmUsCiAgICAgIGZhTGVvLAogICAgICBmYVJvYWRDaXJjbGVYbWFyaywKICAgICAgZmFQYWxsZXQsCiAgICAgIGZhQ2FrZUNhbmRsZXMsCiAgICAgIGZhQmlydGhkYXlDYWtlLAogICAgICBmYUNha2UsCiAgICAgIGZhQnVnU2xhc2gsCiAgICAgIGZhVGFycCwKICAgICAgZmFEaWFncmFtUHJlZGVjZXNzb3IsCiAgICAgIGZhRmFjZUZsdXNoZWQ6IGZhRmFjZUZsdXNoZWQyLAogICAgICBmYUZsdXNoZWQ6IGZhRmx1c2hlZDIsCiAgICAgIGZhRGlhZ3JhbU5leHQsCiAgICAgIGZhQW5jaG9yQ2lyY2xlWG1hcmssCiAgICAgIGZhUGVyc29uQ2lyY2xlWG1hcmssCiAgICAgIGZhU3BhLAogICAgICBmYUFyaWVzLAogICAgICBmYUJhcnNQcm9ncmVzcywKICAgICAgZmFUYXNrc0FsdCwKICAgICAgZmFIZWFydENpcmNsZUNoZWNrLAogICAgICBmYU1hcnNTdHJva2VSaWdodCwKICAgICAgZmFNYXJzU3Ryb2tlSCwKICAgICAgZmFUb3dlck9ic2VydmF0aW9uLAogICAgICBmYVN0ZXJsaW5nU2lnbiwKICAgICAgZmFHYnAsCiAgICAgIGZhUG91bmRTaWduLAogICAgICBmYUZhdWNldERyaXAsCiAgICAgIGZhQ2lyY2xlSW5mbywKICAgICAgZmFJbmZvQ2lyY2xlLAogICAgICBmYUZlYXRoZXIsCiAgICAgIGZhQm93bFJpY2UsCiAgICAgIGZhU3RhckhhbGZTdHJva2U6IGZhU3RhckhhbGZTdHJva2UyLAogICAgICBmYVN0YXJIYWxmQWx0OiBmYVN0YXJIYWxmQWx0MiwKICAgICAgZmFUZW1wZXJhdHVyZUFycm93RG93biwKICAgICAgZmFUZW1wZXJhdHVyZURvd24sCiAgICAgIGZhTWFza1ZlbnRpbGF0b3IsCiAgICAgIGZhRmlsZVZpZGVvOiBmYUZpbGVWaWRlbzIsCiAgICAgIGZhQXJyb3dUcmVuZERvd24sCiAgICAgIGZhT2lsQ2FuLAogICAgICBmYVBlb3BsZUNhcnJ5Qm94LAogICAgICBmYVBlb3BsZUNhcnJ5LAogICAgICBmYUNoYWlyLAogICAgICBmYVdpbmQsCiAgICAgIGZhTGF5ZXJHcm91cCwKICAgICAgZmFIZWFkU2lkZU1hc2ssCiAgICAgIGZhSGFuZHMsCiAgICAgIGZhU2lnbkxhbmd1YWdlLAogICAgICBmYVNpZ25pbmcsCiAgICAgIGZhVGFibGV0cywKICAgICAgZmFXZWlnaHRIYW5naW5nLAogICAgICBmYURpY2UsCiAgICAgIGZhU2hvcFNsYXNoLAogICAgICBmYVN0b3JlQWx0U2xhc2gsCiAgICAgIGZhU29ydERvd24sCiAgICAgIGZhU29ydERlc2MsCiAgICAgIGZhUGVzZXRhU2lnbiwKICAgICAgZmFUYWJsZXRTY3JlZW5CdXR0b24sCiAgICAgIGZhVGFibGV0QWx0LAogICAgICBmYUhhbmRIb2xkaW5nRG9sbGFyLAogICAgICBmYUhhbmRIb2xkaW5nVXNkLAogICAgICBmYVNoaWVsZCwKICAgICAgZmFTaGllbGRCbGFuaywKICAgICAgZmFGYWNlTGF1Z2g6IGZhRmFjZUxhdWdoMiwKICAgICAgZmFMYXVnaDogZmFMYXVnaDIsCiAgICAgIGZhSGFuZHNIb2xkaW5nLAogICAgICBmYUNhcnRTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0NhcnQsCiAgICAgIGZhT2N0YWdvbiwKICAgICAgZmFIYW5kUG9pbnRlcjogZmFIYW5kUG9pbnRlcjIsCiAgICAgIGZhUmVnaXN0ZXJlZDogZmFSZWdpc3RlcmVkMiwKICAgICAgZmFIb3VzZVNpZ25hbCwKICAgICAgZmFCYW5nbGFkZXNoaVRha2FTaWduCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTY0LjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2Nqcy9sdWNpZGUuanMKdmFyIHJlcXVpcmVfbHVjaWRlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjQuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvY2pzL2x1Y2lkZS5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGRlZmF1bHRBdHRyaWJ1dGVzID0gewogICAgICB4bWxuczogImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwKICAgICAgd2lkdGg6IDI0LAogICAgICBoZWlnaHQ6IDI0LAogICAgICB2aWV3Qm94OiAiMCAwIDI0IDI0IiwKICAgICAgZmlsbDogIm5vbmUiLAogICAgICBzdHJva2U6ICJjdXJyZW50Q29sb3IiLAogICAgICAic3Ryb2tlLXdpZHRoIjogMiwKICAgICAgInN0cm9rZS1saW5lY2FwIjogInJvdW5kIiwKICAgICAgInN0cm9rZS1saW5lam9pbiI6ICJyb3VuZCIKICAgIH07CiAgICB2YXIgY3JlYXRlU1ZHRWxlbWVudCA9IChbdGFnLCBhdHRycywgY2hpbGRyZW4yXSkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCB0YWcpOwogICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgobmFtZSkgPT4gewogICAgICAgIGVsZW1lbnQ0LnNldEF0dHJpYnV0ZShuYW1lLCBTdHJpbmcoYXR0cnNbbmFtZV0pKTsKICAgICAgfSk7CiAgICAgIGlmIChjaGlsZHJlbjI/Lmxlbmd0aCkgewogICAgICAgIGNoaWxkcmVuMi5mb3JFYWNoKChjaGlsZCkgPT4gewogICAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gY3JlYXRlU1ZHRWxlbWVudChjaGlsZCk7CiAgICAgICAgICBlbGVtZW50NC5hcHBlbmRDaGlsZChjaGlsZEVsZW1lbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH07CiAgICB2YXIgY3JlYXRlRWxlbWVudDMgPSAoaWNvbk5vZGUsIGN1c3RvbUF0dHJzID0ge30pID0+IHsKICAgICAgY29uc3QgdGFnID0gInN2ZyI7CiAgICAgIGNvbnN0IGF0dHJzID0gewogICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLAogICAgICAgIC4uLmN1c3RvbUF0dHJzCiAgICAgIH07CiAgICAgIHJldHVybiBjcmVhdGVTVkdFbGVtZW50KFt0YWcsIGF0dHJzLCBpY29uTm9kZV0pOwogICAgfTsKICAgIHZhciBoYXNBMTF5UHJvcCA9IChwcm9wcykgPT4gewogICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICBpZiAocHJvcC5zdGFydHNXaXRoKCJhcmlhLSIpIHx8IHByb3AgPT09ICJyb2xlIiB8fCBwcm9wID09PSAidGl0bGUiKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHZhciBtZXJnZUNsYXNzZXMgPSAoLi4uY2xhc3NlcykgPT4gY2xhc3Nlcy5maWx0ZXIoKGNsYXNzTmFtZSwgaW5kZXgyLCBhcnJheSkgPT4gewogICAgICByZXR1cm4gQm9vbGVhbihjbGFzc05hbWUpICYmIGNsYXNzTmFtZS50cmltKCkgIT09ICIiICYmIGFycmF5LmluZGV4T2YoY2xhc3NOYW1lKSA9PT0gaW5kZXgyOwogICAgfSkuam9pbigiICIpLnRyaW0oKTsKICAgIHZhciB0b0NhbWVsQ2FzZSA9IChzdHJpbmczKSA9PiBzdHJpbmczLnJlcGxhY2UoCiAgICAgIC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLAogICAgICAobWF0Y2gyLCBwMSwgcDIyKSA9PiBwMjIgPyBwMjIudG9VcHBlckNhc2UoKSA6IHAxLnRvTG93ZXJDYXNlKCkKICAgICk7CiAgICB2YXIgdG9QYXNjYWxDYXNlID0gKHN0cmluZzMpID0+IHsKICAgICAgY29uc3QgY2FtZWxDYXNlID0gdG9DYW1lbENhc2Uoc3RyaW5nMyk7CiAgICAgIHJldHVybiBjYW1lbENhc2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjYW1lbENhc2Uuc2xpY2UoMSk7CiAgICB9OwogICAgdmFyIGdldEF0dHJzID0gKGVsZW1lbnQ0KSA9PiBBcnJheS5mcm9tKGVsZW1lbnQ0LmF0dHJpYnV0ZXMpLnJlZHVjZSgoYXR0cnMsIGF0dHIpID0+IHsKICAgICAgYXR0cnNbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7CiAgICAgIHJldHVybiBhdHRyczsKICAgIH0sIHt9KTsKICAgIHZhciBnZXRDbGFzc05hbWVzID0gKGF0dHJzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICJzdHJpbmciKSByZXR1cm4gYXR0cnM7CiAgICAgIGlmICghYXR0cnMgfHwgIWF0dHJzLmNsYXNzKSByZXR1cm4gIiI7CiAgICAgIGlmIChhdHRycy5jbGFzcyAmJiB0eXBlb2YgYXR0cnMuY2xhc3MgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzLnNwbGl0KCIgIik7CiAgICAgIH0KICAgICAgaWYgKGF0dHJzLmNsYXNzICYmIEFycmF5LmlzQXJyYXkoYXR0cnMuY2xhc3MpKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICB2YXIgcmVwbGFjZUVsZW1lbnQgPSAoZWxlbWVudDQsIHsgbmFtZUF0dHIsIGljb25zOiBpY29uczYsIGF0dHJzIH0pID0+IHsKICAgICAgY29uc3QgaWNvbk5hbWUgPSBlbGVtZW50NC5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICBpZiAoaWNvbk5hbWUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBjb25zdCBDb21wb25lbnROYW1lID0gdG9QYXNjYWxDYXNlKGljb25OYW1lKTsKICAgICAgY29uc3QgaWNvbk5vZGUgPSBpY29uczZbQ29tcG9uZW50TmFtZV07CiAgICAgIGlmICghaWNvbk5vZGUpIHsKICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKAogICAgICAgICAgYCR7ZWxlbWVudDQub3V0ZXJIVE1MfSBpY29uIG5hbWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgaWNvbnMgb2JqZWN0LmAKICAgICAgICApOwogICAgICB9CiAgICAgIGNvbnN0IGVsZW1lbnRBdHRycyA9IGdldEF0dHJzKGVsZW1lbnQ0KTsKICAgICAgY29uc3QgYXJpYVByb3BzID0gaGFzQTExeVByb3AoZWxlbWVudEF0dHJzKSA/IHt9IDogeyAiYXJpYS1oaWRkZW4iOiAidHJ1ZSIgfTsKICAgICAgY29uc3QgaWNvbkF0dHJzID0gewogICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLAogICAgICAgICJkYXRhLWx1Y2lkZSI6IGljb25OYW1lLAogICAgICAgIC4uLmFyaWFQcm9wcywKICAgICAgICAuLi5hdHRycywKICAgICAgICAuLi5lbGVtZW50QXR0cnMKICAgICAgfTsKICAgICAgY29uc3QgZWxlbWVudENsYXNzTmFtZXMgPSBnZXRDbGFzc05hbWVzKGVsZW1lbnRBdHRycyk7CiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGdldENsYXNzTmFtZXMoYXR0cnMpOwogICAgICBjb25zdCBjbGFzc05hbWVzID0gbWVyZ2VDbGFzc2VzKAogICAgICAgICJsdWNpZGUiLAogICAgICAgIGBsdWNpZGUtJHtpY29uTmFtZX1gLAogICAgICAgIC4uLmVsZW1lbnRDbGFzc05hbWVzLAogICAgICAgIC4uLmNsYXNzTmFtZQogICAgICApOwogICAgICBpZiAoY2xhc3NOYW1lcykgewogICAgICAgIE9iamVjdC5hc3NpZ24oaWNvbkF0dHJzLCB7CiAgICAgICAgICBjbGFzczogY2xhc3NOYW1lcwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50MyhpY29uTm9kZSwgaWNvbkF0dHJzKTsKICAgICAgcmV0dXJuIGVsZW1lbnQ0LnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChzdmdFbGVtZW50LCBlbGVtZW50NCk7CiAgICB9OwogICAgdmFyIEFBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMzA0IDEzaDYuMzkyIiB9XQogICAgXTsKICAgIHZhciBBQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDExIDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogICAgdmFyIEFMYXJnZVNtYWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTYgMi41MzYtNy4zMjhhMS4wMiAxLjAyIDEgMCAxIDEuOTI4IDBMMjIgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNjk3IDE0aDUuNjA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjMwNCAxM2g2LjM5MiIgfV0KICAgIF07CiAgICB2YXIgQWNjZXNzaWJpbGl0eSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjQiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxOSAxLTctNiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOCAzLTMgNS41IDMtMi4zNiAzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yNCAxNC41YTUgNSAwIDAgMCA2Ljg4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNzYgMTcuNWE1IDUgMCAwIDAtNi44OC02IiB9XQogICAgXTsKICAgIHZhciBBaXJWZW50ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTcuNWEyLjUgMi41IDAgMSAxLTQgMi4wM1YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY1YTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNiAxNS41NzJBMiAyIDAgMSAwIDEwIDE3di01IiB9XQogICAgXTsKICAgIHZhciBBY3Rpdml0eSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDEyaC0yLjQ4YTIgMiAwIDAgMC0xLjkzIDEuNDZsLTIuMzUgOC4zNmEuMjUuMjUgMCAwIDEtLjQ4IDBMOS4yNCAyLjE4YS4yNS4yNSAwIDAgMC0uNDggMGwtMi4zNSA4LjM2QTIgMiAwIDAgMSA0LjQ5IDEySDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFpcnBsYXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE3SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE1IDUgNkg3WiIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja0NoZWNrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja01pbnVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuODcgNi44N2E4IDggMCAxIDAgMTEuMjYgMTEuMjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOSAxNC4yNWE4IDggMCAwIDAtOS4xNS05LjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMTguNjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0IDIgNiIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja1BsdXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzaDYiIH1dCiAgICBdOwogICAgdmFyIEFsYXJtQ2xvY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NGwyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzIDIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA2LTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM4IDE4LjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42NCAxOC42NyAyMCAyMSIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1TbW9rZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIxYzAtMi41IDItMi41IDItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWMwLTIuNSAyLTIuNSAyLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOC0uOCAzYTEuMjUgMS4yNSAwIDAgMS0xLjIgMUg3YTEuMjUgMS4yNSAwIDAgMS0xLjItMUw1IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM2ExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxYzAtMi41IDItMi41IDItNSIgfV0KICAgIF07CiAgICB2YXIgQWxidW0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjExIDMgMTEgMTEgMTQgOCAxNyAxMSAxNyAzIiB9XQogICAgXTsKICAgIHZhciBBbGlnbkNlbnRlckhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2djRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOFY0YTIgMiAwIDAgMC0yLTJINmEyIDIgMCAwIDAtMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTZ2MWEyIDIgMCAwIDEtMiAyaC0yYTIgMiAwIDAgMS0yLTJ2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOFY3YzAtMS4xLjktMiAyLTJoMmEyIDIgMCAwIDEgMiAydjEiIH1dCiAgICBdOwogICAgdmFyIEFsaWduQ2VudGVyVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBINGEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaDRhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMEg3YTIgMiAwIDAgMS0yLTJ2LTJjMC0xLjEuOS0yIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDFhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJoLTEiIH1dCiAgICBdOwogICAgdmFyIEFsaWduRW5kSG9yaXpvbnRhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjkiLCB4OiAiMTQiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMkgyIiB9XQogICAgXTsKICAgIHZhciBBbGlnbkVuZFZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNiIsIHg6ICI5IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyVjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDdWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNVYyIiB9XQogICAgXTsKICAgIHZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjQiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTQiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI0IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE0IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNiIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxMiIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI2IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICI5IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIyVjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIzIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE1IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduU3RhcnRIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiOSIsIHg6ICIxNCIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDJIMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25TdGFydFZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOSIsIGhlaWdodDogIjYiLCB4OiAiNiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjYiLCB4OiAiNiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2gtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA3aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdIMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjUiLCB5OiAiMTQiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNCIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGgyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxKdXN0aWZ5RW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxTcGFjZUFyb3VuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjkiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA0SDIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxTcGFjZUJldHdlZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzaDIwIiB9XQogICAgXTsKICAgIHZhciBBbWJ1bGFuY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE4aDJhMSAxIDAgMCAwIDEtMXYtMy4yOGExIDEgMCAwIDAtLjY4NC0uOTQ4bC0xLjkyMy0uNjQxYTEgMSAwIDAgMS0uNTc4LS41MDJsLTEuNTM5LTMuMDc2QTEgMSAwIDAgMCAxNi4zODIgOEgxNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEFtcGVyc2FuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNSAxMmE4IDggMCAwIDEtOCA4QTQuNSA0LjUgMCAwIDEgNSAxNS41YzAtNiA4LTQgOC04LjVhMyAzIDAgMSAwLTYgMGMwIDMgMi41IDguNSAxMiAxMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQW1wZXJzYW5kcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAgMTdjLTUtMy03LTctNy05YTIgMiAwIDAgMSA0IDBjMCAyLjUtNSAyLjUtNSA2IDAgMS43IDEuMyAzIDMgMyAyLjggMCA1LTIuMiA1LTUiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMjIgMTdjLTUtMy03LTctNy05YTIgMiAwIDAgMSA0IDBjMCAyLjUtNSAyLjUtNSA2IDAgMS43IDEuMyAzIDMgMyAyLjggMCA1LTIuMiA1LTUiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBBbXBob3JhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY1LjYzMmMwIC40MjQtLjI3Mi43OTUtLjY1My45ODJBNiA2IDAgMCAwIDYgMTRjLjAwNiA0IDMgNyA1IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNUg4YTIgMiAwIDAgMCAwIDRoLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NS42MzJjMCAuNDI0LjI3Mi43OTUuNjUyLjk4MkE2IDYgMCAwIDEgMTggMTRjMCA0LTMgNy01IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNWgyYTIgMiAwIDAgMSAwIDRoLS42OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMkg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMmg2IiB9XQogICAgXTsKICAgIHZhciBBbmNob3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDEzIDItMWE5IDkgMCAwIDEtMTggMGwyIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMWg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQW5ncnkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDggMTAgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5IDIuNS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQW5ub3llZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aDIiIH1dCiAgICBdOwogICAgdmFyIEFudGVubmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyIDcgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDEyIDUtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTIgNS0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMiA1LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSA3aDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djYiIH1dCiAgICBdOwogICAgdmFyIEFudmlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMEg2YTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNWExIDEgMCAwIDEgMS0xaDEzYTEgMSAwIDAgMSAxIDEgNyA3IDAgMCAxLTcgN0g4YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMyAzIDAgMCAxIDMtM2g4YTMgMyAwIDAgMSAzIDMgMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTEiIH1dCiAgICBdOwogICAgdmFyIEFwZXJ0dXJlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzEgOCA1Ljc0IDkuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42OSA4aDExLjQ4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuMzggMTIgNS43NC05Ljk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjkgMTYgMy45NSA2LjA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjMxIDE2SDIuODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNjIgMTItNS43NCA5Ljk0IiB9XQogICAgXTsKICAgIHZhciBBcHBXaW5kb3dNYWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XQogICAgXTsKICAgIHZhciBBcHBXaW5kb3cgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNCIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNHY0IiB9XQogICAgXTsKICAgIHZhciBBcHBsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNTI4VjNhMSAxIDAgMCAxIDEtMWgwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjIzNyAyMUExNSAxNSAwIDAgMCAyMiAxMWE2IDYgMCAwIDAtMTAtNC40NzJBNiA2IDAgMCAwIDIgMTFhMTUuMSAxNS4xIDAgMCAwIDMuNzYzIDEwIDMgMyAwIDAgMCAzLjY0OC42NDggNS41IDUuNSAwIDAgMSA1LjE3OCAwQTMgMyAwIDAgMCAxOC4yMzcgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFyY2hpdmVSZXN0b3JlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI1IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDh2MTFhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDh2MTFhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2OSIgfV0KICAgIF07CiAgICB2YXIgQXJjaGl2ZVggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjUiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTcgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxMiA1IDUiIH1dCiAgICBdOwogICAgdmFyIEFyY2hpdmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjUiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmg0IiB9XQogICAgXTsKICAgIHZhciBBcm1jaGFpciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDlWNmEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTZhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjExYTIgMiAwIDAgMC00IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICAgIHZhciBBcnJvd0JpZ0Rvd25EYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA0aDYiIH1dCiAgICBdOwogICAgdmFyIEFycm93QmlnRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDExYTEgMSAwIDAgMCAxIDFoMi45MzlhMSAxIDAgMCAxIC43NSAxLjgxMWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEtMS43MDcgMEw0LjMxIDEzLjgxYTEgMSAwIDAgMSAuNzUtMS44MTFIOGExIDEgMCAwIDAgMS0xVjVhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBBcnJvd0JpZ0xlZnREYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgOWExIDEgMCAwIDEtMS0xVjUuMDYxYTEgMSAwIDAgMC0xLjgxMS0uNzVsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAwIDAgMS43MDdsNi44MzUgNi44MzVhMSAxIDAgMCAwIDEuODExLS43NVYxNmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAwIDEtMXYtNGExIDEgMCAwIDAtMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5djYiIH1dCiAgICBdOwogICAgdmFyIEFycm93QmlnTGVmdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzIDlhMSAxIDAgMCAxLTEtMVY1LjA2MWExIDEgMCAwIDAtMS44MTEtLjc1bC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMCAwIDEuNzA3bDYuODM1IDYuODM1YTEgMSAwIDAgMCAxLjgxMS0uNzVWMTZhMSAxIDAgMCAxIDEtMWg2YTEgMSAwIDAgMCAxLTF2LTRhMSAxIDAgMCAwLTEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFycm93QmlnUmlnaHREYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDl2NiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdSaWdodCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDlhMSAxIDAgMCAwIDEtMVY1LjA2MWExIDEgMCAwIDEgMS44MTEtLjc1bDYuODM2IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAxIDAgMS43MDdsLTYuODM2IDYuODM1YTEgMSAwIDAgMS0xLjgxMS0uNzVWMTZhMSAxIDAgMCAwLTEtMUg1YTEgMSAwIDAgMS0xLTF2LTRhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFycm93QmlnVXBEYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAxM2ExIDEgMCAwIDAtMS0xSDUuMDYxYTEgMSAwIDAgMS0uNzUtMS44MTFsNi44MzYtNi44MzVhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDcgMGw2LjgzNSA2LjgzNWExIDEgMCAwIDEtLjc1IDEuODExSDE2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjBoNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duMDEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjB2LTZoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjBoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duMTAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwVjRoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ5OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duQVogPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aDVsLTUgNmg1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25Gcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNINSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTUgNiA2IDYtNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDcgNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g3VjciIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93bk5hcnJvd1dpZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA4aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMTAiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA3IDEwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDd2MTBINyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duVG9Eb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDktNyA3LTctNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25Ub0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTEgNiA2IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMUg1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93bldpZGVOYXJyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDRoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDQiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93blpBID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0aDVsLTUgNmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIwdi0zLjVhMi41IDIuNSAwIDAgMSA1IDBWMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoLTUiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTItNyA3LTctNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dMZWZ0RnJvbUxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDYtNiA2IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5VjUiIH1dCiAgICBdOwogICAgdmFyIEFycm93TGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzIDQgN2w0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3aDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIxIDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTdINCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dMZWZ0VG9MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOVY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDYtNiA2IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDE0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS03LTcgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDUiIH1dCiAgICBdOwogICAgdmFyIEFycm93UmlnaHRGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE4IDYtNi02LTYiIH1dCiAgICBdOwogICAgdmFyIEFycm93UmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMyA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIxLTQtNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxN2gxNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dSaWdodFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1djE0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1JpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1IDcgNy03IDciIH1dCiAgICBdOwogICAgdmFyIEFycm93VXAwMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdi02aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIwaDQiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXAxMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMFY0aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICIxNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBBWiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwVjYuNWEyLjUgMi41IDAgMCAxIDUgMFYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGg1bC01IDZoNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxNi00IDQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwRnJvbURvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOSA3LTcgNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2VjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMjEiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOS02LTYtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3VjdoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTcgNyA3IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwTmFycm93V2lkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE2aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBoMTAiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMHYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3IDE3IDciIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBUb0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTMtNi02LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djE0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwV2lkZU5hcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwaDQiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBaQSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0aDVsLTUgNmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIwdi0zLjVhMi41IDIuNSAwIDAgMSA1IDBWMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoLTUiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDEyIDctNyA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTlWNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dzVXBGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgNiAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDE2IiB9XQogICAgXTsKICAgIHZhciBBc3RlcmlzayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMTk2IDkgNi44MDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MDQgOSAxMC4zOTIgNiIgfV0KICAgIF07CiAgICB2YXIgQXRTaWduID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC00IDgiIH1dCiAgICBdOwogICAgdmFyIEF0b20gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjIgMjAuMmMyLjA0LTIuMDMuMDItNy4zNi00LjUtMTEuOS00LjU0LTQuNTItOS44Ny02LjU0LTExLjktNC41LTIuMDQgMi4wMy0uMDIgNy4zNiA0LjUgMTEuOSA0LjU0IDQuNTIgOS44NyA2LjU0IDExLjkgNC41WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS43IDE1LjdjNC41Mi00LjU0IDYuNTQtOS44NyA0LjUtMTEuOS0yLjAzLTIuMDQtNy4zNi0uMDItMTEuOSA0LjUtNC41MiA0LjU0LTYuNTQgOS44Ny00LjUgMTEuOSAyLjAzIDIuMDQgNy4zNi4wMiAxMS45LTQuNVoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEF1ZGlvTGluZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2djExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTB2MyIgfV0KICAgIF07CiAgICB2YXIgQXVkaW9XYXZlZm9ybSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTNhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMFY0YTIgMiAwIDAgMSA0IDB2MTNhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgMi0yIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBBd2FyZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQ3NyAxMi44OSAxLjUxNSA4LjUyNmEuNS41IDAgMCAxLS44MS40N2wtMy41OC0yLjY4N2ExIDEgMCAwIDAtMS4xOTcgMGwtMy41ODYgMi42ODZhLjUuNSAwIDAgMS0uODEtLjQ2OWwxLjUxNC04LjUyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIEF4ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLTguMzgxIDguMzhhMSAxIDAgMCAxLTMuMDAxLTNMMTEgOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxNS41YS41LjUgMCAwIDAgLjUuNUE2LjUgNi41IDAgMCAwIDIyIDkuNWEuNS41IDAgMCAwLS41LS41aC0xLjY3MmEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNS4wNjItNS4wNjJhMS4yMDUgMS4yMDUgMCAwIDAtMS43MDQgMEw5LjM1MiA1LjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDUuMDYyIDUuMDYyQTIgMiAwIDAgMSAxNSAxMy44Mjh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBBeGlzM2QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy41IDEwLjUgMTUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDR2MTVhMSAxIDAgMCAwIDEgMWgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjI5MyAxOS43MDcgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDEuNS0xLjUiIH1dCiAgICBdOwogICAgdmFyIEJhY2twYWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGE0IDQgMCAwIDEgNC00aDhhNCA0IDAgMCAxIDQgNHYxMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIydi02YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2VjRhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgQmFieSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2Yy41LjMgMS4yLjUgMiAuNXMxLjUtLjIgMi0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggNi44MTNBOSA5IDAgMCAxIDIwLjggMTAuMmEyIDIgMCAwIDEgMCAzLjYgOSA5IDAgMCAxLTE3LjYgMCAyIDIgMCAwIDEgMC0zLjZBOSA5IDAgMCAxIDEyIDNjMiAwIDMuNSAxLjEgMy41IDIuNXMtLjkgMi41LTIgMi41Yy0uOCAwLTEuNS0uNC0xLjUtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VBbGVydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiOCIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyLjAxIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlQ2VudCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNCAxMGE0IDQgMCAxIDAgMCA0IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUluZGlhblJ1cGVlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE3LTUtMWgxYTQgNCAwIDAgMCAwLTgiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlRG9sbGFyU2lnbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUV1cm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOS40YTQgNCAwIDEgMCAwIDUuMiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VJbmZvID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyLjAxIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUphcGFuZXNlWWVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA4IDMgM3Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDExIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg2IiB9XQogICAgXTsKICAgIHZhciBCYWRnZU1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiOCIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VQb3VuZFN0ZXJsaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2VjkuNWEyLjUgMi41IDAgMCAxIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aDciIH1dCiAgICBdOwogICAgdmFyIEJhZGdlUXVlc3Rpb25NYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyLjAxIiwgeTE6ICIxNyIsIHkyOiAiMTciIH1dCiAgICBdOwogICAgdmFyIEJhZGdlUnVzc2lhblJ1YmxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNWEyIDIgMCAxIDAgMC00aC0zdjkiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlU3dpc3NGcmFuYyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3VjhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTZoNCIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VUdXJraXNoTGlyYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTBhNSA1IDAgMCAwIDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LTYgMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCYWRnZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICAgIHZhciBCYWRnZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCYWdnYWdlQ2xhaW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOEg2YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDAtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0VjRhMiAyIDAgMCAwLTItMmgtMWEyIDIgMCAwIDAtMiAydjEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiOCIsIHg6ICI4IiwgeTogIjYiLCByeDogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJhbGxvb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnYxYTIgMiAwIDAgMCAyIDJoMWEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhjMCA0LTMuNSA4LTYgOHMtNi00LTYtOGE2IDYgMCAwIDEgMTIgMCIgfV0KICAgIF07CiAgICB2YXIgQmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MjkgNC45MjkgMTkuMDcgMTkuMDcxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBCYW5hbmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzYzMuNS0yIDgtMiAxMCAyYTUuNSA1LjUgMCAwIDEgOCA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuMTUgMTcuODljNS41Mi0xLjUyIDguNjUtNi44OSA3LTEyQzExLjU1IDQgMTEuNSAyIDEzIDJjMy4yMiAwIDUgNS41IDUgOCAwIDYuNS00LjIgMTItMTAuNDkgMTJDNS4xMSAyMiAyIDIyIDIgMjBjMC0xLjUgMS4xNC0xLjU1IDMuMTUtMi4xMVoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJhbmRhZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNnYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJhbmtub3RlQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYW5rbm90ZUFycm93VXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjJ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTktMy0zLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYW5rbm90ZVggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYW5rbm90ZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDFNMTggMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBCYXJjb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNXYxNCIgfV0KICAgIF07CiAgICB2YXIgQmFycmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2E0MSA0MSAwIDAgMCAwIDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy44NCAxN2gxNi4zMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjg0IDdoMTYuMzIiIH1dCiAgICBdOwogICAgdmFyIEJhc2VsaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIEJhdGggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0IDggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNSA3LjYyMSAzLjYyMUEyLjEyMSAyLjEyMSAwIDAgMCA0IDV2MTJhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi01IiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5Q2hhcmdpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSA3LTMgNWg0bC0zIDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODU2IDZIMTZhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuOTM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMTQgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyLjkzNiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeUZ1bGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMHY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5TG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeU1lZGl1bSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnlQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU0MyA2SDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0zLjYwNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42MDYgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgzLjYwNiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeVdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMiAxNCBMIDIyIDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCZWFrZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgM2gxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2MTZhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0aDEyIiB9XQogICAgXTsKICAgIHZhciBCZWFuT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5Yy0uNjQuNjQtMS41MjEuOTU0LTIuNDAyIDEuMTY1QTYgNiAwIDAgMCA4IDIyYTEzLjk2IDEzLjk2IDAgMCAwIDkuOS00LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNzUgNS4wOTNBNiA2IDAgMCAxIDIyIDhjMCAyLjQxMS0uNjEgNC42OC0xLjY4MyA2LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMzQxIDEwLjYyYTQgNCAwIDAgMCA2LjQ4NyAxLjIwOE0xMC42MiA1LjM0MWE0LjAxNSA0LjAxNSAwIDAgMSAyLjAzOSAyLjA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgICB2YXIgQmVhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjE2NSA2LjU5OEM5Ljk1NCA3LjQ3OCA5LjY0IDguMzYgOSA5Yy0uNjQuNjQtMS41MjEuOTU0LTIuNDAyIDEuMTY1QTYgNiAwIDAgMCA4IDIyYzcuNzMyIDAgMTQtNi4yNjggMTQtMTRhNiA2IDAgMCAwLTExLjgzNS0xLjQwMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4zNDEgMTAuNjJhNCA0IDAgMSAwIDUuMjc5LTUuMjgiIH1dCiAgICBdOwogICAgdmFyIEJlZERvdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjB2LThhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMFY2YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIwIiB9XQogICAgXTsKICAgIHZhciBCZWRTaW5nbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwdi04YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBWNmEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE4aDE4IiB9XQogICAgXTsKICAgIHZhciBCZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4aDE4YTIgMiAwIDAgMSAyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDh2OSIgfV0KICAgIF07CiAgICB2YXIgQmVlZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQgMTMuN0E2LjUgNi41IDAgMSAwIDYuMjggNi42Yy0xLjEgMy4xMy0uNzggMy45LTMuMTggNi4wOEEzIDMgMCAwIDAgNSAxOGM0IDAgOC40LTEuOCAxMS40LTQuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOC41IDYgMi4xOSA0LjVhNi40OCA2LjQ4IDAgMCAxLTIuMjkgNy4yQzE1LjQgMjAuMiAxMSAyMiA3IDIyYTMgMyAwIDAgMS0yLjY4LTEuNjZMMi40IDE2LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMi41IiwgY3k6ICI4LjUiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBCZWVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTN2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMS40N1Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDExaDFhMyAzIDAgMCAxIDIuNzQ1IDQuMjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDh2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41MzYgNy41MzVDNi43NjYgNy42NDkgNi4xNTQgOCA1LjUgOGEyLjUgMi41IDAgMCAxLTEuNzY4LTQuMjY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNzI3IDMuMjA0QzkuMzA2IDIuNzY3IDkuODg1IDIgMTEgMmMxLjU2IDAgMiAxLjUgMyAxLjVzMS43Mi0uNSAyLjUtLjVhMSAxIDAgMSAxIDAgNWMtLjc4IDAtMS41LS41LTIuNS0uNWEzLjE0OSAzLjE0OSAwIDAgMC0uODQyLjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTQuNlYxOCIgfV0KICAgIF07CiAgICB2YXIgQmVlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDExaDFhMyAzIDAgMCAxIDAgNmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJ2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCA3LjVjLTEgMC0xLjQ0LjUtMyAuNXMtMi0uNS0zLS41LTEuNzIuNS0yLjUuNWEyLjUgMi41IDAgMCAxIDAtNWMuNzggMCAxLjU3LjUgMi41LjVTOS40NCAyIDExIDJzMiAxLjUgMyAxLjUgMS43Mi0uNSAyLjUtLjVhMi41IDIuNSAwIDAgMSAwIDVjLS43OCAwLTEuNS0uNS0yLjUtLjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOHYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XQogICAgXTsKICAgIHZhciBCZWxsRG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjY4IDIuMDA5QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczYy0uODI0LS44NS0xLjY3OC0xLjczMS0yLjIxLTMuMzQ4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQmVsbEVsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNTE4IDE3LjM0N0E3IDcgMCAwIDEgMTQgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA0QTExIDExIDAgMCAxIDIwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxNiIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCZWxsTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjI0MyAzLjc1N0E2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0E5LjQgOS40IDAgMCAxIDE4LjY2NyAxMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTEgMSAwIDAgMS0uNzQtMS42NzNDNC41OSAxMy45NTYgNiAxMi40OTkgNiA4YTYgNiAwIDAgMSAuMjU4LTEuNzQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY2OCAzLjAxQTYgNiAwIDAgMSAxOCA4YzAgMi42ODcuNzcgNC42NTMgMS43MDcgNi4wNSIgfV0KICAgIF07CiAgICB2YXIgQmVsbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4wMDIgMTQuNDY0YTkgOSAwIDAgMCAuNzM4Ljg2M0ExIDEgMCAwIDEgMjAgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgOC43NS01LjMzMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbFJpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGMwLTIuMy0uOC00LjMtMi02IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyQzIuOCAzLjcgMiA1LjcgMiA4IiB9XQogICAgXTsKICAgIHZhciBCZWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJldHdlZW5Ib3Jpem9udGFsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zLTMgMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjgiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmV0d2VlblZlcnRpY2FsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIyIDMtMyAzIDMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJldHdlZW5WZXJ0aWNhbFN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjMiLCB5OiAiOCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAyLTMgMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjE0IiwgeTogIjgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJpY2Vwc0ZsZXhlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSAxMy4wMTdBNSA1IDAgMCAxIDIyIDE1YzAgMy44NjYtNCA3LTkgNy00LjA3NyAwLTguMTUzLS44Mi0xMC4zNzEtMi40NjItLjQyNi0uMzE2LS42MzEtLjgzMi0uNjItMS4zNjJDMi4xMTggMTIuNzIzIDIuNjI3IDIgMTAgMmEzIDMgMCAwIDEgMyAzIDIgMiAwIDAgMS0yIDJjLTEuMTA1IDAtMS42NC0uNDQ0LTItMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGE1IDUgMCAwIDAtNy41ODQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2NCA2LjgyNUM4LjAxOSA3Ljk3NyA5LjUgMTMgOCAxNSIgfV0KICAgIF07CiAgICB2YXIgQmlrZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguNSIsIGN5OiAiMTcuNSIsIHI6ICIzLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNy41VjE0bC0zLTMgNC0zIDIgM2gyIiB9XQogICAgXTsKICAgIHZhciBCaW5hcnkgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGgydjYiIH1dCiAgICBdOwogICAgdmFyIEJpbm9jdWxhcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDdWNGExIDEgMCAwIDAtMS0xaC0yYTEgMSAwIDAgMC0xIDF2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMWEyIDIgMCAwIDAgMi0ydi0zLjg1MWMwLTEuMzktMi0yLjk2Mi0yLTQuODI5VjhhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjExYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMiAxNiBMIDIgMTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMWEyIDIgMCAwIDEtMi0ydi0zLjg1MWMwLTEuMzkgMi0yLjk2MiAyLTQuODI5VjhhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MTFhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA3VjRhMSAxIDAgMCAwLTEtMUg2YTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgICB2YXIgQmlvaGF6YXJkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEuOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNyAzLjRjLS45IDIuNSAwIDUuMiAyLjIgNi43QzYuNSA5IDMuNyA5LjYgMiAxMS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguOSAxMC4xIDEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjMgMy40Yy45IDIuNSAwIDUuMi0yLjIgNi43IDIuNC0xLjIgNS4yLS42IDYuOSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMSAxMC4xLTEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMjAuOGMtMi42LS40LTQuNi0yLjYtNC43LTUuMy0uMiAyLjYtMi4xIDQuOC00LjcgNS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzLjl2MS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgNS40Yy0xLS4yLTItLjItMyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjRjLjctLjcgMS4yLTEuNiAxLjUtMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNSAxMy45Yy4zLjkuOCAxLjggMS41IDIuNSIgfV0KICAgIF07CiAgICB2YXIgQmlyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNCAxOEgxMmE4IDggMCAwIDAgOC04VjdhNCA0IDAgMCAwLTcuMjgtMi4zTDIgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgNyAyIC41LTIgLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNy43NVYyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4YTYgNiAwIDAgMCAzLjg0LTEwLjYxIiB9XQogICAgXTsKICAgIHZhciBCaXJkaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4IDEuOTU2LTExLjQ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNy44Mi01LjYxNWEyIDIgMCAwIDEgMi4zNiAwTDIxIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOGgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDUuMDQ0IDYuNTMyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJpdGNvaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS43NjcgMTkuMDg5YzQuOTI0Ljg2OCA2LjE0LTYuMDI1IDEuMjE2LTYuODk0bS0xLjIxNiA2Ljg5NEw1Ljg2IDE4LjA0N201LjkwOCAxLjA0Mi0uMzQ3IDEuOTdtMS41NjMtOC44NjRjNC45MjQuODY5IDYuMTQtNi4wMjUgMS4yMTUtNi44OTNtLTEuMjE1IDYuODkzLTMuOTQtLjY5NG01LjE1NS02LjJMOC4yOSA0LjI2bTUuOTA4IDEuMDQyLjM0OC0xLjk3TTcuNDggMjAuMzY0bDMuMTI2LTE3LjcyNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmxlbmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxNSIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBCbGluZHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDNoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDN2MTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCbHVldG9vdGhDb25uZWN0ZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBCbG9ja3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTctNSA1VjEybC01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgOS41IDE3IDdsLTUtNXY0LjUiIH1dCiAgICBdOwogICAgdmFyIEJsdWV0b290aFNlYXJjaGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQm9sZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoOWE0IDQgMCAwIDEgMCA4SDdhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTFoN2E0IDQgMCAwIDEgMCA4IiB9XQogICAgXTsKICAgIHZhciBCbHVldG9vdGggPSBbWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV1dOwogICAgdmFyIEJvbWIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMyIsIHI6ICI5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTQuMzUgNC42NSAxNi4zIDIuN2EyLjQxIDIuNDEgMCAwIDEgMy40IDBsMS42IDEuNmEyLjQgMi40IDAgMCAxIDAgMy40bC0xLjk1IDEuOTUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItMS41IDEuNSIgfV0KICAgIF07CiAgICB2YXIgQm9sdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBCb25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgMTBjLjctLjcgMS42OSAwIDIuNSAwYTIuNSAyLjUgMCAxIDAgMC01IC41LjUgMCAwIDEtLjUtLjUgMi41IDIuNSAwIDEgMC01IDBjMCAuODEuNyAxLjggMCAyLjVsLTcgN2MtLjcuNy0xLjY5IDAtMi41IDBhMi41IDIuNSAwIDAgMCAwIDVjLjI4IDAgLjUuMjIuNS41YTIuNSAyLjUgMCAxIDAgNSAwYzAtLjgxLS43LTEuOCAwLTIuNVoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tBID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEzIDQtNyA0IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDExaDUuNyIgfV0KICAgIF07CiAgICB2YXIgQm9va0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOS41IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEJvb2tBdWRpbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MyIgfV0KICAgIF07CiAgICB2YXIgQm9va0NvcHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjgwMyAxOEg1YTIgMiAwIDAgMCAwIDRoOS41YS41LjUgMCAwIDAgLjUtLjVWMjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk05IDE1VjRhMiAyIDAgMCAxIDItMmg5LjVhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAwIDEtLjUuNUgxMWEyIDIgMCAwIDEgMC00aDEwIiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va0Rhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAyMkgxOWExIDEgMCAwIDAgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjUgMkgxOWExIDEgMCAwIDEgMSAxdjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNHYzaC0yLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOC41VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTkuNVYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDQuNUEyLjUgMi41IDAgMCAxIDYuNSAySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMkg2LjVhMSAxIDAgMCAxIDAtNUg4IiB9XQogICAgXTsKICAgIHZhciBCb29rRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEJvb2tIZWFkcGhvbmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yYTQgNCAwIDAgMSA4IDB2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQm9va0hlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDkuOEEyLjI1IDIuMjUgMCAxIDEgMTIgNi44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rSW1hZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMy43LTIuMS0yLjFhMiAyIDAgMCAwLTIuOCAwTDkuNyAxNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm9va0tleSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJINi41QTIuNSAyLjUgMCAwIDAgNCA0LjV2MTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNS4yVjIxYTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm9va0xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjRhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1djZhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMiIsIHk6ICI2Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQm9va01hcmtlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2OGwzLTMgMyAzVjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va01pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIEJvb2tPcGVuQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyIDIgMiA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgNlY0YTEgMSAwIDAgMC0xLTFoLTVhNCA0IDAgMCAwLTQgNCA0IDQgMCAwIDAtNC00SDNhMSAxIDAgMCAwLTEgMXYxM2ExIDEgMCAwIDAgMSAxaDZhMyAzIDAgMCAxIDMgMyAzIDMgMCAwIDEgMy0zaDZhMSAxIDAgMCAwIDEtMXYtMS4zIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rT3BlblRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGgyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDIiIH1dCiAgICBdOwogICAgdmFyIEJvb2tPcGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE4YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDVhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEgNC00aDVhMSAxIDAgMCAxIDEgMXYxM2ExIDEgMCAwIDEtMSAxaC02YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwLTMtM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XQogICAgXTsKICAgIHZhciBCb29rU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjJINS41YTEgMSAwIDAgMSAwLTVoNC41MDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjItMS44NzktMS44NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOS41di0xNUEyLjUgMi41IDAgMCAxIDUuNSAySDE4YTEgMSAwIDAgMSAxIDF2OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBCb29rVGV4dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN2g2IiB9XQogICAgXTsKICAgIHZhciBCb29rVHlwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhWNkg4djIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va1VwMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmgxYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNSAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBCb29rVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBCb29rVXNlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEzYTMgMyAwIDEgMC02IDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJvb2tYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LTUgNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3IDUgNSIgfV0KICAgIF07CiAgICB2YXIgQm9vayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2ttYXJrQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBCb29rbWFya01pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBIOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2ttYXJrUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMEg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDNhMiAyIDAgMCAxIDIgMnYxNWExIDEgMCAwIDEtMS40OTYuODY4bC00LjUxMi0yLjU3OGEyIDIgMCAwIDAtMS45ODQgMGwtNC41MTIgMi41NzhBMSAxIDAgMCAxIDUgMjBWNWEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va21hcmtYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LjUtNSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDNhMiAyIDAgMCAxIDIgMnYxNWExIDEgMCAwIDEtMS40OTYuODY4bC00LjUxMi0yLjU3OGEyIDIgMCAwIDAtMS45ODQgMGwtNC41MTIgMi41NzhBMSAxIDAgMCAxIDUgMjBWNWEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgNy41IDUgNSIgfV0KICAgIF07CiAgICB2YXIgQm9va21hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb21Cb3ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDlWNWEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOHYxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI5Iiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCb3RNZXNzYWdlU3F1YXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNlYySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxNmEyIDIgMCAwIDEtMiAySDguODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSA0IDIwLjI4NlY4YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMXYyIiB9XQogICAgXTsKICAgIHZhciBCb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4VjRIOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgeDogIjQiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2MiIgfV0KICAgIF07CiAgICB2YXIgQm90T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNjcgOEgxOGEyIDIgMCAwIDEgMiAydjQuMzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOEg2YTIgMiAwIDAgMC0yIDJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjQxNC0uNTg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY3IDRIMTJ2Mi4zMyIgfV0KICAgIF07CiAgICB2YXIgQm90dGxlV2luZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDNhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmE2IDYgMCAwIDAgMS4yIDMuNmwuNi44QTYgNiAwIDAgMSAxNyAxM3Y4YTEgMSAwIDAgMS0xIDFIOGExIDEgMCAwIDEtMS0xdi04YTYgNiAwIDAgMSAxLjItMy42bC42LS44QTYgNiAwIDAgMCAxMCA1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2gtNGExIDEgMCAwIDAtMSAxdjNhMSAxIDAgMCAwIDEgMWg0IiB9XQogICAgXTsKICAgIHZhciBCb3dBcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjU3NSAxMS4wODJhMTMgMTMgMCAwIDEgMS4wNDggOS4wMjcgMS4xNyAxLjE3IDAgMCAxLTEuOTE0LjU5N0wxNCAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwIDMuMjkgNi4yOWExLjE3IDEuMTcgMCAwIDEgLjYtMS45MSAxMyAxMyAwIDAgMSA5LjAzIDEuMDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxNGExLjcgMS43IDAgMCAwLTEuMjA3LjVsLTIuNjQ2IDIuNjQ2QS41LjUgMCAwIDAgMy41IDE4SDVhMSAxIDAgMCAxIDEgMXYxLjVhLjUuNSAwIDAgMCAuODU0LjM1NEw5LjUgMTguMjA3QTEuNyAxLjcgMCAwIDAgMTAgMTd2LTJhMSAxIDAgMCAwLTEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MDcgMTQuMjkzIDIxIDMiIH1dCiAgICBdOwogICAgdmFyIEJveCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjMgNyA4LjcgNSA4LjctNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMlYxMiIgfV0KICAgIF07CiAgICB2YXIgQm94ZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk3IDEyLjkyQTIgMiAwIDAgMCAyIDE0LjYzdjMuMjRhMiAyIDAgMCAwIC45NyAxLjcxbDMgMS44YTIgMiAwIDAgMCAyLjA2IDBMMTIgMTl2LTUuNWwtNS0zLTQuMDMgMi40MloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNi41LTQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE2LjUgNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTYuNXY1LjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDEzLjVWMTlsMy45NyAyLjM4YTIgMiAwIDAgMCAyLjA2IDBsMy0xLjhhMiAyIDAgMCAwIC45Ny0xLjcxdi0zLjI0YTIgMiAwIDAgMC0uOTctMS43MUwxNyAxMC41bC01IDNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUtNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUgNC43NC0yLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjV2NS4xNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03Ljk3IDQuNDJBMiAyIDAgMCAwIDcgNi4xM3Y0LjM3bDUgMyA1LTNWNi4xM2EyIDIgMCAwIDAtLjk3LTEuNzFsLTMtMS44YTIgMiAwIDAgMC0yLjA2IDBsLTMgMS44WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4IDcuMjYgNS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMy41VjgiIH1dCiAgICBdOwogICAgdmFyIEJyYWNlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM0g3YTIgMiAwIDAgMC0yIDJ2NWEyIDIgMCAwIDEtMiAyIDIgMiAwIDAgMSAyIDJ2NWMwIDEuMS45IDIgMiAyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjFoMWEyIDIgMCAwIDAgMi0ydi01YzAtMS4xLjktMiAyLTJhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMC0yLTJoLTEiIH1dCiAgICBdOwogICAgdmFyIEJyYWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTEgMSAwIDAgMSAxIDF2MTZhMSAxIDAgMCAxLTEgMWgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxSDVhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoMyIgfV0KICAgIF07CiAgICB2YXIgQnJhaW5DaXJjdWl0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMiA1YTMgMyAwIDEgMC01Ljk5Ny4xMjUgNCA0IDAgMCAwLTIuNTI2IDUuNzcgNCA0IDAgMCAwIC41NTYgNi41ODhBNCA0IDAgMSAwIDEyIDE4WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2E0LjUgNC41IDAgMCAwIDMtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAwMyA1LjEyNUEzIDMgMCAwIDAgNi40MDEgNi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNDc3IDEwLjg5NmE0IDQgMCAwIDEgLjU4NS0uMzk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThhNCA0IDAgMCAxLTEuOTY3LS41MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGg2YTIgMiAwIDAgMSAyIDJ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOFY1YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTMiLCByOiAiLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMyIsIHI6ICIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIyMSIsIHI6ICIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICI4IiwgcjogIi41IiB9XQogICAgXTsKICAgIHZhciBCcmFpbkNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxNC43NzItLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDkuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggMTQuNzcyLjM4Mi45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMxIDguMzA1LS4zODMuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMC44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjU5OCA2LjVBMyAzIDAgMSAwIDEyIDVhMyAzIDAgMCAwLTUuNjMtMS40NDYgMyAzIDAgMCAwLS4zNjggMS41NzEgNCA0IDAgMCAwLTIuNTI1IDUuNzcxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5OCA1LjEyNWE0IDQgMCAwIDEgMi41MjUgNS43NzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNTA1IDEwLjI5NGE0IDQgMCAwIDEtMS41IDcuNzA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNC4wMzIgMTcuNDgzQTQgNCAwIDAgMCAxMS40NjQgMjBjLjE4LS4zMTEuODkyLS4zMTEgMS4wNzIgMGE0IDQgMCAwIDAgNy40MzItMi41MTYiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxMC4yOTFBNCA0IDAgMCAwIDYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDIgNS4xMjVhMyAzIDAgMCAwIC40IDEuMzc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEJyYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxM2E0LjE3IDQuMTcgMCAwIDEtMy00IDQuMTcgNC4xNyAwIDAgMS0zIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNTk4IDYuNUEzIDMgMCAxIDAgMTIgNWEzIDMgMCAxIDAtNS41OTggMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5NyA1LjEyNWE0IDQgMCAwIDEgMi41MjYgNS43NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOGE0IDQgMCAwIDAgMi03LjQ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS45NjcgMTcuNDgzQTQgNCAwIDEgMSAxMiAxOGE0IDQgMCAxIDEtNy45NjctLjUxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4YTQgNCAwIDAgMS0yLTcuNDY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMDAzIDUuMTI1YTQgNCAwIDAgMC0yLjUyNiA1Ljc3IiB9XQogICAgXTsKICAgIHZhciBCcmlja1dhbGxGaXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3YyLjEwNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyA5YzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDIyIDE3YTUgNSAwIDAgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkMxMyAxMS41IDE2IDkgMTcgOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4LjI3NFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMy45MzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWg1LjI1MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloOC4yMjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM3Y2IiB9XQogICAgXTsKICAgIHZhciBCcmlja1dhbGxTaGllbGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djEuMjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2NS40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5LjExOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNS43NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxNy41YzAgMi40OTktMS43NSAzLjc0OS0zLjgzIDQuNDc0YS41LjUgMCAwIDEtLjMzNS0uMDA1Yy0yLjA4NS0uNzItMy44MzUtMS45Ny0zLjgzNS00LjQ3VjE0YS41LjUgMCAwIDEgLjUtLjQ5OWMxIDAgMi4yNS0uNiAzLjEyLTEuMzZhLjYuNiAwIDAgMSAuNzYtLjAwMWMuODc1Ljc2NSAyLjEyIDEuMzYgMy4xMiAxLjM2YS41LjUgMCAwIDEgLjUuNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxMi4xNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM3Y2IiB9XQogICAgXTsKICAgIHZhciBCcmllZmNhc2VCdXNpbmVzcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNhMTguMTUgMTguMTUgMCAwIDEtMjAgMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQnJpY2tXYWxsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgICB2YXIgQnJpZWZjYXNlQ29udmV5b3JCZWx0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjBIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCcmllZmNhc2VNZWRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTF2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJyaWVmY2FzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIwVjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCcmluZ1RvRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgQnJ1c2hDbGVhbmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIyLTEtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxNGExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJoLTNhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC00IDB2NWExIDEgMCAwIDEtMSAxSDZhMiAyIDAgMCAwLTIgMnYxYTEgMSAwIDAgMCAxIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgMS00IiB9XQogICAgXTsKICAgIHZhciBCcnVzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDEwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjUgMjFBMy41IDMuNSAwIDEgMCAzIDE3LjVhMi42MiAyLjYyIDAgMCAxLS43MDggMS43OTJBMSAxIDAgMCAwIDMgMjF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuOTY5IDE3LjAzMSAyMS4zNzggNS42MjRhMSAxIDAgMCAwLTMuMDAyLTMuMDAyTDYuOTY3IDE0LjAzMSIgfV0KICAgIF07CiAgICB2YXIgQnViYmxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuMDAxIDE1LjA4NUExLjUgMS41IDAgMCAxIDkgMTYuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4LjUiLCBjeTogIjguNSIsIHI6ICIzLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiNS41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI0LjUiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBCdWdPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi42NTYgN0gxNGE0IDQgMCAwIDEgNCA0djEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjEyIDMuODggMTYgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4xMjMgMTcuMTIzQTYgNiAwIDAgMSA2IDE0di0zYTQgNCAwIDAgMSAxLjcyLTMuMjg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNoLTMuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjcxMiA0LjA2QTMgMyAwIDAgMSAxNSA2djEuMTMiIH1dCiAgICBdOwogICAgdmFyIEJ1Z1BsYXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOS42NTVBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDQtNGg0YTQgNCAwIDAgMSA0IDMuOTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDcuMTNWNmEzIDMgMCAxIDEgNiAwdjEuMTMiIH1dCiAgICBdOwogICAgdmFyIEJ1ZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDdhNCA0IDAgMCAxIDQgNHYzYTYgNiAwIDAgMS0xMiAwdi0zYTQgNCAwIDAgMSA0LTR6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjEyIDMuODggMTYgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMWE0IDQgMCAwIDAtMy44MS00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVhNCA0IDAgMCAxLTMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM2gtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIxYTQgNCAwIDAgMSAzLjgxLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTQgNCAwIDAgMCAzLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMiAxLjg4IDEuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA3LjEzVjZhMyAzIDAgMSAxIDYgMHYxLjEzIiB9XQogICAgXTsKICAgIHZhciBCdWlsZGluZzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMEg0YTIgMiAwIDAgMC0yIDJ2N2EyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFWNWEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAxIDIgMnYxNiIgfV0KICAgIF07CiAgICB2YXIgQnVpbGRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIydi0zYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjIiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJ1c0Zyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2IDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy0yLTEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxdi0yIiB9XQogICAgXTsKICAgIHZhciBCdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxOS42IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDE4aDNzLjUtMS43LjgtMi44Yy4xLS40LjItLjguMi0xLjIgMC0uNC0uMS0uOC0uMi0xLjJsLTEuNC01QzIwLjEgNi44IDE5LjEgNiAxOCA2SDRhMiAyIDAgMCAwLTIgMnYxMGgzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4aDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FibGVDYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMjAtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY2LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMCIsIHg6ICI0IiwgeTogIjEyIiwgcng6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTdoMTYiIH1dCiAgICBdOwogICAgdmFyIENhYmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTlhMSAxIDAgMCAxLTEtMXYtMmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyYTEgMSAwIDAgMS0xIDF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0VjYuNWExIDEgMCAwIDAtNyAwdjExYTEgMSAwIDAgMS03IDBWMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjZhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAyeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVWMyIgfV0KICAgIF07CiAgICB2YXIgQ2FrZVNsaWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTNIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN0gzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuMiA3LjktMy4zODggMi41QTIgMiAwIDAgMCAzIDEyLjAxVjIwYTEgMSAwIDAgMCAxIDFoMTZhMSAxIDAgMCAwIDEtMXYtOC42NTRjMC0yLTIuNDQtNi4wMjYtNi40NC04LjAyNmExIDEgMCAwIDAtMS4wODIuMDU3TDEwLjQgNS42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjF2LThhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2cy41LTEgMi0xIDIuNSAyIDQgMiAyLjUtMiA0LTIgMi41IDIgNCAyIDItMSAyLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNGguMDEiIH1dCiAgICBdOwogICAgdmFyIENhbGN1bGF0b3IgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiNiIsIHkyOiAiNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE0IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE0aDF2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiNCIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjM1NFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTggNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJ2LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuMzQzVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNy41VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE5LjE0OC0uOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNDcgMTQuMzA1LjM4Mi45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTAuNTkyVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJEYXlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckZvbGQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDIwYTIgMiAwIDAgMCAyIDJoMTBhMi40IDIuNCAwIDAgMCAxLjcwNi0uNzA2bDMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMjEgMTZWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjJ2LTVhMSAxIDAgMCAxIDEtMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckhlYXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMTI3IDIySDVhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY1LjEyNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSAxOCAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhck1pbnVzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2aDQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yIDQuMkEyIDIgMCAwIDAgMyA2djE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS41VjZhMiAyIDAgMCAwLTItMkg5LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMGgtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJQbHVzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTR2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMi41OThWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhclJhbmdlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMThINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguMDEiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjc1VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg3LjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuODc1LTEuODc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJTeW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTB2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDguNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJYMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS43MjYgMjEuMDFBMiAyIDAgMCAxIDE0IDIySDRhMiAyIDAgMCAxLTItMlYxMGEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOCIsIHk6ICIzIiwgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBDYW1lcmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41NjQgMTQuNTU4YTMgMyAwIDEgMS00LjEyMi00LjEyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgLjgxOS0uMTc1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuNjk1IDQuMDI0QTIgMiAwIDAgMSAxMC4wMDQgNGgzLjk5M2EyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY3LjM0NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2FtZXJhID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIENhbmR5Q2FuZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNS43IDIxYTIgMiAwIDAgMS0zLjUtMmw4LjYtMTRhNiA2IDAgMCAxIDEwLjQgNiAyIDIgMCAxIDEtMy40NjQtMiAyIDIgMCAxIDAtMy40NjQtMloiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc1IDcgMTUgMi4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkgNC44IDEzIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy45IDkuNyAyIDQuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkgMTQuNyA3IDE4LjkiIH1dCiAgICBdOwogICAgdmFyIENhbmR5T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjgwMiA2LjE0NWE1IDUgMCAwIDEgNi4wNTMgNi4wNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xdjIuMjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgMTUuNTcxLS45NjQuOTY0YTUgNSAwIDAgMS03LjA3MSAwIDUgNSAwIDAgMSAwLTcuMDdsLjk2NC0uOTY1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE3djRhMSAxIDAgMCAxLTEuNzA3LjcwNyAyLjUgMi41IDAgMCAwLTIuMTUyLS43MTcgMSAxIDAgMCAxLTEuMTMxLTEuMTMxIDIuNSAyLjUgMCAwIDAtLjcxNy0yLjE1MkExIDEgMCAwIDEgMyAxNmg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYW5keSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2MTAuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA2LjFWMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgN1YzYTEgMSAwIDAgMSAxLjcwNy0uNzA3IDIuNSAyLjUgMCAwIDAgMi4xNTIuNzE3IDEgMSAwIDAgMSAxLjEzMSAxLjEzMSAyLjUgMi41IDAgMCAwIC43MTcgMi4xNTJBMSAxIDAgMCAxIDIxIDhoLTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNTM2IDcuNDY1YTUgNSAwIDAgMC03LjA3MiAwbC0yIDJhNSA1IDAgMCAwIDAgNy4wNyA1IDUgMCAwIDAgNy4wNzIgMGwyLTJhNSA1IDAgMCAwIDAtNy4wNyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE3djRhMSAxIDAgMCAxLTEuNzA3LjcwNyAyLjUgMi41IDAgMCAwLTIuMTUyLS43MTcgMSAxIDAgMCAxLTEuMTMxLTEuMTMxIDIuNSAyLjUgMCAwIDAtLjcxNy0yLjE1MkExIDEgMCAwIDEgMyAxNmg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYW5uYWJpc09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00YzEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOTg4IDguMzI3QzEzLjkwMiA2LjA1NCAxMy4zNjUgMy44MiAxMiAyYTkuMyA5LjMgMCAwIDAtMS40NDUgMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjM3NSAxMS43MjVDMTguODgyIDEwLjUzIDIxIDcuODQxIDIxIDZjLTIuMzI0IDAtNS4wOCAxLjI5Ni02LjY2MiAyLjY4NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMDI0IDE1LjM3OEExNSAxNSAwIDAgMCAyMiAxNWMtLjQyNi0xLjI3OS0yLjY3LTIuNTU3LTQuMjUtMi45MDciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi45OTUgNi45OTJDNS43MTQgNi40IDQuMjkgNiAzIDZjMCAyIDIuNSA1IDQgNi0xLjUgMC00LjUgMS41LTUgMyAzLjUgMS41IDYgMSA2IDEtMS41IDEuNS0yIDMuNS0yIDUgMi41IDAgNC41LTEuNSA2LTMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENhbm5hYmlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxMmMtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIDEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUgMCAwIDIuNS41IDYtMS0uNS0xLjUtMy41LTMtNS0zIDEuNS0xIDQtNCA0LTYtMi41IDAtNS41IDEuNS03IDMgMC0yLjUtLjUtNS0yLTctMS41IDItMiA0LjUtMiA3LTEuNS0xLjUtNC41LTMtNy0zIDAgMiAyLjUgNSA0IDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENhcHRpb25zT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSA1SDE5YTIgMiAwIDAgMSAyIDJ2OC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDExaC0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOUg1YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWgyLjUiIH1dCiAgICBdOwogICAgdmFyIENhcHRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxNCIsIHg6ICIzIiwgeTogIjUiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWg0TTE1IDE1aDJNNyAxMWgyTTEzIDExaDQiIH1dCiAgICBdOwogICAgdmFyIENhckZyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNGguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogICAgdmFyIENhclRheGlGcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA4LTIgMi0xLjUtMy43QTIgMiAwIDAgMCAxNS42NDYgNUg4LjRhMiAyIDAgMCAwLTEuOTAzIDEuMjU3TDUgMTAgMyA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0aC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjgiLCB4OiAiMyIsIHk6ICIxMCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTh2MiIgfV0KICAgIF07CiAgICB2YXIgQ2FyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTdoMmMuNiAwIDEtLjQgMS0xdi0zYzAtLjktLjctMS43LTEuNS0xLjlDMTguNyAxMC42IDE2IDEwIDE2IDEwcy0xLjMtMS40LTIuMi0yLjNjLS41LS40LTEuMS0uNy0xLjgtLjdINWMtLjYgMC0xLjEuNC0xLjQuOWwtMS40IDIuOUEzLjcgMy43IDAgMCAwIDIgMTJ2NGMwIC42LjQgMSAxIDFoMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE3IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN2g2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE3IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENhcmF2YW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOVY5YTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djhhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOWgzYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTd2MWExIDEgMCAwIDEtMSAxSDEwdi05YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDYXJkU2ltID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTR2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4xNzIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDMuODI4IDMuODI4QTIgMiAwIDAgMSAyMCA3LjgyOFYyMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMTAiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDYXJyb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjI3IDIxLjdzOS44Ny0zLjUgMTIuNzMtNi4zNmE0LjUgNC41IDAgMCAwLTYuMzYtNi4zN0M1Ljc3IDExLjg0IDIuMjcgMjEuNyAyLjI3IDIxLjd6TTguNjQgMTRsLTIuMDUtMi4wNE0xNS4zNCAxNWwtMi40Ni0yLjQ2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDlzLTEuMzMtMi0zLjUtMkMxNi44NiA3IDE1IDkgMTUgOXMxLjMzIDIgMy41IDJTMjIgOSAyMiA5eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAycy0yIDEuMzMtMiAzLjVTMTUgOSAxNSA5czItMS44NCAyLTMuNUMxNyAzLjMzIDE1IDIgMTUgMnoiIH1dCiAgICBdOwogICAgdmFyIENhc2VMb3dlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDl2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA2djEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTIuNSIsIHI6ICIzLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjUiLCBjeTogIjEyLjUiLCByOiAiMy41IiB9XQogICAgXTsKICAgIHZhciBDYXNlU2Vuc2l0aXZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDl2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjMwNCAxM2g2LjM5MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4LjUiLCBjeTogIjEyLjUiLCByOiAiMy41IiB9XQogICAgXTsKICAgIHZhciBDYXNlVXBwZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE1IDExaDQuNWExIDEgMCAwIDEgMCA1aC00YS41LjUgMCAwIDEtLjUtLjV2LTlhLjUuNSAwIDAgMSAuNS0uNWgzYTEgMSAwIDAgMSAwIDUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjMwNCAxM2g2LjM5MiIgfV0KICAgIF07CiAgICB2YXIgQ2Fzc2V0dGVUYXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMjAgLjctMi45QTEuNCAxLjQgMCAwIDEgOC4xIDE2aDcuOGExLjQgMS40IDAgMCAxIDEuNCAxbC43IDMiIH1dCiAgICBdOwogICAgdmFyIENhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTkgOSAwIDAgMSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNmE1IDUgMCAwIDEgNCA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIuMDEiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgQ2FzdGxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtM2EzIDMgMCAwIDAtNiAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDl2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2OCIgfV0KICAgIF07CiAgICB2YXIgQ2F0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgNWMuNjcgMCAxLjM1LjA5IDIgLjI2IDEuNzgtMiA1LjAzLTIuODQgNi40Mi0yLjI2IDEuNC41OC0uNDIgNy0uNDIgNyAuNTcgMS4wNyAxIDIuMjQgMSAzLjQ0QzIxIDE3LjkgMTYuOTcgMjEgMTIgMjFzLTktMy05LTcuNTZjMC0xLjI1LjUtMi40IDEtMy40NCAwIDAtMS44OS02LjQyLS41LTcgMS4zOS0uNTggNC43Mi4yMyA2LjUgMi4yM0E5LjA0IDkuMDQgMCAwIDEgMTIgNVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNi4yNWgxLjVMMTIgMTdsLS43NS0uNzVaIiB9XQogICAgXTsKICAgIHZhciBDY3R2ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNi43NSAxMmgzLjYzMmExIDEgMCAwIDEgLjg5NCAxLjQ0N2wtMi4wMzQgNC4wNjlhMSAxIDAgMCAxLTEuNzA4LjEzNGwtMi4xMjQtMi45NyIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuMTA2IDkuMDUzYTEgMSAwIDAgMSAuNDQ3IDEuMzQxbC0zLjEwNiA2LjIxMWExIDEgMCAwIDEtMS4zNDIuNDQ3TDMuNjEgMTIuM2EyLjkyIDIuOTIgMCAwIDEtMS4zLTMuOTFMMy42OSA1LjZhMi45MiAyLjkyIDAgMCAxIDMuOTItMS4zeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE5aDMuNzZhMiAyIDAgMCAwIDEuOC0xLjFMOSAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOWguMDEiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QXJlYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTEuMjA3YS41LjUgMCAwIDEgLjE0Ni0uMzUzbDItMmEuNS41IDAgMCAxIC43MDggMGwzLjI5MiAzLjI5MmEuNS41IDAgMCAwIC43MDggMGw0LjI5Mi00LjI5MmEuNS41IDAgMCAxIC44NTQuMzUzVjE2YTEgMSAwIDAgMS0xIDFIOGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2hhcnRCYXJCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiMTMiLCB3aWR0aDogIjkiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI1Iiwgd2lkdGg6ICIxMiIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDEyIiB9XQogICAgXTsKICAgIHZhciBDaGFydEJhckluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDZoMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRCYXJTdGFja2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTN2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjEzIiwgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNSIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaGFydENhbmRsZXN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1djQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI5Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTV2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjgiLCB4OiAiMTUiLCB5OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM3YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XQogICAgXTsKICAgIHZhciBDaGFydENvbHVtbkJpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNSIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW5EZWNyZWFzaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTdWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN3YtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3VjUiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Q29sdW1uSW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTdWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3di0zIiB9XQogICAgXTsKICAgIHZhciBDaGFydENvbHVtblN0YWNrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxM0g3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICI1Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjgiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI5Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaGFydENvbHVtbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTdWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3di0zIiB9XQogICAgXTsKICAgIHZhciBDaGFydEdhbnR0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWg3IiB9XQogICAgXTsKICAgIHZhciBDaGFydExpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA5LTUgNS00LTQtMyAzIiB9XQogICAgXTsKICAgIHZhciBDaGFydE5ldHdvcmsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xMSA3LjY2NCAxLjc4IDIuNjcyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjE2MiAxMi43ODgtMy4zMjQgMS40MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgNC02LjA2IDEuNTE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjYiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTUiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjF2LTYiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMVYzIiB9XQogICAgXTsKICAgIHZhciBDaGFydE5vQXhlc0NvbHVtbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMVY5IiB9XQogICAgXTsKICAgIHZhciBDaGFydE5vQXhlc0NvbWJpbmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDMtOC42NDYgOC42NDZhLjUuNSAwIDAgMS0uNzA4IDBMOS4zNTQgOC4zNTRhLjUuNSAwIDAgMC0uNzA3IDBMMiAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHY3IiB9XQogICAgXTsKICAgIHZhciBDaGFydE5vQXhlc0dhbnR0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA1aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTloOCIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRQaWUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMmMuNTUyIDAgMS4wMDUtLjQ0OS45NS0uOTk4YTEwIDEwIDAgMCAwLTguOTUzLTguOTUxYy0uNTUtLjA1NS0uOTk4LjM5OC0uOTk4Ljk1djhhMSAxIDAgMCAwIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMjEgMTUuODlBMTAgMTAgMCAxIDEgOCAyLjgzIiB9XQogICAgXTsKICAgIHZhciBDaGFydFNjYXR0ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiNy41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4LjUiLCBjeTogIjUuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMS41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiMTYuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNy41IiwgY3k6ICIxNC41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRTcGxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2Yy41LTIgMS41LTcgNC03IDIgMCAyIDMgNCAzIDIuNSAwIDQuNS01IDUtNyIgfV0KICAgIF07CiAgICB2YXIgQ2hlY2tMaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNEw5IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5TDMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNUw0IDEwIiB9XQogICAgXTsKICAgIHZhciBDaGVja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNiA3IDE3bC01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtNy41IDcuNUwxMyAxNiIgfV0KICAgIF07CiAgICB2YXIgQ2hlZkhhdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDIxYTEgMSAwIDAgMCAxLTF2LTUuMzVjMC0uNDU3LjMxNi0uODQ0LjcyNy0xLjA0MWE0IDQgMCAwIDAtMi4xMzQtNy41ODkgNSA1IDAgMCAwLTkuMTg2IDAgNCA0IDAgMCAwLTIuMTM0IDcuNTg4Yy40MTEuMTk4LjcyNy41ODUuNzI3IDEuMDQxVjIwYTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogICAgdmFyIENoZXJyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdhNSA1IDAgMCAwIDEwIDBjMC0yLjc2LTIuNS01LTUtMy0yLjUtMi01IC4yNC01IDNaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0YzMuMjItMi45MSA0LjI5LTguNzUgNS0xMiAxLjY2IDIuMzggNC45NCA5IDUgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtNC4yOSAwLTcuMTQtMi4zMy0xMC03IDUuNzEgMCAxMCA0LjY3IDEwIDdaIiB9XQogICAgXTsKICAgIHZhciBDaGVjayA9IFtbInBhdGgiLCB7IGQ6ICJNMjAgNiA5IDE3bC01LTUiIH1dXTsKICAgIHZhciBDaGVzc0Jpc2hvcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE4YzEuNS0uNjE1IDMtMi40NjEgMy00LjkyM0MxOCA4Ljc2OSAxNC41IDQuNDYyIDEyIDIgOS41IDQuNDYyIDYgOC43NyA2IDEzLjA3NyA2IDE1LjUzOSA3LjUgMTcuMzg1IDkgMTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgNy0yLjUgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMmg2IiB9XQogICAgXTsKICAgIHZhciBDaGVzc0tpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwYTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINWExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02LjcgMTgtMS0xQzQuMzUgMTUuNjgyIDMgMTQuMDkgMyAxMmE1IDUgMCAwIDEgNC45NS01YzEuNTg0IDAgMi43LjQ1NSA0LjA1IDEuODE4QzEzLjM1IDcuNDU1IDE0LjQ2NiA3IDE2LjA1IDdBNSA1IDAgMCAxIDIxIDEyYzAgMi4wODItMS4zNTkgMy42NzMtMi43IDVsLTEgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY2LjgxOCIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NQYXduID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMCAxLjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTggMS41LTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBDaGVzc1F1ZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDktMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDQgOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiNyIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaGVzc0tuaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUgMThjMS0yIDIuNS01IDIuNS05YTcgNyAwIDAgMC03LTdINi42MzVhMSAxIDAgMCAwLS43NjggMS42NEw3IDVsLTIuMzIgNS44MDJhMiAyIDAgMCAwIC45NSAyLjUyNmwyLjg3IDEuNDU2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgMS40MjUtMS40MjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgOCAxLjUzLTEuNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MTMgMTIuMTg1IDcgMTgiIH1dCiAgICBdOwogICAgdmFyIENoZXNzUm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTgtMS05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMnY1YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMS05IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uRG93biA9IFtbInBhdGgiLCB7IGQ6ICJtNiA5IDYgNiA2LTYiIH1dXTsKICAgIHZhciBDaGV2cm9uRmlyc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC02LTYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNnYxMiIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbkxhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDYtNi02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNnYxMiIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbkxlZnQgPSBbWyJwYXRoIiwgeyBkOiAibTE1IDE4LTYtNiA2LTYiIH1dXTsKICAgIHZhciBDaGV2cm9uUmlnaHQgPSBbWyJwYXRoIiwgeyBkOiAibTkgMTggNi02LTYtNiIgfV1dOwogICAgdmFyIENoZXZyb25VcCA9IFtbInBhdGgiLCB7IGQ6ICJtMTggMTUtNi02LTYgNiIgfV1dOwogICAgdmFyIENoZXZyb25zRG93blVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMCA1LTUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNCA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDYgNSA1IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDEzIDUgNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zTGVmdFJpZ2h0RWxsaXBzaXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgNSA1LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDctNSA1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNMZWZ0UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDctNSA1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA3IDUgNS01IDUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE3LTUtNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTctNS01IDUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNSaWdodExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy01LTUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTcgNS01LTUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxNyA1LTUtNS01IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEtNS01LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC01LTUtNSA1IiB9XQogICAgXTsKICAgIHZhciBDaHJvbWl1bSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjg4IDIxLjk0IDE1LjQ2IDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjE3IDhIMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy45NSA2LjA2IDguNTQgMTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA5IDUtNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIENpZ2FyZXR0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtLjUuODY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2h1cmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTggOSAzLjUyIDIuMTQ3YTEgMSAwIDAgMSAuNDguODU0VjE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi02Ljk5OWExIDEgMCAwIDEgLjQ4LS44NTRMNiA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFWN2ExIDEgMCAwIDEgLjM3Ni0uNzgybDUtMy45OTlhMSAxIDAgMCAxIDEuMjQ5LjAwMWw1IDRBMSAxIDAgMCAxIDE4IDd2MTQiIH1dCiAgICBdOwogICAgdmFyIENpZ2FyZXR0ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQWxlcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjgiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMi4wMSIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd0Rvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd0xlZnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4LTQgNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dPdXREb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMTAgMTAgMCAxIDEgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyMiAxMC0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIySDJ2LTYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0RG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJhMTAgMTAgMCAxIDEgMTAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMTIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTZ2NmgtNiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dPdXRVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAxMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyQTEwIDEwIDAgMSAxIDIgMTIiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0VXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyQTEwIDEwIDAgMSAxIDEyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyaDZ2NiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE2IDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd1VwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTItNC00LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNlY4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVDaGVja0JpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgwMSAxMEExMCAxMCAwIDEgMSAxNyAzLjMzNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVDaGVjayA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hldnJvblVwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4xIDIuMTgyYTEwIDEwIDAgMCAxIDMuOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjkgMjEuODE4YTEwIDEwIDAgMCAxLTMuOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjYwOSAzLjcyMWExMCAxMCAwIDAgMSAyLjY5IDIuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjE4MiAxMy45YTEwIDEwIDAgMCAxIDAtMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjI3OSAxNy42MDlhMTAgMTAgMCAwIDEtMi43IDIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuODE4IDEwLjFhMTAgMTAgMCAwIDEgMCAzLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy43MjEgNi4zOTFhMTAgMTAgMCAwIDEgMi43LTIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOTEgMjAuMjc5YTEwIDEwIDAgMCAxLTIuNjktMi43IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVEaXZpZGUgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRG9sbGFyU2lnbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVEb3REYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4xIDIuMThhOS45MyA5LjkzIDAgMCAxIDMuOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjYgMy43MWE5Ljk1IDkuOTUgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuODIgMTAuMWE5LjkzIDkuOTMgMCAwIDEgMCAzLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMjkgMTcuNmE5Ljk1IDkuOTUgMCAwIDEtMi43IDIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MmE5Ljk0IDkuOTQgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40IDIwLjI5YTkuOTUgOS45NSAwIDAgMS0yLjY5LTIuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjE4IDEzLjlhOS45MyA5LjkzIDAgMCAxIDAtMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNzEgNi40YTkuOTUgOS45NSAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVEb3QgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVFbGxpcHNpcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUVxdWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aDEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVGYWRpbmdBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgOC44NzVhMTAgMTAgMCAwIDAtLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNjM2IDUuMjM1YTEwIDEwIDAgMCAxIC44OTEtLjg1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY0NCAyMS40MmExMCAxMCAwIDAgMCA3LjYzMS0uMzgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUZhZGluZ1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMCAxIDcuMzggMTYuNzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVHYXVnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjYgMi43YTEwIDEwIDAgMSAwIDUuNyA1LjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy40IDEwLjYgMTkgNSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlTWludXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBhcmtpbmdPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi42NTYgN0gxM2EzIDMgMCAwIDEgMi45ODQgMy4zMDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4wNzEgMTkuMDcxQTEgMSAwIDAgMSA0LjkzIDQuOTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzU3IDIuNjg3YTEwIDEwIDAgMCAxIDEyLjk1NiAxMi45NTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y5IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQYXJraW5nID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQYXVzZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTQiLCB4MjogIjE0IiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGVyY2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGlsZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQbHVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2OCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUG91bmRTdGVybGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2VjkuNWExIDEgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aDciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVF1ZXN0aW9uTWFyayA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU2xhc2gyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAyIDIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVTbGFzaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjE1IiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU21hbGwgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dXTsKICAgIHZhciBDaXJjbGVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDUxIDcuNjE2YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY3bC0xLjE1Ni0xLjE1MmExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVTdG9wID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjkiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVVc2VyUm91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMGE2IDYgMCAwIDAtMTIgMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICI0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVVc2VyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwLjY2MlYxOWEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYxLjY2MiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlWCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZSA9IFtbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dXTsKICAgIHZhciBDaXJjdWl0Qm9hcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA5aDRhMiAyIDAgMCAwIDItMlYzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTRhMiAyIDAgMCAxIDItMmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENpdHJ1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMjEuNjYgMTcuNjdhMS4wOCAxLjA4IDAgMCAxLS4wNCAxLjZBMTIgMTIgMCAwIDEgNC43MyAyLjM4YTEuMSAxLjEgMCAwIDEgMS42MS0uMDR6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42NSAxNS42NkE4IDggMCAwIDEgOC4zNSA0LjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLTUuNSA1LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTcuODVWMTBINi4xNSIgfV0KICAgIF07CiAgICB2YXIgQ2xhcHBlcmJvYXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMiA2IDMgMTFsLS45LTIuNGMtLjMtMS4xLjMtMi4yIDEuMy0yLjVsMTMuNS00YzEuMS0uMyAyLjIuMyAyLjUgMS4zWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjIgNS4zIDMuMSAzLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNCAzLjQgMy4xIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMWgxOHY4YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yWiIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkQ2hlY2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYuODMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRDb3B5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTRIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTAtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkTGlzdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZE1pbnVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoNiIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkUGFzdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOCA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMS43OTMtMS4xMTMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRQZW5MaW5lID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDEuNzMgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDEyLjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRQZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTMuNVY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4zNzggMTUuNjI2YTEgMSAwIDEgMC0zLjAwNC0zLjAwNGwtNS4wMSA1LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENsaXBib2FyZFBsdXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3di02IiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRUeXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2LTFoNnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTF2NiIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMSA2IDYiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2sxMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtNC0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazExID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC0yLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmw0LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMiA0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsLTIgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s4ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC00IDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrOSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nkg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9ja0Fycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMzM3IDIxLjk5NGExMCAxMCAwIDEgMSA5LjU4OC04Ljc2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0djgiIH1dCiAgICBdOwogICAgdmFyIENsb2NrQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjI1IDguMkExMCAxMCAwIDEgMCAxNiAyMS4xNiIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDEuNTYuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XQogICAgXTsKICAgIHZhciBDbG9ja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmExMCAxMCAwIDEgMC0xMSA5Ljk1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE2LTUuNSA1LjVMMTQgMTkiIH1dCiAgICBdOwogICAgdmFyIENsb2NrRmFkaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmw0IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICAgIHZhciBDbG9ja1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMy42NDQgMS44MjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjkyIDEzLjI2N2ExMCAxMCAwIDEgMC04LjY1MyA4LjY1MyIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9zZWRDYXB0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS4xN2EzIDMgMCAxIDAgMCA1LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDkuMTdhMyAzIDAgMSAwIDAgNS42NiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRBbGVydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTI4IDE2Ljk0OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTEgMSAwIDAgMSAwIDloLTEuNjQyIiB9XQogICAgXTsKICAgIHZhciBDbG91ZEJhY2t1cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1LjI1MUE0LjUgNC41IDAgMCAwIDE3LjUgOGgtMS43OUE3IDcgMCAxIDAgMyAxMy42MDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMXY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNSA0LjgyIDQuODIgMCAwIDAtMy40MSAxLjQxTDcgMTUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNS01LjUgNS41TDkgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS41MTYgMTYuMDdBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDMuNTAxIDcuMzI3IiB9XQogICAgXTsKICAgIHZhciBDbG91ZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxOS43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMTQ4IDE0LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTkuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjUzIDIwLjY5Ni0uMzgyLS45MjRhMyAzIDAgMSAxLTIuMjk2LTUuNTQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxNS44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDE4LjE0OC45MjMuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiAxNS4xYTcgNyAwIDEgMSA5LjkzLTkuODU4QTcgNyAwIDAgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDE1Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTguMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBDbG91ZERvd25sb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OGwtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDIxIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjM5MyAxNS4yNjlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNDM2IDguMjg0IiB9XQogICAgXTsKICAgIHZhciBDbG91ZERyaXp6bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRGb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjFIOSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRIYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENsb3VkTW9vblJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NiAxNC41MTJhNiA2IDAgMCAwIDMuNDYxLTQuMTI3Yy4xNDgtLjYyNS0uNjU5LS45Ny0xLjI0OC0uNzE0YTQgNCAwIDAgMS01LjI1OS01LjI2Yy4yNTUtLjU4OS0uMDktMS4zOTUtLjcxNi0xLjI0OGE2IDYgMCAwIDAtNC41OTQgNS4zNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwYTUgNSAwIDEgMSA4LjktNEgxM2EzIDMgMCAwIDEgMiA1LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRMaWdodG5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2LjMyNkE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgLjUgOC45NzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTItMyA1aDRsLTMgNSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRNb29uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDAgNkg3YTUgNSAwIDEgMSA0LjktNnoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbG91ZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjk0IDUuMjc0QTcgNyAwIDAgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgNC4yMjIgNi4wNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzk2IDE4LjgxQTQuNSA0LjUgMCAwIDEgMTcuNSAxOUg5QTcgNyAwIDAgMSA1Ljc5IDUuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFJhaW5XaW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIgMjIgMy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMtMyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzLTMgNyIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRSYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XQogICAgXTsKICAgIHZhciBDbG91ZFNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRTdW5SYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5djIiIH1dCiAgICBdOwogICAgdmFyIENsb3VkU3VuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTRoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTk2IDE1LjI1MUE0LjUgNC41IDAgMCAwIDE3LjQ5NSA4aC0xLjc5YTcgNyAwIDEgMC0xMi43MDkgNS42MDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTcgNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWQgPSBbWyJwYXRoIiwgeyBkOiAiTTE3LjUgMTlIOWE3IDcgMCAxIDEgNi43MS05aDEuNzlhNC41IDQuNSAwIDEgMSAwIDlaIiB9XV07CiAgICB2YXIgQ2xvdWR5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMmExIDEgMCAxIDEgMCA5SDkuMDA2YTcgNyAwIDEgMSA2LjcwMi05eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MzIgOUEzIDMgMCAwIDAgMTkgN2gtMi4yMDdhNS41IDUuNSAwIDAgMC0xMC43Mi42MSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMTcgNy44MyAyIDIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMDIgMTJhMi44MjcgMi44MjcgMCAxIDEgMy44MS00LjE3QTIuODI3IDIuODI3IDAgMSAxIDEyIDQuMDJhMi44MjcgMi44MjcgMCAxIDEgNC4xNyAzLjgxQTIuODI3IDIuODI3IDAgMSAxIDE5Ljk4IDEyYTIuODI3IDIuODI3IDAgMSAxLTMuODEgNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiAxOS45OGEyLjgyNyAyLjgyNyAwIDEgMS00LjE3LTMuODFBMSAxIDAgMSAxIDQgMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy44MyA3LjgzIDguMzQgOC4zNCIgfV0KICAgIF07CiAgICB2YXIgQ2x1YiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuMjggOS4wNWE1LjUgNS41IDAgMSAwLTEwLjU2IDBBNS41IDUuNSAwIDEgMCAxMiAxNy42NmE1LjUgNS41IDAgMSAwIDUuMjgtOC42WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNjZMMTIgMjIiIH1dCiAgICBdOwogICAgdmFyIENvZGVYbWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNC01IDE2IiB9XQogICAgXTsKICAgIHZhciBDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYtNiA2IDYgNiIgfV0KICAgIF07CiAgICB2YXIgQ29kZXBlbiA9IFsKICAgICAgWyJwb2x5Z29uIiwgeyBwb2ludHM6ICIxMiAyIDIyIDguNSAyMiAxNS41IDEyIDIyIDIgMTUuNSAyIDguNSAxMiAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjE1LjUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyMiA4LjUgMTIgMTUuNSAyIDguNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjIgMTUuNSAxMiA4LjUgMjIgMTUuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIiLCB5MjogIjguNSIgfV0KICAgIF07CiAgICB2YXIgQ29kZXNhbmRib3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjcuNSAxOS43OSA3LjUgMTQuNiAzIDEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjEgMTIgMTYuNSAxNC42IDE2LjUgMTkuNzkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyLjA4IiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQ29mZmVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA4YTEgMSAwIDAgMSAxIDF2OGE0IDQgMCAwIDEtNCA0SDdhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTFoMTRhNCA0IDAgMSAxIDAgOGgtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MiIgfV0KICAgIF07CiAgICB2YXIgQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTAuMjcgNyAzLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDEzLjczLTQgNi45MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMC42Ni0xLTEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy4zNC0xIDEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjY2IDE3LTEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC42NiA3LTEuNzMgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDE3IDEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDcgMS43MyAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgQ29pbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjgiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4wOSAxMC4zN0E2IDYgMCAxIDEgMTAuMzQgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDF2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi43MSAxMy44OC43LjcxLTIuODIgMi44MiIgfV0KICAgIF07CiAgICB2YXIgQ29sdW1uczIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zM0NvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zIDE5LjYgMS0uNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yIDE2LjktLjktLjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNiAyMS43LjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuOCAxNS4zLS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMSAxNS4yLjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNiAyMS43LS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyAxNi44IDEtLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNyAxOS40LS45LS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb21iaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2ExIDEgMCAwIDEgMSAxdjVhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTUgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjEgMy0zSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENvbW1hbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2djEyYTMgMyAwIDEgMCAzLTNINmEzIDMgMCAxIDAgMyAzVjZhMyAzIDAgMSAwLTMgM2gxMmEzIDMgMCAxIDAtMy0zIiB9XQogICAgXTsKICAgIHZhciBDb21wYXNzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMjQgNy43Ni0xLjgwNCA1LjQxMWEyIDIgMCAwIDEtMS4yNjUgMS4yNjVMNy43NiAxNi4yNGwxLjgwNC01LjQxMWEyIDIgMCAwIDEgMS4yNjUtMS4yNjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDb21wb25lbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS41MzYgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc2IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0bC0yLjM3Ny0yLjM3N2ExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4yOTcgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc3IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0TDYuMDg4IDguOTE2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiAxNy45MTJhMSAxIDAgMCAwIDAgMS40MTVsMi4zNzcgMi4zNzZhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzZhMSAxIDAgMCAwIDAtMS40MTVsLTIuMzc3LTIuMzc2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiA0LjY3NGExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3NmExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3NmExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDb21wdXRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiOCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDYiIH1dCiAgICBdOwogICAgdmFyIENvbmNpZXJnZUJlbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwYTEgMSAwIDAgMS0xLTF2LTFhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTZhOCA4IDAgMSAwLTE2IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDRoNCIgfV0KICAgIF07CiAgICB2YXIgQ29uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjkgMTguNTUtOC0xNS45OGExIDEgMCAwIDAtMS44IDBsLTggMTUuOTgiIH1dLAogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjE5Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XQogICAgXTsKICAgIHZhciBDb250YWN0Um91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnN0cnVjdGlvbiA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTR2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM3YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE0IDIuMyA2LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNiA3LjcgNy43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA4IDgiIH1dCiAgICBdOwogICAgdmFyIENvbnRhY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMnYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnRhaW5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDcuN2MwLS42LS40LTEuMi0uOC0xLjVsLTYuMy0zLjlhMS43MiAxLjcyIDAgMCAwLTEuNyAwbC0xMC4zIDZjLS41LjItLjkuOC0uOSAxLjR2Ni42YzAgLjUuNCAxLjIuOCAxLjVsNi4zIDMuOWExLjcyIDEuNzIgMCAwIDAgMS43IDBsMTAuMy02Yy41LS4zLjktMSAuOS0xLjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxLjlWMTRMMi4xIDkuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS45LTYuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOS44di04LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTcuNVY5LjQiIH1dCiAgICBdOwogICAgdmFyIENvb2tpZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAxIDAgMTAgMTAgNCA0IDAgMCAxLTUtNSA0IDQgMCAwIDEtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSA4LjV2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjV2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN3YuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHYuMDEiIH1dCiAgICBdOwogICAgdmFyIENvbnRyYXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6IiB9XQogICAgXTsKICAgIHZhciBDb29raW5nUG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY4YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgOCAxNi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguODYgNi43OC0uNDUtMS44MWEyIDIgMCAwIDEgMS40NS0yLjQzbDEuOTQtLjQ4YTIgMiAwIDAgMSAyLjQzIDEuNDZsLjQ1IDEuOCIgfV0KICAgIF07CiAgICB2YXIgQ29weUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlNaW51cyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weVBsdXMgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlTbGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTgiLCB5MjogIjEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weVggPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHkgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlsZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xNyAxNC44M2E0IDQgMCAxIDAgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3B5cmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MyAxNC44M2E0IDQgMCAxIDEgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJEb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDR2N2E0IDQgMCAwIDEtNCA0SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMC01IDUgNSA1IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMCA1IDUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnREb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUtNSA1LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDkgOSA0IDQgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjQiIH1dCiAgICBdOwogICAgdmFyIENvcm5lclJpZ2h0RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0aDdhNCA0IDAgMCAxIDQgNHYxMiIgfV0KICAgIF07CiAgICB2YXIgQ29ybmVyUmlnaHRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDkgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwaDdhNCA0IDAgMCAwIDQtNFY0IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNCA0IDlsNS01IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTQgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwdi03YTQgNCAwIDAgMSA0LTRoMTIiIH1dCiAgICBdOwogICAgdmFyIENwdSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAydjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjQiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDcmVhdGl2ZUNvbW1vbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOS4zYTIuOCAyLjggMCAwIDAtMy41IDEgMy4xIDMuMSAwIDAgMCAwIDMuNCAyLjcgMi43IDAgMCAwIDMuNSAxIiB9XQogICAgXTsKICAgIHZhciBDcmVkaXRDYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ3JvaXNzYW50ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMiAxOEg0Ljc3NGExLjUgMS41IDAgMCAxLTEuMzUyLS45NyAxMSAxMSAwIDAgMSAuMTMyLTYuNDg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEwLjJWNC43NzRhMS41IDEuNSAwIDAgMC0uOTctMS4zNTIgMTEgMTEgMCAwIDAtNi40ODYuMTMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhNCAzIDAgMCAxIDQgMyAyIDIgMCAwIDEtMiAyIDEwIDEwIDAgMCAwLTUuMTM5IDEuNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOGEzIDQgMCAwIDAgMyA0IDIgMiAwIDAgMCAyLTIgMTAgMTAgMCAwIDEgMS40Mi01LjE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNzA5IDIuNTU0YTEwIDEwIDAgMCAwLTYuMTU1IDYuMTU1IDEuNSAxLjUgMCAwIDAgLjY3NiAxLjYyNmw5LjgwNyA1LjQyYTIgMiAwIDAgMCAyLjcxOC0yLjcxOGwtNS40Mi05LjgwN2ExLjUgMS41IDAgMCAwLTEuNjI2LS42NzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MTRhMiAyIDAgMCAwIDIgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMlY4YTIgMiAwIDAgMC0yLTJIMiIgfV0KICAgIF07CiAgICB2YXIgQ3Jvc3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDlhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoNGExIDEgMCAwIDEgMSAxdjRhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTRhMSAxIDAgMCAxIDEtMWg0YTIgMiAwIDAgMCAyLTJ2LTJhMiAyIDAgMCAwLTItMmgtNGExIDEgMCAwIDEtMS0xVjRhMiAyIDAgMCAwLTItMmgtMmEyIDIgMCAwIDAtMiAydjRhMSAxIDAgMCAxLTEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3NzaGFpciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxOCIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjYiLCB5MjogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTgiIH1dCiAgICBdOwogICAgdmFyIENyb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNTYyIDMuMjY2YS41LjUgMCAwIDEgLjg3NiAwTDE1LjM5IDguODdhMSAxIDAgMCAwIDEuNTE2LjI5NEwyMS4xODMgNS41YS41LjUgMCAwIDEgLjc5OC41MTlsLTIuODM0IDEwLjI0NmExIDEgMCAwIDEtLjk1Ni43MzRINS44MWExIDEgMCAwIDEtLjk1Ny0uNzM0TDIuMDIgNi4wMmEuNS41IDAgMCAxIC43OTgtLjUxOWw0LjI3NiAzLjY2NGExIDEgMCAwIDAgMS41MTYtLjI5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgQ3Vib2lkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuMTIgNi40LTYuMDUtNC4wNmEyIDIgMCAwIDAtMi4xNy0uMDVMMi45NSA4LjQxYTIgMiAwIDAgMC0uOTUgMS43djUuODJhMiAyIDAgMCAwIC44OCAxLjY2bDYuMDUgNC4wN2EyIDIgMCAwIDAgMi4xNy4wNWw5Ljk1LTYuMTJhMiAyIDAgMCAwIC45NS0xLjdWOC4wNmEyIDIgMCAwIDAtLjg4LTEuNjZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi04TDIuMjUgOS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS43Ny02Ljg3IiB9XQogICAgXTsKICAgIHZhciBDdXBTb2RhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDEuNzUgMTIuMjhhMiAyIDAgMCAwIDIgMS43Mmg0LjU0YTIgMiAwIDAgMCAyLTEuNzJMMTggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDhoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCAxLTZoMiIgfV0KICAgIF07CiAgICB2YXIgQ3lsaW5kZXIgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTRhOSAzIDAgMCAwIDE4IDBWNSIgfV0KICAgIF07CiAgICB2YXIgQ3VycmVuY3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE4IiwgeTE6ICIzIiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTgiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0KICAgIF07CiAgICB2YXIgRGF0YWJhc2VCYWNrdXAgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgMyAwIDAgMCA1IDIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOS4zVjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0YTkgMyAwIDAgMCA2LjQ3IDIuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIwYTUgNSAwIDAgMCA5LTMgNC41IDQuNSAwIDAgMC00LjUtNC41Yy0xLjMzIDAtMi41NC41NC0zLjQxIDEuNDFMMTIgMTYiIH1dCiAgICBdOwogICAgdmFyIERhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDExLjMxYzEuMTcuNTYgMS41NCAxLjY5IDMuNSAxLjY5IDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS43NSAxOGMuMzUuNSAxLjQ1IDEgMi43NSAxIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDNhMSAxIDAgMCAwLTEgMXYxNmExIDEgMCAwIDAgMSAxaDRhMSAxIDAgMCAwIDEtMUwxMCA0YTEgMSAwIDAgMC0xLTF6IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZVNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjY5M1Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuODc1LTEuODc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSAzIDAgMCAwIDguNjk3IDIuOTk4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGE5IDMgMCAwIDAgOS4yOCAyLjk5OSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZVphcCA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMTUgMjEuODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNVY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyTDE4IDE3SDIyTDE5IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJBOSAzIDAgMCAwIDE0LjU5IDE0Ljg3IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZSA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMjEgMTlWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyQTkgMyAwIDAgMCAyMSAxMiIgfV0KICAgIF07CiAgICB2YXIgRGVjaW1hbHNBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAyMS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4SDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMi41IiB9XQogICAgXTsKICAgIHZhciBEZWNpbWFsc0Fycm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgRGVsZXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOSA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOS02IDYiIH1dCiAgICBdOwogICAgdmFyIERlc3NlcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xNjIgMy4xNjdBMTAgMTAgMCAwIDAgMiAxM2EyIDIgMCAwIDAgNCAwdi0xYTIgMiAwIDAgMSA0IDB2NGEyIDIgMCAwIDAgNCAwdi00YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDAgNC0uMDA2IDEwIDEwIDAgMCAwLTguMTYxLTkuODI2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjgwNCAxNC44NjlhOSA5IDAgMCAxLTE3LjYwOCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRGlhbWV0ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNDggMy42NmExMCAxMCAwIDAgMSAxMy44NiAxMy44NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQxIDYuNDEgMTEuMTggMTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42NiA2LjQ4YTEwIDEwIDAgMCAwIDEzLjg2IDEzLjg2IiB9XQogICAgXTsKICAgIHZhciBEaWFtb25kTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yIDkuMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA5LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjcgMTQuOGguMDEiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgICB2YXIgRGlhbW9uZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFsLTcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRGljZTEgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGljZTYgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2VzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjEwIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjkyIDE0IDMuNS0zLjVhMi4yNCAyLjI0IDAgMCAwIDAtM2wtNS00LjkyYTIuMjQgMi4yNCAwIDAgMC0zIDBMMTAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgRGlzYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGlzYzMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYzAtMS43LjctMy4yIDEuOC00LjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiIgfV0KICAgIF07CiAgICB2YXIgRGlzY0FsYnVtID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpc2MgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBEaXZpZGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOCIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBEbmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA2LTIuODkxLTIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDkgLjg5MS44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4xMDkgMTQuMTA5IDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi41IDEyLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi44OTEgMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYiIH1dCiAgICBdOwogICAgdmFyIERuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE2IDEuNSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgOC0xLjUtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJjLTEuNzk4IDEuOTk4LTIuNTE4IDMuOTk1LTIuODA3IDUuOTkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjUgMTAuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgNi0yLjg5MS0yLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE1YzYuNjY3LTYgMTMuMzMzIDAgMjAtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCA5IC44OTEuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMTA5IDE0LjEwOSA0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNSAxMi41IDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDIuODkxIDIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJjMS43OTgtMS45OTggMi41MTgtMy45OTUgMi44MDctNS45OTMiIH1dCiAgICBdOwogICAgdmFyIERvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjI1IDE2LjI1aDEuNUwxMiAxN3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC40MiAxMS4yNDdBMTMuMTUyIDEzLjE1MiAwIDAgMCA0IDE0LjU1NkM0IDE4LjcyOCA3LjU4MiAyMSAxMiAyMXM4LTIuMjcyIDgtNi40NDRhMTEuNzAyIDExLjcwMiAwIDAgMC0uNDkzLTMuMzA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC41IDguNWMtLjM4NCAxLjA1LTEuMDgzIDIuMDI4LTIuMzQ0IDIuNS0xLjkzMS43MjItMy41NzYtLjI5Ny0zLjY1Ni0xLS4xMTMtLjk5NCAxLjE3Ny02LjUzIDQtNyAxLjkyMy0uMzIxIDMuNjUxLjg0NSAzLjY1MSAyLjIzNUE3LjQ5NyA3LjQ5NyAwIDAgMSAxNCA1LjI3N2MwLTEuMzkgMS44NDQtMi41OTggMy43NjctMi4yNzcgMi44MjMuNDcgNC4xMTMgNi4wMDYgNCA3LS4wOC43MDMtMS43MjUgMS43MjItMy42NTYgMS0xLjI2MS0uNDcyLTEuODU1LTEuNDUtMi4yMzktMi41IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBEb2xsYXJTaWduID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDYiIH1dCiAgICBdOwogICAgdmFyIERvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmgxMiIgfV0KICAgIF07CiAgICB2YXIgRG9udXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC41IDEwYTIuNSAyLjUgMCAwIDEtMi40LTNIMThhMi45NSAyLjk1IDAgMCAxLTIuNi00LjQgMTAgMTAgMCAxIDAgNi4zIDcuMWMtLjMuMi0uOC4zLTEuMi4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWRMb2NrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOVY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN3YtMmEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNyIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjBWNmEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaDIwIiB9XQogICAgXTsKICAgIHZhciBEb29yT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwSDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNEg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwaC0zIiB9XQogICAgXTsKICAgIHZhciBEb3QgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIuMSIsIGN5OiAiMTIuMSIsIHI6ICIxIiB9XV07CiAgICB2YXIgRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMCA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBEcmFmdGluZ0NvbXBhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi45OSA2Ljc0IDEuOTMgMy40NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4xMzYgMTJhMTAgMTAgMCAwIDEtMTQuMjcxIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMi4xNi0zLjg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgOC4wMi0xNC4yNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIERyaWJiYmxlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMTMgNS4wOUMxNS4yMiA5LjE0IDEwIDEwLjQ0IDIuMjUgMTAuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNzUgMTIuODRjLTYuNjItMS40MS0xMi4xNCAxLTE2LjM4IDYuMzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41NiAyLjc1YzQuMzcgNiA2IDkuNDIgOCAxNy43MiIgfV0KICAgIF07CiAgICB2YXIgRHJhbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDEzLjFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVjMCA5LTQgMTItNiAxMnMtNi0zLTYtMTJjMC0yIDItMyA2LTNzNiAxIDYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40IDkuOWMtLjguOC0yIC44LTIuOCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjEgNy4xQzkgNy4yIDcuNyA3LjcgNiA4LjZjLTMuNSAyLTQuNyAzLjktMy43IDUuNiA0LjUgNy44IDkuNSA4LjQgMTEuMiA3LjQuOS0uNSAxLjktMi4xIDEuOS00LjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDE2LjVjLjMtMS4xIDEuNC0xLjcgMi40LTEuNCIgfV0KICAgIF07CiAgICB2YXIgRHJpbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg1YTMgMyAwIDAgMS0zLTMgMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTEgMSAwIDAgMSAxIDF2NmExIDEgMCAwIDEtMSAxbC0uODEgMy4yNDJhMSAxIDAgMCAxLS45Ny43NThIOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTAtMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi04IiB9XQogICAgXTsKICAgIHZhciBEcm9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNC0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjYzNyAxNGE0IDQgMCAxIDEtNS40MzIgNS44NjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMCIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgRHJvcGxldE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4IiB9XQogICAgXTsKICAgIHZhciBEcm9wbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhNyA3IDAgMCAwIDctN2MwLTItMS0zLjktMy01LjVzLTMuNS00LTQtNi41Yy0uNSAyLjUtMiA0LjktNCA2LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgNyA3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRHJvcGxldHMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDE2LjNjMi4yIDAgNC0xLjgzIDQtNC4wNSAwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5UzcuMjkgNi43NSA3IDUuM2MtLjI5IDEuNDUtMS4xNCAyLjg0LTIuMjkgMy43NlMzIDExLjEgMyAxMi4yNWMwIDIuMjIgMS44IDQuMDUgNCA0LjA1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41NiA2LjZBMTAuOTcgMTAuOTcgMCAwIDAgMTQgMy4wMmMuNSAyLjUgMiA0LjkgNCA2LjVzMyAzLjUgMyA1LjVhNi45OCA2Ljk4IDAgMCAxLTExLjkxIDQuOTciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIERydW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItOCA4IiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI5Iiwgcng6ICIxMCIsIHJ5OiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzLjR2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTMuNHY3LjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5djhhMTAgNSAwIDAgMCAyMCAwVjkiIH1dCiAgICBdOwogICAgdmFyIERydW1zdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjI5IDEyLjcxLTIuNiAyLjZhMi41IDIuNSAwIDEgMC0xLjY1IDQuNjVBMi41IDIuNSAwIDEgMCA4LjcgMTguM2wyLjU5LTIuNTkiIH1dCiAgICBdOwogICAgdmFyIER1bWJiZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNTk2IDEyLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTEuNzY4LTEuNzY3YTIgMiAwIDAgMCAyLjgyOC0yLjgyOWwtMi44MjgtMi44MjhhMiAyIDAgMCAwLTIuODI5IDIuODI4bC0xLjc2Ny0xLjc2OGEyIDIgMCAxIDAtMi44MjkgMi44Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuNSAyMS41IDEuNC0xLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuMSAzLjkgMS40LTEuNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjM0MyAyMS40ODVhMiAyIDAgMSAwIDIuODI5LTIuODI4bDEuNzY3IDEuNzY4YTIgMiAwIDEgMCAyLjgyOS0yLjgyOWwtNi4zNjQtNi4zNjRhMiAyIDAgMSAwLTIuODI5IDIuODI5bDEuNzY4IDEuNzY3YTIgMiAwIDAgMC0yLjgyOCAyLjgyOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS42IDE0LjQgNC44LTQuOCIgfV0KICAgIF07CiAgICB2YXIgRWFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC44IDMuMTVBNi41IDYuNSAwIDAgMSAxOSA4LjVjMCAxLjYzLS40NCAyLjgxLTEuMDkgMy43NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIEVhcnRoTG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zNFY1YTMgMyAwIDAgMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDEgMCA5LjU0IDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgRWFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4LjVhNi41IDYuNSAwIDEgMSAxMyAwYzAgNi02IDYtNiAxMGEzLjUgMy41IDAgMSAxLTcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4LjVhMi41IDIuNSAwIDAgMC01IDB2MWEyIDIgMCAxIDEgMCA0IiB9XQogICAgXTsKICAgIHZhciBFYXJ0aCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjU0IDE1SDE3YTIgMiAwIDAgMC0yIDJ2NC41NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTcgMy4zNFY1YTMgMyAwIDAgMCAzIDNhMiAyIDAgMCAxIDIgMmMwIDEuMS45IDIgMiAyYTIgMiAwIDAgMCAyLTJjMC0xLjEuOS0yIDItMmgzLjE3IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMS45NVYxOGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMS0yLTJ2LTFhMiAyIDAgMCAwLTItMkgyLjA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBFY2xpcHNlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmE3IDcgMCAxIDAgMTAgMTAiIH1dCiAgICBdOwogICAgdmFyIEVnZ0ZyaWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEVnZ09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNC4zNDdWMTRjMC02LTQtMTItOC0xMi0xLjA3OCAwLTIuMTU3LjQzNi0zLjE1NyAxLjE5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjA2IDYuMjFDNC44NzEgOC40IDQgMTEuMiA0IDE0YTggOCAwIDAgMCAxNC41NjggNC41NjgiIH1dCiAgICBdOwogICAgdmFyIEVnZyA9IFtbInBhdGgiLCB7IGQ6ICJNMTIgMkM4IDIgNCA4IDQgMTRhOCA4IDAgMCAwIDE2IDBjMC02LTQtMTItOC0xMiIgfV1dOwogICAgdmFyIEVsbGlwc2lzVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBFbGxpcHNpcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEVxdWFsQXBwcm94aW1hdGVseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVhNi41IDYuNSAwIDAgMSA3IDAgNi41IDYuNSAwIDAgMCA3IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIiB9XQogICAgXTsKICAgIHZhciBFcXVhbE5vdCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjUiLCB5MTogIjUiLCB5MjogIjE5IiB9XQogICAgXTsKICAgIHZhciBFcXVhbCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIEV0aGVybmV0UG9ydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTUgMjAgMy0zaDJhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgybDMgM3oiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHYxIiB9XQogICAgXTsKICAgIHZhciBFcmFzZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAyMUg4YTIgMiAwIDAgMS0xLjQyLS41ODdsLTMuOTk0LTMuOTk5YTIgMiAwIDAgMSAwLTIuODI4bDEwLTEwYTIgMiAwIDAgMSAyLjgyOSAwbDUuOTk5IDZhMiAyIDAgMCAxIDAgMi44MjhMMTIuODM0IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMDgyIDExLjA5IDguODI4IDguODI4IiB9XQogICAgXTsKICAgIHZhciBFdXJvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xOSA2YTcuNyA3LjcgMCAwIDAtNS4yLTJBNy45IDcuOSAwIDAgMCA2IDEyYzAgNC40IDMuNSA4IDcuOCA4IDIgMCAzLjgtLjggNS4yLTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBFdkNoYXJnZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3aDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtMiAzaDNsLTIgMyIgfV0KICAgIF07CiAgICB2YXIgRXhwYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDkgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZ2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOFYzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgRXh0ZXJuYWxMaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQgMjEgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2IiB9XQogICAgXTsKICAgIHZhciBFeWVDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOC0uNzIyLTMuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4YTEwLjY0NSAxMC42NDUgMCAwIDAgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS0xLjcyNi0yLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTUgMS43MjYtMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE4IC43MjItMy4yNSIgfV0KICAgIF07CiAgICB2YXIgRXllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBFeWVPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC43MzMgNS4wNzZhMTAuNzQ0IDEwLjc0NCAwIDAgMSAxMS4yMDUgNi41NzUgMSAxIDAgMCAxIDAgLjY5NiAxMC43NDcgMTAuNzQ3IDAgMCAxLTEuNDQ0IDIuNDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMDg0IDE0LjE1OGEzIDMgMCAwIDEtNC4yNDItNC4yNDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNDc5IDE3LjQ5OWExMC43NSAxMC43NSAwIDAgMS0xNS40MTctNS4xNTEgMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSA0LjQ0Ni01LjE0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIEZhY2Vib29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmgtM2E1IDUgMCAwIDAtNSA1djNIN3Y0aDN2OGg0di04aDNsMS00aC00VjdhMSAxIDAgMCAxIDEtMWgzeiIgfV0KICAgIF07CiAgICB2YXIgRmFjdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIEZhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjgyNyAxNi4zNzlhNi4wODIgNi4wODIgMCAwIDEtOC42MTgtNy4wMDJsNS40MTIgMS40NWE2LjA4MiA2LjA4MiAwIDAgMSA3LjAwMi04LjYxOGwtMS40NSA1LjQxMmE2LjA4MiA2LjA4MiAwIDAgMSA4LjYxOCA3LjAwMmwtNS40MTItMS40NWE2LjA4MiA2LjA4MiAwIDAgMS03LjAwMiA4LjYxOGwxLjQ1LTUuNDEyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIEZhc3RGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgRmVhdGhlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDggMiAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDE1SDkiIH1dCiAgICBdOwogICAgdmFyIEZlbmNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzIDIgNXYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAzLTIgMnYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDMtMiAydjE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoiIH1dCiAgICBdOwogICAgdmFyIEZlcnJpc1doZWVsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44IDE1LTMuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjcgNy0zLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjggOSAzLjMgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43IDE3LTMuNS0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy04IDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTguN2E5IDkgMCAxIDAtMTIgMCIgfV0KICAgIF07CiAgICB2YXIgRmlnbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41eiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUFyY2hpdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy42NTkgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN1Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUF4aXMzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE4IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjhoOCIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuNjkgMTYuNDc5IDEuMjkgNC44OGEuNS41IDAgMCAxLS42OTguNTkxbC0xLjg0My0uODQ5YTEgMSAwIDAgMC0uODc5LjAwMWwtMS44NDYuODVhLjUuNSAwIDAgMS0uNjkyLS41OTNsMS4yOS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTQiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJyYWNlc0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDIyaDRhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNGExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAxLTEgMSAxIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAwIDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVCb3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC41IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My44IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNyAxNC4yIDcgMTdsLTQuNy0yLjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMy4xYTIgMiAwIDAgMC0uOTk5IDEuNzZ2My4yNGEyIDIgMCAwIDAgLjk2OSAxLjc4TDYgMjEuN2EyIDIgMCAwIDAgMi4wMy4wMUwxMSAxOS45YTIgMiAwIDAgMCAxLTEuNzZWMTQuOWEyIDIgMCAwIDAtLjk3LTEuNzhMOCAxMS4zYTIgMiAwIDAgMC0yLjAzLS4wMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN3Y1IiB9XQogICAgXTsKICAgIHZhciBGaWxlQnJhY2VzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOHYtNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNoYXJ0Q29sdW1uID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTh2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydExpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTMtMy41IDMuNS0yLTJMOCAxNyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNoYXJ0UGllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuOTQxIDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My41MTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjAxNyAxMS41MTJhNiA2IDAgMSAwIDguNDY2IDguNDc1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTZhMSAxIDAgMCAxLTEtMXYtNGMwLS41NTIuNDUtMS4wMDguOTk1LS45MTdhNiA2IDAgMCAxIDQuOTIyIDQuOTIyYy4wOTEuNTQ0LS4zNjUuOTk1LS45MTcuOTk1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZUNoZWNrQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2xvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAyMmgyYTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Mi44NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTYiLCByOiAiNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGVDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyLjE1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0zLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuNSA4IDE1bDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLjUgMiAyLjUtMiAyLjUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4YTEgMSAwIDAgMS0xLTFWMmEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtNC4xODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMC41OTJWNGEyIDIgMCAwIDEgMi0yaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yMjggMTYuODUyLS45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNzczIDE2Ljg1Mi45MjItLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05Ljc3MyAxOS4xNDguOTIyLjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3aDYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWdpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVFeGNsYW1hdGlvblBvaW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICAgIHZhciBGaWxlSGVhZHBob25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCA2LjgzNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtLjM0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMiAxOWEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAxLTQgMHYtNGE2IDYgMCAwIDEgMTIgMHY0YTIgMiAwIDAgMS00IDB2LTFhMiAyIDAgMCAxIDQgMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzIDIyaDVhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSA3IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhMSAxIDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlSW1hZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlSW5wdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlS2V5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGgyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUxvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTd2LTJhMiAyIDAgMCAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVNaW51c0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDE0VjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg2IiB9XQogICAgXTsKICAgIHZhciBGaWxlTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWg2IiB9XQogICAgXTsKICAgIHZhciBGaWxlTXVzaWMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS42NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjEwLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMHYtN2wzIDEuNDc0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZU91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMS0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNy0zLTNoMTAiIH1dCiAgICBdOwogICAgdmFyIEZpbGVQZW5MaW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguMjI2IDUuMjI2LTIuNTItMi41MkEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjM1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGgxIiB9XQogICAgXTsKICAgIHZhciBGaWxlUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2OS4zNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjM3OCAxMi42MjJhMSAxIDAgMCAxIDMgMy4wMDNMOC4zNiAyMC42MzdhMiAyIDAgMCAxLS44NTQuNTA2bC0yLjg2Ny44MzdhLjUuNSAwIDAgMS0uNjItLjYybC44MzYtMi44NjlhMiAyIDAgMCAxIC41MDYtLjg1M3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyAxMy40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2di00LjcwNGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbHVzQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY1LjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNnY2IiB9XQogICAgXTsKICAgIHZhciBGaWxlUXVlc3Rpb25NYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDlhMyAzIDAgMCAxIDUuODIgMWMwIDItMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZVBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di02IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2NhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoNC4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0YTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIyYTIgMiAwIDAgMCAyLTIiIH1dCiAgICBdOwogICAgdmFyIEZpbGVTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxNC41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4zIDE2LjMgMTUgMTgiIH1dCiAgICBdOwogICAgdmFyIEZpbGVTZWFyY2hDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4xIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OSAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2My4yNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTIuODgtMi44OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlU2lnbmFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTMuNWEyLjUgMi41IDAgMCAxIDAgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmE1IDUgMCAwIDEgMCA2IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2xpZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTZ2MiIgfV0KICAgIF07CiAgICB2YXIgRmlsZVNwcmVhZHNoZWV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN2gyIiB9XQogICAgXTsKICAgIHZhciBGaWxlU3RhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjhhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSA2YTIgMiAwIDAgMC0uNTg2LTEuNDE0bC0yLTJBMiAyIDAgMCAwIDE3IDJoLTNhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoNmExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZVN5bWxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlVGVybWluYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDQiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUZXh0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDlIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDgiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUeXBlQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY4IiB9XQogICAgXTsKICAgIHZhciBGaWxlVHlwZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YtLjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgLjUuNXYuNSIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVzZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhNCA0IDAgMCAwLTggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlVmlkZW9DYW1lcmEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3IiB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNiIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGaWxlVm9sdW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxMS41NVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMSAwIDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxNC41MDJhLjUuNSAwIDAgMC0uODI2LS4zODFsLTEuODkzIDEuNjMxYTEgMSAwIDAgMS0uNjUxLjI0M0gzLjVhLjUuNSAwIDAgMC0uNS41MDF2My4wMDZhLjUuNSAwIDAgMCAuNS41MDFoMS4xMjlhMSAxIDAgMCAxIC42NTIuMjQzbDEuODkzIDEuNjMzYS41LjUgMCAwIDAgLjgyNi0uMzh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlWENvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE3IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy01IDUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBGaWxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBGaWxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDEuNzMyLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbG0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3LjVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTYuNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNy41aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTYuNWg0IiB9XQogICAgXTsKICAgIHZhciBGaW5nZXJwcmludFBhdHRlcm4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMGEyIDIgMCAwIDAtMiAyYzAgMS4wMi0uMSAyLjUxLS4yNiA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzLjEyYzAgMi4zOCAwIDYuMzgtMSA4Ljg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjI5IDIxLjAyYy4xMi0uNi40My0yLjMuNS0zLjAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMTAgMTAgMCAwIDEgMTgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44IDE2Yy4yLTIgLjEzMS01LjM1NCAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOS41QzUuNSAxOCA2IDE1IDYgMTJhNiA2IDAgMCAxIC4zNC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjUgMjJjLjIxLS42Ni40NS0xLjMyLjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2LjhhNiA2IDAgMCAxIDkgNS4ydjIiIH1dCiAgICBdOwogICAgdmFyIEZpcmVFeHRpbmd1aXNoZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2LjVWM2ExIDEgMCAwIDAtMS0xaC0yYTEgMSAwIDAgMC0xIDF2My41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzaC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDNhNiA2IDAgMCAwLTYgNnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBhNCA0IDAgMCAwLTggMHYxMGEyIDIgMCAwIDAgMiAyaDRhMiAyIDAgMCAwIDItMloiIH1dCiAgICBdOwogICAgdmFyIEZpc2hPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMi40N3YuMDNtMC0uNXYuNDdtLS40NzUgNS4wNTZBNi43NDQgNi43NDQgMCAwIDEgMTUgMThjLTMuNTYgMC03LjU2LTIuNTMtOC41LTYgLjM0OC0xLjI4IDEuMTE0LTIuNDMzIDIuMTIxLTMuMzhtMy40NDQtMi4wODhBOC44MDIgOC44MDIgMCAwIDEgMTUgNmMzLjU2IDAgNi4wNiAyLjU0IDcgNi0uMzA5IDEuMTQtLjc4NiAyLjE3Ny0xLjQxMyAzLjA1OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzbTcuNDgtNC4zNzJBOS43NyA5Ljc3IDAgMCAxIDE2IDYuMDdtMCAxMS44NmE5Ljc3IDkuNzcgMCAwIDEtMS43MjgtMy42MTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMDEgMTcuOTMtLjIzIDEuNEEyIDIgMCAwIDEgMTMuOCAyMUg5LjVhNS45NiA1Ljk2IDAgMCAwIDEuNDktMy45OE04LjUzIDNoNS4yN2EyIDIgMCAwIDEgMS45OCAxLjY3bC4yMyAxLjRNMiAybDIwIDIwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaXNoU3ltYm9sID0gW1sicGF0aCIsIHsgZDogIk0yIDE2czktMTUgMjAtNEMxMSAyMyAyIDggMiA4IiB9XV07CiAgICB2YXIgRmlzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNSAxMmMuOTQtMy40NiA0Ljk0LTYgOC41LTYgMy41NiAwIDYuMDYgMi41NCA3IDYtLjk0IDMuNDctMy40NCA2LTcgNnMtNy41Ni0yLjUzLTguNS02WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMnYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNy45M2E5Ljc3IDkuNzcgMCAwIDEgMC0xMS44NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQ2IDcuMjZDMTAuMiA1Ljg4IDkuMTcgNC4yNCA4IDNoNS44YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4IiB9XQogICAgXTsKICAgIHZhciBGaXNoaW5nSG9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MTQgOC41ODYgMjIgNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBGbGFnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3IiB9XQogICAgXTsKICAgIHZhciBGbGFnVHJpYW5nbGVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWMi44YS44LjggMCAwIDAtMS4xNy0uNzFMNS40NSA3Ljc4YS44LjggMCAwIDAgMCAxLjQ0TDE4IDE1LjUiIH1dCiAgICBdOwogICAgdmFyIEZsYWdUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMlYyLjhhLjguOCAwIDAgMSAxLjE3LS43MWwxMS4zOCA1LjY5YS44LjggMCAwIDEgMCAxLjQ0TDYgMTUuNSIgfV0KICAgIF07CiAgICB2YXIgRmxhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJWNGExIDEgMCAwIDEgLjQtLjhBNiA2IDAgMCAxIDggMmMzIDAgNSAyIDcuMzMzIDJxMiAwIDMuMDY3LS44QTEgMSAwIDAgMSAyMCA0djEwYTEgMSAwIDAgMS0uNC44QTYgNiAwIDAgMSAxNiAxNmMtMyAwLTUtMi04LTJhNiA2IDAgMCAwLTQgMS41MjgiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYW1lS2luZGxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAyYzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDE3IDEwYTUgNSAwIDEgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkM4IDQuNSAxMSAyIDEyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjIgMTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE4IDE0IDQiIH1dCiAgICBdOwogICAgdmFyIEZsYW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3ExIDQgNCA2LjV0MyA1LjVhMSAxIDAgMCAxLTE0IDAgNSA1IDAgMCAxIDEtMyAxIDEgMCAwIDAgNSAwYzAtMi0xLjUtMy0xLjUtNXEwLTIgMi41LTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYXNobGlnaHRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS42NTIgNkgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3YxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYgMTZ2NGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LThhNCA0IDAgMCAwLS44LTIuNGwtLjYtLjhBMyAzIDAgMCAxIDYgN1Y2IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NDkgMkgxN2ExIDEgMCAwIDEgMSAxdjRhMyAzIDAgMCAxLS42IDEuOGwtLjYuOGE0IDQgMCAwIDAtLjU1IDEuMDA3IiB9XQogICAgXTsKICAgIHZhciBGbGFzaGxpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44QTQgNCAwIDAgMCAxNiAxMnY4YTIgMiAwIDAgMS0yIDJIMTBhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjNhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aDEyIiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWxPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2Ni4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjIyNy05LjU2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjQ1MyAxNUgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMmg3IiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAydjZhMiAyIDAgMCAwIC4yNDUuOTZsNS41MSAxMC4wOEEyIDIgMCAwIDEgMTggMjJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjUxLTEwLjA4QTIgMiAwIDAgMCAxMCA4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVoMTEuMDk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsYXNrUm91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjYuMjkyYTcgNyAwIDEgMCA0IDBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE1aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgNyA1IDUtNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgNy01IDUgNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDVhMiAyIDAgMCAwLTIgMnYxNGMwIDEuMS45IDIgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgRmxpcFZlcnRpY2FsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMtNSA1LTUtNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS01LTUtNSA1aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XQogICAgXTsKICAgIHZhciBGbGlwVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XQogICAgXTsKICAgIHZhciBGbG93ZXIyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgNWEzIDMgMCAxIDEgMyAzbS0zLTNhMyAzIDAgMSAwLTMgM20zLTN2MU05IDhhMyAzIDAgMSAwIDMgM005IDhoMW01IDBhMyAzIDAgMSAxLTMgM20zLTNoLTFtLTIgM3YtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJjNC4yIDAgNy0xLjY2NyA3LTUtNC4yIDAtNyAxLjY2Ny03IDVaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyYy00LjIgMC03LTEuNjY3LTctNSA0LjIgMCA3IDEuNjY3IDcgNVoiIH1dCiAgICBdOwogICAgdmFyIEZsb3dlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTYuNUE0LjUgNC41IDAgMSAxIDcuNSAxMiA0LjUgNC41IDAgMSAxIDEyIDcuNWE0LjUgNC41IDAgMSAxIDQuNSA0LjUgNC41IDQuNSAwIDEgMS00LjUgNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDcuNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjUgMTJIMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTYuNVYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggMS44OCAxLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjEyIDkuODggMTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDEuODgtMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAxNC4xMiAxNiAxNiIgfV0KICAgIF07CiAgICB2YXIgRm9jdXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0KICAgIF07CiAgICB2YXIgRm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTUgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNS0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckFyY2hpdmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkgMTkuOEEyIDIgMCAwIDAgMjIgMThWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyaDUuMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxN3YtMiIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyQ2xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyLjJsMS42IDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckNsb3NlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNSA4IDEzbDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45OGEyIDIgMCAwIDEgMS42OS45bC42NiAxLjJBMiAyIDAgMCAwIDEyIDZoOGEyIDIgMCAwIDEgMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTMtMyAzLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyR2l0MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5YTUgNSAwIDAgMS01LTV2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckdpdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjYzOCAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjMuNDE3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjYyIDE4LjhBMi4yNSAyLjI1IDAgMSAxIDE4IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZvbGRlcklucHV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyS2FuYmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMHY2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJLZXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEuMzYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNGgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckxvY2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICIxNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjIuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN3YtMmEyIDIgMCAxIDAtNCAwdjIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVyT3BlbkRvdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS40NS0yLjlBMiAyIDAgMCAxIDkuMjQgMTBIMjBhMiAyIDAgMCAxIDEuOTQgMi41bC0xLjU1IDZhMiAyIDAgMCAxLTEuOTQgMS41SDRhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy45M2EyIDIgMCAwIDEgMS42Ni45bC44MiAxLjJhMiAyIDAgMCAwIDEuNjYuOUgxOGEyIDIgMCAwIDEgMiAydjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTUiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS41LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTQgNmEyIDIgMCAwIDEtMS45NSAxLjVINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMThhMiAyIDAgMCAxIDIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJPdXRwdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDcuNVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTEuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTAtMyAzIDMgMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxMS41VjVhMiAyIDAgMCAxIDItMmgzLjljLjcgMCAxLjMuMyAxLjcuOWwuOCAxLjJjLjQuNiAxIC45IDEuNy45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtOS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM3OCAxMy42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVyUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVyUm9vdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY1IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTZWFyY2gyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMyAxNC4zIDE1IDE2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC43IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NC4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTEuOS0xLjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyU3ltbGluayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS4zNVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmg3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyU3luYyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyVHJlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYTEgMSAwIDAgMCAxLTFWNmExIDEgMCAwIDAtMS0xaC0yLjVhMSAxIDAgMCAxLS44LS40bC0uOS0xLjJBMSAxIDAgMCAwIDE1IDNoLTJhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMWgtMi45YTEgMSAwIDAgMS0uODgtLjU1bC0uNDItLjg1YTEgMSAwIDAgMC0uOTItLjZIMTNhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWEyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjEzYTIgMiAwIDAgMCAyIDJoMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzIDMtMyAzIDMiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlclggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEwLjUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTAuNS01IDUiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDVhMiAyIDAgMCAxIDIgMnY3YTIgMiAwIDAgMS0yIDJIOWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgyLjVhMS41IDEuNSAwIDAgMSAxLjIuNmwuNi44YTEuNSAxLjUgMCAwIDAgMS4yLjZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC4yNjhhMiAyIDAgMCAwLTEgMS43MzhWMTlhMiAyIDAgMCAwIDIgMmgxMWEyIDIgMCAwIDAgMS43MzItMSIgfV0KICAgIF07CiAgICB2YXIgRm9ya2xpZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg1YTIgMiAwIDAgMC0yIDJ2NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5aDNtNS0xN3YxN2g2TTYgMTJWN2MwLTEuMS45LTIgMi0yaDNsNSA1IiB9XQogICAgXTsKICAgIHZhciBGb290cHJpbnRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNnYtMi4zOEM0IDExLjUgMi45NyAxMC41IDMgOGMuMDMtMi43MiAxLjQ5LTYgNC41LTZDOS4zNyAyIDEwIDMuOCAxMCA1LjVjMCAzLjExLTIgNS42Ni0yIDguNjhWMTZhMiAyIDAgMSAxLTQgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjB2LTIuMzhjMC0yLjEyIDEuMDMtMy4xMiAxLTUuNjItLjAzLTIuNzItMS40OS02LTQuNS02QzE0LjYzIDYgMTQgNy44IDE0IDkuNWMwIDMuMTEgMiA1LjY2IDIgOC42OFYyMGEyIDIgMCAxIDAgNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNoNCIgfV0KICAgIF07CiAgICB2YXIgRm9ybSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTRoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJoMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjE4Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgRm9yd2FyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYtMmE0IDQgMCAwIDEgNC00aDEyIiB9XQogICAgXTsKICAgIHZhciBGcmFtZSA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIyIiwgeTE6ICI2IiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIyIiwgeTE6ICIxOCIsIHkyOiAiMTgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjE4IiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgICB2YXIgRnJhbWVyID0gW1sicGF0aCIsIHsgZDogIk01IDE2VjloMTRWMkg1bDE0IDE0aC03bS03IDAgNyA3di03bS03IDBoNyIgfV1dOwogICAgdmFyIEZyb3duID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZzLTEuNS0yLTQtMi00IDItNCAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBGdWVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNoMmEyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAwIDQgMHYtNi45OThhMiAyIDAgMCAwLS41OS0xLjQyTDE4IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxMSIgfV0KICAgIF07CiAgICB2YXIgRnVsbHNjcmVlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjgiLCB4OiAiNyIsIHk6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGdW5uZWxQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMzU0IDNIM2ExIDEgMCAwIDAtLjc0MiAxLjY3bDcuMjI1IDcuOTg5QTIgMiAwIDAgMSAxMCAxNHY2YTEgMSAwIDAgMCAuNTUzLjg5NWwyIDFBMSAxIDAgMCAwIDE0IDIxdi03YTIgMiAwIDAgMSAuNTE3LTEuMzQxbDEuMjE4LTEuMzQ4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjYiIH1dCiAgICBdOwogICAgdmFyIEZ1bm5lbFggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41MzEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0djZhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFsLjQyNy0uNDczIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjUgMy41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDMuNS01IDUiIH1dCiAgICBdOwogICAgdmFyIEZ1bm5lbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwYTEgMSAwIDAgMCAuNTUzLjg5NWwyIDFBMSAxIDAgMCAwIDE0IDIxdi03YTIgMiAwIDAgMSAuNTE3LTEuMzQxTDIxLjc0IDQuNjdBMSAxIDAgMCAwIDIxIDNIM2ExIDEgMCAwIDAtLjc0MiAxLjY3bDcuMjI1IDcuOTg5QTIgMiAwIDAgMSAxMCAxNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdhbGxlcnlIb3Jpem9udGFsRW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNXYxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjE4IiwgeDogIjEwIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdhbGxlcnlIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzdjE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiNiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDN2MTgiIH1dCiAgICBdOwogICAgdmFyIEdhbGxlcnlUaHVtYm5haWxzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxNCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxaDEiIH1dCiAgICBdOwogICAgdmFyIEdhbGxlcnlWZXJ0aWNhbEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDZoMTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHYWxsZXJ5VmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoMTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMmgxOCIgfV0KICAgIF07CiAgICB2YXIgR2FtZXBhZDIgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxMCIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjkiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjMyIDVINi42OGE0IDQgMCAwIDAtMy45NzggMy41OWMtLjAwNi4wNTItLjAxLjEwMS0uMDE3LjE1MkMyLjYwNCA5LjQxNiAyIDE0LjQ1NiAyIDE2YTMgMyAwIDAgMCAzIDNjMSAwIDEuNS0uNSAyLTFsMS40MTQtMS40MTRBMiAyIDAgMCAxIDkuODI4IDE2aDQuMzQ0YTIgMiAwIDAgMSAxLjQxNC41ODZMMTcgMThjLjUuNSAxIDEgMiAxYTMgMyAwIDAgMCAzLTNjMC0xLjU0NS0uNjA0LTYuNTg0LS42ODUtNy4yNTgtLjAwNy0uMDUtLjAxMS0uMS0uMDE3LS4xNTFBNCA0IDAgMCAwIDE3LjMyIDV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBHYW1lcGFkRGlyZWN0aW9uYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4xNDYgMTUuODU0YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA4IDBsMS41NiAxLjU2QTIgMiAwIDAgMSAxNSAxOC44MjhWMjFhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xdi0yLjE3MmEyIDIgMCAwIDEgLjU4Ni0xLjQxNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguODI4IDE1YTIgMiAwIDAgMS0xLjQxNC0uNTg2bC0xLjU2LTEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMC0xLjcwOGwxLjU2LTEuNTZBMiAyIDAgMCAxIDE4LjgyOCA5SDIxYTEgMSAwIDAgMSAxIDF2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjU4NiAxNC40MTRBMiAyIDAgMCAxIDUuMTcyIDE1SDNhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xaDIuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZsMS41NiAxLjU2YTEuMjA3IDEuMjA3IDAgMCAxIDAgMS43MDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgM2ExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYyLjE3MmEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtMS41NiAxLjU2YTEuMjA3IDEuMjA3IDAgMCAxLTEuNzA4IDBsLTEuNTYtMS41NkEyIDIgMCAwIDEgOSA1LjE3MnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdhbWVwYWQgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxMCIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjEwIiwgeTI6ICIxNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjEzIiwgeTI6ICIxMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOCIsIHgyOiAiMTguMDEiLCB5MTogIjExIiwgeTI6ICIxMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zNCAxOWExMCAxMCAwIDEgMSAxNy4zMiAwIiB9XQogICAgXTsKICAgIHZhciBHYXZlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEzLTguMzgxIDguMzhhMSAxIDAgMCAxLTMuMDAxLTNsOC4zODQtOC4zODEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMTAuNS04LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA4IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgNy41IDggOCIgfV0KICAgIF07CiAgICB2YXIgR2VtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAzIDggOWw0IDEzIDQtMTMtMi41LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMS42LjhsMyA0YTIgMiAwIDAgMSAuMDEzIDIuMzgybC03Ljk5IDEwLjk4NmEyIDIgMCAwIDEtMy4yNDcgMGwtNy45OS0xMC45ODZBMiAyIDAgMCAxIDIuNCA3LjhsMi45OTgtMy45OTdBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5aDIwIiB9XQogICAgXTsKICAgIHZhciBHZW9yZ2lhbkxhcmkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS41IDIxYTcuNSA3LjUgMCAxIDEgNy4zNS05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyVjMiIH1dCiAgICBdOwogICAgdmFyIEdob3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhOCA4IDAgMCAwLTggOHYxMmwzLTMgMi41IDIuNUwxMiAxOWwyLjUgMi41TDE3IDE5bDMgM1YxMGE4IDggMCAwIDAtOC04eiIgfV0KICAgIF07CiAgICB2YXIgR2l0QnJhbmNoTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDlWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOGgtNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBHaXRCcmFuY2hQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDlhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmE5IDkgMCAwIDAtOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dCiAgICBdOwogICAgdmFyIEdpZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiOCIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJ2N2EyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgOGEyLjUgMi41IDAgMCAxIDAtNUE0LjggOCAwIDAgMSAxMiA4YTQuOCA4IDAgMCAxIDQuNS01IDIuNSAyLjUgMCAwIDEgMCA1IiB9XQogICAgXTsKICAgIHZhciBHaXRCcmFuY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDlWMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBHaXRDb21taXRIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICI5IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIEdpdENvbW1pdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NiIgfV0KICAgIF07CiAgICB2YXIgR2l0Q29tcGFyZUFycm93cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThIN2EyIDIgMCAwIDEtMi0yVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBHaXRDb21wYXJlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE4SDhhMiAyIDAgMCAxLTItMlY5IiB9XQogICAgXTsKICAgIHZhciBHaXRGb3JrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOXYyYzAgLjYtLjQgMS0xIDFIN2MtLjYgMC0xLS40LTEtMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjMiIH1dCiAgICBdOwogICAgdmFyIEdpdEdyYXBoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkiIH1dCiAgICBdOwogICAgdmFyIEdpdE1lcmdlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjlhOSA5IDAgMCAwIDkgOSIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RBcnJvdyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOXYxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aDVhMiAyIDAgMCAxIDIgMnY3IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdENsb3NlZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOXYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA5LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMS41VjE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3cgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNiIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RDcmVhdGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdERyYWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTF2LTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYiLCB5MTogIjkiLCB5MjogIjIxIiB9XQogICAgXTsKICAgIHZhciBHaXRodWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThjLTQuNTEgMi01LTItNy0yIiB9XQogICAgXTsKICAgIHZhciBHaXRsYWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMiAxMy4yOS0zLjMzLTEwYS40Mi40MiAwIDAgMC0uMTQtLjE4LjM4LjM4IDAgMCAwLS4yMi0uMTEuMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOGwtMi4yNiA2LjY3SDguMzJMNi4xIDMuMjZhLjQyLjQyIDAgMCAwLS4xLS4xOC4zOC4zOCAwIDAgMC0uMjYtLjA4LjM5LjM5IDAgMCAwLS4yMy4wNy40Mi40MiAwIDAgMC0uMTQuMThMMiAxMy4yOWEuNzQuNzQgMCAwIDAgLjI3LjgzTDEyIDIxbDkuNjktNi44OGEuNzEuNzEgMCAwIDAgLjMxLS44M1oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdsYXNzV2F0ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjExNiA0LjEwNEExIDEgMCAwIDEgNi4xMSAzaDExLjc4YTEgMSAwIDAgMSAuOTk0IDEuMTA1TDE3LjE5IDIwLjIxQTIgMiAwIDAgMSAxNS4yIDIySDguOGEyIDIgMCAwIDEtMi0xLjc5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYTUgNSAwIDAgMSA2IDAgNSA1IDAgMCAwIDYgMCIgfV0KICAgIF07CiAgICB2YXIgR2xhc3NlcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTUiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxNSIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgMTMgNSA3Yy43LTEuMyAxLjQtMiAzLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNSAxMyAxOSA3Yy0uNy0xLjMtMS41LTItMy0yIiB9XQogICAgXTsKICAgIHZhciBHbG9iZUxvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42ODYgMTVBMTQuNSAxNC41IDAgMCAxIDEyIDIyYTE0LjUgMTQuNSAwIDAgMSAwLTIwIDEwIDEwIDAgMSAwIDkuNTQyIDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgR2xvYmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTE0LjUgMTQuNSAwIDAgMCAwIDIwIDE0LjUgMTQuNSAwIDAgMCAwLTIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dCiAgICBdOwogICAgdmFyIEdsb2JlWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDMgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjBBMTAgMTAgMCAxIDEgMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgNC0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTUgNSIgfV0KICAgIF07CiAgICB2YXIgR29hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjJsOCA0LTggNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMDAyIDkuOTk3YTUgNSAwIDEgMCA4LjkgMi4wMiIgfV0KICAgIF07CiAgICB2YXIgR3B1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkgyLjI2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTd2M2ExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMXYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgR3JhZHVhdGlvbkNhcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjQyIDEwLjkyMmExIDEgMCAwIDAtLjAxOS0xLjgzOEwxMi44MyA1LjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDkuMDhhMSAxIDAgMCAwIDAgMS44MzJsOC41NyAzLjkwOGEyIDIgMCAwIDAgMS42NiAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTIuNVYxNmE2IDMgMCAwIDAgMTIgMHYtMy41IiB9XQogICAgXTsKICAgIHZhciBHcmFwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVWMmwtNS44OSA1Ljg5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYuNiIsIGN5OiAiMTUuODkiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguMTEiLCBjeTogIjcuNCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuMzUiLCBjeTogIjExLjY1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy45MSIsIGN5OiAiNS44NSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguMTUiLCBjeTogIjEwLjA5IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjU2IiwgY3k6ICIxMy4yIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC44IiwgY3k6ICIxNy40NCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgR3JpZDJ4MkNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBHcmlkMngyUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMnYtNiIgfV0KICAgIF07CiAgICB2YXIgR3JpZDJ4MlggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAzdjE3YTEgMSAwIDAgMS0xIDFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTEgMUgzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMSA1LTUiIH1dCiAgICBdOwogICAgdmFyIEdyaWQyeDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdyaWQzeDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHcmlkM3gzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIEdyaXBIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBHcmlwVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEdyaXAgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3JvdXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWMwLTEuMS45LTIgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYzEuMSAwIDIgLjkgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmMwIDEuMS0uOSAyLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVjLTEuMSAwLTItLjktMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjciLCB5OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMCIsIHk6ICIxMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3VpdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMy4xNDQgMjEuMTQ0QTcuMjc0IDQuMzY1IDQ1IDAgMCAyLjg1NiAxMC44NTZhNy4yNzQgNC4zNjUgNDUgMCAwIDEwLjI4OCAxMC4yODgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjU2NSAxMC40MzUgMTguNiA4LjRhMi41MDEgMi41MDEgMCAxIDAgMS42NS00LjY1IDIuNSAyLjUgMCAxIDAtNC42NiAxLjY2bC0yLjAyNCAyLjAyNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTYuNS0xLTEiIH1dCiAgICBdOwogICAgdmFyIEhhbWJ1cmdlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDRhMiAyIDAgMSAxIDAtNGgxNmEyIDIgMCAxIDEgMCA0aC00LjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTJhMiAyIDAgMCAxLTItMiA5IDcgMCAwIDEgMTggMCAyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZhMiAyIDAgMCAwLTIgMiAzIDMgMCAwIDAgMyAzaDEyYTMgMyAwIDAgMCAzLTMgMiAyIDAgMCAwLTItMnEwIDAgMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTIgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0KICAgIF07CiAgICB2YXIgSGFtbWVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTItOS4zNzMgOS4zNzNhMSAxIDAgMCAxLTMuMDAxLTNMMTIgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNSA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNSAxMS41LTEuOTE0LTEuOTE0QTIgMiAwIDAgMSAxOSA4LjE3MnYtLjM0NGEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMS42NTctMS42NTdBNiA2IDAgMCAwIDEyLjUxNiAzSDlsMS4yNDMgMS4yNDNBNiA2IDAgMCAxIDEyIDguNDg1VjEwbDIgMmgxLjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2TDE4LjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZENvaW5zID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNiA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjkiLCByOiAiMi45IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBIYW5kRmlzdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNSAxNy4wMTJhMyAzIDAgMCAwLTMtM2wtLjMxMS0uMDAyYS43Mi43MiAwIDAgMS0uNTA1LTEuMjI5bDEuMTk1LTEuMTk1QTIgMiAwIDAgMSAxMC44MjggMTFIMTJhMiAyIDAgMCAwIDAtNEg5LjI0M2EzIDMgMCAwIDAtMi4xMjIuODc5bC0yLjcwNyAyLjcwN0E0LjgzIDQuODMgMCAwIDAgMyAxNGE4IDggMCAwIDAgOCA4aDJhOCA4IDAgMCAwIDgtOFY3YTIgMiAwIDEgMC00IDB2MmEyIDIgMCAxIDAgNCAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjg4OCA5LjY2MkEyIDIgMCAwIDAgMTcgOFY1QTIgMiAwIDEgMCAxMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNUEyIDIgMCAxIDAgNSA1VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgN1Y0QTIgMiAwIDEgMSAxMyA0VjcuMjY4IiB9XQogICAgXTsKICAgIHZhciBIYW5kR3JhYiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjVWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjhhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS45VjlhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTFhMiAyIDAgMSAxIDQgMHYzYTggOCAwIDAgMS04IDhoLTRhOCA4IDAgMCAxLTgtOCAyIDIgMCAxIDEgNCAwIiB9XQogICAgXTsKICAgIHZhciBIYW5kSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgyYTIgMiAwIDAgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NSAxMy4zOSA1LjA1LTQuNjk0QzIwLjE5NiA4IDIxIDYuODUgMjEgNS43NWEyLjc1IDIuNzUgMCAwIDAtNC43OTctMS44MzcuMjc2LjI3NiAwIDAgMS0uNDA2IDBBMi43NSAyLjc1IDAgMCAwIDExIDUuNzVjMCAxLjIuODAyIDIuMjQ4IDEuNSAyLjk0NkwxNiAxMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE1IDYgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTcgMjAgMS42LTEuNGMuMy0uNC44LS42IDEuNC0uNmg0YzEuMSAwIDIuMS0uNCAyLjgtMS4ybDQuNi00LjRhMSAxIDAgMCAwLTIuNzUtMi45MSIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRIZWxwaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAxOCAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTMgNiA2IiB9XQogICAgXTsKICAgIHZhciBIYW5kTWV0YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMi41VjEwYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFWOWEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY1YTIgMiAwIDEgMC00IDB2OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03IDE1LTEuNzYtMS43NmEyIDIgMCAwIDAtMi44MyAyLjgybDMuNiAzLjZDNy41IDIxLjE0IDkuMiAyMiAxMiAyMmgyYTggOCAwIDAgMCA4LThWN2EyIDIgMCAxIDAtNCAwdjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRQbGF0dGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM1YyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQgMTcuNCAzLjItMi44YTIgMiAwIDEgMSAyLjggMi45bC0zLjYgMy4zYy0uNy44LTEuNyAxLjItMi44IDEuMmgtNGMtMS4xIDAtMi4xLS40LTIuOC0xLjJsLTEuMzAyLTEuNDY0QTEgMSAwIDAgMCA2LjE1MSAxOUg1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTJhMiAyIDAgMCAxIDAgNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBhNyA3IDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNHY2YTEgMSAwIDAgMS0xIDFIMiIgfV0KICAgIF07CiAgICB2YXIgSGFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExVjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY2YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDhhMiAyIDAgMSAxIDQgMHY2YTggOCAwIDAgMS04IDhoLTJjLTIuOCAwLTQuNS0uODYtNS45OS0yLjM0bC0zLjYtMy42YTIgMiAwIDAgMSAyLjgzLTIuODJMNyAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZGJhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMDQ4IDE4LjU2NkEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45NTItMi40MzRsLTItOUEyIDIgMCAwIDAgMTggOEg2YTIgMiAwIDAgMC0xLjk1MiAxLjU2NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMVY2YTQgNCAwIDAgMSA4IDB2NSIgfV0KICAgIF07CiAgICB2YXIgSGFuZHNoYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTcgMiAyYTEgMSAwIDEgMCAzLTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTQgMTQgMi41IDIuNWExIDEgMCAxIDAgMy0zbC0zLjg4LTMuODhhMyAzIDAgMCAwLTQuMjQgMGwtLjg4Ljg4YTEgMSAwIDEgMS0zLTNsMi44MS0yLjgxYTUuNzkgNS43OSAwIDAgMSA3LjA2LS44N2wuNDcuMjhhMiAyIDAgMCAwIDEuNDIuMjVMMjEgNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzIDEgMTFoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzIDIgMTRsNi41IDYuNWExIDEgMCAxIDAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNGg4IiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVEb3dubG9hZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVVcGxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgSGFyZERyaXZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMjEyIDExLjU3N2EyIDIgMCAwIDAtLjIxMi44OTZWMThhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01LjUyN2EyIDIgMCAwIDAtLjIxMi0uODk2TDE4LjU1IDUuMTFBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45NDYgMTIuMDEzSDIuMDU0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBIYXJkSGF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTBWNWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZhNiA2IDAgMCAxIDYgNnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTV2LTNhNiA2IDAgMCAxIDYtNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgSGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjgiLCB5MTogIjMiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIxNCIsIHkxOiAiMyIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEhhdEdsYXNzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGEyIDIgMCAwIDAtNCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgSGF6ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMiA2LjIgMS40IDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy40IDcuNiAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjFIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2E0IDQgMCAwIDAtOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDVWMi41IiB9XQogICAgXTsKICAgIHZhciBIZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVWOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNC41YS41LjUgMCAwIDAgLjUuNWgxYTIuNSAyLjUgMCAwIDAgMi41LTIuNXYtMUEyLjUgMi41IDAgMCAwIDE1LjUgOWgtMWEuNS41IDAgMCAwLS41LjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVWOSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSGRtaVBvcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIyIDlhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMSAxaDFsMiAyaDEybDItMmgxYTEgMSAwIDAgMCAxLTFaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTJoOSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTIgMy0ydjgiIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC00YzAtNCA0LTMgNC02IDAtMS41LTItMi41LTQtMSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMC41YzEuNy0xIDMuNSAwIDMuNSAxLjVhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy41YzIgMS41IDQgLjMgNC0xLjVhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTN2LTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy43Yy40LjIuOC4zIDEuMy4zIDEuNSAwIDIuNy0xLjEgMi43LTIuNVMxOS44IDEzIDE4LjMgMTNIMTciIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmc2ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE2IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBjLTIgMi0zIDMuNS0zIDYiIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY0IiB9XQogICAgXTsKICAgIHZhciBIZWFkcGhvbmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNGgtMS4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xMjggMy40N0E5IDkgMCAwIDEgMjEgMTJ2My4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjQxNCAyMC40MTRBMiAyIDAgMCAxIDE5IDIxaC0xYTIgMiAwIDAgMS0yLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNGgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtN2E5IDkgMCAwIDEgMi42MzYtNi4zNjQiIH1dCiAgICBdOwogICAgdmFyIEhlYWRwaG9uZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAxOCAwdjdhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVhcnRDcmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSA1LjgyNGMtLjcwMi43OTItMS4xNSAxLjQ5Ni0xLjQxNSAyLjE2NmwyLjE1MyAyLjE1NmEuNS41IDAgMCAxIDAgLjcwN2wtMi4yOTMgMi4yOTNhLjUuNSAwIDAgMCAwIC43MDdMMTIgMTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuNTA4IDIwLjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ny42LjYgMCAwIDAgLjgxOC4wMDFBNS41IDUuNSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVhZHNldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTFoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTVabTAgMGE5IDkgMCAxIDEgMTggMG0wIDB2NWEyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnYyYTQgNCAwIDAgMS00IDRoLTUiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0SGFuZHNoYWtlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXJ0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0T2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSA0Ljg5M2E1LjUgNS41IDAgMCAxIDEuMDkxLjkzMS41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDEuODcyLTEuMDAyIDMuMzU2LTIuMTg3IDQuNjU1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2Ljk2NyAxNi45NjctMy40NTkgMy4zNDZhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgMi43NDctNC43NjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBIZWFydFB1bHNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjIyIDEzSDkuNWwuNS0xIDIgNC41IDItNyAxLjUgMy41aDUuMjciIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0UGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjQ3OSAxOS4zNzQtLjk3MS45MzlhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjE5IDEuNDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMnY2IiB9XQogICAgXTsKICAgIHZhciBIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhjMi0zLTItMyAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSA4YzItMy0yLTMgMC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjB2MiIgfV0KICAgIF07CiAgICB2YXIgSGVsaWNvcHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y4YTIgMiAwIDAgMCAyIDJoNS44NjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzSDIiIH1dCiAgICBdOwogICAgdmFyIEhleGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhpZ2hsaWdodGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMS02IDZ2M2g5bDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxMi00LjYgNC42YTIgMiAwIDAgMS0yLjggMGwtNS4yLTUuMmEyIDIgMCAwIDEgMC0yLjhMMTQgNCIgfV0KICAgIF07CiAgICB2YXIgSGlzdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NWw0IDIiIH1dCiAgICBdOwogICAgdmFyIEhvcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAuODIgMTYuMTJjMS42OS42IDMuOTEuNzkgNS4xOC44NS41NS4wMyAxLS40Mi45Ny0uOTctLjA2LTEuMjctLjI2LTMuNS0uODUtNS4xOCIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNSA2LjVjMS42NCAwIDUtLjM4IDYuNzEtMS4wNy41Mi0uMi41NS0uODIuMTItMS4xN0ExMCAxMCAwIDAgMCA0LjI2IDE4LjMzYy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg4Ljg4IDAgMCAwIC43My0uNzRjLjMtMi4xNC0uMTUtMy41LS42MS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTUuNjIgMTYuOTVjLjIuODUuNjIgMi43Ni41IDQuMjhhLjc3Ljc3IDAgMCAxLS45LjcgMTYuNjQgMTYuNjQgMCAwIDEtNC4wOC0xLjM2IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2LjEzIDIxLjA1YzEuNjUuNjMgMy42OC44NCA0Ljg3LjkxYS45LjkgMCAwIDAgLjk2LS45NiAxNy42OCAxNy42OCAwIDAgMC0uOS00Ljg3IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2Ljk0IDE1LjYyYy44Ni4yIDIuNzcuNjIgNC4yOS41YS43Ny43NyAwIDAgMCAuNy0uOSAxNi42NCAxNi42NCAwIDAgMC0xLjM2LTQuMDgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuOTkgNS41MmEyMC44MiAyMC44MiAwIDAgMSAzLjE1IDQuNS44LjggMCAwIDEtLjY4IDEuMTNjLTIuMzMuMi01LjMtLjMyLTguMjctMS41NyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MyA0LjkzIDMgM2EuNy43IDAgMCAxIDAtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjU4IDEyLjE4YzEuMjQgMi45OCAxLjc3IDUuOTUgMS41NyA4LjI4YS44LjggMCAwIDEtMS4xMy42OCAyMC44MiAyMC44MiAwIDAgMS00LjUtMy4xNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSG9wT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuODIgMTYuMTJjMS42OS42IDMuOTEuNzkgNS4xOC44NS4yOC4wMS41My0uMDkuNy0uMjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMS4xNCAyMC41N2MuNTIuMjQgMi40NCAxLjEyIDQuMDggMS4zNy40Ni4wNi44Ni0uMjUuOS0uNzEuMTItMS41Mi0uMy0zLjQzLS41LTQuMjgiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjEzIDIxLjA1YzEuNjUuNjMgMy42OC44NCA0Ljg3LjkxYS45LjkgMCAwIDAgLjctLjI2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuOTkgNS41MmEyMC44MyAyMC44MyAwIDAgMSAzLjE1IDQuNS44LjggMCAwIDEtLjY4IDEuMTNjLTEuMTcuMS0yLjUuMDItMy45LS4yNSIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNTcgMTEuMTRjLjI0LjUyIDEuMTIgMi40NCAxLjM3IDQuMDguMDQuMy0uMDguNTktLjMxLjc1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuOTMgNC45M2ExMCAxMCAwIDAgMC0uNjcgMTMuNGMuMzUuNDMuOTYuNCAxLjE3LS4xMi42OS0xLjcxIDEuMDctNS4wNyAxLjA3LTYuNzEgMS4zNC40NSAzLjEuOSA0Ljg4LjYyYS44NS44NSAwIDAgMCAuNDgtLjI0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNS41MiAxNy45OWMxLjA1Ljk1IDIuOTEgMi40MiA0LjUgMy4xNWEuOC44IDAgMCAwIDEuMTMtLjY4Yy4yLTIuMzQtLjMzLTUuMy0xLjU3LTguMjgiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzUgMi42OGExMCAxMCAwIDAgMSA5Ljk4IDEuNThjLjQzLjM1LjQuOTYtLjEyIDEuMTctMS41LjYtNC4zLjk4LTYuMDcgMS4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIEhvc3BpdGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaDJhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2IiB9XQogICAgXTsKICAgIHZhciBIb3RlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi02LjU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNS40M1YyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNmE1IDUgMCAwIDAtNiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIyIiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBIb3VyZ2xhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNC4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMMTIgMTJsLTQuNDE0IDQuNDE0QTIgMiAwIDAgMCA3IDE3LjgyOFYyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIiIH1dCiAgICBdOwogICAgdmFyIEhvdXNlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSG91c2VQbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJoLTRhMiAyIDAgMCAxLTItMnYtMmExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMmgtNWEyIDIgMCAwIDEtMi0ydi0yIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBIb3VzZVBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4zNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MS0xLjUzbDctNmEyIDIgMCAwIDEgMi41OCAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2Mi4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44IDEyLjRBMSAxIDAgMCAwIDE0IDEyaC00YTEgMSAwIDAgMC0xIDF2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dCiAgICBdOwogICAgdmFyIEhvdXNlV2lmaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxMy44NjZhNCA0IDAgMCAxIDUgLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTAuNzU0YTggOCAwIDAgMSAxMCAwIiB9XQogICAgXTsKICAgIHZhciBIb3VzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi04YTEgMSAwIDAgMC0xLTFoLTRhMSAxIDAgMCAwLTEgMXY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTBhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEljZUNyZWFtQm93bCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTIgMTdjNSAwIDgtMi42OSA4LTZINGMwIDMuMzEgMyA2IDggNm0tNCA0aDhtLTQtM3YzTTUuMTQgMTFhMy41IDMuNSAwIDEgMSA2LjcxIDAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjUgNi41YTMuNSAzLjUgMCAxIDAtNyAwIiB9XQogICAgXTsKICAgIHZhciBJY2VDcmVhbUNvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDExIDQuMDggMTAuMzVhMSAxIDAgMCAwIDEuODQgMEwxNyAxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3QTUgNSAwIDAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN2EyIDIgMCAwIDEgMCA0SDdhMiAyIDAgMCAxIDAtNCIgfV0KICAgIF07CiAgICB2YXIgSWRDYXJkTGFueWFyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgOGgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAyLTEgMmgzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODk5IDIyQTUgNSAwIDAgMCA3LjEgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyIDMgNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBJZENhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4xNyAxNWEzIDMgMCAwIDEgNS42NiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTEiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE5IDMgM3YtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDMtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIyIiwgeTE6ICI1IiwgeTI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlT2ZmID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQxIDEwLjQxYTIgMiAwIDEgMS0yLjgzLTIuODMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMuNSIsIHgyOiAiNiIsIHkxOiAiMTMuNSIsIHkyOiAiMjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy41OSAzLjU5QTEuOTkgMS45OSAwIDAgMCAzIDV2MTRhMiAyIDAgMCAwIDIgMmgxNGMuNTUgMCAxLjA1Mi0uMjIgMS40MS0uNTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWNWEyIDIgMCAwIDAtMi0ySDkiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTIuMTdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMSA1LTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxMGwtMy4xLTMuMWEyIDIgMCAwIDAtMi44MTQuMDE0TDYgMjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTkuNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlMiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXBzY2FsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxaDJhMiAyIDAgMCAwIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMSA0LjE0NC00LjE0NGExLjIxIDEuMjEgMCAwIDEgMS43MTIgMEwxMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTEiLCB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiNyIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1wb3J0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1SDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC00IiB9XQogICAgXTsKICAgIHZhciBJbmJveCA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgMTIgMTYgMTIgMTQgMTUgMTAgMTUgOCAxMiAyIDEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSW5kaWFuUnVwZWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTMgOC41IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM2gzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNjNi42NjcgMCA2LjY2Ny0xMCAwLTEwIiB9XQogICAgXTsKICAgIHZhciBJbmZpbml0eTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2YzUgMCA3LTggMTItOGE0IDQgMCAwIDEgMCA4Yy01IDAtNy04LTEyLThhNCA0IDAgMSAwIDAgOCIgfV0KICAgIF07CiAgICB2YXIgSW5mbzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgSW5zcGVjdGlvblBhbmVsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIEluc3RhZ3JhbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMjAiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICI1Iiwgcnk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3oiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTcuNSIsIHgyOiAiMTcuNTEiLCB5MTogIjYuNSIsIHkyOiAiNi41IiB9XQogICAgXTsKICAgIHZhciBJdGVyYXRpb25DY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwYTggOCAwIDEgMC04IDhoOCIgfV0KICAgIF07CiAgICB2YXIgSXRhbGljID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjEwIiwgeTE6ICI0IiwgeTI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeDI6ICI1IiwgeTE6ICIyMCIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjkiLCB5MTogIjQiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBJdGVyYXRpb25DdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhOCA4IDAgMSAxIDggOEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjItNC00IDQtNCIgfV0KICAgIF07CiAgICB2YXIgSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5LjVWMjFtMC0xMS41TDYgM202IDYuNUwxOCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMWgxMiIgfV0KICAgIF07CiAgICB2YXIgSm95c3RpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN2EyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBLYXlhayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3YTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDAgMi0yeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45NyAzLjYxYS40NS40NSAwIDAgMC0uNTgtLjU4QzEwLjIgNi42IDYuNiAxMC4yIDMuMDMgMjAuMzlhLjQ1LjQ1IDAgMCAwIC41OC41OEMxMy44IDE3LjQgMTcuNCAxMy44IDIwLjk3IDMuNjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi43MDcgNi43MDcgMTAuNTg2IDEwLjU4NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVhMiAyIDAgMSAwLTIgMmgxYTEgMSAwIDAgMCAxLTF6IiB9XQogICAgXTsKICAgIHZhciBLZXlSb3VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE3LjQxNEEyIDIgMCAwIDAgMiAxOC44MjhWMjFhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWgxYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWguMTcyYTIgMiAwIDAgMCAxLjQxNC0uNTg2bC44MTQtLjgxNGE2LjUgNi41IDAgMSAwLTQtNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBLZXlTcXVhcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40IDIuN2EyLjUgMi41IDAgMCAxIDMuNCAwbDUuNSA1LjVhMi41IDIuNSAwIDAgMSAwIDMuNGwtMy43IDMuN2EyLjUgMi41IDAgMCAxLTMuNCAwTDguNyA5LjhhMi41IDIuNSAwIDAgMSAwLTMuNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS40IDEwLjYtNi44MTQgNi44MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEtleTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDcuNSAyLjMgMi4zYTEgMSAwIDAgMCAxLjQgMGwyLjEtMi4xYTEgMSAwIDAgMCAwLTEuNEwxOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItOS42IDkuNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiMTUuNSIsIHI6ICI1LjUiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkTXVzaWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NCIgfV0KICAgIF07CiAgICB2YXIgS2V5Ym9hcmRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjAgNCBBMiAyIDAgMCAxIDIyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDYgTCAyMiAxNi40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxNiBMIDE2IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA5LjY5IDQgTCAyMCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMEg0YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBMYW1wQ2VpbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MjkgMTUuOTk4YTMgMyAwIDEgMS01LjY1OCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkyIDE0LjYwNkExIDEgMCAwIDEgMjAgMTZINGExIDEgMCAwIDEtLjkyLTEuMzk0bDMtN0ExIDEgMCAwIDEgNyA3aDEwYTEgMSAwIDAgMSAuOTIuNjA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFtcERlc2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4yOTMgMi4yOTNhMSAxIDAgMCAxIDEuNDE0IDBsMi41IDIuNSA1Ljk5NCAxLjIyN2ExIDEgMCAwIDEgLjUwNiAxLjY4N2wtNyA3YTEgMSAwIDAgMS0xLjY4Ny0uNTA2bC0xLjIyNy01Ljk5NC0yLjUtMi41YTEgMSAwIDAgMSAwLTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjA4NiA2LjUtNC43OTMgNC43OTNhMSAxIDAgMCAwLS4xOCAxLjE3TDcgMTgiIH1dCiAgICBdOwogICAgdmFyIExhbXBGbG9vciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjkyOSA3LjYyOUExIDEgMCAwIDEgMTcgOUg3YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgOSAyaDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyaDYiIH1dCiAgICBdOwogICAgdmFyIExhbXBXYWxsRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjkyOSAxOC42MjlBMSAxIDAgMCAxIDE5IDIwSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSAxM2g2YTEgMSAwIDAgMSAuOTI4LjYyOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNmg0YTIgMiAwIDAgMSAyIDJ2NSIgfV0KICAgIF07CiAgICB2YXIgTGFtcFdhbGxVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjkyOSA5LjYyOUExIDEgMCAwIDEgMTkgMTFIOWExIDEgMCAwIDEtLjkyOC0xLjM3MWwyLTVBMSAxIDAgMCAxIDExIDRoNmExIDEgMCAwIDEgLjkyOC42Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoNGEyIDIgMCAwIDAgMi0ydi01IiB9XQogICAgXTsKICAgIHZhciBMYW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjA3NyAxMC42MTVBMSAxIDAgMCAwIDUgMTJoMTRhMSAxIDAgMCAwIC45MjMtMS4zODVsLTMuMDc3LTcuMzg0QTIgMiAwIDAgMCAxNSAySDlhMiAyIDAgMCAwLTEuODQ2IDEuMjNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMXoiIH1dCiAgICBdOwogICAgdmFyIExhbmRtYXJrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTh2LTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMTIgMi4xOThhMiAyIDAgMCAxIDEuNzYuMDA2bDcuODY2IDMuODQ3Yy40NzYuMjMzLjMxLjk0OS0uMjIuOTQ5SDMuNDc0Yy0uNTMgMC0uNjk1LS43MTYtLjIyLS45NDl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4di03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4di03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjJoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOHYtNyIgfV0KICAgIF07CiAgICB2YXIgTGFuZFBsb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDYtMy02LTN2MTAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOCAxMS45OS01LjUgMy4xNGExIDEgMCAwIDAgMCAxLjc0bDguNSA0Ljg2YTIgMiAwIDAgMCAyIDBsOC41LTQuODZhMSAxIDAgMCAwIDAtMS43NEwxNiAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQ5IDEyLjg1IDExLjAyIDYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41MSAxMi44NSA2LjUgMTkuMTUiIH1dCiAgICBdOwogICAgdmFyIExhbmd1YWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOCA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCAxNCA2LTYgMi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi01LTEwLTUgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTGFwdG9wTWluaW1hbENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDIgMiA0LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIExhcHRvcE1pbmltYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBMYXB0b3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMDU0IDE1Ljk4N0gzLjk0NiIgfV0KICAgIF07CiAgICB2YXIgTGFzc29TZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNi45M2MuOTYuNDMgMS45Ni43NCAyLjk5LjkxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy4zNCAxNEE2LjggNi44IDAgMCAxIDIgMTBjMC00LjQyIDQuNDgtOCAxMC04czEwIDMuNTggMTAgOGE3LjE5IDcuMTkgMCAwIDEtLjMzIDIiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMThhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0eiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4zMyAyMmgtLjA5YS4zNS4zNSAwIDAgMS0uMjQtLjMydi0xMGEuMzQuMzQgMCAwIDEgLjMzLS4zNGMuMDggMCAuMTUuMDMuMjEuMDhsNy4zNCA2YS4zMy4zMyAwIDAgMS0uMjEuNTloLTQuNDlsLTIuNTcgMy44NWEuMzUuMzUgMCAwIDEtLjI4LjE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFzc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcwNCAxNC40NjdhMTAgOCAwIDEgMSAzLjExNSAyLjM3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTMuOTk0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTYiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgTGF1Z2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBMYXllcnMyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMCAxNC4yODUgMS41Ljg0NWExIDEgMCAwIDEgMCAxLjc0TDEzIDIxLjc0YTIgMiAwIDAgMS0yIDBsLTguNS00Ljg3YTEgMSAwIDAgMSAwLTEuNzRsMS41LS44NDUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIExheWVyc1BsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi44MyAyLjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDYuMDhhMSAxIDAgMCAwIDAgMS44M2w4LjU4IDMuOTFhMiAyIDAgMCAwIC44My4xOCAyIDIgMCAwIDAgLjgzLS4xOGw4LjU4LTMuOWExIDEgMCAwIDAgMC0xLjgzMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgLjgyNS4xNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsMi4xMTYtLjk2MiIgfV0KICAgIF07CiAgICB2YXIgTGF5ZXJzMyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjgzIDIuMThhMiAyIDAgMCAwLTEuNjYgMEwyLjYgNi4wOGExIDEgMCAwIDAgMCAxLjgzbDguNTggMy45MWEyIDIgMCAwIDAgMS42NiAwbDguNTgtMy45YTEgMSAwIDAgMCAwLTEuODN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDguNTgtMy45QTEgMSAwIDAgMCAyMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3YTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTciIH1dCiAgICBdOwogICAgdmFyIExheW91dERhc2hib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dEdyaWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMYXlvdXRMaXN0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwaDciIH1dCiAgICBdOwogICAgdmFyIExheW91dFBhbmVsTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGF5b3V0UGFuZWxUb3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dFRlbXBsYXRlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI3IiwgeDogIjE2IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMZWFmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMSAyMEE3IDcgMCAwIDEgOS44IDYuMUMxNS41IDUgMTcgNC40OCAxOSAyYzEgMiAyIDQuMTggMiA4IDAgNS41LTQuNzggMTAtMTAgMTBaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIgfV0KICAgIF07CiAgICB2YXIgTGVhZnlHcmVlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjJjMS4yNS0uOTg3IDIuMjctMS45NzUgMy45LTIuMmE1LjU2IDUuNTYgMCAwIDEgMy44IDEuNSA0IDQgMCAwIDAgNi4xODctMi4zNTMgMy41IDMuNSAwIDAgMCAzLjY5LTUuMTE2QTMuNSAzLjUgMCAwIDAgMjAuOTUgOCAzLjUgMy41IDAgMSAwIDE2IDMuMDVhMy41IDMuNSAwIDAgMC01LjgzMSAxLjM3MyAzLjUgMy41IDAgMCAwLTUuMTE2IDMuNjkgNCA0IDAgMCAwLTIuMzQ4IDYuMTU1QzMuNDk5IDE1LjQyIDQuNDA5IDE2LjcxMiA0LjIgMTguMSAzLjkyNiAxOS43NDMgMy4wMTQgMjAuNzMyIDIgMjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNyA3IiB9XQogICAgXTsKICAgIHZhciBMZWN0ZXJuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlYzYTEgMSAwIDAgMC0xLTFoLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjEyIiwgeDogIjgiLCB5OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExpYnJhcnlCaWcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBMaWJyYXJ5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDYgNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIExpZmVCdW95ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDQuMjQgNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyA5LjE3IDQuMjQtNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyAxNC44MyA0LjI0IDQuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4xNyAxNC44My00LjI0IDQuMjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgTGlnYXR1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmgydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBWOGE0IDQgMCAwIDEgNy40NjQtMiIgfV0KICAgIF07CiAgICB2YXIgTGlnaHRidWxiT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOCAxMS4yYy44LS45IDEuMi0yIDEuMi0zLjJhNiA2IDAgMCAwLTkuMy01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgNi4zYTQuNjcgNC42NyAwIDAgMCAxLjIgNS4yYy43LjcgMS4zIDEuNSAxLjUgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmg0IiB9XQogICAgXTsKICAgIHZhciBMaWdodGJ1bGIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxNGMuMi0xIC43LTEuNyAxLjUtMi41IDEtLjkgMS41LTIuMiAxLjUtMy41QTYgNiAwIDAgMCA2IDhjMCAxIC4yIDIuMiAxLjUgMy41LjcuNyAxLjMgMS41IDEuNSAyLjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyaDQiIH1dCiAgICBdOwogICAgdmFyIExpbmVTcXVpZ2dsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjVjNS0yIDcgMi41IDMgNEMxLjUgMTAgMiAxNSA1IDE2YzUgMiA5LTEwIDE0LTdzLjUgMTMuNS00IDEyYy01LTIuNS41LTExIDYtMiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIExpbmsyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g3QTUgNSAwIDAgMSA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDAgMSA0IDgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIExpbmsyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g3QTUgNSAwIDAgMSA3IDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA3aDJhNSA1IDAgMSAxIDAgMTBoLTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgTGluayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEiIH1dCiAgICBdOwogICAgdmFyIExpbmtlZGluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGE2IDYgMCAwIDEgNiA2djdoLTR2LTdhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAydjdoLTR2LTdhNiA2IDAgMCAxIDYtNnoiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjQiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgTGlzdENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBMaXN0Q2hlY2tzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE3IDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDMtMyAzIDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc1VwRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE2IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDb2xsYXBzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjAgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgTGlzdEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWMiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudERlY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudEluY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNlY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExpc3RPcmRlcmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDRoMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAyMEgzLjRjMC0xIDIuNi0xLjkyNSAyLjYtMy41YTEuNSAxLjUgMCAwIDAtMi42LTEuMDIiIH1dCiAgICBdOwogICAgdmFyIExpc3RQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTYiIH1dCiAgICBdOwogICAgdmFyIExpc3RSZXN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMSAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMHY0aDQiIH1dCiAgICBdOwogICAgdmFyIExpc3RTdGFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA4LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XQogICAgXTsKICAgIHZhciBMaXN0VG9kbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNyAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGlzdFRyZWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBhMiAyIDAgMCAwIDIgMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxMmEyIDIgMCAwIDAgMiAyaDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RWaWRlbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGlzdFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgOS41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC41IDkuNS01IDUiIH1dCiAgICBdOwogICAgdmFyIExpc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloMTMiIH1dCiAgICBdOwogICAgdmFyIExvYWRlckNpcmNsZSA9IFtbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIH1dXTsKICAgIHZhciBMb2FkZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMiA3LjggMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjIgMTYuMiAyLjkgMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDE5LjEgMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDQuOSAyLjkgMi45IiB9XQogICAgXTsKICAgIHZhciBMb2FkZXJQaW53aGVlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyYTEgMSAwIDAgMS0xMCAwIDEgMSAwIDAgMC0xMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjAuN2ExIDEgMCAxIDEgNS04LjcgMSAxIDAgMSAwIDUtOC42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zYTEgMSAwIDEgMSA1IDguNiAxIDEgMCAxIDAgNSA4LjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZUZpeGVkID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4Ljg5IDEzLjI0YTcgNyAwIDAgMC04LjEzLTguMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuMDUgNy4wNWE3IDcgMCAwIDAgOS45IDkuOSIgfV0KICAgIF07CiAgICB2YXIgTG9jYXRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBMb2NrS2V5aG9sZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjEwIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIiB9XQogICAgXTsKICAgIHZhciBMb2NrS2V5aG9sZU9wZW4gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNiIsIHI6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICIxMCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwVjdhNSA1IDAgMCAxIDkuMzMtMi41IiB9XQogICAgXTsKICAgIHZhciBMb2NrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMSIsIHg6ICIzIiwgeTogIjExIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IiB9XQogICAgXTsKICAgIHZhciBMb2NrT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTEiLCB4OiAiMyIsIHk6ICIxMSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExVjdhNSA1IDAgMCAxIDkuOS0xIiB9XQogICAgXTsKICAgIHZhciBMb2dJbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00IiB9XQogICAgXTsKICAgIHZhciBMb2dzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dCiAgICBdOwogICAgdmFyIExvZ091dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNCIgfV0KICAgIF07CiAgICB2YXIgTG9sbGlwb3AgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTFhMiAyIDAgMCAwIDQgMCA0IDQgMCAwIDAtOCAwIDYgNiAwIDAgMCAxMiAwIiB9XQogICAgXTsKICAgIHZhciBMdWdnYWdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIwaDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE1hZ25ldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE1IDQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDYuMDI5LTYuMDI5YTEgMSAwIDEgMSAzIDNsLTYuMDI5IDYuMDI5YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw2LjM2NS02LjM2N0ExIDEgMCAwIDAgOC43MTYgNC4yODJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOCA0IDQiIH1dCiAgICBdOwogICAgdmFyIE1haWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFpbE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiB9XQogICAgXTsKICAgIHZhciBNYWlsUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsUXVlc3Rpb25NYXJrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTAuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoMTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1LjI4Yy4yLS40LjUtLjguOS0xYTIuMSAyLjEgMCAwIDEgMi42LjRjLjMuNC41LjguNSAxLjMgMCAxLjMtMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWxTZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMi41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItMS41LTEuNSIgfV0KICAgIF07CiAgICB2YXIgTWFpbFdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMC41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTkxIDUuNzI3YTIgMiAwIDAgMS0yLjAwOSAwTDIgNyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNCIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTWFpbFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM1Y2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE3IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxNy00IDQiIH1dCiAgICBdOwogICAgdmFyIE1haWxib3ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5LjVDMiA3IDQgNSA2LjUgNUgxOGMyLjIgMCA0IDEuOCA0IDR2OFoiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNSw5IDE4LDkgMTgsMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDVDOSA1IDExIDcgMTEgOS41VjE3YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNyIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICAgIHZhciBNYWlscyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi04YTIgMiAwIDAgMSAxLTEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDUuNS02LjQxOSA0LjE3OWEyIDIgMCAwIDEtMi4xNjIgMEw3IDUuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiMyIsIHdpZHRoOiAiMTUiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTWFwTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkNoZWNrSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS40MyAxMi45MzVjLjM1Ny0uOTY3LjU3LTEuOTU1LjU3LTIuOTM1YTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMi4xOTcgMzIuMTk3IDAgMCAwIC44MTMtLjcyOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE4IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkhvdXNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgLjQ0NS0uODMybDMtMmExIDEgMCAwIDEgMS4xMSAwbDMgMkExIDEgMCAwIDEgMjIgMTd2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIC42MDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMnYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5NaW51c0luc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTc3IDE0QzE5LjYgMTIuNzAxIDIwIDExLjM0MyAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIgMzIgMCAwIDAgLjgyNC0uNzM4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjA3MiAxNy4wNzJjLTEuNjM0IDIuMTctMy41MjcgMy45MTItNC40NzEgNC43MjdhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDEuNDMyLTQuNTY4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTMgOS4xM2EzIDMgMCAwIDAgMy43NCAzLjc0IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy45NyA5LjMwNEE4IDggMCAwIDAgMiAxMGMwIDQuNjkgNC44ODcgOS41NjIgNy4wMjIgMTEuNDY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QbHVzSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MTQgMTEuMTA1QTcuMjk4IDcuMjk4IDAgMCAwIDIwIDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMiAzMiAwIDAgMCAuODI0LS43MzgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1djYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblhJbnNpZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5YID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNzUyIDExLjkwMUE3Ljc4IDcuNzggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDE5IDE5IDAgMCAwIC4wOS0uMDc3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNSAxNS41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDIwLjUtNS01IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWFwUGlubmVkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MTQgMTRoLTMuNzFhMSAxIDAgMCAwLS45NDguNjgzbC0yLjAwNCA2QTEgMSAwIDAgMCAzIDIyaDE4YTEgMSAwIDAgMCAuOTQ4LTEuMzE2bC0yLTZhMSAxIDAgMCAwLS45NDktLjY4NGgtMy43MTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1hcFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgICB2YXIgTWFwMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjEwNiA1LjU1M2EyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOXYxMi43NjRhMSAxIDAgMCAxLS41NTMuODk0bC00LjU1MyAyLjI3N2EyIDIgMCAwIDEtMS43ODggMGwtNC4yMTItMi4xMDZhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0djE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcnNTdHJva2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTcuNzUgNy43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjE1IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIE1hcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYuNzUgNi43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxNCIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBNYXJ0aW5pID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDMtNyA4LTctOFoiIH1dCiAgICBdOwogICAgdmFyIE1heGltaXplMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFIM3YtNiIgfV0KICAgIF07CiAgICB2YXIgTWF4aW1pemUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNINWEyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFY1YTIgMiAwIDAgMC0yLTJoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMiIH1dCiAgICBdOwogICAgdmFyIE1lZGFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4yMSAxNSAyLjY2IDcuMTRhMiAyIDAgMCAxIC4xMy0yLjJMNC40IDIuOEEyIDIgMCAwIDEgNiAyaDEyYTIgMiAwIDAgMSAxLjYuOGwxLjYgMi4xNGEyIDIgMCAwIDEgLjE0IDIuMkwxNi43OSAxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMiA1LjEyIDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxMiA1Ljg4LTkuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di0yaC0uNSIgfV0KICAgIF07CiAgICB2YXIgTWVnYXBob25lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNjM2IDZBMTMgMTMgMCAwIDAgMTkuNCAzLjIgMSAxIDAgMCAxIDIxIDR2MTEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjM3OCAxNC4zNTdBMTMgMTMgMCAwIDAgMTEgMTRINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0YTEyIDEyIDAgMCAwIDIuNCA3LjIgMiAyIDAgMCAwIDMuMi0yLjRBOCA4IDAgMCAxIDEwIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHY2IiB9XQogICAgXTsKICAgIHZhciBNZWdhcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA2YTEzIDEzIDAgMCAwIDguNC0yLjhBMSAxIDAgMCAxIDIxIDR2MTJhMSAxIDAgMCAxLTEuNi44QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djgiIH1dCiAgICBdOwogICAgdmFyIE1laCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIE1lbnUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDVoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5aDE2IiB9XQogICAgXTsKICAgIHZhciBNZW1vcnlTdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTFoMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjUgMTFIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTh2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMC4zYTQgNCAwIDAgMS0xLjE3MiAyLjg3Mkw0IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDIyLTUtNSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUgMy0zLTMtMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjA5IDMuNzJhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA1LjAwNCAyLjIyNCAzIDMgMCAwIDEtLjgzMiAyLjA4M2wtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NS0uMDAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuOTMgNC45MjlhMTAgMTAgMCAwIDAtMS45MzggMTEuNDEyIDIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAwIDAgMTEuMzAyLTEuOTg5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzUgMi42OUExMCAxMCAwIDAgMSAyMS4zIDE1LjY1IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVXYXJuaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZVJlcGx5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUtMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDhhMiAyIDAgMCAxIDIgMnYxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOC0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMtMy0zLTMiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2djUuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMS4xNDktMS4xNDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTlhMiAyIDAgMCAwIDItMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDZWNWEyIDIgMCAwIDAtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgM2EyIDIgMCAwIDAtMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM2gyIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlRGlmZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDloNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi43IDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00LjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy41IDkuNWMwIC42ODcuMjY1IDEuMzgzLjY5NyAxLjg0NGwzLjAwOSAzLjI2NGExLjE0IDEuMTQgMCAwIDAgLjQwNy4zMTQgMSAxIDAgMCAwIC43ODMtLjAwNCAxLjE0IDEuMTQgMCAwIDAgLjM5OC0uMzFsMy4wMDgtMy4yNjRBMi43NyAyLjc3IDAgMCAwIDE2LjUgOS41IDIuNSAyLjUgMCAwIDAgMTIgOGEyLjUgMi41IDAgMCAwLTQuNSAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVMb2NrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgOC41VjVhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDEwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1di0yYTIgMiAwIDAgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE1Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE5SDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43LjcgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjU2IDNIMjBhMiAyIDAgMCAxIDIgMnYxMS4zNDQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTIgMiAwIDAgMCAyLTJWOGgtMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGEyIDIgMCAwIDAgMi0yVjhIOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVJlcGx5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDgtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYtMWEyIDIgMCAwIDAtMi0ySDciIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVTaGFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDkgNi02IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlVGV4dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdoOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVdhcm5pbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA4LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNZXNzYWdlc1NxdWFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEwYTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMTQuMjg2VjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCA5YTIgMiAwIDAgMSAyIDJ2MTAuMjg2YS43MS43MSAwIDAgMS0xLjIxMi41MDJsLTIuMjAyLTIuMjAyQTIgMiAwIDAgMCAxNy4xNzIgMTlIMTBhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWljT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjVhMyAzIDAgMCAwLTUuNjgtMS4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIiIH1dCiAgICBdOwogICAgdmFyIE1pY1ZvY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBNaWMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWljcm9jaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDdoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2aDIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjIiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMjAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1pY3Jvc2NvcGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMmE3IDcgMCAxIDAgMC0xNGgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmEyIDIgMCAwIDEtMi0yVjZoNnY0YTIgMiAwIDAgMS0yIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWM2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBNaWNyb3dhdmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNyIsIHg6ICI2IiwgeTogIjgiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOXYyIiB9XQogICAgXTsKICAgIHZhciBNaWxlc3RvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWlsa09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYxLjM0M00xNSAydjIuNzg5YTQgNCAwIDAgMCAuNjcyIDIuMjE5bC42NTYuOTg0YTQgNCAwIDAgMSAuNjcyIDIuMjJ2MS4xMzFNNy44IDcuOGwtLjEyOC4xOTJBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi0zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBNaW5pbWl6ZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBoLTZWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDctNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDZ2NiIgfV0KICAgIF07CiAgICB2YXIgTWlsayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYyLjc4OWE0IDQgMCAwIDEtLjY3MiAyLjIxOWwtLjY1Ni45ODRBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi05Ljc4OWE0IDQgMCAwIDAtLjY3Mi0yLjIxOWwtLjY1Ni0uOTg0QTQgNCAwIDAgMSAxNSA0Ljc4OFYyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NzIgNi40NzIgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAiIH1dCiAgICBdOwogICAgdmFyIE1pbmltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZoM2EyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiB9XQogICAgXTsKICAgIHZhciBNaW51cyA9IFtbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV1dOwogICAgdmFyIE1vbml0b3JDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNsb3VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTNhMyAzIDAgMSAxIDIuODMtNEgxNGEyIDIgMCAwIDEgMCA0eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDcuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDQuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMy4yMjgtLjM4My0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiA4Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMy4yMjguMzgzLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgOS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiA0Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgNy4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM3YyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JEb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyLjMwN1YxNWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoOC42OTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckRvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwLTMgMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAxLjE4NC0xLjgyNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjU2IDNIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtLjI5MyAxLjA0MiIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvclBhdXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yU21hcnRwaG9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOXYtMy45NiAzLjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTloNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTYiLCB5OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JTcGVha2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS41IDIwSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOWguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIxMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNkg0YTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyaDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTUiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvclN0b3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiNyIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNS01IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjIxIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE3IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgTW9vblN0YXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA1aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM3Y0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNb3RvcmJpa2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNC0xLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA5IDYgMmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDEuOTkgMS44MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDNhMSAxIDAgMCAwIDEtMSA2IDYgMCAwIDEgNi02IDEgMSAwIDAgMCAxLTF2LS43NUE1IDUgMCAwIDAgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxNyIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW91bnRhaW5Tbm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4xNCAxNS4wOGMyLjYyLTEuNTcgNS4yNC0xLjQzIDcuODYuNDIgMi43NCAxLjk0IDUuNDkgMiA4LjIzLjE5IiB9XQogICAgXTsKICAgIHZhciBNb3VudGFpbiA9IFtbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dXTsKICAgIHZhciBNb3VzZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2LjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yMTggMTguMjE4QTcgNyAwIDAgMSA1IDE1VjlhNyA3IDAgMCAxIC43ODItMy4yMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTMuMzQzVjlBNyA3IDAgMCAwIDguNTYgMi45MDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBNb3VzZVBvaW50ZXIyT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTUuNTUgOC40NSA1LjEzOCAyLjA4N2EuNS41IDAgMCAxLS4wNjMuOTQ3bC02LjEyNCAxLjU4YTIgMiAwIDAgMC0xLjQzOCAxLjQzNWwtMS41NzkgNi4xMjZhLjUuNSAwIDAgMS0uOTQ3LjA2M0w4LjQ1IDE1LjU1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MTYgMTEuNTI4LTIuNzc5LTYuODRhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDYuODQgMi43NzkiIH1dCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlcjIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjAzNyA0LjY4OGEuNDk1LjQ5NSAwIDAgMSAuNjUxLS42NTFsMTYgNi41YS41LjUgMCAwIDEtLjA2My45NDdsLTYuMTI0IDEuNThhMiAyIDAgMCAwLTEuNDM4IDEuNDM1bC0xLjU3OSA2LjEyNmEuNS41IDAgMCAxLS45NDcuMDYzeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wMzQgMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDRMOC4yMDQgNy41NDVhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjYgMy40NDNhLjUuNSAwIDAgMS0uOTQ0LjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMS44IDExLjggOC40IDguNCIgfV0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQ2xpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0LjEgMTIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjEgOC0yLjktLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMi0xLjkgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjIgMi4yIDggNS4xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMDM3IDkuNjlhLjQ5OC40OTggMCAwIDEgLjY1My0uNjUzbDExIDQuNWEuNS41IDAgMCAxLS4wNzQuOTQ5bC00LjM0OSAxLjA0MWExIDEgMCAwIDAtLjc0LjczOWwtMS4wNCA0LjM1YS41LjUgMCAwIDEtLjk1LjA3NHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU4NiAxMi41ODYgMTkgMTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2UgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjUiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djQiIH1dCiAgICBdOwogICAgdmFyIE1vdmUzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM3YxNmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBNb3ZlRGlhZ29uYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTN2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDUgMTQgMTQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDV2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNSA1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlRG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOUg1VjEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVMNSAxOSIgfV0KICAgIF07CiAgICB2YXIgTW92ZURvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzVjE5SDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNUwxOSAxOSIgfV0KICAgIF07CiAgICB2YXIgTW92ZURvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4TDEyIDIyTDE2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4LTQgNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4TDIgMTJMNiAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEySDIyIiB9XQogICAgXTsKICAgIHZhciBNb3ZlUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4TDIyIDEyTDE4IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJIMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVIMTlWMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNUw1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZMMTIgMkwxNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBNb3ZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNSAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBNdXNpYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWMmw3IDQiIH1dCiAgICBdOwogICAgdmFyIE11c2ljMyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThWMiIgfV0KICAgIF07CiAgICB2YXIgTXVzaWM0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDEyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE5hdmlnYXRpb24yT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4zMSA5LjMxIDUgMjFsNy00IDcgNC0xLjE3LTMuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTMgOC44OCAxMiAybC0xLjE3IDMuMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBOYXZpZ2F0aW9uMiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyIiB9XV07CiAgICB2YXIgTmF2aWdhdGlvbiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjMgMTEgMjIgMiAxMyAyMSAxMSAxMyAzIDExIiB9XV07CiAgICB2YXIgTmF2aWdhdGlvbk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNDMgOC40MyAzIDExbDggMiAyIDggMi41Ny01LjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjM5IDExLjczIDIyIDJsLTkuNzMgNC42MSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIE5ldHdvcmsgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE2IiwgeTogIjE2Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICIyIiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE2di0zYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyVjgiIH1dCiAgICBdOwogICAgdmFyIE5ld3NwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0aC04IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJoMTZhMiAyIDAgMCAwIDItMlY0YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMS00IDB2LTlhMiAyIDAgMCAxIDItMmgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjEwIiwgeTogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIE5mYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4zNyAyYTIwLjE2IDIwLjE2IDAgMCAxIDAgMjAiIH1dCiAgICBdOwogICAgdmFyIE5vbkJpbmFyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDQgNyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4IDctNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9va1BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi03LjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDUuNjI2YTEgMSAwIDEgMC0zLjAwNC0zLjAwNGwtNS4wMSA1LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE5vdGVib29rVGFicyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTdoNSIgfV0KICAgIF07CiAgICB2YXIgTm90ZWJvb2tUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDhoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE2SDE0IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIE5vdGVwYWRUZXh0RGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2MmEyIDIgMCAwIDEtMiAyaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJINmEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4VjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg1IiB9XQogICAgXTsKICAgIHZhciBOb3RlcGFkVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxOCIsIHg6ICI0IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDUiIH1dCiAgICBdOwogICAgdmFyIE51dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTnV0T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNFYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUgMTB2NGE3LjAwNCA3LjAwNCAwIDAgMCA1LjI3NyA2Ljc4N2MuNDEyLjEwNC44MDIuMjkyIDEuMTAyLjU5MkwxMiAyMmwuNjIxLS42MjFjLjMtLjMuNjktLjQ4OCAxLjEwMi0uNTkyYTcuMDEgNy4wMSAwIDAgMCA0LjEyNS0yLjkzOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMHYzLjM0MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxMmMtMS4zNDktLjU3My0xLjkwNS0xLjAwNS0yLjUtMi0uNTQ2LjkwMi0xLjA0OCAxLjM1My0yLjUgMi0xLjAxOC0uNjQ0LTEuNDYtMS4wOC0yLTItMS4wMjguNzEtMS42OS45MTgtMyAxIDEuMDgxLTEuMDQ4IDEuNzU3LTIuMDMgMi0zIC4xOTQtLjc3Ni44NC0xLjU1MSAxLjc5LTIuMjFtMTEuNjU0IDUuOTk3Yy44ODctLjQ1NyAxLjI4LS44OTEgMS41NTYtMS43ODcgMS4wMzIuOTE2IDEuNjgzIDEuMTU3IDMgMS0xLjI5Ny0xLjAzNi0xLjc1OC0yLjAzLTItMy0uNS0yLTQtNC04LTQtLjc0IDAtMS40NjEuMDY4LTIuMTUuMTkyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgICB2YXIgT2N0YWdvbkFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zMTIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNC42ODgtNC42ODhBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT2N0YWdvbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBPY3RhZ29uUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE9jdGFnb25YID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgICB2YXIgT2N0YWdvbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBPbWVnYSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjBoNC41YS41LjUgMCAwIDAgLjUtLjV2LS4yODJhLjUyLjUyIDAgMCAwLS4yNDctLjQzNyA4IDggMCAxIDEgOC40OTQtLjAwMS41Mi41MiAwIDAgMC0uMjQ3LjQzOHYuMjgyYS41LjUgMCAwIDAgLjUuNUgyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT3JiaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zNDEgNi40ODRBMTAgMTAgMCAwIDEgMTAuMjY2IDIxLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNjU5IDE3LjUxNkExMCAxMCAwIDAgMSAxMy43NCAyLjE1MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE9wdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM2g2bDYgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDciIH1dCiAgICBdOwogICAgdmFyIE9yaWdhbWkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY0YTEgMSAwIDAgMSAxLTFoNi4yOTdhMSAxIDAgMCAxIC42NTEgMS43NTlsLTQuNjk2IDQuMDI1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTIgMjEtNy40MTQtNy40MTRBMiAyIDAgMCAxIDQgMTIuMTcyVjYuNDE1YTEuMDAyIDEuMDAyIDAgMCAxIDEuNzA3LS43MDdMMjAgMjAuMDA5IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMi4yMTQgMy4zODEgOC40MTQgMTQuOTY2YTEgMSAwIDAgMS0uMTY3IDEuMTk5bC0xLjE2OCAxLjE2M2ExIDEgMCAwIDEtLjcwNi4yOTFINi4zNTFhMSAxIDAgMCAxLS42MjUtLjIxOUwzLjI1IDE4LjhhMSAxIDAgMCAxIC42MzEtMS43ODFsNC4xNjUuMDI3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYWNrYWdlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjA1NCA5LjAxM2gxNy44OTMiIH1dCiAgICBdOwogICAgdmFyIFBhY2thZ2VDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDIgMiA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZU1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBQYWNrYWdlT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi05IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjE3IDIuMjFhMS42NyAxLjY3IDAgMCAxIDEuNjMgMEwyMSA0LjU3YTEuOTMgMS45MyAwIDAgMSAwIDMuMzZMOC44MiAxNC43OWExLjY1NSAxLjY1NSAwIDAgMS0xLjY0IDBMMyAxMi40M2ExLjkzIDEuOTMgMCAwIDEgMC0zLjM2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM3YzLjg3YTIuMDYgMi4wNiAwIDAgMS0xLjExIDEuODNsLTYgMy4wOGExLjkzIDEuOTMgMCAwIDEtMS43OCAwbC02LTMuMDhBMi4wNiAyLjA2IDAgMCAxIDQgMTYuODdWMTMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTIuNDNhMS45MyAxLjkzIDAgMCAwIDAtMy4zNkw4LjgzIDIuMmExLjY0IDEuNjQgMCAwIDAtMS42MyAwTDMgNC41N2ExLjkzIDEuOTMgMCAwIDAgMCAzLjM2bDEyLjE4IDYuODZhMS42MzYgMS42MzYgMCAwIDAgMS42MyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFja2FnZVBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzdjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxNS41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNyAxNy4yNyAyMiAxOSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzIDUgNW0tNSAwIDUtNSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XQogICAgXTsKICAgIHZhciBQYWludFJvbGxlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNiIsIHg6ICIyIiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZ2LTJhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2IiwgeDogIjgiLCB5OiAiMTYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFBhaW50QnVja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNyA2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOTkyIDEySDIuMDQxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE0NSAxOC4zOEEzLjM0IDMuMzQgMCAwIDEgMjAgMTYuNWEzLjMgMy4zIDAgMCAxLTEuMTQ1IDEuODhjLS41NzUuNDYtLjg1NSAxLjAyLS44NTUgMS41OTVBMiAyIDAgMCAwIDIwIDIyYTIgMiAwIDAgMCAyLTIuMDI1YzAtLjU4LS4yODUtMS4xMy0uODU1LTEuNTk1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTguNSA0LjUgMi4xNDgtMi4xNDhhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGw3LjI5NiA3LjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC03LjU5MiA3LjU5MmEzLjYxNSAzLjYxNSAwIDAgMS01LjExMiAwbC0zLjg4OC0zLjg4OGEzLjYxNSAzLjYxNSAwIDAgMSAwLTUuMTEyTDUuNjcgNy4zMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2OUg2VjNhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAxMmExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMCAwIDIgMmgyYTEgMSAwIDAgMSAxIDF2Mi45YTIgMiAwIDEgMCA0IDBWMTdhMSAxIDAgMCAxIDEtMWgyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjYyMiAxNy44OTctMTAuNjgtMi45MTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDIuNjIyYTEgMSAwIDEgMSAzLjAwMiAzLjAwMkwxNy4zNiA5LjY0M2EuNS41IDAgMCAwIDAgLjcwN2wuOTQ0Ljk0NGEyLjQxIDIuNDEgMCAwIDEgMCAzLjQwOGwtLjk0NC45NDRhLjUuNSAwIDAgMS0uNzA3IDBMOC4zNTQgNy4zNDhhLjUuNSAwIDAgMSAwLS43MDdsLjk0NC0uOTQ0YTIuNDEgMi40MSAwIDAgMSAzLjQwOCAwbC45NDQuOTQ0YS41LjUgMCAwIDAgLjcwNyAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDhjLTEuODA0IDIuNzEtMy45NyAzLjQ2LTYuNTgzIDMuOTQ4YS41MDcuNTA3IDAgMCAwLS4zMDIuODE5bDcuMzIgOC44ODNhMSAxIDAgMCAwIDEuMTg1LjIwNEMxMi43MzUgMjAuNDA1IDE2IDE2Ljc5MiAxNiAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFsZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDIyYTEgMSAwIDAgMSAwLTIwIDEwIDkgMCAwIDEgMTAgOSA1IDUgMCAwIDEtNSA1aC0yLjI1YTEuNzUgMS43NSAwIDAgMC0xLjQgMi44bC4zLjRhMS43NSAxLjc1IDAgMCAxLTEuNCAyLjh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTMuNSIsIGN5OiAiNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjEwLjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNi41IiwgY3k6ICIxMi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiNy41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUGFuZGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNy4yNWgxLjVMMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC42OSA5LjY3YTQuNSA0LjUgMCAxIDAtNy4wNC01LjUgOC4zNSA4LjM1IDAgMCAwLTMuMyAwIDQuNSA0LjUgMCAxIDAtNy4wNCA1LjVDMi40OSAxMS4yIDIgMTIuODggMiAxNC41IDIgMTkuNDcgNi40OCAyMiAxMiAyMnMxMC0yLjUzIDEwLTcuNWMwLTEuNjItLjQ4LTMuMy0xLjMtNC44MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyLTIgMiIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b21DbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWgxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbU9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNS0zLTMgMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxMZWZ0UmlnaHREYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMFY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNVYzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA5IDMgMy0zIDMiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDl2MSIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxSaWdodE9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1LTMtMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wQ2xvc2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNiAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcERhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzTGVmdEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbHNSaWdodEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzVG9wTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxVjkiIH1dCiAgICBdOwogICAgdmFyIFBhcGVyY2xpcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2IDYtOC40MTQgOC41ODZhMiAyIDAgMCAwIDIuODI5IDIuODI5bDguNDE0LTguNTg2YTQgNCAwIDEgMC01LjY1Ny01LjY1N2wtOC4zNzkgOC41NTFhNiA2IDAgMSAwIDguNDg1IDguNDg1bDguMzc5LTguNTUxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXJlbnRoZXNlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0KICAgIF07CiAgICB2YXIgUGFya2luZ01ldGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMjgyIDE5YTEgMSAwIDAgMCAuOTQ4LS42OGwyLjM3LTYuOTg4YTcgNyAwIDEgMC0xMy4yIDBsMi4zNyA2Ljk4OGExIDEgMCAwIDAgLjk0OC42OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5YTMgMyAwIDEgMSA2IDAiIH1dCiAgICBdOwogICAgdmFyIFBhcnR5UG9wcGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS44IDExLjMgMiAyMmwxMC43LTMuNzkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjIgMi0yLjI0Ljc1YTIuOSAyLjkgMCAwIDAtMS45NiAzLjEyYy4xLjg2LS41NyAxLjYzLTEuNDUgMS42M2gtLjM4Yy0uODYgMC0xLjYuNi0xLjc2IDEuNDRMMTQgMTAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTMtLjgyLS4zM2MtLjg2LS4zNC0xLjgyLjItMS45OCAxLjExYy0uMTEuNy0uNzIgMS4yMi0xLjQzIDEuMjJIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMiAuMzMuODJjLjM0Ljg2LS4yIDEuODItMS4xMSAxLjk4QzkuNTIgNC45IDkgNS41MiA5IDYuMjNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAxM2MxLjkzIDEuOTMgMi44MyA0LjE3IDIgNS0uODMuODMtMy4wNy0uMDctNS0yLTEuOTMtMS45My0yLjgzLTQuMTctMi01IC44My0uODMgMy4wNy4wNyA1IDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjE4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiMTgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFBhd1ByaW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBjQ2FzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNSIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIFBlbkxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMWg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBlbk9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEwIDEwLTYuMTU3IDYuMTYyYTIgMiAwIDAgMC0uNS44MzNsLTEuMzIyIDQuMzZhLjUuNSAwIDAgMCAuNjIyLjYyNGw0LjM1OC0xLjMyM2EyIDIgMCAwIDAgLjgzLS41TDE0IDEzLjk4MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi44MjkgNy4xNzIgNC4zNTktNC4zNDZhMSAxIDAgMSAxIDMuOTg2IDMuOTg2bC00LjM1MyA0LjM1MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBlblRvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS43MDcgMjEuMjkzYTEgMSAwIDAgMS0xLjQxNCAwbC0xLjU4Ni0xLjU4NmExIDEgMCAwIDEgMC0xLjQxNGw1LjU4Ni01LjU4NmExIDEgMCAwIDEgMS40MTQgMGwxLjU4NiAxLjU4NmExIDEgMCAwIDEgMCAxLjQxNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTggMTMtMS4zNzUtNi44NzRhMSAxIDAgMCAwLS43NDYtLjc3NkwzLjIzNSAyLjAyOGExIDEgMCAwIDAtMS4yMDcgMS4yMDdMNS4zNSAxNS44NzlhMSAxIDAgMCAwIC43NzYuNzQ2TDEzIDE4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuMyAyLjMgNy4yODYgNy4yODYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAgMTAtNi4xNTcgNi4xNjJhMiAyIDAgMCAwLS41LjgzM2wtMS4zMjIgNC4zNmEuNS41IDAgMCAwIC42MjIuNjI0bDQuMzU4LTEuMzIzYTIgMiAwIDAgMCAuODMtLjVMMTQgMTMuOTgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjgyOSA3LjE3MiA0LjM1OS00LjM0NmExIDEgMCAxIDEgMy45ODYgMy45ODZsLTQuMzUzIDQuMzUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgUGVuY2lsUnVsZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3IDguNyAyLjdhMi40MSAyLjQxIDAgMCAwLTMuNCAwTDIuNyA1LjNhMi40MSAyLjQxIDAgMCAwIDAgMy40TDcgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEgNC4zIDQuM2MuOTQuOTQuOTQgMi40NiAwIDMuNGwtMi42IDIuNmMtLjk0Ljk0LTIuNDYuOTQtMy40IDBMMTEgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVudGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC44MyAyLjM4YTIgMiAwIDAgMSAyLjM0IDBsOCA1Ljc0YTIgMiAwIDAgMSAuNzMgMi4yNWwtMy4wNCA5LjI2YTIgMiAwIDAgMS0xLjkgMS4zN0g3LjA0YTIgMiAwIDAgMS0xLjktMS4zN0wyLjEgMTAuMzdhMiAyIDAgMCAxIC43My0yLjI1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVyY2VudCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICI1IiwgeTE6ICI1IiwgeTI6ICIxOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiNi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBQZXJzb25TdGFuZGluZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIwIDMtNiAzIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDYgMiA2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NCIgfV0KICAgIF07CiAgICB2YXIgUGhpbGlwcGluZVBlc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMUg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxVjRhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAwIDEySDciIH1dCiAgICBdOwogICAgdmFyIFBob25lQ2FsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJhOSA5IDAgMCAxIDkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2YTUgNSAwIDAgMSA1IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBob25lRm9yd2FyZGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVJbmNvbWluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU1pc3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjEgMTMuOWExNCAxNCAwIDAgMCAzLjczMiAyLjY2OCAxIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDIgMTggMTggMCAwIDEtMTIuNzI4LTUuMjcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00Ljc2IDEzLjU4MkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCAuMjQ0LjQ3MyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVPdXRnb2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDggNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWMmgtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGkgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdjMC0xLjcgMS4zLTMgMy0zaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCIgfV0KICAgIF07CiAgICB2YXIgUGlhbm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC41IDhjLTEuNCAwLTIuNi0uOC0zLjItMkE2Ljg3IDYuODcgMCAwIDAgMiA5djExYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtOC41QzIyIDkuNiAyMC40IDggMTguNSA4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY0IiB9XQogICAgXTsKICAgIHZhciBQaWNrYXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5Ljk5OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS45NzMgNC4wMjdBMTMgMTMgMCAwIDAgNS45MDIgMi4zNzNjLTEuMzk4LjM0Mi0xLjA5MiAyLjE1OC4yNzcgMi42MDFhMTkuOSAxOS45IDAgMCAxIDUuODIyIDMuMDI0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjAwMSAxMS45OTlhMTkuOSAxOS45IDAgMCAxIDMuMDI0IDUuODI0Yy40NDQgMS4zNjkgMi4yNiAxLjY3NiAyLjYwMy4yNzhBMTMgMTMgMCAwIDAgMjAgOC4wNjkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzUyIDMuMzUyYTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBsLTUuMjk2IDUuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw1LjI5Ni01LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGljdHVyZUluUGljdHVyZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBjMCAxLjEuOSAyIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNyIsIHg6ICIxMiIsIHk6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGlnZ3lCYW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTdoM3YyYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTMuMTYgMy4xNiAwIDAgMCAyLTJoMWExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFoLTFhNSA1IDAgMCAwLTItNFYzYTQgNCAwIDAgMC0zLjIgMS42bC0uMy40SDExYTYgNiAwIDAgMC02IDZ2MWE1IDUgMCAwIDAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDh2MWEyIDIgMCAwIDAgMiAyaDEiIH1dCiAgICBdOwogICAgdmFyIFBpY3R1cmVJblBpY3R1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDZWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDQgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwVjdhMiAyIDAgMCAwLTItMmgtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djJhMiAyIDAgMCAwIDIgMmgzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTIiLCB5OiAiMTQiLCB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGlsY3Jvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloLTNhMyAzIDAgMCAxIDAtNmg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThIMmw0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMi00LTQiIH1dCiAgICBdOwogICAgdmFyIFBpbGNyb3dSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOUg3YTEgMSAwIDAgMSAwLTZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNEgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTQgNCIgfV0KICAgIF07CiAgICB2YXIgUGlsY3JvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0SDkuNWE0LjUgNC41IDAgMCAwIDAgOUgxMyIgfV0KICAgIF07CiAgICB2YXIgUGlsbEJvdHRsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaC00YTEgMSAwIDAgMC0xIDF2NWExIDEgMCAwIDAgMSAxaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA3djEzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI1IiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGlsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjUgMjAuNSAxMC0xMGE0Ljk1IDQuOTUgMCAxIDAtNy03bC0xMCAxMGE0Ljk1IDQuOTUgMCAxIDAgNyA3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgOC41IDcgNyIgfV0KICAgIF07CiAgICB2YXIgUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIiB9XQogICAgXTsKICAgIHZhciBQaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTAuNzZhMiAyIDAgMCAxLTEuMTEgMS43OWwtMS43OC45QTIgMiAwIDAgMCA1IDE1LjI0VjE2YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtLjc2YTIgMiAwIDAgMC0xLjExLTEuNzlsLTEuNzgtLjlBMiAyIDAgMCAxIDE1IDEwLjc2VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDhhMiAyIDAgMCAwIDAgNCAxIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGlwZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyIDktOC40MTQgOC40MTRBMiAyIDAgMCAwIDMgMTguODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAzLjgyOCAyMWgxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwxNSAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA5IC40LjRhMSAxIDAgMSAxLTMgM2wtMy44LTMuOGExIDEgMCAxIDEgMy0zbC40LjQgMy40LTMuNGExIDEgMCAxIDEgMyAzeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIC40MTQtLjQxNCIgfV0KICAgIF07CiAgICB2YXIgUGl6emEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNC0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc3NSA1LjY1NGExNS42OCAxNS42OCAwIDAgMC0xMi4xMjEgMTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZUxhbmRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNzcgMTAuNzcgMiA5bDItNC41IDEuMS41NWMuNTUuMjguOS44NC45IDEuNDVzLjM1IDEuMTcuOSAxLjQ1TDggOC41bDMtNiAxLjA1LjUzYTIgMiAwIDAgMSAxLjA5IDEuNTJsLjcyIDUuNGEyIDIgMCAwIDAgMS4wOSAxLjUybDQuNCAyLjJjLjQyLjIyLjc4LjU1IDEuMDEuOTZsLjYgMS4wM2MuNDkuODgtLjA2IDEuOTgtMS4wNiAyLjFsLTEuMTguMTVjLS40Ny4wNi0uOTUtLjAyLTEuMzctLjI0TDQuMjkgMTEuMTVhMiAyIDAgMCAxLS41Mi0uMzhaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZVRha2VvZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuMzYgMTcuNCA0IDE3bC0yLTQgMS4xLS41NWEyIDIgMCAwIDEgMS44IDBsLjE3LjFhMiAyIDAgMCAwIDEuOCAwTDggMTIgNSA2bC45LS40NWEyIDIgMCAwIDEgMi4wOS4ybDQuMDIgM2EyIDIgMCAwIDAgMi4xLjJsNC4xOS0yLjA2YTIuNDEgMi40MSAwIDAgMSAxLjczLS4xN0wyMSA3YTEuNCAxLjQgMCAwIDEgLjg3IDEuOTlsLS4zOC43NmMtLjIzLjQ2LS42Ljg0LTEuMDcgMS4wOEw3LjU4IDE3LjJhMiAyIDAgMCAxLTEuMjIuMThaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjggMTkuMiAxNiAxMWwzLjUtMy41QzIxIDYgMjEuNSA0IDIxIDNjLTEtLjUtMyAwLTQuNSAxLjVMMTMgOCA0LjggNi4yYy0uNS0uMS0uOS4xLTEuMS41bC0uMy41Yy0uMi41LS4xIDEgLjMgMS4zTDkgMTJsLTIgM0g0bC0xIDEgMyAyIDIgMyAxLTF2LTNsMy0yIDMuNSA1LjNjLjMuNC44LjUgMS4zLjNsLjUtLjJjLjQtLjMuNi0uNy41LTEuMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTUgNWEyIDIgMCAwIDEgMy4wMDgtMS43MjhsMTEuOTk3IDYuOTk4YTIgMiAwIDAgMSAuMDAzIDMuNDU4bC0xMiA3QTIgMiAwIDAgMSA1IDE5eiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBsdWcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFWOGgxMnYzYTYgNiAwIDEgMS0xMiAwWiIgfV0KICAgIF07CiAgICB2YXIgUGx1Z1phcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMy41IDEwIDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTYuNSAxMyAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAzLTQgNGg2bC00IDQiIH1dCiAgICBdOwogICAgdmFyIFBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOGExIDEgMCAwIDEgMSAxdjRhNCA0IDAgMCAxLTQgNGgtNGE0IDQgMCAwIDEtNC00VjlhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA4VjIiIH1dCiAgICBdOwogICAgdmFyIFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dCiAgICBdOwogICAgdmFyIFBvY2tldEtuaWZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjFjMCAxIDIgMSAyIDJTMyA2IDMgN3MyIDEgMiAyLTIgMS0yIDIgMiAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyA4LjgzYTQgNCAwIDAgMC01LjY2LTUuNjZsLTEyIDEyYTQgNCAwIDEgMCA1LjY2IDUuNjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjY2VjIyYTQgNCAwIDAgMCA0LTRWNiIgfV0KICAgIF07CiAgICB2YXIgUG9kY2FzdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3YTEgMSAwIDEgMC0yIDBsLjUgNC41YTAuNSAwLjUgMCAwIDAgMSAweiIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODUgMTguNThhOSA5IDAgMSAwLTkuNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRhNSA1IDAgMSAxIDggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMSIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUG9ja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM2EyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTIwIDBWNWEyIDIgMCAwIDEgMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEwIDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFBvaW50ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0LjVWNGEyIDIgMCAwIDAtMi40MS0xLjk1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDguNGEyIDIgMCAwIDAtMS4yNi0xLjI5NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS43IDE2LjJBOCA4IDAgMCAwIDIyIDE0di0zYTIgMiAwIDEgMC00IDB2LTFhMiAyIDAgMCAwLTMuNjMtMS4xNTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm03IDE1LTEuOC0xLjhhMiAyIDAgMCAwLTIuNzkgMi44Nkw2IDE5LjdhNy43NCA3Ljc0IDAgMCAwIDYgMi4zaDJhOCA4IDAgMCAwIDUuNjU3LTIuMzQzIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBvaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNGE4IDggMCAwIDEtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMFY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuNVY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3Bjb3JuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjIgOSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIyIDEtMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3BzaWNsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTguNiAxNC40Yy44LS44LjgtMiAwLTIuOGwtOC4xLTguMWE0Ljk1IDQuOTUgMCAxIDAtNy4xIDcuMWw4LjEgOC4xYy45LjcgMi4xLjcgMi45LS4xWiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItNS41LTUuNSIgfV0KICAgIF07CiAgICB2YXIgUG91bmRTdGVybGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDdjMC01LjMzMy04LTUuMzMzLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM2gxMCIgfV0KICAgIF07CiAgICB2YXIgUG93ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4zNiA2LjY0QTkgOSAwIDAgMSAyMC43NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjE2IDYuMTZhOSA5IDAgMSAwIDEyLjY4IDEyLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiIH1dCiAgICBdOwogICAgdmFyIFByaW50ZXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XQogICAgXTsKICAgIHZhciBQcmVzZW50YXRpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjEgNS01IDUgNSIgfV0KICAgIF07CiAgICB2YXIgUHJpbnRlclggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41MzEgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoNi4zNzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAxNi41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi41IDIxLjUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5VjNhMSAxIDAgMCAxIDEtMWgxMGExIDEgMCAwIDEgMSAxdjYiIH1dCiAgICBdOwogICAgdmFyIFByaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIxNCIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBQcm9qZWN0b3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDcgMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDcgMi0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTMiLCByOiAiMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjgzIDEySDIwYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNGEyIDIgMCAwIDEgMi0yaDIuMTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDIiIH1dCiAgICBdOwogICAgdmFyIFByb3BvcnRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMTNhMiAyIDAgMCAxIDIgMnY5IiB9XQogICAgXTsKICAgIHZhciBQdXp6bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zOSA0LjM5YTEgMSAwIDAgMCAxLjY4LS40NzQgMi41IDIuNSAwIDEgMSAzLjAxNCAzLjAxNSAxIDEgMCAwIDAtLjQ3NCAxLjY4bDEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAgMy40MTRMMTkuNjEgMTUuMzlhMSAxIDAgMCAxLTEuNjgtLjQ3NCAyLjUgMi41IDAgMSAwLTMuMDE0IDMuMDE1IDEgMSAwIDAgMSAuNDc0IDEuNjhsLTEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxLTMuNDE0IDBMOC42MSAxOS42MWExIDEgMCAwIDAtMS42OC40NzQgMi41IDIuNSAwIDEgMS0zLjAxNC0zLjAxNSAxIDEgMCAwIDAgLjQ3NC0xLjY4bC0xLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwLTMuNDE0TDQuMzkgOC42MWExIDEgMCAwIDEgMS42OC40NzQgMi41IDIuNSAwIDEgMCAzLjAxNC0zLjAxNSAxIDEgMCAwIDEtLjQ3NC0xLjY4bDEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDMuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQeXJhbWlkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41IDE2Ljg4YTEgMSAwIDAgMS0uMzItMS40M2w5LTEzLjAyYTEgMSAwIDAgMSAxLjY0IDBsOSAxMy4wMWExIDEgMCAwIDEtLjMyIDEuNDRsLTguNTEgNC44NmEyIDIgMCAwIDEtMS45OCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBRckNvZGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMTYiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2aC0zYTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YzYTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTEiIH1dCiAgICBdOwogICAgdmFyIFF1b3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgM2EyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMiAxIDEgMCAwIDEgMSAxdjFhMiAyIDAgMCAxLTIgMiAxIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMSA2IDYgMCAwIDAgNi02VjVhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmFiYml0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDIuMjQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggMjFoLThhNCA0IDAgMCAxLTQtNCA3IDcgMCAwIDEgNy03aC4yTDkuNiA2LjRhMSAxIDAgMSAxIDIuOC0yLjhMMTUuOCA3aC4yYzMuMyAwIDYgMi43IDYgNnYxYTIgMiAwIDAgMS0yIDJoLTFhMyAzIDAgMCAwLTMgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4LjU0VjRhMiAyIDAgMSAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjEyIDEyLjUyNGEzIDMgMCAxIDAtMS42IDQuMyIgfV0KICAgIF07CiAgICB2YXIgUmFkYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4wNyA0LjkzQTEwIDEwIDAgMCAwIDYuOTkgMy4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuMjkgOS42MkExMCAxMCAwIDEgMCAyMS4zMSA4LjM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjI0IDcuNzZBNiA2IDAgMSAwIDguMjMgMTYuNjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5IDExLjY2QTYgNiAwIDAgMSAxNS43NyAxNi42NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEwLjU5IDUuNjYtNS42NiIgfV0KICAgIF07CiAgICB2YXIgUmFkaWF0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE1LjQ2NDFhNCA0IDAgMCAxLTQgMEw3LjUyNzg2IDE5Ljc0NTk3IEEgMSAxIDAgMCAwIDcuOTkzMDMgMjEuMTYyMTEgMTAgMTAgMCAwIDAgMTYuMDA2OTcgMjEuMTYyMTEgMSAxIDAgMCAwIDE2LjQ3MjE0IDE5Ljc0NTk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAxMmE0IDQgMCAwIDAtMi0zLjQ2NGwyLjQ3Mi00LjI4MmExIDEgMCAwIDEgMS40Ni0uMzA1IDEwIDEwIDAgMCAxIDQuMDA2IDYuOTRBMSAxIDAgMCAxIDIxIDEyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDEyYTQgNCAwIDAgMSAyLTMuNDY0TDcuNTI4IDQuMjU0YTEgMSAwIDAgMC0xLjQ2LS4zMDUgMTAgMTAgMCAwIDAtNC4wMDYgNi45NEExIDEgMCAwIDAgMyAxMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJhZGljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEyaDMuMjhhMSAxIDAgMCAxIC45NDguNjg0bDIuMjk4IDcuOTM0YS41LjUgMCAwIDAgLjk2LS4wNDRMMTMuODIgNC43NzFBMSAxIDAgMCAxIDE0Ljc5MiA0SDIxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBSYWRpb1JlY2VpdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvVG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkgMTYuMUMxIDEyLjIgMSA1LjggNC45IDEuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjggNC43YTYuMTQgNi4xNCAwIDAgMC0uOCA3LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjIgNC44YzIgMiAyLjI2IDUuMTEuOCA3LjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEgMS45YTkuOTYgOS45NiAwIDAgMSAwIDE0LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE4aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyMiA0LTExIDQgMTEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMjQ3IDcuNzYxYTYgNiAwIDAgMSAwIDguNDc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjA3NSA0LjkzM2ExMCAxMCAwIDAgMSAwIDE0LjEzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkyNSAxOS4wNjdhMTAgMTAgMCAwIDEgMC0xNC4xMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy43NTMgMTYuMjM5YTYgNiAwIDAgMSAwLTguNDc4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJhZGl1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjM0IDE3LjUyYTEwIDEwIDAgMSAwLTIuODIgMi44MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEzLjQxIDQuMTggNC4xOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBSYWlsU3ltYm9sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDloMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMjAtNS01IDYtNi01LTUiIH1dCiAgICBdOwogICAgdmFyIFJhaW5ib3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2ExMCAxMCAwIDAgMC0yMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdhNiA2IDAgMCAxIDEyIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdhMiAyIDAgMCAxIDQgMCIgfV0KICAgIF07CiAgICB2YXIgUmF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjIzNiAxOGEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA0Ljk4OGEzIDMgMCAxIDAtNS4yIDIuMDUyQTcgNyAwIDAgMCA0IDE0LjAxNSA0IDQgMCAwIDAgOCAxOCIgfV0KICAgIF07CiAgICB2YXIgUmF0aW8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdENlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjRhNCA0IDAgMSAwIDAgNS4yIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0RXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRJbmRpYW5SdXBlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNSA4IDE1aDFhNCA0IDAgMCAwIDAtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaDgiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRKYXBhbmVzZVllbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNyAzIDN2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTFoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRQb3VuZFN0ZXJsaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWOS41YTIuNSAyLjUgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoNyIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNWEyIDIgMCAxIDAgMC00aC0zdjEwIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0U3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDExaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0VGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOEg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAzYTEgMSAwIDAgMSAxLTEgMS4zIDEuMyAwIDAgMSAuNy4ybC45MzMuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzQtLjZhMS4zIDEuMyAwIDAgMSAxLjQgMGwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTMzLS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzNC42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNkExLjMgMS4zIDAgMCAxIDE5IDJhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxIDEuMyAxLjMgMCAwIDEtLjctLjJsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzNC42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzQtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtLjcuMiAxIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmVjZWlwdFR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA4LTYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6IiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNXYtMTEiIH1dCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUNpcmNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDR2MTZIM2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlRWxsaXBzaXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBSZWN0YW5nbGVIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUdvZ2dsZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCA2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0xLjYtLjhsLTEuNi0yLjEzYTEgMSAwIDAgMC0xLjYgMEw5LjYgMTcuMkEyIDIgMCAwIDEgOCAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlVmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjeWNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTlINC44MTVhMS44MyAxLjgzIDAgMCAxLTEuNTctLjg4MSAxLjc4NSAxLjc4NSAwIDAgMS0uMDA0LTEuNzg0TDcuMTk2IDkuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWg4LjIwM2ExLjgzIDEuODMgMCAwIDAgMS41NTYtLjg5IDEuNzg0IDEuNzg0IDAgMCAwIDAtMS43NzVsLTEuMjI2LTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTYtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjI5MyAxMy41OTYgNy4xOTYgOS41IDMuMSAxMC41OTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS4zNDQgNS44MTEgMS4wOTMtMS44OTJBMS44MyAxLjgzIDAgMCAxIDExLjk4NSAzYTEuNzg0IDEuNzg0IDAgMCAxIDEuNTQ2Ljg4OGwzLjk0MyA2Ljg0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4zNzggOS42MzMgNC4wOTYgMS4wOTggMS4wOTctNC4wOTYiIH1dCiAgICBdOwogICAgdmFyIFJlZG9Eb3QgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDd2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE3YTkgOSAwIDAgMSA5LTkgOSA5IDAgMCAxIDYgMi4zbDMgMi43IiB9XQogICAgXTsKICAgIHZhciBSZWRvMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE0IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOUg5LjVBNS41IDUuNSAwIDAgMCA0IDE0LjVBNS41IDUuNSAwIDAgMCA5LjUgMjBIMTMiIH1dCiAgICBdOwogICAgdmFyIFJlZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3djZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjd0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dCiAgICBdOwogICAgdmFyIFJlZnJlc2hDd09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhMMTguNzQgNS43NEE5Ljc1IDkuNzUgMCAwIDAgMTIgM0MxMSAzIDEwLjAzIDMuMTYgOS4xMyAzLjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJDMyA5LjUxIDQgNy4yNiA1LjY0IDUuNjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiAyLjI2IDIuMjZBOS43NSA5Ljc1IDAgMCAwIDEyIDIxYzIuNDkgMCA0Ljc0LTEgNi4zNi0yLjY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYzAgMS0uMTYgMS45Ny0uNDcgMi44NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBSZWZyZXNoQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2NWgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmlnZXJhdG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2YTQgNCAwIDAgMSA0LTRoNmE0IDQgMCAwIDEgNCA0djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN3Y2IiB9XQogICAgXTsKICAgIHZhciBSZWdleCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNjcgNS41IDguNjYgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi42NyAxMC41IDguNjYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTJ6IiB9XQogICAgXTsKICAgIHZhciBSZW1vdmVGb3JtYXR0aW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjRoMTZ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNCA4IDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS01IDUiIH1dCiAgICBdOwogICAgdmFyIFJlcGVhdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIiB9XQogICAgXTsKICAgIHZhciBSZXBlYXQxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMiA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTF2LTFhNCA0IDAgMCAxIDQtNGgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIyLTQtNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2MWE0IDQgMCAwIDEtNCA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTBoMXY0IiB9XQogICAgXTsKICAgIHZhciBSZXBlYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0KICAgIF07CiAgICB2YXIgUmVwbGFjZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGExIDEgMCAwIDEtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBSZXBsYWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwYTEgMSAwIDAgMS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNGExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDcgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIxNCIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFJlcGx5QWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOHYtMmE0IDQgMCAwIDAtNC00SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNy01LTUgNS01IiB9XQogICAgXTsKICAgIHZhciBSZXBseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4di0yYTQgNCAwIDAgMC00LTRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE3LTUtNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIFJld2luZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZhMiAyIDAgMCAwLTMuNDE0LTEuNDE0bC02IDZhMiAyIDAgMCAwIDAgMi44MjhsNiA2QTIgMiAwIDAgMCAxMiAxOHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNmEyIDIgMCAwIDAtMy40MTQtMS40MTRsLTYgNmEyIDIgMCAwIDAgMCAyLjgyOGw2IDZBMiAyIDAgMCAwIDIyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgUmliYm9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTEuMjJDMTEgOS45OTcgMTAgOSAxMCA4YTIgMiAwIDAgMSA0IDBjMCAxLS45OTggMi4wMDItMi4wMSAzLjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE4IDIuNTctMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjQzIDkuMDE2YTcgNyAwIDAgMSAxMS41MDctLjAwOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjM1IDE0LjUzIDEyIDExLjIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMzUgMTQuNTNDNy43MjggMTIuMjQ2IDYgMTAuMjIxIDYgN2E2IDUgMCAwIDEgMTIgMGMtLjAwNSAzLjIyLTEuNzc4IDUuMjM1LTMuNDMgNy41bDMuNTU3IDQuNTI3YTEgMSAwIDAgMS0uMjAzIDEuNDNsLTEuODk0IDEuMzZhMSAxIDAgMCAxLTEuMzg0LS4yMTVMMTIgMThsLTIuNjc5IDMuNTkzYTEgMSAwIDAgMS0xLjM5LjIxM2wtMS44NjUtMS4zNTNhMSAxIDAgMCAxLS4yMDMtMS40MjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBSb2NrZXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjUgMTYuNWMtMS41IDEuMjYtMiA1LTIgNXMzLjc0LS41IDUtMmMuNzEtLjg0LjctMi4xMy0uMDktMi45MWEyLjE4IDIuMTggMCAwIDAtMi45MS0uMDl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyIDE1LTMtM2EyMiAyMiAwIDAgMSAyLTMuOTVBMTIuODggMTIuODggMCAwIDEgMjIgMmMwIDIuNzItLjc4IDcuNS02IDExYTIyLjM1IDIyLjM1IDAgMCAxLTQgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMkg0cy41NS0zLjAzIDItNGMxLjYyLTEuMDggNSAwIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY1czMuMDMtLjU1IDQtMmMxLjA4LTEuNjIgMC01IDAtNSIgfV0KICAgIF07CiAgICB2YXIgUm9ja2luZ0NoYWlyID0gWwogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjUgMiA2LjUgMTIuNSAxOCAxMi41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkuNSIsIHgyOiAiNS41IiwgeTE6ICIxMi41IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTguNSIsIHkxOiAiMTIuNSIsIHkyOiAiMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi43NSAxOGExMyAxMyAwIDAgMCAxOC41IDAiIH1dCiAgICBdOwogICAgdmFyIFJvbGxlckNvYXN0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5di03LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOVY5YTQgNCAwIDAgMSA0LTRjMiAwIDQgMS4zMyA2IDRzNCA0IDYgNGE0IDQgMCAxIDAtMy02LjY1IiB9XQogICAgXTsKICAgIHZhciBSb3NlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBoLTFhNCA0IDAgMSAxIDQtNHYuNTM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZoMWE0IDQgMCAwIDEgMS40MiA3Ljc0bC0yLjI5Ljg3YTYgNiAwIDAgMS01LjMzOS0xMC42OGwyLjA2OS0xLjMxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNC41IDE3YzIuOC0uNSA0LjQgMCA1LjUuOHMxLjggMi4yIDIuMyAzLjdjLTIgLjQtMy41LjQtNC44LS4zLTEuMi0uNi0yLjMtMS45LTMtNC4yIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljc3IDEyQzQgMTUgMiAyMiAyIDIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgUm90YXRlM2QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi40NjYgNy41QzE1LjY0MyA0LjIzNyAxMy45NTIgMiAxMiAyIDkuMjM5IDIgNyA2LjQ3NyA3IDEyczIuMjM5IDEwIDUgMTBjLjM0MiAwIC42NzctLjA2OSAxLS4yIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjE5NCAxMy43MDcgMy44MTQgMS44Ni0xLjg2IDMuODE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE1LjU3Yy0xLjgwNC44ODUtNC4yNzQgMS40My03IDEuNDMtNS41MjMgMC0xMC0yLjIzOS0xMC01czQuNDc3LTUgMTAtNWM0LjgzOCAwIDguODczIDEuNzE4IDkuOCA0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBSb3RhdGVDY3dLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc0IDkuNzQgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJvdGF0ZUNjd1NxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0KICAgIF07CiAgICB2YXIgUm90YXRlQ3dTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDEgMS05LTljMi41MiAwIDQuOTMgMSA2Ljc0IDIuNzRMMjEgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dCiAgICBdOwogICAgdmFyIFJvdXRlT2ZmID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMiA1LjJBMy41IDMuNTMgMCAwIDAgNi41IDEySDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1aC00LjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTkiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDguNWEzLjUgMy41IDAgMCAwIDAtN2gtMTFhMy41IDMuNSAwIDAgMSAwLTdIMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAxIDE4SDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMDEgMThIMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTB2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44NCA3LjE3YTQgNCAwIDAgMC01LjY2IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNjYgNC4zNGE4IDggMCAwIDAtMTEuMzEgMCIgfV0KICAgIF07CiAgICB2YXIgUm93czIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XQogICAgXTsKICAgIHZhciBSb3dzMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNUgzIiB9XQogICAgXTsKICAgIHZhciBSb3dzNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcuNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTYuNUgzIiB9XQogICAgXTsKICAgIHZhciBSc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExYTkgOSAwIDAgMSA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0YTE2IDE2IDAgMCAxIDE2IDE2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUnVsZXJEaW1lbnNpb25MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxMiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBSdXNzaWFuUnVibGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDExaDhhNCA0IDAgMCAwIDAtOEg5djE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoOCIgfV0KICAgIF07CiAgICB2YXIgUnVsZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zIDE1LjNhMi40IDIuNCAwIDAgMSAwIDMuNGwtMi42IDIuNmEyLjQgMi40IDAgMCAxLTMuNCAwTDIuNyA4LjdhMi40MSAyLjQxIDAgMCAxIDAtMy40bDIuNi0yLjZhMi40MSAyLjQxIDAgMCAxIDMuNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDEyLjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExLjUgOS41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgNi41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy41IDE1LjUgMi0yIiB9XQogICAgXTsKICAgIHZhciBTYWxhZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM4IDEyYTIuNCAyLjQgMCAwIDEtLjQtNC43NyAyLjQgMi40IDAgMCAxIDMuMi0yLjc3IDIuNCAyLjQgMCAwIDEgMy40Ny0uNjMgMi40IDIuNCAwIDAgMSAzLjM3IDMuMzcgMi40IDIuNCAwIDAgMS0xLjEgMy43IDIuNTEgMi41MSAwIDAgMSAuMDMgMS4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDEyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC45IDcuMjVBMy45OSAzLjk5IDAgMCAwIDQgMTBjMCAuNzMuMiAxLjQxLjU0IDIiIH1dCiAgICBdOwogICAgdmFyIFNhaWxib2F0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWgxNmExIDEgMCAwIDEgMSAxIDQgNCAwIDAgMS00IDR6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNOS4xNTkgMi40NmExIDEgMCAwIDEgMS41MjEtLjE5M2w5Ljk3NyA4Ljk4QTEgMSAwIDAgMSAyMCAxM0g0YTEgMSAwIDAgMS0uODI0LTEuNTY3eiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNhbmR3aWNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTUuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjQiLCB4OiAiMiIsIHk6ICIxMSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgU2F0ZWxsaXRlRGlzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2E2IDYgMCAwIDAtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMiIH1dCiAgICBdOwogICAgdmFyIFNhdGVsbGl0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEzLjUgNi41LTMuMTQ4LTMuMTQ4YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBMNi4zNTIgNS42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNEw5LjUgMTAuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDcuNSAxOSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3LjUgMTAuNSAzLjE0OCAzLjE0OGExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0yLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMS0xLjcwNCAwTDEzLjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxYTYgNiAwIDAgMC02LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zNTIgMTAuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw0LjI5Ni00LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0bC0yLjI5Ni0yLjI5NmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2F1ZGlSaXlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDE5LjUtNS41IDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDR2MTEuMjJhMSAxIDAgMCAwIDEuMjQyLjk3TDIwIDE1LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi45NzggMTkuMzUxIDUuNTQ5LTEuMzYzQTIgMiAwIDAgMCAxMCAxNlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwIDQgMTMuNSIgfV0KICAgIF07CiAgICB2YXIgU2F2ZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2M2ExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTh2LTZhMSAxIDAgMCAwLTEtMWgtNmExIDEgMCAwIDAtMSAxdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJINGEyIDIgMCAwIDEtMi0yVjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxOGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5LjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2bDIuODI4IDIuODI4QTIgMiAwIDAgMSAyMiA2LjgyOFYxNmEyIDIgMCAwIDEtMi4wMSAyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2F2ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDhhMSAxIDAgMCAwLTEgMXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNDEgMjAuNDFBMiAyIDAgMCAxIDE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAuNTktMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yOS41IDExLjVzNSA1IDQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoNi4yYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTUiIH1dCiAgICBdOwogICAgdmFyIFNhdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4yIDNhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi03YTEgMSAwIDAgMC0xLTFIOGExIDEgMCAwIDAtMSAxdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3IiB9XQogICAgXTsKICAgIHZhciBTY2FsZTNkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3djExYTEgMSAwIDAgMCAxIDFoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4yOTMgMTguNzA3IDExIDEzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFNjYWxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNUg5di01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDMgOSAxNSIgfV0KICAgIF07CiAgICB2YXIgU2NhbkV5ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2NhbkJhcmNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbkZhY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDloLjAxIiB9XQogICAgXTsKICAgIHZhciBTY2FuSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDQuMTcyIDQuMzA2bC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ0OSAweiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjYW5MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dCiAgICBdOwogICAgdmFyIFNjYW5RckNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMnY0YTEgMSAwIDAgMS0xIDFoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA4VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNjYW5TZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBTY2FuVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0KICAgIF07CiAgICB2YXIgU2NhbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0KICAgIF07CiAgICB2YXIgU2Nob29sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDcuMTA2LTMuNzlhMiAyIDAgMCAxIDEuNzg4IDBMMjAgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDV2MTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTY2lzc29yc0xpbmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjQyIDkuNDIgOCAxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2LTguNTggOC41OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjE2IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuOCAxNC44IDE0IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XQogICAgXTsKICAgIHZhciBTY2lzc29ycyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTIgOC4xMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0IDguMTIgMTUuODgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjggMTQuOCAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgU2Nvb3RlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRoLTMuNWwyIDExLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOTUgMTdoNS4xNDJjLjUyMyAwIC45NS0uNDA2IDEuMDYzLS45MTZhNi41IDYuNSAwIDAgMSA1LjM0NS01LjAwOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNC41IiwgY3k6ICIxNy41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgU2NyZWVuU2hhcmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMy01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMyA1IDUiIH1dCiAgICBdOwogICAgdmFyIFNjcmVlblNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDggNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNXY1IiB9XQogICAgXTsKICAgIHZhciBTY3JvbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjcm9sbFRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2VhcmNoQWxlcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDIgMiA0LTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTMuNSAyLTIuNS0yLTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOC41IDcgMTFsMiAyLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoU2xhc2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41IDguNS01IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4LjUgNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zNC00LjM0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dCiAgICBdOwogICAgdmFyIFNlY3Rpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCIgfV0KICAgIF07CiAgICB2YXIgU2VuZEhvcml6b250YWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjcxNCAzLjA0OGEuNDk4LjQ5OCAwIDAgMC0uNjgzLjYyN2wyLjg0MyA3LjYyN2EyIDIgMCAwIDEgMCAxLjM5NmwtMi44NDIgNy42MjdhLjQ5OC40OTggMCAwIDAgLjY4Mi42MjdsMTgtOC41YS41LjUgMCAwIDAgMC0uOTA0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDE2IiB9XQogICAgXTsKICAgIHZhciBTZW5kVG9CYWNrID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2MWEyIDIgMCAwIDAgMiAyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN2gxYTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgU2VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjUzNiAyMS42ODZhLjUuNSAwIDAgMCAuOTM3LS4wMjRsNi41LTE5YS40OTYuNDk2IDAgMCAwLS42MzUtLjYzNWwtMTkgNi41YS41LjUgMCAwIDAtLjAyNC45MzdsNy45MyAzLjE4YTIgMiAwIDAgMSAxLjExMiAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS44NTQgMi4xNDctMTAuOTQgMTAuOTM5IiB9XQogICAgXTsKICAgIHZhciBTZXBhcmF0b3JWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgU2VwYXJhdG9ySG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgU2VydmVyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTQuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjE0OCA5LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41MyAxNS42OTYtLjM4Mi0uOTI0YTMgMyAwIDEgMS0yLjI5Ni01LjU0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTAuODUyLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMy4xNDguOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJDcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNi00IDZoNmwtNCA2IiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMTNhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAgMi41IDIuNUMyIDIgMiAyLjUgMiA1djNhMiAyIDAgMCAwIDIgMmg2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN3YtMWEyIDIgMCAwIDAtMi0yaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTYuNWwxLS41LjUuNS04LThINHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYuMDEiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICAgIHZhciBTZXR0aW5nczIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN0g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDdoLTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgU2V0dGluZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBTaGFwZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjMgMTBhLjcuNyAwIDAgMS0uNjI2LTEuMDc5TDExLjQgM2EuNy43IDAgMCAxIDEuMTk4LS4wNDNMMTYuMyA4LjlhLjcuNyAwIDAgMS0uNTcyIDEuMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XQogICAgXTsKICAgIHZhciBTaGFyZTIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE5IiwgcjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOC41OSIsIHgyOiAiMTUuNDIiLCB5MTogIjEzLjUxIiwgeTI6ICIxNy40OSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNS40MSIsIHgyOiAiOC41OSIsIHkxOiAiNi41MSIsIHkyOiAiMTAuNDkiIH1dCiAgICBdOwogICAgdmFyIFNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCIgfV0KICAgIF07CiAgICB2YXIgU2hlZXQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkiLCB5MTogIjkiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIFNoZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTFhMiAyIDAgMSAxLTQgMCA0IDQgMCAwIDEgOCAwIDYgNiAwIDAgMS0xMiAwIDggOCAwIDAgMSAxNiAwIDEwIDEwIDAgMSAxLTIwIDAgMTEuOTMgMTEuOTMgMCAwIDEgMi40Mi03LjIyIDIgMiAwIDEgMSAzLjE2IDIuNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaWVsZEFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yNDMgNS4yMSAxNC4zOSAxMi40NzIiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRFbGxpcHNpcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZEhhbGYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMlYyIiB9XQogICAgXTsKICAgIHZhciBTaGllbGRNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUgNWExIDEgMCAwIDAtMSAxdjdjMCA1IDMuNSA3LjUgNy42NyA4Ljk0YTEgMSAwIDAgMCAuNjcuMDFjMi4zNS0uODIgNC40OC0xLjk3IDUuOS0zLjcxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMzA5IDMuNjUyQTEyLjI1MiAxMi4yNTIgMCAwIDAgMTEuMjQgMi4yOGExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF2N2E5Ljc4NCA5Ljc4NCAwIDAgMS0uMDggMS4yNjQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaWVsZFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkVXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZFggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaGlwV2hlZWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDUtNS4yMyA1LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC03LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTktNS4yMy01LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0LjVWMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjMgMTMuNzcgNSAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yMyAxMC4yMyA1IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBTaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTAuMTg5VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM1Y3YTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggMjBBMTEuNiAxMS42IDAgMCAwIDIxIDE0bC04LjE4OC0zLjYzOWEyIDIgMCAwIDAtMS42MjQgMEwzIDE0YTExLjYgMTEuNiAwIDAgMCAyLjgxIDcuNzYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMXMxLjIgMSAyLjUgMWMyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMzggMy40NiAxNiAyYTQgNCAwIDAgMS04IDBMMy42MiAzLjQ2YTIgMiAwIDAgMC0xLjM0IDIuMjNsLjU4IDMuNDdhMSAxIDAgMCAwIC45OS44NEg2djEwYzAgMS4xLjkgMiAyIDJoOGEyIDIgMCAwIDAgMi0yVjEwaDIuMTVhMSAxIDAgMCAwIC45OS0uODRsLjU4LTMuNDdhMiAyIDAgMCAwLTEuMzQtMi4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNob3BwaW5nQmFnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBhNCA0IDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwMyA2LjAzNGgxNy43OTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG9wcGluZ0Jhc2tldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDExLTEgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMS00LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjUgMTEgMS42IDcuNGEyIDIgMCAwIDAgMiAxLjZoOS44YTIgMiAwIDAgMCAyLTEuNmwxLjctNy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxNS41aDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgNC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgMSA5IiB9XQogICAgXTsKICAgIHZhciBTaG9wcGluZ0NhcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIxIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMjEiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIuMDUgMi4wNWgybDIuNjYgMTIuNDJhMiAyIDAgMCAwIDIgMS41OGg5Ljc4YTIgMiAwIDAgMCAxLjk1LTEuNTdsMS42NS03LjQzSDUuMTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG92ZWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS41NiA0LjU2YTEuNSAxLjUgMCAwIDEgMCAyLjEyMmwtLjQ3LjQ3YTMgMyAwIDAgMS00LjIxMi0uMDMgMyAzIDAgMCAxIDAtNC4yNDNsLjQ0LS40NGExLjUgMS41IDAgMCAxIDIuMTIxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjJhMSAxIDAgMCAxLTEtMXYtMy41ODZhMSAxIDAgMCAxIC4yOTMtLjcwN2wzLjM1NS0zLjM1NWExLjIwNSAxLjIwNSAwIDAgMSAxLjcwNCAwbDMuMjk2IDMuMjk2YTEuMjA1IDEuMjA1IDAgMCAxIDAgMS43MDRsLTMuMzU1IDMuMzU1YTEgMSAwIDAgMS0uNzA3LjI5M3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSA3Ljg3OS03Ljg3OCIgfV0KICAgIF07CiAgICB2YXIgU2hvd2VySGVhZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgNCAyLjUgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgNi41YTQuOTUgNC45NSAwIDAgMC03IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNSA1IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE3di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTN2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwdi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTR2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExdi4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hyZWRkZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTNWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJ2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTl2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjB2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwdi0zIiB9XQogICAgXTsKICAgIHZhciBTaHJpbXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJjLjUtLjUgMS4xMi0xIDIuNS0xLTEuMzggMC0yLS41LTIuNS0xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDJhMy4yOCAzLjI4IDAgMCAxLTMuMjI3IDEuNzk4bC02LjE3LS41NjFBMi4zODcgMi4zODcgMCAxIDAgNC4zODcgOEgxNS41YTEgMSAwIDAgMSAwIDEzIDEgMSAwIDAgMCAwLTVIMTJhNyA3IDAgMCAxLTctN1Y4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhhOC41IDguNSAwIDAgMSAwIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjMiAwIDQuNS00IDQtNiIgfV0KICAgIF07CiAgICB2YXIgU2hyaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5LjhWMTVtMCAwSDQuMk05IDE1bC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNC4yVjltMCAwaDQuOE0xNSA5bDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgU2h1ZmZsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMiA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoMS45NzNhNCA0IDAgMCAwIDMuMy0xLjdsNS40NTQtOC42YTQgNCAwIDAgMSAzLjMtMS43SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmgxLjk3MmE0IDQgMCAwIDEgMy42IDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNi4wNDFhNCA0IDAgMCAxLTMuMy0xLjhsLS4zNTktLjQ1IiB9XQogICAgXTsKICAgIHZhciBTaHJ1YiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi01LjE3MmEyIDIgMCAwIDAtLjU4Ni0xLjQxNEw5LjUgMTMuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDE0LjUgMTIgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOC44QTYgNiAwIDAgMSAxMy44IDIwSDEwQTYuNSA2LjUgMCAwIDEgNyA4YTUgNSAwIDAgMSAxMCAweiIgfV0KICAgIF07CiAgICB2YXIgU2lnbWEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNpZ25hbEhpZ2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwVjgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbExvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbE1lZGl1bSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbFplcm8gPSBbWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XV07CiAgICB2YXIgU2lnbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hdHVyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxIDE3LTIuMTU2LTEuODY4QS41LjUgMCAwIDAgMTggMTUuNXYuNWExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTFjMC0yLjU0NS0zLjk5MS0zLjk3LTguNS00YTEgMSAwIDAgMCAwIDVjNC4xNTMgMCA0Ljc0NS0xMS4yOTUgNS43MDgtMTMuNWEyLjUgMi41IDAgMSAxIDMuMzEgMy4yODQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWgxOCIgfV0KICAgIF07CiAgICB2YXIgU2lnbnBvc3RCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5SDRMMiA3bDItMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVoNmwyIDItMiAyaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyVjRhMiAyIDAgMSAxIDQgMHYxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25wb3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggNmEyIDIgMCAwIDEgMS4zODcuNTZsMi4zMDcgMi4yMmExIDEgMCAwIDEgMCAxLjQ0bC0yLjMwNyAyLjIyQTIgMiAwIDAgMSAxOCAxM0g2YTIgMiAwIDAgMS0xLjM4Ny0uNTZsLTIuMzA2LTIuMjJhMSAxIDAgMCAxIDAtMS40NGwyLjMwNi0yLjIyQTIgMiAwIDAgMSA2IDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaXJlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTh2LTZhNSA1IDAgMSAxIDEwIDB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC41IDQuNSAxOCA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MjkgNC45MjkuNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY2IiB9XQogICAgXTsKICAgIHZhciBTa2lwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3Ljk3MSA0LjI4NUEyIDIgMCAwIDEgMjEgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwVjQiIH1dCiAgICBdOwogICAgdmFyIFNraXBGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNHYxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTYuMDI5IDQuMjg1QTIgMiAwIDAgMCAzIDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNrdWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNSAxNy0uNS0xLS41IDFoMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAgMS41Ni0zLjI1IDggOCAwIDEgMC0xMS4xMiAwQTIgMiAwIDAgMCA4IDIwdjFhMSAxIDAgMCAwIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFNsYWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMiIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDguNVYxMGgxLjVBMS41IDEuNSAwIDEgMCAxOSA4LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTUuNVYxNEgzLjVBMS41IDEuNSAwIDEgMCA1IDE1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMTQiLCB5OiAiMTMiLCByeDogIjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDE5SDE0djEuNWExLjUgMS41IDAgMSAwIDEuNS0xLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMiIsIHk6ICI4Iiwgcng6ICIxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDVIMTBWMy41QTEuNSAxLjUgMCAxIDAgOC41IDUiIH1dCiAgICBdOwogICAgdmFyIFNsYXNoID0gW1sicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dXTsKICAgIHZhciBTbGljZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDE2LjU4NlYxOWExIDEgMCAwIDEtMSAxSDJMMTguMzcgMy42M2ExIDEgMCAxIDEgMyAzbC05LjY2MyA5LjY2M2ExIDEgMCAwIDEtMS40MTQgMEw4IDE0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTbGlkZXJzSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDN2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMyIgfV0KICAgIF07CiAgICB2YXIgU2xpZGVyc1ZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdi05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEyVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjF2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi03IiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lQ2hhcmdpbmcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjIwIiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi42NjcgOCAxMCAxMmg0bC0yLjY2NyA0IiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lTmZjID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4LjMyYTcuNDMgNy40MyAwIDAgMSAwIDcuMzYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0KICAgIF07CiAgICB2YXIgU21hcnRwaG9uZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNSIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU21pbGVQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDJ2NiIgfV0KICAgIF07CiAgICB2YXIgU21pbGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBTbmFpbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNhNiA2IDAgMSAwIDEyIDAgNCA0IDAgMSAwLTggMCAyIDIgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgxMmM0LjQgMCA4LTMuNiA4LThWN2EyIDIgMCAxIDAtNCAwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMyAxOS4xIDUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzIDIwLjkgNS4yIiB9XQogICAgXTsKICAgIHZhciBTb2FwRGlzcGVuc2VyRHJvcGxldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJIN2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjI5IDE0Ljc2QTYuNjcgNi42NyAwIDAgMSAxNyAxMWE2LjYgNi42IDAgMCAxLTIuMjkgMy43NmMtMS4xNS45Mi0xLjcxIDIuMDQtMS43MSAzLjE5IDAgMi4yMiAxLjggNC4wNSA0IDQuMDVzNC0xLjgzIDQtNC4wNWMwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjA3IDIxSDZhMiAyIDAgMCAxLTItMnYtN2EyIDIgMCAwIDEgMi0yaDdWN2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmg2LjVMMTAgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMC0xLjUgMiAxLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNi41TDE0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTAgMS41IDJMNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIxIDMtNi0xLjUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDMgMyA2aDQiIH1dCiAgICBdOwogICAgdmFyIFNvZmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5VjZhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNWEyIDIgMCAwIDAtNCAwdjEuNWEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHY5IiB9XQogICAgXTsKICAgIHZhciBTb2xhclBhbmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjI4IDE0LTQuNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMi0xLjU1OC00SDQuNTU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTB2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjI0NSAxNS4wNEEyIDIgMCAwIDEgOCAxNGgxMmExIDEgMCAwIDEgLjg2NCAxLjUwNWwtMy4xMSA1LjQ1N0EyIDIgMCAwIDEgMTYgMjJINGExIDEgMCAwIDEtLjg2My0xLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyYTQgNCAwIDAgMS00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC42NiA3LjY2IDEuNDEgMS40MSIgfV0KICAgIF07CiAgICB2YXIgU291cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxYTkgOSAwIDAgMCA5LTlIM2E5IDkgMCAwIDAgOSA5WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjUgMTIgMjIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yNSAzYy4yNy4xLjguNTMuNzUgMS4zNi0uMDYuODMtLjkzIDEuMi0xIDIuMDItLjA1Ljc4LjM0IDEuMjQuNzMgMS42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAzYy4yNy4xLjguNTMuNzQgMS4zNi0uMDUuODMtLjkzIDEuMi0uOTggMi4wMi0uMDYuNzguMzMgMS4yNC43MiAxLjYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjUgM2MuMjcuMS44LjUzLjc1IDEuMzYtLjA2LjgzLS45MyAxLjItMSAyLjAyLS4wNS43OC4zNCAxLjI0Ljc0IDEuNjIiIH1dCiAgICBdOwogICAgdmFyIFNwYWNlID0gW1sicGF0aCIsIHsgZDogIk0yMiAxN3YxYzAgLjUtLjUgMS0xIDFIM2MtLjUgMC0xLS41LTEtMXYtMSIgfV1dOwogICAgdmFyIFNwYWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE0LjQ5OWE1LjUgNS41IDAgMCAwIDkuNTkxIDMuNjc1LjYuNiAwIDAgMSAuODE4LjAwMUE1LjUgNS41IDAgMCAwIDIyIDE0LjVjMC0yLjI5LTEuNS00LTMtNS41bC01LjQ5Mi01LjMxMmEyIDIgMCAwIDAtMy0uMDJMNSA4Ljk5OWMtMS41IDEuNS0zIDMuMi0zIDUuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3BhcmtsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3BhcmtsZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMTcgMi44MTRhMSAxIDAgMCAxIDEuOTY2IDBsMS4wNTEgNS41NThhMiAyIDAgMCAwIDEuNTk0IDEuNTk0bDUuNTU4IDEuMDUxYTEgMSAwIDAgMSAwIDEuOTY2bC01LjU1OCAxLjA1MWEyIDIgMCAwIDAtMS41OTQgMS41OTRsLTEuMDUxIDUuNTU4YTEgMSAwIDAgMS0xLjk2NiAwbC0xLjA1MS01LjU1OGEyIDIgMCAwIDAtMS41OTQtMS41OTRsLTUuNTU4LTEuMDUxYTEgMSAwIDAgMSAwLTEuOTY2bDUuNTU4LTEuMDUxYTIgMiAwIDAgMCAxLjU5NC0xLjU5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDRoLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGVha2VyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTQiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dCiAgICBdOwogICAgdmFyIFNwZWVjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguOCAyMHYtNC4xbDEuOS4yYTIuMyAyLjMgMCAwIDAgMi4xNjQtMi4xVjguM0E1LjM3IDUuMzcgMCAwIDAgMiA4LjI1YzAgMi44LjY1NiAzLjA1NCAxIDQuNTVhNS43NyA1Ljc3IDAgMCAxIC4wMjkgMi43NThMMiAyMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS44IDE3LjhhNy41IDcuNSAwIDAgMCAuMDAzLTEwLjYwMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNWEzLjUgMy41IDAgMCAwLS4wMjUtNC45NzUiIH1dCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjFjMS4xIDAgMS4xLTEgMi4zLTFzMS4xIDEgMi4zIDFjMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3BsaW5lUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGxpbmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0KICAgIF07CiAgICB2YXIgU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi04LjNhNCA0IDAgMCAwLTEuMTcyLTIuODcyTDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5IDYtNiIgfV0KICAgIF07CiAgICB2YXIgU3Bvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMy40NCA0LjQ0MiAxNy4wODJBMiAyIDAgMCAwIDQuOTgyIDIxSDE5YTIgMiAwIDAgMCAuNTU4LTMuOTIxbC0xLjExNS0uMzJBMiAyIDAgMCAxIDE3IDE0LjgzN1Y3LjY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcG90bGlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS4yOTUgMTkuNTYyIDE2IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2IDMuNzU4IDIuMDk4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDEyLjUgMy4wMjYtLjU5OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03LjYxIDYuM2EzIDMgMCAwIDAtMy45MiAxLjNsLTEuMzggMi43OWEzIDMgMCAwIDAgMS4zIDMuOTFsNi44OSAzLjU5N2ExIDEgMCAwIDAgMS4zNDItLjQ0N2wzLjEwNi02LjIxMWExIDEgMCAwIDAtLjQ0Ny0xLjM0MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA5VjIiIH1dCiAgICBdOwogICAgdmFyIFNwcmF5Q2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNCIsIHg6ICIxNSIsIHk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE0IDgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxOSA4LTIiIH1dCiAgICBdOwogICAgdmFyIFNwcm91dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDkuNTM2VjdhNCA0IDAgMCAxIDQtNGgxLjVhLjUuNSAwIDAgMSAuNS41VjVhNCA0IDAgMCAxLTQgNCA0IDQgMCAwIDAtNCA0YzAgMiAxIDMgMSA1YTUgNSAwIDAgMS0xIDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5YTUgNSAwIDAgMSA4IDQgNSA1IDAgMCAxLTgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd25MZWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZIOFY4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBY3Rpdml0eSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC0ybC0yIDUtMi0xMC0yIDVINyIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2OEg4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0xlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4LTQgNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXREb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDZhMiAyIDAgMCAwIDItMlY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA5LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMUgzdi02IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd091dFVwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMyA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5VjNoNiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXREb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS05LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NmgtNiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dSaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNiA0LTQtNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd1VwTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZWOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2IDggOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDgtOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXN0ZXJpc2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDE0IDctNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTAgNyA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB5MTogIjMiLCB4MjogIjE5IiwgeTI6ICIzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB5MTogIjUiLCB4MjogIjMiLCB5MjogIjE5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeTE6ICI1IiwgeDI6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHkxOiAiMjEiLCB4MjogIjEwIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHkxOiAiMjEiLCB4MjogIjE1IiwgeTI6ICIyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMyA1IEEyIDIgMCAwIDEgNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAxOSAzIEEyIDIgMCAwIDEgMjEgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNSAyMSBBMiAyIDAgMCAxIDMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIxIDE5IEEyIDIgMCAwIDEgMTkgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoYXJ0R2FudHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDhoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTZoNSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hlY2tCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMC42NTZWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDEyLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGVjayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvblVwID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEYXNoZWRCb3R0b21Db2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41IDggMTJsMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5LjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE1IDMtMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZEJvdHRvbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEYXNoZWRLYW5iYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZFRvcFNvbGlkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURpdmlkZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEb3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVFcXVhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRnVuY3Rpb24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YzIgMCAyLjgtMSAyLjgtMi44VjEwYzAtMiAxLTMuMyAzLjItMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExLjJoNS43IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVLYW5iYW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVMaWJyYXJ5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyAyIDEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk04IDE2VjguNWEuNS41IDAgMCAxIC45LS4zbDIuNyAzLjU5OWEuNS41IDAgMCAwIC44IDBsMi43LTMuNmEuNS41IDAgMCAxIC45LjNWMTYiIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNZW51ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlTWludXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZU1vdXNlUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN3YtMi4zIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTQiLCB4MjogIjE0IiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NSAyLjYyNWExIDEgMCAwIDEgMyAzbC05LjAxMyA5LjAxNGEyIDIgMCAwIDEtLjg1My41MDVsLTIuODczLjg0YS41LjUgMCAwIDEtLjYyLS42MmwuODQtMi44NzNhMiAyIDAgMCAxIC41MDYtLjg1MnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNxdWFyZVBpID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdhMiAyIDAgMCAxLTItMlY3IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQZXJjZW50ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBpbGNyb3cgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg5LjVhMi41IDIuNSAwIDAgMSAwLTVIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3djEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQbGF5ID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3F1YXJlUGx1cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVJvdW5kQ29ybmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTFhOCA4IDAgMCAwLTgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVSYWRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmgybDIgNSAyLTEwaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNjaXNzb3JzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNpZ21hID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOC45VjdIOGw0IDUtNCA1aDh2LTEuOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU2xhc2ggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNwbGl0SG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTlINWMtMSAwLTItMS0yLTJWN2MwLTEgMS0yIDItMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoM2MxIDAgMiAxIDIgMnYxMGMwIDEtMSAyLTIgMmgtMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjQiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTcGxpdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4VjVjMC0xIDEtMiAyLTJoMTBjMSAwIDIgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYzYzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0ydi0zIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVN0YWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDRjMS4xIDAgMiAuOSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZjLTEuMSAwLTItLjktMi0ydi00YzAtMS4xLjktMiAyLTJoNGMxLjEgMCAyIC45IDIgMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU3F1YXJlID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDM1IDcuNjlhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVN0b3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiOSIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMSAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXJSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZSA9IFtbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dXTsKICAgIHZhciBTcXVhcmVzRXhjbHVkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEydjJhMiAyIDAgMCAxLTIgMkg5YTEgMSAwIDAgMC0xIDF2M2EyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTJWMTBhMiAyIDAgMCAwLTItMmgwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYzYTEgMSAwIDAgMS0xIDFoLTVhMiAyIDAgMCAwLTIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVhcmVzSW50ZXJzZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBhMiAyIDAgMCAxIDItMmg1YTEgMSAwIDAgMSAxIDF2NWEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZXNTdWJ0cmFjdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgNGEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDNhMSAxIDAgMCAwIDEtMXYtNWEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBhMiAyIDAgMCAxLTIgMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlc1VuaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43NzEgMjAuOTU2YTMzIDMzIDAgMCAxLTMuNTQxLjAwMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4xOCAxNy43NGMtLjUxIDEuMTUtMS4yOSAxLjkzLTIuNDM5IDIuNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk1NyAxMC4yM2EzMyAzMyAwIDAgMSAwIDMuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4wNDMgMTAuMjNhMzQgMzQgMCAwIDAgLjAwMSAzLjU0MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMy44MmMtMS4xNDkuNTEtMS45MyAxLjI5MS0yLjQ0IDIuNDQiIH1dCiAgICBdOwogICAgdmFyIFNxdWlyY2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2M3LjIgMCA5IDEuOCA5IDlzLTEuOCA5LTkgOS05LTEuOC05LTkgMS44LTkgOS05IiB9XQogICAgXTsKICAgIHZhciBTcXVpcnJlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNWOC41QzE0IDcgMTUgNyAxNSA1YTMgMyAwIDAgMC02IDBjMCAyIDEgMiAxIDMuNVYxMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxNS41YTIuNSAyLjUgMCAwIDAtMi41LTIuNWgtMTFBMi41IDIuNSAwIDAgMCA0IDE1LjVWMTdhMSAxIDAgMCAwIDEgMWgxNGExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XQogICAgXTsKICAgIHZhciBTdGFySGFsZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE4LjMzOGEyLjEgMi4xIDAgMCAwLS45ODcuMjQ0TDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMiAyLjEyIDAgMCAwIDEuNTk3LTEuMTZsMi4zMDktNC42NzlBLjUzLjUzIDAgMCAxIDEyIDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YXJPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMC4zNDQgNC42ODggMS4xODEtMi4zOTNhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMiAyLjEyIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy4yMzcgMy4xNTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTcuOTQ1IDE3Ljk0NS40MyAyLjUwNWEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMiAyLjEyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyIDIuMTIgMCAwIDAtLjYxMS0xLjg3OUwyLjE2IDkuNzk1YS41My41MyAwIDAgMSAuMjk0LS45MDZsNS4xNjUtLjc1NWE4IDggMCAwIDAgLjQtLjA5OSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFN0YXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS41MjUgMi4yOTVhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMjMgMi4xMjMgMCAwIDAgMS41OTUgMS4xNmw1LjE2Ni43NTZhLjUzLjUzIDAgMCAxIC4yOTQuOTA0bC0zLjczNiAzLjYzOGEyLjEyMyAyLjEyMyAwIDAgMC0uNjExIDEuODc4bC44ODIgNS4xNGEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMjIgMi4xMjIgMCAwIDAtMS45NzMgMEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIyIDIuMTIyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMjIgMi4xMjIgMCAwIDAgMS41OTctMS4xNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0ZXBCYWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTcxIDQuMjg1QTIgMiAwIDAgMSAxNyA2djEyYTIgMiAwIDAgMS0zLjAyOSAxLjcxNWwtOS45OTctNS45OThhMiAyIDAgMCAxLS4wMDMtMy40MzJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIwVjQiIH1dCiAgICBdOwogICAgdmFyIFN0ZXBGb3J3YXJkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMC4wMjkgNC4yODVBMiAyIDAgMCAwIDcgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFN0ZXRob3Njb3BlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM0g0YTIgMiAwIDAgMC0yIDJ2NGE2IDYgMCAwIDAgMTIgMFY1YTIgMiAwIDAgMC0yLTJoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWE2IDYgMCAwIDAgMTIgMHYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTdGlja2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnMuOCAxIDIgMWMxLjMgMCAyLTEgMi0xIiB9XQogICAgXTsKICAgIHZhciBTdGlja3lOb3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBTdG9uZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjI2NCAyLjIwNUE0IDQgMCAwIDAgNi40MiA0LjIxMWwtNCA4YTQgNCAwIDAgMCAxLjM1OSA1LjExN2w2IDRhNCA0IDAgMCAwIDQuNDM4IDBsNi00YTQgNCAwIDAgMCAxLjU3Ni00LjU5MmwtMi02YTQgNCAwIDAgMC0yLjUzLTIuNTN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjk5IDIyIDE0IDEybDcuODIyIDMuMTg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEyIDguNDcgMi4zMDIiIH1dCiAgICBdOwogICAgdmFyIFN0b3JlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjF2LTVhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNzc0IDEwLjMxYTEuMTIgMS4xMiAwIDAgMC0xLjU0OSAwIDIuNSAyLjUgMCAwIDEtMy40NTEgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDggMCAyLjUgMi41IDAgMCAxLTMuNDUyIDAgMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjc3LTMuMjQ4bDIuODg5LTQuMTg0QTIgMiAwIDAgMSA3IDJoMTBhMiAyIDAgMCAxIDEuNjUzLjg3M2wyLjg5NSA0LjE5MmEyLjUgMi41IDAgMCAxLTMuNzc0IDMuMjQ0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTAuOTVWMTlhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04LjA1IiB9XQogICAgXTsKICAgIHZhciBTdHJldGNoSG9yaXpvbnRhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFN0cmV0Y2hWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjIwIiwgeDogIjE0IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFN0cmlrZXRocm91Z2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmE0IDQgMCAwIDEgMCA4SDYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgU3Vic2NyaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA1IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1LTggOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxOWgtNGMwLTEuNS40NC0yIDEuNS0yLjVTMjAgMTUuMzMgMjAgMTRjMC0uNDctLjE3LS45My0uNDgtMS4yOWEyLjExIDIuMTEgMCAwIDAtMi42Mi0uNDRjLS40Mi4yNC0uNzQuNjItLjkgMS4wNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3VuRGltID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY1NyA2LjM0M2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjU3IDE3LjY1N2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zNDMgMTcuNjU3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM0MyA2LjM0M2guMDEiIH1dCiAgICBdOwogICAgdmFyIFN1bk1lZGl1bSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguMzY0IDUuNjM2LS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQzIDE3LjY1Ny0uNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjYzNiA1LjYzNi43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY1NyAxNy42NTcuNzA3LjcwNyIgfV0KICAgIF07CiAgICB2YXIgU3VuTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTEuMjU2IDEuMjU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dCiAgICBdOwogICAgdmFyIFN1blNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWEzIDMgMCAwIDAgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTYgMS41LTNIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEwLTEuNSAyIDEuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNjQgMTguMzYuNy0uNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjM0IDYuMzQtLjctLjciIH1dCiAgICBdOwogICAgdmFyIFN1biA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy42NiAxNy42NiAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgNC45My0xLjQxIDEuNDEiIH1dCiAgICBdOwogICAgdmFyIFN1bnJpc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyAxMC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3Vuc2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDEwLjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyAxMC45My0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3VwZXJzY3JpcHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE5IDgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS04LTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTJoLTRjMC0xLjUuNDQyLTIgMS41LTIuNVMyMCA4LjMzNCAyMCA3LjAwMmMwLS40NzItLjE3LS45My0uNDg0LTEuMjlhMi4xMDUgMi4xMDUgMCAwIDAtMi42MTctLjQzNmMtLjQyLjIzOS0uNzM4LjYxNC0uODk5IDEuMDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN3YXRjaEJvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxN2guMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44IiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxVjNoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2aDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41aDciIH1dCiAgICBdOwogICAgdmFyIFN3aXRjaENhbWVyYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDRhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1aDdhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC01IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMjItMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgU3dvcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxOS02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNi00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE3LjUgMjEgNlYzaC0zTDYuNSAxNC41IiB9XQogICAgXTsKICAgIHZhciBTd29yZHMgPSBbCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjE0LjUgMTcuNSAzIDYgMyAzIDYgMyAxNy41IDE0LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMiLCB4MjogIjE5IiwgeTE6ICIxOSIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIwIiwgeTE6ICIxNiIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIxIiwgeTE6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNC41IDYuNSAxOCAzIDIxIDMgMjEgNiAxNy41IDkuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI1IiwgeDI6ICI5IiwgeTE6ICIxNCIsIHkyOiAiMTgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNyIsIHgyOiAiNCIsIHkxOiAiMTciLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjUiLCB5MTogIjE5IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgU3lyaW5nZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDkgOC43IDE5LjNjLTEgMS0yLjUgMS0zLjQgMGwtLjYtLjZjLTEtMS0xLTIuNSAwLTMuNEwxNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTktMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgNiA2IiB9XQogICAgXTsKICAgIHZhciBUYWJsZTIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgVGFibGVDZWxsc01lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNlbGxzU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNvbHVtbnNTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzaC0yYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBUYWJsZU9mQ29udGVudHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWguMDEiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUHJvcGVydGllcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1SDMiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUm93c1NwbGl0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIydi02YTIgMiAxMzUgMCAxIDItMmgxNGEyIDIgNDUgMCAxIDIgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYyYTIgMiA0NSAwIDAgMiAyaDE0YTIgMiAxMzUgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnY0IiB9XQogICAgXTsKICAgIHZhciBUYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICAgIHZhciBUYWJsZXRTbWFydHBob25lID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIzIiwgeTogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA0YTIgMiAwIDAgMSAyLTJoMTJhMiAyIDAgMCAxIDIgMnYxNmEyIDIgMCAwIDEtMiAyaC0yLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldHMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNDYgMTAuNTQgNy4wOC03LjA4IiB9XQogICAgXTsKICAgIHZhciBUYWcyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWdzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4Nmw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMSAwIDMuNDA4bC00LjU5MiA0LjU5MmEyLjQgMi40IDAgMCAxLTMuNDA4IDBsLTYuNzEtNi43MUEyIDIgMCAwIDEgNiA5LjE3MlYzYTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgN3Y2LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMCAzLjE5MS4xOTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC41IiwgY3k6ICI2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWxseTEgPSBbWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV1dOwogICAgdmFyIFRhbGx5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5MyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0KICAgIF07CiAgICB2YXIgVGFsbHk0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5NSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDYgMiAxOCIgfV0KICAgIF07CiAgICB2YXIgVGFuZ2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41OSA1LjQxIDUuNDEgMTUuNTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIiIH1dCiAgICBdOwogICAgdmFyIFRhcmdldCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVGVsZXNjb3BlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAuMDY1IDEyLjQ5My02LjE4IDEuMzE4YS45MzQuOTM0IDAgMCAxLTEuMTA4LS43MDJsLS41MzctMi4xNWExLjA3IDEuMDcgMCAwIDEgLjY5MS0xLjI2NWwxMy41MDQtNC40NCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41NiAxMS43NDcgNC4zMzItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMS0zLjEwNS02LjIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ4NSA1Ljk0YTIgMiAwIDAgMSAxLjQ1NS0yLjQyNWwxLjA5LS4yNzJhMSAxIDAgMCAxIDEuMjEyLjcyN2wxLjUxNSA2LjA2YTEgMSAwIDAgMS0uNzI3IDEuMjEzbC0xLjA5LjI3MmEyIDIgMCAwIDEtMi40MjUtMS40NTV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMTU4IDguNjMzIDEuMTE0IDQuNDU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjEgMy4xMDUtNi4yMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBUZW50VHJlZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDUgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRIN2wtNSA4aDIwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNCA1IDgiIH1dCiAgICBdOwogICAgdmFyIFRlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjUgMjEgMTQgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41IDIxIDEwIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSAyMSAxMiAxNWwtMy41IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0KICAgIF07CiAgICB2YXIgVGVybWluYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTcgNi02LTYtNiIgfV0KICAgIF07CiAgICB2YXIgVGVzdFR1YmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcgNi44MiAyMS4xOGEyLjgzIDIuODMgMCAwIDEtMy45OS0uMDFhMi44MyAyLjgzIDAgMCAxIDAtNEwxNyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDQiIH1dCiAgICBdOwogICAgdmFyIFRlc3RUdWJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNSAydjE3LjVjMCAxLjQtMS4xIDIuNS0yLjUgMi41Yy0xLjQgMC0yLjUtMS4xLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgMTZoLTUiIH1dCiAgICBdOwogICAgdmFyIFRlc3RUdWJlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNkg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2aC01IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25DZW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOUg1IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25FbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUg3IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25KdXN0aWZ5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0KICAgIF07CiAgICB2YXIgVGV4dEN1cnNvcklucHV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLTFhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEtMiAySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgOGg3YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZINGEyIDIgMCAwIDEtMi0ydi00YTIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDRoMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZ2MTIiIH1dCiAgICBdOwogICAgdmFyIFRleHRBbGlnblN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTlIMyIgfV0KICAgIF07CiAgICB2YXIgVGV4dEN1cnNvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIyaC0xYTQgNCAwIDAgMS00LTRWNmE0IDQgMCAwIDEgNC00aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMmgxYTQgNCAwIDAgMCA0LTR2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDFhNCA0IDAgMCAxIDQgNHYxIiB9XQogICAgXTsKICAgIHZhciBUZXh0SW5pdGlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMiAzLjU1My03LjcyNGEuNS41IDAgMCAxIC44OTQgMEwxMSAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjkyIDEwaDYuMTYiIH1dCiAgICBdOwogICAgdmFyIFRleHRRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMnY3IiB9XQogICAgXTsKICAgIHZhciBUZXh0U2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlIMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE5LTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFRleHRTZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0KICAgIF07CiAgICB2YXIgVGV4dFdyYXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTQuNWExIDEgMCAwIDEgMCA3SDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRoZWF0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwczMtMyAzLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBzLTMtMy0zLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmMwIDQuNC0zLjYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmMwIDQuNCAzLjYgOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMHMyIDIgMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwcy0yIDItMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjJ2LTFhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjU4NSAxNUgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYuNUwxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmgyIiB9XQogICAgXTsKICAgIHZhciBUaGVybW9tZXRlclN1biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4YTQgNCAwIDAgMC0xLjY0NSA3LjY0NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTQuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiIH1dCiAgICBdOwogICAgdmFyIFRoZXJtb21ldGVyID0gW1sicGF0aCIsIHsgZDogIk0xNCA0djEwLjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAwWiIgfV1dOwogICAgdmFyIFRodW1ic0Rvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDE4LjEyIDEwIDE0SDQuMTdhMiAyIDAgMCAxLTEuOTItMi41NmwyLjMzLThBMiAyIDAgMCAxIDYuNSAySDIwYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjc2YTIgMiAwIDAgMC0xLjc5IDEuMTFMMTIgMjJhMy4xMyAzLjEzIDAgMCAxLTMtMy44OFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWMiIgfV0KICAgIF07CiAgICB2YXIgVGh1bWJzVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTB2MTIiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldFBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMSAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAxIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRTbGFzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDE0LjUgNS01IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTQuNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTF2MiIgfV0KICAgIF07CiAgICB2YXIgVGlja2V0c1BsYW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxN2gxLjIyN2EyIDIgMCAwIDAgMS4zNDUtLjUyTDE4IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDEzLjUgMy43OTQuNTA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuMTczIDguMTggMTEtNWEyIDIgMCAwIDEgMi42NDcuOTkzTDE4LjU2IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5djIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjgiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFRpbWVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNiAxMWE4IDggMCAwIDAgMS43IDguNyA4IDggMCAwIDAgOC43IDEuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjQgNy40YTggOCAwIDAgMSAxMC4zIDEgOCA4IDAgMCAxIC45IDEwLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi0yIiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4xNzMgOC4xOCAxMS01YTIgMiAwIDAgMSAyLjY0Ny45OTNMMTguNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiOCIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgVGltZXJSZXNldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzYTggOCAwIDAgMSA4LTcgOCA4IDAgMSAxLTUuMyAxNEw0IDE3LjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g0djUiIH1dCiAgICBdOwogICAgdmFyIFRpbWVyMiA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxNCIsIHkxOiAiMiIsIHkyOiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTUiLCB5MTogIjE0IiwgeTI6ICIxMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNCIsIHI6ICI4IiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVMZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI1Iiwgcng6ICI3IiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogICAgdmFyIFRvaWxldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTJoMTNhMSAxIDAgMCAxIDEgMSA1IDUgMCAwIDEtNSA1aC0uNTk4YS41LjUgMCAwIDAtLjQyNC43NjVsMS41NDQgMi40N2EuNS41IDAgMCAxLS40MjQuNzY1SDUuNDAyYS41LjUgMCAwIDEtLjQyNC0uNzY1TDcgMTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGE1IDUgMCAwIDEtNS01VjRhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2OCIgfV0KICAgIF07CiAgICB2YXIgVG9vbENhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjgxNyAxMC45OTUtLjk3MS0xLjQ1IDEuMDM0LTEuMjMyYTIgMiAwIDAgMC0yLjAyNS0zLjIzOGwtMS44Mi4zNjRMOS45MSAzLjg4NWEyIDIgMCAwIDAtMy42MjUuNzQ4TDYuMTQxIDYuNTVsLTEuNzI1LjQyNmEyIDIgMCAwIDAtLjE5IDMuNzU2bC42NTcuMjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6IiB9XQogICAgXTsKICAgIHZhciBUb29sYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA2YTIgMiAwIDAgMSAxLjQxNC41ODZsNCA0QTIgMiAwIDAgMSAyMiAxMnY3YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQtNEEyIDIgMCAwIDEgOCA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydjQiIH1dCiAgICBdOwogICAgdmFyIFRvcm5hZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBIOSIgfV0KICAgIF07CiAgICB2YXIgVG9ydXMgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByeDogIjMiLCByeTogIjIiIH1dLAogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjEyLjUiLCByeDogIjEwIiwgcnk6ICI4LjUiIH1dCiAgICBdOwogICAgdmFyIFRvdWNocGFkT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNjU2IDE0SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42NTYgNEgyMGEyIDIgMCAwIDEgMiAydjEwLjM0NCIgfV0KICAgIF07CiAgICB2YXIgVG91Y2hwYWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi02IiB9XQogICAgXTsKICAgIHZhciBUb3dlckNvbnRyb2wgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yIDEyLjI3IDIwIDZINGwxLjggNi4yN2ExIDEgMCAwIDAgLjk1LjczaDEwLjVhMSAxIDAgMCAwIC45Ni0uNzNaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTN2OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMnYtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDYgMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDYtMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyaC0yIiB9XQogICAgXTsKICAgIHZhciBUb3lCcmljayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNWMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWNWMwLS42LS40LTEtMS0xaC0zYTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgICB2YXIgVHJhY3RvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDExIDExIC45YTEgMSAwIDAgMSAuOCAxLjFsLS42NjUgNC4xNThhMSAxIDAgMCAxLS45ODguODQySDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhMSAxIDAgMCAwLTEgMXY1LjU3MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDRoOC4xMjlhMSAxIDAgMCAxIC45OS44NjNMMTMgMTEuMjQ2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTFWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwLjFWNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTUiLCByOiAiNSIgfV0KICAgIF07CiAgICB2YXIgVHJhZmZpY0NvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4wNSAxMC45NjZhNSAyLjUgMCAwIDEtOC4xIDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuOTIzIDE0LjA0OSA0LjQ4IDIuMDRhMSAxIDAgMCAxIC4wMDEgMS44MzFsLTguNTc0IDMuOWEyIDIgMCAwIDEtMS42NiAwbC04LjU3NC0zLjkxYTEgMSAwIDAgMSAwLTEuODNsNC40ODQtMi4wNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NDkgMTQuMTRhNSAyLjUgMCAxIDEtOS45IDBMMTAuMDYzIDMuNWEyIDIgMCAwIDEgMy44NzQgMHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xOTQgNi41N2E1IDIuNSAwIDAgMCA1LjYxIDAiIH1dCiAgICBdOwogICAgdmFyIFRyYWluRnJvbnRUdW5uZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyVjEyYTEwIDEwIDAgMSAxIDIwIDB2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNi44djEuNGEzIDIuOCAwIDEgMS02IDBWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlhNCA0IDAgMCAxLTQtNHYtM2E2IDYgMCAxIDEgMTIgMHYzYTQgNCAwIDAgMS00IDRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTktMiAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDIgMyIgfV0KICAgIF07CiAgICB2YXIgVHJhaW5Gcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMy4xVjdhNCA0IDAgMCAwIDggMFYzLjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTljLTIuOCAwLTUtMi4yLTUtNXYtNGE4IDggMCAwIDEgMTYgMHY0YzAgMi44LTIuMiA1LTUgNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOS0yIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAzIiB9XQogICAgXTsKICAgIHZhciBUcmFpblRyYWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNyAxNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTQgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMiA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMiAyMiA3IiB9XQogICAgXTsKICAgIHZhciBUcmFtRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyMi0yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUcmFuc2dlbmRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmg0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDcuMTcgNy4xNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDUuMzU1VjJoMy4zNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi03LjE3IDcuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1IDUgOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBUcmFzaDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICAgIHZhciBUcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDZoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgVHJlZURlY2lkdW91cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMTlhNCA0IDAgMCAxLTIuMjQtNy4zMkEzLjUgMy41IDAgMCAxIDkgNi4wM1Y2YTMgMyAwIDEgMSA2IDB2LjA0YTMuNSAzLjUgMCAwIDEgMy4yNCA1LjY1QTQgNCAwIDAgMSAxNiAxOVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0KICAgIF07CiAgICB2YXIgVHJlZVBhbG0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4YzAtMi43Ni0yLjQ2LTUtNS41LTVTMiA1LjI0IDIgOGgybDEtMSAxIDFoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3LjE0QTUuODIgNS44MiAwIDAgMSAxNi41IDZjMy4wNCAwIDUuNSAyLjI0IDUuNSA1aC0zbC0xLTEtMSAxaC0zIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuODkgOS43MWMtMi4xNSAyLjE1LTIuMyA1LjQ3LS4zNSA3LjQzbDQuMjQtNC4yNS43LS43LjcxLS43MSAyLjEyLTIuMTJjLTEuOTUtMS45Ni01LjI3LTEuOC03LjQyLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1LjVjLjUgMi41LS4xNyA0LjUtMSA2LjVoNGMyLTUuNS0uNS0xMi0xLTE0IiB9XQogICAgXTsKICAgIHZhciBUcmVlUGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTMiIH1dCiAgICBdOwogICAgdmFyIFRyZWVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2LjJBMyAzIDAgMCAxIDguOSAxNkg1YTMgMyAwIDAgMS0xLTUuOFYxMGEzIDMgMCAwIDEgNiAwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTl2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxOWg4LjNhMSAxIDAgMCAwIC43LTEuN0wxOCAxNGguM2ExIDEgMCAwIDAgLjctMS43TDE2IDloLjJhMSAxIDAgMCAwIC44LTEuN0wxMyAzbC0xLjQgMS41IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBUcmVsbG8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIzIiwgaGVpZ2h0OiAiOSIsIHg6ICI3IiwgeTogIjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNyIgfV0KICAgIF07CiAgICB2YXIgVHJlbmRpbmdEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdoNnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNy04LjUtOC41LTUgNUwyIDciIH1dCiAgICBdOwogICAgdmFyIFRyZW5kaW5nVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODI4IDE0LjgyOCAyMSAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtOSA5LTQtNC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XQogICAgXTsKICAgIHZhciBUcmVuZGluZ1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04LjUgOC41LTUtNUwyIDE3IiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZUFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgVHJpYW5nbGVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4xNyA0LjE5M2EyIDIgMCAwIDEgMy42NjYuMDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuODc0IDcuNzQzIDEgMS43MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguODQ5IDEyLjk1MiAxIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgyNCAxOC4xOGEyIDIgMCAwIDEtMS44MzUgMi44MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4wMjQgMjFhMiAyIDAgMCAxLTEuODM5LTIuODM5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMTM2IDEyLjk1Mi0xIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjEwMiA3Ljc0My0xIDEuNzMyIiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThhMiAyIDAgMCAxLTIgMkgzYy0xLjEgMC0xLjMtLjYtLjQtMS4zTDIwLjQgNC4zYy45LS43IDEuNi0uNCAxLjYuN1oiIH1dCiAgICBdOwogICAgdmFyIFRyaWFuZ2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNzMgNGEyIDIgMCAwIDAtMy40NiAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTNaIiB9XQogICAgXTsKICAgIHZhciBUcnVja0VsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTlWN2EyIDIgMCAwIDAtMi0ySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTlIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOWgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjJMMTguMyA5LjM4YTEgMSAwIDAgMC0uNzgtLjM4SDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTN2NWExIDEgMCAwIDAgMSAxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzIDIuMTUgNS4xNWEuNDk1LjQ5NSAwIDAgMCAuMzUuODZoMi4xNWEuNDcuNDcgMCAwIDEgLjM1Ljg2TDMgOS4wMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHJvcGh5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuNjZ2MS42MjZhMiAyIDAgMCAxLS45NzYgMS42OTZBNSA1IDAgMCAwIDcgMjEuOTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0LjY2djEuNjI2YTIgMiAwIDAgMCAuOTc2IDEuNjk2QTUgNSAwIDAgMSAxNyAyMS45NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWgxLjVhMSAxIDAgMCAwIDAtNUgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOWE2IDYgMCAwIDAgMTIgMFYzYTEgMSAwIDAgMC0xLTFIN2ExIDEgMCAwIDAtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDlINC41YTEgMSAwIDAgMSAwLTVINiIgfV0KICAgIF07CiAgICB2YXIgVHJ1Y2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOEg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyNGwtMy40OC00LjM1QTEgMSAwIDAgMCAxNy41MiA4SDE0IiB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHVya2lzaExpcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0IDUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LjUtMTAgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmE5IDkgMCAwIDEtOSA5VjMiIH1dCiAgICBdOwogICAgdmFyIFR1cm50YWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4djRhOCA4IDAgMCAxLTEuMDcgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdXJ0bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMiAxMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtM2E4IDggMCAxIDAtMTYgMHYzYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zbDItNGg0WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjgyIDcuOSA4IDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjE4IDcuOSAxMiAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45MyAxMEgyMGEyIDIgMCAwIDEgMCA0SDIiIH1dCiAgICBdOwogICAgdmFyIFR2TWluaW1hbFBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4wMzMgOS40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2VjcuNjQ4YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdk1pbmltYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDItNSA1LTUtNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHdpdGNoID0gW1sicGF0aCIsIHsgZDogIk0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3IiB9XV07CiAgICB2YXIgVHdpdHRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDRzLS43IDIuMS0yIDMuNGMxLjYgMTAtOS40IDE3LjMtMTggMTEuNiAyLjIuMSA0LjQtLjYgNi0yQzMgMTUuNS41IDkuNiAzIDVjMi4yIDIuNiA1LjYgNC4xIDkgNC0uOS00LjIgNC02LjYgNy0zLjggMS4xIDAgMy0xLjIgMy0xLjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBUeXBlT3V0bGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE2LjVhLjUuNSAwIDAgMCAuNS41aC41YTIgMiAwIDAgMSAwIDRIOWEyIDIgMCAwIDEgMC00aC41YS41LjUgMCAwIDAgLjUtLjV2LTlhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVWOGEyIDIgMCAwIDEtNCAwVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTQgMHYtLjVhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBUeXBlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdWNWExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIwaDYiIH1dCiAgICBdOwogICAgdmFyIFVtYnJlbGxhT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2N2EyIDIgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC42NTYgMTNoMi4zMzZhMSAxIDAgMCAwIC45Ny0xLjI3NCAxMC4yODQgMTAuMjg0IDAgMCAwLTEyLjA3LTcuNTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuOTYxIDUuOTU3YTEwLjI4IDEwLjI4IDAgMCAwLTMuOTIyIDUuNzY5QTEgMSAwIDAgMCAzIDEzaDEwIiB9XQogICAgXTsKICAgIHZhciBVbWJyZWxsYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTkyIDEzYTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xOS45MjMgMEExIDEgMCAwIDAgMyAxM3oiIH1dCiAgICBdOwogICAgdmFyIFVuZGVybGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNHY2YTYgNiAwIDAgMCAxMiAwVjQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgVW5kbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0IDQgOWw1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41YTUuNSA1LjUgMCAwIDEtNS41IDUuNUgxMSIgfV0KICAgIF07CiAgICB2YXIgVW5kb0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC0xNS02LjdMMyAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFVuZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC05LTkgOSA5IDAgMCAwLTYgMi4zTDMgMTMiIH1dCiAgICBdOwogICAgdmFyIFVuZm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XQogICAgXTsKICAgIHZhciBVbmZvbGRWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgVW5ncm91cCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNiIsIHg6ICIxMSIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgVW5pdmVyc2l0eSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDdhMSAxIDAgMCAwLTEtMWgtMmEyIDIgMCAwIDEtMS4xNDMtLjM1OUwxMy4xNDMgMi4zNmEyIDIgMCAwIDAtMi4yODYtLjAwMUw2LjE0MyA1LjY0QTIgMiAwIDAgMSA1IDZIM2ExIDEgMCAwIDAtMSAxdjEyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVW5saW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODQgMTIuMjUgMS43Mi0xLjcxaC0uMDJhNS4wMDQgNS4wMDQgMCAwIDAtLjEyLTcuMDcgNS4wMDYgNS4wMDYgMCAwIDAtNi45NSAwbC0xLjcyIDEuNzEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm01LjE3IDExLjc1LTEuNzEgMS43MWE1LjAwNCA1LjAwNCAwIDAgMCAuMTIgNy4wNyA1LjAwNiA1LjAwNiAwIDAgMCA2Ljk1IDBsMS43MS0xLjcxIiB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICI4IiwgeTE6ICIyIiwgeTI6ICI1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjUiLCB5MTogIjgiLCB5MjogIjgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjE2IiwgeTE6ICIxOSIsIHkyOiAiMjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogICAgdmFyIFVubGluazIgPSBbWyJwYXRoIiwgeyBkOiAiTTE1IDdoMmE1IDUgMCAwIDEgMCAxMGgtMm0tNiAwSDdBNSA1IDAgMCAxIDcgN2gyIiB9XV07CiAgICB2YXIgVW5wbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNSAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyMiAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDIwLjNhMi40IDIuNCAwIDAgMCAzLjQgMEwxMiAxOGwtNi02LTIuMyAyLjNhMi40IDIuNCAwIDAgMCAwIDMuNFoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDEzLjUgMTAgMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxNi41IDEzIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDYgNiA2IDIuMy0yLjNhMi40IDIuNCAwIDAgMCAwLTMuNGwtMi42LTIuNmEyLjQgMi40IDAgMCAwLTMuNCAwWiIgfV0KICAgIF07CiAgICB2YXIgVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4LTUtNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgfV0KICAgIF07CiAgICB2YXIgVXNiID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMjAiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjcgMTkuMyAxOSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtMyAxIDIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yNiA3LjY4IDUgMTJsMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE0IDUgMiAzLjUtMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDEyIDEtMSAxIDEtMSAxWiIgfV0KICAgIF07CiAgICB2YXIgVXNlckNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTEgMiAyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBVc2VyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE2LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxMy44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxMi4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNy43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDEyLjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAxOC42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxMy44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMXYtMmE0IDQgMCAwIDEgNC00aDZhNCA0IDAgMCAxIDIuMDcyLjU3OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI3IiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVXNlckxvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYtMmEyIDIgMCAwIDAtNCAwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE1SDdhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjEzIiwgeTogIjE2Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiLjg5OSIgfV0KICAgIF07CiAgICB2YXIgVXNlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjExIiwgeTI6ICIxMSIgfV0KICAgIF07CiAgICB2YXIgVXNlclBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxOSIsIHkxOiAiOCIsIHkyOiAiMTQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kS2V5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTF2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEyLjg2OC02LjM0OSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjgyMS03LjQ4NyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBVc2VyUm91bmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFNlYXJjaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMS44NzMtNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxYTggOCAwIDAgMC0xNiAwIiB9XQogICAgXTsKICAgIHZhciBVc2VyU2VhcmNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBVc2VyU3RhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjA1MSAxMi42MTZhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNUg3YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNyIsIHgyOiAiMjIiLCB5MTogIjgiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNyIsIHkxOiAiOCIsIHkyOiAiMTMiIH1dCiAgICBdOwogICAgdmFyIFVzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlcnNSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTggOCAwIDAgMC0xNiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGMwLTMuMzctMi02LjUtNC04YTUgNSAwIDAgMC0uNDUtOC4zIiB9XQogICAgXTsKICAgIHZhciBVc2VycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMy4xMjhhNCA0IDAgMCAxIDAgNy43NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjF2LTJhNCA0IDAgMCAwLTMtMy44NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHNDcm9zc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1IDMuMyAzLjNhNC4yIDQuMiAwIDAgMCAwIDZsNy4zIDcuM2MuNy43IDIgLjcgMi44IDBMMTUgMTVabTAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4xIDIxLjggNi40LTYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTcgNyIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2N2MwIDEuMS45IDIgMiAyaDRhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVYyYTUgNSAwIDAgMC01IDV2NmMwIDEuMS45IDIgMiAyaDNabTAgMHY3IiB9XQogICAgXTsKICAgIHZhciBVdGlsaXR5UG9sZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNS03IDctNy03IiB9XQogICAgXTsKICAgIHZhciBWYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA2djVhMSAxIDAgMCAwIDEgMWg2LjEwMmExIDEgMCAwIDEgLjcxMi4yOThsLjg5OC45MWExIDEgMCAwIDEgLjI4OC43MDJWMTdhMSAxIDAgMCAxLTEgMWgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWYXJpYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICAgIHZhciBWYXVsdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA3LjkgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNCAxMC42IDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSAxNi4xIDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICIxNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40IDEzLjQgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWZWN0b3JTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS41IDdhMjQgMjQgMCAwIDEgMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgN2EyNCAyNCAwIDAgMCAwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTkuNWEyNCAyNCAwIDAgMCAxMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNC41YTI0IDI0IDAgMCAxIDEwIDAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIxNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTciLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgVmVnYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4cTYgMCA2LTYtNiAwLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJhMjYuNiAyNi42IDAgMCAxIDEwIDIwYy45LTYuODIgMS41LTkuNSA0LTE0IiB9XQogICAgXTsKICAgIHZhciBWZW5ldGlhbk1hc2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWMtMS41IDAtMi41LjUtMyAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgNmEyIDIgMCAwIDAtMiAydjRhNSA1IDAgMCAwIDUgNSA4IDggMCAwIDEgNSAyIDggOCAwIDAgMSA1LTIgNSA1IDAgMCAwIDUtNVY4YTIgMiAwIDAgMC0yLTJoLTNhOCA4IDAgMCAwLTUgMiA4IDggMCAwIDAtNS0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDExYzEuNSAwIDIuNS41IDMgMiIgfV0KICAgIF07CiAgICB2YXIgVmVudXNBbmRNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItNS40NiA1LjQ2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjUiIH1dCiAgICBdOwogICAgdmFyIFZlbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MTBjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTAuMzRWNmMwLS41NS0uNDUtMS0xLTFoLTQuMzQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI1Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBWaWRlb09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgVmlkZW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZGVvdGFwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE0IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE0IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZXcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTQ0IDEyLjMzYTEgMSAwIDAgMCAwLS42NiA3LjUgNy41IDAgMCAwLTEzLjg4OCAwIDEgMSAwIDAgMCAwIC42NiA3LjUgNy41IDAgMCAwIDEzLjg4OCAwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBWb2ljZW1haWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxOCIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBWb2xsZXliYWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMSA3LjFhMTYuNTUgMTYuNTUgMCAwIDEgMTAuOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyYTEyLjYgMTIuNiAwIDAgMS04LjcgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44IDEzLjZhMTYuNTUgMTYuNTUgMCAwIDEtOSA3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNyAxN2ExMi44IDEyLjggMCAwIDAtOC43LTUgMTMuMyAxMy4zIDAgMCAxIDAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDMuOGExNi41NSAxNi41NSAwIDAgMCAxLjkgMTEuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4zNjQgMTguMzY0YTkgOSAwIDAgMCAwLTEyLjcyOCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjM2NCA1LjYzNmE5IDkgMCAwIDEgMS44ODkgOS45NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuODI4IDQuMTcyQS42ODYuNjg2IDAgMCAxIDExIDQuNjU3di42ODYiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjkiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIyMiIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIFZvdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3YzAtMS4xLjktMiAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxMkg1VjdaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5SDIiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXYWxsZXRDYXJkcyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0zIDExaDNjLjggMCAxLjYuMyAyLjEuOWwxLjEuOWMxLjYgMS42IDQuMSAxLjYgNS43IDBsMS4xLS45Yy41LS41IDEuMy0uOSAyLjEtLjlIMjEiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXYWxsZXRNaW5pbWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCIgfV0KICAgIF07CiAgICB2YXIgV2FsbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGEyIDIgMCAwIDAgMiAyaDE1YTEgMSAwIDAgMCAxLTF2LTQiIH1dCiAgICBdOwogICAgdmFyIFdhbGxwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTcgNi4xLTYuMWEyIDIgMCAwIDEgMi44MS4wMUwyMiAxNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgV2FuZFNwYXJrbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNjQgMy42NC0xLjI4LTEuMjhhMS4yMSAxLjIxIDAgMCAwLTEuNzIgMEwyLjM2IDE4LjY0YTEuMjEgMS4yMSAwIDAgMCAwIDEuNzJsMS4yOCAxLjI4YTEuMiAxLjIgMCAwIDAgMS43MiAwTDIxLjY0IDUuMzZhMS4yIDEuMiAwIDAgMCAwLTEuNzIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgM0g5IiB9XQogICAgXTsKICAgIHZhciBXYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE2di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44IDExLjggMTkgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOCA2LjIgMTkgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4yIDYuMiAxMSA1IiB9XQogICAgXTsKICAgIHZhciBXYXJlaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAxLjEzMi0xLjgwM2w3Ljk1LTMuOTc0YTIgMiAwIDAgMSAxLjgzNyAwbDcuOTQ4IDMuOTc0QTIgMiAwIDAgMSAyMiA4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogICAgdmFyIFdhc2hpbmdNYWNoaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNmguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIyMCIsIHg6ICIzIiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGEyLjUgMi41IDAgMCAwIDAtNSAyLjUgMi41IDAgMCAxIDAtNSIgfV0KICAgIF07CiAgICB2YXIgV2F0Y2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHYyLjJsMS42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMTMgNy42Ni0uODEtNC4wNWEyIDIgMCAwIDAtMi0xLjYxaC0yLjY4YTIgMiAwIDAgMC0yIDEuNjFsLS43OCA0LjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuODggMTYuMzYuOCA0YTIgMiAwIDAgMCAyIDEuNjFoMi43MmEyIDIgMCAwIDAgMi0xLjYxbC44MS00LjA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBMMTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2TDEyIDEwTDggNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1QzIuNiAxNS41IDMuMiAxNiA0LjUgMTZDNyAxNiA3IDE0IDkuNSAxNEMxMi4xIDE0IDExLjkgMTYgMTQuNSAxNkMxNyAxNiAxNyAxNCAxOS41IDE0QzIwLjggMTQgMjEuNCAxNC41IDIyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdhdmVzQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBXYXZlc0xhZGRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1YTIgMiAwIDAgMC0yIDJ2MTEiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yIDZjLjYuNSAxLjIgMSAyLjUgMUM3IDcgNyA1IDkuNSA1YzIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTJjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdheXBvaW50cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjU4NiA1LjQxNC01LjE3MiA1LjE3MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOC41ODYgMTMuNDE0LTUuMTcyIDUuMTcyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFdlYmNhbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00IiB9XQogICAgXTsKICAgIHZhciBXZWJob29rT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdoLTVjLTEuMDktLjAyLTEuOTQuOTItMi41IDEuOUEzIDMgMCAxIDEgMi41NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDMuNGE0IDQgMCAwIDEgNi41Mi42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDMuMS01LjhhMi41IDIuNSAwIDAgMCAuMDU3LTIuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMyAyMC4zYTQgNCAwIDAgMS0yLjMuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC42IDEzYTQgNCAwIDAgMSAzLjM1NyAzLjQxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA2IC42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBXZWJob29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTYuOThoLTUuOTljLTEuMSAwLTEuOTUuOTQtMi40OCAxLjlBNCA0IDAgMCAxIDIgMTdjLjAxLS43LjItMS40LjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNyAzLjEzLTUuNzhjLjUzLS45Ny4xLTIuMTgtLjUtMy4xYTQgNCAwIDEgMSA2Ljg5LTQuMDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgNiAzLjEzIDUuNzNDMTUuNjYgMTIuNyAxNi45IDEzIDE4IDEzYTQgNCAwIDAgMSAwIDgiIH1dCiAgICBdOwogICAgdmFyIFdlaWdodFRpbGRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgV2hlYXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMS4xNyAxLjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzQgMTMuMDljLjI2LS4xNS41MS0uMzQuNzMtLjU2TDIxIDExbC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMC00LjYyLS4yOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdlaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjUgOGEyIDIgMCAwIDAtMS45MDUgMS40NkwyLjEgMTguNUEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45MjUtMi41NEwxOS40IDkuNUEyIDIgMCAwIDAgMTcuNDggOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdoZWF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNiA4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTcuNDcgOC41MyA5IDdsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDkgMTVsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuNDcgNC41MyAxMyAzbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEwxMyAxMWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjQ3IDEzLjQ3IDE3IDE1bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMOSAxNWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjQ3IDkuNDcgMjEgMTFsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEwxMyAxMWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXaG9sZVdvcmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIiB9XQogICAgXTsKICAgIHZhciBXaWZpQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBXaWZpSGlnaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaUxvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAiIH1dCiAgICBdOwogICAgdmFyIFdpZmlPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDUuMTctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMi44NTlhMTAgMTAgMCAwIDAtMi4wMDctMS41MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4LjgyYTE1IDE1IDAgMCAxIDQuMTc3LTIuNjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDguODJhMTUgMTUgMCAwIDAtMTEuMjg4LTMuNzY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaVBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSAxMC41LTIuMjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDMtMS40MDYiIH1dCiAgICBdOwogICAgdmFyIFdpZmlTeW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuOTY1IDEwLjEwNXY0TDEzLjUgMTIuNWE1IDUgMCAwIDEgOCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuOTY1IDE0LjEwNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk2NSAxOC4xMDVoNEwyMC40MyAxOS43MWE1IDUgMCAwIDEtOC0xLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4LjgyYTE1IDE1IDAgMCAxIDIwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuOTY1IDIyLjEwNXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg2YTEwIDEwIDAgMCAxIDMtMi4wMzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWguMDEiIH1dCiAgICBdOwogICAgdmFyIFdpZmlaZXJvID0gW1sicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dXTsKICAgIHZhciBXaWZpID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICAgIHZhciBXaW5kQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjggMjEuNkEyIDIgMCAxIDAgMTQgMThIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA2IDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSA4YTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIiB9XQogICAgXTsKICAgIHZhciBXaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNWE1IDUgMCAwIDAgNS01YzAtMi0uNS00LTItOEg5Yy0xLjUgNC0yIDYtMiA4YTUgNSAwIDAgMCA1IDVaIiB9XQogICAgXTsKICAgIHZhciBXb3JrZmxvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExdjRhMiAyIDAgMCAwIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjEzIiwgeTogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBXaW5lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoM203IDBoLTEuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi0xLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42MyAxOC44MSAyMiAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFgyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNiA2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgNiAxMiAxMiIgfV0KICAgIF07CiAgICB2YXIgWW91dHViZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNSAxN2EyNC4xMiAyNC4xMiAwIDAgMSAwLTEwIDIgMiAwIDAgMSAxLjQtMS40IDQ5LjU2IDQ5LjU2IDAgMCAxIDE2LjIgMEEyIDIgMCAwIDEgMjEuNSA3YTI0LjEyIDI0LjEyIDAgMCAxIDAgMTAgMiAyIDAgMCAxLTEuNCAxLjQgNDkuNTUgNDkuNTUgMCAwIDEtMTYuMiAwQTIgMiAwIDAgMSAyLjUgMTciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUgNS0zLTUtM3oiIH1dCiAgICBdOwogICAgdmFyIFdyZW5jaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgWmFwT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNTEzIDQuODU2IDEzLjEyIDIuMTdhLjUuNSAwIDAgMSAuODYuNDZsLTEuMzc3IDQuMzE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjY1NiAxMEgyMGExIDEgMCAwIDEgLjc4IDEuNjNsLTEuNzIgMS43NzMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuMjczIDE2LjI3MyAxMC44OCAyMS44M2EuNS41IDAgMCAxLS44Ni0uNDZsMS45Mi02LjAyQTEgMSAwIDAgMCAxMSAxNEg0YTEgMSAwIDAgMS0uNzgtMS42M2w0LjUwNy00LjY0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFphcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTRhMSAxIDAgMCAxLS43OC0xLjYzbDkuOS0xMC4yYS41LjUgMCAwIDEgLjg2LjQ2bC0xLjkyIDYuMDJBMSAxIDAgMCAwIDEzIDEwaDdhMSAxIDAgMCAxIC43OCAxLjYzbC05LjkgMTAuMmEuNS41IDAgMCAxLS44Ni0uNDZsMS45Mi02LjAyQTEgMSAwIDAgMCAxMSAxNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFpvb21PdXQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeDI6ICIxNi42NSIsIHkxOiAiMjEiLCB5MjogIjE2LjY1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFpvb21JbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE2LjY1IiwgeTE6ICIyMSIsIHkyOiAiMTYuNjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTEiLCB4MjogIjExIiwgeTE6ICI4IiwgeTI6ICIxNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNCIsIHkxOiAiMTEiLCB5MjogIjExIiB9XQogICAgXTsKICAgIHZhciBpY29uc0FuZEFsaWFzZXMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIF9fcHJvdG9fXzogbnVsbCwKICAgICAgQUFycm93RG93biwKICAgICAgQUFycm93VXAsCiAgICAgIEFMYXJnZVNtYWxsLAogICAgICBBY2Nlc3NpYmlsaXR5LAogICAgICBBY3Rpdml0eSwKICAgICAgQWN0aXZpdHlTcXVhcmU6IFNxdWFyZUFjdGl2aXR5LAogICAgICBBaXJWZW50LAogICAgICBBaXJwbGF5LAogICAgICBBbGFybUNoZWNrOiBBbGFybUNsb2NrQ2hlY2ssCiAgICAgIEFsYXJtQ2xvY2ssCiAgICAgIEFsYXJtQ2xvY2tDaGVjaywKICAgICAgQWxhcm1DbG9ja01pbnVzLAogICAgICBBbGFybUNsb2NrT2ZmLAogICAgICBBbGFybUNsb2NrUGx1cywKICAgICAgQWxhcm1NaW51czogQWxhcm1DbG9ja01pbnVzLAogICAgICBBbGFybVBsdXM6IEFsYXJtQ2xvY2tQbHVzLAogICAgICBBbGFybVNtb2tlLAogICAgICBBbGJ1bSwKICAgICAgQWxlcnRDaXJjbGU6IENpcmNsZUFsZXJ0LAogICAgICBBbGVydE9jdGFnb246IE9jdGFnb25BbGVydCwKICAgICAgQWxlcnRUcmlhbmdsZTogVHJpYW5nbGVBbGVydCwKICAgICAgQWxpZ25DZW50ZXI6IFRleHRBbGlnbkNlbnRlciwKICAgICAgQWxpZ25DZW50ZXJIb3Jpem9udGFsLAogICAgICBBbGlnbkNlbnRlclZlcnRpY2FsLAogICAgICBBbGlnbkVuZEhvcml6b250YWwsCiAgICAgIEFsaWduRW5kVmVydGljYWwsCiAgICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXIsCiAgICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQsCiAgICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydCwKICAgICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciwKICAgICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCwKICAgICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0LAogICAgICBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCwKICAgICAgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuLAogICAgICBBbGlnbkp1c3RpZnk6IFRleHRBbGlnbkp1c3RpZnksCiAgICAgIEFsaWduTGVmdDogVGV4dEFsaWduU3RhcnQsCiAgICAgIEFsaWduUmlnaHQ6IFRleHRBbGlnbkVuZCwKICAgICAgQWxpZ25TdGFydEhvcml6b250YWwsCiAgICAgIEFsaWduU3RhcnRWZXJ0aWNhbCwKICAgICAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXIsCiAgICAgIEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kLAogICAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0LAogICAgICBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlciwKICAgICAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQsCiAgICAgIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQsCiAgICAgIEFsaWduVmVydGljYWxTcGFjZUFyb3VuZCwKICAgICAgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbiwKICAgICAgQW1idWxhbmNlLAogICAgICBBbXBlcnNhbmQsCiAgICAgIEFtcGVyc2FuZHMsCiAgICAgIEFtcGhvcmEsCiAgICAgIEFuY2hvciwKICAgICAgQW5ncnksCiAgICAgIEFubm95ZWQsCiAgICAgIEFudGVubmEsCiAgICAgIEFudmlsLAogICAgICBBcGVydHVyZSwKICAgICAgQXBwV2luZG93LAogICAgICBBcHBXaW5kb3dNYWMsCiAgICAgIEFwcGxlLAogICAgICBBcmNoaXZlLAogICAgICBBcmNoaXZlUmVzdG9yZSwKICAgICAgQXJjaGl2ZVgsCiAgICAgIEFyZWFDaGFydDogQ2hhcnRBcmVhLAogICAgICBBcm1jaGFpciwKICAgICAgQXJyb3dCaWdEb3duLAogICAgICBBcnJvd0JpZ0Rvd25EYXNoLAogICAgICBBcnJvd0JpZ0xlZnQsCiAgICAgIEFycm93QmlnTGVmdERhc2gsCiAgICAgIEFycm93QmlnUmlnaHQsCiAgICAgIEFycm93QmlnUmlnaHREYXNoLAogICAgICBBcnJvd0JpZ1VwLAogICAgICBBcnJvd0JpZ1VwRGFzaCwKICAgICAgQXJyb3dEb3duLAogICAgICBBcnJvd0Rvd24wMSwKICAgICAgQXJyb3dEb3duMTAsCiAgICAgIEFycm93RG93bkFaLAogICAgICBBcnJvd0Rvd25BejogQXJyb3dEb3duQVosCiAgICAgIEFycm93RG93bkNpcmNsZTogQ2lyY2xlQXJyb3dEb3duLAogICAgICBBcnJvd0Rvd25Gcm9tTGluZSwKICAgICAgQXJyb3dEb3duTGVmdCwKICAgICAgQXJyb3dEb3duTGVmdEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0RG93bkxlZnQsCiAgICAgIEFycm93RG93bkxlZnRGcm9tU3F1YXJlOiBTcXVhcmVBcnJvd091dERvd25MZWZ0LAogICAgICBBcnJvd0Rvd25MZWZ0U3F1YXJlOiBTcXVhcmVBcnJvd0Rvd25MZWZ0LAogICAgICBBcnJvd0Rvd25OYXJyb3dXaWRlLAogICAgICBBcnJvd0Rvd25SaWdodCwKICAgICAgQXJyb3dEb3duUmlnaHRGcm9tQ2lyY2xlOiBDaXJjbGVBcnJvd091dERvd25SaWdodCwKICAgICAgQXJyb3dEb3duUmlnaHRGcm9tU3F1YXJlOiBTcXVhcmVBcnJvd091dERvd25SaWdodCwKICAgICAgQXJyb3dEb3duUmlnaHRTcXVhcmU6IFNxdWFyZUFycm93RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25TcXVhcmU6IFNxdWFyZUFycm93RG93biwKICAgICAgQXJyb3dEb3duVG9Eb3QsCiAgICAgIEFycm93RG93blRvTGluZSwKICAgICAgQXJyb3dEb3duVXAsCiAgICAgIEFycm93RG93bldpZGVOYXJyb3csCiAgICAgIEFycm93RG93blpBLAogICAgICBBcnJvd0Rvd25aYTogQXJyb3dEb3duWkEsCiAgICAgIEFycm93TGVmdCwKICAgICAgQXJyb3dMZWZ0Q2lyY2xlOiBDaXJjbGVBcnJvd0xlZnQsCiAgICAgIEFycm93TGVmdEZyb21MaW5lLAogICAgICBBcnJvd0xlZnRSaWdodCwKICAgICAgQXJyb3dMZWZ0U3F1YXJlOiBTcXVhcmVBcnJvd0xlZnQsCiAgICAgIEFycm93TGVmdFRvTGluZSwKICAgICAgQXJyb3dSaWdodCwKICAgICAgQXJyb3dSaWdodENpcmNsZTogQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgQXJyb3dSaWdodEZyb21MaW5lLAogICAgICBBcnJvd1JpZ2h0TGVmdCwKICAgICAgQXJyb3dSaWdodFNxdWFyZTogU3F1YXJlQXJyb3dSaWdodCwKICAgICAgQXJyb3dSaWdodFRvTGluZSwKICAgICAgQXJyb3dVcCwKICAgICAgQXJyb3dVcDAxLAogICAgICBBcnJvd1VwMTAsCiAgICAgIEFycm93VXBBWiwKICAgICAgQXJyb3dVcEF6OiBBcnJvd1VwQVosCiAgICAgIEFycm93VXBDaXJjbGU6IENpcmNsZUFycm93VXAsCiAgICAgIEFycm93VXBEb3duLAogICAgICBBcnJvd1VwRnJvbURvdCwKICAgICAgQXJyb3dVcEZyb21MaW5lLAogICAgICBBcnJvd1VwTGVmdCwKICAgICAgQXJyb3dVcExlZnRGcm9tQ2lyY2xlOiBDaXJjbGVBcnJvd091dFVwTGVmdCwKICAgICAgQXJyb3dVcExlZnRGcm9tU3F1YXJlOiBTcXVhcmVBcnJvd091dFVwTGVmdCwKICAgICAgQXJyb3dVcExlZnRTcXVhcmU6IFNxdWFyZUFycm93VXBMZWZ0LAogICAgICBBcnJvd1VwTmFycm93V2lkZSwKICAgICAgQXJyb3dVcFJpZ2h0LAogICAgICBBcnJvd1VwUmlnaHRGcm9tQ2lyY2xlOiBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgICAgIEFycm93VXBSaWdodEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0VXBSaWdodCwKICAgICAgQXJyb3dVcFJpZ2h0U3F1YXJlOiBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgICAgIEFycm93VXBTcXVhcmU6IFNxdWFyZUFycm93VXAsCiAgICAgIEFycm93VXBUb0xpbmUsCiAgICAgIEFycm93VXBXaWRlTmFycm93LAogICAgICBBcnJvd1VwWkEsCiAgICAgIEFycm93VXBaYTogQXJyb3dVcFpBLAogICAgICBBcnJvd3NVcEZyb21MaW5lLAogICAgICBBc3RlcmlzaywKICAgICAgQXN0ZXJpc2tTcXVhcmU6IFNxdWFyZUFzdGVyaXNrLAogICAgICBBdFNpZ24sCiAgICAgIEF0b20sCiAgICAgIEF1ZGlvTGluZXMsCiAgICAgIEF1ZGlvV2F2ZWZvcm0sCiAgICAgIEF3YXJkLAogICAgICBBeGUsCiAgICAgIEF4aXMzRDogQXhpczNkLAogICAgICBBeGlzM2QsCiAgICAgIEJhYnksCiAgICAgIEJhY2twYWNrLAogICAgICBCYWRnZSwKICAgICAgQmFkZ2VBbGVydCwKICAgICAgQmFkZ2VDZW50LAogICAgICBCYWRnZUNoZWNrLAogICAgICBCYWRnZURvbGxhclNpZ24sCiAgICAgIEJhZGdlRXVybywKICAgICAgQmFkZ2VIZWxwOiBCYWRnZVF1ZXN0aW9uTWFyaywKICAgICAgQmFkZ2VJbmRpYW5SdXBlZSwKICAgICAgQmFkZ2VJbmZvLAogICAgICBCYWRnZUphcGFuZXNlWWVuLAogICAgICBCYWRnZU1pbnVzLAogICAgICBCYWRnZVBlcmNlbnQsCiAgICAgIEJhZGdlUGx1cywKICAgICAgQmFkZ2VQb3VuZFN0ZXJsaW5nLAogICAgICBCYWRnZVF1ZXN0aW9uTWFyaywKICAgICAgQmFkZ2VSdXNzaWFuUnVibGUsCiAgICAgIEJhZGdlU3dpc3NGcmFuYywKICAgICAgQmFkZ2VUdXJraXNoTGlyYSwKICAgICAgQmFkZ2VYLAogICAgICBCYWdnYWdlQ2xhaW0sCiAgICAgIEJhbGxvb24sCiAgICAgIEJhbiwKICAgICAgQmFuYW5hLAogICAgICBCYW5kYWdlLAogICAgICBCYW5rbm90ZSwKICAgICAgQmFua25vdGVBcnJvd0Rvd24sCiAgICAgIEJhbmtub3RlQXJyb3dVcCwKICAgICAgQmFua25vdGVYLAogICAgICBCYXJDaGFydDogQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nLAogICAgICBCYXJDaGFydDI6IENoYXJ0Tm9BeGVzQ29sdW1uLAogICAgICBCYXJDaGFydDM6IENoYXJ0Q29sdW1uLAogICAgICBCYXJDaGFydDQ6IENoYXJ0Q29sdW1uSW5jcmVhc2luZywKICAgICAgQmFyQ2hhcnRCaWc6IENoYXJ0Q29sdW1uQmlnLAogICAgICBCYXJDaGFydEhvcml6b250YWw6IENoYXJ0QmFyLAogICAgICBCYXJDaGFydEhvcml6b250YWxCaWc6IENoYXJ0QmFyQmlnLAogICAgICBCYXJjb2RlLAogICAgICBCYXJyZWwsCiAgICAgIEJhc2VsaW5lLAogICAgICBCYXRoLAogICAgICBCYXR0ZXJ5LAogICAgICBCYXR0ZXJ5Q2hhcmdpbmcsCiAgICAgIEJhdHRlcnlGdWxsLAogICAgICBCYXR0ZXJ5TG93LAogICAgICBCYXR0ZXJ5TWVkaXVtLAogICAgICBCYXR0ZXJ5UGx1cywKICAgICAgQmF0dGVyeVdhcm5pbmcsCiAgICAgIEJlYWtlciwKICAgICAgQmVhbiwKICAgICAgQmVhbk9mZiwKICAgICAgQmVkLAogICAgICBCZWREb3VibGUsCiAgICAgIEJlZFNpbmdsZSwKICAgICAgQmVlZiwKICAgICAgQmVlciwKICAgICAgQmVlck9mZiwKICAgICAgQmVsbCwKICAgICAgQmVsbERvdCwKICAgICAgQmVsbEVsZWN0cmljLAogICAgICBCZWxsTWludXMsCiAgICAgIEJlbGxPZmYsCiAgICAgIEJlbGxQbHVzLAogICAgICBCZWxsUmluZywKICAgICAgQmV0d2Vlbkhvcml6b25hbEVuZDogQmV0d2Vlbkhvcml6b250YWxFbmQsCiAgICAgIEJldHdlZW5Ib3Jpem9uYWxTdGFydDogQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICAgICAgQmV0d2Vlbkhvcml6b250YWxFbmQsCiAgICAgIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQsCiAgICAgIEJldHdlZW5WZXJ0aWNhbEVuZCwKICAgICAgQmV0d2VlblZlcnRpY2FsU3RhcnQsCiAgICAgIEJpY2Vwc0ZsZXhlZCwKICAgICAgQmlrZSwKICAgICAgQmluYXJ5LAogICAgICBCaW5vY3VsYXJzLAogICAgICBCaW9oYXphcmQsCiAgICAgIEJpcmQsCiAgICAgIEJpcmRob3VzZSwKICAgICAgQml0Y29pbiwKICAgICAgQmxlbmQsCiAgICAgIEJsaW5kcywKICAgICAgQmxvY2tzLAogICAgICBCbHVldG9vdGgsCiAgICAgIEJsdWV0b290aENvbm5lY3RlZCwKICAgICAgQmx1ZXRvb3RoT2ZmLAogICAgICBCbHVldG9vdGhTZWFyY2hpbmcsCiAgICAgIEJvbGQsCiAgICAgIEJvbHQsCiAgICAgIEJvbWIsCiAgICAgIEJvbmUsCiAgICAgIEJvb2ssCiAgICAgIEJvb2tBLAogICAgICBCb29rQWxlcnQsCiAgICAgIEJvb2tBdWRpbywKICAgICAgQm9va0NoZWNrLAogICAgICBCb29rQ29weSwKICAgICAgQm9va0Rhc2hlZCwKICAgICAgQm9va0Rvd24sCiAgICAgIEJvb2tIZWFkcGhvbmVzLAogICAgICBCb29rSGVhcnQsCiAgICAgIEJvb2tJbWFnZSwKICAgICAgQm9va0tleSwKICAgICAgQm9va0xvY2ssCiAgICAgIEJvb2tNYXJrZWQsCiAgICAgIEJvb2tNaW51cywKICAgICAgQm9va09wZW4sCiAgICAgIEJvb2tPcGVuQ2hlY2ssCiAgICAgIEJvb2tPcGVuVGV4dCwKICAgICAgQm9va1BsdXMsCiAgICAgIEJvb2tTZWFyY2gsCiAgICAgIEJvb2tUZW1wbGF0ZTogQm9va0Rhc2hlZCwKICAgICAgQm9va1RleHQsCiAgICAgIEJvb2tUeXBlLAogICAgICBCb29rVXAsCiAgICAgIEJvb2tVcDIsCiAgICAgIEJvb2tVc2VyLAogICAgICBCb29rWCwKICAgICAgQm9va21hcmssCiAgICAgIEJvb2ttYXJrQ2hlY2ssCiAgICAgIEJvb2ttYXJrTWludXMsCiAgICAgIEJvb2ttYXJrUGx1cywKICAgICAgQm9va21hcmtYLAogICAgICBCb29tQm94LAogICAgICBCb3QsCiAgICAgIEJvdE1lc3NhZ2VTcXVhcmUsCiAgICAgIEJvdE9mZiwKICAgICAgQm90dGxlV2luZSwKICAgICAgQm93QXJyb3csCiAgICAgIEJveCwKICAgICAgQm94U2VsZWN0OiBTcXVhcmVEYXNoZWQsCiAgICAgIEJveGVzLAogICAgICBCcmFjZXMsCiAgICAgIEJyYWNrZXRzLAogICAgICBCcmFpbiwKICAgICAgQnJhaW5DaXJjdWl0LAogICAgICBCcmFpbkNvZywKICAgICAgQnJpY2tXYWxsLAogICAgICBCcmlja1dhbGxGaXJlLAogICAgICBCcmlja1dhbGxTaGllbGQsCiAgICAgIEJyaWVmY2FzZSwKICAgICAgQnJpZWZjYXNlQnVzaW5lc3MsCiAgICAgIEJyaWVmY2FzZUNvbnZleW9yQmVsdCwKICAgICAgQnJpZWZjYXNlTWVkaWNhbCwKICAgICAgQnJpbmdUb0Zyb250LAogICAgICBCcnVzaCwKICAgICAgQnJ1c2hDbGVhbmluZywKICAgICAgQnViYmxlcywKICAgICAgQnVnLAogICAgICBCdWdPZmYsCiAgICAgIEJ1Z1BsYXksCiAgICAgIEJ1aWxkaW5nLAogICAgICBCdWlsZGluZzIsCiAgICAgIEJ1cywKICAgICAgQnVzRnJvbnQsCiAgICAgIENhYmxlLAogICAgICBDYWJsZUNhciwKICAgICAgQ2FrZSwKICAgICAgQ2FrZVNsaWNlLAogICAgICBDYWxjdWxhdG9yLAogICAgICBDYWxlbmRhciwKICAgICAgQ2FsZW5kYXIxLAogICAgICBDYWxlbmRhckFycm93RG93biwKICAgICAgQ2FsZW5kYXJBcnJvd1VwLAogICAgICBDYWxlbmRhckNoZWNrLAogICAgICBDYWxlbmRhckNoZWNrMiwKICAgICAgQ2FsZW5kYXJDbG9jaywKICAgICAgQ2FsZW5kYXJDb2csCiAgICAgIENhbGVuZGFyRGF5cywKICAgICAgQ2FsZW5kYXJGb2xkLAogICAgICBDYWxlbmRhckhlYXJ0LAogICAgICBDYWxlbmRhck1pbnVzLAogICAgICBDYWxlbmRhck1pbnVzMiwKICAgICAgQ2FsZW5kYXJPZmYsCiAgICAgIENhbGVuZGFyUGx1cywKICAgICAgQ2FsZW5kYXJQbHVzMiwKICAgICAgQ2FsZW5kYXJSYW5nZSwKICAgICAgQ2FsZW5kYXJTZWFyY2gsCiAgICAgIENhbGVuZGFyU3luYywKICAgICAgQ2FsZW5kYXJYLAogICAgICBDYWxlbmRhclgyLAogICAgICBDYWxlbmRhcnMsCiAgICAgIENhbWVyYSwKICAgICAgQ2FtZXJhT2ZmLAogICAgICBDYW5kbGVzdGlja0NoYXJ0OiBDaGFydENhbmRsZXN0aWNrLAogICAgICBDYW5keSwKICAgICAgQ2FuZHlDYW5lLAogICAgICBDYW5keU9mZiwKICAgICAgQ2FubmFiaXMsCiAgICAgIENhbm5hYmlzT2ZmLAogICAgICBDYXB0aW9ucywKICAgICAgQ2FwdGlvbnNPZmYsCiAgICAgIENhciwKICAgICAgQ2FyRnJvbnQsCiAgICAgIENhclRheGlGcm9udCwKICAgICAgQ2FyYXZhbiwKICAgICAgQ2FyZFNpbSwKICAgICAgQ2Fycm90LAogICAgICBDYXNlTG93ZXIsCiAgICAgIENhc2VTZW5zaXRpdmUsCiAgICAgIENhc2VVcHBlciwKICAgICAgQ2Fzc2V0dGVUYXBlLAogICAgICBDYXN0LAogICAgICBDYXN0bGUsCiAgICAgIENhdCwKICAgICAgQ2N0diwKICAgICAgQ2hhcnRBcmVhLAogICAgICBDaGFydEJhciwKICAgICAgQ2hhcnRCYXJCaWcsCiAgICAgIENoYXJ0QmFyRGVjcmVhc2luZywKICAgICAgQ2hhcnRCYXJJbmNyZWFzaW5nLAogICAgICBDaGFydEJhclN0YWNrZWQsCiAgICAgIENoYXJ0Q2FuZGxlc3RpY2ssCiAgICAgIENoYXJ0Q29sdW1uLAogICAgICBDaGFydENvbHVtbkJpZywKICAgICAgQ2hhcnRDb2x1bW5EZWNyZWFzaW5nLAogICAgICBDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgICAgIENoYXJ0Q29sdW1uU3RhY2tlZCwKICAgICAgQ2hhcnRHYW50dCwKICAgICAgQ2hhcnRMaW5lLAogICAgICBDaGFydE5ldHdvcmssCiAgICAgIENoYXJ0Tm9BeGVzQ29sdW1uLAogICAgICBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmcsCiAgICAgIENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZywKICAgICAgQ2hhcnROb0F4ZXNDb21iaW5lZCwKICAgICAgQ2hhcnROb0F4ZXNHYW50dCwKICAgICAgQ2hhcnRQaWUsCiAgICAgIENoYXJ0U2NhdHRlciwKICAgICAgQ2hhcnRTcGxpbmUsCiAgICAgIENoZWNrLAogICAgICBDaGVja0NoZWNrLAogICAgICBDaGVja0NpcmNsZTogQ2lyY2xlQ2hlY2tCaWcsCiAgICAgIENoZWNrQ2lyY2xlMjogQ2lyY2xlQ2hlY2ssCiAgICAgIENoZWNrTGluZSwKICAgICAgQ2hlY2tTcXVhcmU6IFNxdWFyZUNoZWNrQmlnLAogICAgICBDaGVja1NxdWFyZTI6IFNxdWFyZUNoZWNrLAogICAgICBDaGVmSGF0LAogICAgICBDaGVycnksCiAgICAgIENoZXNzQmlzaG9wLAogICAgICBDaGVzc0tpbmcsCiAgICAgIENoZXNzS25pZ2h0LAogICAgICBDaGVzc1Bhd24sCiAgICAgIENoZXNzUXVlZW4sCiAgICAgIENoZXNzUm9vaywKICAgICAgQ2hldnJvbkRvd24sCiAgICAgIENoZXZyb25Eb3duQ2lyY2xlOiBDaXJjbGVDaGV2cm9uRG93biwKICAgICAgQ2hldnJvbkRvd25TcXVhcmU6IFNxdWFyZUNoZXZyb25Eb3duLAogICAgICBDaGV2cm9uRmlyc3QsCiAgICAgIENoZXZyb25MYXN0LAogICAgICBDaGV2cm9uTGVmdCwKICAgICAgQ2hldnJvbkxlZnRDaXJjbGU6IENpcmNsZUNoZXZyb25MZWZ0LAogICAgICBDaGV2cm9uTGVmdFNxdWFyZTogU3F1YXJlQ2hldnJvbkxlZnQsCiAgICAgIENoZXZyb25SaWdodCwKICAgICAgQ2hldnJvblJpZ2h0Q2lyY2xlOiBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIENoZXZyb25SaWdodFNxdWFyZTogU3F1YXJlQ2hldnJvblJpZ2h0LAogICAgICBDaGV2cm9uVXAsCiAgICAgIENoZXZyb25VcENpcmNsZTogQ2lyY2xlQ2hldnJvblVwLAogICAgICBDaGV2cm9uVXBTcXVhcmU6IFNxdWFyZUNoZXZyb25VcCwKICAgICAgQ2hldnJvbnNEb3duLAogICAgICBDaGV2cm9uc0Rvd25VcCwKICAgICAgQ2hldnJvbnNMZWZ0LAogICAgICBDaGV2cm9uc0xlZnRSaWdodCwKICAgICAgQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpcywKICAgICAgQ2hldnJvbnNSaWdodCwKICAgICAgQ2hldnJvbnNSaWdodExlZnQsCiAgICAgIENoZXZyb25zVXAsCiAgICAgIENoZXZyb25zVXBEb3duLAogICAgICBDaHJvbWU6IENocm9taXVtLAogICAgICBDaHJvbWl1bSwKICAgICAgQ2h1cmNoLAogICAgICBDaWdhcmV0dGUsCiAgICAgIENpZ2FyZXR0ZU9mZiwKICAgICAgQ2lyY2xlLAogICAgICBDaXJjbGVBbGVydCwKICAgICAgQ2lyY2xlQXJyb3dEb3duLAogICAgICBDaXJjbGVBcnJvd0xlZnQsCiAgICAgIENpcmNsZUFycm93T3V0RG93bkxlZnQsCiAgICAgIENpcmNsZUFycm93T3V0RG93blJpZ2h0LAogICAgICBDaXJjbGVBcnJvd091dFVwTGVmdCwKICAgICAgQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0LAogICAgICBDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBDaXJjbGVBcnJvd1VwLAogICAgICBDaXJjbGVDaGVjaywKICAgICAgQ2lyY2xlQ2hlY2tCaWcsCiAgICAgIENpcmNsZUNoZXZyb25Eb3duLAogICAgICBDaXJjbGVDaGV2cm9uTGVmdCwKICAgICAgQ2lyY2xlQ2hldnJvblJpZ2h0LAogICAgICBDaXJjbGVDaGV2cm9uVXAsCiAgICAgIENpcmNsZURhc2hlZCwKICAgICAgQ2lyY2xlRGl2aWRlLAogICAgICBDaXJjbGVEb2xsYXJTaWduLAogICAgICBDaXJjbGVEb3QsCiAgICAgIENpcmNsZURvdERhc2hlZCwKICAgICAgQ2lyY2xlRWxsaXBzaXMsCiAgICAgIENpcmNsZUVxdWFsLAogICAgICBDaXJjbGVGYWRpbmdBcnJvd1VwLAogICAgICBDaXJjbGVGYWRpbmdQbHVzLAogICAgICBDaXJjbGVHYXVnZSwKICAgICAgQ2lyY2xlSGVscDogQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBDaXJjbGVNaW51cywKICAgICAgQ2lyY2xlT2ZmLAogICAgICBDaXJjbGVQYXJraW5nLAogICAgICBDaXJjbGVQYXJraW5nT2ZmLAogICAgICBDaXJjbGVQYXVzZSwKICAgICAgQ2lyY2xlUGVyY2VudCwKICAgICAgQ2lyY2xlUGlsZSwKICAgICAgQ2lyY2xlUGxheSwKICAgICAgQ2lyY2xlUGx1cywKICAgICAgQ2lyY2xlUG91bmRTdGVybGluZywKICAgICAgQ2lyY2xlUG93ZXIsCiAgICAgIENpcmNsZVF1ZXN0aW9uTWFyaywKICAgICAgQ2lyY2xlU2xhc2gsCiAgICAgIENpcmNsZVNsYXNoMiwKICAgICAgQ2lyY2xlU2xhc2hlZDogQ2lyY2xlU2xhc2gyLAogICAgICBDaXJjbGVTbWFsbCwKICAgICAgQ2lyY2xlU3RhciwKICAgICAgQ2lyY2xlU3RvcCwKICAgICAgQ2lyY2xlVXNlciwKICAgICAgQ2lyY2xlVXNlclJvdW5kLAogICAgICBDaXJjbGVYLAogICAgICBDaXJjdWl0Qm9hcmQsCiAgICAgIENpdHJ1cywKICAgICAgQ2xhcHBlcmJvYXJkLAogICAgICBDbGlwYm9hcmQsCiAgICAgIENsaXBib2FyZENoZWNrLAogICAgICBDbGlwYm9hcmRDbG9jaywKICAgICAgQ2xpcGJvYXJkQ29weSwKICAgICAgQ2xpcGJvYXJkRWRpdDogQ2xpcGJvYXJkUGVuLAogICAgICBDbGlwYm9hcmRMaXN0LAogICAgICBDbGlwYm9hcmRNaW51cywKICAgICAgQ2xpcGJvYXJkUGFzdGUsCiAgICAgIENsaXBib2FyZFBlbiwKICAgICAgQ2xpcGJvYXJkUGVuTGluZSwKICAgICAgQ2xpcGJvYXJkUGx1cywKICAgICAgQ2xpcGJvYXJkU2lnbmF0dXJlOiBDbGlwYm9hcmRQZW5MaW5lLAogICAgICBDbGlwYm9hcmRUeXBlLAogICAgICBDbGlwYm9hcmRYLAogICAgICBDbG9jaywKICAgICAgQ2xvY2sxLAogICAgICBDbG9jazEwLAogICAgICBDbG9jazExLAogICAgICBDbG9jazEyLAogICAgICBDbG9jazIsCiAgICAgIENsb2NrMywKICAgICAgQ2xvY2s0LAogICAgICBDbG9jazUsCiAgICAgIENsb2NrNiwKICAgICAgQ2xvY2s3LAogICAgICBDbG9jazgsCiAgICAgIENsb2NrOSwKICAgICAgQ2xvY2tBbGVydCwKICAgICAgQ2xvY2tBcnJvd0Rvd24sCiAgICAgIENsb2NrQXJyb3dVcCwKICAgICAgQ2xvY2tDaGVjaywKICAgICAgQ2xvY2tGYWRpbmcsCiAgICAgIENsb2NrUGx1cywKICAgICAgQ2xvc2VkQ2FwdGlvbiwKICAgICAgQ2xvdWQsCiAgICAgIENsb3VkQWxlcnQsCiAgICAgIENsb3VkQmFja3VwLAogICAgICBDbG91ZENoZWNrLAogICAgICBDbG91ZENvZywKICAgICAgQ2xvdWREb3dubG9hZCwKICAgICAgQ2xvdWREcml6emxlLAogICAgICBDbG91ZEZvZywKICAgICAgQ2xvdWRIYWlsLAogICAgICBDbG91ZExpZ2h0bmluZywKICAgICAgQ2xvdWRNb29uLAogICAgICBDbG91ZE1vb25SYWluLAogICAgICBDbG91ZE9mZiwKICAgICAgQ2xvdWRSYWluLAogICAgICBDbG91ZFJhaW5XaW5kLAogICAgICBDbG91ZFNub3csCiAgICAgIENsb3VkU3VuLAogICAgICBDbG91ZFN1blJhaW4sCiAgICAgIENsb3VkU3luYywKICAgICAgQ2xvdWRVcGxvYWQsCiAgICAgIENsb3VkeSwKICAgICAgQ2xvdmVyLAogICAgICBDbHViLAogICAgICBDb2RlLAogICAgICBDb2RlMjogQ29kZVhtbCwKICAgICAgQ29kZVNxdWFyZTogU3F1YXJlQ29kZSwKICAgICAgQ29kZVhtbCwKICAgICAgQ29kZXBlbiwKICAgICAgQ29kZXNhbmRib3gsCiAgICAgIENvZmZlZSwKICAgICAgQ29nLAogICAgICBDb2lucywKICAgICAgQ29sdW1uczogQ29sdW1uczIsCiAgICAgIENvbHVtbnMyLAogICAgICBDb2x1bW5zMywKICAgICAgQ29sdW1uczNDb2csCiAgICAgIENvbHVtbnM0LAogICAgICBDb2x1bW5zU2V0dGluZ3M6IENvbHVtbnMzQ29nLAogICAgICBDb21iaW5lLAogICAgICBDb21tYW5kLAogICAgICBDb21wYXNzLAogICAgICBDb21wb25lbnQsCiAgICAgIENvbXB1dGVyLAogICAgICBDb25jaWVyZ2VCZWxsLAogICAgICBDb25lLAogICAgICBDb25zdHJ1Y3Rpb24sCiAgICAgIENvbnRhY3QsCiAgICAgIENvbnRhY3QyOiBDb250YWN0Um91bmQsCiAgICAgIENvbnRhY3RSb3VuZCwKICAgICAgQ29udGFpbmVyLAogICAgICBDb250cmFzdCwKICAgICAgQ29va2llLAogICAgICBDb29raW5nUG90LAogICAgICBDb3B5LAogICAgICBDb3B5Q2hlY2ssCiAgICAgIENvcHlNaW51cywKICAgICAgQ29weVBsdXMsCiAgICAgIENvcHlTbGFzaCwKICAgICAgQ29weVgsCiAgICAgIENvcHlsZWZ0LAogICAgICBDb3B5cmlnaHQsCiAgICAgIENvcm5lckRvd25MZWZ0LAogICAgICBDb3JuZXJEb3duUmlnaHQsCiAgICAgIENvcm5lckxlZnREb3duLAogICAgICBDb3JuZXJMZWZ0VXAsCiAgICAgIENvcm5lclJpZ2h0RG93biwKICAgICAgQ29ybmVyUmlnaHRVcCwKICAgICAgQ29ybmVyVXBMZWZ0LAogICAgICBDb3JuZXJVcFJpZ2h0LAogICAgICBDcHUsCiAgICAgIENyZWF0aXZlQ29tbW9ucywKICAgICAgQ3JlZGl0Q2FyZCwKICAgICAgQ3JvaXNzYW50LAogICAgICBDcm9wLAogICAgICBDcm9zcywKICAgICAgQ3Jvc3NoYWlyLAogICAgICBDcm93biwKICAgICAgQ3Vib2lkLAogICAgICBDdXBTb2RhLAogICAgICBDdXJseUJyYWNlczogQnJhY2VzLAogICAgICBDdXJyZW5jeSwKICAgICAgQ3lsaW5kZXIsCiAgICAgIERhbSwKICAgICAgRGF0YWJhc2UsCiAgICAgIERhdGFiYXNlQmFja3VwLAogICAgICBEYXRhYmFzZVNlYXJjaCwKICAgICAgRGF0YWJhc2VaYXAsCiAgICAgIERlY2ltYWxzQXJyb3dMZWZ0LAogICAgICBEZWNpbWFsc0Fycm93UmlnaHQsCiAgICAgIERlbGV0ZSwKICAgICAgRGVzc2VydCwKICAgICAgRGlhbWV0ZXIsCiAgICAgIERpYW1vbmQsCiAgICAgIERpYW1vbmRNaW51cywKICAgICAgRGlhbW9uZFBlcmNlbnQsCiAgICAgIERpYW1vbmRQbHVzLAogICAgICBEaWNlMSwKICAgICAgRGljZTIsCiAgICAgIERpY2UzLAogICAgICBEaWNlNCwKICAgICAgRGljZTUsCiAgICAgIERpY2U2LAogICAgICBEaWNlcywKICAgICAgRGlmZiwKICAgICAgRGlzYywKICAgICAgRGlzYzIsCiAgICAgIERpc2MzLAogICAgICBEaXNjQWxidW0sCiAgICAgIERpdmlkZSwKICAgICAgRGl2aWRlQ2lyY2xlOiBDaXJjbGVEaXZpZGUsCiAgICAgIERpdmlkZVNxdWFyZTogU3F1YXJlRGl2aWRlLAogICAgICBEbmEsCiAgICAgIERuYU9mZiwKICAgICAgRG9jaywKICAgICAgRG9nLAogICAgICBEb2xsYXJTaWduLAogICAgICBEb251dCwKICAgICAgRG9vckNsb3NlZCwKICAgICAgRG9vckNsb3NlZExvY2tlZCwKICAgICAgRG9vck9wZW4sCiAgICAgIERvdCwKICAgICAgRG90U3F1YXJlOiBTcXVhcmVEb3QsCiAgICAgIERvd25sb2FkLAogICAgICBEb3dubG9hZENsb3VkOiBDbG91ZERvd25sb2FkLAogICAgICBEcmFmdGluZ0NvbXBhc3MsCiAgICAgIERyYW1hLAogICAgICBEcmliYmJsZSwKICAgICAgRHJpbGwsCiAgICAgIERyb25lLAogICAgICBEcm9wbGV0LAogICAgICBEcm9wbGV0T2ZmLAogICAgICBEcm9wbGV0cywKICAgICAgRHJ1bSwKICAgICAgRHJ1bXN0aWNrLAogICAgICBEdW1iYmVsbCwKICAgICAgRWFyLAogICAgICBFYXJPZmYsCiAgICAgIEVhcnRoLAogICAgICBFYXJ0aExvY2ssCiAgICAgIEVjbGlwc2UsCiAgICAgIEVkaXQ6IFNxdWFyZVBlbiwKICAgICAgRWRpdDI6IFBlbiwKICAgICAgRWRpdDM6IFBlbkxpbmUsCiAgICAgIEVnZywKICAgICAgRWdnRnJpZWQsCiAgICAgIEVnZ09mZiwKICAgICAgRWxsaXBzaXMsCiAgICAgIEVsbGlwc2lzVmVydGljYWwsCiAgICAgIEVxdWFsLAogICAgICBFcXVhbEFwcHJveGltYXRlbHksCiAgICAgIEVxdWFsTm90LAogICAgICBFcXVhbFNxdWFyZTogU3F1YXJlRXF1YWwsCiAgICAgIEVyYXNlciwKICAgICAgRXRoZXJuZXRQb3J0LAogICAgICBFdXJvLAogICAgICBFdkNoYXJnZXIsCiAgICAgIEV4cGFuZCwKICAgICAgRXh0ZXJuYWxMaW5rLAogICAgICBFeWUsCiAgICAgIEV5ZUNsb3NlZCwKICAgICAgRXllT2ZmLAogICAgICBGYWNlYm9vaywKICAgICAgRmFjdG9yeSwKICAgICAgRmFuLAogICAgICBGYXN0Rm9yd2FyZCwKICAgICAgRmVhdGhlciwKICAgICAgRmVuY2UsCiAgICAgIEZlcnJpc1doZWVsLAogICAgICBGaWdtYSwKICAgICAgRmlsZSwKICAgICAgRmlsZUFyY2hpdmUsCiAgICAgIEZpbGVBdWRpbzogRmlsZUhlYWRwaG9uZSwKICAgICAgRmlsZUF1ZGlvMjogRmlsZUhlYWRwaG9uZSwKICAgICAgRmlsZUF4aXMzRDogRmlsZUF4aXMzZCwKICAgICAgRmlsZUF4aXMzZCwKICAgICAgRmlsZUJhZGdlLAogICAgICBGaWxlQmFkZ2UyOiBGaWxlQmFkZ2UsCiAgICAgIEZpbGVCYXJDaGFydDogRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZywKICAgICAgRmlsZUJhckNoYXJ0MjogRmlsZUNoYXJ0Q29sdW1uLAogICAgICBGaWxlQm94LAogICAgICBGaWxlQnJhY2VzLAogICAgICBGaWxlQnJhY2VzQ29ybmVyLAogICAgICBGaWxlQ2hhcnRDb2x1bW4sCiAgICAgIEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgICAgIEZpbGVDaGFydExpbmUsCiAgICAgIEZpbGVDaGFydFBpZSwKICAgICAgRmlsZUNoZWNrLAogICAgICBGaWxlQ2hlY2syOiBGaWxlQ2hlY2tDb3JuZXIsCiAgICAgIEZpbGVDaGVja0Nvcm5lciwKICAgICAgRmlsZUNsb2NrLAogICAgICBGaWxlQ29kZSwKICAgICAgRmlsZUNvZGUyOiBGaWxlQ29kZUNvcm5lciwKICAgICAgRmlsZUNvZGVDb3JuZXIsCiAgICAgIEZpbGVDb2csCiAgICAgIEZpbGVDb2cyOiBGaWxlQ29nLAogICAgICBGaWxlRGlmZiwKICAgICAgRmlsZURpZ2l0LAogICAgICBGaWxlRG93biwKICAgICAgRmlsZUVkaXQ6IEZpbGVQZW4sCiAgICAgIEZpbGVFeGNsYW1hdGlvblBvaW50LAogICAgICBGaWxlSGVhZHBob25lLAogICAgICBGaWxlSGVhcnQsCiAgICAgIEZpbGVJbWFnZSwKICAgICAgRmlsZUlucHV0LAogICAgICBGaWxlSnNvbjogRmlsZUJyYWNlcywKICAgICAgRmlsZUpzb24yOiBGaWxlQnJhY2VzQ29ybmVyLAogICAgICBGaWxlS2V5LAogICAgICBGaWxlS2V5MjogRmlsZUtleSwKICAgICAgRmlsZUxpbmVDaGFydDogRmlsZUNoYXJ0TGluZSwKICAgICAgRmlsZUxvY2ssCiAgICAgIEZpbGVMb2NrMjogRmlsZUxvY2ssCiAgICAgIEZpbGVNaW51cywKICAgICAgRmlsZU1pbnVzMjogRmlsZU1pbnVzQ29ybmVyLAogICAgICBGaWxlTWludXNDb3JuZXIsCiAgICAgIEZpbGVNdXNpYywKICAgICAgRmlsZU91dHB1dCwKICAgICAgRmlsZVBlbiwKICAgICAgRmlsZVBlbkxpbmUsCiAgICAgIEZpbGVQaWVDaGFydDogRmlsZUNoYXJ0UGllLAogICAgICBGaWxlUGxheSwKICAgICAgRmlsZVBsdXMsCiAgICAgIEZpbGVQbHVzMjogRmlsZVBsdXNDb3JuZXIsCiAgICAgIEZpbGVQbHVzQ29ybmVyLAogICAgICBGaWxlUXVlc3Rpb246IEZpbGVRdWVzdGlvbk1hcmssCiAgICAgIEZpbGVRdWVzdGlvbk1hcmssCiAgICAgIEZpbGVTY2FuLAogICAgICBGaWxlU2VhcmNoLAogICAgICBGaWxlU2VhcmNoMjogRmlsZVNlYXJjaENvcm5lciwKICAgICAgRmlsZVNlYXJjaENvcm5lciwKICAgICAgRmlsZVNpZ25hbCwKICAgICAgRmlsZVNpZ25hdHVyZTogRmlsZVBlbkxpbmUsCiAgICAgIEZpbGVTbGlkZXJzLAogICAgICBGaWxlU3ByZWFkc2hlZXQsCiAgICAgIEZpbGVTdGFjaywKICAgICAgRmlsZVN5bWxpbmssCiAgICAgIEZpbGVUZXJtaW5hbCwKICAgICAgRmlsZVRleHQsCiAgICAgIEZpbGVUeXBlLAogICAgICBGaWxlVHlwZTI6IEZpbGVUeXBlQ29ybmVyLAogICAgICBGaWxlVHlwZUNvcm5lciwKICAgICAgRmlsZVVwLAogICAgICBGaWxlVXNlciwKICAgICAgRmlsZVZpZGVvOiBGaWxlUGxheSwKICAgICAgRmlsZVZpZGVvMjogRmlsZVZpZGVvQ2FtZXJhLAogICAgICBGaWxlVmlkZW9DYW1lcmEsCiAgICAgIEZpbGVWb2x1bWUsCiAgICAgIEZpbGVWb2x1bWUyOiBGaWxlU2lnbmFsLAogICAgICBGaWxlV2FybmluZzogRmlsZUV4Y2xhbWF0aW9uUG9pbnQsCiAgICAgIEZpbGVYLAogICAgICBGaWxlWDI6IEZpbGVYQ29ybmVyLAogICAgICBGaWxlWENvcm5lciwKICAgICAgRmlsZXMsCiAgICAgIEZpbG0sCiAgICAgIEZpbHRlcjogRnVubmVsLAogICAgICBGaWx0ZXJYOiBGdW5uZWxYLAogICAgICBGaW5nZXJwcmludDogRmluZ2VycHJpbnRQYXR0ZXJuLAogICAgICBGaW5nZXJwcmludFBhdHRlcm4sCiAgICAgIEZpcmVFeHRpbmd1aXNoZXIsCiAgICAgIEZpc2gsCiAgICAgIEZpc2hPZmYsCiAgICAgIEZpc2hTeW1ib2wsCiAgICAgIEZpc2hpbmdIb29rLAogICAgICBGbGFnLAogICAgICBGbGFnT2ZmLAogICAgICBGbGFnVHJpYW5nbGVMZWZ0LAogICAgICBGbGFnVHJpYW5nbGVSaWdodCwKICAgICAgRmxhbWUsCiAgICAgIEZsYW1lS2luZGxpbmcsCiAgICAgIEZsYXNobGlnaHQsCiAgICAgIEZsYXNobGlnaHRPZmYsCiAgICAgIEZsYXNrQ29uaWNhbCwKICAgICAgRmxhc2tDb25pY2FsT2ZmLAogICAgICBGbGFza1JvdW5kLAogICAgICBGbGlwSG9yaXpvbnRhbCwKICAgICAgRmxpcEhvcml6b250YWwyLAogICAgICBGbGlwVmVydGljYWwsCiAgICAgIEZsaXBWZXJ0aWNhbDIsCiAgICAgIEZsb3dlciwKICAgICAgRmxvd2VyMiwKICAgICAgRm9jdXMsCiAgICAgIEZvbGRIb3Jpem9udGFsLAogICAgICBGb2xkVmVydGljYWwsCiAgICAgIEZvbGRlciwKICAgICAgRm9sZGVyQXJjaGl2ZSwKICAgICAgRm9sZGVyQ2hlY2ssCiAgICAgIEZvbGRlckNsb2NrLAogICAgICBGb2xkZXJDbG9zZWQsCiAgICAgIEZvbGRlckNvZGUsCiAgICAgIEZvbGRlckNvZywKICAgICAgRm9sZGVyQ29nMjogRm9sZGVyQ29nLAogICAgICBGb2xkZXJEb3QsCiAgICAgIEZvbGRlckRvd24sCiAgICAgIEZvbGRlckVkaXQ6IEZvbGRlclBlbiwKICAgICAgRm9sZGVyR2l0LAogICAgICBGb2xkZXJHaXQyLAogICAgICBGb2xkZXJIZWFydCwKICAgICAgRm9sZGVySW5wdXQsCiAgICAgIEZvbGRlckthbmJhbiwKICAgICAgRm9sZGVyS2V5LAogICAgICBGb2xkZXJMb2NrLAogICAgICBGb2xkZXJNaW51cywKICAgICAgRm9sZGVyT3BlbiwKICAgICAgRm9sZGVyT3BlbkRvdCwKICAgICAgRm9sZGVyT3V0cHV0LAogICAgICBGb2xkZXJQZW4sCiAgICAgIEZvbGRlclBsdXMsCiAgICAgIEZvbGRlclJvb3QsCiAgICAgIEZvbGRlclNlYXJjaCwKICAgICAgRm9sZGVyU2VhcmNoMiwKICAgICAgRm9sZGVyU3ltbGluaywKICAgICAgRm9sZGVyU3luYywKICAgICAgRm9sZGVyVHJlZSwKICAgICAgRm9sZGVyVXAsCiAgICAgIEZvbGRlclgsCiAgICAgIEZvbGRlcnMsCiAgICAgIEZvb3RwcmludHMsCiAgICAgIEZvcmtLbmlmZTogVXRlbnNpbHMsCiAgICAgIEZvcmtLbmlmZUNyb3NzZWQ6IFV0ZW5zaWxzQ3Jvc3NlZCwKICAgICAgRm9ya2xpZnQsCiAgICAgIEZvcm0sCiAgICAgIEZvcm1JbnB1dDogUmVjdGFuZ2xlRWxsaXBzaXMsCiAgICAgIEZvcndhcmQsCiAgICAgIEZyYW1lLAogICAgICBGcmFtZXIsCiAgICAgIEZyb3duLAogICAgICBGdWVsLAogICAgICBGdWxsc2NyZWVuLAogICAgICBGdW5jdGlvblNxdWFyZTogU3F1YXJlRnVuY3Rpb24sCiAgICAgIEZ1bm5lbCwKICAgICAgRnVubmVsUGx1cywKICAgICAgRnVubmVsWCwKICAgICAgR2FsbGVyeUhvcml6b250YWwsCiAgICAgIEdhbGxlcnlIb3Jpem9udGFsRW5kLAogICAgICBHYWxsZXJ5VGh1bWJuYWlscywKICAgICAgR2FsbGVyeVZlcnRpY2FsLAogICAgICBHYWxsZXJ5VmVydGljYWxFbmQsCiAgICAgIEdhbWVwYWQsCiAgICAgIEdhbWVwYWQyLAogICAgICBHYW1lcGFkRGlyZWN0aW9uYWwsCiAgICAgIEdhbnR0Q2hhcnQ6IENoYXJ0Tm9BeGVzR2FudHQsCiAgICAgIEdhbnR0Q2hhcnRTcXVhcmU6IFNxdWFyZUNoYXJ0R2FudHQsCiAgICAgIEdhdWdlLAogICAgICBHYXVnZUNpcmNsZTogQ2lyY2xlR2F1Z2UsCiAgICAgIEdhdmVsLAogICAgICBHZW0sCiAgICAgIEdlb3JnaWFuTGFyaSwKICAgICAgR2hvc3QsCiAgICAgIEdpZnQsCiAgICAgIEdpdEJyYW5jaCwKICAgICAgR2l0QnJhbmNoTWludXMsCiAgICAgIEdpdEJyYW5jaFBsdXMsCiAgICAgIEdpdENvbW1pdDogR2l0Q29tbWl0SG9yaXpvbnRhbCwKICAgICAgR2l0Q29tbWl0SG9yaXpvbnRhbCwKICAgICAgR2l0Q29tbWl0VmVydGljYWwsCiAgICAgIEdpdENvbXBhcmUsCiAgICAgIEdpdENvbXBhcmVBcnJvd3MsCiAgICAgIEdpdEZvcmssCiAgICAgIEdpdEdyYXBoLAogICAgICBHaXRNZXJnZSwKICAgICAgR2l0UHVsbFJlcXVlc3QsCiAgICAgIEdpdFB1bGxSZXF1ZXN0QXJyb3csCiAgICAgIEdpdFB1bGxSZXF1ZXN0Q2xvc2VkLAogICAgICBHaXRQdWxsUmVxdWVzdENyZWF0ZSwKICAgICAgR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdywKICAgICAgR2l0UHVsbFJlcXVlc3REcmFmdCwKICAgICAgR2l0aHViLAogICAgICBHaXRsYWIsCiAgICAgIEdsYXNzV2F0ZXIsCiAgICAgIEdsYXNzZXMsCiAgICAgIEdsb2JlLAogICAgICBHbG9iZTI6IEVhcnRoLAogICAgICBHbG9iZUxvY2ssCiAgICAgIEdsb2JlWCwKICAgICAgR29hbCwKICAgICAgR3B1LAogICAgICBHcmFiOiBIYW5kR3JhYiwKICAgICAgR3JhZHVhdGlvbkNhcCwKICAgICAgR3JhcGUsCiAgICAgIEdyaWQ6IEdyaWQzeDMsCiAgICAgIEdyaWQyWDI6IEdyaWQyeDIsCiAgICAgIEdyaWQyWDJDaGVjazogR3JpZDJ4MkNoZWNrLAogICAgICBHcmlkMlgyUGx1czogR3JpZDJ4MlBsdXMsCiAgICAgIEdyaWQyWDJYOiBHcmlkMngyWCwKICAgICAgR3JpZDJ4MiwKICAgICAgR3JpZDJ4MkNoZWNrLAogICAgICBHcmlkMngyUGx1cywKICAgICAgR3JpZDJ4MlgsCiAgICAgIEdyaWQzWDM6IEdyaWQzeDMsCiAgICAgIEdyaWQzeDIsCiAgICAgIEdyaWQzeDMsCiAgICAgIEdyaXAsCiAgICAgIEdyaXBIb3Jpem9udGFsLAogICAgICBHcmlwVmVydGljYWwsCiAgICAgIEdyb3VwLAogICAgICBHdWl0YXIsCiAgICAgIEhhbSwKICAgICAgSGFtYnVyZ2VyLAogICAgICBIYW1tZXIsCiAgICAgIEhhbmQsCiAgICAgIEhhbmRDb2lucywKICAgICAgSGFuZEZpc3QsCiAgICAgIEhhbmRHcmFiLAogICAgICBIYW5kSGVhcnQsCiAgICAgIEhhbmRIZWxwaW5nLAogICAgICBIYW5kTWV0YWwsCiAgICAgIEhhbmRQbGF0dGVyLAogICAgICBIYW5kYmFnLAogICAgICBIYW5kc2hha2UsCiAgICAgIEhhcmREcml2ZSwKICAgICAgSGFyZERyaXZlRG93bmxvYWQsCiAgICAgIEhhcmREcml2ZVVwbG9hZCwKICAgICAgSGFyZEhhdCwKICAgICAgSGFzaCwKICAgICAgSGF0R2xhc3NlcywKICAgICAgSGF6ZSwKICAgICAgSGQsCiAgICAgIEhkbWlQb3J0LAogICAgICBIZWFkaW5nLAogICAgICBIZWFkaW5nMSwKICAgICAgSGVhZGluZzIsCiAgICAgIEhlYWRpbmczLAogICAgICBIZWFkaW5nNCwKICAgICAgSGVhZGluZzUsCiAgICAgIEhlYWRpbmc2LAogICAgICBIZWFkcGhvbmVPZmYsCiAgICAgIEhlYWRwaG9uZXMsCiAgICAgIEhlYWRzZXQsCiAgICAgIEhlYXJ0LAogICAgICBIZWFydENyYWNrLAogICAgICBIZWFydEhhbmRzaGFrZSwKICAgICAgSGVhcnRNaW51cywKICAgICAgSGVhcnRPZmYsCiAgICAgIEhlYXJ0UGx1cywKICAgICAgSGVhcnRQdWxzZSwKICAgICAgSGVhdGVyLAogICAgICBIZWxpY29wdGVyLAogICAgICBIZWxwQ2lyY2xlOiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgICAgIEhlbHBpbmdIYW5kOiBIYW5kSGVscGluZywKICAgICAgSGV4YWdvbiwKICAgICAgSGlnaGxpZ2h0ZXIsCiAgICAgIEhpc3RvcnksCiAgICAgIEhvbWU6IEhvdXNlLAogICAgICBIb3AsCiAgICAgIEhvcE9mZiwKICAgICAgSG9zcGl0YWwsCiAgICAgIEhvdGVsLAogICAgICBIb3VyZ2xhc3MsCiAgICAgIEhvdXNlLAogICAgICBIb3VzZUhlYXJ0LAogICAgICBIb3VzZVBsdWcsCiAgICAgIEhvdXNlUGx1cywKICAgICAgSG91c2VXaWZpLAogICAgICBJY2VDcmVhbTogSWNlQ3JlYW1Db25lLAogICAgICBJY2VDcmVhbTI6IEljZUNyZWFtQm93bCwKICAgICAgSWNlQ3JlYW1Cb3dsLAogICAgICBJY2VDcmVhbUNvbmUsCiAgICAgIElkQ2FyZCwKICAgICAgSWRDYXJkTGFueWFyZCwKICAgICAgSW1hZ2U6IEltYWdlMiwKICAgICAgSW1hZ2VEb3duLAogICAgICBJbWFnZU1pbnVzLAogICAgICBJbWFnZU9mZiwKICAgICAgSW1hZ2VQbGF5LAogICAgICBJbWFnZVBsdXMsCiAgICAgIEltYWdlVXAsCiAgICAgIEltYWdlVXBzY2FsZSwKICAgICAgSW1hZ2VzLAogICAgICBJbXBvcnQsCiAgICAgIEluYm94LAogICAgICBJbmRlbnQ6IExpc3RJbmRlbnRJbmNyZWFzZSwKICAgICAgSW5kZW50RGVjcmVhc2U6IExpc3RJbmRlbnREZWNyZWFzZSwKICAgICAgSW5kZW50SW5jcmVhc2U6IExpc3RJbmRlbnRJbmNyZWFzZSwKICAgICAgSW5kaWFuUnVwZWUsCiAgICAgIEluZmluaXR5OiBJbmZpbml0eTIsCiAgICAgIEluZm86IEluZm8yLAogICAgICBJbnNwZWN0OiBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgICAgIEluc3BlY3Rpb25QYW5lbCwKICAgICAgSW5zdGFncmFtLAogICAgICBJdGFsaWMsCiAgICAgIEl0ZXJhdGlvbkNjdywKICAgICAgSXRlcmF0aW9uQ3csCiAgICAgIEphcGFuZXNlWWVuLAogICAgICBKb3lzdGljaywKICAgICAgS2FuYmFuLAogICAgICBLYW5iYW5TcXVhcmU6IFNxdWFyZUthbmJhbiwKICAgICAgS2FuYmFuU3F1YXJlRGFzaGVkOiBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgICAgIEtheWFrLAogICAgICBLZXk6IEtleTIsCiAgICAgIEtleVJvdW5kLAogICAgICBLZXlTcXVhcmUsCiAgICAgIEtleWJvYXJkOiBLZXlib2FyZDIsCiAgICAgIEtleWJvYXJkTXVzaWMsCiAgICAgIEtleWJvYXJkT2ZmLAogICAgICBMYW1wLAogICAgICBMYW1wQ2VpbGluZywKICAgICAgTGFtcERlc2ssCiAgICAgIExhbXBGbG9vciwKICAgICAgTGFtcFdhbGxEb3duLAogICAgICBMYW1wV2FsbFVwLAogICAgICBMYW5kUGxvdCwKICAgICAgTGFuZG1hcmssCiAgICAgIExhbmd1YWdlcywKICAgICAgTGFwdG9wLAogICAgICBMYXB0b3AyOiBMYXB0b3BNaW5pbWFsLAogICAgICBMYXB0b3BNaW5pbWFsLAogICAgICBMYXB0b3BNaW5pbWFsQ2hlY2ssCiAgICAgIExhc3NvLAogICAgICBMYXNzb1NlbGVjdCwKICAgICAgTGF1Z2gsCiAgICAgIExheWVyczogTGF5ZXJzMywKICAgICAgTGF5ZXJzMiwKICAgICAgTGF5ZXJzMywKICAgICAgTGF5ZXJzUGx1cywKICAgICAgTGF5b3V0OiBQYW5lbHNUb3BMZWZ0LAogICAgICBMYXlvdXREYXNoYm9hcmQsCiAgICAgIExheW91dEdyaWQsCiAgICAgIExheW91dExpc3QsCiAgICAgIExheW91dFBhbmVsTGVmdCwKICAgICAgTGF5b3V0UGFuZWxUb3AsCiAgICAgIExheW91dFRlbXBsYXRlLAogICAgICBMZWFmLAogICAgICBMZWFmeUdyZWVuLAogICAgICBMZWN0ZXJuLAogICAgICBMZXR0ZXJUZXh0OiBUZXh0SW5pdGlhbCwKICAgICAgTGlicmFyeTogTGlicmFyeTIsCiAgICAgIExpYnJhcnlCaWcsCiAgICAgIExpYnJhcnlTcXVhcmU6IFNxdWFyZUxpYnJhcnksCiAgICAgIExpZmVCdW95LAogICAgICBMaWdhdHVyZSwKICAgICAgTGlnaHRidWxiLAogICAgICBMaWdodGJ1bGJPZmYsCiAgICAgIExpbmVDaGFydDogQ2hhcnRMaW5lLAogICAgICBMaW5lU3F1aWdnbGUsCiAgICAgIExpbmssCiAgICAgIExpbmsyLAogICAgICBMaW5rMk9mZiwKICAgICAgTGlua2VkaW4sCiAgICAgIExpc3QsCiAgICAgIExpc3RDaGVjaywKICAgICAgTGlzdENoZWNrcywKICAgICAgTGlzdENoZXZyb25zRG93blVwLAogICAgICBMaXN0Q2hldnJvbnNVcERvd24sCiAgICAgIExpc3RDb2xsYXBzZSwKICAgICAgTGlzdEVuZCwKICAgICAgTGlzdEZpbHRlciwKICAgICAgTGlzdEZpbHRlclBsdXMsCiAgICAgIExpc3RJbmRlbnREZWNyZWFzZSwKICAgICAgTGlzdEluZGVudEluY3JlYXNlLAogICAgICBMaXN0TWludXMsCiAgICAgIExpc3RNdXNpYywKICAgICAgTGlzdE9yZGVyZWQsCiAgICAgIExpc3RQbHVzLAogICAgICBMaXN0UmVzdGFydCwKICAgICAgTGlzdFN0YXJ0LAogICAgICBMaXN0VG9kbywKICAgICAgTGlzdFRyZWUsCiAgICAgIExpc3RWaWRlbywKICAgICAgTGlzdFgsCiAgICAgIExvYWRlciwKICAgICAgTG9hZGVyMjogTG9hZGVyQ2lyY2xlLAogICAgICBMb2FkZXJDaXJjbGUsCiAgICAgIExvYWRlclBpbndoZWVsLAogICAgICBMb2NhdGUsCiAgICAgIExvY2F0ZUZpeGVkLAogICAgICBMb2NhdGVPZmYsCiAgICAgIExvY2F0aW9uRWRpdDogTWFwUGluUGVuLAogICAgICBMb2NrLAogICAgICBMb2NrS2V5aG9sZSwKICAgICAgTG9ja0tleWhvbGVPcGVuLAogICAgICBMb2NrT3BlbiwKICAgICAgTG9nSW4sCiAgICAgIExvZ091dCwKICAgICAgTG9ncywKICAgICAgTG9sbGlwb3AsCiAgICAgIEx1Z2dhZ2UsCiAgICAgIE1TcXVhcmU6IFNxdWFyZU0sCiAgICAgIE1hZ25ldCwKICAgICAgTWFpbCwKICAgICAgTWFpbENoZWNrLAogICAgICBNYWlsTWludXMsCiAgICAgIE1haWxPcGVuLAogICAgICBNYWlsUGx1cywKICAgICAgTWFpbFF1ZXN0aW9uOiBNYWlsUXVlc3Rpb25NYXJrLAogICAgICBNYWlsUXVlc3Rpb25NYXJrLAogICAgICBNYWlsU2VhcmNoLAogICAgICBNYWlsV2FybmluZywKICAgICAgTWFpbFgsCiAgICAgIE1haWxib3gsCiAgICAgIE1haWxzLAogICAgICBNYXA6IE1hcDIsCiAgICAgIE1hcE1pbnVzLAogICAgICBNYXBQaW4sCiAgICAgIE1hcFBpbkNoZWNrLAogICAgICBNYXBQaW5DaGVja0luc2lkZSwKICAgICAgTWFwUGluSG91c2UsCiAgICAgIE1hcFBpbk1pbnVzLAogICAgICBNYXBQaW5NaW51c0luc2lkZSwKICAgICAgTWFwUGluT2ZmLAogICAgICBNYXBQaW5QZW4sCiAgICAgIE1hcFBpblBsdXMsCiAgICAgIE1hcFBpblBsdXNJbnNpZGUsCiAgICAgIE1hcFBpblgsCiAgICAgIE1hcFBpblhJbnNpZGUsCiAgICAgIE1hcFBpbm5lZCwKICAgICAgTWFwUGx1cywKICAgICAgTWFycywKICAgICAgTWFyc1N0cm9rZSwKICAgICAgTWFydGluaSwKICAgICAgTWF4aW1pemUsCiAgICAgIE1heGltaXplMiwKICAgICAgTWVkYWwsCiAgICAgIE1lZ2FwaG9uZSwKICAgICAgTWVnYXBob25lT2ZmLAogICAgICBNZWgsCiAgICAgIE1lbW9yeVN0aWNrLAogICAgICBNZW51LAogICAgICBNZW51U3F1YXJlOiBTcXVhcmVNZW51LAogICAgICBNZXJnZSwKICAgICAgTWVzc2FnZUNpcmNsZSwKICAgICAgTWVzc2FnZUNpcmNsZUNvZGUsCiAgICAgIE1lc3NhZ2VDaXJjbGVEYXNoZWQsCiAgICAgIE1lc3NhZ2VDaXJjbGVIZWFydCwKICAgICAgTWVzc2FnZUNpcmNsZU1vcmUsCiAgICAgIE1lc3NhZ2VDaXJjbGVPZmYsCiAgICAgIE1lc3NhZ2VDaXJjbGVQbHVzLAogICAgICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb246IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgICAgIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgICAgIE1lc3NhZ2VDaXJjbGVSZXBseSwKICAgICAgTWVzc2FnZUNpcmNsZVdhcm5pbmcsCiAgICAgIE1lc3NhZ2VDaXJjbGVYLAogICAgICBNZXNzYWdlU3F1YXJlLAogICAgICBNZXNzYWdlU3F1YXJlQ29kZSwKICAgICAgTWVzc2FnZVNxdWFyZURhc2hlZCwKICAgICAgTWVzc2FnZVNxdWFyZURpZmYsCiAgICAgIE1lc3NhZ2VTcXVhcmVEb3QsCiAgICAgIE1lc3NhZ2VTcXVhcmVIZWFydCwKICAgICAgTWVzc2FnZVNxdWFyZUxvY2ssCiAgICAgIE1lc3NhZ2VTcXVhcmVNb3JlLAogICAgICBNZXNzYWdlU3F1YXJlT2ZmLAogICAgICBNZXNzYWdlU3F1YXJlUGx1cywKICAgICAgTWVzc2FnZVNxdWFyZVF1b3RlLAogICAgICBNZXNzYWdlU3F1YXJlUmVwbHksCiAgICAgIE1lc3NhZ2VTcXVhcmVTaGFyZSwKICAgICAgTWVzc2FnZVNxdWFyZVRleHQsCiAgICAgIE1lc3NhZ2VTcXVhcmVXYXJuaW5nLAogICAgICBNZXNzYWdlU3F1YXJlWCwKICAgICAgTWVzc2FnZXNTcXVhcmUsCiAgICAgIE1pYywKICAgICAgTWljMjogTWljVm9jYWwsCiAgICAgIE1pY09mZiwKICAgICAgTWljVm9jYWwsCiAgICAgIE1pY3JvY2hpcCwKICAgICAgTWljcm9zY29wZSwKICAgICAgTWljcm93YXZlLAogICAgICBNaWxlc3RvbmUsCiAgICAgIE1pbGssCiAgICAgIE1pbGtPZmYsCiAgICAgIE1pbmltaXplLAogICAgICBNaW5pbWl6ZTIsCiAgICAgIE1pbnVzLAogICAgICBNaW51c0NpcmNsZTogQ2lyY2xlTWludXMsCiAgICAgIE1pbnVzU3F1YXJlOiBTcXVhcmVNaW51cywKICAgICAgTW9uaXRvciwKICAgICAgTW9uaXRvckNoZWNrLAogICAgICBNb25pdG9yQ2xvdWQsCiAgICAgIE1vbml0b3JDb2csCiAgICAgIE1vbml0b3JEb3QsCiAgICAgIE1vbml0b3JEb3duLAogICAgICBNb25pdG9yT2ZmLAogICAgICBNb25pdG9yUGF1c2UsCiAgICAgIE1vbml0b3JQbGF5LAogICAgICBNb25pdG9yU21hcnRwaG9uZSwKICAgICAgTW9uaXRvclNwZWFrZXIsCiAgICAgIE1vbml0b3JTdG9wLAogICAgICBNb25pdG9yVXAsCiAgICAgIE1vbml0b3JYLAogICAgICBNb29uLAogICAgICBNb29uU3RhciwKICAgICAgTW9yZUhvcml6b250YWw6IEVsbGlwc2lzLAogICAgICBNb3JlVmVydGljYWw6IEVsbGlwc2lzVmVydGljYWwsCiAgICAgIE1vdG9yYmlrZSwKICAgICAgTW91bnRhaW4sCiAgICAgIE1vdW50YWluU25vdywKICAgICAgTW91c2UsCiAgICAgIE1vdXNlT2ZmLAogICAgICBNb3VzZVBvaW50ZXIsCiAgICAgIE1vdXNlUG9pbnRlcjIsCiAgICAgIE1vdXNlUG9pbnRlcjJPZmYsCiAgICAgIE1vdXNlUG9pbnRlckJhbiwKICAgICAgTW91c2VQb2ludGVyQ2xpY2ssCiAgICAgIE1vdXNlUG9pbnRlclNxdWFyZURhc2hlZDogU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyLAogICAgICBNb3ZlLAogICAgICBNb3ZlM0Q6IE1vdmUzZCwKICAgICAgTW92ZTNkLAogICAgICBNb3ZlRGlhZ29uYWwsCiAgICAgIE1vdmVEaWFnb25hbDIsCiAgICAgIE1vdmVEb3duLAogICAgICBNb3ZlRG93bkxlZnQsCiAgICAgIE1vdmVEb3duUmlnaHQsCiAgICAgIE1vdmVIb3Jpem9udGFsLAogICAgICBNb3ZlTGVmdCwKICAgICAgTW92ZVJpZ2h0LAogICAgICBNb3ZlVXAsCiAgICAgIE1vdmVVcExlZnQsCiAgICAgIE1vdmVVcFJpZ2h0LAogICAgICBNb3ZlVmVydGljYWwsCiAgICAgIE11c2ljLAogICAgICBNdXNpYzIsCiAgICAgIE11c2ljMywKICAgICAgTXVzaWM0LAogICAgICBOYXZpZ2F0aW9uLAogICAgICBOYXZpZ2F0aW9uMiwKICAgICAgTmF2aWdhdGlvbjJPZmYsCiAgICAgIE5hdmlnYXRpb25PZmYsCiAgICAgIE5ldHdvcmssCiAgICAgIE5ld3NwYXBlciwKICAgICAgTmZjLAogICAgICBOb25CaW5hcnksCiAgICAgIE5vdGVib29rLAogICAgICBOb3RlYm9va1BlbiwKICAgICAgTm90ZWJvb2tUYWJzLAogICAgICBOb3RlYm9va1RleHQsCiAgICAgIE5vdGVwYWRUZXh0LAogICAgICBOb3RlcGFkVGV4dERhc2hlZCwKICAgICAgTnV0LAogICAgICBOdXRPZmYsCiAgICAgIE9jdGFnb24sCiAgICAgIE9jdGFnb25BbGVydCwKICAgICAgT2N0YWdvbk1pbnVzLAogICAgICBPY3RhZ29uUGF1c2UsCiAgICAgIE9jdGFnb25YLAogICAgICBPbWVnYSwKICAgICAgT3B0aW9uLAogICAgICBPcmJpdCwKICAgICAgT3JpZ2FtaSwKICAgICAgT3V0ZGVudDogTGlzdEluZGVudERlY3JlYXNlLAogICAgICBQYWNrYWdlLAogICAgICBQYWNrYWdlMiwKICAgICAgUGFja2FnZUNoZWNrLAogICAgICBQYWNrYWdlTWludXMsCiAgICAgIFBhY2thZ2VPcGVuLAogICAgICBQYWNrYWdlUGx1cywKICAgICAgUGFja2FnZVNlYXJjaCwKICAgICAgUGFja2FnZVgsCiAgICAgIFBhaW50QnVja2V0LAogICAgICBQYWludFJvbGxlciwKICAgICAgUGFpbnRicnVzaCwKICAgICAgUGFpbnRicnVzaDI6IFBhaW50YnJ1c2hWZXJ0aWNhbCwKICAgICAgUGFpbnRicnVzaFZlcnRpY2FsLAogICAgICBQYWxldHRlLAogICAgICBQYWxtdHJlZTogVHJlZVBhbG0sCiAgICAgIFBhbmRhLAogICAgICBQYW5lbEJvdHRvbSwKICAgICAgUGFuZWxCb3R0b21DbG9zZSwKICAgICAgUGFuZWxCb3R0b21EYXNoZWQsCiAgICAgIFBhbmVsQm90dG9tSW5hY3RpdmU6IFBhbmVsQm90dG9tRGFzaGVkLAogICAgICBQYW5lbEJvdHRvbU9wZW4sCiAgICAgIFBhbmVsTGVmdCwKICAgICAgUGFuZWxMZWZ0Q2xvc2UsCiAgICAgIFBhbmVsTGVmdERhc2hlZCwKICAgICAgUGFuZWxMZWZ0SW5hY3RpdmU6IFBhbmVsTGVmdERhc2hlZCwKICAgICAgUGFuZWxMZWZ0T3BlbiwKICAgICAgUGFuZWxMZWZ0UmlnaHREYXNoZWQsCiAgICAgIFBhbmVsUmlnaHQsCiAgICAgIFBhbmVsUmlnaHRDbG9zZSwKICAgICAgUGFuZWxSaWdodERhc2hlZCwKICAgICAgUGFuZWxSaWdodEluYWN0aXZlOiBQYW5lbFJpZ2h0RGFzaGVkLAogICAgICBQYW5lbFJpZ2h0T3BlbiwKICAgICAgUGFuZWxUb3AsCiAgICAgIFBhbmVsVG9wQm90dG9tRGFzaGVkLAogICAgICBQYW5lbFRvcENsb3NlLAogICAgICBQYW5lbFRvcERhc2hlZCwKICAgICAgUGFuZWxUb3BJbmFjdGl2ZTogUGFuZWxUb3BEYXNoZWQsCiAgICAgIFBhbmVsVG9wT3BlbiwKICAgICAgUGFuZWxzTGVmdEJvdHRvbSwKICAgICAgUGFuZWxzTGVmdFJpZ2h0OiBDb2x1bW5zMywKICAgICAgUGFuZWxzUmlnaHRCb3R0b20sCiAgICAgIFBhbmVsc1RvcEJvdHRvbTogUm93czMsCiAgICAgIFBhbmVsc1RvcExlZnQsCiAgICAgIFBhcGVyY2xpcCwKICAgICAgUGFyZW50aGVzZXMsCiAgICAgIFBhcmtpbmdDaXJjbGU6IENpcmNsZVBhcmtpbmcsCiAgICAgIFBhcmtpbmdDaXJjbGVPZmY6IENpcmNsZVBhcmtpbmdPZmYsCiAgICAgIFBhcmtpbmdNZXRlciwKICAgICAgUGFya2luZ1NxdWFyZTogU3F1YXJlUGFya2luZywKICAgICAgUGFya2luZ1NxdWFyZU9mZjogU3F1YXJlUGFya2luZ09mZiwKICAgICAgUGFydHlQb3BwZXIsCiAgICAgIFBhdXNlLAogICAgICBQYXVzZUNpcmNsZTogQ2lyY2xlUGF1c2UsCiAgICAgIFBhdXNlT2N0YWdvbjogT2N0YWdvblBhdXNlLAogICAgICBQYXdQcmludCwKICAgICAgUGNDYXNlLAogICAgICBQZW4sCiAgICAgIFBlbkJveDogU3F1YXJlUGVuLAogICAgICBQZW5MaW5lLAogICAgICBQZW5PZmYsCiAgICAgIFBlblNxdWFyZTogU3F1YXJlUGVuLAogICAgICBQZW5Ub29sLAogICAgICBQZW5jaWwsCiAgICAgIFBlbmNpbExpbmUsCiAgICAgIFBlbmNpbE9mZiwKICAgICAgUGVuY2lsUnVsZXIsCiAgICAgIFBlbnRhZ29uLAogICAgICBQZXJjZW50LAogICAgICBQZXJjZW50Q2lyY2xlOiBDaXJjbGVQZXJjZW50LAogICAgICBQZXJjZW50RGlhbW9uZDogRGlhbW9uZFBlcmNlbnQsCiAgICAgIFBlcmNlbnRTcXVhcmU6IFNxdWFyZVBlcmNlbnQsCiAgICAgIFBlcnNvblN0YW5kaW5nLAogICAgICBQaGlsaXBwaW5lUGVzbywKICAgICAgUGhvbmUsCiAgICAgIFBob25lQ2FsbCwKICAgICAgUGhvbmVGb3J3YXJkZWQsCiAgICAgIFBob25lSW5jb21pbmcsCiAgICAgIFBob25lTWlzc2VkLAogICAgICBQaG9uZU9mZiwKICAgICAgUGhvbmVPdXRnb2luZywKICAgICAgUGksCiAgICAgIFBpU3F1YXJlOiBTcXVhcmVQaSwKICAgICAgUGlhbm8sCiAgICAgIFBpY2theGUsCiAgICAgIFBpY3R1cmVJblBpY3R1cmUsCiAgICAgIFBpY3R1cmVJblBpY3R1cmUyLAogICAgICBQaWVDaGFydDogQ2hhcnRQaWUsCiAgICAgIFBpZ2d5QmFuaywKICAgICAgUGlsY3JvdywKICAgICAgUGlsY3Jvd0xlZnQsCiAgICAgIFBpbGNyb3dSaWdodCwKICAgICAgUGlsY3Jvd1NxdWFyZTogU3F1YXJlUGlsY3JvdywKICAgICAgUGlsbCwKICAgICAgUGlsbEJvdHRsZSwKICAgICAgUGluLAogICAgICBQaW5PZmYsCiAgICAgIFBpcGV0dGUsCiAgICAgIFBpenphLAogICAgICBQbGFuZSwKICAgICAgUGxhbmVMYW5kaW5nLAogICAgICBQbGFuZVRha2VvZmYsCiAgICAgIFBsYXksCiAgICAgIFBsYXlDaXJjbGU6IENpcmNsZVBsYXksCiAgICAgIFBsYXlTcXVhcmU6IFNxdWFyZVBsYXksCiAgICAgIFBsdWcsCiAgICAgIFBsdWcyLAogICAgICBQbHVnWmFwLAogICAgICBQbHVnWmFwMjogUGx1Z1phcCwKICAgICAgUGx1cywKICAgICAgUGx1c0NpcmNsZTogQ2lyY2xlUGx1cywKICAgICAgUGx1c1NxdWFyZTogU3F1YXJlUGx1cywKICAgICAgUG9ja2V0LAogICAgICBQb2NrZXRLbmlmZSwKICAgICAgUG9kY2FzdCwKICAgICAgUG9pbnRlciwKICAgICAgUG9pbnRlck9mZiwKICAgICAgUG9wY29ybiwKICAgICAgUG9wc2ljbGUsCiAgICAgIFBvdW5kU3RlcmxpbmcsCiAgICAgIFBvd2VyLAogICAgICBQb3dlckNpcmNsZTogQ2lyY2xlUG93ZXIsCiAgICAgIFBvd2VyT2ZmLAogICAgICBQb3dlclNxdWFyZTogU3F1YXJlUG93ZXIsCiAgICAgIFByZXNlbnRhdGlvbiwKICAgICAgUHJpbnRlciwKICAgICAgUHJpbnRlckNoZWNrLAogICAgICBQcmludGVyWCwKICAgICAgUHJvamVjdG9yLAogICAgICBQcm9wb3J0aW9ucywKICAgICAgUHV6emxlLAogICAgICBQeXJhbWlkLAogICAgICBRckNvZGUsCiAgICAgIFF1b3RlLAogICAgICBSYWJiaXQsCiAgICAgIFJhZGFyLAogICAgICBSYWRpYXRpb24sCiAgICAgIFJhZGljYWwsCiAgICAgIFJhZGlvLAogICAgICBSYWRpb1JlY2VpdmVyLAogICAgICBSYWRpb1Rvd2VyLAogICAgICBSYWRpdXMsCiAgICAgIFJhaWxTeW1ib2wsCiAgICAgIFJhaW5ib3csCiAgICAgIFJhdCwKICAgICAgUmF0aW8sCiAgICAgIFJlY2VpcHQsCiAgICAgIFJlY2VpcHRDZW50LAogICAgICBSZWNlaXB0RXVybywKICAgICAgUmVjZWlwdEluZGlhblJ1cGVlLAogICAgICBSZWNlaXB0SmFwYW5lc2VZZW4sCiAgICAgIFJlY2VpcHRQb3VuZFN0ZXJsaW5nLAogICAgICBSZWNlaXB0UnVzc2lhblJ1YmxlLAogICAgICBSZWNlaXB0U3dpc3NGcmFuYywKICAgICAgUmVjZWlwdFRleHQsCiAgICAgIFJlY2VpcHRUdXJraXNoTGlyYSwKICAgICAgUmVjdGFuZ2xlQ2lyY2xlLAogICAgICBSZWN0YW5nbGVFbGxpcHNpcywKICAgICAgUmVjdGFuZ2xlR29nZ2xlcywKICAgICAgUmVjdGFuZ2xlSG9yaXpvbnRhbCwKICAgICAgUmVjdGFuZ2xlVmVydGljYWwsCiAgICAgIFJlY3ljbGUsCiAgICAgIFJlZG8sCiAgICAgIFJlZG8yLAogICAgICBSZWRvRG90LAogICAgICBSZWZyZXNoQ2N3LAogICAgICBSZWZyZXNoQ2N3RG90LAogICAgICBSZWZyZXNoQ3csCiAgICAgIFJlZnJlc2hDd09mZiwKICAgICAgUmVmcmlnZXJhdG9yLAogICAgICBSZWdleCwKICAgICAgUmVtb3ZlRm9ybWF0dGluZywKICAgICAgUmVwZWF0LAogICAgICBSZXBlYXQxLAogICAgICBSZXBlYXQyLAogICAgICBSZXBsYWNlLAogICAgICBSZXBsYWNlQWxsLAogICAgICBSZXBseSwKICAgICAgUmVwbHlBbGwsCiAgICAgIFJld2luZCwKICAgICAgUmliYm9uLAogICAgICBSb2NrZXQsCiAgICAgIFJvY2tpbmdDaGFpciwKICAgICAgUm9sbGVyQ29hc3RlciwKICAgICAgUm9zZSwKICAgICAgUm90YXRlM0Q6IFJvdGF0ZTNkLAogICAgICBSb3RhdGUzZCwKICAgICAgUm90YXRlQ2N3LAogICAgICBSb3RhdGVDY3dLZXksCiAgICAgIFJvdGF0ZUNjd1NxdWFyZSwKICAgICAgUm90YXRlQ3csCiAgICAgIFJvdGF0ZUN3U3F1YXJlLAogICAgICBSb3V0ZSwKICAgICAgUm91dGVPZmYsCiAgICAgIFJvdXRlciwKICAgICAgUm93czogUm93czIsCiAgICAgIFJvd3MyLAogICAgICBSb3dzMywKICAgICAgUm93czQsCiAgICAgIFJzcywKICAgICAgUnVsZXIsCiAgICAgIFJ1bGVyRGltZW5zaW9uTGluZSwKICAgICAgUnVzc2lhblJ1YmxlLAogICAgICBTYWlsYm9hdCwKICAgICAgU2FsYWQsCiAgICAgIFNhbmR3aWNoLAogICAgICBTYXRlbGxpdGUsCiAgICAgIFNhdGVsbGl0ZURpc2gsCiAgICAgIFNhdWRpUml5YWwsCiAgICAgIFNhdmUsCiAgICAgIFNhdmVBbGwsCiAgICAgIFNhdmVPZmYsCiAgICAgIFNjYWxlLAogICAgICBTY2FsZTNEOiBTY2FsZTNkLAogICAgICBTY2FsZTNkLAogICAgICBTY2FsaW5nLAogICAgICBTY2FuLAogICAgICBTY2FuQmFyY29kZSwKICAgICAgU2NhbkV5ZSwKICAgICAgU2NhbkZhY2UsCiAgICAgIFNjYW5IZWFydCwKICAgICAgU2NhbkxpbmUsCiAgICAgIFNjYW5RckNvZGUsCiAgICAgIFNjYW5TZWFyY2gsCiAgICAgIFNjYW5UZXh0LAogICAgICBTY2F0dGVyQ2hhcnQ6IENoYXJ0U2NhdHRlciwKICAgICAgU2Nob29sLAogICAgICBTY2hvb2wyOiBVbml2ZXJzaXR5LAogICAgICBTY2lzc29ycywKICAgICAgU2Npc3NvcnNMaW5lRGFzaGVkLAogICAgICBTY2lzc29yc1NxdWFyZTogU3F1YXJlU2Npc3NvcnMsCiAgICAgIFNjaXNzb3JzU3F1YXJlRGFzaGVkQm90dG9tOiBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycywKICAgICAgU2Nvb3RlciwKICAgICAgU2NyZWVuU2hhcmUsCiAgICAgIFNjcmVlblNoYXJlT2ZmLAogICAgICBTY3JvbGwsCiAgICAgIFNjcm9sbFRleHQsCiAgICAgIFNlYXJjaCwKICAgICAgU2VhcmNoQWxlcnQsCiAgICAgIFNlYXJjaENoZWNrLAogICAgICBTZWFyY2hDb2RlLAogICAgICBTZWFyY2hTbGFzaCwKICAgICAgU2VhcmNoWCwKICAgICAgU2VjdGlvbiwKICAgICAgU2VuZCwKICAgICAgU2VuZEhvcml6b25hbDogU2VuZEhvcml6b250YWwsCiAgICAgIFNlbmRIb3Jpem9udGFsLAogICAgICBTZW5kVG9CYWNrLAogICAgICBTZXBhcmF0b3JIb3Jpem9udGFsLAogICAgICBTZXBhcmF0b3JWZXJ0aWNhbCwKICAgICAgU2VydmVyLAogICAgICBTZXJ2ZXJDb2csCiAgICAgIFNlcnZlckNyYXNoLAogICAgICBTZXJ2ZXJPZmYsCiAgICAgIFNldHRpbmdzLAogICAgICBTZXR0aW5nczIsCiAgICAgIFNoYXBlcywKICAgICAgU2hhcmUsCiAgICAgIFNoYXJlMiwKICAgICAgU2hlZXQsCiAgICAgIFNoZWxsLAogICAgICBTaGllbGQsCiAgICAgIFNoaWVsZEFsZXJ0LAogICAgICBTaGllbGRCYW4sCiAgICAgIFNoaWVsZENoZWNrLAogICAgICBTaGllbGRDbG9zZTogU2hpZWxkWCwKICAgICAgU2hpZWxkRWxsaXBzaXMsCiAgICAgIFNoaWVsZEhhbGYsCiAgICAgIFNoaWVsZE1pbnVzLAogICAgICBTaGllbGRPZmYsCiAgICAgIFNoaWVsZFBsdXMsCiAgICAgIFNoaWVsZFF1ZXN0aW9uOiBTaGllbGRRdWVzdGlvbk1hcmssCiAgICAgIFNoaWVsZFF1ZXN0aW9uTWFyaywKICAgICAgU2hpZWxkVXNlciwKICAgICAgU2hpZWxkWCwKICAgICAgU2hpcCwKICAgICAgU2hpcFdoZWVsLAogICAgICBTaGlydCwKICAgICAgU2hvcHBpbmdCYWcsCiAgICAgIFNob3BwaW5nQmFza2V0LAogICAgICBTaG9wcGluZ0NhcnQsCiAgICAgIFNob3ZlbCwKICAgICAgU2hvd2VySGVhZCwKICAgICAgU2hyZWRkZXIsCiAgICAgIFNocmltcCwKICAgICAgU2hyaW5rLAogICAgICBTaHJ1YiwKICAgICAgU2h1ZmZsZSwKICAgICAgU2lkZWJhcjogUGFuZWxMZWZ0LAogICAgICBTaWRlYmFyQ2xvc2U6IFBhbmVsTGVmdENsb3NlLAogICAgICBTaWRlYmFyT3BlbjogUGFuZWxMZWZ0T3BlbiwKICAgICAgU2lnbWEsCiAgICAgIFNpZ21hU3F1YXJlOiBTcXVhcmVTaWdtYSwKICAgICAgU2lnbmFsLAogICAgICBTaWduYWxIaWdoLAogICAgICBTaWduYWxMb3csCiAgICAgIFNpZ25hbE1lZGl1bSwKICAgICAgU2lnbmFsWmVybywKICAgICAgU2lnbmF0dXJlLAogICAgICBTaWducG9zdCwKICAgICAgU2lnbnBvc3RCaWcsCiAgICAgIFNpcmVuLAogICAgICBTa2lwQmFjaywKICAgICAgU2tpcEZvcndhcmQsCiAgICAgIFNrdWxsLAogICAgICBTbGFjaywKICAgICAgU2xhc2gsCiAgICAgIFNsYXNoU3F1YXJlOiBTcXVhcmVTbGFzaCwKICAgICAgU2xpY2UsCiAgICAgIFNsaWRlcnM6IFNsaWRlcnNWZXJ0aWNhbCwKICAgICAgU2xpZGVyc0hvcml6b250YWwsCiAgICAgIFNsaWRlcnNWZXJ0aWNhbCwKICAgICAgU21hcnRwaG9uZSwKICAgICAgU21hcnRwaG9uZUNoYXJnaW5nLAogICAgICBTbWFydHBob25lTmZjLAogICAgICBTbWlsZSwKICAgICAgU21pbGVQbHVzLAogICAgICBTbmFpbCwKICAgICAgU25vd2ZsYWtlLAogICAgICBTb2FwRGlzcGVuc2VyRHJvcGxldCwKICAgICAgU29mYSwKICAgICAgU29sYXJQYW5lbCwKICAgICAgU29ydEFzYzogQXJyb3dVcE5hcnJvd1dpZGUsCiAgICAgIFNvcnREZXNjOiBBcnJvd0Rvd25XaWRlTmFycm93LAogICAgICBTb3VwLAogICAgICBTcGFjZSwKICAgICAgU3BhZGUsCiAgICAgIFNwYXJrbGUsCiAgICAgIFNwYXJrbGVzLAogICAgICBTcGVha2VyLAogICAgICBTcGVlY2gsCiAgICAgIFNwZWxsQ2hlY2ssCiAgICAgIFNwZWxsQ2hlY2syLAogICAgICBTcGxpbmUsCiAgICAgIFNwbGluZVBvaW50ZXIsCiAgICAgIFNwbGl0LAogICAgICBTcGxpdFNxdWFyZUhvcml6b250YWw6IFNxdWFyZVNwbGl0SG9yaXpvbnRhbCwKICAgICAgU3BsaXRTcXVhcmVWZXJ0aWNhbDogU3F1YXJlU3BsaXRWZXJ0aWNhbCwKICAgICAgU3Bvb2wsCiAgICAgIFNwb3RsaWdodCwKICAgICAgU3ByYXlDYW4sCiAgICAgIFNwcm91dCwKICAgICAgU3F1YXJlLAogICAgICBTcXVhcmVBY3Rpdml0eSwKICAgICAgU3F1YXJlQXJyb3dEb3duLAogICAgICBTcXVhcmVBcnJvd0Rvd25MZWZ0LAogICAgICBTcXVhcmVBcnJvd0Rvd25SaWdodCwKICAgICAgU3F1YXJlQXJyb3dMZWZ0LAogICAgICBTcXVhcmVBcnJvd091dERvd25MZWZ0LAogICAgICBTcXVhcmVBcnJvd091dERvd25SaWdodCwKICAgICAgU3F1YXJlQXJyb3dPdXRVcExlZnQsCiAgICAgIFNxdWFyZUFycm93T3V0VXBSaWdodCwKICAgICAgU3F1YXJlQXJyb3dSaWdodCwKICAgICAgU3F1YXJlQXJyb3dVcCwKICAgICAgU3F1YXJlQXJyb3dVcExlZnQsCiAgICAgIFNxdWFyZUFycm93VXBSaWdodCwKICAgICAgU3F1YXJlQXN0ZXJpc2ssCiAgICAgIFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzLAogICAgICBTcXVhcmVDaGFydEdhbnR0LAogICAgICBTcXVhcmVDaGVjaywKICAgICAgU3F1YXJlQ2hlY2tCaWcsCiAgICAgIFNxdWFyZUNoZXZyb25Eb3duLAogICAgICBTcXVhcmVDaGV2cm9uTGVmdCwKICAgICAgU3F1YXJlQ2hldnJvblJpZ2h0LAogICAgICBTcXVhcmVDaGV2cm9uVXAsCiAgICAgIFNxdWFyZUNvZGUsCiAgICAgIFNxdWFyZURhc2hlZCwKICAgICAgU3F1YXJlRGFzaGVkQm90dG9tLAogICAgICBTcXVhcmVEYXNoZWRCb3R0b21Db2RlLAogICAgICBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgICAgIFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciwKICAgICAgU3F1YXJlRGFzaGVkVG9wU29saWQsCiAgICAgIFNxdWFyZURpdmlkZSwKICAgICAgU3F1YXJlRG90LAogICAgICBTcXVhcmVFcXVhbCwKICAgICAgU3F1YXJlRnVuY3Rpb24sCiAgICAgIFNxdWFyZUdhbnR0Q2hhcnQ6IFNxdWFyZUNoYXJ0R2FudHQsCiAgICAgIFNxdWFyZUthbmJhbiwKICAgICAgU3F1YXJlTGlicmFyeSwKICAgICAgU3F1YXJlTSwKICAgICAgU3F1YXJlTWVudSwKICAgICAgU3F1YXJlTWludXMsCiAgICAgIFNxdWFyZU1vdXNlUG9pbnRlciwKICAgICAgU3F1YXJlUGFya2luZywKICAgICAgU3F1YXJlUGFya2luZ09mZiwKICAgICAgU3F1YXJlUGF1c2UsCiAgICAgIFNxdWFyZVBlbiwKICAgICAgU3F1YXJlUGVyY2VudCwKICAgICAgU3F1YXJlUGksCiAgICAgIFNxdWFyZVBpbGNyb3csCiAgICAgIFNxdWFyZVBsYXksCiAgICAgIFNxdWFyZVBsdXMsCiAgICAgIFNxdWFyZVBvd2VyLAogICAgICBTcXVhcmVSYWRpY2FsLAogICAgICBTcXVhcmVSb3VuZENvcm5lciwKICAgICAgU3F1YXJlU2Npc3NvcnMsCiAgICAgIFNxdWFyZVNpZ21hLAogICAgICBTcXVhcmVTbGFzaCwKICAgICAgU3F1YXJlU3BsaXRIb3Jpem9udGFsLAogICAgICBTcXVhcmVTcGxpdFZlcnRpY2FsLAogICAgICBTcXVhcmVTcXVhcmUsCiAgICAgIFNxdWFyZVN0YWNrLAogICAgICBTcXVhcmVTdGFyLAogICAgICBTcXVhcmVTdG9wLAogICAgICBTcXVhcmVUZXJtaW5hbCwKICAgICAgU3F1YXJlVXNlciwKICAgICAgU3F1YXJlVXNlclJvdW5kLAogICAgICBTcXVhcmVYLAogICAgICBTcXVhcmVzRXhjbHVkZSwKICAgICAgU3F1YXJlc0ludGVyc2VjdCwKICAgICAgU3F1YXJlc1N1YnRyYWN0LAogICAgICBTcXVhcmVzVW5pdGUsCiAgICAgIFNxdWlyY2xlLAogICAgICBTcXVpcmNsZURhc2hlZCwKICAgICAgU3F1aXJyZWwsCiAgICAgIFN0YW1wLAogICAgICBTdGFyLAogICAgICBTdGFySGFsZiwKICAgICAgU3Rhck9mZiwKICAgICAgU3RhcnM6IFNwYXJrbGVzLAogICAgICBTdGVwQmFjaywKICAgICAgU3RlcEZvcndhcmQsCiAgICAgIFN0ZXRob3Njb3BlLAogICAgICBTdGlja2VyLAogICAgICBTdGlja3lOb3RlLAogICAgICBTdG9uZSwKICAgICAgU3RvcENpcmNsZTogQ2lyY2xlU3RvcCwKICAgICAgU3RvcmUsCiAgICAgIFN0cmV0Y2hIb3Jpem9udGFsLAogICAgICBTdHJldGNoVmVydGljYWwsCiAgICAgIFN0cmlrZXRocm91Z2gsCiAgICAgIFN1YnNjcmlwdCwKICAgICAgU3VidGl0bGVzOiBDYXB0aW9ucywKICAgICAgU3VuLAogICAgICBTdW5EaW0sCiAgICAgIFN1bk1lZGl1bSwKICAgICAgU3VuTW9vbiwKICAgICAgU3VuU25vdywKICAgICAgU3VucmlzZSwKICAgICAgU3Vuc2V0LAogICAgICBTdXBlcnNjcmlwdCwKICAgICAgU3dhdGNoQm9vaywKICAgICAgU3dpc3NGcmFuYywKICAgICAgU3dpdGNoQ2FtZXJhLAogICAgICBTd29yZCwKICAgICAgU3dvcmRzLAogICAgICBTeXJpbmdlLAogICAgICBUYWJsZSwKICAgICAgVGFibGUyLAogICAgICBUYWJsZUNlbGxzTWVyZ2UsCiAgICAgIFRhYmxlQ2VsbHNTcGxpdCwKICAgICAgVGFibGVDb2x1bW5zU3BsaXQsCiAgICAgIFRhYmxlQ29uZmlnOiBDb2x1bW5zM0NvZywKICAgICAgVGFibGVPZkNvbnRlbnRzLAogICAgICBUYWJsZVByb3BlcnRpZXMsCiAgICAgIFRhYmxlUm93c1NwbGl0LAogICAgICBUYWJsZXQsCiAgICAgIFRhYmxldFNtYXJ0cGhvbmUsCiAgICAgIFRhYmxldHMsCiAgICAgIFRhZzogVGFnMiwKICAgICAgVGFncywKICAgICAgVGFsbHkxLAogICAgICBUYWxseTIsCiAgICAgIFRhbGx5MywKICAgICAgVGFsbHk0LAogICAgICBUYWxseTUsCiAgICAgIFRhbmdlbnQsCiAgICAgIFRhcmdldCwKICAgICAgVGVsZXNjb3BlLAogICAgICBUZW50LAogICAgICBUZW50VHJlZSwKICAgICAgVGVybWluYWwsCiAgICAgIFRlcm1pbmFsU3F1YXJlOiBTcXVhcmVUZXJtaW5hbCwKICAgICAgVGVzdFR1YmUsCiAgICAgIFRlc3RUdWJlMjogVGVzdFR1YmVEaWFnb25hbCwKICAgICAgVGVzdFR1YmVEaWFnb25hbCwKICAgICAgVGVzdFR1YmVzLAogICAgICBUZXh0OiBUZXh0QWxpZ25TdGFydCwKICAgICAgVGV4dEFsaWduQ2VudGVyLAogICAgICBUZXh0QWxpZ25FbmQsCiAgICAgIFRleHRBbGlnbkp1c3RpZnksCiAgICAgIFRleHRBbGlnblN0YXJ0LAogICAgICBUZXh0Q3Vyc29yLAogICAgICBUZXh0Q3Vyc29ySW5wdXQsCiAgICAgIFRleHRJbml0aWFsLAogICAgICBUZXh0UXVvdGUsCiAgICAgIFRleHRTZWFyY2gsCiAgICAgIFRleHRTZWxlY3QsCiAgICAgIFRleHRTZWxlY3Rpb246IFRleHRTZWxlY3QsCiAgICAgIFRleHRXcmFwLAogICAgICBUaGVhdGVyLAogICAgICBUaGVybW9tZXRlciwKICAgICAgVGhlcm1vbWV0ZXJTbm93Zmxha2UsCiAgICAgIFRoZXJtb21ldGVyU3VuLAogICAgICBUaHVtYnNEb3duLAogICAgICBUaHVtYnNVcCwKICAgICAgVGlja2V0LAogICAgICBUaWNrZXRDaGVjaywKICAgICAgVGlja2V0TWludXMsCiAgICAgIFRpY2tldFBlcmNlbnQsCiAgICAgIFRpY2tldFBsdXMsCiAgICAgIFRpY2tldFNsYXNoLAogICAgICBUaWNrZXRYLAogICAgICBUaWNrZXRzLAogICAgICBUaWNrZXRzUGxhbmUsCiAgICAgIFRpbWVyOiBUaW1lcjIsCiAgICAgIFRpbWVyT2ZmLAogICAgICBUaW1lclJlc2V0LAogICAgICBUb2dnbGVMZWZ0LAogICAgICBUb2dnbGVSaWdodCwKICAgICAgVG9pbGV0LAogICAgICBUb29sQ2FzZSwKICAgICAgVG9vbGJveCwKICAgICAgVG9ybmFkbywKICAgICAgVG9ydXMsCiAgICAgIFRvdWNocGFkLAogICAgICBUb3VjaHBhZE9mZiwKICAgICAgVG93ZXJDb250cm9sLAogICAgICBUb3lCcmljaywKICAgICAgVHJhY3RvciwKICAgICAgVHJhZmZpY0NvbmUsCiAgICAgIFRyYWluOiBUcmFtRnJvbnQsCiAgICAgIFRyYWluRnJvbnQsCiAgICAgIFRyYWluRnJvbnRUdW5uZWwsCiAgICAgIFRyYWluVHJhY2ssCiAgICAgIFRyYW1Gcm9udCwKICAgICAgVHJhbnNnZW5kZXIsCiAgICAgIFRyYXNoLAogICAgICBUcmFzaDIsCiAgICAgIFRyZWVEZWNpZHVvdXMsCiAgICAgIFRyZWVQYWxtLAogICAgICBUcmVlUGluZSwKICAgICAgVHJlZXMsCiAgICAgIFRyZWxsbywKICAgICAgVHJlbmRpbmdEb3duLAogICAgICBUcmVuZGluZ1VwLAogICAgICBUcmVuZGluZ1VwRG93biwKICAgICAgVHJpYW5nbGUsCiAgICAgIFRyaWFuZ2xlQWxlcnQsCiAgICAgIFRyaWFuZ2xlRGFzaGVkLAogICAgICBUcmlhbmdsZVJpZ2h0LAogICAgICBUcm9waHksCiAgICAgIFRydWNrLAogICAgICBUcnVja0VsZWN0cmljLAogICAgICBUdXJraXNoTGlyYSwKICAgICAgVHVybnRhYmxlLAogICAgICBUdXJ0bGUsCiAgICAgIFR2LAogICAgICBUdjI6IFR2TWluaW1hbCwKICAgICAgVHZNaW5pbWFsLAogICAgICBUdk1pbmltYWxQbGF5LAogICAgICBUd2l0Y2gsCiAgICAgIFR3aXR0ZXIsCiAgICAgIFR5cGUsCiAgICAgIFR5cGVPdXRsaW5lLAogICAgICBVbWJyZWxsYSwKICAgICAgVW1icmVsbGFPZmYsCiAgICAgIFVuZGVybGluZSwKICAgICAgVW5kbywKICAgICAgVW5kbzIsCiAgICAgIFVuZG9Eb3QsCiAgICAgIFVuZm9sZEhvcml6b250YWwsCiAgICAgIFVuZm9sZFZlcnRpY2FsLAogICAgICBVbmdyb3VwLAogICAgICBVbml2ZXJzaXR5LAogICAgICBVbmxpbmssCiAgICAgIFVubGluazIsCiAgICAgIFVubG9jazogTG9ja09wZW4sCiAgICAgIFVubG9ja0tleWhvbGU6IExvY2tLZXlob2xlT3BlbiwKICAgICAgVW5wbHVnLAogICAgICBVcGxvYWQsCiAgICAgIFVwbG9hZENsb3VkOiBDbG91ZFVwbG9hZCwKICAgICAgVXNiLAogICAgICBVc2VyLAogICAgICBVc2VyMjogVXNlclJvdW5kLAogICAgICBVc2VyQ2hlY2ssCiAgICAgIFVzZXJDaGVjazI6IFVzZXJSb3VuZENoZWNrLAogICAgICBVc2VyQ2lyY2xlOiBDaXJjbGVVc2VyLAogICAgICBVc2VyQ2lyY2xlMjogQ2lyY2xlVXNlclJvdW5kLAogICAgICBVc2VyQ29nLAogICAgICBVc2VyQ29nMjogVXNlclJvdW5kQ29nLAogICAgICBVc2VyS2V5LAogICAgICBVc2VyTG9jaywKICAgICAgVXNlck1pbnVzLAogICAgICBVc2VyTWludXMyOiBVc2VyUm91bmRNaW51cywKICAgICAgVXNlclBlbiwKICAgICAgVXNlclBsdXMsCiAgICAgIFVzZXJQbHVzMjogVXNlclJvdW5kUGx1cywKICAgICAgVXNlclJvdW5kLAogICAgICBVc2VyUm91bmRDaGVjaywKICAgICAgVXNlclJvdW5kQ29nLAogICAgICBVc2VyUm91bmRLZXksCiAgICAgIFVzZXJSb3VuZE1pbnVzLAogICAgICBVc2VyUm91bmRQZW4sCiAgICAgIFVzZXJSb3VuZFBsdXMsCiAgICAgIFVzZXJSb3VuZFNlYXJjaCwKICAgICAgVXNlclJvdW5kWCwKICAgICAgVXNlclNlYXJjaCwKICAgICAgVXNlclNxdWFyZTogU3F1YXJlVXNlciwKICAgICAgVXNlclNxdWFyZTI6IFNxdWFyZVVzZXJSb3VuZCwKICAgICAgVXNlclN0YXIsCiAgICAgIFVzZXJYLAogICAgICBVc2VyWDI6IFVzZXJSb3VuZFgsCiAgICAgIFVzZXJzLAogICAgICBVc2VyczI6IFVzZXJzUm91bmQsCiAgICAgIFVzZXJzUm91bmQsCiAgICAgIFV0ZW5zaWxzLAogICAgICBVdGVuc2lsc0Nyb3NzZWQsCiAgICAgIFV0aWxpdHlQb2xlLAogICAgICBWYW4sCiAgICAgIFZhcmlhYmxlLAogICAgICBWYXVsdCwKICAgICAgVmVjdG9yU3F1YXJlLAogICAgICBWZWdhbiwKICAgICAgVmVuZXRpYW5NYXNrLAogICAgICBWZW51cywKICAgICAgVmVudXNBbmRNYXJzLAogICAgICBWZXJpZmllZDogQmFkZ2VDaGVjaywKICAgICAgVmlicmF0ZSwKICAgICAgVmlicmF0ZU9mZiwKICAgICAgVmlkZW8sCiAgICAgIFZpZGVvT2ZmLAogICAgICBWaWRlb3RhcGUsCiAgICAgIFZpZXcsCiAgICAgIFZvaWNlbWFpbCwKICAgICAgVm9sbGV5YmFsbCwKICAgICAgVm9sdW1lLAogICAgICBWb2x1bWUxLAogICAgICBWb2x1bWUyLAogICAgICBWb2x1bWVPZmYsCiAgICAgIFZvbHVtZVgsCiAgICAgIFZvdGUsCiAgICAgIFdhbGxldCwKICAgICAgV2FsbGV0MjogV2FsbGV0TWluaW1hbCwKICAgICAgV2FsbGV0Q2FyZHMsCiAgICAgIFdhbGxldE1pbmltYWwsCiAgICAgIFdhbGxwYXBlciwKICAgICAgV2FuZCwKICAgICAgV2FuZDI6IFdhbmRTcGFya2xlcywKICAgICAgV2FuZFNwYXJrbGVzLAogICAgICBXYXJlaG91c2UsCiAgICAgIFdhc2hpbmdNYWNoaW5lLAogICAgICBXYXRjaCwKICAgICAgV2F2ZXMsCiAgICAgIFdhdmVzQXJyb3dEb3duLAogICAgICBXYXZlc0Fycm93VXAsCiAgICAgIFdhdmVzTGFkZGVyLAogICAgICBXYXlwb2ludHMsCiAgICAgIFdlYmNhbSwKICAgICAgV2ViaG9vaywKICAgICAgV2ViaG9va09mZiwKICAgICAgV2VpZ2h0LAogICAgICBXZWlnaHRUaWxkZSwKICAgICAgV2hlYXQsCiAgICAgIFdoZWF0T2ZmLAogICAgICBXaG9sZVdvcmQsCiAgICAgIFdpZmksCiAgICAgIFdpZmlDb2csCiAgICAgIFdpZmlIaWdoLAogICAgICBXaWZpTG93LAogICAgICBXaWZpT2ZmLAogICAgICBXaWZpUGVuLAogICAgICBXaWZpU3luYywKICAgICAgV2lmaVplcm8sCiAgICAgIFdpbmQsCiAgICAgIFdpbmRBcnJvd0Rvd24sCiAgICAgIFdpbmUsCiAgICAgIFdpbmVPZmYsCiAgICAgIFdvcmtmbG93LAogICAgICBXb3JtLAogICAgICBXcmFwVGV4dDogVGV4dFdyYXAsCiAgICAgIFdyZW5jaCwKICAgICAgWDogWDIsCiAgICAgIFhDaXJjbGU6IENpcmNsZVgsCiAgICAgIFhPY3RhZ29uOiBPY3RhZ29uWCwKICAgICAgWFNxdWFyZTogU3F1YXJlWCwKICAgICAgWW91dHViZSwKICAgICAgWmFwLAogICAgICBaYXBPZmYsCiAgICAgIFpvb21JbiwKICAgICAgWm9vbU91dAogICAgfSk7CiAgICB2YXIgY3JlYXRlSWNvbnMgPSAoewogICAgICBpY29uczogaWNvbnM2ID0ge30sCiAgICAgIG5hbWVBdHRyID0gImRhdGEtbHVjaWRlIiwKICAgICAgYXR0cnMgPSB7fSwKICAgICAgcm9vdDogcm9vdDYgPSBkb2N1bWVudCwKICAgICAgaW5UZW1wbGF0ZXMKICAgIH0gPSB7fSkgPT4gewogICAgICBpZiAoIU9iamVjdC52YWx1ZXMoaWNvbnM2KS5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAiUGxlYXNlIHByb3ZpZGUgYW4gaWNvbnMgb2JqZWN0LlxuSWYgeW91IHdhbnQgdG8gdXNlIGFsbCB0aGUgaWNvbnMgeW91IGNhbiBpbXBvcnQgaXQgbGlrZTpcbiBgaW1wb3J0IHsgY3JlYXRlSWNvbnMsIGljb25zIH0gZnJvbSAnbHVjaWRlJztcbmx1Y2lkZS5jcmVhdGVJY29ucyh7aWNvbnN9KTtgIgogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiByb290NiA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBjcmVhdGVJY29ucygpYCBvbmx5IHdvcmtzIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC4iKTsKICAgICAgfQogICAgICBjb25zdCBlbGVtZW50c1RvUmVwbGFjZSA9IEFycmF5LmZyb20ocm9vdDYucXVlcnlTZWxlY3RvckFsbChgWyR7bmFtZUF0dHJ9XWApKTsKICAgICAgZWxlbWVudHNUb1JlcGxhY2UuZm9yRWFjaCgoZWxlbWVudDQpID0+IHJlcGxhY2VFbGVtZW50KGVsZW1lbnQ0LCB7IG5hbWVBdHRyLCBpY29uczogaWNvbnM2LCBhdHRycyB9KSk7CiAgICAgIGlmIChpblRlbXBsYXRlcykgewogICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IEFycmF5LmZyb20ocm9vdDYucXVlcnlTZWxlY3RvckFsbCgidGVtcGxhdGUiKSk7CiAgICAgICAgdGVtcGxhdGVzLmZvckVhY2goCiAgICAgICAgICAodGVtcGxhdGUpID0+IGNyZWF0ZUljb25zKHsKICAgICAgICAgICAgaWNvbnM6IGljb25zNiwKICAgICAgICAgICAgbmFtZUF0dHIsCiAgICAgICAgICAgIGF0dHJzLAogICAgICAgICAgICByb290OiB0ZW1wbGF0ZS5jb250ZW50LAogICAgICAgICAgICBpblRlbXBsYXRlcwogICAgICAgICAgfSkKICAgICAgICApOwogICAgICB9CiAgICAgIGlmIChuYW1lQXR0ciA9PT0gImRhdGEtbHVjaWRlIikgewogICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFbGVtZW50cyA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoIltpY29uLW5hbWVdIik7CiAgICAgICAgaWYgKGRlcHJlY2F0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgICAgICJbTHVjaWRlXSBTb21lIGljb25zIHdlcmUgZm91bmQgd2l0aCB0aGUgbm93IGRlcHJlY2F0ZWQgaWNvbi1uYW1lIGF0dHJpYnV0ZS4gVGhlc2Ugd2lsbCBzdGlsbCBiZSByZXBsYWNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCB3aWxsIG5vIGxvbmdlciBiZSBzdXBwb3J0ZWQgaW4gdjEuMCBhbmQgeW91IHNob3VsZCBzd2l0Y2ggdG8gZGF0YS1sdWNpZGUiCiAgICAgICAgICApOwogICAgICAgICAgQXJyYXkuZnJvbShkZXByZWNhdGVkRWxlbWVudHMpLmZvckVhY2goCiAgICAgICAgICAgIChlbGVtZW50NCkgPT4gcmVwbGFjZUVsZW1lbnQoZWxlbWVudDQsIHsgbmFtZUF0dHI6ICJpY29uLW5hbWUiLCBpY29uczogaWNvbnM2LCBhdHRycyB9KQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBleHBvcnRzLkFBcnJvd0Rvd24gPSBBQXJyb3dEb3duOwogICAgZXhwb3J0cy5BQXJyb3dVcCA9IEFBcnJvd1VwOwogICAgZXhwb3J0cy5BTGFyZ2VTbWFsbCA9IEFMYXJnZVNtYWxsOwogICAgZXhwb3J0cy5BY2Nlc3NpYmlsaXR5ID0gQWNjZXNzaWJpbGl0eTsKICAgIGV4cG9ydHMuQWN0aXZpdHkgPSBBY3Rpdml0eTsKICAgIGV4cG9ydHMuQWN0aXZpdHlTcXVhcmUgPSBTcXVhcmVBY3Rpdml0eTsKICAgIGV4cG9ydHMuQWlyVmVudCA9IEFpclZlbnQ7CiAgICBleHBvcnRzLkFpcnBsYXkgPSBBaXJwbGF5OwogICAgZXhwb3J0cy5BbGFybUNoZWNrID0gQWxhcm1DbG9ja0NoZWNrOwogICAgZXhwb3J0cy5BbGFybUNsb2NrID0gQWxhcm1DbG9jazsKICAgIGV4cG9ydHMuQWxhcm1DbG9ja0NoZWNrID0gQWxhcm1DbG9ja0NoZWNrOwogICAgZXhwb3J0cy5BbGFybUNsb2NrTWludXMgPSBBbGFybUNsb2NrTWludXM7CiAgICBleHBvcnRzLkFsYXJtQ2xvY2tPZmYgPSBBbGFybUNsb2NrT2ZmOwogICAgZXhwb3J0cy5BbGFybUNsb2NrUGx1cyA9IEFsYXJtQ2xvY2tQbHVzOwogICAgZXhwb3J0cy5BbGFybU1pbnVzID0gQWxhcm1DbG9ja01pbnVzOwogICAgZXhwb3J0cy5BbGFybVBsdXMgPSBBbGFybUNsb2NrUGx1czsKICAgIGV4cG9ydHMuQWxhcm1TbW9rZSA9IEFsYXJtU21va2U7CiAgICBleHBvcnRzLkFsYnVtID0gQWxidW07CiAgICBleHBvcnRzLkFsZXJ0Q2lyY2xlID0gQ2lyY2xlQWxlcnQ7CiAgICBleHBvcnRzLkFsZXJ0T2N0YWdvbiA9IE9jdGFnb25BbGVydDsKICAgIGV4cG9ydHMuQWxlcnRUcmlhbmdsZSA9IFRyaWFuZ2xlQWxlcnQ7CiAgICBleHBvcnRzLkFsaWduQ2VudGVyID0gVGV4dEFsaWduQ2VudGVyOwogICAgZXhwb3J0cy5BbGlnbkNlbnRlckhvcml6b250YWwgPSBBbGlnbkNlbnRlckhvcml6b250YWw7CiAgICBleHBvcnRzLkFsaWduQ2VudGVyVmVydGljYWwgPSBBbGlnbkNlbnRlclZlcnRpY2FsOwogICAgZXhwb3J0cy5BbGlnbkVuZEhvcml6b250YWwgPSBBbGlnbkVuZEhvcml6b250YWw7CiAgICBleHBvcnRzLkFsaWduRW5kVmVydGljYWwgPSBBbGlnbkVuZFZlcnRpY2FsOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyID0gQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlcjsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUVuZCA9IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydCA9IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydDsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciA9IEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbEp1c3RpZnlFbmQgPSBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQgPSBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQ7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kID0gQWxpZ25Ib3Jpem9udGFsU3BhY2VBcm91bmQ7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbiA9IEFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbjsKICAgIGV4cG9ydHMuQWxpZ25KdXN0aWZ5ID0gVGV4dEFsaWduSnVzdGlmeTsKICAgIGV4cG9ydHMuQWxpZ25MZWZ0ID0gVGV4dEFsaWduU3RhcnQ7CiAgICBleHBvcnRzLkFsaWduUmlnaHQgPSBUZXh0QWxpZ25FbmQ7CiAgICBleHBvcnRzLkFsaWduU3RhcnRIb3Jpem9udGFsID0gQWxpZ25TdGFydEhvcml6b250YWw7CiAgICBleHBvcnRzLkFsaWduU3RhcnRWZXJ0aWNhbCA9IEFsaWduU3RhcnRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXIgPSBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlcjsKICAgIGV4cG9ydHMuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQgPSBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZDsKICAgIGV4cG9ydHMuQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydCA9IEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQ7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyID0gQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxKdXN0aWZ5RW5kID0gQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQ7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQgPSBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0OwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsU3BhY2VBcm91bmQgPSBBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQ7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxTcGFjZUJldHdlZW4gPSBBbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuOwogICAgZXhwb3J0cy5BbWJ1bGFuY2UgPSBBbWJ1bGFuY2U7CiAgICBleHBvcnRzLkFtcGVyc2FuZCA9IEFtcGVyc2FuZDsKICAgIGV4cG9ydHMuQW1wZXJzYW5kcyA9IEFtcGVyc2FuZHM7CiAgICBleHBvcnRzLkFtcGhvcmEgPSBBbXBob3JhOwogICAgZXhwb3J0cy5BbmNob3IgPSBBbmNob3I7CiAgICBleHBvcnRzLkFuZ3J5ID0gQW5ncnk7CiAgICBleHBvcnRzLkFubm95ZWQgPSBBbm5veWVkOwogICAgZXhwb3J0cy5BbnRlbm5hID0gQW50ZW5uYTsKICAgIGV4cG9ydHMuQW52aWwgPSBBbnZpbDsKICAgIGV4cG9ydHMuQXBlcnR1cmUgPSBBcGVydHVyZTsKICAgIGV4cG9ydHMuQXBwV2luZG93ID0gQXBwV2luZG93OwogICAgZXhwb3J0cy5BcHBXaW5kb3dNYWMgPSBBcHBXaW5kb3dNYWM7CiAgICBleHBvcnRzLkFwcGxlID0gQXBwbGU7CiAgICBleHBvcnRzLkFyY2hpdmUgPSBBcmNoaXZlOwogICAgZXhwb3J0cy5BcmNoaXZlUmVzdG9yZSA9IEFyY2hpdmVSZXN0b3JlOwogICAgZXhwb3J0cy5BcmNoaXZlWCA9IEFyY2hpdmVYOwogICAgZXhwb3J0cy5BcmVhQ2hhcnQgPSBDaGFydEFyZWE7CiAgICBleHBvcnRzLkFybWNoYWlyID0gQXJtY2hhaXI7CiAgICBleHBvcnRzLkFycm93QmlnRG93biA9IEFycm93QmlnRG93bjsKICAgIGV4cG9ydHMuQXJyb3dCaWdEb3duRGFzaCA9IEFycm93QmlnRG93bkRhc2g7CiAgICBleHBvcnRzLkFycm93QmlnTGVmdCA9IEFycm93QmlnTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dCaWdMZWZ0RGFzaCA9IEFycm93QmlnTGVmdERhc2g7CiAgICBleHBvcnRzLkFycm93QmlnUmlnaHQgPSBBcnJvd0JpZ1JpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0JpZ1JpZ2h0RGFzaCA9IEFycm93QmlnUmlnaHREYXNoOwogICAgZXhwb3J0cy5BcnJvd0JpZ1VwID0gQXJyb3dCaWdVcDsKICAgIGV4cG9ydHMuQXJyb3dCaWdVcERhc2ggPSBBcnJvd0JpZ1VwRGFzaDsKICAgIGV4cG9ydHMuQXJyb3dEb3duID0gQXJyb3dEb3duOwogICAgZXhwb3J0cy5BcnJvd0Rvd24wMSA9IEFycm93RG93bjAxOwogICAgZXhwb3J0cy5BcnJvd0Rvd24xMCA9IEFycm93RG93bjEwOwogICAgZXhwb3J0cy5BcnJvd0Rvd25BWiA9IEFycm93RG93bkFaOwogICAgZXhwb3J0cy5BcnJvd0Rvd25BeiA9IEFycm93RG93bkFaOwogICAgZXhwb3J0cy5BcnJvd0Rvd25DaXJjbGUgPSBDaXJjbGVBcnJvd0Rvd247CiAgICBleHBvcnRzLkFycm93RG93bkZyb21MaW5lID0gQXJyb3dEb3duRnJvbUxpbmU7CiAgICBleHBvcnRzLkFycm93RG93bkxlZnQgPSBBcnJvd0Rvd25MZWZ0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25MZWZ0RnJvbUNpcmNsZSA9IENpcmNsZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLkFycm93RG93bkxlZnRGcm9tU3F1YXJlID0gU3F1YXJlQXJyb3dPdXREb3duTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dEb3duTGVmdFNxdWFyZSA9IFNxdWFyZUFycm93RG93bkxlZnQ7CiAgICBleHBvcnRzLkFycm93RG93bk5hcnJvd1dpZGUgPSBBcnJvd0Rvd25OYXJyb3dXaWRlOwogICAgZXhwb3J0cy5BcnJvd0Rvd25SaWdodCA9IEFycm93RG93blJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25SaWdodEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dERvd25SaWdodDsKICAgIGV4cG9ydHMuQXJyb3dEb3duUmlnaHRGcm9tU3F1YXJlID0gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLkFycm93RG93blJpZ2h0U3F1YXJlID0gU3F1YXJlQXJyb3dEb3duUmlnaHQ7CiAgICBleHBvcnRzLkFycm93RG93blNxdWFyZSA9IFNxdWFyZUFycm93RG93bjsKICAgIGV4cG9ydHMuQXJyb3dEb3duVG9Eb3QgPSBBcnJvd0Rvd25Ub0RvdDsKICAgIGV4cG9ydHMuQXJyb3dEb3duVG9MaW5lID0gQXJyb3dEb3duVG9MaW5lOwogICAgZXhwb3J0cy5BcnJvd0Rvd25VcCA9IEFycm93RG93blVwOwogICAgZXhwb3J0cy5BcnJvd0Rvd25XaWRlTmFycm93ID0gQXJyb3dEb3duV2lkZU5hcnJvdzsKICAgIGV4cG9ydHMuQXJyb3dEb3duWkEgPSBBcnJvd0Rvd25aQTsKICAgIGV4cG9ydHMuQXJyb3dEb3duWmEgPSBBcnJvd0Rvd25aQTsKICAgIGV4cG9ydHMuQXJyb3dMZWZ0ID0gQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5BcnJvd0xlZnRDaXJjbGUgPSBDaXJjbGVBcnJvd0xlZnQ7CiAgICBleHBvcnRzLkFycm93TGVmdEZyb21MaW5lID0gQXJyb3dMZWZ0RnJvbUxpbmU7CiAgICBleHBvcnRzLkFycm93TGVmdFJpZ2h0ID0gQXJyb3dMZWZ0UmlnaHQ7CiAgICBleHBvcnRzLkFycm93TGVmdFNxdWFyZSA9IFNxdWFyZUFycm93TGVmdDsKICAgIGV4cG9ydHMuQXJyb3dMZWZ0VG9MaW5lID0gQXJyb3dMZWZ0VG9MaW5lOwogICAgZXhwb3J0cy5BcnJvd1JpZ2h0ID0gQXJyb3dSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dSaWdodENpcmNsZSA9IENpcmNsZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRGcm9tTGluZSA9IEFycm93UmlnaHRGcm9tTGluZTsKICAgIGV4cG9ydHMuQXJyb3dSaWdodExlZnQgPSBBcnJvd1JpZ2h0TGVmdDsKICAgIGV4cG9ydHMuQXJyb3dSaWdodFNxdWFyZSA9IFNxdWFyZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRUb0xpbmUgPSBBcnJvd1JpZ2h0VG9MaW5lOwogICAgZXhwb3J0cy5BcnJvd1VwID0gQXJyb3dVcDsKICAgIGV4cG9ydHMuQXJyb3dVcDAxID0gQXJyb3dVcDAxOwogICAgZXhwb3J0cy5BcnJvd1VwMTAgPSBBcnJvd1VwMTA7CiAgICBleHBvcnRzLkFycm93VXBBWiA9IEFycm93VXBBWjsKICAgIGV4cG9ydHMuQXJyb3dVcEF6ID0gQXJyb3dVcEFaOwogICAgZXhwb3J0cy5BcnJvd1VwQ2lyY2xlID0gQ2lyY2xlQXJyb3dVcDsKICAgIGV4cG9ydHMuQXJyb3dVcERvd24gPSBBcnJvd1VwRG93bjsKICAgIGV4cG9ydHMuQXJyb3dVcEZyb21Eb3QgPSBBcnJvd1VwRnJvbURvdDsKICAgIGV4cG9ydHMuQXJyb3dVcEZyb21MaW5lID0gQXJyb3dVcEZyb21MaW5lOwogICAgZXhwb3J0cy5BcnJvd1VwTGVmdCA9IEFycm93VXBMZWZ0OwogICAgZXhwb3J0cy5BcnJvd1VwTGVmdEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dFVwTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dVcExlZnRGcm9tU3F1YXJlID0gU3F1YXJlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLkFycm93VXBMZWZ0U3F1YXJlID0gU3F1YXJlQXJyb3dVcExlZnQ7CiAgICBleHBvcnRzLkFycm93VXBOYXJyb3dXaWRlID0gQXJyb3dVcE5hcnJvd1dpZGU7CiAgICBleHBvcnRzLkFycm93VXBSaWdodCA9IEFycm93VXBSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dVcFJpZ2h0RnJvbUNpcmNsZSA9IENpcmNsZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dVcFJpZ2h0U3F1YXJlID0gU3F1YXJlQXJyb3dVcFJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd1VwU3F1YXJlID0gU3F1YXJlQXJyb3dVcDsKICAgIGV4cG9ydHMuQXJyb3dVcFRvTGluZSA9IEFycm93VXBUb0xpbmU7CiAgICBleHBvcnRzLkFycm93VXBXaWRlTmFycm93ID0gQXJyb3dVcFdpZGVOYXJyb3c7CiAgICBleHBvcnRzLkFycm93VXBaQSA9IEFycm93VXBaQTsKICAgIGV4cG9ydHMuQXJyb3dVcFphID0gQXJyb3dVcFpBOwogICAgZXhwb3J0cy5BcnJvd3NVcEZyb21MaW5lID0gQXJyb3dzVXBGcm9tTGluZTsKICAgIGV4cG9ydHMuQXN0ZXJpc2sgPSBBc3RlcmlzazsKICAgIGV4cG9ydHMuQXN0ZXJpc2tTcXVhcmUgPSBTcXVhcmVBc3RlcmlzazsKICAgIGV4cG9ydHMuQXRTaWduID0gQXRTaWduOwogICAgZXhwb3J0cy5BdG9tID0gQXRvbTsKICAgIGV4cG9ydHMuQXVkaW9MaW5lcyA9IEF1ZGlvTGluZXM7CiAgICBleHBvcnRzLkF1ZGlvV2F2ZWZvcm0gPSBBdWRpb1dhdmVmb3JtOwogICAgZXhwb3J0cy5Bd2FyZCA9IEF3YXJkOwogICAgZXhwb3J0cy5BeGUgPSBBeGU7CiAgICBleHBvcnRzLkF4aXMzRCA9IEF4aXMzZDsKICAgIGV4cG9ydHMuQXhpczNkID0gQXhpczNkOwogICAgZXhwb3J0cy5CYWJ5ID0gQmFieTsKICAgIGV4cG9ydHMuQmFja3BhY2sgPSBCYWNrcGFjazsKICAgIGV4cG9ydHMuQmFkZ2UgPSBCYWRnZTsKICAgIGV4cG9ydHMuQmFkZ2VBbGVydCA9IEJhZGdlQWxlcnQ7CiAgICBleHBvcnRzLkJhZGdlQ2VudCA9IEJhZGdlQ2VudDsKICAgIGV4cG9ydHMuQmFkZ2VDaGVjayA9IEJhZGdlQ2hlY2s7CiAgICBleHBvcnRzLkJhZGdlRG9sbGFyU2lnbiA9IEJhZGdlRG9sbGFyU2lnbjsKICAgIGV4cG9ydHMuQmFkZ2VFdXJvID0gQmFkZ2VFdXJvOwogICAgZXhwb3J0cy5CYWRnZUhlbHAgPSBCYWRnZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuQmFkZ2VJbmRpYW5SdXBlZSA9IEJhZGdlSW5kaWFuUnVwZWU7CiAgICBleHBvcnRzLkJhZGdlSW5mbyA9IEJhZGdlSW5mbzsKICAgIGV4cG9ydHMuQmFkZ2VKYXBhbmVzZVllbiA9IEJhZGdlSmFwYW5lc2VZZW47CiAgICBleHBvcnRzLkJhZGdlTWludXMgPSBCYWRnZU1pbnVzOwogICAgZXhwb3J0cy5CYWRnZVBlcmNlbnQgPSBCYWRnZVBlcmNlbnQ7CiAgICBleHBvcnRzLkJhZGdlUGx1cyA9IEJhZGdlUGx1czsKICAgIGV4cG9ydHMuQmFkZ2VQb3VuZFN0ZXJsaW5nID0gQmFkZ2VQb3VuZFN0ZXJsaW5nOwogICAgZXhwb3J0cy5CYWRnZVF1ZXN0aW9uTWFyayA9IEJhZGdlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5CYWRnZVJ1c3NpYW5SdWJsZSA9IEJhZGdlUnVzc2lhblJ1YmxlOwogICAgZXhwb3J0cy5CYWRnZVN3aXNzRnJhbmMgPSBCYWRnZVN3aXNzRnJhbmM7CiAgICBleHBvcnRzLkJhZGdlVHVya2lzaExpcmEgPSBCYWRnZVR1cmtpc2hMaXJhOwogICAgZXhwb3J0cy5CYWRnZVggPSBCYWRnZVg7CiAgICBleHBvcnRzLkJhZ2dhZ2VDbGFpbSA9IEJhZ2dhZ2VDbGFpbTsKICAgIGV4cG9ydHMuQmFsbG9vbiA9IEJhbGxvb247CiAgICBleHBvcnRzLkJhbiA9IEJhbjsKICAgIGV4cG9ydHMuQmFuYW5hID0gQmFuYW5hOwogICAgZXhwb3J0cy5CYW5kYWdlID0gQmFuZGFnZTsKICAgIGV4cG9ydHMuQmFua25vdGUgPSBCYW5rbm90ZTsKICAgIGV4cG9ydHMuQmFua25vdGVBcnJvd0Rvd24gPSBCYW5rbm90ZUFycm93RG93bjsKICAgIGV4cG9ydHMuQmFua25vdGVBcnJvd1VwID0gQmFua25vdGVBcnJvd1VwOwogICAgZXhwb3J0cy5CYW5rbm90ZVggPSBCYW5rbm90ZVg7CiAgICBleHBvcnRzLkJhckNoYXJ0ID0gQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5CYXJDaGFydDIgPSBDaGFydE5vQXhlc0NvbHVtbjsKICAgIGV4cG9ydHMuQmFyQ2hhcnQzID0gQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkJhckNoYXJ0NCA9IENoYXJ0Q29sdW1uSW5jcmVhc2luZzsKICAgIGV4cG9ydHMuQmFyQ2hhcnRCaWcgPSBDaGFydENvbHVtbkJpZzsKICAgIGV4cG9ydHMuQmFyQ2hhcnRIb3Jpem9udGFsID0gQ2hhcnRCYXI7CiAgICBleHBvcnRzLkJhckNoYXJ0SG9yaXpvbnRhbEJpZyA9IENoYXJ0QmFyQmlnOwogICAgZXhwb3J0cy5CYXJjb2RlID0gQmFyY29kZTsKICAgIGV4cG9ydHMuQmFycmVsID0gQmFycmVsOwogICAgZXhwb3J0cy5CYXNlbGluZSA9IEJhc2VsaW5lOwogICAgZXhwb3J0cy5CYXRoID0gQmF0aDsKICAgIGV4cG9ydHMuQmF0dGVyeSA9IEJhdHRlcnk7CiAgICBleHBvcnRzLkJhdHRlcnlDaGFyZ2luZyA9IEJhdHRlcnlDaGFyZ2luZzsKICAgIGV4cG9ydHMuQmF0dGVyeUZ1bGwgPSBCYXR0ZXJ5RnVsbDsKICAgIGV4cG9ydHMuQmF0dGVyeUxvdyA9IEJhdHRlcnlMb3c7CiAgICBleHBvcnRzLkJhdHRlcnlNZWRpdW0gPSBCYXR0ZXJ5TWVkaXVtOwogICAgZXhwb3J0cy5CYXR0ZXJ5UGx1cyA9IEJhdHRlcnlQbHVzOwogICAgZXhwb3J0cy5CYXR0ZXJ5V2FybmluZyA9IEJhdHRlcnlXYXJuaW5nOwogICAgZXhwb3J0cy5CZWFrZXIgPSBCZWFrZXI7CiAgICBleHBvcnRzLkJlYW4gPSBCZWFuOwogICAgZXhwb3J0cy5CZWFuT2ZmID0gQmVhbk9mZjsKICAgIGV4cG9ydHMuQmVkID0gQmVkOwogICAgZXhwb3J0cy5CZWREb3VibGUgPSBCZWREb3VibGU7CiAgICBleHBvcnRzLkJlZFNpbmdsZSA9IEJlZFNpbmdsZTsKICAgIGV4cG9ydHMuQmVlZiA9IEJlZWY7CiAgICBleHBvcnRzLkJlZXIgPSBCZWVyOwogICAgZXhwb3J0cy5CZWVyT2ZmID0gQmVlck9mZjsKICAgIGV4cG9ydHMuQmVsbCA9IEJlbGw7CiAgICBleHBvcnRzLkJlbGxEb3QgPSBCZWxsRG90OwogICAgZXhwb3J0cy5CZWxsRWxlY3RyaWMgPSBCZWxsRWxlY3RyaWM7CiAgICBleHBvcnRzLkJlbGxNaW51cyA9IEJlbGxNaW51czsKICAgIGV4cG9ydHMuQmVsbE9mZiA9IEJlbGxPZmY7CiAgICBleHBvcnRzLkJlbGxQbHVzID0gQmVsbFBsdXM7CiAgICBleHBvcnRzLkJlbGxSaW5nID0gQmVsbFJpbmc7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9uYWxFbmQgPSBCZXR3ZWVuSG9yaXpvbnRhbEVuZDsKICAgIGV4cG9ydHMuQmV0d2Vlbkhvcml6b25hbFN0YXJ0ID0gQmV0d2Vlbkhvcml6b250YWxTdGFydDsKICAgIGV4cG9ydHMuQmV0d2Vlbkhvcml6b250YWxFbmQgPSBCZXR3ZWVuSG9yaXpvbnRhbEVuZDsKICAgIGV4cG9ydHMuQmV0d2Vlbkhvcml6b250YWxTdGFydCA9IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ7CiAgICBleHBvcnRzLkJldHdlZW5WZXJ0aWNhbEVuZCA9IEJldHdlZW5WZXJ0aWNhbEVuZDsKICAgIGV4cG9ydHMuQmV0d2VlblZlcnRpY2FsU3RhcnQgPSBCZXR3ZWVuVmVydGljYWxTdGFydDsKICAgIGV4cG9ydHMuQmljZXBzRmxleGVkID0gQmljZXBzRmxleGVkOwogICAgZXhwb3J0cy5CaWtlID0gQmlrZTsKICAgIGV4cG9ydHMuQmluYXJ5ID0gQmluYXJ5OwogICAgZXhwb3J0cy5CaW5vY3VsYXJzID0gQmlub2N1bGFyczsKICAgIGV4cG9ydHMuQmlvaGF6YXJkID0gQmlvaGF6YXJkOwogICAgZXhwb3J0cy5CaXJkID0gQmlyZDsKICAgIGV4cG9ydHMuQmlyZGhvdXNlID0gQmlyZGhvdXNlOwogICAgZXhwb3J0cy5CaXRjb2luID0gQml0Y29pbjsKICAgIGV4cG9ydHMuQmxlbmQgPSBCbGVuZDsKICAgIGV4cG9ydHMuQmxpbmRzID0gQmxpbmRzOwogICAgZXhwb3J0cy5CbG9ja3MgPSBCbG9ja3M7CiAgICBleHBvcnRzLkJsdWV0b290aCA9IEJsdWV0b290aDsKICAgIGV4cG9ydHMuQmx1ZXRvb3RoQ29ubmVjdGVkID0gQmx1ZXRvb3RoQ29ubmVjdGVkOwogICAgZXhwb3J0cy5CbHVldG9vdGhPZmYgPSBCbHVldG9vdGhPZmY7CiAgICBleHBvcnRzLkJsdWV0b290aFNlYXJjaGluZyA9IEJsdWV0b290aFNlYXJjaGluZzsKICAgIGV4cG9ydHMuQm9sZCA9IEJvbGQ7CiAgICBleHBvcnRzLkJvbHQgPSBCb2x0OwogICAgZXhwb3J0cy5Cb21iID0gQm9tYjsKICAgIGV4cG9ydHMuQm9uZSA9IEJvbmU7CiAgICBleHBvcnRzLkJvb2sgPSBCb29rOwogICAgZXhwb3J0cy5Cb29rQSA9IEJvb2tBOwogICAgZXhwb3J0cy5Cb29rQWxlcnQgPSBCb29rQWxlcnQ7CiAgICBleHBvcnRzLkJvb2tBdWRpbyA9IEJvb2tBdWRpbzsKICAgIGV4cG9ydHMuQm9va0NoZWNrID0gQm9va0NoZWNrOwogICAgZXhwb3J0cy5Cb29rQ29weSA9IEJvb2tDb3B5OwogICAgZXhwb3J0cy5Cb29rRGFzaGVkID0gQm9va0Rhc2hlZDsKICAgIGV4cG9ydHMuQm9va0Rvd24gPSBCb29rRG93bjsKICAgIGV4cG9ydHMuQm9va0hlYWRwaG9uZXMgPSBCb29rSGVhZHBob25lczsKICAgIGV4cG9ydHMuQm9va0hlYXJ0ID0gQm9va0hlYXJ0OwogICAgZXhwb3J0cy5Cb29rSW1hZ2UgPSBCb29rSW1hZ2U7CiAgICBleHBvcnRzLkJvb2tLZXkgPSBCb29rS2V5OwogICAgZXhwb3J0cy5Cb29rTG9jayA9IEJvb2tMb2NrOwogICAgZXhwb3J0cy5Cb29rTWFya2VkID0gQm9va01hcmtlZDsKICAgIGV4cG9ydHMuQm9va01pbnVzID0gQm9va01pbnVzOwogICAgZXhwb3J0cy5Cb29rT3BlbiA9IEJvb2tPcGVuOwogICAgZXhwb3J0cy5Cb29rT3BlbkNoZWNrID0gQm9va09wZW5DaGVjazsKICAgIGV4cG9ydHMuQm9va09wZW5UZXh0ID0gQm9va09wZW5UZXh0OwogICAgZXhwb3J0cy5Cb29rUGx1cyA9IEJvb2tQbHVzOwogICAgZXhwb3J0cy5Cb29rU2VhcmNoID0gQm9va1NlYXJjaDsKICAgIGV4cG9ydHMuQm9va1RlbXBsYXRlID0gQm9va0Rhc2hlZDsKICAgIGV4cG9ydHMuQm9va1RleHQgPSBCb29rVGV4dDsKICAgIGV4cG9ydHMuQm9va1R5cGUgPSBCb29rVHlwZTsKICAgIGV4cG9ydHMuQm9va1VwID0gQm9va1VwOwogICAgZXhwb3J0cy5Cb29rVXAyID0gQm9va1VwMjsKICAgIGV4cG9ydHMuQm9va1VzZXIgPSBCb29rVXNlcjsKICAgIGV4cG9ydHMuQm9va1ggPSBCb29rWDsKICAgIGV4cG9ydHMuQm9va21hcmsgPSBCb29rbWFyazsKICAgIGV4cG9ydHMuQm9va21hcmtDaGVjayA9IEJvb2ttYXJrQ2hlY2s7CiAgICBleHBvcnRzLkJvb2ttYXJrTWludXMgPSBCb29rbWFya01pbnVzOwogICAgZXhwb3J0cy5Cb29rbWFya1BsdXMgPSBCb29rbWFya1BsdXM7CiAgICBleHBvcnRzLkJvb2ttYXJrWCA9IEJvb2ttYXJrWDsKICAgIGV4cG9ydHMuQm9vbUJveCA9IEJvb21Cb3g7CiAgICBleHBvcnRzLkJvdCA9IEJvdDsKICAgIGV4cG9ydHMuQm90TWVzc2FnZVNxdWFyZSA9IEJvdE1lc3NhZ2VTcXVhcmU7CiAgICBleHBvcnRzLkJvdE9mZiA9IEJvdE9mZjsKICAgIGV4cG9ydHMuQm90dGxlV2luZSA9IEJvdHRsZVdpbmU7CiAgICBleHBvcnRzLkJvd0Fycm93ID0gQm93QXJyb3c7CiAgICBleHBvcnRzLkJveCA9IEJveDsKICAgIGV4cG9ydHMuQm94U2VsZWN0ID0gU3F1YXJlRGFzaGVkOwogICAgZXhwb3J0cy5Cb3hlcyA9IEJveGVzOwogICAgZXhwb3J0cy5CcmFjZXMgPSBCcmFjZXM7CiAgICBleHBvcnRzLkJyYWNrZXRzID0gQnJhY2tldHM7CiAgICBleHBvcnRzLkJyYWluID0gQnJhaW47CiAgICBleHBvcnRzLkJyYWluQ2lyY3VpdCA9IEJyYWluQ2lyY3VpdDsKICAgIGV4cG9ydHMuQnJhaW5Db2cgPSBCcmFpbkNvZzsKICAgIGV4cG9ydHMuQnJpY2tXYWxsID0gQnJpY2tXYWxsOwogICAgZXhwb3J0cy5Ccmlja1dhbGxGaXJlID0gQnJpY2tXYWxsRmlyZTsKICAgIGV4cG9ydHMuQnJpY2tXYWxsU2hpZWxkID0gQnJpY2tXYWxsU2hpZWxkOwogICAgZXhwb3J0cy5CcmllZmNhc2UgPSBCcmllZmNhc2U7CiAgICBleHBvcnRzLkJyaWVmY2FzZUJ1c2luZXNzID0gQnJpZWZjYXNlQnVzaW5lc3M7CiAgICBleHBvcnRzLkJyaWVmY2FzZUNvbnZleW9yQmVsdCA9IEJyaWVmY2FzZUNvbnZleW9yQmVsdDsKICAgIGV4cG9ydHMuQnJpZWZjYXNlTWVkaWNhbCA9IEJyaWVmY2FzZU1lZGljYWw7CiAgICBleHBvcnRzLkJyaW5nVG9Gcm9udCA9IEJyaW5nVG9Gcm9udDsKICAgIGV4cG9ydHMuQnJ1c2ggPSBCcnVzaDsKICAgIGV4cG9ydHMuQnJ1c2hDbGVhbmluZyA9IEJydXNoQ2xlYW5pbmc7CiAgICBleHBvcnRzLkJ1YmJsZXMgPSBCdWJibGVzOwogICAgZXhwb3J0cy5CdWcgPSBCdWc7CiAgICBleHBvcnRzLkJ1Z09mZiA9IEJ1Z09mZjsKICAgIGV4cG9ydHMuQnVnUGxheSA9IEJ1Z1BsYXk7CiAgICBleHBvcnRzLkJ1aWxkaW5nID0gQnVpbGRpbmc7CiAgICBleHBvcnRzLkJ1aWxkaW5nMiA9IEJ1aWxkaW5nMjsKICAgIGV4cG9ydHMuQnVzID0gQnVzOwogICAgZXhwb3J0cy5CdXNGcm9udCA9IEJ1c0Zyb250OwogICAgZXhwb3J0cy5DYWJsZSA9IENhYmxlOwogICAgZXhwb3J0cy5DYWJsZUNhciA9IENhYmxlQ2FyOwogICAgZXhwb3J0cy5DYWtlID0gQ2FrZTsKICAgIGV4cG9ydHMuQ2FrZVNsaWNlID0gQ2FrZVNsaWNlOwogICAgZXhwb3J0cy5DYWxjdWxhdG9yID0gQ2FsY3VsYXRvcjsKICAgIGV4cG9ydHMuQ2FsZW5kYXIgPSBDYWxlbmRhcjsKICAgIGV4cG9ydHMuQ2FsZW5kYXIxID0gQ2FsZW5kYXIxOwogICAgZXhwb3J0cy5DYWxlbmRhckFycm93RG93biA9IENhbGVuZGFyQXJyb3dEb3duOwogICAgZXhwb3J0cy5DYWxlbmRhckFycm93VXAgPSBDYWxlbmRhckFycm93VXA7CiAgICBleHBvcnRzLkNhbGVuZGFyQ2hlY2sgPSBDYWxlbmRhckNoZWNrOwogICAgZXhwb3J0cy5DYWxlbmRhckNoZWNrMiA9IENhbGVuZGFyQ2hlY2syOwogICAgZXhwb3J0cy5DYWxlbmRhckNsb2NrID0gQ2FsZW5kYXJDbG9jazsKICAgIGV4cG9ydHMuQ2FsZW5kYXJDb2cgPSBDYWxlbmRhckNvZzsKICAgIGV4cG9ydHMuQ2FsZW5kYXJEYXlzID0gQ2FsZW5kYXJEYXlzOwogICAgZXhwb3J0cy5DYWxlbmRhckZvbGQgPSBDYWxlbmRhckZvbGQ7CiAgICBleHBvcnRzLkNhbGVuZGFySGVhcnQgPSBDYWxlbmRhckhlYXJ0OwogICAgZXhwb3J0cy5DYWxlbmRhck1pbnVzID0gQ2FsZW5kYXJNaW51czsKICAgIGV4cG9ydHMuQ2FsZW5kYXJNaW51czIgPSBDYWxlbmRhck1pbnVzMjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJPZmYgPSBDYWxlbmRhck9mZjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJQbHVzID0gQ2FsZW5kYXJQbHVzOwogICAgZXhwb3J0cy5DYWxlbmRhclBsdXMyID0gQ2FsZW5kYXJQbHVzMjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJSYW5nZSA9IENhbGVuZGFyUmFuZ2U7CiAgICBleHBvcnRzLkNhbGVuZGFyU2VhcmNoID0gQ2FsZW5kYXJTZWFyY2g7CiAgICBleHBvcnRzLkNhbGVuZGFyU3luYyA9IENhbGVuZGFyU3luYzsKICAgIGV4cG9ydHMuQ2FsZW5kYXJYID0gQ2FsZW5kYXJYOwogICAgZXhwb3J0cy5DYWxlbmRhclgyID0gQ2FsZW5kYXJYMjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJzID0gQ2FsZW5kYXJzOwogICAgZXhwb3J0cy5DYW1lcmEgPSBDYW1lcmE7CiAgICBleHBvcnRzLkNhbWVyYU9mZiA9IENhbWVyYU9mZjsKICAgIGV4cG9ydHMuQ2FuZGxlc3RpY2tDaGFydCA9IENoYXJ0Q2FuZGxlc3RpY2s7CiAgICBleHBvcnRzLkNhbmR5ID0gQ2FuZHk7CiAgICBleHBvcnRzLkNhbmR5Q2FuZSA9IENhbmR5Q2FuZTsKICAgIGV4cG9ydHMuQ2FuZHlPZmYgPSBDYW5keU9mZjsKICAgIGV4cG9ydHMuQ2FubmFiaXMgPSBDYW5uYWJpczsKICAgIGV4cG9ydHMuQ2FubmFiaXNPZmYgPSBDYW5uYWJpc09mZjsKICAgIGV4cG9ydHMuQ2FwdGlvbnMgPSBDYXB0aW9uczsKICAgIGV4cG9ydHMuQ2FwdGlvbnNPZmYgPSBDYXB0aW9uc09mZjsKICAgIGV4cG9ydHMuQ2FyID0gQ2FyOwogICAgZXhwb3J0cy5DYXJGcm9udCA9IENhckZyb250OwogICAgZXhwb3J0cy5DYXJUYXhpRnJvbnQgPSBDYXJUYXhpRnJvbnQ7CiAgICBleHBvcnRzLkNhcmF2YW4gPSBDYXJhdmFuOwogICAgZXhwb3J0cy5DYXJkU2ltID0gQ2FyZFNpbTsKICAgIGV4cG9ydHMuQ2Fycm90ID0gQ2Fycm90OwogICAgZXhwb3J0cy5DYXNlTG93ZXIgPSBDYXNlTG93ZXI7CiAgICBleHBvcnRzLkNhc2VTZW5zaXRpdmUgPSBDYXNlU2Vuc2l0aXZlOwogICAgZXhwb3J0cy5DYXNlVXBwZXIgPSBDYXNlVXBwZXI7CiAgICBleHBvcnRzLkNhc3NldHRlVGFwZSA9IENhc3NldHRlVGFwZTsKICAgIGV4cG9ydHMuQ2FzdCA9IENhc3Q7CiAgICBleHBvcnRzLkNhc3RsZSA9IENhc3RsZTsKICAgIGV4cG9ydHMuQ2F0ID0gQ2F0OwogICAgZXhwb3J0cy5DY3R2ID0gQ2N0djsKICAgIGV4cG9ydHMuQ2hhcnRBcmVhID0gQ2hhcnRBcmVhOwogICAgZXhwb3J0cy5DaGFydEJhciA9IENoYXJ0QmFyOwogICAgZXhwb3J0cy5DaGFydEJhckJpZyA9IENoYXJ0QmFyQmlnOwogICAgZXhwb3J0cy5DaGFydEJhckRlY3JlYXNpbmcgPSBDaGFydEJhckRlY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0QmFySW5jcmVhc2luZyA9IENoYXJ0QmFySW5jcmVhc2luZzsKICAgIGV4cG9ydHMuQ2hhcnRCYXJTdGFja2VkID0gQ2hhcnRCYXJTdGFja2VkOwogICAgZXhwb3J0cy5DaGFydENhbmRsZXN0aWNrID0gQ2hhcnRDYW5kbGVzdGljazsKICAgIGV4cG9ydHMuQ2hhcnRDb2x1bW4gPSBDaGFydENvbHVtbjsKICAgIGV4cG9ydHMuQ2hhcnRDb2x1bW5CaWcgPSBDaGFydENvbHVtbkJpZzsKICAgIGV4cG9ydHMuQ2hhcnRDb2x1bW5EZWNyZWFzaW5nID0gQ2hhcnRDb2x1bW5EZWNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydENvbHVtbkluY3JlYXNpbmcgPSBDaGFydENvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uU3RhY2tlZCA9IENoYXJ0Q29sdW1uU3RhY2tlZDsKICAgIGV4cG9ydHMuQ2hhcnRHYW50dCA9IENoYXJ0R2FudHQ7CiAgICBleHBvcnRzLkNoYXJ0TGluZSA9IENoYXJ0TGluZTsKICAgIGV4cG9ydHMuQ2hhcnROZXR3b3JrID0gQ2hhcnROZXR3b3JrOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0NvbHVtbiA9IENoYXJ0Tm9BeGVzQ29sdW1uOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmcgPSBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZyA9IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZzsKICAgIGV4cG9ydHMuQ2hhcnROb0F4ZXNDb21iaW5lZCA9IENoYXJ0Tm9BeGVzQ29tYmluZWQ7CiAgICBleHBvcnRzLkNoYXJ0Tm9BeGVzR2FudHQgPSBDaGFydE5vQXhlc0dhbnR0OwogICAgZXhwb3J0cy5DaGFydFBpZSA9IENoYXJ0UGllOwogICAgZXhwb3J0cy5DaGFydFNjYXR0ZXIgPSBDaGFydFNjYXR0ZXI7CiAgICBleHBvcnRzLkNoYXJ0U3BsaW5lID0gQ2hhcnRTcGxpbmU7CiAgICBleHBvcnRzLkNoZWNrID0gQ2hlY2s7CiAgICBleHBvcnRzLkNoZWNrQ2hlY2sgPSBDaGVja0NoZWNrOwogICAgZXhwb3J0cy5DaGVja0NpcmNsZSA9IENpcmNsZUNoZWNrQmlnOwogICAgZXhwb3J0cy5DaGVja0NpcmNsZTIgPSBDaXJjbGVDaGVjazsKICAgIGV4cG9ydHMuQ2hlY2tMaW5lID0gQ2hlY2tMaW5lOwogICAgZXhwb3J0cy5DaGVja1NxdWFyZSA9IFNxdWFyZUNoZWNrQmlnOwogICAgZXhwb3J0cy5DaGVja1NxdWFyZTIgPSBTcXVhcmVDaGVjazsKICAgIGV4cG9ydHMuQ2hlZkhhdCA9IENoZWZIYXQ7CiAgICBleHBvcnRzLkNoZXJyeSA9IENoZXJyeTsKICAgIGV4cG9ydHMuQ2hlc3NCaXNob3AgPSBDaGVzc0Jpc2hvcDsKICAgIGV4cG9ydHMuQ2hlc3NLaW5nID0gQ2hlc3NLaW5nOwogICAgZXhwb3J0cy5DaGVzc0tuaWdodCA9IENoZXNzS25pZ2h0OwogICAgZXhwb3J0cy5DaGVzc1Bhd24gPSBDaGVzc1Bhd247CiAgICBleHBvcnRzLkNoZXNzUXVlZW4gPSBDaGVzc1F1ZWVuOwogICAgZXhwb3J0cy5DaGVzc1Jvb2sgPSBDaGVzc1Jvb2s7CiAgICBleHBvcnRzLkNoZXZyb25Eb3duID0gQ2hldnJvbkRvd247CiAgICBleHBvcnRzLkNoZXZyb25Eb3duQ2lyY2xlID0gQ2lyY2xlQ2hldnJvbkRvd247CiAgICBleHBvcnRzLkNoZXZyb25Eb3duU3F1YXJlID0gU3F1YXJlQ2hldnJvbkRvd247CiAgICBleHBvcnRzLkNoZXZyb25GaXJzdCA9IENoZXZyb25GaXJzdDsKICAgIGV4cG9ydHMuQ2hldnJvbkxhc3QgPSBDaGV2cm9uTGFzdDsKICAgIGV4cG9ydHMuQ2hldnJvbkxlZnQgPSBDaGV2cm9uTGVmdDsKICAgIGV4cG9ydHMuQ2hldnJvbkxlZnRDaXJjbGUgPSBDaXJjbGVDaGV2cm9uTGVmdDsKICAgIGV4cG9ydHMuQ2hldnJvbkxlZnRTcXVhcmUgPSBTcXVhcmVDaGV2cm9uTGVmdDsKICAgIGV4cG9ydHMuQ2hldnJvblJpZ2h0ID0gQ2hldnJvblJpZ2h0OwogICAgZXhwb3J0cy5DaGV2cm9uUmlnaHRDaXJjbGUgPSBDaXJjbGVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25SaWdodFNxdWFyZSA9IFNxdWFyZUNoZXZyb25SaWdodDsKICAgIGV4cG9ydHMuQ2hldnJvblVwID0gQ2hldnJvblVwOwogICAgZXhwb3J0cy5DaGV2cm9uVXBDaXJjbGUgPSBDaXJjbGVDaGV2cm9uVXA7CiAgICBleHBvcnRzLkNoZXZyb25VcFNxdWFyZSA9IFNxdWFyZUNoZXZyb25VcDsKICAgIGV4cG9ydHMuQ2hldnJvbnNEb3duID0gQ2hldnJvbnNEb3duOwogICAgZXhwb3J0cy5DaGV2cm9uc0Rvd25VcCA9IENoZXZyb25zRG93blVwOwogICAgZXhwb3J0cy5DaGV2cm9uc0xlZnQgPSBDaGV2cm9uc0xlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25zTGVmdFJpZ2h0ID0gQ2hldnJvbnNMZWZ0UmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25zTGVmdFJpZ2h0RWxsaXBzaXMgPSBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzOwogICAgZXhwb3J0cy5DaGV2cm9uc1JpZ2h0ID0gQ2hldnJvbnNSaWdodDsKICAgIGV4cG9ydHMuQ2hldnJvbnNSaWdodExlZnQgPSBDaGV2cm9uc1JpZ2h0TGVmdDsKICAgIGV4cG9ydHMuQ2hldnJvbnNVcCA9IENoZXZyb25zVXA7CiAgICBleHBvcnRzLkNoZXZyb25zVXBEb3duID0gQ2hldnJvbnNVcERvd247CiAgICBleHBvcnRzLkNocm9tZSA9IENocm9taXVtOwogICAgZXhwb3J0cy5DaHJvbWl1bSA9IENocm9taXVtOwogICAgZXhwb3J0cy5DaHVyY2ggPSBDaHVyY2g7CiAgICBleHBvcnRzLkNpZ2FyZXR0ZSA9IENpZ2FyZXR0ZTsKICAgIGV4cG9ydHMuQ2lnYXJldHRlT2ZmID0gQ2lnYXJldHRlT2ZmOwogICAgZXhwb3J0cy5DaXJjbGUgPSBDaXJjbGU7CiAgICBleHBvcnRzLkNpcmNsZUFsZXJ0ID0gQ2lyY2xlQWxlcnQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93RG93biA9IENpcmNsZUFycm93RG93bjsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dMZWZ0ID0gQ2lyY2xlQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5DaXJjbGVBcnJvd091dERvd25MZWZ0ID0gQ2lyY2xlQXJyb3dPdXREb3duTGVmdDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQgPSBDaXJjbGVBcnJvd091dERvd25SaWdodDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dPdXRVcExlZnQgPSBDaXJjbGVBcnJvd091dFVwTGVmdDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0ID0gQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0OwogICAgZXhwb3J0cy5DaXJjbGVBcnJvd1JpZ2h0ID0gQ2lyY2xlQXJyb3dSaWdodDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dVcCA9IENpcmNsZUFycm93VXA7CiAgICBleHBvcnRzLkNpcmNsZUNoZWNrID0gQ2lyY2xlQ2hlY2s7CiAgICBleHBvcnRzLkNpcmNsZUNoZWNrQmlnID0gQ2lyY2xlQ2hlY2tCaWc7CiAgICBleHBvcnRzLkNpcmNsZUNoZXZyb25Eb3duID0gQ2lyY2xlQ2hldnJvbkRvd247CiAgICBleHBvcnRzLkNpcmNsZUNoZXZyb25MZWZ0ID0gQ2lyY2xlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNpcmNsZUNoZXZyb25SaWdodCA9IENpcmNsZUNoZXZyb25SaWdodDsKICAgIGV4cG9ydHMuQ2lyY2xlQ2hldnJvblVwID0gQ2lyY2xlQ2hldnJvblVwOwogICAgZXhwb3J0cy5DaXJjbGVEYXNoZWQgPSBDaXJjbGVEYXNoZWQ7CiAgICBleHBvcnRzLkNpcmNsZURpdmlkZSA9IENpcmNsZURpdmlkZTsKICAgIGV4cG9ydHMuQ2lyY2xlRG9sbGFyU2lnbiA9IENpcmNsZURvbGxhclNpZ247CiAgICBleHBvcnRzLkNpcmNsZURvdCA9IENpcmNsZURvdDsKICAgIGV4cG9ydHMuQ2lyY2xlRG90RGFzaGVkID0gQ2lyY2xlRG90RGFzaGVkOwogICAgZXhwb3J0cy5DaXJjbGVFbGxpcHNpcyA9IENpcmNsZUVsbGlwc2lzOwogICAgZXhwb3J0cy5DaXJjbGVFcXVhbCA9IENpcmNsZUVxdWFsOwogICAgZXhwb3J0cy5DaXJjbGVGYWRpbmdBcnJvd1VwID0gQ2lyY2xlRmFkaW5nQXJyb3dVcDsKICAgIGV4cG9ydHMuQ2lyY2xlRmFkaW5nUGx1cyA9IENpcmNsZUZhZGluZ1BsdXM7CiAgICBleHBvcnRzLkNpcmNsZUdhdWdlID0gQ2lyY2xlR2F1Z2U7CiAgICBleHBvcnRzLkNpcmNsZUhlbHAgPSBDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkNpcmNsZU1pbnVzID0gQ2lyY2xlTWludXM7CiAgICBleHBvcnRzLkNpcmNsZU9mZiA9IENpcmNsZU9mZjsKICAgIGV4cG9ydHMuQ2lyY2xlUGFya2luZyA9IENpcmNsZVBhcmtpbmc7CiAgICBleHBvcnRzLkNpcmNsZVBhcmtpbmdPZmYgPSBDaXJjbGVQYXJraW5nT2ZmOwogICAgZXhwb3J0cy5DaXJjbGVQYXVzZSA9IENpcmNsZVBhdXNlOwogICAgZXhwb3J0cy5DaXJjbGVQZXJjZW50ID0gQ2lyY2xlUGVyY2VudDsKICAgIGV4cG9ydHMuQ2lyY2xlUGlsZSA9IENpcmNsZVBpbGU7CiAgICBleHBvcnRzLkNpcmNsZVBsYXkgPSBDaXJjbGVQbGF5OwogICAgZXhwb3J0cy5DaXJjbGVQbHVzID0gQ2lyY2xlUGx1czsKICAgIGV4cG9ydHMuQ2lyY2xlUG91bmRTdGVybGluZyA9IENpcmNsZVBvdW5kU3Rlcmxpbmc7CiAgICBleHBvcnRzLkNpcmNsZVBvd2VyID0gQ2lyY2xlUG93ZXI7CiAgICBleHBvcnRzLkNpcmNsZVF1ZXN0aW9uTWFyayA9IENpcmNsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuQ2lyY2xlU2xhc2ggPSBDaXJjbGVTbGFzaDsKICAgIGV4cG9ydHMuQ2lyY2xlU2xhc2gyID0gQ2lyY2xlU2xhc2gyOwogICAgZXhwb3J0cy5DaXJjbGVTbGFzaGVkID0gQ2lyY2xlU2xhc2gyOwogICAgZXhwb3J0cy5DaXJjbGVTbWFsbCA9IENpcmNsZVNtYWxsOwogICAgZXhwb3J0cy5DaXJjbGVTdGFyID0gQ2lyY2xlU3RhcjsKICAgIGV4cG9ydHMuQ2lyY2xlU3RvcCA9IENpcmNsZVN0b3A7CiAgICBleHBvcnRzLkNpcmNsZVVzZXIgPSBDaXJjbGVVc2VyOwogICAgZXhwb3J0cy5DaXJjbGVVc2VyUm91bmQgPSBDaXJjbGVVc2VyUm91bmQ7CiAgICBleHBvcnRzLkNpcmNsZVggPSBDaXJjbGVYOwogICAgZXhwb3J0cy5DaXJjdWl0Qm9hcmQgPSBDaXJjdWl0Qm9hcmQ7CiAgICBleHBvcnRzLkNpdHJ1cyA9IENpdHJ1czsKICAgIGV4cG9ydHMuQ2xhcHBlcmJvYXJkID0gQ2xhcHBlcmJvYXJkOwogICAgZXhwb3J0cy5DbGlwYm9hcmQgPSBDbGlwYm9hcmQ7CiAgICBleHBvcnRzLkNsaXBib2FyZENoZWNrID0gQ2xpcGJvYXJkQ2hlY2s7CiAgICBleHBvcnRzLkNsaXBib2FyZENsb2NrID0gQ2xpcGJvYXJkQ2xvY2s7CiAgICBleHBvcnRzLkNsaXBib2FyZENvcHkgPSBDbGlwYm9hcmRDb3B5OwogICAgZXhwb3J0cy5DbGlwYm9hcmRFZGl0ID0gQ2xpcGJvYXJkUGVuOwogICAgZXhwb3J0cy5DbGlwYm9hcmRMaXN0ID0gQ2xpcGJvYXJkTGlzdDsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkTWludXMgPSBDbGlwYm9hcmRNaW51czsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkUGFzdGUgPSBDbGlwYm9hcmRQYXN0ZTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkUGVuID0gQ2xpcGJvYXJkUGVuOwogICAgZXhwb3J0cy5DbGlwYm9hcmRQZW5MaW5lID0gQ2xpcGJvYXJkUGVuTGluZTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkUGx1cyA9IENsaXBib2FyZFBsdXM7CiAgICBleHBvcnRzLkNsaXBib2FyZFNpZ25hdHVyZSA9IENsaXBib2FyZFBlbkxpbmU7CiAgICBleHBvcnRzLkNsaXBib2FyZFR5cGUgPSBDbGlwYm9hcmRUeXBlOwogICAgZXhwb3J0cy5DbGlwYm9hcmRYID0gQ2xpcGJvYXJkWDsKICAgIGV4cG9ydHMuQ2xvY2sgPSBDbG9jazsKICAgIGV4cG9ydHMuQ2xvY2sxID0gQ2xvY2sxOwogICAgZXhwb3J0cy5DbG9jazEwID0gQ2xvY2sxMDsKICAgIGV4cG9ydHMuQ2xvY2sxMSA9IENsb2NrMTE7CiAgICBleHBvcnRzLkNsb2NrMTIgPSBDbG9jazEyOwogICAgZXhwb3J0cy5DbG9jazIgPSBDbG9jazI7CiAgICBleHBvcnRzLkNsb2NrMyA9IENsb2NrMzsKICAgIGV4cG9ydHMuQ2xvY2s0ID0gQ2xvY2s0OwogICAgZXhwb3J0cy5DbG9jazUgPSBDbG9jazU7CiAgICBleHBvcnRzLkNsb2NrNiA9IENsb2NrNjsKICAgIGV4cG9ydHMuQ2xvY2s3ID0gQ2xvY2s3OwogICAgZXhwb3J0cy5DbG9jazggPSBDbG9jazg7CiAgICBleHBvcnRzLkNsb2NrOSA9IENsb2NrOTsKICAgIGV4cG9ydHMuQ2xvY2tBbGVydCA9IENsb2NrQWxlcnQ7CiAgICBleHBvcnRzLkNsb2NrQXJyb3dEb3duID0gQ2xvY2tBcnJvd0Rvd247CiAgICBleHBvcnRzLkNsb2NrQXJyb3dVcCA9IENsb2NrQXJyb3dVcDsKICAgIGV4cG9ydHMuQ2xvY2tDaGVjayA9IENsb2NrQ2hlY2s7CiAgICBleHBvcnRzLkNsb2NrRmFkaW5nID0gQ2xvY2tGYWRpbmc7CiAgICBleHBvcnRzLkNsb2NrUGx1cyA9IENsb2NrUGx1czsKICAgIGV4cG9ydHMuQ2xvc2VkQ2FwdGlvbiA9IENsb3NlZENhcHRpb247CiAgICBleHBvcnRzLkNsb3VkID0gQ2xvdWQ7CiAgICBleHBvcnRzLkNsb3VkQWxlcnQgPSBDbG91ZEFsZXJ0OwogICAgZXhwb3J0cy5DbG91ZEJhY2t1cCA9IENsb3VkQmFja3VwOwogICAgZXhwb3J0cy5DbG91ZENoZWNrID0gQ2xvdWRDaGVjazsKICAgIGV4cG9ydHMuQ2xvdWRDb2cgPSBDbG91ZENvZzsKICAgIGV4cG9ydHMuQ2xvdWREb3dubG9hZCA9IENsb3VkRG93bmxvYWQ7CiAgICBleHBvcnRzLkNsb3VkRHJpenpsZSA9IENsb3VkRHJpenpsZTsKICAgIGV4cG9ydHMuQ2xvdWRGb2cgPSBDbG91ZEZvZzsKICAgIGV4cG9ydHMuQ2xvdWRIYWlsID0gQ2xvdWRIYWlsOwogICAgZXhwb3J0cy5DbG91ZExpZ2h0bmluZyA9IENsb3VkTGlnaHRuaW5nOwogICAgZXhwb3J0cy5DbG91ZE1vb24gPSBDbG91ZE1vb247CiAgICBleHBvcnRzLkNsb3VkTW9vblJhaW4gPSBDbG91ZE1vb25SYWluOwogICAgZXhwb3J0cy5DbG91ZE9mZiA9IENsb3VkT2ZmOwogICAgZXhwb3J0cy5DbG91ZFJhaW4gPSBDbG91ZFJhaW47CiAgICBleHBvcnRzLkNsb3VkUmFpbldpbmQgPSBDbG91ZFJhaW5XaW5kOwogICAgZXhwb3J0cy5DbG91ZFNub3cgPSBDbG91ZFNub3c7CiAgICBleHBvcnRzLkNsb3VkU3VuID0gQ2xvdWRTdW47CiAgICBleHBvcnRzLkNsb3VkU3VuUmFpbiA9IENsb3VkU3VuUmFpbjsKICAgIGV4cG9ydHMuQ2xvdWRTeW5jID0gQ2xvdWRTeW5jOwogICAgZXhwb3J0cy5DbG91ZFVwbG9hZCA9IENsb3VkVXBsb2FkOwogICAgZXhwb3J0cy5DbG91ZHkgPSBDbG91ZHk7CiAgICBleHBvcnRzLkNsb3ZlciA9IENsb3ZlcjsKICAgIGV4cG9ydHMuQ2x1YiA9IENsdWI7CiAgICBleHBvcnRzLkNvZGUgPSBDb2RlOwogICAgZXhwb3J0cy5Db2RlMiA9IENvZGVYbWw7CiAgICBleHBvcnRzLkNvZGVTcXVhcmUgPSBTcXVhcmVDb2RlOwogICAgZXhwb3J0cy5Db2RlWG1sID0gQ29kZVhtbDsKICAgIGV4cG9ydHMuQ29kZXBlbiA9IENvZGVwZW47CiAgICBleHBvcnRzLkNvZGVzYW5kYm94ID0gQ29kZXNhbmRib3g7CiAgICBleHBvcnRzLkNvZmZlZSA9IENvZmZlZTsKICAgIGV4cG9ydHMuQ29nID0gQ29nOwogICAgZXhwb3J0cy5Db2lucyA9IENvaW5zOwogICAgZXhwb3J0cy5Db2x1bW5zID0gQ29sdW1uczI7CiAgICBleHBvcnRzLkNvbHVtbnMyID0gQ29sdW1uczI7CiAgICBleHBvcnRzLkNvbHVtbnMzID0gQ29sdW1uczM7CiAgICBleHBvcnRzLkNvbHVtbnMzQ29nID0gQ29sdW1uczNDb2c7CiAgICBleHBvcnRzLkNvbHVtbnM0ID0gQ29sdW1uczQ7CiAgICBleHBvcnRzLkNvbHVtbnNTZXR0aW5ncyA9IENvbHVtbnMzQ29nOwogICAgZXhwb3J0cy5Db21iaW5lID0gQ29tYmluZTsKICAgIGV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7CiAgICBleHBvcnRzLkNvbXBhc3MgPSBDb21wYXNzOwogICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7CiAgICBleHBvcnRzLkNvbXB1dGVyID0gQ29tcHV0ZXI7CiAgICBleHBvcnRzLkNvbmNpZXJnZUJlbGwgPSBDb25jaWVyZ2VCZWxsOwogICAgZXhwb3J0cy5Db25lID0gQ29uZTsKICAgIGV4cG9ydHMuQ29uc3RydWN0aW9uID0gQ29uc3RydWN0aW9uOwogICAgZXhwb3J0cy5Db250YWN0ID0gQ29udGFjdDsKICAgIGV4cG9ydHMuQ29udGFjdDIgPSBDb250YWN0Um91bmQ7CiAgICBleHBvcnRzLkNvbnRhY3RSb3VuZCA9IENvbnRhY3RSb3VuZDsKICAgIGV4cG9ydHMuQ29udGFpbmVyID0gQ29udGFpbmVyOwogICAgZXhwb3J0cy5Db250cmFzdCA9IENvbnRyYXN0OwogICAgZXhwb3J0cy5Db29raWUgPSBDb29raWU7CiAgICBleHBvcnRzLkNvb2tpbmdQb3QgPSBDb29raW5nUG90OwogICAgZXhwb3J0cy5Db3B5ID0gQ29weTsKICAgIGV4cG9ydHMuQ29weUNoZWNrID0gQ29weUNoZWNrOwogICAgZXhwb3J0cy5Db3B5TWludXMgPSBDb3B5TWludXM7CiAgICBleHBvcnRzLkNvcHlQbHVzID0gQ29weVBsdXM7CiAgICBleHBvcnRzLkNvcHlTbGFzaCA9IENvcHlTbGFzaDsKICAgIGV4cG9ydHMuQ29weVggPSBDb3B5WDsKICAgIGV4cG9ydHMuQ29weWxlZnQgPSBDb3B5bGVmdDsKICAgIGV4cG9ydHMuQ29weXJpZ2h0ID0gQ29weXJpZ2h0OwogICAgZXhwb3J0cy5Db3JuZXJEb3duTGVmdCA9IENvcm5lckRvd25MZWZ0OwogICAgZXhwb3J0cy5Db3JuZXJEb3duUmlnaHQgPSBDb3JuZXJEb3duUmlnaHQ7CiAgICBleHBvcnRzLkNvcm5lckxlZnREb3duID0gQ29ybmVyTGVmdERvd247CiAgICBleHBvcnRzLkNvcm5lckxlZnRVcCA9IENvcm5lckxlZnRVcDsKICAgIGV4cG9ydHMuQ29ybmVyUmlnaHREb3duID0gQ29ybmVyUmlnaHREb3duOwogICAgZXhwb3J0cy5Db3JuZXJSaWdodFVwID0gQ29ybmVyUmlnaHRVcDsKICAgIGV4cG9ydHMuQ29ybmVyVXBMZWZ0ID0gQ29ybmVyVXBMZWZ0OwogICAgZXhwb3J0cy5Db3JuZXJVcFJpZ2h0ID0gQ29ybmVyVXBSaWdodDsKICAgIGV4cG9ydHMuQ3B1ID0gQ3B1OwogICAgZXhwb3J0cy5DcmVhdGl2ZUNvbW1vbnMgPSBDcmVhdGl2ZUNvbW1vbnM7CiAgICBleHBvcnRzLkNyZWRpdENhcmQgPSBDcmVkaXRDYXJkOwogICAgZXhwb3J0cy5Dcm9pc3NhbnQgPSBDcm9pc3NhbnQ7CiAgICBleHBvcnRzLkNyb3AgPSBDcm9wOwogICAgZXhwb3J0cy5Dcm9zcyA9IENyb3NzOwogICAgZXhwb3J0cy5Dcm9zc2hhaXIgPSBDcm9zc2hhaXI7CiAgICBleHBvcnRzLkNyb3duID0gQ3Jvd247CiAgICBleHBvcnRzLkN1Ym9pZCA9IEN1Ym9pZDsKICAgIGV4cG9ydHMuQ3VwU29kYSA9IEN1cFNvZGE7CiAgICBleHBvcnRzLkN1cmx5QnJhY2VzID0gQnJhY2VzOwogICAgZXhwb3J0cy5DdXJyZW5jeSA9IEN1cnJlbmN5OwogICAgZXhwb3J0cy5DeWxpbmRlciA9IEN5bGluZGVyOwogICAgZXhwb3J0cy5EYW0gPSBEYW07CiAgICBleHBvcnRzLkRhdGFiYXNlID0gRGF0YWJhc2U7CiAgICBleHBvcnRzLkRhdGFiYXNlQmFja3VwID0gRGF0YWJhc2VCYWNrdXA7CiAgICBleHBvcnRzLkRhdGFiYXNlU2VhcmNoID0gRGF0YWJhc2VTZWFyY2g7CiAgICBleHBvcnRzLkRhdGFiYXNlWmFwID0gRGF0YWJhc2VaYXA7CiAgICBleHBvcnRzLkRlY2ltYWxzQXJyb3dMZWZ0ID0gRGVjaW1hbHNBcnJvd0xlZnQ7CiAgICBleHBvcnRzLkRlY2ltYWxzQXJyb3dSaWdodCA9IERlY2ltYWxzQXJyb3dSaWdodDsKICAgIGV4cG9ydHMuRGVsZXRlID0gRGVsZXRlOwogICAgZXhwb3J0cy5EZXNzZXJ0ID0gRGVzc2VydDsKICAgIGV4cG9ydHMuRGlhbWV0ZXIgPSBEaWFtZXRlcjsKICAgIGV4cG9ydHMuRGlhbW9uZCA9IERpYW1vbmQ7CiAgICBleHBvcnRzLkRpYW1vbmRNaW51cyA9IERpYW1vbmRNaW51czsKICAgIGV4cG9ydHMuRGlhbW9uZFBlcmNlbnQgPSBEaWFtb25kUGVyY2VudDsKICAgIGV4cG9ydHMuRGlhbW9uZFBsdXMgPSBEaWFtb25kUGx1czsKICAgIGV4cG9ydHMuRGljZTEgPSBEaWNlMTsKICAgIGV4cG9ydHMuRGljZTIgPSBEaWNlMjsKICAgIGV4cG9ydHMuRGljZTMgPSBEaWNlMzsKICAgIGV4cG9ydHMuRGljZTQgPSBEaWNlNDsKICAgIGV4cG9ydHMuRGljZTUgPSBEaWNlNTsKICAgIGV4cG9ydHMuRGljZTYgPSBEaWNlNjsKICAgIGV4cG9ydHMuRGljZXMgPSBEaWNlczsKICAgIGV4cG9ydHMuRGlmZiA9IERpZmY7CiAgICBleHBvcnRzLkRpc2MgPSBEaXNjOwogICAgZXhwb3J0cy5EaXNjMiA9IERpc2MyOwogICAgZXhwb3J0cy5EaXNjMyA9IERpc2MzOwogICAgZXhwb3J0cy5EaXNjQWxidW0gPSBEaXNjQWxidW07CiAgICBleHBvcnRzLkRpdmlkZSA9IERpdmlkZTsKICAgIGV4cG9ydHMuRGl2aWRlQ2lyY2xlID0gQ2lyY2xlRGl2aWRlOwogICAgZXhwb3J0cy5EaXZpZGVTcXVhcmUgPSBTcXVhcmVEaXZpZGU7CiAgICBleHBvcnRzLkRuYSA9IERuYTsKICAgIGV4cG9ydHMuRG5hT2ZmID0gRG5hT2ZmOwogICAgZXhwb3J0cy5Eb2NrID0gRG9jazsKICAgIGV4cG9ydHMuRG9nID0gRG9nOwogICAgZXhwb3J0cy5Eb2xsYXJTaWduID0gRG9sbGFyU2lnbjsKICAgIGV4cG9ydHMuRG9udXQgPSBEb251dDsKICAgIGV4cG9ydHMuRG9vckNsb3NlZCA9IERvb3JDbG9zZWQ7CiAgICBleHBvcnRzLkRvb3JDbG9zZWRMb2NrZWQgPSBEb29yQ2xvc2VkTG9ja2VkOwogICAgZXhwb3J0cy5Eb29yT3BlbiA9IERvb3JPcGVuOwogICAgZXhwb3J0cy5Eb3QgPSBEb3Q7CiAgICBleHBvcnRzLkRvdFNxdWFyZSA9IFNxdWFyZURvdDsKICAgIGV4cG9ydHMuRG93bmxvYWQgPSBEb3dubG9hZDsKICAgIGV4cG9ydHMuRG93bmxvYWRDbG91ZCA9IENsb3VkRG93bmxvYWQ7CiAgICBleHBvcnRzLkRyYWZ0aW5nQ29tcGFzcyA9IERyYWZ0aW5nQ29tcGFzczsKICAgIGV4cG9ydHMuRHJhbWEgPSBEcmFtYTsKICAgIGV4cG9ydHMuRHJpYmJibGUgPSBEcmliYmJsZTsKICAgIGV4cG9ydHMuRHJpbGwgPSBEcmlsbDsKICAgIGV4cG9ydHMuRHJvbmUgPSBEcm9uZTsKICAgIGV4cG9ydHMuRHJvcGxldCA9IERyb3BsZXQ7CiAgICBleHBvcnRzLkRyb3BsZXRPZmYgPSBEcm9wbGV0T2ZmOwogICAgZXhwb3J0cy5Ecm9wbGV0cyA9IERyb3BsZXRzOwogICAgZXhwb3J0cy5EcnVtID0gRHJ1bTsKICAgIGV4cG9ydHMuRHJ1bXN0aWNrID0gRHJ1bXN0aWNrOwogICAgZXhwb3J0cy5EdW1iYmVsbCA9IER1bWJiZWxsOwogICAgZXhwb3J0cy5FYXIgPSBFYXI7CiAgICBleHBvcnRzLkVhck9mZiA9IEVhck9mZjsKICAgIGV4cG9ydHMuRWFydGggPSBFYXJ0aDsKICAgIGV4cG9ydHMuRWFydGhMb2NrID0gRWFydGhMb2NrOwogICAgZXhwb3J0cy5FY2xpcHNlID0gRWNsaXBzZTsKICAgIGV4cG9ydHMuRWRpdCA9IFNxdWFyZVBlbjsKICAgIGV4cG9ydHMuRWRpdDIgPSBQZW47CiAgICBleHBvcnRzLkVkaXQzID0gUGVuTGluZTsKICAgIGV4cG9ydHMuRWdnID0gRWdnOwogICAgZXhwb3J0cy5FZ2dGcmllZCA9IEVnZ0ZyaWVkOwogICAgZXhwb3J0cy5FZ2dPZmYgPSBFZ2dPZmY7CiAgICBleHBvcnRzLkVsbGlwc2lzID0gRWxsaXBzaXM7CiAgICBleHBvcnRzLkVsbGlwc2lzVmVydGljYWwgPSBFbGxpcHNpc1ZlcnRpY2FsOwogICAgZXhwb3J0cy5FcXVhbCA9IEVxdWFsOwogICAgZXhwb3J0cy5FcXVhbEFwcHJveGltYXRlbHkgPSBFcXVhbEFwcHJveGltYXRlbHk7CiAgICBleHBvcnRzLkVxdWFsTm90ID0gRXF1YWxOb3Q7CiAgICBleHBvcnRzLkVxdWFsU3F1YXJlID0gU3F1YXJlRXF1YWw7CiAgICBleHBvcnRzLkVyYXNlciA9IEVyYXNlcjsKICAgIGV4cG9ydHMuRXRoZXJuZXRQb3J0ID0gRXRoZXJuZXRQb3J0OwogICAgZXhwb3J0cy5FdXJvID0gRXVybzsKICAgIGV4cG9ydHMuRXZDaGFyZ2VyID0gRXZDaGFyZ2VyOwogICAgZXhwb3J0cy5FeHBhbmQgPSBFeHBhbmQ7CiAgICBleHBvcnRzLkV4dGVybmFsTGluayA9IEV4dGVybmFsTGluazsKICAgIGV4cG9ydHMuRXllID0gRXllOwogICAgZXhwb3J0cy5FeWVDbG9zZWQgPSBFeWVDbG9zZWQ7CiAgICBleHBvcnRzLkV5ZU9mZiA9IEV5ZU9mZjsKICAgIGV4cG9ydHMuRmFjZWJvb2sgPSBGYWNlYm9vazsKICAgIGV4cG9ydHMuRmFjdG9yeSA9IEZhY3Rvcnk7CiAgICBleHBvcnRzLkZhbiA9IEZhbjsKICAgIGV4cG9ydHMuRmFzdEZvcndhcmQgPSBGYXN0Rm9yd2FyZDsKICAgIGV4cG9ydHMuRmVhdGhlciA9IEZlYXRoZXI7CiAgICBleHBvcnRzLkZlbmNlID0gRmVuY2U7CiAgICBleHBvcnRzLkZlcnJpc1doZWVsID0gRmVycmlzV2hlZWw7CiAgICBleHBvcnRzLkZpZ21hID0gRmlnbWE7CiAgICBleHBvcnRzLkZpbGUgPSBGaWxlOwogICAgZXhwb3J0cy5GaWxlQXJjaGl2ZSA9IEZpbGVBcmNoaXZlOwogICAgZXhwb3J0cy5GaWxlQXVkaW8gPSBGaWxlSGVhZHBob25lOwogICAgZXhwb3J0cy5GaWxlQXVkaW8yID0gRmlsZUhlYWRwaG9uZTsKICAgIGV4cG9ydHMuRmlsZUF4aXMzRCA9IEZpbGVBeGlzM2Q7CiAgICBleHBvcnRzLkZpbGVBeGlzM2QgPSBGaWxlQXhpczNkOwogICAgZXhwb3J0cy5GaWxlQmFkZ2UgPSBGaWxlQmFkZ2U7CiAgICBleHBvcnRzLkZpbGVCYWRnZTIgPSBGaWxlQmFkZ2U7CiAgICBleHBvcnRzLkZpbGVCYXJDaGFydCA9IEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkZpbGVCYXJDaGFydDIgPSBGaWxlQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkZpbGVCb3ggPSBGaWxlQm94OwogICAgZXhwb3J0cy5GaWxlQnJhY2VzID0gRmlsZUJyYWNlczsKICAgIGV4cG9ydHMuRmlsZUJyYWNlc0Nvcm5lciA9IEZpbGVCcmFjZXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVDaGFydENvbHVtbiA9IEZpbGVDaGFydENvbHVtbjsKICAgIGV4cG9ydHMuRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZyA9IEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkZpbGVDaGFydExpbmUgPSBGaWxlQ2hhcnRMaW5lOwogICAgZXhwb3J0cy5GaWxlQ2hhcnRQaWUgPSBGaWxlQ2hhcnRQaWU7CiAgICBleHBvcnRzLkZpbGVDaGVjayA9IEZpbGVDaGVjazsKICAgIGV4cG9ydHMuRmlsZUNoZWNrMiA9IEZpbGVDaGVja0Nvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNoZWNrQ29ybmVyID0gRmlsZUNoZWNrQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlQ2xvY2sgPSBGaWxlQ2xvY2s7CiAgICBleHBvcnRzLkZpbGVDb2RlID0gRmlsZUNvZGU7CiAgICBleHBvcnRzLkZpbGVDb2RlMiA9IEZpbGVDb2RlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlQ29kZUNvcm5lciA9IEZpbGVDb2RlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlQ29nID0gRmlsZUNvZzsKICAgIGV4cG9ydHMuRmlsZUNvZzIgPSBGaWxlQ29nOwogICAgZXhwb3J0cy5GaWxlRGlmZiA9IEZpbGVEaWZmOwogICAgZXhwb3J0cy5GaWxlRGlnaXQgPSBGaWxlRGlnaXQ7CiAgICBleHBvcnRzLkZpbGVEb3duID0gRmlsZURvd247CiAgICBleHBvcnRzLkZpbGVFZGl0ID0gRmlsZVBlbjsKICAgIGV4cG9ydHMuRmlsZUV4Y2xhbWF0aW9uUG9pbnQgPSBGaWxlRXhjbGFtYXRpb25Qb2ludDsKICAgIGV4cG9ydHMuRmlsZUhlYWRwaG9uZSA9IEZpbGVIZWFkcGhvbmU7CiAgICBleHBvcnRzLkZpbGVIZWFydCA9IEZpbGVIZWFydDsKICAgIGV4cG9ydHMuRmlsZUltYWdlID0gRmlsZUltYWdlOwogICAgZXhwb3J0cy5GaWxlSW5wdXQgPSBGaWxlSW5wdXQ7CiAgICBleHBvcnRzLkZpbGVKc29uID0gRmlsZUJyYWNlczsKICAgIGV4cG9ydHMuRmlsZUpzb24yID0gRmlsZUJyYWNlc0Nvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUtleSA9IEZpbGVLZXk7CiAgICBleHBvcnRzLkZpbGVLZXkyID0gRmlsZUtleTsKICAgIGV4cG9ydHMuRmlsZUxpbmVDaGFydCA9IEZpbGVDaGFydExpbmU7CiAgICBleHBvcnRzLkZpbGVMb2NrID0gRmlsZUxvY2s7CiAgICBleHBvcnRzLkZpbGVMb2NrMiA9IEZpbGVMb2NrOwogICAgZXhwb3J0cy5GaWxlTWludXMgPSBGaWxlTWludXM7CiAgICBleHBvcnRzLkZpbGVNaW51czIgPSBGaWxlTWludXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVNaW51c0Nvcm5lciA9IEZpbGVNaW51c0Nvcm5lcjsKICAgIGV4cG9ydHMuRmlsZU11c2ljID0gRmlsZU11c2ljOwogICAgZXhwb3J0cy5GaWxlT3V0cHV0ID0gRmlsZU91dHB1dDsKICAgIGV4cG9ydHMuRmlsZVBlbiA9IEZpbGVQZW47CiAgICBleHBvcnRzLkZpbGVQZW5MaW5lID0gRmlsZVBlbkxpbmU7CiAgICBleHBvcnRzLkZpbGVQaWVDaGFydCA9IEZpbGVDaGFydFBpZTsKICAgIGV4cG9ydHMuRmlsZVBsYXkgPSBGaWxlUGxheTsKICAgIGV4cG9ydHMuRmlsZVBsdXMgPSBGaWxlUGx1czsKICAgIGV4cG9ydHMuRmlsZVBsdXMyID0gRmlsZVBsdXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVQbHVzQ29ybmVyID0gRmlsZVBsdXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVRdWVzdGlvbiA9IEZpbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkZpbGVRdWVzdGlvbk1hcmsgPSBGaWxlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5GaWxlU2NhbiA9IEZpbGVTY2FuOwogICAgZXhwb3J0cy5GaWxlU2VhcmNoID0gRmlsZVNlYXJjaDsKICAgIGV4cG9ydHMuRmlsZVNlYXJjaDIgPSBGaWxlU2VhcmNoQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlU2VhcmNoQ29ybmVyID0gRmlsZVNlYXJjaENvcm5lcjsKICAgIGV4cG9ydHMuRmlsZVNpZ25hbCA9IEZpbGVTaWduYWw7CiAgICBleHBvcnRzLkZpbGVTaWduYXR1cmUgPSBGaWxlUGVuTGluZTsKICAgIGV4cG9ydHMuRmlsZVNsaWRlcnMgPSBGaWxlU2xpZGVyczsKICAgIGV4cG9ydHMuRmlsZVNwcmVhZHNoZWV0ID0gRmlsZVNwcmVhZHNoZWV0OwogICAgZXhwb3J0cy5GaWxlU3RhY2sgPSBGaWxlU3RhY2s7CiAgICBleHBvcnRzLkZpbGVTeW1saW5rID0gRmlsZVN5bWxpbms7CiAgICBleHBvcnRzLkZpbGVUZXJtaW5hbCA9IEZpbGVUZXJtaW5hbDsKICAgIGV4cG9ydHMuRmlsZVRleHQgPSBGaWxlVGV4dDsKICAgIGV4cG9ydHMuRmlsZVR5cGUgPSBGaWxlVHlwZTsKICAgIGV4cG9ydHMuRmlsZVR5cGUyID0gRmlsZVR5cGVDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVUeXBlQ29ybmVyID0gRmlsZVR5cGVDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVVcCA9IEZpbGVVcDsKICAgIGV4cG9ydHMuRmlsZVVzZXIgPSBGaWxlVXNlcjsKICAgIGV4cG9ydHMuRmlsZVZpZGVvID0gRmlsZVBsYXk7CiAgICBleHBvcnRzLkZpbGVWaWRlbzIgPSBGaWxlVmlkZW9DYW1lcmE7CiAgICBleHBvcnRzLkZpbGVWaWRlb0NhbWVyYSA9IEZpbGVWaWRlb0NhbWVyYTsKICAgIGV4cG9ydHMuRmlsZVZvbHVtZSA9IEZpbGVWb2x1bWU7CiAgICBleHBvcnRzLkZpbGVWb2x1bWUyID0gRmlsZVNpZ25hbDsKICAgIGV4cG9ydHMuRmlsZVdhcm5pbmcgPSBGaWxlRXhjbGFtYXRpb25Qb2ludDsKICAgIGV4cG9ydHMuRmlsZVggPSBGaWxlWDsKICAgIGV4cG9ydHMuRmlsZVgyID0gRmlsZVhDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVYQ29ybmVyID0gRmlsZVhDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVzID0gRmlsZXM7CiAgICBleHBvcnRzLkZpbG0gPSBGaWxtOwogICAgZXhwb3J0cy5GaWx0ZXIgPSBGdW5uZWw7CiAgICBleHBvcnRzLkZpbHRlclggPSBGdW5uZWxYOwogICAgZXhwb3J0cy5GaW5nZXJwcmludCA9IEZpbmdlcnByaW50UGF0dGVybjsKICAgIGV4cG9ydHMuRmluZ2VycHJpbnRQYXR0ZXJuID0gRmluZ2VycHJpbnRQYXR0ZXJuOwogICAgZXhwb3J0cy5GaXJlRXh0aW5ndWlzaGVyID0gRmlyZUV4dGluZ3Vpc2hlcjsKICAgIGV4cG9ydHMuRmlzaCA9IEZpc2g7CiAgICBleHBvcnRzLkZpc2hPZmYgPSBGaXNoT2ZmOwogICAgZXhwb3J0cy5GaXNoU3ltYm9sID0gRmlzaFN5bWJvbDsKICAgIGV4cG9ydHMuRmlzaGluZ0hvb2sgPSBGaXNoaW5nSG9vazsKICAgIGV4cG9ydHMuRmxhZyA9IEZsYWc7CiAgICBleHBvcnRzLkZsYWdPZmYgPSBGbGFnT2ZmOwogICAgZXhwb3J0cy5GbGFnVHJpYW5nbGVMZWZ0ID0gRmxhZ1RyaWFuZ2xlTGVmdDsKICAgIGV4cG9ydHMuRmxhZ1RyaWFuZ2xlUmlnaHQgPSBGbGFnVHJpYW5nbGVSaWdodDsKICAgIGV4cG9ydHMuRmxhbWUgPSBGbGFtZTsKICAgIGV4cG9ydHMuRmxhbWVLaW5kbGluZyA9IEZsYW1lS2luZGxpbmc7CiAgICBleHBvcnRzLkZsYXNobGlnaHQgPSBGbGFzaGxpZ2h0OwogICAgZXhwb3J0cy5GbGFzaGxpZ2h0T2ZmID0gRmxhc2hsaWdodE9mZjsKICAgIGV4cG9ydHMuRmxhc2tDb25pY2FsID0gRmxhc2tDb25pY2FsOwogICAgZXhwb3J0cy5GbGFza0NvbmljYWxPZmYgPSBGbGFza0NvbmljYWxPZmY7CiAgICBleHBvcnRzLkZsYXNrUm91bmQgPSBGbGFza1JvdW5kOwogICAgZXhwb3J0cy5GbGlwSG9yaXpvbnRhbCA9IEZsaXBIb3Jpem9udGFsOwogICAgZXhwb3J0cy5GbGlwSG9yaXpvbnRhbDIgPSBGbGlwSG9yaXpvbnRhbDI7CiAgICBleHBvcnRzLkZsaXBWZXJ0aWNhbCA9IEZsaXBWZXJ0aWNhbDsKICAgIGV4cG9ydHMuRmxpcFZlcnRpY2FsMiA9IEZsaXBWZXJ0aWNhbDI7CiAgICBleHBvcnRzLkZsb3dlciA9IEZsb3dlcjsKICAgIGV4cG9ydHMuRmxvd2VyMiA9IEZsb3dlcjI7CiAgICBleHBvcnRzLkZvY3VzID0gRm9jdXM7CiAgICBleHBvcnRzLkZvbGRIb3Jpem9udGFsID0gRm9sZEhvcml6b250YWw7CiAgICBleHBvcnRzLkZvbGRWZXJ0aWNhbCA9IEZvbGRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuRm9sZGVyID0gRm9sZGVyOwogICAgZXhwb3J0cy5Gb2xkZXJBcmNoaXZlID0gRm9sZGVyQXJjaGl2ZTsKICAgIGV4cG9ydHMuRm9sZGVyQ2hlY2sgPSBGb2xkZXJDaGVjazsKICAgIGV4cG9ydHMuRm9sZGVyQ2xvY2sgPSBGb2xkZXJDbG9jazsKICAgIGV4cG9ydHMuRm9sZGVyQ2xvc2VkID0gRm9sZGVyQ2xvc2VkOwogICAgZXhwb3J0cy5Gb2xkZXJDb2RlID0gRm9sZGVyQ29kZTsKICAgIGV4cG9ydHMuRm9sZGVyQ29nID0gRm9sZGVyQ29nOwogICAgZXhwb3J0cy5Gb2xkZXJDb2cyID0gRm9sZGVyQ29nOwogICAgZXhwb3J0cy5Gb2xkZXJEb3QgPSBGb2xkZXJEb3Q7CiAgICBleHBvcnRzLkZvbGRlckRvd24gPSBGb2xkZXJEb3duOwogICAgZXhwb3J0cy5Gb2xkZXJFZGl0ID0gRm9sZGVyUGVuOwogICAgZXhwb3J0cy5Gb2xkZXJHaXQgPSBGb2xkZXJHaXQ7CiAgICBleHBvcnRzLkZvbGRlckdpdDIgPSBGb2xkZXJHaXQyOwogICAgZXhwb3J0cy5Gb2xkZXJIZWFydCA9IEZvbGRlckhlYXJ0OwogICAgZXhwb3J0cy5Gb2xkZXJJbnB1dCA9IEZvbGRlcklucHV0OwogICAgZXhwb3J0cy5Gb2xkZXJLYW5iYW4gPSBGb2xkZXJLYW5iYW47CiAgICBleHBvcnRzLkZvbGRlcktleSA9IEZvbGRlcktleTsKICAgIGV4cG9ydHMuRm9sZGVyTG9jayA9IEZvbGRlckxvY2s7CiAgICBleHBvcnRzLkZvbGRlck1pbnVzID0gRm9sZGVyTWludXM7CiAgICBleHBvcnRzLkZvbGRlck9wZW4gPSBGb2xkZXJPcGVuOwogICAgZXhwb3J0cy5Gb2xkZXJPcGVuRG90ID0gRm9sZGVyT3BlbkRvdDsKICAgIGV4cG9ydHMuRm9sZGVyT3V0cHV0ID0gRm9sZGVyT3V0cHV0OwogICAgZXhwb3J0cy5Gb2xkZXJQZW4gPSBGb2xkZXJQZW47CiAgICBleHBvcnRzLkZvbGRlclBsdXMgPSBGb2xkZXJQbHVzOwogICAgZXhwb3J0cy5Gb2xkZXJSb290ID0gRm9sZGVyUm9vdDsKICAgIGV4cG9ydHMuRm9sZGVyU2VhcmNoID0gRm9sZGVyU2VhcmNoOwogICAgZXhwb3J0cy5Gb2xkZXJTZWFyY2gyID0gRm9sZGVyU2VhcmNoMjsKICAgIGV4cG9ydHMuRm9sZGVyU3ltbGluayA9IEZvbGRlclN5bWxpbms7CiAgICBleHBvcnRzLkZvbGRlclN5bmMgPSBGb2xkZXJTeW5jOwogICAgZXhwb3J0cy5Gb2xkZXJUcmVlID0gRm9sZGVyVHJlZTsKICAgIGV4cG9ydHMuRm9sZGVyVXAgPSBGb2xkZXJVcDsKICAgIGV4cG9ydHMuRm9sZGVyWCA9IEZvbGRlclg7CiAgICBleHBvcnRzLkZvbGRlcnMgPSBGb2xkZXJzOwogICAgZXhwb3J0cy5Gb290cHJpbnRzID0gRm9vdHByaW50czsKICAgIGV4cG9ydHMuRm9ya0tuaWZlID0gVXRlbnNpbHM7CiAgICBleHBvcnRzLkZvcmtLbmlmZUNyb3NzZWQgPSBVdGVuc2lsc0Nyb3NzZWQ7CiAgICBleHBvcnRzLkZvcmtsaWZ0ID0gRm9ya2xpZnQ7CiAgICBleHBvcnRzLkZvcm0gPSBGb3JtOwogICAgZXhwb3J0cy5Gb3JtSW5wdXQgPSBSZWN0YW5nbGVFbGxpcHNpczsKICAgIGV4cG9ydHMuRm9yd2FyZCA9IEZvcndhcmQ7CiAgICBleHBvcnRzLkZyYW1lID0gRnJhbWU7CiAgICBleHBvcnRzLkZyYW1lciA9IEZyYW1lcjsKICAgIGV4cG9ydHMuRnJvd24gPSBGcm93bjsKICAgIGV4cG9ydHMuRnVlbCA9IEZ1ZWw7CiAgICBleHBvcnRzLkZ1bGxzY3JlZW4gPSBGdWxsc2NyZWVuOwogICAgZXhwb3J0cy5GdW5jdGlvblNxdWFyZSA9IFNxdWFyZUZ1bmN0aW9uOwogICAgZXhwb3J0cy5GdW5uZWwgPSBGdW5uZWw7CiAgICBleHBvcnRzLkZ1bm5lbFBsdXMgPSBGdW5uZWxQbHVzOwogICAgZXhwb3J0cy5GdW5uZWxYID0gRnVubmVsWDsKICAgIGV4cG9ydHMuR2FsbGVyeUhvcml6b250YWwgPSBHYWxsZXJ5SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuR2FsbGVyeUhvcml6b250YWxFbmQgPSBHYWxsZXJ5SG9yaXpvbnRhbEVuZDsKICAgIGV4cG9ydHMuR2FsbGVyeVRodW1ibmFpbHMgPSBHYWxsZXJ5VGh1bWJuYWlsczsKICAgIGV4cG9ydHMuR2FsbGVyeVZlcnRpY2FsID0gR2FsbGVyeVZlcnRpY2FsOwogICAgZXhwb3J0cy5HYWxsZXJ5VmVydGljYWxFbmQgPSBHYWxsZXJ5VmVydGljYWxFbmQ7CiAgICBleHBvcnRzLkdhbWVwYWQgPSBHYW1lcGFkOwogICAgZXhwb3J0cy5HYW1lcGFkMiA9IEdhbWVwYWQyOwogICAgZXhwb3J0cy5HYW1lcGFkRGlyZWN0aW9uYWwgPSBHYW1lcGFkRGlyZWN0aW9uYWw7CiAgICBleHBvcnRzLkdhbnR0Q2hhcnQgPSBDaGFydE5vQXhlc0dhbnR0OwogICAgZXhwb3J0cy5HYW50dENoYXJ0U3F1YXJlID0gU3F1YXJlQ2hhcnRHYW50dDsKICAgIGV4cG9ydHMuR2F1Z2UgPSBHYXVnZTsKICAgIGV4cG9ydHMuR2F1Z2VDaXJjbGUgPSBDaXJjbGVHYXVnZTsKICAgIGV4cG9ydHMuR2F2ZWwgPSBHYXZlbDsKICAgIGV4cG9ydHMuR2VtID0gR2VtOwogICAgZXhwb3J0cy5HZW9yZ2lhbkxhcmkgPSBHZW9yZ2lhbkxhcmk7CiAgICBleHBvcnRzLkdob3N0ID0gR2hvc3Q7CiAgICBleHBvcnRzLkdpZnQgPSBHaWZ0OwogICAgZXhwb3J0cy5HaXRCcmFuY2ggPSBHaXRCcmFuY2g7CiAgICBleHBvcnRzLkdpdEJyYW5jaE1pbnVzID0gR2l0QnJhbmNoTWludXM7CiAgICBleHBvcnRzLkdpdEJyYW5jaFBsdXMgPSBHaXRCcmFuY2hQbHVzOwogICAgZXhwb3J0cy5HaXRDb21taXQgPSBHaXRDb21taXRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5HaXRDb21taXRIb3Jpem9udGFsID0gR2l0Q29tbWl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuR2l0Q29tbWl0VmVydGljYWwgPSBHaXRDb21taXRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuR2l0Q29tcGFyZSA9IEdpdENvbXBhcmU7CiAgICBleHBvcnRzLkdpdENvbXBhcmVBcnJvd3MgPSBHaXRDb21wYXJlQXJyb3dzOwogICAgZXhwb3J0cy5HaXRGb3JrID0gR2l0Rm9yazsKICAgIGV4cG9ydHMuR2l0R3JhcGggPSBHaXRHcmFwaDsKICAgIGV4cG9ydHMuR2l0TWVyZ2UgPSBHaXRNZXJnZTsKICAgIGV4cG9ydHMuR2l0UHVsbFJlcXVlc3QgPSBHaXRQdWxsUmVxdWVzdDsKICAgIGV4cG9ydHMuR2l0UHVsbFJlcXVlc3RBcnJvdyA9IEdpdFB1bGxSZXF1ZXN0QXJyb3c7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0Q2xvc2VkID0gR2l0UHVsbFJlcXVlc3RDbG9zZWQ7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0Q3JlYXRlID0gR2l0UHVsbFJlcXVlc3RDcmVhdGU7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3cgPSBHaXRQdWxsUmVxdWVzdENyZWF0ZUFycm93OwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdERyYWZ0ID0gR2l0UHVsbFJlcXVlc3REcmFmdDsKICAgIGV4cG9ydHMuR2l0aHViID0gR2l0aHViOwogICAgZXhwb3J0cy5HaXRsYWIgPSBHaXRsYWI7CiAgICBleHBvcnRzLkdsYXNzV2F0ZXIgPSBHbGFzc1dhdGVyOwogICAgZXhwb3J0cy5HbGFzc2VzID0gR2xhc3NlczsKICAgIGV4cG9ydHMuR2xvYmUgPSBHbG9iZTsKICAgIGV4cG9ydHMuR2xvYmUyID0gRWFydGg7CiAgICBleHBvcnRzLkdsb2JlTG9jayA9IEdsb2JlTG9jazsKICAgIGV4cG9ydHMuR2xvYmVYID0gR2xvYmVYOwogICAgZXhwb3J0cy5Hb2FsID0gR29hbDsKICAgIGV4cG9ydHMuR3B1ID0gR3B1OwogICAgZXhwb3J0cy5HcmFiID0gSGFuZEdyYWI7CiAgICBleHBvcnRzLkdyYWR1YXRpb25DYXAgPSBHcmFkdWF0aW9uQ2FwOwogICAgZXhwb3J0cy5HcmFwZSA9IEdyYXBlOwogICAgZXhwb3J0cy5HcmlkID0gR3JpZDN4MzsKICAgIGV4cG9ydHMuR3JpZDJYMiA9IEdyaWQyeDI7CiAgICBleHBvcnRzLkdyaWQyWDJDaGVjayA9IEdyaWQyeDJDaGVjazsKICAgIGV4cG9ydHMuR3JpZDJYMlBsdXMgPSBHcmlkMngyUGx1czsKICAgIGV4cG9ydHMuR3JpZDJYMlggPSBHcmlkMngyWDsKICAgIGV4cG9ydHMuR3JpZDJ4MiA9IEdyaWQyeDI7CiAgICBleHBvcnRzLkdyaWQyeDJDaGVjayA9IEdyaWQyeDJDaGVjazsKICAgIGV4cG9ydHMuR3JpZDJ4MlBsdXMgPSBHcmlkMngyUGx1czsKICAgIGV4cG9ydHMuR3JpZDJ4MlggPSBHcmlkMngyWDsKICAgIGV4cG9ydHMuR3JpZDNYMyA9IEdyaWQzeDM7CiAgICBleHBvcnRzLkdyaWQzeDIgPSBHcmlkM3gyOwogICAgZXhwb3J0cy5HcmlkM3gzID0gR3JpZDN4MzsKICAgIGV4cG9ydHMuR3JpcCA9IEdyaXA7CiAgICBleHBvcnRzLkdyaXBIb3Jpem9udGFsID0gR3JpcEhvcml6b250YWw7CiAgICBleHBvcnRzLkdyaXBWZXJ0aWNhbCA9IEdyaXBWZXJ0aWNhbDsKICAgIGV4cG9ydHMuR3JvdXAgPSBHcm91cDsKICAgIGV4cG9ydHMuR3VpdGFyID0gR3VpdGFyOwogICAgZXhwb3J0cy5IYW0gPSBIYW07CiAgICBleHBvcnRzLkhhbWJ1cmdlciA9IEhhbWJ1cmdlcjsKICAgIGV4cG9ydHMuSGFtbWVyID0gSGFtbWVyOwogICAgZXhwb3J0cy5IYW5kID0gSGFuZDsKICAgIGV4cG9ydHMuSGFuZENvaW5zID0gSGFuZENvaW5zOwogICAgZXhwb3J0cy5IYW5kRmlzdCA9IEhhbmRGaXN0OwogICAgZXhwb3J0cy5IYW5kR3JhYiA9IEhhbmRHcmFiOwogICAgZXhwb3J0cy5IYW5kSGVhcnQgPSBIYW5kSGVhcnQ7CiAgICBleHBvcnRzLkhhbmRIZWxwaW5nID0gSGFuZEhlbHBpbmc7CiAgICBleHBvcnRzLkhhbmRNZXRhbCA9IEhhbmRNZXRhbDsKICAgIGV4cG9ydHMuSGFuZFBsYXR0ZXIgPSBIYW5kUGxhdHRlcjsKICAgIGV4cG9ydHMuSGFuZGJhZyA9IEhhbmRiYWc7CiAgICBleHBvcnRzLkhhbmRzaGFrZSA9IEhhbmRzaGFrZTsKICAgIGV4cG9ydHMuSGFyZERyaXZlID0gSGFyZERyaXZlOwogICAgZXhwb3J0cy5IYXJkRHJpdmVEb3dubG9hZCA9IEhhcmREcml2ZURvd25sb2FkOwogICAgZXhwb3J0cy5IYXJkRHJpdmVVcGxvYWQgPSBIYXJkRHJpdmVVcGxvYWQ7CiAgICBleHBvcnRzLkhhcmRIYXQgPSBIYXJkSGF0OwogICAgZXhwb3J0cy5IYXNoID0gSGFzaDsKICAgIGV4cG9ydHMuSGF0R2xhc3NlcyA9IEhhdEdsYXNzZXM7CiAgICBleHBvcnRzLkhhemUgPSBIYXplOwogICAgZXhwb3J0cy5IZCA9IEhkOwogICAgZXhwb3J0cy5IZG1pUG9ydCA9IEhkbWlQb3J0OwogICAgZXhwb3J0cy5IZWFkaW5nID0gSGVhZGluZzsKICAgIGV4cG9ydHMuSGVhZGluZzEgPSBIZWFkaW5nMTsKICAgIGV4cG9ydHMuSGVhZGluZzIgPSBIZWFkaW5nMjsKICAgIGV4cG9ydHMuSGVhZGluZzMgPSBIZWFkaW5nMzsKICAgIGV4cG9ydHMuSGVhZGluZzQgPSBIZWFkaW5nNDsKICAgIGV4cG9ydHMuSGVhZGluZzUgPSBIZWFkaW5nNTsKICAgIGV4cG9ydHMuSGVhZGluZzYgPSBIZWFkaW5nNjsKICAgIGV4cG9ydHMuSGVhZHBob25lT2ZmID0gSGVhZHBob25lT2ZmOwogICAgZXhwb3J0cy5IZWFkcGhvbmVzID0gSGVhZHBob25lczsKICAgIGV4cG9ydHMuSGVhZHNldCA9IEhlYWRzZXQ7CiAgICBleHBvcnRzLkhlYXJ0ID0gSGVhcnQ7CiAgICBleHBvcnRzLkhlYXJ0Q3JhY2sgPSBIZWFydENyYWNrOwogICAgZXhwb3J0cy5IZWFydEhhbmRzaGFrZSA9IEhlYXJ0SGFuZHNoYWtlOwogICAgZXhwb3J0cy5IZWFydE1pbnVzID0gSGVhcnRNaW51czsKICAgIGV4cG9ydHMuSGVhcnRPZmYgPSBIZWFydE9mZjsKICAgIGV4cG9ydHMuSGVhcnRQbHVzID0gSGVhcnRQbHVzOwogICAgZXhwb3J0cy5IZWFydFB1bHNlID0gSGVhcnRQdWxzZTsKICAgIGV4cG9ydHMuSGVhdGVyID0gSGVhdGVyOwogICAgZXhwb3J0cy5IZWxpY29wdGVyID0gSGVsaWNvcHRlcjsKICAgIGV4cG9ydHMuSGVscENpcmNsZSA9IENpcmNsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuSGVscGluZ0hhbmQgPSBIYW5kSGVscGluZzsKICAgIGV4cG9ydHMuSGV4YWdvbiA9IEhleGFnb247CiAgICBleHBvcnRzLkhpZ2hsaWdodGVyID0gSGlnaGxpZ2h0ZXI7CiAgICBleHBvcnRzLkhpc3RvcnkgPSBIaXN0b3J5OwogICAgZXhwb3J0cy5Ib21lID0gSG91c2U7CiAgICBleHBvcnRzLkhvcCA9IEhvcDsKICAgIGV4cG9ydHMuSG9wT2ZmID0gSG9wT2ZmOwogICAgZXhwb3J0cy5Ib3NwaXRhbCA9IEhvc3BpdGFsOwogICAgZXhwb3J0cy5Ib3RlbCA9IEhvdGVsOwogICAgZXhwb3J0cy5Ib3VyZ2xhc3MgPSBIb3VyZ2xhc3M7CiAgICBleHBvcnRzLkhvdXNlID0gSG91c2U7CiAgICBleHBvcnRzLkhvdXNlSGVhcnQgPSBIb3VzZUhlYXJ0OwogICAgZXhwb3J0cy5Ib3VzZVBsdWcgPSBIb3VzZVBsdWc7CiAgICBleHBvcnRzLkhvdXNlUGx1cyA9IEhvdXNlUGx1czsKICAgIGV4cG9ydHMuSG91c2VXaWZpID0gSG91c2VXaWZpOwogICAgZXhwb3J0cy5JY2VDcmVhbSA9IEljZUNyZWFtQ29uZTsKICAgIGV4cG9ydHMuSWNlQ3JlYW0yID0gSWNlQ3JlYW1Cb3dsOwogICAgZXhwb3J0cy5JY2VDcmVhbUJvd2wgPSBJY2VDcmVhbUJvd2w7CiAgICBleHBvcnRzLkljZUNyZWFtQ29uZSA9IEljZUNyZWFtQ29uZTsKICAgIGV4cG9ydHMuSWRDYXJkID0gSWRDYXJkOwogICAgZXhwb3J0cy5JZENhcmRMYW55YXJkID0gSWRDYXJkTGFueWFyZDsKICAgIGV4cG9ydHMuSW1hZ2UgPSBJbWFnZTI7CiAgICBleHBvcnRzLkltYWdlRG93biA9IEltYWdlRG93bjsKICAgIGV4cG9ydHMuSW1hZ2VNaW51cyA9IEltYWdlTWludXM7CiAgICBleHBvcnRzLkltYWdlT2ZmID0gSW1hZ2VPZmY7CiAgICBleHBvcnRzLkltYWdlUGxheSA9IEltYWdlUGxheTsKICAgIGV4cG9ydHMuSW1hZ2VQbHVzID0gSW1hZ2VQbHVzOwogICAgZXhwb3J0cy5JbWFnZVVwID0gSW1hZ2VVcDsKICAgIGV4cG9ydHMuSW1hZ2VVcHNjYWxlID0gSW1hZ2VVcHNjYWxlOwogICAgZXhwb3J0cy5JbWFnZXMgPSBJbWFnZXM7CiAgICBleHBvcnRzLkltcG9ydCA9IEltcG9ydDsKICAgIGV4cG9ydHMuSW5ib3ggPSBJbmJveDsKICAgIGV4cG9ydHMuSW5kZW50ID0gTGlzdEluZGVudEluY3JlYXNlOwogICAgZXhwb3J0cy5JbmRlbnREZWNyZWFzZSA9IExpc3RJbmRlbnREZWNyZWFzZTsKICAgIGV4cG9ydHMuSW5kZW50SW5jcmVhc2UgPSBMaXN0SW5kZW50SW5jcmVhc2U7CiAgICBleHBvcnRzLkluZGlhblJ1cGVlID0gSW5kaWFuUnVwZWU7CiAgICBleHBvcnRzLkluZmluaXR5ID0gSW5maW5pdHkyOwogICAgZXhwb3J0cy5JbmZvID0gSW5mbzI7CiAgICBleHBvcnRzLkluc3BlY3QgPSBTcXVhcmVNb3VzZVBvaW50ZXI7CiAgICBleHBvcnRzLkluc3BlY3Rpb25QYW5lbCA9IEluc3BlY3Rpb25QYW5lbDsKICAgIGV4cG9ydHMuSW5zdGFncmFtID0gSW5zdGFncmFtOwogICAgZXhwb3J0cy5JdGFsaWMgPSBJdGFsaWM7CiAgICBleHBvcnRzLkl0ZXJhdGlvbkNjdyA9IEl0ZXJhdGlvbkNjdzsKICAgIGV4cG9ydHMuSXRlcmF0aW9uQ3cgPSBJdGVyYXRpb25DdzsKICAgIGV4cG9ydHMuSmFwYW5lc2VZZW4gPSBKYXBhbmVzZVllbjsKICAgIGV4cG9ydHMuSm95c3RpY2sgPSBKb3lzdGljazsKICAgIGV4cG9ydHMuS2FuYmFuID0gS2FuYmFuOwogICAgZXhwb3J0cy5LYW5iYW5TcXVhcmUgPSBTcXVhcmVLYW5iYW47CiAgICBleHBvcnRzLkthbmJhblNxdWFyZURhc2hlZCA9IFNxdWFyZURhc2hlZEthbmJhbjsKICAgIGV4cG9ydHMuS2F5YWsgPSBLYXlhazsKICAgIGV4cG9ydHMuS2V5ID0gS2V5MjsKICAgIGV4cG9ydHMuS2V5Um91bmQgPSBLZXlSb3VuZDsKICAgIGV4cG9ydHMuS2V5U3F1YXJlID0gS2V5U3F1YXJlOwogICAgZXhwb3J0cy5LZXlib2FyZCA9IEtleWJvYXJkMjsKICAgIGV4cG9ydHMuS2V5Ym9hcmRNdXNpYyA9IEtleWJvYXJkTXVzaWM7CiAgICBleHBvcnRzLktleWJvYXJkT2ZmID0gS2V5Ym9hcmRPZmY7CiAgICBleHBvcnRzLkxhbXAgPSBMYW1wOwogICAgZXhwb3J0cy5MYW1wQ2VpbGluZyA9IExhbXBDZWlsaW5nOwogICAgZXhwb3J0cy5MYW1wRGVzayA9IExhbXBEZXNrOwogICAgZXhwb3J0cy5MYW1wRmxvb3IgPSBMYW1wRmxvb3I7CiAgICBleHBvcnRzLkxhbXBXYWxsRG93biA9IExhbXBXYWxsRG93bjsKICAgIGV4cG9ydHMuTGFtcFdhbGxVcCA9IExhbXBXYWxsVXA7CiAgICBleHBvcnRzLkxhbmRQbG90ID0gTGFuZFBsb3Q7CiAgICBleHBvcnRzLkxhbmRtYXJrID0gTGFuZG1hcms7CiAgICBleHBvcnRzLkxhbmd1YWdlcyA9IExhbmd1YWdlczsKICAgIGV4cG9ydHMuTGFwdG9wID0gTGFwdG9wOwogICAgZXhwb3J0cy5MYXB0b3AyID0gTGFwdG9wTWluaW1hbDsKICAgIGV4cG9ydHMuTGFwdG9wTWluaW1hbCA9IExhcHRvcE1pbmltYWw7CiAgICBleHBvcnRzLkxhcHRvcE1pbmltYWxDaGVjayA9IExhcHRvcE1pbmltYWxDaGVjazsKICAgIGV4cG9ydHMuTGFzc28gPSBMYXNzbzsKICAgIGV4cG9ydHMuTGFzc29TZWxlY3QgPSBMYXNzb1NlbGVjdDsKICAgIGV4cG9ydHMuTGF1Z2ggPSBMYXVnaDsKICAgIGV4cG9ydHMuTGF5ZXJzID0gTGF5ZXJzMzsKICAgIGV4cG9ydHMuTGF5ZXJzMiA9IExheWVyczI7CiAgICBleHBvcnRzLkxheWVyczMgPSBMYXllcnMzOwogICAgZXhwb3J0cy5MYXllcnNQbHVzID0gTGF5ZXJzUGx1czsKICAgIGV4cG9ydHMuTGF5b3V0ID0gUGFuZWxzVG9wTGVmdDsKICAgIGV4cG9ydHMuTGF5b3V0RGFzaGJvYXJkID0gTGF5b3V0RGFzaGJvYXJkOwogICAgZXhwb3J0cy5MYXlvdXRHcmlkID0gTGF5b3V0R3JpZDsKICAgIGV4cG9ydHMuTGF5b3V0TGlzdCA9IExheW91dExpc3Q7CiAgICBleHBvcnRzLkxheW91dFBhbmVsTGVmdCA9IExheW91dFBhbmVsTGVmdDsKICAgIGV4cG9ydHMuTGF5b3V0UGFuZWxUb3AgPSBMYXlvdXRQYW5lbFRvcDsKICAgIGV4cG9ydHMuTGF5b3V0VGVtcGxhdGUgPSBMYXlvdXRUZW1wbGF0ZTsKICAgIGV4cG9ydHMuTGVhZiA9IExlYWY7CiAgICBleHBvcnRzLkxlYWZ5R3JlZW4gPSBMZWFmeUdyZWVuOwogICAgZXhwb3J0cy5MZWN0ZXJuID0gTGVjdGVybjsKICAgIGV4cG9ydHMuTGV0dGVyVGV4dCA9IFRleHRJbml0aWFsOwogICAgZXhwb3J0cy5MaWJyYXJ5ID0gTGlicmFyeTI7CiAgICBleHBvcnRzLkxpYnJhcnlCaWcgPSBMaWJyYXJ5QmlnOwogICAgZXhwb3J0cy5MaWJyYXJ5U3F1YXJlID0gU3F1YXJlTGlicmFyeTsKICAgIGV4cG9ydHMuTGlmZUJ1b3kgPSBMaWZlQnVveTsKICAgIGV4cG9ydHMuTGlnYXR1cmUgPSBMaWdhdHVyZTsKICAgIGV4cG9ydHMuTGlnaHRidWxiID0gTGlnaHRidWxiOwogICAgZXhwb3J0cy5MaWdodGJ1bGJPZmYgPSBMaWdodGJ1bGJPZmY7CiAgICBleHBvcnRzLkxpbmVDaGFydCA9IENoYXJ0TGluZTsKICAgIGV4cG9ydHMuTGluZVNxdWlnZ2xlID0gTGluZVNxdWlnZ2xlOwogICAgZXhwb3J0cy5MaW5rID0gTGluazsKICAgIGV4cG9ydHMuTGluazIgPSBMaW5rMjsKICAgIGV4cG9ydHMuTGluazJPZmYgPSBMaW5rMk9mZjsKICAgIGV4cG9ydHMuTGlua2VkaW4gPSBMaW5rZWRpbjsKICAgIGV4cG9ydHMuTGlzdCA9IExpc3Q7CiAgICBleHBvcnRzLkxpc3RDaGVjayA9IExpc3RDaGVjazsKICAgIGV4cG9ydHMuTGlzdENoZWNrcyA9IExpc3RDaGVja3M7CiAgICBleHBvcnRzLkxpc3RDaGV2cm9uc0Rvd25VcCA9IExpc3RDaGV2cm9uc0Rvd25VcDsKICAgIGV4cG9ydHMuTGlzdENoZXZyb25zVXBEb3duID0gTGlzdENoZXZyb25zVXBEb3duOwogICAgZXhwb3J0cy5MaXN0Q29sbGFwc2UgPSBMaXN0Q29sbGFwc2U7CiAgICBleHBvcnRzLkxpc3RFbmQgPSBMaXN0RW5kOwogICAgZXhwb3J0cy5MaXN0RmlsdGVyID0gTGlzdEZpbHRlcjsKICAgIGV4cG9ydHMuTGlzdEZpbHRlclBsdXMgPSBMaXN0RmlsdGVyUGx1czsKICAgIGV4cG9ydHMuTGlzdEluZGVudERlY3JlYXNlID0gTGlzdEluZGVudERlY3JlYXNlOwogICAgZXhwb3J0cy5MaXN0SW5kZW50SW5jcmVhc2UgPSBMaXN0SW5kZW50SW5jcmVhc2U7CiAgICBleHBvcnRzLkxpc3RNaW51cyA9IExpc3RNaW51czsKICAgIGV4cG9ydHMuTGlzdE11c2ljID0gTGlzdE11c2ljOwogICAgZXhwb3J0cy5MaXN0T3JkZXJlZCA9IExpc3RPcmRlcmVkOwogICAgZXhwb3J0cy5MaXN0UGx1cyA9IExpc3RQbHVzOwogICAgZXhwb3J0cy5MaXN0UmVzdGFydCA9IExpc3RSZXN0YXJ0OwogICAgZXhwb3J0cy5MaXN0U3RhcnQgPSBMaXN0U3RhcnQ7CiAgICBleHBvcnRzLkxpc3RUb2RvID0gTGlzdFRvZG87CiAgICBleHBvcnRzLkxpc3RUcmVlID0gTGlzdFRyZWU7CiAgICBleHBvcnRzLkxpc3RWaWRlbyA9IExpc3RWaWRlbzsKICAgIGV4cG9ydHMuTGlzdFggPSBMaXN0WDsKICAgIGV4cG9ydHMuTG9hZGVyID0gTG9hZGVyOwogICAgZXhwb3J0cy5Mb2FkZXIyID0gTG9hZGVyQ2lyY2xlOwogICAgZXhwb3J0cy5Mb2FkZXJDaXJjbGUgPSBMb2FkZXJDaXJjbGU7CiAgICBleHBvcnRzLkxvYWRlclBpbndoZWVsID0gTG9hZGVyUGlud2hlZWw7CiAgICBleHBvcnRzLkxvY2F0ZSA9IExvY2F0ZTsKICAgIGV4cG9ydHMuTG9jYXRlRml4ZWQgPSBMb2NhdGVGaXhlZDsKICAgIGV4cG9ydHMuTG9jYXRlT2ZmID0gTG9jYXRlT2ZmOwogICAgZXhwb3J0cy5Mb2NhdGlvbkVkaXQgPSBNYXBQaW5QZW47CiAgICBleHBvcnRzLkxvY2sgPSBMb2NrOwogICAgZXhwb3J0cy5Mb2NrS2V5aG9sZSA9IExvY2tLZXlob2xlOwogICAgZXhwb3J0cy5Mb2NrS2V5aG9sZU9wZW4gPSBMb2NrS2V5aG9sZU9wZW47CiAgICBleHBvcnRzLkxvY2tPcGVuID0gTG9ja09wZW47CiAgICBleHBvcnRzLkxvZ0luID0gTG9nSW47CiAgICBleHBvcnRzLkxvZ091dCA9IExvZ091dDsKICAgIGV4cG9ydHMuTG9ncyA9IExvZ3M7CiAgICBleHBvcnRzLkxvbGxpcG9wID0gTG9sbGlwb3A7CiAgICBleHBvcnRzLkx1Z2dhZ2UgPSBMdWdnYWdlOwogICAgZXhwb3J0cy5NU3F1YXJlID0gU3F1YXJlTTsKICAgIGV4cG9ydHMuTWFnbmV0ID0gTWFnbmV0OwogICAgZXhwb3J0cy5NYWlsID0gTWFpbDsKICAgIGV4cG9ydHMuTWFpbENoZWNrID0gTWFpbENoZWNrOwogICAgZXhwb3J0cy5NYWlsTWludXMgPSBNYWlsTWludXM7CiAgICBleHBvcnRzLk1haWxPcGVuID0gTWFpbE9wZW47CiAgICBleHBvcnRzLk1haWxQbHVzID0gTWFpbFBsdXM7CiAgICBleHBvcnRzLk1haWxRdWVzdGlvbiA9IE1haWxRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLk1haWxRdWVzdGlvbk1hcmsgPSBNYWlsUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5NYWlsU2VhcmNoID0gTWFpbFNlYXJjaDsKICAgIGV4cG9ydHMuTWFpbFdhcm5pbmcgPSBNYWlsV2FybmluZzsKICAgIGV4cG9ydHMuTWFpbFggPSBNYWlsWDsKICAgIGV4cG9ydHMuTWFpbGJveCA9IE1haWxib3g7CiAgICBleHBvcnRzLk1haWxzID0gTWFpbHM7CiAgICBleHBvcnRzLk1hcCA9IE1hcDI7CiAgICBleHBvcnRzLk1hcE1pbnVzID0gTWFwTWludXM7CiAgICBleHBvcnRzLk1hcFBpbiA9IE1hcFBpbjsKICAgIGV4cG9ydHMuTWFwUGluQ2hlY2sgPSBNYXBQaW5DaGVjazsKICAgIGV4cG9ydHMuTWFwUGluQ2hlY2tJbnNpZGUgPSBNYXBQaW5DaGVja0luc2lkZTsKICAgIGV4cG9ydHMuTWFwUGluSG91c2UgPSBNYXBQaW5Ib3VzZTsKICAgIGV4cG9ydHMuTWFwUGluTWludXMgPSBNYXBQaW5NaW51czsKICAgIGV4cG9ydHMuTWFwUGluTWludXNJbnNpZGUgPSBNYXBQaW5NaW51c0luc2lkZTsKICAgIGV4cG9ydHMuTWFwUGluT2ZmID0gTWFwUGluT2ZmOwogICAgZXhwb3J0cy5NYXBQaW5QZW4gPSBNYXBQaW5QZW47CiAgICBleHBvcnRzLk1hcFBpblBsdXMgPSBNYXBQaW5QbHVzOwogICAgZXhwb3J0cy5NYXBQaW5QbHVzSW5zaWRlID0gTWFwUGluUGx1c0luc2lkZTsKICAgIGV4cG9ydHMuTWFwUGluWCA9IE1hcFBpblg7CiAgICBleHBvcnRzLk1hcFBpblhJbnNpZGUgPSBNYXBQaW5YSW5zaWRlOwogICAgZXhwb3J0cy5NYXBQaW5uZWQgPSBNYXBQaW5uZWQ7CiAgICBleHBvcnRzLk1hcFBsdXMgPSBNYXBQbHVzOwogICAgZXhwb3J0cy5NYXJzID0gTWFyczsKICAgIGV4cG9ydHMuTWFyc1N0cm9rZSA9IE1hcnNTdHJva2U7CiAgICBleHBvcnRzLk1hcnRpbmkgPSBNYXJ0aW5pOwogICAgZXhwb3J0cy5NYXhpbWl6ZSA9IE1heGltaXplOwogICAgZXhwb3J0cy5NYXhpbWl6ZTIgPSBNYXhpbWl6ZTI7CiAgICBleHBvcnRzLk1lZGFsID0gTWVkYWw7CiAgICBleHBvcnRzLk1lZ2FwaG9uZSA9IE1lZ2FwaG9uZTsKICAgIGV4cG9ydHMuTWVnYXBob25lT2ZmID0gTWVnYXBob25lT2ZmOwogICAgZXhwb3J0cy5NZWggPSBNZWg7CiAgICBleHBvcnRzLk1lbW9yeVN0aWNrID0gTWVtb3J5U3RpY2s7CiAgICBleHBvcnRzLk1lbnUgPSBNZW51OwogICAgZXhwb3J0cy5NZW51U3F1YXJlID0gU3F1YXJlTWVudTsKICAgIGV4cG9ydHMuTWVyZ2UgPSBNZXJnZTsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZSA9IE1lc3NhZ2VDaXJjbGU7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVDb2RlID0gTWVzc2FnZUNpcmNsZUNvZGU7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVEYXNoZWQgPSBNZXNzYWdlQ2lyY2xlRGFzaGVkOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlSGVhcnQgPSBNZXNzYWdlQ2lyY2xlSGVhcnQ7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVNb3JlID0gTWVzc2FnZUNpcmNsZU1vcmU7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVPZmYgPSBNZXNzYWdlQ2lyY2xlT2ZmOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlUGx1cyA9IE1lc3NhZ2VDaXJjbGVQbHVzOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlUXVlc3Rpb24gPSBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrID0gTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVJlcGx5ID0gTWVzc2FnZUNpcmNsZVJlcGx5OwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlV2FybmluZyA9IE1lc3NhZ2VDaXJjbGVXYXJuaW5nOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlWCA9IE1lc3NhZ2VDaXJjbGVYOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlID0gTWVzc2FnZVNxdWFyZTsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZUNvZGUgPSBNZXNzYWdlU3F1YXJlQ29kZTsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZURhc2hlZCA9IE1lc3NhZ2VTcXVhcmVEYXNoZWQ7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVEaWZmID0gTWVzc2FnZVNxdWFyZURpZmY7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVEb3QgPSBNZXNzYWdlU3F1YXJlRG90OwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlSGVhcnQgPSBNZXNzYWdlU3F1YXJlSGVhcnQ7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVMb2NrID0gTWVzc2FnZVNxdWFyZUxvY2s7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVNb3JlID0gTWVzc2FnZVNxdWFyZU1vcmU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVPZmYgPSBNZXNzYWdlU3F1YXJlT2ZmOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlUGx1cyA9IE1lc3NhZ2VTcXVhcmVQbHVzOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlUXVvdGUgPSBNZXNzYWdlU3F1YXJlUXVvdGU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVSZXBseSA9IE1lc3NhZ2VTcXVhcmVSZXBseTsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVNoYXJlID0gTWVzc2FnZVNxdWFyZVNoYXJlOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlVGV4dCA9IE1lc3NhZ2VTcXVhcmVUZXh0OwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlV2FybmluZyA9IE1lc3NhZ2VTcXVhcmVXYXJuaW5nOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlWCA9IE1lc3NhZ2VTcXVhcmVYOwogICAgZXhwb3J0cy5NZXNzYWdlc1NxdWFyZSA9IE1lc3NhZ2VzU3F1YXJlOwogICAgZXhwb3J0cy5NaWMgPSBNaWM7CiAgICBleHBvcnRzLk1pYzIgPSBNaWNWb2NhbDsKICAgIGV4cG9ydHMuTWljT2ZmID0gTWljT2ZmOwogICAgZXhwb3J0cy5NaWNWb2NhbCA9IE1pY1ZvY2FsOwogICAgZXhwb3J0cy5NaWNyb2NoaXAgPSBNaWNyb2NoaXA7CiAgICBleHBvcnRzLk1pY3Jvc2NvcGUgPSBNaWNyb3Njb3BlOwogICAgZXhwb3J0cy5NaWNyb3dhdmUgPSBNaWNyb3dhdmU7CiAgICBleHBvcnRzLk1pbGVzdG9uZSA9IE1pbGVzdG9uZTsKICAgIGV4cG9ydHMuTWlsayA9IE1pbGs7CiAgICBleHBvcnRzLk1pbGtPZmYgPSBNaWxrT2ZmOwogICAgZXhwb3J0cy5NaW5pbWl6ZSA9IE1pbmltaXplOwogICAgZXhwb3J0cy5NaW5pbWl6ZTIgPSBNaW5pbWl6ZTI7CiAgICBleHBvcnRzLk1pbnVzID0gTWludXM7CiAgICBleHBvcnRzLk1pbnVzQ2lyY2xlID0gQ2lyY2xlTWludXM7CiAgICBleHBvcnRzLk1pbnVzU3F1YXJlID0gU3F1YXJlTWludXM7CiAgICBleHBvcnRzLk1vbml0b3IgPSBNb25pdG9yOwogICAgZXhwb3J0cy5Nb25pdG9yQ2hlY2sgPSBNb25pdG9yQ2hlY2s7CiAgICBleHBvcnRzLk1vbml0b3JDbG91ZCA9IE1vbml0b3JDbG91ZDsKICAgIGV4cG9ydHMuTW9uaXRvckNvZyA9IE1vbml0b3JDb2c7CiAgICBleHBvcnRzLk1vbml0b3JEb3QgPSBNb25pdG9yRG90OwogICAgZXhwb3J0cy5Nb25pdG9yRG93biA9IE1vbml0b3JEb3duOwogICAgZXhwb3J0cy5Nb25pdG9yT2ZmID0gTW9uaXRvck9mZjsKICAgIGV4cG9ydHMuTW9uaXRvclBhdXNlID0gTW9uaXRvclBhdXNlOwogICAgZXhwb3J0cy5Nb25pdG9yUGxheSA9IE1vbml0b3JQbGF5OwogICAgZXhwb3J0cy5Nb25pdG9yU21hcnRwaG9uZSA9IE1vbml0b3JTbWFydHBob25lOwogICAgZXhwb3J0cy5Nb25pdG9yU3BlYWtlciA9IE1vbml0b3JTcGVha2VyOwogICAgZXhwb3J0cy5Nb25pdG9yU3RvcCA9IE1vbml0b3JTdG9wOwogICAgZXhwb3J0cy5Nb25pdG9yVXAgPSBNb25pdG9yVXA7CiAgICBleHBvcnRzLk1vbml0b3JYID0gTW9uaXRvclg7CiAgICBleHBvcnRzLk1vb24gPSBNb29uOwogICAgZXhwb3J0cy5Nb29uU3RhciA9IE1vb25TdGFyOwogICAgZXhwb3J0cy5Nb3JlSG9yaXpvbnRhbCA9IEVsbGlwc2lzOwogICAgZXhwb3J0cy5Nb3JlVmVydGljYWwgPSBFbGxpcHNpc1ZlcnRpY2FsOwogICAgZXhwb3J0cy5Nb3RvcmJpa2UgPSBNb3RvcmJpa2U7CiAgICBleHBvcnRzLk1vdW50YWluID0gTW91bnRhaW47CiAgICBleHBvcnRzLk1vdW50YWluU25vdyA9IE1vdW50YWluU25vdzsKICAgIGV4cG9ydHMuTW91c2UgPSBNb3VzZTsKICAgIGV4cG9ydHMuTW91c2VPZmYgPSBNb3VzZU9mZjsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyID0gTW91c2VQb2ludGVyOwogICAgZXhwb3J0cy5Nb3VzZVBvaW50ZXIyID0gTW91c2VQb2ludGVyMjsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyMk9mZiA9IE1vdXNlUG9pbnRlcjJPZmY7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlckJhbiA9IE1vdXNlUG9pbnRlckJhbjsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyQ2xpY2sgPSBNb3VzZVBvaW50ZXJDbGljazsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyU3F1YXJlRGFzaGVkID0gU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyOwogICAgZXhwb3J0cy5Nb3ZlID0gTW92ZTsKICAgIGV4cG9ydHMuTW92ZTNEID0gTW92ZTNkOwogICAgZXhwb3J0cy5Nb3ZlM2QgPSBNb3ZlM2Q7CiAgICBleHBvcnRzLk1vdmVEaWFnb25hbCA9IE1vdmVEaWFnb25hbDsKICAgIGV4cG9ydHMuTW92ZURpYWdvbmFsMiA9IE1vdmVEaWFnb25hbDI7CiAgICBleHBvcnRzLk1vdmVEb3duID0gTW92ZURvd247CiAgICBleHBvcnRzLk1vdmVEb3duTGVmdCA9IE1vdmVEb3duTGVmdDsKICAgIGV4cG9ydHMuTW92ZURvd25SaWdodCA9IE1vdmVEb3duUmlnaHQ7CiAgICBleHBvcnRzLk1vdmVIb3Jpem9udGFsID0gTW92ZUhvcml6b250YWw7CiAgICBleHBvcnRzLk1vdmVMZWZ0ID0gTW92ZUxlZnQ7CiAgICBleHBvcnRzLk1vdmVSaWdodCA9IE1vdmVSaWdodDsKICAgIGV4cG9ydHMuTW92ZVVwID0gTW92ZVVwOwogICAgZXhwb3J0cy5Nb3ZlVXBMZWZ0ID0gTW92ZVVwTGVmdDsKICAgIGV4cG9ydHMuTW92ZVVwUmlnaHQgPSBNb3ZlVXBSaWdodDsKICAgIGV4cG9ydHMuTW92ZVZlcnRpY2FsID0gTW92ZVZlcnRpY2FsOwogICAgZXhwb3J0cy5NdXNpYyA9IE11c2ljOwogICAgZXhwb3J0cy5NdXNpYzIgPSBNdXNpYzI7CiAgICBleHBvcnRzLk11c2ljMyA9IE11c2ljMzsKICAgIGV4cG9ydHMuTXVzaWM0ID0gTXVzaWM0OwogICAgZXhwb3J0cy5OYXZpZ2F0aW9uID0gTmF2aWdhdGlvbjsKICAgIGV4cG9ydHMuTmF2aWdhdGlvbjIgPSBOYXZpZ2F0aW9uMjsKICAgIGV4cG9ydHMuTmF2aWdhdGlvbjJPZmYgPSBOYXZpZ2F0aW9uMk9mZjsKICAgIGV4cG9ydHMuTmF2aWdhdGlvbk9mZiA9IE5hdmlnYXRpb25PZmY7CiAgICBleHBvcnRzLk5ldHdvcmsgPSBOZXR3b3JrOwogICAgZXhwb3J0cy5OZXdzcGFwZXIgPSBOZXdzcGFwZXI7CiAgICBleHBvcnRzLk5mYyA9IE5mYzsKICAgIGV4cG9ydHMuTm9uQmluYXJ5ID0gTm9uQmluYXJ5OwogICAgZXhwb3J0cy5Ob3RlYm9vayA9IE5vdGVib29rOwogICAgZXhwb3J0cy5Ob3RlYm9va1BlbiA9IE5vdGVib29rUGVuOwogICAgZXhwb3J0cy5Ob3RlYm9va1RhYnMgPSBOb3RlYm9va1RhYnM7CiAgICBleHBvcnRzLk5vdGVib29rVGV4dCA9IE5vdGVib29rVGV4dDsKICAgIGV4cG9ydHMuTm90ZXBhZFRleHQgPSBOb3RlcGFkVGV4dDsKICAgIGV4cG9ydHMuTm90ZXBhZFRleHREYXNoZWQgPSBOb3RlcGFkVGV4dERhc2hlZDsKICAgIGV4cG9ydHMuTnV0ID0gTnV0OwogICAgZXhwb3J0cy5OdXRPZmYgPSBOdXRPZmY7CiAgICBleHBvcnRzLk9jdGFnb24gPSBPY3RhZ29uOwogICAgZXhwb3J0cy5PY3RhZ29uQWxlcnQgPSBPY3RhZ29uQWxlcnQ7CiAgICBleHBvcnRzLk9jdGFnb25NaW51cyA9IE9jdGFnb25NaW51czsKICAgIGV4cG9ydHMuT2N0YWdvblBhdXNlID0gT2N0YWdvblBhdXNlOwogICAgZXhwb3J0cy5PY3RhZ29uWCA9IE9jdGFnb25YOwogICAgZXhwb3J0cy5PbWVnYSA9IE9tZWdhOwogICAgZXhwb3J0cy5PcHRpb24gPSBPcHRpb247CiAgICBleHBvcnRzLk9yYml0ID0gT3JiaXQ7CiAgICBleHBvcnRzLk9yaWdhbWkgPSBPcmlnYW1pOwogICAgZXhwb3J0cy5PdXRkZW50ID0gTGlzdEluZGVudERlY3JlYXNlOwogICAgZXhwb3J0cy5QYWNrYWdlID0gUGFja2FnZTsKICAgIGV4cG9ydHMuUGFja2FnZTIgPSBQYWNrYWdlMjsKICAgIGV4cG9ydHMuUGFja2FnZUNoZWNrID0gUGFja2FnZUNoZWNrOwogICAgZXhwb3J0cy5QYWNrYWdlTWludXMgPSBQYWNrYWdlTWludXM7CiAgICBleHBvcnRzLlBhY2thZ2VPcGVuID0gUGFja2FnZU9wZW47CiAgICBleHBvcnRzLlBhY2thZ2VQbHVzID0gUGFja2FnZVBsdXM7CiAgICBleHBvcnRzLlBhY2thZ2VTZWFyY2ggPSBQYWNrYWdlU2VhcmNoOwogICAgZXhwb3J0cy5QYWNrYWdlWCA9IFBhY2thZ2VYOwogICAgZXhwb3J0cy5QYWludEJ1Y2tldCA9IFBhaW50QnVja2V0OwogICAgZXhwb3J0cy5QYWludFJvbGxlciA9IFBhaW50Um9sbGVyOwogICAgZXhwb3J0cy5QYWludGJydXNoID0gUGFpbnRicnVzaDsKICAgIGV4cG9ydHMuUGFpbnRicnVzaDIgPSBQYWludGJydXNoVmVydGljYWw7CiAgICBleHBvcnRzLlBhaW50YnJ1c2hWZXJ0aWNhbCA9IFBhaW50YnJ1c2hWZXJ0aWNhbDsKICAgIGV4cG9ydHMuUGFsZXR0ZSA9IFBhbGV0dGU7CiAgICBleHBvcnRzLlBhbG10cmVlID0gVHJlZVBhbG07CiAgICBleHBvcnRzLlBhbmRhID0gUGFuZGE7CiAgICBleHBvcnRzLlBhbmVsQm90dG9tID0gUGFuZWxCb3R0b207CiAgICBleHBvcnRzLlBhbmVsQm90dG9tQ2xvc2UgPSBQYW5lbEJvdHRvbUNsb3NlOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbURhc2hlZCA9IFBhbmVsQm90dG9tRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbUluYWN0aXZlID0gUGFuZWxCb3R0b21EYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsQm90dG9tT3BlbiA9IFBhbmVsQm90dG9tT3BlbjsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0ID0gUGFuZWxMZWZ0OwogICAgZXhwb3J0cy5QYW5lbExlZnRDbG9zZSA9IFBhbmVsTGVmdENsb3NlOwogICAgZXhwb3J0cy5QYW5lbExlZnREYXNoZWQgPSBQYW5lbExlZnREYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsTGVmdEluYWN0aXZlID0gUGFuZWxMZWZ0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbExlZnRPcGVuID0gUGFuZWxMZWZ0T3BlbjsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0UmlnaHREYXNoZWQgPSBQYW5lbExlZnRSaWdodERhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxSaWdodCA9IFBhbmVsUmlnaHQ7CiAgICBleHBvcnRzLlBhbmVsUmlnaHRDbG9zZSA9IFBhbmVsUmlnaHRDbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxSaWdodERhc2hlZCA9IFBhbmVsUmlnaHREYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsUmlnaHRJbmFjdGl2ZSA9IFBhbmVsUmlnaHREYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsUmlnaHRPcGVuID0gUGFuZWxSaWdodE9wZW47CiAgICBleHBvcnRzLlBhbmVsVG9wID0gUGFuZWxUb3A7CiAgICBleHBvcnRzLlBhbmVsVG9wQm90dG9tRGFzaGVkID0gUGFuZWxUb3BCb3R0b21EYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsVG9wQ2xvc2UgPSBQYW5lbFRvcENsb3NlOwogICAgZXhwb3J0cy5QYW5lbFRvcERhc2hlZCA9IFBhbmVsVG9wRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFRvcEluYWN0aXZlID0gUGFuZWxUb3BEYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsVG9wT3BlbiA9IFBhbmVsVG9wT3BlbjsKICAgIGV4cG9ydHMuUGFuZWxzTGVmdEJvdHRvbSA9IFBhbmVsc0xlZnRCb3R0b207CiAgICBleHBvcnRzLlBhbmVsc0xlZnRSaWdodCA9IENvbHVtbnMzOwogICAgZXhwb3J0cy5QYW5lbHNSaWdodEJvdHRvbSA9IFBhbmVsc1JpZ2h0Qm90dG9tOwogICAgZXhwb3J0cy5QYW5lbHNUb3BCb3R0b20gPSBSb3dzMzsKICAgIGV4cG9ydHMuUGFuZWxzVG9wTGVmdCA9IFBhbmVsc1RvcExlZnQ7CiAgICBleHBvcnRzLlBhcGVyY2xpcCA9IFBhcGVyY2xpcDsKICAgIGV4cG9ydHMuUGFyZW50aGVzZXMgPSBQYXJlbnRoZXNlczsKICAgIGV4cG9ydHMuUGFya2luZ0NpcmNsZSA9IENpcmNsZVBhcmtpbmc7CiAgICBleHBvcnRzLlBhcmtpbmdDaXJjbGVPZmYgPSBDaXJjbGVQYXJraW5nT2ZmOwogICAgZXhwb3J0cy5QYXJraW5nTWV0ZXIgPSBQYXJraW5nTWV0ZXI7CiAgICBleHBvcnRzLlBhcmtpbmdTcXVhcmUgPSBTcXVhcmVQYXJraW5nOwogICAgZXhwb3J0cy5QYXJraW5nU3F1YXJlT2ZmID0gU3F1YXJlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuUGFydHlQb3BwZXIgPSBQYXJ0eVBvcHBlcjsKICAgIGV4cG9ydHMuUGF1c2UgPSBQYXVzZTsKICAgIGV4cG9ydHMuUGF1c2VDaXJjbGUgPSBDaXJjbGVQYXVzZTsKICAgIGV4cG9ydHMuUGF1c2VPY3RhZ29uID0gT2N0YWdvblBhdXNlOwogICAgZXhwb3J0cy5QYXdQcmludCA9IFBhd1ByaW50OwogICAgZXhwb3J0cy5QY0Nhc2UgPSBQY0Nhc2U7CiAgICBleHBvcnRzLlBlbiA9IFBlbjsKICAgIGV4cG9ydHMuUGVuQm94ID0gU3F1YXJlUGVuOwogICAgZXhwb3J0cy5QZW5MaW5lID0gUGVuTGluZTsKICAgIGV4cG9ydHMuUGVuT2ZmID0gUGVuT2ZmOwogICAgZXhwb3J0cy5QZW5TcXVhcmUgPSBTcXVhcmVQZW47CiAgICBleHBvcnRzLlBlblRvb2wgPSBQZW5Ub29sOwogICAgZXhwb3J0cy5QZW5jaWwgPSBQZW5jaWw7CiAgICBleHBvcnRzLlBlbmNpbExpbmUgPSBQZW5jaWxMaW5lOwogICAgZXhwb3J0cy5QZW5jaWxPZmYgPSBQZW5jaWxPZmY7CiAgICBleHBvcnRzLlBlbmNpbFJ1bGVyID0gUGVuY2lsUnVsZXI7CiAgICBleHBvcnRzLlBlbnRhZ29uID0gUGVudGFnb247CiAgICBleHBvcnRzLlBlcmNlbnQgPSBQZXJjZW50OwogICAgZXhwb3J0cy5QZXJjZW50Q2lyY2xlID0gQ2lyY2xlUGVyY2VudDsKICAgIGV4cG9ydHMuUGVyY2VudERpYW1vbmQgPSBEaWFtb25kUGVyY2VudDsKICAgIGV4cG9ydHMuUGVyY2VudFNxdWFyZSA9IFNxdWFyZVBlcmNlbnQ7CiAgICBleHBvcnRzLlBlcnNvblN0YW5kaW5nID0gUGVyc29uU3RhbmRpbmc7CiAgICBleHBvcnRzLlBoaWxpcHBpbmVQZXNvID0gUGhpbGlwcGluZVBlc287CiAgICBleHBvcnRzLlBob25lID0gUGhvbmU7CiAgICBleHBvcnRzLlBob25lQ2FsbCA9IFBob25lQ2FsbDsKICAgIGV4cG9ydHMuUGhvbmVGb3J3YXJkZWQgPSBQaG9uZUZvcndhcmRlZDsKICAgIGV4cG9ydHMuUGhvbmVJbmNvbWluZyA9IFBob25lSW5jb21pbmc7CiAgICBleHBvcnRzLlBob25lTWlzc2VkID0gUGhvbmVNaXNzZWQ7CiAgICBleHBvcnRzLlBob25lT2ZmID0gUGhvbmVPZmY7CiAgICBleHBvcnRzLlBob25lT3V0Z29pbmcgPSBQaG9uZU91dGdvaW5nOwogICAgZXhwb3J0cy5QaSA9IFBpOwogICAgZXhwb3J0cy5QaVNxdWFyZSA9IFNxdWFyZVBpOwogICAgZXhwb3J0cy5QaWFubyA9IFBpYW5vOwogICAgZXhwb3J0cy5QaWNrYXhlID0gUGlja2F4ZTsKICAgIGV4cG9ydHMuUGljdHVyZUluUGljdHVyZSA9IFBpY3R1cmVJblBpY3R1cmU7CiAgICBleHBvcnRzLlBpY3R1cmVJblBpY3R1cmUyID0gUGljdHVyZUluUGljdHVyZTI7CiAgICBleHBvcnRzLlBpZUNoYXJ0ID0gQ2hhcnRQaWU7CiAgICBleHBvcnRzLlBpZ2d5QmFuayA9IFBpZ2d5QmFuazsKICAgIGV4cG9ydHMuUGlsY3JvdyA9IFBpbGNyb3c7CiAgICBleHBvcnRzLlBpbGNyb3dMZWZ0ID0gUGlsY3Jvd0xlZnQ7CiAgICBleHBvcnRzLlBpbGNyb3dSaWdodCA9IFBpbGNyb3dSaWdodDsKICAgIGV4cG9ydHMuUGlsY3Jvd1NxdWFyZSA9IFNxdWFyZVBpbGNyb3c7CiAgICBleHBvcnRzLlBpbGwgPSBQaWxsOwogICAgZXhwb3J0cy5QaWxsQm90dGxlID0gUGlsbEJvdHRsZTsKICAgIGV4cG9ydHMuUGluID0gUGluOwogICAgZXhwb3J0cy5QaW5PZmYgPSBQaW5PZmY7CiAgICBleHBvcnRzLlBpcGV0dGUgPSBQaXBldHRlOwogICAgZXhwb3J0cy5QaXp6YSA9IFBpenphOwogICAgZXhwb3J0cy5QbGFuZSA9IFBsYW5lOwogICAgZXhwb3J0cy5QbGFuZUxhbmRpbmcgPSBQbGFuZUxhbmRpbmc7CiAgICBleHBvcnRzLlBsYW5lVGFrZW9mZiA9IFBsYW5lVGFrZW9mZjsKICAgIGV4cG9ydHMuUGxheSA9IFBsYXk7CiAgICBleHBvcnRzLlBsYXlDaXJjbGUgPSBDaXJjbGVQbGF5OwogICAgZXhwb3J0cy5QbGF5U3F1YXJlID0gU3F1YXJlUGxheTsKICAgIGV4cG9ydHMuUGx1ZyA9IFBsdWc7CiAgICBleHBvcnRzLlBsdWcyID0gUGx1ZzI7CiAgICBleHBvcnRzLlBsdWdaYXAgPSBQbHVnWmFwOwogICAgZXhwb3J0cy5QbHVnWmFwMiA9IFBsdWdaYXA7CiAgICBleHBvcnRzLlBsdXMgPSBQbHVzOwogICAgZXhwb3J0cy5QbHVzQ2lyY2xlID0gQ2lyY2xlUGx1czsKICAgIGV4cG9ydHMuUGx1c1NxdWFyZSA9IFNxdWFyZVBsdXM7CiAgICBleHBvcnRzLlBvY2tldCA9IFBvY2tldDsKICAgIGV4cG9ydHMuUG9ja2V0S25pZmUgPSBQb2NrZXRLbmlmZTsKICAgIGV4cG9ydHMuUG9kY2FzdCA9IFBvZGNhc3Q7CiAgICBleHBvcnRzLlBvaW50ZXIgPSBQb2ludGVyOwogICAgZXhwb3J0cy5Qb2ludGVyT2ZmID0gUG9pbnRlck9mZjsKICAgIGV4cG9ydHMuUG9wY29ybiA9IFBvcGNvcm47CiAgICBleHBvcnRzLlBvcHNpY2xlID0gUG9wc2ljbGU7CiAgICBleHBvcnRzLlBvdW5kU3RlcmxpbmcgPSBQb3VuZFN0ZXJsaW5nOwogICAgZXhwb3J0cy5Qb3dlciA9IFBvd2VyOwogICAgZXhwb3J0cy5Qb3dlckNpcmNsZSA9IENpcmNsZVBvd2VyOwogICAgZXhwb3J0cy5Qb3dlck9mZiA9IFBvd2VyT2ZmOwogICAgZXhwb3J0cy5Qb3dlclNxdWFyZSA9IFNxdWFyZVBvd2VyOwogICAgZXhwb3J0cy5QcmVzZW50YXRpb24gPSBQcmVzZW50YXRpb247CiAgICBleHBvcnRzLlByaW50ZXIgPSBQcmludGVyOwogICAgZXhwb3J0cy5QcmludGVyQ2hlY2sgPSBQcmludGVyQ2hlY2s7CiAgICBleHBvcnRzLlByaW50ZXJYID0gUHJpbnRlclg7CiAgICBleHBvcnRzLlByb2plY3RvciA9IFByb2plY3RvcjsKICAgIGV4cG9ydHMuUHJvcG9ydGlvbnMgPSBQcm9wb3J0aW9uczsKICAgIGV4cG9ydHMuUHV6emxlID0gUHV6emxlOwogICAgZXhwb3J0cy5QeXJhbWlkID0gUHlyYW1pZDsKICAgIGV4cG9ydHMuUXJDb2RlID0gUXJDb2RlOwogICAgZXhwb3J0cy5RdW90ZSA9IFF1b3RlOwogICAgZXhwb3J0cy5SYWJiaXQgPSBSYWJiaXQ7CiAgICBleHBvcnRzLlJhZGFyID0gUmFkYXI7CiAgICBleHBvcnRzLlJhZGlhdGlvbiA9IFJhZGlhdGlvbjsKICAgIGV4cG9ydHMuUmFkaWNhbCA9IFJhZGljYWw7CiAgICBleHBvcnRzLlJhZGlvID0gUmFkaW87CiAgICBleHBvcnRzLlJhZGlvUmVjZWl2ZXIgPSBSYWRpb1JlY2VpdmVyOwogICAgZXhwb3J0cy5SYWRpb1Rvd2VyID0gUmFkaW9Ub3dlcjsKICAgIGV4cG9ydHMuUmFkaXVzID0gUmFkaXVzOwogICAgZXhwb3J0cy5SYWlsU3ltYm9sID0gUmFpbFN5bWJvbDsKICAgIGV4cG9ydHMuUmFpbmJvdyA9IFJhaW5ib3c7CiAgICBleHBvcnRzLlJhdCA9IFJhdDsKICAgIGV4cG9ydHMuUmF0aW8gPSBSYXRpbzsKICAgIGV4cG9ydHMuUmVjZWlwdCA9IFJlY2VpcHQ7CiAgICBleHBvcnRzLlJlY2VpcHRDZW50ID0gUmVjZWlwdENlbnQ7CiAgICBleHBvcnRzLlJlY2VpcHRFdXJvID0gUmVjZWlwdEV1cm87CiAgICBleHBvcnRzLlJlY2VpcHRJbmRpYW5SdXBlZSA9IFJlY2VpcHRJbmRpYW5SdXBlZTsKICAgIGV4cG9ydHMuUmVjZWlwdEphcGFuZXNlWWVuID0gUmVjZWlwdEphcGFuZXNlWWVuOwogICAgZXhwb3J0cy5SZWNlaXB0UG91bmRTdGVybGluZyA9IFJlY2VpcHRQb3VuZFN0ZXJsaW5nOwogICAgZXhwb3J0cy5SZWNlaXB0UnVzc2lhblJ1YmxlID0gUmVjZWlwdFJ1c3NpYW5SdWJsZTsKICAgIGV4cG9ydHMuUmVjZWlwdFN3aXNzRnJhbmMgPSBSZWNlaXB0U3dpc3NGcmFuYzsKICAgIGV4cG9ydHMuUmVjZWlwdFRleHQgPSBSZWNlaXB0VGV4dDsKICAgIGV4cG9ydHMuUmVjZWlwdFR1cmtpc2hMaXJhID0gUmVjZWlwdFR1cmtpc2hMaXJhOwogICAgZXhwb3J0cy5SZWN0YW5nbGVDaXJjbGUgPSBSZWN0YW5nbGVDaXJjbGU7CiAgICBleHBvcnRzLlJlY3RhbmdsZUVsbGlwc2lzID0gUmVjdGFuZ2xlRWxsaXBzaXM7CiAgICBleHBvcnRzLlJlY3RhbmdsZUdvZ2dsZXMgPSBSZWN0YW5nbGVHb2dnbGVzOwogICAgZXhwb3J0cy5SZWN0YW5nbGVIb3Jpem9udGFsID0gUmVjdGFuZ2xlSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuUmVjdGFuZ2xlVmVydGljYWwgPSBSZWN0YW5nbGVWZXJ0aWNhbDsKICAgIGV4cG9ydHMuUmVjeWNsZSA9IFJlY3ljbGU7CiAgICBleHBvcnRzLlJlZG8gPSBSZWRvOwogICAgZXhwb3J0cy5SZWRvMiA9IFJlZG8yOwogICAgZXhwb3J0cy5SZWRvRG90ID0gUmVkb0RvdDsKICAgIGV4cG9ydHMuUmVmcmVzaENjdyA9IFJlZnJlc2hDY3c7CiAgICBleHBvcnRzLlJlZnJlc2hDY3dEb3QgPSBSZWZyZXNoQ2N3RG90OwogICAgZXhwb3J0cy5SZWZyZXNoQ3cgPSBSZWZyZXNoQ3c7CiAgICBleHBvcnRzLlJlZnJlc2hDd09mZiA9IFJlZnJlc2hDd09mZjsKICAgIGV4cG9ydHMuUmVmcmlnZXJhdG9yID0gUmVmcmlnZXJhdG9yOwogICAgZXhwb3J0cy5SZWdleCA9IFJlZ2V4OwogICAgZXhwb3J0cy5SZW1vdmVGb3JtYXR0aW5nID0gUmVtb3ZlRm9ybWF0dGluZzsKICAgIGV4cG9ydHMuUmVwZWF0ID0gUmVwZWF0OwogICAgZXhwb3J0cy5SZXBlYXQxID0gUmVwZWF0MTsKICAgIGV4cG9ydHMuUmVwZWF0MiA9IFJlcGVhdDI7CiAgICBleHBvcnRzLlJlcGxhY2UgPSBSZXBsYWNlOwogICAgZXhwb3J0cy5SZXBsYWNlQWxsID0gUmVwbGFjZUFsbDsKICAgIGV4cG9ydHMuUmVwbHkgPSBSZXBseTsKICAgIGV4cG9ydHMuUmVwbHlBbGwgPSBSZXBseUFsbDsKICAgIGV4cG9ydHMuUmV3aW5kID0gUmV3aW5kOwogICAgZXhwb3J0cy5SaWJib24gPSBSaWJib247CiAgICBleHBvcnRzLlJvY2tldCA9IFJvY2tldDsKICAgIGV4cG9ydHMuUm9ja2luZ0NoYWlyID0gUm9ja2luZ0NoYWlyOwogICAgZXhwb3J0cy5Sb2xsZXJDb2FzdGVyID0gUm9sbGVyQ29hc3RlcjsKICAgIGV4cG9ydHMuUm9zZSA9IFJvc2U7CiAgICBleHBvcnRzLlJvdGF0ZTNEID0gUm90YXRlM2Q7CiAgICBleHBvcnRzLlJvdGF0ZTNkID0gUm90YXRlM2Q7CiAgICBleHBvcnRzLlJvdGF0ZUNjdyA9IFJvdGF0ZUNjdzsKICAgIGV4cG9ydHMuUm90YXRlQ2N3S2V5ID0gUm90YXRlQ2N3S2V5OwogICAgZXhwb3J0cy5Sb3RhdGVDY3dTcXVhcmUgPSBSb3RhdGVDY3dTcXVhcmU7CiAgICBleHBvcnRzLlJvdGF0ZUN3ID0gUm90YXRlQ3c7CiAgICBleHBvcnRzLlJvdGF0ZUN3U3F1YXJlID0gUm90YXRlQ3dTcXVhcmU7CiAgICBleHBvcnRzLlJvdXRlID0gUm91dGU7CiAgICBleHBvcnRzLlJvdXRlT2ZmID0gUm91dGVPZmY7CiAgICBleHBvcnRzLlJvdXRlciA9IFJvdXRlcjsKICAgIGV4cG9ydHMuUm93cyA9IFJvd3MyOwogICAgZXhwb3J0cy5Sb3dzMiA9IFJvd3MyOwogICAgZXhwb3J0cy5Sb3dzMyA9IFJvd3MzOwogICAgZXhwb3J0cy5Sb3dzNCA9IFJvd3M0OwogICAgZXhwb3J0cy5Sc3MgPSBSc3M7CiAgICBleHBvcnRzLlJ1bGVyID0gUnVsZXI7CiAgICBleHBvcnRzLlJ1bGVyRGltZW5zaW9uTGluZSA9IFJ1bGVyRGltZW5zaW9uTGluZTsKICAgIGV4cG9ydHMuUnVzc2lhblJ1YmxlID0gUnVzc2lhblJ1YmxlOwogICAgZXhwb3J0cy5TYWlsYm9hdCA9IFNhaWxib2F0OwogICAgZXhwb3J0cy5TYWxhZCA9IFNhbGFkOwogICAgZXhwb3J0cy5TYW5kd2ljaCA9IFNhbmR3aWNoOwogICAgZXhwb3J0cy5TYXRlbGxpdGUgPSBTYXRlbGxpdGU7CiAgICBleHBvcnRzLlNhdGVsbGl0ZURpc2ggPSBTYXRlbGxpdGVEaXNoOwogICAgZXhwb3J0cy5TYXVkaVJpeWFsID0gU2F1ZGlSaXlhbDsKICAgIGV4cG9ydHMuU2F2ZSA9IFNhdmU7CiAgICBleHBvcnRzLlNhdmVBbGwgPSBTYXZlQWxsOwogICAgZXhwb3J0cy5TYXZlT2ZmID0gU2F2ZU9mZjsKICAgIGV4cG9ydHMuU2NhbGUgPSBTY2FsZTsKICAgIGV4cG9ydHMuU2NhbGUzRCA9IFNjYWxlM2Q7CiAgICBleHBvcnRzLlNjYWxlM2QgPSBTY2FsZTNkOwogICAgZXhwb3J0cy5TY2FsaW5nID0gU2NhbGluZzsKICAgIGV4cG9ydHMuU2NhbiA9IFNjYW47CiAgICBleHBvcnRzLlNjYW5CYXJjb2RlID0gU2NhbkJhcmNvZGU7CiAgICBleHBvcnRzLlNjYW5FeWUgPSBTY2FuRXllOwogICAgZXhwb3J0cy5TY2FuRmFjZSA9IFNjYW5GYWNlOwogICAgZXhwb3J0cy5TY2FuSGVhcnQgPSBTY2FuSGVhcnQ7CiAgICBleHBvcnRzLlNjYW5MaW5lID0gU2NhbkxpbmU7CiAgICBleHBvcnRzLlNjYW5RckNvZGUgPSBTY2FuUXJDb2RlOwogICAgZXhwb3J0cy5TY2FuU2VhcmNoID0gU2NhblNlYXJjaDsKICAgIGV4cG9ydHMuU2NhblRleHQgPSBTY2FuVGV4dDsKICAgIGV4cG9ydHMuU2NhdHRlckNoYXJ0ID0gQ2hhcnRTY2F0dGVyOwogICAgZXhwb3J0cy5TY2hvb2wgPSBTY2hvb2w7CiAgICBleHBvcnRzLlNjaG9vbDIgPSBVbml2ZXJzaXR5OwogICAgZXhwb3J0cy5TY2lzc29ycyA9IFNjaXNzb3JzOwogICAgZXhwb3J0cy5TY2lzc29yc0xpbmVEYXNoZWQgPSBTY2lzc29yc0xpbmVEYXNoZWQ7CiAgICBleHBvcnRzLlNjaXNzb3JzU3F1YXJlID0gU3F1YXJlU2Npc3NvcnM7CiAgICBleHBvcnRzLlNjaXNzb3JzU3F1YXJlRGFzaGVkQm90dG9tID0gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnM7CiAgICBleHBvcnRzLlNjb290ZXIgPSBTY29vdGVyOwogICAgZXhwb3J0cy5TY3JlZW5TaGFyZSA9IFNjcmVlblNoYXJlOwogICAgZXhwb3J0cy5TY3JlZW5TaGFyZU9mZiA9IFNjcmVlblNoYXJlT2ZmOwogICAgZXhwb3J0cy5TY3JvbGwgPSBTY3JvbGw7CiAgICBleHBvcnRzLlNjcm9sbFRleHQgPSBTY3JvbGxUZXh0OwogICAgZXhwb3J0cy5TZWFyY2ggPSBTZWFyY2g7CiAgICBleHBvcnRzLlNlYXJjaEFsZXJ0ID0gU2VhcmNoQWxlcnQ7CiAgICBleHBvcnRzLlNlYXJjaENoZWNrID0gU2VhcmNoQ2hlY2s7CiAgICBleHBvcnRzLlNlYXJjaENvZGUgPSBTZWFyY2hDb2RlOwogICAgZXhwb3J0cy5TZWFyY2hTbGFzaCA9IFNlYXJjaFNsYXNoOwogICAgZXhwb3J0cy5TZWFyY2hYID0gU2VhcmNoWDsKICAgIGV4cG9ydHMuU2VjdGlvbiA9IFNlY3Rpb247CiAgICBleHBvcnRzLlNlbmQgPSBTZW5kOwogICAgZXhwb3J0cy5TZW5kSG9yaXpvbmFsID0gU2VuZEhvcml6b250YWw7CiAgICBleHBvcnRzLlNlbmRIb3Jpem9udGFsID0gU2VuZEhvcml6b250YWw7CiAgICBleHBvcnRzLlNlbmRUb0JhY2sgPSBTZW5kVG9CYWNrOwogICAgZXhwb3J0cy5TZXBhcmF0b3JIb3Jpem9udGFsID0gU2VwYXJhdG9ySG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU2VwYXJhdG9yVmVydGljYWwgPSBTZXBhcmF0b3JWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU2VydmVyID0gU2VydmVyOwogICAgZXhwb3J0cy5TZXJ2ZXJDb2cgPSBTZXJ2ZXJDb2c7CiAgICBleHBvcnRzLlNlcnZlckNyYXNoID0gU2VydmVyQ3Jhc2g7CiAgICBleHBvcnRzLlNlcnZlck9mZiA9IFNlcnZlck9mZjsKICAgIGV4cG9ydHMuU2V0dGluZ3MgPSBTZXR0aW5nczsKICAgIGV4cG9ydHMuU2V0dGluZ3MyID0gU2V0dGluZ3MyOwogICAgZXhwb3J0cy5TaGFwZXMgPSBTaGFwZXM7CiAgICBleHBvcnRzLlNoYXJlID0gU2hhcmU7CiAgICBleHBvcnRzLlNoYXJlMiA9IFNoYXJlMjsKICAgIGV4cG9ydHMuU2hlZXQgPSBTaGVldDsKICAgIGV4cG9ydHMuU2hlbGwgPSBTaGVsbDsKICAgIGV4cG9ydHMuU2hpZWxkID0gU2hpZWxkOwogICAgZXhwb3J0cy5TaGllbGRBbGVydCA9IFNoaWVsZEFsZXJ0OwogICAgZXhwb3J0cy5TaGllbGRCYW4gPSBTaGllbGRCYW47CiAgICBleHBvcnRzLlNoaWVsZENoZWNrID0gU2hpZWxkQ2hlY2s7CiAgICBleHBvcnRzLlNoaWVsZENsb3NlID0gU2hpZWxkWDsKICAgIGV4cG9ydHMuU2hpZWxkRWxsaXBzaXMgPSBTaGllbGRFbGxpcHNpczsKICAgIGV4cG9ydHMuU2hpZWxkSGFsZiA9IFNoaWVsZEhhbGY7CiAgICBleHBvcnRzLlNoaWVsZE1pbnVzID0gU2hpZWxkTWludXM7CiAgICBleHBvcnRzLlNoaWVsZE9mZiA9IFNoaWVsZE9mZjsKICAgIGV4cG9ydHMuU2hpZWxkUGx1cyA9IFNoaWVsZFBsdXM7CiAgICBleHBvcnRzLlNoaWVsZFF1ZXN0aW9uID0gU2hpZWxkUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5TaGllbGRRdWVzdGlvbk1hcmsgPSBTaGllbGRRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLlNoaWVsZFVzZXIgPSBTaGllbGRVc2VyOwogICAgZXhwb3J0cy5TaGllbGRYID0gU2hpZWxkWDsKICAgIGV4cG9ydHMuU2hpcCA9IFNoaXA7CiAgICBleHBvcnRzLlNoaXBXaGVlbCA9IFNoaXBXaGVlbDsKICAgIGV4cG9ydHMuU2hpcnQgPSBTaGlydDsKICAgIGV4cG9ydHMuU2hvcHBpbmdCYWcgPSBTaG9wcGluZ0JhZzsKICAgIGV4cG9ydHMuU2hvcHBpbmdCYXNrZXQgPSBTaG9wcGluZ0Jhc2tldDsKICAgIGV4cG9ydHMuU2hvcHBpbmdDYXJ0ID0gU2hvcHBpbmdDYXJ0OwogICAgZXhwb3J0cy5TaG92ZWwgPSBTaG92ZWw7CiAgICBleHBvcnRzLlNob3dlckhlYWQgPSBTaG93ZXJIZWFkOwogICAgZXhwb3J0cy5TaHJlZGRlciA9IFNocmVkZGVyOwogICAgZXhwb3J0cy5TaHJpbXAgPSBTaHJpbXA7CiAgICBleHBvcnRzLlNocmluayA9IFNocmluazsKICAgIGV4cG9ydHMuU2hydWIgPSBTaHJ1YjsKICAgIGV4cG9ydHMuU2h1ZmZsZSA9IFNodWZmbGU7CiAgICBleHBvcnRzLlNpZGViYXIgPSBQYW5lbExlZnQ7CiAgICBleHBvcnRzLlNpZGViYXJDbG9zZSA9IFBhbmVsTGVmdENsb3NlOwogICAgZXhwb3J0cy5TaWRlYmFyT3BlbiA9IFBhbmVsTGVmdE9wZW47CiAgICBleHBvcnRzLlNpZ21hID0gU2lnbWE7CiAgICBleHBvcnRzLlNpZ21hU3F1YXJlID0gU3F1YXJlU2lnbWE7CiAgICBleHBvcnRzLlNpZ25hbCA9IFNpZ25hbDsKICAgIGV4cG9ydHMuU2lnbmFsSGlnaCA9IFNpZ25hbEhpZ2g7CiAgICBleHBvcnRzLlNpZ25hbExvdyA9IFNpZ25hbExvdzsKICAgIGV4cG9ydHMuU2lnbmFsTWVkaXVtID0gU2lnbmFsTWVkaXVtOwogICAgZXhwb3J0cy5TaWduYWxaZXJvID0gU2lnbmFsWmVybzsKICAgIGV4cG9ydHMuU2lnbmF0dXJlID0gU2lnbmF0dXJlOwogICAgZXhwb3J0cy5TaWducG9zdCA9IFNpZ25wb3N0OwogICAgZXhwb3J0cy5TaWducG9zdEJpZyA9IFNpZ25wb3N0QmlnOwogICAgZXhwb3J0cy5TaXJlbiA9IFNpcmVuOwogICAgZXhwb3J0cy5Ta2lwQmFjayA9IFNraXBCYWNrOwogICAgZXhwb3J0cy5Ta2lwRm9yd2FyZCA9IFNraXBGb3J3YXJkOwogICAgZXhwb3J0cy5Ta3VsbCA9IFNrdWxsOwogICAgZXhwb3J0cy5TbGFjayA9IFNsYWNrOwogICAgZXhwb3J0cy5TbGFzaCA9IFNsYXNoOwogICAgZXhwb3J0cy5TbGFzaFNxdWFyZSA9IFNxdWFyZVNsYXNoOwogICAgZXhwb3J0cy5TbGljZSA9IFNsaWNlOwogICAgZXhwb3J0cy5TbGlkZXJzID0gU2xpZGVyc1ZlcnRpY2FsOwogICAgZXhwb3J0cy5TbGlkZXJzSG9yaXpvbnRhbCA9IFNsaWRlcnNIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TbGlkZXJzVmVydGljYWwgPSBTbGlkZXJzVmVydGljYWw7CiAgICBleHBvcnRzLlNtYXJ0cGhvbmUgPSBTbWFydHBob25lOwogICAgZXhwb3J0cy5TbWFydHBob25lQ2hhcmdpbmcgPSBTbWFydHBob25lQ2hhcmdpbmc7CiAgICBleHBvcnRzLlNtYXJ0cGhvbmVOZmMgPSBTbWFydHBob25lTmZjOwogICAgZXhwb3J0cy5TbWlsZSA9IFNtaWxlOwogICAgZXhwb3J0cy5TbWlsZVBsdXMgPSBTbWlsZVBsdXM7CiAgICBleHBvcnRzLlNuYWlsID0gU25haWw7CiAgICBleHBvcnRzLlNub3dmbGFrZSA9IFNub3dmbGFrZTsKICAgIGV4cG9ydHMuU29hcERpc3BlbnNlckRyb3BsZXQgPSBTb2FwRGlzcGVuc2VyRHJvcGxldDsKICAgIGV4cG9ydHMuU29mYSA9IFNvZmE7CiAgICBleHBvcnRzLlNvbGFyUGFuZWwgPSBTb2xhclBhbmVsOwogICAgZXhwb3J0cy5Tb3J0QXNjID0gQXJyb3dVcE5hcnJvd1dpZGU7CiAgICBleHBvcnRzLlNvcnREZXNjID0gQXJyb3dEb3duV2lkZU5hcnJvdzsKICAgIGV4cG9ydHMuU291cCA9IFNvdXA7CiAgICBleHBvcnRzLlNwYWNlID0gU3BhY2U7CiAgICBleHBvcnRzLlNwYWRlID0gU3BhZGU7CiAgICBleHBvcnRzLlNwYXJrbGUgPSBTcGFya2xlOwogICAgZXhwb3J0cy5TcGFya2xlcyA9IFNwYXJrbGVzOwogICAgZXhwb3J0cy5TcGVha2VyID0gU3BlYWtlcjsKICAgIGV4cG9ydHMuU3BlZWNoID0gU3BlZWNoOwogICAgZXhwb3J0cy5TcGVsbENoZWNrID0gU3BlbGxDaGVjazsKICAgIGV4cG9ydHMuU3BlbGxDaGVjazIgPSBTcGVsbENoZWNrMjsKICAgIGV4cG9ydHMuU3BsaW5lID0gU3BsaW5lOwogICAgZXhwb3J0cy5TcGxpbmVQb2ludGVyID0gU3BsaW5lUG9pbnRlcjsKICAgIGV4cG9ydHMuU3BsaXQgPSBTcGxpdDsKICAgIGV4cG9ydHMuU3BsaXRTcXVhcmVIb3Jpem9udGFsID0gU3F1YXJlU3BsaXRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TcGxpdFNxdWFyZVZlcnRpY2FsID0gU3F1YXJlU3BsaXRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU3Bvb2wgPSBTcG9vbDsKICAgIGV4cG9ydHMuU3BvdGxpZ2h0ID0gU3BvdGxpZ2h0OwogICAgZXhwb3J0cy5TcHJheUNhbiA9IFNwcmF5Q2FuOwogICAgZXhwb3J0cy5TcHJvdXQgPSBTcHJvdXQ7CiAgICBleHBvcnRzLlNxdWFyZSA9IFNxdWFyZTsKICAgIGV4cG9ydHMuU3F1YXJlQWN0aXZpdHkgPSBTcXVhcmVBY3Rpdml0eTsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dEb3duID0gU3F1YXJlQXJyb3dEb3duOwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd0Rvd25MZWZ0ID0gU3F1YXJlQXJyb3dEb3duTGVmdDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dEb3duUmlnaHQgPSBTcXVhcmVBcnJvd0Rvd25SaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dMZWZ0ID0gU3F1YXJlQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd091dERvd25MZWZ0ID0gU3F1YXJlQXJyb3dPdXREb3duTGVmdDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dPdXREb3duUmlnaHQgPSBTcXVhcmVBcnJvd091dERvd25SaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dPdXRVcExlZnQgPSBTcXVhcmVBcnJvd091dFVwTGVmdDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gU3F1YXJlQXJyb3dPdXRVcFJpZ2h0OwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd1JpZ2h0ID0gU3F1YXJlQXJyb3dSaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dVcCA9IFNxdWFyZUFycm93VXA7CiAgICBleHBvcnRzLlNxdWFyZUFycm93VXBMZWZ0ID0gU3F1YXJlQXJyb3dVcExlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93VXBSaWdodCA9IFNxdWFyZUFycm93VXBSaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXN0ZXJpc2sgPSBTcXVhcmVBc3RlcmlzazsKICAgIGV4cG9ydHMuU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMgPSBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczsKICAgIGV4cG9ydHMuU3F1YXJlQ2hhcnRHYW50dCA9IFNxdWFyZUNoYXJ0R2FudHQ7CiAgICBleHBvcnRzLlNxdWFyZUNoZWNrID0gU3F1YXJlQ2hlY2s7CiAgICBleHBvcnRzLlNxdWFyZUNoZWNrQmlnID0gU3F1YXJlQ2hlY2tCaWc7CiAgICBleHBvcnRzLlNxdWFyZUNoZXZyb25Eb3duID0gU3F1YXJlQ2hldnJvbkRvd247CiAgICBleHBvcnRzLlNxdWFyZUNoZXZyb25MZWZ0ID0gU3F1YXJlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUNoZXZyb25SaWdodCA9IFNxdWFyZUNoZXZyb25SaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQ2hldnJvblVwID0gU3F1YXJlQ2hldnJvblVwOwogICAgZXhwb3J0cy5TcXVhcmVDb2RlID0gU3F1YXJlQ29kZTsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkID0gU3F1YXJlRGFzaGVkOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRCb3R0b20gPSBTcXVhcmVEYXNoZWRCb3R0b207CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZEJvdHRvbUNvZGUgPSBTcXVhcmVEYXNoZWRCb3R0b21Db2RlOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRLYW5iYW4gPSBTcXVhcmVEYXNoZWRLYW5iYW47CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciA9IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkVG9wU29saWQgPSBTcXVhcmVEYXNoZWRUb3BTb2xpZDsKICAgIGV4cG9ydHMuU3F1YXJlRGl2aWRlID0gU3F1YXJlRGl2aWRlOwogICAgZXhwb3J0cy5TcXVhcmVEb3QgPSBTcXVhcmVEb3Q7CiAgICBleHBvcnRzLlNxdWFyZUVxdWFsID0gU3F1YXJlRXF1YWw7CiAgICBleHBvcnRzLlNxdWFyZUZ1bmN0aW9uID0gU3F1YXJlRnVuY3Rpb247CiAgICBleHBvcnRzLlNxdWFyZUdhbnR0Q2hhcnQgPSBTcXVhcmVDaGFydEdhbnR0OwogICAgZXhwb3J0cy5TcXVhcmVLYW5iYW4gPSBTcXVhcmVLYW5iYW47CiAgICBleHBvcnRzLlNxdWFyZUxpYnJhcnkgPSBTcXVhcmVMaWJyYXJ5OwogICAgZXhwb3J0cy5TcXVhcmVNID0gU3F1YXJlTTsKICAgIGV4cG9ydHMuU3F1YXJlTWVudSA9IFNxdWFyZU1lbnU7CiAgICBleHBvcnRzLlNxdWFyZU1pbnVzID0gU3F1YXJlTWludXM7CiAgICBleHBvcnRzLlNxdWFyZU1vdXNlUG9pbnRlciA9IFNxdWFyZU1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuU3F1YXJlUGFya2luZyA9IFNxdWFyZVBhcmtpbmc7CiAgICBleHBvcnRzLlNxdWFyZVBhcmtpbmdPZmYgPSBTcXVhcmVQYXJraW5nT2ZmOwogICAgZXhwb3J0cy5TcXVhcmVQYXVzZSA9IFNxdWFyZVBhdXNlOwogICAgZXhwb3J0cy5TcXVhcmVQZW4gPSBTcXVhcmVQZW47CiAgICBleHBvcnRzLlNxdWFyZVBlcmNlbnQgPSBTcXVhcmVQZXJjZW50OwogICAgZXhwb3J0cy5TcXVhcmVQaSA9IFNxdWFyZVBpOwogICAgZXhwb3J0cy5TcXVhcmVQaWxjcm93ID0gU3F1YXJlUGlsY3JvdzsKICAgIGV4cG9ydHMuU3F1YXJlUGxheSA9IFNxdWFyZVBsYXk7CiAgICBleHBvcnRzLlNxdWFyZVBsdXMgPSBTcXVhcmVQbHVzOwogICAgZXhwb3J0cy5TcXVhcmVQb3dlciA9IFNxdWFyZVBvd2VyOwogICAgZXhwb3J0cy5TcXVhcmVSYWRpY2FsID0gU3F1YXJlUmFkaWNhbDsKICAgIGV4cG9ydHMuU3F1YXJlUm91bmRDb3JuZXIgPSBTcXVhcmVSb3VuZENvcm5lcjsKICAgIGV4cG9ydHMuU3F1YXJlU2Npc3NvcnMgPSBTcXVhcmVTY2lzc29yczsKICAgIGV4cG9ydHMuU3F1YXJlU2lnbWEgPSBTcXVhcmVTaWdtYTsKICAgIGV4cG9ydHMuU3F1YXJlU2xhc2ggPSBTcXVhcmVTbGFzaDsKICAgIGV4cG9ydHMuU3F1YXJlU3BsaXRIb3Jpem9udGFsID0gU3F1YXJlU3BsaXRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TcXVhcmVTcGxpdFZlcnRpY2FsID0gU3F1YXJlU3BsaXRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU3F1YXJlU3F1YXJlID0gU3F1YXJlU3F1YXJlOwogICAgZXhwb3J0cy5TcXVhcmVTdGFjayA9IFNxdWFyZVN0YWNrOwogICAgZXhwb3J0cy5TcXVhcmVTdGFyID0gU3F1YXJlU3RhcjsKICAgIGV4cG9ydHMuU3F1YXJlU3RvcCA9IFNxdWFyZVN0b3A7CiAgICBleHBvcnRzLlNxdWFyZVRlcm1pbmFsID0gU3F1YXJlVGVybWluYWw7CiAgICBleHBvcnRzLlNxdWFyZVVzZXIgPSBTcXVhcmVVc2VyOwogICAgZXhwb3J0cy5TcXVhcmVVc2VyUm91bmQgPSBTcXVhcmVVc2VyUm91bmQ7CiAgICBleHBvcnRzLlNxdWFyZVggPSBTcXVhcmVYOwogICAgZXhwb3J0cy5TcXVhcmVzRXhjbHVkZSA9IFNxdWFyZXNFeGNsdWRlOwogICAgZXhwb3J0cy5TcXVhcmVzSW50ZXJzZWN0ID0gU3F1YXJlc0ludGVyc2VjdDsKICAgIGV4cG9ydHMuU3F1YXJlc1N1YnRyYWN0ID0gU3F1YXJlc1N1YnRyYWN0OwogICAgZXhwb3J0cy5TcXVhcmVzVW5pdGUgPSBTcXVhcmVzVW5pdGU7CiAgICBleHBvcnRzLlNxdWlyY2xlID0gU3F1aXJjbGU7CiAgICBleHBvcnRzLlNxdWlyY2xlRGFzaGVkID0gU3F1aXJjbGVEYXNoZWQ7CiAgICBleHBvcnRzLlNxdWlycmVsID0gU3F1aXJyZWw7CiAgICBleHBvcnRzLlN0YW1wID0gU3RhbXA7CiAgICBleHBvcnRzLlN0YXIgPSBTdGFyOwogICAgZXhwb3J0cy5TdGFySGFsZiA9IFN0YXJIYWxmOwogICAgZXhwb3J0cy5TdGFyT2ZmID0gU3Rhck9mZjsKICAgIGV4cG9ydHMuU3RhcnMgPSBTcGFya2xlczsKICAgIGV4cG9ydHMuU3RlcEJhY2sgPSBTdGVwQmFjazsKICAgIGV4cG9ydHMuU3RlcEZvcndhcmQgPSBTdGVwRm9yd2FyZDsKICAgIGV4cG9ydHMuU3RldGhvc2NvcGUgPSBTdGV0aG9zY29wZTsKICAgIGV4cG9ydHMuU3RpY2tlciA9IFN0aWNrZXI7CiAgICBleHBvcnRzLlN0aWNreU5vdGUgPSBTdGlja3lOb3RlOwogICAgZXhwb3J0cy5TdG9uZSA9IFN0b25lOwogICAgZXhwb3J0cy5TdG9wQ2lyY2xlID0gQ2lyY2xlU3RvcDsKICAgIGV4cG9ydHMuU3RvcmUgPSBTdG9yZTsKICAgIGV4cG9ydHMuU3RyZXRjaEhvcml6b250YWwgPSBTdHJldGNoSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU3RyZXRjaFZlcnRpY2FsID0gU3RyZXRjaFZlcnRpY2FsOwogICAgZXhwb3J0cy5TdHJpa2V0aHJvdWdoID0gU3RyaWtldGhyb3VnaDsKICAgIGV4cG9ydHMuU3Vic2NyaXB0ID0gU3Vic2NyaXB0OwogICAgZXhwb3J0cy5TdWJ0aXRsZXMgPSBDYXB0aW9uczsKICAgIGV4cG9ydHMuU3VuID0gU3VuOwogICAgZXhwb3J0cy5TdW5EaW0gPSBTdW5EaW07CiAgICBleHBvcnRzLlN1bk1lZGl1bSA9IFN1bk1lZGl1bTsKICAgIGV4cG9ydHMuU3VuTW9vbiA9IFN1bk1vb247CiAgICBleHBvcnRzLlN1blNub3cgPSBTdW5Tbm93OwogICAgZXhwb3J0cy5TdW5yaXNlID0gU3VucmlzZTsKICAgIGV4cG9ydHMuU3Vuc2V0ID0gU3Vuc2V0OwogICAgZXhwb3J0cy5TdXBlcnNjcmlwdCA9IFN1cGVyc2NyaXB0OwogICAgZXhwb3J0cy5Td2F0Y2hCb29rID0gU3dhdGNoQm9vazsKICAgIGV4cG9ydHMuU3dpc3NGcmFuYyA9IFN3aXNzRnJhbmM7CiAgICBleHBvcnRzLlN3aXRjaENhbWVyYSA9IFN3aXRjaENhbWVyYTsKICAgIGV4cG9ydHMuU3dvcmQgPSBTd29yZDsKICAgIGV4cG9ydHMuU3dvcmRzID0gU3dvcmRzOwogICAgZXhwb3J0cy5TeXJpbmdlID0gU3lyaW5nZTsKICAgIGV4cG9ydHMuVGFibGUgPSBUYWJsZTsKICAgIGV4cG9ydHMuVGFibGUyID0gVGFibGUyOwogICAgZXhwb3J0cy5UYWJsZUNlbGxzTWVyZ2UgPSBUYWJsZUNlbGxzTWVyZ2U7CiAgICBleHBvcnRzLlRhYmxlQ2VsbHNTcGxpdCA9IFRhYmxlQ2VsbHNTcGxpdDsKICAgIGV4cG9ydHMuVGFibGVDb2x1bW5zU3BsaXQgPSBUYWJsZUNvbHVtbnNTcGxpdDsKICAgIGV4cG9ydHMuVGFibGVDb25maWcgPSBDb2x1bW5zM0NvZzsKICAgIGV4cG9ydHMuVGFibGVPZkNvbnRlbnRzID0gVGFibGVPZkNvbnRlbnRzOwogICAgZXhwb3J0cy5UYWJsZVByb3BlcnRpZXMgPSBUYWJsZVByb3BlcnRpZXM7CiAgICBleHBvcnRzLlRhYmxlUm93c1NwbGl0ID0gVGFibGVSb3dzU3BsaXQ7CiAgICBleHBvcnRzLlRhYmxldCA9IFRhYmxldDsKICAgIGV4cG9ydHMuVGFibGV0U21hcnRwaG9uZSA9IFRhYmxldFNtYXJ0cGhvbmU7CiAgICBleHBvcnRzLlRhYmxldHMgPSBUYWJsZXRzOwogICAgZXhwb3J0cy5UYWcgPSBUYWcyOwogICAgZXhwb3J0cy5UYWdzID0gVGFnczsKICAgIGV4cG9ydHMuVGFsbHkxID0gVGFsbHkxOwogICAgZXhwb3J0cy5UYWxseTIgPSBUYWxseTI7CiAgICBleHBvcnRzLlRhbGx5MyA9IFRhbGx5MzsKICAgIGV4cG9ydHMuVGFsbHk0ID0gVGFsbHk0OwogICAgZXhwb3J0cy5UYWxseTUgPSBUYWxseTU7CiAgICBleHBvcnRzLlRhbmdlbnQgPSBUYW5nZW50OwogICAgZXhwb3J0cy5UYXJnZXQgPSBUYXJnZXQ7CiAgICBleHBvcnRzLlRlbGVzY29wZSA9IFRlbGVzY29wZTsKICAgIGV4cG9ydHMuVGVudCA9IFRlbnQ7CiAgICBleHBvcnRzLlRlbnRUcmVlID0gVGVudFRyZWU7CiAgICBleHBvcnRzLlRlcm1pbmFsID0gVGVybWluYWw7CiAgICBleHBvcnRzLlRlcm1pbmFsU3F1YXJlID0gU3F1YXJlVGVybWluYWw7CiAgICBleHBvcnRzLlRlc3RUdWJlID0gVGVzdFR1YmU7CiAgICBleHBvcnRzLlRlc3RUdWJlMiA9IFRlc3RUdWJlRGlhZ29uYWw7CiAgICBleHBvcnRzLlRlc3RUdWJlRGlhZ29uYWwgPSBUZXN0VHViZURpYWdvbmFsOwogICAgZXhwb3J0cy5UZXN0VHViZXMgPSBUZXN0VHViZXM7CiAgICBleHBvcnRzLlRleHQgPSBUZXh0QWxpZ25TdGFydDsKICAgIGV4cG9ydHMuVGV4dEFsaWduQ2VudGVyID0gVGV4dEFsaWduQ2VudGVyOwogICAgZXhwb3J0cy5UZXh0QWxpZ25FbmQgPSBUZXh0QWxpZ25FbmQ7CiAgICBleHBvcnRzLlRleHRBbGlnbkp1c3RpZnkgPSBUZXh0QWxpZ25KdXN0aWZ5OwogICAgZXhwb3J0cy5UZXh0QWxpZ25TdGFydCA9IFRleHRBbGlnblN0YXJ0OwogICAgZXhwb3J0cy5UZXh0Q3Vyc29yID0gVGV4dEN1cnNvcjsKICAgIGV4cG9ydHMuVGV4dEN1cnNvcklucHV0ID0gVGV4dEN1cnNvcklucHV0OwogICAgZXhwb3J0cy5UZXh0SW5pdGlhbCA9IFRleHRJbml0aWFsOwogICAgZXhwb3J0cy5UZXh0UXVvdGUgPSBUZXh0UXVvdGU7CiAgICBleHBvcnRzLlRleHRTZWFyY2ggPSBUZXh0U2VhcmNoOwogICAgZXhwb3J0cy5UZXh0U2VsZWN0ID0gVGV4dFNlbGVjdDsKICAgIGV4cG9ydHMuVGV4dFNlbGVjdGlvbiA9IFRleHRTZWxlY3Q7CiAgICBleHBvcnRzLlRleHRXcmFwID0gVGV4dFdyYXA7CiAgICBleHBvcnRzLlRoZWF0ZXIgPSBUaGVhdGVyOwogICAgZXhwb3J0cy5UaGVybW9tZXRlciA9IFRoZXJtb21ldGVyOwogICAgZXhwb3J0cy5UaGVybW9tZXRlclNub3dmbGFrZSA9IFRoZXJtb21ldGVyU25vd2ZsYWtlOwogICAgZXhwb3J0cy5UaGVybW9tZXRlclN1biA9IFRoZXJtb21ldGVyU3VuOwogICAgZXhwb3J0cy5UaHVtYnNEb3duID0gVGh1bWJzRG93bjsKICAgIGV4cG9ydHMuVGh1bWJzVXAgPSBUaHVtYnNVcDsKICAgIGV4cG9ydHMuVGlja2V0ID0gVGlja2V0OwogICAgZXhwb3J0cy5UaWNrZXRDaGVjayA9IFRpY2tldENoZWNrOwogICAgZXhwb3J0cy5UaWNrZXRNaW51cyA9IFRpY2tldE1pbnVzOwogICAgZXhwb3J0cy5UaWNrZXRQZXJjZW50ID0gVGlja2V0UGVyY2VudDsKICAgIGV4cG9ydHMuVGlja2V0UGx1cyA9IFRpY2tldFBsdXM7CiAgICBleHBvcnRzLlRpY2tldFNsYXNoID0gVGlja2V0U2xhc2g7CiAgICBleHBvcnRzLlRpY2tldFggPSBUaWNrZXRYOwogICAgZXhwb3J0cy5UaWNrZXRzID0gVGlja2V0czsKICAgIGV4cG9ydHMuVGlja2V0c1BsYW5lID0gVGlja2V0c1BsYW5lOwogICAgZXhwb3J0cy5UaW1lciA9IFRpbWVyMjsKICAgIGV4cG9ydHMuVGltZXJPZmYgPSBUaW1lck9mZjsKICAgIGV4cG9ydHMuVGltZXJSZXNldCA9IFRpbWVyUmVzZXQ7CiAgICBleHBvcnRzLlRvZ2dsZUxlZnQgPSBUb2dnbGVMZWZ0OwogICAgZXhwb3J0cy5Ub2dnbGVSaWdodCA9IFRvZ2dsZVJpZ2h0OwogICAgZXhwb3J0cy5Ub2lsZXQgPSBUb2lsZXQ7CiAgICBleHBvcnRzLlRvb2xDYXNlID0gVG9vbENhc2U7CiAgICBleHBvcnRzLlRvb2xib3ggPSBUb29sYm94OwogICAgZXhwb3J0cy5Ub3JuYWRvID0gVG9ybmFkbzsKICAgIGV4cG9ydHMuVG9ydXMgPSBUb3J1czsKICAgIGV4cG9ydHMuVG91Y2hwYWQgPSBUb3VjaHBhZDsKICAgIGV4cG9ydHMuVG91Y2hwYWRPZmYgPSBUb3VjaHBhZE9mZjsKICAgIGV4cG9ydHMuVG93ZXJDb250cm9sID0gVG93ZXJDb250cm9sOwogICAgZXhwb3J0cy5Ub3lCcmljayA9IFRveUJyaWNrOwogICAgZXhwb3J0cy5UcmFjdG9yID0gVHJhY3RvcjsKICAgIGV4cG9ydHMuVHJhZmZpY0NvbmUgPSBUcmFmZmljQ29uZTsKICAgIGV4cG9ydHMuVHJhaW4gPSBUcmFtRnJvbnQ7CiAgICBleHBvcnRzLlRyYWluRnJvbnQgPSBUcmFpbkZyb250OwogICAgZXhwb3J0cy5UcmFpbkZyb250VHVubmVsID0gVHJhaW5Gcm9udFR1bm5lbDsKICAgIGV4cG9ydHMuVHJhaW5UcmFjayA9IFRyYWluVHJhY2s7CiAgICBleHBvcnRzLlRyYW1Gcm9udCA9IFRyYW1Gcm9udDsKICAgIGV4cG9ydHMuVHJhbnNnZW5kZXIgPSBUcmFuc2dlbmRlcjsKICAgIGV4cG9ydHMuVHJhc2ggPSBUcmFzaDsKICAgIGV4cG9ydHMuVHJhc2gyID0gVHJhc2gyOwogICAgZXhwb3J0cy5UcmVlRGVjaWR1b3VzID0gVHJlZURlY2lkdW91czsKICAgIGV4cG9ydHMuVHJlZVBhbG0gPSBUcmVlUGFsbTsKICAgIGV4cG9ydHMuVHJlZVBpbmUgPSBUcmVlUGluZTsKICAgIGV4cG9ydHMuVHJlZXMgPSBUcmVlczsKICAgIGV4cG9ydHMuVHJlbGxvID0gVHJlbGxvOwogICAgZXhwb3J0cy5UcmVuZGluZ0Rvd24gPSBUcmVuZGluZ0Rvd247CiAgICBleHBvcnRzLlRyZW5kaW5nVXAgPSBUcmVuZGluZ1VwOwogICAgZXhwb3J0cy5UcmVuZGluZ1VwRG93biA9IFRyZW5kaW5nVXBEb3duOwogICAgZXhwb3J0cy5UcmlhbmdsZSA9IFRyaWFuZ2xlOwogICAgZXhwb3J0cy5UcmlhbmdsZUFsZXJ0ID0gVHJpYW5nbGVBbGVydDsKICAgIGV4cG9ydHMuVHJpYW5nbGVEYXNoZWQgPSBUcmlhbmdsZURhc2hlZDsKICAgIGV4cG9ydHMuVHJpYW5nbGVSaWdodCA9IFRyaWFuZ2xlUmlnaHQ7CiAgICBleHBvcnRzLlRyb3BoeSA9IFRyb3BoeTsKICAgIGV4cG9ydHMuVHJ1Y2sgPSBUcnVjazsKICAgIGV4cG9ydHMuVHJ1Y2tFbGVjdHJpYyA9IFRydWNrRWxlY3RyaWM7CiAgICBleHBvcnRzLlR1cmtpc2hMaXJhID0gVHVya2lzaExpcmE7CiAgICBleHBvcnRzLlR1cm50YWJsZSA9IFR1cm50YWJsZTsKICAgIGV4cG9ydHMuVHVydGxlID0gVHVydGxlOwogICAgZXhwb3J0cy5UdiA9IFR2OwogICAgZXhwb3J0cy5UdjIgPSBUdk1pbmltYWw7CiAgICBleHBvcnRzLlR2TWluaW1hbCA9IFR2TWluaW1hbDsKICAgIGV4cG9ydHMuVHZNaW5pbWFsUGxheSA9IFR2TWluaW1hbFBsYXk7CiAgICBleHBvcnRzLlR3aXRjaCA9IFR3aXRjaDsKICAgIGV4cG9ydHMuVHdpdHRlciA9IFR3aXR0ZXI7CiAgICBleHBvcnRzLlR5cGUgPSBUeXBlOwogICAgZXhwb3J0cy5UeXBlT3V0bGluZSA9IFR5cGVPdXRsaW5lOwogICAgZXhwb3J0cy5VbWJyZWxsYSA9IFVtYnJlbGxhOwogICAgZXhwb3J0cy5VbWJyZWxsYU9mZiA9IFVtYnJlbGxhT2ZmOwogICAgZXhwb3J0cy5VbmRlcmxpbmUgPSBVbmRlcmxpbmU7CiAgICBleHBvcnRzLlVuZG8gPSBVbmRvOwogICAgZXhwb3J0cy5VbmRvMiA9IFVuZG8yOwogICAgZXhwb3J0cy5VbmRvRG90ID0gVW5kb0RvdDsKICAgIGV4cG9ydHMuVW5mb2xkSG9yaXpvbnRhbCA9IFVuZm9sZEhvcml6b250YWw7CiAgICBleHBvcnRzLlVuZm9sZFZlcnRpY2FsID0gVW5mb2xkVmVydGljYWw7CiAgICBleHBvcnRzLlVuZ3JvdXAgPSBVbmdyb3VwOwogICAgZXhwb3J0cy5Vbml2ZXJzaXR5ID0gVW5pdmVyc2l0eTsKICAgIGV4cG9ydHMuVW5saW5rID0gVW5saW5rOwogICAgZXhwb3J0cy5VbmxpbmsyID0gVW5saW5rMjsKICAgIGV4cG9ydHMuVW5sb2NrID0gTG9ja09wZW47CiAgICBleHBvcnRzLlVubG9ja0tleWhvbGUgPSBMb2NrS2V5aG9sZU9wZW47CiAgICBleHBvcnRzLlVucGx1ZyA9IFVucGx1ZzsKICAgIGV4cG9ydHMuVXBsb2FkID0gVXBsb2FkOwogICAgZXhwb3J0cy5VcGxvYWRDbG91ZCA9IENsb3VkVXBsb2FkOwogICAgZXhwb3J0cy5Vc2IgPSBVc2I7CiAgICBleHBvcnRzLlVzZXIgPSBVc2VyOwogICAgZXhwb3J0cy5Vc2VyMiA9IFVzZXJSb3VuZDsKICAgIGV4cG9ydHMuVXNlckNoZWNrID0gVXNlckNoZWNrOwogICAgZXhwb3J0cy5Vc2VyQ2hlY2syID0gVXNlclJvdW5kQ2hlY2s7CiAgICBleHBvcnRzLlVzZXJDaXJjbGUgPSBDaXJjbGVVc2VyOwogICAgZXhwb3J0cy5Vc2VyQ2lyY2xlMiA9IENpcmNsZVVzZXJSb3VuZDsKICAgIGV4cG9ydHMuVXNlckNvZyA9IFVzZXJDb2c7CiAgICBleHBvcnRzLlVzZXJDb2cyID0gVXNlclJvdW5kQ29nOwogICAgZXhwb3J0cy5Vc2VyS2V5ID0gVXNlcktleTsKICAgIGV4cG9ydHMuVXNlckxvY2sgPSBVc2VyTG9jazsKICAgIGV4cG9ydHMuVXNlck1pbnVzID0gVXNlck1pbnVzOwogICAgZXhwb3J0cy5Vc2VyTWludXMyID0gVXNlclJvdW5kTWludXM7CiAgICBleHBvcnRzLlVzZXJQZW4gPSBVc2VyUGVuOwogICAgZXhwb3J0cy5Vc2VyUGx1cyA9IFVzZXJQbHVzOwogICAgZXhwb3J0cy5Vc2VyUGx1czIgPSBVc2VyUm91bmRQbHVzOwogICAgZXhwb3J0cy5Vc2VyUm91bmQgPSBVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJSb3VuZENoZWNrID0gVXNlclJvdW5kQ2hlY2s7CiAgICBleHBvcnRzLlVzZXJSb3VuZENvZyA9IFVzZXJSb3VuZENvZzsKICAgIGV4cG9ydHMuVXNlclJvdW5kS2V5ID0gVXNlclJvdW5kS2V5OwogICAgZXhwb3J0cy5Vc2VyUm91bmRNaW51cyA9IFVzZXJSb3VuZE1pbnVzOwogICAgZXhwb3J0cy5Vc2VyUm91bmRQZW4gPSBVc2VyUm91bmRQZW47CiAgICBleHBvcnRzLlVzZXJSb3VuZFBsdXMgPSBVc2VyUm91bmRQbHVzOwogICAgZXhwb3J0cy5Vc2VyUm91bmRTZWFyY2ggPSBVc2VyUm91bmRTZWFyY2g7CiAgICBleHBvcnRzLlVzZXJSb3VuZFggPSBVc2VyUm91bmRYOwogICAgZXhwb3J0cy5Vc2VyU2VhcmNoID0gVXNlclNlYXJjaDsKICAgIGV4cG9ydHMuVXNlclNxdWFyZSA9IFNxdWFyZVVzZXI7CiAgICBleHBvcnRzLlVzZXJTcXVhcmUyID0gU3F1YXJlVXNlclJvdW5kOwogICAgZXhwb3J0cy5Vc2VyU3RhciA9IFVzZXJTdGFyOwogICAgZXhwb3J0cy5Vc2VyWCA9IFVzZXJYOwogICAgZXhwb3J0cy5Vc2VyWDIgPSBVc2VyUm91bmRYOwogICAgZXhwb3J0cy5Vc2VycyA9IFVzZXJzOwogICAgZXhwb3J0cy5Vc2VyczIgPSBVc2Vyc1JvdW5kOwogICAgZXhwb3J0cy5Vc2Vyc1JvdW5kID0gVXNlcnNSb3VuZDsKICAgIGV4cG9ydHMuVXRlbnNpbHMgPSBVdGVuc2lsczsKICAgIGV4cG9ydHMuVXRlbnNpbHNDcm9zc2VkID0gVXRlbnNpbHNDcm9zc2VkOwogICAgZXhwb3J0cy5VdGlsaXR5UG9sZSA9IFV0aWxpdHlQb2xlOwogICAgZXhwb3J0cy5WYW4gPSBWYW47CiAgICBleHBvcnRzLlZhcmlhYmxlID0gVmFyaWFibGU7CiAgICBleHBvcnRzLlZhdWx0ID0gVmF1bHQ7CiAgICBleHBvcnRzLlZlY3RvclNxdWFyZSA9IFZlY3RvclNxdWFyZTsKICAgIGV4cG9ydHMuVmVnYW4gPSBWZWdhbjsKICAgIGV4cG9ydHMuVmVuZXRpYW5NYXNrID0gVmVuZXRpYW5NYXNrOwogICAgZXhwb3J0cy5WZW51cyA9IFZlbnVzOwogICAgZXhwb3J0cy5WZW51c0FuZE1hcnMgPSBWZW51c0FuZE1hcnM7CiAgICBleHBvcnRzLlZlcmlmaWVkID0gQmFkZ2VDaGVjazsKICAgIGV4cG9ydHMuVmlicmF0ZSA9IFZpYnJhdGU7CiAgICBleHBvcnRzLlZpYnJhdGVPZmYgPSBWaWJyYXRlT2ZmOwogICAgZXhwb3J0cy5WaWRlbyA9IFZpZGVvOwogICAgZXhwb3J0cy5WaWRlb09mZiA9IFZpZGVvT2ZmOwogICAgZXhwb3J0cy5WaWRlb3RhcGUgPSBWaWRlb3RhcGU7CiAgICBleHBvcnRzLlZpZXcgPSBWaWV3OwogICAgZXhwb3J0cy5Wb2ljZW1haWwgPSBWb2ljZW1haWw7CiAgICBleHBvcnRzLlZvbGxleWJhbGwgPSBWb2xsZXliYWxsOwogICAgZXhwb3J0cy5Wb2x1bWUgPSBWb2x1bWU7CiAgICBleHBvcnRzLlZvbHVtZTEgPSBWb2x1bWUxOwogICAgZXhwb3J0cy5Wb2x1bWUyID0gVm9sdW1lMjsKICAgIGV4cG9ydHMuVm9sdW1lT2ZmID0gVm9sdW1lT2ZmOwogICAgZXhwb3J0cy5Wb2x1bWVYID0gVm9sdW1lWDsKICAgIGV4cG9ydHMuVm90ZSA9IFZvdGU7CiAgICBleHBvcnRzLldhbGxldCA9IFdhbGxldDsKICAgIGV4cG9ydHMuV2FsbGV0MiA9IFdhbGxldE1pbmltYWw7CiAgICBleHBvcnRzLldhbGxldENhcmRzID0gV2FsbGV0Q2FyZHM7CiAgICBleHBvcnRzLldhbGxldE1pbmltYWwgPSBXYWxsZXRNaW5pbWFsOwogICAgZXhwb3J0cy5XYWxscGFwZXIgPSBXYWxscGFwZXI7CiAgICBleHBvcnRzLldhbmQgPSBXYW5kOwogICAgZXhwb3J0cy5XYW5kMiA9IFdhbmRTcGFya2xlczsKICAgIGV4cG9ydHMuV2FuZFNwYXJrbGVzID0gV2FuZFNwYXJrbGVzOwogICAgZXhwb3J0cy5XYXJlaG91c2UgPSBXYXJlaG91c2U7CiAgICBleHBvcnRzLldhc2hpbmdNYWNoaW5lID0gV2FzaGluZ01hY2hpbmU7CiAgICBleHBvcnRzLldhdGNoID0gV2F0Y2g7CiAgICBleHBvcnRzLldhdmVzID0gV2F2ZXM7CiAgICBleHBvcnRzLldhdmVzQXJyb3dEb3duID0gV2F2ZXNBcnJvd0Rvd247CiAgICBleHBvcnRzLldhdmVzQXJyb3dVcCA9IFdhdmVzQXJyb3dVcDsKICAgIGV4cG9ydHMuV2F2ZXNMYWRkZXIgPSBXYXZlc0xhZGRlcjsKICAgIGV4cG9ydHMuV2F5cG9pbnRzID0gV2F5cG9pbnRzOwogICAgZXhwb3J0cy5XZWJjYW0gPSBXZWJjYW07CiAgICBleHBvcnRzLldlYmhvb2sgPSBXZWJob29rOwogICAgZXhwb3J0cy5XZWJob29rT2ZmID0gV2ViaG9va09mZjsKICAgIGV4cG9ydHMuV2VpZ2h0ID0gV2VpZ2h0OwogICAgZXhwb3J0cy5XZWlnaHRUaWxkZSA9IFdlaWdodFRpbGRlOwogICAgZXhwb3J0cy5XaGVhdCA9IFdoZWF0OwogICAgZXhwb3J0cy5XaGVhdE9mZiA9IFdoZWF0T2ZmOwogICAgZXhwb3J0cy5XaG9sZVdvcmQgPSBXaG9sZVdvcmQ7CiAgICBleHBvcnRzLldpZmkgPSBXaWZpOwogICAgZXhwb3J0cy5XaWZpQ29nID0gV2lmaUNvZzsKICAgIGV4cG9ydHMuV2lmaUhpZ2ggPSBXaWZpSGlnaDsKICAgIGV4cG9ydHMuV2lmaUxvdyA9IFdpZmlMb3c7CiAgICBleHBvcnRzLldpZmlPZmYgPSBXaWZpT2ZmOwogICAgZXhwb3J0cy5XaWZpUGVuID0gV2lmaVBlbjsKICAgIGV4cG9ydHMuV2lmaVN5bmMgPSBXaWZpU3luYzsKICAgIGV4cG9ydHMuV2lmaVplcm8gPSBXaWZpWmVybzsKICAgIGV4cG9ydHMuV2luZCA9IFdpbmQ7CiAgICBleHBvcnRzLldpbmRBcnJvd0Rvd24gPSBXaW5kQXJyb3dEb3duOwogICAgZXhwb3J0cy5XaW5lID0gV2luZTsKICAgIGV4cG9ydHMuV2luZU9mZiA9IFdpbmVPZmY7CiAgICBleHBvcnRzLldvcmtmbG93ID0gV29ya2Zsb3c7CiAgICBleHBvcnRzLldvcm0gPSBXb3JtOwogICAgZXhwb3J0cy5XcmFwVGV4dCA9IFRleHRXcmFwOwogICAgZXhwb3J0cy5XcmVuY2ggPSBXcmVuY2g7CiAgICBleHBvcnRzLlggPSBYMjsKICAgIGV4cG9ydHMuWENpcmNsZSA9IENpcmNsZVg7CiAgICBleHBvcnRzLlhPY3RhZ29uID0gT2N0YWdvblg7CiAgICBleHBvcnRzLlhTcXVhcmUgPSBTcXVhcmVYOwogICAgZXhwb3J0cy5Zb3V0dWJlID0gWW91dHViZTsKICAgIGV4cG9ydHMuWmFwID0gWmFwOwogICAgZXhwb3J0cy5aYXBPZmYgPSBaYXBPZmY7CiAgICBleHBvcnRzLlpvb21JbiA9IFpvb21JbjsKICAgIGV4cG9ydHMuWm9vbU91dCA9IFpvb21PdXQ7CiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50MzsKICAgIGV4cG9ydHMuY3JlYXRlSWNvbnMgPSBjcmVhdGVJY29uczsKICAgIGV4cG9ydHMuaWNvbnMgPSBpY29uc0FuZEFsaWFzZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtaWNvbi9kZWVzLWljb24uZGVtby5qcwp2YXIgbHVjaWRlSWNvbnMsIGRlbW9GdW5jMjsKdmFyIGluaXRfZGVlc19pY29uX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtaWNvbi9kZWVzLWljb24uZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGx1Y2lkZUljb25zID0gX190b0VTTShyZXF1aXJlX2x1Y2lkZSgpLCAxKTsKICAgIGRlbW9GdW5jMiA9ICgpID0+IHsKICAgICAgY29uc3QgZmFJY29uczMgPSBPYmplY3Qua2V5cyhpY29uczQuZmEpOwogICAgICBjb25zb2xlLmxvZygiRmlyc3QgZmV3IEx1Y2lkZSBrZXlzOiIsIE9iamVjdC5rZXlzKGx1Y2lkZUljb25zKS5zbGljZSgwLCA1KSk7CiAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdCA9IE9iamVjdC5rZXlzKGx1Y2lkZUljb25zKS5maWx0ZXIoKGtleTIpID0+IHsKICAgICAgICBjb25zdCBpc1VwcGVyY2FzZUZpcnN0ID0ga2V5MlswXSA9PT0ga2V5MlswXS50b1VwcGVyQ2FzZSgpICYmIGtleTJbMF0gIT09IGtleTJbMF0udG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBpc0Z1bmN0aW9uMiA9IHR5cGVvZiBsdWNpZGVJY29uc1trZXkyXSA9PT0gImZ1bmN0aW9uIjsKICAgICAgICBjb25zdCBub3RVdGlsaXR5ID0gIVsiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJY29ucyIsICJkZWZhdWx0Il0uaW5jbHVkZXMoa2V5Mik7CiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24yICYmIGlzVXBwZXJjYXNlRmlyc3QgJiYgbm90VXRpbGl0eTsKICAgICAgfSkubWFwKChwYXNjYWxOYW1lKSA9PiB7CiAgICAgICAgcmV0dXJuIHBhc2NhbE5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwYXNjYWxOYW1lLnNsaWNlKDEpOwogICAgICB9KTsKICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gTHVjaWRlIGljb25zYCk7CiAgICAgIGlmIChsdWNpZGVJY29uc0xpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgY29uc29sZS5sb2coIlRyeWluZyBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBmaW5kIEx1Y2lkZSBpY29ucyIpOwogICAgICAgIGlmIChsdWNpZGVJY29ucy5pY29ucykgewogICAgICAgICAgY29uc3QgaWNvblNvdXJjZSA9IGx1Y2lkZUljb25zLmljb25zIHx8IHt9OwogICAgICAgICAgbHVjaWRlSWNvbnNMaXN0LnB1c2goLi4uT2JqZWN0LmtleXMoaWNvblNvdXJjZSkpOwogICAgICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnMgdmlhIGFsdGVybmF0aXZlIG1ldGhvZGApOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb3B5QWxsSWNvbk5hbWVzID0gKCkgPT4gewogICAgICAgIGNvbnN0IGZhSWNvbnNMaXN0ID0gZmFJY29uczMubWFwKChuYW1lKSA9PiBgZmE6JHtuYW1lfWApOwogICAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdFByZWZpeGVkID0gbHVjaWRlSWNvbnNMaXN0Lm1hcCgobmFtZSkgPT4gYGx1Y2lkZToke25hbWV9YCk7CiAgICAgICAgY29uc3QgYWxsSWNvbnMgPSBbLi4uZmFJY29uc0xpc3QsIC4uLmx1Y2lkZUljb25zTGlzdFByZWZpeGVkXTsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYWxsSWNvbnMuam9pbigiXG4iKTsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnV0dG9uLnRleHRDb250ZW50OwogICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gYFx1MjcxMyBDb3BpZWQgJHthbGxJY29ucy5sZW5ndGh9IGljb24gbmFtZXMhYDsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICB9LCAyZTMpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBjb25zdCBzZWFyY2hJY29ucyA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICAgICAgY29uc3QgZGVtb0NvbnRhaW5lciA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZGVtb0NvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBkZW1vQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyIik7CiAgICAgICAgY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIpID0+IHsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgiZGF0YS1uYW1lIik7CiAgICAgICAgICBpZiAoc2VhcmNoVGVybSA9PT0gIiIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAgICAgfSBlbHNlIGlmIChpY29uTmFtZSAmJiBpY29uTmFtZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZGVtb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuc2VjdGlvbi1jb250YWluZXIiKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7CiAgICAgICAgICBjb25zdCB2aXNpYmxlSWNvbnMgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyOm5vdCguaGlkZGVuKSIpLmxlbmd0aDsKICAgICAgICAgIGNvbnN0IGNvdW50RWxlbWVudCA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmljb24tY291bnQiKTsKICAgICAgICAgIGlmIChjb3VudEVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgdG90YWxJY29uc0NvdW50ID0gc2VjdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoImZhLXNlY3Rpb24iKSA/IGZhSWNvbnMzLmxlbmd0aCA6IGx1Y2lkZUljb25zTGlzdC5sZW5ndGg7CiAgICAgICAgICAgIGNvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHZpc2libGVJY29ucyA9PT0gdG90YWxJY29uc0NvdW50ID8gYCR7dG90YWxJY29uc0NvdW50fSBpY29uc2AgOiBgJHt2aXNpYmxlSWNvbnN9IG9mICR7dG90YWxJY29uc0NvdW50fSBpY29uc2A7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IGNvcHlJY29uTmFtZSA9IChpY29uTmFtZVRvQ29weSwgdHlwZTUpID0+IHsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYCR7dHlwZTV9OiR7aWNvbk5hbWVUb0NvcHl9YDsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICAgIGNvbnN0IHRvb2x0aXAgPSBjdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRvb2x0aXAiKTsKICAgICAgICAgIGlmICh0b29sdGlwKSB7CiAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ2xpY2sgdG8gY29weSI7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHJldHVybiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGJhY2tncm91bmQ6ICMxMTExMTE7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMzBweDsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5zZWFyY2gtY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTBweDsKICAgIH0KICAgIAogICAgI2ljb25TZWFyY2ggewogICAgICBmbGV4OiAxOwogICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgfQogICAgCiAgICAjaWNvblNlYXJjaDpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIGJvcmRlci1jb2xvcjogI2U0MDAyYjsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbiB7CiAgICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAjYzQwMDFiOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQogICAgCiAgICBkZWVzLWljb24gewogICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgIH0KCiAgICAuaWNvbkNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDIwcHggMTZweCAwcHggMTZweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzMzMzsKICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yczsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICAKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICAgIH0KCiAgICAuaWNvbk5hbWUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6ICNjY2M7CiAgICAgIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIG1hcmdpbi1yaWdodDogLTE2cHg7CiAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICBtYXgtd2lkdGg6IDEyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzMzMzOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CiAgICAKICAgIC5hcGktbm90ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICNlNDAwMmI7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNDAwMmI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjgsIDAsIDQzLCAwLjEpOwogICAgfQogICAgCiAgICAuaWNvbi1jb3VudCB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICM4ODg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgfQogICAgCiAgICAuaWNvbnMtZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgfQogICAgCiAgICAuY29weS10b29sdGlwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICBjb2xvcjogd2hpdGU7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgdG9wOiAtMzBweDsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIAogICAgLmljb25Db250YWluZXI6aG92ZXIgLmNvcHktdG9vbHRpcCB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLmljb25Db250YWluZXI6aG92ZXIgZGVlcy1pY29uIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogICAgfQogICAgCiAgICAuaGlkZGVuIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtb0NvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtY29udGFpbmVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpY29uU2VhcmNoIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGljb25zLi4uIiBAaW5wdXQ9JHtzZWFyY2hJY29uc30+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYWxsLWJ1dHRvbiIgQGNsaWNrPSR7Y29weUFsbEljb25OYW1lc30+8J+TiyBDb3B5IEFsbCBJY29uIE5hbWVzPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iYXBpLW5vdGUiPgogICAgICBOZXcgQVBJOiBVc2UgPGNvZGU+aWNvbj0iZmE6aWNvbk5hbWUiPC9jb2RlPiBvciA8Y29kZT5pY29uPSJsdWNpZGU6aWNvbk5hbWUiPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmljb25GQTwvY29kZT4uIAogICAgICBDbGljayBhbnkgaWNvbiB0byBjb3B5IGl0cyBuZXcgZm9ybWF0IHRvIGNsaXBib2FyZC4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBmYS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgRm9udEF3ZXNvbWUgSWNvbnMKICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1jb3VudCI+JHtmYUljb25zMy5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHtmYUljb25zMy5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGZhOiR7aWNvbk5hbWV9YDsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbkNvbnRhaW5lciBmYS1pY29uIiBkYXRhLW5hbWU9JHtpY29uTmFtZS50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKSA9PiBjb3B5SWNvbk5hbWUoaWNvbk5hbWUsICJmYSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+ZmE6JHtpY29uTmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3B5LXRvb2x0aXAiPkNsaWNrIHRvIGNvcHk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tY29udGFpbmVyIGx1Y2lkZS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgTHVjaWRlIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnM8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpY29ucy1ncmlkIj4KICAgICAgICAke2x1Y2lkZUljb25zTGlzdC5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgbHVjaWRlLWljb24iIGRhdGEtbmFtZT0ke2ljb25OYW1lLnRvTG93ZXJDYXNlKCl9IEBjbGljaz0keygpID0+IGNvcHlJY29uTmFtZShpY29uTmFtZSwgImx1Y2lkZSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+bHVjaWRlOiR7aWNvbk5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10b29sdGlwIj5DbGljayB0byBjb3B5PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy1pY29uL2RlZXMtaWNvbi5qcwpmdW5jdGlvbiBsaW1pdENhY2hlU2l6ZSgpIHsKICBpZiAoaWNvbkNhY2hlLnNpemUgPiBNQVhfQ0FDSEVfU0laRSkgewogICAgY29uc3Qga2V5c1RvRGVsZXRlID0gQXJyYXkuZnJvbShpY29uQ2FjaGUua2V5cygpKS5zbGljZSgwLCBNQVhfQ0FDSEVfU0laRSAvIDUpOwogICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleTIpID0+IGljb25DYWNoZS5kZWxldGUoa2V5MikpOwogIH0KfQp2YXIgbHVjaWRlSWNvbnMyLCBpbXBvcnRfbHVjaWRlLCBfX2VzRGVjb3JhdGU0LCBfX3J1bkluaXRpYWxpemVyczUsIGZhSWNvbnMyLCBpY29uczQsIGljb25DYWNoZSwgTUFYX0NBQ0hFX1NJWkUsIERlZXNJY29uOwp2YXIgaW5pdF9kZWVzX2ljb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtaWNvbi9kZWVzLWljb24uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2ZvbnRhd2Vzb21lX3N2Z19jb3JlKCk7CiAgICBpbml0X2ZyZWVfYnJhbmRzX3N2Z19pY29ucygpOwogICAgaW5pdF9mcmVlX3JlZ3VsYXJfc3ZnX2ljb25zKCk7CiAgICBpbml0X2ZyZWVfc29saWRfc3ZnX2ljb25zKCk7CiAgICBpbml0X2RlZXNfaWNvbl9kZW1vKCk7CiAgICBsdWNpZGVJY29uczIgPSBfX3RvRVNNKHJlcXVpcmVfbHVjaWRlKCksIDEpOwogICAgaW1wb3J0X2x1Y2lkZSA9IF9fdG9FU00ocmVxdWlyZV9sdWNpZGUoKSwgMSk7CiAgICBfX2VzRGVjb3JhdGU0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgZmFJY29uczIgPSB7CiAgICAgIC8vIG5vcm1hbAogICAgICBhcnJvd1JpZ2h0OiBmYUFycm93UmlnaHQsCiAgICAgIGFycm93VXBSaWdodEZyb21TcXVhcmU6IGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwKICAgICAgYmVsbDogZmFCZWxsMiwKICAgICAgYnVnOiBmYUJ1ZywKICAgICAgYnVpbGRpbmc6IGZhQnVpbGRpbmcyLAogICAgICBjYXJldExlZnQ6IGZhQ2FyZXRMZWZ0LAogICAgICBjYXJldFJpZ2h0OiBmYUNhcmV0UmlnaHQsCiAgICAgIGNoZWNrOiBmYUNoZWNrLAogICAgICBjaXJjbGVJbmZvOiBmYUNpcmNsZUluZm8sCiAgICAgIGNpcmNsZUNoZWNrOiBmYUNpcmNsZUNoZWNrLAogICAgICBjaXJjbGVDaGVja1NvbGlkOiBmYUNpcmNsZUNoZWNrMiwKICAgICAgY2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmssCiAgICAgIGNpcmNsZVhtYXJrU29saWQ6IGZhQ2lyY2xlWG1hcmsyLAogICAgICBjbG9ja1JvdGF0ZUxlZnQ6IGZhQ2xvY2tSb3RhdGVMZWZ0LAogICAgICBjb3B5OiBmYUNvcHksCiAgICAgIGNvcHlTb2xpZDogZmFDb3B5MiwKICAgICAgZGVza3RvcDogZmFEZXNrdG9wLAogICAgICBleWU6IGZhRXllMiwKICAgICAgZXllU2xhc2g6IGZhRXllU2xhc2gyLAogICAgICBmaWxlSW52b2ljZTogZmFGaWxlSW52b2ljZSwKICAgICAgZmlsZUludm9pY2VEb2xsZXI6IGZhRmlsZUludm9pY2VEb2xsYXIsCiAgICAgIGdlYXI6IGZhR2VhciwKICAgICAgZ3JpcDogZmFHcmlwLAogICAgICBtYWduaWZ5aW5nR2xhc3M6IGZhTWFnbmlmeWluZ0dsYXNzLAogICAgICBtZXNzYWdlOiBmYU1lc3NhZ2UsCiAgICAgIG1lc3NhZ2VTb2xpZDogZmFNZXNzYWdlMiwKICAgICAgbW9uZXlDaGVja0RvbGxhcjogZmFNb25leUNoZWNrRG9sbGFyLAogICAgICBtdWdIb3Q6IGZhTXVnSG90LAogICAgICBtaW51czogZmFNaW51cywKICAgICAgbmV0d29ya1dpcmVkOiBmYU5ldHdvcmtXaXJlZCwKICAgICAgcGFwZXJjbGlwOiBmYVBhcGVyY2xpcCwKICAgICAgcGFzdGU6IGZhUGFzdGUsCiAgICAgIHBhc3RlU29saWQ6IGZhUGFzdGUyLAogICAgICBwZW5Ub1NxdWFyZTogZmFQZW5Ub1NxdWFyZTIsCiAgICAgIHBsdXM6IGZhUGx1cywKICAgICAgcmVjZWlwdDogZmFSZWNlaXB0LAogICAgICByc3M6IGZhUnNzLAogICAgICBzaGFyZTogZmFTaGFyZSwKICAgICAgc3VuOiBmYVN1biwKICAgICAgc3VuU29saWQ6IGZhU3VuMiwKICAgICAgdGVybWluYWw6IGZhVGVybWluYWwsCiAgICAgIHRyYXNoOiBmYVRyYXNoLAogICAgICB0cmFzaFNvbGlkOiBmYVRyYXNoLAogICAgICB0cmFzaENhbjogZmFUcmFzaENhbiwKICAgICAgdHJhc2hDYW5Tb2xpZDogZmFUcmFzaENhbjIsCiAgICAgIHVzZXJzOiBmYVVzZXJzLAogICAgICB3YWxsZXQ6IGZhV2FsbGV0LAogICAgICB4bWFyazogZmFYbWFyaywKICAgICAgLy8gYnJhbmRzCiAgICAgIGZhY2Vib29rOiBmYUZhY2Vib29rLAogICAgICBnb29nbGU6IGZhR29vZ2xlLAogICAgICBpbnN0YWdyYW06IGZhSW5zdGFncmFtLAogICAgICBsaW5rZWRpbjogZmFMaW5rZWRpbiwKICAgICAgbWVkaXVtOiBmYU1lZGl1bSwKICAgICAgc2xhY2s6IGZhU2xhY2tIYXNoLAogICAgICB0aWt0b2s6IGZhVGlrdG9rLAogICAgICB0d2l0dGVyOiBmYVR3aXR0ZXIKICAgIH07CiAgICBpY29uczQgPSB7CiAgICAgIGZhOiBmYUljb25zMgogICAgfTsKICAgIGljb25DYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBNQVhfQ0FDSEVfU0laRSA9IDUwMDsKICAgIERlZXNJY29uID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaWNvbiIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfaWNvbkZBX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvbkZBX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25GQV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9pY29uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uU2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25TaXplX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sb3JfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb2xvcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N0cm9rZVdpZHRoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc3Ryb2tlV2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJY29uMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2ljb25GQV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICBjb252ZXJ0ZXI6IHsKICAgICAgICAgICAgICAvLyBDb252ZXJ0IGF0dHJpYnV0ZSBzdHJpbmcgdG8gcHJvcGVydHkgKGZvciByZWZsZWN0ZWQgYXR0cmlidXRlcykKICAgICAgICAgICAgICBmcm9tQXR0cmlidXRlOiAodmFsdWUyKSA9PiB2YWx1ZTIsCiAgICAgICAgICAgICAgLy8gQ29udmVydCBwcm9wZXJ0eSB0byBhdHRyaWJ1dGUgKGZvciByZWZsZWN0aW9uKQogICAgICAgICAgICAgIHRvQXR0cmlidXRlOiAodmFsdWUyKSA9PiB2YWx1ZTIKICAgICAgICAgICAgfQogICAgICAgICAgfSldOwogICAgICAgICAgX2ljb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgY29udmVydGVyOiB7CiAgICAgICAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyLAogICAgICAgICAgICAgIHRvQXR0cmlidXRlOiAodmFsdWUyKSA9PiB2YWx1ZTIKICAgICAgICAgICAgfQogICAgICAgICAgfSldOwogICAgICAgICAgX2ljb25TaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2NvbG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3N0cm9rZVdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfaWNvbkZBX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImljb25GQSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbkZBIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmljb25GQSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmljb25GQSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvbkZBX2luaXRpYWxpemVycywgX2ljb25GQV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9pY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImljb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmljb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25faW5pdGlhbGl6ZXJzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9pY29uU2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpY29uU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvblNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pY29uU2l6ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvblNpemVfaW5pdGlhbGl6ZXJzLCBfaWNvblNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfY29sb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbG9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29sb3IgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbG9yX2luaXRpYWxpemVycywgX2NvbG9yX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX3N0cm9rZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0cm9rZVdpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdHJva2VXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zdHJva2VXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN0cm9rZVdpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdHJva2VXaWR0aF9pbml0aWFsaXplcnMsIF9zdHJva2VXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJY29uMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiVXRpbGl0eSJdOwogICAgICAgICNpY29uRkFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvbkZBX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvKioKICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBpY29uYCBwcm9wZXJ0eSBpbnN0ZWFkIHdpdGggZm9ybWF0ICJmYTppY29uTmFtZSIgb3IgImx1Y2lkZTppY29uTmFtZSIKICAgICAgICAgKi8KICAgICAgICBnZXQgaWNvbkZBKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25GQV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbkZBKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbkZBX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgcHJlZmVycmVkIGljb24gcHJvcGVydHkuIFVzZSBmb3JtYXQgImZhOmljb25OYW1lIiBvciAibHVjaWRlOmljb25OYW1lIgogICAgICAgICAqIEV4YW1wbGVzOiAiZmE6Y2hlY2siLCAibHVjaWRlOm1lbnUiCiAgICAgICAgICovCiAgICAgICAgZ2V0IGljb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uU2l6ZV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBpY29uU2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvblNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9jb2xvcl9pbml0aWFsaXplcnMsICJjdXJyZW50Q29sb3IiKSk7CiAgICAgICAgZ2V0IGNvbG9yKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycywgMikpOwogICAgICAgIGdldCBzdHJva2VXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3Ryb2tlV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBGb3IgdHJhY2tpbmcgd2hlbiB3ZSBuZWVkIHRvIHJlLXJlbmRlcgogICAgICAgIGxhc3RJY29uID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBsYXN0SWNvblNpemUgPSBudWxsOwogICAgICAgIGxhc3RDb2xvciA9IG51bGw7CiAgICAgICAgbGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXRzIHRoZSBlZmZlY3RpdmUgaWNvbiB2YWx1ZSwgc3VwcG9ydGluZyBib3RoIHRoZSBuZXcgYGljb25gIHByb3BlcnR5CiAgICAgICAgICogYW5kIHRoZSBsZWdhY3kgYGljb25GQWAgcHJvcGVydHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICogUHJlZmVycyBgaWNvbmAgaWYgYm90aCBhcmUgc2V0LgogICAgICAgICAqLwogICAgICAgIGdldEVmZmVjdGl2ZUljb24oKSB7CiAgICAgICAgICBpZiAodGhpcy5pY29uKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmljb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pY29uRkEpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaWNvbkZBLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmljb25GQTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYGZhOiR7dGhpcy5pY29uRkF9YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBQYXJzZXMgYW4gaWNvbiBzdHJpbmcgaW50byBpdHMgdHlwZSBhbmQgbmFtZSBwYXJ0cwogICAgICAgICAqIEBwYXJhbSBpY29uU3RyIFRoZSBpY29uIHN0cmluZyBpbiBmb3JtYXQgInR5cGU6bmFtZSIKICAgICAgICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0eXBlIGFuZCBuYW1lIHByb3BlcnRpZXMKICAgICAgICAgKi8KICAgICAgICBwYXJzZUljb25TdHJpbmcoaWNvblN0cikgewogICAgICAgICAgY29uc3QgbG93ZXJTdHIgPSBpY29uU3RyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAobG93ZXJTdHIuc3RhcnRzV2l0aCgiZmE6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAiZmEiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIuc3Vic3RyaW5nKDMpCiAgICAgICAgICAgICAgLy8gUmVtb3ZlICdmYTonIHByZWZpeAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIGlmIChsb3dlclN0ci5zdGFydHNXaXRoKCJsdWNpZGU6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAibHVjaWRlIiwKICAgICAgICAgICAgICBuYW1lOiBpY29uU3RyLnN1YnN0cmluZyg3KQogICAgICAgICAgICAgIC8vIFJlbW92ZSAnbHVjaWRlOicgcHJlZml4CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJsdWNpZGUiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVuZGVyTHVjaWRlSWNvbihpY29uTmFtZSkgewogICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgbHVjaWRlOiR7aWNvbk5hbWV9OiR7dGhpcy5pY29uU2l6ZX06JHt0aGlzLmNvbG9yfToke3RoaXMuc3Ryb2tlV2lkdGh9YDsKICAgICAgICAgIGlmIChpY29uQ2FjaGUuaGFzKGNhY2hlS2V5KSkgewogICAgICAgICAgICByZXR1cm4gaWNvbkNhY2hlLmdldChjYWNoZUtleSkgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXNjYWxDYXNlTmFtZSA9IGljb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaWNvbk5hbWUuc2xpY2UoMSk7CiAgICAgICAgICAgIGlmICghbHVjaWRlSWNvbnMyW3Bhc2NhbENhc2VOYW1lXSkgewogICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTHVjaWRlIGljb24gJyR7cGFzY2FsQ2FzZU5hbWV9JyBub3QgZm91bmQgaW4gbHVjaWRlSWNvbnMgb2JqZWN0YCk7CiAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ZnRWxlbWVudC5vdXRlckhUTUw7CiAgICAgICAgICAgIGljb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7CiAgICAgICAgICAgIGxpbWl0Q2FjaGVTaXplKCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtpY29uTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iJHt0aGlzLmljb25TaXplfSIgaGVpZ2h0PSIke3RoaXMuaWNvblNpemV9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHt0aGlzLmNvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3RoaXMuc3Ryb2tlV2lkdGh9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LXNpemU9IjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGZpbGw9IiR7dGhpcy5jb2xvcn0iPiR7aWNvbk5hbWV9PC90ZXh0PgogICAgICA8L3N2Zz5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogSW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgKi8KICAgICAgI2ljb25Db250YWluZXIgc3ZnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogSGVscHMgd2l0aCBhbmltYXRpb25zICovCiAgICAgICAgY29udGFpbjogc3RyaWN0OyAvKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gKi8KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5pY29uU2l6ZSkgewogICAgICAgICAgICB0aGlzLmljb25TaXplID0gcGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVJY29uID0gdGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7CiAgICAgICAgICBpZiAodGhpcy5sYXN0SWNvbiA9PT0gZWZmZWN0aXZlSWNvbiAmJiB0aGlzLmxhc3RJY29uU2l6ZSA9PT0gdGhpcy5pY29uU2l6ZSAmJiB0aGlzLmxhc3RDb2xvciA9PT0gdGhpcy5jb2xvciAmJiB0aGlzLmxhc3RTdHJva2VXaWR0aCA9PT0gdGhpcy5zdHJva2VXaWR0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gZWZmZWN0aXZlSWNvbjsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gdGhpcy5pY29uU2l6ZTsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gdGhpcy5jb2xvcjsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiI2ljb25Db250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyIHx8ICFlZmZlY3RpdmVJY29uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB7IHR5cGU6IHR5cGU1LCBuYW1lIH0gPSB0aGlzLnBhcnNlSWNvblN0cmluZyhlZmZlY3RpdmVJY29uKTsKICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAibHVjaWRlIikgewogICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIGlmIChsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHN2Z0VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3ZnRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVuZGVyaW5nIEx1Y2lkZSBpY29uOmAsIGVycm9yKTsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gdGhpcy5yZW5kZXJMdWNpZGVJY29uKG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKGljb25IdG1sKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBpY29uSHRtbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZmFJY29uID0gaWNvbnM0LmZhW25hbWVdOwogICAgICAgICAgICAgIGlmIChmYUljb24pIHsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gaWNvbjIoZmFJY29uKS5odG1sWzBdOwogICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGljb25IdG1sOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lIGljb24gbm90IGZvdW5kOiAke25hbWV9YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB1cGRhdGluZyBpY29uICR7ZWZmZWN0aXZlSWNvbn06YCwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBDbGVhbiB1cCByZXNvdXJjZXMgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWQKICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0ljb24yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5qcwp2YXIgX19lc0RlY29yYXRlNSwgX19ydW5Jbml0aWFsaXplcnM2LCBEZWVzQ29udGV4dG1lbnU7CnZhciBpbml0X2RlZXNfY29udGV4dG1lbnUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnVfZGVtbygpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICAgIGluaXRfemluZGV4KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNDb250ZXh0bWVudSA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNvbnRleHRtZW51IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzQ29udGV4dG1lbnUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNSh0aGlzLCBudWxsLCBfbWVudUl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVJdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVJdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gREVNTwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk92ZXJsYXkiXTsKICAgICAgICAvLyBTVEFUSUMKICAgICAgICAvLyBUaGlzIHdpbGwgc3RvcmUgYWxsIHRoZSBhY2N1bXVsYXRlZCBtZW51IGl0ZW1zCiAgICAgICAgc3RhdGljIGNvbnRleHRNZW51RGVhY3RpdmF0ZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgYWNjdW11bGF0ZWRNZW51SXRlbXMgPSBbXTsKICAgICAgICAvLyBBZGQgYSBnbG9iYWwgZXZlbnQgbGlzdGVuZXIgZm9yIHRoZSByaWdodC1jbGljayBjb250ZXh0IG1lbnUKICAgICAgICBzdGF0aWMgaW5pdGlhbGl6ZUdsb2JhbExpc3RlbmVyKCkgewogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCAoZXZlbnQpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVEZWFjdGl2YXRlZCkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUyLmFjY3VtdWxhdGVkTWVudUl0ZW1zID0gW107CiAgICAgICAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudDQgb2YgcGF0aDIpIHsKICAgICAgICAgICAgICBpZiAoZWxlbWVudDQuZ2V0Q29udGV4dE1lbnVJdGVtcykgewogICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBlbGVtZW50NC5nZXRDb250ZXh0TWVudUl0ZW1zKCk7CiAgICAgICAgICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICBpZiAoRGVlc0NvbnRleHRtZW51Mi5hY2N1bXVsYXRlZE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Mi5hY2N1bXVsYXRlZE1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUyLmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goLi4uaXRlbXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUyLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBEZWVzQ29udGV4dG1lbnUyLmFjY3VtdWxhdGVkTWVudUl0ZW1zKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvLyBhbGxvd3Mgb3BlbmluZyBvZiBhIGNvbnRleHRtZW51IHdpdGggb3B0aW9ucwogICAgICAgIHN0YXRpYyBhc3luYyBvcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgbWVudUl0ZW1zQXJnKSB7CiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGV2ZW50QXJnLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGNvbnRleHRNZW51ID0gbmV3IERlZXNDb250ZXh0bWVudTIoKTsKICAgICAgICAgIGNvbnRleHRNZW51LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICAgIGNvbnRleHRNZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyh6SW5kZXhMYXllcnMub3ZlcmxheS5jb250ZXh0TWVudSk7CiAgICAgICAgICBjb250ZXh0TWVudS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgICAgIGNvbnRleHRNZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtc0FyZzsKICAgICAgICAgIGNvbnRleHRNZW51LndpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coKTsKICAgICAgICAgIGNvbnRleHRNZW51LndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgICBjb25zdCBpc0NvbnRleHRNZW51ID0gY2xpY2tlZEVsZW1lbnQuY2xvc2VzdCgiZGVlcy1jb250ZXh0bWVudSIpOwogICAgICAgICAgICBpZiAoIWlzQ29udGV4dE1lbnUpIHsKICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0TWVudS5kZXN0cm95KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGV4dE1lbnUpOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgICAgICBjb25zdCByZWN0ID0gY29udGV4dE1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICAgICAgbGV0IHRvcCA9IGV2ZW50QXJnLmNsaWVudFk7CiAgICAgICAgICBsZXQgbGVmdCA9IGV2ZW50QXJnLmNsaWVudFg7CiAgICAgICAgICBpZiAobGVmdCArIHJlY3Qud2lkdGggPiB3aW5kb3dXaWR0aCkgewogICAgICAgICAgICBsZWZ0ID0gd2luZG93V2lkdGggLSByZWN0LndpZHRoIC0gMTA7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9wICsgcmVjdC5oZWlnaHQgPiB3aW5kb3dIZWlnaHQpIHsKICAgICAgICAgICAgdG9wID0gd2luZG93SGVpZ2h0IC0gcmVjdC5oZWlnaHQgLSAxMDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsZWZ0IDwgMTApCiAgICAgICAgICAgIGxlZnQgPSAxMDsKICAgICAgICAgIGlmICh0b3AgPCAxMCkKICAgICAgICAgICAgdG9wID0gMTA7CiAgICAgICAgICBjb250ZXh0TWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICAgICAgY29udGV4dE1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgOwogICAgICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gInRvcCBsZWZ0IjsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgY29udGV4dE1lbnUuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIGNvbnRleHRNZW51LnN0eWxlLnRyYW5zZm9ybSA9ICJzY2FsZSgxKSB0cmFuc2xhdGVZKDApIjsKICAgICAgICB9CiAgICAgICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIHN1Ym1lbnUgPSBudWxsOwogICAgICAgIHN1Ym1lbnVUaW1lb3V0ID0gbnVsbDsKICAgICAgICBwYXJlbnRNZW51ID0gbnVsbDsKICAgICAgICBpc0Rlc3Ryb3lpbmcgPSBmYWxzZTsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLnRhYkluZGV4ID0gMDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU1RBVElDIFNUWUxFUwogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubWVudWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5oYXMtc3VibWVudTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICfigLonOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbTphY3RpdmU6bm90KC5oYXMtc3VibWVudSkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudWl0ZW0tc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW1BcmcpID0+IHsKICAgICAgICAgICAgaWYgKCJkaXZpZGVyIiBpbiBtZW51SXRlbUFyZyAmJiBtZW51SXRlbUFyZy5kaXZpZGVyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnUtZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtQXJnOwogICAgICAgICAgICBjb25zdCBoYXNTdWJtZW51ID0gbWVudUl0ZW0uc3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51Lmxlbmd0aCA+IDA7CiAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ibWVudWl0ZW0gJHttZW51SXRlbS5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0gJHtoYXNTdWJtZW51ID8gImhhcy1zdWJtZW51IiA6ICIifSIgCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gIW1lbnVJdGVtLmRpc2FibGVkICYmICFoYXNTdWJtZW51ICYmIHRoaXMuaGFuZGxlQ2xpY2sobWVudUl0ZW0pfQogICAgICAgICAgICAgIEBtb3VzZWVudGVyPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KX0KICAgICAgICAgICAgICBAbW91c2VsZWF2ZT0keygpID0+IHRoaXMuaGFuZGxlTWVudUl0ZW1MZWF2ZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHttZW51SXRlbS5pY29uTmFtZX0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ICYmICFoYXNTdWJtZW51ID8gYjJgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tc2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICAgICAgfSl9CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5sZW5ndGggPT09IDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVudWl0ZW0iIEBjbGljaz0keygpID0+IHsKICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Mi5jb250ZXh0TWVudURlYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgICB9fT4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSJsdWNpZGU6eCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPkFsbG93IG5hdGl2ZSBjb250ZXh0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICB0aGlzLmZvY3VzKCk7CiAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleWRvd24pOwogICAgICAgIH0KICAgICAgICBoYW5kbGVLZXlkb3duID0gKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW06bm90KC5kaXNhYmxlZCkiKSk7CiAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm1hdGNoZXMoIjpob3ZlciIpKTsKICAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7CiAgICAgICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxIDwgbWVudUl0ZW1zLmxlbmd0aCA/IGN1cnJlbnRJbmRleCArIDEgOiAwOwogICAgICAgICAgICAgIG1lbnVJdGVtc1tuZXh0SW5kZXhdLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IC0gMSA+PSAwID8gY3VycmVudEluZGV4IC0gMSA6IG1lbnVJdGVtcy5sZW5ndGggLSAxOwogICAgICAgICAgICAgIG1lbnVJdGVtc1twcmV2SW5kZXhdLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gMCkgewogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2N1cnJlbnRJbmRleF0uY2xpY2soKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGFzeW5jIGhhbmRsZUNsaWNrKG1lbnVJdGVtKSB7CiAgICAgICAgICBtZW51SXRlbS5hY3Rpb24oKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZGVzdHJveUFsbCgpOwogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KSB7CiAgICAgICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuc3VibWVudSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmhpZGVTdWJtZW51KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaGFzU3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51KSB7CiAgICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLnNob3dTdWJtZW51KG1lbnVJdGVtKTsKICAgICAgICAgICAgfSwgMjAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlTWVudUl0ZW1MZWF2ZSgpIHsKICAgICAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuc3VibWVudSAmJiAhdGhpcy5zdWJtZW51Lm1hdGNoZXMoIjpob3ZlciIpKSB7CiAgICAgICAgICAgICAgdGhpcy5oaWRlU3VibWVudSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAzMDApOwogICAgICAgIH0KICAgICAgICBhc3luYyBzaG93U3VibWVudShtZW51SXRlbSkgewogICAgICAgICAgaWYgKCFtZW51SXRlbS5zdWJtZW51IHx8IG1lbnVJdGVtLnN1Ym1lbnUubGVuZ3RoID09PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW0iKSk7CiAgICAgICAgICBjb25zdCBtZW51SXRlbUVsZW1lbnQgPSBtZW51SXRlbXMuZmluZCgoZWwpID0+IGVsLnF1ZXJ5U2VsZWN0b3IoIi5tZW51aXRlbS10ZXh0Iik/LnRleHRDb250ZW50ID09PSBtZW51SXRlbS5uYW1lKTsKICAgICAgICAgIGlmICghbWVudUl0ZW1FbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnN1Ym1lbnUgPSBuZXcgRGVlc0NvbnRleHRtZW51MigpOwogICAgICAgICAgdGhpcy5zdWJtZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtLnN1Ym1lbnU7CiAgICAgICAgICB0aGlzLnN1Ym1lbnUucGFyZW50TWVudSA9IHRoaXM7CiAgICAgICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyhwYXJzZUludCh0aGlzLnN0eWxlLnpJbmRleCkgKyAxKTsKICAgICAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnRyYW5zZm9ybSA9ICJzY2FsZSgwLjk1KSI7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLnN1Ym1lbnUpOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgICAgICBjb25zdCBpdGVtUmVjdCA9IG1lbnVJdGVtRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IG1lbnVSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IHN1Ym1lbnVSZWN0ID0gdGhpcy5zdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICAgIGxldCBsZWZ0ID0gbWVudVJlY3QucmlnaHQgLSA0OwogICAgICAgICAgbGV0IHRvcCA9IGl0ZW1SZWN0LnRvcDsKICAgICAgICAgIGlmIChsZWZ0ICsgc3VibWVudVJlY3Qud2lkdGggPiB3aW5kb3dXaWR0aCAtIDEwKSB7CiAgICAgICAgICAgIGxlZnQgPSBtZW51UmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggKyA0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRvcCArIHN1Ym1lbnVSZWN0LmhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwKSB7CiAgICAgICAgICAgIHRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHN1Ym1lbnVSZWN0LmhlaWdodCAtIDEwOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDsKICAgICAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMSkiOwogICAgICAgICAgdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCAoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc3VibWVudS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmhhbmRsZU1lbnVJdGVtTGVhdmUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBoaWRlU3VibWVudSgpIHsKICAgICAgICAgIGlmICghdGhpcy5zdWJtZW51KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1lbnUuZGVzdHJveSgpOwogICAgICAgICAgdGhpcy5zdWJtZW51ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWluZykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmlzRGVzdHJveWluZyA9IHRydWU7CiAgICAgICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuc3VibWVudSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1lbnUuZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLnN1Ym1lbnUgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIgJiYgIXRoaXMucGFyZW50TWVudSkgewogICAgICAgICAgICB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICAgIHRoaXMuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCk7CiAgICAgICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogRGVzdHJveXMgdGhpcyBtZW51IGFuZCBhbGwgcGFyZW50IG1lbnVzIGluIHRoZSBjaGFpbgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGRlc3Ryb3lBbGwoKSB7CiAgICAgICAgICBsZXQgcm9vdE1lbnUgPSB0aGlzOwogICAgICAgICAgd2hpbGUgKHJvb3RNZW51LnBhcmVudE1lbnUpIHsKICAgICAgICAgICAgcm9vdE1lbnUgPSByb290TWVudS5wYXJlbnRNZW51OwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgcm9vdE1lbnUuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQ29udGV4dG1lbnUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgICBEZWVzQ29udGV4dG1lbnUuaW5pdGlhbGl6ZUdsb2JhbExpc3RlbmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLXdjY3Rvb2xzQDMuOC4wL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLXdjY3Rvb2xzL2Rpc3RfdHNfZGVtb3Rvb2xzL2RlbW90b29scy5qcwp2YXIgX19lc0RlY29yYXRlNiwgX19ydW5Jbml0aWFsaXplcnM3LCBEZWVzRGVtb1dyYXBwZXI7CnZhciBpbml0X2RlbW90b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtd2NjdG9vbHNAMy44LjAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtd2NjdG9vbHMvZGlzdF90c19kZW1vdG9vbHMvZGVtb3Rvb2xzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBfX2VzRGVjb3JhdGU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0RlbW9XcmFwcGVyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGVtb3dyYXBwZXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNEZW1vV3JhcHBlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU2KHRoaXMsIG51bGwsIF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJydW5BZnRlclJlbmRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicnVuQWZ0ZXJSZW5kZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucnVuQWZ0ZXJSZW5kZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5ydW5BZnRlclJlbmRlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzRGVtb1dyYXBwZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3KHRoaXMsIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IHJ1bkFmdGVyUmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBydW5BZnRlclJlbmRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHNsb3Q+PC9zbG90PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgNTApKTsKICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgaW4gcnVuQWZ0ZXJSZW5kZXI6IiwgZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzRGVtb1dyYXBwZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLXdjY3Rvb2xzQDMuOC4wL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLXdjY3Rvb2xzL2Rpc3RfdHNfZGVtb3Rvb2xzL2luZGV4LmpzCnZhciBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy13Y2N0b29sc0AzLjguMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy13Y2N0b29scy9kaXN0X3RzX2RlbW90b29scy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlbW90b29scygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmRlbW8uanMKdmFyIGRlbW9GdW5jMzsKdmFyIGluaXRfZGVlc19hcHB1aV9hY3Rpdml0eWxvZ19kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGRlbW9GdW5jMyA9ICgpID0+IHsKICAgICAgY29uc3QgYWN0aXZpdHlMb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIik7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGFjdGl2aXR5TG9nLmFkZE1hbnkoWwogICAgICAgICAgeyB0eXBlOiAibG9naW4iLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAibG9nZ2VkIGluIGZyb20gQ2hyb21lIG9uIG1hY09TIiB9LAogICAgICAgICAgeyB0eXBlOiAiY3JlYXRlIiwgdXNlcjogIkpvaG4gRG9lIiwgbWVzc2FnZTogJ2NyZWF0ZWQgYSBuZXcgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicgfSwKICAgICAgICAgIHsgdHlwZTogInVwZGF0ZSIsIHVzZXI6ICJKYW5lIFNtaXRoIiwgbWVzc2FnZTogInVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24iIH0sCiAgICAgICAgICB7IHR5cGU6ICJ2aWV3IiwgdXNlcjogIkpvaG4gRG9lIiwgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIiB9LAogICAgICAgICAgeyB0eXBlOiAiZGVsZXRlIiwgdXNlcjogIkFkbWluIiwgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIgfSwKICAgICAgICAgIHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJTeXN0ZW0iLCBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpkYXRhYmFzZSIgfSwKICAgICAgICAgIHsgdHlwZTogImxvZ291dCIsIHVzZXI6ICJBbGljZSBCcm93biIsIG1lc3NhZ2U6ICJsb2dnZWQgb3V0IiB9LAogICAgICAgICAgeyB0eXBlOiAiY3JlYXRlIiwgdXNlcjogIkphbmUgU21pdGgiLCBtZXNzYWdlOiAiY3JlYXRlZCBpbnZvaWNlICMxMjM0IiB9CiAgICAgICAgXSk7CiAgICAgICAgYWN0aXZpdHlMb2cuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiQWN0aXZpdHkgbG9nIHVwZGF0ZWQ6IiwgZW50cmllcy5sZW5ndGgsICJlbnRyaWVzIik7CiAgICAgICAgfSk7CiAgICAgIH0sIDEwMCk7CiAgICAgIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgJHthY3Rpdml0eUxvZ30KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cuanMKdmFyIF9fZXNEZWNvcmF0ZTcsIF9fcnVuSW5pdGlhbGl6ZXJzOCwgRGVlc0FwcHVpQWN0aXZpdHlsb2c7CnZhciBpbml0X2RlZXNfYXBwdWlfYWN0aXZpdHlsb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfYWN0aXZpdHlsb2dfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBcHB1aUFjdGl2aXR5bG9nID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2VudHJpZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9lbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9yczsKICAgICAgbGV0IF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWx0ZXJDcml0ZXJpYV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZW50cmllc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX2VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZW50cmllcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW50cmllc19pbml0aWFsaXplcnMsIF9lbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaFF1ZXJ5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hRdWVyeSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWFyY2hRdWVyeSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9maWx0ZXJDcml0ZXJpYV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJDcml0ZXJpYSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyQ3JpdGVyaWEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyQ3JpdGVyaWEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maWx0ZXJDcml0ZXJpYSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyQ3JpdGVyaWFfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXBwdWlBY3Rpdml0eWxvZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkFwcCBVSSJdOwogICAgICAgICNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2VudHJpZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAgICAgLy8gSU5TVEFOQ0UgUFJPUEVSVElFUwogICAgICAgIGdldCBlbnRyaWVzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVudHJpZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBzZWFyY2hRdWVyeSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VhcmNoUXVlcnkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZmlsdGVyQ3JpdGVyaWFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4KHRoaXMsIF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgZ2V0IGZpbHRlckNyaXRlcmlhKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmaWx0ZXJDcml0ZXJpYSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFJ4SlMgU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcwogICAgICAgIGVudHJpZXMkID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgICAgIC8vIFNUWUxFUwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBhbGlnbmVkIHdpdGggc2Vjb25kYXJ5IG1lbnUgKi8KICAgICAgICAtLWFjdGl2aXR5bG9nLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZy1tdXRlZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiIzczNzM3MyIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWJvcmRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctYWNjZW50OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzc4NzE2YyIsICIjYjVhOTlhIil9OwoKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgc2Fucy1zZXJpZjsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWFjdGl2aXR5bG9nLWJvcmRlcik7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMjgwcHg7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlciB3aXRoIHN0cmVhbWluZyBpbmRpY2F0b3IgKi8KICAgICAgLnRvcGJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWFjdGl2aXR5bG9nLWJvcmRlcik7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAudG9wYmFyIC5oZWFkaW5nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLmxpdmUtaW5kaWNhdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC5saXZlLWluZGljYXRvciAuZG90IHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjJjNTVlIiwgIiMyMmM1NWUiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMC41OyB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7IH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH0KICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgY29udGFpbmVyICovCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDhweDsKICAgICAgICBib3R0b206IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgICAgICBzY3JvbGxiYXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ0IiwgIiMzMzMzMzMiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjMzMzMzMzIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhM2EzYTMiLCAiIzUyNTI1MiIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHggMTZweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAvKiBEYXRlIHNlcGFyYXRvciAtIHdhcm0gdGF1cGUgc3R5bGluZyAqLwogICAgICAuZGF0ZS1zZXBhcmF0b3IgewogICAgICAgIHBhZGRpbmc6IDEycHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWFjY2VudCk7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGVudHJ5IC0gbW9kZXJuIHN0YWNrZWQgbGF5b3V0ICovCiAgICAgIC5hY3Rpdml0eWVudHJ5IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmFjdGl2aXR5ZW50cnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWhvdmVyKTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5sb2dpbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMzQsIDE5NywgOTQsIDAuMDgpIiwgInJnYmEoMzQsIDE5NywgOTQsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzE2YTM0YSIsICIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5sb2dvdXQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24udmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA4KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmNyZWF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTY4LCA4NSwgMjQ3LCAwLjA4KSIsICJyZ2JhKDE2OCwgODUsIDI0NywgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTMzM2VhIiwgIiNjMDg0ZmMiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnVwZGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjUxLCAxNDYsIDYwLCAwLjA4KSIsICJyZ2JhKDI1MSwgMTQ2LCA2MCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmRlbGV0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMDgpIiwgInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5jdXN0b20gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDEwMCwgMTE2LCAxMzksIDAuMDgpIiwgInJnYmEoMTAwLCAxMTYsIDEzOSwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiM5NGEzYjgiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXVzZXIgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAuYWN0aXZpdHktc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQoKICAgICAgLnRpbWVzdGFtcCB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLyogU2VhcmNoIGJveCAtIHJlZmluZWQgc3R5bGluZyAqLwogICAgICAuc2VhcmNoYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuc2VhcmNoLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkiKX07CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweCAwIDM0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAyKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLXdyYXBwZXI6aGFzKGlucHV0OmZvY3VzKSAuc2VhcmNoLWljb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIC8vIFJFTkRFUgogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKCk7CiAgICAgICAgICBjb25zdCBncm91cGVkRW50cmllcyA9IHRoaXMuZ3JvdXBFbnRyaWVzQnlEYXRlKGZpbHRlcmVkRW50cmllcyk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7ZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc3R5bGVzfQogICAgICA8c3R5bGU+PC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPkFjdGl2aXR5IExvZzwvZGl2PgogICAgICAgICAgJHtmaWx0ZXJlZEVudHJpZXMubGVuZ3RoID4gMCA/IGIyYDxkaXYgY2xhc3M9ImxpdmUtaW5kaWNhdG9yIj48c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+TGl2ZTwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eUNvbnRhaW5lciI+CiAgICAgICAgICAke2ZpbHRlcmVkRW50cmllcy5sZW5ndGggPT09IDAgPyBiMmA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gYWN0aXZpdHkgZW50cmllczwvZGl2PmAgOiBncm91cGVkRW50cmllcy5tYXAoKGdyb3VwKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0ZS1zZXBhcmF0b3IiPiR7Z3JvdXAubGFiZWx9PC9kaXY+CiAgICAgICAgICAgICAgICAgICR7Z3JvdXAuZW50cmllcy5tYXAoKGVudHJ5KSA9PiB0aGlzLnJlbmRlckFjdGl2aXR5RW50cnkoZW50cnkpKX0KICAgICAgICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaGJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InNlYXJjaC1pY29uIiAuaWNvbj0keyJsdWNpZGU6c2VhcmNoIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBhY3Rpdml0aWVzLCB1c2Vycy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0ke3RoaXMuaGFuZGxlU2VhcmNoSW5wdXR9CiAgICAgICAgICAgIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJBY3Rpdml0eUVudHJ5KGVudHJ5KSB7CiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gZW50cnkudGltZXN0YW1wIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZm9ybWF0VGltZSh0aW1lc3RhbXAyKTsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gZW50cnkuaWNvbk5hbWUgfHwgdGhpcy5nZXRJY29uRm9yVHlwZShlbnRyeS50eXBlKTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpdml0eWVudHJ5IgogICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBlbnRyeSl9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1pY29uICR7ZW50cnkudHlwZX0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2ljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1jb250ZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWhlYWRlciI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS11c2VyIj4ke2VudHJ5LnVzZXJ9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWN0aXZpdHktc2VwYXJhdG9yIj7Ctzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWVzdGFtcCI+JHt0aW1lU3RyfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktbWVzc2FnZSI+JHtlbnRyeS5tZXNzYWdlfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8vIEFQSSBNRVRIT0RTCiAgICAgICAgYWRkKGVudHJ5KSB7CiAgICAgICAgICBjb25zdCBuZXdFbnRyeSA9IHsKICAgICAgICAgICAgLi4uZW50cnksCiAgICAgICAgICAgIGlkOiBlbnRyeS5pZCB8fCB0aGlzLmdlbmVyYXRlSWQoKSwKICAgICAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmVudHJpZXMgPSBbbmV3RW50cnksIC4uLnRoaXMuZW50cmllc107CiAgICAgICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgICAgICB9CiAgICAgICAgYWRkTWFueShlbnRyaWVzKSB7CiAgICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgICAuLi5lbnRyeSwKICAgICAgICAgICAgaWQ6IGVudHJ5LmlkIHx8IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgICB0aW1lc3RhbXA6IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKQogICAgICAgICAgfSkpOwogICAgICAgICAgdGhpcy5lbnRyaWVzID0gWy4uLm5ld0VudHJpZXMucmV2ZXJzZSgpLCAuLi50aGlzLmVudHJpZXNdOwogICAgICAgICAgdGhpcy5lbnRyaWVzJC5uZXh0KHRoaXMuZW50cmllcyk7CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgdGhpcy5lbnRyaWVzID0gW107CiAgICAgICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgICAgICB9CiAgICAgICAgZ2V0RW50cmllcygpIHsKICAgICAgICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTsKICAgICAgICB9CiAgICAgICAgZmlsdGVyKGNyaXRlcmlhKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICAgICAgaWYgKGNyaXRlcmlhLnVzZXIgJiYgZW50cnkudXNlciAhPT0gY3JpdGVyaWEudXNlcikKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmIChjcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IGNyaXRlcmlhLnR5cGUpCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgICAgIGNvbnN0IGxvd2VyUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkgfHwgZW50cnkudXNlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyUXVlcnkpKTsKICAgICAgICB9CiAgICAgICAgLy8gUFJJVkFURSBIRUxQRVJTCiAgICAgICAgZ2VuZXJhdGVJZCgpIHsKICAgICAgICAgIHJldHVybiBgYWN0aXZpdHktJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gOwogICAgICAgIH0KICAgICAgICBnZXRGaWx0ZXJlZEVudHJpZXMoKSB7CiAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5lbnRyaWVzOwogICAgICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgICAgY29uc3QgbG93ZXJRdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSB8fCBlbnRyeS51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlciB8fCB0aGlzLmZpbHRlckNyaXRlcmlhLnR5cGUpIHsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyICYmIGVudHJ5LnVzZXIgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBncm91cEVudHJpZXNCeURhdGUoZW50cmllcykgewogICAgICAgICAgY29uc3QgZ3JvdXBzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgICAgbGV0IGxhYmVsOwogICAgICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXkoZGF0ZSwgdG9kYXkpKSB7CiAgICAgICAgICAgICAgbGFiZWwgPSAiVG9kYXkiOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNTYW1lRGF5KGRhdGUsIHllc3RlcmRheSkpIHsKICAgICAgICAgICAgICBsYWJlbCA9ICJZZXN0ZXJkYXkiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxhYmVsID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoImVuLVVTIiwgewogICAgICAgICAgICAgICAgbW9udGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBkYXk6ICJudW1lcmljIiwKICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdG9kYXkuZ2V0RnVsbFllYXIoKSA/ICJudW1lcmljIiA6IHZvaWQgMAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZ3JvdXBzLmhhcyhsYWJlbCkpIHsKICAgICAgICAgICAgICBncm91cHMuc2V0KGxhYmVsLCBbXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZ3JvdXBzLmdldChsYWJlbCkucHVzaChlbnRyeSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMuZW50cmllcygpKS5tYXAoKFtsYWJlbCwgZW50cmllczJdKSA9PiAoewogICAgICAgICAgICBsYWJlbCwKICAgICAgICAgICAgZW50cmllczogZW50cmllczIKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaXNTYW1lRGF5KGRhdGUxLCBkYXRlMikgewogICAgICAgICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiYgZGF0ZTEuZ2V0TW9udGgoKSA9PT0gZGF0ZTIuZ2V0TW9udGgoKSAmJiBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKTsKICAgICAgICB9CiAgICAgICAgZm9ybWF0VGltZShkYXRlKSB7CiAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgICAgICBob3VyOiAiMi1kaWdpdCIsCiAgICAgICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgICAgICBob3VyMTI6IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZ2V0SWNvbkZvclR5cGUodHlwZTUpIHsKICAgICAgICAgIGNvbnN0IGljb25zNiA9IHsKICAgICAgICAgICAgbG9naW46ICJsdWNpZGU6bG9nSW4iLAogICAgICAgICAgICBsb2dvdXQ6ICJsdWNpZGU6bG9nT3V0IiwKICAgICAgICAgICAgdmlldzogImx1Y2lkZTpleWUiLAogICAgICAgICAgICBjcmVhdGU6ICJsdWNpZGU6cGx1cyIsCiAgICAgICAgICAgIHVwZGF0ZTogImx1Y2lkZTplZGl0IiwKICAgICAgICAgICAgZGVsZXRlOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgICAgIGN1c3RvbTogImx1Y2lkZTphY3Rpdml0eSIKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gaWNvbnM2W3R5cGU1XSB8fCBpY29uczYuY3VzdG9tOwogICAgICAgIH0KICAgICAgICBoYW5kbGVTZWFyY2hJbnB1dChlMTEpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gdGFyZ2V0LnZhbHVlOwogICAgICAgIH0KICAgICAgICBoYW5kbGVDb250ZXh0TWVudShlMTEsIGVudHJ5KSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IGFjdGl2aXR5IiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke2VudHJ5LnVzZXJ9ICR7ZW50cnkubWVzc2FnZX1gKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiRmlsdGVyIGJ5IHVzZXIiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnVzZXIiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHsgdXNlcjogZW50cnkudXNlciB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJGaWx0ZXIgYnkgdHlwZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWEgPSB7IHR5cGU6IGVudHJ5LnR5cGUgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ2xlYXIgZmlsdGVycyIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6eCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0ge307CiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gIiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nL2luZGV4LmpzCnZhciBpbml0X2RlZXNfYXBwdWlfYWN0aXZpdHlsb2cyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYXBwdWlfYWN0aXZpdHlsb2coKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbnRlcmZhY2VzL3RhYi5qcwp2YXIgaW5pdF90YWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvaW50ZXJmYWNlcy90YWIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2ludGVyZmFjZXMvYXBwYmFybWVudWl0ZW0uanMKdmFyIGluaXRfYXBwYmFybWVudWl0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvaW50ZXJmYWNlcy9hcHBiYXJtZW51aXRlbS5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvaW50ZXJmYWNlcy9tZW51Z3JvdXAuanMKdmFyIGluaXRfbWVudWdyb3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2ludGVyZmFjZXMvbWVudWdyb3VwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbnRlcmZhY2VzL2FwcGNvbmZpZy5qcwp2YXIgaW5pdF9hcHBjb25maWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvaW50ZXJmYWNlcy9hcHBjb25maWcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2ludGVyZmFjZXMvc2Vjb25kYXJ5bWVudS5qcwp2YXIgaW5pdF9zZWNvbmRhcnltZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2ludGVyZmFjZXMvc2Vjb25kYXJ5bWVudS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbnRlcmZhY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfdGFiKCk7CiAgICBpbml0X2FwcGJhcm1lbnVpdGVtKCk7CiAgICBpbml0X21lbnVncm91cCgpOwogICAgaW5pdF9hcHBjb25maWcoKTsKICAgIGluaXRfc2Vjb25kYXJ5bWVudSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvZGVtby5qcwp2YXIgZGVtb0Z1bmM0Owp2YXIgaW5pdF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9jb21wb25lbnQoKTsKICAgIGRlbW9GdW5jNCA9ICgpID0+IHsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJGaWxlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiTmV3IEZpbGUiLCBzaG9ydGN1dDogIkNtZCtOIiwgaWNvbk5hbWU6ICJmaWxlLXBsdXMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJOZXcgZmlsZSIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIk9wZW4uLi4iLCBzaG9ydGN1dDogIkNtZCtPIiwgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4iKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJPcGVuIFJlY2VudCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB9LCBzdWJtZW51OiBbCiAgICAgICAgICAgICAgeyBuYW1lOiAicHJvamVjdC1hbHBoYS50cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcmVjZW50IDEiKSB9LAogICAgICAgICAgICAgIHsgbmFtZTogImNvbmZpZy5qc29uIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiByZWNlbnQgMiIpIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAicmVhZG1lLm1kIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiByZWNlbnQgMyIpIH0KICAgICAgICAgICAgXSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSIsIHNob3J0Y3V0OiAiQ21kK1MiLCBpY29uTmFtZTogInNhdmUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBcy4uLiIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIGFzIiksIGRpc2FibGVkOiB0cnVlIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJFeGl0Iiwgc2hvcnRjdXQ6ICJDbWQrUSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkV4aXQiKSB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRWRpdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICAgIHsgbmFtZTogIlVuZG8iLCBzaG9ydGN1dDogIkNtZCtaIiwgaWNvbk5hbWU6ICJ1bmRvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVW5kbyIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlJlZG8iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtaIiwgaWNvbk5hbWU6ICJyZWRvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVkbyIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJDdXQiLCBzaG9ydGN1dDogIkNtZCtYIiwgaWNvbk5hbWU6ICJzY2lzc29ycyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkN1dCIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkNvcHkiLCBzaG9ydGN1dDogIkNtZCtDIiwgaWNvbk5hbWU6ICJjb3B5IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29weSIpIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlBhc3RlIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUGFzdGUiKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiRmluZCIsIHNob3J0Y3V0OiAiQ21kK0YiLCBpY29uTmFtZTogInNlYXJjaCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZpbmQiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJSZXBsYWNlIiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIH0sCiAgICAgICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICAgIHsgbmFtZTogIlRvZ2dsZSBGdWxsc2NyZWVuIiwgc2hvcnRjdXQ6ICJGMTEiLCBpY29uTmFtZTogImV4cGFuZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZ1bGxzY3JlZW4iKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJab29tIEluIiwgc2hvcnRjdXQ6ICJDbWQrKyIsIGljb25OYW1lOiAiem9vbS1pbiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlpvb20gaW4iKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJab29tIE91dCIsIHNob3J0Y3V0OiAiQ21kKy0iLCBpY29uTmFtZTogInpvb20tb3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBvdXQiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJSZXNldCBab29tIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJUb2dnbGUgVGVybWluYWwiLCBzaG9ydGN1dDogIkNtZCtKIiwgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSB0ZXJtaW5hbCIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJSZWxlYXNlIE5vdGVzIiwgaWNvbk5hbWU6ICJmaWxlLXRleHQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWxlYXNlIG5vdGVzIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIlJlcG9ydCBJc3N1ZSIsIGljb25OYW1lOiAiYnVnIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0IGlzc3VlIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQWJvdXQiLCBpY29uTmFtZTogImluZm8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBYm91dCIpIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgICAgY29uc3QgYXBwYmFyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIik7CiAgICAgICAgY29uc3Qgc3RhdHVzQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLnN0YXR1cy10b2dnbGUgZGVlcy1idXR0b24iKTsKICAgICAgICBzdGF0dXNCdXR0b25zWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJvbmxpbmUiIH07CiAgICAgICAgfSk7CiAgICAgICAgc3RhdHVzQnV0dG9uc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGFwcGJhci51c2VyID0geyAuLi5hcHBiYXIudXNlciwgc3RhdHVzOiAiYnVzeSIgfTsKICAgICAgICB9KTsKICAgICAgICBzdGF0dXNCdXR0b25zWzJdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJhd2F5IiB9OwogICAgICAgIH0pOwogICAgICAgIHN0YXR1c0J1dHRvbnNbM10uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogIm9mZmxpbmUiIH07CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgd2luZG93Q29udHJvbHNCdXR0b24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3ctY29udHJvbHMtdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICAgICAgd2luZG93Q29udHJvbHNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBhcHBiYXIuc2hvd1dpbmRvd0NvbnRyb2xzID0gIWFwcGJhci5zaG93V2luZG93Q29udHJvbHM7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgYnJlYWRjcnVtYkJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi5icmVhZGNydW1iLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgICAgIGJyZWFkY3J1bWJCdXR0b25zWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkhvbWUgPiBEb2N1bWVudHMgPiBQcm9qZWN0cyA+IE15QXBwID4gc3JjID4gaW5kZXgudHMiOwogICAgICAgIH0pOwogICAgICAgIGJyZWFkY3J1bWJCdXR0b25zWzFdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkRhc2hib2FyZCI7CiAgICAgICAgfSk7CiAgICAgIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250ZW50IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRyb2wtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRyb2wtZ3JvdXAgbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1hcHB1aS1hcHBiYXIKICAgICAgICBpZD0iYXBwYmFyIgogICAgICAgIC5tZW51SXRlbXM9JHttZW51SXRlbXN9CiAgICAgICAgLmJyZWFkY3J1bWJzPSR7IlByb2plY3QgPiBzcmMgPiBjb21wb25lbnRzID4gQXBwQmFyLnRzIn0KICAgICAgICAuYnJlYWRjcnVtYlNlcGFyYXRvcj0keyIgPiAifQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0cnVlfQogICAgICAgIC5zaG93U2VhcmNoPSR7dHJ1ZX0KICAgICAgICAudGhlbWU9JHsiZGFyayJ9CiAgICAgICAgLnVzZXI9JHt7CiAgICAgICAgbmFtZTogIkpvaG4gRG9lIiwKICAgICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICAgIH19CiAgICAgICAgQG1lbnUtc2VsZWN0PSR7KGUxMSkgPT4gY29uc29sZS5sb2coIk1lbnUgc2VsZWN0ZWQ6IiwgZTExLmRldGFpbC5pdGVtKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJCcmVhZGNydW1iIGNsaWNrZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpID0+IGNvbnNvbGUubG9nKCJTZWFyY2ggY2xpY2tlZCIpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpID0+IGNvbnNvbGUubG9nKCJVc2VyIG1lbnUgY2xpY2tlZCIpfQogICAgICA+PC9kZWVzLWFwcHVpLWFwcGJhcj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxoMj5BcHAgQmFyIERlbW88L2gyPgogICAgICAgIDxwPlRoaXMgZGVtbyBzaG93cyB2YXJpb3VzIGZlYXR1cmVzIG9mIHRoZSBhcHAgYmFyIGNvbXBvbmVudDo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkR5bmFtaWMgbWVudSBpdGVtcyB3aXRoIGljb25zLCBzaG9ydGN1dHMsIGFuZCBzdWJtZW51czwvbGk+CiAgICAgICAgICA8bGk+QnJlYWRjcnVtYiBuYXZpZ2F0aW9uPC9saT4KICAgICAgICAgIDxsaT5Vc2VyIGFjY291bnQgc2VjdGlvbiB3aXRoIHN0YXR1cyBpbmRpY2F0b3I8L2xpPgogICAgICAgICAgPGxpPlNlYXJjaCBpY29uPC9saT4KICAgICAgICAgIDxsaT5XaW5kb3cgY29udHJvbHMgKHBsYXRmb3JtLXNwZWNpZmljKTwvbGk+CiAgICAgICAgICA8bGk+RGFyay9saWdodCB0aGVtZSBzdXBwb3J0PC9saT4KICAgICAgICAgIDxsaT5LZXlib2FyZCBuYXZpZ2F0aW9uIChUYWIsIEVudGVyLCBFc2NhcGUpPC9saT4KICAgICAgICAgIDxsaT5DdXN0b20gZXZlbnRzIGZvciBhbGwgaW50ZXJhY3Rpb25zPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5UaGVtZTwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9InRoZW1lLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5EYXJrPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkxpZ2h0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+VXNlciBTdGF0dXM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJzdGF0dXMtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk9ubGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5CdXN5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkF3YXk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+T2ZmbGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPldpbmRvdyBDb250cm9sczwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9IndpbmRvdy1jb250cm9scy10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+QnJlYWRjcnVtYnM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJicmVhZGNydW1iLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Mb25nIFBhdGg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2hvcnQgUGF0aDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvc3R5bGVzLmpzCnZhciBhcHB1aUFwcGJhclN0eWxlczsKdmFyIGluaXRfc3R5bGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvc3R5bGVzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBhcHB1aUFwcGJhclN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgdGhlbWluZyAqLwogICAgICAgIC0tYXBwYmFyLWhlaWdodDogNDBweDsKICAgICAgICAtLWFwcGJhci1mb250LXNpemU6IDEycHg7CiAgICAgICAgCiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogdmFyKC0tYXBwYmFyLWhlaWdodCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1hcHBiYXItZm9udC1zaXplKTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bzsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbmFsOiBTdHlsZSBmb3IgbWVudSBpdGVtcyB3aXRoIGljb25zIChub3QgdHlwaWNhbGx5IHVzZWQgZm9yIHRvcC1sZXZlbCBpdGVtcykgKi8KICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDEwIiwgIiNmZmZmZmYyMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAyMCIsICIjZmZmZmZmMzAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwODAiLCAiI2ZmZmZmZjgwIil9OwogICAgICB9CgoKICAgICAgLyogRHJvcGRvd24gc3R5bGVzICovCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwgIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24ub3BlbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW06aG92ZXIsCiAgICAgIC5kcm9wZG93bi1pdGVtLmZvY3VzZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAuZHJvcGRvd24tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbSAuc2hvcnRjdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC8qIEJyZWFkY3J1bWJzICovCiAgICAgIC5icmVhZGNydW1icyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1pdGVtIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1zZXBhcmF0b3IgewogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBBY2NvdW50IHNlY3Rpb24gKi8KICAgICAgLmFjY291bnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm86aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMjAiLCAiI2ZmZmZmZjMwIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogLTJweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub25saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNGNhZjUwOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub2ZmbGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzc1NzU3NTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmJ1c3kgewogICAgICAgIGJhY2tncm91bmQ6ICNmNDQzMzY7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5hd2F5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBsb2cgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuYWN0aXZpdHktdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDYwIiwgIiNmZmZmZmY2MCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMTUiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1iYWRnZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjNTI1MjUyIil9OwogICAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIGAKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci90ZW1wbGF0ZS5qcwp2YXIgcmVuZGVyQXBwdWlBcHBiYXI7CnZhciBpbml0X3RlbXBsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvdGVtcGxhdGUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIHJlbmRlckFwcHVpQXBwYmFyID0gKGNvbXBvbmVudCkgPT4gewogICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudXMiPgogICAgICAgICAgJHtjb21wb25lbnQuc2hvd1dpbmRvd0NvbnRyb2xzID8gYjJgPGRlZXMtd2luZG93Y29udHJvbHM+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPmAgOiAiIn0KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlck1lbnVJdGVtcygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzIj4KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlckJyZWFkY3J1bWJzKCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3VudCI+CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJBY2NvdW50U2VjdGlvbigpfQogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy13aW5kb3djb250cm9scy9kZWVzLXdpbmRvd2NvbnRyb2xzLmpzCnZhciBfX2VzRGVjb3JhdGU4LCBfX3J1bkluaXRpYWxpemVyczksIERlZXNXaW5kb3dDb250cm9sczsKdmFyIGluaXRfZGVlc193aW5kb3djb250cm9scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy13aW5kb3djb250cm9scy9kZWVzLXdpbmRvd2NvbnRyb2xzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzOSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dpbmRvd0NvbnRyb2xzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd2luZG93Y29udHJvbHMiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzV2luZG93Q29udHJvbHMyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX3Bvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF90eXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInR5cGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV2luZG93Q29udHJvbHMyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd2luZG93Y29udHJvbHM+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPmA7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIlV0aWxpdHkiXTsKICAgICAgICAjdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgIm1hYyIpOwogICAgICAgIC8vIEluc3RhbmNlCiAgICAgICAgZ2V0IHR5cGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmctbGVmdDogMTZweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2IHsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogIzIyMjIyMjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdi5jbG9zZSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmNWY1NzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYudG9Eb2NrIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZiZDJlOwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdi5taW5NYXggewogICAgICAgIGJhY2tncm91bmQ6ICMyN2M5M2Y7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXY6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLnR5cGUgPT09ICJtYWMiICYmIHRoaXMucG9zaXRpb24gPT09ICJsZWZ0IiB8fCAodGhpcy50eXBlID09PSAibGludXgiIHx8IHRoaXMudHlwZSA9PT0gIndpbmRvd3MiKSAmJiB0aGlzLnBvc2l0aW9uID09PSAicmlnaHQiID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IndpbmRvd0NvbnRyb2xzIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9Eb2NrIj48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtaW5NYXgiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXaW5kb3dDb250cm9sczIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duLmpzCnZhciBfX2VzRGVjb3JhdGU5LCBfX3J1bkluaXRpYWxpemVyczEwLCBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd247CnZhciBpbml0X2RlZXNfYXBwdWlfcHJvZmlsZWRyb3Bkb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24vZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24uanMiKCkgewogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTAgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93biA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93biIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfdXNlcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdXNlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21lbnVJdGVtc19kZWNvcmF0b3JzOwogICAgICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc09wZW5fZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc09wZW5faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNPcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9wb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3VzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfaXNPcGVuX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdXNlcl9pbml0aWFsaXplcnMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOSh0aGlzLCBudWxsLCBfaXNPcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNPcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzT3BlbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNPcGVuX2luaXRpYWxpemVycywgX2lzT3Blbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24KICAgICAgLnVzZXI9JHt7CiAgICAgICAgICBuYW1lOiAiSm9obiBEb2UiLAogICAgICAgICAgZW1haWw6ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsCiAgICAgICAgICBhdmF0YXI6ICJodHRwczovL3JhbmRvbXVzZXIubWUvYXBpL3BvcnRyYWl0cy9tZW4vMS5qcGciLAogICAgICAgICAgc3RhdHVzOiAib25saW5lIgogICAgICAgIH19CiAgICAgIC5tZW51SXRlbXM9JHtbCiAgICAgICAgICB7IG5hbWU6ICJQcm9maWxlIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgICAgICB7IG5hbWU6ICJBY2NvdW50IiwgaWNvbk5hbWU6ICJzZXR0aW5ncyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFjY291bnQiKSB9LAogICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICB7IG5hbWU6ICJIZWxwICYgU3VwcG9ydCIsIGljb25OYW1lOiAiaGVscENpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkhlbHAiKSB9LAogICAgICAgICAgeyBuYW1lOiAiS2V5Ym9hcmQgU2hvcnRjdXRzIiwgaWNvbk5hbWU6ICJrZXlib2FyZCIsIHNob3J0Y3V0OiAiQ21kK0siLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKSB9LAogICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgICAgXX0KICAgICAgLmlzT3Blbj0ke3RydWV9CiAgICA+PC9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bj4KICBgOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJBcHAgVUkiXTsKICAgICAgICAjdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfdXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IHVzZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdXNlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX2lzT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzT3BlbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc09wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzT3Blbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AtcmlnaHQiKSk7CiAgICAgICAgZ2V0IHBvc2l0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5vdmVybGF5LmRyb3Bkb3dufTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgdHJhbnNsYXRlWSgtMTBweCk7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2lzb3Blbl0pIC5kcm9wZG93biB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5iYWNrZHJvcCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogUG9zaXRpb24gdmFyaWFudHMgKi8KICAgICAgLmRyb3Bkb3duLnRvcC1yaWdodCB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLnRvcC1sZWZ0IHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5ib3R0b20tcmlnaHQgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICByaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5ib3R0b20tbGVmdCB7CiAgICAgICAgYm90dG9tOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAvKiBVc2VyIHNlY3Rpb24gKi8KICAgICAgLnVzZXItc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vbmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM0Y2FmNTA7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vZmZsaW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNzU3NTc1OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYnVzeSB7CiAgICAgICAgYmFja2dyb3VuZDogI2Y0NDMzNjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmF3YXkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjk4MDA7CiAgICAgIH0KCiAgICAgIC51c2VyLWRldGFpbHMgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAudXNlci1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC51c2VyLWVtYWlsIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLyogTWVudSBzZWN0aW9uICovCiAgICAgIC5tZW51LXNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICB9CgogICAgICAubWVudS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW06YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudS1pdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudS1zaG9ydGN1dCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OSIsICIjNjY2Iil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm1lbnUtZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAvKiBCYWNrZHJvcCBmb3IgbW9iaWxlICovCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5iYWNrZHJvcCB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5iYWNrZHJvcC5kcm9wZG93bn07CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtpc29wZW5dKSAuYmFja2Ryb3AgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgfQoKICAgICAgICAuZHJvcGRvd24gewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICByaWdodDogYXV0bzsKICAgICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuOTUpOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCk7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzJweCk7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtpc29wZW5dKSAuZHJvcGRvd24gewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImJhY2tkcm9wIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsb3NlKCl9PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93biAke3RoaXMucG9zaXRpb259Ij4KICAgICAgICAke3RoaXMudXNlciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1pbmZvIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWF2YXRhciI+CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5hdmF0YXIgPyBiMmA8aW1nIHNyYz0iJHt0aGlzLnVzZXIuYXZhdGFyfSIgYWx0PSIke3RoaXMudXNlci5uYW1lfSI+YCA6IHRoaXMuZ2V0SW5pdGlhbHModGhpcy51c2VyLm5hbWUpfQogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuc3RhdHVzID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItc3RhdHVzICR7dGhpcy51c2VyLnN0YXR1c30iPjwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItZGV0YWlscyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLW5hbWUiPiR7dGhpcy51c2VyLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5lbWFpbCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWVtYWlsIj4ke3RoaXMudXNlci5lbWFpbH08L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudS1zZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLnJlbmRlck1lbnVJdGVtKGl0ZW0pKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJNZW51SXRlbShpdGVtKSB7CiAgICAgICAgICBpZiAoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1lbnUtaXRlbSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0pfT4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJtZW51LWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ID8gYjJgCiAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1zaG9ydGN1dCI+JHttZW51SXRlbS5zaG9ydGN1dH08L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGdldEluaXRpYWxzKG5hbWUpIHsKICAgICAgICAgIHJldHVybiBuYW1lLnNwbGl0KCIgIikubWFwKChwYXJ0KSA9PiBwYXJ0WzBdKS5qb2luKCIiKS50b1VwcGVyQ2FzZSgpLnNsaWNlKDAsIDIpOwogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVNZW51Q2xpY2soaXRlbSkgewogICAgICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBvcGVuKCkgewogICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlOwogICAgICAgIH0KICAgICAgICBjbG9zZSgpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRvZ2dsZSgpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuOwogICAgICAgIH0KICAgICAgICAvLyBIYW5kbGUgY2xpY2tzIG91dHNpZGUgdGhlIGRyb3Bkb3duCiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2sgPSB0aGlzLmhhbmRsZU91dHNpZGVDbGljay5iaW5kKHRoaXMpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZU91dHNpZGVDbGljayk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spOwogICAgICAgIH0KICAgICAgICBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQpIHsKICAgICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5jb250YWlucyhldmVudC50YXJnZXQpKSB7CiAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93bjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlMTAsIF9fcnVuSW5pdGlhbGl6ZXJzMTEsIERlZXNBcHB1aUJhcjsKdmFyIGluaXRfY29tcG9uZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9pbnRlcmZhY2VzNCgpOwogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF9kZW1vKCk7CiAgICBpbml0X3N0eWxlcygpOwogICAgaW5pdF90ZW1wbGF0ZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc193aW5kb3djb250cm9scygpOwogICAgaW5pdF9kZWVzX2FwcHVpX3Byb2ZpbGVkcm9wZG93bigpOwogICAgX19lc0RlY29yYXRlMTAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMxMSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0FwcHVpQmFyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYXBwYmFyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9icmVhZGNydW1ic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9icmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICAgICAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdXNlcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdXNlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd1NlYXJjaF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93U2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQWN0aXZlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlTWVudV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2ZU1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlTWVudV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX29wZW5Ecm9wZG93bnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX29wZW5Ecm9wZG93bnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9mb2N1c2VkSXRlbV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZvY3VzZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBcHB1aUJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9tZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9icmVhZGNydW1ic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9icmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfdXNlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgICAgIF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2FjdGl2aXR5TG9nQWN0aXZlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9hY3RpdmVNZW51X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfb3BlbkRyb3Bkb3duc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2ZvY3VzZWRJdGVtX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJyZWFkY3J1bWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1icyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5icmVhZGNydW1icywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9icmVhZGNydW1ic19pbml0aWFsaXplcnMsIF9icmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJicmVhZGNydW1iU2VwYXJhdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1iU2VwYXJhdG9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJyZWFkY3J1bWJTZXBhcmF0b3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5icmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9icmVhZGNydW1iU2VwYXJhdG9yX2luaXRpYWxpemVycywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93V2luZG93Q29udHJvbHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dXaW5kb3dDb250cm9scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V2luZG93Q29udHJvbHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMsIF9zaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdXNlcl9pbml0aWFsaXplcnMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2ZpbGVNZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2ZpbGVNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJvZmlsZU1lbnVJdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Byb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfcHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93U2VhcmNoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93U2VhcmNoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93U2VhcmNoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2VhcmNoX2luaXRpYWxpemVycywgX3Nob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93QWN0aXZpdHlMb2dUb2dnbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dBY3Rpdml0eUxvZ1RvZ2dsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9pbml0aWFsaXplcnMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWN0aXZpdHlMb2dDb3VudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlMb2dDb3VudF9pbml0aWFsaXplcnMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ0FjdGl2ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dBY3RpdmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dBY3RpdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3Rpdml0eUxvZ0FjdGl2ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlMb2dBY3RpdmVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2ZU1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZlTWVudSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlTWVudSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVNZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWN0aXZlTWVudSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlTWVudV9pbml0aWFsaXplcnMsIF9hY3RpdmVNZW51X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5Ecm9wZG93bnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5Ecm9wZG93bnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkRyb3Bkb3ducywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm9wZW5Ecm9wZG93bnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wZW5Ecm9wZG93bnNfaW5pdGlhbGl6ZXJzLCBfb3BlbkRyb3Bkb3duc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfZm9jdXNlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9jdXNlZEl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvY3VzZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZm9jdXNlZEl0ZW0gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycywgX2ZvY3VzZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZvY3VzZWREcm9wZG93bkl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWREcm9wZG93bkl0ZW0iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZm9jdXNlZERyb3Bkb3duSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmZvY3VzZWREcm9wZG93bkl0ZW0gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzLCBfZm9jdXNlZERyb3Bkb3duSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvZmlsZURyb3Bkb3duT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9maWxlRHJvcGRvd25PcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvZmlsZURyb3Bkb3duT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXBwdWlCYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJBcHAgVUkiXTsKICAgICAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAgICAgLy8gSU5TVEFOQ0UgUFJPUEVSVElFUwogICAgICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2JyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYnNfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBicmVhZGNydW1icygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYnJlYWRjcnVtYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsICIgPiAiKSk7CiAgICAgICAgZ2V0IGJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2JyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IHNob3dXaW5kb3dDb250cm9scygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dXaW5kb3dDb250cm9scyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3VzZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgdXNlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB1c2VyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgcHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd1NlYXJjaCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93U2VhcmNoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfc2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgLy8gQWN0aXZpdHkgbG9nIHRvZ2dsZQogICAgICAgIGdldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93QWN0aXZpdHlMb2dUb2dnbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY3Rpdml0eUxvZ0FjdGl2ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQ291bnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGFjdGl2aXR5TG9nQWN0aXZlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3Rpdml0eUxvZ0FjdGl2ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY3RpdmVNZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3RpdmVNZW51X2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIC8vIFNUQVRFCiAgICAgICAgZ2V0IGFjdGl2ZU1lbnUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZlTWVudV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWN0aXZlTWVudSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2ZU1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI29wZW5Ecm9wZG93bnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3RpdmVNZW51X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfb3BlbkRyb3Bkb3duc19pbml0aWFsaXplcnMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpKTsKICAgICAgICBnZXQgb3BlbkRyb3Bkb3ducygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcGVuRHJvcGRvd25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGZvY3VzZWRJdGVtKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmb2N1c2VkSXRlbSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZvY3VzZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2luaXRpYWxpemVycywgLTEpKTsKICAgICAgICBnZXQgZm9jdXNlZERyb3Bkb3duSXRlbSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmb2N1c2VkRHJvcGRvd25JdGVtKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZm9jdXNlZERyb3Bkb3duSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNQcm9maWxlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZERyb3Bkb3duSXRlbV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzUHJvZmlsZURyb3Bkb3duT3BlbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc1Byb2ZpbGVEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzUHJvZmlsZURyb3Bkb3duT3Blbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gYXBwdWlBcHBiYXJTdHlsZXM7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gcmVuZGVyQXBwdWlBcHBiYXIodGhpcyk7CiAgICAgICAgfQogICAgICAgIHJlbmRlck1lbnVJdGVtcygpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJNZW51SXRlbShpdGVtLCBgbWVudS0ke2luZGV4Mn1gKSl9CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJNZW51SXRlbShpdGVtLCBpdGVtSWQpIHsKICAgICAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkOwogICAgICAgICAgY29uc3QgaGFzU3VibWVudSA9IG1lbnVJdGVtLnN1Ym1lbnUgJiYgbWVudUl0ZW0uc3VibWVudS5sZW5ndGggPiAwOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNBY3RpdmUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgICAgZGF0YS1pdGVtLWlkPSIke2l0ZW1JZH0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1lbnVLZXlkb3duKGUxMSwgbWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgYXJpYS1oYXNwb3B1cD0iJHtoYXNTdWJtZW51fSIKICAgICAgICBhcmlhLWV4cGFuZGVkPSIke2lzQWN0aXZlfSIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICR7bWVudUl0ZW0ubmFtZX0KICAgICAgICAke2hhc1N1Ym1lbnUgPyB0aGlzLnJlbmRlckRyb3Bkb3duKG1lbnVJdGVtLnN1Ym1lbnUsIGl0ZW1JZCwgaXNBY3RpdmUpIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyRHJvcGRvd24oaXRlbXMsIHBhcmVudElkLCBpc09wZW4pIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiAKICAgICAgICBjbGFzcz0iZHJvcGRvd24gJHtpc09wZW4gPyAib3BlbiIgOiAiIn0iIAogICAgICAgIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0KICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcGRvd25LZXlkb3duKGUxMSwgaXRlbXMsIHBhcmVudElkKX0KICAgICAgICB0YWJpbmRleD0iJHtpc09wZW4gPyAwIDogLTF9IgogICAgICAgIHJvbGU9Im1lbnUiCiAgICAgID4KICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiB0aGlzLnJlbmRlckRyb3Bkb3duSXRlbShpdGVtLCBgJHtwYXJlbnRJZH0tJHtpbmRleDJ9YCkpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckRyb3Bkb3duSXRlbShpdGVtLCBpdGVtSWQpIHsKICAgICAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBwYXJzZUludChpdGVtSWQuc3BsaXQoIi0iKS5wb3AoKSB8fCAiMCIpOwogICAgICAgICAgY29uc3QgaXNGb2N1c2VkID0gdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID09PSBpdGVtSW5kZXg7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZHJvcGRvd24taXRlbSAke2lzRm9jdXNlZCA/ICJmb2N1c2VkIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKG1lbnVJdGVtKX0KICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGl0ZW1JbmRleH0KICAgICAgICByb2xlPSJtZW51aXRlbSIKICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgID4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3Bhbj4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICR7bWVudUl0ZW0uc2hvcnRjdXQgPyBiMmA8c3BhbiBjbGFzcz0ic2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJCcmVhZGNydW1icygpIHsKICAgICAgICAgIGlmICghdGhpcy5icmVhZGNydW1icykgewogICAgICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5icmVhZGNydW1icy5zcGxpdCh0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3IpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke3BhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAke2luZGV4MiA+IDAgPyBiMmA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPiR7dGhpcy5icmVhZGNydW1iU2VwYXJhdG9yfTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPHNwYW4gCiAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIiAKICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQnJlYWRjcnVtYkNsaWNrKHBhcnQsIGluZGV4Mil9CiAgICAgICAgPgogICAgICAgICAgJHtwYXJ0fQogICAgICAgIDwvc3Bhbj4KICAgICAgYCl9CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJBY2NvdW50U2VjdGlvbigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLnNob3dTZWFyY2ggPyBiMmAKICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICBjbGFzcz0ic2VhcmNoLWljb24iCiAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6c2VhcmNoIn0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2VhcmNoQ2xpY2t9CiAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICBgIDogIiJ9CiAgICAgICR7dGhpcy51c2VyID8gYjJgCiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iIEBjbGljaz0ke3RoaXMuaGFuZGxlVXNlckNsaWNrfT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhciA/IGIyYDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gIDogYjJgJHt0aGlzLnVzZXIubmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX1gfQogICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cyA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHNwYW4+JHt0aGlzLnVzZXIubmFtZX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAgICAgICAudXNlcj0ke3RoaXMudXNlcn0KICAgICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMucHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAgICAgLmlzT3Blbj0ke3RoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVufQogICAgICAgICAgICAucG9zaXRpb249JHsidG9wLXJpZ2h0In0KICAgICAgICAgICAgQG1lbnUtc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVQcm9maWxlTWVudVNlbGVjdChlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgICAgJHt0aGlzLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSA/IGIyYAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhY3Rpdml0eS10b2dnbGUgJHt0aGlzLmFjdGl2aXR5TG9nQWN0aXZlID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUFjdGl2aXR5VG9nZ2xlfQogICAgICAgICAgdGl0bGU9IkFjdGl2aXR5IExvZyIKICAgICAgICA+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTphY3Rpdml0eSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgJHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiAwID8gYjJgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1iYWRnZSI+JHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiA5OSA/ICI5OSsiIDogdGhpcy5hY3Rpdml0eUxvZ0NvdW50fTwvc3Bhbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgLy8gRXZlbnQgaGFuZGxlcnMKICAgICAgICBoYW5kbGVNZW51Q2xpY2soaXRlbSwgaXRlbUlkKSB7CiAgICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKGl0ZW0uc3VibWVudSAmJiBpdGVtLnN1Ym1lbnUubGVuZ3RoID4gMCkgewogICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQpIHsKICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IGl0ZW1JZDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7CiAgICAgICAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVEcm9wZG93bkl0ZW1DbGljayhpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgIGlmIChpdGVtLmFjdGlvbikgewogICAgICAgICAgICBpdGVtLmFjdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZU1lbnVLZXlkb3duKGUxMSwgaXRlbSwgaXRlbUlkKSB7CiAgICAgICAgICBzd2l0Y2ggKGUxMS5rZXkpIHsKICAgICAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgICAgICBjYXNlICIgIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1lbnVDbGljayhpdGVtLCBpdGVtSWQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgICAgIGlmIChpdGVtLnN1Ym1lbnUgJiYgdGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQpIHsKICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gMDsKICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsaWRJdGVtID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtLnN1Ym1lbnUsIC0xLCAxKTsKICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbGlkSXRlbSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RWYWxpZEl0ZW07CiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wZG93bi5vcGVuIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duKSB7CiAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bi5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gLTE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlRhYiI6CiAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJBcnJvd1JpZ2h0IjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKGl0ZW1JZCwgMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHRNZW51SXRlbShpdGVtSWQsIC0xKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQnJlYWRjcnVtYkNsaWNrKGJyZWFkY3J1bWIsIGluZGV4MikgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYnJlYWRjcnVtYi1uYXZpZ2F0ZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IGJyZWFkY3J1bWIsIGluZGV4OiBpbmRleDIgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlU2VhcmNoQ2xpY2soKSB7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtY2xpY2siLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUFjdGl2aXR5VG9nZ2xlKCkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aXZpdHktdG9nZ2xlIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVVc2VyQ2xpY2soKSB7CiAgICAgICAgICB0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3BlbjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInVzZXItbWVudS1vcGVuIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVQcm9maWxlTWVudVNlbGVjdChlMTEpIHsKICAgICAgICAgIHRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9maWxlLW1lbnUtc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIC8vIExpZmVjeWNsZQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUdsb2JhbENsaWNrKTsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spOwogICAgICAgIH0KICAgICAgICBoYW5kbGVHbG9iYWxDbGljayA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfSk7CiAgICAgICAgaGFuZGxlRG9jdW1lbnRDbGljayA9ICgpID0+IHsKICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICB9OwogICAgICAgIGhhbmRsZURyb3Bkb3duS2V5ZG93bihlMTEsIGl0ZW1zLCBfcGFyZW50SWQpIHsKICAgICAgICAgIGNvbnN0IHZhbGlkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSk7CiAgICAgICAgICBzd2l0Y2ggKGUxMS5rZXkpIHsKICAgICAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sIDEpOwogICAgICAgICAgICAgIGlmIChuZXh0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBuZXh0SW5kZXg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sIC0xKTsKICAgICAgICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gcHJldkluZGV4OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gIT09IC0xKSB7CiAgICAgICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHZhbGlkSXRlbXNbdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtXTsKICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiAiYWN0aW9uIiBpbiBmb2N1c2VkSXRlbSAmJiAhZm9jdXNlZEl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhmb2N1c2VkSXRlbSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJIb21lIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgLTEsIDEpOwogICAgICAgICAgICAgIGlmIChmaXJzdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RJbmRleDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkVuZCI6CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgaXRlbXMubGVuZ3RoLCAtMSk7CiAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGxhc3RJbmRleDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yKGAubWVudUl0ZW0uYWN0aXZlYCk7CiAgICAgICAgICAgICAgaWYgKG1lbnVJdGVtKSB7CiAgICAgICAgICAgICAgICBtZW51SXRlbS5mb2N1cygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIGN1cnJlbnRJbmRleCwgZGlyZWN0aW9uKSB7CiAgICAgICAgICBsZXQgaW5kZXgyID0gY3VycmVudEluZGV4ICsgZGlyZWN0aW9uOwogICAgICAgICAgd2hpbGUgKGluZGV4MiA+PSAwICYmIGluZGV4MiA8IGl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXgyXTsKICAgICAgICAgICAgaWYgKCEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSAmJiAhKCJkaXNhYmxlZCIgaW4gaXRlbSAmJiBpdGVtLmRpc2FibGVkKSkgewogICAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kZXgyICs9IGRpcmVjdGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgZm9jdXNOZXh0TWVudUl0ZW0oY3VycmVudEl0ZW1JZCwgZGlyZWN0aW9uKSB7CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudUl0ZW0iKSk7CiAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWlkIikgPT09IGN1cnJlbnRJdGVtSWQpOwogICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGxldCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247CiAgICAgICAgICBpZiAobmV4dEluZGV4IDwgMCkgewogICAgICAgICAgICBuZXh0SW5kZXggPSBtZW51SXRlbXMubGVuZ3RoIC0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEluZGV4ID49IG1lbnVJdGVtcy5sZW5ndGgpIHsKICAgICAgICAgICAgbmV4dEluZGV4ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBhdHRlbXB0cyA9IDA7CiAgICAgICAgICB3aGlsZSAoYXR0ZW1wdHMgPCBtZW51SXRlbXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IG5leHRJdGVtID0gbWVudUl0ZW1zW25leHRJbmRleF07CiAgICAgICAgICAgIGlmICghbmV4dEl0ZW0uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSB7CiAgICAgICAgICAgICAgbmV4dEl0ZW0uZm9jdXMoKTsKICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVNZW51KSB7CiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHRJbmRleCA9IChuZXh0SW5kZXggKyBkaXJlY3Rpb24gKyBtZW51SXRlbXMubGVuZ3RoKSAlIG1lbnVJdGVtcy5sZW5ndGg7CiAgICAgICAgICAgIGF0dGVtcHRzKys7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczExKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQXBwdWlCYXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2FwcHVpX2FwcGJhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWJvdHRvbWJhci9kZWVzLWFwcHVpLWJvdHRvbWJhci5kZW1vLmpzCnZhciBfYSwgZGVtb0Z1bmM1Owp2YXIgaW5pdF9kZWVzX2FwcHVpX2JvdHRvbWJhcl9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgZGVtb0Z1bmM1ID0gKCkgPT4gewogICAgICByZXR1cm4gYjIoX2EgfHwgKF9hID0gX190ZW1wbGF0ZShbYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICB9CgogICAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjNzM3MzczOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWJvdHRvbWJhci13cmFwcGVyIHsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGhzbCgwIDAlIDIwJSk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWxhYmVsIj5Cb3R0b20gYmFyIHdpdGggc3RhdHVzIHdpZGdldHMgYW5kIGFjdGlvbnM8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tYm90dG9tYmFyLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1hcHB1aS1ib3R0b21iYXIKICAgICAgICAgICAgICBpZD0iZGVtby1ib3R0b21iYXIiCiAgICAgICAgICAgID48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWxhYmVsIj5Db250cm9sczwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtd3JhcDogd3JhcDsiPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFN1Y2Nlc3NXaWRnZXQoKSI+QWRkIFN1Y2Nlc3MgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkV2FybmluZ1dpZGdldCgpIj5BZGQgV2FybmluZyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRFcnJvcldpZGdldCgpIj5BZGQgRXJyb3IgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkTG9hZGluZ1dpZGdldCgpIj5BZGQgTG9hZGluZyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRSaWdodFdpZGdldCgpIj5BZGQgUmlnaHQgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkQWN0aW9uKCkiPkFkZCBBY3Rpb248L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJjbGVhckFsbCgpIj5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHNjcmlwdCB0eXBlPSJtb2R1bGUiPgogICAgICAgIGNvbnN0IGJvdHRvbWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZW1vLWJvdHRvbWJhcicpOwoKICAgICAgICAvLyBXYWl0IGZvciBjb21wb25lbnQgdG8gaW5pdGlhbGl6ZQogICAgICAgIGF3YWl0IGJvdHRvbWJhci51cGRhdGVDb21wbGV0ZTsKCiAgICAgICAgLy8gQWRkIGluaXRpYWwgd2lkZ2V0cwogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICdzdGF0dXMnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YWN0aXZpdHknLAogICAgICAgICAgbGFiZWw6ICdTeXN0ZW0gT25saW5lJywKICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgdG9vbHRpcDogJ0FsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsJywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdTdGF0dXMgY2xpY2tlZCcpLAogICAgICAgICAgY29udGV4dE1lbnVJdGVtczogWwogICAgICAgICAgICB7IG5hbWU6ICdWaWV3IERldGFpbHMnLCBpY29uTmFtZTogJ2x1Y2lkZTppbmZvJywgYWN0aW9uOiAoKSA9PiBhbGVydCgnU3lzdGVtIGRldGFpbHMnKSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAnUmVmcmVzaCBTdGF0dXMnLCBpY29uTmFtZTogJ2x1Y2lkZTpyZWZyZXNoQ3cnLCBhY3Rpb246ICgpID0+IGFsZXJ0KCdSZWZyZXNoaW5nLi4uJykgfSwKICAgICAgICAgIF0sCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICdub3RpZmljYXRpb25zJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmJlbGwnLAogICAgICAgICAgbGFiZWw6ICczIG5vdGlmaWNhdGlvbnMnLAogICAgICAgICAgc3RhdHVzOiAnd2FybmluZycsCiAgICAgICAgICB0b29sdGlwOiAnWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ05vdGlmaWNhdGlvbnMgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAndmVyc2lvbicsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpnaXRCcmFuY2gnLAogICAgICAgICAgbGFiZWw6ICd2MS4yLjMnLAogICAgICAgICAgdG9vbHRpcDogJ0N1cnJlbnQgdmVyc2lvbicsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdWZXJzaW9uIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgLy8gQWRkIGluaXRpYWwgYWN0aW9ucwogICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgaWQ6ICdzZXR0aW5ncycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpzZXR0aW5ncycsCiAgICAgICAgICB0b29sdGlwOiAnU2V0dGluZ3MnLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBhbGVydCgnU2V0dGluZ3MgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgIGlkOiAnaGVscCcsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpoZWxwQ2lyY2xlJywKICAgICAgICAgIHRvb2x0aXA6ICdIZWxwJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gYWxlcnQoJ0hlbHAgY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICAvLyBEZW1vIGNvbnRyb2wgZnVuY3Rpb25zCiAgICAgICAgbGV0IHdpZGdldENvdW50ZXIgPSAwOwogICAgICAgIGxldCBhY3Rpb25Db3VudGVyID0gMDsKCiAgICAgICAgd2luZG93LmFkZFN1Y2Nlc3NXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdzdWNjZXNzLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpjaGVja0NpcmNsZScsCiAgICAgICAgICAgIGxhYmVsOiAnU3VjY2VzcyAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICAgIHRvb2x0aXA6ICdTdWNjZXNzIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3N1Y2Nlc3MtJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZFdhcm5pbmdXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICd3YXJuaW5nLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTphbGVydFRyaWFuZ2xlJywKICAgICAgICAgICAgbGFiZWw6ICdXYXJuaW5nICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICd3YXJuaW5nJywKICAgICAgICAgICAgdG9vbHRpcDogJ1dhcm5pbmcgd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnd2FybmluZy0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkRXJyb3JXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdlcnJvci0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6eENpcmNsZScsCiAgICAgICAgICAgIGxhYmVsOiAnRXJyb3IgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJywKICAgICAgICAgICAgdG9vbHRpcDogJ0Vycm9yIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ2Vycm9yLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRMb2FkaW5nV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgY29uc3QgaWQgPSAnbG9hZGluZy0nICsgd2lkZ2V0Q291bnRlcjsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogaWQsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmxvYWRlcjInLAogICAgICAgICAgICBsYWJlbDogJ0xvYWRpbmcuLi4nLAogICAgICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLAogICAgICAgICAgICBsb2FkaW5nOiB0cnVlLAogICAgICAgICAgICB0b29sdGlwOiAnTG9hZGluZyBpbiBwcm9ncmVzcycsCiAgICAgICAgICB9KTsKCiAgICAgICAgICAvLyBTaW11bGF0ZSBjb21wbGV0aW9uIGFmdGVyIDMgc2Vjb25kcwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGJvdHRvbWJhci51cGRhdGVXaWRnZXQoaWQsIHsKICAgICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpjaGVjaycsCiAgICAgICAgICAgICAgbGFiZWw6ICdEb25lIScsCiAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZFJpZ2h0V2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAncmlnaHQtJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmluZm8nLAogICAgICAgICAgICBsYWJlbDogJ1JpZ2h0ICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgncmlnaHQtJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZEFjdGlvbiA9ICgpID0+IHsKICAgICAgICAgIGFjdGlvbkNvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgICBpZDogJ2FjdGlvbi0nICsgYWN0aW9uQ291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6emFwJywKICAgICAgICAgICAgdG9vbHRpcDogJ0FjdGlvbiAnICsgYWN0aW9uQ291bnRlciwKICAgICAgICAgICAgb25DbGljazogKCkgPT4gewogICAgICAgICAgICAgIGFsZXJ0KCdBY3Rpb24gJyArIGFjdGlvbkNvdW50ZXIgKyAnIGNsaWNrZWQnKTsKICAgICAgICAgICAgICBib3R0b21iYXIucmVtb3ZlQWN0aW9uKCdhY3Rpb24tJyArIGFjdGlvbkNvdW50ZXIpOwogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmNsZWFyQWxsID0gKCkgPT4gewogICAgICAgICAgYm90dG9tYmFyLmNsZWFyV2lkZ2V0cygpOwogICAgICAgICAgYm90dG9tYmFyLmNsZWFyQWN0aW9ucygpOwogICAgICAgICAgd2lkZ2V0Q291bnRlciA9IDA7CiAgICAgICAgICBhY3Rpb25Db3VudGVyID0gMDsKICAgICAgICB9OwogICAgICA8XC9zY3JpcHQ+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuanMKdmFyIF9fZXNEZWNvcmF0ZTExLCBfX3J1bkluaXRpYWxpemVyczEyLCBEZWVzQXBwdWlCb3R0b21iYXI7CnZhciBpbml0X2RlZXNfYXBwdWlfYm90dG9tYmFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGVlc19hcHB1aV9ib3R0b21iYXJfZGVtbygpOwogICAgX19lc0RlY29yYXRlMTEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMxMiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0FwcHVpQm90dG9tYmFyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYm90dG9tYmFyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF93aWRnZXRzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfd2lkZ2V0c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FwcHVpQm90dG9tYmFyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3dpZGdldHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9hY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMSh0aGlzLCBudWxsLCBfd2lkZ2V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3aWRnZXRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3aWRnZXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndpZGdldHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai53aWRnZXRzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTEodGhpcywgbnVsbCwgX2FjdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWN0aW9ucyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aW9uc19pbml0aWFsaXplcnMsIF9hY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTExKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNBcHB1aUJvdHRvbWJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzU7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkFwcCBVSSJdOwogICAgICAgICN3aWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczEyKHRoaXMsIF93aWRnZXRzX2luaXRpYWxpemVycywgW10pOwogICAgICAgIC8vIElOU1RBTkNFIFBST1BFUlRJRVMKICAgICAgICBnZXQgd2lkZ2V0cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3aWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB3aWRnZXRzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEyKHRoaXMsIF9hY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgYWN0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3Rpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLmJvdHRvbS1iYXIgewogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCAiaHNsKDAgMCUgNiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLndpZGdldDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCBkZWVzLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAud2lkZ2V0LXNlcGFyYXRvciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICAvKiBTdGF0dXMgY29sb3JzIG1hdGNoaW5nIGRlZXMtd29ya3NwYWNlLWJvdHRvbWJhciAqLwogICAgICAud2lkZ2V0LmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5zdWNjZXNzIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDM1JSkiLCAiaHNsKDE0MiA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5zcGlubmluZyB7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRpc2FibGVkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgbGVmdFdpZGdldHMgPSB0aGlzLndpZGdldHMuZmlsdGVyKCh3NCkgPT4gdzQucG9zaXRpb24gIT09ICJyaWdodCIpLnNvcnQoKGE1LCBiNSkgPT4gKGE1Lm9yZGVyIHx8IDApIC0gKGI1Lm9yZGVyIHx8IDApKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHc0KSA9PiB3NC5wb3NpdGlvbiA9PT0gInJpZ2h0Iikuc29ydCgoYTUsIGI1KSA9PiAoYTUub3JkZXIgfHwgMCkgLSAoYjUub3JkZXIgfHwgMCkpOwogICAgICAgICAgY29uc3QgbGVmdEFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUucG9zaXRpb24gPT09ICJsZWZ0Iik7CiAgICAgICAgICBjb25zdCByaWdodEFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUucG9zaXRpb24gIT09ICJsZWZ0Iik7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS1iYXIiPgogICAgICAgIDwhLS0gTGVmdCBhY3Rpb25zIC0tPgogICAgICAgICR7bGVmdEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHRoaXMucmVuZGVyQWN0aW9uKGFjdGlvbikpfQoKICAgICAgICA8IS0tIExlZnQgd2lkZ2V0cyAtLT4KICAgICAgICAke2xlZnRXaWRnZXRzLm1hcCgod2lkZ2V0LCBpbmRleDIpID0+IGIyYAogICAgICAgICAgJHtpbmRleDIgPiAwIHx8IGxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCl9CiAgICAgICAgYCl9CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gUmlnaHQgd2lkZ2V0cyAtLT4KICAgICAgICAke3JpZ2h0V2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICR7dGhpcy5yZW5kZXJXaWRnZXQod2lkZ2V0KX0KICAgICAgICAgICR7aW5kZXgyIDwgcmlnaHRXaWRnZXRzLmxlbmd0aCAtIDEgfHwgcmlnaHRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgYCl9CgogICAgICAgIDwhLS0gUmlnaHQgYWN0aW9ucyAtLT4KICAgICAgICAke3JpZ2h0QWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gdGhpcy5yZW5kZXJBY3Rpb24oYWN0aW9uKSl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyV2lkZ2V0KHdpZGdldCkgewogICAgICAgICAgY29uc3Qgc3RhdHVzQ2xhc3MgPSB3aWRnZXQuc3RhdHVzICYmIHdpZGdldC5zdGF0dXMgIT09ICJpZGxlIiA/IHdpZGdldC5zdGF0dXMgOiAiIjsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gd2lkZ2V0Lmljb25OYW1lID8gd2lkZ2V0Lmljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IHdpZGdldC5pY29uTmFtZSA6IGBsdWNpZGU6JHt3aWRnZXQuaWNvbk5hbWV9YCA6ICIiOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IndpZGdldCAke3N0YXR1c0NsYXNzfSIKICAgICAgICB0aXRsZT0iJHt3aWRnZXQudG9vbHRpcCB8fCAiIn0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gd2lkZ2V0Lm9uQ2xpY2s/LigpfQogICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZTExLCB3aWRnZXQpfQogICAgICA+CiAgICAgICAgJHtpY29uTmFtZSA/IGIyYAogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0ke2ljb25OYW1lfQogICAgICAgICAgICBpY29uU2l6ZT0iMTIiCiAgICAgICAgICAgIGNsYXNzPSIke3dpZGdldC5sb2FkaW5nID8gInNwaW5uaW5nIiA6ICIifSIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgJHt3aWRnZXQubGFiZWwgPyBiMmA8c3Bhbj4ke3dpZGdldC5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckFjdGlvbihhY3Rpb24pIHsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gYWN0aW9uLmljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGFjdGlvbi5pY29uTmFtZSA6IGBsdWNpZGU6JHthY3Rpb24uaWNvbk5hbWV9YDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7YWN0aW9uLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICB0aXRsZT0iJHthY3Rpb24udG9vbHRpcCB8fCAiIn0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gIWFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24ub25DbGljaz8uKCl9CiAgICAgID4KICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAuaWNvbj0ke2ljb25OYW1lfQogICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVXaWRnZXRDb250ZXh0TWVudShlMTEsIHdpZGdldCkgewogICAgICAgICAgaWYgKCF3aWRnZXQuY29udGV4dE1lbnVJdGVtcyB8fCB3aWRnZXQuY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgbWVudUl0ZW1zID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMpIHsKICAgICAgICAgICAgaWYgKGl0ZW0uZGl2aWRlcikgewogICAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICBhd2FpdCBpdGVtLmFjdGlvbigpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIEFQSSBNRVRIT0RTIChpbXBsZW1lbnRzIElCb3R0b21CYXJBUEkpCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIGEgd2lkZ2V0IHRvIHRoZSBib3R0b20gYmFyCiAgICAgICAgICovCiAgICAgICAgYWRkV2lkZ2V0KHdpZGdldCkgewogICAgICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzQpID0+IHc0LmlkICE9PSB3aWRnZXQuaWQpOwogICAgICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgd2lkZ2V0XTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHdpZGdldCBieSBJRAogICAgICAgICAqLwogICAgICAgIHVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSB7CiAgICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3NCkgPT4gdzQuaWQgPT09IGlkID8geyAuLi53NCwgLi4udXBkYXRlIH0gOiB3NCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlbW92ZSBhIHdpZGdldCBieSBJRAogICAgICAgICAqLwogICAgICAgIHJlbW92ZVdpZGdldChpZCkgewogICAgICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzQpID0+IHc0LmlkICE9PSBpZCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhIHdpZGdldCBieSBJRAogICAgICAgICAqLwogICAgICAgIGdldFdpZGdldChpZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5maW5kKCh3NCkgPT4gdzQuaWQgPT09IGlkKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgYWxsIHdpZGdldHMKICAgICAgICAgKi8KICAgICAgICBjbGVhcldpZGdldHMoKSB7CiAgICAgICAgICB0aGlzLndpZGdldHMgPSBbXTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIGFuIGFjdGlvbiBidXR0b24KICAgICAgICAgKi8KICAgICAgICBhZGRBY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUuaWQgIT09IGFjdGlvbi5pZCk7CiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zLCBhY3Rpb25dOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZW1vdmUgYW4gYWN0aW9uIGJ5IElECiAgICAgICAgICovCiAgICAgICAgcmVtb3ZlQWN0aW9uKGlkKSB7CiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUuaWQgIT09IGlkKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgYWxsIGFjdGlvbnMKICAgICAgICAgKi8KICAgICAgICBjbGVhckFjdGlvbnMoKSB7CiAgICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfYWN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczEyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQXBwdWlCb3R0b21iYXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWJvdHRvbWJhci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2FwcHVpX2JvdHRvbWJhcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWJvdHRvbWJhci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYXBwdWlfYm90dG9tYmFyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLmRlbW8uanMKdmFyIGRlbW9GdW5jNjsKdmFyIGluaXRfZGVlc19wYW5lbF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWJhY2tncm91bmQgewogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBtYXJnaW46IDMycHggMCAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk2OHB4KSB7CiAgICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tYmFja2dyb3VuZCI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RGVmYXVsdCBQYW5lbHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlBhbmVsIENvbXBvbmVudCJ9IC5zdWJ0aXRsZT0keyJUaGUgZGVmYXVsdCBwYW5lbCB2YXJpYW50IHdpdGggc2hhZGNuLWluc3BpcmVkIHN0eWxpbmcifT4KICAgICAgICA8cD5UaGUgcGFuZWwgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgZm9sbG93cyB0aGUgdGhlbWUgYW5kIHByb3ZpZGVzIGNvbnNpc3RlbnQgc3R5bGluZyBmb3IgZ3JvdXBlZCBjb250ZW50LjwvcD4KICAgICAgICA8cD5JdCdzIHBlcmZlY3QgZm9yIGNyZWF0aW5nIHNlY3Rpb25zIGluIHlvdXIgYXBwbGljYXRpb24gd2l0aCBwcm9wZXIgc3BhY2luZyBhbmQgYm9yZGVycy48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBPdmVydmlldyJ9IC5zdWJ0aXRsZT0keyJLZXkgY2FwYWJpbGl0aWVzIn0+CiAgICAgICAgICA8cD5HcmlkIGxheW91dHMgd29yayBncmVhdCB3aXRoIHBhbmVscyBmb3IgY3JlYXRpbmcgZGFzaGJvYXJkcyBhbmQgZmVhdHVyZSBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8ZGVlcy1idXR0b24+TGVhcm4gTW9yZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJRdWljayBBY3Rpb25zIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiB0YXNrcyJ9PgogICAgICAgICAgPHA+RWFjaCBwYW5lbCBtYWludGFpbnMgY29uc2lzdGVudCBzcGFjaW5nIGFuZCBzdHlsaW5nIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5HZXQgU3RhcnRlZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgVmFyaWFudHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRlZmF1bHQgVmFyaWFudCJ9IC52YXJpYW50PSR7ImRlZmF1bHQifT4KICAgICAgICA8cD5UaGUgZGVmYXVsdCB2YXJpYW50IGhhcyBhIHdoaXRlIGJhY2tncm91bmQsIHN1YnRsZSBib3JkZXIsIGFuZCBtaW5pbWFsIHNoYWRvdy4gSXQncyB0aGUgc3RhbmRhcmQgY2hvaWNlIGZvciBtb3N0IGNvbnRlbnQuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJkZWZhdWx0IjwvY29kZT4gb3Igb21pdCB0aGUgdmFyaWFudCBwcm9wZXJ0eS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJPdXRsaW5lIFZhcmlhbnQifSAuc3VidGl0bGU9JHsiVHJhbnNwYXJlbnQgYmFja2dyb3VuZCB3aXRoIGJvcmRlciJ9IC52YXJpYW50PSR7Im91dGxpbmUifT4KICAgICAgICA8cD5UaGUgb3V0bGluZSB2YXJpYW50IHJlbW92ZXMgdGhlIGJhY2tncm91bmQgY29sb3IgYW5kIHNoYWRvdywga2VlcGluZyBvbmx5IHRoZSBib3JkZXIuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJvdXRsaW5lIjwvY29kZT4gZm9yIGEgbGlnaHRlciB2aXN1YWwgd2VpZ2h0LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikdob3N0IFZhcmlhbnQifSAuc3VidGl0bGU9JHsiTWluaW1hbCBzdHlsaW5nIGZvciBzdWJ0bGUgc2VjdGlvbnMifSAudmFyaWFudD0keyJnaG9zdCJ9PgogICAgICAgIDxwPlRoZSBnaG9zdCB2YXJpYW50IGhhcyBubyBib3JkZXIgb3IgYmFja2dyb3VuZCBieSBkZWZhdWx0LCBvbmx5IHNob3dpbmcgYSBzdWJ0bGUgYmFja2dyb3VuZCBvbiBob3Zlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Imdob3N0IjwvY29kZT4gZm9yIHRoZSBtb3N0IG1pbmltYWwgYXBwZWFyYW5jZS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgU2l6ZXM8L2gyPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC0zY29sIj4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU21hbGwgUGFuZWwifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+Q29tcGFjdCBwYWRkaW5nIGZvciBkZW5zZSBsYXlvdXRzLjwvcD4KICAgICAgICAgIDxwPlVzZSA8Y29kZT5zaXplPSJzbSI8L2NvZGU+PC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTWVkaXVtIFBhbmVsIn0gLnNpemU9JHsibWQifT4KICAgICAgICAgIDxwPkRlZmF1bHQgc2l6ZSB3aXRoIGJhbGFuY2VkIHNwYWNpbmcuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9Im1kIjwvY29kZT4gb3Igb21pdC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYXJnZSBQYW5lbCJ9IC5zaXplPSR7ImxnIn0+CiAgICAgICAgICA8cD5HZW5lcm91cyBwYWRkaW5nIGZvciBwcm9taW5lbnQgc2VjdGlvbnMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9ImxnIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q29tcGxleCBFeGFtcGxlczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlBhbmVscyB3b3JrIGdyZWF0IGZvciBvcmdhbml6aW5nIGZvcm0gc2VjdGlvbnMifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUHJvamVjdCBOYW1lIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJEZXNjcmlwdGlvbiJ9IC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duIAogICAgICAgICAgICAubGFiZWw9JHsiQ2F0ZWdvcnkifSAKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiV2ViIERldmVsb3BtZW50Iiwga2V5OiAid2ViIiB9LAogICAgICB7IG9wdGlvbjogIk1vYmlsZSBBcHAiLCBrZXk6ICJtb2JpbGUiIH0sCiAgICAgIHsgb3B0aW9uOiAiRGVza3RvcCBTb2Z0d2FyZSIsIGtleTogImRlc2t0b3AiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIFByb2plY3Q8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWxzIn0gLnN1YnRpdGxlPSR7IlBhbmVscyBjYW4gYmUgbmVzdGVkIGZvciBoaWVyYXJjaGljYWwgb3JnYW5pemF0aW9uIn0+CiAgICAgICAgPHA+WW91IGNhbiBuZXN0IHBhbmVscyB0byBjcmVhdGUgbW9yZSBjb21wbGV4IGxheW91dHM6PC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWwgMSJ9IC52YXJpYW50PSR7Im91dGxpbmUifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+VGhpcyBpcyBhIG5lc3RlZCBwYW5lbCB3aXRoIG91dGxpbmUgdmFyaWFudCBhbmQgc21hbGwgc2l6ZS48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJOZXN0ZWQgUGFuZWwgMiJ9IC52YXJpYW50PSR7Imdob3N0In0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPlRoaXMgaXMgYW5vdGhlciBuZXN0ZWQgcGFuZWwgd2l0aCBnaG9zdCB2YXJpYW50LjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VW50aXRsZWQgUGFuZWxzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgIDxwPlBhbmVscyB3b3JrIGdyZWF0IGV2ZW4gd2l0aG91dCBhIHRpdGxlIGZvciBzaW1wbGUgY29udGVudCBncm91cGluZy48L3A+CiAgICAgICAgPHA+VGhleSBwcm92aWRlIHZpc3VhbCBzZXBhcmF0aW9uIGFuZCBjb25zaXN0ZW50IHBhZGRpbmcgdGhyb3VnaG91dCB5b3VyIGludGVyZmFjZS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICA8ZGVlcy1wYW5lbCAudmFyaWFudD0keyJvdXRsaW5lIn0+CiAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbi10b3A6IDA7Ij5DdXN0b20gQ29udGVudDwvaDQ+CiAgICAgICAgICA8cD5Zb3UgY2FuIGFkZCB5b3VyIG93biBoZWFkaW5ncyBhbmQgc3RydWN0dXJlIHdpdGhpbiB1bnRpdGxlZCBwYW5lbHMuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudmFyaWFudD0keyJnaG9zdCJ9PgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW4tdG9wOiAwOyI+TWluaW1hbCBTdHlsZTwvaDQ+CiAgICAgICAgICA8cD5HaG9zdCBwYW5lbHMgd2l0aG91dCB0aXRsZXMgY3JlYXRlIHZlcnkgc3VidGxlIGNvbnRlbnQgc2VjdGlvbnMuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGZvbnRzLmpzCnZhciBnZWlzdFNhbnNGb250LCBpbnRlbE9uZU1vbm9Gb250LCBnZWlzdEZvbnRGYW1pbHksIG1vbm9Gb250RmFtaWx5LCBjc3NHZWlzdEZvbnRGYW1pbHksIGNzc01vbm9Gb250RmFtaWx5LCBjYWxTYW5zRm9udCwgY2FsU2Fuc0ZvbnRGYW1pbHksIGNzc0NhbFNhbnNGb250RmFtaWx5LCByb2JvdG9TbGFiRm9udCwgcm9ib3RvU2xhYkZvbnRGYW1pbHksIGNzc1JvYm90b1NsYWJGb250RmFtaWx5LCBiYXNlRm9udFN0eWxlczsKdmFyIGluaXRfZm9udHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBmb250cy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZ2Vpc3RTYW5zRm9udCA9ICJHZWlzdCBTYW5zIjsKICAgIGludGVsT25lTW9ub0ZvbnQgPSAiSW50ZWwgT25lIE1vbm8iOwogICAgZ2Vpc3RGb250RmFtaWx5ID0gYCcke2dlaXN0U2Fuc0ZvbnR9JywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgJ094eWdlbicsICdVYnVudHUnLCAnQ2FudGFyZWxsJywgJ0ZpcmEgU2FucycsICdEcm9pZCBTYW5zJywgJ0hlbHZldGljYSBOZXVlJywgc2Fucy1zZXJpZmA7CiAgICBtb25vRm9udEZhbWlseSA9IGAnJHtpbnRlbE9uZU1vbm9Gb250fScsICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCAnRmlyYSBNb25vJywgJ0Ryb2lkIFNhbnMgTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZWA7CiAgICBjc3NHZWlzdEZvbnRGYW1pbHkgPSByKGdlaXN0Rm9udEZhbWlseSk7CiAgICBjc3NNb25vRm9udEZhbWlseSA9IHIobW9ub0ZvbnRGYW1pbHkpOwogICAgY2FsU2Fuc0ZvbnQgPSAiQ2FsIFNhbnMiOwogICAgY2FsU2Fuc0ZvbnRGYW1pbHkgPSBgJyR7Y2FsU2Fuc0ZvbnR9JywgJHtnZWlzdEZvbnRGYW1pbHl9YDsKICAgIGNzc0NhbFNhbnNGb250RmFtaWx5ID0gcihjYWxTYW5zRm9udEZhbWlseSk7CiAgICByb2JvdG9TbGFiRm9udCA9ICJSb2JvdG8gU2xhYiI7CiAgICByb2JvdG9TbGFiRm9udEZhbWlseSA9IGAnJHtyb2JvdG9TbGFiRm9udH0nLCBHZW9yZ2lhLCBzZXJpZmA7CiAgICBjc3NSb2JvdG9TbGFiRm9udEZhbWlseSA9IHIocm9ib3RvU2xhYkZvbnRGYW1pbHkpOwogICAgYmFzZUZvbnRTdHlsZXMgPSByKGAKICBmb250LWZhbWlseTogJHtnZWlzdEZvbnRGYW1pbHl9OwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY3YxMScsICd0bnVtJywgJ2N2MDUnIDE7CmApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5qcwp2YXIgX19lc0RlY29yYXRlMTIsIF9fcnVuSW5pdGlhbGl6ZXJzMTMsIERlZXNQYW5lbDsKdmFyIGluaXRfZGVlc19wYW5lbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLXBhbmVsL2RlZXMtcGFuZWwuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19wYW5lbF9kZW1vKCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUxMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczEzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzUGFuZWwgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wYW5lbCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfdGl0bGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF90aXRsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N1YnRpdGxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc3VidGl0bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3VidGl0bGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YXJpYW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfdmFyaWFudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YXJpYW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNQYW5lbDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90aXRsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zdWJ0aXRsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF92YXJpYW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3RpdGxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpdGxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aXRsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aXRsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRpdGxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aXRsZV9pbml0aWFsaXplcnMsIF90aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc3VidGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1YnRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1YnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3VidGl0bGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N1YnRpdGxlX2luaXRpYWxpemVycywgX3N1YnRpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF92YXJpYW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhcmlhbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhcmlhbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFyaWFudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhcmlhbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCBfdmFyaWFudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ1bkFmdGVyUmVuZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydW5BZnRlclJlbmRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ydW5BZnRlclJlbmRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJ1bkFmdGVyUmVuZGVyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzUGFuZWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM2OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJMYXlvdXQiXTsKICAgICAgICAjdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3RpdGxlX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGl0bGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF90aXRsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3N1YnRpdGxlX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgc3VidGl0bGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHN1YnRpdGxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpKTsKICAgICAgICBnZXQgdmFyaWFudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YXJpYW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YXJpYW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmFyaWFudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgIm1kIikpOwogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBydW5BZnRlclJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcnVuQWZ0ZXJSZW5kZXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGRlZmF1bHQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXSkgewogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIGhzbCgwIDAlIDAlIC8gMC4wNSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IG91dGxpbmUgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGdob3N0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJnaG9zdCJdKSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmhlYWRlcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogVGl0bGUgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemU9ImxnIl0pIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIG1hcmdpbjogNHB4IDAgMCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFN1YnRpdGxlIHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSAuc3VidGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA4NC45JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KCiAgICAgIC8qIENvbnRlbnQgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQoKICAgICAgLyogUmVtb3ZlIG1hcmdpbnMgZnJvbSBmaXJzdCBhbmQgbGFzdCBjaGlsZHJlbiAqLwogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGRlZmF1bHQgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZGVmYXVsdCJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgfQoKICAgICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzIGZvciBvdXRsaW5lIHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXTpob3ZlcikgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgNy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3IgZ2hvc3QgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXTpob3ZlcikgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZXMgKi8KICAgICAgOmhvc3QoOmZvY3VzLXdpdGhpbikgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBOZXN0ZWQgcGFuZWxzIHNwYWNpbmcgKi8KICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWwpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoZGVlcy1wYW5lbDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAke3RoaXMudGl0bGUgPyBiMmA8aDMgY2xhc3M9InRpdGxlIj4ke3RoaXMudGl0bGV9PC9oMz5gIDogIiJ9CiAgICAgICAgJHt0aGlzLnN1YnRpdGxlID8gYjJgPHAgY2xhc3M9InN1YnRpdGxlIj4ke3RoaXMuc3VidGl0bGV9PC9wPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBpZiAodGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczEzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzUGFuZWwyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLXN0YXRzZ3JpZC9kZWVzLXN0YXRzZ3JpZC5kZW1vLmpzCnZhciBfYTIsIGdlbmVyYXRlQ3B1Q29yZXMsIGRlbW9GdW5jNzsKdmFyIGluaXRfZGVlc19zdGF0c2dyaWRfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgZ2VuZXJhdGVDcHVDb3JlcyA9IChjb3VudDIpID0+IHsKICAgICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50MiB9LCAoXzQsIGkxMSkgPT4gKHsKICAgICAgICBpZDogaTExLAogICAgICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApLAogICAgICAgIGxhYmVsOiBgJHtpMTF9YAogICAgICB9KSk7CiAgICB9OwogICAgZGVtb0Z1bmM3ID0gKCkgPT4gewogICAgICByZXR1cm4gYjIoX2EyIHx8IChfYTIgPSBfX3RlbXBsYXRlKFsiXG4gIDxkZWVzLWRlbW93cmFwcGVyPlxuICAgIDxzdHlsZT5cbiAgICAgICIsICdcbiAgICA8L3N0eWxlPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5ncmlkQWN0aW9ucz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBpZD0iYWN0aW9uLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6ICcsICI7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xvcjogIiwgJzsiPlxuICAgICAgICAgIDxlbT5DbGljayBvbiB0aWxlIGFjdGlvbnMgb3IgZ3JpZCBhY3Rpb25zIHRvIHNlZSB0aGUgcmVzdWx0Li4uPC9lbT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgJ1xuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkNvbmZpZ3VyYXRpb24gT3B0aW9uczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLWRlc2NyaXB0aW9uIj5cbiAgICAgICAgICAgICAgRWFjaCB0aWxlIHR5cGUgc3VwcG9ydHMgZGlmZmVyZW50IHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TnVtYmVyOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgY29sb3IsIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5HYXVnZTo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIGdhdWdlT3B0aW9ucyAobWluLCBtYXgsIHRocmVzaG9sZHMpPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5QZXJjZW50YWdlOjwvc3Ryb25nPiB2YWx1ZSAoMC0xMDApLCBjb2xvciwgZGVzY3JpcHRpb248L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlRyZW5kOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgdHJlbmREYXRhIGFycmF5LCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGV4dDo8L3N0cm9uZz4gdmFsdWUgKHN0cmluZyksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+Q29tcGFjdCBMYXlvdXQgKDE4MHB4IHRpbGVzKTwvaDQ+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDI0cHggMCAxNnB4IDA7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsiPlNwYWNpb3VzIExheW91dCAoMzIwcHggdGlsZXMpPC9oND5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICBpZD0iY3B1LWNvcmVzLWdyaWQiXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAuZ3JpZEFjdGlvbnM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1ncmlkIlxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLmdyaWRBY3Rpb25zPSIsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrIj4nLCAiPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgYAogICAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWNvbmZpZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+UGFydGl0aW9uIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnVzZWQ6PC9zdHJvbmc+IFVzZWQgc3BhY2UgaW4gYnl0ZXMgKGF1dG8tZm9ybWF0dGVkKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnRvdGFsOjwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLmZpbGVzeXN0ZW06PC9zdHJvbmc+IEZpbGVzeXN0ZW0gdHlwZSAoZXh0NCwgeGZzLCBudGZzKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLm1vdW50UG9pbnQ6PC9zdHJvbmc+IE1vdW50IHBvaW50IHBhdGggKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICBDb2xvciB0aHJlc2hvbGRzOiBOb3JtYWwgKCZsdDs3NSUpLCBXYXJuaW5nICg3NS05MCUpLCBDcml0aWNhbCAoJmd0OzkwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5EaXNrIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5jYXBhY2l0eTo8L3N0cm9uZz4gVG90YWwgY2FwYWNpdHkgaW4gYnl0ZXM8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEubW9kZWw6PC9zdHJvbmc+IERpc2sgbW9kZWwgbmFtZSAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLnR5cGU6PC9zdHJvbmc+IERpc2sgdHlwZTogJ3NzZCcsICdoZGQnLCBvciAnbnZtZSc8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaW9wczo8L3N0cm9uZz4gUmVhZC93cml0ZSBJT1BTIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaGVhbHRoOjwvc3Ryb25nPiBIZWFsdGggcGVyY2VudGFnZSAwLTEwMCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIEhlYWx0aCB0aHJlc2hvbGRzOiBHb29kICg3MC0xMDAlKSwgV2FybmluZyAoMzAtNzAlKSwgQ3JpdGljYWwgKCZsdDszMCUpCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgIC8vIENsZWFudXAgbGl2ZSB1cGRhdGVzIG9uIHBhZ2UgdW5sb2FkCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB7CiAgICAgICAgaWYgKCh3aW5kb3cgYXMgYW55KS5saXZlVXBkYXRlSW50ZXJ2YWwpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIDxcL3NjcmlwdD4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRpbGUtY29uZmlnIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctc2VjdGlvbiB7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctZGVzY3JpcHRpb24gewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29kZS1ibG9jayB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIH0KICAgICAgYCwgIjEuIENvbXByZWhlbnNpdmUgRGFzaGJvYXJkIiwgIkZ1bGwtZmVhdHVyZWQgc3RhdHMgZ3JpZCB3aXRoIHZhcmlvdXMgdGlsZSB0eXBlcywgYWN0aW9ucywgYW5kIEx1Y2lkZSBpY29ucyIsIFsKICAgICAgICB7CiAgICAgICAgICBpZDogInJldmVudWUiLAogICAgICAgICAgdGl0bGU6ICJUb3RhbCBSZXZlbnVlIiwKICAgICAgICAgIHZhbHVlOiAxMjU0MjAsCiAgICAgICAgICB1bml0OiAiJCIsCiAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6ZG9sbGFyLXNpZ24iLAogICAgICAgICAgZGVzY3JpcHRpb246ICIrMTIuNSUgZnJvbSBsYXN0IG1vbnRoIiwKICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJWaWV3IERldGFpbHMiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyZW5kaW5nLXVwIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJWaWV3aW5nIHJldmVudWUgZGV0YWlsczogJDEyNSw0MjAgKCsxMi41JSkiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJFeHBvcnQgRGF0YSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyByZXZlbnVlIGRhdGEgdG8gQ1NWLi4uIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAidXNlcnMiLAogICAgICAgICAgdGl0bGU6ICJBY3RpdmUgVXNlcnMiLAogICAgICAgICAgdmFsdWU6IDM4NDcsCiAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgICAgZGVzY3JpcHRpb246ICIzMjQgbmV3IHRoaXMgd2VlayIsCiAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiVmlldyBVc2VyIExpc3QiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIk9wZW5pbmcgdXNlciBsaXN0Li4uIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY3B1IiwKICAgICAgICAgIHRpdGxlOiAiQ1BVIFVzYWdlIiwKICAgICAgICAgIHZhbHVlOiA3MywKICAgICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICAgIHR5cGU6ICJnYXVnZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgICAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgICAgdGhyZXNob2xkczogWwogICAgICAgICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIgfSwKICAgICAgICAgICAgICB7IHZhbHVlOiA2MCwgY29sb3I6ICJoc2woNDUuNCA5My40JSA0Ny41JSkiIH0sCiAgICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiaHNsKDAgODQuMiUgNjAuMiUpIiB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAic3RvcmFnZSIsCiAgICAgICAgICB0aXRsZTogIlN0b3JhZ2UgVXNlZCIsCiAgICAgICAgICB2YWx1ZTogNjUsCiAgICAgICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICAgICAgZGVzY3JpcHRpb246ICI2NTAgR0Igb2YgMSBUQiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAibGF0ZW5jeSIsCiAgICAgICAgICB0aXRsZTogIlJlc3BvbnNlIFRpbWUiLAogICAgICAgICAgdmFsdWU6IDE0MiwKICAgICAgICAgIHVuaXQ6ICJtcyIsCiAgICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgICAgICB0cmVuZERhdGE6IFsxNTAsIDE0NSwgMTQ4LCAxNDIsIDEzOCwgMTQwLCAxMzUsIDE0NSwgMTQyXSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiUDk1IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJ1cHRpbWUiLAogICAgICAgICAgdGl0bGU6ICJTeXN0ZW0gVXB0aW1lIiwKICAgICAgICAgIHZhbHVlOiAiOTkuOTUlIiwKICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Y2hlY2stY2lyY2xlIiwKICAgICAgICAgIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsCiAgICAgICAgICBkZXNjcmlwdGlvbjogIkxhc3QgMzAgZGF5cyIKICAgICAgICB9CiAgICAgIF0sIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUmVmcmVzaCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpyZWZyZXNoLWN3IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1zdGF0c2dyaWQiKTsKICAgICAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgICAgICBncmlkLnN0eWxlLm9wYWNpdHkgPSAiMC41IjsKICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGdyaWQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgICAgICB9LCAzMDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRXhwb3J0IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNoYXJlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyBkYXNoYm9hcmQgcmVwb3J0Li4uIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlNldHRpbmdzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIk9wZW5pbmcgZGFzaGJvYXJkIHNldHRpbmdzLi4uIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwgMjUwLCAxNiwgY3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKSwgY3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKSwgIjIuIFRpbGUgVHlwZXMiLCAiRGlmZmVyZW50IHZpc3VhbGl6YXRpb24gdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBzdGF0cyBncmlkIiwgWwogICAgICAgIHsKICAgICAgICAgIGlkOiAibnVtYmVyLWV4YW1wbGUiLAogICAgICAgICAgdGl0bGU6ICJOdW1iZXIgVGlsZSIsCiAgICAgICAgICB2YWx1ZTogNDIxOTUsCiAgICAgICAgICB1bml0OiAiJCIsCiAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6aGFzaCIsCiAgICAgICAgICBkZXNjcmlwdGlvbjogIlNpbXBsZSBudW1lcmljIGRpc3BsYXkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImdhdWdlLWV4YW1wbGUiLAogICAgICAgICAgdGl0bGU6ICJHYXVnZSBUaWxlIiwKICAgICAgICAgIHZhbHVlOiA2OCwKICAgICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICAgIHR5cGU6ICJnYXVnZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmdhdWdlIiwKICAgICAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgIG1heDogMTAwLAogICAgICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgICAgIHsgdmFsdWU6IDUwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJwZXJjZW50YWdlLWV4YW1wbGUiLAogICAgICAgICAgdGl0bGU6ICJQZXJjZW50YWdlIFRpbGUiLAogICAgICAgICAgdmFsdWU6IDc4LAogICAgICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpwZXJjZW50IiwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiUHJvZ3Jlc3MgYmFyIHZpc3VhbGl6YXRpb24iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRyZW5kLWV4YW1wbGUiLAogICAgICAgICAgdGl0bGU6ICJUcmVuZCBUaWxlIiwKICAgICAgICAgIHZhbHVlOiA4OTIsCiAgICAgICAgICB1bml0OiAib3BzL3MiLAogICAgICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLAogICAgICAgICAgdHJlbmREYXRhOiBbNzIwLCA3NTAsIDc4MCwgNzk1LCA4MTAsIDgzNSwgODUwLCA4NjUsIDg4MCwgODkyXSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJ0ZXh0LWV4YW1wbGUiLAogICAgICAgICAgdGl0bGU6ICJUZXh0IFRpbGUiLAogICAgICAgICAgdmFsdWU6ICJPcGVyYXRpb25hbCIsCiAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmluZm8iLAogICAgICAgICAgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiU3RhdHVzIGRpc3BsYXkiCiAgICAgICAgfQogICAgICBdLCAyODAsIDE2LCAiMy4gR3JpZCBDb25maWd1cmF0aW9ucyIsICJEaWZmZXJlbnQgbGF5b3V0IG9wdGlvbnMgYW5kIHJlc3BvbnNpdmUgYmVoYXZpb3IiLCBbCiAgICAgICAgeyBpZDogIjEiLCB0aXRsZTogIk9yZGVycyIsIHZhbHVlOiAxNTYsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnNob3BwaW5nLWNhcnQiIH0sCiAgICAgICAgeyBpZDogIjIiLCB0aXRsZTogIlJldmVudWUiLCB2YWx1ZTogODQyMCwgdW5pdDogIiQiLCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpkb2xsYXItc2lnbiIgfSwKICAgICAgICB7IGlkOiAiMyIsIHRpdGxlOiAiVXNlcnMiLCB2YWx1ZTogNDIzLCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTp1c2VycyIgfSwKICAgICAgICB7IGlkOiAiNCIsIHRpdGxlOiAiR3Jvd3RoIiwgdmFsdWU6IDEyLjUsIHVuaXQ6ICIlIiwgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0KICAgICAgXSwgMTgwLCAxMiwgWwogICAgICAgIHsKICAgICAgICAgIGlkOiAic3BhY2lvdXMxIiwKICAgICAgICAgIHRpdGxlOiAiTW9udGhseSBSZXZlbnVlIiwKICAgICAgICAgIHZhbHVlOiAxODQ1MDAsCiAgICAgICAgICB1bml0OiAiJCIsCiAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Y3JlZGl0LWNhcmQiLAogICAgICAgICAgZGVzY3JpcHRpb246ICJUb3RhbCByZXZlbnVlIHRoaXMgbW9udGgiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInNwYWNpb3VzMiIsCiAgICAgICAgICB0aXRsZTogIkN1c3RvbWVyIFNhdGlzZmFjdGlvbiIsCiAgICAgICAgICB2YWx1ZTogOTQsCiAgICAgICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnNtaWxlIiwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQmFzZWQgb24gMSwyMzQgcmV2aWV3cyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAic3BhY2lvdXMzIiwKICAgICAgICAgIHRpdGxlOiAiU2VydmVyIFJlc3BvbnNlIiwKICAgICAgICAgIHZhbHVlOiA5OCwKICAgICAgICAgIHVuaXQ6ICJtcyIsCiAgICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgICAgdHJlbmREYXRhOiBbMTA1LCAxMDIsIDEwMCwgOTksIDk4LCA5OCwgOTcsIDk4XSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIHJlc3BvbnNlIHRpbWUiCiAgICAgICAgfQogICAgICBdLCAzMjAsIDIwLCAiNC4gQ1BVIENvcmVzIFZpc3VhbGl6YXRpb24iLCAiVmVydGljYWwgYmFyIHZpc3VhbGl6YXRpb24gZm9yIG11bHRpLWNvcmUgQ1BVIHVzYWdlIHdpdGggY29sdW1uIHNwYW5uaW5nIiwgWwogICAgICAgIHsKICAgICAgICAgIGlkOiAiY3B1LWNvcmVzLTgiLAogICAgICAgICAgdGl0bGU6ICJDUFUgQ29yZXMgKDgtY29yZSkiLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3Jlcyg4KSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiSW50ZWwgaTcgLSA4IGNvcmVzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJtZW1vcnkiLAogICAgICAgICAgdGl0bGU6ICJNZW1vcnkgVXNhZ2UiLAogICAgICAgICAgdmFsdWU6IDY4LAogICAgICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIsCiAgICAgICAgICBkZXNjcmlwdGlvbjogIjEzLjYgR0Igb2YgMjAgR0IiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImNwdS1jb3Jlcy0xNiIsCiAgICAgICAgICB0aXRsZTogIkNQVSBDb3JlcyAoMTYtY29yZSkiLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygxNiksCiAgICAgICAgICBkZXNjcmlwdGlvbjogIkFNRCBSeXplbiA5IC0gMTYgY29yZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogIm5ldHdvcmsiLAogICAgICAgICAgdGl0bGU6ICJOZXR3b3JrIEkvTyIsCiAgICAgICAgICB2YWx1ZTogMjQ1LAogICAgICAgICAgdW5pdDogIk1CL3MiLAogICAgICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6bmV0d29yayIsCiAgICAgICAgICB0cmVuZERhdGE6IFsyMDAsIDIyMCwgMjM1LCAyNDAsIDIzOCwgMjQ1XSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAidGhyb3VnaHB1dCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY3B1LWNvcmVzLTMyIiwKICAgICAgICAgIHRpdGxlOiAiU2VydmVyIENQVSAoMzItY29yZSkiLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgICAgY29sdW1uU3BhbjogMywKICAgICAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygzMiksCiAgICAgICAgICBkZXNjcmlwdGlvbjogIkFNRCBFUFlDIC0gMzIgY29yZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRpc2siLAogICAgICAgICAgdGl0bGU6ICJEaXNrIFVzYWdlIiwKICAgICAgICAgIHZhbHVlOiA0MiwKICAgICAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgICAgICBkZXNjcmlwdGlvbjogIjQyMCBHQiBvZiAxIFRCIgogICAgICAgIH0KICAgICAgXSwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJSYW5kb21pemUiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2h1ZmZsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjcHUtY29yZXMtZ3JpZCIpOwogICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0aWxlcyA9IGdyaWQudGlsZXMubWFwKCh0aWxlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRpbGUudHlwZSA9PT0gImNwdUNvcmVzIiAmJiB0aWxlLmNvcmVzRGF0YSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgLi4udGlsZSwKICAgICAgICAgICAgICAgICAgY29yZXNEYXRhOiB0aWxlLmNvcmVzRGF0YS5tYXAoKGNvcmUyKSA9PiAoewogICAgICAgICAgICAgICAgICAgIC4uLmNvcmUyLAogICAgICAgICAgICAgICAgICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApCiAgICAgICAgICAgICAgICAgIH0pKQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHRpbGU7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBncmlkLnRpbGVzID0gdGlsZXM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLCAyNTAsIDE2LCAiNS4gSW50ZXJhY3RpdmUgRmVhdHVyZXMiLCAiVGlsZXMgd2l0aCBhY3Rpb25zIGFuZCByZWFsLXRpbWUgdXBkYXRlcyIsIFsKICAgICAgICB7CiAgICAgICAgICBpZDogImxpdmUtY3B1IiwKICAgICAgICAgIHRpdGxlOiAiTGl2ZSBDUFUiLAogICAgICAgICAgdmFsdWU6IDQ1LAogICAgICAgICAgdW5pdDogIiUiLAogICAgICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgIG1heDogMTAwLAogICAgICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJsaXZlLXJlcXVlc3RzIiwKICAgICAgICAgIHRpdGxlOiAiUmVxdWVzdHMvc2VjIiwKICAgICAgICAgIHZhbHVlOiA4OTIsCiAgICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgICAgICB0cmVuZERhdGE6IFs4NTAsIDg2MCwgODcwLCA4ODAsIDg4NSwgODkwLCA4OTJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImxpdmUtbWVtb3J5IiwKICAgICAgICAgIHRpdGxlOiAiTWVtb3J5IFVzYWdlIiwKICAgICAgICAgIHZhbHVlOiA2MiwKICAgICAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImNvdW50ZXIiLAogICAgICAgICAgdGl0bGU6ICJFdmVudCBDb3VudGVyIiwKICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnphcCIsCiAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiSW5jcmVtZW50IiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwbHVzIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICAgICAgaWYgKCFncmlkKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gZ3JpZC50aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJjb3VudGVyIik7CiAgICAgICAgICAgICAgICB0aWxlLnZhbHVlID0gdHlwZW9mIHRpbGUudmFsdWUgPT09ICJudW1iZXIiID8gdGlsZS52YWx1ZSArIDEgOiAxOwogICAgICAgICAgICAgICAgZ3JpZC50aWxlcyA9IFsuLi5ncmlkLnRpbGVzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiUmVzZXQiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnJvdGF0ZS1jY3ciLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7CiAgICAgICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBncmlkLnRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImNvdW50ZXIiKTsKICAgICAgICAgICAgICAgIHRpbGUudmFsdWUgPSAwOwogICAgICAgICAgICAgICAgZ3JpZC50aWxlcyA9IFsuLi5ncmlkLnRpbGVzXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0sIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU3RhcnQgTGl2ZSBVcGRhdGVzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsYXkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCF3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKSB7CiAgICAgICAgICAgICAgd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgICAgICAgICAgY29uc3QgdGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNwdVRpbGUgPSB0aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJsaXZlLWNwdSIpOwogICAgICAgICAgICAgICAgICBjcHVUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBjcHVUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAyMCAtIDEwKSkpOwogICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0c1RpbGUgPSB0aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJsaXZlLXJlcXVlc3RzIik7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcmVxdWVzdHNUaWxlLnZhbHVlICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogNTAgLSAyNSk7CiAgICAgICAgICAgICAgICAgIHJlcXVlc3RzVGlsZS52YWx1ZSA9IE1hdGgubWF4KDgwMCwgbmV3VmFsdWUpOwogICAgICAgICAgICAgICAgICByZXF1ZXN0c1RpbGUudHJlbmREYXRhID0gWy4uLnJlcXVlc3RzVGlsZS50cmVuZERhdGEuc2xpY2UoMSksIHJlcXVlc3RzVGlsZS52YWx1ZV07CiAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9yeVRpbGUgPSB0aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJsaXZlLW1lbW9yeSIpOwogICAgICAgICAgICAgICAgICBtZW1vcnlUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBtZW1vcnlUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAxMCAtIDUpKSk7CiAgICAgICAgICAgICAgICAgIGdyaWQudGlsZXMgPSB0aWxlczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCAxZTMpOwogICAgICAgICAgICAgIHRoaXMubmFtZSA9ICJTdG9wIExpdmUgVXBkYXRlcyI7CiAgICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICJsdWNpZGU6cGF1c2UiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgICAgICAgd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5uYW1lID0gIlN0YXJ0IExpdmUgVXBkYXRlcyI7CiAgICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICJsdWNpZGU6cGxheSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sIDI1MCwgMTYsICI2LiBDb2RlIEV4YW1wbGUiLCAiSG93IHRvIGltcGxlbWVudCBhIHN0YXRzIGdyaWQgd2l0aCBUeXBlU2NyaXB0IiwgYGNvbnN0IHRpbGVzOiBJU3RhdHNUaWxlW10gPSBbCiAgewogICAgaWQ6ICdyZXZlbnVlJywKICAgIHRpdGxlOiAnVG90YWwgUmV2ZW51ZScsCiAgICB2YWx1ZTogMTI1NDIwLAogICAgdW5pdDogJyQnLAogICAgdHlwZTogJ251bWJlcicsCiAgICBpY29uOiAnbHVjaWRlOmRvbGxhci1zaWduJywKICAgIGRlc2NyaXB0aW9uOiAnKzEyLjUlIGZyb20gbGFzdCBtb250aCcsCiAgICBhY3Rpb25zOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnVmlldyBEZXRhaWxzJywKICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTp0cmVuZGluZy11cCcsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygnVmlldyByZXZlbnVlIGRldGFpbHMnKTsKICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgIGlkOiAnY3B1JywKICAgIHRpdGxlOiAnQ1BVIFVzYWdlJywKICAgIHZhbHVlOiA3MywKICAgIHVuaXQ6ICclJywKICAgIHR5cGU6ICdnYXVnZScsCiAgICBpY29uOiAnbHVjaWRlOmNwdScsCiAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgbWluOiAwLAogICAgICBtYXg6IDEwMCwKICAgICAgdGhyZXNob2xkczogWwogICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAnaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKScgfSwKICAgICAgICB7IHZhbHVlOiA2MCwgY29sb3I6ICdoc2woNDUuNCA5My40JSA0Ny41JSknIH0sCiAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAnaHNsKDAgODQuMiUgNjAuMiUpJyB9CiAgICAgIF0KICAgIH0KICB9Cl07CgovLyBSZW5kZXIgdGhlIHN0YXRzIGdyaWQKaHRtbFxgCiAgPGRlZXMtc3RhdHNncmlkCiAgICAudGlsZXM9XCR7dGlsZXN9CiAgICAubWluVGlsZVdpZHRoPVwkezI1MH0KICAgIC5nYXA9XCR7MTZ9CiAgICAuZ3JpZEFjdGlvbnM9XCR7WwogICAgICB7CiAgICAgICAgbmFtZTogJ1JlZnJlc2gnLAogICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnJlZnJlc2gtY3cnLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coJ1JlZnJlc2gnKQogICAgICB9CiAgICBdfQogID48L2RlZXMtc3RhdHNncmlkPgpcYDtgLCAiNy4gRGlzayAmIFN0b3JhZ2UgVGlsZXMiLCAiUGFydGl0aW9uIGFuZCBwaHlzaWNhbCBkaXNrIHZpc3VhbGl6YXRpb24gdGlsZXMiLCBbCiAgICAgICAgewogICAgICAgICAgaWQ6ICJyb290LXBhcnRpdGlvbiIsCiAgICAgICAgICB0aXRsZTogIlJvb3QgUGFydGl0aW9uIiwKICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgdHlwZTogInBhcnRpdGlvbiIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmZvbGRlci1yb290IiwKICAgICAgICAgIHBhcnRpdGlvbkRhdGE6IHsKICAgICAgICAgICAgdXNlZDogNjk4MzQxNDI1MTUyLAogICAgICAgICAgICAvLyB+NjUwIEdCCiAgICAgICAgICAgIHRvdGFsOiAxMDczNzQxODI0ZTMsCiAgICAgICAgICAgIC8vIH4xIFRCCiAgICAgICAgICAgIGZpbGVzeXN0ZW06ICJleHQ0IiwKICAgICAgICAgICAgbW91bnRQb2ludDogIi8iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImhvbWUtcGFydGl0aW9uIiwKICAgICAgICAgIHRpdGxlOiAiSG9tZSBQYXJ0aXRpb24iLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6aG9tZSIsCiAgICAgICAgICBwYXJ0aXRpb25EYXRhOiB7CiAgICAgICAgICAgIHVzZWQ6IDIxNDc0ODM2NDgwMCwKICAgICAgICAgICAgLy8gfjIwMCBHQgogICAgICAgICAgICB0b3RhbDogNTM2ODcwOTEyZTMsCiAgICAgICAgICAgIC8vIH41MDAgR0IKICAgICAgICAgICAgZmlsZXN5c3RlbTogImV4dDQiLAogICAgICAgICAgICBtb3VudFBvaW50OiAiL2hvbWUiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRhdGEtcGFydGl0aW9uIiwKICAgICAgICAgIHRpdGxlOiAiRGF0YSBQYXJ0aXRpb24iLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6ZGF0YWJhc2UiLAogICAgICAgICAgcGFydGl0aW9uRGF0YTogewogICAgICAgICAgICB1c2VkOiAxOTMyNzM1MjgzMjAwLAogICAgICAgICAgICAvLyB+MS44IFRCICg5MCUgLSBjcml0aWNhbCkKICAgICAgICAgICAgdG90YWw6IDIxNDc0ODM2NDhlMywKICAgICAgICAgICAgLy8gfjIgVEIKICAgICAgICAgICAgZmlsZXN5c3RlbTogInhmcyIsCiAgICAgICAgICAgIG1vdW50UG9pbnQ6ICIvZGF0YSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAibnZtZS1zc2QiLAogICAgICAgICAgdGl0bGU6ICJQcmltYXJ5IE5WTWUiLAogICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICB0eXBlOiAiZGlzayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgICAgIGNhcGFjaXR5OiAyZTEyLAogICAgICAgICAgICAvLyAyIFRCCiAgICAgICAgICAgIG1vZGVsOiAiU2Ftc3VuZyA5OTAgUHJvIiwKICAgICAgICAgICAgdHlwZTogIm52bWUiLAogICAgICAgICAgICBpb3BzOiB7CiAgICAgICAgICAgICAgcmVhZDogNzQ1MCwKICAgICAgICAgICAgICB3cml0ZTogNjkwMAogICAgICAgICAgICB9LAogICAgICAgICAgICBoZWFsdGg6IDk4CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInNhdGEtc3NkIiwKICAgICAgICAgIHRpdGxlOiAiU2Vjb25kYXJ5IFNTRCIsCiAgICAgICAgICB2YWx1ZTogMCwKICAgICAgICAgIHR5cGU6ICJkaXNrIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgICAgICBkaXNrRGF0YTogewogICAgICAgICAgICBjYXBhY2l0eTogMWUxMiwKICAgICAgICAgICAgLy8gMSBUQgogICAgICAgICAgICBtb2RlbDogIkNydWNpYWwgTVg1MDAiLAogICAgICAgICAgICB0eXBlOiAic3NkIiwKICAgICAgICAgICAgaW9wczogewogICAgICAgICAgICAgIHJlYWQ6IDU2MCwKICAgICAgICAgICAgICB3cml0ZTogNTEwCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhlYWx0aDogODUKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiaGRkLXN0b3JhZ2UiLAogICAgICAgICAgdGl0bGU6ICJCYWNrdXAgSEREIiwKICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgdHlwZTogImRpc2siLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphcmNoaXZlIiwKICAgICAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgICAgIGNhcGFjaXR5OiA4ZTEyLAogICAgICAgICAgICAvLyA4IFRCCiAgICAgICAgICAgIG1vZGVsOiAiU2VhZ2F0ZSBJcm9uV29sZiIsCiAgICAgICAgICAgIHR5cGU6ICJoZGQiLAogICAgICAgICAgICBpb3BzOiB7CiAgICAgICAgICAgICAgcmVhZDogMjEwLAogICAgICAgICAgICAgIHdyaXRlOiAxOTUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaGVhbHRoOiA0MgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwgMjgwLCAxNik7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1iYXNlL2RlZXMtaW5wdXQtYmFzZS5qcwp2YXIgX19lc0RlY29yYXRlMTMsIF9fcnVuSW5pdGlhbGl6ZXJzMTQsIERlZXNJbnB1dEJhc2U7CnZhciBpbml0X2RlZXNfaW5wdXRfYmFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtYmFzZS9kZWVzLWlucHV0LWJhc2UuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBfX2VzRGVjb3JhdGUxMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczE0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRCYXNlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGF5b3V0TW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9rZXlfZGVjb3JhdG9yczsKICAgICAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Rpc2FibGVkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICByZXR1cm4gY2xhc3MgRGVlc0lucHV0QmFzZSBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2tleV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2xheW91dE1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0TW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0TW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGF5b3V0TW9kZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGF5b3V0TW9kZV9pbml0aWFsaXplcnMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsUG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWxQb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxhYmVsUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfa2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImtleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAia2V5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfa2V5X2luaXRpYWxpemVycywgX2tleV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZXF1aXJlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2Rpc2FibGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXNhYmxlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXNhYmxlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRpc2FibGVkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGVzY3JpcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRlc2NyaXB0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRlc2NyaXB0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGVzY3JpcHRpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzLCAiYXV0byIpOwogICAgICAgIC8qKgogICAgICAgICAqIExheW91dCBtb2RlIGZvciB0aGUgaW5wdXQgY29tcG9uZW50CiAgICAgICAgICogLSB2ZXJ0aWNhbDogVHJhZGl0aW9uYWwgZm9ybSBsYXlvdXQgKGxhYmVsIG9uIHRvcCkKICAgICAgICAgKiAtIGhvcml6b250YWw6IElubGluZSBsYXlvdXQgKGxhYmVsIHBvc2l0aW9uIGNvbmZpZ3VyYWJsZSkKICAgICAgICAgKiAtIGF1dG86IERldGVjdCBmcm9tIHBhcmVudCBjb250ZXh0CiAgICAgICAgICovCiAgICAgICAgZ2V0IGxheW91dE1vZGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGF5b3V0TW9kZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGF5b3V0TW9kZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxQb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AiKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogUG9zaXRpb24gb2YgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSBpbnB1dAogICAgICAgICAqLwogICAgICAgIGdldCBsYWJlbFBvc2l0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhYmVsUG9zaXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsYWJlbFBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYWJlbFBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfa2V5X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBpbnB1dHMKICAgICAgICAgKi8KICAgICAgICBnZXQga2V5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2tleV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQga2V5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGxhYmVsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCByZXF1aXJlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcmVxdWlyZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2Rpc2FibGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBkZXNjcmlwdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZGVzY3JpcHRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDb21tb24gc3R5bGVzIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cwogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBnZXQgYmFzZVN0eWxlcygpIHsKICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIGlgCiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgY29uc2lzdGVudCBzcGFjaW5nICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdDogOHB4OwogICAgICAgICAgLS1kZWVzLWlucHV0LWxhYmVsLWdhcDogdmFyKC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQpOyAvKiA4cHggKi8KICAgICAgICB9CgogICAgICAgIC8qIERlZmF1bHQgYmxvY2sgZGlzcGxheSB3aXRoIG5vIG1hcmdpbnMgLSBzcGFjaW5nIGlzIGNvbnRhaW5lci1kcml2ZW4gKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIC8qIEhvcml6b250YWwgbGF5b3V0IG1vZGUgLSBhY3RpdmF0ZWQgYnkgYXR0cmlidXRlICovCiAgICAgICAgOmhvc3QoW2xheW91dC1tb2RlPSJob3Jpem9udGFsIl0pIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB9CgogICAgICAgIC8qIExhYmVsIHBvc2l0aW9uIHZhcmlhdGlvbnMgKi8KICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvOwogICAgICAgICAgZ2FwOiB2YXIoLS1kZWVzLWlucHV0LWxhYmVsLWdhcCk7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249Im5vbmUiXSkgZGVlcy1sYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgYAogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU3ViamVjdCBmb3IgdmFsdWUgY2hhbmdlcyB0aGF0IGFsbCBpbnB1dHMgc2hvdWxkIGltcGxlbWVudAogICAgICAgICAqLwogICAgICAgIGNoYW5nZVN1YmplY3QgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NCiAgICAgICAgICogU2V0cyB1cCBsYXlvdXQgbW9kZSBkZXRlY3Rpb24KICAgICAgICAgKi8KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmRldGVjdExheW91dE1vZGUoKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogRGV0ZWN0cyB0aGUgYXBwcm9wcmlhdGUgbGF5b3V0IG1vZGUgYmFzZWQgb24gcGFyZW50IGNvbnRleHQKICAgICAgICAgKi8KICAgICAgICBkZXRlY3RMYXlvdXRNb2RlKCkgewogICAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSAhPT0gImF1dG8iKSB7CiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsIHRoaXMubGF5b3V0TW9kZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm0gPSB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpOwogICAgICAgICAgaWYgKHBhcmVudEZvcm0gJiYgcGFyZW50Rm9ybS5oYXNBdHRyaWJ1dGUoImhvcml6b250YWwtbGF5b3V0IikpIHsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxheW91dC1tb2RlIiwgImhvcml6b250YWwiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsICJ2ZXJ0aWNhbCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIHRoZSBsYXlvdXQgbW9kZSBhdHRyaWJ1dGUgd2hlbiBwcm9wZXJ0eSBjaGFuZ2VzCiAgICAgICAgICovCiAgICAgICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYXlvdXRNb2RlIikpIHsKICAgICAgICAgICAgdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYWJlbFBvc2l0aW9uIikpIHsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxhYmVsLXBvc2l0aW9uIiwgdGhpcy5sYWJlbFBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU3RhbmRhcmQgbWV0aG9kIGZvciBmcmVlemluZyBpbnB1dCAoZGlzYWJsaW5nKQogICAgICAgICAqLwogICAgICAgIGFzeW5jIGZyZWV6ZSgpIHsKICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTdGFuZGFyZCBtZXRob2QgZm9yIHVuZnJlZXppbmcgaW5wdXQgKGVuYWJsaW5nKQogICAgICAgICAqLwogICAgICAgIGFzeW5jIHVuZnJlZXplKCkgewogICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guZGVtby5qcwp2YXIgZGVtb0Z1bmM4Owp2YXIgaW5pdF9kZWVzX2lucHV0X2NoZWNrYm94X2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBpbml0X2RlZXNfYnV0dG9uKCk7CiAgICBkZW1vRnVuYzggPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBjaGVja2JveGVzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LWNoZWNrYm94Iik7CiAgICAgIGNvbnN0IHNlbGVjdEFsbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3NlbGVjdC1hbGwtYnRuIik7CiAgICAgIGNvbnN0IGNsZWFyQWxsQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjY2xlYXItYWxsLWJ0biIpOwogICAgICBpZiAoc2VsZWN0QWxsQnRuICYmIGNsZWFyQWxsQnRuKSB7CiAgICAgICAgc2VsZWN0QWxsQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4gewogICAgICAgICAgICBpZiAoIWNoZWNrYm94LmRpc2FibGVkICYmIGNoZWNrYm94LmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpKSB7CiAgICAgICAgICAgICAgY2hlY2tib3gudmFsdWUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjbGVhckFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3gpID0+IHsKICAgICAgICAgICAgaWYgKCFjaGVja2JveC5kaXNhYmxlZCAmJiBjaGVja2JveC5rZXk/LnN0YXJ0c1dpdGgoImZlYXR1cmUiKSkgewogICAgICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hlY2tib3gtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWNoZWNrYm94ZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmludGVyYWN0aXZlLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXRleHQgewogICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxMCA0MCUgODAlKSIpfTsKICAgICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZvcm0tc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5mZWF0dXJlLWxpc3QgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBDaGVja2JveGVzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBjaGVja2JveCBleGFtcGxlcyB3aXRoIHZhcmlvdXMgbGFiZWxzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InRlcm1zIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiU3Vic2NyaWJlIHRvIG5ld3NsZXR0ZXIifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5rZXk9JHsibmV3c2xldHRlciJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBub3RpZmljYXRpb25zIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBlbWFpbCB1cGRhdGVzIGFib3V0IHlvdXIgYWNjb3VudCJ9CiAgICAgICAgICAgIC5rZXk9JHsibm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2hlY2tib3ggU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBjaGVja2JveCBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWZhdWx0IHN0YXRlIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJDaGVja2VkIHN0YXRlIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIHVuY2hlY2tlZCJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgY2hlY2tlZCJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBjaGVja2JveCJ9IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InJlcXVpcmVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJDaGVja2JveGVzIGFycmFuZ2VkIGhvcml6b250YWxseSBmb3IgY29tcGFjdCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtY2hlY2tib3hlcyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBBIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25BIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEIifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBDIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25DIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEQifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uRCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBTZWxlY3Rpb24gRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDb21tb24gdXNlIGNhc2UgZm9yIGZlYXR1cmUgdG9nZ2xlcyB3aXRoIGJhdGNoIG9wZXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJzZWxlY3QtYWxsLWJ0biIgdHlwZT0ic2Vjb25kYXJ5Ij5TZWxlY3QgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0iY2xlYXItYWxsLWJ0biIgdHlwZT0ic2Vjb25kYXJ5Ij5DbGVhciBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbGlzdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJEYXJrIE1vZGUgU3VwcG9ydCJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiRW1haWwgTm90aWZpY2F0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMiJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiVHdvLUZhY3RvciBBdXRoZW50aWNhdGlvbiJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkFQSSBBY2Nlc3MifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkFkdmFuY2VkIEFuYWx5dGljcyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcml2YWN5IFNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ2hlY2tib3hlcyBpbiBhIHR5cGljYWwgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxoNCBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHJpdmFjeSBQcmVmZXJlbmNlczwvaDQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNoYXJlIGFuYWx5dGljcyBkYXRhIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiSGVscCB1cyBpbXByb3ZlIGJ5IHNoYXJpbmcgYW5vbnltb3VzIHVzYWdlIGRhdGEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlBlcnNvbmFsaXplZCByZWNvbW1lbmRhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgc3VnZ2VzdGlvbnMgYmFzZWQgb24geW91ciBhY3Rpdml0eSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiTWFya2V0aW5nIGNvbW11bmljYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHJvbW90aW9uYWwgZW1haWxzIGFuZCBzcGVjaWFsIG9mZmVycyJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiVGhpcmQtcGFydHkgaW50ZWdyYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFsbG93IGFwcHJvdmVkIHBhcnRuZXJzIHRvIGFjY2VzcyB5b3VyIGRhdGEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNsaWNrIGNoZWNrYm94ZXMgdG8gc2VlIHZhbHVlIGNoYW5nZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkZlYXR1cmUgdG9nZ2xlIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0keyhldmVudCkgPT4gewogICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY2hlY2tib3gtb3V0cHV0Iik7CiAgICAgIGlmIChvdXRwdXQgJiYgZXZlbnQuZGV0YWlsKSB7CiAgICAgICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmdldFZhbHVlKCk7CiAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEZlYXR1cmUgaXMgJHtpc0NoZWNrZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQifWA7CiAgICAgIH0KICAgIH19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRlYnVnIG1vZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7KGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkZWJ1Zy1vdXRwdXQiKTsKICAgICAgaWYgKG91dHB1dCAmJiBldmVudC5kZXRhaWwpIHsKICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRGVidWcgbW9kZTogJHtpc0NoZWNrZWQgPyAiT04iIDogIk9GRiJ9YDsKICAgICAgfQogICAgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJhY3RpdmUtc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGlkPSJjaGVja2JveC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCI+RmVhdHVyZSBpcyBkaXNhYmxlZDwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGVidWctb3V0cHV0IiBjbGFzcz0ib3V0cHV0LXRleHQiIHN0eWxlPSJtYXJnaW4tdG9wOiA4cHg7Ij5EZWJ1ZyBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jaGVja2JveC9kZWVzLWlucHV0LWNoZWNrYm94LmpzCnZhciBfX2VzRGVjb3JhdGUxNCwgX19ydW5Jbml0aWFsaXplcnMxNSwgRGVlc0lucHV0Q2hlY2tib3g7CnZhciBpbml0X2RlZXNfaW5wdXRfY2hlY2tib3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfY2hlY2tib3hfZGVtbygpOwogICAgaW5pdF9mb250cygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMxNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0lucHV0Q2hlY2tib3ggPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1jaGVja2JveCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5kZXRlcm1pbmF0ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2luZGV0ZXJtaW5hdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5kZXRlcm1pbmF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0Q2hlY2tib3gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pbmRldGVybWluYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE0KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTQodGhpcywgbnVsbCwgX2luZGV0ZXJtaW5hdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5kZXRlcm1pbmF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5kZXRlcm1pbmF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbmRldGVybWluYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5kZXRlcm1pbmF0ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMsIF9pbmRldGVybWluYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dENoZWNrYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jODsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF9pbmRldGVybWluYXRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaW5kZXRlcm1pbmF0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpbmRldGVybWluYXRlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaW5kZXRlcm1pbmF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF9pbmRldGVybWluYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9ICJyaWdodCI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICAgKiB7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3ggewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94OmZvY3VzLXZpc2libGUgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogQ2hlY2ttYXJrIHVzaW5nIEx1Y2lkZSBpY29uIHN0eWxlICovCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgLmNoZWNrbWFyayB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgc3ZnIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgICB9CgogICAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5kaXNhYmxlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBMYWJlbCAqLwogICAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDJweDsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC5jaGVja2JveC1sYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIERlc2NyaXB0aW9uICovCiAgICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMudG9nZ2xlU2VsZWN0ZWR9Ij4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCAke3RoaXMudmFsdWUgPyAic2VsZWN0ZWQiIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIAogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCA2TDkgMTdMNCAxMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5pbmRldGVybWluYXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTUgMTJIMTkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgICR7dGhpcy5sYWJlbCA/IGIyYDxkaXYgY2xhc3M9ImNoZWNrYm94LWxhYmVsIj4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdG9nZ2xlU2VsZWN0ZWQoKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBmb2N1cygpIHsKICAgICAgICAgIGNvbnN0IGNoZWNrYm94RGl2ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGVja2JveCIpOwogICAgICAgICAgaWYgKGNoZWNrYm94RGl2KSB7CiAgICAgICAgICAgIGNoZWNrYm94RGl2LmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHsKICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICIgIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RlZCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMxNShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0lucHV0Q2hlY2tib3gyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBjb2xvcnMuanMKdmFyIGNvbG9yc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGNvbG9yc19leHBvcnRzLCB7CiAgYnJpZ2h0OiAoKSA9PiBicmlnaHQsCiAgZGFyazogKCkgPT4gZGFyawp9KTsKdmFyIGRhcmssIGJyaWdodDsKdmFyIGluaXRfY29sb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwY29sb3JzLmpzIigpIHsKICAgIGRhcmsgPSB7CiAgICAgIGJsdWU6ICIjMDA1MGI5IiwKICAgICAgYmx1ZUFjdGl2ZTogIiMwMDY5ZjIiLAogICAgICBibHVlTXV0ZWQ6ICIjMDEyNDUyIiwKICAgICAgdGV4dDogIiNmZmZmZmYiCiAgICB9OwogICAgYnJpZ2h0ID0gewogICAgICBibHVlOiAiIzAwNTBiOSIsCiAgICAgIGJsdWVBY3RpdmU6ICIjMDA2OWYyIiwKICAgICAgYmx1ZU11dGVkOiAiIzAwNjlmMiIsCiAgICAgIHRleHQ6ICIjMzMzMzMzIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmRlbW8uanMKdmFyIGRlbW9GdW5jOTsKdmFyIGluaXRfZGVlc19tb2RhbF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLW1vZGFsL2RlZXMtbW9kYWwuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX21vZGFsKCk7CiAgICBkZW1vRnVuYzkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gaDMgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBwIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgxNTBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkhlYWRlciBCdXR0b25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIG9wdGlvbmFsIGhlYWRlciBidXR0b25zIGZvciBoZWxwIGFuZCBjbG9zaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiV2l0aCBIZWxwIEJ1dHRvbiIsCiAgICAgICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICAgICAgb25IZWxwOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCBoZWxwTW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgICAgIGhlYWRpbmc6ICJIZWxwIiwKICAgICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSwKICAgICAgICAgICAgc2hvd0hlbHBCdXR0b246IGZhbHNlLAogICAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICAgICAgPHA+VGhpcyBpcyB0aGUgaGVscCBjb250ZW50IGZvciB0aGUgbW9kYWwuPC9wPgogICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHByb3ZpZGUgY29udGV4dC1zcGVjaWZpYyBoZWxwIGhlcmUuPC9wPgogICAgICAgICAgICAgICAgYCwKICAgICAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgICAgICB9XQogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGhlbHAgYnV0dG9uIGluIHRoZSBoZWFkZXIuIENsaWNrIGl0IHRvIHNlZSBoZWxwIGNvbnRlbnQuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjbG9zZSBidXR0b24gaXMgYWxzbyB2aXNpYmxlIGJ5IGRlZmF1bHQuPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIk9LIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PldpdGggSGVscCBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiTm8gQ2xvc2UgQnV0dG9uIiwKICAgICAgICBzaG93Q2xvc2VCdXR0b246IGZhbHNlLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIG5vIGNsb3NlIGJ1dHRvbiBpbiB0aGUgaGVhZGVyLjwvcD4KICAgICAgICAgICAgICA8cD5Zb3UgbXVzdCB1c2UgdGhlIGFjdGlvbiBidXR0b25zIG9yIGNsaWNrIG91dHNpZGUgdG8gY2xvc2UgaXQuPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19Pk5vIENsb3NlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJCb3RoIEJ1dHRvbnMiLAogICAgICAgIHNob3dIZWxwQnV0dG9uOiB0cnVlLAogICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSwKICAgICAgICBvbkhlbHA6ICgpID0+IGFsZXJ0KCJIZWxwIGNsaWNrZWQhIiksCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYm90aCBoZWxwIGFuZCBjbG9zZSBidXR0b25zLjwvcD4KICAgICAgICAgICAgYCwKICAgICAgICBtZW51T3B0aW9uczogW3sKICAgICAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PkJvdGggQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJDbGVhbiBIZWFkZXIiLAogICAgICAgIHNob3dDbG9zZUJ1dHRvbjogZmFsc2UsCiAgICAgICAgc2hvd0hlbHBCdXR0b246IGZhbHNlLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY2xlYW4gaGVhZGVyIHdpdGggbm8gYnV0dG9ucy48L3A+CiAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiQ2xvc2UiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH1dCiAgICAgIH0pOwogICAgfX0+Q2xlYW4gSGVhZGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPk1vZGFsIFdpZHRoIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IHdpZHRoczogc21hbGwsIG1lZGl1bSwgbGFyZ2UsIGZ1bGxzY3JlZW4sIG9yIGN1c3RvbSBwaXhlbCB2YWx1ZXMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJTbWFsbCBNb2RhbCIsCiAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHNtYWxsIG1vZGFsIHdpdGggYSB3aWR0aCBvZiAzODBweC4gUGVyZmVjdCBmb3Igc2ltcGxlIGNvbmZpcm1hdGlvbnMgb3IgYnJpZWYgbWVzc2FnZXMuPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogIk9LIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PlNtYWxsIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIk1lZGl1bSBNb2RhbCAoRGVmYXVsdCkiLAogICAgICAgIHdpZHRoOiAibWVkaXVtIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVXNlcm5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUGFzc3dvcmQifSAuaW5wdXRUeXBlPSR7InBhc3N3b3JkIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiU2lnbiBVcCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfV0KICAgICAgfSk7CiAgICB9fT5NZWRpdW0gTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiTGFyZ2UgTW9kYWwiLAogICAgICAgIHdpZHRoOiAibGFyZ2UiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxoND5XaWRlIENvbnRlbnQgQXJlYTwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBsYXJnZSBtb2RhbCBpcyA4MDBweCB3aWRlIGFuZCBwZXJmZWN0IGZvciBkaXNwbGF5aW5nIG1vcmUgY29tcGxleCBjb250ZW50IGxpa2UgZm9ybXMgd2l0aCBtdWx0aXBsZSBjb2x1bW5zLCB0YWJsZXMsIG9yIGRldGFpbGVkIGluZm9ybWF0aW9uLjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMTZweDsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiTGFzdCBOYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJDb21wYW55In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQb3NpdGlvbiJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogIlNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH1dCiAgICAgIH0pOwogICAgfX0+TGFyZ2UgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiRnVsbHNjcmVlbiBFZGl0b3IiLAogICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICAgICAgb25IZWxwOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhbGVydCgiSW4gYSByZWFsIGFwcCwgdGhpcyB3b3VsZCBzaG93IGVkaXRvciBkb2N1bWVudGF0aW9uIik7CiAgICAgICAgfSwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8aDQ+RnVsbHNjcmVlbiBFeHBlcmllbmNlIHdpdGggSGVhZGVyIENvbnRyb2xzPC9oND4KICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIHRha2VzIHVwIGFsbW9zdCB0aGUgZW50aXJlIHZpZXdwb3J0IHdpdGggYSAyMHB4IG1hcmdpbiBvbiBhbGwgc2lkZXMuIFRoZSBoZWFkZXIgYnV0dG9ucyBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBmdWxsc2NyZWVuIG1vZGUuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjb250ZW50IGFyZWEgY2FuIGJlIGFzIHRhbGwgYXMgbmVlZGVkIGFuZCB3aWxsIHNjcm9sbCBpZiBuZWNlc3NhcnkuPC9wPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImhlaWdodDogMjAwcHg7IGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMyYTJhMmEiKX07IGJvcmRlci1yYWRpdXM6IDhweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfSI+TGFyZ2UgY29udGVudCBhcmVhPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIlNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH1dCiAgICAgIH0pOwogICAgfX0+RnVsbHNjcmVlbiBNb2RhbDwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5DdXN0b20gV2lkdGggJiBDb25zdHJhaW50czwvaDM+CiAgICAgIDxwPllvdSBjYW4gYWxzbyBzZXQgY3VzdG9tIHBpeGVsIHdpZHRocyBhbmQgbWluL21heCBjb25zdHJhaW50cy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIkN1c3RvbSBXaWR0aCAoNzAwcHgpIiwKICAgICAgICB3aWR0aDogNzAwLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY3VzdG9tIHdpZHRoIG9mIGV4YWN0bHkgNzAwIHBpeGVscy48L3A+CiAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiQ2xvc2UiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH1dCiAgICAgIH0pOwogICAgfX0+Q3VzdG9tIDcwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIldpdGggTWF4IFdpZHRoIiwKICAgICAgICB3aWR0aDogImxhcmdlIiwKICAgICAgICBtYXhXaWR0aDogNjAwLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaXMgc2V0IHRvICdsYXJnZScgYnV0IGNvbnN0cmFpbmVkIGJ5IGEgbWF4V2lkdGggb2YgNjAwcHguPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfV0KICAgICAgfSk7CiAgICB9fT5NYXggV2lkdGggNjAwcHg8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiV2l0aCBNaW4gV2lkdGgiLAogICAgICAgIHdpZHRoOiAzMDAsCiAgICAgICAgbWluV2lkdGg6IDQwMCwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIHdpZHRoIGlzIHNldCB0byAzMDBweCBidXQgaGFzIGEgbWluV2lkdGggb2YgNDAwcHgsIHNvIGl0IHdpbGwgYmUgNDAwcHggd2lkZS48L3A+CiAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiT0siLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH1dCiAgICAgIH0pOwogICAgfX0+TWluIFdpZHRoIDQwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkJ1dHRvbiBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCBidXR0b24gY29uZmlndXJhdGlvbnMgd2l0aCBwcm9wZXIgc3BhY2luZy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIk11bHRpcGxlIEFjdGlvbnMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgZGVtb25zdHJhdGVzIG11bHRpcGxlIGJ1dHRvbnMgd2l0aCBwcm9wZXIgc3BhY2luZyBiZXR3ZWVuIHRoZW0uPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfSwgewogICAgICAgICAgbmFtZTogIlNhdmUgQ2hhbmdlcyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfV0KICAgICAgfSk7CiAgICB9fT5UaHJlZSBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIlNpbmdsZSBBY3Rpb24iLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlNvbWV0aW1lcyB5b3UganVzdCBuZWVkIG9uZSBidXR0b24uPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkFja25vd2xlZGdlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PlNpbmdsZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiTm8gQWN0aW9ucyIsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gYm90dG9tIGJ1dHRvbnMuIFVzZSB0aGUgWCBidXR0b24gb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZS48L3A+CiAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OyI+VGhpcyBpcyB1c2VmdWwgZm9yIGluZm9ybWF0aW9uYWwgbW9kYWxzIHRoYXQgZG9uJ3QgcmVxdWlyZSB1c2VyIGFjdGlvbi48L3A+CiAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFtdCiAgICAgIH0pOwogICAgfX0+Tm8gQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJMb25nIEJ1dHRvbiBMYWJlbHMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRlc3RpbmcgYnV0dG9uIGxheW91dCB3aXRoIGxvbmdlciBsYWJlbHMuPC9wPgogICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkRpc2NhcmQgQWxsIENoYW5nZXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIGFuZCBDb250aW51ZSBFZGl0aW5nIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PkxvbmcgTGFiZWxzPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlJlc3BvbnNpdmUgQmVoYXZpb3I8L2gzPgogICAgICA8cD5BbGwgbW9kYWxzIGF1dG9tYXRpY2FsbHkgYmVjb21lIGZ1bGwtd2lkdGggb24gbW9iaWxlIGRldmljZXMgKDwgNzY4cHggdmlld3BvcnQgd2lkdGgpIGZvciBiZXR0ZXIgdXNhYmlsaXR5LjwvcD4KICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJSZXNwb25zaXZlIE1vZGFsIiwKICAgICAgICB3aWR0aDogImxhcmdlIiwKICAgICAgICBzaG93SGVscEJ1dHRvbjogdHJ1ZSwKICAgICAgICBvbkhlbHA6ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIHJlcXVlc3RlZCBmb3IgcmVzcG9uc2l2ZSBtb2RhbCIpLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8cD5SZXNpemUgeW91ciBicm93c2VyIHdpbmRvdyB0byBzZWUgaG93IHRoaXMgbW9kYWwgYWRhcHRzLiBPbiBtb2JpbGUgdmlld3BvcnRzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSB0aGUgZnVsbCB3aWR0aCBtaW51cyBtYXJnaW5zLjwvcD4KICAgICAgICAgICAgPHA+VGhlIGhlYWRlciBidXR0b25zIHJlbWFpbiBhY2Nlc3NpYmxlIGF0IGFsbCB2aWV3cG9ydCBzaXplcy48L3A+CiAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH19PlRlc3QgUmVzcG9uc2l2ZTwvZGVlcy1idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmpzCnZhciBfX2VzRGVjb3JhdGUxNSwgX19ydW5Jbml0aWFsaXplcnMxNiwgRGVlc01vZGFsOwp2YXIgaW5pdF9kZWVzX21vZGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLW1vZGFsL2RlZXMtbW9kYWwuanMiKCkgewogICAgaW5pdF9jb2xvcnMoKTsKICAgIGluaXRfcGx1Z2luczQoKTsKICAgIGluaXRfemluZGV4KCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X2RlZXNfbW9kYWxfZGVtbygpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUxNSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczE2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzTW9kYWwgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1tb2RhbCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfaGVhZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZW51T3B0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX21lbnVPcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21lbnVPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF93aWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93aWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21heFdpZHRoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5XaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21pbldpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pbldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0hlbHBCdXR0b25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vbkhlbHBfZGVjb3JhdG9yczsKICAgICAgbGV0IF9vbkhlbHBfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb25IZWxwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udGVudFBhZGRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGVudFBhZGRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21vZGFsWkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21vZGFsWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfY29udGVudF9kZWNvcmF0b3JzID0gW3I1KHt9KV07CiAgICAgICAgICBfbWVudU9wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSh7fSldOwogICAgICAgICAgX3dpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX21heFdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX21pbldpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX3Nob3dDbG9zZUJ1dHRvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2hvd0hlbHBCdXR0b25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX29uSGVscF9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgICAgICBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfY29udGVudFBhZGRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfbW9kYWxaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9oZWFkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhlYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVhZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfY29udGVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb250ZW50ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50X2luaXRpYWxpemVycywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21lbnVPcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51T3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51T3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1lbnVPcHRpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51T3B0aW9uc19pbml0aWFsaXplcnMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfd2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dpZHRoX2luaXRpYWxpemVycywgX3dpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9tYXhXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4V2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4V2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhXaWR0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21pbldpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pbldpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5XaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5XaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1pbldpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5XaWR0aF9pbml0aWFsaXplcnMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dDbG9zZUJ1dHRvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0Nsb3NlQnV0dG9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDbG9zZUJ1dHRvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dDbG9zZUJ1dHRvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfc2hvd0hlbHBCdXR0b25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0hlbHBCdXR0b24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dIZWxwQnV0dG9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dIZWxwQnV0dG9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd0hlbHBCdXR0b24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9vbkhlbHBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib25IZWxwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvbkhlbHAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub25IZWxwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub25IZWxwID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vbkhlbHBfaW5pdGlhbGl6ZXJzLCBfb25IZWxwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9tb2JpbGVGdWxsc2NyZWVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1vYmlsZUZ1bGxzY3JlZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vYmlsZUZ1bGxzY3JlZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9iaWxlRnVsbHNjcmVlbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1vYmlsZUZ1bGxzY3JlZW4gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfY29udGVudFBhZGRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudFBhZGRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRQYWRkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRQYWRkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29udGVudFBhZGRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRQYWRkaW5nX2luaXRpYWxpemVycywgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RhbFpJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibW9kYWxaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kYWxaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tb2RhbFpJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc01vZGFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jOTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiT3ZlcmxheSJdOwogICAgICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KG9wdGlvbnNBcmcpIHsKICAgICAgICAgIGNvbnN0IGJvZHkzID0gZG9jdW1lbnQuYm9keTsKICAgICAgICAgIGNvbnN0IG1vZGFsID0gbmV3IERlZXNNb2RhbDIoKTsKICAgICAgICAgIG1vZGFsLmhlYWRpbmcgPSBvcHRpb25zQXJnLmhlYWRpbmc7CiAgICAgICAgICBtb2RhbC5jb250ZW50ID0gb3B0aW9uc0FyZy5jb250ZW50OwogICAgICAgICAgbW9kYWwubWVudU9wdGlvbnMgPSBvcHRpb25zQXJnLm1lbnVPcHRpb25zOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcud2lkdGgpCiAgICAgICAgICAgIG1vZGFsLndpZHRoID0gb3B0aW9uc0FyZy53aWR0aDsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1heFdpZHRoKQogICAgICAgICAgICBtb2RhbC5tYXhXaWR0aCA9IG9wdGlvbnNBcmcubWF4V2lkdGg7CiAgICAgICAgICBpZiAob3B0aW9uc0FyZy5taW5XaWR0aCkKICAgICAgICAgICAgbW9kYWwubWluV2lkdGggPSBvcHRpb25zQXJnLm1pbldpZHRoOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0Nsb3NlQnV0dG9uICE9PSB2b2lkIDApCiAgICAgICAgICAgIG1vZGFsLnNob3dDbG9zZUJ1dHRvbiA9IG9wdGlvbnNBcmcuc2hvd0Nsb3NlQnV0dG9uOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0hlbHBCdXR0b24gIT09IHZvaWQgMCkKICAgICAgICAgICAgbW9kYWwuc2hvd0hlbHBCdXR0b24gPSBvcHRpb25zQXJnLnNob3dIZWxwQnV0dG9uOwogICAgICAgICAgaWYgKG9wdGlvbnNBcmcub25IZWxwKQogICAgICAgICAgICBtb2RhbC5vbkhlbHAgPSBvcHRpb25zQXJnLm9uSGVscDsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1vYmlsZUZ1bGxzY3JlZW4gIT09IHZvaWQgMCkKICAgICAgICAgICAgbW9kYWwubW9iaWxlRnVsbHNjcmVlbiA9IG9wdGlvbnNBcmcubW9iaWxlRnVsbHNjcmVlbjsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLmNvbnRlbnRQYWRkaW5nICE9PSB2b2lkIDApCiAgICAgICAgICAgIG1vZGFsLmNvbnRlbnRQYWRkaW5nID0gb3B0aW9uc0FyZy5jb250ZW50UGFkZGluZzsKICAgICAgICAgIG1vZGFsLndpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICBibHVyOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIG1vZGFsLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJvZHkzLmFwcGVuZChtb2RhbC53aW5kb3dMYXllcik7CiAgICAgICAgICBib2R5My5hcHBlbmQobW9kYWwpOwogICAgICAgICAgbW9kYWwubW9kYWxaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcihtb2RhbCwgbW9kYWwubW9kYWxaSW5kZXgpOwogICAgICAgICAgcmV0dXJuIG1vZGFsOwogICAgICAgIH0KICAgICAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICIiKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBoZWFkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgY29udGVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWVudU9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWVudU9wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBtZW51T3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWVudU9wdGlvbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3dpZHRoX2luaXRpYWxpemVycywgIm1lZGl1bSIpKTsKICAgICAgICBnZXQgd2lkdGgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jd2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdpZHRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21heFdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tYXhXaWR0aF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBtYXhXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWF4V2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWluV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tYXhXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21pbldpZHRoX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IG1pbldpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtaW5XaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd0Nsb3NlQnV0dG9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dDbG9zZUJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd0Nsb3NlQnV0dG9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd0Nsb3NlQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93SGVscEJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd0hlbHBCdXR0b24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dIZWxwQnV0dG9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfb25IZWxwX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IG9uSGVscCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvbkhlbHBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG9uSGVscCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX29uSGVscF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBtb2JpbGVGdWxsc2NyZWVuKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZUZ1bGxzY3JlZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1vYmlsZUZ1bGxzY3JlZW4odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtb2JpbGVGdWxsc2NyZWVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50UGFkZGluZ19pbml0aWFsaXplcnMsIDE2KSk7CiAgICAgICAgZ2V0IGNvbnRlbnRQYWRkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZW50UGFkZGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtb2RhbFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgICAgICBnZXQgbW9kYWxaSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1vZGFsWkluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLm1vZGFsIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDAuOTUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgLyogV2lkdGggdmFyaWF0aW9ucyAqLwogICAgICAubW9kYWwud2lkdGgtc21hbGwgewogICAgICAgIHdpZHRoOiAzODBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLW1lZGl1bSB7CiAgICAgICAgd2lkdGg6IDU2MHB4OwogICAgICB9CgogICAgICAubW9kYWwud2lkdGgtbGFyZ2UgewogICAgICAgIHdpZHRoOiA4MDBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWZ1bGxzY3JlZW4gewogICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAubW9kYWwgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSA0MHB4KSAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEFsbG93IGZ1bGwgaGVpZ2h0IG9uIG1vYmlsZSB3aGVuIGNvbnRlbnQgbmVlZHMgaXQgKi8KICAgICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyMHB4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRnVsbCBzY3JlZW4gbW9kZSBvbiBtb2JpbGUgKi8KICAgICAgICAubW9kYWwubW9iaWxlLWZ1bGxzY3JlZW4gewogICAgICAgICAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tb2RhbC5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICB9CgogICAgICAubW9kYWwuc2hvdy5wcmVkZXN0cm95IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIHsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRpbmctdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWQ0ZWQ4IiwgIiMxZDRlZDgiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjMWQ0ZWQ4Iil9OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCB3aWR0aENsYXNzID0gdHlwZW9mIHRoaXMud2lkdGggPT09ICJzdHJpbmciID8gYHdpZHRoLSR7dGhpcy53aWR0aH1gIDogIiI7CiAgICAgICAgICBjb25zdCBjdXN0b21XaWR0aCA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAibnVtYmVyIiA/IGAke3RoaXMud2lkdGh9cHhgIDogIiI7CiAgICAgICAgICBjb25zdCBtYXhXaWR0aFN0eWxlID0gdGhpcy5tYXhXaWR0aCA/IGAke3RoaXMubWF4V2lkdGh9cHhgIDogIiI7CiAgICAgICAgICBjb25zdCBtaW5XaWR0aFN0eWxlID0gdGhpcy5taW5XaWR0aCA/IGAke3RoaXMubWluV2lkdGh9cHhgIDogIiI7CiAgICAgICAgICBjb25zdCBtb2JpbGVGdWxsc2NyZWVuQ2xhc3MgPSB0aGlzLm1vYmlsZUZ1bGxzY3JlZW4gPyAibW9iaWxlLWZ1bGxzY3JlZW4iIDogIiI7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAke2N1c3RvbVdpZHRoID8gYC5tb2RhbCB7IHdpZHRoOiAke2N1c3RvbVdpZHRofTsgfWAgOiAiIn0KICAgICAgICAke21heFdpZHRoU3R5bGUgPyBgLm1vZGFsIHsgbWF4LXdpZHRoOiAke21heFdpZHRoU3R5bGV9OyB9YCA6ICIifQogICAgICAgICR7bWluV2lkdGhTdHlsZSA/IGAubW9kYWwgeyBtaW4td2lkdGg6ICR7bWluV2lkdGhTdHlsZX07IH1gIDogIiJ9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsQ29udGFpbmVyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZU91dHNpZGVDbGlja30gc3R5bGU9InotaW5kZXg6ICR7dGhpcy5tb2RhbFpJbmRleH0iPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsICR7d2lkdGhDbGFzc30gJHttb2JpbGVGdWxsc2NyZWVuQ2xhc3N9Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXRleHQiPiR7dGhpcy5oZWFkaW5nfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9ucyI+CiAgICAgICAgICAgICAgJHt0aGlzLnNob3dIZWxwQnV0dG9uID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUhlbHB9IHRpdGxlPSJIZWxwIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6aGVscENpcmNsZSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICR7dGhpcy5zaG93Q2xvc2VCdXR0b24gPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b24iIEBjbGljaz0keygpID0+IHRoaXMuZGVzdHJveSgpfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogJHt0aGlzLmNvbnRlbnRQYWRkaW5nfXB4OyI+JHt0aGlzLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAke3RoaXMubWVudU9wdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CdXR0b25zIj4KICAgICAgICAgICAgICAke3RoaXMubWVudU9wdGlvbnMubWFwKChhY3Rpb25BcmcsIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbUJ1dHRvbiAke2luZGV4MiA9PT0gdGhpcy5tZW51T3B0aW9ucy5sZW5ndGggLSAxID8gInByaW1hcnkiIDogIiJ9ICR7YWN0aW9uQXJnLm5hbWUgPT09ICJPSyIgPyAib2siIDogIiJ9IiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICAgIGFjdGlvbkFyZy5hY3Rpb24odGhpcyk7CiAgICAgICAgICB9fT4ke2FjdGlvbkFyZy5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgY29uc3QgZG9tdG9vbHMyID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMCk7CiAgICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKTsKICAgICAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoInNob3ciKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50QXJnKSB7CiAgICAgICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbENvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGV2ZW50QXJnLnRhcmdldCA9PT0gbW9kYWxDb250YWluZXIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbCIpOwogICAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgicHJlZGVzdHJveSIpOwogICAgICAgICAgYXdhaXQgZG9tdG9vbHMyLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMjAwKTsKICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUhlbHAoKSB7CiAgICAgICAgICBpZiAodGhpcy5vbkhlbHApIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5vbkhlbHAoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNNb2RhbDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuZGVtby5qcwp2YXIgZGVtb0Z1bmMxMDsKdmFyIGluaXRfZGVlc19sYWJlbF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtbGFiZWwvZGVlcy1sYWJlbC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzEwID0gKCkgPT4gewogICAgICByZXR1cm4gYjJgCiAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHsiYSBsYWJlbCJ9PjwvZGVlcy1sYWJlbD4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuanMKdmFyIF9fZXNEZWNvcmF0ZTE2LCBfX3J1bkluaXRpYWxpemVyczE3LCBEZWVzTGFiZWw7CnZhciBpbml0X2RlZXNfbGFiZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1sYWJlbC9kZWVzLWxhYmVsLmpzIigpIHsKICAgIGluaXRfcGx1Z2luczQoKTsKICAgIGluaXRfY29sb3JzKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2xhYmVsX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTE2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNMYWJlbCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWxhYmVsIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNMYWJlbDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX3JlcXVpcmVkX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNih0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE2KHRoaXMsIG51bGwsIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkZXNjcmlwdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGVzY3JpcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGVzY3JpcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGVzY3JpcHRpb25faW5pdGlhbGl6ZXJzLCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTYodGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzTGFiZWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxMDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTGF5b3V0IiwgIklucHV0Il07CiAgICAgICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBsYWJlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGFiZWwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGRlc2NyaXB0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkZXNjcmlwdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCByZXF1aXJlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcmVxdWlyZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5yZXF1aXJlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLmxhYmVsID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj4KICAgICAgICAgICAgICAke3RoaXMubGFiZWx9CiAgICAgICAgICAgICAgJHt0aGlzLnJlcXVpcmVkID8gYjJgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTppbmZvIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IGIyYGB9CiAgICBgOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczE3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzTGFiZWwyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL3ZlcnNpb24uanMKdmFyIE1PTkFDT19WRVJTSU9OOwp2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1vbmFjby92ZXJzaW9uLmpzIigpIHsKICAgIE1PTkFDT19WRVJTSU9OID0gIjAuNTUuMSI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL2RlZXMtd29ya3NwYWNlLW1vbmFjby5qcwp2YXIgX19lc0RlY29yYXRlMTcsIF9fcnVuSW5pdGlhbGl6ZXJzMTgsIERlZXNXb3Jrc3BhY2VNb25hY287CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX21vbmFjbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vZGVlcy13b3Jrc3BhY2UtbW9uYWNvLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF92ZXJzaW9uKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUxNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczE4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzV29ya3NwYWNlTW9uYWNvID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY29udGVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGVudFN1YmplY3RfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dvcmRXcmFwX2RlY29yYXRvcnM7CiAgICAgIGxldCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNXb3Jrc3BhY2VNb25hY28yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY29udGVudF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfbGFuZ3VhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZwogICAgICAgICAgfSldOwogICAgICAgICAgX2ZpbGVQYXRoX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9jb250ZW50U3ViamVjdF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgICAgICB9KV07CiAgICAgICAgICBfd29yZFdyYXBfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9jb250ZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfbGFuZ3VhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFuZ3VhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhbmd1YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhbmd1YWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9maWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2NvbnRlbnRTdWJqZWN0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRTdWJqZWN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50U3ViamVjdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50U3ViamVjdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbnRlbnRTdWJqZWN0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfd29yZFdyYXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid29yZFdyYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndvcmRXcmFwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRXcmFwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud29yZFdyYXAgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRXcmFwX2luaXRpYWxpemVycywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIERFTU8KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdvcmtzcGFjZS1tb25hY28+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+YDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiV29ya3NwYWNlIl07CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIG1vbmFjb0RlZmVycmVkOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZWRpdG9yRGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCAiZnVuY3Rpb24gaGVsbG8oKSB7XG4JYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xufSIpOwogICAgICAgIGdldCBjb250ZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbnRlbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2ZpbGVQYXRoX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgZmlsZVBhdGgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGZpbGVQYXRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbnRlbnRTdWJqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSkpOwogICAgICAgIGdldCBjb250ZW50U3ViamVjdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29udGVudFN1YmplY3QodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX3dvcmRXcmFwX2luaXRpYWxpemVycywgIm9mZiIpKTsKICAgICAgICBnZXQgd29yZFdyYXAoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdvcmRXcmFwKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgbW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBpc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOwogICAgICAgICAgY29uc3QgbW9uYWNvQ2RuQmFzZSA9IGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21vbmFjby1lZGl0b3JAJHtNT05BQ09fVkVSU0lPTn1gOwogICAgICAgICAgaWYgKCFEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCkgewogICAgICAgICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCA9IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7bW9uYWNvQ2RuQmFzZX0vbWluL3ZzL2xvYWRlci5qc2A7CiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0VXJsOwogICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gewogICAgICAgICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yLm1vbmFjb0RlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgRGVlc1dvcmtzcGFjZU1vbmFjbzIubW9uYWNvRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgIHdpbmRvdy5yZXF1aXJlLmNvbmZpZyh7CiAgICAgICAgICAgIHBhdGhzOiB7IHZzOiBgJHttb25hY29DZG5CYXNlfS9taW4vdnNgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJ2cy9lZGl0b3IvZWRpdG9yLm1haW4iXSwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgICAgICBjb25zdCBpbml0aWFsVGhlbWUgPSBpc0JyaWdodCA/ICJ2cyIgOiAidnMtZGFyayI7CiAgICAgICAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgICAgICAgbGV0IG1vZGVsID0gbnVsbDsKICAgICAgICAgICAgaWYgKHRoaXMuZmlsZVBhdGgpIHsKICAgICAgICAgICAgICBjb25zdCB1cmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuZ2V0TW9kZWwodXJpKTsKICAgICAgICAgICAgICBpZiAoIW1vZGVsKSB7CiAgICAgICAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLmNvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIHVyaSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZGVsLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IGVkaXRvcjIgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlKGNvbnRhaW5lciwgewogICAgICAgICAgICAgIG1vZGVsOiBtb2RlbCB8fCB2b2lkIDAsCiAgICAgICAgICAgICAgdmFsdWU6IG1vZGVsID8gdm9pZCAwIDogdGhpcy5jb250ZW50LAogICAgICAgICAgICAgIGxhbmd1YWdlOiBtb2RlbCA/IHZvaWQgMCA6IHRoaXMubGFuZ3VhZ2UsCiAgICAgICAgICAgICAgdGhlbWU6IGluaXRpYWxUaGVtZSwKICAgICAgICAgICAgICB1c2VTaGFkb3dET006IHRydWUsCiAgICAgICAgICAgICAgZm9udFNpemU6IDE2LAogICAgICAgICAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSwKICAgICAgICAgICAgICB3b3JkV3JhcDogdGhpcy53b3JkV3JhcCwKICAgICAgICAgICAgICBob3ZlcjogewogICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgIGRlbGF5OiAzMDAsCiAgICAgICAgICAgICAgICBzdGlja3k6IHRydWUsCiAgICAgICAgICAgICAgICBhYm92ZTogZmFsc2UKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICAgICAgICBlZGl0b3IyLnVwZGF0ZU9wdGlvbnMoeyB0aGVtZTogbmV3VGhlbWUgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmVkaXRvckRlZmVycmVkLnJlc29sdmUoZWRpdG9yMik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IGNzczggPSBhd2FpdCAoYXdhaXQgZmV0Y2goYCR7bW9uYWNvQ2RuQmFzZX0vbWluL3ZzL2VkaXRvci9lZGl0b3IubWFpbi5jc3NgKSkudGV4dCgpOwogICAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzczg7CiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kKHN0eWxlRWxlbWVudCk7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICBlZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KHZhbHVlMik7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtY2hhbmdlIiwgewogICAgICAgICAgICAgIGRldGFpbDogdmFsdWUyLAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNvbnRlbnRTdWJqZWN0Lm5leHQoZWRpdG9yLmdldFZhbHVlKCkpOwogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImZpbGVQYXRoIikgJiYgdGhpcy5maWxlUGF0aCkgewogICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IHVyaSA9IG1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZmlsZTovLyR7dGhpcy5maWxlUGF0aH1gKTsKICAgICAgICAgICAgbGV0IG1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICAgICAgICAgIGlmICghbW9kZWwpIHsKICAgICAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLmNvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIHVyaSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKG1vZGVsLmdldFZhbHVlKCkgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gdHJ1ZTsKICAgICAgICAgICAgICAgIG1vZGVsLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgICAgIGlmIChjdXJyZW50TW9kZWw/LnVyaS50b1N0cmluZygpICE9PSB1cmkudG9TdHJpbmcoKSkgewogICAgICAgICAgICAgIGVkaXRvci5zZXRNb2RlbChtb2RlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29udGVudCIpKSB7CiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgICAgICAgICAgZWRpdG9yLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImxhbmd1YWdlIikpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgICAgICBpZiAobW9kZWwpIHsKICAgICAgICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RlbCwgdGhpcy5sYW5ndWFnZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgaWYgKHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24pIHsKICAgICAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIGNvbnRlbnQgZnJvbSBleHRlcm5hbCBzb3VyY2Ugd2l0aCBvcHRpb25hbCBjdXJzb3IgcHJlc2VydmF0aW9uLgogICAgICAgICAqIFVzZSB0aGlzIHdoZW4gdGhlIGZpbGUgY29udGVudCBjaGFuZ2VzIGV4dGVybmFsbHkgKGUuZy4sIGZpbGUgY2hhbmdlZCBvbiBkaXNrKS4KICAgICAgICAgKiBAcGFyYW0gbmV3Q29udGVudCBUaGUgbmV3IGNvbnRlbnQgdG8gc2V0CiAgICAgICAgICogQHBhcmFtIHByZXNlcnZlQ3Vyc29yIFdoZXRoZXIgdG8gcHJlc2VydmUgY3Vyc29yL3Njcm9sbCBwb3NpdGlvbiAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgKi8KICAgICAgICBhc3luYyBzZXRDb250ZW50RXh0ZXJuYWwobmV3Q29udGVudCwgcHJlc2VydmVDdXJzb3IgPSB0cnVlKSB7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IG5ld0NvbnRlbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFBvc2l0aW9uKCkgOiBudWxsOwogICAgICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNlbGVjdGlvbnMoKSA6IG51bGw7CiAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBwcmVzZXJ2ZUN1cnNvciA/IGVkaXRvci5nZXRTY3JvbGxUb3AoKSA6IDA7CiAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2Nyb2xsTGVmdCgpIDogMDsKICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgICAgICBlZGl0b3Iuc2V0VmFsdWUobmV3Q29udGVudCk7CiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgIGlmIChwcmVzZXJ2ZUN1cnNvcikgewogICAgICAgICAgICBpZiAocG9zaXRpb24zKSB7CiAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICAgICAgICBjb25zdCBsaW5lQ291bnQgPSBtb2RlbD8uZ2V0TGluZUNvdW50KCkgfHwgMTsKICAgICAgICAgICAgICBjb25zdCBjbGFtcGVkTGluZSA9IE1hdGgubWluKHBvc2l0aW9uMy5saW5lTnVtYmVyLCBsaW5lQ291bnQpOwogICAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBtb2RlbD8uZ2V0TGluZU1heENvbHVtbihjbGFtcGVkTGluZSkgfHwgMTsKICAgICAgICAgICAgICBjb25zdCBjbGFtcGVkQ29sdW1uID0gTWF0aC5taW4ocG9zaXRpb24zLmNvbHVtbiwgbGluZUxlbmd0aCk7CiAgICAgICAgICAgICAgZWRpdG9yLnNldFBvc2l0aW9uKHsgbGluZU51bWJlcjogY2xhbXBlZExpbmUsIGNvbHVtbjogY2xhbXBlZENvbHVtbiB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZWRpdG9yLnNldFNlbGVjdGlvbnMoc2VsZWN0aW9ucyk7CiAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVkaXRvci5zZXRTY3JvbGxQb3NpdGlvbih7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNb25hY28yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNvZGUvZGVlcy1pbnB1dC1jb2RlLmpzCnZhciBfX2VzRGVjb3JhdGUxOCwgX19ydW5Jbml0aWFsaXplcnMxOSwgTEFOR1VBR0VTLCBEZWVzSW5wdXRDb2RlOwp2YXIgaW5pdF9kZWVzX2lucHV0X2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNvZGUvZGVlcy1pbnB1dC1jb2RlLmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX21vZGFsKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZWVzX2xhYmVsKCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX21vbmFjbygpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9tb25hY28oKTsKICAgIF9fZXNEZWNvcmF0ZTE4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIExBTkdVQUdFUyA9IFsKICAgICAgeyBrZXk6ICJ0eXBlc2NyaXB0IiwgbGFiZWw6ICJUeXBlU2NyaXB0IiB9LAogICAgICB7IGtleTogImphdmFzY3JpcHQiLCBsYWJlbDogIkphdmFTY3JpcHQiIH0sCiAgICAgIHsga2V5OiAianNvbiIsIGxhYmVsOiAiSlNPTiIgfSwKICAgICAgeyBrZXk6ICJodG1sIiwgbGFiZWw6ICJIVE1MIiB9LAogICAgICB7IGtleTogImNzcyIsIGxhYmVsOiAiQ1NTIiB9LAogICAgICB7IGtleTogInNjc3MiLCBsYWJlbDogIlNDU1MiIH0sCiAgICAgIHsga2V5OiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiB9LAogICAgICB7IGtleTogInlhbWwiLCBsYWJlbDogIllBTUwiIH0sCiAgICAgIHsga2V5OiAieG1sIiwgbGFiZWw6ICJYTUwiIH0sCiAgICAgIHsga2V5OiAic3FsIiwgbGFiZWw6ICJTUUwiIH0sCiAgICAgIHsga2V5OiAicHl0aG9uIiwgbGFiZWw6ICJQeXRob24iIH0sCiAgICAgIHsga2V5OiAiamF2YSIsIGxhYmVsOiAiSmF2YSIgfSwKICAgICAgeyBrZXk6ICJjc2hhcnAiLCBsYWJlbDogIkMjIiB9LAogICAgICB7IGtleTogImNwcCIsIGxhYmVsOiAiQysrIiB9LAogICAgICB7IGtleTogImdvIiwgbGFiZWw6ICJHbyIgfSwKICAgICAgeyBrZXk6ICJydXN0IiwgbGFiZWw6ICJSdXN0IiB9LAogICAgICB7IGtleTogInNoZWxsIiwgbGFiZWw6ICJTaGVsbCIgfSwKICAgICAgeyBrZXk6ICJwbGFpbnRleHQiLCBsYWJlbDogIlBsYWluIFRleHQiIH0KICAgIF07CiAgICBEZWVzSW5wdXRDb2RlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtY29kZSIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hlaWdodF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2hlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93b3JkV3JhcF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3dvcmRXcmFwX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0xpbmVOdW1iZXJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dMaW5lTnVtYmVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvcHlTdWNjZXNzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvcHlTdWNjZXNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRDb2RlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2hlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF93b3JkV3JhcF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zaG93TGluZU51bWJlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfbGFuZ3VhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFuZ3VhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhbmd1YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhbmd1YWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9oZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGVpZ2h0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oZWlnaHRfaW5pdGlhbGl6ZXJzLCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF93b3JkV3JhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3b3JkV3JhcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZFdyYXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud29yZFdyYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai53b3JkV3JhcCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX3Nob3dMaW5lTnVtYmVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93TGluZU51bWJlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dMaW5lTnVtYmVycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93TGluZU51bWJlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93TGluZU51bWJlcnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMYW5ndWFnZURyb3Bkb3duT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNMYW5ndWFnZURyb3Bkb3duT3BlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xhbmd1YWdlRHJvcGRvd25PcGVuLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb3B5U3VjY2VzcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29weVN1Y2Nlc3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29weVN1Y2Nlc3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb3B5U3VjY2VzcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBfY29weVN1Y2Nlc3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0lucHV0Q29kZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWlucHV0LWNvZGUKICAgICAgbGFiZWw9IlR5cGVTY3JpcHQgQ29kZSIKICAgICAga2V5PSJjb2RlIgogICAgICBsYW5ndWFnZT0idHlwZXNjcmlwdCIKICAgICAgaGVpZ2h0PSIzMDBweCIKICAgICAgLnZhbHVlPSR7J2NvbnN0IGdyZWV0aW5nOiBzdHJpbmcgPSAiSGVsbG8gV29ybGQiO1xuY29uc29sZS5sb2coZ3JlZXRpbmcpOyd9CiAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgYDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiLCAiV29ya3NwYWNlIl07CiAgICAgICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2xhbmd1YWdlX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKSk7CiAgICAgICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9pbml0aWFsaXplcnMsICIyMDBweCIpKTsKICAgICAgICBnZXQgaGVpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2hlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaGVpZ2h0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3dvcmRXcmFwX2luaXRpYWxpemVycywgIm9mZiIpKTsKICAgICAgICBnZXQgd29yZFdyYXAoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdvcmRXcmFwKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dMaW5lTnVtYmVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfc2hvd0xpbmVOdW1iZXJzX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93TGluZU51bWJlcnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmVOdW1iZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93TGluZU51bWJlcnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNMYW5ndWFnZURyb3Bkb3duT3BlbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0xhbmd1YWdlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBjb3B5U3VjY2VzcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29weVN1Y2Nlc3ModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBlZGl0b3JFbGVtZW50ID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2NvcHlTdWNjZXNzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIsCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0idG9wIl0pIC5pbnB1dC13cmFwcGVyLAogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIsCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5jb2RlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudG9vbGJhci1sZWZ0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXJpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICBtYXgtaGVpZ2h0OiAyNTBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1pbi13aWR0aDogMTQwcHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUpOwogICAgICB9CgogICAgICAuZWRpdG9yLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhci1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5jb2RlLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSBMQU5HVUFHRVMuZmluZCgobDYpID0+IGw2LmtleSA9PT0gdGhpcy5sYW5ndWFnZSkgfHwgTEFOR1VBR0VTWzBdOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuaGVpZ2h0fTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1sZWZ0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iCiAgICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlTGFuZ3VhZ2VEcm9wZG93bn0KICAgICAgICAgICAgICAgICAgQGJsdXI9JHt0aGlzLmhhbmRsZUxhbmd1YWdlQmx1cn0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgJHtjdXJyZW50TGFuZ3VhZ2UubGFiZWx9CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkNoZXZyb25Eb3duIn0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgJHt0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZHJvcGRvd24iPgogICAgICAgICAgICAgICAgICAgICR7TEFOR1VBR0VTLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1vcHRpb24gJHtsYW5nLmtleSA9PT0gdGhpcy5sYW5ndWFnZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHsoZTExKSA9PiB0aGlzLnNlbGVjdExhbmd1YWdlKGUxMSwgbGFuZy5rZXkpfQogICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAke2xhbmcubGFiZWx9CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHt0aGlzLndvcmRXcmFwID09PSAib24iID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iV29yZCBXcmFwIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVXb3JkV3JhcH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpXcmFwVGV4dCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy5zaG93TGluZU51bWJlcnMgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgIHRpdGxlPSJMaW5lIE51bWJlcnMiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxpbmVOdW1iZXJzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkhhc2gifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZGl2aWRlciI+PC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy5jb3B5U3VjY2VzcyA/ICJzdWNjZXNzIiA6ICIifSIKICAgICAgICAgICAgICAgIHRpdGxlPSJDb3B5IENvZGUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmNvcHlDb2RlfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHt0aGlzLmNvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIHRpdGxlPSJFeHBhbmQiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLm9wZW5GdWxsc2NyZWVufQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOk1heGltaXplMiJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3Itd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgICAuY29udGVudD0ke3RoaXMudmFsdWV9CiAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5sYW5ndWFnZX0KICAgICAgICAgICAgICAud29yZFdyYXA9JHt0aGlzLndvcmRXcmFwfQogICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmNvbnRlbnRTdWJqZWN0LnN1YnNjcmliZSgobmV3Q29udGVudCkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBuZXdDb250ZW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKSB7CiAgICAgICAgICB0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuOwogICAgICAgIH0KICAgICAgICBoYW5kbGVMYW5ndWFnZUJsdXIoKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuID0gZmFsc2U7CiAgICAgICAgICB9LCAxNTApOwogICAgICAgIH0KICAgICAgICBhc3luYyBzZWxlY3RMYW5ndWFnZShlMTEsIGxhbmd1YWdlS2V5KSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZUtleTsKICAgICAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQubGFuZ3VhZ2UgPSBsYW5ndWFnZUtleTsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgIHdpbmRvdy5tb25hY28uZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UobW9kZWwsIGxhbmd1YWdlS2V5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b2dnbGVXb3JkV3JhcCgpIHsKICAgICAgICAgIHRoaXMud29yZFdyYXAgPSB0aGlzLndvcmRXcmFwID09PSAib24iID8gIm9mZiIgOiAib24iOwogICAgICAgICAgdGhpcy51cGRhdGVFZGl0b3JPcHRpb24oIndvcmRXcmFwIiwgdGhpcy53b3JkV3JhcCk7CiAgICAgICAgfQogICAgICAgIHRvZ2dsZUxpbmVOdW1iZXJzKCkgewogICAgICAgICAgdGhpcy5zaG93TGluZU51bWJlcnMgPSAhdGhpcy5zaG93TGluZU51bWJlcnM7CiAgICAgICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigibGluZU51bWJlcnMiLCB0aGlzLnNob3dMaW5lTnVtYmVycyA/ICJvbiIgOiAib2ZmIik7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZUVkaXRvck9wdGlvbihvcHRpb24yLCB2YWx1ZTIpIHsKICAgICAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGVkaXRvci51cGRhdGVPcHRpb25zKHsgW29wdGlvbjJdOiB2YWx1ZTIgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvcHlDb2RlKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy52YWx1ZSk7CiAgICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmNvcHlTdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHkgY29kZToiLCBlcnIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVDb250ZW50Q2hhbmdlKGUxMSkgewogICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGUxMS5kZXRhaWw7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIG9wZW5GdWxsc2NyZWVuKCkgewogICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgICAgIGxldCBtb2RhbEVkaXRvckVsZW1lbnQgPSBudWxsOwogICAgICAgICAgbGV0IG1vZGFsTGFuZ3VhZ2UgPSB0aGlzLmxhbmd1YWdlOwogICAgICAgICAgbGV0IG1vZGFsV29yZFdyYXAgPSB0aGlzLndvcmRXcmFwOwogICAgICAgICAgbGV0IG1vZGFsU2hvd0xpbmVOdW1iZXJzID0gdGhpcy5zaG93TGluZU51bWJlcnM7CiAgICAgICAgICBsZXQgbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICAgICAgbGV0IG1vZGFsQ29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IGdldExhbmd1YWdlTGFiZWwgPSAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBMQU5HVUFHRVMuZmluZCgobDYpID0+IGw2LmtleSA9PT0gbW9kYWxMYW5ndWFnZSk7CiAgICAgICAgICAgIHJldHVybiBsYW5nID8gbGFuZy5sYWJlbCA6ICJUeXBlU2NyaXB0IjsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCB1cGRhdGVUb29sYmFyVUkgPSAobW9kYWwyKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIyID0gbW9kYWwyLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgICAgIGlmICghdG9vbGJhcjIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWJ1dHRvbiBzcGFuIik7CiAgICAgICAgICAgIGlmIChsYW5nQnRuKQogICAgICAgICAgICAgIGxhbmdCdG4udGV4dENvbnRlbnQgPSBnZXRMYW5ndWFnZUxhYmVsKCk7CiAgICAgICAgICAgIGNvbnN0IHdyYXBCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICAgICAgaWYgKHdyYXBCdG4pIHsKICAgICAgICAgICAgICB3cmFwQnRuLmNsYXNzTGlzdC50b2dnbGUoImFjdGl2ZSIsIG1vZGFsV29yZFdyYXAgPT09ICJvbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IGxpbmVzQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxpbmVzLWJ0biIpOwogICAgICAgICAgICBpZiAobGluZXNCdG4pIHsKICAgICAgICAgICAgICBsaW5lc0J0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFNob3dMaW5lTnVtYmVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29weUJ0biA9IHRvb2xiYXIyLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LWJ0biIpOwogICAgICAgICAgICBjb25zdCBjb3B5SWNvbiA9IGNvcHlCdG4/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgICAgICBpZiAoY29weUJ0biAmJiBjb3B5SWNvbikgewogICAgICAgICAgICAgIGNvcHlCdG4uY2xhc3NMaXN0LnRvZ2dsZSgic3VjY2VzcyIsIG1vZGFsQ29weVN1Y2Nlc3MpOwogICAgICAgICAgICAgIGNvcHlJY29uLmljb24gPSBtb2RhbENvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWRyb3Bkb3duIik7CiAgICAgICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgICAgIGRyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPSBtb2RhbExhbmd1YWdlRHJvcGRvd25PcGVuID8gImJsb2NrIiA6ICJub25lIjsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICBoZWFkaW5nOiB0aGlzLmxhYmVsIHx8ICJDb2RlIEVkaXRvciIsCiAgICAgICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgICAgIGNvbnRlbnRQYWRkaW5nOiAwLAogICAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICA8c3R5bGU+CiAgICAgICAgICAubW9kYWwtdG9vbGJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWxlZnQgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLXJpZ2h0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2Utc2VsZWN0b3IgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAxMDAlOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICAgIG1pbi13aWR0aDogMTQwcHg7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2Utb3B0aW9uIHsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2Utb3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24uc3VjY2VzcyB7CiAgICAgICAgICAgIGNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUpOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC1lZGl0b3Itd3JhcHBlciB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTc1cHgpOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLXRvb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1sZWZ0Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Imxhbmd1YWdlLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke2dldExhbmd1YWdlTGFiZWwoKX08L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpDaGV2cm9uRG93biJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZHJvcGRvd24iPgogICAgICAgICAgICAgICAgJHtMQU5HVUFHRVMubWFwKChsYW5nKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1vcHRpb24gJHtsYW5nLmtleSA9PT0gbW9kYWxMYW5ndWFnZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmcua2V5fSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7bGFuZy5sYWJlbH0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItcmlnaHQiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiB3cmFwLWJ0biAke21vZGFsV29yZFdyYXAgPT09ICJvbiIgPyAiYWN0aXZlIiA6ICIifSIgdGl0bGU9IldvcmQgV3JhcCI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6V3JhcFRleHQifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gbGluZXMtYnRuICR7bW9kYWxTaG93TGluZU51bWJlcnMgPyAiYWN0aXZlIiA6ICIifSIgdGl0bGU9IkxpbmUgTnVtYmVycyI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6SGFzaCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiBjb3B5LWJ0biIgdGl0bGU9IkNvcHkgQ29kZSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q29weSJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAuY29udGVudD0ke2N1cnJlbnRWYWx1ZX0KICAgICAgICAgICAgLmxhbmd1YWdlPSR7bW9kYWxMYW5ndWFnZX0KICAgICAgICAgICAgLndvcmRXcmFwPSR7bW9kYWxXb3JkV3JhcH0KICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICA8L2Rpdj4KICAgICAgYCwKICAgICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJTYXZlICYgQ2xvc2UiLAogICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgICAgbW9kYWxFZGl0b3JFbGVtZW50ID0gbW9kYWxSZWYuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGVkaXRvci5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0pOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICAgIG1vZGFsRWRpdG9yRWxlbWVudCA9IG1vZGFsLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgY29uc3QgdG9vbGJhciA9IG1vZGFsLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgICBpZiAodG9vbGJhcikgewogICAgICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIubGFuZ3VhZ2UtYnV0dG9uIik7CiAgICAgICAgICAgIGxhbmdCdG4/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbjsKICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgbGFuZ09wdGlvbnMgPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5sYW5ndWFnZS1vcHRpb24iKTsKICAgICAgICAgICAgbGFuZ09wdGlvbnMuZm9yRWFjaCgob3B0aW9uMikgPT4gewogICAgICAgICAgICAgIG9wdGlvbjIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBuZXdMYW5nID0gb3B0aW9uMi5kYXRhc2V0Lmxhbmc7CiAgICAgICAgICAgICAgICBpZiAobmV3TGFuZyAmJiBtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgbW9kYWxMYW5ndWFnZSA9IG5ld0xhbmc7CiAgICAgICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5tb25hY28uZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UobW9kZWwsIG5ld0xhbmcpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGxhbmdPcHRpb25zLmZvckVhY2goKG9wdCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIikpOwogICAgICAgICAgICAgICAgICBvcHRpb24yLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIik7CiAgICAgICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCB3cmFwQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICAgICAgd3JhcEJ0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgbW9kYWxXb3JkV3JhcCA9IG1vZGFsV29yZFdyYXAgPT09ICJvbiIgPyAib2ZmIiA6ICJvbiI7CiAgICAgICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgICAgICBlZGl0b3IudXBkYXRlT3B0aW9ucyh7IHdvcmRXcmFwOiBtb2RhbFdvcmRXcmFwIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5saW5lcy1idG4iKTsKICAgICAgICAgICAgbGluZXNCdG4/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIG1vZGFsU2hvd0xpbmVOdW1iZXJzID0gIW1vZGFsU2hvd0xpbmVOdW1iZXJzOwogICAgICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IG1vZGFsRWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZU9wdGlvbnMoeyBsaW5lTnVtYmVyczogbW9kYWxTaG93TGluZU51bWJlcnMgPyAib24iIDogIm9mZiIgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBjb3B5QnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICAgICAgY29weUJ0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgICAgICBtb2RhbENvcHlTdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgbW9kYWxDb3B5U3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHkgY29kZToiLCBlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgICAgIGlmIChtb2RhbExhbmd1YWdlRHJvcGRvd25PcGVuICYmICFsYW5nQnRuPy5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgICAgICAgbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudCA9IHZhbHVlMjsKICAgICAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UudGhlbigoZWRpdG9yKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGVkaXRvci5nZXRWYWx1ZSgpICE9PSB2YWx1ZTIpIHsKICAgICAgICAgICAgICAgIGVkaXRvci5zZXRWYWx1ZSh2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcwp2YXIgZGVtb0Z1bmMxMTsKdmFyIGluaXRfZGVtbzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBpbml0X2NvbXBvbmVudDIoKTsKICAgIGRlbW9GdW5jMTEgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuZGF0ZS1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGF0ZVBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgICAgIGlmIChkYXRlUGlja2VyKSB7CiAgICAgICAgZGF0ZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJCYXNpYyBkYXRlIHNlbGVjdGVkOiIsIGV2ZW50LnRhcmdldC52YWx1ZSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgRGF0ZSBQaWNrZXIifSAuc3VidGl0bGU9JHsiU2ltcGxlIGRhdGUgc2VsZWN0aW9uIHdpdGhvdXQgdGltZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJTZWxlY3QgRGF0ZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDaG9vc2UgYSBkYXRlIGZyb20gdGhlIGNhbGVuZGFyIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGVUaW1lUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKTsKICAgICAgY29uc3QgYXBwb2ludG1lbnRQaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZGF0ZXBpY2tlcltsYWJlbD0iQXBwb2ludG1lbnQiXScpOwogICAgICBpZiAoZGF0ZVRpbWVQaWNrZXIpIHsKICAgICAgICBkYXRlVGltZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgICAgIGNvbnNvbGUubG9nKCIyNGggZm9ybWF0IGRhdGV0aW1lOiIsIHZhbHVlMik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGFwcG9pbnRtZW50UGlja2VyKSB7CiAgICAgICAgYXBwb2ludG1lbnRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBldmVudC50YXJnZXQudmFsdWU7CiAgICAgICAgICBjb25zb2xlLmxvZygiMTJoIGZvcm1hdCBkYXRldGltZToiLCB2YWx1ZTIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRhdGUgYW5kIFRpbWUgU2VsZWN0aW9uIn0gLnN1YnRpdGxlPSR7IkRhdGUgcGlja2VycyB3aXRoIHRpbWUgc2VsZWN0aW9uIGluIGRpZmZlcmVudCBmb3JtYXRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBib3RoIGRhdGUgYW5kIHRpbWUgKDI0LWhvdXIgZm9ybWF0KSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjI0aCIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkFwcG9pbnRtZW50IgogICAgICAgICAgZGVzY3JpcHRpb249IkRhdGUgYW5kIHRpbWUgd2l0aCBBTS9QTSBzZWxlY3RvciAoMTUtbWludXRlIGluY3JlbWVudHMpIgogICAgICAgICAgLmVuYWJsZVRpbWU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgLm1pbnV0ZUluY3JlbWVudD0kezE1fQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHRpbWV6b25lUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgICAgIHRpbWV6b25lUGlja2Vycy5mb3JFYWNoKChwaWNrZXIpID0+IHsKICAgICAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0YXJnZXQubGFiZWx9IHZhbHVlOmAsIHRhcmdldC52YWx1ZSk7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RhcmdldC5sYWJlbH0gZm9ybWF0dGVkOmAsIGlucHV0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRpbWV6b25lIFN1cHBvcnQifSAuc3VidGl0bGU9JHsiRGF0ZSBhbmQgdGltZSBzZWxlY3Rpb24gd2l0aCB0aW1lem9uZSBhd2FyZW5lc3MifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iTWVldGluZyBUaW1lICh3aXRoIFRpbWV6b25lKSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYSBkYXRlL3RpbWUgYW5kIHRpbWV6b25lIGZvciB0aGUgbWVldGluZyIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIC5lbmFibGVUaW1lem9uZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgICB0aW1lem9uZT0iQW1lcmljYS9OZXdfWW9yayIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ikdsb2JhbCBFdmVudCBTY2hlZHVsZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTY2hlZHVsZSBhbiBldmVudCBhY3Jvc3MgZGlmZmVyZW50IHRpbWV6b25lcyIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIC5lbmFibGVUaW1lem9uZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIxMmgiCiAgICAgICAgICB0aW1lem9uZT0iRXVyb3BlL0xvbmRvbiIKICAgICAgICAgIC5taW51dGVJbmNyZW1lbnQ9JHszMH0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBmdXR1cmVEYXRlUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTsKICAgICAgaWYgKGZ1dHVyZURhdGVQaWNrZXIpIHsKICAgICAgICBmdXR1cmVEYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICAgICAgaWYgKHZhbHVlMikgewogICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh2YWx1ZTIpOwogICAgICAgICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgICAgICBjb25zdCBkYXlzRGlmZiA9IE1hdGguZmxvb3IoKHNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkgLSB0b2RheS5nZXRUaW1lKCkpIC8gKDFlMyAqIDYwICogNjAgKiAyNCkpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VsZWN0ZWQgZGF0ZSBpcyAke2RheXNEaWZmfSBkYXlzIGZyb20gdG9kYXlgKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSArIDkwICogMjQgKiA2MCAqIDYwICogMWUzKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGZvcm1hdHRlcnMyID0gewogICAgICAgICJERC9NTS9ZWVlZIjogIkV1cm9wZWFuIiwKICAgICAgICAiTU0vREQvWVlZWSI6ICJVUyIsCiAgICAgICAgIllZWVktTU0tREQiOiAiSVNPIgogICAgICB9OwogICAgICBjb25zdCBkYXRlUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgICAgIGRhdGVQaWNrZXJzLmZvckVhY2goKHBpY2tlcikgPT4gewogICAgICAgIHBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGFyZ2V0LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRlLWlucHV0Iik7CiAgICAgICAgICBpZiAoaW5wdXQpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXQ6YCwgaW5wdXQudmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGF0ZSBGb3JtYXRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBkYXRlIGRpc3BsYXkgZm9ybWF0cyBmb3IgdmFyaW91cyByZWdpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF0ZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJFdXJvcGVhbiBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9IkREL01NL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iVVMgRm9ybWF0IgogICAgICAgICAgICBkYXRlRm9ybWF0PSJNTS9ERC9ZWVlZIgogICAgICAgICAgICAudmFsdWU9JHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCl9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IklTTyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9IllZWVktTU0tREQiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHJlcXVpcmVkUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXJbcmVxdWlyZWRdIik7CiAgICAgIGlmIChyZXF1aXJlZFBpY2tlcikgewogICAgICAgIHJlcXVpcmVkUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBwaWNrZXIgPSByZXF1aXJlZFBpY2tlcjsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHBpY2tlci5nZXRWYWx1ZSgpOwogICAgICAgICAgaWYgKCF2YWx1ZTIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJlcXVpcmVkIGRhdGUgZmllbGQgaXMgZW1wdHkiKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCB1c1BpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJVUyBDYWxlbmRhciJdJyk7CiAgICAgIGNvbnN0IGV1UGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkVVIENhbGVuZGFyIl0nKTsKICAgICAgaWYgKHVzUGlja2VyKSB7CiAgICAgICAgY29uc29sZS5sb2coIlVTIENhbGVuZGFyIHN0YXJ0cyBvbiBTdW5kYXkgKDApIik7CiAgICAgIH0KICAgICAgaWYgKGV1UGlja2VyKSB7CiAgICAgICAgY29uc29sZS5sb2coIkVVIENhbGVuZGFyIHN0YXJ0cyBvbiBNb25kYXkgKDEpIik7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZ2VuZXJhdGVXZWVrZW5kcyA9ICgpID0+IHsKICAgICAgICBjb25zdCB3ZWVrZW5kcyA9IFtdOwogICAgICAgIGNvbnN0IG5vdzIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgICAgd2hpbGUgKGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGgpIHsKICAgICAgICAgIGlmIChkYXRlLmdldERheSgpID09PSAwIHx8IGRhdGUuZ2V0RGF5KCkgPT09IDYpIHsKICAgICAgICAgICAgd2Vla2VuZHMucHVzaChuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpKTsKICAgICAgICAgIH0KICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gd2Vla2VuZHM7CiAgICAgIH07CiAgICAgIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgICAgIGlmIChwaWNrZXIpIHsKICAgICAgICBwaWNrZXIuZGlzYWJsZWREYXRlcyA9IGdlbmVyYXRlV2Vla2VuZHMoKTsKICAgICAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRpc2FibGVkIERhdGVzIn0gLnN1YnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggc3BlY2lmaWMgZGF0ZXMgZGlzYWJsZWQgKHdlZWtlbmRzIGluIGN1cnJlbnQgbW9udGgpIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkF2YWlsYWJpbGl0eSBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrZW5kcyBhcmUgZGlzYWJsZWQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IHRvZGF5LmdldE1vbnRoKCk7CiAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTsKICAgICAgY29uc3Qgc2FtcGxlRXZlbnRzID0gWwogICAgICAgIC8vIEN1cnJlbnQgd2VlayBldmVudHMKICAgICAgICB7CiAgICAgICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0ke3RvZGF5LmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgICAgIHRpdGxlOiAiVGVhbSBNZWV0aW5nIiwKICAgICAgICAgIHR5cGU6ICJpbmZvIiwKICAgICAgICAgIGNvdW50OiAyCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgICAgIHRpdGxlOiAiUHJvamVjdCBEZWFkbGluZSIsCiAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGRhdGU6IGAke2N1cnJlbnRZZWFyfS0keyhjdXJyZW50TW9udGggKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7KHRvZGF5LmdldERhdGUoKSArIDIpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gLAogICAgICAgICAgdGl0bGU6ICJSZWxlYXNlIERheSIsCiAgICAgICAgICB0eXBlOiAic3VjY2VzcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGRhdGU6IGAke2N1cnJlbnRZZWFyfS0keyhjdXJyZW50TW9udGggKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7KHRvZGF5LmdldERhdGUoKSArIDUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gLAogICAgICAgICAgdGl0bGU6ICJVcmdlbnQgRml4IFJlcXVpcmVkIiwKICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICB9LAogICAgICAgIC8vIE11bHRpcGxlIGV2ZW50cyBvbiBvbmUgZGF5CiAgICAgICAgewogICAgICAgICAgZGF0ZTogYCR7Y3VycmVudFllYXJ9LSR7KGN1cnJlbnRNb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0tJHsodG9kYXkuZ2V0RGF0ZSgpICsgNykudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWAsCiAgICAgICAgICB0aXRsZTogIk11bHRpcGxlIEV2ZW50cyBUb2RheSIsCiAgICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgICBjb3VudDogNQogICAgICAgIH0sCiAgICAgICAgLy8gTmV4dCBtb250aCBldmVudAogICAgICAgIHsKICAgICAgICAgIGRhdGU6IGAke2N1cnJlbnRZZWFyfS0keyhjdXJyZW50TW9udGggKyAyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LTE1YCwKICAgICAgICAgIHRpdGxlOiAiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLAogICAgICAgICAgdHlwZTogImluZm8iCiAgICAgICAgfQogICAgICBdOwogICAgICBjb25zdCBwaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogICAgICBpZiAocGlja2VyKSB7CiAgICAgICAgcGlja2VyLmV2ZW50cyA9IHNhbXBsZUV2ZW50czsKICAgICAgICBjb25zb2xlLmxvZygiQ2FsZW5kYXIgZXZlbnRzIGxvYWRlZDoiLCBzYW1wbGVFdmVudHMpOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBwaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNldmVudC1vdXRwdXQiKTsKICAgICAgaWYgKHBpY2tlciAmJiBvdXRwdXQpIHsKICAgICAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSB0YXJnZXQudmFsdWU7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZTIpOwogICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGlucHV0Py52YWx1ZSB8fCAiTi9BIjsKICAgICAgICAgICAgb3V0cHV0LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICA8c3Ryb25nPkV2ZW50IHRyaWdnZXJlZCE8L3N0cm9uZz48YnI+CiAgICAgICAgICAgICAgSVNPIFZhbHVlOiAke3ZhbHVlMn08YnI+CiAgICAgICAgICAgICAgRm9ybWF0dGVkOiAke2Zvcm1hdHRlZFZhbHVlfTxicj4KICAgICAgICAgICAgICBEYXRlIG9iamVjdDogJHtkYXRlLnRvTG9jYWxlU3RyaW5nKCl9CiAgICAgICAgICAgIGA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5EYXRlIGNsZWFyZWQ8L2VtPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiRGF0ZXBpY2tlciBsb3N0IGZvY3VzIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRXZlbnQgSGFuZGxpbmcifSAuc3VidGl0bGU9JHsiSW50ZXJhY3RpdmUgZGVtb25zdHJhdGlvbiBvZiBjaGFuZ2UgZXZlbnRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkV2ZW50IERlbW8iCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZSB0byBzZWUgdGhlIGV2ZW50IGRldGFpbHMiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9ImV2ZW50LW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIDxlbT5TZWxlY3QgYSBkYXRlIHRvIHNlZSBldmVudCBkZXRhaWxzLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3N0eWxlcy5qcwp2YXIgZGF0ZXBpY2tlclN0eWxlczsKdmFyIGluaXRfc3R5bGVzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZGF0ZXBpY2tlci9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBkYXRlcGlja2VyU3R5bGVzID0gWwogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwgImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsICIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmRheTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5kYXkuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAvKiBFdmVudCBpbmRpY2F0b3JzICovCiAgICAgIC5kYXkuaGFzLWV2ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pbmRpY2F0b3IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QgewogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwgImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsICJoc2woNDUgOTAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Quc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNjklIDQ1JSkiLCAiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBldmVudCBkZXRhaWxzICovCiAgICAgIC5ldmVudC10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA4cHgpOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGF5Lmhhcy1ldmVudDpob3ZlciAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogVGltZSBzZWxlY3RvciAqLwogICAgICAudGltZS1zZWxlY3RvciB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCAiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VwYXJhdG9yIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBidXR0b25zICovCiAgICAgIC5jYWxlbmRhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudG9kYXktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Q6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsICJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3RlbXBsYXRlLmpzCnZhciByZW5kZXJEYXRlcGlja2VyOwp2YXIgaW5pdF90ZW1wbGF0ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvdGVtcGxhdGUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIHJlbmRlckRhdGVwaWNrZXIgPSAoY29tcG9uZW50KSA9PiB7CiAgICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbCiAgICAgICAgIkphbnVhcnkiLAogICAgICAgICJGZWJydWFyeSIsCiAgICAgICAgIk1hcmNoIiwKICAgICAgICAiQXByaWwiLAogICAgICAgICJNYXkiLAogICAgICAgICJKdW5lIiwKICAgICAgICAiSnVseSIsCiAgICAgICAgIkF1Z3VzdCIsCiAgICAgICAgIlNlcHRlbWJlciIsCiAgICAgICAgIk9jdG9iZXIiLAogICAgICAgICJOb3ZlbWJlciIsCiAgICAgICAgIkRlY2VtYmVyIgogICAgICBdOwogICAgICBjb25zdCB3ZWVrRGF5cyA9IGNvbXBvbmVudC53ZWVrU3RhcnRzT24gPT09IDEgPyBbIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIiwgIlN1Il0gOiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl07CiAgICAgIGNvbnN0IGRheXMyID0gY29tcG9uZW50LmdldERheXNJbk1vbnRoKCk7CiAgICAgIGNvbnN0IGlzQU0gPSBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIDwgMTI7CiAgICAgIGNvbnN0IHRpbWV6b25lcyA9IGNvbXBvbmVudC5nZXRUaW1lem9uZXMoKTsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7Y29tcG9uZW50LmxhYmVsfSAuZGVzY3JpcHRpb249JHtjb21wb25lbnQuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke2NvbXBvbmVudC5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udGFpbmVyIj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBjbGFzcz0iZGF0ZS1pbnB1dCAke2NvbXBvbmVudC5pc09wZW5lZCA/ICJvcGVuIiA6ICIifSIKICAgICAgICAgICAgICAudmFsdWU9JHtjb21wb25lbnQuZm9ybWF0RGF0ZShjb21wb25lbnQudmFsdWUpfQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke2NvbXBvbmVudC5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtjb21wb25lbnQuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7Y29tcG9uZW50LnRvZ2dsZUNhbGVuZGFyfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUtleWRvd259CiAgICAgICAgICAgICAgQGlucHV0PSR7Y29tcG9uZW50LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7Y29tcG9uZW50LmhhbmRsZUlucHV0Qmx1cn0KICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZy1yaWdodDogJHtjb21wb25lbnQudmFsdWUgPyAiNjRweCIgOiAiNDBweCJ9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQudmFsdWUgJiYgIWNvbXBvbmVudC5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJWYWx1ZX0gdGl0bGU9IkNsZWFyIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7Y29tcG9uZW50LmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7Y29tcG9uZW50Lm9wZW5zVG9Ub3AgPyAidG9wIiA6ICJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5wcmV2aW91c01vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvbkxlZnQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vbnRoLXllYXItZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7bW9udGhOYW1lc1tjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKV19ICR7Y29tcG9uZW50LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5uZXh0TW9udGh9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGV2cm9uUmlnaHQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2Vla2RheXMiPgogICAgICAgICAgICAgICAgJHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gYjJgPGRpdiBjbGFzcz0id2Vla2RheSI+JHtkYXl9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2RheXMyLm1hcCgoZGF5KSA9PiB7CiAgICAgICAgY29uc3QgaXNUb2RheTMgPSBjb21wb25lbnQuaXNUb2RheShkYXkpOwogICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjb21wb25lbnQuaXNTZWxlY3RlZChkYXkpOwogICAgICAgIGNvbnN0IGlzT3RoZXJNb250aCA9IGRheS5nZXRNb250aCgpICE9PSBjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gY29tcG9uZW50LmlzRGlzYWJsZWQoZGF5KTsKICAgICAgICBjb25zdCBkYXlFdmVudHMgPSBjb21wb25lbnQuZ2V0RXZlbnRzRm9yRGF0ZShkYXkpOwogICAgICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwOwogICAgICAgIGNvbnN0IHRvdGFsRXZlbnRDb3VudCA9IGRheUV2ZW50cy5yZWR1Y2UoKHN1bSwgZXZlbnQpID0+IHN1bSArIChldmVudC5jb3VudCB8fCAxKSwgMCk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGF5ICR7aXNPdGhlck1vbnRoID8gIm90aGVyLW1vbnRoIiA6ICIifSAke2lzVG9kYXkzID8gInRvZGF5IiA6ICIifSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0gJHtoYXNFdmVudHMgPyAiaGFzLWV2ZW50IiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+ICFpc0Rpc2FibGVkICYmIGNvbXBvbmVudC5zZWxlY3REYXRlKGRheSl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtkYXkuZ2V0RGF0ZSgpfQogICAgICAgICAgICAgICAgICAgICAgJHtoYXNFdmVudHMgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgJHt0b3RhbEV2ZW50Q291bnQgPiAzID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtY291bnQiPiR7dG90YWxFdmVudENvdW50fTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtaW5kaWNhdG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF5RXZlbnRzLnNsaWNlKDAsIDMpLm1hcCgoZXZlbnQpID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJldmVudC1kb3QgJHtldmVudC50eXBlIHx8ICJpbmZvIn0iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF5RXZlbnRzWzBdLnRpdGxlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtdG9vbHRpcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50c1swXS50aXRsZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dG90YWxFdmVudENvdW50ID4gMSA/IGIyYCAoKyR7dG90YWxFdmVudENvdW50IC0gMX0gbW9yZSlgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYDsKICAgICAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5lbmFibGVUaW1lID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3Rvci10aXRsZSI+VGltZTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLWlucHV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IChjb21wb25lbnQuc2VsZWN0ZWRIb3VyID09PSAwID8gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyID4gMTIgPyBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIC0gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IGNvbXBvbmVudC5oYW5kbGVIb3VySW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iJHtjb21wb25lbnQudGltZUZvcm1hdCA9PT0gIjEyaCIgPyAxIDogMH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7Y29tcG9uZW50LnRpbWVGb3JtYXQgPT09ICIxMmgiID8gMTIgOiAyM30iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1zZXBhcmF0b3IiPjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC5zZWxlY3RlZE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9CiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlTWludXRlSW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke2NvbXBvbmVudC5taW51dGVJbmNyZW1lbnQgfHwgMX0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0tcG0tc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHtpc0FNID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBjb21wb25lbnQuc2V0QU1QTSgiYW0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIEFNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHshaXNBTSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gY29tcG9uZW50LnNldEFNUE0oInBtIil9CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICBQTQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICAgIDwhLS0gVGltZXpvbmUgU2VsZWN0b3IgLS0+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQuZW5hYmxlVGltZXpvbmUgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWV6b25lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3ItdGl0bGUiPlRpbWV6b25lPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRpbWV6b25lLXNlbGVjdCIgCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7Y29tcG9uZW50LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dGltZXpvbmVzLm1hcCgodHopID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHt0ei52YWx1ZX0iID9zZWxlY3RlZD0ke3R6LnZhbHVlID09PSBjb21wb25lbnQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3R6LmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5zZWxlY3RUb2RheX0+CiAgICAgICAgICAgICAgICAgIFRvZGF5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJ9PgogICAgICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlMTksIF9fcnVuSW5pdGlhbGl6ZXJzMjAsIERlZXNJbnB1dERhdGVwaWNrZXI7CnZhciBpbml0X2NvbXBvbmVudDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogICAgaW5pdF9kZW1vMigpOwogICAgaW5pdF9zdHlsZXMyKCk7CiAgICBpbml0X3RlbXBsYXRlMigpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19sYWJlbCgpOwogICAgX19lc0RlY29yYXRlMTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMyMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0lucHV0RGF0ZXBpY2tlciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VuYWJsZVRpbWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9lbmFibGVUaW1lX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VuYWJsZVRpbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lRm9ybWF0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGltZUZvcm1hdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWludXRlSW5jcmVtZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RhdGVGb3JtYXRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kYXRlRm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5EYXRlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWluRGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RGF0ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21heERhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Rpc2FibGVkRGF0ZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kaXNhYmxlZERhdGVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93ZWVrU3RhcnRzT25fZGVjb3JhdG9yczsKICAgICAgbGV0IF93ZWVrU3RhcnRzT25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VuYWJsZVRpbWV6b25lX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZW5hYmxlVGltZXpvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lem9uZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RpbWV6b25lX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXZlbnRzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZXZlbnRzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzT3BlbmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNPcGVuZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcGVuc1RvVG9wX2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWREYXRlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWREYXRlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZpZXdEYXRlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZEhvdXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZEhvdXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRNaW51dGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0RGF0ZXBpY2tlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9lbmFibGVUaW1lX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF90aW1lRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX21pbnV0ZUluY3JlbWVudF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9kYXRlRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX21pbkRhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfbWF4RGF0ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9kaXNhYmxlZERhdGVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2VuYWJsZVRpbWV6b25lX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF90aW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9ldmVudHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9pc09wZW5lZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9zZWxlY3RlZERhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92aWV3RGF0ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3NlbGVjdGVkTWludXRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9lbmFibGVUaW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVuYWJsZVRpbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVRpbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW5hYmxlVGltZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVuYWJsZVRpbWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBfZW5hYmxlVGltZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdGltZUZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aW1lRm9ybWF0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lRm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbWVGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50aW1lRm9ybWF0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aW1lRm9ybWF0X2luaXRpYWxpemVycywgX3RpbWVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX21pbnV0ZUluY3JlbWVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW51dGVJbmNyZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pbnV0ZUluY3JlbWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW51dGVJbmNyZW1lbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5taW51dGVJbmNyZW1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX2RhdGVGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGF0ZUZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGF0ZUZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRlRm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGF0ZUZvcm1hdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0ZUZvcm1hdF9pbml0aWFsaXplcnMsIF9kYXRlRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9taW5EYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pbkRhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pbkRhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluRGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1pbkRhdGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbkRhdGVfaW5pdGlhbGl6ZXJzLCBfbWluRGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfbWF4RGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhEYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhEYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heERhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhEYXRlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhEYXRlX2luaXRpYWxpemVycywgX21heERhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX2Rpc2FibGVkRGF0ZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWREYXRlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzYWJsZWREYXRlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXNhYmxlZERhdGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGlzYWJsZWREYXRlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIF9kaXNhYmxlZERhdGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF93ZWVrU3RhcnRzT25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2Vla1N0YXJ0c09uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3ZWVrU3RhcnRzT24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2Vla1N0YXJ0c09uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2Vla1N0YXJ0c09uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93ZWVrU3RhcnRzT25faW5pdGlhbGl6ZXJzLCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX2VuYWJsZVRpbWV6b25lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVuYWJsZVRpbWV6b25lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbmFibGVUaW1lem9uZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVUaW1lem9uZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVuYWJsZVRpbWV6b25lID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVUaW1lem9uZV9pbml0aWFsaXplcnMsIF9lbmFibGVUaW1lem9uZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdGltZXpvbmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGltZXpvbmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpbWV6b25lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbWV6b25lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGltZXpvbmUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWV6b25lX2luaXRpYWxpemVycywgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9ldmVudHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXZlbnRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJldmVudHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXZlbnRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXZlbnRzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ldmVudHNfaW5pdGlhbGl6ZXJzLCBfZXZlbnRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9pc09wZW5lZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc09wZW5lZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNPcGVuZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNPcGVuZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNPcGVuZWRfaW5pdGlhbGl6ZXJzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZERhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWREYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZERhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWREYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0ZWREYXRlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZERhdGVfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWREYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF92aWV3RGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aWV3RGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmlld0RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlld0RhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52aWV3RGF0ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzLCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZEhvdXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSG91ciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZEhvdXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3RlZEhvdXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSG91cl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEhvdXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3NlbGVjdGVkTWludXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkTWludXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZE1pbnV0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZE1pbnV0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE1pbnV0ZV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUxOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXREYXRlcGlja2VyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTE7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBlbmFibGVUaW1lKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVuYWJsZVRpbWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbmFibGVUaW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzLCAiMjRoIikpOwogICAgICAgIGdldCB0aW1lRm9ybWF0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRpbWVGb3JtYXQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycywgMSkpOwogICAgICAgIGdldCBtaW51dGVJbmNyZW1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWludXRlSW5jcmVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtaW51dGVJbmNyZW1lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICAgICAgZ2V0IGRhdGVGb3JtYXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGF0ZUZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWluRGF0ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IG1pbkRhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWluRGF0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21heERhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWF4RGF0ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IG1heERhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWF4RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWF4RGF0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21heERhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9tYXhEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGRpc2FibGVkRGF0ZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWREYXRlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3dlZWtTdGFydHNPbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF93ZWVrU3RhcnRzT25faW5pdGlhbGl6ZXJzLCAxKSk7CiAgICAgICAgZ2V0IHdlZWtTdGFydHNPbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gRGVmYXVsdCB0byBNb25kYXkKICAgICAgICBzZXQgd2Vla1N0YXJ0c09uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd2Vla1N0YXJ0c09uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICAgICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZXpvbmVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBlbmFibGVUaW1lem9uZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZW5hYmxlVGltZXpvbmUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3RpbWV6b25lX2luaXRpYWxpemVycywgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lKSk7CiAgICAgICAgZ2V0IHRpbWV6b25lKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0aW1lem9uZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGV2ZW50cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGV2ZW50cyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V2ZW50c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNPcGVuZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9ldmVudHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzT3BlbmVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpc09wZW5lZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgc2VsZWN0ZWREYXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWREYXRlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN2aWV3RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3ZpZXdEYXRlX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpKTsKICAgICAgICBnZXQgdmlld0RhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZpZXdEYXRlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkSG91cl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3ZpZXdEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBzZWxlY3RlZEhvdXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRIb3VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZEhvdXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IHNlbGVjdGVkTWludXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZE1pbnV0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBkYXRlcGlja2VyU3R5bGVzOwogICAgICAgIGdldFRpbWV6b25lcygpIHsKICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHsgdmFsdWU6ICJVVEMiLCBsYWJlbDogIlVUQyAoQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUpIiB9LAogICAgICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9OZXdfWW9yayIsIGxhYmVsOiAiRWFzdGVybiBUaW1lIChVUyAmIENhbmFkYSkiIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0NoaWNhZ28iLCBsYWJlbDogIkNlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9EZW52ZXIiLCBsYWJlbDogIk1vdW50YWluIFRpbWUgKFVTICYgQ2FuYWRhKSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCBsYWJlbDogIlBhY2lmaWMgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9QaG9lbml4IiwgbGFiZWw6ICJBcml6b25hIiB9LAogICAgICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9BbmNob3JhZ2UiLCBsYWJlbDogIkFsYXNrYSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvSG9ub2x1bHUiLCBsYWJlbDogIkhhd2FpaSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9Mb25kb24iLCBsYWJlbDogIkxvbmRvbiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9QYXJpcyIsIGxhYmVsOiAiUGFyaXMiIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvQmVybGluIiwgbGFiZWw6ICJCZXJsaW4iIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvTW9zY293IiwgbGFiZWw6ICJNb3Njb3ciIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICJBc2lhL0R1YmFpIiwgbGFiZWw6ICJEdWJhaSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkFzaWEvS29sa2F0YSIsIGxhYmVsOiAiSW5kaWEgU3RhbmRhcmQgVGltZSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkFzaWEvU2hhbmdoYWkiLCBsYWJlbDogIkNoaW5hIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICJBc2lhL1Rva3lvIiwgbGFiZWw6ICJUb2t5byIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIkF1c3RyYWxpYS9TeWRuZXkiLCBsYWJlbDogIlN5ZG5leSIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvQXVja2xhbmQiLCBsYWJlbDogIkF1Y2tsYW5kIiB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gcmVuZGVyRGF0ZXBpY2tlcih0aGlzKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpOwogICAgICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7CiAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBkYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShub3cyKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBub3cyLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3JtYXREYXRlKGlzb1N0cmluZykgewogICAgICAgICAgaWYgKCFpc29TdHJpbmcpCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpOwogICAgICAgICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKQogICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHRoaXMuZGF0ZUZvcm1hdDsKICAgICAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpOwogICAgICAgICAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZWVkiLCB5ZWFyKTsKICAgICAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZIiwgeWVhci5zbGljZSgtMikpOwogICAgICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgiTU0iLCBtb250aCk7CiAgICAgICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJERCIsIGRheSk7CiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgICAgICBjb25zdCBob3VyczI0ID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgICAgICAgIGNvbnN0IGhvdXJzMTIgPSBob3VyczI0ID09PSAwID8gMTIgOiBob3VyczI0ID4gMTIgPyBob3VyczI0IC0gMTIgOiBob3VyczI0OwogICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICAgICAgY29uc3QgYW1wbSA9IGhvdXJzMjQgPj0gMTIgPyAiUE0iIDogIkFNIjsKICAgICAgICAgICAgICBpZiAodGhpcy50aW1lRm9ybWF0ID09PSAiMTJoIikgewogICAgICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczEyfToke21pbnV0ZXN9ICR7YW1wbX1gOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgKz0gYCAke2hvdXJzMjQudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfToke21pbnV0ZXN9YDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlVGltZXpvbmUpIHsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgICAgICAgdGltZVpvbmVOYW1lOiAic2hvcnQiLAogICAgICAgICAgICAgICAgdGltZVpvbmU6IHRoaXMudGltZXpvbmUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlcjIuZm9ybWF0VG9QYXJ0cyhkYXRlKTsKICAgICAgICAgICAgICBjb25zdCB0elBhcnQgPSBwYXJ0cy5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICJ0aW1lWm9uZU5hbWUiKTsKICAgICAgICAgICAgICBpZiAodHpQYXJ0KSB7CiAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgKz0gYCAke3R6UGFydC52YWx1ZX1gOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBwYXRoMiA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICAgICAgaWYgKCFwYXRoMi5pbmNsdWRlcyh0aGlzKSkgewogICAgICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGFzeW5jIHRvZ2dsZUNhbGVuZGFyKCkgewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSAhdGhpcy5pc09wZW5lZDsKICAgICAgICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7CiAgICAgICAgICAgIGNvbnN0IGlucHV0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKTsKICAgICAgICAgICAgY29uc3QgcmVjdCA9IGlucHV0Q29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207CiAgICAgICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDsKICAgICAgICAgICAgdGhpcy5vcGVuc1RvVG9wID0gc3BhY2VCZWxvdyA8IDQwMCAmJiBzcGFjZUFib3ZlID4gc3BhY2VCZWxvdzsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldERheXNJbk1vbnRoKCkgewogICAgICAgICAgY29uc3QgeWVhciA9IHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy52aWV3RGF0ZS5nZXRNb250aCgpOwogICAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgICAgICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKTsKICAgICAgICAgIGNvbnN0IGRheXMyID0gW107CiAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMud2Vla1N0YXJ0c09uID09PSAxID8gZmlyc3REYXkuZ2V0RGF5KCkgPT09IDAgPyA2IDogZmlyc3REYXkuZ2V0RGF5KCkgLSAxIDogZmlyc3REYXkuZ2V0RGF5KCk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSBzdGFydE9mZnNldDsgaTExID4gMDsgaTExLS0pIHsKICAgICAgICAgICAgZGF5czIucHVzaChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSAtIGkxMSkpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgaTExID0gMTsgaTExIDw9IGxhc3REYXkuZ2V0RGF0ZSgpOyBpMTErKykgewogICAgICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpMTEpKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0RheXMgPSA0MiAtIGRheXMyLmxlbmd0aDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSByZW1haW5pbmdEYXlzOyBpMTErKykgewogICAgICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaTExKSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZGF5czI7CiAgICAgICAgfQogICAgICAgIGlzVG9kYXkoZGF0ZSkgewogICAgICAgICAgY29uc3QgdG9kYXkgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgICAgICAgfQogICAgICAgIGlzU2VsZWN0ZWQoZGF0ZSkgewogICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpID09PSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgJiYgZGF0ZS5nZXRNb250aCgpID09PSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICB9CiAgICAgICAgaXNEaXNhYmxlZChkYXRlKSB7CiAgICAgICAgICBpZiAodGhpcy5taW5EYXRlKSB7CiAgICAgICAgICAgIGNvbnN0IG1pbjMgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpOwogICAgICAgICAgICBpZiAoZGF0ZSA8IG1pbjMpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7CiAgICAgICAgICAgIGNvbnN0IG1heDMgPSBuZXcgRGF0ZSh0aGlzLm1heERhdGUpOwogICAgICAgICAgICBpZiAoZGF0ZSA+IG1heDMpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMuc29tZSgoZGlzYWJsZWRTdHIpID0+IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQyID0gbmV3IERhdGUoZGlzYWJsZWRTdHIpOwogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpID09PSBkaXNhYmxlZDIuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gZGlzYWJsZWQyLmdldE1vbnRoKCkgJiYgZGF0ZS5nZXRGdWxsWWVhcigpID09PSBkaXNhYmxlZDIuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBnZXRFdmVudHNGb3JEYXRlKGRhdGUpIHsKICAgICAgICAgIGlmICghdGhpcy5ldmVudHMgfHwgdGhpcy5ldmVudHMubGVuZ3RoID09PSAwKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuZGF0ZSA9PT0gZGF0ZVN0cik7CiAgICAgICAgfQogICAgICAgIHNlbGVjdERhdGUoZGF0ZSkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKHRoaXMuc2VsZWN0ZWREYXRlKTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxlY3RUb2RheSgpIHsKICAgICAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRvZGF5OwogICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0b2RheS5nZXRNaW51dGVzKCk7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIGlmICghdGhpcy5lbmFibGVUaW1lKSB7CiAgICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xlYXIoKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcHJldmlvdXNNb250aCgpIHsKICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSAtIDEsIDEpOwogICAgICAgIH0KICAgICAgICBuZXh0TW9udGgoKSB7CiAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkgKyAxLCAxKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlSG91cklucHV0KGUxMSkgewogICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgbGV0IHZhbHVlMiA9IHBhcnNlSW50KGlucHV0LnZhbHVlKSB8fCAwOwogICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gIjEyaCIpIHsKICAgICAgICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTIsIHZhbHVlMikpOwogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIgJiYgdmFsdWUyICE9PSAxMikgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyICsgMTI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPCAxMiAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDIzLCB2YWx1ZTIpKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVNaW51dGVJbnB1dChlMTEpIHsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgICAgIGxldCB2YWx1ZTIgPSBwYXJzZUludChpbnB1dC52YWx1ZSkgfHwgMDsKICAgICAgICAgIHZhbHVlMiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDU5LCB2YWx1ZTIpKTsKICAgICAgICAgIGlmICh0aGlzLm1pbnV0ZUluY3JlbWVudCAmJiB0aGlzLm1pbnV0ZUluY3JlbWVudCA+IDEpIHsKICAgICAgICAgICAgdmFsdWUyID0gTWF0aC5yb3VuZCh2YWx1ZTIgLyB0aGlzLm1pbnV0ZUluY3JlbWVudCkgKiB0aGlzLm1pbnV0ZUluY3JlbWVudDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB2YWx1ZTI7CiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgICAgICB9CiAgICAgICAgc2V0QU1QTShwZXJpb2QpIHsKICAgICAgICAgIGlmIChwZXJpb2QgPT09ICJhbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgLT0gMTI7CiAgICAgICAgICB9IGVsc2UgaWYgKHBlcmlvZCA9PT0gInBtIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA8IDEyKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICs9IDEyOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZERhdGVUaW1lKCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKSB7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpOwogICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKSB7CiAgICAgICAgICBjb25zdCBzZWxlY3QgPSBlMTEudGFyZ2V0OwogICAgICAgICAgdGhpcy50aW1lem9uZSA9IHNlbGVjdC52YWx1ZTsKICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgICAgIH0KICAgICAgICBmb3JtYXRWYWx1ZVdpdGhUaW1lem9uZShkYXRlKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlVGltZXpvbmUpIHsKICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgiZW4tVVMiLCB7CiAgICAgICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICAgICAgbW9udGg6ICIyLWRpZ2l0IiwKICAgICAgICAgICAgZGF5OiAiMi1kaWdpdCIsCiAgICAgICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICAgICAgbWludXRlOiAiMi1kaWdpdCIsCiAgICAgICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgICAgICB0aW1lWm9uZTogdGhpcy50aW1lem9uZSwKICAgICAgICAgICAgdGltZVpvbmVOYW1lOiAic2hvcnQiCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyMi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgICAgICAgY29uc3QgZGF0ZVBhcnRzID0ge307CiAgICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7CiAgICAgICAgICAgIGRhdGVQYXJ0c1twYXJ0LnR5cGVdID0gcGFydC52YWx1ZTsKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgaXNvU3RyaW5nID0gYCR7ZGF0ZVBhcnRzLnllYXJ9LSR7ZGF0ZVBhcnRzLm1vbnRofS0ke2RhdGVQYXJ0cy5kYXl9VCR7ZGF0ZVBhcnRzLmhvdXJ9OiR7ZGF0ZVBhcnRzLm1pbnV0ZX06JHtkYXRlUGFydHMuc2Vjb25kfWA7CiAgICAgICAgICBjb25zdCB0ek9mZnNldCA9IHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoZGF0ZSwgdGhpcy50aW1lem9uZSk7CiAgICAgICAgICByZXR1cm4gYCR7aXNvU3RyaW5nfSR7dHpPZmZzZXR9YDsKICAgICAgICB9CiAgICAgICAgZ2V0VGltZXpvbmVPZmZzZXQoZGF0ZSwgdGltZXpvbmUpIHsKICAgICAgICAgIGNvbnN0IHR6RGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogdGltZXpvbmUgfSkpOwogICAgICAgICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogIlVUQyIgfSkpOwogICAgICAgICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9ICh0ekRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCkpIC8gKDFlMyAqIDYwKTsKICAgICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAvIDYwKTsKICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAlIDYwOwogICAgICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldE1pbnV0ZXMgPj0gMCA/ICIrIiA6ICItIjsKICAgICAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUtleWRvd24oZTExKSB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiB8fCBlMTEua2V5ID09PSAiICIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kYXIoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIgJiYgdGhpcy5pc09wZW5lZCkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhclZhbHVlKGUxMSkgewogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBudWxsOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZU1hbnVhbElucHV0KGUxMSkgewogICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgICAgIGlmICghaW5wdXRWYWx1ZSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VNYW51YWxEYXRlKGlucHV0VmFsdWUpOwogICAgICAgICAgaWYgKHBhcnNlZERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VkRGF0ZS50b0lTT1N0cmluZygpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHBhcnNlZERhdGU7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBwYXJzZWREYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZWREYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUlucHV0Qmx1cihlMTEpIHsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5wYXJzZU1hbnVhbERhdGUoaW5wdXRWYWx1ZSk7CiAgICAgICAgICBpZiAocGFyc2VkRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gcGFyc2VkRGF0ZTsKICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHBhcnNlZERhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHBhcnNlZERhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGFyc2VNYW51YWxEYXRlKGlucHV0KSB7CiAgICAgICAgICBpZiAoIWlucHV0KQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoIiAiKTsKICAgICAgICAgIGxldCBkYXRlUGFydCA9IHBhcnRzWzBdOwogICAgICAgICAgbGV0IHRpbWVQYXJ0ID0gcGFydHNbMV0gfHwgIiI7CiAgICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IG51bGw7CiAgICAgICAgICBjb25zdCBpc29NYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezR9KS0oXGR7MSwyfSktKFxkezEsMn0pJC8pOwogICAgICAgICAgaWYgKGlzb01hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IFtfNCwgeWVhciwgbW9udGgsIGRheV0gPSBpc29NYXRjaDsKICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghcGFyc2VkRGF0ZSkgewogICAgICAgICAgICBjb25zdCBldU1hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTsKICAgICAgICAgICAgaWYgKGV1TWF0Y2gpIHsKICAgICAgICAgICAgICBjb25zdCBbXzQsIGRheSwgbW9udGgsIHllYXJdID0gZXVNYXRjaDsKICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICAgICAgY29uc3QgdXNNYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezEsMn0pXC8oXGR7MSwyfSlcLyhcZHs0fSkkLyk7CiAgICAgICAgICAgIGlmICh1c01hdGNoKSB7CiAgICAgICAgICAgICAgY29uc3QgW180LCBtb250aCwgZGF5LCB5ZWFyXSA9IHVzTWF0Y2g7CiAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFwYXJzZWREYXRlIHx8IGlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aW1lUGFydCkgewogICAgICAgICAgICBjb25zdCB0aW1lTWF0Y2ggPSB0aW1lUGFydC5tYXRjaCgvXihcZHsxLDJ9KTooXGR7Mn0pJC8pOwogICAgICAgICAgICBpZiAodGltZU1hdGNoKSB7CiAgICAgICAgICAgICAgY29uc3QgW180LCBob3VycywgbWludXRlc10gPSB0aW1lTWF0Y2g7CiAgICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3VycyhwYXJzZUludChob3VycykpOwogICAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZUludChtaW51dGVzKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZW5hYmxlVGltZSkgewogICAgICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMobm93Mi5nZXRIb3VycygpKTsKICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXRNaW51dGVzKG5vdzIuZ2V0TWludXRlcygpKTsKICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXRTZWNvbmRzKDApOwogICAgICAgICAgICBwYXJzZWREYXRlLnNldE1pbGxpc2Vjb25kcygwKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwYXJzZWREYXRlOwogICAgICAgIH0KICAgICAgICBnZXRWYWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlMik7CiAgICAgICAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTsKICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dERhdGVwaWNrZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9kYXRlcGlja2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10ZXh0L2RlZXMtaW5wdXQtdGV4dC5kZW1vLmpzCnZhciBkZW1vRnVuYzEyOwp2YXIgaW5pdF9kZWVzX2lucHV0X3RleHRfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGV4dC9kZWVzLWlucHV0LXRleHQuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBkZW1vRnVuYzEyID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnB1dC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBJbnB1dCAiJHtpbnB1dC5sYWJlbH0iIGNoYW5nZWQgdG86YCwgaW5wdXQuZ2V0VmFsdWUoKSk7CiAgICAgICAgfSk7CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBJbnB1dCAiJHtpbnB1dC5sYWJlbH0iIGxvc3QgZm9jdXNgKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIGNvbnN0IHBhc3N3b3JkSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFtrZXk9InBhc3N3b3JkIl0nKTsKICAgICAgaWYgKHBhc3N3b3JkSW5wdXQpIHsKICAgICAgICBjb25zb2xlLmxvZygiUGFzc3dvcmQgaW5wdXQgaW5jbHVkZXMgdmlzaWJpbGl0eSB0b2dnbGUiKTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUZXh0IElucHV0cyJ9IC5zdWJ0aXRsZT0keyJTdGFuZGFyZCB0ZXh0IGlucHV0cyB3aXRoIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifQogICAgICAgICAgICAudmFsdWU9JHsiam9obmRvZSJ9CiAgICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifQogICAgICAgICAgICAudmFsdWU9JHsiam9obkBleGFtcGxlLmNvbSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJXZSB3aWxsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwgd2l0aCBhbnlvbmUifQogICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCJ9CiAgICAgICAgICAgIC5pc1Bhc3N3b3JkQm9vbD0ke3RydWV9CiAgICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgICAua2V5PSR7InBhc3N3b3JkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBob3Jpem9udGFsSW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICAgICAgaG9yaXpvbnRhbElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnB1dCk7CiAgICAgICAgY29uc29sZS5sb2coYEhvcml6b250YWwgaW5wdXQgIiR7aW5wdXQubGFiZWx9IiBkaXNwbGF5OmAsIGNvbXB1dGVkU3R5bGUuZGlzcGxheSk7CiAgICAgIH0pOwogICAgICBjb25zdCBmaXJzdE5hbWVJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0iZmlyc3ROYW1lIl0nKTsKICAgICAgY29uc3QgbGFzdE5hbWVJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0ibGFzdE5hbWUiXScpOwogICAgICBpZiAoZmlyc3ROYW1lSW5wdXQgJiYgbGFzdE5hbWVJbnB1dCkgewogICAgICAgIGNvbnN0IHVwZGF0ZUZ1bGxOYW1lID0gKCkgPT4gewogICAgICAgICAgY29uc3QgZmlyc3ROYW1lID0gZmlyc3ROYW1lSW5wdXQuZ2V0VmFsdWUoKTsKICAgICAgICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVJbnB1dC5nZXRWYWx1ZSgpOwogICAgICAgICAgY29uc29sZS5sb2coYEZ1bGwgbmFtZTogJHtmaXJzdE5hbWV9ICR7bGFzdE5hbWV9YCk7CiAgICAgICAgfTsKICAgICAgICBmaXJzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogICAgICAgIGxhc3ROYW1lSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIHVwZGF0ZUZ1bGxOYW1lKTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IGlucHV0LmxhYmVsUG9zaXRpb247CiAgICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgaGFzIGxhYmVsIHBvc2l0aW9uOiAke3Bvc2l0aW9uM31gKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGxlZnRMYWJlbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgnZGVlcy1pbnB1dC10ZXh0W2xhYmVsUG9zaXRpb249ImxlZnQiXScpOwogICAgICBpZiAobGVmdExhYmVsSW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25zb2xlLmxvZyhgJHtsZWZ0TGFiZWxJbnB1dHMubGVuZ3RofSBpbnB1dHMgaGF2ZSBsZWZ0LWFsaWduZWQgbGFiZWxzIGZvciBpbmxpbmUgbGF5b3V0YCk7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTGFiZWwgUG9zaXRpb25zIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBsYWJlbCBwb3NpdGlvbmluZyBvcHRpb25zIGZvciB2YXJpb3VzIGxheW91dHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBUb3AgKERlZmF1bHQpIn0KICAgICAgICAgICAgLnZhbHVlPSR7IlN0YW5kYXJkIGxheW91dCJ9CiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7InRvcCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gTGVmdCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJJbmxpbmUgbGFiZWwifQogICAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQ2l0eSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiTmV3IFlvcmsifSAKICAgICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsibGVmdCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlpJUCBDb2RlIn0KICAgICAgICAgICAgLnZhbHVlPSR7IjEwMDAxIn0KICAgICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsibGVmdCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgcmVxdWlyZWRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0W3JlcXVpcmVkXSIpOwogICAgICBjb25zdCBkaXNhYmxlZElucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHRbZGlzYWJsZWRdIik7CiAgICAgIGNvbnN0IGVycm9ySW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXScpOwogICAgICBpZiAocmVxdWlyZWRJbnB1dCkgewogICAgICAgIHJlcXVpcmVkSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIGlmICghcmVxdWlyZWRJbnB1dC5nZXRWYWx1ZSgpKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBmaWVsZCBpcyBlbXB0eSEiKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZGlzYWJsZWRJbnB1dCkgewogICAgICAgIGNvbnNvbGUubG9nKCJEaXNhYmxlZCBpbnB1dCBjYW5ub3QgYmUgZWRpdGVkIik7CiAgICAgIH0KICAgICAgaWYgKGVycm9ySW5wdXQpIHsKICAgICAgICBjb25zb2xlLmxvZygiRXJyb3IgaW5wdXQgc2hvd3MgdmFsaWRhdGlvbiBtZXNzYWdlOiIsIGVycm9ySW5wdXQudmFsaWRhdGlvblRleHQpOwogICAgICAgIGVycm9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsICgpID0+IHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGVycm9ySW5wdXQuZ2V0VmFsdWUoKTsKICAgICAgICAgIGlmICh2YWx1ZTIuaW5jbHVkZXMoIkAiKSAmJiB2YWx1ZTIuaW5jbHVkZXMoIi4iKSkgewogICAgICAgICAgICBlcnJvcklucHV0LnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgICAgIGVycm9ySW5wdXQudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgICAgICAgY29uc29sZS5sb2coIkVtYWlsIHZhbGlkYXRpb24gcGFzc2VkISIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZhbGlkYXRpb24gc3RhdGVzIGFuZCBpbnB1dCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJyZXF1aXJlZEZpZWxkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBGaWVsZCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJDYW5ub3QgZWRpdCB0aGlzIn0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJGaWVsZCB3aXRoIEVycm9yIn0KICAgICAgICAgICAgLnZhbHVlPSR7ImludmFsaWRAIn0KICAgICAgICAgICAgLnZhbGlkYXRpb25UZXh0PSR7IlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MifQogICAgICAgICAgICAudmFsaWRhdGlvblN0YXRlPSR7ImludmFsaWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHBhc3N3b3JkSW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHRbaXNQYXNzd29yZEJvb2xdIik7CiAgICAgIHBhc3N3b3JkSW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgICAgY29uc3QgY2hlY2tUb2dnbGUgPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dEVsID0gaW5wdXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dEVsKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXNzd29yZCBmaWVsZCAiJHtpbnB1dC5sYWJlbH0iIHR5cGU6YCwgaW5wdXRFbC50eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChpbnB1dC5zaGFkb3dSb290KSB7CiAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNoZWNrVG9nZ2xlKTsKICAgICAgICAgIGNvbnN0IGlucHV0RWwgPSBpbnB1dC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7CiAgICAgICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGlucHV0RWwsIHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbInR5cGUiXSB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBZHZhbmNlZCBGZWF0dXJlcyJ9IC5zdWJ0aXRsZT0keyJQYXNzd29yZCB2aXNpYmlsaXR5IHRvZ2dsZSBhbmQgb3RoZXIgYWR2YW5jZWQgZmVhdHVyZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9CiAgICAgICAgICAgIC5pc1Bhc3N3b3JkQm9vbD0ke3RydWV9CiAgICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNsaWNrIHRoZSBleWUgaWNvbiB0byBzaG93L2hpZGUgcGFzc3dvcmQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IkFQSSBLZXkifQogICAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfQogICAgICAgICAgICAudmFsdWU9JHsic2stMTIzNDU2Nzg5MGFiY2RlZiJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJLZWVwIHRoaXMga2V5IHNlY3VyZSBhbmQgbmV2ZXIgc2hhcmUgaXQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGR5bmFtaWNJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGNvbnN0IG91dHB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3RleHQtaW5wdXQtb3V0cHV0Iik7CiAgICAgIGlmIChkeW5hbWljSW5wdXQgJiYgb3V0cHV0KSB7CiAgICAgICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LmRldGFpbC5nZXRWYWx1ZSgpOwogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEN1cnJlbnQgdmFsdWU6ICIke3ZhbHVlMn0iYDsKICAgICAgICB9KTsKICAgICAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpOwogICAgICAgIH0pOwogICAgICAgIGR5bmFtaWNJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIklucHV0IGJsdXJyZWQiKTsKICAgICAgICB9KTsKICAgICAgICBsZXQga2V5cHJlc3NDb3VudCA9IDA7CiAgICAgICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoKSA9PiB7CiAgICAgICAgICBrZXlwcmVzc0NvdW50Kys7CiAgICAgICAgICBjb25zb2xlLmxvZyhgS2V5cHJlc3MgY291bnQ6ICR7a2V5cHJlc3NDb3VudH1gKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlRyeSB0eXBpbmcgaW4gdGhlIGlucHV0cyB0byBzZWUgcmVhbC10aW1lIHZhbHVlIGNoYW5nZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkR5bmFtaWMgSW5wdXQifSAKICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJUeXBlIHNvbWV0aGluZyBoZXJlLi4uIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJhY3RpdmUtc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGlkPSJ0ZXh0LWlucHV0LW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5DdXJyZW50IHZhbHVlOiAiIjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvZGVlcy1pbnB1dC10ZXh0LmpzCnZhciBfX2VzRGVjb3JhdGUyMCwgX19ydW5Jbml0aWFsaXplcnMyMSwgRGVlc0lucHV0VGV4dDsKdmFyIGluaXRfZGVlc19pbnB1dF90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10ZXh0L2RlZXMtaW5wdXQtdGV4dC5qcyIoKSB7CiAgICBpbml0X2NvbG9ycygpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVlc19pbnB1dF90ZXh0X2RlbW8oKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUyMCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczIxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRUZXh0ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGV4dCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1Bhc3N3b3JkQm9vbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uRnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJbnB1dFRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX2lzUGFzc3dvcmRCb29sX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2hvd1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfdmFsaWRhdGlvbkZ1bmN0aW9uX2RlY29yYXRvcnMgPSBbbjUoe30pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX2lzUGFzc3dvcmRCb29sX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUGFzc3dvcmRCb29sIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc1Bhc3N3b3JkQm9vbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Bhc3N3b3JkQm9vbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzUGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1Bhc3N3b3JkQm9vbF9pbml0aWFsaXplcnMsIF9pc1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfc2hvd1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93UGFzc3dvcmRCb29sIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93UGFzc3dvcmRCb29sIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dQYXNzd29yZEJvb2wsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93UGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgX3Nob3dQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uU3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25TdGF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uU3RhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMsIF92YWxpZGF0aW9uU3RhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMsIF92YWxpZGF0aW9uVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25GdW5jdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvbkZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbGlkYXRpb25GdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbGlkYXRpb25GdW5jdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25GdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTI7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNQYXNzd29yZEJvb2woKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzUGFzc3dvcmRCb29sKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9pc1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBzaG93UGFzc3dvcmRCb29sKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dQYXNzd29yZEJvb2wodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93UGFzc3dvcmRCb29sX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IHZhbGlkYXRpb25TdGF0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbGlkYXRpb25TdGF0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uU3RhdGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uVGV4dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25GdW5jdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCB2YWxpZGF0aW9uRnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvbkZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWxpZGF0aW9uRnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogYXV0bzsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdCg6Zm9jdXMpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklIC8gMC4wNSkiLCAiaHNsKDAgMCUgOTglIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogUGFzc3dvcmQgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuc2hvd1Bhc3N3b3JkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDFweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzOHB4OwogICAgICAgIGhlaWdodDogMzhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNXB4IDVweCAwOwogICAgICB9CgogICAgICAuc2hvd1Bhc3N3b3JkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb25Db250YWluZXIuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSAvIDAuMSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb25Db250YWluZXIud2FybiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlIC8gMC4xKSIsICJoc2woMjUgOTUlIDYzJSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci52YWxpZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLyogRXJyb3Igc3RhdGUgZm9yIGlucHV0ICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0IHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0iaW52YWxpZCJdKSBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDcyLjIlIDUwLjYlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4wNSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLyogV2FybmluZyBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJ3YXJuIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjA1KSIsICJoc2woMjUgOTUlIDYzJSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZCBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0IHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJ2YWxpZCJdKSBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4wNSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4wNSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIGlucHV0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke3RoaXMuaXNQYXNzd29yZEJvb2wgPyBjc3NNb25vRm9udEZhbWlseSA6ICJpbmhlcml0In07CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gIjAuNXB4IiA6ICJub3JtYWwifTsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/ICI0OHB4IiA6ICIxMnB4In07CiAgICAgICAgfQogICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGlgCiAgICAgICAgICAgICAgLnZhbGlkYXRpb25Db250YWluZXIgewogICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGAgOiBpYAogICAgICAgICAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICAgICAgICAgIGhlaWdodDogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iJHt0aGlzLmlzUGFzc3dvcmRCb29sICYmICF0aGlzLnNob3dQYXNzd29yZEJvb2wgPyAicGFzc3dvcmQiIDogInRleHQifSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy52YWx1ZX0KICAgICAgICAgICAgQGlucHV0PSIke3RoaXMudXBkYXRlVmFsdWV9IgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHt0aGlzLmxhYmVsID8gIiIgOiAiRW50ZXIgdGV4dC4uLiJ9IgogICAgICAgICAgLz4KICAgICAgICAgICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvd1Bhc3N3b3JkIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVBhc3N3b3JkVmlld30+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHt0aGlzLnNob3dQYXNzd29yZEJvb2wgPyAibHVjaWRlOkV5ZSIgOiAibHVjaWRlOkV5ZU9mZiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIgJHt0aGlzLnZhbGlkYXRpb25TdGF0ZSB8fCAiZXJyb3IifSI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiBiMmA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uQ29udGFpbmVyIj48L2Rpdj5gfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlVmFsdWUoZXZlbnRBcmcpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0YXJnZXQudmFsdWU7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBhc3luYyB0b2dnbGVQYXNzd29yZFZpZXcoKSB7CiAgICAgICAgICB0aGlzLnNob3dQYXNzd29yZEJvb2wgPSAhdGhpcy5zaG93UGFzc3dvcmRCb29sOwogICAgICAgIH0KICAgICAgICBhc3luYyBmb2N1cygpIHsKICAgICAgICAgIGNvbnN0IHRleHRJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICAgICAgdGV4dElucHV0LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGJsdXIoKSB7CiAgICAgICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgICAgIHRleHRJbnB1dC5ibHVyKCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25GdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczIxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZC5kZW1vLmpzCnZhciBkZW1vRnVuYzEzOwp2YXIgaW5pdF9kZWVzX3Nob3BwaW5nX3Byb2R1Y3RjYXJkX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgZGVtb0Z1bmMxMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUHJvZHVjdCBDYXJkcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcHJvZHVjdCBkaXNwbGF5IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgICAgIG5hbWU6ICJXaXJlbGVzcyBCbHVldG9vdGggSGVhZHBob25lcyIsCiAgICAgIGNhdGVnb3J5OiAiQXVkaW8iLAogICAgICBkZXNjcmlwdGlvbjogIlByZW1pdW0gc291bmQgcXVhbGl0eSB3aXRoIGFjdGl2ZSBub2lzZSBjYW5jZWxsYXRpb24iLAogICAgICBwcmljZTogMTQ5Ljk5LAogICAgICBvcmlnaW5hbFByaWNlOiAxOTkuOTksCiAgICAgIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgICAgIG5hbWU6ICJTbWFydCBXYXRjaCBTZXJpZXMgNyIsCiAgICAgIGNhdGVnb3J5OiAiV2VhcmFibGVzIiwKICAgICAgZGVzY3JpcHRpb246ICJUcmFjayB5b3VyIGZpdG5lc3MgYW5kIHN0YXkgY29ubmVjdGVkIG9uIHRoZSBnbyIsCiAgICAgIHByaWNlOiAzOTksCiAgICAgIGljb25OYW1lOiAibHVjaWRlOndhdGNoIgogICAgfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiVVNCLUMgSHViIiwKICAgICAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgICAgIHByaWNlOiA0OS45OSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dXNiIiwKICAgICAgaW5TdG9jazogZmFsc2UKICAgIH19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJQcm9kdWN0IGNhcmRzIHdpdGggZHluYW1pYyBjYXJ0IGNhbGN1bGF0aW9uIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgcHJvZHVjdHMgPSBbCiAgICAgICAgeyBpZDogImxhcHRvcCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsIGNhdGVnb3J5OiAiQ29tcHV0ZXJzIiwgZGVzY3JpcHRpb246ICJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIiwgcHJpY2U6IDE5OTksIG9yaWdpbmFsUHJpY2U6IDIxOTksIGljb25OYW1lOiAibHVjaWRlOmxhcHRvcCIgfSB9LAogICAgICAgIHsgaWQ6ICJpcGFkIiwgZWxlbWVudDogbnVsbCwgZGF0YTogeyBuYW1lOiAiaVBhZCBBaXIiLCBjYXRlZ29yeTogIlRhYmxldHMiLCBkZXNjcmlwdGlvbjogJzEwLjkiIExpcXVpZCBSZXRpbmEgZGlzcGxheScsIHByaWNlOiA1OTksIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIgfSB9LAogICAgICAgIHsgaWQ6ICJrZXlib2FyZCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogIk1hZ2ljIEtleWJvYXJkIiwgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsIGRlc2NyaXB0aW9uOiAiV2lyZWxlc3Mga2V5Ym9hcmQgd2l0aCBUb3VjaCBJRCIsIHByaWNlOiAxNDksIGljb25OYW1lOiAibHVjaWRlOmtleWJvYXJkIiB9IH0KICAgICAgXTsKICAgICAgY29uc3QgdXBkYXRlQ2FydFN1bW1hcnkgPSAoKSA9PiB7CiAgICAgICAgbGV0IHRvdGFsID0gMDsKICAgICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICAgIHByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHsKICAgICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKGAjJHtwcm9kdWN0LmlkfWApOwogICAgICAgICAgaWYgKGVsZW1lbnQ0ICYmIGVsZW1lbnQ0LnF1YW50aXR5ID4gMCkgewogICAgICAgICAgICBjb25zdCBzdWJ0b3RhbCA9IHByb2R1Y3QuZGF0YS5wcmljZSAqIGVsZW1lbnQ0LnF1YW50aXR5OwogICAgICAgICAgICB0b3RhbCArPSBzdWJ0b3RhbDsKICAgICAgICAgICAgaXRlbXMucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3Byb2R1Y3QuZGF0YS5uYW1lfSAoJHtlbGVtZW50NC5xdWFudGl0eX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj4kJHtzdWJ0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTsKICAgICAgICBpZiAoc3VtbWFyeSkgewogICAgICAgICAgc3VtbWFyeS5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgJHtpdGVtcy5qb2luKCIiKX0KICAgICAgICAgICAgICAke2l0ZW1zLmxlbmd0aCA9PT0gMCA/ICc8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjOTk5OyI+WW91ciBjYXJ0IGlzIGVtcHR5PC9kaXY+JyA6ICIifQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQtdG90YWwiPgogICAgICAgICAgICAgICAgPHNwYW4+VG90YWw8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHt0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQodXBkYXRlQ2FydFN1bW1hcnksIDEwMCk7CiAgICAgIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoInF1YW50aXR5Q2hhbmdlIiwgdXBkYXRlQ2FydFN1bW1hcnkpOwogICAgICB9KTsKICAgIH19PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibGFwdG9wIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgICAgIG5hbWU6ICdNYWNCb29rIFBybyAxNCInLAogICAgICBjYXRlZ29yeTogIkNvbXB1dGVycyIsCiAgICAgIGRlc2NyaXB0aW9uOiAiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIsCiAgICAgIHByaWNlOiAxOTk5LAogICAgICBvcmlnaW5hbFByaWNlOiAyMTk5LAogICAgICBpY29uTmFtZTogImx1Y2lkZTpsYXB0b3AiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0iaXBhZCIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiaVBhZCBBaXIiLAogICAgICBjYXRlZ29yeTogIlRhYmxldHMiLAogICAgICBkZXNjcmlwdGlvbjogJzEwLjkiIExpcXVpZCBSZXRpbmEgZGlzcGxheScsCiAgICAgIHByaWNlOiA1OTksCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIKICAgIH19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZCIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiTWFnaWMgS2V5Ym9hcmQiLAogICAgICBjYXRlZ29yeTogIkFjY2Vzc29yaWVzIiwKICAgICAgZGVzY3JpcHRpb246ICJXaXJlbGVzcyBrZXlib2FyZCB3aXRoIFRvdWNoIElEIiwKICAgICAgcHJpY2U6IDE0OSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5TaG9wcGluZyBDYXJ0PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImludGVyYWN0aXZlLWNhcnQtc3VtbWFyeSI+CiAgICAgICAgICAgIDwhLS0gRHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2VsZWN0YWJsZSBQcm9kdWN0IENhcmRzIn0gLnN1YnRpdGxlPSR7IkNsaWNrIGNhcmRzIG9yIGNoZWNrYm94ZXMgdG8gc2VsZWN0IHByb2R1Y3RzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICAgICAgbmFtZTogIlNvbnkgQWxwaGEgNyBJViIsCiAgICAgIGNhdGVnb3J5OiAiQ2FtZXJhcyIsCiAgICAgIGRlc2NyaXB0aW9uOiAiRnVsbC1mcmFtZSBtaXJyb3JsZXNzIGNhbWVyYSIsCiAgICAgIHByaWNlOiAyNDk4LAogICAgICBpY29uTmFtZTogImx1Y2lkZTpjYW1lcmEiCiAgICB9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICAgICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogICAgICB9CiAgICB9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgICAgIG5hbWU6ICJESkkgTWluaSAzIFBybyIsCiAgICAgIGNhdGVnb3J5OiAiRHJvbmVzIiwKICAgICAgZGVzY3JpcHRpb246ICJMaWdodHdlaWdodCBkcm9uZSB3aXRoIDRLIGNhbWVyYSIsCiAgICAgIHByaWNlOiA3NTksCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsYW5lIgogICAgfX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHt0cnVlfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHtmYWxzZX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0keyhlMTEpID0+IHsKICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICAgICAgaWYgKG91dHB1dCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIik7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0cyA9IFtdOwogICAgICAgIHNlbGVjdGVkQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gewogICAgICAgICAgaWYgKGNhcmQuc2VsZWN0ZWQpIHsKICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKGNhcmQucHJvZHVjdERhdGEubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gc2VsZWN0ZWRQcm9kdWN0cy5sZW5ndGggPiAwID8gYFNlbGVjdGVkOiAke3NlbGVjdGVkUHJvZHVjdHMuam9pbigiLCAiKX1gIDogIk5vIHByb2R1Y3RzIHNlbGVjdGVkIjsKICAgICAgfQogICAgfX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiR29Qcm8gSEVSTzEyIiwKICAgICAgY2F0ZWdvcnk6ICJBY3Rpb24gQ2FtZXJhcyIsCiAgICAgIGRlc2NyaXB0aW9uOiAiNS4zSyB2aWRlbyB3aXRoIEh5cGVyU21vb3RoIDYuMCIsCiAgICAgIHByaWNlOiAzOTksCiAgICAgIG9yaWdpbmFsUHJpY2U6IDQ0OSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dmlkZW8iCiAgICB9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICAgICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogICAgICB9CiAgICB9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3RlZC1wcm9kdWN0cyIgaWQ9InNlbGVjdGlvbi1vdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOiAxNnB4OyI+CiAgICAgICAgICBObyBwcm9kdWN0cyBzZWxlY3RlZAogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJvZHVjdCBWYXJpYXRpb25zIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICAgICAgbmFtZTogIkxpbWl0ZWQgRWRpdGlvbiBTbmVha2VycyIsCiAgICAgIGNhdGVnb3J5OiAiRm9vdHdlYXIiLAogICAgICBkZXNjcmlwdGlvbjogIkV4Y2x1c2l2ZSBjb2xvcndheSAtIE9ubHkgNTAwIHBhaXJzIiwKICAgICAgcHJpY2U6IDI5OSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9vdHByaW50cyIsCiAgICAgIGluU3RvY2s6IGZhbHNlLAogICAgICBzdG9ja1RleHQ6ICJTb2xkIE91dCIKICAgIH19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezB9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICAgICAgbmFtZTogIk1pbmltYWxpc3QgV2FsbGV0IiwKICAgICAgcHJpY2U6IDM5Ljk5LAogICAgICBpY29uTmFtZTogImx1Y2lkZTp3YWxsZXQiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgICAgIG5hbWU6ICJQcmVtaXVtIENvZmZlZSBCZWFucyIsCiAgICAgIGNhdGVnb3J5OiAiRm9vZCAmIEJldmVyYWdlIiwKICAgICAgZGVzY3JpcHRpb246ICJTaW5nbGUgb3JpZ2luLCBtZWRpdW0gcm9hc3QiLAogICAgICBwcmljZTogMTguNSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29mZmVlIiwKICAgICAgY3VycmVuY3k6ICJcdTIwQUMiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZC5qcwp2YXIgX19lc0RlY29yYXRlMjEsIF9fcnVuSW5pdGlhbGl6ZXJzMjIsIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkOwp2YXIgaW5pdF9kZWVzX3Nob3BwaW5nX3Byb2R1Y3RjYXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX3Nob3BwaW5nX3Byb2R1Y3RjYXJkX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTIxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3Byb2R1Y3REYXRhX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcHJvZHVjdERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZHVjdERhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9xdWFudGl0eV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3F1YW50aXR5X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGFibGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RhYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9wcm9kdWN0RGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgICAgIF9xdWFudGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2VsZWN0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3Byb2R1Y3REYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2R1Y3REYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9kdWN0RGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9kdWN0RGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnByb2R1Y3REYXRhID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfcXVhbnRpdHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicXVhbnRpdHkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInF1YW50aXR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnF1YW50aXR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucXVhbnRpdHkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3F1YW50aXR5X2luaXRpYWxpemVycywgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93UXVhbnRpdHlTZWxlY3RvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1F1YW50aXR5U2VsZWN0b3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1F1YW50aXR5U2VsZWN0b3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93UXVhbnRpdHlTZWxlY3RvciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3NlbGVjdGFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0YWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0YWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9zZWxlY3RlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3RlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxMzsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiU2ltcGxlIl07CiAgICAgICAgI3Byb2R1Y3REYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIHsKICAgICAgICAgIG5hbWU6ICJQcm9kdWN0IE5hbWUiLAogICAgICAgICAgcHJpY2U6IDAKICAgICAgICB9KTsKICAgICAgICBnZXQgcHJvZHVjdERhdGEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHByb2R1Y3REYXRhKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3F1YW50aXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcHJvZHVjdERhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9xdWFudGl0eV9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgcXVhbnRpdHkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcXVhbnRpdHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHF1YW50aXR5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcXVhbnRpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd1F1YW50aXR5U2VsZWN0b3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dRdWFudGl0eVNlbGVjdG9yKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1F1YW50aXR5U2VsZWN0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3NlbGVjdGFibGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBzZWxlY3RhYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGFibGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3NlbGVjdGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IHNlbGVjdGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LXByaWNlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcmljZS1jdXJyZW50IHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMub3V0LW9mLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IHsgbmFtZSwgY2F0ZWdvcnksIGRlc2NyaXB0aW9uLCBwcmljZSwgb3JpZ2luYWxQcmljZSwgY3VycmVuY3kgPSAiJCIsIGluU3RvY2sgPSB0cnVlLCBzdG9ja1RleHQgPSBpblN0b2NrID8gIkluIFN0b2NrIiA6ICJPdXQgb2YgU3RvY2siLCBpbWFnZVVybCwgaWNvbk5hbWUgPSAibHVjaWRlOnBhY2thZ2UiIH0gPSB0aGlzLnByb2R1Y3REYXRhOwogICAgICAgICAgY29uc3QgZm9ybWF0UHJpY2UgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICAgIHJldHVybiBgJHtjdXJyZW5jeX0ke3ZhbHVlMi50b0ZpeGVkKDIpfWA7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJwcm9kdWN0LWNhcmQgJHt0aGlzLnNlbGVjdGFibGUgPyAic2VsZWN0YWJsZSIgOiAiIn0gJHt0aGlzLnNlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNhcmRDbGlja30KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtaW1hZ2UiPgogICAgICAgICAgJHtpbWFnZVVybCA/IGIyYAogICAgICAgICAgICA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHtuYW1lfSI+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtpY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICBgfQogICAgICAgICAgJHt0aGlzLnNlbGVjdGFibGUgPyBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ic2VsZWN0aW9uLWNoZWNrYm94ICR7dGhpcy5zZWxlY3RlZCA/ICJjaGVja2VkIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKTsKICAgICAgICAgIH19CiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1oZWFkZXIiPgogICAgICAgICAgICAke2NhdGVnb3J5ID8gYjJgPGRpdiBjbGFzcz0icHJvZHVjdC1jYXRlZ29yeSI+JHtjYXRlZ29yeX08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtbmFtZSI+JHtuYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke2Rlc2NyaXB0aW9uID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZGVzY3JpcHRpb24iPiR7ZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdG9jay1zdGF0dXMgJHtpblN0b2NrID8gImluLXN0b2NrIiA6ICJvdXQtb2Ytc3RvY2sifSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtpblN0b2NrID8gImx1Y2lkZTpjaGVjay1jaXJjbGUiIDogImx1Y2lkZTp4LWNpcmNsZSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAke3N0b2NrVGV4dH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1mb290ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXByaWNlIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpY2UtY3VycmVudCI+JHtmb3JtYXRQcmljZShwcmljZSl9PC9zcGFuPgogICAgICAgICAgICAgICR7b3JpZ2luYWxQcmljZSAmJiBvcmlnaW5hbFByaWNlID4gcHJpY2UgPyBiMmAKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1vcmlnaW5hbCI+JHtmb3JtYXRQcmljZShvcmlnaW5hbFByaWNlKX08L3NwYW4+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLnNob3dRdWFudGl0eVNlbGVjdG9yID8gYjJgCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5xdWFudGl0eX0KICAgICAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7KGUxMSkgPT4gewogICAgICAgICAgICB0aGlzLnF1YW50aXR5ID0gZTExLmRldGFpbC5nZXRWYWx1ZSgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJxdWFudGl0eUNoYW5nZSIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIHF1YW50aXR5OiB0aGlzLnF1YW50aXR5LAogICAgICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfX0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUNhcmRDbGljaygpIHsKICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgICAgIHByb2R1Y3REYXRhOiB0aGlzLnByb2R1Y3REYXRhCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlU2VsZWN0aW9uVG9nZ2xlKCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VsZWN0aW9uQ2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgICBwcm9kdWN0RGF0YTogdGhpcy5wcm9kdWN0RGF0YQogICAgICAgICAgICB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczIyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuZGVtby5qcwp2YXIgZGVtb0Z1bmMxNDsKdmFyIGluaXRfZGVlc19pbnB1dF9xdWFudGl0eXNlbGVjdG9yX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19zaG9wcGluZ19wcm9kdWN0Y2FyZCgpOwogICAgZGVtb0Z1bmMxNCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnB1dC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5zaG9wcGluZy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFF1YW50aXR5IFNlbGVjdG9yIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBxdWFudGl0eSBpbnB1dCB3aXRoIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgICAgLmxhYmVsPSR7IlF1YW50aXR5In0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB0aGUgZGVzaXJlZCBxdWFudGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiSXRlbXMgaW4gQ2FydCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGp1c3QgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIn0KICAgICAgICAgICAgLnZhbHVlPSR7M30KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNob3BwaW5nIENhcnQifSAuc3VidGl0bGU9JHsiTW9kZXJuIGUtY29tbWVyY2UgcHJvZHVjdCBjYXJkcyB3aXRoIGludGVyYWN0aXZlIHF1YW50aXR5IHNlbGVjdG9ycyJ9IC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHVwZGF0ZUNhcnRTdW1tYXJ5ID0gKCkgPT4gewogICAgICAgIGNvbnN0IGNhcmQxID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKTsKICAgICAgICBjb25zdCBjYXJkMiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI21vdXNlLXF0eSIpOwogICAgICAgIGNvbnN0IGNhcmQzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIja2V5Ym9hcmQtcXR5Iik7CiAgICAgICAgY29uc3QgcXR5MSA9IGNhcmQxPy5xdWFudGl0eSB8fCAwOwogICAgICAgIGNvbnN0IHF0eTIgPSBjYXJkMj8ucXVhbnRpdHkgfHwgMDsKICAgICAgICBjb25zdCBxdHkzID0gY2FyZDM/LnF1YW50aXR5IHx8IDA7CiAgICAgICAgY29uc3QgcHJpY2UxID0gMzQ5Ljk5ICogcXR5MTsKICAgICAgICBjb25zdCBwcmljZTIgPSA5OS45OSAqIHF0eTI7CiAgICAgICAgY29uc3QgcHJpY2UzID0gNzkuOTkgKiBxdHkzOwogICAgICAgIGNvbnN0IHRvdGFsID0gcHJpY2UxICsgcHJpY2UyICsgcHJpY2UzOwogICAgICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjYXJ0LXN1bW1hcnktY29udGVudCIpOwogICAgICAgIGlmIChzdW1tYXJ5KSB7CiAgICAgICAgICBzdW1tYXJ5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAke3F0eTEgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7cXR5MX0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UxLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTIgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dpdGVjaCBNWCBNYXN0ZXIgM1MgKCR7cXR5Mn0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UyLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTMgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtxdHkzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtwcmljZTMudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICR7dG90YWwgPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgICAgfQogICAgICB9OwogICAgICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogICAgICBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKS5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCJxdWFudGl0eUNoYW5nZSIsIHVwZGF0ZUNhcnRTdW1tYXJ5KTsKICAgICAgfSk7CiAgICB9fT4KICAgICAgICA8ZGl2IGNsYXNzPSJzaG9wcGluZy1ncmlkIj4KICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJoZWFkcGhvbmVzLXF0eSIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiU29ueSBXSC0xMDAwWE01IFdpcmVsZXNzIEhlYWRwaG9uZXMiLAogICAgICBjYXRlZ29yeTogIkF1ZGlvIiwKICAgICAgZGVzY3JpcHRpb246ICJJbmR1c3RyeS1sZWFkaW5nIG5vaXNlIGNhbmNlbGluZyB3aXRoIEF1dG8gTkMgT3B0aW1pemVyIiwKICAgICAgcHJpY2U6IDM0OS45OSwKICAgICAgb3JpZ2luYWxQcmljZTogMzk5Ljk5LAogICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWFkcGhvbmVzIgogICAgfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJtb3VzZS1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICAgICAgbmFtZTogIkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsCiAgICAgIGNhdGVnb3J5OiAiQWNjZXNzb3JpZXMiLAogICAgICBkZXNjcmlwdGlvbjogIlBlcmZvcm1hbmNlIHdpcmVsZXNzIG1vdXNlIHdpdGggdWx0cmEtZmFzdCBzY3JvbGxpbmciLAogICAgICBwcmljZTogOTkuOTksCiAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vdXNlLXBvaW50ZXIiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkLXF0eSIKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogICAgICBuYW1lOiAiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsCiAgICAgIGNhdGVnb3J5OiAiS2V5Ym9hcmRzIiwKICAgICAgZGVzY3JpcHRpb246ICJDb21wYWN0IDc1JSBsYXlvdXQgd2l0aCBob3Qtc3dhcHBhYmxlIHN3aXRjaGVzIiwKICAgICAgcHJpY2U6IDc5Ljk5LAogICAgICBvcmlnaW5hbFByaWNlOiA5NC45OSwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCiAgICB9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiTnVtYmVyIG9mIExpY2Vuc2VzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCBob3cgbWFueSBsaWNlbnNlcyB5b3UgbmVlZCJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBxdWFudGl0eSBjYW5ub3QgYmUgY2hhbmdlZCJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICAgIC52YWx1ZT0kezV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJPcmRlciBGb3JtIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXRlIG9yZGVyIGZvcm0gd2l0aCBxdWFudGl0eSBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQ3VzdG9tZXIgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QifQogICAgICAgICAgICAub3B0aW9ucz0ke1siQmFzaWMgUGxhbiIsICJQcm8gUGxhbiIsICJFbnRlcnByaXNlIFBsYW4iXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJOdW1iZXIgb2YgbGljZW5zZXMifQogICAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiU3BlY2lhbCBJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yL2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci5qcwp2YXIgX19lc0RlY29yYXRlMjIsIF9fcnVuSW5pdGlhbGl6ZXJzMjMsIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3I7CnZhciBpbml0X2RlZXNfaW5wdXRfcXVhbnRpdHlzZWxlY3RvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogICAgaW5pdF9kZWVzX2lucHV0X3F1YW50aXR5c2VsZWN0b3JfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMjIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMyMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMih0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxNDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgMSk7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lciB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3IgewogICAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3RvcjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCAiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5wbHVzIHsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHkgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIH0KCiAgICAgICAgLyogS2V5Ym9hcmQgbmF2aWdhdGlvbiBmb2N1cyBzdHlsZXMgKi8KICAgICAgICAuc2VsZWN0b3I6Zm9jdXMgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CgogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icXVhbnRpdHktY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLW1pbj0iJHt0aGlzLnZhbHVlIDw9IDB9IgogICAgICAgID4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBtaW51cyIgCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZGVjcmVhc2UoKTsKICAgICAgICAgIH19IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgdGhpcy5kZWNyZWFzZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJEZWNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID7iiJI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InF1YW50aXR5IiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1hdG9taWM9InRydWUiPiR7dGhpcy52YWx1ZX08L2Rpdj4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBwbHVzIiAKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICAgICAgdGhpcy5pbmNyZWFzZSgpOwogICAgICAgICAgfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQgPyAiLTEiIDogIjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiB8fCBlMTEua2V5ID09PSAiICIpIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLmluY3JlYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH19IgogICAgICAgICAgICByb2xlPSJidXR0b24iCiAgICAgICAgICAgIGFyaWEtbGFiZWw9IkluY3JlYXNlIHF1YW50aXR5IgogICAgICAgICAgPis8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBpbmNyZWFzZSgpIHsKICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkgewogICAgICAgICAgICB0aGlzLnZhbHVlKys7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWNyZWFzZSgpIHsKICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnZhbHVlID4gMCkgewogICAgICAgICAgICB0aGlzLnZhbHVlLS07CiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXRWYWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAvZGVlcy1pbnB1dC1yYWRpb2dyb3VwLmRlbW8uanMKdmFyIGRlbW9GdW5jMTU7CnZhciBpbml0X2RlZXNfaW5wdXRfcmFkaW9ncm91cF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yYWRpb2dyb3VwL2RlZXMtaW5wdXQtcmFkaW9ncm91cC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzKCk7CiAgICBpbml0X2RlZXNfcGFuZWwoKTsKICAgIGRlbW9GdW5jMTUgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlc3VsdC1kaXNwbGF5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmFkaW8gR3JvdXBzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBzdHJpbmcgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpcHRpb24gUGxhbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyAtICQ5L21vbnRoIiwgIlBybyAtICQyOS9tb250aCIsICJFbnRlcnByaXNlIC0gJDk5L21vbnRoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm8gLSAkMjkvbW9udGgifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHlvdXIgc3Vic2NyaXB0aW9uIHRpZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJIaWdoIiwgIk1lZGl1bSIsICJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJSYWRpbyBncm91cHMgd2l0aCBob3Jpem9udGFsIGFycmFuZ2VtZW50In0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiRG8geW91IGFncmVlIHdpdGggdGhlIHRlcm1zPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJZZXMiLCAiTm8iLCAiTWF5YmUiXX0KICAgICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlllcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiRXhwZXJpZW5jZSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCZWdpbm5lciIsICJJbnRlcm1lZGlhdGUiLCAiRXhwZXJ0Il19CiAgICAgICAgICAgIC5kaXJlY3Rpb249JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgZXhwZXJpZW5jZSBsZXZlbCB3aXRoIHdlYiBkZXZlbG9wbWVudCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBBZHZhbmNlZCBPcHRpb25zIn0gLnN1YnRpdGxlPSR7IlVzaW5nIG9iamVjdCBmb3JtYXQgd2l0aCBrZXlzIGFuZCBwYXlsb2FkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIGlkPSJhZHZhbmNlZC1yYWRpbyIKICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUmVnaW9uIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIlVuaXRlZCBTdGF0ZXMgKFVTIEVhc3QpIiwga2V5OiAidXMtZWFzdCIsIHBheWxvYWQ6IHsgcmVnaW9uOiAidXMtZWFzdC0xIiwgbGF0ZW5jeTogMjAgfSB9LAogICAgICB7IG9wdGlvbjogIkV1cm9wZSAoRnJhbmtmdXJ0KSIsIGtleTogImV1LWNlbnRyYWwiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImV1LWNlbnRyYWwtMSIsIGxhdGVuY3k6IDUwIH0gfSwKICAgICAgeyBvcHRpb246ICJBc2lhIFBhY2lmaWMgKFNpbmdhcG9yZSkiLCBrZXk6ICJhcC1zb3V0aGVhc3QiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImFwLXNvdXRoZWFzdC0xIiwgbGF0ZW5jeTogMTIwIH0gfQogICAgXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJldS1jZW50cmFsIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgdGhlIGNsb3Nlc3QgcmVnaW9uIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIn0KICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB7CiAgICAgIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVnaW9uLXJlc3VsdCIpOwogICAgICBpZiAoZGlzcGxheSkgewogICAgICAgIGRpc3BsYXkudGV4dENvbnRlbnQgPSAiU2VsZWN0ZWQ6ICIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLnZhbHVlLCBudWxsLCAyKTsKICAgICAgfQogICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPGRpdiBpZD0icmVnaW9uLXJlc3VsdCIgY2xhc3M9InJlc3VsdC1kaXNwbGF5Ij5TZWxlY3RlZDogeyAicmVnaW9uIjogImV1LWNlbnRyYWwtMSIsICJsYXRlbmN5IjogNTAgfTwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gU3VydmV5IEV4YW1wbGUifSAuc3VidGl0bGU9JHsiTXVsdGlwbGUgcmFkaW8gZ3JvdXBzIGZvciBzdXJ2ZXlzIGFuZCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJIb3cgc2F0aXNmaWVkIGFyZSB5b3U/In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIlZlcnkgU2F0aXNmaWVkIiwgIlNhdGlzZmllZCIsICJOZXV0cmFsIiwgIkRpc3NhdGlzZmllZCIsICJWZXJ5IERpc3NhdGlzZmllZCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiU2F0aXNmaWVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiV291bGQgeW91IHJlY29tbWVuZCB1cz8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siRGVmaW5pdGVseSIsICJQcm9iYWJseSIsICJOb3QgU3VyZSIsICJQcm9iYWJseSBOb3QiLCAiRGVmaW5pdGVseSBOb3QiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByb2JhYmx5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFN0YXRlcyAmIFZhbGlkYXRpb24ifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgdmFsaWRhdGlvbiBleGFtcGxlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCBTZWxlY3Rpb24ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siT3B0aW9uIEEiLCAiT3B0aW9uIEIiLCAiT3B0aW9uIEMiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBTdGF0ZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEaXNhYmxlZCBPcHRpb24gMSIsICJEaXNhYmxlZCBPcHRpb24gMiIsICJEaXNhYmxlZCBPcHRpb24gMyJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRGlzYWJsZWQgT3B0aW9uIDIifQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gU2V0dGluZ3MgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDb21tb24gcGF0dGVybnMgaW4gYXBwbGljYXRpb24gc2V0dGluZ3MifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJUaGVtZSBQcmVmZXJlbmNlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiTGlnaHQgVGhlbWUiLCBrZXk6ICJsaWdodCIsIHBheWxvYWQ6ICJsaWdodCIgfSwKICAgICAgeyBvcHRpb246ICJEYXJrIFRoZW1lIiwga2V5OiAiZGFyayIsIHBheWxvYWQ6ICJkYXJrIiB9LAogICAgICB7IG9wdGlvbjogIlN5c3RlbSBEZWZhdWx0Iiwga2V5OiAic3lzdGVtIiwgcGF5bG9hZDogImF1dG8iIH0KICAgIF19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJkYXJrIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNob29zZSBob3cgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhcHBlYXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siQWxsIE5vdGlmaWNhdGlvbnMiLCAiSW1wb3J0YW50IE9ubHkiLCAiTm9uZSJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSW1wb3J0YW50IE9ubHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ29udHJvbCBob3cgb2Z0ZW4geW91IHJlY2VpdmUgbm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiTGFuZ3VhZ2UifQogICAgICAgICAgICAub3B0aW9ucz0ke1siRW5nbGlzaCIsICJHZXJtYW4iLCAiRnJlbmNoIiwgIlNwYW5pc2giLCAiSmFwYW5lc2UiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVuZ2xpc2gifQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJXb3JrcyBzZWFtbGVzc2x5IHdpdGggZGVlcy1mb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgTmFtZSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsicHJvZHVjdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IENhdGVnb3J5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVsZWN0cm9uaWNzIiwgIkNsb3RoaW5nIiwgIkJvb2tzIiwgIkhvbWUgJiBHYXJkZW4iLCAiU3BvcnRzIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsiY2F0ZWdvcnkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJDb25kaXRpb24ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siTmV3IiwgIkxpa2UgTmV3IiwgIkdvb2QiLCAiRmFpciIsICJQb29yIl19CiAgICAgICAgICAgIC5kaXJlY3Rpb249JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsiY29uZGl0aW9uIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik5ldyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlNoaXBwaW5nIFNwZWVkIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiU3RhbmRhcmQgKDUtNyBkYXlzKSIsIGtleTogInN0YW5kYXJkIiwgcGF5bG9hZDogeyBkYXlzOiA3LCBwcmljZTogMCB9IH0sCiAgICAgIHsgb3B0aW9uOiAiRXhwcmVzcyAoMi0zIGRheXMpIiwga2V5OiAiZXhwcmVzcyIsIHBheWxvYWQ6IHsgZGF5czogMywgcHJpY2U6IDEwIH0gfSwKICAgICAgeyBvcHRpb246ICJPdmVybmlnaHQiLCBrZXk6ICJvdmVybmlnaHQiLCBwYXlsb2FkOiB7IGRheXM6IDEsIHByaWNlOiAyNSB9IH0KICAgIF19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yYWRpb2dyb3VwL2RlZXMtaW5wdXQtcmFkaW9ncm91cC5qcwp2YXIgX19lc0RlY29yYXRlMjMsIF9fcnVuSW5pdGlhbGl6ZXJzMjQsIERlZXNJbnB1dFJhZGlvZ3JvdXA7CnZhciBpbml0X2RlZXNfaW5wdXRfcmFkaW9ncm91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfcmFkaW9ncm91cF9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUyMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczI0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRSYWRpb2dyb3VwID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcmFkaW9ncm91cCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2RpcmVjdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfb3B0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcHRpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9wdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjModGhpcywgbnVsbCwgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkT3B0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZE9wdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZE9wdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfZGlyZWN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpcmVjdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlyZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpcmVjdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfdmFsaWRhdGlvblN0YXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25TdGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbGlkYXRpb25TdGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbGlkYXRpb25TdGF0ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTU7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGlyZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9kaXJlY3Rpb25faW5pdGlhbGl6ZXJzLCAidmVydGljYWwiKSk7CiAgICAgICAgZ2V0IGRpcmVjdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRpcmVjdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gRm9ybSBjb21wYXRpYmlsaXR5CiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgY29uc3Qgb3B0aW9uMiA9IHRoaXMuZ2V0T3B0aW9uQnlLZXkodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiICYmIG9wdGlvbjIucGF5bG9hZCAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgIHJldHVybiBvcHRpb24yLnBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbHVlKHZhbCkgewogICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdHlwZW9mIG9wdCA9PT0gIm9iamVjdCIgJiYgb3B0LnBheWxvYWQgPT09IHZhbCk7CiAgICAgICAgICAgIGlmIChvcHRpb24yICYmIHR5cGVvZiBvcHRpb24yID09PSAib2JqZWN0IikgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvcHRpb24yLmtleTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGdhcDogMjBweDsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA2cHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lci5ob3Jpem9udGFsIC5yYWRpby1vcHRpb24gewogICAgICAgIHBhZGRpbmc6IDZweCAyMHB4IDZweCAwOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZTo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgIH0KCiAgICAgIC5yYWRpby1jaXJjbGU6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDMuOSUpIil9LAogICAgICAgICAgICAgICAgICAgIDAgMCAwIDRweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb24gewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgfQoKICAgICAgLmxhYmVsLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwM2VtOwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0pIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvblN0YXRlPSJ2YWxpZCJdKSAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiLCAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsaWRhdGlvblN0YXRlPSJ3YXJuIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLyogT3ZlcnJpZGUgYmFzZSBncmlkIGxheW91dCBmb3IgcmFkaW9ncm91cCB0byBwcmV2ZW50IGxhcmdlIGdhcHMgKi8KICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJsZWZ0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJyaWdodCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG87CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgJHt0aGlzLmxhYmVsID8gYjJgPGRpdiBjbGFzcz0ibGFiZWwtdGV4dCI+JHt0aGlzLmxhYmVsfTwvZGl2PmAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAgICR7dGhpcy5vcHRpb25zLm1hcCgob3B0aW9uMikgPT4gewogICAgICAgICAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvbktleShvcHRpb24yKTsKICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbjIpOwogICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gb3B0aW9uS2V5OwogICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICAgIGNsYXNzPSJyYWRpby1vcHRpb24gJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb25LZXkpfSIKICAgICAgICAgICAgICAgIEBrZXlkb3duPSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlS2V5ZG93bihlMTEsIG9wdGlvbktleSl9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyYWRpby1jaXJjbGUiIAogICAgICAgICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgICAgICAgIHJvbGU9InJhZGlvIgogICAgICAgICAgICAgICAgICBhcmlhLWNoZWNrZWQ9IiR7aXNTZWxlY3RlZH0iCiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9IiR7b3B0aW9uTGFiZWx9IgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaW8tbGFiZWwiPiR7b3B0aW9uTGFiZWx9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGdldE9wdGlvbktleShvcHRpb24yKSB7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHJldHVybiBvcHRpb24yOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG9wdGlvbjIua2V5OwogICAgICAgIH0KICAgICAgICBnZXRPcHRpb25MYWJlbChvcHRpb24yKSB7CiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHJldHVybiBvcHRpb24yOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG9wdGlvbjIub3B0aW9uOwogICAgICAgIH0KICAgICAgICBnZXRPcHRpb25CeUtleShrZXkyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25LZXkob3B0KSA9PT0ga2V5Mik7CiAgICAgICAgfQogICAgICAgIHNlbGVjdE9wdGlvbihrZXkyKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0ga2V5MjsKICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0ga2V5MikgewogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0IiwgewogICAgICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy52YWx1ZSB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOwogICAgICAgIH0KICAgICAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkT3B0aW9uKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLnJlcXVpcmVkKSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5vcHRpb25zWzBdOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25LZXkoZmlyc3RPcHRpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVLZXlkb3duKGV2ZW50LCBvcHRpb25LZXkpIHsKICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKG9wdGlvbktleSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dSaWdodCIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5mb2N1c05leHRPcHRpb24oKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNPcHRpb24oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9jdXNOZXh0T3B0aW9uKCkgewogICAgICAgICAgY29uc3QgcmFkaW9DaXJjbGVzID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHJhZGlvQ2lyY2xlcy5maW5kSW5kZXgoKGVsKSA9PiBlbCA9PT0gdGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpOwogICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgcmFkaW9DaXJjbGVzLmxlbmd0aDsKICAgICAgICAgIHJhZGlvQ2lyY2xlc1tuZXh0SW5kZXhdLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGZvY3VzUHJldmlvdXNPcHRpb24oKSB7CiAgICAgICAgICBjb25zdCByYWRpb0NpcmNsZXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIucmFkaW8tY2lyY2xlIikpOwogICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcmFkaW9DaXJjbGVzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSB0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCk7CiAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSBjdXJyZW50SW5kZXggPD0gMCA/IHJhZGlvQ2lyY2xlcy5sZW5ndGggLSAxIDogY3VycmVudEluZGV4IC0gMTsKICAgICAgICAgIHJhZGlvQ2lyY2xlc1twcmV2SW5kZXhdLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczI0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0tc3VibWl0L2RlZXMtZm9ybS1zdWJtaXQuZGVtby5qcwp2YXIgZGVtb0Z1bmMxNjsKdmFyIGluaXRfZGVlc19mb3JtX3N1Ym1pdF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0tc3VibWl0L2RlZXMtZm9ybS1zdWJtaXQuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMxNiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMjRweDsKICAgICAgcGFkZGluZzogMjRweDsKICAgIH0KICAgIC5kZW1vLXNlY3Rpb24gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWN0aW9uIGgzIHsKICAgICAgbWFyZ2luOiAwIDAgOHB4IDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICM4ODg7CiAgICB9CiAgICAuZGVtby1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBnYXA6IDEycHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5CYXNpYyBVc2FnZTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgRm9ybTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCB0ZXh0PSJXaXRoIFRleHQgUHJvcGVydHkiPjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+V2l0aCBJY29ucyAoaW5oZXJpdGVkIGZyb20gRGVlc0J1dHRvbik8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgaWNvbj0ibHVjaWRlOnNlbmQiPlN1Ym1pdDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBpY29uPSJsdWNpZGU6c2F2ZSIgaWNvblBvc2l0aW9uPSJsZWZ0Ij5TYXZlIEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgaWNvbj0ibHVjaWRlOmFycm93LXJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0Ij5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QnV0dG9uIFR5cGVzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1yb3ciPgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHR5cGU9ImhpZ2hsaWdodGVkIiBpY29uPSJsdWNpZGU6c2VuZCI+SGlnaGxpZ2h0ZWQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgdHlwZT0ibm9ybWFsIiBpY29uPSJsdWNpZGU6c2VuZCI+Tm9ybWFsPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHR5cGU9ImRpc2NyZWV0IiBpY29uPSJsdWNpZGU6c2VuZCI+RGlzY3JlZXQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlNpemVzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1yb3ciPgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHNpemU9InNtYWxsIiBpY29uPSJsdWNpZGU6c2VuZCI+U21hbGw8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgc2l6ZT0ibm9ybWFsIiBpY29uPSJsdWNpZGU6c2VuZCI+Tm9ybWFsPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHNpemU9ImxhcmdlIiBpY29uPSJsdWNpZGU6c2VuZCI+TGFyZ2U8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlN0YXRlczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzdGF0dXM9Im5vcm1hbCIgaWNvbj0ibHVjaWRlOnNlbmQiPk5vcm1hbDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBzdGF0dXM9InBlbmRpbmciIGljb249Imx1Y2lkZTpzZW5kIj5QZW5kaW5nPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHN0YXR1cz0ic3VjY2VzcyIgaWNvbj0ibHVjaWRlOmNoZWNrIj5TdWNjZXNzPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IHN0YXR1cz0iZXJyb3IiIGljb249Imx1Y2lkZTp4Ij5FcnJvcjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBkaXNhYmxlZCBpY29uPSJsdWNpZGU6c2VuZCI+RGlzYWJsZWQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkluIGEgRm9ybSBDb250ZXh0PC9oMz4KICAgICAgPGRlZXMtZm9ybT4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9IkVtYWlsIiBrZXk9ImVtYWlsIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCBpY29uPSJsdWNpZGU6c2VuZCIgdHlwZT0iaGlnaGxpZ2h0ZWQiPlN1Ym1pdCBGb3JtPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICA8L2RlZXMtZm9ybT4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0tc3VibWl0L2RlZXMtZm9ybS1zdWJtaXQuanMKdmFyIF9fZXNEZWNvcmF0ZTI0LCBfX3J1bkluaXRpYWxpemVyczI1LCBEZWVzRm9ybVN1Ym1pdDsKdmFyIGluaXRfZGVlc19mb3JtX3N1Ym1pdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtLXN1Ym1pdC9kZWVzLWZvcm0tc3VibWl0LmpzIigpIHsKICAgIGluaXRfZGVlc19mb3JtX3N1Ym1pdF9kZW1vKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMjQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMyNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0Zvcm1TdWJtaXQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtLXN1Ym1pdCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZGlzYWJsZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NpemVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvblBvc2l0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvblBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0Zvcm1TdWJtaXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9pY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2ljb25Qb3NpdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF9kaXNhYmxlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXNhYmxlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzYWJsZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjQodGhpcywgbnVsbCwgX3RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50ZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGV4dF9pbml0aWFsaXplcnMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF9zdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF90eXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInR5cGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvbl9pbml0aWFsaXplcnMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvblBvc2l0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTY7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZvcm0iLCAiQnV0dG9uIl07CiAgICAgICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBQcm9wZXJ0aWVzIGZvcndhcmRlZCB0byBpbnRlcm5hbCBkZWVzLWJ1dHRvbgogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIGdldCBkaXNhYmxlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZGlzYWJsZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCB0ZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgICAgICBnZXQgc3RhdHVzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3RhdHVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJkZWZhdWx0IikpOwogICAgICAgIGdldCB0eXBlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpKTsKICAgICAgICBnZXQgc2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9pY29uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGljb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2ljb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzLCAibGVmdCIpKTsKICAgICAgICBnZXQgaWNvblBvc2l0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvblBvc2l0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIGRlZXMtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICAuc3RhdHVzPSR7dGhpcy5zdGF0dXN9CiAgICAgICAgLnR5cGU9JHt0aGlzLnR5cGV9CiAgICAgICAgLnNpemU9JHt0aGlzLnNpemV9CiAgICAgICAgLmljb249JHt0aGlzLmljb259CiAgICAgICAgLmljb25Qb3NpdGlvbj0ke3RoaXMuaWNvblBvc2l0aW9ufQogICAgICAgIC50ZXh0PSR7dGhpcy50ZXh0fQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgQGNsaWNrZWQ9JHt0aGlzLnN1Ym1pdH0KICAgICAgPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHN1Ym1pdCgpIHsKICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1FbGVtZW50ID0gdGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGlmIChwYXJlbnRGb3JtRWxlbWVudCAmJiBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCkgewogICAgICAgICAgICBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBmb2N1cygpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzMiA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgICAgIGF3YWl0IGRvbXRvb2xzMi5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgICB0aGlzLnN1Ym1pdCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMyNShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0Zvcm1TdWJtaXQyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uZGVtby5qcwp2YXIgZGVtb0Z1bmMxNzsKdmFyIGluaXRfZGVlc19pbnB1dF9kcm9wZG93bl9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgaW5pdF9kZWVzX2Zvcm0oKTsKICAgIGluaXRfZGVlc19mb3JtX3N1Ym1pdCgpOwogICAgZGVtb0Z1bmMxNyA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGNvdW50cnlEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltsYWJlbD0iU2VsZWN0IENvdW50cnkiXScpOwogICAgICBjb25zdCByb2xlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTsKICAgICAgaWYgKGNvdW50cnlEcm9wZG93bikgewogICAgICAgIGNvdW50cnlEcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlZE9wdGlvbiIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAocm9sZURyb3Bkb3duKSB7CiAgICAgICAgcm9sZURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiUm9sZSBzZWxlY3RlZDoiLCBldmVudC5kZXRhaWwpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIERyb3Bkb3ducyJ9IC5zdWJ0aXRsZT0keyJTdGFuZGFyZCBkcm9wZG93biB3aXRoIHNlYXJjaCBmdW5jdGlvbmFsaXR5IGFuZCB2YXJpb3VzIG9wdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiU2VsZWN0IENvdW50cnkifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH0sCiAgICAgIHsgb3B0aW9uOiAiQ2FuYWRhIiwga2V5OiAiY2EiIH0sCiAgICAgIHsgb3B0aW9uOiAiR2VybWFueSIsIGtleTogImRlIiB9LAogICAgICB7IG9wdGlvbjogIkZyYW5jZSIsIGtleTogImZyIiB9LAogICAgICB7IG9wdGlvbjogIlVuaXRlZCBLaW5nZG9tIiwga2V5OiAidWsiIH0sCiAgICAgIHsgb3B0aW9uOiAiQXVzdHJhbGlhIiwga2V5OiAiYXUiIH0sCiAgICAgIHsgb3B0aW9uOiAiSmFwYW4iLCBrZXk6ICJqcCIgfSwKICAgICAgeyBvcHRpb246ICJCcmF6aWwiLCBrZXk6ICJiciIgfQogICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgoKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIkFkbWluaXN0cmF0b3IiLCBrZXk6ICJhZG1pbiIgfSwKICAgICAgeyBvcHRpb246ICJFZGl0b3IiLCBrZXk6ICJlZGl0b3IiIH0sCiAgICAgIHsgb3B0aW9uOiAiVmlld2VyIiwga2V5OiAidmlld2VyIiB9LAogICAgICB7IG9wdGlvbjogIkd1ZXN0Iiwga2V5OiAiZ3Vlc3QiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHByaW9yaXR5RHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICAgICAgaWYgKHByaW9yaXR5RHJvcGRvd24pIHsKICAgICAgICBwcmlvcml0eURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgUHJpb3JpdHkgY2hhbmdlZCB0bzogJHtldmVudC5kZXRhaWwub3B0aW9ufWApOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjIuIFdpdGhvdXQgU2VhcmNoIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdpdGggc2VhcmNoIGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQgZm9yIHNpbXBsZXIgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgeyBvcHRpb246ICJIaWdoIiwga2V5OiAiaGlnaCIgfSwKICAgICAgeyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH0sCiAgICAgIHsgb3B0aW9uOiAiTG93Iiwga2V5OiAibG93IiB9CiAgICBdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkcm9wZG93bnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICAgICAgZHJvcGRvd25zLmZvckVhY2goKGRyb3Bkb3duKSA9PiB7CiAgICAgICAgZHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IGxhYmVsID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwogICAgICAgICAgY29uc29sZS5sb2coYCR7bGFiZWx9OiAke2V2ZW50LmRldGFpbC5vcHRpb259YCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBkcm9wZG93bnMgaW4gYSBob3Jpem9udGFsIGxheW91dCBmb3IgY29tcGFjdCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkRlcGFydG1lbnQifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiRW5naW5lZXJpbmciLCBrZXk6ICJlbmciIH0sCiAgICAgIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogICAgICB7IG9wdGlvbjogIk1hcmtldGluZyIsIGtleTogIm1hcmtldGluZyIgfSwKICAgICAgeyBvcHRpb246ICJTYWxlcyIsIGtleTogInNhbGVzIiB9CiAgICBdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gU2l6ZSJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIjEtNSIsIGtleTogInNtYWxsIiB9LAogICAgICB7IG9wdGlvbjogIjYtMjAiLCBrZXk6ICJtZWRpdW0iIH0sCiAgICAgIHsgb3B0aW9uOiAiMjEtNTAiLCBrZXk6ICJsYXJnZSIgfSwKICAgICAgeyBvcHRpb246ICI1MCsiLCBrZXk6ICJ4bGFyZ2UiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiTG9jYXRpb24ifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiUmVtb3RlIiwga2V5OiAicmVtb3RlIiB9LAogICAgICB7IG9wdGlvbjogIk9uLXNpdGUiLCBrZXk6ICJvbnNpdGUiIH0sCiAgICAgIHsgb3B0aW9uOiAiSHlicmlkIiwga2V5OiAiaHlicmlkIiB9CiAgICBdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCByZXF1aXJlZERyb3Bkb3duID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRyb3Bkb3duW3JlcXVpcmVkXSIpOwogICAgICBpZiAocmVxdWlyZWREcm9wZG93bikgewogICAgICAgIHJlcXVpcmVkRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBkcm9wZG93biBsb3N0IGZvY3VzIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiT3B0aW9uIEEiLCBrZXk6ICJhIiB9LAogICAgICB7IG9wdGlvbjogIk9wdGlvbiBCIiwga2V5OiAiYiIgfSwKICAgICAgeyBvcHRpb246ICJPcHRpb24gQyIsIGtleTogImMiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgoKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIkNhbm5vdCBTZWxlY3QiLCBrZXk6ICJkaXNhYmxlZCIgfQogICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJDYW5ub3QgU2VsZWN0Iiwga2V5OiAiZGlzYWJsZWQiIH19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIChTcGFjZXIgdG8gdGVzdCBkcm9wZG93biBwb3NpdGlvbmluZykKICAgIDwvZGl2PgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogICAgICBpZiAoZHJvcGRvd24pIHsKICAgICAgICBkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlZE9wdGlvbiIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIkJvdHRvbSBkcm9wZG93biBzZWxlY3RlZDoiLCBldmVudC5kZXRhaWwpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIEJvdHRvbSBQb3NpdGlvbmluZyJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB0aGF0IG9wZW5zIHVwd2FyZCB3aGVuIG5lYXIgYm90dG9tIG9mIHZpZXdwb3J0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJPcGVucyBVcHdhcmQifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiRmlyc3QgT3B0aW9uIiwga2V5OiAiZmlyc3QiIH0sCiAgICAgIHsgb3B0aW9uOiAiU2Vjb25kIE9wdGlvbiIsIGtleTogInNlY29uZCIgfSwKICAgICAgeyBvcHRpb246ICJUaGlyZCBPcHRpb24iLCBrZXk6ICJ0aGlyZCIgfSwKICAgICAgeyBvcHRpb246ICJGb3VydGggT3B0aW9uIiwga2V5OiAiZm91cnRoIiB9LAogICAgICB7IG9wdGlvbjogIkZpZnRoIE9wdGlvbiIsIGtleTogImZpZnRoIiB9CiAgICBdfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7CiAgICAgIGlmIChkcm9wZG93biAmJiBvdXRwdXQpIHsKICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5TZWxlY3QgYSBwcm9kdWN0IHRvIHNlZSBkZXRhaWxzLi4uPC9lbT4iOwogICAgICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICAgICAgaWYgKGV2ZW50LmRldGFpbC52YWx1ZSkgewogICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLmtleX08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5QcmljZTo8L3N0cm9uZz4gJCR7ZXZlbnQuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlIHx8ICJOL0EifTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPkZlYXR1cmVzOjwvc3Ryb25nPiAke2V2ZW50LmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKSB8fCAiTi9BIn0KICAgICAgICAgICAgYDsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBFdmVudCBIYW5kbGluZyAmIFBheWxvYWQifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBwYXlsb2FkIGRhdGEgYW5kIGNoYW5nZSBldmVudCBoYW5kbGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiU2VsZWN0IFByb2R1Y3QifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiQmFzaWMgUGxhbiIsIGtleTogImJhc2ljIiwgcGF5bG9hZDogeyBwcmljZTogOS45OSwgZmVhdHVyZXM6IFsiRmVhdHVyZSBBIl0gfSB9LAogICAgICB7IG9wdGlvbjogIlBybyBQbGFuIiwga2V5OiAicHJvIiwgcGF5bG9hZDogeyBwcmljZTogMTkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiXSB9IH0sCiAgICAgIHsgb3B0aW9uOiAiRW50ZXJwcmlzZSBQbGFuIiwga2V5OiAiZW50ZXJwcmlzZSIsIHBheWxvYWQ6IHsgcHJpY2U6IDQ5Ljk5LCBmZWF0dXJlczogWyJGZWF0dXJlIEEiLCAiRmVhdHVyZSBCIiwgIkZlYXR1cmUgQyJdIH0gfQogICAgXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9InNlbGVjdGlvbi1vdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOiAxNnB4OyBwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwNSwgMjQyLCAwLjEpOyBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtc2l6ZTogMTRweDsiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgIGNvbnN0IHByb2plY3RUeXBlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25ba2V5PSJwcm9qZWN0VHlwZSJdJyk7CiAgICAgIGNvbnN0IGZyYW1ld29ya0Ryb3Bkb3duID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRyb3Bkb3duW2tleT0iZnJhbWV3b3JrIl0nKTsKICAgICAgaWYgKGZvcm0pIHsKICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiRm9ybSBzdWJtaXR0ZWQgd2l0aCBkYXRhOiIsIGV2ZW50LmRldGFpbC5kYXRhKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAocHJvamVjdFR5cGVEcm9wZG93biAmJiBmcmFtZXdvcmtEcm9wZG93bikgewogICAgICAgIHByb2plY3RUeXBlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IGV2ZW50LmRldGFpbC5rZXk7CiAgICAgICAgICBjb25zb2xlLmxvZyhgUHJvamVjdCB0eXBlIGNoYW5nZWQgdG86ICR7c2VsZWN0ZWRUeXBlfWApOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd29ya2luZyB3aXRoaW4gYSBmb3JtIHdpdGggdmFsaWRhdGlvbiJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBUeXBlIn0KICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0VHlwZSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIldlYiBBcHBsaWNhdGlvbiIsIGtleTogIndlYiIgfSwKICAgICAgeyBvcHRpb246ICJNb2JpbGUgQXBwbGljYXRpb24iLCBrZXk6ICJtb2JpbGUiIH0sCiAgICAgIHsgb3B0aW9uOiAiRGVza3RvcCBBcHBsaWNhdGlvbiIsIGtleTogImRlc2t0b3AiIH0sCiAgICAgIHsgb3B0aW9uOiAiQVBJIFNlcnZpY2UiLCBrZXk6ICJhcGkiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGV2ZWxvcG1lbnQgRnJhbWV3b3JrIn0KICAgICAgICAgICAgLmtleT0keyJmcmFtZXdvcmsifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgeyBvcHRpb246ICJSZWFjdCIsIGtleTogInJlYWN0IiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgICAgIHsgb3B0aW9uOiAiVnVlLmpzIiwga2V5OiAidnVlIiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgICAgIHsgb3B0aW9uOiAiQW5ndWxhciIsIGtleTogImFuZ3VsYXIiLCBwYXlsb2FkOiB7IHR5cGU6ICJ3ZWIiIH0gfSwKICAgICAgeyBvcHRpb246ICJSZWFjdCBOYXRpdmUiLCBrZXk6ICJyZWFjdC1uYXRpdmUiLCBwYXlsb2FkOiB7IHR5cGU6ICJtb2JpbGUiIH0gfSwKICAgICAgeyBvcHRpb246ICJGbHV0dGVyIiwga2V5OiAiZmx1dHRlciIsIHBheWxvYWQ6IHsgdHlwZTogIm1vYmlsZSIgfSB9LAogICAgICB7IG9wdGlvbjogIkVsZWN0cm9uIiwga2V5OiAiZWxlY3Ryb24iLCBwYXlsb2FkOiB7IHR5cGU6ICJkZXNrdG9wIiB9IH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJDcmVhdGUgUHJvamVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmpzCnZhciBfX2VzRGVjb3JhdGUyNSwgX19ydW5Jbml0aWFsaXplcnMyNiwgRGVlc0lucHV0RHJvcGRvd247CnZhciBpbml0X2RlZXNfaW5wdXRfZHJvcGRvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfZHJvcGRvd25fZGVtbygpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTI1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbnB1dERyb3Bkb3duID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZHJvcGRvd24iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfb3B0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbmFibGVTZWFyY2hfZGVjb3JhdG9yczsKICAgICAgbGV0IF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3BlbnNUb1RvcF9kZWNvcmF0b3JzOwogICAgICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWx0ZXJlZE9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oaWdobGlnaHRlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNPcGVuZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc09wZW5lZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlYXJjaFZhbHVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJbnB1dERyb3Bkb3duMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICAgICAgfSldOwogICAgICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNPcGVuZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3B0aW9uc19pbml0aWFsaXplcnMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE9wdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRPcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRPcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVNlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbmFibGVTZWFyY2ggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVNlYXJjaF9pbml0aWFsaXplcnMsIF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyZWRPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJlZE9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyZWRPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZmlsdGVyZWRPcHRpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWx0ZXJlZE9wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyZWRPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGlnaGxpZ2h0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmhpZ2hsaWdodGVkSW5kZXggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hpZ2hsaWdodGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCBfaGlnaGxpZ2h0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNPcGVuZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzT3BlbmVkX2luaXRpYWxpemVycywgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWFyY2hWYWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzLCBfc2VhcmNoVmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0lucHV0RHJvcGRvd24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxNzsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBvcHRpb25zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG9wdGlvbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGVkT3B0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbHVlKHZhbCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgICB9CiAgICAgICAgI2VuYWJsZVNlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlbGVjdGVkT3B0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZW5hYmxlU2VhcmNoX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBlbmFibGVTZWFyY2goKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlbmFibGVTZWFyY2godmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbmFibGVTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGZpbHRlcmVkT3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJlZE9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGZpbHRlcmVkT3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZpbHRlcmVkT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2hpZ2hsaWdodGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGhpZ2hsaWdodGVkSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaGlnaGxpZ2h0ZWRJbmRleCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2hpZ2hsaWdodGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaGlnaGxpZ2h0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2lzT3BlbmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNPcGVuZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNPcGVuZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzT3BlbmVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNPcGVuZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWFyY2hWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHNlYXJjaFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWFyY2hWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveCB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBsaW5lLWhlaWdodDogMzhweDsKICAgICAgICBwYWRkaW5nOiAwIDQwcHggMCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveDpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94LmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLyogRHJvcGRvd24gYXJyb3cgKi8KICAgICAgLnNlbGVjdGVkQm94OjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wOiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveC5vcGVuOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgxODBkZWcpOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uQm94IHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpIHNjYWxlKDAuOTgpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQogICAgICAKICAgICAgLnNlbGVjdGlvbkJveC50b3AgewogICAgICAgIGJvdHRvbTogY2FsYygxMDAlICsgNHB4KTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3guYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25Cb3guc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogT3B0aW9ucyBjb250YWluZXIgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyNTBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLyogT3B0aW9ucyAqLwogICAgICAub3B0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luOiAycHggMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAub3B0aW9uLmhpZ2hsaWdodGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLyogTm8gb3B0aW9ucyBtZXNzYWdlICovCiAgICAgIC5uby1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAvKiBTZWFyY2ggKi8KICAgICAgLnNlYXJjaCB7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2guYm90dG9tIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnNlYXJjaCBpbnB1dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAub3B0aW9ucy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAub3B0aW9ucy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAub3B0aW9ucy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RlZEJveCAke3RoaXMuaXNPcGVuZWQgPyAib3BlbiIgOiAiIn0gJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+ICF0aGlzLmRpc2FibGVkICYmIHRoaXMudG9nZ2xlU2VsZWN0aW9uQm94KCl9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VsZWN0ZWRCb3hLZXlkb3dufSIKICAgICAgICAgID4KICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkT3B0aW9uPy5vcHRpb24gfHwgIlNlbGVjdCBhbiBvcHRpb24ifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rpb25Cb3ggJHt0aGlzLmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7dGhpcy5vcGVuc1RvVG9wID8gInRvcCIgOiAiYm90dG9tIn0iPgogICAgICAgICAgICAke3RoaXMuZW5hYmxlU2VhcmNoID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIgCiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIG9wdGlvbnMuLi4iIAogICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSIke3RoaXMuc2VhcmNoVmFsdWV9IgogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSIke3RoaXMuaGFuZGxlU2VhcmNofSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9IgogICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249IiR7dGhpcy5oYW5kbGVTZWFyY2hLZXlkb3dufSIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiBudWxsfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcHRpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHt0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyBiMmA8ZGl2IGNsYXNzPSJuby1vcHRpb25zIj5ObyBvcHRpb25zIGZvdW5kPC9kaXY+YCA6IHRoaXMuZmlsdGVyZWRPcHRpb25zLm1hcCgob3B0aW9uMiwgaW5kZXgyKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4MjsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3B0aW9uICR7aXNIaWdobGlnaHRlZCA/ICJoaWdobGlnaHRlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLnVwZGF0ZVNlbGVjdGlvbihvcHRpb24yKX0iCiAgICAgICAgICAgICAgICAgICAgICAgIEBtb3VzZWVudGVyPSIkeygpID0+IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IGluZGV4Mn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7b3B0aW9uMi5vcHRpb259CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgfSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCBudWxsOwogICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygib3B0aW9ucyIpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBzZWxlY3RlZE9wdGlvbjsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gMDsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGVkT3B0aW9uIiwgewogICAgICAgICAgICBkZXRhaWw6IHNlbGVjdGVkT3B0aW9uLAogICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBwYXRoMiA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICAgICAgaWYgKCFwYXRoMi5pbmNsdWRlcyh0aGlzKSkgewogICAgICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSAhdGhpcy5pc09wZW5lZDsKICAgICAgICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7CiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpOwogICAgICAgICAgICBjb25zdCByZWN0ID0gc2VsZWN0ZWRCb3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmJvdHRvbTsKICAgICAgICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wOwogICAgICAgICAgICB0aGlzLm9wZW5zVG9Ub3AgPSBzcGFjZUJlbG93IDwgMzAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93OwogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoIGlucHV0Iik7CiAgICAgICAgICAgIGlmIChzZWFyY2hJbnB1dCkgewogICAgICAgICAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZVNlYXJjaChldmVudCkgewogICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hUZXJtOwogICAgICAgICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbjIpID0+IG9wdGlvbjIub3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpKTsKICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpIHsKICAgICAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDE7CiAgICAgICAgICBpZiAoa2V5MiA9PT0gIkFycm93RG93biIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gdGhpcy5oaWdobGlnaHRlZEluZGV4ICsgMSA+IG1heEluZGV4ID8gMCA6IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCArIDE7CiAgICAgICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJBcnJvd1VwIikgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxIDwgMCA/IG1heEluZGV4IDogdGhpcy5oaWdobGlnaHRlZEluZGV4IC0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoa2V5MiA9PT0gIkVudGVyIikgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5oaWdobGlnaHRlZEluZGV4XSkgewogICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudCkgewogICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bihldmVudCkgewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICJFbnRlciIgfHwgZXZlbnQua2V5ID09PSAiICIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1VwIikgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dERyb3Bkb3duMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2RlbW8uanMKdmFyIGRlbW9GdW5jMTg7CnZhciBpbml0X2RlbW8zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2RlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfY29tcG9uZW50MygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBkZW1vRnVuYzE4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1zaGVsbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDExNjBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgICAgICAgICAuZGVtby1ncmlkLS10d28gewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zdGFjayB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMThweDsKICAgICAgICB9CgogICAgICAgIC5kZW1vLW5vdGUgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxNSAyMCUgMjYlKSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDEwMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDI1JSAzMiUpIiwgImhzbCgyMTUgMjAlIDgyJSkiKX07CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS41NTsKICAgICAgICB9CgogICAgICAgIC5kZW1vLW5vdGUgc3Ryb25nIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNDUlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2hlbGwiPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJNb2Rlcm4gZmlsZSB1cGxvYWRlciJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlNoYWRjbi1pbnNwaXJlZCBsYXlvdXQgd2l0aCBkcmFnICYgZHJvcCwgcHJldmlld3MgYW5kIHZhbGlkYXRpb24ifQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIGRlbW8tZ3JpZC0tdHdvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc3RhY2siPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkF0dGFjaG1lbnRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB5b3VyIHJlcXVlc3QifQogICAgICAgICAgICAgIC5hY2NlcHQ9JHsiaW1hZ2UvKiwucGRmLC56aXAifQogICAgICAgICAgICAgIC5tYXhTaXplPSR7MTAgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJCcmFuZCBhc3NldHMifQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVcGxvYWQgaGlnaC1yZXNvbHV0aW9uIGltYWdlcnkgKEpQRy9QTkcpIn0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlL2pwZWcsaW1hZ2UvcG5nIn0KICAgICAgICAgICAgICAubXVsdGlwbGU9JHtmYWxzZX0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgICAuYnV0dG9uVGV4dD0keyJTZWxlY3QgY292ZXIgaW1hZ2UifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdWRpbyB1cGxvYWRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2hhcmUgcG9kY2FzdCBkcmFmdHMgKE1QMy9XQVYsIG1heCAyNU1CIGVhY2gpIn0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImF1ZGlvLyoifQogICAgICAgICAgICAgIC5tYXhTaXplPSR7MjUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBleGFtcGxlIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkZXIgaXMgZGlzYWJsZWQgd2hpbGUgbW9kZXJhdGlvbiBpcyBwZW5kaW5nIn0KICAgICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiRm9ybSBpbnRlZ3JhdGlvbiJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IkNvbWJpbmUgZmlsZSB1cGxvYWRzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERFRVMgZm9ybSBlY29zeXN0ZW0ifQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc3RhY2siPgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IG5hbWUifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkhvdyBzaG91bGQgd2UgcmVmZXIgdG8gdGhpcyBwcm9qZWN0IGludGVybmFsbHk/In0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgICAua2V5PSR7InByb2plY3ROYW1lIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJDb250YWN0IGVtYWlsIn0KICAgICAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsiZW1haWwifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAgIC5rZXk9JHsiY29udGFjdEVtYWlsIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJTdGF0ZW1lbnQgb2Ygd29yayJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGEgc2lnbmVkIHN0YXRlbWVudCBvZiB3b3JrIChQREYsIG1heCAxNU1CKSJ9CiAgICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgICAgLmFjY2VwdD0keyJhcHBsaWNhdGlvbi9wZGYifQogICAgICAgICAgICAgICAgLm1heFNpemU9JHsxNSAqIDEwMjQgKiAxMDI0fQogICAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgICAua2V5PSR7InNvdyJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ3JlYXRpdmUgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwuIFVwbG9hZCB1cCB0byBmaXZlIHZpc3VhbCByZWZlcmVuY2VzIn0KICAgICAgICAgICAgICAgIC5hY2NlcHQ9JHsiaW1hZ2UvKiJ9CiAgICAgICAgICAgICAgICAubWF4RmlsZXM9JHs1fQogICAgICAgICAgICAgICAgLm1heFNpemU9JHs4ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgICAgICAua2V5PSR7InJlZmVyZW5jZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgb3B0aW9uYWwgY29udGV4dCBmb3IgcmV2aWV3ZXJzIn0KICAgICAgICAgICAgICAgIC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifQogICAgICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgYnJpZWZpbmcifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kZWVzLWZvcm0+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ub3RlIj4KICAgICAgICAgICAgPHN0cm9uZz5Hb29kIHRvIGtub3c6PC9zdHJvbmc+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+RHJhZyAmIGRyb3AgaGlnaGxpZ2h0cyB0aGUgZHJvcHpvbmUgYW5kIHN1cHBvcnRzIGtleWJvYXJkIGFjdGl2YXRpb24uPC9saT4KICAgICAgICAgICAgICA8bGk+QWNjZXB0ZWQgZmlsZSB0eXBlcyBhcmUgc3VtbWFyaXNlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIDxjb2RlPmFjY2VwdDwvY29kZT4gYXR0cmlidXRlLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkltYWdlIHVwbG9hZHMgc2hvdyBsaXZlIHByZXZpZXdzIGdlbmVyYXRlZCB2aWEgPGNvZGU+VVJMLmNyZWF0ZU9iamVjdFVSTDwvY29kZT4uPC9saT4KICAgICAgICAgICAgICA8bGk+RmlsZSBzaXplIGFuZCBmaWxlLWNvdW50IGxpbWl0cyBzdXJmYWNlIGlubGluZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRoZSBjb21wb25lbnQgc3RheXMgY29tcGF0aWJsZSB3aXRoIDxjb2RlPmRlZXMtZm9ybTwvY29kZT4gdmFsdWUgYWNjZXNzb3JzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL3N0eWxlcy5qcwp2YXIgZmlsZXVwbG9hZFN0eWxlczsKdmFyIGluaXRfc3R5bGVzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZmlsZXVwbG9hZC9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBmaWxldXBsb2FkU3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgaWAKICAgIDpob3N0IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCgogICAgLmlucHV0LXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmRyb3B6b25lIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICBib3JkZXI6IDEuNXB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgODAlKSIsICJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDEyJSkiKX0sCiAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjUpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDMycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUsIDIzLCA0MiwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTElKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWRpc2FibGVkIHsKICAgICAgb3BhY2l0eTogMC42OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2JvZHkgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCAiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZSB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCAiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCAiaHNsKDIxMyA5MyUgMTglKSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwgImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwgImhzbCgyMTcgMjUlIDI2JSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5maWxlLXJvdzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC44KSIsICJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCgogICAgLnRodW1iLWltYWdlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICB9CgogICAgLmZpbGUtbWV0YSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmZpbGUtbmFtZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsICJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAzMiUgMjglKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NiUpIiwgImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsICJoc2woMCA2MiUgMzIlIC8gMC4xNSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIlIDQ2JSkiLCAiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlMjYsIF9fcnVuSW5pdGlhbGl6ZXJzMjcsIERlZXNJbnB1dEZpbGV1cGxvYWQ7CnZhciBpbml0X2NvbXBvbmVudDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2RlbW8zKCk7CiAgICBpbml0X3N0eWxlczMoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfbGFiZWwoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBfX2VzRGVjb3JhdGUyNiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczI3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRGaWxldXBsb2FkID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3RhdGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzTG9hZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzTG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9idXR0b25UZXh0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYnV0dG9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9idXR0b25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWNjZXB0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYWNjZXB0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjY2VwdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX211bHRpcGxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbXVsdGlwbGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbXVsdGlwbGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYXhTaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWF4U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYXhTaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RmlsZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYXhGaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYXhGaWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX3N0YXRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYnV0dG9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9hY2NlcHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfbXVsdGlwbGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX21heFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfbWF4RmlsZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfdmFsaWRhdGlvblN0YXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMjYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfc3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3RhdGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXRlX2luaXRpYWxpemVycywgX3N0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9idXR0b25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJ1dHRvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJ1dHRvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnV0dG9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJ1dHRvblRleHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCBfYnV0dG9uVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfYWNjZXB0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFjY2VwdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWNjZXB0X2luaXRpYWxpemVycywgX2FjY2VwdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbXVsdGlwbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXVsdGlwbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11bHRpcGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11bHRpcGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubXVsdGlwbGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX211bHRpcGxlX2luaXRpYWxpemVycywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9tYXhTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1heFNpemUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heFNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbWF4RmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RmlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEZpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWF4RmlsZXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heEZpbGVzX2luaXRpYWxpemVycywgX21heEZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsaWRhdGlvblN0YXRlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxODsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3N0YXRlX2luaXRpYWxpemVycywgImlkbGUiKSk7CiAgICAgICAgZ2V0IHN0YXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzdGF0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzTG9hZGluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzTG9hZGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCAiU2VsZWN0IGZpbGVzIikpOwogICAgICAgIGdldCBidXR0b25UZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2J1dHRvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGJ1dHRvblRleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNidXR0b25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY2NlcHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9idXR0b25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfYWNjZXB0X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgYWNjZXB0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWNjZXB0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWNjZXB0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtdWx0aXBsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2FjY2VwdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBtdWx0aXBsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtdWx0aXBsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbXVsdGlwbGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtdWx0aXBsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgbWF4U2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXhTaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIC8vIDAgbWVhbnMgbm8gbGltaXQKICAgICAgICBzZXQgbWF4U2l6ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21heFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heEZpbGVzX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBtYXhGaWxlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXhGaWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICAvLyAwIG1lYW5zIG5vIGxpbWl0CiAgICAgICAgc2V0IG1heEZpbGVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWF4RmlsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heEZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgIiIpOwogICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBwcmV2aWV3VXJsTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICAgICAgZHJvcEFyZWEgPSBudWxsOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBmaWxldXBsb2FkU3R5bGVzOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGFjY2VwdGVkU3VtbWFyeSA9IHRoaXMuZ2V0QWNjZXB0ZWRTdW1tYXJ5KCk7CiAgICAgICAgICBjb25zdCBtZXRhRW50cmllcyA9IFsKICAgICAgICAgICAgdGhpcy5tdWx0aXBsZSA/ICJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiIDogIlNpbmdsZSBmaWxlIG9ubHkiLAogICAgICAgICAgICB0aGlzLm1heFNpemUgPiAwID8gYE1heCAke3RoaXMuZm9ybWF0RmlsZVNpemUodGhpcy5tYXhTaXplKX1gIDogIk5vIHNpemUgbGltaXQiCiAgICAgICAgICBdOwogICAgICAgICAgaWYgKGFjY2VwdGVkU3VtbWFyeSkgewogICAgICAgICAgICBtZXRhRW50cmllcy5wdXNoKGBBY2NlcHRzICR7YWNjZXB0ZWRTdW1tYXJ5fWApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZSA9PT0gImRyYWdPdmVyIiA/ICJkcm9wem9uZS0tYWN0aXZlIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZHJvcHpvbmUtLWRpc2FibGVkIiA6ICIifSAke3RoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJkcm9wem9uZS0taGFzLWZpbGVzIiA6ICIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IC0xIDogMH0KICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgYXJpYS1sYWJlbD0ke2BTZWxlY3QgZmlsZXMke2FjY2VwdGVkU3VtbWFyeSA/IGAgKCR7YWNjZXB0ZWRTdW1tYXJ5fSlgIDogIiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8ICIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nID8gYjJgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHQgfHwgIlNlbGVjdCBmaWxlcyJ9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fc3VibGluZSI+CiAgICAgICAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IKICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcHpvbmVfX2Jyb3dzZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVCcm93c2VDbGlja30KICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgYnJvd3NlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fbWV0YSI+CiAgICAgICAgICAgICR7bWV0YUVudHJpZXMubWFwKChlbnRyeSkgPT4gYjJgPHNwYW4+JHtlbnRyeX08L3NwYW4+YCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5yZW5kZXJGaWxlTGlzdCgpfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZSA/IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSIgYXJpYS1saXZlPSJwb2xpdGUiPiR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZX08L2Rpdj5gIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJGaWxlTGlzdCgpIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2hlYWRlciI+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMSA/ICIiIDogInMifSBzZWxlY3RlZDwvc3Bhbj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gYjJgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoID4gMSA/ICJhbGwiIDogIiJ9PC9idXR0b24+YCA6IGIyYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKChmaWxlKSA9PiB0aGlzLnJlbmRlckZpbGVSb3coZmlsZSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckZpbGVSb3coZmlsZSkgewogICAgICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICAgICAgY29uc3QgcHJldmlld1VybCA9IHRoaXMuY2FuU2hvd1ByZXZpZXcoZmlsZSkgPyB0aGlzLmdldFByZXZpZXdVcmwoZmlsZSkgOiBudWxsOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJmaWxlLXJvdyAke2ZpbGVUeXBlfS1maWxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLXRodW1iIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAke3ByZXZpZXdVcmwgPyBiMmA8aW1nIGNsYXNzPSJ0aHVtYi1pbWFnZSIgc3JjPSR7cHJldmlld1VybH0gYWx0PSR7YFByZXZpZXcgb2YgJHtmaWxlLm5hbWV9YH0+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24oZmlsZSl9PjwvZGVlcy1pY29uPmB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1tZXRhIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbmFtZSIgdGl0bGU9JHtmaWxlLm5hbWV9PiR7ZmlsZS5uYW1lfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1kZXRhaWxzIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtc2l6ZSI+JHt0aGlzLmZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSl9PC9zcGFuPgogICAgICAgICAgICAke2ZpbGVUeXBlICE9PSAiZmlsZSIgPyBiMmA8c3BhbiBjbGFzcz0iZmlsZS10eXBlIj4ke2ZpbGVUeXBlfTwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtYWN0aW9ucyI+CiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgY2xhc3M9InJlbW92ZS1idXR0b24iCiAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMucmVtb3ZlRmlsZShmaWxlKX0KICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2BSZW1vdmUgJHtmaWxlLm5hbWV9YH0KICAgICAgICAgID4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6WCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBoYW5kbGVGaWxlSW5wdXRDaGFuZ2UgPSBhc3luYyAoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20odGFyZ2V0LmZpbGVzID8/IFtdKTsKICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgICAgfQogICAgICAgICAgdGFyZ2V0LnZhbHVlID0gIiI7CiAgICAgICAgfTsKICAgICAgICBoYW5kbGVEcm9wem9uZUNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoIi5kcm9wem9uZV9fYnJvd3NlLCAuZmlsZS1saXN0IikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCk7CiAgICAgICAgfTsKICAgICAgICBoYW5kbGVCcm93c2VDbGljayA9IChldmVudCkgPT4gewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgICAgICB9OwogICAgICAgIGhhbmRsZURyb3B6b25lS2V5ZG93biA9IChldmVudCkgPT4gewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiB8fCBldmVudC5rZXkgPT09ICIgIikgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGhhbmRsZUNsZWFyQWxsID0gKGV2ZW50KSA9PiB7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5jbGVhckFsbCgpOwogICAgICAgIH07CiAgICAgICAgaGFuZGxlRHJhZ0V2ZW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyYWdlbnRlciIgfHwgZXZlbnQudHlwZSA9PT0gImRyYWdvdmVyIikgewogICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7CiAgICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAiY29weSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICJkcmFnT3ZlciI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChldmVudC50eXBlID09PSAiZHJhZ2xlYXZlIikgewogICAgICAgICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgY29uc3QgeyBjbGllbnRYID0gMCwgY2xpZW50WSA9IDAgfSA9IGV2ZW50OwogICAgICAgICAgICBpZiAoY2xpZW50WCA8PSByZWN0LmxlZnQgfHwgY2xpZW50WCA+PSByZWN0LnJpZ2h0IHx8IGNsaWVudFkgPD0gcmVjdC50b3AgfHwgY2xpZW50WSA+PSByZWN0LmJvdHRvbSkgewogICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAiaWRsZSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJkcm9wIikgewogICAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcyA/PyBbXSk7CiAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRGaWxlcyhmaWxlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGF0dGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICAgICAgdGhpcy5kcm9wQXJlYS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcy5oYW5kbGVEcmFnRXZlbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGRldGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICAgICAgdGhpcy5kcm9wQXJlYS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcy5oYW5kbGVEcmFnRXZlbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKSB7CiAgICAgICAgICBjb25zdCBuZXdEcm9wQXJlYSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRyb3B6b25lIik7CiAgICAgICAgICBpZiAobmV3RHJvcEFyZWEgIT09IHRoaXMuZHJvcEFyZWEpIHsKICAgICAgICAgICAgdGhpcy5kZXRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgICAgICAgIHRoaXMuZHJvcEFyZWEgPSBuZXdEcm9wQXJlYTsKICAgICAgICAgICAgdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgICAgICAgICBjb25zdCB1bml0czIgPSBbIkJ5dGVzIiwgIktCIiwgIk1CIiwgIkdCIl07CiAgICAgICAgICBpZiAoYnl0ZXMgPT09IDApCiAgICAgICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgICAgICBjb25zdCBleHBvbmVudCA9IE1hdGgubWluKE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coMTAyNCkpLCB1bml0czIubGVuZ3RoIC0gMSk7CiAgICAgICAgICBjb25zdCBzaXplID0gYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBleHBvbmVudCk7CiAgICAgICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChzaXplICogMTAwKSAvIDEwMH0gJHt1bml0czJbZXhwb25lbnRdfWA7CiAgICAgICAgfQogICAgICAgIGdldEZpbGVUeXBlKGZpbGUpIHsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgICAgICAgIHJldHVybiAiaW1hZ2UiOwogICAgICAgICAgaWYgKHR5cGU1ID09PSAiYXBwbGljYXRpb24vcGRmIikKICAgICAgICAgICAgcmV0dXJuICJwZGYiOwogICAgICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ3b3JkIikgfHwgdHlwZTUuaW5jbHVkZXMoImRvY3VtZW50IikpCiAgICAgICAgICAgIHJldHVybiAiZG9jIjsKICAgICAgICAgIGlmICh0eXBlNS5pbmNsdWRlcygic2hlZXQiKSB8fCB0eXBlNS5pbmNsdWRlcygiZXhjZWwiKSkKICAgICAgICAgICAgcmV0dXJuICJzcHJlYWRzaGVldCI7CiAgICAgICAgICBpZiAodHlwZTUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpIHx8IHR5cGU1LmluY2x1ZGVzKCJwb3dlcnBvaW50IikpCiAgICAgICAgICAgIHJldHVybiAicHJlc2VudGF0aW9uIjsKICAgICAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgICAgICAgcmV0dXJuICJ2aWRlbyI7CiAgICAgICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCiAgICAgICAgICAgIHJldHVybiAiYXVkaW8iOwogICAgICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ6aXAiKSB8fCB0eXBlNS5pbmNsdWRlcygiY29tcHJlc3NlZCIpKQogICAgICAgICAgICByZXR1cm4gImFyY2hpdmUiOwogICAgICAgICAgcmV0dXJuICJmaWxlIjsKICAgICAgICB9CiAgICAgICAgZ2V0RmlsZUljb24oZmlsZSkgewogICAgICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICAgICAgY29uc3QgaWNvbk1hcCA9IHsKICAgICAgICAgICAgaW1hZ2U6ICJsdWNpZGU6RmlsZUltYWdlIiwKICAgICAgICAgICAgcGRmOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICAgICAgZG9jOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICAgICAgc3ByZWFkc2hlZXQ6ICJsdWNpZGU6RmlsZVNwcmVhZHNoZWV0IiwKICAgICAgICAgICAgcHJlc2VudGF0aW9uOiAibHVjaWRlOkZpbGVCYXJDaGFydCIsCiAgICAgICAgICAgIHZpZGVvOiAibHVjaWRlOkZpbGVWaWRlbyIsCiAgICAgICAgICAgIGF1ZGlvOiAibHVjaWRlOkZpbGVBdWRpbyIsCiAgICAgICAgICAgIGFyY2hpdmU6ICJsdWNpZGU6RmlsZUFyY2hpdmUiLAogICAgICAgICAgICBmaWxlOiAibHVjaWRlOkZpbGUiCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGljb25NYXBbZmlsZVR5cGVdID8/ICJsdWNpZGU6RmlsZSI7CiAgICAgICAgfQogICAgICAgIGNhblNob3dQcmV2aWV3KGZpbGUpIHsKICAgICAgICAgIHJldHVybiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikgJiYgZmlsZS5zaXplIDwgNSAqIDEwMjQgKiAxMDI0OwogICAgICAgIH0KICAgICAgICB2YWxpZGF0ZUZpbGUoZmlsZSkgewogICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSAiJHtmaWxlLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YDsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmFjY2VwdCkgewogICAgICAgICAgICBjb25zdCBhY2NlcHRlZFR5cGVzID0gdGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS50cmltKCkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lmxlbmd0aCA+IDApOwogICAgICAgICAgICBpZiAoYWNjZXB0ZWRUeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgbGV0IGlzQWNjZXB0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFjY2VwdFR5cGUgb2YgYWNjZXB0ZWRUeXBlcykgewogICAgICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGUuc3RhcnRzV2l0aCgiLiIpKSB7CiAgICAgICAgICAgICAgICAgIGlmIChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChhY2NlcHRUeXBlLnRvTG93ZXJDYXNlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjZXB0VHlwZS5lbmRzV2l0aCgiLyoiKSkgewogICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXg0ID0gYWNjZXB0VHlwZS5zbGljZSgwLCAtMik7CiAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnR5cGUuc3RhcnRzV2l0aChwcmVmaXg0KSkgewogICAgICAgICAgICAgICAgICAgIGlzQWNjZXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZSA9PT0gYWNjZXB0VHlwZSkgewogICAgICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghaXNBY2NlcHRlZCkgewogICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBGaWxlIHR5cGUgbm90IGFjY2VwdGVkLiBBbGxvd2VkOiAke2FjY2VwdGVkVHlwZXMuam9pbigiLCAiKX1gOwogICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZ2V0UHJldmlld1VybChmaWxlKSB7CiAgICAgICAgICBsZXQgdXJsID0gdGhpcy5wcmV2aWV3VXJsTWFwLmdldChmaWxlKTsKICAgICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICAgIHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICAgICAgICAgIHRoaXMucHJldmlld1VybE1hcC5zZXQoZmlsZSwgdXJsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB1cmw7CiAgICAgICAgfQogICAgICAgIHJlbGVhc2VQcmV2aWV3KGZpbGUpIHsKICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMucHJldmlld1VybE1hcC5nZXQoZmlsZSk7CiAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICAgICAgdGhpcy5wcmV2aWV3VXJsTWFwLmRlbGV0ZShmaWxlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0QWNjZXB0ZWRTdW1tYXJ5KCkgewogICAgICAgICAgaWYgKCF0aGlzLmFjY2VwdCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IEFycmF5LmZyb20obmV3IFNldCh0aGlzLmFjY2VwdC5zcGxpdCgiLCIpLm1hcCgodG9rZW4pID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubGVuZ3RoID4gMCkubWFwKCh0b2tlbikgPT4gdGhpcy5mb3JtYXRBY2NlcHRUb2tlbih0b2tlbikpKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkWzBdOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZFswXX0sICR7Zm9ybWF0dGVkWzFdfWA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkLnNsaWNlKDAsIDIpLmpvaW4oIiwgIil9XHUyMDI2YDsKICAgICAgICB9CiAgICAgICAgZm9ybWF0QWNjZXB0VG9rZW4odG9rZW4pIHsKICAgICAgICAgIGlmICh0b2tlbiA9PT0gIiovKiIpIHsKICAgICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKCIvKiIpKSB7CiAgICAgICAgICAgIGNvbnN0IGZhbWlseSA9IHRva2VuLnNwbGl0KCIvIilbMF07CiAgICAgICAgICAgIGlmICghZmFtaWx5KSB7CiAgICAgICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBgJHtmYW1pbHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtmYW1pbHkuc2xpY2UoMSl9IGZpbGVzYDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKCIuIikpIHsKICAgICAgICAgICAgcmV0dXJuIHRva2VuLnNsaWNlKDEpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInBkZiIpKQogICAgICAgICAgICByZXR1cm4gIlBERiI7CiAgICAgICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInppcCIpKQogICAgICAgICAgICByZXR1cm4gIlpJUCI7CiAgICAgICAgICBpZiAodG9rZW4uaW5jbHVkZXMoImpzb24iKSkKICAgICAgICAgICAgcmV0dXJuICJKU09OIjsKICAgICAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygibXN3b3JkIikpCiAgICAgICAgICAgIHJldHVybiAiRE9DIjsKICAgICAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpKQogICAgICAgICAgICByZXR1cm4gIkRPQ1giOwogICAgICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJleGNlbCIpKQogICAgICAgICAgICByZXR1cm4gIlhMUyI7CiAgICAgICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpKQogICAgICAgICAgICByZXR1cm4gIlBQVCI7CiAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRva2VuLnNwbGl0KCIvIik7CiAgICAgICAgICBjb25zdCBsYXN0U2VnbWVudCA9IHNlZ21lbnRzLnBvcCgpID8/IHRva2VuOwogICAgICAgICAgcmV0dXJuIGxhc3RTZWdtZW50LnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIGF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpIHsKICAgICAgICAgIHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpOwogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICB0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpOwogICAgICAgIH0KICAgICAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInZhbHVlIikpIHsKICAgICAgICAgICAgdm9pZCB0aGlzLnZhbGlkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICB0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKTsKICAgICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzTG9hZGluZykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7CiAgICAgICAgICBjb25zdCBpbnB1dEZpbGUgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5maWxlLWlucHV0Iik7CiAgICAgICAgICBpZiAoIWlucHV0RmlsZSkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZmlsZXMgfHwgaW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgICB9LCAzMDApOwogICAgICAgICAgfTsKICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICAgIGlucHV0RmlsZS5jbGljaygpOwogICAgICAgIH0KICAgICAgICByZW1vdmVGaWxlKGZpbGUpIHsKICAgICAgICAgIGNvbnN0IGluZGV4MiA9IHRoaXMudmFsdWUuaW5kZXhPZihmaWxlKTsKICAgICAgICAgIGlmIChpbmRleDIgPiAtMSkgewogICAgICAgICAgICB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpOwogICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleDIsIDEpOwogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xlYXJBbGwoKSB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ0ZpbGVzID0gWy4uLnRoaXMudmFsdWVdOwogICAgICAgICAgdGhpcy52YWx1ZSA9IFtdOwogICAgICAgICAgZXhpc3RpbmdGaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpKTsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSAiU2VsZWN0IGZpbGVzIjsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlVmFsdWUoZXZlbnRBcmcpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHRhcmdldC5maWxlcyA/PyBbXSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIGlmICh2YWx1ZTIubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSB0aGlzLm11bHRpcGxlID8gIkFkZCBtb3JlIGZpbGVzIiA6ICJSZXBsYWNlIGZpbGUiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgICAgICB2b2lkIHRoaXMudmFsaWRhdGUoKTsKICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgYWRkRmlsZXMoZmlsZXMpIHsKICAgICAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSBbXTsKICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUZpbGUoZmlsZSkpIHsKICAgICAgICAgICAgICBmaWxlc1RvQWRkLnB1c2goZmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5tYXhGaWxlcyA+IDApIHsKICAgICAgICAgICAgY29uc3QgdG90YWxGaWxlcyA9IHRoaXMudmFsdWUubGVuZ3RoICsgZmlsZXNUb0FkZC5sZW5ndGg7CiAgICAgICAgICAgIGlmICh0b3RhbEZpbGVzID4gdGhpcy5tYXhGaWxlcykgewogICAgICAgICAgICAgIGNvbnN0IGFsbG93ZWRDb3VudCA9IHRoaXMubWF4RmlsZXMgLSB0aGlzLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICBpZiAoYWxsb3dlZENvdW50IDw9IDApIHsKICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWF4aW11bSAke3RoaXMubWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgOwogICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmaWxlc1RvQWRkLnNwbGljZShhbGxvd2VkQ291bnQpOwogICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgT25seSAke2FsbG93ZWRDb3VudH0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGA7CiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAid2FybiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiBmaWxlc1RvQWRkLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKChmaWxlKSA9PiB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpKTsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlc1RvQWRkWzBdXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaCguLi5maWxlc1RvQWRkKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAiIjsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gbnVsbDsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoKTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gdGhpcy5tdWx0aXBsZSA/ICJBZGQgbW9yZSBmaWxlcyIgOiAiUmVwbGFjZSBmaWxlIjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9ICJTZWxlY3QgZmlsZXMiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAiIjsKICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGZpbGUiOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdGhpcy52YWx1ZSkgewogICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9IHRoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJ2YWxpZCIgOiBudWxsOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczI3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRGaWxldXBsb2FkMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfZmlsZXVwbG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZmlsZXVwbG9hZC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMKZnVuY3Rpb24gaXNWYWxpZElCQU4oaWJhbiwgdmFsaWRhdGlvbk9wdGlvbnMpIHsKICBpZiAodmFsaWRhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgdmFsaWRhdGlvbk9wdGlvbnMgPSB7IGFsbG93UVJJQkFOOiB0cnVlIH07CiAgfQogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlswLTldezJ9JCIsICIiKTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICBpZiAoc3BlYyA9PT0gdm9pZCAwIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCkKICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gc3BlYy5jaGFycyA9PT0gaWJhbi5sZW5ndGggJiYgcmVnLnRlc3QoaWJhbi5zbGljZSgyLCA0KSkgJiYgaXNWYWxpZEJCQU4oaWJhbi5zbGljZSg0KSwgY291bnRyeUNvZGUpICYmIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgJiYgKHZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOIHx8ICFpc1FSSUJBTihpYmFuKSk7Cn0KZnVuY3Rpb24gdmFsaWRhdGVJQkFOKGliYW4sIHZhbGlkYXRpb25PcHRpb25zKSB7CiAgaWYgKHZhbGlkYXRpb25PcHRpb25zID09PSB2b2lkIDApIHsKICAgIHZhbGlkYXRpb25PcHRpb25zID0geyBhbGxvd1FSSUJBTjogdHJ1ZSB9OwogIH0KICB2YXIgcmVzdWx0ID0geyBlcnJvckNvZGVzOiBbXSwgdmFsaWQ6IHRydWUgfTsKICBpZiAoaWJhbiAhPT0gdm9pZCAwICYmIGliYW4gIT09IG51bGwgJiYgaWJhbiAhPT0gIiIpIHsKICAgIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2liYW4uc2xpY2UoMCwgMildOwogICAgaWYgKCFzcGVjIHx8ICEoc3BlYy5iYmFuX3JlZ2V4cCB8fCBzcGVjLmNoYXJzKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Ob0lCQU5Db3VudHJ5KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuY2hhcnMgJiYgc3BlYy5jaGFycyAhPT0gaWJhbi5sZW5ndGgpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdCQkFOTGVuZ3RoKTsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuYmJhbl9yZWdleHAgJiYgIWNoZWNrRm9ybWF0QkJBTihpYmFuLnNsaWNlKDQpLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0JCQU5Gb3JtYXQpOwogICAgfQogICAgaWYgKHNwZWMgJiYgc3BlYy5iYmFuX3ZhbGlkYXRpb25fZnVuYyAmJiAhc3BlYy5iYmFuX3ZhbGlkYXRpb25fZnVuYyhpYmFuLnNsaWNlKDQpKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0pOwogICAgfQogICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bMC05XXsyfSQiLCAiIik7CiAgICBpZiAoIXJlZy50ZXN0KGliYW4uc2xpY2UoMiwgNCkpKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLkNoZWNrc3VtTm90TnVtYmVyKTsKICAgIH0KICAgIGlmIChyZXN1bHQuZXJyb3JDb2Rlcy5pbmRleE9mKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkZvcm1hdCkgIT09IC0xIHx8ICFpc1ZhbGlkSUJBTkNoZWNrc3VtKGliYW4pKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nSUJBTkNoZWNrc3VtKTsKICAgIH0KICAgIGlmICghdmFsaWRhdGlvbk9wdGlvbnMuYWxsb3dRUklCQU4gJiYgaXNRUklCQU4oaWJhbikpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uUVJJQkFOTm90QWxsb3dlZCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Ob0lCQU5Qcm92aWRlZCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gaXNWYWxpZEJCQU4oYmJhbiwgY291bnRyeUNvZGUpIHsKICBpZiAoYmJhbiA9PT0gdm9pZCAwIHx8IGJiYW4gPT09IG51bGwgfHwgY291bnRyeUNvZGUgPT09IHZvaWQgMCB8fCBjb3VudHJ5Q29kZSA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tjb3VudHJ5Q29kZV07CiAgaWYgKHNwZWMgPT09IHZvaWQgMCB8fCBzcGVjID09PSBudWxsIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCB8fCBzcGVjLmNoYXJzID09PSBudWxsKQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChzcGVjLmNoYXJzIC0gNCA9PT0gYmJhbi5sZW5ndGggJiYgY2hlY2tGb3JtYXRCQkFOKGJiYW4sIHNwZWMuYmJhbl9yZWdleHApKSB7CiAgICBpZiAoc3BlYy5iYmFuX3ZhbGlkYXRpb25fZnVuYykgewogICAgICByZXR1cm4gc3BlYy5iYmFuX3ZhbGlkYXRpb25fZnVuYyhiYmFuLnJlcGxhY2UoL1tccy5dKy9nLCAiIikpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBpc1NFUEFDb3VudHJ5KGNvdW50cnlDb2RlKSB7CiAgaWYgKGNvdW50cnlDb2RlICE9PSB2b2lkIDAgJiYgY291bnRyeUNvZGUgIT09IG51bGwpIHsKICAgIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICAgIGlmIChzcGVjICE9PSB2b2lkIDApIHsKICAgICAgcmV0dXJuIHNwZWMuU0VQQSA/IHNwZWMuU0VQQSA6IGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gaXNRUklCQU4oaWJhbikgewogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBRUklCQU5Db3VudHJpZXMgPSBbIkxJIiwgIkNIIl07CiAgaWYgKCFRUklCQU5Db3VudHJpZXMuaW5jbHVkZXMoY291bnRyeUNvZGUpKQogICAgcmV0dXJuIGZhbHNlOwogIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeM1swLTFdezF9WzAtOV17M30kIiwgIiIpOwogIHJldHVybiByZWcudGVzdChpYmFuLnNsaWNlKDQsIDkpKTsKfQpmdW5jdGlvbiBjb21wb3NlSUJBTihwYXJhbXMyKSB7CiAgdmFyIGZvcm1hdGVkX2JiYW4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihwYXJhbXMyLmJiYW4pIHx8ICIiOwogIGlmIChwYXJhbXMyLmNvdW50cnlDb2RlID09PSBudWxsIHx8IHBhcmFtczIuY291bnRyeUNvZGUgPT09IHZvaWQgMCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW3BhcmFtczIuY291bnRyeUNvZGVdOwogIGlmIChmb3JtYXRlZF9iYmFuICE9PSAiIiAmJiBzcGVjICE9PSB2b2lkIDAgJiYgc3BlYy5jaGFycyAmJiBzcGVjLmNoYXJzICE9PSBudWxsICYmIHNwZWMuY2hhcnMgPT09IGZvcm1hdGVkX2JiYW4ubGVuZ3RoICsgNCAmJiBzcGVjLmJiYW5fcmVnZXhwICYmIHNwZWMuYmJhbl9yZWdleHAgIT09IG51bGwgJiYgY2hlY2tGb3JtYXRCQkFOKGZvcm1hdGVkX2JiYW4sIHNwZWMuYmJhbl9yZWdleHApKSB7CiAgICB2YXIgY2hlY2tzb20gPSBtb2Q5NzEwSWJhbihwYXJhbXMyLmNvdW50cnlDb2RlICsgIjAwIiArIGZvcm1hdGVkX2JiYW4pOwogICAgcmV0dXJuIHBhcmFtczIuY291bnRyeUNvZGUgKyAoIjAiICsgKDk4IC0gY2hlY2tzb20pKS5zbGljZSgtMikgKyBmb3JtYXRlZF9iYmFuOwogIH0KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBleHRyYWN0SUJBTihpYmFuKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBlRm9ybWF0SUJBTiA9IGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pOwogIHJlc3VsdC5pYmFuID0gZUZvcm1hdElCQU4gfHwgaWJhbjsKICBpZiAoISFlRm9ybWF0SUJBTiAmJiBpc1ZhbGlkSUJBTihlRm9ybWF0SUJBTikpIHsKICAgIHJlc3VsdC5iYmFuID0gZUZvcm1hdElCQU4uc2xpY2UoNCk7CiAgICByZXN1bHQuY291bnRyeUNvZGUgPSBlRm9ybWF0SUJBTi5zbGljZSgwLCAyKTsKICAgIHJlc3VsdC52YWxpZCA9IHRydWU7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tyZXN1bHQuY291bnRyeUNvZGVdOwogICAgaWYgKHNwZWMuYWNjb3VudF9pbmRlbnRpZmllcikgewogICAgICB2YXIgYWMgPSBzcGVjLmFjY291bnRfaW5kZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYWNjb3VudE51bWJlciA9IHJlc3VsdC5pYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICAgIGlmIChzcGVjLmJhbmtfaWRlbnRpZmllcikgewogICAgICB2YXIgYWMgPSBzcGVjLmJhbmtfaWRlbnRpZmllci5zcGxpdCgiLSIpOwogICAgICB2YXIgc3RhcnRpbmcgPSBwYXJzZUludChhY1swXSk7CiAgICAgIHZhciBlbmRpbmcgPSBwYXJzZUludChhY1sxXSk7CiAgICAgIHJlc3VsdC5iYW5rSWRlbnRpZmllciA9IHJlc3VsdC5iYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICAgIGlmIChzcGVjLmJyYW5jaF9pbmRlbnRpZmllcikgewogICAgICB2YXIgYWMgPSBzcGVjLmJyYW5jaF9pbmRlbnRpZmllci5zcGxpdCgiLSIpOwogICAgICB2YXIgc3RhcnRpbmcgPSBwYXJzZUludChhY1swXSk7CiAgICAgIHZhciBlbmRpbmcgPSBwYXJzZUludChhY1sxXSk7CiAgICAgIHJlc3VsdC5icmFuY2hJZGVudGlmaWVyID0gcmVzdWx0LmJiYW4uc2xpY2Uoc3RhcnRpbmcsIGVuZGluZyArIDEpOwogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBjaGVja0Zvcm1hdEJCQU4oYmJhbiwgYmZvcm1hdCkgewogIHZhciByZWcgPSBuZXcgUmVnRXhwKGJmb3JtYXQsICIiKTsKICByZXR1cm4gcmVnLnRlc3QoYmJhbik7Cn0KZnVuY3Rpb24gZWxlY3Ryb25pY0Zvcm1hdElCQU4oaWJhbikgewogIGlmICh0eXBlb2YgaWJhbiAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gaWJhbi5yZXBsYWNlKC9bLVwgXS9nLCAiIikudG9VcHBlckNhc2UoKTsKfQpmdW5jdGlvbiBmcmllbmRseUZvcm1hdElCQU4oaWJhbiwgc2VwYXJhdG9yKSB7CiAgaWYgKHR5cGVvZiBpYmFuICE9PSAic3RyaW5nIikgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmIChzZXBhcmF0b3IgPT09IHZvaWQgMCB8fCBzZXBhcmF0b3IgPT09IG51bGwpIHsKICAgIHNlcGFyYXRvciA9ICIgIjsKICB9CiAgdmFyIGVsZWN0cm9uaWNfaWJhbiA9IGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pOwogIGlmIChlbGVjdHJvbmljX2liYW4gPT09IG51bGwpIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gZWxlY3Ryb25pY19pYmFuLnJlcGxhY2UoLyguezR9KSg/ISQpL2csICIkMSIgKyBzZXBhcmF0b3IpOwp9CmZ1bmN0aW9uIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgewogIHZhciBjb3VudHJ5Q29kZSA9IGliYW4uc2xpY2UoMCwgMik7CiAgdmFyIHByb3ZpZGVkQ2hlY2tzdW0gPSBwYXJzZUludChpYmFuLnNsaWNlKDIsIDQpLCAxMCk7CiAgdmFyIGJiYW4gPSBpYmFuLnNsaWNlKDQpOwogIHZhciB2YWxpZGF0aW9uU3RyaW5nID0gcmVwbGFjZUNoYXJhdGVyV2l0aENvZGUoIiIuY29uY2F0KGJiYW4pLmNvbmNhdChjb3VudHJ5Q29kZSwgIjAwIikpOwogIHZhciByZXN0ID0gbW9kOTcxMCh2YWxpZGF0aW9uU3RyaW5nKTsKICByZXR1cm4gOTggLSByZXN0ID09PSBwcm92aWRlZENoZWNrc3VtOwp9CmZ1bmN0aW9uIHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKHN0cikgewogIHJldHVybiBzdHIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihjMTEpIHsKICAgIHZhciBjb2RlNCA9IGMxMS5jaGFyQ29kZUF0KDApOwogICAgcmV0dXJuIGNvZGU0ID49IDY1ID8gKGNvZGU0IC0gNTUpLnRvU3RyaW5nKCkgOiBjMTE7CiAgfSkuam9pbigiIik7Cn0KZnVuY3Rpb24gbW9kOTcxMEliYW4oaWJhbikgewogIHJldHVybiBtb2Q5NzEwKHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKGliYW4uc2xpY2UoNCkgKyBpYmFuLnNsaWNlKDAsIDQpKSk7Cn0KZnVuY3Rpb24gZ2V0Q291bnRyeVNwZWNpZmljYXRpb25zKCkgewogIHZhciBjb3VudHlNYXAgPSB7fTsKICBmb3IgKHZhciBjb3VudHlDb2RlIGluIGNvdW50cnlTcGVjcykgewogICAgdmFyIGNvdW50eSA9IGNvdW50cnlTcGVjc1tjb3VudHlDb2RlXTsKICAgIGNvdW50eU1hcFtjb3VudHlDb2RlXSA9IHsKICAgICAgY2hhcnM6IGNvdW50eS5jaGFycyB8fCBudWxsLAogICAgICBiYmFuX3JlZ2V4cDogY291bnR5LmJiYW5fcmVnZXhwIHx8IG51bGwsCiAgICAgIElCQU5SZWdpc3RyeTogY291bnR5LklCQU5SZWdpc3RyeSB8fCBmYWxzZSwKICAgICAgU0VQQTogY291bnR5LlNFUEEgfHwgZmFsc2UKICAgIH07CiAgfQogIHJldHVybiBjb3VudHlNYXA7Cn0KZnVuY3Rpb24gaXNWYWxpZEJJQyhiaWMpIHsKICBpZiAoIWJpYykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlthLXpBLVpdezZ9W2EtekEtWjAtOV17Mn0oW2EtekEtWjAtOV17M30pPyQiLCAiIik7CiAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbYmljLnRvVXBwZXJDYXNlKCkuc2xpY2UoNCwgNildOwogIHJldHVybiByZWcudGVzdChiaWMpICYmIHNwZWMgIT09IHZvaWQgMDsKfQpmdW5jdGlvbiB2YWxpZGF0ZUJJQyhiaWMpIHsKICB2YXIgcmVzdWx0ID0geyBlcnJvckNvZGVzOiBbXSwgdmFsaWQ6IHRydWUgfTsKICBpZiAoYmljICE9PSB2b2lkIDAgJiYgYmljICE9PSBudWxsICYmIGJpYyAhPT0gIiIpIHsKICAgIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2JpYy50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsIDYpXTsKICAgIGlmIChzcGVjID09PSB2b2lkIDApIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0JJQy5Ob0JJQ0NvdW50cnkpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwgIiIpOwogICAgICBpZiAoIXJlZy50ZXN0KGJpYykpIHsKICAgICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNCSUMuV3JvbmdCSUNGb3JtYXQpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIHsKICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzQklDLk5vQklDUHJvdmlkZWQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGV4dHJhY3RCSUMoaW5wdXRCaWMpIHsKICB2YXIgcmVzdWx0ID0ge307CiAgdmFyIGJpYyA9IGlucHV0QmljLnRvVXBwZXJDYXNlKCk7CiAgaWYgKGlzVmFsaWRCSUMoYmljKSkgewogICAgcmVzdWx0LmJhbmtDb2RlID0gYmljLnNsaWNlKDAsIDQpOwogICAgcmVzdWx0LmNvdW50cnlDb2RlID0gYmljLnNsaWNlKDQsIDYpOwogICAgcmVzdWx0LmxvY2F0aW9uQ29kZSA9IGJpYy5zbGljZSg2LCA4KTsKICAgIHJlc3VsdC50ZXN0QklDID0gcmVzdWx0LmxvY2F0aW9uQ29kZVsxXSA9PT0gIjAiID8gdHJ1ZSA6IGZhbHNlOwogICAgcmVzdWx0LmJyYW5jaENvZGUgPSBiaWMubGVuZ3RoID4gOCA/IGJpYy5zbGljZSg4KSA6IG51bGw7CiAgICByZXN1bHQudmFsaWQgPSB0cnVlOwogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgVmFsaWRhdGlvbkVycm9yc0lCQU4sIFZhbGlkYXRpb25FcnJvcnNCSUMsIGNoZWNrTm9yd2F5QkJBTiwgY2hlY2tCZWxnaWFuQkJBTiwgbW9kOTcxMCwgY2hlY2tNb2Q5NzEwQkJBTiwgY2hlY2tQb2xhbmRCQkFOLCBjaGVja1NwYWluQkJBTiwgY2hlY2tNb2QxMTEwLCBjaGVja0Nyb2F0aWFuQkJBTiwgY2hlY2tDemVjaEFuZFNsb3Zha0JCQU4sIGNoZWNrRXN0b25pYW5CQkFOLCBjaGVja0ZyZW5jaEJCQU4sIGNoZWNrSHVuZ2FyaWFuQkJBTiwgc2V0Q291bnRyeUJCQU5WYWxpZGF0aW9uLCBjb3VudHJ5U3BlY3M7CnZhciBpbml0X2liYW50b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMiKCkgewogICAgInVzZSBzdHJpY3QiOwogICAgKGZ1bmN0aW9uKFZhbGlkYXRpb25FcnJvcnNJQkFOMikgewogICAgICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Qcm92aWRlZCJdID0gMF0gPSAiTm9JQkFOUHJvdmlkZWQiOwogICAgICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Db3VudHJ5Il0gPSAxXSA9ICJOb0lCQU5Db3VudHJ5IjsKICAgICAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdCQkFOTGVuZ3RoIl0gPSAyXSA9ICJXcm9uZ0JCQU5MZW5ndGgiOwogICAgICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0JCQU5Gb3JtYXQiXSA9IDNdID0gIldyb25nQkJBTkZvcm1hdCI7CiAgICAgIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIkNoZWNrc3VtTm90TnVtYmVyIl0gPSA0XSA9ICJDaGVja3N1bU5vdE51bWJlciI7CiAgICAgIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIldyb25nSUJBTkNoZWNrc3VtIl0gPSA1XSA9ICJXcm9uZ0lCQU5DaGVja3N1bSI7CiAgICAgIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSJdID0gNl0gPSAiV3JvbmdBY2NvdW50QmFua0JyYW5jaENoZWNrc3VtIjsKICAgICAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiUVJJQkFOTm90QWxsb3dlZCJdID0gN10gPSAiUVJJQkFOTm90QWxsb3dlZCI7CiAgICB9KShWYWxpZGF0aW9uRXJyb3JzSUJBTiB8fCAoVmFsaWRhdGlvbkVycm9yc0lCQU4gPSB7fSkpOwogICAgKGZ1bmN0aW9uKFZhbGlkYXRpb25FcnJvcnNCSUMyKSB7CiAgICAgIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJOb0JJQ1Byb3ZpZGVkIl0gPSAwXSA9ICJOb0JJQ1Byb3ZpZGVkIjsKICAgICAgVmFsaWRhdGlvbkVycm9yc0JJQzJbVmFsaWRhdGlvbkVycm9yc0JJQzJbIk5vQklDQ291bnRyeSJdID0gMV0gPSAiTm9CSUNDb3VudHJ5IjsKICAgICAgVmFsaWRhdGlvbkVycm9yc0JJQzJbVmFsaWRhdGlvbkVycm9yc0JJQzJbIldyb25nQklDRm9ybWF0Il0gPSAyXSA9ICJXcm9uZ0JJQ0Zvcm1hdCI7CiAgICB9KShWYWxpZGF0aW9uRXJyb3JzQklDIHx8IChWYWxpZGF0aW9uRXJyb3JzQklDID0ge30pKTsKICAgIGNoZWNrTm9yd2F5QkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICAgICAgdmFyIHdlaWdodHMgPSBbNSwgNCwgMywgMiwgNywgNiwgNSwgNCwgMywgMl07CiAgICAgIHZhciBiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMgPSBiYmFuLnJlcGxhY2UoL1tccy5dKy9nLCAiIik7CiAgICAgIHZhciBjb250cm9sRGlnaXQgPSBwYXJzZUludChiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuY2hhckF0KDEwKSwgMTApOwogICAgICB2YXIgYmJhbldpdGhvdXRDb250cm9sRGlnaXQgPSBiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuc3Vic3RyaW5nKDAsIDEwKTsKICAgICAgdmFyIHN1bSA9IDA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDEwOyBpbmRleDIrKykgewogICAgICAgIHN1bSArPSBwYXJzZUludChiYmFuV2l0aG91dENvbnRyb2xEaWdpdC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgICB9CiAgICAgIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICAgICAgcmV0dXJuIGNvbnRyb2xEaWdpdCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMSAtIHJlbWFpbmRlcik7CiAgICB9OwogICAgY2hlY2tCZWxnaWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICAgICAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogICAgICB2YXIgY2hlY2tpbmdQYXJ0ID0gcGFyc2VJbnQoc3RyaXBwZWQuc3Vic3RyaW5nKDAsIHN0cmlwcGVkLmxlbmd0aCAtIDIpLCAxMCk7CiAgICAgIHZhciBjaGVja3N1bSA9IHBhcnNlSW50KHN0cmlwcGVkLnN1YnN0cmluZyhzdHJpcHBlZC5sZW5ndGggLSAyLCBzdHJpcHBlZC5sZW5ndGgpLCAxMCk7CiAgICAgIHZhciByZW1haW5kZXIgPSBjaGVja2luZ1BhcnQgJSA5NyA9PT0gMCA/IDk3IDogY2hlY2tpbmdQYXJ0ICUgOTc7CiAgICAgIHJldHVybiByZW1haW5kZXIgPT09IGNoZWNrc3VtOwogICAgfTsKICAgIG1vZDk3MTAgPSBmdW5jdGlvbih2YWxpZGF0aW9uU3RyaW5nKSB7CiAgICAgIHdoaWxlICh2YWxpZGF0aW9uU3RyaW5nLmxlbmd0aCA+IDIpIHsKICAgICAgICB2YXIgcGFydCA9IHZhbGlkYXRpb25TdHJpbmcuc2xpY2UoMCwgNik7CiAgICAgICAgdmFyIHBhcnRJbnQgPSBwYXJzZUludChwYXJ0LCAxMCk7CiAgICAgICAgaWYgKGlzTmFOKHBhcnRJbnQpKSB7CiAgICAgICAgICByZXR1cm4gTmFOOwogICAgICAgIH0KICAgICAgICB2YWxpZGF0aW9uU3RyaW5nID0gcGFydEludCAlIDk3ICsgdmFsaWRhdGlvblN0cmluZy5zbGljZShwYXJ0Lmxlbmd0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbGlkYXRpb25TdHJpbmcsIDEwKSAlIDk3OwogICAgfTsKICAgIGNoZWNrTW9kOTcxMEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgICAgIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICAgICAgdmFyIHJlbWluZGVyID0gbW9kOTcxMChzdHJpcHBlZCk7CiAgICAgIHJldHVybiByZW1pbmRlciA9PT0gMTsKICAgIH07CiAgICBjaGVja1BvbGFuZEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgICAgIHZhciB3ZWlnaHRzID0gWzMsIDksIDcsIDEsIDMsIDksIDddOwogICAgICB2YXIgY29udHJvbERpZ2l0ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNyksIDEwKTsKICAgICAgdmFyIHRvQ2hlY2sgPSBiYmFuLnN1YnN0cmluZygwLCA3KTsKICAgICAgdmFyIHN1bSA9IDA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDc7IGluZGV4MisrKSB7CiAgICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNbaW5kZXgyXTsKICAgICAgfQogICAgICB2YXIgcmVtYWluZGVyID0gc3VtICUgMTA7CiAgICAgIHJldHVybiBjb250cm9sRGlnaXQgPT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpOwogICAgfTsKICAgIGNoZWNrU3BhaW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogICAgICB2YXIgd2VpZ2h0c0JhbmtCcmFuY2ggPSBbNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogICAgICB2YXIgd2VpZ2h0c0FjY291bnQgPSBbMSwgMiwgNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogICAgICB2YXIgY29udHJvbEJhbmtCcmFuY2ggPSBwYXJzZUludChiYmFuLmNoYXJBdCg4KSwgMTApOwogICAgICB2YXIgY29udHJvbEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogICAgICB2YXIgYmFua0JyYW5jaCA9IGJiYW4uc3Vic3RyaW5nKDAsIDgpOwogICAgICB2YXIgYWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDEwLCAyMCk7CiAgICAgIHZhciBzdW0gPSAwOwogICAgICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCA4OyBpbmRleDIrKykgewogICAgICAgIHN1bSArPSBwYXJzZUludChiYW5rQnJhbmNoLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzQmFua0JyYW5jaFtpbmRleDJdOwogICAgICB9CiAgICAgIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICAgICAgaWYgKGNvbnRyb2xCYW5rQnJhbmNoICE9PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgc3VtID0gMDsKICAgICAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgMTA7IGluZGV4MisrKSB7CiAgICAgICAgc3VtICs9IHBhcnNlSW50KGFjY291bnQuY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNBY2NvdW50W2luZGV4Ml07CiAgICAgIH0KICAgICAgcmVtYWluZGVyID0gc3VtICUgMTE7CiAgICAgIHJldHVybiBjb250cm9sQWNjb3VudCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwogICAgfTsKICAgIGNoZWNrTW9kMTExMCA9IGZ1bmN0aW9uKHRvQ2hlY2ssIGNvbnRyb2wpIHsKICAgICAgdmFyIG5yID0gMTA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgIG5yICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKTsKICAgICAgICBpZiAobnIgJSAxMCAhPT0gMCkgewogICAgICAgICAgbnIgPSBuciAlIDEwOwogICAgICAgIH0KICAgICAgICBuciA9IG5yICogMjsKICAgICAgICBuciA9IG5yICUgMTE7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnRyb2wgPT09ICgxMSAtIG5yID09PSAxMCA/IDAgOiAxMSAtIG5yKTsKICAgIH07CiAgICBjaGVja0Nyb2F0aWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICAgICAgdmFyIGNvbnRyb2xCYW5rQnJhbmNoID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNiksIDEwKTsKICAgICAgdmFyIGNvbnRyb2xBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTYpLCAxMCk7CiAgICAgIHZhciBiYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgNik7CiAgICAgIHZhciBhY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoNywgMTYpOwogICAgICByZXR1cm4gY2hlY2tNb2QxMTEwKGJhbmtCcmFuY2gsIGNvbnRyb2xCYW5rQnJhbmNoKSAmJiBjaGVja01vZDExMTAoYWNjb3VudCwgY29udHJvbEFjY291bnQpOwogICAgfTsKICAgIGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOID0gZnVuY3Rpb24oYmJhbikgewogICAgICB2YXIgd2VpZ2h0c1ByZWZpeCA9IFsxMCwgNSwgOCwgNCwgMiwgMV07CiAgICAgIHZhciB3ZWlnaHRzU3VmZml4ID0gWzYsIDMsIDcsIDksIDEwLCA1LCA4LCA0LCAyLCAxXTsKICAgICAgdmFyIGNvbnRyb2xQcmVmaXggPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogICAgICB2YXIgY29udHJvbFN1ZmZpeCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE5KSwgMTApOwogICAgICB2YXIgcHJlZml4NCA9IGJiYW4uc3Vic3RyaW5nKDQsIDkpOwogICAgICB2YXIgc3VmZml4ID0gYmJhbi5zdWJzdHJpbmcoMTAsIDE5KTsKICAgICAgdmFyIHN1bSA9IDA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHByZWZpeDQubGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgIHN1bSArPSBwYXJzZUludChwcmVmaXg0LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzUHJlZml4W2luZGV4Ml07CiAgICAgIH0KICAgICAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogICAgICBpZiAoY29udHJvbFByZWZpeCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN1bSA9IDA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHN1ZmZpeC5sZW5ndGg7IGluZGV4MisrKSB7CiAgICAgICAgc3VtICs9IHBhcnNlSW50KHN1ZmZpeC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1N1ZmZpeFtpbmRleDJdOwogICAgICB9CiAgICAgIHJlbWFpbmRlciA9IHN1bSAlIDExOwogICAgICByZXR1cm4gY29udHJvbFN1ZmZpeCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwogICAgfTsKICAgIGNoZWNrRXN0b25pYW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogICAgICB2YXIgd2VpZ2h0cyA9IFs3LCAxLCAzLCA3LCAxLCAzLCA3LCAxLCAzLCA3LCAxLCAzLCA3XTsKICAgICAgdmFyIGNvbnRyb2xEaWdpdCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE1KSwgMTApOwogICAgICB2YXIgdG9DaGVjayA9IGJiYW4uc3Vic3RyaW5nKDIsIDE1KTsKICAgICAgdmFyIHN1bSA9IDA7CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICAgIH0KICAgICAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDEwOwogICAgICByZXR1cm4gY29udHJvbERpZ2l0ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IDEwIC0gcmVtYWluZGVyKTsKICAgIH07CiAgICBjaGVja0ZyZW5jaEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgICAgIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBBcnJheS5mcm9tKHN0cmlwcGVkKTsKICAgICAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgc3RyaXBwZWQubGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgIHZhciBjMTEgPSBub3JtYWxpemVkW2luZGV4Ml0uY2hhckNvZGVBdCgwKTsKICAgICAgICBpZiAoYzExID49IDY1KSB7CiAgICAgICAgICBzd2l0Y2ggKGMxMSkgewogICAgICAgICAgICBjYXNlIDY1OgogICAgICAgICAgICBjYXNlIDc0OgogICAgICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICIxIjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA2NjoKICAgICAgICAgICAgY2FzZSA3NToKICAgICAgICAgICAgY2FzZSA4MzoKICAgICAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiMiI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNjc6CiAgICAgICAgICAgIGNhc2UgNzY6CiAgICAgICAgICAgIGNhc2UgODQ6CiAgICAgICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjMiOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDY4OgogICAgICAgICAgICBjYXNlIDc3OgogICAgICAgICAgICBjYXNlIDg1OgogICAgICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI0IjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA2OToKICAgICAgICAgICAgY2FzZSA3ODoKICAgICAgICAgICAgY2FzZSA4NjoKICAgICAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNSI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNzA6CiAgICAgICAgICAgIGNhc2UgNzk6CiAgICAgICAgICAgIGNhc2UgODc6CiAgICAgICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjYiOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDcxOgogICAgICAgICAgICBjYXNlIDgwOgogICAgICAgICAgICBjYXNlIDg4OgogICAgICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI3IjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA3MjoKICAgICAgICAgICAgY2FzZSA4MToKICAgICAgICAgICAgY2FzZSA4OToKICAgICAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiOCI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNzM6CiAgICAgICAgICAgIGNhc2UgODI6CiAgICAgICAgICAgIGNhc2UgOTA6CiAgICAgICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjkiOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgcmVtYWluZGVyID0gbW9kOTcxMChub3JtYWxpemVkLmpvaW4oIiIpKTsKICAgICAgcmV0dXJuIHJlbWFpbmRlciA9PT0gMDsKICAgIH07CiAgICBjaGVja0h1bmdhcmlhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgICAgIHZhciB3ZWlnaHRzID0gWzksIDcsIDMsIDEsIDksIDcsIDMsIDEsIDksIDcsIDMsIDEsIDksIDcsIDNdOwogICAgICB2YXIgY29udHJvbERpZ2l0QmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDcpLCAxMCk7CiAgICAgIHZhciB0b0NoZWNrQmFua0JyYW5jaCA9IGJiYW4uc3Vic3RyaW5nKDAsIDcpOwogICAgICB2YXIgc3VtID0gMDsKICAgICAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0JhbmtCcmFuY2gubGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrQmFua0JyYW5jaC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgICB9CiAgICAgIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMDsKICAgICAgaWYgKGNvbnRyb2xEaWdpdEJhbmtCcmFuY2ggIT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN1bSA9IDA7CiAgICAgIGlmIChiYmFuLmVuZHNXaXRoKCIwMDAwMDAwMCIpKSB7CiAgICAgICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMTUpOwogICAgICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTUpLCAxMCk7CiAgICAgICAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0FjY291bnQubGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICAgICAgfQogICAgICAgIHZhciByZW1haW5kZXJfMSA9IHN1bSAlIDEwOwogICAgICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzEgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMjMpOwogICAgICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMjMpLCAxMCk7CiAgICAgICAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0FjY291bnQubGVuZ3RoOyBpbmRleDIrKykgewogICAgICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICAgICAgfQogICAgICAgIHZhciByZW1haW5kZXJfMiA9IHN1bSAlIDEwOwogICAgICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMik7CiAgICAgIH0KICAgIH07CiAgICBzZXRDb3VudHJ5QkJBTlZhbGlkYXRpb24gPSBmdW5jdGlvbihjb3VudHJ5LCBmdW5jKSB7CiAgICAgIGlmICh0eXBlb2YgY291bnRyeVNwZWNzW2NvdW50cnldID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjb3VudHJ5U3BlY3NbY291bnRyeV0uYmJhbl92YWxpZGF0aW9uX2Z1bmMgPSBmdW5jOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICBjb3VudHJ5U3BlY3MgPSB7CiAgICAgIEFEOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezh9W0EtWjAtOV17MTJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogICAgICB9LAogICAgICBBRTogewogICAgICAgIGNoYXJzOiAyMywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVswLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTIzIgogICAgICB9LAogICAgICBBRjoge30sCiAgICAgIEFHOiB7fSwKICAgICAgQUk6IHt9LAogICAgICBBTDogewogICAgICAgIGNoYXJzOiAyOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTciLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogICAgICB9LAogICAgICBBTToge30sCiAgICAgIEFPOiB7CiAgICAgICAgY2hhcnM6IDI1LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiCiAgICAgIH0sCiAgICAgIEFROiB7fSwKICAgICAgQVI6IHt9LAogICAgICBBUzoge30sCiAgICAgIEFUOiB7IGNoYXJzOiAyMCwgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsIElCQU5SZWdpc3RyeTogdHJ1ZSwgU0VQQTogdHJ1ZSwgYmFua19pZGVudGlmaWVyOiAiMC00IiB9LAogICAgICBBVToge30sCiAgICAgIEFXOiB7fSwKICAgICAgQVg6IHsKICAgICAgICBjaGFyczogMTgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgICAgIH0sCiAgICAgIEFaOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjB9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjgiCiAgICAgIH0sCiAgICAgIEJBOiB7CiAgICAgICAgY2hhcnM6IDIwLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIKICAgICAgfSwKICAgICAgQkI6IHt9LAogICAgICBCRDoge30sCiAgICAgIEJFOiB7CiAgICAgICAgY2hhcnM6IDE2LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEyfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0JlbGdpYW5CQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMTYiCiAgICAgIH0sCiAgICAgIEJGOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICAgICAgfSwKICAgICAgQkc6IHsKICAgICAgICBjaGFyczogMjIsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs2fVtBLVowLTldezh9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgICAgIH0sCiAgICAgIEJIOiB7CiAgICAgICAgY2hhcnM6IDIyLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTR9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjgtMjIiCiAgICAgIH0sCiAgICAgIEJJOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC00IiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjciCiAgICAgIH0sCiAgICAgIEJKOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICAgICAgfSwKICAgICAgQkw6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIgogICAgICB9LAogICAgICBCTToge30sCiAgICAgIEJOOiB7fSwKICAgICAgQk86IHt9LAogICAgICBCUToge30sCiAgICAgIEJSOiB7CiAgICAgICAgY2hhcnM6IDI5LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiOC0xMiIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC03IiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgICAgIH0sCiAgICAgIEJTOiB7fSwKICAgICAgQlQ6IHt9LAogICAgICBCVjoge30sCiAgICAgIEJXOiB7fSwKICAgICAgQlk6IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgICAgIH0sCiAgICAgIEJaOiB7fSwKICAgICAgQ0E6IHt9LAogICAgICBDQzoge30sCiAgICAgIENEOiB7fSwKICAgICAgQ0Y6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICAgICAgfSwKICAgICAgQ0c6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICAgICAgfSwKICAgICAgQ0g6IHsKICAgICAgICBjaGFyczogMjEsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NX1bQS1aMC05XXsxMn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiCiAgICAgIH0sCiAgICAgIENJOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezF9WzAtOV17MjN9JCIKICAgICAgfSwKICAgICAgQ0s6IHt9LAogICAgICBDTDoge30sCiAgICAgIENNOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgICAgIH0sCiAgICAgIENOOiB7fSwKICAgICAgQ086IHt9LAogICAgICBDUjogewogICAgICAgIGNoYXJzOiAyMiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMiIKICAgICAgfSwKICAgICAgQ1U6IHt9LAogICAgICBDVjogeyBjaGFyczogMjUsIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiIH0sCiAgICAgIENXOiB7fSwKICAgICAgQ1g6IHt9LAogICAgICBDWTogewogICAgICAgIGNoYXJzOiAyOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTItMjgiCiAgICAgIH0sCiAgICAgIENaOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0N6ZWNoQW5kU2xvdmFrQkJBTiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgICAgIH0sCiAgICAgIERFOiB7CiAgICAgICAgY2hhcnM6IDIyLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTIyIgogICAgICB9LAogICAgICBESjogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI3IgogICAgICB9LAogICAgICBESzogewogICAgICAgIGNoYXJzOiAxOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogICAgICB9LAogICAgICBETToge30sCiAgICAgIERPOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjgtMjgiCiAgICAgIH0sCiAgICAgIERaOiB7CiAgICAgICAgY2hhcnM6IDI2LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiCiAgICAgIH0sCiAgICAgIEVDOiB7fSwKICAgICAgRUU6IHsKICAgICAgICBjaGFyczogMjAsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRXN0b25pYW5CQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjgtMjAiCiAgICAgIH0sCiAgICAgIEVHOiB7CiAgICAgICAgY2hhcnM6IDI5LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI1fSIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgICAgIH0sCiAgICAgIEVIOiB7fSwKICAgICAgRVI6IHt9LAogICAgICBFUzogewogICAgICAgIGNoYXJzOiAyNCwKICAgICAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tTcGFpbkJCQU4sCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjB9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICAgICAgfSwKICAgICAgRVQ6IHt9LAogICAgICBGSTogewogICAgICAgIGNoYXJzOiAxOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTAiCiAgICAgIH0sCiAgICAgIEZKOiB7fSwKICAgICAgRks6IHsKICAgICAgICBjaGFyczogMTgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsxMn0kIiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTE4IgogICAgICB9LAogICAgICBGTToge30sCiAgICAgIEZPOiB7CiAgICAgICAgY2hhcnM6IDE4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogICAgICB9LAogICAgICBGUjogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0ZyZW5jaEJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC00IiwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICAgICAgfSwKICAgICAgR0E6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICAgICAgfSwKICAgICAgR0I6IHsKICAgICAgICBjaGFyczogMjIsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICAgICAgfSwKICAgICAgR0Q6IHt9LAogICAgICBHRTogewogICAgICAgIGNoYXJzOiAyMiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyfVswLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTIyIgogICAgICB9LAogICAgICBHRjogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogICAgICB9LAogICAgICBHRzoge30sCiAgICAgIEdIOiB7fSwKICAgICAgR0k6IHsKICAgICAgICBjaGFyczogMjMsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bQS1aMC05XXsxNX0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIzIgogICAgICB9LAogICAgICBHTDogewogICAgICAgIGNoYXJzOiAxOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0xOCIKICAgICAgfSwKICAgICAgR006IHt9LAogICAgICBHTjoge30sCiAgICAgIEdQOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgICAgIH0sCiAgICAgIEdROiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgICAgIH0sCiAgICAgIEdSOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezd9W0EtWjAtOV17MTZ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy02IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTI3IgogICAgICB9LAogICAgICBHUzoge30sCiAgICAgIEdUOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezI0fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI4IgogICAgICB9LAogICAgICBHVToge30sCiAgICAgIEdXOiB7CiAgICAgICAgY2hhcnM6IDI1LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezJ9WzAtOV17MTl9JCIKICAgICAgfSwKICAgICAgR1k6IHt9LAogICAgICBISzoge30sCiAgICAgIEhNOiB7fSwKICAgICAgSE46IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIgogICAgICB9LAogICAgICBIUjogewogICAgICAgIGNoYXJzOiAyMSwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxN30kIiwKICAgICAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tDcm9hdGlhbkJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC02IgogICAgICB9LAogICAgICBIVDoge30sCiAgICAgIEhVOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0h1bmdhcmlhbkJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy02IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgICAgIH0sCiAgICAgIElEOiB7fSwKICAgICAgSUU6IHsKICAgICAgICBjaGFyczogMjIsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsxNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICAgICAgfSwKICAgICAgSUw6IHsKICAgICAgICBjaGFyczogMjMsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTl9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNSIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogICAgICB9LAogICAgICBJTToge30sCiAgICAgIElOOiB7fSwKICAgICAgSU86IHt9LAogICAgICBJUTogewogICAgICAgIGNoYXJzOiAyMywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezE1fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTYiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjExLTIzIgogICAgICB9LAogICAgICBJUjogewogICAgICAgIGNoYXJzOiAyNiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIgogICAgICB9LAogICAgICBJUzogewogICAgICAgIGNoYXJzOiAyNiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIyLTMiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIKICAgICAgfSwKICAgICAgSVQ6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTEwIiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIxLTUiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI3IgogICAgICB9LAogICAgICBKRToge30sCiAgICAgIEpNOiB7fSwKICAgICAgSk86IHsKICAgICAgICBjaGFyczogMzAsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE4fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjQtNyIKICAgICAgfSwKICAgICAgSlA6IHt9LAogICAgICBLRToge30sCiAgICAgIEtHOiB7fSwKICAgICAgS0g6IHt9LAogICAgICBLSToge30sCiAgICAgIEtNOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgICAgIH0sCiAgICAgIEtOOiB7fSwKICAgICAgS1A6IHt9LAogICAgICBLUjoge30sCiAgICAgIEtXOiB7CiAgICAgICAgY2hhcnM6IDMwLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjIwLTMwIgogICAgICB9LAogICAgICBLWToge30sCiAgICAgIEtaOiB7CiAgICAgICAgY2hhcnM6IDIwLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9W0EtWjAtOV17MTN9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMjAiCiAgICAgIH0sCiAgICAgIExBOiB7fSwKICAgICAgTEI6IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NH1bQS1aMC05XXsyMH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjgiCiAgICAgIH0sCiAgICAgIExDOiB7CiAgICAgICAgY2hhcnM6IDMyLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjR9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjgtMzIiCiAgICAgIH0sCiAgICAgIExJOiB7CiAgICAgICAgY2hhcnM6IDIxLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezV9W0EtWjAtOV17MTJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogICAgICB9LAogICAgICBMSzoge30sCiAgICAgIExSOiB7fSwKICAgICAgTFM6IHt9LAogICAgICBMVDogeyBjaGFyczogMjAsIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLCBJQkFOUmVnaXN0cnk6IHRydWUsIFNFUEE6IHRydWUsIGJhbmtfaWRlbnRpZmllcjogIjAtNCIgfSwKICAgICAgTFU6IHsKICAgICAgICBjaGFyczogMjAsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxM30kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgICAgIH0sCiAgICAgIExWOiB7CiAgICAgICAgY2hhcnM6IDIxLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yMSIKICAgICAgfSwKICAgICAgTFk6IHsKICAgICAgICBjaGFyczogMjUsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNSIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTAtMjUiCiAgICAgIH0sCiAgICAgIE1BOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiCiAgICAgIH0sCiAgICAgIE1DOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRnJlbmNoQkJBTiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIKICAgICAgfSwKICAgICAgTUQ6IHsKICAgICAgICBjaGFyczogMjQsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bQS1aMC05XXsxOH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNi0yNCIKICAgICAgfSwKICAgICAgTUU6IHsKICAgICAgICBjaGFyczogMjIsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjIiCiAgICAgIH0sCiAgICAgIE1GOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgICAgIH0sCiAgICAgIE1HOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgICAgIH0sCiAgICAgIE1IOiB7fSwKICAgICAgTUs6IHsKICAgICAgICBjaGFyczogMTksCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgICAgIH0sCiAgICAgIE1MOiB7CiAgICAgICAgY2hhcnM6IDI4LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICAgICAgfSwKICAgICAgTU06IHt9LAogICAgICBNTjogewogICAgICAgIGNoYXJzOiAyMCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICAgICAgfSwKICAgICAgTU86IHt9LAogICAgICBNUDoge30sCiAgICAgIE1ROiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgICAgIH0sCiAgICAgIE1SOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjciCiAgICAgIH0sCiAgICAgIE1TOiB7fSwKICAgICAgTVQ6IHsKICAgICAgICBjaGFyczogMzEsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs1fVtBLVowLTldezE4fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtOCIsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTUtMzEiCiAgICAgIH0sCiAgICAgIE1VOiB7CiAgICAgICAgY2hhcnM6IDMwLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MTl9W0EtWl17M30kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTUiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTMwIgogICAgICB9LAogICAgICBNVjoge30sCiAgICAgIE1XOiB7fSwKICAgICAgTVg6IHt9LAogICAgICBNWToge30sCiAgICAgIE1aOiB7CiAgICAgICAgY2hhcnM6IDI1LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiCiAgICAgIH0sCiAgICAgIE5BOiB7fSwKICAgICAgTkM6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUKICAgICAgfSwKICAgICAgTkU6IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogICAgICB9LAogICAgICBORjoge30sCiAgICAgIE5HOiB7fSwKICAgICAgTkk6IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICAgICAgfSwKICAgICAgTkw6IHsKICAgICAgICBjaGFyczogMTgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxMH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTE4IgogICAgICB9LAogICAgICBOTzogewogICAgICAgIGNoYXJzOiAxNSwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMX0kIiwKICAgICAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tOb3J3YXlCQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMTUiCiAgICAgIH0sCiAgICAgIE5QOiB7fSwKICAgICAgTlI6IHt9LAogICAgICBOVToge30sCiAgICAgIE5aOiB7fSwKICAgICAgT006IHsKICAgICAgICBjaGFyczogMjMsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxNn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogZmFsc2UsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogICAgICB9LAogICAgICBQQToge30sCiAgICAgIFBFOiB7fSwKICAgICAgUEY6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUKICAgICAgfSwKICAgICAgUEc6IHt9LAogICAgICBQSDoge30sCiAgICAgIFBLOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezR9WzAtOV17MTZ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICAgICAgfSwKICAgICAgUEw6IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrUG9sYW5kQkJBTiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZSwKICAgICAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIwLTciLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIyLTI4IgogICAgICB9LAogICAgICBQTTogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogICAgICB9LAogICAgICBQTjoge30sCiAgICAgIFBSOiB7fSwKICAgICAgUFM6IHsKICAgICAgICBjaGFyczogMjksCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsyMX0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgICAgIH0sCiAgICAgIFBUOiB7CiAgICAgICAgY2hhcnM6IDI1LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBTRVBBOiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICAgICAgfSwKICAgICAgUFc6IHt9LAogICAgICBQWToge30sCiAgICAgIFFBOiB7CiAgICAgICAgY2hhcnM6IDI5LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjF9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjgtMjkiCiAgICAgIH0sCiAgICAgIFJFOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgICAgIH0sCiAgICAgIFJPOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTZ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yNCIKICAgICAgfSwKICAgICAgUlM6IHsKICAgICAgICBjaGFyczogMjIsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIKICAgICAgfSwKICAgICAgUlU6IHsKICAgICAgICBjaGFyczogMzMsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9W0EtWjAtOV17MTV9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjktMTMiLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtOCIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTMzIgogICAgICB9LAogICAgICBSVzoge30sCiAgICAgIFNBOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezJ9W0EtWjAtOV17MTh9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI0IgogICAgICB9LAogICAgICBTQjoge30sCiAgICAgIFNDOiB7CiAgICAgICAgY2hhcnM6IDMxLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9W0EtWl17M30kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTUiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMi0yOCIKICAgICAgfSwKICAgICAgU0Q6IHsKICAgICAgICBjaGFyczogMTgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgICAgIH0sCiAgICAgIFNFOiB7IGNoYXJzOiAyNCwgYmJhbl9yZWdleHA6ICJeWzAtOV17MjB9JCIsIElCQU5SZWdpc3RyeTogdHJ1ZSwgU0VQQTogdHJ1ZSwgYmFua19pZGVudGlmaWVyOiAiMC0yIiB9LAogICAgICBTRzoge30sCiAgICAgIFNIOiB7fSwKICAgICAgU0k6IHsKICAgICAgICBjaGFyczogMTksCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTV9JCIsCiAgICAgICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgICAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI5LTE2IgogICAgICB9LAogICAgICBTSjoge30sCiAgICAgIFNLOiB7CiAgICAgICAgY2hhcnM6IDI0LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0N6ZWNoQW5kU2xvdmFrQkJBTiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgU0VQQTogdHJ1ZQogICAgICB9LAogICAgICBTTDoge30sCiAgICAgIFNNOiB7CiAgICAgICAgY2hhcnM6IDI3LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezF9WzAtOV17MTB9W0EtWjAtOV17MTJ9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi0xMCIKICAgICAgfSwKICAgICAgU046IHsKICAgICAgICBjaGFyczogMjgsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogICAgICB9LAogICAgICBTTzogewogICAgICAgIGNoYXJzOiAyMywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOX0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC02IiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTEtMjMiCiAgICAgIH0sCiAgICAgIFNSOiB7fSwKICAgICAgU1M6IHt9LAogICAgICBTVDogewogICAgICAgIGNoYXJzOiAyNSwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IgogICAgICB9LAogICAgICBTVjogewogICAgICAgIGNoYXJzOiAyOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezIwfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICAgICAgfSwKICAgICAgU1g6IHt9LAogICAgICBTWToge30sCiAgICAgIFNaOiB7fSwKICAgICAgVEM6IHt9LAogICAgICBURDogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogICAgICB9LAogICAgICBURjogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogICAgICB9LAogICAgICBURzogewogICAgICAgIGNoYXJzOiAyOCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXsyfVswLTldezIyfSQiCiAgICAgIH0sCiAgICAgIFRIOiB7fSwKICAgICAgVEo6IHt9LAogICAgICBUSzoge30sCiAgICAgIFRMOiB7CiAgICAgICAgY2hhcnM6IDIzLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMyIKICAgICAgfSwKICAgICAgVE06IHt9LAogICAgICBUTjogewogICAgICAgIGNoYXJzOiAyNCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMH0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yNCIKICAgICAgfSwKICAgICAgVE86IHt9LAogICAgICBUUjogewogICAgICAgIGNoYXJzOiAyNiwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs1fVtBLVowLTldezE3fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogICAgICB9LAogICAgICBUVDoge30sCiAgICAgIFRWOiB7fSwKICAgICAgVFc6IHt9LAogICAgICBUWjoge30sCiAgICAgIFVBOiB7CiAgICAgICAgY2hhcnM6IDI5LAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezZ9W0EtWjAtOV17MTl9JCIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNS0yOSIKICAgICAgfSwKICAgICAgVUc6IHt9LAogICAgICBVTToge30sCiAgICAgIFVTOiB7fSwKICAgICAgVVk6IHt9LAogICAgICBVWjoge30sCiAgICAgIFZBOiB7CiAgICAgICAgY2hhcnM6IDIyLAogICAgICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSIsCiAgICAgICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgICAgIFNFUEE6IHRydWUsCiAgICAgICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjctMjIiCiAgICAgIH0sCiAgICAgIFZDOiB7fSwKICAgICAgVkU6IHt9LAogICAgICBWRzogewogICAgICAgIGNoYXJzOiAyNCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE2fSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yNCIKICAgICAgfSwKICAgICAgVkk6IHt9LAogICAgICBWTjoge30sCiAgICAgIFZVOiB7fSwKICAgICAgV0Y6IHsKICAgICAgICBjaGFyczogMjcsCiAgICAgICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUKICAgICAgfSwKICAgICAgV1M6IHt9LAogICAgICBYSzogewogICAgICAgIGNoYXJzOiAyMCwKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgICAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICAgICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi0zIiwKICAgICAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMCIKICAgICAgfSwKICAgICAgWUU6IHt9LAogICAgICBZVDogewogICAgICAgIGNoYXJzOiAyNywKICAgICAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogICAgICB9LAogICAgICBaQToge30sCiAgICAgIFpNOiB7fSwKICAgICAgWlc6IHt9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5kZW1vLmpzCnZhciBkZW1vRnVuYzE5Owp2YXIgaW5pdF9kZWVzX2lucHV0X2liYW5fZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtaWJhbi9kZWVzLWlucHV0LWliYW4uZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMxOSA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnB1dC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5wYXltZW50LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIElCQU4gSW5wdXQifSAuc3VidGl0bGU9JHsiSW50ZXJuYXRpb25hbCBCYW5rIEFjY291bnQgTnVtYmVyIHdpdGggYXV0b21hdGljIGZvcm1hdHRpbmcifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuCiAgICAgICAgICAgIC5sYWJlbD0keyJCYW5rIEFjY291bnQgSUJBTiJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIEludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbgogICAgICAgICAgICAubGFiZWw9JHsiVmVyaWZpZWQgSUJBTiJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gaGFzIGJlZW4gdmVyaWZpZWQifQogICAgICAgICAgICAudmFsdWU9JHsiREU4OTM3MDQwMDQ0MDUzMjAxMzAwMCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQYXltZW50IEluZm9ybWF0aW9uIn0gLnN1YnRpdGxlPSR7IklCQU4gaW5wdXQgd2l0aCBob3Jpem9udGFsIGxheW91dCBmb3IgcGF5bWVudCBmb3JtcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InBheW1lbnQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkFjY291bnQgSG9sZGVyIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiSm9obiBEb2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICAubGFiZWw9JHsiSUJBTiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkdCODJXRVNUMTIzNDU2OTg3NjU0MzIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVmFsaWRhdGlvbiAmIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBmaWVsZHMgYW5kIGRpc2FibGVkIHN0YXRlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4KICAgICAgICAgICAgLmxhYmVsPSR7IlBheW1lbnQgQWNjb3VudCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZXF1aXJlZCBmb3IgcHJvY2Vzc2luZyBwYXltZW50cyJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbgogICAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBJQkFOIGNhbm5vdCBiZSBjaGFuZ2VkIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYW5rIFRyYW5zZmVyIEZvcm0ifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZm9ybSBleGFtcGxlIHdpdGggSUJBTiB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlJlY2lwaWVudCBOYW1lIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIC5sYWJlbD0keyJSZWNpcGllbnQgSUJBTiJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVHJhbnNmZXIgUmVmZXJlbmNlIn0gLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsIHJlZmVyZW5jZSBmb3IgdGhlIHRyYW5zZmVyIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJBbW91bnQifSAuaW5wdXRUeXBlPSR7Im51bWJlciJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vZGVlcy1pbnB1dC1pYmFuLmpzCnZhciBfX2VzRGVjb3JhdGUyNywgX19ydW5Jbml0aWFsaXplcnMyOCwgRGVlc0lucHV0SWJhbjsKdmFyIGluaXRfZGVlc19pbnB1dF9pYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2liYW50b29scygpOwogICAgaW5pdF9kZWVzX2lucHV0X2liYW5fZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMyOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0lucHV0SWJhbiA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWliYW4iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRJYmFuMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9lbnRlcmVkSWJhbklzVmFsaWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNyh0aGlzLCBudWxsLCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbnRlcmVkU3RyaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnRlcmVkU3RyaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVudGVyZWRTdHJpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbnRlcmVkU3RyaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbnRlcmVkU3RyaW5nX2luaXRpYWxpemVycywgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbnRlcmVkSWJhbklzVmFsaWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVudGVyZWRJYmFuSXNWYWxpZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRlcmVkSWJhbklzVmFsaWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbnRlcmVkSWJhbklzVmFsaWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudGVyZWRJYmFuSXNWYWxpZF9pbml0aWFsaXplcnMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTk7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI2VudGVyZWRTdHJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgZW50ZXJlZFN0cmluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkU3RyaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlbnRlcmVkU3RyaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZW50ZXJlZFN0cmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZW50ZXJlZEliYW5Jc1ZhbGlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOCh0aGlzLCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRJYmFuSXNWYWxpZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGVudGVyZWRJYmFuSXNWYWxpZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkSWJhbklzVmFsaWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVudGVyZWRJYmFuSXNWYWxpZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBJQkFOIGlucHV0IHNwZWNpZmljIHN0eWxlcyBjYW4gZ28gaGVyZSAqLwogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsIHx8ICJJQkFOIn0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgIC52YWx1ZT0ke3RoaXMudmFsdWV9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJERTg5IDM3MDQgMDA0NCAwNTMyIDAxMzAgMDAifQogICAgICAgICAgQGlucHV0PSR7KGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJYmFuKGV2ZW50QXJnKTsKICAgICAgICAgIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgY29uc3QgZGVlc0lucHV0VGV4dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICAgICAgICAgIGlmIChkZWVzSW5wdXRUZXh0ICYmIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdCkgewogICAgICAgICAgICBkZWVzSW5wdXRUZXh0LmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHZhbGlkYXRlSWJhbihldmVudEFyZykgewogICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZXZlbnRBcmcudGFyZ2V0OwogICAgICAgICAgbGV0IGVudGVyZWRTdHJpbmcgPSBpbnB1dEVsZW1lbnQ/LnZhbHVlOwogICAgICAgICAgZW50ZXJlZFN0cmluZyA9IGVudGVyZWRTdHJpbmcgfHwgIiI7CiAgICAgICAgICBpZiAodGhpcy5lbnRlcmVkU3RyaW5nICE9PSBlbnRlcmVkU3RyaW5nKSB7CiAgICAgICAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTihlbnRlcmVkU3RyaW5nKSB8fCAiIjsKICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9IHRoaXMuZW50ZXJlZFN0cmluZzsKICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5lbnRlcmVkU3RyaW5nOwogICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmVudGVyZWRJYmFuSXNWYWxpZCA9IGlzVmFsaWRJQkFOKHRoaXMuZW50ZXJlZFN0cmluZy5yZXBsYWNlKC8gL2csICIiKSk7CiAgICAgICAgICBjb25zdCBkZWVzSW5wdXRUZXh0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgZGVlc0lucHV0VGV4dC52YWxpZGF0aW9uVGV4dCA9IGBJQkFOIGlzIHZhbGlkOiAke3RoaXMuZW50ZXJlZEliYW5Jc1ZhbGlkfWA7CiAgICAgICAgfQogICAgICAgIGdldFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTih2YWx1ZTIpIHx8ICIiOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczI4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZS9kZWVzLWlucHV0LW11bHRpdG9nZ2xlLmRlbW8uanMKdmFyIGRlbW9GdW5jMjA7CnZhciBpbml0X2RlZXNfaW5wdXRfbXVsdGl0b2dnbGVfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZS5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzIwID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuc2V0dGluZ3MtZ3JpZCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TXVsdGktT3B0aW9uIFRvZ2dsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlNlbGVjdCBmcm9tIG11bHRpcGxlIG9wdGlvbnMgd2l0aCBhIHNtb290aCBzbGlkaW5nIGluZGljYXRvciBhbmltYXRpb24uPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJEaXNwbGF5IE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNob29zZSBob3cgY29udGVudCBpcyBkaXNwbGF5ZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkxpc3QgVmlldyIsICJHcmlkIFZpZXciLCAiQ29tcGFjdCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkdyaWQgVmlldyJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiVC1TaGlydCBTaXplIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJTZWxlY3QgeW91ciBwcmVmZXJyZWQgc2l6ZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siWFMiLCAiUyIsICJNIiwgIkwiLCAiWEwiLCAiWFhMIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiTSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Cb29sZWFuIFRvZ2dsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlNpbXBsZSBvbi9vZmYgc3dpdGNoZXMgd2l0aCBjdXN0b21pemFibGUgbGFiZWxzIGZvciBjbGVhcmVyIGNvbnRleHQuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb25zIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbmFibGUgb3IgZGlzYWJsZSBwdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidHJ1ZSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiVGhlbWUgTW9kZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU3dpdGNoIGJldHdlZW4gbGlnaHQgYW5kIGRhcmsgdGhlbWUifQogICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkRhcmsifQogICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiTGlnaHQifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkRhcmsifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U2V0dGluZ3MgR3JpZDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcnJhbmdlZCBpbiBhIHJlc3BvbnNpdmUgZ3JpZCBsYXlvdXQuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiQXV0by1TYXZlIn0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiRW5hYmxlZCJ9CiAgICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkRpc2FibGVkIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVuYWJsZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7Ikxhbmd1YWdlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCAiR2VybWFuIiwgIkZyZW5jaCIsICJTcGFuaXNoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmdsaXNoIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJRdWFsaXR5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkxvdyIsICJNZWRpdW0iLCAiSGlnaCIsICJVbHRyYSJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSGlnaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUHJpdmFjeSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IlByaXZhdGUifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJQdWJsaWMifQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJpdmF0ZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXRlcyAmIEZvcm0gSW50ZWdyYXRpb248L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5FeGFtcGxlcyBvZiBkaXNhYmxlZCBzdGF0ZXMgYW5kIGludGVncmF0aW9uIHdpdGhpbiBmb3Jtcy48L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IkFjY291bnQgVHlwZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBzZXR0aW5nIGlzIGxvY2tlZCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siRnJlZSIsICJQcm8iLCAiRW50ZXJwcmlzZSJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVudGVycHJpc2UifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIAogICAgICAgIDxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlByb2plY3QgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlZpc2liaWxpdHkifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQdWJsaWMifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMaWNlbnNlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk1JVCIsICJBcGFjaGUgMi4wIiwgIkdQTCB2MyIsICJQcm9wcmlldGFyeSJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiTUlUIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZS9kZWVzLWlucHV0LW11bHRpdG9nZ2xlLmpzCnZhciBfX2VzRGVjb3JhdGUyOCwgX19ydW5Jbml0aWFsaXplcnMyOSwgRGVlc0lucHV0TXVsdGl0b2dnbGU7CnZhciBpbml0X2RlZXNfaW5wdXRfbXVsdGl0b2dnbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2NvbG9ycygpOwogICAgaW5pdF9kZWVzX2lucHV0X211bHRpdG9nZ2xlX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTI4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbnB1dE11bHRpdG9nZ2xlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib29sZWFuVHJ1ZU5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib29sZWFuRmFsc2VOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3B0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib29sVmFsdWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRNdWx0aXRvZ2dsZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfYm9vbGVhblRydWVOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfYm9vbGVhbkZhbHNlTmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEFycmF5CiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF9ib29sVmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sZWFuVHJ1ZU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbGVhblRydWVOYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib29sZWFuVHJ1ZU5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbGVhblRydWVOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYm9vbGVhblRydWVOYW1lID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvb2xlYW5GYWxzZU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvb2xlYW5GYWxzZU5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbGVhbkZhbHNlTmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJvb2xlYW5GYWxzZU5hbWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jvb2xlYW5GYWxzZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfb3B0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcHRpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9wdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkT3B0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZE9wdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZE9wdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfYm9vbFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvb2xWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm9vbFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvb2xWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJvb2xWYWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm9vbFZhbHVlX2luaXRpYWxpemVycywgX2Jvb2xWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRNdWx0aXRvZ2dsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzIwOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJJbnB1dCJdOwogICAgICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgIm11bHRpIik7CiAgICAgICAgZ2V0IHR5cGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Jvb2xlYW5UcnVlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCAidHJ1ZSIpKTsKICAgICAgICBnZXQgYm9vbGVhblRydWVOYW1lKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Jvb2xlYW5UcnVlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYm9vbGVhblRydWVOYW1lKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYm9vbGVhblRydWVOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMsICJmYWxzZSIpKTsKICAgICAgICBnZXQgYm9vbGVhbkZhbHNlTmFtZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBib29sZWFuRmFsc2VOYW1lKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYm9vbGVhbkZhbHNlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX2Jvb2xlYW5GYWxzZU5hbWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9vcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBib29sVmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBib29sVmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNib29sVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb24gPT09IHRoaXMuYm9vbGVhblRydWVOYW1lOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWwpIHsKICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbCA/IHRoaXMuYm9vbGVhblRydWVOYW1lIDogdGhpcy5ib29sZWFuRmFsc2VOYW1lOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc2VsZWN0aW9ucyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgfQoKICAgICAgLm9wdGlvbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweCAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQoKICAgICAgLm9wdGlvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTgxODFiIiwgIiNlNGU0ZTciKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb24uc2VsZWN0ZWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICB9CgogICAgICAuaW5kaWNhdG9yIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgdG9wOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuc2VsZWN0aW9ucyB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5vcHRpb24gewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5pbmRpY2F0b3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDExMywgMTEzLCAxMjIsIDAuMTUpIiwgInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9ucyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRpY2F0b3IiPjwvZGl2PgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKChvcHRpb24yKSA9PiBiMmA8ZGl2IGNsYXNzPSJvcHRpb24gJHtvcHRpb24yID09PSB0aGlzLnNlbGVjdGVkT3B0aW9uID8gInNlbGVjdGVkIiA6ICIifSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24ob3B0aW9uMil9PgogICAgICAgICAgICAgICAgJHtvcHRpb24yfQogICAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFt0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIsIHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiXTsKICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gW3RoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiwgdGhpcy5ib29sZWFuRmFsc2VOYW1lIHx8ICJmYWxzZSJdOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGlmIChkb2N1bWVudC5mb250cykgewogICAgICAgICAgICBhd2FpdCBkb2N1bWVudC5mb250cy5yZWFkeTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVTZWxlY3Rpb24ob3B0aW9uQXJnKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkFyZzsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgdGhpcy5zZXRJbmRpY2F0b3IoKTsKICAgICAgICB9CiAgICAgICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgICAgIGFzeW5jIHNldEluZGljYXRvcigpIHsKICAgICAgICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuaW5kaWNhdG9yIik7CiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gLTEgfHwgIWluZGljYXRvcikgewogICAgICAgICAgICBpZiAoaW5kaWNhdG9yKSB7CiAgICAgICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgb3B0aW9uMiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAub3B0aW9uOm50aC1jaGlsZCgke3NlbGVjdGVkSW5kZXggKyAyfSlgKTsKICAgICAgICAgIGlmIChpbmRpY2F0b3IgJiYgb3B0aW9uMikgewogICAgICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LmFkZCgibm8tdHJhbnNpdGlvbiIpOwogICAgICAgICAgICAgIHRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLndpZHRoID0gYCR7b3B0aW9uMi5jbGllbnRXaWR0aH1weGA7CiAgICAgICAgICAgIGluZGljYXRvci5zdHlsZS5sZWZ0ID0gYCR7b3B0aW9uMi5vZmZzZXRMZWZ0fXB4YDsKICAgICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldFZhbHVlKCkgewogICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uID09PSB0aGlzLmJvb2xlYW5UcnVlTmFtZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uOwogICAgICAgIH0KICAgICAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsdWUyID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMiA/IHRoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiA6IHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMyOShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXBob25lL2RlZXMtaW5wdXQtcGhvbmUuZGVtby5qcwp2YXIgZGVtb0Z1bmMyMTsKdmFyIGluaXRfZGVlc19pbnB1dF9waG9uZV9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jMjEgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lCiAgICAgICAgICAgIC5sYWJlbD0keyJQaG9uZSBOdW1iZXIifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW50ZXIgeW91ciBwaG9uZSBudW1iZXIgd2l0aCBjb3VudHJ5IGNvZGUifQogICAgICAgICAgICAudmFsdWU9JHsiNTU1MTIzNDU2NyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lCiAgICAgICAgICAgIC5sYWJlbD0keyJDb250YWN0IFBob25lIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBhY2NvdW50IHZlcmlmaWNhdGlvbiJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyIrMSAoNTU1KSAwMDAtMDAwMCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiUGhvbmUgaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAgIC5sYWJlbD0keyJNb2JpbGUifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyI0MTU1NTUxMjM0In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiT2ZmaWNlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiKzEgKDgwMCkgNTU1LTAwMDAifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVybmF0aW9uYWwgTnVtYmVycyJ9IC5zdWJ0aXRsZT0keyJTdXBwb3J0cyBmb3JtYXR0aW5nIGZvciBudW1iZXJzIHdpdGggY291bnRyeSBjb2RlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lCiAgICAgICAgICAgIC5sYWJlbD0keyJJbnRlcm5hdGlvbmFsIENvbnRhY3QifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQXV0b21hdGljYWxseSBmb3JtYXRzIGludGVybmF0aW9uYWwgbnVtYmVycyJ9CiAgICAgICAgICAgIC52YWx1ZT0keyI0NDEyMzQ1Njc4OTAifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICAubGFiZWw9JHsiRW1lcmdlbmN5IENvbnRhY3QifQogICAgICAgICAgICAudmFsdWU9JHsiOTExIn0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0IGFzIHBhcnQgb2YgYSBjb250YWN0IGZvcm0ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRnVsbCBOYW1lIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAubGFiZWw9JHsiUGhvbmUgTnVtYmVyIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRW1haWwifSAuaW5wdXRUeXBlPSR7ImVtYWlsIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcGhvbmUvZGVlcy1pbnB1dC1waG9uZS5qcwp2YXIgX19lc0RlY29yYXRlMjksIF9fcnVuSW5pdGlhbGl6ZXJzMzAsIERlZXNJbnB1dFBob25lOwp2YXIgaW5pdF9kZWVzX2lucHV0X3Bob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVlc19pbnB1dF9waG9uZV9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUyOSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczMwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRQaG9uZSA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXBob25lIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogICAgICBsZXQgX2Zvcm1hdHRlZFBob25lX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0UGhvbmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZm9ybWF0dGVkUGhvbmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI5KHRoaXMsIG51bGwsIF9mb3JtYXR0ZWRQaG9uZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmb3JtYXR0ZWRQaG9uZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZm9ybWF0dGVkUGhvbmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZm9ybWF0dGVkUGhvbmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5mb3JtYXR0ZWRQaG9uZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzLCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMjkodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUyOSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTI5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjE7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI2Zvcm1hdHRlZFBob25lX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBmb3JtYXR0ZWRQaG9uZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZm9ybWF0dGVkUGhvbmUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIrMSAoNTU1KSAxMjMtNDU2NyIpKTsKICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIFBob25lIGlucHV0IHNwZWNpZmljIHN0eWxlcyBjYW4gZ28gaGVyZSAqLwogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgLnZhbHVlPSR7dGhpcy5mb3JtYXR0ZWRQaG9uZX0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7dGhpcy5wbGFjZWhvbGRlcn0KICAgICAgICAgIEBpbnB1dD0keyhldmVudCkgPT4gdGhpcy5oYW5kbGVQaG9uZUlucHV0KGV2ZW50KX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZU51bWJlcih0aGlzLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGlubmVySW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgICAgICBpZiAoaW5uZXJJbnB1dCAmJiBpbm5lcklucHV0LmNoYW5nZVN1YmplY3QpIHsKICAgICAgICAgICAgaW5uZXJJbnB1dC5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVQaG9uZUlucHV0KGV2ZW50KSB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5QaG9uZU51bWJlcihpbnB1dC52YWx1ZSk7CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKGNsZWFuZWRWYWx1ZSk7CiAgICAgICAgICBpZiAoaW5wdXQudmFsdWUgIT09IGZvcm1hdHRlZCkgewogICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7CiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gZm9ybWF0dGVkOwogICAgICAgICAgICBjb25zdCBuZXdDdXJzb3JQb3MgPSB0aGlzLmNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWRWYWx1ZSwgZm9ybWF0dGVkLCBjdXJzb3JQb3NpdGlvbik7CiAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5ld0N1cnNvclBvcywgbmV3Q3Vyc29yUG9zKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSBmb3JtYXR0ZWQ7CiAgICAgICAgICB0aGlzLnZhbHVlID0gY2xlYW5lZFZhbHVlOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfQogICAgICAgIGNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1xEL2csICIiKTsKICAgICAgICB9CiAgICAgICAgZm9ybWF0UGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgICAgICBjb25zdCBjbGVhbmVkID0gdGhpcy5jbGVhblBob25lTnVtYmVyKHZhbHVlMik7CiAgICAgICAgICBpZiAoY2xlYW5lZC5sZW5ndGggPT09IDApCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSAzKQogICAgICAgICAgICByZXR1cm4gY2xlYW5lZDsKICAgICAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSA2KQogICAgICAgICAgICByZXR1cm4gYCgke2NsZWFuZWQuc2xpY2UoMCwgMyl9KSAke2NsZWFuZWQuc2xpY2UoMyl9YDsKICAgICAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSAxMCkKICAgICAgICAgICAgcmV0dXJuIGAoJHtjbGVhbmVkLnNsaWNlKDAsIDMpfSkgJHtjbGVhbmVkLnNsaWNlKDMsIDYpfS0ke2NsZWFuZWQuc2xpY2UoNil9YDsKICAgICAgICAgIHJldHVybiBgKyR7Y2xlYW5lZC5zbGljZSgwLCBjbGVhbmVkLmxlbmd0aCAtIDEwKX0gKCR7Y2xlYW5lZC5zbGljZSgtMTAsIC03KX0pICR7Y2xlYW5lZC5zbGljZSgtNywgLTQpfS0ke2NsZWFuZWQuc2xpY2UoLTQpfWA7CiAgICAgICAgfQogICAgICAgIGNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWQsIGZvcm1hdHRlZCwgb2xkUG9zKSB7CiAgICAgICAgICBsZXQgZm9ybWF0dGluZ0NoYXJzID0gMDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IG9sZFBvcyAmJiBpMTEgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBpZiAoIS9cZC8udGVzdChmb3JtYXR0ZWRbaTExXSkpIHsKICAgICAgICAgICAgICBmb3JtYXR0aW5nQ2hhcnMrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIE1hdGgubWluKG9sZFBvcyArIGZvcm1hdHRpbmdDaGFycywgZm9ybWF0dGVkLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGdldFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKHZhbHVlMik7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuZGVtby5qcwp2YXIgZGVtb0Z1bmMyMjsKdmFyIGluaXRfZGVlc19pbnB1dF90b2dnbGVfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdG9nZ2xlL2RlZXMtaW5wdXQtdG9nZ2xlLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgZGVtb0Z1bmMyMiA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHRvZ2dsZUFsbE9uQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjdG9nZ2xlLWFsbC1vbiIpOwogICAgICBjb25zdCB0b2dnbGVBbGxPZmZCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0b2dnbGUtYWxsLW9mZiIpOwogICAgICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmZlYXR1cmUtdG9nZ2xlcyBkZWVzLWlucHV0LXRvZ2dsZSIpOwogICAgICBpZiAodG9nZ2xlQWxsT25CdG4gJiYgdG9nZ2xlQWxsT2ZmQnRuKSB7CiAgICAgICAgdG9nZ2xlQWxsT25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBmZWF0dXJlVG9nZ2xlcy5mb3JFYWNoKCh0b2dnbGUpID0+IHsKICAgICAgICAgICAgaWYgKCF0b2dnbGUuZGlzYWJsZWQgJiYgIXRvZ2dsZS5yZXF1aXJlZCkgewogICAgICAgICAgICAgIHRvZ2dsZS52YWx1ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHRvZ2dsZUFsbE9mZkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGZlYXR1cmVUb2dnbGVzLmZvckVhY2goKHRvZ2dsZSkgPT4gewogICAgICAgICAgICBpZiAoIXRvZ2dsZS5kaXNhYmxlZCAmJiAhdG9nZ2xlLnJlcXVpcmVkKSB7CiAgICAgICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICAudG9nZ2xlLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmhvcml6b250YWwtdG9nZ2xlcyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KCiAgICAgICAgLmludGVyYWN0aXZlLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLm91dHB1dC10ZXh0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTAgNDAlIDgwJSkiKX07CiAgICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgfQoKICAgICAgICAuc2V0dGluZ3Mtc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuZmVhdHVyZS10b2dnbGVzIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmRyYWctaGludCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUb2dnbGUifSAuc3VidGl0bGU9JHsiU2ltcGxlIG9uL29mZiB0b2dnbGUgc3dpdGNoIHdpdGggZHJhZyBzdXBwb3J0In0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRW5hYmxlIGZlYXR1cmUifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmtleT0keyJiYXNpYyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFjdGl2ZSB0b2dnbGUifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7ImFjdGl2ZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IldpdGggZGVzY3JpcHRpb24ifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgdG9nZ2xlIGhhcyBhZGRpdGlvbmFsIGhlbHBlciB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UifQogICAgICAgICAgICAua2V5PSR7IndpdGhEZXNjIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxwIGNsYXNzPSJkcmFnLWhpbnQiPlRpcDogWW91IGNhbiBkcmFnIHRoZSB0b2dnbGUga25vYiB0byBzd2l0Y2ggc3RhdGVzPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiVG9nZ2xlIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgdG9nZ2xlIHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWZhdWx0IChvZmYpIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZWQgKG9uKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIChvZmYpIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIChvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJSZXF1aXJlZCAoYWx3YXlzIG9uKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBjYW5ub3QgYmUgdHVybmVkIG9mZiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlRvZ2dsZXMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGludGVyZmFjZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLXRvZ2dsZXMiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaUZpIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkJsdWV0b290aCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiR1BTIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7Ik5GQyJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2V0dGluZ3MgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUb2dnbGVzIGluIGEgdHlwaWNhbCBzZXR0aW5ncyBjb250ZXh0In0+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgICA8aDQgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vdGlmaWNhdGlvbiBTZXR0aW5nczwvaDQ+CgogICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlB1c2ggbm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBwdXNoIG5vdGlmaWNhdGlvbnMgb24geW91ciBkZXZpY2UifQogICAgICAgICAgICAgIC5rZXk9JHsicHVzaCJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkdldCBpbXBvcnRhbnQgdXBkYXRlcyB2aWEgZW1haWwifQogICAgICAgICAgICAgIC5rZXk9JHsiZW1haWwifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJTb3VuZCJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBsYXkgYSBzb3VuZCBmb3Igbm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAgICAgLmtleT0keyJzb3VuZCJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlZpYnJhdGlvbiJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVmlicmF0ZSBmb3Igbm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAgICAgLmtleT0keyJ2aWJyYXRpb24ifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBUb2dnbGVzIn0gLnN1YnRpdGxlPSR7IkJhdGNoIG9wZXJhdGlvbnMgb24gbXVsdGlwbGUgdG9nZ2xlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9InRvZ2dsZS1hbGwtb24iIHR5cGU9InNlY29uZGFyeSI+RW5hYmxlIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9InRvZ2dsZS1hbGwtb2ZmIiB0eXBlPSJzZWNvbmRhcnkiPkRpc2FibGUgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS10b2dnbGVzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEYXJrIE1vZGUifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJkYXJrTW9kZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tc2F2ZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImF1dG9TYXZlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU3BlbGwgY2hlY2sifQogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5rZXk9JHsic3BlbGxDaGVjayJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkRldmVsb3BlciBtb2RlIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImRldk1vZGUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJCZXRhIGZlYXR1cmVzIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImJldGEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUb2dnbGUgdG8gc2VlIHZhbHVlIGNoYW5nZXMgaW4gcmVhbC10aW1lIn0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiQWlycGxhbmUgbW9kZSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICBAbmV3VmFsdWU9JHsoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FpcnBsYW5lLW91dHB1dCIpOwogICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEFpcnBsYW5lIG1vZGU6ICR7ZXZlbnQuZGV0YWlsID8gIk9OIiA6ICJPRkYifWA7CiAgICAgIH0KICAgIH19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkRvIG5vdCBkaXN0dXJiIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhldmVudCkgPT4gewogICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZG5kLW91dHB1dCIpOwogICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYERvIG5vdCBkaXN0dXJiOiAke2V2ZW50LmRldGFpbCA/ICJFTkFCTEVEIiA6ICJESVNBQkxFRCJ9YDsKICAgICAgfQogICAgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRvZ2dsZS9kZWVzLWlucHV0LXRvZ2dsZS5qcwp2YXIgX19lc0RlY29yYXRlMzAsIF9fcnVuSW5pdGlhbGl6ZXJzMzEsIERlZXNJbnB1dFRvZ2dsZTsKdmFyIGluaXRfZGVlc19pbnB1dF90b2dnbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRvZ2dsZS9kZWVzLWlucHV0LXRvZ2dsZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19pbnB1dF9iYXNlKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdG9nZ2xlX2RlbW8oKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTMwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbnB1dFRvZ2dsZSA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXRvZ2dsZSIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRUb2dnbGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMzAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEtub2IgcG9zaXRpb24gdHJhY2tpbmcgKDAgPSBvZmYsIG1heFRyYXZlbCA9IG9uKQogICAgICAgICAqLwogICAgICAgIGN1cnJlbnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMCk7CiAgICAgICAgLyoqCiAgICAgICAgICogRHJhZyBzdGF0ZQogICAgICAgICAqLwogICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICBoYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgICAgc3RhcnRYID0gMDsKICAgICAgICAvLyBUb2dnbGUgZGltZW5zaW9ucwogICAgICAgIHRyYWNrV2lkdGggPSAzNjsKICAgICAgICB0cmFja0hlaWdodCA9IDIwOwogICAgICAgIGtub2JTaXplID0gMTQ7CiAgICAgICAgcGFkZGluZyA9IDI7CiAgICAgICAgbWF4VHJhdmVsID0gMTY7CiAgICAgICAgLy8gdHJhY2tXaWR0aCAtIGtub2JTaXplIC0gKHBhZGRpbmcgKiAyKSAtIGJvcmRlcgogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9ICJyaWdodCI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAudG9nZ2xlLXRyYWNrIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbdmFsdWVdKSAudG9nZ2xlLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS10cmFjazpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1rbm9iLmRyYWdnaW5nIHsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWx1ZV0pIC50b2dnbGUta25vYiB7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS10cmFjay5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogUmVxdWlyZWQgc3RhdGUgKGxvY2tlZCBvbikgKi8KICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA0OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDYxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNDkuOCUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtyZXF1aXJlZF1bdmFsdWVdKSAudG9nZ2xlLWtub2IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC8qIExhYmVsICovCiAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lci5kaXNhYmxlZDpob3ZlciAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLyogRGVzY3JpcHRpb24gKi8KICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIEBjbGljaz0iJHt0aGlzLmhhbmRsZUNsaWNrfSI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtdHJhY2sgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZUtleWRvd259IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1rbm9iIgogICAgICAgICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucGFkZGluZyArIHRoaXMuY3VycmVudFh9cHg7IgogICAgICAgICAgICAgIEBwb2ludGVyZG93bj0iJHt0aGlzLm9uUG9pbnRlckRvd259IgogICAgICAgICAgICAgIEBwb2ludGVybW92ZT0iJHt0aGlzLm9uUG9pbnRlck1vdmV9IgogICAgICAgICAgICAgIEBwb2ludGVydXA9IiR7dGhpcy5vblBvaW50ZXJVcH0iCiAgICAgICAgICAgICAgQHBvaW50ZXJjYW5jZWw9IiR7dGhpcy5vblBvaW50ZXJVcH0iCiAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwtY29udGFpbmVyIj4KICAgICAgICAgICAgJHt0aGlzLmxhYmVsID8gYjJgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy52YWx1ZSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsaWNrIGhhbmRsZXIgLSB0b2dnbGVzIHRoZSB2YWx1ZQogICAgICAgICAqLwogICAgICAgIGFzeW5jIGhhbmRsZUNsaWNrKGV2ZW50KSB7CiAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMubWF4VHJhdmVsOwogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIxMSkgPT4gc2V0VGltZW91dChyMTEsIDEwKSk7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLm1heFRyYXZlbCAtIDM7CiAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigxNTApOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy5tYXhUcmF2ZWw7CiAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy52YWx1ZSA/IHRoaXMubWF4VHJhdmVsIDogMDsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibmV3VmFsdWUiLCB7CiAgICAgICAgICAgIGRldGFpbDogdGhpcy52YWx1ZSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5oYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUG9pbnRlciBkb3duIC0gc3RhcnQgZHJhZ2dpbmcKICAgICAgICAgKi8KICAgICAgICBvblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCB8fCB0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgICAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmN1cnJlbnRYOwogICAgICAgICAgZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFBvaW50ZXIgbW92ZSAtIHRyYWNrIGRyYWcgcG9zaXRpb24KICAgICAgICAgKi8KICAgICAgICBvblBvaW50ZXJNb3ZlKGV2ZW50KSB7CiAgICAgICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgbmV3WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDsKICAgICAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IHRydWU7CiAgICAgICAgICBjb25zdCB0b2dnbGVLbm9iID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudG9nZ2xlLWtub2IiKTsKICAgICAgICAgIGlmICh0b2dnbGVLbm9iKSB7CiAgICAgICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY3VycmVudFggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuZXdYLCB0aGlzLm1heFRyYXZlbCkpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFBvaW50ZXIgdXAgLSBjb21wbGV0ZSBkcmFnIGFuZCBzbmFwIHRvIG5lYXJlc3Qgc2lkZQogICAgICAgICAqLwogICAgICAgIG9uUG9pbnRlclVwKGV2ZW50KSB7CiAgICAgICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgZXZlbnQudGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgICAgICBpZiAoIXRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0b2dnbGVLbm9iID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudG9nZ2xlLWtub2IiKTsKICAgICAgICAgIGlmICh0b2dnbGVLbm9iKSB7CiAgICAgICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG1pZHBvaW50ID0gdGhpcy5tYXhUcmF2ZWwgLyAyOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VycmVudFggPiBtaWRwb2ludDsKICAgICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLmhhc0RyYWdnZWQgPSBmYWxzZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTeW5jIGtub2IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyBjaGFuZ2VkIGV4dGVybmFsbHkKICAgICAgICAgKi8KICAgICAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInZhbHVlIikgJiYgIXRoaXMuaXNEcmFnZ2luZyAmJiAhdGhpcy5oYXNEcmFnZ2VkKSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogS2V5Ym9hcmQgc3VwcG9ydAogICAgICAgICAqLwogICAgICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHsKICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICIgIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIERlZXNJbnB1dEJhc2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWVBcmcpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZUFyZzsKICAgICAgICB9CiAgICAgICAgZm9jdXMoKSB7CiAgICAgICAgICBjb25zdCB0cmFjazIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTsKICAgICAgICAgIGlmICh0cmFjazIpIHsKICAgICAgICAgICAgdHJhY2syLmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczMxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuZGVtby5qcwp2YXIgZGVtb0Z1bmMyMzsKdmFyIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10eXBlbGlzdC9kZWVzLWlucHV0LXR5cGVsaXN0LmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jMjMgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQoKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbmZvLWJveCB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlM2YyZmQ7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzE5NzZkMjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFlM2E1ZjsKICAgICAgICAgICAgY29sb3I6ICM5MGNhZjk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVHlwZSBMaXN0In0gLnN1YnRpdGxlPSR7IkFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gYSBsaXN0In0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIHRhZ3MgYnkgdHlwaW5nIGFuZCBwcmVzc2luZyBFbnRlciJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siamF2YXNjcmlwdCIsICJ0eXBlc2NyaXB0IiwgIndlYi1jb21wb25lbnRzIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgoKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiB0ZWFtIG1lbWJlcnMifQogICAgICAgICAgICAudmFsdWU9JHtbImFsaWNlQGV4YW1wbGUuY29tIiwgImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNraWxscyAmIEtleXdvcmRzIn0gLnN1YnRpdGxlPSR7Ik1hbmFnZSBsaXN0cyBvZiBza2lsbHMgYW5kIGtleXdvcmRzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IllvdXIgU2tpbGxzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJIVE1MIiwgIkNTUyIsICJKYXZhU2NyaXB0IiwgIk5vZGUuanMiLCAiUmVhY3QiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CgogICAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiQ2F0ZWdvcmllcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbIlRlY2hub2xvZ3kiLCAiRGVzaWduIiwgIkJ1c2luZXNzIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiS2V5d29yZHMifQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7WyJpbm5vdmF0aW9uIiwgInN0YXJ0dXAiLCAiZ3Jvd3RoIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGlucHV0IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IERlcGVuZGVuY2llcyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJMaXN0IGFsbCByZXF1aXJlZCBucG0gcGFja2FnZXMifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAudmFsdWU9JHtbIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCIsICJAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzIl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgoKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJTeXN0ZW0gVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSB0YWdzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0ifQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgICAudmFsdWU9JHtbInN5c3RlbSIsICJwcm90ZWN0ZWQiLCAicmVhZG9ubHkiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1bW1hcnkifSAKICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJ0aWNsZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgcmVsZXZhbnQgdGFncyBmb3IgYmV0dGVyIGRpc2NvdmVyYWJpbGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1sidHV0b3JpYWwiLCAid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdHlwZWxpc3QvZGVlcy1pbnB1dC10eXBlbGlzdC5qcwp2YXIgX19lc0RlY29yYXRlMzEsIF9fcnVuSW5pdGlhbGl6ZXJzMzIsIERlZXNJbnB1dFR5cGVsaXN0Owp2YXIgaW5pdF9kZWVzX2lucHV0X3R5cGVsaXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10eXBlbGlzdC9kZWVzLWlucHV0LXR5cGVsaXN0LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdF9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUzMSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczMyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRUeXBlbGlzdCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXR5cGVsaXN0IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogICAgICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbnB1dFZhbHVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW5wdXRUeXBlbGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX2lucHV0VmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMxKHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzEodGhpcywgbnVsbCwgX2lucHV0VmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5wdXRWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5wdXRWYWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbnB1dFZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMxKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0Il07CiAgICAgICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIFtdKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzIodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGlucHV0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5wdXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwgIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjBweCAxcHggNHB4IHJnYmEoMCwwLDAsMC4zKSIsICJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCAiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY5ZjIiLCAiIzAwODRmZiIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgICAgfQoKICAgICAgLnRhZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubm90YWdzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZjVlOSIsICIjMmQzYTJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzJlN2QzMiIsICIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjM2Q0ZjNkIil9OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYzYyODI4IiwgIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhZ3MiIEBjbGljaz0keygpID0+IHsKICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKTsKICAgICAgICAgIH19PgogICAgICAgICAgICAke3RoaXMudmFsdWUubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0ibm90YWdzIj5ObyB0YWdzIHlldDwvZGl2PmAgOiB0aGlzLnZhbHVlLm1hcCgodGFnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIj4KICAgICAgICAgICAgICAgICAgICAgICR7dGFnfQogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJlbW92ZSIgQGNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFnKHRhZyk7CiAgICAgICAgICB9fT7Dlzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlR5cGUsIHByZXNzIEVudGVyIHRvIGFkZCBpdC4uLiIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICB9fQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHsKICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5pbnB1dFZhbHVlLnRyaW0oKSkgewogICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIHRoaXMuYWRkVGFnKHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhZGRUYWcodGFnKSB7CiAgICAgICAgICBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXModGFnKSkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRhZ107CiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVtb3ZlVGFnKHRhZykgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKCh0OSkgPT4gdDkgIT09IHRhZyk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9kZWVzLXRhYmxlLmRlbW8uanMKdmFyIGRlbW9GdW5jMjQ7CnZhciBpbml0X2RlZXNfdGFibGVfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvZGVlcy10YWJsZS5kZW1vLmpzIigpIHsKICAgIGluaXRfZGVlc190YWJsZSgpOwogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jMjQgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0OHB4OwogICAgICB9CiAgICAgIC5kZW1vLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQogICAgICAuZGVtby1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIC50aGVtZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDE2cHg7CiAgICAgICAgcmlnaHQ6IDE2cHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyayIpOwogICAgfX0+VG9nZ2xlIFRoZW1lPC9kZWVzLWJ1dHRvbj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgVGFibGUgd2l0aCBBY3Rpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QSBzdGFuZGFyZCB0YWJsZSB3aXRoIHJvdyBhY3Rpb25zLCBlZGl0YWJsZSBmaWVsZHMsIGFuZCBjb250ZXh0IG1lbnUgc3VwcG9ydC4gRG91YmxlLWNsaWNrIG9uIGRlc2NyaXB0aW9ucyB0byBlZGl0LiBHcmlkIGxpbmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iQ3VycmVudCBBY2NvdW50IFN0YXRlbWVudCIKICAgICAgICAgIGhlYWRpbmcyPSJCdW5xIC0gUGF5bWVudCBBY2NvdW50IDIgLSBBcHJpbCAyMDIxIgogICAgICAgICAgLmVkaXRhYmxlRmllbGRzPSIke1siZGVzY3JpcHRpb24iXX0iCiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgewogICAgICAgIGRhdGU6ICIyMDIxLTA0LTAxIiwKICAgICAgICBhbW91bnQ6ICIyNDY0LjY1IFx1MjBBQyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJQcmludGluZyBQYXBlciAoT2ZmaWNlIFN1cHBsaWVzKSAtIFNUQVBMRVMgQlJFTUVOIgogICAgICB9LAogICAgICB7CiAgICAgICAgZGF0ZTogIjIwMjEtMDQtMDIiLAogICAgICAgIGFtb3VudDogIjE2NS42NSBcdTIwQUMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiTG9naXRlY2ggTW91c2UgKEhhcmR3YXJlKSAtIGxvZ2kuY29tIE9ubGluZVNob3AiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkYXRlOiAiMjAyMS0wNC0wMyIsCiAgICAgICAgYW1vdW50OiAiMjk5OSwwMCBcdTIwQUMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiTWFjYm9vayBQcm8gMTZpbmNoIChIYXJkd2FyZSkgLSBBcHBsZS5kZSBPbmxpbmVTaG9wIgogICAgICB9LAogICAgICB7CiAgICAgICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgICAgIGFtb3VudDogIjI0NjQuNjUgXHUyMEFDIiwKICAgICAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogICAgICB9LAogICAgICB7CiAgICAgICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgICAgIGFtb3VudDogIjI0NjQuNjUgXHUyMEFDIiwKICAgICAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogICAgICB9CiAgICBdfQogICAgICAgICAgZGF0YU5hbWU9InRyYW5zYWN0aW9ucyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAidXBsb2FkIiwKICAgICAgICBpY29uTmFtZTogImJlbGwiLAogICAgICAgIHVzZVRhYmxlQmVoYXZpb3VyOiAidXBsb2FkIiwKICAgICAgICB0eXBlOiBbImluUm93Il0sCiAgICAgICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgICAgIGFsZXJ0KG9wdGlvbnNBcmcuaXRlbS5hbW91bnQpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJ2aXNpYmlsaXR5IiwKICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgICAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChpdGVtQXJnKSA9PiB7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogImNyZWF0ZSBuZXciLAogICAgICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgICAgICB0eXBlOiBbImhlYWRlciJdLAogICAgICAgIHVzZVRhYmxlQmVoYXZpb3VyOiAicHJldmlldyIsCiAgICAgICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAidG8gZ2FsbGVyeSIsCiAgICAgICAgaWNvbk5hbWU6ICJtZXNzYWdlIiwKICAgICAgICB0eXBlOiBbImZvb3RlciJdLAogICAgICAgIHVzZVRhYmxlQmVoYXZpb3VyOiAicHJldmlldyIsCiAgICAgICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiY29weSIsCiAgICAgICAgaWNvbk5hbWU6ICJjb3B5U29saWQiLAogICAgICAgIHR5cGU6IFsiY29udGV4dG1lbnUiLCAiaW5Sb3ciXSwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJlZGl0IChmcm9tIGRlbW8pIiwKICAgICAgICBpY29uTmFtZTogInBlblRvU3F1YXJlIiwKICAgICAgICB0eXBlOiBbImNvbnRleHRtZW51Il0sCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAicGFzdGUiLAogICAgICAgIGljb25OYW1lOiAicGFzdGVTb2xpZCIsCiAgICAgICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogInByZXZpZXciLAogICAgICAgIHR5cGU6IFsiZG91YmxlQ2xpY2siLCAiY29udGV4dG1lbnUiXSwKICAgICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgICAgIGFsZXJ0KGl0ZW1BcmcuaXRlbS5hbW91bnQpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICBdfSIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIFZlcnRpY2FsIExpbmVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW5oYW5jZWQgY29sdW1uIHNlcGFyYXRpb24gZm9yIGJldHRlciBkYXRhIHRyYWNraW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlByb2R1Y3QgSW52ZW50b3J5IgogICAgICAgICAgaGVhZGluZzI9IkN1cnJlbnQgc3RvY2sgbGV2ZWxzIGFjcm9zcyB3YXJlaG91c2VzIgogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7dHJ1ZX0KICAgICAgICAgIC5kYXRhPSR7WwogICAgICB7CiAgICAgICAgcHJvZHVjdDogJ01hY0Jvb2sgUHJvIDE2IicsCiAgICAgICAgd2FyZWhvdXNlX2E6ICI0NSIsCiAgICAgICAgd2FyZWhvdXNlX2I6ICIzMiIsCiAgICAgICAgd2FyZWhvdXNlX2M6ICIyOCIsCiAgICAgICAgdG90YWw6ICIxMDUiLAogICAgICAgIHN0YXR1czogIlx1MjcxMyBJbiBTdG9jayIKICAgICAgfSwKICAgICAgewogICAgICAgIHByb2R1Y3Q6ICJpUGhvbmUgMTUgUHJvIiwKICAgICAgICB3YXJlaG91c2VfYTogIjEyMCIsCiAgICAgICAgd2FyZWhvdXNlX2I6ICI4OSIsCiAgICAgICAgd2FyZWhvdXNlX2M6ICIxNTYiLAogICAgICAgIHRvdGFsOiAiMzY1IiwKICAgICAgICBzdGF0dXM6ICJcdTI3MTMgSW4gU3RvY2siCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBwcm9kdWN0OiAiQWlyUG9kcyBQcm8iLAogICAgICAgIHdhcmVob3VzZV9hOiAiMCIsCiAgICAgICAgd2FyZWhvdXNlX2I6ICIxMiIsCiAgICAgICAgd2FyZWhvdXNlX2M6ICI1IiwKICAgICAgICB0b3RhbDogIjE3IiwKICAgICAgICBzdGF0dXM6ICJcdTI2QTAgTG93IFN0b2NrIgogICAgICB9LAogICAgICB7CiAgICAgICAgcHJvZHVjdDogImlQYWQgQWlyIiwKICAgICAgICB3YXJlaG91c2VfYTogIjIzIiwKICAgICAgICB3YXJlaG91c2VfYjogIjQ1IiwKICAgICAgICB3YXJlaG91c2VfYzogIjY3IiwKICAgICAgICB0b3RhbDogIjEzNSIsCiAgICAgICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogICAgICB9CiAgICBdfQogICAgICAgICAgZGF0YU5hbWU9InByb2R1Y3RzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggRnVsbCBHcmlkPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+Q29tcGxldGUgZ3JpZCBsaW5lcyBmb3IgbWF4aW11bSByZWFkYWJpbGl0eSBhbmQgc3RydWN0dXJlLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNlcnZlciBNb25pdG9yaW5nIERhc2hib2FyZCIKICAgICAgICAgIGhlYWRpbmcyPSJSZWFsLXRpbWUgbWV0cmljcyBhY3Jvc3MgcmVnaW9ucyIKICAgICAgICAgIC5zaG93R3JpZD0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgewogICAgICAgIHNlcnZlcjogIkFQSS0xIiwKICAgICAgICByZWdpb246ICJVUy1FYXN0IiwKICAgICAgICBjcHU6ICI0NSUiLAogICAgICAgIG1lbW9yeTogIjYyJSIsCiAgICAgICAgZGlzazogIjc4JSIsCiAgICAgICAgbGF0ZW5jeTogIjEybXMiLAogICAgICAgIHVwdGltZTogIjk5LjklIiwKICAgICAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICAgICAgfSwKICAgICAgewogICAgICAgIHNlcnZlcjogIkFQSS0yIiwKICAgICAgICByZWdpb246ICJFVS1XZXN0IiwKICAgICAgICBjcHU6ICIzOCUiLAogICAgICAgIG1lbW9yeTogIjU1JSIsCiAgICAgICAgZGlzazogIjQ1JSIsCiAgICAgICAgbGF0ZW5jeTogIjI1bXMiLAogICAgICAgIHVwdGltZTogIjk5LjglIiwKICAgICAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICAgICAgfSwKICAgICAgewogICAgICAgIHNlcnZlcjogIkRCLU1hc3RlciIsCiAgICAgICAgcmVnaW9uOiAiVVMtRWFzdCIsCiAgICAgICAgY3B1OiAiNzIlIiwKICAgICAgICBtZW1vcnk6ICI4MSUiLAogICAgICAgIGRpc2s6ICI5MiUiLAogICAgICAgIGxhdGVuY3k6ICI4bXMiLAogICAgICAgIHVwdGltZTogIjEwMCUiLAogICAgICAgIHN0YXR1czogIlx1ezFGN0UxfSBXYXJuaW5nIgogICAgICB9LAogICAgICB7CiAgICAgICAgc2VydmVyOiAiREItUmVwbGljYSIsCiAgICAgICAgcmVnaW9uOiAiRVUtV2VzdCIsCiAgICAgICAgY3B1OiAiMjMlIiwKICAgICAgICBtZW1vcnk6ICIzNCUiLAogICAgICAgIGRpc2s6ICI0NSUiLAogICAgICAgIGxhdGVuY3k6ICIxNW1zIiwKICAgICAgICB1cHRpbWU6ICI5OS43JSIsCiAgICAgICAgc3RhdHVzOiAiXHV7MUY3RTJ9IEhlYWx0aHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBzZXJ2ZXI6ICJDYWNoZS0xIiwKICAgICAgICByZWdpb246ICJBUC1Tb3V0aCIsCiAgICAgICAgY3B1OiAiODklIiwKICAgICAgICBtZW1vcnk6ICI5MiUiLAogICAgICAgIGRpc2s6ICIxMiUiLAogICAgICAgIGxhdGVuY3k6ICIxMjBtcyIsCiAgICAgICAgdXB0aW1lOiAiOTguNSUiLAogICAgICAgIHN0YXR1czogIlx1ezFGNTM0fSBDcml0aWNhbCIKICAgICAgfQogICAgXX0KICAgICAgICAgIGRhdGFOYW1lPSJzZXJ2ZXJzIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1sKICAgICAgewogICAgICAgIG5hbWU6ICJTU0ggQ29ubmVjdCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dGVybWluYWwiLAogICAgICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIkNvbm5lY3RpbmcgdG86Iiwgb3B0aW9uc0FyZy5pdGVtLnNlcnZlcik7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIlZpZXcgTG9ncyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZS10ZXh0IiwKICAgICAgICB0eXBlOiBbImluUm93IiwgImNvbnRleHRtZW51Il0sCiAgICAgICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJWaWV3aW5nIGxvZ3MgZm9yOiIsIG9wdGlvbnNBcmcuaXRlbS5zZXJ2ZXIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJSZXN0YXJ0IFNlcnZlciIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaC1jdyIsCiAgICAgICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChvcHRpb25zQXJnKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLCBvcHRpb25zQXJnLml0ZW0uc2VydmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIF19IgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggSG9yaXpvbnRhbCBMaW5lcyBPbmx5PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW1waGFzaXMgb24gcm93IHNlcGFyYXRpb24gd2l0aG91dCBjb2x1bW4gZGl2aWRlcnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUGVyZm9ybWFuY2UiCiAgICAgICAgICBoZWFkaW5nMj0iVG9wIHBlcmZvcm1lcnMgdGhpcyBxdWFydGVyIgogICAgICAgICAgLnNob3dIb3Jpem9udGFsTGluZXM9JHt0cnVlfQogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgewogICAgICAgIHNhbGVzcGVyc29uOiAiRW1pbHkgSm9obnNvbiIsCiAgICAgICAgcmVnaW9uOiAiTm9ydGggQW1lcmljYSIsCiAgICAgICAgZGVhbHNfY2xvc2VkOiAiNDIiLAogICAgICAgIHJldmVudWU6ICIkMS4yTSIsCiAgICAgICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMjglIiwKICAgICAgICByYXRpbmc6ICJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBzYWxlc3BlcnNvbjogIk1pY2hhZWwgQ2hlbiIsCiAgICAgICAgcmVnaW9uOiAiQXNpYSBQYWNpZmljIiwKICAgICAgICBkZWFsc19jbG9zZWQ6ICIzOCIsCiAgICAgICAgcmV2ZW51ZTogIiQ5ODBLIiwKICAgICAgICBxdW90YV9hY2hpZXZlbWVudDogIjExNSUiLAogICAgICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICAgICAgfSwKICAgICAgewogICAgICAgIHNhbGVzcGVyc29uOiAiU2FyYWggV2lsbGlhbXMiLAogICAgICAgIHJlZ2lvbjogIkV1cm9wZSIsCiAgICAgICAgZGVhbHNfY2xvc2VkOiAiMzUiLAogICAgICAgIHJldmVudWU6ICIkODc1SyIsCiAgICAgICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMDglIiwKICAgICAgICByYXRpbmc6ICJcdTJCNTBcdTJCNTBcdTJCNTBcdTJCNTAiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBzYWxlc3BlcnNvbjogIkRhdmlkIEdhcmNpYSIsCiAgICAgICAgcmVnaW9uOiAiTGF0aW4gQW1lcmljYSIsCiAgICAgICAgZGVhbHNfY2xvc2VkOiAiMzEiLAogICAgICAgIHJldmVudWU6ICIkNzUwSyIsCiAgICAgICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICI5NSUiLAogICAgICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICAgICAgfQogICAgXX0KICAgICAgICAgIGRhdGFOYW1lPSJzYWxlcyByZXBzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNpbXBsZSBUYWJsZSAoTm8gR3JpZCk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5DbGVhbiwgbWluaW1hbCBkZXNpZ24gd2l0aG91dCBncmlkIGxpbmVzLiBTZXQgc2hvd0dyaWQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBncmlkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlRlYW0gTWVtYmVycyIKICAgICAgICAgIGhlYWRpbmcyPSJFbmdpbmVlcmluZyBEZXBhcnRtZW50IgogICAgICAgICAgLnNob3dHcmlkPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgewogICAgICAgIG5hbWU6ICJBbGljZSBKb2huc29uIiwKICAgICAgICByb2xlOiAiTGVhZCBFbmdpbmVlciIsCiAgICAgICAgZW1haWw6ICJhbGljZUBjb21wYW55LmNvbSIsCiAgICAgICAgbG9jYXRpb246ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICBqb2luZWQ6ICIyMDIwLTAzLTE1IgogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkJvYiBTbWl0aCIsCiAgICAgICAgcm9sZTogIlNlbmlvciBEZXZlbG9wZXIiLAogICAgICAgIGVtYWlsOiAiYm9iQGNvbXBhbnkuY29tIiwKICAgICAgICBsb2NhdGlvbjogIk5ldyBZb3JrIiwKICAgICAgICBqb2luZWQ6ICIyMDE5LTA3LTIyIgogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNoYXJsaWUgRGF2aXMiLAogICAgICAgIHJvbGU6ICJEZXZPcHMgRW5naW5lZXIiLAogICAgICAgIGVtYWlsOiAiY2hhcmxpZUBjb21wYW55LmNvbSIsCiAgICAgICAgbG9jYXRpb246ICJMb25kb24iLAogICAgICAgIGpvaW5lZDogIjIwMjEtMDEtMTAiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGlhbmEgTWFydGluZXoiLAogICAgICAgIHJvbGU6ICJGcm9udGVuZCBEZXZlbG9wZXIiLAogICAgICAgIGVtYWlsOiAiZGlhbmFAY29tcGFueS5jb20iLAogICAgICAgIGxvY2F0aW9uOiAiQmFyY2Vsb25hIiwKICAgICAgICBqb2luZWQ6ICIyMDIyLTA1LTE4IgogICAgICB9CiAgICBdfQogICAgICAgICAgZGF0YU5hbWU9InRlYW0gbWVtYmVycyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEN1c3RvbSBEaXNwbGF5IEZ1bmN0aW9uPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+VHJhbnNmb3JtIGRhdGEgZm9yIGRpc3BsYXkgdXNpbmcgY3VzdG9tIGZvcm1hdHRpbmcuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUmVwb3J0IgogICAgICAgICAgaGVhZGluZzI9IlE0IDIwMjMgUGVyZm9ybWFuY2UiCiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgewogICAgICAgIHByb2R1Y3Q6ICJFbnRlcnByaXNlIExpY2Vuc2UiLAogICAgICAgIHVuaXRzOiA0NSwKICAgICAgICByZXZlbnVlOiAyMjVlMywKICAgICAgICBncm93dGg6IDAuMjMsCiAgICAgICAgZm9yZWNhc3Q6IDI4ZTQKICAgICAgfSwKICAgICAgewogICAgICAgIHByb2R1Y3Q6ICJQcm9mZXNzaW9uYWwgTGljZW5zZSIsCiAgICAgICAgdW5pdHM6IDEyOCwKICAgICAgICByZXZlbnVlOiAxMjhlMywKICAgICAgICBncm93dGg6IDAuMTUsCiAgICAgICAgZm9yZWNhc3Q6IDE0N2UzCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBwcm9kdWN0OiAiU3RhcnRlciBMaWNlbnNlIiwKICAgICAgICB1bml0czogMzQyLAogICAgICAgIHJldmVudWU6IDY4NDAwLAogICAgICAgIGdyb3d0aDogMC40MiwKICAgICAgICBmb3JlY2FzdDogOTdlMwogICAgICB9CiAgICBdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogICAgICBQcm9kdWN0OiBpdGVtLnByb2R1Y3QsCiAgICAgICJVbml0cyBTb2xkIjogaXRlbS51bml0cy50b0xvY2FsZVN0cmluZygpLAogICAgICBSZXZlbnVlOiAiJCIgKyBpdGVtLnJldmVudWUudG9Mb2NhbGVTdHJpbmcoKSwKICAgICAgR3Jvd3RoOiAoaXRlbS5ncm93dGggKiAxMDApLnRvRml4ZWQoMSkgKyAiJSIsCiAgICAgICJRMSAyMDI0IEZvcmVjYXN0IjogIiQiICsgaXRlbS5mb3JlY2FzdC50b0xvY2FsZVN0cmluZygpCiAgICB9KX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5FbXB0eSBUYWJsZSBTdGF0ZTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkhvdyB0aGUgdGFibGUgbG9va3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJObyBEYXRhIEF2YWlsYWJsZSIKICAgICAgICAgIGhlYWRpbmcyPSJUaGlzIHRhYmxlIGlzIGN1cnJlbnRseSBlbXB0eSIKICAgICAgICAgIC5kYXRhPSR7W119CiAgICAgICAgICBkYXRhTmFtZT0iaXRlbXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2NoZW1hLUZpcnN0IENvbHVtbnMgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5EZWZpbmVzIGNvbHVtbnMgZXhwbGljaXRseSBhbmQgcmVuZGVycyB2aWEgc2NoZW1hLiBObyBkaXNwbGF5RnVuY3Rpb24gbmVlZGVkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlVzZXJzIChTY2hlbWEtRmlyc3QpIgogICAgICAgICAgaGVhZGluZzI9IkNvbHVtbnMgZGVmaW5lIHJlbmRlcmluZyBhbmQgb3JkZXIiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICAgICAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgICAgIHsga2V5OiAiZW1haWwiLCBoZWFkZXI6ICJFbWFpbCIsIHJlbmRlcmVyOiAodjUpID0+IGIyYDxkZWVzLWJhZGdlPiR7djV9PC9kZWVzLWJhZGdlPmAgfSwKICAgICAgeyBrZXk6ICJqb2luZWRBdCIsIGhlYWRlcjogIkpvaW5lZCIsIHJlbmRlcmVyOiAodjUpID0+IG5ldyBEYXRlKHY1KS50b0xvY2FsZURhdGVTdHJpbmcoKSB9CiAgICBdfQogICAgICAgICAgLmRhdGE9JHtbCiAgICAgIHsgbmFtZTogIkFsaWNlIiwgZW1haWw6ICJhbGljZUBleGFtcGxlLmNvbSIsIGpvaW5lZEF0OiAiMjAyMi0wOC0wMSIgfSwKICAgICAgeyBuYW1lOiAiQm9iIiwgZW1haWw6ICJib2JAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjEtMTItMTEiIH0sCiAgICAgIHsgbmFtZTogIkNhcm9sIiwgZW1haWw6ICJjYXJvbEBleGFtcGxlLmNvbSIsIGpvaW5lZEF0OiAiMjAyMy0wMy0yMiIgfQogICAgXX0KICAgICAgICAgIGRhdGFOYW1lPSJ1c2VycyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5QYXJ0aWFsIFNjaGVtYSArIEF1Z21lbnQgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5Qcm92aWRlcyBvbmx5IHRoZSBpbXBvcnRhbnQgY29sdW1uczsgdGhlIHJlc3QgYXJlIG1lcmdlZCBpbiBmcm9tIGRpc3BsYXlGdW5jdGlvbi48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJVc2VycyAoUGFydGlhbCArIEF1Z21lbnQpIgogICAgICAgICAgaGVhZGluZzI9Ik1pc3NpbmcgY29sdW1ucyBhcmUgZGVyaXZlZCIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogICAgICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfQogICAgXX0KICAgICAgICAgIC5kaXNwbGF5RnVuY3Rpb249JHsodTcpID0+ICh7IG5hbWU6IHU3Lm5hbWUsIGVtYWlsOiB1Ny5lbWFpbCwgcm9sZTogdTcucm9sZSB9KX0KICAgICAgICAgIC5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbj0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgeyBuYW1lOiAiRXJpbiIsIGVtYWlsOiAiZXJpbkBleGFtcGxlLmNvbSIsIHJvbGU6ICJBZG1pbiIgfSwKICAgICAgeyBuYW1lOiAiRmlubiIsIGVtYWlsOiAiZmlubkBleGFtcGxlLmNvbSIsIHJvbGU6ICJVc2VyIiB9LAogICAgICB7IG5hbWU6ICJHaW5hIiwgZW1haWw6ICJnaW5hQGV4YW1wbGUuY29tIiwgcm9sZTogIlVzZXIiIH0KICAgIF19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iIAogICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHsoZTExKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTZWxlY3Rpb24gY2hhbmdlZCIsIGUxMS5kZXRhaWwpOwogICAgfX0KICAgICAgICAgICBAc2VhcmNoLWNoYW5nZWQ9JHsoZTExKSA9PiB7CiAgICAgIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICAgICAgaWYgKHRibCkKICAgICAgICB0Ymwuc2V0RmlsdGVyVGV4dChlMTEuZGV0YWlsLnZhbHVlKTsKICAgIH19CiAgICAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHsoZTExKSA9PiB7CiAgICAgIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICAgICAgaWYgKHRibCkKICAgICAgICB0Ymwuc2V0RmlsdGVyVGV4dChlMTEuZGV0YWlsLnZhbHVlKTsKICAgIH19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkZpbHRlcmluZyArIE11bHRpLVNlbGVjdGlvbiAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlVzZSB0aGUgc2VhcmNoIGJhciB0byBmaWx0ZXIgcm93czsgdG9nZ2xlIHNlbGVjdGlvbiB2aWEgY2hlY2tib3hlcy4gQ2xpY2sgaGVhZGVycyB0byBzb3J0LjwvcD4KICAgICAgICA8ZGVlcy1zZWFyY2hiYXI+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEycHgiPjwvZGl2PgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0idGFibGVGaWx0ZXJTZWxlY3REZW1vIgogICAgICAgICAgaGVhZGluZzE9IkludmVudG9yeSAoRmlsdGVyICsgU2VsZWN0KSIKICAgICAgICAgIGhlYWRpbmcyPSJUcnkgdHlwaW5nIHRvIGZpbHRlciBhbmQgc2VsZWN0aW5nIG11bHRpcGxlIHJvd3MiCiAgICAgICAgICAuc2VsZWN0aW9uTW9kZT0keyJtdWx0aSJ9CiAgICAgICAgICAucm93S2V5PSR7InNrdSJ9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICAgICAgeyBrZXk6ICJza3UiLCBoZWFkZXI6ICJTS1UiLCBzb3J0YWJsZTogdHJ1ZSB9LAogICAgICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJzdG9jayIsIGhlYWRlcjogIlN0b2NrIiwgc29ydGFibGU6IHRydWUgfQogICAgXX0KICAgICAgICAgIC5kYXRhPSR7WwogICAgICB7IHNrdTogIkEtMTAwIiwgbmFtZTogIlVTQi1DIENhYmxlIiwgc3RvY2s6IDEyMCB9LAogICAgICB7IHNrdTogIkEtMTAxIiwgbmFtZTogIldpcmVsZXNzIE1vdXNlIiwgc3RvY2s6IDU1IH0sCiAgICAgIHsgc2t1OiAiQS0xMDIiLCBuYW1lOiAiTGFwdG9wIFN0YW5kIiwgc3RvY2s6IDE4IH0sCiAgICAgIHsgc2t1OiAiQi0yMDAiLCBuYW1lOiAiS2V5Ym9hcmQgKElTTykiLCBzdG9jazogODkgfSwKICAgICAgeyBza3U6ICJCLTIwMSIsIG5hbWU6ICJIRE1JIEFkYXB0ZXIiLCBzdG9jazogMCB9LAogICAgICB7IHNrdTogIkMtMzAwIiwgbmFtZTogIldlYmNhbSAxMDgwcCIsIHN0b2NrOiA0MiB9CiAgICBdfQogICAgICAgICAgZGF0YU5hbWU9Iml0ZW1zIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkNvbHVtbiBGaWx0ZXJzICsgU3RpY2t5IEhlYWRlciAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlBlci1jb2x1bW4gcXVpY2sgZmlsdGVycyBhbmQgc3RpY2t5IGhlYWRlciB3aXRoIGludGVybmFsIHNjcm9sbC4gVHJ5IGZpbHRlcmluZyB0aGUgTmFtZSBjb2x1bW4uIFVzZXMgLS10YWJsZS1tYXgtaGVpZ2h0IHZhci48L3A+CiAgICAgICAgPHN0eWxlPgogICAgICAgICAgZGVlcy10YWJsZVtzdGlja3ktaGVhZGVyXSB7IC0tdGFibGUtbWF4LWhlaWdodDogMjIwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iRW1wbG95ZWVzIgogICAgICAgICAgaGVhZGluZzI9IlF1aWNrIGZpbHRlciBwZXIgY29sdW1uICsgc3RpY2t5IGhlYWRlciIKICAgICAgICAgIC5zaG93Q29sdW1uRmlsdGVycz0ke3RydWV9CiAgICAgICAgICAuc3RpY2t5SGVhZGVyPSR7dHJ1ZX0KICAgICAgICAgIC5jb2x1bW5zPSR7WwogICAgICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJkZXBhcnRtZW50IiwgaGVhZGVyOiAiRGVwYXJ0bWVudCIsIHNvcnRhYmxlOiB0cnVlIH0KICAgIF19CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgeyBuYW1lOiAiQWxpY2UgSm9obnNvbiIsIGVtYWlsOiAiYWxpY2VAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRW5naW5lZXJpbmciIH0sCiAgICAgIHsgbmFtZTogIkJvYiBTbWl0aCIsIGVtYWlsOiAiYm9iQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIlNhbGVzIiB9LAogICAgICB7IG5hbWU6ICJDaGFybGllIERhdmlzIiwgZW1haWw6ICJjaGFybGllQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkhSIiB9LAogICAgICB7IG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRW5naW5lZXJpbmciIH0sCiAgICAgIHsgbmFtZTogIkV0aGFuIEJyb3duIiwgZW1haWw6ICJldGhhbkBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJGaW5hbmNlIiB9LAogICAgICB7IG5hbWU6ICJGaW9uYSBDbGFyayIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU2FsZXMiIH0sCiAgICAgIHsgbmFtZTogIkdyYWNlIExlZSIsIGVtYWlsOiAiZ3JhY2VAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRW5naW5lZXJpbmciIH0sCiAgICAgIHsgbmFtZTogIkhlbnJ5IFdpbHNvbiIsIGVtYWlsOiAiaGVucnlAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiTWFya2V0aW5nIiB9LAogICAgICB7IG5hbWU6ICJJcmVuZSBXYWxrZXIiLCBlbWFpbDogImlyZW5lQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkZpbmFuY2UiIH0sCiAgICAgIHsgbmFtZTogIkphY2sgVHVybmVyIiwgZW1haWw6ICJqYWNrQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIlN1cHBvcnQiIH0KICAgIF19CiAgICAgICAgICBkYXRhTmFtZT0iZW1wbG95ZWVzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIgogICAgICAgIEBzZWFyY2hSZXF1ZXN0PSR7YXN5bmMgKGUxMSkgPT4gewogICAgICBjb25zdCB7IHF1ZXJ5IH0gPSBlMTEuZGV0YWlsIHx8IHsgcXVlcnk6ICIiIH07CiAgICAgIGNvbnN0IHRhYmxlMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZXJ2ZXJTZWFyY2hEZW1vIik7CiAgICAgIGNvbnN0IGJhc2VEYXRhID0gWwogICAgICAgIHsgaWQ6IDEsIG5hbWU6ICJBbGljZSIsIGNpdHk6ICJCZXJsaW4iLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgICAgIHsgaWQ6IDIsIG5hbWU6ICJCb2IiLCBjaXR5OiAiUGFyaXMiLCB0aXRsZTogIkRlc2lnbmVyIiB9LAogICAgICAgIHsgaWQ6IDMsIG5hbWU6ICJDaGFybGllIiwgY2l0eTogIkxvbmRvbiIsIHRpdGxlOiAiTWFuYWdlciIgfSwKICAgICAgICB7IGlkOiA0LCBuYW1lOiAiRGlhbmEiLCBjaXR5OiAiTWFkcmlkIiwgdGl0bGU6ICJFbmdpbmVlciIgfSwKICAgICAgICB7IGlkOiA1LCBuYW1lOiAiRXRoYW4iLCBjaXR5OiAiUm9tZSIsIHRpdGxlOiAiU3VwcG9ydCIgfQogICAgICBdOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocjExKSA9PiBzZXRUaW1lb3V0KHIxMSwgMzAwKSk7CiAgICAgIGNvbnN0IHEgPSBTdHJpbmcocXVlcnkgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgIGNvbnN0IGZpbHRlcmVkID0gcSA/IGJhc2VEYXRhLmZpbHRlcigocjExKSA9PiBPYmplY3QudmFsdWVzKHIxMSkuc29tZSgodjUpID0+IFN0cmluZyh2NSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSkpIDogYmFzZURhdGE7CiAgICAgIHRhYmxlMi5kYXRhID0gZmlsdGVyZWQ7CiAgICB9fQogICAgICA+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TZXJ2ZXIgU2VhcmNoIChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+U2VsZWN0IFNlcnZlciBtb2RlLCB0eXBlIGEgcXVlcnksIGFuZCB3YXRjaCB0aGUgdGFibGUgZmV0Y2ggc2ltdWxhdGVkIHJlc3VsdHMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2VydmVyU2VhcmNoRGVtbyIKICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgKFNlcnZlciBTZWFyY2gpIgogICAgICAgICAgaGVhZGluZzI9IkNsaWNrIFNlYXJjaCwgY2hvb3NlIFNlcnZlciBtb2RlLCBhbmQgdHlwZSIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogICAgICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiB9LAogICAgICB7IGtleTogImNpdHkiLCBoZWFkZXI6ICJDaXR5IiB9LAogICAgICB7IGtleTogInRpdGxlIiwgaGVhZGVyOiAiVGl0bGUiIH0KICAgIF19CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgeyBpZDogMSwgbmFtZTogIkFsaWNlIiwgY2l0eTogIkJlcmxpbiIsIHRpdGxlOiAiRW5naW5lZXIiIH0sCiAgICAgIHsgaWQ6IDIsIG5hbWU6ICJCb2IiLCBjaXR5OiAiUGFyaXMiLCB0aXRsZTogIkRlc2lnbmVyIiB9LAogICAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSIsIGNpdHk6ICJMb25kb24iLCB0aXRsZTogIk1hbmFnZXIiIH0sCiAgICAgIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSIsIGNpdHk6ICJNYWRyaWQiLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgICB7IGlkOiA1LCBuYW1lOiAiRXRoYW4iLCBjaXR5OiAiUm9tZSIsIHRpdGxlOiAiU3VwcG9ydCIgfQogICAgXX0KICAgICAgICAgIGRhdGFOYW1lPSJwZW9wbGUiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+V2lkZSBQcm9wZXJ0aWVzICsgTWFueSBBY3Rpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QSB0YWJsZSB3aXRoIG1hbnkgY29sdW1ucyBhbmQgcmljaCBhY3Rpb25zIHRvIHN0cmVzcyB0ZXN0IGxheW91dCBhbmQgc3RpY2t5IEFjdGlvbnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iUGVvcGxlIERpcmVjdG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJNYW55IHByb3BlcnRpZXMgYW5kIGFjdGlvbnMiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICAgICAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgICAgIHsga2V5OiAicm9sZSIsIGhlYWRlcjogIlJvbGUiLCBzb3J0YWJsZTogdHJ1ZSB9LAogICAgICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogICAgICB7IGtleTogInBob25lIiwgaGVhZGVyOiAiUGhvbmUiIH0sCiAgICAgIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgICAgIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJjcmVhdGVkQXQiLCBoZWFkZXI6ICJDcmVhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJwcm9qZWN0cyIsIGhlYWRlcjogIlByb2plY3RzIiB9LAogICAgICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogICAgICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KICAgIF19CiAgICAgICAgICAuZGF0YT0ke1sKICAgICAgeyBpZDogMSwgbmFtZTogIkFsaWNlIEpvaG5zb24iLCByb2xlOiAiRW5naW5lZXIiLCBkZXBhcnRtZW50OiAiUiZEIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTExIiwgbG9jYXRpb246ICJCZXJsaW4iLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIzLTAxLTEyIiwgdXBkYXRlZEF0OiAiMjAyNC0wNS0wMyIsIGxhc3RMb2dpbjogIjIwMjQtMTAtMDEiLCBwcm9qZWN0czogNSwgdGFnczogInR5cGVzY3JpcHQsIHVpIiwgbm90ZXM6ICJNZW50b3IiIH0sCiAgICAgIHsgaWQ6IDIsIG5hbWU6ICJCb2IgU21pdGgiLCByb2xlOiAiRGVzaWduZXIiLCBkZXBhcnRtZW50OiAiRGVzaWduIiwgZW1haWw6ICJib2JAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExMiIsIGxvY2F0aW9uOiAiUGFyaXMiLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIyLTExLTA1IiwgdXBkYXRlZEF0OiAiMjAyNC0wNC0xMCIsIGxhc3RMb2dpbjogIjIwMjQtMDktMjgiLCBwcm9qZWN0czogOCwgdGFnczogImZpZ21hLCBicmFuZCIsIG5vdGVzOiAiUGFydC10aW1lIiB9LAogICAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSBEYXZpcyIsIHJvbGU6ICJNYW5hZ2VyIiwgZGVwYXJ0bWVudDogIk9wcyIsIGVtYWlsOiAiY2hhcmxpZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTEzIiwgbG9jYXRpb246ICJMb25kb24iLCBzdGF0dXM6ICJPbiBMZWF2ZSIsIGNyZWF0ZWRBdDogIjIwMjEtMDQtMjEiLCB1cGRhdGVkQXQ6ICIyMDI0LTAyLTE1IiwgbGFzdExvZ2luOiAiMjAyNC0wOC0xMiIsIHByb2plY3RzOiAzLCB0YWdzOiAic3JlLCBsZWFkZXJzaGlwIiwgbm90ZXM6ICIiIH0sCiAgICAgIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIHJvbGU6ICJFbmdpbmVlciIsIGRlcGFydG1lbnQ6ICJQbGF0Zm9ybSIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNCIsIGxvY2F0aW9uOiAiTWFkcmlkIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMC0wNi0zMCIsIHVwZGF0ZWRBdDogIjIwMjQtMDYtMjUiLCBsYXN0TG9naW46ICIyMDI0LTEwLTAyIiwgcHJvamVjdHM6IDYsIHRhZ3M6ICJub2RlLCBhcGkiLCBub3RlczogIk9uLWNhbGwiIH0sCiAgICAgIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiBCcm93biIsIHJvbGU6ICJTdXBwb3J0IiwgZGVwYXJ0bWVudDogIkNTIiwgZW1haWw6ICJldGhhbkBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTE1IiwgbG9jYXRpb246ICJSb21lIiwgc3RhdHVzOiAiSW5hY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDE5LTA5LTE4IiwgdXBkYXRlZEF0OiAiMjAyNC0wMy0wOSIsIGxhc3RMb2dpbjogIjIwMjQtMDYtMTkiLCBwcm9qZWN0czogMiwgdGFnczogInplbmRlc2siLCBub3RlczogIlJlaGlyZSIgfSwKICAgICAgeyBpZDogNiwgbmFtZTogIkZpb25hIENsYXJrIiwgcm9sZTogIlFBIiwgZGVwYXJ0bWVudDogIlFBIiwgZW1haWw6ICJmaW9uYUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTE2IiwgbG9jYXRpb246ICJWaWVubmEiLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIyLTAzLTE0IiwgdXBkYXRlZEF0OiAiMjAyNC0wMy0wMSIsIGxhc3RMb2dpbjogIjIwMjQtMDktMDciLCBwcm9qZWN0czogNywgdGFnczogInBsYXl3cmlnaHQiLCBub3RlczogIiIgfQogICAgXX0KICAgICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICAgICAgeyBuYW1lOiAiVmlldyIsIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsIHR5cGU6IFsiaW5Sb3ciLCAiY29udGV4dG1lbnUiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coInZpZXciLCBpdGVtKTsKICAgICAgfSB9LAogICAgICB7IG5hbWU6ICJFZGl0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZWRpdCIsIHR5cGU6IFsiaW5Sb3ciLCAiY29udGV4dG1lbnUiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coImVkaXQiLCBpdGVtKTsKICAgICAgfSB9LAogICAgICB7IG5hbWU6ICJEZWxldGUiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaCIsIHR5cGU6IFsiaW5Sb3ciLCAiY29udGV4dG1lbnUiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coImRlbGV0ZSIsIGl0ZW0pOwogICAgICB9IH0sCiAgICAgIHsgbmFtZTogIk1lc3NhZ2UiLCBpY29uTmFtZTogImx1Y2lkZTptZXNzYWdlLXNxdWFyZSIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIm1lc3NhZ2UiLCBpdGVtKTsKICAgICAgfSB9LAogICAgICB7IG5hbWU6ICJIaXN0b3J5IiwgaWNvbk5hbWU6ICJsdWNpZGU6Y2xvY2siLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJoaXN0b3J5IiwgaXRlbSk7CiAgICAgIH0gfSwKICAgICAgeyBuYW1lOiAiQWRkIE5ldyIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCB0eXBlOiBbImhlYWRlciJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyB0YWJsZTogdGFibGUyIH0pID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiYWRkIik7CiAgICAgIH0gfSwKICAgICAgeyBuYW1lOiAiRXhwb3J0IENTViIsIGljb25OYW1lOiAibHVjaWRlOmRvd25sb2FkIiwgdHlwZTogWyJoZWFkZXIiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgdGFibGU6IHRhYmxlMiB9KSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coImV4cG9ydCIpOwogICAgICB9IH0sCiAgICAgIHsgbmFtZTogIkJ1bGsgRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gtMiIsIHR5cGU6IFsiZm9vdGVyIl0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IHRhYmxlOiB0YWJsZTIgfSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJidWxrIGRlbGV0ZSIpOwogICAgICB9IH0KICAgIF19CiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2Nyb2xsYWJsZSBTbWFsbCBIZWlnaHQ8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5TYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBtYW55IGl0ZW1zIGFuZCBhIHNtYWxsIGZpeGVkIGhlaWdodCB0byBmb3JjZSB2ZXJ0aWNhbCBzY3JvbGxpbmcgaW5zaWRlIHRoZSB0YWJsZS4gQWN0aW9ucyByZW1haW4gdmlzaWJsZSBvbiB0aGUgcmlnaHQ7IGhvcml6b250YWwgc2Nyb2xsIGFwcGVhcnMgaWYgbmVlZGVkLjwvcD4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAjc2Nyb2xsU21hbGxIZWlnaHQgeyAtLXRhYmxlLW1heC1oZWlnaHQ6IDI0MHB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaWQ9InNjcm9sbFNtYWxsSGVpZ2h0IgogICAgICAgICAgLnN0aWNreUhlYWRlcj0ke3RydWV9CiAgICAgICAgICBoZWFkaW5nMT0iUGVvcGxlIERpcmVjdG9yeSAoU2Nyb2xsYWJsZSkiCiAgICAgICAgICBoZWFkaW5nMj0iRm9yY2VkIHNjcm9sbGluZyB3aXRoIG1hbnkgaXRlbXMiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICAgICAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgICAgIHsga2V5OiAicm9sZSIsIGhlYWRlcjogIlJvbGUiLCBzb3J0YWJsZTogdHJ1ZSB9LAogICAgICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogICAgICB7IGtleTogInBob25lIiwgaGVhZGVyOiAiUGhvbmUiIH0sCiAgICAgIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgICAgIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJjcmVhdGVkQXQiLCBoZWFkZXI6ICJDcmVhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICAgICAgeyBrZXk6ICJwcm9qZWN0cyIsIGhlYWRlcjogIlByb2plY3RzIiB9LAogICAgICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogICAgICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KICAgIF19CiAgICAgICAgICAuZGF0YT0ke0FycmF5LmZyb20oeyBsZW5ndGg6IDEwMCB9LCAoXzQsIGkxMSkgPT4gKHsKICAgICAgaWQ6IGkxMSArIDEsCiAgICAgIG5hbWU6IGBVc2VyICR7aTExICsgMX1gLAogICAgICByb2xlOiBbIkVuZ2luZWVyIiwgIkRlc2lnbmVyIiwgIk1hbmFnZXIiLCAiUUEiLCAiU3VwcG9ydCJdW2kxMSAlIDVdLAogICAgICBkZXBhcnRtZW50OiBbIlImRCIsICJEZXNpZ24iLCAiT3BzIiwgIlFBIiwgIkNTIl1baTExICUgNV0sCiAgICAgIGVtYWlsOiBgdXNlciR7aTExICsgMX1AY29ycC5jb21gLAogICAgICBwaG9uZTogYCsxIDIwMiA1NTUgJHtTdHJpbmcoMWUzICsgaTExKS5zbGljZSgtNCl9YCwKICAgICAgbG9jYXRpb246IFsiQmVybGluIiwgIlBhcmlzIiwgIkxvbmRvbiIsICJNYWRyaWQiLCAiUm9tZSJdW2kxMSAlIDVdLAogICAgICBzdGF0dXM6IFsiQWN0aXZlIiwgIkluYWN0aXZlIiwgIk9uIExlYXZlIl1baTExICUgM10sCiAgICAgIGNyZWF0ZWRBdDogYDIwMjMtJHtTdHJpbmcoaTExICUgMTIgKyAxKS5wYWRTdGFydCgyLCAiMCIpfS0ke1N0cmluZyhpMTEgJSAyOCArIDEpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdXBkYXRlZEF0OiBgMjAyNC0ke1N0cmluZygoaTExICsgMykgJSAxMiArIDEpLnBhZFN0YXJ0KDIsICIwIil9LSR7U3RyaW5nKChpMTEgKyA3KSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogICAgICBsYXN0TG9naW46IGAyMDI0LSR7U3RyaW5nKChpMTEgKyA2KSAlIDEyICsgMSkucGFkU3RhcnQoMiwgIjAiKX0tJHtTdHJpbmcoKGkxMSArIDEwKSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogICAgICBwcm9qZWN0czogaTExICUgMTIsCiAgICAgIHRhZ3M6IGkxMSAlIDIgPyAidHlwZXNjcmlwdCIgOiAiZGVzaWduIiwKICAgICAgbm90ZXM6IGkxMSAlIDMgPyAiIiA6ICJOb3RlIgogICAgfSkpfQogICAgICAgICAgLmRhdGFBY3Rpb25zPSR7WwogICAgICB7IG5hbWU6ICJWaWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgICAgfSB9LAogICAgICB7IG5hbWU6ICJFZGl0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZWRpdCIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICAgIH0gfSwKICAgICAgeyBuYW1lOiAiRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2giLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogICAgICB9IH0KICAgIF19CiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvc3R5bGVzLmpzCnZhciB0YWJsZVN0eWxlczsKdmFyIGluaXRfc3R5bGVzNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvc3R5bGVzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICB0YWJsZVN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDY0cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuaGVhZGluZ0NvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nMSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5oZWFkaW5nMiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nU2VwYXJhdGlvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbnMgewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRlckFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuaGVhZGVyQWN0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hHcmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtZ2FwOiAxNnB4OwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIG1heC1jb250ZW50OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiBsZXQgc2VhcmNoIG1vZGUgc2l6ZSB0byBjb250ZW50IChubyBmb3JjZWQgd2lkdGgpICovCgogICAgICAuc2VhcmNoR3JpZC5oaWRkZW4gewogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiAwcHggMjRweDsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7CiAgICAgIH0KCiAgICAgIC50YWJsZVNjcm9sbCB7CiAgICAgICAgLyogZW5hYmxlIGhvcml6b250YWwgc2Nyb2xsIG9ubHkgd2hlbiBjb250ZW50IGV4Y2VlZHMgd2lkdGggKi8KICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIC8qIHByZXZlbnQgdmVydGljYWwgc2Nyb2xsIGluc2lkZSB0aGUgdGFibGUgY29udGFpbmVyICovCiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIC8qIGF2b2lkIHJlc2VydmluZyBleHRyYSBzcGFjZSBmb3IgY2xhc3NpYyBzY3JvbGxiYXJzIHdoZXJlIHBvc3NpYmxlICovCiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7CiAgICAgIH0KICAgICAgLyogSGlkZSBob3Jpem9udGFsIHNjcm9sbGJhciBlbnRpcmVseSB3aGVuIG5vdCB1c2luZyBzdGlja3kgaGVhZGVyICovCiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7IC8qIElFL0VkZ2UgKi8KICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7ICAgLyogRmlyZWZveCAoaGlkZXMgYm90aCBheGVzKSAqLwogICAgICB9CiAgICAgIDpob3N0KDpub3QoW3N0aWNreS1oZWFkZXJdKSkgLnRhYmxlU2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsgLyogQ2hyb21lL1NhZmFyaSAqLwogICAgICB9CiAgICAgIC8qIEluIHN0aWNreS1oZWFkZXIgbW9kZSwgaGlkZSBvbmx5IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBpbiBXZWJLaXQvQmxpbmsgKi8KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyOmhvcml6b250YWwgewogICAgICAgIGhlaWdodDogMHB4OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgLnRhYmxlU2Nyb2xsIHsKICAgICAgICBtYXgtaGVpZ2h0OiB2YXIoLS10YWJsZS1tYXgtaGVpZ2h0LCAzNjBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICAvKiBhbGxvdyB0YWJsZSB0byBncm93IHdpZGVyIHRoYW4gY29udGFpbmVyIHNvIGFjdGlvbnMgY29sdW1uIGNhbiBzdGljayAqLwogICAgICAgIHdpZHRoOiBtYXgtY29udGVudDsKICAgICAgICBtaW4td2lkdGg6IDEwMCU7CiAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ub0RhdGFTZXQgewogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0aGVhZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CiAgICAgIDpob3N0KFtzdGlja3ktaGVhZGVyXSkgdGhlYWQgdGggewogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyIHsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAvKiBEZWZhdWx0IGhvcml6b250YWwgbGluZXMgKGJvdHRvbSBib3JkZXIgb25seSkgKi8KICAgICAgdGJvZHkgdHIgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHI6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLyogRnVsbCBob3Jpem9udGFsIGxpbmVzIHdoZW4gZW5hYmxlZCAqLwogICAgICA6aG9zdChbc2hvdy1ob3Jpem9udGFsLWxpbmVzXSkgdGJvZHkgdHIgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSAvIDAuNSkiLCAiaHNsKDAgMCUgMTQuOSUgLyAwLjUpIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2x1bW4gaG92ZXIgZWZmZWN0IGZvciBiZXR0ZXIgdHJhY2VhYmlsaXR5ICovCiAgICAgIHRkIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIHRkOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUgLyAwLjMpIiwgImhzbCgwIDAlIDE0LjklIC8gMC4zKSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgfQogICAgICAKICAgICAgdGQ6aG92ZXI6OmFmdGVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAvKiBHcmlkIG1vZGUgLSBzaG93cyBib3RoIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGxpbmVzICovCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGg6Zmlyc3QtY2hpbGQsCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAvKiBTdGlja3kgQWN0aW9ucyBjb2x1bW4gKHJpZ2h0IHBpbm5lZCkgKi8KICAgICAgdGhlYWQgdGguYWN0aW9uc0NvbCwKICAgICAgdGJvZHkgdGQuYWN0aW9uc0NvbCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KICAgICAgdGhlYWQgdGguYWN0aW9uc0NvbCB7IHotaW5kZXg6IDM7IH0KICAgICAgdGJvZHkgdGQuYWN0aW9uc0NvbCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBib3gtc2hhZG93OiAtMXB4IDAgMCAwICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0ci5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIHRib2R5IHRyLmhhc0F0dGFjaG1lbnQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjEpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIHRoIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGggewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgdGg6Zmlyc3QtY2hpbGQsCiAgICAgIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIHRoOmxhc3QtY2hpbGQsCiAgICAgIHRkOmxhc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGg6bGFzdC1jaGlsZCwKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbm5lckNlbGxDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9CiAgICAgIHRkIGlucHV0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0cHg7CiAgICAgICAgYm90dG9tOiA0cHg7CiAgICAgICAgbGVmdDogMjBweDsKICAgICAgICByaWdodDogMjBweDsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA4cHgpOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7CiAgICAgIH0KICAgICAgCiAgICAgIHRkIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjIpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC8qIGZpbHRlciByb3cgKi8KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggMTJweCAxMnB4OwogICAgICB9CiAgICAgIHRoZWFkIHRyLmZpbHRlcnNSb3cgdGggaW5wdXRbdHlwZT0ndGV4dCddIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQogICAgICAuYWN0aW9uc0NvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuYWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSAxMS44JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5mb290ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLnRhYmxlU3RhdGlzdGljcyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyAuZm9vdGVyQWN0aW9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgYAogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvZGF0YS5qcwpmdW5jdGlvbiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhMTEpIHsKICBpZiAoIWRhdGExMSB8fCBkYXRhMTEubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIFtdOwogIGNvbnN0IGZpcnN0VHJhbnNmb3JtZWRJdGVtID0gZGlzcGxheUZ1bmN0aW9uKGRhdGExMVswXSk7CiAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhmaXJzdFRyYW5zZm9ybWVkSXRlbSk7CiAgcmV0dXJuIGtleXMyLm1hcCgoa2V5MikgPT4gKHsKICAgIGtleToga2V5MiwKICAgIGhlYWRlcjoga2V5MiwKICAgIHZhbHVlOiAocm93KSA9PiBkaXNwbGF5RnVuY3Rpb24ocm93KVtrZXkyXQogIH0pKTsKfQpmdW5jdGlvbiBjb21wdXRlRWZmZWN0aXZlQ29sdW1ucyhjb2x1bW5zLCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgZGlzcGxheUZ1bmN0aW9uLCBkYXRhMTEpIHsKICBjb25zdCBiYXNlID0gKGNvbHVtbnMgfHwgW10pLnNsaWNlKCk7CiAgaWYgKCFhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbikKICAgIHJldHVybiBiYXNlOwogIGNvbnN0IGZyb21EaXNwbGF5ID0gY29tcHV0ZUNvbHVtbnNGcm9tRGlzcGxheUZ1bmN0aW9uKGRpc3BsYXlGdW5jdGlvbiwgZGF0YTExKTsKICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KGJhc2UubWFwKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSkpOwogIGZvciAoY29uc3QgY29sIG9mIGZyb21EaXNwbGF5KSB7CiAgICBpZiAoIWV4aXN0aW5nS2V5cy5oYXMoU3RyaW5nKGNvbC5rZXkpKSkgewogICAgICBiYXNlLnB1c2goY29sKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2U7Cn0KZnVuY3Rpb24gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLCBkaXNwbGF5RnVuY3Rpb24pIHsKICByZXR1cm4gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07Cn0KZnVuY3Rpb24gZ2V0Vmlld0RhdGEoZGF0YTExLCBlZmZlY3RpdmVDb2x1bW5zLCBzb3J0S2V5LCBzb3J0RGlyLCBmaWx0ZXJUZXh0LCBjb2x1bW5GaWx0ZXJzLCBmaWx0ZXJNb2RlID0gInRhYmxlIiwgbHVjZW5lUHJlZGljYXRlKSB7CiAgbGV0IGFyciA9IGRhdGExMS5zbGljZSgpOwogIGNvbnN0IGZ0ID0gKGZpbHRlclRleHQgfHwgIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogIGNvbnN0IGNmID0gY29sdW1uRmlsdGVycyB8fCB7fTsKICBjb25zdCBjZktleXMgPSBPYmplY3Qua2V5cyhjZikuZmlsdGVyKChrNCkgPT4gKGNmW2s0XSA/PyAiIikudHJpbSgpLmxlbmd0aCA+IDApOwogIGlmIChmdCB8fCBjZktleXMubGVuZ3RoID4gMCkgewogICAgYXJyID0gYXJyLmZpbHRlcigocm93KSA9PiB7CiAgICAgIGZvciAoY29uc3QgazQgb2YgY2ZLZXlzKSB7CiAgICAgICAgaWYgKGZpbHRlck1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgY29uc3QgdmFsID0gcm93W2s0XTsKICAgICAgICAgIGNvbnN0IHMxMCA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjb25zdCBuZWVkbGUgPSBTdHJpbmcoY2ZbazRdKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKCFzMTAuaW5jbHVkZXMobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjb2wyID0gZWZmZWN0aXZlQ29sdW1ucy5maW5kKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSA9PT0gazQpOwogICAgICAgICAgaWYgKCFjb2wyIHx8IGNvbDIuaGlkZGVuIHx8IGNvbDIuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICBjb25zdCBzMTAgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbmVlZGxlID0gU3RyaW5nKGNmW2s0XSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmICghczEwLmluY2x1ZGVzKG5lZWRsZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGZ0KSB7CiAgICAgICAgaWYgKGx1Y2VuZVByZWRpY2F0ZSkgewogICAgICAgICAgaWYgKCFsdWNlbmVQcmVkaWNhdGUocm93KSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGxldCBhbnkgPSBmYWxzZTsKICAgICAgICBpZiAoZmlsdGVyTW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3QudmFsdWVzKHJvdykpIHsKICAgICAgICAgICAgY29uc3QgczEwID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKHMxMC5pbmNsdWRlcyhmdCkpIHsKICAgICAgICAgICAgICBhbnkgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoY29uc3QgY29sMiBvZiBlZmZlY3RpdmVDb2x1bW5zKSB7CiAgICAgICAgICAgIGlmIChjb2wyLmhpZGRlbikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICAgIGNvbnN0IHMxMCA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIGlmIChzMTAuaW5jbHVkZXMoZnQpKSB7CiAgICAgICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWFueSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KICBpZiAoIXNvcnRLZXkgfHwgIXNvcnREaXIpCiAgICByZXR1cm4gYXJyOwogIGNvbnN0IGNvbCA9IGVmZmVjdGl2ZUNvbHVtbnMuZmluZCgoYzExKSA9PiBTdHJpbmcoYzExLmtleSkgPT09IHNvcnRLZXkpOwogIGlmICghY29sKQogICAgcmV0dXJuIGFycjsKICBjb25zdCBkaXIgPSBzb3J0RGlyID09PSAiYXNjIiA/IDEgOiAtMTsKICBhcnIuc29ydCgoYTUsIGI1KSA9PiB7CiAgICBjb25zdCB2YSA9IGdldENlbGxWYWx1ZShhNSwgY29sKTsKICAgIGNvbnN0IHZiID0gZ2V0Q2VsbFZhbHVlKGI1LCBjb2wpOwogICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkKICAgICAgcmV0dXJuIDA7CiAgICBpZiAodmEgPT0gbnVsbCkKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHZiID09IG51bGwpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgaWYgKHR5cGVvZiB2YSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIHZiID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuICh2YSAtIHZiKSAqIGRpcjsKICAgIGNvbnN0IHNhID0gU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3Qgc2IgPSBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAoc2EgPCBzYikKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHNhID4gc2IpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgcmV0dXJuIDA7CiAgfSk7CiAgcmV0dXJuIGFycjsKfQp2YXIgaW5pdF9kYXRhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9kYXRhLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtdGFibGUvbHVjZW5lLmpzCmZ1bmN0aW9uIHN0cmlwUXVvdGVzKHMxMCkgewogIGlmIChzMTAuc3RhcnRzV2l0aCgnIicpICYmIHMxMC5lbmRzV2l0aCgnIicpIHx8IHMxMC5zdGFydHNXaXRoKCInIikgJiYgczEwLmVuZHNXaXRoKCInIikpIHsKICAgIHJldHVybiBzMTAuc2xpY2UoMSwgLTEpOwogIH0KICByZXR1cm4gczEwOwp9CmZ1bmN0aW9uIHNwbGl0QnlPcihpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrT1JccysvaSkubWFwKChzMTApID0+IHMxMC50cmltKCkpLmZpbHRlcihCb29sZWFuKTsKfQpmdW5jdGlvbiBzcGxpdEJ5QW5kKGlucHV0KSB7CiAgcmV0dXJuIGlucHV0LnNwbGl0KC9ccytBTkRccysvaSkubWFwKChzMTApID0+IHMxMC50cmltKCkpLmZpbHRlcihCb29sZWFuKTsKfQpmdW5jdGlvbiBwYXJzZVRlcm0ocmF3MikgewogIGlmICghcmF3MikKICAgIHJldHVybiBudWxsOwogIGxldCBuZWdhdGUgPSBmYWxzZTsKICBjb25zdCBub3RNYXRjaCA9IHJhdzIubWF0Y2goL15ccyooTk9UXHMrfC0pXHMqKC4qKSQvaSk7CiAgaWYgKG5vdE1hdGNoKSB7CiAgICBuZWdhdGUgPSB0cnVlOwogICAgcmF3MiA9IG5vdE1hdGNoWzJdOwogIH0KICBjb25zdCByYW5nZU1hdGNoID0gcmF3Mi5tYXRjaCgvXihbXjpcc10rKVxzKjpccypcWyguKj8pXHMrVE9ccysoLio/KVxdJC9pKTsKICBpZiAocmFuZ2VNYXRjaCkgewogICAgcmV0dXJuIHsKICAgICAgZmllbGQ6IHJhbmdlTWF0Y2hbMV0sCiAgICAgIG5lZ2F0ZSwKICAgICAgcmFuZ2U6IHsgbG93ZXI6IHN0cmlwUXVvdGVzKHJhbmdlTWF0Y2hbMl0pLnRvTG93ZXJDYXNlKCksIHVwcGVyOiBzdHJpcFF1b3RlcyhyYW5nZU1hdGNoWzNdKS50b0xvd2VyQ2FzZSgpLCBpbmNsdXNpdmU6IHRydWUgfQogICAgfTsKICB9CiAgY29uc3QgbTYgPSByYXcyLm1hdGNoKC9eKFteOlxzXSspXHMqOlxzKigiW14iXSoifCdbXiddKid8W14iJ1xzXSspJC8pOwogIGlmIChtNikgewogICAgcmV0dXJuIHsgZmllbGQ6IG02WzFdLCB2YWx1ZTogc3RyaXBRdW90ZXMobTZbMl0pLnRvTG93ZXJDYXNlKCksIG5lZ2F0ZSB9OwogIH0KICBpZiAocmF3Mi5sZW5ndGggPiAwKSB7CiAgICByZXR1cm4geyB2YWx1ZTogc3RyaXBRdW90ZXMocmF3MikudG9Mb3dlckNhc2UoKSwgbmVnYXRlIH07CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIHBhcnNlTHVjZW5lKGlucHV0KSB7CiAgaWYgKCFpbnB1dCkKICAgIHJldHVybiBudWxsOwogIGNvbnN0IGNsYXVzZXMgPSBzcGxpdEJ5T3IoaW5wdXQpLm1hcCgoY2xhdXNlU3RyKSA9PiB7CiAgICBjb25zdCB0ZXJtcyA9IHNwbGl0QnlBbmQoY2xhdXNlU3RyKS5tYXAocGFyc2VUZXJtKS5maWx0ZXIoKHQ5KSA9PiAhIXQ5ICYmICEhdDkudmFsdWUpOwogICAgcmV0dXJuIHsgdGVybXMgfTsKICB9KS5maWx0ZXIoKGMxMSkgPT4gYzExLnRlcm1zLmxlbmd0aCA+IDApOwogIGlmIChjbGF1c2VzLmxlbmd0aCA9PT0gMCkKICAgIHJldHVybiBudWxsOwogIHJldHVybiB7IGNsYXVzZXMgfTsKfQpmdW5jdGlvbiBjb21waWxlTHVjZW5lUHJlZGljYXRlKGlucHV0LCBtb2RlLCBjb2x1bW5zKSB7CiAgY29uc3QgYXN0ID0gcGFyc2VMdWNlbmUoaW5wdXQpOwogIGlmICghYXN0KQogICAgcmV0dXJuIG51bGw7CiAgY29uc3QgY29sTWFwID0gbmV3IE1hcChjb2x1bW5zLm1hcCgoYzExKSA9PiBbU3RyaW5nKGMxMS5rZXkpLCBjMTFdKSk7CiAgY29uc3QgY21wID0gKGE1LCBiNSkgPT4gYTUgPCBiNSA/IC0xIDogYTUgPiBiNSA/IDEgOiAwOwogIGNvbnN0IGNvZXJjZTIgPSAoczEwKSA9PiB7CiAgICBjb25zdCBzdHIgPSBTdHJpbmcoczEwID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbnVtID0gTnVtYmVyKHN0cik7CiAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShzdHIpOwogICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSAmJiBzdHIudHJpbSgpICE9PSAiIikKICAgICAgcmV0dXJuIHsgdDogIm4iLCB2OiBudW0gfTsKICAgIGlmICghTnVtYmVyLmlzTmFOKGRhdGUpKQogICAgICByZXR1cm4geyB0OiAiZCIsIHY6IGRhdGUgfTsKICAgIHJldHVybiB7IHQ6ICJzIiwgdjogc3RyIH07CiAgfTsKICBjb25zdCBpblJhbmdlID0gKHZhbCwgbG93ZXIsIHVwcGVyKSA9PiB7CiAgICBjb25zdCBhNSA9IGNvZXJjZTIodmFsKTsKICAgIGNvbnN0IGxvMiA9IGNvZXJjZTIobG93ZXIpOwogICAgY29uc3QgdXAgPSBjb2VyY2UyKHVwcGVyKTsKICAgIGlmIChhNS50ID09PSAicyIgJiYgbG8yLnQgPT09ICJzIiAmJiB1cC50ID09PSAicyIpIHsKICAgICAgY29uc3QgYXYgPSBhNS52OwogICAgICByZXR1cm4gY21wKGF2LCBsbzIudikgPj0gMCAmJiBjbXAoYXYsIHVwLnYpIDw9IDA7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gIm4iICYmIGxvMi50ID09PSAibiIgJiYgdXAudCA9PT0gIm4iKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvMi52ICYmIGF2IDw9IHVwLnY7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gImQiICYmIGxvMi50ID09PSAiZCIgJiYgdXAudCA9PT0gImQiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvMi52ICYmIGF2IDw9IHVwLnY7CiAgICB9CiAgICBjb25zdCBhcyA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICByZXR1cm4gY21wKGFzLCBsb3dlcikgPj0gMCAmJiBjbXAoYXMsIHVwcGVyKSA8PSAwOwogIH07CiAgcmV0dXJuIChyb3cpID0+IHsKICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGFzdC5jbGF1c2VzKSB7CiAgICAgIGxldCBjbGF1c2VPayA9IHRydWU7CiAgICAgIGZvciAoY29uc3QgdGVybSBvZiBjbGF1c2UudGVybXMpIHsKICAgICAgICBsZXQgb2szID0gZmFsc2U7CiAgICAgICAgaWYgKHRlcm0ucmFuZ2UgJiYgdGVybS5maWVsZCkgewogICAgICAgICAgaWYgKG1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgICBvazMgPSBpblJhbmdlKHJvd1t0ZXJtLmZpZWxkXSwgdGVybS5yYW5nZS5sb3dlciwgdGVybS5yYW5nZS51cHBlcik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgb2szID0gaW5SYW5nZSh2YWwsIHRlcm0ucmFuZ2UubG93ZXIsIHRlcm0ucmFuZ2UudXBwZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXJtLmZpZWxkICYmIHRlcm0udmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgaWYgKG1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgICBjb25zdCBzMTAgPSBTdHJpbmcocm93W3Rlcm0uZmllbGRdID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBvazMgPSBzMTAuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgY29uc3QgczEwID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBvazMgPSBzMTAuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRlcm0udmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgaWYgKG1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgICBvazMgPSBPYmplY3QudmFsdWVzKHJvdykuc29tZSgodjUpID0+IFN0cmluZyh2NSA/PyAiIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnZhbHVlKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvazMgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gewogICAgICAgICAgICAgIGlmIChjb2wuaGlkZGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGNvbC52YWx1ZSA/IGNvbC52YWx1ZShyb3cpIDogcm93W2NvbC5rZXldOwogICAgICAgICAgICAgIGNvbnN0IHMxMCA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHMxMC5pbmNsdWRlcyh0ZXJtLnZhbHVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0ZXJtLm5lZ2F0ZSkKICAgICAgICAgIG9rMyA9ICFvazM7CiAgICAgICAgaWYgKCFvazMpIHsKICAgICAgICAgIGNsYXVzZU9rID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNsYXVzZU9rKQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH07Cn0KdmFyIGluaXRfbHVjZW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9sdWNlbmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9kZWVzLXRhYmxlLmpzCnZhciBfX2VzRGVjb3JhdGUzMiwgX19ydW5Jbml0aWFsaXplcnMzMywgRGVlc1RhYmxlOwp2YXIgaW5pdF9kZWVzX3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9kZWVzLXRhYmxlLmpzIigpIHsKICAgIGluaXRfcGx1Z2luczQoKTsKICAgIGluaXRfZGVlc190YWJsZV9kZW1vKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfc3R5bGVzNCgpOwogICAgaW5pdF9kYXRhKCk7CiAgICBpbml0X2x1Y2VuZSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMzMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1RhYmxlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdGFibGUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2hlYWRpbmcxX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaGVhZGluZzFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oZWFkaW5nMl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2hlYWRpbmcyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGF0YV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2tleV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2tleV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGlzYWJsZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kYXRhTmFtZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RhdGFOYW1lX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlYXJjaGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZGF0YUFjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2x1bW5zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29sdW1uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm93S2V5X2RlY29yYXRvcnM7CiAgICAgIGxldCBfcm93S2V5X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9kaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3JldmVyc2VEaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkRGF0YVJvd19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkRGF0YVJvd19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lZGl0YWJsZUZpZWxkc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2VkaXRhYmxlRmllbGRzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1ZlcnRpY2FsTGluZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93SG9yaXpvbnRhbExpbmVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93R3JpZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dHcmlkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc29ydEtleV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NvcnRLZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc29ydEtleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NvcnREaXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zb3J0RGlyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NvcnREaXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWx0ZXJUZXh0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfZmlsdGVyVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sdW1uRmlsdGVyc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbHVtbkZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dDb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGlja3lIZWFkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdGlja3lIZWFkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoTW9kZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlYXJjaE1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZElkc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkSWRzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzVGFibGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaGVhZGluZzFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZwogICAgICAgICAgfSldOwogICAgICAgICAgX2hlYWRpbmcyX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9kYXRhX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX2tleV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZwogICAgICAgICAgfSldOwogICAgICAgICAgX2Rpc2FibGVkX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgICAgICB9KV07CiAgICAgICAgICBfcmVxdWlyZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9kYXRhTmFtZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICAgICAgfSldOwogICAgICAgICAgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX2NvbHVtbnNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX3Jvd0tleV9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgICAgICBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2Rpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgYXR0cmlidXRlOiBmYWxzZQogICAgICAgICAgfSldOwogICAgICAgICAgX3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIGF0dHJpYnV0ZTogZmFsc2UKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9zZWxlY3RlZERhdGFSb3dfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdAogICAgICAgICAgfSldOwogICAgICAgICAgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX3Nob3dWZXJ0aWNhbExpbmVzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlLAogICAgICAgICAgICBhdHRyaWJ1dGU6ICJzaG93LXZlcnRpY2FsLWxpbmVzIgogICAgICAgICAgfSldOwogICAgICAgICAgX3Nob3dIb3Jpem9udGFsTGluZXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgICAgIGF0dHJpYnV0ZTogInNob3ctaG9yaXpvbnRhbC1saW5lcyIKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9zaG93R3JpZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZSwKICAgICAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ncmlkIgogICAgICAgICAgfSldOwogICAgICAgICAgX3NvcnRLZXlfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX3NvcnREaXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX2ZpbHRlclRleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfY29sdW1uRmlsdGVyc19kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgICAgICBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogInNob3ctY29sdW1uLWZpbHRlcnMiIH0pXTsKICAgICAgICAgIF9zdGlja3lIZWFkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogInN0aWNreS1oZWFkZXIiIH0pXTsKICAgICAgICAgIF9zZWFyY2hNb2RlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc2VsZWN0ZWRJZHNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2hlYWRpbmcxX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmcxIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nMSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nMSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmhlYWRpbmcxID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oZWFkaW5nMV9pbml0aWFsaXplcnMsIF9oZWFkaW5nMV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfaGVhZGluZzJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZzIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhlYWRpbmcyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGVhZGluZzIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmcyX2luaXRpYWxpemVycywgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9kYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRhdGEgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RhdGFfaW5pdGlhbGl6ZXJzLCBfZGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfa2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImtleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAia2V5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfa2V5X2luaXRpYWxpemVycywgX2tleV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9kaXNhYmxlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXNhYmxlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzYWJsZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGF0YU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGFOYW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGFOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGF0YU5hbWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RhdGFOYW1lX2luaXRpYWxpemVycywgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWFyY2hhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaGFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlYXJjaGFibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoYWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlYXJjaGFibGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaGFibGVfaW5pdGlhbGl6ZXJzLCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YUFjdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGF0YUFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGFBY3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGFBY3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGF0YUFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycywgX2RhdGFBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9jb2x1bW5zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbHVtbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbHVtbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sdW1ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbHVtbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfcm93S2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvd0tleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm93S2V5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJvd0tleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJvd0tleSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcm93S2V5X2luaXRpYWxpemVycywgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycywgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXNwbGF5RnVuY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzcGxheUZ1bmN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGlzcGxheUZ1bmN0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJldmVyc2VEaXNwbGF5RnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJldmVyc2VEaXNwbGF5RnVuY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmV2ZXJzZURpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JldmVyc2VEaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkRGF0YVJvdyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWREYXRhUm93IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkRGF0YVJvdywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkRGF0YVJvdyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWREYXRhUm93X2luaXRpYWxpemVycywgX3NlbGVjdGVkRGF0YVJvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZWRpdGFibGVGaWVsZHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZWRpdGFibGVGaWVsZHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRhYmxlRmllbGRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVkaXRhYmxlRmllbGRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZWRpdGFibGVGaWVsZHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VkaXRhYmxlRmllbGRzX2luaXRpYWxpemVycywgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VmVydGljYWxMaW5lcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1ZlcnRpY2FsTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1ZlcnRpY2FsTGluZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VmVydGljYWxMaW5lcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzLCBfc2hvd1ZlcnRpY2FsTGluZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3Nob3dIb3Jpem9udGFsTGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0hvcml6b250YWxMaW5lcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0hvcml6b250YWxMaW5lcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93SG9yaXpvbnRhbExpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd0hvcml6b250YWxMaW5lcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMsIF9zaG93SG9yaXpvbnRhbExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93R3JpZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93R3JpZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0dyaWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0dyaWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93R3JpZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0dyaWRfaW5pdGlhbGl6ZXJzLCBfc2hvd0dyaWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NvcnRLZXlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic29ydEtleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic29ydEtleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zb3J0S2V5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc29ydEtleSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydEtleV9pbml0aWFsaXplcnMsIF9zb3J0S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zb3J0RGlyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnREaXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnREaXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc29ydERpciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNvcnREaXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NvcnREaXJfaW5pdGlhbGl6ZXJzLCBfc29ydERpcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZmlsdGVyVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJUZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJUZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlclRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maWx0ZXJUZXh0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWx0ZXJUZXh0X2luaXRpYWxpemVycywgX2ZpbHRlclRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sdW1uRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sdW1uRmlsdGVycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2x1bW5GaWx0ZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIF9jb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93Q29sdW1uRmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93Q29sdW1uRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0NvbHVtbkZpbHRlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0NvbHVtbkZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93Q29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0NvbHVtbkZpbHRlcnNfaW5pdGlhbGl6ZXJzLCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGlja3lIZWFkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0aWNreUhlYWRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zdGlja3lIZWFkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zdGlja3lIZWFkZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0aWNreUhlYWRlcl9pbml0aWFsaXplcnMsIF9zdGlja3lIZWFkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlYXJjaE1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VhcmNoTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWFyY2hNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VhcmNoTW9kZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoTW9kZV9pbml0aWFsaXplcnMsIF9zZWFyY2hNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGlvbk1vZGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGlvbk1vZGVfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0ZWRJZHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRJZHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSWRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSWRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0ZWRJZHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSWRzX2luaXRpYWxpemVycywgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNUYWJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI0OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJEYXRhIFZpZXciXTsKICAgICAgICAjaGVhZGluZzFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2hlYWRpbmcxX2luaXRpYWxpemVycywgImhlYWRpbmcgMSIpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IGhlYWRpbmcxKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBoZWFkaW5nMSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2hlYWRpbmcxX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfaGVhZGluZzJfaW5pdGlhbGl6ZXJzLCAiaGVhZGluZyAyIikpOwogICAgICAgIGdldCBoZWFkaW5nMigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaGVhZGluZzIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGRhdGEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZGF0YSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvLyBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGdldCBrZXkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBrZXkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgbGFiZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGRpc2FibGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCByZXF1aXJlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcmVxdWlyZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBnZXQgdmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsdWUoX3ZhbHVlQXJnKSB7CiAgICAgICAgfQogICAgICAgIGNoYW5nZVN1YmplY3QgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgICAgICNkYXRhTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGF0YU5hbWVfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgICAgIC8vIGVuZCBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIC8qKgogICAgICAgICAqIFdoYXQgZG9lcyBhIHJvdyBvZiBkYXRhIHJlcHJlc2VudD8KICAgICAgICAgKi8KICAgICAgICBnZXQgZGF0YU5hbWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRhdGFOYW1lKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhTmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlYXJjaGFibGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IHNlYXJjaGFibGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VhcmNoYWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RhdGFBY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgZGF0YUFjdGlvbnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGF0YUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRhdGFBY3Rpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZGF0YUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIC8vIHNjaGVtYS1maXJzdCBjb2x1bW5zIEFQSQogICAgICAgIGdldCBjb2x1bW5zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbHVtbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyb3dLZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcm93S2V5X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogU3RhYmxlIHJvdyBpZGVudGl0eSBmb3Igc2VsZWN0aW9uIGFuZCB1cGRhdGVzLiBJZiBwcm92aWRlZCBhcyBhIGZ1bmN0aW9uLAogICAgICAgICAqIGl0IGlzIG9ubHkgdXNhYmxlIGFzIGEgcHJvcGVydHkgKG5vdCB2aWEgYXR0cmlidXRlKS4KICAgICAgICAgKi8KICAgICAgICBnZXQgcm93S2V5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvd0tleV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcm93S2V5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcm93S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICAvKioKICAgICAgICAgKiBXaGVuIHRydWUgYW5kIGNvbHVtbnMgYXJlIHByb3ZpZGVkLCBtZXJnZSBhbnkgbWlzc2luZyBjb2x1bW5zIGRpc2NvdmVyZWQKICAgICAgICAgKiB2aWEgZGlzcGxheUZ1bmN0aW9uIGludG8gdGhlIGVmZmVjdGl2ZSBzY2hlbWEuCiAgICAgICAgICovCiAgICAgICAgZ2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICAgICAgZ2V0IGRpc3BsYXlGdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Rpc3BsYXlGdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3JldmVyc2VEaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCAoaXRlbUFyZykgPT4gaXRlbUFyZykpOwogICAgICAgIGdldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJldmVyc2VEaXNwbGF5RnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RlZERhdGFSb3dfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWREYXRhUm93X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IHNlbGVjdGVkRGF0YVJvdygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZERhdGFSb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGVkRGF0YVJvdyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGVkRGF0YVJvd19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZWRpdGFibGVGaWVsZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGVkaXRhYmxlRmllbGRzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2VkaXRhYmxlRmllbGRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlZGl0YWJsZUZpZWxkcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2VkaXRhYmxlRmllbGRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBzaG93VmVydGljYWxMaW5lcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1ZlcnRpY2FsTGluZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dWZXJ0aWNhbExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IHNob3dIb3Jpem9udGFsTGluZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd0hvcml6b250YWxMaW5lcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Nob3dIb3Jpem9udGFsTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dHcmlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93R3JpZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93R3JpZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd0dyaWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93R3JpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBmaWxlcyA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93R3JpZF9leHRyYUluaXRpYWxpemVycyksIFtdKTsKICAgICAgICBmaWxlV2Vha01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgICAgIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgICAgICNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0S2V5X2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvLyBzaW1wbGUgY2xpZW50LXNpZGUgc29ydGluZyAoUGhhc2UgMSkKICAgICAgICBnZXQgc29ydEtleSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzb3J0S2V5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc29ydEtleV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBzb3J0RGlyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NvcnREaXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNvcnREaXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzb3J0RGlyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNmaWx0ZXJUZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc29ydERpcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIC8vIHNpbXBsZSBjbGllbnQtc2lkZSBmaWx0ZXJpbmcgKFBoYXNlIDEpCiAgICAgICAgZ2V0IGZpbHRlclRleHQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZmlsdGVyVGV4dCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZpbHRlclRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgLy8gcGVyLWNvbHVtbiBxdWljayBmaWx0ZXJzCiAgICAgICAgZ2V0IGNvbHVtbkZpbHRlcnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29sdW1uRmlsdGVycyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dDb2x1bW5GaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd0NvbHVtbkZpbHRlcnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dDb2x1bW5GaWx0ZXJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd0NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc3RpY2t5SGVhZGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3RpY2t5SGVhZGVyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3RpY2t5SGVhZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWFyY2hNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9pbml0aWFsaXplcnMsICJ0YWJsZSIpKTsKICAgICAgICAvLyBzZWFyY2ggcm93IHN0YXRlCiAgICAgICAgZ2V0IHNlYXJjaE1vZGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VhcmNoTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VhcmNoTW9kZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlYXJjaE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgX19zZWFyY2hUZXh0U3ViID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgX19zZWFyY2hNb2RlU3ViOwogICAgICAgICNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgIm5vbmUiKTsKICAgICAgICAvLyBzZWxlY3Rpb24gKFBoYXNlIDEpCiAgICAgICAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkSWRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkSWRzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgICAgIGdldCBzZWxlY3RlZElkcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRJZHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBfcm93SWRNYXAgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWRJZHNfZXh0cmFJbml0aWFsaXplcnMpLCAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7CiAgICAgICAgX3Jvd0lkQ291bnRlciA9IDA7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gdGFibGVTdHlsZXM7CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgdXNpbmdDb2x1bW5zID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwOwogICAgICAgICAgY29uc3QgZWZmZWN0aXZlQ29sdW1ucyA9IHVzaW5nQ29sdW1ucyA/IGNvbXB1dGVFZmZlY3RpdmVDb2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgdGhpcy5kaXNwbGF5RnVuY3Rpb24sIHRoaXMuZGF0YSkgOiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24odGhpcy5kaXNwbGF5RnVuY3Rpb24sIHRoaXMuZGF0YSk7CiAgICAgICAgICBjb25zdCBsdWNlbmVQcmVkID0gY29tcGlsZUx1Y2VuZVByZWRpY2F0ZSh0aGlzLmZpbHRlclRleHQsIHRoaXMuc2VhcmNoTW9kZSA9PT0gImRhdGEiID8gImRhdGEiIDogInRhYmxlIiwgZWZmZWN0aXZlQ29sdW1ucyk7CiAgICAgICAgICBjb25zdCB2aWV3RGF0YSA9IGdldFZpZXdEYXRhKHRoaXMuZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgdGhpcy5zb3J0S2V5LCB0aGlzLnNvcnREaXIsIHRoaXMuZmlsdGVyVGV4dCwgdGhpcy5jb2x1bW5GaWx0ZXJzLCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGx1Y2VuZVByZWQgfHwgdm9pZCAwKTsKICAgICAgICAgIHRoaXMuX2xhc3RWaWV3RGF0YSA9IHZpZXdEYXRhOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8IS0tIHRoZSBoZWFkaW5nIHBhcnQgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdDb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIGhlYWRpbmcxIj4ke3RoaXMubGFiZWwgfHwgdGhpcy5oZWFkaW5nMX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMiI+JHt0aGlzLmhlYWRpbmcyfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJBY3Rpb25zIj4KICAgICAgICAgICAgJHtkaXJlY3RpdmVzX2V4cG9ydHMucmVzb2x2ZUV4ZWMoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmRhdGFBY3Rpb25zKSB7CiAgICAgICAgICAgICAgaWYgKCFhY3Rpb24udHlwZT8uaW5jbHVkZXMoImhlYWRlciIpKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChiMmA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRlckFjdGlvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWREYXRhUm93LAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvblNpemU9JHsxNH0gLmljb249JHthY3Rpb24uaWNvbk5hbWV9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9YCA6IGFjdGlvbi5uYW1lfQogICAgICAgICAgICAgICAgICA8L2Rpdj5gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgICAgICB9KX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdTZXBhcmF0aW9uIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hHcmlkIGhpZGRlbiI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJsdWNlbmUgc3ludGF4IHNlYXJjaCJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke2AKICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgbHVjZW5lIHN5bnRheCB0byBzZWFyY2ggZm9yIGRhdGEsIGUuZy46CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgbmFtZTogImpvaG4iIEFORCBhZ2U6IDE4CiAgICAgICAgICAgICAgXGBcYFxgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIGB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsic2VhcmNoIG1vZGUifQogICAgICAgICAgICAub3B0aW9ucz0ke1sidGFibGUiLCAiZGF0YSIsICJzZXJ2ZXIiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRhYmxlIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7YAogICAgICAgICAgICAgIFRoZXJlIGFyZSB0aHJlZSBiYXNpYyBtb2RlczoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAqIHRhYmxlOiBvbmx5IHNlYXJjaGVzIGRhdGEgYWxyZWFkeSBpbiB0aGUgdGFibGUKICAgICAgICAgICAgICAqIGRhdGE6IHNlYXJjaGVzIG9yaWdpbmFsIGRhdGEsIGlnbm9yaW5nIHRhYmxlIHRyYW5zZm9ybXMKICAgICAgICAgICAgICAqIHNlcnZlcjogc2VhcmNoZXMgZGF0YSBvbiB0aGUgc2VydmVyCiAgICAgICAgICAgICAgCiAgICAgICAgICAgIGB9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIHRoZSBhY3R1YWwgdGFibGUgLS0+CiAgICAgICAgPHN0eWxlPjwvc3R5bGU+CiAgICAgICAgJHt0aGlzLmRhdGEubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU2Nyb2xsIj4KICAgICAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VsZWN0aW9uTW9kZSAhPT0gIm5vbmUiID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDo0MnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJtdWx0aSIgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuYXJlQWxsVmlzaWJsZVNlbGVjdGVkKCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbmRldGVybWluYXRlPSR7dGhpcy5pc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB0aGlzLnNldFNlbGVjdFZpc2libGUoZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgICAgICAgICAke2VmZmVjdGl2ZUNvbHVtbnMuZmlsdGVyKChjMTEpID0+ICFjMTEuaGlkZGVuKS5tYXAoKGNvbCkgPT4gewogICAgICAgICAgICBjb25zdCBpc1NvcnRhYmxlID0gISFjb2wuc29ydGFibGU7CiAgICAgICAgICAgIGNvbnN0IGFyaWFTb3J0ID0gdGhpcy5nZXRBcmlhU29ydChjb2wpOwogICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPSJjb2x1bW5oZWFkZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXNvcnQ9JHthcmlhU29ydH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSIke2lzU29ydGFibGUgPyAiY3Vyc29yOiBwb2ludGVyOyIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBpc1NvcnRhYmxlID8gdGhpcy50b2dnbGVTb3J0KGNvbCkgOiBudWxsfQogICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29sLmhlYWRlciA/PyBjb2wua2V5fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclNvcnRJbmRpY2F0b3IoY29sKX0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPmA7CiAgICAgICAgICB9KX0KICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIHJldHVybiBiMmAgPHRoIGNsYXNzPSJhY3Rpb25zQ29sIj5BY3Rpb25zPC90aD4gYDsKICAgICAgICAgICAgfQogICAgICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzID8gYjJgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICJub25lIiA/IGIyYDx0aCBzdHlsZT0id2lkdGg6NDJweDsiPjwvdGg+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGtleTIgPSBTdHJpbmcoY29sLmtleSk7CiAgICAgICAgICAgIGlmIChjb2wuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgICAgcmV0dXJuIGIyYDx0aD48L3RoPmA7CiAgICAgICAgICAgIHJldHVybiBiMmA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iRmlsdGVyLi4uIiAudmFsdWU9JHt0aGlzLmNvbHVtbkZpbHRlcnNba2V5Ml0gfHwgIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5zZXRDb2x1bW5GaWx0ZXIoa2V5MiwgZTExLnRhcmdldC52YWx1ZSl9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPmA7CiAgICAgICAgICB9KX0KICAgICAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICByZXR1cm4gYjJgIDx0aD48L3RoPiBgOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSgpfQogICAgICAgICAgICAgICAgICAgICAgPC90cj5gIDogYjJgYH0KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICR7dmlld0RhdGEubWFwKChpdGVtQXJnLCByb3dJbmRleCkgPT4gewogICAgICAgICAgICBjb25zdCBnZXRUciA9IChlbGVtZW50QXJnKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRBcmcudGFnTmFtZSA9PT0gIlRSIikgewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBcmc7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBnZXRUcihlbGVtZW50QXJnLnBhcmVudEVsZW1lbnQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgPHRyCiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVJvdyA9IGl0ZW1Bcmc7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gInNpbmdsZSIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChpdGVtQXJnKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpOwogICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2VudGVyPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIHJlYWxUYXJnZXQuY2xhc3NMaXN0LmFkZCgiaGFzQXR0YWNobWVudCIpOwogICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgICAgICByZWFsVGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoImhhc0F0dGFjaG1lbnQiKTsKICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdvdmVyPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyb3A9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gW107CiAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIEFycmF5LmZyb20oZXZlbnRBcmcuZGF0YVRyYW5zZmVyLmZpbGVzKSkgewogICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpOwogICAgICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbGVXZWFrTWFwLmdldChpdGVtQXJnKTsKICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgdGhpcy5maWxlV2Vha01hcC5zZXQoaXRlbUFyZywgbmV3RmlsZXMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5uZXdGaWxlcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIHRoaXMuZ2V0QWN0aW9uc0ZvclR5cGUoImNvbnRleHRtZW51IikubWFwKChhY3Rpb24pID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gewogICAgICAgICAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSwKICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IGFjdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbUFyZywKICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICByZXR1cm4gbWVudUl0ZW07CiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHtpdGVtQXJnID09PSB0aGlzLnNlbGVjdGVkRGF0YVJvdyA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW1BcmcpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgdGhpcy5zZXRSb3dTZWxlY3RlZChpdGVtQXJnLCBlMTEuZGV0YWlsID09PSB0cnVlKTsKICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGdldENlbGxWYWx1ZShpdGVtQXJnLCBjb2wsIHRoaXMuZGlzcGxheUZ1bmN0aW9uKTsKICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGNvbC5yZW5kZXJlciA/IGNvbC5yZW5kZXJlcih2YWx1ZTIsIGl0ZW1BcmcsIHsgcm93SW5kZXgsIGNvbEluZGV4LCBjb2x1bW46IGNvbCB9KSA6IHZhbHVlMjsKICAgICAgICAgICAgICBjb25zdCBlZGl0S2V5ID0gU3RyaW5nKGNvbC5rZXkpOwogICAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRibGNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZGJsQWN0aW9uID0gdGhpcy5kYXRhQWN0aW9ucy5maW5kKChhY3Rpb25BcmcpID0+IGFjdGlvbkFyZy50eXBlPy5pbmNsdWRlcygiZG91YmxlQ2xpY2siKSk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0YWJsZUZpZWxkcy5pbmNsdWRlcyhlZGl0S2V5KSkgewogICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNlbGxFZGl0aW5nKGUxMSwgaXRlbUFyZywgZWRpdEtleSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRibEFjdGlvbikgewogICAgICAgICAgICAgICAgICBkYmxBY3Rpb24uYWN0aW9uRnVuYyh7IGl0ZW06IGl0ZW1BcmcsIHRhYmxlOiB0aGlzIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7Y29udGVudDN9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgICB9KX0KICAgICAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnNDb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEFjdGlvbnNGb3JUeXBlKCJpblJvdyIpLm1hcCgoYWN0aW9uQXJnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gYWN0aW9uQXJnLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtQXJnLAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25BcmcuaWNvbk5hbWUgPyBiMmAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbkFyZy5pY29uTmFtZX0+PC9kZWVzLWljb24+IGAgOiBhY3Rpb25BcmcubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+YDsKICAgICAgICAgIH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogYjJgIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lIHx8ICJkYXRhIHJvd3MifSAodG90YWwpIHwKICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkRGF0YVJvdyA/IGAjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpICsgMX1gIDogYE5vYH0KICAgICAgICAgICAgc2VsZWN0ZWQKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5kYXRhQWN0aW9ucykgewogICAgICAgICAgICAgIGlmICghYWN0aW9uLnR5cGU/LmluY2x1ZGVzKCJmb290ZXIiKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICAgICAgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiB0aGlzLnNlbGVjdGVkRGF0YVJvdywKICAgICAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke2FjdGlvbi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb25TaXplPSR7MTR9IC5pY29uPSR7YWN0aW9uLmljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAke2FjdGlvbi5uYW1lfWAgOiBhY3Rpb24ubmFtZX0KICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogICAgICAgICAgfSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgdGhpcy5kZXRlcm1pbmVDb2x1bW5XaWR0aHMoKTsKICAgICAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHsKICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmRhdGFBY3Rpb25zLmZpbmQoKGFjdGlvbkFyZykgPT4gYWN0aW9uQXJnLnR5cGU/LmluY2x1ZGVzKCJoZWFkZXIiKSAmJiBhY3Rpb25BcmcubmFtZSA9PT0gIlNlYXJjaCIpOwogICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7CiAgICAgICAgICAgICAgdGhpcy5kYXRhQWN0aW9ucy51bnNoaWZ0KHsKICAgICAgICAgICAgICAgIG5hbWU6ICJTZWFyY2giLAogICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6U2VhcmNoIiwKICAgICAgICAgICAgICAgIHR5cGU6IFsiaGVhZGVyIl0sCiAgICAgICAgICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvcGVuIHNlYXJjaCIpOwogICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hHcmlkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWFyY2hHcmlkIik7CiAgICAgICAgICAgICAgICAgIHNlYXJjaEdyaWQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhQWN0aW9ucyk7CiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgOwogICAgICAgICAgICB0aGlzLndpcmVTZWFyY2hJbnB1dHMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX19kZWJvdW5jZVRpbWVyOwogICAgICAgIGRlYm91bmNlUnVuKGZuLCBtcyA9IDIwMCkgewogICAgICAgICAgaWYgKHRoaXMuX19kZWJvdW5jZVRpbWVyKQogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fX2RlYm91bmNlVGltZXIpOwogICAgICAgICAgdGhpcy5fX2RlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGZuLCBtcyk7CiAgICAgICAgfQogICAgICAgIHdpcmVTZWFyY2hJbnB1dHMoKSB7CiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0RWwgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zZWFyY2hHcmlkIGRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgY29uc3Qgc2VhcmNoTW9kZUVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LW11bHRpdG9nZ2xlIik7CiAgICAgICAgICBpZiAoc2VhcmNoVGV4dEVsICYmICF0aGlzLl9fc2VhcmNoVGV4dFN1YikgewogICAgICAgICAgICB0aGlzLl9fc2VhcmNoVGV4dFN1YiA9IHNlYXJjaFRleHRFbC5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoZWwpID0+IHsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBlbD8udmFsdWUgPz8gIiI7CiAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZVJ1bigoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0IiwgewogICAgICAgICAgICAgICAgICAgIGRldGFpbDogeyBxdWVyeTogdmFsLCBtb2RlOiAic2VydmVyIiB9LAogICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXJUZXh0KHZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlYXJjaE1vZGVFbCAmJiAhdGhpcy5fX3NlYXJjaE1vZGVTdWIpIHsKICAgICAgICAgICAgdGhpcy5fX3NlYXJjaE1vZGVTdWIgPSBzZWFyY2hNb2RlRWwuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGVsKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IGVsPy5zZWxlY3RlZE9wdGlvbiB8fCBlbD8udmFsdWUgfHwgInRhYmxlIjsKICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gInRhYmxlIiB8fCBtb2RlID09PSAiZGF0YSIgfHwgbW9kZSA9PT0gInNlcnZlciIpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoTW9kZSA9IG1vZGU7CiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hUZXh0RWw/LnZhbHVlID8/ICIiOwogICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZVJ1bigoKSA9PiB7CiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1vZGUgPT09ICJzZXJ2ZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIsIHsgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sIGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyVGV4dCh2YWwpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBkZXRlcm1pbmVDb2x1bW5XaWR0aHMoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzMi5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgY29uc3QgdGFibGUyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoInRhYmxlIik7CiAgICAgICAgICBpZiAoIXRhYmxlMikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY2VsbHMyID0gdGFibGUyLnJvd3NbMF0uY2VsbHM7CiAgICAgICAgICBjb25zdCBoYW5kbGVDb2x1bW5CeUluZGV4ID0gYXN5bmMgKGkxMSwgd2FpdEZvclJlbmRlckFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICAgICAgY29uc3QgY2VsbDIgPSBjZWxsczJbaTExXTsKICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsMikud2lkdGg7CiAgICAgICAgICAgIGlmIChjZWxsMi50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgICAgICAgY29uc3QgbmVlZGVkV2lkdGggPSB0aGlzLmRhdGFBY3Rpb25zLmZpbHRlcigoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZT8uaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCAqIDM2OwogICAgICAgICAgICAgIGNlbGwyLnN0eWxlLndpZHRoID0gYCR7TWF0aC5tYXgobmVlZGVkV2lkdGgsIDY4KX1weGA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAod2FpdEZvclJlbmRlckFyZykgewogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBkb25lLnJlc29sdmUoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBpZiAoY2VsbHMyW2NlbGxzMi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbHVtbkJ5SW5kZXgoY2VsbHMyLmxlbmd0aCAtIDEsIHRydWUpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgY2VsbHMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgaWYgKGNlbGxzMltpMTFdLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCBoYW5kbGVDb2x1bW5CeUluZGV4KGkxMSk7CiAgICAgICAgICB9CiAgICAgICAgICB0YWJsZTIuc3R5bGUudGFibGVMYXlvdXQgPSAiZml4ZWQiOwogICAgICAgIH0KICAgICAgICAvLyBjb21wdXRlIGhlbHBlcnMgbW92ZWQgdG8gLi9kYXRhLnRzCiAgICAgICAgdG9nZ2xlU29ydChjb2wpIHsKICAgICAgICAgIGNvbnN0IGtleTIgPSBTdHJpbmcoY29sLmtleSk7CiAgICAgICAgICBpZiAodGhpcy5zb3J0S2V5ICE9PSBrZXkyKSB7CiAgICAgICAgICAgIHRoaXMuc29ydEtleSA9IGtleTI7CiAgICAgICAgICAgIHRoaXMuc29ydERpciA9ICJhc2MiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHRoaXMuc29ydERpciA9PT0gImFzYyIpCiAgICAgICAgICAgICAgdGhpcy5zb3J0RGlyID0gImRlc2MiOwogICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNvcnREaXIgPT09ICJkZXNjIikgewogICAgICAgICAgICAgIHRoaXMuc29ydERpciA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5zb3J0S2V5ID0gdm9pZCAwOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiYXNjIjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNvcnRDaGFuZ2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBrZXk6IHRoaXMuc29ydEtleSwgZGlyOiB0aGlzLnNvcnREaXIgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIGdldEFyaWFTb3J0KGNvbCkgewogICAgICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgICAgIHJldHVybiAibm9uZSI7CiAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0RGlyID09PSAiYXNjIiA/ICJhc2NlbmRpbmciIDogImRlc2NlbmRpbmciOwogICAgICAgIH0KICAgICAgICByZW5kZXJTb3J0SW5kaWNhdG9yKGNvbCkgewogICAgICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgICAgIHJldHVybiBiMmBgOwogICAgICAgICAgcmV0dXJuIGIyYDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDo2cHg7IG9wYWNpdHk6MC43OyI+JHt0aGlzLnNvcnREaXIgPT09ICJhc2MiID8gIlx1MjVCMiIgOiAiXHUyNUJDIn08L3NwYW4+YDsKICAgICAgICB9CiAgICAgICAgLy8gZmlsdGVyaW5nIGhlbHBlcnMKICAgICAgICBzZXRGaWx0ZXJUZXh0KHZhbHVlMikgewogICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuZmlsdGVyVGV4dDsKICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dCA9IHZhbHVlMiA/PyAiIjsKICAgICAgICAgIGlmIChwcmV2ICE9PSB0aGlzLmZpbHRlclRleHQpIHsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsdGVyQ2hhbmdlIiwgewogICAgICAgICAgICAgIGRldGFpbDogeyB0ZXh0OiB0aGlzLmZpbHRlclRleHQsIGNvbHVtbnM6IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzIH0gfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldENvbHVtbkZpbHRlcihrZXkyLCB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVycyA9IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzLCBba2V5Ml06IHZhbHVlMiB9OwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsdGVyQ2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdGV4dDogdGhpcy5maWx0ZXJUZXh0LCBjb2x1bW5zOiB7IC4uLnRoaXMuY29sdW1uRmlsdGVycyB9IH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIH0KICAgICAgICAvLyBzZWxlY3Rpb24gaGVscGVycwogICAgICAgIGdldFJvd0lkKHJvdykgewogICAgICAgICAgaWYgKHRoaXMucm93S2V5KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yb3dLZXkgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93S2V5KHJvdyk7CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocm93W3RoaXMucm93S2V5XSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBrZXkyID0gcm93OwogICAgICAgICAgaWYgKCF0aGlzLl9yb3dJZE1hcC5oYXMoa2V5MikpIHsKICAgICAgICAgICAgdGhpcy5fcm93SWRNYXAuc2V0KGtleTIsIFN0cmluZygrK3RoaXMuX3Jvd0lkQ291bnRlcikpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0lkTWFwLmdldChrZXkyKTsKICAgICAgICB9CiAgICAgICAgaXNSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHJvdykpOwogICAgICAgIH0KICAgICAgICB0b2dnbGVSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChyb3cpOwogICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gInNpbmdsZSIpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLmFkZChpZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIikgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMoaWQpKQogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIHNldFJvd1NlbGVjdGVkKHJvdywgY2hlY2tlZCkgewogICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLmNsZWFyKCk7CiAgICAgICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAibXVsdGkiKSB7CiAgICAgICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIGFyZUFsbFZpc2libGVTZWxlY3RlZCgpIHsKICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9sYXN0Vmlld0RhdGEgfHwgW107CiAgICAgICAgICBpZiAodmlldy5sZW5ndGggPT09IDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCkgewogICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgICAgIGlmICh2aWV3Lmxlbmd0aCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgbGV0IGNvdW50MiA9IDA7CiAgICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgICAgIGNvdW50MisrOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvdW50MiA+IDAgJiYgY291bnQyIDwgdmlldy5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHNldFNlbGVjdFZpc2libGUoY2hlY2tlZCkgewogICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgICAgIGlmIChjaGVja2VkKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpCiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpCiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIGVtaXRTZWxlY3Rpb25DaGFuZ2UoKSB7CiAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyk7CiAgICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKChyMTEpID0+IHRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocjExKSkpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VsZWN0aW9uQ2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgc2VsZWN0ZWRJZHMsIHNlbGVjdGVkUm93cyB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGdldEFjdGlvbnNGb3JUeXBlKHR5cGVBcmcpIHsKICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXTsKICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCFhY3Rpb24udHlwZT8uaW5jbHVkZXModHlwZUFyZykpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFjdGlvbnM7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUNlbGxFZGl0aW5nKGV2ZW50LCBpdGVtQXJnLCBrZXkyKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sb3IgPSB0YXJnZXQuc3R5bGUuY29sb3I7CiAgICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRJdGVtID0gdGhpcy5kaXNwbGF5RnVuY3Rpb24oaXRlbUFyZyk7CiAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0cmFuc2Zvcm1lZEl0ZW1ba2V5Ml0gPz8gaXRlbUFyZ1trZXkyXSA/PyAiIjsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgICAgIGlucHV0LnR5cGUgPSAidGV4dCI7CiAgICAgICAgICBpbnB1dC52YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgICAgICAgIGNvbnN0IGJsdXJJbnB1dCA9IGFzeW5jIChibHVyQXJnID0gdHJ1ZSwgc2F2ZUFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgICAgIGlmIChibHVyQXJnKSB7CiAgICAgICAgICAgICAgaW5wdXQuYmx1cigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzYXZlQXJnKSB7CiAgICAgICAgICAgICAgaXRlbUFyZ1trZXkyXSA9IGlucHV0LnZhbHVlOwogICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlucHV0LnJlbW92ZSgpOwogICAgICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSBvcmlnaW5hbENvbG9yOwogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgIH07CiAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgICAgICBibHVySW5wdXQoZmFsc2UsIGZhbHNlKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgICBibHVySW5wdXQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczMzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzVGFibGUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLXRhYmxlL2luZGV4LmpzCnZhciBpbml0X2RlZXNfdGFibGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfdGFibGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtL2RlZXMtZm9ybS5kZW1vLmpzCnZhciBkZW1vRnVuYzI1Owp2YXIgaW5pdF9kZWVzX2Zvcm1fZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtL2RlZXMtZm9ybS5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzKCk7CiAgICBkZW1vRnVuYzI1ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZm9ybS1vdXRwdXQgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5zdGF0dXMtbWVzc2FnZSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zdGF0dXMtbWVzc2FnZS5zdWNjZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDM1LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNjUuMyUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNDAuNiUpIiwgImhzbCgwIDcyLjIlIDYwLjYlKSIpfTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBjb25zdCBvdXRwdXREaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIi5mb3JtLW91dHB1dCIpOwogICAgICBpZiAoZm9ybSAmJiBvdXRwdXREaXYpIHsKICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBjb25zdCBkYXRhMTEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJGb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6IiwgZGF0YTExKTsKICAgICAgICAgIGZvcm0uc2V0U3RhdHVzKCJwZW5kaW5nIiwgIlByb2Nlc3NpbmcgeW91ciByZWdpc3RyYXRpb24uLi4iKTsKICAgICAgICAgIG91dHB1dERpdi5pbm5lckhUTUwgPSBgPHN0cm9uZz5TdWJtaXR0ZWQgRGF0YTo8L3N0cm9uZz4KJHtKU09OLnN0cmluZ2lmeShkYXRhMTEsIG51bGwsIDIpfWA7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyOC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKTsKICAgICAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIlJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyk7CiAgICAgICAgICBmb3JtLnJlc2V0KCk7CiAgICAgICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIjxlbT5Gb3JtIGhhcyBiZWVuIHJlc2V0PC9lbT4iOwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGlucHV0cyA9IGZvcm0ucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0LCBkZWVzLWlucHV0LWRyb3Bkb3duLCBkZWVzLWlucHV0LWNoZWNrYm94Iik7CiAgICAgICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgKCkgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiRmllbGQgY2hhbmdlZDoiLCBpbnB1dC5nZXRBdHRyaWJ1dGUoImtleSIpKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkNvbXBsZXRlIEZvcm0gRXhhbXBsZSIgLmRlc2NyaXB0aW9uPSJBIGNvbXByZWhlbnNpdmUgZm9ybSB3aXRoIHZhcmlvdXMgaW5wdXQgdHlwZXMsIHZhbGlkYXRpb24sIGFuZCBmb3JtIHN1Ym1pc3Npb24gaGFuZGxpbmciPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfSAKICAgICAgICAgICAga2V5PSJmaXJzdE5hbWUiIAogICAgICAgICAgICBsYWJlbD0iRmlyc3QgTmFtZSIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IllvdXIgZ2l2ZW4gbmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0gCiAgICAgICAgICAgIGtleT0iZW1haWwiIAogICAgICAgICAgICBsYWJlbD0iRW1haWwgQWRkcmVzcyIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IldlIHdpbGwgdXNlIHRoaXMgdG8gY29udGFjdCB5b3UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9ImNvdW50cnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDb3VudHJ5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiVW5pdGVkIFN0YXRlcyIsIGtleTogInVzIiB9LAogICAgICB7IG9wdGlvbjogIkNhbmFkYSIsIGtleTogImNhIiB9LAogICAgICB7IG9wdGlvbjogIkdlcm1hbnkiLCBrZXk6ICJkZSIgfSwKICAgICAgeyBvcHRpb246ICJGcmFuY2UiLCBrZXk6ICJmciIgfSwKICAgICAgeyBvcHRpb246ICJVbml0ZWQgS2luZ2RvbSIsIGtleTogInVrIiB9CiAgICBdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9InBhc3N3b3JkIgogICAgICAgICAgICBsYWJlbD0iUGFzc3dvcmQiCiAgICAgICAgICAgIGlzUGFzc3dvcmRCb29sCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNaW5pbXVtIDggY2hhcmFjdGVycyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIGtleT0idGVybXMiCiAgICAgICAgICAgIGxhYmVsPSJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0ibmV3c2xldHRlciIKICAgICAgICAgICAgbGFiZWw9IlNlbmQgbWUgcHJvbW90aW9uYWwgZW1haWxzIgogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgaWYgKGZvcm0pIHsKICAgICAgICBjb25zb2xlLmxvZygiSG9yaXpvbnRhbCBmb3JtIGxheW91dCBhY3RpdmUiKTsKICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gZXZlbnQuZGV0YWlsLmRhdGE7CiAgICAgICAgICBjb25zb2xlLmxvZygiRmlsdGVyIGFwcGxpZWQ6IiwgZmlsdGVycyk7CiAgICAgICAgICBjb25zdCByZXN1bHRzQ291bnQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApICsgMTsKICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke3Jlc3VsdHNDb3VudH0gcmVzdWx0cyB3aXRoIGZpbHRlcnM6YCwgZmlsdGVycyk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgaW5wdXRzID0gZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCJba2V5XSIpOwogICAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBhd2FpdCBmb3JtLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiTGl2ZSBmaWx0ZXIgdXBkYXRlOiIsIGZvcm1EYXRhKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiQWxsIiwga2V5OiAiYWxsIiB9LAogICAgICB7IG9wdGlvbjogIlByb2R1Y3RzIiwga2V5OiAicHJvZHVjdHMiIH0sCiAgICAgIHsgb3B0aW9uOiAiU2VydmljZXMiLCBrZXk6ICJzZXJ2aWNlcyIgfSwKICAgICAgeyBvcHRpb246ICJTdXBwb3J0Iiwga2V5OiAic3VwcG9ydCIgfQogICAgXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0ic29ydCIKICAgICAgICAgICAgLmxhYmVsPSR7IlNvcnQgQnkifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICB7IG9wdGlvbjogIk5ld2VzdCIsIGtleTogIm5ld2VzdCIgfSwKICAgICAgeyBvcHRpb246ICJQb3B1bGFyIiwga2V5OiAicG9wdWxhciIgfSwKICAgICAgeyBvcHRpb246ICJQcmljZTogTG93IHRvIEhpZ2giLCBrZXk6ICJwcmljZV9hc2MiIH0sCiAgICAgIHsgb3B0aW9uOiAiUHJpY2U6IEhpZ2ggdG8gTG93Iiwga2V5OiAicHJpY2VfZGVzYyIgfQogICAgXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0iaW5TdG9jayIKICAgICAgICAgICAgbGFiZWw9IkluIFN0b2NrIE9ubHkiCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBjb25zdCBzdGF0dXNEaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzdGF0dXMtZGlzcGxheSIpOwogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCBhc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRhdGExMSA9IGV2ZW50QXJnLmRldGFpbC5kYXRhOwogICAgICAgICAgY29uc29sZS5sb2coIkFkdmFuY2VkIGZvcm0gZGF0YToiLCBkYXRhMTEpOwogICAgICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiVmFsaWRhdGluZyB5b3VyIGluZm9ybWF0aW9uLi4uIik7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyOC5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwMCk7CiAgICAgICAgICBpZiAoZGF0YTExLmliYW4gJiYgZGF0YTExLmliYW4ubGVuZ3RoID4gMTUpIHsKICAgICAgICAgICAgZm9ybS5zZXRTdGF0dXMoInN1Y2Nlc3MiLCAiQXBwbGljYXRpb24gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSEiKTsKICAgICAgICAgICAgaWYgKHN0YXR1c0RpdikgewogICAgICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAic3RhdHVzLW1lc3NhZ2Ugc3VjY2VzcyI7CiAgICAgICAgICAgICAgc3RhdHVzRGl2LnRleHRDb250ZW50ID0gIlx1MjcxMyBZb3VyIGFwcGxpY2F0aW9uIGhhcyBiZWVuIHN1Ym1pdHRlZC4gV2Ugd2lsbCBjb250YWN0IHlvdSBzb29uLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvcm0uc2V0U3RhdHVzKCJlcnJvciIsICJQbGVhc2UgY2hlY2sgeW91ciBJQkFOIik7CiAgICAgICAgICAgIGlmIChzdGF0dXNEaXYpIHsKICAgICAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gInN0YXR1cy1tZXNzYWdlIGVycm9yIjsKICAgICAgICAgICAgICBzdGF0dXNEaXYudGV4dENvbnRlbnQgPSAiXHUyNzE3IEludmFsaWQgSUJBTiBmb3JtYXQuIFBsZWFzZSBjaGVjayBhbmQgdHJ5IGFnYWluLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbnNvbGUubG9nKCJGb3JtIGRhdGEgbG9nZ2VkOiIsIGRhdGExMSk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgZmlsZVVwbG9hZCA9IGZvcm0ucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1maWxldXBsb2FkIik7CiAgICAgICAgaWYgKGZpbGVVcGxvYWQpIHsKICAgICAgICAgIGZpbGVVcGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGV0YWlsPy5maWxlcyB8fCBbXTsKICAgICAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZXMubGVuZ3RofSBmaWxlKHMpIHNlbGVjdGVkIGZvciB1cGxvYWRgKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC5oZWFkaW5nPSJBZHZhbmNlZCBGb3JtIEZlYXR1cmVzIiAuZGVzY3JpcHRpb249IkZvcm0gd2l0aCBzcGVjaWFsaXplZCBpbnB1dCB0eXBlcyBhbmQgY29tcGxleCB2YWxpZGF0aW9uIj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAga2V5PSJpYmFuIgogICAgICAgICAgICBsYWJlbD0iSUJBTiIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUKICAgICAgICAgICAga2V5PSJwaG9uZSIKICAgICAgICAgICAgbGFiZWw9IlBob25lIE51bWJlciIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIGtleT0icHJlZmVyZW5jZXMiCiAgICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb24gUHJlZmVyZW5jZXMifQogICAgICAgICAgICAub3B0aW9ucz0ke1siRW1haWwiLCAiU01TIiwgIlB1c2giLCAiSW4tQXBwIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbWFpbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXNlbGVjdAogICAgICAgICAgICBrZXk9ImludGVyZXN0cyIKICAgICAgICAgICAgLmxhYmVsPSR7IkFyZWFzIG9mIEludGVyZXN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgb3B0aW9uOiAiVGVjaG5vbG9neSIsIGtleTogInRlY2giIH0sCiAgICAgIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogICAgICB7IG9wdGlvbjogIkJ1c2luZXNzIiwga2V5OiAiYnVzaW5lc3MiIH0sCiAgICAgIHsgb3B0aW9uOiAiTWFya2V0aW5nIiwga2V5OiAibWFya2V0aW5nIiB9LAogICAgICB7IG9wdGlvbjogIlNhbGVzIiwga2V5OiAic2FsZXMiIH0KICAgIF19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpc2VsZWN0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgIGtleT0iZG9jdW1lbnRzIgogICAgICAgICAgICAubGFiZWw9JHsiVXBsb2FkIERvY3VtZW50cyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQREYsIERPQywgb3IgRE9DWCBmaWxlcyB1cCB0byAxME1CIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEFwcGxpY2F0aW9uPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9InN0YXR1cy1kaXNwbGF5Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLmpzCnZhciBfX2VzRGVjb3JhdGUzMywgX19ydW5Jbml0aWFsaXplcnMzNCwgRk9STV9JTlBVVF9UWVBFUywgRGVlc0Zvcm07CnZhciBpbml0X2RlZXNfZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtL2RlZXMtZm9ybS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19pbnB1dF9jaGVja2JveCgpOwogICAgaW5pdF9kZWVzX2lucHV0X2NvZGUoKTsKICAgIGluaXRfZGVlc19pbnB1dF9kYXRlcGlja2VyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdGV4dCgpOwogICAgaW5pdF9kZWVzX2lucHV0X3F1YW50aXR5c2VsZWN0b3IoKTsKICAgIGluaXRfZGVlc19pbnB1dF9yYWRpb2dyb3VwKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfZHJvcGRvd24oKTsKICAgIGluaXRfZGVlc19pbnB1dF9maWxldXBsb2FkKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfaWJhbigpOwogICAgaW5pdF9kZWVzX2lucHV0X211bHRpdG9nZ2xlKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfcGhvbmUoKTsKICAgIGluaXRfZGVlc19pbnB1dF90b2dnbGUoKTsKICAgIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdCgpOwogICAgaW5pdF9kZWVzX2Zvcm1fc3VibWl0KCk7CiAgICBpbml0X2RlZXNfdGFibGUyKCk7CiAgICBpbml0X2RlZXNfZm9ybV9kZW1vKCk7CiAgICBfX2VzRGVjb3JhdGUzMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczM0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBGT1JNX0lOUFVUX1RZUEVTID0gWwogICAgICBEZWVzSW5wdXRDaGVja2JveCwKICAgICAgRGVlc0lucHV0Q29kZSwKICAgICAgRGVlc0lucHV0RGF0ZXBpY2tlciwKICAgICAgRGVlc0lucHV0RHJvcGRvd24sCiAgICAgIERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgICAgIERlZXNJbnB1dEliYW4sCiAgICAgIERlZXNJbnB1dE11bHRpdG9nZ2xlLAogICAgICBEZWVzSW5wdXRQaG9uZSwKICAgICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciwKICAgICAgRGVlc0lucHV0UmFkaW9ncm91cCwKICAgICAgRGVlc0lucHV0VGV4dCwKICAgICAgRGVlc0lucHV0VG9nZ2xlLAogICAgICBEZWVzSW5wdXRUeXBlbGlzdCwKICAgICAgRGVlc1RhYmxlCiAgICBdOwogICAgRGVlc0Zvcm0gPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzRm9ybTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlLCBhdHRyaWJ1dGU6ICJob3Jpem9udGFsLWxheW91dCIgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMzModGhpcywgbnVsbCwgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaG9yaXpvbnRhbExheW91dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaG9yaXpvbnRhbExheW91dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ob3Jpem9udGFsTGF5b3V0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaG9yaXpvbnRhbExheW91dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMsIF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTMzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNGb3JtMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjU7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZvcm0iXTsKICAgICAgICBuYW1lID0gIm15Zm9ybSI7CiAgICAgICAgY2hhbmdlU3ViamVjdCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgICAgICByZWFkeURlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgICAgICNob3Jpem9udGFsTGF5b3V0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM0KHRoaXMsIF9ob3Jpem9udGFsTGF5b3V0X2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8qKgogICAgICAgICAqIENvbnRyb2xzIHRoZSBsYXlvdXQgbW9kZSBvZiBjaGlsZCBpbnB1dCBjb21wb25lbnRzCiAgICAgICAgICogV2hlbiB0cnVlLCBzZXRzIGFsbCBjaGlsZCBpbnB1dHMgdG8gaG9yaXpvbnRhbCBsYXlvdXQKICAgICAgICAgKi8KICAgICAgICBnZXQgaG9yaXpvbnRhbExheW91dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNob3Jpem9udGFsTGF5b3V0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBob3Jpem9udGFsTGF5b3V0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtob3Jpem9udGFsLWxheW91dF0pIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHNsb3Q+PC9zbG90PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgY29uc3QgZm9ybUNoaWxkcmVuID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIHRoaXMudXBkYXRlUmVxdWlyZWRTdGF0dXMoKTsKICAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgICAgICBjaGlsZC5jaGFuZ2VTdWJqZWN0LnN1YnNjcmliZShhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSBhd2FpdCB0aGlzLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHZhbHVlT2JqZWN0KTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZU9iamVjdCk7CiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHRoaXMuYWRkQmVoYXZpb3VycygpOwogICAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9CiAgICAgICAgZ2V0Rm9ybUVsZW1lbnRzKCkgewogICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuZmlsdGVyKChjaGlsZCkgPT4gRk9STV9JTlBVVF9UWVBFUy5pbmNsdWRlcyhjaGlsZC5jb25zdHJ1Y3RvcikpOwogICAgICAgIH0KICAgICAgICBnZXRTdWJtaXRCdXR0b24oKSB7CiAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maW5kKChjaGlsZCkgPT4gY2hpbGQgaW5zdGFuY2VvZiBEZWVzRm9ybVN1Ym1pdCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZVJlcXVpcmVkU3RhdHVzKCkgewogICAgICAgICAgY29uc29sZS5sb2coImNoZWNraW5nIHRoZSByZXF1aXJlZCBzdGF0dXMuIik7CiAgICAgICAgICBsZXQgcmVxdWlyZWRPSyA9IHRydWU7CiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkQXJnIG9mIHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkpIHsKICAgICAgICAgICAgaWYgKGNoaWxkQXJnLnJlcXVpcmVkICYmICFjaGlsZEFyZy52YWx1ZSkgewogICAgICAgICAgICAgIHJlcXVpcmVkT0sgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuZ2V0U3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgdGhpcy5nZXRTdWJtaXRCdXR0b24oKS5kaXNhYmxlZCA9ICFyZXF1aXJlZE9LOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBjb2xsZWN0cyB0aGUgZm9ybSBkYXRhCiAgICAgICAgICogQHJldHVybnMKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjb2xsZWN0Rm9ybURhdGEoKSB7CiAgICAgICAgICBjb25zdCBjaGlsZHJlbjIgPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSB7fTsKICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4yKSB7CiAgICAgICAgICAgIGlmICghY2hpbGQua2V5KSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2NoaWxkLmxhYmVsfSIgaGFzIG5vIGtleS4gc2tpcHBpbmcuYCk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFsdWVPYmplY3RbY2hpbGQua2V5XSA9IGNoaWxkLnZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZhbHVlT2JqZWN0OwogICAgICAgIH0KICAgICAgICBhc3luYyBnYXRoZXJBbmREaXNwYXRjaCgpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlT2JqZWN0ID0gYXdhaXQgdGhpcy5jb2xsZWN0Rm9ybURhdGEoKTsKICAgICAgICAgIGNvbnN0IGZvcm1EYXRhRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImZvcm1EYXRhIiwgewogICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICBkYXRhOiB2YWx1ZU9iamVjdAogICAgICAgICAgICB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChmb3JtRGF0YUV2ZW50KTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJkaXNwYXRjaGVkIGRhdGE6Iik7CiAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZU9iamVjdCk7CiAgICAgICAgfQogICAgICAgIHNldFN0YXR1cyh2aXN1YWxTdGF0ZUFyZywgdGV4dFN0YXRlQXJnKSB7CiAgICAgICAgICBjb25zdCBpbnB1dENoaWxkcmVuID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgICAgICBzd2l0Y2ggKHZpc3VhbFN0YXRlQXJnKSB7CiAgICAgICAgICAgIGNhc2UgIm5vcm1hbCI6CiAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLnN0YXR1cyA9ICJub3JtYWwiOwogICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRDaGlsZCBvZiBpbnB1dENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJwZW5kaW5nIjoKICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgIGlucHV0Q2hpbGQuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3VjY2VzcyI6CiAgICAgICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInN1Y2Nlc3MiOwogICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRDaGlsZCBvZiBpbnB1dENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVycm9yIjoKICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5zdGF0dXMgPSAiZXJyb3IiOwogICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRDaGlsZCBvZiBpbnB1dENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzdWJtaXRCdXR0b24udGV4dCA9IHRleHRTdGF0ZUFyZzsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogcmVzZXRzIHRoZSBmb3JtCiAgICAgICAgICovCiAgICAgICAgcmVzZXQoKSB7CiAgICAgICAgICBjb25zdCBpbnB1dENoaWxkcmVuID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLnZhbHVlID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKCJub3JtYWwiLCAiU3VibWl0Iik7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGFkZEJlaGF2aW91cnMoKSB7CiAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXZlbnQpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgICBpZiAoIUZPUk1fSU5QVVRfVFlQRVMuaW5jbHVkZXModGFyZ2V0LmNvbnN0cnVjdG9yKSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjIgPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRhcmdldCk7CiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IGNoaWxkcmVuMi5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBjaGlsZHJlbjJbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGFyZ2V0LmJsdXIoKTsKICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk/LmZvY3VzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlcyB0aGUgbGF5b3V0IG1vZGUgb2YgY2hpbGQgaW5wdXQgY29tcG9uZW50cyBiYXNlZCBvbiBmb3JtJ3MgaG9yaXpvbnRhbExheW91dCBwcm9wZXJ0eQogICAgICAgICAqLwogICAgICAgIHVwZGF0ZUNoaWxkcmVuTGF5b3V0TW9kZSgpIHsKICAgICAgICAgIGNvbnN0IGZvcm1DaGlsZHJlbiA9IHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgICAgICBpZiAoImxheW91dE1vZGUiIGluIGNoaWxkKSB7CiAgICAgICAgICAgICAgY2hpbGQubGF5b3V0TW9kZSA9ICJhdXRvIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgd2hlbiBwcm9wZXJ0aWVzIGNoYW5nZQogICAgICAgICAqLwogICAgICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiaG9yaXpvbnRhbExheW91dCIpKSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzQodGhpcywgX2hvcml6b250YWxMYXlvdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzNChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0Zvcm0yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24vZGVlcy1idXR0b24uZGVtby5qcwp2YXIgZGVtb0Z1bmMyNjsKdmFyIGluaXRfZGVlc19idXR0b25fZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi9kZWVzLWJ1dHRvbi5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzKCk7CiAgICBpbml0X2RlZXNfcGFuZWwoKTsKICAgIGluaXRfZGVlc19mb3JtKCk7CiAgICBpbml0X2RlZXNfZm9ybV9zdWJtaXQoKTsKICAgIGluaXRfZGVlc19pbnB1dF90ZXh0KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgZGVtb0Z1bmMyNiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC52ZXJ0aWNhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1heC13aWR0aDogMzAwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pY29uLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1zbmlwcGV0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICBjb25zdCB0eXBlNSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInR5cGUiKSB8fCAiZGVmYXVsdCI7CiAgICAgICAgICBjb25zb2xlLmxvZyhgQnV0dG9uIHZhcmlhbnQgY2xpY2tlZDogJHt0eXBlNX1gKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJ1dHRvbiBWYXJpYW50cyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgdmlzdWFsIHN0eWxlcyBmb3IgdmFyaW91cyB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiPkRlZmF1bHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSI+U2Vjb25kYXJ5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+RGVzdHJ1Y3RpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiPk91dGxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5HaG9zdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ibGluayI+TGluayBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBzaXplID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgic2l6ZSIpIHx8ICJkZWZhdWx0IjsKICAgICAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gc2l6ZTogJHtzaXplfWApOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gQnV0dG9uIFNpemVzIn0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIHNpemVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0ic20iPlNtYWxsIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCI+RGVmYXVsdCBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyI+TGFyZ2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiAudGV4dD0keyJcdXsxRjY4MH0ifT48L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSIgdHlwZT0ic2Vjb25kYXJ5Ij5TbWFsbCBTZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImRlZmF1bHQiIHR5cGU9ImRlc3RydWN0aXZlIj5EZWZhdWx0IERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyIgdHlwZT0ib3V0bGluZSI+TGFyZ2UgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgaWNvbkJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGljb25CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgaGFzSWNvbiA9IGJ1dHRvbi5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTsKICAgICAgICAgIGlmIChoYXNJY29uKSB7CiAgICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gaGFzSWNvbi5nZXRBdHRyaWJ1dGUoImljb25GQSIpIHx8ICJ1bmtub3duIjsKICAgICAgICAgICAgY29uc29sZS5sb2coYEljb24gYnV0dG9uIGNsaWNrZWQ6ICR7aWNvbk5hbWV9YCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBCdXR0b25zIHdpdGggSWNvbnMifSAuc3VidGl0bGU9JHsiQ29tYmluaW5nIGljb25zIHdpdGggdGV4dCBmb3IgZW5oYW5jZWQgdmlzdWFsIGNvbW11bmljYXRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEFkZCBJdGVtCiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIERlbGV0ZQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RG93bmxvYWQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEb3dubG9hZAogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgc2l6ZT0ic20iPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmdlYXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBTZXR0aW5ncwogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRMZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgQmFjawogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIE5leHQKICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpjYXJldFJpZ2h0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZWZhdWx0Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpwbHVzIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ic2Vjb25kYXJ5Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNlYXJjaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Imdob3N0Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6TW9yZVZlcnRpY2FsIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVzdHJ1Y3RpdmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnRyYXNoIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgaWNvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgIm5vbmUiOwogICAgICAgICAgY29uc3QgcG9zaXRpb24zID0gYnV0dG9uLmdldEF0dHJpYnV0ZSgiaWNvblBvc2l0aW9uIikgfHwgImxlZnQiOwogICAgICAgICAgY29uc29sZS5sb2coYEljb24gcHJvcGVydHkgYnV0dG9uOiBpY29uPSR7aWNvbjN9LCBwb3NpdGlvbj0ke3Bvc2l0aW9uM31gKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIEljb25zIHZpYSBQcm9wZXJ0eSJ9IC5zdWJ0aXRsZT0keyJTaW1wbGlmaWVkIGljb24gc3ludGF4IHVzaW5nIHRoZSBpY29uIHByb3BlcnR5In0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGljb249ImZhOnBsdXMiPkFkZCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPkRlbGV0ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOkRvd25sb2FkIj5Eb3dubG9hZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIiBpY29uPSJmYTpnZWFyIj5TZXR0aW5nczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIGljb249ImZhOmNhcmV0TGVmdCI+QmFjazwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIGljb249ImZhOmNhcmV0UmlnaHQiIGljb25Qb3NpdGlvbj0icmlnaHQiPk5leHQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCIgaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJzZWNvbmRhcnkiIGljb249Imx1Y2lkZTpTZXR0aW5ncyI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiBpY29uPSJsdWNpZGU6U2VhcmNoIj48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Imdob3N0IiBpY29uPSJsdWNpZGU6TW9yZVZlcnRpY2FsIj48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1zbmlwcGV0Ij4KICAgICAgICAgICAgJmx0O2RlZXMtYnV0dG9uIGljb249ImZhOnBsdXMiJmd0O0FkZCBJdGVtJmx0Oy9kZWVzLWJ1dHRvbiZndDs8YnI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0IiZndDtOZXh0Jmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgcGVuZGluZ0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKTsKICAgICAgY29uc3Qgc3VjY2Vzc0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJzdWNjZXNzIl0nKTsKICAgICAgY29uc3QgZXJyb3JCdXR0b24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3N0YXR1cz0iZXJyb3IiXScpOwogICAgICBpZiAocGVuZGluZ0J1dHRvbikgewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIlBlbmRpbmcgYnV0dG9uIGlzIHNob3dpbmcgbG9hZGluZyBzdGF0ZSIpOwogICAgICAgIH0sIDFlMyk7CiAgICAgIH0KICAgICAgaWYgKHN1Y2Nlc3NCdXR0b24pIHsKICAgICAgICBzdWNjZXNzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiU3VjY2VzcyBzdGF0ZSBidXR0b24gY2xpY2tlZCIpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChlcnJvckJ1dHRvbikgewogICAgICAgIGVycm9yQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjY2xpY2stb3V0cHV0Iik7CiAgICAgIGNvbnN0IGNsaWNrTWVCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtYnV0dG9uOmZpcnN0LW9mLXR5cGUiKTsKICAgICAgY29uc3QgZGF0YUJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0ic2Vjb25kYXJ5Il0nKTsKICAgICAgY29uc3QgYXN5bmNCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9ImRlc3RydWN0aXZlIl0nKTsKICAgICAgaWYgKGNsaWNrTWVCdG4gJiYgb3V0cHV0KSB7CiAgICAgICAgY2xpY2tNZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYENsaWNrZWQ6IERlZmF1bHQgYnV0dG9uIGF0ICR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0xvY2FsZVRpbWVTdHJpbmcoKX1gOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChkYXRhQnRuICYmIG91dHB1dCkgewogICAgICAgIGRhdGFCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsIChlMTEpID0+IHsKICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtlMTEuZGV0YWlsLmRhdGF9YDsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoYXN5bmNCdG4gJiYgb3V0cHV0KSB7CiAgICAgICAgYXN5bmNCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJQcm9jZXNzaW5nLi4uIjsKICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI4LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkFjdGlvbiBjb21wbGV0ZWQhIjsKICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBFdmVudCBIYW5kbGluZyJ9IC5zdWJ0aXRsZT0keyJJbnRlcmFjdGl2ZSBleGFtcGxlcyB3aXRoIGNsaWNrIGV2ZW50IGhhbmRsaW5nIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DbGljayBNZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiAuZXZlbnREZXRhaWxEYXRhPSR7ImN1c3RvbS1kYXRhLTEyMyJ9PgogICAgICAgICAgICBDbGljayB3aXRoIERhdGEKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiPkFzeW5jIEFjdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iY2xpY2stb3V0cHV0IiBjbGFzcz0iZGVtby1vdXRwdXQiPgogICAgICAgICAgPGVtPkNsaWNrIGEgYnV0dG9uIHRvIHNlZSB0aGUgcmVzdWx0Li4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZm9ybS1vdXRwdXQiKTsKICAgICAgaWYgKGZvcm0gJiYgb3V0cHV0KSB7CiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsIChlMTEpID0+IHsKICAgICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLmRhdGEsIG51bGwsIDIpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNvbnN0IGRyYWZ0QnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpOwogICAgICBjb25zdCBjYW5jZWxCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtYnV0dG9uW3R5cGU9Imdob3N0Il0nKTsKICAgICAgaWYgKGRyYWZ0QnRuKSB7CiAgICAgICAgZHJhZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJTYXZlIERyYWZ0IGNsaWNrZWQiKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY2FuY2VsQnRuKSB7CiAgICAgICAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgICAgY29uc3QgdHlwZTUgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CiAgICAgICAgaWYgKHR5cGU1KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgTGVnYWN5IHR5cGUgIiR7dHlwZTV9IiBpcyBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlgKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI4LiBCYWNrd2FyZCBDb21wYXRpYmlsaXR5In0gLnN1YnRpdGxlPSR7Ik9sZCBidXR0b24gdHlwZXMgYXJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkIHRvIG5ldyB2YXJpYW50cyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ibm9ybWFsIj5Ob3JtYWwg4oaSIERlZmF1bHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5IaWdobGlnaHRlZCDihpIgRGVzdHJ1Y3RpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRpc2NyZWV0Ij5EaXNjcmVldCDihpIgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iYmlnIj5CaWcg4oaSIExhcmdlIFNpemU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAxNnB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsiPgogICAgICAgICAgVGhlc2UgbGVnYWN5IHR5cGUgdmFsdWVzIGFyZSBtYWludGFpbmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJ1dCB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIG5ldyB2YXJpYW50IHN5c3RlbS4KICAgICAgICA8L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgYWN0aW9uR3JvdXAgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdOwogICAgICBjb25zdCBkYW5nZXJHcm91cCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLnZlcnRpY2FsLWdyb3VwIilbMV07CiAgICAgIGlmIChhY3Rpb25Hcm91cCkgewogICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Hcm91cC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uLCBpbmRleDIpID0+IHsKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBbIlNhdmUgQ2hhbmdlcyIsICJEaXNjYXJkIiwgIkhlbHAiXVtpbmRleDJdOwogICAgICAgICAgICBjb25zb2xlLmxvZyhgQWN0aW9uIGdyb3VwOiAke2FjdGlvbn0gY2xpY2tlZGApOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGRhbmdlckdyb3VwKSB7CiAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRhbmdlckdyb3VwLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4MikgPT4gewogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IFsiRGVsZXRlIEFjY291bnQiLCAiQXJjaGl2ZSBEYXRhIiwgIk5vdCBBdmFpbGFibGUiXVtpbmRleDJdOwogICAgICAgICAgICBpZiAoaW5kZXgyICE9PSAyKSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coYERhbmdlciB6b25lOiAke2FjdGlvbn0gY2xpY2tlZGApOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI5LiBBZHZhbmNlZCBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJDb21wbGV4IGJ1dHRvbiBjb25maWd1cmF0aW9ucyBhbmQgcmVhbC13b3JsZCB1c2UgY2FzZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsLWdyb3VwIj4KICAgICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+QWN0aW9uIEdyb3VwPC9oND4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTYXZlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBTYXZlIENoYW5nZXMKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InNlY29uZGFyeSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlVuZG8yIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBEaXNjYXJkCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkhlbHBDaXJjbGUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIEhlbHAKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InZlcnRpY2FsLWdyb3VwIj4KICAgICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+RGFuZ2VyIFpvbmU8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnRyYXNoIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBEZWxldGUgQWNjb3VudAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkFyY2hpdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIEFyY2hpdmUgRGF0YQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiIHNpemU9InNtIiBkaXNhYmxlZD4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpCYW4iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIE5vdCBBdmFpbGFibGUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDI0cHg7Ij4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgOHB4IDA7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsiPkNvZGUgRXhhbXBsZTo8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1zbmlwcGV0Ij4KICAgICAgICAgICAgJmx0O2RlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBpY29uPSJsdWNpZGU6U2F2ZSIgQGNsaWNrZWQ9Ilwke2hhbmRsZUNsaWNrfSImZ3Q7PGJyPgogICAgICAgICAgICAmbmJzcDsmbmJzcDtTYXZlIENoYW5nZXM8YnI+CiAgICAgICAgICAgICZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmpzCnZhciBfX2VzRGVjb3JhdGUzNCwgX19ydW5Jbml0aWFsaXplcnMzNSwgRGVlc0J1dHRvbjsKdmFyIGluaXRfZGVlc19idXR0b24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24vZGVlcy1idXR0b24uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfYnV0dG9uX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTM0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNCdXR0b24gPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1idXR0b24iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3RleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ldmVudERldGFpbERhdGFfZGVjb3JhdG9yczsKICAgICAgbGV0IF9ldmVudERldGFpbERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGlzYWJsZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzSGlkZGVuX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogICAgICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbnNpZGVGb3JtX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25Qb3NpdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNCdXR0b24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZSwKICAgICAgICAgICAgaGFzQ2hhbmdlZCgpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSldOwogICAgICAgICAgX2V2ZW50RGV0YWlsRGF0YV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2Rpc2FibGVkX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfaXNIaWRkZW5fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgICAgIH0pXTsKICAgICAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZwogICAgICAgICAgfSldOwogICAgICAgICAgX2luc2lkZUZvcm1fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICAgICAgX2ljb25Qb3NpdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRleHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RleHRfaW5pdGlhbGl6ZXJzLCBfdGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50RGV0YWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnREZXRhaWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50RGV0YWlsRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmV2ZW50RGV0YWlsRGF0YSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycywgX2V2ZW50RGV0YWlsRGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZGlzYWJsZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rpc2FibGVkX2luaXRpYWxpemVycywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pc0hpZGRlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hpZGRlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIaWRkZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIaWRkZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0hpZGRlbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NpemVfaW5pdGlhbGl6ZXJzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN0YXR1cyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfaW5zaWRlRm9ybV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnNpZGVGb3JtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnNpZGVGb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluc2lkZUZvcm0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pbnNpZGVGb3JtID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnNpZGVGb3JtX2luaXRpYWxpemVycywgX2luc2lkZUZvcm1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvbl9pbml0aWFsaXplcnMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvblBvc2l0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNCdXR0b24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyNjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiQnV0dG9uIl07CiAgICAgICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgICAgIGdldCB0ZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGV2ZW50RGV0YWlsRGF0YSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGV2ZW50RGV0YWlsRGF0YSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9ldmVudERldGFpbERhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGRpc2FibGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc0hpZGRlbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNIaWRkZW4odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2lzSGlkZGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJkZWZhdWx0IikpOwogICAgICAgIGdldCB0eXBlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpKTsKICAgICAgICBnZXQgc2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICAgICAgZ2V0IHN0YXR1cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5zaWRlRm9ybV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2luc2lkZUZvcm1faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpbnNpZGVGb3JtKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2luc2lkZUZvcm1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGluc2lkZUZvcm0odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaW5zaWRlRm9ybV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgaWNvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgICAgIGdldCBpY29uUG9zaXRpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uUG9zaXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgaWYgKCF0aGlzLmluc2lkZUZvcm0gJiYgdGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKSkgewogICAgICAgICAgICB0aGlzLmluc2lkZUZvcm0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogRm9ybSBzcGFjaW5nIHN0eWxlcyAqLwogICAgICA6aG9zdChbaW5zaWRlLWZvcm1dKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXTpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLWZvcm1baG9yaXpvbnRhbC1sYXlvdXRdIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgfQoKICAgICAgLmJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLyogU2l6ZSB2YXJpYW50cyAqLwogICAgICAuYnV0dG9uLnNpemUtZGVmYXVsdCB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24uc2l6ZS1zbSB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24uc2l6ZS1sZyB7CiAgICAgICAgaGVpZ2h0OiA0NHB4OwogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24uc2l6ZS1pY29uIHsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyogRGVmYXVsdCB2YXJpYW50ICovCiAgICAgIC5idXR0b24uZGVmYXVsdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgICB9CgogICAgICAuYnV0dG9uLmRlZmF1bHQ6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMC4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCAiaHNsKDIxNSAyMC4yJSAyMCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlZmF1bHQ6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGVzdHJ1Y3RpdmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA2MC4yJSk7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDk4JSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDg0LjIlIDU2LjIlKTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDg0LjIlIDUyLjIlKTsKICAgICAgfQoKICAgICAgLyogT3V0bGluZSB2YXJpYW50ICovCiAgICAgIC5idXR0b24ub3V0bGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24ub3V0bGluZTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgODUlKSIsICJoc2woMjE1IDIwLjIlIDI2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5vdXRsaW5lOmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxMy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFNlY29uZGFyeSB2YXJpYW50ICovCiAgICAgIC5idXR0b24uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxMy44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24uc2Vjb25kYXJ5OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA4NSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICB9CgogICAgICAvKiBHaG9zdCB2YXJpYW50ICovCiAgICAgIC5idXR0b24uZ2hvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmdob3N0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLmdob3N0OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxMy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIExpbmsgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmxpbmsgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuYnV0dG9uLmxpbms6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBTdGF0dXMgc3RhdGVzICovCiAgICAgIC5idXR0b24ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zdWNjZXNzLAogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDM2cHg7IC8qIFNwYWNlIGZvciBzcGlubmVyICovCiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbS5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtc20uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLXNtLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDMycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZy5wZW5kaW5nLAogICAgICAuYnV0dG9uLnNpemUtbGcuc3VjY2VzcywKICAgICAgLmJ1dHRvbi5zaXplLWxnLmVycm9yIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDQ0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24ucGVuZGluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5idXR0b24uc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNjIuOCUgNzAuNiUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgNjIuOCUgNzAuNiUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogSGlkZGVuIHN0YXRlICovCiAgICAgIC5idXR0b24uaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZSAqLwogICAgICAuYnV0dG9uOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgc3Bpbm5lciAqLwogICAgICBkZWVzLXNwaW5uZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMHB4OwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi5zaXplLXNtIGRlZXMtc3Bpbm5lciB7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi5zaXplLWxnIGRlZXMtc3Bpbm5lciB7CiAgICAgICAgbGVmdDogMTRweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEljb24gc2l6aW5nIHdpdGhpbiBidXR0b25zICovCiAgICAgIC5idXR0b24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi5zaXplLWxnIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CgogICAgICAvKiBUZXh0IGFsaWdubWVudCAqLwogICAgICAudGV4dGJveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgYAogICAgICAgIF07CiAgICAgICAgLyoqCiAgICAgICAgICogRXh0cmFjdHMgaWNvbiBhbmQgdGV4dCBmcm9tIGxpZ2h0IERPTSBhbmQgc2V0cyBwcm9wZXJ0aWVzCiAgICAgICAgICovCiAgICAgICAgZXh0cmFjdExpZ2h0RG9tKCkgewogICAgICAgICAgY29uc3QgaWNvbkVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZmlsdGVyKChub2RlMikgPT4gbm9kZTIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKS5tYXAoKG5vZGUyKSA9PiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICAgICAgaWYgKHRleHRDb250ZW50ICYmICF0aGlzLnRleHQpIHsKICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGV4dENvbnRlbnQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaWNvbkVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgaWNvblZhbHVlID0gaWNvbkVsZW1lbnQuaWNvbiB8fCBpY29uRWxlbWVudC5nZXRBdHRyaWJ1dGUoImljb24iKSB8fCAoaWNvbkVsZW1lbnQuaWNvbkZBID8gYGZhOiR7aWNvbkVsZW1lbnQuaWNvbkZBfWAgOiBudWxsKTsKICAgICAgICAgICAgaWYgKGljb25WYWx1ZSkgewogICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuMiA9IEFycmF5LmZyb20odGhpcy5jaGlsZE5vZGVzKTsKICAgICAgICAgICAgICBjb25zdCBpY29uSW5kZXggPSBjaGlsZHJlbjIuaW5kZXhPZihpY29uRWxlbWVudCk7CiAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gY2hpbGRyZW4yLmZpbHRlcigobm9kZTIpID0+IG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKTsKICAgICAgICAgICAgICBpZiAodGV4dE5vZGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGV4dEluZGV4ID0gY2hpbGRyZW4yLmluZGV4T2YodGV4dE5vZGVzWzBdKTsKICAgICAgICAgICAgICAgIHRoaXMuaWNvblBvc2l0aW9uID0gaWNvbkluZGV4IDwgZmlyc3RUZXh0SW5kZXggPyAibGVmdCIgOiAicmlnaHQiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLmljb24gPSBpY29uVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWNvbkVsZW1lbnQucmVtb3ZlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmlubmVySFRNTCA9ICIiOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCB0eXBlTWFwID0gewogICAgICAgICAgICAibm9ybWFsIjogImRlZmF1bHQiLAogICAgICAgICAgICAiaGlnaGxpZ2h0ZWQiOiAiZGVzdHJ1Y3RpdmUiLAogICAgICAgICAgICAiZGlzY3JlZXQiOiAib3V0bGluZSIsCiAgICAgICAgICAgICJiaWciOiAiZGVmYXVsdCIKICAgICAgICAgICAgLy8gV2lsbCB1c2Ugc2l6ZSBpbnN0ZWFkCiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgYWN0dWFsVHlwZSA9IHR5cGVNYXBbdGhpcy50eXBlXSB8fCB0aGlzLnR5cGU7CiAgICAgICAgICBjb25zdCBhY3R1YWxTaXplID0gdGhpcy50eXBlID09PSAiYmlnIiA/ICJsZyIgOiB0aGlzLnNpemU7CiAgICAgICAgICBjb25zdCBsZWZ0SWNvbiA9IHRoaXMuaWNvblBvc2l0aW9uID09PSAibGVmdCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICAgICAgY29uc3QgcmlnaHRJY29uID0gdGhpcy5pY29uUG9zaXRpb24gPT09ICJyaWdodCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICAgICAgY29uc3QgaXNJY29uT25seSA9IGFjdHVhbFNpemUgPT09ICJpY29uIiAmJiB0aGlzLmljb247CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYnV0dG9uICR7dGhpcy5pc0hpZGRlbiA/ICJoaWRkZW4iIDogIiJ9ICR7YWN0dWFsVHlwZX0gc2l6ZS0ke2FjdHVhbFNpemV9ICR7dGhpcy5zdGF0dXN9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzID09PSAibm9ybWFsIiA/IGIyYGAgOiBiMmAKICAgICAgICAgIDxkZWVzLXNwaW5uZXIKICAgICAgICAgICAgLmJudz0ke3RydWV9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7YWN0dWFsU2l6ZSA9PT0gInNtIiA/IDE0IDogYWN0dWFsU2l6ZSA9PT0gImxnIiA/IDE4IDogMTZ9IgogICAgICAgICAgPjwvZGVlcy1zcGlubmVyPgogICAgICAgIGB9CiAgICAgICAgJHtsZWZ0SWNvbn0KICAgICAgICAke2lzSWNvbk9ubHkgPyAiIiA6IGIyYDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0IHx8ICJCdXR0b24ifTwvZGl2PmB9CiAgICAgICAgJHtyaWdodEljb259CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzcGF0Y2hDbGljaygpIHsKICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLCB7CiAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgIGRhdGE6IHRoaXMuZXZlbnREZXRhaWxEYXRhCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgdGhpcy5leHRyYWN0TGlnaHREb20oKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNCdXR0b24yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLXN0YXRzZ3JpZC9kZWVzLXN0YXRzZ3JpZC5qcwp2YXIgX19lc0RlY29yYXRlMzUsIF9fcnVuSW5pdGlhbGl6ZXJzMzYsIERlZXNTdGF0c0dyaWQ7CnZhciBpbml0X2RlZXNfc3RhdHNncmlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1zdGF0c2dyaWQvZGVlcy1zdGF0c2dyaWQuanMiKCkgewogICAgaW5pdF9kZWVzX3N0YXRzZ3JpZF9kZW1vKCk7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogICAgaW5pdF9kZWVzX2J1dHRvbigpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlMzUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnMzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1N0YXRzR3JpZCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0YXRzZ3JpZCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfdGlsZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90aWxlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21pblRpbGVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9nYXBfZGVjb3JhdG9yczsKICAgICAgbGV0IF9nYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9ncmlkQWN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ncmlkQWN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRleHRNZW51QWN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1N0YXRzR3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90aWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9nYXBfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9jb250ZXh0TWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfdGlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGlsZXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbGVzX2luaXRpYWxpemVycywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF9taW5UaWxlV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluVGlsZVdpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5UaWxlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluVGlsZVdpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWluVGlsZVdpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF9nYXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ2FwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJnYXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ2FwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZ2FwID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9nYXBfaW5pdGlhbGl6ZXJzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF9ncmlkQWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJncmlkQWN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZ3JpZEFjdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JpZEFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5ncmlkQWN0aW9ucyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudVZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRleHRNZW51VmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudVZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb250ZXh0TWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51UG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGV4dE1lbnVQb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGV4dE1lbnVQb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudVBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29udGV4dE1lbnVQb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF9jb250ZXh0TWVudUFjdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGV4dE1lbnVBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZXh0TWVudUFjdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGV4dE1lbnVBY3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29udGV4dE1lbnVBY3Rpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM1KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNTdGF0c0dyaWQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM3OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJEYXRhIFZpZXciXTsKICAgICAgICAjdGlsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX3RpbGVzX2luaXRpYWxpemVycywgW10pOwogICAgICAgIGdldCB0aWxlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGlsZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfdGlsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCAyNTApKTsKICAgICAgICBnZXQgbWluVGlsZVdpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21pblRpbGVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWluVGlsZVdpZHRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfaW5pdGlhbGl6ZXJzLCAxNikpOwogICAgICAgIGdldCBnYXAoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZ2FwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBnYXAodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2dyaWRBY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBncmlkQWN0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZ3JpZEFjdGlvbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29udGV4dE1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBjb250ZXh0TWVudVZpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29udGV4dE1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZXh0TWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb250ZXh0TWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgICAgICBnZXQgY29udGV4dE1lbnVQb3NpdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudVBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZXh0TWVudVBvc2l0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29udGV4dE1lbnVQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29udGV4dE1lbnVBY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX2NvbnRleHRNZW51QWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGNvbnRleHRNZW51QWN0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbnRleHRNZW51QWN0aW9ucyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRleHRNZW51QWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIGNvbnNpc3RlbnQgc3BhY2luZyBhbmQgc2l6aW5nICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLWdyaWQtZ2FwOiAxMnB4OwogICAgICAgIC0tdGlsZS1wYWRkaW5nOiAxNnB4OwogICAgICAgIC0taGVhZGVyLXNwYWNpbmc6IDEycHg7CiAgICAgICAgLS1jb250ZW50LW1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgLS12YWx1ZS1mb250LXNpemU6IDI2cHg7CiAgICAgICAgLS11bml0LWZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLWxhYmVsLWZvbnQtc2l6ZTogMTJweDsKICAgICAgICAtLXRpdGxlLWZvbnQtc2l6ZTogMTNweDsKICAgICAgICAtLWRlc2NyaXB0aW9uLXNwYWNpbmc6IDhweDsKICAgICAgICAtLWJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAtLXRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICB9CgogICAgICAvKiBHcmlkIExheW91dCAqLwogICAgICAuZ3JpZC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogY2FsYyh2YXIoLS1ncmlkLWdhcCkgKiAxLjUpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmdyaWQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmdyaWQtYWN0aW9ucyBkZWVzLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICB9CgogICAgICAuc3RhdHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KCR7cigyNTApfXB4LCAxZnIpKTsKICAgICAgICBnYXA6ICR7cigxNil9cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC8qIFRpbGUgQmFzZSBTdHlsZXMgKi8KICAgICAgLnN0YXRzLXRpbGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTsKICAgICAgICBwYWRkaW5nOiB2YXIoLS10aWxlLXBhZGRpbmcpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uKSBlYXNlOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGQwZDBkIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMGQwZDAiLCAiIzJhMmEyYSIpfTsKICAgICAgfQoKICAgICAgLnN0YXRzLXRpbGUuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZTpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAzKSIsICJyZ2JhKDAsMCwwLDAuMTUpIil9OwogICAgICB9CgogICAgICAvKiBUaWxlIEhlYWRlciAqLwogICAgICAudGlsZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWhlYWRlci1zcGFjaW5nKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRpbGUtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGl0bGUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgfQoKICAgICAgLnRpbGUtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIFRpbGUgQ29udGVudCAqLwogICAgICAudGlsZS1jb250ZW50IHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1jb250ZW50LW1pbi1oZWlnaHQpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudGlsZS12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC50aWxlLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudGlsZS1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiB2YXIoLS1kZXNjcmlwdGlvbi1zcGFjaW5nKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLyogR2F1Z2UgU3R5bGVzICovCiAgICAgIC5nYXVnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgICBoZWlnaHQ6IDcwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IC04cHg7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmdhdWdlLWJhY2tncm91bmQgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgfQoKICAgICAgLmdhdWdlLWZpbGwgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiA2OwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICB0cmFuc2l0aW9uOiBzdHJva2UtZGFzaG9mZnNldCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC5nYXVnZS10ZXh0IHsKICAgICAgICBmaWxsOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5nYXVnZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmaWxsOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC8qIFBlcmNlbnRhZ2UgU3R5bGVzICovCiAgICAgIC5wZXJjZW50YWdlLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLnBlcmNlbnRhZ2UtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC8qIE11bHRpIFBlcmNlbnRhZ2UgU3R5bGVzICovCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1pdGVtcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtZmlsbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzMzMzIiwgIiNlMGUwZTAiKX07CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgfQoKICAgICAgLyogQ1BVIENvcmVzIFN0eWxlcyAqLwogICAgICAuY3B1LWNvcmVzLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWJhcnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGdhcDogM3B4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzLmNlbnRlcmVkIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiA2cHg7CiAgICAgICAgbWF4LXdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci13cmFwcGVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItZmlsbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2NjY2IiwgIiM4ODg4ODgiKX07CiAgICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItZmlsbC5sb3cgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItZmlsbC5tZWRpdW0gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwuaGlnaCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA4NC4yJSA2MC4yJSkiKX07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiA5cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC8qIFBhcnRpdGlvbiBTdHlsZXMgKi8KICAgICAgLnBhcnRpdGlvbi13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXBlcmNlbnRhZ2UgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAucGFydGl0aW9uLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXItZmlsbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzMzMzIiwgIiNlMGUwZTAiKX07CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXItZmlsbC53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXItZmlsbC5jcml0aWNhbCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA4NC4yJSA2MC4yJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1zdGF0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tZXRhIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLWZpbGVzeXN0ZW0gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLW1vdW50cG9pbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERpc2sgU3R5bGVzICovCiAgICAgIC5kaXNrLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlzay1jYXBhY2l0eSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5kaXNrLW1vZGVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmRpc2stdHlwZS1iYWRnZSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLmRpc2stbWV0cmljcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5kaXNrLWlvcHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLWlvcHMtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLWlvcHMtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAuZGlzay1pb3BzLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtZmlsbC5nb29kIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtZmlsbC53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwuY3JpdGljYWwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAvKiBUcmVuZCBTdHlsZXMgKi8KICAgICAgLnRyZW5kLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50cmVuZC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudHJlbmQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAudHJlbmQtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC50cmVuZC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1sYWJlbC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAudHJlbmQtZ3JhcGggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLXN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAudHJlbmQtbGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5OTk5IiwgIiM2NjY2NjYiKX07CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICAgICAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgICAgIH0KCiAgICAgIC50cmVuZC1hcmVhIHsKICAgICAgICBmaWxsOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNTAsIDE1MCwgMTUwLCAwLjA4KSIsICJyZ2JhKDEwMCwgMTAwLCAxMDAsIDAuMDgpIil9OwogICAgICB9CgogICAgICAvKiBUZXh0IFZhbHVlIFN0eWxlcyAqLwogICAgICAudGV4dC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC8qIENvbnRleHQgTWVudSAqLwogICAgICBkZWVzLWNvbnRleHRtZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JpZEFjdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gCiAgICAgICAgICAgICAgICBAY2xpY2tlZD0keygpID0+IHRoaXMuaGFuZGxlR3JpZEFjdGlvbihhY3Rpb24pfQogICAgICAgICAgICAgICAgdHlwZT0ib3V0bGluZSIKICAgICAgICAgICAgICAgIHNpemU9InNtIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoKHRpbGUpID0+IHRoaXMucmVuZGVyVGlsZSh0aWxlKSl9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgICAgICAueD0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54fQogICAgICAgICAgLnk9JHt0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueX0KICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmNvbnRleHRNZW51QWN0aW9uc30KICAgICAgICAgIEBjbGlja2VkPSR7KCkgPT4gdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZX0KICAgICAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJUaWxlKHRpbGUpIHsKICAgICAgICAgIGNvbnN0IGhhc0FjdGlvbnMgPSB0aWxlLmFjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA+IDA7CiAgICAgICAgICBjb25zdCBjbGlja2FibGUgPSBoYXNBY3Rpb25zICYmIHRpbGUuYWN0aW9ucy5sZW5ndGggPT09IDE7CiAgICAgICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuICYmIHRpbGUuY29sdW1uU3BhbiA+IDEgPyB0aWxlLmNvbHVtblNwYW4gOiB2b2lkIDA7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ic3RhdHMtdGlsZSAke2NsaWNrYWJsZSA/ICJjbGlja2FibGUiIDogIiJ9IgogICAgICAgIHN0eWxlPSIke2NvbHVtblNwYW4gPyBgZ3JpZC1jb2x1bW46IHNwYW4gJHtjb2x1bW5TcGFufWAgOiAiIn0iCiAgICAgICAgQGNsaWNrPSR7Y2xpY2thYmxlID8gKCkgPT4gdGhpcy5oYW5kbGVUaWxlQWN0aW9uKHRpbGUuYWN0aW9uc1swXSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7aGFzQWN0aW9ucyA/IChlMTEpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51KGUxMSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWhlYWRlciI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpbGUtdGl0bGUiPiR7dGlsZS50aXRsZX08L2gzPgogICAgICAgICAgJHt0aWxlLmljb24gPyBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0idGlsZS1pY29uIiAuaWNvbj0ke3RpbGUuaWNvbn0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQodGlsZSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHt0aWxlLmRlc2NyaXB0aW9uICYmIHRpbGUudHlwZSAhPT0gInRyZW5kIiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1kZXNjcmlwdGlvbiI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJUaWxlQ29udGVudCh0aWxlKSB7CiAgICAgICAgICBzd2l0Y2ggKHRpbGUudHlwZSkgewogICAgICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiIHN0eWxlPSIke3RpbGUuY29sb3IgPyBgY29sb3I6ICR7dGlsZS5jb2xvcn1gIDogIiJ9Ij4KICAgICAgICAgICAgPHNwYW4+JHt0aWxlLnZhbHVlfTwvc3Bhbj4KICAgICAgICAgICAgJHt0aWxlLnVuaXQgPyBiMmA8c3BhbiBjbGFzcz0idGlsZS11bml0Ij4ke3RpbGUudW5pdH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgICAgICAgY2FzZSAiZ2F1Z2UiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckdhdWdlKHRpbGUpOwogICAgICAgICAgICBjYXNlICJwZXJjZW50YWdlIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQZXJjZW50YWdlKHRpbGUpOwogICAgICAgICAgICBjYXNlICJ0cmVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVHJlbmQodGlsZSk7CiAgICAgICAgICAgIGNhc2UgIm11bHRpUGVyY2VudGFnZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTXVsdGlQZXJjZW50YWdlKHRpbGUpOwogICAgICAgICAgICBjYXNlICJjcHVDb3JlcyI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3B1Q29yZXModGlsZSk7CiAgICAgICAgICAgIGNhc2UgInBhcnRpdGlvbiI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFydGl0aW9uKHRpbGUpOwogICAgICAgICAgICBjYXNlICJkaXNrIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJEaXNrKHRpbGUpOwogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgICR7dGlsZS52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9InRpbGUtdmFsdWUiPiR7dGlsZS52YWx1ZX08L2Rpdj5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZW5kZXJHYXVnZSh0aWxlKSB7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlIDogcGFyc2VGbG9hdCh0aWxlLnZhbHVlKTsKICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aWxlLmdhdWdlT3B0aW9ucyB8fCB7IG1pbjogMCwgbWF4OiAxMDAgfTsKICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAodmFsdWUyIC0gb3B0aW9ucy5taW4pIC8gKG9wdGlvbnMubWF4IC0gb3B0aW9ucy5taW4pICogMTAwOwogICAgICAgICAgY29uc3Qgd2lkdGggPSAxMjA7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSA3MDsKICAgICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gNjsKICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHJva2VXaWR0aCAvIDIgKyAyOwogICAgICAgICAgY29uc3QgcmFkaXVzID0gNDA7CiAgICAgICAgICBjb25zdCBjZW50ZXJYID0gd2lkdGggLyAyOwogICAgICAgICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAtIHBhZGRpbmc7CiAgICAgICAgICBjb25zdCBzdGFydFggPSBjZW50ZXJYIC0gcmFkaXVzOwogICAgICAgICAgY29uc3Qgc3RhcnRZID0gY2VudGVyWTsKICAgICAgICAgIGNvbnN0IGVuZFggPSBjZW50ZXJYICsgcmFkaXVzOwogICAgICAgICAgY29uc3QgZW5kWSA9IGNlbnRlclk7CiAgICAgICAgICBjb25zdCBhcmNQYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAwIDEgJHtlbmRYfSAke2VuZFl9YDsKICAgICAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSBNYXRoLlBJICogcmFkaXVzOwogICAgICAgICAgY29uc3Qgc3Ryb2tlRGFzaG9mZnNldCA9IGNpcmN1bWZlcmVuY2UgLSBjaXJjdW1mZXJlbmNlICogcGVyY2VudGFnZSAvIDEwMDsKICAgICAgICAgIGxldCBzdHJva2VDb2xvciA9IHRpbGUuY29sb3IgfHwgY3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI4LjglKSIsICJoc2woMjEwIDQwJSA3OCUpIik7CiAgICAgICAgICBpZiAob3B0aW9ucy50aHJlc2hvbGRzKSB7CiAgICAgICAgICAgIGNvbnN0IHNvcnRlZFRocmVzaG9sZHMgPSBbLi4ub3B0aW9ucy50aHJlc2hvbGRzXS5zb3J0KChhNSwgYjUpID0+IGI1LnZhbHVlIC0gYTUudmFsdWUpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHRocmVzaG9sZCBvZiBzb3J0ZWRUaHJlc2hvbGRzKSB7CiAgICAgICAgICAgICAgaWYgKHZhbHVlMiA+PSB0aHJlc2hvbGQudmFsdWUpIHsKICAgICAgICAgICAgICAgIHN0cm9rZUNvbG9yID0gdGhyZXNob2xkLmNvbG9yOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAke3dpZHRofSAke2hlaWdodH0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7YXJjUGF0aH0iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke2FyY1BhdGh9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtzdHJva2VDb2xvcn0iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtjaXJjdW1mZXJlbmNlfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtzdHJva2VEYXNob2Zmc2V0fSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtjZW50ZXJYfSIgeT0iJHtjZW50ZXJZIC0gOH0iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPgogICAgICAgICAgICAgIDx0c3Bhbj4ke3ZhbHVlMn08L3RzcGFuPiR7dGlsZS51bml0ID8gYjJgPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7dGlsZS51bml0fTwvdHNwYW4+YCA6ICIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJQZXJjZW50YWdlKHRpbGUpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB0aWxlLnZhbHVlID09PSAibnVtYmVyIiA/IHRpbGUudmFsdWUgOiBwYXJzZUZsb2F0KHRpbGUudmFsdWUpOwogICAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgubWluKDEwMCwgTWF0aC5tYXgoMCwgdmFsdWUyKSk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS12YWx1ZSI+JHtwZXJjZW50YWdlfSU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLWJhciI+CiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0icGVyY2VudGFnZS1maWxsIiAKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JTsgJHt0aWxlLmNvbG9yID8gYGJhY2tncm91bmQ6ICR7dGlsZS5jb2xvcn1gIDogIiJ9IgogICAgICAgICAgPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlclRyZW5kKHRpbGUpIHsKICAgICAgICAgIGlmICghdGlsZS50cmVuZERhdGEgfHwgdGlsZS50cmVuZERhdGEubGVuZ3RoIDwgMikgewogICAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBkYXRhMTEgPSB0aWxlLnRyZW5kRGF0YTsKICAgICAgICAgIGNvbnN0IG1heDMgPSBNYXRoLm1heCguLi5kYXRhMTEpOwogICAgICAgICAgY29uc3QgbWluMyA9IE1hdGgubWluKC4uLmRhdGExMSk7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBtYXgzIC0gbWluMyB8fCAxOwogICAgICAgICAgY29uc3Qgd2lkdGggPSAzMDA7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSAzMjsKICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyOwogICAgICAgICAgY29uc3QgcG9pbnRzID0gZGF0YTExLm1hcCgodmFsdWUyLCBpbmRleDIpID0+IHsKICAgICAgICAgICAgY29uc3QgeDQgPSBpbmRleDIgLyAoZGF0YTExLmxlbmd0aCAtIDEpICogd2lkdGg7CiAgICAgICAgICAgIGNvbnN0IHk0ID0gcGFkZGluZyArIChoZWlnaHQgLSAyICogcGFkZGluZykgLSAodmFsdWUyIC0gbWluMykgLyByYW5nZTIgKiAoaGVpZ2h0IC0gMiAqIHBhZGRpbmcpOwogICAgICAgICAgICByZXR1cm4gYCR7eDR9LCR7eTR9YDsKICAgICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgICAgIGNvbnN0IGFyZWFQb2ludHMgPSBgMCwke2hlaWdodH0gJHtwb2ludHN9ICR7d2lkdGh9LCR7aGVpZ2h0fWA7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRyZW5kLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0cmVuZC12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvc3Bhbj4KICAgICAgICAgICR7dGlsZS51bml0ID8gYjJgPHNwYW4gY2xhc3M9InRyZW5kLXVuaXQiPiR7dGlsZS51bml0fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAke3RpbGUuZGVzY3JpcHRpb24gPyBiMmA8c3BhbiBjbGFzcz0idHJlbmQtbGFiZWwiPiR7dGlsZS5kZXNjcmlwdGlvbn08L3NwYW4+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRyZW5kLWdyYXBoIj4KICAgICAgICAgIDxzdmcgY2xhc3M9InRyZW5kLXN2ZyIgdmlld0JveD0iMCAwICR7d2lkdGh9ICR7aGVpZ2h0fSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJ0cmVuZC1hcmVhIiBwb2ludHM9IiR7YXJlYVBvaW50c30iIC8+CiAgICAgICAgICAgIDxwb2x5bGluZSBjbGFzcz0idHJlbmQtbGluZSIgcG9pbnRzPSIke3BvaW50c30iIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSkgewogICAgICAgICAgaWYgKCF0aWxlLnBlcmNlbnRhZ2VzIHx8IHRpbGUucGVyY2VudGFnZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGlsZS5wZXJjZW50YWdlcy5zbGljZSgwLCAzKTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLWl0ZW1zIj4KICAgICAgICAgICR7aXRlbXMubWFwKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGl0ZW0udmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaXRlbSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLWxhYmVsIj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS12YWx1ZSI+JHtwZXJjZW50YWdlfSU8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtYmFyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLWZpbGwiCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JTsgJHtpdGVtLmNvbG9yID8gYGJhY2tncm91bmQ6ICR7aXRlbS5jb2xvcn1gIDogIiJ9IgogICAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDsKICAgICAgICAgIH0pfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckNwdUNvcmVzKHRpbGUpIHsKICAgICAgICAgIGlmICghdGlsZS5jb3Jlc0RhdGEgfHwgdGlsZS5jb3Jlc0RhdGEubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGNvcmVzID0gdGlsZS5jb3Jlc0RhdGE7CiAgICAgICAgICBjb25zdCBhdmdVc2FnZSA9IE1hdGgucm91bmQoY29yZXMucmVkdWNlKChzdW0sIGNvcmUyKSA9PiBzdW0gKyBjb3JlMi51c2FnZSwgMCkgLyBjb3Jlcy5sZW5ndGgpOwogICAgICAgICAgY29uc3QgZ2V0Q29sb3JDbGFzcyA9ICh1c2FnZSkgPT4gewogICAgICAgICAgICBpZiAodXNhZ2UgPCA1MCkKICAgICAgICAgICAgICByZXR1cm4gImxvdyI7CiAgICAgICAgICAgIGlmICh1c2FnZSA8IDgwKQogICAgICAgICAgICAgIHJldHVybiAibWVkaXVtIjsKICAgICAgICAgICAgcmV0dXJuICJoaWdoIjsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBtYXhCYXJzV2lkdGggPSBjb3Jlcy5sZW5ndGggKiAyNCArIChjb3Jlcy5sZW5ndGggLSAxKSAqIDM7CiAgICAgICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuIHx8IDE7CiAgICAgICAgICBjb25zdCBlc3RpbWF0ZWRUaWxlV2lkdGggPSB0aGlzLm1pblRpbGVXaWR0aCAqIGNvbHVtblNwYW4gKyAoY29sdW1uU3BhbiAtIDEpICogdGhpcy5nYXAgLSAzMjsKICAgICAgICAgIGNvbnN0IHNob3VsZENlbnRlciA9IG1heEJhcnNXaWR0aCA8IGVzdGltYXRlZFRpbGVXaWR0aCAqIDAuNjY2OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmVzLXZhbHVlIj4ke2F2Z1VzYWdlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7Y29yZXMubGVuZ3RofSBjb3Jlczwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtYmFycyAke3Nob3VsZENlbnRlciA/ICJjZW50ZXJlZCIgOiAiIn0iPgogICAgICAgICAgJHtjb3Jlcy5tYXAoKGNvcmUyKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHVzYWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCBjb3JlMi51c2FnZSkpOwogICAgICAgICAgICBjb25zdCBjb2xvckNsYXNzID0gZ2V0Q29sb3JDbGFzcyh1c2FnZSk7CiAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZS1iYXItY29udGFpbmVyIiB0aXRsZT0iQ29yZSAke2NvcmUyLmxhYmVsIHx8IGNvcmUyLmlkfTogJHt1c2FnZX0lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjcHUtY29yZS1iYXItZmlsbCAke2NvbG9yQ2xhc3N9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dXNhZ2V9JSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAke2NvcmVzLmxlbmd0aCA8PSAxNiA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmUtbGFiZWwiPiR7Y29yZTIubGFiZWwgfHwgY29yZTIuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICAgICAgfSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgZm9ybWF0Qnl0ZXMoYnl0ZXMpIHsKICAgICAgICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuICIwIEIiOwogICAgICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICAgICAgY29uc3Qgc2l6ZXMgPSBbIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiLCAiUEIiXTsKICAgICAgICAgIGNvbnN0IGkxMSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coazQpKTsKICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGs0LCBpMTEpKS50b0ZpeGVkKDEpKSArICIgIiArIHNpemVzW2kxMV07CiAgICAgICAgfQogICAgICAgIHJlbmRlclBhcnRpdGlvbih0aWxlKSB7CiAgICAgICAgICBpZiAoIXRpbGUucGFydGl0aW9uRGF0YSkgewogICAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB7IHVzZWQsIHRvdGFsLCBmaWxlc3lzdGVtLCBtb3VudFBvaW50IH0gPSB0aWxlLnBhcnRpdGlvbkRhdGE7CiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB1c2VkIC8gdG90YWwgKiAxMDApKTsKICAgICAgICAgIGNvbnN0IGZyZWUgPSB0b3RhbCAtIHVzZWQ7CiAgICAgICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKCkgPT4gewogICAgICAgICAgICBpZiAocGVyY2VudGFnZSA+PSA5MCkKICAgICAgICAgICAgICByZXR1cm4gImNyaXRpY2FsIjsKICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPj0gNzUpCiAgICAgICAgICAgICAgcmV0dXJuICJ3YXJuaW5nIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1wZXJjZW50YWdlIj4ke01hdGgucm91bmQocGVyY2VudGFnZSl9JTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tYmFyIj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InBhcnRpdGlvbi1iYXItZmlsbCAke2dldENvbG9yQ2xhc3MoKX0iCiAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHtwZXJjZW50YWdlfSUiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXRzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1zdGF0Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1zdGF0LWxhYmVsIj5Vc2VkPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtdmFsdWUiPiR7dGhpcy5mb3JtYXRCeXRlcyh1c2VkKX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1zdGF0Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InBhcnRpdGlvbi1zdGF0LWxhYmVsIj5GcmVlPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtdmFsdWUiPiR7dGhpcy5mb3JtYXRCeXRlcyhmcmVlKX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tbWV0YSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLWZpbGVzeXN0ZW0iPiR7ZmlsZXN5c3RlbX08L3NwYW4+CiAgICAgICAgICAke21vdW50UG9pbnQgPyBiMmA8c3BhbiBjbGFzcz0icGFydGl0aW9uLW1vdW50cG9pbnQiPiR7bW91bnRQb2ludH08L3NwYW4+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckRpc2sodGlsZSkgewogICAgICAgICAgaWYgKCF0aWxlLmRpc2tEYXRhKSB7CiAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHsgY2FwYWNpdHksIG1vZGVsLCB0eXBlOiB0eXBlNSwgaW9wcywgaGVhbHRoIH0gPSB0aWxlLmRpc2tEYXRhOwogICAgICAgICAgY29uc3QgZ2V0SGVhbHRoQ2xhc3MgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICAgIGlmICh2YWx1ZTIgPj0gNzApCiAgICAgICAgICAgICAgcmV0dXJuICJnb29kIjsKICAgICAgICAgICAgaWYgKHZhbHVlMiA+PSAzMCkKICAgICAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgICAgICByZXR1cm4gImNyaXRpY2FsIjsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImRpc2std3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1jYXBhY2l0eSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGNhcGFjaXR5KX08L2Rpdj4KICAgICAgICAke21vZGVsIHx8IHR5cGU1ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHttb2RlbCA/IGIyYDxzcGFuPiR7bW9kZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgJHt0eXBlNSA/IGIyYDxzcGFuIGNsYXNzPSJkaXNrLXR5cGUtYmFkZ2UiPiR7dHlwZTV9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1ldHJpY3MiPgogICAgICAgICAgJHtpb3BzID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+UmVhZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtdmFsdWUiPiR7aW9wcy5yZWFkLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcy1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtbGFiZWwiPldyaXRlPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHtpb3BzLndyaXRlLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICR7aGVhbHRoICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staGVhbHRoLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1oZWFsdGgtbGFiZWwiPkhlYWx0aDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC12YWx1ZSI+JHtoZWFsdGh9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke2dldEhlYWx0aENsYXNzKGhlYWx0aCl9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7aGVhbHRofSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUdyaWRBY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgICBpZiAoYWN0aW9uLmFjdGlvbikgewogICAgICAgICAgICBhd2FpdCBhY3Rpb24uYWN0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZVRpbGVBY3Rpb24oYWN0aW9uLCBfdGlsZSkgewogICAgICAgICAgaWYgKGFjdGlvbi5hY3Rpb24pIHsKICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHRpbGUpIHsKICAgICAgICAgIGlmICghdGlsZS5hY3Rpb25zIHx8IHRpbGUuYWN0aW9ucy5sZW5ndGggPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfTsKICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zID0gdGlsZS5hY3Rpb25zOwogICAgICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSB0cnVlOwogICAgICAgICAgY29uc3QgY2xvc2VIYW5kbGVyID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3NlSGFuZGxlcik7CiAgICAgICAgICB9OwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2VIYW5kbGVyKTsKICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczM2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU3RhdHNHcmlkMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS9kZWVzLWFwcHVpLmRlbW8uanMKdmFyIF9fZXNEZWNvcmF0ZTM2LCBfX3J1bkluaXRpYWxpemVyczM3LCBEZW1vRGFzaGJvYXJkVmlldywgRGVtb1NldHRpbmdzVmlldywgRGVtb1Byb2plY3RzVmlldywgRGVtb1Rhc2tzVmlldywgZGVtb0Z1bmMyNzsKdmFyIGluaXRfZGVlc19hcHB1aV9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS9kZWVzLWFwcHVpLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19zdGF0c2dyaWQoKTsKICAgIF9fZXNEZWNvcmF0ZTM2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlbW9EYXNoYm9hcmRWaWV3ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tZGFzaGJvYXJkLXZpZXciKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2FjdGl2YXRlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmF0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlbW9EYXNoYm9hcmRWaWV3MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2FjdGl2YXRlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2FjdGl2YXRlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmF0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2YXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmF0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmF0ZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMsIF9hY3RpdmF0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVtb0Rhc2hib2FyZFZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgI2FjdGl2YXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIGdldCBhY3RpdmF0ZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZhdGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3RpdmF0ZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY3R4ID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICBzdGF0c1RpbGVzID0gWwogICAgICAgICAgewogICAgICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICAgICAgdGl0bGU6ICJBY3RpdmUgVXNlcnMiLAogICAgICAgICAgICB2YWx1ZTogMTIzNCwKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIk9ubGluZSBub3ciLAogICAgICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogImFwaS1jYWxscyIsCiAgICAgICAgICAgIHRpdGxlOiAiQVBJIENhbGxzIiwKICAgICAgICAgICAgdmFsdWU6IDQ1MjAwLAogICAgICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgICAgICBpY29uOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgICAgZGVzY3JpcHRpb246ICIrMTIlIGZyb20gbGFzdCBob3VyIiwKICAgICAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICAgICAgdHJlbmREYXRhOiBbMzJlMywgMzVlMywgMzhlMywgNDFlMywgMzllMywgNDJlMywgNDUyMDBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogImhlYWx0aCIsCiAgICAgICAgICAgIHRpdGxlOiAiU3lzdGVtIEhlYWx0aCIsCiAgICAgICAgICAgIHZhbHVlOiA5OS45LAogICAgICAgICAgICB1bml0OiAiJSIsCiAgICAgICAgICAgIHR5cGU6ICJnYXVnZSIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6aGVhcnQtcHVsc2UiLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsIiwKICAgICAgICAgICAgY29sb3I6ICIjMTBiOTgxIiwKICAgICAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICAgIG1heDogMTAwLAogICAgICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogIiNlZjQ0NDQiIH0sCiAgICAgICAgICAgICAgICB7IHZhbHVlOiA5NSwgY29sb3I6ICIjZjU5ZTBiIiB9LAogICAgICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAicmVzcG9uc2UiLAogICAgICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSIsCiAgICAgICAgICAgIHZhbHVlOiAxMjcsCiAgICAgICAgICAgIHVuaXQ6ICJtcyIsCiAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICBpY29uOiAibHVjaWRlOnRpbWVyIiwKICAgICAgICAgICAgZGVzY3JpcHRpb246ICItMTVtcyBmcm9tIHllc3RlcmRheSIsCiAgICAgICAgICAgIGNvbG9yOiAiIzhiNWNmNiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAicmVzb3VyY2VzIiwKICAgICAgICAgICAgdGl0bGU6ICJSZXNvdXJjZSBVc2FnZSIsCiAgICAgICAgICAgIHZhbHVlOiAiIiwKICAgICAgICAgICAgdHlwZTogIm11bHRpUGVyY2VudGFnZSIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6c2VydmVyIiwKICAgICAgICAgICAgcGVyY2VudGFnZXM6IFsKICAgICAgICAgICAgICB7IGxhYmVsOiAiQ1BVIiwgdmFsdWU6IDY3LCBjb2xvcjogIiMzYjgyZjYiIH0sCiAgICAgICAgICAgICAgeyBsYWJlbDogIk1lbW9yeSIsIHZhbHVlOiA4NCwgY29sb3I6ICIjOGI1Y2Y2IiB9LAogICAgICAgICAgICAgIHsgbGFiZWw6ICJEaXNrIiwgdmFsdWU6IDQ1LCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgaWQ6ICJyZXF1ZXN0cyIsCiAgICAgICAgICAgIHRpdGxlOiAiUmVxdWVzdHMvc2VjIiwKICAgICAgICAgICAgdmFsdWU6IDE4NTAsCiAgICAgICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgZGVzY3JpcHRpb246ICJDdXJyZW50IHRocm91Z2hwdXQiLAogICAgICAgICAgICBjb2xvcjogIiMwNmI2ZDQiLAogICAgICAgICAgICB0cmVuZERhdGE6IFsxMjAwLCAxNDAwLCAxMzUwLCAxNjAwLCAxNzUwLCAxNjgwLCAxODUwXQogICAgICAgICAgfQogICAgICAgIF07CiAgICAgICAgb25BY3RpdmF0ZShjb250ZXh0MikgewogICAgICAgICAgdGhpcy5jdHggPSBjb250ZXh0MjsKICAgICAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgYWN0aXZhdGVkIHdpdGggY29udGV4dDoiLCBjb250ZXh0Mik7CiAgICAgICAgICBjb250ZXh0Mi5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHsKICAgICAgICAgICAgaGVhZGluZzogIkRhc2hib2FyZCIsCiAgICAgICAgICAgIGdyb3VwczogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJRdWljayBBY2Nlc3MiLAogICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk92ZXJ2aWV3IikgfSwKICAgICAgICAgICAgICAgICAgeyBrZXk6ICJSZWNlbnQiLCBpY29uTmFtZTogImNsb2NrIiwgYmFkZ2U6IDUsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlY2VudCIpIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImRpdmlkZXIiIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIlJlZnJlc2ggRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2hDdyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKSB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiRmlsdGVycyIsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJUaW1lIFJhbmdlIiB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJMaXZlIFVwZGF0ZXMiLCBpY29uTmFtZTogImx1Y2lkZTpyYWRpbyIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJMaXZlIHVwZGF0ZXM6IiwgYWN0aXZlKSB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImRpdmlkZXIiIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogIm11bHRpRmlsdGVyIiwga2V5OiAiRGF0YSBTb3VyY2VzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJhcGkiLCBsYWJlbDogIkFQSSBTZXJ2ZXIiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJ3ZWIiLCBsYWJlbDogIldlYiBUcmFmZmljIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6Z2xvYmUiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJtb2JpbGUiLCBsYWJlbDogIk1vYmlsZSBBcHAiLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6c21hcnRwaG9uZSIgfQogICAgICAgICAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsIGtleXMyKSB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJhckNoYXJ0MyIsCiAgICAgICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICAgICB7IGtleTogIk1ldHJpY3MiLCBpY29uTmFtZTogImFjdGl2aXR5IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTWV0cmljcyIpIH0sCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiUmVwb3J0cyIsIGljb25OYW1lOiAiZmlsZVRleHQiLCBiYWRnZTogIm5ldyIsIGJhZGdlVmFyaWFudDogInN1Y2Nlc3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIikgfSwKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIkFuYWx5dGljcyBEb2NzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXh0ZXJuYWxMaW5rIiwgaHJlZjogImh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9hbmFseXRpY3MiIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0pOwogICAgICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgICAgICB7IGtleTogIk92ZXJ2aWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0RGFzaGJvYXJkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXcgdGFiIikgfSwKICAgICAgICAgICAgeyBrZXk6ICJBbmFseXRpY3MiLCBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyB0YWIiKSB9LAogICAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgdGFiIikgfQogICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICAgIG9uRGVhY3RpdmF0ZSgpIHsKICAgICAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7CiAgICAgICAgICBjb25zb2xlLmxvZygiRGFzaGJvYXJkIGRlYWN0aXZhdGVkIik7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IH0KICAgICAgICBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbi1ib3R0b206IDMycHg7IH0KICAgICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICAgIH0KCiAgICAgICAgLmN0eC1hY3Rpb25zIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAyKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQogICAgICAgIC5jdHgtYWN0aW9ucyBoMiB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAgICAgICAuYnV0dG9uLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0biB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTksIDEzMCwgMjQ2LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM2MGE1ZmE7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg1OSwgMTMwLCAyNDYsIDAuNSk7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLmRhbmdlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLmRhbmdlcjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5zdWNjZXNzIHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMSk7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMzQsIDE5NywgOTQsIDAuMyk7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2Vzczpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjUpOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPkRhc2hib2FyZDwvaDE+CiAgICAgIDxwPldlbGNvbWUgYmFjayEgSGVyZSdzIGFuIG92ZXJ2aWV3IG9mIHlvdXIgc3lzdGVtLjwvcD4KICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgLnRpbGVzPSR7dGhpcy5zdGF0c1RpbGVzfQogICAgICAgIEB0aWxlLWFjdGlvbj0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJUaWxlIGFjdGlvbjoiLCBlMTEuZGV0YWlsKX0KICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CgogICAgICA8ZGl2IGNsYXNzPSJjdHgtYWN0aW9ucyI+CiAgICAgICAgPGgyPkNvbnRleHQgQWN0aW9ucyAoY3R4LmFwcHVpKTwvaDI+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51VmlzaWJsZShmYWxzZSl9PkhpZGUgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIHN1Y2Nlc3MiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUodHJ1ZSl9PlNob3cgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVZpc2libGUoZmFsc2UpfT5IaWRlIFNlY29uZGFyeSBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIHN1Y2Nlc3MiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRTZWNvbmRhcnlNZW51VmlzaWJsZSh0cnVlKX0+U2hvdyBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzVmlzaWJsZShmYWxzZSl9PkhpZGUgQ29udGVudCBUYWJzPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIHN1Y2Nlc3MiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUodHJ1ZSl9PlNob3cgQ29udGVudCBUYWJzPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVDb2xsYXBzZWQodHJ1ZSl9PkNvbGxhcHNlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVDb2xsYXBzZWQoZmFsc2UpfT5FeHBhbmQgTWFpbiBNZW51PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0QnJlYWRjcnVtYnMoWyJEYXNoYm9hcmQiLCAiT3ZlcnZpZXciLCAiU3RhdHMiXSl9PlNldCBCcmVhZGNydW1iczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLm5hdmlnYXRlVG9WaWV3KCJwcm9qZWN0cyIpfT5HbyB0byBQcm9qZWN0czwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLm5hdmlnYXRlVG9WaWV3KCJzZXR0aW5ncyIsIHsgc2VjdGlvbjogInNlY3VyaXR5IiB9KX0+R28gdG8gU2V0dGluZ3MvU2VjdXJpdHk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5hY3Rpdml0eUxvZy5hZGQoeyB0eXBlOiAiY3VzdG9tIiwgdXNlcjogIkRlbW8gVXNlciIsIG1lc3NhZ2U6ICJCdXR0b24gY2xpY2tlZCBmcm9tIGN0eCEiLCBpY29uTmFtZTogImx1Y2lkZTptb3VzZS1wb2ludGVyLWNsaWNrIiB9KX0+QWRkIEFjdGl2aXR5IEVudHJ5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCA5OSl9PlNldCBUYXNrcyBCYWRnZSB0byA5OTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5jbGVhck1haW5NZW51QmFkZ2UoInRhc2tzIil9PkNsZWFyIFRhc2tzIEJhZGdlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNBdXRvSGlkZSh0cnVlLCAxKX0+QXV0by1oaWRlIFRhYnMgKOKJpDEpPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIGRhbmdlciIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUoZmFsc2UpfT5EaXNhYmxlIEF1dG8taGlkZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmFkZENsb3NlYWJsZVRhYigpfT5BZGQgQ2xvc2VhYmxlIFRhYjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHRhYkNvdW50ZXIgPSAwOwogICAgICAgIGFkZENsb3NlYWJsZVRhYigpIHsKICAgICAgICAgIGlmICghdGhpcy5jdHgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMudGFiQ291bnRlcisrOwogICAgICAgICAgY29uc3QgdGFiS2V5ID0gYFRhYiAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICAgICAgdGhpcy5jdHguYXBwdWkuYWRkQ29udGVudFRhYih7CiAgICAgICAgICAgIGtleTogdGFiS2V5LAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZyhgU2VsZWN0ZWQgJHt0YWJLZXl9YCksCiAgICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSwKICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAgIHRoaXMuY3R4Py5hcHB1aS5yZW1vdmVDb250ZW50VGFiKHRhYktleSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlbW9EYXNoYm9hcmRWaWV3MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogICAgRGVtb1NldHRpbmdzVmlldyA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXNldHRpbmdzLXZpZXciKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3NlY3Rpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oYXNDaGFuZ2VzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaGFzQ2hhbmdlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZW1vU2V0dGluZ3NWaWV3MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3NlY3Rpb25fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9oYXNDaGFuZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNih0aGlzLCBudWxsLCBfc2VjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWN0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWN0aW9uX2luaXRpYWxpemVycywgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2hhc0NoYW5nZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFzQ2hhbmdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGFzQ2hhbmdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oYXNDaGFuZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGFzQ2hhbmdlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGFzQ2hhbmdlc19pbml0aWFsaXplcnMsIF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlbW9TZXR0aW5nc1ZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX3NlY3Rpb25faW5pdGlhbGl6ZXJzLCAiZ2VuZXJhbCIpOwogICAgICAgIGdldCBzZWN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfc2VjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBoYXNDaGFuZ2VzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc0NoYW5nZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGhhc0NoYW5nZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGFwcHVpID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfaGFzQ2hhbmdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgb25BY3RpdmF0ZShjb250ZXh0MikgewogICAgICAgICAgdGhpcy5hcHB1aSA9IGNvbnRleHQyLmFwcHVpOwogICAgICAgICAgY29uc29sZS5sb2coIlNldHRpbmdzIGFjdGl2YXRlZCB3aXRoIHBhcmFtczoiLCBjb250ZXh0Mi5wYXJhbXMpOwogICAgICAgICAgaWYgKGNvbnRleHQyLnBhcmFtcz8uc2VjdGlvbikgewogICAgICAgICAgICB0aGlzLnNlY3Rpb24gPSBjb250ZXh0Mi5wYXJhbXMuc2VjdGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgICAgICBoZWFkaW5nOiAiU2V0dGluZ3MiLAogICAgICAgICAgICBncm91cHM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiQWNjb3VudCIsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiZ2VuZXJhbCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKSB9LAogICAgICAgICAgICAgICAgICB7IGtleTogInByb2ZpbGUiLCBpY29uTmFtZTogInVzZXIiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oInByb2ZpbGUiKSB9LAogICAgICAgICAgICAgICAgICB7IGtleTogInNlY3VyaXR5IiwgaWNvbk5hbWU6ICJzaGllbGQiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oInNlY3VyaXR5IikgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNsaWRlcnMiLAogICAgICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgICAgeyBrZXk6ICJub3RpZmljYXRpb25zIiwgaWNvbk5hbWU6ICJiZWxsIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigibm90aWZpY2F0aW9ucyIpIH0sCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiYXBwZWFyYW5jZSIsIGljb25OYW1lOiAicGFsZXR0ZSIsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigiYXBwZWFyYW5jZSIpIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0pOwogICAgICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pOwogICAgICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoW10pOwogICAgICAgIH0KICAgICAgICBvbkRlYWN0aXZhdGUoKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiU2V0dGluZ3MgZGVhY3RpdmF0ZWQiKTsKICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjYW5EZWFjdGl2YXRlKCkgewogICAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlcykgewogICAgICAgICAgICByZXR1cm4gIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgc2hvd1NlY3Rpb24oc2VjdGlvbikgewogICAgICAgICAgdGhpcy5zZWN0aW9uID0gc2VjdGlvbjsKICAgICAgICAgIHRoaXMuYXBwdWk/LnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oc2VjdGlvbik7CiAgICAgICAgfQogICAgICAgIHNpbXVsYXRlQ2hhbmdlKCkgewogICAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNpbXVsYXRlQ2hhbmdlKCl9Pk1ha2UgQ2hhbmdlczwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmhhc0NoYW5nZXMgPyBiMmA8cCBjbGFzcz0id2FybmluZyI+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBOYXZpZ2F0aW9uIHdpbGwgcHJvbXB0IGZvciBjb25maXJtYXRpb24uPC9wPmAgOiAiIn0KICAgIGA7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICAgIERlbW9Qcm9qZWN0c1ZpZXcgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1wcm9qZWN0cy12aWV3IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgdmFyIERlbW9Qcm9qZWN0c1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZW1vUHJvamVjdHNWaWV3MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgICAgICBoZWFkaW5nOiAiUHJvamVjdHMiLAogICAgICAgICAgICBncm91cHM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiTXkgUHJvamVjdHMiLAogICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiQWN0aXZlIiwgaWNvbk5hbWU6ICJmb2xkZXIiLCBiYWRnZTogMywgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQWN0aXZlIikgfSwKICAgICAgICAgICAgICAgICAgeyBrZXk6ICJBcmNoaXZlZCIsIGljb25OYW1lOiAiYXJjaGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIikgfSwKICAgICAgICAgICAgICAgICAgeyBrZXk6ICJTaGFyZWQiLCBpY29uTmFtZTogInVzZXJzIiwgYmFkZ2U6IDIsIGJhZGdlVmFyaWFudDogIndhcm5pbmciLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTaGFyZWQiKSB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiUXVpY2sgQWN0aW9ucyIsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiTmV3IFByb2plY3QiLCBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwgYWN0aW9uOiAoKSA9PiBhbGVydCgiQ3JlYXRlIG5ldyBwcm9qZWN0IikgfSwKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImRpdmlkZXIiIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJUZW1wbGF0ZXMiLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXRUZW1wbGF0ZSIsIGhyZWY6ICJodHRwczovL3RlbXBsYXRlcy5leGFtcGxlLmNvbSIgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSk7CiAgICAgICAgICBjb250ZXh0Mi5hcHB1aS5zZXRDb250ZW50VGFicyhbCiAgICAgICAgICAgIHsga2V5OiAiR3JpZCIsIGljb25OYW1lOiAibHVjaWRlOmdyaWQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJHcmlkIHZpZXciKSB9LAogICAgICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCB2aWV3IikgfSwKICAgICAgICAgICAgeyBrZXk6ICJCb2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmthbmJhbiIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkJvYXJkIHZpZXciKSB9CiAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDI0cHg7IH0KICAgICAgICAucHJvamVjdHMgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzOwogICAgICAgIH0KICAgICAgICAucHJvamVjdDpob3ZlciB7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsKICAgICAgICB9CiAgICAgICAgLnByb2plY3QgaDMgeyBjb2xvcjogI2ZhZmFmYTsgbWFyZ2luOiAwIDAgOHB4IDA7IGZvbnQtc2l6ZTogMTZweDsgfQogICAgICAgIC5wcm9qZWN0IHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luOiAwOyBmb250LXNpemU6IDEzcHg7IH0KICAgICAgICAuYmFkZ2UgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgYmFja2dyb3VuZDogIzE0NTMyZDsKICAgICAgICAgIGNvbG9yOiAjNGFkZTgwOwogICAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+UHJvamVjdHM8L2gxPgogICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0cyI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvamVjdCI+CiAgICAgICAgICA8aDM+RnJvbnRlbmQgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdC1iYXNlZCBkYXNoYm9hcmQgYXBwbGljYXRpb248L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvamVjdCI+CiAgICAgICAgICA8aDM+QVBJIFNlcnZlciA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+Tm9kZS5qcyBSRVNUIEFQSSBiYWNrZW5kPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPk1vYmlsZSBBcHAgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPlJlYWN0IE5hdGl2ZSBpT1MvQW5kcm9pZCBhcHA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvamVjdCI+CiAgICAgICAgICA8aDM+RG9jdW1lbnRhdGlvbjwvaDM+CiAgICAgICAgICA8cD5UZWNobmljYWwgZG9jdW1lbnRhdGlvbiBzaXRlPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVtb1Byb2plY3RzVmlldzIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICAgIERlbW9UYXNrc1ZpZXcgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby10YXNrcy12aWV3IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgdmFyIERlbW9UYXNrc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZW1vVGFza3NWaWV3MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgICAgICBoZWFkaW5nOiAiVGFza3MiLAogICAgICAgICAgICBncm91cHM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiVmlld3MiLAogICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwKICAgICAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiQWxsIFRhc2tzIiwgaWNvbk5hbWU6ICJsaXN0IiwgYmFkZ2U6IDEyLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbGwiKSB9LAogICAgICAgICAgICAgICAgICB7IGtleTogIlRvZGF5IiwgaWNvbk5hbWU6ICJjYWxlbmRhciIsIGJhZGdlOiAzLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUb2RheSIpIH0sCiAgICAgICAgICAgICAgICAgIHsga2V5OiAiVXBjb21pbmciLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVXBjb21pbmciKSB9LAogICAgICAgICAgICAgICAgICB7IGtleTogIkNvbXBsZXRlZCIsIGljb25OYW1lOiAiY2hlY2tDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJDb21wbGV0ZWQiKSB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiRmlsdGVycyIsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJQcmlvcml0eSIgfSwKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJQcmlvcml0eSIsIGljb25OYW1lOiAibHVjaWRlOmZsYWciLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJoaWdoIiwgbGFiZWw6ICJIaWdoIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6YWxlcnRDaXJjbGUiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICJtZWRpdW0iLCBsYWJlbDogIk1lZGl1bSIsIGNoZWNrZWQ6IHRydWUsIGljb25OYW1lOiAibHVjaWRlOm1pbnVzQ2lyY2xlIiB9LAogICAgICAgICAgICAgICAgICAgIHsga2V5OiAibG93IiwgbGFiZWw6ICJMb3ciLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6Y2lyY2xlIiB9CiAgICAgICAgICAgICAgICAgIF0sIG9uQ2hhbmdlOiAoa2V5czIpID0+IGNvbnNvbGUubG9nKCJQcmlvcml0eSBmaWx0ZXI6Iiwga2V5czIpIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImRpdmlkZXIiIH0sCiAgICAgICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiT3B0aW9ucyIgfSwKICAgICAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBTdWJ0YXNrcyIsIGljb25OYW1lOiAibHVjaWRlOmxpc3RUcmVlIiwgYWN0aXZlOiB0cnVlLCBvblRvZ2dsZTogKGFjdGl2ZSkgPT4gY29uc29sZS5sb2coIlNob3cgc3VidGFza3M6IiwgYWN0aXZlKSB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IENvbXBsZXRlZCIsIGljb25OYW1lOiAibHVjaWRlOmNoZWNrU3F1YXJlIiwgYWN0aXZlOiBmYWxzZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IGNvbXBsZXRlZDoiLCBhY3RpdmUpIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnphcCIsCiAgICAgICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJBZGQgVGFzayIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJBZGQgbmV3IHRhc2siKSB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJJbXBvcnQgVGFza3MiLCBpY29uTmFtZTogImx1Y2lkZTp1cGxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgdGFza3MiKSB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDbGVhciBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLCB2YXJpYW50OiAiZGFuZ2VyIiwgY29uZmlybU1lc3NhZ2U6ICJEZWxldGUgYWxsIGNvbXBsZXRlZCB0YXNrcz8iLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0pOwogICAgICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCIpIH0sCiAgICAgICAgICAgIHsga2V5OiAiQ2FsZW5kYXIiLCBpY29uTmFtZTogImx1Y2lkZTpjYWxlbmRhciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNhbGVuZGFyIikgfQogICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnRhc2stbGlzdCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAudGFzayB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIH0KICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjNTI1MjUyOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgICAudGFzay10ZXh0IHsgY29sb3I6ICNmYWZhZmE7IGZsZXg6IDE7IH0KICAgICAgICAuZHVlLWRhdGUgeyBjb2xvcjogIzczNzM3MzsgZm9udC1zaXplOiAxMnB4OyB9CiAgICAgICAgLnByaW9yaXR5IHsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgfQogICAgICAgIC5wcmlvcml0eS5oaWdoIHsgYmFja2dyb3VuZDogIzQ1MGEwYTsgY29sb3I6ICNmODcxNzE7IH0KICAgICAgICAucHJpb3JpdHkubWVkaXVtIHsgYmFja2dyb3VuZDogIzQ1MWEwMzsgY29sb3I6ICNmYmJmMjQ7IH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlRhc2tzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0idGFzay1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlJldmlldyBwdWxsIHJlcXVlc3QgIzQyPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub2RheTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBoaWdoIj5IaWdoPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhc2siPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPjwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9InRhc2stdGV4dCI+VXBkYXRlIGRvY3VtZW50YXRpb248L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPlRvbW9ycm93PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InByaW9yaXR5IG1lZGl1bSI+TWVkaXVtPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhc2siPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3giPjwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9InRhc2stdGV4dCI+V3JpdGUgdW5pdCB0ZXN0czwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+RGVjIDIwPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVtb1Rhc2tzVmlldzIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICAgIGRlbW9GdW5jMjcgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGFwcENvbmZpZyA9IHsKICAgICAgICBicmFuZGluZzogewogICAgICAgICAgbG9nb0ljb246ICJsdWNpZGU6Ym94IiwKICAgICAgICAgIGxvZ29UZXh0OiAiQWNtZSBBcHAiCiAgICAgICAgfSwKICAgICAgICBhcHBCYXI6IHsKICAgICAgICAgIG1lbnVJdGVtczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICAgICAgeyBuYW1lOiAiTmV3IFByb2plY3QiLCBzaG9ydGN1dDogIkNtZCtOIiwgaWNvbk5hbWU6ICJmaWxlUGx1cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyIpIH0sCiAgICAgICAgICAgICAgICB7IG5hbWU6ICJPcGVuLi4uIiwgc2hvcnRjdXQ6ICJDbWQrTyIsIGljb25OYW1lOiAiZm9sZGVyT3BlbiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4iKSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICB9LCBzdWJtZW51OiBbCiAgICAgICAgICAgICAgICAgIHsgbmFtZTogIm15LWFwcCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gbXktYXBwIikgfSwKICAgICAgICAgICAgICAgICAgeyBuYW1lOiAiY29tcG9uZW50LWxpYiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpIH0KICAgICAgICAgICAgICAgIF0gfSwKICAgICAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBbGwiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiRWRpdCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBzdWJtZW51OiBbCiAgICAgICAgICAgICAgICB7IG5hbWU6ICJVbmRvIiwgc2hvcnRjdXQ6ICJDbWQrWiIsIGljb25OYW1lOiAidW5kbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVuZG8iKSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiUmVkbyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1oiLCBpY29uTmFtZTogInJlZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWRvIikgfSwKICAgICAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiQ3V0Iiwgc2hvcnRjdXQ6ICJDbWQrWCIsIGljb25OYW1lOiAic2Npc3NvcnMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiQ29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBpY29uTmFtZTogImNvcHkiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICAgICAgICAgIHsgbmFtZTogIlBhc3RlIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUGFzdGUiKSB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlZpZXciLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIEFjdGl2aXR5IExvZyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K0EiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUb2dnbGUgYWN0aXZpdHkiKSB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkhlbHAiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3MiKSB9LAogICAgICAgICAgICAgICAgeyBuYW1lOiAiS2V5Ym9hcmQgU2hvcnRjdXRzIiwgaWNvbk5hbWU6ICJrZXlib2FyZCIsIHNob3J0Y3V0OiAiQ21kKy8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKSB9LAogICAgICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgIGJyZWFkY3J1bWJzOiAiRGFzaGJvYXJkIiwKICAgICAgICAgIHNob3dXaW5kb3dDb250cm9sczogdHJ1ZSwKICAgICAgICAgIHNob3dTZWFyY2g6IHRydWUsCiAgICAgICAgICB1c2VyOiB7CiAgICAgICAgICAgIG5hbWU6ICJKYW5lIFNtaXRoIiwKICAgICAgICAgICAgZW1haWw6ICJqYW5lLnNtaXRoQGV4YW1wbGUuY29tIiwKICAgICAgICAgICAgc3RhdHVzOiAib25saW5lIgogICAgICAgICAgfSwKICAgICAgICAgIHByb2ZpbGVNZW51SXRlbXM6IFsKICAgICAgICAgICAgeyBuYW1lOiAiUHJvZmlsZSIsIGljb25OYW1lOiAidXNlciIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlByb2ZpbGUiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJBY2NvdW50IFNldHRpbmdzIiwgaWNvbk5hbWU6ICJzZXR0aW5ncyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkhlbHAgJiBTdXBwb3J0IiwgaWNvbk5hbWU6ICJoZWxwQ2lyY2xlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB2aWV3czogWwogICAgICAgICAgewogICAgICAgICAgICBpZDogImRhc2hib2FyZCIsCiAgICAgICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpob21lIiwKICAgICAgICAgICAgY29udGVudDogImRlbW8tZGFzaGJvYXJkLXZpZXciLAogICAgICAgICAgICByb3V0ZTogImRhc2hib2FyZCIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAicHJvamVjdHMiLAogICAgICAgICAgICBuYW1lOiAiUHJvamVjdHMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXIiLAogICAgICAgICAgICBjb250ZW50OiAiZGVtby1wcm9qZWN0cy12aWV3IiwKICAgICAgICAgICAgcm91dGU6ICJwcm9qZWN0cyIsCiAgICAgICAgICAgIGJhZGdlOiAzCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogInRhc2tzIiwKICAgICAgICAgICAgbmFtZTogIlRhc2tzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y2hlY2tTcXVhcmUiLAogICAgICAgICAgICBjb250ZW50OiAiZGVtby10YXNrcy12aWV3IiwKICAgICAgICAgICAgcm91dGU6ICJ0YXNrcyIsCiAgICAgICAgICAgIGJhZGdlOiAxMgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgaWQ6ICJzZXR0aW5ncyIsCiAgICAgICAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICAgICAgY29udGVudDogImRlbW8tc2V0dGluZ3MtdmlldyIsCiAgICAgICAgICAgIHJvdXRlOiAic2V0dGluZ3MvOnNlY3Rpb24/IgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgbWFpbk1lbnU6IHsKICAgICAgICAgIHNlY3Rpb25zOiBbCiAgICAgICAgICAgIHsgbmFtZTogIk1haW4iLCB2aWV3czogWyJkYXNoYm9hcmQiXSB9LAogICAgICAgICAgICB7IG5hbWU6ICJXb3Jrc3BhY2UiLCB2aWV3czogWyJwcm9qZWN0cyIsICJ0YXNrcyJdIH0KICAgICAgICAgIF0sCiAgICAgICAgICBib3R0b21JdGVtczogWyJzZXR0aW5ncyJdCiAgICAgICAgfSwKICAgICAgICBkZWZhdWx0VmlldzogImRhc2hib2FyZCIsCiAgICAgICAgYm90dG9tQmFyOiB7CiAgICAgICAgICB2aXNpYmxlOiB0cnVlLAogICAgICAgICAgd2lkZ2V0czogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWQ6ICJzdGF0dXMiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgICAgICBsYWJlbDogIlN5c3RlbSBPbmxpbmUiLAogICAgICAgICAgICAgIHN0YXR1czogInN1Y2Nlc3MiLAogICAgICAgICAgICAgIHRvb2x0aXA6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIlN0YXR1cyBjbGlja2VkIikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlkOiAibm90aWZpY2F0aW9ucyIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6YmVsbCIsCiAgICAgICAgICAgICAgbGFiZWw6ICIzIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgICAgIHN0YXR1czogIndhcm5pbmciLAogICAgICAgICAgICAgIHRvb2x0aXA6ICJZb3UgaGF2ZSB1bnJlYWQgbm90aWZpY2F0aW9ucyIsCiAgICAgICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogInZlcnNpb24iLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmdpdEJyYW5jaCIsCiAgICAgICAgICAgICAgbGFiZWw6ICJ2MS4yLjMiLAogICAgICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgICAgIHRvb2x0aXA6ICJDdXJyZW50IHZlcnNpb24iCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogInRlcm1pbmFsIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgICAgICAgdG9vbHRpcDogIk9wZW4gVGVybWluYWwiLAogICAgICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCJUZXJtaW5hbCBjbGlja2VkIikKICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgb25WaWV3Q2hhbmdlOiAodmlld0lkLCB2aWV3KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3ZpZXdJZH0gKCR7dmlldy5uYW1lfSlgKTsKICAgICAgICB9LAogICAgICAgIG9uU2VhcmNoOiAocXVlcnkpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IiwgcXVlcnkpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250YWluZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJkZW1vLWNvbnRhaW5lciI7CiAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsiOwogICAgICBjb25zdCBhcHB1aUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpIik7CiAgICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoYXBwdWlFbGVtZW50KTsKICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgYXBwdWlFbGVtZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIGFwcHVpRWxlbWVudC5jb25maWd1cmUoYXBwQ29uZmlnKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJsb2dpbiIsCiAgICAgICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICJsb2dnZWQgaW4gZnJvbSBDaHJvbWUgb24gbWFjT1MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAiY3JlYXRlIiwKICAgICAgICAgICAgICB1c2VyOiAiSmFuZSBTbWl0aCIsCiAgICAgICAgICAgICAgbWVzc2FnZTogJ2NyZWF0ZWQgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgICAgICAgIHVzZXI6ICJKb2huIERvZSIsCiAgICAgICAgICAgICAgbWVzc2FnZTogInVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0eXBlOiAidmlldyIsCiAgICAgICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICJ2aWV3ZWQgZGFzaGJvYXJkIGFuYWx5dGljcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLAogICAgICAgICAgICAgIHVzZXI6ICJBZG1pbiIsCiAgICAgICAgICAgICAgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHR5cGU6ICJjdXN0b20iLAogICAgICAgICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICJzY2hlZHVsZWQgYmFja3VwIGNvbXBsZXRlZCIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0pOwogICAgICAgIH0sIDUwMCk7CiAgICAgICAgYXBwdWlFbGVtZW50LnZpZXdDaGFuZ2VkJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiVmlldyBjaGFuZ2VkIGV2ZW50OiIsIGV2ZW50KTsKICAgICAgICAgIGFwcHVpRWxlbWVudC5zZXRCcmVhZGNydW1icyhldmVudC52aWV3Lm5hbWUpOwogICAgICAgIH0pOwogICAgICAgIGFwcHVpRWxlbWVudC52aWV3TGlmZWN5Y2xlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsIGV2ZW50LnR5cGUsIGV2ZW50LnZpZXdJZCk7CiAgICAgICAgfSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBhcHB1aUVsZW1lbnQuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCAxNSk7CiAgICAgICAgICBhcHB1aUVsZW1lbnQuYWN0aXZpdHlMb2cuYWRkKHsKICAgICAgICAgICAgdHlwZTogInVwZGF0ZSIsCiAgICAgICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgICAgICBtZXNzYWdlOiAibmV3IHRhc2tzIGFkZGVkIgogICAgICAgICAgfSk7CiAgICAgICAgfSwgNWUzKTsKICAgICAgfSwgMCk7CiAgICAgIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICAke2NvbnRhaW5lckVsZW1lbnR9CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL3ZpZXcucmVnaXN0cnkuanMKdmFyIFZpZXdSZWdpc3RyeTsKdmFyIGluaXRfdmlld19yZWdpc3RyeSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvdmlldy5yZWdpc3RyeS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgVmlld1JlZ2lzdHJ5ID0gY2xhc3MgewogICAgICB2aWV3cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGN1cnJlbnRWaWV3SWQgPSBudWxsOwogICAgICBhcHB1aSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGFwcHVpIHJlZmVyZW5jZSBmb3IgdmlldyBhY3RpdmF0aW9uIGNvbnRleHQKICAgICAgICovCiAgICAgIHNldEFwcHVpUmVmKGFwcHVpKSB7CiAgICAgICAgdGhpcy5hcHB1aSA9IGFwcHVpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWdpc3RlciBhIHNpbmdsZSB2aWV3CiAgICAgICAqLwogICAgICByZWdpc3Rlcih2aWV3KSB7CiAgICAgICAgaWYgKHRoaXMudmlld3MuaGFzKHZpZXcuaWQpKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oYFZpZXcgd2l0aCBpZCAiJHt2aWV3LmlkfSIgYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKTsKICAgICAgICB9CiAgICAgICAgdGhpcy52aWV3cy5zZXQodmlldy5pZCwgdmlldyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlZ2lzdGVyIG11bHRpcGxlIHZpZXdzCiAgICAgICAqLwogICAgICByZWdpc3RlckFsbCh2aWV3cykgewogICAgICAgIHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHRoaXMucmVnaXN0ZXIodmlldykpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgYSB2aWV3IGRlZmluaXRpb24gYnkgSUQKICAgICAgICovCiAgICAgIGdldCh2aWV3SWQpIHsKICAgICAgICByZXR1cm4gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGFsbCByZWdpc3RlcmVkIHZpZXcgSURzCiAgICAgICAqLwogICAgICBnZXRWaWV3SWRzKCkgewogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudmlld3Mua2V5cygpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGFsbCB2aWV3cwogICAgICAgKi8KICAgICAgZ2V0QWxsKCkgewogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudmlld3MudmFsdWVzKCkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgcm91dGUgZm9yIGEgdmlldwogICAgICAgKi8KICAgICAgZ2V0Um91dGUodmlld0lkKSB7CiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlld3MuZ2V0KHZpZXdJZCk7CiAgICAgICAgcmV0dXJuIHZpZXc/LnJvdXRlIHx8IHZpZXc/LmlkIHx8ICIiOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHZpZXcgYnkgcm91dGUgKHN1cHBvcnRzIHBhcmFtZXRlcml6ZWQgcm91dGVzIGxpa2UgJ3NldHRpbmdzLzpzZWN0aW9uJykKICAgICAgICovCiAgICAgIGZpbmRCeVJvdXRlKHJvdXRlKSB7CiAgICAgICAgZm9yIChjb25zdCB2aWV3IG9mIHRoaXMudmlld3MudmFsdWVzKCkpIHsKICAgICAgICAgIGNvbnN0IHZpZXdSb3V0ZSA9IHZpZXcucm91dGUgfHwgdmlldy5pZDsKICAgICAgICAgIGNvbnN0IHBhcmFtczIgPSB0aGlzLm1hdGNoUm91dGUodmlld1JvdXRlLCByb3V0ZSk7CiAgICAgICAgICBpZiAocGFyYW1zMiAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4geyB2aWV3LCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogTWF0Y2ggYSByb3V0ZSBwYXR0ZXJuIGFnYWluc3QgYW4gYWN0dWFsIHJvdXRlCiAgICAgICAqIFJldHVybnMgcGFyYW1zIGlmIG1hdGNoZWQsIG51bGwgb3RoZXJ3aXNlCiAgICAgICAqLwogICAgICBtYXRjaFJvdXRlKHBhdHRlcm4sIHJvdXRlKSB7CiAgICAgICAgY29uc3QgcGF0dGVyblBhcnRzID0gcGF0dGVybi5zcGxpdCgiLyIpOwogICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSByb3V0ZS5zcGxpdCgiLyIpOwogICAgICAgIGNvbnN0IGhhc09wdGlvbmFsUGFyYW0gPSBwYXR0ZXJuUGFydHMubGVuZ3RoID4gMCAmJiBwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKCI/Iik7CiAgICAgICAgaWYgKGhhc09wdGlvbmFsUGFyYW0pIHsKICAgICAgICAgIGlmIChyb3V0ZVBhcnRzLmxlbmd0aCA8IHBhdHRlcm5QYXJ0cy5sZW5ndGggLSAxIHx8IHJvdXRlUGFydHMubGVuZ3RoID4gcGF0dGVyblBhcnRzLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm5QYXJ0cy5sZW5ndGggIT09IHJvdXRlUGFydHMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFyYW1zMiA9IHt9OwogICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHBhdHRlcm5QYXJ0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBsZXQgcGFydCA9IHBhdHRlcm5QYXJ0c1tpMTFdOwogICAgICAgICAgY29uc3QgaXNPcHRpb25hbCA9IHBhcnQuZW5kc1dpdGgoIj8iKTsKICAgICAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnNsaWNlKDAsIC0xKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoIjoiKSkgewogICAgICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJ0LnNsaWNlKDEpOwogICAgICAgICAgICBpZiAocm91dGVQYXJ0c1tpMTFdICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgICBwYXJhbXMyW3BhcmFtTmFtZV0gPSByb3V0ZVBhcnRzW2kxMV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzT3B0aW9uYWwpIHsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZVBhcnRzW2kxMV0gIT09IHBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJhbXMyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBuYXZpZ2F0aW9uIGF3YXkgZnJvbSBjdXJyZW50IHZpZXcgaXMgYWxsb3dlZAogICAgICAgKi8KICAgICAgYXN5bmMgY2FuTGVhdmVDdXJyZW50VmlldygpIHsKICAgICAgICBpZiAoIXRoaXMuY3VycmVudFZpZXdJZCkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHRoaXMuY3VycmVudFZpZXdJZCk7CiAgICAgICAgaWYgKCFpbnN0YW5jZSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGluc3RhbmNlOwogICAgICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLmNhbkRlYWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHJldHVybiBhd2FpdCBsaWZlY3ljbGUuY2FuRGVhY3RpdmF0ZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQWN0aXZhdGUgYSB2aWV3IC0gaGFuZGxlcyBjYWNoaW5nLCBsaWZlY3ljbGUsIGFuZCByZW5kZXJpbmcKICAgICAgICovCiAgICAgIGFzeW5jIGFjdGl2YXRlVmlldyh2aWV3SWQsIGNvbnRhaW5lciwgcGFyYW1zMikgewogICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzLmdldCh2aWV3SWQpOwogICAgICAgIGlmICghdmlldykgewogICAgICAgICAgY29uc29sZS5lcnJvcihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBzaG91bGRDYWNoZSA9IHZpZXcuY2FjaGUgIT09IGZhbHNlOwogICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3SWQgJiYgdGhpcy5jdXJyZW50Vmlld0lkICE9PSB2aWV3SWQpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgICAgICB9CiAgICAgICAgbGV0IGVsZW1lbnQ0ID0gc2hvdWxkQ2FjaGUgPyB0aGlzLmluc3RhbmNlcy5nZXQodmlld0lkKSA6IHZvaWQgMDsKICAgICAgICBpZiAoZWxlbWVudDQpIHsKICAgICAgICAgIGVsZW1lbnQ0LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWxlbWVudDQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KHZpZXcpOwogICAgICAgICAgaWYgKCFlbGVtZW50NCkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgICAgICAgaWYgKHNob3VsZENhY2hlKSB7CiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VzLnNldCh2aWV3SWQsIGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jdXJyZW50Vmlld0lkID0gdmlld0lkOwogICAgICAgIGF3YWl0IHRoaXMuY2FsbE9uQWN0aXZhdGUoZWxlbWVudDQsIHZpZXdJZCwgcGFyYW1zMik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZWFjdGl2YXRlIGEgdmlldyAoaGlkZSBhbmQgY2FsbCBsaWZlY3ljbGUgaG9vaykKICAgICAgICovCiAgICAgIGFzeW5jIGRlYWN0aXZhdGVWaWV3KHZpZXdJZCkgewogICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICAgICAgaWYgKCFpbnN0YW5jZSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBpbnN0YW5jZTsKICAgICAgICBpZiAodHlwZW9mIGxpZmVjeWNsZS5vbkRlYWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGF3YWl0IGxpZmVjeWNsZS5vbkRlYWN0aXZhdGUoKTsKICAgICAgICB9CiAgICAgICAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgdmlldyBlbGVtZW50IGZyb20gaXRzIGRlZmluaXRpb24gKHN1cHBvcnRzIGFzeW5jIGNvbnRlbnQpCiAgICAgICAqLwogICAgICBhc3luYyBjcmVhdGVWaWV3RWxlbWVudCh2aWV3KSB7CiAgICAgICAgbGV0IGNvbnRlbnQzID0gdmlldy5jb250ZW50OwogICAgICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJmdW5jdGlvbiIgJiYgIShjb250ZW50My5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiYgY29udGVudDMuY29uc3RydWN0b3IubmFtZSA9PT0gIkFzeW5jRnVuY3Rpb24iKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb250ZW50MyA9IGF3YWl0IGNvbnRlbnQzKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3luYyBjb250ZW50IGZvciB2aWV3ICIke3ZpZXcuaWR9IjpgLCBlcnJvcik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgZWxlbWVudDQ7CiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGlmIChjb250ZW50My5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgewogICAgICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgICAgIHdyYXBwZXIuc3R5bGUuY3NzVGV4dCA9ICJkaXNwbGF5OiBjb250ZW50czsiOwogICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGNvbnRlbnQzKCk7CiAgICAgICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgICAgICBlbGVtZW50NCA9IHdyYXBwZXI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgY29udGVudCB0eXBlIGZvciB2aWV3ICIke3ZpZXcuaWR9ImApOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQ0LmRhdGFzZXQudmlld0lkID0gdmlldy5pZDsKICAgICAgICByZXR1cm4gZWxlbWVudDQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENhbGwgb25BY3RpdmF0ZSBsaWZlY3ljbGUgaG9vayBvbiBhIHZpZXcgZWxlbWVudAogICAgICAgKi8KICAgICAgYXN5bmMgY2FsbE9uQWN0aXZhdGUoZWxlbWVudDQsIHZpZXdJZCwgcGFyYW1zMikgewogICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGVsZW1lbnQ0OwogICAgICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uQWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgICBhcHB1aTogdGhpcy5hcHB1aSwKICAgICAgICAgICAgdmlld0lkLAogICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgIH07CiAgICAgICAgICBhd2FpdCBsaWZlY3ljbGUub25BY3RpdmF0ZShjb250ZXh0Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgbWV0aG9kIC0gcmVuZGVycyB2aWV3IHdpdGhvdXQgY2FjaGluZwogICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYWN0aXZhdGVWaWV3IGluc3RlYWQKICAgICAgICovCiAgICAgIHJlbmRlclZpZXcodmlld0lkLCBjb250YWluZXIpIHsKICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFZpZXcgIiR7dmlld0lkfSIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgIGxldCBlbGVtZW50NDsKICAgICAgICBjb25zdCBjb250ZW50MyA9IHZpZXcuY29udGVudDsKICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQzID09PSAic3RyaW5nIikgewogICAgICAgICAgZWxlbWVudDQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGNvbnRlbnQzKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgaWYgKGNvbnRlbnQzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7CiAgICAgICAgICAgIGVsZW1lbnQ0ID0gbmV3IGNvbnRlbnQzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gInZpZXctY29udGVudC13cmFwcGVyIjsKICAgICAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gY29udGVudDMoKTsKICAgICAgICAgICAgRCh0ZW1wbGF0ZSwgd3JhcHBlcik7CiAgICAgICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgICAgIHRoaXMuaW5zdGFuY2VzLnNldCh2aWV3SWQsIGVsZW1lbnQ0KTsKICAgICAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSB2aWV3SWQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB2aWV3IElECiAgICAgICAqLwogICAgICBnZXRDdXJyZW50Vmlld0lkKCkgewogICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBjYWNoZWQgaW5zdGFuY2Ugb2YgYSB2aWV3CiAgICAgICAqLwogICAgICBnZXRJbnN0YW5jZSh2aWV3SWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGEgc3BlY2lmaWMgY2FjaGVkIGluc3RhbmNlCiAgICAgICAqLwogICAgICBjbGVhckluc3RhbmNlKHZpZXdJZCkgewogICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLnBhcmVudE5vZGUpIHsKICAgICAgICAgIGluc3RhbmNlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW5zdGFuY2UpOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc3RhbmNlcy5kZWxldGUodmlld0lkKTsKICAgICAgICBpZiAodGhpcy5jdXJyZW50Vmlld0lkID09PSB2aWV3SWQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFZpZXdJZCA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDbGVhciBhbGwgaW5zdGFuY2VzCiAgICAgICAqLwogICAgICBjbGVhckluc3RhbmNlcygpIHsKICAgICAgICBmb3IgKGNvbnN0IFt2aWV3SWQsIGluc3RhbmNlXSBvZiB0aGlzLmluc3RhbmNlcykgewogICAgICAgICAgaWYgKGluc3RhbmNlLnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5zdGFuY2VzLmNsZWFyKCk7CiAgICAgICAgdGhpcy5jdXJyZW50Vmlld0lkID0gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVW5yZWdpc3RlciBhIHZpZXcKICAgICAgICovCiAgICAgIHVucmVnaXN0ZXIodmlld0lkKSB7CiAgICAgICAgdGhpcy5jbGVhckluc3RhbmNlKHZpZXdJZCk7CiAgICAgICAgcmV0dXJuIHRoaXMudmlld3MuZGVsZXRlKHZpZXdJZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIHRoZSByZWdpc3RyeQogICAgICAgKi8KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy52aWV3cy5jbGVhcigpOwogICAgICAgIHRoaXMuY2xlYXJJbnN0YW5jZXMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgYSB2aWV3IGlzIHJlZ2lzdGVyZWQKICAgICAgICovCiAgICAgIGhhcyh2aWV3SWQpIHsKICAgICAgICByZXR1cm4gdGhpcy52aWV3cy5oYXModmlld0lkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB2aWV3cwogICAgICAgKi8KICAgICAgZ2V0IHNpemUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudmlld3Muc2l6ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS5kZW1vLmpzCnZhciBkZW1vRnVuYzI4Owp2YXIgaW5pdF9kZWVzX2FwcHVpX21haW5tZW51X2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLW1haW5tZW51L2RlZXMtYXBwdWktbWFpbm1lbnUuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMyOCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tbWFpbm1lbnUtY29udGFpbmVyIC5zcGFjZXIgewogICAgICBmbGV4OiAxOwogICAgICBiYWNrZ3JvdW5kOiAjMGYwZjBmOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1tYWlubWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgLmxvZ29JY29uPSR7Imx1Y2lkZTpib3gifQogICAgICAubG9nb1RleHQ9JHsiQWNtZSBBcHAifQogICAgICAubWVudUdyb3Vwcz0ke1sKICAgICAgewogICAgICAgIHRhYnM6IFsKICAgICAgICAgIHsga2V5OiAiRGFzaGJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkRhc2hib2FyZCIpIH0sCiAgICAgICAgICB7IGtleTogIkluYm94IiwgaWNvbk5hbWU6ICJsdWNpZGU6aW5ib3giLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbmJveCIpIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiV29ya3NwYWNlIiwKICAgICAgICB0YWJzOiBbCiAgICAgICAgICB7IGtleTogIlByb2plY3RzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvamVjdHMiKSB9LAogICAgICAgICAgeyBrZXk6ICJUYXNrcyIsIGljb25OYW1lOiAibHVjaWRlOmNoZWNrU3F1YXJlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVGFza3MiKSB9LAogICAgICAgICAgeyBrZXk6ICJEb2N1bWVudHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50cyIpIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgICAgICB0YWJzOiBbCiAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDMiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIikgfSwKICAgICAgICAgIHsga2V5OiAiSW5zaWdodHMiLCBpY29uTmFtZTogImx1Y2lkZTpsaWdodGJ1bGIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbnNpZ2h0cyIpIH0KICAgICAgICBdCiAgICAgIH0KICAgIF19CiAgICAgIC5ib3R0b21UYWJzPSR7WwogICAgICB7IGtleTogIlNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpIH0sCiAgICAgIHsga2V5OiAiSGVscCIsIGljb25OYW1lOiAibHVjaWRlOmhlbHBDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIikgfQogICAgXX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWlubWVudS9kZWVzLWFwcHVpLW1haW5tZW51LmpzCnZhciBfX2VzRGVjb3JhdGUzNywgX19ydW5Jbml0aWFsaXplcnMzOCwgRGVlc0FwcHVpTWFpbm1lbnU7CnZhciBpbml0X2RlZXNfYXBwdWlfbWFpbm1lbnUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLW1haW5tZW51L2RlZXMtYXBwdWktbWFpbm1lbnUuanMiKCkgewogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF9pbnRlcmZhY2VzNCgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGVlc19hcHB1aV9tYWlubWVudV9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUzNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczM4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzQXBwdWlNYWlubWVudSA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLW1haW5tZW51IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9sb2dvSWNvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xvZ29JY29uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9nb1RleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb2dvVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21lbnVHcm91cHNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tZW51R3JvdXBzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib3R0b21UYWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYm90dG9tVGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFic19kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xsYXBzZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzQXBwdWlNYWlubWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9sb2dvSWNvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sb2dvVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9tZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfYm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2NvbGxhcHNlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfbG9nb0ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nb0ljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvZ29JY29uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvZ29JY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubG9nb0ljb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvZ29JY29uX2luaXRpYWxpemVycywgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9sb2dvVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2dvVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nb1RleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9nb1RleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5sb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzLCBfbG9nb1RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX21lbnVHcm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51R3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9tZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9ib3R0b21UYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvdHRvbVRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvdHRvbVRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm90dG9tVGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBfYm90dG9tVGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfdGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJzX2luaXRpYWxpemVycywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZFRhYiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFRhYiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfY29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgX2NvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXBwdWlNYWlubWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI4OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJBcHAgVUkiXTsKICAgICAgICAjbG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29JY29uX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgLy8gTG9nbyBwcm9wZXJ0aWVzCiAgICAgICAgZ2V0IGxvZ29JY29uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsb2dvSWNvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBsb2dvVGV4dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbG9nb1RleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgLy8gTWVudSBncm91cHMgKG5ldyB3YXkpCiAgICAgICAgZ2V0IG1lbnVHcm91cHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWVudUdyb3Vwcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9tZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfYm90dG9tVGFic19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgLy8gQm90dG9tIHRhYnMgKHBpbm5lZCB0byBib3R0b20pCiAgICAgICAgZ2V0IGJvdHRvbVRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgLy8gTGVnYWN5IHRhYnMgcHJvcGVydHkgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQogICAgICAgIGdldCB0YWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBzZWxlY3RlZFRhYigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRUYWIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBjb2xsYXBzZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLW1lbnUtd2lkdGgtZXhwYW5kZWQ6IDIwMHB4OwogICAgICAgIC0tbWVudS13aWR0aC1jb2xsYXBzZWQ6IDU2cHg7CiAgICAgICAgLS10b29sdGlwLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzE4MTgxYiIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzE4MTgxYiIpfTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWFpbkNvbnRhaW5lciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgICAgei1pbmRleDogJHt6SW5kZXhMYXllcnMuZml4ZWQuYXBwQmFyfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgc2Fucy1zZXJpZjsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1haW5Db250YWluZXIgewogICAgICAgIHdpZHRoOiB2YXIoLS1tZW51LXdpZHRoLWNvbGxhcHNlZCk7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBMb2dvIFNlY3Rpb24gKi8KICAgICAgLmxvZ29TZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE0cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlNWU1IiwgIiMxYTFhMWEiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLmxvZ29TZWN0aW9uIC5sb2dvSWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubG9nb1NlY3Rpb24gLmxvZ29UZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5sb2dvU2VjdGlvbiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubG9nb1NlY3Rpb24gLmxvZ29UZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBNaWRkbGUgU2VjdGlvbiAoc2Nyb2xsYWJsZSkgKi8KICAgICAgLm1lbnVTZWN0aW9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4yNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSIpfTsKICAgICAgfQoKICAgICAgLyogTWVudSBHcm91cCAqLwogICAgICAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51R3JvdXA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiM3MzczNzMiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBtYXgtaGVpZ2h0IDAuMjVzIGVhc2U7CiAgICAgICAgbWF4LWhlaWdodDogMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5ncm91cEhlYWRlciB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXgtaGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuZ3JvdXBUYWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgLyogVGFiIEl0ZW0gKi8KICAgICAgLnRhYiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjYyNjI2IiwgIiNlNWU1ZTUiKX07CiAgICAgIH0KCiAgICAgIC50YWI6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAudGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIENvbGxhcHNlZCB0YWIgc3R5bGVzICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC50YWIgLnRhYkxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC50YWIuc2VsZWN0ZWRUYWI6OmJlZm9yZSB7CiAgICAgICAgbGVmdDogLTRweDsKICAgICAgfQoKICAgICAgLyogVG9vbHRpcCBmb3IgY29sbGFwc2VkIHN0YXRlICovCiAgICAgIC50YWItdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEwMCU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS10b29sdGlwLWZnKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICB9CgogICAgICAudGFiLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiOmhvdmVyIC50YWItdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAxczsKICAgICAgfQoKICAgICAgLyogQmFkZ2Ugc3R5bGVzICovCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2YzZjQ2IiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5zdWNjZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjZmNlNyIsICIjMTQ1MzJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzE2NjUzNCIsICIjNGFkZTgwIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWYzYzciLCAiIzQ1MWEwMyIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5MjQwMGUiLCAiI2ZiYmYyNCIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZlZTJlMiIsICIjNDUwYTBhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5MWIxYiIsICIjZjg3MTcxIil9OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBCb3R0b20gU2VjdGlvbiAqLwogICAgICAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5ib3R0b21TZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggNHB4OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJzKCk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFt7CiAgICAgICAgICAgICAgbmFtZTogImFwcCBzZXR0aW5ncyIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBpY29uTmFtZTogImdlYXIiCiAgICAgICAgICAgIH1dKTsKICAgICAgICAgIH19PgogICAgICAgICR7dGhpcy5sb2dvSWNvbiB8fCB0aGlzLmxvZ29UZXh0ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvU2VjdGlvbiI+CiAgICAgICAgICAgICR7dGhpcy5sb2dvSWNvbiA/IGIyYDxkZWVzLWljb24gY2xhc3M9ImxvZ29JY29uIiAuaWNvbj0iJHt0aGlzLmxvZ29JY29ufSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAke3RoaXMubG9nb1RleHQgPyBiMmA8c3BhbiBjbGFzcz0ibG9nb1RleHQiPiR7dGhpcy5sb2dvVGV4dH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51U2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUdyb3Vwcy5sZW5ndGggPiAwID8gdGhpcy5yZW5kZXJNZW51R3JvdXBzKCkgOiB0aGlzLnJlbmRlckxlZ2FjeVRhYnMoKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tU2VjdGlvbiI+CiAgICAgICAgICAgICR7dGhpcy5ib3R0b21UYWJzLm1hcCgodGFiQXJnKSA9PiB0aGlzLnJlbmRlclRhYih0YWJBcmcpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvbGxhcHNlLXRvZ2dsZSIgQGNsaWNrPSIkeygpID0+IHRoaXMudG9nZ2xlQ29sbGFwc2UoKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGhpcy5jb2xsYXBzZWQgPyAibHVjaWRlOmNoZXZyb25SaWdodCIgOiAibHVjaWRlOmNoZXZyb25MZWZ0In0iPjwvZGVlcy1pY29uPgogICAgICA8L2J1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlck1lbnVHcm91cHMoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgICAke2dyb3VwLm5hbWUgPyBiMmA8ZGl2IGNsYXNzPSJncm91cEhlYWRlciI+JHtncm91cC5uYW1lfTwvZGl2PmAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAgICR7Z3JvdXAuaXRlbXMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGApfQogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyTGVnYWN5VGFicygpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJncm91cFRhYnMiPgogICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlclRhYih0YWJBcmcpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ0YWIgJHt0YWJBcmcgPT09IHRoaXMuc2VsZWN0ZWRUYWIgPyAic2VsZWN0ZWRUYWIiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVGFiKHRhYkFyZyk7CiAgICAgICAgICB9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGFiQXJnLmljb25OYW1lIHx8ICIifSI+PC9kZWVzLWljb24+CiAgICAgICAgPHNwYW4gY2xhc3M9InRhYkxhYmVsIj4ke3RhYkFyZy5rZXl9PC9zcGFuPgogICAgICAgICR7dGFiQXJnLmJhZGdlICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke3RhYkFyZy5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHt0YWJBcmcuYmFkZ2V9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7dGFiQXJnLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0QWxsVGFicygpIHsKICAgICAgICAgIGlmICh0aGlzLm1lbnVHcm91cHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBncm91cFRhYnMgPSB0aGlzLm1lbnVHcm91cHMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLml0ZW1zKTsKICAgICAgICAgICAgcmV0dXJuIFsuLi5ncm91cFRhYnMsIC4uLnRoaXMuYm90dG9tVGFic107CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gWy4uLnRoaXMudGFicywgLi4udGhpcy5ib3R0b21UYWJzXTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlVGFiKHRhYkFyZykgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRhYkFyZzsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIuYWN0aW9uKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWJBcmcgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuZ2V0QWxsVGFicygpOwogICAgICAgICAgaWYgKGFsbFRhYnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYihhbGxUYWJzWzBdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbGxhcHNlLWNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBcHB1aU1haW5tZW51MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS5kZW1vLmpzCnZhciBkZW1vRnVuYzI5Owp2YXIgaW5pdF9kZWVzX2FwcHVpX3NlY29uZGFyeW1lbnVfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMyOSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLXNlY29uZGFyeW1lbnUtY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIGgzIHsKICAgICAgY29sb3I6ICNmYWZhZmE7CiAgICAgIG1hcmdpbi10b3A6IDA7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIGNvZGUgewogICAgICBiYWNrZ3JvdW5kOiAjMjcyNzJhOwogICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIC5kZW1vLXNlY29uZGFyeW1lbnUtY29udGFpbmVyIC5zcGFjZXIgdWwgewogICAgICBsaW5lLWhlaWdodDogMS44OwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciI+CiAgICA8ZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51CiAgICAgIC5oZWFkaW5nPSR7IlByb2plY3RzIn0KICAgICAgLmdyb3Vwcz0ke1sKICAgICAgLy8gR3JvdXAgMTogVGFiIGl0ZW1zIChkZWZhdWx0IGJlaGF2aW9yKQogICAgICB7CiAgICAgICAgbmFtZTogIk5hdmlnYXRpb24iLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvbXBhc3MiLAogICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICB7IGtleTogIkRhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkRhc2hib2FyZCBjbGlja2VkIiksIGJhZGdlOiAzLCBiYWRnZVZhcmlhbnQ6ICJ3YXJuaW5nIiB9LAogICAgICAgICAgeyBrZXk6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiB9LAogICAgICAgICAgeyBrZXk6ICJBbmFseXRpY3MiLCBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbmFseXRpY3MgY2xpY2tlZCIpIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIC8vIEdyb3VwIDI6IEFjdGlvbnMKICAgICAgewogICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDcmVhdGUgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKSB9LAogICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IERhdGEiLCBpY29uTmFtZTogImx1Y2lkZTp1cGxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgRGF0YSBjbGlja2VkISIpIH0sCiAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiRGVsZXRlIEFsbCIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsIHZhcmlhbnQ6ICJkYW5nZXIiLCBjb25maXJtTWVzc2FnZTogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkRlbGV0ZWQhIikgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgLy8gR3JvdXAgMzogRmlsdGVycwogICAgICB7CiAgICAgICAgbmFtZTogIkZpbHRlcnMiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICAgICAgaXRlbXM6IFsKICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiU3RhdHVzIiB9LAogICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBBY3RpdmUiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja0NpcmNsZSIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLCBhY3RpdmUpIH0sCiAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBBcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJDYXRlZ29yaWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6dGFnIiwgY29sbGFwc2VkOiBmYWxzZSwgb3B0aW9uczogWwogICAgICAgICAgICB7IGtleTogImZyb250ZW5kIiwgbGFiZWw6ICJGcm9udGVuZCIsIGNoZWNrZWQ6IHRydWUsIGljb25OYW1lOiAibHVjaWRlOm1vbml0b3IiIH0sCiAgICAgICAgICAgIHsga2V5OiAiYmFja2VuZCIsIGxhYmVsOiAiQmFja2VuZCIsIGNoZWNrZWQ6IHRydWUsIGljb25OYW1lOiAibHVjaWRlOnNlcnZlciIgfSwKICAgICAgICAgICAgeyBrZXk6ICJkZXZvcHMiLCBsYWJlbDogIkRldk9wcyIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpjbG91ZCIgfSwKICAgICAgICAgICAgeyBrZXk6ICJkZXNpZ24iLCBsYWJlbDogIkRlc2lnbiIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpwYWxldHRlIiB9CiAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiU2VsZWN0ZWQgY2F0ZWdvcmllczoiLCBrZXlzMikgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgLy8gR3JvdXAgNDogTGlua3MgYW5kIG1pc2MKICAgICAgewogICAgICAgIG5hbWU6ICJSZXNvdXJjZXMiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJvb2tPcGVuIiwKICAgICAgICBjb2xsYXBzZWQ6IHRydWUsCiAgICAgICAgaXRlbXM6IFsKICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiRG9jdW1lbnRhdGlvbiIgfSwKICAgICAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJBUEkgUmVmZXJlbmNlIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBocmVmOiAiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZG9jcyIgfSwKICAgICAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJVc2VyIEd1aWRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6Ym9vayIsIGhyZWY6ICJodHRwczovL2RvY3MuZXhhbXBsZS5jb20vZ3VpZGUiIH0sCiAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJTdXBwb3J0IiB9LAogICAgICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIkhlbHAgQ2VudGVyIiwgaWNvbk5hbWU6ICJsdWNpZGU6aGVscENpcmNsZSIsIGhyZWY6ICIvaGVscCIsIGV4dGVybmFsOiBmYWxzZSB9LAogICAgICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIkdpdEh1YiBJc3N1ZXMiLCBpY29uTmFtZTogImx1Y2lkZTpnaXRodWIiLCBocmVmOiAiaHR0cHM6Ly9naXRodWIuY29tL2V4YW1wbGUvaXNzdWVzIiB9CiAgICAgICAgXQogICAgICB9CiAgICBdfQogICAgICBAaXRlbS1zZWxlY3Q9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVGFiIHNlbGVjdGVkOiIsIGUxMS5kZXRhaWwpfQogICAgICBAYWN0aW9uLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkFjdGlvbiBjbGlja2VkOiIsIGUxMS5kZXRhaWwpfQogICAgICBAZmlsdGVyLXRvZ2dsZT0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJGaWx0ZXIgdG9nZ2xlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQG11bHRpZmlsdGVyLWNoYW5nZT0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJNdWx0aS1maWx0ZXIgY2hhbmdlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGxpbmstY2xpY2s9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTGluayBjbGlja2VkOiIsIGUxMS5kZXRhaWwpfQogICAgPjwvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51PgogICAgPGRpdiBjbGFzcz0ic3BhY2VyIj4KICAgICAgPGgzPlNlY29uZGFyeSBNZW51IERlbW88L2gzPgogICAgICA8cD5UaGlzIGRlbW8gc2hvd2Nhc2VzIGFsbCA4IGl0ZW0gdHlwZXM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxjb2RlPnRhYjwvY29kZT4gLSBTZWxlY3RhYmxlIGl0ZW1zIChOYXZpZ2F0aW9uIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gLSBCbHVlIGFjdGlvbnMgKEFjdGlvbnMgZ3JvdXApPC9saT4KICAgICAgICA8bGk+PGNvZGU+YWN0aW9uPC9jb2RlPiB3aXRoIDxjb2RlPnZhcmlhbnQ6ICdkYW5nZXInPC9jb2RlPiAtIFJlZCBkYW5nZXIgYWN0aW9uPC9saT4KICAgICAgICA8bGk+PGNvZGU+ZmlsdGVyPC9jb2RlPiAtIENoZWNrYm94IHRvZ2dsZXMgKEZpbHRlcnMgZ3JvdXApPC9saT4KICAgICAgICA8bGk+PGNvZGU+bXVsdGlGaWx0ZXI8L2NvZGU+IC0gQ29sbGFwc2libGUgbXVsdGktc2VsZWN0IChDYXRlZ29yaWVzKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmRpdmlkZXI8L2NvZGU+IC0gVmlzdWFsIHNlcGFyYXRvcnM8L2xpPgogICAgICAgIDxsaT48Y29kZT5oZWFkZXI8L2NvZGU+IC0gU2VjdGlvbiBsYWJlbHM8L2xpPgogICAgICAgIDxsaT48Y29kZT5saW5rPC9jb2RlPiAtIEV4dGVybmFsL2ludGVybmFsIGxpbmtzIChSZXNvdXJjZXMgZ3JvdXApPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VHJ5IHRoZSBjb2xsYXBzZSB0b2dnbGUgb24gdGhlIGxlZnQgZWRnZSE8L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUuanMKdmFyIF9fZXNEZWNvcmF0ZTM4LCBfX3J1bkluaXRpYWxpemVyczM5LCBEZWVzQXBwdWlTZWNvbmRhcnltZW51Owp2YXIgaW5pdF9kZWVzX2FwcHVpX3NlY29uZGFyeW1lbnUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51LmpzIigpIHsKICAgIGluaXRfcGx1Z2luczQoKTsKICAgIGluaXRfaW50ZXJmYWNlczQoKTsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfYXBwdWlfc2Vjb25kYXJ5bWVudV9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGUzOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczM5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzQXBwdWlTZWNvbmRhcnltZW51ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfaGVhZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2dyb3Vwc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2dyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0aW9uT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbGxhcHNlZEdyb3Vwc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbGxhcHNlZEdyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3JlbmRlckNvdW50ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVuZGVyQ291bnRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbGxhcHNlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9ncm91cHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX2NvbGxhcHNlZEdyb3Vwc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3JlbmRlckNvdW50ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGVhZGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9ncm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZ3JvdXBzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBfZ3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uT3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGlvbk9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0aW9uT3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkSXRlbSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycywgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZEdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkR3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZEdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbGxhcHNlZEdyb3VwcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgX2NvbGxhcHNlZEdyb3Vwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZE11bHRpRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkTXVsdGlGaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2luaXRpYWxpemVycywgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZW5kZXJDb3VudGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJDb3VudGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlbmRlckNvdW50ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZW5kZXJDb3VudGVyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yZW5kZXJDb3VudGVyX2luaXRpYWxpemVycywgX3JlbmRlckNvdW50ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb2xsYXBzZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI5OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJBcHAgVUkiXTsKICAgICAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICJNZW51Iik7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICAvKiogRHluYW1pYyBoZWFkaW5nIC0gdHlwaWNhbGx5IHNob3dzIHRoZSBzZWxlY3RlZCBNYWluTWVudSBpdGVtICovCiAgICAgICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIC8qKiBHcm91cGVkIGl0ZW1zIHdpdGggY29sbGFwc2Ugc3VwcG9ydCAtIHN1cHBvcnRzIG5ldyBJU2Vjb25kYXJ5TWVudUdyb3VwICovCiAgICAgICAgZ2V0IGdyb3VwcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNncm91cHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGdyb3Vwcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2dyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIC8qKiBMZWdhY3kgZmxhdCBsaXN0IHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgICAgICBnZXQgc2VsZWN0aW9uT3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25PcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3Rpb25PcHRpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0aW9uT3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICAvKiogQ3VycmVudGx5IHNlbGVjdGVkIHRhYiBpdGVtICovCiAgICAgICAgZ2V0IHNlbGVjdGVkSXRlbSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgICAgIC8qKiBJbnRlcm5hbCBzdGF0ZSBmb3IgY29sbGFwc2VkIGdyb3VwcyAqLwogICAgICAgIGdldCBjb2xsYXBzZWRHcm91cHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xsYXBzZWRHcm91cHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2xsYXBzZWRHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbGxhcHNlZE11bHRpRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2NvbGxhcHNlZEdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19pbml0aWFsaXplcnMsIC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpKTsKICAgICAgICAvKiogSW50ZXJuYWwgc3RhdGUgZm9yIGNvbGxhcHNlZCBtdWx0aS1maWx0ZXJzICovCiAgICAgICAgZ2V0IGNvbGxhcHNlZE11bHRpRmlsdGVycygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbGxhcHNlZE11bHRpRmlsdGVycyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbGxhcHNlZE11bHRpRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcmVuZGVyQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX3JlbmRlckNvdW50ZXJfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgLyoqIFJlbmRlciBjb3VudGVyIHRvIGZvcmNlIHJlLXJlbmRlcnMgd2hlbiBpdGVtcyBhcmUgbXV0YXRlZCAqLwogICAgICAgIGdldCByZW5kZXJDb3VudGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbmRlckNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlbmRlckNvdW50ZXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZW5kZXJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICAvKiogSG9yaXpvbnRhbCBjb2xsYXBzZSBzdGF0ZSAqLwogICAgICAgIGdldCBjb2xsYXBzZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLXNpZGViYXItd2lkdGgtZXhwYW5kZWQ6IDI0MHB4OwogICAgICAgIC0tc2lkZWJhci13aWR0aC1jb2xsYXBzZWQ6IDU2cHg7CiAgICAgICAgLS1zaWRlYmFyLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICAgIC0tc2lkZWJhci1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM1MjUyNTIiLCAiI2EzYTNhMyIpfTsKICAgICAgICAtLXNpZGViYXItZmctbXV0ZWQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiM3MzczNzMiKX07CiAgICAgICAgLS1zaWRlYmFyLWZnLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXNpZGViYXItYm9yZGVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIC0tc2lkZWJhci1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICAtLXNpZGViYXItYWN0aXZlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIC0tc2lkZWJhci1hY2NlbnQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS10b29sdGlwLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzE4MTgxYiIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzE4MTgxYiIpfTsKCiAgICAgICAgLyogQmFkZ2UgY29sb3JzICovCiAgICAgICAgLS1iYWRnZS1kZWZhdWx0LWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzZjNmNDYiLCAiI2ExYTFhYSIpfTsKICAgICAgICAtLWJhZGdlLXN1Y2Nlc3MtYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGNmY2U3IiwgIiMxNDUzMmQiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzE2NjUzNCIsICIjNGFkZTgwIil9OwogICAgICAgIC0tYmFkZ2Utd2FybmluZy1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWYzYzciLCAiIzQ1MWEwMyIpfTsKICAgICAgICAtLWJhZGdlLXdhcm5pbmctZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTI0MDBlIiwgIiNmYmJmMjQiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzQ1MGEwYSIpfTsKICAgICAgICAtLWJhZGdlLWVycm9yLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5MWIxYiIsICIjZjg3MTcxIil9OwoKICAgICAgICAvKiBBY3Rpb24gY29sb3JzICovCiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzNiODJmNiIpfTsKICAgICAgICAtLWFjdGlvbi1wcmltYXJ5LWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjNjBhNWZhIil9OwogICAgICAgIC0tYWN0aW9uLWRhbmdlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2VmNDQ0NCIpfTsKICAgICAgICAtLWFjdGlvbi1kYW5nZXItaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYjkxYzFjIiwgIiNmODcxNzEiKX07CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtZXhwYW5kZWQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYmcpOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIHsKICAgICAgICB3aWR0aDogdmFyKC0tc2lkZWJhci13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogRmxvYXRpbmcgY29sbGFwc2UgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IC0xMnB4OwogICAgICAgIHRvcDogMjRweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlNWU1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjYTFhMWFhIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRlciBTZWN0aW9uICovCiAgICAgIC5oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgLmhlYWRpbmcgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5oZWFkZXIgLmhlYWRpbmcgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYWJsZSBNZW51IFNlY3Rpb24gKi8KICAgICAgLm1lbnVTZWN0aW9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4yNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSIpfTsKICAgICAgfQoKICAgICAgLyogTWVudSBHcm91cCAqLwogICAgICAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUdyb3VwIHsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDQwcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpob3ZlciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTQwLCAxMjAsIDEwMCwgMC4wNikiLCAicmdiYSgxODAsIDE2MCwgMTQwLCAwLjA4KSIpfTsKICAgICAgICBwYWRkaW5nOiA3cHggMTFweDsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyOm5vdCguY29sbGFwc2VkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTQwLCAxMjAsIDEwMCwgMC4wNikiLCAicmdiYSgxODAsIDE2MCwgMTQwLCAwLjA4KSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzc4NzE2YyIsICIjYjVhOTlhIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5ncm91cFRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzc4NzE2YyIsICIjYjVhOTlhIil9OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzc4NzE2YyIsICIjYjVhOTlhIil9OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIuY29sbGFwc2VkIC5jaGV2cm9uIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOwogICAgICB9CgogICAgICAvKiBIaWRlIGdyb3VwIGhlYWRlcnMgd2hlbiBob3Jpem9udGFsbHkgY29sbGFwc2VkICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogR3JvdXAgSXRlbXMgQ29udGFpbmVyICovCiAgICAgIC5ncm91cEl0ZW1zIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4yNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1hcmdpbiAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDEwMDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEl0ZW1zLmNvbGxhcHNlZCB7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIEFsd2F5cyBzaG93IGl0ZW1zIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAocmVnYXJkbGVzcyBvZiBncm91cCBjb2xsYXBzZSBzdGF0ZSkgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5ncm91cEl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgSXRlbSBCYXNlICovCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiAycHggMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQ1MDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWhvdmVyKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW06YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLnNlbGVjdGVkOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAycHggMnB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgLyogQWN0aW9uIEl0ZW0gU3R5bGVzICovCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeSB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1wcmltYXJ5OmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLXByaW1hcnktaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xMikiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeSBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tZGFuZ2VyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLWRhbmdlcik7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tZGFuZ2VyOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aW9uLWRhbmdlci1ob3Zlcik7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjIwLCAzOCwgMzgsIDAuMDgpIiwgInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlciBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIEZpbHRlciBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uZmlsdGVyIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ0IiwgIiM1MjUyNTIiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlciAuZmlsdGVyLWNoZWNrYm94LmNoZWNrZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWNjZW50KTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXNpZGViYXItYWNjZW50KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmZpbHRlciAuZmlsdGVyLWNoZWNrYm94IGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAvKiBNdWx0aS1GaWx0ZXIgQ29udGFpbmVyICovCiAgICAgIC5tdWx0aUZpbHRlciB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSIpfTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItdGl0bGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci1jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWJnKTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAuY2hldnJvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbnMgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zLmNvbGxhcHNlZCB7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmcpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWhvdmVyKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gLm9wdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gLm9wdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiBkZWVzLWljb24ub3B0aW9uLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC8qIERpdmlkZXIgKi8KICAgICAgLm1lbnVEaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgbWFyZ2luOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51RGl2aWRlciB7CiAgICAgICAgbWFyZ2luOiA4cHggNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIvTGFiZWwgKi8KICAgICAgLm1lbnVIZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDEycHggMTJweCA0cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUhlYWRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGluayBJdGVtICovCiAgICAgIC5tZW51SXRlbS5saW5rIC5leHRlcm5hbC1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgbWVudSBpdGVtIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5pdGVtTGFiZWwgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtLnNlbGVjdGVkOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmZpbHRlci1jaGVja2JveCwKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tdWx0aUZpbHRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogVG9vbHRpcCBmb3IgY29sbGFwc2VkIHN0YXRlICovCiAgICAgIC5pdGVtLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLml0ZW0tdG9vbHRpcDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTRweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgYm9yZGVyOiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbTpob3ZlciAuaXRlbS10b29sdGlwIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDFzOwogICAgICB9CgogICAgICAvKiBCYWRnZSBTdHlsZXMgKi8KICAgICAgLmJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIG1pbi13aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYmFkZ2UuZGVmYXVsdCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWRlZmF1bHQtZmcpOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2Utc3VjY2Vzcy1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtZmcpOwogICAgICB9CgogICAgICAuYmFkZ2Uud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2Utd2FybmluZy1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLXdhcm5pbmctZmcpOwogICAgICB9CgogICAgICAuYmFkZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWVycm9yLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tYmFkZ2UtZXJyb3ItZmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmJhZGdlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBMZWdhY3kgb3B0aW9ucyBjb250YWluZXIgKi8KICAgICAgLmxlZ2FjeU9wdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyIChsZWdhY3kpICovCiAgICAgIC5kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgbWFyZ2luOiA4cHggMTJweDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRpbmciPiR7dGhpcy5oZWFkaW5nfTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51U2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMuZ3JvdXBzLmxlbmd0aCA+IDAgPyB0aGlzLnJlbmRlckdyb3VwcygpIDogdGhpcy5yZW5kZXJMZWdhY3lPcHRpb25zKCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJjb2xsYXBzZS10b2dnbGUiIEBjbGljaz0iJHsoKSA9PiB0aGlzLnRvZ2dsZUNvbGxhcHNlKCl9Ij4KICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMuY29sbGFwc2VkID8gImx1Y2lkZTpjaGV2cm9uUmlnaHQiIDogImx1Y2lkZTpjaGV2cm9uTGVmdCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgPC9idXR0b24+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJHcm91cHMoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5ncm91cHMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imdyb3VwSGVhZGVyICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKGdyb3VwLm5hbWUpID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLnRvZ2dsZUdyb3VwKGdyb3VwLm5hbWUpfSIKICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imdyb3VwVGl0bGUiPgogICAgICAgICAgICAgICR7Z3JvdXAuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihncm91cC5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICAgJHtncm91cC5uYW1lfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImNoZXZyb24iIC5pY29uPSIkeyJsdWNpZGU6Y2hldnJvbkRvd24ifSI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwSXRlbXMgJHt0aGlzLmNvbGxhcHNlZEdyb3Vwcy5oYXMoZ3JvdXAubmFtZSkgPyAiY29sbGFwc2VkIiA6ICIifSI+CiAgICAgICAgICAgICR7Z3JvdXAuaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLnJlbmRlckl0ZW0oaXRlbSwgZ3JvdXApKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgKX0KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgICAgIGlmICgiaGlkZGVuIiBpbiBpdGVtICYmIGl0ZW0uaGlkZGVuKSB7CiAgICAgICAgICAgIHJldHVybiBiMmBgOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSAidHlwZSIgaW4gaXRlbSA/IGl0ZW0udHlwZSA6ICJ0YWIiOwogICAgICAgICAgc3dpdGNoIChpdGVtVHlwZSkgewogICAgICAgICAgICBjYXNlICJhY3Rpb24iOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckFjdGlvbkl0ZW0oaXRlbSk7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRmlsdGVySXRlbShpdGVtKTsKICAgICAgICAgICAgY2FzZSAibXVsdGlGaWx0ZXIiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKTsKICAgICAgICAgICAgY2FzZSAiZGl2aWRlciI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGl2aWRlcigpOwogICAgICAgICAgICBjYXNlICJoZWFkZXIiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckhlYWRlcihpdGVtKTsKICAgICAgICAgICAgY2FzZSAibGluayI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlua0l0ZW0oaXRlbSk7CiAgICAgICAgICAgIGNhc2UgInRhYiI6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShpdGVtLCBncm91cCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlbmRlclRhYkl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbT8ua2V5ID09PSBpdGVtLmtleTsKICAgICAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBpdGVtLmRpc2FibGVkID09PSB0cnVlOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0gJHtpc0Rpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9IiR7KCkgPT4gIWlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKX0iCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2l0ZW0uYmFkZ2UgIT09IHZvaWQgMCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7aXRlbS5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHtpdGVtLmJhZGdlfTwvc3Bhbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyQWN0aW9uSXRlbShpdGVtKSB7CiAgICAgICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS52YXJpYW50IHx8ICJwcmltYXJ5IjsKICAgICAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBpdGVtLmRpc2FibGVkID09PSB0cnVlOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtIGFjdGlvbi0ke3ZhcmlhbnR9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlQWN0aW9uQ2xpY2soaXRlbSl9IgogICAgICA+CiAgICAgICAgJHtpdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oaXRlbS5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW1MYWJlbCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyRmlsdGVySXRlbShpdGVtKSB7CiAgICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBmaWx0ZXIgJHtpdGVtLmFjdGl2ZSA/ICJhY3RpdmUiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlRmlsdGVyVG9nZ2xlKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke2l0ZW0uYWN0aXZlID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5hY3RpdmUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKSB7CiAgICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhpdGVtLmtleSk7CiAgICAgICAgICBjb25zdCBjaGVja2VkQ291bnQgPSBpdGVtLm9wdGlvbnMuZmlsdGVyKChvcHQpID0+IG9wdC5jaGVja2VkKS5sZW5ndGg7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpRmlsdGVyIj4KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0ibXVsdGlGaWx0ZXItaGVhZGVyICR7aXNDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLnRvZ2dsZU11bHRpRmlsdGVyKGl0ZW0ua2V5KX0iCiAgICAgICAgPgogICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLXRpdGxlIj4KICAgICAgICAgICAgJHtpdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oaXRlbS5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICR7aXRlbS5rZXl9CiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAke2NoZWNrZWRDb3VudCA+IDAgPyBiMmA8c3BhbiBjbGFzcz0ibXVsdGlGaWx0ZXItY291bnQiPiR7Y2hlY2tlZENvdW50fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbnMgJHtpc0NvbGxhcHNlZCA/ICJjb2xsYXBzZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5vcHRpb25zLm1hcCgob3B0aW9uMikgPT4gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ibXVsdGlGaWx0ZXItb3B0aW9uIgogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyT3B0aW9uVG9nZ2xlKGl0ZW0sIG9wdGlvbjIua2V5KX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcHRpb24tY2hlY2tib3ggJHtvcHRpb24yLmNoZWNrZWQgPyAiY2hlY2tlZCIgOiAiIn0iPgogICAgICAgICAgICAgICAgJHtvcHRpb24yLmNoZWNrZWQgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICR7b3B0aW9uMi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gY2xhc3M9Im9wdGlvbi1pY29uIiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24ob3B0aW9uMi5pY29uTmFtZSl9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICAgPHNwYW4+JHtvcHRpb24yLmxhYmVsfTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJEaXZpZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVEaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZW5kZXJIZWFkZXIoaXRlbSkgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVIZWFkZXIiPiR7aXRlbS5sYWJlbH08L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZW5kZXJMaW5rSXRlbShpdGVtKSB7CiAgICAgICAgICBjb25zdCBpc0V4dGVybmFsID0gaXRlbS5leHRlcm5hbCA/PyBpdGVtLmhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpOwogICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ibWVudUl0ZW0gbGluayAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiAhaXNEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUxpbmtDbGljayhpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2lzRXh0ZXJuYWwgPyBiMmA8ZGVlcy1pY29uIGNsYXNzPSJleHRlcm5hbC1pY29uIiAuaWNvbj0iJHsibHVjaWRlOmV4dGVybmFsTGluayJ9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyTGVnYWN5T3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibGVnYWN5T3B0aW9ucyI+CiAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk9wdGlvbnMubWFwKChvcHRpb24yKSA9PiB7CiAgICAgICAgICAgIGlmICgiZGl2aWRlciIgaW4gb3B0aW9uMiAmJiBvcHRpb24yLmRpdmlkZXIpIHsKICAgICAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBpdGVtID0gb3B0aW9uMjsKICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LAogICAgICAgICAgICAgIGljb25OYW1lOiBpdGVtLmljb25OYW1lLAogICAgICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sCiAgICAgICAgICAgICAgYmFkZ2U6IGl0ZW0uYmFkZ2UsCiAgICAgICAgICAgICAgYmFkZ2VWYXJpYW50OiBpdGVtLmJhZGdlVmFyaWFudAogICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJJdGVtKHRhYkl0ZW0pOwogICAgICAgICAgfSl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgLy8gSGVscGVyIHRvIG5vcm1hbGl6ZSBpY29uIG5hbWVzCiAgICAgICAgbm9ybWFsaXplSWNvbihpY29uTmFtZSkgewogICAgICAgICAgcmV0dXJuIGljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGljb25OYW1lIDogYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICAgICAgfQogICAgICAgIHRvZ2dsZUdyb3VwKGdyb3VwTmFtZSkgewogICAgICAgICAgY29uc3QgbmV3Q29sbGFwc2VkID0gbmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7CiAgICAgICAgICBpZiAobmV3Q29sbGFwc2VkLmhhcyhncm91cE5hbWUpKSB7CiAgICAgICAgICAgIG5ld0NvbGxhcHNlZC5kZWxldGUoZ3JvdXBOYW1lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld0NvbGxhcHNlZC5hZGQoZ3JvdXBOYW1lKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzID0gbmV3Q29sbGFwc2VkOwogICAgICAgIH0KICAgICAgICB0b2dnbGVNdWx0aUZpbHRlcihmaWx0ZXJLZXkpIHsKICAgICAgICAgIGNvbnN0IG5ld0NvbGxhcHNlZCA9IG5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOwogICAgICAgICAgaWYgKG5ld0NvbGxhcHNlZC5oYXMoZmlsdGVyS2V5KSkgewogICAgICAgICAgICBuZXdDb2xsYXBzZWQuZGVsZXRlKGZpbHRlcktleSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdDb2xsYXBzZWQuYWRkKGZpbHRlcktleSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IG5ld0NvbGxhcHNlZDsKICAgICAgICB9CiAgICAgICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbGxhcHNlLWNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0VGFiSXRlbShpdGVtLCBncm91cCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgaXRlbSwgZ3JvdXAgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgaGFuZGxlQWN0aW9uQ2xpY2soaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uY29uZmlybU1lc3NhZ2UpIHsKICAgICAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oaXRlbS5jb25maXJtTWVzc2FnZSk7CiAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCBpdGVtLmFjdGlvbigpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVGaWx0ZXJUb2dnbGUoaXRlbSkgewogICAgICAgICAgY29uc3QgbmV3QWN0aXZlID0gIWl0ZW0uYWN0aXZlOwogICAgICAgICAgaXRlbS5hY3RpdmUgPSBuZXdBY3RpdmU7CiAgICAgICAgICBpdGVtLm9uVG9nZ2xlKG5ld0FjdGl2ZSk7CiAgICAgICAgICB0aGlzLnJlbmRlckNvdW50ZXIrKzsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlci10b2dnbGUiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBpdGVtLCBhY3RpdmU6IG5ld0FjdGl2ZSB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShpdGVtLCBvcHRpb25LZXkpIHsKICAgICAgICAgIGNvbnN0IG9wdGlvbjIgPSBpdGVtLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQua2V5ID09PSBvcHRpb25LZXkpOwogICAgICAgICAgaWYgKG9wdGlvbjIpIHsKICAgICAgICAgICAgb3B0aW9uMi5jaGVja2VkID0gIW9wdGlvbjIuY2hlY2tlZDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHNlbGVjdGVkS2V5cyA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gb3B0LmNoZWNrZWQpLm1hcCgob3B0KSA9PiBvcHQua2V5KTsKICAgICAgICAgIGl0ZW0ub25DaGFuZ2Uoc2VsZWN0ZWRLZXlzKTsKICAgICAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibXVsdGlmaWx0ZXItY2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgaXRlbSwgc2VsZWN0ZWRLZXlzIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUxpbmtDbGljayhpdGVtKSB7CiAgICAgICAgICBjb25zdCBpc0V4dGVybmFsID0gaXRlbS5leHRlcm5hbCA/PyBpdGVtLmhyZWYuc3RhcnRzV2l0aCgiaHR0cCIpOwogICAgICAgICAgaWYgKGlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgd2luZG93Lm9wZW4oaXRlbS5ocmVmLCAiX2JsYW5rIiwgIm5vb3BlbmVyLG5vcmVmZXJyZXIiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXRlbS5ocmVmOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibGluay1jbGljayIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQ29udGV4dE1lbnUoZXZlbnQsIGl0ZW0pIHsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlZpZXcgZGV0YWlscyIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiRWRpdCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwZW5jaWwiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgICAgICBjb25zdCBpbml0aWFsTXVsdGlGaWx0ZXJDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4gewogICAgICAgICAgICAgIGlmIChncm91cC5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgICAgIGluaXRpYWxDb2xsYXBzZWQuYWRkKGdyb3VwLm5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoInR5cGUiIGluIGl0ZW0gJiYgaXRlbS50eXBlID09PSAibXVsdGlGaWx0ZXIiKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpRmlsdGVyID0gaXRlbTsKICAgICAgICAgICAgICAgICAgaWYgKG11bHRpRmlsdGVyLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgICAgIGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZC5hZGQobXVsdGlGaWx0ZXIua2V5KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cHMgPSBpbml0aWFsQ29sbGFwc2VkOwogICAgICAgICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZDsKICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMpIHsKICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cC5pdGVtcykgewogICAgICAgICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9ICJ0eXBlIiBpbiBpdGVtID8gaXRlbS50eXBlIDogInRhYiI7CiAgICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gInRhYiIgfHwgaXRlbVR5cGUgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYkl0ZW0gPSBpdGVtOwogICAgICAgICAgICAgICAgICAgIGlmICghdGFiSXRlbS5kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWJJdGVtKHRhYkl0ZW0sIGdyb3VwKTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25PcHRpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSB0aGlzLnNlbGVjdGlvbk9wdGlvbnMuZmluZCgob3B0KSA9PiAhKCJkaXZpZGVyIiBpbiBvcHQpKTsKICAgICAgICAgICAgaWYgKGZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgICAgIGNvbnN0IHRhYkl0ZW0gPSB7CiAgICAgICAgICAgICAgICBrZXk6IGZpcnN0T3B0aW9uLmtleSwKICAgICAgICAgICAgICAgIGljb25OYW1lOiBmaXJzdE9wdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgICAgIGFjdGlvbjogZmlyc3RPcHRpb24uYWN0aW9uCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRhYkl0ZW0odGFiSXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMKdmFyIF9fZXNEZWNvcmF0ZTM5LCBfX3J1bkluaXRpYWxpemVyczQwLCBEZW1vQ2xvc2VhYmxlVGFicywgRGVtb0F1dG9IaWRlVGFicywgZGVtb0Z1bmMzMDsKdmFyIGluaXRfZGVlc19hcHB1aV90YWJzX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfaW50ZXJmYWNlczQoKTsKICAgIF9fZXNEZWNvcmF0ZTM5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlbW9DbG9zZWFibGVUYWJzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tY2xvc2VhYmxlLXRhYnMiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJDb3VudGVyX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGFiQ291bnRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZW1vQ2xvc2VhYmxlVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfdGFiQ291bnRlcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGFic19pbml0aWFsaXplcnMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJDb3VudGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkNvdW50ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkNvdW50ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiQ291bnRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYkNvdW50ZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzLCBfdGFiQ291bnRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZW1vQ2xvc2VhYmxlVGFiczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbCiAgICAgICAgICB7IGtleTogIk1haW4iLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTWFpbiBjbGlja2VkIikgfQogICAgICAgIF0pOwogICAgICAgIGdldCB0YWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0YWJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IHRhYkNvdW50ZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGFiQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFiQ291bnRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgYWRkVGFiKCkgewogICAgICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgICAgICBjb25zdCB0YWJLZXkgPSBgRG9jdW1lbnQgJHt0aGlzLnRhYkNvdW50ZXJ9YDsKICAgICAgICAgIHRoaXMudGFicyA9IFsKICAgICAgICAgICAgLi4udGhpcy50YWJzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAga2V5OiB0YWJLZXksCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZyhgJHt0YWJLZXl9IGNsaWNrZWRgKSwKICAgICAgICAgICAgICBjbG9zZWFibGU6IHRydWUsCiAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5yZW1vdmVUYWIodGFiS2V5KQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICByZW1vdmVUYWIodGFiS2V5KSB7CiAgICAgICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYnMuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkZWVzLWFwcHVpLXRhYnMKICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5yZW1vdmVUYWIoZTExLmRldGFpbC50YWIua2V5KX0KICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLmFkZFRhYigpfT4rIEFkZCBOZXcgVGFiPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICBDbGljayB0aGUgWCBidXR0b24gb24gdGFicyB0byBjbG9zZSB0aGVtLiBUaGUgIk1haW4iIHRhYiBpcyBub3QgY2xvc2VhYmxlLgogICAgICAgIDxicj5DdXJyZW50IHRhYnM6ICR7dGhpcy50YWJzLmxlbmd0aH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogICAgRGVtb0F1dG9IaWRlVGFicyA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLWF1dG9oaWRlLXRhYnMiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvSGlkZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGhyZXNob2xkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGhyZXNob2xkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVtb0F1dG9IaWRlVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYXV0b0hpZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF90aHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGUzOSh0aGlzLCBudWxsLCBfYXV0b0hpZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9IaWRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9IaWRlX2luaXRpYWxpemVycywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90aHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHJlc2hvbGQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGhyZXNob2xkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTM5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlbW9BdXRvSGlkZVRhYnMyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgWwogICAgICAgICAgeyBrZXk6ICJUYWIgMSIsIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYWIgMSIpIH0sCiAgICAgICAgICB7IGtleTogIlRhYiAyIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlRhYiAyIikgfQogICAgICAgIF0pOwogICAgICAgIGdldCB0YWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgYXV0b0hpZGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGF1dG9IaWRlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGhyZXNob2xkX2luaXRpYWxpemVycywgMSkpOwogICAgICAgIGdldCB0aHJlc2hvbGQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0aHJlc2hvbGQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHRhYkNvdW50ZXIgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMik7CiAgICAgICAgYWRkVGFiKCkgewogICAgICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgICAgICB0aGlzLnRhYnMgPSBbLi4udGhpcy50YWJzLCB7CiAgICAgICAgICAgIGtleTogYFRhYiAke3RoaXMudGFiQ291bnRlcn1gLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZyhgVGFiICR7dGhpcy50YWJDb3VudGVyfWApCiAgICAgICAgICB9XTsKICAgICAgICB9CiAgICAgICAgcmVtb3ZlTGFzdFRhYigpIHsKICAgICAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYnMuc2xpY2UoMCwgLTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhclRhYnMoKSB7CiAgICAgICAgICB0aGlzLnRhYnMgPSBbXTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3Qgc2hvdWxkSGlkZSA9IHRoaXMuYXV0b0hpZGUgJiYgdGhpcy50YWJzLmxlbmd0aCA8PSB0aGlzLnRocmVzaG9sZDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7c2hvdWxkSGlkZSA/IGIyYDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gIDogYjJgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUxhc3RUYWIoKX0+LSBSZW1vdmUgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAwOwogICAgICAgICAgfX0+VGhyZXNob2xkOiAwPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICAgIHRoaXMudGhyZXNob2xkID0gMTsKICAgICAgICAgIH19PlRocmVzaG9sZDogMTwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDI7CiAgICAgICAgICB9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlID8gIk9OIiA6ICJPRkYifSB8IFRocmVzaG9sZDogJHt0aGlzLnRocmVzaG9sZH0gfCBUYWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgICAgPGJyPlRhYnMgd2lsbCBoaWRlIHdoZW4gY291bnQg4omkIHRocmVzaG9sZC4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVtb0F1dG9IaWRlVGFiczIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICAgIGRlbW9GdW5jMzAgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGhvcml6b250YWxUYWJzID0gWwogICAgICAgIHsga2V5OiAiSG9tZSIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKSB9LAogICAgICAgIHsga2V5OiAiQW5hbHl0aWNzIERhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmxpbmVDaGFydCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgY2xpY2tlZCIpIH0sCiAgICAgICAgeyBrZXk6ICJVc2VyIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIkhlbHAiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCBjbGlja2VkIikgfQogICAgICBdOwogICAgICBjb25zdCB2ZXJ0aWNhbFRhYnMgPSBbCiAgICAgICAgeyBrZXk6ICJQcm9maWxlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dXNlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2ZpbGUgY2xpY2tlZCIpIH0sCiAgICAgICAgeyBrZXk6ICJTZWN1cml0eSIsIGljb25OYW1lOiAibHVjaWRlOnNoaWVsZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNlY3VyaXR5IGNsaWNrZWQiKSB9LAogICAgICAgIHsga2V5OiAiTm90aWZpY2F0aW9ucyIsIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKSB9LAogICAgICAgIHsga2V5OiAiSW50ZWdyYXRpb25zIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGluayIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkludGVncmF0aW9ucyBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIkFkdmFuY2VkIiwgaWNvbk5hbWU6ICJsdWNpZGU6Y29kZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFkdmFuY2VkIGNsaWNrZWQiKSB9CiAgICAgIF07CiAgICAgIGNvbnN0IG5vSW5kaWNhdG9yVGFicyA9IFsKICAgICAgICB7IGtleTogIkFsbCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFsbCBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIkFjdGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIkNvbXBsZXRlZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNvbXBsZXRlZCBjbGlja2VkIikgfSwKICAgICAgICB7IGtleTogIkFyY2hpdmVkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQXJjaGl2ZWQgY2xpY2tlZCIpIH0KICAgICAgXTsKICAgICAgY29uc3QgZGVtb0NvbnRlbnQgPSAodGV4dDkpID0+IGIyYAogICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjRweDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07Ij4KICAgICAgJHt0ZXh0OX0KICAgIDwvZGl2PgogIGA7CiAgICAgIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxODE4MWIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICB9CgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnR3by1jb2x1bW4gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyMDBweCAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SG9yaXpvbnRhbCBUYWJzIHdpdGggQW5pbWF0ZWQgSW5kaWNhdG9yPC9kaXY+CiAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFicz0ke2hvcml6b250YWxUYWJzfT48L2RlZXMtYXBwdWktdGFicz4KICAgICAgICAke2RlbW9Db250ZW50KCJTZWxlY3QgYSB0YWIgdG8gc2VlIHRoZSBzbW9vdGggc2xpZGluZyBhbmltYXRpb24gb2YgdGhlIGluZGljYXRvci4gVGhlIGluZGljYXRvciBhdXRvbWF0aWNhbGx5IGFkanVzdHMgaXRzIHdpZHRoIHRvIG1hdGNoIHRoZSB0YWIgY29udGVudCB3aXRoIG1pbmltYWwgcGFkZGluZy4iKX0KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DbG9zZWFibGUgVGFicyAoQnJvd3Nlci1zdHlsZSk8L2Rpdj4KICAgICAgICA8ZGVtby1jbG9zZWFibGUtdGFicz48L2RlbW8tY2xvc2VhYmxlLXRhYnM+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+QXV0by1oaWRlIFRhYnM8L2Rpdj4KICAgICAgICA8ZGVtby1hdXRvaGlkZS10YWJzPjwvZGVtby1hdXRvaGlkZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlZlcnRpY2FsIFRhYnMgTGF5b3V0PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHdvLWNvbHVtbiI+CiAgICAgICAgICA8ZGVlcy1hcHB1aS10YWJzIC50YWJTdHlsZT0keyJ2ZXJ0aWNhbCJ9IC50YWJzPSR7dmVydGljYWxUYWJzfT48L2RlZXMtYXBwdWktdGFicz4KICAgICAgICAgICR7ZGVtb0NvbnRlbnQoIlZlcnRpY2FsIHRhYnMgd29yayBncmVhdCBmb3Igc2V0dGluZ3MgcGFnZXMgYW5kIG5hdmlnYXRpb24gbWVudXMuIFRoZSBhbmltYXRlZCBpbmRpY2F0b3Igc21vb3RobHkgdHJhbnNpdGlvbnMgYmV0d2VlbiBzZWxlY3Rpb25zLiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPldpdGhvdXQgSW5kaWNhdG9yPC9kaXY+CiAgICAgICAgPGRlZXMtYXBwdWktdGFicyAuc2hvd1RhYkluZGljYXRvcj0ke2ZhbHNlfSAudGFicz0ke25vSW5kaWNhdG9yVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtkZW1vQ29udGVudCgiVGFicyBjYW4gYWxzbyBiZSB1c2VkIHdpdGhvdXQgdGhlIGFuaW1hdGVkIGluZGljYXRvciBieSBzZXR0aW5nIHNob3dUYWJJbmRpY2F0b3IgdG8gZmFsc2UuIil9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmpzCnZhciBfX2VzRGVjb3JhdGU0MCwgX19ydW5Jbml0aWFsaXplcnM0MSwgRGVlc0FwcHVpVGFiczsKdmFyIGluaXRfZGVlc19hcHB1aV90YWJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2RlZXMtYXBwdWktdGFicy5qcyIoKSB7CiAgICBpbml0X2ludGVyZmFjZXM0KCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19hcHB1aV90YWJzX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTQwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBcHB1aVRhYnMgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS10YWJzIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VGFiSW5kaWNhdG9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJTdHlsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhYlN0eWxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXV0b0hpZGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYXV0b0hpZGVUaHJlc2hvbGRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfY2FuU2Nyb2xsTGVmdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jYW5TY3JvbGxMZWZ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FwcHVpVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3RhYlN0eWxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9hdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF90YWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkVGFiLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9zaG93VGFiSW5kaWNhdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJJbmRpY2F0b3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dUYWJJbmRpY2F0b3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1RhYkluZGljYXRvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dUYWJJbmRpY2F0b3IgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfdGFiU3R5bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFiU3R5bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYlN0eWxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYlN0eWxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFiU3R5bGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYlN0eWxlX2luaXRpYWxpemVycywgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9hdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hdXRvSGlkZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9IaWRlVGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvSGlkZVRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvSGlkZVRocmVzaG9sZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmF1dG9IaWRlVGhyZXNob2xkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9hdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfY2FuU2Nyb2xsTGVmdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjYW5TY3JvbGxMZWZ0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjYW5TY3JvbGxMZWZ0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNhblNjcm9sbExlZnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jYW5TY3JvbGxMZWZ0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2NhblNjcm9sbFJpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNhblNjcm9sbFJpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjYW5TY3JvbGxSaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jYW5TY3JvbGxSaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNhblNjcm9sbFJpZ2h0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXBwdWlUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzA7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkFwcCBVSSJdOwogICAgICAgICN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBzZWxlY3RlZFRhYigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRUYWIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2hvd1RhYkluZGljYXRvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd1RhYkluZGljYXRvcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93VGFiSW5kaWNhdG9yKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFiU3R5bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9zaG93VGFiSW5kaWNhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfaW5pdGlhbGl6ZXJzLCAiaG9yaXpvbnRhbCIpKTsKICAgICAgICBnZXQgdGFiU3R5bGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGFiU3R5bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYlN0eWxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGFiU3R5bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGF1dG9IaWRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhdXRvSGlkZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVUaHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGF1dG9IaWRlVGhyZXNob2xkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICAvLyBTY3JvbGwgc3RhdGUgZm9yIGZhZGUgaW5kaWNhdG9ycwogICAgICAgIGdldCBjYW5TY3JvbGxMZWZ0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbExlZnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNhblNjcm9sbExlZnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjYW5TY3JvbGxSaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGNhblNjcm9sbFJpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjYW5TY3JvbGxSaWdodCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHJlc2l6ZU9ic2VydmVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbFJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9IDAlLAogICAgICAgICAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMCkiLCAicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsICJyZ2JhKDIyLDIyLDIyLDApIil9IDEwMCUpOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBTaG93IHNjcm9sbGJhciBvbiBob3ZlciAqLwogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjM1KSIpfTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYiAudGFiLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC41KSIpfTsKICAgICAgfQoKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiB0aGlzLnRhYnMubGVuZ3RoIDw9IHRoaXMuYXV0b0hpZGVUaHJlc2hvbGQpIHsKICAgICAgICAgICAgcmV0dXJuIGIyYGA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyVGFic1dyYXBwZXIoKSB7CiAgICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgICAgICBjb25zdCB3cmFwcGVyQ2xhc3MgPSBpc0hvcml6b250YWwgPyAidGFicy13cmFwcGVyIGhvcml6b250YWwtd3JhcHBlciIgOiAidmVydGljYWwtd3JhcHBlciI7CiAgICAgICAgICBjb25zdCBjb250YWluZXJDbGFzcyA9IGB0YWJzQ29udGFpbmVyICR7dGhpcy50YWJTdHlsZX1gOwogICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iJHt3cmFwcGVyQ2xhc3N9Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InNjcm9sbC1mYWRlIHNjcm9sbC1mYWRlLWxlZnQgJHt0aGlzLmNhblNjcm9sbExlZnQgPyAidmlzaWJsZSIgOiAiIn0iPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iJHtjb250YWluZXJDbGFzc30iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNjcm9sbC1mYWRlIHNjcm9sbC1mYWRlLXJpZ2h0ICR7dGhpcy5jYW5TY3JvbGxSaWdodCA/ICJ2aXNpYmxlIiA6ICIifSI+PC9kaXY+CiAgICAgICAgICAke3RoaXMuc2hvd1RhYkluZGljYXRvciA/IGIyYDxkaXYgY2xhc3M9InRhYkluZGljYXRvciI+PC9kaXY+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3N9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3IgPyBiMmA8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGFiMiA9PT0gdGhpcy5zZWxlY3RlZFRhYjsKICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBgdGFiICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZFRhYiIgOiAiIn1gOwogICAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSB0YWIyLmNsb3NlYWJsZSA/IGIyYAogICAgICA8c3BhbiBjbGFzcz0idGFiLWNsb3NlIiBAY2xpY2s9IiR7KGUxMSkgPT4gdGhpcy5jbG9zZVRhYihlMTEsIHRhYjIpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IHN0eWxlPSJmb250LXNpemU6IDEycHg7Ij48L2RlZXMtaWNvbj4KICAgICAgPC9zcGFuPgogICAgYCA6ICIiOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBpc0hvcml6b250YWwgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAke3RoaXMucmVuZGVyVGFiSWNvbih0YWIyKX0KICAgICAgICAke3RhYjIua2V5fQogICAgICA8L3NwYW4+CiAgICAgICR7Y2xvc2VCdXR0b259CiAgICBgIDogYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKHRhYjIpfQogICAgICAke3RhYjIua2V5fQogICAgICAke2Nsb3NlQnV0dG9ufQogICAgYDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSIke2NsYXNzZXN9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiB0aGlzLnNlbGVjdFRhYih0YWIyKX0iCiAgICAgID4KICAgICAgICAke2NvbnRlbnQzfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlclRhYkljb24odGFiMikgewogICAgICAgICAgcmV0dXJuIHRhYjIuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7dGFiMi5pY29uTmFtZX0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICAgIH0KICAgICAgICBzZWxlY3RUYWIodGFiQXJnKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiQXJnOwogICAgICAgICAgdGFiQXJnLmFjdGlvbigpOwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5zY3JvbGxUYWJJbnRvVmlldyh0YWJBcmcpOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWJBcmcgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgY2xvc2VUYWIoZTExLCB0YWIyKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBpZiAodGFiMi5vbkNsb3NlKSB7CiAgICAgICAgICAgIHRhYjIub25DbG9zZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNsb3NlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWIyIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy50YWJzWzBdKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2V0dXBSZXNpemVPYnNlcnZlcigpIHsKICAgICAgICAgIGlmICh0aGlzLnRhYlN0eWxlICE9PSAiaG9yaXpvbnRhbCIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlU2Nyb2xsID0gKCkgPT4gewogICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgIH07CiAgICAgICAgdXBkYXRlU2Nyb2xsU3RhdGUoKSB7CiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7CiAgICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGNvbnRhaW5lci5zY3JvbGxXaWR0aDsKICAgICAgICAgIGNvbnN0IGNsaWVudFdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoOwogICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMjsKICAgICAgICAgIHRoaXMuY2FuU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgPiB0aHJlc2hvbGQ7CiAgICAgICAgICB0aGlzLmNhblNjcm9sbFJpZ2h0ID0gc2Nyb2xsTGVmdCA8IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSB0aHJlc2hvbGQ7CiAgICAgICAgfQogICAgICAgIHNjcm9sbFRhYkludG9WaWV3KHRhYjIpIHsKICAgICAgICAgIGlmICh0aGlzLnRhYlN0eWxlICE9PSAiaG9yaXpvbnRhbCIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YodGFiMik7CiAgICAgICAgICBpZiAodGFiSW5kZXggPT09IC0xKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgICAgIGNvbnN0IHRhYkVsZW1lbnQgPSBjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoYC50YWI6bnRoLWNoaWxkKCR7dGFiSW5kZXggKyAxfSlgKTsKICAgICAgICAgIGlmICh0YWJFbGVtZW50ICYmIGNvbnRhaW5lcikgewogICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBjb25zdCB0YWJSZWN0ID0gdGFiRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgY29uc3QgaXNGdWxseVZpc2libGUgPSB0YWJSZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIHRhYlJlY3QucmlnaHQgPD0gY29udGFpbmVyUmVjdC5yaWdodDsKICAgICAgICAgICAgaWYgKCFpc0Z1bGx5VmlzaWJsZSkgewogICAgICAgICAgICAgIHRhYkVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogInNtb290aCIsIGJsb2NrOiAibmVhcmVzdCIsIGlubGluZTogIm5lYXJlc3QiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygidGFicyIpICYmIHRoaXMudGFicyAmJiB0aGlzLnRhYnMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWxlY3RlZFRhYikgewogICAgICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VsZWN0ZWRUYWIiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRhYnMiKSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQgJiYgZG9jdW1lbnQuZm9udHMpIHsKICAgICAgICAgICAgICBhd2FpdCBkb2N1bWVudC5mb250cy5yZWFkeTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgIHRoaXMudXBkYXRlVGFiSW5kaWNhdG9yKCk7CiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICB1cGRhdGVUYWJJbmRpY2F0b3IoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzZWxlY3RlZFRhYkVsZW1lbnQgPSB0aGlzLmdldFNlbGVjdGVkVGFiRWxlbWVudCgpOwogICAgICAgICAgaWYgKCFzZWxlY3RlZFRhYkVsZW1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuZ2V0SW5kaWNhdG9yRWxlbWVudCgpOwogICAgICAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuaGFuZGxlSW5pdGlhbFRyYW5zaXRpb24oaW5kaWNhdG9yKTsKICAgICAgICAgIGlmICh0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICAgICAgdGhpcy51cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKGluZGljYXRvciwgc2VsZWN0ZWRUYWJFbGVtZW50KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICAgICAgfQogICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgICAgfQogICAgICAgIHNob3VsZFNob3dJbmRpY2F0b3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiAmJiB0aGlzLnNob3dUYWJJbmRpY2F0b3IgJiYgdGhpcy50YWJzLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRUYWIpOwogICAgICAgIH0KICAgICAgICBnZXRTZWxlY3RlZFRhYkVsZW1lbnQoKSB7CiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YodGhpcy5zZWxlY3RlZFRhYik7CiAgICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IGlzSG9yaXpvbnRhbCA/IGAudGFicy13cmFwcGVyIC50YWJzQ29udGFpbmVyIC50YWI6bnRoLWNoaWxkKCR7c2VsZWN0ZWRJbmRleCArIDF9KWAgOiBgLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtzZWxlY3RlZEluZGV4ICsgMX0pYDsKICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICAgICAgfQogICAgICAgIGdldEluZGljYXRvckVsZW1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi50YWJJbmRpY2F0b3IiKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlSW5pdGlhbFRyYW5zaXRpb24oaW5kaWNhdG9yKSB7CiAgICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICAgICAgdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdXBkYXRlSG9yaXpvbnRhbEluZGljYXRvcihpbmRpY2F0b3IsIHRhYkVsZW1lbnQpIHsKICAgICAgICAgIGNvbnN0IHRhYkNvbnRlbnQgPSB0YWJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi50YWItY29udGVudCIpOwogICAgICAgICAgaWYgKCF0YWJDb250ZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IGluZGljYXRvci5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgY29udGVudFJlY3QgPSB0YWJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgY29udGVudExlZnQgPSBjb250ZW50UmVjdC5sZWZ0IC0gd3JhcHBlclJlY3QubGVmdDsKICAgICAgICAgIGNvbnN0IGluZGljYXRvcldpZHRoID0gY29udGVudFJlY3Qud2lkdGggKyA4OwogICAgICAgICAgY29uc3QgaW5kaWNhdG9yTGVmdCA9IGNvbnRlbnRMZWZ0IC0gNDsKICAgICAgICAgIGluZGljYXRvci5zdHlsZS53aWR0aCA9IGAke2luZGljYXRvcldpZHRofXB4YDsKICAgICAgICAgIGluZGljYXRvci5zdHlsZS5sZWZ0ID0gYCR7aW5kaWNhdG9yTGVmdH1weGA7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZVZlcnRpY2FsSW5kaWNhdG9yKGluZGljYXRvciwgdGFiRWxlbWVudCkgewogICAgICAgICAgY29uc3QgdGFic0NvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciIpOwogICAgICAgICAgaWYgKCF0YWJzQ29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpbmRpY2F0b3Iuc3R5bGUudG9wID0gYCR7dGFiRWxlbWVudC5vZmZzZXRUb3AgKyB0YWJzQ29udGFpbmVyLm9mZnNldFRvcH1weGA7CiAgICAgICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbmNvbnRlbnQvZGVlcy1hcHB1aS1tYWluY29udGVudC5qcwp2YXIgX19lc0RlY29yYXRlNDEsIF9fcnVuSW5pdGlhbGl6ZXJzNDIsIERlZXNBcHB1aU1haW5jb250ZW50Owp2YXIgaW5pdF9kZWVzX2FwcHVpX21haW5jb250ZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWluY29udGVudC9kZWVzLWFwcHVpLW1haW5jb250ZW50LmpzIigpIHsKICAgIGluaXRfaW50ZXJmYWNlczQoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9kZWVzX2FwcHVpX3RhYnMoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTQxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBcHB1aU1haW5jb250ZW50ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzQXBwdWlNYWluY29udGVudDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3Nob3dUYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF90YWJzQXV0b0hpZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF90YWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkVGFiLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF9zaG93VGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1RhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1RhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJzQXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYnNBdXRvSGlkZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzQXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YWJzQXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJzQXV0b0hpZGVUaHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYnNBdXRvSGlkZVRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzQXV0b0hpZGVUaHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FwcHVpTWFpbmNvbnRlbnQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1hcHB1aS1tYWluY29udGVudAogICAgICAudGFicz0ke1sKICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXciKSB9LAogICAgICAgICAgeyBrZXk6ICJEZXRhaWxzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkRldGFpbHMiKSB9LAogICAgICAgICAgeyBrZXk6ICJTZXR0aW5ncyIsIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiU2V0dGluZ3MiKSB9CiAgICAgICAgXX0KICAgID4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogNDBweDsgY29sb3I6ICNjY2M7Ij4KICAgICAgICA8aDE+TWFpbiBDb250ZW50IEFyZWE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiBjb250ZW50IGdvZXMuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICBgOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJBcHAgVUkiXTsKICAgICAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgICAgIHsga2V5OiAiXHUyNkEwXHVGRTBGIFBsZWFzZSBzZXQgdGFicyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50IikgfQogICAgICAgIF0pOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBzZWxlY3RlZFRhYigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRUYWIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQyKHRoaXMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3Nob3dUYWJzX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93VGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1RhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQyKHRoaXMsIF90YWJzQXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCB0YWJzQXV0b0hpZGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgdGFic0F1dG9IaWRlVGhyZXNob2xkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFic0F1dG9IaWRlVGhyZXNob2xkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAudG9wYmFyID4gKiB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtYXJlYSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICB9CgogICAgICA6aG9zdChbbm90YWJzXSkgLnRvcGJhciB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXRhYnMKICAgICAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgICAgIC5zZWxlY3RlZFRhYj0ke3RoaXMuc2VsZWN0ZWRUYWJ9CiAgICAgICAgICAgIC5zaG93VGFiSW5kaWNhdG9yPSR7dHJ1ZX0KICAgICAgICAgICAgLnRhYlN0eWxlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuYXV0b0hpZGU9JHt0aGlzLnRhYnNBdXRvSGlkZX0KICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50YWJzQXV0b0hpZGVUaHJlc2hvbGR9CiAgICAgICAgICAgIEB0YWItc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJTZWxlY3QoZTExKX0KICAgICAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlVGFiQ2xvc2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICAgICAgPHNsb3QgbmFtZT0iY29udGVudCI+PC9zbG90PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVRhYlNlbGVjdChlMTEpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSBlMTEuZGV0YWlsLnRhYjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zZWxlY3QiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlVGFiQ2xvc2UoZTExKSB7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJzaG93VGFicyIpKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNob3dUYWJzKSB7CiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoIm5vdGFicyIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCAiIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1RhYnMpIHsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoIm5vdGFicyIsICIiKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRhYnNDb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7CiAgICAgICAgICBpZiAodGFic0NvbXBvbmVudCkgewogICAgICAgICAgICBhd2FpdCB0YWJzQ29tcG9uZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQyKHRoaXMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0FwcHVpTWFpbmNvbnRlbnQyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuanMKdmFyIF9fZXNEZWNvcmF0ZTQyLCBfX3J1bkluaXRpYWxpemVyczQzLCBEZWVzQXBwdWk7CnZhciBpbml0X2RlZXNfYXBwdWkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2ludGVyZmFjZXM0KCk7CiAgICBpbml0X2RlZXNfYXBwdWlfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF92aWV3X3JlZ2lzdHJ5KCk7CiAgICBpbml0X2RlZXNfYXBwdWlfYXBwYmFyKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfYm90dG9tYmFyKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfbWFpbm1lbnUoKTsKICAgIGluaXRfZGVlc19hcHB1aV9zZWNvbmRhcnltZW51KCk7CiAgICBpbml0X2RlZXNfYXBwdWlfbWFpbmNvbnRlbnQoKTsKICAgIGluaXRfZGVlc19hcHB1aV9hY3Rpdml0eWxvZygpOwogICAgX19lc0RlY29yYXRlNDIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM0MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0FwcHVpID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWkiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2FwcGJhck1lbnVJdGVtc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJCcmVhZGNydW1ic19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJVc2VyX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJVc2VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FwcGJhclNob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudUxvZ29JY29uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudUxvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbm1lbnVMb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51R3JvdXBzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51VGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51U2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWNvbmRhcnltZW51SGVhZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWNvbmRhcnltZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWluY29udGVudFRhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYWluY29udGVudFRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FwcGJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FwcGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYWlubWVudV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21haW5tZW51X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5tZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlY29uZGFyeW1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2Vjb25kYXJ5bWVudV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21haW5jb250ZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFpbmNvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZpdHlsb2dFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYm90dG9tYmFyRWxlbWVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYm90dG9tYmFyRWxlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2JvdHRvbWJhclZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50Vmlld19kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzQXBwdWkyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfYXBwYmFyTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2FwcGJhclVzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX21haW5tZW51TG9nb0ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX21haW5tZW51VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX21haW5tZW51U2VsZWN0ZWRUYWJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX21haW5tZW51VmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfYWN0aXZpdHlMb2dWaXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYWN0aXZpdHlMb2dDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX21haW5jb250ZW50VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfYXBwYmFyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfbWFpbm1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9zZWNvbmRhcnltZW51X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfbWFpbmNvbnRlbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9ib3R0b21iYXJFbGVtZW50X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYm90dG9tYmFyVmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyTWVudUl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhck1lbnVJdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhck1lbnVJdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFwcGJhck1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyTWVudUl0ZW1zX2luaXRpYWxpemVycywgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyQnJlYWRjcnVtYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhckJyZWFkY3J1bWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhckJyZWFkY3J1bWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXBwYmFyQnJlYWRjcnVtYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclNob3dXaW5kb3dDb250cm9scyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclNob3dXaW5kb3dDb250cm9scywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFwcGJhclNob3dXaW5kb3dDb250cm9scyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyVXNlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJVc2VyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJVc2VyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclVzZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hcHBiYXJVc2VyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcHBiYXJVc2VyX2luaXRpYWxpemVycywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJQcm9maWxlTWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclNob3dTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhclNob3dTZWFyY2giIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyU2hvd1NlYXJjaCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFwcGJhclNob3dTZWFyY2ggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhclNob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVMb2dvSWNvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUxvZ29JY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUxvZ29JY29uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51TG9nb0ljb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYWlubWVudUxvZ29JY29uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51TG9nb1RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVMb2dvVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVMb2dvVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUxvZ29UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWFpbm1lbnVMb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVMb2dvVGV4dF9pbml0aWFsaXplcnMsIF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVHcm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVHcm91cHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYWlubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUJvdHRvbVRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51Qm90dG9tVGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUJvdHRvbVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYWlubWVudUJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51VGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudVRhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51VGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYWlubWVudVRhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51VGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51U2VsZWN0ZWRUYWJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVTZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVTZWxlY3RlZFRhYiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudVNlbGVjdGVkVGFiLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWFpbm1lbnVTZWxlY3RlZFRhYiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51SGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51SGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUhlYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudUhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWNvbmRhcnltZW51SGVhZGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVHcm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudUdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51R3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2Vjb25kYXJ5bWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51Q29sbGFwc2VkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51Q29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWFpbm1lbnVDb2xsYXBzZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51VmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1haW5tZW51VmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudVZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnVWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2Vjb25kYXJ5bWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50VGFic1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50VGFic1Zpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1haW5jb250ZW50VGFic1Zpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfY29udGVudFRhYnNBdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50VGFic0F1dG9IaWRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VGFic0F1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb250ZW50VGFic0F1dG9IaWRlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ1Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpdml0eUxvZ1Zpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWN0aXZpdHlMb2dWaXNpYmxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2aXR5TG9nQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nQ291bnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFjdGl2aXR5TG9nQ291bnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbmNvbnRlbnRUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1haW5jb250ZW50VGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgX21haW5jb250ZW50VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWluY29udGVudFNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudFNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50U2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYWluY29udGVudFNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hcHBiYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhcl9pbml0aWFsaXplcnMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1haW5tZW51ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudV9pbml0aWFsaXplcnMsIF9tYWlubWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWNvbmRhcnltZW51ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5jb250ZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWluY29udGVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1haW5jb250ZW50ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudF9pbml0aWFsaXplcnMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYWN0aXZpdHlsb2dFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2aXR5bG9nRWxlbWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlsb2dFbGVtZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjdGl2aXR5bG9nRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFjdGl2aXR5bG9nRWxlbWVudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlsb2dFbGVtZW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5bG9nRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYm90dG9tYmFyRWxlbWVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21iYXJFbGVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21iYXJFbGVtZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbWJhckVsZW1lbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5ib3R0b21iYXJFbGVtZW50ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm90dG9tYmFyVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm90dG9tYmFyVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib3R0b21iYXJWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYm90dG9tYmFyVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9jdXJyZW50Vmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VmlldyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFZpZXciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50VmlldyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FwcHVpMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjc7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkFwcCBVSSJdOwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIFJFQUNUSVZFIE9CU0VSVkFCTEVTIChSeEpTIFN1YmplY3RzKQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8qKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiB2aWV3IGxpZmVjeWNsZSBldmVudHMgKi8KICAgICAgICB2aWV3TGlmZWN5Y2xlJCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgICAgICAvKiogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdmlldyBjaGFuZ2UgZXZlbnRzICovCiAgICAgICAgdmlld0NoYW5nZWQkID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgICAgICNhcHBiYXJNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBJTlRFUk5BTCBQUk9QRVJUSUVTIChQcm9wZXJ0aWVzIGZvciBjaGlsZCBjb21wb25lbnRzKQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIFByb3BlcnRpZXMgZm9yIGFwcGJhcgogICAgICAgIGdldCBhcHBiYXJNZW51SXRlbXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcHBiYXJNZW51SXRlbXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhcHBiYXJNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FwcGJhckJyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyQnJlYWRjcnVtYnNfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBhcHBiYXJCcmVhZGNydW1icygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsICIgPiAiKSk7CiAgICAgICAgZ2V0IGFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGFwcGJhclNob3dXaW5kb3dDb250cm9scygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJTaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFwcGJhclNob3dXaW5kb3dDb250cm9scyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclVzZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgYXBwYmFyVXNlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcHBiYXJVc2VyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgYXBwYmFyUHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJQcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgYXBwYmFyU2hvd1NlYXJjaCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJTaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcHBiYXJTaG93U2VhcmNoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWFpbm1lbnVMb2dvSWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclNob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICAvLyBQcm9wZXJ0aWVzIGZvciBtYWlubWVudQogICAgICAgIGdldCBtYWlubWVudUxvZ29JY29uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51TG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1haW5tZW51TG9nb0ljb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWlubWVudUxvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBtYWlubWVudUxvZ29UZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51TG9nb1RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1haW5tZW51TG9nb1RleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IG1haW5tZW51R3JvdXBzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWlubWVudUdyb3Vwcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudUJvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IG1haW5tZW51Qm90dG9tVGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudUJvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1haW5tZW51Qm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5tZW51Qm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgbWFpbm1lbnVUYWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWFpbm1lbnVUYWJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBtYWlubWVudVNlbGVjdGVkVGFiKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1haW5tZW51U2VsZWN0ZWRUYWIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWNvbmRhcnltZW51SGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51SGVhZGluZ19pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgLy8gUHJvcGVydGllcyBmb3Igc2Vjb25kYXJ5bWVudQogICAgICAgIGdldCBzZWNvbmRhcnltZW51SGVhZGluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWNvbmRhcnltZW51SGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2Vjb25kYXJ5bWVudUhlYWRpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWNvbmRhcnltZW51SGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IHNlY29uZGFyeW1lbnVHcm91cHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2Vjb25kYXJ5bWVudUdyb3Vwcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgLy8gQ29sbGFwc2Ugc3RhdGVzCiAgICAgICAgZ2V0IG1haW5tZW51Q29sbGFwc2VkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWlubWVudUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWNvbmRhcnltZW51Q29sbGFwc2VkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICAvLyBWaXNpYmlsaXR5IHN0YXRlcwogICAgICAgIGdldCBtYWlubWVudVZpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWlubWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWlubWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlY29uZGFyeW1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IHNlY29uZGFyeW1lbnVWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWNvbmRhcnltZW51VmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBtYWluY29udGVudFRhYnNWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50VGFic1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1haW5jb250ZW50VGFic1Zpc2libGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBjb250ZW50VGFic0F1dG9IaWRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbnRlbnRUYWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY29udGVudFRhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FjdGl2aXR5TG9nVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIC8vIEFjdGl2aXR5IGxvZyB2aXNpYmlsaXR5IGFuZCBjb3VudAogICAgICAgIGdldCBhY3Rpdml0eUxvZ1Zpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3Rpdml0eUxvZ1Zpc2libGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3Rpdml0eUxvZ1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICAvLyBQcm9wZXJ0aWVzIGZvciBtYWluY29udGVudAogICAgICAgIGdldCBtYWluY29udGVudFRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRUYWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWluY29udGVudFRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21haW5jb250ZW50U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5jb250ZW50U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvLyBSZWZlcmVuY2VzIHRvIGNoaWxkIGNvbXBvbmVudHMKICAgICAgICBnZXQgYXBwYmFyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYXBwYmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXBwYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYWlubWVudV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IG1haW5tZW51KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWlubWVudSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5tZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IHNlY29uZGFyeW1lbnUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2Vjb25kYXJ5bWVudSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IG1haW5jb250ZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYWluY29udGVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FjdGl2aXR5bG9nRWxlbWVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBhY3Rpdml0eWxvZ0VsZW1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlsb2dFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3Rpdml0eWxvZ0VsZW1lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGJvdHRvbWJhckVsZW1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYm90dG9tYmFyRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYm90dG9tYmFyRWxlbWVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2JvdHRvbWJhclZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgYm90dG9tYmFyVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNib3R0b21iYXJWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBib3R0b21iYXJWaXNpYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY3VycmVudFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvLyBDdXJyZW50IHZpZXcgc3RhdGUKICAgICAgICBnZXQgY3VycmVudFZpZXcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudFZpZXdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGN1cnJlbnRWaWV3KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VycmVudFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gSW50ZXJuYWwgc2VydmljZXMKICAgICAgICB2aWV3UmVnaXN0cnkgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgVmlld1JlZ2lzdHJ5KCkpOwogICAgICAgIHJvdXRlckNsZWFudXAgPSBudWxsOwogICAgICAgIHNlYXJjaENhbGxiYWNrID0gbnVsbDsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzFhMWExYSIpfTsKICAgICAgfQogICAgICAubWFpbmdyaWQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4IC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAvKiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgc2V0IGR5bmFtaWNhbGx5IGluIHRlbXBsYXRlICovCiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIDAuM3MgZWFzZSwgaGVpZ2h0IDAuM3MgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6aG9zdChbYm90dG9tYmFyLWhpZGRlbl0pIC5tYWluZ3JpZCB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgfQoKICAgICAgZGVlcy1hcHB1aS1ib3R0b21iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiA0OwogICAgICB9CgogICAgICAvKiBaLWluZGV4IGxheWVyaW5nIGZvciBwcm9wZXIgc3RhY2tpbmcgKi8KICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1tYWlubWVudSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbmNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHRyYW5zZm9ybSAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cuaGlkZGVuIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5ncmlkID4gZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy52aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgfQoKICAgICAgLyogVmlldyBjb250YWluZXIgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCB2aWV3cyAqLwogICAgICAudmlldy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CgogICAgICAudmlldy1jb250YWluZXI6ZW1wdHkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRlZXMtYXBwdWktYXBwYmFyCiAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyTWVudUl0ZW1zfQogICAgICAgIC5icmVhZGNydW1icz0ke3RoaXMuYXBwYmFyQnJlYWRjcnVtYnN9CiAgICAgICAgLmJyZWFkY3J1bWJTZXBhcmF0b3I9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3J9CiAgICAgICAgLnNob3dXaW5kb3dDb250cm9scz0ke3RoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzfQogICAgICAgIC51c2VyPSR7dGhpcy5hcHBiYXJVc2VyfQogICAgICAgIC5wcm9maWxlTWVudUl0ZW1zPSR7dGhpcy5hcHBiYXJQcm9maWxlTWVudUl0ZW1zfQogICAgICAgIC5zaG93U2VhcmNoPSR7dGhpcy5hcHBiYXJTaG93U2VhcmNofQogICAgICAgIC5zaG93QWN0aXZpdHlMb2dUb2dnbGU9JHt0cnVlfQogICAgICAgIC5hY3Rpdml0eUxvZ0NvdW50PSR7dGhpcy5hY3Rpdml0eUxvZ0NvdW50fQogICAgICAgIC5hY3Rpdml0eUxvZ0FjdGl2ZT0ke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlfQogICAgICAgIEBtZW51LXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyTWVudVNlbGVjdChlMTEpfQogICAgICAgIEBicmVhZGNydW1iLW5hdmlnYXRlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKX0KICAgICAgICBAc2VhcmNoLWNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hDbGljaygpfQogICAgICAgIEBzZWFyY2gtcXVlcnk9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhclNlYXJjaFF1ZXJ5KGUxMSl9CiAgICAgICAgQHVzZXItbWVudS1vcGVuPSR7KCkgPT4gdGhpcy5oYW5kbGVBcHBiYXJVc2VyTWVudU9wZW4oKX0KICAgICAgICBAcHJvZmlsZS1tZW51LXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyUHJvZmlsZU1lbnVTZWxlY3QoZTExKX0KICAgICAgICBAYWN0aXZpdHktdG9nZ2xlPSR7KCkgPT4gdGhpcy50b2dnbGVBY3Rpdml0eUxvZygpfQogICAgICA+PC9kZWVzLWFwcHVpLWFwcGJhcj4KICAgICAgPGRpdiBjbGFzcz0ibWFpbmdyaWQiIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgJHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZSA/ICIyODBweCIgOiAiMHB4In07Ij4KICAgICAgICAke3RoaXMubWFpbm1lbnVWaXNpYmxlID8gYjJgCiAgICAgICAgICA8ZGVlcy1hcHB1aS1tYWlubWVudQogICAgICAgICAgICAubG9nb0ljb249JHt0aGlzLm1haW5tZW51TG9nb0ljb259CiAgICAgICAgICAgIC5sb2dvVGV4dD0ke3RoaXMubWFpbm1lbnVMb2dvVGV4dH0KICAgICAgICAgICAgLm1lbnVHcm91cHM9JHt0aGlzLm1haW5tZW51R3JvdXBzfQogICAgICAgICAgICAuYm90dG9tVGFicz0ke3RoaXMubWFpbm1lbnVCb3R0b21UYWJzfQogICAgICAgICAgICAudGFicz0ke3RoaXMubWFpbm1lbnVUYWJzfQogICAgICAgICAgICAuc2VsZWN0ZWRUYWI9JHt0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWJ9CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLm1haW5tZW51Q29sbGFwc2VkfQogICAgICAgICAgICBAdGFiLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS1tYWlubWVudT4KICAgICAgICBgIDogIiJ9CiAgICAgICAgJHt0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlID8gYjJgCiAgICAgICAgICA8ZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51CiAgICAgICAgICAgIC5oZWFkaW5nPSR7dGhpcy5zZWNvbmRhcnltZW51SGVhZGluZ30KICAgICAgICAgICAgLmdyb3Vwcz0ke3RoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwc30KICAgICAgICAgICAgLnNlbGVjdGVkSXRlbT0ke3RoaXMuc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbX0KICAgICAgICAgICAgLmNvbGxhcHNlZD0ke3RoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQGl0ZW0tc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVTZWNvbmRhcnltZW51SXRlbVNlbGVjdChlMTEpfQogICAgICAgICAgICBAY29sbGFwc2UtY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVTZWNvbmRhcnltZW51Q29sbGFwc2VDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgICAgIC50YWJzPSR7dGhpcy5tYWluY29udGVudFRhYnN9CiAgICAgICAgICAuc2VsZWN0ZWRUYWI9JHt0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWJ9CiAgICAgICAgICAuc2hvd1RhYnM9JHt0aGlzLm1haW5jb250ZW50VGFic1Zpc2libGV9CiAgICAgICAgICAudGFic0F1dG9IaWRlPSR7dGhpcy5jb250ZW50VGFic0F1dG9IaWRlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZVRocmVzaG9sZD0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgIEB0YWItc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZW50VGFiU2VsZWN0KGUxMSl9CiAgICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZW50VGFiQ2xvc2UoZTExKX0KICAgICAgICA+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICA8c2xvdCBuYW1lPSJtYWluY29udGVudCI+PC9zbG90PgogICAgICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICAgICAgICA8ZGVlcy1hcHB1aS1hY3Rpdml0eWxvZwogICAgICAgICAgY2xhc3M9IiR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPyAidmlzaWJsZSIgOiAiaGlkZGVuIn0iCiAgICAgICAgPjwvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZz4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5ib3R0b21iYXJWaXNpYmxlID8gYjJgCiAgICAgICAgPGRlZXMtYXBwdWktYm90dG9tYmFyPjwvZGVlcy1hcHB1aS1ib3R0b21iYXI+CiAgICAgIGAgOiAiIn0KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIHRoaXMuYXBwYmFyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktYXBwYmFyIik7CiAgICAgICAgICB0aGlzLm1haW5tZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKTsKICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKTsKICAgICAgICAgIHRoaXMubWFpbmNvbnRlbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1tYWluY29udGVudCIpOwogICAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpOwogICAgICAgICAgdGhpcy5ib3R0b21iYXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktYm90dG9tYmFyIik7CiAgICAgICAgICBpZiAodGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5hY3Rpdml0eUxvZ0NvdW50ID0gZW50cmllcy5sZW5ndGg7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy52aWV3UmVnaXN0cnkuc2V0QXBwdWlSZWYodGhpcyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLnJvdXRlckNsZWFudXApIHsKICAgICAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwKCk7CiAgICAgICAgICAgIHRoaXMucm91dGVyQ2xlYW51cCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCk7CiAgICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkJC5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBBUFAgQkFSCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBhcHAgYmFyIG1lbnUgaXRlbXMgKEZpbGUsIEVkaXQsIFZpZXcsIGV0Yy4pCiAgICAgICAgICovCiAgICAgICAgc2V0QXBwQmFyTWVudXMobWVudXMpIHsKICAgICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gWy4uLm1lbnVzXTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIGEgc2luZ2xlIGFwcCBiYXIgbWVudSBieSBuYW1lCiAgICAgICAgICovCiAgICAgICAgdXBkYXRlQXBwQmFyTWVudShuYW1lLCB1cGRhdGUpIHsKICAgICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gdGhpcy5hcHBiYXJNZW51SXRlbXMubWFwKChtZW51KSA9PiB7CiAgICAgICAgICAgIGlmICgibmFtZSIgaW4gbWVudSAmJiBtZW51Lm5hbWUgPT09IG5hbWUpIHsKICAgICAgICAgICAgICByZXR1cm4geyAuLi5tZW51LCAuLi51cGRhdGUgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbWVudTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgdGhlIGJyZWFkY3J1bWJzIChzdHJpbmcgb3IgYXJyYXkpCiAgICAgICAgICovCiAgICAgICAgc2V0QnJlYWRjcnVtYnMoYnJlYWRjcnVtYnMpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJzKSkgewogICAgICAgICAgICB0aGlzLmFwcGJhckJyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMuam9pbih0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1icyA9IGJyZWFkY3J1bWJzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAqLwogICAgICAgIHNldFVzZXIodXNlcikgewogICAgICAgICAgdGhpcy5hcHBiYXJVc2VyID0gdXNlcjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBwcm9maWxlIGRyb3Bkb3duIG1lbnUgaXRlbXMKICAgICAgICAgKi8KICAgICAgICBzZXRQcm9maWxlTWVudUl0ZW1zKGl0ZW1zKSB7CiAgICAgICAgICB0aGlzLmFwcGJhclByb2ZpbGVNZW51SXRlbXMgPSBbLi4uaXRlbXNdOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgc2VhcmNoIGJhciB2aXNpYmlsaXR5CiAgICAgICAgICovCiAgICAgICAgc2V0U2VhcmNoVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLmFwcGJhclNob3dTZWFyY2ggPSB2aXNpYmxlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgd2luZG93IGNvbnRyb2xzIHZpc2liaWxpdHkKICAgICAgICAgKi8KICAgICAgICBzZXRXaW5kb3dDb250cm9sc1Zpc2libGUodmlzaWJsZSkgewogICAgICAgICAgdGhpcy5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSB2aXNpYmxlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZWdpc3RlciBhIHNlYXJjaCBjYWxsYmFjawogICAgICAgICAqLwogICAgICAgIG9uU2VhcmNoKGNhbGxiYWNrKSB7CiAgICAgICAgICB0aGlzLnNlYXJjaENhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IE1BSU4gTUVOVQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIFNldCB0aGUgZW50aXJlIG1haW4gbWVudSBjb25maWd1cmF0aW9uCiAgICAgICAgICovCiAgICAgICAgc2V0TWFpbk1lbnUoY29uZmlnMykgewogICAgICAgICAgaWYgKGNvbmZpZzMubG9nb0ljb24gIT09IHZvaWQgMCkgewogICAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb0ljb24gPSBjb25maWczLmxvZ29JY29uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbmZpZzMubG9nb1RleHQgIT09IHZvaWQgMCkgewogICAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLmxvZ29UZXh0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbmZpZzMuZ3JvdXBzICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IFsuLi5jb25maWczLmdyb3Vwc107CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21UYWJzICE9PSB2b2lkIDApIHsKICAgICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSBbLi4uY29uZmlnMy5ib3R0b21UYWJzXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIGEgc3BlY2lmaWMgbWVudSBncm91cCBieSBuYW1lCiAgICAgICAgICovCiAgICAgICAgdXBkYXRlTWFpbk1lbnVHcm91cChncm91cE5hbWUsIHVwZGF0ZSkgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lID8geyAuLi5ncm91cCwgLi4udXBkYXRlIH0gOiBncm91cCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIHNwZWNpZmljIGdyb3VwCiAgICAgICAgICovCiAgICAgICAgYWRkTWFpbk1lbnVJdGVtKGdyb3VwTmFtZSwgdGFiMikgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICAgICAgaXRlbXM6IFsuLi5ncm91cC5pdGVtcyB8fCBbXSwgdGFiMl0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBncm91cDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZW1vdmUgYSBtZW51IGl0ZW0gZnJvbSBhIGdyb3VwIGJ5IGtleQogICAgICAgICAqLwogICAgICAgIHJlbW92ZU1haW5NZW51SXRlbShncm91cE5hbWUsIHRhYktleSkgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBzZWxlY3RlZCBtYWluIG1lbnUgaXRlbSBieSBrZXkKICAgICAgICAgKi8KICAgICAgICBzZXRNYWluTWVudVNlbGVjdGlvbih0YWJLZXkpIHsKICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5tYWlubWVudUdyb3VwcykgewogICAgICAgICAgICBjb25zdCB0YWIyID0gZ3JvdXAuaXRlbXM/LmZpbmQoKHQ5KSA9PiB0OS5rZXkgPT09IHRhYktleSk7CiAgICAgICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICAgICAgdGhpcy5tYWlubWVudVNlbGVjdGVkVGFiID0gdGFiMjsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGJvdHRvbVRhYiA9IHRoaXMubWFpbm1lbnVCb3R0b21UYWJzLmZpbmQoKHQ5KSA9PiB0OS5rZXkgPT09IHRhYktleSk7CiAgICAgICAgICBpZiAoYm90dG9tVGFiKSB7CiAgICAgICAgICAgIHRoaXMubWFpbm1lbnVTZWxlY3RlZFRhYiA9IGJvdHRvbVRhYjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IG1haW4gbWVudSBjb2xsYXBzZWQgc3RhdGUKICAgICAgICAgKi8KICAgICAgICBzZXRNYWluTWVudUNvbGxhcHNlZChjb2xsYXBzZWQpIHsKICAgICAgICAgIHRoaXMubWFpbm1lbnVDb2xsYXBzZWQgPSBjb2xsYXBzZWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBtYWluIG1lbnUgdmlzaWJpbGl0eQogICAgICAgICAqLwogICAgICAgIHNldE1haW5NZW51VmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51VmlzaWJsZSA9IHZpc2libGU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBzZWNvbmRhcnkgbWVudSBjb2xsYXBzZWQgc3RhdGUKICAgICAgICAgKi8KICAgICAgICBzZXRTZWNvbmRhcnlNZW51Q29sbGFwc2VkKGNvbGxhcHNlZCkgewogICAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gY29sbGFwc2VkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgc2Vjb25kYXJ5IG1lbnUgdmlzaWJpbGl0eQogICAgICAgICAqLwogICAgICAgIHNldFNlY29uZGFyeU1lbnVWaXNpYmxlKHZpc2libGUpIHsKICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudVZpc2libGUgPSB2aXNpYmxlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgY29udGVudCB0YWJzIHZpc2liaWxpdHkKICAgICAgICAgKi8KICAgICAgICBzZXRDb250ZW50VGFic1Zpc2libGUodmlzaWJsZSkgewogICAgICAgICAgdGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlID0gdmlzaWJsZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IGNvbnRlbnQgdGFicyBhdXRvLWhpZGUgYmVoYXZpb3IKICAgICAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZSBhdXRvLWhpZGUgZmVhdHVyZQogICAgICAgICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBIaWRlIHdoZW4gdGFicy5sZW5ndGggPD0gdGhyZXNob2xkIChkZWZhdWx0IDAgPSBoaWRlIHdoZW4gbm8gdGFicykKICAgICAgICAgKi8KICAgICAgICBzZXRDb250ZW50VGFic0F1dG9IaWRlKGVuYWJsZWQsIHRocmVzaG9sZCA9IDApIHsKICAgICAgICAgIHRoaXMuY29udGVudFRhYnNBdXRvSGlkZSA9IGVuYWJsZWQ7CiAgICAgICAgICB0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBhIGJhZGdlIG9uIGEgbWFpbiBtZW51IGl0ZW0KICAgICAgICAgKi8KICAgICAgICBzZXRNYWluTWVudUJhZGdlKHRhYktleSwgYmFkZ2UpIHsKICAgICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSB0aGlzLm1haW5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+ICh7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogKGdyb3VwLml0ZW1zIHx8IFtdKS5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKQogICAgICAgICAgfSkpOwogICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgYSBiYWRnZSBmcm9tIGEgbWFpbiBtZW51IGl0ZW0KICAgICAgICAgKi8KICAgICAgICBjbGVhck1haW5NZW51QmFkZ2UodGFiS2V5KSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkubWFwKCh0YWIyKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KSk7CiAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IHRoaXMubWFpbm1lbnVCb3R0b21UYWJzLm1hcCgodGFiMikgPT4gewogICAgICAgICAgICBpZiAodGFiMi5rZXkgPT09IHRhYktleSkgewogICAgICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUFJPR1JBTU1BVElDIEFQSTogU0VDT05EQVJZIE1FTlUKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgdGhlIHNlY29uZGFyeSBtZW51IGNvbmZpZ3VyYXRpb24KICAgICAgICAgKi8KICAgICAgICBzZXRTZWNvbmRhcnlNZW51KGNvbmZpZzMpIHsKICAgICAgICAgIGlmIChjb25maWczLmhlYWRpbmcgIT09IHZvaWQgMCkgewogICAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gY29uZmlnMy5oZWFkaW5nOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gWy4uLmNvbmZpZzMuZ3JvdXBzXTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIGEgc3BlY2lmaWMgc2Vjb25kYXJ5IG1lbnUgZ3JvdXAKICAgICAgICAgKi8KICAgICAgICB1cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUdyb3VwcyA9IHRoaXMuc2Vjb25kYXJ5bWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiBncm91cC5uYW1lID09PSBncm91cE5hbWUgPyB7IC4uLmdyb3VwLCAuLi51cGRhdGUgfSA6IGdyb3VwKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIGFuIGl0ZW0gdG8gYSBzZWNvbmRhcnkgbWVudSBncm91cAogICAgICAgICAqLwogICAgICAgIGFkZFNlY29uZGFyeU1lbnVJdGVtKGdyb3VwTmFtZSwgaXRlbSkgewogICAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKICAgICAgICAgICAgaWYgKGdyb3VwLm5hbWUgPT09IGdyb3VwTmFtZSkgewogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgICAgIGl0ZW1zOiBbLi4uZ3JvdXAuaXRlbXMsIGl0ZW1dCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBzZWxlY3RlZCBzZWNvbmRhcnkgbWVudSBpdGVtIGJ5IGtleSAoZm9yIHRhYiBpdGVtcyBvbmx5KQogICAgICAgICAqLwogICAgICAgIHNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oaXRlbUtleSkgewogICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpIHsKICAgICAgICAgICAgY29uc3QgaXRlbSA9IGdyb3VwLml0ZW1zLmZpbmQoKGkxMSkgPT4gImtleSIgaW4gaTExICYmIGkxMS5rZXkgPT09IGl0ZW1LZXkpOwogICAgICAgICAgICBpZiAoaXRlbSAmJiAoISgidHlwZSIgaW4gaXRlbSkgfHwgaXRlbS50eXBlID09PSAidGFiIiB8fCBpdGVtLnR5cGUgPT09IHZvaWQgMCkpIHsKICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDbGVhciB0aGUgc2Vjb25kYXJ5IG1lbnUKICAgICAgICAgKi8KICAgICAgICBjbGVhclNlY29uZGFyeU1lbnUoKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gIiI7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSBbXTsKICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUFJPR1JBTU1BVElDIEFQSTogQ09OVEVOVCBUQUJTCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBjb250ZW50IHRhYnMKICAgICAgICAgKi8KICAgICAgICBzZXRDb250ZW50VGFicyh0YWJzKSB7CiAgICAgICAgICB0aGlzLm1haW5jb250ZW50VGFicyA9IFsuLi50YWJzXTsKICAgICAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYikgewogICAgICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0YWJzWzBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBBZGQgYSBjb250ZW50IHRhYgogICAgICAgICAqLwogICAgICAgIGFkZENvbnRlbnRUYWIodGFiMikgewogICAgICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSBbLi4udGhpcy5tYWluY29udGVudFRhYnMsIHRhYjJdOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZW1vdmUgYSBjb250ZW50IHRhYiBieSBrZXkKICAgICAgICAgKi8KICAgICAgICByZW1vdmVDb250ZW50VGFiKHRhYktleSkgewogICAgICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSB0aGlzLm1haW5jb250ZW50VGFicy5maWx0ZXIoKHQ5KSA9PiB0OS5rZXkgIT09IHRhYktleSk7CiAgICAgICAgICBpZiAodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXkgPT09IHRhYktleSkgewogICAgICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0aGlzLm1haW5jb250ZW50VGFic1swXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2VsZWN0IGEgY29udGVudCB0YWIgYnkga2V5CiAgICAgICAgICovCiAgICAgICAgc2VsZWN0Q29udGVudFRhYih0YWJLZXkpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLm1haW5jb250ZW50VGFicy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICAgICAgaWYgKHRhYjIpIHsKICAgICAgICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gdGFiMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29udGVudCB0YWIKICAgICAgICAgKi8KICAgICAgICBnZXRTZWxlY3RlZENvbnRlbnRUYWIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBBQ1RJVklUWSBMT0cKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGFjdGl2aXR5IGxvZyBBUEkKICAgICAgICAgKi8KICAgICAgICBnZXQgYWN0aXZpdHlMb2coKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZpdHlsb2dFbGVtZW50KSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgYWRkOiAoZW50cnkpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uYWRkKGVudHJ5KSk7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBhZGRNYW55OiAoZW50cmllcykgPT4gewogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5hZGRNYW55KGVudHJpZXMpKTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmNsZWFyKCkpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZ2V0RW50cmllczogKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmdldEVudHJpZXMoKSB8fCBbXSwKICAgICAgICAgICAgICBmaWx0ZXI6IChjcml0ZXJpYSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmZpbHRlcihjcml0ZXJpYSkgfHwgW10sCiAgICAgICAgICAgICAgc2VhcmNoOiAocXVlcnkpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocXVlcnkpIHx8IFtdCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBhZGQ6IChlbnRyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuYWRkKGVudHJ5KSwKICAgICAgICAgICAgYWRkTWFueTogKGVudHJpZXMpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmFkZE1hbnkoZW50cmllcyksCiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLAogICAgICAgICAgICBnZXRFbnRyaWVzOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5nZXRFbnRyaWVzKCksCiAgICAgICAgICAgIGZpbHRlcjogKGNyaXRlcmlhKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5maWx0ZXIoY3JpdGVyaWEpLAogICAgICAgICAgICBzZWFyY2g6IChxdWVyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKHF1ZXJ5KQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IGFjdGl2aXR5IGxvZyB2aXNpYmlsaXR5CiAgICAgICAgICovCiAgICAgICAgc2V0QWN0aXZpdHlMb2dWaXNpYmxlKHZpc2libGUpIHsKICAgICAgICAgIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID0gdmlzaWJsZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVG9nZ2xlIGFjdGl2aXR5IGxvZyB2aXNpYmlsaXR5CiAgICAgICAgICovCiAgICAgICAgdG9nZ2xlQWN0aXZpdHlMb2coKSB7CiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZSA9ICF0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGFjdGl2aXR5IGxvZyB2aXNpYmlsaXR5IHN0YXRlCiAgICAgICAgICovCiAgICAgICAgZ2V0QWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBCT1RUT00gQkFSCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBib3R0b20gYmFyIEFQSSBmb3Igd2lkZ2V0L2FjdGlvbiBtYW5hZ2VtZW50CiAgICAgICAgICovCiAgICAgICAgZ2V0IGJvdHRvbUJhcigpIHsKICAgICAgICAgIGlmICghdGhpcy5ib3R0b21iYXJFbGVtZW50KSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5hZGRXaWRnZXQod2lkZ2V0KSk7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py51cGRhdGVXaWRnZXQoaWQsIHVwZGF0ZSkpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgcmVtb3ZlV2lkZ2V0OiAoaWQpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnJlbW92ZVdpZGdldChpZCkpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KGlkKSwKICAgICAgICAgICAgICBjbGVhcldpZGdldHM6ICgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmNsZWFyV2lkZ2V0cygpKTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGFkZEFjdGlvbjogKGFjdGlvbikgPT4gewogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uYWRkQWN0aW9uKGFjdGlvbikpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgcmVtb3ZlQWN0aW9uOiAoaWQpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnJlbW92ZUFjdGlvbihpZCkpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgY2xlYXJBY3Rpb25zOiAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhckFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkV2lkZ2V0KHdpZGdldCksCiAgICAgICAgICAgIHVwZGF0ZVdpZGdldDogKGlkLCB1cGRhdGUpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC51cGRhdGVXaWRnZXQoaWQsIHVwZGF0ZSksCiAgICAgICAgICAgIHJlbW92ZVdpZGdldDogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KGlkKSwKICAgICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5nZXRXaWRnZXQoaWQpLAogICAgICAgICAgICBjbGVhcldpZGdldHM6ICgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5jbGVhcldpZGdldHMoKSwKICAgICAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKGFjdGlvbiksCiAgICAgICAgICAgIHJlbW92ZUFjdGlvbjogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlQWN0aW9uKGlkKSwKICAgICAgICAgICAgY2xlYXJBY3Rpb25zOiAoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuY2xlYXJBY3Rpb25zKCkKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBib3R0b20gYmFyIHZpc2liaWxpdHkKICAgICAgICAgKi8KICAgICAgICBzZXRCb3R0b21CYXJWaXNpYmxlKHZpc2libGUpIHsKICAgICAgICAgIHRoaXMuYm90dG9tYmFyVmlzaWJsZSA9IHZpc2libGU7CiAgICAgICAgICBpZiAoIXZpc2libGUpIHsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImJvdHRvbWJhci1oaWRkZW4iLCAiIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYm90dG9tYmFyLWhpZGRlbiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgYm90dG9tIGJhciB2aXNpYmlsaXR5IHN0YXRlCiAgICAgICAgICovCiAgICAgICAgZ2V0Qm90dG9tQmFyVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmJvdHRvbWJhclZpc2libGU7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IE5BVklHQVRJT04KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBOYXZpZ2F0ZSB0byBhIHZpZXcgYnkgSUQKICAgICAgICAgKi8KICAgICAgICBhc3luYyBuYXZpZ2F0ZVRvVmlldyh2aWV3SWQsIHBhcmFtczIpIHsKICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTsKICAgICAgICAgIGlmICghdmlldykgewogICAgICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBuYXZpZ2F0ZSB0byB1bmtub3duIHZpZXc6ICR7dmlld0lkfWApOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjYW5MZWF2ZSA9IGF3YWl0IHRoaXMudmlld1JlZ2lzdHJ5LmNhbkxlYXZlQ3VycmVudFZpZXcoKTsKICAgICAgICAgIGlmIChjYW5MZWF2ZSAhPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNhbkxlYXZlID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IHdpbmRvdy5jb25maXJtKGNhbkxlYXZlKTsKICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudmlld0xpZmVjeWNsZSQubmV4dCh7IHR5cGU6ICJsb2FkaW5nIiwgdmlld0lkIH0pOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlldyh2aWV3LCBwYXJhbXMyKTsKICAgICAgICAgICAgY29uc3Qgcm91dGUgPSB2aWV3LnJvdXRlIHx8IHZpZXdJZDsKICAgICAgICAgICAgY29uc3QgbmV3SGFzaCA9IGAjJHtyb3V0ZX1gOwogICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2ggIT09IG5ld0hhc2gpIHsKICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoeyB2aWV3SWQgfSwgIiIsIG5ld0hhc2gpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsgdHlwZTogImxvYWRFcnJvciIsIHZpZXdJZCwgZXJyb3IgfSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBjdXJyZW50IHZpZXcKICAgICAgICAgKi8KICAgICAgICBnZXRDdXJyZW50VmlldygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3OwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgYWNjZXNzIHRvIHRoZSB2aWV3IHJlZ2lzdHJ5IChmb3IgYWR2YW5jZWQgdXNlKQogICAgICAgICAqLwogICAgICAgIGdldFZpZXdSZWdpc3RyeSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdSZWdpc3RyeTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gVU5JRklFRCBDT05GSUdVUkFUSU9OCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogQ29uZmlndXJlIHRoZSBhcHAgc2hlbGwgd2l0aCBhIHVuaWZpZWQgY29uZmlnIG9iamVjdAogICAgICAgICAqLwogICAgICAgIGNvbmZpZ3VyZShjb25maWczKSB7CiAgICAgICAgICBpZiAoY29uZmlnMy52aWV3cykgewogICAgICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5jbGVhcigpOwogICAgICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5yZWdpc3RlckFsbChjb25maWczLnZpZXdzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb25maWczLmJyYW5kaW5nKSB7CiAgICAgICAgICAgIHRoaXMubWFpbm1lbnVMb2dvSWNvbiA9IGNvbmZpZzMuYnJhbmRpbmcubG9nb0ljb24gfHwgIiI7CiAgICAgICAgICAgIHRoaXMubWFpbm1lbnVMb2dvVGV4dCA9IGNvbmZpZzMuYnJhbmRpbmcubG9nb1RleHQgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29uZmlnMy5hcHBCYXIpIHsKICAgICAgICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSBjb25maWczLmFwcEJhci5tZW51SXRlbXMgfHwgW107CiAgICAgICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1icyB8fCAiIjsKICAgICAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yID0gY29uZmlnMy5hcHBCYXIuYnJlYWRjcnVtYlNlcGFyYXRvciB8fCAiID4gIjsKICAgICAgICAgICAgdGhpcy5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSBjb25maWczLmFwcEJhci5zaG93V2luZG93Q29udHJvbHMgPz8gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5hcHBiYXJTaG93U2VhcmNoID0gY29uZmlnMy5hcHBCYXIuc2hvd1NlYXJjaCA/PyBmYWxzZTsKICAgICAgICAgICAgdGhpcy5hcHBiYXJVc2VyID0gY29uZmlnMy5hcHBCYXIudXNlcjsKICAgICAgICAgICAgdGhpcy5hcHBiYXJQcm9maWxlTWVudUl0ZW1zID0gY29uZmlnMy5hcHBCYXIucHJvZmlsZU1lbnVJdGVtcyB8fCBbXTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb25maWczLm1haW5NZW51KSB7CiAgICAgICAgICAgIGlmIChjb25maWczLm1haW5NZW51LnNlY3Rpb25zKSB7CiAgICAgICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51Lmdyb3VwcykgewogICAgICAgICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSBjb25maWczLm1haW5NZW51Lmdyb3VwczsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5sb2dvSWNvbikgewogICAgICAgICAgICAgIHRoaXMubWFpbm1lbnVMb2dvSWNvbiA9IGNvbmZpZzMubWFpbk1lbnUubG9nb0ljb247CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUubG9nb1RleHQpIHsKICAgICAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLm1haW5NZW51LmxvZ29UZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbVRhYnMpIHsKICAgICAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IGNvbmZpZzMubWFpbk1lbnUuYm90dG9tVGFiczsKICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKSB7CiAgICAgICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLmJ1aWxkQm90dG9tVGFic0Zyb21JdGVtcyhjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbmZpZzMuYm90dG9tQmFyKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Qm90dG9tQmFyVmlzaWJsZShjb25maWczLmJvdHRvbUJhci52aXNpYmxlID8/IHRydWUpOwogICAgICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cykgewogICAgICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLndpZGdldHMuZm9yRWFjaCgod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbUJhci5hZGRXaWRnZXQod2lkZ2V0KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIuYWN0aW9ucykgewogICAgICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmJvdHRvbUJhci5hZGRBY3Rpb24oYWN0aW9uKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zZXR1cFJvdXRlckludGVncmF0aW9uKGNvbmZpZzMpOwogICAgICAgICAgaWYgKGNvbmZpZzMub25WaWV3Q2hhbmdlKSB7CiAgICAgICAgICAgIHRoaXMudmlld0NoYW5nZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgICAgICAgICBjb25maWczLm9uVmlld0NoYW5nZShldmVudC52aWV3SWQsIGV2ZW50LnZpZXcpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb25maWczLm9uU2VhcmNoKSB7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjb25maWczLm9uU2VhcmNoOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbmZpZzMuZGVmYXVsdFZpZXcpIHsKICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhjb25maWczLmRlZmF1bHRWaWV3KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EUwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIHNldHVwUm91dGVySW50ZWdyYXRpb24oY29uZmlnMykgewogICAgICAgICAgY29uc3QgaGFuZGxlSGFzaENoYW5nZSA9ICgpID0+IHsKICAgICAgICAgICAgY29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpOwogICAgICAgICAgICBpZiAoIWhhc2gpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCBtYXRjaDIgPSB0aGlzLnZpZXdSZWdpc3RyeS5maW5kQnlSb3V0ZShoYXNoKTsKICAgICAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1ZpZXcobWF0Y2gyLnZpZXcuaWQsIG1hdGNoMi5wYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgICAgIHRoaXMucm91dGVyQ2xlYW51cCA9ICgpID0+IHsKICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBjdXJyZW50SGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpOwogICAgICAgICAgaWYgKGN1cnJlbnRIYXNoKSB7CiAgICAgICAgICAgIGNvbnN0IG1hdGNoMiA9IHRoaXMudmlld1JlZ2lzdHJ5LmZpbmRCeVJvdXRlKGN1cnJlbnRIYXNoKTsKICAgICAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyksIDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ1aWxkTWFpbk1lbnVGcm9tU2VjdGlvbnMoY29uZmlnMykgewogICAgICAgICAgaWYgKCFjb25maWczLm1haW5NZW51Py5zZWN0aW9ucykKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgcmV0dXJuIGNvbmZpZzMubWFpbk1lbnUuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoewogICAgICAgICAgICBuYW1lOiBzZWN0aW9uLm5hbWUsCiAgICAgICAgICAgIGl0ZW1zOiBzZWN0aW9uLnZpZXdzLm1hcCgodmlld0lkKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlld1JlZ2lzdHJ5LmdldCh2aWV3SWQpOwogICAgICAgICAgICAgIGlmICghdmlldykgewogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBrZXk6IHZpZXcuaWQsCiAgICAgICAgICAgICAgICBpY29uTmFtZTogdmlldy5pY29uTmFtZSwKICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyh2aWV3SWQpLAogICAgICAgICAgICAgICAgYmFkZ2U6IHZpZXcuYmFkZ2UKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGl0ZW1zKSB7CiAgICAgICAgICByZXR1cm4gaXRlbXMubWFwKCh2aWV3SWQpID0+IHsKICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmlld1JlZ2lzdHJ5LmdldCh2aWV3SWQpOwogICAgICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFZpZXcgIiR7dmlld0lkfSIgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBrZXk6IHZpZXcuaWQsCiAgICAgICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLm5hdmlnYXRlVG9WaWV3KHZpZXdJZCkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgbG9hZFZpZXcodmlldywgcGFyYW1zMikgewogICAgICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdGhpcy5jdXJyZW50VmlldzsKICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3OwogICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lciA9IHRoaXMubWFpbmNvbnRlbnQ/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3LWNvbnRhaW5lciIpIHx8IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXctY29udGFpbmVyIik7CiAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikgewogICAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IGF3YWl0IHRoaXMudmlld1JlZ2lzdHJ5LmFjdGl2YXRlVmlldyh2aWV3LmlkLCB2aWV3Q29udGFpbmVyLCBwYXJhbXMyKTsKICAgICAgICAgICAgaWYgKGVsZW1lbnQ0KSB7CiAgICAgICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsKICAgICAgICAgICAgICAgIHR5cGU6ICJhY3RpdmF0ZWQiLAogICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3LmlkLAogICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudDQsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHZpZXcuc2Vjb25kYXJ5TWVudSkgewogICAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2aWV3LnNlY29uZGFyeU1lbnU7CiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmcgPSB2aWV3Lm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodmlldy5jb250ZW50VGFicykgewogICAgICAgICAgICB0aGlzLm1haW5jb250ZW50VGFicyA9IHZpZXcuY29udGVudFRhYnM7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHZpZXcuaWQpOwogICAgICAgICAgY29uc3QgY2hhbmdlRXZlbnQgPSB7CiAgICAgICAgICAgIHZpZXdJZDogdmlldy5pZCwKICAgICAgICAgICAgdmlldywKICAgICAgICAgICAgcHJldmlvdXNWaWV3LAogICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkJC5uZXh0KGNoYW5nZUV2ZW50KTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInZpZXctY2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IGNoYW5nZUV2ZW50LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBFVkVOVCBIQU5ETEVSUyAoSW50ZXJuYWwpCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgaGFuZGxlQXBwYmFyTWVudVNlbGVjdChlMTEpIHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIsIHsKICAgICAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKSB7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItYnJlYWRjcnVtYi1uYXZpZ2F0ZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVBcHBiYXJTZWFyY2hDbGljaygpIHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1zZWFyY2gtY2xpY2siLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUFwcGJhclNlYXJjaFF1ZXJ5KGUxMSkgewogICAgICAgICAgaWYgKHRoaXMuc2VhcmNoQ2FsbGJhY2spIHsKICAgICAgICAgICAgdGhpcy5zZWFyY2hDYWxsYmFjayhlMTEuZGV0YWlsLnF1ZXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1xdWVyeSIsIHsKICAgICAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVBcHBiYXJVc2VyTWVudU9wZW4oKSB7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItdXNlci1tZW51LW9wZW4iLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KGUxMSkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWIgPSBlMTEuZGV0YWlsLnRhYjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1haW5tZW51LXRhYi1zZWxlY3QiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlU2Vjb25kYXJ5bWVudUl0ZW1TZWxlY3QoZTExKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBlMTEuZGV0YWlsLml0ZW07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWNvbmRhcnltZW51LWl0ZW0tc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoZTExKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51Q29sbGFwc2VkID0gZTExLmRldGFpbC5jb2xsYXBzZWQ7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSkgewogICAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gZTExLmRldGFpbC5jb2xsYXBzZWQ7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWNvbmRhcnltZW51LWNvbGxhcHNlLWNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVDb250ZW50VGFiU2VsZWN0KGUxMSkgewogICAgICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gZTExLmRldGFpbC50YWI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LXRhYi1zZWxlY3QiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQ29udGVudFRhYkNsb3NlKGUxMSkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29udGVudC10YWItY2xvc2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvaW5kZXguanMKdmFyIGluaXRfZGVlc19hcHB1aTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19hcHB1aSgpOwogICAgaW5pdF92aWV3X3JlZ2lzdHJ5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLW1haW5jb250ZW50L2luZGV4LmpzCnZhciBpbml0X2RlZXNfYXBwdWlfbWFpbmNvbnRlbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWluY29udGVudC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYXBwdWlfbWFpbmNvbnRlbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvaW5kZXguanMKdmFyIGluaXRfZGVlc19hcHB1aV9tYWlubWVudTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLW1haW5tZW51L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19hcHB1aV9tYWlubWVudSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2luZGV4LmpzCnZhciBpbml0X2RlZXNfYXBwdWlfc2Vjb25kYXJ5bWVudTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2FwcHVpX3NlY29uZGFyeW1lbnUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2luZGV4LmpzCnZhciBpbml0X2RlZXNfYXBwdWlfcHJvZmlsZWRyb3Bkb3duMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19hcHB1aV9wcm9maWxlZHJvcGRvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktdGFicy9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2FwcHVpX3RhYnMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19hcHB1aV90YWJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLW1vYmlsZW5hdmlnYXRpb24vZGVlcy1tb2JpbGVuYXZpZ2F0aW9uLmpzCnZhciBfX2VzRGVjb3JhdGU0MywgX19ydW5Jbml0aWFsaXplcnM0NCwgRGVlc01vYmlsZW5hdmlnYXRpb247CnZhciBpbml0X2RlZXNfbW9iaWxlbmF2aWdhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9kZWVzLW1vYmlsZW5hdmlnYXRpb24uanMiKCkgewogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU0MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczQ0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbiA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLW1vYmlsZW5hdmlnYXRpb24iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9oZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9iaWxlTmF2WkluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfbW9iaWxlTmF2WkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21vYmlsZU5hdlpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc01vYmlsZW5hdmlnYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNDModGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGVhZGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQzKHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWVudUl0ZW1zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQzKHRoaXMsIG51bGwsIF9tb2JpbGVOYXZaSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9iaWxlTmF2WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2JpbGVOYXZaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9iaWxlTmF2WkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubW9iaWxlTmF2WkluZGV4ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNNb2JpbGVuYXZpZ2F0aW9uMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiQXBwIFVJIl07CiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbjIuY3JlYXRlQW5kU2hvdyhbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiRGFzaGJvYXJkIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXQtZGFzaGJvYXJkIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gZGFzaGJvYXJkIik7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiUHJvZmlsZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dXNlciIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHByb2ZpbGUiKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGRlZXNNb2JpbGVOYXYpID0+IHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBzZXR0aW5ncyIpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWxwLWNpcmNsZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlNob3cgaGVscCIpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlNpZ24gT3V0IiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpsb2ctb3V0IiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2lnbiBvdXQiKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSk7CiAgICAgICAgfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDsKICAgICAgICBzdGF0aWMgc2luZ2xldG9uUmVmOwogICAgICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KG1lbnVJdGVtc0FyZykgewogICAgICAgICAgaWYgKCF0aGlzLnNpbmdsZXRvblJlZikgewogICAgICAgICAgICB0aGlzLnNpbmdsZXRvblJlZiA9IG5ldyBEZWVzTW9iaWxlbmF2aWdhdGlvbjIoKTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5zaW5nbGV0b25SZWYpOwogICAgICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNpbmdsZXRvblJlZi5tZW51SXRlbXMgPSBtZW51SXRlbXNBcmc7CiAgICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgICB0aGlzLnNpbmdsZXRvblJlZi5zaG93KCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25SZWY7CiAgICAgICAgfQogICAgICAgICNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ0KHRoaXMsIF9oZWFkaW5nX2luaXRpYWxpemVycywgYE1lbnVgKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBoZWFkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ0KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0NCh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtb2JpbGVOYXZaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ0KHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ0KHRoaXMsIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgICAgICBnZXQgbW9iaWxlTmF2WkluZGV4KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbW9iaWxlTmF2WkluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbW9iaWxlTmF2WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHJlYWR5RGVmZXJyZWQgPSAoX19ydW5Jbml0aWFsaXplcnM0NCh0aGlzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKSk7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBpbml0cyB0aGUgbW9iaWxlIG5hdmlnYXRpb24KICAgICAgICAgKi8KICAgICAgICBhc3luYyBpbml0KCkgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgfQoKICAgICAgLm1haW4gewogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDMyMHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjA0KSIsICItMjBweCAwIDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIC0xMHB4IDAgMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5tYWluLnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAubWVudUl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW06YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjM2YzZjQ2Iil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSBkZWVzLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgbWFyZ2luOiA4cHggMTZweDsKICAgICAgfQoKICAgICAgLyogTW9iaWxlIHJlc3BvbnNpdmVuZXNzICovCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkgewogICAgICAgIC5tYWluIHsKICAgICAgICAgIG1heC13aWR0aDogMTAwdnc7CiAgICAgICAgICB3aWR0aDogODV2dzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIEFuaW1hdGlvbiBmb3IgbWVudSBpdGVtcyAqLwogICAgICBAa2V5ZnJhbWVzIHNsaWRlSW5SaWdodCB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwcHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1haW4uc2hvdyAubWVudUl0ZW0gewogICAgICAgIGFuaW1hdGlvbjogc2xpZGVJblJpZ2h0IDAuM3MgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWl0ZW0taW5kZXgsIDApICogMC4wNXMpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGJhciBzdHlsaW5nICovCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzUyNTI1YiIpfTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW4gewogICAgICAgICAgLS16LWluZGV4OiAke3RoaXMubW9iaWxlTmF2WkluZGV4fTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8aDIgY2xhc3M9ImhlYWRpbmciPiR7dGhpcy5oZWFkaW5nfTwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudS1jb250YWluZXIiPgogICAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKG1lbnVJdGVtLCBpbmRleDIpID0+IHsKICAgICAgICAgICAgaWYgKCJkaXZpZGVyIiBpbiBtZW51SXRlbSAmJiBtZW51SXRlbS5kaXZpZGVyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJtZW51SXRlbSIKICAgICAgICAgICAgICAgIHN0eWxlPSItLWl0ZW0taW5kZXg6ICR7aW5kZXgyfSIKICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgbWVudUl0ZW0uYWN0aW9uKHRoaXMpOwogICAgICAgICAgICB9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHttZW51SXRlbS5pY29uTmFtZX0gc2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVJdGVtLXRleHQiPiR7bWVudUl0ZW0ubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICB3aW5kb3dMYXllcjsKICAgICAgICAvKioKICAgICAgICAgKiBpbml0cyB0aGUgc2hvdwogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3coKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGNvbnN0IG1haW4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKTsKICAgICAgICAgIGlmICghdGhpcy53aW5kb3dMYXllcikgewogICAgICAgICAgICB0aGlzLndpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICAgIGJsdXI6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllcik7CiAgICAgICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuc2hvdygpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5tb2JpbGVOYXZaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLm1vYmlsZU5hdlpJbmRleCk7CiAgICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMCk7CiAgICAgICAgICBtYWluLmNsYXNzTGlzdC5hZGQoInNob3ciKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogaW5pdHMgdGhlIGhpZGUgZnVuY3Rpb24KICAgICAgICAgKi8KICAgICAgICBhc3luYyBoaWRlKCkgewogICAgICAgICAgY29uc3QgZG9tdG9vbHMyID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBjb25zdCBtYWluID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7CiAgICAgICAgICBtYWluLmNsYXNzTGlzdC5yZW1vdmUoInNob3ciKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgICAgICBpZiAodGhpcy53aW5kb3dMYXllcikgewogICAgICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgICAgIGlmICh0aGlzLndpbmRvd0xheWVyKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0NChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc01vYmlsZW5hdmlnYXRpb24yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLW1vYmlsZW5hdmlnYXRpb24vaW5kZXguanMKdmFyIGluaXRfZGVlc19tb2JpbGVuYXZpZ2F0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfbW9iaWxlbmF2aWdhdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfYXBwdWkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYXBwdWlfYWN0aXZpdHlsb2cyKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfYXBwYmFyKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfYm90dG9tYmFyMigpOwogICAgaW5pdF9kZWVzX2FwcHVpMigpOwogICAgaW5pdF9kZWVzX2FwcHVpX21haW5jb250ZW50MigpOwogICAgaW5pdF9kZWVzX2FwcHVpX21haW5tZW51MigpOwogICAgaW5pdF9kZWVzX2FwcHVpX3NlY29uZGFyeW1lbnUyKCk7CiAgICBpbml0X2RlZXNfYXBwdWlfcHJvZmlsZWRyb3Bkb3duMigpOwogICAgaW5pdF9kZWVzX2FwcHVpX3RhYnMyKCk7CiAgICBpbml0X2RlZXNfbW9iaWxlbmF2aWdhdGlvbjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2J1dHRvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2J1dHRvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWV4aXQvZGVlcy1idXR0b24tZXhpdC5qcwp2YXIgX19lc0RlY29yYXRlNDQsIF9fcnVuSW5pdGlhbGl6ZXJzNDUsIERlZXNCdXR0b25FeGl0Owp2YXIgaW5pdF9kZWVzX2J1dHRvbl9leGl0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWV4aXQvZGVlcy1idXR0b24tZXhpdC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgX19lc0RlY29yYXRlNDQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM0NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0J1dHRvbkV4aXQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1idXR0b24tZXhpdCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0J1dHRvbkV4aXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0NCh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0J1dHRvbkV4aXQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIERFTU8KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYnV0dG9uLWV4aXQ+PC9kZWVzLWJ1dHRvbi1leGl0PgogIGA7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkJ1dHRvbiJdOwogICAgICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjQpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHNpemUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3R5bGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDUodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBbCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAoKICAgIGAKICAgICAgICBdKTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB3aWR0aDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlyc3RMaW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWNvbmRMaW5lIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0J1dHRvbkV4aXQyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24tZXhpdC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2J1dHRvbl9leGl0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1leGl0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19idXR0b25fZXhpdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8uanMKdmFyIGRlbW9GdW5jMzE7CnZhciBpbml0X2RlZXNfYnV0dG9uX2dyb3VwX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24tZ3JvdXAvZGVlcy1idXR0b24tZ3JvdXAuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMzMSA9ICgpID0+IHsKICAgICAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aG91dCBsYWJlbHMgZm9yIHNpbXBsZSBncm91cGluZzwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TGFiZWxlZCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIGRlc2NyaXB0aXZlIGxhYmVsczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlZpZXcgTW9kZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5HcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DYXJkczwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+TXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB1c2VkIHRvZ2V0aGVyPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TmV0d29yazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TYWxlczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlRpbWUgUmFuZ2U6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPjFIPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj4yNEg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+N0Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MzBEPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FeHBvcnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VmVydGljYWwgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aCB2ZXJ0aWNhbCBsYXlvdXQ8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAyNHB4OyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCIgbGFiZWw9Ik5hdmlnYXRpb246Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhc2hib2FyZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+QW5hbHl0aWNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlcG9ydHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGRpcmVjdGlvbj0idmVydGljYWwiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RWRpdCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRlbGV0ZSBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPk1peGVkIEJ1dHRvbiBUeXBlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRpZmZlcmVudCBidXR0b24gdHlwZXMgd2l0aGluIGdyb3VwczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlN0YXR1czoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InN1Y2Nlc3MiPkFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+UGVuZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGFuZ2VyIj5JbmFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9kZWVzLWJ1dHRvbi1ncm91cC5qcwp2YXIgX19lc0RlY29yYXRlNDUsIF9fcnVuSW5pdGlhbGl6ZXJzNDYsIERlZXNCdXR0b25Hcm91cDsKdmFyIGluaXRfZGVlc19idXR0b25fZ3JvdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24tZ3JvdXAvZGVlcy1idXR0b24tZ3JvdXAuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfYnV0dG9uX2dyb3VwX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTQ1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNCdXR0b25Hcm91cCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWJ1dHRvbi1ncm91cCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNCdXR0b25Hcm91cDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2RpcmVjdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0NSh0aGlzLCBudWxsLCBfZGlyZWN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpcmVjdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlyZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpcmVjdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQnV0dG9uR3JvdXAyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiQnV0dG9uIl07CiAgICAgICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgbGFiZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICAgICAgZ2V0IGRpcmVjdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRpcmVjdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncm91cC52ZXJ0aWNhbCAubGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8c3BhbiBjbGFzcz0ibGFiZWwiPiR7dGhpcy5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM0NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0J1dHRvbkdyb3VwMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2luZGV4LmpzCnZhciBpbml0X2RlZXNfYnV0dG9uX2dyb3VwMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYnV0dG9uX2dyb3VwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfYnV0dG9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19idXR0b24yKCk7CiAgICBpbml0X2RlZXNfYnV0dG9uX2V4aXQyKCk7CiAgICBpbml0X2RlZXNfYnV0dG9uX2dyb3VwMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMKdmFyIGRlbW9GdW5jMzI7CnZhciBpbml0X2RlbW80ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfY29tcG9uZW50NCgpOwogICAgZGVtb0Z1bmMzMiA9ICgpID0+IHsKICAgICAgY29uc3QgaW5pdGlhbERhdGFzZXRzID0gewogICAgICAgIHN5c3RlbTogewogICAgICAgICAgbGFiZWw6ICJTeXN0ZW0gVXNhZ2UgKCUpIiwKICAgICAgICAgIHNlcmllczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNQVSIsCiAgICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgICAgeyB4OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gM2U1KS50b0lTT1N0cmluZygpLCB5OiAyNSB9LAogICAgICAgICAgICAgICAgeyB4OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMjRlNCkudG9JU09TdHJpbmcoKSwgeTogMzAgfSwKICAgICAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDI4IH0sCiAgICAgICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMmU0KS50b0lTT1N0cmluZygpLCB5OiAzNSB9LAogICAgICAgICAgICAgICAgeyB4OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gNmU0KS50b0lTT1N0cmluZygpLCB5OiAzMiB9LAogICAgICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDM4IH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiTWVtb3J5IiwKICAgICAgICAgICAgICBkYXRhOiBbCiAgICAgICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDQ1IH0sCiAgICAgICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAyNGU0KS50b0lTT1N0cmluZygpLCB5OiA0OCB9LAogICAgICAgICAgICAgICAgeyB4OiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMThlNCkudG9JU09TdHJpbmcoKSwgeTogNDYgfSwKICAgICAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUyIH0sCiAgICAgICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSA2ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUwIH0sCiAgICAgICAgICAgICAgICB7IHg6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwgeTogNTUgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgaW5pdGlhbEZvcm1hdHRlcnMgPSB7CiAgICAgICAgc3lzdGVtOiAodmFsKSA9PiBgJHt2YWx9JWAKICAgICAgfTsKICAgICAgcmV0dXJuIGIyYAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNtYWluLWNoYXJ0Iik7CiAgICAgICAgY29uc3QgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjb25uZWN0aW9ucy1jaGFydCIpOwogICAgICAgIGxldCBpbnRlcnZhbElkOwogICAgICAgIGxldCBjb25uZWN0aW9uc0ludGVydmFsSWQ7CiAgICAgICAgbGV0IGN1cnJlbnREYXRhc2V0ID0gInN5c3RlbSI7CiAgICAgICAgY29uc3QgZm9ybWF0dGVyczIgPSB7CiAgICAgICAgICBzeXN0ZW06ICh2YWwpID0+IGAke3ZhbH0lYCwKICAgICAgICAgIG5ldHdvcms6ICh2YWwpID0+IGAke3ZhbH0gTWJwc2AsCiAgICAgICAgICBzYWxlczogKHZhbCkgPT4gYCQke3ZhbC50b0xvY2FsZVN0cmluZygpfWAKICAgICAgICB9OwogICAgICAgIGNvbnN0IFRJTUVfV0lORE9XID0gMiAqIDYwICogMWUzOwogICAgICAgIGNvbnN0IFVQREFURV9JTlRFUlZBTCA9IDFlMzsKICAgICAgICBjb25zdCBEQVRBX1BPSU5UX0lOVEVSVkFMID0gNWUzOwogICAgICAgIGxldCBwcmV2aW91c1ZhbHVlcyA9IHsKICAgICAgICAgIGNwdTogMzAsCiAgICAgICAgICBtZW1vcnk6IDUwLAogICAgICAgICAgZG93bmxvYWQ6IDE1MCwKICAgICAgICAgIHVwbG9hZDogMzAsCiAgICAgICAgICBjb25uZWN0aW9uczogMTUwCiAgICAgICAgfTsKICAgICAgICBjb25zdCBnZW5lcmF0ZUluaXRpYWxEYXRhID0gKGJhc2VWYWx1ZSwgdmFyaWFuY2UsIGludGVydmFsMyA9IERBVEFfUE9JTlRfSU5URVJWQUwpID0+IHsKICAgICAgICAgIGNvbnN0IGRhdGExMSA9IFtdOwogICAgICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCBwb2ludENvdW50ID0gTWF0aC5mbG9vcihUSU1FX1dJTkRPVyAvIGludGVydmFsMyk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSBwb2ludENvdW50OyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IG5ldyBEYXRlKG5vdzIgLSBpMTEgKiBpbnRlcnZhbDMpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGJhc2VWYWx1ZSArIChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIHZhcmlhbmNlOwogICAgICAgICAgICBkYXRhMTEucHVzaCh7IHg6IHRpbWVzdGFtcDIsIHk6IE1hdGgucm91bmQodmFsdWUyKSB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhMTE7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBkYXRhc2V0cyA9IHsKICAgICAgICAgIHN5c3RlbTogewogICAgICAgICAgICBsYWJlbDogIlN5c3RlbSBVc2FnZSAoJSkiLAogICAgICAgICAgICBzZXJpZXM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiQ1BVIiwKICAgICAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuY3B1LCAxMCkKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJNZW1vcnkiLAogICAgICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5tZW1vcnksIDgpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgbmV0d29yazogewogICAgICAgICAgICBsYWJlbDogIk5ldHdvcmsgVHJhZmZpYyAoTWJwcykiLAogICAgICAgICAgICBzZXJpZXM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiRG93bmxvYWQiLAogICAgICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5kb3dubG9hZCwgMzApCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiVXBsb2FkIiwKICAgICAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMudXBsb2FkLCAxMCkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICBzYWxlczogewogICAgICAgICAgICBsYWJlbDogIlNhbGVzIEFuYWx5dGljcyIsCiAgICAgICAgICAgIHNlcmllczogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJSZXZlbnVlIiwKICAgICAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMSIsIHk6IDQ1ZTMgfSwKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMiIsIHk6IDUyZTMgfSwKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMyIsIHk6IDQ4ZTMgfSwKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNCIsIHk6IDYxZTMgfSwKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNSIsIHk6IDU4ZTMgfSwKICAgICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNiIsIHk6IDY1ZTMgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmFtZTogIlByb2ZpdCIsCiAgICAgICAgICAgICAgICBkYXRhOiBbCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDEiLCB5OiAxMmUzIH0sCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDIiLCB5OiAxNGUzIH0sCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDMiLCB5OiAxMWUzIH0sCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDQiLCB5OiAxOGUzIH0sCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDUiLCB5OiAxNmUzIH0sCiAgICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDYiLCB5OiAyZTQgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgZ2V0TmV4dFZhbHVlID0gKGN1cnJlbnQsIG1pbjMsIG1heDMsIG1heENoYW5nZSA9IDUpID0+IHsKICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG1heENoYW5nZSAqIDI7CiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBjdXJyZW50ICsgY2hhbmdlOwogICAgICAgICAgY29uc3QgY2VudGVyID0gKG1pbjMgKyBtYXgzKSAvIDI7CiAgICAgICAgICBjb25zdCBwcmVzc3VyZSA9IChjZW50ZXIgLSBuZXdWYWx1ZSkgKiAwLjE7CiAgICAgICAgICBuZXdWYWx1ZSArPSBwcmVzc3VyZTsKICAgICAgICAgIG5ld1ZhbHVlID0gTWF0aC5tYXgobWluMywgTWF0aC5taW4obWF4MywgbmV3VmFsdWUpKTsKICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTsKICAgICAgICB9OwogICAgICAgIGxldCBsYXN0RGF0YVBvaW50VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgbGV0IGNvbm5lY3Rpb25zTGFzdFVwZGF0ZSA9IERhdGUubm93KCk7CiAgICAgICAgY29uc3QgYWRkUmVhbHRpbWVEYXRhID0gKCkgPT4gewogICAgICAgICAgaWYgKCFjaGFydEVsZW1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3Qgc2hvdWxkQWRkUG9pbnQgPSBub3cyIC0gbGFzdERhdGFQb2ludFRpbWUgPj0gREFUQV9QT0lOVF9JTlRFUlZBTDsKICAgICAgICAgIGlmIChzaG91bGRBZGRQb2ludCkgewogICAgICAgICAgICBsYXN0RGF0YVBvaW50VGltZSA9IG5vdzI7CiAgICAgICAgICAgIGNvbnN0IG5ld1RpbWVzdGFtcCA9IG5ldyBEYXRlKG5vdzIpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICAgIGlmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIpIHsKICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5jcHUgPSBnZXROZXh0VmFsdWUocHJldmlvdXNWYWx1ZXMuY3B1LCAyMCwgNTAsIDMpOwogICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzLm1lbW9yeSA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy5tZW1vcnksIDQwLCA3MCwgMik7CiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBbCiAgICAgICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuY3B1IH0gOiB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMubWVtb3J5IH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgY2hhcnRFbGVtZW50LnVwZGF0ZVNlcmllcyhjdXJyZW50U2VyaWVzLCBmYWxzZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLmRvd25sb2FkLCAxMDAsIDIwMCwgMTApOwogICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzLnVwbG9hZCA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy51cGxvYWQsIDIwLCA1MCwgNSk7CiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBbCiAgICAgICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuZG93bmxvYWQgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy51cGxvYWQgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgdXBkYXRlQ29ubmVjdGlvbnMgPSAoKSA9PiB7CiAgICAgICAgICBpZiAoIWNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgICAgIGNvbnN0IG5ld1RpbWVzdGFtcCA9IG5ldyBEYXRlKG5vdzIpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICBjb25zdCBjaGFuZ2UgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMSkgLSAxMDsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zID0gTWF0aC5tYXgoNTAsIE1hdGgubWluKDMwMCwgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgKyBjaGFuZ2UpKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZXMgPSBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5jaGFydFNlcmllczsKICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbewogICAgICAgICAgICBuYW1lOiBjdXJyZW50U2VyaWVzWzBdPy5uYW1lIHx8ICJDb25uZWN0aW9ucyIsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAuLi5jdXJyZW50U2VyaWVzWzBdPy5kYXRhIHx8IFtdLAogICAgICAgICAgICAgIHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH1dOwogICAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKG5ld0RhdGEsIGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IHN3aXRjaERhdGFzZXQgPSAobmFtZSkgPT4gewogICAgICAgICAgY3VycmVudERhdGFzZXQgPSBuYW1lOwogICAgICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25hbWVdOwogICAgICAgICAgY2hhcnRFbGVtZW50LmxhYmVsID0gZGF0YXNldC5sYWJlbDsKICAgICAgICAgIGNoYXJ0RWxlbWVudC5zZXJpZXMgPSBkYXRhc2V0LnNlcmllczsKICAgICAgICAgIGNoYXJ0RWxlbWVudC55QXhpc0Zvcm1hdHRlciA9IGZvcm1hdHRlcnMyW25hbWVdOwogICAgICAgICAgaWYgKG5hbWUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgICAgIGNoYXJ0RWxlbWVudC55QXhpc1NjYWxpbmcgPSAicGVyY2VudGFnZSI7CiAgICAgICAgICAgIGNoYXJ0RWxlbWVudC55QXhpc01heCA9IDEwMDsKICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgICAgIGNoYXJ0RWxlbWVudC55QXhpc1NjYWxpbmcgPSAiZHluYW1pYyI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNTY2FsaW5nID0gImR5bmFtaWMiOwogICAgICAgICAgfQogICAgICAgICAgbGFzdERhdGFQb2ludFRpbWUgPSBEYXRlLm5vdygpIC0gREFUQV9QT0lOVF9JTlRFUlZBTDsKICAgICAgICB9OwogICAgICAgIGNvbnN0IHN0YXJ0UmVhbHRpbWUgPSAoKSA9PiB7CiAgICAgICAgICBpZiAoIWludGVydmFsSWQgJiYgKGN1cnJlbnREYXRhc2V0ID09PSAic3lzdGVtIiB8fCBjdXJyZW50RGF0YXNldCA9PT0gIm5ldHdvcmsiKSkgewogICAgICAgICAgICBjaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gdHJ1ZTsKICAgICAgICAgICAgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiBhZGRSZWFsdGltZURhdGEoKSwgREFUQV9QT0lOVF9JTlRFUlZBTCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIWNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5yZWFsdGltZU1vZGUgPSB0cnVlOwogICAgICAgICAgICBjb25uZWN0aW9uc0ludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gdXBkYXRlQ29ubmVjdGlvbnMoKSwgVVBEQVRFX0lOVEVSVkFMKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IHN0b3BSZWFsdGltZSA9ICgpID0+IHsKICAgICAgICAgIGlmIChpbnRlcnZhbElkKSB7CiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpOwogICAgICAgICAgICBpbnRlcnZhbElkID0gbnVsbDsKICAgICAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChjb25uZWN0aW9uc0ludGVydmFsSWQpOwogICAgICAgICAgICBjb25uZWN0aW9uc0ludGVydmFsSWQgPSBudWxsOwogICAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5yZWFsdGltZU1vZGUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IHJhbmRvbWl6ZURhdGEgPSAoKSA9PiB7CiAgICAgICAgICBpZiAoY3VycmVudERhdGFzZXQgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNwdSA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyA4NSA6IDI1OwogICAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gODAgOiA0NTsKICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5kb3dubG9hZCA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyAyNTAgOiAxMDA7CiAgICAgICAgICAgIHByZXZpb3VzVmFsdWVzLnVwbG9hZCA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyA4MCA6IDIwOwogICAgICAgICAgfQogICAgICAgICAgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gMjgwIDogODA7CiAgICAgICAgICBsYXN0RGF0YVBvaW50VGltZSA9IDA7CiAgICAgICAgICBjb25uZWN0aW9uc0xhc3RVcGRhdGUgPSAwOwogICAgICAgIH07CiAgICAgICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgICAgY29uc3QgdGV4dDkgPSBidXR0b24udGV4dENvbnRlbnQ/LnRyaW0oKTsKICAgICAgICAgIGlmICh0ZXh0OSA9PT0gIlN5c3RlbSBVc2FnZSIpIHsKICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgic3lzdGVtIikpOwogICAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgibmV0d29yayIpKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTdGFydCBMaXZlIikgewogICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzdGFydFJlYWx0aW1lKCkpOwogICAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlN0b3AgTGl2ZSIpIHsKICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJlYWx0aW1lKCkpOwogICAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlNwaWtlIFZhbHVlcyIpIHsKICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gcmFuZG9taXplRGF0YSgpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb25zdCB1cGRhdGVCdXR0b25TdGF0ZXMgPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBidXR0b25zMiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgICAgICAgIGJ1dHRvbnMyLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICAgICAgICBpZiAodGV4dDkgPT09ICJTeXN0ZW0gVXNhZ2UiKSB7CiAgICAgICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJOZXR3b3JrIFRyYWZmaWMiKSB7CiAgICAgICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gIm5ldHdvcmsiID8gImhpZ2hsaWdodGVkIiA6ICJub3JtYWwiOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICAgICAgICBidXR0b24udHlwZSA9IGN1cnJlbnREYXRhc2V0ID09PSAic2FsZXMiID8gImhpZ2hsaWdodGVkIiA6ICJub3JtYWwiOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIGNoYXJ0RWxlbWVudC5yb2xsaW5nV2luZG93ID0gVElNRV9XSU5ET1c7CiAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICAgIGNoYXJ0RWxlbWVudC55QXhpc1NjYWxpbmcgPSAicGVyY2VudGFnZSI7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzTWF4ID0gMTAwOwogICAgICAgIGNoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlVGltZVdpbmRvdygpOwogICAgICAgIH0sIDEwMCk7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxTd2l0Y2hEYXRhc2V0ID0gc3dpdGNoRGF0YXNldDsKICAgICAgICBjb25zdCBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSA9IChuYW1lKSA9PiB7CiAgICAgICAgICBvcmlnaW5hbFN3aXRjaERhdGFzZXQobmFtZSk7CiAgICAgICAgICB1cGRhdGVCdXR0b25TdGF0ZXMoKTsKICAgICAgICB9OwogICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICAgICAgaWYgKHRleHQ5ID09PSAiU3lzdGVtIFVzYWdlIikgewogICAgICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzeXN0ZW0iKSk7CiAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXRXaXRoQnV0dG9uVXBkYXRlKCJzeXN0ZW0iKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiTmV0d29yayBUcmFmZmljIikgewogICAgICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJuZXR3b3JrIikpOwogICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSgibmV0d29yayIpKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUoInNhbGVzIikpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCkgewogICAgICAgICAgY29uc3QgaW5pdGlhbENvbm5lY3Rpb25zRGF0YSA9IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMsIDMwLCBVUERBVEVfSU5URVJWQUwpOwogICAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuc2VyaWVzID0gW3sKICAgICAgICAgICAgbmFtZTogIkNvbm5lY3Rpb25zIiwKICAgICAgICAgICAgZGF0YTogaW5pdGlhbENvbm5lY3Rpb25zRGF0YQogICAgICAgICAgfV07CiAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5yb2xsaW5nV2luZG93ID0gVElNRV9XSU5ET1c7CiAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5yZWFsdGltZU1vZGUgPSBmYWxzZTsKICAgICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJmaXhlZCI7CiAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC55QXhpc01heCA9IDM1MDsKICAgICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LmF1dG9TY3JvbGxJbnRlcnZhbCA9IDFlMzsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC51cGRhdGVUaW1lV2luZG93KCk7CiAgICAgICAgICB9LCAxMDApOwogICAgICAgIH0KICAgICAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoYXJ0LWNvbnRhaW5lciB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgbWluLWhlaWdodDogNDAwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbmZvIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+U3lzdGVtIFVzYWdlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5OZXR3b3JrIFRyYWZmaWM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlNhbGVzIERhdGE8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJSZWFsLXRpbWU6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdGFydCBMaXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdG9wIExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJBY3Rpb25zOiI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3Bpa2UgVmFsdWVzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciI+CiAgICAgICAgPGRlZXMtY2hhcnQtYXJlYQogICAgICAgICAgaWQ9Im1haW4tY2hhcnQiCiAgICAgICAgICAubGFiZWw9JHtpbml0aWFsRGF0YXNldHMuc3lzdGVtLmxhYmVsfQogICAgICAgICAgLnNlcmllcz0ke2luaXRpYWxEYXRhc2V0cy5zeXN0ZW0uc2VyaWVzfQogICAgICAgICAgLnlBeGlzRm9ybWF0dGVyPSR7aW5pdGlhbEZvcm1hdHRlcnMuc3lzdGVtfQogICAgICAgID48L2RlZXMtY2hhcnQtYXJlYT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiIHN0eWxlPSJtYXJnaW4tdG9wOiAyMHB4OyI+CiAgICAgICAgPGRlZXMtY2hhcnQtYXJlYQogICAgICAgICAgaWQ9ImNvbm5lY3Rpb25zLWNoYXJ0IgogICAgICAgICAgLmxhYmVsPSR7IkFjdGl2ZSBDb25uZWN0aW9ucyJ9CiAgICAgICAgICAuc2VyaWVzPSR7W3sKICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbnMiLAogICAgICAgIGRhdGE6IFtdCiAgICAgIH1dfQogICAgICAgICAgLnlBeGlzRm9ybWF0dGVyPSR7KHZhbCkgPT4gYCR7dmFsfWB9CiAgICAgICAgPjwvZGVlcy1jaGFydC1hcmVhPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIFJlYWwtdGltZSBtb25pdG9yaW5nIHdpdGggMi1taW51dGUgcm9sbGluZyB3aW5kb3cg4oCiIAogICAgICAgIFVwZGF0ZXMgZXZlcnkgc2Vjb25kIHdpdGggc21vb3RoIHZhbHVlIHRyYW5zaXRpb25zIOKAoiAKICAgICAgICBDbGljayAnU3Bpa2UgVmFsdWVzJyB0byBzaW11bGF0ZSBsb2FkIHNwaWtlcwogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL3N0eWxlcy5qcwp2YXIgY2hhcnRBcmVhU3R5bGVzOwp2YXIgaW5pdF9zdHlsZXM1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL3N0eWxlcy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgY2hhcnRBcmVhU3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CiAgICAgIC5jaGFydENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIHBhZGRpbmc6IDQ0cHggMTZweCAxNnB4IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAvKiBFbnN1cmUgY29udGFpbmVyIGRvZXNuJ3Qgb3ZlcnJpZGUgY2hhcnQgYmFja2dyb3VuZCAqLwogICAgICB9CiAgICAgIAogICAgICAvKiBBcGV4Q2hhcnRzIHRoZW1lIG92ZXJyaWRlcyAqLwogICAgICAuYXBleGNoYXJ0cy1jYW52YXMgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWlubmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1ncmFwaGljYWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUuanMKdmFyIHJlbmRlckNoYXJ0QXJlYTsKdmFyIGluaXRfdGVtcGxhdGUzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL3RlbXBsYXRlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICByZW5kZXJDaGFydEFyZWEgPSAoY29tcG9uZW50KSA9PiB7CiAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0VGl0bGUiPiR7Y29tcG9uZW50LmxhYmVsfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hhcnRDb250YWluZXIiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy92ZXJzaW9ucy5qcwp2YXIgQ0ROX1ZFUlNJT05TLCBDRE5fQkFTRTsKdmFyIGluaXRfdmVyc2lvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvdmVyc2lvbnMuanMiKCkgewogICAgQ0ROX1ZFUlNJT05TID0gewogICAgICB4dGVybTogIjUuMy4wIiwKICAgICAgeHRlcm1BZGRvbkZpdDogIjAuOC4wIiwKICAgICAgeHRlcm1BZGRvblNlYXJjaDogIjAuMTMuMCIsCiAgICAgIGhpZ2hsaWdodEpzOiAiMTEuMTEuMSIsCiAgICAgIGFwZXhjaGFydHM6ICI1LjMuNiIsCiAgICAgIHRpcHRhcDogIjIuMjMuMCIsCiAgICAgIGZvbnRhd2Vzb21lOiAiNy4xLjAiCiAgICB9OwogICAgQ0ROX0JBU0UgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbSI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvRGVlc1NlcnZpY2VMaWJMb2FkZXIuanMKdmFyIERlZXNTZXJ2aWNlTGliTG9hZGVyOwp2YXIgaW5pdF9EZWVzU2VydmljZUxpYkxvYWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy9EZWVzU2VydmljZUxpYkxvYWRlci5qcyIoKSB7CiAgICBpbml0X3ZlcnNpb25zKCk7CiAgICBEZWVzU2VydmljZUxpYkxvYWRlciA9IGNsYXNzIF9EZWVzU2VydmljZUxpYkxvYWRlciB7CiAgICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgICAgLy8gQ2FjaGVkIGxpYnJhcnkgcmVmZXJlbmNlcwogICAgICB4dGVybUxpYiA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25MaWIgPSBudWxsOwogICAgICB4dGVybVNlYXJjaEFkZG9uTGliID0gbnVsbDsKICAgICAgaGlnaGxpZ2h0SnNMaWIgPSBudWxsOwogICAgICBhcGV4Q2hhcnRzTGliID0gbnVsbDsKICAgICAgdGlwdGFwTGliID0gbnVsbDsKICAgICAgLy8gTG9hZGluZyBwcm9taXNlcyB0byBwcmV2ZW50IGR1cGxpY2F0ZSBjb25jdXJyZW50IGxvYWRzCiAgICAgIHh0ZXJtTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICB4dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICB4dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICBoaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgdGlwdGFwTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgRGVlc1NlcnZpY2VMaWJMb2FkZXIKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgICAgICBpZiAoIV9EZWVzU2VydmljZUxpYkxvYWRlci5pbnN0YW5jZSkgewogICAgICAgICAgX0RlZXNTZXJ2aWNlTGliTG9hZGVyLmluc3RhbmNlID0gbmV3IF9EZWVzU2VydmljZUxpYkxvYWRlcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX0RlZXNTZXJ2aWNlTGliTG9hZGVyLmluc3RhbmNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHh0ZXJtIG1vZHVsZSB3aXRoIFRlcm1pbmFsIGNsYXNzCiAgICAgICAqLwogICAgICBhc3luYyBsb2FkWHRlcm0oKSB7CiAgICAgICAgaWYgKHRoaXMueHRlcm1MaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTGliOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy54dGVybUxvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5qZWN0WHRlcm1TdHlsZXMoKTsKICAgICAgICAgIHRoaXMueHRlcm1MaWIgPSB7CiAgICAgICAgICAgIFRlcm1pbmFsOiBtb2R1bGUuVGVybWluYWwKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgeHRlcm0tYWRkb24tZml0IGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIEZpdEFkZG9uIGNsYXNzCiAgICAgICAqLwogICAgICBhc3luYyBsb2FkWHRlcm1GaXRBZGRvbigpIHsKICAgICAgICBpZiAodGhpcy54dGVybUZpdEFkZG9uTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtLWFkZG9uLWZpdEAke0NETl9WRVJTSU9OUy54dGVybUFkZG9uRml0fS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIHRoaXMueHRlcm1GaXRBZGRvbkxpYiA9IHsKICAgICAgICAgICAgRml0QWRkb246IG1vZHVsZS5GaXRBZGRvbgogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgeHRlcm0tYWRkb24tc2VhcmNoIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIFNlYXJjaEFkZG9uIGNsYXNzCiAgICAgICAqLwogICAgICBhc3luYyBsb2FkWHRlcm1TZWFyY2hBZGRvbigpIHsKICAgICAgICBpZiAodGhpcy54dGVybVNlYXJjaEFkZG9uTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTGliOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtLWFkZG9uLXNlYXJjaEAke0NETl9WRVJTSU9OUy54dGVybUFkZG9uU2VhcmNofS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYiA9IHsKICAgICAgICAgICAgU2VhcmNoQWRkb246IG1vZHVsZS5TZWFyY2hBZGRvbgogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluamVjdCB4dGVybSBDU1Mgc3R5bGVzIGludG8gdGhlIGRvY3VtZW50IGhlYWQKICAgICAgICovCiAgICAgIGFzeW5jIGluamVjdFh0ZXJtU3R5bGVzKCkgewogICAgICAgIGNvbnN0IHN0eWxlSWQgPSAieHRlcm0tY2RuLXN0eWxlcyI7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNzc1VybCA9IGAke0NETl9CQVNFfS94dGVybUAke0NETl9WRVJTSU9OUy54dGVybX0vY3NzL3h0ZXJtLmNzc2A7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjc3NVcmwpOwogICAgICAgIGNvbnN0IGNzc1RleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgeHRlcm1NZWFzdXJlbWVudEZpeCA9IGAKLyogRml4IHh0ZXJtLmpzIFdpZHRoQ2FjaGUgbWVhc3VyZW1lbnQgY29udGFpbmVyIGNhdXNpbmcgaG9yaXpvbnRhbCBzY3JvbGxiYXIgKi8KLyogeHRlcm0gY3JlYXRlcyB0aGlzIG9uIGRvY3VtZW50LmJvZHkgLSBtb3ZlIGl0IG9mZi1zY3JlZW4gaG9yaXpvbnRhbGx5IHRvbyAqLwpib2R5ID4gZGl2W3N0eWxlKj0idG9wOiAtNTAwMDBweCJdW3N0eWxlKj0id2lkdGg6IDUwMDAwcHgiXSB7CiAgbGVmdDogLTUwMDAwcHggIWltcG9ydGFudDsKfQpgOwogICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZS5pZCA9IHN0eWxlSWQ7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0ICsgeHRlcm1NZWFzdXJlbWVudEZpeDsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBoaWdobGlnaHQuanMgc3ludGF4IGhpZ2hsaWdodGVyIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhpZ2hsaWdodC5qcyBBUEkKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRIaWdobGlnaHRKcygpIHsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRKc0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0vaGlnaGxpZ2h0LmpzQCR7Q0ROX1ZFUlNJT05TLmhpZ2hsaWdodEpzfS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMaWIgPSBtb2R1bGUuZGVmYXVsdDsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBBcGV4Q2hhcnRzIGNoYXJ0aW5nIGxpYnJhcnkgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gQXBleENoYXJ0cyBjb25zdHJ1Y3RvcgogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZEFwZXhDaGFydHMoKSB7CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS9hcGV4Y2hhcnRzQCR7Q0ROX1ZFUlNJT05TLmFwZXhjaGFydHN9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy5hcGV4Q2hhcnRzTGliID0gbW9kdWxlLmRlZmF1bHQ7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIFRpcHRhcCByaWNoIHRleHQgZWRpdG9yIGFuZCBleHRlbnNpb25zIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIFRpcHRhcCBidW5kbGUgd2l0aCBFZGl0b3IgYW5kIGV4dGVuc2lvbnMKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRUaXB0YXAoKSB7CiAgICAgICAgaWYgKHRoaXMudGlwdGFwTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2ZXJzaW9uMiA9IENETl9WRVJTSU9OUy50aXB0YXA7CiAgICAgICAgICBjb25zdCBbY29yZU1vZHVsZSwgc3RhcnRlcktpdE1vZHVsZSwgdW5kZXJsaW5lTW9kdWxlLCB0ZXh0QWxpZ25Nb2R1bGUsIGxpbmtNb2R1bGUsIHR5cG9ncmFwaHlNb2R1bGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvY29yZUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvc3RhcnRlci1raXRAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmVAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi10ZXh0LWFsaWduQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9leHRlbnNpb24tbGlua0Ake3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXR5cG9ncmFwaHlAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKQogICAgICAgICAgXSk7CiAgICAgICAgICB0aGlzLnRpcHRhcExpYiA9IHsKICAgICAgICAgICAgRWRpdG9yOiBjb3JlTW9kdWxlLkVkaXRvciwKICAgICAgICAgICAgU3RhcnRlcktpdDogc3RhcnRlcktpdE1vZHVsZS5kZWZhdWx0IHx8IHN0YXJ0ZXJLaXRNb2R1bGUuU3RhcnRlcktpdCwKICAgICAgICAgICAgVW5kZXJsaW5lOiB1bmRlcmxpbmVNb2R1bGUuZGVmYXVsdCB8fCB1bmRlcmxpbmVNb2R1bGUuVW5kZXJsaW5lLAogICAgICAgICAgICBUZXh0QWxpZ246IHRleHRBbGlnbk1vZHVsZS5kZWZhdWx0IHx8IHRleHRBbGlnbk1vZHVsZS5UZXh0QWxpZ24sCiAgICAgICAgICAgIExpbms6IGxpbmtNb2R1bGUuZGVmYXVsdCB8fCBsaW5rTW9kdWxlLkxpbmssCiAgICAgICAgICAgIFR5cG9ncmFwaHk6IHR5cG9ncmFwaHlNb2R1bGUuZGVmYXVsdCB8fCB0eXBvZ3JhcGh5TW9kdWxlLlR5cG9ncmFwaHkKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHJlbG9hZCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gcGFyYWxsZWwKICAgICAgICogVXNlZnVsIGZvciB3YXJtaW5nIHRoZSBjYWNoZSBiZWZvcmUgY29tcG9uZW50cyBhcmUgcmVuZGVyZWQKICAgICAgICovCiAgICAgIGFzeW5jIHByZWxvYWRBbGwoKSB7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgdGhpcy5sb2FkWHRlcm0oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtRml0QWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtU2VhcmNoQWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZEhpZ2hsaWdodEpzKCksCiAgICAgICAgICB0aGlzLmxvYWRBcGV4Q2hhcnRzKCksCiAgICAgICAgICB0aGlzLmxvYWRUaXB0YXAoKQogICAgICAgIF0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIHNwZWNpZmljIGxpYnJhcnkgaXMgYWxyZWFkeSBsb2FkZWQKICAgICAgICovCiAgICAgIGlzTG9hZGVkKGxpYnJhcnkyKSB7CiAgICAgICAgc3dpdGNoIChsaWJyYXJ5MikgewogICAgICAgICAgY2FzZSAieHRlcm0iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgInh0ZXJtRml0QWRkb24iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAieHRlcm1TZWFyY2hBZGRvbiI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJoaWdobGlnaHRKcyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAiYXBleENoYXJ0cyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJ0aXB0YXAiOgogICAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWIgIT09IG51bGw7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzCnZhciBpbml0X3NlcnZpY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfRGVlc1NlcnZpY2VMaWJMb2FkZXIoKTsKICAgIGluaXRfdmVyc2lvbnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtYXJlYS9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTQ2LCBfX3J1bkluaXRpYWxpemVyczQ3LCBEZWVzQ2hhcnRBcmVhOwp2YXIgaW5pdF9jb21wb25lbnQ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2NvbXBvbmVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVtbzQoKTsKICAgIGluaXRfc3R5bGVzNSgpOwogICAgaW5pdF90ZW1wbGF0ZTMoKTsKICAgIGluaXRfc2VydmljZXMoKTsKICAgIF9fZXNEZWNvcmF0ZTQ2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNDaGFydEFyZWEgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1jaGFydC1hcmVhIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9jaGFydF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NoYXJ0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NoYXJ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nlcmllc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nlcmllc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZXJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF95QXhpc0Zvcm1hdHRlcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm9sbGluZ1dpbmRvd19kZWNvcmF0b3JzOwogICAgICBsZXQgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF95QXhpc1NjYWxpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF95QXhpc1NjYWxpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfeUF4aXNNYXhfZGVjb3JhdG9yczsKICAgICAgbGV0IF95QXhpc01heF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF95QXhpc01heF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2F1dG9TY3JvbGxJbnRlcnZhbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNDaGFydEFyZWEyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY2hhcnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3Nlcmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3lBeGlzRm9ybWF0dGVyX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgICAgIF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfeUF4aXNTY2FsaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3lBeGlzTWF4X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9jaGFydF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjaGFydCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY2hhcnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2hhcnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jaGFydCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCBfY2hhcnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfc2VyaWVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlcmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlcmllcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlcmllcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VyaWVzX2luaXRpYWxpemVycywgX3Nlcmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfeUF4aXNGb3JtYXR0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNGb3JtYXR0ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInlBeGlzRm9ybWF0dGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnlBeGlzRm9ybWF0dGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoueUF4aXNGb3JtYXR0ZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycywgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvbGxpbmdXaW5kb3ciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvbGxpbmdXaW5kb3ciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucm9sbGluZ1dpbmRvdywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJvbGxpbmdXaW5kb3cgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfcmVhbHRpbWVNb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlYWx0aW1lTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVhbHRpbWVNb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlYWx0aW1lTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJlYWx0aW1lTW9kZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVhbHRpbWVNb2RlX2luaXRpYWxpemVycywgX3JlYWx0aW1lTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfeUF4aXNTY2FsaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInlBeGlzU2NhbGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNTY2FsaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnlBeGlzU2NhbGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnlBeGlzU2NhbGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgX3lBeGlzU2NhbGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfeUF4aXNNYXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNNYXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInlBeGlzTWF4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnlBeGlzTWF4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoueUF4aXNNYXggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzTWF4X2luaXRpYWxpemVycywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1Njcm9sbEludGVydmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvU2Nyb2xsSW50ZXJ2YWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbEludGVydmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXV0b1Njcm9sbEludGVydmFsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbEludGVydmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNDaGFydEFyZWEyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiQ2hhcnQiXTsKICAgICAgICAjY2hhcnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2NoYXJ0X2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvLyBpbnN0YW5jZQogICAgICAgIGdldCBjaGFydCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY2hhcnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9jaGFydF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgIlVudGl0bGVkIENoYXJ0IikpOwogICAgICAgIGdldCBsYWJlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGFiZWwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZXJpZXNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBzZXJpZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZXJpZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gT3ZlcnJpZGUgZ2V0dGVyIHRvIHJldHVybiBpbnRlcm5hbCBjaGFydCBkYXRhCiAgICAgICAgZ2V0IGNoYXJ0U2VyaWVzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDaGFydERhdGEubGVuZ3RoID4gMCA/IHRoaXMuaW50ZXJuYWxDaGFydERhdGEgOiB0aGlzLnNlcmllczsKICAgICAgICB9CiAgICAgICAgI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2VyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfaW5pdGlhbGl6ZXJzLCAodmFsKSA9PiBgJHt2YWx9IE1icHNgKSk7CiAgICAgICAgZ2V0IHlBeGlzRm9ybWF0dGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB5QXhpc0Zvcm1hdHRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyb2xsaW5nV2luZG93X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9yb2xsaW5nV2luZG93X2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCByb2xsaW5nV2luZG93KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gMCBtZWFucyBubyByb2xsaW5nIHdpbmRvdwogICAgICAgIHNldCByb2xsaW5nV2luZG93KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcm9sbGluZ1dpbmRvd19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IHJlYWx0aW1lTW9kZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFsdGltZU1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlYWx0aW1lTW9kZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3JlYWx0aW1lTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjeUF4aXNTY2FsaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfcmVhbHRpbWVNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgImR5bmFtaWMiKSk7CiAgICAgICAgZ2V0IHlBeGlzU2NhbGluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHlBeGlzU2NhbGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3lBeGlzU2NhbGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjeUF4aXNNYXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF95QXhpc1NjYWxpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF95QXhpc01heF9pbml0aWFsaXplcnMsIDEwMCkpOwogICAgICAgIGdldCB5QXhpc01heCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN5QXhpc01heF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICAvLyBVc2VkIHdoZW4geUF4aXNTY2FsaW5nIGlzICdmaXhlZCcgb3IgJ3BlcmNlbnRhZ2UnCiAgICAgICAgc2V0IHlBeGlzTWF4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jeUF4aXNNYXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2F1dG9TY3JvbGxJbnRlcnZhbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfYXV0b1Njcm9sbEludGVydmFsX2luaXRpYWxpemVycywgMWUzKSk7CiAgICAgICAgZ2V0IGF1dG9TY3JvbGxJbnRlcnZhbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhdXRvU2Nyb2xsSW50ZXJ2YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gQXV0by1zY3JvbGwgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzICgwIHRvIGRpc2FibGUpCiAgICAgICAgc2V0IGF1dG9TY3JvbGxJbnRlcnZhbCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2F1dG9TY3JvbGxJbnRlcnZhbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICByZXNpemVPYnNlcnZlciA9IF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxJbnRlcnZhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgcmVzaXplVGltZW91dDsKICAgICAgICBpbnRlcm5hbENoYXJ0RGF0YSA9IFtdOwogICAgICAgIGF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICAgICAgREVCVUdfUkVTSVpFID0gZmFsc2U7CiAgICAgICAgLy8gU2V0IHRvIHRydWUgdG8gZW5hYmxlIHJlc2l6ZSBkZWJ1Z2dpbmcKICAgICAgICAvLyBDaGFydCBjb2xvciBzY2hlbWVzCiAgICAgICAgQ0hBUlRfQ09MT1JTID0gewogICAgICAgICAgZGFyazogWwogICAgICAgICAgICAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsCiAgICAgICAgICAgIC8vIEJsdWUKICAgICAgICAgICAgImhzbCgxNzMuNCA4MC40JSA0MCUpIiwKICAgICAgICAgICAgLy8gVGVhbAogICAgICAgICAgICAiaHNsKDI4MC4zIDg3LjQlIDY2LjclKSIsCiAgICAgICAgICAgIC8vIFB1cnBsZQogICAgICAgICAgICAiaHNsKDI0LjYgOTUlIDUzLjElKSIKICAgICAgICAgICAgLy8gT3JhbmdlCiAgICAgICAgICBdLAogICAgICAgICAgbGlnaHQ6IFsKICAgICAgICAgICAgImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLAogICAgICAgICAgICAvLyBCbHVlIChzaGFkY24gcHJpbWFyeSkKICAgICAgICAgICAgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICAgICAgICAvLyBHcmVlbiAoc2hhZGNuIHN1Y2Nlc3MpCiAgICAgICAgICAgICJoc2woMjgwLjMgNDcuNyUgNTAuMiUpIiwKICAgICAgICAgICAgLy8gUHVycGxlIChtdXRlZCkKICAgICAgICAgICAgImhzbCgyMC41IDkwLjIlIDQ4LjIlKSIKICAgICAgICAgICAgLy8gT3JhbmdlIChzaGFkY24gZGVzdHJ1Y3RpdmUgdmFyaWFudCkKICAgICAgICAgIF0KICAgICAgICB9OwogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLkRFQlVHX1JFU0laRSAmJiBlbnRyaWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdOwogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIFJlc2l6ZSBkZXRlY3RlZDoiLCB7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGVudHJ5LmNvbnRlbnRSZWN0LndpZHRoLAogICAgICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuY29udGVudFJlY3QuaGVpZ2h0CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yZWdpc3RlckdhcmJhZ2VGdW5jdGlvbihhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZGVzdHJveWluZyBjaGFydDoiLCBlcnJvcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZTIpKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gY2hhcnRBcmVhU3R5bGVzOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiByZW5kZXJDaGFydEFyZWEodGhpcyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgY29uc3QgQXBleENoYXJ0c0xpYiA9IGF3YWl0IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCkubG9hZEFwZXhDaGFydHMoKTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICBjb25zdCBtYWluYm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluYm94Iik7CiAgICAgICAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKTsKICAgICAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQ2hhcnQgY29udGFpbmVycyBub3QgZm91bmQiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgc3R5bGVDaGFydENvbnRhaW5lciA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNoYXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdUb3AsIDEwKTsKICAgICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nTGVmdCwgMTApOwogICAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nUmlnaHQsIDEwKTsKICAgICAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgICAgIGNvbnN0IGluaXRpYWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgICAgY29uc3QgY2hhcnRTZXJpZXMgPSB0aGlzLnNlcmllcy5sZW5ndGggPiAwID8gdGhpcy5zZXJpZXMgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiY3B1IiwKICAgICAgICAgICAgICBkYXRhOiBbCiAgICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMjUgfSwKICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMDc6MDA6MDAiLCB5OiAzMCB9LAogICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxMTowMDowMCIsIHk6IDIwIH0sCiAgICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzUgfSwKICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTk6MDA6MDAiLCB5OiAyNSB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIm1lbW9yeSIsCiAgICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwMzowMDowMCIsIHk6IDEwIH0sCiAgICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDA3OjAwOjAwIiwgeTogMTIgfSwKICAgICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAxMCB9LAogICAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxNTowMDowMCIsIHk6IDMwIH0sCiAgICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE5OjAwOjAwIiwgeTogNDAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBjaGFydFNlcmllczsKICAgICAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICAgICAgY29uc3QgdGhlbWUgPSBpc0RhcmsgPyAiZGFyayIgOiAibGlnaHQiOwogICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICAgIHNlcmllczogY2hhcnRTZXJpZXMsCiAgICAgICAgICAgIGNoYXJ0OiB7CiAgICAgICAgICAgICAgd2lkdGg6IGluaXRpYWxXaWR0aCB8fCAxMDAsCiAgICAgICAgICAgICAgLy8gVXNlIGFjdHVhbCB3aWR0aCBvciBmYWxsYmFjawogICAgICAgICAgICAgIGhlaWdodDogaW5pdGlhbEhlaWdodCB8fCAxMDAsCiAgICAgICAgICAgICAgLy8gVXNlIGFjdHVhbCBoZWlnaHQgb3IgZmFsbGJhY2sKICAgICAgICAgICAgICB0eXBlOiAiYXJlYSIsCiAgICAgICAgICAgICAgYmFja2dyb3VuZDogInRyYW5zcGFyZW50IiwKICAgICAgICAgICAgICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHRvIGluaGVyaXQgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgICB0b29sYmFyOiB7CiAgICAgICAgICAgICAgICBzaG93OiBmYWxzZQogICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRpc2FibGVzIHRoZSB0b29sYmFyCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBhbmltYXRpb25zOiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGFuaW1hdGlvbnMgaW4gcmVhbHRpbWUgbW9kZQogICAgICAgICAgICAgICAgc3BlZWQ6IDQwMCwKICAgICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCiAgICAgICAgICAgICAgICAgIC8vIERpc2FibGUgZ3JhZHVhbCBhbmltYXRpb24gZm9yIGNsZWFuZXIgdXBkYXRlcwogICAgICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGR5bmFtaWNBbmltYXRpb246IHsKICAgICAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgICAgICBzcGVlZDogMzUwCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB6b29tOiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgICAgICAgICAgLy8gRGlzYWJsZSB6b29tIGZvciBjbGVhbmVyIGludGVyYWN0aW9uCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBzZWxlY3Rpb246IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIHNlbGVjdGlvbgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YUxhYmVsczogewogICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cm9rZTogewogICAgICAgICAgICAgIHdpZHRoOiAyLAogICAgICAgICAgICAgIGN1cnZlOiAic21vb3RoIgogICAgICAgICAgICB9LAogICAgICAgICAgICB4YXhpczogewogICAgICAgICAgICAgIHR5cGU6ICJkYXRldGltZSIsCiAgICAgICAgICAgICAgLy8gVGltZS1zZXJpZXMgZGF0YQogICAgICAgICAgICAgIGxhYmVsczogewogICAgICAgICAgICAgICAgZm9ybWF0OiAiSEg6bW06c3MiLAogICAgICAgICAgICAgICAgLy8gVGltZSBmb3JtYXR0aW5nIHdpdGggc2Vjb25kcwogICAgICAgICAgICAgICAgZGF0ZXRpbWVVVEM6IGZhbHNlLAogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJywKICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgICAgICAvLyBIaWRlIHgtYXhpcyBib3JkZXIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAgIC8vIEhpZGUgeC1heGlzIHRpY2tzCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB5YXhpczogewogICAgICAgICAgICAgIG1pbjogMCwKICAgICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4LAogICAgICAgICAgICAgIGxhYmVsczogewogICAgICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyLAogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJywKICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgICAgICAvLyBIaWRlIHktYXhpcyBib3JkZXIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAgIC8vIEhpZGUgeS1heGlzIHRpY2tzCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICAgICAgc2hhcmVkOiB0cnVlLAogICAgICAgICAgICAgIC8vIEVuYWJsZXMgdGhlIHRvb2x0aXAgdG8gZGlzcGxheSBhY3Jvc3Mgc2VyaWVzCiAgICAgICAgICAgICAgaW50ZXJzZWN0OiBmYWxzZSwKICAgICAgICAgICAgICAvLyBBbGxvd3MgaG92ZXJpbmcgYW55d2hlcmUgb24gdGhlIGNoYXJ0CiAgICAgICAgICAgICAgZm9sbG93Q3Vyc29yOiB0cnVlLAogICAgICAgICAgICAgIC8vIE1ha2VzIHRvb2x0aXAgZm9sbG93IG1vdXNlIGV2ZW4gYmV0d2VlbiBwb2ludHMKICAgICAgICAgICAgICB4OiB7CiAgICAgICAgICAgICAgICBmb3JtYXQ6ICJkZC9NTS95eSBISDptbSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGN1c3RvbTogKHsgc2VyaWVzLCBkYXRhUG9pbnRJbmRleCwgdzogdzQgfSkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRoZW1lID0gdzQuY29uZmlnLnRoZW1lLm1vZGU7CiAgICAgICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlID0gY3VycmVudFRoZW1lID09PSAiZGFyayI7CiAgICAgICAgICAgICAgICBjb25zdCBiZ0NvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSA5JSkiIDogImhzbCgwIDAlIDEwMCUpIjsKICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDb2xvciA9IGlzRGFya01vZGUgPyAiaHNsKDAgMCUgOTUlKSIgOiAiaHNsKDAgMCUgOSUpIjsKICAgICAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDg5LjglKSI7CiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gdzQuY29uZmlnLnlheGlzWzBdPy5sYWJlbHM/LmZvcm1hdHRlciB8fCAoKHZhbCkgPT4gdmFsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgbGV0IHRvb2x0aXBDb250ZW50ID0gYDxkaXYgc3R5bGU9InBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6ICR7YmdDb2xvcn07IGNvbG9yOiAke3RleHRDb2xvcn07IGJvcmRlci1yYWRpdXM6IDZweDsgYm94LXNoYWRvdzogMCAycHggOHB4IDAgaHNsKDAgMCUgMCUgLyAke2lzRGFya01vZGUgPyAiMC4yIiA6ICIwLjEifSk7IGJvcmRlcjogMXB4IHNvbGlkICR7Ym9yZGVyQ29sb3J9O2ZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPmA7CiAgICAgICAgICAgICAgICBzZXJpZXMuZm9yRWFjaCgoczEwLCBpbmRleDIpID0+IHsKICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB3NC5nbG9iYWxzLnNlcmllc05hbWVzW2luZGV4Ml07CiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHMxMFtkYXRhUG9pbnRJbmRleF07CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yMiA9IHc0Lmdsb2JhbHMuY29sb3JzW2luZGV4Ml07CiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyMih2YWx1ZTIpOwogICAgICAgICAgICAgICAgICB0b29sdGlwQ29udGVudCArPSBgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbjogJHtpbmRleDIgPiAwID8gIjZweCIgOiAiMCJ9IDA7Ij4KICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBiYWNrZ3JvdW5kOiAke2NvbG9yMn07IGJvcmRlci1yYWRpdXM6IDJweDsiPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDUwMDsiPiR7bGFiZWx9Ojwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6IGF1dG87IGZvbnQtd2VpZ2h0OiA2MDA7Ij4ke2Zvcm1hdHRlZFZhbHVlfTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+YDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdG9vbHRpcENvbnRlbnQgKz0gYDwvZGl2PmA7CiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHRpcENvbnRlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBncmlkOiB7CiAgICAgICAgICAgICAgeGF4aXM6IHsKICAgICAgICAgICAgICAgIGxpbmVzOiB7CiAgICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgICAgICAgIC8vIEhpZGUgdmVydGljYWwgZ3JpZCBsaW5lcyBmb3IgY2xlYW5lciBsb29rCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB5YXhpczogewogICAgICAgICAgICAgICAgbGluZXM6IHsKICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiLAogICAgICAgICAgICAgIC8vIFZlcnkgc3VidGxlIGdyaWQgbGluZXMKICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IDAsCiAgICAgICAgICAgICAgLy8gU29saWQgbGluZQogICAgICAgICAgICAgIHBhZGRpbmc6IHsKICAgICAgICAgICAgICAgIHRvcDogMTAsCiAgICAgICAgICAgICAgICByaWdodDogMjAsCiAgICAgICAgICAgICAgICBib3R0b206IDEwLAogICAgICAgICAgICAgICAgbGVmdDogMjAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICB0eXBlOiAiZ3JhZGllbnQiLAogICAgICAgICAgICAgIC8vIEdyYWRpZW50IGZpbGwgZm9yIHRoZSBhcmVhCiAgICAgICAgICAgICAgZ3JhZGllbnQ6IHsKICAgICAgICAgICAgICAgIHNoYWRlOiBpc0RhcmsgPyAiZGFyayIgOiAibGlnaHQiLAogICAgICAgICAgICAgICAgdHlwZTogInZlcnRpY2FsIiwKICAgICAgICAgICAgICAgIHNoYWRlSW50ZW5zaXR5OiAwLjEsCiAgICAgICAgICAgICAgICBvcGFjaXR5RnJvbTogaXNEYXJrID8gMC4yIDogMC4zLAogICAgICAgICAgICAgICAgb3BhY2l0eVRvOiAwLAogICAgICAgICAgICAgICAgc3RvcHM6IFswLCAxMDBdCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICAgICAgdGhlbWU6IHsKICAgICAgICAgICAgICBtb2RlOiB0aGVtZQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBBcGV4Q2hhcnRzTGliKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSwgb3B0aW9ucyk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQucmVuZGVyKCk7CiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMTAwKSk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgICAgICAgY29uc3QgbWFpbmJveDIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKTsKICAgICAgICAgICAgaWYgKG1haW5ib3gyICYmIHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUobWFpbmJveDIpOwogICAgICAgICAgICAgIGlmICh0aGlzLkRFQlVHX1JFU0laRSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94Iik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjaGFydDoiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZ29CcmlnaHQiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2hhcnRUaGVtZSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VyaWVzIikgJiYgdGhpcy5jaGFydCAmJiB0aGlzLnNlcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2VyaWVzKHRoaXMuc2VyaWVzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzRm9ybWF0dGVyIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgICAgIHlheGlzOiB7CiAgICAgICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInJlYWx0aW1lTW9kZSIpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICBjaGFydDogewogICAgICAgICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgICAgICAgIHNwZWVkOiA0MDAsCiAgICAgICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBkeW5hbWljQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmICh0aGlzLnJlYWx0aW1lTW9kZSAmJiB0aGlzLnJvbGxpbmdXaW5kb3cgPiAwICYmIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID4gMCkgewogICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5zdG9wQXV0b1Njcm9sbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJhdXRvU2Nyb2xsSW50ZXJ2YWwiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICAgICAgaWYgKHRoaXMucmVhbHRpbWVNb2RlICYmIHRoaXMucm9sbGluZ1dpbmRvdyA+IDAgJiYgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9TY3JvbGwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzU2NhbGluZyIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygieUF4aXNNYXgiKSkgJiYgdGhpcy5jaGFydCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgICAgIHlheGlzOiB7CiAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSA9IHRydWUpIHsKICAgICAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmludGVybmFsQ2hhcnREYXRhID0gbmV3U2VyaWVzOwogICAgICAgICAgICBpZiAodGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLnJlYWx0aW1lTW9kZSkgewogICAgICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgICAgIGNvbnN0IGN1dG9mZlRpbWUgPSBub3cyIC0gdGhpcy5yb2xsaW5nV2luZG93OwogICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU2VyaWVzID0gbmV3U2VyaWVzLm1hcCgoc2VyaWVzKSA9PiAoewogICAgICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBzZXJpZXMuZGF0YS5maWx0ZXIoKHBvaW50NCkgPT4gewogICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBvaW50NCA9PT0gIm9iamVjdCIgJiYgcG9pbnQ0ICE9PSBudWxsICYmICJ4IiBpbiBwb2ludDQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocG9pbnQ0LngpLmdldFRpbWUoKSA+IGN1dG9mZlRpbWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkU2VyaWVzLnNvbWUoKHMxMCkgPT4gczEwLmRhdGEubGVuZ3RoID4gMCkpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnlBeGlzU2NhbGluZyA9PT0gImR5bmFtaWMiKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbFZhbHVlcyA9IGZpbHRlcmVkU2VyaWVzLmZsYXRNYXAoKHMxMCkgPT4gczEwLmRhdGEubWFwKChkNSkgPT4gZDUueSkpOwogICAgICAgICAgICAgICAgICBpZiAoYWxsVmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLmFsbFZhbHVlcyk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY01heCA9IE1hdGguY2VpbChtYXhWYWx1ZSAqIDEuMSk7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICAgICAgICAgIHlheGlzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBkeW5hbWljTWF4CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVTZXJpZXMoZmlsdGVyZWRTZXJpZXMsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVTZXJpZXMobmV3U2VyaWVzLCBhbmltYXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHVwZGF0ZSBjaGFydCBzZXJpZXM6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBVcGRhdGUganVzdCB0aGUgeC1heGlzIGZvciBzbW9vdGggc2Nyb2xsaW5nIGluIHJlYWx0aW1lIG1vZGUKICAgICAgICAvLyBQdWJsaWMgZm9yIGFkdmFuY2VkIHVzYWdlIGluIGRlbW9zLCBidXQgdHlwaWNhbGx5IGhhbmRsZWQgYXV0b21hdGljYWxseQogICAgICAgIGFzeW5jIHVwZGF0ZVRpbWVXaW5kb3coKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnQgfHwgdGhpcy5yb2xsaW5nV2luZG93IDw9IDApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCBjdXRvZmZUaW1lID0gbm93MiAtIHRoaXMucm9sbGluZ1dpbmRvdzsKICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgICAgbWluOiBjdXRvZmZUaW1lLAogICAgICAgICAgICAgIG1heDogbm93MiwKICAgICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICAgIGZvcm1hdDogIkhIOm1tOnNzIiwKICAgICAgICAgICAgICAgIGRhdGV0aW1lVVRDOiBmYWxzZSwKICAgICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgIGNvbG9yczogWyF0aGlzLmdvQnJpZ2h0ID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmJywKICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHRpY2tBbW91bnQ6IDYKICAgICAgICAgICAgfQogICAgICAgICAgfSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgYXBwZW5kRGF0YShuZXdEYXRhKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jaGFydC5hcHBlbmREYXRhKG5ld0RhdGEpOwogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVPcHRpb25zKG9wdGlvbnMsIHJlZHJhd1BhdGhzLCBhbmltYXRlKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyhvcHRpb25zLCByZWRyYXdQYXRocywgYW5pbWF0ZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHJlc2l6ZUNoYXJ0KCkgewogICAgICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLkRFQlVHX1JFU0laRSkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgbWFpbmJveCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgICAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKTsKICAgICAgICAgICAgaWYgKCFtYWluYm94IHx8ICFjaGFydENvbnRhaW5lcikgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2b2lkIG1haW5ib3gub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nVG9wLCAxMCk7CiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHN0eWxlQ2hhcnRDb250YWluZXIucGFkZGluZ1JpZ2h0LCAxMCk7CiAgICAgICAgICAgIGNvbnN0IGFjdHVhbFdpZHRoID0gbWFpbmJveC5jbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0OwogICAgICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgICAgICBpZiAoYWN0dWFsV2lkdGggPiAwICYmIGFjdHVhbEhlaWdodCA+IDApIHsKICAgICAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gVXBkYXRpbmcgY2hhcnQgZGltZW5zaW9uczoiLCB7CiAgICAgICAgICAgICAgICAgIHdpZHRoOiBhY3R1YWxXaWR0aCwKICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBhY3R1YWxIZWlnaHQKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgICAgICAgd2lkdGg6IGFjdHVhbFdpZHRoLAogICAgICAgICAgICAgICAgICBoZWlnaHQ6IGFjdHVhbEhlaWdodAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHJlc2l6ZSBjaGFydDoiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIE1hbnVhbGx5IHRyaWdnZXIgYSBjaGFydCByZXNpemUuIFVzZWZ1bCB3aGVuIGF1dG9tYXRpYyBkZXRlY3Rpb24gZG9lc24ndCB3b3JrLgogICAgICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50LgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGZvcmNlUmVzaXplKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgIH0KICAgICAgICBzdGFydEF1dG9TY3JvbGwoKSB7CiAgICAgICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hdXRvU2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgICAgICAgIH0sIHRoaXMuYXV0b1Njcm9sbEludGVydmFsKTsKICAgICAgICB9CiAgICAgICAgc3RvcEF1dG9TY3JvbGwoKSB7CiAgICAgICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpOwogICAgICAgICAgICB0aGlzLmF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZUNoYXJ0VGhlbWUoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY2hhcnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgaXNEYXJrID0gIXRoaXMuZ29CcmlnaHQ7CiAgICAgICAgICBjb25zdCB0aGVtZSA9IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCI7CiAgICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgICB0aGVtZTogewogICAgICAgICAgICAgIG1vZGU6IHRoZW1lCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNvbG9yczogaXNEYXJrID8gdGhpcy5DSEFSVF9DT0xPUlMuZGFyayA6IHRoaXMuQ0hBUlRfQ09MT1JTLmxpZ2h0LAogICAgICAgICAgICB4YXhpczogewogICAgICAgICAgICAgIGxhYmVsczogewogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB5YXhpczogewogICAgICAgICAgICAgIGxhYmVsczogewogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBncmlkOiB7CiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICBncmFkaWVudDogewogICAgICAgICAgICAgICAgc2hhZGU6IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCIsCiAgICAgICAgICAgICAgICBvcGFjaXR5RnJvbTogaXNEYXJrID8gMC4yIDogMC4zCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNDaGFydEFyZWEyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvaW5kZXguanMKdmFyIGluaXRfZGVlc19jaGFydF9hcmVhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50NCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby5qcwp2YXIgZGVtb0Z1bmMzMzsKdmFyIGluaXRfZGVlc19jaGFydF9sb2dfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGRlbW9GdW5jMzMgPSAoKSA9PiB7CiAgICAgIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgICAgY29uc3Qgc3RydWN0dXJlZExvZyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3N0cnVjdHVyZWQtbG9nIik7CiAgICAgICAgY29uc3QgcmF3TG9nID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcmF3LWxvZyIpOwogICAgICAgIGxldCBzdHJ1Y3R1cmVkSW50ZXJ2YWxJZDsKICAgICAgICBsZXQgcmF3SW50ZXJ2YWxJZDsKICAgICAgICBjb25zdCBzZXJ2ZXJTb3VyY2VzID0gWyJTZXJ2ZXIiLCAiRGF0YWJhc2UiLCAiQVBJIiwgIkF1dGgiLCAiQ2FjaGUiLCAiUXVldWUiLCAiV2ViU29ja2V0IiwgIlNjaGVkdWxlciJdOwogICAgICAgIGNvbnN0IGxvZ1RlbXBsYXRlcyA9IHsKICAgICAgICAgIGRlYnVnOiBbCiAgICAgICAgICAgICJMb2FkaW5nIG1vZHVsZToge3ttb2R1bGV9fSIsCiAgICAgICAgICAgICJDYWNoZSBoaXQgZm9yIGtleToge3trZXl9fSIsCiAgICAgICAgICAgICJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsCiAgICAgICAgICAgICJSZXF1ZXN0IGhlYWRlcnM6IHt7aGVhZGVyc319IiwKICAgICAgICAgICAgIkVudmlyb25tZW50IHZhcmlhYmxlIGxvYWRlZDoge3t2YXJ9fSIKICAgICAgICAgIF0sCiAgICAgICAgICBpbmZvOiBbCiAgICAgICAgICAgICJSZXF1ZXN0IHJlY2VpdmVkOiB7e21ldGhvZH19IHt7cGF0aH19IiwKICAgICAgICAgICAgIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgICAgICJQcm9jZXNzaW5nIGpvYiB7e2pvYklkfX0gZnJvbSBxdWV1ZSIsCiAgICAgICAgICAgICdTY2hlZHVsZWQgdGFzayAie3t0YXNrfX0iIHN0YXJ0ZWQnLAogICAgICAgICAgICAiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iCiAgICAgICAgICBdLAogICAgICAgICAgd2FybjogWwogICAgICAgICAgICAiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsCiAgICAgICAgICAgICJNZW1vcnkgdXNhZ2UgYXQge3twZXJjZW50fX0lIiwKICAgICAgICAgICAgIlJhdGUgbGltaXQgYXBwcm9hY2hpbmcgZm9yIElQIHt7aXB9fSIsCiAgICAgICAgICAgICJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsCiAgICAgICAgICAgICJDZXJ0aWZpY2F0ZSBleHBpcmVzIGluIHt7ZGF5c319IGRheXMiCiAgICAgICAgICBdLAogICAgICAgICAgZXJyb3I6IFsKICAgICAgICAgICAgIkRhdGFiYXNlIGNvbm5lY3Rpb24gbG9zdDoge3tlcnJvcn19IiwKICAgICAgICAgICAgIkZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IHt7ZXJyb3J9fSIsCiAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLAogICAgICAgICAgICAiRmlsZSBub3QgZm91bmQ6IHt7cGF0aH19IiwKICAgICAgICAgICAgIlNlcnZpY2UgdW5hdmFpbGFibGU6IHt7c2VydmljZX19IgogICAgICAgICAgXSwKICAgICAgICAgIHN1Y2Nlc3M6IFsKICAgICAgICAgICAgIlNlcnZlciBzdGFydGVkIHN1Y2Nlc3NmdWxseSBvbiBwb3J0IHt7cG9ydH19IiwKICAgICAgICAgICAgIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLAogICAgICAgICAgICAiQmFja3VwIGNvbXBsZXRlZDoge3tzaXplfX0gTUIiLAogICAgICAgICAgICAiU1NMIGNlcnRpZmljYXRlIHJlbmV3ZWQiLAogICAgICAgICAgICAiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiCiAgICAgICAgICBdCiAgICAgICAgfTsKICAgICAgICBjb25zdCBkb2NrZXJMb2dUZW1wbGF0ZXMgPSBbCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ1LjEyM1pceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtuZ2lueF0gR0VUIC9hcGkvaGVhbHRoIDIwMCAtIDJtcyIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ1LjQ1NlpceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyZWRpc10gQ29ubmVjdGlvbiBwb29sIHJ1bm5pbmcgbG93OiAzLzEwIiwKICAgICAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjAxMlpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFthcHBdIFByb2Nlc3NpbmcgYmF0Y2ggam9iICN7e2pvYklkfX0iLAogICAgICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ni4zNDVaXHgxQlswbSBceDFCWzMybU9LXHgxQlswbSAgICBbaGVhbHRoXSBBbGwgc2VydmljZXMgaGVhbHRoeSIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLAogICAgICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny4wMDFaXHgxQlswbSBceDFCWzM1bURFQlVHXHgxQlswbSBbZ3JwY10gUmVxdWVzdCByZWNlaXZlZDogR2V0VXNlcihpZD17e3VzZXJJZH19KSIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjIzNFpceDFCWzBtIFx4MUJbMzFtRVJST1JceDFCWzBtIFthdXRoXSBUb2tlbiB2YWxpZGF0aW9uIGZhaWxlZDogZXhwaXJlZCIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsCiAgICAgICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3Ljg5MFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFt3ZWJzb2NrZXRdIENsaWVudCBjb25uZWN0ZWQ6IHNlc3Npb249e3tzZXNzaW9ufX0iLAogICAgICAgICAgLy8gTXVsdGktbGluZSBsb2cgZW50cnkgbGlrZSBzdGFjayB0cmFjZXMKICAgICAgICAgICJceDFCWzMxbUVycm9yOiBDb25uZWN0aW9uIHJlZnVzZWRceDFCWzBtXG4gICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSlcbiAgICBhdCBQb29sLmNvbm5lY3QgKC9hcHAvbm9kZV9tb2R1bGVzL3BnL2xpYi9wb29sLmpzOjQ1OjIzKVxuICAgIGF0IGFzeW5jIERhdGFiYXNlU2VydmljZS5xdWVyeSAoL2FwcC9zcmMvZGIvc2VydmljZS50czo4OToxMikiCiAgICAgICAgXTsKICAgICAgICBjb25zdCBnZW5lcmF0ZVJhbmRvbUxvZyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGxldmVscyA9IFsiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgInN1Y2Nlc3MiXTsKICAgICAgICAgIGNvbnN0IHdlaWdodHMgPSBbMC4yLCAwLjUsIDAuMTUsIDAuMSwgMC4wNV07CiAgICAgICAgICBjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpOwogICAgICAgICAgbGV0IGN1bXVsYXRpdmUgPSAwOwogICAgICAgICAgbGV0IGxldmVsID0gImluZm8iOwogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgd2VpZ2h0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICAgIGN1bXVsYXRpdmUgKz0gd2VpZ2h0c1tpMTFdOwogICAgICAgICAgICBpZiAocmFuZG9tIDwgY3VtdWxhdGl2ZSkgewogICAgICAgICAgICAgIGxldmVsID0gbGV2ZWxzW2kxMV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNlcnZlclNvdXJjZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2VydmVyU291cmNlcy5sZW5ndGgpXTsKICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGxvZ1RlbXBsYXRlc1tsZXZlbF07CiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0ZW1wbGF0ZXMubGVuZ3RoKV07CiAgICAgICAgICBjb25zdCBtZXNzYWdlMiA9IHRlbXBsYXRlLnJlcGxhY2UoInt7bW9kdWxlfX0iLCBbImV4cHJlc3MiLCAibW9uZ29vc2UiLCAicmVkaXMiLCAic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2tleX19IiwgInVzZXI6IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMykpLnJlcGxhY2UoInt7dGltZX19IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLCBbIk5PREVfRU5WIiwgIkRBVEFCQVNFX1VSTCIsICJBUElfS0VZIiwgIlBPUlQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLCBbIkdFVCIsICJQT1NUIiwgIlBVVCIsICJERUxFVEUiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7cGF0aH19IiwgWyIvYXBpL3VzZXJzIiwgIi9hcGkvYXV0aC9sb2dpbiIsICIvYXBpL3Byb2R1Y3RzIiwgIi9oZWFsdGgiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLCBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsICJqb2JfIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSkpLnJlcGxhY2UoInt7dGFza319IiwgWyJjbGVhbnVwIiwgImJhY2t1cCIsICJyZXBvcnQtZ2VuZXJhdGlvbiIsICJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2lwfX0iLCBgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU1KX1gKS5yZXBsYWNlKCJ7e3F1ZXJ5fX0iLCAiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyA3MCkpLnJlcGxhY2UoInt7ZW5kcG9pbnR9fSIsICIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMwKSArIDEpKS5yZXBsYWNlKCJ7e2Vycm9yfX0iLCBbIkVDT05OUkVGVVNFRCIsICJFVElNRURPVVQiLCAiRU5PVEZPVU5EIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsICJ1c2VyXyIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsIFsiUmVkaXMiLCAiTW9uZ29EQiIsICJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3BvcnR9fSIsIFN0cmluZygzZTMgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1MDApICsgMTAwKSk7CiAgICAgICAgICBzdHJ1Y3R1cmVkTG9nLmFkZExvZyhsZXZlbCwgbWVzc2FnZTIsIHNvdXJjZSk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBnZW5lcmF0ZURvY2tlckxvZyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9ja2VyTG9nVGVtcGxhdGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGRvY2tlckxvZ1RlbXBsYXRlcy5sZW5ndGgpXTsKICAgICAgICAgIGNvbnN0IG5vdzIgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgICBjb25zdCBsb2dMaW5lID0gdGVtcGxhdGUucmVwbGFjZSgvMjAyNC0wMS0xNVQxMDoyMzpcZHsyfVwuXGR7M31aL2csIG5vdzIpLnJlcGxhY2UoInt7am9iSWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3tpcH19IiwgYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpKTsKICAgICAgICAgIHJhd0xvZy53cml0ZWxuUmF3KGxvZ0xpbmUpOwogICAgICAgIH07CiAgICAgICAgY29uc3Qgc3RhcnRTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgICAgIGlmICghc3RydWN0dXJlZEludGVydmFsSWQpIHsKICAgICAgICAgICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4gewogICAgICAgICAgICAgIGdlbmVyYXRlUmFuZG9tTG9nKCk7CiAgICAgICAgICAgICAgY29uc3QgbmV4dERlbGF5ID0gTWF0aC5yYW5kb20oKSAqIDJlMyArIDUwMDsKICAgICAgICAgICAgICBzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgICAgICBzY2hlZHVsZU5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBzY2hlZHVsZU5leHQoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IHN0b3BTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHN0cnVjdHVyZWRJbnRlcnZhbElkKTsKICAgICAgICAgICAgc3RydWN0dXJlZEludGVydmFsSWQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3Qgc3RhcnRSYXdTaW11bGF0aW9uID0gKCkgPT4gewogICAgICAgICAgaWYgKCFyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHsKICAgICAgICAgICAgICBnZW5lcmF0ZURvY2tlckxvZygpOwogICAgICAgICAgICAgIGNvbnN0IG5leHREZWxheSA9IE1hdGgucmFuZG9tKCkgKiAxZTMgKyAyMDA7CiAgICAgICAgICAgICAgcmF3SW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGlmIChyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIG5leHREZWxheSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3Qgc3RvcFJhd1NpbXVsYXRpb24gPSAoKSA9PiB7CiAgICAgICAgICBpZiAocmF3SW50ZXJ2YWxJZCkgewogICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJhd0ludGVydmFsSWQpOwogICAgICAgICAgICByYXdJbnRlcnZhbElkID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgICAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgICAgICBzd2l0Y2ggKHRleHQ5KSB7CiAgICAgICAgICAgIGNhc2UgIkFkZCBTdHJ1Y3R1cmVkIExvZyI6CiAgICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVSYW5kb21Mb2coKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlN0YXJ0IFN0cnVjdHVyZWQiOgogICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0YXJ0U3RydWN0dXJlZFNpbXVsYXRpb24oKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlN0b3AgU3RydWN0dXJlZCI6CiAgICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFN0cnVjdHVyZWRTaW11bGF0aW9uKCkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJBZGQgRG9ja2VyIExvZyI6CiAgICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVEb2NrZXJMb2coKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlN0YXJ0IERvY2tlciI6CiAgICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RhcnRSYXdTaW11bGF0aW9uKCkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTdG9wIERvY2tlciI6CiAgICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJhd1NpbXVsYXRpb24oKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIH0KICAgICAgICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICB9CiAgICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIH0KICAgICAgICBgfQogICAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgIDwhLS0gU3RydWN0dXJlZCBMb2dzIFNlY3Rpb24gLS0+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0cnVjdHVyZWQgTG9ncyAoSUxvZ0VudHJ5KTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgU3RydWN0dXJlZCBsb2cgZW50cmllcyB3aXRoIGxldmVsLCBtZXNzYWdlLCBhbmQgc291cmNlLiBTdXBwb3J0cyBzZWFyY2ggYW5kIGtleXdvcmQgaGlnaGxpZ2h0aW5nLgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5BZGQgU3RydWN0dXJlZCBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IFN0cnVjdHVyZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgU3RydWN0dXJlZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRlZXMtY2hhcnQtbG9nCiAgICAgICAgICBpZD0ic3RydWN0dXJlZC1sb2ciCiAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdGlvbiBTZXJ2ZXIgTG9ncyJ9CiAgICAgICAgICAuaGlnaGxpZ2h0S2V5d29yZHM9JHtbImVycm9yIiwgImZhaWxlZCIsICJ0aW1lb3V0Il19CiAgICAgICAgICAuc2hvd01ldHJpY3M9JHt0cnVlfQogICAgICAgID48L2RlZXMtY2hhcnQtbG9nPgogICAgICA8L2Rpdj4KCiAgICAgIDwhLS0gUmF3IExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmF3IExvZ3MgKERvY2tlci9Db250YWluZXIgU3R5bGUpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBSYXcgbG9nIG91dHB1dCB3aXRoIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmb3IgcmVhbCBEb2NrZXIvY29udGFpbmVyIGxvZ3MuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBEb2NrZXIgTG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TdGFydCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgRG9ja2VyPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJyYXctbG9nIgogICAgICAgICAgLmxhYmVsPSR7IkRvY2tlciBDb250YWluZXIgTG9ncyJ9CiAgICAgICAgICAubW9kZT0keyJyYXcifQogICAgICAgICAgLnNob3dNZXRyaWNzPSR7ZmFsc2V9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWxvZy9kZWVzLWNoYXJ0LWxvZy5qcwp2YXIgX19lc0RlY29yYXRlNDcsIF9fcnVuSW5pdGlhbGl6ZXJzNDgsIERlZXNDaGFydExvZzsKdmFyIGluaXRfZGVlc19jaGFydF9sb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWxvZy9kZWVzLWNoYXJ0LWxvZy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19jaGFydF9sb2dfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlNDcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM0OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0NoYXJ0TG9nID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hhcnQtbG9nIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9kZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvZ0VudHJpZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb2dFbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvU2Nyb2xsX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYXV0b1Njcm9sbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvU2Nyb2xsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RW50cmllc19kZWNvcmF0b3JzOwogICAgICBsZXQgX21heEVudHJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93TWV0cmljc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dNZXRyaWNzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VhcmNoUXVlcnlfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbHRlck1vZGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9maWx0ZXJNb2RlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbHRlck1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZXRyaWNzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWV0cmljc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Rlcm1pbmFsUmVhZHlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0NoYXJ0TG9nMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2xhYmVsX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfbW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sb2dFbnRyaWVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfYXV0b1Njcm9sbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfbWF4RW50cmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9oaWdobGlnaHRLZXl3b3Jkc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3Nob3dNZXRyaWNzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9tZXRyaWNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfbW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tb2RlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2RlX2luaXRpYWxpemVycywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX2xvZ0VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nRW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nRW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dFbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubG9nRW50cmllcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nRW50cmllc19pbml0aWFsaXplcnMsIF9sb2dFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ3KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9TY3JvbGwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmF1dG9TY3JvbGwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfbWF4RW50cmllc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhFbnRyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhFbnRyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEVudHJpZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhFbnRyaWVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhFbnRyaWVzX2luaXRpYWxpemVycywgX21heEVudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodEtleXdvcmRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRLZXl3b3JkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRLZXl3b3Jkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmhpZ2hsaWdodEtleXdvcmRzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRLZXl3b3Jkc19pbml0aWFsaXplcnMsIF9oaWdobGlnaHRLZXl3b3Jkc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd01ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dNZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dNZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd01ldHJpY3MgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dNZXRyaWNzX2luaXRpYWxpemVycywgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ3KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWFyY2hRdWVyeSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZmlsdGVyTW9kZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyTW9kZV9pbml0aWFsaXplcnMsIF9maWx0ZXJNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ3KHRoaXMsIG51bGwsIF9tZXRyaWNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1ldHJpY3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWV0cmljcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1ldHJpY3MgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFJlYWR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXJtaW5hbFJlYWR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsUmVhZHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50ZXJtaW5hbFJlYWR5ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycywgX3Rlcm1pbmFsUmVhZHlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNDcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0NoYXJ0TG9nMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkNoYXJ0IiwgIldvcmtzcGFjZSJdOwogICAgICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiU2VydmVyIExvZ3MiKTsKICAgICAgICBnZXQgbGFiZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX21vZGVfaW5pdGlhbGl6ZXJzLCAic3RydWN0dXJlZCIpKTsKICAgICAgICBnZXQgbW9kZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtb2RlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9sb2dFbnRyaWVzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgbG9nRW50cmllcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsb2dFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsb2dFbnRyaWVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXV0b1Njcm9sbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9hdXRvU2Nyb2xsX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBhdXRvU2Nyb2xsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TY3JvbGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGF1dG9TY3JvbGwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfYXV0b1Njcm9sbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX21heEVudHJpZXNfaW5pdGlhbGl6ZXJzLCAxZTQpKTsKICAgICAgICBnZXQgbWF4RW50cmllcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYXhFbnRyaWVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWF4RW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBoaWdobGlnaHRLZXl3b3JkcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNoaWdobGlnaHRLZXl3b3Jkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaGlnaGxpZ2h0S2V5d29yZHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNoaWdobGlnaHRLZXl3b3Jkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd01ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9oaWdobGlnaHRLZXl3b3Jkc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Nob3dNZXRyaWNzX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93TWV0cmljcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd01ldHJpY3ModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9zaG93TWV0cmljc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgc2VhcmNoUXVlcnkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlYXJjaFF1ZXJ5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ4KHRoaXMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBmaWx0ZXJNb2RlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGZpbHRlck1vZGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNmaWx0ZXJNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfZmlsdGVyTW9kZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCB7IGRlYnVnOiAwLCBpbmZvOiAwLCB3YXJuOiAwLCBlcnJvcjogMCwgc3VjY2VzczogMCwgdG90YWw6IDAsIHJhdGU6IDAgfSkpOwogICAgICAgIGdldCBtZXRyaWNzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1ldHJpY3ModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0ZXJtaW5hbFJlYWR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Rlcm1pbmFsUmVhZHlfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCB0ZXJtaW5hbFJlYWR5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Rlcm1pbmFsUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRlcm1pbmFsUmVhZHkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0ZXJtaW5hbFJlYWR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEJ1ZmZlciBvZiBhbGwgbG9nIGVudHJpZXMgZm9yIGZpbHRlciBtb2RlCiAgICAgICAgbG9nQnVmZmVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Rlcm1pbmFsUmVhZHlfZXh0cmFJbml0aWFsaXplcnMpLCBbXSk7CiAgICAgICAgLy8gVHJhY2sgdHJhaWxpbmcgaGlkZGVuIGVudHJpZXMgY291bnQgZm9yIGxpdmUgdXBkYXRlcyBpbiBmaWx0ZXIgbW9kZQogICAgICAgIHRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgIC8vIHh0ZXJtIGluc3RhbmNlcwogICAgICAgIHRlcm1pbmFsID0gbnVsbDsKICAgICAgICBmaXRBZGRvbiA9IG51bGw7CiAgICAgICAgc2VhcmNoQWRkb24gPSBudWxsOwogICAgICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgICBkb210b29sc0luc3RhbmNlID0gbnVsbDsKICAgICAgICAvLyBSYXRlIGNhbGN1bGF0aW9uCiAgICAgICAgcmF0ZUJ1ZmZlciA9IFtdOwogICAgICAgIHJhdGVJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYm94IGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtYm94IGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLW5hdiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAuc2VhcmNoLW5hdiBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1czsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5maWx0ZXItdG9nZ2xlLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsICJoc2woNDUgOTMlIDQ3JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1IDkzJSA0NyUpIiwgImhzbCg0NSA5MyUgNDclKSIpfTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOSUpOwogICAgICB9CgogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgLnh0ZXJtIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAubWV0cmljcy1iYXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLm1ldHJpYzo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5lcnJvcjo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA2MC4yJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMud2Fybjo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMjUgOTUlIDUzJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuaW5mbzo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMjIyLjIgNDcuNCUgNTEuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLnN1Y2Nlc3M6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5kZWJ1Zzo6YmVmb3JlIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCAwJSA2My45JSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMucmF0ZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAubWV0cmljLnJhdGU6OmJlZm9yZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPiR7dGhpcy5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1ib3giPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggbG9ncy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoSW5wdXQoZTExKX0KICAgICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoUHJldmlvdXMoKX0gdGl0bGU9IlByZXZpb3VzIG1hdGNoIj7ihpE8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoTmV4dCgpfSB0aXRsZT0iTmV4dCBtYXRjaCI+4oaTPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10b2dnbGUgJHt0aGlzLmZpbHRlck1vZGUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnRvZ2dsZUZpbHRlck1vZGUoKX0KICAgICAgICAgICAgICB0aXRsZT0iJHt0aGlzLmZpbHRlck1vZGUgPyAiU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIiA6ICJTd2l0Y2ggdG8gZmlsdGVyIG1vZGUifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJNb2RlID8gIkZpbHRlciIgOiAiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbCA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyTG9ncygpfT4KICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgJHshdGhpcy50ZXJtaW5hbFJlYWR5ID8gYjJgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnNob3dNZXRyaWNzID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljcy1iYXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBlcnJvciI+ZXJyb3JzOiAke3RoaXMubWV0cmljcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHdhcm4iPndhcm5zOiAke3RoaXMubWV0cmljcy53YXJufTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgaW5mbyI+aW5mbzogJHt0aGlzLm1ldHJpY3MuaW5mb308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHN1Y2Nlc3MiPnN1Y2Nlc3M6ICR7dGhpcy5tZXRyaWNzLnN1Y2Nlc3N9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBkZWJ1ZyI+ZGVidWc6ICR7dGhpcy5tZXRyaWNzLmRlYnVnfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgcmF0ZSI+JHt0aGlzLm1ldHJpY3MucmF0ZS50b0ZpeGVkKDEpfSBsb2dzL3NlYzwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIHRoaXMuZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVGVybWluYWwoKTsKICAgICAgICAgIGlmICh0aGlzLmxvZ0VudHJpZXMubGVuZ3RoID4gMCAmJiB0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbLi4udGhpcy5sb2dFbnRyaWVzXTsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0VudHJpZXMpIHsKICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1ldHJpY3MoZW50cnkubGV2ZWwpOwogICAgICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2dFbnRyaWVzLmxlbmd0aCA+IDAgJiYgdGhpcy5sb2dCdWZmZXIubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBidWZmZXJTZXQgPSBuZXcgU2V0KHRoaXMubG9nQnVmZmVyLm1hcCgoZTExKSA9PiBgJHtlMTEudGltZXN0YW1wfXwke2UxMS5tZXNzYWdlfWApKTsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0VudHJpZXMpIHsKICAgICAgICAgICAgICBpZiAoIWJ1ZmZlclNldC5oYXMoYCR7ZW50cnkudGltZXN0YW1wfXwke2VudHJ5Lm1lc3NhZ2V9YCkpIHsKICAgICAgICAgICAgICAgIHRoaXMubG9nQnVmZmVyLnB1c2goZW50cnkpOwogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGluaXRpYWxpemVUZXJtaW5hbCgpIHsKICAgICAgICAgIGNvbnN0IGxpYkxvYWRlciA9IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCk7CiAgICAgICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEJ1bmRsZSwgc2VhcmNoQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtRml0QWRkb24oKSwKICAgICAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybVNlYXJjaEFkZG9uKCkKICAgICAgICAgIF0pOwogICAgICAgICAgYXdhaXQgdGhpcy5pbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKTsKICAgICAgICAgIHRoaXMudGVybWluYWwgPSBuZXcgeHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgICAgICBjdXJzb3JCbGluazogZmFsc2UsCiAgICAgICAgICAgIGRpc2FibGVTdGRpbjogdHJ1ZSwKICAgICAgICAgICAgZm9udFNpemU6IDEyLAogICAgICAgICAgICBmb250RmFtaWx5OiAiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSIsCiAgICAgICAgICAgIHRoZW1lOiB0aGlzLmdldFRlcm1pbmFsVGhlbWUoKSwKICAgICAgICAgICAgc2Nyb2xsYmFjazogdGhpcy5tYXhFbnRyaWVzLAogICAgICAgICAgICBjb252ZXJ0RW9sOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZml0QWRkb24gPSBuZXcgZml0QnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgICAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IHNlYXJjaEJ1bmRsZS5TZWFyY2hBZGRvbigpOwogICAgICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5maXRBZGRvbik7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLnNlYXJjaEFkZG9uKTsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLm9wZW4oY29udGFpbmVyKTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZml0QWRkb24/LmZpdCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IHRoaXMuZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yYXRlSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmNhbGN1bGF0ZVJhdGUoKSwgMWUzKTsKICAgICAgICAgIHRoaXMudGVybWluYWxSZWFkeSA9IHRydWU7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nQnVmZmVyKSB7CiAgICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibG9nRW50cmllcyIpICYmIHRoaXMudGVybWluYWxSZWFkeSAmJiB0aGlzLmxvZ0VudHJpZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJsb2dFbnRyaWVzIikgfHwgW107CiAgICAgICAgICAgIGNvbnN0IG5ld0VudHJpZXMgPSB0aGlzLmxvZ0VudHJpZXM7CiAgICAgICAgICAgIGlmIChvbGRFbnRyaWVzLmxlbmd0aCA9PT0gbmV3RW50cmllcy5sZW5ndGggJiYgb2xkRW50cmllcy5sZW5ndGggPiAwICYmIG9sZEVudHJpZXNbb2xkRW50cmllcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgPT09IG5ld0VudHJpZXNbbmV3RW50cmllcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgJiYgb2xkRW50cmllc1tvbGRFbnRyaWVzLmxlbmd0aCAtIDFdLm1lc3NhZ2UgPT09IG5ld0VudHJpZXNbbmV3RW50cmllcy5sZW5ndGggLSAxXS5tZXNzYWdlKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXdFbnRyaWVzLmxlbmd0aCA+IG9sZEVudHJpZXMubGVuZ3RoICYmIG9sZEVudHJpZXMubGVuZ3RoID4gMCAmJiBvbGRFbnRyaWVzW29sZEVudHJpZXMubGVuZ3RoIC0gMV0udGltZXN0YW1wID09PSBuZXdFbnRyaWVzW29sZEVudHJpZXMubGVuZ3RoIC0gMV0udGltZXN0YW1wICYmIG9sZEVudHJpZXNbb2xkRW50cmllcy5sZW5ndGggLSAxXS5tZXNzYWdlID09PSBuZXdFbnRyaWVzW29sZEVudHJpZXMubGVuZ3RoIC0gMV0ubWVzc2FnZSkgewogICAgICAgICAgICAgIGNvbnN0IHRhaWxFbnRyaWVzID0gbmV3RW50cmllcy5zbGljZShvbGRFbnRyaWVzLmxlbmd0aCk7CiAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0YWlsRW50cmllcykgewogICAgICAgICAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1ldHJpY3MoZW50cnkubGV2ZWwpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nQnVmZmVyLmxlbmd0aCA+IHRoaXMubWF4RW50cmllcykgewogICAgICAgICAgICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlck1vZGUgfHwgIXRoaXMuc2VhcmNoUXVlcnkgfHwgdGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmxvZ0J1ZmZlciA9IFsuLi5uZXdFbnRyaWVzXTsKICAgICAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXRUZXJtaW5hbFRoZW1lKCkgewogICAgICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGUgPz8gdHJ1ZTsKICAgICAgICAgIHJldHVybiBpc0RhcmsgPyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICIjMGEwYTBhIiwKICAgICAgICAgICAgZm9yZWdyb3VuZDogIiNlMGUwZTAiLAogICAgICAgICAgICBjdXJzb3I6ICIjZTBlMGUwIiwKICAgICAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogIiM0MDQwNDAiLAogICAgICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgICAgICByZWQ6ICIjZmY1NTU1IiwKICAgICAgICAgICAgZ3JlZW46ICIjNTBmYTdiIiwKICAgICAgICAgICAgeWVsbG93OiAiI2YxZmE4YyIsCiAgICAgICAgICAgIGJsdWU6ICIjNjI3MmE0IiwKICAgICAgICAgICAgbWFnZW50YTogIiNmZjc5YzYiLAogICAgICAgICAgICBjeWFuOiAiIzhiZTlmZCIsCiAgICAgICAgICAgIHdoaXRlOiAiI2Y4ZjhmMiIsCiAgICAgICAgICAgIGJyaWdodEJsYWNrOiAiIzYyNzJhNCIsCiAgICAgICAgICAgIGJyaWdodFJlZDogIiNmZjZlNmUiLAogICAgICAgICAgICBicmlnaHRHcmVlbjogIiM2OWZmOTQiLAogICAgICAgICAgICBicmlnaHRZZWxsb3c6ICIjZmZmZmE1IiwKICAgICAgICAgICAgYnJpZ2h0Qmx1ZTogIiNkNmFjZmYiLAogICAgICAgICAgICBicmlnaHRNYWdlbnRhOiAiI2ZmOTJkZiIsCiAgICAgICAgICAgIGJyaWdodEN5YW46ICIjYTRmZmZmIiwKICAgICAgICAgICAgYnJpZ2h0V2hpdGU6ICIjZmZmZmZmIgogICAgICAgICAgfSA6IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvcjogIiMzMzMzMzMiLAogICAgICAgICAgICBzZWxlY3Rpb25CYWNrZ3JvdW5kOiAiI2FkZDZmZiIsCiAgICAgICAgICAgIGJsYWNrOiAiIzAwMDAwMCIsCiAgICAgICAgICAgIHJlZDogIiNjZDMxMzEiLAogICAgICAgICAgICBncmVlbjogIiMwMGJjMDAiLAogICAgICAgICAgICB5ZWxsb3c6ICIjOTQ5ODAwIiwKICAgICAgICAgICAgYmx1ZTogIiMwNDUxYTUiLAogICAgICAgICAgICBtYWdlbnRhOiAiI2JjMDViYyIsCiAgICAgICAgICAgIGN5YW46ICIjMDU5OGJjIiwKICAgICAgICAgICAgd2hpdGU6ICIjNTU1NTU1IiwKICAgICAgICAgICAgYnJpZ2h0QmxhY2s6ICIjNjY2NjY2IiwKICAgICAgICAgICAgYnJpZ2h0UmVkOiAiI2NkMzEzMSIsCiAgICAgICAgICAgIGJyaWdodEdyZWVuOiAiIzE0Y2UxNCIsCiAgICAgICAgICAgIGJyaWdodFllbGxvdzogIiNiNWJhMDAiLAogICAgICAgICAgICBicmlnaHRCbHVlOiAiIzA0NTFhNSIsCiAgICAgICAgICAgIGJyaWdodE1hZ2VudGE6ICIjYmMwNWJjIiwKICAgICAgICAgICAgYnJpZ2h0Q3lhbjogIiMwNTk4YmMiLAogICAgICAgICAgICBicmlnaHRXaGl0ZTogIiNhNWE1YTUiCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBJbmplY3QgeHRlcm0gQ1NTIHN0eWxlcyBpbnRvIHNoYWRvdyByb290CiAgICAgICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzaGFkb3cgRE9NIGRvZXNuJ3QgaW5oZXJpdCBzdHlsZXMgZnJvbSBkb2N1bWVudC5oZWFkCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgaW5qZWN0WHRlcm1TdHlsZXNJbnRvU2hhZG93KCkgewogICAgICAgICAgY29uc3Qgc3R5bGVJZCA9ICJ4dGVybS1zaGFkb3ctc3R5bGVzIjsKICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY3NzVXJsKTsKICAgICAgICAgIGNvbnN0IGNzc1RleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgICBzdHlsZS5pZCA9IHN0eWxlSWQ7CiAgICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7CiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBTdHJ1Y3R1cmVkIExvZyBNZXRob2RzCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIGEgc2luZ2xlIHN0cnVjdHVyZWQgbG9nIGVudHJ5CiAgICAgICAgICovCiAgICAgICAgYWRkTG9nKGxldmVsLCBtZXNzYWdlMiwgc291cmNlKSB7CiAgICAgICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICAgICAgdGltZXN0YW1wOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICAgIGxldmVsLAogICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlMiwKICAgICAgICAgICAgc291cmNlCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgICBpZiAodGhpcy5sb2dCdWZmZXIubGVuZ3RoID4gdGhpcy5tYXhFbnRyaWVzKSB7CiAgICAgICAgICAgIHRoaXMubG9nQnVmZmVyLnNoaWZ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyTW9kZSB8fCAhdGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgICAgICB0aGlzLndyaXRlTG9nRW50cnkoZW50cnkpOwogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhaWxpbmdQbGFjZWhvbGRlcigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIG11bHRpcGxlIHN0cnVjdHVyZWQgbG9nIGVudHJpZXMKICAgICAgICAgKi8KICAgICAgICB1cGRhdGVMb2coZW50cmllcykgewogICAgICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHsKICAgICAgICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIHRoZSB0cmFpbGluZyBoaWRkZW4gcGxhY2Vob2xkZXIgaW4gcmVhbC10aW1lCiAgICAgICAgICogQ2xlYXJzIHRoZSBsYXN0IGxpbmUgaWYgYSBwbGFjZWhvbGRlciBhbHJlYWR5IGV4aXN0cywgdGhlbiB3cml0ZXMgdXBkYXRlZCBjb3VudAogICAgICAgICAqLwogICAgICAgIHVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICh0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPiAwKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGUoIlx4MUJbMUFceDFCWzJLXHIiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCsrOwogICAgICAgICAgdGhpcy53cml0ZUhpZGRlblBsYWNlaG9sZGVyKHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCk7CiAgICAgICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2hlY2sgaWYgYSBsb2cgZW50cnkgbWF0Y2hlcyB0aGUgY3VycmVudCBmaWx0ZXIKICAgICAgICAgKi8KICAgICAgICBlbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpIHsKICAgICAgICAgIGlmICghdGhpcy5zZWFyY2hRdWVyeSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIHJldHVybiBlbnRyeS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8IGVudHJ5LmxldmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8IChlbnRyeS5zb3VyY2U/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpID8/IGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgd3JpdGVMb2dFbnRyeShlbnRyeSkgewogICAgICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihmb3JtYXR0ZWQpOwogICAgICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcm1hdExvZ0VudHJ5KGVudHJ5KSB7CiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gdGhpcy5mb3JtYXRUaW1lc3RhbXAoZW50cnkudGltZXN0YW1wKTsKICAgICAgICAgIGNvbnN0IGxldmVsQ29sb3JzID0gewogICAgICAgICAgICBkZWJ1ZzogIlx4MUJbOTBtIiwKICAgICAgICAgICAgLy8gR3JheQogICAgICAgICAgICBpbmZvOiAiXHgxQlszNm0iLAogICAgICAgICAgICAvLyBDeWFuCiAgICAgICAgICAgIHdhcm46ICJceDFCWzMzbSIsCiAgICAgICAgICAgIC8vIFllbGxvdwogICAgICAgICAgICBlcnJvcjogIlx4MUJbMzFtIiwKICAgICAgICAgICAgLy8gUmVkCiAgICAgICAgICAgIHN1Y2Nlc3M6ICJceDFCWzMybSIKICAgICAgICAgICAgLy8gR3JlZW4KICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgICAgIGNvbnN0IGRpbSA9ICJceDFCWzJtIjsKICAgICAgICAgIGNvbnN0IGxldmVsU3RyID0gYCR7bGV2ZWxDb2xvcnNbZW50cnkubGV2ZWxdfVske2VudHJ5LmxldmVsLnRvVXBwZXJDYXNlKCkucGFkRW5kKDcpfV0ke3Jlc2V0fWA7CiAgICAgICAgICBjb25zdCBzb3VyY2VTdHIgPSBlbnRyeS5zb3VyY2UgPyBgJHtkaW19WyR7ZW50cnkuc291cmNlfV0ke3Jlc2V0fSBgIDogIiI7CiAgICAgICAgICBjb25zdCBtZXNzYWdlU3RyID0gdGhpcy5hcHBseUhpZ2hsaWdodHMoZW50cnkubWVzc2FnZSk7CiAgICAgICAgICByZXR1cm4gYCR7ZGltfSR7dGltZXN0YW1wMn0ke3Jlc2V0fSAke2xldmVsU3RyfSAke3NvdXJjZVN0cn0ke21lc3NhZ2VTdHJ9YDsKICAgICAgICB9CiAgICAgICAgZm9ybWF0VGltZXN0YW1wKGlzb1N0cmluZykgewogICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb1N0cmluZyk7CiAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgICAgICBob3VyOiAiMi1kaWdpdCIsCiAgICAgICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKICAgICAgICAgICAgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFwcGx5SGlnaGxpZ2h0cyh0ZXh0OSkgewogICAgICAgICAgY29uc3Qga2V5d29yZHMgPSBbLi4udGhpcy5oaWdobGlnaHRLZXl3b3Jkc107CiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJNb2RlICYmIHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgICAga2V5d29yZHMucHVzaCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChrZXl3b3Jkcy5sZW5ndGggPT09IDApCiAgICAgICAgICAgIHJldHVybiB0ZXh0OTsKICAgICAgICAgIGxldCByZXN1bHQgPSB0ZXh0OTsKICAgICAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiBrZXl3b3JkcykgewogICAgICAgICAgICBjb25zdCBlc2NhcGVkID0ga2V5d29yZC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywgIlxcJCYiKTsKICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkfSlgLCAiZ2kiKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocmVnZXgsICJceDFCWzQzbVx4MUJbMzBtJDFceDFCWzBtIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBSYXcgTG9nIE1ldGhvZHMKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBXcml0ZSByYXcgZGF0YSB0byB0aGUgdGVybWluYWwgKGZvciBEb2NrZXIgbG9ncywgZXRjLikKICAgICAgICAgKi8KICAgICAgICB3cml0ZVJhdyhkYXRhMTEpIHsKICAgICAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZShkYXRhMTEpOwogICAgICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFdyaXRlIGEgcmF3IGxpbmUgdG8gdGhlIHRlcm1pbmFsCiAgICAgICAgICovCiAgICAgICAgd3JpdGVsblJhdyhsaW5lKSB7CiAgICAgICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihsaW5lKTsKICAgICAgICAgIHRoaXMucmVjb3JkTG9nRXZlbnQoKTsKICAgICAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBTZWFyY2ggTWV0aG9kcwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgY29uc3QgbmV3UXVlcnkgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlZCA9IHRoaXMuc2VhcmNoUXVlcnkgIT09IG5ld1F1ZXJ5OwogICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IG5ld1F1ZXJ5OwogICAgICAgICAgaWYgKHRoaXMuZmlsdGVyTW9kZSAmJiBxdWVyeUNoYW5nZWQpIHsKICAgICAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoQWRkb24/LmZpbmROZXh0KHRoaXMuc2VhcmNoUXVlcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVTZWFyY2hLZXlkb3duKGUxMSkgewogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgaWYgKGUxMS5zaGlmdEtleSkgewogICAgICAgICAgICAgIHRoaXMuc2VhcmNoUHJldmlvdXMoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnNlYXJjaE5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gIiI7CiAgICAgICAgICAgIGUxMS50YXJnZXQudmFsdWUgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2VhcmNoIGZvciBhIHF1ZXJ5IGluIHRoZSB0ZXJtaW5hbAogICAgICAgICAqLwogICAgICAgIHNlYXJjaChxdWVyeSkgewogICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogICAgICAgICAgdGhpcy5zZWFyY2hBZGRvbj8uZmluZE5leHQocXVlcnkpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBGaW5kIG5leHQgc2VhcmNoIG1hdGNoCiAgICAgICAgICovCiAgICAgICAgc2VhcmNoTmV4dCgpIHsKICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoQWRkb24/LmZpbmROZXh0KHRoaXMuc2VhcmNoUXVlcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBGaW5kIHByZXZpb3VzIHNlYXJjaCBtYXRjaAogICAgICAgICAqLwogICAgICAgIHNlYXJjaFByZXZpb3VzKCkgewogICAgICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgICAgdGhpcy5zZWFyY2hBZGRvbj8uZmluZFByZXZpb3VzKHRoaXMuc2VhcmNoUXVlcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBDb250cm9sIE1ldGhvZHMKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICB0b2dnbGVBdXRvU2Nyb2xsKCkgewogICAgICAgICAgdGhpcy5hdXRvU2Nyb2xsID0gIXRoaXMuYXV0b1Njcm9sbDsKICAgICAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwgJiYgdGhpcy50ZXJtaW5hbCkgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFRvZ2dsZSBiZXR3ZWVuIGZpbHRlciBtb2RlIGFuZCBoaWdobGlnaHQgbW9kZQogICAgICAgICAqLwogICAgICAgIHRvZ2dsZUZpbHRlck1vZGUoKSB7CiAgICAgICAgICB0aGlzLmZpbHRlck1vZGUgPSAhdGhpcy5maWx0ZXJNb2RlOwogICAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZS1yZW5kZXIgbG9ncyBiYXNlZCBvbiBjdXJyZW50IGZpbHRlciBzdGF0ZQogICAgICAgICAqIEluIGZpbHRlciBtb2RlOiBzaG93IG1hdGNoaW5nIGxvZ3Mgd2l0aCBwbGFjZWhvbGRlcnMgZm9yIGhpZGRlbiBlbnRyaWVzCiAgICAgICAgICogSW4gaGlnaGxpZ2h0IG1vZGU6IHNob3cgYWxsIGxvZ3MKICAgICAgICAgKi8KICAgICAgICByZVJlbmRlckZpbHRlcmVkTG9ncygpIHsKICAgICAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy50ZXJtaW5hbC5jbGVhcigpOwogICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5sb2dCdWZmZXIpIHsKICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGV0IGhpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0J1ZmZlcikgewogICAgICAgICAgICAgIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDApIHsKICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUhpZGRlblBsYWNlaG9sZGVyKGhpZGRlbkNvdW50KTsKICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGlkZGVuQ291bnQrKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGhpZGRlbkNvdW50ID4gMCkgewogICAgICAgICAgICAgIHRoaXMud3JpdGVIaWRkZW5QbGFjZWhvbGRlcihoaWRkZW5Db3VudCk7CiAgICAgICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gaGlkZGVuQ291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBXcml0ZSBhIHBsYWNlaG9sZGVyIGxpbmUgc2hvd2luZyBob3cgbWFueSBsb2cgZW50cmllcyBhcmUgaGlkZGVuIGJ5IGZpbHRlcgogICAgICAgICAqLwogICAgICAgIHdyaXRlSGlkZGVuUGxhY2Vob2xkZXIoY291bnQyKSB7CiAgICAgICAgICBjb25zdCBkaW0gPSAiXHgxQlsybSI7CiAgICAgICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgICAgIGNvbnN0IHRleHQ5ID0gY291bnQyID09PSAxID8gYFsxIGxvZyBsaW5lIGhpZGRlbiBieSBmaWx0ZXIgLi4uXWAgOiBgWyR7Y291bnQyfSBsb2cgbGluZXMgaGlkZGVuIGJ5IGZpbHRlciAuLi5dYDsKICAgICAgICAgIHRoaXMudGVybWluYWw/LndyaXRlbG4oYCR7ZGltfSR7dGV4dDl9JHtyZXNldH1gKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgYWxsIGxvZ3MgYW5kIHJlc2V0IG1ldHJpY3MKICAgICAgICAgKi8KICAgICAgICBjbGVhckxvZ3MoKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsPy5jbGVhcigpOwogICAgICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbXTsKICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgICAgICB0aGlzLnJlc2V0TWV0cmljcygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbG9nCiAgICAgICAgICovCiAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsPy5zY3JvbGxUb0JvdHRvbSgpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBNZXRyaWNzIE1ldGhvZHMKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgICAgICB1cGRhdGVNZXRyaWNzKGxldmVsKSB7CiAgICAgICAgICB0aGlzLm1ldHJpY3MgPSB7CiAgICAgICAgICAgIC4uLnRoaXMubWV0cmljcywKICAgICAgICAgICAgW2xldmVsXTogdGhpcy5tZXRyaWNzW2xldmVsXSArIDEsCiAgICAgICAgICAgIHRvdGFsOiB0aGlzLm1ldHJpY3MudG90YWwgKyAxCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICAgIH0KICAgICAgICByZWNvcmRMb2dFdmVudCgpIHsKICAgICAgICAgIHRoaXMucmF0ZUJ1ZmZlci5wdXNoKERhdGUubm93KCkpOwogICAgICAgIH0KICAgICAgICBjYWxjdWxhdGVSYXRlKCkgewogICAgICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgICAgICB0aGlzLnJhdGVCdWZmZXIgPSB0aGlzLnJhdGVCdWZmZXIuZmlsdGVyKCh0OSkgPT4gbm93MiAtIHQ5IDwgMWU0KTsKICAgICAgICAgIGNvbnN0IHJhdGUgPSB0aGlzLnJhdGVCdWZmZXIubGVuZ3RoIC8gMTA7CiAgICAgICAgICBpZiAocmF0ZSAhPT0gdGhpcy5tZXRyaWNzLnJhdGUpIHsKICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0geyAuLi50aGlzLm1ldHJpY3MsIHJhdGUgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVzZXRNZXRyaWNzKCkgewogICAgICAgICAgdGhpcy5tZXRyaWNzID0geyBkZWJ1ZzogMCwgaW5mbzogMCwgd2FybjogMCwgZXJyb3I6IDAsIHN1Y2Nlc3M6IDAsIHRvdGFsOiAwLCByYXRlOiAwIH07CiAgICAgICAgICB0aGlzLnJhdGVCdWZmZXIgPSBbXTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gTGlmZWN5Y2xlCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMucmF0ZUludGVydmFsKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQ4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQ2hhcnRMb2cyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWxvZy9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2NoYXJ0X2xvZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWxvZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfY2hhcnRfbG9nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9pbmRleC5qcwp2YXIgaW5pdF9ncm91cF9jaGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19jaGFydF9hcmVhKCk7CiAgICBpbml0X2RlZXNfY2hhcnRfbG9nMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2RlZXMtZGF0YXZpZXctY29kZWJveC5kZW1vLmpzCnZhciBkZW1vRnVuYzM0Owp2YXIgaW5pdF9kZWVzX2RhdGF2aWV3X2NvZGVib3hfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMzNCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vV3JhcHBlciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UeXBlU2NyaXB0IENvZGUgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBjb2RlIGV4YW1wbGUgd2l0aCB2YXJpb3VzIHN5bnRheCBoaWdobGlnaHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InR5cGVzY3JpcHQiPgppbnRlcmZhY2UgVXNlciB7CiAgaWQ6IG51bWJlcjsKICBuYW1lOiBzdHJpbmc7CiAgZW1haWw6IHN0cmluZzsKICBpc0FjdGl2ZTogYm9vbGVhbjsKfQoKY2xhc3MgVXNlclNlcnZpY2UgewogIHByaXZhdGUgdXNlcnM6IFVzZXJbXSA9IFtdOwogIAogIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpVXJsOiBzdHJpbmcpIHsKICAgIGNvbnNvbGUubG9nKCdVc2VyU2VydmljZSBpbml0aWFsaXplZCcpOwogIH0KICAKICBhc3luYyBnZXRVc2VycygpOiBQcm9taXNlPFVzZXJbXT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIHJldHVybiBkYXRhLnVzZXJzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXJzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIFtdOwogICAgfQogIH0KICAKICBhZGRVc2VyKHVzZXI6IFVzZXIpOiB2b2lkIHsKICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTsKICB9Cn0KCi8vIFVzYWdlIGV4YW1wbGUKY29uc3Qgc2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMnKTsKY29uc3QgdXNlcnMgPSBhd2FpdCBzZXJ2aWNlLmdldFVzZXJzKCk7CmNvbnNvbGUubG9nKCdGb3VuZCB1c2VyczonLCB1c2Vycy5sZW5ndGgpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SmF2YVNjcmlwdCBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBKYXZhU2NyaXB0IHdpdGggRVM2KyBmZWF0dXJlcy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iamF2YXNjcmlwdCI+Ci8vIEFycmF5IG1hbmlwdWxhdGlvbiBleGFtcGxlcwpjb25zdCBudW1iZXJzID0gWzEsIDIsIDMsIDQsIDVdOwpjb25zdCBkb3VibGVkID0gbnVtYmVycy5tYXAobiA9PiBuICogMik7CmNvbnN0IGZpbHRlcmVkID0gbnVtYmVycy5maWx0ZXIobiA9PiBuID4gMyk7CgovLyBPYmplY3QgZGVzdHJ1Y3R1cmluZwpjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTsKY29uc3QgeyBuYW1lLCBhZ2UgfSA9IHVzZXI7CgovLyBQcm9taXNlIGhhbmRsaW5nCmNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICh1cmwpID0+IHsKICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKfTsKCi8vIE1vZGVybiBzeW50YXgKY29uc3QgZ3JlZXQgPSAobmFtZSA9ICdXb3JsZCcpID0+IFxgSGVsbG8sIFwke25hbWV9IVxgOwpjb25zb2xlLmxvZyhncmVldCgnU2hhZENOJykpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHl0aG9uIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+UHl0aG9uIGNvZGUgd2l0aCBjbGFzc2VzIGFuZCB0eXBlIGhpbnRzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJweXRob24iPgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwKaW1wb3J0IGFzeW5jaW8KCmNsYXNzIERhdGFQcm9jZXNzb3I6CiAgICAiIiJBIHNpbXBsZSBkYXRhIHByb2Nlc3NvciBjbGFzcyIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5kYXRhOiBMaXN0W2RpY3RdID0gW10KICAgIAogICAgYXN5bmMgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBpdGVtczogTGlzdFtkaWN0XSkgLT4gTGlzdFtkaWN0XToKICAgICAgICAiIiJQcm9jZXNzIGRhdGEgaXRlbXMgYXN5bmNocm9ub3VzbHkiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIyBTaW11bGF0ZSBhc3luYyBwcm9jZXNzaW5nCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4xKQogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAnaWQnOiBpdGVtLmdldCgnaWQnKSwKICAgICAgICAgICAgICAgICdwcm9jZXNzZWQnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZQogICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICAKICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICdpdGVtc19wcm9jZXNzZWQnOiBsZW4oc2VsZi5kYXRhKQogICAgICAgIH0KCiMgVXNhZ2UKcHJvY2Vzc29yID0gRGF0YVByb2Nlc3NvcigiTWFpbiIpCmRhdGEgPSBhd2FpdCBwcm9jZXNzb3IucHJvY2Vzc19kYXRhKFt7J2lkJzogMX0sIHsnaWQnOiAyfV0pCiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DU1MgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgYW5kIGFuaW1hdGlvbnMuIE5vdGUgdGhlIHNob3J0ZXIgbGFuZ3VhZ2UgbGFiZWwuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImNzcyI+Ci8qIE1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyAqLwo6cm9vdCB7CiAgLS1wcmltYXJ5LWNvbG9yOiAjM2I4MmY2OwogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMTBiOTgxOwogIC0tYmFja2dyb3VuZDogI2ZmZmZmZjsKICAtLXRleHQtY29sb3I6ICMwOTA5MGI7CiAgLS1ib3JkZXItcmFkaXVzOiA2cHg7Cn0KCi5jYXJkIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIHBhZGRpbmc6IDI0cHg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgouY2FyZDpob3ZlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCkBrZXlmcmFtZXMgZmFkZUluIHsKICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9CiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SlNPTiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkpTT04gY29uZmlndXJhdGlvbiB3aXRoIHByb3BlciBmb3JtYXR0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqc29uIj4KewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMS4xMC43IiwKICAiZGVzY3JpcHRpb24iOiAiQSBjb21wcmVoZW5zaXZlIGNhdGFsb2cgb2Ygd2ViIGNvbXBvbmVudHMiLAogICJtYWluIjogImRpc3RfdHNfd2ViL2luZGV4LmpzIiwKICAidHlwZSI6ICJtb2R1bGUiLAogICJzY3JpcHRzIjogewogICAgImJ1aWxkIjogInRzYnVpbGQgdHNmb2xkZXJzIC0tYWxsb3dpbXBsaWNpdGFueSAmJiB0c2J1bmRsZSBlbGVtZW50IC0tcHJvZHVjdGlvbiIsCiAgICAid2F0Y2giOiAidHN3YXRjaCBlbGVtZW50IiwKICAgICJ0ZXN0IjogInRzdGVzdCB0ZXN0LyAtLXdlYiAtLXZlcmJvc2UiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjQ1IiwKICAgICJoaWdobGlnaHQuanMiOiAiXjExLjkuMCIKICB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guanMKdmFyIF9fZXNEZWNvcmF0ZTQ4LCBfX3J1bkluaXRpYWxpemVyczQ5LCBEZWVzRGF0YXZpZXdDb2RlYm94Owp2YXIgaW5pdF9kZWVzX2RhdGF2aWV3X2NvZGVib3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmpzIigpIHsKICAgIGluaXRfZGVlc19kYXRhdmlld19jb2RlYm94X2RlbW8oKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X2Rpc3RfdHMxMSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlNDggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM0OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0RhdGF2aWV3Q29kZWJveCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRhdGF2aWV3LWNvZGVib3giKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3Byb2dMYW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcHJvZ0xhbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ0xhbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3Byb2dMYW5nX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfY29kZVRvRGlzcGxheV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0OCh0aGlzLCBudWxsLCBfcHJvZ0xhbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicHJvZ0xhbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2dMYW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2dMYW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucHJvZ0xhbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Byb2dMYW5nX2luaXRpYWxpemVycywgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQ4KHRoaXMsIG51bGwsIF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvZGVUb0Rpc3BsYXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvZGVUb0Rpc3BsYXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29kZVRvRGlzcGxheSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvZGVUb0Rpc3BsYXkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvZGVUb0Rpc3BsYXlfaW5pdGlhbGl6ZXJzLCBfY29kZVRvRGlzcGxheV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0OChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzQ7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkRhdGEgVmlldyIsICJXb3Jrc3BhY2UiXTsKICAgICAgICAjcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX3Byb2dMYW5nX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKTsKICAgICAgICBnZXQgcHJvZ0xhbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHByb2dMYW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9wcm9nTGFuZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX2NvZGVUb0Rpc3BsYXlfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBjb2RlVG9EaXNwbGF5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvZGVUb0Rpc3BsYXkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2RlVG9EaXNwbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KICAgICAgICAubWFpbmJveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciAuZmlsZU5hbWUgewogICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbUJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5zcGFjZXNMYWJlbCB7CiAgICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5sYW5ndWFnZUxhYmVsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiKX07CiAgICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5obGpzLWtleXdvcmQgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgICAgfQoKICAgICAgICAuY29kZWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTBweCBhdXRvOwogICAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB9CgogICAgICAgIC5saW5lTnVtYmVycyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzUyNTI1YiIpfTsKICAgICAgICAgIHBhZGRpbmc6IDI0cHggMTZweCAwcHggMHB4OwogICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIH0KCiAgICAgICAgLmxpbmVDb3VudGVyOmxhc3QtY2hpbGQgewogICAgICAgICAgb3BhY2l0eTogNTAlOwogICAgICAgIH0KCiAgICAgICAgcHJlIHsKICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHggMjRweDsKICAgICAgICB9CgogICAgICAgIGNvZGUgewogICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIH0KCiAgICAgICAgY29kZSwKICAgICAgICBjb2RlICosCiAgICAgICAgLmxpbmVOdW1iZXJzIHsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7CiAgICAgICAgICBmb250LWZhbWlseTogJHtjc3NNb25vRm9udEZhbWlseX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1zdHJpbmcgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDU5NjY5IiwgIiMxMGI5ODEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4YjVjZjYiLCAiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWZ1bmN0aW9uIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtcGFyYW1zIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA4OTFiMiIsICIjMDZiNmQ0Iil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtY29tbWVudCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLW51bWJlciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlYTU4MGMiLCAiI2ZiOTIzYyIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWxpdGVyYWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1hdHRyIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzhiNWNmNiIsICIjYTc4YmZhIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtdmFyaWFibGUgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1haW5ib3giCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhldmVudEFyZykgPT4gewogICAgICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAiQWJvdXQiLAogICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJjaXJjbGVJbmZvIiwKICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0pOwogICAgICAgICAgfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZU51bWJlcnMiPgogICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICAgIGxldCBsaW5lQ291bnRlciA9IDA7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvZGVUb0Rpc3BsYXkuc3BsaXQoIlxuIikubWFwKChsaW5lQXJnKSA9PiB7CiAgICAgICAgICAgICAgbGluZUNvdW50ZXIrKzsKICAgICAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7bGluZUNvdW50ZXJ9PC9kaXY+YDsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cHJlPjxjb2RlPjwvY29kZT48L3ByZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2VzTGFiZWwiPlNwYWNlczogMjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2VMYWJlbCI+JHt0aGlzLnByb2dMYW5nfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGNvZGVUb0Rpc3BsYXlTdG9yZSA9IChfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgIiIpOwogICAgICAgIGhpZ2hsaWdodEpzID0gbnVsbDsKICAgICAgICBhc3luYyB1cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgY29uc29sZS5sb2coImhpZ2hsaWdodGluZyBub3ciKTsKICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7CiAgICAgICAgICBjb25zdCBzbG90dGVkQ29kZU5vZGVzID0gW107CiAgICAgICAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7CiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZU5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICAgICAgICBzbG90dGVkQ29kZU5vZGVzLnB1c2goY2hpbGROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodGhpcy5jb2RlVG9EaXNwbGF5ICYmIHRoaXMuY29kZVRvRGlzcGxheSAhPT0gdGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUpIHsKICAgICAgICAgICAgdGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUgPSBzbWFydHN0cmluZ19pbmRlbnRfZXhwb3J0cy5ub3JtYWxpemUodGhpcy5jb2RlVG9EaXNwbGF5KS50cmltU3RhcnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzbG90dGVkQ29kZU5vZGVzWzBdICYmIHNsb3R0ZWRDb2RlTm9kZXNbMF0ud2hvbGVUZXh0ICYmICF0aGlzLmNvZGVUb0Rpc3BsYXkpIHsKICAgICAgICAgICAgdGhpcy5jb2RlVG9EaXNwbGF5U3RvcmUgPSBzbWFydHN0cmluZ19pbmRlbnRfZXhwb3J0cy5ub3JtYWxpemUoc2xvdHRlZENvZGVOb2Rlc1swXS53aG9sZVRleHQpLnRyaW1TdGFydCgpOwogICAgICAgICAgICB0aGlzLmNvZGVUb0Rpc3BsYXkgPSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbG9jYWxDb2RlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJjb2RlIik7CiAgICAgICAgICBjb25zdCBoaWdobGlnaHRlZEh0bWwgPSB0aGlzLmhpZ2hsaWdodEpzLmhpZ2hsaWdodCh0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSwgewogICAgICAgICAgICBsYW5ndWFnZTogdGhpcy5wcm9nTGFuZywKICAgICAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgbG9jYWxDb2RlTm9kZS5pbm5lckhUTUwgPSBoaWdobGlnaHRlZEh0bWwudmFsdWU7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczQ5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2luZGV4LmpzCnZhciBpbml0X2RlZXNfZGF0YXZpZXdfY29kZWJveDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2RhdGF2aWV3X2NvZGVib3goKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8uanMKdmFyIGRlbW9GdW5jMzU7CnZhciBpbml0X2RlZXNfZGF0YXZpZXdfc3RhdHVzb2JqZWN0X2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdC9kZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMzMCgpOwogICAgZGVtb0Z1bmMzNSA9ICgpID0+IGIyYCA8c3R5bGU+CiAgICAuZGVtbyB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMwYTBhMGEiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBjb250ZW50OiAnJzsKICAgICAgcGFkZGluZzogNDBweDsKICAgIH0KICAgIAogICAgLmRlbW8tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdhcDogMjRweDsKICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CiAgICAKICAgIC5kZW1vLXNlY3Rpb24gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDE2cHg7CiAgICB9CiAgICAKICAgIC5kZW1vLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgIH0KICAgIAogICAgLmRlbW8tbm90ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8iPgogICAgPGRpdiBjbGFzcz0iZGVtby1ub3RlIj4KICAgICAgUmlnaHQtY2xpY2sgb24gYW55IGRldGFpbCByb3cgdG8gY29weSB0aGUgdmFsdWUsIGtleSwgb3Iga2V5OnZhbHVlIGNvbWJpbmF0aW9uCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+U2VydmljZSBIZWFsdGggU3RhdHVzPC9kaXY+CiAgICAgICAgPGRlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0CiAgICAgICAgICAuc3RhdHVzT2JqZWN0PSR7ewogICAgICBpZDogIjEiLAogICAgICBuYW1lOiAiQVBJIEdhdGV3YXkgU2VydmljZSIsCiAgICAgIGNvbWJpbmVkU3RhdHVzOiAib2siLAogICAgICBjb21iaW5lZFN0YXR1c1RleHQ6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgIGRldGFpbHM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgICAgICB2YWx1ZTogIjQ1bXMgKGF2ZykiLAogICAgICAgICAgc3RhdHVzOiAib2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBub3JtYWwgcmFuZ2UiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVXB0aW1lIiwKICAgICAgICAgIHZhbHVlOiAiOTkuOTklICgzMCBkYXlzKSIsCiAgICAgICAgICBzdGF0dXM6ICJvayIsCiAgICAgICAgICBzdGF0dXNUZXh0OiAiRXhjZWxsZW50IHVwdGltZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJBY3RpdmUgQ29ubmVjdGlvbnMiLAogICAgICAgICAgdmFsdWU6ICIxLDIzNCAvIDEwLDAwMCIsCiAgICAgICAgICBzdGF0dXM6ICJvayIsCiAgICAgICAgICBzdGF0dXNUZXh0OiAiTm9ybWFsIGxvYWQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU1NMIENlcnRpZmljYXRlIiwKICAgICAgICAgIHZhbHVlOiAiVmFsaWQgdW50aWwgMjAyNC0xMi0zMSIsCiAgICAgICAgICBzdGF0dXM6ICJvayIsCiAgICAgICAgICBzdGF0dXNUZXh0OiAiQ2VydGlmaWNhdGUgdmFsaWQiCiAgICAgICAgfQogICAgICBdCiAgICB9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+RGF0YWJhc2UgQ2x1c3RlciBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgICAgIGlkOiAiMiIsCiAgICAgIG5hbWU6ICJQb3N0Z3JlU1FMIENsdXN0ZXIiLAogICAgICBjb21iaW5lZFN0YXR1czogInBhcnRseV9vayIsCiAgICAgIGNvbWJpbmVkU3RhdHVzVGV4dDogIk1pbm9yIGlzc3VlcyBkZXRlY3RlZCIsCiAgICAgIGRldGFpbHM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJpbWFyeSBOb2RlIiwKICAgICAgICAgIHZhbHVlOiAiZGItcHJpbWFyeS0wMSAoaGVhbHRoeSkiLAogICAgICAgICAgc3RhdHVzOiAib2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIk9wZXJhdGluZyBub3JtYWxseSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJSZXBsaWNhIExhZyIsCiAgICAgICAgICB2YWx1ZTogIjIuNSBzZWNvbmRzIiwKICAgICAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgICAgICBzdGF0dXNUZXh0OiAiU2xpZ2h0bHkgZWxldmF0ZWQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRGlzayBVc2FnZSIsCiAgICAgICAgICB2YWx1ZTogIjc4JSAoMzEyR0IgLyA0MDBHQikiLAogICAgICAgICAgc3RhdHVzOiAicGFydGx5X29rIiwKICAgICAgICAgIHN0YXR1c1RleHQ6ICJBcHByb2FjaGluZyB0aHJlc2hvbGQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbiBQb29sIiwKICAgICAgICAgIHZhbHVlOiAiODkgLyAxMDAgY29ubmVjdGlvbnMiLAogICAgICAgICAgc3RhdHVzOiAib2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBsaW1pdHMiCiAgICAgICAgfQogICAgICBdCiAgICB9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+QnVpbGQgUGlwZWxpbmUgU3RhdHVzPC9kaXY+CiAgICAgICAgPGRlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0CiAgICAgICAgICAuc3RhdHVzT2JqZWN0PSR7ewogICAgICBpZDogIjMiLAogICAgICBuYW1lOiAiQ0kvQ0QgUGlwZWxpbmUiLAogICAgICBjb21iaW5lZFN0YXR1czogIm5vdF9vayIsCiAgICAgIGNvbWJpbmVkU3RhdHVzVGV4dDogIkJ1aWxkIGZhaWx1cmUiLAogICAgICBkZXRhaWxzOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkxhc3QgQnVpbGQiLAogICAgICAgICAgdmFsdWU6ICJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsCiAgICAgICAgICBzdGF0dXM6ICJub3Rfb2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIlRlc3QgZmFpbHVyZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRmFpbGVkIFRlc3RzIiwKICAgICAgICAgIHZhbHVlOiAiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsCiAgICAgICAgICBzdGF0dXM6ICJub3Rfb2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIlVuaXQgdGVzdCBmYWlsdXJlcyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb2RlIENvdmVyYWdlIiwKICAgICAgICAgIHZhbHVlOiAiODIuNSUgKHRhcmdldDogODUlKSIsCiAgICAgICAgICBzdGF0dXM6ICJwYXJ0bHlfb2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIkJlbG93IHRhcmdldCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJCdWlsZCBEdXJhdGlvbiIsCiAgICAgICAgICB2YWx1ZTogIjEybSAzNHMiLAogICAgICAgICAgc3RhdHVzOiAib2siLAogICAgICAgICAgc3RhdHVzVGV4dDogIk5vcm1hbCBkdXJhdGlvbiIKICAgICAgICB9CiAgICAgIF0KICAgIH19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+YDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmpzCnZhciBfX2VzRGVjb3JhdGU0OSwgX19ydW5Jbml0aWFsaXplcnM1MCwgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0Owp2YXIgaW5pdF9kZWVzX2RhdGF2aWV3X3N0YXR1c29iamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmpzIigpIHsKICAgIGluaXRfY29sb3JzKCk7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgICBpbml0X2RlZXNfZGF0YXZpZXdfc3RhdHVzb2JqZWN0X2RlbW8oKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMzMCgpOwogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU0OSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczUwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3N0YXR1c09iamVjdF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3N0YXR1c09iamVjdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0dXNPYmplY3RfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0OSh0aGlzLCBudWxsLCBfc3RhdHVzT2JqZWN0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1c09iamVjdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzT2JqZWN0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1c09iamVjdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN0YXR1c09iamVjdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzNTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiRGF0YSBWaWV3Il07CiAgICAgICAgI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICBnZXQgc3RhdHVzT2JqZWN0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3RhdHVzT2JqZWN0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwIGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAxcHggMnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ4cHggYXV0byAxMDBweDsKICAgICAgICBoZWlnaHQ6IDU2cHg7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIGgxIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuc3RhdHVzZG90IHsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklIC8gMC4yKSIsICJoc2woMCAwJSA0NS4xJSAvIDAuMikiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmNvcHlNYWluIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmNvcHlNYWluOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CgogICAgICAuc3RhdHVzZG90Lm9rIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4yKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAuc3RhdHVzZG90Lm5vdF9vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSAvIDAuMikiLCAiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAuc3RhdHVzZG90LnBhcnRseV9vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMikiLCAiaHNsKDI1IDk1JSA2MyUgLyAwLjIpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIHsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ4cHggYXV0bzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIGN1cnNvcjogY29udGV4dC1tZW51OwogICAgICB9CgogICAgICAuZGV0YWlsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgIH0KCiAgICAgIC5kZXRhaWw6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgfQoKICAgICAgLmRldGFpbCAuZGV0YWlsc1RleHQgLmxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX0KICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IC52YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzZG90ICR7dGhpcy5zdGF0dXNPYmplY3Q/LmNvbWJpbmVkU3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICA8aDE+JHt0aGlzLnN0YXR1c09iamVjdD8ubmFtZSB8fCAiTm8gc3RhdHVzIG9iamVjdCBhc3NpZ25lZCJ9PC9oMT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvcHlNYWluIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvcHlBc0pzb259PkNvcHkgSlNPTjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zdGF0dXNPYmplY3Q/LmRldGFpbHM/Lm1hcCgoZGV0YWlsQXJnKSA9PiB7CiAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldmVudCkgPT4gewogICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJDb3B5IFZhbHVlIiwKICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGRldGFpbEFyZy52YWx1ZSwgIlZhbHVlIik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleSIsCiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmtleSIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGRldGFpbEFyZy5uYW1lLCAiS2V5Iik7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleTpWYWx1ZSIsCiAgICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHktcGx1cyIsCiAgICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2RldGFpbEFyZy5uYW1lfTogJHtkZXRhaWxBcmcudmFsdWV9YCwgIktleTpWYWx1ZSIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH19CiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0dXNkb3QgJHtkZXRhaWxBcmcuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsc1RleHQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPiR7ZGV0YWlsQXJnLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+JHtkZXRhaWxBcmcudmFsdWV9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDsKICAgICAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKHRleHQ5LCB0eXBlNSA9ICJUZXh0IikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dDkpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0eXBlNX0gY29waWVkIHRvIGNsaXBib2FyZGApOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjb3B5ICR7dHlwZTV9OmAsIGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUNvcHlBc0pzb24oKSB7CiAgICAgICAgICBpZiAoIXRoaXMuc3RhdHVzT2JqZWN0KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCwgbnVsbCwgMikpOwogICAgICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvcHlNYWluIik7CiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGJ1dHRvbi50ZXh0Q29udGVudDsKICAgICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgICAgICBjb25zdCBpc0RhcmsgPSAhdGhpcy5nb0JyaWdodDsKICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmQgPSBpc0RhcmsgPyAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIgOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSI7CiAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXJDb2xvciA9IGlzRGFyayA/ICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiA6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIjsKICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gaXNEYXJrID8gImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiIDogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmQgPSAiIjsKICAgICAgICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyQ29sb3IgPSAiIjsKICAgICAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAiIjsKICAgICAgICAgICAgfSwgMTUwMCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IiwgZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfc3RhdHVzT2JqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2luZGV4LmpzCnZhciBpbml0X2RlZXNfZGF0YXZpZXdfc3RhdHVzb2JqZWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19kYXRhdmlld19zdGF0dXNvYmplY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtc3RhdHNncmlkL2luZGV4LmpzCnZhciBpbml0X2RlZXNfc3RhdHNncmlkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtc3RhdHNncmlkL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zdGF0c2dyaWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2luZGV4LmpzCnZhciBpbml0X2dyb3VwX2RhdGF2aWV3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2RhdGF2aWV3X2NvZGVib3gyKCk7CiAgICBpbml0X2RlZXNfZGF0YXZpZXdfc3RhdHVzb2JqZWN0MigpOwogICAgaW5pdF9kZWVzX3RhYmxlMigpOwogICAgaW5pdF9kZWVzX3N0YXRzZ3JpZDIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtYWN0aW9uYmFyL2RlZXMtYWN0aW9uYmFyLmpzCnZhciBfX2VzRGVjb3JhdGU1MCwgX19ydW5Jbml0aWFsaXplcnM1MSwgRGVlc0FjdGlvbmJhcjsKdmFyIGluaXRfZGVlc19hY3Rpb25iYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWFjdGlvbmJhci9kZWVzLWFjdGlvbmJhci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIF9fZXNEZWNvcmF0ZTUwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBY3Rpb25iYXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hY3Rpb25iYXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2N1cnJlbnRCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50QmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGltZVJlbWFpbmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzVmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBY3Rpb25iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY3VycmVudEJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3RpbWVSZW1haW5pbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wcm9ncmVzc1BlcmNlbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUwKHRoaXMsIG51bGwsIF9jdXJyZW50QmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRCYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRCYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmN1cnJlbnRCYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBfY3VycmVudEJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfdGltZVJlbWFpbmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aW1lUmVtYWluaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lUmVtYWluaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbWVSZW1haW5pbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50aW1lUmVtYWluaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgX3RpbWVSZW1haW5pbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX3Byb2dyZXNzUGVyY2VudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcm9ncmVzc1BlcmNlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2dyZXNzUGVyY2VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9ncmVzc1BlcmNlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wcm9ncmVzc1BlcmNlbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Byb2dyZXNzUGVyY2VudF9pbml0aWFsaXplcnMsIF9wcm9ncmVzc1BlcmNlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX2lzVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc1Zpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FjdGlvbmJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZlZWRiYWNrIiwgIk92ZXJsYXkiXTsKICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGdldEFjdGlvbmJhciA9IChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZTExLmN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5jbG9zZXN0KCIuZGVtby1jb250YWluZXIiKTsKICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcigiZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93QWN0aW9uQmFyID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb25iYXIgPSBnZXRBY3Rpb25iYXIoZTExKTsKICAgICAgICAgICAgaWYgKCFhY3Rpb25iYXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb25iYXIuc2hvdyh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIkZpbGUgY2hhbmdlZCBleHRlcm5hbGx5LiBSZWxvYWQ/IiwKICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTphbGVydFRyaWFuZ2xlIiwKICAgICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgICB7IGlkOiAicmVsb2FkIiwgbGFiZWw6ICJSZWxvYWQiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiaWdub3JlIiwgbGFiZWw6ICJJZ25vcmUiIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRpbWVvdXQ6IHsgZHVyYXRpb246IDVlMywgZGVmYXVsdEFjdGlvbklkOiAicmVsb2FkIiB9LAogICAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiQWN0aW9uIGJhciByZXN1bHQ6IiwgcmVzdWx0KTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93RXJyb3JCYXIgPSBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbmJhciA9IGdldEFjdGlvbmJhcihlMTEpOwogICAgICAgICAgICBpZiAoIWFjdGlvbmJhcikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbmJhci5zaG93KHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiUHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSIsCiAgICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOnhDaXJjbGUiLAogICAgICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgICAgIHsgaWQ6ICJyZXRyeSIsIGxhYmVsOiAiUmV0cnkiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzbWlzcyIsIGxhYmVsOiAiRGlzbWlzcyIgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgdGltZW91dDogeyBkdXJhdGlvbjogMWU0LCBkZWZhdWx0QWN0aW9uSWQ6ICJkaXNtaXNzIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiRXJyb3IgYmFyIHJlc3VsdDoiLCByZXN1bHQpOwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHNob3dRdWVzdGlvbkJhciA9IGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYWN0aW9uYmFyID0gZ2V0QWN0aW9uYmFyKGUxMSk7CiAgICAgICAgICAgIGlmICghYWN0aW9uYmFyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uYmFyLnNob3coewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJTYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3Npbmc/IiwKICAgICAgICAgICAgICB0eXBlOiAicXVlc3Rpb24iLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6aGVscENpcmNsZSIsCiAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgeyBpZDogInNhdmUiLCBsYWJlbDogIlNhdmUiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzY2FyZCIsIGxhYmVsOiAiRGlzY2FyZCIgfSwKICAgICAgICAgICAgICAgIHsgaWQ6ICJjYW5jZWwiLCBsYWJlbDogIkNhbmNlbCIgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJRdWVzdGlvbiBiYXIgcmVzdWx0OiIsIHJlc3VsdCk7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAuZGVtby1jb250ZW50IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250ZW50Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93QWN0aW9uQmFyfT5XYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93RXJyb3JCYXJ9PkVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93UXVlc3Rpb25CYXJ9PlF1ZXN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH07CiAgICAgICAgLy8gUXVldWUgb2YgcGVuZGluZyBhY3Rpb24gYmFycwogICAgICAgIHF1ZXVlID0gW107CiAgICAgICAgI2N1cnJlbnRCYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvLyBDdXJyZW50IGFjdGl2ZSBiYXIgc3RhdGUKICAgICAgICBnZXQgY3VycmVudEJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50QmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50QmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VycmVudEJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGltZVJlbWFpbmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCB0aW1lUmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RpbWVSZW1haW5pbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRpbWVSZW1haW5pbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aW1lUmVtYWluaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycywgMTAwKSk7CiAgICAgICAgZ2V0IHByb2dyZXNzUGVyY2VudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHByb2dyZXNzUGVyY2VudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Byb2dyZXNzUGVyY2VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNWaXNpYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRpbWVvdXQgaGFuZGxpbmcKICAgICAgICB0aW1lb3V0SW50ZXJ2YWwgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25iYXItaXRlbSB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgMC4ycyBlYXNlLW91dDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1pdGVtIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgfQoKICAgICAgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC52aXNpYmxlKSAuYWN0aW9uYmFyLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE4JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMgbGluZWFyOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNTAlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwucXVlc3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjcwIDcwJSA1MCUpIiwgImhzbCgyNzAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLXNlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uaW5mbyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbi53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ucXVlc3Rpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDg1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuYWN0aW9ucy1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3MCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTIlKSIsICJoc2woMCAwJSAxOCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDU1JSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDAlKSIsICJoc2woMzggOTIlIDQ1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5lcnJvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwgImhzbCgwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNDUlKSIsICJoc2woMjcwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuY291bnRkb3duIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5kaXNtaXNzLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDIyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGJhciA9IHRoaXMuY3VycmVudEJhcjsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyPy50eXBlIHx8ICJpbmZvIjsKICAgICAgICAgIGNvbnN0IGhhc1RpbWVvdXQgPSBiYXI/LnRpbWVvdXQgJiYgdGhpcy50aW1lUmVtYWluaW5nID4gMDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uYmFyLWl0ZW0iPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1jb250ZW50Ij4KICAgICAgICAgICR7YmFyID8gYjJgCiAgICAgICAgICAgICR7aGFzVGltZW91dCA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9ncmVzcy1iYXItZmlsbCAke3R5cGU1fSIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMucHJvZ3Jlc3NQZXJjZW50fSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICR7YmFyLmljb24gPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtZXNzYWdlLWljb24gJHt0eXBlNX0iCiAgICAgICAgICAgICAgICAgICAgLmljb249JHtiYXIuaWNvbn0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTYiCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXNzYWdlLXRleHQiPiR7YmFyLm1lc3NhZ2V9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnMtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke2Jhci5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnJlbmRlckFjdGlvbkJ1dHRvbihhY3Rpb24sIGJhciwgaGFzVGltZW91dCkpfQogICAgICAgICAgICAgICAgJHtiYXIuZGlzbWlzc2libGUgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNtaXNzLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURpc21pc3MoKX0KICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRGlzbWlzcyIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyQWN0aW9uQnV0dG9uKGFjdGlvbiwgYmFyLCBoYXNUaW1lb3V0KSB7CiAgICAgICAgICBjb25zdCBpc1ByaW1hcnkgPSBhY3Rpb24ucHJpbWFyeTsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyLnR5cGUgfHwgImluZm8iOwogICAgICAgICAgY29uc3QgaXNEZWZhdWx0QWN0aW9uID0gYmFyLnRpbWVvdXQ/LmRlZmF1bHRBY3Rpb25JZCA9PT0gYWN0aW9uLmlkOwogICAgICAgICAgY29uc3Qgc2hvd0NvdW50ZG93biA9IGhhc1RpbWVvdXQgJiYgaXNEZWZhdWx0QWN0aW9uOwogICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguY2VpbCh0aGlzLnRpbWVSZW1haW5pbmcgLyAxZTMpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgY2xhc3M9ImFjdGlvbi1idXR0b24gJHtpc1ByaW1hcnkgPyBgcHJpbWFyeSAke3R5cGU1fWAgOiAic2Vjb25kYXJ5In0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLmlkLCBmYWxzZSl9CiAgICAgID4KICAgICAgICAke2FjdGlvbi5pY29uID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YWN0aW9uLmljb259IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuPiR7YWN0aW9uLmxhYmVsfTwvc3Bhbj4KICAgICAgICAke3Nob3dDb3VudGRvd24gPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudGRvd24iPigke3NlY29uZHN9cyk8L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2J1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHVibGljIEFQSSA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhbiBhY3Rpb24gYmFyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuCiAgICAgICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFuIGFjdGlvbiBpcyB0YWtlbi4KICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93KG9wdGlvbnMpIHsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHsgb3B0aW9ucywgcmVzb2x2ZTogcmVzb2x2ZTIgfSk7CiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50QmFyKSB7CiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIERpc21pc3MgdGhlIGN1cnJlbnQgYWN0aW9uIGJhciB3aXRob3V0IHRyaWdnZXJpbmcgYW55IGFjdGlvbi4KICAgICAgICAgKi8KICAgICAgICBkaXNtaXNzKCkgewogICAgICAgICAgdGhpcy5oYW5kbGVEaXNtaXNzKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsZWFyIGFsbCBwZW5kaW5nIGFjdGlvbiBiYXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBjbGVhclF1ZXVlKCkgewogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucXVldWUpIHsKICAgICAgICAgICAgaXRlbS5yZXNvbHZlKHsgYWN0aW9uSWQ6ICJkaXNtaXNzZWQiLCB0aW1lZE91dDogZmFsc2UgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnF1ZXVlID0gW107CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHJpdmF0ZSBNZXRob2RzID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBIaWRlIHRoZSBjdXJyZW50IGFjdGlvbmJhciB3aXRoIGFuaW1hdGlvbi4KICAgICAgICAgKiBSZW1vdmVzIHZpc2libGUgY2xhc3MgZmlyc3QgdG8gdHJpZ2dlciBDU1MgdHJhbnNpdGlvbiwgdGhlbiBjbGVhcnMgY29udGVudCBhZnRlciBhbmltYXRpb24uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgaGlkZUN1cnJlbnRCYXIoKSB7CiAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInZpc2libGUiKTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDIyMCkpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gbnVsbDsKICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBhc3luYyBwcm9jZXNzUXVldWUoKSB7CiAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5oaWRlQ3VycmVudEJhcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gaXRlbS5vcHRpb25zOwogICAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x2ZSA9IGl0ZW0ucmVzb2x2ZTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoInZpc2libGUiKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucy50aW1lb3V0KSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lb3V0KGl0ZW0ub3B0aW9ucy50aW1lb3V0LmR1cmF0aW9uLCBpdGVtLm9wdGlvbnMudGltZW91dC5kZWZhdWx0QWN0aW9uSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGFydFRpbWVvdXQoZHVyYXRpb24sIGRlZmF1bHRBY3Rpb25JZCkgewogICAgICAgICAgdGhpcy50aW1lUmVtYWluaW5nID0gZHVyYXRpb247CiAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDEwMDsKICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCB1cGRhdGVJbnRlcnZhbCA9IDUwOwogICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICB0aGlzLnRpbWVSZW1haW5pbmcgPSBNYXRoLm1heCgwLCBkdXJhdGlvbiAtIGVsYXBzZWQpOwogICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IHRoaXMudGltZVJlbWFpbmluZyAvIGR1cmF0aW9uICogMTAwOwogICAgICAgICAgICBpZiAodGhpcy50aW1lUmVtYWluaW5nIDw9IDApIHsKICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oZGVmYXVsdEFjdGlvbklkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdXBkYXRlSW50ZXJ2YWwpOwogICAgICAgIH0KICAgICAgICBjbGVhclRpbWVvdXRJbnRlcnZhbCgpIHsKICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRJbnRlcnZhbCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZW91dEludGVydmFsKTsKICAgICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVBY3Rpb24oYWN0aW9uSWQsIHRpbWVkT3V0KSB7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVzb2x2ZSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHZlKHsgYWN0aW9uSWQsIHRpbWVkT3V0IH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRGlzbWlzcygpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKCJkaXNtaXNzZWQiLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBY3Rpb25iYXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWFjdGlvbmJhci9hY3Rpb25iYXIuaW50ZXJmYWNlcy5qcwp2YXIgaW5pdF9hY3Rpb25iYXJfaW50ZXJmYWNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtYWN0aW9uYmFyL2FjdGlvbmJhci5pbnRlcmZhY2VzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtYWN0aW9uYmFyL2luZGV4LmpzCnZhciBpbml0X2RlZXNfYWN0aW9uYmFyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtYWN0aW9uYmFyL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19hY3Rpb25iYXIoKTsKICAgIGluaXRfYWN0aW9uYmFyX2ludGVyZmFjZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtYmFkZ2UvZGVlcy1iYWRnZS5kZW1vLmpzCnZhciBkZW1vRnVuYzM2Owp2YXIgaW5pdF9kZWVzX2JhZGdlX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmMzNiA9ICgpID0+IGIyYAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0ke3RydWV9IC50ZXh0PSR7IlJvdW5kZWQifT48L2RlZXMtYmFkZ2U+CiAgPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuanMKdmFyIF9fZXNEZWNvcmF0ZTUxLCBfX3J1bkluaXRpYWxpemVyczUyLCBEZWVzQmFkZ2U7CnZhciBpbml0X2RlZXNfYmFkZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfYmFkZ2VfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNTEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0JhZGdlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYmFkZ2UiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm91bmRlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3JvdW5kZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm91bmRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0JhZGdlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9yb3VuZGVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF90eXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInR5cGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfdGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3JvdW5kZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm91bmRlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm91bmRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb3VuZGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucm91bmRlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcm91bmRlZF9pbml0aWFsaXplcnMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNCYWRnZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM2OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJGZWVkYmFjayJdOwogICAgICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImRlZmF1bHQiKTsKICAgICAgICBnZXQgdHlwZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90ZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgdGV4dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9yb3VuZGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgcm91bmRlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyb3VuZGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCByb3VuZGVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQgPyAicm91bmRlZCIgOiAiIn0iPgogICAgICAgICR7dGhpcy50ZXh0fQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQmFkZ2UyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWJhZGdlL2luZGV4LmpzCnZhciBpbml0X2RlZXNfYmFkZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1iYWRnZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfYmFkZ2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtaGludC9kZWVzLWhpbnQuZGVtby5qcwp2YXIgZGVtb0Z1bmMzNzsKdmFyIGluaXRfZGVlc19oaW50X2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jMzcgPSAoKSA9PiBiMmAKICA8ZGVlcy1oaW50PjwvZGVlcy1oaW50PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1oaW50L2RlZXMtaGludC5qcwp2YXIgX19lc0RlY29yYXRlNTIsIF9fcnVuSW5pdGlhbGl6ZXJzNTMsIERlZXNIaW50Owp2YXIgaW5pdF9kZWVzX2hpbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLWhpbnQvZGVlcy1oaW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF9kZWVzX2hpbnRfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNTIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0hpbnQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oaW50IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSGludDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNTIodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNIaW50MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzc7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZlZWRiYWNrIl07CiAgICAgICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiaW5mbyIpOwogICAgICAgIGdldCB0eXBlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFt0aGVtZURlZmF1bHRTdHlsZXMsIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAgPGRpdiBjbGFzcz0ibWFpbmJveCI+PC9kaXY+IGA7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSGludDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtaGludC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2hpbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1oaW50L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19oaW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXByb2dyZXNzYmFyL2RlZXMtcHJvZ3Jlc3NiYXIuZGVtby5qcwp2YXIgZGVtb0Z1bmMzODsKdmFyIGluaXRfZGVlc19wcm9ncmVzc2Jhcl9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1wcm9ncmVzc2Jhci9kZWVzLXByb2dyZXNzYmFyLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19wcm9ncmVzc2JhcigpOwogICAgZGVtb0Z1bmMzOCA9ICgpID0+IHsKICAgICAgcmV0dXJuIGIyYAogICAgPGRlZXMtcHJvZ3Jlc3NiYXIKICAgICAgLnBlcmNlbnRhZ2U9JHs1MH0KICAgID48L2RlZXMtcHJvZ3Jlc3NiYXI+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXByb2dyZXNzYmFyL2RlZXMtcHJvZ3Jlc3NiYXIuanMKdmFyIF9fZXNEZWNvcmF0ZTUzLCBfX3J1bkluaXRpYWxpemVyczU0LCBEZWVzUHJvZ3Jlc3NiYXI7CnZhciBpbml0X2RlZXNfcHJvZ3Jlc3NiYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXByb2dyZXNzYmFyL2RlZXMtcHJvZ3Jlc3NiYXIuanMiKCkgewogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgaW5pdF9jb2xvcnMoKTsKICAgIGluaXRfZGVlc19wcm9ncmVzc2Jhcl9kZW1vKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTUzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNQcm9ncmVzc2JhciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXByb2dyZXNzYmFyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9wZXJjZW50YWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGVyY2VudGFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzUHJvZ3Jlc3NiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfcGVyY2VudGFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfcGVyY2VudGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZXJjZW50YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwZXJjZW50YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBlcmNlbnRhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wZXJjZW50YWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wZXJjZW50YWdlX2luaXRpYWxpemVycywgX3BlcmNlbnRhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1Byb2dyZXNzYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzg7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZlZWRiYWNrIl07CiAgICAgICAgI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3BlcmNlbnRhZ2VfaW5pdGlhbGl6ZXJzLCAwKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBwZXJjZW50YWdlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBlcmNlbnRhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwZXJjZW50YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKGJyaWdodC50ZXh0LCBkYXJrLnRleHQpfTsKICAgICAgfQogICAgICAucHJvZ3Jlc3NCYXJDb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiM0NDQiKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJvcmRlci10b3A6IDAuNXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJub25lIiwgIiM1NTUiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzc0JhckZpbGwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKGRhcmsuYmx1ZUFjdGl2ZSwgYnJpZ2h0LmJsdWVBY3RpdmUpfTsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMC41cHg7CiAgICAgICAgdHJhbnNpdGlvbjogMC4ycyB3aWR0aDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgd2lkdGg6IDBweDsKICAgICAgICBib3JkZXItdG9wOiAwLjUgc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIm5vbmUiLCAiIzM5OGZmZiIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzVGV4dCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc0JhckNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJGaWxsIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzVGV4dCI+CiAgICAgICAgICAgICR7dGhpcy5wZXJjZW50YWdlfSUKICAgICAgICAgIDxkaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcmNlbnRhZ2UoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVQZXJjZW50YWdlKCkgewogICAgICAgICAgY29uc3QgcHJvZ3Jlc3NCYXJGaWxsID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5wcm9ncmVzc0JhckZpbGwiKTsKICAgICAgICAgIHByb2dyZXNzQmFyRmlsbC5zdHlsZS53aWR0aCA9IGAke3RoaXMucGVyY2VudGFnZX0lYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNQcm9ncmVzc2JhcjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtcHJvZ3Jlc3NiYXIvaW5kZXguanMKdmFyIGluaXRfZGVlc19wcm9ncmVzc2JhcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXByb2dyZXNzYmFyL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19wcm9ncmVzc2JhcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy1zcGlubmVyL2RlZXMtc3Bpbm5lci5qcwp2YXIgX19lc0RlY29yYXRlNTQsIF9fcnVuSW5pdGlhbGl6ZXJzNTUsIERlZXNTcGlubmVyOwp2YXIgaW5pdF9kZWVzX3NwaW5uZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXNwaW5uZXIvZGVlcy1zcGlubmVyLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1NwaW5uZXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zcGlubmVyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYm53X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYm53X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Jud19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogICAgICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNTcGlubmVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IE51bWJlcgogICAgICAgICAgfSldOwogICAgICAgICAgX2Jud19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX2Jud19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJibnciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJudyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ibncsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5ibncgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jud19pbml0aWFsaXplcnMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX3N0YXR1c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGF0dXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXR1cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zdGF0dXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zdGF0dXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1NwaW5uZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJGZWVkYmFjayJdOwogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1zcGlubmVyPjwvZGVlcy1zcGlubmVyPgogICAgPGRlZXMtc3Bpbm5lciBzdGF0dXM9InN1Y2Nlc3MiPjwvZGVlcy1zcGlubmVyPgogICAgPGRlZXMtc3Bpbm5lciBzdGF0dXM9ImVycm9yIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc2l6ZT0kezY0fSBzdGF0dXM9InN1Y2Nlc3MiPjwvZGVlcy1zcGlubmVyPgogICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezY0fSBzdGF0dXM9ImVycm9yIj48L2RlZXMtc3Bpbm5lcj4KICBgOwogICAgICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjApOwogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNibndfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfYm53X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgYm53KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Jud19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYm53KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYm53X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCAibm9ybWFsIikpOwogICAgICAgIGdldCBzdGF0dXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgI2xvYWRpbmcgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICM4YmMzNGEwMDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBub25lOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBub25lOwogICAgICB9CgogICAgICAjbG9hZGluZy5lcnJvciB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAjbG9hZGluZyB7CiAgICAgICAgICB3aWR0aDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgICAjbG9hZGluZy5zdWNjZXNzIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSh0aGlzLmJudyA/ICIjMzMzIiA6IGAjOGJjMzRhYCwgdGhpcy5ibncgPyAiI2ZmZiIgOiBgIzhiYzM0YWApfTsKICAgICAgICAgIAogICAgICAgIH0KICAgICAgICAjbG9hZGluZy5lcnJvciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUodGhpcy5ibncgPyAiIzMzMyIgOiBgI2U2NGExOWAsIHRoaXMuYm53ID8gIiNmZmYiIDogYCNlNjRhMTlgKX07CiAgICAgICAgfQogICAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgICBmb250LXNpemU6ICR7dGhpcy5zaXplfXB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iJHt0aGlzLnN0YXR1c30iIGlkPSJsb2FkaW5nIj4KICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gInN1Y2Nlc3MiKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSAiZXJyb3IiKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gLmljb249JHsiZmE6Y2lyY2xlLXhtYXJrIn0+PC9kZWVzLWljb24+YDsKICAgICAgICAgICAgfQogICAgICAgICAgfSkoKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM1NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1NwaW5uZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXNwaW5uZXIvaW5kZXguanMKdmFyIGluaXRfZGVlc19zcGlubmVyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtc3Bpbm5lci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfc3Bpbm5lcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy10b2FzdC9kZWVzLXRvYXN0LmRlbW8uanMKdmFyIGRlbW9GdW5jMzk7CnZhciBpbml0X2RlZXNfdG9hc3RfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2RlZXMtdG9hc3QvZGVlcy10b2FzdC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfdG9hc3QoKTsKICAgIGluaXRfZGVlc19idXR0b24oKTsKICAgIGRlbW9GdW5jMzkgPSAoKSA9PiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7CiAgICAgIH0KCiAgICAgIC5kZW1vLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICB9CgogICAgICAuZGVtby1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjYWFhIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQoKICAgICAgLnRoZW1lLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMTZweDsKICAgICAgICByaWdodDogMTZweDsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgICB9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LmluZm8oIlRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIik7CiAgICB9fT5JbmZvIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LnN1Y2Nlc3MoIk9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgfX0+U3VjY2VzcyBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0Lndhcm5pbmcoIlBsZWFzZSByZXZpZXcgYmVmb3JlIHByb2NlZWRpbmciKTsKICAgIH19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5lcnJvcigiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyIpOwogICAgfX0+RXJyb3IgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Ub2FzdCBQb3NpdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFRvYXN0cyBjYW4gYXBwZWFyIGluIGRpZmZlcmVudCBwb3NpdGlvbnMgb24gdGhlIHNjcmVlbi4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogIlRvcCBSaWdodCBQb3NpdGlvbiIsCiAgICAgICAgdHlwZTogImluZm8iLAogICAgICAgIHBvc2l0aW9uOiAidG9wLXJpZ2h0IgogICAgICB9KTsKICAgIH19PlRvcCBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LnNob3coewogICAgICAgIG1lc3NhZ2U6ICJUb3AgTGVmdCBQb3NpdGlvbiIsCiAgICAgICAgdHlwZTogImluZm8iLAogICAgICAgIHBvc2l0aW9uOiAidG9wLWxlZnQiCiAgICAgIH0pOwogICAgfX0+VG9wIExlZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5zaG93KHsKICAgICAgICBtZXNzYWdlOiAiQm90dG9tIFJpZ2h0IFBvc2l0aW9uIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgcG9zaXRpb246ICJib3R0b20tcmlnaHQiCiAgICAgIH0pOwogICAgfX0+Qm90dG9tIFJpZ2h0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogIkJvdHRvbSBMZWZ0IFBvc2l0aW9uIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgcG9zaXRpb246ICJib3R0b20tbGVmdCIKICAgICAgfSk7CiAgICB9fT5Cb3R0b20gTGVmdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LnNob3coewogICAgICAgIG1lc3NhZ2U6ICJUb3AgQ2VudGVyIFBvc2l0aW9uIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgcG9zaXRpb246ICJ0b3AtY2VudGVyIgogICAgICB9KTsKICAgIH19PlRvcCBDZW50ZXI8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5zaG93KHsKICAgICAgICBtZXNzYWdlOiAiQm90dG9tIENlbnRlciBQb3NpdGlvbiIsCiAgICAgICAgdHlwZTogImluZm8iLAogICAgICAgIHBvc2l0aW9uOiAiYm90dG9tLWNlbnRlciIKICAgICAgfSk7CiAgICB9fT5Cb3R0b20gQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+RHVyYXRpb24gT3B0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ29udHJvbCBob3cgbG9uZyB0b2FzdHMgc3RheSB2aXNpYmxlLiBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LnNob3coewogICAgICAgIG1lc3NhZ2U6ICJRdWljayB0b2FzdCAoMSBzZWNvbmQpIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgZHVyYXRpb246IDFlMwogICAgICB9KTsKICAgIH19PjEgU2Vjb25kPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogIlN0YW5kYXJkIHRvYXN0ICgzIHNlY29uZHMpIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgZHVyYXRpb246IDNlMwogICAgICB9KTsKICAgIH19PjMgU2Vjb25kcyAoRGVmYXVsdCk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5zaG93KHsKICAgICAgICBtZXNzYWdlOiAiTG9uZyB0b2FzdCAoNSBzZWNvbmRzKSIsCiAgICAgICAgdHlwZTogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiA1ZTMKICAgICAgfSk7CiAgICB9fT41IFNlY29uZHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5zaG93KHsKICAgICAgICBtZXNzYWdlOiAiTWFudWFsIGRpc21pc3Mgb25seSAoY2xpY2sgdG8gY2xvc2UpIiwKICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgZHVyYXRpb246IDAKICAgICAgfSk7CiAgICB9fT5ObyBBdXRvLURpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5NdWx0aXBsZSBUb2FzdHM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIE11bHRpcGxlIHRvYXN0cyBzdGFjayBhdXRvbWF0aWNhbGx5LiBUaGV5IG1haW50YWluIHRoZWlyIG9yZGVyIGFuZCBhbmltYXRlIHNtb290aGx5LgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIERlZXNUb2FzdC5pbmZvKCJGaXJzdCBub3RpZmljYXRpb24iKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU2Vjb25kIG5vdGlmaWNhdGlvbiIpLCAyMDApOwogICAgICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC53YXJuaW5nKCJUaGlyZCBub3RpZmljYXRpb24iKSwgNDAwKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSwgNjAwKTsKICAgIH19PlNob3cgTXVsdGlwbGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSA1OyBpMTErKykgewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgRGVlc1RvYXN0LnNob3coewogICAgICAgICAgICBtZXNzYWdlOiBgTm90aWZpY2F0aW9uICMke2kxMX1gLAogICAgICAgICAgICB0eXBlOiBpMTEgJSAyID09PSAwID8gInN1Y2Nlc3MiIDogImluZm8iLAogICAgICAgICAgICBkdXJhdGlvbjogMmUzICsgaTExICogNTAwCiAgICAgICAgICB9KTsKICAgICAgICB9LCBpMTEgKiAxMDApOwogICAgICB9CiAgICB9fT5SYXBpZCBGaXJlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UmVhbC1Xb3JsZCBFeGFtcGxlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ29tbW9uIHVzZSBjYXNlcyBmb3IgdG9hc3Qgbm90aWZpY2F0aW9ucyBpbiBhcHBsaWNhdGlvbnMuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0ke2FzeW5jICgpID0+IHsKICAgICAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogIlNhdmluZyBjaGFuZ2VzLi4uIiwKICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgZHVyYXRpb246IDAKICAgICAgfSk7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRvYXN0LmRpc21pc3MoKTsKICAgICAgICBEZWVzVG9hc3Quc3VjY2VzcygiQ2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHkhIik7CiAgICAgIH0sIDJlMyk7CiAgICB9fT5TYXZlIE9wZXJhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICAgICAgRGVlc1RvYXN0LmVycm9yKCJGYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXIuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uIik7CiAgICB9fT5OZXR3b3JrIEVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3Qud2FybmluZygiWW91ciBzZXNzaW9uIHdpbGwgZXhwaXJlIGluIDUgbWludXRlcyIpOwogICAgfX0+U2Vzc2lvbiBXYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3Quc3VjY2VzcygiRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhIik7CiAgICB9fT5VcGxvYWQgQ29tcGxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Qcm9ncmFtbWF0aWMgQ29udHJvbDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQWR2YW5jZWQgY29udHJvbCBvdmVyIHRvYXN0IGJlaGF2aW9yLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgICAgIGNvbnN0IHRvYXN0ID0gYXdhaXQgRGVlc1RvYXN0LnNob3coewogICAgICAgIG1lc3NhZ2U6ICJUaGlzIHRvYXN0IGNhbiBiZSBkaXNtaXNzZWQgcHJvZ3JhbW1hdGljYWxseSIsCiAgICAgICAgdHlwZTogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiAwCiAgICAgIH0pOwogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0b2FzdC5kaXNtaXNzKCk7CiAgICAgICAgRGVlc1RvYXN0LnN1Y2Nlc3MoIlRvYXN0IGRpc21pc3NlZCBhZnRlciAyIHNlY29uZHMiKTsKICAgICAgfSwgMmUzKTsKICAgIH19PlByb2dyYW1tYXRpYyBEaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogICAgICBEZWVzVG9hc3QuaW5mbygiSW5mbyBtZXNzYWdlIiwgMmUzKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwgMmUzKSwgNTAwKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Qud2FybmluZygiV2FybmluZyBtZXNzYWdlIiwgMmUzKSwgMWUzKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkVycm9yIG1lc3NhZ2UiLCAyZTMpLCAxNTAwKTsKICAgIH19PkNvbnZlbmllbmNlIE1ldGhvZHM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuanMKdmFyIF9fZXNEZWNvcmF0ZTU1LCBfX3J1bkluaXRpYWxpemVyczU2LCBEZWVzVG9hc3Q7CnZhciBpbml0X2RlZXNfdG9hc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X3ppbmRleCgpOwogICAgaW5pdF9kZWVzX3RvYXN0X2RlbW8oKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTU1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNUb2FzdCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRvYXN0IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9tZXNzYWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWVzc2FnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Zpc2libGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzVG9hc3QyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfbWVzc2FnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2R1cmF0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfbWVzc2FnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZXNzYWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZXNzYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lc3NhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tZXNzYWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXNzYWdlX2luaXRpYWxpemVycywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9kdXJhdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkdXJhdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHVyYXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHVyYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kdXJhdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc1Zpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1RvYXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzk7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkZlZWRiYWNrIiwgIk92ZXJsYXkiXTsKICAgICAgICBzdGF0aWMgdG9hc3RDb250YWluZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzdGF0aWMgZ2V0T3JDcmVhdGVDb250YWluZXIocG9zaXRpb24zKSB7CiAgICAgICAgICBpZiAoIXRoaXMudG9hc3RDb250YWluZXJzLmhhcyhwb3NpdGlvbjMpKSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gYHRvYXN0LWNvbnRhaW5lciB0b2FzdC1jb250YWluZXItJHtwb3NpdGlvbjN9YDsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBgCiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLm92ZXJsYXkudG9hc3R9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICBgOwogICAgICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uMykgewogICAgICAgICAgICAgIGNhc2UgInRvcC1yaWdodCI6CiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudG9wID0gIjAiOwogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAidG9wLWxlZnQiOgogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiYm90dG9tLXJpZ2h0IjoKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAiMCI7CiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUucmlnaHQgPSAiMCI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJib3R0b20tbGVmdCI6CiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuYm90dG9tID0gIjAiOwogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJ0b3AtY2VudGVyIjoKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9ICI1MCUiOwogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKC01MCUpIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImJvdHRvbS1jZW50ZXIiOgogICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVgoLTUwJSkiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgICAgICB0aGlzLnRvYXN0Q29udGFpbmVycy5zZXQocG9zaXRpb24zLCBjb250YWluZXIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMudG9hc3RDb250YWluZXJzLmdldChwb3NpdGlvbjMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgICAgICBjb25zdCBvcHRzID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8geyBtZXNzYWdlOiBvcHRpb25zIH0gOiBvcHRpb25zOwogICAgICAgICAgY29uc3QgdG9hc3QgPSBuZXcgRGVlc1RvYXN0MigpOwogICAgICAgICAgdG9hc3QubWVzc2FnZSA9IG9wdHMubWVzc2FnZTsKICAgICAgICAgIHRvYXN0LnR5cGUgPSBvcHRzLnR5cGUgfHwgImluZm8iOwogICAgICAgICAgdG9hc3QuZHVyYXRpb24gPSBvcHRzLmR1cmF0aW9uIHx8IDNlMzsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0T3JDcmVhdGVDb250YWluZXIob3B0cy5wb3NpdGlvbiB8fCAidG9wLXJpZ2h0Iik7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodG9hc3QpOwogICAgICAgICAgYXdhaXQgdG9hc3QudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0b2FzdC5pc1Zpc2libGUgPSB0cnVlOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodG9hc3QuZHVyYXRpb24gPiAwKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRvYXN0LmRpc21pc3MoKTsKICAgICAgICAgICAgfSwgdG9hc3QuZHVyYXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRvYXN0OwogICAgICAgIH0KICAgICAgICAvLyBBbGlhcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBEZWVzTW9kYWwKICAgICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhvcHRpb25zKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaG93KG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzCiAgICAgICAgc3RhdGljIGluZm8obWVzc2FnZTIsIGR1cmF0aW9uKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJpbmZvIiwgZHVyYXRpb24gfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAic3VjY2VzcyIsIGR1cmF0aW9uIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgd2FybmluZyhtZXNzYWdlMiwgZHVyYXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNob3coeyBtZXNzYWdlOiBtZXNzYWdlMiwgdHlwZTogIndhcm5pbmciLCBkdXJhdGlvbiB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGVycm9yKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAiZXJyb3IiLCBkdXJhdGlvbiB9KTsKICAgICAgICB9CiAgICAgICAgI21lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX21lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgbWVzc2FnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtZXNzYWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImluZm8iKSk7CiAgICAgICAgZ2V0IHR5cGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgM2UzKSk7CiAgICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkdXJhdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kdXJhdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICA6aG9zdChbaXN2aXNpYmxlXSkgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CgogICAgICAudG9hc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgcGFkZGluZzogMTZweCAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZiIsICIjMjIyIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjEpIiwgInJnYmEoMCwwLDAsMC4zKSIpfTsKICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAudG9hc3Q6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuaWNvbiBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZSB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAuY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5jbG9zZSBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFR5cGUtc3BlY2lmaWMgc3R5bGVzICovCiAgICAgIDpob3N0KFt0eXBlPSJpbmZvIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogIzAwODRmZjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9InN1Y2Nlc3MiXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMjJjNTVlOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0id2FybmluZyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICNmNTllMGI7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJlcnJvciJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICNlZjQ0NDQ7CiAgICAgIH0KCiAgICAgIC8qIFByb2dyZXNzIGJhciAqLwogICAgICAucHJvZ3Jlc3MgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA4cHggOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQ7CiAgICAgICAgYW5pbWF0aW9uOiBwcm9ncmVzcyBsaW5lYXIgZm9yd2FyZHM7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHJvZ3Jlc3MgewogICAgICAgIGZyb20gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIH0KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgaWNvbnM2ID0gewogICAgICAgICAgICBpbmZvOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTExYTEgMSAwIDEwLTIgMHYySDdhMSAxIDAgMTAwIDJoMnYyYTEgMSAwIDEwMiAwdi0yaDJhMSAxIDAgMTAwLTJoLTJWN3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgICAgICBzdWNjZXNzOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgICAgICB3YXJuaW5nOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjI1NyAzLjA5OWMuNzY1LTEuMzYgMi43MjItMS4zNiAzLjQ4NiAwbDUuNTggOS45MmMuNzUgMS4zMzQtLjIxMyAyLjk4LTEuNzQyIDIuOThINC40MmMtMS41MyAwLTIuNDkzLTEuNjQ2LTEuNzQzLTIuOThsNS41OC05Ljkyek0xMSAxM2ExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bS0xLThhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAyIDBWNmExIDEgMCAwMC0xLTF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCwKICAgICAgICAgICAgZXJyb3I6IGIyYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6TTguNzA3IDcuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0TDguNTg2IDEwbC0xLjI5MyAxLjI5M2ExIDEgMCAxMDEuNDE0IDEuNDE0TDEwIDExLjQxNGwxLjI5MyAxLjI5M2ExIDEgMCAwMDEuNDE0LTEuNDE0TDExLjQxNCAxMGwxLjI5My0xLjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEwxMCA4LjU4NiA4LjcwNyA3LjI5M3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ0b2FzdCIgQGNsaWNrPSR7dGhpcy5kaXNtaXNzfT4KICAgICAgICA8ZGl2IGNsYXNzPSJpY29uIj4KICAgICAgICAgICR7aWNvbnM2W3RoaXMudHlwZV19CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+JHt0aGlzLm1lc3NhZ2V9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xvc2UiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDh6Ii8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZHVyYXRpb24gPiAwID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgc3R5bGU9ImFuaW1hdGlvbi1kdXJhdGlvbjogJHt0aGlzLmR1cmF0aW9ufW1zIj48L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNtaXNzKCkgewogICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMzAwKSk7CiAgICAgICAgICB0aGlzLnJlbW92ZSgpOwogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wYXJlbnRFbGVtZW50OwogICAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICAgICAgZm9yIChjb25zdCBbcG9zaXRpb24zLCBjb250XSBvZiBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5lbnRyaWVzKCkpIHsKICAgICAgICAgICAgICBpZiAoY29udCA9PT0gY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgICBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5kZWxldGUocG9zaXRpb24zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgidHlwZSIsIHRoaXMudHlwZSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczU2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzVG9hc3QyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mZWVkYmFjay9kZWVzLXRvYXN0L2luZGV4LmpzCnZhciBpbml0X2RlZXNfdG9hc3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svZGVlcy10b2FzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfdG9hc3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZlZWRiYWNrL2luZGV4LmpzCnZhciBpbml0X2dyb3VwX2ZlZWRiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZmVlZGJhY2svaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2FjdGlvbmJhcjIoKTsKICAgIGluaXRfZGVlc19iYWRnZTIoKTsKICAgIGluaXRfZGVlc19oaW50MigpOwogICAgaW5pdF9kZWVzX3Byb2dyZXNzYmFyMigpOwogICAgaW5pdF9kZWVzX3NwaW5uZXIyKCk7CiAgICBpbml0X2RlZXNfdG9hc3QyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2Zvcm0yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2Zvcm0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtLXN1Ym1pdC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2Zvcm1fc3VibWl0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vZGVlcy1mb3JtLXN1Ym1pdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfZm9ybV9zdWJtaXQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWZvcm0vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2Zvcm0yKCk7CiAgICBpbml0X2RlZXNfZm9ybV9zdWJtaXQyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWJhc2UvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9iYXNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtYmFzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jaGVja2JveC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2lucHV0X2NoZWNrYm94MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY2hlY2tib3gvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X2NoZWNrYm94KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNvZGUvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9jb2RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY29kZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfY29kZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2lucHV0X2Ryb3Bkb3duMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtZHJvcGRvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X2Ryb3Bkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9pYmFuMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtaWJhbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfaWJhbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1saXN0L2RlZXMtaW5wdXQtbGlzdC5kZW1vLmpzCnZhciBkZW1vRnVuYzQwOwp2YXIgaW5pdF9kZWVzX2lucHV0X2xpc3RfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9kZWVzLWlucHV0LWxpc3QuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBpbml0X2RlZXNfZm9ybSgpOwogICAgaW5pdF9kZWVzX2lucHV0X3RleHQoKTsKICAgIGluaXRfZGVlc19mb3JtX3N1Ym1pdCgpOwogICAgZGVtb0Z1bmM0MCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmVhdHVyZS1ub3RlIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzNiODJmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGNvbG9yOiAjMWU0MGFmOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuZmVhdHVyZS1ub3RlIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFlM2E1ZjsKICAgICAgICAgICAgY29sb3I6ICM5M2M1ZmQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgTGlzdCBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgbGlzdCBtYW5hZ2VtZW50IHdpdGggYWRkLCBlZGl0LCBhbmQgZGVsZXRlIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlNob3BwaW5nIExpc3QifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpdGVtIHRvIHlvdXIgbGlzdC4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbIk1pbGsiLCAiQnJlYWQiLCAiRWdncyIsICJDaGVlc2UiXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEb3VibGUtY2xpY2sgdG8gZWRpdCBpdGVtcywgb3IgdXNlIHRoZSBlZGl0IGJ1dHRvbiJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5KhIERvdWJsZS1jbGljayBhbnkgaXRlbSB0byBxdWlja2x5IGVkaXQgaXQgaW5saW5lCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBTb3J0YWJsZSBMaXN0In0gLnN1YnRpdGxlPSR7IkRyYWcgYW5kIGRyb3AgdG8gcmVvcmRlciBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJUYXNrIFByaW9yaXR5In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgYSB0YXNrLi4uIn0KICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbCiAgICAgICJSZXZpZXcgcHVsbCByZXF1ZXN0cyIsCiAgICAgICJGaXggY3JpdGljYWwgYnVnIiwKICAgICAgIlVwZGF0ZSBkb2N1bWVudGF0aW9uIiwKICAgICAgIkRlcGxveSB0byBwcm9kdWN0aW9uIiwKICAgICAgIlRlYW0gc3RhbmR1cCBtZWV0aW5nIgogICAgXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEcmFnIGl0ZW1zIHVzaW5nIHRoZSBoYW5kbGUgdG8gcmVvcmRlciB0aGVtIn0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ub3RlIj4KICAgICAgICAgIPCflIQgRHJhZyB0aGUgZ3JpcCBoYW5kbGUgdG8gcmVvcmRlciB0YXNrcyBieSBwcmlvcml0eQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gVmFsaWRhdGlvbiAmIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7Ikxpc3RzIHdpdGggbWluaW11bS9tYXhpbXVtIGl0ZW1zIGFuZCBkdXBsaWNhdGUgcHJldmVudGlvbiJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gTWVtYmVycyAoTWluIDIsIE1heCA1KSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgdGVhbSBtZW1iZXIuLi4ifQogICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAubWF4SXRlbXM9JHs1fQogICAgICAgICAgICAudmFsdWU9JHtbIkFsaWNlIiwgIkJvYiJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIDItNSB0ZWFtIG1lbWJlcnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJVbmlxdWUgVGFncyAoTm8gRHVwbGljYXRlcykifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHVuaXF1ZSB0YWcuLi4ifQogICAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAgIC52YWx1ZT0ke1siZnJvbnRlbmQiLCAiYmFja2VuZCIsICJkYXRhYmFzZSJdfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHVwbGljYXRlIGl0ZW1zIGFyZSBub3QgYWxsb3dlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBEZWxldGUgQ29uZmlybWF0aW9uIn0gLnN1YnRpdGxlPSR7IlJlcXVpcmUgY29uZmlybWF0aW9uIGJlZm9yZSBkZWxldGluZyBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJJbXBvcnRhbnQgRG9jdW1lbnRzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgZG9jdW1lbnQgbmFtZS4uLiJ9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbCiAgICAgICJDb250cmFjdF8yMDI0LnBkZiIsCiAgICAgICJGaW5hbmNpYWxfUmVwb3J0X1EzLnhsc3giLAogICAgICAiUHJvamVjdF9Qcm9wb3NhbC5kb2N4IiwKICAgICAgIk1lZXRpbmdfTm90ZXMudHh0IgogICAgXX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJEZWxldGlvbiByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHNhZmV0eSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gRGlzYWJsZWQgU3RhdGUifSAuc3VidGl0bGU9JHsiUmVhZC1vbmx5IGxpc3QgZGlzcGxheSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTeXN0ZW0gRGVmYXVsdHMifQogICAgICAgICAgLnZhbHVlPSR7WyJEZWZhdWx0IFNldHRpbmcgMSIsICJEZWZhdWx0IFNldHRpbmcgMiIsICJEZWZhdWx0IFNldHRpbmcgMyJdfQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSBpdGVtcyBjYW5ub3QgYmUgbW9kaWZpZWQifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiTGlzdCBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJSZWNpcGUgTmFtZSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJNeSBBbWF6aW5nIFJlY2lwZSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsibmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbmdyZWRpZW50cyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbmdyZWRpZW50Li4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgIC5taW5JdGVtcz0kezN9CiAgICAgICAgICAgICAgLmtleT0keyJpbmdyZWRpZW50cyJ9CiAgICAgICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgICAgICAudmFsdWU9JHtbCiAgICAgICIyIGN1cHMgZmxvdXIiLAogICAgICAiMSBjdXAgc3VnYXIiLAogICAgICAiMyBlZ2dzIgogICAgXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGF0IGxlYXN0IDMgaW5ncmVkaWVudHMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7Ikluc3RydWN0aW9ucyJ9CiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBpbnN0cnVjdGlvbiBzdGVwLi4uIn0KICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgIC5taW5JdGVtcz0kezJ9CiAgICAgICAgICAgICAgLmtleT0keyJpbnN0cnVjdGlvbnMifQogICAgICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAgICAgLnZhbHVlPSR7WwogICAgICAiUHJlaGVhdCBvdmVuIHRvIDM1MFx4QjBGIiwKICAgICAgIk1peCBkcnkgaW5ncmVkaWVudHMiCiAgICBdfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgY29va2luZyBpbnN0cnVjdGlvbnMgaW4gb3JkZXIifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAubGFiZWw9JHsiTm90ZXMifQogICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFueSBzcGVjaWFsIG5vdGVzIG9yIHRpcHMuLi4ifQogICAgICAgICAgICAua2V5PSR7Im5vdGVzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU2F2ZSBSZWNpcGUifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBJbnRlcmFjdGl2ZSBEZW1vIn0gLnN1YnRpdGxlPSR7IkJ1aWxkIHlvdXIgb3duIGZlYXR1cmUgbGlzdCBhbmQgc2VlIHRoZSBkYXRhIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgaWQ9ImludGVyYWN0aXZlLWxpc3QiCiAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBGZWF0dXJlcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgZmVhdHVyZS4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgLmNvbmZpcm1EZWxldGU9JHtmYWxzZX0KICAgICAgICAgIC5hbGxvd0R1cGxpY2F0ZXM9JHtmYWxzZX0KICAgICAgICAgIC5tYXhJdGVtcz0kezEwfQogICAgICAgICAgQGNoYW5nZT0keyhlMTEpID0+IHsKICAgICAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTsKICAgICAgaWYgKHByZXZpZXcpIHsKICAgICAgICBjb25zdCBkYXRhMTEgPSB7CiAgICAgICAgICBpdGVtczogZTExLmRldGFpbC52YWx1ZSwKICAgICAgICAgIGNvdW50OiBlMTEuZGV0YWlsLnZhbHVlLmxlbmd0aCwKICAgICAgICAgIHRpbWVzdGFtcDogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpCiAgICAgICAgfTsKICAgICAgICBwcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YTExLCBudWxsLCAyKTsKICAgICAgfQogICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJsaXN0LWpzb24iPgogICAgICAgICAgewogICAgICAgICAgICAiaXRlbXMiOiBbXSwKICAgICAgICAgICAgImNvdW50IjogMCwKICAgICAgICAgICAgInRpbWVzdGFtcCI6ICIkeygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0iCiAgICAgICAgICB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ub3RlIj4KICAgICAgICAgIOKcqCBBZGQsIGVkaXQsIHJlbW92ZSwgYW5kIHJlb3JkZXIgaXRlbXMgdG8gc2VlIHRoZSBKU09OIG91dHB1dCB1cGRhdGUgaW4gcmVhbC10aW1lCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI4LiBBZHZhbmNlZCBDb25maWd1cmF0aW9uIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmUgYWxsIGZlYXR1cmVzIGZvciBjb21wbGV4IHVzZSBjYXNlcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IE1pbGVzdG9uZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBtaWxlc3RvbmUuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WwogICAgICAiUHJvamVjdCBLaWNrb2ZmIC0gV2VlayAxIiwKICAgICAgIlJlcXVpcmVtZW50cyBHYXRoZXJpbmcgLSBXZWVrIDItMyIsCiAgICAgICJEZXNpZ24gUGhhc2UgLSBXZWVrIDQtNiIsCiAgICAgICJEZXZlbG9wbWVudCBTcHJpbnQgMSAtIFdlZWsgNy05IiwKICAgICAgIlRlc3RpbmcgJiBRQSAtIFdlZWsgMTAtMTEiLAogICAgICAiRGVwbG95bWVudCAtIFdlZWsgMTIiCiAgICBdfQogICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7dHJ1ZX0KICAgICAgICAgIC5hbGxvd0R1cGxpY2F0ZXM9JHtmYWxzZX0KICAgICAgICAgIC5taW5JdGVtcz0kezN9CiAgICAgICAgICAubWF4SXRlbXM9JHsxMn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTWFuYWdlIHByb2plY3QgbWlsZXN0b25lcyAoMy0xMiBpdGVtcywgc29ydGFibGUsIG5vIGR1cGxpY2F0ZXMpIn0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI5LiBFbXB0eSBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJIb3cgdGhlIGNvbXBvbmVudCBsb29rcyB3aXRoIG5vIGl0ZW1zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IllvdXIgSWRlYXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlNoYXJlIHlvdXIgaWRlYXMuLi4ifQogICAgICAgICAgLnZhbHVlPSR7W119CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU3RhcnQgYWRkaW5nIGl0ZW1zIHRvIGJ1aWxkIHlvdXIgbGlzdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmpzCnZhciBfX2VzRGVjb3JhdGU1NiwgX19ydW5Jbml0aWFsaXplcnM1NywgRGVlc0lucHV0TGlzdDsKdmFyIGluaXRfZGVlc19pbnB1dF9saXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1saXN0L2RlZXMtaW5wdXQtbGlzdC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfYnV0dG9uKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfbGlzdF9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU1NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczU3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRMaXN0ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbGlzdCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21heEl0ZW1zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWF4SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5JdGVtc19kZWNvcmF0b3JzOwogICAgICBsZXQgX21pbkl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pbkl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYWxsb3dEdXBsaWNhdGVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NvcnRhYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc29ydGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbnB1dFZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9yczsKICAgICAgbGV0IF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZWRpdGluZ0luZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZWRpdGluZ1ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VkaXRpbmdWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RyYWdnZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kcmFnZ2VkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHJhZ092ZXJJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RyYWdTdGFydFlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ1N0YXJ0WV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RyYWdDdXJyZW50WV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YXJnZXRJbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhcmdldEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhcmdldEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXRlbUhlaWdodF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2l0ZW1IZWlnaHRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXRlbUhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0TGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX21heEl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX21pbkl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2FsbG93RHVwbGljYXRlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc29ydGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2NvbmZpcm1EZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2lucHV0VmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9lZGl0aW5nVmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9kcmFnZ2VkSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3RhcmdldEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXRlbUhlaWdodF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNTYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9tYXhJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhJdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhJdGVtcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWF4SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTYodGhpcywgbnVsbCwgX21pbkl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pbkl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5JdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5JdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1pbkl0ZW1zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5JdGVtc19pbml0aWFsaXplcnMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFsbG93RHVwbGljYXRlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWxsb3dEdXBsaWNhdGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93RHVwbGljYXRlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFsbG93RHVwbGljYXRlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWxsb3dEdXBsaWNhdGVzX2luaXRpYWxpemVycywgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfc29ydGFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic29ydGFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnRhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNvcnRhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc29ydGFibGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NvcnRhYmxlX2luaXRpYWxpemVycywgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbmZpcm1EZWxldGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbmZpcm1EZWxldGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29uZmlybURlbGV0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbmZpcm1EZWxldGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbmZpcm1EZWxldGVfaW5pdGlhbGl6ZXJzLCBfY29uZmlybURlbGV0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbGlkYXRpb25UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlucHV0VmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzLCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfZWRpdGluZ0luZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRpbmdJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGluZ0luZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVkaXRpbmdJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVkaXRpbmdJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGluZ0luZGV4X2luaXRpYWxpemVycywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRpbmdWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGluZ1ZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVkaXRpbmdWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVkaXRpbmdWYWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGluZ1ZhbHVlX2luaXRpYWxpemVycywgX2VkaXRpbmdWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfZHJhZ2dlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdnZWRJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ2dlZEluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdnZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRyYWdnZWRJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycywgX2RyYWdnZWRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfZHJhZ092ZXJJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnT3ZlckluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlckluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVySW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kcmFnT3ZlckluZGV4ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnT3ZlckluZGV4X2luaXRpYWxpemVycywgX2RyYWdPdmVySW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTYodGhpcywgbnVsbCwgX2RyYWdTdGFydFlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ1N0YXJ0WSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ1N0YXJ0WSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnU3RhcnRZLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZHJhZ1N0YXJ0WSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIF9kcmFnU3RhcnRZX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9kcmFnQ3VycmVudFlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ0N1cnJlbnRZIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnQ3VycmVudFkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ0N1cnJlbnRZLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZHJhZ0N1cnJlbnRZID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnQ3VycmVudFlfaW5pdGlhbGl6ZXJzLCBfZHJhZ0N1cnJlbnRZX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF90YXJnZXRJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YXJnZXRJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFyZ2V0SW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFyZ2V0SW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YXJnZXRJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGFyZ2V0SW5kZXhfaW5pdGlhbGl6ZXJzLCBfdGFyZ2V0SW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTYodGhpcywgbnVsbCwgX2l0ZW1IZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXRlbUhlaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXRlbUhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pdGVtSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXRlbUhlaWdodCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXRlbUhlaWdodF9pbml0aWFsaXplcnMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dExpc3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0MDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiQWRkIG5ldyBpdGVtLi4uIikpOwogICAgICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX21heEl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBtYXhJdGVtcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXhJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICAvLyAwIG1lYW5zIHVubGltaXRlZAogICAgICAgIHNldCBtYXhJdGVtcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21heEl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtaW5JdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX21heEl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluSXRlbXNfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IG1pbkl0ZW1zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21pbkl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtaW5JdGVtcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21pbkl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX2FsbG93RHVwbGljYXRlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGFsbG93RHVwbGljYXRlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFsbG93RHVwbGljYXRlcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FsbG93RHVwbGljYXRlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc29ydGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9hbGxvd0R1cGxpY2F0ZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zb3J0YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IHNvcnRhYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzb3J0YWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9jb25maXJtRGVsZXRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgY29uZmlybURlbGV0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb25maXJtRGVsZXRlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29uZmlybURlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCB2YWxpZGF0aW9uVGV4dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmFsaWRhdGlvblRleHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGlucHV0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5wdXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2VkaXRpbmdJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgICAgIGdldCBlZGl0aW5nSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZWRpdGluZ0luZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlZGl0aW5nSW5kZXgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX2VkaXRpbmdWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGVkaXRpbmdWYWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlZGl0aW5nVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVkaXRpbmdWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfZWRpdGluZ1ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgICAgICBnZXQgZHJhZ2dlZEluZGV4KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RyYWdnZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZHJhZ2dlZEluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNkcmFnT3ZlckluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfZHJhZ092ZXJJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICAgICAgZ2V0IGRyYWdPdmVySW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZHJhZ092ZXJJbmRleCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RyYWdPdmVySW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICAvLyBFbmhhbmNlZCBkcmFnIHN0YXRlIGZvciBpbnRlcmFjdGl2ZSByZW9yZGVyaW5nCiAgICAgICAgZ2V0IGRyYWdTdGFydFkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZHJhZ1N0YXJ0WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZHJhZ1N0YXJ0WSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTcodGhpcywgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9kcmFnQ3VycmVudFlfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGRyYWdDdXJyZW50WSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkcmFnQ3VycmVudFlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRyYWdDdXJyZW50WSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFyZ2V0SW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICAgICAgZ2V0IHRhcmdldEluZGV4KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhcmdldEluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YXJnZXRJbmRleCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhcmdldEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfdGFyZ2V0SW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pdGVtSGVpZ2h0X2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBpdGVtSGVpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGl0ZW1IZWlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEJvdW5kIGV2ZW50IGhhbmRsZXJzIGZvciBjbGVhbnVwCiAgICAgICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kID0gbnVsbDsKICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBpdGVtIHBvc2l0aW9ucyBmb3IgYWNjdXJhdGUgaGl0IGRldGVjdGlvbiAoYmVmb3JlIHRyYW5zZm9ybXMpCiAgICAgICAgb3JpZ2luYWxJdGVtUmVjdHMgPSBbXTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXMgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGJveC1zaGFkb3cgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgLyogUHJldmVudCBhbmltYXRpb24gZnJvbSBhZmZlY3Rpbmcgc2Nyb2xsIGJvdW5kcyAqLwogICAgICB9CgogICAgICAubGlzdC1pdGVtOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6bm90KC5pcy1kcmFnZ2luZykgLmxpc3QtaXRlbTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsICJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRHJhZ2dpbmcgaXRlbSAtIGZvbGxvd3MgY3Vyc29yICovCiAgICAgIC5saXN0LWl0ZW0uZHJhZ2dpbmcgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgwLCAwLCAwLCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMTVzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLyogSXRlbXMgdGhhdCBuZWVkIHRvIG1vdmUgdXAgdG8gbWFrZSBzcGFjZSAqLwogICAgICAubGlzdC1pdGVtLm1vdmUtdXAgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0taXRlbS1oZWlnaHQsIDQ4cHgpKSk7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIGRvd24gdG8gbWFrZSBzcGFjZSAqLwogICAgICAubGlzdC1pdGVtLm1vdmUtZG93biB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSk7CiAgICAgIH0KCgogICAgICAuZHJhZy1oYW5kbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5kcmFnLWhhbmRsZTpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5pdGVtLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLml0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAuaXRlbS1lZGl0LWlucHV0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuaXRlbS1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNhdmUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zYXZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5jYW5jZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDUwLjYlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDUwLjYlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGVsZXRlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsICJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CgogICAgICAuYWRkLWl0ZW0tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTcuNSUpIiwgImhzbCgwIDAlIDYuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAuYWRkLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMzJweCAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMzQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBEaXNhYmxlIHRyYW5zaXRpb25zIGR1cmluZyBkcm9wIHRvIHByZXZlbnQgZmxhc2ggKi8KICAgICAgLmxpc3QtaXRlbXMuZHJvcHBpbmcgLmxpc3QtaXRlbSB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICR7dGhpcy5sYWJlbCA/IGIyYDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD5gIDogIiJ9CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaXN0LWl0ZW1zIj4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLnZhbHVlLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibGlzdC1pdGVtICR7dGhpcy5kcmFnZ2VkSW5kZXggPT09IGluZGV4MiA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9IiR7dGhpcy5zb3J0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZH0iCiAgICAgICAgICAgICAgICBAZHJhZ3N0YXJ0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpfQogICAgICAgICAgICAgICAgQGRyYWdlbmQ9JHt0aGlzLmhhbmRsZURyYWdFbmR9CiAgICAgICAgICAgICAgICBAZHJhZ292ZXI9JHsoZTExKSA9PiB0aGlzLmhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgIEBkcm9wPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3RoaXMuc29ydGFibGUgJiYgIXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJhZy1oYW5kbGUiPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmdyaXBWZXJ0aWNhbCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmVkaXRpbmdJbmRleCA9PT0gaW5kZXgyID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Iml0ZW0tZWRpdC1pbnB1dCIKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZWRpdGluZ1ZhbHVlfQogICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5lZGl0aW5nVmFsdWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZUVkaXRLZXlEb3duKGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgICAgICAgIEBibHVyPSR7KCkgPT4gdGhpcy5zYXZlRWRpdChpbmRleDIpfQogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLXRleHQiIEBkYmxjbGljaz0keygpID0+ICF0aGlzLmRpc2FibGVkICYmIHRoaXMuc3RhcnRFZGl0KGluZGV4Mil9PgogICAgICAgICAgICAgICAgICAgICAgJHtpdGVtfQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXggPT09IGluZGV4MiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gc2F2ZSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zYXZlRWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiBjYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuY2FuY2VsRWRpdCgpfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgICAgICAgICR7IXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24iIEBjbGljaz0keygpID0+IHRoaXMuc3RhcnRFZGl0KGluZGV4Mil9PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwZW5jaWwifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiBkZWxldGUiIEBjbGljaz0keygpID0+IHRoaXMucmVtb3ZlSXRlbShpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dHJhc2gyIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCkgOiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICBObyBpdGVtcyBhZGRlZCB5ZXQKICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkICYmICghdGhpcy5tYXhJdGVtcyB8fCB0aGlzLnZhbHVlLmxlbmd0aCA8IHRoaXMubWF4SXRlbXMpID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkZC1pdGVtLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1pbnB1dCIKICAgICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmlucHV0VmFsdWV9CiAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUlucHV0fQogICAgICAgICAgICAgICAgQGtleWRvd249JHt0aGlzLmhhbmRsZUFkZEtleURvd259CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0iYWRkLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWRkSXRlbX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLmlucHV0VmFsdWUudHJpbSgpfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnBsdXMifT48L2RlZXMtaWNvbj4gQWRkCiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbi1tZXNzYWdlIj4ke3RoaXMudmFsaWRhdGlvblRleHR9PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICAgIAogICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBlMTEudGFyZ2V0LnZhbHVlOwogICAgICAgIH0KICAgICAgICBoYW5kbGVBZGRLZXlEb3duKGUxMSkgewogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5pbnB1dFZhbHVlLnRyaW0oKSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUVkaXRLZXlEb3duKGUxMSwgaW5kZXgyKSB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5zYXZlRWRpdChpbmRleDIpOwogICAgICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFkZEl0ZW0oKSB7CiAgICAgICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB0aGlzLmlucHV0VmFsdWUudHJpbSgpOwogICAgICAgICAgaWYgKCF0cmltbWVkVmFsdWUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiIsIDNlMyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm1heEl0ZW1zICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMubWF4SXRlbXMpIHsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9IGBNYXhpbXVtICR7dGhpcy5tYXhJdGVtc30gaXRlbXMgYWxsb3dlZGA7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRyaW1tZWRWYWx1ZV07CiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAiIjsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7CiAgICAgICAgICBpZiAoaW5wdXQpIHsKICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAiIjsKICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgICAgIH0KICAgICAgICBzdGFydEVkaXQoaW5kZXgyKSB7CiAgICAgICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IGluZGV4MjsKICAgICAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy52YWx1ZVtpbmRleDJdOwogICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5pdGVtLWVkaXQtaW5wdXQiKTsKICAgICAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHNhdmVFZGl0KGluZGV4MikgewogICAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdGhpcy5lZGl0aW5nVmFsdWUudHJpbSgpOwogICAgICAgICAgaWYgKCF0cmltbWVkVmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdHJpbW1lZFZhbHVlICE9PSB0aGlzLnZhbHVlW2luZGV4Ml0gJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiIsIDNlMyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gWy4uLnRoaXMudmFsdWVdOwogICAgICAgICAgbmV3VmFsdWVbaW5kZXgyXSA9IHRyaW1tZWRWYWx1ZTsKICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgIHRoaXMuZWRpdGluZ0luZGV4ID0gLTE7CiAgICAgICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9ICIiOwogICAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgfQogICAgICAgIGNhbmNlbEVkaXQoKSB7CiAgICAgICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IC0xOwogICAgICAgICAgdGhpcy5lZGl0aW5nVmFsdWUgPSAiIjsKICAgICAgICB9CiAgICAgICAgYXN5bmMgcmVtb3ZlSXRlbShpbmRleDIpIHsKICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHsKICAgICAgICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybURpYWxvZyhgRGVsZXRlICIke3RoaXMudmFsdWVbaW5kZXgyXX0iP2ApOwogICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKF80LCBpMTEpID0+IGkxMSAhPT0gaW5kZXgyKTsKICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgICAgIH0KICAgICAgICBhc3luYyBzaG93Q29uZmlybURpYWxvZyhtZXNzYWdlMikgewogICAgICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZTIpOwogICAgICAgIH0KICAgICAgICAvLyBEcmFnIGFuZCBkcm9wIGhhbmRsZXJzIC0gSW50ZXJhY3RpdmUgaW1wbGVtZW50YXRpb24KICAgICAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpIHsKICAgICAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCB0aGlzLmRpc2FibGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4MjsKICAgICAgICAgIHRoaXMudGFyZ2V0SW5kZXggPSBpbmRleDI7CiAgICAgICAgICBlMTEuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAibW92ZSI7CiAgICAgICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCBpbmRleDIudG9TdHJpbmcoKSk7CiAgICAgICAgICBjb25zdCBlbXB0eUltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgICAgZW1wdHlJbWcuc3JjID0gImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFVRUJBQUFBQ3dBQUFBQUFRQUJBQUFDQWtRQkFEcz0iOwogICAgICAgICAgZTExLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZW1wdHlJbWcsIDAsIDApOwogICAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gZTExLmNsaWVudFk7CiAgICAgICAgICB0aGlzLmRyYWdDdXJyZW50WSA9IGUxMS5jbGllbnRZOwogICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICAgICAgY29uc3QgYWxsSXRlbXMgPSBBcnJheS5mcm9tKGxpc3RJdGVtcz8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpIHx8IFtdKTsKICAgICAgICAgIGlmIChhbGxJdGVtc1tpbmRleDJdKSB7CiAgICAgICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IGFsbEl0ZW1zW2luZGV4Ml0ub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IGFsbEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7CiAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImlzLWRyYWdnaW5nIik7CiAgICAgICAgICB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIgPSB0aGlzLmhhbmRsZUdsb2JhbERyYWdPdmVyLmJpbmQodGhpcyk7CiAgICAgICAgICB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZCA9IHRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZC5iaW5kKHRoaXMpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlR2xvYmFsRHJhZ092ZXIoZTExKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuZHJhZ0N1cnJlbnRZID0gZTExLmNsaWVudFk7CiAgICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgICAgICBpZiAoIWxpc3RJdGVtcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKGxpc3RJdGVtcy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikpOwogICAgICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtc1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgICAgICBpZiAoIWRyYWdnZWRFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBkZWx0YVkgPSB0aGlzLmRyYWdDdXJyZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7ZGVsdGFZfXB4KWA7CiAgICAgICAgICBjb25zdCBkcmFnZ2VkUmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy5kcmFnZ2VkSW5kZXhdOwogICAgICAgICAgaWYgKCFkcmFnZ2VkUmVjdCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZHJhZ2dlZENlbnRlciA9IGRyYWdnZWRSZWN0LnRvcCArIGRyYWdnZWRSZWN0LmhlaWdodCAvIDIgKyBkZWx0YVk7CiAgICAgICAgICBsZXQgbmV3VGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdnZWRJbmRleDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGl0ZW1zLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgaWYgKGkxMSA9PT0gdGhpcy5kcmFnZ2VkSW5kZXgpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW2kxMV07CiAgICAgICAgICAgIGlmICghcmVjdCkKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgbGV0IGl0ZW1DZW50ZXIgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICAgICAgICAgICAgaWYgKGl0ZW1zW2kxMV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLXVwIikpIHsKICAgICAgICAgICAgICBpdGVtQ2VudGVyIC09IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtc1tpMTFdLmNsYXNzTGlzdC5jb250YWlucygibW92ZS1kb3duIikpIHsKICAgICAgICAgICAgICBpdGVtQ2VudGVyICs9IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZHJhZ2dlZENlbnRlciA8IGl0ZW1DZW50ZXIgJiYgaTExIDwgdGhpcy5kcmFnZ2VkSW5kZXgpIHsKICAgICAgICAgICAgICBuZXdUYXJnZXRJbmRleCA9IGkxMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkQ2VudGVyID4gaXRlbUNlbnRlciAmJiBpMTEgPiB0aGlzLmRyYWdnZWRJbmRleCkgewogICAgICAgICAgICAgIG5ld1RhcmdldEluZGV4ID0gaTExOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobmV3VGFyZ2V0SW5kZXggIT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICAgICAgdGhpcy50YXJnZXRJbmRleCA9IG5ld1RhcmdldEluZGV4OwogICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1Qb3NpdGlvbnMoaXRlbXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1cGRhdGVJdGVtUG9zaXRpb25zKGl0ZW1zKSB7CiAgICAgICAgICBjb25zdCBkcmFnZ2VkSWR4ID0gdGhpcy5kcmFnZ2VkSW5kZXg7CiAgICAgICAgICBjb25zdCB0YXJnZXRJZHggPSB0aGlzLnRhcmdldEluZGV4OwogICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICAgICAgaWYgKGxpc3RJdGVtcykgewogICAgICAgICAgICBsaXN0SXRlbXMuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLCBgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKTsKICAgICAgICAgIH0KICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGkxMSkgPT4gewogICAgICAgICAgICBpZiAoaTExID09PSBkcmFnZ2VkSWR4KQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIpOwogICAgICAgICAgICBpdGVtLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IiwgYCR7dGhpcy5pdGVtSGVpZ2h0fXB4YCk7CiAgICAgICAgICAgIGlmIChkcmFnZ2VkSWR4IDwgdGFyZ2V0SWR4KSB7CiAgICAgICAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJZHggJiYgaTExIDw9IHRhcmdldElkeCkgewogICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRJZHggPiB0YXJnZXRJZHgpIHsKICAgICAgICAgICAgICBpZiAoaTExID49IHRhcmdldElkeCAmJiBpMTEgPCBkcmFnZ2VkSWR4KSB7CiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoIm1vdmUtZG93biIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUdsb2JhbERyYWdFbmQoKSB7CiAgICAgICAgICBpZiAodGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyKSB7CiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyKTsKICAgICAgICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZCkgewogICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgICAgICB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ0VuZCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGxpc3RJdGVtcz8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpOwogICAgICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtcz8uW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEgfHwgdGhpcy50YXJnZXRJbmRleCA9PT0gLTEgfHwgdGhpcy5kcmFnZ2VkSW5kZXggPT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50ICYmIHRoaXMuZHJhZ2dlZEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDAuMTVzIGVhc2UiOwogICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIjsKICAgICAgICAgICAgICBsZXQgaGFuZGxlZDIgPSBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCBvblJldHVybiA9ICgpID0+IHsKICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkMikKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaGFuZGxlZDIgPSB0cnVlOwogICAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uUmV0dXJuKTsKICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdTdGF0ZShsaXN0SXRlbXMsIGl0ZW1zKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblJldHVybiwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgICAgIHNldFRpbWVvdXQob25SZXR1cm4sIDIwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGRyYWdnZWRSZWN0ID0gdGhpcy5vcmlnaW5hbEl0ZW1SZWN0c1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0ID0gdGhpcy5vcmlnaW5hbEl0ZW1SZWN0c1t0aGlzLnRhcmdldEluZGV4XTsKICAgICAgICAgIGlmICghZHJhZ2dlZFJlY3QgfHwgIXRhcmdldFJlY3QgfHwgIWRyYWdnZWRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdTdGF0ZShsaXN0SXRlbXMsIGl0ZW1zKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGZpbmFsWTsKICAgICAgICAgIGlmICh0aGlzLnRhcmdldEluZGV4ID4gdGhpcy5kcmFnZ2VkSW5kZXgpIHsKICAgICAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC5ib3R0b20gLSBkcmFnZ2VkUmVjdC5ib3R0b207CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmaW5hbFkgPSB0YXJnZXRSZWN0LnRvcCAtIGRyYWdnZWRSZWN0LnRvcDsKICAgICAgICAgIH0KICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDAuMTVzIGVhc2UiOwogICAgICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtmaW5hbFl9cHgpYDsKICAgICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgICBjb25zdCBvblRyYW5zaXRpb25FbmQgPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblRyYW5zaXRpb25FbmQpOwogICAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgICAgIHZvaWQgbGlzdEl0ZW1zPy5vZmZzZXRIZWlnaHQ7CiAgICAgICAgICAgIGl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgICAgICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gWy4uLnRoaXMudmFsdWVdOwogICAgICAgICAgICBjb25zdCBbZHJhZ2dlZEl0ZW1dID0gbmV3VmFsdWUuc3BsaWNlKHRoaXMuZHJhZ2dlZEluZGV4LCAxKTsKICAgICAgICAgICAgbmV3VmFsdWUuc3BsaWNlKHRoaXMudGFyZ2V0SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5kcmFnZ2VkSW5kZXggPSAtMTsKICAgICAgICAgICAgdGhpcy5kcmFnT3ZlckluZGV4ID0gLTE7CiAgICAgICAgICAgIHRoaXMudGFyZ2V0SW5kZXggPSAtMTsKICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gMDsKICAgICAgICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSAwOwogICAgICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzID0gW107CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgZnJlc2hJdGVtcyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpOwogICAgICAgICAgICAgIGZyZXNoSXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbiA9ICJub25lIjsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB2b2lkIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmxpc3QtaXRlbXMiKT8ub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbGlzdEl0ZW1zPy5jbGFzc0xpc3QucmVtb3ZlKCJkcm9wcGluZyIsICJpcy1kcmFnZ2luZyIpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH07CiAgICAgICAgICBkcmFnZ2VkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgb25UcmFuc2l0aW9uRW5kLCB7IG9uY2U6IHRydWUgfSk7CiAgICAgICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMjAwKTsKICAgICAgICB9CiAgICAgICAgY2xlYW51cERyYWdTdGF0ZShsaXN0SXRlbXMsIGl0ZW1zKSB7CiAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgICB2b2lkIGxpc3RJdGVtcz8ub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgaXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKTsKICAgICAgICAgICAgaXRlbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IC0xOwogICAgICAgICAgdGhpcy5kcmFnT3ZlckluZGV4ID0gLTE7CiAgICAgICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgICAgICB0aGlzLmRyYWdTdGFydFkgPSAwOwogICAgICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSAwOwogICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgZnJlc2hJdGVtcyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpOwogICAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgaXRlbS5zdHlsZS50cmFuc2l0aW9uID0gIm5vbmUiOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgbGlzdEl0ZW1zPy5jbGFzc0xpc3QucmVtb3ZlKCJkcm9wcGluZyIsICJpcy1kcmFnZ2luZyIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICAgICAgdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKSB7CiAgICAgICAgICBpZiAoIXRoaXMuc29ydGFibGUgfHwgdGhpcy5kaXNhYmxlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAibW92ZSI7CiAgICAgICAgfQogICAgICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRHJvcChlMTEsIGRyb3BJbmRleCkgewogICAgICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBlbWl0Q2hhbmdlKCkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBnZXRWYWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTIgfHwgW107CiAgICAgICAgfQogICAgICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkgewogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIkF0IGxlYXN0IG9uZSBpdGVtIGlzIHJlcXVpcmVkIjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMubWluSXRlbXMgJiYgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkl0ZW1zKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGA7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM1NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0lucHV0TGlzdDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2lucHV0X2xpc3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1saXN0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9saXN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfbXVsdGl0b2dnbGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfbXVsdGl0b2dnbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcGhvbmUvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9waG9uZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXBob25lL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9waG9uZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfcXVhbnRpdHlzZWxlY3RvcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X3F1YW50aXR5c2VsZWN0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2lucHV0X3JhZGlvZ3JvdXAyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yYWRpb2dyb3VwL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9yYWRpb2dyb3VwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L2RlbW8uanMKdmFyIGRlbW9GdW5jNDE7CnZhciBpbml0X2RlbW81ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzKCk7CiAgICBpbml0X2NvbXBvbmVudDUoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgZGVtb0Z1bmM0MSA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIFJpY2ggVGV4dCBFZGl0b3IifSAuc3VidGl0bGU9JHsiQSBmdWxsLWZlYXR1cmVkIHJpY2ggdGV4dCBlZGl0b3Igd2l0aCBmb3JtYXR0aW5nIHRvb2xiYXIifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBcnRpY2xlIENvbnRlbnQifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDE+V2VsY29tZSB0byB0aGUgUmljaCBUZXh0IEVkaXRvciE8L2gxPjxwPlRoaXMgaXMgYSBmZWF0dXJlLXJpY2ggZWRpdG9yIGJ1aWx0IHdpdGggVGlwVGFwLiBZb3UgY2FuOjwvcD48dWw+PGxpPjxzdHJvbmc+Rm9ybWF0IHRleHQ8L3N0cm9uZz4gd2l0aCA8ZW0+dmFyaW91czwvZW0+IDx1PnN0eWxlczwvdT48L2xpPjxsaT5DcmVhdGUgZGlmZmVyZW50IGhlYWRpbmcgbGV2ZWxzPC9saT48bGk+QWRkIDxhIGhyZWY9Imh0dHBzOi8vZXhhbXBsZS5jb20iPmxpbmtzPC9hPiB0byBleHRlcm5hbCByZXNvdXJjZXM8L2xpPjxsaT5Xcml0ZSA8Y29kZT5pbmxpbmUgY29kZTwvY29kZT4gb3IgY29kZSBibG9ja3M8L2xpPjwvdWw+PGJsb2NrcXVvdGU+PHA+VXNlIHRoZSB0b29sYmFyIGFib3ZlIHRvIGV4cGxvcmUgYWxsIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXZhaWxhYmxlITwvcD48L2Jsb2NrcXVvdGU+PHA+U3RhcnQgdHlwaW5nIHRvIHNlZSB0aGUgbWFnaWMgaGFwcGVuLi4uPC9wPid9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXNlIHRoZSB0b29sYmFyIHRvIGZvcm1hdCB5b3VyIGNvbnRlbnQgd2l0aCBoZWFkaW5ncywgbGlzdHMsIGxpbmtzLCBhbmQgbW9yZSJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjIuIFdpdGggUGxhY2Vob2xkZXIifSAuc3VidGl0bGU9JHsiRW1wdHkgZWRpdG9yIHdpdGggcGxhY2Vob2xkZXIgdGV4dCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkJsb2cgUG9zdCJ9IAogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlN0YXJ0IHdyaXRpbmcgeW91ciBibG9nIHBvc3QgaGVyZS4uLiJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIERpZmZlcmVudCBIZWlnaHRzIn0gLnN1YnRpdGxlPSR7IkVkaXRvcnMgd2l0aCBkaWZmZXJlbnQgbWluaW11bSBoZWlnaHRzIGZvciB2YXJpb3VzIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiU2hvcnQgTm90ZSJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MTUwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiUXVpY2sgbm90ZS4uLiJ9CiAgICAgICAgICAgIC5zaG93V29yZENvdW50PSR7ZmFsc2V9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkV4dGVuZGVkIENvbnRlbnQifSAKICAgICAgICAgICAgLm1pbkhlaWdodD0kezMwMH0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IldyaXRlIHlvdXIgZXh0ZW5kZWQgY29udGVudCBoZXJlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjQuIENvZGUgRXhhbXBsZXMifSAuc3VidGl0bGU9JHsiRWRpdG9yIHByZS1maWxsZWQgd2l0aCBjb2RlIGV4YW1wbGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVGVjaG5pY2FsIERvY3VtZW50YXRpb24ifSAKICAgICAgICAgIC52YWx1ZT0keyc8aDI+SW5zdGFsbGF0aW9uIEd1aWRlPC9oMj48cD5UbyBpbnN0YWxsIHRoZSBwYWNrYWdlLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOjwvcD48cHJlPjxjb2RlPm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT48cD5UaGVuIGltcG9ydCB0aGUgY29tcG9uZW50IGluIHlvdXIgVHlwZVNjcmlwdCBmaWxlOjwvcD48cHJlPjxjb2RlPmltcG9ydCB7IERlZXNJbnB1dFJpY2h0ZXh0IH0gZnJvbSAiQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nIjs8L2NvZGU+PC9wcmU+PHA+WW91IGNhbiBub3cgdXNlIHRoZSA8Y29kZT4mbHQ7ZGVlcy1pbnB1dC1yaWNodGV4dCZndDs8L2NvZGU+IGVsZW1lbnQgaW4geW91ciB0ZW1wbGF0ZXMuPC9wPid9CiAgICAgICAgICAubWluSGVpZ2h0PSR7MjUwfQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHt0cnVlfQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBEaXNhYmxlZCBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJSZWFkLW9ubHkgcmljaCB0ZXh0IGNvbnRlbnQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJQdWJsaXNoZWQgQXJ0aWNsZSAoUmVhZCBPbmx5KSJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMj5UaGUgRnV0dXJlIG9mIFdlYiBDb21wb25lbnRzPC9oMj48cD5XZWIgQ29tcG9uZW50cyBoYXZlIHJldm9sdXRpb25pemVkIGhvdyB3ZSBidWlsZCBtb2Rlcm4gd2ViIGFwcGxpY2F0aW9ucy4uLjwvcD48YmxvY2txdW90ZT48cD4iVGhlIGZ1dHVyZSBvZiB3ZWIgZGV2ZWxvcG1lbnQgbGllcyBpbiByZXVzYWJsZSwgZW5jYXBzdWxhdGVkIGNvbXBvbmVudHMuIjwvcD48L2Jsb2NrcXVvdGU+J30KICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEludGVyYWN0aXZlIERlbW8ifSAuc3VidGl0bGU9JHsiVHlwZSBpbiB0aGUgZWRpdG9yIGJlbG93IGFuZCBzZWUgdGhlIEhUTUwgb3V0cHV0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtZWRpdG9yIgogICAgICAgICAgLmxhYmVsPSR7IlRyeSBpdCB5b3Vyc2VsZiJ9IAogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IlR5cGUgc29tZXRoaW5nIGhlcmUuLi4ifQogICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHt0cnVlfQogICAgICAgICAgQGNoYW5nZT0keyhlMTEpID0+IHsKICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3Iik7CiAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBlMTEuZGV0YWlsLnZhbHVlOwogICAgICB9CiAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJvdXRwdXQtcHJldmlldyI+CiAgICAgICAgICA8ZW0+SFRNTCBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvc3R5bGVzLmpzCnZhciByaWNodGV4dFN0eWxlczsKdmFyIGluaXRfc3R5bGVzNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvc3R5bGVzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogICAgcmljaHRleHRTdHlsZXMgPSBbCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjIwMHB4IiwgIjIwMHB4Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyLmZvY3VzZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAyMDBweCk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA0MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDY5LjglKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53b3JkLWNvdW50IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQuc2hvdyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0IGlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyBidXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuZWRpdG9yLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b29sYmFyLWJ1dHRvbiwKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvdGVtcGxhdGUuanMKdmFyIHJlbmRlclJpY2h0ZXh0Owp2YXIgaW5pdF90ZW1wbGF0ZTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L3RlbXBsYXRlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICByZW5kZXJSaWNodGV4dCA9IChjb21wb25lbnQpID0+IHsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgJHtjb21wb25lbnQubGFiZWwgPyBiMmA8bGFiZWwgY2xhc3M9ImxhYmVsIj4ke2NvbXBvbmVudC5sYWJlbH08L2xhYmVsPmAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1jb250YWluZXIgJHtjb21wb25lbnQuZWRpdG9yPy5pc0ZvY3VzZWQgPyAiZm9jdXNlZCIgOiAiIn0iIHN0eWxlPSItLW1pbi1oZWlnaHQ6ICR7Y29tcG9uZW50Lm1pbkhlaWdodH1weCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci10b29sYmFyIj4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJUb29sYmFyKCl9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluay1pbnB1dCAke2NvbXBvbmVudC5zaG93TGlua0lucHV0ID8gInNob3ciIDogIiJ9Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIHBsYWNlaG9sZGVyPSJFbnRlciBVUkwuLi4iIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUxpbmtJbnB1dEtleWRvd259IC8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5rLWlucHV0LWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwcmltYXJ5IiBAY2xpY2s9JHtjb21wb25lbnQuc2F2ZUxpbmt9PlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHtjb21wb25lbnQucmVtb3ZlTGlua30+UmVtb3ZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7Y29tcG9uZW50LmhpZGVMaW5rSW5wdXR9PkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+PC9kaXY+CiAgICAgICAgICAgICR7Y29tcG9uZW50LnNob3dXb3JkQ291bnQgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IndvcmQtY291bnQiPiR7Y29tcG9uZW50LndvcmRDb3VudH0gd29yZCR7Y29tcG9uZW50LndvcmRDb3VudCAhPT0gMSA/ICJzIiA6ICIifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7Y29tcG9uZW50LmRlc2NyaXB0aW9uID8gYjJgPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPiR7Y29tcG9uZW50LmRlc2NyaXB0aW9ufTwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlNTcsIF9fcnVuSW5pdGlhbGl6ZXJzNTgsIERlZXNJbnB1dFJpY2h0ZXh0Owp2YXIgaW5pdF9jb21wb25lbnQ1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9jb21wb25lbnQuanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVtbzUoKTsKICAgIGluaXRfc3R5bGVzNigpOwogICAgaW5pdF90ZW1wbGF0ZTQoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlNTcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0lucHV0UmljaHRleHQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1yaWNodGV4dCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93V29yZENvdW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5IZWlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9taW5IZWlnaHRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWluSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0xpbmtJbnB1dF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dMaW5rSW5wdXRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dvcmRDb3VudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3dvcmRDb3VudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJbnB1dFJpY2h0ZXh0MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2hvd1dvcmRDb3VudF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICAgICAgfSldOwogICAgICAgICAgX21pbkhlaWdodF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2hvd0xpbmtJbnB1dF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3dvcmRDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNTcodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nyh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU3KHRoaXMsIG51bGwsIF9zaG93V29yZENvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dXb3JkQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dXb3JkQ291bnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1dvcmRDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dXb3JkQ291bnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXb3JkQ291bnRfaW5pdGlhbGl6ZXJzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nyh0aGlzLCBudWxsLCBfbWluSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pbkhlaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbkhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1pbkhlaWdodCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluSGVpZ2h0X2luaXRpYWxpemVycywgX21pbkhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1Nyh0aGlzLCBudWxsLCBfc2hvd0xpbmtJbnB1dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93TGlua0lucHV0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93TGlua0lucHV0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dMaW5rSW5wdXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93TGlua0lucHV0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgX3Nob3dMaW5rSW5wdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTcodGhpcywgbnVsbCwgX3dvcmRDb3VudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3b3JkQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndvcmRDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53b3JkQ291bnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai53b3JkQ291bnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0lucHV0UmljaHRleHQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0MTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTgodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTgodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OCh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTgodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OCh0aGlzLCBfc2hvd1dvcmRDb3VudF9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd1dvcmRDb3VudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93V29yZENvdW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWluSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OCh0aGlzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTgodGhpcywgX21pbkhlaWdodF9pbml0aWFsaXplcnMsIDIwMCkpOwogICAgICAgIGdldCBtaW5IZWlnaHQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWluSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtaW5IZWlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtaW5IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU4KHRoaXMsIF9taW5IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU4KHRoaXMsIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd0xpbmtJbnB1dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93TGlua0lucHV0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93TGlua0lucHV0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd0xpbmtJbnB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OCh0aGlzLCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTgodGhpcywgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgd29yZENvdW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgd29yZENvdW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGVkaXRvckVsZW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczU4KHRoaXMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIGxpbmtJbnB1dEVsZW1lbnQ7CiAgICAgICAgdGlwdGFwQnVuZGxlID0gbnVsbDsKICAgICAgICBlZGl0b3I7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IHJpY2h0ZXh0U3R5bGVzOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiByZW5kZXJSaWNodGV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyVG9vbGJhcigpIHsKICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldFRvb2xiYXJCdXR0b25zKCk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7YnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gewogICAgICAgICAgICBpZiAoYnV0dG9uLmlzRGl2aWRlcikgewogICAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24gJHtidXR0b24uaXNBY3RpdmU/LigpID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0ke2J1dHRvbi5hY3Rpb259CiAgICAgICAgICAgIHRpdGxlPSR7YnV0dG9uLnRpdGxlfQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmVkaXRvcn0KICAgICAgICAgID4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2J1dHRvbi5pY29ufT48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIGA7CiAgICAgICAgICB9KX0KICAgIGA7CiAgICAgICAgfQogICAgICAgIGdldFRvb2xiYXJCdXR0b25zKCkgewogICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJib2xkIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmJvbGQiLAogICAgICAgICAgICAgIHRpdGxlOiAiQm9sZCAoQ3RybCtCKSIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiYm9sZCIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaXRhbGljIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOml0YWxpYyIsCiAgICAgICAgICAgICAgdGl0bGU6ICJJdGFsaWMgKEN0cmwrSSkiLAogICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUl0YWxpYygpLnJ1bigpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaXRhbGljIikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ1bmRlcmxpbmUiLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6dW5kZXJsaW5lIiwKICAgICAgICAgICAgICB0aXRsZTogIlVuZGVybGluZSAoQ3RybCtVKSIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogInN0cmlrZSIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpzdHJpa2V0aHJvdWdoIiwKICAgICAgICAgICAgICB0aXRsZTogIlN0cmlrZXRocm91Z2giLAogICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgic3RyaWtlIikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyBuYW1lOiAiZGl2aWRlcjEiLCB0aXRsZTogIiIsIGlzRGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImgxIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiwKICAgICAgICAgICAgICB0aXRsZTogIkhlYWRpbmcgMSIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7IGxldmVsOiAxIH0pLnJ1bigpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDEgfSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJoMiIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpoZWFkaW5nMiIsCiAgICAgICAgICAgICAgdGl0bGU6ICJIZWFkaW5nIDIiLAogICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKSwKICAgICAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImhlYWRpbmciLCB7IGxldmVsOiAyIH0pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiaDMiLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6aGVhZGluZzMiLAogICAgICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAzIiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDMgfSkucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJoZWFkaW5nIiwgeyBsZXZlbDogMyB9KQogICAgICAgICAgICB9LAogICAgICAgICAgICB7IG5hbWU6ICJkaXZpZGVyMiIsIHRpdGxlOiAiIiwgaXNEaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYnVsbGV0TGlzdCIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpsaXN0IiwKICAgICAgICAgICAgICB0aXRsZTogIkJ1bGxldCBMaXN0IiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJidWxsZXRMaXN0IikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJvcmRlcmVkTGlzdCIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpsaXN0T3JkZXJlZCIsCiAgICAgICAgICAgICAgdGl0bGU6ICJOdW1iZXJlZCBMaXN0IiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVPcmRlcmVkTGlzdCgpLnJ1bigpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgib3JkZXJlZExpc3QiKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImJsb2NrcXVvdGUiLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6cXVvdGUiLAogICAgICAgICAgICAgIHRpdGxlOiAiUXVvdGUiLAogICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJsb2NrcXVvdGUoKS5ydW4oKSwKICAgICAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJsb2NrcXVvdGUiKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImNvZGUiLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6Y29kZSIsCiAgICAgICAgICAgICAgdGl0bGU6ICJDb2RlIiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJjb2RlIikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJjb2RlQmxvY2siLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6ZmlsZUNvZGUiLAogICAgICAgICAgICAgIHRpdGxlOiAiQ29kZSBCbG9jayIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQ29kZUJsb2NrKCkucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJjb2RlQmxvY2siKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7IG5hbWU6ICJkaXZpZGVyMyIsIHRpdGxlOiAiIiwgaXNEaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAibGluayIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpsaW5rIiwKICAgICAgICAgICAgICB0aXRsZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlTGluaygpLAogICAgICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgibGluayIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYWxpZ25MZWZ0IiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduTGVmdCIsCiAgICAgICAgICAgICAgdGl0bGU6ICJBbGlnbiBMZWZ0IiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oImxlZnQiKS5ydW4oKSwKICAgICAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJsZWZ0IiB9KQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogImFsaWduQ2VudGVyIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduQ2VudGVyIiwKICAgICAgICAgICAgICB0aXRsZTogIkFsaWduIENlbnRlciIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKCJjZW50ZXIiKS5ydW4oKSwKICAgICAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJjZW50ZXIiIH0pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiYWxpZ25SaWdodCIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTphbGlnblJpZ2h0IiwKICAgICAgICAgICAgICB0aXRsZTogIkFsaWduIFJpZ2h0IiwKICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oInJpZ2h0IikucnVuKCksCiAgICAgICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAicmlnaHQiIH0pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsgbmFtZTogImRpdmlkZXI0IiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJ1bmRvIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOnVuZG8iLAogICAgICAgICAgICAgIHRpdGxlOiAiVW5kbyAoQ3RybCtaKSIsCiAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5kbygpLnJ1bigpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAicmVkbyIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpyZWRvIiwKICAgICAgICAgICAgICB0aXRsZTogIlJlZG8gKEN0cmwrWSkiLAogICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnJlZG8oKS5ydW4oKQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgdGhpcy50aXB0YXBCdW5kbGUgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRUaXB0YXAoKTsKICAgICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubGluay1pbnB1dCBpbnB1dCIpOwogICAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdG9yKCk7CiAgICAgICAgfQogICAgICAgIGluaXRpYWxpemVFZGl0b3IoKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy50aXB0YXBCdW5kbGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHsgRWRpdG9yLCBTdGFydGVyS2l0LCBVbmRlcmxpbmUsIFRleHRBbGlnbiwgTGluaywgVHlwb2dyYXBoeSB9ID0gdGhpcy50aXB0YXBCdW5kbGU7CiAgICAgICAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3IoewogICAgICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQsCiAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsKICAgICAgICAgICAgICBTdGFydGVyS2l0LmNvbmZpZ3VyZSh7CiAgICAgICAgICAgICAgICBoZWFkaW5nOiB7CiAgICAgICAgICAgICAgICAgIGxldmVsczogWzEsIDIsIDNdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgVW5kZXJsaW5lLmNvbmZpZ3VyZSh7fSksCiAgICAgICAgICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7CiAgICAgICAgICAgICAgICB0eXBlczogWyJoZWFkaW5nIiwgInBhcmFncmFwaCJdCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgTGluay5jb25maWd1cmUoewogICAgICAgICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLAogICAgICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgICAgY2xhc3M6ICJlZGl0b3ItbGluayIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBUeXBvZ3JhcGh5LmNvbmZpZ3VyZSh7fSkKICAgICAgICAgICAgXSwKICAgICAgICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAodGhpcy5wbGFjZWhvbGRlciA/IGA8cD4ke3RoaXMucGxhY2Vob2xkZXJ9PC9wPmAgOiAiIiksCiAgICAgICAgICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IgfSkgPT4gewogICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpOwogICAgICAgICAgICAgIHRoaXMudXBkYXRlV29yZENvdW50KCk7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25TZWxlY3Rpb25VcGRhdGU6ICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25Gb2N1czogKCkgPT4gewogICAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkJsdXI6ICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZVdvcmRDb3VudCgpOwogICAgICAgIH0KICAgICAgICB1cGRhdGVXb3JkQ291bnQoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB0ZXh0OSA9IHRoaXMuZWRpdG9yLmdldFRleHQoKTsKICAgICAgICAgIHRoaXMud29yZENvdW50ID0gdGV4dDkudHJpbSgpID8gdGV4dDkudHJpbSgpLnNwbGl0KC9ccysvKS5sZW5ndGggOiAwOwogICAgICAgIH0KICAgICAgICB0b2dnbGVMaW5rKCkgewogICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJsaW5rIikpIHsKICAgICAgICAgICAgY29uc3QgaHJlZiA9IHRoaXMuZWRpdG9yLmdldEF0dHJpYnV0ZXMoImxpbmsiKS5ocmVmOwogICAgICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSB0cnVlOwogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtJbnB1dEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZSA9IGhyZWYgfHwgIiI7CiAgICAgICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQuZm9jdXMoKTsKICAgICAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5zZWxlY3QoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gdHJ1ZTsKICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5saW5rSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWUgPSAiIjsKICAgICAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNhdmVMaW5rKCkgewogICAgICAgICAgaWYgKCF0aGlzLmVkaXRvciB8fCAhdGhpcy5saW5rSW5wdXRFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7CiAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRMaW5rKHsgaHJlZjogdXJsIH0pLnJ1bigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5oaWRlTGlua0lucHV0KCk7CiAgICAgICAgfQogICAgICAgIHJlbW92ZUxpbmsoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5zZXRMaW5rKCkucnVuKCk7CiAgICAgICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgICAgICB9CiAgICAgICAgaGlkZUxpbmtJbnB1dCgpIHsKICAgICAgICAgIHRoaXMuc2hvd0xpbmtJbnB1dCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5lZGl0b3I/LmNvbW1hbmRzLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUxpbmtJbnB1dEtleWRvd24oZTExKSB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5zYXZlTGluaygpOwogICAgICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5oaWRlTGlua0lucHV0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZTIgIT09IHRoaXMuZWRpdG9yLmdldEhUTUwoKSkgewogICAgICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgdGhpcy5zZXRWYWx1ZSgiIik7CiAgICAgICAgfQogICAgICAgIGZvY3VzKCkgewogICAgICAgICAgdGhpcy5lZGl0b3I/LmNvbW1hbmRzLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLmVkaXRvcikgewogICAgICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczU4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRSaWNodGV4dDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF9yaWNodGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21wb25lbnQ1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXNlYXJjaHNlbGVjdC9kZWVzLWlucHV0LXNlYXJjaHNlbGVjdC5qcwp2YXIgaW5pdF9kZWVzX2lucHV0X3NlYXJjaHNlbGVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtc2VhcmNoc2VsZWN0L2RlZXMtaW5wdXQtc2VhcmNoc2VsZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtc2VhcmNoc2VsZWN0L2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfc2VhcmNoc2VsZWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtc2VhcmNoc2VsZWN0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF9zZWFyY2hzZWxlY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGFncy9kZWVzLWlucHV0LXRhZ3MuZGVtby5qcwp2YXIgX2EzLCBkZW1vRnVuYzQyOwp2YXIgaW5pdF9kZWVzX2lucHV0X3RhZ3NfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGFncy9kZWVzLWlucHV0LXRhZ3MuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgICBkZW1vRnVuYzQyID0gKCkgPT4gYjIoX2EzIHx8IChfYTMgPSBfX3RlbXBsYXRlKFsiXG4gIDxkZWVzLWRlbW93cmFwcGVyPlxuICAgIDxzdHlsZT5cbiAgICAgICIsICdcbiAgICA8L3N0eWxlPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC52YWx1ZT0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgIC52YWx1ZT0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPlxuICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAgIC5sYWJlbD0nLCAiXG4gICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgIC52YWx1ZT0iLCAiXG4gICAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC5yZXF1aXJlZD0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGlzYWJsZWQ9IiwgIlxuICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWZvcm0+XG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dFxuICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAucmVxdWlyZWQ9IiwgIlxuICAgICAgICAgICAgLmtleT0iLCAnXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij5cbiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAgICAgLmxhYmVsPScsICJcbiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgICAgLnJlcXVpcmVkPSIsICJcbiAgICAgICAgICAgICAgLmtleT0iLCAiXG4gICAgICAgICAgICAgIC5zdWdnZXN0aW9ucz0iLCAiXG4gICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgICAgLmtleT0iLCAiXG4gICAgICAgICAgICAgIC5tYXhUYWdzPSIsICJcbiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0XG4gICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgLmlucHV0VHlwZT0iLCAiXG4gICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgLmtleT0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSIsICI+PC9kZWVzLWZvcm0tc3VibWl0PlxuICAgICAgICA8L2RlZXMtZm9ybT5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICBpZD0iaW50ZXJhY3RpdmUtdGFncyJcbiAgICAgICAgICAubGFiZWw9JywgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICBAY2hhbmdlPSIsIGAKICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGFnLXByZXZpZXciIGlkPSJ0YWdzLXByZXZpZXciPgogICAgICAgICAgPGVtIHN0eWxlPSJjb2xvcjogIzk5OTsiPk5vIHRhZ3MgYWRkZWQgeWV0Li4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtcHJldmlldyIgaWQ9InRhZ3MtanNvbiI+CiAgICAgICAgICA8ZW0+SlNPTiBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgIC8vIFVwZGF0ZSBKU09OIHByZXZpZXcKICAgICAgICAgIGNvbnN0IHRhZ3NJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbnRlcmFjdGl2ZS10YWdzJyk7CiAgICAgICAgICB0YWdzSW5wdXQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGpzb25QcmV2aWV3ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RhZ3MtanNvbicpOwogICAgICAgICAgICBpZiAoanNvblByZXZpZXcpIHsKICAgICAgICAgICAgICBqc29uUHJldmlldy50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KGUuZGV0YWlsLnZhbHVlLCBudWxsLCAyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgPFwvc2NyaXB0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmBdKSksIGlgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICMzNzQxNTE7CiAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7CiAgICAgICAgICAgIGNvbG9yOiAjZTRlNGU3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmOWZhZmI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLnRhZy1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzFmMjkzNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRhZy1wcmV2aWV3LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgcGFkZGluZzogNHB4IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZTBlN2ZmOwogICAgICAgICAgY29sb3I6ICM0MzM4Y2E7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMzMTJlODE7CiAgICAgICAgICAgIGNvbG9yOiAjYzdkMmZlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYCwgIjEuIEJhc2ljIFRhZ3MgSW5wdXQiLCAiU2ltcGxlIHRhZyBpbnB1dCB3aXRoIGNvbW1vbiBwcm9ncmFtbWluZyBsYW5ndWFnZXMiLCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIiwgIkFkZCBhIGxhbmd1YWdlLi4uIiwgWyJKYXZhU2NyaXB0IiwgIlR5cGVTY3JpcHQiLCAiUHl0aG9uIiwgIkdvIl0sICJQcmVzcyBFbnRlciBvciBjb21tYSB0byBhZGQgdGFncyIsICIyLiBUYWdzIHdpdGggU3VnZ2VzdGlvbnMiLCAiQXV0by1jb21wbGV0ZSBzdWdnZXN0aW9ucyBmb3IgZmFzdGVyIGlucHV0IiwgIlRlY2ggU3RhY2siLCAiVHlwZSB0byBzZWUgc3VnZ2VzdGlvbnMuLi4iLCBbCiAgICAgICJSZWFjdCIsCiAgICAgICJWdWUiLAogICAgICAiQW5ndWxhciIsCiAgICAgICJTdmVsdGUiLAogICAgICAiTGl0IiwKICAgICAgIk5leHQuanMiLAogICAgICAiTnV4dCIsCiAgICAgICJTdmVsdGVLaXQiLAogICAgICAiTm9kZS5qcyIsCiAgICAgICJEZW5vIiwKICAgICAgIkJ1biIsCiAgICAgICJFeHByZXNzIiwKICAgICAgIkZhc3RpZnkiLAogICAgICAiTmVzdC5qcyIsCiAgICAgICJLb2EiLAogICAgICAiTW9uZ29EQiIsCiAgICAgICJQb3N0Z3JlU1FMIiwKICAgICAgIlJlZGlzIiwKICAgICAgIk15U1FMIiwKICAgICAgIlNRTGl0ZSIsCiAgICAgICJDYXNzYW5kcmEiLAogICAgICAiRG9ja2VyIiwKICAgICAgIkt1YmVybmV0ZXMiLAogICAgICAiQVdTIiwKICAgICAgIkF6dXJlIiwKICAgICAgIkdDUCIsCiAgICAgICJWZXJjZWwiLAogICAgICAiTmV0bGlmeSIKICAgIF0sIFsiUmVhY3QiLCAiTm9kZS5qcyIsICJQb3N0Z3JlU1FMIiwgIkRvY2tlciJdLCAiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwgIjMuIExpbWl0ZWQgVGFncyIsICJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsICJUb3AgMyBTa2lsbHMiLCAiQWRkIHVwIHRvIDMgc2tpbGxzLi4uIiwgMywgWyJEZXNpZ24iLCAiRGV2ZWxvcG1lbnQiXSwgIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCAiQ2F0ZWdvcmllcyAoTWF4IDUpIiwgIlNlbGVjdCBjYXRlZ29yaWVzLi4uIiwgNSwgWyJCbG9nIiwgIlR1dG9yaWFsIiwgIk5ld3MiLCAiUmV2aWV3IiwgIkd1aWRlIiwgIkNhc2UgU3R1ZHkiLCAiSW50ZXJ2aWV3Il0sIFsiVHV0b3JpYWwiLCAiR3VpZGUiXSwgIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCAiNC4gUmVxdWlyZWQgJiBWYWxpZGF0aW9uIiwgIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsICJQcm9qZWN0IFRhZ3MiLCAiQWRkIGF0IGxlYXN0IG9uZSB0YWcuLi4iLCB0cnVlLCAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwgIjUuIERpc2FibGVkIFN0YXRlIiwgIlJlYWQtb25seSB0YWdzIGRpc3BsYXkiLCAiU3lzdGVtIFRhZ3MiLCBbIlN5c3RlbSIsICJQcm90ZWN0ZWQiLCAiUmVhZC1Pbmx5IiwgIkFyY2hpdmUiXSwgdHJ1ZSwgIlRoZXNlIHRhZ3MgY2Fubm90IGJlIG1vZGlmaWVkIiwgIjYuIEZvcm0gSW50ZWdyYXRpb24iLCAiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsICJQcm9qZWN0IE5hbWUiLCAiTXkgQXdlc29tZSBQcm9qZWN0IiwgdHJ1ZSwgIm5hbWUiLCAiVGVjaG5vbG9naWVzIFVzZWQiLCAiQWRkIHRlY2hub2xvZ2llcy4uLiIsIHRydWUsICJ0ZWNobm9sb2dpZXMiLCBbCiAgICAgICJUeXBlU2NyaXB0IiwKICAgICAgIkphdmFTY3JpcHQiLAogICAgICAiUHl0aG9uIiwKICAgICAgIkdvIiwKICAgICAgIlJ1c3QiLAogICAgICAiUmVhY3QiLAogICAgICAiVnVlIiwKICAgICAgIkFuZ3VsYXIiLAogICAgICAiU3ZlbHRlIiwKICAgICAgIk5vZGUuanMiLAogICAgICAiRGVubyIsCiAgICAgICJFeHByZXNzIiwKICAgICAgIkZhc3RBUEkiCiAgICBdLCAiUHJvamVjdCBUYWdzIiwgIkFkZCBkZXNjcmlwdGl2ZSB0YWdzLi4uIiwgInRhZ3MiLCAxMCwgWwogICAgICAiZnJvbnRlbmQiLAogICAgICAiYmFja2VuZCIsCiAgICAgICJmdWxsc3RhY2siLAogICAgICAibW9iaWxlIiwKICAgICAgImRlc2t0b3AiLAogICAgICAid2ViIiwKICAgICAgImFwaSIsCiAgICAgICJkYXRhYmFzZSIsCiAgICAgICJkZXZvcHMiLAogICAgICAidWkvdXgiLAogICAgICAib3BlbnNvdXJjZSIsCiAgICAgICJzYWFzIiwKICAgICAgImVudGVycHJpc2UiLAogICAgICAic3RhcnR1cCIKICAgIF0sICJEZXNjcmlwdGlvbiIsICJ0ZXh0YXJlYSIsICJEZXNjcmliZSB5b3VyIHByb2plY3QuLi4iLCAiZGVzY3JpcHRpb24iLCAiQ3JlYXRlIFByb2plY3QiLCAiNy4gSW50ZXJhY3RpdmUgRGVtbyIsICJBZGQgdGFncyBhbmQgc2VlIHRoZW0gY29sbGVjdGVkIGluIHJlYWwtdGltZSIsICJZb3VyIEludGVyZXN0cyIsICJUeXBlIHlvdXIgaW50ZXJlc3RzLi4uIiwgWwogICAgICAiTXVzaWMiLAogICAgICAiTW92aWVzIiwKICAgICAgIkJvb2tzIiwKICAgICAgIlRyYXZlbCIsCiAgICAgICJQaG90b2dyYXBoeSIsCiAgICAgICJDb29raW5nIiwKICAgICAgIkdhbWluZyIsCiAgICAgICJTcG9ydHMiLAogICAgICAiQXJ0IiwKICAgICAgIlRlY2hub2xvZ3kiLAogICAgICAiRmFzaGlvbiIsCiAgICAgICJGaXRuZXNzIiwKICAgICAgIk5hdHVyZSIsCiAgICAgICJTY2llbmNlIiwKICAgICAgIkhpc3RvcnkiCiAgICBdLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdGFncy1wcmV2aWV3Iik7CiAgICAgIGNvbnN0IHRhZ3MgPSBlMTEuZGV0YWlsLnZhbHVlOwogICAgICBpZiAocHJldmlldykgewogICAgICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcHJldmlldy5pbm5lckhUTUwgPSAnPGVtIHN0eWxlPSJjb2xvcjogIzk5OTsiPk5vIHRhZ3MgYWRkZWQgeWV0Li4uPC9lbT4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmV2aWV3LmlubmVySFRNTCA9IHRhZ3MubWFwKCh0YWcpID0+IGA8c3BhbiBjbGFzcz0idGFnLXByZXZpZXctaXRlbSI+JHt0YWd9PC9zcGFuPmApLmpvaW4oIiIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmpzCnZhciBfX2VzRGVjb3JhdGU1OCwgX19ydW5Jbml0aWFsaXplcnM1OSwgRGVlc0lucHV0VGFnczsKdmFyIGluaXRfZGVlc19pbnB1dF90YWdzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10YWdzL2RlZXMtaW5wdXQtdGFncy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdGFnc19kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU1OCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczU5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzSW5wdXRUYWdzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGFncyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICAgICAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21heFRhZ3NfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYXhUYWdzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdWdnZXN0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N1Z2dlc3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dTdWdnZXN0aW9uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWxpZGF0aW9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0VGFnczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX21heFRhZ3NfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfc2hvd1N1Z2dlc3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnBsYWNlaG9sZGVyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfbWF4VGFnc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhUYWdzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhUYWdzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heFRhZ3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhUYWdzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhUYWdzX2luaXRpYWxpemVycywgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3N1Z2dlc3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN1Z2dlc3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdWdnZXN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zdWdnZXN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN1Z2dlc3Rpb25zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnB1dFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnB1dFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlucHV0VmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pbnB1dFZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3Nob3dTdWdnZXN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93U3VnZ2VzdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dTdWdnZXN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93U3VnZ2VzdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93U3VnZ2VzdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9pbml0aWFsaXplcnMsIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbGlkYXRpb25UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNJbnB1dFRhZ3MyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0MjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiQWRkIHRhZ3MuLi4iKSk7CiAgICAgICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYXhUYWdzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9tYXhUYWdzX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBtYXhUYWdzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21heFRhZ3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gMCBtZWFucyB1bmxpbWl0ZWQKICAgICAgICBzZXQgbWF4VGFncyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21heFRhZ3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3N1Z2dlc3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfbWF4VGFnc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgc3VnZ2VzdGlvbnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHN1Z2dlc3Rpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd1N1Z2dlc3Rpb25zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dTdWdnZXN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1N1Z2dlc3Rpb25zKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1N1Z2dlc3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3Nob3dTdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgICAgICBnZXQgaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnRhZyB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElIC8gMC4yKSIsICJoc2woMjE1IDIwLjIlIDM1LjElIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjMpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUgLyAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMThweDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBhbmltYXRpb246IHRhZ0FwcGVhciAwLjE1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHRhZ0FwcGVhciB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAudGFnLXJlbW92ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDQ2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wOCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDgpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgfQoKICAgICAgLnRhZy1yZW1vdmUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAxMjBweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICAudGFnLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAudGFnLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAvKiBTdWdnZXN0aW9ucyBkcm9wZG93biAqLwogICAgICAuc3VnZ2VzdGlvbnMtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb24gewogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb24uaGlnaGxpZ2h0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLyogVmFsaWRhdGlvbiBzdHlsZXMgKi8KICAgICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgMzAuNiUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogRGVzY3JpcHRpb24gc3R5bGVzICovCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5zdWdnZXN0aW9ucy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VnZ2VzdGlvbnMgPSB0aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gIXRoaXMudmFsdWUuaW5jbHVkZXMoc3VnZ2VzdGlvbikgJiYgc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICR7dGhpcy5sYWJlbCA/IGIyYDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD5gIDogIiJ9CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic3VnZ2VzdGlvbnMtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InRhZ3MtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ29udGFpbmVyQ2xpY2t9CiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5tYXAoKHRhZykgPT4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFnIj4KICAgICAgICAgICAgICAgIDxzcGFuPiR7dGFnfTwvc3Bhbj4KICAgICAgICAgICAgICAgICR7IXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFnLXJlbW92ZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5yZW1vdmVUYWcoZTExLCB0YWcpfT4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgKX0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7IXRoaXMuZGlzYWJsZWQgJiYgKCF0aGlzLm1heFRhZ3MgfHwgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1heFRhZ3MpID8gYjJgCiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgY2xhc3M9InRhZy1pbnB1dCIKICAgICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmlucHV0VmFsdWV9CiAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUlucHV0fQogICAgICAgICAgICAgICAgQGtleWRvd249JHt0aGlzLmhhbmRsZUtleURvd259CiAgICAgICAgICAgICAgICBAZm9jdXM9JHt0aGlzLmhhbmRsZUZvY3VzfQogICAgICAgICAgICAgICAgQGJsdXI9JHt0aGlzLmhhbmRsZUJsdXJ9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zaG93U3VnZ2VzdGlvbnMgJiYgZmlsdGVyZWRTdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAke2ZpbHRlcmVkU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpbmRleDIpID0+IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0ic3VnZ2VzdGlvbiAke2luZGV4MiA9PT0gdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA/ICJoaWdobGlnaHRlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLmFkZFRhZyhzdWdnZXN0aW9uKTsKICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgIEBtb3VzZWVudGVyPSR7KCkgPT4gdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IGluZGV4Mn0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgJHtzdWdnZXN0aW9ufQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUNvbnRhaW5lckNsaWNrKGUxMSkgewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7CiAgICAgICAgICBpZiAoaW5wdXQgJiYgZTExLnRhcmdldCAhPT0gaW5wdXQpIHsKICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKSB8fCB0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSkgewogICAgICAgICAgICBjb25zdCB0YWcgPSB0aGlzLmlucHV0VmFsdWUucmVwbGFjZSgvWyw7XS9nLCAiIikudHJpbSgpOwogICAgICAgICAgICBpZiAodGFnKSB7CiAgICAgICAgICAgICAgdGhpcy5hZGRUYWcodGFnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVLZXlEb3duKGUxMSkgewogICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID49IDAgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+ICF0aGlzLnZhbHVlLmluY2x1ZGVzKHN1Z2dlc3Rpb24pICYmIHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpOwogICAgICAgICAgICAgIGlmIChmaWx0ZXJlZFN1Z2dlc3Rpb25zW3RoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhdKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFkZFRhZyhmaWx0ZXJlZFN1Z2dlc3Rpb25zW3RoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFZhbHVlLnRyaW0oKSkgewogICAgICAgICAgICAgIHRoaXMuYWRkVGFnKHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiICYmICF0aGlzLmlucHV0VmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFnKGUxMSwgdGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93RG93biIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ291bnQgPSB0aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcigoczEwKSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzMTApICYmIHMxMC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCArIDEsIGZpbHRlcmVkQ291bnQgLSAxKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApOwogICAgICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUZvY3VzKCkgewogICAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUJsdXIoKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IC0xOwogICAgICAgICAgfSwgMjAwKTsKICAgICAgICB9CiAgICAgICAgYWRkVGFnKHRhZykgewogICAgICAgICAgaWYgKCF0YWcgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyh0YWcpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAodGhpcy5tYXhUYWdzICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMubWF4VGFncykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCB0YWddOwogICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gIiI7CiAgICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IC0xOwogICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dCkgewogICAgICAgICAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgfQogICAgICAgIHJlbW92ZVRhZyhlMTEsIHRhZykgewogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKCh0OSkgPT4gdDkgIT09IHRhZyk7CiAgICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgICAgICB9CiAgICAgICAgZW1pdENoYW5nZSgpIHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgZ2V0VmFsdWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUyIHx8IFtdOwogICAgICAgIH0KICAgICAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJBdCBsZWFzdCBvbmUgdGFnIGlzIHJlcXVpcmVkIjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dFRhZ3MyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF90YWdzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGFncy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfdGFncygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10ZXh0L2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfdGV4dDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X3RleHQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdG9nZ2xlL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW5wdXRfdG9nZ2xlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdG9nZ2xlL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF90b2dnbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdHlwZWxpc3QvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnLmRlbW8uanMKdmFyIGdlbmVyYXRlUmVwb3J0QmxvY2tzLCBnZW5lcmF0ZVJlY2lwZUJsb2NrcywgaW5pdGlhbGl6ZUVkaXRvcnMsIHNldHVwUHJvZ3JhbW1hdGljRGVtbywgc2V0dXBFeHBvcnREZW1vLCBzZXR1cE91dHB1dEZvcm1hdERlbW8sIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQsIGRlbW9GdW5jNDM7CnZhciBpbml0X2RlZXNfaW5wdXRfd3lzaXd5Z19kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgZ2VuZXJhdGVSZXBvcnRCbG9ja3MgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIGlkOiBgdGl0bGUtJHt0aW1lc3RhbXAyfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgICAgIGNvbnRlbnQ6ICJTeXN0ZW0gUGVyZm9ybWFuY2UgUmVwb3J0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBkYXRlLSR7dGltZXN0YW1wMiArIDF9YCwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogYEdlbmVyYXRlZCBvbjogJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCl9YAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBzdW1tYXJ5LWhlYWRpbmctJHt0aW1lc3RhbXAyICsgMn1gLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICBjb250ZW50OiAiRXhlY3V0aXZlIFN1bW1hcnkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYHN1bW1hcnktJHt0aW1lc3RhbXAyICsgM31gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiAiVGhpcyByZXBvcnQgcHJvdmlkZXMgYW4gYW5hbHlzaXMgb2Ygc3lzdGVtIHBlcmZvcm1hbmNlIG1ldHJpY3Mgb3ZlciB0aGUgbGFzdCAzMCBkYXlzLiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiBgbWV0cmljcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDR9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTIiLAogICAgICAgICAgY29udGVudDogIktleSBNZXRyaWNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBtZXRyaWNzLWxpc3QtJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICAgICAgdHlwZTogImxpc3QiLAogICAgICAgICAgY29udGVudDogIkF2ZXJhZ2UgcmVzcG9uc2UgdGltZTogMTI0bXNcblVwdGltZTogOTkuOTclXG5DUFUgdXRpbGl6YXRpb246IDQ1JVxuTWVtb3J5IHVzYWdlOiAyLjNHQiAvIDhHQiIsCiAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBhbmFseXNpcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDZ9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTIiLAogICAgICAgICAgY29udGVudDogIlBlcmZvcm1hbmNlIEFuYWx5c2lzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBhbmFseXNpcy1xdW90ZS0ke3RpbWVzdGFtcDIgKyA3fWAsCiAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgY29udGVudDogIlN5c3RlbSBwZXJmb3JtYW5jZSByZW1haW5zIHdpdGhpbiBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgd2l0aCByb29tIGZvciBvcHRpbWl6YXRpb24gaW4gbWVtb3J5IG1hbmFnZW1lbnQuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBjb2RlLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgOH1gLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICBjb250ZW50OiAiU2FtcGxlIFF1ZXJ5IFBlcmZvcm1hbmNlIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBjb2RlLWJsb2NrLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgIGNvbnRlbnQ6ICJTRUxFQ1QgQVZHKHJlc3BvbnNlX3RpbWUpIGFzIGF2Z190aW1lLFxuICAgICAgIENPVU5UKCopIGFzIHRvdGFsX3JlcXVlc3RzLFxuICAgICAgIERBVEUoY3JlYXRlZF9hdCkgYXMgZGF0ZVxuRlJPTSBwZXJmb3JtYW5jZV9sb2dzXG5XSEVSRSBjcmVhdGVkX2F0ID49IE5PVygpIC0gSU5URVJWQUwgMzAgREFZXG5HUk9VUCBCWSBEQVRFKGNyZWF0ZWRfYXQpXG5PUkRFUiBCWSBkYXRlIERFU0M7IiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxhbmd1YWdlOiAic3FsIiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYGRpdmlkZXItJHt0aW1lc3RhbXAyICsgMTB9YCwKICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgIGNvbnRlbnQ6ICIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYGZvb3Rlci0ke3RpbWVzdGFtcDIgKyAxMX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiAiUmVwb3J0IGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IFN5c3RlbSBNb25pdG9yIHYyLjUuMCIKICAgICAgICB9CiAgICAgIF07CiAgICB9OwogICAgZ2VuZXJhdGVSZWNpcGVCbG9ja3MgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIGlkOiBgcmVjaXBlLXRpdGxlLSR7dGltZXN0YW1wMn1gLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICBjb250ZW50OiAiQ2xhc3NpYyBNYXJnaGVyaXRhIFBpenphIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGByZWNpcGUtaW50cm8tJHt0aW1lc3RhbXAyICsgMX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiAiQSB0cmFkaXRpb25hbCBJdGFsaWFuIHBpenphIHdpdGggZnJlc2ggYmFzaWwsIG1venphcmVsbGEsIGFuZCB0b21hdG8gc2F1Y2UuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGBpbmdyZWRpZW50cy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDJ9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTIiLAogICAgICAgICAgY29udGVudDogIlx1ezFGMzU1fSBJbmdyZWRpZW50cyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiBgZG91Z2gtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyAzfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgICAgIGNvbnRlbnQ6ICJGb3IgdGhlIERvdWdoOiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiBgZG91Z2gtbGlzdC0ke3RpbWVzdGFtcDIgKyA0fWAsCiAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICBjb250ZW50OiAnNTAwZyB0aXBvICIwMCIgZmxvdXJcbjMyNW1sIHdhcm0gd2F0ZXJcbjEwZyBzYWx0XG43ZyBhY3RpdmUgZHJ5IHllYXN0XG4yIHRic3Agb2xpdmUgb2lsJywKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYHRvcHBpbmdzLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICBjb250ZW50OiAiRm9yIHRoZSBUb3BwaW5nczoiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYHRvcHBpbmdzLWxpc3QtJHt0aW1lc3RhbXAyICsgNn1gLAogICAgICAgICAgdHlwZTogImxpc3QiLAogICAgICAgICAgY29udGVudDogIjQwMGcgY2FubmVkIFNhbiBNYXJ6YW5vIHRvbWF0b2VzXG4yNTBnIGZyZXNoIG1venphcmVsbGFcbkZyZXNoIGJhc2lsIGxlYXZlc1xuRXh0cmEgdmlyZ2luIG9saXZlIG9pbFxuU2FsdCBhbmQgcGVwcGVyIHRvIHRhc3RlIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYGluc3RydWN0aW9ucy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDd9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTIiLAogICAgICAgICAgY29udGVudDogIlx1ezFGNDY4fVx1MjAwRFx1ezFGMzczfSBJbnN0cnVjdGlvbnMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogYHN0ZXBzLWxpc3QtJHt0aW1lc3RhbXAyICsgOH1gLAogICAgICAgICAgdHlwZTogImxpc3QiLAogICAgICAgICAgY29udGVudDogIkRpc3NvbHZlIHllYXN0IGluIHdhcm0gd2F0ZXIgYW5kIGxldCBzdGFuZCBmb3IgNSBtaW51dGVzXG5NaXggZmxvdXIgYW5kIHNhbHQsIGNyZWF0ZSBhIHdlbGwgaW4gY2VudGVyXG5BZGQgeWVhc3QgbWl4dHVyZSBhbmQgb2xpdmUgb2lsXG5LbmVhZCBmb3IgMTAgbWludXRlcyB1bnRpbCBzbW9vdGhcbkxldCByaXNlIGZvciAxLTIgaG91cnMgdW50aWwgZG91YmxlZFxuUHVuY2ggZG93biBhbmQgZGl2aWRlIGludG8gcG9ydGlvbnNcblJvbGwgb3V0IGVhY2ggcG9ydGlvbiB0byAxMi1pbmNoIGNpcmNsZXNcblRvcCB3aXRoIGNydXNoZWQgdG9tYXRvZXMsIG1venphcmVsbGEsIGFuZCBiYXNpbFxuQmFrZSBhdCA0NzVceEIwRiAoMjQ1XHhCMEMpIGZvciAxMC0xMiBtaW51dGVzIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6IGB0aXAtJHt0aW1lc3RhbXAyICsgOX1gLAogICAgICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgICAgIGNvbnRlbnQ6ICJQcm8gdGlwOiBGb3IgYW4gYXV0aGVudGljIHRhc3RlLCB1c2UgYSBwaXp6YSBzdG9uZSBhbmQgcHJlaGVhdCBpdCBpbiB0aGUgb3ZlbiBmb3IgYXQgbGVhc3QgMzAgbWludXRlcyBiZWZvcmUgYmFraW5nLiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiBgZGl2aWRlci0ke3RpbWVzdGFtcDIgKyAxMH1gLAogICAgICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICAgICAgY29udGVudDogIiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiBgc2VydmluZ3MtJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIlNlcnZpbmdzOiA0IHBpenphcyB8IFByZXAgdGltZTogMiBob3VycyB8IENvb2sgdGltZTogMTIgbWludXRlcyIKICAgICAgICB9CiAgICAgIF07CiAgICB9OwogICAgaW5pdGlhbGl6ZUVkaXRvcnMgPSAoY29udGFpbmVyKSA9PiB7CiAgICAgIGNvbnN0IGVkaXRvcnMgPSB7fTsKICAgICAgZWRpdG9ycy5iYXNpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWJhc2ljIik7CiAgICAgIGVkaXRvcnMuYXJ0aWNsZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWFydGljbGUiKTsKICAgICAgZWRpdG9ycy5kcmFnRHJvcCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIik7CiAgICAgIGVkaXRvcnMudHV0b3JpYWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci10dXRvcmlhbCIpOwogICAgICBlZGl0b3JzLm1lZXRpbmcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1tZWV0aW5nIik7CiAgICAgIGVkaXRvcnMucmVjaXBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIik7CiAgICAgIGVkaXRvcnMudGVjaG5pY2FsID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItdGVjaG5pY2FsIik7CiAgICAgIGVkaXRvcnMuZm9ybUludGVncmF0aW9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItZm9ybS1pbnRlZ3JhdGlvbiIpOwogICAgICBlZGl0b3JzLnByb2dyYW1tYXRpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpOwogICAgICBlZGl0b3JzLmV4cG9ydERlbW8gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1leHBvcnQiKTsKICAgICAgcmV0dXJuIGVkaXRvcnM7CiAgICB9OwogICAgc2V0dXBQcm9ncmFtbWF0aWNEZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgICAgIGNvbnN0IHJlcG9ydEJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLWdlbmVyYXRlLXJlcG9ydCIpOwogICAgICBjb25zdCByZWNpcGVCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1nZW5lcmF0ZS1yZWNpcGUiKTsKICAgICAgY29uc3QgY2xlYXJCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1jbGVhci1lZGl0b3IiKTsKICAgICAgaWYgKHJlcG9ydEJ0bikgewogICAgICAgIHJlcG9ydEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZXBvcnRCbG9ja3MoKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHJlY2lwZUJ0bikgewogICAgICAgIHJlY2lwZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZWNpcGVCbG9ja3MoKSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGNsZWFyQnRuKSB7CiAgICAgICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBlZGl0b3IuaW1wb3J0QmxvY2tzKFtdKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHNldHVwRXhwb3J0RGVtbyA9IChjb250YWluZXIsIGVkaXRvcikgPT4gewogICAgICBjb25zdCBleHBvcnRCbG9ja3NCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtYmxvY2tzIik7CiAgICAgIGNvbnN0IGV4cG9ydEh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtaHRtbCIpOwogICAgICBjb25zdCBleHBvcnRNYXJrZG93bkJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLWV4cG9ydC1tYXJrZG93biIpOwogICAgICBjb25zdCBzYXZlU3RhdGVCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zYXZlLXN0YXRlIik7CiAgICAgIGNvbnN0IHJlc3RvcmVTdGF0ZUJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKTsKICAgICAgbGV0IHNhdmVkU3RhdGUgPSBudWxsOwogICAgICBpZiAoZXhwb3J0QmxvY2tzQnRuKSB7CiAgICAgICAgZXhwb3J0QmxvY2tzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgYmxvY2tzID0gZWRpdG9yLmV4cG9ydEJsb2NrcygpOwogICAgICAgICAgY29uc29sZS5sb2coIkV4cG9ydGVkIGJsb2NrczoiLCBibG9ja3MpOwogICAgICAgICAgYWxlcnQoYEV4cG9ydGVkICR7YmxvY2tzLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoZXhwb3J0SHRtbEJ0bikgewogICAgICAgIGV4cG9ydEh0bWxCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBodG1sNyA9IGVkaXRvci5leHBvcnRBc0h0bWwoKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJIVE1MIEV4cG9ydDoiLCBodG1sNyk7CiAgICAgICAgICBhbGVydCgiSFRNTCBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGV4cG9ydE1hcmtkb3duQnRuKSB7CiAgICAgICAgZXhwb3J0TWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBtYXJrZG93biA9IGVkaXRvci5leHBvcnRBc01hcmtkb3duKCk7CiAgICAgICAgICBjb25zb2xlLmxvZygiTWFya2Rvd24gRXhwb3J0OiIsIG1hcmtkb3duKTsKICAgICAgICAgIGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHNhdmVTdGF0ZUJ0bikgewogICAgICAgIHNhdmVTdGF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIHNhdmVkU3RhdGUgPSBlZGl0b3IuZXhwb3J0U3RhdGUoKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLCBzYXZlZFN0YXRlKTsKICAgICAgICAgIGFsZXJ0KCJFZGl0b3Igc3RhdGUgc2F2ZWQhIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHJlc3RvcmVTdGF0ZUJ0bikgewogICAgICAgIHJlc3RvcmVTdGF0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIGlmIChzYXZlZFN0YXRlKSB7CiAgICAgICAgICAgIGVkaXRvci5pbXBvcnRTdGF0ZShzYXZlZFN0YXRlKTsKICAgICAgICAgICAgYWxlcnQoIkVkaXRvciBzdGF0ZSByZXN0b3JlZCEiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCJObyBzYXZlZCBzdGF0ZSBmb3VuZC4gU2F2ZSBzdGF0ZSBmaXJzdCEiKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHNldHVwT3V0cHV0Rm9ybWF0RGVtbyA9IChjb250YWluZXIsIGh0bWxFZGl0b3IsIG1hcmtkb3duRWRpdG9yKSA9PiB7CiAgICAgIGNvbnN0IGh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0Iik7CiAgICAgIGNvbnN0IGh0bWxQcmV2aWV3ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldy1odG1sIik7CiAgICAgIGlmIChodG1sQnRuICYmIGh0bWxQcmV2aWV3ICYmIGh0bWxFZGl0b3IpIHsKICAgICAgICBodG1sQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgaHRtbFByZXZpZXcudGV4dENvbnRlbnQgPSBodG1sRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICBodG1sUHJldmlldy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3QgbWFya2Rvd25CdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LW1hcmtkb3duLW91dHB1dCIpOwogICAgICBjb25zdCBtYXJrZG93blByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LW1hcmtkb3duIik7CiAgICAgIGlmIChtYXJrZG93bkJ0biAmJiBtYXJrZG93blByZXZpZXcgJiYgbWFya2Rvd25FZGl0b3IpIHsKICAgICAgICBtYXJrZG93bkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIG1hcmtkb3duUHJldmlldy50ZXh0Q29udGVudCA9IG1hcmtkb3duRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICBtYXJrZG93blByZXZpZXcuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgcG9wdWxhdGVJbml0aWFsQ29udGVudCA9IChlZGl0b3JzKSA9PiB7CiAgICAgIGlmIChlZGl0b3JzLmFydGljbGUpIHsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGNvbnN0IGFydGljbGVCbG9ja3MgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogImludHJvLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICAgICAgY29udGVudDogIkludHJvZHVjdGlvbiB0byBNb2Rlcm4gV2ViIERldmVsb3BtZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWQ6ICJpbnRyby1wYXJhLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICJNb2Rlcm4gd2ViIGRldmVsb3BtZW50IGhhcyBldm9sdmVkIHNpZ25pZmljYW50bHkgb3ZlciB0aGUgcGFzdCBkZWNhZGUuIEluIHRoaXMgYXJ0aWNsZSwgd2UnbGwgZXhwbG9yZSB0aGUga2V5IHRlY2hub2xvZ2llcyBhbmQgYmVzdCBwcmFjdGljZXMgdGhhdCBkZWZpbmUgd2ViIGRldmVsb3BtZW50IGluIDIwMjQuIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWQ6ICJ0ZWNoLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICAgICAgY29udGVudDogIktleSBUZWNobm9sb2dpZXMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogInRlY2gtbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogIlR5cGVTY3JpcHQgLSBUeXBlLXNhZmUgSmF2YVNjcmlwdCBkZXZlbG9wbWVudFxuV2ViIENvbXBvbmVudHMgLSBOYXRpdmUgY29tcG9uZW50IG1vZGVsXG5FUyBNb2R1bGVzIC0gTW9kZXJuIG1vZHVsZSBzeXN0ZW1cbldlYkFzc2VtYmx5IC0gSGlnaC1wZXJmb3JtYW5jZSBjb21wdXRpbmciLAogICAgICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWQ6ICJxdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICJUaGUgYmVzdCB3YXkgdG8gcHJlZGljdCB0aGUgZnV0dXJlIGlzIHRvIGludmVudCBpdC4gLSBBbGFuIEtheSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlkOiAiZXhhbXBsZS1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICJDb2RlIEV4YW1wbGUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogImNvZGUtZXhhbXBsZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAiY29kZSIsCiAgICAgICAgICAgICAgY29udGVudDogImNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgfVxuICBcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxufSIsCiAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGFuZ3VhZ2U6ICJqYXZhc2NyaXB0IiB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgICBlZGl0b3JzLmFydGljbGUuaW1wb3J0QmxvY2tzKGFydGljbGVCbG9ja3MpOwogICAgICAgIH0sIDUwMCk7CiAgICAgIH0KICAgICAgaWYgKGVkaXRvcnMuZHJhZ0Ryb3ApIHsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGNvbnN0IGRyYWdCbG9ja3MgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogImRyYWctdGl0bGUtIiArIERhdGUubm93KCksCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICAgICAgY29udGVudDogIkRyYWcgJiBEcm9wIERlbW8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogImRyYWctaW50cm8tIiArIERhdGUubm93KCksCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogIlRoaXMgZWRpdG9yIGRlbW9uc3RyYXRlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIFRyeSBkcmFnZ2luZyB0aGVzZSBibG9ja3MgYXJvdW5kISIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlkOiAiZHJhZy1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTIiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICJIb3cgSXQgV29ya3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZDogImRyYWctbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogIkhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHNlZSB0aGUgZHJhZyBoYW5kbGVcbkNsaWNrIGFuZCBob2xkIHRoZSBoYW5kbGUgdG8gc3RhcnQgZHJhZ2dpbmdcbkRyYWcgdG8gcmVvcmRlciBibG9ja3NcblJlbGVhc2UgdG8gZHJvcCBpbiB0aGUgbmV3IHBvc2l0aW9uIiwKICAgICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlkOiAiZHJhZy1xdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICJUaGUgZHJhZyBhbmQgZHJvcCBmZWF0dXJlIG1ha2VzIGl0IGVhc3kgdG8gcmVvcmdhbml6ZSB5b3VyIGNvbnRlbnQgd2l0aG91dCBjdXR0aW5nIGFuZCBwYXN0aW5nLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlkOiAiZHJhZy1kaXZpZGVyLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWQ6ICJkcmFnLWZvb3Rlci0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgICAgICBjb250ZW50OiAiTm90ZTogRGl2aWRlciBibG9ja3MgY2Fubm90IGJlIGRyYWdnZWQsIGJ1dCBvdGhlciBibG9ja3MgY2FuIGJlIG1vdmVkIGFyb3VuZCB0aGVtLiIKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICAgIGVkaXRvcnMuZHJhZ0Ryb3AuaW1wb3J0QmxvY2tzKGRyYWdCbG9ja3MpOwogICAgICAgIH0sIDYwMCk7CiAgICAgIH0KICAgIH07CiAgICBkZW1vRnVuYzQzID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgY29uc3QgZWRpdG9ycyA9IGluaXRpYWxpemVFZGl0b3JzKGVsZW1lbnRBcmcpOwogICAgICBpZiAoZWRpdG9ycy5wcm9ncmFtbWF0aWMpIHsKICAgICAgICBzZXR1cFByb2dyYW1tYXRpY0RlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5wcm9ncmFtbWF0aWMpOwogICAgICB9CiAgICAgIGlmIChlZGl0b3JzLmV4cG9ydERlbW8pIHsKICAgICAgICBzZXR1cEV4cG9ydERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5leHBvcnREZW1vKTsKICAgICAgfQogICAgICBzZXR1cE91dHB1dEZvcm1hdERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5tZWV0aW5nLCBlZGl0b3JzLnJlY2lwZSk7CiAgICAgIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQoZWRpdG9ycyk7CiAgICAgIGNvbnNvbGUubG9nKCJXWVNJV1lHIERlbW8gaW5pdGlhbGl6ZWQgd2l0aCBlZGl0b3JzOiIsIE9iamVjdC5rZXlzKGVkaXRvcnMpKTsKICAgIH19PgogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnBhbmVsLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZlYXR1cmUtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtaWNvbiB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgICAgfQogICAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWJveCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4wNSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAxMDIsIDIwNCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTQ4LCAyNTUsIDAuMSk7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTJweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0cy10aXRsZSB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxODBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICB9CgogICAgICAuc2hvcnRjdXQta2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgICBjb2xvcjogI2JiYjsKICAgICAgICB9CiAgICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICAgICAgY29sb3I6ICNkZGQ7CiAgICAgICAgfQogICAgICB9CgogICAgICAub3V0cHV0LWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMjBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtY2FyZCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm91dHB1dC1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMDQpOwogICAgICAgIGNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXRleHQsICMwZjE3MmEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTUsIDIzLCA0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWF4LWhlaWdodDogMjgwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aGVtZT0nZGFyayddKSAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4wNik7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMTUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXRleHQsICNmNGY0ZjUpOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcudmlzaWJsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5vdXRwdXQtZ3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmMGY4ZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAudGlwcy1ib3ggc3Ryb25nIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCB7CiAgICAgICAgbWFyZ2luOiA4cHggMCAwIDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAudGlwcy1saXN0IGxpIHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjY2NjOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1idXR0b246YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5kZW1vLWJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNTU1OwogICAgICAgICAgY29sb3I6ICNkZGQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5kZW1vLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNDQ0OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNTBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuYmxvY2tzIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEwMiwgMjA0LCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc2LCAxNzUsIDgwLCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5tYXJrZG93biB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuc3RhdGUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTU2LCAzOSwgMTc2LCAwLjEpOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCBzdHJvbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuYmxvY2tzIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICMwMDY2Y2M7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmh0bWwgc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzRDQUY1MDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gc3Ryb25nIHsKICAgICAgICBjb2xvcjogI0ZGOTgwMDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuc3RhdGUgc3Ryb25nIHsKICAgICAgICBjb2xvcjogIzlDMjdCMDsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgcCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBcdXsxRjY4MH0gTW9kZXJuIFdZU0lXWUcgRWRpdG9yIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEEgcG93ZXJmdWwgYmxvY2stYmFzZWQgZWRpdG9yIHdpdGggc2xhc2ggY29tbWFuZHMsIGtleWJvYXJkIHNob3J0Y3V0cywgYW5kIG11bHRpcGxlIG91dHB1dCBmb3JtYXRzLiAKICAgICAgICAgIFBlcmZlY3QgZm9yIGNvbnRlbnQgY3JlYXRpb24sIGJsb2cgcG9zdHMsIGRvY3VtZW50YXRpb24sIGFuZCBtb3JlLgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5TbGFzaCBjb21tYW5kcyAoLyk8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+S2V5Ym9hcmQgc2hvcnRjdXRzPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkJsb2NrLWJhc2VkIGVkaXRpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+RHJhZyAmIGRyb3AgcmVvcmRlcmluZzwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5IVE1MICYgTWFya2Rvd24gb3V0cHV0PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRhcmsgbW9kZSBzdXBwb3J0PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPk1vYmlsZSByZXNwb25zaXZlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItYmFzaWMiCiAgICAgICAgICBsYWJlbD0iUmljaCBUZXh0IEVkaXRvciIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU3RhcnQgdHlwaW5nIG9yIHVzZSAnLycgdG8gaW5zZXJ0IGRpZmZlcmVudCBibG9jayB0eXBlcyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CgogICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ib3giPgogICAgICAgICAgPGg0IGNsYXNzPSJzaG9ydGN1dHMtdGl0bGUiPuKMqO+4jyBLZXlib2FyZCBTaG9ydGN1dHM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXRzLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4vPC9zcGFuPiBTbGFzaCBjb21tYW5kcwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Izwvc3Bhbj4gSGVhZGluZyAxCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4jIzwvc3Bhbj4gSGVhZGluZyAyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4jIyM8L3NwYW4+IEhlYWRpbmcgMwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Pjwvc3Bhbj4gUXVvdGUKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPlxgXGBcYDwvc3Bhbj4gQ29kZSBibG9jawogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Kjwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LTwvc3Bhbj4gQnVsbGV0IGxpc3QKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPjEuPC9zcGFuPiBOdW1iZXJlZCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4tLS08L3NwYW4+IERpdmlkZXIKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjIuIFx1ezFGNEREfSBCbG9nIFBvc3QgRXhhbXBsZSJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBQZXJmZWN0IGZvciBjcmVhdGluZyByaWNoIGNvbnRlbnQgd2l0aCBtdWx0aXBsZSBibG9jayB0eXBlcy4gCiAgICAgICAgICBUaGUgZWRpdG9yIHByZXNlcnZlcyBmb3JtYXR0aW5nIGFuZCBwcm92aWRlcyBhIGNsZWFuIGVkaXRpbmcgZXhwZXJpZW5jZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItYXJ0aWNsZSIKICAgICAgICAgIGxhYmVsPSJCbG9nIFBvc3QgQ29udGVudCIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV3JpdGUgeW91ciBhcnRpY2xlIHVzaW5nIHZhcmlvdXMgZm9ybWF0dGluZyBvcHRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJodG1sIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFx1ezFGNTAwfSBEcmFnICYgRHJvcCBSZW9yZGVyaW5nIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIEVhc2lseSByZWFycmFuZ2UgeW91ciBjb250ZW50IGJsb2NrcyBieSBkcmFnZ2luZyB0aGVtLiAKICAgICAgICAgIEhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHJldmVhbCB0aGUgZHJhZyBoYW5kbGUgb24gdGhlIGxlZnQgc2lkZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItZHJhZ2Ryb3AiCiAgICAgICAgICBsYWJlbD0iRHJhZyAmIERyb3AgRGVtbyIgCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IGRyYWdnaW5nIGJsb2NrcyB0byByZW9yZGVyIHRoZW0gLSBob3ZlciB0byBzZWUgZHJhZyBoYW5kbGVzIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aXBzLWJveCI+CiAgICAgICAgICA8c3Ryb25nPvCfkqEgVGlwczo8L3N0cm9uZz4KICAgICAgICAgIDx1bCBjbGFzcz0idGlwcy1saXN0Ij4KICAgICAgICAgICAgPGxpPkhvdmVyIG92ZXIgYW55IGJsb2NrIHRvIHNlZSB0aGUgZHJhZyBoYW5kbGUgKOKLruKLrikgb24gdGhlIGxlZnQ8L2xpPgogICAgICAgICAgICA8bGk+Q2xpY2sgYW5kIGhvbGQgdGhlIGRyYWcgaGFuZGxlIHRvIHN0YXJ0IGRyYWdnaW5nPC9saT4KICAgICAgICAgICAgPGxpPkJsdWUgaW5kaWNhdG9ycyBzaG93IHdoZXJlIHRoZSBibG9jayB3aWxsIGJlIGRyb3BwZWQ8L2xpPgogICAgICAgICAgICA8bGk+RGl2aWRlciBibG9ja3MgY2Fubm90IGJlIGRyYWdnZWQ8L2xpPgogICAgICAgICAgICA8bGk+VGhlIGVkaXRvciBtYWludGFpbnMgZm9jdXMgb24gdGhlIG1vdmVkIGJsb2NrIGFmdGVyIGRyb3BwaW5nPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBcdXsxRjREQX0gVHV0b3JpYWwgJiBEb2N1bWVudGF0aW9uIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENyZWF0ZSBjb21wcmVoZW5zaXZlIHR1dG9yaWFscyBhbmQgZG9jdW1lbnRhdGlvbiB3aXRoIGNvZGUgZXhhbXBsZXMsIGxpc3RzLCBhbmQgc3RydWN0dXJlZCBjb250ZW50LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci10dXRvcmlhbCIKICAgICAgICAgIGxhYmVsPSJHaXQgVHV0b3JpYWwiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0ZXAtYnktc3RlcCBndWlkZSB3aXRoIGNvbW1hbmRzIGFuZCBleHBsYW5hdGlvbnMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgdmFsdWU9IiMgR2l0IFR1dG9yaWFsIGZvciBCZWdpbm5lcnMKCkdpdCBpcyBhIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gdGhhdCBoZWxwcyB5b3UgdHJhY2sgY2hhbmdlcyBpbiB5b3VyIGNvZGUgb3ZlciB0aW1lLiBUaGlzIHR1dG9yaWFsIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggdGhlIGJhc2ljcy4KCiMjIFByZXJlcXVpc2l0ZXMKCkJlZm9yZSBzdGFydGluZywgZW5zdXJlIHlvdSBoYXZlOgoKLSBHaXQgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtCi0gQSB0ZXh0IGVkaXRvciBvciBJREUKLSBCYXNpYyBjb21tYW5kIGxpbmUga25vd2xlZGdlCgojIyBHZXR0aW5nIFN0YXJ0ZWQKCiMjIyAxLiBDb25maWd1cmUgR2l0CgpGaXJzdCwgc2V0IHVwIHlvdXIgaWRlbnRpdHk6CgpcYFxgXGBiYXNoCmdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICZxdW90O1lvdXIgTmFtZSZxdW90OwpnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgJnF1b3Q7eW91ci5lbWFpbEBleGFtcGxlLmNvbSZxdW90OwpcYFxgXGAKCiMjIyAyLiBJbml0aWFsaXplIGEgUmVwb3NpdG9yeQoKQ3JlYXRlIGEgbmV3IEdpdCByZXBvc2l0b3J5OgoKXGBcYFxgYmFzaApta2RpciBteS1wcm9qZWN0CmNkIG15LXByb2plY3QKZ2l0IGluaXQKXGBcYFxgCgojIyMgMy4gQmFzaWMgR2l0IFdvcmtmbG93CgojIyMjIEFkZGluZyBGaWxlcwoKQ3JlYXRlIGEgZmlsZSBhbmQgYWRkIGl0IHRvIHN0YWdpbmc6CgpcYFxgXGBiYXNoCmVjaG8gJnF1b3Q7IyBNeSBQcm9qZWN0JnF1b3Q7ID4gUkVBRE1FLm1kCmdpdCBhZGQgUkVBRE1FLm1kClxgXGBcYAoKIyMjIyBDb21taXR0aW5nIENoYW5nZXMKClxgXGBcYGJhc2gKZ2l0IGNvbW1pdCAtbSAmcXVvdDtJbml0aWFsIGNvbW1pdCZxdW90OwpcYFxgXGAKCj4gKipCZXN0IFByYWN0aWNlOioqIFdyaXRlIGNsZWFyLCBkZXNjcmlwdGl2ZSBjb21taXQgbWVzc2FnZXMgdGhhdCBleHBsYWluIHdoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgYW5kIHdoeS4KCiMjIyA0LiBXb3JraW5nIHdpdGggQnJhbmNoZXMKCkJyYW5jaGVzIGFsbG93IHlvdSB0byB3b3JrIG9uIGZlYXR1cmVzIGluZGVwZW5kZW50bHk6CgpcYFxgXGBiYXNoCiMgQ3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoCmdpdCBjaGVja291dCAtYiBmZWF0dXJlLWJyYW5jaAoKIyBNYWtlIGNoYW5nZXMgYW5kIGNvbW1pdApnaXQgYWRkIC4KZ2l0IGNvbW1pdCAtbSAmcXVvdDtBZGQgbmV3IGZlYXR1cmUmcXVvdDsKCiMgU3dpdGNoIGJhY2sgdG8gbWFpbgpnaXQgY2hlY2tvdXQgbWFpbgoKIyBNZXJnZSB0aGUgZmVhdHVyZQpnaXQgbWVyZ2UgZmVhdHVyZS1icmFuY2gKXGBcYFxgCgotLS0KCiMjIENvbW1vbiBDb21tYW5kcyBSZWZlcmVuY2UKCnwgQ29tbWFuZCB8IERlc2NyaXB0aW9uIHwKfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfAp8IFxgZ2l0IHN0YXR1c1xgIHwgQ2hlY2sgcmVwb3NpdG9yeSBzdGF0dXMgfAp8IFxgZ2l0IGxvZ1xgIHwgVmlldyBjb21taXQgaGlzdG9yeSB8CnwgXGBnaXQgZGlmZlxgIHwgU2hvdyBjaGFuZ2VzIHwKfCBcYGdpdCBwdWxsXGAgfCBGZXRjaCBhbmQgbWVyZ2UgY2hhbmdlcyB8CnwgXGBnaXQgcHVzaFxgIHwgVXBsb2FkIGNoYW5nZXMgdG8gcmVtb3RlIHwKCiMjIE5leHQgU3RlcHMKCjEuIExlYXJuIGFib3V0IHJlbW90ZSByZXBvc2l0b3JpZXMKMi4gRXhwbG9yZSBhZHZhbmNlZCBHaXQgZmVhdHVyZXMKMy4gUHJhY3RpY2Ugd2l0aCByZWFsIHByb2plY3RzCjQuIENvbnRyaWJ1dGUgdG8gb3BlbiBzb3VyY2UKCioqSGFwcHkgY29kaW5nISoqIPCfmoAiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gXHV7MUY1MDR9IE91dHB1dCBGb3JtYXRzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENob29zZSBiZXR3ZWVuIEhUTUwgYW5kIE1hcmtkb3duIG91dHB1dCBmb3JtYXRzIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzLiAKICAgICAgICAgIFBlcmZlY3QgZm9yIHN0YXRpYyBzaXRlIGdlbmVyYXRvcnMsIGRvY3VtZW50YXRpb24gc3lzdGVtcywgb3IgYW55IGNvbnRlbnQgbWFuYWdlbWVudCB3b3JrZmxvdy4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWNhcmQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgICAgIGlkPSJlZGl0b3ItbWVldGluZyIKICAgICAgICAgICAgICBsYWJlbD0iTWVldGluZyBOb3RlcyIgCiAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlN0cnVjdHVyZWQgbWVldGluZyBkb2N1bWVudGF0aW9uIgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICAgICAgICB2YWx1ZT0iPGgyPlE0IFBsYW5uaW5nIE1lZXRpbmc8L2gyPjxwPjxzdHJvbmc+RGF0ZTo8L3N0cm9uZz4gRGVjZW1iZXIgMTUsIDIwMjQ8YnI+PHN0cm9uZz5BdHRlbmRlZXM6PC9zdHJvbmc+IFByb2R1Y3QgVGVhbSwgRW5naW5lZXJpbmcsIERlc2lnbjwvcD48aDM+QWdlbmRhIEl0ZW1zPC9oMz48b2w+PGxpPlJldmlldyBRMyBhY2hpZXZlbWVudHM8L2xpPjxsaT5TZXQgUTQgb2JqZWN0aXZlczwvbGk+PGxpPlJlc291cmNlIGFsbG9jYXRpb248L2xpPjxsaT5UaW1lbGluZSBkaXNjdXNzaW9uPC9saT48L29sPjxoMz5LZXkgRGVjaXNpb25zPC9oMz48dWw+PGxpPkxhdW5jaCBuZXcgZGFzaGJvYXJkIGZlYXR1cmUgYnkgZW5kIG9mIEphbnVhcnk8L2xpPjxsaT5JbmNyZWFzZSBlbmdpbmVlcmluZyB0ZWFtIGJ5IDIgZGV2ZWxvcGVyczwvbGk+PGxpPkltcGxlbWVudCB3ZWVrbHkgZGVzaWduIHJldmlld3M8L2xpPjwvdWw+PGJsb2NrcXVvdGU+JnF1b3Q7Rm9jdXMgb24gdXNlciBleHBlcmllbmNlIGltcHJvdmVtZW50cyBiYXNlZCBvbiBRMyBmZWVkYmFjayZxdW90OyAtIFByb2R1Y3QgTWFuYWdlcjwvYmxvY2txdW90ZT48aDM+QWN0aW9uIEl0ZW1zPC9oMz48dWw+PGxpPlNhcmFoOiBDcmVhdGUgZGV0YWlsZWQgcHJvamVjdCB0aW1lbGluZTwvbGk+PGxpPk1pa2U6IERyYWZ0IHRlY2huaWNhbCByZXF1aXJlbWVudHM8L2xpPjxsaT5MaXNhOiBTY2hlZHVsZSB1c2VyIHJlc2VhcmNoIHNlc3Npb25zPC9saT48L3VsPjxocj48cD5OZXh0IG1lZXRpbmc6IEphbnVhcnkgNSwgMjAyNTwvcD4iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LWh0bWwtb3V0cHV0IiBjbGFzcz0iZGVtby1idXR0b24iPlNob3cgSFRNTCBPdXRwdXQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgaWQ9Im91dHB1dC1wcmV2aWV3LWh0bWwiIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLXJlY2lwZSIKICAgICAgICAgICAgICBsYWJlbD0iUmVjaXBlIEJsb2cgUG9zdCIgCiAgICAgICAgICAgICAgZGVzY3JpcHRpb249IkZvb2QgYmxvZyB3aXRoIG1peGVkIGNvbnRlbnQiCiAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgICAgICB2YWx1ZT0iIyBVbHRpbWF0ZSBDaG9jb2xhdGUgQ2hpcCBDb29raWVzCgpUaGVyZSdzIG5vdGhpbmcgcXVpdGUgbGlrZSB0aGUgc21lbGwgb2YgZnJlc2hseSBiYWtlZCBjaG9jb2xhdGUgY2hpcCBjb29raWVzLiBUaGlzIHJlY2lwZSBoYXMgYmVlbiBwZXJmZWN0ZWQgb3ZlciB5ZWFycyBvZiB0ZXN0aW5nIQoKIyMgSW5ncmVkaWVudHMKCi0gMsK8IGN1cHMgYWxsLXB1cnBvc2UgZmxvdXIKLSAxIHRzcCBiYWtpbmcgc29kYQotIDEgdHNwIHNhbHQKLSAxIGN1cCBidXR0ZXIsIHNvZnRlbmVkCi0gwr4gY3VwIGdyYW51bGF0ZWQgc3VnYXIKLSDCviBjdXAgcGFja2VkIGJyb3duIHN1Z2FyCi0gMiBsYXJnZSBlZ2dzCi0gMiB0c3AgdmFuaWxsYSBleHRyYWN0Ci0gMiBjdXBzIGNob2NvbGF0ZSBjaGlwcwoKIyMgSW5zdHJ1Y3Rpb25zCgojIyMgU3RlcCAxOiBQcmVwYXJhdGlvbgoKUHJlaGVhdCB5b3VyIG92ZW4gdG8gKiozNzXCsEYgKDE5MMKwQykqKi4gVGhpcyB0ZW1wZXJhdHVyZSBpcyBjcnVjaWFsIGZvciBhY2hpZXZpbmcgdGhlIHBlcmZlY3QgdGV4dHVyZS4KCiMjIyBTdGVwIDI6IE1peCBEcnkgSW5ncmVkaWVudHMKCkluIGEgbWVkaXVtIGJvd2wsIHdoaXNrIHRvZ2V0aGVyOgoKMS4gRmxvdXIKMi4gQmFraW5nIHNvZGEKMy4gU2FsdAoKIyMjIFN0ZXAgMzogQ3JlYW0gQnV0dGVyIGFuZCBTdWdhcnMKClxgXGBcYApDcmVhbSBidXR0ZXIgYW5kIHN1Z2FycyBmb3IgMy00IG1pbnV0ZXMKdW50aWwgbGlnaHQgYW5kIGZsdWZmeQpcYFxgXGAKCj4gKipQcm8gdGlwOioqIFJvb20gdGVtcGVyYXR1cmUgaW5ncmVkaWVudHMgbWl4IGJldHRlciBhbmQgY3JlYXRlIGEgbW9yZSB1bmlmb3JtIGRvdWdoLgoKIyMjIFN0ZXAgNDogQWRkIFdldCBJbmdyZWRpZW50cwoKQmVhdCBpbiBlZ2dzIG9uZSBhdCBhIHRpbWUsIHRoZW4gYWRkIHZhbmlsbGEgZXh0cmFjdC4KCiMjIyBTdGVwIDU6IENvbWJpbmUgYW5kIEJha2UKCkdyYWR1YWxseSBibGVuZCBpbiBmbG91ciBtaXh0dXJlLCB0aGVuIHN0aXIgaW4gY2hvY29sYXRlIGNoaXBzLiBEcm9wIHJvdW5kZWQgdGFibGVzcG9vbnMgb250byB1bmdyZWFzZWQgY29va2llIHNoZWV0cy4KCi0tLQoKKipCYWtpbmcgdGltZToqKiA5LTExIG1pbnV0ZXMgb3IgdW50aWwgZ29sZGVuIGJyb3duCgoqKllpZWxkOioqIEFib3V0IDUgZG96ZW4gY29va2llcyIKICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNob3ctbWFya2Rvd24tb3V0cHV0IiBjbGFzcz0iZGVtby1idXR0b24iPlNob3cgTWFya2Rvd24gT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1tYXJrZG93biIgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIFx1ezFGM0E4fSBBZHZhbmNlZCBFZGl0aW5nIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENyZWF0ZSBjb21wbGV4IGRvY3VtZW50cyB3aXRoIG1peGVkIGNvbnRlbnQgdHlwZXMuIFRoZSBlZGl0b3IgaGFuZGxlcyBhbGwgZm9ybWF0dGluZyBzZWFtbGVzc2x5LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgaWQ9ImVkaXRvci10ZWNobmljYWwiCiAgICAgICAgICBsYWJlbD0iVGVjaG5pY2FsIERvY3VtZW50YXRpb24iIAogICAgICAgICAgZGVzY3JpcHRpb249IkNyZWF0ZSB0ZWNobmljYWwgZG9jcyB3aXRoIGNvZGUgZXhhbXBsZXMgYW5kIHN0cnVjdHVyZWQgY29udGVudCIKICAgICAgICAgIHZhbHVlPSI8aDE+QVBJIERvY3VtZW50YXRpb248L2gxPjxwPldlbGNvbWUgdG8gb3VyIEFQSSBkb2N1bWVudGF0aW9uLiBCZWxvdyB5b3UnbGwgZmluZCBleGFtcGxlcyBvZiBob3cgdG8gdXNlIG91ciBlbmRwb2ludHMuPC9wPjxoMj5BdXRoZW50aWNhdGlvbjwvaDI+PHA+QWxsIEFQSSByZXF1ZXN0cyByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGFuIEFQSSBrZXk6PC9wPjxwcmU+PGNvZGU+QXV0aG9yaXphdGlvbjogQmVhcmVyIFlPVVJfQVBJX0tFWTwvY29kZT48L3ByZT48aDI+RW5kcG9pbnRzPC9oMj48aDM+R0VUIC91c2VyczwvaDM+PHA+UmV0cmlldmUgYSBsaXN0IG9mIHVzZXJzIGZyb20gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT5jdXJsIC1YIEdFVCBodHRwczovL2FwaS5leGFtcGxlLmNvbS91c2VycyBcXAogIC1IICZxdW90O0F1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVkmcXVvdDs8L2NvZGU+PC9wcmU+PGJsb2NrcXVvdGU+Tm90ZTogUmF0ZSBsaW1pdGluZyBhcHBsaWVzIHRvIGFsbCBlbmRwb2ludHMuIFlvdSBjYW4gbWFrZSB1cCB0byAxMDAgcmVxdWVzdHMgcGVyIG1pbnV0ZS48L2Jsb2NrcXVvdGU+PGgzPlBPU1QgL3VzZXJzPC9oMz48cD5DcmVhdGUgYSBuZXcgdXNlciBpbiB0aGUgc3lzdGVtLjwvcD48cHJlPjxjb2RlPnsKICAmcXVvdDtuYW1lJnF1b3Q7OiAmcXVvdDtKb2huIERvZSZxdW90OywKICAmcXVvdDtlbWFpbCZxdW90OzogJnF1b3Q7am9obkBleGFtcGxlLmNvbSZxdW90OywKICAmcXVvdDtyb2xlJnF1b3Q7OiAmcXVvdDt1c2VyJnF1b3Q7Cn08L2NvZGU+PC9wcmU+PGhyPjxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gb3VyIGNvbXBsZXRlIGRvY3VtZW50YXRpb24uPC9wPiIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBcdTI2OTlcdUZFMEYgRm9ybSBJbnRlZ3JhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTZWFtbGVzc2x5IGludGVncmF0ZXMgd2l0aCBkZWVzLWZvcm0gZm9yIGNvbXBsZXRlIGZvcm0gc29sdXRpb25zLiAKICAgICAgICAgIEFsbCBzdGFuZGFyZCBmb3JtIGZlYXR1cmVzIGxpa2UgdmFsaWRhdGlvbiwgcmVxdWlyZWQgZmllbGRzLCBhbmQgZGF0YSBiaW5kaW5nIHdvcmsgb3V0IG9mIHRoZSBib3guCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBUaXRsZSIgCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICB2YWx1ZT0iSG93IHRvIEJ1aWxkIE1vZGVybiBXZWIgQXBwbGljYXRpb25zIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnIAogICAgICAgICAgICBpZD0iZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iCiAgICAgICAgICAgIGxhYmVsPSJBcnRpY2xlIENvbnRlbnQiIAogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV3JpdGUgeW91ciBhcnRpY2xlIGNvbnRlbnQgaGVyZSIKICAgICAgICAgICAgcmVxdWlyZWQ9InRydWUiCiAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRhZ3MKICAgICAgICAgICAgbGFiZWw9IlRhZ3MiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJBZGQgcmVsZXZhbnQgdGFncyBmb3IgeW91ciBhcnRpY2xlIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gXHV7MUY5RTl9IFByb2dyYW1tYXRpYyBCbG9jayBDcmVhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29udGVudCBwcm9ncmFtbWF0aWNhbGx5IHVzaW5nIHRoZSBibG9jayBBUEkgZm9yIGR5bmFtaWMgZG9jdW1lbnQgZ2VuZXJhdGlvbi4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgICAgICAgaWQ9ImVkaXRvci1wcm9ncmFtbWF0aWMiCiAgICAgICAgICBsYWJlbD0iUHJvZ3JhbW1hdGljYWxseSBHZW5lcmF0ZWQgQ29udGVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGNvbnRlbnQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGltcG9ydEJsb2NrcyBBUEkiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZ2VuZXJhdGUtcmVwb3J0IiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBHZW5lcmF0ZSBSZXBvcnQKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZ2VuZXJhdGUtcmVjaXBlIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBHZW5lcmF0ZSBSZWNpcGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tY2xlYXItZWRpdG9yIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBDbGVhciBFZGl0b3IKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gXHV7MUY0RTR9IEV4cG9ydC9JbXBvcnQgRmVhdHVyZXMifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgVGhlIFdZU0lXWUcgZWRpdG9yIHByb3ZpZGVzIG11bHRpcGxlIGV4cG9ydCBmb3JtYXRzIGFuZCBsb3NzbGVzcyBzYXZlL3Jlc3RvcmUgY2FwYWJpbGl0aWVzIGZvciBtYXhpbXVtIGZsZXhpYmlsaXR5LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgYmxvY2tzIj4KICAgICAgICAgICAgPHN0cm9uZz5Mb3NzbGVzcyBCbG9ja3M8L3N0cm9uZz4KICAgICAgICAgICAgPHA+RXhwb3J0IGFuZCBpbXBvcnQgcmF3IGJsb2NrIHN0cnVjdHVyZSBmb3IgcGVyZmVjdCByb3VuZC10cmlwIGVkaXRpbmc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydC1pbmZvLWNhcmQgaHRtbCI+CiAgICAgICAgICAgIDxzdHJvbmc+SFRNTCBFeHBvcnQ8L3N0cm9uZz4KICAgICAgICAgICAgPHA+R2V0IGNsZWFuLCBzZW1hbnRpYyBIVE1MIHJlZ2FyZGxlc3Mgb2Ygb3V0cHV0IGZvcm1hdCBzZXR0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIG1hcmtkb3duIj4KICAgICAgICAgICAgPHN0cm9uZz5NYXJrZG93biBFeHBvcnQ8L3N0cm9uZz4KICAgICAgICAgICAgPHA+RXhwb3J0IGFzIE1hcmtkb3duIGZvciBkb2NzLCBSRUFETUVzLCBhbmQgc3RhdGljIHNpdGVzPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIHN0YXRlIj4KICAgICAgICAgICAgPHN0cm9uZz5TdGF0ZSBNYW5hZ2VtZW50PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPlNhdmUgYW5kIHJlc3RvcmUgY29tcGxldGUgZWRpdG9yIHN0YXRlIGluY2x1ZGluZyBzZXR0aW5nczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItZXhwb3J0IgogICAgICAgICAgbGFiZWw9IkV4cG9ydCBEZW1vIEVkaXRvciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJUcnkgdGhlIGV4cG9ydCBidXR0b25zIGJlbG93IHRvIHNlZSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdHMiCiAgICAgICAgICB2YWx1ZT0iPGgxPlNvZnR3YXJlIFJlbGVhc2UgTm90ZXM8L2gxPjxwPjxzdHJvbmc+VmVyc2lvbiAyLjUuMDwvc3Ryb25nPiAtIFJlbGVhc2VkIERlY2VtYmVyIDE1LCAyMDI0PC9wPjxoMj7wn46JIE5ldyBGZWF0dXJlczwvaDI+PHVsPjxsaT5BZGRlZCBkYXJrIG1vZGUgc3VwcG9ydCBhY3Jvc3MgYWxsIGNvbXBvbmVudHM8L2xpPjxsaT5JbXBsZW1lbnRlZCByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBmZWF0dXJlczwvbGk+PGxpPk5ldyBkYXNoYm9hcmQgYW5hbHl0aWNzIHdpZGdldHM8L2xpPjxsaT5FeHBvcnQgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIHJlcG9ydCB0eXBlczwvbGk+PC91bD48aDI+8J+QmyBCdWcgRml4ZXM8L2gyPjx1bD48bGk+Rml4ZWQgbWVtb3J5IGxlYWsgaW4gZGF0YSBwcm9jZXNzaW5nIG1vZHVsZTwvbGk+PGxpPlJlc29sdmVkIGF1dGhlbnRpY2F0aW9uIHRpbWVvdXQgaXNzdWVzPC9saT48bGk+Q29ycmVjdGVkIHRpbWV6b25lIGhhbmRsaW5nIGluIHNjaGVkdWxlZCB0YXNrczwvbGk+PC91bD48aDI+4pqhIFBlcmZvcm1hbmNlIEltcHJvdmVtZW50czwvaDI+PGJsb2NrcXVvdGU+UGFnZSBsb2FkIHRpbWVzIHJlZHVjZWQgYnkgNDAlIHRocm91Z2ggbGF6eSBsb2FkaW5nIGFuZCBjb2RlIHNwbGl0dGluZzwvYmxvY2txdW90ZT48aDI+8J+UpyBUZWNobmljYWwgRGV0YWlsczwvaDI+PHByZT48Y29kZT4vLyBOZXcgQVBJIGVuZHBvaW50IGZvciBiYXRjaCBvcGVyYXRpb25zClBPU1QgL2FwaS92Mi9iYXRjaAp7CiAgJnF1b3Q7b3BlcmF0aW9ucyZxdW90OzogWwogICAgeyAmcXVvdDttZXRob2QmcXVvdDs6ICZxdW90O0dFVCZxdW90OywgJnF1b3Q7cGF0aCZxdW90OzogJnF1b3Q7L3VzZXJzLzEyMyZxdW90OyB9LAogICAgeyAmcXVvdDttZXRob2QmcXVvdDs6ICZxdW90O1BVVCZxdW90OywgJnF1b3Q7cGF0aCZxdW90OzogJnF1b3Q7L3NldHRpbmdzJnF1b3Q7LCAmcXVvdDtib2R5JnF1b3Q7OiB7Li4ufSB9CiAgXQp9PC9jb2RlPjwvcHJlPjxoMj7wn5KhIE1pZ3JhdGlvbiBHdWlkZTwvaDI+PG9sPjxsaT5VcGRhdGUgeW91ciBkZXBlbmRlbmNpZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uczwvbGk+PGxpPlJ1biBkYXRhYmFzZSBtaWdyYXRpb25zOiA8Y29kZT5ucG0gcnVuIG1pZ3JhdGU8L2NvZGU+PC9saT48bGk+Q2xlYXIgY2FjaGU6IDxjb2RlPm5wbSBydW4gY2FjaGU6Y2xlYXI8L2NvZGU+PC9saT48bGk+UmVzdGFydCBhbGwgc2VydmljZXM8L2xpPjwvb2w+PGhyPjxwPkZvciBxdWVzdGlvbnMgb3IgaXNzdWVzLCBwbGVhc2UgY29udGFjdCB0aGUgZGV2ZWxvcG1lbnQgdGVhbSBvciBmaWxlIGEgdGlja2V0IGluIG91ciBpc3N1ZSB0cmFja2VyLjwvcD4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWJsb2NrcyIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IEJsb2NrcwogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1leHBvcnQtaHRtbCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIEhUTUwKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LW1hcmtkb3duIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBFeHBvcnQgYXMgTWFya2Rvd24KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2F2ZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgU2F2ZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1yZXN0b3JlLXN0YXRlIiBjbGFzcz0iZGVtby1idXR0b24iPgogICAgICAgICAgICBSZXN0b3JlIFN0YXRlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcudHlwZXMuanMKdmFyIGluaXRfd3lzaXd5Z190eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLnR5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLnNob3J0Y3V0cy5qcwp2YXIgV3lzaXd5Z1Nob3J0Y3V0czsKdmFyIGluaXRfd3lzaXd5Z19zaG9ydGN1dHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zaG9ydGN1dHMuanMiKCkgewogICAgaW5pdF93eXNpd3lnX3R5cGVzKCk7CiAgICBXeXNpd3lnU2hvcnRjdXRzID0gY2xhc3MgewogICAgICBzdGF0aWMgSEVBRElOR19QQVRURVJOUyA9IFsKICAgICAgICB7IHBhdHRlcm46IC9eI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMSIgfSwKICAgICAgICB7IHBhdHRlcm46IC9eIyNbXHNcdTAwQTBdJC8sIHR5cGU6ICJoZWFkaW5nLTIiIH0sCiAgICAgICAgeyBwYXR0ZXJuOiAvXiMjI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMyIgfQogICAgICBdOwogICAgICBzdGF0aWMgTElTVF9QQVRURVJOUyA9IFsKICAgICAgICB7IHBhdHRlcm46IC9eWyotXVtcc1x1MDBBMF0kLywgdHlwZTogImJ1bGxldCIgfSwKICAgICAgICB7IHBhdHRlcm46IC9eKFxkKylcLltcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0sCiAgICAgICAgeyBwYXR0ZXJuOiAvXihcZCspXClbXHNcdTAwQTBdJC8sIHR5cGU6ICJvcmRlcmVkIiB9CiAgICAgIF07CiAgICAgIHN0YXRpYyBRVU9URV9QQVRURVJOID0gL14+W1xzXHUwMEEwXSQvOwogICAgICBzdGF0aWMgQ09ERV9QQVRURVJOID0gL15gYGAkLzsKICAgICAgc3RhdGljIERJVklERVJfUEFUVEVSTlMgPSBbIi0tLSIsICIqKioiLCAiX19fIl07CiAgICAgIHN0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50MykgewogICAgICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCB0eXBlOiB0eXBlNSB9IG9mIHRoaXMuSEVBRElOR19QQVRURVJOUykgewogICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChjb250ZW50MykpIHsKICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZTUgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgc3RhdGljIGNoZWNrTGlzdFNob3J0Y3V0KGNvbnRlbnQzKSB7CiAgICAgICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5MSVNUX1BBVFRFUk5TKSB7CiAgICAgICAgICBpZiAocGF0dGVybi50ZXN0KGNvbnRlbnQzKSkgewogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAibGlzdCIsIGxpc3RUeXBlOiB0eXBlNSB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBzdGF0aWMgY2hlY2tRdW90ZVNob3J0Y3V0KGNvbnRlbnQzKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuUVVPVEVfUEFUVEVSTi50ZXN0KGNvbnRlbnQzKTsKICAgICAgfQogICAgICBzdGF0aWMgY2hlY2tDb2RlU2hvcnRjdXQoY29udGVudDMpIHsKICAgICAgICByZXR1cm4gdGhpcy5DT0RFX1BBVFRFUk4udGVzdChjb250ZW50Myk7CiAgICAgIH0KICAgICAgc3RhdGljIGNoZWNrRGl2aWRlclNob3J0Y3V0KGNvbnRlbnQzKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuRElWSURFUl9QQVRURVJOUy5pbmNsdWRlcyhjb250ZW50Myk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldFNsYXNoTWVudUl0ZW1zKCkgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICB7IHR5cGU6ICJwYXJhZ3JhcGgiLCBsYWJlbDogIlBhcmFncmFwaCIsIGljb246ICJsdWNpZGU6cGlsY3JvdyIgfSwKICAgICAgICAgIHsgdHlwZTogImhlYWRpbmctMSIsIGxhYmVsOiAiSGVhZGluZyAxIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMSIgfSwKICAgICAgICAgIHsgdHlwZTogImhlYWRpbmctMiIsIGxhYmVsOiAiSGVhZGluZyAyIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMiIgfSwKICAgICAgICAgIHsgdHlwZTogImhlYWRpbmctMyIsIGxhYmVsOiAiSGVhZGluZyAzIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMyIgfSwKICAgICAgICAgIHsgdHlwZTogInF1b3RlIiwgbGFiZWw6ICJRdW90ZSIsIGljb246ICJsdWNpZGU6cXVvdGUiIH0sCiAgICAgICAgICB7IHR5cGU6ICJjb2RlIiwgbGFiZWw6ICJDb2RlIEJsb2NrIiwgaWNvbjogImx1Y2lkZTpmaWxlQ29kZSIgfSwKICAgICAgICAgIHsgdHlwZTogImxpc3QiLCBsYWJlbDogIkJ1bGxldCBMaXN0IiwgaWNvbjogImx1Y2lkZTpsaXN0IiB9LAogICAgICAgICAgeyB0eXBlOiAiaW1hZ2UiLCBsYWJlbDogIkltYWdlIiwgaWNvbjogImx1Y2lkZTppbWFnZSIgfSwKICAgICAgICAgIHsgdHlwZTogImRpdmlkZXIiLCBsYWJlbDogIkRpdmlkZXIiLCBpY29uOiAibHVjaWRlOm1pbnVzIiB9LAogICAgICAgICAgeyB0eXBlOiAieW91dHViZSIsIGxhYmVsOiAiWW91VHViZSIsIGljb246ICJsdWNpZGU6eW91dHViZSIgfSwKICAgICAgICAgIHsgdHlwZTogIm1hcmtkb3duIiwgbGFiZWw6ICJNYXJrZG93biIsIGljb246ICJsdWNpZGU6ZmlsZVRleHQiIH0sCiAgICAgICAgICB7IHR5cGU6ICJodG1sIiwgbGFiZWw6ICJIVE1MIiwgaWNvbjogImx1Y2lkZTpjb2RlIiB9LAogICAgICAgICAgeyB0eXBlOiAiYXR0YWNobWVudCIsIGxhYmVsOiAiRmlsZSBBdHRhY2htZW50IiwgaWNvbjogImx1Y2lkZTpwYXBlcmNsaXAiIH0KICAgICAgICBdOwogICAgICB9CiAgICAgIHN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKSB7CiAgICAgICAgcmV0dXJuIGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1zbGFzaC1tZW51LmpzCnZhciBfX2VzRGVjb3JhdGU1OSwgX19ydW5Jbml0aWFsaXplcnM2MCwgRGVlc1NsYXNoTWVudTsKdmFyIGluaXRfZGVlc19zbGFzaF9tZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X3d5c2l3eWdfdHlwZXMoKTsKICAgIGluaXRfd3lzaXd5Z19zaG9ydGN1dHMoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTU5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjAgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNTbGFzaE1lbnUgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zbGFzaC1tZW51IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9wb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbHRlcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbHRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWx0ZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1NsYXNoTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfcG9zaXRpb25fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9maWx0ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfbWVudVpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52aXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX2ZpbHRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbHRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maWx0ZXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlcl9pbml0aWFsaXplcnMsIF9maWx0ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3NlbGVjdGVkSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZEluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2VsZWN0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJbmRleF9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9tZW51WkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudVpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICAgICAgc3RhdGljIGdldEluc3RhbmNlKCkgewogICAgICAgICAgaWYgKCFEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSkgewogICAgICAgICAgICBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzU2xhc2hNZW51MigpOwogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKERlZXNTbGFzaE1lbnUyLmluc3RhbmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZTsKICAgICAgICB9CiAgICAgICAgI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAgICAgZ2V0IHZpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgICAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfZmlsdGVyX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZmlsdGVyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfZmlsdGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfc2VsZWN0ZWRJbmRleF9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgc2VsZWN0ZWRJbmRleCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9tZW51WkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICAgICAgZ2V0IG1lbnVaSW5kZXgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbWVudVpJbmRleCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY2FsbGJhY2sgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIGhlaWdodDogMDsKICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKC0ycHgpOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciwKICAgICAgLnNsYXNoLW1lbnUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciAuaWNvbiwKICAgICAgLnNsYXNoLW1lbnUtaXRlbS5zZWxlY3RlZCAuaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzbGFzaC1tZW51LWl0ZW0gJHtpbmRleDIgPT09IHRoaXMuc2VsZWN0ZWRJbmRleCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2l0ZW0udHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtpbmRleDJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHtpdGVtLmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0RmlsdGVyZWRNZW51SXRlbXMoKSB7CiAgICAgICAgICBjb25zdCBhbGxJdGVtcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgICAgIHJldHVybiBhbGxJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuZmlsdGVyID09PSAiIiB8fCBpdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXIudG9Mb3dlckNhc2UoKSkpOwogICAgICAgIH0KICAgICAgICBzZWxlY3RJdGVtKHR5cGU1KSB7CiAgICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykgewogICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHR5cGU1KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgIH0KICAgICAgICBzaG93KHBvc2l0aW9uMywgY2FsbGJhY2spIHsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjM7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsKICAgICAgICAgIHRoaXMubWVudVpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaGlkZSgpIHsKICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZUZpbHRlcihmaWx0ZXIyKSB7CiAgICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjI7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICAgIH0KICAgICAgICBuYXZpZ2F0ZShkaXJlY3Rpb24pIHsKICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpOwogICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gImRvd24iKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxKSAlIGl0ZW1zLmxlbmd0aDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiB0aGlzLnNlbGVjdGVkSW5kZXggLSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxlY3RDdXJyZW50KCkgewogICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgICAgICBpZiAoaXRlbXNbdGhpcy5zZWxlY3RlZEluZGV4XSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbXNbdGhpcy5zZWxlY3RlZEluZGV4XS50eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zbGFzaC1tZW51Iik7CiAgICAgICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpOwogICAgICAgICAgICBpZiAobWVudUl0ZW0pIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBtZW51SXRlbS5nZXRBdHRyaWJ1dGUoImRhdGEtaXRlbS10eXBlIik7CiAgICAgICAgICAgICAgaWYgKGl0ZW1UeXBlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbVR5cGUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTsKICAgICAgICAgICAgaWYgKG1lbnVJdGVtKSB7CiAgICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gcGFyc2VJbnQobWVudUl0ZW0uZ2V0QXR0cmlidXRlKCJkYXRhLWl0ZW0taW5kZXgiKSB8fCAiMCIsIDEwKTsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHRydWUpOwogICAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTsKICAgICAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczYwKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2VsZWN0aW9uLmpzCnZhciBXeXNpd3lnU2VsZWN0aW9uOwp2YXIgaW5pdF93eXNpd3lnX3NlbGVjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLnNlbGVjdGlvbi5qcyIoKSB7CiAgICBXeXNpd3lnU2VsZWN0aW9uID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogR2V0cyBzZWxlY3Rpb24gaW5mbyB0aGF0IHdvcmtzIGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgICAgICogQHBhcmFtIHNoYWRvd1Jvb3RzIC0gU2hhZG93IHJvb3RzIHRvIGluY2x1ZGUgaW4gdGhlIHNlbGVjdGlvbiBzZWFyY2gKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGNvbnNvbGUubG9nKCJXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8gLSBzZWxlY3Rpb246Iiwgc2VsZWN0aW9uLCAicmFuZ2VDb3VudDoiLCBzZWxlY3Rpb24/LnJhbmdlQ291bnQpOwogICAgICAgIGlmICghc2VsZWN0aW9uKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCJnZXRDb21wb3NlZFJhbmdlcyIgaW4gc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24uZ2V0Q29tcG9zZWRSYW5nZXMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJVc2luZyBnZXRDb21wb3NlZFJhbmdlcyB3aXRoIiwgc2hhZG93Um9vdHMubGVuZ3RoLCAic2hhZG93IHJvb3RzIik7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByYW5nZXMgPSBzZWxlY3Rpb24uZ2V0Q29tcG9zZWRSYW5nZXMoeyBzaGFkb3dSb290cyB9KTsKICAgICAgICAgICAgY29uc29sZS5sb2coImdldENvbXBvc2VkUmFuZ2VzIHJldHVybmVkIiwgcmFuZ2VzLmxlbmd0aCwgInJhbmdlcyIpOwogICAgICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBjb25zdCByYW5nZTIgPSByYW5nZXNbMF07CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiByYW5nZTIuc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogcmFuZ2UyLnN0YXJ0T2Zmc2V0LAogICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiByYW5nZTIuZW5kT2Zmc2V0LAogICAgICAgICAgICAgICAgY29sbGFwc2VkOiByYW5nZTIuY29sbGFwc2VkCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJnZXRDb21wb3NlZFJhbmdlcyBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBnZXRSYW5nZUF0OiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5sb2coImdldENvbXBvc2VkUmFuZ2VzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGZhbGxiYWNrIik7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHJhbmdlMi5zdGFydENvbnRhaW5lciwKICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHJhbmdlMi5zdGFydE9mZnNldCwKICAgICAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgICAgICBlbmRPZmZzZXQ6IHJhbmdlMi5lbmRPZmZzZXQsCiAgICAgICAgICAgIGNvbGxhcHNlZDogcmFuZ2UyLmNvbGxhcHNlZAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrcyBpZiBhIHNlbGVjdGlvbiBpcyB3aXRoaW4gYSBzcGVjaWZpYyBlbGVtZW50IChjb25zaWRlcmluZyBTaGFkb3cgRE9NKQogICAgICAgKi8KICAgICAgc3RhdGljIGlzU2VsZWN0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCBzaGFkb3dSb290KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHNoYWRvd1Jvb3QgPyB0aGlzLmdldFNlbGVjdGlvbkluZm8oc2hhZG93Um9vdCkgOiB0aGlzLmdldFNlbGVjdGlvbkluZm8oKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpIHx8IGVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0cyB0aGUgc2VsZWN0ZWQgdGV4dCBhY3Jvc3MgU2hhZG93IERPTSBib3VuZGFyaWVzCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRUZXh0KCkgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICByZXR1cm4gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnRvU3RyaW5nKCkgOiAiIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIHJhbmdlIGZyb20gc2VsZWN0aW9uIGluZm8KICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVSYW5nZUZyb21JbmZvKGluZm8pIHsKICAgICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIHJhbmdlMi5zZXRTdGFydChpbmZvLnN0YXJ0Q29udGFpbmVyLCBpbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICByYW5nZTIuc2V0RW5kKGluZm8uZW5kQ29udGFpbmVyLCBpbmZvLmVuZE9mZnNldCk7CiAgICAgICAgcmV0dXJuIHJhbmdlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0cyBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlICh3b3JrcyB3aXRoIFNoYWRvdyBET00pCiAgICAgICAqLwogICAgICBzdGF0aWMgc2V0U2VsZWN0aW9uRnJvbVJhbmdlKHJhbmdlMikgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgY3Vyc29yIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGEgc3BlY2lmaWMgZWxlbWVudAogICAgICAgKi8KICAgICAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCAuLi5zaGFkb3dSb290cykgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBzaGFkb3dSb290cy5sZW5ndGggPiAwID8gdGhpcy5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKSA6IHRoaXMuZ2V0U2VsZWN0aW9uSW5mbygpOwogICAgICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudDQpOwogICAgICAgICAgY29uc3QgaXNDb250YWluZWQgPSB0aGlzLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGVsZW1lbnQ0LCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGlmIChpc0NvbnRhaW5lZCkgewogICAgICAgICAgICByYW5nZTIuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSByYW5nZTIudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCB0ZXh0OSA9IGVsZW1lbnQ0LnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25UZXh0ID0gc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQgPT09IDApIHsKICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0ID09PSBzZWxlY3Rpb25UZXh0Lmxlbmd0aCkgewogICAgICAgICAgICAgIHJldHVybiB0ZXh0OS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc29sZS53YXJuKCJTZWxlY3Rpb24gY29udGFpbmVyIG5vdCB3aXRoaW4gZWxlbWVudCwgdXNpbmcgdGV4dCBtYXRjaGluZyBmYWxsYmFjayIpOwogICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldDsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbjoiLCBlcnJvcik7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgY3Vyc29yIHBvc2l0aW9uIGZyb20gbW91c2UgY29vcmRpbmF0ZXMgd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnQKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXRDdXJzb3JQb3NpdGlvbkZyb21Qb2ludCh4NCwgeTQsIGNvbnRhaW5lciwgLi4uc2hhZG93Um9vdHMpIHsKICAgICAgICBpZiAoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpIHsKICAgICAgICAgIGxldCBjYXJldFBvcyA9IG51bGw7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYXJldFBvcyA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeDQsIHk0LCAuLi5zaGFkb3dSb290cyk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgY2FyZXRQb3MgPSBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHg0LCB5NCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2FyZXRQb3MgJiYgY29udGFpbmVyLmNvbnRhaW5zKGNhcmV0UG9zLm9mZnNldE5vZGUpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9mZnNldEluRWxlbWVudChjYXJldFBvcy5vZmZzZXROb2RlLCBjYXJldFBvcy5vZmZzZXQsIGNvbnRhaW5lcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgiY2FyZXRSYW5nZUZyb21Qb2ludCIgaW4gZG9jdW1lbnQpIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoeDQsIHk0KTsKICAgICAgICAgIGlmIChyYW5nZTIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHJhbmdlMi5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2Zmc2V0SW5FbGVtZW50KHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0LCBjb250YWluZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGVscGVyIHRvIGdldCB0aGUgdG90YWwgY2hhcmFjdGVyIG9mZnNldCBvZiBhIHBvc2l0aW9uIHdpdGhpbiBhbiBlbGVtZW50CiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0T2Zmc2V0SW5FbGVtZW50KG5vZGUyLCBvZmZzZXQsIGNvbnRhaW5lcikgewogICAgICAgIGxldCB0b3RhbE9mZnNldCA9IDA7CiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7CiAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgICAgICBsZXQgdGV4dE5vZGU7CiAgICAgICAgd2hpbGUgKHRleHROb2RlID0gd2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gbm9kZTIpIHsKICAgICAgICAgICAgdG90YWxPZmZzZXQgKz0gb2Zmc2V0OwogICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG90YWxPZmZzZXQgKz0gdGV4dE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmQgPyB0b3RhbE9mZnNldCA6IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldHMgY3Vyc29yIHBvc2l0aW9uIGluIGFuIGVsZW1lbnQKICAgICAgICovCiAgICAgIHN0YXRpYyBzZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgcG9zaXRpb24zKSB7CiAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlbGVtZW50NCwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIG51bGwpOwogICAgICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSAwOwogICAgICAgIGxldCB0YXJnZXROb2RlID0gbnVsbDsKICAgICAgICBsZXQgdGFyZ2V0T2Zmc2V0ID0gMDsKICAgICAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gd2Fsa2VyLmN1cnJlbnROb2RlOwogICAgICAgICAgY29uc3Qgbm9kZUxlbmd0aCA9IG5vZGUyLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gKyBub2RlTGVuZ3RoID49IHBvc2l0aW9uMykgewogICAgICAgICAgICB0YXJnZXROb2RlID0gbm9kZTI7CiAgICAgICAgICAgIHRhcmdldE9mZnNldCA9IHBvc2l0aW9uMyAtIGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gbm9kZUxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHRhcmdldE5vZGUpIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgdGFyZ2V0T2Zmc2V0KTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uRnJvbVJhbmdlKHJhbmdlMik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbGVtZW50IGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgICAgICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBlbGVtZW50LmNvbnRhaW5zKCkgZG9lc24ndCB3b3JrIGFjcm9zcyBTaGFkb3cgRE9NCiAgICAgICAqLwogICAgICBzdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY29udGFpbmVyLCBub2RlMikgewogICAgICAgIGlmICghY29udGFpbmVyIHx8ICFub2RlMikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQgY3VycmVudCA9IG5vZGUyOwogICAgICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gY29udGFpbmVyKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGN1cnJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAmJiBjdXJyZW50Lmhvc3QpIHsKICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnQ7CiAgICAgICAgICAgIGlmIChzaGFkb3dSb290LmNvbnRhaW5zKGNvbnRhaW5lcikpIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudCA9IHNoYWRvd1Jvb3QuaG9zdDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmZvcm1hdHRpbmcuanMKdmFyIFd5c2l3eWdGb3JtYXR0aW5nOwp2YXIgaW5pdF93eXNpd3lnX2Zvcm1hdHRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5mb3JtYXR0aW5nLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBXeXNpd3lnRm9ybWF0dGluZyA9IGNsYXNzIHsKICAgICAgc3RhdGljIGZvcm1hdEJ1dHRvbnMgPSBbCiAgICAgICAgeyBjb21tYW5kOiAiYm9sZCIsIGljb246ICJCIiwgbGFiZWw6ICJCb2xkIiwgc2hvcnRjdXQ6ICJcdTIzMThCIiB9LAogICAgICAgIHsgY29tbWFuZDogIml0YWxpYyIsIGljb246ICJJIiwgbGFiZWw6ICJJdGFsaWMiLCBzaG9ydGN1dDogIlx1MjMxOEkiIH0sCiAgICAgICAgeyBjb21tYW5kOiAidW5kZXJsaW5lIiwgaWNvbjogIlUiLCBsYWJlbDogIlVuZGVybGluZSIsIHNob3J0Y3V0OiAiXHUyMzE4VSIgfSwKICAgICAgICB7IGNvbW1hbmQ6ICJzdHJpa2VUaHJvdWdoIiwgaWNvbjogIlNcdTAzMzYiLCBsYWJlbDogIlN0cmlrZXRocm91Z2giIH0sCiAgICAgICAgeyBjb21tYW5kOiAiY29kZSIsIGljb246ICJ7IH0iLCBsYWJlbDogIklubGluZSBDb2RlIiB9LAogICAgICAgIHsgY29tbWFuZDogImxpbmsiLCBpY29uOiAiXHV7MUY1MTd9IiwgbGFiZWw6ICJMaW5rIiwgc2hvcnRjdXQ6ICJcdTIzMThLIiB9CiAgICAgIF07CiAgICAgIHN0YXRpYyByZW5kZXJGb3JtYXR0aW5nTWVudShwb3NpdGlvbjMsIG9uRm9ybWF0KSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7cG9zaXRpb24zLnl9cHg7IGxlZnQ6ICR7cG9zaXRpb24zLnh9cHg7IgogICAgICAgIEBtb3VzZWRvd249IiR7KGUxMSkgPT4gewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfX0iCiAgICAgICAgQGNsaWNrPSIkeyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gYjJgCiAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICBjbGFzcz0iZm9ybWF0LWJ1dHRvbiAke2J1dHRvbi5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IG9uRm9ybWF0KGJ1dHRvbi5jb21tYW5kKX0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICBzdGF0aWMgYXBwbHlGb3JtYXQoY29tbWFuZCwgdmFsdWUyLCByYW5nZTIsIHNoYWRvd1Jvb3RzKSB7CiAgICAgICAgbGV0IHdvcmtpbmdSYW5nZTsKICAgICAgICBpZiAocmFuZ2UyKSB7CiAgICAgICAgICB3b3JraW5nUmFuZ2UgPSByYW5nZTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB3b3JraW5nUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgICAgICBjYXNlICJib2xkIjoKICAgICAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKHdvcmtpbmdSYW5nZSwgInN0cm9uZyIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIml0YWxpYyI6CiAgICAgICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJlbSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVuZGVybGluZSI6CiAgICAgICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJ1Iik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAic3RyaWtlVGhyb3VnaCI6CiAgICAgICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJzIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJjb2RlIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibGluayI6CiAgICAgICAgICAgIGlmICghdmFsdWUyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbldpdGhMaW5rKHdvcmtpbmdSYW5nZSwgdmFsdWUyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzaGFkb3dSb290cyAmJiBzaGFkb3dSb290cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldFNlbGVjdGlvbkZyb21SYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHdvcmtpbmdSYW5nZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHN0YXRpYyB3cmFwU2VsZWN0aW9uKHJhbmdlMiwgdGFnTmFtZSkgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBoYXNGb3JtYXR0aW5nID0gdGhpcy5zZWxlY3Rpb25Db250YWluc1RhZyhyYW5nZTIsIHRhZ05hbWUpOwogICAgICAgIGlmIChoYXNGb3JtYXR0aW5nKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZVRhZ0Zyb21TZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5leHRyYWN0Q29udGVudHMoKTsKICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgICAgIHJhbmdlMi5pbnNlcnROb2RlKHdyYXBwZXIpOwogICAgICAgICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKHdyYXBwZXIpOwogICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB3cmFwIHNlbGVjdGlvbjoiLCBlMTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgdGhlIHNlbGVjdGlvbiBjb250YWlucyBvciBpcyB3aXRoaW4gYW55IGluc3RhbmNlcyBvZiBhIHRhZwogICAgICAgKi8KICAgICAgc3RhdGljIHNlbGVjdGlvbkNvbnRhaW5zVGFnKHJhbmdlMiwgdGFnTmFtZSkgewogICAgICAgIGxldCBub2RlMiA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgICAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgICAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gbm9kZTI7CiAgICAgICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbm9kZTIgPSBub2RlMi5wYXJlbnROb2RlOwogICAgICAgIH0KICAgICAgICBub2RlMiA9IHJhbmdlMi5lbmRDb250YWluZXI7CiAgICAgICAgd2hpbGUgKG5vZGUyICYmIG5vZGUyICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgICAgICBpZiAoZWxlbWVudDQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWdOYW1lKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG5vZGUyID0gbm9kZTIucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmFuZ2UyLmNsb25lQ29udGVudHMoKTsKICAgICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTsKICAgICAgICBjb25zdCB0YWdzID0gdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKICAgICAgICByZXR1cm4gdGFncy5sZW5ndGggPiAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIHRhZyBmcm9tIHRoZSBzZWxlY3Rpb24KICAgICAgICovCiAgICAgIHN0YXRpYyByZW1vdmVUYWdGcm9tU2VsZWN0aW9uKHJhbmdlMiwgdGFnTmFtZSkgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgIHJldHVybjsKICAgICAgICBsZXQgZXhwYW5kZWRSYW5nZSA9IHJhbmdlMi5jbG9uZVJhbmdlKCk7CiAgICAgICAgbGV0IHN0YXJ0Tm9kZSA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgICAgICBsZXQgc3RhcnRUYWcgPSBudWxsOwogICAgICAgIHdoaWxlIChzdGFydE5vZGUgJiYgc3RhcnROb2RlICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICAgICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgc3RhcnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZSkgewogICAgICAgICAgICBzdGFydFRhZyA9IHN0YXJ0Tm9kZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICAgICAgbGV0IGVuZE5vZGUgPSByYW5nZTIuZW5kQ29udGFpbmVyOwogICAgICAgIGxldCBlbmRUYWcgPSBudWxsOwogICAgICAgIHdoaWxlIChlbmROb2RlICYmIGVuZE5vZGUgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgICAgICBpZiAoZW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZW5kTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgICAgZW5kVGFnID0gZW5kTm9kZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBlbmROb2RlID0gZW5kTm9kZS5wYXJlbnROb2RlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnRUYWcpIHsKICAgICAgICAgIGV4cGFuZGVkUmFuZ2Uuc2V0U3RhcnRCZWZvcmUoc3RhcnRUYWcpOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kVGFnKSB7CiAgICAgICAgICBleHBhbmRlZFJhbmdlLnNldEVuZEFmdGVyKGVuZFRhZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXhwYW5kZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgICAgICBjb25zdCBwcm9jZXNzZWRGcmFnbWVudCA9IHRoaXMucmVtb3ZlVGFnc0Zyb21GcmFnbWVudChmcmFnbWVudCwgdGFnTmFtZSk7CiAgICAgICAgZXhwYW5kZWRSYW5nZS5pbnNlcnROb2RlKHByb2Nlc3NlZEZyYWdtZW50KTsKICAgICAgICBjb25zdCB0ZXh0Tm9kZXMgPSBbXTsKICAgICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHByb2Nlc3NlZEZyYWdtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCk7CiAgICAgICAgbGV0IG5vZGUyOwogICAgICAgIHdoaWxlIChub2RlMiA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgICAgICB0ZXh0Tm9kZXMucHVzaChub2RlMik7CiAgICAgICAgfQogICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGVzWzBdLCAwKTsKICAgICAgICAgIG5ld1JhbmdlLnNldEVuZCh0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLCB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSBhIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqLwogICAgICBzdGF0aWMgcmVtb3ZlVGFnc0Zyb21GcmFnbWVudChmcmFnbWVudCwgdGFnTmFtZSkgewogICAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICAgICAgICBjb25zdCB0YWdzID0gdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTsKICAgICAgICBjb25zdCB0YWdBcnJheSA9IEFycmF5LmZyb20odGFncyk7CiAgICAgICAgdGFnQXJyYXkuZm9yRWFjaCgodGFnKSA9PiB7CiAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0YWcucGFyZW50Tm9kZTsKICAgICAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgICAgd2hpbGUgKHRhZy5maXJzdENoaWxkKSB7CiAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZSh0YWcuZmlyc3RDaGlsZCwgdGFnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGFnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb25zdCBuZXdGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICB3aGlsZSAodGVtcERpdi5maXJzdENoaWxkKSB7CiAgICAgICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3RnJhZ21lbnQ7CiAgICAgIH0KICAgICAgc3RhdGljIHdyYXBTZWxlY3Rpb25XaXRoTGluayhyYW5nZTIsIHVybCkgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250YWluc1RhZyhyYW5nZTIsICJhIikpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsICJhIik7CiAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICAgIHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBsaW5rMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgICAgIGxpbmszLnRhcmdldCA9ICJfYmxhbmsiOwogICAgICAgIGxpbmszLnJlbCA9ICJub29wZW5lciBub3JlZmVycmVyIjsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZTIuZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgICAgICBsaW5rMy5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZShsaW5rMyk7CiAgICAgICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGxpbmszKTsKICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsaW5rOiIsIGUxMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRTZWxlY3Rpb25Db29yZGluYXRlcyguLi5zaGFkb3dSb290cykgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTZWxlY3Rpb25Db29yZGluYXRlcyAtIHNlbGVjdGlvbkluZm86Iiwgc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiTm8gc2VsZWN0aW9uIGluZm8gYXZhaWxhYmxlIik7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc29sZS5sb2coIlJhbmdlIHJlY3Q6IiwgcmVjdCk7CiAgICAgICAgaWYgKHJlY3Qud2lkdGggPT09IDAgJiYgcmVjdC5oZWlnaHQgPT09IDApIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJSZWN0IHdpZHRoIGFuZCBoZWlnaHQgYXJlIDAsIHRyeWluZyBkaWZmZXJlbnQgYXBwcm9hY2giKTsKICAgICAgICAgIGlmICgiY2FyZXRQb3NpdGlvbkZyb21Qb2ludCIgaW4gZG9jdW1lbnQpIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICAgIHRlbXBTcGFuLnRleHRDb250ZW50ID0gIlx1MjAwQiI7CiAgICAgICAgICAgICAgcmFuZ2UzLmluc2VydE5vZGUodGVtcFNwYW4pOwogICAgICAgICAgICAgIGNvbnN0IHNwYW5SZWN0ID0gdGVtcFNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgdGVtcFNwYW4ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgaWYgKHNwYW5SZWN0LndpZHRoID4gMCB8fCBzcGFuUmVjdC5oZWlnaHQgPiAwKSB7CiAgICAgICAgICAgICAgICBjb25zdCBjb29yZHMyID0gewogICAgICAgICAgICAgICAgICB4OiBzcGFuUmVjdC5sZWZ0LAogICAgICAgICAgICAgICAgICB5OiBNYXRoLm1heCg0NSwgc3BhblJlY3QudG9wIC0gNDUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlVzZWQgc3BhbiB0cmljayBmb3IgY29vcmRzOiIsIGNvb3JkczIpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNvb3JkczI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29vcmRzID0gewogICAgICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsCiAgICAgICAgICB5OiBNYXRoLm1heCg0NSwgcmVjdC50b3AgLSA0NSkKICAgICAgICAgIC8vIFBvc2l0aW9uIGFib3ZlIHNlbGVjdGlvbiwgYnV0IGVuc3VyZSBpdCdzIG5vdCBuZWdhdGl2ZQogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2coIlJldHVybmluZyBjb29yZHM6IiwgY29vcmRzKTsKICAgICAgICByZXR1cm4gY29vcmRzOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtZm9ybWF0dGluZy1tZW51LmpzCnZhciBfX2VzRGVjb3JhdGU2MCwgX19ydW5Jbml0aWFsaXplcnM2MSwgRGVlc0Zvcm1hdHRpbmdNZW51Owp2YXIgaW5pdF9kZWVzX2Zvcm1hdHRpbmdfbWVudSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLWZvcm1hdHRpbmctbWVudS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF96aW5kZXgoKTsKICAgIGluaXRfd3lzaXd5Z19mb3JtYXR0aW5nKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU2MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczYxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzRm9ybWF0dGluZ01lbnUgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtYXR0aW5nLW1lbnUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3Zpc2libGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0Zvcm1hdHRpbmdNZW51MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX21lbnVaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9tZW51WkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudVpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzRm9ybWF0dGluZ01lbnUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgICAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgICBpZiAoIURlZXNGb3JtYXR0aW5nTWVudTIuaW5zdGFuY2UpIHsKICAgICAgICAgICAgRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzRm9ybWF0dGluZ01lbnUyKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZTsKICAgICAgICB9CiAgICAgICAgI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAgICAgZ2V0IHZpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgICAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgICAgICBnZXQgbWVudVpJbmRleCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtZW51WkluZGV4KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjYWxsYmFjayA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjNDA0MDQwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKDVweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLml0YWxpYyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi51bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiAuY29kZS1pY29uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImZvcm1hdHRpbmctbWVudSIgCiAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wb3NpdGlvbi54fXB4OyB0b3A6ICR7dGhpcy5wb3NpdGlvbi55fXB4OyIKICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgZGF0YS1tZW51LXR5cGU9ImZvcm1hdHRpbmciCiAgICAgID4KICAgICAgICAke1d5c2l3eWdGb3JtYXR0aW5nLmZvcm1hdEJ1dHRvbnMubWFwKChidXR0b24pID0+IGIyYAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIGRhdGEtY29tbWFuZD0iJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXBwbHlGb3JtYXQoY29tbWFuZCkgewogICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHsKICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhjb21tYW5kKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNob3cocG9zaXRpb24zLCBjYWxsYmFjaykgewogICAgICAgICAgY29uc29sZS5sb2coIkZvcm1hdHRpbmdNZW51LnNob3cgY2FsbGVkOiIsIHsgcG9zaXRpb246IHBvc2l0aW9uMywgdmlzaWJsZTogdGhpcy52aXNpYmxlIH0pOwogICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgICAgICAgIHRoaXMubWVudVpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaGlkZSgpIHsKICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICAgIH0KICAgICAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbjMpIHsKICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjM7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gdGFyZ2V0LmNsb3Nlc3QoIi5mb3JtYXQtYnV0dG9uIik7CiAgICAgICAgICAgIGlmIChidXR0b24pIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoImRhdGEtY29tbWFuZCIpOwogICAgICAgICAgICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5Rm9ybWF0KGNvbW1hbmQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHRydWUpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW50ZXJmYWNlcy5qcwp2YXIgaW5pdF93eXNpd3lnX2ludGVyZmFjZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5pbnRlcmZhY2VzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3d5c2l3eWdfdHlwZXMoKTsKICAgIGluaXRfZGVlc19zbGFzaF9tZW51KCk7CiAgICBpbml0X2RlZXNfZm9ybWF0dGluZ19tZW51KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMKdmFyIFBST0dSQU1NSU5HX0xBTkdVQUdFUzsKdmFyIGluaXRfd3lzaXd5Z19jb25zdGFudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMiKCkgewogICAgUFJPR1JBTU1JTkdfTEFOR1VBR0VTID0gWwogICAgICAiSmF2YVNjcmlwdCIsCiAgICAgICJUeXBlU2NyaXB0IiwKICAgICAgIlB5dGhvbiIsCiAgICAgICJKYXZhIiwKICAgICAgIkMrKyIsCiAgICAgICJDIyIsCiAgICAgICJHbyIsCiAgICAgICJSdXN0IiwKICAgICAgIkhUTUwiLAogICAgICAiQ1NTIiwKICAgICAgIlNRTCIsCiAgICAgICJTaGVsbCIsCiAgICAgICJKU09OIiwKICAgICAgIllBTUwiLAogICAgICAiTWFya2Rvd24iLAogICAgICAiUGxhaW4gVGV4dCIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zdHlsZXMuanMKdmFyIHd5c2l3eWdTdHlsZXM7CnZhciBpbml0X3d5c2l3eWdfc3R5bGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc3R5bGVzLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICB3eXNpd3lnU3R5bGVzID0gaWAKICA6aG9zdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lciB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgcGFkZGluZzogMjRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiMzZjNmNDYiKX07CiAgfQoKICAud3lzaXd5Zy1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzE4MTgxYiIpfSwgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC41KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC41KSIpfTsKICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICB9CgogIC8qIFZpc3VhbCBoaW50IGZvciB0ZXh0IHNlbGVjdGlvbiAqLwogIC5lZGl0b3ItY29udGVudDpob3ZlciB7CiAgICBjdXJzb3I6IHRleHQ7CiAgfQoKICAuZWRpdG9yLWNvbnRlbnQgewogICAgb3V0bGluZTogbm9uZTsKICAgIG1pbi1oZWlnaHQ6IDE2MHB4OwogICAgbWFyZ2luOiAwIC04cHg7CiAgICBwYWRkaW5nOiAwIDhweDsKICB9CgogIC5ibG9jayB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgbWluLWhlaWdodDogMS42ZW07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC8qIEZpcnN0IGFuZCBsYXN0IGJsb2NrcyBkb24ndCBuZWVkIGV4dHJhIHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlcjpmaXJzdC1jaGlsZCAuYmxvY2sgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogIH0KCiAgLmJsb2NrLXdyYXBwZXI6bGFzdC1jaGlsZCAuYmxvY2sgewogICAgbWFyZ2luLWJvdHRvbTogMDsKICB9CgogIC5ibG9jay5zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIpfTsKICAgIG91dGxpbmU6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgbWFyZ2luLXJpZ2h0OiAtOHB4OwogICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgfQoKICAuYmxvY2tbY29udGVudGVkaXRhYmxlXSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaCB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC5ibG9jay5wYXJhZ3JhcGg6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiVHlwZSAnLycgZm9yIGNvbW1hbmRzLi4uIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC5ibG9jay5oZWFkaW5nLTEgewogICAgZm9udC1zaXplOiAzMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jay5oZWFkaW5nLTE6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiSGVhZGluZyAxIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBsaW5lLWhlaWdodDogMS4yOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9CgogIC5ibG9jay5oZWFkaW5nLTIgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jay5oZWFkaW5nLTI6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiSGVhZGluZyAyIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBsaW5lLWhlaWdodDogMS4zOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICB9CgogIC5ibG9jay5oZWFkaW5nLTMgewogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jay5oZWFkaW5nLTM6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiSGVhZGluZyAzIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICB9CgogIC5ibG9jay5xdW90ZSB7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICB9CgogIC5ibG9jay5xdW90ZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJRdW90ZSI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQoKICAuY29kZS1ibG9jay1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luOiAyMHB4IDA7CiAgfQoKICAuY29kZS1sYW5ndWFnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICByaWdodDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIHBhZGRpbmc6IDRweCAxMnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMCA0cHggMCA0cHg7CiAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlOwogICAgei1pbmRleDogMTsKICB9CgogIC5ibG9jay5jb2RlIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTZweDsKICAgIHBhZGRpbmctdG9wOiAzMnB4OyAvKiBNYWtlIHJvb20gZm9yIGxhbmd1YWdlIGluZGljYXRvciAqLwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS41OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBvdmVyZmxvdy14OiBhdXRvOwogIH0KCiAgLmJsb2NrLmNvZGU6ZW1wdHk6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiLy8gQ29kZSBibG9jayI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICB9CgogIC5ibG9jay5saXN0IHsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9CgogIC5ibG9jay5saXN0IHVsLAogIC5ibG9jay5saXN0IG9sIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDAgMCAwIDI0cHg7CiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwgewogICAgbGlzdC1zdHlsZTogZGlzYzsKICB9CgogIC5ibG9jay5saXN0IG9sIHsKICAgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7CiAgfQoKICAuYmxvY2subGlzdCBsaSB7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLmRpdmlkZXIgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMjBweCAwOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgfQoKICAuYmxvY2suZGl2aWRlciBociB7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIG1hcmdpbjogMDsKICB9CgogIC5zbGFzaC1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgZm9udC1zaXplOiAxNHB4OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciwKICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbTpob3ZlciAuaWNvbiwKICAuc2xhc2gtbWVudS1pdGVtLnNlbGVjdGVkIC5pY29uIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLnRvb2xiYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNDBweDsKICAgIGxlZnQ6IDA7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgcGFkZGluZzogNHB4OwogICAgZGlzcGxheTogbm9uZTsKICAgIGdhcDogNHB4OwogICAgei1pbmRleDogMTAwMDsKICB9CgogIC50b29sYmFyLnZpc2libGUgewogICAgZGlzcGxheTogZmxleDsKICB9CgogIC50b29sYmFyLWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAudG9vbGJhci1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLyogRHJhZyBhbmQgRHJvcCBTdHlsZXMgKi8KICAuYmxvY2std3JhcHBlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICB9CgogIC8qIEVuc3VyZSBwcm9wZXIgc3BhY2luZyBjb250ZXh0IGZvciBibG9ja3MgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAxNnB4OwogIH0KCiAgLyogT3ZlcnJpZGUgZm9yIGhlYWRpbmdzIGZvbGxvd2luZyBvdGhlciBibG9ja3MgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTEsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0yLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBtYXJnaW4tdG9wOiAyNHB4OwogIH0KCiAgLyogQ29kZSBhbmQgcXVvdGUgYmxvY2tzIG5lZWQgY29uc2lzdGVudCBzcGFjaW5nICovCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suY29kZSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5xdW90ZSB7CiAgICBtYXJnaW4tdG9wOiAyMHB4OwogIH0KCiAgLmRyYWctaGFuZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IC0yOHB4OwogICAgdG9wOiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGN1cnNvcjogZ3JhYjsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICB9CgogIC5kcmFnLWhhbmRsZTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICLii67ii64iOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGV0dGVyLXNwYWNpbmc6IC0ycHg7CiAgfQoKICAuYmxvY2std3JhcHBlcjpob3ZlciAuZHJhZy1oYW5kbGUgewogICAgb3BhY2l0eTogMTsKICB9CgogIC5kcmFnLWhhbmRsZTpob3ZlciB7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgfQoKICAuZHJhZy1oYW5kbGU6YWN0aXZlIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjM2YzZjQ2Iil9OwogIH0KCiAgLmJsb2NrLXdyYXBwZXIuZHJhZ2dpbmcgewogICAgb3BhY2l0eTogMC44OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyMDAxOwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogIH0KCgogIC8qIEJsb2NrcyB0aGF0IHNob3VsZCBtb3ZlIG91dCBvZiB0aGUgd2F5ICovCiAgLmJsb2NrLXdyYXBwZXIubW92ZS1kb3duIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSk7CiAgfQoKICAuYmxvY2std3JhcHBlci5tb3ZlLXVwIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0xICogdmFyKC0tZHJhZy1vZmZzZXQsIDBweCkpKTsKICB9CgogIC8qIERyb3AgaW5kaWNhdG9yICovCiAgLmRyb3AtaW5kaWNhdG9yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB0cmFuc2l0aW9uOiB0b3AgMC4ycyBlYXNlLCBoZWlnaHQgMC4ycyBlYXNlOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxOTk5OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC8qIFJlbW92ZSBvbGQgZHJhZy1vdmVyIHN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyLmRyYWctb3Zlci1iZWZvcmUsCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWFmdGVyIHsKICAgIC8qIE5vIGxvbmdlciBuZWVkZWQsIHVzaW5nIGRyb3AgaW5kaWNhdG9yIGluc3RlYWQgKi8KICB9CgogIC5lZGl0b3ItY29udGVudC5kcmFnZ2luZyAqIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwogIH0KCiAgLyogQmxvY2sgU2V0dGluZ3MgQnV0dG9uIC0gUmVtb3ZlZCBpbiBmYXZvciBvZiBjb250ZXh0IG1lbnUgKi8KCiAgLyogVGV4dCBTZWxlY3Rpb24gU3R5bGVzICovCiAgLmJsb2NrIDo6c2VsZWN0aW9uIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIGNvbG9yOiBpbmhlcml0OwogIH0KCiAgLyogRm9ybWF0dGluZyBNZW51ICovCiAgLmZvcm1hdHRpbmctbWVudSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgcGFkZGluZzogNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMnB4OwogICAgei1pbmRleDogMTAwMTsKICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgfQoKICBAa2V5ZnJhbWVzIGZhZGVJblNjYWxlIHsKICAgIGZyb20gewogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpIHRyYW5zbGF0ZVkoMnB4KTsKICAgIH0KICAgIHRvIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgfQogIH0KCiAgLmZvcm1hdC1idXR0b24gewogICAgd2lkdGg6IDMycHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB9CgogIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICB9CgogIC5mb3JtYXQtYnV0dG9uOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOwogIH0KCiAgLmZvcm1hdC1idXR0b24uYm9sZCB7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmZvcm1hdC1idXR0b24uaXRhbGljIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5mb3JtYXQtYnV0dG9uLnVuZGVybGluZSB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIC5mb3JtYXQtYnV0dG9uIC5jb2RlLWljb24gewogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDEycHg7CiAgfQoKICAvKiBBcHBsaWVkIGZvcm1hdCBzdHlsZXMgaW4gY29udGVudCAqLwogIC5ibG9jayBzdHJvbmcsCiAgLmJsb2NrIGIgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrIGVtLAogIC5ibG9jayBpIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5ibG9jayB1IHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmJsb2NrIHN0cmlrZSwKICAuYmxvY2sgcyB7CiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgIG9wYWNpdHk6IDAuNzsKICB9CgogIC5ibG9jayBjb2RlIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICBmb250LXNpemU6IDAuOWVtOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgYSB7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogIH0KCiAgLmJsb2NrIGE6aG92ZXIgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICB9CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb252ZXJ0ZXJzLmpzCnZhciBXeXNpd3lnQ29udmVydGVyczsKdmFyIGluaXRfd3lzaXd5Z19jb252ZXJ0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuY29udmVydGVycy5qcyIoKSB7CiAgICBpbml0X3d5c2l3eWdfdHlwZXMoKTsKICAgIFd5c2l3eWdDb252ZXJ0ZXJzID0gY2xhc3MgewogICAgICBzdGF0aWMgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogICAgICB9CiAgICAgIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShieXRlcykgewogICAgICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgICAgIGNvbnN0IGkxMSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coazQpKTsKICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrNCwgaTExKSkudG9GaXhlZCgyKSkgKyAiICIgKyBzaXplc1tpMTFdOwogICAgICB9CiAgICAgIHN0YXRpYyBnZXRIdG1sT3V0cHV0KGJsb2NrcykgewogICAgICAgIHJldHVybiBibG9ja3MubWFwKChibG9jaykgPT4gewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50LmluY2x1ZGVzKCI8IikgJiYgYmxvY2suY29udGVudC5pbmNsdWRlcygiPiIpID8gYmxvY2suY29udGVudCA6IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KTsKICAgICAgICAgIHN3aXRjaCAoYmxvY2sudHlwZSkgewogICAgICAgICAgICBjYXNlICJwYXJhZ3JhcGgiOgogICAgICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50ID8gYDxwPiR7Y29udGVudDN9PC9wPmAgOiAiIjsKICAgICAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgICAgICByZXR1cm4gYDxoMT4ke2NvbnRlbnQzfTwvaDE+YDsKICAgICAgICAgICAgY2FzZSAiaGVhZGluZy0yIjoKICAgICAgICAgICAgICByZXR1cm4gYDxoMj4ke2NvbnRlbnQzfTwvaDI+YDsKICAgICAgICAgICAgY2FzZSAiaGVhZGluZy0zIjoKICAgICAgICAgICAgICByZXR1cm4gYDxoMz4ke2NvbnRlbnQzfTwvaDM+YDsKICAgICAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgICAgIHJldHVybiBgPGJsb2NrcXVvdGU+JHtjb250ZW50M308L2Jsb2NrcXVvdGU+YDsKICAgICAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGA8cHJlPjxjb2RlPiR7dGhpcy5lc2NhcGVIdG1sKGJsb2NrLmNvbnRlbnQpfTwvY29kZT48L3ByZT5gOwogICAgICAgICAgICBjYXNlICJsaXN0IjoKICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RUYWcgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgPT09ICJvcmRlcmVkIiA/ICJvbCIgOiAidWwiOwogICAgICAgICAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgICAgICByZXR1cm4gIjxocj4iOwogICAgICAgICAgICBjYXNlICJpbWFnZSI6CiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgICAgIGlmIChpbWFnZVVybCkgewogICAgICAgICAgICAgICAgY29uc3QgYWx0VGV4dCA9IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50IHx8ICJJbWFnZSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIGA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHthbHRUZXh0fSIgLz5gOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgICAgICBpZiAodmlkZW9JZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGA8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgY2FzZSAibWFya2Rvd24iOgogICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+JHt0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCl9PC9kaXY+YDsKICAgICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgICAgIGNhc2UgImF0dGFjaG1lbnQiOgogICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImF0dGFjaG1lbnRzIj4ke2ZpbGVzLm1hcCgoZmlsZSkgPT4gYDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaXRlbSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7ZmlsZS5kYXRhfSIgZG93bmxvYWQ9IiR7ZmlsZS5uYW1lfSI+JHt0aGlzLmVzY2FwZUh0bWwoZmlsZS5uYW1lKX08L2E+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj4oJHt0aGlzLmZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSl9KTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGA8cD4ke2NvbnRlbnQzfTwvcD5gOwogICAgICAgICAgfQogICAgICAgIH0pLmZpbHRlcigoaHRtbDcpID0+IGh0bWw3ICE9PSAiIikuam9pbigiXG4iKTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0TWFya2Rvd25PdXRwdXQoYmxvY2tzKSB7CiAgICAgICAgcmV0dXJuIGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7CiAgICAgICAgICBzd2l0Y2ggKGJsb2NrLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAicGFyYWdyYXBoIjoKICAgICAgICAgICAgICByZXR1cm4gYmxvY2suY29udGVudDsKICAgICAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgICAgICByZXR1cm4gYCMgJHtibG9jay5jb250ZW50fWA7CiAgICAgICAgICAgIGNhc2UgImhlYWRpbmctMiI6CiAgICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICAgICAgY2FzZSAiaGVhZGluZy0zIjoKICAgICAgICAgICAgICByZXR1cm4gYCMjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgICAgIHJldHVybiBgPiAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGBcYFxgXGAKJHtibG9jay5jb250ZW50fQpcYFxgXGBgOwogICAgICAgICAgICBjYXNlICJsaXN0IjoKICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleDIpID0+IGAke2luZGV4MiArIDF9LiAke2l0ZW19YCkuam9pbigiXG4iKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4gYC0gJHtpdGVtfWApLmpvaW4oIlxuIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgICAgICByZXR1cm4gIi0tLSI7CiAgICAgICAgICAgIGNhc2UgImltYWdlIjoKICAgICAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmw7CiAgICAgICAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VVcmwgPyBgIVske2FsdFRleHR9XSgke2ltYWdlVXJsfSlgIDogIiI7CiAgICAgICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgICAgICBjb25zdCB1cmwgPSBibG9jay5tZXRhZGF0YT8udXJsIHx8ICh2aWRlb0lkID8gYGh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0ke3ZpZGVvSWR9YCA6ICIiKTsKICAgICAgICAgICAgICByZXR1cm4gdXJsID8gYFtZb3VUdWJlIFZpZGVvXSgke3VybH0pYCA6ICIiOwogICAgICAgICAgICBjYXNlICJtYXJrZG93biI6CiAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgICAgIHJldHVybiBgPCEtLSBIVE1MIEJsb2NrCiR7YmxvY2suY29udGVudH0KLS0+YDsKICAgICAgICAgICAgY2FzZSAiYXR0YWNobWVudCI6CiAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBibG9jay5tZXRhZGF0YT8uZmlsZXMgfHwgW107CiAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaWxlcy5tYXAoKGZpbGUpID0+IGAtIFske2ZpbGUubmFtZX1dKCR7ZmlsZS5kYXRhfSlgKS5qb2luKCJcbiIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgICB9CiAgICAgICAgfSkuZmlsdGVyKChtZCkgPT4gbWQgIT09ICIiKS5qb2luKCJcblxuIik7CiAgICAgIH0KICAgICAgc3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGh0bWw3KSB7CiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaHRtbDcsICJ0ZXh0L2h0bWwiKTsKICAgICAgICBjb25zdCBibG9ja3MgPSBbXTsKICAgICAgICBjb25zdCBwcm9jZXNzTm9kZSA9IChub2RlMikgPT4gewogICAgICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKSB7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgICAgICBjb250ZW50OiBub2RlMi50ZXh0Q29udGVudC50cmltKCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudDQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgICAgICBjYXNlICJwIjoKICAgICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiaDEiOgogICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LmlubmVySFRNTCB8fCAiIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJoMiI6CiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImgzIjoKICAgICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiYmxvY2txdW90ZSI6CiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAicHJlIjoKICAgICAgICAgICAgICBjYXNlICJjb2RlIjoKICAgICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQudGV4dENvbnRlbnQgfHwgIiIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAidWwiOgogICAgICAgICAgICAgIGNhc2UgIm9sIjoKICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IEFycmF5LmZyb20oZWxlbWVudDQucXVlcnlTZWxlY3RvckFsbCgibGkiKSk7CiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGxpc3RJdGVtcy5tYXAoKGxpMikgPT4gbGkyLmlubmVySFRNTCB8fCAiIikuam9pbigiXG4iKTsKICAgICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiB0YWdOYW1lID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJociI6CiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICIgIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJpbWciOgogICAgICAgICAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICAgICAgY29udGVudDogaW1nRWxlbWVudC5hbHQgfHwgIiIsCiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogaW1nRWxlbWVudC5zcmMgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgZWxlbWVudDQuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jLmJvZHkuY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlMikgPT4gcHJvY2Vzc05vZGUobm9kZTIpKTsKICAgICAgICByZXR1cm4gYmxvY2tzOwogICAgICB9CiAgICAgIHN0YXRpYyBwYXJzZU1hcmtkb3duVG9CbG9ja3MobWFya2Rvd24pIHsKICAgICAgICBjb25zdCBsaW5lcyA9IG1hcmtkb3duLnNwbGl0KCJcbiIpOwogICAgICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgICAgIGxldCBjdXJyZW50TGlzdEl0ZW1zID0gW107CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgbGluZXMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2kxMV07CiAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCIjICIpKSB7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZygyKQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCIjIyAiKSkgewogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoMykKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiIyMjICIpKSB7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZyg0KQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCI+ICIpKSB7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGxpbmUuc3Vic3RyaW5nKDIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoImBgYCIpKSB7CiAgICAgICAgICAgIGNvbnN0IGNvZGVMaW5lcyA9IFtdOwogICAgICAgICAgICBpMTErKzsKICAgICAgICAgICAgd2hpbGUgKGkxMSA8IGxpbmVzLmxlbmd0aCAmJiAhbGluZXNbaTExXS5zdGFydHNXaXRoKCJgYGAiKSkgewogICAgICAgICAgICAgIGNvZGVMaW5lcy5wdXNoKGxpbmVzW2kxMV0pOwogICAgICAgICAgICAgIGkxMSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiY29kZSIsCiAgICAgICAgICAgICAgY29udGVudDogY29kZUxpbmVzLmpvaW4oIlxuIikKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgICAgY3VycmVudExpc3RJdGVtcy5wdXNoKGxpbmUuc3Vic3RyaW5nKDIpKTsKICAgICAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGN1cnJlbnRMaXN0SXRlbXMuam9pbigiXG4iKSwKICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgICAgICBjdXJyZW50TGlzdEl0ZW1zLnB1c2gobGluZS5yZXBsYWNlKC9eXGQrXC4gLywgIiIpKTsKICAgICAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgICAgdHlwZTogImxpc3QiLAogICAgICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJvcmRlcmVkIiB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUgPT09ICItLS0iIHx8IGxpbmUgPT09ICIqKioiIHx8IGxpbmUgPT09ICJfX18iKSB7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICAgICAgY29udGVudDogIiAiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIGlmIChsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKSkgewogICAgICAgICAgICBjb25zdCBtYXRjaDIgPSBsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1hdGNoMlsxXSB8fCAiIiwKICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogbWF0Y2gyWzJdIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnRyaW0oKSkgewogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogbGluZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJsb2NrczsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy5qcwp2YXIgV3lzaXd5Z0Jsb2NrczsKdmFyIGluaXRfd3lzaXd5Z19ibG9ja3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5ibG9ja3MuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfd3lzaXd5Z190eXBlcygpOwogICAgaW5pdF93eXNpd3lnX2NvbnZlcnRlcnMoKTsKICAgIFd5c2l3eWdCbG9ja3MgPSBjbGFzcyB7CiAgICAgIHN0YXRpYyByZW5kZXJMaXN0Q29udGVudChjb250ZW50MywgbWV0YWRhdGEpIHsKICAgICAgICBjb25zdCBpdGVtcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY29uc3QgbGlzdFRhZyA9IG1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgfQogICAgICBzdGF0aWMgcmVuZGVyQmxvY2soYmxvY2ssIGlzU2VsZWN0ZWQsIGhhbmRsZXJzMikgewogICAgICAgIGlmIChibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgZGl2aWRlciIKICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgID4KICAgICAgICAgIDxocj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJsaXN0IikgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJibG9jayBsaXN0ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgICBAa2V5ZG93bj0iJHtoYW5kbGVyczIub25LZXlEb3dufSIKICAgICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICAgIEBjb21wb3NpdGlvbnN0YXJ0PSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnR9IgogICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgICAgICAgfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7CiAgICAgICAgfQogICAgICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJwbGFpbiB0ZXh0IjsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWxhbmd1YWdlIj4ke2xhbmd1YWdlfTwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iYmxvY2sgJHtibG9jay50eXBlfSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke2hhbmRsZXJzMi5vbktleURvd259IgogICAgICAgICAgICBAZm9jdXM9IiR7aGFuZGxlcnMyLm9uRm9jdXN9IgogICAgICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uc3RhcnQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydH0iCiAgICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgICAgICAgfX0iCiAgICAgICAgICAgIC50ZXh0Q29udGVudD0iJHtibG9jay5jb250ZW50IHx8ICIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgICB9CiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgJHtibG9jay50eXBlfSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBAaW5wdXQ9IiR7aGFuZGxlcnMyLm9uSW5wdXR9IgogICAgICAgIEBrZXlkb3duPSIke2hhbmRsZXJzMi5vbktleURvd259IgogICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgQGJsdXI9IiR7aGFuZGxlcnMyLm9uQmx1cn0iCiAgICAgICAgQGNvbXBvc2l0aW9uc3RhcnQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydH0iCiAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICBAbW91c2V1cD0iJHsoZTExKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmxvZygiQmxvY2sgbW91c2V1cCBldmVudCBmaXJlZCIpOwogICAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXAoZTExKTsKICAgICAgICB9fSIKICAgICAgICAuaW5uZXJIVE1MPSIke2Jsb2NrLmNvbnRlbnQgfHwgIiJ9IgogICAgICA+PC9kaXY+CiAgICBgOwogICAgICAgIHJldHVybiBibG9ja0VsZW1lbnQ7CiAgICAgIH0KICAgICAgc3RhdGljIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmICghc2VsKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTIwMEIiKTsKICAgICAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMSk7CiAgICAgICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGxhc3ROb2RlID0gdGhpcy5nZXRMYXN0Tm9kZShlbGVtZW50NCk7CiAgICAgICAgICBpZiAobGFzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJhbmdlMi5zZXRTdGFydEFmdGVyKGxhc3ROb2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICB9CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgIGlmIChlbGVtZW50NC50ZXh0Q29udGVudCA9PT0gIlx1MjAwQiIpIHsKICAgICAgICAgIGVsZW1lbnQ0LnRleHRDb250ZW50ID0gIiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmICghc2VsKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnQoZWxlbWVudDQsIDApOwogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZShlbGVtZW50NCk7CiAgICAgICAgICBpZiAoZmlyc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICByYW5nZTIuc2V0U3RhcnQoZmlyc3ROb2RlLCAwKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJhbmdlMi5zZXRTdGFydEJlZm9yZShmaXJzdE5vZGUpOwogICAgICAgICAgfQogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICAgIH0KICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgICAgc3RhdGljIGdldExhc3ROb2RlKGVsZW1lbnQ0KSB7CiAgICAgICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gZWxlbWVudDQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQ0LmNoaWxkTm9kZXNbZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKICAgICAgICBpZiAobGFzdENoaWxkLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBsYXN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBsYXN0Q2hpbGQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmdldExhc3ROb2RlKGxhc3RDaGlsZCk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldEZpcnN0Tm9kZShlbGVtZW50NCkgewogICAgICAgIGlmIChlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICAgIH0KICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gZWxlbWVudDQuY2hpbGROb2Rlc1swXTsKICAgICAgICBpZiAoZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgZmlyc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0Tm9kZShmaXJzdENoaWxkKTsKICAgICAgfQogICAgICBzdGF0aWMgZm9jdXNMaXN0SXRlbShsaXN0RWxlbWVudCkgewogICAgICAgIGNvbnN0IGZpcnN0TGkgPSBsaXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgICAgIGlmIChmaXJzdExpKSB7CiAgICAgICAgICBmaXJzdExpLmZvY3VzKCk7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhmaXJzdExpKTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy5qcwp2YXIgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9uczsKdmFyIGluaXRfd3lzaXd5Z19ibG9ja29wZXJhdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5ibG9ja29wZXJhdGlvbnMuanMiKCkgewogICAgaW5pdF93eXNpd3lnX3R5cGVzKCk7CiAgICBpbml0X3d5c2l3eWdfaW50ZXJmYWNlcygpOwogICAgaW5pdF93eXNpd3lnX3Nob3J0Y3V0cygpOwogICAgaW5pdF93eXNpd3lnX2Jsb2NrcygpOwogICAgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyA9IGNsYXNzIHsKICAgICAgY29tcG9uZW50OwogICAgICBjb25zdHJ1Y3Rvcihjb21wb25lbnQpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIG5ldyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwogICAgICAgKi8KICAgICAgY3JlYXRlQmxvY2sodHlwZTUgPSAicGFyYWdyYXBoIiwgY29udGVudDMgPSAiIiwgbWV0YWRhdGEpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICB0eXBlOiB0eXBlNSwKICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgLi4ubWV0YWRhdGEgJiYgeyBtZXRhZGF0YSB9CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBhIGJsb2NrIGFmdGVyIHRoZSBzcGVjaWZpZWQgYmxvY2sKICAgICAgICovCiAgICAgIGFzeW5jIGluc2VydEJsb2NrQWZ0ZXIoYWZ0ZXJCbG9jaywgbmV3QmxvY2ssIGZvY3VzTmV3QmxvY2sgPSB0cnVlKSB7CiAgICAgICAgY29uc3QgYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzOwogICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGFmdGVyQmxvY2suaWQpOwogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrcyA9IFsKICAgICAgICAgIC4uLmJsb2Nrcy5zbGljZSgwLCBibG9ja0luZGV4ICsgMSksCiAgICAgICAgICBuZXdCbG9jaywKICAgICAgICAgIC4uLmJsb2Nrcy5zbGljZShibG9ja0luZGV4ICsgMSkKICAgICAgICBdOwogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICBjb25zdCBhZnRlcldyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgICAgIGlmIChhZnRlcldyYXBwZXIpIHsKICAgICAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgICAgIGFmdGVyV3JhcHBlci5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyZW5kIiwgbmV3V3JhcHBlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgaWYgKGZvY3VzTmV3QmxvY2sgJiYgbmV3QmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGEgYmxvY2sgYnkgaXRzIElECiAgICAgICAqLwogICAgICByZW1vdmVCbG9jayhibG9ja0lkKSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcigoYjUpID0+IGI1LmlkICE9PSBibG9ja0lkKTsKICAgICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2tJZH0iXWApOwogICAgICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICAgICAgd3JhcHBlci5yZW1vdmUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRmluZHMgYSBibG9jayBieSBpdHMgSUQKICAgICAgICovCiAgICAgIGZpbmRCbG9jayhibG9ja0lkKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiBhIGJsb2NrCiAgICAgICAqLwogICAgICBnZXRCbG9ja0luZGV4KGJsb2NrSWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRm9jdXNlcyBhIHNwZWNpZmljIGJsb2NrCiAgICAgICAqLwogICAgICBhc3luYyBmb2N1c0Jsb2NrKGJsb2NrSWQsIGN1cnNvclBvc2l0aW9uID0gInN0YXJ0IikgewogICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9ja0lkfSJdYCk7CiAgICAgICAgaWYgKHdyYXBwZXJFbGVtZW50KSB7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihjdXJzb3JQb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGVzIHRoZSBjb250ZW50IG9mIGEgYmxvY2sKICAgICAgICovCiAgICAgIHVwZGF0ZUJsb2NrQ29udGVudChibG9ja0lkLCBjb250ZW50MykgewogICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5maW5kQmxvY2soYmxvY2tJZCk7CiAgICAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gY29udGVudDM7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogVHJhbnNmb3JtcyBhIGJsb2NrIHRvIGEgZGlmZmVyZW50IHR5cGUKICAgICAgICovCiAgICAgIHRyYW5zZm9ybUJsb2NrKGJsb2NrSWQsIG5ld1R5cGUsIG1ldGFkYXRhKSB7CiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmZpbmRCbG9jayhibG9ja0lkKTsKICAgICAgICBpZiAoYmxvY2spIHsKICAgICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgICAgYmxvY2sudHlwZSA9IG5ld1R5cGU7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgICBpZiAobWV0YWRhdGEpIHsKICAgICAgICAgICAgYmxvY2subWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBNb3ZlcyBhIGJsb2NrIHRvIGEgbmV3IHBvc2l0aW9uCiAgICAgICAqLwogICAgICBtb3ZlQmxvY2soYmxvY2tJZCwgdGFyZ2V0SW5kZXgpIHsKICAgICAgICBjb25zdCBibG9ja3MgPSBbLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXTsKICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEgfHwgdGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IGJsb2Nrcy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgW21vdmVkQmxvY2tdID0gYmxvY2tzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpOwogICAgICAgIGJsb2Nrcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG1vdmVkQmxvY2spOwogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrcyA9IGJsb2NrczsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBibG9jawogICAgICAgKi8KICAgICAgZ2V0UHJldmlvdXNCbG9jayhibG9ja0lkKSB7CiAgICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy5nZXRCbG9ja0luZGV4KGJsb2NrSWQpOwogICAgICAgIHJldHVybiBpbmRleDIgPiAwID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiAtIDFdIDogbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0cyB0aGUgbmV4dCBibG9jawogICAgICAgKi8KICAgICAgZ2V0TmV4dEJsb2NrKGJsb2NrSWQpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICAgICAgcmV0dXJuIGluZGV4MiA8IHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGggLSAxID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiArIDFdIDogbnVsbDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2suYmFzZS5qcwp2YXIgQmFzZUJsb2NrSGFuZGxlcjsKdmFyIGluaXRfYmxvY2tfYmFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2suYmFzZS5qcyIoKSB7CiAgICBCYXNlQmxvY2tIYW5kbGVyID0gY2xhc3MgewogICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBjb21tb24gc2V0dXAKICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgfQogICAgICAvLyBDb21tb24gc3R5bGVzIGNhbiBiZSBkZWZpbmVkIGhlcmUKICAgICAgZ2V0U3R5bGVzKCkgewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2sucmVnaXN0cnkuanMKdmFyIEJsb2NrUmVnaXN0cnk7CnZhciBpbml0X2Jsb2NrX3JlZ2lzdHJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9ibG9jay5yZWdpc3RyeS5qcyIoKSB7CiAgICBCbG9ja1JlZ2lzdHJ5ID0gY2xhc3MgewogICAgICBzdGF0aWMgaGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICBzdGF0aWMgcmVnaXN0ZXIodHlwZTUsIGhhbmRsZXIyKSB7CiAgICAgICAgdGhpcy5oYW5kbGVycy5zZXQodHlwZTUsIGhhbmRsZXIyKTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0SGFuZGxlcih0eXBlNSkgewogICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlNSk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldEFsbFR5cGVzKCkgewogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2suc3R5bGVzLmpzCnZhciBpbml0X2Jsb2NrX3N0eWxlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvYmxvY2suc3R5bGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvdGV4dC9wYXJhZ3JhcGguYmxvY2suanMKdmFyIFBhcmFncmFwaEJsb2NrSGFuZGxlcjsKdmFyIGluaXRfcGFyYWdyYXBoX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L3BhcmFncmFwaC5ibG9jay5qcyIoKSB7CiAgICBpbml0X2Jsb2NrX2Jhc2UoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tzKCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBQYXJhZ3JhcGhCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogICAgICB0eXBlID0gInBhcmFncmFwaCI7CiAgICAgIC8vIFRyYWNrIGN1cnNvciBwb3NpdGlvbgogICAgICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgICAgIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKTsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHBhcmFncmFwaCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9IiR7cGxhY2Vob2xkZXJ9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgICAgfQogICAgICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBhcmFncmFwaEJsb2NrSGFuZGxlci5zZXR1cDogTm8gcGFyYWdyYXBoIGJsb2NrIGVsZW1lbnQgZm91bmQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgJiYgIXBhcmFncmFwaEJsb2NrLmlubmVySFRNTCkgewogICAgICAgICAgcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MID0gYmxvY2suY29udGVudDsKICAgICAgICB9CiAgICAgICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0pOwogICAgICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgICAgIH0pOwogICAgICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICAgICAgfSk7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZCgpOwogICAgICAgIH0pOwogICAgICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgICAgIH0pOwogICAgICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcGFyYWdyYXBoQmxvY2ssIGJsb2NrKTsKICAgICAgfQogICAgICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIHBhcmFncmFwaEJsb2NrLCBibG9jaykgewogICAgICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcGFyYWdyYXBoQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrMj8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gd3lzaXd5Z0Jsb2NrMj8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHBhcmFncmFwaEJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHBhcmFncmFwaEJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gZWxlbWVudDQuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0uYmluZCh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICBkZXRhaWwsCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KTsKICAgICAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLyogUGFyYWdyYXBoIHNwZWNpZmljIHN0eWxlcyAqLwogICAgICAuYmxvY2sucGFyYWdyYXBoIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CiAgICBgOwogICAgICB9CiAgICAgIGdldFBsYWNlaG9sZGVyKCkgewogICAgICAgIHJldHVybiAiVHlwZSAnLycgZm9yIGNvbW1hbmRzLi4uIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGVscGVyIHRvIGdldCB0aGUgbGFzdCB0ZXh0IG5vZGUgaW4gYW4gZWxlbWVudAogICAgICAgKi8KICAgICAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICAgICAgaWYgKGVsZW1lbnQ0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSBlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgICAgICByZXR1cm4gbGFzdFRleHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYXJhZ3JhcGggZnVuY3Rpb25hbGl0eQogICAgICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgICAgICBpZiAoIXBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocGFyYWdyYXBoQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocGFyYWdyYXBoQmxvY2spOwogICAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uMzsKICAgICAgfQogICAgICBnZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwgfHwgIiI7CiAgICAgICAgcmV0dXJuIGNvbnRlbnQzOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzLCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jazsKICAgICAgICBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwgPSBjb250ZW50MzsKICAgICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICAgICAgaWYgKHBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQocGFyYWdyYXBoQmxvY2spOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgICAgICBpZiAocGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQocGFyYWdyYXBoQmxvY2spOwogICAgICAgIH0KICAgICAgfQogICAgICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgICAgICBpZiAoIXBhcmFncmFwaEJsb2NrKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgcGFyYWdyYXBoQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICAgIH0KICAgICAgICBwYXJhZ3JhcGhCbG9jay5mb2N1cygpOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBwYXJhZ3JhcGhCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBwYXJhZ3JhcGhCbG9jaykgewogICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgICAgICBpZiAoIXBhcmFncmFwaEJsb2NrKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgcGFyYWdyYXBoQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICAgIH0KICAgICAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoc2VsKSB7CiAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgIGNvbnN0IGxhc3ROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUocGFyYWdyYXBoQmxvY2spIHx8IHBhcmFncmFwaEJsb2NrOwogICAgICAgICAgICBpZiAobGFzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGxhc3ROb2RlLCBsYXN0Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDApOwogICAgICAgICAgICAgIHJhbmdlMi5zZXRFbmQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0Tm9kZSk7CiAgICAgICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwYXJhZ3JhcGhCbG9jay5mb2N1cygpOwogICAgICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihwYXJhZ3JhcGhCbG9jaywgcG9zaXRpb24zKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jaykgewogICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jaykgewogICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCAxMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICAgICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGNvbnRleHQyPy5jb21wb25lbnQ7CiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IGNvbnRleHQyPy5zaGFkb3dSb290OwogICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHBhcmFncmFwaEJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHBhcmFncmFwaEJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgICAgY29uc3QgcG9zID0gTWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiwgZnVsbFRleHQubGVuZ3RoKTsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgICAgYWZ0ZXI6IHBhcmFncmFwaEJsb2NrLmlubmVySFRNTAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIGJlZm9yZVJhbmdlLnNldFN0YXJ0KHBhcmFncmFwaEJsb2NrLCAwKTsKICAgICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICBhZnRlclJhbmdlLnNldEVuZChwYXJhZ3JhcGhCbG9jaywgcGFyYWdyYXBoQmxvY2suY2hpbGROb2Rlcy5sZW5ndGgpOwogICAgICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvaGVhZGluZy5ibG9jay5qcwp2YXIgSGVhZGluZ0Jsb2NrSGFuZGxlcjsKdmFyIGluaXRfaGVhZGluZ19ibG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvdGV4dC9oZWFkaW5nLmJsb2NrLmpzIigpIHsKICAgIGluaXRfYmxvY2tfYmFzZSgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfd3lzaXd5Z19ibG9ja3MoKTsKICAgIGluaXRfd3lzaXd5Z19zZWxlY3Rpb24oKTsKICAgIEhlYWRpbmdCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogICAgICB0eXBlOwogICAgICBsZXZlbDsKICAgICAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgICAgIGxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gMDsKICAgICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgY29uc3RydWN0b3IodHlwZTUpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMudHlwZSA9IHR5cGU1OwogICAgICAgIHRoaXMubGV2ZWwgPSBwYXJzZUludCh0eXBlNS5zcGxpdCgiLSIpWzFdKTsKICAgICAgfQogICAgICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgICAgICBjb25zdCBzZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiI7CiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkhlYWRpbmdCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGhlYWRpbmcgYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoYmxvY2suY29udGVudCAmJiAhaGVhZGluZ0Jsb2NrLmlubmVySFRNTCkgewogICAgICAgICAgaGVhZGluZ0Jsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0pOwogICAgICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbkZvY3VzKCk7CiAgICAgICAgfSk7CiAgICAgICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25CbHVyKCk7CiAgICAgICAgfSk7CiAgICAgICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICAgICAgfSk7CiAgICAgICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmQoKTsKICAgICAgICB9KTsKICAgICAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGhlYWRpbmdCbG9jaywgYmxvY2spOwogICAgICB9CiAgICAgIHNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jaykgewogICAgICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gaGVhZGluZ0Jsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IHd5c2l3eWdCbG9jazI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc3RhcnRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShoZWFkaW5nQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gaGVhZGluZ0Jsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgICAgICBpZiAod3lzaXd5Z0Jsb2NrKSB7CiAgICAgICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICAgICAgd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpIHsKICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwod3lzaXd5Z0Jsb2NrKTsKICAgICAgICAgICAgfQogICAgICAgICAgfS5iaW5kKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbCwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgICB9CiAgICAgIGdldFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gYAogICAgICAuYmxvY2suaGVhZGluZy0xIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMjRweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CiAgICBgOwogICAgICB9CiAgICAgIGdldFBsYWNlaG9sZGVyKCkgewogICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gIkhlYWRpbmcgMSI7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiAiSGVhZGluZyAyIjsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuICJIZWFkaW5nIDMiOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICJIZWFkaW5nIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgICAgICovCiAgICAgIGdldExhc3RUZXh0Tm9kZShlbGVtZW50NCkgewogICAgICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIHJldHVybiBlbGVtZW50NDsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgICAgIGlmIChsYXN0VGV4dCkKICAgICAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgaGVhZGluZyBmdW5jdGlvbmFsaXR5IChtb3N0bHkgdGhlIHNhbWUgYXMgcGFyYWdyYXBoKQogICAgICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShoZWFkaW5nQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZ0Jsb2NrKTsKICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICAgIHJldHVybiBwb3NpdGlvbjM7CiAgICAgIH0KICAgICAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2spCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBoZWFkaW5nQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgICAgIHJldHVybiBjb250ZW50MzsKICAgICAgfQogICAgICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrOwogICAgICAgIGhlYWRpbmdCbG9jay5pbm5lckhUTUwgPSBjb250ZW50MzsKICAgICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgICAgICBpZiAoaGVhZGluZ0Jsb2NrKSB7CiAgICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQoaGVhZGluZ0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgaGVhZGluZ0Jsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApOwogICAgICAgIGlmIChoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQoaGVhZGluZ0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXMoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgaGVhZGluZ0Jsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApOwogICAgICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghaGVhZGluZ0Jsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICAgICAgfQogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBoZWFkaW5nQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgaGVhZGluZ0Jsb2NrLmZvY3VzKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFoZWFkaW5nQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgaGVhZGluZ0Jsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50ICYmIGhlYWRpbmdCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoc2VsKSB7CiAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgIGNvbnN0IGxhc3ROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoaGVhZGluZ0Jsb2NrKSB8fCBoZWFkaW5nQmxvY2s7CiAgICAgICAgICAgIGlmIChsYXN0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgICAgICByYW5nZTIuc2V0U3RhcnQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgICAgICAgcmFuZ2UyLnNldEVuZChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGxhc3ROb2RlKTsKICAgICAgICAgICAgICByYW5nZTIuY29sbGFwc2UoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgfHwgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGhlYWRpbmdCbG9jaywgcG9zaXRpb24zKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jaykgewogICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCAxMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgaGVhZGluZ0Jsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcihgLmJsb2NrLmhlYWRpbmctJHt0aGlzLmxldmVsfWApOwogICAgICAgIGlmICghaGVhZGluZ0Jsb2NrKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGhlYWRpbmdCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgICAgICBhZnRlcjogaGVhZGluZ0Jsb2NrLmlubmVySFRNTAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIGJlZm9yZVJhbmdlLnNldFN0YXJ0KGhlYWRpbmdCbG9jaywgMCk7CiAgICAgICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgICAgYWZ0ZXJSYW5nZS5zZXRFbmQoaGVhZGluZ0Jsb2NrLCBoZWFkaW5nQmxvY2suY2hpbGROb2Rlcy5sZW5ndGgpOwogICAgICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2suanMKdmFyIFF1b3RlQmxvY2tIYW5kbGVyOwp2YXIgaW5pdF9xdW90ZV9ibG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvdGV4dC9xdW90ZS5ibG9jay5qcyIoKSB7CiAgICBpbml0X2Jsb2NrX2Jhc2UoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tzKCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBRdW90ZUJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgICAgIHR5cGUgPSAicXVvdGUiOwogICAgICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICAgICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgICBsYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgICAgICBjb25zdCBzZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiI7CiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBxdW90ZSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9IiR7cGxhY2Vob2xkZXJ9IgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgICAgfQogICAgICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgICAgICBpZiAoIXF1b3RlQmxvY2spIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmICFxdW90ZUJsb2NrLmlubmVySFRNTCkgewogICAgICAgICAgcXVvdGVCbG9jay5pbm5lckhUTUwgPSBibG9jay5jb250ZW50OwogICAgICAgIH0KICAgICAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uSW5wdXQoZTExKTsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0pOwogICAgICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgICAgIH0pOwogICAgICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgICAgICB9KTsKICAgICAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICAgICAgfSk7CiAgICAgICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsICgpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICAgICAgfSk7CiAgICAgICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgICBoYW5kbGVyczIub25Nb3VzZVVwPy4oZTExKTsKICAgICAgICB9KTsKICAgICAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBxdW90ZUJsb2NrLCBibG9jayk7CiAgICAgIH0KICAgICAgc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBxdW90ZUJsb2NrLCBibG9jaykgewogICAgICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgICAgICBjb25zdCBlbmRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0uYmluZCh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICBkZXRhaWwsCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KTsKICAgICAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLyogUXVvdGUgc3BlY2lmaWMgc3R5bGVzICovCiAgICAgIC5ibG9jay5xdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM1NTUiLCAiI2IwYjBiMCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgICBnZXRQbGFjZWhvbGRlcigpIHsKICAgICAgICByZXR1cm4gIkFkZCBhIHF1b3RlLi4uIjsKICAgICAgfQogICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgcXVvdGUgZnVuY3Rpb25hbGl0eQogICAgICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhxdW90ZUJsb2NrKTsKICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICAgIHJldHVybiBwb3NpdGlvbjM7CiAgICAgIH0KICAgICAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNvbnN0IGNvbnRlbnQzID0gcXVvdGVCbG9jay5pbm5lckhUTUwgfHwgIiI7CiAgICAgICAgcmV0dXJuIGNvbnRlbnQzOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzLCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgICAgICBpZiAoIXF1b3RlQmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2s7CiAgICAgICAgcXVvdGVCbG9jay5pbm5lckhUTUwgPSBjb250ZW50MzsKICAgICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKHF1b3RlQmxvY2spIHsKICAgICAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChxdW90ZUJsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgICAgIGlmIChxdW90ZUJsb2NrKSB7CiAgICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKHF1b3RlQmxvY2spOwogICAgICAgIH0KICAgICAgfQogICAgICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgICBxdW90ZUJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgICB9CiAgICAgICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBxdW90ZUJsb2NrICYmIGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgIT09IHF1b3RlQmxvY2spIHsKICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICBxdW90ZUJsb2NrLmZvY3VzKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgICBxdW90ZUJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgICB9CiAgICAgICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKHF1b3RlQmxvY2ssIHBvc2l0aW9uMyk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcXVvdGVCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICAgICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gcXVvdGVCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgICAgY29uc3QgcG9zID0gTWF0aC5taW4odGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiwgZnVsbFRleHQubGVuZ3RoKTsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgICAgICBhZnRlcjogcXVvdGVCbG9jay5pbm5lckhUTUwKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJlZm9yZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBhZnRlclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChxdW90ZUJsb2NrLCAwKTsKICAgICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICBhZnRlclJhbmdlLnNldEVuZChxdW90ZUJsb2NrLCBxdW90ZUJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IGJlZm9yZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgICBjb25zdCBhZnRlckZyYWdtZW50ID0gYWZ0ZXJSYW5nZS5jbG9uZUNvbnRlbnRzKCk7CiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYmVmb3JlRnJhZ21lbnQpOwogICAgICAgIGNvbnN0IGJlZm9yZUh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYWZ0ZXJGcmFnbWVudCk7CiAgICAgICAgY29uc3QgYWZ0ZXJIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgICAgIGFmdGVyOiBhZnRlckh0bWwKICAgICAgICB9OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2NvZGUuYmxvY2suanMKdmFyIENvZGVCbG9ja0hhbmRsZXI7CnZhciBpbml0X2NvZGVfYmxvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay5qcyIoKSB7CiAgICBpbml0X2Jsb2NrX2Jhc2UoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBpbml0X2ZvbnRzKCk7CiAgICBpbml0X3d5c2l3eWdfY29uc3RhbnRzKCk7CiAgICBpbml0X3NlcnZpY2VzKCk7CiAgICBDb2RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICAgICAgdHlwZSA9ICJjb2RlIjsKICAgICAgaGlnaGxpZ2h0VGltZXIgPSBudWxsOwogICAgICBoaWdobGlnaHRKcyA9IG51bGw7CiAgICAgIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJ0eXBlc2NyaXB0IjsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gY29udGVudDMuc3BsaXQoIlxuIikubGVuZ3RoOwogICAgICAgIGxldCBsaW5lTnVtYmVyc0h0bWwgPSAiIjsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICAgICAgbGluZU51bWJlcnNIdG1sICs9IGA8ZGl2IGNsYXNzPSJsaW5lLW51bWJlciI+JHtpMTF9PC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGFuZ3VhZ2VPcHRpb25zID0gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLm1hcCgobGFuZykgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgcmV0dXJuIGA8b3B0aW9uIHZhbHVlPSIke3ZhbHVlMn0iICR7dmFsdWUyID09PSBsYW5ndWFnZSA/ICJzZWxlY3RlZCIgOiAiIn0+JHtsYW5nfTwvb3B0aW9uPmA7CiAgICAgICAgfSkuam9pbigiIik7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iY29kZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgZGF0YS1sYW5ndWFnZT0iJHtsYW5ndWFnZX0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtaGVhZGVyIj4KICAgICAgICAgIDxzZWxlY3QgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIiBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSI+CiAgICAgICAgICAgICR7bGFuZ3VhZ2VPcHRpb25zfQogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWJ1dHRvbiIgdGl0bGU9IkNvcHkgY29kZSI+CiAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNvcHktaWNvbiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTAgNi43NUMwIDUuNzg0Ljc4NCA1IDEuNzUgNWgxLjVhLjc1Ljc1IDAgMDEwIDEuNWgtMS41YS4yNS4yNSAwIDAwLS4yNS4yNXY3LjVjMCAuMTM4LjExMi4yNS4yNS4yNWg3LjVhLjI1LjI1IDAgMDAuMjUtLjI1di0xLjVhLjc1Ljc1IDAgMDExLjUgMHYxLjVBMS43NSAxLjc1IDAgMDE5LjI1IDE2aC03LjVBMS43NSAxLjc1IDAgMDEwIDE0LjI1di03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTUgMS43NUM1IC43ODQgNS43ODQgMCA2Ljc1IDBoNy41QzE1LjIxNiAwIDE2IC43ODQgMTYgMS43NXY3LjVBMS43NSAxLjc1IDAgMDExNC4yNSAxMWgtNy41QTEuNzUgMS43NSAwIDAxNSA5LjI1di03LjV6bTEuNzUtLjI1YS4yNS4yNSAwIDAwLS4yNS4yNXY3LjVjMCAuMTM4LjExMi4yNS4yNS4yNWg3LjVhLjI1LjI1IDAgMDAuMjUtLjI1di03LjVhLjI1LjI1IDAgMDAtLjI1LS4yNWgtNy41eiI+PC9wYXRoPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdGV4dCI+Q29weTwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLW51bWJlcnMiPiR7bGluZU51bWJlcnNIdG1sfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250ZW50Ij4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1wcmUiPjxjb2RlIGNsYXNzPSJjb2RlLWVkaXRvciIgCiAgICAgICAgICAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoY29udGVudDMpfTwvY29kZT48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBjb3B5QnV0dG9uID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIik7CiAgICAgICAgY29uc3QgbGFuZ3VhZ2VTZWxlY3RvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1zZWxlY3RvciIpOwogICAgICAgIGlmICghZWRpdG9yIHx8ICFjb250YWluZXIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGxhbmd1YWdlU2VsZWN0b3IpIHsKICAgICAgICAgIGxhbmd1YWdlU2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdMYW5ndWFnZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyAuLi5ibG9jay5tZXRhZGF0YSwgbGFuZ3VhZ2U6IG5ld0xhbmd1YWdlIH07CiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiLCBuZXdMYW5ndWFnZSk7CiAgICAgICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgICAgIHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZWxlbWVudDQsIGJsb2NrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaGFuZGxlcnMyLm9uSW5wdXQpIHsKICAgICAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoY29weUJ1dHRvbikgewogICAgICAgICAgY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgIGNvbnN0IGNvcHlUZXh0ID0gY29weUJ1dHRvbi5xdWVyeVNlbGVjdG9yKCIuY29weS10ZXh0Iik7CiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29weVRleHQudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgICAgY29weUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJjb3BpZWQiKTsKICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgICAgY29weUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJjb3BpZWQiKTsKICAgICAgICAgICAgICB9LCAyZTMpOwogICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weToiLCBlcnIpOwogICAgICAgICAgICAgIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKICAgICAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IGNvbnRlbnQzOwogICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgICAgIHRleHRBcmVhLnNlbGVjdCgpOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICAgICAgY29uc3QgY29weVRleHQgPSBjb3B5QnV0dG9uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKTsKICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvcHlUZXh0LnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpOwogICAgICAgICAgICAgICAgfSwgMmUzKTsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWxsYmFjayBjb3B5IGZhaWxlZDoiLCBlcnIyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBsZXQgaXNFZGl0aW5nID0gZmFsc2U7CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICAgICAgaXNFZGl0aW5nID0gdHJ1ZTsKICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJlZGl0aW5nIik7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICBpZiAoZWRpdG9yLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgICByYW5nZTIuc2V0U3RhcnQoZWRpdG9yLmZpcnN0Q2hpbGQsIDApOwogICAgICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgICAgaXNFZGl0aW5nID0gZmFsc2U7CiAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpOwogICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhpZ2hsaWdodFRpbWVyKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7CiAgICAgICAgICAgICAgcmFuZ2UyLmluc2VydE5vZGUodGV4dE5vZGUpOwogICAgICAgICAgICAgIHJhbmdlMi5zZXRTdGFydEFmdGVyKHRleHROb2RlKTsKICAgICAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgICAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKFsiQXJyb3dMZWZ0IiwgIkFycm93UmlnaHQiLCAiQXJyb3dVcCIsICJBcnJvd0Rvd24iXS5pbmNsdWRlcyhlMTEua2V5KSkgewogICAgICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IGVkaXRvci50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiQXJyb3dMZWZ0IiAmJiBjdXJzb3JQb3MgPT09IDAgfHwgZTExLmtleSA9PT0gIkFycm93UmlnaHQiICYmIGN1cnNvclBvcyA9PT0gdGV4dExlbmd0aCkgewogICAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJBcnJvd1VwIiB8fCBlMTEua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gKGVkaXRvci50ZXh0Q29udGVudCB8fCAiIikuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgY29uc3QgY3VycmVudExpbmUgPSB0aGlzLmdldEN1cnJlbnRMaW5lSW5kZXgoZWRpdG9yKTsKICAgICAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIGN1cnJlbnRMaW5lID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd0Rvd24iICYmIGN1cnJlbnRMaW5lID09PSBsaW5lcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgKGUxMSkgPT4gewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCB0ZXh0OSA9IGUxMS5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCJ0ZXh0L3BsYWluIik7CiAgICAgICAgICBpZiAodGV4dDkpIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgICAgIHJhbmdlMi5kZWxldGVDb250ZW50cygpOwogICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dDkpOwogICAgICAgICAgICAgIHJhbmdlMi5pbnNlcnROb2RlKHRleHROb2RlKTsKICAgICAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICAgICAgcmFuZ2UyLnNldEVuZEFmdGVyKHRleHROb2RlKTsKICAgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICAgICAgaGFuZGxlcnMyLm9uSW5wdXQobmV3IElucHV0RXZlbnQoImlucHV0IikpOwogICAgICAgICAgICAgIHRoaXMudXBkYXRlTGluZU51bWJlcnMoZWxlbWVudDQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCkpOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsICgpID0+IGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCkpOwogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICAgICAgY29uc3QgbGluZU51bWJlcnNDb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubGluZS1udW1iZXJzIik7CiAgICAgICAgaWYgKCFlZGl0b3IgfHwgIWxpbmVOdW1iZXJzQ29udGFpbmVyKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IGNvbnRlbnQzID0gZWRpdG9yLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudDMuc3BsaXQoIlxuIik7CiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIHx8IDE7CiAgICAgICAgbGV0IGxpbmVOdW1iZXJzSHRtbCA9ICIiOwogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSBsaW5lQ291bnQ7IGkxMSsrKSB7CiAgICAgICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgICAgIH0KICAgICAgICBsaW5lTnVtYmVyc0NvbnRhaW5lci5pbm5lckhUTUwgPSBsaW5lTnVtYmVyc0h0bWw7CiAgICAgIH0KICAgICAgZ2V0Q3VycmVudExpbmVJbmRleChlZGl0b3IpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gcmFuZ2UyLmNsb25lUmFuZ2UoKTsKICAgICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpOwogICAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0KTsKICAgICAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpOwogICAgICAgIGNvbnN0IGxpbmVzQmVmb3JlQ3Vyc29yID0gdGV4dEJlZm9yZUN1cnNvci5zcGxpdCgiXG4iKTsKICAgICAgICByZXR1cm4gbGluZXNCZWZvcmVDdXJzb3IubGVuZ3RoIC0gMTsKICAgICAgfQogICAgICBhc3luYyBhcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgICAgICBpZiAoIWVkaXRvcikKICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAoIXRoaXMuaGlnaGxpZ2h0SnMpIHsKICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgICAgIH0KICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAidHlwZXNjcmlwdCI7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KGNvbnRlbnQzLCB7CiAgICAgICAgICAgIGxhbmd1YWdlLAogICAgICAgICAgICBpZ25vcmVJbGxlZ2FsczogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7CiAgICAgICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlZGl0b3IgJiYgY3Vyc29yUG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCBjdXJzb3JQb3MpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiU3ludGF4IGhpZ2hsaWdodGluZyBmYWlsZWQ6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgICAgIH0KICAgICAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgICAgIHJldHVybiBlZGl0b3I/LnRleHRDb250ZW50IHx8ICIiOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICAgICAgaWYgKCFlZGl0b3IpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWRpdG9yLnRleHRDb250ZW50ID0gY29udGVudDM7CiAgICAgICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgY29uc3QgYmxvY2sgPSB7CiAgICAgICAgICAgIGlkOiBlZGl0b3IuZGF0YXNldC5ibG9ja0lkIHx8ICIiLAogICAgICAgICAgICB0eXBlOiAiY29kZSIsCiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgICAgIGxhbmd1YWdlOiBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1ibG9jay1jb250YWluZXIiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIikgfHwgInR5cGVzY3JpcHQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICAgICAgaWYgKCFlZGl0b3IpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZTIuc3RhcnRDb250YWluZXIpKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTsKICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZTIuc3RhcnRDb250YWluZXIsIHJhbmdlMi5zdGFydE9mZnNldCk7CiAgICAgICAgcmV0dXJuIHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICBjb25zdCBsZW5ndGggPSBlZGl0b3IudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwOwogICAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIGxlbmd0aCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICAgICAgZWRpdG9yPy5mb2N1cygpOwogICAgICB9CiAgICAgIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgICAgICBpZiAoIWVkaXRvcikKICAgICAgICAgIHJldHVybjsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpOwogICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGVkaXRvciwgcG9zaXRpb24zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBpZiAocG9zaXRpb24zID09PSBudWxsKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgY29udGVudDMgPSB0aGlzLmdldENvbnRlbnQoZWxlbWVudDQpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGNvbnRlbnQzLnN1YnN0cmluZygwLCBwb3NpdGlvbjMpLAogICAgICAgICAgYWZ0ZXI6IGNvbnRlbnQzLnN1YnN0cmluZyhwb3NpdGlvbjMpCiAgICAgICAgfTsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLyogQ29kZSBCbG9jayBDb250YWluZXIgLSBNaW5pbWFsaXN0IHNoYWRjbiBzdHlsZSAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLmVkaXRpbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgLSBTaW1wbGlmaWVkICovCiAgICAgIC5jb2RlLWhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yOmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvcHkgQnV0dG9uIC0gTWluaW1hbCAqLwogICAgICAuY29weS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmNvcHktYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvcHktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLmNvcHktYnV0dG9uLmNvcGllZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDU5NjY5IiwgIiMxMGI5ODEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQogICAgICAKICAgICAgLmNvcHktYnV0dG9uOmhvdmVyIC5jb3B5LWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LXRleHQgewogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQm9keSAqLwogICAgICAuY29kZS1ib2R5IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBMaW5lIE51bWJlcnMgLSBTdWJ0bGUgKi8KICAgICAgLmxpbmUtbnVtYmVycyB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZzogMTJweCAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICB9CiAgICAgIAogICAgICAubGluZS1udW1iZXIgewogICAgICAgIHBhZGRpbmc6IDAgMTJweCAwIDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzRiNTU2MyIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NNb25vRm9udEZhbWlseX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogQ29kZSBDb250ZW50ICovCiAgICAgIC5jb2RlLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLXByZSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NNb25vRm9udEZhbWlseX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQogICAgICAKICAgICAgLyogUGxhY2Vob2xkZXIgKi8KICAgICAgLmNvZGUtZWRpdG9yOmVtcHR5OjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICIvLyBUeXBlIG9yIHBhc3RlIGNvZGUgaGVyZS4uLiI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFdoZW4gZWRpdGluZyAoZm9jdXNlZCksIHNob3cgZ3JleSB0ZXh0IHdpdGhvdXQgaGlnaGxpZ2h0aW5nICovCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX0gIWltcG9ydGFudDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLmVkaXRpbmcgLmNvZGUtZWRpdG9yICogewogICAgICAgIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFN5bnRheCBIaWdobGlnaHRpbmcgLSBNdXRlZCBjb2xvcnMgKi8KICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWtleXdvcmQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zdHJpbmcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtbnVtYmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWZ1bmN0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzYwYTVmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWNvbW1lbnQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjNmI3MjgwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXZhcmlhYmxlLAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtYXR0ciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jbGFzcywKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXRpdGxlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzYwYTVmYSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcGFyYW1zIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWJ1aWx0X2luIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWxpdGVyYWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzdjM2FlZCIsICIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtbWV0YSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1wdW5jdHVhdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNkMWQ1ZGIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10YWcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtYXR0cmlidXRlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzYwYTVmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXNlbGVjdG9yLXRhZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci1jbGFzcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci1pZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNlbGVjdGlvbiAqLwogICAgICAuY29kZS1lZGl0b3I6OnNlbGVjdGlvbiwKICAgICAgLmNvZGUtZWRpdG9yICo6OnNlbGVjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoOTksIDEwMiwgMjQxLCAwLjIpIiwgInJnYmEoOTksIDEwMiwgMjQxLCAwLjMpIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAtIE1pbmltYWwgKi8KICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIGhlaWdodDogNnB4OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgIGA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvbGlzdC5ibG9jay5qcwp2YXIgTGlzdEJsb2NrSGFuZGxlcjsKdmFyIGluaXRfbGlzdF9ibG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvdGV4dC9saXN0LmJsb2NrLmpzIigpIHsKICAgIGluaXRfYmxvY2tfYmFzZSgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfd3lzaXd5Z19ibG9ja3MoKTsKICAgIGluaXRfd3lzaXd5Z19zZWxlY3Rpb24oKTsKICAgIExpc3RCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogICAgICB0eXBlID0gImxpc3QiOwogICAgICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24gYW5kIGxpc3Qgc3RhdGUKICAgICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgICBsYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgICAgICBjb25zdCBzZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiI7CiAgICAgICAgY29uc3QgbGlzdFR5cGUgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICAgICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICBjb25zdCBsaXN0Q29udGVudCA9IHRoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpOwogICAgICAgIHJldHVybiBgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPiR7bGlzdENvbnRlbnR9PC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCBtZXRhZGF0YSkgewogICAgICAgIGlmICghY29udGVudDMpCiAgICAgICAgICByZXR1cm4gIjx1bD48bGk+PC9saT48L3VsPiI7CiAgICAgICAgY29uc3QgbGlzdFR5cGUgPSBtZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICAgICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpOwogICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IGxpbmVzLm1hcCgobGluZSkgPT4gYDxsaT4ke2xpbmV9PC9saT5gKS5qb2luKCIiKTsKICAgICAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7bGlzdEl0ZW1zfTwvJHtsaXN0VGFnfT5gOwogICAgICB9CiAgICAgIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgICAgICBpZiAoIWxpc3RCbG9jaykgewogICAgICAgICAgY29uc29sZS5lcnJvcigiTGlzdEJsb2NrSGFuZGxlci5zZXR1cDogTm8gbGlzdCBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmICFsaXN0QmxvY2suaW5uZXJIVE1MKSB7CiAgICAgICAgICBsaXN0QmxvY2suaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJMaXN0Q29udGVudChibG9jay5jb250ZW50LCBibG9jay5tZXRhZGF0YSk7CiAgICAgICAgfQogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgJiYgIWUxMS5zaGlmdEtleSkgewogICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICAgICAgICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMaSAmJiBjdXJyZW50TGkudGV4dENvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICB9KTsKICAgICAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgICAgIH0pOwogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgICAgIH0pOwogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydCgpOwogICAgICAgIH0pOwogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsICgpID0+IHsKICAgICAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICAgICAgfSk7CiAgICAgICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgICAgIH0pOwogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDApOwogICAgICAgIH0pOwogICAgICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBsaXN0QmxvY2ssIGJsb2NrKTsKICAgICAgfQogICAgICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spIHsKICAgICAgICBjb25zdCBjaGVja1NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrMiA9IGxpc3RCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00obGlzdEJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICAgICAgaWYgKHN0YXJ0SW5CbG9jayB8fCBlbmRJbkJsb2NrKSB7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgICAgICByZWN0LAogICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGxpc3RCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0uYmluZCh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICBkZXRhaWwsCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KTsKICAgICAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgICBnZXRQbGFjZWhvbGRlcigpIHsKICAgICAgICByZXR1cm4gIiI7CiAgICAgIH0KICAgICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGxpc3QgZnVuY3Rpb25hbGl0eQogICAgICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgICAgIGlmICghbGlzdEJsb2NrKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00obGlzdEJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGxpc3RCbG9jayk7CiAgICAgICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgICAgcmV0dXJuIHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgIH0KICAgICAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgICAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgICAgIGlmICghbGlzdEJsb2NrKQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpOwogICAgICAgIGNvbnN0IGNvbnRlbnQzID0gQXJyYXkuZnJvbShsaXN0SXRlbXMpLm1hcCgobGkyKSA9PiBsaTIudGV4dENvbnRlbnQgfHwgIiIpLmpvaW4oIlxuIik7CiAgICAgICAgcmV0dXJuIGNvbnRlbnQzOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzLCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICAgICAgaWYgKCFsaXN0QmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrOwogICAgICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3IoInVsLCBvbCIpOwogICAgICAgIGNvbnN0IGlzT3JkZXJlZCA9IGxpc3RFbGVtZW50Py50YWdOYW1lID09PSAiT0wiOwogICAgICAgIGxpc3RCbG9jay5pbm5lckhUTUwgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCB7IGxpc3RUeXBlOiBpc09yZGVyZWQgPyAib3JkZXJlZCIgOiAidW5vcmRlcmVkIiB9KTsKICAgICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICAgIGxpc3RCbG9jay5mb2N1cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICAgICAgaWYgKCFsaXN0QmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgZmlyc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgICAgIGlmIChmaXJzdExpKSB7CiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShmaXJzdExpKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZSkgewogICAgICAgICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgICAgIHJhbmdlMi5zZXRFbmQodGV4dE5vZGUsIDApOwogICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICAgICAgaWYgKCFsaXN0QmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbGFzdExpID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3IoImxpOmxhc3QtY2hpbGQiKTsKICAgICAgICBpZiAobGFzdExpKSB7CiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGxhc3RMaSk7CiAgICAgICAgICBpZiAodGV4dE5vZGUpIHsKICAgICAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGV4dE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwOwogICAgICAgICAgICByYW5nZTIuc2V0U3RhcnQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgICAgICByYW5nZTIuc2V0RW5kKHRleHROb2RlLCB0ZXh0TGVuZ3RoKTsKICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBnZXRGaXJzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICAgICAgaWYgKGVsZW1lbnQ0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgaWYgKGZpcnN0VGV4dCkKICAgICAgICAgICAgcmV0dXJuIGZpcnN0VGV4dDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICAgICAgaWYgKGVsZW1lbnQ0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSBlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgICAgICByZXR1cm4gbGFzdFRleHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGZvY3VzKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICAgICAgaWYgKCFsaXN0QmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgICB9CiAgICAgICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGxpc3RCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBsaXN0QmxvY2spIHsKICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiLCBjb250ZXh0MikgewogICAgICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICAgICAgaWYgKCFsaXN0QmxvY2spCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgICB9CiAgICAgICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICAgICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgICAgICB0aGlzLnNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICAgICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgICAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcwp2YXIgSW1hZ2VCbG9ja0hhbmRsZXI7CnZhciBpbml0X2ltYWdlX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcyIoKSB7CiAgICBpbml0X2Jsb2NrX2Jhc2UoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBJbWFnZUJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgICAgIHR5cGUgPSAiaW1hZ2UiOwogICAgICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgICAgICBjb25zdCBpbWFnZVVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmw7CiAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICBjb25zdCBpc0xvYWRpbmcgPSBibG9jay5tZXRhZGF0YT8ubG9hZGluZzsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1oYXMtaW1hZ2U9IiR7ISFpbWFnZVVybH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgICR7aXNMb2FkaW5nID8gdGhpcy5yZW5kZXJMb2FkaW5nKCkgOiBpbWFnZVVybCA/IHRoaXMucmVuZGVySW1hZ2UoaW1hZ2VVcmwsIGFsdFRleHQpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImltYWdlLWZpbGUtaW5wdXQiIAogICAgICAgICAgICAgICBhY2NlcHQ9ImltYWdlLyoiIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICByZW5kZXJQbGFjZWhvbGRlcigpIHsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtaWNvbiIgc3R5bGU9InBvaW50ZXItZXZlbnRzOiBub25lOyI+CiAgICAgICAgICA8c3ZnIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgICAgICAgICA8cmVjdCB4PSIzIiB5PSIzIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHJ4PSIyIiByeT0iMiIvPgogICAgICAgICAgICA8Y2lyY2xlIGN4PSI4LjUiIGN5PSI4LjUiIHI9IjEuNSIvPgogICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPSIyMSAxNSAxNiAxMCA1IDIxIi8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtdGV4dCIgc3R5bGU9InBvaW50ZXItZXZlbnRzOiBub25lOyI+Q2xpY2sgdG8gdXBsb2FkIGFuIGltYWdlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWhpbnQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHJlbmRlckltYWdlKHVybCwgYWx0VGV4dCkgewogICAgICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWNvbnRhaW5lciI+CiAgICAgICAgPGltZyBzcmM9IiR7dXJsfSIgYWx0PSIke3RoaXMuZXNjYXBlSHRtbChhbHRUZXh0KX0iIC8+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICByZW5kZXJMb2FkaW5nKCkgewogICAgICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWxvYWRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy10ZXh0Ij5VcGxvYWRpbmcgaW1hZ2UuLi48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmltYWdlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7CiAgICAgICAgaWYgKCFjb250YWluZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBjb250YWluZXIiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFmaWxlSW5wdXQpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiKTsKICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFBsYWNlaG9sZGVyIGNsaWNrZWQsIG9wZW5pbmcgZmlsZSBzZWxlY3RvciIpOwogICAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgICAgIH0pOwogICAgICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJJbWFnZUJsb2NrSGFuZGxlcjogRmlsZSBzZWxlY3RlZDoiLCBmaWxlLm5hbWUpOwogICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgKGUxMSkgPT4gewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgICB9KTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpOwogICAgICAgICAgY29uc3QgZmlsZSA9IGUxMS5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpICYmICFibG9jay5tZXRhZGF0YT8udXJsKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZVVwbG9hZChmaWxlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgICAgICBibG9jay5tZXRhZGF0YS51cmwgPSB2b2lkIDA7CiAgICAgICAgICAgICAgYmxvY2subWV0YWRhdGEubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXN5bmMgaGFuZGxlRmlsZVVwbG9hZChmaWxlLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTdGFydGluZyBmaWxlIHVwbG9hZCIsIHsKICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsCiAgICAgICAgICBmaWxlU2l6ZTogZmlsZS5zaXplLAogICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgICAgICB9KTsKICAgICAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkgewogICAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IG1heFNpemUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZpbGUgdG9vIGxhcmdlLiBNYXhpbXVtIHNpemUgaXMgMTBNQiIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gdHJ1ZTsKICAgICAgICBibG9jay5tZXRhZGF0YS5maWxlTmFtZSA9IGZpbGUubmFtZTsKICAgICAgICBibG9jay5tZXRhZGF0YS5maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKICAgICAgICBibG9jay5tZXRhZGF0YS5taW1lVHlwZSA9IGZpbGUudHlwZTsKICAgICAgICBjb25zb2xlLmxvZygiSW1hZ2VCbG9ja0hhbmRsZXI6IFNldCBsb2FkaW5nIHN0YXRlLCByZXF1ZXN0aW5nIHVwZGF0ZSIpOwogICAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGZpbGUpOwogICAgICAgICAgYmxvY2subWV0YWRhdGEudXJsID0gZGF0YVVybDsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IG5hbWVXaXRob3V0RXh0ID0gZmlsZS5uYW1lLnJlcGxhY2UoL1wuW14vLl0rJC8sICIiKTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuYW1lV2l0aG91dEV4dDsKICAgICAgICAgIGNvbnNvbGUubG9nKCJJbWFnZUJsb2NrSGFuZGxlcjogVXBsb2FkIGNvbXBsZXRlLCByZXF1ZXN0aW5nIHVwZGF0ZSIsIHsKICAgICAgICAgICAgaGFzVXJsOiAhIWJsb2NrLm1ldGFkYXRhLnVybCwKICAgICAgICAgICAgdXJsTGVuZ3RoOiBkYXRhVXJsLmxlbmd0aCwKICAgICAgICAgICAgYWx0VGV4dDogYmxvY2suY29udGVudAogICAgICAgICAgfSk7CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHVwbG9hZCBpbWFnZToiLCBlcnJvcik7CiAgICAgICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZTExLnRhcmdldD8ucmVzdWx0OwogICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgICAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICAgICAgfQogICAgICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgICAgIHJldHVybiBibG9jaz8uY29udGVudCB8fCAiIjsKICAgICAgfQogICAgICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KTsKICAgICAgICBpZiAoYmxvY2spIHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgICAgICBpZiAoIWJsb2NrSWQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IGJsb2NrSWQsCiAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgY29udGVudDogIiIsCiAgICAgICAgICBtZXRhZGF0YToge30KICAgICAgICB9OwogICAgICB9CiAgICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogICAgICB9CiAgICAgIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgIH0KICAgICAgZm9jdXMoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29udGFpbmVyPy5mb2N1cygpOwogICAgICB9CiAgICAgIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgICAgfQogICAgICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLyogSW1hZ2UgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFVwbG9hZCBQbGFjZWhvbGRlciAqLwogICAgICAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0OHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXI6aG92ZXIgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmZjZmZiIsICIjMWUxYjRiIil9OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWljb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSW1hZ2UgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIGlucHV0IGhpZGRlbiAqLwogICAgICAuaW1hZ2UtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS95b3V0dWJlLmJsb2NrLmpzCnZhciBZb3VUdWJlQmxvY2tIYW5kbGVyOwp2YXIgaW5pdF95b3V0dWJlX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS95b3V0dWJlLmJsb2NrLmpzIigpIHsKICAgIGluaXRfYmxvY2tfYmFzZSgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIFlvdVR1YmVCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogICAgICB0eXBlID0gInlvdXR1YmUiOwogICAgICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgICAgICBjb25zdCB2aWRlb0lkID0gYmxvY2subWV0YWRhdGE/LnZpZGVvSWQ7CiAgICAgICAgY29uc3QgdXJsID0gYmxvY2subWV0YWRhdGE/LnVybCB8fCAiIjsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJ5b3V0dWJlLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWhhcy12aWRlbz0iJHshIXZpZGVvSWR9Ij4KICAgICAgICAke3ZpZGVvSWQgPyB0aGlzLnJlbmRlclZpZGVvKHZpZGVvSWQpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcih1cmwpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgcmVuZGVyUGxhY2Vob2xkZXIodXJsKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1wbGFjZWhvbGRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItaWNvbiI+CiAgICAgICAgICA8c3ZnIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjE1IDMuMTg0Yy0zLjYwNC0uMjQ2LTExLjYzMS0uMjQ1LTE1LjIzIDAtMy44OTcuMjY2LTQuMzU2IDIuNjItNC4zODUgOC44MTYuMDI5IDYuMTg1LjQ4NCA4LjU0OSA0LjM4NSA4LjgxNiAzLjYuMjQ1IDExLjYyNi4yNDYgMTUuMjMgMCAzLjg5Ny0uMjY2IDQuMzU2LTIuNjIgNC4zODUtOC44MTYtLjAyOS02LjE4NS0uNDg0LTguNTQ5LTQuMzg1LTguODE2em0tMTAuNjE1IDEyLjgxNnYtOGw4IDMuOTkzLTggNC4wMDd6Ii8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwbGFjZWhvbGRlci10ZXh0Ij5FbnRlciBZb3VUdWJlIFVSTDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIAogICAgICAgICAgICAgICBjbGFzcz0ieW91dHViZS11cmwtaW5wdXQiIAogICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PS4uLiIgCiAgICAgICAgICAgICAgIHZhbHVlPSIke3RoaXMuZXNjYXBlSHRtbCh1cmwpfSIgLz4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ5b3V0dWJlLWVtYmVkLWJ0biI+RW1iZWQgVmlkZW88L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHJlbmRlclZpZGVvKHZpZGVvSWQpIHsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJ5b3V0dWJlLWNvbnRhaW5lciI+CiAgICAgICAgPGlmcmFtZSAKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHt2aWRlb0lkfSIKICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIgogICAgICAgICAgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmUiCiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4KICAgICAgICA+PC9pZnJhbWU+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi55b3V0dWJlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChibG9jay5tZXRhZGF0YT8udmlkZW9JZCkgewogICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJEZWxldGUiIHx8IGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICAgICAgY29uc3QgZW1iZWRCdG4gPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1lbWJlZC1idG4iKTsKICAgICAgICBpZiAoIXVybElucHV0IHx8ICFlbWJlZEJ0bikKICAgICAgICAgIHJldHVybjsKICAgICAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICAgIGVtYmVkQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHVybElucHV0LnZhbHVlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICB9KTsKICAgICAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuZW1iZWRWaWRlbyh1cmxJbnB1dC52YWx1ZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB1cmxJbnB1dC5ibHVyKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigicGFzdGUiLCAoZTExKSA9PiB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgY29uc3QgcGFzdGVkVXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgICAgICAgIGlmICh0aGlzLmV4dHJhY3RZb3VUdWJlVmlkZW9JZChwYXN0ZWRVcmwpKSB7CiAgICAgICAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHBhc3RlZFVybCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDApOwogICAgICAgIH0pOwogICAgICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICAgICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybElucHV0LnZhbHVlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVtYmVkVmlkZW8odXJsLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgdmlkZW9JZCA9IHRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHVybCk7CiAgICAgICAgaWYgKCF2aWRlb0lkKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHt9OwogICAgICAgIGJsb2NrLm1ldGFkYXRhLnZpZGVvSWQgPSB2aWRlb0lkOwogICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybDsKICAgICAgICBibG9jay5jb250ZW50ID0gYFlvdVR1YmUgVmlkZW86ICR7dmlkZW9JZH1gOwogICAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgICB9CiAgICAgIGV4dHJhY3RZb3VUdWJlVmlkZW9JZCh1cmwpIHsKICAgICAgICBjb25zdCBwYXR0ZXJuczIgPSBbCiAgICAgICAgICAvKD86eW91dHViZVwuY29tXC8oPzpbXlwvXStcLy4rXC98KD86dnxlKD86bWJlZCk/KVwvfC4qWz8mXXY9KXx5b3V0dVwuYmVcLykoW14iJj9cLyBdezExfSkvLAogICAgICAgICAgL3lvdXR1YmVcLmNvbVwvZW1iZWRcLyhbXiImP1wvIF17MTF9KS8sCiAgICAgICAgICAveW91dHViZVwuY29tXC93YXRjaFw/dj0oW14iJj9cLyBdezExfSkvLAogICAgICAgICAgL3lvdXR1XC5iZVwvKFteIiY/XC8gXXsxMX0pLwogICAgICAgIF07CiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zMikgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gdXJsLm1hdGNoKHBhdHRlcm4pOwogICAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgICByZXR1cm4gbWF0Y2gyWzFdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgICAgIH0KICAgICAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5nZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KTsKICAgICAgICByZXR1cm4gYmxvY2s/LmNvbnRlbnQgfHwgIiI7CiAgICAgIH0KICAgICAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gY29udGVudDM7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgICAgICBpZiAoIWJsb2NrSWQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaWQ6IGJsb2NrSWQsCiAgICAgICAgICB0eXBlOiAieW91dHViZSIsCiAgICAgICAgICBjb250ZW50OiAiIiwKICAgICAgICAgIG1ldGFkYXRhOiB7fQogICAgICAgIH07CiAgICAgIH0KICAgICAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgICAgfQogICAgICBmb2N1cyhlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi55b3V0dWJlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICAgICAgaWYgKHVybElucHV0KSB7CiAgICAgICAgICB1cmxJbnB1dC5mb2N1cygpOwogICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgICBjb250YWluZXIuZm9jdXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogICAgICB9CiAgICAgIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGdldFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gYAogICAgICAvKiBZb3VUdWJlIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBZb3VUdWJlIFBsYWNlaG9sZGVyICovCiAgICAgIC55b3V0dWJlLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2VmNDQ0NCIpfTsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtdXJsLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtdXJsLWlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzFmMjkzNyIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtdXJsLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWVtYmVkLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzExMTgyNyIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG46YWN0aXZlIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAvKiBZb3VUdWJlIENvbnRhaW5lciAqLwogICAgICAueW91dHViZS1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlOyAvKiAxNjo5IGFzcGVjdCByYXRpbyAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWNvbnRhaW5lciBpZnJhbWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcwp2YXIgQXR0YWNobWVudEJsb2NrSGFuZGxlcjsKdmFyIGluaXRfYXR0YWNobWVudF9ibG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcyIoKSB7CiAgICBpbml0X2Jsb2NrX2Jhc2UoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBBdHRhY2htZW50QmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICAgICAgdHlwZSA9ICJhdHRhY2htZW50IjsKICAgICAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICAgICAgY29uc3QgZmlsZXMgPSBibG9jay5tZXRhZGF0YT8uZmlsZXMgfHwgW107CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaWNvbiI+XHV7MUY0Q0V9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LXRpdGxlIj5GaWxlIEF0dGFjaG1lbnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1saXN0Ij4KICAgICAgICAgICR7ZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucmVuZGVyRmlsZXMoZmlsZXMpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImF0dGFjaG1lbnQtZmlsZS1pbnB1dCIgCiAgICAgICAgICAgICAgIG11bHRpcGxlIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgICAgJHtmaWxlcy5sZW5ndGggPiAwID8gJzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPicgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHJlbmRlclBsYWNlaG9sZGVyKCkgewogICAgICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPkNsaWNrIHRvIGFkZCBmaWxlczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWhpbnQiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHJlbmRlckZpbGVzKGZpbGVzKSB7CiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYAogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtmaWxlLmlkfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pY29uIj4ke3RoaXMuZ2V0RmlsZUljb24oZmlsZS50eXBlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIj4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtZmlsZSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij5ceEQ3PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbigiIik7CiAgICAgIH0KICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBmaWxlSW5wdXQgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1maWxlLWlucHV0Iik7CiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIWZpbGVJbnB1dCkgewogICAgICAgICAgY29uc29sZS5lcnJvcigiQXR0YWNobWVudEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICAgICAgaWYgKCFibG9jay5tZXRhZGF0YS5maWxlcykKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiKTsKICAgICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCBhZGRNb3JlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5hZGQtbW9yZS1maWxlcyIpOwogICAgICAgIGlmIChhZGRNb3JlQnRuKSB7CiAgICAgICAgICBhZGRNb3JlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgY29uc3QgZmlsZXMgPSBpbnB1dC5maWxlczsKICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInJlbW92ZS1maWxlIikpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgY29uc3QgZmlsZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLWlkIik7CiAgICAgICAgICAgIGlmIChmaWxlSWQpIHsKICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoZmlsZUlkLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICAgIH0pOwogICAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgICB9KTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3ZlciIpOwogICAgICAgICAgY29uc3QgZmlsZXMgPSBlMTEuZGF0YVRyYW5zZmVyPy5maWxlczsKICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGNvbnRhaW5lciAmJiBibG9jay5tZXRhZGF0YT8uZmlsZXM/Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBibG9jay5tZXRhZGF0YS5maWxlcyA9IFtdOwogICAgICAgICAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhmaWxlcywgYmxvY2ssIGhhbmRsZXJzMikgewogICAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHt9OwogICAgICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgICAgICBibG9jay5tZXRhZGF0YS5maWxlcyA9IFtdOwogICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tKGZpbGVzKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChmaWxlKTsKICAgICAgICAgICAgY29uc3QgZmlsZURhdGEgPSB7CiAgICAgICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSwKICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsCiAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLAogICAgICAgICAgICAgIGRhdGE6IGRhdGFVcmwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgYmxvY2subWV0YWRhdGEuZmlsZXMucHVzaChmaWxlRGF0YSk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gYXR0YWNoIGZpbGU6IiwgZmlsZS5uYW1lLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBgJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGh9IGZpbGUke2Jsb2NrLm1ldGFkYXRhLmZpbGVzLmxlbmd0aCAhPT0gMSA/ICJzIiA6ICIifSBhdHRhY2hlZGA7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgIH0KICAgICAgcmVtb3ZlRmlsZShmaWxlSWQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy5maWxlcykKICAgICAgICAgIHJldHVybjsKICAgICAgICBibG9jay5tZXRhZGF0YS5maWxlcyA9IGJsb2NrLm1ldGFkYXRhLmZpbGVzLmZpbHRlcigoZjcpID0+IGY3LmlkICE9PSBmaWxlSWQpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggPiAwID8gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgIDogIiI7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgIH0KICAgICAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZTExLnRhcmdldD8ucmVzdWx0OwogICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGdldEZpbGVJY29uKG1pbWVUeXBlKSB7CiAgICAgICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpKQogICAgICAgICAgcmV0dXJuICJcdXsxRjVCQ31cdUZFMEYiOwogICAgICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgICAgIHJldHVybiAiXHV7MUYzQTV9IjsKICAgICAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCiAgICAgICAgICByZXR1cm4gIlx1ezFGM0I1fSI7CiAgICAgICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwZGYiKSkKICAgICAgICAgIHJldHVybiAiXHV7MUY0QzR9IjsKICAgICAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInppcCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJyYXIiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygidGFyIikpCiAgICAgICAgICByZXR1cm4gIlx1ezFGNUM0fVx1RkUwRiI7CiAgICAgICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJzaGVldCIpKQogICAgICAgICAgcmV0dXJuICJcdXsxRjRDQX0iOwogICAgICAgIGlmIChtaW1lVHlwZS5pbmNsdWRlcygiZG9jdW1lbnQiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygibXN3b3JkIikpCiAgICAgICAgICByZXR1cm4gIlx1ezFGNEREfSI7CiAgICAgICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKSkKICAgICAgICAgIHJldHVybiAiXHV7MUY0Q0J9IjsKICAgICAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInRleHQiKSkKICAgICAgICAgIHJldHVybiAiXHV7MUY0QzN9IjsKICAgICAgICByZXR1cm4gIlx1ezFGNEMxfSI7CiAgICAgIH0KICAgICAgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgICAgICBpZiAoYnl0ZXMgPT09IDApCiAgICAgICAgICByZXR1cm4gIjAgQnl0ZXMiOwogICAgICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgICAgICBjb25zdCBzaXplcyA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICAgICAgICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICAgICAgfQogICAgICBnZW5lcmF0ZUlkKCkgewogICAgICAgIHJldHVybiBgZmlsZS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgICAgIH0KICAgICAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogICAgICB9CiAgICAgIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICAgICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgICAgIGlmIChibG9jaykgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGNvbnRlbnQzOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgYmxvY2tJZCA9IGNvbnRhaW5lcj8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgaWYgKCFibG9ja0lkKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkOiBibG9ja0lkLAogICAgICAgICAgdHlwZTogImF0dGFjaG1lbnQiLAogICAgICAgICAgY29udGVudDogIiIsCiAgICAgICAgICBtZXRhZGF0YToge30KICAgICAgICB9OwogICAgICB9CiAgICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogICAgICB9CiAgICAgIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgIH0KICAgICAgZm9jdXMoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb250YWluZXI/LmZvY3VzKCk7CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogICAgICB9CiAgICAgIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGdldFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gYAogICAgICAvKiBBdHRhY2htZW50IEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzExMTgyNyIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lci5kcmFnLW92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmF0dGFjaG1lbnQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBMaXN0ICovCiAgICAgIC5hdHRhY2htZW50LWxpc3QgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQogICAgICAKICAgICAgLyogUGxhY2Vob2xkZXIgKi8KICAgICAgLmF0dGFjaG1lbnQtcGxhY2Vob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5wbGFjZWhvbGRlci1oaW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEZpbGUgSXRlbXMgKi8KICAgICAgLmF0dGFjaG1lbnQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICB9CiAgICAgIAogICAgICAuZmlsZS1pY29uIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWluZm8gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLXNpemUgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZSB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIAogICAgICAucmVtb3ZlLWZpbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVlMmUyIiwgIiM5OTFiMWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZjYTVhNSIsICIjZGMyNjI2Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZmNhNWE1Iil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBBZGQgTW9yZSBGaWxlcyBCdXR0b24gKi8KICAgICAgLmFkZC1tb3JlLWZpbGVzIHsKICAgICAgICBtYXJnaW46IDhweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgIH0KICAgICAgCiAgICAgIC5hZGQtbW9yZS1maWxlczpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhpZGRlbiBmaWxlIGlucHV0ICovCiAgICAgIC5hdHRhY2htZW50LWZpbGUtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9kaXZpZGVyLmJsb2NrLmpzCnZhciBEaXZpZGVyQmxvY2tIYW5kbGVyOwp2YXIgaW5pdF9kaXZpZGVyX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9jb250ZW50L2RpdmlkZXIuYmxvY2suanMiKCkgewogICAgaW5pdF9ibG9ja19iYXNlKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgRGl2aWRlckJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgICAgIHR5cGUgPSAiZGl2aWRlciI7CiAgICAgIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJibG9jayBkaXZpZGVyJHtzZWxlY3RlZENsYXNzfSIgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIgdGFiaW5kZXg9IjAiPgogICAgICAgIDxocj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgZGl2aWRlckJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmRpdmlkZXIiKTsKICAgICAgICBpZiAoIWRpdmlkZXJCbG9jaykKICAgICAgICAgIHJldHVybjsKICAgICAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBkaXZpZGVyQmxvY2suZm9jdXMoKTsKICAgICAgICAgIGhhbmRsZXJzMi5vbkZvY3VzPy4oKTsKICAgICAgICB9KTsKICAgICAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25Gb2N1cz8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZGl2aWRlckJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgICAgICBoYW5kbGVyczIub25CbHVyPy4oKTsKICAgICAgICB9KTsKICAgICAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiQmFja3NwYWNlIiB8fCBlMTEua2V5ID09PSAiRGVsZXRlIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duPy4oZTExKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBnZXRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgLmJsb2NrLmRpdmlkZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlcjpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLmJsb2NrLmRpdmlkZXIuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjA1KSIsICJyZ2JhKDc3LCAxNDgsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjIpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjIpIil9OwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlciBociB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9tYXJrZG93bi5ibG9jay5qcwp2YXIgTWFya2Rvd25CbG9ja0hhbmRsZXI7CnZhciBpbml0X21hcmtkb3duX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9jb250ZW50L21hcmtkb3duLmJsb2NrLmpzIigpIHsKICAgIGluaXRfYmxvY2tfYmFzZSgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIE1hcmtkb3duQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICAgICAgdHlwZSA9ICJtYXJrZG93biI7CiAgICAgIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1lZGl0LW1vZGU9IiR7aXNFZGl0TW9kZX0iPgogICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1pY29uIj5NXHUyMTkzPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi10aXRsZSI+TWFya2Rvd248L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1hcmtkb3duLXRvZ2dsZS1tb2RlIiB0aXRsZT0iJHtpc0VkaXRNb2RlID8gIlByZXZpZXciIDogIkVkaXQifSI+CiAgICAgICAgICAgICR7aXNFZGl0TW9kZSA/ICJcdXsxRjQ0MX1cdUZFMEYiIDogIlx1MjcwRlx1RkUwRiJ9CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1jb250ZW50Ij4KICAgICAgICAgICR7aXNFZGl0TW9kZSA/IHRoaXMucmVuZGVyRWRpdG9yKGNvbnRlbnQzKSA6IHRoaXMucmVuZGVyUHJldmlldyhjb250ZW50Myl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICByZW5kZXJFZGl0b3IoY29udGVudDMpIHsKICAgICAgICByZXR1cm4gYAogICAgICA8dGV4dGFyZWEgY2xhc3M9Im1hcmtkb3duLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgbWFya2Rvd24gY29udGVudC4uLiIKICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChjb250ZW50Myl9PC90ZXh0YXJlYT4KICAgIGA7CiAgICAgIH0KICAgICAgcmVuZGVyUHJldmlldyhjb250ZW50MykgewogICAgICAgIGNvbnN0IGh0bWw3ID0gdGhpcy5wYXJzZU1hcmtkb3duKGNvbnRlbnQzKTsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1wcmV2aWV3Ij4KICAgICAgICAke2h0bWw3IHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgdG9nZ2xlQnRuID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXRvZ2dsZS1tb2RlIik7CiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIXRvZ2dsZUJ0bikgewogICAgICAgICAgY29uc29sZS5lcnJvcigiTWFya2Rvd25CbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHt9OwogICAgICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICB0b2dnbGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlKSB7CiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gIWJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGU7CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICB9KTsKICAgICAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSkgewogICAgICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2V0dXBQcmV2aWV3KGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0dXBFZGl0b3IoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKCFlZGl0b3IpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIlRhYiIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICAgICAgY29uc3QgdmFsdWUyID0gZWRpdG9yLnZhbHVlOwogICAgICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gdmFsdWUyLnN1YnN0cmluZygwLCBzdGFydCk7CiAgICAgICAgICAgICAgY29uc3QgbGFzdE5ld2xpbmUgPSBiZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoIlxuIik7CiAgICAgICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gbGFzdE5ld2xpbmUgKyAxOwogICAgICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gdmFsdWUyLnN1YnN0cmluZyhsaW5lU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgICBpZiAobGluZUNvbnRlbnQuc3RhcnRzV2l0aCgiICAiKSkgewogICAgICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdmFsdWUyLnN1YnN0cmluZygwLCBsaW5lU3RhcnQpICsgbGluZUNvbnRlbnQuc3Vic3RyaW5nKDIpICsgdmFsdWUyLnN1YnN0cmluZyhzdGFydCk7CiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgLSAyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArICIgICIgKyB2YWx1ZTIuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImIiKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oZWRpdG9yLCAiKioiLCAiKioiKTsKICAgICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImkiKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oZWRpdG9yLCAiXyIsICJfIik7CiAgICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgoZTExLmN0cmxLZXkgfHwgZTExLm1ldGFLZXkpICYmIGUxMS5rZXkgPT09ICJrIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5rKGVkaXRvcik7CiAgICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKTsKICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgICAgIH0KICAgICAgc2V0dXBQcmV2aWV3KGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tcHJldmlldyIpOwogICAgICAgIGlmICghY29udGFpbmVyIHx8ICFwcmV2aWV3KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHByZXZpZXcuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICAgICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICAgICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgJiYgIWUxMS5zaGlmdEtleSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9IHRydWU7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgd3JhcFNlbGVjdGlvbihlZGl0b3IsIGJlZm9yZSwgYWZ0ZXIpIHsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQzKTsKICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGJlZm9yZSArIChzZWxlY3RlZFRleHQgfHwgInRleHQiKSArIGFmdGVyOwogICAgICAgIGVkaXRvci52YWx1ZSA9IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpICsgcmVwbGFjZW1lbnQgKyBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgIGlmIChzZWxlY3RlZFRleHQpIHsKICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgcmVwbGFjZW1lbnQubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGg7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyBiZWZvcmUubGVuZ3RoICsgNDsKICAgICAgICB9CiAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgIH0KICAgICAgaW5zZXJ0TGluayhlZGl0b3IpIHsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQzKTsKICAgICAgICBjb25zdCBsaW5rVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCAibGluayB0ZXh0IjsKICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IGBbJHtsaW5rVGV4dH1dKHVybClgOwogICAgICAgIGVkaXRvci52YWx1ZSA9IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpICsgcmVwbGFjZW1lbnQgKyBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0ICsgbGlua1RleHQubGVuZ3RoICsgMzsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyBsaW5rVGV4dC5sZW5ndGggKyA2OwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICAgIGF1dG9SZXNpemUoZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgICAgICBlZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gZWRpdG9yLnNjcm9sbEhlaWdodCArICJweCI7CiAgICAgIH0KICAgICAgcGFyc2VNYXJrZG93bihtYXJrZG93bikgewogICAgICAgIGxldCBodG1sNyA9IHRoaXMuZXNjYXBlSHRtbChtYXJrZG93bik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9eIyMjICguKykkL2dtLCAiPGgzPiQxPC9oMz4iKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoL14jIyAoLispJC9nbSwgIjxoMj4kMTwvaDI+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9eIyAoLispJC9nbSwgIjxoMT4kMTwvaDE+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9cKlwqKC4rPylcKlwqL2csICI8c3Ryb25nPiQxPC9zdHJvbmc+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9fXyguKz8pX18vZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoL1wqKC4rPylcKi9nLCAiPGVtPiQxPC9lbT4iKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoL18oLis/KV8vZywgIjxlbT4kMTwvZW0+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csICI8cHJlPjxjb2RlPiQxPC9jb2RlPjwvcHJlPiIpOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvYCguKz8pYC9nLCAiPGNvZGU+JDE8L2NvZGU+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9cWyhbXlxdXSspXF1cKChbXildKylcKS9nLCAnPGEgaHJlZj0iJDIiPiQxPC9hPicpOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvXlwqICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoL14tICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoL15cZCtcLiAoLispJC9nbSwgIjxsaT4kMTwvbGk+Iik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZywgKG1hdGNoMikgPT4gewogICAgICAgICAgcmV0dXJuICI8dWw+IiArIG1hdGNoMiArICI8L3VsPiI7CiAgICAgICAgfSk7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC9cblxuL2csICI8L3A+PHA+Iik7CiAgICAgICAgaHRtbDcgPSAiPHA+IiArIGh0bWw3ICsgIjwvcD4iOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvPHA+PFwvcD4vZywgIiIpOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvPHA+KDxoWzEtM10+KS9nLCAiJDEiKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoLyg8XC9oWzEtM10+KTxcL3A+L2csICIkMSIpOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvPHA+KDx1bD4pL2csICIkMSIpOwogICAgICAgIGh0bWw3ID0gaHRtbDcucmVwbGFjZSgvKDxcL3VsPik8XC9wPi9nLCAiJDEiKTsKICAgICAgICBodG1sNyA9IGh0bWw3LnJlcGxhY2UoLzxwPig8cHJlPikvZywgIiQxIik7CiAgICAgICAgaHRtbDcgPSBodG1sNy5yZXBsYWNlKC8oPFwvcHJlPik8XC9wPi9nLCAiJDEiKTsKICAgICAgICByZXR1cm4gaHRtbDc7CiAgICAgIH0KICAgICAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogICAgICB9CiAgICAgIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGJsb2NrSWQgPSBjb250YWluZXI/LmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgICAgIHRoaXMuYXV0b1Jlc2l6ZShlZGl0b3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgICAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICAgICAgfQogICAgICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSAwOwogICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICBjb25zdCBsZW5ndGggPSBlZGl0b3IudmFsdWUubGVuZ3RoOwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXMoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tcHJldmlldyIpOwogICAgICAgICAgcHJldmlldz8uZm9jdXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBwb3NpdGlvbjM7CiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgICAgIGlmICghZWRpdG9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgICAgIGFmdGVyOiBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKGN1cnNvclBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIGdldFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gYAogICAgICAvKiBNYXJrZG93biBCbG9jayBDb250YWluZXIgKi8KICAgICAgLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzExMTgyNyIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLm1hcmtkb3duLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXRvZ2dsZS1tb2RlIHsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10b2dnbGUtbW9kZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbnRlbnQgKi8KICAgICAgLm1hcmtkb3duLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5tYXJrZG93bi1lZGl0b3IgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjkzNyIsICIjZjNmNGY2Iil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1lZGl0b3I6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogUHJldmlldyAqLwogICAgICAubWFya2Rvd24tcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIE1hcmtkb3duIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgxIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE2cHggMCA4cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDIgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTRweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxMnB4IDAgNHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHAgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHVsLAogICAgICAubWFya2Rvd24tcHJldmlldyBvbCB7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGxpIHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHByZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IHByZSBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBzdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGVtIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGJsb2NrcXVvdGUgewogICAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgfQogICAgYDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9odG1sLmJsb2NrLmpzCnZhciBIdG1sQmxvY2tIYW5kbGVyOwp2YXIgaW5pdF9odG1sX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9jb250ZW50L2h0bWwuYmxvY2suanMiKCkgewogICAgaW5pdF9ibG9ja19iYXNlKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgSHRtbEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgICAgIHR5cGUgPSAiaHRtbCI7CiAgICAgIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWVkaXQtbW9kZT0iJHtpc0VkaXRNb2RlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1pY29uIj4mbHQ7LyZndDs8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtdGl0bGUiPkhUTUw8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0bWwtdG9nZ2xlLW1vZGUiIHRpdGxlPSIke2lzRWRpdE1vZGUgPyAiUHJldmlldyIgOiAiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpc0VkaXRNb2RlID8gIlx1ezFGNDQxfVx1RkUwRiIgOiAiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgcmVuZGVyRWRpdG9yKGNvbnRlbnQzKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJodG1sLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgSFRNTCBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQzKX08L3RleHRhcmVhPgogICAgYDsKICAgICAgfQogICAgICByZW5kZXJQcmV2aWV3KGNvbnRlbnQzKSB7CiAgICAgICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaHRtbC1wcmV2aWV3Ij4KICAgICAgICAke2NvbnRlbnQzIHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCB0b2dnbGVCdG4gPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC10b2dnbGUtbW9kZSIpOwogICAgICAgIGlmICghY29udGFpbmVyIHx8ICF0b2dnbGVCdG4pIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkh0bWxCbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHt9OwogICAgICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICB0b2dnbGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlKSB7CiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgICAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSAhYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZTsKICAgICAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgICAgIH0pOwogICAgICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlKSB7CiAgICAgICAgICB0aGlzLnNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5zZXR1cFByZXZpZXcoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgICAgIGlmICghZWRpdG9yKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gaGFuZGxlcnMyLm9uQmx1cigpKTsKICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgICAgdGhpcy52YWxpZGF0ZUh0bWwoZWRpdG9yLnZhbHVlKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgICAgIGlmIChlMTEuc2hpZnRLZXkpIHsKICAgICAgICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KTsKICAgICAgICAgICAgICBjb25zdCBsYXN0TmV3bGluZSA9IGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZigiXG4iKTsKICAgICAgICAgICAgICBjb25zdCBsaW5lU3RhcnQgPSBsYXN0TmV3bGluZSArIDE7CiAgICAgICAgICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSB2YWx1ZTIuc3Vic3RyaW5nKGxpbmVTdGFydCwgc3RhcnQpOwogICAgICAgICAgICAgIGlmIChsaW5lQ29udGVudC5zdGFydHNXaXRoKCIgICIpKSB7CiAgICAgICAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIGxpbmVTdGFydCkgKyBsaW5lQ29udGVudC5zdWJzdHJpbmcoMikgKyB2YWx1ZTIuc3Vic3RyaW5nKHN0YXJ0KTsKICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCAtIDI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgIiAgIiArIHZhbHVlMi5zdWJzdHJpbmcoZW5kMyk7CiAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKGUxMS5jdHJsS2V5IHx8IGUxMS5tZXRhS2V5KSAmJiBlMTEua2V5ID09PSAiLyIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlVGFnKGVkaXRvcik7CiAgICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKTsKICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgICAgIH0KICAgICAgc2V0dXBQcmV2aWV3KGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgcHJldmlldyA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXByZXZpZXciKTsKICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCAhcHJldmlldykKICAgICAgICAgIHJldHVybjsKICAgICAgICBwcmV2aWV3LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSB0cnVlOwogICAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuc2FuZGJveENvbnRlbnQocHJldmlldyk7CiAgICAgIH0KICAgICAgYXV0b0Nsb3NlVGFnKGVkaXRvcikgewogICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCB0ZXh0OSA9IGVkaXRvci52YWx1ZTsKICAgICAgICBsZXQgdGFnU3RhcnQgPSBjdXJzb3JQb3M7CiAgICAgICAgd2hpbGUgKHRhZ1N0YXJ0ID4gMCAmJiB0ZXh0OVt0YWdTdGFydCAtIDFdICE9PSAiPCIpIHsKICAgICAgICAgIHRhZ1N0YXJ0LS07CiAgICAgICAgfQogICAgICAgIGlmICh0YWdTdGFydCA+IDApIHsKICAgICAgICAgIGNvbnN0IHRhZ0NvbnRlbnQgPSB0ZXh0OS5zdWJzdHJpbmcodGFnU3RhcnQsIGN1cnNvclBvcyk7CiAgICAgICAgICBjb25zdCB0YWdNYXRjaCA9IHRhZ0NvbnRlbnQubWF0Y2goL14oXHcrKS8pOwogICAgICAgICAgaWYgKHRhZ01hdGNoKSB7CiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0YWdNYXRjaFsxXTsKICAgICAgICAgICAgY29uc3QgY2xvc2luZ1RhZyA9IGA8LyR7dGFnTmFtZX0+YDsKICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdGV4dDkuc3Vic3RyaW5nKDAsIGN1cnNvclBvcykgKyAiPiIgKyBjbG9zaW5nVGFnICsgdGV4dDkuc3Vic3RyaW5nKGN1cnNvclBvcyk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBjdXJzb3JQb3MgKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBhdXRvUmVzaXplKGVkaXRvcikgewogICAgICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSAiYXV0byI7CiAgICAgICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9IGVkaXRvci5zY3JvbGxIZWlnaHQgKyAicHgiOwogICAgICB9CiAgICAgIHZhbGlkYXRlSHRtbChodG1sNykgewogICAgICAgIGNvbnN0IG9wZW5UYWdzID0gW107CiAgICAgICAgY29uc3QgdGFnUmVnZXggPSAvPFwvPyhbYS16QS1aXVthLXpBLVowLTldKilcYltePl0qPi9nOwogICAgICAgIGxldCBtYXRjaDI7CiAgICAgICAgd2hpbGUgKChtYXRjaDIgPSB0YWdSZWdleC5leGVjKGh0bWw3KSkgIT09IG51bGwpIHsKICAgICAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IG1hdGNoMlswXS5zdGFydHNXaXRoKCI8LyIpOwogICAgICAgICAgY29uc3QgdGFnTmFtZSA9IG1hdGNoMlsxXS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKGlzQ2xvc2luZykgewogICAgICAgICAgICBpZiAob3BlblRhZ3MubGVuZ3RoID09PSAwIHx8IG9wZW5UYWdzW29wZW5UYWdzLmxlbmd0aCAtIDFdICE9PSB0YWdOYW1lKSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBNaXNtYXRjaGVkIGNsb3NpbmcgdGFnOiAke3RhZ05hbWV9YCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9wZW5UYWdzLnBvcCgpOwogICAgICAgICAgfSBlbHNlIGlmICghbWF0Y2gyWzBdLmVuZHNXaXRoKCIvPiIpKSB7CiAgICAgICAgICAgIG9wZW5UYWdzLnB1c2godGFnTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvcGVuVGFncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oYFVuY2xvc2VkIHRhZ3M6ICR7b3BlblRhZ3Muam9pbigiLCAiKX1gKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgc2FuZGJveENvbnRlbnQocHJldmlldykgewogICAgICAgIGNvbnN0IHNjcmlwdHMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoInNjcmlwdCIpOwogICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpOwogICAgICAgIGNvbnN0IGFsbEVsZW1lbnRzID0gcHJldmlldy5xdWVyeVNlbGVjdG9yQWxsKCIqIik7CiAgICAgICAgYWxsRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHsKICAgICAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4gewogICAgICAgICAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoIm9uIikpIHsKICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgZm9ybXMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0iKTsKICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7CiAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsIChlMTEpID0+IHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgICAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICAgICAgfQogICAgICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgYmxvY2tJZCA9IGNvbnRhaW5lcj8uZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICAgIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgZWRpdG9yLnZhbHVlID0gY29udGVudDM7CiAgICAgICAgICB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgICAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICAgICAgfQogICAgICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IDA7CiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBsZW5ndGg7CiAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1wcmV2aWV3Iik7CiAgICAgICAgICBwcmV2aWV3Py5mb2N1cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpOwogICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgICAgIGlmICghZWRpdG9yKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgICAgIGFmdGVyOiBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKGN1cnNvclBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIGdldFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLmh0bWwtcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNhbmRib3hlZCBIVE1MIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5odG1sLXByZXZpZXcgKiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGltZyB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoLAogICAgICAuaHRtbC1wcmV2aWV3IHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2luZGV4LmpzCnZhciBpbml0X2Jsb2NrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvaW5kZXguanMiKCkgewogICAgaW5pdF9ibG9ja19iYXNlKCk7CiAgICBpbml0X2Jsb2NrX3JlZ2lzdHJ5KCk7CiAgICBpbml0X2Jsb2NrX3N0eWxlcygpOwogICAgaW5pdF9wYXJhZ3JhcGhfYmxvY2soKTsKICAgIGluaXRfaGVhZGluZ19ibG9jaygpOwogICAgaW5pdF9xdW90ZV9ibG9jaygpOwogICAgaW5pdF9jb2RlX2Jsb2NrKCk7CiAgICBpbml0X2xpc3RfYmxvY2soKTsKICAgIGluaXRfaW1hZ2VfYmxvY2soKTsKICAgIGluaXRfeW91dHViZV9ibG9jaygpOwogICAgaW5pdF9hdHRhY2htZW50X2Jsb2NrKCk7CiAgICBpbml0X2RpdmlkZXJfYmxvY2soKTsKICAgIGluaXRfbWFya2Rvd25fYmxvY2soKTsKICAgIGluaXRfaHRtbF9ibG9jaygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuYmxvY2tyZWdpc3RyYXRpb24uanMKZnVuY3Rpb24gcmVnaXN0ZXJBbGxCbG9ja0hhbmRsZXJzKCkgewogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImRpdmlkZXIiLCBuZXcgRGl2aWRlckJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJwYXJhZ3JhcGgiLCBuZXcgUGFyYWdyYXBoQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImhlYWRpbmctMSIsIG5ldyBIZWFkaW5nQmxvY2tIYW5kbGVyKCJoZWFkaW5nLTEiKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaGVhZGluZy0yIiwgbmV3IEhlYWRpbmdCbG9ja0hhbmRsZXIoImhlYWRpbmctMiIpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJoZWFkaW5nLTMiLCBuZXcgSGVhZGluZ0Jsb2NrSGFuZGxlcigiaGVhZGluZy0zIikpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoInF1b3RlIiwgbmV3IFF1b3RlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImNvZGUiLCBuZXcgQ29kZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJsaXN0IiwgbmV3IExpc3RCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaW1hZ2UiLCBuZXcgSW1hZ2VCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigieW91dHViZSIsIG5ldyBZb3VUdWJlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImF0dGFjaG1lbnQiLCBuZXcgQXR0YWNobWVudEJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJtYXJrZG93biIsIG5ldyBNYXJrZG93bkJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJodG1sIiwgbmV3IEh0bWxCbG9ja0hhbmRsZXIoKSk7Cn0KdmFyIGluaXRfd3lzaXd5Z19ibG9ja3JlZ2lzdHJhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2NrcmVnaXN0cmF0aW9uLmpzIigpIHsKICAgIGluaXRfYmxvY2tzKCk7CiAgICByZWdpc3RlckFsbEJsb2NrSGFuZGxlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci5qcwp2YXIgV3lzaXd5Z01vZGFsTWFuYWdlcjsKdmFyIGluaXRfd3lzaXd5Z19tb2RhbG1hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5tb2RhbG1hbmFnZXIuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19tb2RhbCgpOwogICAgaW5pdF93eXNpd3lnX3R5cGVzKCk7CiAgICBpbml0X3d5c2l3eWdfc2hvcnRjdXRzKCk7CiAgICBpbml0X3d5c2l3eWdfY29uc3RhbnRzKCk7CiAgICBXeXNpd3lnTW9kYWxNYW5hZ2VyID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogU2hvd3MgbGFuZ3VhZ2Ugc2VsZWN0aW9uIG1vZGFsIGZvciBjb2RlIGJsb2NrcwogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGxldCBzZWxlY3RlZExhbmd1YWdlID0gbnVsbDsKICAgICAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgICAgaGVhZGluZzogIlNlbGVjdCBQcm9ncmFtbWluZyBMYW5ndWFnZSIsCiAgICAgICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAubGFuZ3VhZ2UtY29udGFpbmVyIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxhbmd1YWdlLWdyaWQgewogICAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpOwogICAgICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHggOHB4OwogICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM0YjU1NjMiKX07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICAgICAke3RoaXMuZ2V0TGFuZ3VhZ2VzKCkubWFwKChsYW5nKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtzZWxlY3RlZExhbmd1YWdlID09PSBsYW5nLnRvTG93ZXJDYXNlKCkgPyAic2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICAgICAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXNvbHZlMihzZWxlY3RlZExhbmd1YWdlKTsKICAgICAgICAgICAgfX0iPgogICAgICAgICAgICAgICAgICAke2xhbmd9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLAogICAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTaG93cyBibG9jayBzZXR0aW5ncyBtb2RhbAogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIHNob3dCbG9ja1NldHRpbmdzTW9kYWwoYmxvY2ssIG9uVXBkYXRlKSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIC5zZXR0aW5ncy1jb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb246bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAuc2V0dGluZ3MtbGFiZWwgewogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE2MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM0YjU1NjMiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWljb24gewogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5nZXRCbG9ja1R5cGVTZWxlY3RvcihibG9jaywgb25VcGRhdGUpfQogICAgICAgICR7YmxvY2sudHlwZSA9PT0gImNvZGUiID8gdGhpcy5nZXRDb2RlQmxvY2tTZXR0aW5ncyhibG9jaywgb25VcGRhdGUpIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgICBoZWFkaW5nOiAiQmxvY2sgU2V0dGluZ3MiLAogICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkRvbmUiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgY29kZSBibG9jayBzZXR0aW5ncyBjb250ZW50CiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0Q29kZUJsb2NrU2V0dGluZ3MoYmxvY2ssIG9uVXBkYXRlKSB7CiAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJqYXZhc2NyaXB0IjsKICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1sYWJlbCI+UHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmcudG9Mb3dlckNhc2UoKSA/ICJzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHt9OwogICAgICAgICAgYmxvY2subWV0YWRhdGEubGFuZ3VhZ2UgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBvblVwZGF0ZShibG9jayk7CiAgICAgICAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwiKTsKICAgICAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICB9CiAgICAgICAgfX0iCiAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmd9IgogICAgICAgICAgICA+JHtsYW5nfTwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0cyBhdmFpbGFibGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0TGFuZ3VhZ2VzKCkgewogICAgICAgIHJldHVybiBbLi4uUFJPR1JBTU1JTkdfTEFOR1VBR0VTXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0cyBibG9jayB0eXBlIHNlbGVjdG9yCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0QmxvY2tUeXBlU2VsZWN0b3IoYmxvY2ssIG9uVXBkYXRlKSB7CiAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWxhYmVsIj5CbG9jayBUeXBlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2stdHlwZS1ncmlkIj4KICAgICAgICAgICR7YmxvY2tUeXBlcy5tYXAoKGl0ZW0pID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJibG9jay10eXBlLWJ1dHRvbiAke2Jsb2NrLnR5cGUgPT09IGl0ZW0udHlwZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSIke2FzeW5jIChlMTEpID0+IHsKICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgb2xkVHlwZSA9IGJsb2NrLnR5cGU7CiAgICAgICAgICBibG9jay50eXBlID0gaXRlbS50eXBlOwogICAgICAgICAgaWYgKG9sZFR5cGUgPT09ICJjb2RlIiAmJiBibG9jay50eXBlICE9PSAiY29kZSIpIHsKICAgICAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZTsKICAgICAgICAgIH0gZWxzZSBpZiAob2xkVHlwZSA9PT0gImxpc3QiICYmIGJsb2NrLnR5cGUgIT09ICJsaXN0IikgewogICAgICAgICAgICBkZWxldGUgYmxvY2subWV0YWRhdGE/Lmxpc3RUeXBlOwogICAgICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIgJiYgIWJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSkgewogICAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGlzdFR5cGU6ICJidWxsZXQiIH07CiAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiAhYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlKSB7CiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgdGhpcy5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICAgICAgICBpZiAobGFuZ3VhZ2UpIHsKICAgICAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2UgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBibG9jay50eXBlID0gb2xkVHlwZTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG9uVXBkYXRlKGJsb2NrKTsKICAgICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICAgICAgaWYgKG1vZGFsICYmIHR5cGVvZiBtb2RhbC5kZXN0cm95ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJibG9jay10eXBlLWljb24iPiR7aXRlbS5pY29ufTwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5pbnB1dGhhbmRsZXIuanMKdmFyIFd5c2l3eWdJbnB1dEhhbmRsZXI7CnZhciBpbml0X3d5c2l3eWdfaW5wdXRoYW5kbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW5wdXRoYW5kbGVyLmpzIigpIHsKICAgIGluaXRfd3lzaXd5Z190eXBlcygpOwogICAgaW5pdF93eXNpd3lnX2ludGVyZmFjZXMoKTsKICAgIGluaXRfd3lzaXd5Z19zaG9ydGN1dHMoKTsKICAgIGluaXRfd3lzaXd5Z19ibG9ja3MoKTsKICAgIGluaXRfd3lzaXd5Z19ibG9ja29wZXJhdGlvbnMoKTsKICAgIGluaXRfd3lzaXd5Z19tb2RhbG1hbmFnZXIoKTsKICAgIFd5c2l3eWdJbnB1dEhhbmRsZXIgPSBjbGFzcyB7CiAgICAgIGNvbXBvbmVudDsKICAgICAgc2F2ZVRpbWVvdXQgPSBudWxsOwogICAgICBjb25zdHJ1Y3Rvcihjb21wb25lbnQpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBpbnB1dCBldmVudHMgZm9yIGJsb2NrcwogICAgICAgKi8KICAgICAgaGFuZGxlQmxvY2tJbnB1dChlMTEsIGJsb2NrKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmlzQ29tcG9zaW5nKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgZGV0ZWN0ZWRUeXBlID0gdGhpcy5kZXRlY3RCbG9ja1R5cGVJbnRlbnQodGV4dENvbnRlbnQpOwogICAgICAgIGlmIChkZXRlY3RlZFR5cGUgJiYgZGV0ZWN0ZWRUeXBlLnR5cGUgIT09IGJsb2NrLnR5cGUpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5oYW5kbGVCbG9ja1RyYW5zZm9ybWF0aW9uKGJsb2NrLCBkZXRlY3RlZFR5cGUsIHRhcmdldCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaGFuZGxlU2xhc2hDb21tYW5kKHRleHRDb250ZW50LCB0YXJnZXQpOwogICAgICAgIHRoaXMuc2NoZWR1bGVBdXRvU2F2ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGVzIGJsb2NrIGNvbnRlbnQgYmFzZWQgb24gaXRzIHR5cGUKICAgICAgICovCiAgICAgIHVwZGF0ZUJsb2NrQ29udGVudChibG9jaywgdGFyZ2V0KSB7CiAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0YXJnZXQuY2xvc2VzdCgiLmJsb2NrLXdyYXBwZXIiKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICBibG9jay5jb250ZW50ID0gbmV3Q29udGVudDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgY29uc3QgbGlzdEVsZW1lbnQgPSB0YXJnZXQucXVlcnlTZWxlY3Rvcigib2wsIHVsIik7CiAgICAgICAgICAgIGlmIChsaXN0RWxlbWVudCkgewogICAgICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICAgICAgbGlzdFR5cGU6IGxpc3RFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gIm9sIiA/ICJvcmRlcmVkIiA6ICJidWxsZXQiCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IHRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gQXJyYXkuZnJvbShsaXN0SXRlbXMpLm1hcCgobGkyKSA9PiBsaTIuaW5uZXJIVE1MIHx8ICIiKS5qb2luKCJcbiIpOwogICAgICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICAgICAgaWYgKGxpc3RFbGVtZW50KSB7CiAgICAgICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7CiAgICAgICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgICBibG9jay5jb250ZW50ID0gdGFyZ2V0LnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmxvY2suY29udGVudCA9IHRhcmdldC5pbm5lckhUTUwgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRlY3RzIGlmIHRoZSB1c2VyIGlzIHRyeWluZyB0byBjcmVhdGUgYSBzcGVjaWZpYyBibG9jayB0eXBlCiAgICAgICAqLwogICAgICBkZXRlY3RCbG9ja1R5cGVJbnRlbnQoY29udGVudDMpIHsKICAgICAgICBjb25zdCBoZWFkaW5nUmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50Myk7CiAgICAgICAgaWYgKGhlYWRpbmdSZXN1bHQpIHsKICAgICAgICAgIHJldHVybiBoZWFkaW5nUmVzdWx0OwogICAgICAgIH0KICAgICAgICBjb25zdCBsaXN0UmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0xpc3RTaG9ydGN1dChjb250ZW50Myk7CiAgICAgICAgaWYgKGxpc3RSZXN1bHQpIHsKICAgICAgICAgIHJldHVybiBsaXN0UmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja1F1b3RlU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAicXVvdGUiIH07CiAgICAgICAgfQogICAgICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrQ29kZVNob3J0Y3V0KGNvbnRlbnQzKSkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImNvZGUiIH07CiAgICAgICAgfQogICAgICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrRGl2aWRlclNob3J0Y3V0KGNvbnRlbnQzKSkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImRpdmlkZXIiIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGJsb2NrIHR5cGUgdHJhbnNmb3JtYXRpb24KICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KSB7CiAgICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgICAgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSAibGlzdCI7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGlzdFR5cGU6IGRldGVjdGVkVHlwZS5saXN0VHlwZSB9OwogICAgICAgICAgY29uc3QgbGlzdFRhZyA9IGRldGVjdGVkVHlwZS5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgICAgICB0YXJnZXQuaW5uZXJIVE1MID0gYDwke2xpc3RUYWd9PjxsaT48L2xpPjwvJHtsaXN0VGFnfT5gOwogICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgV3lzaXd5Z0Jsb2Nrcy5mb2N1c0xpc3RJdGVtKHRhcmdldCk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSAiZGl2aWRlciI7CiAgICAgICAgICBibG9jay5jb250ZW50ID0gIiAiOwogICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgIGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IGF3YWl0IFd5c2l3eWdNb2RhbE1hbmFnZXIuc2hvd0xhbmd1YWdlU2VsZWN0aW9uTW9kYWwoKTsKICAgICAgICAgIGlmIChsYW5ndWFnZSkgewogICAgICAgICAgICBibG9jay50eXBlID0gImNvZGUiOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyBsYW5ndWFnZSB9OwogICAgICAgICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2soYmxvY2suaWQsICJzdGFydCIpOwogICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSBkZXRlY3RlZFR5cGUudHlwZTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgIHRhcmdldC50ZXh0Q29udGVudCA9ICIiOwogICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhibG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICB9LCA1MCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIHNsYXNoIGNvbW1hbmQgZGV0ZWN0aW9uIGFuZCBtZW51IGRpc3BsYXkKICAgICAgICovCiAgICAgIGhhbmRsZVNsYXNoQ29tbWFuZCh0ZXh0Q29udGVudCwgdGFyZ2V0KSB7CiAgICAgICAgY29uc3Qgc2xhc2hNZW51ID0gdGhpcy5jb21wb25lbnQuc2xhc2hNZW51OwogICAgICAgIGNvbnN0IGlzU2xhc2hNZW51VmlzaWJsZSA9IHNsYXNoTWVudSAmJiBzbGFzaE1lbnUudmlzaWJsZTsKICAgICAgICBpZiAodGV4dENvbnRlbnQgPT09ICIvIiB8fCB0ZXh0Q29udGVudC5zdGFydHNXaXRoKCIvIikgJiYgaXNTbGFzaE1lbnVWaXNpYmxlKSB7CiAgICAgICAgICBpZiAoIWlzU2xhc2hNZW51VmlzaWJsZSAmJiB0ZXh0Q29udGVudCA9PT0gIi8iKSB7CiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldENhcmV0Q29vcmRpbmF0ZXModGFyZ2V0KTsKICAgICAgICAgICAgc2xhc2hNZW51LnNob3coeyB4OiByZWN0LmxlZnQsIHk6IHJlY3QuYm90dG9tICsgNCB9LCAodHlwZTUpID0+IHsKICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnNlcnRCbG9jayh0eXBlNSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHRhcmdldC5mb2N1cygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc2xhc2hNZW51KSB7CiAgICAgICAgICAgIHNsYXNoTWVudS51cGRhdGVGaWx0ZXIodGV4dENvbnRlbnQuc2xpY2UoMSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoIXRleHRDb250ZW50LnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgdGhpcy5jb21wb25lbnQuY2xvc2VTbGFzaE1lbnUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldC9jdXJzb3IKICAgICAgICovCiAgICAgIGdldENhcmV0Q29vcmRpbmF0ZXMoZWxlbWVudDQpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGlmIChyZWN0LndpZHRoID4gMCB8fCByZWN0LmhlaWdodCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBlbGVtZW50NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2NoZWR1bGVzIGF1dG8tc2F2ZSBhZnRlciBhIGRlbGF5CiAgICAgICAqLwogICAgICBzY2hlZHVsZUF1dG9TYXZlKCkgewogICAgICAgIGlmICh0aGlzLnNhdmVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5zbGFzaE1lbnUgJiYgdGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5zYXZlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCk7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIH0sIDJlMyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFN5bmNzIGNvbnRlbnQgZnJvbSBhbGwgYmxvY2sgRE9NcyB0byB0aGUgZGF0YSBtb2RlbAogICAgICAgKi8KICAgICAgc3luY0FsbEJsb2NrQ29udGVudCgpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHsKICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50ICYmIGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQpIHsKICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgICAgICBibG9jay5jb250ZW50ID0gbmV3Q29udGVudDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDbGVhbnMgdXAgcmVzb3VyY2VzCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIGlmICh0aGlzLnNhdmVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcua2V5Ym9hcmRoYW5kbGVyLmpzCnZhciBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyOwp2YXIgaW5pdF93eXNpd3lnX2tleWJvYXJkaGFuZGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci5qcyIoKSB7CiAgICBpbml0X3d5c2l3eWdfdHlwZXMoKTsKICAgIGluaXRfd3lzaXd5Z19pbnRlcmZhY2VzKCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyID0gY2xhc3MgewogICAgICBjb21wb25lbnQ7CiAgICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudCkgewogICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyBmb3IgYmxvY2tzCiAgICAgICAqLwogICAgICBhc3luYyBoYW5kbGVCbG9ja0tleURvd24oZTExLCBibG9jaykgewogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5zbGFzaE1lbnUudmlzaWJsZSAmJiB0aGlzLmlzU2xhc2hNZW51S2V5KGUxMS5rZXkpKSB7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChlMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgICAgICBjYXNlICJUYWIiOgogICAgICAgICAgICB0aGlzLmhhbmRsZVRhYihlMTEsIGJsb2NrKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRW50ZXIoZTExLCBibG9jayk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQmFja3NwYWNlIjoKICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVCYWNrc3BhY2UoZTExLCBibG9jayk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiRGVsZXRlIjoKICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVEZWxldGUoZTExLCBibG9jayk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQXJyb3dVcCI6CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXJyb3dVcChlMTEsIGJsb2NrKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93RG93bihlMTEsIGJsb2NrKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJBcnJvd0xlZnQiOgogICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93TGVmdChlMTEsIGJsb2NrKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJBcnJvd1JpZ2h0IjoKICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd1JpZ2h0KGUxMSwgYmxvY2spOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrcyBpZiBrZXkgaXMgZm9yIHNsYXNoIG1lbnUgbmF2aWdhdGlvbgogICAgICAgKi8KICAgICAgaXNTbGFzaE1lbnVLZXkoa2V5MikgewogICAgICAgIHJldHVybiBbIkFycm93RG93biIsICJBcnJvd1VwIiwgIkVudGVyIiwgIkVzY2FwZSJdLmluY2x1ZGVzKGtleTIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGZvcm1hdHRpbmcga2V5Ym9hcmQgc2hvcnRjdXRzCiAgICAgICAqLwogICAgICBoYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkgewogICAgICAgIGlmICghKGUxMS5tZXRhS2V5IHx8IGUxMS5jdHJsS2V5KSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBzd2l0Y2ggKGUxMS5rZXkudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJib2xkIikpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGNhc2UgImkiOgogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgiaXRhbGljIikpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGNhc2UgInUiOgogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgidW5kZXJsaW5lIikpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGNhc2UgImsiOgogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgibGluayIpKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBUYWIga2V5CiAgICAgICAqLwogICAgICBoYW5kbGVUYWIoZTExLCBibG9jaykgewogICAgICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJsaXN0IikgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIEVudGVyIGtleQogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlRW50ZXIoZTExLCBibG9jaykgewogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFlMTEuc2hpZnRLZXkpIHsKICAgICAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFbnRlckluTGlzdChlMTEsIGJsb2NrKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQpIHsKICAgICAgICAgICAgICBjb25zdCBzcGxpdENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQoKTsKICAgICAgICAgICAgICBpZiAoc3BsaXRDb250ZW50KSB7CiAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5zZXRDb250ZW50KHNwbGl0Q29udGVudC5iZWZvcmUpOwogICAgICAgICAgICAgICAgYmxvY2suY29udGVudCA9IHNwbGl0Q29udGVudC5iZWZvcmU7CiAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCBzcGxpdENvbnRlbnQuYWZ0ZXIpOwogICAgICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIEVudGVyIGtleSBpbiBsaXN0IGJsb2NrcwogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlRW50ZXJJbkxpc3QoZTExLCBibG9jaykgewogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICAgICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICAgICAgICBjb25zdCBjdXJyZW50TGkgPSByYW5nZTIuc3RhcnRDb250YWluZXIucGFyZW50RWxlbWVudD8uY2xvc2VzdCgibGkiKTsKICAgICAgICAgIGlmIChjdXJyZW50TGkgJiYgY3VycmVudExpLnRleHRDb250ZW50ID09PSAiIikgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBCYWNrc3BhY2Uga2V5CiAgICAgICAqLwogICAgICBhc3luYyBoYW5kbGVCYWNrc3BhY2UoZTExLCBibG9jaykgewogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwgIiIpOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5ibG9ja3MgPSBbbmV3QmxvY2tdOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV3QmxvY2suaWQsICJzdGFydCIpOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2sgJiYgcHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICAgICAgfSBlbHNlIGlmIChuZXh0QmxvY2sgJiYgbmV4dEJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBuZXh0QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGFyZ2V0LnRleHRDb250ZW50OwogICAgICAgIGlmIChjdXJzb3JQb3MgPT09IDApIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgICAgICAgaWYgKHByZXZCbG9jay50eXBlID09PSAiY29kZSIgJiYgYmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICAgICAgY29uc3QgYWN0dWFsQ29udGVudDIgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogYmxvY2suY29udGVudDsKICAgICAgICAgICAgICBpZiAoYWN0dWFsQ29udGVudDIgPT09ICIiIHx8IGFjdHVhbENvbnRlbnQyLnRyaW0oKSA9PT0gIiIpIHsKICAgICAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBwcmV2QmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7cHJldkJsb2NrLmlkfSJdYCk7CiAgICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZCbG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgICBjb25zdCBwcmV2Q29udGVudCA9IHByZXZCbG9ja0NvbXBvbmVudD8uZ2V0Q29udGVudCgpIHx8IHByZXZCbG9jay5jb250ZW50IHx8ICIiOwogICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKSB8fCBibG9jay5jb250ZW50IHx8ICIiOwogICAgICAgICAgICBsZXQgbWVyZ2VkQ29udGVudCA9ICIiOwogICAgICAgICAgICBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgICAgICAgICBtZXJnZWRDb250ZW50ID0gcHJldkNvbnRlbnQgKyAocHJldkNvbnRlbnQgJiYgY3VycmVudENvbnRlbnQgPyAiXG4iIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJsaXN0IiAmJiBibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICBtZXJnZWRDb250ZW50ID0gcHJldkNvbnRlbnQgKyAocHJldkNvbnRlbnQgJiYgY3VycmVudENvbnRlbnQgPyAiXG4iIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIiAiIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgbWVyZ2VQb2ludCA9IHByZXZDb250ZW50Lmxlbmd0aDsKICAgICAgICAgICAgYmxvY2tPcHMudXBkYXRlQmxvY2tDb250ZW50KHByZXZCbG9jay5pZCwgbWVyZ2VkQ29udGVudCk7CiAgICAgICAgICAgIGlmIChwcmV2QmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgICBwcmV2QmxvY2tDb21wb25lbnQuc2V0Q29udGVudChtZXJnZWRDb250ZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBtZXJnZVBvaW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50LmJsb2Nrcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQgPyBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgOiBibG9jay5jb250ZW50OwogICAgICAgICAgaWYgKGN1cnJlbnRDb250ZW50ID09PSAiIiB8fCBjdXJyZW50Q29udGVudC50cmltKCkgPT09ICIiKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgICBpZiAocHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhhbmRsZXMgRGVsZXRlIGtleQogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spIHsKICAgICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5ibG9ja3MubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soInBhcmFncmFwaCIsICIiKTsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5ld0Jsb2NrLmlkLCAic3RhcnQiKTsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICAgIGlmIChuZXh0QmxvY2sgJiYgIW5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSkgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZCbG9jayAmJiAhbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSB0YXJnZXQudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwOwogICAgICAgIGlmIChjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICAgIGlmIChuZXh0QmxvY2sgJiYgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhhbmRsZXMgQXJyb3dVcCBrZXkgLSBuYXZpZ2F0ZSB0byBwcmV2aW91cyBibG9jayBpZiBhdCBiZWdpbm5pbmcgb3IgZmlyc3QgbGluZQogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlQXJyb3dVcChlMTEsIGJsb2NrKSB7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIEFycm93RG93biBrZXkgLSBuYXZpZ2F0ZSB0byBuZXh0IGJsb2NrIGlmIGF0IGVuZCBvciBsYXN0IGxpbmUKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZUFycm93RG93bihlMTEsIGJsb2NrKSB7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmlzT25MYXN0TGluZShzZWxlY3Rpb25JbmZvLCB0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHRleHQgbm9kZSBpbiBhbiBlbGVtZW50CiAgICAgICAqLwogICAgICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgICAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICByZXR1cm4gZWxlbWVudDQ7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgICBjb25zdCBsYXN0VGV4dCA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0LmNoaWxkTm9kZXNbaTExXSk7CiAgICAgICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhhbmRsZXMgQXJyb3dMZWZ0IGtleSAtIG5hdmlnYXRlIHRvIHByZXZpb3VzIGJsb2NrIGlmIGF0IGJlZ2lubmluZwogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlQXJyb3dMZWZ0KGUxMSwgYmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvIHx8ICFzZWxlY3Rpb25JbmZvLmNvbGxhcHNlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGlmIChjdXJzb3JQb3MgPT09IDApIHsKICAgICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICAgICAgY29uc3QgcG9zaXRpb24zID0gbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCI7CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBwb3NpdGlvbjMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBBcnJvd1JpZ2h0IGtleSAtIG5hdmlnYXRlIHRvIG5leHQgYmxvY2sgaWYgYXQgZW5kCiAgICAgICAqLwogICAgICBhc3luYyBoYW5kbGVBcnJvd1JpZ2h0KGUxMSwgYmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgIGlmIChuZXh0QmxvY2spIHsKICAgICAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBpZiAoY3Vyc29yUG9zID09PSB0ZXh0TGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJzdGFydCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBzbGFzaCBtZW51IGtleWJvYXJkIG5hdmlnYXRpb24KICAgICAgICogTm90ZTogVGhpcyBpcyBub3cgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50IGRpcmVjdGx5CiAgICAgICAqLwogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgYmxvY2sKICAgICAgICovCiAgICAgIGlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKICAgICAgICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IGlzTmVhclRvcCA9IHJlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3AgPCA1OwogICAgICAgICAgaWYgKGNvbnRhaW5lci50ZXh0Q29udGVudCAmJiAhY29udGFpbmVyLnRleHRDb250ZW50LmluY2x1ZGVzKCJcbiIpKSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQoY29udGFpbmVyLCAuLi5zaGFkb3dSb290cyk7CiAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IDA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaXNOZWFyVG9wOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsIGUxMSk7CiAgICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0OwogICAgICAgICAgcmV0dXJuIGN1cnNvclBvcyA9PT0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mIGEgYmxvY2sKICAgICAgICovCiAgICAgIGlzT25MYXN0TGluZShzZWxlY3Rpb25JbmZvLCB0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBsZXQgY29udGFpbmVyID0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwogICAgICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gY29udGFpbmVyUmVjdC5ib3R0b20gLSByZWN0LmJvdHRvbSA8IDU7CiAgICAgICAgICBpZiAoY29udGFpbmVyLnRleHRDb250ZW50ICYmICFjb250YWluZXIudGV4dENvbnRlbnQuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRhcmdldC50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICAgICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaXNOZWFyQm90dG9tOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBsYXN0IGxpbmU6IiwgZTExKTsKICAgICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSB0YXJnZXQudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwOwogICAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZHJhZ2Ryb3BoYW5kbGVyLmpzCnZhciBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyOwp2YXIgaW5pdF93eXNpd3lnX2RyYWdkcm9waGFuZGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmRyYWdkcm9waGFuZGxlci5qcyIoKSB7CiAgICBpbml0X3d5c2l3eWdfdHlwZXMoKTsKICAgIGluaXRfd3lzaXd5Z19pbnRlcmZhY2VzKCk7CiAgICBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyID0gY2xhc3MgewogICAgICBjb21wb25lbnQ7CiAgICAgIGRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgICAgZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgIGRyb3BJbmRpY2F0b3IgPSBudWxsOwogICAgICBpbml0aWFsTW91c2VZID0gMDsKICAgICAgaW5pdGlhbEJsb2NrWSA9IDA7CiAgICAgIGRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgICBkcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogICAgICBkcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0ID0gMDsKICAgICAgZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgICAgbGFzdFVwZGF0ZVRpbWUgPSAwOwogICAgICB1cGRhdGVUaHJvdHRsZSA9IDgwOwogICAgICAvLyBtaWxsaXNlY29uZHMKICAgICAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgdGhlIGN1cnJlbnQgZHJhZyBzdGF0ZQogICAgICAgKi8KICAgICAgZ2V0IGRyYWdTdGF0ZSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZHJhZ2dlZEJsb2NrSWQ6IHRoaXMuZHJhZ2dlZEJsb2NrSWQsCiAgICAgICAgICBkcmFnT3ZlckJsb2NrSWQ6IHRoaXMuZHJhZ092ZXJCbG9ja0lkLAogICAgICAgICAgZHJhZ092ZXJQb3NpdGlvbjogdGhpcy5kcmFnT3ZlclBvc2l0aW9uCiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBkcmFnIHN0YXJ0CiAgICAgICAqLwogICAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBibG9jaykgewogICAgICAgIGlmICghZTExLmRhdGFUcmFuc2ZlcikKICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gYmxvY2suaWQ7CiAgICAgICAgZTExLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gIm1vdmUiOwogICAgICAgIGUxMS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBlbXB0eUltZyA9IG5ldyBJbWFnZSgpOwogICAgICAgIGVtcHR5SW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IjsKICAgICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbXB0eUltZywgMCwgMCk7CiAgICAgICAgdGhpcy5pbml0aWFsTW91c2VZID0gZTExLmNsaWVudFk7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmluaXRpYWxCbG9ja1kgPSByZWN0LnRvcDsKICAgICAgICAgIGNvbnN0IGlubmVyQmxvY2sgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoaW5uZXJCbG9jaykgewogICAgICAgICAgICBjb25zdCBpbm5lclJlY3QgPSBpbm5lckJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5uZXJCbG9jayk7CiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3ApIHx8IDA7CiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrQ29udGVudEhlaWdodCA9IGlubmVyUmVjdC5oZWlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCA9IHJlY3QuaGVpZ2h0OwogICAgICAgICAgY29uc29sZS5sb2coIkRyYWcgbWVhc3VyZW1lbnRzOiIsIHsKICAgICAgICAgICAgd3JhcHBlckhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgICAgIG1hcmdpblRvcDogdGhpcy5kcmFnZ2VkQmxvY2tNYXJnaW5Ub3AsCiAgICAgICAgICAgIGRyb3BJbmRpY2F0b3JIZWlnaHQ6IHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0LAogICAgICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmhhbmRsZUdsb2JhbERyYWdPdmVyKTsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLCB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNvbXBvbmVudC5kcmFnZ2VkQmxvY2tJZCA9IHRoaXMuZHJhZ2dlZEJsb2NrSWQ7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSGFuZGxlcyBkcmFnIGVuZAogICAgICAgKi8KICAgICAgaGFuZGxlRHJhZ0VuZCgpIHsKICAgICAgICBjb25zdCBhbGxCbG9ja3MgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgICAgYWxsQmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgICAgICBibG9jay5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIsICJtb3ZlLXVwIiwgIm1vdmUtZG93biIpOwogICAgICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgICAgIGJsb2NrLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2Zvcm0iKTsKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgICAgdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0ID0gMDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSAwOwogICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgICAgICB0aGlzLmluaXRpYWxCbG9ja1kgPSAwOwogICAgICAgIHRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgICAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyUG9zaXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGRyYWcgb3ZlcgogICAgICAgKi8KICAgICAgaGFuZGxlRHJhZ092ZXIoZTExLCBibG9jaykgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghZTExLmRhdGFUcmFuc2ZlciB8fCAhdGhpcy5kcmFnZ2VkQmxvY2tJZCB8fCB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9jay5pZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlMTEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAibW92ZSI7CiAgICAgICAgY29uc3QgcmVjdCA9IGUxMS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IG1pZHBvaW50ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICAgICAgdGhpcy5kcmFnT3ZlckJsb2NrSWQgPSBibG9jay5pZDsKICAgICAgICB0aGlzLmRyYWdPdmVyUG9zaXRpb24gPSBlMTEuY2xpZW50WSA8IG1pZHBvaW50ID8gImJlZm9yZSIgOiAiYWZ0ZXIiOwogICAgICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IHRoaXMuZHJhZ092ZXJCbG9ja0lkOwogICAgICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyUG9zaXRpb24gPSB0aGlzLmRyYWdPdmVyUG9zaXRpb247CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhhbmRsZXMgZHJhZyBsZWF2ZQogICAgICAgKi8KICAgICAgaGFuZGxlRHJhZ0xlYXZlKGJsb2NrKSB7CiAgICAgICAgaWYgKHRoaXMuZHJhZ092ZXJCbG9ja0lkID09PSBibG9jay5pZCkgewogICAgICAgICAgdGhpcy5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhhbmRsZXMgZHJvcAogICAgICAgKi8KICAgICAgaGFuZGxlRHJvcChlMTEsIHRhcmdldEJsb2NrKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkIHx8IHRoaXMuZHJhZ2dlZEJsb2NrSWQgPT09IHRhcmdldEJsb2NrLmlkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMuY29tcG9uZW50LmhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jayk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrcyBpZiBhIGJsb2NrIGlzIGJlaW5nIGRyYWdnZWQKICAgICAgICovCiAgICAgIGlzRHJhZ2dpbmcoYmxvY2tJZCkgewogICAgICAgIHJldHVybiB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9ja0lkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVja3MgaWYgYSBibG9jayBoYXMgZHJhZyBvdmVyIHN0YXRlCiAgICAgICAqLwogICAgICBpc0RyYWdPdmVyKGJsb2NrSWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrSWQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldHMgZHJhZyBvdmVyIENTUyBjbGFzc2VzIGZvciBhIGJsb2NrCiAgICAgICAqLwogICAgICBnZXREcmFnT3ZlckNsYXNzZXMoYmxvY2tJZCkgewogICAgICAgIGlmICghdGhpcy5pc0RyYWdPdmVyKGJsb2NrSWQpKQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIHJldHVybiB0aGlzLmRyYWdPdmVyUG9zaXRpb24gPT09ICJiZWZvcmUiID8gImRyYWctb3Zlci1iZWZvcmUiIDogImRyYWctb3Zlci1hZnRlciI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgdGhlIGRyb3AgaW5kaWNhdG9yIGVsZW1lbnQKICAgICAgICovCiAgICAgIGNyZWF0ZURyb3BJbmRpY2F0b3IoKSB7CiAgICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yLmNsYXNzTmFtZSA9ICJkcm9wLWluZGljYXRvciI7CiAgICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZCh0aGlzLmRyb3BJbmRpY2F0b3IpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnb3ZlciB0byB1cGRhdGUgZHJhZ2dlZCBibG9jayBwb3NpdGlvbiBhbmQgbW92ZSBvdGhlciBibG9ja3MKICAgICAgICovCiAgICAgIGhhbmRsZUdsb2JhbERyYWdPdmVyID0gKGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IGRlbHRhWSA9IGUxMS5jbGllbnRZIC0gdGhpcy5pbml0aWFsTW91c2VZOwogICAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2RlbHRhWX1weClgOwogICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgIGlmIChub3cyIC0gdGhpcy5sYXN0VXBkYXRlVGltZSA8IHRoaXMudXBkYXRlVGhyb3R0bGUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IG5vdzI7CiAgICAgICAgdGhpcy51cGRhdGVCbG9ja1Bvc2l0aW9ucyhlMTEuY2xpZW50WSk7CiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGVzIGJsb2NrIHBvc2l0aW9ucyBiYXNlZCBvbiBjdXJzb3IgcG9zaXRpb24KICAgICAgICovCiAgICAgIHVwZGF0ZUJsb2NrUG9zaXRpb25zKG1vdXNlWSkgewogICAgICAgIGNvbnN0IGJsb2NrcyA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgICAgICBjb25zdCBkcmFnZ2VkSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIikgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgICAgIGlmIChkcmFnZ2VkSW5kZXggPT09IC0xKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gewogICAgICAgICAgaWYgKGJsb2NrLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpICE9PSB0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgICAgICAgIGJsb2NrLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCAibW92ZS1kb3duIik7CiAgICAgICAgICAgIGJsb2NrLnN0eWxlLnJlbW92ZVByb3BlcnR5KCItLWRyYWctb2Zmc2V0Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgbGV0IG5ld0luZGV4ID0gYmxvY2tzLmxlbmd0aDsKICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBibG9ja3MubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tzW2kxMV07CiAgICAgICAgICBjb25zdCByZWN0ID0gYmxvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBjb25zdCBibG9ja1RvcCA9IHJlY3QudG9wOwogICAgICAgICAgaWYgKG1vdXNlWSA8IGJsb2NrVG9wICsgcmVjdC5oZWlnaHQgKiAwLjUpIHsKICAgICAgICAgICAgbmV3SW5kZXggPSBpMTE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBibG9ja3MubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tzW2kxMV07CiAgICAgICAgICBpZiAoZHJhZ2dlZEluZGV4IDwgbmV3SW5kZXgpIHsKICAgICAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJbmRleCAmJiBpMTEgPCBuZXdJbmRleCkgewogICAgICAgICAgICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoIm1vdmUtdXAiKTsKICAgICAgICAgICAgICBibG9jay5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1kcmFnLW9mZnNldCIsIGAke3RoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0fXB4YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoZHJhZ2dlZEluZGV4ID4gbmV3SW5kZXgpIHsKICAgICAgICAgICAgaWYgKGkxMSA+PSBuZXdJbmRleCAmJiBpMTEgPCBkcmFnZ2VkSW5kZXgpIHsKICAgICAgICAgICAgICBibG9jay5jbGFzc0xpc3QuYWRkKCJtb3ZlLWRvd24iKTsKICAgICAgICAgICAgICBibG9jay5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1kcmFnLW9mZnNldCIsIGAke3RoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0fXB4YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVEcm9wSW5kaWNhdG9yKGJsb2NrcywgbmV3SW5kZXgsIGRyYWdnZWRJbmRleCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFVwZGF0ZXMgdGhlIGRyb3AgaW5kaWNhdG9yIHBvc2l0aW9uCiAgICAgICAqLwogICAgICB1cGRhdGVEcm9wSW5kaWNhdG9yKGJsb2NrcywgdGFyZ2V0SW5kZXgsIGRyYWdnZWRJbmRleCkgewogICAgICAgIGlmICghdGhpcy5kcm9wSW5kaWNhdG9yIHx8ICF0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGxldCB0b3BQb3NpdGlvbiA9IDA7CiAgICAgICAgY29uc3QgdmlzdWFsQmxvY2tzID0gW107CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmxvY2tzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2Nrc1tpMTFdOwogICAgICAgICAgY29uc3QgcmVjdCA9IGJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgbGV0IHRvcCA9IHJlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgICAgICBsZXQgYm90dG9tID0gcmVjdC5ib3R0b20gLSBjb250YWluZXJSZWN0LnRvcDsKICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybTIgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShibG9jaykudHJhbnNmb3JtOwogICAgICAgICAgaWYgKHRyYW5zZm9ybTIgJiYgdHJhbnNmb3JtMiAhPT0gIm5vbmUiKSB7CiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBET01NYXRyaXgodHJhbnNmb3JtMik7CiAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQgPSBtYXRyaXgubTQyOwogICAgICAgICAgICB0b3AgKz0geU9mZnNldDsKICAgICAgICAgICAgYm90dG9tICs9IHlPZmZzZXQ7CiAgICAgICAgICB9CiAgICAgICAgICB2aXN1YWxCbG9ja3MucHVzaCh7IGluZGV4OiBpMTEsIHRvcCwgYm90dG9tIH0pOwogICAgICAgIH0KICAgICAgICB2aXN1YWxCbG9ja3Muc29ydCgoYTUsIGI1KSA9PiBhNS50b3AgLSBiNS50b3ApOwogICAgICAgIGxldCBhZGp1c3RlZFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7CiAgICAgICAgaWYgKHRhcmdldEluZGV4ID4gZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBhZGp1c3RlZFRhcmdldEluZGV4LS07CiAgICAgICAgfQogICAgICAgIGxldCBibG9ja01hcmdpbiA9IDE2OwogICAgICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgICAgIGNvbnN0IGRyYWdnZWRCbG9jayA9IHRoaXMuY29tcG9uZW50LmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgICAgICAgaWYgKGRyYWdnZWRCbG9jaykgewogICAgICAgICAgICBjb25zdCBibG9ja1R5cGUgPSBkcmFnZ2VkQmxvY2sudHlwZTsKICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSA9PT0gImhlYWRpbmctMSIgfHwgYmxvY2tUeXBlID09PSAiaGVhZGluZy0yIiB8fCBibG9ja1R5cGUgPT09ICJoZWFkaW5nLTMiKSB7CiAgICAgICAgICAgICAgYmxvY2tNYXJnaW4gPSAyNDsKICAgICAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgPT09ICJjb2RlIiB8fCBibG9ja1R5cGUgPT09ICJxdW90ZSIpIHsKICAgICAgICAgICAgICBibG9ja01hcmdpbiA9IDIwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhZGp1c3RlZFRhcmdldEluZGV4ID09PSAwKSB7CiAgICAgICAgICB0b3BQb3NpdGlvbiA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChhZGp1c3RlZFRhcmdldEluZGV4ID49IHZpc3VhbEJsb2Nrcy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHZpc3VhbEJsb2Nrc1t2aXN1YWxCbG9ja3MubGVuZ3RoIC0gMV07CiAgICAgICAgICBpZiAobGFzdEJsb2NrKSB7CiAgICAgICAgICAgIHRvcFBvc2l0aW9uID0gbGFzdEJsb2NrLmJvdHRvbTsKICAgICAgICAgICAgdG9wUG9zaXRpb24gKz0gYmxvY2tNYXJnaW47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGJsb2NrQmVmb3JlID0gdmlzdWFsQmxvY2tzW2FkanVzdGVkVGFyZ2V0SW5kZXggLSAxXTsKICAgICAgICAgIGlmIChibG9ja0JlZm9yZSkgewogICAgICAgICAgICB0b3BQb3NpdGlvbiA9IGJsb2NrQmVmb3JlLmJvdHRvbTsKICAgICAgICAgICAgdG9wUG9zaXRpb24gKz0gYmxvY2tNYXJnaW47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZHJvcEluZGljYXRvci5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmRyYWdnZWRCbG9ja0hlaWdodH1weGA7CiAgICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke01hdGgubWF4KDAsIHRvcFBvc2l0aW9uKX1weGA7CiAgICAgICAgY29uc29sZS5sb2coIkRyb3AgaW5kaWNhdG9yIHVwZGF0ZToiLCB7CiAgICAgICAgICB0YXJnZXRJbmRleCwKICAgICAgICAgIGFkanVzdGVkVGFyZ2V0SW5kZXgsCiAgICAgICAgICBkcmFnZ2VkSW5kZXgsCiAgICAgICAgICB0b3BQb3NpdGlvbiwKICAgICAgICAgIGhlaWdodDogdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQsCiAgICAgICAgICBibG9ja01hcmdpbiwKICAgICAgICAgIHZpc3VhbEJsb2NrczogdmlzdWFsQmxvY2tzLm1hcCgoYjUpID0+ICh7IGluZGV4OiBiNS5pbmRleCwgdG9wOiBiNS50b3AsIGJvdHRvbTogYjUuYm90dG9tIH0pKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnIGVuZAogICAgICAgKi8KICAgICAgaGFuZGxlR2xvYmFsRHJhZ0VuZCA9ICgpID0+IHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLCB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIGlmICh0aGlzLmRyb3BJbmRpY2F0b3IpIHsKICAgICAgICAgIHRoaXMuZHJvcEluZGljYXRvci5yZW1vdmUoKTsKICAgICAgICAgIHRoaXMuZHJvcEluZGljYXRvciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0aGlzLnBlcmZvcm1Ecm9wKCk7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgZHJvcCBvcGVyYXRpb24KICAgICAgICovCiAgICAgIHBlcmZvcm1Ecm9wKCkgewogICAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tJZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBibG9ja0VsZW1lbnRzMiA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgICAgICBjb25zdCBkcmFnZ2VkRWxlbWVudCA9IGJsb2NrRWxlbWVudHMyLmZpbmQoKGVsKSA9PiBlbC5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgICAgaWYgKCFkcmFnZ2VkRWxlbWVudCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB2aXN1YWxPcmRlciA9IGJsb2NrRWxlbWVudHMyLm1hcCgoZWwpID0+IHsKICAgICAgICAgIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBjb25zdCBjZW50ZXJZID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICAgICAgICByZXR1cm4geyBpZCwgY2VudGVyWSwgZWxlbWVudDogZWwgfTsKICAgICAgICB9KTsKICAgICAgICB2aXN1YWxPcmRlci5zb3J0KChhNSwgYjUpID0+IGE1LmNlbnRlclkgLSBiNS5jZW50ZXJZKTsKICAgICAgICBjb25zdCBuZXdCbG9ja0lkcyA9IHZpc3VhbE9yZGVyLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkuZmlsdGVyKChpZCkgPT4gaWQgIT09IG51bGwpOwogICAgICAgIGNvbnN0IG9yaWdpbmFsQmxvY2tzID0gWy4uLnRoaXMuY29tcG9uZW50LmJsb2Nrc107CiAgICAgICAgY29uc3QgZHJhZ2dlZEJsb2NrID0gb3JpZ2luYWxCbG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgICAgICBpZiAoIWRyYWdnZWRCbG9jaykKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBvbGRPcmRlciA9IG9yaWdpbmFsQmxvY2tzLm1hcCgoYjUpID0+IGI1LmlkKTsKICAgICAgICBjb25zdCBvcmRlckNoYW5nZWQgPSAhbmV3QmxvY2tJZHMuZXZlcnkoKGlkLCBpbmRleDIpID0+IGlkID09PSBvbGRPcmRlcltpbmRleDJdKTsKICAgICAgICBpZiAoIW9yZGVyQ2hhbmdlZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBuZXdCbG9ja3MgPSBuZXdCbG9ja0lkcy5tYXAoKGlkKSA9PiBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrcyA9IG5ld0Jsb2NrczsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmIChkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGRyYWdnZWRCbG9jay5pZCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgMTAwKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkuanMKdmFyIFd5c2l3eWdIaXN0b3J5Owp2YXIgaW5pdF93eXNpd3lnX2hpc3RvcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5oaXN0b3J5LmpzIigpIHsKICAgIGluaXRfd3lzaXd5Z190eXBlcygpOwogICAgV3lzaXd5Z0hpc3RvcnkgPSBjbGFzcyB7CiAgICAgIGhpc3RvcnkgPSBbXTsKICAgICAgY3VycmVudEluZGV4ID0gLTE7CiAgICAgIG1heEhpc3RvcnlTaXplID0gNTA7CiAgICAgIGxhc3RTYXZlVGltZSA9IDA7CiAgICAgIHNhdmVEZWJvdW5jZU1zID0gNTAwOwogICAgICAvLyBEZWJvdW5jZSBzYXZlcyB0byBhdm9pZCB0b28gbWFueSBzbmFwc2hvdHMKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAtMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2F2ZSBjdXJyZW50IHN0YXRlIHRvIGhpc3RvcnkKICAgICAgICovCiAgICAgIHNhdmVTdGF0ZShibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pIHsKICAgICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAobm93MiAtIHRoaXMubGFzdFNhdmVUaW1lIDwgdGhpcy5zYXZlRGVib3VuY2VNcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgICAgICB0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdID0gewogICAgICAgICAgICBibG9ja3M6IHRoaXMuY2xvbmVCbG9ja3MoYmxvY2tzKSwKICAgICAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgICAgICBjdXJzb3JQb3NpdGlvbjogY3Vyc29yUG9zaXRpb24gPyB7IC4uLmN1cnNvclBvc2l0aW9uIH0gOiB2b2lkIDAsCiAgICAgICAgICAgIHRpbWVzdGFtcDogbm93MgogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMuaGlzdG9yeS5zbGljZSgwLCB0aGlzLmN1cnJlbnRJbmRleCArIDEpOwogICAgICAgIH0KICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHsKICAgICAgICAgIGJsb2NrczogdGhpcy5jbG9uZUJsb2NrcyhibG9ja3MpLAogICAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgICAgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uID8geyAuLi5jdXJzb3JQb3NpdGlvbiB9IDogdm9pZCAwLAogICAgICAgICAgdGltZXN0YW1wOiBub3cyCiAgICAgICAgfTsKICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXdTdGF0ZSk7CiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgrKzsKICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeVNpemUpIHsKICAgICAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpOwogICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgtLTsKICAgICAgICB9CiAgICAgICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBub3cyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGb3JjZSBzYXZlIGEgY2hlY2twb2ludCAodXNlZnVsIGZvciBvcGVyYXRpb25zIGxpa2UgYmxvY2sgZGVsZXRpb24pCiAgICAgICAqLwogICAgICBzYXZlQ2hlY2twb2ludChibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pIHsKICAgICAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICAgICAgdGhpcy5zYXZlU3RhdGUoYmxvY2tzLCBzZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVW5kbyB0byBwcmV2aW91cyBzdGF0ZQogICAgICAgKi8KICAgICAgdW5kbygpIHsKICAgICAgICBpZiAoIXRoaXMuY2FuVW5kbygpKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXgtLTsKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVN0YXRlKHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWRvIHRvIG5leHQgc3RhdGUKICAgICAgICovCiAgICAgIHJlZG8oKSB7CiAgICAgICAgaWYgKCF0aGlzLmNhblJlZG8oKSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudEluZGV4Kys7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGUKICAgICAgICovCiAgICAgIGNhblVuZG8oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2hlY2sgaWYgcmVkbyBpcyBhdmFpbGFibGUKICAgICAgICovCiAgICAgIGNhblJlZG8oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBjdXJyZW50IHN0YXRlCiAgICAgICAqLwogICAgICBnZXRDdXJyZW50U3RhdGUoKSB7CiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVN0YXRlKHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgaGlzdG9yeQogICAgICAgKi8KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAtMTsKICAgICAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERlZXAgY2xvbmUgYmxvY2tzCiAgICAgICAqLwogICAgICBjbG9uZUJsb2NrcyhibG9ja3MpIHsKICAgICAgICByZXR1cm4gYmxvY2tzLm1hcCgoYmxvY2spID0+ICh7CiAgICAgICAgICAuLi5ibG9jaywKICAgICAgICAgIG1ldGFkYXRhOiBibG9jay5tZXRhZGF0YSA/IHsgLi4uYmxvY2subWV0YWRhdGEgfSA6IHZvaWQgMAogICAgICAgIH0pKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xvbmUgYSBoaXN0b3J5IHN0YXRlCiAgICAgICAqLwogICAgICBjbG9uZVN0YXRlKHN0YXRlKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJsb2NrczogdGhpcy5jbG9uZUJsb2NrcyhzdGF0ZS5ibG9ja3MpLAogICAgICAgICAgc2VsZWN0ZWRCbG9ja0lkOiBzdGF0ZS5zZWxlY3RlZEJsb2NrSWQsCiAgICAgICAgICBjdXJzb3JQb3NpdGlvbjogc3RhdGUuY3Vyc29yUG9zaXRpb24gPyB7IC4uLnN0YXRlLmN1cnNvclBvc2l0aW9uIH0gOiB2b2lkIDAsCiAgICAgICAgICB0aW1lc3RhbXA6IHN0YXRlLnRpbWVzdGFtcAogICAgICAgIH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBoaXN0b3J5IGluZm8gZm9yIGRlYnVnZ2luZwogICAgICAgKi8KICAgICAgZ2V0SGlzdG9yeUluZm8oKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHNpemU6IHRoaXMuaGlzdG9yeS5sZW5ndGgsCiAgICAgICAgICBjdXJyZW50SW5kZXg6IHRoaXMuY3VycmVudEluZGV4LAogICAgICAgICAgY2FuVW5kbzogdGhpcy5jYW5VbmRvKCksCiAgICAgICAgICBjYW5SZWRvOiB0aGlzLmNhblJlZG8oKQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy13eXNpd3lnLWJsb2NrLmpzCnZhciBfX2VzRGVjb3JhdGU2MSwgX19ydW5Jbml0aWFsaXplcnM2MiwgRGVlc1d5c2l3eWdCbG9jazsKdmFyIGluaXRfZGVlc193eXNpd3lnX2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtd3lzaXd5Zy1ibG9jay5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF93eXNpd3lnX3R5cGVzKCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tzKCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBpbml0X2Jsb2NrcygpOwogICAgaW5pdF93eXNpd3lnX2Jsb2NrcmVnaXN0cmF0aW9uKCk7CiAgICBpbml0X3d5c2l3eWdfc2hvcnRjdXRzKCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTYxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNXeXNpd3lnQmxvY2sgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13eXNpd3lnLWJsb2NrIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9ibG9ja19kZWNvcmF0b3JzOwogICAgICBsZXQgX2Jsb2NrX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNTZWxlY3RlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNTZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2hhbmRsZXJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaGFuZGxlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93eXNpd3lnQ29tcG9uZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzV3lzaXd5Z0Jsb2NrMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2Jsb2NrX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX2lzU2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2hhbmRsZXJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3d5c2l3eWdDb21wb25lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfYmxvY2tfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmxvY2siLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2NrLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYmxvY2sgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jsb2NrX2luaXRpYWxpemVycywgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9pc1NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzU2VsZWN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzU2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNTZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzU2VsZWN0ZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfaXNTZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfaGFuZGxlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFuZGxlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhhbmRsZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhhbmRsZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaGFuZGxlcnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hhbmRsZXJzX2luaXRpYWxpemVycywgX2hhbmRsZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInd5c2l3eWdDb21wb25lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInd5c2l3eWdDb21wb25lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud3lzaXd5Z0NvbXBvbmVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnd5c2l3eWdDb21wb25lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3d5c2l3eWdDb21wb25lbnRfaW5pdGlhbGl6ZXJzLCBfd3lzaXd5Z0NvbXBvbmVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV3lzaXd5Z0Jsb2NrMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9ibG9ja19pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IGJsb2NrKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBibG9jayh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfYmxvY2tfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9pc1NlbGVjdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNTZWxlY3RlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpc1NlbGVjdGVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNTZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgaGFuZGxlcnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGhhbmRsZXJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3d5c2l3eWdDb21wb25lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3d5c2l3eWdDb21wb25lbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgd3lzaXd5Z0NvbXBvbmVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIC8vIFJlZmVyZW5jZSB0byBwYXJlbnQgZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgc2V0IHd5c2l3eWdDb21wb25lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdGFibGUgYmxvY2sgZWxlbWVudAogICAgICAgIGJsb2NrRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF93eXNpd3lnQ29tcG9uZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgLy8gVHJhY2sgaWYgd2UndmUgaW5pdGlhbGl6ZWQgdGhlIGNvbnRlbnQKICAgICAgICBjb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICAgICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICAgICAgICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgICAgICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIGhhbmRsZXJTdHlsZXNJbmplY3RlZCA9IGZhbHNlOwogICAgICAgIC8vIEJsb2NrIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBjb250ZW50ZWRpdGFibGUKICAgICAgICBzdGF0aWMgTk9OX0VESVRBQkxFX1RZUEVTID0gWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiXTsKICAgICAgICBpbmplY3RIYW5kbGVyU3R5bGVzKCkgewogICAgICAgICAgaWYgKHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZCA9IHRydWU7CiAgICAgICAgICBsZXQgc3R5bGVzMyA9ICIiOwogICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEJsb2NrUmVnaXN0cnkuZ2V0QWxsVHlwZXMoKTsKICAgICAgICAgIGZvciAoY29uc3QgdHlwZTUgb2YgYmxvY2tUeXBlcykgewogICAgICAgICAgICBjb25zdCBoYW5kbGVyMiA9IEJsb2NrUmVnaXN0cnkuZ2V0SGFuZGxlcih0eXBlNSk7CiAgICAgICAgICAgIGlmIChoYW5kbGVyMikgewogICAgICAgICAgICAgIHN0eWxlczMgKz0gaGFuZGxlcjIuZ2V0U3R5bGVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHlsZXMzKSB7CiAgICAgICAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0eWxlczM7CiAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdD8uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmJsb2NrIHsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlMGUwZTAiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jazplbXB0eTpub3QoOmZvY3VzKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OSIsICIjNjY2Iil9OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLyogQmxvY2stc3BlY2lmaWMgc3R5bGVzIG1vdmVkIHRvIGhhbmRsZXJzICovCgoKICAgICAgLyogRm9ybWF0dGluZyBzdHlsZXMgKi8KICAgICAgLmJsb2NrIDppcyhiLCBzdHJvbmcpIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2sgOmlzKGksIGVtKSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuYmxvY2sgdSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5ibG9jayBzIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgfQoKICAgICAgLmJsb2NrIGNvZGUgewogICAgICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxNCIsICIjZmY2YjZiIil9OwogICAgICB9CgogICAgICAuYmxvY2sgYSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5ibG9jayBhOmhvdmVyIHsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrIGNvbnRhaW5lciBhbmQgbGFuZ3VhZ2Ugc3R5bGVzIG1vdmVkIHRvIGhhbmRsZXIgKi8KCiAgICAgIC8qIFNlbGVjdGlvbiBzdHlsZXMgKi8KICAgICAgLmJsb2NrIDo6c2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAxMDIsIDIwNCwgMC4zKSIsICJyZ2JhKDc3LCAxNDgsIDI1NSwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgfQoKCiAgICAgIC8qIFN0cmlrZSB0aHJvdWdoICovCiAgICAgIC5ibG9jayA6aXMocywgc3RyaWtlKSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgoKICAgICAgLyogQmxvY2sgbWFyZ2luIGFkanVzdG1lbnRzIGJhc2VkIG9uIHR5cGUgKi8KICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpmaXJzdC1jaGlsZCkgLmJsb2NrIHsKICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0LWNvbnRleHQoLmJsb2NrLXdyYXBwZXI6bGFzdC1jaGlsZCkgLmJsb2NrIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBTZWxlY3RlZCBzdGF0ZSAqLwogICAgICAuYmxvY2suc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjA1KSIsICJyZ2JhKDc3LCAxNDgsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjIpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogLThweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OwogICAgICB9CgoKCgogICAgYAogICAgICAgIF07CiAgICAgICAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJpc1NlbGVjdGVkIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgICAgICBsZXQgZWxlbWVudDQgPSBudWxsOwogICAgICAgICAgICBjb25zdCBibG9ja1R5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYC5ibG9jay4ke2Jsb2NrVHlwZX1gOwogICAgICAgICAgICBlbGVtZW50NCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIGVsZW1lbnQ0LmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVsZW1lbnQ0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJsb2NrIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgICAgICBjb25zdCBvbGRCbG9jayA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgiYmxvY2siKTsKICAgICAgICAgICAgaWYgKG9sZEJsb2NrICYmIG9sZEJsb2NrLmlkICYmIG9sZEJsb2NrLnR5cGUgJiYgb2xkQmxvY2suaWQgPT09IHRoaXMuYmxvY2suaWQgJiYgb2xkQmxvY2sudHlwZSA9PT0gdGhpcy5ibG9jay50eXBlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIXRoaXMuYmxvY2tFbGVtZW50IHx8IHRoaXMuYmxvY2s/LnR5cGUgIT09IHRoaXMuYmxvY2tFbGVtZW50LmRhdGFzZXQuYmxvY2tUeXBlOwogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICB0aGlzLmNvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmluamVjdEhhbmRsZXJTdHlsZXMoKTsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgICBpZiAoY29udGFpbmVyICYmIHRoaXMuYmxvY2spIHsKICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMucmVuZGVyQmxvY2tDb250ZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgICAgICBjb25zdCBoYW5kbGVyMiA9IEJsb2NrUmVnaXN0cnkuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgICAgICBpZiAoaGFuZGxlcjIpIHsKICAgICAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhhbmRsZXIyLnNldHVwKGJsb2NrRWxlbWVudCwgdGhpcy5ibG9jaywgdGhpcy5oYW5kbGVycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29uc3QgZWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoZWRpdGFibGVCbG9jaykgewogICAgICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsIHRoaXMuYmxvY2suaWQpOwogICAgICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay10eXBlIiwgdGhpcy5ibG9jay50eXBlKTsKICAgICAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbklucHV0Py4oZTExKTsKICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVCbG9jayk7CiAgICAgICAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25LZXlEb3duPy4oZTExKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Gb2N1cz8uKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25CbHVyPy4oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbkNvbXBvc2l0aW9uU3RhcnQ/LigpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbmVuZCIsICgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbkNvbXBvc2l0aW9uRW5kPy4oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50RWRpdGFibGVCbG9jaykKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2godGhpcy5zaGFkb3dSb290KTsKICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShjdXJyZW50RWRpdGFibGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgICAgICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY3VycmVudEVkaXRhYmxlQmxvY2ssIHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLmJsb2NrLmlkLAogICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIGJsb2NrSWQ6IHRoaXMuYmxvY2suaWQsCiAgICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICAgICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmICh0aGlzLmJsb2NrLmNvbnRlbnQpIHsKICAgICAgICAgICAgICBlZGl0YWJsZUJsb2NrLmlubmVySFRNTCA9IHRoaXMuYmxvY2suY29udGVudDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ibG9ja0VsZW1lbnQgPSBlZGl0YWJsZUJsb2NrOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgICAgIHJldHVybiB1M2BgOwogICAgICAgICAgcmV0dXJuIHUzYDxkaXYgY2xhc3M9Ind5c2l3eWctYmxvY2stY29udGFpbmVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZW5kZXJCbG9ja0NvbnRlbnQoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgICBpZiAoaGFuZGxlcjIpIHsKICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnJlbmRlcih0aGlzLmJsb2NrLCB0aGlzLmlzU2VsZWN0ZWQpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IHRoaXMuaXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiI7CiAgICAgICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBmb2N1cygpIHsKICAgICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgICBpZiAoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZm9jdXMpIHsKICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyMi5mb2N1cyhjb250YWluZXIsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmJsb2NrICYmIERlZXNXeXNpd3lnQmxvY2syLk5PTl9FRElUQUJMRV9UWVBFUy5pbmNsdWRlcyh0aGlzLmJsb2NrLnR5cGUpKSB7CiAgICAgICAgICAgIGNvbnN0IGJsb2NrRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLmJsb2NrLiR7dGhpcy5ibG9jay50eXBlfWApOwogICAgICAgICAgICBpZiAoYmxvY2tFbGVtZW50KSB7CiAgICAgICAgICAgICAgYmxvY2tFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgICAgIGVkaXRhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICAgICAgICB9CiAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlZGl0YWJsZUVsZW1lbnQgJiYgdGhpcy5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgZWRpdGFibGVFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb2N1c1dpdGhDdXJzb3IocG9zaXRpb24zID0gImVuZCIpIHsKICAgICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgICBpZiAoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZm9jdXNXaXRoQ3Vyc29yKSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgICAgICByZXR1cm4gaGFuZGxlcjIuZm9jdXNXaXRoQ3Vyc29yKGNvbnRhaW5lciwgcG9zaXRpb24zLCBjb250ZXh0Mik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5ibG9jayAmJiBEZWVzV3lzaXd5Z0Jsb2NrMi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgICAgICB0aGlzLmZvY3VzKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICAgICAgfQogICAgICAgICAgZWRpdGFibGVFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICBjb25zdCBzZXRDdXJzb3IgPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZCgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQsIHBvc2l0aW9uMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWRpdGFibGVFbGVtZW50IHx8IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZWRpdGFibGUgZWxlbWVudAogICAgICAgICAqLwogICAgICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgICAgICBjb25zdCBoYW5kbGVyMiA9IEJsb2NrUmVnaXN0cnkuZ2V0SGFuZGxlcih0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldEN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFNlbGVjdGlvbiBpbmZvIGZyb20gc2hhZG93IERPTXM6IiwgewogICAgICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJnZXRDdXJzb3JQb3NpdGlvbjogTm8gc2VsZWN0aW9uIGZvdW5kIik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBSYW5nZSBpbmZvOiIsIHsKICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LAogICAgICAgICAgICBjb2xsYXBzZWQ6IHNlbGVjdGlvbkluZm8uY29sbGFwc2VkLAogICAgICAgICAgICBzdGFydENvbnRhaW5lclRleHQ6IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFJhbmdlIG5vdCBpbiBlbGVtZW50Iik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50NCk7CiAgICAgICAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246IiwgewogICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24zLAogICAgICAgICAgICBwcmVDYXJldFRleHQ6IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKSwKICAgICAgICAgICAgZWxlbWVudFRleHQ6IGVsZW1lbnQ0LnRleHRDb250ZW50LAogICAgICAgICAgICBlbGVtZW50VGV4dExlbmd0aDogZWxlbWVudDQudGV4dENvbnRlbnQ/Lmxlbmd0aAogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgICAgIH0KICAgICAgICBnZXRDb250ZW50KCkgewogICAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5nZXRDb250ZW50KSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0Q29udGVudChjb250YWluZXIsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MIHx8ICIiOwogICAgICAgICAgY29uc29sZS5sb2coIkdldHRpbmcgY29udGVudCBmcm9tIGJsb2NrOiIsIGNvbnRlbnQzKTsKICAgICAgICAgIHJldHVybiBjb250ZW50MzsKICAgICAgICB9CiAgICAgICAgc2V0Q29udGVudChjb250ZW50MykgewogICAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDb250ZW50KSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q29udGVudChjb250YWluZXIsIGNvbnRlbnQzLCBjb250ZXh0Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGhhZEZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWRpdGFibGVFbGVtZW50IHx8IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gZWRpdGFibGVFbGVtZW50OwogICAgICAgICAgZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgICAgICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgICAgICAgIGVkaXRhYmxlRWxlbWVudC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXRDdXJzb3JUb1N0YXJ0KCkgewogICAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDdXJzb3JUb1N0YXJ0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q3Vyc29yVG9TdGFydChjb250YWluZXIsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXRDdXJzb3JUb0VuZCgpIHsKICAgICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgICBpZiAoaGFuZGxlcjIgJiYgaGFuZGxlcjIuc2V0Q3Vyc29yVG9FbmQpIHsKICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyMi5zZXRDdXJzb3JUb0VuZChjb250YWluZXIsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQoZWRpdGFibGVFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhpcyBibG9jawogICAgICAgICAqLwogICAgICAgIGdldENvbnRleHRNZW51SXRlbXMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYmxvY2sgfHwgdGhpcy5ibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gdGhpcy5ibG9jay50eXBlOwogICAgICAgICAgY29uc3Qgd3lzaXd5Z0NvbXBvbmVudCA9IHRoaXMud3lzaXd5Z0NvbXBvbmVudDsKICAgICAgICAgIGNvbnN0IGJsb2NrSWQgPSB0aGlzLmJsb2NrLmlkOwogICAgICAgICAgY29uc3QgYmxvY2tUeXBlSXRlbXMgPSBibG9ja1R5cGVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlICE9PSBjdXJyZW50VHlwZSAmJiBpdGVtLnR5cGUgIT09ICJkaXZpZGVyIikubWFwKChpdGVtKSA9PiAoewogICAgICAgICAgICBuYW1lOiBpdGVtLmxhYmVsLAogICAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCAiIiksCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGlmICh3eXNpd3lnQ29tcG9uZW50ICYmIHd5c2l3eWdDb21wb25lbnQuYmxvY2tPcGVyYXRpb25zKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvVHJhbnNmb3JtID0gd3lzaXd5Z0NvbXBvbmVudC5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgICAgIGlmIChibG9ja1RvVHJhbnNmb3JtKSB7CiAgICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0udHlwZSA9IGl0ZW0udHlwZTsKICAgICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50IHx8ICIiOwogICAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAiY29kZSIpIHsKICAgICAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBsYW5ndWFnZTogInR5cGVzY3JpcHQiIH07CiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJpbWFnZSIpIHsKICAgICAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyB1cmw6ICIiLCBsb2FkaW5nOiBmYWxzZSB9OwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gInlvdXR1YmUiKSB7CiAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgdmlkZW9JZDogIiIsIHVybDogIiIgfTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJtYXJrZG93biIpIHsKICAgICAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJodG1sIikgewogICAgICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IHNob3dQcmV2aWV3OiBmYWxzZSB9OwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgZmlsZXM6IFtdIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgd3lzaXd5Z0NvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2tJZCk7CiAgICAgICAgICAgICAgICAgIHd5c2l3eWdDb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGJsb2NrSWQpOwogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDaGFuZ2UgVHlwZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJ0eXBlIiwKICAgICAgICAgICAgICBzdWJtZW51OiBibG9ja1R5cGVJdGVtcwogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgICAgaWYgKCFbImltYWdlIiwgImRpdmlkZXIiLCAieW91dHViZSIsICJhdHRhY2htZW50Il0uaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgICAgIG5hbWU6ICJDdXQiLAogICAgICAgICAgICAgIGljb25OYW1lOiAic2Npc3NvcnMiLAogICAgICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK1giLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IiwKICAgICAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK0MiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkIiwKICAgICAgICAgICAgICBzaG9ydGN1dDogIkNtZCtWIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJwYXN0ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgICBuYW1lOiAiRGVsZXRlIEJsb2NrIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICAgICAgd3lzaXd5Z0NvbXBvbmVudC5ibG9ja09wZXJhdGlvbnMuZGVsZXRlQmxvY2soYmxvY2tJZCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBtZW51SXRlbXM7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldHMgY29udGVudCBzcGxpdCBhdCBjdXJzb3IgcG9zaXRpb24KICAgICAgICAgKi8KICAgICAgICBnZXRTcGxpdENvbnRlbnQoKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTdGFydGluZy4uLiIpOwogICAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IENoZWNraW5nIGZvciBoYW5kbGVyIiwgewogICAgICAgICAgICBibG9ja1R5cGU6IHRoaXMuYmxvY2sudHlwZSwKICAgICAgICAgICAgaGFzSGFuZGxlcjogISFoYW5kbGVyMiwKICAgICAgICAgICAgaGFzU3BsaXRNZXRob2Q6ICEhKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkgewogICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBGb3VuZCBjb250YWluZXIiLCB7CiAgICAgICAgICAgICAgY29udGFpbmVyOiAhIWNvbnRhaW5lciwKICAgICAgICAgICAgICBjb250YWluZXJIVE1MOiBjb250YWluZXI/LmlubmVySFRNTD8uc3Vic3RyaW5nKDAsIDEwMCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgICAgIHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwKICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudChjb250YWluZXIsIGNvbnRleHQyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBObyBlZGl0YWJsZSBlbGVtZW50IGZvdW5kIik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRWxlbWVudCBpbmZvOiIsIHsKICAgICAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgICAgIGlubmVySFRNTDogZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCwKICAgICAgICAgICAgdGV4dENvbnRlbnQ6IGVkaXRhYmxlRWxlbWVudC50ZXh0Q29udGVudCwKICAgICAgICAgICAgdGV4dExlbmd0aDogZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50Py5sZW5ndGgKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgICAgICBpZiAodGhpcy5zaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNlbGVjdGlvbiBpbmZvIGZyb20gc2hhZG93IERPTXM6IiwgewogICAgICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICAgICAgICBjb25zdCBmdWxsVGV4dCA9IGVkaXRhYmxlRWxlbWVudC50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNwbGl0dGluZyB3aXRoIGxhc3Qga25vd24gcG9zaXRpb246IiwgewogICAgICAgICAgICAgICAgcG9zLAogICAgICAgICAgICAgICAgZnVsbFRleHRMZW5ndGg6IGZ1bGxUZXh0Lmxlbmd0aCwKICAgICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBTZWxlY3Rpb24gcmFuZ2U6IiwgewogICAgICAgICAgICBzdGFydENvbnRhaW5lcjogc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwKICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQsCiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVySW5FbGVtZW50OiBlZGl0YWJsZUVsZW1lbnQuY29udGFpbnMoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGVkaXRhYmxlRWxlbWVudCwgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIG5vdCBpbiB0aGlzIGJsb2NrLCB1c2luZyBsYXN0IGtub3duIHBvc2l0aW9uOiIsIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24pOwogICAgICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50IHx8ICIiOwogICAgICAgICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ3Vyc29yIHBvc2l0aW9uIGZvciBIVE1MIHNwbGl0OiIsIGN1cnNvclBvcyk7CiAgICAgICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiZ2V0U3BsaXRDb250ZW50OiBDdXJzb3IgYXQgc3RhcnQgb3IgbnVsbCwgbW92aW5nIGFsbCBjb250ZW50Iik7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgICAgICBhZnRlcjogZWRpdGFibGVFbGVtZW50LmlubmVySFRNTAogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChlZGl0YWJsZUVsZW1lbnQsIDApOwogICAgICAgICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGVkaXRhYmxlRWxlbWVudCwgZWRpdGFibGVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICAgICAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICAgICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgICAgICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRmluYWwgc3BsaXQgcmVzdWx0OiIsIHsKICAgICAgICAgICAgY3Vyc29yUG9zLAogICAgICAgICAgICBiZWZvcmVIdG1sLAogICAgICAgICAgICBiZWZvcmVMZW5ndGg6IGJlZm9yZUh0bWwubGVuZ3RoLAogICAgICAgICAgICBiZWZvcmVIdG1sUHJldmlldzogYmVmb3JlSHRtbC5zdWJzdHJpbmcoMCwgMTAwKSArIChiZWZvcmVIdG1sLmxlbmd0aCA+IDEwMCA/ICIuLi4iIDogIiIpLAogICAgICAgICAgICBhZnRlckh0bWwsCiAgICAgICAgICAgIGFmdGVyTGVuZ3RoOiBhZnRlckh0bWwubGVuZ3RoLAogICAgICAgICAgICBhZnRlckh0bWxQcmV2aWV3OiBhZnRlckh0bWwuc3Vic3RyaW5nKDAsIDEwMCkgKyAoYWZ0ZXJIdG1sLmxlbmd0aCA+IDEwMCA/ICIuLi4iIDogIiIpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvaW5kZXguanMKdmFyIGluaXRfZGVlc19pbnB1dF93eXNpd3lnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19pbnB1dF93eXNpd3lnMigpOwogICAgaW5pdF93eXNpd3lnX3R5cGVzKCk7CiAgICBpbml0X3d5c2l3eWdfaW50ZXJmYWNlcygpOwogICAgaW5pdF93eXNpd3lnX2NvbnN0YW50cygpOwogICAgaW5pdF93eXNpd3lnX3N0eWxlcygpOwogICAgaW5pdF93eXNpd3lnX2NvbnZlcnRlcnMoKTsKICAgIGluaXRfd3lzaXd5Z19zaG9ydGN1dHMoKTsKICAgIGluaXRfd3lzaXd5Z19mb3JtYXR0aW5nKCk7CiAgICBpbml0X3d5c2l3eWdfc2VsZWN0aW9uKCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tzKCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tvcGVyYXRpb25zKCk7CiAgICBpbml0X3d5c2l3eWdfYmxvY2tyZWdpc3RyYXRpb24oKTsKICAgIGluaXRfd3lzaXd5Z19pbnB1dGhhbmRsZXIoKTsKICAgIGluaXRfd3lzaXd5Z19rZXlib2FyZGhhbmRsZXIoKTsKICAgIGluaXRfd3lzaXd5Z19kcmFnZHJvcGhhbmRsZXIoKTsKICAgIGluaXRfd3lzaXd5Z19tb2RhbG1hbmFnZXIoKTsKICAgIGluaXRfd3lzaXd5Z19oaXN0b3J5KCk7CiAgICBpbml0X2RlZXNfc2xhc2hfbWVudSgpOwogICAgaW5pdF9kZWVzX2Zvcm1hdHRpbmdfbWVudSgpOwogICAgaW5pdF9kZWVzX3d5c2l3eWdfYmxvY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLWlucHV0LXd5c2l3eWcuanMKdmFyIF9fZXNEZWNvcmF0ZTYyLCBfX3J1bkluaXRpYWxpemVyczYzLCBEZWVzSW5wdXRXeXNpd3lnOwp2YXIgaW5pdF9kZWVzX2lucHV0X3d5c2l3eWcyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtaW5wdXQtd3lzaXd5Zy5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogICAgaW5pdF9kZWVzX2lucHV0X3d5c2l3eWdfZGVtbygpOwogICAgaW5pdF9kZWVzX21vZGFsKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2lucHV0X3d5c2l3eWcoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTYyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbnB1dFd5c2l3eWcgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC13eXNpd3lnIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogICAgICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vdXRwdXRGb3JtYXRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9vdXRwdXRGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYmxvY2tzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYmxvY2tzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kcmFnT3ZlckJsb2NrSWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kcmFnT3ZlckJsb2NrSWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2RyYWdPdmVyUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNJbnB1dFd5c2l3eWcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfb3V0cHV0Rm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2Jsb2Nrc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZHJhZ092ZXJCbG9ja0lkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNjIodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfb3V0cHV0Rm9ybWF0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dEZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0Rm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dEZvcm1hdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm91dHB1dEZvcm1hdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycywgX291dHB1dEZvcm1hdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfYmxvY2tzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJsb2NrcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYmxvY2tzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2Nrcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmJsb2NrcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYmxvY2tzX2luaXRpYWxpemVycywgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ2dlZEJsb2NrSWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdnZWRCbG9ja0lkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdnZWRCbG9ja0lkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZHJhZ2dlZEJsb2NrSWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdnZWRCbG9ja0lkX2luaXRpYWxpemVycywgX2RyYWdnZWRCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYyKHRoaXMsIG51bGwsIF9kcmFnT3ZlckJsb2NrSWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ092ZXJCbG9ja0lkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlckJsb2NrSWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ092ZXJCbG9ja0lkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZHJhZ092ZXJCbG9ja0lkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnT3ZlckJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYyKHRoaXMsIG51bGwsIF9kcmFnT3ZlclBvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdPdmVyUG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdPdmVyUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ092ZXJQb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRyYWdPdmVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkVGV4dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRUZXh0X2luaXRpYWxpemVycywgX3NlbGVjdGVkVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIklucHV0IiwgIldvcmtzcGFjZSJdOwogICAgICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgZ2V0IHZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX291dHB1dEZvcm1hdF9pbml0aWFsaXplcnMsICJodG1sIikpOwogICAgICAgIGdldCBvdXRwdXRGb3JtYXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jb3V0cHV0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvdXRwdXRGb3JtYXQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Jsb2Nrc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX291dHB1dEZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX2Jsb2Nrc19pbml0aWFsaXplcnMsIFsKICAgICAgICAgIHsKICAgICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgICAgfQogICAgICAgIF0pKTsKICAgICAgICBnZXQgYmxvY2tzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Jsb2Nrc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYmxvY2tzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYmxvY2tzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIE5vdCB1c2luZyBAc3RhdGUgdG8gYXZvaWQgcmUtcmVuZGVycyB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzCiAgICAgICAgc2VsZWN0ZWRCbG9ja0lkID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIC8vIFNsYXNoIG1lbnUgaXMgbm93IGdsb2JhbGx5IHJlbmRlcmVkCiAgICAgICAgc2xhc2hNZW51ID0gRGVlc1NsYXNoTWVudS5nZXRJbnN0YW5jZSgpOwogICAgICAgICNkcmFnZ2VkQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICBnZXQgZHJhZ2dlZEJsb2NrSWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRyYWdnZWRCbG9ja0lkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RyYWdPdmVyQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX2RyYWdnZWRCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfZHJhZ092ZXJCbG9ja0lkX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBkcmFnT3ZlckJsb2NrSWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZHJhZ092ZXJCbG9ja0lkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkcmFnT3ZlckJsb2NrSWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBkcmFnT3ZlclBvc2l0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRyYWdPdmVyUG9zaXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkcmFnT3ZlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEZvcm1hdHRpbmcgbWVudSBpcyBub3cgZ2xvYmFsbHkgcmVuZGVyZWQKICAgICAgICBmb3JtYXR0aW5nTWVudSA9IChfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgRGVlc0Zvcm1hdHRpbmdNZW51LmdldEluc3RhbmNlKCkpOwogICAgICAgICNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgc2VsZWN0ZWRUZXh0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRUZXh0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRUZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGVkaXRvckNvbnRlbnRSZWYgPSBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7CiAgICAgICAgLy8gSGFuZGxlciBpbnN0YW5jZXMKICAgICAgICBibG9ja09wZXJhdGlvbnM7CiAgICAgICAgaW5wdXRIYW5kbGVyOwogICAgICAgIGtleWJvYXJkSGFuZGxlcjsKICAgICAgICBkcmFnRHJvcEhhbmRsZXI7CiAgICAgICAgaGlzdG9yeTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgd3lzaXd5Z1N0eWxlcwogICAgICAgIF07CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5ibG9ja09wZXJhdGlvbnMgPSBuZXcgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyh0aGlzKTsKICAgICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IFd5c2l3eWdJbnB1dEhhbmRsZXIodGhpcyk7CiAgICAgICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyKHRoaXMpOwogICAgICAgICAgdGhpcy5kcmFnRHJvcEhhbmRsZXIgPSBuZXcgV3lzaXd5Z0RyYWdEcm9wSGFuZGxlcih0aGlzKTsKICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBXeXNpd3lnSGlzdG9yeSgpOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyPy5kZXN0cm95KCk7CiAgICAgICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrcyA9IHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIgPyBXeXNpd3lnQ29udmVydGVycy5wYXJzZUh0bWxUb0Jsb2Nrcyh0aGlzLnZhbHVlKSA6IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTsKICAgICAgICAgICAgaWYgKHBhcnNlZEJsb2Nrcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5ibG9ja3MgPSBwYXJzZWRCbG9ja3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgICAgIGlmICh0aGlzLmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICAgICAgdGhpcy5lZGl0b3JDb250ZW50UmVmLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gdGhpcy5oYW5kbGVFZGl0b3JDbGljayhlMTEpKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2stdGV4dC1zZWxlY3RlZCIsIChlMTEpID0+IHsKICAgICAgICAgICAgaWYgKCF0aGlzLnNsYXNoTWVudS52aXNpYmxlICYmIGUxMS5kZXRhaWwuaGFzU2VsZWN0aW9uICYmIGUxMS5kZXRhaWwudGV4dC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSBlMTEuZGV0YWlsLnRleHQ7CiAgICAgICAgICAgICAgaWYgKGUxMS5kZXRhaWwucmVjdCkgewogICAgICAgICAgICAgICAgY29uc3QgY29vcmRzID0gewogICAgICAgICAgICAgICAgICB4OiBlMTEuZGV0YWlsLnJlY3QubGVmdCArIGUxMS5kZXRhaWwucmVjdC53aWR0aCAvIDIsCiAgICAgICAgICAgICAgICAgIHk6IE1hdGgubWF4KDQ1LCBlMTEuZGV0YWlsLnJlY3QudG9wIC0gNDUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KGNvb3JkcywgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRpbmdNZW51RWxlbWVudCA9IHRoaXMuZm9ybWF0dGluZ01lbnUuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpOwogICAgICAgICAgICBpZiAoZm9ybWF0dGluZ01lbnVFbGVtZW50ICYmIGZvcm1hdHRpbmdNZW51RWxlbWVudC5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWF0dGluZ01lbnUudmlzaWJsZSkgewogICAgICAgICAgICAgIHRoaXMuaGlkZUZvcm1hdHRpbmdNZW51KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbnModGFyZ2V0KSAmJiAhdGhpcy5zaGFkb3dSb290Py5jb250YWlucyh0YXJnZXQpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmICFlMTEuc2hpZnRLZXkgJiYgZTExLmtleSA9PT0gInoiKSB7CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgdGhpcy51bmRvKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGUxMS5tZXRhS2V5IHx8IGUxMS5jdHJsS2V5KSAmJiBlMTEuc2hpZnRLZXkgJiYgZTExLmtleSA9PT0gInoiKSB7CiAgICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgdGhpcy5yZWRvKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlbmRlcnMgYWxsIGJsb2NrcyBwcm9ncmFtbWF0aWNhbGx5IHdpdGhvdXQgdHJpZ2dlcmluZyByZS1yZW5kZXJzCiAgICAgICAgICovCiAgICAgICAgcmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpIHsKICAgICAgICAgIGlmICghdGhpcy5lZGl0b3JDb250ZW50UmVmKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnRSZWYuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICB0aGlzLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gewogICAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChibG9jayk7CiAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZChibG9ja1dyYXBwZXIpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBibG9jayBlbGVtZW50IHByb2dyYW1tYXRpY2FsbHkKICAgICAgICAgKi8KICAgICAgICBjcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spIHsKICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gImJsb2NrLXdyYXBwZXIiOwogICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLCBibG9jay5pZCk7CiAgICAgICAgICBpZiAoYmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICAgIGNvbnN0IGRyYWdIYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgZHJhZ0hhbmRsZS5jbGFzc05hbWUgPSAiZHJhZy1oYW5kbGUiOwogICAgICAgICAgICBkcmFnSGFuZGxlLmRyYWdnYWJsZSA9IHRydWU7CiAgICAgICAgICAgIGRyYWdIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwgKGUxMSkgPT4gdGhpcy5kcmFnRHJvcEhhbmRsZXIuaGFuZGxlRHJhZ1N0YXJ0KGUxMSwgYmxvY2spKTsKICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkcmFnSGFuZGxlKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgICBibG9ja0NvbXBvbmVudC5ibG9jayA9IGJsb2NrOwogICAgICAgICAgYmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRCbG9ja0lkID09PSBibG9jay5pZDsKICAgICAgICAgIGJsb2NrQ29tcG9uZW50Lnd5c2l3eWdDb21wb25lbnQgPSB0aGlzOwogICAgICAgICAgYmxvY2tDb21wb25lbnQuaGFuZGxlcnMgPSB7CiAgICAgICAgICAgIG9uSW5wdXQ6IChlMTEpID0+IHRoaXMuaW5wdXRIYW5kbGVyLmhhbmRsZUJsb2NrSW5wdXQoZTExLCBibG9jayksCiAgICAgICAgICAgIG9uS2V5RG93bjogKGUxMSkgPT4gdGhpcy5rZXlib2FyZEhhbmRsZXIuaGFuZGxlQmxvY2tLZXlEb3duKGUxMSwgYmxvY2spLAogICAgICAgICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmhhbmRsZUJsb2NrRm9jdXMoYmxvY2spLAogICAgICAgICAgICBvbkJsdXI6ICgpID0+IHRoaXMuaGFuZGxlQmxvY2tCbHVyKGJsb2NrKSwKICAgICAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0OiAoKSA9PiB0aGlzLmlzQ29tcG9zaW5nID0gdHJ1ZSwKICAgICAgICAgICAgb25Db21wb3NpdGlvbkVuZDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlLAogICAgICAgICAgICBvbk1vdXNlVXA6IChlMTEpID0+IHRoaXMuaGFuZGxlVGV4dFNlbGVjdGlvbihlMTEpLAogICAgICAgICAgICBvblJlcXVlc3RVcGRhdGU6ICgpID0+IHRoaXMudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKQogICAgICAgICAgfTsKICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYmxvY2tDb21wb25lbnQpOwogICAgICAgICAgd3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdPdmVyKGUxMSwgYmxvY2spKTsKICAgICAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoZTExLCBibG9jaykpOwogICAgICAgICAgd3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoKSA9PiB0aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnTGVhdmUoYmxvY2spKTsKICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIGEgc3BlY2lmaWMgYmxvY2sgZWxlbWVudAogICAgICAgICAqLwogICAgICAgIHVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKSB7CiAgICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gYmxvY2tJZCk7CiAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgICAgICAgIGlmICghd3JhcHBlcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY3JlYXRlQmxvY2tFbGVtZW50KGJsb2NrKTsKICAgICAgICAgIHdyYXBwZXIucmVwbGFjZVdpdGgobmV3V3JhcHBlcik7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiB1M2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgLy8gT2xkIHJlbmRlckJsb2NrIG1ldGhvZCByZW1vdmVkIC0gdXNpbmcgcHJvZ3JhbW1hdGljIHJlbmRlcmluZyBpbnN0ZWFkCiAgICAgICAgaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZTExKSB7CiAgICAgICAgICBzd2l0Y2ggKGUxMS5rZXkpIHsKICAgICAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLnNsYXNoTWVudS5uYXZpZ2F0ZSgiZG93biIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLnNsYXNoTWVudS5uYXZpZ2F0ZSgidXAiKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIHRoaXMuc2xhc2hNZW51LnNlbGVjdEN1cnJlbnQoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiRXNjYXBlIjoKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KHRydWUpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbG9zZVNsYXNoTWVudShjbGVhclNsYXNoID0gZmFsc2UpIHsKICAgICAgICAgIGlmIChjbGVhclNsYXNoICYmIHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9jayA9IHRoaXMuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgICAgIGlmIChjb250ZW50My5zdGFydHNXaXRoKCIvIikpIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudDMucmVwbGFjZSgvXlwvW15cc10qXHMqLywgIiIpLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9IGNsZWFuQ29udGVudDsKICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5mb2N1c1dpdGhDdXJzb3IoMCk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zbGFzaE1lbnUuaGlkZSgpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVCbG9ja0ZvY3VzKGJsb2NrKSB7CiAgICAgICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcHJldlNlbGVjdGVkSWQgPSB0aGlzLnNlbGVjdGVkQmxvY2tJZDsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCbG9ja0lkID0gYmxvY2suaWQ7CiAgICAgICAgICBpZiAocHJldlNlbGVjdGVkSWQgIT09IGJsb2NrLmlkKSB7CiAgICAgICAgICAgIGlmIChwcmV2U2VsZWN0ZWRJZCkgewogICAgICAgICAgICAgIGNvbnN0IHByZXZXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtwcmV2U2VsZWN0ZWRJZH0iXWApOwogICAgICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgICAgICBpZiAocHJldkJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgICAgICBwcmV2QmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5pc1NlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBibHVyVGltZW91dCA9IG51bGw7CiAgICAgICAgaGFuZGxlQmxvY2tCbHVyKGJsb2NrKSB7CiAgICAgICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5zbGFzaE1lbnUudmlzaWJsZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50ICYmIGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQpIHsKICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgICAgICBibG9jay5jb250ZW50ID0gbmV3Q29udGVudDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ibHVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50OwogICAgICAgICAgICBjb25zdCBpc0Jsb2NrRm9jdXNlZCA9IGFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKTsKICAgICAgICAgICAgaWYgKCFpc0Jsb2NrRm9jdXNlZCkgewogICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRWRpdG9yQ2xpY2soZTExKSB7CiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICAgICAgdGhpcy5jbG9zZVNsYXNoTWVudSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJlZGl0b3ItY29udGVudCIpKSB7CiAgICAgICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGxhc3RCbG9jay5pZCwgbGFzdEJsb2NrLnR5cGUgPT09ICJkaXZpZGVyIiB8fCBsYXN0QmxvY2sudHlwZSA9PT0gImltYWdlIiA/IHZvaWQgMCA6ICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY3JlYXRlTmV3QmxvY2sodHlwZTUgPSAicGFyYWdyYXBoIiwgY29udGVudDMgPSAiIiwgbWV0YWRhdGEpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGlkOiBXeXNpd3lnU2hvcnRjdXRzLmdlbmVyYXRlQmxvY2tJZCgpLAogICAgICAgICAgICB0eXBlOiB0eXBlNSwKICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgIC4uLm1ldGFkYXRhICYmIHsgbWV0YWRhdGEgfQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gYWZ0ZXJCbG9jay5pZCk7CiAgICAgICAgICB0aGlzLmJsb2NrcyA9IFsuLi50aGlzLmJsb2Nrcy5zbGljZSgwLCBibG9ja0luZGV4ICsgMSksIG5ld0Jsb2NrLCAuLi50aGlzLmJsb2Nrcy5zbGljZShibG9ja0luZGV4ICsgMSldOwogICAgICAgICAgY29uc3QgYWZ0ZXJXcmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgICAgIGlmIChhZnRlcldyYXBwZXIpIHsKICAgICAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY3JlYXRlQmxvY2tFbGVtZW50KG5ld0Jsb2NrKTsKICAgICAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGluc2VydEJsb2NrKHR5cGU1KSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50QmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgICAgIGlmICghY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgIHRoaXMuY2xvc2VTbGFzaE1lbnUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ29udGVudCA9IGNvbnRlbnQzLnJlcGxhY2UoL15cL1teXHNdKlxzKi8sICIiKS50cmltKCk7CiAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KGZhbHNlKTsKICAgICAgICAgIGlmICh0eXBlNSA9PT0gImNvZGUiKSB7CiAgICAgICAgICAgIGN1cnJlbnRCbG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2U6ICJ0eXBlc2NyaXB0IiB9OwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudEJsb2NrLnR5cGUgPSB0eXBlNTsKICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgICBpZiAodHlwZTUgPT09ICJkaXZpZGVyIikgewogICAgICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIgIjsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSB0aGlzLmNyZWF0ZU5ld0Jsb2NrKCk7CiAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmxvY2tBZnRlcihjdXJyZW50QmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJsaXN0IikgewogICAgICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9OwogICAgICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImltYWdlIikgewogICAgICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAieW91dHViZSIpIHsKICAgICAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gIm1hcmtkb3duIikgewogICAgICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHNob3dQcmV2aWV3OiBmYWxzZSB9OwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgIGN1cnJlbnRCbG9jay5tZXRhZGF0YSA9IHsgc2hvd1ByZXZpZXc6IGZhbHNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiYXR0YWNobWVudCIpIHsKICAgICAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBmaWxlczogW10gfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChjdXJyZW50QmxvY2suaWQpOwogICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAwKSk7CiAgICAgICAgICBpZiAodHlwZTUgPT09ICJsaXN0IikgewogICAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtjdXJyZW50QmxvY2suaWR9Il1gKTsKICAgICAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudDIgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudDIpIHsKICAgICAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50Mi5mb2N1c0xpc3RJdGVtKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZTUgIT09ICJkaXZpZGVyIiAmJiB0eXBlNSAhPT0gImltYWdlIiAmJiB0eXBlNSAhPT0gInlvdXR1YmUiICYmIHR5cGU1ICE9PSAibWFya2Rvd24iICYmIHR5cGU1ICE9PSAiaHRtbCIgJiYgdHlwZTUgIT09ICJhdHRhY2htZW50IikgewogICAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiaW1hZ2UiIHx8IHR5cGU1ID09PSAieW91dHViZSIgfHwgdHlwZTUgPT09ICJtYXJrZG93biIgfHwgdHlwZTUgPT09ICJodG1sIiB8fCB0eXBlNSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soY3VycmVudEJsb2NrLmlkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdXBkYXRlVmFsdWUoKSB7CiAgICAgICAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT09ICJodG1sIikgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0SHRtbE91dHB1dCh0aGlzLmJsb2Nrcyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSk7CiAgICAgICAgICB0aGlzLnNhdmVUb0hpc3RvcnkodHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGdldFZhbHVlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICAgIGlmICh0aGlzLm91dHB1dEZvcm1hdCA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgIHRoaXMuYmxvY2tzID0gV3lzaXd5Z0NvbnZlcnRlcnMucGFyc2VIdG1sVG9CbG9ja3ModmFsdWUyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuYmxvY2tzID0gV3lzaXd5Z0NvbnZlcnRlcnMucGFyc2VNYXJrZG93blRvQmxvY2tzKHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5ibG9ja3MubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuYmxvY2tzID0gW3sKICAgICAgICAgICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgICAgICB9XTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogRXhwb3J0IHRoZSBlZGl0b3IgY29udGVudCBhcyByYXcgYmxvY2tzIChsb3NzbGVzcykKICAgICAgICAgKi8KICAgICAgICBleHBvcnRCbG9ja3MoKSB7CiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmJsb2NrcykpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBJbXBvcnQgcmF3IGJsb2NrcyAobG9zc2xlc3MpCiAgICAgICAgICovCiAgICAgICAgaW1wb3J0QmxvY2tzKGJsb2NrcykgewogICAgICAgICAgdGhpcy5ibG9ja3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJsb2NrcykpOwogICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogRXhwb3J0IGNvbnRlbnQgYXMgSFRNTCByZWdhcmRsZXNzIG9mIG91dHB1dEZvcm1hdCBzZXR0aW5nCiAgICAgICAgICovCiAgICAgICAgZXhwb3J0QXNIdG1sKCkgewogICAgICAgICAgcmV0dXJuIFd5c2l3eWdDb252ZXJ0ZXJzLmdldEh0bWxPdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBFeHBvcnQgY29udGVudCBhcyBNYXJrZG93biByZWdhcmRsZXNzIG9mIG91dHB1dEZvcm1hdCBzZXR0aW5nCiAgICAgICAgICovCiAgICAgICAgZXhwb3J0QXNNYXJrZG93bigpIHsKICAgICAgICAgIHJldHVybiBXeXNpd3lnQ29udmVydGVycy5nZXRNYXJrZG93bk91dHB1dCh0aGlzLmJsb2Nrcyk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVkaXRvciBzdGF0ZSAoZm9yIHNhdmluZykKICAgICAgICAgKi8KICAgICAgICBleHBvcnRTdGF0ZSgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJsb2NrczogdGhpcy5leHBvcnRCbG9ja3MoKSwKICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLm91dHB1dEZvcm1hdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmVzdG9yZSBlZGl0b3Igc3RhdGUgZnJvbSBKU09OCiAgICAgICAgICovCiAgICAgICAgaW1wb3J0U3RhdGUoc3RhdGUpIHsKICAgICAgICAgIGlmIChzdGF0ZS5vdXRwdXRGb3JtYXQpIHsKICAgICAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSBzdGF0ZS5vdXRwdXRGb3JtYXQ7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmltcG9ydEJsb2NrcyhzdGF0ZS5ibG9ja3MpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICAgICAgaWYgKHRoaXMuZHJhZ2dlZEJsb2NrSWQpIHsKICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHt0aGlzLmRyYWdnZWRCbG9ja0lkfSJdYCk7CiAgICAgICAgICAgIGlmICh3cmFwcGVyKSB7CiAgICAgICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBhbGxXcmFwcGVycyA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICAgICAgYWxsV3JhcHBlcnMuZm9yRWFjaCgod3JhcHBlcikgPT4gewogICAgICAgICAgICB3cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImRyYWctb3Zlci1iZWZvcmUiLCAiZHJhZy1vdmVyLWFmdGVyIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgICAgICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgICAgICB0aGlzLmRyYWdPdmVyUG9zaXRpb24gPSBudWxsOwogICAgICAgIH0KICAgICAgICBoYW5kbGVEcm9wKGUxMSwgdGFyZ2V0QmxvY2spIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkIHx8IHRoaXMuZHJhZ2dlZEJsb2NrSWQgPT09IHRhcmdldEJsb2NrLmlkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBkcmFnZ2VkSW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSB0YXJnZXRCbG9jay5pZCk7CiAgICAgICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSB8fCB0YXJnZXRJbmRleCA9PT0gLTEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IFtkcmFnZ2VkQmxvY2tdID0gdGhpcy5ibG9ja3Muc3BsaWNlKGRyYWdnZWRJbmRleCwgMSk7CiAgICAgICAgICBsZXQgbmV3SW5kZXggPSB0YXJnZXRJbmRleDsKICAgICAgICAgIGlmICh0aGlzLmRyYWdPdmVyUG9zaXRpb24gPT09ICJhZnRlciIpIHsKICAgICAgICAgICAgbmV3SW5kZXggPSBkcmFnZ2VkSW5kZXggPCB0YXJnZXRJbmRleCA/IHRhcmdldEluZGV4IDogdGFyZ2V0SW5kZXggKyAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3SW5kZXggPSBkcmFnZ2VkSW5kZXggPCB0YXJnZXRJbmRleCA/IHRhcmdldEluZGV4IC0gMSA6IHRhcmdldEluZGV4OwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ibG9ja3Muc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkQmxvY2spOwogICAgICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBtb3ZlZEJsb2NrRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtkcmFnZ2VkQmxvY2suaWR9Il0gLmJsb2NrYCk7CiAgICAgICAgICAgIGlmIChtb3ZlZEJsb2NrRWxlbWVudCAmJiBkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICAgICAgbW92ZWRCbG9ja0VsZW1lbnQuZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlVGV4dFNlbGVjdGlvbihfZSkgewogICAgICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpIHsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAodGhpcy5zaGFkb3dSb290KQogICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICAgICAgYmxvY2tXcmFwcGVycz8uZm9yRWFjaCgod3JhcHBlcikgPT4gewogICAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudD8uc2hhZG93Um9vdCkgewogICAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgY29vcmRzID0gV3lzaXd5Z0Zvcm1hdHRpbmcuZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKGNvb3JkcykgewogICAgICAgICAgICB0aGlzLmZvcm1hdHRpbmdNZW51LnNob3coeyB4OiBjb29yZHMueCwgeTogY29vcmRzLnkgfSwgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGlkZUZvcm1hdHRpbmdNZW51KCkgewogICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIH0KICAgICAgICBhc3luYyBhcHBseUZvcm1hdChjb21tYW5kKSB7CiAgICAgICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVycyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLmJsb2NrLXdyYXBwZXIiKTsKICAgICAgICAgIGJsb2NrV3JhcHBlcnM/LmZvckVhY2goKHdyYXBwZXIpID0+IHsKICAgICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgICBpZiAoYmxvY2tDb21wb25lbnQ/LnNoYWRvd1Jvb3QpIHsKICAgICAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBsZXQgdGFyZ2V0QmxvY2s7CiAgICAgICAgICBsZXQgdGFyZ2V0QmxvY2tDb21wb25lbnQ7CiAgICAgICAgICBjb25zdCB3cmFwcGVycyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgd3JhcHBlcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gd3JhcHBlcnNbaTExXTsKICAgICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgICBpZiAoYmxvY2tDb21wb25lbnQ/LnNoYWRvd1Jvb3QpIHsKICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICAgICAgaWYgKGJsb2NrICYmIChibG9jay5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSB8fCBibG9jay5jb250YWlucyhzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcikpKSB7CiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gd3JhcHBlci5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgICAgICAgICAgICAgIHRhcmdldEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgICAgIHRhcmdldEJsb2NrQ29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGFyZ2V0QmxvY2sgfHwgIXRhcmdldEJsb2NrQ29tcG9uZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gImxpbmsiKSB7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMuc2hvd0xpbmtEaWFsb2coKTsKICAgICAgICAgICAgaWYgKCF1cmwpIHsKICAgICAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBXeXNpd3lnRm9ybWF0dGluZy5hcHBseUZvcm1hdChjb21tYW5kLCB1cmwsIHJhbmdlMiwgc2hhZG93Um9vdHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgV3lzaXd5Z0Zvcm1hdHRpbmcuYXBwbHlGb3JtYXQoY29tbWFuZCwgdm9pZCAwLCByYW5nZTIsIHNoYWRvd1Jvb3RzKTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMTApKTsKICAgICAgICAgIHRhcmdldEJsb2NrLmNvbnRlbnQgPSB0YXJnZXRCbG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgaWYgKGNvbW1hbmQgPT09ICJsaW5rIikgewogICAgICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgc2hvd0xpbmtEaWFsb2coKSB7CiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICAgIGxldCBsaW5rVXJsID0gbnVsbDsKICAgICAgICAgICAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICAgIGhlYWRpbmc6ICJBZGQgTGluayIsCiAgICAgICAgICAgICAgY29udGVudDogdTNgCiAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5saW5rLWlucHV0IHsKICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1kZWVzLWNvbG9yLWxpbmUtYnJpZ2h0KTsKICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGVlcy1jb2xvci1pbnB1dCk7CiAgICAgICAgICAgICAgY29sb3I6IHZhcigtLWRlZXMtY29sb3ItdGV4dCk7CiAgICAgICAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmxpbmstaW5wdXQ6Zm9jdXMgewogICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1kZWVzLWNvbG9yLXByaW1hcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgPGlucHV0IAogICAgICAgICAgICBjbGFzcz0ibGluay1pbnB1dCIgCiAgICAgICAgICAgIHR5cGU9InVybCIgCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwczovL2V4YW1wbGUuY29tIiAKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICAgICAgICBsaW5rVXJsID0gaW5wdXQudmFsdWU7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsID0gaW5wdXQuY2xvc2VzdCgiZGVlcy1tb2RhbCIpOwogICAgICAgICAgICAgICAgICBpZiAobW9kYWwpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBva0J1dHRvbiA9IG1vZGFsLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ib3R0b21CdXR0b246bGFzdC1jaGlsZCIpOwogICAgICAgICAgICAgICAgICAgIGlmIChva0J1dHRvbikKICAgICAgICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9fSIKICAgICAgICAgICAgQGlucHV0PSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgICAgIGxpbmtVcmwgPSBlMTEudGFyZ2V0LnZhbHVlOwogICAgICAgICAgICAgIH19IgogICAgICAgICAgLz4KICAgICAgICBgLAogICAgICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIobGlua1VybCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwgLmxpbmstaW5wdXQiKTsKICAgICAgICAgICAgICBpZiAoaW5wdXQpIHsKICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFVuZG8gdGhlIGxhc3QgYWN0aW9uCiAgICAgICAgICovCiAgICAgICAgdW5kbygpIHsKICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5oaXN0b3J5LnVuZG8oKTsKICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlZG8gdGhlIG5leHQgYWN0aW9uCiAgICAgICAgICovCiAgICAgICAgcmVkbygpIHsKICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5oaXN0b3J5LnJlZG8oKTsKICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlc3RvcmUgZWRpdG9yIHN0YXRlIGZyb20gaGlzdG9yeQogICAgICAgICAqLwogICAgICAgIHJlc3RvcmVTdGF0ZShzdGF0ZSkgewogICAgICAgICAgdGhpcy5ibG9ja3MgPSBzdGF0ZS5ibG9ja3M7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQmxvY2tJZCA9IHN0YXRlLnNlbGVjdGVkQmxvY2tJZDsKICAgICAgICAgIHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICAgICAgaWYgKHN0YXRlLmN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7c3RhdGUuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApOwogICAgICAgICAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihzdGF0ZS5jdXJzb3JQb3NpdGlvbi5vZmZzZXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5ibG9ja09wZXJhdGlvbnMuZm9jdXNCbG9jayhzdGF0ZS5zZWxlY3RlZEJsb2NrSWQpOwogICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBoaXN0b3J5IHdpdGggY3Vyc29yIHBvc2l0aW9uCiAgICAgICAgICovCiAgICAgICAgc2F2ZVRvSGlzdG9yeShkZWJvdW5jZTQgPSB0cnVlKSB7CiAgICAgICAgICBsZXQgY3Vyc29yUG9zaXRpb247CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHt0aGlzLnNlbGVjdGVkQmxvY2tJZH0iXWApOwogICAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiB0eXBlb2YgYmxvY2tDb21wb25lbnQuZ2V0Q3Vyc29yUG9zaXRpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgICAgICAgICBpZiAoZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBibG9ja0NvbXBvbmVudC5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbiA9IHsKICAgICAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgICAgICAgICAgICAgICBvZmZzZXQKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWJvdW5jZTQpIHsKICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5zYXZlQ2hlY2twb2ludCh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbnB1dFd5c2l3eWcyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcuanMKdmFyIGluaXRfZGVlc19pbnB1dF93eXNpd3lnMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5qcyIoKSB7CiAgICBpbml0X2RlZXNfaW5wdXRfd3lzaXd5ZzIoKTsKICAgIGluaXRfZGVlc19pbnB1dF93eXNpd3lnKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9wcm9maWxlcGljdHVyZS5jcm9wcGVyLmpzCnZhciBJbWFnZUNyb3BwZXI7CnZhciBpbml0X3Byb2ZpbGVwaWN0dXJlX2Nyb3BwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9wcm9maWxlcGljdHVyZS5jcm9wcGVyLmpzIigpIHsKICAgIEltYWdlQ3JvcHBlciA9IGNsYXNzIHsKICAgICAgb3B0aW9uczsKICAgICAgY2FudmFzOwogICAgICBjdHg7CiAgICAgIGltZzsKICAgICAgb3ZlcmxheUNhbnZhczsKICAgICAgb3ZlcmxheUN0eDsKICAgICAgLy8gQ3JvcCBhcmVhIHByb3BlcnRpZXMKICAgICAgY3JvcFggPSAwOwogICAgICBjcm9wWSA9IDA7CiAgICAgIGNyb3BTaXplID0gMjAwOwogICAgICBtaW5Dcm9wU2l6ZSA9IDUwOwogICAgICAvLyBJbnRlcmFjdGlvbiBzdGF0ZQogICAgICBpc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTsKICAgICAgZHJhZ1N0YXJ0WCA9IDA7CiAgICAgIGRyYWdTdGFydFkgPSAwOwogICAgICByZXNpemVIYW5kbGUgPSAiIjsKICAgICAgLy8gSW1hZ2UgcHJvcGVydGllcwogICAgICBpbWFnZVNjYWxlID0gMTsKICAgICAgaW1hZ2VPZmZzZXRYID0gMDsKICAgICAgaW1hZ2VPZmZzZXRZID0gMDsKICAgICAgY29uc3RydWN0b3Iob3B0aW9ucykgewogICAgICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgICAgIG1pblNpemU6IDUwLAogICAgICAgICAgb3V0cHV0U2l6ZTogODAwLAogICAgICAgICAgLy8gSGlnaGVyIGRlZmF1bHQgcmVzb2x1dGlvbgogICAgICAgICAgb3V0cHV0UXVhbGl0eTogMC45NSwKICAgICAgICAgIC8vIEhpZ2hlciBxdWFsaXR5CiAgICAgICAgICAuLi5vcHRpb25zCiAgICAgICAgfTsKICAgICAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICB0aGlzLm92ZXJsYXlDdHggPSB0aGlzLm92ZXJsYXlDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpOwogICAgICB9CiAgICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW1hZ2UoKTsKICAgICAgICB0aGlzLnNldHVwQ2FudmFzZXMoKTsKICAgICAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICB9CiAgICAgIGFzeW5jIGxvYWRJbWFnZSgpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgICAgIHRoaXMuaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUyKCk7CiAgICAgICAgICB0aGlzLmltZy5vbmVycm9yID0gcmVqZWN0OwogICAgICAgICAgdGhpcy5pbWcuc3JjID0gdGhpcy5vcHRpb25zLmltYWdlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHNldHVwQ2FudmFzZXMoKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjsKICAgICAgICBjb25zdCBjb250YWluZXJTaXplID0gTWF0aC5taW4oY29udGFpbmVyLmNsaWVudFdpZHRoLCBjb250YWluZXIuY2xpZW50SGVpZ2h0KTsKICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gY29udGFpbmVyU2l6ZTsKICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCA9IGNvbnRhaW5lclNpemU7CiAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUudG9wID0gIjAiOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5jdXJzb3IgPSAibW92ZSI7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTsKICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGF5Q2FudmFzKTsKICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKGNvbnRhaW5lclNpemUgLyB0aGlzLmltZy53aWR0aCwgY29udGFpbmVyU2l6ZSAvIHRoaXMuaW1nLmhlaWdodCk7CiAgICAgICAgdGhpcy5pbWFnZVNjYWxlID0gc2NhbGU7CiAgICAgICAgdGhpcy5pbWFnZU9mZnNldFggPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuaW1nLndpZHRoICogc2NhbGUpIC8gMjsKICAgICAgICB0aGlzLmltYWdlT2Zmc2V0WSA9IChjb250YWluZXJTaXplIC0gdGhpcy5pbWcuaGVpZ2h0ICogc2NhbGUpIC8gMjsKICAgICAgICBjb25zdCBzY2FsZWRJbWFnZVdpZHRoID0gdGhpcy5pbWcud2lkdGggKiBzY2FsZTsKICAgICAgICBjb25zdCBzY2FsZWRJbWFnZUhlaWdodCA9IHRoaXMuaW1nLmhlaWdodCAqIHNjYWxlOwogICAgICAgIGNvbnN0IG1heENyb3BTaXplID0gTWF0aC5taW4oc2NhbGVkSW1hZ2VXaWR0aCwgc2NhbGVkSW1hZ2VIZWlnaHQsIGNvbnRhaW5lclNpemUgKiAwLjgpOwogICAgICAgIHRoaXMuY3JvcFNpemUgPSBtYXhDcm9wU2l6ZSAqIDAuODsKICAgICAgICB0aGlzLmNyb3BYID0gKGNvbnRhaW5lclNpemUgLSB0aGlzLmNyb3BTaXplKSAvIDI7CiAgICAgICAgdGhpcy5jcm9wWSA9IChjb250YWluZXJTaXplIC0gdGhpcy5jcm9wU2l6ZSkgLyAyOwogICAgICB9CiAgICAgIHNldHVwRXZlbnRMaXN0ZW5lcnMoKSB7CiAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuaGFuZGxlTW91c2VEb3duLmJpbmQodGhpcykpOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlTW91c2VVcC5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHRoaXMuaGFuZGxlTW91c2VVcC5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdGhpcy5oYW5kbGVUb3VjaE1vdmUuYmluZCh0aGlzKSk7CiAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdGhpcy5oYW5kbGVUb3VjaEVuZC5iaW5kKHRoaXMpKTsKICAgICAgfQogICAgICBoYW5kbGVNb3VzZURvd24oZTExKSB7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3ZlcmxheUNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB4NCA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICAgICAgY29uc3QgeTQgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgICAgICBjb25zdCBoYW5kbGUzID0gdGhpcy5nZXRSZXNpemVIYW5kbGUoeDQsIHk0KTsKICAgICAgICBpZiAoaGFuZGxlMykgewogICAgICAgICAgdGhpcy5pc1Jlc2l6aW5nID0gdHJ1ZTsKICAgICAgICAgIHRoaXMucmVzaXplSGFuZGxlID0gaGFuZGxlMzsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVDcm9wQXJlYSh4NCwgeTQpKSB7CiAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICAgIH0KICAgICAgICB0aGlzLmRyYWdTdGFydFggPSB4NDsKICAgICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NDsKICAgICAgfQogICAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3ZlcmxheUNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB4NCA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICAgICAgY29uc3QgeTQgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgICAgICBjb25zdCBoYW5kbGUzID0gdGhpcy5nZXRSZXNpemVIYW5kbGUoeDQsIHk0KTsKICAgICAgICBpZiAoaGFuZGxlMykgewogICAgICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luc2lkZUNyb3BBcmVhKHg0LCB5NCkpIHsKICAgICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5jdXJzb3IgPSAibW92ZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5jdXJzb3IgPSAiZGVmYXVsdCI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHsKICAgICAgICAgIGNvbnN0IGR4ID0geDQgLSB0aGlzLmRyYWdTdGFydFg7CiAgICAgICAgICBjb25zdCBkeSA9IHk0IC0gdGhpcy5kcmFnU3RhcnRZOwogICAgICAgICAgY29uc3QgbWluWCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgICAgICAgY29uc3QgbWF4WCA9IHRoaXMuaW1hZ2VPZmZzZXRYICsgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgICAgY29uc3QgbWluWSA9IHRoaXMuaW1hZ2VPZmZzZXRZOwogICAgICAgICAgY29uc3QgbWF4WSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgICAgIHRoaXMuY3JvcFggPSBNYXRoLm1heChtaW5YLCBNYXRoLm1pbihtYXhYLCB0aGlzLmNyb3BYICsgZHgpKTsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBNYXRoLm1heChtaW5ZLCBNYXRoLm1pbihtYXhZLCB0aGlzLmNyb3BZICsgZHkpKTsKICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IHg0OwogICAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0geTQ7CiAgICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5pc1Jlc2l6aW5nKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVJlc2l6ZSh4NCwgeTQpOwogICAgICAgICAgdGhpcy5kcmFnU3RhcnRYID0geDQ7CiAgICAgICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NDsKICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGhhbmRsZU1vdXNlVXAoKSB7CiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5yZXNpemVIYW5kbGUgPSAiIjsKICAgICAgfQogICAgICBoYW5kbGVUb3VjaFN0YXJ0KGUxMSkgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IHRvdWNoID0gZTExLnRvdWNoZXNbMF07CiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCJtb3VzZWRvd24iLCB7CiAgICAgICAgICBjbGllbnRYOiB0b3VjaC5jbGllbnRYLAogICAgICAgICAgY2xpZW50WTogdG91Y2guY2xpZW50WQogICAgICAgIH0pOwogICAgICAgIHRoaXMuaGFuZGxlTW91c2VEb3duKG1vdXNlRXZlbnQpOwogICAgICB9CiAgICAgIGhhbmRsZVRvdWNoTW92ZShlMTEpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCB0b3VjaCA9IGUxMS50b3VjaGVzWzBdOwogICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudCgibW91c2Vtb3ZlIiwgewogICAgICAgICAgY2xpZW50WDogdG91Y2guY2xpZW50WCwKICAgICAgICAgIGNsaWVudFk6IHRvdWNoLmNsaWVudFkKICAgICAgICB9KTsKICAgICAgICB0aGlzLmhhbmRsZU1vdXNlTW92ZShtb3VzZUV2ZW50KTsKICAgICAgfQogICAgICBoYW5kbGVUb3VjaEVuZChlMTEpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhhbmRsZU1vdXNlVXAoKTsKICAgICAgfQogICAgICBnZXRSZXNpemVIYW5kbGUoeDQsIHk0KSB7CiAgICAgICAgY29uc3QgaGFuZGxlU2l6ZSA9IDIwOwogICAgICAgIGNvbnN0IGhhbmRsZXMgPSB7CiAgICAgICAgICAibnciOiB7IHg6IHRoaXMuY3JvcFgsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgICAgICJuZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgICAgICJzdyI6IHsgeDogdGhpcy5jcm9wWCwgeTogdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemUgfSwKICAgICAgICAgICJzZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIH0KICAgICAgICB9OwogICAgICAgIGZvciAoY29uc3QgW2tleTIsIHBvc10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcykpIHsKICAgICAgICAgIGlmIChNYXRoLmFicyh4NCAtIHBvcy54KSA8IGhhbmRsZVNpemUgJiYgTWF0aC5hYnMoeTQgLSBwb3MueSkgPCBoYW5kbGVTaXplKSB7CiAgICAgICAgICAgIHJldHVybiBrZXkyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gIiI7CiAgICAgIH0KICAgICAgZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpIHsKICAgICAgICBjb25zdCBjdXJzb3JzID0gewogICAgICAgICAgIm53IjogIm53LXJlc2l6ZSIsCiAgICAgICAgICAibmUiOiAibmUtcmVzaXplIiwKICAgICAgICAgICJzdyI6ICJzdy1yZXNpemUiLAogICAgICAgICAgInNlIjogInNlLXJlc2l6ZSIKICAgICAgICB9OwogICAgICAgIHJldHVybiBjdXJzb3JzW2hhbmRsZTNdIHx8ICJkZWZhdWx0IjsKICAgICAgfQogICAgICBpc0luc2lkZUNyb3BBcmVhKHg0LCB5NCkgewogICAgICAgIHJldHVybiB4NCA+PSB0aGlzLmNyb3BYICYmIHg0IDw9IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplICYmIHk0ID49IHRoaXMuY3JvcFkgJiYgeTQgPD0gdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemU7CiAgICAgIH0KICAgICAgaGFuZGxlUmVzaXplKHg0LCB5NCkgewogICAgICAgIGNvbnN0IGR4ID0geDQgLSB0aGlzLmRyYWdTdGFydFg7CiAgICAgICAgY29uc3QgZHkgPSB5NCAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgICBjb25zdCBpbWdMZWZ0ID0gdGhpcy5pbWFnZU9mZnNldFg7CiAgICAgICAgY29uc3QgaW1nVG9wID0gdGhpcy5pbWFnZU9mZnNldFk7CiAgICAgICAgY29uc3QgaW1nUmlnaHQgPSB0aGlzLmltYWdlT2Zmc2V0WCArIHRoaXMuaW1nLndpZHRoICogdGhpcy5pbWFnZVNjYWxlOwogICAgICAgIGNvbnN0IGltZ0JvdHRvbSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlOwogICAgICAgIHN3aXRjaCAodGhpcy5yZXNpemVIYW5kbGUpIHsKICAgICAgICAgIGNhc2UgInNlIjoKICAgICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIE1hdGgubWluKHRoaXMuY3JvcFNpemUgKyBNYXRoLm1heChkeCwgZHkpLCBNYXRoLm1pbihpbWdSaWdodCAtIHRoaXMuY3JvcFgsIGltZ0JvdHRvbSAtIHRoaXMuY3JvcFkpKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibnciOgogICAgICAgICAgICBjb25zdCBuZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSAtIE1hdGgubWF4KGR4LCBkeSkpOwogICAgICAgICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMuY3JvcFNpemUgLSBuZXdTaXplOwogICAgICAgICAgICBjb25zdCBuZXdYID0gdGhpcy5jcm9wWCArIHNpemVEaWZmOwogICAgICAgICAgICBjb25zdCBuZXdZID0gdGhpcy5jcm9wWSArIHNpemVEaWZmOwogICAgICAgICAgICBpZiAobmV3WCA+PSBpbWdMZWZ0ICYmIG5ld1kgPj0gaW1nVG9wKSB7CiAgICAgICAgICAgICAgdGhpcy5jcm9wWCA9IG5ld1g7CiAgICAgICAgICAgICAgdGhpcy5jcm9wWSA9IG5ld1k7CiAgICAgICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJuZSI6CiAgICAgICAgICAgIGNvbnN0IG5lU2l6ZUR4ID0gTWF0aC5tYXgoZHgsIC1keSk7CiAgICAgICAgICAgIGNvbnN0IG5lTmV3U2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIHRoaXMuY3JvcFNpemUgKyBuZVNpemVEeCk7CiAgICAgICAgICAgIGNvbnN0IG5lU2l6ZURpZmYgPSBuZU5ld1NpemUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgICAgICBjb25zdCBuZU5ld1kgPSB0aGlzLmNyb3BZIC0gbmVTaXplRGlmZjsKICAgICAgICAgICAgaWYgKG5lTmV3WSA+PSBpbWdUb3AgJiYgdGhpcy5jcm9wWCArIG5lTmV3U2l6ZSA8PSBpbWdSaWdodCkgewogICAgICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZU5ld1k7CiAgICAgICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5lTmV3U2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInN3IjoKICAgICAgICAgICAgY29uc3Qgc3dTaXplRHggPSBNYXRoLm1heCgtZHgsIGR5KTsKICAgICAgICAgICAgY29uc3Qgc3dOZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSArIHN3U2l6ZUR4KTsKICAgICAgICAgICAgY29uc3Qgc3dTaXplRGlmZiA9IHN3TmV3U2l6ZSAtIHRoaXMuY3JvcFNpemU7CiAgICAgICAgICAgIGNvbnN0IHN3TmV3WCA9IHRoaXMuY3JvcFggLSBzd1NpemVEaWZmOwogICAgICAgICAgICBpZiAoc3dOZXdYID49IGltZ0xlZnQgJiYgdGhpcy5jcm9wWSArIHN3TmV3U2l6ZSA8PSBpbWdCb3R0b20pIHsKICAgICAgICAgICAgICB0aGlzLmNyb3BYID0gc3dOZXdYOwogICAgICAgICAgICAgIHRoaXMuY3JvcFNpemUgPSBzd05ld1NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlbmRlcigpIHsKICAgICAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7CiAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICIjMDAwMDAwIjsKICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTsKICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHRoaXMuaW1hZ2VPZmZzZXRYLCB0aGlzLmltYWdlT2Zmc2V0WSwgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUsIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZSk7CiAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZSA9ICJyZ2JhKDAsIDAsIDAsIDAuNSkiOwogICAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsUmVjdCh0aGlzLmltYWdlT2Zmc2V0WCwgdGhpcy5pbWFnZU9mZnNldFksIHRoaXMuaW1nLndpZHRoICogdGhpcy5pbWFnZVNjYWxlLCB0aGlzLmltZy5oZWlnaHQgKiB0aGlzLmltYWdlU2NhbGUpOwogICAgICAgIHRoaXMub3ZlcmxheUN0eC5zYXZlKCk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyh0aGlzLmNyb3BYICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wU2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgIHRoaXMub3ZlcmxheUN0eC5jbGlwKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgIHRoaXMub3ZlcmxheUN0eC5yZWN0KHRoaXMuY3JvcFgsIHRoaXMuY3JvcFksIHRoaXMuY3JvcFNpemUsIHRoaXMuY3JvcFNpemUpOwogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsaXAoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgICAgIHRoaXMub3ZlcmxheUN0eC5yZXN0b3JlKCk7CiAgICAgICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZVN0eWxlID0gIndoaXRlIjsKICAgICAgICB0aGlzLm92ZXJsYXlDdHgubGluZVdpZHRoID0gMjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgICAgICB0aGlzLm92ZXJsYXlDdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICB0aGlzLm92ZXJsYXlDdHguYXJjKHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemUgLyAyLCB0aGlzLmNyb3BTaXplIC8gMiwgMCwgTWF0aC5QSSAqIDIpOwogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLm92ZXJsYXlDdHguc3Ryb2tlUmVjdCh0aGlzLmNyb3BYLCB0aGlzLmNyb3BZLCB0aGlzLmNyb3BTaXplLCB0aGlzLmNyb3BTaXplKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kcmF3UmVzaXplSGFuZGxlcygpOwogICAgICB9CiAgICAgIGRyYXdSZXNpemVIYW5kbGVzKCkgewogICAgICAgIGNvbnN0IGhhbmRsZVNpemUgPSA4OwogICAgICAgIGNvbnN0IGhhbmRsZXMgPSBbCiAgICAgICAgICB7IHg6IHRoaXMuY3JvcFgsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgICAgIHsgeDogdGhpcy5jcm9wWCwgeTogdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemUgfSwKICAgICAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIH0KICAgICAgICBdOwogICAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsU3R5bGUgPSAid2hpdGUiOwogICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlMykgPT4gewogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyhoYW5kbGUzLngsIGhhbmRsZTMueSwgaGFuZGxlU2l6ZSwgMCwgTWF0aC5QSSAqIDIpOwogICAgICAgICAgdGhpcy5vdmVybGF5Q3R4LmZpbGwoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhc3luYyBnZXRDcm9wcGVkSW1hZ2UoKSB7CiAgICAgICAgY29uc3QgY3JvcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgIGNvbnN0IGNyb3BDdHggPSBjcm9wQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gdGhpcy5pbWFnZVNjYWxlOwogICAgICAgIGNvbnN0IG9yaWdpbmFsQ3JvcFNpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IHRoaXMub3B0aW9ucy5vdXRwdXRTaXplOwogICAgICAgIGlmIChvdXRwdXRTaXplID4gb3JpZ2luYWxDcm9wU2l6ZSkgewogICAgICAgICAgY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChvcmlnaW5hbENyb3BTaXplKX1weCB0byAke291dHB1dFNpemV9cHhgKTsKICAgICAgICB9CiAgICAgICAgY3JvcENhbnZhcy53aWR0aCA9IG91dHB1dFNpemU7CiAgICAgICAgY3JvcENhbnZhcy5oZWlnaHQgPSBvdXRwdXRTaXplOwogICAgICAgIGNvbnN0IHN4ID0gKHRoaXMuY3JvcFggLSB0aGlzLmltYWdlT2Zmc2V0WCkgKiBzY2FsZTsKICAgICAgICBjb25zdCBzeSA9ICh0aGlzLmNyb3BZIC0gdGhpcy5pbWFnZU9mZnNldFkpICogc2NhbGU7CiAgICAgICAgY29uc3Qgc1NpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICAgICAgY3JvcEN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgIGNyb3BDdHguYXJjKG91dHB1dFNpemUgLyAyLCBvdXRwdXRTaXplIC8gMiwgb3V0cHV0U2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgIGNyb3BDdHguY2xpcCgpOwogICAgICAgIH0KICAgICAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAgY3JvcEN0eC5pbWFnZVNtb290aGluZ1F1YWxpdHkgPSAiaGlnaCI7CiAgICAgICAgY3JvcEN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHN4LCBzeSwgc1NpemUsIHNTaXplLCAwLCAwLCBvdXRwdXRTaXplLCBvdXRwdXRTaXplKTsKICAgICAgICBjb25zdCBpc1BuZyA9IHRoaXMub3B0aW9ucy5pbWFnZS5pbmNsdWRlcygiaW1hZ2UvcG5nIik7CiAgICAgICAgY29uc3QgZm9ybWF0MiA9IGlzUG5nID8gImltYWdlL3BuZyIgOiAiaW1hZ2UvanBlZyI7CiAgICAgICAgcmV0dXJuIGNyb3BDYW52YXMudG9EYXRhVVJMKGZvcm1hdDIsIHRoaXMub3B0aW9ucy5vdXRwdXRRdWFsaXR5KTsKICAgICAgfQogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSgpOwogICAgICAgIHRoaXMub3ZlcmxheUNhbnZhcy5yZW1vdmUoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL3Byb2ZpbGVwaWN0dXJlLm1vZGFsLmpzCnZhciBfX2VzRGVjb3JhdGU2MywgX19ydW5Jbml0aWFsaXplcnM2NCwgUHJvZmlsZVBpY3R1cmVNb2RhbDsKdmFyIGluaXRfcHJvZmlsZXBpY3R1cmVfbW9kYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9wcm9maWxlcGljdHVyZS5tb2RhbC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9jb2xvcnMoKTsKICAgIGluaXRfZm9udHMoKTsKICAgIGluaXRfemluZGV4KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZWVzX2J1dHRvbigpOwogICAgaW5pdF9kZWVzX3dpbmRvd2xheWVyKCk7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICAgIGluaXRfcHJvZmlsZXBpY3R1cmVfY3JvcHBlcigpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM2NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgUHJvZmlsZVBpY3R1cmVNb2RhbCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXByb2ZpbGVwaWN0dXJlLW1vZGFsIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9pbml0aWFsSW1hZ2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbml0aWFsSW1hZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hhcGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaGFwZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaGFwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX291dHB1dFNpemVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9vdXRwdXRTaXplX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vdXRwdXRRdWFsaXR5X2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFN0ZXBfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50U3RlcF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Nyb3BwZWRJbWFnZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Byb2Nlc3NpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1Byb2Nlc3NpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBQcm9maWxlUGljdHVyZU1vZGFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2luaXRpYWxJbWFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zaGFwZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfY3VycmVudFN0ZXBfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc1Byb2Nlc3NpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pbml0aWFsSW1hZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbEltYWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsSW1hZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbEltYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5pdGlhbEltYWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsSW1hZ2VfaW5pdGlhbGl6ZXJzLCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9zaGFwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaGFwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hhcGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hhcGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjModGhpcywgbnVsbCwgX291dHB1dFNpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0U2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0U2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRTaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9vdXRwdXRRdWFsaXR5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFF1YWxpdHkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFF1YWxpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0UXVhbGl0eSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfY3VycmVudFN0ZXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFN0ZXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRTdGVwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRTdGVwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudFN0ZXAgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRTdGVwX2luaXRpYWxpemVycywgX2N1cnJlbnRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3JvcHBlZEltYWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjcm9wcGVkSW1hZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3JvcHBlZEltYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3JvcHBlZEltYWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pc1Byb2Nlc3NpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNQcm9jZXNzaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc1Byb2Nlc3NpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQcm9jZXNzaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNQcm9jZXNzaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1Byb2Nlc3NpbmdfaW5pdGlhbGl6ZXJzLCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTYzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgaW5pdGlhbEltYWdlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2luaXRpYWxJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5pdGlhbEltYWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaW5pdGlhbEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2luaXRpYWxJbWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgICAgIGdldCBzaGFwZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hhcGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIDgwMCkpOwogICAgICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvdXRwdXRTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICAgICAgZ2V0IG91dHB1dFF1YWxpdHkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgb3V0cHV0UXVhbGl0eSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2N1cnJlbnRTdGVwX2luaXRpYWxpemVycywgImNyb3AiKSk7CiAgICAgICAgZ2V0IGN1cnJlbnRTdGVwKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50U3RlcCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjcm9wcGVkSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY0KHRoaXMsIF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGNyb3BwZWRJbWFnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjcm9wcGVkSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNyb3BwZWRJbWFnZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Nyb3BwZWRJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNQcm9jZXNzaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzUHJvY2Vzc2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNQcm9jZXNzaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNyb3BwZXIgPSAoX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgd2luZG93TGF5ZXI7CiAgICAgICAgekluZGV4ID0gMDsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgei1pbmRleDogdmFyKC0tei1pbmRleCk7CiAgICAgIH0KCiAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwYTBhMGEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwgIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjMpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpIHNjYWxlKDAuOTgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uOiBtb2RhbFNob3cgMC4yNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBtb2RhbFNob3cgewogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgxKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tb2RhbC1oZWFkZXIgewogICAgICAgIGhlaWdodDogNTJweDsKICAgICAgICBwYWRkaW5nOiAwIDIwcHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLmNsb3NlLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAxMHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMjBweDsKICAgICAgfQoKICAgICAgLmNyb3BwZXItY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDM2MHB4OwogICAgICAgIGFzcGVjdC1yYXRpbzogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDYpIiwgImluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDE4MHB4OwogICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgYm9yZGVyOiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSkiLCAiMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctaW1hZ2Uucm91bmQgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLnByZXZpZXctaW1hZ2Uuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgICB9CgogICAgICAuc3VjY2Vzcy1tZXNzYWdlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzEwYjk4MSIsICIjMTBiOTgxIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBhbmltYXRpb246IHN1Y2Nlc3NQdWxzZSAwLjRzIGVhc2Utb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHN1Y2Nlc3NQdWxzZSB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7IG9wYWNpdHk6IDA7IH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpOyB9CiAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IG9wYWNpdHk6IDE7IH0KICAgICAgfQoKICAgICAgLm1vZGFsLWZvb3RlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAyNHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5pbnN0cnVjdGlvbnMgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBtYXgtd2lkdGg6IDMyMHB4OwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAubW9kYWwtY29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMzJweCk7CiAgICAgICAgICBtYXJnaW46IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5tb2RhbC1ib2R5IHsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLndpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICBibHVyOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB0aGlzLmNsb3NlKCkpOwogICAgICAgICAgdGhpcy56SW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCItLXotaW5kZXgiLCB0aGlzLnpJbmRleC50b1N0cmluZygpKTsKICAgICAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMuekluZGV4KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgaWYgKHRoaXMuY3JvcHBlcikgewogICAgICAgICAgICB0aGlzLmNyb3BwZXIuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCk7CiAgICAgICAgICB9CiAgICAgICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiID8gIkFkanVzdCBJbWFnZSIgOiAiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPgogICAgICAgICAgICAgIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIHNxdWFyZSB0byBzZWxlY3QgeW91ciBwcm9maWxlIGFyZWEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3BwZXItY29udGFpbmVyIiBpZD0iY3JvcHBlckNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuaXNQcm9jZXNzaW5nID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj5TYXZpbmcuLi48L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1pbWFnZSAke3RoaXMuc2hhcGV9IiAKICAgICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuY3JvcHBlZEltYWdlfSIgCiAgICAgICAgICAgICAgICAgIGFsdD0iQ3JvcHBlZCBwcmV2aWV3IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Y2Nlc3MtbWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZWNrIiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3Bhbj5Mb29raW5nIGdvb2QhPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUNyb3BwZXIoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgaW5pdGlhbGl6ZUNyb3BwZXIoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7CiAgICAgICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5jcm9wcGVyID0gbmV3IEltYWdlQ3JvcHBlcih7CiAgICAgICAgICAgIGNvbnRhaW5lciwKICAgICAgICAgICAgaW1hZ2U6IHRoaXMuaW5pdGlhbEltYWdlLAogICAgICAgICAgICBzaGFwZTogdGhpcy5zaGFwZSwKICAgICAgICAgICAgYXNwZWN0UmF0aW86IDEsCiAgICAgICAgICAgIG91dHB1dFNpemU6IHRoaXMub3V0cHV0U2l6ZSwKICAgICAgICAgICAgb3V0cHV0UXVhbGl0eTogdGhpcy5vdXRwdXRRdWFsaXR5CiAgICAgICAgICB9KTsKICAgICAgICAgIGF3YWl0IHRoaXMuY3JvcHBlci5pbml0aWFsaXplKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUNyb3AoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY3JvcHBlcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gInByZXZpZXciOwogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICBjb25zdCBjcm9wcGVkRGF0YSA9IGF3YWl0IHRoaXMuY3JvcHBlci5nZXRDcm9wcGVkSW1hZ2UoKTsKICAgICAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBjcm9wcGVkRGF0YTsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA4MDApKTsKICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2F2ZSIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsgY3JvcHBlZEltYWdlOiB0aGlzLmNyb3BwZWRJbWFnZSB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgIH0sIDE1MDApOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IiwgZXJyb3IpOwogICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbG9zZSgpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczY0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBQcm9maWxlUGljdHVyZU1vZGFsMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZS5kZW1vLmpzCnZhciBkZW1vRnVuYzQ0Owp2YXIgaW5pdF9kZWVzX2lucHV0X3Byb2ZpbGVwaWN0dXJlX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19wYW5lbCgpOwogICAgaW5pdF9kZWVzX2lucHV0X3Byb2ZpbGVwaWN0dXJlKCk7CiAgICBkZW1vRnVuYzQ0ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgIG1heC1oZWlnaHQ6IDEwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5mZWF0dXJlLWxpc3QgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICB9CiAgICAgIAogICAgICAuZmVhdHVyZS1saXN0IGxpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCByb3VuZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTsKICAgICAgaWYgKHJvdW5kUHJvZmlsZSkgewogICAgICAgIHJvdW5kUHJvZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgIGNvbnNvbGUubG9nKCJSb3VuZCBwcm9maWxlIHBpY3R1cmUgY2hhbmdlZDoiLCB0YXJnZXQudmFsdWU/LnN1YnN0cmluZygwLCA1MCkgKyAiLi4uIik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJvZmlsZSBQaWN0dXJlIElucHV0In0gLnN1YnRpdGxlPSR7IkJhc2ljIHVzYWdlIHdpdGggcm91bmQgYW5kIHNxdWFyZSBzaGFwZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChSb3VuZCkiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDbGljayB0byB1cGxvYWQgb3IgZHJhZyAmIGRyb3AgYW4gaW1hZ2UiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlByb2ZpbGUgUGljdHVyZSAoU3F1YXJlKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlN1cHBvcnRzIEpQRUcsIFBORywgYW5kIFdlYlAgZm9ybWF0cyIKICAgICAgICAgICAgc2hhcGU9InNxdWFyZSIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHByb2ZpbGVzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlIik7CiAgICAgIHByb2ZpbGVzLmZvckVhY2goKHByb2ZpbGUpID0+IHsKICAgICAgICBwcm9maWxlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgY29uc29sZS5sb2coYFByb2ZpbGUgKHNpemUgJHt0YXJnZXQuc2l6ZX0pIGNoYW5nZWRgKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNpemUgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJQcm9maWxlIHBpY3R1cmVzIGluIGRpZmZlcmVudCBzaXplcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJTbWFsbCAoODBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iODAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTWVkaXVtICgxMjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IkxhcmdlICgxNjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTYwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IHNhbXBsZUltYWdlVXJsID0gImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S0lDQThaR1ZtY3o0S0lDQWdJRHhzYVc1bFlYSkhjbUZrYVdWdWRDQnBaRDBpWjNKaFpHbGxiblFpSUhneFBTSXdKU0lnZVRFOUlqQWxJaUI0TWowaU1UQXdKU0lnZVRJOUlqRXdNQ1VpUGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqQWxJaUJ6ZEc5d0xXTnZiRzl5UFNJak5qWTNaV1ZoSWlBdlBnb2dJQ0FnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJakV3TUNVaUlITjBiM0F0WTI5c2IzSTlJaU0zTmpSaVlUSWlJQzgrQ2lBZ0lDQThMMnhwYm1WaGNrZHlZV1JwWlc1MFBnb2dJRHd2WkdWbWN6NEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpZFhKc0tDTm5jbUZrYVdWdWRDa2lJQzgrQ2lBZ1BIUmxlSFFnZUQwaU5UQWxJaUI1UFNJMU1DVWlJR1J2YldsdVlXNTBMV0poYzJWc2FXNWxQU0p0YVdSa2JHVWlJSFJsZUhRdFlXNWphRzl5UFNKdGFXUmtiR1VpSUdadmJuUXRabUZ0YVd4NVBTSkJjbWxoYkNJZ1ptOXVkQzF6YVhwbFBTSTRNQ0lnWm1sc2JEMGlkMmhwZEdVaVBrcEVQQzkwWlhoMFBnbzhMM04yWno0PSI7CiAgICAgIGNvbnN0IHByZWZpbGxlZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtcHJvZmlsZSIpOwogICAgICBpZiAocHJlZmlsbGVkUHJvZmlsZSkgewogICAgICAgIHByZWZpbGxlZFByb2ZpbGUudmFsdWUgPSBzYW1wbGVJbWFnZVVybDsKICAgICAgICBwcmVmaWxsZWRQcm9maWxlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLW91dHB1dCIpOwogICAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSB0YXJnZXQudmFsdWUgPyBgSW1hZ2UgZGF0YTogJHt0YXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIDgwKX0uLi5gIDogIk5vIGltYWdlIHNlbGVjdGVkIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcmUtZmlsbGVkIGFuZCBWYWx1ZSBCaW5kaW5nIn0gLnN1YnRpdGxlPSR7IlByb2ZpbGUgcGljdHVyZSB3aXRoIGluaXRpYWwgdmFsdWUgYW5kIGNoYW5nZSB0cmFja2luZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICBpZD0icHJlZmlsbGVkLXByb2ZpbGUiCiAgICAgICAgICBsYWJlbD0iRWRpdCBFeGlzdGluZyBQcm9maWxlIgogICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRoZSBlZGl0IGJ1dHRvbiB0byBjaGFuZ2Ugb3IgZGVsZXRlIHRvIHJlbW92ZSIKICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgIHNpemU9IjE1MCIKICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9InByZWZpbGxlZC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICBJbWFnZSBkYXRhIHdpbGwgYXBwZWFyIGhlcmUgd2hlbiBjaGFuZ2VkCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkaXNhYmxlZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNkaXNhYmxlZC1wcm9maWxlIik7CiAgICAgIGlmIChkaXNhYmxlZFByb2ZpbGUpIHsKICAgICAgICBkaXNhYmxlZFByb2ZpbGUudmFsdWUgPSAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLSUNBOGNtVmpkQ0IzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdabWxzYkQwaUkyTmpZMk5qWXlJZ0x6NEtJQ0E4ZEdWNGRDQjRQU0kxTUNVaUlIazlJalV3SlNJZ1pHOXRhVzVoYm5RdFltRnpaV3hwYm1VOUltMXBaR1JzWlNJZ2RHVjRkQzFoYm1Ob2IzSTlJbTFwWkdSc1pTSWdabTl1ZEMxbVlXMXBiSGs5SWtGeWFXRnNJaUJtYjI1MExYTnBlbVU5SWpZd0lpQm1hV3hzUFNKM2FHbDBaU0krVGtFOEwzUmxlSFErQ2p3dmMzWm5QZz09IjsKICAgICAgfQogICAgfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJSZXF1aXJlZCBGaWVsZCIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGlkPSJkaXNhYmxlZC1wcm9maWxlIgogICAgICAgICAgICBsYWJlbD0iRGlzYWJsZWQgU3RhdGUiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlLmpzCnZhciBfX2VzRGVjb3JhdGU2NCwgX19ydW5Jbml0aWFsaXplcnM2NSwgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmU7CnZhciBpbml0X2RlZXNfaW5wdXRfcHJvZmlsZXBpY3R1cmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9wcm9maWxlcGljdHVyZS9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfYmFzZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19sYWJlbCgpOwogICAgaW5pdF9wcm9maWxlcGljdHVyZV9tb2RhbCgpOwogICAgaW5pdF9kZWVzX2lucHV0X3Byb2ZpbGVwaWN0dXJlX2RlbW8oKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTY0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgICAgIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NoYXBlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hhcGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FsbG93VXBsb2FkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWxsb3dVcGxvYWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWF4RmlsZVNpemVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYXhGaWxlU2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYXhGaWxlU2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vdXRwdXRTaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzOwogICAgICBsZXQgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzSG92ZXJlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc2hhcGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9hbGxvd1VwbG9hZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfYWxsb3dEZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX21heEZpbGVTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX291dHB1dFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9pc0hvdmVyZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF9zaGFwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaGFwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hhcGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hhcGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX3NpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2FsbG93VXBsb2FkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFsbG93VXBsb2FkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhbGxvd1VwbG9hZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbGxvd1VwbG9hZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFsbG93VXBsb2FkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMsIF9hbGxvd1VwbG9hZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfYWxsb3dEZWxldGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWxsb3dEZWxldGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93RGVsZXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93RGVsZXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWxsb3dEZWxldGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF9tYXhGaWxlU2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhGaWxlU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4RmlsZVNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4RmlsZVNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tYXhGaWxlU2l6ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY2NlcHRlZEZvcm1hdHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjY2VwdGVkRm9ybWF0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY2NlcHRlZEZvcm1hdHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY2NlcHRlZEZvcm1hdHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMsIF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX291dHB1dFNpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0U2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0U2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRTaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF9vdXRwdXRRdWFsaXR5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFF1YWxpdHkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFF1YWxpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0UXVhbGl0eSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfaXNIb3ZlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIb3ZlcmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSG92ZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzSG92ZXJlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0RyYWdnaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzRHJhZ2dpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0RyYWdnaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2lzTG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0xvYWRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0NDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiSW5wdXQiXTsKICAgICAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCB2YWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICAvLyBCYXNlNjQgZW5jb2RlZCBpbWFnZSBvciBVUkwKICAgICAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgICAgIGdldCBzaGFwZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hhcGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfc2l6ZV9pbml0aWFsaXplcnMsIDEyMCkpOwogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGFsbG93VXBsb2FkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FsbG93VXBsb2FkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhbGxvd1VwbG9hZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FsbG93VXBsb2FkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhbGxvd0RlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2FsbG93VXBsb2FkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYWxsb3dEZWxldGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGFsbG93RGVsZXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhbGxvd0RlbGV0ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtYXhGaWxlU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCA1ICogMTAyNCAqIDEwMjQpKTsKICAgICAgICBnZXQgbWF4RmlsZVNpemUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gNU1CCiAgICAgICAgc2V0IG1heEZpbGVTaXplKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX21heEZpbGVTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYWNjZXB0ZWRGb3JtYXRzX2luaXRpYWxpemVycywgWyJpbWFnZS9qcGVnIiwgImltYWdlL3BuZyIsICJpbWFnZS93ZWJwIl0pKTsKICAgICAgICBnZXQgYWNjZXB0ZWRGb3JtYXRzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWNjZXB0ZWRGb3JtYXRzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNvdXRwdXRTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYWNjZXB0ZWRGb3JtYXRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIDgwMCkpOwogICAgICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgLy8gT3V0cHV0IHJlc29sdXRpb24gaW4gcGl4ZWxzCiAgICAgICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvdXRwdXRTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICAgICAgZ2V0IG91dHB1dFF1YWxpdHkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICAvLyAwLTEgcXVhbGl0eSBmb3IgSlBFRwogICAgICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzSG92ZXJlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0hvdmVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzSG92ZXJlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzSG92ZXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2lzRHJhZ2dpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc0RyYWdnaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzRHJhZ2dpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIG1vZGFsSW5zdGFuY2UgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLWNvbnRhaW5lcjpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpemUsIDEyMHB4KTsKICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUsIDEyMHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUucm91bmQgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZS5zcXVhcmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuZHJhZ2dpbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCA0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsICJyZ2JhKDk2LCAxNjUsIDI1MCwgMC4xNSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDgiLCAiIzNmM2Y0NiIpfTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtcGljdHVyZTpkaXNhYmxlZCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLWltYWdlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wbGFjZWhvbGRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLm92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgLm92ZXJsYXkgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAub3ZlcmxheS1idXR0b24gewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkiLCAicmdiYSgzOSwgMzksIDQyLCAwLjk1KSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjM2YzZjQ2Iil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuOSkiLCAicmdiYSgyMjAsIDM4LCAzOCwgMC45KSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uLmRlbGV0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2RjMjYyNiIpfTsKICAgICAgfQoKICAgICAgLmRyb3Atem9uZS10ZXh0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTG9hZGluZyBhbmltYXRpb24gKi8KICAgICAgLmxvYWRpbmctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAubG9hZGluZy1vdmVybGF5LnNob3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuY2xpY2tpbmcgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMC4zcyBlYXNlLW91dDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgCiAgICAgICAgPGRpdiAKICAgICAgICAgIGNsYXNzPSJwcm9maWxlLWNvbnRhaW5lciIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9CiAgICAgICAgICBAZHJhZ292ZXI9JHt0aGlzLmhhbmRsZURyYWdPdmVyfQogICAgICAgICAgQGRyYWdsZWF2ZT0ke3RoaXMuaGFuZGxlRHJhZ0xlYXZlfQogICAgICAgICAgQGRyb3A9JHt0aGlzLmhhbmRsZURyb3B9CiAgICAgICAgICBzdHlsZT0iLS1zaXplOiAke3RoaXMuc2l6ZX1weCIKICAgICAgICA+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9maWxlLXBpY3R1cmUgJHt0aGlzLnNoYXBlfSAke3RoaXMuaXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0gJHt0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy52YWx1ZSA/ICJjbGlja2luZyIgOiAiIn0iPgogICAgICAgICAgICAke3RoaXMudmFsdWUgPyBiMmAKICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJwcm9maWxlLWltYWdlIiBzcmM9IiR7dGhpcy52YWx1ZX0iIGFsdD0iUHJvZmlsZSBwaWN0dXJlIiAvPgogICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0icGxhY2Vob2xkZXItaWNvbiIgaWNvbj0ibHVjaWRlOnVzZXIiIGljb25TaXplPSIke3RoaXMuc2l6ZSAqIDAuNX0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICBgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzRHJhZ2dpbmcgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5IiBzdHlsZT0ib3BhY2l0eTogMSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wLXpvbmUtdGV4dCI+CiAgICAgICAgICAgICAgICAgIERyb3AgaW1hZ2UgaGVyZQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy52YWx1ZSAmJiAhdGhpcy5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93VXBsb2FkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24iIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB0aGlzLm9wZW5Nb2RhbCgpOwogICAgICAgICAgfX0gdGl0bGU9IkNoYW5nZSBwaWN0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOnBlbmNpbCIgaWNvblNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICAke3RoaXMuYWxsb3dEZWxldGUgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJvdmVybGF5LWJ1dHRvbiBkZWxldGUiIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB0aGlzLmRlbGV0ZVBpY3R1cmUoKTsKICAgICAgICAgIH19IHRpdGxlPSJEZWxldGUgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp0cmFzaDIiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nICYmICF0aGlzLnZhbHVlID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5IHNob3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGlucHV0CiAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgY2xhc3M9ImhpZGRlbi1pbnB1dCIKICAgICAgICAgIGFjY2VwdD0iJHt0aGlzLmFjY2VwdGVkRm9ybWF0cy5qb2luKCIsIil9IgogICAgICAgICAgQGNoYW5nZT0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUNsaWNrKCkgewogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuYWxsb3dVcGxvYWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5oaWRkZW4taW5wdXQiKTsKICAgICAgICAgICAgY29uc3QgaGFuZGxlRm9jdXMgPSAoKSA9PiB7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICAgICAgaW5wdXQuY2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlRmlsZVNlbGVjdChldmVudCkgewogICAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICBpZiAoZmlsZSkgewogICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpOwogICAgICAgICAgfQogICAgICAgICAgaW5wdXQudmFsdWUgPSAiIjsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRHJhZ092ZXIoZXZlbnQpIHsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5hbGxvd1VwbG9hZCkgewogICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVEcmFnTGVhdmUoKSB7CiAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRHJvcChldmVudCkgewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuYWxsb3dVcGxvYWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICAgICAgaWYgKGZpbGUpIHsKICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgcHJvY2Vzc0ZpbGUoZmlsZSkgewogICAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgZmlsZSB0eXBlOiIsIGZpbGUudHlwZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEZpbGVTaXplKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZpbGUgdG9vIGxhcmdlOiIsIGZpbGUuc2l6ZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBiYXNlNjQyID0gZTExLnRhcmdldD8ucmVzdWx0OwogICAgICAgICAgICBhd2FpdCB0aGlzLm9wZW5Nb2RhbChiYXNlNjQyKTsKICAgICAgICAgIH07CiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgb3Blbk1vZGFsKGluaXRpYWxJbWFnZSkgewogICAgICAgICAgY29uc3QgaW1hZ2VUb0VkaXQgPSBpbml0aWFsSW1hZ2UgfHwgdGhpcy52YWx1ZTsKICAgICAgICAgIGlmICghaW1hZ2VUb0VkaXQpIHsKICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpOwogICAgICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UgPSBuZXcgUHJvZmlsZVBpY3R1cmVNb2RhbCgpOwogICAgICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLnNoYXBlID0gdGhpcy5zaGFwZTsKICAgICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbml0aWFsSW1hZ2UgPSBpbWFnZVRvRWRpdDsKICAgICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRTaXplID0gdGhpcy5vdXRwdXRTaXplOwogICAgICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLm91dHB1dFF1YWxpdHkgPSB0aGlzLm91dHB1dFF1YWxpdHk7CiAgICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcigic2F2ZSIsIChldmVudCkgPT4gewogICAgICAgICAgICB0aGlzLnZhbHVlID0gZXZlbnQuZGV0YWlsLmNyb3BwZWRJbWFnZTsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5tb2RhbEluc3RhbmNlKTsKICAgICAgICB9CiAgICAgICAgZGVsZXRlUGljdHVyZSgpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBnZXRWYWx1ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczY1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzSW5wdXRQcm9maWxlUGljdHVyZTIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2luZGV4LmpzCnZhciBpbml0X2dyb3VwX2lucHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2lucHV0X2Jhc2UyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfY2hlY2tib3gyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfY29kZTIoKTsKICAgIGluaXRfZGVlc19pbnB1dF9kYXRlcGlja2VyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfZHJvcGRvd24yKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfZmlsZXVwbG9hZCgpOwogICAgaW5pdF9kZWVzX2lucHV0X2liYW4yKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfbGlzdDIoKTsKICAgIGluaXRfZGVlc19pbnB1dF9tdWx0aXRvZ2dsZTIoKTsKICAgIGluaXRfZGVlc19pbnB1dF9waG9uZTIoKTsKICAgIGluaXRfZGVlc19pbnB1dF9xdWFudGl0eXNlbGVjdG9yMigpOwogICAgaW5pdF9kZWVzX2lucHV0X3JhZGlvZ3JvdXAyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfcmljaHRleHQoKTsKICAgIGluaXRfZGVlc19pbnB1dF9zZWFyY2hzZWxlY3QyKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdGFnczIoKTsKICAgIGluaXRfZGVlc19pbnB1dF90ZXh0MigpOwogICAgaW5pdF9kZWVzX2lucHV0X3RvZ2dsZTIoKTsKICAgIGluaXRfZGVlc19pbnB1dF90eXBlbGlzdDIoKTsKICAgIGluaXRfZGVlc19pbnB1dF93eXNpd3lnMygpOwogICAgaW5pdF9kZWVzX2lucHV0X3Byb2ZpbGVwaWN0dXJlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1jaGlwcy9kZWVzLWNoaXBzLmRlbW8uanMKdmFyIGRlbW9GdW5jNDU7CnZhciBpbml0X2RlZXNfY2hpcHNfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWNoaXBzL2RlZXMtY2hpcHMuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmM0NSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vQ29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgIH0KICAgIAogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIH0KICAgIAogICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtb0NvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Tm9uLVNlbGVjdGFibGUgQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QmFzaWMgY2hpcHMgd2l0aG91dCBzZWxlY3Rpb24gY2FwYWJpbGl0eS4gVXNlIGZvciBkaXNwbGF5LW9ubHkgdGFncy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJub25lIgogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgICAgIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgICAgIHsga2V5OiAidGllciIsIHZhbHVlOiAiUHJlbWl1bSIgfSwKICAgICAgeyBrZXk6ICJyZWdpb24iLCB2YWx1ZTogIkVVLVdlc3QiIH0sCiAgICAgIHsga2V5OiAidHlwZSIsIHZhbHVlOiAiRW50ZXJwcmlzZSIgfQogICAgXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U2luZ2xlIFNlbGVjdGlvbiBDaGlwczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DbGljayB0byBzZWxlY3Qgb25lIGNoaXAgYXQgYSB0aW1lLiBVc2VmdWwgZm9yIGZpbHRlcnMgYW5kIG9wdGlvbnMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgICAgIHsga2V5OiAiYWxsIiwgdmFsdWU6ICJBbGwgUHJvamVjdHMiIH0sCiAgICAgIHsga2V5OiAiYWN0aXZlIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgICAgIHsga2V5OiAiYXJjaGl2ZWQiLCB2YWx1ZTogIkFyY2hpdmVkIiB9LAogICAgICB7IGtleTogImRyYWZ0cyIsIHZhbHVlOiAiRHJhZnRzIiB9CiAgICBdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogICAgICB7IGtleTogImpzIiwgdmFsdWU6ICJKYXZhU2NyaXB0IiB9LAogICAgICB7IGtleTogInRzIiwgdmFsdWU6ICJUeXBlU2NyaXB0IiB9LAogICAgICB7IGtleTogInJlYWN0IiwgdmFsdWU6ICJSZWFjdCIgfSwKICAgICAgeyBrZXk6ICJ2dWUiLCB2YWx1ZTogIlZ1ZSIgfSwKICAgICAgeyBrZXk6ICJhbmd1bGFyIiwgdmFsdWU6ICJBbmd1bGFyIiB9LAogICAgICB7IGtleTogIm5vZGUiLCB2YWx1ZTogIk5vZGUuanMiIH0KICAgIF19CiAgICAgID48L2RlZXMtY2hpcHM+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlJlbW92YWJsZSBDaGlwcyB3aXRoIEtleXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q2hpcHMgd2l0aCByZW1vdmUgYnV0dG9ucyBhbmQga2V5LXZhbHVlIHBhaXJzLiBQZXJmZWN0IGZvciBkeW5hbWljIGxpc3RzLjwvZGl2PgogICAgICA8ZGVlcy1jaGlwcwogICAgICAgIHNlbGVjdGlvbk1vZGU9InNpbmdsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgICAgIHsga2V5OiAiZW52IiwgdmFsdWU6ICJQcm9kdWN0aW9uIiB9LAogICAgICB7IGtleTogInZlcnNpb24iLCB2YWx1ZTogIjIuNC4xIiB9LAogICAgICB7IGtleTogImJyYW5jaCIsIHZhbHVlOiAibWFpbiIgfSwKICAgICAgeyBrZXk6ICJhdXRob3IiLCB2YWx1ZTogIkpvaG4gRG9lIiB9CiAgICBdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgICAgIHsga2V5OiAicHJpb3JpdHkiLCB2YWx1ZTogIkhpZ2giIH0sCiAgICAgIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJJbiBQcm9ncmVzcyIgfSwKICAgICAgeyBrZXk6ICJidWciLCB2YWx1ZTogIkJ1ZyIgfSwKICAgICAgeyBrZXk6ICJmZWF0dXJlIiwgdmFsdWU6ICJGZWF0dXJlIiB9LAogICAgICB7IGtleTogInNwcmludCIsIHZhbHVlOiAiU3ByaW50IDIzIiB9LAogICAgICB7IGtleTogImFzc2lnbmVlIiwgdmFsdWU6ICJBbGljZSIgfQogICAgXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5qcwp2YXIgX19lc0RlY29yYXRlNjUsIF9fcnVuSW5pdGlhbGl6ZXJzNjYsIERlZXNDaGlwczsKdmFyIGluaXRfZGVlc19jaGlwcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWNoaXBzL2RlZXMtY2hpcHMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfY2hpcHNfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM2NiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0NoaXBzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hpcHMiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jaGlwc0FyZVJlbW92YWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkQ2hpcF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZENoaXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZENoaXBzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZENoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzQ2hpcHMyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgICAgfSldOwogICAgICAgICAgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3NlbGVjdGVkQ2hpcHNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEFycmF5CiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3Rpb25Nb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3Rpb25Nb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGlvbk1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3Rpb25Nb2RlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjUodGhpcywgbnVsbCwgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNoaXBzQXJlUmVtb3ZhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjaGlwc0FyZVJlbW92YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jaGlwc0FyZVJlbW92YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNoaXBzQXJlUmVtb3ZhYmxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGFibGVDaGlwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0YWJsZUNoaXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGFibGVDaGlwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGFibGVDaGlwcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2VsZWN0ZWRDaGlwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkQ2hpcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRDaGlwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkQ2hpcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkQ2hpcCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZENoaXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZENoaXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkQ2hpcHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3RlZENoaXBzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0NoaXBzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDU7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkxheW91dCJdOwogICAgICAgICNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgInNpbmdsZSIpOwogICAgICAgIGdldCBzZWxlY3Rpb25Nb2RlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjaGlwc0FyZVJlbW92YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NoaXBzQXJlUmVtb3ZhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjaGlwc0FyZVJlbW92YWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NoaXBzQXJlUmVtb3ZhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX3NlbGVjdGFibGVDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IHNlbGVjdGFibGVDaGlwcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGFibGVDaGlwcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGFibGVDaGlwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2VsZWN0YWJsZUNoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBzZWxlY3RlZENoaXAoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZENoaXAodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zZWxlY3RlZENoaXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgc2VsZWN0ZWRDaGlwcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzZWxlY3RlZENoaXBzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRDaGlwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zZWxlY3RlZENoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5jaGlwIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNoaXA6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CgogICAgICAuY2hpcDphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjMjU2M2ViIil9OwogICAgICB9CgogICAgICAuY2hpcEtleSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIHBhZGRpbmc6IDBweCA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCAuY2hpcEtleSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2VmNDQ0NCIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgJHt0aGlzLnNlbGVjdGFibGVDaGlwcy5tYXAoKGNoaXApID0+IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RDaGlwKGNoaXApfQogICAgICAgICAgICAgIGNsYXNzPSJjaGlwICR7dGhpcy5pc1NlbGVjdGVkKGNoaXApID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7Y2hpcC5rZXkgPyBiMmA8ZGl2IGNsYXNzPSJjaGlwS2V5Ij4ke2NoaXAua2V5fTwvZGl2PmAgOiBiMmBgfSAke2NoaXAudmFsdWV9CiAgICAgICAgICAgICAgJHt0aGlzLmNoaXBzQXJlUmVtb3ZhYmxlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KGV2ZW50KSA9PiB7CiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB0aGlzLnJlbW92ZUNoaXAoY2hpcCk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgLmljb249JHsiZmE6eG1hcmsifQogICAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgIH0KICAgICAgICBpc1NlbGVjdGVkKGNoaXApIHsKICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcCA/IHRoaXMuaXNTYW1lQ2hpcCh0aGlzLnNlbGVjdGVkQ2hpcCwgY2hpcCkgOiBmYWxzZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSgoc2VsZWN0ZWQpID0+IHRoaXMuaXNTYW1lQ2hpcChzZWxlY3RlZCwgY2hpcCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpc1NhbWVDaGlwKGNoaXAxLCBjaGlwMikgewogICAgICAgICAgaWYgKGNoaXAxLmtleSAmJiBjaGlwMi5rZXkpIHsKICAgICAgICAgICAgcmV0dXJuIGNoaXAxLmtleSA9PT0gY2hpcDIua2V5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNoaXAxLnZhbHVlID09PSBjaGlwMi52YWx1ZSAmJiBjaGlwMS5rZXkgPT09IGNoaXAyLmtleTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgc2VsZWN0Q2hpcChjaGlwKSB7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAibm9uZSIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gInNpbmdsZSIpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChjaGlwKSkgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IGNoaXA7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoaXBzID0gW2NoaXBdOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpcGxlIikgewogICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGNoaXApKSB7CiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoaXBzID0gdGhpcy5zZWxlY3RlZENoaXBzLmZpbHRlcigoc2VsZWN0ZWQpID0+ICF0aGlzLmlzU2FtZUNoaXAoc2VsZWN0ZWQsIGNoaXApKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbLi4udGhpcy5zZWxlY3RlZENoaXBzLCBjaGlwXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRDaGlwcyk7CiAgICAgICAgfQogICAgICAgIHJlbW92ZUNoaXAoY2hpcFRvUmVtb3ZlKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGFibGVDaGlwcyA9IHRoaXMuc2VsZWN0YWJsZUNoaXBzLmZpbHRlcigoY2hpcCkgPT4gIXRoaXMuaXNTYW1lQ2hpcChjaGlwLCBjaGlwVG9SZW1vdmUpKTsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENoaXAgJiYgdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLCBjaGlwVG9SZW1vdmUpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0NoaXBzMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtY2hpcHMvaW5kZXguanMKdmFyIGluaXRfZGVlc19jaGlwczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1jaGlwcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfY2hpcHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWRhc2hib2FyZGdyaWQvZGVlcy1kYXNoYm9hcmRncmlkLmRlbW8uanMKdmFyIGRlbW9GdW5jNDY7CnZhciBpbml0X2RlZXNfZGFzaGJvYXJkZ3JpZF9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtZGFzaGJvYXJkZ3JpZC9kZWVzLWRhc2hib2FyZGdyaWQuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzX2RlbW90b29scygpOwogICAgZGVtb0Z1bmM0NiA9ICgpID0+IHsKICAgICAgcmV0dXJuIGIyYAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICBjb25zdCBncmlkID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpOwogICAgICAgIGNvbnN0IHNlZWRXaWRnZXRzID0gWwogICAgICAgICAgewogICAgICAgICAgICBpZDogIm1ldHJpY3MxIiwKICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgeTogMCwKICAgICAgICAgICAgdzogMywKICAgICAgICAgICAgaDogMiwKICAgICAgICAgICAgdGl0bGU6ICJSZXZlbnVlIiwKICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXJTaWduIiwKICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDMycHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JDEyNCw1NjM8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzIyYzU1ZTsgZm9udC1zaXplOiAxNHB4OyBtYXJnaW4tdG9wOiA4cHg7Ij7ihpEgMTIuNSUgZnJvbSBsYXN0IG1vbnRoPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgaWQ6ICJtZXRyaWNzMiIsCiAgICAgICAgICAgIHg6IDMsCiAgICAgICAgICAgIHk6IDAsCiAgICAgICAgICAgIHc6IDMsCiAgICAgICAgICAgIGg6IDIsCiAgICAgICAgICAgIHRpdGxlOiAiVXNlcnMiLAogICAgICAgICAgICBpY29uOiAibHVjaWRlOnVzZXJzIiwKICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDMycHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+OCwyMzQ8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzNiODJmNjsgZm9udC1zaXplOiAxNHB4OyBtYXJnaW4tdG9wOiA4cHg7Ij7ihpEgNS4yJSBmcm9tIGxhc3Qgd2VlazwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAiY2hhcnQxIiwKICAgICAgICAgICAgeDogNiwKICAgICAgICAgICAgeTogMCwKICAgICAgICAgICAgdzogNiwKICAgICAgICAgICAgaDogNCwKICAgICAgICAgICAgdGl0bGU6ICJBbmFseXRpY3MiLAogICAgICAgICAgICBpY29uOiAibHVjaWRlOmxpbmVDaGFydCIsCiAgICAgICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgICBncmlkLndpZGdldHMgPSBzZWVkV2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gKHsgLi4ud2lkZ2V0IH0pKTsKICAgICAgICBncmlkLmNlbGxIZWlnaHQgPSA4MDsKICAgICAgICBncmlkLm1hcmdpbiA9IHsgdG9wOiAxMCwgcmlnaHQ6IDEwLCBib3R0b206IDEwLCBsZWZ0OiAxMCB9OwogICAgICAgIGdyaWQuZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTsKICAgICAgICBncmlkLnNob3dHcmlkTGluZXMgPSBmYWxzZTsKICAgICAgICBjb25zdCBiYXNlTGF5b3V0ID0gZ3JpZC5nZXRMYXlvdXQoKS5tYXAoKGl0ZW0pID0+ICh7IC4uLml0ZW0gfSkpOwogICAgICAgIGNvbnN0IG1vYmlsZUxheW91dCA9IGdyaWQud2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiAoewogICAgICAgICAgaWQ6IHdpZGdldC5pZCwKICAgICAgICAgIHg6IDAsCiAgICAgICAgICB5OiBpbmRleDIgPT09IDAgPyAwIDogZ3JpZC53aWRnZXRzLnNsaWNlKDAsIGluZGV4MikucmVkdWNlKChhY2MsIHByZXYpID0+IGFjYyArIHByZXYuaCwgMCksCiAgICAgICAgICB3OiBncmlkLmNvbHVtbnMsCiAgICAgICAgICBoOiB3aWRnZXQuaAogICAgICAgIH0pKTsKICAgICAgICBncmlkLmxheW91dHMgPSB7CiAgICAgICAgICBiYXNlOiBiYXNlTGF5b3V0LAogICAgICAgICAgbW9iaWxlOiBtb2JpbGVMYXlvdXQKICAgICAgICB9OwogICAgICAgIGNvbnN0IHN0YXR1c0VsID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIik7CiAgICAgICAgY29uc3QgdXBkYXRlU3RhdHVzID0gKCkgPT4gewogICAgICAgICAgY29uc3QgbGF5b3V0ID0gZ3JpZC5nZXRMYXlvdXQoKTsKICAgICAgICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gYEFjdGl2ZSBicmVha3BvaW50OiAke2dyaWQuYWN0aXZlQnJlYWtwb2ludH0gXHUyMDIyIFRpbGVzOiAke2xheW91dC5sZW5ndGh9YDsKICAgICAgICB9OwogICAgICAgIGNvbnN0IG1lZGlhUXVlcnkgPSB3aW5kb3cubWF0Y2hNZWRpYSgiKG1heC13aWR0aDogNzY4cHgpIik7CiAgICAgICAgY29uc3QgaGFuZGxlQnJlYWtwb2ludCA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG1lZGlhUXVlcnkubWF0Y2hlcyA/ICJtb2JpbGUiIDogImJhc2UiOwogICAgICAgICAgZ3JpZC5hcHBseUJyZWFrcG9pbnRMYXlvdXQodGFyZ2V0KTsKICAgICAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgICAgIH07CiAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIG1lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgaGFuZGxlQnJlYWtwb2ludCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lZGlhUXVlcnkuYWRkTGlzdGVuZXI/LihoYW5kbGVCcmVha3BvaW50KTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQnJlYWtwb2ludCgpOwogICAgICAgIGxldCB3aWRnZXRDb3VudGVyID0gNDsKICAgICAgICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICAgICAgc3dpdGNoICh0ZXh0OSkgewogICAgICAgICAgICBjYXNlICJUb2dnbGUgQW5pbWF0aW9uIjoKICAgICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBncmlkLmVuYWJsZUFuaW1hdGlvbiA9ICFncmlkLmVuYWJsZUFuaW1hdGlvbjsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiVG9nZ2xlIEdyaWQgTGluZXMiOgogICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGdyaWQuc2hvd0dyaWRMaW5lcyA9ICFncmlkLnNob3dHcmlkTGluZXM7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIkFkZCBXaWRnZXQiOgogICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IG5ld1dpZGdldCA9IHsKICAgICAgICAgICAgICAgICAgaWQ6IGB3aWRnZXQke3dpZGdldENvdW50ZXIrK31gLAogICAgICAgICAgICAgICAgICB4OiAwLAogICAgICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgICAgICB3OiAzLAogICAgICAgICAgICAgICAgICBoOiAyLAogICAgICAgICAgICAgICAgICBhdXRvUG9zaXRpb246IHRydWUsCiAgICAgICAgICAgICAgICAgIHRpdGxlOiBgV2lkZ2V0ICR7d2lkZ2V0Q291bnRlciAtIDF9YCwKICAgICAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTpwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNzE3MTdhOyI+TmV3IHdpZGdldCBjb250ZW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpfTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBncmlkLmFkZFdpZGdldChuZXdXaWRnZXQsIHRydWUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJDb21wYWN0IEdyaWQiOgogICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGdyaWQuY29tcGFjdCgpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUb2dnbGUgRWRpdCBNb2RlIjoKICAgICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICBncmlkLmVkaXRhYmxlID0gIWdyaWQuZWRpdGFibGU7CiAgICAgICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBncmlkLmVkaXRhYmxlID8gIkxvY2sgR3JpZCIgOiAiVW5sb2NrIEdyaWQiOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJSZXNldCBMYXlvdXQiOgogICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgICAgIGdyaWQuYXBwbHlCcmVha3BvaW50TGF5b3V0KGdyaWQuYWN0aXZlQnJlYWtwb2ludCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgbGV0IGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uID0gbnVsbDsKICAgICAgICBsZXQgbW92ZUV2ZW50Q291bnRlciA9IDA7CiAgICAgICAgY29uc3QgbG9nR3JpZFN0YXRlID0gKGV2ZW50TmFtZSwgZGV0YWlscykgPT4gewogICAgICAgICAgY29uc3QgbGF5b3V0ID0gZ3JpZC5nZXRMYXlvdXQoKTsKICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoYFx1ezFGNTA0fSAke2V2ZW50TmFtZX0gW0V2ZW50ICMkeysrbW92ZUV2ZW50Q291bnRlcn1dYCk7CiAgICAgICAgICBjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSk7CiAgICAgICAgICBjb25zb2xlLmxvZygiR3JpZCBDb25maWd1cmF0aW9uOiIsIHsKICAgICAgICAgICAgY29sdW1uczogZ3JpZC5jb2x1bW5zLAogICAgICAgICAgICBjZWxsSGVpZ2h0OiBncmlkLmNlbGxIZWlnaHQsCiAgICAgICAgICAgIG1hcmdpbjogZ3JpZC5tYXJnaW4sCiAgICAgICAgICAgIGVkaXRhYmxlOiBncmlkLmVkaXRhYmxlLAogICAgICAgICAgICBhY3RpdmVCcmVha3BvaW50OiBncmlkLmFjdGl2ZUJyZWFrcG9pbnQKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc29sZS5sb2coIkN1cnJlbnQgTGF5b3V0OiIsIGxheW91dCk7CiAgICAgICAgICBjb25zb2xlLmxvZygiV2lkZ2V0IENvdW50OiIsIGxheW91dC5sZW5ndGgpOwogICAgICAgICAgY29uc29sZS5sb2coIkdyaWQgQm91bmRzOiIsIHsKICAgICAgICAgICAgdG90YWxXaWRnZXRzOiBncmlkLndpZGdldHMubGVuZ3RoLAogICAgICAgICAgICBtYXhZOiBNYXRoLm1heCguLi5sYXlvdXQubWFwKCh3NCkgPT4gdzQueSArIHc0LmgpKSwKICAgICAgICAgICAgb2NjdXBpZWQ6IGxheW91dC5tYXAoKHc0KSA9PiBgJHt3NC5pZH06ICgke3c0Lnh9LCR7dzQueX0pICR7dzQud314JHt3NC5ofWApLmpvaW4oIiwgIikKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGRldGFpbHMpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkV2ZW50IERldGFpbHM6IiwgZGV0YWlscyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBwbGFjZWhvbGRlck9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wbGFjZWhvbGRlciIpOwogICAgICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHsKICAgICAgICAgICAgICBsZWZ0OiBwbGFjZWhvbGRlci5zdHlsZS5sZWZ0LAogICAgICAgICAgICAgIHRvcDogcGxhY2Vob2xkZXIuc3R5bGUudG9wLAogICAgICAgICAgICAgIHdpZHRoOiBwbGFjZWhvbGRlci5zdHlsZS53aWR0aCwKICAgICAgICAgICAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY3VycmVudFBvc2l0aW9uKSAhPT0gSlNPTi5zdHJpbmdpZnkobGFzdFBsYWNlaG9sZGVyUG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygiUHJldmlvdXM6IiwgbGFzdFBsYWNlaG9sZGVyUG9zaXRpb24pOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDdXJyZW50OiIsIGN1cnJlbnRQb3NpdGlvbik7CiAgICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ncmlkLWNvbnRhaW5lciIpOwogICAgICAgICAgICAgIGlmIChncmlkSW5mbykgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkdyaWQgQ29udGFpbmVyIERpbWVuc2lvbnM6IiwgewogICAgICAgICAgICAgICAgICB3aWR0aDogZ3JpZEluZm8uY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgICAgIGhlaWdodDogZ3JpZEluZm8uY2xpZW50SGVpZ2h0CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgICAgICAgIGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGdyaWQuc2hhZG93Um9vdCkgewogICAgICAgICAgcGxhY2Vob2xkZXJPYnNlcnZlci5vYnNlcnZlKGdyaWQuc2hhZG93Um9vdCwgewogICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsCiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCiAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWyJzdHlsZSJdCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbG9nR3JpZFN0YXRlKCJJbml0aWFsIEdyaWQgU3RhdGUiKTsKICAgICAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1tb3ZlIiwgKGUxMSkgPT4gewogICAgICAgICAgbG9nR3JpZFN0YXRlKCJXaWRnZXQgTW92ZSIsIHsKICAgICAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICAgICAgc3dhcHBlZFdpdGg6IGUxMS5kZXRhaWwuc3dhcHBlZFdpdGgKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigid2lkZ2V0LXJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlc2l6ZSIsIHsKICAgICAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICAgICAgc3dhcHBlZFdpdGg6IGUxMS5kZXRhaWwuc3dhcHBlZFdpdGgKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigid2lkZ2V0LXJlbW92ZSIsIChlMTEpID0+IHsKICAgICAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlbW92ZSIsIHsKICAgICAgICAgICAgcmVtb3ZlZFdpZGdldDogZTExLmRldGFpbC53aWRnZXQKICAgICAgICAgIH0pOwogICAgICAgICAgdXBkYXRlU3RhdHVzKCk7CiAgICAgICAgfSk7CiAgICAgICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJsYXlvdXQtY2hhbmdlIiwgKCkgPT4gewogICAgICAgICAgbG9nR3JpZFN0YXRlKCJMYXlvdXQgQ2hhbmdlIik7CiAgICAgICAgICB1cGRhdGVTdGF0dXMoKTsKICAgICAgICB9KTsKICAgICAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgaXNIZWFkZXIgPSBlMTEudGFyZ2V0LmNsb3Nlc3QoIi53aWRnZXQtaGVhZGVyIik7CiAgICAgICAgICBjb25zdCBpc1Jlc2l6ZUhhbmRsZSA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLnJlc2l6ZS1oYW5kbGUiKTsKICAgICAgICAgIGlmIChpc0hlYWRlciB8fCBpc1Jlc2l6ZUhhbmRsZSkgewogICAgICAgICAgICBjb25zb2xlLmdyb3VwKGBcdXsxRjNBRn0gSW50ZXJhY3Rpb24gU3RhcnRlZDogJHtpc0hlYWRlciA/ICJEcmFnIiA6ICJSZXNpemUifWApOwogICAgICAgICAgICBjb25zb2xlLmxvZygiVGFyZ2V0IFdpZGdldDoiLCBlMTEudGFyZ2V0LmNsb3Nlc3QoIi53aWRnZXQiKT8uZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246IiwgeyB4OiBlMTEuY2xpZW50WCwgeTogZTExLmNsaWVudFkgfSk7CiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsKICAgICAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAobW92ZUV2ZW50KSA9PiB7CiAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik7CiAgICAgICAgICAgICAgaWYgKHdpZGdldCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFx1MjE5NFx1RkUwRiBQb2ludGVyIE1vdmU6YCwgewogICAgICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHsgeDogbW92ZUV2ZW50LmNsaWVudFgsIHk6IG1vdmVFdmVudC5jbGllbnRZIH0sCiAgICAgICAgICAgICAgICAgIGRlbHRhOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbW92ZUV2ZW50LmNsaWVudFggLSBlMTEuY2xpZW50WCwKICAgICAgICAgICAgICAgICAgICB5OiBtb3ZlRXZlbnQuY2xpZW50WSAtIGUxMS5jbGllbnRZCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4gewogICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1ezFGM0MxfSBJbnRlcmFjdGlvbiBFbmRlZCIpOwogICAgICAgICAgICAgIGxvZ0dyaWRTdGF0ZSgiRmluYWwgU3RhdGUgQWZ0ZXIgSW50ZXJhY3Rpb24iKTsKICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgaGFuZGxlUG9pbnRlclVwKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBoYW5kbGVQb2ludGVyTW92ZSk7CiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGhhbmRsZVBvaW50ZXJVcCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxBZGRXaWRnZXQgPSBncmlkLmFkZFdpZGdldC5iaW5kKGdyaWQpOwogICAgICAgIGdyaWQuYWRkV2lkZ2V0ID0gKHdpZGdldCwgYXV0b1Bvc2l0aW9uKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmdyb3VwKCJcdTI3OTUgQWRkaW5nIFdpZGdldCIpOwogICAgICAgICAgY29uc29sZS5sb2coIk5ldyBXaWRnZXQ6Iiwgd2lkZ2V0KTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJBdXRvIFBvc2l0aW9uOiIsIGF1dG9Qb3NpdGlvbik7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbEFkZFdpZGdldCh3aWRnZXQsIGF1dG9Qb3NpdGlvbik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIFdpZGdldCBBZGRlZCIpOwogICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9OwogICAgICAgIGNvbnN0IG9yaWdpbmFsQ29tcGFjdCA9IGdyaWQuY29tcGFjdC5iaW5kKGdyaWQpOwogICAgICAgIGdyaWQuY29tcGFjdCA9IChkaXJlY3Rpb24pID0+IHsKICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1ezFGNURDfVx1RkUwRiBDb21wYWN0aW5nIEdyaWQiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJEaXJlY3Rpb246IiwgZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIpOwogICAgICAgICAgbG9nR3JpZFN0YXRlKCJCZWZvcmUgQ29tcGFjdCIpOwogICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luYWxDb21wYWN0KGRpcmVjdGlvbik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIENvbXBhY3QiKTsKICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfTsKICAgICAgICB1cGRhdGVTdGF0dXMoKTsKICAgICAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICB9CgogICAgICAgICAgLmRlbW8tY29udHJvbHMgZGVlcy1idXR0b24gewogICAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZ3JpZC1jb250YWluZXItd3JhcHBlciB7CiAgICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDYwMHB4OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB9CgogICAgICAgICAgLmluZm8gewogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgfQoKICAgICAgICAgICNkYXNoYm9hcmRMYXlvdXRTdGF0dXMgewogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICAgIH0KICAgICAgICBgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRyb2xzIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQW5pbWF0aW9uOiI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Ub2dnbGUgQW5pbWF0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJEaXNwbGF5OiI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Ub2dnbGUgR3JpZCBMaW5lczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIFdpZGdldDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Db21wYWN0IEdyaWQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVzZXQgTGF5b3V0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGxhYmVsPSJNb2RlOiI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Ub2dnbGUgRWRpdCBNb2RlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY29udGFpbmVyLXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtZGFzaGJvYXJkZ3JpZCBpZD0iZGFzaGJvYXJkR3JpZCI+PC9kZWVzLWRhc2hib2FyZGdyaWQ+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgICAgPGRpdj5EcmFnIHRvIHJlcG9zaXRpb24sIHJlc2l6ZSBmcm9tIGhhbmRsZXMsIG9yIHJpZ2h0LWNsaWNrIGEgaGVhZGVyIHRvIGRlbGV0ZSBhIHRpbGUuPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJkYXNoYm9hcmRMYXlvdXRTdGF0dXMiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWRhc2hib2FyZGdyaWQvc3R5bGVzLmpzCnZhciBkYXNoYm9hcmRHcmlkU3R5bGVzOwp2YXIgaW5pdF9zdHlsZXM3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtZGFzaGJvYXJkZ3JpZC9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRhc2hib2FyZEdyaWRTdHlsZXMgPSBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5yZXNpemluZyB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwgIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwgIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyOmFjdGl2ZSB7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5Lmhhcy1oZWFkZXIgewogICAgICAgIHRvcDogNDVweDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAucmVzaXplLWhhbmRsZS1zZSB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3Zlcjo6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgYAogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LmpzCnZhciBERUZBVUxUX01BUkdJTiwgcmVzb2x2ZU1hcmdpbnMsIGNhbGN1bGF0ZUNlbGxNZXRyaWNzLCBjYWxjdWxhdGVHcmlkSGVpZ2h0LCBvdmVybGFwcywgY29sbGVjdENvbGxpc2lvbnMsIGNoZWNrQ29sbGlzaW9uLCBjbG9uZVdpZGdldCwgY2xvbmVXaWRnZXRzLCBmaW5kQXZhaWxhYmxlUG9zaXRpb24sIHJlc29sdmVXaWRnZXRQbGFjZW1lbnQsIGNvbXBhY3RMYXlvdXQsIGFwcGx5TGF5b3V0Owp2YXIgaW5pdF9sYXlvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2xheW91dC5qcyIoKSB7CiAgICBERUZBVUxUX01BUkdJTiA9IDEwOwogICAgcmVzb2x2ZU1hcmdpbnMgPSAobWFyZ2luKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgbWFyZ2luID09PSAibnVtYmVyIikgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBob3Jpem9udGFsOiBtYXJnaW4sCiAgICAgICAgICB2ZXJ0aWNhbDogbWFyZ2luLAogICAgICAgICAgdG9wOiBtYXJnaW4sCiAgICAgICAgICByaWdodDogbWFyZ2luLAogICAgICAgICAgYm90dG9tOiBtYXJnaW4sCiAgICAgICAgICBsZWZ0OiBtYXJnaW4KICAgICAgICB9OwogICAgICB9CiAgICAgIGNvbnN0IHJlc29sdmVkMiA9IHsKICAgICAgICB0b3A6IG1hcmdpbi50b3AgPz8gREVGQVVMVF9NQVJHSU4sCiAgICAgICAgcmlnaHQ6IG1hcmdpbi5yaWdodCA/PyBERUZBVUxUX01BUkdJTiwKICAgICAgICBib3R0b206IG1hcmdpbi5ib3R0b20gPz8gREVGQVVMVF9NQVJHSU4sCiAgICAgICAgbGVmdDogbWFyZ2luLmxlZnQgPz8gREVGQVVMVF9NQVJHSU4KICAgICAgfTsKICAgICAgcmV0dXJuIHsKICAgICAgICAuLi5yZXNvbHZlZDIsCiAgICAgICAgaG9yaXpvbnRhbDogKHJlc29sdmVkMi5sZWZ0ICsgcmVzb2x2ZWQyLnJpZ2h0KSAvIDIsCiAgICAgICAgdmVydGljYWw6IChyZXNvbHZlZDIudG9wICsgcmVzb2x2ZWQyLmJvdHRvbSkgLyAyCiAgICAgIH07CiAgICB9OwogICAgY2FsY3VsYXRlQ2VsbE1ldHJpY3MgPSAoY29udGFpbmVyV2lkdGgsIGNvbHVtbnMsIG1hcmdpbnMsIGNlbGxIZWlnaHQsIGNlbGxIZWlnaHRVbml0KSA9PiB7CiAgICAgIGNvbnN0IHRvdGFsTWFyZ2luV2lkdGggPSBtYXJnaW5zLmhvcml6b250YWwgKiAoY29sdW1ucyArIDEpOwogICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoIC0gdG90YWxNYXJnaW5XaWR0aCwgMCk7CiAgICAgIGNvbnN0IGNlbGxXaWR0aFB4ID0gY29sdW1ucyA+IDAgPyBhdmFpbGFibGVXaWR0aCAvIGNvbHVtbnMgOiAwOwogICAgICBjb25zdCBjZWxsSGVpZ2h0UHggPSBjZWxsSGVpZ2h0VW5pdCA9PT0gImF1dG8iID8gY2VsbFdpZHRoUHggOiBjZWxsSGVpZ2h0OwogICAgICByZXR1cm4gewogICAgICAgIGNvbnRhaW5lcldpZHRoLAogICAgICAgIGNlbGxXaWR0aFB4LAogICAgICAgIG1hcmdpbkhvcml6b250YWxQeDogbWFyZ2lucy5ob3Jpem9udGFsLAogICAgICAgIGNlbGxIZWlnaHRQeCwKICAgICAgICBtYXJnaW5WZXJ0aWNhbFB4OiBtYXJnaW5zLnZlcnRpY2FsCiAgICAgIH07CiAgICB9OwogICAgY2FsY3VsYXRlR3JpZEhlaWdodCA9ICh3aWRnZXRzLCBtYXJnaW5zLCBjZWxsSGVpZ2h0KSA9PiB7CiAgICAgIGlmICh3aWRnZXRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gMDsKICAgICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KC4uLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC55ICsgd2lkZ2V0LmgpLCAwKTsKICAgICAgcmV0dXJuIG1heFkgKiBjZWxsSGVpZ2h0ICsgKG1heFkgKyAxKSAqIG1hcmdpbnMudmVydGljYWw7CiAgICB9OwogICAgb3ZlcmxhcHMgPSAod2lkZ2V0LCB4NCwgeTQsIHc0LCBoOCkgPT4geDQgPCB3aWRnZXQueCArIHdpZGdldC53ICYmIHg0ICsgdzQgPiB3aWRnZXQueCAmJiB5NCA8IHdpZGdldC55ICsgd2lkZ2V0LmggJiYgeTQgKyBoOCA+IHdpZGdldC55OwogICAgY29sbGVjdENvbGxpc2lvbnMgPSAod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXID0gdGFyZ2V0LncsIG5leHRIID0gdGFyZ2V0LmgpID0+IHsKICAgICAgcmV0dXJuIHdpZGdldHMuZmlsdGVyKCh3aWRnZXQpID0+IHsKICAgICAgICBpZiAod2lkZ2V0LmlkID09PSB0YXJnZXQuaWQpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIG92ZXJsYXBzKHdpZGdldCwgbmV4dFgsIG5leHRZLCBuZXh0VywgbmV4dEgpOwogICAgICB9KTsKICAgIH07CiAgICBjaGVja0NvbGxpc2lvbiA9ICh3aWRnZXRzLCB0YXJnZXQsIG5leHRYLCBuZXh0WSkgPT4gY29sbGVjdENvbGxpc2lvbnMod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFkpLmxlbmd0aCA+IDA7CiAgICBjbG9uZVdpZGdldCA9ICh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KTsKICAgIGNsb25lV2lkZ2V0cyA9ICh3aWRnZXRzKSA9PiB3aWRnZXRzLm1hcChjbG9uZVdpZGdldCk7CiAgICBmaW5kQXZhaWxhYmxlUG9zaXRpb24gPSAod2lkZ2V0cywgd2lkdGgsIGhlaWdodCwgY29sdW1ucykgPT4gewogICAgICBmb3IgKGxldCB5NCA9IDA7IHk0IDwgMjAwOyB5NCsrKSB7CiAgICAgICAgZm9yIChsZXQgeDQgPSAwOyB4NCA8PSBjb2x1bW5zIC0gd2lkdGg7IHg0KyspIHsKICAgICAgICAgIGNvbnN0IGlzRnJlZSA9ICF3aWRnZXRzLnNvbWUoKHdpZGdldCkgPT4gb3ZlcmxhcHMod2lkZ2V0LCB4NCwgeTQsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgICAgIGlmIChpc0ZyZWUpIHsKICAgICAgICAgICAgcmV0dXJuIHsgeDogeDQsIHk6IHk0IH07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IG1heFkgPSB3aWRnZXRzLnJlZHVjZSgoYWNjLCB3aWRnZXQpID0+IE1hdGgubWF4KGFjYywgd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogICAgICByZXR1cm4geyB4OiAwLCB5OiBtYXhZIH07CiAgICB9OwogICAgcmVzb2x2ZVdpZGdldFBsYWNlbWVudCA9ICh3aWRnZXRzLCB3aWRnZXRJZCwgbmV4dDIsIGNvbHVtbnMsIHByZXZpb3VzUG9zaXRpb24pID0+IHsKICAgICAgY29uc3Qgc291cmNlV2lkZ2V0cyA9IGNsb25lV2lkZ2V0cyh3aWRnZXRzKTsKICAgICAgY29uc3QgbW92aW5nID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICBjb25zdCBvcmlnaW5hbCA9IHdpZGdldHMuZmluZCgod2lkZ2V0KSA9PiB3aWRnZXQuaWQgPT09IHdpZGdldElkKTsKICAgICAgaWYgKCFtb3ZpbmcgfHwgIW9yaWdpbmFsKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgdGFyZ2V0ID0gewogICAgICAgIHg6IG5leHQyLngsCiAgICAgICAgeTogbmV4dDIueSwKICAgICAgICB3OiBuZXh0Mi53ID8/IG1vdmluZy53LAogICAgICAgIGg6IG5leHQyLmggPz8gbW92aW5nLmgKICAgICAgfTsKICAgICAgbW92aW5nLnggPSB0YXJnZXQueDsKICAgICAgbW92aW5nLnkgPSB0YXJnZXQueTsKICAgICAgbW92aW5nLncgPSB0YXJnZXQudzsKICAgICAgbW92aW5nLmggPSB0YXJnZXQuaDsKICAgICAgY29uc3QgY29sbGlzaW9ucyA9IGNvbGxlY3RDb2xsaXNpb25zKHNvdXJjZVdpZGdldHMsIG1vdmluZywgdGFyZ2V0LngsIHRhcmdldC55LCB0YXJnZXQudywgdGFyZ2V0LmgpOwogICAgICBpZiAoY29sbGlzaW9ucy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IFttb3ZpbmcuaWRdIH07CiAgICAgIH0KICAgICAgaWYgKGNvbGxpc2lvbnMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgY29uc3Qgb3RoZXIgPSBjb2xsaXNpb25zWzBdOwogICAgICAgIGlmICghb3RoZXIubG9ja2VkICYmICFvdGhlci5ub01vdmUgJiYgb3RoZXIudyA9PT0gbW92aW5nLncgJiYgb3RoZXIuaCA9PT0gbW92aW5nLmgpIHsKICAgICAgICAgIGNvbnN0IG90aGVyQ2xvbmUgPSBzb3VyY2VXaWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBvdGhlci5pZCk7CiAgICAgICAgICBpZiAob3RoZXJDbG9uZSkgewogICAgICAgICAgICBjb25zdCBzd2FwVGFyZ2V0ID0gb3JpZ2luYWw7CiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzT3RoZXJQb3NpdGlvbiA9IHsgeDogb3RoZXJDbG9uZS54LCB5OiBvdGhlckNsb25lLnkgfTsKICAgICAgICAgICAgb3RoZXJDbG9uZS54ID0gc3dhcFRhcmdldC54OwogICAgICAgICAgICBvdGhlckNsb25lLnkgPSBzd2FwVGFyZ2V0Lnk7CiAgICAgICAgICAgIGNvbnN0IHN3YXBWYWxpZCA9IGNvbGxlY3RDb2xsaXNpb25zKHNvdXJjZVdpZGdldHMsIG1vdmluZywgbW92aW5nLngsIG1vdmluZy55LCBtb3ZpbmcudywgbW92aW5nLmgpLmxlbmd0aCA9PT0gMCAmJiBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBvdGhlckNsb25lLCBvdGhlckNsb25lLngsIG90aGVyQ2xvbmUueSwgb3RoZXJDbG9uZS53LCBvdGhlckNsb25lLmgpLmxlbmd0aCA9PT0gMDsKICAgICAgICAgICAgaWYgKHN3YXBWYWxpZCkgewogICAgICAgICAgICAgIHJldHVybiB7IHdpZGdldHM6IHNvdXJjZVdpZGdldHMsIG1vdmVkV2lkZ2V0czogW21vdmluZy5pZCwgb3RoZXJDbG9uZS5pZF0sIHN3YXBwZWRXaXRoOiBvdGhlckNsb25lLmlkIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3RoZXJDbG9uZS54ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLng7CiAgICAgICAgICAgIG90aGVyQ2xvbmUueSA9IHByZXZpb3VzT3RoZXJQb3NpdGlvbi55OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBtb3ZlZElkcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFttb3ZpbmcuaWRdKTsKICAgICAgZm9yIChjb25zdCBvZmZlbmRpbmcgb2YgY29sbGlzaW9ucykgewogICAgICAgIGlmIChvZmZlbmRpbmcubG9ja2VkIHx8IG9mZmVuZGluZy5ub01vdmUpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBjbG9uZSA9IHNvdXJjZVdpZGdldHMuZmluZCgod2lkZ2V0KSA9PiB3aWRnZXQuaWQgPT09IG9mZmVuZGluZy5pZCk7CiAgICAgICAgaWYgKCFjbG9uZSkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHNvdXJjZVdpZGdldHMuZmlsdGVyKCh3aWRnZXQpID0+IHdpZGdldC5pZCAhPT0gb2ZmZW5kaW5nLmlkKTsKICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSBmaW5kQXZhaWxhYmxlUG9zaXRpb24ocmVtYWluaW5nLCBjbG9uZS53LCBjbG9uZS5oLCBjb2x1bW5zKTsKICAgICAgICBjbG9uZS54ID0gcG9zaXRpb24zLng7CiAgICAgICAgY2xvbmUueSA9IHBvc2l0aW9uMy55OwogICAgICAgIG1vdmVkSWRzLmFkZChjbG9uZS5pZCk7CiAgICAgIH0KICAgICAgY29uc3QgdmVyaWZ5ID0gY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgbW92aW5nLCBtb3ZpbmcueCwgbW92aW5nLnksIG1vdmluZy53LCBtb3ZpbmcuaCk7CiAgICAgIGlmICh2ZXJpZnkubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiB7IHdpZGdldHM6IHNvdXJjZVdpZGdldHMsIG1vdmVkV2lkZ2V0czogQXJyYXkuZnJvbShtb3ZlZElkcykgfTsKICAgIH07CiAgICBjb21wYWN0TGF5b3V0ID0gKHdpZGdldHMsIGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpID0+IHsKICAgICAgY29uc3Qgc29ydGVkID0gWy4uLndpZGdldHNdLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJ2ZXJ0aWNhbCIpIHsKICAgICAgICAgIGlmIChhNS55ICE9PSBiNS55KQogICAgICAgICAgICByZXR1cm4gYTUueSAtIGI1Lnk7CiAgICAgICAgICByZXR1cm4gYTUueCAtIGI1Lng7CiAgICAgICAgfQogICAgICAgIGlmIChhNS54ICE9PSBiNS54KQogICAgICAgICAgcmV0dXJuIGE1LnggLSBiNS54OwogICAgICAgIHJldHVybiBhNS55IC0gYjUueTsKICAgICAgfSk7CiAgICAgIGZvciAoY29uc3Qgd2lkZ2V0IG9mIHNvcnRlZCkgewogICAgICAgIGlmICh3aWRnZXQubG9ja2VkIHx8IHdpZGdldC5ub01vdmUpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgICAgICB3aGlsZSAod2lkZ2V0LnkgPiAwICYmICFjaGVja0NvbGxpc2lvbih3aWRnZXRzLCB3aWRnZXQsIHdpZGdldC54LCB3aWRnZXQueSAtIDEpKSB7CiAgICAgICAgICAgIHdpZGdldC55IC09IDE7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdoaWxlICh3aWRnZXQueCA+IDAgJiYgIWNoZWNrQ29sbGlzaW9uKHdpZGdldHMsIHdpZGdldCwgd2lkZ2V0LnggLSAxLCB3aWRnZXQueSkpIHsKICAgICAgICAgICAgd2lkZ2V0LnggLT0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBhcHBseUxheW91dCA9ICh3aWRnZXRzLCBsYXlvdXQpID0+IHsKICAgICAgcmV0dXJuIHdpZGdldHMubWFwKCh3aWRnZXQpID0+IHsKICAgICAgICBjb25zdCBsYXlvdXRJdGVtID0gbGF5b3V0LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgcmV0dXJuIGxheW91dEl0ZW0gPyB7IC4uLndpZGdldCwgLi4ubGF5b3V0SXRlbSB9IDogd2lkZ2V0OwogICAgICB9KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2ludGVyYWN0aW9uLmpzCnZhciBjb21wdXRlR3JpZENvb3JkaW5hdGVzLCBjb21wdXRlUmVzaXplRGltZW5zaW9uczsKdmFyIGluaXRfaW50ZXJhY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2ludGVyYWN0aW9uLmpzIigpIHsKICAgIGNvbXB1dGVHcmlkQ29vcmRpbmF0ZXMgPSAoeyBwb2ludGVyLCBjb250YWluZXJSZWN0LCBtZXRyaWNzLCBjb2x1bW5zLCB3aWRnZXQsIHJ0bCwgZHJhZ09mZnNldFggPSAwLCBkcmFnT2Zmc2V0WSA9IDAgfSkgPT4gewogICAgICBjb25zdCByZWxhdGl2ZVggPSBwb2ludGVyLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQgLSBkcmFnT2Zmc2V0WDsKICAgICAgY29uc3QgcmVsYXRpdmVZID0gcG9pbnRlci5jbGllbnRZIC0gY29udGFpbmVyUmVjdC50b3AgLSBkcmFnT2Zmc2V0WTsKICAgICAgY29uc3QgbWFyZ2luWCA9IG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBtYXJnaW5ZID0gbWV0cmljcy5tYXJnaW5WZXJ0aWNhbFB4OwogICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgICAgIGNvbnN0IGNsYW1wMyA9ICh2YWx1ZTIsIG1pbjMsIG1heDMpID0+IE1hdGgubWF4KG1pbjMsIE1hdGgubWluKG1heDMsIHZhbHVlMikpOwogICAgICBjb25zdCBhZGp1c3RlZFggPSBjbGFtcDMocmVsYXRpdmVYIC0gbWFyZ2luWCwgMCwgY29udGFpbmVyUmVjdC53aWR0aCAtIG1hcmdpblgpOwogICAgICBjb25zdCBhZGp1c3RlZFkgPSBjbGFtcDMocmVsYXRpdmVZIC0gbWFyZ2luWSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gY2VsbFdpZHRoICsgbWFyZ2luWDsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5ZID0gY2VsbEhlaWdodCArIG1hcmdpblk7CiAgICAgIGxldCBncmlkWCA9IE1hdGgucm91bmQoYWRqdXN0ZWRYIC8gY2VsbFBsdXNNYXJnaW5YKTsKICAgICAgaWYgKHJ0bCkgewogICAgICAgIGdyaWRYID0gY29sdW1ucyAtIHdpZGdldC53IC0gZ3JpZFg7CiAgICAgIH0KICAgICAgZ3JpZFggPSBjbGFtcDMoZ3JpZFgsIDAsIGNvbHVtbnMgLSB3aWRnZXQudyk7CiAgICAgIGNvbnN0IGdyaWRZID0gY2xhbXAzKE1hdGgucm91bmQoYWRqdXN0ZWRZIC8gY2VsbFBsdXNNYXJnaW5ZKSwgMCwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpOwogICAgICByZXR1cm4geyB4OiBncmlkWCwgeTogZ3JpZFkgfTsKICAgIH07CiAgICBjb21wdXRlUmVzaXplRGltZW5zaW9ucyA9ICh7IHBvaW50ZXIsIGNvbnRhaW5lclJlY3QsIG1ldHJpY3MsIHN0YXJ0V2lkdGgsIHN0YXJ0SGVpZ2h0LCBzdGFydFBvaW50ZXIsIGhhbmRsZXI6IGhhbmRsZXIyLCB3aWRnZXQsIGNvbHVtbnMgfSkgPT4gewogICAgICBjb25zdCBkZWx0YVggPSBwb2ludGVyLmNsaWVudFggLSBzdGFydFBvaW50ZXIuY2xpZW50WDsKICAgICAgY29uc3QgZGVsdGFZID0gcG9pbnRlci5jbGllbnRZIC0gc3RhcnRQb2ludGVyLmNsaWVudFk7CiAgICAgIGxldCB3aWR0aCA9IHN0YXJ0V2lkdGg7CiAgICAgIGxldCBoZWlnaHQgPSBzdGFydEhlaWdodDsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBjZWxsUGx1c01hcmdpblkgPSBtZXRyaWNzLmNlbGxIZWlnaHRQeCArIG1ldHJpY3MubWFyZ2luVmVydGljYWxQeDsKICAgICAgaWYgKGhhbmRsZXIyLmluY2x1ZGVzKCJlIikpIHsKICAgICAgICBjb25zdCBkZWx0YUNvbHMgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIGNlbGxQbHVzTWFyZ2luWCk7CiAgICAgICAgd2lkdGggPSBzdGFydFdpZHRoICsgZGVsdGFDb2xzOwogICAgICB9CiAgICAgIGlmIChoYW5kbGVyMi5pbmNsdWRlcygicyIpKSB7CiAgICAgICAgY29uc3QgZGVsdGFSb3dzID0gTWF0aC5yb3VuZChkZWx0YVkgLyBjZWxsUGx1c01hcmdpblkpOwogICAgICAgIGhlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgZGVsdGFSb3dzOwogICAgICB9CiAgICAgIGNvbnN0IGNsYW1wZWRXaWR0aCA9IE1hdGgubWF4KHdpZGdldC5taW5XIHx8IDEsIE1hdGgubWluKHdpZHRoLCB3aWRnZXQubWF4VyB8fCBjb2x1bW5zIC0gd2lkZ2V0LngpKTsKICAgICAgY29uc3QgY2xhbXBlZEhlaWdodCA9IE1hdGgubWF4KHdpZGdldC5taW5IIHx8IDEsIE1hdGgubWluKGhlaWdodCwgd2lkZ2V0Lm1heEggfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB3aWR0aDogY2xhbXBlZFdpZHRoLAogICAgICAgIGhlaWdodDogY2xhbXBlZEhlaWdodAogICAgICB9OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUuanMKdmFyIG9wZW5XaWRnZXRDb250ZXh0TWVudTsKdmFyIGluaXRfY29udGV4dG1lbnUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2NvbnRleHRtZW51LmpzIigpIHsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogICAgaW5pdF9wbHVnaW5zNCgpOwogICAgb3BlbldpZGdldENvbnRleHRNZW51ID0gKHsgd2lkZ2V0LCBob3N0LCBldmVudCB9KSA9PiB7CiAgICAgIGNvbnN0IGl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUgdGlsZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGhvc3QucmVtb3ZlV2lkZ2V0KHdpZGdldC5pZCk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXTsKICAgICAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBpdGVtcyk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtZGFzaGJvYXJkZ3JpZC9kZWVzLWRhc2hib2FyZGdyaWQuanMKdmFyIF9fZXNEZWNvcmF0ZTY2LCBfX3J1bkluaXRpYWxpemVyczY3LCBEZWVzRGFzaGJvYXJkZ3JpZDsKdmFyIGluaXRfZGVlc19kYXNoYm9hcmRncmlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtZGFzaGJvYXJkZ3JpZC9kZWVzLWRhc2hib2FyZGdyaWQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGVlc19kYXNoYm9hcmRncmlkX2RlbW8oKTsKICAgIGluaXRfc3R5bGVzNygpOwogICAgaW5pdF9sYXlvdXQoKTsKICAgIGluaXRfaW50ZXJhY3Rpb24oKTsKICAgIGluaXRfY29udGV4dG1lbnUoKTsKICAgIF9fZXNEZWNvcmF0ZTY2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNEYXNoYm9hcmRncmlkID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGFzaGJvYXJkZ3JpZCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfd2lkZ2V0c19kZWNvcmF0b3JzOwogICAgICBsZXQgX3dpZGdldHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NlbGxIZWlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NlbGxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tYXJnaW5fZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYXJnaW5faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWFyZ2luX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sdW1uc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2VkaXRhYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZWRpdGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZWRpdGFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbmFibGVBbmltYXRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3J0bF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3J0bF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9ydGxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93R3JpZExpbmVzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93R3JpZExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGF5b3V0c19kZWNvcmF0b3JzOwogICAgICBsZXQgX2xheW91dHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2ZUJyZWFrcG9pbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wbGFjZWhvbGRlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWV0cmljc19kZWNvcmF0b3JzOwogICAgICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Jlc29sdmVkTWFyZ2luc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZXNvbHZlZE1hcmdpbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzOwogICAgICBsZXQgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3ByZXZpZXdXaWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF93aWRnZXRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfY2VsbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9tYXJnaW5fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfY29sdW1uc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9lZGl0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9jZWxsSGVpZ2h0VW5pdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9ydGxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3Nob3dHcmlkTGluZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2xheW91dHNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX21ldHJpY3NfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3dpZGdldHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2lkZ2V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53aWRnZXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9jZWxsSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNlbGxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNlbGxIZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2VsbEhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNlbGxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NlbGxIZWlnaHRfaW5pdGlhbGl6ZXJzLCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfbWFyZ2luX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1hcmdpbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFyZ2luIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1hcmdpbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1hcmdpbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFyZ2luX2luaXRpYWxpemVycywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfY29sdW1uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2x1bW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2x1bW5zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbHVtbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb2x1bW5zID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2x1bW5zX2luaXRpYWxpemVycywgX2NvbHVtbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX2VkaXRhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlZGl0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVkaXRhYmxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0YWJsZV9pbml0aWFsaXplcnMsIF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVuYWJsZUFuaW1hdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW5hYmxlQW5pbWF0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVuYWJsZUFuaW1hdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVuYWJsZUFuaW1hdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW5hYmxlQW5pbWF0aW9uX2luaXRpYWxpemVycywgX2VuYWJsZUFuaW1hdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2VsbEhlaWdodFVuaXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNlbGxIZWlnaHRVbml0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNlbGxIZWlnaHRVbml0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY2VsbEhlaWdodFVuaXQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NlbGxIZWlnaHRVbml0X2luaXRpYWxpemVycywgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9ydGxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicnRsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucnRsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucnRsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydGxfaW5pdGlhbGl6ZXJzLCBfcnRsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9zaG93R3JpZExpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dHcmlkTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dHcmlkTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0dyaWRMaW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dHcmlkTGluZXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dHcmlkTGluZXNfaW5pdGlhbGl6ZXJzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfbGF5b3V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYXlvdXRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYXlvdXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxheW91dHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5sYXlvdXRzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYXlvdXRzX2luaXRpYWxpemVycywgX2xheW91dHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZlQnJlYWtwb2ludCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQnJlYWtwb2ludCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVCcmVha3BvaW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYWN0aXZlQnJlYWtwb2ludCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlQnJlYWtwb2ludF9pbml0aWFsaXplcnMsIF9hY3RpdmVCcmVha3BvaW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyUG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXJQb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfbWV0cmljc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZXRyaWNzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1ldHJpY3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tZXRyaWNzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXRyaWNzX2luaXRpYWxpemVycywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3Jlc29sdmVkTWFyZ2luc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXNvbHZlZE1hcmdpbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJlc29sdmVkTWFyZ2lucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXNvbHZlZE1hcmdpbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZXNvbHZlZE1hcmdpbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMsIF9yZXNvbHZlZE1hcmdpbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3ByZXZpZXdXaWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByZXZpZXdXaWRnZXRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcmV2aWV3V2lkZ2V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcmV2aWV3V2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnByZXZpZXdXaWRnZXRzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcmV2aWV3V2lkZ2V0c19pbml0aWFsaXplcnMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ2OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJMYXlvdXQiXTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gZGFzaGJvYXJkR3JpZFN0eWxlczsKICAgICAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgICAgICBnZXQgd2lkZ2V0cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3aWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB3aWRnZXRzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycywgODApKTsKICAgICAgICBnZXQgY2VsbEhlaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjZWxsSGVpZ2h0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWFyZ2luX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21hcmdpbl9pbml0aWFsaXplcnMsIDEwKSk7CiAgICAgICAgZ2V0IG1hcmdpbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYXJnaW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1hcmdpbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCAxMikpOwogICAgICAgIGdldCBjb2x1bW5zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbHVtbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlZGl0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2NvbHVtbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9lZGl0YWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgZWRpdGFibGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVkaXRhYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2VuYWJsZUFuaW1hdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2VkaXRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBlbmFibGVBbmltYXRpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZW5hYmxlQW5pbWF0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlbmFibGVBbmltYXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCAicHgiKSk7CiAgICAgICAgZ2V0IGNlbGxIZWlnaHRVbml0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjZWxsSGVpZ2h0VW5pdCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNydGxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9jZWxsSGVpZ2h0VW5pdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3J0bF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IHJ0bCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNydGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJ0bCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd0dyaWRMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3J0bF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3Nob3dHcmlkTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBzaG93R3JpZExpbmVzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dHcmlkTGluZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93R3JpZExpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgbGF5b3V0cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsYXlvdXRzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGF5b3V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2xheW91dHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycywgImJhc2UiKSk7CiAgICAgICAgZ2V0IGFjdGl2ZUJyZWFrcG9pbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWN0aXZlQnJlYWtwb2ludCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2ZUJyZWFrcG9pbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3BsYWNlaG9sZGVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY3RpdmVCcmVha3BvaW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwbGFjZWhvbGRlclBvc2l0aW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGxhY2Vob2xkZXJQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9tZXRyaWNzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCBtZXRyaWNzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1ldHJpY3ModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcmVzb2x2ZWRNYXJnaW5zX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgICAgIGdldCByZXNvbHZlZE1hcmdpbnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcmVzb2x2ZWRNYXJnaW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCByZXNvbHZlZE1hcmdpbnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3ByZXZpZXdXaWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcmVzb2x2ZWRNYXJnaW5zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcHJldmlld1dpZGdldHNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IHByZXZpZXdXaWRnZXRzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3ByZXZpZXdXaWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwcmV2aWV3V2lkZ2V0cyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ByZXZpZXdXaWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lckJvdW5kcyA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGRyYWdTdGF0ZSA9IG51bGw7CiAgICAgICAgcmVzaXplU3RhdGUgPSBudWxsOwogICAgICAgIHJlc2l6ZU9ic2VydmVyOwogICAgICAgIGludGVyYWN0aW9uQWN0aXZlID0gZmFsc2U7CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICAgICAgdGhpcy5vYnNlcnZlUmVzaXplKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7CiAgICAgICAgICB0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCk7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZWQoY2hhbmdlZCkgewogICAgICAgICAgaWYgKGNoYW5nZWQuaGFzKCJtYXJnaW4iKSB8fCBjaGFuZ2VkLmhhcygiY29sdW1ucyIpIHx8IGNoYW5nZWQuaGFzKCJjZWxsSGVpZ2h0IikgfHwgY2hhbmdlZC5oYXMoImNlbGxIZWlnaHRVbml0IikpIHsKICAgICAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYW5nZWQuaGFzKCJ3aWRnZXRzIikgJiYgIXRoaXMuaW50ZXJhY3Rpb25BY3RpdmUpIHsKICAgICAgICAgICAgdGhpcy5ub3RpZnlMYXlvdXRDaGFuZ2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgYmFzZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgICAgICBpZiAoYmFzZVdpZGdldHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpsYXlvdXRHcmlkIn0+PC9kZWVzLWljb24+CiAgICAgICAgICA8ZGl2Pk5vIHdpZGdldHMgY29uZmlndXJlZDwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNHB4OyBtYXJnaW4tdG9wOiA4cHg7Ij5BZGQgd2lkZ2V0cyB0byBwb3B1bGF0ZSB0aGUgZGFzaGJvYXJkPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5lbnN1cmVNZXRyaWNzKCk7CiAgICAgICAgICBjb25zdCBtYXJnaW5zID0gdGhpcy5yZXNvbHZlZE1hcmdpbnMgPz8gcmVzb2x2ZU1hcmdpbnModGhpcy5tYXJnaW4pOwogICAgICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICAgICAgY29uc3QgbGF5b3V0Rm9ySGVpZ2h0ID0gdGhpcy5wcmV2aWV3V2lkZ2V0cyA/PyB0aGlzLndpZGdldHM7CiAgICAgICAgICBjb25zdCBncmlkSGVpZ2h0ID0gY2FsY3VsYXRlR3JpZEhlaWdodChsYXlvdXRGb3JIZWlnaHQsIG1hcmdpbnMsIGNlbGxIZWlnaHQpOwogICAgICAgICAgY29uc3QgcHJldmlld01hcCA9IHRoaXMucHJldmlld1dpZGdldHMgPyBuZXcgTWFwKHRoaXMucHJldmlld1dpZGdldHMubWFwKCh3aWRnZXQpID0+IFt3aWRnZXQuaWQsIHdpZGdldF0pKSA6IG51bGw7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY29udGFpbmVyIiBzdHlsZT0iaGVpZ2h0OiAke2dyaWRIZWlnaHR9cHg7Ij4KICAgICAgICAke3RoaXMuc2hvd0dyaWRMaW5lcyA/IHRoaXMucmVuZGVyR3JpZExpbmVzKG1ldHJpY3MsIGdyaWRIZWlnaHQpIDogbnVsbH0KICAgICAgICAke2Jhc2VXaWRnZXRzLm1hcCgod2lkZ2V0KSA9PiB0aGlzLnJlbmRlcldpZGdldCh3aWRnZXQsIG1ldHJpY3MsIG1hcmdpbnMsIHByZXZpZXdNYXApKX0KICAgICAgICAke3RoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA/IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIobWV0cmljcywgbWFyZ2lucykgOiBudWxsfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckdyaWRMaW5lcyhtZXRyaWNzLCBncmlkSGVpZ2h0KSB7CiAgICAgICAgICBjb25zdCB2ZXJ0aWNhbCA9IFtdOwogICAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IFtdOwogICAgICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5ZID0gbWV0cmljcy5jZWxsSGVpZ2h0UHggKyBtZXRyaWNzLm1hcmdpblZlcnRpY2FsUHg7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPD0gdGhpcy5jb2x1bW5zOyBpMTErKykgewogICAgICAgICAgICBjb25zdCBsZWZ0UHggPSBpMTEgKiBjZWxsUGx1c01hcmdpblggKyBtZXRyaWNzLm1hcmdpbkhvcml6b250YWxQeDsKICAgICAgICAgICAgY29uc3QgbGVmdFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KGxlZnRQeCwgbWV0cmljcy5jb250YWluZXJXaWR0aCk7CiAgICAgICAgICAgIHZlcnRpY2FsLnB1c2goYjJgPGRpdiBjbGFzcz0iZ3JpZC1saW5lLXZlcnRpY2FsIiBzdHlsZT0ibGVmdDogJHtsZWZ0UGVyY2VudH0lOyI+PC9kaXY+YCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByb3dzID0gTWF0aC5jZWlsKGdyaWRIZWlnaHQgLyBjZWxsUGx1c01hcmdpblkpOwogICAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDw9IHJvd3M7IHJvdysrKSB7CiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHJvdyAqIGNlbGxQbHVzTWFyZ2luWTsKICAgICAgICAgICAgaG9yaXpvbnRhbC5wdXNoKGIyYDxkaXYgY2xhc3M9ImdyaWQtbGluZS1ob3Jpem9udGFsIiBzdHlsZT0idG9wOiAke3RvcH1weDsiPjwvZGl2PmApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke3ZlcnRpY2FsfQogICAgICAgICR7aG9yaXpvbnRhbH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJXaWRnZXQod2lkZ2V0LCBtZXRyaWNzLCBtYXJnaW5zLCBwcmV2aWV3TWFwKSB7CiAgICAgICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGU/LndpZGdldElkID09PSB3aWRnZXQuaWQ7CiAgICAgICAgICBjb25zdCBpc1Jlc2l6aW5nID0gdGhpcy5yZXNpemVTdGF0ZT8ud2lkZ2V0SWQgPT09IHdpZGdldC5pZDsKICAgICAgICAgIGNvbnN0IGlzTG9ja2VkID0gd2lkZ2V0LmxvY2tlZCB8fCAhdGhpcy5lZGl0YWJsZTsKICAgICAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwcmV2aWV3TWFwPy5nZXQod2lkZ2V0LmlkKSA/PyBudWxsOwogICAgICAgICAgY29uc3QgbGF5b3V0Rm9yUmVuZGVyID0gaXNEcmFnZ2luZyA/IHdpZGdldCA6IHByZXZpZXdXaWRnZXQgPz8gd2lkZ2V0OwogICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY29tcHV0ZVdpZGdldFJlY3QobGF5b3V0Rm9yUmVuZGVyLCBtZXRyaWNzLCBtYXJnaW5zKTsKICAgICAgICAgIGNvbnN0IHNpZGVQcm9wZXJ0eSA9IHRoaXMucnRsID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgICAgICAgIGNvbnN0IHNpZGVWYWx1ZSA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC5sZWZ0LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgIGNvbnN0IHdpZHRoUGVyY2VudCA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC53aWR0aCwgbWV0cmljcy5jb250YWluZXJXaWR0aCk7CiAgICAgICAgICBsZXQgdHJhbnNmb3JtMiA9ICIiOwogICAgICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5kcmFnU3RhdGU/LmN1cnJlbnRQb2ludGVyKSB7CiAgICAgICAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmRyYWdTdGF0ZS5jdXJyZW50UG9pbnRlcjsKICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlWCA9IHBvaW50ZXIuY2xpZW50WCAtIGJvdW5kcy5sZWZ0IC0gdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCAtIHJlY3QubGVmdDsKICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlWSA9IHBvaW50ZXIuY2xpZW50WSAtIGJvdW5kcy50b3AgLSB0aGlzLmRyYWdTdGF0ZS5vZmZzZXRZIC0gcmVjdC50b3A7CiAgICAgICAgICAgIHRyYW5zZm9ybTIgPSBgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpO2A7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZ3JpZC13aWRnZXQgJHtpc0RyYWdnaW5nID8gImRyYWdnaW5nIiA6ICIifSAke2lzUmVzaXppbmcgPyAicmVzaXppbmciIDogIiJ9IgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICAgJHt0cmFuc2Zvcm0yfQogICAgICAgICIKICAgICAgICBkYXRhLXdpZGdldC1pZD0ke3dpZGdldC5pZH0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij4KICAgICAgICAgICR7d2lkZ2V0LnRpdGxlID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3aWRnZXQtaGVhZGVyICR7aXNMb2NrZWQgPyAibG9ja2VkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7IWlzTG9ja2VkICYmICF3aWRnZXQubm9Nb3ZlID8gKGV2dCkgPT4gdGhpcy5zdGFydERyYWcoZXZ0LCB3aWRnZXQpIDogbnVsbH0KICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGV2dCkgPT4gdGhpcy5oYW5kbGVXaWRnZXRDb250ZXh0TWVudShldnQsIHdpZGdldCl9CiAgICAgICAgICAgICAgICAgIHRhYmluZGV4PSR7IWlzTG9ja2VkICYmICF3aWRnZXQubm9Nb3ZlID8gMCA6IC0xfQogICAgICAgICAgICAgICAgICBAa2V5ZG93bj0keyhldnQpID0+IHRoaXMuaGFuZGxlSGVhZGVyS2V5ZG93bihldnQsIHdpZGdldCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7d2lkZ2V0Lmljb24gPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7d2lkZ2V0Lmljb259PjwvZGVlcy1pY29uPmAgOiBudWxsfQogICAgICAgICAgICAgICAgICAke3dpZGdldC50aXRsZX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiBudWxsfQogICAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0LWJvZHkgJHt3aWRnZXQudGl0bGUgPyAiaGFzLWhlYWRlciIgOiAiIn0iPgogICAgICAgICAgICAke3dpZGdldC5jb250ZW50fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAkeyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vUmVzaXplID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgImUiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zIgogICAgICAgICAgICAgICAgICBAcG9pbnRlcmRvd249JHsoZXZ0KSA9PiB0aGlzLnN0YXJ0UmVzaXplKGV2dCwgd2lkZ2V0LCAicyIpfQogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLXNlIgogICAgICAgICAgICAgICAgICBAcG9pbnRlcmRvd249JHsoZXZ0KSA9PiB0aGlzLnN0YXJ0UmVzaXplKGV2dCwgd2lkZ2V0LCAic2UiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICByZW5kZXJQbGFjZWhvbGRlcihtZXRyaWNzLCBtYXJnaW5zKSB7CiAgICAgICAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbikgewogICAgICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbXB1dGVXaWRnZXRSZWN0KHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiwgbWV0cmljcywgbWFyZ2lucyk7CiAgICAgICAgICBjb25zdCBzaWRlUHJvcGVydHkgPSB0aGlzLnJ0bCA/ICJyaWdodCIgOiAibGVmdCI7CiAgICAgICAgICBjb25zdCBzaWRlVmFsdWUgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3QubGVmdCwgbWV0cmljcy5jb250YWluZXJXaWR0aCk7CiAgICAgICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3Qud2lkdGgsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0IHBsYWNlaG9sZGVyIgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGFydERyYWcoZXZlbnQsIHdpZGdldCkgewogICAgICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlIHx8IHdpZGdldC5ub01vdmUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCB3aWRnZXRFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCIuZ3JpZC13aWRnZXQiKTsKICAgICAgICAgIGlmICghd2lkZ2V0RWxlbWVudCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuY29udGFpbmVyQm91bmRzID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7CiAgICAgICAgICAgIHdpZGdldElkOiB3aWRnZXQuaWQsCiAgICAgICAgICAgIHBvaW50ZXJJZDogZXZlbnQucG9pbnRlcklkLAogICAgICAgICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gd2lkZ2V0UmVjdC5sZWZ0LAogICAgICAgICAgICBvZmZzZXRZOiBldmVudC5jbGllbnRZIC0gd2lkZ2V0UmVjdC50b3AsCiAgICAgICAgICAgIHN0YXJ0OiB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH0sCiAgICAgICAgICAgIHByZXZpb3VzUG9zaXRpb246IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICAgICAgY3VycmVudFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgICAgICBsYXN0UGxhY2VtZW50OiBudWxsCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IHRydWU7CiAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuaGFuZGxlRHJhZ01vdmUpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVEcmFnRW5kKTsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRHJhZ01vdmUgPSAoZXZlbnQpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5kcmFnU3RhdGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgICAgIGNvbnN0IGFjdGl2ZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ1N0YXRlLndpZGdldElkKTsKICAgICAgICAgIGlmICghd2lkZ2V0KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldmlvdXNQb3NpdGlvbiA9IHRoaXMuZHJhZ1N0YXRlLnByZXZpb3VzUG9zaXRpb247CiAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb21wdXRlR3JpZENvb3JkaW5hdGVzKHsKICAgICAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgICAgIG1ldHJpY3MsCiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucywKICAgICAgICAgICAgd2lkZ2V0LAogICAgICAgICAgICBydGw6IHRoaXMucnRsLAogICAgICAgICAgICBkcmFnT2Zmc2V0WDogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCwKICAgICAgICAgICAgZHJhZ09mZnNldFk6IHRoaXMuZHJhZ1N0YXRlLm9mZnNldFkKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55IH0sIHRoaXMuY29sdW1ucywgcHJldmlvdXNQb3NpdGlvbik7CiAgICAgICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRXaWRnZXQgPSBwbGFjZW1lbnQud2lkZ2V0cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZSA9IHsKICAgICAgICAgICAgICAuLi50aGlzLmRyYWdTdGF0ZSwKICAgICAgICAgICAgICBjdXJyZW50UG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgICAgICAgbGFzdFBsYWNlbWVudDogcGxhY2VtZW50LAogICAgICAgICAgICAgIHByZXZpb3VzUG9zaXRpb246IHVwZGF0ZWRXaWRnZXQgPyB7IGlkOiB1cGRhdGVkV2lkZ2V0LmlkLCB4OiB1cGRhdGVkV2lkZ2V0LngsIHk6IHVwZGF0ZWRXaWRnZXQueSwgdzogdXBkYXRlZFdpZGdldC53LCBoOiB1cGRhdGVkV2lkZ2V0LmggfSA6IHsgaWQ6IHdpZGdldC5pZCwgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwbGFjZW1lbnQud2lkZ2V0cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgICAgICAgICBpZiAocHJldmlld1dpZGdldCkgewogICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgICAgIGlkOiBwcmV2aWV3V2lkZ2V0LmlkLAogICAgICAgICAgICAgICAgeDogcHJldmlld1dpZGdldC54LAogICAgICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICAgICAgdzogcHJldmlld1dpZGdldC53LAogICAgICAgICAgICAgICAgaDogcHJldmlld1dpZGdldC5oCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7IGlkOiB3aWRnZXQuaWQsIHg6IGNvb3Jkcy54LCB5OiBjb29yZHMueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfTsKICAgICAgICBoYW5kbGVEcmFnRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBkcmFnU3RhdGUgPSB0aGlzLmRyYWdTdGF0ZTsKICAgICAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gZHJhZ1N0YXRlLnBvaW50ZXJJZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA/PyBkcmFnU3RhdGUuc3RhcnQ7CiAgICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KGxheW91dFNvdXJjZSwgZHJhZ1N0YXRlLndpZGdldElkLCB7IHg6IHRhcmdldC54LCB5OiB0YXJnZXQueSB9LCB0aGlzLmNvbHVtbnMsIGRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uKTsKICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZmluYWxXaWRnZXQgPSBwbGFjZW1lbnQud2lkZ2V0cy5maW5kKCh3NCkgPT4gdzQuaWQgPT09IGRyYWdTdGF0ZS53aWRnZXRJZCk7CiAgICAgICAgICAgIGlmIChmaW5hbFdpZGdldCkgewogICAgICAgICAgICAgIGNvbnN0IGhhc092ZXJsYXAgPSBwbGFjZW1lbnQud2lkZ2V0cy5zb21lKCh3NCkgPT4gewogICAgICAgICAgICAgICAgaWYgKHc0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQpCiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFdpZGdldC54IDwgdzQueCArIHc0LncgJiYgZmluYWxXaWRnZXQueCArIGZpbmFsV2lkZ2V0LncgPiB3NC54ICYmIGZpbmFsV2lkZ2V0LnkgPCB3NC55ICsgdzQuaCAmJiBmaW5hbFdpZGdldC55ICsgZmluYWxXaWRnZXQuaCA+IHc0Lnk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgaWYgKCFoYXNPdmVybGFwKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdFBsYWNlbWVudChwbGFjZW1lbnQsIGRyYWdTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1tb3ZlIik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgeDogZHJhZ1N0YXRlLnN0YXJ0LngsIHk6IGRyYWdTdGF0ZS5zdGFydC55IH0gOiB3aWRnZXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLm1hcCgod2lkZ2V0KSA9PiB3aWRnZXQuaWQgPT09IGRyYWdTdGF0ZS53aWRnZXRJZCA/IHsgLi4ud2lkZ2V0LCB4OiBkcmFnU3RhdGUuc3RhcnQueCwgeTogZHJhZ1N0YXRlLnN0YXJ0LnkgfSA6IHdpZGdldCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICAgICAgdGhpcy5kcmFnU3RhdGUgPSBudWxsOwogICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgICAgIH07CiAgICAgICAgc3RhcnRSZXNpemUoZXZlbnQsIHdpZGdldCwgaGFuZGxlcjIpIHsKICAgICAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9SZXNpemUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7CiAgICAgICAgICAgIHdpZGdldElkOiB3aWRnZXQuaWQsCiAgICAgICAgICAgIHBvaW50ZXJJZDogZXZlbnQucG9pbnRlcklkLAogICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyMiwKICAgICAgICAgICAgc3RhcnRQb2ludGVyOiB7IGNsaWVudFg6IGV2ZW50LmNsaWVudFgsIGNsaWVudFk6IGV2ZW50LmNsaWVudFkgfSwKICAgICAgICAgICAgc3RhcnQ6IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICAgICAgc3RhcnRXaWR0aDogd2lkZ2V0LncsCiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0OiB3aWRnZXQuaCwKICAgICAgICAgICAgbGFzdFBsYWNlbWVudDogbnVsbAogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25BY3RpdmUgPSB0cnVlOwogICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVSZXNpemVFbmQpOwogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0geyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9OwogICAgICAgIH0KICAgICAgICBoYW5kbGVSZXNpemVNb3ZlID0gKGV2ZW50KSA9PiB7CiAgICAgICAgICBpZiAoIXRoaXMucmVzaXplU3RhdGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgICAgIGNvbnN0IGFjdGl2ZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpOwogICAgICAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBuZXh0U2l6ZSA9IGNvbXB1dGVSZXNpemVEaW1lbnNpb25zKHsKICAgICAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgICAgIG1ldHJpY3MsCiAgICAgICAgICAgIHN0YXJ0V2lkdGg6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRXaWR0aCwKICAgICAgICAgICAgc3RhcnRIZWlnaHQ6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRIZWlnaHQsCiAgICAgICAgICAgIHN0YXJ0UG9pbnRlcjogdGhpcy5yZXNpemVTdGF0ZS5zdGFydFBvaW50ZXIsCiAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMucmVzaXplU3RhdGUuaGFuZGxlciwKICAgICAgICAgICAgd2lkZ2V0LAogICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiBuZXh0U2l6ZS53aWR0aCwgaDogbmV4dFNpemUuaGVpZ2h0IH0sIHRoaXMuY29sdW1ucywgdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7CiAgICAgICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7IC4uLnRoaXMucmVzaXplU3RhdGUsIGxhc3RQbGFjZW1lbnQ6IHBsYWNlbWVudCB9OwogICAgICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwbGFjZW1lbnQud2lkZ2V0cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgICAgICAgICBpZiAocHJldmlld1dpZGdldCkgewogICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgICAgIGlkOiBwcmV2aWV3V2lkZ2V0LmlkLAogICAgICAgICAgICAgICAgeDogcHJldmlld1dpZGdldC54LAogICAgICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICAgICAgdzogcHJldmlld1dpZGdldC53LAogICAgICAgICAgICAgICAgaDogcHJldmlld1dpZGdldC5oCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBpZDogd2lkZ2V0LmlkLAogICAgICAgICAgICAgICAgeDogd2lkZ2V0LngsCiAgICAgICAgICAgICAgICB5OiB3aWRnZXQueSwKICAgICAgICAgICAgICAgIHc6IG5leHRTaXplLndpZHRoLAogICAgICAgICAgICAgICAgaDogbmV4dFNpemUuaGVpZ2h0CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IG51bGw7CiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9OwogICAgICAgIGhhbmRsZVJlc2l6ZUVuZCA9IChldmVudCkgPT4gewogICAgICAgICAgY29uc3QgcmVzaXplU3RhdGUgPSB0aGlzLnJlc2l6ZVN0YXRlOwogICAgICAgICAgaWYgKCFyZXNpemVTdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IHJlc2l6ZVN0YXRlLmxhc3RQbGFjZW1lbnQgPz8gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChsYXlvdXRTb3VyY2UsIHJlc2l6ZVN0YXRlLndpZGdldElkLCB7CiAgICAgICAgICAgIHg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueCA/PyByZXNpemVTdGF0ZS5zdGFydC54LAogICAgICAgICAgICB5OiB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24/LnkgPz8gcmVzaXplU3RhdGUuc3RhcnQueSwKICAgICAgICAgICAgdzogdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uPy53ID8/IHJlc2l6ZVN0YXRlLnN0YXJ0LncsCiAgICAgICAgICAgIGg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8uaCA/PyByZXNpemVTdGF0ZS5zdGFydC5oCiAgICAgICAgICB9LCB0aGlzLmNvbHVtbnMsIHJlc2l6ZVN0YXRlLnN0YXJ0KTsKICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCByZXNpemVTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1yZXNpemUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSByZXNpemVTdGF0ZS53aWRnZXRJZCA/IHsgLi4ud2lkZ2V0LCB3OiByZXNpemVTdGF0ZS5zdGFydC53LCBoOiByZXNpemVTdGF0ZS5zdGFydC5oIH0gOiB3aWRnZXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0gbnVsbDsKICAgICAgICAgIHRoaXMucmVzaXplU3RhdGUgPSBudWxsOwogICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgICAgIH07CiAgICAgICAgaGFuZGxlSGVhZGVyS2V5ZG93bihldmVudCwgd2lkZ2V0KSB7CiAgICAgICAgICBpZiAoIXRoaXMuZWRpdGFibGUgfHwgd2lkZ2V0Lm5vTW92ZSB8fCB3aWRnZXQubG9ja2VkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgICAgICBjb25zdCBpc1Jlc2l6ZSA9IGV2ZW50LnNoaWZ0S2V5OwogICAgICAgICAgbGV0IHBsYWNlbWVudCA9IG51bGw7CiAgICAgICAgICBpZiAoaXNSZXNpemUgJiYgWyJBcnJvd0xlZnQiLCAiQXJyb3dSaWdodCIsICJBcnJvd1VwIiwgIkFycm93RG93biJdLmluY2x1ZGVzKGtleTIpKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGNvbnN0IGRlbHRhMiA9IGtleTIgPT09ICJBcnJvd1JpZ2h0IiB8fCBrZXkyID09PSAiQXJyb3dEb3duIiA/IDEgOiAtMTsKICAgICAgICAgICAgaWYgKGtleTIgPT09ICJBcnJvd0xlZnQiIHx8IGtleTIgPT09ICJBcnJvd1JpZ2h0IikgewogICAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gd2lkZ2V0Lm1heFcgPz8gdGhpcy5jb2x1bW5zIC0gd2lkZ2V0Lng7CiAgICAgICAgICAgICAgY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgPz8gMSwgTWF0aC5taW4obWF4V2lkdGgsIHdpZGdldC53ICsgZGVsdGEyKSk7CiAgICAgICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IG5leHRXaWR0aCwgaDogd2lkZ2V0LmggfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB3aWRnZXQubWF4SCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICAgICAgY29uc3QgbmV4dEhlaWdodCA9IE1hdGgubWF4KHdpZGdldC5taW5IID8/IDEsIE1hdGgubWluKG1heEhlaWdodCwgd2lkZ2V0LmggKyBkZWx0YTIpKTsKICAgICAgICAgICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IG5leHRIZWlnaHQgfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCB3aWRnZXQuaWQsICJ3aWRnZXQtcmVzaXplIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbW92ZU1hcCA9IHsKICAgICAgICAgICAgQXJyb3dMZWZ0OiB7IGR4OiAtMSwgZHk6IDAgfSwKICAgICAgICAgICAgQXJyb3dSaWdodDogeyBkeDogMSwgZHk6IDAgfSwKICAgICAgICAgICAgQXJyb3dVcDogeyBkeDogMCwgZHk6IC0xIH0sCiAgICAgICAgICAgIEFycm93RG93bjogeyBkeDogMCwgZHk6IDEgfQogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IGRlbHRhID0gbW92ZU1hcFtrZXkyXTsKICAgICAgICAgIGlmICghZGVsdGEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IHRhcmdldFggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLmNvbHVtbnMgLSB3aWRnZXQudywgd2lkZ2V0LnggKyBkZWx0YS5keCkpOwogICAgICAgICAgY29uc3QgdGFyZ2V0WSA9IE1hdGgubWF4KDAsIHdpZGdldC55ICsgZGVsdGEuZHkpOwogICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB0YXJnZXRYLCB5OiB0YXJnZXRZIH0sIHRoaXMuY29sdW1ucyk7CiAgICAgICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZlbnQsIHdpZGdldCkgewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgb3BlbldpZGdldENvbnRleHRNZW51KHsgd2lkZ2V0LCBob3N0OiB0aGlzLCBldmVudCB9KTsKICAgICAgICB9CiAgICAgICAgY29tbWl0UGxhY2VtZW50KHJlc3VsdCwgd2lkZ2V0SWQsIHR5cGU1KSB7CiAgICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHJlc3VsdC53aWRnZXRzOwogICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMud2lkZ2V0cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXRJZCk7CiAgICAgICAgICBpZiAoc3ViamVjdCkgewogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KHR5cGU1LCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICAgICAgICB3aWRnZXQ6IHN1YmplY3QsCiAgICAgICAgICAgICAgICBkaXNwbGFjZWQ6IHJlc3VsdC5tb3ZlZFdpZGdldHMuZmlsdGVyKChpZCkgPT4gaWQgIT09IHdpZGdldElkKSwKICAgICAgICAgICAgICAgIHN3YXBwZWRXaXRoOiByZXN1bHQuc3dhcHBlZFdpdGgKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZW1vdmVXaWRnZXQod2lkZ2V0SWQpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMud2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LmlkICE9PSB3aWRnZXRJZCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ3aWRnZXQtcmVtb3ZlIiwgewogICAgICAgICAgICBkZXRhaWw6IHsgd2lkZ2V0OiB0YXJnZXQgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlV2lkZ2V0KHdpZGdldElkLCB1cGRhdGVzKSB7CiAgICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgLi4udXBkYXRlcyB9IDogd2lkZ2V0KTsKICAgICAgICB9CiAgICAgICAgZ2V0TGF5b3V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5tYXAoKHsgaWQsIHg6IHg0LCB5OiB5NCwgdzogdzQsIGg6IGg4IH0pID0+ICh7IGlkLCB4OiB4NCwgeTogeTQsIHc6IHc0LCBoOiBoOCB9KSk7CiAgICAgICAgfQogICAgICAgIHNldExheW91dChsYXlvdXQpIHsKICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IGFwcGx5TGF5b3V0KHRoaXMud2lkZ2V0cywgbGF5b3V0KTsKICAgICAgICB9CiAgICAgICAgbG9ja0dyaWQoKSB7CiAgICAgICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHVubG9ja0dyaWQoKSB7CiAgICAgICAgICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYWRkV2lkZ2V0KHdpZGdldCwgYXV0b1Bvc2l0aW9uID0gZmFsc2UpIHsKICAgICAgICAgIGNvbnN0IG5leHRXaWRnZXQgPSB7IC4uLndpZGdldCB9OwogICAgICAgICAgaWYgKGF1dG9Qb3NpdGlvbiB8fCBuZXh0V2lkZ2V0LmF1dG9Qb3NpdGlvbikgewogICAgICAgICAgICBjb25zdCBwb3NpdGlvbjMgPSBmaW5kQXZhaWxhYmxlUG9zaXRpb24odGhpcy53aWRnZXRzLCBuZXh0V2lkZ2V0LncsIG5leHRXaWRnZXQuaCwgdGhpcy5jb2x1bW5zKTsKICAgICAgICAgICAgbmV4dFdpZGdldC54ID0gcG9zaXRpb24zLng7CiAgICAgICAgICAgIG5leHRXaWRnZXQueSA9IHBvc2l0aW9uMy55OwogICAgICAgICAgfQogICAgICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgbmV4dFdpZGdldF07CiAgICAgICAgfQogICAgICAgIGNvbXBhY3QoZGlyZWN0aW9uID0gInZlcnRpY2FsIikgewogICAgICAgICAgY29uc3QgbmV4dFdpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KSk7CiAgICAgICAgICBjb21wYWN0TGF5b3V0KG5leHRXaWRnZXRzLCBkaXJlY3Rpb24pOwogICAgICAgICAgdGhpcy53aWRnZXRzID0gbmV4dFdpZGdldHM7CiAgICAgICAgfQogICAgICAgIGFwcGx5QnJlYWtwb2ludExheW91dChicmVha3BvaW50KSB7CiAgICAgICAgICB0aGlzLmFjdGl2ZUJyZWFrcG9pbnQgPSBicmVha3BvaW50OwogICAgICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXlvdXRzPy5bYnJlYWtwb2ludF07CiAgICAgICAgICBpZiAobGF5b3V0KSB7CiAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0KGxheW91dCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5vdGlmeUxheW91dENoYW5nZSgpIHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBsYXlvdXQ6IHRoaXMuZ2V0TGF5b3V0KCkgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgZW5zdXJlTWV0cmljcygpIHsKICAgICAgICAgIGlmICghdGhpcy5tZXRyaWNzKSB7CiAgICAgICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLm1ldHJpY3M7CiAgICAgICAgfQogICAgICAgIGNvbXB1dGVNZXRyaWNzKCkgewogICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdGhpcy5jb250YWluZXJCb3VuZHMgPSBib3VuZHM7CiAgICAgICAgICBjb25zdCBtYXJnaW5zID0gcmVzb2x2ZU1hcmdpbnModGhpcy5tYXJnaW4pOwogICAgICAgICAgdGhpcy5yZXNvbHZlZE1hcmdpbnMgPSBtYXJnaW5zOwogICAgICAgICAgdGhpcy5tZXRyaWNzID0gY2FsY3VsYXRlQ2VsbE1ldHJpY3MoYm91bmRzLndpZHRoLCB0aGlzLmNvbHVtbnMsIG1hcmdpbnMsIHRoaXMuY2VsbEhlaWdodCwgdGhpcy5jZWxsSGVpZ2h0VW5pdCk7CiAgICAgICAgfQogICAgICAgIG9ic2VydmVSZXNpemUoKSB7CiAgICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgICAgIH0KICAgICAgICBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICByZWxlYXNlUG9pbnRlckV2ZW50cygpIHsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIiwgdGhpcy5oYW5kbGVEcmFnTW92ZSk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZURyYWdFbmQpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVSZXNpemVFbmQpOwogICAgICAgIH0KICAgICAgICBweFRvUGVyY2VudCh2YWx1ZTIsIGNvbnRhaW5lcikgewogICAgICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUyIC8gY29udGFpbmVyICogMTAwKS50b0ZpeGVkKDQpKTsKICAgICAgICB9CiAgICAgICAgY29tcHV0ZVdpZGdldFJlY3Qod2lkZ2V0LCBtZXRyaWNzLCBtYXJnaW5zKSB7CiAgICAgICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICAgICAgY29uc3QgbGVmdCA9IHdpZGdldC54ICogKGNlbGxXaWR0aCArIG1hcmdpbnMuaG9yaXpvbnRhbCkgKyBtYXJnaW5zLmhvcml6b250YWw7CiAgICAgICAgICBjb25zdCB0b3AgPSB3aWRnZXQueSAqIChjZWxsSGVpZ2h0ICsgbWFyZ2lucy52ZXJ0aWNhbCkgKyBtYXJnaW5zLnZlcnRpY2FsOwogICAgICAgICAgY29uc3Qgd2lkdGggPSB3aWRnZXQudyAqIGNlbGxXaWR0aCArIE1hdGgubWF4KDAsIHdpZGdldC53IC0gMSkgKiBtYXJnaW5zLmhvcml6b250YWw7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSB3aWRnZXQuaCAqIGNlbGxIZWlnaHQgKyBNYXRoLm1heCgwLCB3aWRnZXQuaCAtIDEpICogbWFyZ2lucy52ZXJ0aWNhbDsKICAgICAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9OwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0Rhc2hib2FyZGdyaWQyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2luZGV4LmpzCnZhciBpbml0X2RlZXNfZGFzaGJvYXJkZ3JpZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1kYXNoYm9hcmRncmlkL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19kYXNoYm9hcmRncmlkKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzCmZ1bmN0aW9uIGRlbW9GdW5jNDcoKSB7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGA7Cn0KdmFyIGluaXRfZGVlc19oZWFkaW5nX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcwp2YXIgX19lc0RlY29yYXRlNjcsIF9fcnVuSW5pdGlhbGl6ZXJzNjgsIERlZXNIZWFkaW5nOwp2YXIgaW5pdF9kZWVzX2hlYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2hlYWRpbmdfZGVtbygpOwogICAgaW5pdF9mb250cygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM2OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0hlYWRpbmcgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oZWFkaW5nIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9sZXZlbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xldmVsX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xldmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSGVhZGluZzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9sZXZlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY3KHRoaXMsIG51bGwsIF9sZXZlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsZXZlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGV2ZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGV2ZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5sZXZlbCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGV2ZWxfaW5pdGlhbGl6ZXJzLCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNjcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0hlYWRpbmcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIGRlbW8KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDc7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkxheW91dCJdOwogICAgICAgICNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfbGV2ZWxfaW5pdGlhbGl6ZXJzLCAiMSIpOwogICAgICAgIC8vIHByb3BlcnRpZXMKICAgICAgICAvKioKICAgICAgICAgKiBIZWFkaW5nIGxldmVsOiAxLTYgZm9yIGgxLWg2LCBvciAnaHInIGZvciBob3Jpem9udGFsIHJ1bGUgc3R5bGUKICAgICAgICAgKi8KICAgICAgICBnZXQgbGV2ZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGV2ZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxldmVsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGV2ZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDIFNUWUxFUwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBIZWFkaW5nIHN0eWxlcyAqLwogICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKICAgICAgICBtYXJnaW46IDE2cHggMCA4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICBoMSB7IGZvbnQtc2l6ZTogMzJweDsgZm9udC1mYW1pbHk6ICR7Y3NzQ2FsU2Fuc0ZvbnRGYW1pbHl9OyBsZXR0ZXItc3BhY2luZzogMC4wMjVlbTt9CiAgICAgIGgyIHsgZm9udC1zaXplOiAyOHB4OyB9CiAgICAgIGgzIHsgZm9udC1zaXplOiAyNHB4OyB9CiAgICAgIGg0IHsgZm9udC1zaXplOiAyMHB4OyB9CiAgICAgIGg1IHsgZm9udC1zaXplOiAxNnB4OyB9CiAgICAgIGg2IHsgZm9udC1zaXplOiAxNHB4OyB9CiAgICAgIC8qIEhvcml6b250YWwgcnVsZSBzdHlsZSBoZWFkaW5nICovCiAgICAgIC5oZWFkaW5nLWhyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICAgIC8qIEZhZGUgbGluZXMgdG93YXJkIGFuZCBhd2F5IGZyb20gdGV4dCBmb3IgaHIgc3R5bGUgKi8KICAgICAgLmhlYWRpbmctaHI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIGluIHRvd2FyZCBjZW50ZXIgKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgI2NjYykiLCAibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgIzMzMykiKX07CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgfQogICAgICAuaGVhZGluZy1ocjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgLyogZmFkZSBvdXQgYXdheSBmcm9tIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNjY2MsIHRyYW5zcGFyZW50KSIsICJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMzMzMsIHRyYW5zcGFyZW50KSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC8qIFNtYWxsIGhyIHZhcmlhbnQgd2l0aCByZWR1Y2VkIG1hcmdpbnMgKi8KICAgICAgLmhlYWRpbmctaHIuaGVhZGluZy1oci1zbWFsbCB7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgICAgLmhlYWRpbmctaHIuaGVhZGluZy1oci1zbWFsbDo6YmVmb3JlLAogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjphZnRlciB7CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMubGV2ZWwpIHsKICAgICAgICAgICAgY2FzZSAiMSI6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxoMT48c2xvdD48L3Nsb3Q+PC9oMT5gOwogICAgICAgICAgICBjYXNlICIyIjoKICAgICAgICAgICAgICByZXR1cm4gYjJgPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7CiAgICAgICAgICAgIGNhc2UgIjMiOgogICAgICAgICAgICAgIHJldHVybiBiMmA8aDM+PHNsb3Q+PC9zbG90PjwvaDM+YDsKICAgICAgICAgICAgY2FzZSAiNCI6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxoND48c2xvdD48L3Nsb3Q+PC9oND5gOwogICAgICAgICAgICBjYXNlICI1IjoKICAgICAgICAgICAgICByZXR1cm4gYjJgPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7CiAgICAgICAgICAgIGNhc2UgIjYiOgogICAgICAgICAgICAgIHJldHVybiBiMmA8aDY+PHNsb3Q+PC9zbG90PjwvaDY+YDsKICAgICAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDsKICAgICAgICAgICAgY2FzZSAiaHItc21hbGwiOgogICAgICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBiMmA8aDE+PHNsb3Q+PC9zbG90PjwvaDE+YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM2OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0hlYWRpbmcyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaGVhZGluZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1oZWFkaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19oZWFkaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1sYWJlbC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX2xhYmVsMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLWxhYmVsL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19sYWJlbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtcGFnaW5hdGlvbi9kZWVzLXBhZ2luYXRpb24uZGVtby5qcwp2YXIgZGVtb0Z1bmM0ODsKdmFyIGluaXRfZGVlc19wYWdpbmF0aW9uX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzQ4ID0gKCkgPT4gYjJgCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsIGUxMS5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIiwgZTExLmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5qcwp2YXIgX19lc0RlY29yYXRlNjgsIF9fcnVuSW5pdGlhbGl6ZXJzNjksIERlZXNQYWdpbmF0aW9uOwp2YXIgaW5pdF9kZWVzX3BhZ2luYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX3BhZ2luYXRpb25fZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlNjggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM2OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1BhZ2luYXRpb24gPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wYWdpbmF0aW9uIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9wYWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdG90YWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF90b3RhbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90b3RhbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1BhZ2luYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfcGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF90b3RhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY4KHRoaXMsIG51bGwsIF9wYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnBhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VfaW5pdGlhbGl6ZXJzLCBfcGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfdG90YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRvdGFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudG90YWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsX2luaXRpYWxpemVycywgX3RvdGFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTY4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNQYWdpbmF0aW9uMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDg7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIkxheW91dCJdOwogICAgICAgICNwYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlX2luaXRpYWxpemVycywgMSk7CiAgICAgICAgLyoqIEN1cnJlbnQgcGFnZSAoMS1iYXNlZCkgKi8KICAgICAgICBnZXQgcGFnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwYWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdG90YWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfdG90YWxfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICAgICAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAqLwogICAgICAgIGdldCB0b3RhbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0b3RhbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdG90YWwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0b3RhbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBtYXJnaW46IDAgMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICAgICAgfQogICAgICBidXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlIiwgIiM0NDQiKX07CiAgICAgIH0KICAgICAgYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYWFhIiwgIiM2NjYiKX07CiAgICAgIH0KICAgICAgYnV0dG9uLmN1cnJlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICMwMDUwYjk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CiAgICAgIHNwYW4uZWxsaXBzaXMgewogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIGdldCBwYWdlcygpIHsKICAgICAgICAgIGNvbnN0IHBhZ2VzID0gW107CiAgICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMudG90YWw7CiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYWdlOwogICAgICAgICAgaWYgKHRvdGFsIDw9IDcpIHsKICAgICAgICAgICAgZm9yIChsZXQgaTExID0gMTsgaTExIDw9IHRvdGFsOyBpMTErKykgewogICAgICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGFnZXMucHVzaCgxKTsKICAgICAgICAgICAgaWYgKGN1cnJlbnQgPiA0KSB7CiAgICAgICAgICAgICAgcGFnZXMucHVzaCgiLi4uIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50IC0gMik7CiAgICAgICAgICAgIGNvbnN0IGVuZDMgPSBNYXRoLm1pbih0b3RhbCAtIDEsIGN1cnJlbnQgKyAyKTsKICAgICAgICAgICAgZm9yIChsZXQgaTExID0gc3RhcnQ7IGkxMSA8PSBlbmQzOyBpMTErKykgewogICAgICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3VycmVudCA8IHRvdGFsIC0gMykgewogICAgICAgICAgICAgIHBhZ2VzLnB1c2goIi4uLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBhZ2VzLnB1c2godG90YWwpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHBhZ2VzOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxidXR0b24KICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNoYW5nZVBhZ2UodGhpcy5wYWdlIC0gMSl9CiAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlIDw9IDF9CiAgICAgICAgYXJpYS1sYWJlbD0iUHJldmlvdXMgcGFnZSIKICAgICAgPgogICAgICAgIOKAuQogICAgICA8L2J1dHRvbj4KICAgICAgJHt0aGlzLnBhZ2VzLm1hcCgocDcpID0+IHA3ID09PSAiLi4uIiA/IGIyYDxzcGFuIGNsYXNzPSJlbGxpcHNpcyI+4oCmPC9zcGFuPmAgOiBiMmAKICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0iJHtwNyA9PT0gdGhpcy5wYWdlID8gImN1cnJlbnQiIDogIiJ9IgogICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHA3KX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3A3ID09PSB0aGlzLnBhZ2V9CiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSJQYWdlICR7cDd9IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7cDd9CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIGApfQogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSArIDEpfQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA+PSB0aGlzLnRvdGFsfQogICAgICAgIGFyaWEtbGFiZWw9Ik5leHQgcGFnZSIKICAgICAgPgogICAgICAgIOKAugogICAgICA8L2J1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGNoYW5nZVBhZ2UobmV3UGFnZSkgewogICAgICAgICAgaWYgKG5ld1BhZ2UgPCAxIHx8IG5ld1BhZ2UgPiB0aGlzLnRvdGFsIHx8IG5ld1BhZ2UgPT09IHRoaXMucGFnZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnBhZ2UgPSBuZXdQYWdlOwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBwYWdlOiB0aGlzLnBhZ2UgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF90b3RhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczY5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzUGFnaW5hdGlvbjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLXBhZ2luYXRpb24vaW5kZXguanMKdmFyIGluaXRfZGVlc19wYWdpbmF0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLXBhZ2luYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3BhZ2luYXRpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLXBhbmVsL2luZGV4LmpzCnZhciBpbml0X2RlZXNfcGFuZWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtcGFuZWwvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3BhbmVsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5kZW1vLmpzCnZhciBzdGVwcGVyRGVtbzsKdmFyIGluaXRfZGVlc19zdGVwcGVyX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBzdGVwcGVyRGVtbyA9ICgpID0+IGIyYAogIDxkZWVzLXN0ZXBwZXIKICAgIC5zdGVwcz0ke1sKICAgICAgewogICAgICAgIHRpdGxlOiAiQWNjb3VudCBTZXR1cCIsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iZW1haWwiIGxhYmVsPSJXb3JrIEVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InBhc3N3b3JkIiBsYWJlbD0iQ3JlYXRlIFBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgICAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIHRpdGxlOiAiUHJvZmlsZSBEZXRhaWxzIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgICAgIHZhbGlkYXRpb25GdW5jOiBhc3luYyAoc3RlcHBlckFyZywgZWxlbWVudEFyZykgPT4gewogICAgICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgdGl0bGU6ICJDb250YWN0IEluZm9ybWF0aW9uIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIGtleT0icGhvbmUiIGxhYmVsPSJNb2JpbGUgTnVtYmVyIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJjb21wYW55IiBsYWJlbD0iQ29tcGFueSI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgICAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIHRpdGxlOiAiVGVhbSBTaXplIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgICAga2V5PSJ0ZWFtU2l6ZSIKICAgICAgICAgICAgICBsYWJlbD0iSG93IGJpZyBpcyB5b3VyIHRlYW0/IgogICAgICAgICAgICAgIC5vcHRpb25zPSR7WwogICAgICAgICAgeyBsYWJlbDogIjEtNSIsIHZhbHVlOiAiMS01IiB9LAogICAgICAgICAgeyBsYWJlbDogIjYtMjAiLCB2YWx1ZTogIjYtMjAiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiMjEtNTAiLCB2YWx1ZTogIjIxLTUwIiB9LAogICAgICAgICAgeyBsYWJlbDogIjUxKyIsIHZhbHVlOiAiNTErIiB9CiAgICAgICAgXX0KICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICAgICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgICAgICBjb25zdCBkZWVzRm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0aXRsZTogIkdvYWxzIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgICAga2V5PSJnb2FsIgogICAgICAgICAgICAgIGxhYmVsPSJNYWluIG9iamVjdGl2ZSIKICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICAgIHsgbGFiZWw6ICJPbmJvYXJkaW5nIiwgdmFsdWU6ICJvbmJvYXJkaW5nIiB9LAogICAgICAgICAgeyBsYWJlbDogIkFuYWx5dGljcyIsIHZhbHVlOiAiYW5hbHl0aWNzIiB9LAogICAgICAgICAgeyBsYWJlbDogIkF1dG9tYXRpb24iLCB2YWx1ZTogImF1dG9tYXRpb24iIH0KICAgICAgICBdfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgICAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIHRpdGxlOiAiQnJhbmQgUHJlZmVyZW5jZXMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImJyYW5kQ29sb3IiIGxhYmVsPSJQcmltYXJ5IGJyYW5kIGNvbG9yIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InRvbmUiIGxhYmVsPSJQcmVmZXJyZWQgdG9uZSAoZS5nLiBmcmllbmRseSwgZm9ybWFsKSI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgICAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIHRpdGxlOiAiSW50ZWdyYXRpb25zIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgICAgICBrZXk9ImludGVncmF0aW9ucyIKICAgICAgICAgICAgICBsYWJlbD0iSW50ZWdyYXRpb25zIGluIHVzZSIKICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iQWRkIGludGVncmF0aW9uIgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgICAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIHRpdGxlOiAiUmV2aWV3ICYgTGF1bmNoIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGAKICAgICAgfQogICAgXX0KICA+PC9kZWVzLXN0ZXBwZXI+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5qcwp2YXIgX19lc0RlY29yYXRlNjksIF9fcnVuSW5pdGlhbGl6ZXJzNzAsIERlZXNTdGVwcGVyOwp2YXIgaW5pdF9kZWVzX3N0ZXBwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgICBpbml0X2NvbG9ycygpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGlzdF90czI4KCk7CiAgICBpbml0X2RlZXNfc3RlcHBlcl9kZW1vKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU2OSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczcwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzU3RlcHBlciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0ZXBwZXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3N0ZXBzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc3RlcHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3RlcHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFN0ZXBfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzU3RlcHBlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9zdGVwc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogQXJyYXkKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9zZWxlY3RlZFN0ZXBfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdAogICAgICAgICAgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3N0ZXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0ZXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGVwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zdGVwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN0ZXBzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGVwc19pbml0aWFsaXplcnMsIF9zdGVwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkU3RlcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRTdGVwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkU3RlcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkU3RlcCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRTdGVwX2luaXRpYWxpemVycywgX3NlbGVjdGVkU3RlcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU2OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBzdGVwcGVyRGVtbzsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTGF5b3V0IiwgIkZvcm0iXTsKICAgICAgICAjc3RlcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX3N0ZXBzX2luaXRpYWxpemVycywgW10pOwogICAgICAgIGdldCBzdGVwcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3RlcHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfc3RlcHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgc2VsZWN0ZWRTdGVwKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkU3RlcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRTdGVwKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMGYwZjExIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTJlOGYwIiwgIiMyNzI3MjkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NDc0OGIiLCAiI2ExYTFhYSIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC40NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCAicmdiYSg2MywgNjMsIDcwLCAwLjg1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwgInJnYmEoMzksIDM5LCA0MiwgMC44NSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBmMTcyYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoZGFyay5ibHVlLCBkYXJrLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNykiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAuZ29CYWNrOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuODUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC42KSIpfTsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjayBzcGFuIHsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjazpob3ZlciBzcGFuIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC50aXRsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiA2NHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoKHN0ZXBBcmcpID0+IGIyYDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ic3RlcCAke3N0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwID8gInNlbGVjdGVkIiA6IG51bGx9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA+IHRoaXMuZ2V0SW5kZXhPZlN0ZXAodGhpcy5zZWxlY3RlZFN0ZXApID8gImhpZGRlblN0ZXAiIDogIiJ9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA9PT0gMCA/ICJlbnRyYW5jZSIgOiAiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoc3RlcEFyZykgPiAwID8gYjJgPGRpdiBjbGFzcz0iZ29CYWNrIiBAY2xpY2s9JHt0aGlzLmdvQmFja30+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBJbnRlciI+PC08L3NwYW4+IGdvIHRvIHByZXZpb3VzIHN0ZXA8L2Rpdj5gIDogYGB9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KChlbGVtZW50QXJnKSA9PiBlbGVtZW50QXJnID09PSBzdGVwQXJnKSArIDF9IG9mCiAgICAgICAgICAgICAgICAke3RoaXMuc3RlcHMubGVuZ3RofQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3N0ZXBBcmcudGl0bGV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHtzdGVwQXJnLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBnZXRJbmRleE9mU3RlcCA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zZWxlY3RlZFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpLCAoc3RlcEFyZykgPT4gewogICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnMikgPT4gc3RlcEFyZyA9PT0gc3RlcEFyZzIpOwogICAgICAgIH0pOwogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSB0aGlzLnN0ZXBzWzBdOwogICAgICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzNTApOwogICAgICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwLmVudHJhbmNlIik/LmNsYXNzTGlzdC5yZW1vdmUoImVudHJhbmNlIik7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZWQoKSB7CiAgICAgICAgICB0aGlzLnNldFNjcm9sbFN0YXR1cygpOwogICAgICAgIH0KICAgICAgICBzY3JvbGxlcjsKICAgICAgICBhc3luYyBzZXRTY3JvbGxTdGF0dXMoKSB7CiAgICAgICAgICBjb25zdCBzdGVwcGVyQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIik7CiAgICAgICAgICBjb25zdCBmaXJzdFN0ZXBFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwIik7CiAgICAgICAgICBjb25zdCBzZWxlY3RlZFN0ZXBFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZCIpOwogICAgICAgICAgaWYgKCFzZWxlY3RlZFN0ZXBFbGVtZW50KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wKSB7CiAgICAgICAgICAgIHN0ZXBwZXJDb250YWluZXIuc3R5bGUucGFkZGluZ1RvcCA9IGAke3N0ZXBwZXJDb250YWluZXIub2Zmc2V0SGVpZ2h0IC8gMiAtIHNlbGVjdGVkU3RlcEVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMn1weGA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmxvZygiU2V0dGluZyBzY3JvbGwgc3RhdHVzIik7CiAgICAgICAgICBjb25zb2xlLmxvZyhzZWxlY3RlZFN0ZXBFbGVtZW50KTsKICAgICAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRUb3AgLSBzdGVwcGVyQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDIgKyBzZWxlY3RlZFN0ZXBFbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CiAgICAgICAgICBjb25zb2xlLmxvZyhzY3JvbGxQb3NpdGlvbik7CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGVyKSB7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLlN3ZWV0U2Nyb2xsKHsKICAgICAgICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSwKICAgICAgICAgICAgICBob3Jpem9udGFsOiBmYWxzZSwKICAgICAgICAgICAgICBlYXNpbmc6ICJlYXNlSW5PdXRFeHBvIiwKICAgICAgICAgICAgICBkdXJhdGlvbjogNzAwCiAgICAgICAgICAgIH0sIHN0ZXBwZXJDb250YWluZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCAmJiB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYykgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RlZFN0ZXAudmFsaWRhdGlvbkZ1bmModGhpcywgc2VsZWN0ZWRTdGVwRWxlbWVudCwgdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNjcm9sbGVyLnRvKHNjcm9sbFBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZ29CYWNrKCkgewogICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPD0gMCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLnN0ZXBzW2N1cnJlbnRJbmRleF07CiAgICAgICAgICBjdXJyZW50U3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgICAgIHByZXZpb3VzU3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSBwcmV2aW91c1N0ZXA7CiAgICAgICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMDApOwogICAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAub25SZXR1cm5Ub1N0ZXBGdW5jPy4odGhpcywgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZCIpKTsKICAgICAgICB9CiAgICAgICAgZ29OZXh0KCkgewogICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlcikgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXhdOwogICAgICAgICAgY3VycmVudFN0ZXAudmFsaWRhdGlvbkZ1bmNDYWxsZWQgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggKyAxXTsKICAgICAgICAgIG5leHRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcCA9IG5leHRTdGVwOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1N0ZXBwZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2luZGV4LmpzCnZhciBpbml0X2RlZXNfc3RlcHBlcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zdGVwcGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfbGF5b3V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19jaGlwczIoKTsKICAgIGluaXRfZGVlc19kYXNoYm9hcmRncmlkMigpOwogICAgaW5pdF9kZWVzX2hlYWRpbmcyKCk7CiAgICBpbml0X2RlZXNfbGFiZWwyKCk7CiAgICBpbml0X2RlZXNfcGFnaW5hdGlvbjIoKTsKICAgIGluaXRfZGVlc19wYW5lbDIoKTsKICAgIGluaXRfZGVlc19zdGVwcGVyMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1pbWFnZS12aWV3ZXIvZGVtby5qcwp2YXIgZGVtbzsKdmFyIGluaXRfZGVtbzYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLWltYWdlLXZpZXdlci9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgfQoKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KCiAgICBkZWVzLWltYWdlLXZpZXdlciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuY29tcGFjdCB7CiAgICAgIGhlaWdodDogMjUwcHg7CiAgICB9CiAgPC9zdHlsZT4KCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkpQRUcgSW1hZ2Ugd2l0aCBUb29sYmFyPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkEgbGFuZHNjYXBlIHBob3RvIHdpdGggem9vbSwgcGFuLCBmaXQsIGFuZCBkb3dubG9hZCBjb250cm9scy48L2Rpdj4KICAgICAgPGRlZXMtaW1hZ2Utdmlld2VyCiAgICAgICAgc3JjPSJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjc0NDAzODEzNi00NjI3MzgzNGIzZmI/dz0xMjAwIgogICAgICAgIGFsdD0iTW91bnRhaW4gbGFuZHNjYXBlIgogICAgICA+PC9kZWVzLWltYWdlLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QTkcgd2l0aCBUcmFuc3BhcmVuY3k8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+VHJhbnNwYXJlbnQgUE5HIGRpc3BsYXllZCBvbiBhIGNoZWNrZXJib2FyZCBiYWNrZ3JvdW5kLjwvZGl2PgogICAgICA8ZGVlcy1pbWFnZS12aWV3ZXIKICAgICAgICBzcmM9Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvNC80Ny9QTkdfdHJhbnNwYXJlbmN5X2RlbW9uc3RyYXRpb25fMS5wbmciCiAgICAgICAgYWx0PSJQTkcgdHJhbnNwYXJlbmN5IGRlbW8iCiAgICAgID48L2RlZXMtaW1hZ2Utdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNWRyBJbWFnZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TY2FsYWJsZSB2ZWN0b3IgZ3JhcGhpYy48L2Rpdj4KICAgICAgPGRlZXMtaW1hZ2Utdmlld2VyCiAgICAgICAgc3JjPSJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzAvMDIvU1ZHX2xvZ28uc3ZnIgogICAgICAgIGFsdD0iU1ZHIGxvZ28iCiAgICAgICAgZml0PSJjb250YWluIgogICAgICA+PC9kZWVzLWltYWdlLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5ObyBUb29sYmFyIFZhcmlhbnQ8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+SW1hZ2Ugdmlld2VyIHdpdGggdGhlIHRvb2xiYXIgaGlkZGVuLjwvZGl2PgogICAgICA8ZGVlcy1pbWFnZS12aWV3ZXIKICAgICAgICBjbGFzcz0iY29tcGFjdCIKICAgICAgICBzcmM9Imh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDY5NDc0OTY4MDI4LTU2NjIzZjAyZTQyZT93PTgwMCIKICAgICAgICBhbHQ9Ik5hdHVyZSBzY2VuZSIKICAgICAgICAuc2hvd1Rvb2xiYXI9JHtmYWxzZX0KICAgICAgPjwvZGVlcy1pbWFnZS12aWV3ZXI+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtaW1hZ2Utdmlld2VyL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlNzAsIF9fcnVuSW5pdGlhbGl6ZXJzNzEsIERlZXNJbWFnZVZpZXdlcjsKdmFyIGluaXRfY29tcG9uZW50NiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtaW1hZ2Utdmlld2VyL2NvbXBvbmVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVtbzYoKTsKICAgIF9fZXNEZWNvcmF0ZTcwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNJbWFnZVZpZXdlciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWltYWdlLXZpZXdlciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfc3JjX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc3JjX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NyY19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FsdF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FsdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hbHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maXRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9maXRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZml0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3pvb21fZGVjb3JhdG9yczsKICAgICAgbGV0IF96b29tX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3pvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wYW5YX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGFuWF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wYW5YX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGFuWV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3BhbllfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGFuWV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzRHJhZ2dpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sb2FkaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXJyb3JfZGVjb3JhdG9yczsKICAgICAgbGV0IF9lcnJvcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lcnJvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ltYWdlTmF0dXJhbFdpZHRoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW1hZ2VOYXR1cmFsV2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW1hZ2VOYXR1cmFsV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbWFnZU5hdHVyYWxIZWlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbWFnZU5hdHVyYWxIZWlnaHRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW1hZ2VOYXR1cmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSW1hZ2VWaWV3ZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfc3JjX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfYWx0X2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfZml0X2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3pvb21fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wYW5YX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfcGFuWV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzRHJhZ2dpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZXJyb3JfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pbWFnZU5hdHVyYWxXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2ltYWdlTmF0dXJhbEhlaWdodF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX3NyY19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzcmMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNyYyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zcmMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zcmMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NyY19pbml0aWFsaXplcnMsIF9zcmNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX2FsdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hbHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsdF9pbml0aWFsaXplcnMsIF9hbHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX2ZpdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maXQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpdF9pbml0aWFsaXplcnMsIF9maXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUb29sYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VG9vbGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VG9vbGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dUb29sYmFyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MCh0aGlzLCBudWxsLCBfem9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ6b29tIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ6b29tIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai56b29tID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF96b29tX2luaXRpYWxpemVycywgX3pvb21fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX3BhblhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGFuWCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFuWCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYW5YLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucGFuWCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFuWF9pbml0aWFsaXplcnMsIF9wYW5YX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcwKHRoaXMsIG51bGwsIF9wYW5ZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhblkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhblkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFuWSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnBhblkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhbllfaW5pdGlhbGl6ZXJzLCBfcGFuWV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MCh0aGlzLCBudWxsLCBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0RyYWdnaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzRHJhZ2dpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0RyYWdnaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubG9hZGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcwKHRoaXMsIG51bGwsIF9lcnJvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXJyb3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXJyb3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzAodGhpcywgbnVsbCwgX2ltYWdlTmF0dXJhbFdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImltYWdlTmF0dXJhbFdpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbWFnZU5hdHVyYWxXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbWFnZU5hdHVyYWxXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmltYWdlTmF0dXJhbFdpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbWFnZU5hdHVyYWxXaWR0aF9pbml0aWFsaXplcnMsIF9pbWFnZU5hdHVyYWxXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MCh0aGlzLCBudWxsLCBfaW1hZ2VOYXR1cmFsSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImltYWdlTmF0dXJhbEhlaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW1hZ2VOYXR1cmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmltYWdlTmF0dXJhbEhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmltYWdlTmF0dXJhbEhlaWdodCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW1hZ2VOYXR1cmFsSGVpZ2h0X2luaXRpYWxpemVycywgX2ltYWdlTmF0dXJhbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSW1hZ2VWaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTWVkaWEiXTsKICAgICAgICAjc3JjX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9zcmNfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgZ2V0IHNyYygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzcmNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNyYyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NyY19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWx0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfYWx0X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgYWx0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FsdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWx0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWx0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNmaXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9hbHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9maXRfaW5pdGlhbGl6ZXJzLCAiY29udGFpbiIpKTsKICAgICAgICBnZXQgZml0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZml0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZml0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX2ZpdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX3Nob3dUb29sYmFyX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjem9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfem9vbV9pbml0aWFsaXplcnMsIDEpKTsKICAgICAgICBnZXQgem9vbSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN6b29tX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB6b29tKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jem9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcGFuWF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX3pvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9wYW5YX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBwYW5YKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BhblhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBhblgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwYW5YX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwYW5ZX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfcGFuWF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX3BhbllfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IHBhblkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcGFuWV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcGFuWSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BhbllfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9wYW5ZX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzRHJhZ2dpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNEcmFnZ2luZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgbG9hZGluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBlcnJvcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZXJyb3IodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW1hZ2VOYXR1cmFsV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX2ltYWdlTmF0dXJhbFdpZHRoX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBpbWFnZU5hdHVyYWxXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbWFnZU5hdHVyYWxXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW1hZ2VOYXR1cmFsV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbWFnZU5hdHVyYWxXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW1hZ2VOYXR1cmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MSh0aGlzLCBfaW1hZ2VOYXR1cmFsV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcxKHRoaXMsIF9pbWFnZU5hdHVyYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGltYWdlTmF0dXJhbEhlaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbWFnZU5hdHVyYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGltYWdlTmF0dXJhbEhlaWdodCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ltYWdlTmF0dXJhbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBkcmFnU3RhcnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzEodGhpcywgX2ltYWdlTmF0dXJhbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIDApOwogICAgICAgIGRyYWdTdGFydFkgPSAwOwogICAgICAgIGRyYWdTdGFydFBhblggPSAwOwogICAgICAgIGRyYWdTdGFydFBhblkgPSAwOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLnZpZXdlci1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDRweDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1idXR0b246YWN0aXZlIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgfQoKICAgICAgICAuem9vbS1sZXZlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgbWluLXdpZHRoOiA0OHB4OwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaW1hZ2UtYXJlYSB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIGN1cnNvcjogJHt0aGlzLnpvb20gPiAxID8gdGhpcy5pc0RyYWdnaW5nID8gImdyYWJiaW5nIiA6ICJncmFiIiA6ICJkZWZhdWx0In07CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tlcmJvYXJkIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgYmFja2dyb3VuZC1pbWFnZToKICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9IDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KC00NWRlZywgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzFhMWExYSIpfSAyNSUsIHRyYW5zcGFyZW50IDI1JSksCiAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgdHJhbnNwYXJlbnQgNzUlLCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9IDc1JSksCiAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzFhMWExYSIpfSA3NSUpOwogICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNnB4IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgOHB4LCA4cHggLThweCwgLThweCAwcHg7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgfQoKICAgICAgICAuaW1hZ2Utd3JhcHBlciB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgke3RoaXMucGFuWH1weCwgJHt0aGlzLnBhbll9cHgpIHNjYWxlKCR7dGhpcy56b29tfSk7CiAgICAgICAgICB0cmFuc2l0aW9uOiAke3RoaXMuaXNEcmFnZ2luZyA/ICJub25lIiA6ICJ0cmFuc2Zvcm0gMC4ycyBlYXNlIn07CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIH0KCiAgICAgICAgLmltYWdlLXdyYXBwZXIgaW1nIHsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgICBvYmplY3QtZml0OiAke3RoaXMuZml0fTsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAuaW1hZ2Utd3JhcHBlciBpbWcuYWN0dWFsIHsKICAgICAgICAgIG1heC13aWR0aDogbm9uZTsKICAgICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgICBvYmplY3QtZml0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctb3ZlcmxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwLjgpIiwgInJnYmEoMCwwLDAsMC42KSIpfTsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjM2YzZjQ2Iil9OwogICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGFuaW1hdGlvbjogc3BpbiAwLjhzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgICB9CgogICAgICAgIC5lcnJvci1vdmVybGF5IHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIH0KCiAgICAgICAgLmVycm9yLW92ZXJsYXkgLmVycm9yLWljb24gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZXJyb3ItdGV4dCB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgfQoKICAgICAgICAuaW1hZ2UtaW5mbyB7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhMWExYWEiLCAiIzcxNzE3YSIpfTsKICAgICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxkaXYgY2xhc3M9InZpZXdlci1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnpvb21PdXR9IHRpdGxlPSJab29tIG91dCI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5yZXNldFpvb219PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Inpvb20tbGV2ZWwiPiR7TWF0aC5yb3VuZCh0aGlzLnpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0ke3RoaXMuem9vbUlufSB0aXRsZT0iWm9vbSBpbiI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tSW4iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0ke3RoaXMuZml0VG9TY3JlZW59IHRpdGxlPSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1heGltaXplIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5hY3R1YWxTaXplfSB0aXRsZT0iQWN0dWFsIHNpemUgKDEwMCUpIj4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNjYW4iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0ke3RoaXMuZG93bmxvYWR9IHRpdGxlPSJEb3dubG9hZCI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpEb3dubG9hZCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuaW1hZ2VOYXR1cmFsV2lkdGggPiAwID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW1hZ2UtaW5mbyI+JHt0aGlzLmltYWdlTmF0dXJhbFdpZHRofSB4ICR7dGhpcy5pbWFnZU5hdHVyYWxIZWlnaHR9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJpbWFnZS1hcmVhIgogICAgICAgICAgQHdoZWVsPSR7dGhpcy5oYW5kbGVXaGVlbH0KICAgICAgICAgIEBtb3VzZWRvd249JHt0aGlzLmhhbmRsZU1vdXNlRG93bn0KICAgICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgICAgIEBtb3VzZXVwPSR7dGhpcy5oYW5kbGVNb3VzZVVwfQogICAgICAgICAgQG1vdXNlbGVhdmU9JHt0aGlzLmhhbmRsZU1vdXNlVXB9CiAgICAgICAgICBAZGJsY2xpY2s9JHt0aGlzLmhhbmRsZURvdWJsZUNsaWNrfQogICAgICAgID4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrZXJib2FyZCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS13cmFwcGVyIj4KICAgICAgICAgICAgJHt0aGlzLnNyYyA/IGIyYAogICAgICAgICAgICAgIDxpbWcKICAgICAgICAgICAgICAgIGNsYXNzPSIke3RoaXMuZml0ID09PSAiYWN0dWFsIiA/ICJhY3R1YWwiIDogIiJ9IgogICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuc3JjfSIKICAgICAgICAgICAgICAgIGFsdD0iJHt0aGlzLmFsdH0iCiAgICAgICAgICAgICAgICBAbG9hZD0ke3RoaXMuaGFuZGxlSW1hZ2VMb2FkfQogICAgICAgICAgICAgICAgQGVycm9yPSR7dGhpcy5oYW5kbGVJbWFnZUVycm9yfQogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSJmYWxzZSIKICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nICYmIHRoaXMuc3JjID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3Itb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iZXJyb3ItaWNvbiIgaWNvbj0ibHVjaWRlOkltYWdlT2ZmIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3ItdGV4dCI+JHt0aGlzLmVycm9yfTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgem9vbUluKCkgewogICAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4oMTAsIHRoaXMuem9vbSAqIDEuMjUpOwogICAgICAgIH0KICAgICAgICB6b29tT3V0KCkgewogICAgICAgICAgdGhpcy56b29tID0gTWF0aC5tYXgoMC4xLCB0aGlzLnpvb20gLyAxLjI1KTsKICAgICAgICAgIGlmICh0aGlzLnpvb20gPD0gMSkgewogICAgICAgICAgICB0aGlzLnBhblggPSAwOwogICAgICAgICAgICB0aGlzLnBhblkgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXNldFpvb20oKSB7CiAgICAgICAgICB0aGlzLnpvb20gPSAxOwogICAgICAgICAgdGhpcy5wYW5YID0gMDsKICAgICAgICAgIHRoaXMucGFuWSA9IDA7CiAgICAgICAgfQogICAgICAgIGZpdFRvU2NyZWVuKCkgewogICAgICAgICAgdGhpcy56b29tID0gMTsKICAgICAgICAgIHRoaXMucGFuWCA9IDA7CiAgICAgICAgICB0aGlzLnBhblkgPSAwOwogICAgICAgICAgdGhpcy5maXQgPSAiY29udGFpbiI7CiAgICAgICAgfQogICAgICAgIGFjdHVhbFNpemUoKSB7CiAgICAgICAgICB0aGlzLnpvb20gPSAxOwogICAgICAgICAgdGhpcy5wYW5YID0gMDsKICAgICAgICAgIHRoaXMucGFuWSA9IDA7CiAgICAgICAgICB0aGlzLmZpdCA9ICJhY3R1YWwiOwogICAgICAgIH0KICAgICAgICBkb3dubG9hZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5zcmMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgbGluazMuaHJlZiA9IHRoaXMuc3JjOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnNyYy5zcGxpdCgiLyIpLnBvcCgpIHx8ICJpbWFnZSI7CiAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVJbWFnZUxvYWQoZTExKSB7CiAgICAgICAgICBjb25zdCBpbWcgPSBlMTEudGFyZ2V0OwogICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmVycm9yID0gIiI7CiAgICAgICAgICB0aGlzLmltYWdlTmF0dXJhbFdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aDsKICAgICAgICAgIHRoaXMuaW1hZ2VOYXR1cmFsSGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGhhbmRsZUltYWdlRXJyb3IoKSB7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuZXJyb3IgPSAiRmFpbGVkIHRvIGxvYWQgaW1hZ2UiOwogICAgICAgIH0KICAgICAgICBoYW5kbGVXaGVlbChlMTEpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgZGVsdGEgPSBlMTEuZGVsdGFZID4gMCA/IDAuOSA6IDEuMTsKICAgICAgICAgIGNvbnN0IG5ld1pvb20gPSBNYXRoLm1pbigxMCwgTWF0aC5tYXgoMC4xLCB0aGlzLnpvb20gKiBkZWx0YSkpOwogICAgICAgICAgdGhpcy56b29tID0gbmV3Wm9vbTsKICAgICAgICAgIGlmICh0aGlzLnpvb20gPD0gMSkgewogICAgICAgICAgICB0aGlzLnBhblggPSAwOwogICAgICAgICAgICB0aGlzLnBhblkgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVNb3VzZURvd24oZTExKSB7CiAgICAgICAgICBpZiAodGhpcy56b29tIDw9IDEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgICAgICB0aGlzLmRyYWdTdGFydFggPSBlMTEuY2xpZW50WDsKICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IGUxMS5jbGllbnRZOwogICAgICAgICAgdGhpcy5kcmFnU3RhcnRQYW5YID0gdGhpcy5wYW5YOwogICAgICAgICAgdGhpcy5kcmFnU3RhcnRQYW5ZID0gdGhpcy5wYW5ZOwogICAgICAgIH0KICAgICAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5wYW5YID0gdGhpcy5kcmFnU3RhcnRQYW5YICsgKGUxMS5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRYKTsKICAgICAgICAgIHRoaXMucGFuWSA9IHRoaXMuZHJhZ1N0YXJ0UGFuWSArIChlMTEuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WSk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZU1vdXNlVXAoKSB7CiAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRG91YmxlQ2xpY2soKSB7CiAgICAgICAgICBpZiAodGhpcy56b29tID09PSAxKSB7CiAgICAgICAgICAgIHRoaXMuem9vbSA9IDI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnpvb20gPSAxOwogICAgICAgICAgICB0aGlzLnBhblggPSAwOwogICAgICAgICAgICB0aGlzLnBhblkgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNyYyIpKSB7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgICAgICAgICAgdGhpcy56b29tID0gMTsKICAgICAgICAgICAgdGhpcy5wYW5YID0gMDsKICAgICAgICAgICAgdGhpcy5wYW5ZID0gMDsKICAgICAgICAgICAgdGhpcy5pbWFnZU5hdHVyYWxXaWR0aCA9IDA7CiAgICAgICAgICAgIHRoaXMuaW1hZ2VOYXR1cmFsSGVpZ2h0ID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJbWFnZVZpZXdlcjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtaW1hZ2Utdmlld2VyL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaW1hZ2Vfdmlld2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1pbWFnZS12aWV3ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21wb25lbnQ2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLWF1ZGlvLXZpZXdlci9kZW1vLmpzCnZhciBkZW1vMjsKdmFyIGluaXRfZGVtbzcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLWF1ZGlvLXZpZXdlci9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vMiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgIH0KCiAgICAuc2VjdGlvbiB7CiAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICB9CgogICAgZGVlcy1hdWRpby12aWV3ZXIgewogICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CiAgPC9zdHlsZT4KCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1ZGlvIHdpdGggV2F2ZWZvcm08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QXVkaW8gcGxheWVyIHdpdGggd2F2ZWZvcm0gdmlzdWFsaXphdGlvbiBhbmQgZnVsbCB0cmFuc3BvcnQgY29udHJvbHMuPC9kaXY+CiAgICAgIDxkZWVzLWF1ZGlvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0xLm1wMyIKICAgICAgICB0aXRsZT0iU291bmRIZWxpeCBTb25nIDEiCiAgICAgICAgYXJ0aXN0PSJULiBTY2h1ZXJnZXIiCiAgICAgID48L2RlZXMtYXVkaW8tdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1ZGlvIHdpdGhvdXQgV2F2ZWZvcm08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2ltcGxlIGF1ZGlvIHBsYXllciB3aXRoIGEgc2Vla2JhciBpbnN0ZWFkIG9mIGEgd2F2ZWZvcm0uPC9kaXY+CiAgICAgIDxkZWVzLWF1ZGlvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0yLm1wMyIKICAgICAgICB0aXRsZT0iU291bmRIZWxpeCBTb25nIDIiCiAgICAgICAgLnNob3dXYXZlZm9ybT0ke2ZhbHNlfQogICAgICA+PC9kZWVzLWF1ZGlvLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaW5pbWFsIEF1ZGlvIFBsYXllcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5ObyB0aXRsZSBvciBhcnRpc3QgbWV0YWRhdGEg4oCUIGp1c3QgdGhlIHBsYXllci48L2Rpdj4KICAgICAgPGRlZXMtYXVkaW8tdmlld2VyCiAgICAgICAgc3JjPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTMubXAzIgogICAgICA+PC9kZWVzLWF1ZGlvLXZpZXdlcj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1hdWRpby12aWV3ZXIvY29tcG9uZW50LmpzCnZhciBfX2VzRGVjb3JhdGU3MSwgX19ydW5Jbml0aWFsaXplcnM3MiwgRGVlc0F1ZGlvVmlld2VyOwp2YXIgaW5pdF9jb21wb25lbnQ3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1hdWRpby12aWV3ZXIvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZW1vNygpOwogICAgX19lc0RlY29yYXRlNzEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM3MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0F1ZGlvVmlld2VyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXVkaW8tdmlld2VyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9zcmNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zcmNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGl0bGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF90aXRsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FydGlzdF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FydGlzdF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hcnRpc3RfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93V2F2ZWZvcm1fZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93V2F2ZWZvcm1faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1dhdmVmb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXV0b3BsYXlfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hdXRvcGxheV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvcGxheV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvb3BfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb29wX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvb3BfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1BsYXlpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1BsYXlpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNQbGF5aW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFRpbWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50VGltZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50VGltZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92b2x1bWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92b2x1bWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdm9sdW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNNdXRlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzTXV0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNNdXRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lcnJvcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZWZvcm1EYXRhX2RlY29yYXRvcnM7CiAgICAgIGxldCBfd2F2ZWZvcm1EYXRhX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dhdmVmb3JtRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dhdmVmb3JtUmVhZHlfZGVjb3JhdG9yczsKICAgICAgbGV0IF93YXZlZm9ybVJlYWR5X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3dhdmVmb3JtUmVhZHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBdWRpb1ZpZXdlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9zcmNfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF90aXRsZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2FydGlzdF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3Nob3dXYXZlZm9ybV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfYXV0b3BsYXlfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2xvb3BfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2lzUGxheWluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2N1cnJlbnRUaW1lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfZHVyYXRpb25fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF92b2x1bWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc011dGVkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2Vycm9yX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfd2F2ZWZvcm1EYXRhX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfd2F2ZWZvcm1SZWFkeV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3NyY19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzcmMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNyYyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zcmMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zcmMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NyY19pbml0aWFsaXplcnMsIF9zcmNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3RpdGxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpdGxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aXRsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aXRsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRpdGxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aXRsZV9pbml0aWFsaXplcnMsIF90aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfYXJ0aXN0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFydGlzdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXJ0aXN0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFydGlzdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFydGlzdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXJ0aXN0X2luaXRpYWxpemVycywgX2FydGlzdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfc2hvd1dhdmVmb3JtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dXYXZlZm9ybSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1dhdmVmb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dXYXZlZm9ybSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dXYXZlZm9ybSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1dhdmVmb3JtX2luaXRpYWxpemVycywgX3Nob3dXYXZlZm9ybV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfYXV0b3BsYXlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b3BsYXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9wbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9wbGF5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXV0b3BsYXkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9wbGF5X2luaXRpYWxpemVycywgX2F1dG9wbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9sb29wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvb3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvb3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9vcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxvb3AgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvb3BfaW5pdGlhbGl6ZXJzLCBfbG9vcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfaXNQbGF5aW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUGxheWluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQbGF5aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUGxheWluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzUGxheWluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNQbGF5aW5nX2luaXRpYWxpemVycywgX2lzUGxheWluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfY3VycmVudFRpbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFRpbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUaW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRUaW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudFRpbWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRUaW1lX2luaXRpYWxpemVycywgX2N1cnJlbnRUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9kdXJhdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkdXJhdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHVyYXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHVyYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kdXJhdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3ZvbHVtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2b2x1bWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZvbHVtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52b2x1bWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai52b2x1bWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZvbHVtZV9pbml0aWFsaXplcnMsIF92b2x1bWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX2lzTXV0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNNdXRlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNNdXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc011dGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNNdXRlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNNdXRlZF9pbml0aWFsaXplcnMsIF9pc011dGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9sb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXJyb3IgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Vycm9yX2luaXRpYWxpemVycywgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF93YXZlZm9ybURhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2F2ZWZvcm1EYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3YXZlZm9ybURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2F2ZWZvcm1EYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2F2ZWZvcm1EYXRhID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93YXZlZm9ybURhdGFfaW5pdGlhbGl6ZXJzLCBfd2F2ZWZvcm1EYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF93YXZlZm9ybVJlYWR5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndhdmVmb3JtUmVhZHkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndhdmVmb3JtUmVhZHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2F2ZWZvcm1SZWFkeSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLndhdmVmb3JtUmVhZHkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dhdmVmb3JtUmVhZHlfaW5pdGlhbGl6ZXJzLCBfd2F2ZWZvcm1SZWFkeV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQXVkaW9WaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzI7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk1lZGlhIl07CiAgICAgICAgI3NyY19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc3JjX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCBzcmMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3JjX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzcmModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RpdGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGl0bGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXJ0aXN0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9hcnRpc3RfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBhcnRpc3QoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXJ0aXN0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcnRpc3QodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhcnRpc3RfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dXYXZlZm9ybV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2FydGlzdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3Nob3dXYXZlZm9ybV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd1dhdmVmb3JtKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dXYXZlZm9ybV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1dhdmVmb3JtKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1dhdmVmb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhdXRvcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3Nob3dXYXZlZm9ybV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2F1dG9wbGF5X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgYXV0b3BsYXkoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGF1dG9wbGF5KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYXV0b3BsYXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xvb3BfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9hdXRvcGxheV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2xvb3BfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBsb29wKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xvb3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxvb3AodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsb29wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc1BsYXlpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9sb29wX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfaXNQbGF5aW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNQbGF5aW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzUGxheWluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNQbGF5aW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNQbGF5aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2lzUGxheWluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2N1cnJlbnRUaW1lX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBjdXJyZW50VGltZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VycmVudFRpbWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZHVyYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9jdXJyZW50VGltZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZHVyYXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdm9sdW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF92b2x1bWVfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICAgICAgZ2V0IHZvbHVtZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2b2x1bWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZvbHVtZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZvbHVtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNNdXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3ZvbHVtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2lzTXV0ZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc011dGVkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzTXV0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzTXV0ZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc011dGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfaXNNdXRlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBsb2FkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9lcnJvcl9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGVycm9yKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Vycm9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Vycm9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN3YXZlZm9ybURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3dhdmVmb3JtRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IHdhdmVmb3JtRGF0YSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3YXZlZm9ybURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdhdmVmb3JtRGF0YSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3dhdmVmb3JtRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd2F2ZWZvcm1SZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3dhdmVmb3JtRGF0YV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3dhdmVmb3JtUmVhZHlfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCB3YXZlZm9ybVJlYWR5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3dhdmVmb3JtUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdhdmVmb3JtUmVhZHkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN3YXZlZm9ybVJlYWR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGF1ZGlvRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF93YXZlZm9ybVJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgY2FudmFzRWxlbWVudCA9IG51bGw7CiAgICAgICAgYW5pbUZyYW1lSWQgPSAwOwogICAgICAgIHZvbHVtZUJlZm9yZU11dGUgPSAxOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IHRpdGxlVGV4dCA9IHRoaXMudGl0bGUgJiYgdGhpcy5hcnRpc3QgPyBgJHt0aGlzLnRpdGxlfSBcdTIwMTQgJHt0aGlzLmFydGlzdH1gIDogdGhpcy50aXRsZSB8fCB0aGlzLmFydGlzdCB8fCAiIjsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLnZpZXdlci1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci1ncm91cC0tZW5kIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLWJ1dHRvbi5hY3RpdmUgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRpbWUtZGlzcGxheSB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICAgICAgbWluLXdpZHRoOiA5MHB4OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlciB7CiAgICAgICAgICB3aWR0aDogNzBweDsKICAgICAgICAgIGhlaWdodDogNHB4OwogICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLnZvbHVtZS1zbGlkZXI6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC52b2x1bWUtc2xpZGVyOjotbW96LXJhbmdlLXRodW1iIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CgogICAgICAgIC5jb250ZW50LWFyZWEgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLndhdmVmb3JtLWNvbnRhaW5lciB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAud2F2ZWZvcm0tY29udGFpbmVyIGNhbnZhcyB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnNlZWtiYXItY29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTElKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CgogICAgICAgIC5zZWVrYmFyLWZpbGwgewogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMgbGluZWFyOwogICAgICAgIH0KCiAgICAgICAgLmVycm9yLW92ZXJsYXkgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgICAgfQoKICAgICAgICAuZXJyb3Itb3ZlcmxheSAuZXJyb3ItaWNvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5lcnJvci10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxkaXYgY2xhc3M9InZpZXdlci1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVBsYXl9PgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOiR7dGhpcy5pc1BsYXlpbmcgPyAiUGF1c2UiIDogIlBsYXkifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1kaXNwbGF5Ij4KICAgICAgICAgICAgICAke3RoaXMuZm9ybWF0VGltZSh0aGlzLmN1cnJlbnRUaW1lKX0gLyAke3RoaXMuZm9ybWF0VGltZSh0aGlzLmR1cmF0aW9uKX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aXRsZVRleHQgPyBiMmAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvb2xiYXItdGl0bGUiPiR7dGl0bGVUZXh0fTwvc3Bhbj4KICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy5sb29wID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVMb29wfQogICAgICAgICAgICAgIHRpdGxlPSJMb29wIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6UmVwZWF0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2b2x1bWUtZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZU11dGV9IHRpdGxlPSIke3RoaXMuaXNNdXRlZCA/ICJVbm11dGUiIDogIk11dGUifSI+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZToke3RoaXMuaXNNdXRlZCB8fCB0aGlzLnZvbHVtZSA9PT0gMCA/ICJWb2x1bWVYIiA6IHRoaXMudm9sdW1lIDwgMC41ID8gIlZvbHVtZTEiIDogIlZvbHVtZTIifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICBjbGFzcz0idm9sdW1lLXNsaWRlciIKICAgICAgICAgICAgICAgIHR5cGU9InJhbmdlIgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICAgICAgc3RlcD0iMC4wMSIKICAgICAgICAgICAgICAgIC52YWx1ZT0ke1N0cmluZyh0aGlzLmlzTXV0ZWQgPyAwIDogdGhpcy52b2x1bWUpfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVWb2x1bWVDaGFuZ2V9CiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgICR7dGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1vdmVybGF5Ij4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJsdWNpZGU6TXVzaWNPZmYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvci10ZXh0Ij4ke3RoaXMuZXJyb3J9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiB0aGlzLmxvYWRpbmcgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiB0aGlzLnNob3dXYXZlZm9ybSA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3YXZlZm9ybS1jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlV2F2ZWZvcm1DbGlja30+CiAgICAgICAgICAgICAgPGNhbnZhcz48L2NhbnZhcz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlZWtiYXItY29udGFpbmVyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZVNlZWtiYXJDbGlja30+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2Vla2Jhci1maWxsIiBzdHlsZT0id2lkdGg6ICR7dGhpcy5kdXJhdGlvbiA/IHRoaXMuY3VycmVudFRpbWUgLyB0aGlzLmR1cmF0aW9uICogMTAwIDogMH0lIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLnNyYykgewogICAgICAgICAgICB0aGlzLmluaXRBdWRpbygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmNsZWFudXAoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJzcmMiKSAmJiB0aGlzLnNyYykgewogICAgICAgICAgICB0aGlzLmNsZWFudXAoKTsKICAgICAgICAgICAgdGhpcy5pbml0QXVkaW8oKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIndhdmVmb3JtRGF0YSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY3VycmVudFRpbWUiKSkgewogICAgICAgICAgICB0aGlzLmRyYXdXYXZlZm9ybSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwbGF5KCkgewogICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQ/LnBsYXkoKTsKICAgICAgICB9CiAgICAgICAgcGF1c2UoKSB7CiAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudD8ucGF1c2UoKTsKICAgICAgICB9CiAgICAgICAgdG9nZ2xlUGxheSgpIHsKICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykgewogICAgICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnBsYXkoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2Vlayh0aW1lKSB7CiAgICAgICAgICBpZiAodGhpcy5hdWRpb0VsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQuY3VycmVudFRpbWUgPSB0aW1lOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXRWb2x1bWUodjUpIHsKICAgICAgICAgIHRoaXMudm9sdW1lID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdjUpKTsKICAgICAgICAgIGlmICh0aGlzLmF1ZGlvRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudC52b2x1bWUgPSB0aGlzLnZvbHVtZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnZvbHVtZSA+IDApIHsKICAgICAgICAgICAgdGhpcy5pc011dGVkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRvZ2dsZU11dGUoKSB7CiAgICAgICAgICBpZiAodGhpcy5pc011dGVkKSB7CiAgICAgICAgICAgIHRoaXMuaXNNdXRlZCA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMudm9sdW1lQmVmb3JlTXV0ZSB8fCAwLjU7CiAgICAgICAgICAgIGlmICh0aGlzLmF1ZGlvRWxlbWVudCkgewogICAgICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LnZvbHVtZSA9IHRoaXMudm9sdW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnZvbHVtZUJlZm9yZU11dGUgPSB0aGlzLnZvbHVtZTsKICAgICAgICAgICAgdGhpcy5pc011dGVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuYXVkaW9FbGVtZW50KSB7CiAgICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQudm9sdW1lID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b2dnbGVMb29wKCkgewogICAgICAgICAgdGhpcy5sb29wID0gIXRoaXMubG9vcDsKICAgICAgICAgIGlmICh0aGlzLmF1ZGlvRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudC5sb29wID0gdGhpcy5sb29wOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbml0QXVkaW8oKSB7CiAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudCA9IG5ldyBBdWRpbygpOwogICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LnNyYyA9IHRoaXMuc3JjOwogICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQudm9sdW1lID0gdGhpcy5pc011dGVkID8gMCA6IHRoaXMudm9sdW1lOwogICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQubG9vcCA9IHRoaXMubG9vcDsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gdGhpcy5hdWRpb0VsZW1lbnQuZHVyYXRpb247CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwbGF5IiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lVXBkYXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnN0b3BUaW1lVXBkYXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVuZGVkIiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnN0b3BUaW1lVXBkYXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKCkgPT4gewogICAgICAgICAgICB0aGlzLmVycm9yID0gIkZhaWxlZCB0byBsb2FkIGF1ZGlvIjsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLCAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmF1ZGlvRWxlbWVudC5jdXJyZW50VGltZTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHRoaXMuYXV0b3BsYXkpIHsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQucGxheSgpLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5zaG93V2F2ZWZvcm0pIHsKICAgICAgICAgICAgdGhpcy5sb2FkV2F2ZWZvcm0oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgbG9hZFdhdmVmb3JtKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnNyYyk7CiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgICAgY29uc3QgYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpOwogICAgICAgICAgICBjb25zdCBhdWRpb0J1ZmZlciA9IGF3YWl0IGF1ZGlvQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIpOwogICAgICAgICAgICBjb25zdCBjaGFubmVsRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgICAgICAgICBjb25zdCBiYXJzID0gMjAwOwogICAgICAgICAgICBjb25zdCBibG9ja1NpemUgPSBNYXRoLmZsb29yKGNoYW5uZWxEYXRhLmxlbmd0aCAvIGJhcnMpOwogICAgICAgICAgICBjb25zdCB3YXZlZm9ybSA9IFtdOwogICAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiYXJzOyBpMTErKykgewogICAgICAgICAgICAgIGxldCBzdW0gPSAwOwogICAgICAgICAgICAgIGZvciAobGV0IGo0ID0gMDsgajQgPCBibG9ja1NpemU7IGo0KyspIHsKICAgICAgICAgICAgICAgIHN1bSArPSBNYXRoLmFicyhjaGFubmVsRGF0YVtpMTEgKiBibG9ja1NpemUgKyBqNF0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3YXZlZm9ybS5wdXNoKHN1bSAvIGJsb2NrU2l6ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgbWF4MyA9IE1hdGgubWF4KC4uLndhdmVmb3JtKTsKICAgICAgICAgICAgdGhpcy53YXZlZm9ybURhdGEgPSB3YXZlZm9ybS5tYXAoKHY1KSA9PiBtYXgzID4gMCA/IHY1IC8gbWF4MyA6IDApOwogICAgICAgICAgICB0aGlzLndhdmVmb3JtUmVhZHkgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgYXdhaXQgYXVkaW9Db250ZXh0LmNsb3NlKCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy53YXZlZm9ybVJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkcmF3V2F2ZWZvcm0oKSB7CiAgICAgICAgICBpZiAoIXRoaXMuc2hvd1dhdmVmb3JtIHx8ICF0aGlzLndhdmVmb3JtUmVhZHkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiY2FudmFzIik7CiAgICAgICAgICBpZiAoIWNhbnZhcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5jYW52YXNFbGVtZW50ID0gY2FudmFzOwogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzLnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwogICAgICAgICAgY29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0OwogICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBkcHI7CiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZHByOwogICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgICBpZiAoIWN0eCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY3R4LnNjYWxlKGRwciwgZHByKTsKICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICBjb25zdCBiYXJzID0gdGhpcy53YXZlZm9ybURhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKGJhcnMgPT09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGJhcldpZHRoID0gd2lkdGggLyBiYXJzOwogICAgICAgICAgY29uc3QgcGxheWVkUmF0aW8gPSB0aGlzLmR1cmF0aW9uID4gMCA/IHRoaXMuY3VycmVudFRpbWUgLyB0aGlzLmR1cmF0aW9uIDogMDsKICAgICAgICAgIGNvbnN0IHBsYXllZEJhcnMgPSBNYXRoLmZsb29yKHBsYXllZFJhdGlvICogYmFycyk7CiAgICAgICAgICBjb25zdCBpc0RhcmsgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygidGhlbWUtZGFyayIpIHx8IHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlczsKICAgICAgICAgIGNvbnN0IHBsYXllZENvbG9yID0gaXNEYXJrID8gImhzbCgyMTMgOTMlIDY4JSkiIDogImhzbCgyMTcgOTElIDYwJSkiOwogICAgICAgICAgY29uc3QgdW5wbGF5ZWRDb2xvciA9IGlzRGFyayA/ICJoc2woMjE3IDI1JSAyMiUpIiA6ICJoc2woMjE0IDMxJSA4NiUpIjsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJhcnM7IGkxMSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGFtcGxpdHVkZSA9IHRoaXMud2F2ZWZvcm1EYXRhW2kxMV07CiAgICAgICAgICAgIGNvbnN0IGJhckhlaWdodCA9IE1hdGgubWF4KDIsIGFtcGxpdHVkZSAqIChoZWlnaHQgLSA0KSk7CiAgICAgICAgICAgIGNvbnN0IHg0ID0gaTExICogYmFyV2lkdGg7CiAgICAgICAgICAgIGNvbnN0IHk0ID0gKGhlaWdodCAtIGJhckhlaWdodCkgLyAyOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gaTExIDwgcGxheWVkQmFycyA/IHBsYXllZENvbG9yIDogdW5wbGF5ZWRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHg0ICsgMC41LCB5NCwgYmFyV2lkdGggLSAxLCBiYXJIZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVXYXZlZm9ybUNsaWNrKGUxMSkgewogICAgICAgICAgY29uc3QgcmVjdCA9IGUxMS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgcmF0aW8gPSAoZTExLmNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aDsKICAgICAgICAgIHRoaXMuc2VlayhyYXRpbyAqIHRoaXMuZHVyYXRpb24pOwogICAgICAgIH0KICAgICAgICBoYW5kbGVTZWVrYmFyQ2xpY2soZTExKSB7CiAgICAgICAgICBjb25zdCByZWN0ID0gZTExLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBjb25zdCByYXRpbyA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoOwogICAgICAgICAgdGhpcy5zZWVrKHJhdGlvICogdGhpcy5kdXJhdGlvbik7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVZvbHVtZUNoYW5nZShlMTEpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHBhcnNlRmxvYXQoZTExLnRhcmdldC52YWx1ZSk7CiAgICAgICAgICB0aGlzLnNldFZvbHVtZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICBzdGFydFRpbWVVcGRhdGUoKSB7CiAgICAgICAgICB0aGlzLnN0b3BUaW1lVXBkYXRlKCk7CiAgICAgICAgICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLmF1ZGlvRWxlbWVudCAmJiB0aGlzLmlzUGxheWluZykgewogICAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLmF1ZGlvRWxlbWVudC5jdXJyZW50VGltZTsKICAgICAgICAgICAgICB0aGlzLmFuaW1GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmFuaW1GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7CiAgICAgICAgfQogICAgICAgIHN0b3BUaW1lVXBkYXRlKCkgewogICAgICAgICAgaWYgKHRoaXMuYW5pbUZyYW1lSWQpIHsKICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltRnJhbWVJZCk7CiAgICAgICAgICAgIHRoaXMuYW5pbUZyYW1lSWQgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3JtYXRUaW1lKHNlY29uZHMpIHsKICAgICAgICAgIGlmICghaXNGaW5pdGUoc2Vjb25kcykgfHwgc2Vjb25kcyA8IDApCiAgICAgICAgICAgIHJldHVybiAiMDowMCI7CiAgICAgICAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApOwogICAgICAgICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTsKICAgICAgICAgIHJldHVybiBgJHttaW5zfToke3NlY3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgICAgfQogICAgICAgIGNsZWFudXAoKSB7CiAgICAgICAgICB0aGlzLnN0b3BUaW1lVXBkYXRlKCk7CiAgICAgICAgICBpZiAodGhpcy5hdWRpb0VsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQucGF1c2UoKTsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQuc3JjID0gIiI7CiAgICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gMDsKICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSAwOwogICAgICAgICAgdGhpcy53YXZlZm9ybURhdGEgPSBbXTsKICAgICAgICAgIHRoaXMud2F2ZWZvcm1SZWFkeSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0F1ZGlvVmlld2VyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1hdWRpby12aWV3ZXIvaW5kZXguanMKdmFyIGluaXRfZGVlc19hdWRpb192aWV3ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLWF1ZGlvLXZpZXdlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdmlkZW8tdmlld2VyL2RlbW8uanMKdmFyIGRlbW8zOwp2YXIgaW5pdF9kZW1vOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdmlkZW8tdmlld2VyL2RlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW8zID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAzMnB4OwogICAgfQoKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VmlkZW8gd2l0aCBDdXN0b20gQ29udHJvbHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QSB2aWRlbyBwbGF5ZXIgd2l0aCBvdmVybGF5IGNvbnRyb2xzLCBzZWVraW5nLCBhbmQgdm9sdW1lIGFkanVzdG1lbnQuPC9kaXY+CiAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvQmlnQnVja0J1bm55Lm1wNCIKICAgICAgICBwb3N0ZXI9Imh0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ3R2LXZpZGVvcy1idWNrZXQvc2FtcGxlL2ltYWdlcy9CaWdCdWNrQnVubnkuanBnIgogICAgICA+PC9kZWVzLXZpZGVvLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5BdXRvcGxheSBNdXRlZDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5WaWRlbyB0aGF0IGF1dG9wbGF5cyBtdXRlZCwgY29tbW9ubHkgdXNlZCBmb3IgcHJldmlld3MuPC9kaXY+CiAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgIHNyYz0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvRWxlcGhhbnRzRHJlYW0ubXA0IgogICAgICAgIHBvc3Rlcj0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvaW1hZ2VzL0VsZXBoYW50c0RyZWFtLmpwZyIKICAgICAgICAuYXV0b3BsYXk9JHt0cnVlfQogICAgICAgIC5tdXRlZD0ke3RydWV9CiAgICAgID48L2RlZXMtdmlkZW8tdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5hdGl2ZSBDb250cm9sczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5WaWRlbyB1c2luZyBicm93c2VyLW5hdGl2ZSBjb250cm9scyBpbnN0ZWFkIG9mIGN1c3RvbSBvdmVybGF5LjwvZGl2PgogICAgICA8ZGVlcy12aWRlby12aWV3ZXIKICAgICAgICBzcmM9Imh0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ3R2LXZpZGVvcy1idWNrZXQvc2FtcGxlL0ZvckJpZ2dlckJsYXplcy5tcDQiCiAgICAgICAgLnNob3dDb250cm9scz0ke2ZhbHNlfQogICAgICA+PC9kZWVzLXZpZGVvLXZpZXdlcj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy12aWRlby12aWV3ZXIvY29tcG9uZW50LmpzCnZhciBfX2VzRGVjb3JhdGU3MiwgX19ydW5Jbml0aWFsaXplcnM3MywgRGVlc1ZpZGVvVmlld2VyOwp2YXIgaW5pdF9jb21wb25lbnQ4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy12aWRlby12aWV3ZXIvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZW1vOCgpOwogICAgX19lc0RlY29yYXRlNzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM3MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1ZpZGVvVmlld2VyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdmlkZW8tdmlld2VyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9zcmNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zcmNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcG9zdGVyX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcG9zdGVyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Bvc3Rlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dDb250cm9sc19kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvcGxheV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2F1dG9wbGF5X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1dG9wbGF5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9vcF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2xvb3BfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9vcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX211dGVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbXV0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbXV0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1BsYXlpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1BsYXlpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNQbGF5aW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFRpbWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50VGltZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50VGltZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92b2x1bWVfZGVjb3JhdG9yczsKICAgICAgbGV0IF92b2x1bWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdm9sdW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vycm9yX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZXJyb3JfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0Z1bGxzY3JlZW5fZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc0Z1bGxzY3JlZW5faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNGdWxsc2NyZWVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udHJvbHNWaXNpYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29udHJvbHNWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRyb2xzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1ZpZGVvVmlld2VyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3NyY19kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3Bvc3Rlcl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3Nob3dDb250cm9sc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfYXV0b3BsYXlfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2xvb3BfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX211dGVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9pc1BsYXlpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jdXJyZW50VGltZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2R1cmF0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfdm9sdW1lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2Vycm9yX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNGdWxsc2NyZWVuX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfY29udHJvbHNWaXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfc3JjX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNyYyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3JjIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNyYywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNyYyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3JjX2luaXRpYWxpemVycywgX3NyY19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfcG9zdGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBvc3RlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zdGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc3Rlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnBvc3RlciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zdGVyX2luaXRpYWxpemVycywgX3Bvc3Rlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfc2hvd0NvbnRyb2xzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dDb250cm9scyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0NvbnRyb2xzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDb250cm9scywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dDb250cm9scyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX3Nob3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfYXV0b3BsYXlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b3BsYXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9wbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9wbGF5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXV0b3BsYXkgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9wbGF5X2luaXRpYWxpemVycywgX2F1dG9wbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcyKHRoaXMsIG51bGwsIF9sb29wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvb3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvb3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9vcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxvb3AgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvb3BfaW5pdGlhbGl6ZXJzLCBfbG9vcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbXV0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXV0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11dGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11dGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubXV0ZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX211dGVkX2luaXRpYWxpemVycywgX211dGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcyKHRoaXMsIG51bGwsIF9pc1BsYXlpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNQbGF5aW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc1BsYXlpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQbGF5aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNQbGF5aW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1BsYXlpbmdfaW5pdGlhbGl6ZXJzLCBfaXNQbGF5aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTcyKHRoaXMsIG51bGwsIF9jdXJyZW50VGltZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGltZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFRpbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFRpbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50VGltZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFRpbWVfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFRpbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzIodGhpcywgbnVsbCwgX2R1cmF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImR1cmF0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkdXJhdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kdXJhdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmR1cmF0aW9uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kdXJhdGlvbl9pbml0aWFsaXplcnMsIF9kdXJhdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfdm9sdW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZvbHVtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidm9sdW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZvbHVtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnZvbHVtZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdm9sdW1lX2luaXRpYWxpemVycywgX3ZvbHVtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5sb2FkaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sb2FkaW5nX2luaXRpYWxpemVycywgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzIodGhpcywgbnVsbCwgX2Vycm9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVycm9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlcnJvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lcnJvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVycm9yID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvcl9pbml0aWFsaXplcnMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfaXNGdWxsc2NyZWVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRnVsbHNjcmVlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNGdWxsc2NyZWVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzRnVsbHNjcmVlbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzRnVsbHNjcmVlbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNGdWxsc2NyZWVuX2luaXRpYWxpemVycywgX2lzRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfY29udHJvbHNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRyb2xzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udHJvbHNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRyb2xzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbnRyb2xzVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udHJvbHNWaXNpYmxlX2luaXRpYWxpemVycywgX2NvbnRyb2xzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzVmlkZW9WaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzM7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk1lZGlhIl07CiAgICAgICAgI3NyY19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfc3JjX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCBzcmMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3JjX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzcmModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Bvc3Rlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX3NyY19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX3Bvc3Rlcl9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHBvc3RlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwb3N0ZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBvc3Rlcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Bvc3Rlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfcG9zdGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfc2hvd0NvbnRyb2xzX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93Q29udHJvbHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93Q29udHJvbHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2F1dG9wbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfc2hvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfYXV0b3BsYXlfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBhdXRvcGxheSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhdXRvcGxheV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYXV0b3BsYXkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhdXRvcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbG9vcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2F1dG9wbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbG9vcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGxvb3AoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbG9vcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbG9vcCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xvb3BfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI211dGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbG9vcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX211dGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgbXV0ZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbXV0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG11dGVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbXV0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzUGxheWluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX211dGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfaXNQbGF5aW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNQbGF5aW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzUGxheWluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNQbGF5aW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNQbGF5aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2lzUGxheWluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2N1cnJlbnRUaW1lX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBjdXJyZW50VGltZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VycmVudFRpbWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjdXJyZW50VGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZHVyYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczczKHRoaXMsIF9jdXJyZW50VGltZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZHVyYXRpb24odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdm9sdW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczczKHRoaXMsIF92b2x1bWVfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICAgICAgZ2V0IHZvbHVtZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2b2x1bWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHZvbHVtZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3ZvbHVtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX3ZvbHVtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGxvYWRpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbG9hZGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2Vycm9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2Vycm9yX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgZXJyb3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVycm9yKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfaXNGdWxsc2NyZWVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNGdWxsc2NyZWVuKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNGdWxsc2NyZWVuKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNGdWxsc2NyZWVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb250cm9sc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczczKHRoaXMsIF9pc0Z1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczczKHRoaXMsIF9jb250cm9sc1Zpc2libGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGNvbnRyb2xzVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjb250cm9sc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbnRyb2xzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRyb2xzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBoaWRlQ29udHJvbHNUaW1lciA9IChfX3J1bkluaXRpYWxpemVyczczKHRoaXMsIF9jb250cm9sc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICB2aWRlb0VsZW1lbnQgPSBudWxsOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLnZpZGVvLWNvbnRhaW5lciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5OwogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICB2aWRlbyB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIC5vdmVybGF5IHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIGluc2V0OiAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLmNlbnRlci1wbGF5IHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICB3aWR0aDogNjRweDsKICAgICAgICAgIGhlaWdodDogNjRweDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgICAgb3BhY2l0eTogJHt0aGlzLmlzUGxheWluZyA/IDAgOiAxfTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiAke3RoaXMuaXNQbGF5aW5nID8gIm5vbmUiIDogImF1dG8ifTsKICAgICAgICB9CgogICAgICAgIC5jZW50ZXItcGxheSBkZWVzLWljb24gewogICAgICAgICAgZm9udC1zaXplOiAyOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNlbnRlci1wbGF5OmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEuMSk7CiAgICAgICAgfQoKICAgICAgICAuY29udHJvbHMtYmFyIHsKICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjcpKTsKICAgICAgICAgIHBhZGRpbmc6IDI0cHggMTJweCAxMnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIG9wYWNpdHk6ICR7dGhpcy5jb250cm9sc1Zpc2libGUgfHwgIXRoaXMuaXNQbGF5aW5nID8gMSA6IDB9OwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuc2Vla2Jhci1yb3cgewogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9CgogICAgICAgIC5zZWVrYmFyLXJvdzpob3ZlciB7CiAgICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICB9CgogICAgICAgIC5zZWVrYmFyLXByb2dyZXNzIHsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5jb250cm9scy1yb3cgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CgogICAgICAgIC5jdHJsLWJ1dHRvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAuY3RybC1idXR0b24gZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICB9CgogICAgICAgIC5jdHJsLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICAgIH0KCiAgICAgICAgLnRpbWUtZGlzcGxheSB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VyIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlciB7CiAgICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICAgIGhlaWdodDogNHB4OwogICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQoKICAgICAgICAudm9sdW1lLXNsaWRlcjo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLnZvbHVtZS1zbGlkZXI6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctb3ZlcmxheSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICBpbnNldDogMDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjZmZmZmZmOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICAgIH0KCiAgICAgICAgLmVycm9yLW92ZXJsYXkgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICB9CgogICAgICAgIC5lcnJvci1vdmVybGF5IGRlZXMtaWNvbiB7CiAgICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5lcnJvci10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CgogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InZpZGVvLWNvbnRhaW5lciIKICAgICAgICBAbW91c2Vtb3ZlPSR7dGhpcy5oYW5kbGVNb3VzZU1vdmV9CiAgICAgICAgQG1vdXNlbGVhdmU9JHt0aGlzLmhhbmRsZU1vdXNlTGVhdmV9CiAgICAgID4KICAgICAgICA8dmlkZW8KICAgICAgICAgIC5zcmM9JHt0aGlzLnNyY30KICAgICAgICAgIC5wb3N0ZXI9JHt0aGlzLnBvc3Rlcn0KICAgICAgICAgIC5tdXRlZD0ke3RoaXMubXV0ZWR9CiAgICAgICAgICAubG9vcD0ke3RoaXMubG9vcH0KICAgICAgICAgID9hdXRvcGxheT0ke3RoaXMuYXV0b3BsYXl9CiAgICAgICAgICA/Y29udHJvbHM9JHshdGhpcy5zaG93Q29udHJvbHN9CiAgICAgICAgICBwbGF5c2lubGluZQogICAgICAgICAgQGxvYWRlZG1ldGFkYXRhPSR7dGhpcy5oYW5kbGVMb2FkZWRNZXRhZGF0YX0KICAgICAgICAgIEBwbGF5PSR7dGhpcy5oYW5kbGVQbGF5fQogICAgICAgICAgQHBhdXNlPSR7dGhpcy5oYW5kbGVQYXVzZX0KICAgICAgICAgIEBlbmRlZD0ke3RoaXMuaGFuZGxlRW5kZWR9CiAgICAgICAgICBAdGltZXVwZGF0ZT0ke3RoaXMuaGFuZGxlVGltZVVwZGF0ZX0KICAgICAgICAgIEBlcnJvcj0ke3RoaXMuaGFuZGxlRXJyb3J9CiAgICAgICAgICBAd2FpdGluZz0keygpID0+IHsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgIH19CiAgICAgICAgICBAY2FucGxheT0keygpID0+IHsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9fQogICAgICAgID48L3ZpZGVvPgoKICAgICAgICAke3RoaXMuc2hvd0NvbnRyb2xzID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5IiBAY2xpY2s9JHt0aGlzLmhhbmRsZU92ZXJsYXlDbGlja30+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlci1wbGF5Ij4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpQbGF5Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scy1iYXIiIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2Vla2Jhci1yb3ciIEBjbGljaz0ke3RoaXMuaGFuZGxlU2Vla30+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWVrYmFyLXByb2dyZXNzIiBzdHlsZT0id2lkdGg6ICR7dGhpcy5kdXJhdGlvbiA/IHRoaXMuY3VycmVudFRpbWUgLyB0aGlzLmR1cmF0aW9uICogMTAwIDogMH0lIj48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMtcm93Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0cmwtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVBsYXl9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZToke3RoaXMuaXNQbGF5aW5nID8gIlBhdXNlIiA6ICJQbGF5In0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUtZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuY3VycmVudFRpbWUpfSAvICR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuZHVyYXRpb24pfQogICAgICAgICAgICAgICAgPC9zcGFuPgoKICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIiPjwvc3Bhbj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2b2x1bWUtZ3JvdXAiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHJsLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy50b2dnbGVNdXRlfT4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZToke3RoaXMubXV0ZWQgfHwgdGhpcy52b2x1bWUgPT09IDAgPyAiVm9sdW1lWCIgOiB0aGlzLnZvbHVtZSA8IDAuNSA/ICJWb2x1bWUxIiA6ICJWb2x1bWUyIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InZvbHVtZS1zbGlkZXIiCiAgICAgICAgICAgICAgICAgICAgdHlwZT0icmFuZ2UiCiAgICAgICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgICAgIG1heD0iMSIKICAgICAgICAgICAgICAgICAgICBzdGVwPSIwLjAxIgogICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke1N0cmluZyh0aGlzLm11dGVkID8gMCA6IHRoaXMudm9sdW1lKX0KICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVZvbHVtZUNoYW5nZX0KICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0cmwtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZUZ1bGxzY3JlZW59IHRpdGxlPSJGdWxsc2NyZWVuIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6JHt0aGlzLmlzRnVsbHNjcmVlbiA/ICJNaW5pbWl6ZSIgOiAiTWF4aW1pemUifSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgICR7dGhpcy5sb2FkaW5nICYmICF0aGlzLmVycm9yID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW92ZXJsYXkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLW92ZXJsYXkiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpWaWRlb09mZiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvci10ZXh0Ij4ke3RoaXMuZXJyb3J9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpIHx8IG51bGw7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIiwgdGhpcy5oYW5kbGVGdWxsc2NyZWVuQ2hhbmdlKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsIHRoaXMuaGFuZGxlRnVsbHNjcmVlbkNoYW5nZSk7CiAgICAgICAgICBpZiAodGhpcy5oaWRlQ29udHJvbHNUaW1lcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5oaWRlQ29udHJvbHNUaW1lcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHBsYXkoKSB7CiAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudD8ucGxheSgpOwogICAgICAgIH0KICAgICAgICBwYXVzZSgpIHsKICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50Py5wYXVzZSgpOwogICAgICAgIH0KICAgICAgICB0b2dnbGVQbGF5KCkgewogICAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7CiAgICAgICAgICAgIHRoaXMucGF1c2UoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucGxheSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWVrKHRpbWUpIHsKICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5jdXJyZW50VGltZSA9IHRpbWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldFZvbHVtZSh2NSkgewogICAgICAgICAgdGhpcy52b2x1bWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2NSkpOwogICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZvbHVtZSA9IHRoaXMudm9sdW1lOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b2dnbGVGdWxsc2NyZWVuKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudmlkZW8tY29udGFpbmVyIik7CiAgICAgICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuPy4oKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbj8uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZUxvYWRlZE1ldGFkYXRhKCkgewogICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLnZpZGVvRWxlbWVudC5kdXJhdGlvbjsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZVBsYXkoKSB7CiAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlSGlkZUNvbnRyb2xzKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVBhdXNlKCkgewogICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuY29udHJvbHNWaXNpYmxlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRW5kZWQoKSB7CiAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5jb250cm9sc1Zpc2libGUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBoYW5kbGVUaW1lVXBkYXRlKCkgewogICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSB0aGlzLnZpZGVvRWxlbWVudC5jdXJyZW50VGltZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlRXJyb3IoKSB7CiAgICAgICAgICB0aGlzLmVycm9yID0gIkZhaWxlZCB0byBsb2FkIHZpZGVvIjsKICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBoYW5kbGVPdmVybGF5Q2xpY2soKSB7CiAgICAgICAgICB0aGlzLnRvZ2dsZVBsYXkoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlU2VlayhlMTEpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSBlMTEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IHJhdGlvID0gKGUxMS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7CiAgICAgICAgICB0aGlzLnNlZWsocmF0aW8gKiB0aGlzLmR1cmF0aW9uKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlVm9sdW1lQ2hhbmdlKGUxMSkgewogICAgICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VGbG9hdChlMTEudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgIHRoaXMuc2V0Vm9sdW1lKHZhbHVlMik7CiAgICAgICAgICB0aGlzLm11dGVkID0gdmFsdWUyID09PSAwOwogICAgICAgIH0KICAgICAgICB0b2dnbGVNdXRlKCkgewogICAgICAgICAgdGhpcy5tdXRlZCA9ICF0aGlzLm11dGVkOwogICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50Lm11dGVkID0gdGhpcy5tdXRlZDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlTW91c2VNb3ZlKCkgewogICAgICAgICAgdGhpcy5jb250cm9sc1Zpc2libGUgPSB0cnVlOwogICAgICAgICAgdGhpcy5zY2hlZHVsZUhpZGVDb250cm9scygpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVNb3VzZUxlYXZlKCkgewogICAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7CiAgICAgICAgICAgIHRoaXMuY29udHJvbHNWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlSGlkZUNvbnRyb2xzKCkgewogICAgICAgICAgaWYgKHRoaXMuaGlkZUNvbnRyb2xzVGltZXIpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZUNvbnRyb2xzVGltZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7CiAgICAgICAgICAgIHRoaXMuaGlkZUNvbnRyb2xzVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgICB9LCAzZTMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVGdWxsc2NyZWVuQ2hhbmdlID0gKCkgPT4gewogICAgICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSAhIWRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50OwogICAgICAgIH07CiAgICAgICAgZm9ybWF0VGltZShzZWNvbmRzKSB7CiAgICAgICAgICBpZiAoIWlzRmluaXRlKHNlY29uZHMpIHx8IHNlY29uZHMgPCAwKQogICAgICAgICAgICByZXR1cm4gIjA6MDAiOwogICAgICAgICAgY29uc3QgbWlucyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTsKICAgICAgICAgIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7CiAgICAgICAgICByZXR1cm4gYCR7bWluc306JHtzZWNzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3MyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1ZpZGVvVmlld2VyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy12aWRlby12aWV3ZXIvaW5kZXguanMKdmFyIGluaXRfZGVlc192aWRlb192aWV3ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXZpZGVvLXZpZXdlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXNoYXJlZC9QZGZNYW5hZ2VyLmpzCnZhciBQZGZNYW5hZ2VyOwp2YXIgaW5pdF9QZGZNYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtc2hhcmVkL1BkZk1hbmFnZXIuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIFBkZk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgICAgc3RhdGljIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCkgewogICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMucGRmanNMaWIgPSBhd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKTsKICAgICAgICB0aGlzLnBkZmpzTGliLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjID0gImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5L2J1aWxkL3BkZi53b3JrZXIubWpzIjsKICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0aWMgYXN5bmMgbG9hZERvY3VtZW50KHVybCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZSgpOwogICAgICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudCh1cmwpOwogICAgICAgIGNvbnN0IGRvY3VtZW50NCA9IGF3YWl0IGxvYWRpbmdUYXNrLnByb21pc2U7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50NDsKICAgICAgfQogICAgICBzdGF0aWMgcmVsZWFzZURvY3VtZW50KF91cmwpIHsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXZpZXdlci9zdHlsZXMuanMKdmFyIHZpZXdlclN0eWxlczsKdmFyIGluaXRfc3R5bGVzOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXZpZXdlci9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIHZpZXdlclN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgY29udGFpbjogbGF5b3V0IHN0eWxlOwogICAgfQoKICAgIC5wZGYtdmlld2VyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDIxNSAyMCUgMTAlKSIpfTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC50b29sYmFyIHsKICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCiAgICAudG9vbGJhci1ncm91cCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogNHB4OwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwLS1lbmQgewogICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gewogICAgICB3aWR0aDogMzJweDsKICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246ZGlzYWJsZWQgewogICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICB9CgogICAgLnRvb2xiYXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIH0KCiAgICAucGFnZS1pbmZvIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC5wYWdlLWlucHV0IHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogMjhweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAucGFnZS1pbnB1dDpmb2N1cyB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucGFnZS1zZXBhcmF0b3IgewogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDYwJSkiLCAiaHNsKDIxNSAxNiUgNTAlKSIpfTsKICAgIH0KCiAgICAuem9vbS1sZXZlbCB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgbWluLXdpZHRoOiA0OHB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLnZpZXdlci1jb250YWluZXIgewogICAgICBmbGV4OiAxOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICB9CgogICAgLnNpZGViYXIgewogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTElKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnNpZGViYXItaGVhZGVyIHsKICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgewogICAgICB3aWR0aDogMjRweDsKICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICB9CgogICAgLnNpZGViYXItY2xvc2U6aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC5zaWRlYmFyLWNsb3NlIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIH0KCiAgICAuc2lkZWJhci1jb250ZW50IHsKICAgICAgZmxleDogMTsKICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICBwYWRkaW5nOiAxMnB4OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAudGh1bWJuYWlsIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMjE1IDIwJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIC8qIERlZmF1bHQgQTQgYXNwZWN0IHJhdGlvICgyOTdtbSAvIDIxMG1tIOKJiCAxLjQxNCkgKi8KICAgICAgbWluLWhlaWdodDogY2FsYygxNzZweCAqIDEuNDE0KTsKICAgIH0KCiAgICAudGh1bWJuYWlsOmxhc3QtY2hpbGQgewogICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgfQoKICAgIC50aHVtYm5haWw6aG92ZXIgewogICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDM1JSkiKX07CiAgICB9CgogICAgLnRodW1ibmFpbC5hY3RpdmUgewogICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICB9CgogICAgLnRodW1ibmFpbC1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC50aHVtYm5haWwtbnVtYmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDRweDsKICAgICAgcmlnaHQ6IDRweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC43KSIsICJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgLnZpZXdlci1tYWluIHsKICAgICAgZmxleDogMTsKICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgbWluLWhlaWdodDogMDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5sb2FkaW5nLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGdhcDogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAyNSUgMjglKSIpfTsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgIHRvIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICB9CiAgICB9CgogICAgLmxvYWRpbmctdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIH0KCiAgICAucGFnZXMtY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiAyMHB4OwogICAgfQoKICAgIC5wYWdlLXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLmNhbnZhcy1jb250YWluZXIgewogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgYm94LXNoYWRvdzogMCAycHggMTJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAucGFnZS1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC8qIFRleHQgbGF5ZXIgZm9yIHNlbGVjdGlvbiAqLwogICAgLnRleHQtbGF5ZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGluc2V0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7CiAgICAgIGZvcmNlZC1jb2xvci1hZGp1c3Q6IG5vbmU7CiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDsKICAgICAgei1pbmRleDogMTsKICAgICAgdXNlci1zZWxlY3Q6IHRleHQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CiAgICB9CgogICAgLnRleHQtbGF5ZXIgc3BhbiwKICAgIC50ZXh0LWxheWVyIGJyIHsKICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMCU7CiAgICAgIHVzZXItc2VsZWN0OiB0ZXh0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwogICAgfQoKICAgIC50ZXh0LWxheWVyIDo6c2VsZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDAsIDIwMCwgMC4zKTsKICAgIH0KCiAgICAudGV4dC1sYXllciBicjo6c2VsZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLnRleHQtbGF5ZXIgLmVuZE9mQ29udGVudCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGluc2V0OiAxMDAlIDAgMDsKICAgICAgei1pbmRleDogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAudGV4dC1sYXllci5zZWxlY3RpbmcgLmVuZE9mQ29udGVudCB7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAucGRmLXZpZXdlci53aXRoLXNpZGViYXIgLnZpZXdlci1tYWluIHsKICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICB9CiAgYAogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXZpZXdlci9kZW1vLmpzCnZhciBkZW1vNDsKdmFyIGluaXRfZGVtbzkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi12aWV3ZXIvZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtbzQgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0MHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgfQoKICAgIC5kZW1vLXNlY3Rpb24gewogICAgICBtYXJnaW4tYm90dG9tOiA0MHB4OwogICAgfQoKICAgIGgzIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgfQoKICAgIGRlZXMtcGRmLXZpZXdlciB7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAudmlld2VyLXRhbGwgewogICAgICBoZWlnaHQ6IDgwMHB4OwogICAgfQoKICAgIC52aWV3ZXItY29tcGFjdCB7CiAgICAgIGhlaWdodDogNTAwcHg7CiAgICB9CiAgPC9zdHlsZT4KCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkZ1bGwgRmVhdHVyZWQgUERGIFZpZXdlciB3aXRoIFRvb2xiYXI8L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0icGFnZS1maXQiCiAgICAgID48L2RlZXMtcGRmLXZpZXdlcj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5QREYgVmlld2VyIHdpdGggU2lkZWJhciBOYXZpZ2F0aW9uPC9oMz4KICAgICAgPGRlZXMtcGRmLXZpZXdlcgogICAgICAgIGNsYXNzPSJ2aWV3ZXItdGFsbCIKICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICBzaG93VG9vbGJhcj0idHJ1ZSIKICAgICAgICBzaG93U2lkZWJhcj0idHJ1ZSIKICAgICAgICBpbml0aWFsWm9vbT0icGFnZS13aWR0aCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkNvbXBhY3QgVmlld2VyIHdpdGhvdXQgQ29udHJvbHM8L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci1jb21wYWN0IgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJmYWxzZSIKICAgICAgICBzaG93U2lkZWJhcj0iZmFsc2UiCiAgICAgICAgaW5pdGlhbFpvb209ImF1dG8iCiAgICAgID48L2RlZXMtcGRmLXZpZXdlcj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtdmlld2VyL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlNzMsIF9fcnVuSW5pdGlhbGl6ZXJzNzQsIERlZXNQZGZWaWV3ZXI7CnZhciBpbml0X2NvbXBvbmVudDkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi12aWV3ZXIvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X1BkZk1hbmFnZXIoKTsKICAgIGluaXRfc3R5bGVzOCgpOwogICAgaW5pdF9kZW1vOSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIF9fZXNEZWNvcmF0ZTczID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNQZGZWaWV3ZXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYtdmlld2VyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5pdGlhbFBhZ2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2luaXRpYWxab29tX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW5pdGlhbFpvb21faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VG9vbGJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dUb29sYmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1NpZGViYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRQYWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY3VycmVudFBhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90b3RhbFBhZ2VzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdG90YWxQYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90b3RhbFBhZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFpvb21fZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50Wm9vbV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50Wm9vbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kb2N1bWVudElkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZG9jdW1lbnRJZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGh1bWJuYWlsRGF0YV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RodW1ibmFpbERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3BhZ2VEYXRhX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNQZGZWaWV3ZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfcGRmVXJsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2luaXRpYWxQYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2luaXRpYWxab29tX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9zaG93U2lkZWJhcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfdG90YWxQYWdlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9kb2N1bWVudElkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3RodW1ibmFpbERhdGFfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF9wYWdlRGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3BkZlVybF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZGZVcmwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBkZlVybCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wZGZVcmwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wZGZVcmwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX2luaXRpYWxQYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluaXRpYWxQYWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsUGFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0aWFsUGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmluaXRpYWxQYWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfaW5pdGlhbFpvb21fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbFpvb20iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluaXRpYWxab29tIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxab29tLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5pdGlhbFpvb20gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgX2luaXRpYWxab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9zaG93VG9vbGJhcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VG9vbGJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1Rvb2xiYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rvb2xiYXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VG9vbGJhciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rvb2xiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3Nob3dTaWRlYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dTaWRlYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93U2lkZWJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93U2lkZWJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dTaWRlYmFyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRQYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudFBhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgX2N1cnJlbnRQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF90b3RhbFBhZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRvdGFsUGFnZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsUGFnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudG90YWxQYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRvdGFsUGFnZXMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfY3VycmVudFpvb21fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFpvb20iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRab29tIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRab29tLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudFpvb20gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9sb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfZG9jdW1lbnRJZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkb2N1bWVudElkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkb2N1bWVudElkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRvY3VtZW50SWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kb2N1bWVudElkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb2N1bWVudElkX2luaXRpYWxpemVycywgX2RvY3VtZW50SWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3RodW1ibmFpbERhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGh1bWJuYWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGh1bWJuYWlsRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHVtYm5haWxEYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGh1bWJuYWlsRGF0YSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9wYWdlRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwYWdlRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFnZURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wYWdlRGF0YSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1BkZlZpZXdlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vNDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTWVkaWEiLCAiUERGIl07CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IHZpZXdlclN0eWxlczsKICAgICAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgZ2V0IHBkZlVybCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgICAgICBnZXQgaW5pdGlhbFBhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGluaXRpYWxQYWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2luaXRpYWxab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfaW5pdGlhbFBhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9pbml0aWFsWm9vbV9pbml0aWFsaXplcnMsICJhdXRvIikpOwogICAgICAgIGdldCBpbml0aWFsWm9vbSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5pdGlhbFpvb20odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1Rvb2xiYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9pbml0aWFsWm9vbV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3Nob3dUb29sYmFyX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3Nob3dTaWRlYmFyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgc2hvd1NpZGViYXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dTaWRlYmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2N1cnJlbnRQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfc2hvd1NpZGViYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9jdXJyZW50UGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgICAgICBnZXQgY3VycmVudFBhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGN1cnJlbnRQYWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RvdGFsUGFnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9jdXJyZW50UGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICAgICAgZ2V0IHRvdGFsUGFnZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdG90YWxQYWdlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdG90YWxQYWdlcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RvdGFsUGFnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2N1cnJlbnRab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgMSkpOwogICAgICAgIGdldCBjdXJyZW50Wm9vbSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50Wm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VycmVudFpvb20odmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjdXJyZW50Wm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGxvYWRpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbG9hZGluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RvY3VtZW50SWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfZG9jdW1lbnRJZF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGRvY3VtZW50SWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZG9jdW1lbnRJZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZG9jdW1lbnRJZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RvY3VtZW50SWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IHRodW1ibmFpbERhdGEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGh1bWJuYWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGh1bWJuYWlsRGF0YSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3BhZ2VEYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3BhZ2VEYXRhX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgcGFnZURhdGEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBhZ2VEYXRhKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgcGRmRG9jdW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9wYWdlRGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgcmVuZGVyU3RhdGUgPSAiaWRsZSI7CiAgICAgICAgcmVuZGVyQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAgICAgICBwYWdlUmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgcGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgICAgIGN1cnJlbnRSZW5kZXJUYXNrID0gbnVsbDsKICAgICAgICBjdXJyZW50UmVuZGVyUHJvbWlzZSA9IG51bGw7CiAgICAgICAgdGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgICBwYWdlUmVuZGVyVGFza3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIHRleHRMYXllclJlbmRlclRhc2tzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBjYW52YXM7CiAgICAgICAgY3R4OwogICAgICAgIHZpZXdlck1haW4gPSBudWxsOwogICAgICAgIHJlc2l6ZU9ic2VydmVyOwogICAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyOwogICAgICAgIHNjcm9sbFRocm90dGxlVGltZW91dDsKICAgICAgICB2aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgICAgICB2aWV3cG9ydE1vZGUgPSAiYXV0byI7CiAgICAgICAgTUFOVUFMX01JTl9aT09NID0gMC41OwogICAgICAgIE1BTlVBTF9NQVhfWk9PTSA9IDM7CiAgICAgICAgQUJTT0xVVEVfTUlOX1pPT00gPSAwLjE7CiAgICAgICAgQUJTT0xVVEVfTUFYX1pPT00gPSA0OwogICAgICAgIFBBR0VfR0FQID0gMjA7CiAgICAgICAgUkVOREVSX0JVRkZFUiA9IDM7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgIH0KICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBkZi12aWV3ZXIgJHt0aGlzLnNob3dTaWRlYmFyID8gIndpdGgtc2lkZWJhciIgOiAiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZSA8PSAxfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWluZm8iPgogICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgICAgICAgbWluPSIxIgogICAgICAgICAgICAgICAgICBtYXg9IiR7dGhpcy50b3RhbFBhZ2VzfSIKICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7U3RyaW5nKHRoaXMuY3VycmVudFBhZ2UpfQogICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVQYWdlSW5wdXR9CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXNlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXRvdGFsIj4ke3RoaXMudG90YWxQYWdlc308L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5uZXh0UGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2hvd1NpZGViYXIgPSAhdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXIgPyAiSGlkZSB0aHVtYm5haWxzIiA6ICJTaG93IHRodW1ibmFpbHMifSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7dGhpcy5zaG93U2lkZWJhciA/ICJsdWNpZGU6U2lkZWJhckNsb3NlIiA6ICJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMuc2hvd1NpZGViYXIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+UGFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWNsb3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2V9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLmtleWVkKHRoaXMuZG9jdW1lbnRJZCwgYjJgCiAgICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsIChpdGVtKSA9PiBpdGVtLnBhZ2UsIChpdGVtKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2UgPT09IGl0ZW0ucGFnZSA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtpdGVtLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLW1haW4iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+TG9hZGluZyBQREYuLi48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAke2RpcmVjdGl2ZXNfZXhwb3J0cy5yZXBlYXQodGhpcy5wYWdlRGF0YSwgKGl0ZW0pID0+IGl0ZW0ucGFnZSwgKGl0ZW0pID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InBhZ2UtY2FudmFzIiBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtbGF5ZXIiIGRhdGEtcGFnZT0iJHtpdGVtLnBhZ2V9Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICB0aGlzLmVuc3VyZVZpZXdlclJlZnMoKTsKICAgICAgICAgIGlmICh0aGlzLnBkZlVybCkgewogICAgICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwOwogICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJkaXNwb3NlZCI7CiAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICAgICAgdGhpcy5jYW52YXMgPSB2b2lkIDA7CiAgICAgICAgICB0aGlzLmN0eCA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJwZGZVcmwiKSAmJiB0aGlzLnBkZlVybCkgewogICAgICAgICAgICBjb25zdCBwcmV2aW91c1VybCA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgicGRmVXJsIik7CiAgICAgICAgICAgIGlmIChwcmV2aW91c1VybCkgewogICAgICAgICAgICAgIFBkZk1hbmFnZXIucmVsZWFzZURvY3VtZW50KHByZXZpb3VzVXJsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJzaG93U2lkZWJhciIpICYmIHRoaXMuc2hvd1NpZGViYXIgJiYgdGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEuZm9yRWFjaCgodGh1bWIpID0+IHRodW1iLnJlbmRlcmVkID0gZmFsc2UpOwogICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclRodW1ibmFpbHMoKTsKICAgICAgICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcodGhpcy5jdXJyZW50UGFnZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGxvYWRQZGYoKSB7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJsb2FkaW5nIjsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cERvY3VtZW50KCk7CiAgICAgICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5zaWduYWw7CiAgICAgICAgICAgIHRoaXMucGRmRG9jdW1lbnQgPSBhd2FpdCBQZGZNYW5hZ2VyLmxvYWREb2N1bWVudCh0aGlzLnBkZlVybCk7CiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmluaXRpYWxQYWdlOwogICAgICAgICAgICB0aGlzLnJlc29sdmVJbml0aWFsVmlld3BvcnRNb2RlKCk7CiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsRGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudG90YWxQYWdlcyB9LCAoXzQsIGkxMSkgPT4gKHsKICAgICAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgICAgIHJlbmRlcmVkOiBmYWxzZQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRoaXMucGFnZURhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICAgICAgcGFnZTogaTExICsgMSwKICAgICAgICAgICAgICByZW5kZXJlZDogZmFsc2UsCiAgICAgICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZSwKICAgICAgICAgICAgICB0ZXh0TGF5ZXJSZW5kZXJlZDogZmFsc2UKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgICAgdGhpcy5lbnN1cmVWaWV3ZXJSZWZzKCk7CiAgICAgICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gInJlbmRlcmluZy1tYWluIjsKICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJWaXNpYmxlUGFnZXMoKTsKICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFBhZ2UgPiAxKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5pbml0aWFsUGFnZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTaWRlYmFyKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclRodW1ibmFpbHMoKTsKICAgICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJyZW5kZXJlZCI7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIFBERjoiLCBlcnJvcik7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gImVycm9yIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7CiAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IGVudHJ5LnRhcmdldDsKICAgICAgICAgICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQocGFnZVdyYXBwZXIuZGF0YXNldC5wYWdlIHx8ICIxIik7CiAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7CiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHsKICAgICAgICAgICAgcm9vdDogdGhpcy52aWV3ZXJNYWluLAogICAgICAgICAgICByb290TWFyZ2luOiBgJHt0aGlzLlJFTkRFUl9CVUZGRVIgKiAxMDB9cHggMHB4YCwKICAgICAgICAgICAgdGhyZXNob2xkOiAwLjAxCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhZ2VXcmFwcGVycyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbCgiLnBhZ2Utd3JhcHBlciIpOwogICAgICAgICAgaWYgKHBhZ2VXcmFwcGVycykgewogICAgICAgICAgICBwYWdlV3JhcHBlcnMuZm9yRWFjaCgod3JhcHBlcikgPT4gewogICAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/Lm9ic2VydmUod3JhcHBlcik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodDsKICAgICAgICAgIGZvciAoY29uc3QgcGFnZUluZm8gb2YgdGhpcy5wYWdlRGF0YSkgewogICAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLnBhZ2Utd3JhcHBlcltkYXRhLXBhZ2U9IiR7cGFnZUluZm8ucGFnZX0iXWApOwogICAgICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCByZWN0ID0gcGFnZVdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlVG9wID0gcmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcDsKICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVCb3R0b20gPSByZWxhdGl2ZVRvcCArIHJlY3QuaGVpZ2h0OwogICAgICAgICAgICBjb25zdCBidWZmZXIyID0gdGhpcy5SRU5ERVJfQlVGRkVSICogY2xpZW50SGVpZ2h0OwogICAgICAgICAgICBpZiAocmVsYXRpdmVCb3R0b20gPj0gLWJ1ZmZlcjIgJiYgcmVsYXRpdmVUb3AgPD0gY2xpZW50SGVpZ2h0ICsgYnVmZmVyMikgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyUGFnZUlmTmVlZGVkKHBhZ2VJbmZvLnBhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKSB7CiAgICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHRoaXMucGFnZURhdGEuZmluZCgocDcpID0+IHA3LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKCFwYWdlSW5mbyB8fCBwYWdlSW5mby5yZW5kZXJlZCB8fCBwYWdlSW5mby5yZW5kZXJpbmcpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHBhZ2VJbmZvLnJlbmRlcmluZyA9IHRydWU7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLWNhbnZhc1tkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgICAgICBpZiAoIWNhbnZhcykgewogICAgICAgICAgICAgIHBhZ2VJbmZvLnJlbmRlcmluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKHBhZ2VOdW0pOwogICAgICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuY29tcHV0ZVZpZXdwb3J0KHBhZ2UpOwogICAgICAgICAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwogICAgICAgICAgICBjYW52YXMud2lkdGggPSBNYXRoLmZsb29yKHZpZXdwb3J0LndpZHRoICogZHByKTsKICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IE1hdGguZmxvb3Iodmlld3BvcnQuaGVpZ2h0ICogZHByKTsKICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnQud2lkdGh9cHhgOwogICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgICAgIGlmICghY3R4KSB7CiAgICAgICAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnNjYWxlKGRwciwgZHByKTsKICAgICAgICAgICAgY29uc3QgcmVuZGVyQ29udGV4dCA9IHsKICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjdHgsCiAgICAgICAgICAgICAgdmlld3BvcnQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5zZXQocGFnZU51bSwgcmVuZGVyVGFzayk7CiAgICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICAgICAgcGFnZUluZm8ucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclRleHRMYXllcihwYWdlTnVtKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJwYWdlRGF0YSIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaWYgKGVycm9yPy5uYW1lICE9PSAiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlbmRlcmluZyBwYWdlICR7cGFnZU51bX06YCwgZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBhZ2VJbmZvLnJlbmRlcmluZyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5kZWxldGUocGFnZU51bSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHJlbmRlclRleHRMYXllcihwYWdlTnVtKSB7CiAgICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHRoaXMucGFnZURhdGEuZmluZCgocDcpID0+IHA3LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKCFwYWdlSW5mbyB8fCBwYWdlSW5mby50ZXh0TGF5ZXJSZW5kZXJlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgdGV4dExheWVyRGl2ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGV4dC1sYXllcltkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgICAgICBpZiAoIXRleHRMYXllckRpdikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRleHRMYXllckRpdi5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShwYWdlTnVtKTsKICAgICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBhd2FpdCBwYWdlLmdldFRleHRDb250ZW50KCk7CiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5jb21wdXRlVmlld3BvcnQocGFnZSk7CiAgICAgICAgICAgIGNvbnN0IHBkZmpzID0gYXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7CiAgICAgICAgICAgIHRleHRMYXllckRpdi5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0LndpZHRofXB4YDsKICAgICAgICAgICAgdGV4dExheWVyRGl2LnN0eWxlLmhlaWdodCA9IGAke3ZpZXdwb3J0LmhlaWdodH1weGA7CiAgICAgICAgICAgIHRleHRMYXllckRpdi5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zY2FsZS1mYWN0b3IiLCBTdHJpbmcodmlld3BvcnQuc2NhbGUpKTsKICAgICAgICAgICAgY29uc3QgdGV4dExheWVyUmVuZGVyVGFzayA9IHBkZmpzLnJlbmRlclRleHRMYXllcih7CiAgICAgICAgICAgICAgdGV4dENvbnRlbnRTb3VyY2U6IHRleHRDb250ZW50LAogICAgICAgICAgICAgIGNvbnRhaW5lcjogdGV4dExheWVyRGl2LAogICAgICAgICAgICAgIHZpZXdwb3J0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLnNldChwYWdlTnVtLCB0ZXh0TGF5ZXJSZW5kZXJUYXNrKTsKICAgICAgICAgICAgYXdhaXQgdGV4dExheWVyUmVuZGVyVGFzay5wcm9taXNlOwogICAgICAgICAgICBjb25zdCBlbmRPZkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgZW5kT2ZDb250ZW50LmNsYXNzTmFtZSA9ICJlbmRPZkNvbnRlbnQiOwogICAgICAgICAgICB0ZXh0TGF5ZXJEaXYuYXBwZW5kQ2hpbGQoZW5kT2ZDb250ZW50KTsKICAgICAgICAgICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICAgICAgbGV0IGFuY2hvck5vZGUgPSBudWxsOwogICAgICAgICAgICBsZXQgYW5jaG9yT2Zmc2V0ID0gMDsKICAgICAgICAgICAgY29uc3QgZ2V0VGV4dFBvc2l0aW9uRnJvbVBvaW50ID0gKHg0LCB5NCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHNwYW5zID0gQXJyYXkuZnJvbSh0ZXh0TGF5ZXJEaXYucXVlcnlTZWxlY3RvckFsbCgic3BhbiIpKTsKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNwYW4gb2Ygc3BhbnMpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBzcGFuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgICAgaWYgKHg0ID49IHJlY3QubGVmdCAmJiB4NCA8PSByZWN0LnJpZ2h0ICYmIHk0ID49IHJlY3QudG9wICYmIHk0IDw9IHJlY3QuYm90dG9tKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gc3Bhbi5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICBpZiAodGV4dE5vZGUgJiYgdGV4dE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dDkgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyV2lkdGggPSByZWN0LndpZHRoIC8gdGV4dDkubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlWCA9IHg0IC0gcmVjdC5sZWZ0OwogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGgubWluKE1hdGgucm91bmQocmVsYXRpdmVYIC8gY2hhcldpZHRoKSwgdGV4dDkubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0IH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGlzRHJhZ2dpbmcpIHsKICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsOwogICAgICAgICAgICAgICAgdGV4dExheWVyRGl2LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGluZyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgaGFuZGxlTW91c2VVcCk7CiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgaGFuZGxlTW91c2VNb3ZlKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGUxMSkgPT4gewogICAgICAgICAgICAgIGlmICghaXNEcmFnZ2luZyB8fCAhYW5jaG9yTm9kZSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRUZXh0UG9zaXRpb25Gcm9tUG9pbnQoZTExLmNsaWVudFgsIGUxMS5jbGllbnRZKTsKICAgICAgICAgICAgICBpZiAocG9zKSB7CiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBwb3Mubm9kZSwgcG9zLm9mZnNldCk7CiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0ZXh0TGF5ZXJEaXYuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgICAgIGlmIChlMTEuYnV0dG9uICE9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdldFRleHRQb3NpdGlvbkZyb21Qb2ludChlMTEuY2xpZW50WCwgZTExLmNsaWVudFkpOwogICAgICAgICAgICAgIGlmIChwb3MpIHsKICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gcG9zLm5vZGU7CiAgICAgICAgICAgICAgICBhbmNob3JPZmZzZXQgPSBwb3Mub2Zmc2V0OwogICAgICAgICAgICAgICAgdGV4dExheWVyRGl2LmNsYXNzTGlzdC5hZGQoInNlbGVjdGluZyIpOwogICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGhhbmRsZU1vdXNlTW92ZSk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgaGFuZGxlTW91c2VVcCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcGFnZUluZm8udGV4dExheWVyUmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICB0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmRlbGV0ZShwYWdlTnVtKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGlmIChlcnJvcj8ubmFtZSAhPT0gIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiIpIHsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgdGV4dCBsYXllciBmb3IgcGFnZSAke3BhZ2VOdW19OmAsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmRlbGV0ZShwYWdlTnVtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlU2Nyb2xsID0gKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpOwogICAgICAgICAgICB0aGlzLnJlbmRlclZpc2libGVQYWdlcygpOwogICAgICAgICAgfSwgNTApOwogICAgICAgIH07CiAgICAgICAgdXBkYXRlQ3VycmVudFBhZ2UoKSB7CiAgICAgICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy52aWV3ZXJNYWluLnNjcm9sbFRvcDsKICAgICAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBjb25zdCBjZW50ZXJZID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC8gMjsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHRoaXMucGFnZURhdGEubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgLnBhZ2Utd3JhcHBlcltkYXRhLXBhZ2U9IiR7aTExICsgMX0iXWApOwogICAgICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCByZWN0ID0gcGFnZVdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlVG9wID0gcmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcCArIHNjcm9sbFRvcDsKICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVCb3R0b20gPSByZWxhdGl2ZVRvcCArIHJlY3QuaGVpZ2h0OwogICAgICAgICAgICBpZiAoY2VudGVyWSA+PSByZWxhdGl2ZVRvcCAmJiBjZW50ZXJZIDw9IHJlbGF0aXZlQm90dG9tKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IGkxMSArIDEpIHsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBpMTEgKyAxOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NpZGViYXIpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhpMTEgKyAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcocGFnZU51bSkgewogICAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgICAgICBjb25zdCBzaWRlYmFyQ29udGVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNpZGViYXItY29udGVudCIpOwogICAgICAgICAgaWYgKHRodW1ibmFpbCAmJiBzaWRlYmFyQ29udGVudCkgewogICAgICAgICAgICBjb25zdCB0aHVtYm5haWxSZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBjb25zdCBzaWRlYmFyUmVjdCA9IHNpZGViYXJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBjb25zdCBpc0Fib3ZlID0gdGh1bWJuYWlsUmVjdC50b3AgPCBzaWRlYmFyUmVjdC50b3A7CiAgICAgICAgICAgIGNvbnN0IGlzQmVsb3cgPSB0aHVtYm5haWxSZWN0LmJvdHRvbSA+IHNpZGViYXJSZWN0LmJvdHRvbTsKICAgICAgICAgICAgaWYgKGlzQWJvdmUgfHwgaXNCZWxvdykgewogICAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbE9mZnNldCA9IHRodW1ibmFpbC5vZmZzZXRUb3A7CiAgICAgICAgICAgICAgY29uc3QgdGh1bWJuYWlsSGVpZ2h0ID0gdGh1bWJuYWlsLm9mZnNldEhlaWdodDsKICAgICAgICAgICAgICBjb25zdCBzaWRlYmFySGVpZ2h0ID0gc2lkZWJhckNvbnRlbnQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IHRodW1ibmFpbE9mZnNldCAtIHNpZGViYXJIZWlnaHQgLyAyICsgdGh1bWJuYWlsSGVpZ2h0IC8gMjsKICAgICAgICAgICAgICBzaWRlYmFyQ29udGVudC5zY3JvbGxUbyh7CiAgICAgICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIHRhcmdldFNjcm9sbFRvcCksCiAgICAgICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBzY3JvbGxUb1BhZ2UocGFnZU51bSwgc21vb3RoID0gdHJ1ZSkgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGNvbnN0IHBhZ2VXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgICAgICBpZiAocGFnZVdyYXBwZXIgJiYgdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgICAgIGNvbnN0IHBhZ2VSZWN0ID0gcGFnZVdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wOwogICAgICAgICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBjdXJyZW50U2Nyb2xsVG9wICsgKHBhZ2VSZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wKSAtIHRoaXMudmlld2VyTWFpbi5jbGllbnRUb3A7CiAgICAgICAgICAgIGlmIChzbW9vdGgpIHsKICAgICAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG8oewogICAgICAgICAgICAgICAgdG9wOiB0YXJnZXRTY3JvbGxUb3AsCiAgICAgICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wID0gdGFyZ2V0U2Nyb2xsVG9wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlTnVtOwogICAgICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVGh1bWJuYWlsSW50b1ZpZXcocGFnZU51bSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQYWdlSWZOZWVkZWQocGFnZU51bSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHJlbmRlclRodW1ibmFpbHMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudGh1bWJuYWlsRGF0YS5sZW5ndGggPiAwICYmIHRoaXMudGh1bWJuYWlsRGF0YS5ldmVyeSgodDkpID0+IHQ5LnJlbmRlcmVkKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyPy5zaWduYWw7CiAgICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gInJlbmRlcmluZy10aHVtYnMiOwogICAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICBjb25zdCB0aHVtYm5haWxzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIik7CiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbENhbnZhc2VzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsLWNhbnZhcyIpOwogICAgICAgICAgICBjb25zdCBzaWRlYmFyQ29udGVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNpZGViYXItY29udGVudCIpOwogICAgICAgICAgICBjb25zdCBzaWRlYmFyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2lkZWJhckNvbnRlbnQpOwogICAgICAgICAgICBjb25zdCBzaWRlYmFyUGFkZGluZyA9IHBhcnNlRmxvYXQoc2lkZWJhclN0eWxlcy5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KHNpZGViYXJTdHlsZXMucGFkZGluZ1JpZ2h0KTsKICAgICAgICAgICAgY29uc3QgbWF4VGh1bWJuYWlsV2lkdGggPSAyMDAgLSBzaWRlYmFyUGFkZGluZyAtIDQ7CiAgICAgICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIEFycmF5LmZyb20odGh1bWJuYWlsQ2FudmFzZXMpKSB7CiAgICAgICAgICAgICAgY29uc3QgY29udGV4dDIgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgICAgICBpZiAoY29udGV4dDIpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQyLmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB0aHVtYm5haWxDYW52YXNlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aHVtYm5haWxDYW52YXNlc1tpMTFdOwogICAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbCA9IHRodW1ibmFpbHNbaTExXTsKICAgICAgICAgICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoY2FudmFzLmRhdGFzZXQucGFnZSB8fCAiMSIpOwogICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gbWF4VGh1bWJuYWlsV2lkdGggLyBpbml0aWFsVmlld3BvcnQud2lkdGg7CiAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICAgICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTsKICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBNYXRoLmZsb29yKHZpZXdwb3J0LndpZHRoICogZHByKTsKICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vcih2aWV3cG9ydC5oZWlnaHQgKiBkcHIpOwogICAgICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0LndpZHRofXB4YDsKICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgICAgICB0aHVtYm5haWwuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgICAgICB0aHVtYm5haWwuc3R5bGUubWluSGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgICAgIGlmICghY29udGV4dDIpIHsKICAgICAgICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29udGV4dDIuc2NhbGUoZHByLCBkcHIpOwogICAgICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0MiwKICAgICAgICAgICAgICAgIHZpZXdwb3J0CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBjb25zdCByZW5kZXJUYXNrID0gcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCk7CiAgICAgICAgICAgICAgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcy5wdXNoKHJlbmRlclRhc2spOwogICAgICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICAgIGNvbnN0IHRodW1iRGF0YSA9IHRoaXMudGh1bWJuYWlsRGF0YS5maW5kKCh0OSkgPT4gdDkucGFnZSA9PT0gcGFnZU51bSk7CiAgICAgICAgICAgICAgaWYgKHRodW1iRGF0YSkgewogICAgICAgICAgICAgICAgdGh1bWJEYXRhLnJlbmRlcmVkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ0aHVtYm5haWxEYXRhIik7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgcmVuZGVyaW5nIHRodW1ibmFpbHM6IiwgZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByZXZpb3VzUGFnZSgpIHsKICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gMSkgewogICAgICAgICAgICB0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5leHRQYWdlKCkgewogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMpIHsKICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5jdXJyZW50UGFnZSArIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVUaHVtYm5haWxDbGljayhlMTEpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KHRhcmdldC5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIHRoaXMuc2Nyb2xsVG9QYWdlKHBhZ2VOdW0pOwogICAgICAgIH0KICAgICAgICBoYW5kbGVQYWdlSW5wdXQoZTExKSB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpOwogICAgICAgICAgdGhpcy5zY3JvbGxUb1BhZ2UocGFnZU51bSk7CiAgICAgICAgfQogICAgICAgIHpvb21JbigpIHsKICAgICAgICAgIGNvbnN0IG5leHRab29tID0gTWF0aC5taW4odGhpcy5NQU5VQUxfTUFYX1pPT00sIHRoaXMuY3VycmVudFpvb20gKiAxLjIpOwogICAgICAgICAgdGhpcy52aWV3cG9ydE1vZGUgPSAiY3VzdG9tIjsKICAgICAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gbmV4dFpvb207CiAgICAgICAgICAgIHRoaXMucmVSZW5kZXJBbGxQYWdlcygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB6b29tT3V0KCkgewogICAgICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAvIDEuMik7CiAgICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICAgICAgaWYgKG5leHRab29tICE9PSB0aGlzLmN1cnJlbnRab29tKSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc2V0Wm9vbSgpIHsKICAgICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgICAgIHRoaXMucmVSZW5kZXJBbGxQYWdlcygpOwogICAgICAgIH0KICAgICAgICBmaXRUb1BhZ2UoKSB7CiAgICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLWZpdCI7CiAgICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgICB9CiAgICAgICAgZml0VG9XaWR0aCgpIHsKICAgICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2Utd2lkdGgiOwogICAgICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICAgICAgfQogICAgICAgIHJlUmVuZGVyQWxsUGFnZXMoKSB7CiAgICAgICAgICB0aGlzLnBhZ2VEYXRhLmZvckVhY2goKHBhZ2UpID0+IHsKICAgICAgICAgICAgcGFnZS5yZW5kZXJlZCA9IGZhbHNlOwogICAgICAgICAgICBwYWdlLnJlbmRlcmluZyA9IGZhbHNlOwogICAgICAgICAgICBwYWdlLnRleHRMYXllclJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCk7CiAgICAgICAgICB0aGlzLnRleHRMYXllclJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0YXNrLmNhbmNlbD8uKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy50ZXh0TGF5ZXJSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLnJlbmRlclZpc2libGVQYWdlcygpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRvd25sb2FkUGRmKCkgewogICAgICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBkYXRhMTEgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldERhdGEoKTsKICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhMTEuYnVmZmVyXSwgeyB0eXBlOiAiYXBwbGljYXRpb24vcGRmIiB9KTsKICAgICAgICAgICAgY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7CiAgICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICBsaW5rMy5ocmVmID0gYmxvYlVybDsKICAgICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybCA/IHRoaXMucGRmVXJsLnNwbGl0KCIvIikucG9wKCkgfHwgImRvY3VtZW50LnBkZiIgOiAiZG9jdW1lbnQucGRmIjsKICAgICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpLCAxZTMpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZG93bmxvYWRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgcHJpbnRQZGYoKSB7CiAgICAgICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGRhdGExMSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0RGF0YSgpOwogICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGExMS5idWZmZXJdLCB7IHR5cGU6ICJhcHBsaWNhdGlvbi9wZGYiIH0pOwogICAgICAgICAgICBjb25zdCBwZGZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgICAgICBjb25zdCBodG1sQ29udGVudCA9IGAKICAgICAgICA8IURPQ1RZUEUgaHRtbD4KICAgICAgICA8aHRtbD4KICAgICAgICA8aGVhZD4KICAgICAgICAgIDx0aXRsZT5QcmludCBQREY8L3RpdGxlPgogICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CiAgICAgICAgICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB9CiAgICAgICAgICAgIGlmcmFtZSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IGJvcmRlcjogbm9uZTsgfQogICAgICAgICAgICBAbWVkaWEgcHJpbnQgewogICAgICAgICAgICAgIGh0bWwsIGJvZHksIGlmcmFtZSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IH0KICAgICAgICAgICAgfQogICAgICAgICAgPC9zdHlsZT4KICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICA8aWZyYW1lIHNyYz0iJHtwZGZVcmx9IiB0eXBlPSJhcHBsaWNhdGlvbi9wZGYiPjwvaWZyYW1lPgogICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5wcmludCgpOwogICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHdpbmRvdy5vbmFmdGVycHJpbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgLy8gU2FmZXR5IGNsb3NlIGFmdGVyIDIgbWludXRlcwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB3aW5kb3cuY2xvc2UoKTsgfSwgMTIwMDAwKTsKICAgICAgICAgIDxcL3NjcmlwdD4KICAgICAgICA8L2JvZHk+CiAgICAgICAgPC9odG1sPgogICAgICBgOwogICAgICAgICAgICBjb25zdCBodG1sQmxvYiA9IG5ldyBCbG9iKFtodG1sQ29udGVudF0sIHsgdHlwZTogInRleHQvaHRtbCIgfSk7CiAgICAgICAgICAgIGNvbnN0IGh0bWxVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGh0bWxCbG9iKTsKICAgICAgICAgICAgY29uc3QgcHJpbnRXaW5kb3cgPSB3aW5kb3cub3BlbihodG1sVXJsLCAiX2JsYW5rIiwgIndpZHRoPTgwMCxoZWlnaHQ9NjAwIik7CiAgICAgICAgICAgIGlmIChwcmludFdpbmRvdykgewogICAgICAgICAgICAgIGNvbnN0IGNoZWNrQ2xvc2VkID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKHByaW50V2luZG93LmNsb3NlZCkgewogICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrQ2xvc2VkKTsKICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChwZGZVcmwpOwogICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGh0bWxVcmwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrQ2xvc2VkKTsKICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwocGRmVXJsKTsKICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaHRtbFVybCk7CiAgICAgICAgICAgICAgfSwgMTJlNCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgd2luZG93Lm9wZW4ocGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKHBkZlVybCksIDZlNCk7CiAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChodG1sVXJsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgcHJpbnRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUHJvdmlkZSBjb250ZXh0IG1lbnUgaXRlbXMgZm9yIHJpZ2h0LWNsaWNrIGZ1bmN0aW9uYWxpdHkKICAgICAgICAgKi8KICAgICAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICAgICAgY29uc3QgaXRlbXMgPSBbXTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbj8udG9TdHJpbmcoKSB8fCAiIjsKICAgICAgICAgIGlmIChzZWxlY3RlZFRleHQpIHsKICAgICAgICAgICAgaXRlbXMucHVzaCh7CiAgICAgICAgICAgICAgbmFtZTogIkNvcHkiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkNvcHkiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2VsZWN0ZWRUZXh0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiAiRG93bmxvYWQgUERGIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RG93bmxvYWQiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvd25sb2FkUGRmKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHsKICAgICAgICAgICAgbmFtZTogIlByaW50IFBERiIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOlByaW50ZXIiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByaW50UGRmKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIGl0ZW1zOwogICAgICAgIH0KICAgICAgICBnZXQgY2FuWm9vbUluKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tIDwgdGhpcy5NQU5VQUxfTUFYX1pPT007CiAgICAgICAgfQogICAgICAgIGdldCBjYW5ab29tT3V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tID4gdGhpcy5NQU5VQUxfTUlOX1pPT007CiAgICAgICAgfQogICAgICAgIGVuc3VyZVZpZXdlclJlZnMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikgewogICAgICAgICAgICB0aGlzLnZpZXdlck1haW4gPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3ZXItbWFpbiIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudmlld2VyTWFpbiAmJiAhdGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTsKICAgICAgICAgICAgICBpZiAodGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMudmlld2VyTWFpbik7CiAgICAgICAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICAgICAgICB0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoZTExKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudDQgPSBlMTEuY3VycmVudFRhcmdldDsKICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBlbGVtZW50NC5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudDQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IGVsZW1lbnQ0LmNsaWVudEhlaWdodDsKICAgICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBlMTEuZGVsdGFZOwogICAgICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDA7CiAgICAgICAgICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IE1hdGguYWJzKHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCAtIHNjcm9sbEhlaWdodCkgPCAxOwogICAgICAgICAgICAgIGlmIChkZWx0YVkgPCAwICYmICFpc0F0VG9wIHx8IGRlbHRhWSA+IDAgJiYgIWlzQXRCb3R0b20pIHsKICAgICAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhWSA8IDAgJiYgaXNBdFRvcCB8fCBkZWx0YVkgPiAwICYmIGlzQXRCb3R0b20pIHsKICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgeyBwYXNzaXZlOiBmYWxzZSB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpIHsKICAgICAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHN0eWxlczMgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMudmlld2VyTWFpbik7CiAgICAgICAgICBjb25zdCBwYWRkaW5nWCA9IHBhcnNlRmxvYXQoc3R5bGVzMy5wYWRkaW5nTGVmdCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdSaWdodCB8fCAiMCIpOwogICAgICAgICAgY29uc3QgcGFkZGluZ1kgPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ1RvcCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdCb3R0b20gfHwgIjAiKTsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGhpcy52aWV3ZXJNYWluLmNsaWVudFdpZHRoIC0gcGFkZGluZ1gsIDApOwogICAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodCAtIHBhZGRpbmdZLCAwKTsKICAgICAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aCwgaGVpZ2h0IH07CiAgICAgICAgfQogICAgICAgIHJlc29sdmVJbml0aWFsVmlld3BvcnRNb2RlKCkgewogICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYWxab29tID09PSAibnVtYmVyIikgewogICAgICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gdGhpcy5ub3JtYWxpemVab29tKHRoaXMuaW5pdGlhbFpvb20sIHRydWUpOwogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS13aWR0aCIpIHsKICAgICAgICAgICAgdGhpcy52aWV3cG9ydE1vZGUgPSAicGFnZS13aWR0aCI7CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5pdGlhbFpvb20gPT09ICJwYWdlLWZpdCIgfHwgdGhpcy5pbml0aWFsWm9vbSA9PT0gImF1dG8iKSB7CiAgICAgICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImF1dG8iOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIikgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29tcHV0ZVZpZXdwb3J0KHBhZ2UpIHsKICAgICAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICAgICAgY29uc3QgYmFzZVZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgICAgbGV0IHNjYWxlOwogICAgICAgICAgc3dpdGNoICh0aGlzLnZpZXdwb3J0TW9kZSkgewogICAgICAgICAgICBjYXNlICJwYWdlLXdpZHRoIjogewogICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggfHwgYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgICAgIHNjYWxlID0gYXZhaWxhYmxlV2lkdGggLyBiYXNlVmlld3BvcnQud2lkdGg7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAicGFnZS1maXQiOgogICAgICAgICAgICBjYXNlICJhdXRvIjogewogICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggfHwgYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCB8fCBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgICAgIGNvbnN0IHdpZHRoU2NhbGUgPSBhdmFpbGFibGVXaWR0aCAvIGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgICAgICBjb25zdCBoZWlnaHRTY2FsZSA9IGF2YWlsYWJsZUhlaWdodCAvIGJhc2VWaWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICAgICAgc2NhbGUgPSBNYXRoLm1pbih3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgIHNjYWxlID0gdGhpcy5ub3JtYWxpemVab29tKHRoaXMuY3VycmVudFpvb20gfHwgMSwgZmFsc2UpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzY2FsZSkgfHwgc2NhbGUgPD0gMCkgewogICAgICAgICAgICBzY2FsZSA9IDE7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjbGFtcGVkU2NhbGUgPSB0aGlzLnZpZXdwb3J0TW9kZSA9PT0gImN1c3RvbSIgPyB0aGlzLm5vcm1hbGl6ZVpvb20oc2NhbGUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVab29tKHNjYWxlLCBmYWxzZSk7CiAgICAgICAgICBpZiAodGhpcy52aWV3cG9ydE1vZGUgIT09ICJjdXN0b20iKSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBjbGFtcGVkU2NhbGU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiBjbGFtcGVkU2NhbGUgfSk7CiAgICAgICAgfQogICAgICAgIG5vcm1hbGl6ZVpvb20odmFsdWUyLCBjbGFtcFRvTWFudWFsUmFuZ2UpIHsKICAgICAgICAgIGNvbnN0IG1pbjMgPSBjbGFtcFRvTWFudWFsUmFuZ2UgPyB0aGlzLk1BTlVBTF9NSU5fWk9PTSA6IHRoaXMuQUJTT0xVVEVfTUlOX1pPT007CiAgICAgICAgICBjb25zdCBtYXgzID0gY2xhbXBUb01hbnVhbFJhbmdlID8gdGhpcy5NQU5VQUxfTUFYX1pPT00gOiB0aGlzLkFCU09MVVRFX01BWF9aT09NOwogICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlMiwgbWluMyksIG1heDMpOwogICAgICAgIH0KICAgICAgICBhc3luYyBjbGVhbnVwRG9jdW1lbnQoKSB7CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFJlbmRlclByb21pc2UpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jdXJyZW50UmVuZGVyVGFzayA9IG51bGw7CiAgICAgICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICAgICAgdGhpcy50ZXh0TGF5ZXJSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgdGFzay5jYW5jZWw/LigpOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMudGV4dExheWVyUmVuZGVyVGFza3MuY2xlYXIoKTsKICAgICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzIHx8IFtdKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcyA9IFtdOwogICAgICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJpZGxlIjsKICAgICAgICAgIHRoaXMucGFnZVJlbmRlcmluZyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5wYWdlTnVtUGVuZGluZyA9IG51bGw7CiAgICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBbXTsKICAgICAgICAgIHRoaXMucGFnZURhdGEgPSBbXTsKICAgICAgICAgIHRoaXMuZG9jdW1lbnRJZCA9ICIiOwogICAgICAgICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuY3R4KSB7CiAgICAgICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgdGhpcy5wZGZEb2N1bWVudC5kZXN0cm95KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZGVzdHJveWluZyBQREYgZG9jdW1lbnQ6IiwgZXJyb3IpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gbnVsbDsKICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3NChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1BkZlZpZXdlcjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcHJldmlldy9kZWVzLXByZXZpZXcuZGVtby5qcwp2YXIgZGVtb0Z1bmM0OTsKdmFyIGluaXRfZGVlc19wcmV2aWV3X2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXByZXZpZXcvZGVlcy1wcmV2aWV3LmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jNDkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDQwcHg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBtYXgtd2lkdGg6IDkwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQoKICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgIH0KCiAgICAucHJldmlldy1wZGYgewogICAgICBoZWlnaHQ6IDYwMHB4OwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5JbWFnZSBQcmV2aWV3IChVUkwpPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkF1dG8tZGV0ZWN0cyBpbWFnZSBmcm9tIFVSTCBleHRlbnNpb24gYW5kIHJlbmRlcnMgd2l0aCB0aGUgaW1hZ2Ugdmlld2VyLjwvZGl2PgogICAgICA8ZGVlcy1wcmV2aWV3CiAgICAgICAgY2xhc3M9InByZXZpZXctaW1hZ2UiCiAgICAgICAgdXJsPSJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjc0NDAzODEzNi00NjI3MzgzNGIzZmI/dz0xMjAwIgogICAgICAgIGZpbGVuYW1lPSJsYW5kc2NhcGUuanBnIgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UERGIFByZXZpZXcgKFVSTCk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+QXV0by1kZXRlY3RzIFBERiBhbmQgZGlzcGxheXMgd2l0aCB0aGUgUERGIHZpZXdlciBpbmNsdWRpbmcgdG9vbGJhci48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIGNsYXNzPSJwcmV2aWV3LXBkZiIKICAgICAgICB1cmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICBmaWxlbmFtZT0icmVzZWFyY2gtcGFwZXIucGRmIgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q29kZSBQcmV2aWV3IChUZXh0IENvbnRlbnQpPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPlR5cGVTY3JpcHQgY29kZSBkaXNwbGF5ZWQgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIHZpYSB0aGUgY29kZWJveC48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIGZpbGVuYW1lPSJleGFtcGxlLnRzIgogICAgICAgIGxhbmd1YWdlPSJ0eXBlc2NyaXB0IgogICAgICAgIC50ZXh0Q29udGVudD0ke2BpbXBvcnQgeyBodG1sLCBjc3MgfSBmcm9tICdsaXQnOwoKZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7CiAgc3RhdGljIHN0eWxlcyA9IGNzc1xgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQogIFxgOwoKICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbFxgPGgxPkhlbGxvIFdvcmxkPC9oMT5cYDsKICB9Cn1gfQogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+QXVkaW8gUHJldmlldyAoVVJMKTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BdWRpbyBmaWxlIGRldGVjdGVkIGJ5IGV4dGVuc2lvbiwgc2hvd24gd2l0aCB3YXZlZm9ybSBwbGF5ZXIuPC9kaXY+CiAgICAgIDxkZWVzLXByZXZpZXcKICAgICAgICB1cmw9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMS5tcDMiCiAgICAgICAgZmlsZW5hbWU9InNvbmcubXAzIgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VmlkZW8gUHJldmlldyAoVVJMKTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5WaWRlbyBmaWxlIGRldGVjdGVkIGZyb20gVVJMLCByZW5kZXJlZCB3aXRoIGN1c3RvbSB2aWRlbyBjb250cm9scy48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIHVybD0iaHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9ndHYtdmlkZW9zLWJ1Y2tldC9zYW1wbGUvQmlnQnVja0J1bm55Lm1wNCIKICAgICAgICBmaWxlbmFtZT0iYmlnLWJ1Y2stYnVubnkubXA0IgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RXhwbGljaXQgVHlwZSBPdmVycmlkZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Gb3JjZSBjb250ZW50IHR5cGUgdG8gJ3RleHQnIGV2ZW4gdGhvdWdoIHRoZSBVUkwgaGFzIG5vIGV4dGVuc2lvbi48L2Rpdj4KICAgICAgPGRlZXMtcHJldmlldwogICAgICAgIGNvbnRlbnRUeXBlPSJ0ZXh0IgogICAgICAgIC50ZXh0Q29udGVudD0keyJUaGlzIGlzIHBsYWluIHRleHQgY29udGVudC5cbkl0IHByZXNlcnZlcyB3aGl0ZXNwYWNlIGFuZCBsaW5lIGJyZWFrcy5cblxuVXNlZnVsIGZvciBsb2cgZmlsZXMsIFJFQURNRXMsIGV0Yy4ifQogICAgICAgIGZpbGVuYW1lPSJub3Rlcy50eHQiCiAgICAgID48L2RlZXMtcHJldmlldz4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Vbmtub3duIFR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+V2hlbiBjb250ZW50IHR5cGUgY2Fubm90IGJlIGRldGVjdGVkLCBzaG93cyBhIHBsYWNlaG9sZGVyLjwvZGl2PgogICAgICA8ZGVlcy1wcmV2aWV3CiAgICAgICAgZmlsZW5hbWU9ImRhdGEuYmluIgogICAgICAgIGNvbnRlbnRUeXBlPSJ1bmtub3duIgogICAgICA+PC9kZWVzLXByZXZpZXc+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcHJldmlldy9kZWVzLXByZXZpZXcuanMKdmFyIF9fZXNEZWNvcmF0ZTc0LCBfX3J1bkluaXRpYWxpemVyczc1LCBFWFRFTlNJT05fTUFQLCBNSU1FX1BSRUZJWF9NQVAsIEVYVEVOU0lPTl9MQU5HX01BUCwgVFlQRV9JQ09OUywgRGVlc1ByZXZpZXc7CnZhciBpbml0X2RlZXNfcHJldmlldyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcHJldmlldy9kZWVzLXByZXZpZXcuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfY29tcG9uZW50NigpOwogICAgaW5pdF9jb21wb25lbnQ3KCk7CiAgICBpbml0X2NvbXBvbmVudDgoKTsKICAgIGluaXRfZGVlc19kYXRhdmlld19jb2RlYm94KCk7CiAgICBpbml0X2NvbXBvbmVudDkoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X2RlZXNfcHJldmlld19kZW1vKCk7CiAgICBfX2VzRGVjb3JhdGU3NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczc1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBFWFRFTlNJT05fTUFQID0gewogICAgICAvLyBJbWFnZQogICAgICBqcGc6ICJpbWFnZSIsCiAgICAgIGpwZWc6ICJpbWFnZSIsCiAgICAgIHBuZzogImltYWdlIiwKICAgICAgZ2lmOiAiaW1hZ2UiLAogICAgICB3ZWJwOiAiaW1hZ2UiLAogICAgICBzdmc6ICJpbWFnZSIsCiAgICAgIGJtcDogImltYWdlIiwKICAgICAgYXZpZjogImltYWdlIiwKICAgICAgaWNvOiAiaW1hZ2UiLAogICAgICAvLyBQREYKICAgICAgcGRmOiAicGRmIiwKICAgICAgLy8gQXVkaW8KICAgICAgbXAzOiAiYXVkaW8iLAogICAgICB3YXY6ICJhdWRpbyIsCiAgICAgIG9nZzogImF1ZGlvIiwKICAgICAgZmxhYzogImF1ZGlvIiwKICAgICAgYWFjOiAiYXVkaW8iLAogICAgICBtNGE6ICJhdWRpbyIsCiAgICAgIG9wdXM6ICJhdWRpbyIsCiAgICAgIHdlYmE6ICJhdWRpbyIsCiAgICAgIC8vIFZpZGVvCiAgICAgIG1wNDogInZpZGVvIiwKICAgICAgd2VibTogInZpZGVvIiwKICAgICAgbW92OiAidmlkZW8iLAogICAgICBhdmk6ICJ2aWRlbyIsCiAgICAgIG1rdjogInZpZGVvIiwKICAgICAgb2d2OiAidmlkZW8iLAogICAgICAvLyBDb2RlCiAgICAgIHRzOiAiY29kZSIsCiAgICAgIGpzOiAiY29kZSIsCiAgICAgIGpzeDogImNvZGUiLAogICAgICB0c3g6ICJjb2RlIiwKICAgICAganNvbjogImNvZGUiLAogICAgICBodG1sOiAiY29kZSIsCiAgICAgIGNzczogImNvZGUiLAogICAgICBzY3NzOiAiY29kZSIsCiAgICAgIGxlc3M6ICJjb2RlIiwKICAgICAgcHk6ICJjb2RlIiwKICAgICAgamF2YTogImNvZGUiLAogICAgICBnbzogImNvZGUiLAogICAgICByczogImNvZGUiLAogICAgICB5YW1sOiAiY29kZSIsCiAgICAgIHltbDogImNvZGUiLAogICAgICB4bWw6ICJjb2RlIiwKICAgICAgc3FsOiAiY29kZSIsCiAgICAgIHNoOiAiY29kZSIsCiAgICAgIGJhc2g6ICJjb2RlIiwKICAgICAgenNoOiAiY29kZSIsCiAgICAgIG1kOiAiY29kZSIsCiAgICAgIGM6ICJjb2RlIiwKICAgICAgY3BwOiAiY29kZSIsCiAgICAgIGg6ICJjb2RlIiwKICAgICAgaHBwOiAiY29kZSIsCiAgICAgIHJiOiAiY29kZSIsCiAgICAgIHBocDogImNvZGUiLAogICAgICBzd2lmdDogImNvZGUiLAogICAgICBrdDogImNvZGUiLAogICAgICAvLyBUZXh0CiAgICAgIHR4dDogInRleHQiLAogICAgICBsb2c6ICJ0ZXh0IiwKICAgICAgY3N2OiAidGV4dCIsCiAgICAgIGVudjogInRleHQiCiAgICB9OwogICAgTUlNRV9QUkVGSVhfTUFQID0gewogICAgICAiaW1hZ2UvIjogImltYWdlIiwKICAgICAgImF1ZGlvLyI6ICJhdWRpbyIsCiAgICAgICJ2aWRlby8iOiAidmlkZW8iLAogICAgICAiYXBwbGljYXRpb24vcGRmIjogInBkZiIKICAgIH07CiAgICBFWFRFTlNJT05fTEFOR19NQVAgPSB7CiAgICAgIHRzOiAidHlwZXNjcmlwdCIsCiAgICAgIHRzeDogInR5cGVzY3JpcHQiLAogICAgICBqczogImphdmFzY3JpcHQiLAogICAgICBqc3g6ICJqYXZhc2NyaXB0IiwKICAgICAganNvbjogImpzb24iLAogICAgICBodG1sOiAieG1sIiwKICAgICAgeG1sOiAieG1sIiwKICAgICAgY3NzOiAiY3NzIiwKICAgICAgc2NzczogInNjc3MiLAogICAgICBsZXNzOiAibGVzcyIsCiAgICAgIHB5OiAicHl0aG9uIiwKICAgICAgamF2YTogImphdmEiLAogICAgICBnbzogImdvIiwKICAgICAgcnM6ICJydXN0IiwKICAgICAgeWFtbDogInlhbWwiLAogICAgICB5bWw6ICJ5YW1sIiwKICAgICAgc3FsOiAic3FsIiwKICAgICAgc2g6ICJiYXNoIiwKICAgICAgYmFzaDogImJhc2giLAogICAgICB6c2g6ICJiYXNoIiwKICAgICAgYzogImMiLAogICAgICBjcHA6ICJjcHAiLAogICAgICBoOiAiYyIsCiAgICAgIGhwcDogImNwcCIsCiAgICAgIHJiOiAicnVieSIsCiAgICAgIHBocDogInBocCIsCiAgICAgIHN3aWZ0OiAic3dpZnQiLAogICAgICBrdDogImtvdGxpbiIsCiAgICAgIG1kOiAibWFya2Rvd24iCiAgICB9OwogICAgVFlQRV9JQ09OUyA9IHsKICAgICAgaW1hZ2U6ICJsdWNpZGU6SW1hZ2UiLAogICAgICBwZGY6ICJsdWNpZGU6RmlsZVRleHQiLAogICAgICBhdWRpbzogImx1Y2lkZTpNdXNpYyIsCiAgICAgIHZpZGVvOiAibHVjaWRlOlZpZGVvIiwKICAgICAgY29kZTogImx1Y2lkZTpDb2RlIiwKICAgICAgdGV4dDogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgIHVua25vd246ICJsdWNpZGU6RmlsZSIKICAgIH07CiAgICBEZWVzUHJldmlldyA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXByZXZpZXciKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3VybF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3VybF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF91cmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZmlsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYmFzZTY0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYmFzZTY0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Jhc2U2NF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RleHRDb250ZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGV4dENvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGV4dENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb250ZW50VHlwZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbnRlbnRUeXBlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbnRlbnRUeXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pbWVUeXBlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbWltZVR5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbWltZVR5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlbmFtZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbGVuYW1lX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbGVuYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dGaWxlbmFtZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dGaWxlbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93RmlsZW5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZXNvbHZlZFR5cGVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9yZXNvbHZlZFR5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVzb2x2ZWRUeXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVzb2x2ZWRTcmNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9yZXNvbHZlZFNyY19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZXNvbHZlZFNyY19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Jlc29sdmVkVGV4dF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Jlc29sdmVkVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZXNvbHZlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yZXNvbHZlZExhbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9yZXNvbHZlZExhbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVzb2x2ZWRMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vycm9yX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZXJyb3JfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNQcmV2aWV3MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3VybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2ZpbGVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX2Jhc2U2NF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX3RleHRDb250ZW50X2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfY29udGVudFR5cGVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX21pbWVUeXBlX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfZmlsZW5hbWVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF9zaG93VG9vbGJhcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2hvd0ZpbGVuYW1lX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9yZXNvbHZlZFR5cGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9yZXNvbHZlZFNyY19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3Jlc29sdmVkVGV4dF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3Jlc29sdmVkTGFuZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2xvYWRpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX3VybF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ1cmwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVybCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51cmwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai51cmwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3VybF9pbml0aWFsaXplcnMsIF91cmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX2ZpbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZmlsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsZV9pbml0aWFsaXplcnMsIF9maWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9iYXNlNjRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmFzZTY0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJiYXNlNjQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYmFzZTY0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYmFzZTY0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9iYXNlNjRfaW5pdGlhbGl6ZXJzLCBfYmFzZTY0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF90ZXh0Q29udGVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXh0Q29udGVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dENvbnRlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50ZXh0Q29udGVudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGV4dENvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfdGV4dENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX2NvbnRlbnRUeXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRUeXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50VHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbnRlbnRUeXBlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VHlwZV9pbml0aWFsaXplcnMsIF9jb250ZW50VHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfbGFuZ3VhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFuZ3VhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhbmd1YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhbmd1YWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9taW1lVHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW1lVHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWltZVR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWltZVR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5taW1lVHlwZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWltZVR5cGVfaW5pdGlhbGl6ZXJzLCBfbWltZVR5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX2ZpbGVuYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWxlbmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWxlbmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmZpbGVuYW1lID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlbmFtZV9pbml0aWFsaXplcnMsIF9maWxlbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rvb2xiYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dUb29sYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dUb29sYmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd1Rvb2xiYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUb29sYmFyX2luaXRpYWxpemVycywgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zaG93RmlsZW5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZW5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVuYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd0ZpbGVuYW1lID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RmlsZW5hbWVfaW5pdGlhbGl6ZXJzLCBfc2hvd0ZpbGVuYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9yZXNvbHZlZFR5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVzb2x2ZWRUeXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXNvbHZlZFR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRUeXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucmVzb2x2ZWRUeXBlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yZXNvbHZlZFR5cGVfaW5pdGlhbGl6ZXJzLCBfcmVzb2x2ZWRUeXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9yZXNvbHZlZFNyY19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXNvbHZlZFNyYyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVzb2x2ZWRTcmMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRTcmMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZXNvbHZlZFNyYyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVzb2x2ZWRTcmNfaW5pdGlhbGl6ZXJzLCBfcmVzb2x2ZWRTcmNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX3Jlc29sdmVkVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXNvbHZlZFRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJlc29sdmVkVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXNvbHZlZFRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZXNvbHZlZFRleHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Jlc29sdmVkVGV4dF9pbml0aWFsaXplcnMsIF9yZXNvbHZlZFRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX3Jlc29sdmVkTGFuZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXNvbHZlZExhbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJlc29sdmVkTGFuZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXNvbHZlZExhbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5yZXNvbHZlZExhbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Jlc29sdmVkTGFuZ19pbml0aWFsaXplcnMsIF9yZXNvbHZlZExhbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubG9hZGluZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9lcnJvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXJyb3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXJyb3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1ByZXZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTWVkaWEiLCAiRGF0YSBWaWV3Il07CiAgICAgICAgI3VybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfdXJsX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIC8vIENvbnRlbnQgc291cmNlcyAodXNlIG9uZSkKICAgICAgICBnZXQgdXJsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3VybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdXJsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNmaWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfdXJsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfZmlsZV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBmaWxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGZpbGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNmaWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNiYXNlNjRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9maWxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfYmFzZTY0X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgYmFzZTY0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Jhc2U2NF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYmFzZTY0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYmFzZTY0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0ZXh0Q29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX2Jhc2U2NF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3RleHRDb250ZW50X2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgdGV4dENvbnRlbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGV4dENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRleHRDb250ZW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGV4dENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2NvbnRlbnRUeXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfdGV4dENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9jb250ZW50VHlwZV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIC8vIEhpbnRzICYgb3ZlcnJpZGVzCiAgICAgICAgZ2V0IGNvbnRlbnRUeXBlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUeXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb250ZW50VHlwZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRlbnRUeXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX2NvbnRlbnRUeXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWltZVR5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX21pbWVUeXBlX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgbWltZVR5cGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbWltZVR5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1pbWVUeXBlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWltZVR5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ZpbGVuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfbWltZVR5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9maWxlbmFtZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGZpbGVuYW1lKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVuYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmaWxlbmFtZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZpbGVuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93VG9vbGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX2ZpbGVuYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgLy8gVUkKICAgICAgICBnZXQgc2hvd1Rvb2xiYXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd1Rvb2xiYXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dUb29sYmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1Rvb2xiYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dGaWxlbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2hvd0ZpbGVuYW1lX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93RmlsZW5hbWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVuYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93RmlsZW5hbWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93RmlsZW5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Jlc29sdmVkVHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3Nob3dGaWxlbmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3Jlc29sdmVkVHlwZV9pbml0aWFsaXplcnMsICJ1bmtub3duIikpOwogICAgICAgIC8vIEludGVybmFsCiAgICAgICAgZ2V0IHJlc29sdmVkVHlwZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXNvbHZlZFR5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlc29sdmVkVHlwZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Jlc29sdmVkVHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcmVzb2x2ZWRTcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9yZXNvbHZlZFR5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9yZXNvbHZlZFNyY19pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHJlc29sdmVkU3JjKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc29sdmVkU3JjX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCByZXNvbHZlZFNyYyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Jlc29sdmVkU3JjX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZXNvbHZlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9yZXNvbHZlZFNyY19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3Jlc29sdmVkVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHJlc29sdmVkVGV4dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXNvbHZlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlc29sdmVkVGV4dCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Jlc29sdmVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcmVzb2x2ZWRMYW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfcmVzb2x2ZWRUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfcmVzb2x2ZWRMYW5nX2luaXRpYWxpemVycywgInRleHQiKSk7CiAgICAgICAgZ2V0IHJlc29sdmVkTGFuZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNyZXNvbHZlZExhbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlc29sdmVkTGFuZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Jlc29sdmVkTGFuZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3Jlc29sdmVkTGFuZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBsb2FkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9lcnJvcl9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGVycm9yKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2Vycm9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2Vycm9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIG9iamVjdFVybCA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyksICIiKTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuZmlsZW5hbWUgfHwgdGhpcy5maWxlPy5uYW1lIHx8IHRoaXMuZ2V0RmlsZW5hbWVGcm9tVXJsKCkgfHwgIiI7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXItYmFyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXItaWNvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmhlYWRlci1maWxlbmFtZSB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgZmxleDogMTsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXItYmFkZ2UgewogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgfQoKICAgICAgICAuY29udGVudC1hcmVhID4gKiB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB9CgogICAgICAgIGRlZXMtaW1hZ2Utdmlld2VyIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIH0KCiAgICAgICAgZGVlcy12aWRlby12aWV3ZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICBkZWVzLWF1ZGlvLXZpZXdlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB9CgogICAgICAgIGRlZXMtZGF0YXZpZXctY29kZWJveCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIC50ZXh0LXZpZXdlciB7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAucGxhY2Vob2xkZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIH0KCiAgICAgICAgLnBsYWNlaG9sZGVyIGRlZXMtaWNvbiB7CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgfQoKICAgICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQoKICAgICAgICAubG9hZGluZy1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgIH0KCiAgICAgICAgLmxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlOwogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICAgIH0KCiAgICAgICAgLmVycm9yLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICB9CgogICAgICAgIC5lcnJvci1jb250YWluZXIgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5lcnJvci10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CgogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgJHt0aGlzLnNob3dGaWxlbmFtZSAmJiBkaXNwbGF5TmFtZSA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJhciI+CiAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImhlYWRlci1pY29uIiBpY29uPSIke1RZUEVfSUNPTlNbdGhpcy5yZXNvbHZlZFR5cGVdfSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkZXItZmlsZW5hbWUiPiR7ZGlzcGxheU5hbWV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyLWJhZGdlIj4ke3RoaXMucmVzb2x2ZWRUeXBlfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgICR7dGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkFsZXJ0VHJpYW5nbGUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvci10ZXh0Ij4ke3RoaXMuZXJyb3J9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiB0aGlzLmxvYWRpbmcgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IHRoaXMucmVuZGVyQ29udGVudCgpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckNvbnRlbnQoKSB7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMucmVzb2x2ZWRUeXBlKSB7CiAgICAgICAgICAgIGNhc2UgImltYWdlIjoKICAgICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGVlcy1pbWFnZS12aWV3ZXIKICAgICAgICAgICAgLnNyYz0ke3RoaXMucmVzb2x2ZWRTcmN9CiAgICAgICAgICAgIC5zaG93VG9vbGJhcj0ke3RoaXMuc2hvd1Rvb2xiYXJ9CiAgICAgICAgICAgIGFsdD0iJHt0aGlzLmZpbGVuYW1lIHx8ICIifSIKICAgICAgICAgID48L2RlZXMtaW1hZ2Utdmlld2VyPgogICAgICAgIGA7CiAgICAgICAgICAgIGNhc2UgInBkZiI6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgPGRlZXMtcGRmLXZpZXdlcgogICAgICAgICAgICAucGRmVXJsPSR7dGhpcy5yZXNvbHZlZFNyY30KICAgICAgICAgICAgLnNob3dUb29sYmFyPSR7dGhpcy5zaG93VG9vbGJhcn0KICAgICAgICAgICAgaW5pdGlhbFpvb209InBhZ2UtZml0IgogICAgICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgICAgIGA7CiAgICAgICAgICAgIGNhc2UgImF1ZGlvIjoKICAgICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGVlcy1hdWRpby12aWV3ZXIKICAgICAgICAgICAgLnNyYz0ke3RoaXMucmVzb2x2ZWRTcmN9CiAgICAgICAgICAgIC50aXRsZT0ke3RoaXMuZmlsZW5hbWUgfHwgdGhpcy5maWxlPy5uYW1lIHx8ICIifQogICAgICAgICAgPjwvZGVlcy1hdWRpby12aWV3ZXI+CiAgICAgICAgYDsKICAgICAgICAgICAgY2FzZSAidmlkZW8iOgogICAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgIDxkZWVzLXZpZGVvLXZpZXdlcgogICAgICAgICAgICAuc3JjPSR7dGhpcy5yZXNvbHZlZFNyY30KICAgICAgICAgID48L2RlZXMtdmlkZW8tdmlld2VyPgogICAgICAgIGA7CiAgICAgICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3gKICAgICAgICAgICAgLnByb2dMYW5nPSR7dGhpcy5yZXNvbHZlZExhbmd9CiAgICAgICAgICAgIC5jb2RlVG9EaXNwbGF5PSR7dGhpcy5yZXNvbHZlZFRleHR9CiAgICAgICAgICA+PC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICAgICAgYDsKICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYDxwcmUgY2xhc3M9InRleHQtdmlld2VyIj4ke3RoaXMucmVzb2x2ZWRUZXh0fTwvcHJlPmA7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlUXVlc3Rpb24iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBjb25zdCByZWxldmFudCA9IFsidXJsIiwgImZpbGUiLCAiYmFzZTY0IiwgInRleHRDb250ZW50IiwgImNvbnRlbnRUeXBlIiwgImxhbmd1YWdlIiwgIm1pbWVUeXBlIiwgImZpbGVuYW1lIl07CiAgICAgICAgICBjb25zdCBuZWVkc1Jlc29sdmUgPSByZWxldmFudC5zb21lKChrZXkyKSA9PiBjaGFuZ2VkUHJvcGVydGllcy5oYXMoa2V5MikpOwogICAgICAgICAgaWYgKG5lZWRzUmVzb2x2ZSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVDb250ZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMucmV2b2tlT2JqZWN0VXJsKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHJlc29sdmVDb250ZW50KCkgewogICAgICAgICAgdGhpcy5lcnJvciA9ICIiOwogICAgICAgICAgdGhpcy5yZXZva2VPYmplY3RVcmwoKTsKICAgICAgICAgIHRoaXMucmVzb2x2ZWRUeXBlID0gdGhpcy5kZXRlY3RUeXBlKCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAodGhpcy51cmwpIHsKICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkU3JjID0gdGhpcy51cmw7CiAgICAgICAgICAgICAgaWYgKHRoaXMucmVzb2x2ZWRUeXBlID09PSAiY29kZSIgfHwgdGhpcy5yZXNvbHZlZFR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRleHRDb250ZW50KSB7CiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy51cmwpOwogICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVkVGV4dCA9IHRoaXMudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZSkgewogICAgICAgICAgICAgIHRoaXMub2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmZpbGUpOwogICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRTcmMgPSB0aGlzLm9iamVjdFVybDsKICAgICAgICAgICAgICBpZiAodGhpcy5yZXNvbHZlZFR5cGUgPT09ICJjb2RlIiB8fCB0aGlzLnJlc29sdmVkVHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlZFRleHQgPSBhd2FpdCB0aGlzLmZpbGUudGV4dCgpOwogICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYmFzZTY0KSB7CiAgICAgICAgICAgICAgY29uc3QgbWltZSA9IHRoaXMubWltZVR5cGUgfHwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlZFNyYyA9IGBkYXRhOiR7bWltZX07YmFzZTY0LCR7dGhpcy5iYXNlNjR9YDsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRleHRDb250ZW50KSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlZFRleHQgPSB0aGlzLnRleHRDb250ZW50OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBjb250ZW50IjsKICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJlc29sdmVkTGFuZyA9IHRoaXMucmVzb2x2ZUxhbmd1YWdlKCk7CiAgICAgICAgfQogICAgICAgIGRldGVjdFR5cGUoKSB7CiAgICAgICAgICBpZiAodGhpcy5jb250ZW50VHlwZSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGU7CiAgICAgICAgICBjb25zdCBtaW1lID0gdGhpcy5taW1lVHlwZSB8fCB0aGlzLmZpbGU/LnR5cGUgfHwgIiI7CiAgICAgICAgICBpZiAobWltZSkgewogICAgICAgICAgICBpZiAobWltZSA9PT0gImFwcGxpY2F0aW9uL3BkZiIpCiAgICAgICAgICAgICAgcmV0dXJuICJwZGYiOwogICAgICAgICAgICBmb3IgKGNvbnN0IFtwcmVmaXg0LCB0eXBlNV0gb2YgT2JqZWN0LmVudHJpZXMoTUlNRV9QUkVGSVhfTUFQKSkgewogICAgICAgICAgICAgIGlmIChtaW1lLnN0YXJ0c1dpdGgocHJlZml4NCkpCiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1pbWUuc3RhcnRzV2l0aCgidGV4dC8iKSkKICAgICAgICAgICAgICByZXR1cm4gInRleHQiOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5nZXRFeHRlbnNpb24oKTsKICAgICAgICAgIGlmIChleHQgJiYgRVhURU5TSU9OX01BUFtleHRdKQogICAgICAgICAgICByZXR1cm4gRVhURU5TSU9OX01BUFtleHRdOwogICAgICAgICAgaWYgKHRoaXMudGV4dENvbnRlbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2UgPyAiY29kZSIgOiAidGV4dCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gInVua25vd24iOwogICAgICAgIH0KICAgICAgICBnZXRFeHRlbnNpb24oKSB7CiAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5maWxlbmFtZSB8fCB0aGlzLmZpbGU/Lm5hbWUgfHwgIiI7CiAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpCiAgICAgICAgICAgICAgcmV0dXJuIHBhcnRzLnBvcCgpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy51cmwpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwodGhpcy51cmwsICJodHRwczovL3BsYWNlaG9sZGVyLmNvbSIpLnBhdGhuYW1lOwogICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aG5hbWUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkKICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0cy5wb3AoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBnZXRGaWxlbmFtZUZyb21VcmwoKSB7CiAgICAgICAgICBpZiAoIXRoaXMudXJsKQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwodGhpcy51cmwsICJodHRwczovL3BsYWNlaG9sZGVyLmNvbSIpLnBhdGhuYW1lOwogICAgICAgICAgICByZXR1cm4gcGF0aG5hbWUuc3BsaXQoIi8iKS5wb3AoKSB8fCAiIjsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc29sdmVMYW5ndWFnZSgpIHsKICAgICAgICAgIGlmICh0aGlzLmxhbmd1YWdlKQogICAgICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZTsKICAgICAgICAgIGNvbnN0IGV4dCA9IHRoaXMuZ2V0RXh0ZW5zaW9uKCk7CiAgICAgICAgICByZXR1cm4gRVhURU5TSU9OX0xBTkdfTUFQW2V4dF0gfHwgInRleHQiOwogICAgICAgIH0KICAgICAgICByZXZva2VPYmplY3RVcmwoKSB7CiAgICAgICAgICBpZiAodGhpcy5vYmplY3RVcmwpIHsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLm9iamVjdFVybCk7CiAgICAgICAgICAgIHRoaXMub2JqZWN0VXJsID0gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczc1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzUHJldmlldzIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcHJldmlldy9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3ByZXZpZXcyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wcmV2aWV3L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19wcmV2aWV3KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTc1LCBfX3J1bkluaXRpYWxpemVyczc2LCBEZWVzUGRmOwp2YXIgaW5pdF9jb21wb25lbnQxMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmL2NvbXBvbmVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBfX2VzRGVjb3JhdGU3NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczc2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzUGRmID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGRmIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzUGRmMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3BkZlVybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX3BkZlVybF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZGZVcmwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBkZlVybCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wZGZVcmwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wZGZVcmwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1BkZjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gREVNTwogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJNZWRpYSIsICJQREYiXTsKICAgICAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIik7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgcGRmVXJsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcGRmVXJsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBwZGZKc1JlYWR5OwogICAgICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgICAgICAvLyB0eXBlb2YgcGRmanNUeXBlczsKICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBpZiAoIURlZXNQZGYyLnBkZkpzUmVhZHkpIHsKICAgICAgICAgICAgY29uc3QgcGRmSnNSZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICAgICAgRGVlc1BkZjIucGRmSnNSZWFkeSA9IHBkZkpzUmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICBEZWVzUGRmMi5wZGZqc0xpYiA9IGF3YWl0IGltcG9ydCgiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvK2VzbSIpOwogICAgICAgICAgICBEZWVzUGRmMi5wZGZqc0xpYi5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9ICJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS9idWlsZC9wZGYud29ya2VyLm1qcyI7CiAgICAgICAgICAgIHBkZkpzUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCBEZWVzUGRmMi5wZGZKc1JlYWR5OwogICAgICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCgpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNwbGF5Q29udGVudCgpIHsKICAgICAgICAgIGF3YWl0IERlZXNQZGYyLnBkZkpzUmVhZHk7CiAgICAgICAgICBjb25zdCBsb2FkaW5nVGFzayA9IERlZXNQZGYyLnBkZmpzTGliLmdldERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICAgIGxvYWRpbmdUYXNrLnByb21pc2UudGhlbigocGRmKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJQREYgbG9hZGVkIik7CiAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSAxOwogICAgICAgICAgICBwZGYuZ2V0UGFnZShwYWdlTnVtYmVyKS50aGVuKChwYWdlKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7CiAgICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAxMDsKICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZSB9KTsKICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpOwogICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDsKICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgICAgICBjb25zdCByZW5kZXJDb250ZXh0ID0gewogICAgICAgICAgICAgICAgY2FudmFzQ29udGV4dDogY29udGV4dDIsCiAgICAgICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgICAgICAgIHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgcmVuZGVyZWQiKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LCAocmVhc29uKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVhc29uKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhlIGdsb2JhbCBjb250ZXh0IG1lbnUgaGFuZGxlcgogICAgICAgICAqLwogICAgICAgIGdldENvbnRleHRNZW51SXRlbXMoKSB7CiAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIk9wZW4gUERGIGluIE5ldyBUYWIiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnBkZlVybCwgIl9ibGFuayIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ29weSBQREYgVVJMIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpDb3B5IiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMucGRmVXJsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiRG93bmxvYWQgUERGIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5rMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgICAgIGxpbmszLmRvd25sb2FkID0gdGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKSB8fCAiZG9jdW1lbnQucGRmIjsKICAgICAgICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM3NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1BkZjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmL2luZGV4LmpzCnZhciBpbml0X2RlZXNfcGRmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21wb25lbnQxMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXNoYXJlZC9zdHlsZXMuanMKdmFyIHRpbGVCYXNlU3R5bGVzOwp2YXIgaW5pdF9zdHlsZXM5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXNoYXJlZC9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIHRpbGVCYXNlU3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC50aWxlLWNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBoZWlnaHQ6IDI2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTglKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAudGlsZS1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC50aWxlLWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC50aWxlLWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnRpbGUtb3ZlcmxheSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLnRpbGUtY29udGVudCB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnRpbGUtb3ZlcmxheSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGdhcDogOHB4OwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgei1pbmRleDogMjA7CiAgICB9CgogICAgLnRpbGUtb3ZlcmxheSBkZWVzLWljb24gewogICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KCiAgICAudGlsZS1vdmVybGF5IHNwYW4gewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgIH0KCiAgICAudGlsZS1pbmZvIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDhweDsKICAgICAgbGVmdDogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjkyKSIsICJoc2woMjE1IDIwJSAxMiUgLyAwLjkyKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDZweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICB6LWluZGV4OiAxMDsKICAgIH0KCiAgICAudGlsZS1pbmZvIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICB9CgogICAgLnRpbGUtaW5mby10ZXh0IHsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC50aWxlLWJhZGdlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDhweDsKICAgICAgbGVmdDogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjcpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjkpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIndoaXRlIiwgImhzbCgyMTUgMjAlIDEyJSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTsKICAgICAgei1pbmRleDogMTU7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7CiAgICB9CgogICAgLnRpbGUtYmFkZ2UtY29ybmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBib3R0b206IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogM3B4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC42KSIsICJoc2woMCAwJSAxMDAlIC8gMC44NSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgid2hpdGUiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgICB6LWluZGV4OiAxMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CgogICAgLnRpbGUtYmFkZ2UtdG9wcmlnaHQgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogOHB4OwogICAgICByaWdodDogOHB4OwogICAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjg1KSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJ3aGl0ZSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAvKiBTaGlmdCBib3R0b20gYmFkZ2VzIHVwIHdoZW4gbGFiZWwgaXMgcHJlc2VudCAqLwogICAgLnRpbGUtY29udGFpbmVyOmhhcygudGlsZS1sYWJlbCkgLnRpbGUtYmFkZ2UtY29ybmVyIHsKICAgICAgYm90dG9tOiAzM3B4OwogICAgfQoKICAgIC50aWxlLWNvbnRhaW5lcjpoYXMoLnRpbGUtbGFiZWwpIC50aWxlLWluZm8gewogICAgICBib3R0b206IDMzcHg7CiAgICB9CgogICAgLnRpbGUtbG9hZGluZywKICAgIC50aWxlLWVycm9yIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgfQoKICAgIC50aWxlLWxvYWRpbmcgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTklKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgfQoKICAgIC50aWxlLWVycm9yIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA5OCUpIiwgImhzbCgwIDYyJSAyMCUpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA0MCUpIiwgImhzbCgwIDcwJSA2OCUpIil9OwogICAgfQoKICAgIC50aWxlLWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAudGlsZS1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgLnRpbGUtbG9hZGluZy10ZXh0LAogICAgLnRpbGUtZXJyb3ItdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIH0KCiAgICAudGlsZS1sYWJlbCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC45NSkiLCAiaHNsKDIxNSAyMCUgMTIlIC8gMC45NSkiKX07CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSAzNSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB6LWluZGV4OiAxMDsKICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgfQoKICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgIHRvIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICB9CiAgICB9CgogICAgQGtleWZyYW1lcyBmYWRlSW4gewogICAgICBmcm9tIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgfQogICAgICB0byB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KICAgIH0KCiAgICAvKiBTaXplIHZhcmlhbnRzICovCiAgICA6aG9zdChbc2l6ZT0ic21hbGwiXSkgLnRpbGUtY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDE1MHB4OwogICAgICBoZWlnaHQ6IDE5NXB4OwogICAgfQoKICAgIDpob3N0KFtzaXplPSJsYXJnZSJdKSAudGlsZS1jb250YWluZXIgewogICAgICB3aWR0aDogMjUwcHg7CiAgICAgIGhlaWdodDogMzI1cHg7CiAgICB9CgogICAgLyogR3JpZCBvcHRpbWl6YXRpb25zICovCiAgICA6aG9zdChbZ3JpZC1tb2RlXSkgLnRpbGUtY29udGFpbmVyIHsKICAgICAgd2lsbC1jaGFuZ2U6IGF1dG87CiAgICB9CiAgYAogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1zaGFyZWQvRGVlc1RpbGVCYXNlLmpzCnZhciBfX2VzRGVjb3JhdGU3NiwgX19ydW5Jbml0aWFsaXplcnM3NywgRGVlc1RpbGVCYXNlOwp2YXIgaW5pdF9EZWVzVGlsZUJhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtc2hhcmVkL0RlZXNUaWxlQmFzZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9zdHlsZXM5KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgX19lc0RlY29yYXRlNzYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM3NyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1RpbGVCYXNlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY2xpY2thYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY2xpY2thYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsaWNrYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9sb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lcnJvcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgcmV0dXJuIGNsYXNzIERlZXNUaWxlQmFzZSBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY2xpY2thYmxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9jbGlja2FibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2xpY2thYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjbGlja2FibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2xpY2thYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY2xpY2thYmxlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jbGlja2FibGVfaW5pdGlhbGl6ZXJzLCBfY2xpY2thYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9sb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Nih0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXJyb3IgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Vycm9yX2luaXRpYWxpemVycywgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NpemVfaW5pdGlhbGl6ZXJzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Nih0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IHRpbGVCYXNlU3R5bGVzOwogICAgICAgICNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzcodGhpcywgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMsIHRydWUpOwogICAgICAgIGdldCBjbGlja2FibGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY2xpY2thYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjbGlja2FibGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgbG9hZGluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nyh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBlcnJvcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZXJyb3IodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzcodGhpcywgX2Vycm9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nyh0aGlzLCBfc2l6ZV9pbml0aWFsaXplcnMsICJkZWZhdWx0IikpOwogICAgICAgIGdldCBzaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzcodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGxhYmVsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIG9ic2VydmVyID0gX19ydW5Jbml0aWFsaXplcnM3Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIF92aXNpYmxlID0gZmFsc2U7CiAgICAgICAgLyoqIFdoZXRoZXIgdGhpcyB0aWxlIGlzIGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCAqLwogICAgICAgIGdldCBpc1Zpc2libGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTsKICAgICAgICB9CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRpbGUtY29udGFpbmVyICR7dGhpcy5jbGlja2FibGUgPyAiY2xpY2thYmxlIiA6ICIifSAke3RoaXMubG9hZGluZyA/ICJsb2FkaW5nIiA6ICIifSAke3RoaXMuZXJyb3IgPyAiZXJyb3IiIDogIiJ9IgogICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlVGlsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5vblRpbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5vblRpbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLm9uVGlsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWxvYWRpbmctdGV4dCI+TG9hZGluZy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBbGVydFRyaWFuZ2xlIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1lcnJvci10ZXh0Ij5GYWlsZWQgdG8gbG9hZDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAkeyF0aGlzLmxvYWRpbmcgJiYgIXRoaXMuZXJyb3IgPyB0aGlzLnJlbmRlclRpbGVDb250ZW50KCkgOiAiIn0KCiAgICAgICAgJHt0aGlzLmxhYmVsID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWxhYmVsIj4ke3RoaXMubGFiZWx9PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBpZiAodGhpcy5vYnNlcnZlcikgewogICAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgdGhpcy5vYnNlcnZlciA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICAgICAgY29uc3Qgd2FzVmlzaWJsZSA9IHRoaXMuX3Zpc2libGU7CiAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nOwogICAgICAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlICYmICF3YXNWaXNpYmxlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uQmVjYW1lVmlzaWJsZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwgeyByb290OiBudWxsLCByb290TWFyZ2luOiAiMjAwcHgiLCB0aHJlc2hvbGQ6IDAuMDEgfSk7CiAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcyk7CiAgICAgICAgfQogICAgICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgdGlsZSBmaXJzdCBlbnRlcnMgdGhlIHZpZXdwb3J0LiBPdmVycmlkZSBmb3IgbGF6eSBsb2FkaW5nLiAqLwogICAgICAgIG9uQmVjYW1lVmlzaWJsZSgpIHsKICAgICAgICB9CiAgICAgICAgLyoqIENhbGxlZCB3aGVuIG1vdXNlIGVudGVycyB0aGUgdGlsZSBjb250YWluZXIuIE92ZXJyaWRlIGluIHN1YmNsYXNzZXMuICovCiAgICAgICAgb25UaWxlTW91c2VFbnRlcigpIHsKICAgICAgICB9CiAgICAgICAgLyoqIENhbGxlZCB3aGVuIG1vdXNlIGxlYXZlcyB0aGUgdGlsZSBjb250YWluZXIuIE92ZXJyaWRlIGluIHN1YmNsYXNzZXMuICovCiAgICAgICAgb25UaWxlTW91c2VMZWF2ZSgpIHsKICAgICAgICB9CiAgICAgICAgLyoqIENhbGxlZCB3aGVuIG1vdXNlIG1vdmVzIG92ZXIgdGhlIHRpbGUgY29udGFpbmVyLiBPdmVycmlkZSBpbiBzdWJjbGFzc2VzLiAqLwogICAgICAgIG9uVGlsZU1vdXNlTW92ZShfZSkgewogICAgICAgIH0KICAgICAgICBoYW5kbGVUaWxlQ2xpY2soKSB7CiAgICAgICAgICBpZiAoIXRoaXMuY2xpY2thYmxlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0aWxlLWNsaWNrIiwgewogICAgICAgICAgICBkZXRhaWw6IHRoaXMuZ2V0VGlsZUNsaWNrRGV0YWlsKCksCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIC8qKiBSZXR1cm4gdGhlIGRldGFpbCBvYmplY3QgZm9yIHRpbGUtY2xpY2sgZXZlbnRzLiBPdmVycmlkZSBpbiBzdWJjbGFzc2VzLiAqLwogICAgICAgIGdldFRpbGVDbGlja0RldGFpbCgpIHsKICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CiAgICAgIH07CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtc2hhcmVkL0NhbnZhc1Bvb2wuanMKdmFyIENhbnZhc1Bvb2w7CnZhciBpbml0X0NhbnZhc1Bvb2wgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi1zaGFyZWQvQ2FudmFzUG9vbC5qcyIoKSB7CiAgICBDYW52YXNQb29sID0gY2xhc3MgewogICAgICBzdGF0aWMgcG9vbCA9IFtdOwogICAgICBzdGF0aWMgbWF4UG9vbFNpemUgPSAyMDsKICAgICAgc3RhdGljIE1JTl9DQU5WQVNfU0laRSA9IDI1NjsKICAgICAgc3RhdGljIE1BWF9DQU5WQVNfU0laRSA9IDQwOTY7CiAgICAgIHN0YXRpYyBhY3F1aXJlKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBjb25zdCBzdWl0YWJsZSA9IHRoaXMucG9vbC5maW5kKChpdGVtKSA9PiAhaXRlbS5pblVzZSAmJiBpdGVtLmNhbnZhcy53aWR0aCA+PSB3aWR0aCAmJiBpdGVtLmNhbnZhcy5oZWlnaHQgPj0gaGVpZ2h0ICYmIGl0ZW0uY2FudmFzLndpZHRoIDw9IHdpZHRoICogMS41ICYmIGl0ZW0uY2FudmFzLmhlaWdodCA8PSBoZWlnaHQgKiAxLjUpOwogICAgICAgIGlmIChzdWl0YWJsZSkgewogICAgICAgICAgc3VpdGFibGUuaW5Vc2UgPSB0cnVlOwogICAgICAgICAgc3VpdGFibGUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICAgICAgc3VpdGFibGUuY2FudmFzLndpZHRoID0gd2lkdGg7CiAgICAgICAgICBzdWl0YWJsZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgc3VpdGFibGUuY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgIHJldHVybiBzdWl0YWJsZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucG9vbC5sZW5ndGggPCB0aGlzLm1heFBvb2xTaXplKSB7CiAgICAgICAgICBjb25zdCBjYW52YXMyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICAgICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICAgICAgYWxwaGE6IHRydWUsCiAgICAgICAgICAgIGRlc3luY2hyb25pemVkOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGNhbnZhczIud2lkdGggPSBNYXRoLm1pbihNYXRoLm1heCh3aWR0aCwgdGhpcy5NSU5fQ0FOVkFTX1NJWkUpLCB0aGlzLk1BWF9DQU5WQVNfU0laRSk7CiAgICAgICAgICBjYW52YXMyLmhlaWdodCA9IE1hdGgubWluKE1hdGgubWF4KGhlaWdodCwgdGhpcy5NSU5fQ0FOVkFTX1NJWkUpLCB0aGlzLk1BWF9DQU5WQVNfU0laRSk7CiAgICAgICAgICBjb25zdCBwb29sZWRDYW52YXMgPSB7CiAgICAgICAgICAgIGNhbnZhczogY2FudmFzMiwKICAgICAgICAgICAgY3R4OiBjdHgyLAogICAgICAgICAgICBpblVzZTogdHJ1ZSwKICAgICAgICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCkKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnBvb2wucHVzaChwb29sZWRDYW52YXMpOwogICAgICAgICAgcmV0dXJuIHBvb2xlZENhbnZhczsKICAgICAgICB9CiAgICAgICAgY29uc3QgbHJ1ID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNvcnQoKGE1LCBiNSkgPT4gYTUubGFzdFVzZWQgLSBiNS5sYXN0VXNlZClbMF07CiAgICAgICAgaWYgKGxydSkgewogICAgICAgICAgbHJ1LmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICAgICAgbHJ1LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgICBscnUuY3R4LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgIGxydS5pblVzZSA9IHRydWU7CiAgICAgICAgICBscnUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICAgICAgcmV0dXJuIGxydTsKICAgICAgICB9CiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgICAgICByZXR1cm4gewogICAgICAgICAgY2FudmFzLAogICAgICAgICAgY3R4LAogICAgICAgICAgaW5Vc2U6IHRydWUsCiAgICAgICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKQogICAgICAgIH07CiAgICAgIH0KICAgICAgc3RhdGljIHJlbGVhc2UocG9vbGVkQ2FudmFzKSB7CiAgICAgICAgaWYgKHRoaXMucG9vbC5pbmNsdWRlcyhwb29sZWRDYW52YXMpKSB7CiAgICAgICAgICBwb29sZWRDYW52YXMuaW5Vc2UgPSBmYWxzZTsKICAgICAgICAgIHBvb2xlZENhbnZhcy5jdHguY2xlYXJSZWN0KDAsIDAsIHBvb2xlZENhbnZhcy5jYW52YXMud2lkdGgsIHBvb2xlZENhbnZhcy5jYW52YXMuaGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGljIHJlbGVhc2VBbGwoKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucG9vbCkgewogICAgICAgICAgaXRlbS5pblVzZSA9IGZhbHNlOwogICAgICAgICAgaXRlbS5jdHguY2xlYXJSZWN0KDAsIDAsIGl0ZW0uY2FudmFzLndpZHRoLCBpdGVtLmNhbnZhcy5oZWlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0aWMgZGVzdHJveSgpIHsKICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wb29sKSB7CiAgICAgICAgICBpdGVtLmNhbnZhcy53aWR0aCA9IDA7CiAgICAgICAgICBpdGVtLmNhbnZhcy5oZWlnaHQgPSAwOwogICAgICAgIH0KICAgICAgICB0aGlzLnBvb2wgPSBbXTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0U3RhdHMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHBvb2xTaXplOiB0aGlzLnBvb2wubGVuZ3RoLAogICAgICAgICAgbWF4UG9vbFNpemU6IHRoaXMubWF4UG9vbFNpemUsCiAgICAgICAgICBpblVzZTogdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pblVzZSkubGVuZ3RoLAogICAgICAgICAgYXZhaWxhYmxlOiB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pblVzZSkubGVuZ3RoCiAgICAgICAgfTsKICAgICAgfQogICAgICBzdGF0aWMgYWRqdXN0UG9vbFNpemUobmV3U2l6ZSkgewogICAgICAgIGlmIChuZXdTaXplIDwgdGhpcy5wb29sLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgdG9SZW1vdmUgPSB0aGlzLnBvb2wubGVuZ3RoIC0gbmV3U2l6ZTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pblVzZSkuc2xpY2UoMCwgdG9SZW1vdmUpOwogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlbW92ZWQpIHsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy5wb29sLmluZGV4T2YoaXRlbSk7CiAgICAgICAgICAgIGlmIChpbmRleDIgPiAtMSkgewogICAgICAgICAgICAgIHRoaXMucG9vbC5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm1heFBvb2xTaXplID0gbmV3U2l6ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXNoYXJlZC91dGlscy5qcwpmdW5jdGlvbiBkZWJvdW5jZTMoZnVuYywgd2FpdDIpIHsKICBsZXQgdGltZW91dDI7CiAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykgewogICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7CiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0Mik7CiAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICB9OwogICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgIHRpbWVvdXQyID0gd2luZG93LnNldFRpbWVvdXQobGF0ZXIsIHdhaXQyKTsKICB9Owp9CmZ1bmN0aW9uIHRocm90dGxlMihmdW5jLCBsaW1pdCkgewogIGxldCBpblRocm90dGxlOwogIHJldHVybiBmdW5jdGlvbiBleGVjdXRlZEZ1bmN0aW9uKC4uLmFyZ3MpIHsKICAgIGlmICghaW5UaHJvdHRsZSkgewogICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICBpblRocm90dGxlID0gdHJ1ZTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBpblRocm90dGxlID0gZmFsc2UsIGxpbWl0KTsKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgaWYgKGJ5dGVzID09PSAwKQogICAgcmV0dXJuICIwIEJ5dGVzIjsKICBjb25zdCBrNCA9IDEwMjQ7CiAgY29uc3Qgc2l6ZXMgPSBbIkJ5dGVzIiwgIktCIiwgIk1CIiwgIkdCIl07CiAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogIHJldHVybiBNYXRoLnJvdW5kKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkgKiAxMDApIC8gMTAwICsgIiAiICsgc2l6ZXNbaTExXTsKfQpmdW5jdGlvbiBpc0luVmlld3BvcnQoZWxlbWVudDQsIG1hcmdpbiA9IDApIHsKICBjb25zdCByZWN0ID0gZWxlbWVudDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgcmV0dXJuIHJlY3QudG9wID49IC1tYXJnaW4gJiYgcmVjdC5sZWZ0ID49IC1tYXJnaW4gJiYgcmVjdC5ib3R0b20gPD0gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSArIG1hcmdpbiAmJiByZWN0LnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpICsgbWFyZ2luOwp9CnZhciBQZXJmb3JtYW5jZU1vbml0b3I7CnZhciBpbml0X3V0aWxzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXNoYXJlZC91dGlscy5qcyIoKSB7CiAgICBQZXJmb3JtYW5jZU1vbml0b3IgPSBjbGFzcyB7CiAgICAgIHN0YXRpYyBtYXJrcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHN0YXRpYyBtZWFzdXJlcyA9IFtdOwogICAgICBzdGF0aWMgbWFyayhuYW1lKSB7CiAgICAgICAgdGhpcy5tYXJrcy5zZXQobmFtZSwgcGVyZm9ybWFuY2Uubm93KCkpOwogICAgICB9CiAgICAgIHN0YXRpYyBtZWFzdXJlKG5hbWUsIHN0YXJ0TWFyaykgewogICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5tYXJrcy5nZXQoc3RhcnRNYXJrKTsKICAgICAgICBpZiAoc3RhcnQpIHsKICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydDsKICAgICAgICAgIHRoaXMubWVhc3VyZXMucHVzaCh7IG5hbWUsIGR1cmF0aW9uIH0pOwogICAgICAgICAgdGhpcy5tYXJrcy5kZWxldGUoc3RhcnRNYXJrKTsKICAgICAgICAgIHJldHVybiBkdXJhdGlvbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgICAgc3RhdGljIGdldFJlcG9ydCgpIHsKICAgICAgICBjb25zdCByZXBvcnQgPSB7CiAgICAgICAgICBtZWFzdXJlczogWy4uLnRoaXMubWVhc3VyZXNdLAogICAgICAgICAgYXZlcmFnZXM6IHt9CiAgICAgICAgfTsKICAgICAgICBjb25zdCBncm91cGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBmb3IgKGNvbnN0IG1lYXN1cmUgb2YgdGhpcy5tZWFzdXJlcykgewogICAgICAgICAgaWYgKCFncm91cGVkLmhhcyhtZWFzdXJlLm5hbWUpKSB7CiAgICAgICAgICAgIGdyb3VwZWQuc2V0KG1lYXN1cmUubmFtZSwgW10pOwogICAgICAgICAgfQogICAgICAgICAgZ3JvdXBlZC5nZXQobWVhc3VyZS5uYW1lKS5wdXNoKG1lYXN1cmUuZHVyYXRpb24pOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkdXJhdGlvbnNdIG9mIGdyb3VwZWQpIHsKICAgICAgICAgIHJlcG9ydC5hdmVyYWdlc1tuYW1lXSA9IGR1cmF0aW9ucy5yZWR1Y2UoKGE1LCBiNSkgPT4gYTUgKyBiNSwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0OwogICAgICB9CiAgICAgIHN0YXRpYyBjbGVhcigpIHsKICAgICAgICB0aGlzLm1hcmtzLmNsZWFyKCk7CiAgICAgICAgdGhpcy5tZWFzdXJlcyA9IFtdOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9zdHlsZXMuanMKdmFyIHRpbGVQZGZTdHlsZXM7CnZhciBpbml0X3N0eWxlczEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9zdHlsZXMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIHRpbGVQZGZTdHlsZXMgPSBpYAogIC5wcmV2aWV3LXN0YWNrIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogIH0KCiAgLnByZXZpZXctc3RhY2subm9uLWE0IHsKICAgIHBhZGRpbmc6IDEycHg7CiAgfQoKICAucHJldmlldy1jYW52YXMgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBpbWFnZS1yZW5kZXJpbmc6IGF1dG87CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICB9CgogIC5ub24tYTQgLnByZXZpZXctY2FudmFzIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDI0JSkiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgfQoKICAvKiBHcmlkIG9wdGltaXphdGlvbnMgKi8KICA6aG9zdChbZ3JpZC1tb2RlXSkgLnByZXZpZXctY2FudmFzIHsKICAgIGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsKICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgfQpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9kZW1vLmpzCnZhciBkZW1vNTsKdmFyIGluaXRfZGVtbzEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vNSA9ICgpID0+IHsKICAgICAgY29uc3Qgc2FtcGxlUGRmcyA9IFsKICAgICAgICAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIiwKICAgICAgICAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICBdOwogICAgICBjb25zdCBnZW5lcmF0ZUdyaWRJdGVtcyA9IChjb3VudDIpID0+IHsKICAgICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGNvdW50MjsgaTExKyspIHsKICAgICAgICAgIGNvbnN0IHBkZlVybCA9IHNhbXBsZVBkZnNbaTExICUgc2FtcGxlUGRmcy5sZW5ndGhdOwogICAgICAgICAgaXRlbXMucHVzaChiMmAKICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgcGRmVXJsPSIke3BkZlVybH0iCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICBncmlkLW1vZGUKICAgICAgICAgIEB0aWxlLWNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiUERGIFRpbGUgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKTsKICAgICAgICAgICAgYWxlcnQoYFBERiBjbGlja2VkOiAke2UxMS5kZXRhaWwucGFnZUNvdW50fSBwYWdlc2ApOwogICAgICAgICAgfX0KICAgICAgICA+PC9kZWVzLXRpbGUtcGRmPgogICAgICBgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGl0ZW1zOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgICB9CgogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgLnByZXZpZXctZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAucHJldmlldy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5TaW5nbGUgUERGIFRpbGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtcGRmCiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICA+PC9kZWVzLXRpbGUtcGRmPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPkRpZmZlcmVudCBTaXplczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1sYWJlbCI+U21hbGw6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBzaXplPSJzbWFsbCIKICAgICAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtdGlsZS1wZGY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy10aWxlLXBkZj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1sYWJlbCI+TGFyZ2U6PC9kaXY+CiAgICAgICAgICA8ZGVlcy10aWxlLXBkZgogICAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtdGlsZS1wZGY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+V2l0aCBMYWJlbDwvaDM+CiAgICAgICAgPGRlZXMtdGlsZS1wZGYKICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgbGFiZWw9IlJlc2VhcmNoIFBhcGVyLnBkZiIKICAgICAgICA+PC9kZWVzLXRpbGUtcGRmPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPk5vbi1DbGlja2FibGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtcGRmCiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIGNsaWNrYWJsZT0iZmFsc2UiCiAgICAgICAgPjwvZGVlcy10aWxlLXBkZj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5HcmlkIC0gMjAgUERGcyB3aXRoIExhenkgTG9hZGluZzwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7Z2VuZXJhdGVHcmlkSXRlbXMoMjApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTc3LCBfX3J1bkluaXRpYWxpemVyczc4LCBEZWVzVGlsZVBkZjsKdmFyIGluaXRfY29tcG9uZW50MTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtcGRmL2NvbXBvbmVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9EZWVzVGlsZUJhc2UoKTsKICAgIGluaXRfc3R5bGVzOSgpOwogICAgaW5pdF9QZGZNYW5hZ2VyKCk7CiAgICBpbml0X0NhbnZhc1Bvb2woKTsKICAgIGluaXRfdXRpbHMyKCk7CiAgICBpbml0X3N0eWxlczEwKCk7CiAgICBpbml0X2RlbW8xMCgpOwogICAgX19lc0RlY29yYXRlNzcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM3OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1RpbGVQZGYgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy10aWxlLXBkZiIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc1RpbGVCYXNlOwogICAgICBsZXQgX3BkZlVybF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3BkZlVybF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50UHJldmlld1BhZ2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50UHJldmlld1BhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcGFnZUNvdW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGFnZUNvdW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3BhZ2VDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlbmRlcmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcmVuZGVyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNIb3ZlcmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNBNEZvcm1hdF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1RpbGVQZGYyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfcGRmVXJsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9wYWdlQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfcmVuZGVyZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2lzSG92ZXJpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX19lc0RlY29yYXRlNzcodGhpcywgbnVsbCwgX3BkZlVybF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZGZVcmwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBkZlVybCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wZGZVcmwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wZGZVcmwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzcodGhpcywgbnVsbCwgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50UHJldmlld1BhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRQcmV2aWV3UGFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50UHJldmlld1BhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50UHJldmlld1BhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQcmV2aWV3UGFnZV9pbml0aWFsaXplcnMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzcodGhpcywgbnVsbCwgX3BhZ2VDb3VudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwYWdlQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2VDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWdlQ291bnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wYWdlQ291bnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzcodGhpcywgbnVsbCwgX3JlbmRlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlbmRlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZW5kZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJlbmRlcmVkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yZW5kZXJlZF9pbml0aWFsaXplcnMsIF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3Nyh0aGlzLCBudWxsLCBfaXNIb3ZlcmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hvdmVyaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSG92ZXJpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0hvdmVyaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNzcodGhpcywgbnVsbCwgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNBNEZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNBNEZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0E0Rm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNBNEZvcm1hdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNBNEZvcm1hdF9pbml0aWFsaXplcnMsIF9pc0E0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNUaWxlUGRmMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW81OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJNZWRpYSIsICJQREYiXTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWy4uLnRpbGVCYXNlU3R5bGVzLCB0aWxlUGRmU3R5bGVzXTsKICAgICAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc4KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgZ2V0IHBkZlVybCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3OCh0aGlzLCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3OCh0aGlzLCBfY3VycmVudFByZXZpZXdQYWdlX2luaXRpYWxpemVycywgMSkpOwogICAgICAgIGdldCBjdXJyZW50UHJldmlld1BhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50UHJldmlld1BhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3BhZ2VDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX2N1cnJlbnRQcmV2aWV3UGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgcGFnZUNvdW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3BhZ2VDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgcGFnZUNvdW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGFnZUNvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyZW5kZXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3BhZ2VDb3VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3JlbmRlcmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgcmVuZGVyZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlbmRlcmVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc4KHRoaXMsIF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3OCh0aGlzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICAgICAgZ2V0IGlzQTRGb3JtYXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNBNEZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNBNEZvcm1hdCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzQTRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgcmVuZGVyUGFnZXNUYXNrID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX2lzQTRGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICByZW5kZXJQYWdlc1F1ZXVlZCA9IGZhbHNlOwogICAgICAgIHBkZkRvY3VtZW50OwogICAgICAgIGNhbnZhc2VzID0gW107CiAgICAgICAgcmVzaXplT2JzZXJ2ZXI7CiAgICAgICAgc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgICBsb2FkZWRQZGZVcmwgPSBudWxsOwogICAgICAgIHJlbmRlclRpbGVDb250ZW50KCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXN0YWNrICR7IXRoaXMuaXNBNEZvcm1hdCA/ICJub24tYTQiIDogIiJ9Ij4KICAgICAgICA8Y2FudmFzCiAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICBkYXRhLXBhZ2U9IiR7dGhpcy5jdXJyZW50UHJldmlld1BhZ2V9IgogICAgICAgID48L2NhbnZhcz4KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMucGFnZUNvdW50ID4gMSAmJiB0aGlzLmlzSG92ZXJpbmcgPyBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWJhZGdlIj4KICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQoKICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDAgJiYgIXRoaXMuaXNIb3ZlcmluZyA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtY29ybmVyIj4KICAgICAgICAgICR7dGhpcy5wYWdlQ291bnR9IHBhZ2Uke3RoaXMucGFnZUNvdW50ID4gMSA/ICJzIiA6ICIifQogICAgICAgIDwvZGl2PgogICAgICBgIDogIiJ9CgogICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkV5ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0VGlsZUNsaWNrRGV0YWlsKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGRmVXJsOiB0aGlzLnBkZlVybCwKICAgICAgICAgICAgcGFnZUNvdW50OiB0aGlzLnBhZ2VDb3VudAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgb25CZWNhbWVWaXNpYmxlKCkgewogICAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIHRoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb25UaWxlTW91c2VFbnRlcigpIHsKICAgICAgICAgIHRoaXMuaXNIb3ZlcmluZyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIG9uVGlsZU1vdXNlTGVhdmUoKSB7CiAgICAgICAgICB0aGlzLmlzSG92ZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSAhPT0gMSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9uVGlsZU1vdXNlTW92ZShlMTEpIHsKICAgICAgICAgIGlmICghdGhpcy5pc0hvdmVyaW5nIHx8IHRoaXMucGFnZUNvdW50IDw9IDEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgeDQgPSBlMTEuY2xpZW50WCAtIHJlY3QubGVmdDsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aDsKICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB4NCAvIHdpZHRoKSk7CiAgICAgICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKHBlcmNlbnRhZ2UgKiB0aGlzLnBhZ2VDb3VudCkgfHwgMTsKICAgICAgICAgIGlmIChuZXdQYWdlICE9PSB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IG5ld1BhZ2U7CiAgICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmNsZWFudXAoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGxvYWRBbmRSZW5kZXJQcmV2aWV3KCkgewogICAgICAgICAgaWYgKHRoaXMucmVuZGVyZWQgfHwgdGhpcy5sb2FkaW5nKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICAgICAgUGVyZm9ybWFuY2VNb25pdG9yLm1hcmsoYHByZXZpZXctbG9hZC0ke3RoaXMucGRmVXJsfWApOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IGF3YWl0IFBkZk1hbmFnZXIubG9hZERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSB0aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gdGhpcy5wZGZVcmw7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IFBlcmZvcm1hbmNlTW9uaXRvci5tZWFzdXJlKGBwcmV2aWV3LXJlbmRlci0ke3RoaXMucGRmVXJsfWAsIGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTsKICAgICAgICAgICAgY29uc29sZS5sb2coYFBERiB0aWxlIHJlbmRlcmVkIGluICR7ZHVyYXRpb259bXNgKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiB0aWxlOiIsIGVycm9yKTsKICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7CiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzY2hlZHVsZVJlbmRlclBhZ2VzKCkgewogICAgICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnJlbmRlclBhZ2VzVGFzaykgewogICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VzUXVldWVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFnZXNUYXNrOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZW5kZXJQYWdlc1Rhc2sgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHJlbmRlciBQREYgdGlsZSBwYWdlczoiLCBlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCkuZmluYWxseSgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNUYXNrID0gbnVsbDsKICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQpIHsKICAgICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VzUXVldWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgdm9pZCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYWdlc1Rhc2s7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHBlcmZvcm1SZW5kZXJQYWdlcygpIHsKICAgICAgICAgIGlmICghdGhpcy5wZGZEb2N1bWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZTIpKTsKICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnByZXZpZXctY2FudmFzIik7CiAgICAgICAgICBpZiAoIWNhbnZhcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5jbGVhckNhbnZhc2VzKCk7CiAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCB9ID0gdGhpcy5nZXRBdmFpbGFibGVTaXplKCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYWdlTnVtID0gdGhpcy5jdXJyZW50UHJldmlld1BhZ2U7CiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWaWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogMSB9KTsKICAgICAgICAgICAgY29uc3QgYXNwZWN0UmF0aW8gPSBpbml0aWFsVmlld3BvcnQuaGVpZ2h0IC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoOwogICAgICAgICAgICBjb25zdCBhNFBvcnRyYWl0UmF0aW8gPSAxLjQxNDsKICAgICAgICAgICAgY29uc3QgYTRMYW5kc2NhcGVSYXRpbyA9IDAuNzA3OwogICAgICAgICAgICBjb25zdCBsZXR0ZXJQb3J0cmFpdFJhdGlvID0gMS4yOTQ7CiAgICAgICAgICAgIGNvbnN0IGxldHRlckxhbmRzY2FwZVJhdGlvID0gMC43NzM7CiAgICAgICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IDAuMDU7CiAgICAgICAgICAgIGNvbnN0IGlzQTRQb3J0cmFpdCA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRQb3J0cmFpdFJhdGlvKSA8IGE0UG9ydHJhaXRSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICAgICAgY29uc3QgaXNBNExhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRMYW5kc2NhcGVSYXRpbykgPCBhNExhbmRzY2FwZVJhdGlvICogdG9sZXJhbmNlOwogICAgICAgICAgICBjb25zdCBpc0xldHRlclBvcnRyYWl0ID0gTWF0aC5hYnMoYXNwZWN0UmF0aW8gLSBsZXR0ZXJQb3J0cmFpdFJhdGlvKSA8IGxldHRlclBvcnRyYWl0UmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgICAgIGNvbnN0IGlzTGV0dGVyTGFuZHNjYXBlID0gTWF0aC5hYnMoYXNwZWN0UmF0aW8gLSBsZXR0ZXJMYW5kc2NhcGVSYXRpbykgPCBsZXR0ZXJMYW5kc2NhcGVSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gaXNBNFBvcnRyYWl0IHx8IGlzQTRMYW5kc2NhcGUgfHwgaXNMZXR0ZXJQb3J0cmFpdCB8fCBpc0xldHRlckxhbmRzY2FwZTsKICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRXaWR0aCA9IHRoaXMuaXNBNEZvcm1hdCA/IGF2YWlsYWJsZVdpZHRoIDogYXZhaWxhYmxlV2lkdGggLSAyNDsKICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRIZWlnaHQgPSB0aGlzLmlzQTRGb3JtYXQgPyBhdmFpbGFibGVIZWlnaHQgOiBhdmFpbGFibGVIZWlnaHQgLSAyNDsKICAgICAgICAgICAgY29uc3Qgc2NhbGVYID0gYWRqdXN0ZWRXaWR0aCA+IDAgPyBhZGp1c3RlZFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoIDogMDsKICAgICAgICAgICAgY29uc3Qgc2NhbGVZID0gYWRqdXN0ZWRIZWlnaHQgPiAwID8gYWRqdXN0ZWRIZWlnaHQgLyBpbml0aWFsVmlld3BvcnQuaGVpZ2h0IDogMDsKICAgICAgICAgICAgY29uc3QgYmFzZVNjYWxlID0gTWF0aC5taW4oc2NhbGVYIHx8IDAuNSwgc2NhbGVZIHx8IHNjYWxlWCB8fCAwLjUpOwogICAgICAgICAgICBjb25zdCByZW5kZXJTY2FsZSA9IE1hdGgubWluKGJhc2VTY2FsZSAqIDIsIDMpOwogICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZW5kZXJTY2FsZSkgfHwgcmVuZGVyU2NhbGUgPD0gMCkgewogICAgICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiByZW5kZXJTY2FsZSB9KTsKICAgICAgICAgICAgY29uc3QgcG9vbGVkQ2FudmFzID0gQ2FudmFzUG9vbC5hY3F1aXJlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpOwogICAgICAgICAgICB0aGlzLmNhbnZhc2VzLnB1c2gocG9vbGVkQ2FudmFzKTsKICAgICAgICAgICAgY29uc3QgcmVuZGVyQ29udGV4dCA9IHsKICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBwb29sZWRDYW52YXMuY3R4LAogICAgICAgICAgICAgIHZpZXdwb3J0CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZXdwb3J0LndpZHRoOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgICBjb25zdCBkaXNwbGF5V2lkdGggPSBhZGp1c3RlZFdpZHRoOwogICAgICAgICAgICBjb25zdCBkaXNwbGF5SGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0IC8gdmlld3BvcnQud2lkdGggKiBhZGp1c3RlZFdpZHRoOwogICAgICAgICAgICBpZiAoZGlzcGxheUhlaWdodCA+IGFkanVzdGVkSGVpZ2h0KSB7CiAgICAgICAgICAgICAgY29uc3QgYWx0RGlzcGxheUhlaWdodCA9IGFkanVzdGVkSGVpZ2h0OwogICAgICAgICAgICAgIGNvbnN0IGFsdERpc3BsYXlXaWR0aCA9IHZpZXdwb3J0LndpZHRoIC8gdmlld3BvcnQuaGVpZ2h0ICogYWRqdXN0ZWRIZWlnaHQ7CiAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7YWx0RGlzcGxheVdpZHRofXB4YDsKICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7YWx0RGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7ZGlzcGxheVdpZHRofXB4YDsKICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gImhpZ2giOwogICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UocG9vbGVkQ2FudmFzLmNhbnZhcywgMCwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGFnZS5jbGVhbnVwKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVuZGVyIHBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX06YCwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhckNhbnZhc2VzKCkgewogICAgICAgICAgZm9yIChjb25zdCBwb29sZWRDYW52YXMgb2YgdGhpcy5jYW52YXNlcykgewogICAgICAgICAgICBDYW52YXNQb29sLnJlbGVhc2UocG9vbGVkQ2FudmFzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY2FudmFzZXMgPSBbXTsKICAgICAgICB9CiAgICAgICAgY2xlYW51cCgpIHsKICAgICAgICAgIHRoaXMuY2xlYXJDYW52YXNlcygpOwogICAgICAgICAgaWYgKHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICAgICAgUGRmTWFuYWdlci5yZWxlYXNlRG9jdW1lbnQodGhpcy5sb2FkZWRQZGZVcmwgPz8gdGhpcy5wZGZVcmwpOwogICAgICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDsKICAgICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICAgIHRoaXMuaXNIb3ZlcmluZyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gbnVsbDsKICAgICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInBkZlVybCIpICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJwZGZVcmwiKTsKICAgICAgICAgICAgaWYgKHByZXZpb3VzVXJsKSB7CiAgICAgICAgICAgICAgUGRmTWFuYWdlci5yZWxlYXNlRG9jdW1lbnQocHJldmlvdXNVcmwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIGlmIChyZWN0LnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCAmJiByZWN0LmJvdHRvbSA+IDApIHsKICAgICAgICAgICAgICB0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldENvbnRleHRNZW51SXRlbXMoKSB7CiAgICAgICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICAgICAgaWYgKHRoaXMuY2xpY2thYmxlKSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICJWaWV3IFBERiIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RXllIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRpbGUtY2xpY2siLCB7CiAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy5nZXRUaWxlQ2xpY2tEZXRhaWwoKSwKICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiAiT3BlbiBQREYgaW4gTmV3IFRhYiIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpDb3B5IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCBQREYiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgICBsaW5rMy5kb3dubG9hZCA9IHRoaXMucGRmVXJsLnNwbGl0KCIvIikucG9wKCkgfHwgImRvY3VtZW50LnBkZiI7CiAgICAgICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodGhpcy5wYWdlQ291bnQgPiAwKSB7CiAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0sIHsKICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQgPiAxID8gInMiIDogIiJ9YCwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBpdGVtczsKICAgICAgICB9CiAgICAgICAgY2FjaGVFbGVtZW50cygpIHsKICAgICAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5zdGFja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmRG9jdW1lbnQgJiYgIXRoaXMubG9hZGluZykgewogICAgICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgICAgIH0KICAgICAgICBnZXRBdmFpbGFibGVTaXplKCkgewogICAgICAgICAgaWYgKCF0aGlzLnN0YWNrRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLnN0YWNrRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnByZXZpZXctc3RhY2siKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHsgYXZhaWxhYmxlV2lkdGg6IDIwMCwgYXZhaWxhYmxlSGVpZ2h0OiAyNjAgfTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnN0YWNrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgMCkgfHwgMjAwOwogICAgICAgICAgY29uc3QgYXZhaWxhYmxlSGVpZ2h0ID0gTWF0aC5tYXgocmVjdC5oZWlnaHQsIDApIHx8IDI2MDsKICAgICAgICAgIHJldHVybiB7IGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQgfTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNUaWxlUGRmMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTc4LCBfX3J1bkluaXRpYWxpemVyczc5LCBEZWVzUGRmUHJldmlldzsKdmFyIGluaXRfY29tcG9uZW50MTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi1wcmV2aWV3L2NvbXBvbmVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9jb21wb25lbnQxMSgpOwogICAgX19lc0RlY29yYXRlNzggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM3OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1BkZlByZXZpZXcgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYtcHJldmlldyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc1RpbGVQZGY7CiAgICAgIHZhciBEZWVzUGRmUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNQZGZQcmV2aWV3MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFtdOwogICAgICAgIC8vIEhpZGUgZnJvbSBkZW1vIGNhdGFsb2cKICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiW2RlZXMtcGRmLXByZXZpZXddIGlzIGRlcHJlY2F0ZWQuIFVzZSA8ZGVlcy10aWxlLXBkZj4gaW5zdGVhZC4gVGhpcyBjb21wb25lbnQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIik7CiAgICAgICAgICByZXR1cm4gc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNQZGZQcmV2aWV3MiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtcHJldmlldy9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3BkZl9wcmV2aWV3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtcHJldmlldy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXBkZi1zaGFyZWQvaW5kZXguanMKdmFyIGluaXRfZGVlc19wZGZfc2hhcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtc2hhcmVkL2luZGV4LmpzIigpIHsKICAgIGluaXRfQ2FudmFzUG9vbCgpOwogICAgaW5pdF9QZGZNYW5hZ2VyKCk7CiAgICBpbml0X3V0aWxzMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy1wZGYtdmlld2VyL2luZGV4LmpzCnZhciBpbml0X2RlZXNfcGRmX3ZpZXdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtcGRmLXZpZXdlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1zaGFyZWQvaW5kZXguanMKdmFyIGluaXRfZGVlc190aWxlX3NoYXJlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1zaGFyZWQvaW5kZXguanMiKCkgewogICAgaW5pdF9EZWVzVGlsZUJhc2UoKTsKICAgIGluaXRfc3R5bGVzOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3RpbGVfcGRmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXBkZi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBvbmVudDExKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtaW1hZ2UvZGVtby5qcwp2YXIgZGVtbzY7CnZhciBpbml0X2RlbW8xMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1pbWFnZS9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vNiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgbWFyZ2luLWJvdHRvbTogNjBweDsKICAgIH0KICAgIGgzIHsKICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgfQogICAgLnRpbGUtcm93IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5JbWFnZSBUaWxlczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICA8ZGVlcy10aWxlLWltYWdlCiAgICAgICAgICBzcmM9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy84MDAvNjAwIgogICAgICAgICAgYWx0PSJMYW5kc2NhcGUgcGhvdG8iCiAgICAgICAgICBsYWJlbD0ibGFuZHNjYXBlLmpwZyIKICAgICAgICAgIEB0aWxlLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkltYWdlIGNsaWNrZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgoKICAgICAgICA8ZGVlcy10aWxlLWltYWdlCiAgICAgICAgICBzcmM9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy80MDAvNDAwIgogICAgICAgICAgYWx0PSJTcXVhcmUgcGhvdG8iCiAgICAgICAgICBsYWJlbD0ic3F1YXJlLnBuZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNyYz0iaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC85MDAiCiAgICAgICAgICBhbHQ9IlBvcnRyYWl0IHBob3RvIgogICAgICAgICAgbGFiZWw9InBvcnRyYWl0LndlYnAiCiAgICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplIFZhcmlhbnRzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMCIKICAgICAgICAgIGFsdD0iU21hbGwiCiAgICAgICAgICBsYWJlbD0ic21hbGwuanBnIgogICAgICAgID48L2RlZXMtdGlsZS1pbWFnZT4KCiAgICAgICAgPGRlZXMtdGlsZS1pbWFnZQogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvNjAwLzQwMCIKICAgICAgICAgIGFsdD0iRGVmYXVsdCIKICAgICAgICAgIGxhYmVsPSJkZWZhdWx0LmpwZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CgogICAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgc3JjPSJodHRwczovL3BpY3N1bS5waG90b3MvMTIwMC84MDAiCiAgICAgICAgICBhbHQ9IkxhcmdlIgogICAgICAgICAgbGFiZWw9ImxhcmdlLmpwZyIKICAgICAgICA+PC9kZWVzLXRpbGUtaW1hZ2U+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkVycm9yIFN0YXRlIChicm9rZW4gVVJMKTwvaDM+CiAgICAgIDxkZWVzLXRpbGUtaW1hZ2UKICAgICAgICBzcmM9Imh0dHBzOi8vaW52YWxpZC11cmwtdGhhdC1kb2VzLW5vdC1leGlzdC5leGFtcGxlL2ltYWdlLnBuZyIKICAgICAgICBhbHQ9IkJyb2tlbiIKICAgICAgICBsYWJlbD0iYnJva2VuLnBuZyIKICAgICAgPjwvZGVlcy10aWxlLWltYWdlPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtaW1hZ2UvY29tcG9uZW50LmpzCnZhciBfX2VzRGVjb3JhdGU3OSwgX19ydW5Jbml0aWFsaXplcnM4MCwgRGVlc1RpbGVJbWFnZTsKdmFyIGluaXRfY29tcG9uZW50MTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtaW1hZ2UvY29tcG9uZW50LmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X0RlZXNUaWxlQmFzZSgpOwogICAgaW5pdF9zdHlsZXM5KCk7CiAgICBpbml0X2RlbW8xMSgpOwogICAgX19lc0RlY29yYXRlNzkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM4MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1RpbGVJbWFnZSA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRpbGUtaW1hZ2UiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNUaWxlQmFzZTsKICAgICAgbGV0IF9zcmNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zcmNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWx0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYWx0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FsdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ltYWdlTG9hZGVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW1hZ2VMb2FkZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW1hZ2VMb2FkZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbWFnZVdpZHRoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaW1hZ2VXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbWFnZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW1hZ2VIZWlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbWFnZUhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbWFnZUhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1RpbGVJbWFnZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9zcmNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfYWx0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2ltYWdlTG9hZGVkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaW1hZ2VXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2ltYWdlSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfc3JjX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNyYyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3JjIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNyYywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNyYyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3JjX2luaXRpYWxpemVycywgX3NyY19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfYWx0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFsdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWx0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFsdCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWx0X2luaXRpYWxpemVycywgX2FsdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfaW1hZ2VMb2FkZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW1hZ2VMb2FkZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImltYWdlTG9hZGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmltYWdlTG9hZGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW1hZ2VMb2FkZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ltYWdlTG9hZGVkX2luaXRpYWxpemVycywgX2ltYWdlTG9hZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc5KHRoaXMsIG51bGwsIF9pbWFnZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImltYWdlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImltYWdlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW1hZ2VXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmltYWdlV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ltYWdlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfaW1hZ2VXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfaW1hZ2VIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW1hZ2VIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImltYWdlSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmltYWdlSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW1hZ2VIZWlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ltYWdlSGVpZ2h0X2luaXRpYWxpemVycywgX2ltYWdlSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTc5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNUaWxlSW1hZ2UyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzY7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk1lZGlhIl07CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIC4uLnRpbGVCYXNlU3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLmltYWdlLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJlcGVhdGluZy1jb25pYy1ncmFkaWVudCgjZThlOGU4IDAlIDI1JSwgd2hpdGUgMCUgNTAlKSA1MCUgLyAxNnB4IDE2cHgiLCAicmVwZWF0aW5nLWNvbmljLWdyYWRpZW50KGhzbCgyMTUgMjAlIDE4JSkgMCUgMjUlLCBoc2woMjE1IDIwJSAxNCUpIDAlIDUwJSkgNTAlIC8gMTZweCAxNnB4Iil9OwogICAgICB9CgogICAgICAuaW1hZ2Utd3JhcHBlciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgfQoKICAgICAgLmltYWdlLXdyYXBwZXIgaW1nLmxvYWRlZCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmltYWdlLXdyYXBwZXIgaW1nLmxvYWRpbmcgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLWJhZGdlLXRvcHJpZ2h0LmRpbWVuc2lvbi1iYWRnZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnRpbGUtY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAudGlsZS1iYWRnZS10b3ByaWdodC5kaW1lbnNpb24tYmFkZ2UgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgICNzcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3NyY19pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgc3JjKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NyY19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3JjKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3JjX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhbHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9zcmNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9hbHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBhbHQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWx0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhbHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhbHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ltYWdlTG9hZGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfYWx0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfaW1hZ2VMb2FkZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpbWFnZUxvYWRlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbWFnZUxvYWRlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW1hZ2VMb2FkZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbWFnZUxvYWRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW1hZ2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX2ltYWdlTG9hZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfaW1hZ2VXaWR0aF9pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgaW1hZ2VXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbWFnZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpbWFnZVdpZHRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaW1hZ2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW1hZ2VIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9pbWFnZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfaW1hZ2VIZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGltYWdlSGVpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ltYWdlSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpbWFnZUhlaWdodCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ltYWdlSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGhhc1N0YXJ0ZWRMb2FkaW5nID0gKF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX2ltYWdlSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgICAgIHJlbmRlclRpbGVDb250ZW50KCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS13cmFwcGVyIj4KICAgICAgICAke3RoaXMuaGFzU3RhcnRlZExvYWRpbmcgPyBiMmAKICAgICAgICAgIDxpbWcKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pbWFnZUxvYWRlZCA/ICJsb2FkZWQiIDogImxvYWRpbmcifSIKICAgICAgICAgICAgc3JjPSIke3RoaXMuc3JjfSIKICAgICAgICAgICAgYWx0PSIke3RoaXMuYWx0fSIKICAgICAgICAgICAgQGxvYWQ9JHt0aGlzLmhhbmRsZUltYWdlTG9hZH0KICAgICAgICAgICAgQGVycm9yPSR7dGhpcy5oYW5kbGVJbWFnZUVycm9yfQogICAgICAgICAgLz4KICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmltYWdlV2lkdGggPiAwICYmIHRoaXMuaW1hZ2VIZWlnaHQgPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS10b3ByaWdodCBkaW1lbnNpb24tYmFkZ2UiPgogICAgICAgICAgJHt0aGlzLmltYWdlV2lkdGh9IMOXICR7dGhpcy5pbWFnZUhlaWdodH0KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQoKICAgICAgJHt0aGlzLmltYWdlTG9hZGVkID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1pbmZvIj4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkltYWdlIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aWxlLWluZm8tdGV4dCI+JHt0aGlzLmltYWdlV2lkdGh9IMOXICR7dGhpcy5pbWFnZUhlaWdodH08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KCiAgICAgICR7dGhpcy5jbGlja2FibGUgPyBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLW92ZXJsYXkiPgogICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RXllIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlZpZXcgSW1hZ2U8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgIGA7CiAgICAgICAgfQogICAgICAgIGdldFRpbGVDbGlja0RldGFpbCgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNyYzogdGhpcy5zcmMsCiAgICAgICAgICAgIGFsdDogdGhpcy5hbHQsCiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmltYWdlV2lkdGgsCiAgICAgICAgICAgIGhlaWdodDogdGhpcy5pbWFnZUhlaWdodAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgb25CZWNhbWVWaXNpYmxlKCkgewogICAgICAgICAgaWYgKCF0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nICYmIHRoaXMuc3JjKSB7CiAgICAgICAgICAgIHRoaXMuaGFzU3RhcnRlZExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlSW1hZ2VMb2FkKGUxMSkgewogICAgICAgICAgY29uc3QgaW1nID0gZTExLnRhcmdldDsKICAgICAgICAgIHRoaXMuaW1hZ2VXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGg7CiAgICAgICAgICB0aGlzLmltYWdlSGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQ7CiAgICAgICAgICB0aGlzLmltYWdlTG9hZGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBoYW5kbGVJbWFnZUVycm9yKCkgewogICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJzcmMiKSAmJiB0aGlzLnNyYyAmJiB0aGlzLmlzVmlzaWJsZSkgewogICAgICAgICAgICB0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5pbWFnZUxvYWRlZCA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1RpbGVJbWFnZTIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1pbWFnZS9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3RpbGVfaW1hZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtaW1hZ2UvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21wb25lbnQxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLWF1ZGlvL2RlbW8uanMKdmFyIGRlbW83Owp2YXIgaW5pdF9kZW1vMTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtYXVkaW8vZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtbzcgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0MHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgfQogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICB9CiAgICBoMyB7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIH0KICAgIC50aWxlLXJvdyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMjRweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QXVkaW8gVGlsZXM8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXJvdyI+CiAgICAgICAgPGRlZXMtdGlsZS1hdWRpbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTEubXAzIgogICAgICAgICAgdGl0bGU9IlNvdW5kSGVsaXggU29uZyAxIgogICAgICAgICAgYXJ0aXN0PSJULiBTY2h1ZXJnZXIiCiAgICAgICAgICBsYWJlbD0ic291bmRoZWxpeC0xLm1wMyIKICAgICAgICAgIEB0aWxlLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkF1ZGlvIGNsaWNrZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgICAgPjwvZGVlcy10aWxlLWF1ZGlvPgoKICAgICAgICA8ZGVlcy10aWxlLWF1ZGlvCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMi5tcDMiCiAgICAgICAgICB0aXRsZT0iU291bmRIZWxpeCBTb25nIDIiCiAgICAgICAgICBhcnRpc3Q9IlQuIFNjaHVlcmdlciIKICAgICAgICAgIGxhYmVsPSJzb3VuZGhlbGl4LTIubXAzIgogICAgICAgID48L2RlZXMtdGlsZS1hdWRpbz4KCiAgICAgICAgPGRlZXMtdGlsZS1hdWRpbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTMubXAzIgogICAgICAgICAgdGl0bGU9IlNvdW5kSGVsaXggU29uZyAzIgogICAgICAgICAgbGFiZWw9InNvdW5kaGVsaXgtMy5tcDMiCiAgICAgICAgPjwvZGVlcy10aWxlLWF1ZGlvPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplIFZhcmlhbnRzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgIDxkZWVzLXRpbGUtYXVkaW8KICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgc3JjPSJodHRwczovL3d3dy5zb3VuZGhlbGl4LmNvbS9leGFtcGxlcy9tcDMvU291bmRIZWxpeC1Tb25nLTEubXAzIgogICAgICAgICAgdGl0bGU9IlNtYWxsIgogICAgICAgICAgbGFiZWw9InNtYWxsLm1wMyIKICAgICAgICA+PC9kZWVzLXRpbGUtYXVkaW8+CgogICAgICAgIDxkZWVzLXRpbGUtYXVkaW8KICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cuc291bmRoZWxpeC5jb20vZXhhbXBsZXMvbXAzL1NvdW5kSGVsaXgtU29uZy0xLm1wMyIKICAgICAgICAgIHRpdGxlPSJEZWZhdWx0IgogICAgICAgICAgbGFiZWw9ImRlZmF1bHQubXAzIgogICAgICAgID48L2RlZXMtdGlsZS1hdWRpbz4KCiAgICAgICAgPGRlZXMtdGlsZS1hdWRpbwogICAgICAgICAgc2l6ZT0ibGFyZ2UiCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnNvdW5kaGVsaXguY29tL2V4YW1wbGVzL21wMy9Tb3VuZEhlbGl4LVNvbmctMS5tcDMiCiAgICAgICAgICB0aXRsZT0iTGFyZ2UiCiAgICAgICAgICBsYWJlbD0ibGFyZ2UubXAzIgogICAgICAgID48L2RlZXMtdGlsZS1hdWRpbz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1hdWRpby9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTgwLCBfX3J1bkluaXRpYWxpemVyczgxLCBEZWVzVGlsZUF1ZGlvOwp2YXIgaW5pdF9jb21wb25lbnQxNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1hdWRpby9jb21wb25lbnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfRGVlc1RpbGVCYXNlKCk7CiAgICBpbml0X3N0eWxlczkoKTsKICAgIGluaXRfZGVtbzEyKCk7CiAgICBfX2VzRGVjb3JhdGU4MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczgxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzVGlsZUF1ZGlvID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdGlsZS1hdWRpbyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc1RpbGVCYXNlOwogICAgICBsZXQgX3NyY19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NyY19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zcmNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aXRsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RpdGxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYXJ0aXN0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfYXJ0aXN0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FydGlzdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF93YXZlZm9ybURhdGFfZGVjb3JhdG9yczsKICAgICAgbGV0IF93YXZlZm9ybURhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZWZvcm1EYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZWZvcm1SZWFkeV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3dhdmVmb3JtUmVhZHlfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZWZvcm1SZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzUHJldmlld1BsYXlpbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc1ByZXZpZXdQbGF5aW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzUHJldmlld1BsYXlpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNUaWxlQXVkaW8yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfc3JjX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX3RpdGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2FydGlzdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9kdXJhdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3dhdmVmb3JtRGF0YV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3dhdmVmb3JtUmVhZHlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc1ByZXZpZXdQbGF5aW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfc3JjX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNyYyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3JjIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNyYywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNyYyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3JjX2luaXRpYWxpemVycywgX3NyY19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfdGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGl0bGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpdGxlX2luaXRpYWxpemVycywgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgwKHRoaXMsIG51bGwsIF9hcnRpc3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXJ0aXN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcnRpc3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXJ0aXN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXJ0aXN0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcnRpc3RfaW5pdGlhbGl6ZXJzLCBfYXJ0aXN0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgwKHRoaXMsIG51bGwsIF9kdXJhdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkdXJhdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHVyYXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHVyYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kdXJhdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODAodGhpcywgbnVsbCwgX3dhdmVmb3JtRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3YXZlZm9ybURhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndhdmVmb3JtRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53YXZlZm9ybURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai53YXZlZm9ybURhdGEgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dhdmVmb3JtRGF0YV9pbml0aWFsaXplcnMsIF93YXZlZm9ybURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODAodGhpcywgbnVsbCwgX3dhdmVmb3JtUmVhZHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2F2ZWZvcm1SZWFkeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2F2ZWZvcm1SZWFkeSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53YXZlZm9ybVJlYWR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2F2ZWZvcm1SZWFkeSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZWZvcm1SZWFkeV9pbml0aWFsaXplcnMsIF93YXZlZm9ybVJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgwKHRoaXMsIG51bGwsIF9pc1ByZXZpZXdQbGF5aW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJldmlld1BsYXlpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzUHJldmlld1BsYXlpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQcmV2aWV3UGxheWluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzUHJldmlld1BsYXlpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJldmlld1BsYXlpbmdfaW5pdGlhbGl6ZXJzLCBfaXNQcmV2aWV3UGxheWluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzVGlsZUF1ZGlvMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW83OwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJNZWRpYSJdOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICAuLi50aWxlQmFzZVN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC5hdWRpby1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDI1MCA0MCUgOTYlKSwgaHNsKDI4MCAzMCUgOTQlKSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDI1MCAzMCUgMTYlKSwgaHNsKDI4MCAyNSUgMTQlKSkiKX07CiAgICAgIH0KCiAgICAgIC5tdXNpYy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUwIDYwJSA2NSUpIiwgImhzbCgyNTAgNjAlIDcwJSkiKX07CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuYXVkaW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1MCAyMCUgMzUlKSIsICJoc2woMjUwIDIwJSA4MCUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmF1ZGlvLWFydGlzdCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUwIDE1JSA1MCUpIiwgImhzbCgyNTAgMTUlIDY1JSkiKX07CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAud2F2ZWZvcm0tY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMzJweCk7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAud2F2ZWZvcm0tY29udGFpbmVyIGNhbnZhcyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgoKICAgICAgLnBsYXktb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxODsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnRpbGUtY29udGFpbmVyLmNsaWNrYWJsZTpob3ZlciAucGxheS1vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAucGxheS1jaXJjbGUgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgICAgfQoKICAgICAgLnBsYXktY2lyY2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgI3NyY19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfc3JjX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCBzcmMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc3JjX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzcmModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RpdGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGl0bGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYXJ0aXN0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgxKHRoaXMsIF9hcnRpc3RfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBhcnRpc3QoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYXJ0aXN0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhcnRpc3QodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhcnRpc3RfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfYXJ0aXN0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkdXJhdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN3YXZlZm9ybURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgxKHRoaXMsIF9kdXJhdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3dhdmVmb3JtRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IHdhdmVmb3JtRGF0YSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3YXZlZm9ybURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdhdmVmb3JtRGF0YSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3dhdmVmb3JtRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd2F2ZWZvcm1SZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3dhdmVmb3JtRGF0YV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3dhdmVmb3JtUmVhZHlfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCB3YXZlZm9ybVJlYWR5KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3dhdmVmb3JtUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHdhdmVmb3JtUmVhZHkodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN3YXZlZm9ybVJlYWR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc1ByZXZpZXdQbGF5aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MSh0aGlzLCBfd2F2ZWZvcm1SZWFkeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX2lzUHJldmlld1BsYXlpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc1ByZXZpZXdQbGF5aW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzUHJldmlld1BsYXlpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzUHJldmlld1BsYXlpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc1ByZXZpZXdQbGF5aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGF1ZGlvRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczgxKHRoaXMsIF9pc1ByZXZpZXdQbGF5aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgcHJldmlld1RpbWVvdXQgPSBudWxsOwogICAgICAgIGhhc0xvYWRlZFdhdmVmb3JtID0gZmFsc2U7CiAgICAgICAgcmVuZGVyVGlsZUNvbnRlbnQoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImF1ZGlvLWNvbnRlbnQiPgogICAgICAgIDxkZWVzLWljb24gY2xhc3M9Im11c2ljLWljb24iIGljb249Imx1Y2lkZTpNdXNpYyI+PC9kZWVzLWljb24+CgogICAgICAgICR7dGhpcy50aXRsZSA/IGIyYDxkaXYgY2xhc3M9ImF1ZGlvLXRpdGxlIj4ke3RoaXMudGl0bGV9PC9kaXY+YCA6ICIifQogICAgICAgICR7dGhpcy5hcnRpc3QgPyBiMmA8ZGl2IGNsYXNzPSJhdWRpby1hcnRpc3QiPiR7dGhpcy5hcnRpc3R9PC9kaXY+YCA6ICIifQoKICAgICAgICAke3RoaXMud2F2ZWZvcm1SZWFkeSA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0id2F2ZWZvcm0tY29udGFpbmVyIj4KICAgICAgICAgICAgPGNhbnZhcz48L2NhbnZhcz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuZHVyYXRpb24gPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1iYWRnZS1jb3JuZXIiPiR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuZHVyYXRpb24pfTwvZGl2PgogICAgICBgIDogIiJ9CgogICAgICA8ZGl2IGNsYXNzPSJwbGF5LW92ZXJsYXkiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYXktY2lyY2xlIj4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlBsYXkiPjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgICR7dGhpcy5jbGlja2FibGUgPyBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLW92ZXJsYXkiPgogICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVhZHBob25lcyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5QbGF5IEF1ZGlvPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgICAgIH0KICAgICAgICBnZXRUaWxlQ2xpY2tEZXRhaWwoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzcmM6IHRoaXMuc3JjLAogICAgICAgICAgICB0aXRsZTogdGhpcy50aXRsZSwKICAgICAgICAgICAgYXJ0aXN0OiB0aGlzLmFydGlzdCwKICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIG9uQmVjYW1lVmlzaWJsZSgpIHsKICAgICAgICAgIGlmICghdGhpcy5oYXNMb2FkZWRXYXZlZm9ybSAmJiB0aGlzLnNyYykgewogICAgICAgICAgICB0aGlzLmhhc0xvYWRlZFdhdmVmb3JtID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5sb2FkQXVkaW9NZXRhKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGxvYWRBdWRpb01ldGEoKSB7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8oKTsKICAgICAgICAgICAgYXVkaW8uY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKICAgICAgICAgICAgYXVkaW8ucHJlbG9hZCA9ICJtZXRhZGF0YSI7CiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLCAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gYXVkaW8uZHVyYXRpb247CiAgICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgICAgICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsICgpID0+IHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byBsb2FkIGF1ZGlvIikpLCB7IG9uY2U6IHRydWUgfSk7CiAgICAgICAgICAgICAgYXVkaW8uc3JjID0gdGhpcy5zcmM7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRXYXZlZm9ybSgpOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgbG9hZFdhdmVmb3JtKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnNyYyk7CiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgICAgY29uc3QgYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpOwogICAgICAgICAgICBjb25zdCBhdWRpb0J1ZmZlciA9IGF3YWl0IGF1ZGlvQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIpOwogICAgICAgICAgICBjb25zdCBjaGFubmVsRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgICAgICAgICBjb25zdCBiYXJzID0gODA7CiAgICAgICAgICAgIGNvbnN0IGJsb2NrU2l6ZSA9IE1hdGguZmxvb3IoY2hhbm5lbERhdGEubGVuZ3RoIC8gYmFycyk7CiAgICAgICAgICAgIGNvbnN0IHdhdmVmb3JtID0gW107CiAgICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJhcnM7IGkxMSsrKSB7CiAgICAgICAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgICAgICAgZm9yIChsZXQgajQgPSAwOyBqNCA8IGJsb2NrU2l6ZTsgajQrKykgewogICAgICAgICAgICAgICAgc3VtICs9IE1hdGguYWJzKGNoYW5uZWxEYXRhW2kxMSAqIGJsb2NrU2l6ZSArIGo0XSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdhdmVmb3JtLnB1c2goc3VtIC8gYmxvY2tTaXplKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBtYXgzID0gTWF0aC5tYXgoLi4ud2F2ZWZvcm0pOwogICAgICAgICAgICB0aGlzLndhdmVmb3JtRGF0YSA9IHdhdmVmb3JtLm1hcCgodjUpID0+IG1heDMgPiAwID8gdjUgLyBtYXgzIDogMCk7CiAgICAgICAgICAgIHRoaXMud2F2ZWZvcm1SZWFkeSA9IHRydWU7CiAgICAgICAgICAgIGF3YWl0IGF1ZGlvQ29udGV4dC5jbG9zZSgpOwogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICB0aGlzLmRyYXdXYXZlZm9ybSgpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHRoaXMud2F2ZWZvcm1SZWFkeSA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkcmF3V2F2ZWZvcm0oKSB7CiAgICAgICAgICBpZiAoIXRoaXMud2F2ZWZvcm1SZWFkeSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud2F2ZWZvcm0tY29udGFpbmVyIGNhbnZhcyIpOwogICAgICAgICAgaWYgKCFjYW52YXMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNhbnZhcy5wYXJlbnRFbGVtZW50OwogICAgICAgICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoOwogICAgICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodDsKICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogZHByOwogICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIGRwcjsKICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFjdHgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGN0eC5zY2FsZShkcHIsIGRwcik7CiAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgY29uc3QgYmFycyA9IHRoaXMud2F2ZWZvcm1EYXRhLmxlbmd0aDsKICAgICAgICAgIGlmIChiYXJzID09PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBiYXJXaWR0aCA9IHdpZHRoIC8gYmFyczsKICAgICAgICAgIGNvbnN0IGlzRGFyayA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aGVtZS1kYXJrIikgfHwgd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzOwogICAgICAgICAgY29uc3QgYmFyQ29sb3IgPSBpc0RhcmsgPyAiaHNsKDI1MCA1MCUgNjAlKSIgOiAiaHNsKDI1MCA1MCUgNzAlKSI7CiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFyQ29sb3I7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiYXJzOyBpMTErKykgewogICAgICAgICAgICBjb25zdCBhbXBsaXR1ZGUgPSB0aGlzLndhdmVmb3JtRGF0YVtpMTFdOwogICAgICAgICAgICBjb25zdCBiYXJIZWlnaHQgPSBNYXRoLm1heCgyLCBhbXBsaXR1ZGUgKiAoaGVpZ2h0IC0gNCkpOwogICAgICAgICAgICBjb25zdCB4NCA9IGkxMSAqIGJhcldpZHRoOwogICAgICAgICAgICBjb25zdCB5NCA9IChoZWlnaHQgLSBiYXJIZWlnaHQpIC8gMjsKICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHg0ICsgMC41LCB5NCwgYmFyV2lkdGggLSAxLCBiYXJIZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNyYyIpICYmIHRoaXMuc3JjICYmIHRoaXMuaXNWaXNpYmxlKSB7CiAgICAgICAgICAgIHRoaXMuaGFzTG9hZGVkV2F2ZWZvcm0gPSB0cnVlOwogICAgICAgICAgICB0aGlzLndhdmVmb3JtUmVhZHkgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7CiAgICAgICAgICAgIHRoaXMubG9hZEF1ZGlvTWV0YSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygid2F2ZWZvcm1SZWFkeSIpICYmIHRoaXMud2F2ZWZvcm1SZWFkeSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICB0aGlzLmRyYXdXYXZlZm9ybSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3VGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wcmV2aWV3VGltZW91dCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5hdWRpb0VsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQucGF1c2UoKTsKICAgICAgICAgICAgdGhpcy5hdWRpb0VsZW1lbnQuc3JjID0gIiI7CiAgICAgICAgICAgIHRoaXMuYXVkaW9FbGVtZW50ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9ybWF0VGltZShzZWNvbmRzKSB7CiAgICAgICAgICBpZiAoIWlzRmluaXRlKHNlY29uZHMpIHx8IHNlY29uZHMgPCAwKQogICAgICAgICAgICByZXR1cm4gIjA6MDAiOwogICAgICAgICAgY29uc3QgbWlucyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKTsKICAgICAgICAgIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7CiAgICAgICAgICByZXR1cm4gYCR7bWluc306JHtzZWNzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1RpbGVBdWRpbzIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1hdWRpby9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3RpbGVfYXVkaW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtYXVkaW8vaW5kZXguanMiKCkgewogICAgaW5pdF9jb21wb25lbnQxNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXZpZGVvL2RlbW8uanMKdmFyIGRlbW84Owp2YXIgaW5pdF9kZW1vMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtdmlkZW8vZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtbzggPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBwYWRkaW5nOiA0MHB4OwogICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwogICAgfQogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICB9CiAgICBoMyB7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIH0KICAgIC50aWxlLXJvdyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMjRweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+VmlkZW8gVGlsZXM8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXJvdyI+CiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iYnVubnkubXA0IgogICAgICAgICAgQHRpbGUtY2xpY2s9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVmlkZW8gY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CgogICAgICAgIDxkZWVzLXRpbGUtdmlkZW8KICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdmllLm1wNCIKICAgICAgICAgIHBvc3Rlcj0iaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzQwMC8zMDAiCiAgICAgICAgICBsYWJlbD0ibW92aWUubXA0IgogICAgICAgID48L2RlZXMtdGlsZS12aWRlbz4KCiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iYW5vdGhlci12aWRlby5tcDQiCiAgICAgICAgPjwvZGVlcy10aWxlLXZpZGVvPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5TaXplIFZhcmlhbnRzPC9oMz4KICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgIDxkZWVzLXRpbGUtdmlkZW8KICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0ic21hbGwubXA0IgogICAgICAgID48L2RlZXMtdGlsZS12aWRlbz4KCiAgICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgICAgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2h0bWwvbW92X2JiYi5tcDQiCiAgICAgICAgICBsYWJlbD0iZGVmYXVsdC5tcDQiCiAgICAgICAgPjwvZGVlcy10aWxlLXZpZGVvPgoKICAgICAgICA8ZGVlcy10aWxlLXZpZGVvCiAgICAgICAgICBzaXplPSJsYXJnZSIKICAgICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdl9iYmIubXA0IgogICAgICAgICAgbGFiZWw9ImxhcmdlLm1wNCIKICAgICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPldpdGggUG9zdGVyIEltYWdlPC9oMz4KICAgICAgPGRlZXMtdGlsZS12aWRlbwogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9odG1sL21vdmllLm1wNCIKICAgICAgICBwb3N0ZXI9Imh0dHBzOi8vcGljc3VtLnBob3Rvcy82MDAvNDAwIgogICAgICAgIGxhYmVsPSJwb3N0ZXItdmlkZW8ubXA0IgogICAgICA+PC9kZWVzLXRpbGUtdmlkZW8+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS12aWRlby9jb21wb25lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTgxLCBfX3J1bkluaXRpYWxpemVyczgyLCBEZWVzVGlsZVZpZGVvOwp2YXIgaW5pdF9jb21wb25lbnQxNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS12aWRlby9jb21wb25lbnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfRGVlc1RpbGVCYXNlKCk7CiAgICBpbml0X3N0eWxlczkoKTsKICAgIGluaXRfZGVtbzEzKCk7CiAgICBfX2VzRGVjb3JhdGU4MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczgyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzVGlsZVZpZGVvID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdGlsZS12aWRlbyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc1RpbGVCYXNlOwogICAgICBsZXQgX3NyY19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NyY19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zcmNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wb3N0ZXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wb3N0ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcG9zdGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZHVyYXRpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9kdXJhdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kdXJhdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RodW1ibmFpbENhcHR1cmVkX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGh1bWJuYWlsQ2FwdHVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGh1bWJuYWlsQ2FwdHVyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNIb3ZlcmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzVGlsZVZpZGVvMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3NyY19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9wb3N0ZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfZHVyYXRpb25fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF90aHVtYm5haWxDYXB0dXJlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzSG92ZXJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgxKHRoaXMsIG51bGwsIF9zcmNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3JjIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzcmMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3JjLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3JjID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zcmNfaW5pdGlhbGl6ZXJzLCBfc3JjX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgxKHRoaXMsIG51bGwsIF9wb3N0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zdGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwb3N0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zdGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoucG9zdGVyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3N0ZXJfaW5pdGlhbGl6ZXJzLCBfcG9zdGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgxKHRoaXMsIG51bGwsIF9kdXJhdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkdXJhdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHVyYXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHVyYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5kdXJhdGlvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODEodGhpcywgbnVsbCwgX3RodW1ibmFpbENhcHR1cmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRodW1ibmFpbENhcHR1cmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHVtYm5haWxDYXB0dXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHVtYm5haWxDYXB0dXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRodW1ibmFpbENhcHR1cmVkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHVtYm5haWxDYXB0dXJlZF9pbml0aWFsaXplcnMsIF90aHVtYm5haWxDYXB0dXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4MSh0aGlzLCBudWxsLCBfaXNIb3ZlcmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hvdmVyaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSG92ZXJpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0hvdmVyaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1RpbGVWaWRlbzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vODsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiTWVkaWEiXTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgLi4udGlsZUJhc2VTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAudmlkZW8td3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICAgIH0KCiAgICAgIC52aWRlby13cmFwcGVyIHZpZGVvIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC52aWRlby13cmFwcGVyIGNhbnZhcyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAucG9zdGVyLWltYWdlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCgogICAgICAucGxheS1vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiAxNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLnBsYXktb3ZlcmxheSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50aWxlLWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnBsYXktb3ZlcmxheSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLnZpZGVvLWhvdmVyLXByZXZpZXcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAudmlkZW8taG92ZXItcHJldmlldy5hY3RpdmUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgICNzcmNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODIodGhpcywgX3NyY19pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgc3JjKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NyY19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3JjKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3JjX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwb3N0ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9zcmNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9wb3N0ZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBwb3N0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcG9zdGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwb3N0ZXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwb3N0ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfcG9zdGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCAwKSk7CiAgICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkdXJhdGlvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0aHVtYm5haWxDYXB0dXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODIodGhpcywgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfdGh1bWJuYWlsQ2FwdHVyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCB0aHVtYm5haWxDYXB0dXJlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aHVtYm5haWxDYXB0dXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGh1bWJuYWlsQ2FwdHVyZWQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aHVtYm5haWxDYXB0dXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODIodGhpcywgX3RodW1ibmFpbENhcHR1cmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfaXNIb3ZlcmluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzSG92ZXJpbmcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNIb3ZlcmluZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgdGh1bWJuYWlsQ2FudmFzID0gKF9fcnVuSW5pdGlhbGl6ZXJzODIodGhpcywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBob3ZlclZpZGVvID0gbnVsbDsKICAgICAgICBoYXNTdGFydGVkTG9hZGluZyA9IGZhbHNlOwogICAgICAgIHJlbmRlclRpbGVDb250ZW50KCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWRlby13cmFwcGVyIj4KICAgICAgICAke3RoaXMucG9zdGVyID8gYjJgCiAgICAgICAgICA8aW1nIGNsYXNzPSJwb3N0ZXItaW1hZ2UiIHNyYz0iJHt0aGlzLnBvc3Rlcn0iIGFsdD0iIiAvPgogICAgICAgIGAgOiB0aGlzLnRodW1ibmFpbENhcHR1cmVkID8gYjJgCiAgICAgICAgICA8Y2FudmFzPjwvY2FudmFzPgogICAgICAgIGAgOiBiMmAKICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6ICMwMDA7Ij48L2Rpdj4KICAgICAgICBgfQoKICAgICAgICAke3RoaXMuaXNIb3ZlcmluZyAmJiB0aGlzLnNyYyA/IGIyYAogICAgICAgICAgPHZpZGVvCiAgICAgICAgICAgIGNsYXNzPSJ2aWRlby1ob3Zlci1wcmV2aWV3ICR7dGhpcy5pc0hvdmVyaW5nID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgIC5zcmM9JHt0aGlzLnNyY30KICAgICAgICAgICAgbXV0ZWQKICAgICAgICAgICAgcGxheXNpbmxpbmUKICAgICAgICAgICAgQGxvYWRlZGRhdGE9JHt0aGlzLmhhbmRsZUhvdmVyVmlkZW9Mb2FkZWR9CiAgICAgICAgICA+PC92aWRlbz4KICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmR1cmF0aW9uID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtY29ybmVyIj4ke3RoaXMuZm9ybWF0VGltZSh0aGlzLmR1cmF0aW9uKX08L2Rpdj4KICAgICAgYCA6ICIifQoKICAgICAgJHshdGhpcy5pc0hvdmVyaW5nID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0icGxheS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlBsYXkiPjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICBgIDogIiJ9CgogICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlBsYXkiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+UGxheSBWaWRlbzwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0VGlsZUNsaWNrRGV0YWlsKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3JjOiB0aGlzLnNyYywKICAgICAgICAgICAgcG9zdGVyOiB0aGlzLnBvc3RlciwKICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIG9uQmVjYW1lVmlzaWJsZSgpIHsKICAgICAgICAgIGlmICghdGhpcy5oYXNTdGFydGVkTG9hZGluZyAmJiB0aGlzLnNyYykgewogICAgICAgICAgICB0aGlzLmhhc1N0YXJ0ZWRMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5jYXB0dXJlRmlyc3RGcmFtZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBjYXB0dXJlRmlyc3RGcmFtZSgpIHsKICAgICAgICAgIGlmICh0aGlzLnBvc3RlcikgewogICAgICAgICAgICB0aGlzLmxvYWREdXJhdGlvbigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwogICAgICAgICAgICB2aWRlby5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwogICAgICAgICAgICB2aWRlby5tdXRlZCA9IHRydWU7CiAgICAgICAgICAgIHZpZGVvLnByZWxvYWQgPSAibWV0YWRhdGEiOwogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLCAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uID0gdmlkZW8uZHVyYXRpb247CiAgICAgICAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDAuMTsKICAgICAgICAgICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoInNlZWtlZCIsICgpID0+IHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7CiAgICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDsKICAgICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgICAgICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKHZpZGVvLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRodW1ibmFpbENhbnZhcyA9IGNhbnZhczsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRodW1ibmFpbENhcHR1cmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2aWRlby5zcmMgPSAiIjsKICAgICAgICAgICAgICAgICAgdmlkZW8ubG9hZCgpOwogICAgICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsICgpID0+IHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byBsb2FkIHZpZGVvIikpLCB7IG9uY2U6IHRydWUgfSk7CiAgICAgICAgICAgICAgdmlkZW8uc3JjID0gdGhpcy5zcmM7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgICAgdGhpcy5jb3B5VGh1bWJuYWlsVG9DYW52YXMoKTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5sb2FkRHVyYXRpb24oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbG9hZER1cmF0aW9uKCkgewogICAgICAgICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpOwogICAgICAgICAgdmlkZW8ucHJlbG9hZCA9ICJtZXRhZGF0YSI7CiAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IHZpZGVvLmR1cmF0aW9uOwogICAgICAgICAgICB2aWRlby5zcmMgPSAiIjsKICAgICAgICAgICAgdmlkZW8ubG9hZCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICB2aWRlby5zcmMgPSB0aGlzLnNyYzsKICAgICAgICB9CiAgICAgICAgY29weVRodW1ibmFpbFRvQ2FudmFzKCkgewogICAgICAgICAgaWYgKCF0aGlzLnRodW1ibmFpbENhbnZhcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudmlkZW8td3JhcHBlciBjYW52YXMiKTsKICAgICAgICAgIGlmICghY2FudmFzKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjYW52YXMud2lkdGggPSB0aGlzLnRodW1ibmFpbENhbnZhcy53aWR0aDsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLnRodW1ibmFpbENhbnZhcy5oZWlnaHQ7CiAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLnRodW1ibmFpbENhbnZhcywgMCwgMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9uVGlsZU1vdXNlRW50ZXIoKSB7CiAgICAgICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBvblRpbGVNb3VzZUxlYXZlKCkgewogICAgICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmhvdmVyVmlkZW8gPSBudWxsOwogICAgICAgIH0KICAgICAgICBoYW5kbGVIb3ZlclZpZGVvTG9hZGVkKGUxMSkgewogICAgICAgICAgdGhpcy5ob3ZlclZpZGVvID0gZTExLnRhcmdldDsKICAgICAgICAgIHRoaXMuaG92ZXJWaWRlby5wbGF5KCkuY2F0Y2goKCkgPT4gewogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic3JjIikgJiYgdGhpcy5zcmMgJiYgdGhpcy5pc1Zpc2libGUpIHsKICAgICAgICAgICAgdGhpcy5oYXNTdGFydGVkTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsQ2FwdHVyZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7CiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUZpcnN0RnJhbWUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRodW1ibmFpbENhcHR1cmVkIikgJiYgdGhpcy50aHVtYm5haWxDYXB0dXJlZCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICB0aGlzLmNvcHlUaHVtYm5haWxUb0NhbnZhcygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBpZiAodGhpcy5ob3ZlclZpZGVvKSB7CiAgICAgICAgICAgIHRoaXMuaG92ZXJWaWRlby5wYXVzZSgpOwogICAgICAgICAgICB0aGlzLmhvdmVyVmlkZW8uc3JjID0gIiI7CiAgICAgICAgICAgIHRoaXMuaG92ZXJWaWRlbyA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRodW1ibmFpbENhbnZhcyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGZvcm1hdFRpbWUoc2Vjb25kcykgewogICAgICAgICAgaWYgKCFpc0Zpbml0ZShzZWNvbmRzKSB8fCBzZWNvbmRzIDwgMCkKICAgICAgICAgICAgcmV0dXJuICIwOjAwIjsKICAgICAgICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7CiAgICAgICAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApOwogICAgICAgICAgcmV0dXJuIGAke21pbnN9OiR7c2Vjcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNUaWxlVmlkZW8yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtdmlkZW8vaW5kZXguanMKdmFyIGluaXRfZGVlc190aWxlX3ZpZGVvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLXZpZGVvL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50MTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1ub3RlL2RlbW8uanMKdmFyIGRlbW85Owp2YXIgaW5pdF9kZW1vMTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtbm90ZS9kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vOSA9ICgpID0+IHsKICAgICAgY29uc3Qgc2FtcGxlQ29kZSA9IGBpbXBvcnQgeyBodG1sIH0gZnJvbSAnbGl0JzsKCmV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7CiAgcHJpdmF0ZSBpdGVtczogc3RyaW5nW10gPSBbXTsKCiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWxcYAogICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIFwke3RoaXMuaXRlbXMubWFwKGl0ZW0gPT4gaHRtbFxgCiAgICAgICAgICA8c3Bhbj5cJHtpdGVtfTwvc3Bhbj4KICAgICAgICBcYCl9CiAgICAgIDwvZGl2PgogICAgXGA7CiAgfQp9YDsKICAgICAgY29uc3Qgc2FtcGxlVGV4dCA9IGBNZWV0aW5nIE5vdGVzIC0gUTQgUGxhbm5pbmcKRGF0ZTogSmFudWFyeSAxNSwgMjAyNgpBdHRlbmRlZXM6IEFsaWNlLCBCb2IsIENoYXJsaWUKCktleSBEZWNpc2lvbnM6CjEuIExhdW5jaCBuZXcgZmVhdHVyZSBieSBNYXJjaAoyLiBIaXJlIDIgbW9yZSBlbmdpbmVlcnMKMy4gTWlncmF0ZSB0byBuZXcgQ0kvQ0QgcGlwZWxpbmUKNC4gVXBkYXRlIGRlc2lnbiBzeXN0ZW0gdG8gdjMKCkFjdGlvbiBJdGVtczoKLSBBbGljZTogRHJhZnQgUFJEIGJ5IG5leHQgd2VlawotIEJvYjogU2V0IHVwIGludGVydmlldyBwaXBlbGluZQotIENoYXJsaWU6IEV2YWx1YXRlIEplbmtpbnMgdnMgR2l0SHViIEFjdGlvbnNgOwogICAgICBjb25zdCBzYW1wbGVKc29uID0gYHsKICAibmFtZSI6ICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciLAogICJ2ZXJzaW9uIjogIjMuMzguMCIsCiAgImRlc2NyaXB0aW9uIjogIkRlc2lnbiBjb21wb25lbnQgY2F0YWxvZyIsCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiOiAiXjIuMC4wIiwKICAgICJsaXQiOiAiXjMuMS4wIgogIH0sCiAgInNjcmlwdHMiOiB7CiAgICAiYnVpbGQiOiAidHNidWlsZCIsCiAgICAidGVzdCI6ICJ0c3Rlc3QiCiAgfQp9YDsKICAgICAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKICAgICAgfQogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICB9CiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgIC50aWxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+Tm90ZSBUaWxlczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgICAgPGRlZXMtdGlsZS1ub3RlCiAgICAgICAgICAgIHRpdGxlPSJjb21wb25lbnQudHMiCiAgICAgICAgICAgIC5jb250ZW50PSR7c2FtcGxlQ29kZX0KICAgICAgICAgICAgbGFuZ3VhZ2U9InR5cGVzY3JpcHQiCiAgICAgICAgICAgIGxhYmVsPSJjb21wb25lbnQudHMiCiAgICAgICAgICAgIEB0aWxlLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIk5vdGUgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgoKICAgICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgICB0aXRsZT0iTWVldGluZyBOb3RlcyIKICAgICAgICAgICAgLmNvbnRlbnQ9JHtzYW1wbGVUZXh0fQogICAgICAgICAgICBsYWJlbD0ibWVldGluZy1ub3Rlcy50eHQiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KCiAgICAgICAgICA8ZGVlcy10aWxlLW5vdGUKICAgICAgICAgICAgdGl0bGU9InBhY2thZ2UuanNvbiIKICAgICAgICAgICAgLmNvbnRlbnQ9JHtzYW1wbGVKc29ufQogICAgICAgICAgICBsYW5ndWFnZT0ianNvbiIKICAgICAgICAgICAgbGFiZWw9InBhY2thZ2UuanNvbiIKICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpemUgVmFyaWFudHM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgICBzaXplPSJzbWFsbCIKICAgICAgICAgICAgdGl0bGU9InNtYWxsLnRzIgogICAgICAgICAgICAuY29udGVudD0ke3NhbXBsZUNvZGV9CiAgICAgICAgICAgIGxhbmd1YWdlPSJ0cyIKICAgICAgICAgICAgbGFiZWw9InNtYWxsLnRzIgogICAgICAgICAgPjwvZGVlcy10aWxlLW5vdGU+CgogICAgICAgICAgPGRlZXMtdGlsZS1ub3RlCiAgICAgICAgICAgIHRpdGxlPSJkZWZhdWx0LnRzIgogICAgICAgICAgICAuY29udGVudD0ke3NhbXBsZUNvZGV9CiAgICAgICAgICAgIGxhbmd1YWdlPSJ0cyIKICAgICAgICAgICAgbGFiZWw9ImRlZmF1bHQudHMiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KCiAgICAgICAgICA8ZGVlcy10aWxlLW5vdGUKICAgICAgICAgICAgc2l6ZT0ibGFyZ2UiCiAgICAgICAgICAgIHRpdGxlPSJsYXJnZS50cyIKICAgICAgICAgICAgLmNvbnRlbnQ9JHtzYW1wbGVDb2RlfQogICAgICAgICAgICBsYW5ndWFnZT0idHMiCiAgICAgICAgICAgIGxhYmVsPSJsYXJnZS50cyIKICAgICAgICAgID48L2RlZXMtdGlsZS1ub3RlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPldpdGhvdXQgVGl0bGU8L2gzPgogICAgICAgIDxkZWVzLXRpbGUtbm90ZQogICAgICAgICAgLmNvbnRlbnQ9JHtzYW1wbGVUZXh0fQogICAgICAgICAgbGFiZWw9InVudGl0bGVkLnR4dCIKICAgICAgICA+PC9kZWVzLXRpbGUtbm90ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1ub3RlL2NvbXBvbmVudC5qcwp2YXIgX19lc0RlY29yYXRlODIsIF9fcnVuSW5pdGlhbGl6ZXJzODMsIERlZXNUaWxlTm90ZTsKdmFyIGluaXRfY29tcG9uZW50MTYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtbm90ZS9jb21wb25lbnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfRGVlc1RpbGVCYXNlKCk7CiAgICBpbml0X3N0eWxlczkoKTsKICAgIGluaXRfZGVtbzE0KCk7CiAgICBfX2VzRGVjb3JhdGU4MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczgzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzVGlsZU5vdGUgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy10aWxlLW5vdGUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNUaWxlQmFzZTsKICAgICAgbGV0IF90aXRsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RpdGxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNIb3ZlcmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzVGlsZU5vdGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfdGl0bGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfY29udGVudF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfdGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGl0bGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpdGxlX2luaXRpYWxpemVycywgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9jb250ZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfbGFuZ3VhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFuZ3VhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhbmd1YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhbmd1YWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSG92ZXJpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzSG92ZXJpbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzVGlsZU5vdGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzk7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk1lZGlhIl07CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIC4uLnRpbGVCYXNlU3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLm5vdGUtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiaHNsKDYwIDUlIDk2JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm5vdGUtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE0cHggOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubm90ZS10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwJSAyMCUpIiwgImhzbCgyMTUgMjAlIDIwJSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICAgIH0KCiAgICAgIC5ub3RlLWJvZHkgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogMCAxNHB4IDE0cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ub3RlLXRleHQgewogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxMCUgNDAlKSIsICJoc2woMjE1IDEwJSAzNSUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5ub3RlLWZhZGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgdHJhbnNwYXJlbnQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICJoc2woNjAgNSUgOTYlKSIpfQogICAgICAgICk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50aWxlLWJhZGdlLXRvcHJpZ2h0Lm5vdGUtbGFuZ3VhZ2UgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwJSA5MiUpIiwgImhzbCgyMTUgMjAlIDg4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA1MCUpIiwgImhzbCgyMTUgMTYlIDQwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiA5cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB6LWluZGV4OiA1OwogICAgICB9CgogICAgICAubm90ZS1saW5lcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMzRweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDg1JSkiLCAiaHNsKDAgNTAlIDgwJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICB9CgogICAgICAubGluZS1udW1iZXIgewogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4OyAvKiBtYXRjaGVzIDEwcHggKiAxLjUgbGluZS1oZWlnaHQgKi8KICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTAlIDc1JSkiLCAiaHNsKDIxNSAxMCUgNzAlKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7CiAgICAgIH0KCiAgICBgCiAgICAgICAgXTsKICAgICAgICAjdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3RpdGxlX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGl0bGUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfY29udGVudF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGNvbnRlbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29udGVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX2xhbmd1YWdlX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgbGFuZ3VhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhbmd1YWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIG5vdGVCb2R5RWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgcmVuZGVyVGlsZUNvbnRlbnQoKSB7CiAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMuY29udGVudC5zcGxpdCgiXG4iKTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibm90ZS1jb250ZW50Ij4KICAgICAgICAke3RoaXMubGFuZ3VhZ2UgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtdG9wcmlnaHQgbm90ZS1sYW5ndWFnZSI+JHt0aGlzLmxhbmd1YWdlfTwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgJHt0aGlzLnRpdGxlID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlLWhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUtdGl0bGUiPiR7dGhpcy50aXRsZX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0ibm90ZS1ib2R5Ij4KICAgICAgICAgIDxwcmUgY2xhc3M9Im5vdGUtdGV4dCI+JHtsaW5lcy5qb2luKCJcbiIpfTwvcHJlPgogICAgICAgICAgJHshdGhpcy5pc0hvdmVyaW5nID8gYjJgPGRpdiBjbGFzcz0ibm90ZS1mYWRlIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CgogICAgICAgICR7dGhpcy5pc0hvdmVyaW5nICYmIGxpbmVzLmxlbmd0aCA+IDEyID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWJhZGdlLWNvcm5lciI+CiAgICAgICAgICAgIExpbmUgJHt0aGlzLmdldFZpc2libGVMaW5lUmFuZ2UobGluZXMubGVuZ3RoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1vdmVybGF5Ij4KICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPk9wZW4gTm90ZTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0VGlsZUNsaWNrRGV0YWlsKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsCiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCwKICAgICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIG9uVGlsZU1vdXNlRW50ZXIoKSB7CiAgICAgICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgICAgICAgaWYgKCF0aGlzLm5vdGVCb2R5RWxlbWVudCkgewogICAgICAgICAgICB0aGlzLm5vdGVCb2R5RWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm5vdGUtYm9keSIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBvblRpbGVNb3VzZUxlYXZlKCkgewogICAgICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgICAgICBpZiAodGhpcy5ub3RlQm9keUVsZW1lbnQpIHsKICAgICAgICAgICAgdGhpcy5ub3RlQm9keUVsZW1lbnQuc2Nyb2xsVG9wID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb25UaWxlTW91c2VNb3ZlKGUxMSkgewogICAgICAgICAgaWYgKCF0aGlzLmlzSG92ZXJpbmcgfHwgIXRoaXMubm90ZUJvZHlFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB0b3RhbExpbmVzID0gdGhpcy5jb250ZW50LnNwbGl0KCJcbiIpLmxlbmd0aDsKICAgICAgICAgIGlmICh0b3RhbExpbmVzIDw9IDEyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IHg0ID0gZTExLmNsaWVudFggLSByZWN0LmxlZnQ7CiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeDQgLyByZWN0LndpZHRoKSk7CiAgICAgICAgICBjb25zdCBtYXhTY3JvbGwgPSB0aGlzLm5vdGVCb2R5RWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLm5vdGVCb2R5RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICB0aGlzLm5vdGVCb2R5RWxlbWVudC5zY3JvbGxUb3AgPSBwZXJjZW50YWdlICogbWF4U2Nyb2xsOwogICAgICAgIH0KICAgICAgICBnZXRWaXNpYmxlTGluZVJhbmdlKHRvdGFsTGluZXMpIHsKICAgICAgICAgIGlmICghdGhpcy5ub3RlQm9keUVsZW1lbnQpCiAgICAgICAgICAgIHJldHVybiBgMVx1MjAxMzEyIG9mICR7dG90YWxMaW5lc31gOwogICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IDE1OwogICAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gTWF0aC5mbG9vcih0aGlzLm5vdGVCb2R5RWxlbWVudC5zY3JvbGxUb3AgLyBsaW5lSGVpZ2h0KSArIDE7CiAgICAgICAgICBjb25zdCB2aXNpYmxlQ291bnQgPSBNYXRoLmZsb29yKHRoaXMubm90ZUJvZHlFbGVtZW50LmNsaWVudEhlaWdodCAvIGxpbmVIZWlnaHQpOwogICAgICAgICAgY29uc3QgbGFzdExpbmUgPSBNYXRoLm1pbihmaXJzdExpbmUgKyB2aXNpYmxlQ291bnQgLSAxLCB0b3RhbExpbmVzKTsKICAgICAgICAgIHJldHVybiBgJHtmaXJzdExpbmV9XHUyMDEzJHtsYXN0TGluZX0gb2YgJHt0b3RhbExpbmVzfWA7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczgzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzVGlsZU5vdGUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtbm90ZS9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3RpbGVfbm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1ub3RlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50MTYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1mb2xkZXIvZGVtby5qcwp2YXIgZGVtbzEwOwp2YXIgaW5pdF9kZW1vMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtZm9sZGVyL2RlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW8xMCA9ICgpID0+IHsKICAgICAgY29uc3QgcGhvdG9zRm9sZGVyID0gWwogICAgICAgIHsgdHlwZTogImltYWdlIiwgbmFtZTogInN1bnNldC5qcGciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209MSIgfSwKICAgICAgICB7IHR5cGU6ICJpbWFnZSIsIG5hbWU6ICJtb3VudGFpbi5qcGciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209MiIgfSwKICAgICAgICB7IHR5cGU6ICJpbWFnZSIsIG5hbWU6ICJvY2Vhbi5qcGciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209MyIgfSwKICAgICAgICB7IHR5cGU6ICJpbWFnZSIsIG5hbWU6ICJmb3Jlc3QuanBnIiwgdGh1bWJuYWlsU3JjOiAiaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzIwMC8yMDA/cmFuZG9tPTQiIH0sCiAgICAgICAgeyB0eXBlOiAiaW1hZ2UiLCBuYW1lOiAiY2l0eS5qcGciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209NSIgfSwKICAgICAgICB7IHR5cGU6ICJpbWFnZSIsIG5hbWU6ICJkZXNlcnQuanBnIiwgdGh1bWJuYWlsU3JjOiAiaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzIwMC8yMDA/cmFuZG9tPTYiIH0KICAgICAgXTsKICAgICAgY29uc3QgcHJvamVjdEZvbGRlciA9IFsKICAgICAgICB7IHR5cGU6ICJub3RlIiwgbmFtZTogIlJFQURNRS5tZCIgfSwKICAgICAgICB7IHR5cGU6ICJub3RlIiwgbmFtZTogInBhY2thZ2UuanNvbiIgfSwKICAgICAgICB7IHR5cGU6ICJmb2xkZXIiLCBuYW1lOiAic3JjIiB9LAogICAgICAgIHsgdHlwZTogImZvbGRlciIsIG5hbWU6ICJ0ZXN0IiB9LAogICAgICAgIHsgdHlwZTogIm5vdGUiLCBuYW1lOiAidHNjb25maWcuanNvbiIgfSwKICAgICAgICB7IHR5cGU6ICJwZGYiLCBuYW1lOiAiZG9jcy5wZGYiIH0sCiAgICAgICAgeyB0eXBlOiAiaW1hZ2UiLCBuYW1lOiAibG9nby5wbmciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMTAwLzEwMD9yYW5kb209MTAiIH0KICAgICAgXTsKICAgICAgY29uc3QgbWVkaWFGb2xkZXIgPSBbCiAgICAgICAgeyB0eXBlOiAidmlkZW8iLCBuYW1lOiAiaW50cm8ubXA0IiB9LAogICAgICAgIHsgdHlwZTogImF1ZGlvIiwgbmFtZTogImJhY2tncm91bmQubXAzIiB9LAogICAgICAgIHsgdHlwZTogImltYWdlIiwgbmFtZTogInRodW1ibmFpbC5qcGciLCB0aHVtYm5haWxTcmM6ICJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzIwMD9yYW5kb209MjAiIH0sCiAgICAgICAgeyB0eXBlOiAicGRmIiwgbmFtZTogInN0b3J5Ym9hcmQucGRmIiB9CiAgICAgIF07CiAgICAgIGNvbnN0IGVtcHR5Rm9sZGVyID0gW107CiAgICAgIGNvbnN0IHNpbmdsZUl0ZW1Gb2xkZXIgPSBbCiAgICAgICAgeyB0eXBlOiAicGRmIiwgbmFtZTogInJlcG9ydC5wZGYiIH0KICAgICAgXTsKICAgICAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKICAgICAgfQogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2MHB4OwogICAgICB9CiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgIC50aWxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+Rm9sZGVyIFRpbGVzPC9oMz4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXJvdyI+CiAgICAgICAgICA8ZGVlcy10aWxlLWZvbGRlcgogICAgICAgICAgICBuYW1lPSJQaG90b3MiCiAgICAgICAgICAgIC5pdGVtcz0ke3Bob3Rvc0ZvbGRlcn0KICAgICAgICAgICAgbGFiZWw9IjYgcGhvdG9zIgogICAgICAgICAgICBAdGlsZS1jbGljaz0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJGb2xkZXIgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgICAgID48L2RlZXMtdGlsZS1mb2xkZXI+CgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgbmFtZT0ibXktcHJvamVjdCIKICAgICAgICAgICAgLml0ZW1zPSR7cHJvamVjdEZvbGRlcn0KICAgICAgICAgICAgbGFiZWw9IlByb2plY3QgZmlsZXMiCiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgoKICAgICAgICAgIDxkZWVzLXRpbGUtZm9sZGVyCiAgICAgICAgICAgIG5hbWU9Ik1lZGlhIEFzc2V0cyIKICAgICAgICAgICAgLml0ZW1zPSR7bWVkaWFGb2xkZXJ9CiAgICAgICAgICAgIGxhYmVsPSJNaXhlZCBtZWRpYSIKICAgICAgICAgID48L2RlZXMtdGlsZS1mb2xkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+RWRnZSBDYXNlczwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1yb3ciPgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgbmFtZT0iRW1wdHkgRm9sZGVyIgogICAgICAgICAgICAuaXRlbXM9JHtlbXB0eUZvbGRlcn0KICAgICAgICAgID48L2RlZXMtdGlsZS1mb2xkZXI+CgogICAgICAgICAgPGRlZXMtdGlsZS1mb2xkZXIKICAgICAgICAgICAgbmFtZT0iU2luZ2xlIEl0ZW0iCiAgICAgICAgICAgIC5pdGVtcz0ke3NpbmdsZUl0ZW1Gb2xkZXJ9CiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpemUgVmFyaWFudHM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtcm93Ij4KICAgICAgICAgIDxkZWVzLXRpbGUtZm9sZGVyCiAgICAgICAgICAgIHNpemU9InNtYWxsIgogICAgICAgICAgICBuYW1lPSJTbWFsbCIKICAgICAgICAgICAgLml0ZW1zPSR7cGhvdG9zRm9sZGVyfQogICAgICAgICAgPjwvZGVlcy10aWxlLWZvbGRlcj4KCiAgICAgICAgICA8ZGVlcy10aWxlLWZvbGRlcgogICAgICAgICAgICBuYW1lPSJEZWZhdWx0IgogICAgICAgICAgICAuaXRlbXM9JHtwaG90b3NGb2xkZXJ9CiAgICAgICAgICA+PC9kZWVzLXRpbGUtZm9sZGVyPgoKICAgICAgICAgIDxkZWVzLXRpbGUtZm9sZGVyCiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBuYW1lPSJMYXJnZSIKICAgICAgICAgICAgLml0ZW1zPSR7cGhvdG9zRm9sZGVyfQogICAgICAgICAgPjwvZGVlcy10aWxlLWZvbGRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2RlZXMtdGlsZS1mb2xkZXIvY29tcG9uZW50LmpzCnZhciBfX2VzRGVjb3JhdGU4MywgX19ydW5Jbml0aWFsaXplcnM4NCwgVFlQRV9JQ09OX01BUCwgRGVlc1RpbGVGb2xkZXI7CnZhciBpbml0X2NvbXBvbmVudDE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvZGVlcy10aWxlLWZvbGRlci9jb21wb25lbnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfRGVlc1RpbGVCYXNlKCk7CiAgICBpbml0X3N0eWxlczkoKTsKICAgIGluaXRfZGVtbzE1KCk7CiAgICBfX2VzRGVjb3JhdGU4MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczg0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBUWVBFX0lDT05fTUFQID0gewogICAgICBwZGY6ICJsdWNpZGU6RmlsZVRleHQiLAogICAgICBpbWFnZTogImx1Y2lkZTpJbWFnZSIsCiAgICAgIGF1ZGlvOiAibHVjaWRlOk11c2ljIiwKICAgICAgdmlkZW86ICJsdWNpZGU6VmlkZW8iLAogICAgICBub3RlOiAibHVjaWRlOkZpbGVDb2RlIiwKICAgICAgZm9sZGVyOiAibHVjaWRlOkZvbGRlciIsCiAgICAgIHVua25vd246ICJsdWNpZGU6RmlsZSIKICAgIH07CiAgICBEZWVzVGlsZUZvbGRlciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRpbGUtZm9sZGVyIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzVGlsZUJhc2U7CiAgICAgIGxldCBfbmFtZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX25hbWVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2l0ZW1zX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNUaWxlRm9sZGVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX25hbWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfaXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlODModGhpcywgbnVsbCwgX25hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5uYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTgzKHRoaXMsIG51bGwsIF9pdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pdGVtcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXRlbXNfaW5pdGlhbGl6ZXJzLCBfaXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1RpbGVGb2xkZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtbzEwOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJNZWRpYSJdOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICAuLi50aWxlQmFzZVN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC5mb2xkZXItY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0MCAzMCUgOTclKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNHB4IDhweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmZvbGRlci1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgODAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZm9sZGVyLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgMjAlKSIsICJoc2woMjE1IDE2JSA4MCUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyIDFmcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDE0cHggMTRweDsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZ3JpZC1jZWxsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAlIDk0JSkiLCAiaHNsKDIxNSAyMCUgMTglKSIpfTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNlbGwgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNlbGwgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA2MCUpIiwgImhzbCgyMTUgMTYlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLWNlbGwtZW1wdHkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE1JSA5NiUpIiwgImhzbCgyMTUgMjAlIDE2JSkiKX07CiAgICAgIH0KCiAgICBgCiAgICAgICAgXTsKICAgICAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICIiKTsKICAgICAgICBnZXQgbmFtZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfaXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBpdGVtcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXRlbXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICByZW5kZXJUaWxlQ29udGVudCgpIHsKICAgICAgICAgIGNvbnN0IHByZXZpZXdJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UoMCwgNCk7CiAgICAgICAgICBjb25zdCBlbXB0eUNlbGxzID0gNCAtIHByZXZpZXdJdGVtcy5sZW5ndGg7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmb2xkZXItaGVhZGVyIj4KICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9ImZvbGRlci1pY29uIiBpY29uPSJsdWNpZGU6Rm9sZGVyIj48L2RlZXMtaWNvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGRlci1uYW1lIj4ke3RoaXMubmFtZSB8fCAiVW50aXRsZWQgRm9sZGVyIn08L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7cHJldmlld0l0ZW1zLm1hcCgoaXRlbSkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+CiAgICAgICAgICAgICAgJHtpdGVtLnRodW1ibmFpbFNyYyA/IGIyYAogICAgICAgICAgICAgICAgPGltZyBzcmM9IiR7aXRlbS50aHVtYm5haWxTcmN9IiBhbHQ9IiR7aXRlbS5uYW1lfSIgLz4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7VFlQRV9JQ09OX01BUFtpdGVtLnR5cGVdIHx8IFRZUEVfSUNPTl9NQVAudW5rbm93bn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgICAke0FycmF5LmZyb20oeyBsZW5ndGg6IGVtcHR5Q2VsbHMgfSkubWFwKCgpID0+IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwgZ3JpZC1jZWxsLWVtcHR5Ij48L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InRpbGUtYmFkZ2UtY29ybmVyIj4KICAgICAgICAke3RoaXMuaXRlbXMubGVuZ3RofSBpdGVtJHt0aGlzLml0ZW1zLmxlbmd0aCAhPT0gMSA/ICJzIiA6ICIifQogICAgICA8L2Rpdj4KCiAgICAgICR7dGhpcy5jbGlja2FibGUgPyBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLW92ZXJsYXkiPgogICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Rm9sZGVyT3BlbiI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5PcGVuIEZvbGRlcjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0VGlsZUNsaWNrRGV0YWlsKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLAogICAgICAgICAgICBpdGVtQ291bnQ6IHRoaXMuaXRlbXMubGVuZ3RoLAogICAgICAgICAgICBpdGVtczogdGhpcy5pdGVtcwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfaXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4NChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1RpbGVGb2xkZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtZm9sZGVyL2luZGV4LmpzCnZhciBpbml0X2RlZXNfdGlsZV9mb2xkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1tZWRpYS9kZWVzLXRpbGUtZm9sZGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tcG9uZW50MTcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW1lZGlhL2luZGV4LmpzCnZhciBpbml0X2dyb3VwX21lZGlhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbWVkaWEvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2ltYWdlX3ZpZXdlcigpOwogICAgaW5pdF9kZWVzX2F1ZGlvX3ZpZXdlcigpOwogICAgaW5pdF9kZWVzX3ZpZGVvX3ZpZXdlcigpOwogICAgaW5pdF9kZWVzX3ByZXZpZXcyKCk7CiAgICBpbml0X2RlZXNfcGRmKCk7CiAgICBpbml0X2RlZXNfcGRmX3ByZXZpZXcoKTsKICAgIGluaXRfZGVlc19wZGZfc2hhcmVkKCk7CiAgICBpbml0X2RlZXNfcGRmX3ZpZXdlcigpOwogICAgaW5pdF9kZWVzX3RpbGVfc2hhcmVkKCk7CiAgICBpbml0X2RlZXNfdGlsZV9wZGYoKTsKICAgIGluaXRfZGVlc190aWxlX2ltYWdlKCk7CiAgICBpbml0X2RlZXNfdGlsZV9hdWRpbygpOwogICAgaW5pdF9kZWVzX3RpbGVfdmlkZW8oKTsKICAgIGluaXRfZGVlc190aWxlX25vdGUoKTsKICAgIGluaXRfZGVlc190aWxlX2ZvbGRlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLWNvbnRleHRtZW51L2luZGV4LmpzCnZhciBpbml0X2RlZXNfY29udGV4dG1lbnUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLWNvbnRleHRtZW51L2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLW1vZGFsL2luZGV4LmpzCnZhciBpbml0X2RlZXNfbW9kYWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLW1vZGFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19tb2RhbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzCnZhciBkZW1vRnVuYzUwOwp2YXIgaW5pdF9kZWVzX3NwZWVjaGJ1YmJsZV9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzUwID0gKCkgPT4gewogICAgICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5yZWYxIHsKICAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InJlZjEiPjwvZGl2PgogICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7YAogICAgICAqKlRoaXMgaXMgYSBsb25nZXIgbWFya2Rvd24gdGV4dCB0aGF0ICBjYW4gYmUgdXNlZCB0aGUgd3JpdGUqKiAgCiAgICAgIGEgbG9uZ2VyIGRlc2NyaXB0aW9uIGFib3V0IHdoYXRzIGdvaW5nIG9uIHRoZSBhcHAgIAogIAogICAgICAqKlRoaXMgaXMgYSBzdWJoZWFkZXIqKgogICAgICBhbmQgYW5vdGhlciB0ZXh0CiAgICAKICAgIGB9PjwvZGVlcy1zcGVlY2hidWJibGU+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtc3BlZWNoYnViYmxlL2RlZXMtc3BlZWNoYnViYmxlLmpzCnZhciBfX2VzRGVjb3JhdGU4NCwgX19ydW5Jbml0aWFsaXplcnM4NSwgRGVlc1NwZWVjaGJ1YmJsZTsKdmFyIGluaXRfZGVlc19zcGVlY2hidWJibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtc3BlZWNoYnViYmxlL2RlZXMtc3BlZWNoYnViYmxlLmpzIigpIHsKICAgIGluaXRfY29sb3JzKCk7CiAgICBpbml0X3BsdWdpbnM0KCk7CiAgICBpbml0X2RlZXNfc3BlZWNoYnViYmxlX2RlbW8oKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTg0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzODUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNTcGVlY2hidWJibGUgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zcGVlY2hidWJibGUiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9yZWZmZWRFbGVtZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3JlZmZlZEVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3dhdmVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfd2F2ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21hbmlmZXN0ZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9tYW5pZmVzdGVkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21hbmlmZXN0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzU3BlZWNoYnViYmxlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdAogICAgICAgICAgfSldOwogICAgICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICAgICAgfSldOwogICAgICAgICAgX3dhdmVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9tYW5pZmVzdGVkX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgICAgICB9KV07CiAgICAgICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9yZWZmZWRFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlZmZlZEVsZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJlZmZlZEVsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVmZmVkRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJlZmZlZEVsZW1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NCh0aGlzLCBudWxsLCBfdGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODQodGhpcywgbnVsbCwgX3dhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2F2ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2F2ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53YXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoud2F2ZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZV9pbml0aWFsaXplcnMsIF93YXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9tYW5pZmVzdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1hbmlmZXN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1hbmlmZXN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFuaWZlc3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm1hbmlmZXN0ZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnN0YXR1cyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzU3BlZWNoYnViYmxlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTA7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIk92ZXJsYXkiXTsKICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhyZWZFbGVtZW50LCB0ZXh0QXJnKSB7CiAgICAgICAgICBjb25zdCB3aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgICAgYmx1cjogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3Qgc3BlZWNoYnViYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVlcy1zcGVlY2hidWJibGUiKTsKICAgICAgICAgIHNwZWVjaGJ1YmJsZS53aW5kb3dMYXllciA9IHdpbmRvd0xheWVyOwogICAgICAgICAgc3BlZWNoYnViYmxlLnJlZmZlZEVsZW1lbnQgPSByZWZFbGVtZW50OwogICAgICAgICAgc3BlZWNoYnViYmxlLnRleHQgPSB0ZXh0QXJnOwogICAgICAgICAgc3BlZWNoYnViYmxlLm1hbmlmZXN0ZWQgPSB0cnVlOwogICAgICAgICAgd2luZG93TGF5ZXIuYXBwZW5kQ2hpbGQoc3BlZWNoYnViYmxlKTsKICAgICAgICAgIHdpbmRvd0xheWVyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgICAgICB3aW5kb3dMYXllci5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3dPdmVybGF5Iikuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgICAgIHJldHVybiBzcGVlY2hidWJibGU7CiAgICAgICAgfQogICAgICAgICNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczg1KHRoaXMsIF9yZWZmZWRFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCByZWZmZWRFbGVtZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3JlZmZlZEVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJlZmZlZEVsZW1lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgdGV4dCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjd2F2ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg1KHRoaXMsIF93YXZlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgd2F2ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN3YXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB3YXZlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jd2F2ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg1KHRoaXMsIF9tYW5pZmVzdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgbWFuaWZlc3RlZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtYW5pZmVzdGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtYW5pZmVzdGVkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICAgICAgZ2V0IHN0YXR1cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICB3aW5kb3dMYXllciA9IF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuYXJyb3cgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmYiLCAiIzMzMyIpfTsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHRvcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5zcGVlY2hidWJibGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tYW5pZmVzdGVkID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGVlY2hidWJibGUiPgogICAgICAgICAgICAgICAgJHt0aGlzLndhdmUgPyBiMmA8c3BhbiBjbGFzcz0id2F2ZSI+8J+Rizwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmUodGhpcy5nZXRIdG1sKCkpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgaGFuZGxlQ2xpY2soKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBpZiAoIXRoaXMucmVmZmVkRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLnJlZmZlZEVsZW1lbnQgPSB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5tYW5pZmVzdGVkKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUG9zaXRpb24oKTsKICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluY29udGFpbmVyIikuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxldCBzcGVlY2hidWJibGU7CiAgICAgICAgICAgIHRoaXMucmVmZmVkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIHNwZWVjaGJ1YmJsZSA9IGF3YWl0IERlZXNTcGVlY2hidWJibGUyLmNyZWF0ZUFuZFNob3codGhpcy5yZWZmZWRFbGVtZW50LCB0aGlzLnRleHQpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5yZWZmZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCAoKSA9PiB7CiAgICAgICAgICAgICAgc3BlZWNoYnViYmxlLmRlc3Ryb3koKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZVBvc2l0aW9uKCkgewogICAgICAgICAgY29uc3QgcmVmRWxlbWVudCA9IHRoaXMucmVmZmVkRWxlbWVudDsKICAgICAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHJlZkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICAgIHRoaXMuc3R5bGUudG9wID0gYCR7Ym91bmRpbmdDbGllbnRSZWN0LnRvcCAtIDEzfXB4YDsKICAgICAgICAgIHRoaXMuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgcmVmRWxlbWVudC5jbGllbnRXaWR0aCArIDR9cHhgOwogICAgICAgICAgaWYgKGJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCA+IDI1MCkgewogICAgICAgICAgICB0aGlzLnN0eWxlLndpZHRoID0gYDI1MHB4YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZ2V0SHRtbCgpIHsKICAgICAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkaXN0X3RzX2V4cG9ydHMyOC5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpOwogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydG1hcmtkb3duLlNtYXJ0TWFya2Rvd24uZWFzeU1hcmtkb3duVG9IdG1sKG5vcm1hbGl6ZWQpOwogICAgICAgICAgcmV0dXJuIG84KHJlc3VsdCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHNob3coKSB7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5jb250YWluZXIiKS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgICAgdGhpcy53aW5kb3dMYXllci5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczg1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU3BlZWNoYnViYmxlMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtb3ZlcmxheS9kZWVzLXNwZWVjaGJ1YmJsZS9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3NwZWVjaGJ1YmJsZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1vdmVybGF5L2RlZXMtc3BlZWNoYnViYmxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zcGVlY2hidWJibGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy13aW5kb3dsYXllci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3dpbmRvd2xheWVyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy13aW5kb3dsYXllci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfd2luZG93bGF5ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfb3ZlcmxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51MigpOwogICAgaW5pdF9kZWVzX21vZGFsMigpOwogICAgaW5pdF9kZWVzX3NwZWVjaGJ1YmJsZTIoKTsKICAgIGluaXRfZGVlc193aW5kb3dsYXllcjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9JRXhlY3V0aW9uRW52aXJvbm1lbnQuanMKdmFyIGluaXRfSUV4ZWN1dGlvbkVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL0lFeGVjdXRpb25FbnZpcm9ubWVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMKdmFyIGluaXRfaW50ZXJmYWNlczUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9JRXhlY3V0aW9uRW52aXJvbm1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcwp2YXIgREVGQVVMVF9FRElUT1JfT1JJR0lOLCBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFLCBTRUFSQ0hfUEFSQU1fRVJST1IsIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiwgQlJPQURDQVNUX0NIQU5ORUxfTkFNRSwgU1RPUkFHRV9UT0tFTlNfTkFNRSwgU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUsIFNUT1JBR0VfUE9QVVBfTkFNRTsKdmFyIGluaXRfY29uc3RhbnRzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcyIoKSB7CiAgICBERUZBVUxUX0VESVRPUl9PUklHSU4gPSAiaHR0cHM6Ly9zdGFja2JsaXR6LmNvbSI7CiAgICBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFID0gImNvZGUiOwogICAgU0VBUkNIX1BBUkFNX0VSUk9SID0gImVycm9yIjsKICAgIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiA9ICJlcnJvcl9kZXNjcmlwdGlvbiI7CiAgICBCUk9BRENBU1RfQ0hBTk5FTF9OQU1FID0gIl9fd2NfYXBpX2JjX18iOwogICAgU1RPUkFHRV9UT0tFTlNfTkFNRSA9ICJfX3djX2FwaV90b2tlbnNfXyI7CiAgICBTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSA9ICJfX3djX2FwaV92ZXJpZmllcl9fIjsKICAgIFNUT1JBR0VfUE9QVVBfTkFNRSA9ICJfX3djX2FwaV9wb3B1cF9fIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMKdmFyIFR5cGVkRXZlbnRUYXJnZXQ7CnZhciBpbml0X1R5cGVkRXZlbnRUYXJnZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9UeXBlZEV2ZW50VGFyZ2V0LmpzIigpIHsKICAgIFR5cGVkRXZlbnRUYXJnZXQgPSBjbGFzcyB7CiAgICAgIF9idXMgPSBuZXcgRXZlbnRUYXJnZXQoKTsKICAgICAgbGlzdGVuKGxpc3RlbmVyMikgewogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRMaXN0ZW5lcihldmVudCkgewogICAgICAgICAgbGlzdGVuZXIyKGV2ZW50LmRhdGEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9idXMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHdyYXBwZWRMaXN0ZW5lcik7CiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuX2J1cy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgd3JhcHBlZExpc3RlbmVyKTsKICAgICAgfQogICAgICBmaXJlRXZlbnQoZGF0YTExKSB7CiAgICAgICAgdGhpcy5fYnVzLmRpc3BhdGNoRXZlbnQobmV3IE1lc3NhZ2VFdmVudCgibWVzc2FnZSIsIHsgZGF0YTogZGF0YTExIH0pKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Rva2Vucy5qcwpmdW5jdGlvbiBjbGVhclRva2Vuc0luU3RvcmFnZSgpIHsKICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX1RPS0VOU19OQU1FKTsKfQpmdW5jdGlvbiBhZGRBY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcihsaXN0ZW5lcjIpIHsKICByZXR1cm4gYWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXJzLmxpc3RlbihsaXN0ZW5lcjIpOwp9CmZ1bmN0aW9uIHJlYWRUb2tlbnNGcm9tU3RvcmFnZSgpIHsKICBjb25zdCBzZXJpYWxpemVkVG9rZW5zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9UT0tFTlNfTkFNRSk7CiAgaWYgKCFzZXJpYWxpemVkVG9rZW5zKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgdHJ5IHsKICAgIHJldHVybiBKU09OLnBhcnNlKHNlcmlhbGl6ZWRUb2tlbnMpOwogIH0gY2F0Y2ggewogICAgcmV0dXJuIG51bGw7CiAgfQp9CmZ1bmN0aW9uIHBlcnNpc3RUb2tlbnNJblN0b3JhZ2UodG9rZW5zKSB7CiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9UT0tFTlNfTkFNRSwgSlNPTi5zdHJpbmdpZnkodG9rZW5zKSk7Cn0KZnVuY3Rpb24gZ2V0RXhwaXJlc0Zyb21Ub2tlblJlc3BvbnNlKHsgY3JlYXRlZF9hdCwgZXhwaXJlc19pbiB9KSB7CiAgcmV0dXJuIChjcmVhdGVkX2F0ICsgZXhwaXJlc19pbikgKiAxZTM7Cn0KZnVuY3Rpb24gYXNzZXJ0VG9rZW5SZXNwb25zZSh0b2tlbikgewogIGlmICh0eXBlb2YgdG9rZW4gIT09ICJvYmplY3QiIHx8ICF0b2tlbikgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFRva2VuIFJlc3BvbnNlIik7CiAgfQogIGlmICh0eXBlb2YgdG9rZW4uYWNjZXNzX3Rva2VuICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgdG9rZW4ucmVmcmVzaF90b2tlbiAhPT0gInN0cmluZyIgfHwgdHlwZW9mIHRva2VuLmNyZWF0ZWRfYXQgIT09ICJudW1iZXIiIHx8IHR5cGVvZiB0b2tlbi5leHBpcmVzX2luICE9PSAibnVtYmVyIikgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFRva2VuIFJlc3BvbnNlIik7CiAgfQp9CmZ1bmN0aW9uIHdhaXQobXMpIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCBtcykpOwp9CmZ1bmN0aW9uIGZpcmVBY2Nlc3NUb2tlbkNoYW5nZWQoYWNjZXNzVG9rZW4pIHsKICBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMuZmlyZUV2ZW50KGFjY2Vzc1Rva2VuKTsKfQp2YXIgSUdOT1JFRF9FUlJPUiwgYWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXJzLCBUb2tlbnM7CnZhciBpbml0X3Rva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Rva2Vucy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czMoKTsKICAgIGluaXRfVHlwZWRFdmVudFRhcmdldCgpOwogICAgSUdOT1JFRF9FUlJPUiA9IG5ldyBFcnJvcigpOwogICAgSUdOT1JFRF9FUlJPUi5zdGFjayA9ICIiOwogICAgYWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IFR5cGVkRXZlbnRUYXJnZXQoKTsKICAgIFRva2VucyA9IGNsYXNzIF9Ub2tlbnMgewogICAgICBvcmlnaW47CiAgICAgIHJlZnJlc2g7CiAgICAgIGFjY2VzczsKICAgICAgZXhwaXJlczsKICAgICAgX3Jldm9rZWQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgcmVmcmVzaCwgYWNjZXNzLCBleHBpcmVzKSB7CiAgICAgICAgdGhpcy5vcmlnaW4gPSBvcmlnaW47CiAgICAgICAgdGhpcy5yZWZyZXNoID0gcmVmcmVzaDsKICAgICAgICB0aGlzLmFjY2VzcyA9IGFjY2VzczsKICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzOwogICAgICB9CiAgICAgIGFzeW5jIGFjdGl2YXRlKG9uRmFpbGVkUmVmcmVzaCkgewogICAgICAgIGlmICh0aGlzLl9yZXZva2VkLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRva2VuIHJldm9rZWQiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuZXhwaXJlcyA8IERhdGUubm93KCkpIHsKICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5fZmV0Y2hOZXdBY2Nlc3NUb2tlbigpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fc3luYygpOwogICAgICAgIHRoaXMuX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3Aob25GYWlsZWRSZWZyZXNoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBhc3luYyByZXZva2UoY2xpZW50SWQsIGlnbm9yZVJldm9rZUVycm9yKSB7CiAgICAgICAgdGhpcy5fcmV2b2tlZC5hYm9ydCgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMub3JpZ2lufS9vYXV0aC9yZXZva2VgLCB7CiAgICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0b2tlbjogdGhpcy5yZWZyZXNoLCB0b2tlbl90eXBlX2hpbnQ6ICJyZWZyZXNoX3Rva2VuIiwgY2xpZW50X2lkOiBjbGllbnRJZCB9KSwKICAgICAgICAgICAgbW9kZTogImNvcnMiCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9nb3V0YCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGlmICghaWdub3JlUmV2b2tlRXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsZWFyVG9rZW5zSW5TdG9yYWdlKCk7CiAgICAgIH0KICAgICAgc3RhdGljIGZyb21TdG9yYWdlKCkgewogICAgICAgIGNvbnN0IHNhdmVkVG9rZW5zID0gcmVhZFRva2Vuc0Zyb21TdG9yYWdlKCk7CiAgICAgICAgaWYgKCFzYXZlZFRva2VucykgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgX1Rva2VucyhzYXZlZFRva2Vucy5vcmlnaW4sIHNhdmVkVG9rZW5zLnJlZnJlc2gsIHNhdmVkVG9rZW5zLmFjY2Vzcywgc2F2ZWRUb2tlbnMuZXhwaXJlcyk7CiAgICAgIH0KICAgICAgc3RhdGljIGFzeW5jIGZyb21BdXRoQ29kZSh7IGVkaXRvck9yaWdpbjogZWRpdG9yT3JpZ2luMiwgY2xpZW50SWQsIGNvZGVWZXJpZmllciwgYXV0aENvZGUsIHJlZGlyZWN0VXJpIH0pIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2VkaXRvck9yaWdpbjJ9L29hdXRoL3Rva2VuYCwgewogICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIgogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoewogICAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLAogICAgICAgICAgICBjb2RlOiBhdXRoQ29kZSwKICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZVZlcmlmaWVyLAogICAgICAgICAgICBncmFudF90eXBlOiAiYXV0aG9yaXphdGlvbl9jb2RlIiwKICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaQogICAgICAgICAgfSksCiAgICAgICAgICBtb2RlOiAiY29ycyIKICAgICAgICB9KTsKICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCB0b2tlbjogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgYXNzZXJ0VG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICBjb25zdCB7IGFjY2Vzc190b2tlbjogYWNjZXNzLCByZWZyZXNoX3Rva2VuOiByZWZyZXNoIH0gPSB0b2tlblJlc3BvbnNlOwogICAgICAgIGNvbnN0IGV4cGlyZXMgPSBnZXRFeHBpcmVzRnJvbVRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgcmV0dXJuIG5ldyBfVG9rZW5zKGVkaXRvck9yaWdpbjIsIHJlZnJlc2gsIGFjY2VzcywgZXhwaXJlcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5vcmlnaW59L29hdXRoL3Rva2VuYCwgewogICAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIgogICAgICAgICAgICB9LAogICAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHsKICAgICAgICAgICAgICBncmFudF90eXBlOiAicmVmcmVzaF90b2tlbiIsCiAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBtb2RlOiAiY29ycyIsCiAgICAgICAgICAgIHNpZ25hbDogdGhpcy5fcmV2b2tlZC5zaWduYWwKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBJR05PUkVEX0VSUk9SOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgIGFzc2VydFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgICBjb25zdCB7IGFjY2Vzc190b2tlbjogYWNjZXNzLCByZWZyZXNoX3Rva2VuOiByZWZyZXNoIH0gPSB0b2tlblJlc3BvbnNlOwogICAgICAgICAgY29uc3QgZXhwaXJlcyA9IGdldEV4cGlyZXNGcm9tVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICAgIHRoaXMuYWNjZXNzID0gYWNjZXNzOwogICAgICAgICAgdGhpcy5leHBpcmVzID0gZXhwaXJlczsKICAgICAgICAgIHRoaXMucmVmcmVzaCA9IHJlZnJlc2g7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGNsZWFyVG9rZW5zSW5TdG9yYWdlKCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9zeW5jKCkgewogICAgICAgIHBlcnNpc3RUb2tlbnNJblN0b3JhZ2UodGhpcyk7CiAgICAgICAgZmlyZUFjY2Vzc1Rva2VuQ2hhbmdlZCh0aGlzLmFjY2Vzcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3N0YXJ0UmVmcmVzaFRva2Vuc0xvb3Aob25GYWlsZWRSZWZyZXNoKSB7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHRoaXMuZXhwaXJlcyAtIERhdGUubm93KCkgLSAxZTM7CiAgICAgICAgICBhd2FpdCB3YWl0KE1hdGgubWF4KGV4cGlyZXNJbiwgMWUzKSk7CiAgICAgICAgICBpZiAodGhpcy5fcmV2b2tlZC5zaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSkgewogICAgICAgICAgICBvbkZhaWxlZFJlZnJlc2goKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fc3luYygpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2lmcmFtZS11cmwuanMKdmFyIHBhcmFtcywgZWRpdG9yT3JpZ2luLCBpZnJhbWVTZXR0aW5nczsKdmFyIGluaXRfaWZyYW1lX3VybCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2lmcmFtZS11cmwuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMzKCk7CiAgICBwYXJhbXMgPSB7fTsKICAgIGVkaXRvck9yaWdpbiA9IG51bGw7CiAgICBpZnJhbWVTZXR0aW5ncyA9IHsKICAgICAgZ2V0IGVkaXRvck9yaWdpbigpIHsKICAgICAgICBpZiAoZWRpdG9yT3JpZ2luID09IG51bGwpIHsKICAgICAgICAgIGVkaXRvck9yaWdpbiA9IG5ldyBVUkwoZ2xvYmFsVGhpcy5XRUJDT05UQUlORVJfQVBJX0lGUkFNRV9VUkwgPz8gREVGQVVMVF9FRElUT1JfT1JJR0lOKS5vcmlnaW47CiAgICAgICAgfQogICAgICAgIHJldHVybiBlZGl0b3JPcmlnaW47CiAgICAgIH0sCiAgICAgIHNldCBlZGl0b3JPcmlnaW4obmV3T3JpZ2luKSB7CiAgICAgICAgZWRpdG9yT3JpZ2luID0gbmV3IFVSTChuZXdPcmlnaW4pLm9yaWdpbjsKICAgICAgfSwKICAgICAgc2V0UXVlcnlQYXJhbShrZXkyLCB2YWx1ZTIpIHsKICAgICAgICBwYXJhbXNba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0sCiAgICAgIGdldCB1cmwoKSB7CiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmVkaXRvck9yaWdpbik7CiAgICAgICAgdXJsLnBhdGhuYW1lID0gIi9oZWFkbGVzcyI7CiAgICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBwYXJhbXMpIHsKICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KHBhcmFtLCBwYXJhbXNbcGFyYW1dKTsKICAgICAgICB9CiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoInZlcnNpb24iLCAiMS42LjEiKTsKICAgICAgICByZXR1cm4gdXJsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29kZS5qcwphc3luYyBmdW5jdGlvbiBTMjU2KGlucHV0KSB7CiAgY29uc3QgYXNjaWkgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5wdXQpOwogIGNvbnN0IHNoYTI1NiA9IG5ldyBVaW50OEFycmF5KGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgYXNjaWkpKTsKICByZXR1cm4gYnRvYShzaGEyNTYucmVkdWNlKChiaW5hcnksIGJ5dGUpID0+IGJpbmFyeSArIFN0cmluZy5mcm9tQ29kZVBvaW50KGJ5dGUpLCAiIikpLnJlcGxhY2UoL1wrL2csICItIikucmVwbGFjZSgvXC8vZywgIl8iKS5yZXBsYWNlKC89KyQvLCAiIik7Cn0KZnVuY3Rpb24gbmV3Q29kZVZlcmlmaWVyKCkgewogIGNvbnN0IHJhbmRvbSA9IG5ldyBVaW50OEFycmF5KDk2KTsKICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhbmRvbSk7CiAgbGV0IGNvZGVWZXJpZmllciA9ICIiOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IDMyOyArK2kxMSkgewogICAgY29kZVZlcmlmaWVyICs9IG5leHRGb3VyQ2hhcnMocmFuZG9tWzMgKiBpMTEgKyAwXSwgcmFuZG9tWzMgKiBpMTEgKyAxXSwgcmFuZG9tWzMgKiBpMTEgKyAyXSk7CiAgfQogIHJldHVybiBjb2RlVmVyaWZpZXI7Cn0KZnVuY3Rpb24gbmV4dEZvdXJDaGFycyhieXRlMSwgYnl0ZTIsIGJ5dGUzKSB7CiAgY29uc3QgY2hhcjEgPSBieXRlMSA+PiAyOwogIGNvbnN0IGNoYXIyID0gKGJ5dGUxICYgMykgPDwgNCB8IGJ5dGUyID4+IDQ7CiAgY29uc3QgY2hhcjMgPSBieXRlMiAmIDE1IHwgKGJ5dGUzICYgMTkyKSA+PiAyOwogIGNvbnN0IGNoYXI0ID0gYnl0ZTMgJiA2MzsKICByZXR1cm4gW2NoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0XS5tYXAodW5yZXNlcnZlZENoYXJhY3RlcnMpLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHVucmVzZXJ2ZWRDaGFyYWN0ZXJzKGNvZGU0KSB7CiAgbGV0IG9mZnNldDsKICBpZiAoY29kZTQgPCAyNikgewogICAgb2Zmc2V0ID0gY29kZTQgKyA2NTsKICB9IGVsc2UgaWYgKGNvZGU0IDwgNTIpIHsKICAgIG9mZnNldCA9IGNvZGU0IC0gMjYgKyA5NzsKICB9IGVsc2UgaWYgKGNvZGU0IDwgNjIpIHsKICAgIG9mZnNldCA9IGNvZGU0IC0gNTIgKyA0ODsKICB9IGVsc2UgewogICAgb2Zmc2V0ID0gY29kZTQgPT09IDYyID8gMzAgOiA0NTsKICB9CiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUob2Zmc2V0KTsKfQp2YXIgaW5pdF9jb2RlNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvZGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvcmVzZXQtcHJvbWlzZS5qcwpmdW5jdGlvbiByZXNldHRhYmxlUHJvbWlzZSgpIHsKICBsZXQgcmVzb2x2ZTI7CiAgbGV0IHByb21pc2U7CiAgZnVuY3Rpb24gcmVzZXQoKSB7CiAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlKSA9PiByZXNvbHZlMiA9IF9yZXNvbHZlKTsKICB9CiAgcmVzZXQoKTsKICByZXR1cm4gewogICAgZ2V0IHByb21pc2UoKSB7CiAgICAgIHJldHVybiBwcm9taXNlOwogICAgfSwKICAgIHJlc29sdmUodmFsdWUyKSB7CiAgICAgIHJldHVybiByZXNvbHZlMih2YWx1ZTIpOwogICAgfSwKICAgIHJlc2V0CiAgfTsKfQp2YXIgaW5pdF9yZXNldF9wcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvcmVzZXQtcHJvbWlzZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9hdXRoLXN0YXRlLmpzCmZ1bmN0aW9uIGJyb2FkY2FzdE1lc3NhZ2UobWVzc2FnZTIpIHsKICBpZiAoIWF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsKSB7CiAgICByZXR1cm47CiAgfQogIGF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2UyKTsKICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9QT1BVUF9OQU1FKSA9PT0gInRydWUiICYmIG1lc3NhZ2UyLnR5cGUgIT09ICJhdXRoLWxvZ291dCIpIHsKICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfUE9QVVBfTkFNRSk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgd2luZG93LmNsb3NlKCk7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gb25GYWlsZWRUb2tlblJlZnJlc2goKSB7CiAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1sb2dvdXQiIH0pOwp9CmZ1bmN0aW9uIGRlZmF1bHRSZWRpcmVjdFVyaSgpIHsKICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7Cn0KYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPQXV0aFJlcXVlc3QoKSB7CiAgY29uc3QgY29kZVZlcmlmaWVyID0gbmV3Q29kZVZlcmlmaWVyKCk7CiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUsIGNvZGVWZXJpZmllcik7CiAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGF3YWl0IFMyNTYoY29kZVZlcmlmaWVyKTsKICBjb25zdCB1cmwgPSBuZXcgVVJMKCIvb2F1dGgvYXV0aG9yaXplIiwgYXV0aFN0YXRlLmVkaXRvck9yaWdpbik7CiAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IHVybDsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwgImNvZGUiKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJjbGllbnRfaWQiLCBhdXRoU3RhdGUuY2xpZW50SWQpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoInJlZGlyZWN0X3VyaSIsIGRlZmF1bHRSZWRpcmVjdFVyaSgpKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsIGF1dGhTdGF0ZS5vYXV0aFNjb3BlKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsIGNvZGVDaGFsbGVuZ2UpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsICJTMjU2Iik7CiAgcmV0dXJuIHVybC50b1N0cmluZygpOwp9CmZ1bmN0aW9uIGFzc2VydEF1dGhUb2tlbnModG9rZW5zKSB7CiAgaWYgKCF0b2tlbnMpIHsKICAgIHRocm93IG5ldyBFcnJvcigiT29wcyEgVG9rZW5zIGlzIG5vdCBkZWZpbmVkIHdoZW4gaXQgYWx3YXlzIHNob3VsZCBiZS4iKTsKICB9Cn0KdmFyIGF1dGhTdGF0ZSwgYXV0aEZhaWxlZExpc3RlbmVycywgbG9nZ2VkT3V0TGlzdGVuZXJzLCBhdXRoOwp2YXIgaW5pdF9hdXRoX3N0YXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvYXV0aC1zdGF0ZS5qcyIoKSB7CiAgICBpbml0X3Rva2VucygpOwogICAgaW5pdF9jb25zdGFudHMzKCk7CiAgICBpbml0X2lmcmFtZV91cmwoKTsKICAgIGluaXRfY29kZTUoKTsKICAgIGluaXRfcmVzZXRfcHJvbWlzZSgpOwogICAgaW5pdF9UeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBhdXRoU3RhdGUgPSB7CiAgICAgIGluaXRpYWxpemVkOiBmYWxzZSwKICAgICAgYm9vdENhbGxlZDogZmFsc2UsCiAgICAgIGF1dGhDb21wbGV0ZTogcmVzZXR0YWJsZVByb21pc2UoKSwKICAgICAgY2xpZW50SWQ6ICIiLAogICAgICBvYXV0aFNjb3BlOiAiIiwKICAgICAgYnJvYWRjYXN0Q2hhbm5lbDogbnVsbCwKICAgICAgZ2V0IGVkaXRvck9yaWdpbigpIHsKICAgICAgICByZXR1cm4gaWZyYW1lU2V0dGluZ3MuZWRpdG9yT3JpZ2luOwogICAgICB9LAogICAgICB0b2tlbnM6IG51bGwKICAgIH07CiAgICBhdXRoRmFpbGVkTGlzdGVuZXJzID0gbmV3IFR5cGVkRXZlbnRUYXJnZXQoKTsKICAgIGxvZ2dlZE91dExpc3RlbmVycyA9IG5ldyBUeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBhdXRoID0gewogICAgICBpbml0KHsgZWRpdG9yT3JpZ2luOiBlZGl0b3JPcmlnaW4yLCBjbGllbnRJZCwgc2NvcGUgfSkgewogICAgICAgIGlmIChhdXRoU3RhdGUuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5pdCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSIpOwogICAgICAgIH0KICAgICAgICBsZXQgZW50ZXJwcmlzZSA9IHRydWU7CiAgICAgICAgaWYgKGVudGVycHJpc2UgJiYgYXV0aFN0YXRlLmJvb3RDYWxsZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYGF1dGguaW5pdGAgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGBXZWJDb250YWluZXIuYm9vdGAiKTsKICAgICAgICB9CiAgICAgICAgYXV0aFN0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICBhdXRoU3RhdGUudG9rZW5zID0gVG9rZW5zLmZyb21TdG9yYWdlKCk7CiAgICAgICAgYXV0aFN0YXRlLmNsaWVudElkID0gY2xpZW50SWQ7CiAgICAgICAgYXV0aFN0YXRlLm9hdXRoU2NvcGUgPSBzY29wZTsKICAgICAgICBhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKEJST0FEQ0FTVF9DSEFOTkVMX05BTUUpOwogICAgICAgIGlmcmFtZVNldHRpbmdzLnNldFF1ZXJ5UGFyYW0oImNsaWVudF9pZCIsIGNsaWVudElkKTsKICAgICAgICBpZiAoZWRpdG9yT3JpZ2luMikgewogICAgICAgICAgaWZyYW1lU2V0dGluZ3MuZWRpdG9yT3JpZ2luID0gbmV3IFVSTChlZGl0b3JPcmlnaW4yKS5vcmlnaW47CiAgICAgICAgfQogICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5saXN0ZW4oKCkgPT4gYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNldCgpKTsKICAgICAgICBhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25DaGFubmVsTWVzc2FnZSk7CiAgICAgICAgYXN5bmMgZnVuY3Rpb24gb25DaGFubmVsTWVzc2FnZShldmVudCkgewogICAgICAgICAgY29uc3QgdHlwZWRFdmVudCA9IGV2ZW50LmRhdGE7CiAgICAgICAgICBpZiAodHlwZWRFdmVudC50eXBlID09PSAiYXV0aC1jb21wbGV0ZSIpIHsKICAgICAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IFRva2Vucy5mcm9tU3RvcmFnZSgpOwogICAgICAgICAgICBhd2FpdCBhdXRoU3RhdGUudG9rZW5zLmFjdGl2YXRlKG9uRmFpbGVkVG9rZW5SZWZyZXNoKTsKICAgICAgICAgICAgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlZEV2ZW50LnR5cGUgPT09ICJhdXRoLWZhaWxlZCIpIHsKICAgICAgICAgICAgYXV0aEZhaWxlZExpc3RlbmVycy5maXJlRXZlbnQodHlwZWRFdmVudCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlZEV2ZW50LnR5cGUgPT09ICJhdXRoLWxvZ291dCIpIHsKICAgICAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhdXRoU3RhdGUudG9rZW5zKSB7CiAgICAgICAgICBjb25zdCB0b2tlbnMgPSBhdXRoU3RhdGUudG9rZW5zOwogICAgICAgICAgaWYgKHRva2Vucy5vcmlnaW4gPT09IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4pIHsKICAgICAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdG9rZW5zLmFjdGl2YXRlKG9uRmFpbGVkVG9rZW5SZWZyZXNoKTsKICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGlmIChhdXRoU3RhdGUudG9rZW5zICE9PSB0b2tlbnMpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc29sdmUoKTsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAiYXV0aG9yaXplZCIgfTsKICAgICAgICAgIH0KICAgICAgICAgIGNsZWFyVG9rZW5zSW5TdG9yYWdlKCk7CiAgICAgICAgICBhdXRoU3RhdGUudG9rZW5zID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgbG9jYXRpb25VUkwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICAgICAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gbG9jYXRpb25VUkw7CiAgICAgICAgY29uc3QgdXBkYXRlVVJMID0gKCkgPT4gd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgbG9jYXRpb25VUkwpOwogICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzKFNFQVJDSF9QQVJBTV9FUlJPUikpIHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gc2VhcmNoUGFyYW1zLmdldChTRUFSQ0hfUEFSQU1fRVJST1IpOwogICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzZWFyY2hQYXJhbXMuZ2V0KFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTik7CiAgICAgICAgICBzZWFyY2hQYXJhbXMuZGVsZXRlKFNFQVJDSF9QQVJBTV9FUlJPUik7CiAgICAgICAgICBzZWFyY2hQYXJhbXMuZGVsZXRlKFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTik7CiAgICAgICAgICB1cGRhdGVVUkwoKTsKICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1mYWlsZWQiLCBlcnJvciwgZGVzY3JpcHRpb24gfSk7CiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJhdXRoLWZhaWxlZCIsIGVycm9yLCBkZXNjcmlwdGlvbiB9OwogICAgICAgIH0KICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhcyhTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFKSkgewogICAgICAgICAgY29uc3QgYXV0aENvZGUgPSBzZWFyY2hQYXJhbXMuZ2V0KFNFQVJDSF9QQVJBTV9BVVRIX0NPREUpOwogICAgICAgICAgY29uc3QgZWRpdG9yT3JpZ2luMyA9IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW47CiAgICAgICAgICBzZWFyY2hQYXJhbXMuZGVsZXRlKFNFQVJDSF9QQVJBTV9BVVRIX0NPREUpOwogICAgICAgICAgdXBkYXRlVVJMKCk7CiAgICAgICAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSk7CiAgICAgICAgICBpZiAoIWNvZGVWZXJpZmllcikgewogICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJuZWVkLWF1dGgiIH07CiAgICAgICAgICB9CiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSk7CiAgICAgICAgICBUb2tlbnMuZnJvbUF1dGhDb2RlKHsKICAgICAgICAgICAgZWRpdG9yT3JpZ2luOiBlZGl0b3JPcmlnaW4zLAogICAgICAgICAgICBjbGllbnRJZDogYXV0aFN0YXRlLmNsaWVudElkLAogICAgICAgICAgICBhdXRoQ29kZSwKICAgICAgICAgICAgY29kZVZlcmlmaWVyLAogICAgICAgICAgICByZWRpcmVjdFVyaTogZGVmYXVsdFJlZGlyZWN0VXJpKCkKICAgICAgICAgIH0pLnRoZW4oYXN5bmMgKHRva2VucykgPT4gewogICAgICAgICAgICBhdXRoU3RhdGUudG9rZW5zID0gdG9rZW5zOwogICAgICAgICAgICBhc3NlcnRBdXRoVG9rZW5zKGF1dGhTdGF0ZS50b2tlbnMpOwogICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXV0aFN0YXRlLnRva2Vucy5hY3RpdmF0ZShvbkZhaWxlZFRva2VuUmVmcmVzaCk7CiAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzb2x2ZSgpOwogICAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtY29tcGxldGUiIH0pOwogICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1sb2dvdXQiIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJhdXRob3JpemVkIiB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJuZWVkLWF1dGgiIH07CiAgICAgIH0sCiAgICAgIGFzeW5jIHN0YXJ0QXV0aEZsb3coeyBwb3B1cCB9ID0ge30pIHsKICAgICAgICBpZiAoIWF1dGhTdGF0ZS5pbml0aWFsaXplZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhdXRoLmluaXQgbXVzdCBiZSBjYWxsZWQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcHVwKSB7CiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX1BPUFVQX05BTUUsICJ0cnVlIik7CiAgICAgICAgICBjb25zdCBoZWlnaHQgPSA1MDA7CiAgICAgICAgICBjb25zdCB3aWR0aCA9IDYyMDsKICAgICAgICAgIGNvbnN0IGxlZnQgPSB3aW5kb3cuc2NyZWVuTGVmdCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIHdpZHRoKSAvIDI7CiAgICAgICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2NyZWVuVG9wICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyOwogICAgICAgICAgd2luZG93Lm9wZW4oYXdhaXQgZ2VuZXJhdGVPQXV0aFJlcXVlc3QoKSwgIl9ibGFuayIsIGBwb3B1cCx3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9YCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYXdhaXQgZ2VuZXJhdGVPQXV0aFJlcXVlc3QoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFzeW5jIGxvZ291dCh7IGlnbm9yZVJldm9rZUVycm9yIH0gPSB7fSkgewogICAgICAgIGF3YWl0IGF1dGhTdGF0ZS50b2tlbnM/LnJldm9rZShhdXRoU3RhdGUuY2xpZW50SWQsIGlnbm9yZVJldm9rZUVycm9yID8/IGZhbHNlKTsKICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWxvZ291dCIgfSk7CiAgICAgIH0sCiAgICAgIGxvZ2dlZEluKCkgewogICAgICAgIHJldHVybiBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnByb21pc2U7CiAgICAgIH0sCiAgICAgIG9uKGV2ZW50LCBsaXN0ZW5lcjIpIHsKICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7CiAgICAgICAgICBjYXNlICJhdXRoLWZhaWxlZCI6IHsKICAgICAgICAgICAgcmV0dXJuIGF1dGhGYWlsZWRMaXN0ZW5lcnMubGlzdGVuKGxpc3RlbmVyMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlICJsb2dnZWQtb3V0IjogewogICAgICAgICAgICByZXR1cm4gbG9nZ2VkT3V0TGlzdGVuZXJzLmxpc3RlbihsaXN0ZW5lcjIpOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHR5cGUgJyR7ZXZlbnR9Jy5gKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9wcmV2aWV3LW1lc3NhZ2UtdHlwZXMuanMKdmFyIFByZXZpZXdNZXNzYWdlVHlwZTsKdmFyIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvcHJldmlldy1tZXNzYWdlLXR5cGVzLmpzIigpIHsKICAgIChmdW5jdGlvbihQcmV2aWV3TWVzc2FnZVR5cGUyKSB7CiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZTJbIlVuY2F1Z2h0RXhjZXB0aW9uIl0gPSAiUFJFVklFV19VTkNBVUdIVF9FWENFUFRJT04iOwogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUyWyJVbmhhbmRsZWRSZWplY3Rpb24iXSA9ICJQUkVWSUVXX1VOSEFORExFRF9SRUpFQ1RJT04iOwogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUyWyJDb25zb2xlRXJyb3IiXSA9ICJQUkVWSUVXX0NPTlNPTEVfRVJST1IiOwogICAgfSkoUHJldmlld01lc3NhZ2VUeXBlIHx8IChQcmV2aWV3TWVzc2FnZVR5cGUgPSB7fSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdmVuZG9yL2luZGV4LmpzCmZ1bmN0aW9uIGV4cG9zZShvYmosIGVwID0gc2VsZikgewogIGVwLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbiBjYWxsYmFjayhldikgewogICAgaWYgKCFldiB8fCAhZXYuZGF0YSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB7IGlkLCB0eXBlOiB0eXBlNSwgcGF0aDogcGF0aDIgfSA9IE9iamVjdC5hc3NpZ24oeyBwYXRoOiBbXSB9LCBldi5kYXRhKTsKICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IChldi5kYXRhLmFyZ3VtZW50TGlzdCB8fCBbXSkubWFwKGZyb21XaXJlVmFsdWUpOwogICAgbGV0IHJldHVyblZhbHVlOwogICAgdHJ5IHsKICAgICAgY29uc3QgcGFyZW50ID0gcGF0aDIuc2xpY2UoMCwgLTEpLnJlZHVjZSgob2JqMiwgcHJvcCkgPT4gb2JqMltwcm9wXSwgb2JqKTsKICAgICAgY29uc3QgcmF3VmFsdWUgPSBwYXRoMi5yZWR1Y2UoKG9iajIsIHByb3ApID0+IG9iajJbcHJvcF0sIG9iaik7CiAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmF3VmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIHBhcmVudFtwYXRoMi5zbGljZSgtMSlbMF1dID0gZnJvbVdpcmVWYWx1ZShldi5kYXRhLnZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgewogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJhd1ZhbHVlLmFwcGx5KHBhcmVudCwgYXJndW1lbnRMaXN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHsKICAgICAgICAgICAgY29uc3QgdmFsdWUyID0gbmV3IHJhd1ZhbHVlKC4uLmFyZ3VtZW50TGlzdCk7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gcHJveHkodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIHsKICAgICAgICAgICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwogICAgICAgICAgICBleHBvc2Uob2JqLCBwb3J0Mik7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gdHJhbnNmZXIocG9ydDEsIFtwb3J0MV0pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgewogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGNhdGNoICh2YWx1ZTIpIHsKICAgICAgcmV0dXJuVmFsdWUgPSB7IHZhbHVlOiB2YWx1ZTIsIFt0aHJvd01hcmtlcl06IDAgfTsKICAgIH0KICAgIFByb21pc2UucmVzb2x2ZShyZXR1cm5WYWx1ZSkuY2F0Y2goKHZhbHVlMikgPT4gewogICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUyLCBbdGhyb3dNYXJrZXJdOiAwIH07CiAgICB9KS50aGVuKChyZXR1cm5WYWx1ZTIpID0+IHsKICAgICAgY29uc3QgW3dpcmVWYWx1ZSwgdHJhbnNmZXJhYmxlc10gPSB0b1dpcmVWYWx1ZShyZXR1cm5WYWx1ZTIpOwogICAgICBlcC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdpcmVWYWx1ZSksIHsgaWQgfSksIHRyYW5zZmVyYWJsZXMpOwogICAgICBpZiAodHlwZTUgPT09IDUpIHsKICAgICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgY2FsbGJhY2spOwogICAgICAgIGNsb3NlRW5kUG9pbnQoZXApOwogICAgICB9CiAgICB9KTsKICB9KTsKICBpZiAoZXAuc3RhcnQpIHsKICAgIGVwLnN0YXJ0KCk7CiAgfQp9CmZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQoZW5kcG9pbnQpIHsKICByZXR1cm4gZW5kcG9pbnQuY29uc3RydWN0b3IubmFtZSA9PT0gIk1lc3NhZ2VQb3J0IjsKfQpmdW5jdGlvbiBjbG9zZUVuZFBvaW50KGVuZHBvaW50KSB7CiAgaWYgKGlzTWVzc2FnZVBvcnQoZW5kcG9pbnQpKQogICAgZW5kcG9pbnQuY2xvc2UoKTsKfQpmdW5jdGlvbiB3cmFwNChlcCwgdGFyZ2V0KSB7CiAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBbXSwgdGFyZ2V0KTsKfQpmdW5jdGlvbiB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1JlbGVhc2VkKSB7CiAgaWYgKGlzUmVsZWFzZWQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIik7CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZVByb3h5KGVwLCBwYXRoMiA9IFtdLCB0YXJnZXQgPSBmdW5jdGlvbigpIHsKfSkgewogIGxldCBpc1Byb3h5UmVsZWFzZWQgPSBmYWxzZTsKICBjb25zdCBwcm94eTIgPSBuZXcgUHJveHkodGFyZ2V0LCB7CiAgICBnZXQoX3RhcmdldCwgcHJvcCkgewogICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpOwogICAgICBpZiAocHJvcCA9PT0gcmVsZWFzZVByb3h5KSB7CiAgICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgICAgIHR5cGU6IDUsCiAgICAgICAgICAgIHBhdGg6IHBhdGgyLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpCiAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgY2xvc2VFbmRQb2ludChlcCk7CiAgICAgICAgICAgIGlzUHJveHlSZWxlYXNlZCA9IHRydWU7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGlmIChwcm9wID09PSAidGhlbiIpIHsKICAgICAgICBpZiAocGF0aDIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4geyB0aGVuOiAoKSA9PiBwcm94eTIgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcjExID0gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgICAgdHlwZTogMCwKICAgICAgICAgIHBhdGg6IHBhdGgyLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpCiAgICAgICAgfSkudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgICAgICByZXR1cm4gcjExLnRoZW4uYmluZChyMTEpOwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVQcm94eShlcCwgWy4uLnBhdGgyLCBwcm9wXSk7CiAgICB9LAogICAgc2V0KF90YXJnZXQsIHByb3AsIHJhd1ZhbHVlKSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGNvbnN0IFt2YWx1ZTIsIHRyYW5zZmVyYWJsZXNdID0gdG9XaXJlVmFsdWUocmF3VmFsdWUpOwogICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgIHR5cGU6IDEsCiAgICAgICAgcGF0aDogWy4uLnBhdGgyLCBwcm9wXS5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKSwKICAgICAgICB2YWx1ZTogdmFsdWUyCiAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICB9LAogICAgYXBwbHkoX3RhcmdldCwgX3RoaXNBcmcsIHJhd0FyZ3VtZW50TGlzdCkgewogICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpOwogICAgICBjb25zdCBsYXN0MyA9IHBhdGgyW3BhdGgyLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdDMgPT09IGNyZWF0ZUVuZHBvaW50KSB7CiAgICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICAgIHR5cGU6IDQKICAgICAgICB9KS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgICB9CiAgICAgIGlmIChsYXN0MyA9PT0gImJpbmQiKSB7CiAgICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBwYXRoMi5zbGljZSgwLCAtMSkpOwogICAgICB9CiAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpOwogICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgIHR5cGU6IDIsCiAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSksCiAgICAgICAgYXJndW1lbnRMaXN0CiAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICB9LAogICAgY29uc3RydWN0KF90YXJnZXQsIHJhd0FyZ3VtZW50TGlzdCkgewogICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpOwogICAgICBjb25zdCBbYXJndW1lbnRMaXN0LCB0cmFuc2ZlcmFibGVzXSA9IHByb2Nlc3NBcmd1bWVudHMocmF3QXJndW1lbnRMaXN0KTsKICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICB0eXBlOiAzLAogICAgICAgIHBhdGg6IHBhdGgyLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpLAogICAgICAgIGFyZ3VtZW50TGlzdAogICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgfQogIH0pOwogIHJldHVybiBwcm94eTI7Cn0KZnVuY3Rpb24gbXlGbGF0KGFycikgewogIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpOwp9CmZ1bmN0aW9uIHByb2Nlc3NBcmd1bWVudHMoYXJndW1lbnRMaXN0KSB7CiAgY29uc3QgcHJvY2Vzc2VkID0gYXJndW1lbnRMaXN0Lm1hcCh0b1dpcmVWYWx1ZSk7CiAgcmV0dXJuIFtwcm9jZXNzZWQubWFwKCh2NSkgPT4gdjVbMF0pLCBteUZsYXQocHJvY2Vzc2VkLm1hcCgodjUpID0+IHY1WzFdKSldOwp9CmZ1bmN0aW9uIHRyYW5zZmVyKG9iaiwgdHJhbnNmZXJzKSB7CiAgdHJhbnNmZXJDYWNoZS5zZXQob2JqLCB0cmFuc2ZlcnMpOwogIHJldHVybiBvYmo7Cn0KZnVuY3Rpb24gcHJveHkob2JqKSB7CiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob2JqLCB7IFtwcm94eU1hcmtlcl06IHRydWUgfSk7Cn0KZnVuY3Rpb24gd2luZG93RW5kcG9pbnQodzQsIGNvbnRleHQyID0gc2VsZiwgdGFyZ2V0T3JpZ2luID0gIioiKSB7CiAgcmV0dXJuIHsKICAgIHBvc3RNZXNzYWdlOiAobXNnLCB0cmFuc2ZlcmFibGVzKSA9PiB3NC5wb3N0TWVzc2FnZShtc2csIHRhcmdldE9yaWdpbiwgdHJhbnNmZXJhYmxlcyksCiAgICBhZGRFdmVudExpc3RlbmVyOiBjb250ZXh0Mi5hZGRFdmVudExpc3RlbmVyLmJpbmQoY29udGV4dDIpLAogICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogY29udGV4dDIucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKGNvbnRleHQyKQogIH07Cn0KZnVuY3Rpb24gdG9XaXJlVmFsdWUodmFsdWUyKSB7CiAgZm9yIChjb25zdCBbbmFtZSwgaGFuZGxlcjJdIG9mIHRyYW5zZmVySGFuZGxlcnMpIHsKICAgIGlmIChoYW5kbGVyMi5jYW5IYW5kbGUodmFsdWUyKSkgewogICAgICBjb25zdCBbc2VyaWFsaXplZFZhbHVlLCB0cmFuc2ZlcmFibGVzXSA9IGhhbmRsZXIyLnNlcmlhbGl6ZSh2YWx1ZTIpOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6IDMsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZWRWYWx1ZQogICAgICAgIH0sCiAgICAgICAgdHJhbnNmZXJhYmxlcwogICAgICBdOwogICAgfQogIH0KICByZXR1cm4gWwogICAgewogICAgICB0eXBlOiAwLAogICAgICB2YWx1ZTogdmFsdWUyCiAgICB9LAogICAgdHJhbnNmZXJDYWNoZS5nZXQodmFsdWUyKSB8fCBbXQogIF07Cn0KZnVuY3Rpb24gZnJvbVdpcmVWYWx1ZSh2YWx1ZTIpIHsKICBzd2l0Y2ggKHZhbHVlMi50eXBlKSB7CiAgICBjYXNlIDM6CiAgICAgIHJldHVybiB0cmFuc2ZlckhhbmRsZXJzLmdldCh2YWx1ZTIubmFtZSkuZGVzZXJpYWxpemUodmFsdWUyLnZhbHVlKTsKICAgIGNhc2UgMDoKICAgICAgcmV0dXJuIHZhbHVlMi52YWx1ZTsKICB9Cn0KZnVuY3Rpb24gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgbXNnLCB0cmFuc2ZlcnMpIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICBjb25zdCBpZCA9IGdlbmVyYXRlVVVJRCgpOwogICAgZXAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGw2KGV2KSB7CiAgICAgIGlmICghZXYuZGF0YSB8fCAhZXYuZGF0YS5pZCB8fCBldi5kYXRhLmlkICE9PSBpZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgbDYpOwogICAgICByZXNvbHZlMihldi5kYXRhKTsKICAgIH0pOwogICAgaWYgKGVwLnN0YXJ0KSB7CiAgICAgIGVwLnN0YXJ0KCk7CiAgICB9CiAgICBlcC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHsgaWQgfSwgbXNnKSwgdHJhbnNmZXJzKTsKICB9KTsKfQpmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKSB7CiAgcmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIik7Cn0KdmFyIF9fZGVmUHJvcDIsIF9fZXhwb3J0MiwgY29tbGlua19leHBvcnRzLCBwcm94eU1hcmtlciwgY3JlYXRlRW5kcG9pbnQsIHJlbGVhc2VQcm94eSwgdGhyb3dNYXJrZXIsIGlzT2JqZWN0MywgcHJveHlUcmFuc2ZlckhhbmRsZXIsIHRocm93VHJhbnNmZXJIYW5kbGVyLCB0cmFuc2ZlckhhbmRsZXJzLCB0cmFuc2ZlckNhY2hlOwp2YXIgaW5pdF92ZW5kb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC92ZW5kb3IvaW5kZXguanMiKCkgewogICAgX19kZWZQcm9wMiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgIF9fZXhwb3J0MiA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICAgICAgZm9yICh2YXIgbmFtZSBpbiBhbGwzKQogICAgICAgIF9fZGVmUHJvcDIodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKICAgIH07CiAgICBjb21saW5rX2V4cG9ydHMgPSB7fTsKICAgIF9fZXhwb3J0Mihjb21saW5rX2V4cG9ydHMsIHsKICAgICAgY3JlYXRlRW5kcG9pbnQ6ICgpID0+IGNyZWF0ZUVuZHBvaW50LAogICAgICBleHBvc2U6ICgpID0+IGV4cG9zZSwKICAgICAgcHJveHk6ICgpID0+IHByb3h5LAogICAgICBwcm94eU1hcmtlcjogKCkgPT4gcHJveHlNYXJrZXIsCiAgICAgIHJlbGVhc2VQcm94eTogKCkgPT4gcmVsZWFzZVByb3h5LAogICAgICB0cmFuc2ZlcjogKCkgPT4gdHJhbnNmZXIsCiAgICAgIHRyYW5zZmVySGFuZGxlcnM6ICgpID0+IHRyYW5zZmVySGFuZGxlcnMsCiAgICAgIHdpbmRvd0VuZHBvaW50OiAoKSA9PiB3aW5kb3dFbmRwb2ludCwKICAgICAgd3JhcDogKCkgPT4gd3JhcDQKICAgIH0pOwogICAgcHJveHlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLnByb3h5Iik7CiAgICBjcmVhdGVFbmRwb2ludCA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKTsKICAgIHJlbGVhc2VQcm94eSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5Iik7CiAgICB0aHJvd01hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIkNvbWxpbmsudGhyb3duIik7CiAgICBpc09iamVjdDMgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAib2JqZWN0IiAmJiB2YWwgIT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gImZ1bmN0aW9uIjsKICAgIHByb3h5VHJhbnNmZXJIYW5kbGVyID0gewogICAgICBjYW5IYW5kbGU6ICh2YWwpID0+IGlzT2JqZWN0Myh2YWwpICYmIHZhbFtwcm94eU1hcmtlcl0sCiAgICAgIHNlcmlhbGl6ZShvYmopIHsKICAgICAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CiAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDEpOwogICAgICAgIHJldHVybiBbcG9ydDIsIFtwb3J0Ml1dOwogICAgICB9LAogICAgICBkZXNlcmlhbGl6ZShwb3J0KSB7CiAgICAgICAgcG9ydC5zdGFydCgpOwogICAgICAgIHJldHVybiB3cmFwNChwb3J0KTsKICAgICAgfQogICAgfTsKICAgIHRocm93VHJhbnNmZXJIYW5kbGVyID0gewogICAgICBjYW5IYW5kbGU6ICh2YWx1ZTIpID0+IGlzT2JqZWN0Myh2YWx1ZTIpICYmIHRocm93TWFya2VyIGluIHZhbHVlMiwKICAgICAgc2VyaWFsaXplKHsgdmFsdWU6IHZhbHVlMiB9KSB7CiAgICAgICAgbGV0IHNlcmlhbGl6ZWQ7CiAgICAgICAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgICBzZXJpYWxpemVkID0gewogICAgICAgICAgICBpc0Vycm9yOiB0cnVlLAogICAgICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAgIG1lc3NhZ2U6IHZhbHVlMi5tZXNzYWdlLAogICAgICAgICAgICAgIG5hbWU6IHZhbHVlMi5uYW1lLAogICAgICAgICAgICAgIHN0YWNrOiB2YWx1ZTIuc3RhY2sKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2VyaWFsaXplZCA9IHsgaXNFcnJvcjogZmFsc2UsIHZhbHVlOiB2YWx1ZTIgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFtzZXJpYWxpemVkLCBbXV07CiAgICAgIH0sCiAgICAgIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpIHsKICAgICAgICBpZiAoc2VyaWFsaXplZC5pc0Vycm9yKSB7CiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihzZXJpYWxpemVkLnZhbHVlLm1lc3NhZ2UpLCBzZXJpYWxpemVkLnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgc2VyaWFsaXplZC52YWx1ZTsKICAgICAgfQogICAgfTsKICAgIHRyYW5zZmVySGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbCiAgICAgIFsicHJveHkiLCBwcm94eVRyYW5zZmVySGFuZGxlcl0sCiAgICAgIFsidGhyb3ciLCB0aHJvd1RyYW5zZmVySGFuZGxlcl0KICAgIF0pOwogICAgdHJhbnNmZXJDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvcmVsb2FkLXByZXZpZXcuanMKdmFyIGluaXRfcmVsb2FkX3ByZXZpZXcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9yZWxvYWQtcHJldmlldy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9pcy1wcmV2aWV3LW1lc3NhZ2UuanMKZnVuY3Rpb24gaXNQcmV2aWV3TWVzc2FnZShkYXRhMTEpIHsKICBpZiAoZGF0YTExID09IG51bGwgfHwgdHlwZW9mIGRhdGExMSAhPT0gIm9iamVjdCIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKCEoInR5cGUiIGluIGRhdGExMSkgfHwgIVBSRVZJRVdfTUVTU0FHRV9UWVBFUy5pbmNsdWRlcyhkYXRhMTEudHlwZSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KdmFyIFBSRVZJRVdfTUVTU0FHRV9UWVBFUzsKdmFyIGluaXRfaXNfcHJldmlld19tZXNzYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvaXMtcHJldmlldy1tZXNzYWdlLmpzIigpIHsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBQUkVWSUVXX01FU1NBR0VfVFlQRVMgPSBbCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5Db25zb2xlRXJyb3IsCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5VbmNhdWdodEV4Y2VwdGlvbiwKICAgICAgUHJldmlld01lc3NhZ2VUeXBlLlVuaGFuZGxlZFJlamVjdGlvbgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzCnZhciBpbml0X3V0aWxzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzIigpIHsKICAgIGluaXRfcmVsb2FkX3ByZXZpZXcoKTsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBpbml0X2lzX3ByZXZpZXdfbWVzc2FnZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMKZnVuY3Rpb24gbnVsbFByb3RvdHlwZShzb3VyY2UpIHsKICBjb25zdCBwcm90b3R5cGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICBpZiAoIXNvdXJjZSkgewogICAgcmV0dXJuIHByb3RvdHlwZTsKICB9CiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLCBzb3VyY2UpOwp9CnZhciBpbml0X251bGxfcHJvdG90eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMKZnVuY3Rpb24gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0geyBkOiB7fSB9OwogIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlKSkgewogICAgY29uc3QgZW50cnkgPSB0cmVlW25hbWVdOwogICAgaWYgKCJmaWxlIiBpbiBlbnRyeSkgewogICAgICBpZiAoInN5bWxpbmsiIGluIGVudHJ5LmZpbGUpIHsKICAgICAgICBuZXdUcmVlLmRbbmFtZV0gPSB7IGY6IHsgbDogZW50cnkuZmlsZS5zeW1saW5rIH0gfTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBjb250ZW50cyA9IGVudHJ5LmZpbGUuY29udGVudHM7CiAgICAgIGNvbnN0IHN0cmluZ0NvbnRlbnRzID0gdHlwZW9mIGNvbnRlbnRzID09PSAic3RyaW5nIiA/IGNvbnRlbnRzIDogYmluYXJ5RGVjb2Rlci5kZWNvZGUoY29udGVudHMpOwogICAgICBjb25zdCBiaW5hcnkgPSB0eXBlb2YgY29udGVudHMgPT09ICJzdHJpbmciID8ge30gOiB7IGI6IHRydWUgfTsKICAgICAgbmV3VHJlZS5kW25hbWVdID0geyBmOiB7IGM6IHN0cmluZ0NvbnRlbnRzLCAuLi5iaW5hcnkgfSB9OwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IG5ld0VudHJ5ID0gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKGVudHJ5LmRpcmVjdG9yeSk7CiAgICBuZXdUcmVlLmRbbmFtZV0gPSBuZXdFbnRyeTsKICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gdG9FeHRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0gbnVsbFByb3RvdHlwZSgpOwogIGlmICgiZiIgaW4gdHJlZSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gZXhwb3J0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIEpTT04gZm9ybWF0LiIpOwogIH0KICBpZiAoImQiIGluIHRyZWUpIHsKICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlLmQpKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gdHJlZS5kW25hbWVdOwogICAgICBpZiAoImQiIGluIGVudHJ5KSB7CiAgICAgICAgbmV3VHJlZVtuYW1lXSA9IG51bGxQcm90b3R5cGUoewogICAgICAgICAgZGlyZWN0b3J5OiB0b0V4dGVybmFsRmlsZVN5c3RlbVRyZWUoZW50cnkpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoImYiIGluIGVudHJ5KSB7CiAgICAgICAgaWYgKCJjIiBpbiBlbnRyeS5mKSB7CiAgICAgICAgICBuZXdUcmVlW25hbWVdID0gbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgIGZpbGU6IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICAgIGNvbnRlbnRzOiBlbnRyeS5mLmIgPyBmcm9tQmluYXJ5U3RyaW5nKGVudHJ5LmYuYykgOiBlbnRyeS5mLmMKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoImwiIGluIGVudHJ5LmYpIHsKICAgICAgICAgIG5ld1RyZWVbbmFtZV0gPSBudWxsUHJvdG90eXBlKHsKICAgICAgICAgICAgZmlsZTogbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgICAgc3ltbGluazogZW50cnkuZi5sCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gZnJvbUJpbmFyeVN0cmluZyhzMTApIHsKICBjb25zdCBlbmNvZGVkID0gbmV3IFVpbnQ4QXJyYXkoczEwLmxlbmd0aCk7CiAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgczEwLmxlbmd0aDsgaTExKyspIHsKICAgIGVuY29kZWRbaTExXSA9IHMxMFtpMTFdLmNoYXJDb2RlQXQoMCk7CiAgfQogIHJldHVybiBlbmNvZGVkOwp9CnZhciBiaW5hcnlEZWNvZGVyOwp2YXIgaW5pdF9maWxlX3N5c3RlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2ZpbGUtc3lzdGVtLmpzIigpIHsKICAgIGluaXRfbnVsbF9wcm90b3R5cGUoKTsKICAgIGJpbmFyeURlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoImxhdGluMSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMKZnVuY3Rpb24gY29uZmlndXJlQVBJS2V5KGtleTIpIHsKICBpZiAoYXV0aFN0YXRlLmJvb3RDYWxsZWQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiYGNvbmZpZ3VyZUFQSUtleWAgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGBXZWJDb250YWluZXIuYm9vdGAiKTsKICB9CiAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIiwga2V5Mik7Cn0KYXN5bmMgZnVuY3Rpb24gdW5zeW5jaHJvbml6ZWRCb290KG9wdGlvbnMpIHsKICBjb25zdCB7IHNlcnZlclByb21pc2UgfSA9IHNlcnZlckZhY3Rvcnkob3B0aW9ucyk7CiAgY29uc3Qgc2VydmVyID0gYXdhaXQgc2VydmVyUHJvbWlzZTsKICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHNlcnZlci5idWlsZCh7CiAgICBob3N0OiB3aW5kb3cubG9jYXRpb24uaG9zdCwKICAgIHZlcnNpb246ICIxLjYuMSIsCiAgICB3b3JrZGlyTmFtZTogb3B0aW9ucy53b3JrZGlyTmFtZSwKICAgIGZvcndhcmRQcmV2aWV3RXJyb3JzOiBvcHRpb25zLmZvcndhcmRQcmV2aWV3RXJyb3JzCiAgfSk7CiAgY29uc3QgW2ZzLCBwcmV2aWV3U2NyaXB0LCBydW50aW1lSW5mb10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICBpbnN0YW5jZS5mcygpLAogICAgaW5zdGFuY2UucHJldmlld1NjcmlwdCgpLAogICAgaW5zdGFuY2UucnVudGltZUluZm8oKQogIF0pOwogIHJldHVybiBuZXcgV2ViQ29udGFpbmVyKGluc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgcnVudGltZUluZm8pOwp9CmZ1bmN0aW9uIGJpbmFyeUxpc3RlbmVyKGxpc3RlbmVyMikgewogIGlmIChsaXN0ZW5lcjIgPT0gbnVsbCkgewogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgcmV0dXJuIChkYXRhMTEpID0+IHsKICAgIGlmIChkYXRhMTEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgIGxpc3RlbmVyMihkZWNvZGVyLmRlY29kZShkYXRhMTEpKTsKICAgIH0gZWxzZSBpZiAoZGF0YTExID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIyKG51bGwpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gcHJveHlMaXN0ZW5lcihsaXN0ZW5lcjIpIHsKICBpZiAobGlzdGVuZXIyID09IG51bGwpIHsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIHJldHVybiBjb21saW5rX2V4cG9ydHMucHJveHkobGlzdGVuZXIyKTsKfQpmdW5jdGlvbiBzZXJ2ZXJGYWN0b3J5KG9wdGlvbnMpIHsKICBpZiAoY2FjaGVkU2VydmVyUHJvbWlzZSAhPSBudWxsKSB7CiAgICBpZiAob3B0aW9ucy5jb2VwICE9PSBjYWNoZWRCb290T3B0aW9ucy5jb2VwKSB7CiAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBib290IFdlYkNvbnRhaW5lciB3aXRoICdjb2VwOiAke29wdGlvbnMuY29lcH0nYCk7CiAgICAgIGNvbnNvbGUud2FybihgRmlyc3QgYm9vdCBoYWQgJ2NvZXA6ICR7Y2FjaGVkQm9vdE9wdGlvbnMuY29lcH0nLCBuZXcgc2V0dGluZ3Mgd2lsbCBub3QgdGFrZSBlZmZlY3QhYCk7CiAgICB9CiAgICByZXR1cm4geyBzZXJ2ZXJQcm9taXNlOiBjYWNoZWRTZXJ2ZXJQcm9taXNlIH07CiAgfQogIGlmIChvcHRpb25zLmNvZXApIHsKICAgIGlmcmFtZVNldHRpbmdzLnNldFF1ZXJ5UGFyYW0oImNvZXAiLCBvcHRpb25zLmNvZXApOwogIH0KICBpZiAob3B0aW9ucy5leHBlcmltZW50YWxOb2RlKSB7CiAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJleHBlcmltZW50YWxfbm9kZSIsICIxIik7CiAgfQogIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGlmcmFtZS5zZXRBdHRyaWJ1dGUoImFsbG93IiwgImNyb3NzLW9yaWdpbi1pc29sYXRlZCIpOwogIGNvbnN0IHVybCA9IGlmcmFtZVNldHRpbmdzLnVybDsKICBpZnJhbWUuc3JjID0gdXJsLnRvU3RyaW5nKCk7CiAgY29uc3QgeyBvcmlnaW4gfSA9IHVybDsKICBjYWNoZWRCb290T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9OwogIGNhY2hlZFNlcnZlclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgIGNvbnN0IG9uTWVzc2FnZTUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gb3JpZ2luKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHsgZGF0YTogZGF0YTExIH0gPSBldmVudDsKICAgICAgaWYgKGRhdGExMS50eXBlID09PSAiaW5pdCIpIHsKICAgICAgICByZXNvbHZlMihjb21saW5rX2V4cG9ydHMud3JhcChldmVudC5wb3J0c1swXSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZGF0YTExLnR5cGUgPT09ICJ3YXJuaW5nIikgewogICAgICAgIGNvbnNvbGVbZGF0YTExLmxldmVsXS5jYWxsKGNvbnNvbGUsIGRhdGExMS5tZXNzYWdlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH07CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZTUpOwogIH0pOwogIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGlmcmFtZSwgbnVsbCk7CiAgcmV0dXJuIHsgc2VydmVyUHJvbWlzZTogY2FjaGVkU2VydmVyUHJvbWlzZSB9Owp9CmZ1bmN0aW9uIGlzU3RyaW5nQXJyYXkobGlzdDUpIHsKICByZXR1cm4gdHlwZW9mIGxpc3Q1WzBdID09PSAic3RyaW5nIjsKfQpmdW5jdGlvbiBpc1R5cGVkQXJyYXlDb2xsZWN0aW9uKGxpc3Q1KSB7CiAgcmV0dXJuIGxpc3Q1WzBdIGluc3RhbmNlb2YgVWludDhBcnJheTsKfQpmdW5jdGlvbiBzdHJlYW1XaXRoUHVzaCgpIHsKICBsZXQgY29udHJvbGxlciA9IG51bGw7CiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgIHN0YXJ0KGNvbnRyb2xsZXJfKSB7CiAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyXzsKICAgIH0KICB9KTsKICBjb25zdCBwdXNoMiA9IChpdGVtKSA9PiB7CiAgICBpZiAoaXRlbSAhPSBudWxsKSB7CiAgICAgIGNvbnRyb2xsZXI/LmVucXVldWUoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBjb250cm9sbGVyPy5jbG9zZSgpOwogICAgICBjb250cm9sbGVyID0gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiB7IHN0cmVhbSwgcHVzaDogcHVzaDIgfTsKfQpmdW5jdGlvbiBzeW5jU3Vic2NyaXB0aW9uKGxpc3RlbmVyMikgewogIGxldCBzdG9wcGVkID0gZmFsc2U7CiAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gewogIH07CiAgY29uc3Qgd3JhcHBlZCA9ICgoLi4uYXJncykgPT4gewogICAgaWYgKHN0b3BwZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGlzdGVuZXIyKC4uLmFyZ3MpOwogIH0pOwogIHJldHVybiB7CiAgICBzdWJzY3JpYmUocHJvbWlzZSkgewogICAgICBwcm9taXNlLnRoZW4oKHVuc3Vic2NyaWJlXykgPT4gewogICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgIGlmIChzdG9wcGVkKSB7CiAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgc3RvcHBlZCA9IHRydWU7CiAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgfTsKICAgIH0sCiAgICBsaXN0ZW5lcjogd3JhcHBlZAogIH07Cn0KdmFyIGF1dGgyLCBib290UHJvbWlzZSwgY2FjaGVkU2VydmVyUHJvbWlzZSwgY2FjaGVkQm9vdE9wdGlvbnMsIGRlY29kZXIsIGVuY29kZXIsIFdlYkNvbnRhaW5lciwgRElSX0VOVFJZX1RZUEVfRklMRSwgRElSX0VOVFJZX1RZUEVfRElSLCBEaXJFbnRJbXBsLCBGU1dhdGNoZXIsIFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsLCBGaWxlU3lzdGVtQVBJQ2xpZW50Owp2YXIgaW5pdF9kaXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMiKCkgewogICAgaW5pdF9hdXRoX3N0YXRlKCk7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgaW5pdF92ZW5kb3IoKTsKICAgIGluaXRfYXV0aF9zdGF0ZSgpOwogICAgaW5pdF90b2tlbnMoKTsKICAgIGluaXRfaWZyYW1lX3VybCgpOwogICAgaW5pdF91dGlsczMoKTsKICAgIGluaXRfZmlsZV9zeXN0ZW0oKTsKICAgIGluaXRfdXRpbHMzKCk7CiAgICBhdXRoMiA9IGF1dGg7CiAgICBib290UHJvbWlzZSA9IG51bGw7CiAgICBjYWNoZWRTZXJ2ZXJQcm9taXNlID0gbnVsbDsKICAgIGNhY2hlZEJvb3RPcHRpb25zID0ge307CiAgICBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgICBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICBXZWJDb250YWluZXIgPSBjbGFzcyBfV2ViQ29udGFpbmVyIHsKICAgICAgX2luc3RhbmNlOwogICAgICBfcnVudGltZUluZm87CiAgICAgIC8qKgogICAgICAgKiBHaXZlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0uCiAgICAgICAqLwogICAgICBmczsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX2luc3RhbmNlID0gbnVsbDsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX3RlYXJkb3duUHJvbWlzZSA9IG51bGw7CiAgICAgIF90b3JuRG93biA9IGZhbHNlOwogICAgICBfdW5zdWJzY3JpYmVGcm9tVG9rZW5DaGFuZ2VkTGlzdGVuZXIgPSAoKSA9PiB7CiAgICAgIH07CiAgICAgIC8qKiBAaW50ZXJuYWwgKi8KICAgICAgY29uc3RydWN0b3IoX2luc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgX3J1bnRpbWVJbmZvKSB7CiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBfaW5zdGFuY2U7CiAgICAgICAgdGhpcy5fcnVudGltZUluZm8gPSBfcnVudGltZUluZm87CiAgICAgICAgdGhpcy5mcyA9IG5ldyBGaWxlU3lzdGVtQVBJQ2xpZW50KGZzKTsKICAgICAgICBpZiAoYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lciA9IGFkZEFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVyKChhY2Nlc3NUb2tlbikgPT4gewogICAgICAgICAgICB0aGlzLl9pbnN0YW5jZS5zZXRDcmVkZW50aWFscyh7IGFjY2Vzc1Rva2VuLCBlZGl0b3JPcmlnaW46IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4gfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucHJvbWlzZTsKICAgICAgICAgICAgaWYgKHRoaXMuX3Rvcm5Eb3duKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFzc2VydEF1dGhUb2tlbnMoYXV0aFN0YXRlLnRva2Vucyk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHsKICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYXV0aFN0YXRlLnRva2Vucy5hY2Nlc3MsCiAgICAgICAgICAgICAgZWRpdG9yT3JpZ2luOiBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkoKS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgc3Bhd24oY29tbWFuZCwgb3B0aW9uc09yQXJncywgb3B0aW9ucykgewogICAgICAgIGxldCBhcmdzID0gW107CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uc09yQXJncykpIHsKICAgICAgICAgIGFyZ3MgPSBvcHRpb25zT3JBcmdzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yQXJnczsKICAgICAgICB9CiAgICAgICAgbGV0IG91dHB1dCA9IHZvaWQgMDsKICAgICAgICBsZXQgb3V0cHV0U3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7CiAgICAgICAgaWYgKG9wdGlvbnM/Lm91dHB1dCAhPT0gZmFsc2UpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmVhbVdpdGhQdXNoKCk7CiAgICAgICAgICBvdXRwdXQgPSByZXN1bHQucHVzaDsKICAgICAgICAgIG91dHB1dFN0cmVhbSA9IHJlc3VsdC5zdHJlYW07CiAgICAgICAgfQogICAgICAgIGxldCBzdGRvdXQgPSB2b2lkIDA7CiAgICAgICAgbGV0IHN0ZG91dFN0cmVhbTsKICAgICAgICBsZXQgc3RkZXJyID0gdm9pZCAwOwogICAgICAgIGxldCBzdGRlcnJTdHJlYW07CiAgICAgICAgY29uc3Qgd3JhcHBlZE91dHB1dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIob3V0cHV0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZG91dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3Rkb3V0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZGVyciA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3RkZXJyKSk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5ydW4oewogICAgICAgICAgY29tbWFuZCwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBjd2Q6IG9wdGlvbnM/LmN3ZCwKICAgICAgICAgIGVudjogb3B0aW9ucz8uZW52LAogICAgICAgICAgdGVybWluYWw6IG9wdGlvbnM/LnRlcm1pbmFsCiAgICAgICAgfSwgd3JhcHBlZFN0ZG91dCwgd3JhcHBlZFN0ZGVyciwgd3JhcHBlZE91dHB1dCk7CiAgICAgICAgcmV0dXJuIG5ldyBXZWJDb250YWluZXJQcm9jZXNzSW1wbChwcm9jZXNzNCwgb3V0cHV0U3RyZWFtLCBzdGRvdXRTdHJlYW0sIHN0ZGVyclN0cmVhbSk7CiAgICAgIH0KICAgICAgYXN5bmMgZXhwb3J0KHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2VyaWFsaXplT3B0aW9ucyA9IHsKICAgICAgICAgIGZvcm1hdDogb3B0aW9ucz8uZm9ybWF0ID8/ICJqc29uIiwKICAgICAgICAgIGluY2x1ZGVzOiBvcHRpb25zPy5pbmNsdWRlcywKICAgICAgICAgIGV4Y2x1ZGVzOiBvcHRpb25zPy5leGNsdWRlcywKICAgICAgICAgIGV4dGVybmFsOiB0cnVlCiAgICAgICAgfTsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXJpYWxpemUocGF0aDIsIHNlcmlhbGl6ZU9wdGlvbnMpOwogICAgICAgIGlmIChzZXJpYWxpemVPcHRpb25zLmZvcm1hdCA9PT0gImpzb24iKSB7CiAgICAgICAgICBjb25zdCBkYXRhMTEgPSBKU09OLnBhcnNlKGRlY29kZXIuZGVjb2RlKHJlc3VsdCkpOwogICAgICAgICAgcmV0dXJuIHRvRXh0ZXJuYWxGaWxlU3lzdGVtVHJlZShkYXRhMTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIG9uKGV2ZW50LCBsaXN0ZW5lcjIpIHsKICAgICAgICBpZiAoZXZlbnQgPT09ICJwcmV2aWV3LW1lc3NhZ2UiKSB7CiAgICAgICAgICBjb25zdCBvcmlnaW5hbExpc3RlbmVyID0gbGlzdGVuZXIyOwogICAgICAgICAgbGlzdGVuZXIyID0gKChtZXNzYWdlMikgPT4gewogICAgICAgICAgICBpZiAoaXNQcmV2aWV3TWVzc2FnZShtZXNzYWdlMikpIHsKICAgICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyKG1lc3NhZ2UyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHsgbGlzdGVuZXI6IHdyYXBwZWQsIHN1YnNjcmliZTogc3Vic2NyaWJlMiB9ID0gc3luY1N1YnNjcmlwdGlvbihsaXN0ZW5lcjIpOwogICAgICAgIHJldHVybiBzdWJzY3JpYmUyKHRoaXMuX2luc3RhbmNlLm9uKGV2ZW50LCBjb21saW5rX2V4cG9ydHMucHJveHkod3JhcHBlZCkpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTW91bnRzIGEgdHJlZSBvZiBmaWxlcyBpbnRvIHRoZSBmaWxlc3lzdGVtLiBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSB0cmVlIG9iamVjdCAoe0BsaW5rIEZpbGVTeXN0ZW1UcmVlfSkKICAgICAgICogb3IgYXMgYSBiaW5hcnkgc25hcHNob3QgZ2VuZXJhdGVkIGJ5IFtgQHdlYmNvbnRhaW5lci9zbmFwc2hvdGBdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0B3ZWJjb250YWluZXIvc25hcHNob3QpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gc25hcHNob3RPclRyZWUgLSBBIHRyZWUgb2YgZmlsZXMsIG9yIGEgYmluYXJ5IHNuYXBzaG90LiBOb3RlIHRoYXQgYmluYXJ5IHBheWxvYWRzIHdpbGwgYmUgdHJhbnNmZXJyZWQuCiAgICAgICAqIEBwYXJhbSBvcHRpb25zLm1vdW50UG9pbnQgLSBTcGVjaWZpZXMgYSBuZXN0ZWQgcGF0aCB3aGVyZSB0aGUgdHJlZSBzaG91bGQgYmUgbW91bnRlZC4KICAgICAgICovCiAgICAgIG1vdW50KHNuYXBzaG90T3JUcmVlLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHNuYXBzaG90T3JUcmVlIGluc3RhbmNlb2YgVWludDhBcnJheSA/IHNuYXBzaG90T3JUcmVlIDogc25hcHNob3RPclRyZWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KHNuYXBzaG90T3JUcmVlKSA6IGVuY29kZXIuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHRvSW50ZXJuYWxGaWxlU3lzdGVtVHJlZShzbmFwc2hvdE9yVHJlZSkpKTsKICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UubG9hZEZpbGVzKGNvbWxpbmtfZXhwb3J0cy50cmFuc2ZlcihwYXlsb2FkLCBbcGF5bG9hZC5idWZmZXJdKSwgewogICAgICAgICAgbW91bnRQb2ludHM6IG9wdGlvbnM/Lm1vdW50UG9pbnQKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGEgY3VzdG9tIHNjcmlwdCB0byBiZSBpbmplY3RlZCBpbnRvIGFsbCBwcmV2aWV3cy4gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgZXZlcnkKICAgICAgICogZnV0dXJlIHBhZ2UgcmVsb2FkIHdpbGwgY29udGFpbiB0aGUgcHJvdmlkZWQgc2NyaXB0IHRhZyBvbiBhbGwgSFRNTCByZXNwb25zZXMuCiAgICAgICAqCiAgICAgICAqIE5vdGU6CiAgICAgICAqCiAgICAgICAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXNvbHZlcywgZXZlcnkgcHJldmlldyByZWxvYWRlZCBfYWZ0ZXJfIHdpbGwgaGF2ZSB0aGUgbmV3IHNjcmlwdC4KICAgICAgICogRXhpc3RpbmcgcHJldmlldyBoYXZlIHRvIGJlIGV4cGxpY2l0ZWx5IHJlbG9hZGVkLgogICAgICAgKgogICAgICAgKiBUbyByZWxvYWQgYSBwcmV2aWV3IHlvdSBjYW4gdXNlIGByZWxvYWRQcmV2aWV3YC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHNjcmlwdFNyYyBTb3VyY2UgZm9yIHRoZSBzY3JpcHQgdGFnLgogICAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGRlZmluZSB3aGljaCB0eXBlIG9mIHNjcmlwdCB0aGlzIGlzLgogICAgICAgKi8KICAgICAgc2V0UHJldmlld1NjcmlwdChzY3JpcHRTcmMsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2Uuc2V0UHJldmlld1NjcmlwdChzY3JpcHRTcmMsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFBBVEhgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBwcm9jZXNzZXMgc3RhcnRlZCB0aHJvdWdoIHtAbGluayBzcGF3bn0uCiAgICAgICAqLwogICAgICBnZXQgcGF0aCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUluZm8ucGF0aDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGZ1bGwgcGF0aCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkgKHNlZSB7QGxpbmsgRmlsZVN5c3RlbUFQSX0pLgogICAgICAgKi8KICAgICAgZ2V0IHdvcmtkaXIoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVJbmZvLmN3ZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveXMgdGhlIFdlYkNvbnRhaW5lciBpbnN0YW5jZSwgdHVybmluZyBpdCB1bnVzYWJsZSwgYW5kIHJlbGVhc2VzIGl0cyByZXNvdXJjZXMuIEFmdGVyIHRoaXMsCiAgICAgICAqIGEgbmV3IFdlYkNvbnRhaW5lciBpbnN0YW5jZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyB7QGxpbmsgV2ViQ29udGFpbmVyLmJvb3QgfCBgYm9vdGB9LgogICAgICAgKgogICAgICAgKiBBbGwgZW50aXRpZXMgZGVyaXZlZCBmcm9tIHRoaXMgaW5zdGFuY2UgKGUuZy4gcHJvY2Vzc2VzLCB0aGUgZmlsZSBzeXN0ZW0sIGV0Yy4pIGFsc28gYmVjb21lIHVudXNhYmxlCiAgICAgICAqIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QuCiAgICAgICAqLwogICAgICB0ZWFyZG93bigpIHsKICAgICAgICBpZiAodGhpcy5fdG9ybkRvd24pIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyIGFscmVhZHkgdG9ybiBkb3duIik7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3Rvcm5Eb3duID0gdHJ1ZTsKICAgICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lcigpOwogICAgICAgIGNvbnN0IHRlYXJkb3duRm4gPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmZzLl90ZWFyZG93bigpOwogICAgICAgICAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS50ZWFyZG93bigpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VbY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICAgICAgaWYgKF9XZWJDb250YWluZXIuX2luc3RhbmNlID09PSB0aGlzKSB7CiAgICAgICAgICAgICAgX1dlYkNvbnRhaW5lci5faW5zdGFuY2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBfV2ViQ29udGFpbmVyLl90ZWFyZG93blByb21pc2UgPSB0ZWFyZG93bkZuKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEJvb3RzIGEgV2ViQ29udGFpbmVyLiBPbmx5IGEgc2luZ2xlIGluc3RhbmNlIG9mIFdlYkNvbnRhaW5lciBjYW4gYmUgYm9vdGVkIGNvbmN1cnJlbnRseQogICAgICAgKiAoc2VlIHtAbGluayBXZWJDb250YWluZXIudGVhcmRvd24gfCBgdGVhcmRvd25gfSkuCiAgICAgICAqCiAgICAgICAqIEJvb3RpbmcgV2ViQ29udGFpbmVyIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCiAgICAgICAqLwogICAgICBzdGF0aWMgYXN5bmMgYm9vdChvcHRpb25zID0ge30pIHsKICAgICAgICBhd2FpdCB0aGlzLl90ZWFyZG93blByb21pc2U7CiAgICAgICAgX1dlYkNvbnRhaW5lci5fdGVhcmRvd25Qcm9taXNlID0gbnVsbDsKICAgICAgICBjb25zdCB7IHdvcmtkaXJOYW1lIH0gPSBvcHRpb25zOwogICAgICAgIGlmICh3aW5kb3cuY3Jvc3NPcmlnaW5Jc29sYXRlZCAmJiBvcHRpb25zLmNvZXAgPT09ICJub25lIikgewogICAgICAgICAgY29uc29sZS53YXJuKGBBIENyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3kgaGVhZGVyIGlzIHJlcXVpcmVkIGluIGNyb3NzIG9yaWdpbiBpc29sYXRlZCBlbnZpcm9ubWVudHMuClNldCB0aGUgJ2NvZXAnIG9wdGlvbiB0byAncmVxdWlyZS1jb3JwJy5gKTsKICAgICAgICB9CiAgICAgICAgaWYgKHdvcmtkaXJOYW1lPy5pbmNsdWRlcygiLyIpIHx8IHdvcmtkaXJOYW1lID09PSAiLi4iIHx8IHdvcmtkaXJOYW1lID09PSAiLiIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigid29ya2Rpck5hbWUgc2hvdWxkIGJlIGEgdmFsaWQgZm9sZGVyIG5hbWUiKTsKICAgICAgICB9CiAgICAgICAgYXV0aFN0YXRlLmJvb3RDYWxsZWQgPSB0cnVlOwogICAgICAgIHdoaWxlIChib290UHJvbWlzZSkgewogICAgICAgICAgYXdhaXQgYm9vdFByb21pc2U7CiAgICAgICAgfQogICAgICAgIGlmIChfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPbmx5IGEgc2luZ2xlIFdlYkNvbnRhaW5lciBpbnN0YW5jZSBjYW4gYmUgYm9vdGVkIik7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGluc3RhbmNlUHJvbWlzZSA9IHVuc3luY2hyb25pemVkQm9vdChvcHRpb25zKTsKICAgICAgICBib290UHJvbWlzZSA9IGluc3RhbmNlUHJvbWlzZS5jYXRjaCgoKSA9PiB7CiAgICAgICAgfSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgaW5zdGFuY2VQcm9taXNlOwogICAgICAgICAgX1dlYkNvbnRhaW5lci5faW5zdGFuY2UgPSBpbnN0YW5jZTsKICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgYm9vdFByb21pc2UgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIERJUl9FTlRSWV9UWVBFX0ZJTEUgPSAxOwogICAgRElSX0VOVFJZX1RZUEVfRElSID0gMjsKICAgIERpckVudEltcGwgPSBjbGFzcyB7CiAgICAgIG5hbWU7CiAgICAgIF90eXBlOwogICAgICBjb25zdHJ1Y3RvcihuYW1lLCBfdHlwZSkgewogICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgdGhpcy5fdHlwZSA9IF90eXBlOwogICAgICB9CiAgICAgIGlzRmlsZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gRElSX0VOVFJZX1RZUEVfRklMRTsKICAgICAgfQogICAgICBpc0RpcmVjdG9yeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gRElSX0VOVFJZX1RZUEVfRElSOwogICAgICB9CiAgICB9OwogICAgRlNXYXRjaGVyID0gY2xhc3MgewogICAgICBfYXBpQ2xpZW50OwogICAgICBfcGF0aDsKICAgICAgX29wdGlvbnM7CiAgICAgIF9saXN0ZW5lcjsKICAgICAgX3dyYXBwZWRMaXN0ZW5lcjsKICAgICAgX3dhdGNoZXI7CiAgICAgIF9jbG9zZWQgPSBmYWxzZTsKICAgICAgY29uc3RydWN0b3IoX2FwaUNsaWVudCwgX3BhdGgsIF9vcHRpb25zLCBfbGlzdGVuZXIyKSB7CiAgICAgICAgdGhpcy5fYXBpQ2xpZW50ID0gX2FwaUNsaWVudDsKICAgICAgICB0aGlzLl9wYXRoID0gX3BhdGg7CiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zOwogICAgICAgIHRoaXMuX2xpc3RlbmVyID0gX2xpc3RlbmVyMjsKICAgICAgICB0aGlzLl9hcGlDbGllbnQuX3dhdGNoZXJzLmFkZCh0aGlzKTsKICAgICAgICB0aGlzLl93cmFwcGVkTGlzdGVuZXIgPSAoZXZlbnQsIGZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXIgJiYgIXRoaXMuX2Nsb3NlZCkgewogICAgICAgICAgICB0aGlzLl9saXN0ZW5lcihldmVudCwgZmlsZW5hbWUpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5fYXBpQ2xpZW50Ll9mcy53YXRjaCh0aGlzLl9wYXRoLCB0aGlzLl9vcHRpb25zLCBwcm94eUxpc3RlbmVyKHRoaXMuX3dyYXBwZWRMaXN0ZW5lcikpLnRoZW4oKF93YXRjaGVyKSA9PiB7CiAgICAgICAgICB0aGlzLl93YXRjaGVyID0gX3dhdGNoZXI7CiAgICAgICAgICBpZiAodGhpcy5fY2xvc2VkKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKTsKICAgICAgfQogICAgICBhc3luYyBjbG9zZSgpIHsKICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCkgewogICAgICAgICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2FwaUNsaWVudC5fd2F0Y2hlcnMuZGVsZXRlKHRoaXMpOwogICAgICAgICAgYXdhaXQgdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEBpbnRlcm5hbAogICAgICAgKi8KICAgICAgYXN5bmMgX3RlYXJkb3duKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3dhdGNoZXI/LmNsb3NlKCkuZmluYWxseSgoKSA9PiB7CiAgICAgICAgICB0aGlzLl93YXRjaGVyPy5bY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsID0gY2xhc3MgewogICAgICBvdXRwdXQ7CiAgICAgIGlucHV0OwogICAgICBleGl0OwogICAgICBfcHJvY2VzczsKICAgICAgc3Rkb3V0OwogICAgICBzdGRlcnI7CiAgICAgIGNvbnN0cnVjdG9yKHByb2Nlc3M0LCBvdXRwdXQsIHN0ZG91dCwgc3RkZXJyKSB7CiAgICAgICAgdGhpcy5vdXRwdXQgPSBvdXRwdXQ7CiAgICAgICAgdGhpcy5fcHJvY2VzcyA9IHByb2Nlc3M0OwogICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgV3JpdGFibGVTdHJlYW0oewogICAgICAgICAgd3JpdGU6IChkYXRhMTEpID0+IHsKICAgICAgICAgICAgdGhpcy5fZ2V0UHJvY2VzcygpPy53cml0ZShkYXRhMTEpLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5leGl0ID0gdGhpcy5fb25FeGl0KCk7CiAgICAgICAgdGhpcy5zdGRvdXQgPSBzdGRvdXQ7CiAgICAgICAgdGhpcy5zdGRlcnIgPSBzdGRlcnI7CiAgICAgIH0KICAgICAga2lsbCgpIHsKICAgICAgICB0aGlzLl9wcm9jZXNzPy5raWxsKCk7CiAgICAgIH0KICAgICAgcmVzaXplKGRpbWVuc2lvbnMpIHsKICAgICAgICB0aGlzLl9nZXRQcm9jZXNzKCk/LnJlc2l6ZShkaW1lbnNpb25zKTsKICAgICAgfQogICAgICBhc3luYyBfb25FeGl0KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcHJvY2Vzcy5vbkV4aXQ7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMuX3Byb2Nlc3M/Lltjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9nZXRQcm9jZXNzKCkgewogICAgICAgIGlmICh0aGlzLl9wcm9jZXNzID09IG51bGwpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiVGhpcyBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzOwogICAgICB9CiAgICB9OwogICAgRmlsZVN5c3RlbUFQSUNsaWVudCA9IGNsYXNzIHsKICAgICAgX2ZzOwogICAgICBfd2F0Y2hlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXSk7CiAgICAgIGNvbnN0cnVjdG9yKGZzKSB7CiAgICAgICAgdGhpcy5fZnMgPSBmczsKICAgICAgfQogICAgICBybSguLi5hcmdzKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZzLnJtKC4uLmFyZ3MpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWRGaWxlKHBhdGgyLCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5yZWFkRmlsZShwYXRoMiwgZW5jb2RpbmcpOwogICAgICB9CiAgICAgIGFzeW5jIHJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZzLnJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGRhdGExMSwgb3B0aW9ucykgewogICAgICAgIGlmIChkYXRhMTEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gZGF0YTExLmJ1ZmZlci5zbGljZShkYXRhMTEuYnl0ZU9mZnNldCwgZGF0YTExLmJ5dGVPZmZzZXQgKyBkYXRhMTEuYnl0ZUxlbmd0aCk7CiAgICAgICAgICBkYXRhMTEgPSBjb21saW5rX2V4cG9ydHMudHJhbnNmZXIobmV3IFVpbnQ4QXJyYXkoYnVmZmVyMiksIFtidWZmZXIyXSk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuX2ZzLndyaXRlRmlsZShwYXRoMiwgZGF0YTExLCBvcHRpb25zKTsKICAgICAgfQogICAgICBhc3luYyByZWFkZGlyKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZnMucmVhZGRpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgICAgaWYgKGlzU3RyaW5nQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVHlwZWRBcnJheUNvbGxlY3Rpb24ocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgY29uc3QgZW50cmllcyA9IHJlc3VsdC5tYXAoKGVudHJ5KSA9PiBuZXcgRGlyRW50SW1wbChlbnRyeS5uYW1lLCBlbnRyeVsiU3ltYm9sKHR5cGUpIl0pKTsKICAgICAgICByZXR1cm4gZW50cmllczsKICAgICAgfQogICAgICBhc3luYyBta2RpcihwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5ta2RpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIG9wdGlvbnMsIGxpc3RlbmVyMikgewogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbGlzdGVuZXIyID0gb3B0aW9uczsKICAgICAgICAgIG9wdGlvbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEZTV2F0Y2hlcih0aGlzLCBwYXRoMiwgb3B0aW9ucywgbGlzdGVuZXIyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQGludGVybmFsCiAgICAgICAqLwogICAgICBhc3luYyBfdGVhcmRvd24oKSB7CiAgICAgICAgdGhpcy5fZnNbY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5fd2F0Y2hlcnNdLm1hcCgod2F0Y2hlcikgPT4gd2F0Y2hlci5jbG9zZSgpKSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9XZWJDb250YWluZXJFbnZpcm9ubWVudC5qcwp2YXIgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQ7CnZhciBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9lbnZpcm9ubWVudHMvV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuanMiKCkgewogICAgaW5pdF9kaXN0KCk7CiAgICBXZWJDb250YWluZXJFbnZpcm9ubWVudCA9IGNsYXNzIF9XZWJDb250YWluZXJFbnZpcm9ubWVudCB7CiAgICAgIC8vIFN0YXRpYyBzaGFyZWQgc3RhdGUgLSBXZWJDb250YWluZXIgb25seSBhbGxvd3MgT05FIGJvb3QgcGVyIHBhZ2UKICAgICAgc3RhdGljIHNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgIHN0YXRpYyBib290UHJvbWlzZSA9IG51bGw7CiAgICAgIF9yZWFkeSA9IGZhbHNlOwogICAgICB0eXBlID0gIndlYmNvbnRhaW5lciI7CiAgICAgIGdldCByZWFkeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHk7CiAgICAgIH0KICAgICAgZ2V0IGNvbnRhaW5lcigpIHsKICAgICAgICByZXR1cm4gX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcjsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gTGlmZWN5Y2xlID09PT09PT09PT09PQogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLl9yZWFkeSAmJiBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZTsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIpIHsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyIHJlcXVpcmVzIFNoYXJlZEFycmF5QnVmZmVyIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSB5b3VyIHNlcnZlciBzZW5kcyB0aGVzZSBoZWFkZXJzOlxuICBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeTogc2FtZS1vcmlnaW5cbiAgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeTogcmVxdWlyZS1jb3JwIik7CiAgICAgICAgfQogICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IFdlYkNvbnRhaW5lci5ib290KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIgPSBhd2FpdCBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2U7CiAgICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgICBpZiAoX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcikgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lci50ZWFyZG93bigpOwogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UgPSBudWxsOwogICAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyA9PT09PT09PT09PT0KICAgICAgYXN5bmMgcmVhZEZpbGUocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyLCAidXRmLTgiKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGNvbnRlbnRzKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLndyaXRlRmlsZShwYXRoMiwgY29udGVudHMsICJ1dGYtOCIpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWREaXIocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRkaXIocGF0aDIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTsKICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgdHlwZTogZW50cnkuaXNEaXJlY3RvcnkoKSA/ICJkaXJlY3RvcnkiIDogImZpbGUiLAogICAgICAgICAgbmFtZTogZW50cnkubmFtZSwKICAgICAgICAgIHBhdGg6IHBhdGgyID09PSAiLyIgPyBgLyR7ZW50cnkubmFtZX1gIDogYCR7cGF0aDJ9LyR7ZW50cnkubmFtZX1gCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGFzeW5jIG1rZGlyKHBhdGgyKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLm1rZGlyKHBhdGgyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfQogICAgICBhc3luYyBybShwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5ybShwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9KTsKICAgICAgfQogICAgICBhc3luYyBleGlzdHMocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZGRpcihwYXRoMik7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIGNhbGxiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGNvbnN0IHdhdGNoZXIgPSB0aGlzLmNvbnRhaW5lci5mcy53YXRjaChwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9LCBjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHN0b3A6ICgpID0+IHdhdGNoZXIuY2xvc2UoKQogICAgICAgIH07CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByb2Nlc3MgRXhlY3V0aW9uID09PT09PT09PT09PQogICAgICBhc3luYyBzcGF3bihjb21tYW5kLCBhcmdzID0gW10pIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmNvbnRhaW5lci5zcGF3bihjb21tYW5kLCBhcmdzKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgb3V0cHV0OiBwcm9jZXNzNC5vdXRwdXQsCiAgICAgICAgICBpbnB1dDogcHJvY2VzczQuaW5wdXQsCiAgICAgICAgICBleGl0OiBwcm9jZXNzNC5leGl0LAogICAgICAgICAga2lsbDogKCkgPT4gcHJvY2VzczQua2lsbCgpCiAgICAgICAgfTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gV2ViQ29udGFpbmVyLXNwZWNpZmljIG1ldGhvZHMgPT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiBNb3VudCBmaWxlcyBpbnRvIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uCiAgICAgICAqIFRoaXMgaXMgYSBXZWJDb250YWluZXItc3BlY2lmaWMgb3BlcmF0aW9uLgogICAgICAgKiBAcGFyYW0gZmlsZXMgLSBGaWxlIHRyZWUgc3RydWN0dXJlIHRvIG1vdW50CiAgICAgICAqLwogICAgICBhc3luYyBtb3VudChmaWxlcykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5tb3VudChmaWxlcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBXZWJDb250YWluZXIgaW5zdGFuY2UuCiAgICAgICAqIFVzZSBzcGFyaW5nbHkgLSBwcmVmZXIgdGhlIGludGVyZmFjZSBtZXRob2RzLgogICAgICAgKi8KICAgICAgZ2V0Q29udGFpbmVyKCkgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByaXZhdGUgSGVscGVycyA9PT09PT09PT09PT0KICAgICAgZW5zdXJlUmVhZHkoKSB7CiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeSB8fCAhdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyRW52aXJvbm1lbnQgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcwp2YXIgaW5pdF9lbnZpcm9ubWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzCnZhciBpbml0X2dyb3VwX3J1bnRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzIigpIHsKICAgIGluaXRfaW50ZXJmYWNlczUoKTsKICAgIGluaXRfZW52aXJvbm1lbnRzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3Nob3BwaW5nX3Byb2R1Y3RjYXJkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXNpbXBsZS9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zaG9wcGluZ19wcm9kdWN0Y2FyZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzCnZhciBUZXJtaW5hbFRhYk1hbmFnZXI7CnZhciBpbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzIigpIHsKICAgIFRlcm1pbmFsVGFiTWFuYWdlciA9IGNsYXNzIHsKICAgICAgdGFicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRhYkNvdW50ZXIgPSAwOwogICAgICB4dGVybUJ1bmRsZSA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25CdW5kbGUgPSBudWxsOwogICAgICAvKioKICAgICAgICogSW5pdGlhbGl6ZSB0aGUgbWFuYWdlciB3aXRoIGxvYWRlZCB4dGVybSBtb2R1bGVzLgogICAgICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGFicy4KICAgICAgICovCiAgICAgIHNldFh0ZXJtTW9kdWxlcyh4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGUpIHsKICAgICAgICB0aGlzLnh0ZXJtQnVuZGxlID0geHRlcm1CdW5kbGU7CiAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlID0gZml0QWRkb25CdW5kbGU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdlbmVyYXRlIHVuaXF1ZSB0YWIgSUQKICAgICAgICovCiAgICAgIGdlbmVyYXRlVGFiSWQoKSB7CiAgICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgICAgcmV0dXJuIGB0ZXJtaW5hbC0ke3RoaXMudGFiQ291bnRlcn0tJHtEYXRlLm5vdygpfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBkZWZhdWx0IGxhYmVsIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdExhYmVsKHR5cGU1LCBtZXRhZGF0YSkgewogICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgIGNhc2UgInNoZWxsIjoKICAgICAgICAgICAgcmV0dXJuICJiYXNoIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YT8uc2NyaXB0TmFtZSB8fCAic2NyaXB0IjsKICAgICAgICAgIGNhc2UgInBhY2thZ2UtdXBkYXRlIjoKICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhPy5wYWNrYWdlTmFtZSA/IGB1cGRhdGUgJHttZXRhZGF0YS5wYWNrYWdlTmFtZX1gIDogInVwZGF0ZSI7CiAgICAgICAgICBjYXNlICJjdXN0b20iOgogICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE/LmNvbW1hbmQgfHwgInByb2Nlc3MiOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICJ0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgZGVmYXVsdCBpY29uIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdEljb24odHlwZTUpIHsKICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICBjYXNlICJzaGVsbCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnRlcm1pbmFsIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBsYXkiOwogICAgICAgICAgY2FzZSAicGFja2FnZS11cGRhdGUiOgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpwYWNrYWdlQ2hlY2siOwogICAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6Y29kZSI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTp0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGVybWluYWwgdGhlbWUgY29uZmlndXJhdGlvbgogICAgICAgKi8KICAgICAgZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCkgewogICAgICAgIGlmIChpc0JyaWdodCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvcjogIiMzMzMzMzMiLAogICAgICAgICAgICBjdXJzb3JBY2NlbnQ6ICIjZmZmZmZmIiwKICAgICAgICAgICAgc2VsZWN0aW9uOiAicmdiYSgwLCAwLCAwLCAwLjIpIiwKICAgICAgICAgICAgYmxhY2s6ICIjMDAwMDAwIiwKICAgICAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgICAgIGdyZWVuOiAiIzAwYmMwMCIsCiAgICAgICAgICAgIHllbGxvdzogIiM5NDk4MDAiLAogICAgICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgICAgIG1hZ2VudGE6ICIjYmMwNWJjIiwKICAgICAgICAgICAgY3lhbjogIiMwNTk4YmMiLAogICAgICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgICAgICBicmlnaHRCbGFjazogIiM2NjY2NjYiLAogICAgICAgICAgICBicmlnaHRSZWQ6ICIjY2QzMTMxIiwKICAgICAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2I1YmEwMCIsCiAgICAgICAgICAgIGJyaWdodEJsdWU6ICIjMDQ1MWE1IiwKICAgICAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgICAgICBicmlnaHRDeWFuOiAiIzA1OThiYyIsCiAgICAgICAgICAgIGJyaWdodFdoaXRlOiAiI2E1YTVhNSIKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICIjMDAwMDAwIiwKICAgICAgICAgICAgZm9yZWdyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBjdXJzb3I6ICIjZmZmZmZmIiwKICAgICAgICAgICAgY3Vyc29yQWNjZW50OiAiIzAwMDAwMCIsCiAgICAgICAgICAgIHNlbGVjdGlvbjogInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBuZXcgdGFiIGluc3RhbmNlCiAgICAgICAqLwogICAgICBjcmVhdGVUYWIob3B0aW9ucywgaXNCcmlnaHQpIHsKICAgICAgICBpZiAoIXRoaXMueHRlcm1CdW5kbGUgfHwgIXRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXJtaW5hbFRhYk1hbmFnZXI6IHh0ZXJtIG1vZHVsZXMgbm90IGluaXRpYWxpemVkLiBDYWxsIHNldFh0ZXJtTW9kdWxlcygpIGZpcnN0LiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVUYWJJZCgpOwogICAgICAgIGNvbnN0IHR5cGU1ID0gb3B0aW9ucy50eXBlOwogICAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IHRoaXMueHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgICAgY29udmVydEVvbDogdHJ1ZSwKICAgICAgICAgIGN1cnNvckJsaW5rOiB0cnVlLAogICAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCksCiAgICAgICAgICBmb250RmFtaWx5OiAnTWVubG8sIE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJywKICAgICAgICAgIGZvbnRTaXplOiAxMywKICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuMgogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGZpdEFkZG9uID0gbmV3IHRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZS5GaXRBZGRvbigpOwogICAgICAgIHRlcm1pbmFsLmxvYWRBZGRvbihmaXRBZGRvbik7CiAgICAgICAgY29uc3QgdGFiMiA9IHsKICAgICAgICAgIGlkLAogICAgICAgICAgbGFiZWw6IG9wdGlvbnMubGFiZWwgfHwgdGhpcy5nZXREZWZhdWx0TGFiZWwodHlwZTUsIG9wdGlvbnMubWV0YWRhdGEpLAogICAgICAgICAgaWNvbk5hbWU6IG9wdGlvbnMuaWNvbk5hbWUgfHwgdGhpcy5nZXREZWZhdWx0SWNvbih0eXBlNSksCiAgICAgICAgICB0eXBlOiB0eXBlNSwKICAgICAgICAgIGNsb3NlYWJsZTogb3B0aW9ucy5jbG9zZWFibGUgPz8gdHlwZTUgIT09ICJzaGVsbCIsCiAgICAgICAgICB0ZXJtaW5hbCwKICAgICAgICAgIGZpdEFkZG9uLAogICAgICAgICAgcHJvY2VzczogbnVsbCwKICAgICAgICAgIGlucHV0V3JpdGVyOiBudWxsLAogICAgICAgICAgZXhpdGVkOiBmYWxzZSwKICAgICAgICAgIGV4aXRDb2RlOiBudWxsLAogICAgICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLAogICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEKICAgICAgICB9OwogICAgICAgIHRoaXMudGFicy5zZXQoaWQsIHRhYjIpOwogICAgICAgIHJldHVybiB0YWIyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGFiIGJ5IElECiAgICAgICAqLwogICAgICBnZXRUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmdldChpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBhbGwgdGFicyBhcyBhcnJheSAob3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lKQogICAgICAgKi8KICAgICAgZ2V0QWxsVGFicygpIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYnMudmFsdWVzKCkpLnNvcnQoKGE1LCBiNSkgPT4gYTUuY3JlYXRlZEF0IC0gYjUuY3JlYXRlZEF0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBudW1iZXIgb2YgdGFicwogICAgICAgKi8KICAgICAgZ2V0VGFiQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudGFicy5zaXplOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiB0YWIgZXhpc3RzCiAgICAgICAqLwogICAgICBoYXNUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmhhcyhpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsb3NlIGFuZCBjbGVhbnVwIGEgdGFiCiAgICAgICAqLwogICAgICBjbG9zZVRhYihpZCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHRhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRhYjIucHJvY2Vzcy5raWxsKCk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8ga2lsbCBwcm9jZXNzOiIsIGUxMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGRpc3Bvc2UgdGVybWluYWw6IiwgZTExKTsKICAgICAgICB9CiAgICAgICAgdGhpcy50YWJzLmRlbGV0ZShpZCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbmFtZSBhIHRhYgogICAgICAgKi8KICAgICAgcmVuYW1lVGFiKGlkLCBuZXdMYWJlbCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdGFiMi5sYWJlbCA9IG5ld0xhYmVsOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGUgdGFiIHByb2Nlc3Mgc3RhdGUgdG8gZXhpdGVkCiAgICAgICAqLwogICAgICBtYXJrVGFiRXhpdGVkKGlkLCBleGl0Q29kZSkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGFiMi5leGl0ZWQgPSB0cnVlOwogICAgICAgIHRhYjIuZXhpdENvZGUgPSBleGl0Q29kZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHByb2Nlc3MgZm9yIGEgdGFiCiAgICAgICAqLwogICAgICBzZXRUYWJQcm9jZXNzKGlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpIHsKICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJzLmdldChpZCk7CiAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRhYjIucHJvY2VzcyA9IHByb2Nlc3M0OwogICAgICAgIHRhYjIuaW5wdXRXcml0ZXIgPSBpbnB1dFdyaXRlcjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVXBkYXRlIHRoZW1lIGZvciBhbGwgdGVybWluYWxzCiAgICAgICAqLwogICAgICB1cGRhdGVBbGxUaGVtZXMoaXNCcmlnaHQpIHsKICAgICAgICBjb25zdCB0aGVtZSA9IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCk7CiAgICAgICAgZm9yIChjb25zdCB0YWIyIG9mIHRoaXMudGFicy52YWx1ZXMoKSkgewogICAgICAgICAgdGFiMi50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhlbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEaXNwb3NlIGFsbCB0YWJzIGFuZCBjbGVhbnVwCiAgICAgICAqLwogICAgICBkaXNwb3NlQWxsKCkgewogICAgICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLnRhYnMpIHsKICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaWQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRhYnMuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcwp2YXIgZGVlc193b3Jrc3BhY2VfdGVybWluYWxfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzLCB7CiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOiAoKSA9PiBEZWVzV29ya3NwYWNlVGVybWluYWwKfSk7CnZhciBfX2VzRGVjb3JhdGU4NSwgX19ydW5Jbml0aWFsaXplcnM4NiwgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kaXN0X3RzMjgoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZ3JvdXBfcnVudGltZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19hY3Rpb25iYXIoKTsKICAgIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIoKTsKICAgIGluaXRfc2VydmljZXMoKTsKICAgIF9fZXNEZWNvcmF0ZTg1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNXb3Jrc3BhY2VUZXJtaW5hbCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFiQmFyV2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VGFiQmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlVGFiSWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfdGFiQmFyV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfdGFic19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2FjdGl2ZVRhYklkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9zZXR1cENvbW1hbmRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2V0dXBDb21tYW5kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2V0dXBDb21tYW5kLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBfc2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbnZpcm9ubWVudFZhcmlhYmxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW52aXJvbm1lbnRWYXJpYWJsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW52aXJvbm1lbnRWYXJpYWJsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfaW5pdGlhbGl6ZXJzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX3RhYkJhcldpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkJhcldpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJCYXJXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJCYXJXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYkJhcldpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VGFiQmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFiQmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dUYWJCYXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VGFiQmFyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VGFiQmFyX2luaXRpYWxpemVycywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGFic19pbml0aWFsaXplcnMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9hY3RpdmVUYWJJZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVUYWJJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlVGFiSWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlVGFiSWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmVUYWJJZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlVGFiSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVudjIgPSBuZXcgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7ZW52Mn0+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD5gOwogICAgICAgIH07CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIldvcmtzcGFjZSJdOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgcmVzaXplT2JzZXJ2ZXI7CiAgICAgICAgdGFiTWFuYWdlcjsKICAgICAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAocmVxdWlyZWQpLgogICAgICAgICAqIFVzZSBXZWJDb250YWluZXJFbnZpcm9ubWVudCBmb3IgYnJvd3Nlci1iYXNlZCBleGVjdXRpb24uCiAgICAgICAgICovCiAgICAgICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHNldHVwQ29tbWFuZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgLyoqCiAgICAgICAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgc2hlbGwKICAgICAgICAgKi8KICAgICAgICBnZXQgZW52aXJvbm1lbnRWYXJpYWJsZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVudmlyb25tZW50VmFyaWFibGVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIDE2MCkpOwogICAgICAgIC8qKgogICAgICAgICAqIFdpZHRoIG9mIHRoZSB0YWIgYmFyIGluIHBpeGVscwogICAgICAgICAqLwogICAgICAgIGdldCB0YWJCYXJXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFiQmFyV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfc2hvd1RhYkJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICAvKioKICAgICAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHRhYiBiYXIKICAgICAgICAgKi8KICAgICAgICBnZXQgc2hvd1RhYkJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93VGFiQmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICAvLyBUYWIgc3RhdGUKICAgICAgICBnZXQgdGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGFjdGl2ZVRhYklkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3RpdmVUYWJJZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRoZW1lIHN1YnNjcmlwdGlvbiBmb3IgZHluYW1pYyB0aGVtZSB1cGRhdGVzCiAgICAgICAgdGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGlzQnJpZ2h0ID0gZmFsc2U7CiAgICAgICAgLy8gQWN0aW9uYmFyIHJlZmVyZW5jZSBmb3IgdGVybWluYWwtY29udGV4dCBub3RpZmljYXRpb25zCiAgICAgICAgdGVybWluYWxBY3Rpb25iYXIgPSBudWxsOwogICAgICAgIC8qKgogICAgICAgICAqIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyByZWFkeS4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZXhlY3V0aW9uRW52aXJvbm1lbnQgZGlyZWN0bHkKICAgICAgICAgKi8KICAgICAgICBlbnZpcm9ubWVudERlZmVycmVkID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuRGVmZXJyZWQoKTsKICAgICAgICBlbnZpcm9ubWVudFByb21pc2UgPSB0aGlzLmVudmlyb25tZW50RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIgPSBuZXcgVGVybWluYWxUYWJNYW5hZ2VyKCk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgICNhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgZGVlcy1hY3Rpb25iYXIgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUYWIgYmFyIG9uIHRoZSByaWdodCBzaWRlICovCiAgICAgIC50YWItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudGFiLWJhci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItYmFyLXRpdGxlIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC50YWItYmFyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uIHsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBoZWlnaHQ6IDIycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAudGFiLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyNSUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDk1JSkiLCAiaHNsKDIxMCAzMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0MCUpIiwgImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiLmV4aXRlZCB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAudGFiLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLWljb24ucnVubmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA0MCUpIiwgImhzbCgxNDIgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuZXhpdC1iYWRnZSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDFweCA1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA5MCUpIiwgImhzbCgxNDIgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDkzJSkiLCAiaHNsKDAgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZSB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLyogeHRlcm0uanMgc3R5bGVzICovCiAgICAgIC54dGVybSB7CiAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYScgMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybS5mb2N1cywKICAgICAgLnh0ZXJtOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogLTU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZmZmZmZmIil9OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3LmFjdGl2ZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC54dGVybSB7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMgewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWFjY2Vzc2liaWxpdHksCiAgICAgIC54dGVybSAueHRlcm0tbWVzc2FnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC54dGVybSAubGl2ZS1yZWdpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWRpbSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAueHRlcm0tdW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWJJZCA/IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgOiBudWxsOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgIDwhLS0gTWFpbiB0ZXJtaW5hbCBhcmVhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiPgogICAgICAgICAgJHthY3RpdmVUYWIgPyBiMmAKICAgICAgICAgICAgPGRpdiBpZD0iYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp0ZXJtaW5hbCJ9IGljb25TaXplPSIzMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4+Tm8gdGVybWluYWwgb3Blbjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVydGljYWwgdGFiIGJhciBvbiB0aGUgcmlnaHQgLS0+CiAgICAgICAgJHt0aGlzLnNob3dUYWJCYXIgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnRhYkJhcldpZHRofXB4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1oZWFkZXIiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItYmFyLXRpdGxlIj5UZXJtaW5hbHM8L3NwYW4+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1hY3Rpb25zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1hY3Rpb24iIEBjbGljaz0ke3RoaXMuaGFuZGxlQWRkVGFifSB0aXRsZT0iTmV3IFRlcm1pbmFsIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGx1cyJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItbGlzdCI+CiAgICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InRlcm1pbmFsLXRhYiAke3RhYjIuaWQgPT09IHRoaXMuYWN0aXZlVGFiSWQgPyAiYWN0aXZlIiA6ICIifSAke3RhYjIuZXhpdGVkID8gImV4aXRlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAuaWNvbj0ke3RhYjIuaWNvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWItaWNvbiAke3RhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQgPyAicnVubmluZyIgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1sYWJlbCI+JHt0YWIyLmxhYmVsfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgJHt0YWIyLmV4aXRlZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJleGl0LWJhZGdlICR7dGFiMi5leGl0Q29kZSA9PT0gMCA/ICJzdWNjZXNzIiA6ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICR7dGFiMi5leGl0Q29kZX0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0YWIyLmNsb3NlYWJsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0keyhlMTEpID0+IHRoaXMuaGFuZGxlVGFiQ2xvc2UoZTExLCB0YWIyLmlkKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICB0aGlzLmlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgICAgdGhpcy5pc0JyaWdodCA9IGdvQnJpZ2h0OwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIudXBkYXRlQWxsVGhlbWVzKGdvQnJpZ2h0KTsKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgIGNvbnN0IFt4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpCiAgICAgICAgICBdKTsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5zZXRYdGVybU1vZHVsZXMoeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlKTsKICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2hlbGxUYWIoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24pIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuZGlzcG9zZUFsbCgpOwogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBUYWIgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgaGFuZGxlQWRkVGFiKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVUYWJDbG9zZShlMTEsIHRhYklkKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB0aGlzLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoVG9UYWIodGFiSWQpIHsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwcmV2aW91c1RhYklkID0gdGhpcy5hY3RpdmVUYWJJZDsKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYklkKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLmF0dGFjaFRlcm1pbmFsVG9Db250YWluZXIodGFiMik7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zd2l0Y2hlZCIsIHsKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICAgIGRldGFpbDogeyB0YWJJZCwgcHJldmlvdXNUYWJJZCB9CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBkZXRhY2hBY3RpdmVUZXJtaW5hbCgpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhdHRhY2hUZXJtaW5hbFRvQ29udGFpbmVyKHRhYjIpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgIHRhYjIudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgIHRhYjIudGVybWluYWwuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlUmVzaXplKCkgewogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCk7CiAgICAgICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFByb2Nlc3MgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsIGNvbW1hbmQsIGFyZ3MgPSBbXSkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx4MUJbMzFtIik7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx1Mjc0QyBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlLlxyXG4iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlswbSIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJJbml0aWFsaXppbmcgZW52aXJvbm1lbnQuLi5cclxuIik7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnNwYXduKGNvbW1hbmQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhMTEpID0+IHsKICAgICAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoZGF0YTExKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgY29uc3QgaW5wdXRXcml0ZXIgPSBwcm9jZXNzNC5pbnB1dC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC5vbkRhdGEoKGRhdGExMSkgPT4gewogICAgICAgICAgICAgIGlucHV0V3JpdGVyLndyaXRlKGRhdGExMSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuc2V0VGFiUHJvY2Vzcyh0YWIyLmlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpOwogICAgICAgICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgICAgICBwcm9jZXNzNC5leGl0LnRoZW4oKGV4aXRDb2RlKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9jZXNzRXhpdCh0YWIyLmlkLCBleGl0Q29kZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlszMW0iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZShgXHUyNzRDIEZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiAke2Vycm9yfVxyCmApOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJceDFCWzBtIik7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlUHJvY2Vzc0V4aXQodGFiSWQsIGV4aXRDb2RlKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5tYXJrVGFiRXhpdGVkKHRhYklkLCBleGl0Q29kZSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlMiA9IGV4aXRDb2RlID09PSAwID8gIlxyXG5ceDFCWzMybVtQcm9jZXNzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHldXHgxQlswbVxyXG4iIDogYFxyClx4MUJbMzFtW1Byb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2V4aXRDb2RlfV1ceDFCWzBtXHIKYDsKICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUobWVzc2FnZTIpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInByb2Nlc3MtY29tcGxldGUiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQsIGV4aXRDb2RlIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICh0YWIyLmNsb3NlYWJsZSkgewogICAgICAgICAgICB0aGlzLnNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYjIubGFiZWwsIGV4aXRDb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhY3Rpb25iYXIgb2ZmZXJpbmcgdG8gY2xvc2UgYW4gZXhpdGVkIHRhYgogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYkxhYmVsLCBleGl0Q29kZSkgewogICAgICAgICAgY29uc3QgaXNTdWNjZXNzID0gZXhpdENvZGUgPT09IDA7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dBY3Rpb25iYXIoewogICAgICAgICAgICBtZXNzYWdlOiBpc1N1Y2Nlc3MgPyBgIiR7dGFiTGFiZWx9IiBjb21wbGV0ZWQuIENsb3NlIHRhYj9gIDogYCIke3RhYkxhYmVsfSIgZXhpdGVkIChjb2RlICR7ZXhpdENvZGV9KS4gQ2xvc2UgdGFiP2AsCiAgICAgICAgICAgIHR5cGU6IGlzU3VjY2VzcyA/ICJpbmZvIiA6ICJ3YXJuaW5nIiwKICAgICAgICAgICAgaWNvbjogaXNTdWNjZXNzID8gImx1Y2lkZTpjaGVja0NpcmNsZSIgOiAibHVjaWRlOmFsZXJ0VHJpYW5nbGUiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImNsb3NlIiwgbGFiZWw6ICJDbG9zZSBUYWIiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogImtlZXAiLCBsYWJlbDogIktlZXAgT3BlbiIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxZTQsIGRlZmF1bHRBY3Rpb25JZDogImNsb3NlIiB9LAogICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAocmVzdWx0LmFjdGlvbklkID09PSAiY2xvc2UiKSB7CiAgICAgICAgICAgIHRoaXMuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIG5ldyBzaGVsbCB0YWIKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVTaGVsbFRhYihsYWJlbCkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5jcmVhdGVUYWIoewogICAgICAgICAgICB0eXBlOiAic2hlbGwiLAogICAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgYGJhc2ggJHt0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSArIDF9YCwKICAgICAgICAgICAgY2xvc2VhYmxlOiB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSA+IDAKICAgICAgICAgICAgLy8gRmlyc3QgdGFiIG5vdCBjbG9zZWFibGUKICAgICAgICAgIH0sIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCk7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgImpzaCIpOwogICAgICAgICAgaWYgKHRoaXMudGFiTWFuYWdlci5nZXRUYWJDb3VudCgpID09PSAxICYmIHRoaXMuc2V0dXBDb21tYW5kKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclByb21wdCh0YWIyLnRlcm1pbmFsLCAifi8iKTsKICAgICAgICAgICAgaWYgKHRhYjIuaW5wdXRXcml0ZXIpIHsKICAgICAgICAgICAgICB0YWIyLmlucHV0V3JpdGVyLndyaXRlKHRoaXMuc2V0dXBDb21tYW5kKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIHRlcm1pbmFsIHRhYiBmb3IgcnVubmluZyBhIHByb2Nlc3MKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVQcm9jZXNzVGFiKG9wdGlvbnMpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKG9wdGlvbnMsIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIGlmIChvcHRpb25zLnN3aXRjaFRvVGFiICE9PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYjIuaWQpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGlmIChvcHRpb25zLmNvbW1hbmQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgb3B0aW9ucy5jb21tYW5kLCBvcHRpb25zLmFyZ3MpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIKICAgICAgICAgKi8KICAgICAgICBnZXRBY3RpdmVUYWIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlVGFiSWQpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgcmV0dXJuIHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgfHwgbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGFsbCB0YWJzCiAgICAgICAgICovCiAgICAgICAgZ2V0VGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTd2l0Y2ggdG8gYSBzcGVjaWZpYyB0YWIgYnkgSUQKICAgICAgICAgKi8KICAgICAgICBzZWxlY3RUYWIodGFiSWQpIHsKICAgICAgICAgIGlmICghdGhpcy50YWJNYW5hZ2VyLmhhc1RhYih0YWJJZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiSWQpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsb3NlIGEgdGFiIGJ5IElECiAgICAgICAgICovCiAgICAgICAgY2xvc2VUYWIodGFiSWQpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5jbG9zZWFibGUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkgewogICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsVGFicy5maW5kSW5kZXgoKHQ5KSA9PiB0OS5pZCA9PT0gdGFiSWQpOwogICAgICAgICAgICBjb25zdCBuZXh0VGFiID0gYWxsVGFic1tjdXJyZW50SW5kZXggKyAxXSB8fCBhbGxUYWJzW2N1cnJlbnRJbmRleCAtIDFdOwogICAgICAgICAgICBpZiAobmV4dFRhYikgewogICAgICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIobmV4dFRhYi5pZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBY3RpdmVUZXJtaW5hbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFdyaXRlIGRhdGEgdG8gYSB0YWIncyB0ZXJtaW5hbAogICAgICAgICAqLwogICAgICAgIHdyaXRlVG9UYWIodGFiSWQsIGRhdGExMSkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKGRhdGExMSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2VuZCBpbnB1dCB0byBhIHRhYidzIHByb2Nlc3MgKGlmIGludGVyYWN0aXZlKQogICAgICAgICAqLwogICAgICAgIHNlbmRJbnB1dFRvVGFiKHRhYklkLCBkYXRhMTEpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5pbnB1dFdyaXRlcikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGFiMi5pbnB1dFdyaXRlci53cml0ZShkYXRhMTEpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNob3cgYW4gYWN0aW9uYmFyIG5vdGlmaWNhdGlvbiBpbiB0aGUgdGVybWluYWwgcGFuZWwgY29udGV4dC4KICAgICAgICAgKiBVc2UgdGhpcyBmb3IgdGVybWluYWwtcmVsYXRlZCBkZWNpc2lvbnMgKGUuZy4sIHJldHJ5IGZhaWxlZCBwcm9jZXNzLCBraWxsIHByb2Nlc3MsIGV0Yy4pCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgc2hvd0FjdGlvbmJhcihvcHRpb25zKSB7CiAgICAgICAgICBpZiAoIXRoaXMudGVybWluYWxBY3Rpb25iYXIpIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbEFjdGlvbmJhciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLnRlcm1pbmFsQWN0aW9uYmFyPy5zaG93KG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFV0aWxpdHkgTWV0aG9kcyA9PT09PT09PT09CiAgICAgICAgYXN5bmMgd2FpdEZvclByb21wdCh0ZXJtLCBwcm9tcHQpIHsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgICAgY29uc3QgY2hlY2tQcm9tcHQgPSAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSB0ZXJtLmJ1ZmZlci5hY3RpdmU7CiAgICAgICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgbGluZXMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzLmdldExpbmUoaTExKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lICYmIGxpbmUudHJhbnNsYXRlVG9TdHJpbmcoKS5pbmNsdWRlcyhwcm9tcHQpKSB7CiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVja1Byb21wdCwgMTAwKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY2hlY2tQcm9tcHQoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBzZXRFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZBcmcpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBhdmFpbGFibGUiKTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBlbnZGaWxlID0gIiI7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgaW4gZW52QXJnKSB7CiAgICAgICAgICAgIGVudkZpbGUgKz0gYGV4cG9ydCAke2tleTJ9PSIke2VudkFyZ1trZXkyXX0iCmA7CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZSgiL3NvdXJjZS5lbnYiLCBlbnZGaWxlKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSB1bmRlcmx5aW5nIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KICAgICAgICAgKi8KICAgICAgICBnZXRFeGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50OwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWFwcGRhc2gvZGVlcy1zaW1wbGUtYXBwZGFzaC5kZW1vLmpzCnZhciBfX2VzRGVjb3JhdGU4NiwgX19ydW5Jbml0aWFsaXplcnM4NywgRGVtb1ZpZXdEYXNoYm9hcmQsIERlbW9WaWV3QW5hbHl0aWNzLCBEZW1vVmlld1NldHRpbmdzLCBkZW1vRnVuYzUxOwp2YXIgaW5pdF9kZWVzX3NpbXBsZV9hcHBkYXNoX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19mb3JtKCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdGV4dCgpOwogICAgaW5pdF9kZWVzX2lucHV0X2NoZWNrYm94KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfZHJvcGRvd24oKTsKICAgIGluaXRfZGVlc19pbnB1dF9yYWRpb2dyb3VwKCk7CiAgICBpbml0X2RlZXNfZm9ybV9zdWJtaXQoKTsKICAgIGluaXRfZGVlc19zdGF0c2dyaWQoKTsKICAgIF9fZXNEZWNvcmF0ZTg2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzODcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlbW9WaWV3RGFzaGJvYXJkID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1kYXNoYm9hcmQiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICB2YXIgRGVtb1ZpZXdEYXNoYm9hcmQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZW1vVmlld0Rhc2hib2FyZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAidXNlcnMiLAogICAgICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgICAgIHZhbHVlOiAxMjM0LAogICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgaWNvbjogImZhVXNlcnMiLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIisxNSUgZnJvbSBsYXN0IHdlZWsiLAogICAgICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogInBhZ2V2aWV3cyIsCiAgICAgICAgICAgIHRpdGxlOiAiUGFnZSBWaWV3cyIsCiAgICAgICAgICAgIHZhbHVlOiA1NjcwMCwKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIGljb246ICJmYUV5ZSIsCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiNTYuN2sgdG90YWwgdmlld3MiLAogICAgICAgICAgICBjb2xvcjogIiMzYjgyZjYiCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogInVwdGltZSIsCiAgICAgICAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgICAgICAgIHZhbHVlOiA4OSwKICAgICAgICAgICAgdW5pdDogIiUiLAogICAgICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgICAgICBpY29uOiAiZmFTZXJ2ZXIiLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIkxhc3QgMzAgZGF5cyIsCiAgICAgICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgICAgICAgIG1pbjogMCwKICAgICAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICIjZWY0NDQ0IiB9LAogICAgICAgICAgICAgICAgeyB2YWx1ZTogOTAsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgICAgIHsgdmFsdWU6IDEwMCwgY29sb3I6ICIjMTBiOTgxIiB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICAgICAgdGl0bGU6ICJBdmcgUmVzcG9uc2UgVGltZSIsCiAgICAgICAgICAgIHZhbHVlOiAzLjIsCiAgICAgICAgICAgIHVuaXQ6ICJzIiwKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIGljb246ICJmYUNsb2NrIiwKICAgICAgICAgICAgZGVzY3JpcHRpb246ICItMC41cyBpbXByb3ZlbWVudCIsCiAgICAgICAgICAgIGNvbG9yOiAiI2Y1OWUwYiIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAicmV2ZW51ZSIsCiAgICAgICAgICAgIHRpdGxlOiAiTW9udGhseSBSZXZlbnVlIiwKICAgICAgICAgICAgdmFsdWU6IDQ4NTIwLAogICAgICAgICAgICB1bml0OiAiJCIsCiAgICAgICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgICAgIGljb246ICJmYURvbGxhclNpZ24iLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIis4LjIlIGdyb3d0aCIsCiAgICAgICAgICAgIGNvbG9yOiAiIzIyYzU1ZSIsCiAgICAgICAgICAgIHRyZW5kRGF0YTogWzM1ZTMsIDM4ZTMsIDM3NTAwLCA0MWUzLCAzOTgwMCwgNDJlMywgNDQxMDAsIDQzMjAwLCA0NTYwMCwgNDcxMDAsIDQ2ODAwLCA0ODUyMF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGlkOiAidHJhZmZpYyIsCiAgICAgICAgICAgIHRpdGxlOiAiVHJhZmZpYyBUcmVuZCIsCiAgICAgICAgICAgIHZhbHVlOiAxNjgwLAogICAgICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgICAgICBpY29uOiAiZmFDaGFydExpbmUiLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogIkxhc3QgNyBkYXlzIiwKICAgICAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICAgICAgdHJlbmREYXRhOiBbMTIwMCwgMTM1MCwgMTEwMCwgMTQ1MCwgMTYwMCwgMTU1MCwgMTY4MF0KICAgICAgICAgIH0KICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGgxPkRhc2hib2FyZDwvaDE+CiAgICAgIDxwPldlbGNvbWUgdG8geW91ciBhcHBsaWNhdGlvbiBkYXNoYm9hcmQuIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIG1ldHJpY3M6PC9wPgogICAgICA8ZGVlcy1zdGF0c2dyaWQKICAgICAgICAudGlsZXM9JHt0aGlzLnN0YXRzVGlsZXN9CiAgICAgICAgQHRpbGUtYWN0aW9uPSR7KGUxMSkgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCk7CiAgICAgICAgICB9fQogICAgICA+PC9kZWVzLXN0YXRzZ3JpZD4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczg3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZW1vVmlld0Rhc2hib2FyZDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICAgIERlbW9WaWV3QW5hbHl0aWNzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1hbmFseXRpY3MiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICB2YXIgRGVtb1ZpZXdBbmFseXRpY3MyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZW1vVmlld0FuYWx5dGljczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGgxPkFuYWx5dGljczwvaDE+CiAgICAgIDxwPlRoaXMgaXMgdGhlIGFuYWx5dGljcyB2aWV3LiBZb3UgY2FuIGFkZCBjaGFydHMgYW5kIG1ldHJpY3MgaGVyZS48L3A+CiAgICBgOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVtb1ZpZXdBbmFseXRpY3MyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgICBEZW1vVmlld1NldHRpbmdzID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1zZXR0aW5ncyIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIHZhciBEZW1vVmlld1NldHRpbmdzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX19lc0RlY29yYXRlODYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVtb1ZpZXdTZXR0aW5nczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5TZXR0aW5nczwvaDE+CiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGFwcGxpY2F0aW9uIHNldHRpbmdzIGJlbG93OjwvcD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5HZW5lcmFsIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwcE5hbWUiIGxhYmVsPSJBcHBsaWNhdGlvbiBOYW1lIiB2YWx1ZT0iTXkgQXBwIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcGlFbmRwb2ludCIgbGFiZWw9IkFQSSBFbmRwb2ludCIgdmFsdWU9Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iZW52aXJvbm1lbnQiCiAgICAgICAgICAgIGxhYmVsPSJFbnZpcm9ubWVudCIKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgICAgIHsgb3B0aW9uOiAiRGV2ZWxvcG1lbnQiLCBrZXk6ICJkZXYiIH0sCiAgICAgICAgICAgIHsgb3B0aW9uOiAiU3RhZ2luZyIsIGtleTogInN0YWdpbmciIH0sCiAgICAgICAgICAgIHsgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH0KICAgICAgICAgIF19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJlbmFibGVOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIE5vdGlmaWNhdGlvbnMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZUFuYWx5dGljcyIgbGFiZWw9IkVuYWJsZSBBbmFseXRpY3MiIHZhbHVlPSJmYWxzZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U2F2ZSBHZW5lcmFsIFNldHRpbmdzPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5EaXNwbGF5IFByZWZlcmVuY2VzPC9oMj4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWZvcm0tc2VjdGlvbiI+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPlF1aWNrIGRpc3BsYXkgc2V0dGluZ3MgdXNpbmcgaG9yaXpvbnRhbCBsYXlvdXQ6PC9wPgogICAgICAgICAgPGRlZXMtZm9ybSBob3Jpem9udGFsLWxheW91dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRoZW1lIgogICAgICAgICAgICAgIGxhYmVsPSJUaGVtZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgICAgIHsgb3B0aW9uOiAiTGlnaHQiLCBrZXk6ICJsaWdodCIgfSwKICAgICAgICAgICAgeyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfSwKICAgICAgICAgICAgeyBvcHRpb246ICJBdXRvIiwga2V5OiAiYXV0byIgfQogICAgICAgICAgXX0KICAgICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHt7IG9wdGlvbjogIkRhcmsiLCBrZXk6ICJkYXJrIiB9fQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0ibGFuZ3VhZ2UiCiAgICAgICAgICAgICAgbGFiZWw9Ikxhbmd1YWdlIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICAgICAgeyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH0sCiAgICAgICAgICAgIHsgb3B0aW9uOiAiR2VybWFuIiwga2V5OiAiZGUiIH0sCiAgICAgICAgICAgIHsgb3B0aW9uOiAiU3BhbmlzaCIsIGtleTogImVzIiB9LAogICAgICAgICAgICB7IG9wdGlvbjogIkZyZW5jaCIsIGtleTogImZyIiB9CiAgICAgICAgICBdfQogICAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiRW5nbGlzaCIsIGtleTogImVuIiB9fQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImNvbXBhY3RNb2RlIiBsYWJlbD0iQ29tcGFjdCBNb2RlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8aDI+Tm90aWZpY2F0aW9uIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiRW1haWwgRnJlcXVlbmN5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIlJlYWwtdGltZSIsICJEYWlseSBEaWdlc3QiLCAiV2Vla2x5IFN1bW1hcnkiLCAiTmV2ZXIiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlJlYWwtdGltZSJ9CiAgICAgICAgICAgIC5rZXk9JHsiZW1haWxGcmVxdWVuY3kifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gga2V5PSJwdXNoTm90aWZpY2F0aW9ucyIgbGFiZWw9IkVuYWJsZSBQdXNoIE5vdGlmaWNhdGlvbnMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InNvdW5kQWxlcnRzIiBsYWJlbD0iUGxheSBTb3VuZCBmb3IgQWxlcnRzIiB2YWx1ZT0idHJ1ZSI+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+VXBkYXRlIE5vdGlmaWNhdGlvbnM8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlbW9WaWV3U2V0dGluZ3MyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgICBkZW1vRnVuYzUxID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgYm9keSB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtc2ltcGxlLWFwcGRhc2gKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIHRlcm1pbmFsU2V0dXBDb21tYW5kPSJlY2hvICdXZWxjb21lIHRvIHRoZSB0ZXJtaW5hbCEnIgogICAgICAudmlld1RhYnM9JHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGFzaGJvYXJkIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpob21lIiwKICAgICAgICBlbGVtZW50OiBEZW1vVmlld0Rhc2hib2FyZAogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkFuYWx5dGljcyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGluZUNoYXJ0IiwKICAgICAgICBlbGVtZW50OiBEZW1vVmlld0FuYWx5dGljcwogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIlNldHRpbmdzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICAgICAgZWxlbWVudDogRGVtb1ZpZXdTZXR0aW5ncwogICAgICB9CiAgICBdfQogICAgICBAbG9nb3V0PSR7KCkgPT4gewogICAgICBjb25zb2xlLmxvZygiTG9nb3V0IGV2ZW50IHRyaWdnZXJlZCIpOwogICAgICBhbGVydCgiTG9nb3V0IGNsaWNrZWQhIik7CiAgICB9fQogICAgICBAdmlldy1zZWxlY3Q9JHsoZTExKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJWaWV3IHNlbGVjdGVkOiIsIGUxMS5kZXRhaWwudmlldy5uYW1lKTsKICAgIH19CiAgICA+PC9kZWVzLXNpbXBsZS1hcHBkYXNoPgogIDwvZGl2PgpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWFwcGRhc2gvZGVlcy1zaW1wbGUtYXBwZGFzaC5qcwp2YXIgX19lc0RlY29yYXRlODcsIF9fcnVuSW5pdGlhbGl6ZXJzODgsIERlZXNTaW1wbGVBcHBEYXNoOwp2YXIgaW5pdF9kZWVzX3NpbXBsZV9hcHBkYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWFwcGRhc2gvZGVlcy1zaW1wbGUtYXBwZGFzaC5qcyIoKSB7CiAgICBpbml0X2RlZXNfc2ltcGxlX2FwcGRhc2hfZGVtbygpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBfX2VzRGVjb3JhdGU4NyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczg4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzU2ltcGxlQXBwRGFzaCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNpbXBsZS1hcHBkYXNoIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdmlld1RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF92aWV3VGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFZpZXdfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzU2ltcGxlQXBwRGFzaDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9uYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfdmlld1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgICAgIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zZWxlY3RlZFZpZXdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF9uYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm5hbWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX25hbWVfaW5pdGlhbGl6ZXJzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfdmlld1RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld1RhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudmlld1RhYnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZpZXdUYWJzX2luaXRpYWxpemVycywgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGVybWluYWxTZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGVybWluYWxTZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50ZXJtaW5hbFNldHVwQ29tbWFuZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBfdGVybWluYWxTZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODcodGhpcywgbnVsbCwgX3NlbGVjdGVkVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZWxlY3RlZFZpZXcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVmlld19pbml0aWFsaXplcnMsIF9zZWxlY3RlZFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1MTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiU2ltcGxlIl07CiAgICAgICAgI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX25hbWVfaW5pdGlhbGl6ZXJzLCAiQXBwbGljYXRpb24gRGFzaGJvYXJkIik7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgbmFtZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfdmlld1RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCB2aWV3VGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN2aWV3VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdmlld1RhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN2aWV3VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgYGVjaG8gIlRlcm1pbmFsIHJlYWR5ImApKTsKICAgICAgICBnZXQgdGVybWluYWxTZXR1cENvbW1hbmQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfc2VsZWN0ZWRWaWV3X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IHNlbGVjdGVkVmlldygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFZpZXdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgMTglKSAwJSwgaHNsKDIxNSAyMCUgMTQlKSAxMDAlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMDUpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuNSkiLCAiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsICJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDMwJSkiLCAiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwgImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwgImhzbCgyMTUgNzAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHNwYW4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXBwQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCAiaHNsKDAgODQlIDYwJSAvIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC5jb250cm9sYmFyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCAxMyUgMTglKSIsICJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKCh2aWV3KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXcgPT09IHZpZXcgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMubG9hZFZpZXcodmlldyl9CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3ZpZXcuaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dmlldy5pY29uTmFtZS5pbmNsdWRlcygiOiIpID8gdmlldy5pY29uTmFtZSA6IGBsdWNpZGU6JHt2aWV3Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7dmlldy5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpID0+IHsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9nb3V0IiwgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7CiAgICAgICAgICB9fT4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bG9nT3V0In0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDxzcGFuPlNpZ24gb3V0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFwcGNvbnRlbnQiPgogICAgICAgICAgPCEtLSBDb250ZW50IGdvZXMgaGVyZSAtLT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wgc3RhdHVzLWNvbm5lY3RlZCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp3aWZpIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj5Db25uZWN0ZWQ8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wgc3RhdHVzLXRlcm1pbmFsIiBAY2xpY2s9JHt0aGlzLmxhdW5jaFRlcm1pbmFsfT4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOnRlcm1pbmFsIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj5UZXJtaW5hbDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzMiA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAodGhpcy52aWV3VGFicyAmJiB0aGlzLnZpZXdUYWJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3Qgdmlld1RvTG9hZCA9IHRoaXMuc2VsZWN0ZWRWaWV3IHx8IHRoaXMudmlld1RhYnNbMF07CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXcodmlld1RvTG9hZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRUZXJtaW5hbCA9IF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX3NlbGVjdGVkVmlld19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgYXN5bmMgbGF1bmNoVGVybWluYWwoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sczIgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUZXJtaW5hbCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbWFpbmNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpOwogICAgICAgICAgY29uc3QgeyBEZWVzV29ya3NwYWNlVGVybWluYWw6IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIgfSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKGluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKSwgZGVlc193b3Jrc3BhY2VfdGVybWluYWxfZXhwb3J0cykpOwogICAgICAgICAgY29uc3QgdGVybWluYWwgPSBuZXcgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMigpOwogICAgICAgICAgdGVybWluYWwuc2V0dXBDb21tYW5kID0gdGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZDsKICAgICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsID0gdGVybWluYWw7CiAgICAgICAgICBtYWluY29udGFpbmVyLmFwcGVuZENoaWxkKHRlcm1pbmFsKTsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLnpJbmRleCA9ICIxMCI7CiAgICAgICAgICB0ZXJtaW5hbC5zdHlsZS50b3AgPSAiMHB4IjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLmxlZnQgPSAiMjQwcHgiOwogICAgICAgICAgdGVybWluYWwuc3R5bGUucmlnaHQgPSAiMHB4IjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLmJvdHRvbSA9ICIyNHB4IjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgICB0ZXJtaW5hbC5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTkpIjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zaXRpb24gPSAiYWxsIDAuMjVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiOwogICAgICAgICAgdGVybWluYWwuc3R5bGUuYm94U2hhZG93ID0gIjAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuNSksIDAgMCAwIDFweCByZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KSI7CiAgICAgICAgICB0ZXJtaW5hbC5zdHlsZS5tYXhXaWR0aCA9IGBjYWxjKCR7bWFpbmNvbnRhaW5lci5jbGllbnRXaWR0aH1weCAtMjQwcHgpYDsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7bWFpbmNvbnRhaW5lci5jbGllbnRIZWlnaHR9cHggLSAyNHB4KWA7CiAgICAgICAgICB0ZXJtaW5hbC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRoaXMuY2xvc2VUZXJtaW5hbCgpKTsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzMi5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgICAgdGVybWluYWwuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIHNjYWxlKDEpIjsKICAgICAgICAgIHJldHVybiB0ZXJtaW5hbDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY2xvc2VUZXJtaW5hbCgpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzMiA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRlcm1pbmFsKSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyNTApOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5yZW1vdmUoKTsKICAgICAgICAgICAgdGhpcy5jdXJyZW50VGVybWluYWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjdXJyZW50VmlldzsKICAgICAgICBhc3luYyBsb2FkVmlldyh2aWV3QXJnKSB7CiAgICAgICAgICBjb25zdCBhcHBjb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50Iik7CiAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IHZpZXdBcmcuZWxlbWVudCgpOwogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5yZW1vdmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGFwcGNvbnRlbnQuYXBwZW5kQ2hpbGQodmlldyk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdmlld0FyZzsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInZpZXctc2VsZWN0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmlldzogdmlld0FyZyB9LAogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3NpbXBsZV9hcHBkYXNoMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXNpbXBsZS9kZWVzLXNpbXBsZS1hcHBkYXNoL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zaW1wbGVfYXBwZGFzaCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmRlbW8uanMKdmFyIGRlbW9GdW5jNTI7CnZhciBpbml0X2RlZXNfc2ltcGxlX2xvZ2luX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgZGVtb0Z1bmM1MiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1sb2dpbiAKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIEBsb2dpbj0keyhlMTEpID0+IHsKICAgICAgY29uc29sZS5sb2coIkxvZ2luIGV2ZW50IHJlY2VpdmVkOiIsIGUxMS5kZXRhaWwpOwogICAgICBjb25zdCBsb2dpbkRhdGEgPSBlMTEuZGV0YWlsPy5kYXRhIHx8IGUxMS5kZXRhaWw7CiAgICAgIGlmIChsb2dpbkRhdGE/LnVzZXJuYW1lICYmIGxvZ2luRGF0YT8ucGFzc3dvcmQpIHsKICAgICAgICBhbGVydChgTG9naW4gYXR0ZW1wdGVkIHdpdGg6ClVzZXJuYW1lOiAke2xvZ2luRGF0YS51c2VybmFtZX0KUGFzc3dvcmQ6ICR7bG9naW5EYXRhLnBhc3N3b3JkfWApOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6IiwgZTExLmRldGFpbCk7CiAgICAgIH0KICAgIH19CiAgICA+CiAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgIDxoMT5XZWxjb21lITwvaDE+CiAgICAgICAgPHA+VGhpcyBpcyB0aGUgc2xvdHRlZCBjb250ZW50IHRoYXQgYXBwZWFycyBhZnRlciBsb2dpbi48L3A+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXNpbXBsZS1sb2dpbj4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXNpbXBsZS9kZWVzLXNpbXBsZS1sb2dpbi9kZWVzLXNpbXBsZS1sb2dpbi5qcwp2YXIgX19lc0RlY29yYXRlODgsIF9fcnVuSW5pdGlhbGl6ZXJzODksIERlZXNTaW1wbGVMb2dpbjsKdmFyIGluaXRfZGVlc19zaW1wbGVfbG9naW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uanMiKCkgewogICAgaW5pdF9kZWVzX3NpbXBsZV9sb2dpbl9kZW1vKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlODggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM4OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1NpbXBsZUxvZ2luID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2ltcGxlLWxvZ2luIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzU2ltcGxlTG9naW4yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX19lc0RlY29yYXRlODgodGhpcywgbnVsbCwgX25hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5uYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTg4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNTaW1wbGVMb2dpbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUyOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJTaW1wbGUiXTsKICAgICAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4OSh0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICJBcHBsaWNhdGlvbiIpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IG5hbWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbmFtZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5sb2dpbkNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAuc2xvdENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubG9naW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdWJoZWFkZXIgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICB9CgogICAgICAubG9naW4tY2FyZCBkZWVzLWZvcm0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtaW5wdXQtdGV4dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybS1zdWJtaXQgewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJsb2dpbkNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4taGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj5TaWduIGluPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YmhlYWRlciI+RW50ZXIgeW91ciBjcmVkZW50aWFscyB0byBhY2Nlc3MgJHt0aGlzLm5hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luLWNhcmQiPgogICAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ1c2VybmFtZSIgbGFiZWw9IlVzZXJuYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJQYXNzd29yZCIgaXNQYXNzd29yZEJvb2wgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U2lnbiBpbjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNsb3RDb250YWluZXIiPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgICAgICBpZiAoZm9ybSkgewogICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibG9naW4iLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LmRldGFpbCwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIGFsbG93cyBzd2l0Y2hpbmcgdG8gc2xvdHRlZCBjb250ZW50CiAgICAgICAgICovCiAgICAgICAgYXN5bmMgc3dpdGNoVG9TbG90dGVkQ29udGVudCgpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzMiA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgY29uc3QgbG9naW5EaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ2luIik7CiAgICAgICAgICBjb25zdCBsb2dpbkNvbnRhaW5lckRpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW5Db250YWluZXIiKTsKICAgICAgICAgIGNvbnN0IHNsb3RDb250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNsb3RDb250YWluZXIiKTsKICAgICAgICAgIGxvZ2luRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgICBsb2dpbkRpdi5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWSgyMHB4KSI7CiAgICAgICAgICBsb2dpbkNvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOwogICAgICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWSgyMHB4KSI7CiAgICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApOwogICAgICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWSgwcHgpIjsKICAgICAgICAgIGF3YWl0IGRvbXRvb2xzMi5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwMCk7CiAgICAgICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYWxsIjsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM4OSh0aGlzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczg5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vaW5kZXguanMKdmFyIGluaXRfZGVlc19zaW1wbGVfbG9naW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zaW1wbGVfbG9naW4oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXNpbXBsZS9pbmRleC5qcwp2YXIgaW5pdF9ncm91cF9zaW1wbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3Nob3BwaW5nX3Byb2R1Y3RjYXJkMigpOwogICAgaW5pdF9kZWVzX3NpbXBsZV9hcHBkYXNoMigpOwogICAgaW5pdF9kZWVzX3NpbXBsZV9sb2dpbjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy1pY29uL2luZGV4LmpzCnZhciBpbml0X2RlZXNfaWNvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtaWNvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfaWNvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5kZW1vLmpzCnZhciBkZW1vRnVuYzUzOwp2YXIgaW5pdF9kZWVzX3NlYXJjaGJhcl9kZW1vID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBkZW1vRnVuYzUzID0gKCkgPT4gewogICAgICBjb25zdCBvbkNoYW5nZWQgPSAoZTExKSA9PiB7CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICAgICAgY29uc3QgZWwgPSB3cmFwcGVyPy5xdWVyeVNlbGVjdG9yKCIjY2hhbmdlZCIpOwogICAgICAgIGlmIChlbCkKICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gYHNlYXJjaC1jaGFuZ2VkOiAke2UxMS5kZXRhaWwudmFsdWV9YDsKICAgICAgfTsKICAgICAgY29uc3Qgb25TdWJtaXQgPSAoZTExKSA9PiB7CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICAgICAgY29uc3QgZWwgPSB3cmFwcGVyPy5xdWVyeVNlbGVjdG9yKCIjc3VibWl0dGVkIik7CiAgICAgICAgaWYgKGVsKQogICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBgc2VhcmNoLXN1Ym1pdDogJHtlMTEuZGV0YWlsLnZhbHVlfWA7CiAgICAgIH07CiAgICAgIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW9XcmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgCiAgICAgICAgYmFja2dyb3VuZDogIzg4ODg4ODsKICAgICAgfQogICAgICAubG9ncyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQogICAgICAubG9ncyBkaXYgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICAgIDxkZWVzLXNlYXJjaGJhcgogICAgICAgIEBzZWFyY2gtY2hhbmdlZD0ke29uQ2hhbmdlZH0KICAgICAgICBAc2VhcmNoLXN1Ym1pdD0ke29uU3VibWl0fQogICAgICA+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgPGRpdiBjbGFzcz0ibG9ncyI+CiAgICAgICAgPGRpdiBpZD0iY2hhbmdlZCI+c2VhcmNoLWNoYW5nZWQ6PC9kaXY+CiAgICAgICAgPGRpdiBpZD0ic3VibWl0dGVkIj5zZWFyY2gtc3VibWl0OjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcwp2YXIgX19lc0RlY29yYXRlODksIF9fcnVuSW5pdGlhbGl6ZXJzOTAsIERlZXNTZWFyY2hiYXI7CnZhciBpbml0X2RlZXNfc2VhcmNoYmFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9jb2xvcnMoKTsKICAgIGluaXRfZGVlc19zZWFyY2hiYXJfZGVtbygpOwogICAgaW5pdF90aGVtZSgpOwogICAgX19lc0RlY29yYXRlODkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM5MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1NlYXJjaGJhciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNlYXJjaGJhciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZmlsdGVyc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1NlYXJjaGJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9maWx0ZXJzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU4OSh0aGlzLCBudWxsLCBfZmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5maWx0ZXJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWx0ZXJzX2luaXRpYWxpemVycywgX2ZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlODkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1NlYXJjaGJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gREVNTwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1MzsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiVXRpbGl0eSJdOwogICAgICAgIC8vIFNUQVRJQwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3hDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDE1IiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZWVlZWViIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b24gewogICAgICAgIC0tYnV0dG9uUGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWUsIGRhcmsuYmx1ZSl9OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgI2ZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOTAodGhpcywgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBnZXQgZmlsdGVycygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmaWx0ZXJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBzZWFyY2hJbnB1dCA9IF9fcnVuSW5pdGlhbGl6ZXJzOTAodGhpcywgX2ZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIHNlYXJjaEJ1dHRvbjsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgfQogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoYm94Q29udGFpbmVyIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IllvdXIgU2tpbGxzIChlLmcuIFR5cGVTY3JpcHQsIFJ1c3QsIFByb2plY3RtYW5hZ2VtZW50KSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hCdXR0b24iPlNlYXJjaCAtPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlcnMiPgogICAgICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9ImhyLXNtYWxsIj5GaWx0ZXJzPC9kZWVzLWhlYWRpbmc+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24gLmxhYmVsPSR7ImxvY2F0aW9uIn0+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2Rpdj4gIAogICAgICBgIDogYjJgYH0KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIExpZmVjeWNsZTogYWZ0ZXIgZmlyc3QgcmVuZGVyLCB3aXJlIHVwIGV2ZW50cyBmb3IgaW5wdXQgYW5kIHN1Ym1pdCBhY3Rpb25zCiAgICAgICAgICovCiAgICAgICAgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLWNoYW5nZWQiLCB7CiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMuc2VhcmNoSW5wdXQudmFsdWUgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaFN1Ym1pdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuc2VhcmNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gdGhpcy5fZGlzcGF0Y2hTdWJtaXQoKSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIERpc3BhdGNoIGEgc3VibWl0IGV2ZW50IHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoIHZhbHVlCiAgICAgICAgICovCiAgICAgICAgX2Rpc3BhdGNoU3VibWl0KCkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLXN1Ym1pdCIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy5zZWFyY2hJbnB1dC52YWx1ZSB9CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczkwKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzU2VhcmNoYmFyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXNlYXJjaGJhci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3NlYXJjaGJhcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtc2VhcmNoYmFyL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19zZWFyY2hiYXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy10aGVtZS9kZWVzLXRoZW1lLmRlbW8uanMKdmFyIGRlbW9GdW5jNTQ7CnZhciBpbml0X2RlZXNfdGhlbWVfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy10aGVtZS9kZWVzLXRoZW1lLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGRlbW9GdW5jNTQgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICAgIHBhZGRpbmc6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgfQoKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgfQoKICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIH0KCiAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICB9CgogICAgLnRva2VuLWdyaWQgewogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgIGdhcDogMTZweDsKICAgIH0KCiAgICAudG9rZW4taXRlbSB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgcGFkZGluZzogMTZweDsKICAgIH0KCiAgICAudG9rZW4tbmFtZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIH0KCiAgICAudG9rZW4tdmFsdWUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zcGFjaW5nLWRlbW8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIGdhcDogOHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNwYWNpbmctYm94IHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5yYWRpdXMtZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTZweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5yYWRpdXMtYm94IHsKICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIGhlaWdodDogNjBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5zaGFkb3ctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMjRweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5zaGFkb3ctYm94IHsKICAgICAgd2lkdGg6IDEwMHB4OwogICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgfQoKICAgIC5oZWlnaHQtZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTZweDsKICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLmhlaWdodC1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICB3aWR0aDogMTIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtdGhlbWU+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNwYWNpbmcgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zcGFjaW5nLXhzIHRocm91Z2ggLS1kZWVzLXNwYWNpbmctM3hsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1kZW1vIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy14cyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj54cyAoNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctc20pOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+c20gKDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLW1kKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1kICgxMnB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbGcpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bGcgKDE2cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy14bCk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj54bCAoMjRweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLTJ4bCk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLTJ4bCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnhsICgzMnB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctM3hsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctM3hsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zeGwgKDQ4cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Cb3JkZXIgUmFkaXVzIFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtcmFkaXVzLXhzIHRocm91Z2ggLS1kZWVzLXJhZGl1cy1mdWxsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjJweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtc20pOyI+c208L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj42cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLWxnKTsiPmxnPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjhweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteGwpOyI+eGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MTJweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtZnVsbCk7Ij5mdWxsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjk5OXB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaGFkb3cgRWxldmF0aW9uIFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtc2hhZG93LXhzIHRocm91Z2ggLS1kZWVzLXNoYWRvdy1sZwogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1kZW1vIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy14cyk7Ij54czwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5taW5pbWFsPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zdWJ0bGU8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1lZGl1bTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+cHJvbWluZW50PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Db250cm9sIEhlaWdodCBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtIHRocm91Z2ggLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MzZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LWxnKTsiPmxnPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQwcHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UcmFuc2l0aW9uIER1cmF0aW9uczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXRyYW5zaXRpb24tZmFzdCB0aHJvdWdoIC0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWdyaWQiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLWZhc3Q8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLWRlZmF1bHQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMTVzPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4tLWRlZXMtdHJhbnNpdGlvbi1zbG93PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLXZhbHVlIj4wLjJzPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4tLWRlZXMtdHJhbnNpdGlvbi1zbG93ZXI8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuM3M8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy10aGVtZT4KICA8L2Rpdj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy10aGVtZS9kZWVzLXRoZW1lLmpzCnZhciBfX2VzRGVjb3JhdGU5MCwgX19ydW5Jbml0aWFsaXplcnM5MSwgRGVlc1RoZW1lOwp2YXIgaW5pdF9kZWVzX3RoZW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZGVlc190aGVtZV9kZW1vKCk7CiAgICBfX2VzRGVjb3JhdGU5MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczkxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzVGhlbWUgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy10aGVtZSIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY3VzdG9tU3BhY2luZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1c3RvbVNwYWNpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VzdG9tU3BhY2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXN0b21SYWRpdXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXN0b21UcmFuc2l0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXN0b21UcmFuc2l0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY3VzdG9tQ29udHJvbEhlaWdodHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNUaGVtZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgICAgIF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX19lc0RlY29yYXRlOTAodGhpcywgbnVsbCwgX2N1c3RvbVNwYWNpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tU3BhY2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tU3BhY2luZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXN0b21TcGFjaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VzdG9tU3BhY2luZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIF9jdXN0b21TcGFjaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkwKHRoaXMsIG51bGwsIF9jdXN0b21SYWRpdXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tUmFkaXVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21SYWRpdXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tUmFkaXVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VzdG9tUmFkaXVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21SYWRpdXNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkwKHRoaXMsIG51bGwsIF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVNoYWRvd3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVNoYWRvd3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tU2hhZG93cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmN1c3RvbVNoYWRvd3MgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVNoYWRvd3NfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tU2hhZG93c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5MCh0aGlzLCBudWxsLCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tVHJhbnNpdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVRyYW5zaXRpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVRyYW5zaXRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VzdG9tVHJhbnNpdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVRyYW5zaXRpb25zX2luaXRpYWxpemVycywgX2N1c3RvbVRyYW5zaXRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkwKHRoaXMsIG51bGwsIF9jdXN0b21Db250cm9sSGVpZ2h0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXN0b21Db250cm9sSGVpZ2h0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tQ29udHJvbEhlaWdodHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tQ29udHJvbEhlaWdodHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tQ29udHJvbEhlaWdodHNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1RoZW1lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTQ7CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIlV0aWxpdHkiXTsKICAgICAgICAjY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIG51bGwpOwogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUHJvcGVydGllcyBmb3IgdGhlbWUgb3ZlcnJpZGVzCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBnZXQgY3VzdG9tU3BhY2luZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXN0b21TcGFjaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXN0b21TcGFjaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tU3BhY2luZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTEodGhpcywgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgY3VzdG9tUmFkaXVzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVJhZGl1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VzdG9tUmFkaXVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgY3VzdG9tU2hhZG93cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXN0b21TaGFkb3dzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VzdG9tU2hhZG93c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY3VzdG9tVHJhbnNpdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczkxKHRoaXMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGN1c3RvbVRyYW5zaXRpb25zKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVRyYW5zaXRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXN0b21UcmFuc2l0aW9ucyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1c3RvbVRyYW5zaXRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjdXN0b21Db250cm9sSGVpZ2h0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTEodGhpcywgX2N1c3RvbVRyYW5zaXRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5MSh0aGlzLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGN1c3RvbUNvbnRyb2xIZWlnaHRzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXN0b21Db250cm9sSGVpZ2h0cyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gU3R5bGVzCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIFJlbmRlcgogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgJHt0aGlzLmdlbmVyYXRlQ3VzdG9tU3R5bGVzKCl9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUHJpdmF0ZSBNZXRob2RzCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICBnZW5lcmF0ZUN1c3RvbVN0eWxlcygpIHsKICAgICAgICAgIGNvbnN0IHN0eWxlczMgPSBbIjpob3N0IHsiXTsKICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNwYWNpbmcpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNwYWNpbmcpKSB7CiAgICAgICAgICAgICAgaWYgKHZhbHVlMikgewogICAgICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVJhZGl1cykgewogICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tUmFkaXVzKSkgewogICAgICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtcmFkaXVzLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNoYWRvd3MpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNoYWRvd3MpKSB7CiAgICAgICAgICAgICAgaWYgKHZhbHVlMikgewogICAgICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zaGFkb3ctJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVRyYW5zaXRpb25zKSkgewogICAgICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGNzc0tleSA9IGtleTIgPT09ICJkZWZhdWx0IiA/ICJkZWZhdWx0IiA6IGtleTI7CiAgICAgICAgICAgICAgICBzdHlsZXMzLnB1c2goYCAgLS1kZWVzLXRyYW5zaXRpb24tJHtjc3NLZXl9OiAke3ZhbHVlMn07YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cykgewogICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKSB7CiAgICAgICAgICAgICAgaWYgKHZhbHVlMikgewogICAgICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1jb250cm9sLWhlaWdodC0ke2tleTJ9OiAke3ZhbHVlMn07YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzdHlsZXMzLnB1c2goIn0iKTsKICAgICAgICAgIHJldHVybiBzdHlsZXMzLmpvaW4oIlxuIik7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgLy8gUHVibGljIEFQSSBNZXRob2RzCiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgYSBzcGFjaW5nIHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgICAgICovCiAgICAgICAgc2V0U3BhY2luZyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuY3VzdG9tU3BhY2luZyA9IHsgLi4udGhpcy5jdXN0b21TcGFjaW5nLCBba2V5Ml06IHZhbHVlMiB9OwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgYSByYWRpdXMgdmFsdWUgZHluYW1pY2FsbHkKICAgICAgICAgKi8KICAgICAgICBzZXRSYWRpdXMoa2V5MiwgdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IHsgLi4udGhpcy5jdXN0b21SYWRpdXMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBhIHNoYWRvdyB2YWx1ZSBkeW5hbWljYWxseQogICAgICAgICAqLwogICAgICAgIHNldFNoYWRvdyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IHsgLi4udGhpcy5jdXN0b21TaGFkb3dzLCBba2V5Ml06IHZhbHVlMiB9OwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgYSB0cmFuc2l0aW9uIHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgICAgICovCiAgICAgICAgc2V0VHJhbnNpdGlvbihrZXkyLCB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSB7IC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCBhIGNvbnRyb2wgaGVpZ2h0IHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgICAgICovCiAgICAgICAgc2V0Q29udHJvbEhlaWdodChrZXkyLCB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMgPSB7IC4uLnRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgY3VycmVudCB0aGVtZSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyArIG92ZXJyaWRlcykKICAgICAgICAgKi8KICAgICAgICBnZXRUaGVtZSgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNvbG9yczogdGhlbWVEZWZhdWx0cy5jb2xvcnMsCiAgICAgICAgICAgIHNwYWNpbmc6IHsgLi4udGhlbWVEZWZhdWx0cy5zcGFjaW5nLCAuLi50aGlzLmN1c3RvbVNwYWNpbmcgfSwKICAgICAgICAgICAgcmFkaXVzOiB7IC4uLnRoZW1lRGVmYXVsdHMucmFkaXVzLCAuLi50aGlzLmN1c3RvbVJhZGl1cyB9LAogICAgICAgICAgICBzaGFkb3dzOiB7IC4uLnRoZW1lRGVmYXVsdHMuc2hhZG93cywgLi4udGhpcy5jdXN0b21TaGFkb3dzIH0sCiAgICAgICAgICAgIHRyYW5zaXRpb25zOiB7IC4uLnRoZW1lRGVmYXVsdHMudHJhbnNpdGlvbnMsIC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgfSwKICAgICAgICAgICAgY29udHJvbEhlaWdodHM6IHsgLi4udGhlbWVEZWZhdWx0cy5jb250cm9sSGVpZ2h0cywgLi4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyB9CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZXNldCBhbGwgY3VzdG9tIG92ZXJyaWRlcyB0byBkZWZhdWx0cwogICAgICAgICAqLwogICAgICAgIHJlc2V0VG9EZWZhdWx0cygpIHsKICAgICAgICAgIHRoaXMuY3VzdG9tU3BhY2luZyA9IG51bGw7CiAgICAgICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IG51bGw7CiAgICAgICAgICB0aGlzLmN1c3RvbVNoYWRvd3MgPSBudWxsOwogICAgICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IG51bGw7CiAgICAgICAgICB0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQXBwbHkgYSBjb21wbGV0ZSB0aGVtZSBvYmplY3QKICAgICAgICAgKi8KICAgICAgICBhcHBseVRoZW1lKHRoZW1lKSB7CiAgICAgICAgICBpZiAodGhlbWUuc3BhY2luZykKICAgICAgICAgICAgdGhpcy5jdXN0b21TcGFjaW5nID0gdGhlbWUuc3BhY2luZzsKICAgICAgICAgIGlmICh0aGVtZS5yYWRpdXMpCiAgICAgICAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0gdGhlbWUucmFkaXVzOwogICAgICAgICAgaWYgKHRoZW1lLnNoYWRvd3MpCiAgICAgICAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IHRoZW1lLnNoYWRvd3M7CiAgICAgICAgICBpZiAodGhlbWUudHJhbnNpdGlvbnMpCiAgICAgICAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9uczsKICAgICAgICAgIGlmICh0aGVtZS5jb250cm9sSGVpZ2h0cykKICAgICAgICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHRoZW1lLmNvbnRyb2xIZWlnaHRzOwogICAgICAgIH0KICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczkxKHRoaXMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczkxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzVGhlbWUyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdGhlbWUvaW5kZXguanMKdmFyIGluaXRfZGVlc190aGVtZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdGhlbWUvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3RoZW1lKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuZGVtby5qcwp2YXIgZGVtb0Z1bmM1NTsKdmFyIGluaXRfZGVlc191cGRhdGVyX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuZGVtby5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF9kZWVzX3VwZGF0ZXIoKTsKICAgIGRlbW9GdW5jNTUgPSBhc3luYyAoKSA9PiB7CiAgICAgIGNvbnN0IHVwZGF0ZXIgPSBhd2FpdCBEZWVzVXBkYXRlci5jcmVhdGVBbmRTaG93KCk7CiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgIGF3YWl0IHVwZGF0ZXIuZGVzdHJveSgpOwogICAgICB9LCAxZTQpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy11cGRhdGVyL2RlZXMtdXBkYXRlci5qcwp2YXIgX19lc0RlY29yYXRlOTEsIF9fcnVuSW5pdGlhbGl6ZXJzOTIsIERlZXNVcGRhdGVyOwp2YXIgaW5pdF9kZWVzX3VwZGF0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfZGVlc191cGRhdGVyX2RlbW8oKTsKICAgIGluaXRfZGVlc193aW5kb3dsYXllcigpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIF9fZXNEZWNvcmF0ZTkxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNVcGRhdGVyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdXBkYXRlciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY3VycmVudFZlcnNpb25fZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50VmVyc2lvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3VwZGF0ZWRWZXJzaW9uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNVcGRhdGVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgICAgIH0pXTsKICAgICAgICAgIF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgICAgICB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU5MSh0aGlzLCBudWxsLCBfY3VycmVudFZlcnNpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFZlcnNpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRWZXJzaW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRWZXJzaW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudFZlcnNpb24gPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRWZXJzaW9uX2luaXRpYWxpemVycywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkxKHRoaXMsIG51bGwsIF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ1cGRhdGVkVmVyc2lvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXBkYXRlZFZlcnNpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudXBkYXRlZFZlcnNpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai51cGRhdGVkVmVyc2lvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiVXRpbGl0eSJdOwogICAgICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KCkgewogICAgICAgICAgY29uc3QgdXBkYXRlciA9IG5ldyBEZWVzVXBkYXRlcjIoKTsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodXBkYXRlcik7CiAgICAgICAgICByZXR1cm4gdXBkYXRlcjsKICAgICAgICB9CiAgICAgICAgI2N1cnJlbnRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczkyKHRoaXMsIF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IGN1cnJlbnRWZXJzaW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50VmVyc2lvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN1cGRhdGVkVmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTIodGhpcywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Mih0aGlzLCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICBnZXQgdXBkYXRlZFZlcnNpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdXBkYXRlZFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHVwZGF0ZWRWZXJzaW9uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdXBkYXRlZFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM5Mih0aGlzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgZGlzdF90c19leHBvcnRzMjguZWxlbWVudEJhc2ljLnNldHVwKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMyMjIiKX07CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAuYnV0dG9uQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy13aW5kb3dsYXllcgogICAgICAgIEBjbGlja2VkPSIke3RoaXMud2luZG93TGF5ZXJDbGlja2VkfSIKICAgICAgICAub3B0aW9ucz0ke3sKICAgICAgICAgICAgYmx1cjogdHJ1ZQogICAgICAgICAgfX0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsQ29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmdDb250YWluZXIiPgogICAgICAgICAgICA8ZGVlcy1zcGlubmVyIC5zaXplPSR7NjB9PjwvZGVlcy1zcGlubmVyPgogICAgICAgICAgICA8aDE+VXBkYXRpbmcgdGhlIGFwcGxpY2F0aW9uLi4uPC9oMT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MiPgogICAgICAgICAgICA8ZGVlcy1wcm9ncmVzc2JhciAucHJvZ3Jlc3M9JHswLjV9PjwvZGVlcy1wcm9ncmVzc2Jhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk1vcmUgaW5mbzwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DaGFuZ2Vsb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+IDwvZGVlcy13aW5kb3dsYXllcgogICAgICA+PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgICB9CiAgICAgICAgd2luZG93TGF5ZXJDbGlja2VkKCkgewogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM5MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC11dGlsaXR5L2RlZXMtdXBkYXRlci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3VwZGF0ZXIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtdXRpbGl0eS9kZWVzLXVwZGF0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3VwZGF0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy13aW5kb3djb250cm9scy9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3dpbmRvd2NvbnRyb2xzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvZGVlcy13aW5kb3djb250cm9scy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfd2luZG93Y29udHJvbHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfdXRpbGl0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXV0aWxpdHkvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2ljb24yKCk7CiAgICBpbml0X2RlZXNfc2VhcmNoYmFyMigpOwogICAgaW5pdF9kZWVzX3RoZW1lMigpOwogICAgaW5pdF9kZWVzX3VwZGF0ZXIyKCk7CiAgICBpbml0X2RlZXNfd2luZG93Y29udHJvbHMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUuanMKdmFyIF9fZXNEZWNvcmF0ZTkyLCBfX3J1bkluaXRpYWxpemVyczkzLCBEZWVzV29ya3NwYWNlRmlsZXRyZWU7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX2ZpbGV0cmVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWZpbGV0cmVlL2RlZXMtd29ya3NwYWNlLWZpbGV0cmVlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19jb250ZXh0bWVudSgpOwogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51KCk7CiAgICBpbml0X2RlZXNfbW9kYWwoKTsKICAgIGluaXRfZGVlc19pbnB1dF90ZXh0KCk7CiAgICBpbml0X2RlZXNfaW5wdXRfdGV4dCgpOwogICAgX19lc0RlY29yYXRlOTIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM5MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dvcmtzcGFjZUZpbGV0cmVlID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWZpbGV0cmVlIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcm9vdFBhdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF9yb290UGF0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NlbGVjdGVkUGF0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NlbGVjdGVkUGF0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90cmVlRGF0YV9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RyZWVEYXRhX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vycm9yTWVzc2FnZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vycm9yTWVzc2FnZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgICAgIF9yb290UGF0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfdHJlZURhdGFfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc0xvYWRpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkyKHRoaXMsIG51bGwsIF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJleGVjdXRpb25FbnZpcm9ubWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTIodGhpcywgbnVsbCwgX3Jvb3RQYXRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvb3RQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyb290UGF0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb290UGF0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnJvb3RQYXRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb290UGF0aF9pbml0aWFsaXplcnMsIF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Mih0aGlzLCBudWxsLCBfc2VsZWN0ZWRQYXRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkUGF0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNlbGVjdGVkUGF0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Mih0aGlzLCBudWxsLCBfdHJlZURhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHJlZURhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRyZWVEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRyZWVEYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudHJlZURhdGEgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RyZWVEYXRhX2luaXRpYWxpemVycywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkyKHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkyKHRoaXMsIG51bGwsIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3JNZXNzYWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlcnJvck1lc3NhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXJyb3JNZXNzYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXJyb3JNZXNzYWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTkyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkaXYgc3R5bGU9IndpZHRoOiAzMDBweDsgaGVpZ2h0OiA0MDBweDsgcG9zaXRpb246IHJlbGF0aXZlOyI+CiAgICAgIDxkZWVzLXdvcmtzcGFjZS1maWxldHJlZT48L2RlZXMtd29ya3NwYWNlLWZpbGV0cmVlPgogICAgPC9kaXY+CiAgYDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiV29ya3NwYWNlIl07CiAgICAgICAgI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczkzKHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNyb290UGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTModGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Myh0aGlzLCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzLCAiLyIpKTsKICAgICAgICBnZXQgcm9vdFBhdGgoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcm9vdFBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHJvb3RQYXRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcm9vdFBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTModGhpcywgX3Jvb3RQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Myh0aGlzLCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgc2VsZWN0ZWRQYXRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2VsZWN0ZWRQYXRoKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTModGhpcywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTModGhpcywgX3RyZWVEYXRhX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgdHJlZURhdGEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRyZWVEYXRhKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTModGhpcywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Myh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczkzKHRoaXMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczkzKHRoaXMsIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBlcnJvck1lc3NhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZXJyb3JNZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBlcnJvck1lc3NhZ2UodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgZXhwYW5kZWRQYXRocyA9IChfX3J1bkluaXRpYWxpemVyczkzKHRoaXMsIF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTsKICAgICAgICBsb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAvLyBDbGlwYm9hcmQgc3RhdGUgZm9yIGNvcHkvcGFzdGUgb3BlcmF0aW9ucwogICAgICAgIGNsaXBib2FyZFBhdGggPSBudWxsOwogICAgICAgIGNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgLy8gRmlsZSB3YXRjaGVyIGZvciBhdXRvLXJlZnJlc2gKICAgICAgICBmaWxlV2F0Y2hlciA9IG51bGw7CiAgICAgICAgcmVmcmVzaERlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICAgICAgbGFzdEV4ZWN1dGlvbkVudmlyb25tZW50ID0gbnVsbDsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC50cmVlLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC50cmVlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luOiAxcHggNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAudHJlZS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTMlKSIsICJoc2woMCAwJSAxNCUpIil9OwogICAgICB9CgogICAgICAudHJlZS1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDk1JSkiLCAiaHNsKDIxMCA1MCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0MCUpIiwgImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudHJlZS1pdGVtLnNlbGVjdGVkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDkyJSkiLCAiaHNsKDIxMCA1MCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLmluZGVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtaWNvbi5leHBhbmRlZCB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uaGlkZGVuIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uZm9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA4MCUgNDUlKSIsICJoc2woNDUgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uZmlsZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24udHlwZXNjcmlwdCB7CiAgICAgICAgY29sb3I6IGhzbCgyMTEgNjAlIDQ4JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uamF2YXNjcmlwdCB7CiAgICAgICAgY29sb3I6IGhzbCg1MyA5MyUgNTQlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5qc29uIHsKICAgICAgICBjb2xvcjogaHNsKDQ1IDgwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmh0bWwgewogICAgICAgIGNvbG9yOiBoc2woMTQgNzclIDUyJSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uY3NzIHsKICAgICAgICBjb2xvcjogaHNsKDIyOCA3NyUgNTklKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5tYXJrZG93biB7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDUwJSk7CiAgICAgIH0KCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4NSUpIil9OwogICAgICB9CgogICAgICAubG9hZGluZyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5lcnJvciB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IGhzbCgwIDcwJSA1MCUpOwogICAgICB9CgogICAgICAuZW1wdHkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmZpbGV0cmVlLXRvb2xiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDgpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmlzTG9hZGluZykgewogICAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5lcnJvck1lc3NhZ2UpIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KICAgICAgICAgICR7dGhpcy5lcnJvck1lc3NhZ2V9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImZpbGV0cmVlLXRvb2xiYXIiPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0b29sYmFyLXRpdGxlIj5FeHBsb3Jlcjwvc3Bhbj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWFjdGlvbnMiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1idXR0b24iIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlTmV3RmlsZSgiLyIpfSB0aXRsZT0iTmV3IEZpbGUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlUGx1cyJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZvbGRlcigiLyIpfSB0aXRsZT0iTmV3IEZvbGRlciI+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmZvbGRlclBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMudHJlZURhdGEubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGZpbGVzIGZvdW5kLjwvZGl2PmAgOiBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0idHJlZS1jb250YWluZXIiIEBjb250ZXh0bWVudT0ke3RoaXMuaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51fT4KICAgICAgICAgICAgICAke3RoaXMucmVuZGVyVHJlZSh0aGlzLnRyZWVEYXRhKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyVHJlZShub2RlcykgewogICAgICAgICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZTIpID0+IHRoaXMucmVuZGVyTm9kZShub2RlMikpOwogICAgICAgIH0KICAgICAgICByZW5kZXJOb2RlKG5vZGUyKSB7CiAgICAgICAgICBjb25zdCBpc0RpcmVjdG9yeSA9IG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiOwogICAgICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCk7CiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZTIucGF0aCA9PT0gdGhpcy5zZWxlY3RlZFBhdGg7CiAgICAgICAgICBjb25zdCBpY29uQ2xhc3MgPSB0aGlzLmdldEZpbGVJY29uQ2xhc3Mobm9kZTIpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRyZWUtaXRlbSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCArIG5vZGUyLmxldmVsICogMTZ9cHgiCiAgICAgICAgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMil9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke2lzRXhwYW5kZWQgPyAiZXhwYW5kZWQiIDogIiJ9ICR7IWlzRGlyZWN0b3J5ID8gImhpZGRlbiIgOiAiIn0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hldnJvblJpZ2h0In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtaWNvbiAke2ljb25DbGFzc30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24obm9kZTIpfSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1uYW1lIj4ke25vZGUyLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtpc0RpcmVjdG9yeSAmJiBpc0V4cGFuZGVkICYmIG5vZGUyLmNoaWxkcmVuID8gdGhpcy5yZW5kZXJUcmVlKG5vZGUyLmNoaWxkcmVuKSA6ICIifQogICAgYDsKICAgICAgICB9CiAgICAgICAgZ2V0RmlsZUljb24obm9kZTIpIHsKICAgICAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRlZFBhdGhzLmhhcyhub2RlMi5wYXRoKSA/ICJsdWNpZGU6Zm9sZGVyT3BlbiIgOiAibHVjaWRlOmZvbGRlciI7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBzd2l0Y2ggKGV4dCkgewogICAgICAgICAgICBjYXNlICJ0cyI6CiAgICAgICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZUNvZGUiOwogICAgICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZUNvZGUiOwogICAgICAgICAgICBjYXNlICJqc29uIjoKICAgICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlSnNvbiI7CiAgICAgICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICAgICAgY2FzZSAic2NzcyI6CiAgICAgICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICAgICAgY2FzZSAibWQiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVUZXh0IjsKICAgICAgICAgICAgY2FzZSAicG5nIjoKICAgICAgICAgICAgY2FzZSAianBnIjoKICAgICAgICAgICAgY2FzZSAianBlZyI6CiAgICAgICAgICAgIGNhc2UgImdpZiI6CiAgICAgICAgICAgIGNhc2UgInN2ZyI6CiAgICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6aW1hZ2UiOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGUiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXRGaWxlSWNvbkNsYXNzKG5vZGUyKSB7CiAgICAgICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpCiAgICAgICAgICAgIHJldHVybiAiZm9sZGVyIjsKICAgICAgICAgIGNvbnN0IGV4dCA9IG5vZGUyLm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIHN3aXRjaCAoZXh0KSB7CiAgICAgICAgICAgIGNhc2UgInRzIjoKICAgICAgICAgICAgY2FzZSAidHN4IjoKICAgICAgICAgICAgICByZXR1cm4gInR5cGVzY3JpcHQiOwogICAgICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICAgICAgcmV0dXJuICJqYXZhc2NyaXB0IjsKICAgICAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICAgICAgcmV0dXJuICJqc29uIjsKICAgICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgICAgcmV0dXJuICJodG1sIjsKICAgICAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICAgICAgY2FzZSAic2NzcyI6CiAgICAgICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgICAgIHJldHVybiAiY3NzIjsKICAgICAgICAgICAgY2FzZSAibWQiOgogICAgICAgICAgICAgIHJldHVybiAibWFya2Rvd24iOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiAiZmlsZSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUl0ZW1DbGljayhlMTEsIG5vZGUyKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy50b2dnbGVEaXJlY3Rvcnkobm9kZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBub2RlMi5wYXRoOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWxlLXNlbGVjdCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbm9kZTIucGF0aCwgbmFtZTogbm9kZTIubmFtZSB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyB0b2dnbGVEaXJlY3Rvcnkobm9kZTIpIHsKICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKG5vZGUyLnBhdGgpKSB7CiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5kZWxldGUobm9kZTIucGF0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmV4cGFuZGVkUGF0aHMuYWRkKG5vZGUyLnBhdGgpOwogICAgICAgICAgICBpZiAoIW5vZGUyLmNoaWxkcmVuIHx8IG5vZGUyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKG5vZGUyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGxvYWREaXJlY3RvcnlDb250ZW50cyhub2RlMikgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKG5vZGUyLnBhdGgpOwogICAgICAgICAgICBub2RlMi5jaGlsZHJlbiA9IHRoaXMuc29ydEVudHJpZXMoZW50cmllcykubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAgICAgICAuLi5lbnRyeSwKICAgICAgICAgICAgICBsZXZlbDogbm9kZTIubGV2ZWwgKyAxLAogICAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSwKICAgICAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBkaXJlY3RvcnkgJHtub2RlMi5wYXRofTpgLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUNvbnRleHRNZW51KGUxMSwgbm9kZTIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgbWVudUl0ZW1zID0gW107CiAgICAgICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUobm9kZTIucGF0aCkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImZvbGRlclBsdXMiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIobm9kZTIucGF0aCkKICAgICAgICAgICAgfSwgeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICAgICAgfQogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiAiUmVuYW1lIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJwZW5jaWwiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMucmVuYW1lSXRlbShub2RlMikKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgbmFtZTogIkR1cGxpY2F0ZSIsCiAgICAgICAgICAgIGljb25OYW1lOiAiZmlsZXMiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZHVwbGljYXRlSXRlbShub2RlMikKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgbmFtZTogIkNvcHkiLAogICAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY29weUl0ZW0obm9kZTIpCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IiAmJiB0aGlzLmNsaXBib2FyZFBhdGgpIHsKICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICJQYXN0ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5wYXN0ZUl0ZW0obm9kZTIucGF0aCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgICBuYW1lOiAiRGVsZXRlIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZGVsZXRlSXRlbShub2RlMikKICAgICAgICAgIH0pOwogICAgICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGUxMSkgewogICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgiLnRyZWUtaXRlbSIpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgICAgICAgIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZvbGRlcigiLyIpCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgICBpZiAodGhpcy5jbGlwYm9hcmRQYXRoKSB7CiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICAgICAgbmFtZTogIlBhc3RlIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImNsaXBib2FyZCIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbSgiLyIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgc2hvd0lucHV0TW9kYWwob3B0aW9ucykgewogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlMikgPT4gewogICAgICAgICAgICBjb25zdCBtb2RhbCA9IGF3YWl0IERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgICAgICBoZWFkaW5nOiBvcHRpb25zLmhlYWRpbmcsCiAgICAgICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0ke29wdGlvbnMubGFiZWx9CiAgICAgICAgICAgIC52YWx1ZT0ke29wdGlvbnMudmFsdWUgfHwgIiJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgYCwKICAgICAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMuYnV0dG9uTmFtZSB8fCAiQ3JlYXRlIiwKICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50RWwyID0gbW9kYWxSZWYuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gY29udGVudEVsMj8ucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWU/LnRyaW0oKSB8fCAiIjsKICAgICAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoaW5wdXRWYWx1ZSB8fCBudWxsKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGF3YWl0IG1vZGFsLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgICBjb25zdCBjb250ZW50RWwgPSBtb2RhbC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnRFbCkgewogICAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGNvbnRlbnRFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBhd2FpdCBpbnB1dEVsZW1lbnQudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBjcmVhdGVOZXdGaWxlKHBhcmVudFBhdGgpIHsKICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgICAgIGhlYWRpbmc6ICJOZXcgRmlsZSIsCiAgICAgICAgICAgIGxhYmVsOiAiRmlsZSBuYW1lIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIWZpbGVOYW1lIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZpbGVOYW1lfWAgOiBgJHtwYXJlbnRQYXRofS8ke2ZpbGVOYW1lfWA7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCAiIik7CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWxlLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5ld1BhdGggfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZmlsZToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGNyZWF0ZU5ld0ZvbGRlcihwYXJlbnRQYXRoKSB7CiAgICAgICAgICBjb25zdCBmb2xkZXJOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgICAgIGhlYWRpbmc6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgICAgbGFiZWw6ICJGb2xkZXIgbmFtZSIKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFmb2xkZXJOYW1lIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZvbGRlck5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7Zm9sZGVyTmFtZX1gOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ta2RpcihuZXdQYXRoKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZvbGRlci1jcmVhdGVkIiwgewogICAgICAgICAgICAgIGRldGFpbDogeyBwYXRoOiBuZXdQYXRoIH0sCiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZvbGRlcjoiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRlbGV0ZUl0ZW0obm9kZTIpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgY29uZmlybWVkID0gY29uZmlybShgRGVsZXRlICR7bm9kZTIubmFtZX0/YCk7CiAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoLCB7IHJlY3Vyc2l2ZTogbm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIgfSk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLWRlbGV0ZWQiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5vZGUyLnBhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBkZWxldGUgaXRlbToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlbmFtZSBhIGZpbGUgb3IgZm9sZGVyCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgcmVuYW1lSXRlbShub2RlMikgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBuZXdOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgICAgIGhlYWRpbmc6ICJSZW5hbWUiLAogICAgICAgICAgICBsYWJlbDogIk5ldyBuYW1lIiwKICAgICAgICAgICAgdmFsdWU6IG5vZGUyLm5hbWUsCiAgICAgICAgICAgIGJ1dHRvbk5hbWU6ICJSZW5hbWUiCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghbmV3TmFtZSB8fCBuZXdOYW1lID09PSBub2RlMi5uYW1lKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke25ld05hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7bmV3TmFtZX1gOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShub2RlMi5wYXRoKTsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCBjb250ZW50Myk7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhub2RlMi5wYXRoLCBuZXdQYXRoKTsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKG5vZGUyLnBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7IG9sZFBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIER1cGxpY2F0ZSBhIGZpbGUgb3IgZm9sZGVyCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgZHVwbGljYXRlSXRlbShub2RlMikgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgICAgICBsZXQgbmV3TmFtZTsKICAgICAgICAgIGlmIChub2RlMi50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgICAgY29uc3QgbGFzdERvdCA9IG5vZGUyLm5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICAgICAgaWYgKGxhc3REb3QgPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBub2RlMi5uYW1lLnN1YnN0cmluZygwLCBsYXN0RG90KTsKICAgICAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnN1YnN0cmluZyhsYXN0RG90KTsKICAgICAgICAgICAgICBuZXdOYW1lID0gYCR7YmFzZU5hbWV9X2NvcHkke2V4dH1gOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5ld05hbWUgPSBgJHtub2RlMi5uYW1lfV9jb3B5YDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3TmFtZSA9IGAke25vZGUyLm5hbWV9X2NvcHlgOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhcmVudFBhdGggPT09ICIvIiA/IGAvJHtuZXdOYW1lfWAgOiBgJHtwYXJlbnRQYXRofS8ke25ld05hbWV9YDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChub2RlMi50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUobm9kZTIucGF0aCk7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKG5vZGUyLnBhdGgsIG5ld1BhdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLWR1cGxpY2F0ZWQiLCB7CiAgICAgICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBkdXBsaWNhdGUgaXRlbToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENvcHkgaXRlbSBwYXRoIHRvIGNsaXBib2FyZAogICAgICAgICAqLwogICAgICAgIGFzeW5jIGNvcHlJdGVtKG5vZGUyKSB7CiAgICAgICAgICB0aGlzLmNsaXBib2FyZFBhdGggPSBub2RlMi5wYXRoOwogICAgICAgICAgdGhpcy5jbGlwYm9hcmRPcGVyYXRpb24gPSAiY29weSI7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFBhc3RlIGNvcGllZCBpdGVtIHRvIHRhcmdldCBkaXJlY3RvcnkKICAgICAgICAgKi8KICAgICAgICBhc3luYyBwYXN0ZUl0ZW0odGFyZ2V0UGF0aCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8ICF0aGlzLmNsaXBib2FyZFBhdGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNsaXBib2FyZFBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAicGFzdGVkIjsKICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSB0YXJnZXRQYXRoID09PSAiLyIgPyBgLyR7bmFtZX1gIDogYCR7dGFyZ2V0UGF0aH0vJHtuYW1lfWA7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpIHsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJTb3VyY2UgZmlsZSBubyBsb25nZXIgZXhpc3RzIik7CiAgICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmRQYXRoID0gbnVsbDsKICAgICAgICAgICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHRoaXMuY2xpcGJvYXJkUGF0aCk7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyh0aGlzLmNsaXBib2FyZFBhdGgsIG5ld1BhdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXBhc3RlZCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsgc291cmNlUGF0aDogdGhpcy5jbGlwYm9hcmRQYXRoLCB0YXJnZXRQYXRoOiBuZXdQYXRoIH0sCiAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkT3BlcmF0aW9uID0gbnVsbDsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmVjdXJzaXZlbHkgY29weSBkaXJlY3RvcnkgY29udGVudHMgdG8gYSBuZXcgcGF0aAogICAgICAgICAqLwogICAgICAgIGFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhzb3VyY2VQYXRoLCBkZXN0UGF0aCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKGRlc3RQYXRoKTsKICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoc291cmNlUGF0aCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICAgICAgY29uc3Qgc3JjRW50cnlQYXRoID0gc291cmNlUGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke3NvdXJjZVBhdGh9LyR7ZW50cnkubmFtZX1gOwogICAgICAgICAgICBjb25zdCBkZXN0RW50cnlQYXRoID0gZGVzdFBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkZXN0UGF0aH0vJHtlbnRyeS5uYW1lfWA7CiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHNyY0VudHJ5UGF0aCwgZGVzdEVudHJ5UGF0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHNyY0VudHJ5UGF0aCk7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZGVzdEVudHJ5UGF0aCwgY29udGVudDMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSkgewogICAgICAgICAgICBpZiAodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgIT09IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICAgICAgICAgIHRoaXMubGFzdEV4ZWN1dGlvbkVudmlyb25tZW50ID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgICAgICAgICAgICB0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICAgICAgaWYgKHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhcnRGaWxlV2F0Y2hlcigpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCB0aGlzLmZpbGVXYXRjaGVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmZpbGVXYXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiLyIsIChfZXZlbnQsIF9maWxlbmFtZSkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICAgIH0sIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJGaWxlIHdhdGNoaW5nIG5vdCBzdXBwb3J0ZWQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdG9wRmlsZVdhdGNoZXIoKSB7CiAgICAgICAgICBpZiAodGhpcy5maWxlV2F0Y2hlcikgewogICAgICAgICAgICB0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKTsKICAgICAgICAgICAgdGhpcy5maWxlV2F0Y2hlciA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGxvYWRUcmVlKCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAodGhpcy5sb2FkVHJlZVN0YXJ0ZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gIiI7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHRoaXMucm9vdFBhdGgpOwogICAgICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy5zb3J0RW50cmllcyhlbnRyaWVzKS5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgICAgIC4uLmVudHJ5LAogICAgICAgICAgICAgIGxldmVsOiAwLAogICAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSwKICAgICAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtlcnJvcn1gOwogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBmaWxlIHRyZWU6IiwgZXJyb3IpOwogICAgICAgICAgICB0aGlzLmxvYWRUcmVlU3RhcnRlZCA9IGZhbHNlOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc29ydEVudHJpZXMoZW50cmllcykgewogICAgICAgICAgcmV0dXJuIGVudHJpZXMuc29ydCgoYTUsIGI1KSA9PiB7CiAgICAgICAgICAgIGlmIChhNS50eXBlICE9PSBiNS50eXBlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGE1LnR5cGUgPT09ICJkaXJlY3RvcnkiID8gLTEgOiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhNS5uYW1lLmxvY2FsZUNvbXBhcmUoYjUubmFtZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgcmVmcmVzaCgpIHsKICAgICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5jbGVhcigpOwogICAgICAgICAgdGhpcy5sb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0RmlsZShwYXRoMikgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBwYXRoMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcuanMKdmFyIF9fZXNEZWNvcmF0ZTkzLCBfX3J1bkluaXRpYWxpemVyczk0LCBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3Owp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9wcmV2aWV3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlOTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM5NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldyA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9jb21tYW5kX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGluZXNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9saW5lc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9saW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9jb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX2xpbmVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Myh0aGlzLCBudWxsLCBfY29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb21tYW5kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb21tYW5kIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb21tYW5kID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb21tYW5kX2luaXRpYWxpemVycywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTModGhpcywgbnVsbCwgX2xpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxpbmVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsaW5lcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5saW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxpbmVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9saW5lc19pbml0aWFsaXplcnMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcKICAgICAgLmNvbW1hbmQ9JHsicG5wbSBpbnN0YWxsIn0KICAgICAgLmxpbmVzPSR7WwogICAgICAgICAgIlBhY2thZ2VzOiArNDIiLAogICAgICAgICAgIlByb2dyZXNzOiByZXNvbHZlZCAxNDIsIHJldXNlZCAxNDAsIGRvd25sb2FkZWQgMiwgYWRkZWQgNDIsIGRvbmUiLAogICAgICAgICAgIiIsCiAgICAgICAgICAiZGVwZW5kZW5jaWVzOiIsCiAgICAgICAgICAiKyBAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UgNC4yLjMiLAogICAgICAgICAgIisgdHlwZXNjcmlwdCA1LjMuMyIsCiAgICAgICAgICAiIiwKICAgICAgICAgICJEb25lIGluIDIuM3MiCiAgICAgICAgXX0KICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXc+CiAgYDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiV29ya3NwYWNlIl07CiAgICAgICAgI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOTQodGhpcywgX2NvbW1hbmRfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIGNvbW1hbmQgYmVpbmcgZGlzcGxheWVkIChzaG93biBpbiBoZWFkZXIpCiAgICAgICAgICovCiAgICAgICAgZ2V0IGNvbW1hbmQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY29tbWFuZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5NCh0aGlzLCBfY29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTQodGhpcywgX2xpbmVzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICAvKioKICAgICAgICAgKiBPdXRwdXQgbGluZXMgdG8gZGlzcGxheQogICAgICAgICAqLwogICAgICAgIGdldCBsaW5lcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgbGluZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICB0ZXJtaW5hbCA9IChfX3J1bkluaXRpYWxpemVyczk0KHRoaXMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGZpdEFkZG9uID0gbnVsbDsKICAgICAgICBsYXN0TGluZUNvdW50ID0gMDsKICAgICAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgICAgdGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICAudGVybWluYWwtcHJldmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSAxMCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWhlYWRlci1pY29uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWhlYWRlci1jb21tYW5kIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgICN4dGVybS1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLyogeHRlcm0uanMgc3R5bGVzICovCiAgICAgIC54dGVybSB7CiAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYScgMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybS5mb2N1cywKICAgICAgLnh0ZXJtOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogLTU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZmZmZmZmIil9OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3LmFjdGl2ZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC54dGVybSB7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMgewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWFjY2Vzc2liaWxpdHksCiAgICAgIC54dGVybSAueHRlcm0tbWVzc2FnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC54dGVybSAubGl2ZS1yZWdpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWRpbSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAueHRlcm0tdW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLyogQ3VzdG9tIHNjcm9sbGJhciBmb3IgeHRlcm0gdmlld3BvcnQgKi8KICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsICJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3MCUpIiwgImhzbCgwIDAlIDM1JSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtcHJldmlldyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXItaWNvbiI+JDwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtaW5hbC1oZWFkZXItY29tbWFuZCI+JHt0aGlzLmNvbW1hbmQgfHwgIldhaXRpbmcuLi4ifTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBpZD0ieHRlcm0tY29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGVybWluYWwgdGhlbWUgY29sb3JzIGJhc2VkIG9uIGJyaWdodC9kYXJrIG1vZGUKICAgICAgICAgKi8KICAgICAgICBnZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSB7CiAgICAgICAgICByZXR1cm4gaXNCcmlnaHQgPyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICAgICAgZm9yZWdyb3VuZDogIiMzMzMzMzMiLAogICAgICAgICAgICBjdXJzb3I6ICIjMzMzMzMzIiwKICAgICAgICAgICAgY3Vyc29yQWNjZW50OiAiI2ZmZmZmZiIsCiAgICAgICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICJyZ2JhKDAsIDAsIDAsIDAuMikiCiAgICAgICAgICB9IDogewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMDAwMCIsCiAgICAgICAgICAgIGZvcmVncm91bmQ6ICIjY2NjY2NjIiwKICAgICAgICAgICAgY3Vyc29yOiAiI2NjY2NjYyIsCiAgICAgICAgICAgIGN1cnNvckFjY2VudDogIiMwMDAwMDAiLAogICAgICAgICAgICBzZWxlY3Rpb25CYWNrZ3JvdW5kOiAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJ4dGVybS1jb250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgICAgIGNvbnN0IGxpYkxvYWRlciA9IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCk7CiAgICAgICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtRml0QWRkb24oKQogICAgICAgICAgXSk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IHh0ZXJtQnVuZGxlLlRlcm1pbmFsKHsKICAgICAgICAgICAgY29udmVydEVvbDogdHJ1ZSwKICAgICAgICAgICAgY3Vyc29yQmxpbms6IGZhbHNlLAogICAgICAgICAgICBkaXNhYmxlU3RkaW46IHRydWUsCiAgICAgICAgICAgIGZvbnRTaXplOiAxMiwKICAgICAgICAgICAgZm9udEZhbWlseTogIidTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2UiLAogICAgICAgICAgICB0aGVtZTogdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSwKICAgICAgICAgICAgc2Nyb2xsYmFjazogMWUzCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGdvQnJpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTsKICAgICAgICAgIHRoaXMudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5maXRBZGRvbikgewogICAgICAgICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgICAgICB0aGlzLndyaXRlTmV3TGluZXMoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsaW5lcyIpKSB7CiAgICAgICAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3cml0ZU5ld0xpbmVzKCkgewogICAgICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBuZXdMaW5lcyA9IHRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTsKICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBuZXdMaW5lcykgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4obGluZSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RMaW5lQ291bnQgPSB0aGlzLmxpbmVzLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgICAgICAgIHRoaXMudGVybWluYWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkIGEgbmV3IGxpbmUgdG8gdGhlIG91dHB1dAogICAgICAgICAqLwogICAgICAgIGFkZExpbmUobGluZSkgewogICAgICAgICAgdGhpcy5saW5lcyA9IFsuLi50aGlzLmxpbmVzLCBsaW5lXTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgYWxsIG91dHB1dCBsaW5lcwogICAgICAgICAqLwogICAgICAgIGNsZWFyKCkgewogICAgICAgICAgdGhpcy5saW5lcyA9IFtdOwogICAgICAgICAgdGhpcy5sYXN0TGluZUNvdW50ID0gMDsKICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWwuY2xlYXIoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci5qcwp2YXIgX19lc0RlY29yYXRlOTQsIF9fcnVuSW5pdGlhbGl6ZXJzOTUsIERlZXNXb3Jrc3BhY2VCb3R0b21iYXI7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX2JvdHRvbWJhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZWVzX2NvbnRleHRtZW51KCk7CiAgICBfX2VzRGVjb3JhdGU5NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczk1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzV29ya3NwYWNlQm90dG9tYmFyID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWJvdHRvbWJhciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NjcmlwdHNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zY3JpcHRzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NjcmlwdHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfcGFja2FnZVN0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wYWNrYWdlU3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX291dGRhdGVkUGFja2FnZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfc2NyaXB0c19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3BhY2thZ2VTdGF0dXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNDaGVja2luZ1BhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU5NCh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk0KHRoaXMsIG51bGwsIF9zY3JpcHRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNjcmlwdHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNjcmlwdHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2NyaXB0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNjcmlwdHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzLCBfc2NyaXB0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5NCh0aGlzLCBudWxsLCBfcGFja2FnZVN0YXR1c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwYWNrYWdlU3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwYWNrYWdlU3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBhY2thZ2VTdGF0dXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wYWNrYWdlU3RhdHVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wYWNrYWdlU3RhdHVzX2luaXRpYWxpemVycywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTQodGhpcywgbnVsbCwgX291dGRhdGVkUGFja2FnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0ZGF0ZWRQYWNrYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0ZGF0ZWRQYWNrYWdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRkYXRlZFBhY2thZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3V0ZGF0ZWRQYWNrYWdlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0ZGF0ZWRQYWNrYWdlc19pbml0aWFsaXplcnMsIF9vdXRkYXRlZFBhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk0KHRoaXMsIG51bGwsIF9pc0NoZWNraW5nUGFja2FnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNDaGVja2luZ1BhY2thZ2VzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0NoZWNraW5nUGFja2FnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNDaGVja2luZ1BhY2thZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNDaGVja2luZ1BhY2thZ2VzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0NoZWNraW5nUGFja2FnZXNfaW5pdGlhbGl6ZXJzLCBfaXNDaGVja2luZ1BhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5NSh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2NyaXB0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTUodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5NSh0aGlzLCBfc2NyaXB0c19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgLy8gU2NyaXB0IHJ1bm5lciBzdGF0ZQogICAgICAgIGdldCBzY3JpcHRzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NjcmlwdHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNjcmlwdHModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzY3JpcHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5NSh0aGlzLCBfc2NyaXB0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTUodGhpcywgX3BhY2thZ2VTdGF0dXNfaW5pdGlhbGl6ZXJzLCAiaWRsZSIpKTsKICAgICAgICAvLyBQYWNrYWdlIGNoZWNrZXIgc3RhdGUKICAgICAgICBnZXQgcGFja2FnZVN0YXR1cygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwYWNrYWdlU3RhdHVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jcGFja2FnZVN0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTUodGhpcywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk1KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgb3V0ZGF0ZWRQYWNrYWdlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNvdXRkYXRlZFBhY2thZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvdXRkYXRlZFBhY2thZ2VzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNDaGVja2luZ1BhY2thZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5NSh0aGlzLCBfb3V0ZGF0ZWRQYWNrYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTUodGhpcywgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzQ2hlY2tpbmdQYWNrYWdlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzQ2hlY2tpbmdQYWNrYWdlcyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzQ2hlY2tpbmdQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBUcmFjayBpZiB3ZSBoYXZlIGEgcGVuZGluZyBwYWNrYWdlIHVwZGF0ZSB0aGF0IHNob3VsZCB0cmlnZ2VyIHJlZnJlc2gKICAgICAgICBwZW5kaW5nUGFja2FnZVVwZGF0ZSA9IChfX3J1bkluaXRpYWxpemVyczk1KHRoaXMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpLCBmYWxzZSk7CiAgICAgICAgLy8gQm91bmQgaGFuZGxlciBmb3IgcHJvY2Vzcy1jb21wbGV0ZSBldmVudHMKICAgICAgICBoYW5kbGVQcm9jZXNzQ29tcGxldGUgPSAoZTExKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZSkgewogICAgICAgICAgICB0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlID0gZmFsc2U7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja1BhY2thZ2VzKCksIDUwMCk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJvdHRvbS1iYXIgewogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk0JSkiLCAiaHNsKDAgMCUgNiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLndpZGdldDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldCBkZWVzLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAud2lkZ2V0LXNlcGFyYXRvciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICAud2lkZ2V0LnJ1bm5pbmcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQudXAtdG8tZGF0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQudXBkYXRlcy1hdmFpbGFibGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDM4IDkyJSA0NSUpIiwgImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5lcnJvciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLnNwaW5uaW5nIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS1iYXIiPgogICAgICAgIDwhLS0gU2NyaXB0IFJ1bm5lciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2NyaXB0Q2xpY2t9CiAgICAgICAgICB0aXRsZT0iUnVuIHNjcmlwdCIKICAgICAgICA+CiAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgIC5pY29uPSR7Imx1Y2lkZTpwbGF5In0KICAgICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+U2NyaXB0czwvc3Bhbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+CgogICAgICAgIDwhLS0gUGFja2FnZSBDaGVja2VyIFdpZGdldCAtLT4KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0id2lkZ2V0ICR7dGhpcy5nZXRQYWNrYWdlU3RhdHVzQ2xhc3MoKX0iCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVBhY2thZ2VDbGlja30KICAgICAgICAgIHRpdGxlPSIke3RoaXMuZ2V0UGFja2FnZVRvb2x0aXAoKX0iCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0ke3RoaXMuZ2V0UGFja2FnZUljb24oKX0KICAgICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgICAgICBjbGFzcz0iJHt0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcyA/ICJzcGlubmluZyIgOiAiIn0iCiAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMuZ2V0UGFja2FnZVN0YXR1c1RleHQoKX08L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gRnV0dXJlIHdpZGdldHMgY2FuIGJlIGFkZGVkIGhlcmUgLS0+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9jZXNzLWNvbXBsZXRlIiwgdGhpcy5oYW5kbGVQcm9jZXNzQ29tcGxldGUpOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSAmJiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gU2NyaXB0IFJ1bm5lciA9PT09PT09PT09CiAgICAgICAgYXN5bmMgbG9hZFNjcmlwdHMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICAgICAgaWYgKCFwYWNrYWdlSnNvbkV4aXN0cykgewogICAgICAgICAgICAgIHRoaXMuc2NyaXB0cyA9IHt9OwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQzKTsKICAgICAgICAgICAgdGhpcy5zY3JpcHRzID0gcGFja2FnZUpzb24uc2NyaXB0cyB8fCB7fTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLCBlcnJvcik7CiAgICAgICAgICAgIHRoaXMuc2NyaXB0cyA9IHt9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVTY3JpcHRDbGljayhlMTEpIHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IHNjcmlwdE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTsKICAgICAgICAgIGlmIChzY3JpcHROYW1lcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgbWVudUl0ZW1zID0gc2NyaXB0TmFtZXMubWFwKChuYW1lKSA9PiAoewogICAgICAgICAgICBuYW1lLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2NyaXB0KG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICBhd2FpdCBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZTExLCBtZW51SXRlbXMpOwogICAgICAgIH0KICAgICAgICBhc3luYyBydW5TY3JpcHQoc2NyaXB0TmFtZSkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgICAgIHR5cGU6ICJzY3JpcHQiLAogICAgICAgICAgICBsYWJlbDogc2NyaXB0TmFtZSwKICAgICAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgICAgICBhcmdzOiBbInJ1biIsIHNjcmlwdE5hbWVdLAogICAgICAgICAgICBtZXRhZGF0YTogeyBzY3JpcHROYW1lIH0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFBhY2thZ2UgQ2hlY2tlciA9PT09PT09PT09CiAgICAgICAgYXN5bmMgY2hlY2tQYWNrYWdlcygpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiaWRsZSI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICAgICAgaWYgKCFwYWNrYWdlSnNvbkV4aXN0cykgewogICAgICAgICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJpZGxlIjsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImNoZWNraW5nIjsKICAgICAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSB0cnVlOwogICAgICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuc3Bhd24oInBucG0iLCBbIm91dGRhdGVkIiwgIi0tanNvbiJdKTsKICAgICAgICAgICAgbGV0IG91dHB1dCA9ICIiOwogICAgICAgICAgICBjb25zdCBvdXRwdXRSZWFkZXIgPSBwcm9jZXNzNC5vdXRwdXQuZ2V0UmVhZGVyKCk7CiAgICAgICAgICAgIGNvbnN0IHJlYWRPdXRwdXQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IHZhbHVlMiB9ID0gYXdhaXQgb3V0cHV0UmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIG91dHB1dCArPSB2YWx1ZTI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICByZWFkT3V0cHV0KCk7CiAgICAgICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFsKICAgICAgICAgICAgICBwcm9jZXNzNC5leGl0LAogICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlMigtMSksIDFlNCkpCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGF3YWl0IG91dHB1dFJlYWRlci5jYW5jZWwoKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09PSAtMSkgewogICAgICAgICAgICAgIGNvbnNvbGUud2FybigiUGFja2FnZSBjaGVjayB0aW1lZCBvdXQiKTsKICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiZXJyb3IiOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZXhpdENvZGUgPT09IDApIHsKICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXAtdG8tZGF0ZSI7CiAgICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IG91dGRhdGVkRGF0YSA9IEpTT04ucGFyc2Uob3V0cHV0KTsKICAgICAgICAgICAgICAgIHRoaXMub3V0ZGF0ZWRQYWNrYWdlcyA9IHRoaXMucGFyc2VPdXRkYXRlZFBhY2thZ2VzKG91dGRhdGVkRGF0YSk7CiAgICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoID4gMCA/ICJ1cGRhdGVzLWF2YWlsYWJsZSIgOiAidXAtdG8tZGF0ZSI7CiAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXBkYXRlcy1hdmFpbGFibGUiOwogICAgICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBjaGVjayBmb3IgcGFja2FnZSB1cGRhdGVzOiIsIGVycm9yKTsKICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImVycm9yIjsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhkYXRhMTEpIHsKICAgICAgICAgIGNvbnN0IHBhY2thZ2VzID0gW107CiAgICAgICAgICBpZiAodHlwZW9mIGRhdGExMSA9PT0gIm9iamVjdCIgJiYgZGF0YTExICE9PSBudWxsKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIGluZm9dIG9mIE9iamVjdC5lbnRyaWVzKGRhdGExMSkpIHsKICAgICAgICAgICAgICBjb25zdCBwa2dJbmZvID0gaW5mbzsKICAgICAgICAgICAgICBwYWNrYWdlcy5wdXNoKHsKICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICBjdXJyZW50OiBwa2dJbmZvLmN1cnJlbnQgfHwgInVua25vd24iLAogICAgICAgICAgICAgICAgd2FudGVkOiBwa2dJbmZvLndhbnRlZCB8fCBwa2dJbmZvLmN1cnJlbnQgfHwgInVua25vd24iLAogICAgICAgICAgICAgICAgbGF0ZXN0OiBwa2dJbmZvLmxhdGVzdCB8fCBwa2dJbmZvLndhbnRlZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgICB0eXBlOiBwa2dJbmZvLmRlcGVuZGVuY3lUeXBlID09PSAiZGV2RGVwZW5kZW5jaWVzIiA/ICJkZXZEZXBlbmRlbmNpZXMiIDogImRlcGVuZGVuY2llcyIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHBhY2thZ2VzOwogICAgICAgIH0KICAgICAgICBhc3luYyBoYW5kbGVQYWNrYWdlQ2xpY2soZTExKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBbXTsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPyAiQ2hlY2tpbmcuLi4iIDogIkNoZWNrIGZvciB1cGRhdGVzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaEN3IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJwYWNrYWdlLXVwZGF0ZSIsCiAgICAgICAgICAgICAgICBsYWJlbDogImNoZWNrIHBhY2thZ2VzIiwKICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICJwbnBtIiwKICAgICAgICAgICAgICAgIGFyZ3M6IFsib3V0ZGF0ZWQiXQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgICAgICBkZXRhaWwKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrUGFja2FnZXMoKSwgM2UzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICAgICAgICBjb25zdCBkaXNwbGF5UGFja2FnZXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMuc2xpY2UoMCwgMTApOwogICAgICAgICAgICBmb3IgKGNvbnN0IHBrZyBvZiBkaXNwbGF5UGFja2FnZXMpIHsKICAgICAgICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICAgICAgICBuYW1lOiBgJHtwa2cubmFtZX06ICR7cGtnLmN1cnJlbnR9IFx1MjE5MiAke3BrZy5sYXRlc3R9YCwKICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBhY2thZ2UiLAogICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGFja2FnZShwa2cubmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggPiAxMCkgewogICAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgICAgIG5hbWU6IGAuLi4gYW5kICR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCAtIDEwfSBtb3JlYCwKICAgICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vcmVIb3Jpem9udGFsIiwKICAgICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICJVcGRhdGUgYWxsIHBhY2thZ2VzIiwKICAgICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTphcnJvd1VwQ2lyY2xlIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQWxsUGFja2FnZXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnBlbmRpbmdQYWNrYWdlVXBkYXRlID0gdHJ1ZTsKICAgICAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICAgICAgbGFiZWw6IGB1cGRhdGUgJHtwYWNrYWdlTmFtZX1gLAogICAgICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0IiwgcGFja2FnZU5hbWVdLAogICAgICAgICAgICBtZXRhZGF0YTogeyBwYWNrYWdlTmFtZSB9CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWwKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgdXBkYXRlQWxsUGFja2FnZXMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICAgICAgY29uc3QgZGV0YWlsID0gewogICAgICAgICAgICB0eXBlOiAicGFja2FnZS11cGRhdGUiLAogICAgICAgICAgICBsYWJlbDogInVwZGF0ZSBhbGwiLAogICAgICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0Il0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IEhlbHBlciBNZXRob2RzID09PT09PT09PT0KICAgICAgICBnZXRQYWNrYWdlU3RhdHVzQ2xhc3MoKSB7CiAgICAgICAgICBpZiAodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgIHJldHVybiB0aGlzLnBhY2thZ2VTdGF0dXM7CiAgICAgICAgfQogICAgICAgIGdldFBhY2thZ2VJY29uKCkgewogICAgICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpsb2FkZXIyIjsKICAgICAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlU3RhdHVzKSB7CiAgICAgICAgICAgIGNhc2UgInVwLXRvLWRhdGUiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmNoZWNrQ2lyY2xlIjsKICAgICAgICAgICAgY2FzZSAidXBkYXRlcy1hdmFpbGFibGUiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOmFsZXJ0Q2lyY2xlIjsKICAgICAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnhDaXJjbGUiOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2UiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZXRQYWNrYWdlU3RhdHVzVGV4dCgpIHsKICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICAgICAgcmV0dXJuICJDaGVja2luZy4uLiI7CiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZVN0YXR1cykgewogICAgICAgICAgICBjYXNlICJ1cC10by1kYXRlIjoKICAgICAgICAgICAgICByZXR1cm4gIlVwIHRvIGRhdGUiOwogICAgICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHVwZGF0ZSR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCAhPT0gMSA/ICJzIiA6ICIifWA7CiAgICAgICAgICAgIGNhc2UgImVycm9yIjoKICAgICAgICAgICAgICByZXR1cm4gIkNoZWNrIGZhaWxlZCI7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuICJQYWNrYWdlcyI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldFBhY2thZ2VUb29sdGlwKCkgewogICAgICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgICAgICByZXR1cm4gIkNoZWNraW5nIGZvciBwYWNrYWdlIHVwZGF0ZXMuLi4iOwogICAgICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VTdGF0dXMpIHsKICAgICAgICAgICAgY2FzZSAidXAtdG8tZGF0ZSI6CiAgICAgICAgICAgICAgcmV0dXJuICJBbGwgcGFja2FnZXMgYXJlIHVwIHRvIGRhdGUiOwogICAgICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9IGF2YWlsYWJsZWA7CiAgICAgICAgICAgIGNhc2UgImVycm9yIjoKICAgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjaGVjayBmb3IgdXBkYXRlcy4gQ2xpY2sgdG8gcmV0cnkuIjsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gIkNsaWNrIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXMiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBNZXRob2RzID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgcGFja2FnZSBjaGVjawogICAgICAgICAqLwogICAgICAgIGFzeW5jIHJlZnJlc2hQYWNrYWdlU3RhdHVzKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIE1hbnVhbGx5IHJlbG9hZCBzY3JpcHRzIGZyb20gcGFja2FnZS5qc29uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgcmVmcmVzaFNjcmlwdHMoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczk1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzV29ya3NwYWNlQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL3R5cGVzY3JpcHQtaW50ZWxsaXNlbnNlLmpzCnZhciBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlcjsKdmFyIGluaXRfdHlwZXNjcmlwdF9pbnRlbGxpc2Vuc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UvdHlwZXNjcmlwdC1pbnRlbGxpc2Vuc2UuanMiKCkgewogICAgVHlwZVNjcmlwdEludGVsbGlTZW5zZU1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGxvYWRlZExpYnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICBub3RGb3VuZFBhY2thZ2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgLy8gUGFja2FnZXMgY2hlY2tlZCBidXQgbm90IGZvdW5kCiAgICAgIG1vbmFjb0luc3RhbmNlID0gbnVsbDsKICAgICAgZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogICAgICAvLyBDYWNoZSBvZiBmaWxlIGNvbnRlbnRzIGZvciBzeW5jaHJvbm91cyBhY2Nlc3MgYW5kIG1vZHVsZSByZXNvbHV0aW9uCiAgICAgIGZpbGVDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIC8vIFRyYWNrIGV4dHJhIGxpYnMgYWRkZWQgZm9yIGNsZWFudXAKICAgICAgYWRkZWRFeHRyYUxpYnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAvKioKICAgICAgICogR2V0IFR5cGVTY3JpcHQgQVBJIHdpdGggcHJvcGVyIHR5cGluZyBmb3IgTW9uYWNvIDAuNTUrCiAgICAgICAqLwogICAgICBnZXQgdHNBcGkoKSB7CiAgICAgICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIHRoaXMubW9uYWNvSW5zdGFuY2UubGFuZ3VhZ2VzLnR5cGVzY3JpcHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluaXRpYWxpemUgd2l0aCBNb25hY28gYW5kIGV4ZWN1dGlvbiBlbnZpcm9ubWVudAogICAgICAgKi8KICAgICAgYXN5bmMgaW5pdChtb25hY29JbnN0LCBlbnYyKSB7CiAgICAgICAgdGhpcy5tb25hY29JbnN0YW5jZSA9IG1vbmFjb0luc3Q7CiAgICAgICAgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCA9IGVudjI7CiAgICAgICAgdGhpcy5jb25maWd1cmVDb21waWxlck9wdGlvbnMoKTsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxQcm9qZWN0RmlsZXMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVjdXJzaXZlbHkgbG9hZCBhbGwgLnRzLy5qcyBmaWxlcyBmcm9tIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0gaW50byBNb25hY28KICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRBbGxQcm9qZWN0RmlsZXMoKSB7CiAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeSgiLyIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWN1cnNpdmVseSBsb2FkIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZGlyUGF0aCkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihkaXJQYXRoKTsKICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICJub2RlX21vZHVsZXMiKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZnVsbFBhdGgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgICAgIGNvbnN0IGV4dCA9IGVudHJ5Lm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICBpZiAoZXh0ID09PSAidHMiIHx8IGV4dCA9PT0gInRzeCIgfHwgZXh0ID09PSAianMiIHx8IGV4dCA9PT0gImpzeCIpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShmdWxsUGF0aCk7CiAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRmlsZU1vZGVsKGZ1bGxQYXRoLCBjb250ZW50Myk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uZmlndXJlQ29tcGlsZXJPcHRpb25zKCkgewogICAgICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgICAgICBpZiAoIXRzKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMoewogICAgICAgICAgdGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDIwLAogICAgICAgICAgbW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkVTTmV4dCwKICAgICAgICAgIC8vIFVzZSBCdW5kbGVyIHJlc29sdXRpb24gaWYgYXZhaWxhYmxlIChNb25hY28gMC40NSspLCBmYWxsYmFjayB0byBOb2RlSnMKICAgICAgICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLkJ1bmRsZXIgPz8gdHMuTW9kdWxlUmVzb2x1dGlvbktpbmQuTm9kZUpzLAogICAgICAgICAgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czogdHJ1ZSwKICAgICAgICAgIGVzTW9kdWxlSW50ZXJvcDogdHJ1ZSwKICAgICAgICAgIHN0cmljdDogdHJ1ZSwKICAgICAgICAgIG5vRW1pdDogdHJ1ZSwKICAgICAgICAgIGFsbG93SnM6IHRydWUsCiAgICAgICAgICBjaGVja0pzOiBmYWxzZSwKICAgICAgICAgIGFsbG93Tm9uVHNFeHRlbnNpb25zOiB0cnVlLAogICAgICAgICAgbGliOiBbImVzMjAyMCIsICJkb20iLCAiZG9tLml0ZXJhYmxlIl0sCiAgICAgICAgICAvLyBTZXQgYmFzZVVybCB0byByb290IGZvciByZXNvbHZpbmcgYWJzb2x1dGUgaW1wb3J0cwogICAgICAgICAgYmFzZVVybDogIi8iLAogICAgICAgICAgLy8gQWxsb3cgaW1wb3J0aW5nIC50cyBleHRlbnNpb25zIGRpcmVjdGx5ICh1c2VmdWwgZm9yIHNvbWUgc2V0dXBzKQogICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgICAgICAvLyBSZXNvbHZlIEpTT04gbW9kdWxlcwogICAgICAgICAgcmVzb2x2ZUpzb25Nb2R1bGU6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0RGlhZ25vc3RpY3NPcHRpb25zKHsKICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiBmYWxzZSwKICAgICAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0RWFnZXJNb2RlbFN5bmModHJ1ZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFBhcnNlIGltcG9ydHMgZnJvbSBUeXBlU2NyaXB0L0phdmFTY3JpcHQgY29udGVudAogICAgICAgKi8KICAgICAgcGFyc2VJbXBvcnRzKGNvbnRlbnQzKSB7CiAgICAgICAgY29uc3QgaW1wb3J0cyA9IFtdOwogICAgICAgIGNvbnN0IGltcG9ydFJlZ2V4ID0gL2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nOwogICAgICAgIGxldCBtYXRjaDI7CiAgICAgICAgd2hpbGUgKChtYXRjaDIgPSBpbXBvcnRSZWdleC5leGVjKGNvbnRlbnQzKSkgIT09IG51bGwpIHsKICAgICAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgICAgICBpZiAoIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLiIpICYmICFpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IGltcG9ydFBhdGguc3RhcnRzV2l0aCgiQCIpID8gaW1wb3J0UGF0aC5zcGxpdCgiLyIpLnNsaWNlKDAsIDIpLmpvaW4oIi8iKSA6IGltcG9ydFBhdGguc3BsaXQoIi8iKVswXTsKICAgICAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVccypcKFxzKlsnIl0oW14nIl0rKVsnIl1ccypcKS9nOwogICAgICAgIHdoaWxlICgobWF0Y2gyID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29udGVudDMpKSAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IG1hdGNoMlsxXTsKICAgICAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gaW1wb3J0UGF0aC5zdGFydHNXaXRoKCJAIikgPyBpbXBvcnRQYXRoLnNwbGl0KCIvIikuc2xpY2UoMCwgMikuam9pbigiLyIpIDogaW1wb3J0UGF0aC5zcGxpdCgiLyIpWzBdOwogICAgICAgICAgICBpbXBvcnRzLnB1c2gocGFja2FnZU5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQoaW1wb3J0cyldOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHR5cGUgZGVmaW5pdGlvbnMgZm9yIGEgcGFja2FnZSBmcm9tIHZpcnR1YWwgRlMKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpIHsKICAgICAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0cnkgewogICAgICAgICAgbGV0IHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKTsKICAgICAgICAgIGlmICghdHlwZXNMb2FkZWQpIHsKICAgICAgICAgICAgdHlwZXNMb2FkZWQgPSBhd2FpdCB0aGlzLnRyeUxvYWRBdFR5cGVzUGFja2FnZShwYWNrYWdlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZXNMb2FkZWQpIHsKICAgICAgICAgICAgdGhpcy5sb2FkZWRMaWJzLmFkZChwYWNrYWdlTmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLm5vdEZvdW5kUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCB0eXBlcyBmb3IgJHtwYWNrYWdlTmFtZX06YCwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB0cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKSB7CiAgICAgICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfWA7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGAke2Jhc2VQYXRofS9wYWNrYWdlLmpzb25gOwogICAgICAgICAgY29uc3QgcGFja2FnZUpzb25FeGlzdHMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmV4aXN0cyhwYWNrYWdlSnNvblBhdGgpOwogICAgICAgICAgaWYgKHBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUocGFja2FnZUpzb25QYXRoKTsKICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uQ29udGVudCk7CiAgICAgICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihwYWNrYWdlSnNvbkNvbnRlbnQsIGBmaWxlOi8vJHtwYWNrYWdlSnNvblBhdGh9YCk7CiAgICAgICAgICAgIGNvbnN0IHR5cGVzUGF0aCA9IHBhY2thZ2VKc29uLnR5cGVzIHx8IHBhY2thZ2VKc29uLnR5cGluZ3M7CiAgICAgICAgICAgIGlmICh0eXBlc1BhdGgpIHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY29tbW9uUGF0aHMgPSBbCiAgICAgICAgICAgIGAke2Jhc2VQYXRofS9pbmRleC5kLnRzYCwKICAgICAgICAgICAgYCR7YmFzZVBhdGh9L2Rpc3QvaW5kZXguZC50c2AsCiAgICAgICAgICAgIGAke2Jhc2VQYXRofS9saWIvaW5kZXguZC50c2AKICAgICAgICAgIF07CiAgICAgICAgICBmb3IgKGNvbnN0IGR0c1BhdGggb2YgY29tbW9uUGF0aHMpIHsKICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGR0c1BhdGgpKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCk7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgcGFja2FnZSB0eXBlcyBmb3IgJHtwYWNrYWdlTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUmVjdXJzaXZlbHkgbG9hZCBhbGwgLmQudHMgZmlsZXMgZnJvbSBhIHBhY2thZ2UgZGlyZWN0b3J5CiAgICAgICAqLwogICAgICBhc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCkgewogICAgICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRzKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShiYXNlUGF0aCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlY3Vyc2l2ZWx5IGxvYWQgLmQudHMgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeQogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShkaXJQYXRoKSB7CiAgICAgICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoZGlyUGF0aCk7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBkaXJQYXRoID09PSAiLyIgPyBgLyR7ZW50cnkubmFtZX1gIDogYCR7ZGlyUGF0aH0vJHtlbnRyeS5uYW1lfWA7CiAgICAgICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAibm9kZV9tb2R1bGVzIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGZ1bGxQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgiLmQudHMiKSkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoZnVsbFBhdGgpOwogICAgICAgICAgICAgICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGNvbnRlbnQzLCBgZmlsZTovLyR7ZnVsbFBhdGh9YCk7CiAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIHRyeUxvYWRBdFR5cGVzUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBjb25zdCB0eXBlc1BhY2thZ2VOYW1lID0gcGFja2FnZU5hbWUuc3RhcnRzV2l0aCgiQCIpID8gYEB0eXBlcy8ke3BhY2thZ2VOYW1lLnNsaWNlKDEpLnJlcGxhY2UoIi8iLCAiX18iKX1gIDogYEB0eXBlcy8ke3BhY2thZ2VOYW1lfWA7CiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3R5cGVzUGFja2FnZU5hbWV9YDsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgaW5kZXhQYXRoID0gYCR7YmFzZVBhdGh9L2luZGV4LmQudHNgOwogICAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGluZGV4UGF0aCkpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUHJvY2VzcyBjb250ZW50IGNoYW5nZSBhbmQgbG9hZCB0eXBlcyBmb3IgYW55IG5ldyBpbXBvcnRzCiAgICAgICAqLwogICAgICBhc3luYyBwcm9jZXNzQ29udGVudENoYW5nZShjb250ZW50MykgewogICAgICAgIGNvbnN0IGltcG9ydHMgPSB0aGlzLnBhcnNlSW1wb3J0cyhjb250ZW50Myk7CiAgICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBpbXBvcnRzKSB7CiAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShwYWNrYWdlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTY2FuIG5vZGVfbW9kdWxlcyBmb3IgcGFja2FnZXMgYW5kIGxvYWQgdHlwZXMgZm9yIGFueSBub3QgeWV0IGxvYWRlZC4KICAgICAgICogQ2FsbGVkIHdoZW4gbm9kZV9tb2R1bGVzIGNoYW5nZXMgKGUuZy4sIGFmdGVyIHBucG0gaW5zdGFsbCkuCiAgICAgICAqLwogICAgICBhc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpIHsKICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9ub2RlX21vZHVsZXMiKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcigiL25vZGVfbW9kdWxlcyIpOwogICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlICE9PSAiZGlyZWN0b3J5IikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGVudHJ5Lm5hbWUuc3RhcnRzV2l0aCgiQCIpKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZFBhdGggPSBgL25vZGVfbW9kdWxlcy8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZEVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIoc2NvcGVkUGF0aCk7CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZEVudHJ5IG9mIHNjb3BlZEVudHJpZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlZEVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBgJHtlbnRyeS5uYW1lfS8ke3Njb3BlZEVudHJ5Lm5hbWV9YDsKICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKCFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShlbnRyeS5uYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBzY2FuIG5vZGVfbW9kdWxlczoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBZGQgYSBmaWxlIG1vZGVsIHRvIE1vbmFjbyBmb3IgY3Jvc3MtZmlsZSBJbnRlbGxpU2Vuc2UKICAgICAgICogQWxzbyByZWdpc3RlcnMgdGhlIGZpbGUgd2l0aCBUeXBlU2NyaXB0IHZpYSBhZGRFeHRyYUxpYiBmb3IgbW9kdWxlIHJlc29sdXRpb24KICAgICAgICovCiAgICAgIGFkZEZpbGVNb2RlbChwYXRoMiwgY29udGVudDMpIHsKICAgICAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KHBhdGgyLCBjb250ZW50Myk7CiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5tb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3BhdGgyfWApOwogICAgICAgIGNvbnN0IGV4aXN0aW5nTW9kZWwgPSB0aGlzLm1vbmFjb0luc3RhbmNlLmVkaXRvci5nZXRNb2RlbCh1cmkpOwogICAgICAgIGlmIChleGlzdGluZ01vZGVsKSB7CiAgICAgICAgICBpZiAoZXhpc3RpbmdNb2RlbC5nZXRWYWx1ZSgpICE9PSBjb250ZW50MykgewogICAgICAgICAgICBleGlzdGluZ01vZGVsLnNldFZhbHVlKGNvbnRlbnQzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpOwogICAgICAgICAgdGhpcy5tb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwoY29udGVudDMsIGxhbmd1YWdlLCB1cmkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmFkZEZpbGVBc0V4dHJhTGliKHBhdGgyLCBjb250ZW50Myk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIGZpbGUgYXMgYW4gZXh0cmEgbGliIGZvciBUeXBlU2NyaXB0IG1vZHVsZSByZXNvbHV0aW9uLgogICAgICAgKiBUaGlzIGVuYWJsZXMgVHlwZVNjcmlwdCB0byByZXNvbHZlIGltcG9ydHMgdG8gcHJvamVjdCBmaWxlcy4KICAgICAgICovCiAgICAgIGFkZEZpbGVBc0V4dHJhTGliKHBhdGgyLCBjb250ZW50MykgewogICAgICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgICAgICBpZiAoIXRzKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hZGRlZEV4dHJhTGlicy5nZXQocGF0aDIpOwogICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICAgZXhpc3RpbmcuZGlzcG9zZSgpOwogICAgICAgIH0KICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGBmaWxlOi8vJHtwYXRoMn1gOwogICAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGZpbGVQYXRoKTsKICAgICAgICB0aGlzLmFkZGVkRXh0cmFMaWJzLnNldChwYXRoMiwgZGlzcG9zYWJsZSk7CiAgICAgICAgaWYgKHBhdGgyLmVuZHNXaXRoKCIudHMiKSAmJiAhcGF0aDIuZW5kc1dpdGgoIi5kLnRzIikpIHsKICAgICAgICAgIGNvbnN0IGpzUGF0aCA9IHBhdGgyLnJlcGxhY2UoL1wudHMkLywgIi5qcyIpOwogICAgICAgICAgY29uc3QganNGaWxlUGF0aCA9IGBmaWxlOi8vJHtqc1BhdGh9YDsKICAgICAgICAgIGNvbnN0IGpzRGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywganNGaWxlUGF0aCk7CiAgICAgICAgICB0aGlzLmFkZGVkRXh0cmFMaWJzLnNldChqc1BhdGgsIGpzRGlzcG9zYWJsZSk7CiAgICAgICAgICB0aGlzLmZpbGVDYWNoZS5zZXQoanNQYXRoLCBjb250ZW50Myk7CiAgICAgICAgfSBlbHNlIGlmIChwYXRoMi5lbmRzV2l0aCgiLnRzeCIpKSB7CiAgICAgICAgICBjb25zdCBqc3hQYXRoID0gcGF0aDIucmVwbGFjZSgvXC50c3gkLywgIi5qc3giKTsKICAgICAgICAgIGNvbnN0IGpzeEZpbGVQYXRoID0gYGZpbGU6Ly8ke2pzeFBhdGh9YDsKICAgICAgICAgIGNvbnN0IGpzeERpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGpzeEZpbGVQYXRoKTsKICAgICAgICAgIHRoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGpzeFBhdGgsIGpzeERpc3Bvc2FibGUpOwogICAgICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KGpzeFBhdGgsIGNvbnRlbnQzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBjYWNoZWQgZmlsZSBjb250ZW50IGZvciBzeW5jaHJvbm91cyBhY2Nlc3MKICAgICAgICovCiAgICAgIGdldEZpbGVDb250ZW50KHBhdGgyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChwYXRoMik7CiAgICAgIH0KICAgICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICAgIGNvbnN0IGV4dCA9IHBhdGgyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgc3dpdGNoIChleHQpIHsKICAgICAgICAgIGNhc2UgInRzIjoKICAgICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICAgIHJldHVybiAidHlwZXNjcmlwdCI7CiAgICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgICBjYXNlICJqc3giOgogICAgICAgICAgICByZXR1cm4gImphdmFzY3JpcHQiOwogICAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICAgIHJldHVybiAianNvbiI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gInBsYWludGV4dCI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yL2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yLmpzCnZhciBfX2VzRGVjb3JhdGU5NSwgX19ydW5Jbml0aWFsaXplcnM5NiwgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3I7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX2RpZmZfZWRpdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yL2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF92ZXJzaW9uKCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2RlZXNfYnV0dG9uKCk7CiAgICBfX2VzRGVjb3JhdGU5NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczk2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfb3JpZ2luYWxDb250ZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21vZGlmaWVkQ29udGVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21vZGlmaWVkQ29udGVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9tb2RpZmllZENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnM7CiAgICAgIGxldCBfb3JpZ2luYWxMYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcmlnaW5hbExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbW9kaWZpZWRMYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfbW9kaWZpZWRDb250ZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICAgICAgX29yaWdpbmFsTGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9maWxlUGF0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk1KHRoaXMsIG51bGwsIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3JpZ2luYWxDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcmlnaW5hbENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3JpZ2luYWxDb250ZW50ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcmlnaW5hbENvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfb3JpZ2luYWxDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk1KHRoaXMsIG51bGwsIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kaWZpZWRDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kaWZpZWRDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubW9kaWZpZWRDb250ZW50ID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2RpZmllZENvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfbW9kaWZpZWRDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk1KHRoaXMsIG51bGwsIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9yaWdpbmFsTGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9yaWdpbmFsTGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxMYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLm9yaWdpbmFsTGFiZWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29yaWdpbmFsTGFiZWxfaW5pdGlhbGl6ZXJzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5NSh0aGlzLCBudWxsLCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RpZmllZExhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZExhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGlmaWVkTGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5tb2RpZmllZExhYmVsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2RpZmllZExhYmVsX2luaXRpYWxpemVycywgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTUodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmxhbmd1YWdlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5NSh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZmlsZVBhdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbGVQYXRoX2luaXRpYWxpemVycywgX2ZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk1KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBERU1PCiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvcgogICAgICAub3JpZ2luYWxDb250ZW50PSR7J2Z1bmN0aW9uIGhlbGxvKCkge1xuICBjb25zb2xlLmxvZygiSGVsbG8iKTtcbn0nfQogICAgICAubW9kaWZpZWRDb250ZW50PSR7J2Z1bmN0aW9uIGhlbGxvKCkge1xuICBjb25zb2xlLmxvZygiSGVsbG8gV29ybGQhIik7XG4gIHJldHVybiB0cnVlO1xufSd9CiAgICAgIC5sYW5ndWFnZT0keyJ0eXBlc2NyaXB0In0KICAgICAgLmZpbGVQYXRoPSR7Ii9kZW1vL2V4YW1wbGUudHMifQogICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgYDsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiV29ya3NwYWNlIl07CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICBkaWZmRWRpdG9yRGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5Nih0aGlzLCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgIiIpOwogICAgICAgIGdldCBvcmlnaW5hbENvbnRlbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jb3JpZ2luYWxDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcmlnaW5hbENvbnRlbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvcmlnaW5hbENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTYodGhpcywgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTYodGhpcywgX21vZGlmaWVkQ29udGVudF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IG1vZGlmaWVkQ29udGVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1vZGlmaWVkQ29udGVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjb3JpZ2luYWxMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTYodGhpcywgX21vZGlmaWVkQ29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTYodGhpcywgX29yaWdpbmFsTGFiZWxfaW5pdGlhbGl6ZXJzLCAiRGlzayBWZXJzaW9uIikpOwogICAgICAgIGdldCBvcmlnaW5hbExhYmVsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG9yaWdpbmFsTGFiZWwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvcmlnaW5hbExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nih0aGlzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTYodGhpcywgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzLCAiTG9jYWwgVmVyc2lvbiIpKTsKICAgICAgICBnZXQgbW9kaWZpZWRMYWJlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBtb2RpZmllZExhYmVsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbW9kaWZpZWRMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk2KHRoaXMsIF9tb2RpZmllZExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nih0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAidHlwZXNjcmlwdCIpKTsKICAgICAgICBnZXQgbGFuZ3VhZ2UoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGxhbmd1YWdlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nih0aGlzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk2KHRoaXMsIF9maWxlUGF0aF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IGZpbGVQYXRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBmaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGRpZmZFZGl0b3IgPSAoX19ydW5Jbml0aWFsaXplcnM5Nih0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBtb25hY29UaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgb3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgICAgbW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5kaWZmLXdyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5kaWZmLXRvb2xiYXIgewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZGlmZi1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLmRpZmYtZmlsZW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWxhYmVscyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZGlmZi1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kaWZmLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubmF2LWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmZpbGVQYXRoLnNwbGl0KCIvIikucG9wKCkgfHwgImZpbGUiOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJkaWZmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLWluZm8iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlmZi1maWxlbmFtZSI+JHtmaWxlTmFtZX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7CiAgICAgICAgICBhd2FpdCB0aGlzLmluaXREaWZmRWRpdG9yKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGluaXREaWZmRWRpdG9yKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGlmZi1jb250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBtb25hY29DZG5CYXNlID0gYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbW9uYWNvLWVkaXRvckAke01PTkFDT19WRVJTSU9OfWA7CiAgICAgICAgICBsZXQgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgICAgICBjb25zdCBjaGVja01vbmFjbyA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubW9uYWNvKSB7CiAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tNb25hY28pOwogICAgICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgICAgIGNvbnN0IGluaXRpYWxUaGVtZSA9IGlzQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3Qgb3JpZ2luYWxVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgICAgY29uc3QgbW9kaWZpZWRVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9tb2RpZmllZC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgICAgdGhpcy5vcmlnaW5hbE1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMub3JpZ2luYWxDb250ZW50LCB0aGlzLmxhbmd1YWdlLCBvcmlnaW5hbFVyaSk7CiAgICAgICAgICB0aGlzLm1vZGlmaWVkTW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5tb2RpZmllZENvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIG1vZGlmaWVkVXJpKTsKICAgICAgICAgIHRoaXMuZGlmZkVkaXRvciA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVEaWZmRWRpdG9yKGNvbnRhaW5lciwgewogICAgICAgICAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsCiAgICAgICAgICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICAgICAgICAgLy8gQWxsb3cgZWRpdGluZyB0aGUgbW9kaWZpZWQgKGxvY2FsKSBzaWRlCiAgICAgICAgICAgIG9yaWdpbmFsRWRpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAvLyBEaXNrIHZlcnNpb24gaXMgcmVhZC1vbmx5CiAgICAgICAgICAgIHJlbmRlclNpZGVCeVNpZGU6IHRydWUsCiAgICAgICAgICAgIGlnbm9yZVRyaW1XaGl0ZXNwYWNlOiBmYWxzZSwKICAgICAgICAgICAgZm9udFNpemU6IDE0LAogICAgICAgICAgICBtaW5pbWFwOiB7CiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUoaW5pdGlhbFRoZW1lKTsKICAgICAgICAgIHRoaXMuZGlmZkVkaXRvci5zZXRNb2RlbCh7CiAgICAgICAgICAgIG9yaWdpbmFsOiB0aGlzLm9yaWdpbmFsTW9kZWwsCiAgICAgICAgICAgIG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkTW9kZWwKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1RoZW1lID0gZ29CcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUobmV3VGhlbWUpOwogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBjc3NJZCA9ICJtb25hY28tZGlmZi1lZGl0b3ItY3NzIjsKICAgICAgICAgIGlmICghdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChjc3NJZCkpIHsKICAgICAgICAgICAgY29uc3QgY3NzUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHttb25hY29DZG5CYXNlfS9taW4vdnMvZWRpdG9yL2VkaXRvci5tYWluLmNzc2ApOwogICAgICAgICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgY3NzUmVzcG9uc2UudGV4dCgpOwogICAgICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgICAgICBzdHlsZUVsZW1lbnQuaWQgPSBjc3NJZDsKICAgICAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gY3NzVGV4dDsKICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHRoaXMuZGlmZkVkaXRvcj8ucmV2ZWFsRmlyc3REaWZmKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgdGhpcy5kaWZmRWRpdG9yRGVmZXJyZWQucmVzb2x2ZSh0aGlzLmRpZmZFZGl0b3IpOwogICAgICAgIH0KICAgICAgICBnb1RvTmV4dERpZmYoKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iik7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ29Ub1ByZXZpb3VzRGlmZigpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIik7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYWNjZXB0TG9jYWwoKSB7CiAgICAgICAgICBjb25zdCBtb2RpZmllZENvbnRlbnQgPSB0aGlzLmRpZmZFZGl0b3I/LmdldE1vZGlmaWVkRWRpdG9yKCkuZ2V0VmFsdWUoKSB8fCB0aGlzLm1vZGlmaWVkQ29udGVudDsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBhY3Rpb246ICJ1c2UtbG9jYWwiLCBjb250ZW50OiBtb2RpZmllZENvbnRlbnQgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgYWNjZXB0RGlzaygpIHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgICAgIGRldGFpbDogeyBhY3Rpb246ICJ1c2UtZGlzayIsIGNvbnRlbnQ6IHRoaXMub3JpZ2luYWxDb250ZW50IH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGNsb3NlKCkgewogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1jbG9zZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbE1vZGVsKSB7CiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5tb2RpZmllZE1vZGVsKSB7CiAgICAgICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5kaWZmRWRpdG9yKSB7CiAgICAgICAgICAgIHRoaXMuZGlmZkVkaXRvci5kaXNwb3NlKCk7CiAgICAgICAgICAgIHRoaXMuZGlmZkVkaXRvciA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczk2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS5qcwp2YXIgX19lc0RlY29yYXRlOTYsIF9fcnVuSW5pdGlhbGl6ZXJzOTcsIERlZXNXb3Jrc3BhY2U7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHMyOCgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9ncm91cF9ydW50aW1lKCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX21vbmFjbygpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9maWxldHJlZSgpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9maWxldHJlZSgpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9wcmV2aWV3KCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX2JvdHRvbWJhcigpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfbW9uYWNvKCk7CiAgICBpbml0X3R5cGVzY3JpcHRfaW50ZWxsaXNlbnNlKCk7CiAgICBpbml0X2RlZXNfY29udGV4dG1lbnUoKTsKICAgIGluaXRfZGlzdF90c19kZW1vdG9vbHMoKTsKICAgIGluaXRfZGVlc19hY3Rpb25iYXIoKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfZGlmZl9lZGl0b3IoKTsKICAgIF9fZXNEZWNvcmF0ZTk2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNXb3Jrc3BhY2UgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0ZpbGVUcmVlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUZXJtaW5hbF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zaG93VGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9maWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90ZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX29wZW5GaWxlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX29wZW5GaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9vcGVuRmlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNUZXJtaW5hbENvbGxhcHNlZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0luaXRpYWxpemluZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlQm90dG9tUGFuZWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hdXRvU2F2ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2F1dG9TYXZlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaW5pdENvbW1hbmRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbml0Q29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pbml0Q29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2luaXRPdXRwdXRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pbml0T3V0cHV0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2luaXRPdXRwdXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnM7CiAgICAgIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd0RpZmZWaWV3X2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dEaWZmVmlld19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZGlmZlZpZXdDb25maWdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNXb3Jrc3BhY2UyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgICAgIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX3Nob3dUZXJtaW5hbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF90ZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9vcGVuRmlsZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYXV0b1NhdmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2luaXRPdXRwdXRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Nih0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbGl6YXRpb25Qcm9taXNlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsaXphdGlvblByb21pc2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVUcmVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZVRyZWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVUcmVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd0ZpbGVUcmVlID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCBfc2hvd0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rlcm1pbmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGVybWluYWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rlcm1pbmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2hvd1Rlcm1pbmFsID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VGVybWluYWxfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVUcmVlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVRyZWVXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmZpbGVUcmVlV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbGVUcmVlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfZmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Nih0aGlzLCBudWxsLCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRlcm1pbmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGVybWluYWxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Rlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycywgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9vcGVuRmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbkZpbGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRmlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoub3BlbkZpbGVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuRmlsZXNfaW5pdGlhbGl6ZXJzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVGaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlRmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlRmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmVGaWxlUGF0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNUZXJtaW5hbENvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNUZXJtaW5hbENvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNUZXJtaW5hbENvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNUZXJtaW5hbENvbGxhcHNlZF9pbml0aWFsaXplcnMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRmlsZVRyZWVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRmlsZVRyZWVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzRmlsZVRyZWVDb2xsYXBzZWQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzRmlsZVRyZWVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Nih0aGlzLCBudWxsLCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNJbml0aWFsaXppbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSW5pdGlhbGl6aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSW5pdGlhbGl6aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNJbml0aWFsaXppbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVCb3R0b21QYW5lbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQm90dG9tUGFuZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQm90dG9tUGFuZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmVCb3R0b21QYW5lbCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlQm90dG9tUGFuZWxfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlQm90dG9tUGFuZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpYWdub3N0aWNNYXJrZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWFnbm9zdGljTWFya2VycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWFnbm9zdGljTWFya2Vycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRpYWdub3N0aWNNYXJrZXJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaWFnbm9zdGljTWFya2Vyc19pbml0aWFsaXplcnMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5Nih0aGlzLCBudWxsLCBfYXV0b1NhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1NhdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TYXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9TYXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouYXV0b1NhdmUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9TYXZlX2luaXRpYWxpemVycywgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0Q29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pbml0Q29tbWFuZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBfaW5pdENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2luaXRPdXRwdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdE91dHB1dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdE91dHB1dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0T3V0cHV0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaW5pdE91dHB1dCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdE91dHB1dF9pbml0aWFsaXplcnMsIF9pbml0T3V0cHV0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk2KHRoaXMsIG51bGwsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50RmlsZVRyZWVXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEZpbGVUcmVlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudEZpbGVUcmVlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUZXJtaW5hbEhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIF9jdXJyZW50VGVybWluYWxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nRmlsZVRyZWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdGaWxlVHJlZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nRmlsZVRyZWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0RyYWdnaW5nRmlsZVRyZWUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nVGVybWluYWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdUZXJtaW5hbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nVGVybWluYWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc0RyYWdnaW5nVGVybWluYWwgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9pbml0aWFsaXplcnMsIF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93RGlmZlZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dEaWZmVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93RGlmZlZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93RGlmZlZpZXcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dEaWZmVmlld19pbml0aWFsaXplcnMsIF9zaG93RGlmZlZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTYodGhpcywgbnVsbCwgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpZmZWaWV3Q29uZmlnIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWZmVmlld0NvbmZpZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWZmVmlld0NvbmZpZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRpZmZWaWV3Q29uZmlnID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaWZmVmlld0NvbmZpZ19pbml0aWFsaXplcnMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU5NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV29ya3NwYWNlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVudjIgPSBuZXcgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICAgICAgICAgIGNvbnN0IG1vdW50UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGVudjIuaW5pdCgpOwogICAgICAgICAgICBjb25zdCBmaWxlVHJlZSA9IHsKICAgICAgICAgICAgICAicGFja2FnZS5qc29uIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJkZW1vLXByb2plY3QiLAogICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICIxLjAuMCIsCiAgICAgICAgICAgICAgICAgICAgdHlwZTogIm1vZHVsZSIsCiAgICAgICAgICAgICAgICAgICAgc2NyaXB0czogewogICAgICAgICAgICAgICAgICAgICAgYnVpbGQ6ICJ0c2MiLAogICAgICAgICAgICAgICAgICAgICAgZGV2OiAidHNjIC0td2F0Y2giCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgICAgICJAcHVzaC5yb2Nrcy9zbWFydHByb21pc2UiOiAiXjQuMi4zIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7CiAgICAgICAgICAgICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiXjIyLjAuMCIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlc2NyaXB0OiAiXjUuMC4wIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgMikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJucG1leHRyYS5qc29uIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgICAgIGRlZXNFZGl0b3JXb3Jrc3BhY2U6IHsKICAgICAgICAgICAgICAgICAgICAgIG9uSW5pdDogInBucG0gaW5zdGFsbCIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAidHNjb25maWcuanNvbiI6IHsKICAgICAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgICAgICBjb21waWxlck9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogIkVTMjAyMiIsCiAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6ICJOb2RlTmV4dCIsCiAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiAiTm9kZU5leHQiLAogICAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgb3V0RGlyOiAiLi9kaXN0IiwKICAgICAgICAgICAgICAgICAgICAgIHJvb3REaXI6ICIuL3NyYyIsCiAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogWyJzcmMvKiovKiJdCiAgICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBzcmM6IHsKICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogewogICAgICAgICAgICAgICAgICAiaW5kZXgudHMiOiB7CiAgICAgICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICAgICAgY29udGVudHM6IGAvLyBNYWluIGVudHJ5IHBvaW50CmltcG9ydCB7IGdyZWV0LCBmb3JtYXROYW1lIH0gZnJvbSAnLi91dGlscy5qcyc7Cgpjb25zdCBuYW1lID0gZm9ybWF0TmFtZSgnV29ybGQnKTsKY29uc29sZS5sb2coZ3JlZXQobmFtZSkpOwoKLy8gRXhhbXBsZSBhc3luYyBmdW5jdGlvbgphc3luYyBmdW5jdGlvbiBtYWluKCkgewogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmVzb2x2ZSgnSGVsbG8gZnJvbSBhc3luYyEnKTsKICBjb25zb2xlLmxvZyhyZXN1bHQpOwp9CgptYWluKCk7CmAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJ1dGlscy50cyI6IHsKICAgICAgICAgICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAiaW1wb3J0dGVzdC50cyI6IHsKICAgICAgICAgICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFRlc3QgbnBtIHBhY2thZ2UgaW1wb3J0cwppbXBvcnQgKiBhcyBzbWFydHByb21pc2UgZnJvbSAnQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlJzsKCi8vIFRoaXMgc2hvdWxkIGhhdmUgSW50ZWxsaVNlbnNlIHNob3dpbmcgZGVmZXIoKSBtZXRob2QKY29uc3QgZGVmZXJyZWQgPSBzbWFydHByb21pc2UuZGVmZXI8c3RyaW5nPigpOwoKLy8gVGVzdCB1c2luZyB0aGUgZGVmZXJyZWQgcHJvbWlzZQphc3luYyBmdW5jdGlvbiB0ZXN0U21hcnRQcm9taXNlKCkgewogIHNldFRpbWVvdXQoKCkgPT4gewogICAgZGVmZXJyZWQucmVzb2x2ZSgnSGVsbG8gZnJvbSBzbWFydHByb21pc2UhJyk7CiAgfSwgMTAwKTsKCiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVmZXJyZWQucHJvbWlzZTsKICBjb25zb2xlLmxvZyhyZXN1bHQpOwp9Cgp0ZXN0U21hcnRQcm9taXNlKCk7CmAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGF3YWl0IGVudjIubW91bnQoZmlsZVRyZWUpOwogICAgICAgICAgfSkoKTsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsiOwogICAgICAgICAgY29uc3Qgd29ya3NwYWNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd29ya3NwYWNlIik7CiAgICAgICAgICB3b3Jrc3BhY2VFbGVtZW50LmV4ZWN1dGlvbkVudmlyb25tZW50ID0gZW52MjsKICAgICAgICAgIHdvcmtzcGFjZUVsZW1lbnQuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbW91bnRQcm9taXNlOwogICAgICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh3b3Jrc3BhY2VFbGVtZW50KTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgICAgJHtjb250YWluZXJFbGVtZW50fQogICAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICBgOwogICAgICAgIH07CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cHMgPSBbIldvcmtzcGFjZSJdOwogICAgICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGluaXRpYWxpemF0aW9uUHJvbWlzZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsaXphdGlvblByb21pc2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGluaXRpYWxpemF0aW9uUHJvbWlzZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2luaXRpYWxpemF0aW9uUHJvbWlzZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBzaG93RmlsZVRyZWUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93RmlsZVRyZWUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3Nob3dUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICBnZXQgc2hvd1Rlcm1pbmFsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2hvd1Rlcm1pbmFsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMsIDI1MCkpOwogICAgICAgIGdldCBmaWxlVHJlZVdpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVUcmVlV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGZpbGVUcmVlV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIDIwMCkpOwogICAgICAgIGdldCB0ZXJtaW5hbEhlaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjb3BlbkZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfdGVybWluYWxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9vcGVuRmlsZXNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIGdldCBvcGVuRmlsZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jb3BlbkZpbGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBvcGVuRmlsZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNvcGVuRmlsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2FjdGl2ZUZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgICAgIGdldCBhY3RpdmVGaWxlUGF0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVGaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWN0aXZlRmlsZVBhdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3RpdmVGaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzVGVybWluYWxDb2xsYXBzZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNUZXJtaW5hbENvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzVGVybWluYWxDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzRmlsZVRyZWVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaXNGaWxlVHJlZUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNGaWxlVHJlZUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzRmlsZVRyZWVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzSW5pdGlhbGl6aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIGdldCBpc0luaXRpYWxpemluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0luaXRpYWxpemluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNJbml0aWFsaXppbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpc0luaXRpYWxpemluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aXZlQm90dG9tUGFuZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9pc0luaXRpYWxpemluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2FjdGl2ZUJvdHRvbVBhbmVsX2luaXRpYWxpemVycywgInRlcm1pbmFsIikpOwogICAgICAgIGdldCBhY3RpdmVCb3R0b21QYW5lbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgYWN0aXZlQm90dG9tUGFuZWwodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZGlhZ25vc3RpY01hcmtlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9hY3RpdmVCb3R0b21QYW5lbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2RpYWdub3N0aWNNYXJrZXJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICBnZXQgZGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZGlhZ25vc3RpY01hcmtlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRpYWdub3N0aWNNYXJrZXJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZGlhZ25vc3RpY01hcmtlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGluaXRpYWxpemF0aW9uU3RhcnRlZCA9IGZhbHNlOwogICAgICAgIGludGVsbGlTZW5zZU1hbmFnZXIgPSBudWxsOwogICAgICAgIGludGVsbGlTZW5zZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgLy8gbm9kZV9tb2R1bGVzIHdhdGNoZXIgZm9yIGF1dG8tbG9hZGluZyB0eXBlcwogICAgICAgIG5vZGVNb2R1bGVzV2F0Y2hlciA9IG51bGw7CiAgICAgICAgbm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQgPSBudWxsOwogICAgICAgIGludGVsbGlTZW5zZURlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICAgICAgLy8gT3BlbiBmaWxlIHdhdGNoZXJzIGZvciBleHRlcm5hbCBjaGFuZ2UgZGV0ZWN0aW9uCiAgICAgICAgb3BlbkZpbGVXYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgZmlsZUNoYW5nZURlYm91bmNlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBhY3Rpb25iYXJFbGVtZW50ID0gbnVsbDsKICAgICAgICAjYXV0b1NhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2F1dG9TYXZlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8vIEF1dG8tc2F2ZSBmdW5jdGlvbmFsaXR5CiAgICAgICAgZ2V0IGF1dG9TYXZlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhdXRvU2F2ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGF1dG9TYXZlSW50ZXJ2YWwgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfYXV0b1NhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICAjaW5pdENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgIiIpOwogICAgICAgIC8vIEluaXQgdGVybWluYWwgcHJldmlldyBzdGF0ZQogICAgICAgIGdldCBpbml0Q29tbWFuZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5pdENvbW1hbmQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaW5pdE91dHB1dF9pbml0aWFsaXplcnMsIFtdKSk7CiAgICAgICAgZ2V0IGluaXRPdXRwdXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaW5pdE91dHB1dCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2luaXRPdXRwdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICAgICAgLy8gUmVzaXplIHN0YXRlCiAgICAgICAgZ2V0IGN1cnJlbnRGaWxlVHJlZVdpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50RmlsZVRyZWVXaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIDIwMCkpOwogICAgICAgIGdldCBjdXJyZW50VGVybWluYWxIZWlnaHQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudFRlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50VGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTcodGhpcywgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzRHJhZ2dpbmdGaWxlVHJlZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0RyYWdnaW5nRmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzRHJhZ2dpbmdGaWxlVHJlZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaXNEcmFnZ2luZ0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNEcmFnZ2luZ1Rlcm1pbmFsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNEcmFnZ2luZ1Rlcm1pbmFsKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93RGlmZlZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9zaG93RGlmZlZpZXdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgICAgIC8vIERpZmYgdmlldyBzdGF0ZQogICAgICAgIGdldCBzaG93RGlmZlZpZXcoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93RGlmZlZpZXcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93RGlmZlZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5Nyh0aGlzLCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGRpZmZWaWV3Q29uZmlnKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkaWZmVmlld0NvbmZpZyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEtleWJvYXJkIHNob3J0Y3V0IGhhbmRsZXIgKGJvdW5kIGZvciBwcm9wZXIgY2xlYW51cCkKICAgICAgICBrZXlkb3duSGFuZGxlciA9IChfX3J1bkluaXRpYWxpemVyczk3KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgICAgIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmIGUxMS5rZXkgPT09ICJzIiAmJiAhZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB0aGlzLnNhdmVBY3RpdmVGaWxlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKGUxMS5tZXRhS2V5IHx8IGUxMS5jdHJsS2V5KSAmJiBlMTEuc2hpZnRLZXkgJiYgZTExLmtleS50b0xvd2VyQ2FzZSgpID09PSAicyIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuc2F2ZUFsbEZpbGVzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gPT09PT09PT09PSBGaWxldHJlZSBSZXNpemUgSGFuZGxlcnMgPT09PT09PT09PQogICAgICAgIGhhbmRsZUZpbGVUcmVlTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdGaWxlVHJlZSA9IHRydWU7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgICAgfTsKICAgICAgICBoYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgICAgICBjb25zdCBtaW5XaWR0aCA9IDE1MDsKICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gY29udGFpbmVyUmVjdC53aWR0aCAqIDAuNTsKICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIE1hdGgubWluKG1heFdpZHRoLCBtb3VzZVgpKTsKICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBuZXdXaWR0aDsKICAgICAgICB9OwogICAgICAgIGhhbmRsZUZpbGVUcmVlTW91c2VVcCA9ICgpID0+IHsKICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID0gZmFsc2U7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgICB9OwogICAgICAgIC8vID09PT09PT09PT0gVGVybWluYWwgUmVzaXplIEhhbmRsZXJzID09PT09PT09PT0KICAgICAgICBoYW5kbGVUZXJtaW5hbE1vdXNlRG93biA9IChlMTEpID0+IHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSB0cnVlOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSk7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApOwogICAgICAgIH07CiAgICAgICAgaGFuZGxlVGVybWluYWxNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIGNvbnN0IG1vdXNlWSA9IGUxMS5jbGllbnRZIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgICAgICBjb25zdCB0ZXJtaW5hbEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gbW91c2VZOwogICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gMTAwOwogICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gY29udGFpbmVyUmVjdC5oZWlnaHQgKiAwLjc7CiAgICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIE1hdGgubWluKG1heEhlaWdodCwgdGVybWluYWxIZWlnaHQpKTsKICAgICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsSGVpZ2h0ID0gbmV3SGVpZ2h0OwogICAgICAgIH07CiAgICAgICAgaGFuZGxlVGVybWluYWxNb3VzZVVwID0gKCkgPT4gewogICAgICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSBmYWxzZTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgICAgIH07CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbC5jb2xsYXBzZWQgewogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwgImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAucHJvYmxlbS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbWVzc2FnZSB7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbG9jYXRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzZXMgPSBbCiAgICAgICAgICAgICJ3b3Jrc3BhY2UtY29udGFpbmVyIiwKICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgfHwgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPyAiZHJhZ2dpbmciIDogIiIKICAgICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTsKICAgICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nKSB7CiAgICAgICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJpbml0aWFsaXppbmciPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bG9hZGVyMiJ9IGljb25TaXplPSIzMiI+PC9kZWVzLWljb24+CiAgICAgICAgICA8c3Bhbj5Jbml0aWFsaXppbmcgd29ya3NwYWNlLi4uPC9zcGFuPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcKICAgICAgICAgICAgLmNvbW1hbmQ9JHt0aGlzLmluaXRDb21tYW5kIHx8ICIifQogICAgICAgICAgICAubGluZXM9JHt0aGlzLmluaXRPdXRwdXR9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ3b3Jrc3BhY2Utb3V0ZXIiPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3Nlc30iPgogICAgICAgICAgPCEtLSBGaWxldHJlZSBwYW5lbCAoZnVsbCBoZWlnaHQpIC0tPgogICAgICAgICAgJHt0aGlzLnNob3dGaWxlVHJlZSA/IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9ImZpbGV0cmVlLXBhbmVsICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZCA/IDAgOiB0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRofXB4IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWZpbGV0cmVlCiAgICAgICAgICAgICAgICAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHt0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fQogICAgICAgICAgICAgICAgLnNlbGVjdGVkUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICBAZmlsZS1zZWxlY3Q9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAkeyF0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZS12ZXJ0aWNhbCAke3RoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHt0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VEb3dufQogICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgYCA6ICIifQoKICAgICAgICAgIDwhLS0gRWRpdG9yICsgVGVybWluYWwgYXJlYSAtLT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1hcmVhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXBhbmVsIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5vcGVuRmlsZXMubWFwKChmaWxlKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGFiICR7ZmlsZS5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmFjdGl2YXRlRmlsZShmaWxlLnBhdGgpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICR7ZmlsZS5tb2RpZmllZCA/IGIyYDxzcGFuIGNsYXNzPSJ0YWItbW9kaWZpZWQiPjwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLW5hbWUiPiR7ZmlsZS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0keyhlMTEpID0+IHRoaXMuY2xvc2VGaWxlKGUxMSwgZmlsZS5wYXRoKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLW1lbnUtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLnNob3dFZGl0b3JNZW51fSB0aXRsZT0iRWRpdG9yIG9wdGlvbnMiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTptb3JlVmVydGljYWwifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgJHt0aGlzLnNob3dEaWZmVmlldyAmJiB0aGlzLmRpZmZWaWV3Q29uZmlnID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvcgogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuZGlmZlZpZXdDb25maWcuZmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLm9yaWdpbmFsQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcub3JpZ2luYWxDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5tb2RpZmllZENvbnRlbnQ9JHt0aGlzLmRpZmZWaWV3Q29uZmlnLm1vZGlmaWVkQ29udGVudH0KICAgICAgICAgICAgICAgICAgICAubGFuZ3VhZ2U9JHt0aGlzLmRpZmZWaWV3Q29uZmlnLmxhbmd1YWdlfQogICAgICAgICAgICAgICAgICAgIEBkaWZmLXJlc29sdmVkPSR7dGhpcy5oYW5kbGVEaWZmUmVzb2x2ZWR9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtY2xvc2VkPSR7KCkgPT4gewogICAgICAgICAgICB0aGlzLnNob3dEaWZmVmlldyA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogICAgICAgICAgICAgICAgYCA6IHRoaXMub3BlbkZpbGVzLmxlbmd0aCA9PT0gMCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZUNvZGUifSBpY29uU2l6ZT0iNDgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlNlbGVjdCBhIGZpbGUgdG8gZWRpdDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgICAgICAgICAuZmlsZVBhdGg9JHt0aGlzLmFjdGl2ZUZpbGVQYXRofQogICAgICAgICAgICAgICAgICAgIC5jb250ZW50PSR7dGhpcy5nZXRBY3RpdmVGaWxlQ29udGVudCgpfQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKX0KICAgICAgICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBIb3Jpem9udGFsIHJlc2l6ZSBoYW5kbGUgZm9yIHRlcm1pbmFsIC0tPgogICAgICAgICAgICAke3RoaXMuc2hvd1Rlcm1pbmFsICYmICF0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZS1ob3Jpem9udGFsICR7dGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlVGVybWluYWxNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICA8IS0tIFRlcm1pbmFsIHBhbmVsIC0tPgogICAgICAgICAgICAke3RoaXMuc2hvd1Rlcm1pbmFsID8gYjJgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9InRlcm1pbmFsLXBhbmVsICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBzdHlsZT0iaGVpZ2h0OiAke3RoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA/IDMyIDogdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHR9cHgiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtdGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InBhbmVsLXRhYiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWwgPT09ICJ0ZXJtaW5hbCIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZlQm90dG9tUGFuZWwgPSAidGVybWluYWwifQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRlcm1pbmFsIn0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InBhbmVsLXRhYiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWwgPT09ICJwcm9ibGVtcyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZlQm90dG9tUGFuZWwgPSAicHJvYmxlbXMifQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNpcmNsZUFsZXJ0In0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICAgIFByb2JsZW1zCiAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFuZWwtdGFiLWJhZGdlICR7dGhpcy5nZXRFcnJvckNvdW50KCkgPT09IDAgPyAid2FybmluZyIgOiAiIn0iPiR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGh9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGVyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWFjdGlvbiIgQGNsaWNrPSR7dGhpcy50b2dnbGVUZXJtaW5hbH0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uPSR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gImx1Y2lkZTpjaGV2cm9uVXAiIDogImx1Y2lkZTpjaGV2cm9uRG93biJ9CiAgICAgICAgICAgICAgICAgICAgICAgIGljb25TaXplPSIxNCIKICAgICAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiAke3RoaXMuYWN0aXZlQm90dG9tUGFuZWwgPT09ICJ0ZXJtaW5hbCIgPyAiYmxvY2siIDogIm5vbmUifSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbAogICAgICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAgICAgLnNldHVwQ29tbWFuZD0keyIifQogICAgICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInByb2JsZW1zIiA/ICJibG9jayIgOiAibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclByb2JsZW1zUGFuZWwoKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBCb3R0b20gQmFyIChmdWxsIHdpZHRoKSAtLT4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyCiAgICAgICAgICAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHt0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50fQogICAgICAgICAgQHJ1bi1wcm9jZXNzPSR7dGhpcy5oYW5kbGVSdW5Qcm9jZXNzfQogICAgICAgID48L2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhcj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5rZXlkb3duSGFuZGxlcik7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd25IYW5kbGVyKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZVVwKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgICB0aGlzLmF1dG9TYXZlSW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCk7CiAgICAgICAgICB0aGlzLnN0b3BBbGxGaWxlV2F0Y2hlcnMoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHRoaXMuZmlsZVRyZWVXaWR0aDsKICAgICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsSGVpZ2h0ID0gdGhpcy50ZXJtaW5hbEhlaWdodDsKICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVdvcmtzcGFjZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJleGVjdXRpb25FbnZpcm9ubWVudCIpICYmIHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuYWN0aW9uYmFyRWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmFjdGlvbmJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItcGFuZWwgZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgaW5pdGlhbGl6ZVdvcmtzcGFjZSgpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWR5KSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlT25Jbml0Q29tbWFuZCgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsIGVycm9yKTsKICAgICAgICAgICAgdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogRXhlY3V0ZSBvbkluaXQgY29tbWFuZCBmcm9tIG5wbWV4dHJhLmpzb24gaWYgcHJlc2VudAogICAgICAgICAqIFRoaXMgYWxsb3dzIGF1dG9tYXRpYyBzZXR1cCBsaWtlIGBwbnBtIGluc3RhbGxgIG9uIHdvcmtzcGFjZSBpbml0aWFsaXphdGlvbgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGV4ZWN1dGVPbkluaXRDb21tYW5kKCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9ucG1leHRyYS5qc29uIikpIHsKICAgICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9ucG1leHRyYS5qc29uIik7CiAgICAgICAgICAgICAgY29uc3QgY29uZmlnMyA9IEpTT04ucGFyc2UoY29udGVudDMpOwogICAgICAgICAgICAgIGNvbnN0IG9uSW5pdCA9IGNvbmZpZzM/LmRlZXNFZGl0b3JXb3Jrc3BhY2U/Lm9uSW5pdDsKICAgICAgICAgICAgICBpZiAob25Jbml0ICYmIHR5cGVvZiBvbkluaXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiRXhlY3V0aW5nIG9uSW5pdCBjb21tYW5kOiIsIG9uSW5pdCk7CiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb21tYW5kID0gb25Jbml0OwogICAgICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gW107CiAgICAgICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hcmdzXSA9IG9uSW5pdC5zcGxpdCgiICIpOwogICAgICAgICAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnNwYXduKGNtZCwgYXJncyk7CiAgICAgICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgICAgIHdyaXRlOiAoZGF0YTExKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZXMgPSBkYXRhMTEuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCBsaW5lXTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgcHJvY2VzczQuZXhpdDsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6IiwgZXhpdENvZGUpOwogICAgICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gWy4uLnRoaXMuaW5pdE91dHB1dCwgIiIsIGBDb21tYW5kIGNvbXBsZXRlZCB3aXRoIGV4aXQgY29kZTogJHtleGl0Q29kZX1gXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGV4ZWN1dGUgb25Jbml0IGNvbW1hbmQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3luYyBpbml0aWFsaXplSW50ZWxsaVNlbnNlKCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VJbml0aWFsaXplZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgbGV0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpIHsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICAgICAgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIk1vbmFjbyBub3QgeWV0IGxvYWRlZCwgSW50ZWxsaVNlbnNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgbGF0ZXIiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIgPSBuZXcgVHlwZVNjcmlwdEludGVsbGlTZW5zZU1hbmFnZXIoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KG1vbmFjb0luc3RhbmNlLCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KTsKICAgICAgICAgIHRoaXMuc2V0dXBNYXJrZXJMaXN0ZW5lcigpOwogICAgICAgICAgdGhpcy5zdGFydE5vZGVNb2R1bGVzV2F0Y2hlcigpOwogICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFdhdGNoIG5vZGVfbW9kdWxlcyBmb3IgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKQogICAgICAgICAqIGFuZCBhdXRvbWF0aWNhbGx5IGxvYWQgdHlwZXMgZm9yIG5ldyBwYWNrYWdlcwogICAgICAgICAqLwogICAgICAgIHN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLm5vZGVNb2R1bGVzV2F0Y2hlciA9IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud2F0Y2goIi9ub2RlX21vZHVsZXMiLCAoX2V2ZW50LCBfZmlsZW5hbWUpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCkgewogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5zY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgIH0sIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpIHsKICAgICAgICAgIGlmICh0aGlzLm5vZGVNb2R1bGVzV2F0Y2hlcikgewogICAgICAgICAgICB0aGlzLm5vZGVNb2R1bGVzV2F0Y2hlci5zdG9wKCk7CiAgICAgICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgICAgdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gT3BlbiBGaWxlIFdhdGNoaW5nIGZvciBFeHRlcm5hbCBDaGFuZ2VzID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBTdGFydCB3YXRjaGluZyBhbiBvcGVuIGZpbGUgZm9yIGV4dGVybmFsIGNoYW5nZXMKICAgICAgICAgKi8KICAgICAgICBzdGFydFdhdGNoaW5nRmlsZShwYXRoMikgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMub3BlbkZpbGVXYXRjaGVycy5oYXMocGF0aDIpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChwYXRoMiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdUaW1lb3V0ID0gdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KHBhdGgyKTsKICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUaW1lb3V0KSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lb3V0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgdGltZW91dDIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKTsKICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLmRlbGV0ZShwYXRoMik7CiAgICAgICAgICAgICAgfSwgMzAwKTsKICAgICAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5zZXQocGF0aDIsIHRpbWVvdXQyKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5zZXQocGF0aDIsIHdhdGNoZXIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb3VsZCBub3Qgd2F0Y2ggZmlsZSAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFN0b3Agd2F0Y2hpbmcgYSBmaWxlIHdoZW4gaXQncyBjbG9zZWQKICAgICAgICAgKi8KICAgICAgICBzdG9wV2F0Y2hpbmdGaWxlKHBhdGgyKSB7CiAgICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5vcGVuRmlsZVdhdGNoZXJzLmdldChwYXRoMik7CiAgICAgICAgICBpZiAod2F0Y2hlcikgewogICAgICAgICAgICB3YXRjaGVyLnN0b3AoKTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVdhdGNoZXJzLmRlbGV0ZShwYXRoMik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0aW1lb3V0MiA9IHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLmdldChwYXRoMik7CiAgICAgICAgICBpZiAodGltZW91dDIpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKHBhdGgyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU3RvcCBhbGwgZmlsZSB3YXRjaGVycwogICAgICAgICAqLwogICAgICAgIHN0b3BBbGxGaWxlV2F0Y2hlcnMoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHdhdGNoZXIgb2YgdGhpcy5vcGVuRmlsZVdhdGNoZXJzLnZhbHVlcygpKSB7CiAgICAgICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vcGVuRmlsZVdhdGNoZXJzLmNsZWFyKCk7CiAgICAgICAgICBmb3IgKGNvbnN0IHRpbWVvdXQyIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0Mik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5jbGVhcigpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBIYW5kbGUgZXh0ZXJuYWwgZmlsZSBjaGFuZ2UgLSBzaG93IGFjdGlvbmJhciBpZiBmaWxlIGhhcyBsb2NhbCBjaGFuZ2VzLAogICAgICAgICAqIG90aGVyd2lzZSBzaWxlbnRseSB1cGRhdGUgd2l0aCBjdXJzb3IgcHJlc2VydmF0aW9uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKSB7CiAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyKTsKICAgICAgICAgIGlmICghZmlsZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUocGF0aDIpOwogICAgICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gZmlsZS5jb250ZW50KQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGZpbGUubW9kaWZpZWQpIHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coewogICAgICAgICAgICAgICAgbWVzc2FnZTogYCIke2ZpbGUubmFtZX0iIGNoYW5nZWQgb24gZGlzay4gV2hhdCBkbyB5b3Ugd2FudCB0byBkbz9gLAogICAgICAgICAgICAgICAgdHlwZTogInF1ZXN0aW9uIiwKICAgICAgICAgICAgICAgIGljb246ICJsdWNpZGU6Z2l0TWVyZ2UiLAogICAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgICB7IGlkOiAibG9hZC1kaXNrIiwgbGFiZWw6ICJMb2FkIGZyb20gRGlzayIsIHByaW1hcnk6IHRydWUgfSwKICAgICAgICAgICAgICAgICAgeyBpZDogInNhdmUtbG9jYWwiLCBsYWJlbDogIlNhdmUgTG9jYWwgdG8gRGlzayIgfSwKICAgICAgICAgICAgICAgICAgeyBpZDogImNvbXBhcmUiLCBsYWJlbDogIkNvbXBhcmUiIH0KICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxNWUzLCBkZWZhdWx0QWN0aW9uSWQ6ICJsb2FkLWRpc2siIH0sCiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAibG9hZC1kaXNrIikgewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVGaWxlQ29udGVudChwYXRoMiwgbmV3Q29udGVudCwgZmFsc2UpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Py5hY3Rpb25JZCA9PT0gInNhdmUtbG9jYWwiKSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIgPyB7IC4uLmY3LCBtb2RpZmllZDogZmFsc2UgfSA6IGY3KTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uYWN0aW9uSWQgPT09ICJjb21wYXJlIikgewogICAgICAgICAgICAgICAgdGhpcy5vcGVuRGlmZlZpZXcocGF0aDIsIGZpbGUuY29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIG5ld0NvbnRlbnQsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBoYW5kbGUgZXh0ZXJuYWwgY2hhbmdlIGZvciAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZSBmaWxlIGNvbnRlbnQgaW4gc3RhdGUgYW5kIG9wdGlvbmFsbHkgaW4gdGhlIGVkaXRvcgogICAgICAgICAqLwogICAgICAgIGFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcikgewogICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMiA/IHsgLi4uZjcsIGNvbnRlbnQ6IG5ld0NvbnRlbnQsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgaWYgKHBhdGgyID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKSB7CiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgICAgICBhd2FpdCBlZGl0b3Iuc2V0Q29udGVudEV4dGVybmFsKG5ld0NvbnRlbnQsIHByZXNlcnZlQ3Vyc29yKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBPcGVuIHRoZSBkaWZmIHZpZXcgdG8gY29tcGFyZSBsb2NhbCBhbmQgZGlzayB2ZXJzaW9ucwogICAgICAgICAqLwogICAgICAgIG9wZW5EaWZmVmlldyhwYXRoMiwgbG9jYWxDb250ZW50LCBkaXNrQ29udGVudCkgewogICAgICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IHsKICAgICAgICAgICAgZmlsZVBhdGg6IHBhdGgyLAogICAgICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGRpc2tDb250ZW50LAogICAgICAgICAgICBtb2RpZmllZENvbnRlbnQ6IGxvY2FsQ29udGVudCwKICAgICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnNob3dEaWZmVmlldyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEhhbmRsZSBkaWZmIHZpZXcgcmVzb2x1dGlvbgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGhhbmRsZURpZmZSZXNvbHZlZChlMTEpIHsKICAgICAgICAgIGNvbnN0IHsgYWN0aW9uLCBjb250ZW50OiBjb250ZW50MyB9ID0gZTExLmRldGFpbDsKICAgICAgICAgIGNvbnN0IHBhdGgyID0gdGhpcy5kaWZmVmlld0NvbmZpZz8uZmlsZVBhdGg7CiAgICAgICAgICBpZiAoIXBhdGgyIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRoaXMuc2hvd0RpZmZWaWV3ID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuZGlmZlZpZXdDb25maWcgPSBudWxsOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYWN0aW9uID09PSAidXNlLWxvY2FsIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgY29udGVudDMpOwogICAgICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLm1hcCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyID8geyAuLi5mNywgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgICBpZiAocGF0aDIgPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpIHsKICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgICAgICAgIGF3YWl0IGVkaXRvci5zZXRDb250ZW50RXh0ZXJuYWwoY29udGVudDMsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAidXNlLWRpc2siKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnNob3dEaWZmVmlldyA9IGZhbHNlOwogICAgICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGhhbmRsZUZpbGVTZWxlY3QoZTExKSB7CiAgICAgICAgICBjb25zdCB7IHBhdGg6IHBhdGgyLCBuYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgICAgICAgYXdhaXQgdGhpcy5vcGVuRmlsZShwYXRoMiwgbmFtZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIG9wZW5GaWxlKHBhdGgyLCBuYW1lKSB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ0ZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICAgICAgaWYgKGV4aXN0aW5nRmlsZSkgewogICAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSBbCiAgICAgICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMsCiAgICAgICAgICAgICAgeyBwYXRoOiBwYXRoMiwgbmFtZSwgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9CiAgICAgICAgICAgIF07CiAgICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgICAgICAgICAgdGhpcy5zdGFydFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgICAgIGlmICghdGhpcy5pbnRlbGxpU2Vuc2VJbml0aWFsaXplZCkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVJbnRlbGxpU2Vuc2UoKTsKICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMik7CiAgICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciAmJiAobGFuZ3VhZ2UgPT09ICJ0eXBlc2NyaXB0IiB8fCBsYW5ndWFnZSA9PT0gImphdmFzY3JpcHQiKSkgewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnByb2Nlc3NDb250ZW50Q2hhbmdlKGNvbnRlbnQzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBvcGVuIGZpbGUgJHtwYXRoMn06YCwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhY3RpdmF0ZUZpbGUocGF0aDIpIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgICAgICB9CiAgICAgICAgY2xvc2VGaWxlKGUxMSwgcGF0aDIpIHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGZpbGVJbmRleCA9IHRoaXMub3BlbkZpbGVzLmZpbmRJbmRleCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyKTsKICAgICAgICAgIGlmIChmaWxlSW5kZXggPT09IC0xKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgICAgIGlmIChmaWxlLm1vZGlmaWVkKSB7CiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oYCR7ZmlsZS5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCk7CiAgICAgICAgICAgIGlmICghY29uZmlybWVkKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc3RvcFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLmZpbHRlcigoZjcpID0+IGY3LnBhdGggIT09IHBhdGgyKTsKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZpbGVQYXRoID09PSBwYXRoMikgewogICAgICAgICAgICBpZiAodGhpcy5vcGVuRmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gTWF0aC5taW4oZmlsZUluZGV4LCB0aGlzLm9wZW5GaWxlcy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gdGhpcy5vcGVuRmlsZXNbbmV3SW5kZXhdLnBhdGg7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9ICIiOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGdldEFjdGl2ZUZpbGVDb250ZW50KCkgewogICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMub3BlbkZpbGVzLmZpbmQoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICAgIHJldHVybiBmaWxlPy5jb250ZW50IHx8ICIiOwogICAgICAgIH0KICAgICAgICBoYW5kbGVDb250ZW50Q2hhbmdlKGUxMSkgewogICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGUxMS5kZXRhaWw7CiAgICAgICAgICBjb25zdCBmaWxlSW5kZXggPSB0aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICAgIGlmIChmaWxlSW5kZXggPT09IC0xKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgICAgIGlmIChmaWxlLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSBbCiAgICAgICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCwgZmlsZUluZGV4KSwKICAgICAgICAgICAgICB7IC4uLmZpbGUsIGNvbnRlbnQ6IG5ld0NvbnRlbnQsIG1vZGlmaWVkOiB0cnVlIH0sCiAgICAgICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoZmlsZUluZGV4ICsgMSkKICAgICAgICAgICAgXTsKICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgodGhpcy5hY3RpdmVGaWxlUGF0aCk7CiAgICAgICAgICAgIGlmICh0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIgJiYgKGxhbmd1YWdlID09PSAidHlwZXNjcmlwdCIgfHwgbGFuZ3VhZ2UgPT09ICJqYXZhc2NyaXB0IikpIHsKICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVsbGlTZW5zZURlYm91bmNlVGltZW91dCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXI/LnByb2Nlc3NDb250ZW50Q2hhbmdlKG5ld0NvbnRlbnQpOwogICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICAgICAgY29uc3QgZXh0ID0gcGF0aDIuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGNvbnN0IGxhbmd1YWdlTWFwID0gewogICAgICAgICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICAgICAgICB0c3g6ICJ0eXBlc2NyaXB0IiwKICAgICAgICAgICAganM6ICJqYXZhc2NyaXB0IiwKICAgICAgICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgICAgICAgIGpzb246ICJqc29uIiwKICAgICAgICAgICAgaHRtbDogImh0bWwiLAogICAgICAgICAgICBjc3M6ICJjc3MiLAogICAgICAgICAgICBzY3NzOiAic2NzcyIsCiAgICAgICAgICAgIGxlc3M6ICJsZXNzIiwKICAgICAgICAgICAgbWQ6ICJtYXJrZG93biIsCiAgICAgICAgICAgIHlhbWw6ICJ5YW1sIiwKICAgICAgICAgICAgeW1sOiAieWFtbCIsCiAgICAgICAgICAgIHhtbDogInhtbCIsCiAgICAgICAgICAgIHNxbDogInNxbCIsCiAgICAgICAgICAgIHB5OiAicHl0aG9uIiwKICAgICAgICAgICAgc2g6ICJzaGVsbCIsCiAgICAgICAgICAgIGJhc2g6ICJzaGVsbCIKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VNYXBbZXh0IHx8ICIiXSB8fCAicGxhaW50ZXh0IjsKICAgICAgICB9CiAgICAgICAgdG9nZ2xlVGVybWluYWwoKSB7CiAgICAgICAgICB0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPSAhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFNhdmUgT3BlcmF0aW9ucyA9PT09PT09PT09CiAgICAgICAgYXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKSB7CiAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpOwogICAgICAgICAgaWYgKCFmaWxlIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShmaWxlLnBhdGgsIGZpbGUuY29udGVudCk7CiAgICAgICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZS5wYXRoID8geyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgICAgIGlmICh0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIpIHsKICAgICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHNhdmUgZmlsZToiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIHNhdmVBbGxGaWxlcygpIHsKICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3BlbkZpbGVzLmZpbHRlcigoZjcpID0+IGY3Lm1vZGlmaWVkKSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiAoeyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0pKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBFZGl0b3IgTWVudSA9PT09PT09PT09CiAgICAgICAgYXN5bmMgc2hvd0VkaXRvck1lbnUoZTExKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiB0aGlzLmF1dG9TYXZlID8gIlx1MjcxMyBBdXRvIFNhdmUiIDogIkF1dG8gU2F2ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2F2ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnRvZ2dsZUF1dG9TYXZlKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiU2F2ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2F2ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBY3RpdmVGaWxlKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJTYXZlIEFsbCIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2F2ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBbGxGaWxlcygpCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgICBhd2FpdCBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZTExLCBtZW51SXRlbXMpOwogICAgICAgIH0KICAgICAgICB0b2dnbGVBdXRvU2F2ZSgpIHsKICAgICAgICAgIHRoaXMuYXV0b1NhdmUgPSAhdGhpcy5hdXRvU2F2ZTsKICAgICAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7CiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgICBjb25zdCBoYXNVbnNhdmVkID0gdGhpcy5vcGVuRmlsZXMuc29tZSgoZjcpID0+IGY3Lm1vZGlmaWVkKTsKICAgICAgICAgICAgICBpZiAoaGFzVW5zYXZlZCkgewogICAgICAgICAgICAgICAgdGhpcy5zYXZlQWxsRmlsZXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZUludGVydmFsKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2V0RXJyb3JDb3VudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmZpbHRlcigobTYpID0+IG02LnNldmVyaXR5ID09PSA4KS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJlbmRlclByb2JsZW1zUGFuZWwoKSB7CiAgICAgICAgICBpZiAodGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW1zLWVtcHR5Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrQ2lyY2xlIn0gaWNvblNpemU9IjI0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPk5vIHByb2JsZW1zIGRldGVjdGVkPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKChtYXJrZXIpID0+IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1pdGVtIiBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKG1hcmtlcil9PgogICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgY2xhc3M9InByb2JsZW0taWNvbiAke21hcmtlci5zZXZlcml0eSA9PT0gOCA/ICJlcnJvciIgOiAid2FybmluZyJ9IgogICAgICAgICAgICAgIC5pY29uPSR7bWFya2VyLnNldmVyaXR5ID09PSA4ID8gImx1Y2lkZTpjaXJjbGVYIiA6ICJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke21hcmtlci5tZXNzYWdlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tbG9jYXRpb24iPgogICAgICAgICAgICAgICAgJHttYXJrZXIucmVzb3VyY2UucGF0aC5zcGxpdCgiLyIpLnBvcCgpfSAoJHttYXJrZXIuc3RhcnRMaW5lTnVtYmVyfSwgJHttYXJrZXIuc3RhcnRDb2x1bW59KQogICAgICAgICAgICAgICAgJHttYXJrZXIuc291cmNlID8gYFske21hcmtlci5zb3VyY2V9XWAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBuYXZpZ2F0ZVRvUHJvYmxlbShtYXJrZXIpIHsKICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gbWFya2VyLnJlc291cmNlLnBhdGg7CiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGVQYXRoLnNwbGl0KCIvIikucG9wKCkgfHwgIiI7CiAgICAgICAgICBjb25zdCBleGlzdGluZ0ZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZVBhdGgpOwogICAgICAgICAgaWYgKCFleGlzdGluZ0ZpbGUpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVuRmlsZShmaWxlUGF0aCwgZmlsZU5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9IGZpbGVQYXRoOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgaWYgKGVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICBlZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG1hcmtlci5zdGFydExpbmVOdW1iZXIpOwogICAgICAgICAgICBlZGl0b3Iuc2V0UG9zaXRpb24oewogICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hcmtlci5zdGFydExpbmVOdW1iZXIsCiAgICAgICAgICAgICAgY29sdW1uOiBtYXJrZXIuc3RhcnRDb2x1bW4KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZXR1cE1hcmtlckxpc3RlbmVyKCkgewogICAgICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycygodXJpcykgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBhbGxNYXJrZXJzID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7fSk7CiAgICAgICAgICB0aGlzLmRpYWdub3N0aWNNYXJrZXJzID0gYWxsTWFya2Vycy5tYXAoKG02KSA9PiAoewogICAgICAgICAgICBtZXNzYWdlOiBtNi5tZXNzYWdlLAogICAgICAgICAgICBzZXZlcml0eTogbTYuc2V2ZXJpdHksCiAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogbTYuc3RhcnRMaW5lTnVtYmVyLAogICAgICAgICAgICBzdGFydENvbHVtbjogbTYuc3RhcnRDb2x1bW4sCiAgICAgICAgICAgIGVuZExpbmVOdW1iZXI6IG02LmVuZExpbmVOdW1iZXIsCiAgICAgICAgICAgIGVuZENvbHVtbjogbTYuZW5kQ29sdW1uLAogICAgICAgICAgICBzb3VyY2U6IG02LnNvdXJjZSwKICAgICAgICAgICAgcmVzb3VyY2U6IHsgcGF0aDogbTYucmVzb3VyY2UucGF0aCB9CiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gQm90dG9tIEJhciBFdmVudCBIYW5kbGVycyA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogSGFuZGxlIHJ1bi1wcm9jZXNzIGV2ZW50cyBmcm9tIGJvdHRvbSBiYXIgd2lkZ2V0cwogICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdGVybWluYWwgdGFiIGZvciB0aGUgcHJvY2VzcwogICAgICAgICAqLwogICAgICAgIGFzeW5jIGhhbmRsZVJ1blByb2Nlc3MoZTExKSB7CiAgICAgICAgICBjb25zdCBkZXRhaWwgPSBlMTEuZGV0YWlsOwogICAgICAgICAgY29uc3QgdGVybWluYWwgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLXRlcm1pbmFsIik7CiAgICAgICAgICBpZiAoIXRlcm1pbmFsKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiVGVybWluYWwgY29tcG9uZW50IG5vdCBmb3VuZCIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkKSB7CiAgICAgICAgICAgIHRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCI7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgdGVybWluYWwuY3JlYXRlUHJvY2Vzc1RhYih7CiAgICAgICAgICAgIHR5cGU6IGRldGFpbC50eXBlLAogICAgICAgICAgICBsYWJlbDogZGV0YWlsLmxhYmVsLAogICAgICAgICAgICBjb21tYW5kOiBkZXRhaWwuY29tbWFuZCwKICAgICAgICAgICAgYXJnczogZGV0YWlsLmFyZ3MsCiAgICAgICAgICAgIG1ldGFkYXRhOiBkZXRhaWwubWV0YWRhdGEsCiAgICAgICAgICAgIHN3aXRjaFRvVGFiOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBQdWJsaWMgTGF5b3V0IE1ldGhvZHMgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIFByb2dyYW1tYXRpY2FsbHkgc2V0IHRoZSBmaWxlIHRyZWUgd2lkdGgKICAgICAgICAgKi8KICAgICAgICBzZXRGaWxlVHJlZVdpZHRoKHdpZHRoKSB7CiAgICAgICAgICBjb25zdCBtaW5XaWR0aCA9IDE1MDsKICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqIDAuNTsKICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4obWF4V2lkdGgsIHdpZHRoKSk7CiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIHRlcm1pbmFsIGhlaWdodAogICAgICAgICAqLwogICAgICAgIHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgewogICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gMTAwOwogICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAwLjc7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZXNldCBsYXlvdXQgdG8gaW5pdGlhbCBwcm9wZXJ0eSB2YWx1ZXMKICAgICAgICAgKi8KICAgICAgICByZXNldExheW91dCgpIHsKICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSB0aGlzLmZpbGVUcmVlV2lkdGg7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHRoaXMudGVybWluYWxIZWlnaHQ7CiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UvaW5kZXguanMKdmFyIGluaXRfZGVlc193b3Jrc3BhY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc193b3Jrc3BhY2UoKTsKICAgIGluaXRfdHlwZXNjcmlwdF9pbnRlbGxpc2Vuc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vaW5kZXguanMKdmFyIGluaXRfZGVlc193b3Jrc3BhY2VfbW9uYWNvMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9tb25hY28oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1maWxldHJlZS9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV9maWxldHJlZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9maWxldHJlZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2ludGVyZmFjZXMuanMKdmFyIGluaXRfaW50ZXJmYWNlczYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW50ZXJmYWNlcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW5kZXguanMKdmFyIGluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKTsKICAgIGluaXRfaW50ZXJmYWNlczYoKTsKICAgIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2luZGV4LmpzCnZhciBpbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsX3ByZXZpZXcyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9wcmV2aWV3KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24vZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24uanMKdmFyIF9fZXNEZWNvcmF0ZTk3LCBfX3J1bkluaXRpYWxpemVyczk4LCBkZWZlcnJlZCwgRGVlc1dvcmtzcGFjZU1hcmtkb3duOwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV9tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bi9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9tb25hY28oKTsKICAgIF9fZXNEZWNvcmF0ZTk3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIGRlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93biA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93biIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfc3BsaXRSYXRpb19kZWNvcmF0b3JzOwogICAgICBsZXQgX3NwbGl0UmF0aW9faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX21pblBhbmVsU2l6ZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jdXJyZW50U3BsaXRSYXRpb19kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzRHJhZ2dpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3duMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX3NwbGl0UmF0aW9fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfbWluUGFuZWxTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICAgICAgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlOTcodGhpcywgbnVsbCwgX3NwbGl0UmF0aW9fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3BsaXRSYXRpbyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3BsaXRSYXRpbyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zcGxpdFJhdGlvLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3BsaXRSYXRpb19pbml0aWFsaXplcnMsIF9zcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk3KHRoaXMsIG51bGwsIF9taW5QYW5lbFNpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluUGFuZWxTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5QYW5lbFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluUGFuZWxTaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoubWluUGFuZWxTaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5QYW5lbFNpemVfaW5pdGlhbGl6ZXJzLCBfbWluUGFuZWxTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk3KHRoaXMsIG51bGwsIF9jdXJyZW50U3BsaXRSYXRpb19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50U3BsaXRSYXRpbyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFNwbGl0UmF0aW8iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFNwbGl0UmF0aW8sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jdXJyZW50U3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFNwbGl0UmF0aW9faW5pdGlhbGl6ZXJzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlOTcodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNEcmFnZ2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNEcmFnZ2luZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bj5gOwogICAgICAgIHN0YXRpYyBkZW1vR3JvdXBzID0gWyJXb3Jrc3BhY2UiXTsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zcGxpdENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIC5lZGl0b3JDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzAzNjNkIil9OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyLAogICAgICAucmVzaXplSGFuZGxlLmRyYWdnaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNThhNmZmIil9OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIC5yZXNpemVIYW5kbGU6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplSGFuZGxlLmRyYWdnaW5nOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBkMTExNyIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNDI5MmYiLCAiI2U2ZWRmMyIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnTm90byBTYW5zJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAuc3BsaXRDb250YWluZXIuZHJhZ2dpbmcgewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvckNvbnRhaW5lciwKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5vdXRsZXRDb250YWluZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICAjc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM5OCh0aGlzLCBfc3BsaXRSYXRpb19pbml0aWFsaXplcnMsIDUwKTsKICAgICAgICAvKioKICAgICAgICAgKiBJbml0aWFsIHNwbGl0IHJhdGlvIGZvciB0aGUgZWRpdG9yIChsZWZ0KSBwYW5lbC4KICAgICAgICAgKiBWYWx1ZSBmcm9tIDAgdG8gMTAwIHJlcHJlc2VudGluZyBwZXJjZW50YWdlIHdpZHRoLgogICAgICAgICAqIERlZmF1bHQgaXMgNTAgKDUwLzUwIHNwbGl0KS4KICAgICAgICAgKi8KICAgICAgICBnZXQgc3BsaXRSYXRpbygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzcGxpdFJhdGlvKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjbWluUGFuZWxTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5OCh0aGlzLCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOTgodGhpcywgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMsIDEwKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogTWluaW11bSB3aWR0aCBwZXJjZW50YWdlIGZvciBlaXRoZXIgcGFuZWwuCiAgICAgICAgICovCiAgICAgICAgZ2V0IG1pblBhbmVsU2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IG1pblBhbmVsU2l6ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI21pblBhbmVsU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczk4KHRoaXMsIF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk4KHRoaXMsIF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMsIDUwKSk7CiAgICAgICAgZ2V0IGN1cnJlbnRTcGxpdFJhdGlvKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50U3BsaXRSYXRpbyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5OCh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczk4KHRoaXMsIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNEcmFnZ2luZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpc0RyYWdnaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICByZXNpemVIYW5kbGVFbGVtZW50ID0gX19ydW5Jbml0aWFsaXplcnM5OCh0aGlzLCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgY29udGFpbmVyRWxlbWVudDsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InNwbGl0Q29udGFpbmVyICR7dGhpcy5pc0RyYWdnaW5nID8gImRyYWdnaW5nIiA6ICIifSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yQ29udGFpbmVyIiBzdHlsZT0id2lkdGg6ICR7dGhpcy5jdXJyZW50U3BsaXRSYXRpb30lIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmxhbmd1YWdlPSR7Im1hcmtkb3duIn0KICAgICAgICAgICAgLmNvbnRlbnQ9JHtgIyBhIHRlc3QgY29udGVudAoKVGhpcyBpcyB0ZXN0IGNvbnRlbnQgdGhhdCBpcyBvZiBsb25nZXIgZm9ybSBhbiBob3BlZnVsbHkgc3RhcnRzIHRvIHdyYXAgd2hlbiBJIG5lZWQgaXQuIEFuZCB5ZXMsIGl0IGRvZXMgcGVyZmVjdGx5LiBuaWNlLgoKVGVzdCB8IEhlbGxvCi0tLSB8IC0tLQpZZWFoIHwgU28gZ29vZAoKVGhpcyBpcyByZWFsIGFzc2V0IEkgdGhpbmsuIFdoeSB3b3VsZCB3ZSB3YW50IHRvIGxlYXZlIHRoYXQgb24gdGhlIHRhYmxlPyBDYW4geW91IHRlbGwgbXkgdGhhdD8KCldoeSBhcmUgd2UgaGVyZT8KCkRvIHlvdSBrbm93PwoKPiBub3RlOgpUaGVyZSBpcyBzb21ldGhpbmcgZ29pbmcgb24uCgpcYFxgXGB0eXBlc2NyaXB0CmNvbnN0IGhlbGxvID0gJ3llcycKXGBcYFxgCmB9CiAgICAgICAgICAgIHdvcmRXcmFwPSJib3VuZGVkIgogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJyZXNpemVIYW5kbGUgJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlTW91c2VEb3dufQogICAgICAgID48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJvdXRsZXRDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHsxMDAgLSB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZykgewogICAgICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZyk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gdGhpcy5zcGxpdFJhdGlvOwogICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpOwogICAgICAgICAgdGhpcy5yZXNpemVIYW5kbGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5yZXNpemVIYW5kbGUiKTsKICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgIGNvbnN0IG1hcmtkb3duT3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgICAgICBjb25zdCBzbWFydG1hcmtkb3duSW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzMjgucGx1Z2lucy5zbWFydG1hcmtkb3duLlNtYXJ0TWFya2Rvd24oKTsKICAgICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gYXdhaXQgc21hcnRtYXJrZG93bkluc3RhbmNlLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKCJsb2FkaW5nLi4uIik7CiAgICAgICAgICBlZGl0b3IuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChjb250ZW50QXJnKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG1kUGFyc2VkUmVzdWx0LnVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhjb250ZW50QXJnKTsKICAgICAgICAgICAgY29uc3QgaHRtbDcgPSBtZFBhcnNlZFJlc3VsdC5odG1sOwogICAgICAgICAgICBtYXJrZG93bk91dGxldC51cGRhdGVIdG1sVGV4dChodG1sNyk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlTW91c2VVcCk7CiAgICAgICAgfTsKICAgICAgICBoYW5kbGVNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZyB8fCAhdGhpcy5jb250YWluZXJFbGVtZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJSZWN0LndpZHRoOwogICAgICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgICAgICBsZXQgbmV3UmF0aW8gPSBtb3VzZVggLyBjb250YWluZXJXaWR0aCAqIDEwMDsKICAgICAgICAgIG5ld1JhdGlvID0gTWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsIE1hdGgubWluKDEwMCAtIHRoaXMubWluUGFuZWxTaXplLCBuZXdSYXRpbykpOwogICAgICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IG5ld1JhdGlvOwogICAgICAgIH07CiAgICAgICAgaGFuZGxlTW91c2VVcCA9ICgpID0+IHsKICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlTW91c2VVcCk7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVNb3VzZU1vdmUpOwogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlTW91c2VVcCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFByb2dyYW1tYXRpY2FsbHkgc2V0IHRoZSBzcGxpdCByYXRpbwogICAgICAgICAqLwogICAgICAgIHNldFNwbGl0UmF0aW8ocmF0aW8pIHsKICAgICAgICAgIHRoaXMuY3VycmVudFNwbGl0UmF0aW8gPSBNYXRoLm1heCh0aGlzLm1pblBhbmVsU2l6ZSwgTWF0aC5taW4oMTAwIC0gdGhpcy5taW5QYW5lbFNpemUsIHJhdGlvKSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJlc2V0IHRvIGluaXRpYWwgc3BsaXQgcmF0aW8KICAgICAgICAgKi8KICAgICAgICByZXNldFNwbGl0UmF0aW8oKSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gdGhpcy5zcGxpdFJhdGlvOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgX19ydW5Jbml0aWFsaXplcnM5OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc1dvcmtzcGFjZU1hcmtkb3duMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X2RlZXNfd29ya3NwYWNlX21hcmtkb3duMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQuZGVtby5qcwp2YXIgZGVtb0Z1bmM1NjsKdmFyIGluaXRfZGVlc193b3Jrc3BhY2VfbWFya2Rvd25vdXRsZXRfZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfZGVtb3Rvb2xzKCk7CiAgICBpbml0X2RlZXNfcGFuZWwoKTsKICAgIGRlbW9GdW5jNTYgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDwhLS0gRGVtbyAxOiBIZWFkaW5ncyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiSGVhZGluZ3MifQogICAgICAgIC5zdWJ0aXRsZT0keyJBbGwgaGVhZGluZyBsZXZlbHMgZnJvbSBIMSB0byBINiJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICAgICAgY29uc3Qgb3V0bGV0ID0gcGFuZWxFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpOwogICAgICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkhlYWRpbmcgTGV2ZWwgMTwvaDE+CiAgICAgICAgICAgIDxoMj5IZWFkaW5nIExldmVsIDI8L2gyPgogICAgICAgICAgICA8aDM+SGVhZGluZyBMZXZlbCAzPC9oMz4KICAgICAgICAgICAgPGg0PkhlYWRpbmcgTGV2ZWwgNDwvaDQ+CiAgICAgICAgICAgIDxoNT5IZWFkaW5nIExldmVsIDU8L2g1PgogICAgICAgICAgICA8aDY+SGVhZGluZyBMZXZlbCA2PC9oNj4KICAgICAgICAgIGApOwogICAgfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMjogVGV4dCBGb3JtYXR0aW5nIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJUZXh0IEZvcm1hdHRpbmcifQogICAgICAgIC5zdWJ0aXRsZT0keyJCb2xkLCBpdGFsaWMsIGxpbmtzLCBjb2RlLCBhbmQga2V5Ym9hcmQgaW5wdXQifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgICAgIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICAgICAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCA8c3Ryb25nPmJvbGQgdGV4dDwvc3Ryb25nPiBhbmQgPGVtPml0YWxpYyB0ZXh0PC9lbT4uPC9wPgogICAgICAgICAgICA8cD5Zb3UgY2FuIGFsc28gdXNlIDxzdHJvbmc+PGVtPmJvbGQgaXRhbGljPC9lbT48L3N0cm9uZz4gZm9yIGVtcGhhc2lzLjwvcD4KICAgICAgICAgICAgPHA+SGVyZSdzIGEgPGEgaHJlZj0iIyI+bGluayBleGFtcGxlPC9hPiBhbmQgc29tZSA8Y29kZT5pbmxpbmUgY29kZTwvY29kZT4uPC9wPgogICAgICAgICAgICA8cD5QcmVzcyA8a2JkPkN0cmw8L2tiZD4gKyA8a2JkPkM8L2tiZD4gdG8gY29weSB0ZXh0LjwvcD4KICAgICAgICAgICAgPGhyPgogICAgICAgICAgICA8cD5BYm92ZSBpcyBhIGhvcml6b250YWwgcnVsZSBzZXBhcmF0b3IuPC9wPgogICAgICAgICAgYCk7CiAgICB9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyAzOiBMaXN0cyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTGlzdHMifQogICAgICAgIC5zdWJ0aXRsZT0keyJPcmRlcmVkLCB1bm9yZGVyZWQsIGFuZCB0YXNrIGxpc3RzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogICAgICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8aDM+VW5vcmRlcmVkIExpc3Q8L2gzPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkZpcnN0IGl0ZW08L2xpPgogICAgICAgICAgICAgIDxsaT5TZWNvbmQgaXRlbQogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICA8bGk+TmVzdGVkIGl0ZW0gMTwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT5OZXN0ZWQgaXRlbSAyPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGhpcmQgaXRlbTwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8aDM+T3JkZXJlZCBMaXN0PC9oMz4KICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5TdGVwIG9uZTwvbGk+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgdHdvPC9saT4KICAgICAgICAgICAgICA8bGk+U3RlcCB0aHJlZTwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8aDM+VGFzayBMaXN0PC9oMz4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0idGFzay1saXN0LWl0ZW0iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2hlY2tlZCBkaXNhYmxlZD4gQ29tcGxldGVkIHRhc2s8L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0idGFzay1saXN0LWl0ZW0iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ+IFBlbmRpbmcgdGFzazwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD4gQW5vdGhlciB0YXNrPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgIGApOwogICAgfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gNDogQ29kZSBCbG9ja3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkNvZGUgQmxvY2tzIn0KICAgICAgICAuc3VidGl0bGU9JHsiU3ludGF4IGhpZ2hsaWdodGVkIGNvZGUgZXhhbXBsZXMifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgICAgIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICAgICAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxwPklubGluZSBjb2RlOiA8Y29kZT5jb25zdCBncmVldGluZyA9ICJIZWxsbywgV29ybGQhIjs8L2NvZGU+PC9wPgoKICAgICAgICAgICAgPGgzPlR5cGVTY3JpcHQgRXhhbXBsZTwvaDM+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW1wb3J0PC9zcGFuPiB7IGh0bWwsIGNzcyB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+aW50ZXJmYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+SVVzZXI8L3NwYW4+IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5uYW1lPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj47CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+ZW1haWw8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5hZ2U8L3NwYW4+PzogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPm51bWJlcjwvc3Bhbj47Cn0KCjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaGxqcy10aXRsZSI+Z2V0VXNlcjwvc3Bhbj4gPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hc3luYzwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmlkPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtYnVpbHRfaW4iPnN0cmluZzwvc3Bhbj4pOiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+UHJvbWlzZTwvc3Bhbj4mbHQ7SVVzZXImZ3Q7ID0mZ3Q7IHsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5jb25zdDwvc3Bhbj4gcmVzcG9uc2UgPSA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5hd2FpdDwvc3Bhbj4gZmV0Y2goXGAvYXBpL3VzZXJzL1wke2lkfVxgKTsKICA8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5yZXR1cm48L3NwYW4+IHJlc3BvbnNlLmpzb24oKTsKfTs8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8aDM+SlNPTiBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT57CiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+Im5hbWUiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iZGVlcy1jYXRhbG9nIjwvc3Bhbj4sCiAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+InZlcnNpb24iPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iMy4wLjAiPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4iZGVwZW5kZW5jaWVzIjwvc3Bhbj46IHsKICAgIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJAZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQiPC9zcGFuPjogPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4iXjIuMC4wIjwvc3Bhbj4KICB9Cn08L2NvZGU+PC9wcmU+CiAgICAgICAgICBgKTsKICAgIH19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDU6IFRhYmxlcyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGFibGVzIn0KICAgICAgICAuc3VidGl0bGU9JHsiU3R5bGVkIHRhYmxlcyB3aXRoIGFsdGVybmF0aW5nIHJvd3MifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgICAgIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICAgICAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0aD5GZWF0dXJlPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aD5Qcmlvcml0eTwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RGFyayBtb2RlIHN1cHBvcnQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+Q29tcGxldGVkPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPkhpZ2g8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPlJlc3BvbnNpdmUgZGVzaWduPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPkluIFByb2dyZXNzPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPk1lZGl1bTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+QWNjZXNzaWJpbGl0eTwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5QbGFubmVkPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPkhpZ2g8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPkRvY3VtZW50YXRpb248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TG93PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIGApOwogICAgfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gNjogQmxvY2txdW90ZXMgJiBBbGVydHMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkJsb2NrcXVvdGVzICYgQWxlcnRzIn0KICAgICAgICAuc3VidGl0bGU9JHsiUXVvdGVzIGFuZCBHaXRIdWItc3R5bGUgYWxlcnRzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogICAgICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICA8cD5UaGlzIGlzIGEgc3RhbmRhcmQgYmxvY2txdW90ZS4gSXQncyBncmVhdCBmb3IgaGlnaGxpZ2h0aW5nIGltcG9ydGFudCBpbmZvcm1hdGlvbiBvciBxdW90ZXMgZnJvbSBvdGhlciBzb3VyY2VzLjwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtbm90ZSI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIGlzIGFuIGluZm9ybWF0aW9uYWwgbm90ZSB0byBkcmF3IGF0dGVudGlvbiB0byBpbXBvcnRhbnQgZGV0YWlscy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtdGlwIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpcDo8L3N0cm9uZz4gSGVyZSdzIGEgaGVscGZ1bCB0aXAgdG8gaW1wcm92ZSB5b3VyIHdvcmtmbG93LjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1pbXBvcnRhbnQiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHRvcGljLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC13YXJuaW5nIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IEJlIGNhcmVmdWwgd2hlbiBwZXJmb3JtaW5nIHRoaXMgYWN0aW9uLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1jYXV0aW9uIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPkNhdXRpb246PC9zdHJvbmc+IFRoaXMgYWN0aW9uIG1heSBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKTsKICAgIH19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDc6IEZ1bGwgRG9jdW1lbnQgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkZ1bGwgRG9jdW1lbnQifQogICAgICAgIC5zdWJ0aXRsZT0keyJBIGNvbXBsZXRlIG1hcmtkb3duIGRvY3VtZW50IGV4YW1wbGUifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgICAgIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICAgICAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMT5HZXR0aW5nIFN0YXJ0ZWQgR3VpZGU8L2gxPgogICAgICAgICAgICA8cD5XZWxjb21lIHRvIHRoZSA8c3Ryb25nPmRlZXMtY2F0YWxvZzwvc3Ryb25nPiBjb21wb25lbnQgbGlicmFyeS4gVGhpcyBndWlkZSB3aWxsIGhlbHAgeW91IGdldCB1cCBhbmQgcnVubmluZyBxdWlja2x5LjwvcD4KCiAgICAgICAgICAgIDxoMj5JbnN0YWxsYXRpb248L2gyPgogICAgICAgICAgICA8cD5JbnN0YWxsIHRoZSBwYWNrYWdlIHVzaW5nIHlvdXIgcHJlZmVycmVkIHBhY2thZ2UgbWFuYWdlcjo8L3A+CiAgICAgICAgICAgIDxwcmU+PGNvZGU+PHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBwbnBtIChyZWNvbW1lbmRlZCk8L3NwYW4+CnBucG0gYWRkIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+IyBVc2luZyBucG08L3NwYW4+Cm5wbSBpbnN0YWxsIEBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMj5CYXNpYyBVc2FnZTwvaDI+CiAgICAgICAgICAgIDxwPkltcG9ydCBhbmQgdXNlIGNvbXBvbmVudHMgaW4geW91ciBUeXBlU2NyaXB0IGZpbGVzOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgRGVlc0J1dHRvbiB9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmZyb208L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXN0cmluZyI+J0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyc8L3NwYW4+OwoKPHNwYW4gY2xhc3M9ImhsanMtY29tbWVudCI+Ly8gVXNlIGluIHlvdXIgdGVtcGxhdGVzPC9zcGFuPgpodG1sXGAmbHQ7ZGVlcy1idXR0b24mZ3Q7Q2xpY2sgbWUmbHQ7L2RlZXMtYnV0dG9uJmd0O1xgPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYWxlcnQgbWFya2Rvd24tYWxlcnQtdGlwIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPlRpcDo8L3N0cm9uZz4gQ2hlY2sgdGhlIGRlbW8gc2hvd2Nhc2UgZm9yIGxpdmUgZXhhbXBsZXMgb2YgYWxsIGNvbXBvbmVudHMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxoMj5BdmFpbGFibGUgQ29tcG9uZW50czwvaDI+CiAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0aD5Db21wb25lbnQ8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtYnV0dG9uPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5QcmltYXJ5IGJ1dHRvbiBjb21wb25lbnQ8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtaW5wdXQtdGV4dDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+VGV4dCBpbnB1dCBmaWVsZDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy10YWJsZTwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+RGF0YSB0YWJsZSB3aXRoIHNvcnRpbmc8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPmRlZXMtbW9kYWw8L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPk1vZGFsIGRpYWxvZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICA8aDI+TmV4dCBTdGVwczwvaDI+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+RXhwbG9yZSB0aGUgPGEgaHJlZj0iIyI+Y29tcG9uZW50IGRvY3VtZW50YXRpb248L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Q2hlY2sgb3V0IHRoZSA8YSBocmVmPSIjIj50aGVtaW5nIGd1aWRlPC9hPjwvbGk+CiAgICAgICAgICAgICAgPGxpPkpvaW4gb3VyIDxhIGhyZWY9IiMiPmNvbW11bml0eSBEaXNjb3JkPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgICA8cD4iVGhlIGJlc3QgY29tcG9uZW50IGxpYnJhcnkgaXMgb25lIHRoYXQgZ2V0cyBvdXQgb2YgeW91ciB3YXkuIiBcdTIwMTQgRGVzaWduIFN5c3RlbXMgVGVhbTwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgICAgYCk7CiAgICB9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5qcwp2YXIgX19lc0RlY29yYXRlOTgsIF9fcnVuSW5pdGlhbGl6ZXJzOTksIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDsKdmFyIGluaXRfZGVlc193b3Jrc3BhY2VfbWFya2Rvd25vdXRsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfbWFya2Rvd25vdXRsZXRfZGVtbygpOwogICAgX19lc0RlY29yYXRlOTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM5OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0IildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgdmFyIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTk4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gREVNTwogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NjsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwcyA9IFsiV29ya3NwYWNlIl07CiAgICAgICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnTm90byBTYW5zJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNDI5MmYiLCAiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgLm91dGxldCB7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAvKiBIZWFkaW5ncyAqLwogICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2YwZjZmYyIpfTsKICAgICAgfQoKICAgICAgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjNlbTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIGZvbnQtc2l6ZTogMS41ZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxLjI1ZW07CiAgICAgIH0KCiAgICAgIGg0IHsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgfQoKICAgICAgaDUgewogICAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTsKICAgICAgfQoKICAgICAgaDYgewogICAgICAgIGZvbnQtc2l6ZTogMC44NWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY1NmQ3NiIsICIjOGI5NDllIil9OwogICAgICB9CgogICAgICAvKiBQYXJhZ3JhcGhzIGFuZCB0ZXh0ICovCiAgICAgIHAgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLyogTGlua3MgKi8KICAgICAgYSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDk2OWRhIiwgIiM1OGE2ZmYiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CgogICAgICBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLyogU3Ryb25nIGFuZCBlbXBoYXNpcyAqLwogICAgICBzdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNmMGY2ZmMiKX07CiAgICAgIH0KCiAgICAgIGVtIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC8qIExpc3RzICovCiAgICAgIHVsLCBvbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMmVtOwogICAgICB9CgogICAgICBsaSB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICBsaSArIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIHVsIHVsLCB1bCBvbCwgb2wgdWwsIG9sIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIEJsb2NrcXVvdGVzICovCiAgICAgIGJsb2NrcXVvdGUgewogICAgICAgIG1hcmdpbjogMCAwIDE2cHggMDsKICAgICAgICBwYWRkaW5nOiAwIDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NTZkNzYiLCAiIzhiOTQ5ZSIpfTsKICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGJsb2NrcXVvdGUgPiA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIGJsb2NrcXVvdGUgPiA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogSW5saW5lIGNvZGUgKi8KICAgICAgY29kZSB7CiAgICAgICAgcGFkZGluZzogMC4yZW0gMC40ZW07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNzUsIDE4NCwgMTkzLCAwLjIpIiwgInJnYmEoMTEwLCAxMTgsIDEyOSwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlczsKICAgICAgfQoKICAgICAgLyogQ29kZSBibG9ja3MgKi8KICAgICAgcHJlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICBsaW5lLWhlaWdodDogMS40NTsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNmY4ZmEiLCAiIzE2MWIyMiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgd29yZC13cmFwOiBub3JtYWw7CiAgICAgIH0KCiAgICAgIHByZSBjb2RlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgZm9udC1zaXplOiAxMDAlOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgIH0KCiAgICAgIC8qIFRhYmxlcyAqLwogICAgICB0YWJsZSB7CiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgcGFkZGluZzogNnB4IDEzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogNnB4IDEzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2U2ZWRmMyIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwZDExMTciKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMyMTI2MmQiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRyOm50aC1jaGlsZCgybikgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC8qIEhvcml6b250YWwgcnVsZXMgKi8KICAgICAgaHIgewogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAyNHB4IDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICB9CgogICAgICAvKiBJbWFnZXMgKi8KICAgICAgaW1nIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC8qIFRhc2sgbGlzdHMgKi8KICAgICAgLnRhc2stbGlzdC1pdGVtIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50YXNrLWxpc3QtaXRlbSBpbnB1dCB7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtIDAuMjVlbSAtMS40ZW07CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogRGVmaW5pdGlvbiBsaXN0cyAqLwogICAgICBkbCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgZGwgZHQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBmb250LXNpemU6IDFlbTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQoKICAgICAgZGwgZGQgewogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBLZXlib2FyZCBpbnB1dCAqLwogICAgICBrYmQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwYWRkaW5nOiAzcHggNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgJ1NGIE1vbm8nLCBNZW5sbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNlNmVkZjMiKX07CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIC8qIEZvb3Rub3RlcyAqLwogICAgICAuZm9vdG5vdGVzIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjU2ZDc2IiwgIiM4Yjk0OWUiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMzJweDsKICAgICAgfQoKICAgICAgLyogQWxlcnRzL0FkbW9uaXRpb25zICovCiAgICAgIC5tYXJrZG93bi1hbGVydCB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LW5vdGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTY5ZGEiLCAiIzU4YTZmZiIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg5LCAxMDUsIDIxOCwgMC4xKSIsICJyZ2JhKDU2LCAxMzksIDI1MywgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LXdhcm5pbmcgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNiZjg3MDAiLCAiI2QyOTkyMiIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxOTEsIDEzNSwgMCwgMC4xKSIsICJyZ2JhKDE4NywgMTI4LCA5LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtaW1wb3J0YW50IHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjODI1MGRmIiwgIiNhMzcxZjciKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTMwLCA4MCwgMjIzLCAwLjEpIiwgInJnYmEoMTYzLCAxMTMsIDI0NywgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLm1hcmtkb3duLWFsZXJ0LWNhdXRpb24gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNjZjIyMmUiLCAiI2Y4NTE0OSIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMDcsIDM0LCA0NiwgMC4xKSIsICJyZ2JhKDI0OCwgODEsIDczLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtdGlwIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWE3ZjM3IiwgIiMzZmI5NTAiKX07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjYsIDEyNywgNTUsIDAuMSkiLCAicmdiYSg0NiwgMTYwLCA2NywgMC4xKSIpfTsKICAgICAgfQoKICAgICAgLyogU3ludGF4IGhpZ2hsaWdodGluZyBmb3IgY29kZSBibG9ja3MgKi8KICAgICAgLmhsanMtY29tbWVudCwKICAgICAgLmhsanMtcXVvdGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZhNzM3ZCIsICIjOGI5NDllIil9OwogICAgICB9CgogICAgICAuaGxqcy1rZXl3b3JkLAogICAgICAuaGxqcy1zZWxlY3Rvci10YWcsCiAgICAgIC5obGpzLWFkZGl0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNzNhNDkiLCAiI2ZmN2I3MiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtbnVtYmVyLAogICAgICAuaGxqcy1zdHJpbmcsCiAgICAgIC5obGpzLW1ldGEgLmhsanMtbWV0YS1zdHJpbmcsCiAgICAgIC5obGpzLWxpdGVyYWwsCiAgICAgIC5obGpzLWRvY3RhZywKICAgICAgLmhsanMtcmVnZXhwIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMzJmNjIiLCAiI2E1ZDZmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtdGl0bGUsCiAgICAgIC5obGpzLXNlY3Rpb24sCiAgICAgIC5obGpzLW5hbWUsCiAgICAgIC5obGpzLXNlbGVjdG9yLWlkLAogICAgICAuaGxqcy1zZWxlY3Rvci1jbGFzcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmY0MmMxIiwgIiNkMmE4ZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWF0dHJpYnV0ZSwKICAgICAgLmhsanMtYXR0ciwKICAgICAgLmhsanMtdmFyaWFibGUsCiAgICAgIC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLAogICAgICAuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtdHlwZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA1Y2M1IiwgIiM3OWMwZmYiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLXN5bWJvbCwKICAgICAgLmhsanMtYnVsbGV0LAogICAgICAuaGxqcy1zdWJzdCwKICAgICAgLmhsanMtbWV0YSwKICAgICAgLmhsanMtbWV0YSAuaGxqcy1rZXl3b3JkLAogICAgICAuaGxqcy1zZWxlY3Rvci1hdHRyLAogICAgICAuaGxqcy1zZWxlY3Rvci1wc2V1ZG8sCiAgICAgIC5obGpzLWxpbmsgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UzNjIwOSIsICIjZmZhNjU3Iil9OwogICAgICB9CgogICAgICAuaGxqcy1idWlsdF9pbiwKICAgICAgLmhsanMtZGVsZXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2IzMWQyOCIsICIjZmZhMTk4Iil9OwogICAgICB9CgogICAgICAuaGxqcy1mb3JtdWxhIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICB9CgogICAgICAuaGxqcy1lbXBoYXNpcyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuaGxqcy1zdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIG91dGxldDsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im91dGxldCI+CiAgICAgICAgPGgxPk1hcmtkb3duIFByZXZpZXc8L2gxPgogICAgICAgIDxwPkNvbnRlbnQgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIG1hcmtkb3duIGlzIHBhcnNlZC48L3A+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHVwZGF0ZUh0bWxUZXh0KGh0bWxUZXh0QXJnKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgaWYgKCF0aGlzLm91dGxldCkgewogICAgICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLm91dGxldC5pbm5lckhUTUwgPSBodG1sVGV4dEFyZzsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV9tYXJrZG93bm91dGxldDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9tYXJrZG93bm91dGxldCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV9ib3R0b21iYXIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX2JvdHRvbWJhcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yL2luZGV4LmpzCnZhciBpbml0X2RlZXNfd29ya3NwYWNlX2RpZmZfZWRpdG9yMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1kaWZmLWVkaXRvci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX2RpZmZfZWRpdG9yKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfd29ya3NwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc193b3Jrc3BhY2UyKCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX21vbmFjbzIoKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfZmlsZXRyZWUyKCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsMigpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9wcmV2aWV3MigpOwogICAgaW5pdF9kZWVzX3dvcmtzcGFjZV9tYXJrZG93bjIoKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfbWFya2Rvd25vdXRsZXQyKCk7CiAgICBpbml0X2RlZXNfd29ya3NwYWNlX2JvdHRvbWJhcjIoKTsKICAgIGluaXRfZGVlc193b3Jrc3BhY2VfZGlmZl9lZGl0b3IyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1zZWFyY2gvZGVlcy1zZWFyY2guanMKdmFyIGluaXRfZGVlc19zZWFyY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1zZWFyY2gvZGVlcy1zZWFyY2guanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc2VhcmNoL2luZGV4LmpzCnZhciBpbml0X2RlZXNfc2VhcmNoMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfc2VhcmNoKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy10b29sdGlwL2RlZXMtdG9vbHRpcC5qcwp2YXIgaW5pdF9kZWVzX3Rvb2x0aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy10b29sdGlwL2RlZXMtdG9vbHRpcC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9vbHRpcC9pbmRleC5qcwp2YXIgaW5pdF9kZWVzX3Rvb2x0aXAyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9vbHRpcC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZXNfdG9vbHRpcCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2luZGV4LmpzCnZhciBpbml0X2VsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuNDMuM19AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfemluZGV4KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2dyb3VwX2FwcHVpKCk7CiAgICBpbml0X2dyb3VwX2J1dHRvbigpOwogICAgaW5pdF9ncm91cF9jaGFydCgpOwogICAgaW5pdF9ncm91cF9kYXRhdmlldygpOwogICAgaW5pdF9ncm91cF9mZWVkYmFjaygpOwogICAgaW5pdF9ncm91cF9mb3JtKCk7CiAgICBpbml0X2dyb3VwX2lucHV0KCk7CiAgICBpbml0X2dyb3VwX2xheW91dCgpOwogICAgaW5pdF9ncm91cF9tZWRpYSgpOwogICAgaW5pdF9ncm91cF9vdmVybGF5KCk7CiAgICBpbml0X2dyb3VwX3J1bnRpbWUoKTsKICAgIGluaXRfZ3JvdXBfc2ltcGxlKCk7CiAgICBpbml0X2dyb3VwX3V0aWxpdHkoKTsKICAgIGluaXRfZ3JvdXBfd29ya3NwYWNlKCk7CiAgICBpbml0X2RlZXNfc2VhcmNoMigpOwogICAgaW5pdF9kZWVzX3Rvb2x0aXAyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvMDBfY29tbWl0aW5mb19kYXRhLmpzCnZhciBjb21taXRpbmZvOwp2YXIgaW5pdF9jb21taXRpbmZvX2RhdGEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvMDBfY29tbWl0aW5mb19kYXRhLmpzIigpIHsKICAgIGNvbW1pdGluZm8gPSB7CiAgICAgIG5hbWU6ICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciLAogICAgICB2ZXJzaW9uOiAiMy40My4zIiwKICAgICAgZGVzY3JpcHRpb246ICJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjQzLjNfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9pbmRleC5qcwp2YXIgZGlzdF90c193ZWJfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0czIsIHsKICBDYW52YXNQb29sOiAoKSA9PiBDYW52YXNQb29sLAogIERlZXNBY3Rpb25iYXI6ICgpID0+IERlZXNBY3Rpb25iYXIsCiAgRGVlc0FwcHVpOiAoKSA9PiBEZWVzQXBwdWksCiAgRGVlc0FwcHVpQWN0aXZpdHlsb2c6ICgpID0+IERlZXNBcHB1aUFjdGl2aXR5bG9nLAogIERlZXNBcHB1aUJhcjogKCkgPT4gRGVlc0FwcHVpQmFyLAogIERlZXNBcHB1aUJvdHRvbWJhcjogKCkgPT4gRGVlc0FwcHVpQm90dG9tYmFyLAogIERlZXNBcHB1aU1haW5jb250ZW50OiAoKSA9PiBEZWVzQXBwdWlNYWluY29udGVudCwKICBEZWVzQXBwdWlNYWlubWVudTogKCkgPT4gRGVlc0FwcHVpTWFpbm1lbnUsCiAgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duOiAoKSA9PiBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24sCiAgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTogKCkgPT4gRGVlc0FwcHVpU2Vjb25kYXJ5bWVudSwKICBEZWVzQXBwdWlUYWJzOiAoKSA9PiBEZWVzQXBwdWlUYWJzLAogIERlZXNBdWRpb1ZpZXdlcjogKCkgPT4gRGVlc0F1ZGlvVmlld2VyLAogIERlZXNCYWRnZTogKCkgPT4gRGVlc0JhZGdlLAogIERlZXNCdXR0b246ICgpID0+IERlZXNCdXR0b24sCiAgRGVlc0J1dHRvbkV4aXQ6ICgpID0+IERlZXNCdXR0b25FeGl0LAogIERlZXNCdXR0b25Hcm91cDogKCkgPT4gRGVlc0J1dHRvbkdyb3VwLAogIERlZXNDaGFydEFyZWE6ICgpID0+IERlZXNDaGFydEFyZWEsCiAgRGVlc0NoYXJ0TG9nOiAoKSA9PiBEZWVzQ2hhcnRMb2csCiAgRGVlc0NoaXBzOiAoKSA9PiBEZWVzQ2hpcHMsCiAgRGVlc0NvbnRleHRtZW51OiAoKSA9PiBEZWVzQ29udGV4dG1lbnUsCiAgRGVlc0Rhc2hib2FyZGdyaWQ6ICgpID0+IERlZXNEYXNoYm9hcmRncmlkLAogIERlZXNEYXRhdmlld0NvZGVib3g6ICgpID0+IERlZXNEYXRhdmlld0NvZGVib3gsCiAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0OiAoKSA9PiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QsCiAgRGVlc0Zvcm06ICgpID0+IERlZXNGb3JtLAogIERlZXNGb3JtU3VibWl0OiAoKSA9PiBEZWVzRm9ybVN1Ym1pdCwKICBEZWVzRm9ybWF0dGluZ01lbnU6ICgpID0+IERlZXNGb3JtYXR0aW5nTWVudSwKICBEZWVzSGVhZGluZzogKCkgPT4gRGVlc0hlYWRpbmcsCiAgRGVlc0hpbnQ6ICgpID0+IERlZXNIaW50LAogIERlZXNJY29uOiAoKSA9PiBEZWVzSWNvbiwKICBEZWVzSW1hZ2VWaWV3ZXI6ICgpID0+IERlZXNJbWFnZVZpZXdlciwKICBEZWVzSW5wdXRCYXNlOiAoKSA9PiBEZWVzSW5wdXRCYXNlLAogIERlZXNJbnB1dENoZWNrYm94OiAoKSA9PiBEZWVzSW5wdXRDaGVja2JveCwKICBEZWVzSW5wdXRDb2RlOiAoKSA9PiBEZWVzSW5wdXRDb2RlLAogIERlZXNJbnB1dERhdGVwaWNrZXI6ICgpID0+IERlZXNJbnB1dERhdGVwaWNrZXIsCiAgRGVlc0lucHV0RHJvcGRvd246ICgpID0+IERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQ6ICgpID0+IERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbjogKCkgPT4gRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRMaXN0OiAoKSA9PiBEZWVzSW5wdXRMaXN0LAogIERlZXNJbnB1dE11bHRpdG9nZ2xlOiAoKSA9PiBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZTogKCkgPT4gRGVlc0lucHV0UGhvbmUsCiAgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmU6ICgpID0+IERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlLAogIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3I6ICgpID0+IERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IsCiAgRGVlc0lucHV0UmFkaW9ncm91cDogKCkgPT4gRGVlc0lucHV0UmFkaW9ncm91cCwKICBEZWVzSW5wdXRSaWNodGV4dDogKCkgPT4gRGVlc0lucHV0UmljaHRleHQsCiAgRGVlc0lucHV0VGFnczogKCkgPT4gRGVlc0lucHV0VGFncywKICBEZWVzSW5wdXRUZXh0OiAoKSA9PiBEZWVzSW5wdXRUZXh0LAogIERlZXNJbnB1dFRvZ2dsZTogKCkgPT4gRGVlc0lucHV0VG9nZ2xlLAogIERlZXNJbnB1dFR5cGVsaXN0OiAoKSA9PiBEZWVzSW5wdXRUeXBlbGlzdCwKICBEZWVzSW5wdXRXeXNpd3lnOiAoKSA9PiBEZWVzSW5wdXRXeXNpd3lnLAogIERlZXNMYWJlbDogKCkgPT4gRGVlc0xhYmVsLAogIERlZXNNb2JpbGVuYXZpZ2F0aW9uOiAoKSA9PiBEZWVzTW9iaWxlbmF2aWdhdGlvbiwKICBEZWVzTW9kYWw6ICgpID0+IERlZXNNb2RhbCwKICBEZWVzUGFnaW5hdGlvbjogKCkgPT4gRGVlc1BhZ2luYXRpb24sCiAgRGVlc1BhbmVsOiAoKSA9PiBEZWVzUGFuZWwsCiAgRGVlc1BkZjogKCkgPT4gRGVlc1BkZiwKICBEZWVzUGRmUHJldmlldzogKCkgPT4gRGVlc1BkZlByZXZpZXcsCiAgRGVlc1BkZlZpZXdlcjogKCkgPT4gRGVlc1BkZlZpZXdlciwKICBEZWVzUHJldmlldzogKCkgPT4gRGVlc1ByZXZpZXcsCiAgRGVlc1Byb2dyZXNzYmFyOiAoKSA9PiBEZWVzUHJvZ3Jlc3NiYXIsCiAgRGVlc1NlYXJjaGJhcjogKCkgPT4gRGVlc1NlYXJjaGJhciwKICBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDogKCkgPT4gRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQsCiAgRGVlc1NpbXBsZUFwcERhc2g6ICgpID0+IERlZXNTaW1wbGVBcHBEYXNoLAogIERlZXNTaW1wbGVMb2dpbjogKCkgPT4gRGVlc1NpbXBsZUxvZ2luLAogIERlZXNTbGFzaE1lbnU6ICgpID0+IERlZXNTbGFzaE1lbnUsCiAgRGVlc1NwZWVjaGJ1YmJsZTogKCkgPT4gRGVlc1NwZWVjaGJ1YmJsZSwKICBEZWVzU3Bpbm5lcjogKCkgPT4gRGVlc1NwaW5uZXIsCiAgRGVlc1N0YXRzR3JpZDogKCkgPT4gRGVlc1N0YXRzR3JpZCwKICBEZWVzU3RlcHBlcjogKCkgPT4gRGVlc1N0ZXBwZXIsCiAgRGVlc1RhYmxlOiAoKSA9PiBEZWVzVGFibGUsCiAgRGVlc1RoZW1lOiAoKSA9PiBEZWVzVGhlbWUsCiAgRGVlc1RpbGVBdWRpbzogKCkgPT4gRGVlc1RpbGVBdWRpbywKICBEZWVzVGlsZUJhc2U6ICgpID0+IERlZXNUaWxlQmFzZSwKICBEZWVzVGlsZUZvbGRlcjogKCkgPT4gRGVlc1RpbGVGb2xkZXIsCiAgRGVlc1RpbGVJbWFnZTogKCkgPT4gRGVlc1RpbGVJbWFnZSwKICBEZWVzVGlsZU5vdGU6ICgpID0+IERlZXNUaWxlTm90ZSwKICBEZWVzVGlsZVBkZjogKCkgPT4gRGVlc1RpbGVQZGYsCiAgRGVlc1RpbGVWaWRlbzogKCkgPT4gRGVlc1RpbGVWaWRlbywKICBEZWVzVG9hc3Q6ICgpID0+IERlZXNUb2FzdCwKICBEZWVzVXBkYXRlcjogKCkgPT4gRGVlc1VwZGF0ZXIsCiAgRGVlc1ZpZGVvVmlld2VyOiAoKSA9PiBEZWVzVmlkZW9WaWV3ZXIsCiAgRGVlc1dpbmRvd0NvbnRyb2xzOiAoKSA9PiBEZWVzV2luZG93Q29udHJvbHMsCiAgRGVlc1dpbmRvd0xheWVyOiAoKSA9PiBEZWVzV2luZG93TGF5ZXIsCiAgRGVlc1dvcmtzcGFjZTogKCkgPT4gRGVlc1dvcmtzcGFjZSwKICBEZWVzV29ya3NwYWNlQm90dG9tYmFyOiAoKSA9PiBEZWVzV29ya3NwYWNlQm90dG9tYmFyLAogIERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yOiAoKSA9PiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciwKICBEZWVzV29ya3NwYWNlRmlsZXRyZWU6ICgpID0+IERlZXNXb3Jrc3BhY2VGaWxldHJlZSwKICBEZWVzV29ya3NwYWNlTWFya2Rvd246ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93biwKICBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQ6ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldCwKICBEZWVzV29ya3NwYWNlTW9uYWNvOiAoKSA9PiBEZWVzV29ya3NwYWNlTW9uYWNvLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogKCkgPT4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXc6ICgpID0+IERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcsCiAgRGVlc1d5c2l3eWdCbG9jazogKCkgPT4gRGVlc1d5c2l3eWdCbG9jaywKICBQUk9HUkFNTUlOR19MQU5HVUFHRVM6ICgpID0+IFBST0dSQU1NSU5HX0xBTkdVQUdFUywKICBQZGZNYW5hZ2VyOiAoKSA9PiBQZGZNYW5hZ2VyLAogIFBlcmZvcm1hbmNlTW9uaXRvcjogKCkgPT4gUGVyZm9ybWFuY2VNb25pdG9yLAogIFRlcm1pbmFsVGFiTWFuYWdlcjogKCkgPT4gVGVybWluYWxUYWJNYW5hZ2VyLAogIFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyOiAoKSA9PiBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciwKICBWaWV3UmVnaXN0cnk6ICgpID0+IFZpZXdSZWdpc3RyeSwKICBXZWJDb250YWluZXJFbnZpcm9ubWVudDogKCkgPT4gV2ViQ29udGFpbmVyRW52aXJvbm1lbnQsCiAgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9uczogKCkgPT4gV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucywKICBXeXNpd3lnQmxvY2tzOiAoKSA9PiBXeXNpd3lnQmxvY2tzLAogIFd5c2l3eWdDb252ZXJ0ZXJzOiAoKSA9PiBXeXNpd3lnQ29udmVydGVycywKICBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyOiAoKSA9PiBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyLAogIFd5c2l3eWdGb3JtYXR0aW5nOiAoKSA9PiBXeXNpd3lnRm9ybWF0dGluZywKICBXeXNpd3lnSGlzdG9yeTogKCkgPT4gV3lzaXd5Z0hpc3RvcnksCiAgV3lzaXd5Z0lucHV0SGFuZGxlcjogKCkgPT4gV3lzaXd5Z0lucHV0SGFuZGxlciwKICBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyOiAoKSA9PiBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyLAogIFd5c2l3eWdNb2RhbE1hbmFnZXI6ICgpID0+IFd5c2l3eWdNb2RhbE1hbmFnZXIsCiAgV3lzaXd5Z1NlbGVjdGlvbjogKCkgPT4gV3lzaXd5Z1NlbGVjdGlvbiwKICBXeXNpd3lnU2hvcnRjdXRzOiAoKSA9PiBXeXNpd3lnU2hvcnRjdXRzLAogIFpJbmRleFJlZ2lzdHJ5OiAoKSA9PiBaSW5kZXhSZWdpc3RyeSwKICBjb2xvcnM6ICgpID0+IGNvbG9yc19leHBvcnRzLAogIGNvbW1pdGluZm86ICgpID0+IGNvbW1pdGluZm8sCiAgY29tcG9uZW50WkluZGV4OiAoKSA9PiBjb21wb25lbnRaSW5kZXgsCiAgZGVib3VuY2U6ICgpID0+IGRlYm91bmNlMywKICBmb3JtYXRGaWxlU2l6ZTogKCkgPT4gZm9ybWF0RmlsZVNpemUsCiAgZ2V0WkluZGV4OiAoKSA9PiBnZXRaSW5kZXgsCiAgaWNvbnM6ICgpID0+IGljb25zNCwKICBpc0luVmlld3BvcnQ6ICgpID0+IGlzSW5WaWV3cG9ydCwKICByZWdpc3RlckFsbEJsb2NrSGFuZGxlcnM6ICgpID0+IHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycywKICB0aGVtZURlZmF1bHRTdHlsZXM6ICgpID0+IHRoZW1lRGVmYXVsdFN0eWxlcywKICB0aGVtZURlZmF1bHRzOiAoKSA9PiB0aGVtZURlZmF1bHRzLAogIHRocm90dGxlOiAoKSA9PiB0aHJvdHRsZTIsCiAgdGlsZUJhc2VTdHlsZXM6ICgpID0+IHRpbGVCYXNlU3R5bGVzLAogIHd5c2l3eWdTdHlsZXM6ICgpID0+IHd5c2l3eWdTdHlsZXMsCiAgekluZGV4TGF5ZXJzOiAoKSA9PiB6SW5kZXhMYXllcnMsCiAgekluZGV4UmVnaXN0cnk6ICgpID0+IHpJbmRleFJlZ2lzdHJ5Cn0pOwp2YXIgaW5pdF9kaXN0X3RzX3dlYjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy40My4zX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lbGVtZW50cygpOwogICAgaW5pdF9jb2xvcnMoKTsKICAgIGluaXRfY29tbWl0aW5mb19kYXRhKCk7CiAgfQp9KTsKCi8vIHRzX3dlYi9wbHVnaW5zLnRzCnZhciBkb210b29sczsKdmFyIGluaXRfcGx1Z2luczUgPSBfX2VzbSh7CiAgInRzX3dlYi9wbHVnaW5zLnRzIigpIHsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBpbml0X2Rpc3RfdHNfd2ViMigpOwogICAgZG9tdG9vbHMgPSBkaXN0X3RzX2V4cG9ydHMyODsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9wbHVnaW5zLnRzCnZhciBpbml0X3BsdWdpbnM2ID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3BsdWdpbnMudHMiKCkgewogICAgaW5pdF9kaXN0X3RzNCgpOwogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL2RhdGEvaWRlbnRpdHkudHMKdmFyIGluaXRfaWRlbnRpdHkyID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL2RhdGEvaWRlbnRpdHkudHMiKCkgewogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL2RhdGEvY29ubmVjdGlvbi50cwp2YXIgaW5pdF9jb25uZWN0aW9uID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL2RhdGEvY29ubmVjdGlvbi50cyIoKSB7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvZGF0YS9wcm9qZWN0LnRzCnZhciBpbml0X3Byb2plY3QzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL2RhdGEvcHJvamVjdC50cyIoKSB7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvZGF0YS9ncm91cC50cwp2YXIgaW5pdF9ncm91cCA9IF9fZXNtKHsKICAidHNfaW50ZXJmYWNlcy9kYXRhL2dyb3VwLnRzIigpIHsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9kYXRhL3NlY3JldC50cwp2YXIgaW5pdF9zZWNyZXQgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvZGF0YS9zZWNyZXQudHMiKCkgewogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL2RhdGEvcGlwZWxpbmUudHMKdmFyIGluaXRfcGlwZWxpbmUgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvZGF0YS9waXBlbGluZS50cyIoKSB7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvZGF0YS9hY3Rpb25sb2cudHMKdmFyIGluaXRfYWN0aW9ubG9nID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL2RhdGEvYWN0aW9ubG9nLnRzIigpIHsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9kYXRhL2luZGV4LnRzCnZhciBkYXRhX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZGF0YTIgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvZGF0YS9pbmRleC50cyIoKSB7CiAgICBpbml0X2lkZW50aXR5MigpOwogICAgaW5pdF9jb25uZWN0aW9uKCk7CiAgICBpbml0X3Byb2plY3QzKCk7CiAgICBpbml0X2dyb3VwKCk7CiAgICBpbml0X3NlY3JldCgpOwogICAgaW5pdF9waXBlbGluZSgpOwogICAgaW5pdF9hY3Rpb25sb2coKTsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9hZG1pbi50cwp2YXIgaW5pdF9hZG1pbiA9IF9fZXNtKHsKICAidHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9hZG1pbi50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM2KCk7CiAgICBpbml0X2RhdGEyKCk7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvcmVxdWVzdHMvY29ubmVjdGlvbnMudHMKdmFyIGluaXRfY29ubmVjdGlvbnMgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvcmVxdWVzdHMvY29ubmVjdGlvbnMudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNigpOwogICAgaW5pdF9kYXRhMigpOwogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL3JlcXVlc3RzL3Byb2plY3RzLnRzCnZhciBpbml0X3Byb2plY3RzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3JlcXVlc3RzL3Byb2plY3RzLnRzIigpIHsKICAgIGluaXRfcGx1Z2luczYoKTsKICAgIGluaXRfZGF0YTIoKTsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9ncm91cHMudHMKdmFyIGluaXRfZ3JvdXBzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3JlcXVlc3RzL2dyb3Vwcy50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM2KCk7CiAgICBpbml0X2RhdGEyKCk7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvcmVxdWVzdHMvc2VjcmV0cy50cwp2YXIgaW5pdF9zZWNyZXRzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3JlcXVlc3RzL3NlY3JldHMudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNigpOwogICAgaW5pdF9kYXRhMigpOwogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL3JlcXVlc3RzL3BpcGVsaW5lcy50cwp2YXIgaW5pdF9waXBlbGluZXMgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvcmVxdWVzdHMvcGlwZWxpbmVzLnRzIigpIHsKICAgIGluaXRfcGx1Z2luczYoKTsKICAgIGluaXRfZGF0YTIoKTsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9sb2dzLnRzCnZhciBpbml0X2xvZ3MgPSBfX2VzbSh7CiAgInRzX2ludGVyZmFjZXMvcmVxdWVzdHMvbG9ncy50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM2KCk7CiAgICBpbml0X2RhdGEyKCk7CiAgfQp9KTsKCi8vIHRzX2ludGVyZmFjZXMvcmVxdWVzdHMvd2ViaG9vay50cwp2YXIgaW5pdF93ZWJob29rID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3JlcXVlc3RzL3dlYmhvb2sudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNigpOwogICAgaW5pdF9kYXRhMigpOwogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL3JlcXVlc3RzL2FjdGlvbnMudHMKdmFyIGluaXRfYWN0aW9ucyA9IF9fZXNtKHsKICAidHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9hY3Rpb25zLnRzIigpIHsKICAgIGluaXRfcGx1Z2luczYoKTsKICAgIGluaXRfZGF0YTIoKTsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9hY3Rpb25sb2cudHMKdmFyIGluaXRfYWN0aW9ubG9nMiA9IF9fZXNtKHsKICAidHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9hY3Rpb25sb2cudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNigpOwogICAgaW5pdF9kYXRhMigpOwogIH0KfSk7CgovLyB0c19pbnRlcmZhY2VzL3JlcXVlc3RzL2luZGV4LnRzCnZhciByZXF1ZXN0c19leHBvcnRzID0ge307CnZhciBpbml0X3JlcXVlc3RzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL3JlcXVlc3RzL2luZGV4LnRzIigpIHsKICAgIGluaXRfYWRtaW4oKTsKICAgIGluaXRfY29ubmVjdGlvbnMoKTsKICAgIGluaXRfcHJvamVjdHMoKTsKICAgIGluaXRfZ3JvdXBzKCk7CiAgICBpbml0X3NlY3JldHMoKTsKICAgIGluaXRfcGlwZWxpbmVzKCk7CiAgICBpbml0X2xvZ3MoKTsKICAgIGluaXRfd2ViaG9vaygpOwogICAgaW5pdF9hY3Rpb25zKCk7CiAgICBpbml0X2FjdGlvbmxvZzIoKTsKICB9Cn0pOwoKLy8gdHNfaW50ZXJmYWNlcy9pbmRleC50cwp2YXIgaW5pdF90c19pbnRlcmZhY2VzID0gX19lc20oewogICJ0c19pbnRlcmZhY2VzL2luZGV4LnRzIigpIHsKICAgIGluaXRfcGx1Z2luczYoKTsKICAgIGluaXRfZGF0YTIoKTsKICAgIGluaXRfcmVxdWVzdHMoKTsKICB9Cn0pOwoKLy8gdHNfd2ViL2FwcHN0YXRlLnRzCnZhciBhcHBTdGF0ZSwgbG9naW5TdGF0ZVBhcnQsIGNvbm5lY3Rpb25zU3RhdGVQYXJ0LCBkYXRhU3RhdGVQYXJ0LCBhY3Rpb25Mb2dTdGF0ZVBhcnQsIHVpU3RhdGVQYXJ0LCBnZXRBY3Rpb25Db250ZXh0LCBsb2dpbkFjdGlvbiwgbG9nb3V0QWN0aW9uLCBmZXRjaENvbm5lY3Rpb25zQWN0aW9uLCBjcmVhdGVDb25uZWN0aW9uQWN0aW9uLCB0ZXN0Q29ubmVjdGlvbkFjdGlvbiwgZGVsZXRlQ29ubmVjdGlvbkFjdGlvbiwgcGF1c2VDb25uZWN0aW9uQWN0aW9uLCB1cGRhdGVDb25uZWN0aW9uQWN0aW9uLCBmZXRjaFByb2plY3RzQWN0aW9uLCBmZXRjaEdyb3Vwc0FjdGlvbiwgZmV0Y2hTZWNyZXRzQWN0aW9uLCBmZXRjaEFsbFNlY3JldHNBY3Rpb24sIGNyZWF0ZVNlY3JldEFjdGlvbiwgdXBkYXRlU2VjcmV0QWN0aW9uLCBkZWxldGVTZWNyZXRBY3Rpb24sIGZldGNoUGlwZWxpbmVzQWN0aW9uLCBmZXRjaFBpcGVsaW5lSm9ic0FjdGlvbiwgcmV0cnlQaXBlbGluZUFjdGlvbiwgY2FuY2VsUGlwZWxpbmVBY3Rpb24sIGZldGNoSm9iTG9nQWN0aW9uLCBmZXRjaEFjdGlvbkxvZ0FjdGlvbiwgc2V0QWN0aXZlVmlld0FjdGlvbiwgdG9nZ2xlQXV0b1JlZnJlc2hBY3Rpb24sIHNldFJlZnJlc2hJbnRlcnZhbEFjdGlvbjsKdmFyIGluaXRfYXBwc3RhdGUgPSBfX2VzbSh7CiAgYXN5bmMgInRzX3dlYi9hcHBzdGF0ZS50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM1KCk7CiAgICBpbml0X3RzX2ludGVyZmFjZXMoKTsKICAgIGFwcFN0YXRlID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMuc21hcnRzdGF0ZS5TbWFydHN0YXRlKCk7CiAgICBsb2dpblN0YXRlUGFydCA9IGF3YWl0IGFwcFN0YXRlLmdldFN0YXRlUGFydCgKICAgICAgImxvZ2luIiwKICAgICAgewogICAgICAgIGlkZW50aXR5OiBudWxsLAogICAgICAgIGlzTG9nZ2VkSW46IGZhbHNlCiAgICAgIH0sCiAgICAgICJwZXJzaXN0ZW50IgogICAgKTsKICAgIGNvbm5lY3Rpb25zU3RhdGVQYXJ0ID0gYXdhaXQgYXBwU3RhdGUuZ2V0U3RhdGVQYXJ0KAogICAgICAiY29ubmVjdGlvbnMiLAogICAgICB7CiAgICAgICAgY29ubmVjdGlvbnM6IFtdLAogICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25JZDogbnVsbAogICAgICB9LAogICAgICAic29mdCIKICAgICk7CiAgICBkYXRhU3RhdGVQYXJ0ID0gYXdhaXQgYXBwU3RhdGUuZ2V0U3RhdGVQYXJ0KAogICAgICAiZGF0YSIsCiAgICAgIHsKICAgICAgICBwcm9qZWN0czogW10sCiAgICAgICAgZ3JvdXBzOiBbXSwKICAgICAgICBzZWNyZXRzOiBbXSwKICAgICAgICBwaXBlbGluZXM6IFtdLAogICAgICAgIHBpcGVsaW5lSm9iczogW10sCiAgICAgICAgY3VycmVudEpvYkxvZzogIiIKICAgICAgfSwKICAgICAgInNvZnQiCiAgICApOwogICAgYWN0aW9uTG9nU3RhdGVQYXJ0ID0gYXdhaXQgYXBwU3RhdGUuZ2V0U3RhdGVQYXJ0KAogICAgICAiYWN0aW9uTG9nIiwKICAgICAgewogICAgICAgIGVudHJpZXM6IFtdLAogICAgICAgIHRvdGFsOiAwCiAgICAgIH0sCiAgICAgICJzb2Z0IgogICAgKTsKICAgIHVpU3RhdGVQYXJ0ID0gYXdhaXQgYXBwU3RhdGUuZ2V0U3RhdGVQYXJ0KAogICAgICAidWkiLAogICAgICB7CiAgICAgICAgYWN0aXZlVmlldzogIm92ZXJ2aWV3IiwKICAgICAgICBhdXRvUmVmcmVzaDogdHJ1ZSwKICAgICAgICByZWZyZXNoSW50ZXJ2YWw6IDNlNAogICAgICB9CiAgICApOwogICAgZ2V0QWN0aW9uQ29udGV4dCA9ICgpID0+IHsKICAgICAgcmV0dXJuIHsgaWRlbnRpdHk6IGxvZ2luU3RhdGVQYXJ0LmdldFN0YXRlKCkuaWRlbnRpdHkgfTsKICAgIH07CiAgICBsb2dpbkFjdGlvbiA9IGxvZ2luU3RhdGVQYXJ0LmNyZWF0ZUFjdGlvbihhc3luYyAoc3RhdGVQYXJ0QXJnLCBkYXRhQXJnKSA9PiB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJhZG1pbkxvZ2luIik7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICB1c2VybmFtZTogZGF0YUFyZy51c2VybmFtZSwKICAgICAgICAgIHBhc3N3b3JkOiBkYXRhQXJnLnBhc3N3b3JkCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkZW50aXR5OiByZXNwb25zZS5pZGVudGl0eSB8fCBudWxsLAogICAgICAgICAgaXNMb2dnZWRJbjogISFyZXNwb25zZS5pZGVudGl0eQogICAgICAgIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkxvZ2luIGZhaWxlZDoiLCBlcnIpOwogICAgICAgIHJldHVybiB7IGlkZW50aXR5OiBudWxsLCBpc0xvZ2dlZEluOiBmYWxzZSB9OwogICAgICB9CiAgICB9KTsKICAgIGxvZ291dEFjdGlvbiA9IGxvZ2luU3RhdGVQYXJ0LmNyZWF0ZUFjdGlvbihhc3luYyAoX3N0YXRlUGFydEFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoY29udGV4dDIuaWRlbnRpdHkpIHsKICAgICAgICAgIGNvbnN0IHR5cGVkUmVxdWVzdCA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiYWRtaW5Mb2dvdXQiKTsKICAgICAgICAgIGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5IH0pOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiTG9nb3V0IGVycm9yOiIsIGVycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgaWRlbnRpdHk6IG51bGwsIGlzTG9nZ2VkSW46IGZhbHNlIH07CiAgICB9KTsKICAgIGZldGNoQ29ubmVjdGlvbnNBY3Rpb24gPSBjb25uZWN0aW9uc1N0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldENvbm5lY3Rpb25zIik7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7IGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSB9KTsKICAgICAgICByZXR1cm4geyAuLi5zdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKSwgY29ubmVjdGlvbnM6IHJlc3BvbnNlLmNvbm5lY3Rpb25zIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBjb25uZWN0aW9uczoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBjcmVhdGVDb25uZWN0aW9uQWN0aW9uID0gY29ubmVjdGlvbnNTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJjcmVhdGVDb25uZWN0aW9uIik7CiAgICAgICAgYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgLi4uZGF0YUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGxpc3RSZXEgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldENvbm5lY3Rpb25zIik7CiAgICAgICAgY29uc3QgbGlzdFJlc3AgPSBhd2FpdCBsaXN0UmVxLmZpcmUoeyBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHkgfSk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIGNvbm5lY3Rpb25zOiBsaXN0UmVzcC5jb25uZWN0aW9ucyB9OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGNvbm5lY3Rpb246IiwgZXJyKTsKICAgICAgICByZXR1cm4gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGVzdENvbm5lY3Rpb25BY3Rpb24gPSBjb25uZWN0aW9uc1N0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgInRlc3RDb25uZWN0aW9uIik7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgY29ubmVjdGlvbklkOiBkYXRhQXJnLmNvbm5lY3Rpb25JZAogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGxpc3RSZXEgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldENvbm5lY3Rpb25zIik7CiAgICAgICAgY29uc3QgbGlzdFJlc3AgPSBhd2FpdCBsaXN0UmVxLmZpcmUoeyBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHkgfSk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIGNvbm5lY3Rpb25zOiBsaXN0UmVzcC5jb25uZWN0aW9ucyB9OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gdGVzdCBjb25uZWN0aW9uOiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIGRlbGV0ZUNvbm5lY3Rpb25BY3Rpb24gPSBjb25uZWN0aW9uc1N0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImRlbGV0ZUNvbm5lY3Rpb24iKTsKICAgICAgICBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICBjb25uZWN0aW9uSWQ6IGRhdGFBcmcuY29ubmVjdGlvbklkCiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBjb25uZWN0aW9uczogc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKChjMTEpID0+IGMxMS5pZCAhPT0gZGF0YUFyZy5jb25uZWN0aW9uSWQpLAogICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbklkOiBzdGF0ZS5hY3RpdmVDb25uZWN0aW9uSWQgPT09IGRhdGFBcmcuY29ubmVjdGlvbklkID8gbnVsbCA6IHN0YXRlLmFjdGl2ZUNvbm5lY3Rpb25JZAogICAgICAgIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBkZWxldGUgY29ubmVjdGlvbjoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBwYXVzZUNvbm5lY3Rpb25BY3Rpb24gPSBjb25uZWN0aW9uc1N0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgInBhdXNlQ29ubmVjdGlvbiIpOwogICAgICAgIGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIC4uLmRhdGFBcmcKICAgICAgICB9KTsKICAgICAgICBjb25zdCBsaXN0UmVxID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJnZXRDb25uZWN0aW9ucyIpOwogICAgICAgIGNvbnN0IGxpc3RSZXNwID0gYXdhaXQgbGlzdFJlcS5maXJlKHsgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5IH0pOwogICAgICAgIHJldHVybiB7IC4uLnN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpLCBjb25uZWN0aW9uczogbGlzdFJlc3AuY29ubmVjdGlvbnMgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhdXNlL3Jlc3VtZSBjb25uZWN0aW9uOiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIHVwZGF0ZUNvbm5lY3Rpb25BY3Rpb24gPSBjb25uZWN0aW9uc1N0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgInVwZGF0ZUNvbm5lY3Rpb24iKTsKICAgICAgICBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICAuLi5kYXRhQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGlzdFJlcSA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiZ2V0Q29ubmVjdGlvbnMiKTsKICAgICAgICBjb25zdCBsaXN0UmVzcCA9IGF3YWl0IGxpc3RSZXEuZmlyZSh7IGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSB9KTsKICAgICAgICByZXR1cm4geyAuLi5zdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKSwgY29ubmVjdGlvbnM6IGxpc3RSZXNwLmNvbm5lY3Rpb25zIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgY29ubmVjdGlvbjoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBmZXRjaFByb2plY3RzQWN0aW9uID0gZGF0YVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldFByb2plY3RzIik7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICBjb25uZWN0aW9uSWQ6IGRhdGFBcmcuY29ubmVjdGlvbklkLAogICAgICAgICAgc2VhcmNoOiBkYXRhQXJnLnNlYXJjaAogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7IC4uLnN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpLCBwcm9qZWN0czogcmVzcG9uc2UucHJvamVjdHMgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIHByb2plY3RzOiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIGZldGNoR3JvdXBzQWN0aW9uID0gZGF0YVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldEdyb3VwcyIpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgY29ubmVjdGlvbklkOiBkYXRhQXJnLmNvbm5lY3Rpb25JZCwKICAgICAgICAgIHNlYXJjaDogZGF0YUFyZy5zZWFyY2gKICAgICAgICB9KTsKICAgICAgICByZXR1cm4geyAuLi5zdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKSwgZ3JvdXBzOiByZXNwb25zZS5ncm91cHMgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIGdyb3VwczoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBmZXRjaFNlY3JldHNBY3Rpb24gPSBkYXRhU3RhdGVQYXJ0LmNyZWF0ZUFjdGlvbihhc3luYyAoc3RhdGVQYXJ0QXJnLCBkYXRhQXJnKSA9PiB7CiAgICAgIGNvbnN0IGNvbnRleHQyID0gZ2V0QWN0aW9uQ29udGV4dCgpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHR5cGVkUmVxdWVzdCA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiZ2V0U2VjcmV0cyIpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgY29ubmVjdGlvbklkOiBkYXRhQXJnLmNvbm5lY3Rpb25JZCwKICAgICAgICAgIHNjb3BlOiBkYXRhQXJnLnNjb3BlLAogICAgICAgICAgc2NvcGVJZDogZGF0YUFyZy5zY29wZUlkCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIHNlY3JldHM6IHJlc3BvbnNlLnNlY3JldHMgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIHNlY3JldHM6IiwgZXJyKTsKICAgICAgICByZXR1cm4gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgIH0KICAgIH0pOwogICAgZmV0Y2hBbGxTZWNyZXRzQWN0aW9uID0gZGF0YVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBzY29wZXMgPSBkYXRhQXJnLnNjb3BlID8gW2RhdGFBcmcuc2NvcGVdIDogWyJwcm9qZWN0IiwgImdyb3VwIl07CiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKAogICAgICAgICAgc2NvcGVzLm1hcChhc3luYyAoc2NvcGUpID0+IHsKICAgICAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJnZXRBbGxTZWNyZXRzIik7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6IGRhdGFBcmcuY29ubmVjdGlvbklkLAogICAgICAgICAgICAgIHNjb3BlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc2VjcmV0czsKICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgICByZXR1cm4geyAuLi5zdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKSwgc2VjcmV0czogcmVzdWx0cy5mbGF0KCkgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIGFsbCBzZWNyZXRzOiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIGNyZWF0ZVNlY3JldEFjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJjcmVhdGVTZWNyZXQiKTsKICAgICAgICBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICAuLi5kYXRhQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGlzdFJlcSA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiZ2V0U2VjcmV0cyIpOwogICAgICAgIGNvbnN0IGxpc3RSZXNwID0gYXdhaXQgbGlzdFJlcS5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIGNvbm5lY3Rpb25JZDogZGF0YUFyZy5jb25uZWN0aW9uSWQsCiAgICAgICAgICBzY29wZTogZGF0YUFyZy5zY29wZSwKICAgICAgICAgIHNjb3BlSWQ6IGRhdGFBcmcuc2NvcGVJZAogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHN0YXRlID0gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgICAgY29uc3Qgb3RoZXJTZWNyZXRzID0gc3RhdGUuc2VjcmV0cy5maWx0ZXIoCiAgICAgICAgICAoczEwKSA9PiAhKHMxMC5zY29wZUlkID09PSBkYXRhQXJnLnNjb3BlSWQgJiYgczEwLnNjb3BlID09PSBkYXRhQXJnLnNjb3BlKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlY3JldHM6IFsuLi5vdGhlclNlY3JldHMsIC4uLmxpc3RSZXNwLnNlY3JldHNdIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgc2VjcmV0OiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIHVwZGF0ZVNlY3JldEFjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJ1cGRhdGVTZWNyZXQiKTsKICAgICAgICBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICAuLi5kYXRhQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGlzdFJlcSA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiZ2V0U2VjcmV0cyIpOwogICAgICAgIGNvbnN0IGxpc3RSZXNwID0gYXdhaXQgbGlzdFJlcS5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIGNvbm5lY3Rpb25JZDogZGF0YUFyZy5jb25uZWN0aW9uSWQsCiAgICAgICAgICBzY29wZTogZGF0YUFyZy5zY29wZSwKICAgICAgICAgIHNjb3BlSWQ6IGRhdGFBcmcuc2NvcGVJZAogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHN0YXRlID0gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgICAgY29uc3Qgb3RoZXJTZWNyZXRzID0gc3RhdGUuc2VjcmV0cy5maWx0ZXIoCiAgICAgICAgICAoczEwKSA9PiAhKHMxMC5zY29wZUlkID09PSBkYXRhQXJnLnNjb3BlSWQgJiYgczEwLnNjb3BlID09PSBkYXRhQXJnLnNjb3BlKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlY3JldHM6IFsuLi5vdGhlclNlY3JldHMsIC4uLmxpc3RSZXNwLnNlY3JldHNdIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgc2VjcmV0OiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIGRlbGV0ZVNlY3JldEFjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJkZWxldGVTZWNyZXQiKTsKICAgICAgICBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICAuLi5kYXRhQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBzZWNyZXRzOiBzdGF0ZS5zZWNyZXRzLmZpbHRlcigKICAgICAgICAgICAgKHMxMCkgPT4gIShzMTAua2V5ID09PSBkYXRhQXJnLmtleSAmJiBzMTAuc2NvcGVJZCA9PT0gZGF0YUFyZy5zY29wZUlkICYmIHMxMC5zY29wZSA9PT0gZGF0YUFyZy5zY29wZSkKICAgICAgICAgICkKICAgICAgICB9OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIHNlY3JldDoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBmZXRjaFBpcGVsaW5lc0FjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJnZXRQaXBlbGluZXMiKTsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIGNvbm5lY3Rpb25JZDogZGF0YUFyZy5jb25uZWN0aW9uSWQsCiAgICAgICAgICBwcm9qZWN0SWQ6IGRhdGFBcmcucHJvamVjdElkCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIHBpcGVsaW5lczogcmVzcG9uc2UucGlwZWxpbmVzIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBmZXRjaCBwaXBlbGluZXM6IiwgZXJyKTsKICAgICAgICByZXR1cm4gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgIH0KICAgIH0pOwogICAgZmV0Y2hQaXBlbGluZUpvYnNBY3Rpb24gPSBkYXRhU3RhdGVQYXJ0LmNyZWF0ZUFjdGlvbihhc3luYyAoc3RhdGVQYXJ0QXJnLCBkYXRhQXJnKSA9PiB7CiAgICAgIGNvbnN0IGNvbnRleHQyID0gZ2V0QWN0aW9uQ29udGV4dCgpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHR5cGVkUmVxdWVzdCA9IG5ldyBkb210b29scy5wbHVnaW5zLnR5cGVkcmVxdWVzdC5UeXBlZFJlcXVlc3QoIi90eXBlZHJlcXVlc3QiLCAiZ2V0UGlwZWxpbmVKb2JzIik7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICBjb25uZWN0aW9uSWQ6IGRhdGFBcmcuY29ubmVjdGlvbklkLAogICAgICAgICAgcHJvamVjdElkOiBkYXRhQXJnLnByb2plY3RJZCwKICAgICAgICAgIHBpcGVsaW5lSWQ6IGRhdGFBcmcucGlwZWxpbmVJZAogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7IC4uLnN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpLCBwaXBlbGluZUpvYnM6IHJlc3BvbnNlLmpvYnMgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIHBpcGVsaW5lIGpvYnM6IiwgZXJyKTsKICAgICAgICByZXR1cm4gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0cnlQaXBlbGluZUFjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJyZXRyeVBpcGVsaW5lIik7CiAgICAgICAgYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgLi4uZGF0YUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGxpc3RSZXEgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldFBpcGVsaW5lcyIpOwogICAgICAgIGNvbnN0IGxpc3RSZXNwID0gYXdhaXQgbGlzdFJlcS5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIGNvbm5lY3Rpb25JZDogZGF0YUFyZy5jb25uZWN0aW9uSWQsCiAgICAgICAgICBwcm9qZWN0SWQ6IGRhdGFBcmcucHJvamVjdElkCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIHBpcGVsaW5lczogbGlzdFJlc3AucGlwZWxpbmVzIH07CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZXRyeSBwaXBlbGluZToiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBjYW5jZWxQaXBlbGluZUFjdGlvbiA9IGRhdGFTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJjYW5jZWxQaXBlbGluZSIpOwogICAgICAgIGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIC4uLmRhdGFBcmcKICAgICAgICB9KTsKICAgICAgICBjb25zdCBsaXN0UmVxID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJnZXRQaXBlbGluZXMiKTsKICAgICAgICBjb25zdCBsaXN0UmVzcCA9IGF3YWl0IGxpc3RSZXEuZmlyZSh7CiAgICAgICAgICBpZGVudGl0eTogY29udGV4dDIuaWRlbnRpdHksCiAgICAgICAgICBjb25uZWN0aW9uSWQ6IGRhdGFBcmcuY29ubmVjdGlvbklkLAogICAgICAgICAgcHJvamVjdElkOiBkYXRhQXJnLnByb2plY3RJZAogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7IC4uLnN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpLCBwaXBlbGluZXM6IGxpc3RSZXNwLnBpcGVsaW5lcyB9OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY2FuY2VsIHBpcGVsaW5lOiIsIGVycik7CiAgICAgICAgcmV0dXJuIHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICB9KTsKICAgIGZldGNoSm9iTG9nQWN0aW9uID0gZGF0YVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZywgZGF0YUFyZykgPT4gewogICAgICBjb25zdCBjb250ZXh0MiA9IGdldEFjdGlvbkNvbnRleHQoKTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldEpvYkxvZyIpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoewogICAgICAgICAgaWRlbnRpdHk6IGNvbnRleHQyLmlkZW50aXR5LAogICAgICAgICAgLi4uZGF0YUFyZwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7IC4uLnN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpLCBjdXJyZW50Sm9iTG9nOiByZXNwb25zZS5sb2cgfTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGZldGNoIGpvYiBsb2c6IiwgZXJyKTsKICAgICAgICByZXR1cm4gc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCk7CiAgICAgIH0KICAgIH0pOwogICAgZmV0Y2hBY3Rpb25Mb2dBY3Rpb24gPSBhY3Rpb25Mb2dTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgY29uc3QgY29udGV4dDIgPSBnZXRBY3Rpb25Db250ZXh0KCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXF1ZXN0ID0gbmV3IGRvbXRvb2xzLnBsdWdpbnMudHlwZWRyZXF1ZXN0LlR5cGVkUmVxdWVzdCgiL3R5cGVkcmVxdWVzdCIsICJnZXRBY3Rpb25Mb2ciKTsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsKICAgICAgICAgIGlkZW50aXR5OiBjb250ZXh0Mi5pZGVudGl0eSwKICAgICAgICAgIGxpbWl0OiBkYXRhQXJnPy5saW1pdCwKICAgICAgICAgIG9mZnNldDogZGF0YUFyZz8ub2Zmc2V0LAogICAgICAgICAgZW50aXR5VHlwZTogZGF0YUFyZz8uZW50aXR5VHlwZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlc3BvbnNlLmVudHJpZXMsIHRvdGFsOiByZXNwb25zZS50b3RhbCB9OwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZmV0Y2ggYWN0aW9uIGxvZzoiLCBlcnIpOwogICAgICAgIHJldHVybiBzdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgfSk7CiAgICBzZXRBY3RpdmVWaWV3QWN0aW9uID0gdWlTdGF0ZVBhcnQuY3JlYXRlQWN0aW9uKAogICAgICBhc3luYyAoc3RhdGVQYXJ0QXJnLCBkYXRhQXJnKSA9PiB7CiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGVQYXJ0QXJnLmdldFN0YXRlKCksIGFjdGl2ZVZpZXc6IGRhdGFBcmcudmlldyB9OwogICAgICB9CiAgICApOwogICAgdG9nZ2xlQXV0b1JlZnJlc2hBY3Rpb24gPSB1aVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oYXN5bmMgKHN0YXRlUGFydEFyZykgPT4gewogICAgICBjb25zdCBzdGF0ZSA9IHN0YXRlUGFydEFyZy5nZXRTdGF0ZSgpOwogICAgICByZXR1cm4geyAuLi5zdGF0ZSwgYXV0b1JlZnJlc2g6ICFzdGF0ZS5hdXRvUmVmcmVzaCB9OwogICAgfSk7CiAgICBzZXRSZWZyZXNoSW50ZXJ2YWxBY3Rpb24gPSB1aVN0YXRlUGFydC5jcmVhdGVBY3Rpb24oCiAgICAgIGFzeW5jIChzdGF0ZVBhcnRBcmcsIGRhdGFBcmcpID0+IHsKICAgICAgICByZXR1cm4geyAuLi5zdGF0ZVBhcnRBcmcuZ2V0U3RhdGUoKSwgcmVmcmVzaEludGVydmFsOiBkYXRhQXJnLmludGVydmFsIH07CiAgICAgIH0KICAgICk7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy9zaGFyZWQvY3NzLnRzCnZhciB2aWV3SG9zdENzczsKdmFyIGluaXRfY3NzID0gX19lc20oewogICJ0c193ZWIvZWxlbWVudHMvc2hhcmVkL2Nzcy50cyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgdmlld0hvc3RDc3MgPSBpYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiBhdXRvOwogICAgbWF4LXdpZHRoOiAxMjgwcHg7CiAgICBwYWRkaW5nOiAxNnB4IDE2cHg7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQogIC52aWV3LXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogIH0KICAudmlldy1kZXNjcmlwdGlvbiB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBjb2xvcjogIzk5OTsKICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgfQogIC50b29sYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDE2cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICB9CmA7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy9zaGFyZWQvaW5kZXgudHMKdmFyIGluaXRfc2hhcmVkID0gX19lc20oewogICJ0c193ZWIvZWxlbWVudHMvc2hhcmVkL2luZGV4LnRzIigpIHsKICAgIGluaXRfY3NzKCk7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy92aWV3cy9vdmVydmlldy9pbmRleC50cwp2YXIgb3ZlcnZpZXdfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChvdmVydmlld19leHBvcnRzLCB7CiAgR2l0b3BzVmlld092ZXJ2aWV3OiAoKSA9PiBHaXRvcHNWaWV3T3ZlcnZpZXcKfSk7CnZhciBfZGF0YVN0YXRlX2RlYywgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjLCBfYTQsIF9HaXRvcHNWaWV3T3ZlcnZpZXdfZGVjb3JhdG9ycywgX2luaXQsIF9jb25uZWN0aW9uc1N0YXRlLCBfZGF0YVN0YXRlLCBHaXRvcHNWaWV3T3ZlcnZpZXc7CnZhciBpbml0X292ZXJ2aWV3ID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3Mvb3ZlcnZpZXcvaW5kZXgudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNSgpOwogICAgYXdhaXQgaW5pdF9hcHBzdGF0ZSgpOwogICAgaW5pdF9zaGFyZWQoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBfR2l0b3BzVmlld092ZXJ2aWV3X2RlY29yYXRvcnMgPSBbdDQoImdpdG9wcy12aWV3LW92ZXJ2aWV3IildOwogICAgR2l0b3BzVmlld092ZXJ2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2E0ID0gRGVlc0VsZW1lbnQsIF9jb25uZWN0aW9uc1N0YXRlX2RlYyA9IFtyNSgpXSwgX2RhdGFTdGF0ZV9kZWMgPSBbcjUoKV0sIF9hNCkgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29ubmVjdGlvbnNTdGF0ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDgsIHRoaXMsIHsKICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSwKICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25JZDogbnVsbAogICAgICAgIH0pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDExLCB0aGlzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFTdGF0ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDEyLCB0aGlzLCB7CiAgICAgICAgICBwcm9qZWN0czogW10sCiAgICAgICAgICBncm91cHM6IFtdLAogICAgICAgICAgc2VjcmV0czogW10sCiAgICAgICAgICBwaXBlbGluZXM6IFtdLAogICAgICAgICAgcGlwZWxpbmVKb2JzOiBbXSwKICAgICAgICAgIGN1cnJlbnRKb2JMb2c6ICIiCiAgICAgICAgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTUsIHRoaXMpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9hdXRvUmVmcmVzaEhhbmRsZXIiKTsKICAgICAgICBjb25zdCBjb25uU3ViID0gY29ubmVjdGlvbnNTdGF0ZVBhcnQuc2VsZWN0KChzMTApID0+IHMxMCkuc3Vic2NyaWJlKChzMTApID0+IHsKICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnNTdGF0ZSA9IHMxMDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGNvbm5TdWIpOwogICAgICAgIGNvbnN0IGRhdGFTdWIgPSBkYXRhU3RhdGVQYXJ0LnNlbGVjdCgoczEwKSA9PiBzMTApLnN1YnNjcmliZSgoczEwKSA9PiB7CiAgICAgICAgICB0aGlzLmRhdGFTdGF0ZSA9IHMxMDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGRhdGFTdWIpOwogICAgICAgIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlciA9ICgpID0+IHRoaXMuaGFuZGxlQXV0b1JlZnJlc2goKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIiwgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGhhbmRsZUF1dG9SZWZyZXNoKCkgewogICAgICAgIGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGZldGNoQ29ubmVjdGlvbnNBY3Rpb24sIG51bGwpOwogICAgICB9CiAgICAgIHJlbmRlcigpIHsKICAgICAgICBjb25zdCBjb25uQ291bnQgPSB0aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubGVuZ3RoOwogICAgICAgIGNvbnN0IHByb2pDb3VudCA9IHRoaXMuZGF0YVN0YXRlLnByb2plY3RzLmxlbmd0aDsKICAgICAgICBjb25zdCBncm91cENvdW50ID0gdGhpcy5kYXRhU3RhdGUuZ3JvdXBzLmxlbmd0aDsKICAgICAgICBjb25zdCBwaXBlbGluZUNvdW50ID0gdGhpcy5kYXRhU3RhdGUucGlwZWxpbmVzLmxlbmd0aDsKICAgICAgICBjb25zdCBmYWlsZWRQaXBlbGluZXMgPSB0aGlzLmRhdGFTdGF0ZS5waXBlbGluZXMuZmlsdGVyKChwNykgPT4gcDcuc3RhdHVzID09PSAiZmFpbGVkIikubGVuZ3RoOwogICAgICAgIGNvbnN0IHRpbGVzID0gWwogICAgICAgICAgeyBpZDogImNvbm5lY3Rpb25zIiwgdGl0bGU6ICJDb25uZWN0aW9ucyIsIHZhbHVlOiBjb25uQ291bnQsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnBsdWciLCBjb2xvcjogIiMwMGFjZmYiIH0sCiAgICAgICAgICB7IGlkOiAicHJvamVjdHMiLCB0aXRsZTogIlByb2plY3RzIiwgdmFsdWU6IHByb2pDb3VudCwgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6Zm9sZGVyR2l0MiIsIGNvbG9yOiAiIzAwYWNmZiIgfSwKICAgICAgICAgIHsgaWQ6ICJncm91cHMiLCB0aXRsZTogIkdyb3VwcyIsIHZhbHVlOiBncm91cENvdW50LCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTp1c2VycyIsIGNvbG9yOiAiIzAwYWNmZiIgfSwKICAgICAgICAgIHsgaWQ6ICJwaXBlbGluZXMiLCB0aXRsZTogIlBpcGVsaW5lcyIsIHZhbHVlOiBwaXBlbGluZUNvdW50LCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpwbGF5IiwgY29sb3I6ICIjMDBhY2ZmIiB9LAogICAgICAgICAgeyBpZDogImZhaWxlZCIsIHRpdGxlOiAiRmFpbGVkIFBpcGVsaW5lcyIsIHZhbHVlOiBmYWlsZWRQaXBlbGluZXMsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnRyaWFuZ2xlQWxlcnQiLCBjb2xvcjogZmFpbGVkUGlwZWxpbmVzID4gMCA/ICIjZmY0NDQ0IiA6ICIjMDBmZjg4IiB9CiAgICAgICAgXTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPk92ZXJ2aWV3PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZpZXctZGVzY3JpcHRpb24iPkdpdE9wcyBkYXNoYm9hcmQgLSBtYW5hZ2UgeW91ciBHaXRlYSBhbmQgR2l0TGFiIGluc3RhbmNlczwvZGl2PgogICAgICA8ZGVlcy1zdGF0c2dyaWQgLnRpbGVzPSR7dGlsZXN9PjwvZGVlcy1zdGF0c2dyaWQ+CiAgICBgOwogICAgICB9CiAgICB9OwogICAgX2luaXQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNCk7CiAgICBfY29ubmVjdGlvbnNTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7CiAgICBfZGF0YVN0YXRlID0gbmV3IFdlYWtNYXAoKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiY29ubmVjdGlvbnNTdGF0ZSIsIF9jb25uZWN0aW9uc1N0YXRlX2RlYywgR2l0b3BzVmlld092ZXJ2aWV3LCBfY29ubmVjdGlvbnNTdGF0ZSk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdCwgNCwgImRhdGFTdGF0ZSIsIF9kYXRhU3RhdGVfZGVjLCBHaXRvcHNWaWV3T3ZlcnZpZXcsIF9kYXRhU3RhdGUpOwogICAgR2l0b3BzVmlld092ZXJ2aWV3ID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDAsICJHaXRvcHNWaWV3T3ZlcnZpZXciLCBfR2l0b3BzVmlld092ZXJ2aWV3X2RlY29yYXRvcnMsIEdpdG9wc1ZpZXdPdmVydmlldyk7CiAgICBfX3B1YmxpY0ZpZWxkKEdpdG9wc1ZpZXdPdmVydmlldywgInN0eWxlcyIsIFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB2aWV3SG9zdENzcwogICAgXSk7CiAgICBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMSwgR2l0b3BzVmlld092ZXJ2aWV3KTsKICB9Cn0pOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3ZpZXdzL2Nvbm5lY3Rpb25zL2luZGV4LnRzCnZhciBjb25uZWN0aW9uc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGNvbm5lY3Rpb25zX2V4cG9ydHMsIHsKICBHaXRvcHNWaWV3Q29ubmVjdGlvbnM6ICgpID0+IEdpdG9wc1ZpZXdDb25uZWN0aW9ucwp9KTsKdmFyIF9jb25uZWN0aW9uc1N0YXRlX2RlYzIsIF9hNSwgX0dpdG9wc1ZpZXdDb25uZWN0aW9uc19kZWNvcmF0b3JzLCBfaW5pdDIsIF9jb25uZWN0aW9uc1N0YXRlMiwgR2l0b3BzVmlld0Nvbm5lY3Rpb25zOwp2YXIgaW5pdF9jb25uZWN0aW9uczIgPSBfX2VzbSh7CiAgYXN5bmMgInRzX3dlYi9lbGVtZW50cy92aWV3cy9jb25uZWN0aW9ucy9pbmRleC50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM1KCk7CiAgICBhd2FpdCBpbml0X2FwcHN0YXRlKCk7CiAgICBpbml0X3NoYXJlZCgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIF9HaXRvcHNWaWV3Q29ubmVjdGlvbnNfZGVjb3JhdG9ycyA9IFt0NCgiZ2l0b3BzLXZpZXctY29ubmVjdGlvbnMiKV07CiAgICBHaXRvcHNWaWV3Q29ubmVjdGlvbnMgPSBjbGFzcyBleHRlbmRzIChfYTUgPSBEZWVzRWxlbWVudCwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjMiA9IFtyNSgpXSwgX2E1KSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb25uZWN0aW9uc1N0YXRlMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCA4LCB0aGlzLCB7CiAgICAgICAgICBjb25uZWN0aW9uczogW10sCiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSWQ6IG51bGwKICAgICAgICB9KSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTEsIHRoaXMpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9hdXRvUmVmcmVzaEhhbmRsZXIiKTsKICAgICAgICBjb25zdCBzdWIyID0gY29ubmVjdGlvbnNTdGF0ZVBhcnQuc2VsZWN0KChzMTApID0+IHMxMCkuc3Vic2NyaWJlKChzMTApID0+IHsKICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnNTdGF0ZSA9IHMxMDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHN1YjIpOwogICAgICAgIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlciA9ICgpID0+IHRoaXMuaGFuZGxlQXV0b1JlZnJlc2goKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIiwgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGhhbmRsZUF1dG9SZWZyZXNoKCkgewogICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICB9CiAgICAgIHJlbmRlcigpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPkNvbm5lY3Rpb25zPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZpZXctZGVzY3JpcHRpb24iPk1hbmFnZSB5b3VyIEdpdGVhIGFuZCBHaXRMYWIgcHJvdmlkZXIgY29ubmVjdGlvbnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuYWRkQ29ubmVjdGlvbigpfT5BZGQgQ29ubmVjdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMucmVmcmVzaCgpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7IlByb3ZpZGVyIENvbm5lY3Rpb25zIn0KICAgICAgICAuaGVhZGluZzI9JHsiQ29uZmlndXJlIGNvbm5lY3Rpb25zIHRvIEdpdGVhIGFuZCBHaXRMYWIgaW5zdGFuY2VzIn0KICAgICAgICAuZGF0YT0ke3RoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9uc30KICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7KGl0ZW0pID0+ICh7CiAgICAgICAgICBOYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgICBUeXBlOiBpdGVtLnByb3ZpZGVyVHlwZSwKICAgICAgICAgIFVSTDogaXRlbS5iYXNlVXJsLAogICAgICAgICAgU3RhdHVzOiBpdGVtLnN0YXR1cywKICAgICAgICAgIENyZWF0ZWQ6IG5ldyBEYXRlKGl0ZW0uY3JlYXRlZEF0KS50b0xvY2FsZURhdGVTdHJpbmcoKQogICAgICAgIH0pfQogICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkVkaXQiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIGF3YWl0IHRoaXMuZWRpdENvbm5lY3Rpb24oaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJUZXN0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGx1ZyIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uc1N0YXRlUGFydC5kaXNwYXRjaEFjdGlvbigKICAgICAgICAgICAgICAgIHRlc3RDb25uZWN0aW9uQWN0aW9uLAogICAgICAgICAgICAgICAgeyBjb25uZWN0aW9uSWQ6IGl0ZW0uaWQgfQogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJQYXVzZS9SZXN1bWUiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwYXVzZUNpcmNsZSIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBjb25zdCBpc1BhdXNlZCA9IGl0ZW0uc3RhdHVzID09PSAicGF1c2VkIjsKICAgICAgICAgICAgICBjb25zdCBhY3Rpb25MYWJlbCA9IGlzUGF1c2VkID8gIlJlc3VtZSIgOiAiUGF1c2UiOwogICAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfd2ViX2V4cG9ydHMyLkRlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgICAgICAgIGhlYWRpbmc6IGAke2FjdGlvbkxhYmVsfSBDb25uZWN0aW9uYCwKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGIyYDxwIHN0eWxlPSJjb2xvcjogI2ZmZjsiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byAke2FjdGlvbkxhYmVsLnRvTG93ZXJDYXNlKCl9IGNvbm5lY3Rpb24gIiR7aXRlbS5uYW1lfSI/PC9wPmAsCiAgICAgICAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICAgICAgICB7IG5hbWU6ICJDYW5jZWwiLCBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgfSB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogYWN0aW9uTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUNvbm5lY3Rpb25BY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgY29ubmVjdGlvbklkOiBpdGVtLmlkLCBwYXVzZWQ6ICFpc1BhdXNlZCB9CiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiRGVsZXRlIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IGRpc3RfdHNfd2ViX2V4cG9ydHMyLkRlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgICAgICAgIGhlYWRpbmc6ICJEZWxldGUgQ29ubmVjdGlvbiIsCiAgICAgICAgICAgICAgICBjb250ZW50OiBiMmA8cCBzdHlsZT0iY29sb3I6ICNmZmY7Ij5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGNvbm5lY3Rpb24gIiR7aXRlbS5uYW1lfSI/PC9wPmAsCiAgICAgICAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICAgICAgICB7IG5hbWU6ICJDYW5jZWwiLCBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgfSB9LAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVDb25uZWN0aW9uQWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICB7IGNvbm5lY3Rpb25JZDogaXRlbS5pZCB9CiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGA7CiAgICAgIH0KICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICB9CiAgICAgIGFzeW5jIHJlZnJlc2goKSB7CiAgICAgICAgYXdhaXQgY29ubmVjdGlvbnNTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hDb25uZWN0aW9uc0FjdGlvbiwgbnVsbCk7CiAgICAgIH0KICAgICAgYXN5bmMgZWRpdENvbm5lY3Rpb24oaXRlbSkgewogICAgICAgIGF3YWl0IGRpc3RfdHNfd2ViX2V4cG9ydHMyLkRlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGhlYWRpbmc6ICJFZGl0IENvbm5lY3Rpb24iLAogICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLmZvcm0tcm93IHsgbWFyZ2luLWJvdHRvbTogMTZweDsgfQogICAgICAgICAgLmZvcm0taW5mbyB7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6ICM4ODg7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taW5mbyI+UHJvdmlkZXI6ICR7aXRlbS5wcm92aWRlclR5cGV9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiTmFtZSJ9IC5rZXk9JHsibmFtZSJ9IC52YWx1ZT0ke2l0ZW0ubmFtZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQmFzZSBVUkwifSAua2V5PSR7ImJhc2VVcmwifSAudmFsdWU9JHtpdGVtLmJhc2VVcmx9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFQSSBUb2tlbiAobGVhdmUgZW1wdHkgdG8ga2VlcCBjdXJyZW50KSJ9IC5rZXk9JHsidG9rZW4ifSB0eXBlPSJwYXNzd29yZCI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICB7IG5hbWU6ICJDYW5jZWwiLCBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgfSB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlNhdmUiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHMgPSBtb2RhbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgZGF0YTExID0ge307CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgICAgICAgICAgICBkYXRhMTFbaW5wdXQua2V5XSA9IGlucHV0LnZhbHVlIHx8ICIiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbnNTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oCiAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbm5lY3Rpb25BY3Rpb24sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6IGl0ZW0uaWQsCiAgICAgICAgICAgICAgICAgICAgbmFtZTogZGF0YTExLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgYmFzZVVybDogZGF0YTExLmJhc2VVcmwsCiAgICAgICAgICAgICAgICAgICAgLi4uZGF0YTExLnRva2VuID8geyB0b2tlbjogZGF0YTExLnRva2VuIH0gOiB7fQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGFzeW5jIGFkZENvbm5lY3Rpb24oKSB7CiAgICAgICAgYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0czIuRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogIkFkZCBDb25uZWN0aW9uIiwKICAgICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgIDxzdHlsZT4KICAgICAgICAgIC5mb3JtLXJvdyB7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7Ik5hbWUifSAua2V5PSR7Im5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiUHJvdmlkZXIgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvdmlkZXJUeXBlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgICAgIHsgb3B0aW9uOiAiZ2l0ZWEiLCBrZXk6ICJnaXRlYSIgfSwKICAgICAgICAgICAgeyBvcHRpb246ICJnaXRsYWIiLCBrZXk6ICJnaXRsYWIiIH0KICAgICAgICAgIF19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiZ2l0ZWEiLCBrZXk6ICJnaXRlYSIgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQmFzZSBVUkwifSAua2V5PSR7ImJhc2VVcmwifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJBUEkgVG9rZW4ifSAua2V5PSR7InRva2VuIn0gdHlwZT0icGFzc3dvcmQiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgeyBuYW1lOiAiQ2FuY2VsIiwgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgIH0gfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJBZGQiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHMgPSBtb2RhbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCwgZGVlcy1pbnB1dC1kcm9wZG93biIpOwogICAgICAgICAgICAgICAgY29uc3QgZGF0YTExID0ge307CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgICAgICAgICAgICBpZiAoaW5wdXQua2V5ID09PSAicHJvdmlkZXJUeXBlIikgewogICAgICAgICAgICAgICAgICAgIGRhdGExMVtpbnB1dC5rZXldID0gaW5wdXQuc2VsZWN0ZWRPcHRpb24/LmtleSB8fCAiZ2l0ZWEiOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRhdGExMVtpbnB1dC5rZXldID0gaW5wdXQudmFsdWUgfHwgIiI7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKAogICAgICAgICAgICAgICAgICBjcmVhdGVDb25uZWN0aW9uQWN0aW9uLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogZGF0YTExLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJUeXBlOiBkYXRhMTEucHJvdmlkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IGRhdGExMS5iYXNlVXJsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiBkYXRhMTEudG9rZW4KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIF9pbml0MiA9IF9fZGVjb3JhdG9yU3RhcnQoX2E1KTsKICAgIF9jb25uZWN0aW9uc1N0YXRlMiA9IG5ldyBXZWFrTWFwKCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJjb25uZWN0aW9uc1N0YXRlIiwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjMiwgR2l0b3BzVmlld0Nvbm5lY3Rpb25zLCBfY29ubmVjdGlvbnNTdGF0ZTIpOwogICAgR2l0b3BzVmlld0Nvbm5lY3Rpb25zID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCAwLCAiR2l0b3BzVmlld0Nvbm5lY3Rpb25zIiwgX0dpdG9wc1ZpZXdDb25uZWN0aW9uc19kZWNvcmF0b3JzLCBHaXRvcHNWaWV3Q29ubmVjdGlvbnMpOwogICAgX19wdWJsaWNGaWVsZChHaXRvcHNWaWV3Q29ubmVjdGlvbnMsICJzdHlsZXMiLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgdmlld0hvc3RDc3MKICAgIF0pOwogICAgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxLCBHaXRvcHNWaWV3Q29ubmVjdGlvbnMpOwogIH0KfSk7CgovLyB0c193ZWIvZWxlbWVudHMvdmlld3MvcHJvamVjdHMvaW5kZXgudHMKdmFyIHByb2plY3RzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQocHJvamVjdHNfZXhwb3J0cywgewogIEdpdG9wc1ZpZXdQcm9qZWN0czogKCkgPT4gR2l0b3BzVmlld1Byb2plY3RzCn0pOwp2YXIgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYywgX2RhdGFTdGF0ZV9kZWMyLCBfY29ubmVjdGlvbnNTdGF0ZV9kZWMzLCBfYTYsIF9HaXRvcHNWaWV3UHJvamVjdHNfZGVjb3JhdG9ycywgX2luaXQzLCBfY29ubmVjdGlvbnNTdGF0ZTMsIF9kYXRhU3RhdGUyLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWQsIEdpdG9wc1ZpZXdQcm9qZWN0czsKdmFyIGluaXRfcHJvamVjdHMyID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3MvcHJvamVjdHMvaW5kZXgudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNSgpOwogICAgYXdhaXQgaW5pdF9hcHBzdGF0ZSgpOwogICAgaW5pdF9zaGFyZWQoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBfR2l0b3BzVmlld1Byb2plY3RzX2RlY29yYXRvcnMgPSBbdDQoImdpdG9wcy12aWV3LXByb2plY3RzIildOwogICAgR2l0b3BzVmlld1Byb2plY3RzID0gY2xhc3MgZXh0ZW5kcyAoX2E2ID0gRGVlc0VsZW1lbnQsIF9jb25uZWN0aW9uc1N0YXRlX2RlYzMgPSBbcjUoKV0sIF9kYXRhU3RhdGVfZGVjMiA9IFtyNSgpXSwgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYyA9IFtyNSgpXSwgX2E2KSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb25uZWN0aW9uc1N0YXRlMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCA4LCB0aGlzLCB7CiAgICAgICAgICBjb25uZWN0aW9uczogW10sCiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSWQ6IG51bGwKICAgICAgICB9KSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTEsIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YVN0YXRlMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxMiwgdGhpcywgewogICAgICAgICAgcHJvamVjdHM6IFtdLAogICAgICAgICAgZ3JvdXBzOiBbXSwKICAgICAgICAgIHNlY3JldHM6IFtdLAogICAgICAgICAgcGlwZWxpbmVzOiBbXSwKICAgICAgICAgIHBpcGVsaW5lSm9iczogW10sCiAgICAgICAgICBjdXJyZW50Sm9iTG9nOiAiIgogICAgICAgIH0pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxNSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZENvbm5lY3Rpb25JZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxOSwgdGhpcyk7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2F1dG9SZWZyZXNoSGFuZGxlciIpOwogICAgICAgIGNvbnN0IGNvbm5TdWIgPSBjb25uZWN0aW9uc1N0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5jb25uZWN0aW9uc1N0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goY29ublN1Yik7CiAgICAgICAgY29uc3QgZGF0YVN1YiA9IGRhdGFTdGF0ZVBhcnQuc2VsZWN0KChzMTApID0+IHMxMCkuc3Vic2NyaWJlKChzMTApID0+IHsKICAgICAgICAgIHRoaXMuZGF0YVN0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goZGF0YVN1Yik7CiAgICAgICAgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyID0gKCkgPT4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgaGFuZGxlQXV0b1JlZnJlc2goKSB7CiAgICAgICAgdGhpcy5sb2FkUHJvamVjdHMoKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubWFwKChjMTEpID0+ICh7CiAgICAgICAgICBvcHRpb246IGAke2MxMS5uYW1lfSAoJHtjMTEucHJvdmlkZXJUeXBlfSlgLAogICAgICAgICAga2V5OiBjMTEuaWQKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5Qcm9qZWN0czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5Ccm93c2UgcHJvamVjdHMgZnJvbSB5b3VyIGNvbm5lY3RlZCBwcm92aWRlcnM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJDb25uZWN0aW9uIn0KICAgICAgICAgIC5vcHRpb25zPSR7Y29ubmVjdGlvbk9wdGlvbnN9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHtjb25uZWN0aW9uT3B0aW9ucy5maW5kKChvMTMpID0+IG8xMy5rZXkgPT09IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQpIHx8IGNvbm5lY3Rpb25PcHRpb25zWzBdfQogICAgICAgICAgQHNlbGVjdGVkT3B0aW9uPSR7KGUxMSkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCA9IGUxMS5kZXRhaWwua2V5OwogICAgICAgICAgdGhpcy5sb2FkUHJvamVjdHMoKTsKICAgICAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMubG9hZFByb2plY3RzKCl9PlJlZnJlc2g8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRlZXMtdGFibGUKICAgICAgICAuaGVhZGluZzE9JHsiUHJvamVjdHMifQogICAgICAgIC5oZWFkaW5nMj0keyJSZXBvc2l0b3JpZXMgZnJvbSB0aGUgc2VsZWN0ZWQgY29ubmVjdGlvbiJ9CiAgICAgICAgLmRhdGE9JHt0aGlzLmRhdGFTdGF0ZS5wcm9qZWN0c30KICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7KGl0ZW0pID0+ICh7CiAgICAgICAgICBOYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgICBQYXRoOiBpdGVtLmZ1bGxQYXRoLAogICAgICAgICAgVmlzaWJpbGl0eTogaXRlbS52aXNpYmlsaXR5LAogICAgICAgICAgQnJhbmNoOiBpdGVtLmRlZmF1bHRCcmFuY2gsCiAgICAgICAgICAiTGFzdCBBY3Rpdml0eSI6IGl0ZW0ubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUoaXRlbS5sYXN0QWN0aXZpdHkpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogIi0iCiAgICAgICAgfSl9CiAgICAgICAgLmRhdGFBY3Rpb25zPSR7WwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiVmlldyBTZWNyZXRzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIHVpU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKHNldEFjdGl2ZVZpZXdBY3Rpb24sIHsgdmlldzogInNlY3JldHMiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiVmlldyBQaXBlbGluZXMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwbGF5IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIHVpU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKHNldEFjdGl2ZVZpZXdBY3Rpb24sIHsgdmlldzogInBpcGVsaW5lcyIgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdfQogICAgICA+PC9kZWVzLXRhYmxlPgogICAgYDsKICAgICAgfQogICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgYXdhaXQgY29ubmVjdGlvbnNTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hDb25uZWN0aW9uc0FjdGlvbiwgbnVsbCk7CiAgICAgICAgY29uc3QgY29ubnMgPSBjb25uZWN0aW9uc1N0YXRlUGFydC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25zOwogICAgICAgIGlmIChjb25ucy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkID0gY29ubnNbMF0uaWQ7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRQcm9qZWN0cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBsb2FkUHJvamVjdHMoKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSByZXR1cm47CiAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaFByb2plY3RzQWN0aW9uLCB7CiAgICAgICAgICBjb25uZWN0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIF9pbml0MyA9IF9fZGVjb3JhdG9yU3RhcnQoX2E2KTsKICAgIF9jb25uZWN0aW9uc1N0YXRlMyA9IG5ldyBXZWFrTWFwKCk7CiAgICBfZGF0YVN0YXRlMiA9IG5ldyBXZWFrTWFwKCk7CiAgICBfc2VsZWN0ZWRDb25uZWN0aW9uSWQgPSBuZXcgV2Vha01hcCgpOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY29ubmVjdGlvbnNTdGF0ZSIsIF9jb25uZWN0aW9uc1N0YXRlX2RlYzMsIEdpdG9wc1ZpZXdQcm9qZWN0cywgX2Nvbm5lY3Rpb25zU3RhdGUzKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImRhdGFTdGF0ZSIsIF9kYXRhU3RhdGVfZGVjMiwgR2l0b3BzVmlld1Byb2plY3RzLCBfZGF0YVN0YXRlMik7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJzZWxlY3RlZENvbm5lY3Rpb25JZCIsIF9zZWxlY3RlZENvbm5lY3Rpb25JZF9kZWMsIEdpdG9wc1ZpZXdQcm9qZWN0cywgX3NlbGVjdGVkQ29ubmVjdGlvbklkKTsKICAgIEdpdG9wc1ZpZXdQcm9qZWN0cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgMCwgIkdpdG9wc1ZpZXdQcm9qZWN0cyIsIF9HaXRvcHNWaWV3UHJvamVjdHNfZGVjb3JhdG9ycywgR2l0b3BzVmlld1Byb2plY3RzKTsKICAgIF9fcHVibGljRmllbGQoR2l0b3BzVmlld1Byb2plY3RzLCAic3R5bGVzIiwgWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIHZpZXdIb3N0Q3NzCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMSwgR2l0b3BzVmlld1Byb2plY3RzKTsKICB9Cn0pOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3ZpZXdzL2dyb3Vwcy9pbmRleC50cwp2YXIgZ3JvdXBzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZ3JvdXBzX2V4cG9ydHMsIHsKICBHaXRvcHNWaWV3R3JvdXBzOiAoKSA9PiBHaXRvcHNWaWV3R3JvdXBzCn0pOwp2YXIgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzIsIF9kYXRhU3RhdGVfZGVjMywgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjNCwgX2E3LCBfR2l0b3BzVmlld0dyb3Vwc19kZWNvcmF0b3JzLCBfaW5pdDQsIF9jb25uZWN0aW9uc1N0YXRlNCwgX2RhdGFTdGF0ZTMsIF9zZWxlY3RlZENvbm5lY3Rpb25JZDIsIEdpdG9wc1ZpZXdHcm91cHM7CnZhciBpbml0X2dyb3VwczIgPSBfX2VzbSh7CiAgYXN5bmMgInRzX3dlYi9lbGVtZW50cy92aWV3cy9ncm91cHMvaW5kZXgudHMiKCkgewogICAgaW5pdF9wbHVnaW5zNSgpOwogICAgYXdhaXQgaW5pdF9hcHBzdGF0ZSgpOwogICAgaW5pdF9zaGFyZWQoKTsKICAgIGluaXRfZGlzdF90czI5KCk7CiAgICBfR2l0b3BzVmlld0dyb3Vwc19kZWNvcmF0b3JzID0gW3Q0KCJnaXRvcHMtdmlldy1ncm91cHMiKV07CiAgICBHaXRvcHNWaWV3R3JvdXBzID0gY2xhc3MgZXh0ZW5kcyAoX2E3ID0gRGVlc0VsZW1lbnQsIF9jb25uZWN0aW9uc1N0YXRlX2RlYzQgPSBbcjUoKV0sIF9kYXRhU3RhdGVfZGVjMyA9IFtyNSgpXSwgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzIgPSBbcjUoKV0sIF9hNykgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29ubmVjdGlvbnNTdGF0ZTQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgOCwgdGhpcywgewogICAgICAgICAgY29ubmVjdGlvbnM6IFtdLAogICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbklkOiBudWxsCiAgICAgICAgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDExLCB0aGlzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFTdGF0ZTMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTIsIHRoaXMsIHsKICAgICAgICAgIHByb2plY3RzOiBbXSwKICAgICAgICAgIGdyb3VwczogW10sCiAgICAgICAgICBzZWNyZXRzOiBbXSwKICAgICAgICAgIHBpcGVsaW5lczogW10sCiAgICAgICAgICBwaXBlbGluZUpvYnM6IFtdLAogICAgICAgICAgY3VycmVudEpvYkxvZzogIiIKICAgICAgICB9KSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTUsIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE5LCB0aGlzKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYXV0b1JlZnJlc2hIYW5kbGVyIik7CiAgICAgICAgY29uc3QgY29ublN1YiA9IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LnNlbGVjdCgoczEwKSA9PiBzMTApLnN1YnNjcmliZSgoczEwKSA9PiB7CiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zU3RhdGUgPSBzMTA7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChjb25uU3ViKTsKICAgICAgICBjb25zdCBkYXRhU3ViID0gZGF0YVN0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5kYXRhU3RhdGUgPSBzMTA7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChkYXRhU3ViKTsKICAgICAgICB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIgPSAoKSA9PiB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoKCk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIiwgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKTsKICAgICAgfQogICAgICBoYW5kbGVBdXRvUmVmcmVzaCgpIHsKICAgICAgICB0aGlzLmxvYWRHcm91cHMoKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zU3RhdGUuY29ubmVjdGlvbnMubWFwKChjMTEpID0+ICh7CiAgICAgICAgICBvcHRpb246IGAke2MxMS5uYW1lfSAoJHtjMTEucHJvdmlkZXJUeXBlfSlgLAogICAgICAgICAga2V5OiBjMTEuaWQKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5Hcm91cHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idmlldy1kZXNjcmlwdGlvbiI+QnJvd3NlIG9yZ2FuaXphdGlvbnMgYW5kIGdyb3VwcyBmcm9tIHlvdXIgY29ubmVjdGVkIHByb3ZpZGVyczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IkNvbm5lY3Rpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtjb25uZWN0aW9uT3B0aW9uc30KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke2Nvbm5lY3Rpb25PcHRpb25zLmZpbmQoKG8xMykgPT4gbzEzLmtleSA9PT0gdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCkgfHwgY29ubmVjdGlvbk9wdGlvbnNbMF19CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHsoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkID0gZTExLmRldGFpbC5rZXk7CiAgICAgICAgICB0aGlzLmxvYWRHcm91cHMoKTsKICAgICAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMubG9hZEdyb3VwcygpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7Ikdyb3VwcyAvIE9yZ2FuaXphdGlvbnMifQogICAgICAgIC5oZWFkaW5nMj0keyJHcm91cHMgZnJvbSB0aGUgc2VsZWN0ZWQgY29ubmVjdGlvbiJ9CiAgICAgICAgLmRhdGE9JHt0aGlzLmRhdGFTdGF0ZS5ncm91cHN9CiAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogICAgICAgICAgTmFtZTogaXRlbS5uYW1lLAogICAgICAgICAgUGF0aDogaXRlbS5mdWxsUGF0aCwKICAgICAgICAgIFZpc2liaWxpdHk6IGl0ZW0udmlzaWJpbGl0eSwKICAgICAgICAgIFByb2plY3RzOiBTdHJpbmcoaXRlbS5wcm9qZWN0Q291bnQpCiAgICAgICAgfSl9CiAgICAgICAgLmRhdGFBY3Rpb25zPSR7WwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiVmlldyBTZWNyZXRzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIHVpU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKHNldEFjdGl2ZVZpZXdBY3Rpb24sIHsgdmlldzogInNlY3JldHMiIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGA7CiAgICAgIH0KICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgIGF3YWl0IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGZldGNoQ29ubmVjdGlvbnNBY3Rpb24sIG51bGwpOwogICAgICAgIGNvbnN0IGNvbm5zID0gY29ubmVjdGlvbnNTdGF0ZVBhcnQuZ2V0U3RhdGUoKS5jb25uZWN0aW9uczsKICAgICAgICBpZiAoY29ubnMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCA9IGNvbm5zWzBdLmlkOwogICAgICAgICAgYXdhaXQgdGhpcy5sb2FkR3JvdXBzKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGxvYWRHcm91cHMoKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSByZXR1cm47CiAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaEdyb3Vwc0FjdGlvbiwgewogICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBfaW5pdDQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNyk7CiAgICBfY29ubmVjdGlvbnNTdGF0ZTQgPSBuZXcgV2Vha01hcCgpOwogICAgX2RhdGFTdGF0ZTMgPSBuZXcgV2Vha01hcCgpOwogICAgX3NlbGVjdGVkQ29ubmVjdGlvbklkMiA9IG5ldyBXZWFrTWFwKCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJjb25uZWN0aW9uc1N0YXRlIiwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjNCwgR2l0b3BzVmlld0dyb3VwcywgX2Nvbm5lY3Rpb25zU3RhdGU0KTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImRhdGFTdGF0ZSIsIF9kYXRhU3RhdGVfZGVjMywgR2l0b3BzVmlld0dyb3VwcywgX2RhdGFTdGF0ZTMpOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAic2VsZWN0ZWRDb25uZWN0aW9uSWQiLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWRfZGVjMiwgR2l0b3BzVmlld0dyb3VwcywgX3NlbGVjdGVkQ29ubmVjdGlvbklkMik7CiAgICBHaXRvcHNWaWV3R3JvdXBzID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCAwLCAiR2l0b3BzVmlld0dyb3VwcyIsIF9HaXRvcHNWaWV3R3JvdXBzX2RlY29yYXRvcnMsIEdpdG9wc1ZpZXdHcm91cHMpOwogICAgX19wdWJsaWNGaWVsZChHaXRvcHNWaWV3R3JvdXBzLCAic3R5bGVzIiwgWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIHZpZXdIb3N0Q3NzCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMSwgR2l0b3BzVmlld0dyb3Vwcyk7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy92aWV3cy9zZWNyZXRzL2luZGV4LnRzCnZhciBzZWNyZXRzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc2VjcmV0c19leHBvcnRzLCB7CiAgR2l0b3BzVmlld1NlY3JldHM6ICgpID0+IEdpdG9wc1ZpZXdTZWNyZXRzCn0pOwp2YXIgX3NlbGVjdGVkU2NvcGVJZF9kZWMsIF9zZWxlY3RlZFNjb3BlX2RlYywgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzMsIF9kYXRhU3RhdGVfZGVjNCwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjNSwgX2E4LCBfR2l0b3BzVmlld1NlY3JldHNfZGVjb3JhdG9ycywgX2luaXQ1LCBfY29ubmVjdGlvbnNTdGF0ZTUsIF9kYXRhU3RhdGU0LCBfc2VsZWN0ZWRDb25uZWN0aW9uSWQzLCBfc2VsZWN0ZWRTY29wZSwgX3NlbGVjdGVkU2NvcGVJZCwgR2l0b3BzVmlld1NlY3JldHM7CnZhciBpbml0X3NlY3JldHMyID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3Mvc2VjcmV0cy9pbmRleC50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM1KCk7CiAgICBhd2FpdCBpbml0X2FwcHN0YXRlKCk7CiAgICBpbml0X3NoYXJlZCgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIF9HaXRvcHNWaWV3U2VjcmV0c19kZWNvcmF0b3JzID0gW3Q0KCJnaXRvcHMtdmlldy1zZWNyZXRzIildOwogICAgR2l0b3BzVmlld1NlY3JldHMgPSBjbGFzcyBleHRlbmRzIChfYTggPSBEZWVzRWxlbWVudCwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjNSA9IFtyNSgpXSwgX2RhdGFTdGF0ZV9kZWM0ID0gW3I1KCldLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWRfZGVjMyA9IFtyNSgpXSwgX3NlbGVjdGVkU2NvcGVfZGVjID0gW3I1KCldLCBfc2VsZWN0ZWRTY29wZUlkX2RlYyA9IFtyNSgpXSwgX2E4KSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb25uZWN0aW9uc1N0YXRlNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA4LCB0aGlzLCB7CiAgICAgICAgICBjb25uZWN0aW9uczogW10sCiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSWQ6IG51bGwKICAgICAgICB9KSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTEsIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YVN0YXRlNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxMiwgdGhpcywgewogICAgICAgICAgcHJvamVjdHM6IFtdLAogICAgICAgICAgZ3JvdXBzOiBbXSwKICAgICAgICAgIHNlY3JldHM6IFtdLAogICAgICAgICAgcGlwZWxpbmVzOiBbXSwKICAgICAgICAgIHBpcGVsaW5lSm9iczogW10sCiAgICAgICAgICBjdXJyZW50Sm9iTG9nOiAiIgogICAgICAgIH0pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxNSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZENvbm5lY3Rpb25JZDMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTksIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRTY29wZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMCwgdGhpcywgImFsbCIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMywgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZFNjb3BlSWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjQsIHRoaXMsICJfX2FsbF9fIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI3LCB0aGlzKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYXV0b1JlZnJlc2hIYW5kbGVyIik7CiAgICAgICAgY29uc3QgY29ublN1YiA9IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LnNlbGVjdCgoczEwKSA9PiBzMTApLnN1YnNjcmliZSgoczEwKSA9PiB7CiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zU3RhdGUgPSBzMTA7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChjb25uU3ViKTsKICAgICAgICBjb25zdCBkYXRhU3ViID0gZGF0YVN0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5kYXRhU3RhdGUgPSBzMTA7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaChkYXRhU3ViKTsKICAgICAgICB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIgPSAoKSA9PiB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoKCk7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJnaXRvcHMtYXV0by1yZWZyZXNoIiwgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyKTsKICAgICAgfQogICAgICBoYW5kbGVBdXRvUmVmcmVzaCgpIHsKICAgICAgICB0aGlzLmxvYWRTZWNyZXRzKCk7CiAgICAgIH0KICAgICAgZ2V0IGZpbHRlcmVkU2VjcmV0cygpIHsKICAgICAgICBsZXQgc2VjcmV0cyA9IHRoaXMuZGF0YVN0YXRlLnNlY3JldHM7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTY29wZSAhPT0gImFsbCIpIHsKICAgICAgICAgIHNlY3JldHMgPSBzZWNyZXRzLmZpbHRlcigoczEwKSA9PiBzMTAuc2NvcGUgPT09IHRoaXMuc2VsZWN0ZWRTY29wZSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2NvcGVJZCAhPT0gIl9fYWxsX18iKSB7CiAgICAgICAgICBzZWNyZXRzID0gc2VjcmV0cy5maWx0ZXIoKHMxMCkgPT4gczEwLnNjb3BlSWQgPT09IHRoaXMuc2VsZWN0ZWRTY29wZUlkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlY3JldHM7CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gdGhpcy5jb25uZWN0aW9uc1N0YXRlLmNvbm5lY3Rpb25zLm1hcCgoYzExKSA9PiAoewogICAgICAgICAgb3B0aW9uOiBgJHtjMTEubmFtZX0gKCR7YzExLnByb3ZpZGVyVHlwZX0pYCwKICAgICAgICAgIGtleTogYzExLmlkCiAgICAgICAgfSkpOwogICAgICAgIGNvbnN0IHNjb3BlT3B0aW9ucyA9IFsKICAgICAgICAgIHsgb3B0aW9uOiAiQWxsIFNjb3BlcyIsIGtleTogImFsbCIgfSwKICAgICAgICAgIHsgb3B0aW9uOiAiUHJvamVjdCIsIGtleTogInByb2plY3QiIH0sCiAgICAgICAgICB7IG9wdGlvbjogIkdyb3VwIiwga2V5OiAiZ3JvdXAiIH0KICAgICAgICBdOwogICAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zZWxlY3RlZFNjb3BlID09PSAiZ3JvdXAiID8gdGhpcy5kYXRhU3RhdGUuZ3JvdXBzLm1hcCgoZzQpID0+ICh7IG9wdGlvbjogZzQuZnVsbFBhdGggfHwgZzQubmFtZSwga2V5OiBnNC5pZCB9KSkgOiB0aGlzLnNlbGVjdGVkU2NvcGUgPT09ICJwcm9qZWN0IiA/IHRoaXMuZGF0YVN0YXRlLnByb2plY3RzLm1hcCgocDcpID0+ICh7IG9wdGlvbjogcDcuZnVsbFBhdGggfHwgcDcubmFtZSwga2V5OiBwNy5pZCB9KSkgOiBbXTsKICAgICAgICBjb25zdCBlbnRpdHlPcHRpb25zID0gWwogICAgICAgICAgeyBvcHRpb246ICJBbGwiLCBrZXk6ICJfX2FsbF9fIiB9LAogICAgICAgICAgLi4uZW50aXRpZXMKICAgICAgICBdOwogICAgICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkU2NvcGUgPT09ICJhbGwiIHx8IHRoaXMuc2VsZWN0ZWRTY29wZUlkID09PSAiX19hbGxfXyI7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5TZWNyZXRzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZpZXctZGVzY3JpcHRpb24iPk1hbmFnZSBDSS9DRCBzZWNyZXRzIGFuZCB2YXJpYWJsZXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJDb25uZWN0aW9uIn0KICAgICAgICAgIC5vcHRpb25zPSR7Y29ubmVjdGlvbk9wdGlvbnN9CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHtjb25uZWN0aW9uT3B0aW9ucy5maW5kKChvMTMpID0+IG8xMy5rZXkgPT09IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQpIHx8IGNvbm5lY3Rpb25PcHRpb25zWzBdfQogICAgICAgICAgQHNlbGVjdGVkT3B0aW9uPSR7KGUxMSkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCA9IGUxMS5kZXRhaWwua2V5OwogICAgICAgICAgdGhpcy5zZWxlY3RlZFNjb3BlSWQgPSAiX19hbGxfXyI7CiAgICAgICAgICB0aGlzLmxvYWRFbnRpdGllcygpOwogICAgICAgICAgdGhpcy5sb2FkU2VjcmV0cygpOwogICAgICAgIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlNjb3BlIn0KICAgICAgICAgIC5vcHRpb25zPSR7c2NvcGVPcHRpb25zfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7c2NvcGVPcHRpb25zLmZpbmQoKG8xMykgPT4gbzEzLmtleSA9PT0gdGhpcy5zZWxlY3RlZFNjb3BlKX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY29wZSA9IGUxMS5kZXRhaWwua2V5OwogICAgICAgICAgdGhpcy5zZWxlY3RlZFNjb3BlSWQgPSAiX19hbGxfXyI7CiAgICAgICAgICB0aGlzLmxvYWRFbnRpdGllcygpOwogICAgICAgICAgdGhpcy5sb2FkU2VjcmV0cygpOwogICAgICAgIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAke3RoaXMuc2VsZWN0ZWRTY29wZSAhPT0gImFsbCIgPyBiMmAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0ke3RoaXMuc2VsZWN0ZWRTY29wZSA9PT0gInByb2plY3QiID8gIlByb2plY3QiIDogIkdyb3VwIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtlbnRpdHlPcHRpb25zfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHtlbnRpdHlPcHRpb25zLmZpbmQoKG8xMykgPT4gbzEzLmtleSA9PT0gdGhpcy5zZWxlY3RlZFNjb3BlSWQpIHx8IGVudGl0eU9wdGlvbnNbMF19CiAgICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY29wZUlkID0gZTExLmRldGFpbC5rZXk7CiAgICAgICAgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgLmRpc2FibGVkPSR7aXNBbGxTZWxlY3RlZH0KICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWRkU2VjcmV0KCl9CiAgICAgICAgPkFkZCBTZWNyZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLmxvYWRTZWNyZXRzKCl9PlJlZnJlc2g8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRlZXMtdGFibGUKICAgICAgICAuaGVhZGluZzE9JHsiU2VjcmV0cyJ9CiAgICAgICAgLmhlYWRpbmcyPSR7IkNJL0NEIHZhcmlhYmxlcyBmb3IgdGhlIHNlbGVjdGVkIGVudGl0eSJ9CiAgICAgICAgLmRhdGE9JHt0aGlzLmZpbHRlcmVkU2VjcmV0c30KICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7KGl0ZW0pID0+ICh7CiAgICAgICAgICBLZXk6IGl0ZW0ua2V5LAogICAgICAgICAgU2NvcGU6IGl0ZW0uc2NvcGVOYW1lIHx8IGl0ZW0uc2NvcGVJZCwKICAgICAgICAgIFZhbHVlOiBpdGVtLm1hc2tlZCA/ICIqKioqKioiIDogaXRlbS52YWx1ZSwKICAgICAgICAgIFByb3RlY3RlZDogaXRlbS5wcm90ZWN0ZWQgPyAiWWVzIiA6ICJObyIsCiAgICAgICAgICBFbnZpcm9ubWVudDogaXRlbS5lbnZpcm9ubWVudCB8fCAiKiIKICAgICAgICB9KX0KICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZWRpdCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVkaXRTZWNyZXQoaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0czIuRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgICAgICAgaGVhZGluZzogIkRlbGV0ZSBTZWNyZXQiLAogICAgICAgICAgICAgICAgY29udGVudDogYjJgPHAgc3R5bGU9ImNvbG9yOiAjZmZmOyI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBzZWNyZXQgIiR7aXRlbS5rZXl9Ij88L3A+YCwKICAgICAgICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgICAgICAgIHsgbmFtZTogIkNhbmNlbCIsIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgICB9IH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAiRGVsZXRlIiwKICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihkZWxldGVTZWNyZXRBY3Rpb24sIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLAogICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaXRlbS5zY29wZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVJZDogaXRlbS5zY29wZUlkLAogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF19CiAgICAgID48L2RlZXMtdGFibGU+CiAgICBgOwogICAgICB9CiAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICBhd2FpdCBjb25uZWN0aW9uc1N0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaENvbm5lY3Rpb25zQWN0aW9uLCBudWxsKTsKICAgICAgICBjb25zdCBjb25ucyA9IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmdldFN0YXRlKCkuY29ubmVjdGlvbnM7CiAgICAgICAgaWYgKGNvbm5zLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQgPSBjb25uc1swXS5pZDsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEVudGl0aWVzKCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRTZWNyZXRzKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGxvYWRFbnRpdGllcygpIHsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNjb3BlID09PSAiYWxsIikgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2NvcGUgPT09ICJwcm9qZWN0IikgewogICAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaFByb2plY3RzQWN0aW9uLCB7CiAgICAgICAgICAgIGNvbm5lY3Rpb25JZDogdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IGRhdGFTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hHcm91cHNBY3Rpb24sIHsKICAgICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgbG9hZFNlY3JldHMoKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSByZXR1cm47CiAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaEFsbFNlY3JldHNBY3Rpb24sIHsKICAgICAgICAgIGNvbm5lY3Rpb25JZDogdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGFzeW5jIGFkZFNlY3JldCgpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNjb3BlID09PSAiYWxsIiB8fCB0aGlzLnNlbGVjdGVkU2NvcGVJZCA9PT0gIl9fYWxsX18iKSByZXR1cm47CiAgICAgICAgYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0czIuRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogIkFkZCBTZWNyZXQiLAogICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPi5mb3JtLXJvdyB7IG1hcmdpbi1ib3R0b206IDE2cHg7IH08L3N0eWxlPgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IktleSJ9IC5rZXk9JHsia2V5In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1yb3ciPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiVmFsdWUifSAua2V5PSR7InZhbHVlIn0gdHlwZT0icGFzc3dvcmQiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgeyBuYW1lOiAiQ2FuY2VsIiwgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgIH0gfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDcmVhdGUiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHMgPSBtb2RhbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgZGF0YTExID0ge307CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgICAgICAgICAgICBkYXRhMTFbaW5wdXQua2V5XSA9IGlucHV0LnZhbHVlIHx8ICIiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihjcmVhdGVTZWNyZXRBY3Rpb24sIHsKICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLAogICAgICAgICAgICAgICAgICBzY29wZTogdGhpcy5zZWxlY3RlZFNjb3BlLAogICAgICAgICAgICAgICAgICBzY29wZUlkOiB0aGlzLnNlbGVjdGVkU2NvcGVJZCwKICAgICAgICAgICAgICAgICAga2V5OiBkYXRhMTEua2V5LAogICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YTExLnZhbHVlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIF0KICAgICAgICB9KTsKICAgICAgfQogICAgICBhc3luYyBlZGl0U2VjcmV0KGl0ZW0pIHsKICAgICAgICBhd2FpdCBkaXN0X3RzX3dlYl9leHBvcnRzMi5EZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgICBoZWFkaW5nOiBgRWRpdCBTZWNyZXQ6ICR7aXRlbS5rZXl9YCwKICAgICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgIDxzdHlsZT4uZm9ybS1yb3cgeyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9PC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXJvdyI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJWYWx1ZSJ9IC5rZXk9JHsidmFsdWUifSB0eXBlPSJwYXNzd29yZCI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgICBtZW51T3B0aW9uczogWwogICAgICAgICAgICB7IG5hbWU6ICJDYW5jZWwiLCBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgfSB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIlVwZGF0ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbW9kYWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICAgICAgICAgICAgICAgIGF3YWl0IGRhdGFTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24odXBkYXRlU2VjcmV0QWN0aW9uLCB7CiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25JZDogdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCwKICAgICAgICAgICAgICAgICAgc2NvcGU6IGl0ZW0uc2NvcGUsCiAgICAgICAgICAgICAgICAgIHNjb3BlSWQ6IGl0ZW0uc2NvcGVJZCwKICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLmtleSwKICAgICAgICAgICAgICAgICAgdmFsdWU6IGlucHV0Py52YWx1ZSB8fCAiIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBfaW5pdDUgPSBfX2RlY29yYXRvclN0YXJ0KF9hOCk7CiAgICBfY29ubmVjdGlvbnNTdGF0ZTUgPSBuZXcgV2Vha01hcCgpOwogICAgX2RhdGFTdGF0ZTQgPSBuZXcgV2Vha01hcCgpOwogICAgX3NlbGVjdGVkQ29ubmVjdGlvbklkMyA9IG5ldyBXZWFrTWFwKCk7CiAgICBfc2VsZWN0ZWRTY29wZSA9IG5ldyBXZWFrTWFwKCk7CiAgICBfc2VsZWN0ZWRTY29wZUlkID0gbmV3IFdlYWtNYXAoKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImNvbm5lY3Rpb25zU3RhdGUiLCBfY29ubmVjdGlvbnNTdGF0ZV9kZWM1LCBHaXRvcHNWaWV3U2VjcmV0cywgX2Nvbm5lY3Rpb25zU3RhdGU1KTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImRhdGFTdGF0ZSIsIF9kYXRhU3RhdGVfZGVjNCwgR2l0b3BzVmlld1NlY3JldHMsIF9kYXRhU3RhdGU0KTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgInNlbGVjdGVkQ29ubmVjdGlvbklkIiwgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzMsIEdpdG9wc1ZpZXdTZWNyZXRzLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWQzKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgInNlbGVjdGVkU2NvcGUiLCBfc2VsZWN0ZWRTY29wZV9kZWMsIEdpdG9wc1ZpZXdTZWNyZXRzLCBfc2VsZWN0ZWRTY29wZSk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJzZWxlY3RlZFNjb3BlSWQiLCBfc2VsZWN0ZWRTY29wZUlkX2RlYywgR2l0b3BzVmlld1NlY3JldHMsIF9zZWxlY3RlZFNjb3BlSWQpOwogICAgR2l0b3BzVmlld1NlY3JldHMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDAsICJHaXRvcHNWaWV3U2VjcmV0cyIsIF9HaXRvcHNWaWV3U2VjcmV0c19kZWNvcmF0b3JzLCBHaXRvcHNWaWV3U2VjcmV0cyk7CiAgICBfX3B1YmxpY0ZpZWxkKEdpdG9wc1ZpZXdTZWNyZXRzLCAic3R5bGVzIiwgWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIHZpZXdIb3N0Q3NzCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMSwgR2l0b3BzVmlld1NlY3JldHMpOwogIH0KfSk7CgovLyB0c193ZWIvZWxlbWVudHMvdmlld3MvcGlwZWxpbmVzL2luZGV4LnRzCnZhciBwaXBlbGluZXNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChwaXBlbGluZXNfZXhwb3J0cywgewogIEdpdG9wc1ZpZXdQaXBlbGluZXM6ICgpID0+IEdpdG9wc1ZpZXdQaXBlbGluZXMKfSk7CnZhciBfc2VsZWN0ZWRQcm9qZWN0SWRfZGVjLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWRfZGVjNCwgX2RhdGFTdGF0ZV9kZWM1LCBfY29ubmVjdGlvbnNTdGF0ZV9kZWM2LCBfYTksIF9HaXRvcHNWaWV3UGlwZWxpbmVzX2RlY29yYXRvcnMsIF9pbml0NiwgX2Nvbm5lY3Rpb25zU3RhdGU2LCBfZGF0YVN0YXRlNSwgX3NlbGVjdGVkQ29ubmVjdGlvbklkNCwgX3NlbGVjdGVkUHJvamVjdElkLCBHaXRvcHNWaWV3UGlwZWxpbmVzOwp2YXIgaW5pdF9waXBlbGluZXMyID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3MvcGlwZWxpbmVzL2luZGV4LnRzIigpIHsKICAgIGluaXRfcGx1Z2luczUoKTsKICAgIGF3YWl0IGluaXRfYXBwc3RhdGUoKTsKICAgIGluaXRfc2hhcmVkKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgX0dpdG9wc1ZpZXdQaXBlbGluZXNfZGVjb3JhdG9ycyA9IFt0NCgiZ2l0b3BzLXZpZXctcGlwZWxpbmVzIildOwogICAgR2l0b3BzVmlld1BpcGVsaW5lcyA9IGNsYXNzIGV4dGVuZHMgKF9hOSA9IERlZXNFbGVtZW50LCBfY29ubmVjdGlvbnNTdGF0ZV9kZWM2ID0gW3I1KCldLCBfZGF0YVN0YXRlX2RlYzUgPSBbcjUoKV0sIF9zZWxlY3RlZENvbm5lY3Rpb25JZF9kZWM0ID0gW3I1KCldLCBfc2VsZWN0ZWRQcm9qZWN0SWRfZGVjID0gW3I1KCldLCBfYTkpIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2Nvbm5lY3Rpb25zU3RhdGU2LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDgsIHRoaXMsIHsKICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSwKICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25JZDogbnVsbAogICAgICAgIH0pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxMSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhU3RhdGU1LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDEyLCB0aGlzLCB7CiAgICAgICAgICBwcm9qZWN0czogW10sCiAgICAgICAgICBncm91cHM6IFtdLAogICAgICAgICAgc2VjcmV0czogW10sCiAgICAgICAgICBwaXBlbGluZXM6IFtdLAogICAgICAgICAgcGlwZWxpbmVKb2JzOiBbXSwKICAgICAgICAgIGN1cnJlbnRKb2JMb2c6ICIiCiAgICAgICAgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDE1LCB0aGlzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29ubmVjdGlvbklkNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxOSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZFByb2plY3RJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyMywgdGhpcyk7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2F1dG9SZWZyZXNoSGFuZGxlciIpOwogICAgICAgIGNvbnN0IGNvbm5TdWIgPSBjb25uZWN0aW9uc1N0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5jb25uZWN0aW9uc1N0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goY29ublN1Yik7CiAgICAgICAgY29uc3QgZGF0YVN1YiA9IGRhdGFTdGF0ZVBhcnQuc2VsZWN0KChzMTApID0+IHMxMCkuc3Vic2NyaWJlKChzMTApID0+IHsKICAgICAgICAgIHRoaXMuZGF0YVN0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goZGF0YVN1Yik7CiAgICAgICAgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyID0gKCkgPT4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgaGFuZGxlQXV0b1JlZnJlc2goKSB7CiAgICAgICAgdGhpcy5sb2FkUGlwZWxpbmVzKCk7CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gdGhpcy5jb25uZWN0aW9uc1N0YXRlLmNvbm5lY3Rpb25zLm1hcCgoYzExKSA9PiAoewogICAgICAgICAgb3B0aW9uOiBgJHtjMTEubmFtZX0gKCR7YzExLnByb3ZpZGVyVHlwZX0pYCwKICAgICAgICAgIGtleTogYzExLmlkCiAgICAgICAgfSkpOwogICAgICAgIGNvbnN0IHByb2plY3RPcHRpb25zID0gdGhpcy5kYXRhU3RhdGUucHJvamVjdHMubWFwKChwNykgPT4gKHsKICAgICAgICAgIG9wdGlvbjogcDcuZnVsbFBhdGggfHwgcDcubmFtZSwKICAgICAgICAgIGtleTogcDcuaWQKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5QaXBlbGluZXM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idmlldy1kZXNjcmlwdGlvbiI+VmlldyBhbmQgbWFuYWdlIENJL0NEIHBpcGVsaW5lczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IkNvbm5lY3Rpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtjb25uZWN0aW9uT3B0aW9uc30KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke2Nvbm5lY3Rpb25PcHRpb25zLmZpbmQoKG8xMykgPT4gbzEzLmtleSA9PT0gdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCkgfHwgY29ubmVjdGlvbk9wdGlvbnNbMF19CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHsoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkID0gZTExLmRldGFpbC5rZXk7CiAgICAgICAgICB0aGlzLmxvYWRQcm9qZWN0cygpOwogICAgICAgIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QifQogICAgICAgICAgLm9wdGlvbnM9JHtwcm9qZWN0T3B0aW9uc30KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3Byb2plY3RPcHRpb25zLmZpbmQoKG8xMykgPT4gbzEzLmtleSA9PT0gdGhpcy5zZWxlY3RlZFByb2plY3RJZCkgfHwgcHJvamVjdE9wdGlvbnNbMF19CiAgICAgICAgICBAc2VsZWN0ZWRPcHRpb249JHsoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvamVjdElkID0gZTExLmRldGFpbC5rZXk7CiAgICAgICAgICB0aGlzLmxvYWRQaXBlbGluZXMoKTsKICAgICAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMubG9hZFBpcGVsaW5lcygpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7IkNJL0NEIFBpcGVsaW5lcyJ9CiAgICAgICAgLmhlYWRpbmcyPSR7IlBpcGVsaW5lIHJ1bnMgZm9yIHRoZSBzZWxlY3RlZCBwcm9qZWN0In0KICAgICAgICAuZGF0YT0ke3RoaXMuZGF0YVN0YXRlLnBpcGVsaW5lc30KICAgICAgICAuZGlzcGxheUZ1bmN0aW9uPSR7KGl0ZW0pID0+ICh7CiAgICAgICAgICBJRDogaXRlbS5pZCwKICAgICAgICAgIFN0YXR1czogaXRlbS5zdGF0dXMsCiAgICAgICAgICBSZWY6IGl0ZW0ucmVmLAogICAgICAgICAgRHVyYXRpb246IGl0ZW0uZHVyYXRpb24gPyBgJHtNYXRoLnJvdW5kKGl0ZW0uZHVyYXRpb24pfXNgIDogIi0iLAogICAgICAgICAgU291cmNlOiBpdGVtLnNvdXJjZSwKICAgICAgICAgIENyZWF0ZWQ6IGl0ZW0uY3JlYXRlZEF0ID8gbmV3IERhdGUoaXRlbS5jcmVhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCkgOiAiLSIKICAgICAgICB9KX0KICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJWaWV3IEpvYnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoaXRlbSkgPT4gewogICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlld0pvYnMoaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJSZXRyeSIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2gtY3ciLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChpdGVtKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihyZXRyeVBpcGVsaW5lQWN0aW9uLCB7CiAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQsCiAgICAgICAgICAgICAgICBwcm9qZWN0SWQ6IHRoaXMuc2VsZWN0ZWRQcm9qZWN0SWQsCiAgICAgICAgICAgICAgICBwaXBlbGluZUlkOiBpdGVtLmlkCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp4LWNpcmNsZSIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBhd2FpdCBkYXRhU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGNhbmNlbFBpcGVsaW5lQWN0aW9uLCB7CiAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQsCiAgICAgICAgICAgICAgICBwcm9qZWN0SWQ6IHRoaXMuc2VsZWN0ZWRQcm9qZWN0SWQsCiAgICAgICAgICAgICAgICBwaXBlbGluZUlkOiBpdGVtLmlkCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdfQogICAgICA+PC9kZWVzLXRhYmxlPgogICAgYDsKICAgICAgfQogICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgYXdhaXQgY29ubmVjdGlvbnNTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hDb25uZWN0aW9uc0FjdGlvbiwgbnVsbCk7CiAgICAgICAgY29uc3QgY29ubnMgPSBjb25uZWN0aW9uc1N0YXRlUGFydC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25zOwogICAgICAgIGlmIChjb25ucy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkID0gY29ubnNbMF0uaWQ7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRQcm9qZWN0cygpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBsb2FkUHJvamVjdHMoKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSByZXR1cm47CiAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaFByb2plY3RzQWN0aW9uLCB7CiAgICAgICAgICBjb25uZWN0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQKICAgICAgICB9KTsKICAgICAgfQogICAgICBhc3luYyBsb2FkUGlwZWxpbmVzKCkgewogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCB8fCAhdGhpcy5zZWxlY3RlZFByb2plY3RJZCkgcmV0dXJuOwogICAgICAgIGF3YWl0IGRhdGFTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hQaXBlbGluZXNBY3Rpb24sIHsKICAgICAgICAgIGNvbm5lY3Rpb25JZDogdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCwKICAgICAgICAgIHByb2plY3RJZDogdGhpcy5zZWxlY3RlZFByb2plY3RJZAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGFzeW5jIHZpZXdKb2JzKHBpcGVsaW5lKSB7CiAgICAgICAgYXdhaXQgZGF0YVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaFBpcGVsaW5lSm9ic0FjdGlvbiwgewogICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkLAogICAgICAgICAgcHJvamVjdElkOiB0aGlzLnNlbGVjdGVkUHJvamVjdElkLAogICAgICAgICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQKICAgICAgICB9KTsKICAgICAgICBjb25zdCBqb2JzID0gZGF0YVN0YXRlUGFydC5nZXRTdGF0ZSgpLnBpcGVsaW5lSm9iczsKICAgICAgICBhd2FpdCBkaXN0X3RzX3dlYl9leHBvcnRzMi5EZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgICBoZWFkaW5nOiBgUGlwZWxpbmUgIyR7cGlwZWxpbmUuaWR9IC0gSm9ic2AsCiAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICA8c3R5bGU+CiAgICAgICAgICAuam9icy1saXN0IHsgY29sb3I6ICNmZmY7IH0KICAgICAgICAgIC5qb2ItaXRlbSB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgcGFkZGluZzogOHB4IDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOyB9CiAgICAgICAgICAuam9iLW5hbWUgeyBmb250LXdlaWdodDogNjAwOyB9CiAgICAgICAgICAuam9iLXN0YXR1cyB7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIDwvc3R5bGU+CiAgICAgICAgPGRpdiBjbGFzcz0iam9icy1saXN0Ij4KICAgICAgICAgICR7am9icy5tYXAoKGpvYikgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImpvYi1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iam9iLW5hbWUiPiR7am9iLm5hbWV9ICgke2pvYi5zdGFnZX0pPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqb2Itc3RhdHVzIj4ke2pvYi5zdGF0dXN9IC0gJHtqb2IuZHVyYXRpb24gPyBgJHtNYXRoLnJvdW5kKGpvYi5kdXJhdGlvbil9c2AgOiAiLSJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApfQogICAgICAgICAgJHtqb2JzLmxlbmd0aCA9PT0gMCA/IGIyYDxwPk5vIGpvYnMgZm91bmQuPC9wPmAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYCwKICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgIHsgbmFtZTogIkNsb3NlIiwgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IHsKICAgICAgICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgICAgICAgIH0gfQogICAgICAgICAgXQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgX2luaXQ2ID0gX19kZWNvcmF0b3JTdGFydChfYTkpOwogICAgX2Nvbm5lY3Rpb25zU3RhdGU2ID0gbmV3IFdlYWtNYXAoKTsKICAgIF9kYXRhU3RhdGU1ID0gbmV3IFdlYWtNYXAoKTsKICAgIF9zZWxlY3RlZENvbm5lY3Rpb25JZDQgPSBuZXcgV2Vha01hcCgpOwogICAgX3NlbGVjdGVkUHJvamVjdElkID0gbmV3IFdlYWtNYXAoKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImNvbm5lY3Rpb25zU3RhdGUiLCBfY29ubmVjdGlvbnNTdGF0ZV9kZWM2LCBHaXRvcHNWaWV3UGlwZWxpbmVzLCBfY29ubmVjdGlvbnNTdGF0ZTYpOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiZGF0YVN0YXRlIiwgX2RhdGFTdGF0ZV9kZWM1LCBHaXRvcHNWaWV3UGlwZWxpbmVzLCBfZGF0YVN0YXRlNSk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJzZWxlY3RlZENvbm5lY3Rpb25JZCIsIF9zZWxlY3RlZENvbm5lY3Rpb25JZF9kZWM0LCBHaXRvcHNWaWV3UGlwZWxpbmVzLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWQ0KTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgInNlbGVjdGVkUHJvamVjdElkIiwgX3NlbGVjdGVkUHJvamVjdElkX2RlYywgR2l0b3BzVmlld1BpcGVsaW5lcywgX3NlbGVjdGVkUHJvamVjdElkKTsKICAgIEdpdG9wc1ZpZXdQaXBlbGluZXMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDAsICJHaXRvcHNWaWV3UGlwZWxpbmVzIiwgX0dpdG9wc1ZpZXdQaXBlbGluZXNfZGVjb3JhdG9ycywgR2l0b3BzVmlld1BpcGVsaW5lcyk7CiAgICBfX3B1YmxpY0ZpZWxkKEdpdG9wc1ZpZXdQaXBlbGluZXMsICJzdHlsZXMiLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgdmlld0hvc3RDc3MsCiAgICAgIGlgCiAgICAgIC5zdGF0dXMtYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CiAgICAgIC5zdGF0dXMtc3VjY2VzcyB7IGJhY2tncm91bmQ6ICMxYTNhMWE7IGNvbG9yOiAjMDBmZjg4OyB9CiAgICAgIC5zdGF0dXMtZmFpbGVkIHsgYmFja2dyb3VuZDogIzNhMWExYTsgY29sb3I6ICNmZjQ0NDQ7IH0KICAgICAgLnN0YXR1cy1ydW5uaW5nIHsgYmFja2dyb3VuZDogIzFhMmEzYTsgY29sb3I6ICMwMGFjZmY7IH0KICAgICAgLnN0YXR1cy1wZW5kaW5nIHsgYmFja2dyb3VuZDogIzNhM2ExYTsgY29sb3I6ICNmZmFhMDA7IH0KICAgICAgLnN0YXR1cy1jYW5jZWxlZCB7IGJhY2tncm91bmQ6ICMyYTJhMmE7IGNvbG9yOiAjOTk5OyB9CiAgICBgCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMSwgR2l0b3BzVmlld1BpcGVsaW5lcyk7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy92aWV3cy9idWlsZGxvZy9pbmRleC50cwp2YXIgYnVpbGRsb2dfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidWlsZGxvZ19leHBvcnRzLCB7CiAgR2l0b3BzVmlld0J1aWxkbG9nOiAoKSA9PiBHaXRvcHNWaWV3QnVpbGRsb2cKfSk7CnZhciBfc2VsZWN0ZWRKb2JJZF9kZWMsIF9zZWxlY3RlZFByb2plY3RJZF9kZWMyLCBfc2VsZWN0ZWRDb25uZWN0aW9uSWRfZGVjNSwgX2RhdGFTdGF0ZV9kZWM2LCBfY29ubmVjdGlvbnNTdGF0ZV9kZWM3LCBfYTEwLCBfR2l0b3BzVmlld0J1aWxkbG9nX2RlY29yYXRvcnMsIF9pbml0NywgX2Nvbm5lY3Rpb25zU3RhdGU3LCBfZGF0YVN0YXRlNiwgX3NlbGVjdGVkQ29ubmVjdGlvbklkNSwgX3NlbGVjdGVkUHJvamVjdElkMiwgX3NlbGVjdGVkSm9iSWQsIEdpdG9wc1ZpZXdCdWlsZGxvZzsKdmFyIGluaXRfYnVpbGRsb2cgPSBfX2VzbSh7CiAgYXN5bmMgInRzX3dlYi9lbGVtZW50cy92aWV3cy9idWlsZGxvZy9pbmRleC50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM1KCk7CiAgICBhd2FpdCBpbml0X2FwcHN0YXRlKCk7CiAgICBpbml0X3NoYXJlZCgpOwogICAgaW5pdF9kaXN0X3RzMjkoKTsKICAgIF9HaXRvcHNWaWV3QnVpbGRsb2dfZGVjb3JhdG9ycyA9IFt0NCgiZ2l0b3BzLXZpZXctYnVpbGRsb2ciKV07CiAgICBHaXRvcHNWaWV3QnVpbGRsb2cgPSBjbGFzcyBleHRlbmRzIChfYTEwID0gRGVlc0VsZW1lbnQsIF9jb25uZWN0aW9uc1N0YXRlX2RlYzcgPSBbcjUoKV0sIF9kYXRhU3RhdGVfZGVjNiA9IFtyNSgpXSwgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzUgPSBbcjUoKV0sIF9zZWxlY3RlZFByb2plY3RJZF9kZWMyID0gW3I1KCldLCBfc2VsZWN0ZWRKb2JJZF9kZWMgPSBbcjUoKV0sIF9hMTApIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2Nvbm5lY3Rpb25zU3RhdGU3LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDgsIHRoaXMsIHsKICAgICAgICAgIGNvbm5lY3Rpb25zOiBbXSwKICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25JZDogbnVsbAogICAgICAgIH0pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxMSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhU3RhdGU2LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDEyLCB0aGlzLCB7CiAgICAgICAgICBwcm9qZWN0czogW10sCiAgICAgICAgICBncm91cHM6IFtdLAogICAgICAgICAgc2VjcmV0czogW10sCiAgICAgICAgICBwaXBlbGluZXM6IFtdLAogICAgICAgICAgcGlwZWxpbmVKb2JzOiBbXSwKICAgICAgICAgIGN1cnJlbnRKb2JMb2c6ICIiCiAgICAgICAgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDE1LCB0aGlzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29ubmVjdGlvbklkNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxOSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZFByb2plY3RJZDIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMjMsIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRKb2JJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAyNCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAyNywgdGhpcyk7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX2F1dG9SZWZyZXNoSGFuZGxlciIpOwogICAgICAgIGNvbnN0IGNvbm5TdWIgPSBjb25uZWN0aW9uc1N0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5jb25uZWN0aW9uc1N0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goY29ublN1Yik7CiAgICAgICAgY29uc3QgZGF0YVN1YiA9IGRhdGFTdGF0ZVBhcnQuc2VsZWN0KChzMTApID0+IHMxMCkuc3Vic2NyaWJlKChzMTApID0+IHsKICAgICAgICAgIHRoaXMuZGF0YVN0YXRlID0gczEwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucnhTdWJzY3JpcHRpb25zLnB1c2goZGF0YVN1Yik7CiAgICAgICAgdGhpcy5fYXV0b1JlZnJlc2hIYW5kbGVyID0gKCkgPT4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaCgpOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgaGFuZGxlQXV0b1JlZnJlc2goKSB7CiAgICAgICAgdGhpcy5mZXRjaExvZygpOwogICAgICB9CiAgICAgIHJlbmRlcigpIHsKICAgICAgICBjb25zdCBjb25uZWN0aW9uT3B0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnNTdGF0ZS5jb25uZWN0aW9ucy5tYXAoKGMxMSkgPT4gKHsKICAgICAgICAgIG9wdGlvbjogYCR7YzExLm5hbWV9ICgke2MxMS5wcm92aWRlclR5cGV9KWAsCiAgICAgICAgICBrZXk6IGMxMS5pZAogICAgICAgIH0pKTsKICAgICAgICBjb25zdCBwcm9qZWN0T3B0aW9ucyA9IHRoaXMuZGF0YVN0YXRlLnByb2plY3RzLm1hcCgocDcpID0+ICh7CiAgICAgICAgICBvcHRpb246IHA3LmZ1bGxQYXRoIHx8IHA3Lm5hbWUsCiAgICAgICAgICBrZXk6IHA3LmlkCiAgICAgICAgfSkpOwogICAgICAgIGNvbnN0IGpvYk9wdGlvbnMgPSB0aGlzLmRhdGFTdGF0ZS5waXBlbGluZUpvYnMubWFwKChqNCkgPT4gKHsKICAgICAgICAgIG9wdGlvbjogYCR7ajQubmFtZX0gKCR7ajQuc3RhdHVzfSlgLAogICAgICAgICAga2V5OiBqNC5pZAogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InZpZXctdGl0bGUiPkJ1aWxkIExvZzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5WaWV3IHJhdyBidWlsZCBsb2dzIGZvciBDSS9DRCBqb2JzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiQ29ubmVjdGlvbiJ9CiAgICAgICAgICAub3B0aW9ucz0ke2Nvbm5lY3Rpb25PcHRpb25zfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Y29ubmVjdGlvbk9wdGlvbnMuZmluZCgobzEzKSA9PiBvMTMua2V5ID09PSB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkKSB8fCBjb25uZWN0aW9uT3B0aW9uc1swXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQgPSBlMTEuZGV0YWlsLmtleTsKICAgICAgICAgIHRoaXMubG9hZFByb2plY3RzKCk7CiAgICAgICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke3Byb2plY3RPcHRpb25zfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7cHJvamVjdE9wdGlvbnMuZmluZCgobzEzKSA9PiBvMTMua2V5ID09PSB0aGlzLnNlbGVjdGVkUHJvamVjdElkKSB8fCBwcm9qZWN0T3B0aW9uc1swXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9qZWN0SWQgPSBlMTEuZGV0YWlsLmtleTsKICAgICAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJKb2IifQogICAgICAgICAgLm9wdGlvbnM9JHtqb2JPcHRpb25zfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7am9iT3B0aW9ucy5maW5kKChvMTMpID0+IG8xMy5rZXkgPT09IHRoaXMuc2VsZWN0ZWRKb2JJZCkgfHwgam9iT3B0aW9uc1swXX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRKb2JJZCA9IGUxMS5kZXRhaWwua2V5OwogICAgICAgIH19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5mZXRjaExvZygpfT5GZXRjaCBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLmZldGNoTG9nKCl9PlJlZnJlc2g8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnNlbGVjdGVkSm9iSWQgPyBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJqb2ItbWV0YSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iam9iLW1ldGEtaXRlbSI+Sm9iOiA8c3Ryb25nPiR7dGhpcy5zZWxlY3RlZEpvYklkfTwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJqb2ItbWV0YS1pdGVtIj5Qcm9qZWN0OiA8c3Ryb25nPiR7dGhpcy5zZWxlY3RlZFByb2plY3RJZH08L3N0cm9uZz48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgICAgPGRpdiBjbGFzcz0ibG9nLWNvbnRhaW5lciI+CiAgICAgICAgJHt0aGlzLmRhdGFTdGF0ZS5jdXJyZW50Sm9iTG9nID8gdGhpcy5kYXRhU3RhdGUuY3VycmVudEpvYkxvZyA6IGIyYDxkaXYgY2xhc3M9ImxvZy1lbXB0eSI+U2VsZWN0IGEgY29ubmVjdGlvbiwgcHJvamVjdCwgYW5kIGpvYiwgdGhlbiBjbGljayAiRmV0Y2ggTG9nIiB0byB2aWV3IGJ1aWxkIG91dHB1dC48L2Rpdj5gfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgIH0KICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgIGF3YWl0IGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGZldGNoQ29ubmVjdGlvbnNBY3Rpb24sIG51bGwpOwogICAgICAgIGNvbnN0IGNvbm5zID0gY29ubmVjdGlvbnNTdGF0ZVBhcnQuZ2V0U3RhdGUoKS5jb25uZWN0aW9uczsKICAgICAgICBpZiAoY29ubnMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCA9IGNvbm5zWzBdLmlkOwogICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUHJvamVjdHMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgbG9hZFByb2plY3RzKCkgewogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25JZCkgcmV0dXJuOwogICAgICAgIGF3YWl0IGRhdGFTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24oZmV0Y2hQcm9qZWN0c0FjdGlvbiwgewogICAgICAgICAgY29ubmVjdGlvbklkOiB0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXN5bmMgZmV0Y2hMb2coKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29ubmVjdGlvbklkIHx8ICF0aGlzLnNlbGVjdGVkUHJvamVjdElkIHx8ICF0aGlzLnNlbGVjdGVkSm9iSWQpIHJldHVybjsKICAgICAgICBhd2FpdCBkYXRhU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGZldGNoSm9iTG9nQWN0aW9uLCB7CiAgICAgICAgICBjb25uZWN0aW9uSWQ6IHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uSWQsCiAgICAgICAgICBwcm9qZWN0SWQ6IHRoaXMuc2VsZWN0ZWRQcm9qZWN0SWQsCiAgICAgICAgICBqb2JJZDogdGhpcy5zZWxlY3RlZEpvYklkCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBfaW5pdDcgPSBfX2RlY29yYXRvclN0YXJ0KF9hMTApOwogICAgX2Nvbm5lY3Rpb25zU3RhdGU3ID0gbmV3IFdlYWtNYXAoKTsKICAgIF9kYXRhU3RhdGU2ID0gbmV3IFdlYWtNYXAoKTsKICAgIF9zZWxlY3RlZENvbm5lY3Rpb25JZDUgPSBuZXcgV2Vha01hcCgpOwogICAgX3NlbGVjdGVkUHJvamVjdElkMiA9IG5ldyBXZWFrTWFwKCk7CiAgICBfc2VsZWN0ZWRKb2JJZCA9IG5ldyBXZWFrTWFwKCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJjb25uZWN0aW9uc1N0YXRlIiwgX2Nvbm5lY3Rpb25zU3RhdGVfZGVjNywgR2l0b3BzVmlld0J1aWxkbG9nLCBfY29ubmVjdGlvbnNTdGF0ZTcpOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAiZGF0YVN0YXRlIiwgX2RhdGFTdGF0ZV9kZWM2LCBHaXRvcHNWaWV3QnVpbGRsb2csIF9kYXRhU3RhdGU2KTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgNCwgInNlbGVjdGVkQ29ubmVjdGlvbklkIiwgX3NlbGVjdGVkQ29ubmVjdGlvbklkX2RlYzUsIEdpdG9wc1ZpZXdCdWlsZGxvZywgX3NlbGVjdGVkQ29ubmVjdGlvbklkNSk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJzZWxlY3RlZFByb2plY3RJZCIsIF9zZWxlY3RlZFByb2plY3RJZF9kZWMyLCBHaXRvcHNWaWV3QnVpbGRsb2csIF9zZWxlY3RlZFByb2plY3RJZDIpOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAic2VsZWN0ZWRKb2JJZCIsIF9zZWxlY3RlZEpvYklkX2RlYywgR2l0b3BzVmlld0J1aWxkbG9nLCBfc2VsZWN0ZWRKb2JJZCk7CiAgICBHaXRvcHNWaWV3QnVpbGRsb2cgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDAsICJHaXRvcHNWaWV3QnVpbGRsb2ciLCBfR2l0b3BzVmlld0J1aWxkbG9nX2RlY29yYXRvcnMsIEdpdG9wc1ZpZXdCdWlsZGxvZyk7CiAgICBfX3B1YmxpY0ZpZWxkKEdpdG9wc1ZpZXdCdWlsZGxvZywgInN0eWxlcyIsIFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB2aWV3SG9zdENzcywKICAgICAgaWAKICAgICAgLmxvZy1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBmb250LWZhbWlseTogJ0ZpcmEgQ29kZScsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICBtYXgtaGVpZ2h0OiA2MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KICAgICAgLmxvZy1lbXB0eSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgLmpvYi1tZXRhIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogIzFhMWEyZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5qb2ItbWV0YS1pdGVtIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQogICAgICAuam9iLW1ldGEtaXRlbSBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CiAgICBgCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMSwgR2l0b3BzVmlld0J1aWxkbG9nKTsKICB9Cn0pOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3ZpZXdzL2FjdGlvbnMvaW5kZXgudHMKdmFyIGFjdGlvbnNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChhY3Rpb25zX2V4cG9ydHMsIHsKICBHaXRvcHNWaWV3QWN0aW9uczogKCkgPT4gR2l0b3BzVmlld0FjdGlvbnMKfSk7CnZhciBfc3RhdHVzRXJyb3JfZGVjLCBfbGFzdFJlc3VsdF9kZWMsIF9pc1NjYW5uaW5nX2RlYywgX2xhc3RTY2FuVGltZXN0YW1wX2RlYywgX2ExMSwgX0dpdG9wc1ZpZXdBY3Rpb25zX2RlY29yYXRvcnMsIF9pbml0OCwgX2xhc3RTY2FuVGltZXN0YW1wLCBfaXNTY2FubmluZywgX2xhc3RSZXN1bHQsIF9zdGF0dXNFcnJvciwgR2l0b3BzVmlld0FjdGlvbnM7CnZhciBpbml0X2FjdGlvbnMyID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3MvYWN0aW9ucy9pbmRleC50cyIoKSB7CiAgICBpbml0X3BsdWdpbnM1KCk7CiAgICBpbml0X3RzX2ludGVyZmFjZXMoKTsKICAgIGF3YWl0IGluaXRfYXBwc3RhdGUoKTsKICAgIGluaXRfc2hhcmVkKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgX0dpdG9wc1ZpZXdBY3Rpb25zX2RlY29yYXRvcnMgPSBbdDQoImdpdG9wcy12aWV3LWFjdGlvbnMiKV07CiAgICBHaXRvcHNWaWV3QWN0aW9ucyA9IGNsYXNzIGV4dGVuZHMgKF9hMTEgPSBEZWVzRWxlbWVudCwgX2xhc3RTY2FuVGltZXN0YW1wX2RlYyA9IFtyNSgpXSwgX2lzU2Nhbm5pbmdfZGVjID0gW3I1KCldLCBfbGFzdFJlc3VsdF9kZWMgPSBbcjUoKV0sIF9zdGF0dXNFcnJvcl9kZWMgPSBbcjUoKV0sIF9hMTEpIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xhc3RTY2FuVGltZXN0YW1wLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDgsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAxMSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9pc1NjYW5uaW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDEyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDE1LCB0aGlzKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xhc3RSZXN1bHQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTYsIHRoaXMsIG51bGwpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAxOSwgdGhpcyk7CiAgICAgICAgX19wcml2YXRlQWRkKHRoaXMsIF9zdGF0dXNFcnJvciwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMywgdGhpcyk7CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIGNvbnN0IGxhc3RTY2FuRm9ybWF0dGVkID0gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA/IG5ldyBEYXRlKHRoaXMubGFzdFNjYW5UaW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCkgOiAiTmV2ZXIiOwogICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idmlldy10aXRsZSI+QWN0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LWRlc2NyaXB0aW9uIj5TeXN0ZW0gYWN0aW9ucyBhbmQgbWFpbnRlbmFuY2UgdGFza3M8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWNhcmRzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tY2FyZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tY2FyZC10aXRsZSI+U2VjcmV0cyBDYWNoZSBTY2FuPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tY2FyZC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgIFNlY3JldHMgYXJlIGF1dG9tYXRpY2FsbHkgc2Nhbm5lZCBhbmQgY2FjaGVkIGV2ZXJ5IDI0IGhvdXJzLgogICAgICAgICAgICBVc2UgIkZvcmNlIEZ1bGwgU2NhbiIgdG8gdHJpZ2dlciBhbiBpbW1lZGlhdGUgcmVmcmVzaCBvZiBhbGwgc2VjcmV0cwogICAgICAgICAgICBhY3Jvc3MgYWxsIGNvbm5lY3Rpb25zLCBwcm9qZWN0cywgYW5kIGdyb3Vwcy4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1sYWJlbCI+U3RhdHVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUgJHt0aGlzLmlzU2Nhbm5pbmcgPyAic2Nhbm5pbmciIDogIiJ9Ij4KICAgICAgICAgICAgICAke3RoaXMuaXNTY2FubmluZyA/ICJTY2FubmluZy4uLiIgOiAiSWRsZSJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5MYXN0IFNjYW48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby12YWx1ZSI+JHtsYXN0U2NhbkZvcm1hdHRlZH08L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLmxhc3RSZXN1bHQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5Db25uZWN0aW9uczwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUiPiR7dGhpcy5sYXN0UmVzdWx0LmNvbm5lY3Rpb25zU2Nhbm5lZH08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5TZWNyZXRzIEZvdW5kPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby12YWx1ZSI+JHt0aGlzLmxhc3RSZXN1bHQuc2VjcmV0c0ZvdW5kfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tbGFiZWwiPkR1cmF0aW9uPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby12YWx1ZSI+JHsodGhpcy5sYXN0UmVzdWx0LmR1cmF0aW9uTXMgLyAxZTMpLnRvRml4ZWQoMSl9czwvZGl2PgogICAgICAgICAgICAgICR7dGhpcy5sYXN0UmVzdWx0LmVycm9ycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWxhYmVsIj5FcnJvcnM8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdmFsdWUgZXJyb3IiPiR7dGhpcy5sYXN0UmVzdWx0LmVycm9ycy5sZW5ndGh9PC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5zdGF0dXNFcnJvciA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvcnMtbGlzdCI+JHt0aGlzLnN0YXR1c0Vycm9yfTwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgICAgJHt0aGlzLmxhc3RSZXN1bHQ/LmVycm9ycz8ubGVuZ3RoID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9ycy1saXN0Ij4KICAgICAgICAgICAgICAke3RoaXMubGFzdFJlc3VsdC5lcnJvcnMubWFwKChlMTEpID0+IGIyYDxkaXY+JHtlMTF9PC9kaXY+YCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLXJvdyI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuaXNTY2FubmluZ30KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmZvcmNlU2NhbigpfQogICAgICAgICAgICA+Rm9yY2UgRnVsbCBTY2FuPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5yZWZyZXNoU3RhdHVzKCl9CiAgICAgICAgICAgID5SZWZyZXNoIFN0YXR1czwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICB9CiAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hTdGF0dXMoKTsKICAgICAgfQogICAgICBnZXRJZGVudGl0eSgpIHsKICAgICAgICByZXR1cm4gbG9naW5TdGF0ZVBhcnQuZ2V0U3RhdGUoKS5pZGVudGl0eTsKICAgICAgfQogICAgICBhc3luYyByZWZyZXNoU3RhdHVzKCkgewogICAgICAgIGNvbnN0IGlkZW50aXR5MiA9IHRoaXMuZ2V0SWRlbnRpdHkoKTsKICAgICAgICBpZiAoIWlkZW50aXR5MikgcmV0dXJuOwogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLnN0YXR1c0Vycm9yID0gIiI7CiAgICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImdldFNjYW5TdGF0dXMiKTsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoeyBpZGVudGl0eTogaWRlbnRpdHkyIH0pOwogICAgICAgICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IHJlc3BvbnNlLmxhc3RTY2FuVGltZXN0YW1wOwogICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gcmVzcG9uc2UuaXNTY2FubmluZzsKICAgICAgICAgIHRoaXMubGFzdFJlc3VsdCA9IHJlc3BvbnNlLmxhc3RSZXN1bHQ7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICB0aGlzLnN0YXR1c0Vycm9yID0gYEZhaWxlZCB0byBnZXQgc3RhdHVzOiAke2Vycn1gOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmb3JjZVNjYW4oKSB7CiAgICAgICAgY29uc3QgaWRlbnRpdHkyID0gdGhpcy5nZXRJZGVudGl0eSgpOwogICAgICAgIGlmICghaWRlbnRpdHkyKSByZXR1cm47CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuc3RhdHVzRXJyb3IgPSAiIjsKICAgICAgICAgIHRoaXMuaXNTY2FubmluZyA9IHRydWU7CiAgICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgImZvcmNlU2NhblNlY3JldHMiKTsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUoeyBpZGVudGl0eTogaWRlbnRpdHkyIH0pOwogICAgICAgICAgdGhpcy5sYXN0UmVzdWx0ID0gewogICAgICAgICAgICBjb25uZWN0aW9uc1NjYW5uZWQ6IHJlc3BvbnNlLmNvbm5lY3Rpb25zU2Nhbm5lZCwKICAgICAgICAgICAgc2VjcmV0c0ZvdW5kOiByZXNwb25zZS5zZWNyZXRzRm91bmQsCiAgICAgICAgICAgIGVycm9yczogcmVzcG9uc2UuZXJyb3JzLAogICAgICAgICAgICBkdXJhdGlvbk1zOiByZXNwb25zZS5kdXJhdGlvbk1zCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAgICB0aGlzLmlzU2Nhbm5pbmcgPSBmYWxzZTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzRXJyb3IgPSBgU2NhbiBmYWlsZWQ6ICR7ZXJyfWA7CiAgICAgICAgICB0aGlzLmlzU2Nhbm5pbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBfaW5pdDggPSBfX2RlY29yYXRvclN0YXJ0KF9hMTEpOwogICAgX2xhc3RTY2FuVGltZXN0YW1wID0gbmV3IFdlYWtNYXAoKTsKICAgIF9pc1NjYW5uaW5nID0gbmV3IFdlYWtNYXAoKTsKICAgIF9sYXN0UmVzdWx0ID0gbmV3IFdlYWtNYXAoKTsKICAgIF9zdGF0dXNFcnJvciA9IG5ldyBXZWFrTWFwKCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJsYXN0U2NhblRpbWVzdGFtcCIsIF9sYXN0U2NhblRpbWVzdGFtcF9kZWMsIEdpdG9wc1ZpZXdBY3Rpb25zLCBfbGFzdFNjYW5UaW1lc3RhbXApOwogICAgX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiaXNTY2FubmluZyIsIF9pc1NjYW5uaW5nX2RlYywgR2l0b3BzVmlld0FjdGlvbnMsIF9pc1NjYW5uaW5nKTsKICAgIF9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImxhc3RSZXN1bHQiLCBfbGFzdFJlc3VsdF9kZWMsIEdpdG9wc1ZpZXdBY3Rpb25zLCBfbGFzdFJlc3VsdCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJzdGF0dXNFcnJvciIsIF9zdGF0dXNFcnJvcl9kZWMsIEdpdG9wc1ZpZXdBY3Rpb25zLCBfc3RhdHVzRXJyb3IpOwogICAgR2l0b3BzVmlld0FjdGlvbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDAsICJHaXRvcHNWaWV3QWN0aW9ucyIsIF9HaXRvcHNWaWV3QWN0aW9uc19kZWNvcmF0b3JzLCBHaXRvcHNWaWV3QWN0aW9ucyk7CiAgICBfX3B1YmxpY0ZpZWxkKEdpdG9wc1ZpZXdBY3Rpb25zLCAic3R5bGVzIiwgWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIHZpZXdIb3N0Q3NzLAogICAgICBpYAogICAgICAuYWN0aW9uLWNhcmRzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBtYXgtd2lkdGg6IDcyMHB4OwogICAgICB9CiAgICAgIC5hY3Rpb24tY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjhweDsKICAgICAgfQogICAgICAuYWN0aW9uLWNhcmQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQogICAgICAuYWN0aW9uLWNhcmQtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KICAgICAgLmluZm8tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE0MHB4IDFmcjsKICAgICAgICBnYXA6IDhweCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CiAgICAgIC5pbmZvLWxhYmVsIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQogICAgICAuaW5mby12YWx1ZSB7CiAgICAgICAgY29sb3I6ICNkZGQ7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQogICAgICAuaW5mby12YWx1ZS5zY2FubmluZyB7CiAgICAgICAgY29sb3I6ICNmMGMwNDA7CiAgICAgIH0KICAgICAgLmluZm8tdmFsdWUuZXJyb3IgewogICAgICAgIGNvbG9yOiAjZmY2MDYwOwogICAgICB9CiAgICAgIC5idXR0b24tcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CiAgICAgIC5lcnJvcnMtbGlzdCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBtYXgtaGVpZ2h0OiAxNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogI2ZmODA4MDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDAsIDAsIDAuMDUpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQogICAgYAogICAgXSk7CiAgICBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDEsIEdpdG9wc1ZpZXdBY3Rpb25zKTsKICB9Cn0pOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3ZpZXdzL2FjdGlvbmxvZy9pbmRleC50cwp2YXIgYWN0aW9ubG9nX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoYWN0aW9ubG9nX2V4cG9ydHMsIHsKICBHaXRvcHNWaWV3QWN0aW9ubG9nOiAoKSA9PiBHaXRvcHNWaWV3QWN0aW9ubG9nCn0pOwp2YXIgX3NlbGVjdGVkRW50aXR5VHlwZV9kZWMsIF9hY3Rpb25Mb2dTdGF0ZV9kZWMsIF9hMTIsIF9HaXRvcHNWaWV3QWN0aW9ubG9nX2RlY29yYXRvcnMsIF9pbml0OSwgX2FjdGlvbkxvZ1N0YXRlLCBfc2VsZWN0ZWRFbnRpdHlUeXBlLCBHaXRvcHNWaWV3QWN0aW9ubG9nOwp2YXIgaW5pdF9hY3Rpb25sb2czID0gX19lc20oewogIGFzeW5jICJ0c193ZWIvZWxlbWVudHMvdmlld3MvYWN0aW9ubG9nL2luZGV4LnRzIigpIHsKICAgIGluaXRfcGx1Z2luczUoKTsKICAgIGF3YWl0IGluaXRfYXBwc3RhdGUoKTsKICAgIGluaXRfc2hhcmVkKCk7CiAgICBpbml0X2Rpc3RfdHMyOSgpOwogICAgX0dpdG9wc1ZpZXdBY3Rpb25sb2dfZGVjb3JhdG9ycyA9IFt0NCgiZ2l0b3BzLXZpZXctYWN0aW9ubG9nIildOwogICAgR2l0b3BzVmlld0FjdGlvbmxvZyA9IGNsYXNzIGV4dGVuZHMgKF9hMTIgPSBEZWVzRWxlbWVudCwgX2FjdGlvbkxvZ1N0YXRlX2RlYyA9IFtyNSgpXSwgX3NlbGVjdGVkRW50aXR5VHlwZV9kZWMgPSBbcjUoKV0sIF9hMTIpIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBfX3ByaXZhdGVBZGQodGhpcywgX2FjdGlvbkxvZ1N0YXRlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDgsIHRoaXMsIHsKICAgICAgICAgIGVudHJpZXM6IFtdLAogICAgICAgICAgdG90YWw6IDAKICAgICAgICB9KSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTEsIHRoaXMpOwogICAgICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRFbnRpdHlUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDEyLCB0aGlzLCAiYWxsIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDE1LCB0aGlzKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfYXV0b1JlZnJlc2hIYW5kbGVyIik7CiAgICAgICAgY29uc3Qgc3ViMiA9IGFjdGlvbkxvZ1N0YXRlUGFydC5zZWxlY3QoKHMxMCkgPT4gczEwKS5zdWJzY3JpYmUoKHMxMCkgPT4gewogICAgICAgICAgdGhpcy5hY3Rpb25Mb2dTdGF0ZSA9IHMxMDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHN1YjIpOwogICAgICAgIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlciA9ICgpID0+IHRoaXMucmVmcmVzaCgpOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImdpdG9wcy1hdXRvLXJlZnJlc2giLCB0aGlzLl9hdXRvUmVmcmVzaEhhbmRsZXIpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZ2l0b3BzLWF1dG8tcmVmcmVzaCIsIHRoaXMuX2F1dG9SZWZyZXNoSGFuZGxlcik7CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIGNvbnN0IGVudGl0eU9wdGlvbnMgPSBbCiAgICAgICAgICB7IG9wdGlvbjogIkFsbCIsIGtleTogImFsbCIgfSwKICAgICAgICAgIHsgb3B0aW9uOiAiQ29ubmVjdGlvbiIsIGtleTogImNvbm5lY3Rpb24iIH0sCiAgICAgICAgICB7IG9wdGlvbjogIlNlY3JldCIsIGtleTogInNlY3JldCIgfSwKICAgICAgICAgIHsgb3B0aW9uOiAiUGlwZWxpbmUiLCBrZXk6ICJwaXBlbGluZSIgfQogICAgICAgIF07CiAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRpdGxlIj5BY3Rpb24gTG9nPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZpZXctZGVzY3JpcHRpb24iPkF1ZGl0IHRyYWlsIG9mIGFsbCBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgc3lzdGVtPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiRW50aXR5IFR5cGUifQogICAgICAgICAgLm9wdGlvbnM9JHtlbnRpdHlPcHRpb25zfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7ZW50aXR5T3B0aW9ucy5maW5kKChvMTMpID0+IG8xMy5rZXkgPT09IHRoaXMuc2VsZWN0ZWRFbnRpdHlUeXBlKX0KICAgICAgICAgIEBzZWxlY3RlZE9wdGlvbj0keyhlMTEpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbnRpdHlUeXBlID0gZTExLmRldGFpbC5rZXk7CiAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICAgICB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMucmVmcmVzaCgpfT5SZWZyZXNoPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgLmhlYWRpbmcxPSR7IkFjdGlvbiBMb2cifQogICAgICAgIC5oZWFkaW5nMj0ke2Ake3RoaXMuYWN0aW9uTG9nU3RhdGUudG90YWx9IGVudHJpZXMgdG90YWxgfQogICAgICAgIC5kYXRhPSR7dGhpcy5hY3Rpb25Mb2dTdGF0ZS5lbnRyaWVzfQogICAgICAgIC5kaXNwbGF5RnVuY3Rpb249JHsoaXRlbSkgPT4gKHsKICAgICAgICAgIFRpbWU6IG5ldyBEYXRlKGl0ZW0udGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpLAogICAgICAgICAgQWN0aW9uOiBpdGVtLmFjdGlvblR5cGUsCiAgICAgICAgICBFbnRpdHk6IGl0ZW0uZW50aXR5VHlwZSwKICAgICAgICAgIE5hbWU6IGl0ZW0uZW50aXR5TmFtZSwKICAgICAgICAgIERldGFpbHM6IGl0ZW0uZGV0YWlscywKICAgICAgICAgIFVzZXI6IGl0ZW0udXNlcm5hbWUKICAgICAgICB9KX0KICAgICAgICAuZGF0YUFjdGlvbnM9JHtbXX0KICAgICAgPjwvZGVlcy10YWJsZT4KICAgIGA7CiAgICAgIH0KICAgICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICB9CiAgICAgIGFzeW5jIHJlZnJlc2goKSB7CiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IHRoaXMuc2VsZWN0ZWRFbnRpdHlUeXBlID09PSAiYWxsIiA/IHZvaWQgMCA6IHRoaXMuc2VsZWN0ZWRFbnRpdHlUeXBlOwogICAgICAgIGF3YWl0IGFjdGlvbkxvZ1N0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihmZXRjaEFjdGlvbkxvZ0FjdGlvbiwgewogICAgICAgICAgbGltaXQ6IDEwMCwKICAgICAgICAgIGVudGl0eVR5cGUKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIF9pbml0OSA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMik7CiAgICBfYWN0aW9uTG9nU3RhdGUgPSBuZXcgV2Vha01hcCgpOwogICAgX3NlbGVjdGVkRW50aXR5VHlwZSA9IG5ldyBXZWFrTWFwKCk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJhY3Rpb25Mb2dTdGF0ZSIsIF9hY3Rpb25Mb2dTdGF0ZV9kZWMsIEdpdG9wc1ZpZXdBY3Rpb25sb2csIF9hY3Rpb25Mb2dTdGF0ZSk7CiAgICBfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJzZWxlY3RlZEVudGl0eVR5cGUiLCBfc2VsZWN0ZWRFbnRpdHlUeXBlX2RlYywgR2l0b3BzVmlld0FjdGlvbmxvZywgX3NlbGVjdGVkRW50aXR5VHlwZSk7CiAgICBHaXRvcHNWaWV3QWN0aW9ubG9nID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCAwLCAiR2l0b3BzVmlld0FjdGlvbmxvZyIsIF9HaXRvcHNWaWV3QWN0aW9ubG9nX2RlY29yYXRvcnMsIEdpdG9wc1ZpZXdBY3Rpb25sb2cpOwogICAgX19wdWJsaWNGaWVsZChHaXRvcHNWaWV3QWN0aW9ubG9nLCAic3R5bGVzIiwgWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIHZpZXdIb3N0Q3NzCiAgICBdKTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMSwgR2l0b3BzVmlld0FjdGlvbmxvZyk7CiAgfQp9KTsKCi8vIHRzX3dlYi9lbGVtZW50cy9naXRvcHMtZGFzaGJvYXJkLnRzCmluaXRfcGx1Z2luczUoKTsKYXdhaXQgaW5pdF9hcHBzdGF0ZSgpOwppbml0X3RzX2ludGVyZmFjZXMoKTsKaW5pdF9kaXN0X3RzMjkoKTsKdmFyIF91aVN0YXRlX2RlYywgX2xvZ2luU3RhdGVfZGVjLCBfYTEzLCBfR2l0b3BzRGFzaGJvYXJkX2RlY29yYXRvcnMsIF9pbml0MTAsIF9sb2dpblN0YXRlLCBfdWlTdGF0ZTsKX0dpdG9wc0Rhc2hib2FyZF9kZWNvcmF0b3JzID0gW3Q0KCJnaXRvcHMtZGFzaGJvYXJkIildOwp2YXIgR2l0b3BzRGFzaGJvYXJkID0gY2xhc3MgZXh0ZW5kcyAoX2ExMyA9IERlZXNFbGVtZW50LCBfbG9naW5TdGF0ZV9kZWMgPSBbcjUoKV0sIF91aVN0YXRlX2RlYyA9IFtyNSgpXSwgX2ExMykgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9naW5TdGF0ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgOCwgdGhpcywgeyBpZGVudGl0eTogbnVsbCwgaXNMb2dnZWRJbjogZmFsc2UgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3VpU3RhdGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDEyLCB0aGlzLCB7CiAgICAgIGFjdGl2ZVZpZXc6ICJvdmVydmlldyIsCiAgICAgIGF1dG9SZWZyZXNoOiB0cnVlLAogICAgICByZWZyZXNoSW50ZXJ2YWw6IDNlNAogICAgfSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxNSwgdGhpcyk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJ2aWV3VGFicyIsIFsKICAgICAgeyBuYW1lOiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBlbGVtZW50OiAoYXN5bmMgKCkgPT4gKGF3YWl0IGluaXRfb3ZlcnZpZXcoKS50aGVuKCgpID0+IG92ZXJ2aWV3X2V4cG9ydHMpKS5HaXRvcHNWaWV3T3ZlcnZpZXcpKCkgfSwKICAgICAgeyBuYW1lOiAiQ29ubmVjdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTpwbHVnIiwgZWxlbWVudDogKGFzeW5jICgpID0+IChhd2FpdCBpbml0X2Nvbm5lY3Rpb25zMigpLnRoZW4oKCkgPT4gY29ubmVjdGlvbnNfZXhwb3J0cykpLkdpdG9wc1ZpZXdDb25uZWN0aW9ucykoKSB9LAogICAgICB7IG5hbWU6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlckdpdDIiLCBlbGVtZW50OiAoYXN5bmMgKCkgPT4gKGF3YWl0IGluaXRfcHJvamVjdHMyKCkudGhlbigoKSA9PiBwcm9qZWN0c19leHBvcnRzKSkuR2l0b3BzVmlld1Byb2plY3RzKSgpIH0sCiAgICAgIHsgbmFtZTogIkdyb3VwcyIsIGljb25OYW1lOiAibHVjaWRlOnVzZXJzIiwgZWxlbWVudDogKGFzeW5jICgpID0+IChhd2FpdCBpbml0X2dyb3VwczIoKS50aGVuKCgpID0+IGdyb3Vwc19leHBvcnRzKSkuR2l0b3BzVmlld0dyb3VwcykoKSB9LAogICAgICB7IG5hbWU6ICJTZWNyZXRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6a2V5IiwgZWxlbWVudDogKGFzeW5jICgpID0+IChhd2FpdCBpbml0X3NlY3JldHMyKCkudGhlbigoKSA9PiBzZWNyZXRzX2V4cG9ydHMpKS5HaXRvcHNWaWV3U2VjcmV0cykoKSB9LAogICAgICB7IG5hbWU6ICJQaXBlbGluZXMiLCBpY29uTmFtZTogImx1Y2lkZTpwbGF5IiwgZWxlbWVudDogKGFzeW5jICgpID0+IChhd2FpdCBpbml0X3BpcGVsaW5lczIoKS50aGVuKCgpID0+IHBpcGVsaW5lc19leHBvcnRzKSkuR2l0b3BzVmlld1BpcGVsaW5lcykoKSB9LAogICAgICB7IG5hbWU6ICJCdWlsZCBMb2ciLCBpY29uTmFtZTogImx1Y2lkZTpzY3JvbGxUZXh0IiwgZWxlbWVudDogKGFzeW5jICgpID0+IChhd2FpdCBpbml0X2J1aWxkbG9nKCkudGhlbigoKSA9PiBidWlsZGxvZ19leHBvcnRzKSkuR2l0b3BzVmlld0J1aWxkbG9nKSgpIH0sCiAgICAgIHsgbmFtZTogIkFjdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTp6YXAiLCBlbGVtZW50OiAoYXN5bmMgKCkgPT4gKGF3YWl0IGluaXRfYWN0aW9uczIoKS50aGVuKCgpID0+IGFjdGlvbnNfZXhwb3J0cykpLkdpdG9wc1ZpZXdBY3Rpb25zKSgpIH0sCiAgICAgIHsgbmFtZTogIkFjdGlvbiBMb2ciLCBpY29uTmFtZTogImx1Y2lkZTpzY3JvbGwiLCBlbGVtZW50OiAoYXN5bmMgKCkgPT4gKGF3YWl0IGluaXRfYWN0aW9ubG9nMygpLnRoZW4oKCkgPT4gYWN0aW9ubG9nX2V4cG9ydHMpKS5HaXRvcHNWaWV3QWN0aW9ubG9nKSgpIH0KICAgIF0pOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAicmVzb2x2ZWRWaWV3VGFicyIsIFtdKTsKICAgIC8vIEF1dG8tcmVmcmVzaCB0aW1lcgogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiYXV0b1JlZnJlc2hUaW1lciIsIG51bGwpOwogICAgLy8gV2ViU29ja2V0IGNsaWVudAogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAid3MiLCBudWxsKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIndzUmVjb25uZWN0VGltZXIiLCBudWxsKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIndzSW50ZW50aW9uYWxDbG9zZSIsIGZhbHNlKTsKICAgIGRvY3VtZW50LnRpdGxlID0gIkdpdE9wcyI7CiAgICBjb25zdCBsb2dpblN1YnNjcmlwdGlvbiA9IGxvZ2luU3RhdGVQYXJ0LnNlbGVjdCgoc3RhdGVBcmcpID0+IHN0YXRlQXJnKS5zdWJzY3JpYmUoKGxvZ2luU3RhdGUpID0+IHsKICAgICAgdGhpcy5sb2dpblN0YXRlID0gbG9naW5TdGF0ZTsKICAgICAgaWYgKGxvZ2luU3RhdGUuaXNMb2dnZWRJbikgewogICAgICAgIGNvbm5lY3Rpb25zU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGZldGNoQ29ubmVjdGlvbnNBY3Rpb24sIG51bGwpOwogICAgICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpOwogICAgICB9CiAgICAgIHRoaXMubWFuYWdlQXV0b1JlZnJlc2hUaW1lcigpOwogICAgfSk7CiAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKGxvZ2luU3Vic2NyaXB0aW9uKTsKICAgIGNvbnN0IHVpU3Vic2NyaXB0aW9uID0gdWlTdGF0ZVBhcnQuc2VsZWN0KChzdGF0ZUFyZykgPT4gc3RhdGVBcmcpLnN1YnNjcmliZSgodWlTdGF0ZSkgPT4gewogICAgICB0aGlzLnVpU3RhdGUgPSB1aVN0YXRlOwogICAgICB0aGlzLnN5bmNBcHBkYXNoVmlldyh1aVN0YXRlLmFjdGl2ZVZpZXcpOwogICAgICB0aGlzLm1hbmFnZUF1dG9SZWZyZXNoVGltZXIoKTsKICAgIH0pOwogICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaCh1aVN1YnNjcmlwdGlvbik7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRlZXMtc2ltcGxlLWxvZ2luIG5hbWU9IkdpdE9wcyI+CiAgICAgICAgICA8ZGVlcy1zaW1wbGUtYXBwZGFzaAogICAgICAgICAgICBuYW1lPSJHaXRPcHMiCiAgICAgICAgICAgIC52aWV3VGFicz0ke3RoaXMucmVzb2x2ZWRWaWV3VGFic30KICAgICAgICAgID4KICAgICAgICAgIDwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICAgICAgICA8L2RlZXMtc2ltcGxlLWxvZ2luPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmxvZ2luU3RhdGUuaXNMb2dnZWRJbiA/IGIyYAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhdXRvLXJlZnJlc2gtdG9nZ2xlIgogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdWlTdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24odG9nZ2xlQXV0b1JlZnJlc2hBY3Rpb24sIG51bGwpfQogICAgICAgID4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRvLXJlZnJlc2gtZG90ICR7dGhpcy51aVN0YXRlLmF1dG9SZWZyZXNoID8gImFjdGl2ZSIgOiAiIn0iPjwvc3Bhbj4KICAgICAgICAgIEF1dG8tUmVmcmVzaDogJHt0aGlzLnVpU3RhdGUuYXV0b1JlZnJlc2ggPyAiT04iIDogIk9GRiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgIGA7CiAgfQogIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgIHRoaXMucmVzb2x2ZWRWaWV3VGFicyA9IGF3YWl0IFByb21pc2UuYWxsKAogICAgICB0aGlzLnZpZXdUYWJzLm1hcChhc3luYyAodGFiMikgPT4gKHsKICAgICAgICBuYW1lOiB0YWIyLm5hbWUsCiAgICAgICAgaWNvbk5hbWU6IHRhYjIuaWNvbk5hbWUsCiAgICAgICAgZWxlbWVudDogYXdhaXQgdGFiMi5lbGVtZW50CiAgICAgIH0pKQogICAgKTsKICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgIGNvbnN0IHNpbXBsZUxvZ2luID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc2ltcGxlLWxvZ2luIik7CiAgICBpZiAoc2ltcGxlTG9naW4pIHsKICAgICAgc2ltcGxlTG9naW4uYWRkRXZlbnRMaXN0ZW5lcigibG9naW4iLCAoZTExKSA9PiB7CiAgICAgICAgdGhpcy5sb2dpbihlMTEuZGV0YWlsLmRhdGEudXNlcm5hbWUsIGUxMS5kZXRhaWwuZGF0YS5wYXNzd29yZCk7CiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYXBwRGFzaCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXNpbXBsZS1hcHBkYXNoIik7CiAgICBpZiAoYXBwRGFzaCkgewogICAgICBhcHBEYXNoLmFkZEV2ZW50TGlzdGVuZXIoInZpZXctc2VsZWN0IiwgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHZpZXdOYW1lID0gZTExLmRldGFpbC52aWV3Lm5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICB1aVN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihzZXRBY3RpdmVWaWV3QWN0aW9uLCB7IHZpZXc6IHZpZXdOYW1lIH0pOwogICAgICB9KTsKICAgICAgYXBwRGFzaC5hZGRFdmVudExpc3RlbmVyKCJsb2dvdXQiLCBhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgbG9naW5TdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24obG9nb3V0QWN0aW9uLCBudWxsKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoYXBwRGFzaCAmJiB0aGlzLnJlc29sdmVkVmlld1RhYnMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBpbml0aWFsVmlldyA9IHRoaXMucmVzb2x2ZWRWaWV3VGFicy5maW5kKAogICAgICAgICh0OSkgPT4gdDkubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnVpU3RhdGUuYWN0aXZlVmlldwogICAgICApIHx8IHRoaXMucmVzb2x2ZWRWaWV3VGFic1swXTsKICAgICAgYXdhaXQgYXBwRGFzaC5sb2FkVmlldyhpbml0aWFsVmlldyk7CiAgICB9CiAgICBjb25zdCBsb2dpblN0YXRlID0gbG9naW5TdGF0ZVBhcnQuZ2V0U3RhdGUoKTsKICAgIGlmIChsb2dpblN0YXRlLmlkZW50aXR5Py5qd3QpIHsKICAgICAgaWYgKGxvZ2luU3RhdGUuaWRlbnRpdHkuZXhwaXJlc0F0ID4gRGF0ZS5ub3coKSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZG9tdG9vbHMucGx1Z2lucy50eXBlZHJlcXVlc3QuVHlwZWRSZXF1ZXN0KCIvdHlwZWRyZXF1ZXN0IiwgInZlcmlmeUlkZW50aXR5Iik7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHR5cGVkUmVxdWVzdC5maXJlKHsgaWRlbnRpdHk6IGxvZ2luU3RhdGUuaWRlbnRpdHkgfSk7CiAgICAgICAgICBpZiAocmVzcG9uc2UudmFsaWQpIHsKICAgICAgICAgICAgdGhpcy5sb2dpblN0YXRlID0gbG9naW5TdGF0ZTsKICAgICAgICAgICAgaWYgKHNpbXBsZUxvZ2luKSB7CiAgICAgICAgICAgICAgYXdhaXQgc2ltcGxlTG9naW4uc3dpdGNoVG9TbG90dGVkQ29udGVudCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBsb2dpblN0YXRlUGFydC5kaXNwYXRjaEFjdGlvbihsb2dvdXRBY3Rpb24sIG51bGwpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgY29uc29sZS53YXJuKCJTdG9yZWQgc2Vzc2lvbiBpbnZhbGlkLCByZXR1cm5pbmcgdG8gbG9naW46IiwgZXJyKTsKICAgICAgICAgIGF3YWl0IGxvZ2luU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGxvZ291dEFjdGlvbiwgbnVsbCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IGxvZ2luU3RhdGVQYXJ0LmRpc3BhdGNoQWN0aW9uKGxvZ291dEFjdGlvbiwgbnVsbCk7CiAgICAgIH0KICAgIH0KICB9CiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoVGltZXIoKTsKICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQXV0by1yZWZyZXNoIHRpbWVyIG1hbmFnZW1lbnQKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgbWFuYWdlQXV0b1JlZnJlc2hUaW1lcigpIHsKICAgIHRoaXMuY2xlYXJBdXRvUmVmcmVzaFRpbWVyKCk7CiAgICBjb25zdCB7IGF1dG9SZWZyZXNoLCByZWZyZXNoSW50ZXJ2YWwgfSA9IHRoaXMudWlTdGF0ZTsKICAgIGlmIChhdXRvUmVmcmVzaCAmJiB0aGlzLmxvZ2luU3RhdGUuaXNMb2dnZWRJbikgewogICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImdpdG9wcy1hdXRvLXJlZnJlc2giKSk7CiAgICAgIH0sIHJlZnJlc2hJbnRlcnZhbCk7CiAgICB9CiAgfQogIGNsZWFyQXV0b1JlZnJlc2hUaW1lcigpIHsKICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVGltZXIpIHsKICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9SZWZyZXNoVGltZXIpOwogICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBudWxsOwogICAgfQogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gV2ViU29ja2V0IGNsaWVudCBmb3Igd2ViaG9vayBwdXNoIG5vdGlmaWNhdGlvbnMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgY29ubmVjdFdlYlNvY2tldCgpIHsKICAgIGlmICh0aGlzLndzKSByZXR1cm47CiAgICBjb25zdCBwcm90b2NvbCA9IGxvY2F0aW9uLnByb3RvY29sID09PSAiaHR0cHM6IiA/ICJ3c3M6IiA6ICJ3czoiOwogICAgY29uc3Qgd3NVcmwgPSBgJHtwcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH1gOwogICAgdHJ5IHsKICAgICAgdGhpcy53c0ludGVudGlvbmFsQ2xvc2UgPSBmYWxzZTsKICAgICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQod3NVcmwpOwogICAgICB0aGlzLndzLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZGF0YTExID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgICAgICAgIGlmIChkYXRhMTE/Lm1ldGhvZCA9PT0gIndlYmhvb2tOb3RpZmljYXRpb24iIHx8IGRhdGExMT8udHlwZSA9PT0gIndlYmhvb2tFdmVudCIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIldlYmhvb2sgZXZlbnQgcmVjZWl2ZWQ6IiwgZGF0YTExKTsKICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImdpdG9wcy1hdXRvLXJlZnJlc2giKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy53cy5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHsKICAgICAgICB0aGlzLndzID0gbnVsbDsKICAgICAgICBpZiAoIXRoaXMud3NJbnRlbnRpb25hbENsb3NlICYmIHRoaXMubG9naW5TdGF0ZS5pc0xvZ2dlZEluKSB7CiAgICAgICAgICB0aGlzLndzUmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7CiAgICAgICAgICB9LCA1ZTMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMud3MuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCAoKSA9PiB7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUud2FybigiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkOiIsIGVycik7CiAgICB9CiAgfQogIGRpc2Nvbm5lY3RXZWJTb2NrZXQoKSB7CiAgICB0aGlzLndzSW50ZW50aW9uYWxDbG9zZSA9IHRydWU7CiAgICBpZiAodGhpcy53c1JlY29ubmVjdFRpbWVyKSB7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLndzUmVjb25uZWN0VGltZXIpOwogICAgICB0aGlzLndzUmVjb25uZWN0VGltZXIgPSBudWxsOwogICAgfQogICAgaWYgKHRoaXMud3MpIHsKICAgICAgdGhpcy53cy5jbG9zZSgpOwogICAgICB0aGlzLndzID0gbnVsbDsKICAgIH0KICB9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIExvZ2luCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIGFzeW5jIGxvZ2luKHVzZXJuYW1lLCBwYXNzd29yZCkgewogICAgY29uc3QgZG9tdG9vbHMyID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICBjb25zdCBzaW1wbGVMb2dpbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLXNpbXBsZS1sb2dpbiIpOwogICAgY29uc3QgZm9ybSA9IHNpbXBsZUxvZ2luPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgIGlmIChmb3JtKSB7CiAgICAgIGZvcm0uc2V0U3RhdHVzKCJwZW5kaW5nIiwgIkxvZ2dpbmcgaW4uLi4iKTsKICAgIH0KICAgIGNvbnN0IG5ld1N0YXRlID0gYXdhaXQgbG9naW5TdGF0ZVBhcnQuZGlzcGF0Y2hBY3Rpb24obG9naW5BY3Rpb24sIHsKICAgICAgdXNlcm5hbWUsCiAgICAgIHBhc3N3b3JkCiAgICB9KTsKICAgIGlmIChuZXdTdGF0ZS5pZGVudGl0eSkgewogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIkxvZ2dlZCBpbiEiKTsKICAgICAgfQogICAgICBpZiAoc2ltcGxlTG9naW4pIHsKICAgICAgICBhd2FpdCBzaW1wbGVMb2dpbi5zd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChmb3JtKSB7CiAgICAgICAgZm9ybS5zZXRTdGF0dXMoImVycm9yIiwgIkxvZ2luIGZhaWxlZCEiKTsKICAgICAgICBhd2FpdCBkb210b29sczIuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICAgIGZvcm0ucmVzZXQoKTsKICAgICAgfQogICAgfQogIH0KICBzeW5jQXBwZGFzaFZpZXcodmlld05hbWUpIHsKICAgIGNvbnN0IGFwcERhc2ggPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc2ltcGxlLWFwcGRhc2giKTsKICAgIGlmICghYXBwRGFzaCB8fCB0aGlzLnJlc29sdmVkVmlld1RhYnMubGVuZ3RoID09PSAwKSByZXR1cm47CiAgICBjb25zdCB0YXJnZXRUYWIgPSB0aGlzLnJlc29sdmVkVmlld1RhYnMuZmluZCgodDkpID0+IHQ5Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdmlld05hbWUpOwogICAgaWYgKCF0YXJnZXRUYWIpIHJldHVybjsKICAgIGFwcERhc2gubG9hZFZpZXcodGFyZ2V0VGFiKTsKICB9Cn07Cl9pbml0MTAgPSBfX2RlY29yYXRvclN0YXJ0KF9hMTMpOwpfbG9naW5TdGF0ZSA9IG5ldyBXZWFrTWFwKCk7Cl91aVN0YXRlID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgImxvZ2luU3RhdGUiLCBfbG9naW5TdGF0ZV9kZWMsIEdpdG9wc0Rhc2hib2FyZCwgX2xvZ2luU3RhdGUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAidWlTdGF0ZSIsIF91aVN0YXRlX2RlYywgR2l0b3BzRGFzaGJvYXJkLCBfdWlTdGF0ZSk7CkdpdG9wc0Rhc2hib2FyZCA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDAsICJHaXRvcHNEYXNoYm9hcmQiLCBfR2l0b3BzRGFzaGJvYXJkX2RlY29yYXRvcnMsIEdpdG9wc0Rhc2hib2FyZCk7Cl9fcHVibGljRmllbGQoR2l0b3BzRGFzaGJvYXJkLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYm90dG9tOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDUwLCAwLjkpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDE0cHg7CiAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDQwLCA0MCwgNzAsIDAuOTUpOwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjNjY2OwogICAgICB9CiAgICAgIC5hdXRvLXJlZnJlc2gtZG90LmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwZmY4ODsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMSwgR2l0b3BzRGFzaGJvYXJkKTsKCi8vIHRzX3dlYi9lbGVtZW50cy9pbmRleC50cwphd2FpdCBpbml0X292ZXJ2aWV3KCk7CmF3YWl0IGluaXRfY29ubmVjdGlvbnMyKCk7CmF3YWl0IGluaXRfcHJvamVjdHMyKCk7CmF3YWl0IGluaXRfZ3JvdXBzMigpOwphd2FpdCBpbml0X3NlY3JldHMyKCk7CmF3YWl0IGluaXRfcGlwZWxpbmVzMigpOwphd2FpdCBpbml0X2J1aWxkbG9nKCk7CmF3YWl0IGluaXRfYWN0aW9uczIoKTsKCi8vIHRzX3dlYi9pbmRleC50cwppbml0X3BsdWdpbnM1KCk7CmluaXRfZGlzdF90czI5KCk7CmRpc3RfdHNfZXhwb3J0czI5LnJlbmRlcihiMmAKICA8Z2l0b3BzLWRhc2hib2FyZD48L2dpdG9wcy1kYXNoYm9hcmQ+CmAsIGRvY3VtZW50LmJvZHkpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L3JlYWN0aXZlLWVsZW1lbnQuanM6CmxpdC1odG1sL2xpdC1odG1sLmpzOgpsaXQtZWxlbWVudC9saXQtZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcHJvcGVydHkuanM6CmxpdC1odG1sL2RpcmVjdGl2ZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3N0YXRlLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9iYXNlLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanM6CmxpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy91bnRpbC5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1yZXBsYWNlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9yZXBlYXQuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKbGl0LWh0bWwvaXMtc2VydmVyLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCnN3ZWV0LXNjcm9sbC9zd2VldC1zY3JvbGwuanM6CiAgKCohIEBwcmVzZXJ2ZSBzd2VldC1zY3JvbGwgdjQuMC4wIC0gdHN1eW9zaGl3YWRhIHwgTUlUIExpY2Vuc2UgKikKICAoKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UKICAgICAgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUKICAgICAgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAKICAgICAgVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogICAgICBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECiAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCiAgICAgIE1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCiAgCiAgICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwogICAgICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICopCgpsaXQtaHRtbC9zdGF0aWMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3ByaXZhdGUtYXN5bmMtaGVscGVycy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9rZXllZC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1icmFuZHMtc3ZnLWljb25zL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvaW5kZXgubWpzOgogICgqIQogICAqIEZvbnQgQXdlc29tZSBGcmVlIDcuMi4wIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tCiAgICogTGljZW5zZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tL2xpY2Vuc2UvZnJlZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSkKICAgKiBDb3B5cmlnaHQgMjAyNiBGb250aWNvbnMsIEluYy4KICAgKikKCmx1Y2lkZS9kaXN0L2Nqcy9sdWNpZGUuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgbHVjaWRlIHYwLjU2NC4wIC0gSVNDCiAgICoKICAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBJU0MgbGljZW5zZS4KICAgKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCmliYW50b29scy9qc25leHQvaWJhbnRvb2xzLmpzOgogICgqIQogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IFNhxaFhIEpvdmFuacSHCiAgICogTGljZW5zZWQgdW5kZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wIG9yIHRoZSBNSVQgbGljZW5zZSwKICAgKiBhdCB5b3VyIG9wdGlvbi4gVGhpcyBmaWxlIG1heSBub3QgYmUgY29waWVkLCBtb2RpZmllZCwgb3IgZGlzdHJpYnV0ZWQKICAgKiBleGNlcHQgYWNjb3JkaW5nIHRvIHRob3NlIHRlcm1zLgogICAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFNhxaFhIEpvdmFuacSHCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCBvciBNUEwvMi4wCiAgICopCiAgKCoqCiAgICogVmFsaWRhdGlvbiwgZXh0cmFjdGlvbiBhbmQgY3JlYXRpb24gb2YgSUJBTiwgQkJBTiwgQklDL1NXSUZUIG51bWJlcnMgcGx1cyBzb21lIG90aGVyIGhlbHBmdWwgc3R1ZmYKICAgKiBAcGFja2FnZSBEb2N1bWVudGF0aW9uCiAgICogQGF1dGhvciBTYcWhYSBKb3ZhbmnEhwogICAqIEBtb2R1bGUgaWJhbnRvb2xzCiAgICogQHZlcnNpb24gNC41LjEKICAgKiBAbGljZW5zZSBNSVQgb3IgTVBMLTIuMAogICAqIEBwcmVmZXJyZWQKICAgKikKKi8KLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLTE3NzIxOTA3MzAzMjAuanMubWFwCg==" }, { "path": "index.html", diff --git a/ts_interfaces/data/actionlog.ts b/ts_interfaces/data/actionlog.ts new file mode 100644 index 0000000..151ac01 --- /dev/null +++ b/ts_interfaces/data/actionlog.ts @@ -0,0 +1,13 @@ +export type TActionType = 'create' | 'update' | 'delete' | 'pause' | 'resume' | 'test' | 'scan'; +export type TActionEntity = 'connection' | 'secret' | 'pipeline'; + +export interface IActionLogEntry { + id: string; + timestamp: number; + actionType: TActionType; + entityType: TActionEntity; + entityId: string; + entityName: string; + details: string; + username: string; +} diff --git a/ts_interfaces/data/connection.ts b/ts_interfaces/data/connection.ts index 2cc767d..cb1731b 100644 --- a/ts_interfaces/data/connection.ts +++ b/ts_interfaces/data/connection.ts @@ -7,5 +7,5 @@ export interface IProviderConnection { baseUrl: string; token: string; createdAt: number; - status: 'connected' | 'disconnected' | 'error'; + status: 'connected' | 'disconnected' | 'error' | 'paused'; } diff --git a/ts_interfaces/data/index.ts b/ts_interfaces/data/index.ts index 032088c..fad5acb 100644 --- a/ts_interfaces/data/index.ts +++ b/ts_interfaces/data/index.ts @@ -4,3 +4,4 @@ export * from './project.ts'; export * from './group.ts'; export * from './secret.ts'; export * from './pipeline.ts'; +export * from './actionlog.ts'; diff --git a/ts_interfaces/requests/actionlog.ts b/ts_interfaces/requests/actionlog.ts new file mode 100644 index 0000000..c0b8195 --- /dev/null +++ b/ts_interfaces/requests/actionlog.ts @@ -0,0 +1,19 @@ +import * as plugins from '../plugins.ts'; +import * as data from '../data/index.ts'; + +export interface IReq_GetActionLog extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IReq_GetActionLog +> { + method: 'getActionLog'; + request: { + identity: data.IIdentity; + limit?: number; + offset?: number; + entityType?: data.TActionEntity; + }; + response: { + entries: data.IActionLogEntry[]; + total: number; + }; +} diff --git a/ts_interfaces/requests/connections.ts b/ts_interfaces/requests/connections.ts index 6a4cbaf..0005699 100644 --- a/ts_interfaces/requests/connections.ts +++ b/ts_interfaces/requests/connections.ts @@ -63,6 +63,21 @@ export interface IReq_TestConnection extends plugins.typedrequestInterfaces.impl }; } +export interface IReq_PauseConnection extends plugins.typedrequestInterfaces.implementsTR< + plugins.typedrequestInterfaces.ITypedRequest, + IReq_PauseConnection +> { + method: 'pauseConnection'; + request: { + identity: data.IIdentity; + connectionId: string; + paused: boolean; + }; + response: { + connection: data.IProviderConnection; + }; +} + export interface IReq_DeleteConnection extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteConnection diff --git a/ts_interfaces/requests/index.ts b/ts_interfaces/requests/index.ts index a3d99b2..b52c5ad 100644 --- a/ts_interfaces/requests/index.ts +++ b/ts_interfaces/requests/index.ts @@ -7,3 +7,4 @@ export * from './pipelines.ts'; export * from './logs.ts'; export * from './webhook.ts'; export * from './actions.ts'; +export * from './actionlog.ts'; diff --git a/ts_web/appstate.ts b/ts_web/appstate.ts index b6a65ac..dd71284 100644 --- a/ts_web/appstate.ts +++ b/ts_web/appstate.ts @@ -29,6 +29,11 @@ export interface IDataState { currentJobLog: string; } +export interface IActionLogState { + entries: interfaces.data.IActionLogEntry[]; + total: number; +} + export interface IUiState { activeView: string; autoRefresh: boolean; @@ -70,6 +75,15 @@ export const dataStatePart = await appState.getStatePart( 'soft', ); +export const actionLogStatePart = await appState.getStatePart( + 'actionLog', + { + entries: [], + total: 0, + }, + 'soft', +); + export const uiStatePart = await appState.getStatePart( 'ui', { @@ -227,6 +241,58 @@ export const deleteConnectionAction = connectionsStatePart.createAction<{ } }); +export const pauseConnectionAction = connectionsStatePart.createAction<{ + connectionId: string; + paused: boolean; +}>(async (statePartArg, dataArg) => { + const context = getActionContext(); + try { + const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest< + interfaces.requests.IReq_PauseConnection + >('/typedrequest', 'pauseConnection'); + await typedRequest.fire({ + identity: context.identity!, + ...dataArg, + }); + // Re-fetch to get updated status + const listReq = new plugins.domtools.plugins.typedrequest.TypedRequest< + interfaces.requests.IReq_GetConnections + >('/typedrequest', 'getConnections'); + const listResp = await listReq.fire({ identity: context.identity! }); + return { ...statePartArg.getState(), connections: listResp.connections }; + } catch (err) { + console.error('Failed to pause/resume connection:', err); + return statePartArg.getState(); + } +}); + +export const updateConnectionAction = connectionsStatePart.createAction<{ + connectionId: string; + name?: string; + baseUrl?: string; + token?: string; +}>(async (statePartArg, dataArg) => { + const context = getActionContext(); + try { + const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest< + interfaces.requests.IReq_UpdateConnection + >('/typedrequest', 'updateConnection'); + await typedRequest.fire({ + identity: context.identity!, + ...dataArg, + }); + // Re-fetch to get updated data + const listReq = new plugins.domtools.plugins.typedrequest.TypedRequest< + interfaces.requests.IReq_GetConnections + >('/typedrequest', 'getConnections'); + const listResp = await listReq.fire({ identity: context.identity! }); + return { ...statePartArg.getState(), connections: listResp.connections }; + } catch (err) { + console.error('Failed to update connection:', err); + return statePartArg.getState(); + } +}); + // ============================================================================ // Projects Actions // ============================================================================ @@ -567,6 +633,33 @@ export const fetchJobLogAction = dataStatePart.createAction<{ } }); +// ============================================================================ +// Action Log Actions +// ============================================================================ + +export const fetchActionLogAction = actionLogStatePart.createAction<{ + limit?: number; + offset?: number; + entityType?: interfaces.data.TActionEntity; +} | null>(async (statePartArg, dataArg) => { + const context = getActionContext(); + try { + const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest< + interfaces.requests.IReq_GetActionLog + >('/typedrequest', 'getActionLog'); + const response = await typedRequest.fire({ + identity: context.identity!, + limit: dataArg?.limit, + offset: dataArg?.offset, + entityType: dataArg?.entityType, + }); + return { entries: response.entries, total: response.total }; + } catch (err) { + console.error('Failed to fetch action log:', err); + return statePartArg.getState(); + } +}); + // ============================================================================ // UI Actions // ============================================================================ diff --git a/ts_web/elements/gitops-dashboard.ts b/ts_web/elements/gitops-dashboard.ts index b27539b..385b085 100644 --- a/ts_web/elements/gitops-dashboard.ts +++ b/ts_web/elements/gitops-dashboard.ts @@ -19,6 +19,7 @@ import type { GitopsViewSecrets } from './views/secrets/index.js'; import type { GitopsViewPipelines } from './views/pipelines/index.js'; import type { GitopsViewBuildlog } from './views/buildlog/index.js'; import type { GitopsViewActions } from './views/actions/index.js'; +import type { GitopsViewActionlog } from './views/actionlog/index.js'; @customElement('gitops-dashboard') export class GitopsDashboard extends DeesElement { @@ -41,6 +42,7 @@ export class GitopsDashboard extends DeesElement { { name: 'Pipelines', iconName: 'lucide:play', element: (async () => (await import('./views/pipelines/index.js')).GitopsViewPipelines)() }, { name: 'Build Log', iconName: 'lucide:scrollText', element: (async () => (await import('./views/buildlog/index.js')).GitopsViewBuildlog)() }, { name: 'Actions', iconName: 'lucide:zap', element: (async () => (await import('./views/actions/index.js')).GitopsViewActions)() }, + { name: 'Action Log', iconName: 'lucide:scroll', element: (async () => (await import('./views/actionlog/index.js')).GitopsViewActionlog)() }, ]; private resolvedViewTabs: Array<{ name: string; iconName: string; element: any }> = []; diff --git a/ts_web/elements/views/actionlog/index.ts b/ts_web/elements/views/actionlog/index.ts new file mode 100644 index 0000000..f98200f --- /dev/null +++ b/ts_web/elements/views/actionlog/index.ts @@ -0,0 +1,101 @@ +import * as plugins from '../../../plugins.js'; +import * as appstate from '../../../appstate.js'; +import { viewHostCss } from '../../shared/index.js'; +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, + type TemplateResult, +} from '@design.estate/dees-element'; + +@customElement('gitops-view-actionlog') +export class GitopsViewActionlog extends DeesElement { + @state() + accessor actionLogState: appstate.IActionLogState = { + entries: [], + total: 0, + }; + + @state() + accessor selectedEntityType: string = 'all'; + + private _autoRefreshHandler: () => void; + + constructor() { + super(); + const sub = appstate.actionLogStatePart + .select((s) => s) + .subscribe((s) => { this.actionLogState = s; }); + this.rxSubscriptions.push(sub); + + this._autoRefreshHandler = () => this.refresh(); + document.addEventListener('gitops-auto-refresh', this._autoRefreshHandler); + } + + public override disconnectedCallback() { + super.disconnectedCallback(); + document.removeEventListener('gitops-auto-refresh', this._autoRefreshHandler); + } + + public static styles = [ + cssManager.defaultStyles, + viewHostCss, + ]; + + public render(): TemplateResult { + const entityOptions = [ + { option: 'All', key: 'all' }, + { option: 'Connection', key: 'connection' }, + { option: 'Secret', key: 'secret' }, + { option: 'Pipeline', key: 'pipeline' }, + ]; + + return html` +
Action Log
+
Audit trail of all operations performed in the system
+
+ o.key === this.selectedEntityType)} + @selectedOption=${(e: CustomEvent) => { + this.selectedEntityType = e.detail.key; + this.refresh(); + }} + > + this.refresh()}>Refresh +
+ ({ + Time: new Date(item.timestamp).toLocaleString(), + Action: item.actionType, + Entity: item.entityType, + Name: item.entityName, + Details: item.details, + User: item.username, + })} + .dataActions=${[]} + > + `; + } + + async firstUpdated() { + await this.refresh(); + } + + private async refresh() { + const entityType = this.selectedEntityType === 'all' + ? undefined + : this.selectedEntityType as any; + await appstate.actionLogStatePart.dispatchAction(appstate.fetchActionLogAction, { + limit: 100, + entityType, + }); + } +} diff --git a/ts_web/elements/views/connections/index.ts b/ts_web/elements/views/connections/index.ts index 3614c4e..971c633 100644 --- a/ts_web/elements/views/connections/index.ts +++ b/ts_web/elements/views/connections/index.ts @@ -66,6 +66,11 @@ export class GitopsViewConnections extends DeesElement { Created: new Date(item.createdAt).toLocaleDateString(), })} .dataActions=${[ + { + name: 'Edit', + iconName: 'lucide:edit', + action: async (item: any) => { await this.editConnection(item); }, + }, { name: 'Test', iconName: 'lucide:plug', @@ -76,6 +81,31 @@ export class GitopsViewConnections extends DeesElement { ); }, }, + { + name: 'Pause/Resume', + iconName: 'lucide:pauseCircle', + action: async (item: any) => { + const isPaused = item.status === 'paused'; + const actionLabel = isPaused ? 'Resume' : 'Pause'; + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: `${actionLabel} Connection`, + content: html`

Are you sure you want to ${actionLabel.toLowerCase()} connection "${item.name}"?

`, + menuOptions: [ + { name: 'Cancel', action: async (modal: any) => { modal.destroy(); } }, + { + name: actionLabel, + action: async (modal: any) => { + await appstate.connectionsStatePart.dispatchAction( + appstate.pauseConnectionAction, + { connectionId: item.id, paused: !isPaused }, + ); + modal.destroy(); + }, + }, + ], + }); + }, + }, { name: 'Delete', iconName: 'lucide:trash2', @@ -112,6 +142,51 @@ export class GitopsViewConnections extends DeesElement { await appstate.connectionsStatePart.dispatchAction(appstate.fetchConnectionsAction, null); } + private async editConnection(item: any) { + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Edit Connection', + content: html` + +
Provider: ${item.providerType}
+
+ +
+
+ +
+
+ +
+ `, + menuOptions: [ + { name: 'Cancel', action: async (modal: any) => { modal.destroy(); } }, + { + name: 'Save', + action: async (modal: any) => { + const inputs = modal.shadowRoot.querySelectorAll('dees-input-text'); + const data: any = {}; + for (const input of inputs) { + data[input.key] = input.value || ''; + } + await appstate.connectionsStatePart.dispatchAction( + appstate.updateConnectionAction, + { + connectionId: item.id, + name: data.name, + baseUrl: data.baseUrl, + ...(data.token ? { token: data.token } : {}), + }, + ); + modal.destroy(); + }, + }, + ], + }); + } + private async addConnection() { await plugins.deesCatalog.DeesModal.createAndShow({ heading: 'Add Connection', diff --git a/ts_web/elements/views/secrets/index.ts b/ts_web/elements/views/secrets/index.ts index 8f3f95c..2403298 100644 --- a/ts_web/elements/views/secrets/index.ts +++ b/ts_web/elements/views/secrets/index.ts @@ -171,11 +171,24 @@ export class GitopsViewSecrets extends DeesElement { name: 'Delete', iconName: 'lucide:trash2', action: async (item: any) => { - await appstate.dataStatePart.dispatchAction(appstate.deleteSecretAction, { - connectionId: this.selectedConnectionId, - scope: item.scope, - scopeId: item.scopeId, - key: item.key, + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Delete Secret', + content: html`

Are you sure you want to delete secret "${item.key}"?

`, + menuOptions: [ + { name: 'Cancel', action: async (modal: any) => { modal.destroy(); } }, + { + name: 'Delete', + action: async (modal: any) => { + await appstate.dataStatePart.dispatchAction(appstate.deleteSecretAction, { + connectionId: this.selectedConnectionId, + scope: item.scope, + scopeId: item.scopeId, + key: item.key, + }); + modal.destroy(); + }, + }, + ], }); }, },